diff --git a/frontend-web/public/agent-avatar-red.png b/frontend-web/public/agent-avatar-red.png new file mode 100644 index 00000000..229a7cda Binary files /dev/null and b/frontend-web/public/agent-avatar-red.png differ diff --git a/frontend-web/public/cm-assistant-logo-red.png b/frontend-web/public/cm-assistant-logo-red.png new file mode 100644 index 00000000..d2a9a38b Binary files /dev/null and b/frontend-web/public/cm-assistant-logo-red.png differ diff --git a/frontend-web/src/components/ui/sidebar.tsx b/frontend-web/src/components/ui/sidebar.tsx index f544abf3..8fd95752 100644 --- a/frontend-web/src/components/ui/sidebar.tsx +++ b/frontend-web/src/components/ui/sidebar.tsx @@ -27,7 +27,9 @@ import { const SIDEBAR_COOKIE_NAME = "sidebar_state"; const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7; -const SIDEBAR_WIDTH = "16rem"; +// Keep the workbench navigation compact across every theme. The visual theme +// only changes tokens; the information density should remain consistent. +const SIDEBAR_WIDTH = "14rem"; const SIDEBAR_WIDTH_MOBILE = "18rem"; const SIDEBAR_WIDTH_ICON = "3rem"; const SIDEBAR_KEYBOARD_SHORTCUT = "b"; diff --git a/frontend-web/src/components/workspace/agents/agent-brand-icon.tsx b/frontend-web/src/components/workspace/agents/agent-brand-icon.tsx index 4a82bf61..0364ff8b 100644 --- a/frontend-web/src/components/workspace/agents/agent-brand-icon.tsx +++ b/frontend-web/src/components/workspace/agents/agent-brand-icon.tsx @@ -1,7 +1,6 @@ "use client"; -import { BotIcon, SparklesIcon } from "lucide-react"; - +import { useTheme } from "@/contexts/ThemeContext"; import { cn } from "@/lib/utils"; type AgentBrandIconProps = { @@ -12,27 +11,15 @@ type AgentBrandIconProps = { const SIZE_STYLES = { nav: { frame: "size-[22px] rounded-md", - bot: "size-3.5", - badge: "-right-1 -top-1 size-2.5", - sparkle: "size-1.5", }, sm: { frame: "size-10 rounded-full", - bot: "size-[18px]", - badge: "-right-1 -top-1 size-3.5", - sparkle: "size-2", }, md: { frame: "size-12 rounded-full", - bot: "size-6", - badge: "-right-1 -top-1 size-4", - sparkle: "size-2.5", }, lg: { frame: "size-16 rounded-full", - bot: "size-7", - badge: "-right-1 -top-1 size-[18px]", - sparkle: "size-3", }, } as const; @@ -41,50 +28,26 @@ export function AgentBrandIcon({ size = "md", }: AgentBrandIconProps) { const styles = SIZE_STYLES[size]; - const showBadge = size === "nav"; - - if (size !== "nav") { - return ( - - ); - } + const { theme } = useTheme(); + const avatarSrc = + theme === "light" ? "/agent-avatar-red.png" : "/agent-avatar.png"; return ( ); } diff --git a/frontend-web/src/components/workspace/agents/agent-card.tsx b/frontend-web/src/components/workspace/agents/agent-card.tsx index 62870b9a..2a4dad79 100644 --- a/frontend-web/src/components/workspace/agents/agent-card.tsx +++ b/frontend-web/src/components/workspace/agents/agent-card.tsx @@ -567,7 +567,7 @@ export function AgentCard({ agent, layout = "card", onPublisherClick }: AgentCar {isFromOthers && ( 来自他人 @@ -576,7 +576,7 @@ export function AgentCard({ agent, layout = "card", onPublisherClick }: AgentCar {(isOwned || isAdmin) && !isBuiltin && agent.published && !agent.is_private && ( @@ -675,7 +675,7 @@ export function AgentCard({ agent, layout = "card", onPublisherClick }: AgentCar {desensitize(group)} @@ -687,7 +687,7 @@ export function AgentCard({ agent, layout = "card", onPublisherClick }: AgentCar { e.stopPropagation(); @@ -841,8 +841,8 @@ export function AgentCard({ agent, layout = "card", onPublisherClick }: AgentCar size="sm" className={cn( isList - ? "shrink-0 rounded-xl bg-[#1f63e9] px-4 font-medium text-white hover:bg-[#1857d4]" - : "h-11 w-full rounded-lg border-[#b9d1ff] bg-white font-medium text-[#135ee8] shadow-none hover:border-[#79a8ff] hover:bg-[#f7faff] hover:text-[#135ee8] dark:border-blue-700 dark:bg-slate-900 dark:text-blue-300", + ? "bg-primary hover:bg-primary/90 shrink-0 rounded-xl px-4 font-medium text-primary-foreground" + : "border-primary/35 text-primary hover:border-primary/55 hover:bg-primary/5 h-11 w-full rounded-lg bg-white font-medium shadow-none dark:bg-slate-900 dark:text-primary", )} onClick={handleChat} > @@ -857,8 +857,8 @@ export function AgentCard({ agent, layout = "card", onPublisherClick }: AgentCar 私密 ) : agent.published || isBuiltin ? ( - - + + 已发布 ) : ( @@ -944,15 +944,15 @@ export function AgentCard({ agent, layout = "card", onPublisherClick }: AgentCar const cardLayout = ( {agent.featured_order != null ? ( <>
- + 推荐 @@ -991,7 +991,7 @@ export function AgentCard({ agent, layout = "card", onPublisherClick }: AgentCar )} - +
{cardStatusBadge} +
diff --git a/frontend-web/src/components/workspace/agents/agent-gallery.tsx b/frontend-web/src/components/workspace/agents/agent-gallery.tsx index 0def486c..4a9bde5a 100644 --- a/frontend-web/src/components/workspace/agents/agent-gallery.tsx +++ b/frontend-web/src/components/workspace/agents/agent-gallery.tsx @@ -271,17 +271,17 @@ export function AgentGallery() { }; const renderEmpty = (description: string, showNewButton = false) => ( -
+
-

{t.agents.emptyTitle}

-

+

{t.agents.emptyTitle}

+

{description}

{showNewButton && (