refactor(design-tokens): move @theme declarations to individual token files

Consolidate the design system registration by removing the centralized
`@theme inline` block and all design token imports from globals.css.
Each token file now declares its own `@theme` rules directly, allowing
Tailwind 4 to auto-collect them and generate utility classes (e.g.
`bg-accent`, `p-md`, `rounded-lg`) without redundant re-mapping.

This simplifies globals.css, removes a layer of indirection, and keeps
the design token definitions co-located with their `@theme` exposure.
This commit is contained in:
2026-06-09 16:28:06 +08:00
parent e2f60bc4f2
commit 763bec4e74
12 changed files with 117 additions and 251 deletions
+11 -113
View File
@@ -1,121 +1,19 @@
@import "tailwindcss";
@import "../design/colors.css";
@import "../design/spacing.css";
@import "../design/typography.css";
@import "../design/radius.css";
@import "../design/border-widths.css";
@import "../design/icon-sizes.css";
@import "../design/breakpoints.css";
@import "../design/dimensions.css";
/* ============================================================
* Tailwind 4 @theme - 将 CSS 变量注册为 utility 类
* 在这里统一暴露,业务层可直接使用:
* - bg-accent / text-primary / border-error
* - p-md / m-lg / gap-sm
* - rounded-md
* - text-lg font-medium
* - border-thin / border-light
* - w-icon-sm / h-icon-md
* 设计系统 - 集中导入所有 token
* 每个 token 文件用 `@theme` 直接声明,Tailwind 4 自动收集
* 并生成 utility 类(如 `bg-accent` / `p-md` / `rounded-lg`
* ============================================================ */
@theme inline {
/* ==================== 颜色 ==================== */
--color-text-primary: var(--color-text-primary);
--color-text-secondary: var(--color-text-secondary);
--color-text-hint: var(--color-text-hint);
--color-text-banner: var(--color-text-banner);
--color-text-light: var(--color-text-light);
--color-text-foreground: var(--color-text-foreground);
--color-accent: var(--color-accent);
--color-primary: var(--color-primary);
--color-success: var(--color-success);
--color-error: var(--color-error);
--color-warning: var(--color-warning);
--color-gold: var(--color-gold);
--color-section-title: var(--color-section-title);
--color-settings-card-background: var(--color-settings-card-background);
--color-settings-divider: var(--color-settings-divider);
--color-settings-text-primary: var(--color-settings-text-primary);
--color-destructive: var(--color-destructive);
--color-chevron-icon: var(--color-chevron-icon);
--color-version-text: var(--color-version-text);
--color-profile-tag-background: var(--color-profile-tag-background);
--color-gifts-background: var(--color-gifts-background);
--color-gift-card-background: var(--color-gift-card-background);
--color-coin-icon: var(--color-coin-icon);
--color-button-gradient-start: var(--color-button-gradient-start);
--color-button-gradient-end: var(--color-button-gradient-end);
--color-nav-active-border: var(--color-nav-active-border);
--color-gift-price-text: var(--color-gift-price-text);
--color-activities-background: var(--color-activities-background);
--color-nav-active-gradient-start: var(--color-nav-active-gradient-start);
--color-nav-active-gradient-end: var(--color-nav-active-gradient-end);
--color-nav-active-icon: var(--color-nav-active-icon);
--color-nav-active-label: var(--color-nav-active-label);
--color-facebook-button-gradient-start: var(
--color-facebook-button-gradient-start
);
--color-facebook-button-gradient-end: var(
--color-facebook-button-gradient-end
);
--color-page-background: var(--color-page-background);
/* 扩展色 */
--color-sidebar-background: var(--color-sidebar-background);
--color-dark-background: var(--color-dark-background);
--color-dark-gray: var(--color-dark-gray);
--color-bubble-background: var(--color-bubble-background);
--color-chat-input-border: var(--color-chat-input-border);
--color-input-placeholder: var(--color-input-placeholder);
--color-pwa-button-text: var(--color-pwa-button-text);
--color-facebook-blue: var(--color-facebook-blue);
--color-dialog-background: var(--color-dialog-background);
--color-dialog-border: var(--color-dialog-border);
--color-blur-background: var(--color-blur-background);
/* ==================== 间距 ==================== */
--spacing-xs: var(--spacing-xs);
--spacing-sm: var(--spacing-sm);
--spacing-md: var(--spacing-md);
--spacing-lg: var(--spacing-lg);
--spacing-xl: var(--spacing-xl);
--spacing-xxl: var(--spacing-xxl);
--spacing-xxxl: var(--spacing-xxxl);
/* ==================== 圆角 ==================== */
--radius-sm: var(--radius-sm);
--radius-md: var(--radius-md);
--radius-lg: var(--radius-lg);
--radius-xl: var(--radius-xl);
--radius-xxl: var(--radius-xxl);
--radius-xxxl: var(--radius-xxxl);
/* ==================== 字体 ==================== */
--font-sans: var(--font-system);
--font-athelas: var(--color-athelas, var(--font-athelas));
/* ==================== 边框宽度 ==================== */
--border-thin: var(--border-thin);
--border-light: var(--border-light);
--border-normal: var(--border-normal);
--border-medium: var(--border-medium);
--border-bold: var(--border-bold);
--border-heavy: var(--border-heavy);
/* ==================== 图标尺寸 ==================== */
--icon-size-sm: var(--icon-size-sm);
--icon-size-md: var(--icon-size-md);
--icon-size-lg: var(--icon-size-lg);
--icon-size-xl: var(--icon-size-xl);
--icon-size-xxl: var(--icon-size-xxl);
--icon-size-xxxl: var(--icon-size-xxxl);
--icon-size-34: var(--icon-size-34);
--icon-size-40: var(--icon-size-40);
--icon-size-43: var(--icon-size-43);
--icon-size-56: var(--icon-size-56);
--icon-size-86: var(--icon-size-86);
}
@import "../tokens/colors.css";
@import "../tokens/spacing.css";
@import "../tokens/typography.css";
@import "../tokens/radius.css";
@import "../tokens/border-widths.css";
@import "../tokens/icon-sizes.css";
@import "../tokens/breakpoints.css";
@import "../tokens/dimensions.css";
/* ============================================================
* 基础样式
-14
View File
@@ -1,14 +0,0 @@
/* ============================================================
* 设计系统 - 边框宽度变量
* 原始 Dart: lib/design/border_widths.dart
* 集中管理应用边框宽度数值
* ============================================================ */
:root {
--border-thin: 0.5px;
--border-light: 1px;
--border-normal: 1.5px;
--border-medium: 2px;
--border-bold: 3px;
--border-heavy: 4px;
}
-82
View File
@@ -1,82 +0,0 @@
/* ============================================================
* 设计系统 - 颜色变量
* 原始 Dart: lib/design/colors.dart (light 主题)
* 集中管理颜色值,CSS 变量 + Tailwind utility 通过 globals.css 暴露
* ============================================================ */
:root {
/* ==================== 文字颜色 ==================== */
--color-text-primary: #ffffff;
--color-text-secondary: #9e9e9e;
--color-text-hint: #757575;
--color-text-banner: #8c8b8b;
--color-text-light: #e0e0e0;
--color-text-foreground: #171717;
/* ==================== 品牌色 ==================== */
--color-accent: #f84d96;
--color-primary: #1677ff;
--color-success: #52c41a;
--color-error: #ff4d4f;
--color-warning: #ffa940;
/* ==================== Profile 页面 ==================== */
--color-gold: #ffd700;
--color-section-title: #a59db1;
--color-settings-card-background: #261c31;
--color-settings-divider: #3d314a;
--color-settings-text-primary: #e0dce6;
--color-destructive: #ff6b6b;
--color-chevron-icon: #f67e9f;
--color-version-text: #6c6378;
--color-profile-tag-background: #2a2833;
/* ==================== Gifts 页面 ==================== */
--color-gifts-background: #0d0b14;
--color-gift-card-background: #2d253a;
--color-coin-icon: #ffa940;
--color-button-gradient-start: #8b5cf6;
--color-button-gradient-end: #ec4899;
--color-nav-active-border: #8b5cf6;
--color-gift-price-text: #ffa940;
/* ==================== Activities 页面 ==================== */
--color-activities-background: #0e0b16;
/* ==================== 导航激活状态 ==================== */
--color-nav-active-gradient-start: #667eea;
--color-nav-active-gradient-end: #764ba2;
--color-nav-active-icon: #667eea;
--color-nav-active-label: #667eea;
/* ==================== Splash 页面 Facebook 按钮 ==================== */
--color-facebook-button-gradient-start: #ff67e0;
--color-facebook-button-gradient-end: #ff52a2;
/* ==================== 页面背景(body 用) ==================== */
--color-page-background: #ffffff;
/* ==================== 扩展令牌 (迁移自 Flutter UI) ==================== */
/* 侧边栏/Profile 深色背景 */
--color-sidebar-background: #0d0b14;
--color-dark-background: #0d0b14;
--color-dark-gray: #2a2a2a;
--color-bubble-background: #1a1625;
--color-bubble-transparent: rgba(255, 255, 255, 0);
/* 聊天输入框 */
--color-chat-input-border: rgba(255, 255, 255, 0.1);
--color-input-box-shadow: rgba(0, 0, 0, 0.1);
--color-input-placeholder: #757575;
--color-pwa-button-text: #ffffff;
/* Facebook 蓝 */
--color-facebook-blue: #1877f2;
/* Dialog 通用 */
--color-dialog-background: #1f1a2e;
--color-dialog-border: rgba(255, 255, 255, 0.1);
/* 半透明 / 模糊 */
--color-blur-background: rgba(13, 11, 20, 0.85);
}
-15
View File
@@ -1,15 +0,0 @@
/* ============================================================
* 设计系统 - 圆角变量
* 原始 Dart: lib/design/radius.dart
* 集中管理应用圆角数值
* ============================================================ */
:root {
--radius-sm: 4px;
--radius-md: 8px;
--radius-lg: 12px;
--radius-xl: 16px;
--radius-xxl: 20px;
--radius-xxxl: 24px;
--radius-full: 999px;
}
+12
View File
@@ -0,0 +1,12 @@
/**
* 边框宽度 token
* 原始 Dart: lib/design/border_widths.dart
*/
@theme {
--border-thin: 0.5px;
--border-light: 1px;
--border-normal: 1.5px;
--border-medium: 2px;
--border-bold: 3px;
--border-heavy: 4px;
}
@@ -1,8 +1,7 @@
/* ============================================================
* 设计系统 - 响应式断点
/**
* 响应式断点 token
* 原始 Dart: lib/ui/core/responsive.dart
* ============================================================ */
*/
:root {
--bp-mobile-max: 599.98px;
--bp-tablet-min: 600px;
+57
View File
@@ -0,0 +1,57 @@
/**
* 颜色 token
* 原始 Dart: lib/design/colors.dart (light 主题)
*
* 使用 `@theme` 直接声明,Tailwind 4 自动生成 utility 类:
* - bg-accent / text-primary / border-error
*
* 对应组件用法(CSS Module / Tailwind class):
* - `var(--color-accent)` 或 `className="bg-accent"`
*/
@theme {
/* ==================== 文字颜色 ==================== */
--color-text-primary: #ffffff;
--color-text-secondary: #9e9e9e;
--color-text-hint: #757575;
--color-text-banner: #8c8b8b;
--color-text-light: #e0e0e0;
--color-text-foreground: #171717;
/* ==================== 品牌色 ==================== */
--color-accent: #f84d96;
--color-primary: #1677ff;
--color-success: #52c41a;
--color-error: #ff4d4f;
--color-warning: #ffa940;
/* ==================== Splash 页面 Facebook 按钮 ==================== */
--color-button-gradient-start: #ff67e0;
--color-button-gradient-end: #ff52a2;
/* ==================== 页面背景(body 用) ==================== */
--color-page-background: #ffffff;
/* ==================== 扩展令牌(迁移自 Flutter UI ==================== */
/* 侧边栏/Profile 深色背景 */
--color-sidebar-background: #0d0b14;
--color-dark-background: #0d0b14;
--color-dark-gray: #2a2a2a;
--color-bubble-background: #1a1625;
--color-bubble-transparent: rgba(255, 255, 255, 0);
/* 聊天输入框 */
--color-chat-input-border: rgba(255, 255, 255, 0.1);
--color-input-box-shadow: rgba(0, 0, 0, 0.1);
--color-input-placeholder: #757575;
--color-pwa-button-text: #ffffff;
/* Facebook 蓝 */
--color-facebook-blue: #1877f2;
/* Dialog 通用 */
--color-dialog-background: #1f1a2e;
--color-dialog-border: rgba(255, 255, 255, 0.1);
/* 半透明 / 模糊 */
--color-blur-background: rgba(13, 11, 20, 0.85);
}
@@ -1,9 +1,9 @@
/* ============================================================
* 设计系统 - 固定尺寸变量
/**
* 固定尺寸 token
* 原始 Dart: lib/design/app_dimensions.dart
* 集中管理按钮/对话框/气泡等固定尺寸
* ============================================================ */
*
* 这些是不应通过 Tailwind 缩放变化的硬尺寸如按钮高度对话框宽度
*/
:root {
/* 按钮 */
--button-height: 48px;
@@ -1,10 +1,8 @@
/* ============================================================
* 设计系统 - 图标尺寸变量
/**
* 图标尺寸 token
* 原始 Dart: lib/design/icon_sizes.dart
* 集中管理应用图标尺寸数值
* ============================================================ */
:root {
*/
@theme {
--icon-size-sm: 16px;
--icon-size-md: 18px;
--icon-size-lg: 20px;
+13
View File
@@ -0,0 +1,13 @@
/**
* 圆角 token
* 原始 Dart: lib/design/radius.dart
*/
@theme {
--radius-sm: 4px;
--radius-md: 8px;
--radius-lg: 12px;
--radius-xl: 16px;
--radius-xxl: 20px;
--radius-xxxl: 24px;
--radius-full: 999px;
}
@@ -1,10 +1,8 @@
/* ============================================================
* 设计系统 - 间距变量
/**
* 间距 token
* 原始 Dart: lib/design/spacing.dart
* 集中管理应用间距数值
* ============================================================ */
:root {
*/
@theme {
--spacing-xs: 4px;
--spacing-sm: 8px;
--spacing-md: 12px;
@@ -1,17 +1,19 @@
/* ============================================================
* 设计系统 - 字体
/**
* 字体 token
* 原始 Dart: lib/design/fonts.dart + font_sizes.dart
*
* body 使用跨平台系统字体栈
* Athelas Apple 平台专用字体
* ============================================================ */
:root {
* Athelas Apple 平台专用字体通过 `next/font/local` 加载
*/
@theme {
/* 字体族 */
--font-system: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI",
Roboto, "Helvetica Neue", Arial, sans-serif;
--font-athelas: "Athelas", serif;
/* Tailwind 默认字体别名:font-sans → font-system */
--font-sans: var(--font-system);
/* 字体尺寸 */
--font-size-xs: 10px;
--font-size-sm: 12px;