Consolidate the UI onto one set of primitives - #506
Merged
Conversation
Adds primitives.css, loaded last, owning the modal, the empty state, the chip remove affordance, and the shared focus ring. Completes .btn (states plus btn-accept), gives .icon-btn a 28px .sm and a .danger tint, gives .seg a .seg-count, and adds the type ramp, --danger-contrast, and a per-theme --select-caret. Migrates the scoped duplicates onto them: the rv-btn family, rv-quick-btn, rb-btn, mini-btn, tool-btn, send-btn and pop-open become .btn/.icon-btn; rtabs, rv-filters, rv-mtabs and revision-filter-chip become .seg; the three hand-rolled modals share one panel; twelve empty-state spellings become .empty-state. Deletes the superseded CSS and the drift sheet's dead blocks. Behaviour is unchanged; e2e selectors follow the renames. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The modal primitive centres its panel, which made the palette's input drift as results changed height while typing. A .top modifier on the backdrop restores the 14vh anchor for overlays with changing content; the review modal and help stay centred, their content height is fixed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
mtaanquist
marked this pull request as ready for review
July 29, 2026 18:40
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Ports the accepted primitives sheet from the design pass (decisions note reviewed in session; sheet lives in the Codex design project). Authored by an Opus 5 agent against the reviewed spec; committed unsigned from the orchestrating session because the 1Password signing agent is unreachable from agent environments.
What changed
src/lib/styles/primitives.css, imported last: the modal, the empty state, the removable chip, and the shared focus ring.tokens.css: seven-step type ramp,--danger-contrast, per-theme--select-caret.pages.css: the complete.btnstate matrix (disabled buttons no longer light on hover) plus.btn-accept; form kit reads the ramp; token-driven select caret.theme.css:.icon-btn.sm/.dangerand states;.seg-btnfocus/disabled;.seg-count..btn/.icon-btnfamilies (accept is.btn-accept),rtabs/rv-filters/rv-mtabs/revision-filter-chipto.seg, the three modals onto the one modal primitive (behavior preserved), twelve empty-state spellings to.empty-state, labels to.pill, tokens to.chip/.chip-x.modal.htmlcard); forced-state hooks (.is-hover/.is-active/.is-focus) documented as sheet-only, with the pre-existing.md-tool.is-activeusage grandfathered.Intentional visible differences
Disabled buttons no longer react to hover; icon-only buttons settle on 32px chrome / 28px card sizes (up from 22-24px one-offs); segment counts move to 11px; disabled opacity is 0.45 everywhere; the select caret follows each theme; review quick-action tints kept, scoped under
.rv-quick.Verification
npm run lintandnpm run check: fully clean (0 errors, 0 warnings)..rel-row .icon-btnassertion atcore-flow.spec.ts:612sits past the MinIO-dependent step; CI exercises it first.🤖 Generated with Claude Code