forked from molecule-ai/molecule-core
Merge pull request #2618 from Molecule-AI/ui/canvas-chat-dark-contrast
fix(canvas): dark-mode chat bubble contrast
This commit is contained in:
commit
5cd5a28bd1
@ -1,6 +1,15 @@
|
|||||||
@import "tailwindcss";
|
@import "tailwindcss";
|
||||||
@plugin "@tailwindcss/typography";
|
@plugin "@tailwindcss/typography";
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Tailwind v4 defaults the `dark:` variant to `prefers-color-scheme: dark`.
|
||||||
|
* Our theme switcher writes `data-theme="dark"` on <html> instead (so user
|
||||||
|
* choice via the toggle wins over OS preference). Re-bind `dark:` to that
|
||||||
|
* attribute so component classes like `dark:bg-zinc-800` track the same
|
||||||
|
* source of truth as the `[data-theme="dark"]` token overrides below.
|
||||||
|
*/
|
||||||
|
@custom-variant dark (&:where([data-theme="dark"], [data-theme="dark"] *));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Load order:
|
* Load order:
|
||||||
* 1. Tailwind core (v4) — provides preflight + utility generation.
|
* 1. Tailwind core (v4) — provides preflight + utility generation.
|
||||||
|
|||||||
@ -177,10 +177,10 @@ export function ChatTab({ workspaceId, data }: Props) {
|
|||||||
aria-controls="chat-panel-my-chat"
|
aria-controls="chat-panel-my-chat"
|
||||||
tabIndex={subTab === "my-chat" ? 0 : -1}
|
tabIndex={subTab === "my-chat" ? 0 : -1}
|
||||||
onClick={() => setSubTab("my-chat")}
|
onClick={() => setSubTab("my-chat")}
|
||||||
className={`px-3 py-1.5 text-[10px] font-medium transition-colors ${
|
className={`px-3 py-1.5 text-[10px] font-medium transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-accent/40 ${
|
||||||
subTab === "my-chat"
|
subTab === "my-chat"
|
||||||
? "text-ink border-b-2 border-accent"
|
? "text-ink border-b-2 border-accent"
|
||||||
: "text-ink-soft hover:text-ink-mid"
|
: "text-ink-mid hover:text-ink"
|
||||||
}`}
|
}`}
|
||||||
>
|
>
|
||||||
My Chat
|
My Chat
|
||||||
@ -192,10 +192,10 @@ export function ChatTab({ workspaceId, data }: Props) {
|
|||||||
aria-controls="chat-panel-agent-comms"
|
aria-controls="chat-panel-agent-comms"
|
||||||
tabIndex={subTab === "agent-comms" ? 0 : -1}
|
tabIndex={subTab === "agent-comms" ? 0 : -1}
|
||||||
onClick={() => setSubTab("agent-comms")}
|
onClick={() => setSubTab("agent-comms")}
|
||||||
className={`px-3 py-1.5 text-[10px] font-medium transition-colors ${
|
className={`px-3 py-1.5 text-[10px] font-medium transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-accent/40 ${
|
||||||
subTab === "agent-comms"
|
subTab === "agent-comms"
|
||||||
? "text-ink border-b-2 border-accent"
|
? "text-ink border-b-2 border-accent"
|
||||||
: "text-ink-soft hover:text-ink-mid"
|
: "text-ink-mid hover:text-ink"
|
||||||
}`}
|
}`}
|
||||||
>
|
>
|
||||||
Agent Comms
|
Agent Comms
|
||||||
@ -773,10 +773,22 @@ function MyChatPanel({ workspaceId, data }: Props) {
|
|||||||
<div
|
<div
|
||||||
className={`max-w-[85%] rounded-lg px-3 py-2 text-xs ${
|
className={`max-w-[85%] rounded-lg px-3 py-2 text-xs ${
|
||||||
msg.role === "user"
|
msg.role === "user"
|
||||||
? "bg-accent text-white border border-accent-strong"
|
// Solid blue-600 in both modes — `bg-accent` themes
|
||||||
|
// lighter in dark, dropping white-text contrast to
|
||||||
|
// ~3:1 (fails AA). blue-600 keeps ~5:1 against white
|
||||||
|
// on both warm-paper and dark-slate panels.
|
||||||
|
? "bg-blue-600 text-white border border-blue-700 dark:bg-blue-500 dark:border-blue-400 shadow-sm"
|
||||||
: msg.role === "system"
|
: msg.role === "system"
|
||||||
? "bg-bad/10 text-bad border border-bad/40"
|
// Bump the system bubble's opacity in dark — /10
|
||||||
: "bg-surface-card text-ink border border-line"
|
// overlay was nearly invisible against the dark
|
||||||
|
// panel bg.
|
||||||
|
? "bg-bad/10 text-bad border border-bad/40 dark:bg-bad/25 dark:text-bad dark:border-bad/60"
|
||||||
|
// Agent bubble in dark: surface-card (#1a1d23) is
|
||||||
|
// only ~7% lighter than the panel bg-surface
|
||||||
|
// (#0e1014). Bump to zinc-700 for a clearly
|
||||||
|
// elevated bubble; light mode keeps the warm
|
||||||
|
// surface-card tint.
|
||||||
|
: "bg-surface-card text-ink border border-line dark:bg-zinc-700 dark:text-zinc-100 dark:border-zinc-600 shadow-sm"
|
||||||
}`}
|
}`}
|
||||||
>
|
>
|
||||||
{msg.content && (
|
{msg.content && (
|
||||||
@ -896,7 +908,7 @@ function MyChatPanel({ workspaceId, data }: Props) {
|
|||||||
placeholder={agentReachable ? "Send a message... (Shift+Enter for new line, paste images to attach)" : `Agent is ${data.status}`}
|
placeholder={agentReachable ? "Send a message... (Shift+Enter for new line, paste images to attach)" : `Agent is ${data.status}`}
|
||||||
disabled={!agentReachable || sending}
|
disabled={!agentReachable || sending}
|
||||||
rows={1}
|
rows={1}
|
||||||
className="flex-1 bg-surface-card border border-line rounded-lg px-3 py-2 text-xs text-ink placeholder-zinc-500 focus:outline-none focus:border-accent resize-none disabled:opacity-50"
|
className="flex-1 bg-surface-card border border-line rounded-lg px-3 py-2 text-xs text-ink placeholder-ink-soft dark:bg-zinc-800 dark:border-zinc-600 dark:placeholder-zinc-500 focus:outline-none focus:border-accent focus-visible:ring-2 focus-visible:ring-accent/40 resize-none disabled:opacity-50"
|
||||||
/>
|
/>
|
||||||
<button
|
<button
|
||||||
onClick={sendMessage}
|
onClick={sendMessage}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user