diff --git a/packages/client/src/components/hermes/settings/AccountSettings.vue b/packages/client/src/components/hermes/settings/AccountSettings.vue index c251dc6..2109331 100644 --- a/packages/client/src/components/hermes/settings/AccountSettings.vue +++ b/packages/client/src/components/hermes/settings/AccountSettings.vue @@ -392,10 +392,7 @@ onMounted(() => { loadLockedIps(); }); } .section-title { - font-size: 15px; - font-weight: 600; - color: $text-primary; - margin: 0 0 16px; + margin: 0 0 12px; } .locked-list { diff --git a/packages/client/src/components/hermes/settings/AgentSettings.vue b/packages/client/src/components/hermes/settings/AgentSettings.vue index e60d115..54017e2 100644 --- a/packages/client/src/components/hermes/settings/AgentSettings.vue +++ b/packages/client/src/components/hermes/settings/AgentSettings.vue @@ -81,7 +81,4 @@ function debouncedSave(key: string, value: any) { diff --git a/packages/client/src/components/hermes/settings/CompressionSettings.vue b/packages/client/src/components/hermes/settings/CompressionSettings.vue index af9991f..0cd80a7 100644 --- a/packages/client/src/components/hermes/settings/CompressionSettings.vue +++ b/packages/client/src/components/hermes/settings/CompressionSettings.vue @@ -99,8 +99,4 @@ function debouncedSave(key: string, value: any) { diff --git a/packages/client/src/components/hermes/settings/DisplaySettings.vue b/packages/client/src/components/hermes/settings/DisplaySettings.vue index 0bcb479..d11613b 100644 --- a/packages/client/src/components/hermes/settings/DisplaySettings.vue +++ b/packages/client/src/components/hermes/settings/DisplaySettings.vue @@ -128,10 +128,6 @@ async function testCompletionNotification() { diff --git a/packages/client/src/components/hermes/settings/ModelSettings.vue b/packages/client/src/components/hermes/settings/ModelSettings.vue index 693d1ce..7c61006 100644 --- a/packages/client/src/components/hermes/settings/ModelSettings.vue +++ b/packages/client/src/components/hermes/settings/ModelSettings.vue @@ -126,10 +126,6 @@ async function handleSaveCustom(providerKey: string) { diff --git a/packages/client/src/components/hermes/settings/ProxySettings.vue b/packages/client/src/components/hermes/settings/ProxySettings.vue index 05d65e4..ba2f0e0 100644 --- a/packages/client/src/components/hermes/settings/ProxySettings.vue +++ b/packages/client/src/components/hermes/settings/ProxySettings.vue @@ -75,14 +75,21 @@ async function save() { } .section-title { - margin: 0 0 6px; - font-size: 18px; + margin: 0 0 8px; + padding-bottom: 8px; + border-bottom: 1px solid $border-light; + font-family: $font-code; + font-size: 12.5px; + font-weight: 600; + letter-spacing: 0.04em; + color: $text-primary; } .section-hint { - margin: 0 0 16px; + margin: 0 0 14px; color: $text-muted; - font-size: 13px; + font-size: 12.5px; + line-height: 1.6; } .input-lg { diff --git a/packages/client/src/components/hermes/settings/SessionSettings.vue b/packages/client/src/components/hermes/settings/SessionSettings.vue index 75e6e32..cc29d1c 100644 --- a/packages/client/src/components/hermes/settings/SessionSettings.vue +++ b/packages/client/src/components/hermes/settings/SessionSettings.vue @@ -145,7 +145,4 @@ async function toggleWriteApproval(section: "memory" | "skills", value: boolean) diff --git a/packages/client/src/components/hermes/settings/SettingRow.vue b/packages/client/src/components/hermes/settings/SettingRow.vue index c0dfe4d..970c9e1 100644 --- a/packages/client/src/components/hermes/settings/SettingRow.vue +++ b/packages/client/src/components/hermes/settings/SettingRow.vue @@ -20,37 +20,53 @@ defineProps<{ diff --git a/tests/client/style-system.test.ts b/tests/client/style-system.test.ts index 89703ce..ba308ac 100644 --- a/tests/client/style-system.test.ts +++ b/tests/client/style-system.test.ts @@ -57,6 +57,38 @@ describe('client style system', () => { expect(source).not.toMatch(/localStorage\.getItem\(['"]hermes_(brightness|style)/) }) + it('exposes the CYBER page shell so pages stop falling back to bare Arco layouts', () => { + // 原型里每个页面都是 panel / panel-h / panel-b / kv / tabs 这套外壳。 + // 25 个页面各写一遍同样的框会漂移,所以抽成全局类并在这里锁住。 + const globalStyles = readClientFile('styles/global.scss') + + for (const cls of ['.cy-view', '.cy-panel', '.cy-panel-h', '.cy-panel-b', '.cy-kv', '.cy-tabs', '.cy-tab']) { + expect(globalStyles).toContain(cls) + } + + // 选中态必须是霓虹青 + 发丝下划线,不是胶囊底色。 + const onRule = globalStyles.slice(globalStyles.indexOf('&.on {'), globalStyles.indexOf('&.dis {')) + expect(onRule).toContain('color: $accent-primary;') + expect(onRule).toContain('border-bottom-color: $accent-primary;') + }) + + it('keeps the settings shell on the shared page header baseline', () => { + // 设置页是唯一有 11 个 pane 的页面,最容易退回 Arco 的 a-tabs 默认外观。 + const settingsView = readClientFile('views/hermes/SettingsView.vue') + + expect(settingsView).toContain('cy-tabs') + expect(settingsView).toContain('cy-panel') + // 不再依赖 a-tabs / a-tab-pane。 + expect(settingsView).not.toContain(' settingsView.indexOf(`key: "${key}"`)) + expect(positions.every(p => p > 0)).toBe(true) + expect([...positions].sort((a, b) => a - b)).toEqual(positions) + }) + it('keeps mobile inputs at 16px so iOS does not zoom on focus', () => { const globalStyles = readClientFile('styles/global.scss')