feat(web): terminal material — cctrace's design language, ccx's bones - #31
Open
lroolle wants to merge 2 commits into
Open
feat(web): terminal material — cctrace's design language, ccx's bones#31lroolle wants to merge 2 commits into
lroolle wants to merge 2 commits into
Conversation
The web UI read as a pastel chat app: 17px system sans, role-tinted bubbles, ~12 stray hues, 'Courier New' leading the mono stack, radii 3-12px, black shadows. cctrace's session UI is the taste reference: a well-kept terminal. Material swap in place — every selector and JS hook kept, values rewritten: - 13px ui-monospace body, 10/11/12/13 sub-scale, 18px page h1 - warm-tinted neutrals (light #fcfbfa, dark #131110), terracotta as the ONE accent, semantic set green/red/amber/purple/blue; provider and event tokens ride the set - bubbles -> hairline surfaces; user turns get the cctrace anchor mechanic (space above + accent-washed header row); thinking is muted italic - side-stripe purge round 2: tool blocks, outline active item, agent turns, doctor/memory/settings cards — hairline full borders now - chrome details: thin scrollbars, accent selection, :focus-visible, tinted shadow tokens, radius scale 6/4/999 - uppercase role labels exempt command names and agent types Devlog: docs/devlog/2026-07-29-web-terminal-material.org Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Tool outputs, results, and compact-content panes used inner scrollbars (max-height + overflow:auto), which trap the mouse wheel mid-page — cctrace's msg-clamp mechanic replaces them: overflow gets a fade mask and a "show all" row. Progressive enhancement: JS measures each pane and only clamps real overflow (>40px past the limit); panes inside closed <details> measure as zero, so a capture-phase toggle listener clamps them lazily on first open; without JS the old scroll behavior remains. The show-tools toggle hides a result pane's expander together with the pane. Co-Authored-By: Claude Fable 5 <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.
Summary
Eric's verdict: cctrace's session UI is the taste reference; ccx web's "color/font, layouts, interactions, details are looking bad". This ports cctrace's design language onto ccx's existing markup — every selector and JS hook kept, values rewritten — so the diff is a material swap, not a rewrite. Second commit ports cctrace's clamp mechanic.
ui-monospacebody (was 17px system sans; 'Courier New' led the old mono stack), 10/11/12/13 sub-scale, 18px page h1#fcfbfa, dark#131110), terracotta as the single accent (deepened to#c65d3elight /#e08662dark for contrast), and a five-hue semantic set (green/red/amber/purple/blue). All ~12 stray hues (#e9a,#a80,#5a9,#fa0,#d55,#86c, blue/violet/cyan context accents...) collapsed onto tokens:focus-visibleoutlines, two tinted shadow tokens, radius scale 6/4/999/initmust not render/INIT)Deliberate choice: terracotta stays the accent rather than copying cctrace's GitHub blue — the badness was hue-scatter + pastels, not the brand hue, and warm neutrals under a warm accent keep ccx's identity instead of cloning cctrace. Rationale + decision table in
docs/devlog/2026-07-29-web-terminal-material.org.Follow-up candidates (not in this PR): replay transport, tabular-nums pass on stat rows.
Will trivially conflict with #26/#28 on the CHANGELOG
[Unreleased]header — keep all entries.Test plan
go build ./...clean,go test ./...green (web tests cover template rendering)ccx webserved the sessions index and the f8e49d74 session view at 200; served HTML carries the new tokens, theturn-user/turn-rolemarkup the new rules target, and the clamp module🤖 Generated with Claude Code