feat(ui): per-user chat bubble colors for logged-in senders#112070
Merged
Conversation
Attributed senders' bubbles, footer names, and avatar initials now share a stable identity hue (same FNV-1a seed as avatar initials, hash % 360). Only the hue varies per user; saturation/lightness/alpha are fixed per theme mode so text contrast holds for every hue in light and dark themes. Unattributed local, assistant, and tool bubbles are unchanged. Closes #112068 Co-Authored-By: Claude Fable 5 <[email protected]>
Contributor
|
ClawSweeper status: review started. I am starting a fresh review of this pull request: feat(ui): per-user chat bubble colors for logged-in senders This is item 1/1 in the current shard. Shard 0/1. This placeholder means the worker is alive and reading the current context. I will edit this same comment with the actual review when the claws are done clicking. Crustacean status: shell secured, claws on keyboard, evidence pebbles being sorted. |
Member
Author
|
Land-ready verification (head
|
Member
Author
|
Merged via squash.
|
github-actions Bot
pushed a commit
to Desicool/openclaw
that referenced
this pull request
Jul 21, 2026
…112070) Attributed senders' bubbles, footer names, and avatar initials now share a stable identity hue (same FNV-1a seed as avatar initials, hash % 360). Only the hue varies per user; saturation/lightness/alpha are fixed per theme mode so text contrast holds for every hue in light and dark themes. Unattributed local, assistant, and tool bubbles are unchanged. Closes openclaw#112068 Co-authored-by: Claude Fable 5 <[email protected]>
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 #112068
What Problem This Solves
In multi-user Control UI sessions, every human sender's chat bubbles look identical: all user bubbles share the same accent tint regardless of who wrote the message. Sender names and avatar initials already distinguish authors, but scanning a busy conversation still requires reading footer names to tell users apart at a glance.
Why This Change Was Made
Each attributed (logged-in) sender's bubbles are now tinted with a stable personal color derived from the same identity seed that already colors their avatar initials, so a user's bubble, avatar, and footer name share one hue. Only the hue varies per user; saturation, lightness, and alpha are fixed per theme mode, which guarantees message text stays readable for every possible hue in both light and dark themes (including the openknot/dash variants, which reuse
data-theme-mode). Unattributed local messages, assistant, and tool bubbles are unchanged; no new config or state is introduced.User Impact
Logged-in users each get their own consistent chat bubble color across sessions and devices, making multi-user conversations scannable at a glance. Single-user sessions look exactly as before.
Evidence
base.css+grouped.cssin a standalone harness across hues spanning the full wheel, in bothdata-theme-mode="dark"and"light": distinct tints per user, contrast above 10:1 in both modes (dark: 16%-alpha tint under near-white text; light: fixed 94%-lightness pastel under dark text).rgba(255,92,92,0.1)accent and transparent backgrounds respectively).ui/src/lib/identity-avatar.test.ts), tinted-vs-untinted group rendering incl. deterministic hue reuse (ui/src/pages/chat/components/chat-message.test.ts).pnpm check:changeddelegated to Blacksmith Testbox (leasetbx_01ky1b0q8dyqvsqha63qnwzrc2): exit 0, all lint/check lanes clean.gpt-5.6-sol, high reasoning): first pass flagged a real light-mode CSS specificity bug (tinted hover border suppressed); fixed with an explicit light-mode hover rule. Rerun: clean, no actionable findings ("patch is correct", 0.93).🤖 Generated with Claude Code