Files
EmailBill/Web/src/assets/theme.css
SunCheng 61aa19b3d2 style: unify card styles across calendar, statistics, and budget pages
- 调整 theme.css 中的 --radius-lg 为 12px 以符合设计标准
- 统一日历页面卡片样式(padding, border-radius, shadow)
- 统一统计页面所有卡片组件的样式
- 统一预算页面图表卡片样式,替换硬编码值为 CSS 变量
- 为关键样式添加 fallback 值以防止变量未定义
- 所有卡片现在使用统一的样式变量:
  - padding: var(--spacing-xl, 16px)
  - border-radius: var(--radius-lg, 12px)
  - box-shadow: var(--shadow-sm)
  - background: var(--bg-secondary)
2026-02-18 20:44:58 +08:00

232 lines
4.1 KiB
CSS

/**
* EmailBill 主题系统 - 根据 v2.pen 设计稿
* 用于保持整个应用色彩和布局一致性
*/
:root {
/* ============ 颜色变量 - 浅色主题 ============ */
/* 背景色 */
--bg-primary: #ffffff;
--bg-secondary: #f6f7f8;
--bg-tertiary: #f3f4f6;
--bg-button: #f5f5f5;
/* 文字颜色 */
--text-primary: #1a1a1a;
--text-secondary: #6b7280;
--text-tertiary: #9ca3af;
/* 强调色 */
--accent-primary: #ff6b6b;
--accent-danger: #ef4444;
--accent-warning: #d97706;
--accent-warning-bg: #fffbeb;
--accent-success: #22c55e;
--accent-success-bg: #f0fdf4;
--accent-info: #6366f1;
--accent-info-bg: #e0e7ff;
/* 图标色 */
--icon-star: #ff6b6b;
--icon-coffee: #fcd34d;
/* 边框颜色 */
--border-color: #e5e7eb;
/* ============ 布局变量 ============ */
/* 间距 */
--spacing-xs: 2px;
--spacing-sm: 4px;
--spacing-md: 8px;
--spacing-lg: 12px;
--spacing-xl: 16px;
--spacing-2xl: 20px;
--spacing-3xl: 24px;
/* 圆角 */
--radius-sm: 8px;
--radius-md: 12px;
--radius-lg: 12px;
--radius-full: 22px;
/* 字体大小 */
--font-xs: 9px;
--font-sm: 11px;
--font-base: 12px;
--font-md: 13px;
--font-lg: 15px;
--font-xl: 18px;
--font-2xl: 24px;
--font-3xl: 32px;
/* 字体粗细 */
--font-medium: 500;
--font-semibold: 600;
--font-bold: 700;
--font-extrabold: 800;
/* 字体 */
--font-primary: 'DM Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
--font-display: 'Bricolage Grotesque', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
/* 阴影 (可选) */
--shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
--shadow-md: 0 4px 6px rgba(0, 0, 0, 0.05);
--shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.05);
/* 边框颜色 */
--border-color: #e5e7eb;
/* 分段控制器 (Segmented Control) - From .pans/v2.pen NDWwE */
--segmented-bg: #f4f4f5;
--segmented-active-bg: #ffffff;
}
/* ============ 深色主题 ============ */
[data-theme='dark'] {
/* 背景色 */
--bg-primary: #09090b;
--bg-secondary: #18181b;
--bg-tertiary: #27272a;
--bg-button: #27272a;
/* 文字颜色 */
--text-primary: #f4f4f5;
--text-secondary: #a1a1aa;
--text-tertiary: #71717a;
/* 边框颜色 */
--border-color: #3f3f46;
/* 强调色 (深色主题调整) */
--accent-primary: #ff6b6b;
--accent-danger: #f87171;
--accent-warning: #fbbf24;
--accent-warning-bg: #451a03;
--accent-success: #4ade80;
--accent-success-bg: #064e3b;
--accent-info: #818cf8;
--accent-info-bg: #312e81;
/* 图标色 (深色主题) */
--icon-star: #ff6b6b;
--icon-coffee: #fcd34d;
/* 分段控制器 (Segmented Control) - From .pans/v2.pen NDWwE */
--segmented-bg: #27272a;
--segmented-active-bg: #3f3f46;
}
/* ============ 通用工具类 ============ */
/* 文字 */
.text-primary {
color: var(--text-primary);
}
.text-secondary {
color: var(--text-secondary);
}
.text-tertiary {
color: var(--text-tertiary);
}
.text-danger {
color: var(--accent-danger);
}
/* 背景 */
.bg-primary {
background-color: var(--bg-primary);
}
.bg-secondary {
background-color: var(--bg-secondary);
}
.bg-tertiary {
background-color: var(--bg-tertiary);
}
/* 布局容器 */
.container-fluid {
width: 100%;
max-width: 402px;
margin: 0 auto;
}
/* Flex 布局 */
.flex {
display: flex;
}
.flex-col {
flex-direction: column;
}
.items-center {
align-items: center;
}
.justify-between {
justify-content: space-between;
}
.justify-center {
justify-content: center;
}
/* 间距 */
.gap-xs {
gap: var(--spacing-xs);
}
.gap-sm {
gap: var(--spacing-sm);
}
.gap-md {
gap: var(--spacing-md);
}
.gap-lg {
gap: var(--spacing-lg);
}
.gap-xl {
gap: var(--spacing-xl);
}
.gap-2xl {
gap: var(--spacing-2xl);
}
.gap-3xl {
gap: var(--spacing-3xl);
}
/* 内边距 */
.p-sm {
padding: var(--spacing-md);
}
.p-md {
padding: var(--spacing-xl);
}
.p-lg {
padding: var(--spacing-2xl);
}
.p-xl {
padding: var(--spacing-3xl);
}
/* 圆角 */
.rounded-sm {
border-radius: var(--radius-sm);
}
.rounded-md {
border-radius: var(--radius-md);
}
.rounded-lg {
border-radius: var(--radius-lg);
}
.rounded-full {
border-radius: var(--radius-full);
}