Speak the v2 draft's one language on every page: one type scale, three button sizes, inspector dialogs #261
No reviewers
Labels
No labels
No milestone
No project
No assignees
5 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Grandiras/Ponente!261
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "ui-v2-consistency"
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?
The second half of the v2 polishing pass. I compared every screen with the Figma draft: the screens' structure matched, but the details did not. About 100 v1
remfont sizes survived beside the v2 scale, so the same role rendered at a different size on each page. Buttons came in 24.6 to 48px, with labels at 12 to 14.4px. What's new and Report a problem still had v1 dialog chrome. With a card docked, the inspector covered the board's last column.What changes
remfont size is left inapp.css. Distinct font sizes went from 21 to 13 across the audited pages..btn-smis 28px for inline actions in groups and rows, and the new.btn-lgis 44px for the auth panel and a phone's sheets. The per-page copies are gone (Add card, Add column/tag, the states' actions, comment buttons, the deleted-board banner, reconnect, the calendar's subscribe buttons, Show earlier, Clear, Move, the deck toggle, the modal footers): each now uses a class in the markup. On a phone a.btn-smkeeps its look and gets a 44px tap area through::after, the same pattern.row-deletealready uses. Button heights went from eleven to three..modal-header,.modal-bodyand.modal-footerhave no hairlines, a 17/22 title, a 32px round × (now oneCloseButtoncomponent, where five dialogs drew it by hand) and actions at the foot on the right. What's new puts its timeline in one white group; the Report a problem text box is the card description's field; the calendar's day sheet and subscription panel match.board.spec.jsasserts it.modal.delete); they now say "Delete" (settings.delete.short).var(--border)is fixed.Left as they are
Changelog
No new line. All of this polishes unreleased v2 work that
Changelog.Unreleasedalready describes ("every page redrawn", "a calmer card panel"), and members have not seen the inconsistent state.Docs
frontend.md: the button sizes and the type scale as rules, and the v2 status line.ui.md: every dialog speaks the inspector's language, and the inspector narrows the board.calendar.md: its dialogs.Verified
tools/verify.shgreen (600 unit tests).🤖 Generated with Claude Code
🤖 Reviewing this PR — the review will link the full session transcript.
📜 Live transcript — updating every ~5 minutes while the review runs.
🤖 Reviewing this PR — follow along in the action run; the reply will link the full session transcript.
📜 Live transcript — updating every ~5 minutes while the task runs.
✅ Verdict: approve — no blocking issues found.
A coherent consolidation. The shared button sizes, the
CloseButtoncomponent, the dialog chrome and the type scale all read consistently. I checked that the removed CSS has no remaining users in the markup:.modal-footer button,.calendar-subscribe-action,.calendar-day-sheet-close,.board-deleted-home,.login-actionand.invite-linkare all gone. Every modal footer button now carries an explicit class. The remaining.fieldwrappers sit inside the login or request cards, which have their own input styling.Minor remarks, not blocking:
.btn-sm::aftertap area relies onposition: relative, which the shared button rule sets. Any.btn-smthat doesn't also carry a shared button class would anchor its hit area to an ancestor. All the call sites I saw do carry one..column-deck-morehand-copies the small-button size because it isn't a.btn-sm. That is acceptable, and the comment explains it.🧠 claude-sonnet-5-5 · ⏱ 0m 12s · 4 turns · tokens: 58.0k in / 1.1k out (+150.1k cache-read)
📜 Full session transcript
Full Playwright suite on an isolated stack: 162/162 on the head,
627de7b.🤖 Generated with Claude Code
✅ Verdict: approve — no blocking issues found.
A careful, coherent pass: the three-size button system is real (base rule plus
.btn-sm/.btn-lg, all per-page copies now class-driven in markup), the inspector dialog language is applied to What's new, Report a problem and both calendar panels, and the locale key (settings.delete.short) is added in both en and de. I checked the risky spots: everymodal-footer/modal-headerbutton has a class, the five former hand-drawn × are allCloseButton, no markup or e2e spec still references a deleted class (invite-created,composer-error,changelog-body,calendar-day-sheet-close,login-actionare all gone from markup too), the leftover.fieldwrappers all sit inside.login-card, which still styles its own inputs, and the inspector column-narrowing composes correctly with the ≥960pxflex: 1 1 320px / min-width: 320pxrule — the 240px floor only bites past three columns, where the board scrolls, exactly what the newboard.spec.jsassertions pin. The phone.btn-sm::aftertarget math (28 + 2×8 = 44) matches the mobile test. Docs read as accurate to the CSS. Two non-blocking notes: the deck toggle's hover is now the ungated.btn-flat:hover(it was previously inside@media (hover: hover)because a tap leaves:hoverstuck on touch — the comment above.column-deck-more:hoverstill says so), and prose says 247px inui.mdvs 248px in the PR text. Neither blocks.⏱ 18m 35s · 66 steps · $0.1798 · tokens: 524.1k in / 3.5k out (+3105.9k cache-read) · Go: 5h 1% · wk 3% · mo 92%
📜 Full session transcript
@ -303,0 +316,4 @@color: var(--brand-ink);}.btn-flat:hover:not(:disabled) { background: var(--brand-glow); }Minor: this hover is now ungated, and it absorbed
.column-deck-toggle:hover, which was previously inside@media (hover: hover)precisely because a tap leaves:hoverstuck on touch (the comment above.column-deck-more:hoverstill documents that). On a phone, tapping a.btn-flat— the deck toggle, the due Clear, Show earlier — will leave the brand-glow tint on it until the next tap. Pre-existing pattern for other.btn-flats, so not a blocker, but wrapping this one hover (or the two it inherited) in the same(hover: hover)guard would keep the behaviour the old code deliberately had.🤖 Reviewing this PR — the review will link the full session transcript.
📜 Live transcript — updating every ~5 minutes while the review runs.
🤖 Reviewing this PR — follow along in the action run; the reply will link the full session transcript.
📜 Live transcript — updating every ~5 minutes while the task runs.
✅ Verdict: approve — no blocking issues found.
This is a re-review. My earlier pass approved with only non-blocking remarks, so nothing blocking was outstanding. I did not run the app or the tests; I read the diff only.
CloseButtoncomponent, the unified dialog chrome and the px type scale are applied consistently..modal-footer buttonrequires..board:has(~ .modal-backdrop-dockable) > .columnfloor look sound.Non-blocking notes: a
.btn-smneeds one of the shared button classes for its phone::aftertap area to anchor to it (it relies onposition: relative)..column-deck-morehand-copies the small-button size, and a comment explains why.🧠 claude-sonnet-5-5 · ⏱ 0m 4s · 2 turns · tokens: 56.8k in / 376 out (+12.2k cache-read)
📜 Full session transcript
✅ Verdict: approve — no blocking issues found.
Good to merge. Re-review: my one inline note from the last pass is resolved —
.btn-flat:hoveris now inside@media (hover: hover)with the comment, so taps on touch no longer leave the tint stuck (and.column-deck-more:hoverremains guarded the same way). The other spot-checked risks still hold: all 21.btn-smcall sites carry a shared base class so the phone::aftertap area anchors correctly; no markup or spec references the deleted classes (composer-error,calendar-day-sheet-close,board-deleted-home,login-action,invite-created...); the remaining.fieldwrappers all sit inside.login-card, which retains its own field rules; the invalidvar(--border)use is fixed (--border-2);--scrimis a defined token. The new e2e assertions (viewport pinned to 1440×900, column floor at 239.5px, last column beside the panel when ≤3 columns) match the CSS behavior. Docs (frontend.md, ui.md, calendar.md) accurately describe the button sizes, type scale and inspector narrowing. Non-blocking nit:docs/ui.mdsays 247px where the PR text says 248px for the draft's column width at 1440 — a rounding of the same figure, not a code issue.⏱ 0m 28s · 12 steps · $0.0224 · tokens: 52.4k in / 1.9k out (+431.2k cache-read) · Go: 5h 1% · wk 3% · mo 92%
📜 Full session transcript