diff --git a/ui/src/lib/color-contrast.ts b/ui/src/lib/color-contrast.ts index 70b2296a31..a7eb692a2c 100644 --- a/ui/src/lib/color-contrast.ts +++ b/ui/src/lib/color-contrast.ts @@ -68,8 +68,18 @@ function composite( }; } -const TEXT_LIGHT = "#f8fafc"; -const TEXT_DARK = "#111827"; +/** + * Shared readable-text pair (slate-50 / gray-900) for "pick light or dark + * text over an arbitrary background" logic. Byte-identical values were + * previously duplicated in lib/worktree-branding.ts (DECISION-SHEET.md A2); + * this is the single source. NOT the same thing as ThemeContext.tsx's + * pair (#18181b/#ffffff), which stays separate. + */ +export const READABLE_TEXT_LIGHT = "#f8fafc"; +export const READABLE_TEXT_DARK = "#111827"; + +const TEXT_LIGHT = READABLE_TEXT_LIGHT; +const TEXT_DARK = READABLE_TEXT_DARK; /** * Pick a readable text color for a solid background. diff --git a/ui/src/lib/worktree-branding.ts b/ui/src/lib/worktree-branding.ts index 6f6d8dc4e4..d4781ded4d 100644 --- a/ui/src/lib/worktree-branding.ts +++ b/ui/src/lib/worktree-branding.ts @@ -1,3 +1,5 @@ +import { READABLE_TEXT_LIGHT, READABLE_TEXT_DARK } from "./color-contrast"; + export type WorktreeUiBranding = { enabled: true; name: string; @@ -46,7 +48,7 @@ function pickReadableTextColor(background: string): string { (0.0722 * relativeLuminanceChannel(b)); const whiteContrast = 1.05 / (luminance + 0.05); const blackContrast = (luminance + 0.05) / 0.05; - return whiteContrast >= blackContrast ? "#f8fafc" : "#111827"; + return whiteContrast >= blackContrast ? READABLE_TEXT_LIGHT : READABLE_TEXT_DARK; } export function getWorktreeUiBranding(): WorktreeUiBranding | null {