gwy-exam/deliverables/design/design-tokens.css
2026-08-27 15:29:52 +08:00

193 lines
8.8 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 备考通 · Design Tokens (CSS 变量)
* =====================================================================
* 版本v1.0.0 · 2026-08-26
* 来源:设计规范-备考通-20260826.mdArdot 文件 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. 间距 Spacing4px 网格)
* ------------------------------------------------------------------ */
--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); }