diff --git a/apps/web/src/components/SettingsPane.tsx b/apps/web/src/components/SettingsPane.tsx
index 4c61be4a..637b5bf7 100644
--- a/apps/web/src/components/SettingsPane.tsx
+++ b/apps/web/src/components/SettingsPane.tsx
@@ -39,8 +39,10 @@ interface SettingsPaneProps {
onShowGuide?: () => void;
}
+// Slate and brand color variables already switch values with the root theme.
+// Keep this pane on the base utilities so dark variants do not invert them twice.
const SettingsGroup = ({ children }: { children: ReactNode }) => (
-
+
{children}
);
@@ -79,10 +81,10 @@ export const SettingsPane = ({
key: "general",
label: t("settings.tabs.general"),
icon: SlidersHorizontal,
- colorClass: "text-emerald-700 dark:text-emerald-400",
- bgColorClass: "bg-emerald-50/80 dark:bg-emerald-950/40",
- hoverColorClass: "hover:bg-emerald-50/40 dark:hover:bg-emerald-950/20",
- iconColorClass: "text-emerald-600 dark:text-emerald-400",
+ colorClass: "text-emerald-700",
+ bgColorClass: "bg-emerald-50/80",
+ hoverColorClass: "hover:bg-emerald-50/40",
+ iconColorClass: "text-emerald-600",
},
...(isOwner
? [
@@ -90,10 +92,10 @@ export const SettingsPane = ({
key: "users" as const,
label: t("users.title"),
icon: Users,
- colorClass: "text-emerald-700 dark:text-emerald-400",
- bgColorClass: "bg-emerald-50/80 dark:bg-emerald-950/40",
- hoverColorClass: "hover:bg-emerald-50/40 dark:hover:bg-emerald-950/20",
- iconColorClass: "text-emerald-600 dark:text-emerald-400",
+ colorClass: "text-emerald-700",
+ bgColorClass: "bg-emerald-50/80",
+ hoverColorClass: "hover:bg-emerald-50/40",
+ iconColorClass: "text-emerald-600",
},
]
: []),
@@ -101,28 +103,28 @@ export const SettingsPane = ({
key: "data",
label: t("settings.tabs.data"),
icon: Database,
- colorClass: "text-emerald-700 dark:text-emerald-400",
- bgColorClass: "bg-emerald-50/80 dark:bg-emerald-950/40",
- hoverColorClass: "hover:bg-emerald-50/40 dark:hover:bg-emerald-950/20",
- iconColorClass: "text-emerald-600 dark:text-emerald-400",
+ colorClass: "text-emerald-700",
+ bgColorClass: "bg-emerald-50/80",
+ hoverColorClass: "hover:bg-emerald-50/40",
+ iconColorClass: "text-emerald-600",
},
{
key: "ai",
label: t("settings.tabs.ai"),
icon: Sparkles,
- colorClass: "text-emerald-700 dark:text-emerald-400",
- bgColorClass: "bg-emerald-50/80 dark:bg-emerald-950/40",
- hoverColorClass: "hover:bg-emerald-50/40 dark:hover:bg-emerald-950/20",
- iconColorClass: "text-emerald-600 dark:text-emerald-400",
+ colorClass: "text-emerald-700",
+ bgColorClass: "bg-emerald-50/80",
+ hoverColorClass: "hover:bg-emerald-50/40",
+ iconColorClass: "text-emerald-600",
},
{
key: "account",
label: t("settings.tabs.account"),
icon: Shield,
- colorClass: "text-emerald-700 dark:text-emerald-400",
- bgColorClass: "bg-emerald-50/80 dark:bg-emerald-950/40",
- hoverColorClass: "hover:bg-emerald-50/40 dark:hover:bg-emerald-950/20",
- iconColorClass: "text-emerald-600 dark:text-emerald-400",
+ colorClass: "text-emerald-700",
+ bgColorClass: "bg-emerald-50/80",
+ hoverColorClass: "hover:bg-emerald-50/40",
+ iconColorClass: "text-emerald-600",
},
];
@@ -153,9 +155,9 @@ export const SettingsPane = ({
const HeaderIconColorClass = (() => {
if (activeMobileTab !== null) {
const activeItem = tabItems.find((item) => item.key === activeMobileTab);
- return activeItem ? activeItem.iconColorClass : "text-emerald-700 dark:text-emerald-400";
+ return activeItem ? activeItem.iconColorClass : "text-emerald-700";
}
- return "text-emerald-700 dark:text-emerald-400";
+ return "text-emerald-700";
})();
const renderTabContent = (key: TabKey) => {
@@ -205,8 +207,8 @@ export const SettingsPane = ({
};
return (
-
-
+
+
-
+
{/* 桌面端布局:双栏 */}
{/* 左侧垂直 Tab 栏 */}
@@ -245,10 +247,10 @@ export const SettingsPane = ({
"flex items-center gap-3 px-3.5 py-2.5 rounded-xl text-sm font-semibold transition-all duration-150 text-left w-full",
isSelected
? `${item.colorClass} ${item.bgColorClass}`
- : "text-slate-600 hover:text-slate-900 dark:text-slate-400 dark:hover:text-slate-200 hover:bg-slate-200/50 dark:hover:bg-slate-800/50"
+ : "text-slate-600 hover:bg-slate-200/50 hover:text-slate-900"
)}
>
-
+
{item.label}
);
@@ -268,7 +270,7 @@ export const SettingsPane = ({
{activeMobileTab === null ? (
/* 分类主菜单 */
-
+
{tabItems.map((item) => {
const Icon = item.icon;
return (
@@ -276,15 +278,15 @@ export const SettingsPane = ({
key={item.key}
type="button"
onClick={() => setActiveMobileTab(item.key)}
- className="flex items-center justify-between gap-4 p-4 text-left hover:bg-slate-50/50 dark:hover:bg-slate-900/40 transition-colors w-full"
+ className="flex w-full items-center justify-between gap-4 p-4 text-left transition-colors hover:bg-slate-50/50"
>
-
{item.label}
+
{item.label}
-
+
);
})}
diff --git a/apps/web/src/components/settings/DataExportCard.tsx b/apps/web/src/components/settings/DataExportCard.tsx
index 157e80da..11aa813a 100644
--- a/apps/web/src/components/settings/DataExportCard.tsx
+++ b/apps/web/src/components/settings/DataExportCard.tsx
@@ -29,7 +29,7 @@ type OperationKind = "export" | "import";
const Progress = ({ progress }: { progress: EdgeEverZipProgress }) => {
const percentage = progress.total > 0 ? Math.round((progress.completed / progress.total) * 100) : 0;
return (
-
+
);
@@ -146,7 +146,7 @@ export const DataExportCard = () => {
-
+
{t("dataExport.description")}
diff --git a/apps/web/src/components/settings/SystemInfoCard.tsx b/apps/web/src/components/settings/SystemInfoCard.tsx
index 672a13f5..2fac0721 100644
--- a/apps/web/src/components/settings/SystemInfoCard.tsx
+++ b/apps/web/src/components/settings/SystemInfoCard.tsx
@@ -125,7 +125,7 @@ export const SystemInfoCard = () => {
void handleCopy()}
>
@@ -135,9 +135,9 @@ export const SystemInfoCard = () => {
{infoItems.map((item) => (
-
-
{item.label}
-
+
+
{item.label}
+
{item.value}
diff --git a/apps/web/src/components/settings/UserManagementCard.tsx b/apps/web/src/components/settings/UserManagementCard.tsx
index 41716064..d1205e02 100644
--- a/apps/web/src/components/settings/UserManagementCard.tsx
+++ b/apps/web/src/components/settings/UserManagementCard.tsx
@@ -87,17 +87,17 @@ export const UserManagementCard = () => {
{usersQuery.isLoading ? {t("users.loading")}
: null}
{usersQuery.data?.users.map((user) => (
-
+
-
{user.displayName || user.username}
-
@{user.username} · {t(`users.roles.${user.role}`)}
+
{user.displayName || user.username}
+
@{user.username} · {t(`users.roles.${user.role}`)}
setResetUser(user)}>
{t("users.resetPassword")}
{user.role !== "owner" ? (
-
+
{user.isDisabled ? t("users.disabled") : t("users.enabled")}