diff --git a/apps/desktop/src/renderer/settings/data-settings-page.tsx b/apps/desktop/src/renderer/settings/data-settings-page.tsx
index a6471fa3ea..d66857f3e7 100644
--- a/apps/desktop/src/renderer/settings/data-settings-page.tsx
+++ b/apps/desktop/src/renderer/settings/data-settings-page.tsx
@@ -202,9 +202,15 @@ export function DataSettingsPage() {
value="本机 localStorage"
/>
+ {/* Detail audit: was two wrapped rows with 打开文件夹 wearing primary
+ (a utility action) and destructive 清空输入历史 dressed neutral.
+ One row; utilities are secondary; the destructive action reads
+ destructive (red outline family, same recipe as the permission
+ dialog confirm). */}
-
-
@@ -1052,9 +1051,9 @@ function MemoryEntryList(props: {
{props.onCopyReference && (
void props.onCopyReference?.(entry)}
>
@@ -1064,9 +1063,8 @@ function MemoryEntryList(props: {
{props.onFocusDraft && (
void props.onFocusDraft?.(entry)}
>
定位草稿
@@ -1075,9 +1073,9 @@ function MemoryEntryList(props: {
{props.onStatusChange && (
void props.onStatusChange?.(entry, props.archived ? 'active' : 'archived')}
diff --git a/apps/desktop/src/renderer/settings/settings-nav.ts b/apps/desktop/src/renderer/settings/settings-nav.ts
index b225ebd4a4..cd2b24a6cd 100644
--- a/apps/desktop/src/renderer/settings/settings-nav.ts
+++ b/apps/desktop/src/renderer/settings/settings-nav.ts
@@ -93,7 +93,7 @@ export const SETTINGS_NAV: SettingsNavItem[] = [
{ id: 'memory', label: '记忆', Icon: Brain, enabled: true, group: 'AI 与集成',
description: '本地 MEMORY.md、项目指令文件与上下文注入开关。' },
{ id: 'daily-review', label: '每日回顾', Icon: CalendarDays, enabled: true, group: 'AI 与集成',
- description: '当天对话、模型与工具用量汇总。' },
+ description: '每天自动分析本机对话,生成摘要、遗漏提醒和建议。模型按需消耗。' },
{ id: 'voice', label: '语音', Icon: Mic, enabled: true, group: 'AI 与集成',
description: '语音转写、麦克风权限与本地音频管线设置。' },
{ id: 'open-gateway', label: '开放网关', Icon: Network, enabled: true, group: 'AI 与集成',
diff --git a/apps/desktop/src/renderer/styles/settings/bot.css b/apps/desktop/src/renderer/styles/settings/bot.css
index 50f3588ead..9d0d6ae564 100644
--- a/apps/desktop/src/renderer/styles/settings/bot.css
+++ b/apps/desktop/src/renderer/styles/settings/bot.css
@@ -216,7 +216,9 @@
}
.settingsBotStatusGrid {
display: grid;
- grid-template-columns: repeat(4, minmax(0, 1fr));
+ /* Detail audit: fixed 4 columns orphaned the 5th status card onto its
+ own row. Auto-fit keeps one balanced row and degrades gracefully. */
+ grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
gap: var(--space-2);
margin: 0;
}
@@ -412,6 +414,13 @@
transition: background var(--duration-base) var(--ease-out-strong);
}
+/* Detail audit: bare Switch controls sat at the value column's START
+ (x≈mid-page) while inputs/selects hug the right rail — two alignments
+ in one list. Controls end-align like every other row control. */
+.settingsRow > button[role="switch"] {
+ justify-self: end;
+}
+
/* #520 PR9: .settingsBadge retired onto the Chip primitive variant="neutral"
(packages/ui/src/primitives/chip.tsx, size="sm"). Generic settings labels
stay squared (radius-control), not pill Badge. */
diff --git a/apps/desktop/src/renderer/styles/settings/connection.css b/apps/desktop/src/renderer/styles/settings/connection.css
index 460a3520fe..182bad020a 100644
--- a/apps/desktop/src/renderer/styles/settings/connection.css
+++ b/apps/desktop/src/renderer/styles/settings/connection.css
@@ -210,16 +210,6 @@
align-items: center;
gap: var(--space-1-5);
}
-.settingsInlineTextButton {
- border: 0;
- padding: 0;
- background: transparent;
- color: var(--link);
- font: inherit;
- }
-.settingsInlineTextButton:hover {
- text-decoration: underline;
- }
.settingsConnectionActions {
display: flex;
flex-wrap: wrap;
diff --git a/apps/desktop/src/renderer/styles/settings/memory.css b/apps/desktop/src/renderer/styles/settings/memory.css
index e1a4a81cbe..7f38700073 100644
--- a/apps/desktop/src/renderer/styles/settings/memory.css
+++ b/apps/desktop/src/renderer/styles/settings/memory.css
@@ -492,11 +492,12 @@
.settingsMemoryMeta {
flex-wrap: wrap;
row-gap: var(--space-1);
- /* Anchor the strip: it floated unboxed between two cards and read
- as orphaned fragments. A hairline + breathing room marks it as
- the editor's status footnote (divider over a nested card). */
- padding: var(--space-1-5) var(--space-0-5) 0;
- border-top: var(--border-width-hairline) solid var(--foreground-10);
+ /* Detail audit round 2: the hairline alone still read as orphaned
+ fragments floating between two cards (user screenshot). A quiet
+ filled strip gives the path + status words a real container. */
+ padding: var(--space-1-5) var(--space-2-5);
+ border-radius: var(--radius-control);
+ background: var(--foreground-3);
}
.settingsMemoryPath {
/* The component already shortens the path for display
diff --git a/apps/desktop/src/renderer/styles/settings/nav-sidebar.css b/apps/desktop/src/renderer/styles/settings/nav-sidebar.css
index adcac9cb95..e969a413f7 100644
--- a/apps/desktop/src/renderer/styles/settings/nav-sidebar.css
+++ b/apps/desktop/src/renderer/styles/settings/nav-sidebar.css
@@ -257,7 +257,7 @@
align-items: center;
gap: var(--space-2);
padding: var(--space-2) var(--space-3);
- border: var(--border-width-hairline) dashed oklch(from var(--info) l c h / 0.32);
+ border: var(--border-width-hairline) solid oklch(from var(--info) l c h / 0.32);
border-radius: var(--radius-surface);
background: oklch(from var(--info) l c h / 0.06);
color: var(--foreground-secondary);
diff --git a/apps/desktop/src/renderer/styles/settings/theme-preview.css b/apps/desktop/src/renderer/styles/settings/theme-preview.css
index 574c7c3f8a..e15ce03085 100644
--- a/apps/desktop/src/renderer/styles/settings/theme-preview.css
+++ b/apps/desktop/src/renderer/styles/settings/theme-preview.css
@@ -140,14 +140,17 @@
display: grid;
gap: var(--space-2);
padding: var(--space-3) var(--space-4);
- border: var(--border-width-hairline) solid oklch(from var(--success) l c h / 0.24);
+ /* Detail audit: this card family (关于 privacy card + 数据 import/export)
+ wore --success green as SECTION EMPHASIS — a non-status use that read
+ as residual brand-green after the blue rebrand. Brand family instead. */
+ border: var(--border-width-hairline) solid oklch(from var(--brand-deep) l c h / 0.22);
border-radius: var(--radius-surface);
- background: oklch(from var(--success) l c h / 0.04);
+ background: oklch(from var(--brand-deep) l c h / 0.04);
}
.settingsAboutPrivacy h3 {
margin: 0;
- color: var(--success);
+ color: oklch(from var(--brand-deep) calc(l - 0.12) c h);
font-size: var(--font-size-ui);
font-weight: var(--font-weight-bold);
letter-spacing: var(--tracking-wider);
@@ -448,31 +451,10 @@
gap: var(--space-3);
margin-top: var(--space-2);
}
-.settingsBotAction {
- appearance: none;
- min-width: 110px;
- min-height: 36px;
- padding: 0 var(--space-6);
- border: var(--border-width-hairline) solid oklch(from var(--accent) l c h / 0.45);
- border-radius: var(--radius-pill);
- background: transparent;
- color: var(--accent);
- font-size: var(--font-size-ui);
- font-weight: var(--font-weight-medium);
- transition: background var(--duration-quick) var(--ease-out-strong), border-color var(--duration-quick) var(--ease-out-strong), color var(--duration-quick) var(--ease-out-strong);
-}
-.settingsBotAction:hover {
- background: oklch(from var(--accent) l c h / 0.08);
-}
-.settingsBotAction:focus-visible {
- outline: none;
- box-shadow: 0 0 0 3px oklch(from var(--accent) l c h / 0.22);
-}
-.settingsBotAction[disabled] {
- opacity: var(--opacity-disabled);
- cursor: not-allowed;
-}
-
+/* Detail audit: the .settingsBotAction pill re-skin (radius-pill + raw
+ accent chrome smuggled through this file's governance allowlist) was
+ removed — the buttons render as standard UiButton secondary chips like
+ every other settings action. */
/* Inline hint after a field label — mirrors "(国内网络必填)" /
"(仅用于 Bot 鉴权)" in the reference. */
.settingsFieldHint {