From 6639a751bcfea760b4e8969f6404d61c5ba78d2c Mon Sep 17 00:00:00 2001
From: sion123 <450702724@qq.com>
Date: Mon, 16 Mar 2026 00:35:45 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.claude/skills/antd-to-shadcn/SKILL.md | 211 ++++++
.../references/COMPONENT_MAP.md | 162 +++++
.../references/MIGRATION_PATTERNS.md | 662 ++++++++++++++++++
.../antd-to-shadcn/references/STYLES.md | 484 +++++++++++++
.../app/web-gold/docs/DESIGN_SYSTEM_PROMPT.md | 548 ---------------
.../web-gold/src/components/SidebarNav.vue | 18 +-
frontend/app/web-gold/src/theme.css | 226 +++++-
7 files changed, 1752 insertions(+), 559 deletions(-)
create mode 100644 .claude/skills/antd-to-shadcn/SKILL.md
create mode 100644 .claude/skills/antd-to-shadcn/references/COMPONENT_MAP.md
create mode 100644 .claude/skills/antd-to-shadcn/references/MIGRATION_PATTERNS.md
create mode 100644 .claude/skills/antd-to-shadcn/references/STYLES.md
delete mode 100644 frontend/app/web-gold/docs/DESIGN_SYSTEM_PROMPT.md
diff --git a/.claude/skills/antd-to-shadcn/SKILL.md b/.claude/skills/antd-to-shadcn/SKILL.md
new file mode 100644
index 0000000000..e508ee8c6b
--- /dev/null
+++ b/.claude/skills/antd-to-shadcn/SKILL.md
@@ -0,0 +1,211 @@
+---
+name: antd-to-shadcn
+description: |
+ Vue 3 项目从 Ant Design Vue 迁移到 shadcn-vue 的专业技能。
+
+ 当用户请求以下操作时使用此技能:
+ - 将 Ant Design 组件替换为 shadcn 组件
+ - 迁移表单、表格、弹窗等复杂组件
+ - 保持业务功能不变的前提下现代化 UI
+ - 颜色解耦和主题配置
+ - 组件间距和布局优化
+
+ 触发词:迁移、shadcn、antd 替换、组件升级、UI 现代化
+---
+
+# Ant Design Vue → shadcn-vue 迁移技能
+
+将 Vue 3 + Ant Design Vue 项目迁移到 shadcn-vue + TailwindCSS。
+
+## 核心原则
+
+1. **业务功能不变** - 只改 UI 层,不改业务逻辑
+2. **现代化 UI** - 采用 shadcn 设计语言,简洁现代
+3. **颜色解耦** - 使用 CSS 变量,支持主题切换
+4. **渐进式迁移** - 逐个组件替换,保持可运行
+
+## 设计品质要求
+
+### 抵制过时设计
+
+**拒绝老气 UI**:
+- ❌ 粗重边框、多重边框嵌套
+- ❌ 灰暗沉闷的配色
+- ❌ 过度装饰的渐变和阴影
+- ❌ 拥挤无呼吸感的布局
+- ❌ 间距混乱、缺乏层级
+
+**拥抱现代设计**:
+- ✅ 轻量边框或无边框设计
+- ✅ 明亮有活力的色彩
+- ✅ 克制的阴影(shadow-sm 为主)
+- ✅ 充足留白,呼吸感
+- ✅ 清晰的视觉层级(8px 间距递进)
+
+### 颜色设计原则
+
+**年轻活力感**:
+- 主色饱和度适中(oklch chroma 0.14-0.18)
+- 避免过于灰暗的中间色
+- 使用微妙渐变增加质感
+- 深色模式保持足够对比度
+
+**发现优秀配色时**:
+1. 提取关键颜色值
+2. 添加到 `style.css` 设计令牌
+3. 使用语义化命名(如 `--color-accent-blue`)
+4. 在组件中通过变量引用
+
+### 间距层级规范
+
+```
+紧密:gap-1 (4px) - 图标与文字
+标准:gap-2 (8px) - 同组元素
+舒适:gap-3 (12px) - 表单项之间
+宽松:gap-4 (16px) - 卡片内容
+分区:gap-6 (24px) - 不同区块
+```
+
+## 项目上下文
+
+```
+前端目录: frontend/app/web-gold/
+组件目录: src/components/ui/ # shadcn 组件
+主题文件: src/theme.css # shadcn 主题变量
+样式文件: src/style.css # 设计令牌
+```
+
+## 迁移工作流
+
+### Step 1: 识别 Ant Design 组件
+
+扫描文件中的 Ant Design 导入:
+```vue
+// 需要替换的模式
+import { Button, Input, Form, Table, Modal, ... } from 'ant-design-vue'
+import { IconName } from '@ant-design/icons-vue'
+import { message, notification } from 'ant-design-vue'
+```
+
+### Step 2: 组件映射
+
+参见 [COMPONENT_MAP.md](references/COMPONENT_MAP.md) 获取完整映射表。
+
+快速参考:
+| Ant Design | shadcn-vue |
+|------------|------------|
+| a-button | Button |
+| a-input | Input |
+| a-form | Form |
+| a-table | Table |
+| a-modal | Dialog |
+| a-select | Select |
+| a-message | Sonner (toast) |
+| a-icon | Iconify lucide |
+
+### Step 3: 迁移模式
+
+参见 [MIGRATION_PATTERNS.md](references/MIGRATION_PATTERNS.md) 获取详细代码示例。
+
+### Step 4: 样式迁移
+
+参见 [STYLES.md](references/STYLES.md) 获取样式迁移指南。
+
+## 执行迁移
+
+### 1. 表单组件迁移
+
+```vue
+
+
+
+
+
+
+
+
+
+```
+
+### 2. 表格组件迁移
+
+```vue
+
+
+
+
+
+
+
+ {{ col.title }}
+
+
+
+
+ {{ row[col.dataIndex] }}
+
+
+
+```
+
+### 3. 消息提示迁移
+
+```javascript
+// Before
+import { message } from 'ant-design-vue'
+message.success('操作成功')
+
+// After
+import { toast } from 'vue-sonner'
+toast.success('操作成功')
+```
+
+### 4. 图标迁移
+
+```vue
+
+import { UserOutlined } from '@ant-design/icons-vue'
+
+
+
+import { Icon } from '@iconify/vue'
+
+```
+
+## 间距规范
+
+使用 Tailwind 间距类替代固定值:
+- `p-4` = 16px
+- `gap-3` = 12px
+- `space-y-4` = 子元素间 16px 间距
+
+## 颜色使用
+
+使用语义化 CSS 变量:
+```css
+color: var(--foreground) /* 主文字 */
+color: var(--muted-foreground) /* 次要文字 */
+background: var(--background) /* 背景 */
+background: var(--primary) /* 主色 */
+border-color: var(--border) /* 边框 */
+```
+
+## 检查清单
+
+迁移完成后验证:
+- [ ] 所有 a- 前缀组件已替换
+- [ ] ant-design-vue 导入已移除
+- [ ] 图标已迁移到 Iconify
+- [ ] message/notification 已迁移到 Sonner
+- [ ] 样式使用 Tailwind 类或 CSS 变量
+- [ ] 业务功能测试通过
diff --git a/.claude/skills/antd-to-shadcn/references/COMPONENT_MAP.md b/.claude/skills/antd-to-shadcn/references/COMPONENT_MAP.md
new file mode 100644
index 0000000000..322284f8ec
--- /dev/null
+++ b/.claude/skills/antd-to-shadcn/references/COMPONENT_MAP.md
@@ -0,0 +1,162 @@
+# 组件映射表
+
+完整的 Ant Design Vue → shadcn-vue 组件映射。
+
+## 基础组件
+
+| Ant Design | shadcn-vue | 说明 |
+|------------|------------|------|
+| `a-button` | `Button` | 按钮 |
+| `a-input` | `Input` | 输入框 |
+| `a-input-number` | `NumberField` | 数字输入 |
+| `a-input-password` | `Input type="password"` | 密码输入 |
+| `a-textarea` | `Textarea` | 多行文本 |
+| `a-select` | `Select` | 下拉选择 |
+| `a-radio` | `RadioGroup` + `RadioGroupItem` | 单选 |
+| `a-checkbox` | `Checkbox` | 复选框 |
+| `a-switch` | `Switch` | 开关 |
+| `a-slider` | `Slider` | 滑动条 |
+| `a-rate` | 自定义 | 评分(需自定义) |
+| `a-upload` | 自定义 | 上传(需自定义) |
+
+## 表单组件
+
+| Ant Design | shadcn-vue | 说明 |
+|------------|------------|------|
+| `a-form` | `Form` | 表单容器 |
+| `a-form-item` | `FormItem` | 表单项 |
+| `a-form-provider` | 自定义 | 表单上下文 |
+| `a-range-picker` | `RangeCalendar` + `Popover` | 日期范围 |
+| `a-date-picker` | `Calendar` + `Popover` | 日期选择 |
+| `a-time-picker` | 自定义 | 时间选择 |
+
+## 数据展示
+
+| Ant Design | shadcn-vue | 说明 |
+|------------|------------|------|
+| `a-table` | `Table` | 表格 |
+| `a-list` | 自定义 | 列表 |
+| `a-card` | `Card` | 卡片 |
+| `a-descriptions` | 自定义 | 描述列表 |
+| `a-statistic` | 自定义 | 统计数值 |
+| `a-tree` | 自定义 | 树形控件 |
+| `a-avatar` | `Avatar` | 头像 |
+| `a-badge` | `Badge` | 徽标 |
+| `a-tag` | `Badge` variant | 标签 |
+| `a-timeline` | 自定义 | 时间轴 |
+| `a-image` | `Img` 或自定义 | 图片 |
+| `a-empty` | `Empty` | 空状态 |
+
+## 导航组件
+
+| Ant Design | shadcn-vue | 说明 |
+|------------|------------|------|
+| `a-menu` | `NavigationMenu` / `SidebarMenu` | 菜单 |
+| `a-dropdown` | `DropdownMenu` | 下拉菜单 |
+| `a-pagination` | `Pagination` | 分页 |
+| `a-steps` | `Stepper` | 步骤条 |
+| `a-breadcrumb` | `Breadcrumb` | 面包屑 |
+| `a-tabs` | `Tabs` | 标签页 |
+
+## 反馈组件
+
+| Ant Design | shadcn-vue | 说明 |
+|------------|------------|------|
+| `a-modal` | `Dialog` | 对话框 |
+| `a-drawer` | `Drawer` | 抽屉 |
+| `a-message` | `toast` (vue-sonner) | 全局提示 |
+| `a-notification` | `toast` (vue-sonner) | 通知 |
+| `a-popconfirm` | `AlertDialog` | 确认对话框 |
+| `a-popover` | `Popover` | 气泡卡片 |
+| `a-tooltip` | `Tooltip` | 文字提示 |
+| `a-progress` | `Progress` | 进度条 |
+| `a-spin` | `Spinner` | 加载中 |
+| `a-skeleton` | `Skeleton` | 骨架屏 |
+| `a-alert` | `Alert` | 警告提示 |
+
+## 布局组件
+
+| Ant Design | shadcn-vue | 说明 |
+|------------|------------|------|
+| `a-layout` | 自定义 | 布局 |
+| `a-layout-sider` | `Sidebar` | 侧边栏 |
+| `a-layout-header` | 自定义 | 头部 |
+| `a-layout-content` | 自定义 | 内容 |
+| `a-layout-footer` | 自定义 | 底部 |
+| `a-row` / `a-col` | Tailwind `grid` / `flex` | 栅格 |
+| `a-space` | `div` + Tailwind `gap-*` | 间距 |
+| `a-divider` | `Separator` | 分割线 |
+
+## 图标映射
+
+| Ant Design Icons | Iconify (lucide) |
+|------------------|------------------|
+| `UserOutlined` | `lucide:user` |
+| `SettingOutlined` | `lucide:settings` |
+| `SearchOutlined` | `lucide:search` |
+| `PlusOutlined` | `lucide:plus` |
+| `DeleteOutlined` | `lucide:trash-2` |
+| `EditOutlined` | `lucide:pencil` |
+| `CloseOutlined` | `lucide:x` |
+| `CheckOutlined` | `lucide:check` |
+| `EyeOutlined` | `lucide:eye` |
+| `EyeInvisibleOutlined` | `lucide:eye-off` |
+| `LoadingOutlined` | `lucide:loader-2` |
+| `ExclamationCircleOutlined` | `lucide:alert-circle` |
+| `InfoCircleOutlined` | `lucide:info` |
+| `QuestionCircleOutlined` | `lucide:help-circle` |
+| `PhoneOutlined` | `lucide:phone` |
+| `MailOutlined` | `lucide:mail` |
+| `SafetyOutlined` | `lucide:shield` |
+| `UploadOutlined` | `lucide:upload` |
+| `DownloadOutlined` | `lucide:download` |
+| `CopyOutlined` | `lucide:copy` |
+| `ReloadOutlined` | `lucide:refresh-cw` |
+| `FilterOutlined` | `lucide:filter` |
+| `MoreOutlined` | `lucide:more-horizontal` |
+| `MenuOutlined` | `lucide:menu` |
+| `HomeOutlined` | `lucide:home` |
+| `LeftOutlined` | `lucide:chevron-left` |
+| `RightOutlined` | `lucide:chevron-right` |
+| `UpOutlined` | `lucide:chevron-up` |
+| `DownOutlined` | `lucide:chevron-down` |
+
+## 图标使用方式
+
+```vue
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+## 表单验证迁移
+
+| Ant Design | shadcn-vue (VeeForm) |
+|------------|----------------------|
+| `rules` prop | `zod` schema + `toTypedSchema` |
+| `validateFields()` | `form.validate()` |
+| `validateTrigger` | schema 配置 |
+| `hasFeedback` | `FormMessage` 组件 |
+
+## 事件映射
+
+| Ant Design | shadcn-vue |
+|------------|------------|
+| `@change` | `@update:modelValue` |
+| `@pressEnter` | `@keydown.enter` |
+| `@search` | 自定义 + `@keydown.enter` |
+| `@select` | `@update:modelValue` (Select) |
diff --git a/.claude/skills/antd-to-shadcn/references/MIGRATION_PATTERNS.md b/.claude/skills/antd-to-shadcn/references/MIGRATION_PATTERNS.md
new file mode 100644
index 0000000000..392c1173ef
--- /dev/null
+++ b/.claude/skills/antd-to-shadcn/references/MIGRATION_PATTERNS.md
@@ -0,0 +1,662 @@
+# 迁移模式
+
+详细的代码迁移示例,从 Ant Design Vue 到 shadcn-vue。
+
+## 目录
+
+1. [表单迁移](#表单迁移)
+2. [表格迁移](#表格迁移)
+3. [弹窗迁移](#弹窗迁移)
+4. [消息提示迁移](#消息提示迁移)
+5. [下拉选择迁移](#下拉选择迁移)
+6. [分页迁移](#分页迁移)
+7. [标签页迁移](#标签页迁移)
+8. [抽屉迁移](#抽屉迁移)
+
+---
+
+## 表单迁移
+
+### 简单表单
+
+```vue
+
+
+
+
+
+
+
+
+
+
+
+
+ 登录
+
+
+
+
+
+
+
+
+
+
+```
+
+### 表单 + 验证码(带按钮状态)
+
+```vue
+
+
+
+
+
+
+```
+
+---
+
+## 表格迁移
+
+```vue
+
+
+
+
+ 编辑
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ col.title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 暂无数据
+
+
+
+
+
+ {{ record.name }}
+ {{ record.status }}
+
+
+
+
+
+
+
+
+ 确定删除?
+ 此操作不可撤销
+
+ 取消
+ 确定
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+---
+
+## 弹窗迁移
+
+```vue
+
+
+ ...
+
+
+
+
+
+
+
+
+```
+
+---
+
+## 消息提示迁移
+
+```javascript
+// ========== Before: Ant Design ==========
+import { message, notification } from 'ant-design-vue'
+
+message.success('操作成功')
+message.error('操作失败')
+message.warning('警告信息')
+message.loading('加载中...')
+
+notification.success({
+ message: '成功',
+ description: '操作已完成'
+})
+
+// ========== After: shadcn-vue (vue-sonner) ==========
+import { toast } from 'vue-sonner'
+
+toast.success('操作成功')
+toast.error('操作失败')
+toast.warning('警告信息')
+toast.loading('加载中...')
+
+// 带描述的通知
+toast.success('操作已完成', {
+ description: '数据已保存'
+})
+
+// 自定义时长
+toast.success('操作成功', { duration: 3000 })
+
+// Promise 状态
+toast.promise(saveData(), {
+ loading: '保存中...',
+ success: '保存成功',
+ error: '保存失败'
+})
+```
+
+---
+
+## 下拉选择迁移
+
+```vue
+
+
+
+
+
+
+
+
+
+```
+
+---
+
+## 分页迁移
+
+```vue
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ p }}
+
+
+
+
+
+
+
+
+
+
+
+```
+
+---
+
+## 标签页迁移
+
+```vue
+
+
+ 内容一
+ 内容二
+
+
+
+
+
+
+
+
+ 标签一
+ 标签二
+
+ 内容一
+ 内容二
+
+
+```
+
+---
+
+## 抽屉迁移
+
+```vue
+
+
+ 内容
+
+
+
+
+
+
+
+
+
+ 详情
+ 查看详细信息
+
+
+ 内容
+
+
+
+
+
+
+
+
+
+```
+
+---
+
+## 常见问题
+
+### Q: 如何处理 a-form 的 layout 属性?
+
+```vue
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ...
+ ...
+
+
+
+
+ ...
+
+```
+
+### Ant Design 间距迁移
+
+| Ant Design | Tailwind |
+|------------|----------|
+| `margin: 16px` | `m-4` |
+| `padding: 24px` | `p-6` |
+| `gap: 8px` | `gap-2` |
+| `space-between` | `justify-between` |
+| `align-center` | `items-center` |
+
+---
+
+## 字体系统
+
+### 字体大小
+
+| Tailwind | 像素值 | 用途 |
+|----------|--------|------|
+| `text-xs` | 12px | 辅助文字 |
+| `text-sm` | 14px | 正文、标签 |
+| `text-base` | 16px | 正文 |
+| `text-lg` | 18px | 小标题 |
+| `text-xl` | 20px | 标题 |
+| `text-2xl` | 24px | 大标题 |
+| `text-3xl` | 30px | 页面标题 |
+
+### 字重
+
+```vue
+
+ 常规
+ 中等
+ 半粗
+ 粗体
+
+```
+
+### 行高
+
+```vue
+
+ 紧凑行高
+ 正常行高
+ 宽松行高
+
+```
+
+---
+
+## 阴影系统
+
+定义在 `theme.css`:
+
+```css
+--shadow-sm /* 微阴影 */
+--shadow /* 基础阴影 */
+--shadow-md /* 中等阴影 */
+--shadow-lg /* 大阴影 */
+--shadow-xl /* 超大阴影 */
+--shadow-2xl /* 巨大阴影 */
+```
+
+### 使用
+
+```vue
+
+ 卡片
+
+ 下拉菜单
+
+```
+
+### Ant Design 阴影迁移
+
+| Ant Design | Tailwind |
+|------------|----------|
+| `box-shadow: 0 2px 8px rgba(0,0,0,0.15)` | `shadow-md` |
+| Modal 阴影 | `shadow-xl` |
+| Popover 阴影 | `shadow-lg` |
+
+---
+
+## 圆角系统
+
+定义在 `theme.css`:
+
+```css
+--radius-sm /* 小圆角 */
+--radius-md /* 中圆角 */
+--radius-lg /* 大圆角 */
+--radius-xl /* 超大圆角 */
+```
+
+### 使用
+
+```vue
+
+
+
+ 卡片
+
+
+
+ 自定义
+
+```
+
+### Ant Design 圆角迁移
+
+| Ant Design | Tailwind |
+|------------|----------|
+| `border-radius: 2px` | `rounded-sm` |
+| `border-radius: 4px` | `rounded` |
+| `border-radius: 8px` | `rounded-lg` |
+| `border-radius: 12px` | `rounded-xl` |
+
+---
+
+## 响应式布局
+
+### 断点
+
+| 断点 | 最小宽度 |
+|------|----------|
+| `sm:` | 640px |
+| `md:` | 768px |
+| `lg:` | 1024px |
+| `xl:` | 1280px |
+| `2xl:` | 1536px |
+
+### 响应式示例
+
+```vue
+
+
+
+ ...
+
+
+
+ 桌面端显示
+ 移动端显示
+
+
+
+ ...
+
+
+
+ 标题
+
+```
+
+### 栅格迁移
+
+```vue
+
+
+ ...
+ ...
+
+
+
+
+
+
+
+```
+
+---
+
+## 状态样式
+
+### 悬停
+
+```vue
+
+
+ 卡片
+
+```
+
+### 焦点
+
+```vue
+
+
+
+
+```
+
+### 禁用
+
+```vue
+
+
+
+
+```
+
+### 加载中
+
+```vue
+
+
+
+```
+
+---
+
+## 过渡动画
+
+### 基础过渡
+
+```vue
+
+
+
+
+
+ 卡片
+
+
+ 元素
+
+```
+
+### 动画时长
+
+```vue
+
+ 快速
+ 正常
+ 慢速
+
+```
+
+---
+
+## 常见样式模式
+
+### 卡片
+
+```vue
+
+
+
+```
+
+### 表单项
+
+```vue
+
+
+
+```
+
+### 操作栏
+
+```vue
+
+
+
共 {{ total }} 条
+
+
+
+
+
+
+```
+
+### 空状态
+
+```vue
+
+
+
+
暂无数据
+
点击添加按钮创建
+
+
+
+```
diff --git a/frontend/app/web-gold/docs/DESIGN_SYSTEM_PROMPT.md b/frontend/app/web-gold/docs/DESIGN_SYSTEM_PROMPT.md
deleted file mode 100644
index 8f38707727..0000000000
--- a/frontend/app/web-gold/docs/DESIGN_SYSTEM_PROMPT.md
+++ /dev/null
@@ -1,548 +0,0 @@
-# Yudao Cloud B端设计规范提示词
-
-> **定位**: B端生产力工具 | 简约高效 | 专业可信 | 创新体验
-> **技术栈**: Vue 3 + TypeScript + Ant Design Vue + TailwindCSS
-> **业务**: AI/媒体功能增强的Spring Boot快速开发平台
-
----
-
-## 设计哲学
-
-```
-简约而不简单,高效且具辨识
-- 每个像素都有目的
-- 每个交互都有反馈
-- 每个元素都有秩序
-```
-
-**核心原则**:
-1. **认知减负** - 减少用户思考成本
-2. **操作高效** - 最短路径完成任务
-3. **视觉一致** - 建立可预测的心智模型
-4. **创新克制** - 在熟悉中创造惊喜
-
----
-
-## 一、色彩系统 (Color System)
-
-### 1.1 品牌主色 - 科技蓝
-
-```css
-/* 主色阶 - 用于品牌识别、主要操作 */
---color-primary-50: #EFF6FF; /* 悬浮背景 */
---color-primary-100: #DBEAFE; /* 选中背景 */
---color-primary-200: #BFDBFE; /* 边框高亮 */
---color-primary-300: #93C5FD; /* 禁用状态 */
---color-primary-400: #60A5FA; /* 悬浮状态 */
---color-primary-500: #3B82F6; /* 标准主色 */
---color-primary-600: #2563EB; /* 按下状态 */
---color-primary-700: #1D4ED8; /* 强调状态 */
-```
-
-**使用规则**:
-- 主按钮、关键操作使用 `primary-500`
-- 悬浮状态提升至 `primary-400`
-- 按下状态加深至 `primary-600`
-- 大面积背景仅用 `primary-50/100`
-
-### 1.2 中性色 - 专业灰
-
-```css
-/* 灰度系统 - 用于文字、边框、背景 */
---color-gray-50: #F9FAFB; /* 页面背景 */
---color-gray-100: #F3F4F6; /* 卡片背景 */
---color-gray-200: #E5E7EB; /* 分割线 */
---color-gray-300: #D1D5DB; /* 边框 */
---color-gray-400: #9CA3AF; /* 占位符 */
---color-gray-500: #6B7280; /* 辅助文字 */
---color-gray-600: #4B5563; /* 正文 */
---color-gray-700: #374151; /* 标题 */
---color-gray-800: #1F2937; /* 强调标题 */
---color-gray-900: #111827; /* 最高对比 */
-```
-
-### 1.3 功能色
-
-```css
-/* 成功 - 绿色系 */
---color-success-light: #DCFCE7;
---color-success: #22C55E;
---color-success-dark: #16A34A;
-
-/* 警告 - 琥珀系 */
---color-warning-light: #FEF3C7;
---color-warning: #F59E0B;
---color-warning-dark: #D97706;
-
-/* 错误 - 红色系 */
---color-error-light: #FEE2E2;
---color-error: #EF4444;
---color-error-dark: #DC2626;
-
-/* 信息 - 蓝色系 */
---color-info-light: #DBEAFE;
---color-info: #3B82F6;
---color-info-dark: #2563EB;
-```
-
-### 1.4 语义映射
-
-| 场景 | 颜色 | 示例 |
-|------|------|------|
-| 主要操作 | primary-500 | 提交、保存、确认 |
-| 次要操作 | gray-600 + border | 取消、返回 |
-| 危险操作 | error-500 | 删除、清空 |
-| 成功反馈 | success-500 | 完成提示 |
-| 数据展示 | gray-700 | 表格正文 |
-| 辅助说明 | gray-500 | 表头、注释 |
-
----
-
-## 二、字体排版 (Typography)
-
-### 2.1 字体家族
-
-```css
-/* 主字体 - 中文优先思源黑体,西文 Inter */
---font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB",
- "Microsoft YaHei", "Noto Sans SC", sans-serif;
-
-/* 等宽字体 - 代码、数字 */
---font-family-mono: "JetBrains Mono", "Fira Code", Consolas, monospace;
-```
-
-### 2.2 字号阶梯
-
-```css
-/* 字号系统 - 基于 14px 基准 */
---font-size-xs: 12px; /* 辅助标签、时间戳 */
---font-size-sm: 13px; /* 表头、次要文字 */
---font-size-base: 14px; /* 正文、输入框 */
---font-size-md: 16px; /* 小标题、强调 */
---font-size-lg: 18px; /* 卡片标题 */
---font-size-xl: 20px; /* 区块标题 */
---font-size-2xl: 24px; /* 页面标题 */
---font-size-3xl: 30px; /* 大标题 */
-```
-
-### 2.3 行高规范
-
-```css
---line-height-tight: 1.25; /* 标题 */
---line-height-base: 1.5; /* 正文 */
---line-height-relaxed: 1.75; /* 长文本 */
-```
-
-### 2.4 字重规范
-
-```css
---font-weight-normal: 400; /* 正文 */
---font-weight-medium: 500; /* 强调 */
---font-weight-semibold: 600; /* 小标题 */
---font-weight-bold: 700; /* 大标题 */
-```
-
-### 2.5 使用规则
-
-| 元素 | 字号 | 字重 | 行高 |
-|------|------|------|------|
-| 页面标题 | 24px | 600 | 1.25 |
-| 卡片标题 | 16px | 500 | 1.5 |
-| 正文内容 | 14px | 400 | 1.5 |
-| 辅助说明 | 12px | 400 | 1.5 |
-| 表格数据 | 14px | 400 | 1.5 |
-| 按钮文字 | 14px | 500 | 1 |
-
----
-
-## 三、间距系统 (Spacing)
-
-### 3.1 基础单位
-
-```css
-/* 基于 4px 网格系统 */
---space-0: 0;
---space-1: 4px; /* 紧凑间距 */
---space-2: 8px; /* 元素内间距 */
---space-3: 12px; /* 小组件间距 */
---space-4: 16px; /* 标准间距 */
---space-5: 20px; /* 卡片内边距 */
---space-6: 24px; /* 区块间距 */
---space-8: 32px; /* 大区块间距 */
---space-10: 40px; /* 章节间距 */
---space-12: 48px; /* 页面边距 */
---space-16: 64px; /* 主要分隔 */
-```
-
-### 3.2 语义映射
-
-| 场景 | 间距值 | 示例 |
-|------|--------|------|
-| 图标与文字 | 4-8px | `gap: 8px` |
-| 按钮内边距 | 8-16px | `padding: 8px 16px` |
-| 表单字段间距 | 16-24px | `margin-bottom: 16px` |
-| 卡片内边距 | 16-24px | `padding: 20px` |
-| 卡片之间 | 16-24px | `gap: 16px` |
-| 区块之间 | 24-32px | `margin-top: 24px` |
-| 页面边距 | 24px | `padding: 24px` |
-
----
-
-## 四、圆角规范 (Border Radius)
-
-### 4.1 圆角系统
-
-```css
---radius-none: 0;
---radius-sm: 4px; /* 小按钮、标签 */
---radius-base: 6px; /* 输入框、小卡片 */
---radius-md: 8px; /* 按钮、下拉框 */
---radius-lg: 12px; /* 卡片、弹窗 */
---radius-xl: 16px; /* 大卡片 */
---radius-2xl: 24px; /* 特殊容器 */
---radius-full: 9999px; /* 圆形、药丸 */
-```
-
-### 4.2 使用规则
-
-| 元素 | 圆角 | 说明 |
-|------|------|------|
-| 按钮 | 6px | 标准圆角 |
-| 输入框 | 6px | 与按钮一致 |
-| 小标签 | 4px | 轻量感 |
-| 卡片 | 12px | 柔和边界 |
-| 弹窗 | 12px | 与卡片一致 |
-| 头像 | 9999px | 圆形 |
-| 抽屉 | 0 | 左侧直角 |
-
----
-
-## 五、阴影系统 (Shadows)
-
-### 5.1 阴影层级
-
-```css
-/* 层级递进 - 从平面到立体 */
---shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
---shadow-base: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1);
---shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);
---shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1);
---shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1);
-```
-
-### 5.2 使用场景
-
-| 层级 | 阴影 | 示例 |
-|------|------|------|
-| 层级0 | none | 页面背景 |
-| 层级1 | sm | 输入框聚焦 |
-| 层级2 | base | 卡片默认 |
-| 层级3 | md | 卡片悬浮 |
-| 层级4 | lg | 下拉菜单 |
-| 层级5 | xl | 弹窗、抽屉 |
-
----
-
-## 六、图标系统 (Icons)
-
-### 6.1 图标规范
-
-```css
-/* 图标尺寸 */
---icon-xs: 12px; /* 内联图标 */
---icon-sm: 16px; /* 列表图标 */
---icon-md: 20px; /* 标准图标 */
---icon-lg: 24px; /* 导航图标 */
---icon-xl: 32px; /* 功能图标 */
-
-/* 图标描边 */
---icon-stroke: 1.5px;
-```
-
-### 6.2 使用规则
-
-- **图标库**: 统一使用 Lucide Icons 或 Ant Design Icons
-- **风格**: 线性图标,圆角端点
-- **颜色**: 继承文字颜色或使用 gray-500
-- **对齐**: 与文字垂直居中,间距 4-8px
-
----
-
-## 七、组件规范 (Components)
-
-### 7.1 按钮
-
-```css
-/* 尺寸规范 */
---btn-height-sm: 28px;
---btn-height-base: 32px;
---btn-height-lg: 40px;
-
-/* 内边距 */
---btn-padding-sm: 0 12px;
---btn-padding-base: 0 16px;
---btn-padding-lg: 0 24px;
-```
-
-**按钮类型**:
-| 类型 | 样式 | 使用场景 |
-|------|------|----------|
-| 主要 | primary-500 填充 | 提交、确认、下一步 |
-| 次要 | gray-600 边框 | 取消、返回、重置 |
-| 文字 | 无边框透明 | 次要操作、链接跳转 |
-| 危险 | error-500 填充 | 删除、清空、禁用 |
-
-### 7.2 输入框
-
-```css
---input-height: 32px;
---input-padding: 0 12px;
---input-border: 1px solid var(--color-gray-300);
---input-radius: 6px;
---input-focus-ring: 0 0 0 3px rgba(59, 130, 246, 0.1);
-```
-
-### 7.3 卡片
-
-```css
---card-bg: var(--color-gray-50);
---card-border: 1px solid var(--color-gray-200);
---card-radius: 12px;
---card-padding: 20px;
---card-shadow: var(--shadow-base);
---card-hover-shadow: var(--shadow-md);
-```
-
-### 7.4 表格
-
-```css
---table-header-bg: var(--color-gray-50);
---table-row-hover: var(--color-gray-50);
---table-border: 1px solid var(--color-gray-200);
---table-cell-padding: 12px 16px;
-```
-
----
-
-## 八、布局系统 (Layout)
-
-### 8.1 栅格系统
-
-```css
-/* 12列栅格 */
---grid-columns: 12;
---grid-gutter: 24px;
-```
-
-### 8.2 页面布局
-
-```css
-/* 侧边栏 */
---sidebar-width: 240px;
---sidebar-collapsed: 64px;
-
-/* 顶部导航 */
---header-height: 56px;
-
-/* 内容区域 */
---content-max-width: 1200px;
---content-padding: 24px;
-```
-
-### 8.3 Z-Index 层级
-
-```css
---z-dropdown: 1000;
---z-sticky: 1020;
---z-fixed: 1030;
---z-modal-backdrop: 1040;
---z-modal: 1050;
---z-popover: 1060;
---z-tooltip: 1070;
-```
-
----
-
-## 九、交互反馈 (Interaction)
-
-### 9.1 状态颜色
-
-| 状态 | 背景 | 边框 | 文字 |
-|------|------|------|------|
-| 默认 | white | gray-300 | gray-700 |
-| 悬浮 | gray-50 | gray-300 | gray-700 |
-| 聚焦 | white | primary-500 | gray-700 |
-| 激活 | primary-50 | primary-500 | primary-600 |
-| 禁用 | gray-100 | gray-200 | gray-400 |
-| 错误 | error-50 | error-500 | error-600 |
-| 成功 | success-50 | success-500 | success-600 |
-
-### 9.2 反馈方式
-
-| 场景 | 反馈 |
-|------|------|
-| 按钮点击 | 缩放 0.98 + 背景加深 |
-| 输入聚焦 | 边框变色 + 外发光 |
-| 加载中 | 旋转图标 + 禁用交互 |
-| 操作成功 | Toast 提示 + 图标动画 |
-| 操作失败 | Toast 错误 + 抖动动画 |
-
----
-
-## 十、动效规范 (Motion)
-
-### 10.1 时长
-
-```css
---duration-instant: 100ms; /* 微交互 */
---duration-fast: 150ms; /* 悬浮 */
---duration-base: 200ms; /* 状态切换 */
---duration-slow: 300ms; /* 展开/收起 */
---duration-slower: 500ms; /* 页面过渡 */
-```
-
-### 10.2 缓动函数
-
-```css
---ease-in: cubic-bezier(0.4, 0, 1, 1);
---ease-out: cubic-bezier(0, 0, 0.2, 1);
---ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
---ease-bounce: cubic-bezier(0.68, -0.55, 0.265, 1.55);
-```
-
-### 10.3 动效原则
-
-1. **目的性** - 每个动效都要服务于用户理解
-2. **克制** - B端产品动效要低调、高效
-3. **一致性** - 相同交互使用相同动效
-4. **可关闭** - 尊重 prefers-reduced-motion
-
-```css
-@media (prefers-reduced-motion: reduce) {
- *, *::before, *::after {
- animation-duration: 0.01ms !important;
- transition-duration: 0.01ms !important;
- }
-}
-```
-
----
-
-## 十一、响应式设计 (Responsive)
-
-### 11.1 断点系统
-
-```css
-/* 移动优先 */
---breakpoint-sm: 640px; /* 小屏手机 */
---breakpoint-md: 768px; /* 平板竖屏 */
---breakpoint-lg: 1024px; /* 平板横屏/小桌面 */
---breakpoint-xl: 1280px; /* 标准桌面 */
---breakpoint-2xl: 1536px; /* 大屏桌面 */
-```
-
-### 11.2 响应策略
-
-| 断点 | 布局 | 导航 | 侧边栏 |
-|------|------|------|--------|
-| < 768px | 单列 | 底部 | 抽屉 |
-| 768-1024 | 双列 | 顶部 | 可折叠 |
-| > 1024 | 多列 | 顶部 | 固定展开 |
-
----
-
-## 十二、深色模式 (Dark Mode)
-
-### 12.1 深色色板
-
-```css
-[data-theme="dark"] {
- /* 背景层级 */
- --color-bg-base: #0F172A; /* 页面背景 */
- --color-bg-elevated: #1E293B; /* 卡片背景 */
- --color-bg-overlay: #334155; /* 弹窗背景 */
-
- /* 文字 */
- --color-text-primary: #F1F5F9;
- --color-text-secondary: #94A3B8;
- --color-text-muted: #64748B;
-
- /* 边框 */
- --color-border: #334155;
- --color-border-light: #1E293B;
-
- /* 主色调整 - 深色下提亮 */
- --color-primary-500: #60A5FA;
-}
-```
-
-### 12.2 切换策略
-
-- 跟随系统: `prefers-color-scheme`
-- 手动切换: localStorage 持久化
-- 无闪烁: CSS 变量 + preload 设置
-
----
-
-## 实施指南
-
-### 优先级排序
-
-1. **P0 - 立即统一**
- - 品牌主色 (三套主色 → 统一蓝色系)
- - 字体大小 (移除硬编码)
- - 间距系统 (使用 CSS 变量)
-
-2. **P1 - 短期完善**
- - TailwindCSS 配置整合
- - Ant Design 主题配置
- - 组件样式清理
-
-3. **P2 - 中期优化**
- - 动效系统
- - 深色模式
- - 响应式适配
-
-### 代码迁移示例
-
-**Before (问题代码)**:
-```css
-/* HistoryPanel.vue */
-@primary: #6366f1;
-.button {
- background: @primary;
- padding: 16px;
- font-size: 14px;
-}
-```
-
-**After (规范代码)**:
-```css
-/* 使用全局变量 */
-.button {
- background: var(--color-primary-500);
- padding: var(--space-4);
- font-size: var(--font-size-base);
-}
-```
-
----
-
-## 设计检查清单
-
-- [ ] 颜色使用 CSS 变量,无硬编码
-- [ ] 字体大小在定义的阶梯内
-- [ ] 间距使用 4px 倍数
-- [ ] 圆角使用预定义值
-- [ ] 阴影层级正确
-- [ ] 图标风格统一
-- [ ] 交互状态完整
-- [ ] 动效时长合理
-- [ ] 响应式断点正确
-- [ ] 深色模式适配
-
----
-
-> **版本**: v1.0
-> **更新日期**: 2026-02-25
-> **适用项目**: Yudao Cloud Frontend
diff --git a/frontend/app/web-gold/src/components/SidebarNav.vue b/frontend/app/web-gold/src/components/SidebarNav.vue
index 494c549005..69629612f2 100644
--- a/frontend/app/web-gold/src/components/SidebarNav.vue
+++ b/frontend/app/web-gold/src/components/SidebarNav.vue
@@ -109,24 +109,26 @@ function isActive(item) {
-
diff --git a/frontend/app/web-gold/src/theme.css b/frontend/app/web-gold/src/theme.css
index d9e69ff673..3023b91212 100644
--- a/frontend/app/web-gold/src/theme.css
+++ b/frontend/app/web-gold/src/theme.css
@@ -1,14 +1,142 @@
@import "tailwindcss";
@import "tw-animate-css";
+
@custom-variant dark (&:is(.dark *));
-/* shadcn-vue 主题映射 */
-@theme inline {
+:root {
+ /* ========================================
+ 基础颜色 - 与 style.css 保持一致
+ ======================================== */
+ --background: oklch(0.985 0.001 264.695);
+ --foreground: oklch(0.195 0.038 264.695);
+ --card: oklch(1 0 0);
+ --card-foreground: oklch(0.195 0.038 264.695);
+ --popover: oklch(1 0 0);
+ --popover-foreground: oklch(0.195 0.038 264.695);
+
+ /* ========================================
+ 主色 - 科技蓝品牌色
+ ======================================== */
+ --primary: oklch(0.45 0.16 254.604);
+ --primary-foreground: oklch(0.985 0 0);
+
+ /* ========================================
+ 次要色 - 偏蓝冷灰
+ ======================================== */
+ --secondary: oklch(0.97 0.001 264.695);
+ --secondary-foreground: oklch(0.205 0.015 264.695);
+
+ /* ========================================
+ 静音色 - 柔和灰
+ ======================================== */
+ --muted: oklch(0.97 0.001 264.695);
+ --muted-foreground: oklch(0.45 0.02 264.695);
+
+ /* ========================================
+ 强调色
+ ======================================== */
+ --accent: oklch(0.97 0.001 264.695);
+ --accent-foreground: oklch(0.205 0.015 264.695);
+
+ /* ========================================
+ 功能色
+ ======================================== */
+ --destructive: oklch(0.577 0.245 27.325);
+ --destructive-foreground: oklch(0.985 0 0);
+
+ /* ========================================
+ 边框与输入
+ ======================================== */
+ --border: oklch(0.922 0.004 264.695);
+ --input: oklch(0.922 0.004 264.695);
+ --ring: oklch(0.55 0.18 254.604);
+
+ /* ========================================
+ 图表色 - 蓝色系渐变
+ ======================================== */
+ --chart-1: oklch(0.68 0.16 254.604);
+ --chart-2: oklch(0.55 0.18 254.604);
+ --chart-3: oklch(0.45 0.16 254.604);
+ --chart-4: oklch(0.37 0.13 254.604);
+ --chart-5: oklch(0.30 0.10 254.604);
+
+ /* ========================================
+ 侧边栏主题 - 品牌蓝高亮
+ ======================================== */
+ --sidebar: oklch(0.985 0.001 264.695);
+ --sidebar-foreground: oklch(0.195 0.038 264.695);
+ --sidebar-primary: oklch(0.45 0.16 254.604);
+ --sidebar-primary-foreground: oklch(0.985 0 0);
+ --sidebar-accent: oklch(0.97 0.001 264.695);
+ --sidebar-accent-foreground: oklch(0.205 0.015 264.695);
+ --sidebar-border: oklch(0.922 0.004 264.695);
+ --sidebar-ring: oklch(0.55 0.18 254.604);
+
+ /* ========================================
+ 字体系统
+ ======================================== */
+ --font-sans: -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
+ --font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;
+ --font-mono: ui-monospace, monospace;
+
+ /* ========================================
+ 圆角系统
+ ======================================== */
+ --radius: 0.625rem;
--radius-sm: calc(var(--radius) - 4px);
--radius-md: calc(var(--radius) - 2px);
--radius-lg: var(--radius);
--radius-xl: calc(var(--radius) + 4px);
+ /* ========================================
+ 阴影系统
+ ======================================== */
+ --shadow-2xs: 0 1px 2px 0 oklch(0 0 0 / 0.05);
+ --shadow-xs: 0 1px 2px 0 oklch(0 0 0 / 0.05);
+ --shadow-sm: 0 1px 3px 0 oklch(0 0 0 / 0.10), 0 1px 2px -1px oklch(0 0 0 / 0.10);
+ --shadow: 0 1px 3px 0 oklch(0 0 0 / 0.10), 0 1px 2px -1px oklch(0 0 0 / 0.10);
+ --shadow-md: 0 4px 6px -1px oklch(0 0 0 / 0.10), 0 2px 4px -2px oklch(0 0 0 / 0.10);
+ --shadow-lg: 0 10px 15px -3px oklch(0 0 0 / 0.10), 0 4px 6px -4px oklch(0 0 0 / 0.10);
+ --shadow-xl: 0 20px 25px -5px oklch(0 0 0 / 0.10), 0 8px 10px -6px oklch(0 0 0 / 0.10);
+ --shadow-2xl: 0 25px 50px -12px oklch(0 0 0 / 0.25);
+}
+
+.dark {
+ --background: oklch(0.145 0.004 264.695);
+ --foreground: oklch(0.94 0.003 264.695);
+ --card: oklch(0.18 0.006 264.695);
+ --card-foreground: oklch(0.94 0.003 264.695);
+ --popover: oklch(0.18 0.006 264.695);
+ --popover-foreground: oklch(0.94 0.003 264.695);
+ --primary: oklch(0.68 0.16 254.604);
+ --primary-foreground: oklch(0.145 0.004 264.695);
+ --secondary: oklch(0.25 0.01 264.695);
+ --secondary-foreground: oklch(0.94 0.003 264.695);
+ --muted: oklch(0.25 0.01 264.695);
+ --muted-foreground: oklch(0.65 0.015 264.695);
+ --accent: oklch(0.30 0.015 264.695);
+ --accent-foreground: oklch(0.94 0.003 264.695);
+ --destructive: oklch(0.65 0.2 25);
+ --destructive-foreground: oklch(0.94 0.003 264.695);
+ --border: oklch(0.28 0.01 264.695);
+ --input: oklch(0.28 0.01 264.695);
+ --ring: oklch(0.55 0.15 254.604);
+ --chart-1: oklch(0.78 0.11 254.604);
+ --chart-2: oklch(0.68 0.16 254.604);
+ --chart-3: oklch(0.55 0.18 254.604);
+ --chart-4: oklch(0.45 0.16 254.604);
+ --chart-5: oklch(0.37 0.13 254.604);
+ --sidebar: oklch(0.18 0.006 264.695);
+ --sidebar-foreground: oklch(0.94 0.003 264.695);
+ --sidebar-primary: oklch(0.68 0.16 254.604);
+ --sidebar-primary-foreground: oklch(0.145 0.004 264.695);
+ --sidebar-accent: oklch(0.25 0.01 264.695);
+ --sidebar-accent-foreground: oklch(0.94 0.003 264.695);
+ --sidebar-border: oklch(0.28 0.01 264.695);
+ --sidebar-ring: oklch(0.55 0.15 254.604);
+}
+
+@theme inline {
--color-background: var(--background);
--color-foreground: var(--foreground);
--color-card: var(--card);
@@ -28,11 +156,103 @@
--color-border: var(--border);
--color-input: var(--input);
--color-ring: var(--ring);
+ --color-chart-1: var(--chart-1);
+ --color-chart-2: var(--chart-2);
+ --color-chart-3: var(--chart-3);
+ --color-chart-4: var(--chart-4);
+ --color-chart-5: var(--chart-5);
+ --color-sidebar: var(--sidebar);
+ --color-sidebar-foreground: var(--sidebar-foreground);
+ --color-sidebar-primary: var(--sidebar-primary);
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
+ --color-sidebar-accent: var(--sidebar-accent);
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
+ --color-sidebar-border: var(--sidebar-border);
+ --color-sidebar-ring: var(--sidebar-ring);
+ --font-sans: var(--font-sans);
+ --font-mono: var(--font-mono);
+ --font-serif: var(--font-serif);
+ --radius-sm: calc(var(--radius) - 4px);
+ --radius-md: calc(var(--radius) - 2px);
+ --radius-lg: var(--radius);
+ --radius-xl: calc(var(--radius) + 4px);
+ --shadow-2xs: var(--shadow-2xs);
+ --shadow-xs: var(--shadow-xs);
+ --shadow-sm: var(--shadow-sm);
+ --shadow: var(--shadow);
+ --shadow-md: var(--shadow-md);
+ --shadow-lg: var(--shadow-lg);
+ --shadow-xl: var(--shadow-xl);
+ --shadow-2xl: var(--shadow-2xl);
}
-/* shadcn 基础层 */
@layer base {
* {
@apply border-border outline-ring/50;
}
+ body {
+ @apply bg-background text-foreground antialiased;
+ }
+}
+
+@theme inline {
+ --color-background: var(--background);
+ --color-foreground: var(--foreground);
+ --color-card: var(--card);
+ --color-card-foreground: var(--card-foreground);
+ --color-popover: var(--popover);
+ --color-popover-foreground: var(--popover-foreground);
+ --color-primary: var(--primary);
+ --color-primary-foreground: var(--primary-foreground);
+ --color-secondary: var(--secondary);
+ --color-secondary-foreground: var(--secondary-foreground);
+ --color-muted: var(--muted);
+ --color-muted-foreground: var(--muted-foreground);
+ --color-accent: var(--accent);
+ --color-accent-foreground: var(--accent-foreground);
+ --color-destructive: var(--destructive);
+ --color-destructive-foreground: var(--destructive-foreground);
+ --color-border: var(--border);
+ --color-input: var(--input);
+ --color-ring: var(--ring);
+ --color-chart-1: var(--chart-1);
+ --color-chart-2: var(--chart-2);
+ --color-chart-3: var(--chart-3);
+ --color-chart-4: var(--chart-4);
+ --color-chart-5: var(--chart-5);
+ --color-sidebar: var(--sidebar);
+ --color-sidebar-foreground: var(--sidebar-foreground);
+ --color-sidebar-primary: var(--sidebar-primary);
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
+ --color-sidebar-accent: var(--sidebar-accent);
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
+ --color-sidebar-border: var(--sidebar-border);
+ --color-sidebar-ring: var(--sidebar-ring);
+
+ --font-sans: var(--font-sans);
+ --font-mono: var(--font-mono);
+ --font-serif: var(--font-serif);
+
+ --radius-sm: calc(var(--radius) - 4px);
+ --radius-md: calc(var(--radius) - 2px);
+ --radius-lg: var(--radius);
+ --radius-xl: calc(var(--radius) + 4px);
+
+ --shadow-2xs: var(--shadow-2xs);
+ --shadow-xs: var(--shadow-xs);
+ --shadow-sm: var(--shadow-sm);
+ --shadow: var(--shadow);
+ --shadow-md: var(--shadow-md);
+ --shadow-lg: var(--shadow-lg);
+ --shadow-xl: var(--shadow-xl);
+ --shadow-2xl: var(--shadow-2xl);
+}
+
+@layer base {
+ * {
+ @apply border-border outline-ring/50;
+ }
+ body {
+ @apply bg-background text-foreground;
+ }
}