- 简洁高效: 界面简洁明了,操作高效便捷
- 一致性: 统一的设计语言和交互模式
- 可访问性: 支持无障碍访问和键盘操作
- 响应式: 适配不同屏幕尺寸和设备
- 提供专业、现代化的视觉体验
- 符合国人使用习惯和审美偏好
- 支持高效的工作流程
- 确保良好的可维护性
/* 主品牌色 */
--primary-50: #f0f9ff;
--primary-100: #e0f2fe;
--primary-200: #bae6fd;
--primary-300: #7dd3fc;
--primary-400: #38bdf8;
--primary-500: #0ea5e9; /* 主色 */
--primary-600: #0284c7;
--primary-700: #0369a1;
--primary-800: #075985;
--primary-900: #0c4a6e;
/* 辅助色 */
--secondary-50: #f8fafc;
--secondary-100: #f1f5f9;
--secondary-200: #e2e8f0;
--secondary-300: #cbd5e1;
--secondary-400: #94a3b8;
--secondary-500: #64748b; /* 辅助色 */
--secondary-600: #475569;
--secondary-700: #334155;
--secondary-800: #1e293b;
--secondary-900: #0f172a;/* 成功色 */
--success-50: #f0fdf4;
--success-500: #22c55e;
--success-600: #16a34a;
/* 警告色 */
--warning-50: #fffbeb;
--warning-500: #f59e0b;
--warning-600: #d97706;
/* 错误色 */
--error-50: #fef2f2;
--error-500: #ef4444;
--error-600: #dc2626;
/* 信息色 */
--info-50: #f0f9ff;
--info-500: #3b82f6;
--info-600: #2563eb;/* 灰色系 */
--gray-50: #f9fafb;
--gray-100: #f3f4f6;
--gray-200: #e5e7eb;
--gray-300: #d1d5db;
--gray-400: #9ca3af;
--gray-500: #6b7280;
--gray-600: #4b5563;
--gray-700: #374151;
--gray-800: #1f2937;
--gray-900: #111827;/* 背景色 */
--bg-primary: #ffffff;
--bg-secondary: #f8fafc;
--bg-tertiary: #f1f5f9;
--bg-overlay: rgba(0, 0, 0, 0.5);
/* 边框色 */
--border-light: #e2e8f0;
--border-medium: #cbd5e1;
--border-dark: #94a3b8;/* 中文字体 */
--font-family-zh: "PingFang SC", "Microsoft YaHei", "微软雅黑", "Helvetica Neue", Arial, sans-serif;
/* 英文字体 */
--font-family-en: "Inter", "SF Pro Display", -apple-system, BlinkMacSystemFont, sans-serif;
/* 等宽字体 */
--font-family-mono: "SF Mono", "Monaco", "Inconsolata", "Roboto Mono", monospace;/* 标题字体 */
--text-xs: 0.75rem; /* 12px */
--text-sm: 0.875rem; /* 14px */
--text-base: 1rem; /* 16px */
--text-lg: 1.125rem; /* 18px */
--text-xl: 1.25rem; /* 20px */
--text-2xl: 1.5rem; /* 24px */
--text-3xl: 1.875rem; /* 30px */
--text-4xl: 2.25rem; /* 36px */
--text-5xl: 3rem; /* 48px */--font-thin: 100;
--font-light: 300;
--font-normal: 400;
--font-medium: 500;
--font-semibold: 600;
--font-bold: 700;
--font-extrabold: 800;
--font-black: 900;--leading-none: 1;
--leading-tight: 1.25;
--leading-snug: 1.375;
--leading-normal: 1.5;
--leading-relaxed: 1.625;
--leading-loose: 2;--space-0: 0;
--space-1: 0.25rem; /* 4px */
--space-2: 0.5rem; /* 8px */
--space-3: 0.75rem; /* 12px */
--space-4: 1rem; /* 16px */
--space-5: 1.25rem; /* 20px */
--space-6: 1.5rem; /* 24px */
--space-8: 2rem; /* 32px */
--space-10: 2.5rem; /* 40px */
--space-12: 3rem; /* 48px */
--space-16: 4rem; /* 64px */
--space-20: 5rem; /* 80px */
--space-24: 6rem; /* 96px */
--space-32: 8rem; /* 128px *//* 组件内边距 */
--padding-xs: var(--space-2);
--padding-sm: var(--space-3);
--padding-md: var(--space-4);
--padding-lg: var(--space-6);
--padding-xl: var(--space-8);
/* 组件外边距 */
--margin-xs: var(--space-2);
--margin-sm: var(--space-3);
--margin-md: var(--space-4);
--margin-lg: var(--space-6);
--margin-xl: var(--space-8);--radius-none: 0;
--radius-sm: 0.125rem; /* 2px */
--radius-md: 0.375rem; /* 6px */
--radius-lg: 0.5rem; /* 8px */
--radius-xl: 0.75rem; /* 12px */
--radius-2xl: 1rem; /* 16px */
--radius-3xl: 1.5rem; /* 24px */
--radius-full: 9999px;/* 基础阴影 */
--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
/* 特殊阴影 */
--shadow-inner: inset 0 2px 4px 0 rgba(0, 0, 0, 0.06);
--shadow-outline: 0 0 0 3px rgba(59, 130, 246, 0.5);.btn-primary {
background-color: var(--primary-500);
color: white;
padding: var(--space-3) var(--space-6);
border-radius: var(--radius-md);
font-weight: var(--font-medium);
font-size: var(--text-sm);
border: none;
cursor: pointer;
transition: all 0.2s ease;
}
.btn-primary:hover {
background-color: var(--primary-600);
transform: translateY(-1px);
box-shadow: var(--shadow-md);
}.btn-secondary {
background-color: transparent;
color: var(--primary-500);
border: 1px solid var(--primary-500);
padding: var(--space-3) var(--space-6);
border-radius: var(--radius-md);
font-weight: var(--font-medium);
font-size: var(--text-sm);
cursor: pointer;
transition: all 0.2s ease;
}
.btn-secondary:hover {
background-color: var(--primary-50);
border-color: var(--primary-600);
}.input {
width: 100%;
padding: var(--space-3) var(--space-4);
border: 1px solid var(--border-medium);
border-radius: var(--radius-md);
font-size: var(--text-sm);
color: var(--gray-700);
background-color: var(--bg-primary);
transition: all 0.2s ease;
}
.input:focus {
outline: none;
border-color: var(--primary-500);
box-shadow: var(--shadow-outline);
}
.input::placeholder {
color: var(--gray-400);
}.card {
background-color: var(--bg-primary);
border: 1px solid var(--border-light);
border-radius: var(--radius-lg);
box-shadow: var(--shadow-sm);
overflow: hidden;
transition: all 0.2s ease;
}
.card:hover {
box-shadow: var(--shadow-md);
transform: translateY(-2px);
}
.card-header {
padding: var(--space-6);
border-bottom: 1px solid var(--border-light);
background-color: var(--bg-secondary);
}
.card-body {
padding: var(--space-6);
}
.card-footer {
padding: var(--space-6);
border-top: 1px solid var(--border-light);
background-color: var(--bg-secondary);
}.navbar {
height: 60px;
background-color: var(--bg-primary);
border-bottom: 1px solid var(--border-light);
display: flex;
align-items: center;
padding: 0 var(--space-6);
box-shadow: var(--shadow-sm);
}
.navbar-brand {
font-size: var(--text-xl);
font-weight: var(--font-bold);
color: var(--primary-500);
text-decoration: none;
}
.navbar-nav {
display: flex;
align-items: center;
gap: var(--space-8);
margin-left: auto;
}
.navbar-item {
color: var(--gray-600);
text-decoration: none;
font-weight: var(--font-medium);
padding: var(--space-2) var(--space-4);
border-radius: var(--radius-md);
transition: all 0.2s ease;
}
.navbar-item:hover {
color: var(--primary-500);
background-color: var(--primary-50);
}.sidebar {
width: 280px;
background-color: var(--bg-primary);
border-right: 1px solid var(--border-light);
height: calc(100vh - 60px);
overflow-y: auto;
}
.sidebar-nav {
padding: var(--space-4);
}
.sidebar-item {
display: flex;
align-items: center;
padding: var(--space-3) var(--space-4);
color: var(--gray-600);
text-decoration: none;
border-radius: var(--radius-md);
margin-bottom: var(--space-1);
transition: all 0.2s ease;
}
.sidebar-item:hover {
background-color: var(--primary-50);
color: var(--primary-500);
}
.sidebar-item.active {
background-color: var(--primary-100);
color: var(--primary-600);
font-weight: var(--font-medium);
}- 主要图标库: FontAwesome 6.0
- 备用图标库: Heroicons, Lucide
- 图标风格: 线性图标为主,填充图标为辅
.icon-xs { width: 12px; height: 12px; }
.icon-sm { width: 16px; height: 16px; }
.icon-md { width: 20px; height: 20px; }
.icon-lg { width: 24px; height: 24px; }
.icon-xl { width: 32px; height: 32px; }- 保持图标风格一致
- 使用合适的图标尺寸
- 提供图标的语义化含义
- 支持高对比度显示
/* 基础过渡 */
.transition {
transition: all 0.2s ease;
}
.transition-fast {
transition: all 0.15s ease;
}
.transition-slow {
transition: all 0.3s ease;
}.hover-lift:hover {
transform: translateY(-2px);
box-shadow: var(--shadow-lg);
}
.hover-scale:hover {
transform: scale(1.05);
}
.hover-fade:hover {
opacity: 0.8;
}@keyframes spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
.animate-spin {
animation: spin 1s linear infinite;
}
@keyframes pulse {
0%, 100% { opacity: 1; }
50% { opacity: 0.5; }
}
.animate-pulse {
animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
}/* 移动端 */
@media (max-width: 767px) {
.sidebar { width: 100%; }
.navbar-nav { display: none; }
}
/* 平板端 */
@media (min-width: 768px) and (max-width: 1023px) {
.sidebar { width: 240px; }
}
/* 桌面端 */
@media (min-width: 1024px) {
.sidebar { width: 280px; }
}.container {
max-width: 1200px;
margin: 0 auto;
padding: 0 var(--space-4);
}
.grid {
display: grid;
gap: var(--space-6);
}
.grid-cols-1 { grid-template-columns: repeat(1, 1fr); }
.grid-cols-2 { grid-template-columns: repeat(2, 1fr); }
.grid-cols-3 { grid-template-columns: repeat(3, 1fr); }
.grid-cols-4 { grid-template-columns: repeat(4, 1fr); }- 正常文本: 至少 4.5:1 的对比度
- 大文本: 至少 3:1 的对比度
- 非文本元素: 至少 3:1 的对比度
- 所有交互元素支持键盘访问
- 提供清晰的焦点指示
- 支持 Tab 键导航
- 提供语义化的 HTML 结构
- 使用适当的 ARIA 标签
- 提供替代文本描述
设计系统版本: 1.0.0
创建时间: 2025年10月22日
维护者: Peterfei