From 7e48de8b627facfc155ec2af26848a7ea1910ffd Mon Sep 17 00:00:00 2001 From: huyan Date: Thu, 13 Aug 2026 16:30:23 +0800 Subject: [PATCH 1/2] refactor(ui): unify product color tokens Product pages used separate palettes and inconsistent surface roles. Introduce shared semantic color tokens and migrate authenticated UI consumers. Keep product colors consistent without changing workflows or backend behavior. --- frontend/src/app/layout/app-header.tsx | 28 +-- frontend/src/app/layout/index.tsx | 2 +- frontend/src/app/layout/page-back-button.tsx | 2 +- frontend/src/index.css | 52 +++++- frontend/src/pages/account/account.css | 30 +-- frontend/src/pages/account/index.test.tsx | 2 +- frontend/src/pages/account/index.tsx | 62 +++--- frontend/src/pages/asset-library/index.tsx | 28 +-- frontend/src/pages/character-detail/index.tsx | 78 ++++---- frontend/src/pages/playtest/entry.tsx | 62 +++--- frontend/src/pages/playtest/index.tsx | 4 +- .../src/pages/playtest/workbench/index.tsx | 26 +-- frontend/src/pages/project-create/index.tsx | 52 +++--- frontend/src/pages/project-detail/index.tsx | 36 ++-- frontend/src/pages/projects/index.tsx | 54 +++--- frontend/src/pages/quick-start/index.tsx | 176 +++++++++--------- frontend/src/pages/workflow-editor/index.tsx | 80 ++++---- .../pages/workflow-editor/workflow-editor.css | 38 ++-- frontend/src/pages/workspace/index.tsx | 138 +++++++------- frontend/src/pages/workspace/workspace.css | 21 +-- .../src/shared/ui/app-color-system.test.ts | 79 ++++++++ frontend/src/shared/ui/pagination.tsx | 6 +- 22 files changed, 585 insertions(+), 471 deletions(-) create mode 100644 frontend/src/shared/ui/app-color-system.test.ts diff --git a/frontend/src/app/layout/app-header.tsx b/frontend/src/app/layout/app-header.tsx index 97611102..9660b4cd 100644 --- a/frontend/src/app/layout/app-header.tsx +++ b/frontend/src/app/layout/app-header.tsx @@ -111,7 +111,7 @@ export function AppHeader() {
@@ -121,7 +121,7 @@ export function AppHeader() { aria-label="返回 Windup 工作台" data-motion="text-wave" onClick={() => playTextWave('brand')} - className={`flex min-h-11 shrink-0 items-center gap-2.5 pr-1 text-[#1c231e] focus-visible:rounded-md focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#284331] max-[360px]:hidden ${ + className={`flex min-h-11 shrink-0 items-center gap-2.5 pr-1 text-app-ink focus-visible:rounded-md focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-app-accent max-[360px]:hidden ${ wave.entry === 'brand' ? 'app-header-text-wave' : '' }`} > @@ -147,10 +147,10 @@ export function AppHeader() { aria-current={active ? 'page' : undefined} data-motion="text-wave" onClick={() => playTextWave(item.motionKey)} - className={`relative inline-flex min-h-11 items-center px-1.5 text-[12px] font-medium whitespace-nowrap transition-colors after:absolute after:inset-x-1.5 after:bottom-0 after:h-[2px] after:origin-center after:bg-[#284331] after:transition-transform focus-visible:rounded-md focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[#284331] sm:px-3 sm:text-[13px] sm:after:inset-x-3 ${ + className={`relative inline-flex min-h-11 items-center px-1.5 text-[12px] font-medium whitespace-nowrap transition-colors after:absolute after:inset-x-1.5 after:bottom-0 after:h-[2px] after:origin-center after:bg-app-accent after:transition-transform focus-visible:rounded-md focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-app-accent sm:px-3 sm:text-[13px] sm:after:inset-x-3 ${ active - ? 'text-[#243c2c] after:scale-x-100' - : 'text-[#667068] after:scale-x-0 hover:text-[#26372c]' + ? 'text-app-accent after:scale-x-100' + : 'text-app-muted after:scale-x-0 hover:text-app-accent' } ${wave.entry === item.motionKey ? 'app-header-text-wave' : ''}`} > {item.compactLabel ? ( @@ -183,7 +183,7 @@ export function AppHeader() { {session.state.status === 'booting' ? ( @@ -191,7 +191,7 @@ export function AppHeader() { 登录 / 注册 登录 @@ -204,12 +204,12 @@ export function AppHeader() { aria-expanded={accountMenuOpen} title={session.state.user.email} onClick={toggleAccountMenu} - className={`inline-flex min-h-10 max-w-24 items-center gap-2 rounded-lg px-2.5 text-xs font-medium text-[#3e4941] transition-[color,background-color,transform] duration-150 ease-out hover:bg-[#e5e8e3] hover:text-[#26372c] active:translate-y-px active:scale-[0.97] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#284331] motion-reduce:transform-none sm:max-w-36 ${ - accountMenuOpen ? 'bg-[#e5e8e3] text-[#26372c]' : '' + className={`inline-flex min-h-10 max-w-24 items-center gap-2 rounded-lg px-2.5 text-xs font-medium text-app-ink-soft transition-[color,background-color,transform] duration-150 ease-out hover:bg-app-accent-muted hover:text-app-accent active:translate-y-px active:scale-[0.97] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-app-accent motion-reduce:transform-none sm:max-w-36 ${ + accountMenuOpen ? 'bg-app-accent-muted text-app-accent' : '' }`} > @@ -220,7 +220,7 @@ export function AppHeader() {