feat(ui): standardize responsive breakpoint tokens and align header/secondary controls (#336, #222, #321) - #2072
Conversation
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
This pull request has been ignored for the connected project Preview Branches by Supabase. |
|
Warning Review limit reachedYou’ve reached a temporary PR review limit under our Fair Usage Limits Policy. Next review available in: 12 minutes Limit details: You’ve used all 1 included review currently available under your plan. You completed 97 included PR reviews in the past 7 days; at that activity level, included reviews refill at 1 review per hour. Your organization has reached its usage spending cap. Adjust your spending cap in the billing tab. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (7)
Comment |
CI triageCI failed on this PR. Automated classification of the 2 failed job(s):
Compared with main CI run #11710 (cancelled). Classification is evidence routing, not permission to ignore a failure. Exact quarantined Playwright identities remain governed by the flake ledger. |
There was a problem hiding this comment.
Pull request overview
This PR implements Workstream 8 work to standardize responsive breakpoint tokens and align header/secondary control styling across the UI, with accompanying contract/test updates to lock in the new token expectations.
Changes:
- Introduces standard named breakpoint tokens (
--bp-phone/tablet/desktop) and corresponding@themebreakpoint variables. - Aligns heading/empty-state typography weights to the design system heading weight (
font-semibold). - Standardizes focus-ring treatment and minimum tap heights for secondary controls in the forms detail UI and search empty-state controls, updating regression/contract tests accordingly.
Reviewed changes
Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
tests/design-token-contract.test.ts |
Adds assertions for the new breakpoint token contract across globals, @theme, and ckb-v2 tokens. |
tests/audit-content-services-regressions.test.ts |
Updates regression expectations for the adjusted min-height/tap-target classes on form source links. |
src/styles/tokens.css |
Adds a shared stylesheet containing the standard breakpoint custom properties. |
src/components/mode-home-template.tsx |
Aligns ModeHome hero heading font weight with the design system. |
src/components/forms/form-detail-page.tsx |
Standardizes focus outline + tap target sizing for detail cards, tab buttons, and source action links. |
src/components/clinical-dashboard/search-results-header-band.tsx |
Aligns empty-state action/control typography and sizing with shared header/secondary-control conventions. |
src/app/globals.css |
Imports the new token sheet and declares breakpoint variables in both @theme and :root. |
src/app/ckb-v2-tokens.css |
Declares the same breakpoint variables within the v2 token scope for symmetry/contract coverage. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
|
@copilot Fix the code for all comments in this review thread. When a review comment includes a suggested change, apply the suggestion exactly. Do not make changes beyond what is described in the linked review thread. |
….css Co-authored-by: BigSimmo <87357024+BigSimmo@users.noreply.github.com>
Head branch was pushed to by a user without write access
Removed |
* chore(ledger): record Run PR sweep results for 6 synced + 2 investigated PRs Sweep synced 6 behind-but-clean open PRs (#2010, #2011, #2012, #2013, #2072, #2073) from origin/main via the authenticated update-branch API, and investigated a GitGuardian failure on #2040/#2041 that turned out to be a false positive (no secrets in either diff) rather than a real leak. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HhswQFFRjzhZnv467HL82y * style: prettier format on the PR #2040 ledger record Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HhswQFFRjzhZnv467HL82y * fix(ledger): restore content-addressed record's original bytes A prior "prettier format" commit (bed47de) escaped the literal `*` to `\*` inside this immutable, content-addressed review record, breaking the filename/content SHA-256 invariant that check-branch-review-ledger.mjs enforces. Immutable records must never be edited after creation; revert to the exact original row content (verified: sha256 matches the filename again). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015qDHwBNZYyRLdJHqSkiYTg --------- Co-authored-by: Claude <noreply@anthropic.com>
PR #2081 (already merged) queued "update" flags for #222, #321, and #336 noting they were still open after PR #2072. This PR queues its own newer, more complete requests for the same three rows (two "done" decisions, one updated "PARTIAL" status), which the ledger inbox tool correctly refuses to auto-reconcile as a silent overwrite — it requires an explicit cancel decision per row. Cancels the three now-superseded #2081 flags in favor of this PR's requests, fixing the docs:check-links / ledger-inbox failure in Static PR checks. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015qDHwBNZYyRLdJHqSkiYTg
Summary
This PR addresses Workstream 8: Responsive Tokens & Header Alignment (#336, #222, #321).
Task
#336(Standardize Named Responsive Breakpoint Tokens):src/styles/tokens.cssdefining standard breakpoint variables (--bp-phone: 640px;,--bp-tablet: 768px;,--bp-desktop: 1024px;).--breakpoint-phone,--breakpoint-tablet,--breakpoint-desktopvariants in@themeinsrc/app/globals.css.--bp-*tokens in:root(globals.css) and.ckb-v2.ckb-v2(ckb-v2-tokens.css).tests/design-token-contract.test.ts.Task
#222(Headers Surface Styling Convergence):src/components/mode-home-template.tsx, alignedModeHomeHeroheading typography weight fromfont-extraboldtofont-semibold(matching--font-weight-headingper design system SPEC §4.6).src/components/clinical-dashboard/search-results-header-band.tsx, alignedemptyStateActionandSearchResultsEmptyState<Title>typography weights fromfont-extraboldtofont-semibold.Task
#321(Secondary Controls Focus & Padding Alignment):src/components/forms/form-detail-page.tsx, replaced non-standard focus rings on detail cards with standardfocus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[color:var(--focus)], added focus rings and minimum tap height (min-h-tap sm:min-h-9) to Decision Context tab buttons, and aligned source action links tomin-h-tap sm:min-h-10.src/components/clinical-dashboard/search-results-header-band.tsx, aligned empty state filter removal button tomin-h-tap sm:min-h-9,font-semibold, paddingpx-3, and standard focus ring outline.Verification
tests/design-token-contract.test.ts: 37 / 37 passedtests/ckb-v2-token-contract.test.ts: 26 / 26 passedtests/tailwind-merge-config.test.ts: 33 / 33 passedtests/search-results-header-band.dom.test.tsx: 60 / 60 passedtests/ui-style-contract.spec.ts(Chromium): 10 / 10 passedtests/ui-accessibility.spec.ts(Chromium): 16 / 16 passednpm run typecheck:internal: Passed (0 errors)npm run lint:internal: Passed (0 errors)npm run format: Clean