[Story-783] feat(tokens): migrate app UI to universal token space

Story 783Epic None100 files · +611/−392

PR #211 · pramaan-io/pramaan-app · merged 2026-06-02

How it flows

sequenceDiagram
  autonumber
  participant design as Design Tokens
  participant css as Canonical CSS
  participant src as App Source
  participant audit as Audit & Tests
  design->>css: publish tokens spec
  css->>css: add ramp + aliases
  css->>src: import canonical
  src->>src: swap hex → var()
  src->>audit: regex sweep
  audit-->>src: tests assert vars

What didn't happen

AGENTS.md forbids ad-hoc colors
Nearest-token matching required
Gaps must be reported — zero found
Clerk tests assert var()
Four hundred and ten tests pass
Build + diff-check clean

Files changed (100)

File±
AGENTS.md+23
design/v1/colors_and_type.css ★+82
docs/walkthroughs/assets/story-783-after.png+0
docs/walkthroughs/assets/story-783-before.png+0
docs/walkthroughs/story-783-walkthrough.html+97
src/app/(app)/dashboard/page.tsx+1 −1
src/app/[locale]/(app)/error.tsx+9 −9
src/app/[locale]/error.tsx+4 −4
src/app/[locale]/invite/[token]/page.tsx ★+27 −27
src/app/[locale]/layout.tsx+1 −1
src/app/[locale]/no-firm/loading.tsx+2 −2
src/app/[locale]/no-firm/page.tsx+7 −7
src/app/[locale]/not-found.tsx+3 −3
src/app/globals.css ★+67 −58
src/components/app-not-found.tsx+2 −2
src/components/app-transient-error.tsx+1 −1
src/components/auth/access-state-pages.tsx+4 −4
src/components/auth/auth-editorial-shell.stories.tsx+5 −5
src/components/auth/auth-editorial-shell.tsx+6 −6
src/components/auth/auth-route-parts.tsx+10 −10
src/components/auth/clerk-appearance.ts+16 −16
src/components/auth/firm-card.tsx+6 −6
src/components/auth/firm-picker-view.tsx+3 −3
src/components/auth/firm-picker.tsx+1 −1
src/components/dashboard/dashboard-home.tsx+1 −1
src/components/demo-mode-banner.tsx+3 −3
src/components/invite/clerk-invite-auth.tsx+10 −10
src/components/matters/contradiction-banner.tsx+4 −4
src/components/matters/document-register.tsx+4 −4
src/components/matters/live-matter-detail-page.tsx+1 −1
src/components/matters/live-matter-frame-fields.stories.tsx+1 −1
src/components/matters/live-matter-summary.tsx+4 −4
src/components/matters/live-matters-list-page.tsx+2 −2
src/components/matters/live-participant-panel.tsx+1 −1
src/components/matters/matter-detail-page.tsx+20 −20
src/components/matters/matter-overview-compact.tsx+4 −4
src/components/matters/matter-register-row.tsx+2 −2
src/components/matters/matter-shell-header.tsx+2 −2
src/components/matters/matter-shell.tsx+1 −1
src/components/matters/matter-subnav.tsx+1 −1
src/components/matters/matter-type-radio.tsx+1 −1
src/components/matters/matters-list-page.tsx+1 −1
src/components/matters/matters-live-register-row.tsx+2 −2
src/components/matters/matters-register.tsx+2 −2
src/components/matters/proceedings-register.tsx+4 −4
src/components/matters/review-workspace-page.tsx+17 −17
src/components/matters/sheet-radio-group.tsx+1 −1
src/components/matters/upload-form-fields.tsx+2 −2
src/components/report-bug/report-bug-client.ts+1 −1
src/components/report-bug/report-bug-dialog.tsx+1 −1
src/components/route-loading.tsx+15 −15
src/components/settings/coming-soon-tile.tsx+1 −1
src/components/settings/filing-types/filing-types-catalog-table-row.tsx+1 −1
src/components/settings/firm-profile/firm-profile-edit-fields.tsx+1 −1
src/components/settings/matter-types/filing-type-attach-sheet-mode.tsx+1 −1
src/components/settings/matter-types/filing-type-attaches-table-parts.tsx+2 −2
src/components/settings/matter-types/filing-type-attaches-table-rows.tsx+2 −2
src/components/settings/matter-types/matter-type-detail-content.tsx+2 −2
src/components/settings/matter-types/matter-type-filings-table.tsx+2 −2
src/components/settings/matter-types/matter-type-labels-table.tsx+2 −2
src/components/settings/matter-types/matter-type-overview.tsx+1 −1
src/components/settings/matter-types/matter-types-list-parts.tsx+1 −1
src/components/settings/matter-types/matter-types-list-row.tsx+1 −1
src/components/settings/matter-types/matter-types-list-table.tsx+1 −1
src/components/settings/matter-types/participant-labels-table-parts.tsx+2 −2
src/components/settings/matter-types/participant-labels-table-rows.tsx+2 −2
src/components/settings/matter-types/proceedings-story-content.tsx+1 −1
src/components/settings/matter-types/proceedings-story-header.tsx+2 −2
src/components/settings/matter-types/proceedings-table-parts.tsx+2 −2
src/components/settings/matter-types/proceedings-table-rows.tsx+2 −2
src/components/settings/members-roles/deactivate-dialog.tsx+1 −1
src/components/settings/members-roles/invitation-row.tsx+3 −3
src/components/settings/members-roles/invite-member-sheet.tsx+1 −1
src/components/settings/members-roles/member-row.tsx+3 −3
src/components/settings/members-roles/members-roles-content.tsx+5 −5
src/components/settings/members-roles/members-table.tsx+1 −1
src/components/settings/members-roles/role-badge.tsx+3 −3
src/components/settings/members-roles/status-text.tsx+1 −1
src/components/settings/seats-and-billing/csm-contact-line.tsx+1 −1
src/components/settings/seats-and-billing/extra-usage-card.tsx+7 −7
src/components/settings/seats-and-billing/extra-usage-toggle.tsx+1 −1
src/components/settings/seats-and-billing/kpi-tile.tsx+1 −1
src/components/settings/seats-and-billing/monthly-usage-card.tsx+4 −4
src/components/settings/seats-and-billing/plan-card.tsx+3 −3
src/components/settings/seats-and-billing/seats-and-billing-content.tsx+1 −1
src/components/settings/seats-and-billing/seats-and-billing-error.tsx+2 −2
src/components/settings/seats-and-billing/seats-and-billing-heading.tsx+1 −1
src/components/settings/seats-and-billing/seats-and-billing-skeleton.tsx+3 −3
src/components/settings/seats-and-billing/seats-card.tsx+2 −2
src/components/settings/seats-and-billing/usage-bar.tsx+1 −1
src/components/shared/global-rail-item.tsx+1 −1
src/components/shared/global-rail.tsx+1 −1
src/components/skeletons/index.tsx+22 −22
src/components/ui/doctrine-rotator.stories.tsx+1 −1
src/components/ui/skeleton.tsx+1 −1
src/stories/brand/BrandWordmark.stories.tsx+1 −1
src/stories/brand/brand-story-primitives.tsx+8 −8
src/stories/settings/firm-profile/firm-profile-form-surface.tsx+1 −1
src/stories/settings/firm-profile/firm-profile-system-fields.tsx+1 −1
src/stories/skeletons.stories.tsx+1 −1