diff --git a/packages/web-ui/src/components/SettingsClient.tsx b/packages/web-ui/src/components/SettingsClient.tsx
index f3de0d7b..2f6bf3e8 100644
--- a/packages/web-ui/src/components/SettingsClient.tsx
+++ b/packages/web-ui/src/components/SettingsClient.tsx
@@ -2355,7 +2355,7 @@ function modelCardBrand(model: ModelCatalogEntryInfo['model']): ModelBrand {
return { id: 'recraft', label: 'Recraft', src: '/brand/models/recraft.svg' };
}
if (/(clash mock|mock image|mock text)/.test(identity)) {
- return { id: 'clash', label: 'Clash', src: '/brand/logo-mark.svg' };
+ return { id: 'clash', label: 'Clash', src: '/brand/logo-c.svg' };
}
if (/(nano-banana|gemini|veo|google)/.test(identity)) {
return { id: 'google', label: 'Google', src: '/brand/providers/google.svg' };
@@ -2392,7 +2392,7 @@ function modelCardBrand(model: ModelCatalogEntryInfo['model']): ModelBrand {
}
if (/(local|mlx|whisper|kokoro|piper)/.test(identity)) {
if (/(local agent)/.test(identity)) {
- return { id: 'clash', label: 'Clash', src: '/brand/logo-mark.svg' };
+ return { id: 'clash', label: 'Clash', src: '/brand/logo-c.svg' };
}
return { id: 'local', label: 'Local' };
}
diff --git a/packages/web-ui/src/components/TopNavigation.desktop.test.tsx b/packages/web-ui/src/components/TopNavigation.desktop.test.tsx
index fa23a92b..10baf8f1 100644
--- a/packages/web-ui/src/components/TopNavigation.desktop.test.tsx
+++ b/packages/web-ui/src/components/TopNavigation.desktop.test.tsx
@@ -177,7 +177,7 @@ describe("TopNavigation desktop chrome", () => {
const home = await screen.findByRole("button", { name: "Clash home" });
const logos = Array.from(home.querySelectorAll("img"));
expect(logos.map((logo) => logo.getAttribute("src"))).toEqual(
- expect.arrayContaining(["/icon-192.png", "/brand/logo-mark-dark.svg"]),
+ expect.arrayContaining(["/brand/logo-c.svg"]),
);
expect(logos.some((logo) => logo.className.includes("dark:block"))).toBe(true);
expect(logos.every((logo) => !logo.className.includes("dark:grayscale"))).toBe(true);
diff --git a/packages/web-ui/src/components/TopNavigation.tsx b/packages/web-ui/src/components/TopNavigation.tsx
index 849fd6d9..c7e554b6 100644
--- a/packages/web-ui/src/components/TopNavigation.tsx
+++ b/packages/web-ui/src/components/TopNavigation.tsx
@@ -347,13 +347,13 @@ export default function TopNavigation() {
icon={
-
-
- Clash
+
+ C
+
+
+ lash
+
);
}
diff --git a/packages/web-ui/src/components/landing/LandingNav.test.tsx b/packages/web-ui/src/components/landing/LandingNav.test.tsx
index 98f1bd40..0cbd4830 100644
--- a/packages/web-ui/src/components/landing/LandingNav.test.tsx
+++ b/packages/web-ui/src/components/landing/LandingNav.test.tsx
@@ -32,16 +32,17 @@ describe("LandingNav", () => {
expect(headerSurface?.className).toContain("clash-control-surface");
});
- it("uses the current Clash agent logo", () => {
+ it("uses the Clash wordmark with a brand-colored C", () => {
const { container, getByLabelText } = render();
expect(getByLabelText("Clash")).toBeTruthy();
- expect(
- container.querySelector('img[src="/brand/logo-mark.svg"]'),
- ).toBeTruthy();
- expect(
- container.querySelector('img[src="/brand/logo-mark-dark.svg"]'),
- ).toBeTruthy();
- expect(container.querySelector(".clash-wordmark-slash")).toBeNull();
+ const c = container.querySelector(".clash-wordmark-c");
+ expect(c).toBeTruthy();
+ expect(c?.className).toContain("text-brand");
+ expect(c?.textContent).toBe("C");
+ expect(container.querySelector(".clash-wordmark-rest")?.textContent).toBe(
+ "lash",
+ );
+ expect(container.querySelector('img[src*="/brand/logo-mark"]')).toBeNull();
});
});
diff --git a/packages/web-ui/src/components/visualLanguage.test.tsx b/packages/web-ui/src/components/visualLanguage.test.tsx
index 21be1ba5..9c65f5a1 100644
--- a/packages/web-ui/src/components/visualLanguage.test.tsx
+++ b/packages/web-ui/src/components/visualLanguage.test.tsx
@@ -284,14 +284,6 @@ describe("visual language surfaces", () => {
expect(source).toMatch(/clash-node-badge-draft/);
});
- it("uses the transparent Clash mark for the browser tab favicon", () => {
- const favicon = readFileSync(join(process.cwd(), "apps/web/public/favicon.svg"), "utf8");
- const mark = readFileSync(join(process.cwd(), "apps/web/public/brand/logo-mark.svg"), "utf8");
-
- expect(favicon).toBe(mark);
- expect(favicon).not.toMatch(/ {
const source = [
"packages/web-ui/src/components/nodes/TextNode.tsx",
@@ -517,7 +509,7 @@ describe("visual language surfaces", () => {
expect(source).toMatch(/clash-hero-stage/);
expect(source).toMatch(/clash-hero-prompt/);
expect(source).not.toMatch(/lg:pl-(12|16)|xl:pl-(12|16)/);
- expect(source).toMatch(/\/brand\/logo-mark-animated\.svg/);
+ expect(source).toMatch(/\/brand\/logo-c-animated\.svg/);
expect(source).toMatch(/clash-dashboard-shell/);
expect(source).toMatch(/clash-projects-empty-workbench/);
expect(source).toMatch(/clash-projects-empty-canvas/);
@@ -723,7 +715,7 @@ describe("visual language surfaces", () => {
expect(source).toMatch(/error\.code/);
expect(source).toMatch(/Reload/);
expect(source).toMatch(/Go home/);
- expect(source).toMatch(/\/brand\/logo-mark-error\.svg/);
+ expect(source).toMatch(/\/brand\/logo-c-error\.svg/);
expect(errorMark).toMatch(/aria-label="Clash error logo"/);
expect(errorMark.match(/stroke-linecap="round"/g)?.length).toBeGreaterThanOrEqual(5);
});