Typography & visual-language standardization + loading/new-project UX polish (#83)#91
Merged
Conversation
The comment described .text-label--muted as dimmer than the default secondary color, which was true before Task 2's rename. Default is now primary and muted equals secondary literally, so the claim is stale.
…ladder (#83) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Convert the 5 reachable hand-rolled uppercase eyebrow labels (LegendPane x2, OverviewPane x2, StreetPane) to compose .text-label instead of duplicating font-size/font-weight/text-transform/ letter-spacing/color. .almanac-duo-dim keeps its per-section accent color via a .almanac-duo-dim.text-label override (higher specificity than .text-label alone, so it wins regardless of stylesheet order). InfoPane.css's .info-markdown h5/h6 rule is left as-is: it styles markdown-rendered headings injected via dangerouslySetInnerHTML, not a TSX element we control, and is legitimate prose styling rather than a component eyebrow label.
Removes italic from two UI-chrome-only rules (loading placeholder, almanac note) while keeping content-semantic italics (markdown em, hljs comment/emphasis). Drops explicit font-family: sans on .street-label and .code-editor-banner, both of which sit outside any mono-font ancestor and already inherit sans from body.
Convert static text-dimming opacity to color roles where the opacity only dims text (CommitPane loading/error captions -> muted); left opacity in place where it dims an animated dot, a whole disabled control, or an entire interactive row (AppFooter pulse/heartbeat dots, PaneHeader disabled icon button, RecentsList unavailable row). Reclassify almanac-language-count to secondary to match its sibling "+N more" chip summary, which was already secondary at the same chip-caption role.
…83) - titles unified on --cc-text-strong; eyebrow labels dimmed to secondary - pane header title sized to match the pane tabs (chrome, not a content title) - debug hint promoted to body copy - loading card: repo name is the header, status verb a quiet sub-line Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Error message text and the input error border now read as one red instead of two hues. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- all selected states (tree/rows/search/toggle/recents/activity-bar) now use --cc-accent-bg-soft; retire the ad-hoc 6% and 22% accent mixes - tree open-folder guide tinted with the same accent selected fill - Active recents badge restyled to a neutral white status pill (dot + label) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… ProjectsView (#83) The stepped progress list + spinner + repo-header column was duplicated between LoadingOverlay (cold boot) and ProjectsView (in-app switches), and ProjectsView only rendered a single status line. Extracted a shared <LoadingProgress> (one definition of the phase->step state mapping) that both compose, so the Projects page clone now shows the full step list too. Also decouples the loading status line from the .text-card-title composite (its own .loading-status), fixing the oversized status the .loading-card-scoped rule never reached. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…eturns to project list (#83) - Cancel now lives in the shared LoadingProgress and shows in both the cold-boot overlay and the ProjectsView clone (full width across the column) - overlay Cancel aborts the load AND opens the project list (cancelLoad only aborts; the overlay otherwise left a blank screen) - checklist centers as a block (rows still left-aligned) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…83) Was accent-light -> accent (darkened on hover); now accent -> accent-light, matching .btn-primary and the text buttons. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
One field takes either a git URL or a local path and classifies itself (srcKind) — no more Repo URL / Local Path tabs, which let a full URL sit in the Local tab with no validation. A URL gets the branch dropdown; a local path opens directly; a clearly-local path typed while local repos are off shows an inline 'Local paths aren't enabled' error (looksLikePath gates it so a half-typed URL never flickers). Rewrote the tab-era form tests for the unified field. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ents (#83) - loading card (both surfaces): branch renders as a pill next to the repo header instead of buried in the status line; ProjectsView now passes scan.branch - recents rows: branch pill moved up from the URL sub-line to the title line Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…y when local is on) (#83) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…lder, standing notice) (#83) - label: 'Repo URL or local path' when local repos are on, 'Repo URL' when off - placeholder: shows a path example only when local is on - when local is off, a standing 'Local paths aren't enabled / How to enable' notice sits below the input (not just on typing a path); a typed path still blocks submit without the contradictory 'enter a git URL' nudge Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
#83) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The header external-link button (opened the git repo in a new tab, and showed nothing for local sources) is now a CopyButton that copies the raw source — the git URL for a remote, the path for a local — so both kinds get a one-click copy. SourceInfo gains a raw `src` field. RepoLink deleted. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Dead since the header open-repo link became a copy-source button — no production callers, test-only. Removed both helpers and their tests. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Enlarge the two gem glows and add a low mid-stop so they ease out over a longer tail instead of hard-stopping at 70%. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… load (#83) The form unmounts during loading and remounts on failure; if it remounted before App's SOURCE_ERROR effect updated the prefill, useState initialized empty and the later prefill update was ignored. Key the form on prefill.src so it remounts cleanly with the attempted value restored. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…nded) (#83) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…/to/repo (#83) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ows Active (#83) Active detection compared CURRENT_SOURCE's raw submitted branch (undefined for a local repo) against the recent's resolved branch (the local HEAD), so a loaded local project never matched. Compare against SOURCE_INFO instead — it resolves the branch the same way pushRecent does. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…hing load (#83) A local recent while local repos are off can't load; clicking it briefly flashed the loading/error state. It's now aria-disabled (no onOpen), cursor not-allowed, with the title explaining why. Only its remove control acts. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Was a verbose message (with an em-dash) that duplicated the form's standing 'how to enable' notice. Reduced to 'local repositories are disabled'. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…r icon (#83) A local recent while local repos are off can't load; clicking it briefly flashed the loading/error state. Now dimmed + aria-disabled (no onOpen), cursor not-allowed, with the title explaining why (only remove acts). Keep the standard folder icon instead of swapping to a warning triangle. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.
Closes #83.
Started as the typography audit/standardization in #83 and grew (by request) into a broader visual-language + UX polish pass. All changes are on this branch; lint + 2492 tests green throughout.
Typography system (the #83 core)
md= body = the middle step (2xs…2xl); one step per role, titles/body no longer collide.--cc-text-primary= body copy, with--cc-text-strongfor emphasis; subtitles/subtext unified onsecondary.tight/base/relaxed); raw values snapped..text-label; hand-rolled labels routed through it.--cc-space-*..link; inputs standardized; focus reuses the shared outline.Visual polish
--cc-accent-bg-soft(retired ad-hoc 6%/22% mixes); tree open-folder guide tinted with it.--cc-error-lighthue to--cc-error).Loading UX
LoadingProgresscomponent — the full step list now shows in both the cold-boot overlay and the Projects-page clone (was a bare spinner).New-project form
allowLocalRepos; the notice hides once the input is a URL.Header
Cleanup
toHttpsRepoUrl/repoUrlForBranch(orphaned by the header change).Deferred
/api/branchesendpoint is remote-only by design); recommend a separate issue.🤖 Generated with Claude Code