* fix(ui): make the light theme a real light theme The web shell hardcoded dark surfaces (panel hex, white/black alphas, white text), so switching to light left the sidebar, chat, composer and side panel dark with ink text on top. Shell surfaces now use the shared tokens: light gets a warm paper frame with white panels, hairline borders and short soft shadows; dark keeps its look via dark: variants. - Light palette: visible borders (border was equal to muted), white primary-foreground, lighter user bubble, readable warning/success. - Selected sidebar row lives in one place (roster-row-style). - Markdown, inline code, code blocks, quotes and scrollbars follow tokens. - cn() now knows the text-ui-* scale is a font size; tailwind-merge treated it as a color and dropped labels' color on resized buttons (sign-up submit rendered ink on ink). - Stage bloom was offset left by a double translateX. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016or6oqCqP8wbNafvhnbLQT * refactor(ui-web): leave the cn() fix to #115 #115 fixes the same tailwind-merge bug more completely (text, control, icon and spacing scales, guarded against styles.css) and adds the same two files, so this branch drops its narrower copy to avoid the overlap. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016or6oqCqP8wbNafvhnbLQT --------- Co-authored-by: Claude <noreply@anthropic.com>
21 lines
1020 B
TypeScript
21 lines
1020 B
TypeScript
/** One look for sidebar conversation rows: the main conversation entry and the bot roster. */
|
|
export function rosterRowClass(selected: boolean): string {
|
|
return `flex w-full items-center gap-3 rounded-2xl border px-3 py-3 mb-[2px] text-start transition-all duration-150 cursor-pointer min-h-[52px] ${
|
|
selected
|
|
? "border-sidebar-border bg-sidebar-accent shadow-xs dark:shadow-[inset_0_1px_0_rgba(255,255,255,0.14),0_4px_16px_rgba(0,0,0,0.4)]"
|
|
: "border-transparent hover:bg-sidebar-accent/50"
|
|
}`;
|
|
}
|
|
|
|
export function rosterNameClass(unread: boolean): string {
|
|
return unread ? "font-bold text-sidebar-foreground" : "font-semibold text-sidebar-foreground";
|
|
}
|
|
|
|
export const rosterTimeClass = "text-ui-body-sm rk-sidebar-muted tabular-nums font-medium";
|
|
|
|
export const rosterUnreadDotClass = "inline-block h-2 w-2 rounded-full bg-sidebar-foreground";
|
|
|
|
export function rosterPreviewClass(unread: boolean): string {
|
|
return unread ? "font-medium text-sidebar-foreground" : "text-sidebar-foreground/85";
|
|
}
|