diff --git a/app/assets/css/variables.css b/app/assets/css/variables.css index 88a6536..30dce2a 100644 --- a/app/assets/css/variables.css +++ b/app/assets/css/variables.css @@ -1,13 +1,10 @@ -/* 全局CSS变量 - 统一配色方案(默认浅色ClassicLight,不依赖data-theme也能正常显示) */ +/* 全局CSS变量 - 统一配色方案 */ :root { - /* 强制浅色基准值 - 即使 data-theme 缺失也保持浅色 */ - color-scheme: light; - /* 主色调 */ - --primary: #1e40af; - --primary-hover: #1e3a8a; - --primary-light: rgba(30, 64, 175, 0.08); - --primary-border: rgba(30, 64, 175, 0.15); + --primary: #3b82f6; + --primary-hover: #2563eb; + --primary-light: rgba(59, 130, 246, 0.1); + --primary-border: rgba(59, 130, 246, 0.2); /* 成功色 */ --success: #10b981; @@ -33,25 +30,25 @@ --info-light: rgba(59, 130, 246, 0.1); --info-border: rgba(59, 130, 246, 0.2); - /* 背景色 (默认 ClassicLight 浅色) */ - --bg-primary: #ffffff; - --bg-secondary: #f5f7fa; - --bg-tertiary: #edf0f5; - --bg-quaternary: #d9dee7; - --bg-hover: #f0f3f8; + /* 背景色 */ + --bg-primary: #111111; + --bg-secondary: #1a1a1a; + --bg-tertiary: #2a2a2a; + --bg-quaternary: #3a3a3a; + --bg-hover: #1f1f1f; - /* 文字颜色 (默认 ClassicLight 浅色) */ - --text-primary: #1a2332; - --text-secondary: #4a5568; - --text-tertiary: #6b7280; - --text-quaternary: #9ca3af; - --text-disabled: #c5cbd3; + /* 文字颜色 */ + --text-primary: #ffffff; + --text-secondary: #cccccc; + --text-tertiary: #888888; + --text-quaternary: #666666; + --text-disabled: #444444; - /* 边框颜色 (默认 ClassicLight 浅色) */ - --border-primary: #e5e7eb; - --border-secondary: #d1d5db; - --border-tertiary: #9ca3af; - --border-quaternary: #6b7280; + /* 边框颜色 */ + --border-primary: #1f1f1f; + --border-secondary: #2a2a2a; + --border-tertiary: #3a3a3a; + --border-quaternary: #4a4a4a; /* 阴影 */ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05); @@ -135,16 +132,16 @@ --card-hover-border: var(--border-tertiary); --card-shadow: var(--shadow-md); - /* 按钮颜色 - 浅色基准 */ + /* 按钮颜色 */ --btn-primary-bg: var(--primary); --btn-primary-hover: var(--primary-hover); - --btn-primary-text: #ffffff; + --btn-primary-text: var(--text-primary); --btn-primary-border: var(--primary-border); - --btn-secondary-bg: #f1f5f9; - --btn-secondary-hover: #e2e8f0; - --btn-secondary-text: #0f172a; - --btn-secondary-border: #cbd5e1; + --btn-secondary-bg: #3a3a3a; + --btn-secondary-hover: #4a4a4a; + --btn-secondary-text: var(--text-primary); + --btn-secondary-border: #555555; --btn-success-bg: var(--success); --btn-success-hover: var(--success-hover); @@ -164,12 +161,12 @@ --btn-disabled-bg: var(--bg-tertiary); --btn-disabled-text: var(--text-disabled); - /* 输入框颜色 - 浅色基准 */ - --input-bg: #ffffff; - --input-border: #d1d5db; + /* 输入框颜色 */ + --input-bg: var(--bg-tertiary); + --input-border: var(--border-tertiary); --input-border-focus: var(--primary); --input-text: var(--text-primary); - --input-placeholder: #9ca3af; + --input-placeholder: var(--text-quaternary); --input-shadow-focus: 0 0 0 3px var(--primary-light); /* 模态框颜色 */ @@ -200,27 +197,12 @@ --spinner-primary: var(--primary); --spinner-secondary: var(--bg-tertiary); - /* 滚动条颜色 - 浅色基准 */ - --scrollbar-track: #f1f5f9; - --scrollbar-thumb: #cbd5e1; - --scrollbar-thumb-hover: #94a3b8; - - /* Surface 兼容别名 - 部分按钮/容器使用 surface-xxx */ - --surface-primary: var(--bg-primary); - --surface-secondary: var(--bg-secondary); - --surface-tertiary: var(--bg-tertiary); - --surface-quaternary: var(--bg-quaternary); + /* 滚动条颜色 */ + --scrollbar-track: var(--bg-tertiary); + --scrollbar-thumb: var(--bg-quaternary); + --scrollbar-thumb-hover: #4a4a4a; } -/* 防深色兜底:覆盖 prefers-color-scheme: dark 对表单/根元素的自动影响 */ -@media (prefers-color-scheme: dark) { - :root { - color-scheme: light; - } -} - -/* 浅色主题叠加层(与 data-theme 无关,确保始终为浅色;保留 data-theme 变量覆盖以兼容切换) */ -:root, :root[data-theme='light'], :root[data-theme='ClassicLight'], :root[data-theme='ModernLight'] { diff --git a/app/components/Admin/BackupManager.vue b/app/components/Admin/BackupManager.vue index cb9c00a..efe60d0 100644 --- a/app/components/Admin/BackupManager.vue +++ b/app/components/Admin/BackupManager.vue @@ -520,8 +520,8 @@ const formatFileSize = (bytes) => { /* 主容器 */ .backup-manager { min-height: 100vh; - background: #1a1a1a; - color: #e5e5e5; + background: var(--bg-primary, #1a1a1a); + color: var(--text-primary, #e5e5e5); padding: 2rem; position: relative; } @@ -535,13 +535,13 @@ const formatFileSize = (bytes) => { .header h3 { font-size: 2.5rem; font-weight: 700; - color: #ffffff; + color: var(--text-primary, #ffffff); margin: 0 0 1rem 0; } .header .description { font-size: 1.125rem; - color: #a0a0a0; + color: var(--text-secondary, #a0a0a0); margin: 0; } diff --git a/app/components/Admin/VotersModal.vue b/app/components/Admin/VotersModal.vue index c14b029..d7730f9 100644 --- a/app/components/Admin/VotersModal.vue +++ b/app/components/Admin/VotersModal.vue @@ -202,9 +202,9 @@ watch( } .modal-content { - background: #1a1a1a; + background: var(--surface-primary, var(--bg-primary, #1a1a1a)); border-radius: 16px; - border: 1px solid #2a2a2a; + border: 1px solid var(--border-primary, #2a2a2a); width: 100%; max-width: 500px; max-height: 80vh; diff --git a/app/components/Auth/ProfileForm.vue b/app/components/Auth/ProfileForm.vue index 3c23d2d..1403f16 100644 --- a/app/components/Auth/ProfileForm.vue +++ b/app/components/Auth/ProfileForm.vue @@ -224,24 +224,24 @@ const handleUpdateProfile = async () => {