diff --git a/src/components/config/VisualConfigEditor.tsx b/src/components/config/VisualConfigEditor.tsx
index 7fe3ebe..29b0bec 100644
--- a/src/components/config/VisualConfigEditor.tsx
+++ b/src/components/config/VisualConfigEditor.tsx
@@ -174,8 +174,10 @@ function ToastSelect({
style={{
padding: '10px 12px',
borderRadius: 10,
- border: active ? '1px solid rgba(59, 130, 246, 0.5)' : '1px solid var(--border-color)',
- background: active ? 'rgba(59, 130, 246, 0.10)' : 'var(--bg-primary)',
+ border: active
+ ? '1px solid rgba(139, 134, 128, 0.5)'
+ : '1px solid var(--border-color)',
+ background: active ? 'rgba(139, 134, 128, 0.12)' : 'var(--bg-primary)',
color: 'var(--text-primary)',
cursor: 'pointer',
textAlign: 'left',
diff --git a/src/components/modelAlias/ModelMappingDiagram.module.scss b/src/components/modelAlias/ModelMappingDiagram.module.scss
index 20c3194..f84bd5f 100644
--- a/src/components/modelAlias/ModelMappingDiagram.module.scss
+++ b/src/components/modelAlias/ModelMappingDiagram.module.scss
@@ -114,7 +114,7 @@
&.selected {
border-color: var(--primary-color);
background-color: var(--bg-secondary);
- box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.15);
+ box-shadow: 0 0 0 2px rgba($primary-color, 0.18);
}
}
diff --git a/src/components/modelAlias/ModelMappingDiagram.tsx b/src/components/modelAlias/ModelMappingDiagram.tsx
index b207882..0762444 100644
--- a/src/components/modelAlias/ModelMappingDiagram.tsx
+++ b/src/components/modelAlias/ModelMappingDiagram.tsx
@@ -33,7 +33,7 @@ export interface ModelMappingDiagramProps {
}
const PROVIDER_COLORS = [
- '#3b82f6', '#10b981', '#f59e0b', '#ef4444',
+ '#8b8680', '#10b981', '#f59e0b', '#c65746',
'#8b5cf6', '#ec4899', '#06b6d4', '#84cc16'
];
diff --git a/src/components/providers/ProviderNav/ProviderNav.module.scss b/src/components/providers/ProviderNav/ProviderNav.module.scss
index 7c169d7..8722f2e 100644
--- a/src/components/providers/ProviderNav/ProviderNav.module.scss
+++ b/src/components/providers/ProviderNav/ProviderNav.module.scss
@@ -17,12 +17,12 @@
flex-direction: row;
gap: 6px;
padding: 10px 12px;
- background: rgba(255, 255, 255, 0.7);
+ background: color-mix(in srgb, var(--bg-primary) 82%, transparent);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
- border: 1px solid rgba(255, 255, 255, 0.3);
+ border: 1px solid color-mix(in srgb, var(--border-color) 60%, transparent);
border-radius: 999px;
- box-shadow: 0 4px 24px rgba(0, 0, 0, 0.1);
+ box-shadow: 0 4px 24px rgba(0, 0, 0, 0.08);
overflow-x: auto;
scrollbar-width: none;
max-width: inherit;
@@ -39,7 +39,7 @@
pointer-events: none;
opacity: 0;
border-radius: 999px;
- background: rgba(59, 130, 246, 0.15);
+ background: rgba($primary-color, 0.16);
box-shadow: inset 0 0 0 2px var(--primary-color);
transition: transform 220ms cubic-bezier(0.22, 1, 0.36, 1),
width 220ms cubic-bezier(0.22, 1, 0.36, 1),
@@ -104,8 +104,8 @@
// 暗色主题适配
:global([data-theme='dark']) {
.navList {
- background: rgba(30, 30, 30, 0.7);
- border-color: rgba(255, 255, 255, 0.1);
+ background: color-mix(in srgb, var(--bg-primary) 82%, transparent);
+ border-color: color-mix(in srgb, var(--border-color) 55%, transparent);
box-shadow: 0 4px 24px rgba(0, 0, 0, 0.4);
}
@@ -116,7 +116,7 @@
}
.indicator {
- background: rgba(59, 130, 246, 0.25);
+ background: rgba($primary-color, 0.28);
}
}
diff --git a/src/components/usage/StatCards.tsx b/src/components/usage/StatCards.tsx
index 09c6831..43df7cf 100644
--- a/src/components/usage/StatCards.tsx
+++ b/src/components/usage/StatCards.tsx
@@ -56,9 +56,9 @@ export function StatCards({ usage, loading, modelPrices, sparklines }: StatCards
key: 'requests',
label: t('usage_stats.total_requests'),
icon: ,
- accent: '#3b82f6',
- accentSoft: 'rgba(59, 130, 246, 0.18)',
- accentBorder: 'rgba(59, 130, 246, 0.35)',
+ accent: '#8b8680',
+ accentSoft: 'rgba(139, 134, 128, 0.18)',
+ accentBorder: 'rgba(139, 134, 128, 0.35)',
value: loading ? '-' : (usage?.total_requests ?? 0).toLocaleString(),
meta: (
<>
@@ -67,7 +67,7 @@ export function StatCards({ usage, loading, modelPrices, sparklines }: StatCards
{t('usage_stats.success_requests')}: {loading ? '-' : (usage?.success_count ?? 0)}
-
+
{t('usage_stats.failed_requests')}: {loading ? '-' : (usage?.failure_count ?? 0)}
>
diff --git a/src/components/usage/TokenBreakdownChart.tsx b/src/components/usage/TokenBreakdownChart.tsx
index 1ff0990..7b1084a 100644
--- a/src/components/usage/TokenBreakdownChart.tsx
+++ b/src/components/usage/TokenBreakdownChart.tsx
@@ -13,7 +13,7 @@ import type { UsagePayload } from './hooks/useUsageData';
import styles from '@/pages/UsagePage.module.scss';
const TOKEN_COLORS: Record = {
- input: { border: '#3b82f6', bg: 'rgba(59, 130, 246, 0.25)' },
+ input: { border: '#8b8680', bg: 'rgba(139, 134, 128, 0.25)' },
output: { border: '#22c55e', bg: 'rgba(34, 197, 94, 0.25)' },
cached: { border: '#f59e0b', bg: 'rgba(245, 158, 11, 0.25)' },
reasoning: { border: '#8b5cf6', bg: 'rgba(139, 92, 246, 0.25)' }
diff --git a/src/components/usage/hooks/useSparklines.ts b/src/components/usage/hooks/useSparklines.ts
index 491a317..5b6e6ad 100644
--- a/src/components/usage/hooks/useSparklines.ts
+++ b/src/components/usage/hooks/useSparklines.ts
@@ -104,7 +104,7 @@ export function useSparklines({ usage, loading }: UseSparklinesOptions): UseSpar
);
const requestsSparkline = useMemo(
- () => buildSparkline(buildLastHourSeries('requests'), '#3b82f6', 'rgba(59, 130, 246, 0.18)'),
+ () => buildSparkline(buildLastHourSeries('requests'), '#8b8680', 'rgba(139, 134, 128, 0.18)'),
[buildLastHourSeries, buildSparkline]
);
diff --git a/src/pages/AiProvidersOpenAIEditPage.tsx b/src/pages/AiProvidersOpenAIEditPage.tsx
index e9ee79b..2b42681 100644
--- a/src/pages/AiProvidersOpenAIEditPage.tsx
+++ b/src/pages/AiProvidersOpenAIEditPage.tsx
@@ -59,7 +59,7 @@ function StatusSuccessIcon() {
function StatusErrorIcon() {
return (