@@ -784,7 +784,7 @@ export default function ContentEditorPage() {
}}
placeholder="URL 友好标识(留空自动生成)"
className={`w-full px-3 py-2 border rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-border-dark focus:border-transparent ${
- validationErrors.slug ? 'border-red-300 bg-red-50' : 'border-border-secondary'
+ validationErrors.slug ? 'border-error bg-error-bg' : 'border-border-secondary'
}`}
/>
@@ -850,7 +850,7 @@ export default function ContentEditorPage() {
{Object.keys(validationErrors).length > 0 && (
-
+
注意:表单中存在 {Object.keys(validationErrors).length} 个错误,发布可能会失败。
)}
@@ -858,7 +858,7 @@ export default function ContentEditorPage() {
取消
确认发布
diff --git a/src/app/admin/content/[modelCode]/page.tsx b/src/app/admin/content/[modelCode]/page.tsx
index 3d0e1e7..cea89ab 100644
--- a/src/app/admin/content/[modelCode]/page.tsx
+++ b/src/app/admin/content/[modelCode]/page.tsx
@@ -147,7 +147,7 @@ export default function ContentListPage() {
{/* Error */}
{error && (
-
+
{error}
)}
@@ -195,9 +195,9 @@ export default function ContentListPage() {
@@ -218,7 +218,7 @@ export default function ContentListPage() {
diff --git a/src/app/admin/roles/page.tsx b/src/app/admin/roles/page.tsx
index 14dc0e7..31dd21d 100644
--- a/src/app/admin/roles/page.tsx
+++ b/src/app/admin/roles/page.tsx
@@ -154,7 +154,7 @@ export default function RolesPage() {
{/* Alerts */}
{error && (
-
+
{error}
)}
diff --git a/src/app/admin/users/page.tsx b/src/app/admin/users/page.tsx
index 428514e..5a4b07a 100644
--- a/src/app/admin/users/page.tsx
+++ b/src/app/admin/users/page.tsx
@@ -45,10 +45,10 @@ const ROLE_LABELS: Record
= {
};
const ROLE_COLORS: Record = {
- super_admin: 'bg-red-100 text-red-700',
- content_admin: 'bg-blue-100 text-blue-700',
- content_editor: 'bg-green-100 text-green-700',
- reviewer: 'bg-amber-100 text-amber-700',
+ super_admin: 'bg-error-bg text-error-text',
+ content_admin: 'bg-info-bg text-info-text',
+ content_editor: 'bg-success-bg text-success-text',
+ reviewer: 'bg-warning-bg text-warning-text',
readonly: 'bg-bg-hover text-text-secondary',
};
@@ -266,7 +266,7 @@ export default function UsersPage() {
{error && (
-
+
{error}
)}
@@ -344,8 +344,8 @@ export default function UsersPage() {
{u.status === 1 ? '启用' : '禁用'}
@@ -368,7 +368,7 @@ export default function UsersPage() {
{ setPendingDeleteId(u.id); setDeleteDialogOpen(true); }}
- className="p-1.5 rounded hover:bg-red-50 text-text-muted hover:text-red-600"
+ className="p-1.5 rounded hover:bg-error-bg text-text-muted hover:text-error-text"
title="删除"
>
@@ -529,7 +529,7 @@ export default function UsersPage() {
取消
-
+
确认删除
diff --git a/src/app/globals.css b/src/app/globals.css
index 4918d4b..492addd 100644
--- a/src/app/globals.css
+++ b/src/app/globals.css
@@ -114,6 +114,9 @@ body {
--color-error-hover: #A01830;
--color-error-bg: #FEF2F4;
--color-error-rgb: 196 30 58;
+ /* 文字专用:--color-error(品牌红)在暗黑底仅 3.3:1,不达 AA;本值浅红,
+ 暗黑模式经 html[data-theme='dark'] 覆盖(#F87171)后于暗底达 AA。 */
+ --color-error-text: #C41E3A;
--color-info: #3B82F6;
--color-info-rgb: 59 130 246;
@@ -419,6 +422,17 @@ html[data-theme='dark'] {
/* 链接反色 */
--color-link: #F8FAFC;
--color-link-hover: #E04A68;
+
+ /* 功能色反色:浅色调背景 → 深色同色调底;文字/图标 → 同色调浅色,于暗底达 AA。
+ 按钮底色(DEFAULT)与边框(border-*)保持品牌饱和色,暗黑底仍可读/可见,故不覆盖。 */
+ --color-success-bg: #0E2A1A;
+ --color-success-text: #4ADE80;
+ --color-warning-bg: #2A2008;
+ --color-warning-text: #FBBF24;
+ --color-error-bg: #2A1418;
+ --color-error-text: #F87171;
+ --color-info-bg: #0E1A2A;
+ --color-info-text: #60A5FA;
}
/* html/body 背景跟随主题 token(覆盖顶部 !important 硬编码) */
diff --git a/tailwind.config.js b/tailwind.config.js
index 5bb04b4..1056b7f 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -93,6 +93,9 @@ module.exports = {
hover: 'var(--color-error-hover)',
bg: 'var(--color-error-bg)',
rgb: 'var(--color-error-rgb)',
+ /** 文字请用此变体:DEFAULT(品牌红 #C41E3A)在暗黑底仅 3.3:1,不达 AA;
+ * 本值浅红,暗黑模式经 html[data-theme='dark'] 覆盖后达 AA。 */
+ text: 'var(--color-error-text)',
},
info: {
DEFAULT: 'rgb(var(--color-info-rgb) / )',