Skip to content

style(web): one scale for type, icons, radii, hover, borders and timeline colours - #1988

Merged
Makisuo merged 3 commits into
ui-consistency-3from
ui-consistency-4
Oct 30, 2026
Merged

Makisuo merged 3 commits into
ui-consistency-3from
ui-consistency-4

Conversation

@Makisuo

@Makisuo Makisuo commented Oct 30, 2026 •

Copy link
Copy Markdown
Collaborator

Stack: #1985 tokens and primitives → #1986 kit pieces → #1987 migrations → #1988 scale cleanup

Fourth PR in the UI consistency stack (on #1987). It puts sizes and steps on one scale, and fixes the dark-only colours that broke light mode.

Changes

Light-mode trace timeline. Bar fills were hardcoded dark (oklch(0.22 …)), so light mode drew near-black bars with dark labels on them. Fills are now the bar's own colour washed into --background, borders use the hue or --severity-error. The service-map namespace labels get the same treatment.

Before After

One scale, applied across apps/web (about 180 files, class swaps only):

  • Type: text-[9|10|11|13|15px] move to the text-4xs/3xs/2xs/ui/title tokens.
  • Icons: sizes sit on 12, 14 and 16 (about 90 moved from 11/13/15/17). Icons in sm buttons are 14. Size 9 and 10 icons inside tiny chips stay.
  • Radii: bordered surfaces are rounded-md (about 50 rounded-lg/xl/2xl boxes, mostly onboarding, connect flows, investigations canvas, error callouts). Controls stay rounded-lg.
  • Hover and selection: row and card hovers are hover:bg-muted/50 (about 70 from /20, /30, /40 and /60). Selected rows go from muted/40 to muted/60, in rowSelectedClass and five tables, so a hovered row is never darker than the selected one.
  • Borders: border-border or border-border/60 (about 90 from /40, /50 and /70).
  • Text: text-foreground/85 → /80, /75 → /70, text-muted-foreground/72 → /70.
Before After

Left for later on purpose: text-[22px] and text-[30px] (no token yet), the 23 distinct arbitrary table column widths, the .5 spacing steps, and HTTP_METHOD_HEX (documented as the mobile app's source).

Verification

🤖 Generated with Claude Code


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

…line colours

Pixel text sizes use the type tokens, icons sit on 12/14/16, bordered
surfaces are rounded-md, row hovers are muted/50 with selected rows at
muted/60, borders are border or border/60. The trace timeline bars and the
service-map namespace labels mix their hue into the theme background, so
light mode no longer gets near-black bars with unreadable labels.
@coderabbitai

coderabbitai Bot commented Oct 30, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 181 files, which is 31 over the limit of 150.

To get a review, reduce the PR to 150 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 6183c89f-2094-42e8-9798-f02893df1b7a
Commits

Reviewing files that changed from the base of the PR and between 62558a2 and 650e71a.

Files selected for processing: 181
  • apps/web/src/charts/bucket-tooltip.ts
  • apps/web/src/charts/histogram-chart.ts
  • apps/web/src/components/infra/severity-tokens.ts
  • apps/web/src/page/agent-sessions/kit/tabs.ts
  • apps/web/src/page/agent-sessions/list/view-table.ts
  • apps/web/src/page/agent-sessions/session/span-popover-details.ts
  • apps/web/src/page/agent-sessions/session/span-popover-messages.ts
  • apps/web/src/page/agent-sessions/session/transcript-calls.ts
  • apps/web/src/page/agent-sessions/session/transcript-lanes.ts
  • apps/web/src/page/agent-sessions/session/transcript-messages.ts
  • apps/web/src/page/agent-sessions/session/transcript-shell.ts
  • apps/web/src/page/agent-sessions/session/transcript-turns.ts
  • apps/web/src/page/agent-sessions/session/view-header.ts
  • apps/web/src/page/agent-sessions/session/view-rail.ts
  • apps/web/src/page/agent-sessions/session/view-toolbar.ts
  • apps/web/src/page/agent-sessions/session/view-waterfall.ts
  • apps/web/src/page/agent-sessions/tool/view-error-modal-payload.ts
  • apps/web/src/page/agent-sessions/tool/view-error-modal-rail.ts
  • apps/web/src/page/agent-sessions/tool/view-error-modal-samples.ts
  • apps/web/src/page/agent-sessions/tool/view-error-modal.ts
  • apps/web/src/page/agent-sessions/tool/view-errors.ts
  • apps/web/src/page/agent-sessions/tool/view-sessions.ts
  • apps/web/src/page/agent-sessions/tools-kit/table.ts
  • apps/web/src/page/agent-sessions/tools/view-table.ts
  • apps/web/src/page/alerts/destination/view.ts
  • apps/web/src/page/alerts/editor/view-condition.ts
  • apps/web/src/page/alerts/editor/view-notify.ts
  • apps/web/src/page/alerts/editor/view-sql.ts
  • apps/web/src/page/alerts/hub/view-empty.ts
  • apps/web/src/page/alerts/hub/view-inbox.ts
  • apps/web/src/page/alerts/hub/view-rules.ts
  • apps/web/src/page/alerts/shared/providers.ts
  • apps/web/src/page/alerts/uptime-form/view-kinds.ts
  • apps/web/src/page/alerts/uptime-form/view.ts
  • apps/web/src/page/analytics/view-ai-parts.ts
  • apps/web/src/page/analytics/view-breakdown.ts
  • apps/web/src/page/analytics/view.ts
  • apps/web/src/page/anomalies/detail/view-body.ts
  • apps/web/src/page/anomalies/kit/row.ts
  • apps/web/src/page/anomalies/list/view-list.ts
  • apps/web/src/page/code-review/analytics/view-charts.ts
  • apps/web/src/page/code-review/analytics/view-lists.ts
  • apps/web/src/page/code-review/ci/view-tables.ts
  • apps/web/src/page/code-review/kit/review-sheet-more.ts
  • apps/web/src/page/code-review/pull-requests/view-table.ts
  • apps/web/src/page/dashboards/list/view-list.ts
  • apps/web/src/page/dashboards/templates/view-list.ts
  • apps/web/src/page/dashboards/templates/view-panel.ts
  • apps/web/src/page/dashboards/view/view-embed.ts
  • apps/web/src/page/dashboards/view/view-history.ts
  • apps/web/src/page/dashboards/view/view-share.ts
  • apps/web/src/page/errors/hub/view-list.ts
  • apps/web/src/page/errors/hub/view-signal.ts
  • apps/web/src/page/errors/issue/view-activity.ts
  • apps/web/src/page/errors/issue/view-anomalies.ts
  • apps/web/src/page/errors/issue/view-chart.ts
  • apps/web/src/page/infra-integrations/cloudflare/list/view-accounts.ts
  • apps/web/src/page/infra-integrations/cloudflare/list/view-tables.ts
  • apps/web/src/page/infra-integrations/cloudflare/worker/view.ts
  • apps/web/src/page/infra-integrations/cloudflare/zone/view-breakdown.ts
  • apps/web/src/page/infra-integrations/cloudflare/zone/view-sections.ts
  • apps/web/src/page/infra-integrations/gcp/list/view-resources.ts
  • apps/web/src/page/infra-integrations/gcp/list/view.ts
  • apps/web/src/page/infra-integrations/gcp/service-icon.ts
  • apps/web/src/page/infra-integrations/gcp/workload/view-rail.ts
  • apps/web/src/page/infra-integrations/gcp/workload/view-sql-peek.ts
  • apps/web/src/page/infra-integrations/gcp/workload/view-sql.ts
  • apps/web/src/page/infra-integrations/gcp/workload/view.ts
  • apps/web/src/page/infra-integrations/kit/filter-chip-rail.ts
  • apps/web/src/page/infra-integrations/planetscale/db/view-breakdown.ts
  • apps/web/src/page/infra-integrations/planetscale/db/view.ts
  • apps/web/src/page/infra-integrations/railway/list/view-table.ts
  • apps/web/src/page/infra-integrations/supabase/list/view-bottom.ts
  • apps/web/src/page/infra-integrations/supabase/project/view-attention.ts
  • apps/web/src/page/infra-integrations/supabase/project/view-callers.ts
  • apps/web/src/page/infra-integrations/supabase/project/view-issues.ts
  • apps/web/src/page/infra-integrations/supabase/project/view-postgres.ts
  • apps/web/src/page/infra-integrations/supabase/project/view-traffic.ts
  • apps/web/src/page/infra-integrations/supabase/project/view.ts
  • apps/web/src/page/infra/kit/data-table.ts
  • apps/web/src/page/infra/kit/meta-line.ts
  • apps/web/src/page/infra/kubernetes/pod-restarts-view.ts
  • apps/web/src/page/infra/overview/view-findings.ts
  • apps/web/src/page/integrations/view-aws.ts
  • apps/web/src/page/integrations/view-cloudflare-board.ts
  • apps/web/src/page/integrations/view-cloudflare-connected.ts
  • apps/web/src/page/integrations/view-cloudflare-zones.ts
  • apps/web/src/page/integrations/view-flow-github.ts
  • apps/web/src/page/integrations/view-flow-supabase.ts
  • apps/web/src/page/integrations/view-gcp-configure-collect.ts
  • apps/web/src/page/integrations/view-gcp-configure-method-choice.ts
  • apps/web/src/page/integrations/view-gcp-configure-script.ts
  • apps/web/src/page/integrations/view-gcp-configure-status.ts
  • apps/web/src/page/integrations/view-gcp-connection.ts
  • apps/web/src/page/integrations/view-gcp-setup-methods.ts
  • apps/web/src/page/integrations/view-gcp-workloads.ts
  • apps/web/src/page/integrations/view-github-repos.ts
  • apps/web/src/page/integrations/view-github.ts
  • apps/web/src/page/integrations/view-hub.ts
  • apps/web/src/page/integrations/view-prometheus-details.ts
  • apps/web/src/page/integrations/view-railway.ts
  • apps/web/src/page/integrations/view-supabase.ts
  • apps/web/src/page/investigations/conversation/kit/view-cards.ts
  • apps/web/src/page/investigations/conversation/kit/view-code.ts
  • apps/web/src/page/investigations/conversation/kit/view-inline.ts
  • apps/web/src/page/investigations/detail/view-canvas.ts
  • apps/web/src/page/investigations/detail/view-diagnosis-card.ts
  • apps/web/src/page/investigations/detail/view-verdict.ts
  • apps/web/src/page/kit/commit-card.ts
  • apps/web/src/page/kit/connect-flow.ts
  • apps/web/src/page/kit/guided-setup.ts
  • apps/web/src/page/kit/infra-correlation/view.ts
  • apps/web/src/page/kit/message-response.ts
  • apps/web/src/page/kit/refresh-controls.ts
  • apps/web/src/page/kit/series-legend.ts
  • apps/web/src/page/kit/time-range-picker.ts
  • apps/web/src/page/kit/timezone-select-view.ts
  • apps/web/src/page/logs/detail/view-meta.ts
  • apps/web/src/page/logs/detail/view-panels.ts
  • apps/web/src/page/logs/list/view-toolbar.ts
  • apps/web/src/page/logs/live-controls.ts
  • apps/web/src/page/onboarding/create-org-view.ts
  • apps/web/src/page/onboarding/pricing-cards-view.ts
  • apps/web/src/page/onboarding/quick-start-team-view.ts
  • apps/web/src/page/onboarding/quick-start-view.ts
  • apps/web/src/page/overview/setup-checklist-view.ts
  • apps/web/src/page/recommendations/view.ts
  • apps/web/src/page/replays/detail/view-rail.ts
  • apps/web/src/page/replays/detail/view-session.ts
  • apps/web/src/page/replays/detail/view-timeline.ts
  • apps/web/src/page/replays/kit/sessions-list.ts
  • apps/web/src/page/security/run/view.ts
  • apps/web/src/page/security/tabs/view-overview.ts
  • apps/web/src/page/service-map/view-db-sections.ts
  • apps/web/src/page/service-map/view-service-infra.ts
  • apps/web/src/page/services/detail/endpoint-peek/view.ts
  • apps/web/src/page/services/detail/view-api-charts.ts
  • apps/web/src/page/services/detail/view-api-tab.ts
  • apps/web/src/page/services/detail/view-api.ts
  • apps/web/src/page/services/detail/view-dependencies.ts
  • apps/web/src/page/services/detail/view-footprint.ts
  • apps/web/src/page/services/detail/view-operations.ts
  • apps/web/src/page/services/detail/view-panels.ts
  • apps/web/src/page/settings/audit-log/view.ts
  • apps/web/src/page/settings/billing/details/view.ts
  • apps/web/src/page/settings/billing/view-plan.ts
  • apps/web/src/page/settings/billing/view-records.ts
  • apps/web/src/page/settings/data-platform/view.ts
  • apps/web/src/page/settings/ingestion/mapping-dialog-view.ts
  • apps/web/src/page/settings/ingestion/view-ingest-rules.ts
  • apps/web/src/page/settings/ingestion/view-rules.ts
  • apps/web/src/page/settings/keys/view-reference.ts
  • apps/web/src/page/settings/keys/view-table.ts
  • apps/web/src/page/settings/mcp/view-tools.ts
  • apps/web/src/page/settings/setup-health/view.ts
  • apps/web/src/page/sources/kit/rules-view.ts
  • apps/web/src/page/sources/list/view.ts
  • apps/web/src/page/sources/new/view-picker.ts
  • apps/web/src/page/traces/detail/depth-controls.ts
  • apps/web/src/page/traces/detail/span-panel/attributes.ts
  • apps/web/src/page/traces/detail/span-panel/error-section.ts
  • apps/web/src/page/traces/detail/span-panel/view-tabs.ts
  • apps/web/src/page/traces/detail/timeline/layout.ts
  • apps/web/src/page/traces/detail/timeline/view-chrome.ts
  • apps/web/src/page/traces/detail/timeline/view-row.ts
  • apps/web/src/page/traces/detail/waterfall/row.ts
  • apps/web/src/page/traces/list/view-row.ts
  • apps/web/src/service-map/map/edge.ts
  • apps/web/src/service-map/map/namespace-group.ts
  • apps/web/src/service-map/trace-flow/edge.ts
  • apps/web/src/service-map/trace-flow/node-card.ts
  • apps/web/src/shell/connect-panel-view.ts
  • apps/web/src/shell/onboarding-checklist-view.ts
  • apps/web/src/shell/palette/shortcuts-view.ts
  • apps/web/src/ui/attributes/attribute-row.ts
  • apps/web/src/ui/attributes/attributes-view.ts
  • apps/web/src/ui/detail-rail.ts
  • apps/web/src/ui/error-section.ts
  • apps/web/src/ui/logs/log-row-expanded.ts
  • apps/web/src/ui/logs/log-row.ts
  • packages/ui/src/components/ui/list-row.styles.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@maple-review-bot

This comment has been minimized.

@Makisuo Makisuo added the preview:web Deploy a Workers-only PR preview (no ingest/Electric); see docs/pr-previews.md label Oct 30, 2026
@Makisuo
Makisuo deployed to pr-preview October 30, 2026 18:40 — with GitHub Actions Active
@maple-review-bot

This comment has been minimized.

@github-actions

github-actions Bot commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

🍁 Maple PR preview

Note

Preview resources were removed when the preview label came off.

Final commit 650e71a · View workflow run

@Makisuo
Makisuo deployed to pr-preview October 30, 2026 18:45 — with GitHub Actions Active
…oken

Mixing in oklch against a background with a declared hue rotated every bar
toward it, so blue services painted pink. 2xx used chart-3, which is amber
in light mode beside the amber 4xx; it now uses severity-info.
@Makisuo
Makisuo deployed to pr-preview October 30, 2026 19:04 — with GitHub Actions Active
@Makisuo

Makisuo commented Oct 30, 2026

Copy link
Copy Markdown
Collaborator Author

Preview test (app-pr-1988, signed in as the preview reviewer, dark and light)

A separate agent drove the preview headlessly through traces, errors, alerts, investigations, anomalies, services (API tab, endpoint peek), dashboards, settings, code review, integrations, security, infra, service map and logs, in both themes. Every page title rendered at the same size and weight, and tab strips were aligned and unclipped. There were no pageerror events.

Caused by this stack, fixed in 650e71a:

  • Timeline bars. The fill ignored the service colour (blue services painted pink). The oklch color-mix against --background, which declares a hue, rotated every bar toward that hue. The mix now runs in oklab. The service-map namespace labels had the same mix and get the same fix.
  • 2xx in light mode (API tab, endpoint peek). 2xx was amber, the same as 4xx: it used chart-3, which is amber in light and green in dark. This was already on main, but it is a colour-token bug, so 2xx now uses severity-info (healthy).
Preview (before fix) Fixed

Already on main, not in this stack's diff (follow-ups):

  • Log list attribute chips clip their key on the left.
  • The service-map minimap covers a node and stays dark in light mode.
  • Services list numbers sit on top of their sparklines.
  • The security Runs empty state is dashed inside a solid card.
  • The settings sub-nav differs between /settings and /integrations.

Not checkable on this preview: live sync returned 503, so the alert inbox and rules, the dashboards list, the uptime stats and the error issues showed empty or "sync unavailable" states. The uptime, Supabase and PlanetScale toolbar readouts are covered by scene tests.

@maple-review-bot

maple-review-bot Bot commented Oct 30, 2026 •

Copy link
Copy Markdown

Maple review

🟢 Confidence 10/10 · safe to merge. The five files changed since 47cc281 are class and colour-token swaps; every token they name is defined and resolved by the page's theme Mount.
no findings · tests not needed · risk low

Re-review of the five files changed since the last pass: 2xx moves to --severity-info on both DOM and canvas, timeline and namespace fills become color-mix washes, hovers go to muted/50. No defects. The open time-range-picker TypeError is not addressed; those lines only change border opacity.

  • STATUS_COLORS["2xx"] and the 2xx mix bar use --severity-info instead of dark-only --chart-3
  • barFillFromHue washes the bar hue into --background via color-mix(in oklab, …)
  • Namespace group labels mix their hue with --foreground/--background instead of fixed dark values
  • view-api.ts and endpoint-peek rows hover at muted/50 instead of /40

Production impact

Open errors in the changed files (1)
Issue Service Occurrences File
TypeError maple-web 3 apps/web/src/page/kit/time-range-picker.ts

After this merges, Maple checks whether they stop.

650e71a · What was checked, coverage and telemetry details are on the Maple / review check. Reply "won't fix" to dismiss a finding, or mention @maple-review-bot to ask about one.

@Makisuo
Makisuo deployed to pr-preview October 30, 2026 19:07 — with GitHub Actions Active
@Makisuo

Makisuo commented Oct 30, 2026

Copy link
Copy Markdown
Collaborator Author

Re-tested on the redeployed preview (650e71a), light and dark: timeline bars carry their service tint (blue services are blue, no pink fills) and 2xx is green across the API tab chart, legend, table bars and endpoint peek, distinct from amber 4xx. No page errors.

@Makisuo Makisuo removed the preview:web Deploy a Workers-only PR preview (no ingest/Electric); see docs/pr-previews.md label Oct 30, 2026
@Makisuo
Makisuo deployed to pr-preview October 30, 2026 19:54 — with GitHub Actions Active
@Makisuo
Makisuo added this pull request to stack #1989 October 30, 2026 19:58
@Makisuo
Makisuo merged commit c0b5b4c into main Oct 30, 2026
32 checks passed
@Makisuo
Makisuo deleted the ui-consistency-4 branch October 30, 2026 19:58
@maple-review-bot

Copy link
Copy Markdown

Maple: after this shipped

✅ Shipped clean. Nothing this change touches got worse in the hour after it deployed.

Deployed to maple-web (production) at 2026-10-30 20:10 UTC as c0b5b4c. Compared the 60 minutes before and after.

Errors in the changed files:

  • ➖ TypeError: 0/h → 0/h

Maple looks once, an hour after the first deploy that carries the merge.

Makisuo added a commit that referenced this pull request Oct 30, 2026
…s colours (#1992)

Text, surface and border opacities were 30 ad-hoc `/NN` levels. They are now
named tokens: foreground-soft/subtle/faint, surface-faint/sunken/strong
(sunken = row hover at 50%, strong = selected at 60%, matching #1988) and
border-subtle. Table column widths between 64 and 260px snap to a 16px
scale (36 values -> 13). Bordered boxes use Panel's p-3/p-4. `rounded` and
`rounded-sm` were both 4px; now one spelling.

Status values still on the old success/warning/info tokens use the severity
palette; red stays `destructive` only for destructive actions and form
errors. Avatar tiles and onboarding region accents move from hard-coded
colours to tokens, and replays and error actors use the same warm avatar
tiles as settings. SQL query badges get dark text on amber like the primary
button.
Makisuo added a commit that referenced this pull request Oct 30, 2026
…acing on tokens (#1999)

Third consistency pass after #1988 and #1992.

- Neutral status fills and outline rings: bg/border-muted-foreground/30..75 become
  foreground-subtle (50% and up) or foreground-faint.
- Dividers: bg-border/20, /40, /60 become bg-border-subtle.
- Card hover and selected outlines: new border-border-strong token (foreground 30%).
- Row and button hovers: accent/50, foreground/5, /8, /[0.06] become surface-sunken.
- rounded-[2px] and rounded-[3px] become rounded-xs.
- Off-scale gaps and padding snap to the spacing scale; name-column min widths use
  the 16px width scale.

This branch was successfully deployed

1 active deployment
pr-preview — 650e71a1 Deployed Oct 30, 2026 by Makisuo via deploy-pr-preview #7931
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant