From c1a6660313ad9496289173e5d59fe80968325681 Mon Sep 17 00:00:00 2001 From: xiaoxixi Date: Sun, 26 Jul 2026 23:46:10 +0800 Subject: [PATCH] feat(webui): typography scale, surface depth, motion and unified nav icons MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Replace static Space Grotesk weights with a variable font (300-700) and bump the type scale across all tiers for a clearer weight hierarchy - Add dot-grid texture, ambient glow, layered shadows with machined edge highlights, and entrance/hover/press micro-interactions (reduced-motion aware) - Refine sidebar and session list: sliding amber active indicator, search focus ring, SESSIONS label header, living status dot, backdrop-blurred bars - Replace inconsistent glyph icons with a unified Lucide-style SVG icon set; rename 工具&Skills to 工具 and enlarge nav font --- src/gateway/http.rs | 8 +- webui/public/fonts/space-grotesk-500.woff2 | Bin 13312 -> 0 bytes webui/public/fonts/space-grotesk-700.woff2 | Bin 12840 -> 0 bytes webui/public/fonts/space-grotesk.woff2 | Bin 0 -> 22288 bytes webui/src/App.svelte | 30 +- webui/src/lib/components/ActivitySpine.svelte | 4 +- webui/src/lib/components/MetricTile.svelte | 7 +- webui/src/pages/ChatPage.svelte | 1 + webui/src/pages/LogsPage.svelte | 5 +- webui/src/pages/MemoryPage.svelte | 10 +- webui/src/pages/OverviewPage.svelte | 20 +- webui/src/pages/SettingsPage.svelte | 14 +- webui/src/pages/TasksPage.svelte | 4 +- webui/src/pages/ToolsPage.svelte | 6 +- webui/src/styles.css | 263 +++++++++++------- 15 files changed, 218 insertions(+), 154 deletions(-) delete mode 100644 webui/public/fonts/space-grotesk-500.woff2 delete mode 100644 webui/public/fonts/space-grotesk-700.woff2 create mode 100644 webui/public/fonts/space-grotesk.woff2 diff --git a/src/gateway/http.rs b/src/gateway/http.rs index 87baab9..f669275 100644 --- a/src/gateway/http.rs +++ b/src/gateway/http.rs @@ -87,12 +87,8 @@ pub async fn webui_theme_init() -> Response { const EMBEDDED_FONTS: &[(&str, &[u8])] = &[ ( - "space-grotesk-500.woff2", - include_bytes!(concat!(env!("OUT_DIR"), "/webui/fonts/space-grotesk-500.woff2")), - ), - ( - "space-grotesk-700.woff2", - include_bytes!(concat!(env!("OUT_DIR"), "/webui/fonts/space-grotesk-700.woff2")), + "space-grotesk.woff2", + include_bytes!(concat!(env!("OUT_DIR"), "/webui/fonts/space-grotesk.woff2")), ), ( "jetbrains-mono-400.woff2", diff --git a/webui/public/fonts/space-grotesk-500.woff2 b/webui/public/fonts/space-grotesk-500.woff2 deleted file mode 100644 index 0db251fc0bcec46bafd3fe49ebb5acf7d93284ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13312 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 GLCRiVB40oN diff --git a/webui/public/fonts/space-grotesk.woff2 b/webui/public/fonts/space-grotesk.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..0f3474ee8af2f8253225f3b41bf79be986a1ae13 GIT binary patch literal 22288 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 S8#S~?xaXqu;tAo2S~9su2vSq{fi^hG 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 literal 0 HcmV?d00001 diff --git a/webui/src/App.svelte b/webui/src/App.svelte index a88c341..8fe6769 100644 --- a/webui/src/App.svelte +++ b/webui/src/App.svelte @@ -16,14 +16,23 @@ import PairingPage from "./pages/PairingPage.svelte"; const pages = [ - ["chat", "◫", "聊天"], - ["overview", "◉", "概览"], - ["tools", "🧰", "工具&Skills"], - ["logs", "≋", "日志"], - ["memory", "◇", "记忆"], - ["tasks", "⌁", "任务"], - ["settings", "⚙", "配置"] + ["chat", "聊天"], + ["overview", "概览"], + ["tools", "工具"], + ["logs", "日志"], + ["memory", "记忆"], + ["tasks", "任务"], + ["settings", "配置"] ]; + const icons = { + chat: '', + overview: '', + tools: '', + logs: '', + memory: '', + tasks: '', + settings: '' + }; let current = $state("chat"); let menuOpen = $state(false); let online = $state(false); @@ -105,7 +114,10 @@
P
PicoBotLocal agent console
@@ -120,7 +132,7 @@
-

{meta[2]}

+

{meta[1]}

{#if current === "chat"} toast.show(text, error)} /> {:else if current === "logs"} diff --git a/webui/src/lib/components/ActivitySpine.svelte b/webui/src/lib/components/ActivitySpine.svelte index 41ed2b6..e60244e 100644 --- a/webui/src/lib/components/ActivitySpine.svelte +++ b/webui/src/lib/components/ActivitySpine.svelte @@ -42,8 +42,8 @@
diff --git a/webui/src/pages/ChatPage.svelte b/webui/src/pages/ChatPage.svelte index 7cbb61c..562173d 100644 --- a/webui/src/pages/ChatPage.svelte +++ b/webui/src/pages/ChatPage.svelte @@ -379,6 +379,7 @@