193 lines
8.8 KiB
CSS
193 lines
8.8 KiB
CSS
/**
|
||
* 备考通 · Design Tokens (CSS 变量)
|
||
* =====================================================================
|
||
* 版本:v1.0.0 · 2026-08-26
|
||
* 来源:设计规范-备考通-20260826.md(Ardot 文件 718570750880145 真实变量校准)
|
||
* 说明:本文件与 design-tokens.json 数值完全一致,是前端唯一颜色/排印/
|
||
* 圆角/阴影/间距来源。前端必须引用这些变量,禁止硬编码颜色值。
|
||
*
|
||
* 使用方式:前端在 `styles/tokens.css` 中 import 本文件或复制 :root 节,
|
||
* 组件内一律 `var(--token-name)` 引用。
|
||
* =====================================================================
|
||
*/
|
||
|
||
:root {
|
||
/* ------------------------------------------------------------------
|
||
* 1. 颜色 Color
|
||
* ------------------------------------------------------------------ */
|
||
|
||
/* 中性底色 Neutral */
|
||
--bg-canvas: #F7F6F2; /* 画布/页面背景(浅米白) */
|
||
--bg-card: #FFFFFF; /* 卡片/面板背景 */
|
||
--bg-soft: #EFEFF5; /* 图标底、次级填充、标签底、进度条轨道 */
|
||
--border-subtle: #E8E6E0; /* 卡片描边、分隔线(中性浅暖) */
|
||
|
||
/* 品牌主色 Brand(深蓝系) */
|
||
--primary: #2B4C8F; /* 主按钮、主色、选中态高亮底、进度填充 */
|
||
--primary-deep: #1B2D5B; /* 渐变深端、页面主标题强调、深蓝 hero 底 */
|
||
--primary-bright: #3A6BD8; /* 渐变亮端、hero 卡片、active 图标 */
|
||
|
||
/* 文字色 Text */
|
||
--text-primary: #1A1F2E; /* 主标题、正文主色 */
|
||
--text-secondary: #6B7280; /* 副标题、描述文字、图标默认色 */
|
||
--text-muted: #9CA2AD; /* 弱提示、占位、次要标记 */
|
||
|
||
/* 语义色 Semantic(状态反馈) */
|
||
--success: #1B9266; /* 正向趋势、正确率、达标 */
|
||
--success-soft: #E0F5EB; /* 正向标签底、打卡徽章底 */
|
||
--warning: #DC9A1E; /* 提醒、中等状态 */
|
||
--warning-soft: #FEF0D1; /* 提醒标签底 */
|
||
--danger: #D14C55; /* 负向、错误、待复习错题数 */
|
||
--danger-soft: #FCE5E7; /* 危险标签底、错误提示底 */
|
||
|
||
/* 前景/辅助 Foreground */
|
||
--on-accent: #FFFFFF; /* 主色/深蓝底上的前景色(按钮文字、深蓝 hero 文字) */
|
||
--white: #FFFFFF; /* 纯白(唯一允许的裸色值) */
|
||
|
||
/* 渐变 Gradients(仅 hero 大卡 / 置顶卡使用) */
|
||
--gradient-hero-deep: linear-gradient(135deg, #1B2D5B 0%, #3A6BD8 100%); /* 首页 hero 卡 / 要闻置顶卡 */
|
||
--gradient-hero-primary: linear-gradient(180deg, #2B4C8F 0%, #1B2D5B 100%); /* 移动首页深蓝 hero */
|
||
|
||
|
||
/* ------------------------------------------------------------------
|
||
* 2. 字体 Font
|
||
* ------------------------------------------------------------------ */
|
||
--font-sans: 'Sarasa Gothic SC', 'PingFang SC', sans-serif; /* 中文正文/标题/标签 */
|
||
--font-num: 'Inter', 'SF Pro', sans-serif; /* 统计数字/时间/单价/代码标识 */
|
||
|
||
|
||
/* ------------------------------------------------------------------
|
||
* 3. 排印 Typography
|
||
* role = 用途界定;部分 token 的可变字段(如趋势色)由语义色覆盖
|
||
* ------------------------------------------------------------------ */
|
||
--fs-h1: 24px; --fw-h1: 700; --lh-h1: 1.2; --ff-h1: var(--font-sans); /* H1 页面标题 */
|
||
--fs-data-num: 22px; --fw-data-num: 700; --lh-data-num: 1.2; --ff-data-num: var(--font-num); /* 数据大字(Inter Bold) */
|
||
--fs-card-title:15px; --fw-card-title: 600; --lh-card-title: 1.4; --ff-card-title: var(--font-sans); /* 卡标题 */
|
||
--fs-label: 12px; --fw-label: 400; --lh-label: 1.4; --ff-label: var(--font-sans); /* 标签 */
|
||
--fs-label-bold:12px; --fw-label-bold: 600; --lh-label-bold: 1.4; --ff-label-bold: var(--font-sans); /* 强标签/徽章 */
|
||
--fs-subtitle: 13px; --fw-subtitle: 400; --lh-subtitle: 1.5; --ff-subtitle: var(--font-sans); /* 副标题 */
|
||
--fs-button: 13px; --fw-button: 600; --lh-button: 1.4; --ff-button: var(--font-sans); /* 按钮文字 */
|
||
--fs-trend: 11px; --fw-trend: 500; --lh-trend: 1.4; --ff-trend: var(--font-sans); /* 趋势指数 */
|
||
--fs-body: 14px; --fw-body: 400; --lh-body: 1.5; --ff-body: var(--font-sans); /* 正文/题干 */
|
||
|
||
|
||
/* ------------------------------------------------------------------
|
||
* 4. 圆角 Radius
|
||
* ------------------------------------------------------------------ */
|
||
--radius-sm: 8px;
|
||
--radius-md: 12px;
|
||
--radius-lg: 16px; /* 标准卡片(默认) */
|
||
--radius-xl: 24px; /* Hero 渐变大卡 */
|
||
--radius-pill: 999px; /* 头像、胶囊按钮、天数徽章 */
|
||
--radius-btn: 10px; /* 主/次按钮圆角 */
|
||
|
||
|
||
/* ------------------------------------------------------------------
|
||
* 5. 阴影 Shadow
|
||
* 默认以「白底 + 细描边(border-subtle)」表达卡片,不用重阴影。
|
||
* ------------------------------------------------------------------ */
|
||
--shadow-level-0: none;
|
||
--shadow-level-1: 0 1px 2px rgba(0, 0, 0, 0.04); /* 悬浮态轻投影 */
|
||
--shadow-level-2: 0 4px 12px rgba(27, 45, 91, 0.08); /* 弹层、浮起卡片、TabBar */
|
||
--shadow-level-3: 0 8px 24px rgba(27, 45, 91, 0.14); /* 模态、下拉菜单 */
|
||
|
||
|
||
/* ------------------------------------------------------------------
|
||
* 6. 间距 Spacing(4px 网格)
|
||
* ------------------------------------------------------------------ */
|
||
--space-1: 4px;
|
||
--space-2: 8px;
|
||
--space-3: 12px;
|
||
--space-4: 16px;
|
||
--space-5: 20px;
|
||
--space-6: 24px;
|
||
--space-8: 32px;
|
||
|
||
|
||
/* ------------------------------------------------------------------
|
||
* 7. 布局 Layout
|
||
* ------------------------------------------------------------------ */
|
||
--sidebar-width-desktop: 220px;
|
||
--content-max-width: 1220px;
|
||
--padding-desktop: 32px; /* 桌面左右 padding */
|
||
--padding-mobile: 24px; /* 移动左右 padding */
|
||
--card-padding-desktop: 24px;
|
||
--card-padding-mobile: 16px;
|
||
--card-gap-desktop: 20px;
|
||
--card-gap-mobile: 12px;
|
||
--tabbar-height-mobile: 120px; /* 移动 TabBar 高度 */
|
||
--btn-height: 40px;
|
||
--btn-height-pill: 44px;
|
||
|
||
|
||
/* ------------------------------------------------------------------
|
||
* 8. 断点 Breakpoint
|
||
* ------------------------------------------------------------------ */
|
||
--bp-mobile: 390px;
|
||
--bp-desktop: 1440px;
|
||
|
||
|
||
/* ------------------------------------------------------------------
|
||
* 9. 动效 Motion
|
||
* ------------------------------------------------------------------ */
|
||
--motion-hover-fast: 120ms; /* 按钮 hover 背景过渡 */
|
||
--motion-card-hover: 160ms; /* 卡片 hover 投影过渡 */
|
||
--motion-switch: 250ms; /* 切换/展开 */
|
||
--motion-tab-fade: 200ms; /* 移动 Tab 切换淡入 */
|
||
--ease-default: ease;
|
||
}
|
||
|
||
|
||
/* =====================================================================
|
||
* 10. 组件级预设预设(Typographic & Component recipe)
|
||
* —— 前端不直接硬编码上述,按此处 recipe 组装组件。
|
||
* ===================================================================== */
|
||
|
||
/* Hero 数据卡(首页 5 要素卡 / 深蓝大卡) */
|
||
.hub-card-hero {
|
||
color: var(--on-accent);
|
||
background: var(--gradient-hero-deep);
|
||
border-radius: var(--radius-lg);
|
||
padding: var(--card-padding-desktop);
|
||
}
|
||
|
||
/* 标准白卡(默认卡片) */
|
||
.hub-card {
|
||
background: var(--bg-card);
|
||
border: 1px solid var(--border-subtle);
|
||
border-radius: var(--radius-lg);
|
||
padding: var(--card-padding-desktop);
|
||
}
|
||
|
||
/* 主按钮 */
|
||
.hub-btn-primary {
|
||
background: var(--primary);
|
||
color: var(--on-accent);
|
||
border-radius: var(--radius-btn);
|
||
height: var(--btn-height);
|
||
font: var(--fw-button) var(--fs-button) / var(--lh-button) var(--ff-button);
|
||
transition: background var(--motion-hover-fast) var(--ease-default);
|
||
}
|
||
.hub-btn-primary:hover { background: color-mix(in srgb, var(--primary) 92%, #000); }
|
||
|
||
/* 次按钮(透明 + primary 描边) */
|
||
.hub-btn-secondary {
|
||
background: transparent;
|
||
color: var(--primary);
|
||
border: 1px solid var(--primary);
|
||
border-radius: var(--radius-btn);
|
||
height: var(--btn-height);
|
||
font: var(--fw-button) var(--fs-button) / var(--lh-button) var(--ff-button);
|
||
}
|
||
|
||
/* 语义标签 / 徽章(主色 + 浅底成对) */
|
||
.hub-badge {
|
||
font: var(--fw-label-bold) var(--fs-label) / var(--lh-label) var(--ff-label);
|
||
border-radius: var(--radius-sm);
|
||
padding: 2px var(--space-2);
|
||
}
|
||
.hub-badge--success { color: var(--success); background: var(--success-soft); }
|
||
.hub-badge--warning { color: var(--warning); background: var(--warning-soft); }
|
||
.hub-badge--danger { color: var(--danger); background: var(--danger-soft); }
|
||
.hub-badge--soft { color: var(--text-secondary); background: var(--bg-soft); }
|