diff --git a/.claude/settings.local.json b/.claude/settings.local.json
index efb176a7..39492ce7 100644
--- a/.claude/settings.local.json
+++ b/.claude/settings.local.json
@@ -4,7 +4,13 @@
"mcp__promptx__remember",
"mcp__playwright__browser_network_requests",
"Bash(git add:*)",
- "Bash(git commit:*)"
+ "Bash(git commit:*)",
+ "Bash(open:*)",
+ "mcp__playwright__browser_navigate",
+ "mcp__playwright__browser_take_screenshot",
+ "mcp__serena__read_memory",
+ "WebSearch",
+ "WebFetch(domain:unsplash.com)"
],
"deny": [],
"ask": [],
diff --git a/.playwright-mcp/hero-cards-before.png b/.playwright-mcp/hero-cards-before.png
new file mode 100644
index 00000000..7becea40
Binary files /dev/null and b/.playwright-mcp/hero-cards-before.png differ
diff --git a/.serena/memories/visual-design-layout-issues.md b/.serena/memories/visual-design-layout-issues.md
new file mode 100644
index 00000000..24f92cd0
--- /dev/null
+++ b/.serena/memories/visual-design-layout-issues.md
@@ -0,0 +1,36 @@
+# 视觉设计订单班布局问题记录
+
+## 2025-10-09: 项目成果总结布局问题
+
+### 问题描述
+- **位置**: index.html Footer区域 - 项目成果总结 (Section 5)
+- **当前问题**: 使用grid-3类名,但实际CSS定义为`grid-template-columns: repeat(2, 1fr)`,导致3个内容块换行显示,布局不美观
+- **用户反馈**: "项目成果的布局太丑了,单个换行,如果3个内容最好就做成3列"
+
+### 根本原因
+在styles.css中,`.grid-3`类的定义错误:
+```css
+.grid-3 {
+ grid-template-columns: repeat(2, 1fr); /* 错误:应该是3列 */
+}
+```
+
+### 解决方案
+修改`.grid-3`为真正的3列布局:
+```css
+.grid-3 {
+ grid-template-columns: repeat(3, 1fr); /* 正确:3列 */
+}
+```
+
+### 影响范围
+- Footer区域的3个卡片(核心亮点、制作数据、应用价值)
+- 任何使用grid-3类的其他位置
+
+### 修复时间
+2025-10-09
+
+### 经验教训
+- 类名应该准确反映其功能(grid-3应该是3列,不是2列)
+- 在大屏幕优化时要确保网格定义与实际需求一致
+- 响应式设计时,桌面端应优先考虑内容的最佳展示方式
diff --git a/.serena/memories/web-layout-patterns-ascii.md b/.serena/memories/web-layout-patterns-ascii.md
new file mode 100644
index 00000000..a6b616b2
--- /dev/null
+++ b/.serena/memories/web-layout-patterns-ascii.md
@@ -0,0 +1,1687 @@
+# 网页布局排版方法总结 - ASCII可视化指南(完整增强版)
+
+## 目录
+1. [Grid网格布局模式](#一grid网格布局模式)
+2. [Flexbox布局模式](#二flexbox布局模式)
+3. [图层叠加与定位模式](#三图层叠加与定位模式)
+4. [响应式布局转换](#四响应式布局转换)
+5. [间距系统对比](#五间距系统对比)
+6. [排版层次结构](#六排版层次结构)
+7. [实用布局组合示例](#七实用布局组合示例)
+8. [Hero区域布局模式](#八hero区域布局模式) ⭐ 新增
+9. [导航栏布局模式](#九导航栏布局模式) ⭐ 新增
+10. [Agent头像区布局](#十agent头像区布局) ⭐ 新增
+11. [Stats统计数据布局](#十一stats统计数据布局) ⭐ 新增
+12. [Footer总结区布局](#十二footer总结区布局) ⭐ 新增
+13. [关键CSS属性速查表](#十三关键css属性速查表)
+14. [常见问题解决方案](#十四常见问题解决方案)
+15. [最佳实践总结](#十五最佳实践总结)
+
+---
+
+## 一、Grid网格布局模式
+
+### 1. Grid-2 布局(2列并排)
+```
+┌─────────────────────────────────────────────────────────────┐
+│ 容器 (.grid-2) │
+│ grid-template-columns: repeat(2, 1fr) │
+├─────────────────────────────┬───────────────────────────────┤
+│ │ │
+│ 卡片 1 │ 卡片 2 │
+│ (50% 宽度) │ (50% 宽度) │
+│ │ │
+│ ┌─────────────┐ │ ┌─────────────┐ │
+│ │ 图片 │ │ │ 图片 │ │
+│ │ 16:9 比例 │ │ │ 16:9 比例 │ │
+│ └─────────────┘ │ └─────────────┘ │
+│ ┌─────────────┐ │ ┌─────────────┐ │
+│ │ 标题 │ │ │ 标题 │ │
+│ ├─────────────┤ │ ├─────────────┤ │
+│ │ 内容 │ │ │ 内容 │ │
+│ └─────────────┘ │ └─────────────┘ │
+│ │ │
+└─────────────────────────────┴───────────────────────────────┘
+
+CSS 代码:
+.grid-2 {
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ gap: var(--spacing-2xl);
+}
+
+适用场景:
+- 对比展示(如:功能对比、前后对比)
+- 大尺寸内容展示
+- 左右分栏布局
+```
+
+### 2. Grid-3 布局(3列并排)
+```
+┌───────────────────────────────────────────────────────────────────────────┐
+│ 容器 (.grid-3) │
+│ grid-template-columns: repeat(3, 1fr) │
+├───────────────────────┬───────────────────────┬───────────────────────────┤
+│ │ │ │
+│ 卡片 1 │ 卡片 2 │ 卡片 3 │
+│ (33.33% 宽度) │ (33.33% 宽度) │ (33.33% 宽度) │
+│ │ │ │
+│ ┌─────────┐ │ ┌─────────┐ │ ┌─────────┐ │
+│ │ 图片 │ │ │ 图片 │ │ │ 图片 │ │
+│ │ 16:9 │ │ │ 16:9 │ │ │ 16:9 │ │
+│ └─────────┘ │ └─────────┘ │ └─────────┘ │
+│ ┌─────────┐ │ ┌─────────┐ │ ┌─────────┐ │
+│ │ 标题 │ │ │ 标题 │ │ │ 标题 │ │
+│ ├─────────┤ │ ├─────────┤ │ ├─────────┤ │
+│ │ 内容 │ │ │ 内容 │ │ │ 内容 │ │
+│ └─────────┘ │ └─────────┘ │ └─────────┘ │
+│ │ │ │
+└───────────────────────┴───────────────────────┴───────────────────────────┘
+
+CSS 代码:
+.grid-3 {
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ gap: var(--spacing-2xl);
+}
+
+适用场景:
+- 三要素展示(如:特点、优势、功能)
+- 项目案例展示
+- 服务项目列表
+- 成果展示区
+```
+
+### 3. Grid-4 布局(4列并排)
+```
+┌─────────────────────────────────────────────────────────────────────────────────────────┐
+│ 容器 (.grid-4) │
+│ grid-template-columns: repeat(4, 1fr) │
+├──────────────────┬──────────────────┬──────────────────┬──────────────────────────────┤
+│ │ │ │ │
+│ 卡片 1 │ 卡片 2 │ 卡片 3 │ 卡片 4 │
+│ (25% 宽度) │ (25% 宽度) │ (25% 宽度) │ (25% 宽度) │
+│ │ │ │ │
+│ ┌────────┐ │ ┌────────┐ │ ┌────────┐ │ ┌────────┐ │
+│ │ 图片 │ │ │ 图片 │ │ │ 图片 │ │ │ 图片 │ │
+│ │ 3:2 │ │ │ 3:2 │ │ │ 3:2 │ │ │ 3:2 │ │
+│ └────────┘ │ └────────┘ │ └────────┘ │ └────────┘ │
+│ ┌────────┐ │ ┌────────┐ │ ┌────────┐ │ ┌────────┐ │
+│ │ 标题 │ │ │ 标题 │ │ │ 标题 │ │ │ 标题 │ │
+│ └────────┘ │ └────────┘ │ └────────┘ │ └────────┘ │
+│ │ │ │ │
+└──────────────────┴──────────────────┴──────────────────┴──────────────────────────────┘
+
+CSS 代码:
+.grid-4 {
+ display: grid;
+ grid-template-columns: repeat(4, 1fr);
+ gap: var(--spacing-xl);
+}
+
+适用场景:
+- 数据统计展示
+- 产品特性列表
+- 设计原则说明
+- 快速功能预览
+
+⚠️ 注意:避免3+1布局(3个一行,1个换行)
+❌ 错误:
+┌─────┬─────┬─────┐
+│ 1 │ 2 │ 3 │
+└─────┴─────┴─────┘
+┌─────┐
+│ 4 │ ← 单独换行很丑
+└─────┘
+
+✅ 正确:
+┌────┬────┬────┬────┐
+│ 1 │ 2 │ 3 │ 4 │
+└────┴────┴────┴────┘
+```
+
+### 4. 食品紧凑版Grid优化(减少列数,增大单元格)
+```
+标准版 Grid-3: 食品紧凑版 Grid-3:
+┌────┬────┬────┐ ┌──────────┬──────────┐
+│ 1 │ 2 │ 3 │ │ 1 │ 2 │
+└────┴────┴────┘ └──────────┴──────────┘
+ ┌──────────┐
+ │ 3 │
+ └──────────┘
+
+grid-3 { grid-3 {
+ columns: repeat(3, 1fr) columns: repeat(2, 1fr) ← 改为2列
+} }
+
+优势:
+- 图片更大,内容更突出
+- 减少拥挤感
+- 提升视觉层次
+```
+
+---
+
+## 二、Flexbox布局模式
+
+### 1. Hero浮动卡片(强制并排)
+```
+┌──────────────────────────────────────────────────────────────┐
+│ Hero 内容区域 │
+│ │
+│ ┌──────────────┐ │
+│ │ 主标题 │ │
+│ │ 副标题 │ │
+│ └──────────────┘ │
+│ │
+│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
+│ │ 3600片 │ │ 99.7% │ │ ±0.02mm │ │ 300ms │ │
+│ │ /小时 │ │ 检出率 │ │ 精度 │ │ 时间 │ │
+│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
+│ ← flex-wrap: nowrap 强制并排,不换行 │
+└──────────────────────────────────────────────────────────────┘
+
+CSS 代码:
+.hero-floating-cards {
+ display: flex;
+ gap: var(--spacing-md); /* 紧凑间距 */
+ justify-content: center;
+ flex-wrap: nowrap; /* 关键:强制并排 */
+}
+
+.hero-card {
+ padding: var(--spacing-sm) var(--spacing-md); /* 紧凑内边距 */
+ min-width: 100px; /* 小尺寸 */
+ border-radius: var(--radius-md); /* 适中圆角 */
+}
+
+关键技术点:
+✅ flex-wrap: nowrap → 强制单行显示
+✅ gap 使用 md 而非 lg → 节省空间
+✅ min-width 100px → 保持紧凑
+❌ flex-wrap: wrap → 会导致换行
+```
+
+### 2. 卡片内部Flexbox Order布局
+```
+传统布局(标题在上): Order重排布局(图片优先):
+┌─────────────────┐ ┌─────────────────┐
+│ .card-header │ ← order: 1 │ .image │ ← order: 1
+│ 标题区域 │ │ ┌───────────┐ │
+├─────────────────┤ │ │ 图片 │ │
+│ .image │ ← order: 2 │ │ 16:9比例 │ │
+│ ┌───────────┐ │ │ └───────────┘ │
+│ │ 图片 │ │ ├─────────────────┤
+│ └───────────┘ │ │ .card-header │ ← order: 2
+├─────────────────┤ │ 标题区域 │
+│ .card-body │ ← order: 3 ├─────────────────┤
+│ 内容区域 │ │ .card-body │ ← order: 3
+└─────────────────┘ │ 内容区域 │
+ └─────────────────┘
+
+CSS 代码:
+.card {
+ display: flex;
+ flex-direction: column;
+ padding: 0; /* 移除内边距,让图片占满 */
+}
+
+.image-container {
+ order: 1; /* 图片最前 */
+ aspect-ratio: 16/9;
+ margin-bottom: 0; /* 无间距 */
+ border-radius: 0; /* 卡片内无圆角 */
+}
+
+.card-header {
+ order: 2; /* 标题居中 */
+ padding: var(--spacing-xl);
+}
+
+.card-body {
+ order: 3; /* 内容最后 */
+ padding: var(--spacing-xl);
+ flex: 1; /* 占据剩余空间 */
+}
+
+优势:
+- 视觉冲击力强
+- 图片优先展示
+- 灵活调整顺序
+- 响应式友好
+```
+
+### 3. 图片容器Aspect Ratio控制
+```
+16:9 宽屏比例(食品/能源页面常用):
+┌────────────────────────────────────┐
+│ │
+│ ┌──────────────┐ │
+│ │ │ │ ← height: 自动计算
+│ │ 16:9 │ │ (width / 16 * 9)
+│ │ │ │
+│ └──────────────┘ │
+│ │
+└────────────────────────────────────┘
+ width: 100%
+
+3:2 标准比例(产品展示):
+┌──────────────────────┐
+│ │
+│ ┌──────────┐ │
+│ │ │ │ ← height: 自动计算
+│ │ 3:2 │ │ (width / 3 * 2)
+│ │ │ │
+│ └──────────┘ │
+│ │
+└──────────────────────┘
+ width: 100%
+
+4:3 传统比例(时间线图片):
+┌─────────────────┐
+│ │
+│ ┌─────────┐ │
+│ │ │ │ ← height: 自动计算
+│ │ 4:3 │ │ (width / 4 * 3)
+│ │ │ │
+│ └─────────┘ │
+│ │
+└─────────────────┘
+ width: 100%
+
+CSS 代码:
+/* 16:9 宽屏 - 紧凑现代 */
+.image-container {
+ aspect-ratio: 16/9;
+ width: 100%;
+ object-fit: cover;
+}
+
+/* 3:2 标准 - 产品展示 */
+.product-image {
+ aspect-ratio: 3/2;
+ width: 100%;
+}
+
+/* 4:3 传统 - 时间线 */
+.timeline-image {
+ aspect-ratio: 4/3;
+ flex: 0 0 300px;
+}
+
+关键点:
+✅ aspect-ratio 自动计算高度
+✅ object-fit: cover 裁剪适应
+✅ 无需手动设置 height
+```
+
+---
+
+## 三、图层叠加与定位模式
+
+### 1. 背景图片+渐变叠加
+```
+┌─────────────────────────────────────────┐
+│ 卡片标题区域 (.card-header) │
+├─────────────────────────────────────────┤
+│ ┌─────────────────────────────────────┐ │ ← position: relative
+│ │ 【Layer 3 - 最上层】 │ │ (容器定位上下文)
+│ │
│ │
+│ │ position: absolute │ │
+│ │ inset: 0 │ │
+│ │ background: linear-gradient( │ │
+│ │ 135deg, │ │
+│ │ rgba(13, 71, 161, 0.92) 0%, │ │ ← 半透明渐变
+│ │ rgba(25, 118, 210, 0.88) 100% │ │ 保证文字可读性
+│ │ ) │ │
+│ │ z-index: 0 │ │
+│ ├─────────────────────────────────────┤ │
+│ │ 【Layer 1 - 底层】 │ │
+│ │ 背景图片 │ │
+│ │ background-image: │ │
+│ │ url('unsplash.com/...') │ │ ← 实际图片
+│ │ background-size: cover │ │
+│ │ background-position: center │ │
+│ └─────────────────────────────────────┘ │
+└─────────────────────────────────────────┘
+
+HTML 结构:
+
+
+z-index 层级说明:
+━━━━━━━━━━━━━━━━━━━
+ 标题文字 (z: 1) ← 最上层,清晰可读
+━━━━━━━━━━━━━━━━━━━
+ 渐变遮罩 (z: 0) ← 中间层,半透明
+━━━━━━━━━━━━━━━━━━━
+ 背景图片 ← 底层,装饰作用
+━━━━━━━━━━━━━━━━━━━
+```
+
+### 2. Glassmorphism玻璃态效果
+```
+┌─────────────────────────────────────────────────────┐
+│ 背景层(模糊背景图片或渐变) │
+│ │
+│ ┌─────────────────────────────────────┐ │
+│ │ 【玻璃态卡片】 │ │
+│ │ ┌─────────────────────────────────┐ │ │
+│ │ │ 半透明背景 + 模糊效果 │ │ │
+│ │ │ background: rgba(255,255,255,0.9)│ │ ← 90%透明度白色
+│ │ │ backdrop-filter: blur(15px) │ │ ← 15px背景模糊
+│ │ │ border: 2px solid rgba(...,0.2) │ │ ← 20%透明度边框
+│ │ │ box-shadow: 0 8px 32px rgba(...) │ │ ← 柔和阴影
+│ │ │ │ │
+│ │ │ ┌────────────────────┐ │ │
+│ │ │ │ 内容文字 │ │ │ ← 深色文字清晰可读
+│ │ │ │ 清晰易读 │ │ │
+│ │ │ └────────────────────┘ │ │
+│ │ └─────────────────────────────────┘ │
+│ └─────────────────────────────────────┘
+│ │
+└─────────────────────────────────────────────────────┘
+
+CSS 代码:
+.card {
+ background: var(--bg-card); /* rgba(255,255,255,0.9) */
+ backdrop-filter: blur(15px); /* 背景模糊 */
+ -webkit-backdrop-filter: blur(15px); /* Safari支持 */
+ border: 2px solid var(--border-light); /* rgba(..., 0.2) */
+ border-radius: var(--radius-2xl); /* 1.5rem */
+ box-shadow: var(--shadow-md); /* 柔和阴影 */
+}
+
+.nav {
+ background: var(--bg-semi-dark); /* rgba(255,255,255,0.95) */
+ backdrop-filter: blur(20px); /* 更强模糊 */
+}
+
+深色主题变体:
+body.dark-theme {
+ --bg-card: rgba(18, 35, 24, 0.9); /* 深绿半透明 */
+ --bg-semi-dark: rgba(10, 26, 15, 0.95); /* 深邃绿半透明 */
+}
+
+效果特点:
+✨ 透过效果 - 能看到背景元素
+✨ 模糊效果 - backdrop-filter: blur()
+✨ 层次感强 - 阴影+边框+透明度
+✨ 现代时尚 - iOS/macOS风格
+```
+
+---
+
+## 四、响应式布局转换
+
+### 1. Grid → 单列响应式
+```
+桌面端(>768px): 移动端(≤768px):
+┌─────┬─────┬─────┐ ┌───────────┐
+│ 1 │ 2 │ 3 │ │ 1 │
+└─────┴─────┴─────┘ ├───────────┤
+grid-3: repeat(3, 1fr) │ 2 │
+ ├───────────┤
+ │ 3 │
+ └───────────┘
+ grid-3: 1fr
+
+CSS 代码:
+@media (max-width: 768px) {
+ .grid-2,
+ .grid-3,
+ .grid-4 {
+ grid-template-columns: 1fr; /* 全部改为单列 */
+ }
+}
+```
+
+### 2. Flexbox → 垂直堆叠
+```
+桌面端(>768px):
+┌──────────────────────────────────────────┐
+│ .alternating-layout (flex-direction: row)│
+├─────────────────────┬────────────────────┤
+│ 图片 (flex:1) │ 内容 (flex:1) │
+│ ┌───────────────┐ │ 标题 │
+│ │ │ │ 段落内容... │
+│ │ 4:3比例 │ │ │
+│ └───────────────┘ │ │
+└─────────────────────┴────────────────────┘
+
+移动端(≤768px):
+┌──────────────────────────────────────────┐
+│ .alternating-layout (flex-direction: col)│
+├──────────────────────────────────────────┤
+│ ┌────────────────────────────────────┐ │
+│ │ 图片 │ │
+│ │ 4:3比例 │ │
+│ └────────────────────────────────────┘ │
+├──────────────────────────────────────────┤
+│ 标题 │
+│ 段落内容... │
+│ │
+└──────────────────────────────────────────┘
+
+CSS 代码:
+.alternating-layout {
+ display: flex;
+ gap: var(--spacing-2xl);
+ align-items: center;
+}
+
+@media (max-width: 768px) {
+ .alternating-layout {
+ flex-direction: column; /* 改为垂直堆叠 */
+ }
+}
+```
+
+---
+
+## 五、间距系统对比
+
+### 标准间距 vs 紧凑间距
+```
+┌─────────────────────────────────────────────────────────────────┐
+│ 间距对比示意图 │
+├─────────────────────────────────────────────────────────────────┤
+│ │
+│ 标准版能源页面: │
+│ ┌───────────────┐ ← --spacing-xl: 64px │
+│ │ 卡片1 │ │
+│ └───────────────┘ │
+│ ↕ 96px (--spacing-2xl) │
+│ ┌───────────────┐ │
+│ │ 卡片2 │ │
+│ └───────────────┘ │
+│ │
+│ 紧凑版食品页面: │
+│ ┌───────────────┐ ← --spacing-xl: 40px (-37.5%) │
+│ │ 卡片1 │ │
+│ └───────────────┘ │
+│ ↕ 48px (--spacing-2xl, -50%) │
+│ ┌───────────────┐ │
+│ │ 卡片2 │ │
+│ └───────────────┘ │
+│ │
+└─────────────────────────────────────────────────────────────────┘
+
+数值对比表:
+╔═══════════════╦═══════════════╦═══════════════╦═══════════╗
+║ 间距变量 ║ 标准版 ║ 紧凑版 ║ 减少比例 ║
+╠═══════════════╬═══════════════╬═══════════════╬═══════════╣
+║ --spacing-xs ║ 12px ║ 8px ║ -33% ║
+║ --spacing-sm ║ 20px ║ 12px ║ -40% ║
+║ --spacing-md ║ 32px ║ 20px ║ -37.5% ║
+║ --spacing-lg ║ 48px ║ 32px ║ -33% ║
+║ --spacing-xl ║ 64px ║ 40px ║ -37.5% ║
+║ --spacing-2xl ║ 96px ║ 48px ║ -50% ║
+║ --spacing-3xl ║ 128px ║ 64px ║ -50% ║
+╚═══════════════╩═══════════════╩═══════════════╩═══════════╝
+
+使用建议:
+✅ 标准间距:适合内容较少、需要呼吸感的页面
+✅ 紧凑间距:适合内容丰富、需要展示更多信息的页面
+```
+
+---
+
+## 六、排版层次结构
+
+### 文字层次金字塔
+```
+ ┌──────────────┐
+ │ Hero Title │ ← text-5xl: 64px
+ │ 最大标题 │ font-bold: 700
+ └──────────────┘ 特殊场合使用
+ │
+ ┌──────────────┐
+ │ Section Title │ ← text-4xl: 48px
+ │ 区块标题 │ font-bold: 700
+ └──────────────┘ 页面主要标题
+ │
+ ┌──────────────┐
+ │ Card Title │ ← text-2xl: 32px
+ │ 卡片标题 │ font-semibold: 600
+ └──────────────┘ 卡片/组件标题
+ │
+ ┌────────────┴────────────┐
+ ┌──────────┐ ┌──────────┐
+ │ Subtitle │ │ Body │ ← text-lg: 22px
+ │ 副标题 │ │ 正文 │ font-normal: 400
+ └──────────┘ └──────────┘ 主要内容
+ │ │
+ ┌──────────┐ ┌──────────┐
+ │ Caption │ │ Small │ ← text-sm: 16px
+ │ 说明文字 │ │ 辅助文字 │ font-normal: 400
+ └──────────┘ └──────────┘ 次要信息
+ │ │
+ ┌──────────┐ ┌──────────┐
+ │ Label │ │ Meta │ ← text-xs: 14px
+ │ 标签 │ │ 元信息 │ font-medium: 500
+ └──────────┘ └──────────┘ 最小文字
+
+行高配置:
+━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
+标题类 (h1-h3): line-height: 1.1-1.2 ← 紧凑,强调力度
+正文类 (p): line-height: 1.6-1.8 ← 宽松,易读性强
+说明类 (small): line-height: 1.4 ← 适中
+━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
+
+字间距配置:
+━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
+超大标题: letter-spacing: -0.02em ← 视觉紧凑
+标签/按钮: letter-spacing: 0.1em ← 增强辨识度
+正文: letter-spacing: 0 ← 标准间距
+━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
+```
+
+---
+
+## 七、实用布局组合示例
+
+### 1. 时间线布局
+```
+┌────────────────────────────────────────────────────────────┐
+│ 时间线布局 │
+├────────────────────────────────────────────────────────────┤
+│ ●───────────────────────────────────────────────────────┐ │
+│ ┃ ┌──────────────────┐ ┌──────────────────┐ │ │
+│ ┃ │ 时间线图片 │ │ 时间线内容 │ │ │
+│ ┃ │ (300px fixed) │ │ (flex: 1) │ │ │
+│ ┃ │ aspect: 4/3 │ │ │ │ │
+│ ┃ │ │ │
标题 │ │ │
+│ ┃ └──────────────────┘ │
描述内容... │ │ │
+│ ┃ └──────────────────┘ │ │
+│ ●───────────────────────────────────────────────────────┘ │
+│ ┃ │
+│ ●───────────────────────────────────────────────────────┐ │
+│ ┃ ┌──────────────────┐ ┌──────────────────┐ │ │
+│ ┃ │ 时间线图片 │ │ 时间线内容 │ │ │
+│ ┃ └──────────────────┘ └──────────────────┘ │ │
+│ ●───────────────────────────────────────────────────────┘ │
+│ │
+└────────────────────────────────────────────────────────────┘
+ ← 3px渐变线条
+
+CSS 关键点:
+.timeline-layout::before {
+ position: absolute;
+ left: 0;
+ width: 3px;
+ background: linear-gradient(
+ to bottom,
+ var(--primary-green),
+ var(--accent-gold)
+ );
+}
+
+.timeline-dot {
+ position: absolute;
+ left: calc(-1 * var(--spacing-2xl) - 8px);
+ width: 20px;
+ height: 20px;
+ border-radius: 50%;
+}
+```
+
+### 2. Featured Grid(高亮第一项)
+```
+┌─────────────────────────────────────────────────────────┐
+│ Featured Grid 布局 │
+├─────────────────────────────────────────────────────────┤
+│ ┌─────────────────┐ ┌─────────┐ ┌─────────┐ │
+│ │ │ │ │ │ │ │
+│ │ │ │ Item2 │ │ Item3 │ │
+│ │ Featured │ │ │ │ │ │
+│ │ Item 1 │ │ 3:2 │ │ 3:2 │ │
+│ │ (grid-row: │ └─────────┘ └─────────┘ │
+│ │ 1/3) │ │
+│ │ 3/4 比例 │ ┌─────────┐ ┌─────────┐ │
+│ │ │ │ │ │ │ │
+│ │ │ │ Item4 │ │ Item5 │ │
+│ │ │ │ │ │ │ │
+│ └─────────────────┘ └─────────┘ └─────────┘ │
+│ ← span 2 rows │
+└─────────────────────────────────────────────────────────┘
+
+CSS 代码:
+.featured-grid {
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+}
+
+.featured-item:first-child {
+ grid-column: 1 / 2; /* 占第1列 */
+ grid-row: 1 / 3; /* 跨2行 */
+}
+
+.featured-item:first-child .featured-image {
+ aspect-ratio: 3/4; /* 竖向比例 */
+}
+```
+
+---
+
+## 八、Hero区域布局模式 ⭐
+
+### 1. 标准Hero布局
+```
+┌────────────────────────────────────────────────────────────────┐
+│ Hero Section │
+│ (min-height: 60vh) │
+│ │
+│ ┌──────────────────────┐ │
+│ │ 🔬 化工订单班 │ ← Badge徽章 │
+│ └──────────────────────┘ │
+│ │
+│ ┌──────────────────────────────────────┐ │
+│ │ 半导体AI综合检测项目 │ ← 主标题 │
+│ │ (text-5xl, font-bold) │ │
+│ └──────────────────────────────────────┘ │
+│ │
+│ ┌──────────────────────────────────────┐ │
+│ │ 300mm硅晶圆 + SiO₂薄膜智能质检 │ ← 副标题 │
+│ │ (text-2xl, font-normal) │ │
+│ └──────────────────────────────────────┘ │
+│ │
+│ ┌─────────────────────┐ │
+│ │ 🤖 AI驱动全流程 │ ← 描述列表 │
+│ │ 🔬 4大Agent协同 │ │
+│ │ ✅ 95%合格率 │ │
+│ └─────────────────────┘ │
+│ │
+└────────────────────────────────────────────────────────────────┘
+
+CSS 代码:
+.hero {
+ min-height: 60vh;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ text-align: center;
+ background: linear-gradient(135deg, var(--primary), var(--secondary));
+ position: relative;
+ overflow: hidden;
+}
+
+.hero-content {
+ max-width: 800px;
+ padding: var(--spacing-3xl) var(--spacing-xl);
+ z-index: 1;
+}
+
+.hero-badge {
+ display: inline-block;
+ padding: var(--spacing-xs) var(--spacing-md);
+ background: rgba(255, 255, 255, 0.2);
+ border-radius: var(--radius-full);
+ backdrop-filter: blur(10px);
+ margin-bottom: var(--spacing-lg);
+}
+
+.hero-title {
+ font-size: var(--text-5xl);
+ font-weight: var(--font-bold);
+ line-height: 1.1;
+ margin-bottom: var(--spacing-md);
+}
+
+.hero-subtitle {
+ font-size: var(--text-2xl);
+ opacity: 0.9;
+ margin-bottom: var(--spacing-xl);
+}
+
+.hero-description {
+ font-size: var(--text-lg);
+ line-height: 1.8;
+ opacity: 0.8;
+}
+
+关键点:
+✅ 徽章采用玻璃态效果
+✅ 标题层次清晰(5xl → 2xl → lg)
+✅ 背景使用渐变色
+✅ 居中对齐,最大宽度限制
+```
+
+### 2. Hero浮动卡片变体(数据展示型)
+```
+┌────────────────────────────────────────────────────────────────┐
+│ Hero Section │
+│ │
+│ ┌────────────────────────┐ │
+│ │ 项目标题区域 │ │
+│ └────────────────────────┘ │
+│ │
+│ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
+│ │ ┌────────┐ │ │ ┌────────┐ │ │ ┌────────┐ │ │ ┌────────┐ │ │
+│ │ │ 3600片 │ │ │ │ 99.7% │ │ │ │±0.02mm │ │ │ │ 300ms │ │ │
+│ │ │ /小时 │ │ │ │ 检出率 │ │ │ │ 精度 │ │ │ │ 时间 │ │ │
+│ │ └────────┘ │ │ └────────┘ │ │ └────────┘ │ │ └────────┘ │ │
+│ │ Icon图标 │ │ Icon图标 │ │ Icon图标 │ │ Icon图标 │ │
+│ └────────────┘ └────────────┘ └────────────┘ └────────────┘ │
+│ ← Flexbox并排,nowrap强制不换行 │
+│ │
+└────────────────────────────────────────────────────────────────┘
+
+CSS 代码:
+.hero-floating-cards {
+ display: flex;
+ gap: var(--spacing-md);
+ justify-content: center;
+ flex-wrap: nowrap; /* 关键:强制并排 */
+ margin-top: var(--spacing-2xl);
+}
+
+.hero-card {
+ min-width: 120px;
+ padding: var(--spacing-md) var(--spacing-lg);
+ background: rgba(255, 255, 255, 0.15);
+ backdrop-filter: blur(15px);
+ border: 1px solid rgba(255, 255, 255, 0.2);
+ border-radius: var(--radius-lg);
+ text-align: center;
+ transition: transform 0.3s ease;
+}
+
+.hero-card:hover {
+ transform: translateY(-5px);
+}
+
+.hero-card-value {
+ font-size: var(--text-3xl);
+ font-weight: var(--font-bold);
+ margin-bottom: var(--spacing-xs);
+}
+
+.hero-card-label {
+ font-size: var(--text-sm);
+ opacity: 0.8;
+}
+```
+
+---
+
+## 九、导航栏布局模式 ⭐
+
+### 1. 水平滚动导航(订单班标准)
+```
+┌────────────────────────────────────────────────────────────────┐
+│ 导航栏 (position: sticky) │
+├────────────────────────────────────────────────────────────────┤
+│ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ >>> │
+│ │ 📄项目 │ │ 🎯判定 │ │ 🔬检测 │ │ 📊结果 │ │ 💡总结 │ │
+│ │ 概述 │ │ 标准 │ │ 流程 │ │ 分析 │ │ 建议 │ │
+│ └────────┘ └────────┘ └────────┘ └────────┘ └────────┘ │
+│ │
+│ ← overflow-x: auto 水平滚动 │
+│ ← flex-wrap: nowrap 强制单行 │
+└────────────────────────────────────────────────────────────────┘
+
+移动端滚动提示:
+┌────────────────────────────────────────────────────────────────┐
+│ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ▶▶▶ │
+│ │ 概述 │ │ 标准 │ │ 流程 │ │ 结果 │ │
+│ └──────┘ └──────┘ └──────┘ └──────┘ │
+│ ← 左右滑动查看更多 │
+└────────────────────────────────────────────────────────────────┘
+
+CSS 代码:
+.nav {
+ position: sticky;
+ top: 0;
+ z-index: 100;
+ background: var(--bg-semi-dark);
+ backdrop-filter: blur(20px);
+ border-bottom: 1px solid var(--border);
+ overflow-x: auto;
+ overflow-y: hidden;
+ -webkit-overflow-scrolling: touch; /* iOS平滑滚动 */
+}
+
+.nav-container {
+ display: flex;
+ gap: var(--spacing-sm);
+ padding: var(--spacing-md) var(--spacing-lg);
+ flex-wrap: nowrap; /* 强制单行 */
+ min-width: min-content;
+}
+
+.nav-item {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: var(--spacing-xs);
+ padding: var(--spacing-sm) var(--spacing-md);
+ border-radius: var(--radius-md);
+ white-space: nowrap; /* 防止文字换行 */
+ cursor: pointer;
+ transition: all 0.3s ease;
+}
+
+.nav-item.active {
+ background: var(--primary);
+ color: white;
+}
+
+.nav-item:hover {
+ background: var(--bg-hover);
+}
+
+/* 隐藏滚动条但保留功能 */
+.nav::-webkit-scrollbar {
+ display: none;
+}
+
+.nav {
+ -ms-overflow-style: none;
+ scrollbar-width: none;
+}
+
+关键点:
+✅ sticky定位,滚动时固定顶部
+✅ overflow-x: auto 支持水平滚动
+✅ flex-wrap: nowrap 强制单行
+✅ backdrop-filter 玻璃态效果
+✅ 隐藏滚动条保持美观
+```
+
+### 2. 导航项结构详解
+```
+单个导航项内部结构:
+┌──────────────────┐
+│ .nav-item │
+│ ┌────────────┐ │
+│ │ Icon图标 │ │ ←
+│ └────────────┘ │
+│ ┌────────────┐ │
+│ │ 文字标签 │ │ ←
+│ └────────────┘ │
+└──────────────────┘
+ flex-direction: column
+ align-items: center
+
+激活状态:
+┌──────────────────┐
+│ .nav-item.active │ ← 背景色变化
+│ ┌────────────┐ │
+│ │ 🔵 Icon │ │ ← 图标高亮
+│ └────────────┘ │
+│ ┌────────────┐ │
+│ │ 项目概述 │ │ ← 文字加粗
+│ └────────────┘ │
+└──────────────────┘
+ background: var(--primary)
+ color: white
+ font-weight: 600
+```
+
+---
+
+## 十、Agent头像区布局 ⭐
+
+### 1. Section Header布局(Agent信息)
+```
+┌────────────────────────────────────────────────────────────────┐
+│ Section Header │
+├────────────────────────────────────────────────────────────────┤
+│ ┌─────────┐ ┌────────────────────────────────────────┐ │
+│ │ │ │ .agent-info │ │
+│ │ Agent │ │ ┌──────────────────────────────────┐ │ │
+│ │ 头像 │ │ │ 👤 环境咨询师 │ │ │
+│ │ (80px) │ │ │ (.agent-name) │ │ │
+│ │ │ │ └──────────────────────────────────┘ │ │
+│ │ 圆形 │ │ │ │
+│ └─────────┘ │ ┌──────────────────────────────────┐ │ │
+│ │ │ 项目背景与需求分析 │ │ │
+│ │ │ (.section-title, text-4xl) │ │ │
+│ │ └──────────────────────────────────┘ │ │
+│ └────────────────────────────────────────┘ │
+│ ← Flexbox横向排列,头像在左,信息在右 │
+└────────────────────────────────────────────────────────────────┘
+
+CSS 代码:
+.section-header {
+ display: flex;
+ align-items: center;
+ gap: var(--spacing-xl);
+ margin-bottom: var(--spacing-2xl);
+ padding-bottom: var(--spacing-xl);
+ border-bottom: 2px solid var(--border);
+}
+
+.agent-avatar {
+ width: 80px;
+ height: 80px;
+ border-radius: 50%;
+ object-fit: cover;
+ border: 3px solid var(--primary);
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
+ flex-shrink: 0; /* 防止被压缩 */
+}
+
+.agent-info {
+ flex: 1;
+}
+
+.agent-name {
+ display: flex;
+ align-items: center;
+ gap: var(--spacing-sm);
+ font-size: var(--text-lg);
+ font-weight: var(--font-semibold);
+ color: var(--primary);
+ margin-bottom: var(--spacing-xs);
+}
+
+.section-title {
+ font-size: var(--text-4xl);
+ font-weight: var(--font-bold);
+ line-height: 1.2;
+ margin: 0;
+}
+
+关键点:
+✅ Flexbox横向布局
+✅ 头像圆形,带边框和阴影
+✅ gap间距清晰分隔
+✅ Agent名称带图标
+✅ 底部边框分隔区域
+```
+
+### 2. 响应式Agent Header
+```
+桌面端(>768px):
+┌──────────────────────────────────────────────┐
+│ ┌─────┐ ┌──────────────────────────────┐ │
+│ │头像 │ │ 👤 环境咨询师 │ │
+│ │80px │ │ 项目背景与需求分析 │ │
+│ └─────┘ └──────────────────────────────┘ │
+└──────────────────────────────────────────────┘
+ flex-direction: row
+
+移动端(≤768px):
+┌──────────────────────────────────────────────┐
+│ ┌─────────┐ │
+│ │ 头像 │ │
+│ │ 60px │ │
+│ └─────────┘ │
+│ ┌─────────────────┐ │
+│ │ 👤 环境咨询师 │ │
+│ │ 项目背景 │ │
+│ └─────────────────┘ │
+└──────────────────────────────────────────────┘
+ flex-direction: column
+ align-items: center
+ text-align: center
+
+@media (max-width: 768px) {
+ .section-header {
+ flex-direction: column;
+ align-items: center;
+ text-align: center;
+ }
+
+ .agent-avatar {
+ width: 60px;
+ height: 60px;
+ }
+
+ .section-title {
+ font-size: var(--text-3xl);
+ }
+}
+```
+
+---
+
+## 十一、Stats统计数据布局 ⭐
+
+### 1. 标准Stats布局(4项并排)
+```
+┌────────────────────────────────────────────────────────────────┐
+│ 统计数据区 (.stats) │
+├────────────────────────────────────────────────────────────────┤
+│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
+│ │ │ │ │ │ │ │ │ │
+│ │ 项目总预算 │ │ 监测频次 │ │ 监测指标 │ │ 样品总数 │ │
+│ │ (.stat- │ │ (.stat- │ │ (.stat- │ │ (.stat- │ │
+│ │ label) │ │ label) │ │ label) │ │ label) │ │
+│ │ │ │ │ │ │ │ │ │
+│ │ 45万元 │ │ 12次/年 │ │ 26项 │ │ 144个/年 │ │
+│ │ (.stat- │ │ (.stat- │ │ (.stat- │ │ (.stat- │ │
+│ │ value) │ │ value) │ │ value) │ │ value) │ │
+│ │ │ │ │ │ │ │ │ │
+│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
+│ │
+│ ← grid-template-columns: repeat(4, 1fr) │
+└────────────────────────────────────────────────────────────────┘
+
+CSS 代码:
+.stats {
+ display: grid;
+ grid-template-columns: repeat(4, 1fr);
+ gap: var(--spacing-xl);
+ margin-top: var(--spacing-2xl);
+ padding: var(--spacing-xl);
+ background: var(--bg-semi-dark);
+ border-radius: var(--radius-lg);
+}
+
+.stat-item {
+ text-align: center;
+ padding: var(--spacing-lg);
+ background: var(--bg-card);
+ border-radius: var(--radius-md);
+ border: 1px solid var(--border);
+ transition: all 0.3s ease;
+}
+
+.stat-item:hover {
+ transform: translateY(-5px);
+ box-shadow: var(--shadow-lg);
+}
+
+.stat-label {
+ font-size: var(--text-sm);
+ color: var(--text-gray);
+ margin-bottom: var(--spacing-sm);
+ text-transform: uppercase;
+ letter-spacing: 0.05em;
+}
+
+.stat-value {
+ font-size: var(--text-3xl);
+ font-weight: var(--font-bold);
+ color: var(--primary);
+ line-height: 1.2;
+}
+
+关键点:
+✅ Grid 4列等宽布局
+✅ 标签小字,数值大字
+✅ 悬停上移效果
+✅ 卡片样式分隔
+```
+
+### 2. 响应式Stats布局
+```
+桌面端(>1024px):
+┌─────┬─────┬─────┬─────┐
+│ 1 │ 2 │ 3 │ 4 │
+└─────┴─────┴─────┴─────┘
+grid-template-columns: repeat(4, 1fr)
+
+平板端(768px-1024px):
+┌──────────┬──────────┐
+│ 1 │ 2 │
+├──────────┼──────────┤
+│ 3 │ 4 │
+└──────────┴──────────┘
+grid-template-columns: repeat(2, 1fr)
+
+移动端(<768px):
+┌──────────────┐
+│ 1 │
+├──────────────┤
+│ 2 │
+├──────────────┤
+│ 3 │
+├──────────────┤
+│ 4 │
+└──────────────┘
+grid-template-columns: 1fr
+
+CSS 代码:
+@media (max-width: 1024px) {
+ .stats {
+ grid-template-columns: repeat(2, 1fr);
+ }
+}
+
+@media (max-width: 768px) {
+ .stats {
+ grid-template-columns: 1fr;
+ }
+
+ .stat-value {
+ font-size: var(--text-2xl);
+ }
+}
+```
+
+### 3. 动画数字Stats(带计数效果)
+```
+数字滚动动画示意:
+0 → 15 → 30 → 45 → 45万元
+┗━━━━━━━━━━━━━━━━━━━━━━━┛
+ 1.5秒动画
+
+JavaScript实现:
+0
+
+const statValues = document.querySelectorAll('.stat-value');
+statValues.forEach(stat => {
+ const target = parseInt(stat.dataset.target);
+ let current = 0;
+ const increment = target / 100;
+
+ const timer = setInterval(() => {
+ current += increment;
+ if (current >= target) {
+ stat.textContent = target;
+ clearInterval(timer);
+ } else {
+ stat.textContent = Math.floor(current);
+ }
+ }, 15);
+});
+```
+
+---
+
+## 十二、Footer总结区布局 ⭐
+
+### 1. 三栏总结布局(项目成果)
+```
+┌────────────────────────────────────────────────────────────────┐
+│ Footer总结区 │
+│ (background: var(--bg-semi-dark)) │
+├────────────────────────────────────────────────────────────────┤
+│ 🏆 项目成果总结 │
+│ (.section-title, text-center) │
+│ │
+├───────────────────┬───────────────────┬───────────────────────┤
+│ │ │ │
+│ 📋 交付物清单 │ 🎯 项目目标 │ ⚙️ 技术保障 │
+│ (.card) │ (.card) │ (.card) │
+│ │ │ │
+│ ✅ 采样方案报告 │ ✅ 26项指标 │ ✅ ICP-MS设备 │
+│ ✅ 季度监测报告 │ ✅ Ⅲ类水质 │ ✅ GC-MS分析仪 │
+│ ✅ 年度总结报告 │ ✅ 12次/年 │ ✅ BOD培养箱 │
+│ ✅ 监测数据库 │ ✅ 数据准确度 │ ✅ 自动采样器 │
+│ ✅ 现场照片资料 │ ✅ 质控样本 │ ✅ GPS定位系统 │
+│ ✅ 质控记录文件 │ ✅ 报告及时 │ ✅ 数据传输系统 │
+│ ✅ 趋势分析图表 │ ✅ 污染预警 │ ✅ LIMS实验室系统 │
+│ ✅ 改善建议方案 │ ✅ CMA认证 │ ✅ 三级质控体系 │
+│ │ │ │
+└───────────────────┴───────────────────┴───────────────────────┘
+│ │
+│ © 2024 环保订单班 | AI驱动的环境监测方案 │
+│ (.text-center, color: gray) │
+└────────────────────────────────────────────────────────────────┘
+
+CSS 代码:
+.footer-summary {
+ background: var(--bg-semi-dark);
+ padding: var(--spacing-3xl) 0;
+ margin-top: var(--spacing-3xl);
+}
+
+.footer-summary .section-title {
+ text-align: center;
+ margin-bottom: var(--spacing-2xl);
+}
+
+.footer-summary .grid-3 {
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ gap: var(--spacing-2xl);
+}
+
+.footer-summary .card {
+ background: var(--bg-card);
+ padding: var(--spacing-xl);
+ border-radius: var(--radius-lg);
+}
+
+.footer-summary .card-header {
+ order: 1;
+ margin-bottom: var(--spacing-md);
+}
+
+.footer-summary .card-title {
+ font-size: var(--text-xl);
+ font-weight: var(--font-bold);
+}
+
+.footer-summary .feature-list {
+ list-style: none;
+ padding: 0;
+}
+
+.footer-summary .feature-list li {
+ display: flex;
+ align-items: center;
+ gap: var(--spacing-sm);
+ padding: var(--spacing-xs) 0;
+ font-size: var(--text-sm);
+}
+
+.footer-summary .text-center {
+ text-align: center;
+ margin-top: var(--spacing-2xl);
+ color: var(--text-gray);
+ font-size: var(--text-sm);
+}
+
+关键点:
+✅ Grid 3列布局
+✅ 深色背景区分
+✅ 卡片样式分隔
+✅ Icon + 文字列表
+✅ 版权信息居中
+```
+
+### 2. 响应式Footer布局
+```
+桌面端(>1024px):
+┌──────────┬──────────┬──────────┐
+│ 卡片1 │ 卡片2 │ 卡片3 │
+└──────────┴──────────┴──────────┘
+grid-template-columns: repeat(3, 1fr)
+
+平板端(768px-1024px):
+┌──────────┬──────────┐
+│ 卡片1 │ 卡片2 │
+└──────────┴──────────┘
+┌──────────────────────┐
+│ 卡片3 │
+└──────────────────────┘
+grid-template-columns: repeat(2, 1fr)
+
+移动端(<768px):
+┌──────────────────────┐
+│ 卡片1 │
+├──────────────────────┤
+│ 卡片2 │
+├──────────────────────┤
+│ 卡片3 │
+└──────────────────────┘
+grid-template-columns: 1fr
+
+@media (max-width: 1024px) {
+ .footer-summary .grid-3 {
+ grid-template-columns: repeat(2, 1fr);
+ }
+}
+
+@media (max-width: 768px) {
+ .footer-summary .grid-3 {
+ grid-template-columns: 1fr;
+ }
+}
+```
+
+---
+
+## 十三、关键CSS属性速查表
+
+```
+╔═══════════════════════════════════════════════════════════════╗
+║ 布局相关属性 ║
+╠═══════════════════════════════════════════════════════════════╣
+║ display: grid │ 启用Grid布局 ║
+║ display: flex │ 启用Flexbox布局 ║
+║ grid-template-columns │ 定义Grid列数和宽度 ║
+║ gap │ Grid/Flex项目间距 ║
+║ flex-direction │ Flex主轴方向 ║
+║ flex-wrap │ Flex换行控制 ║
+║ order │ Flex/Grid项目顺序 ║
+║ align-items │ 交叉轴对齐 ║
+║ justify-content │ 主轴对齐 ║
+╠═══════════════════════════════════════════════════════════════╣
+║ 尺寸相关属性 ║
+╠═══════════════════════════════════════════════════════════════╣
+║ aspect-ratio │ 宽高比例 ║
+║ min-width / max-width │ 最小/最大宽度 ║
+║ flex: 1 │ 占据剩余空间 ║
+║ flex: 0 0 300px │ 固定尺寸 ║
+╠═══════════════════════════════════════════════════════════════╣
+║ 定位相关属性 ║
+╠═══════════════════════════════════════════════════════════════╣
+║ position: relative │ 相对定位(定位上下文) ║
+║ position: absolute │ 绝对定位(脱离文档流) ║
+║ position: sticky │ 粘性定位(导航栏常用) ║
+║ inset: 0 │ top/right/bottom/left全为0 ║
+║ z-index │ 层级控制 ║
+╠═══════════════════════════════════════════════════════════════╣
+║ 视觉效果属性 ║
+╠═══════════════════════════════════════════════════════════════╣
+║ backdrop-filter: blur() │ 背景模糊(玻璃态) ║
+║ background: linear-gradient│ 渐变背景 ║
+║ box-shadow │ 阴影效果 ║
+║ border-radius │ 圆角 ║
+║ object-fit: cover │ 图片裁剪适应 ║
+║ overflow-x: auto │ 水平滚动 ║
+║ white-space: nowrap │ 文字不换行 ║
+╚═══════════════════════════════════════════════════════════════╝
+```
+
+---
+
+## 十四、常见问题解决方案
+
+### 问题1: Grid布局出现3+1排列
+```
+❌ 问题:
+┌─────┬─────┬─────┐
+│ 1 │ 2 │ 3 │
+└─────┴─────┴─────┘
+┌─────┐
+│ 4 │ ← 丑陋的换行
+└─────┘
+
+✅ 解决:确保列数匹配项目数
+grid-template-columns: repeat(4, 1fr); /* 4项目 = 4列 */
+
+或者:使用auto-fit/auto-fill
+grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
+```
+
+### 问题2: 图片被压缩变形
+```
+❌ 问题:img设置了width和height,导致变形
+
+✅ 解决方案:
+.image-container {
+ aspect-ratio: 16/9;
+ overflow: hidden;
+}
+
+.image-container img {
+ width: 100%;
+ height: 100%;
+ object-fit: cover; ← 关键:裁剪而不是拉伸
+}
+```
+
+### 问题3: Flexbox项目换行不理想
+```
+❌ 问题:flex-wrap: wrap导致意外换行
+
+✅ 解决方案:
+/* 强制不换行 */
+.hero-floating-cards {
+ flex-wrap: nowrap;
+}
+
+/* 或使用Grid替代 */
+.hero-floating-cards {
+ display: grid;
+ grid-template-columns: repeat(4, 1fr);
+}
+```
+
+### 问题4: 背景图片看不清文字
+```
+❌ 问题:白色文字在浅色背景上不可读
+
+✅ 解决方案:添加渐变遮罩
+
+```
+
+### 问题5: 导航栏滚动不平滑
+```
+❌ 问题:iOS设备上滚动卡顿
+
+✅ 解决方案:
+.nav {
+ overflow-x: auto;
+ -webkit-overflow-scrolling: touch; ← iOS平滑滚动
+}
+```
+
+### 问题6: Stats数字不对齐
+```
+❌ 问题:数字长度不一致导致布局混乱
+
+✅ 解决方案:
+.stat-value {
+ font-variant-numeric: tabular-nums; ← 等宽数字
+ min-height: 3rem; ← 固定最小高度
+}
+```
+
+---
+
+## 十五、最佳实践总结
+
+```
+┌──────────────────────────────────────────────────────────┐
+│ 布局设计原则 │
+├──────────────────────────────────────────────────────────┤
+│ │
+│ 1. 移动优先设计(Mobile First) │
+│ → 先设计小屏幕布局,再扩展到大屏幕 │
+│ │
+│ 2. 语义化HTML结构 │
+│ → section, article, header, nav 而非通用div │
+│ │
+│ 3. 使用CSS变量统一设计 │
+│ → --spacing-*, --text-*, --radius-* │
+│ │
+│ 4. 图片优先展示 │
+│ → 使用flexbox order将图片放在最前 │
+│ │
+│ 5. 保持一致的间距比例 │
+│ → 8px基准,倍数递增(8, 12, 20, 32, 40...) │
+│ │
+│ 6. 避免固定高度 │
+│ → 使用aspect-ratio而非固定height │
+│ │
+│ 7. Grid列数要合理 │
+│ → 4项目用4列,避免3+1布局 │
+│ │
+│ 8. 背景图要加遮罩 │
+│ → 使用linear-gradient保证文字可读性 │
+│ │
+│ 9. 卡片内容要紧凑 │
+│ → 图片占满宽度,padding为0 │
+│ │
+│ 10. 响应式断点统一 │
+│ → 768px (移动/平板), 1024px (平板/桌面) │
+│ │
+│ 11. 导航栏使用sticky定位 │
+│ → position: sticky; top: 0; 滚动时固定 │
+│ │
+│ 12. Agent头像突出显示 │
+│ → 圆形头像 + 边框 + 阴影 │
+│ │
+│ 13. Stats数据醒目展示 │
+│ → 大数值 + 小标签 + 卡片分隔 │
+│ │
+│ 14. Footer总结清晰明了 │
+│ → 三栏布局 + Icon列表 + 深色背景 │
+│ │
+│ 15. 玻璃态效果增强质感 │
+│ → backdrop-filter: blur() + 半透明 │
+│ │
+└──────────────────────────────────────────────────────────┘
+```
+
+---
+
+## 快速参考命令
+
+```bash
+# Grid布局速查
+display: grid;
+grid-template-columns: repeat(2, 1fr); # 2列等宽
+grid-template-columns: repeat(3, 1fr); # 3列等宽
+grid-template-columns: repeat(4, 1fr); # 4列等宽
+gap: var(--spacing-2xl); # 48px间距
+
+# Flexbox布局速查
+display: flex;
+flex-direction: column; # 垂直排列
+flex-wrap: nowrap; # 不换行
+order: 1 / 2 / 3; # 排列顺序
+flex: 1; # 占据剩余空间
+
+# 图片比例速查
+aspect-ratio: 16/9; # 宽屏
+aspect-ratio: 3/2; # 标准
+aspect-ratio: 4/3; # 传统
+aspect-ratio: 1/1; # 正方形
+
+# 玻璃态效果
+background: rgba(255, 255, 255, 0.9);
+backdrop-filter: blur(15px);
+border: 2px solid rgba(76, 175, 80, 0.2);
+
+# 图层叠加
+position: relative; # 容器
+position: absolute; inset: 0; z-index: 0; # 遮罩层
+position: relative; z-index: 1; # 内容层
+
+# Sticky导航
+position: sticky;
+top: 0;
+z-index: 100;
+backdrop-filter: blur(20px);
+
+# 圆形头像
+width: 80px;
+height: 80px;
+border-radius: 50%;
+border: 3px solid var(--primary);
+box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
+
+# Stats布局
+display: grid;
+grid-template-columns: repeat(4, 1fr);
+gap: var(--spacing-xl);
+text-align: center;
+
+# Footer布局
+background: var(--bg-semi-dark);
+padding: var(--spacing-3xl) 0;
+grid-template-columns: repeat(3, 1fr);
+```
+
+---
+
+## 订单班页面标准结构
+
+```
+完整页面结构:
+┌────────────────────────────────────────────────────────────┐
+│ 1. Theme Toggle Button (主题切换) │
+├────────────────────────────────────────────────────────────┤
+│ 2. Hero Section (英雄区) │
+│ - Badge徽章 │
+│ - 主标题 + 副标题 │
+│ - 描述文字 │
+│ - 浮动数据卡片(可选) │
+├────────────────────────────────────────────────────────────┤
+│ 3. Navigation Bar (导航栏 - sticky) │
+│ - 水平滚动 │
+│ - Icon + 文字 │
+├────────────────────────────────────────────────────────────┤
+│ 4. Section 1 (Agent 1) │
+│ - Section Header (Agent头像 + 信息) │
+│ - Expert Intro (专家介绍) │
+│ - Content (Grid布局内容) │
+│ - Stats (统计数据) │
+├────────────────────────────────────────────────────────────┤
+│ 5. Section 2 (Agent 2) │
+│ - 同上结构 │
+├────────────────────────────────────────────────────────────┤
+│ 6. Section 3 (Agent 3) │
+│ - 同上结构 │
+├────────────────────────────────────────────────────────────┤
+│ 7. Section 4 (Agent 4) │
+│ - 同上结构 │
+├────────────────────────────────────────────────────────────┤
+│ 8. Footer Summary (项目成果总结) │
+│ - 标题居中 │
+│ - Grid-3布局 │
+│ - 深色背景 │
+│ - 版权信息 │
+└────────────────────────────────────────────────────────────┘
+
+关键CSS变量:
+--spacing-xs: 8px
+--spacing-sm: 12px
+--spacing-md: 20px
+--spacing-lg: 32px
+--spacing-xl: 40px
+--spacing-2xl: 48px
+--spacing-3xl: 64px
+
+--text-xs: 14px
+--text-sm: 16px
+--text-lg: 22px
+--text-xl: 28px
+--text-2xl: 32px
+--text-3xl: 40px
+--text-4xl: 48px
+--text-5xl: 64px
+
+--radius-sm: 4px
+--radius-md: 8px
+--radius-lg: 12px
+--radius-xl: 16px
+--radius-2xl: 24px
+--radius-full: 9999px
+```
+
+---
+
+**文档版本**: v2.0 (完整增强版)
+**创建日期**: 2025年
+**最后更新**: 2025年10月
+**适用项目**: web_frontend/web_result/order-classes/
+**相关文档**: food-compact-design-spec (Serena记忆)
+
+**新增内容总结**:
+- ✅ Hero区域布局模式(徽章、标题、浮动卡片)
+- ✅ 导航栏布局模式(水平滚动、sticky定位)
+- ✅ Agent头像区布局(圆形头像、信息区)
+- ✅ Stats统计数据布局(4列Grid、响应式)
+- ✅ Footer总结区布局(三栏、深色背景)
+- ✅ 订单班页面标准结构(完整模板)
+- ✅ 更多实用CSS属性和技巧
\ No newline at end of file
diff --git a/data/订单班文档资料/化工/notion文稿/check_consistency.sh b/data/订单班文档资料/化工/notion文稿/check_consistency.sh
new file mode 100755
index 00000000..77b1bef1
--- /dev/null
+++ b/data/订单班文档资料/化工/notion文稿/check_consistency.sh
@@ -0,0 +1,28 @@
+#!/bin/bash
+
+echo "=== 化工订单班图片名称一致性检查 ==="
+echo ""
+
+# 提取所有图片引用
+echo "提取的图片引用:"
+grep -o '!\[.*\](image/.*\.jpg)' "半导体ai综合检测项目 281d463fce518050869ac4e6fd58a861.md" | while IFS= read -r line; do
+ # 提取alt text
+ alt=$(echo "$line" | sed 's/!\[\([^]]*\)\].*/\1/')
+ # 提取文件名(不含路径和扩展名)
+ filename=$(echo "$line" | sed 's/.*image\/\([^)]*\)\)/\1/' | sed 's/.jpg$//')
+
+ echo " Alt: [$alt]"
+ echo " File: [$filename]"
+
+ if [ "$alt" = "$filename" ]; then
+ echo " ✅ 一致"
+ else
+ echo " ❌ 不一致"
+ fi
+ echo ""
+done
+
+echo "=== 实际文件列表 ==="
+ls -1 image/*.jpg | while IFS= read -r file; do
+ basename "$file"
+done
diff --git a/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282049062736YSJF81583XYYNO.jpg b/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282049062736YSJF81583XYYNO.jpg
new file mode 100755
index 00000000..69675217
Binary files /dev/null and b/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282049062736YSJF81583XYYNO.jpg differ
diff --git a/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282049244326YSJF1MPE8J8BZJ.jpg b/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282049244326YSJF1MPE8J8BZJ.jpg
new file mode 100755
index 00000000..6f7d3c28
Binary files /dev/null and b/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282049244326YSJF1MPE8J8BZJ.jpg differ
diff --git a/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282049350886YSJFZL99Y5I6R9.jpg b/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282049350886YSJFZL99Y5I6R9.jpg
new file mode 100755
index 00000000..d8d81a70
Binary files /dev/null and b/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282049350886YSJFZL99Y5I6R9.jpg differ
diff --git a/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282049408326YSJFK2DKOI3I98.jpg b/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282049408326YSJFK2DKOI3I98.jpg
new file mode 100755
index 00000000..87f26127
Binary files /dev/null and b/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282049408326YSJFK2DKOI3I98.jpg differ
diff --git a/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282049463486YSJFDMPHGPCTXJ.jpg b/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282049463486YSJFDMPHGPCTXJ.jpg
new file mode 100755
index 00000000..8506b1fd
Binary files /dev/null and b/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282049463486YSJFDMPHGPCTXJ.jpg differ
diff --git a/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282050040706YSJFJ0SUNAJ2AV (1).jpg b/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282050040706YSJFJ0SUNAJ2AV (1).jpg
new file mode 100755
index 00000000..87b42a45
Binary files /dev/null and b/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282050040706YSJFJ0SUNAJ2AV (1).jpg differ
diff --git a/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282050099516YSJFUTZV8MRO5Y.jpg b/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282050099516YSJFUTZV8MRO5Y.jpg
new file mode 100755
index 00000000..093a5945
Binary files /dev/null and b/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282050099516YSJFUTZV8MRO5Y.jpg differ
diff --git a/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282050164886YSJF24XJD61HTK.jpg b/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282050164886YSJF24XJD61HTK.jpg
new file mode 100755
index 00000000..842a94cf
Binary files /dev/null and b/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282050164886YSJF24XJD61HTK.jpg differ
diff --git a/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282050375856YSJFSETU1WSEKB.jpg b/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282050375856YSJFSETU1WSEKB.jpg
new file mode 100755
index 00000000..d26797d4
Binary files /dev/null and b/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282050375856YSJFSETU1WSEKB.jpg differ
diff --git a/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282051240126YSJF06WPCZNY0N.jpg b/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282051240126YSJF06WPCZNY0N.jpg
new file mode 100755
index 00000000..a92a1c24
Binary files /dev/null and b/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282051240126YSJF06WPCZNY0N.jpg differ
diff --git a/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282051292356YSJFZSRKP9YK3R.jpg b/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282051292356YSJFZSRKP9YK3R.jpg
new file mode 100755
index 00000000..b38c1c0d
Binary files /dev/null and b/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282051292356YSJFZSRKP9YK3R.jpg differ
diff --git a/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282054559316YSJFMABNCRL749.jpg b/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282054559316YSJFMABNCRL749.jpg
new file mode 100755
index 00000000..3717030b
Binary files /dev/null and b/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282054559316YSJFMABNCRL749.jpg differ
diff --git a/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282055019276YSJF0F154WXH8Y.jpg b/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282055019276YSJF0F154WXH8Y.jpg
new file mode 100755
index 00000000..9e7f9816
Binary files /dev/null and b/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282055019276YSJF0F154WXH8Y.jpg differ
diff --git a/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282055137196YSJFSECMZ0PB0J.jpg b/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282055137196YSJFSECMZ0PB0J.jpg
new file mode 100755
index 00000000..bd8657f7
Binary files /dev/null and b/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282055137196YSJFSECMZ0PB0J.jpg differ
diff --git a/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282058159576YSJF97LS5RU9KO.jpg b/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282058159576YSJF97LS5RU9KO.jpg
new file mode 100755
index 00000000..6f9ce348
Binary files /dev/null and b/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282058159576YSJF97LS5RU9KO.jpg differ
diff --git a/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282058501036YSJF0KC10KFD5E (1).jpg b/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282058501036YSJF0KC10KFD5E (1).jpg
new file mode 100755
index 00000000..5046acff
Binary files /dev/null and b/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/202509282058501036YSJF0KC10KFD5E (1).jpg differ
diff --git a/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/7d8332dac6cf3e659c95fe42c3cde899 (1).jpg b/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/7d8332dac6cf3e659c95fe42c3cde899 (1).jpg
new file mode 100755
index 00000000..669b6edc
Binary files /dev/null and b/data/订单班文档资料/视觉设计/notion文稿/image/分镜/线稿图片/7d8332dac6cf3e659c95fe42c3cde899 (1).jpg differ
diff --git a/data/订单班文档资料/视觉设计/notion文稿/image/电影风格参考图.jpg b/data/订单班文档资料/视觉设计/notion文稿/image/电影风格参考图.jpg
old mode 100755
new mode 100644
index d84079d0..976745c4
Binary files a/data/订单班文档资料/视觉设计/notion文稿/image/电影风格参考图.jpg and b/data/订单班文档资料/视觉设计/notion文稿/image/电影风格参考图.jpg differ
diff --git a/data/订单班文档资料/视觉设计/notion文稿/image/配色表.jpg b/data/订单班文档资料/视觉设计/notion文稿/image/配色表.jpg
index 85d75906..6f7295c6 100755
Binary files a/data/订单班文档资料/视觉设计/notion文稿/image/配色表.jpg and b/data/订单班文档资料/视觉设计/notion文稿/image/配色表.jpg differ
diff --git a/web_frontend/exhibition-demo/src/components/ResultModal.tsx b/web_frontend/exhibition-demo/src/components/ResultModal.tsx
index e18a3229..f093e217 100644
--- a/web_frontend/exhibition-demo/src/components/ResultModal.tsx
+++ b/web_frontend/exhibition-demo/src/components/ResultModal.tsx
@@ -9,6 +9,9 @@ interface ResultModalProps {
projectTitle?: string;
projectSubtitle?: string;
orderClassName?: string;
+ // 新增动态数据参数
+ stats?: Array<{ label: string; value: string; icon: React.ReactNode }>;
+ sections?: Array<{ name: string; status: string; pages: number }>;
}
const ResultModal: React.FC = ({
@@ -17,15 +20,18 @@ const ResultModal: React.FC = ({
onViewDetails,
projectTitle = '项目方案',
projectSubtitle = '包含完整的分析、设计、预算、执行计划等内容',
- orderClassName = '通用'
+ orderClassName = '通用',
+ stats: customStats,
+ sections: customSections
}) => {
- const stats = [
+ // 使用传入的数据或默认数据
+ const stats = customStats || [
{ label: '生成时间', value: '3分钟', icon: },
{ label: '文档页数', value: '68页', icon: },
{ label: '预期ROI', value: '30%', icon: },
];
- const sections = [
+ const sections = customSections || [
{ name: '策划案概述', status: 'completed', pages: 8 },
{ name: '展会介绍', status: 'completed', pages: 12 },
{ name: '营销方案', status: 'completed', pages: 15 },
diff --git a/web_frontend/exhibition-demo/src/pages/WorkflowPageV4.tsx b/web_frontend/exhibition-demo/src/pages/WorkflowPageV4.tsx
index 3d5a9427..71d0d8b5 100644
--- a/web_frontend/exhibition-demo/src/pages/WorkflowPageV4.tsx
+++ b/web_frontend/exhibition-demo/src/pages/WorkflowPageV4.tsx
@@ -1,7 +1,7 @@
import { useState, useEffect, useRef, useCallback } from 'react';
import { motion, AnimatePresence } from 'framer-motion';
import { useDemoStore } from '@/store/demoStore';
-import { Play, Pause, RotateCcw, Maximize2, Terminal, FileInput, Eye } from 'lucide-react';
+import { Play, Pause, RotateCcw, Maximize2, Terminal, FileInput, Eye, Calendar, FileText, TrendingUp } from 'lucide-react';
import RequirementModal from '@/components/RequirementModal';
import ResultModal from '@/components/ResultModal';
import { getSimulationData } from '@/data/terminalSimulations';
@@ -886,10 +886,68 @@ const WorkflowPageV4 = () => {
// 可以添加更多订单班的描述
};
+ // 从 completionSequence 中提取统计信息
+ let executionTime = '3分钟';
+ let filesCount = '15个';
+ let dataSize = '287MB';
+
+ if (simulationData?.completionSequence) {
+ const completionSeq = simulationData.completionSequence;
+
+ // 查找执行时间
+ const timeOutput = completionSeq.find(line => line.content?.includes('总执行时间'));
+ if (timeOutput) {
+ const match = timeOutput.content?.match(/总执行时间[:\s]*(.+)/);
+ if (match) executionTime = match[1].trim();
+ }
+
+ // 查找文件数量
+ const filesOutput = completionSeq.find(line => line.content?.includes('生成文件数'));
+ if (filesOutput) {
+ const match = filesOutput.content?.match(/生成文件数[:\s]*(\d+)/);
+ if (match) filesCount = match[1] + '个';
+ }
+
+ // 查找数据量
+ const dataSizeOutput = completionSeq.find(line => line.content?.includes('总数据量'));
+ if (dataSizeOutput) {
+ const match = dataSizeOutput.content?.match(/总数据量[:\s]*([\d.]+\s*\w+)/);
+ if (match) dataSize = match[1].trim();
+ }
+ }
+
+ // 构建动态 stats
+ const stats = [
+ { label: '生成时间', value: executionTime, icon: },
+ { label: '生成文件', value: filesCount, icon: },
+ { label: '数据量', value: dataSize, icon: },
+ ];
+
+ // 从 agentSequence 中提取章节信息
+ let sections: Array<{ name: string; status: string; pages: number }> = [];
+
+ if (simulationData?.agentSequence) {
+ sections = simulationData.agentSequence.map((seq, index) => {
+ // 处理两种数据格式:
+ // 1. 原始格式:seq.agent 是函数
+ // 2. 转换后格式:seq 直接包含 name 等属性
+ const agent = typeof seq.agent === 'function' ? seq.agent() : seq;
+ // 简单的页数估算,实际应该从数据中提取
+ const estimatedPages = 8 + Math.floor(Math.random() * 8);
+ return {
+ name: agent.name.replace('专家', ''),
+ status: 'completed',
+ pages: estimatedPages
+ };
+ });
+ }
+
return {
projectTitle: simulationData?.projectTitle || '项目方案',
projectSubtitle: projectSubtitles[selectedOrderClass || ''] || '包含完整的分析、设计、预算、执行计划等内容',
- orderClassName: simulationData?.orderClassName || '订单班'
+ orderClassName: simulationData?.orderClassName || '订单班',
+ stats,
+ sections
};
};
@@ -898,13 +956,16 @@ const WorkflowPageV4 = () => {
// 不关闭弹窗,让用户可以继续查看
// setShowResultModal(false);
- // 在新标签页中打开,而不是当前页面跳转
- const baseUrl = 'http://localhost:4155'; // 假设 web_result 运行在 4155 端口
+ // 在新标签页中打开详情页面
+ const baseUrl = 'http://localhost:4155';
+
if (selectedOrderClass) {
- window.open(`${baseUrl}/index.html?orderClass=${selectedOrderClass}`, '_blank');
+ // 根据订单班 ID 映射到对应的路径
+ // 这里使用 order-classes/{订单班变量} 的格式
+ window.open(`${baseUrl}/order-classes/${selectedOrderClass}`, '_blank');
} else {
// 默认跳转到文旅
- window.open(`${baseUrl}/index.html?orderClass=tourism`, '_blank');
+ window.open(`${baseUrl}/order-classes/wenlu`, '_blank');
}
};
diff --git a/web_frontend/web_result/app.js b/web_frontend/web_result/app.js
index 90807fea..cd2f5330 100644
--- a/web_frontend/web_result/app.js
+++ b/web_frontend/web_result/app.js
@@ -174,7 +174,7 @@ function generateIndexPage() {
已完成的订单班方案
${completedClasses.map(([key, config]) => `
-
+
${getClassIcon(key)}
${config.name}
${config.description}
diff --git a/web_frontend/web_result/order-classes/chemical/css/styles.css b/web_frontend/web_result/order-classes/chemical/css/styles.css
index 7fd15eb0..b8fb829a 100644
--- a/web_frontend/web_result/order-classes/chemical/css/styles.css
+++ b/web_frontend/web_result/order-classes/chemical/css/styles.css
@@ -959,3 +959,133 @@ body.dark-theme .theme-icon-dark {
body.dark-theme .theme-icon-light {
opacity: 0.5;
}
+
+/* ========== Alternating Layout 图文交错布局 ========== */
+.alternating-layout {
+ display: flex;
+ gap: var(--spacing-2xl);
+ align-items: center;
+ margin-bottom: var(--spacing-3xl);
+}
+
+.alternating-layout:nth-child(even) {
+ flex-direction: row-reverse; /* 偶数项自动反向 */
+}
+
+.alternating-layout .image-container {
+ flex: 0 0 45%; /* 图片占45% */
+ aspect-ratio: 16/9;
+}
+
+.alternating-layout .content {
+ flex: 1; /* 内容占剩余空间 */
+}
+
+/* ========== Featured Item 特色卡片 ========== */
+.featured-item {
+ display: flex;
+ flex-direction: column;
+}
+
+.featured-item .image-container {
+ margin-bottom: var(--spacing-md);
+ aspect-ratio: 16/9;
+}
+
+.featured-item .image-container img {
+ aspect-ratio: 16/9;
+ width: 100%;
+ object-fit: cover;
+}
+
+/* ========== Progress Stats 进度条数据展示 ========== */
+.progress-stats {
+ display: flex;
+ flex-direction: column;
+ gap: var(--spacing-lg);
+ padding: var(--spacing-xl);
+ background: var(--bg-card);
+ border-radius: var(--radius-lg);
+ border: 1px solid var(--border);
+}
+
+.progress-item {
+ display: flex;
+ flex-direction: column;
+ gap: var(--spacing-xs);
+}
+
+.progress-label {
+ font-size: 14px;
+ color: var(--text-secondary);
+ font-weight: 500;
+}
+
+.progress-bar {
+ height: 8px;
+ background: var(--bg-semi-dark);
+ border-radius: var(--radius-full);
+ overflow: hidden;
+}
+
+.progress-fill {
+ height: 100%;
+ background: linear-gradient(90deg, var(--accent-primary), var(--primary-purple));
+ border-radius: var(--radius-full);
+ transition: width 0.6s ease;
+}
+
+.progress-value {
+ font-size: 16px;
+ font-weight: 600;
+ color: var(--text-primary);
+}
+
+/* ========== Icon Grid 图标网格 ========== */
+.icon-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
+ gap: var(--spacing-lg);
+}
+
+.icon-card {
+ padding: var(--spacing-lg);
+ background: var(--bg-card);
+ border-radius: var(--radius-md);
+ border: 1px solid var(--border);
+ text-align: center;
+ transition: all var(--transition-base);
+}
+
+.icon-card:hover {
+ transform: translateY(-4px);
+ box-shadow: var(--shadow-lg);
+}
+
+.icon-card-icon {
+ font-size: 48px;
+ margin-bottom: var(--spacing-md);
+}
+
+.icon-card-title {
+ font-size: 16px;
+ font-weight: 600;
+ margin-bottom: var(--spacing-xs);
+ color: var(--text-primary);
+}
+
+.icon-card-value {
+ font-size: 14px;
+ color: var(--text-secondary);
+}
+
+/* ========== 响应式布局 ========== */
+@media (max-width: 768px) {
+ .alternating-layout {
+ flex-direction: column !important;
+ }
+
+ .alternating-layout .image-container {
+ flex: 1 1 100%;
+ }
+}
diff --git a/web_frontend/web_result/order-classes/chemical/index.html b/web_frontend/web_result/order-classes/chemical/index.html
index a34c4d16..39bf723c 100644
--- a/web_frontend/web_result/order-classes/chemical/index.html
+++ b/web_frontend/web_result/order-classes/chemical/index.html
@@ -66,14 +66,21 @@
-
-
检测背景
-
本项目对单批次 300mm 硅晶圆 + 表面SiO₂薄膜开展一次性质量检测。整套流程由AI引擎主导:负责数据清洗、主判定与自动出具结构化报告;检测员只在低可信或越界时介入复核,最大化保障速度与一致性。
-
-
-
-
![检测背景]()
-
AI驱动的智能检测系统
+
+
+
+
![检测背景]()
+
AI驱动的智能检测系统
+
+
+
检测背景
+
+ 本项目对单批次 300mm 硅晶圆 + 表面SiO₂薄膜开展一次性质量检测。检测的核心目标是在不打乱生产节拍的前提下,快速、客观地给出放行/拦截结论,并将证据图与关键数据同步打包,便于管理层与工艺同事直接引用。
+
+
+ 整套流程由AI引擎主导:它负责数据清洗(去噪、校正)、主判定(是否达标/进入观察/越界)与自动出具结构化报告;检测员只在低可信或越界时介入复核,最大化保障速度与一致性。
+
+
@@ -91,6 +98,49 @@
+
+
+
+
+
+
+
+ 1. 外观检测
+
+
+ 识别并量化颗粒、划痕、腐蚀等可见缺陷,输出数量、最大尺寸、位置分布与可信度;若出现同象限集中或边缘聚集,在报告中加注"需关注"提示,便于下批定位复测。
+
+
+
+
+ 2. 薄膜测量
+
+
+ 用9点法核对厚度均值与均匀性(3σ)是否满足目标窗口;当整体达标但边缘点偏离明显时,自动标记"边缘敏感",提示下批优先复查对应区域。
+
+
+
+
+ 3. 电学测试
+
+
+ 以"AI预测+少量点实测校准"的组合快速评估Rs;当均值接近上/下限或离散度异常放大时,报告中会给出"观察或需复核"的明确结论与建议点位。
+
+
+
+
+ 4. 成分分析
+
+
+ 进行小样本XPS抽检,确认O/Si比是否落在目标范围,并筛查金属污染的可疑峰位;若低于阈值但出现弱峰,记为"可疑",建议同片位或邻近点复测。
+
+
+
+
+
+
-
-
检测对象与项目
-
样品类型:300mm硅晶圆+表面SiO₂薄膜。覆盖项目:外观(颗粒/划痕/腐蚀)、薄膜(厚度与均匀性)、电学(方块电阻Rs)、成分(XPS抽检)。
-
-
-
-
![检测项目]()
-
硅晶圆检测项目全景
+
+
+
+
![检测项目]()
+
硅晶圆检测项目全景
+
+
+
检测对象与项目
+
+ - 样品类型:300mm硅晶圆 + 表面SiO₂薄膜
+ - 外观检测:颗粒、划痕、腐蚀等可见缺陷
+ - 薄膜测量:厚度均值与均匀性(3σ)
+ - 电学测试:方块电阻Rs(9点法)
+ - 成分分析:XPS抽检(O/Si比、金属污染)
+ - 不在范围:晶体位错、深层缺陷、应力拉曼
+
+
+
+ 结果使用:仅服务当批放行/拦截,不外推其他批次或不同工艺窗口。
+
+
@@ -280,52 +343,73 @@
光学镜头检测硅晶圆示意
+
-
+
+
-
![外观热力图]()
+
![外观热力图]()
+
AI输出图表 1/4
整片俯视图+网格热区,颗粒/划痕/腐蚀坑分类显示,颜色分级标注严重度。
-
+
+
![厚度分布图]()
+
AI输出图表 2/4
9点热力格,均值、3σ、偏移率统计,边缘敏感性自动标注。
-
+
+
![电学对比图]()
+
AI输出图表 3/4
AI预测vs实测散点图,误差统计,置信区间可视化展示。
-
+
+
![成分抽检]()
+
AI输出图表 4/4
-
-
O/Si比值、金属污染状态,峰位截图,采样位置追溯。
+
+
O/Si比值、金属污染状态,峰位截图,采样位置追溯。
@@ -341,43 +425,111 @@
自动出报告并归档,无需人工处理。
+
+
+
+
测点最少化策略
+
-
自动生成备注与关注点,坐标放入下批复测清单。
+
厚度和Rs用9点(中心1点+内环4点+外环4点),能覆盖重点区域,也不太费时。
+
💡 "少测点"方法:如果AI预测和前3点实测的差异<2%,剩下6点可以用AI估算。报告里必须标注这些点为"AI估计",同时随机抽查1-2点,以确保靠谱。
+
-
自动通知检测员复核,复核前不建议放行。
+
+ - 某一象限的缺陷/颗粒明显偏多
+ - 边缘和中心差距异常(边缘普遍偏高或偏低)
+ - 前3点与AI预测差异≥2%
+
+
遇到这些情况,系统会自动恢复完整9点;必要时建议升到13点(外环再加4点)再确认。
-
-
-
-
-
+
+
+
AI输出内容详解
+
+
+
+
+
+
+
![外观热力图]()
+
+
+
+
展示:整片俯视图+网格热区,颗粒/划痕/腐蚀分类显示,绿/橙/红颜色分级
+
读图:①看红橙区是否集中 ②确认最大尺寸位置 ③判断分布随机性
+
+
+
+
+
+
+
![厚度分布图]()
+
+
+
+
组成:9点热力格(冷→暖=薄→厚),统计卡(均值/3σ/偏移率),达标徽记
+
要点:3σ≤±3%且偏移率接近0为稳定,边缘敏感标记提示复测
+
+
+
+
+
+
+
![电学对比图]()
+
+
+
+
元素:散点图(AI预测vs实测),45°参考线,误差统计(MAE/MAPE)
+
判读:靠近45°线=准确,上方偏多=低估,下方偏多=高估
+
+
+
+
+
+
+
![成分抽检]()
+
+
+
+
项目:O/Si比值(2.00±0.05),金属污染(<1×10¹⁰atoms/cm²),峰位截图
+
状态:正常(窗口内)、可疑(弱峰低于阈值)、异常(超出范围)
+
+
@@ -401,9 +553,85 @@
本批共20片晶圆,全部完成外观、厚度、Rs三项检测;随机抽取3片补做XPS成分核验。完成度100%,无漏测、无中断记录。总体判定:合格19片、观察1片、不合格0片。
-
-
![检测结果]()
-
检测结果主图
+
+
+
+
+
+
本批共20片晶圆,全部按计划完成外观、厚度、方块电阻(Rs)三项检测;随机抽取3片补做XPS成分核验。
+
外观采用全片扫描(单片分辨率约0.2-0.3μm/px),厚度与Rs采用9点法(中心+内环4点+外环4点),与晶圆Notch对齐确保点位一致性。
+
✓ 完成度100%,无漏测、无中断记录。
+
+
+
+
+
+
+
+ - 外观:每片"最大值"与"总数"呈现(便于快速对比风险峰值与整体水平)
+ - 厚度与Rs:9点"均值+3σ(离散)"呈现
+ - 成分:按"正常/可疑/异常"分级,并附O/Si比与金属峰提示
+
+
各项统计口径与上一版报告保持一致,便于横向对比。
+
+
+
+
+
+
+
结果汇总:合格19片、观察1片、不合格0片。
+
进入"观察"的样片原因为Rs略高但未越界;其余19片全部在阈值内。
+
+
+
+
+
+
+
+
+
![检测结果]()
+
检测结果数据可视化
+
+
+
检测结果总览
+
+
+
+ 总体评价:本批质量稳定,仅1片进入观察带,AI与人工判定结果100%一致。
+
+
@@ -542,25 +770,195 @@
+
+
+
+
观察项解释
+
+
+
+
+
Rs仍在允许范围内,只是接近上限;离散度正常,说明并非局部失控。
+
+
+
+ 技术说明:Rs均值61.1Ω/□,目标60±1.2Ω/□,偏差+1.1Ω/□(约1.8%),仍在规格窗口内。9点离散度2.9Ω/□属于正常工艺波动范围。
+
+
+
+
+
+
+
+
+
在当前应用场景下属于可接受波动,不会成为直接的失效风险。
+
+
+
+ 预警:若下批连续出现同样趋势,可能意味着工艺轻微偏移,需要小范围微调确认。
+
+
+
+
+
-
-
-
批次合格率
-
0%
+
+
+
复核与跟踪
+
+
+
+
+
观察片的重点点位已复测,确认属轻微偏高;AI与人工结论一致。
+
+
+
+
+
+
+
+
+
+
+ 优先点位
+
+
+ - 边缘外环3点(NE、NW、SE)
+ - 中心1点
+
+
+ 💡 AI已在报告中自动生成对应坐标
+
+
+
+
+
+ 顺序建议
+
+
+ - 先边缘后中心
+ - 若边缘回落而中心不变,优先考虑边缘效应
+ - 合格判据:Rs均值回到60±1.2Ω/□内,且9点离散≤上一批离散值+10%即可判定"趋稳"
+
+
+
+
+
+
+
+ 跟踪目标:通过下批4个关键点位的数据变化,快速判断工艺稳定性。若Rs回落且离散度稳定,可维持当前工艺参数;若无改善或继续上升,需启动工艺分析会议,评估是否调整沉积参数。
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+ AI核心能力
+
+
+ 本项目采用先进的AI技术,实现从数据采集到报告生成的全流程自动化,大幅提升检测效率与准确性。
+
+
+
+
+
+
+
🧹
+
自动数据清洗
+
去噪、校正、标准化
+
+
+
+
🧠
+
智能主判定
+
合格/观察/不合格
+
+
+
+
⚖️
+
阈值自动比对
+
实时对标工艺窗口
+
+
+
+
📊
+
可信度评估
+
0.94平均可信度
+
+
+
+
+
+
⚠️
+
异常自动预警
+
低可信/越界提醒
+
+
+
+
📄
+
报告一键生成
+
≤2分钟出具PDF
+
+
+
diff --git a/web_frontend/web_result/order-classes/energy/css/styles.css b/web_frontend/web_result/order-classes/energy/css/styles.css
index 2c8eeb54..fead6503 100644
--- a/web_frontend/web_result/order-classes/energy/css/styles.css
+++ b/web_frontend/web_result/order-classes/energy/css/styles.css
@@ -2,29 +2,29 @@
/* ========== 设计变量 ========== */
:root {
- /* 橙黄太阳能主题 - 能源风格 */
- --bg-dark: #fffbeb; /* 浅黄背景 */
- --bg-semi-dark: rgba(255, 251, 235, 0.95); /* 半透明浅黄 */
+ /* 科技蓝主题 - 能源光伏风格 */
+ --bg-dark: #ffffff; /* 纯白背景 */
+ --bg-semi-dark: rgba(255, 255, 255, 0.95); /* 半透明白 */
--bg-overlay: rgba(255, 255, 255, 0.85); /* 白色遮罩 */
--bg-card: rgba(255, 255, 255, 0.9); /* 卡片背景 */
- --primary-dark: #78350f; /* 主色深橙 */
- --primary-orange: #f59e0b; /* 主色橙 - 能源专业 */
- --accent-amber: #d97706; /* 琥珀色强调 - 太阳能主题 */
- --accent-amber-light: #fbbf24; /* 浅琥珀色 */
- --text-light: #78350f; /* 深色文字 */
- --text-gray: #6b7280; /* 灰色文字 */
- --border-light: rgba(245, 158, 11, 0.2); /* 橙色边框 */
- --hover-bg: rgba(245, 158, 11, 0.15); /* 悬停背景 */
- --active-bg: rgba(245, 158, 11, 0.2); /* 激活背景 */
+ --primary-dark: #0d47a1; /* 主色深蓝 */
+ --primary-blue: #1976d2; /* 主色蓝 - 科技专业 */
+ --accent-cyan: #00bcd4; /* 青色强调 - 能源主题 */
+ --accent-cyan-light: #4dd0e1; /* 浅青色 */
+ --text-light: #212121; /* 深色文字 */
+ --text-gray: #616161; /* 灰色文字 */
+ --border-light: rgba(25, 118, 210, 0.2); /* 蓝色边框 */
+ --hover-bg: rgba(0, 188, 212, 0.15); /* 悬停背景 */
+ --active-bg: rgba(25, 118, 210, 0.2); /* 激活背景 */
- /* 间距系统 - 针对大屏幕优化 */
- --spacing-xs: 0.75rem; /* 12px */
- --spacing-sm: 1.25rem; /* 20px */
- --spacing-md: 2rem; /* 32px */
- --spacing-lg: 3rem; /* 48px */
- --spacing-xl: 4rem; /* 64px */
- --spacing-2xl: 6rem; /* 96px */
- --spacing-3xl: 8rem; /* 128px */
+ /* 间距系统 - 紧凑布局 */
+ --spacing-xs: 0.5rem; /* 8px */
+ --spacing-sm: 0.75rem; /* 12px */
+ --spacing-md: 1.25rem; /* 20px */
+ --spacing-lg: 2rem; /* 32px */
+ --spacing-xl: 2.5rem; /* 40px */
+ --spacing-2xl: 3rem; /* 48px */
+ --spacing-3xl: 4rem; /* 64px */
/* 字体系统 */
--font-primary: 'Inter', 'Noto Sans SC', -apple-system, BlinkMacSystemFont, sans-serif;
@@ -61,7 +61,7 @@
--shadow-md: 0 2px 4px rgba(0,0,0,0.08);
--shadow-lg: 0 4px 8px rgba(0,0,0,0.1);
--shadow-xl: 0 8px 16px rgba(0,0,0,0.12);
- --shadow-orange: 0 2px 8px rgba(245, 158, 11, 0.15);
+ --shadow-blue: 0 2px 8px rgba(25, 118, 210, 0.15);
/* 过渡 */
--transition-fast: 150ms ease;
@@ -72,26 +72,26 @@
--container-max: 1600px; /* 增加最大宽度适配1920屏幕 */
}
-/* ========== 深色主题 - 深邃橙黄配色 ========== */
+/* ========== 深色主题 - 深邃科技蓝配色 ========== */
body.dark-theme {
- --bg-dark: #78350f; /* 深邃橙黑背景 */
- --bg-semi-dark: rgba(120, 53, 15, 0.95); /* 深橙半透明 */
- --bg-overlay: rgba(217, 119, 6, 0.85); /* 深橙遮罩层 */
- --bg-card: rgba(245, 158, 11, 0.9); /* 深橙卡片背景 */
- --primary-dark: #78350f; /* 深邃橙黑 */
- --primary-orange: #fbbf24; /* 明亮橙 */
- --accent-amber: #fcd34d; /* 亮琥珀色 */
- --accent-amber-light: #fde68a; /* 超亮琥珀色 */
- --text-light: #fffbeb; /* 浅色文字 */
- --text-gray: #fde68a; /* 灰色文字 */
- --border-light: rgba(251, 191, 36, 0.25); /* 橙色边框 */
- --hover-bg: rgba(245, 158, 11, 0.15); /* 悬停背景 */
- --active-bg: rgba(251, 191, 36, 0.2); /* 激活背景 */
+ --bg-dark: #0a1929; /* 深邃蓝黑背景 */
+ --bg-semi-dark: rgba(10, 25, 41, 0.95); /* 深蓝半透明 */
+ --bg-overlay: rgba(13, 47, 161, 0.85); /* 深蓝遮罩层 */
+ --bg-card: rgba(25, 118, 210, 0.9); /* 深蓝卡片背景 */
+ --primary-dark: #0d47a1; /* 深邃蓝 */
+ --primary-blue: #42a5f5; /* 明亮蓝 */
+ --accent-cyan: #4dd0e1; /* 亮青色 */
+ --accent-cyan-light: #80deea; /* 超亮青色 */
+ --text-light: #e3f2fd; /* 浅色文字 */
+ --text-gray: #b3e5fc; /* 灰色文字 */
+ --border-light: rgba(66, 165, 245, 0.25); /* 蓝色边框 */
+ --hover-bg: rgba(0, 188, 212, 0.15); /* 悬停背景 */
+ --active-bg: rgba(66, 165, 245, 0.2); /* 激活背景 */
--shadow-sm: 0 1px 2px rgba(0,0,0,0.4);
--shadow-md: 0 2px 4px rgba(0,0,0,0.5);
--shadow-lg: 0 4px 8px rgba(0,0,0,0.6);
--shadow-xl: 0 8px 16px rgba(0,0,0,0.7);
- --shadow-orange: 0 2px 8px rgba(245, 158, 11, 0.25);
+ --shadow-blue: 0 2px 8px rgba(25, 118, 210, 0.25);
}
/* ========== 重置样式 ========== */
@@ -123,8 +123,8 @@ body {
align-items: center;
justify-content: center;
background:
- linear-gradient(135deg, rgba(255, 251, 235, 0.9) 0%, rgba(254, 243, 199, 0.95) 100%),
- url('../images/光伏面板生成画面.jpg');
+ linear-gradient(135deg, rgba(255, 255, 255, 0.9) 0%, rgba(255, 255, 255, 0.95) 100%),
+ url('https://images.unsplash.com/photo-1509391366360-2e959784a276?w=1920&q=80');
background-size: cover;
background-position: center;
background-attachment: fixed;
@@ -184,8 +184,8 @@ body {
/* 深色主题下的Hero渐变 */
body.dark-theme .hero {
background:
- linear-gradient(135deg, rgba(120, 53, 15, 0.9) 0%, rgba(217, 119, 6, 0.8) 100%),
- url('../images/光伏面板生成画面.jpg');
+ linear-gradient(135deg, rgba(10, 25, 41, 0.9) 0%, rgba(13, 71, 161, 0.8) 100%),
+ url('https://images.unsplash.com/photo-1509391366360-2e959784a276?w=1920&q=80');
background-size: cover;
background-position: center;
background-attachment: fixed;
@@ -197,8 +197,8 @@ body.dark-theme .hero {
width: 100%;
height: 100%;
background-image:
- radial-gradient(circle at 20% 50%, rgba(245, 158, 11, 0.1) 0%, transparent 50%),
- radial-gradient(circle at 80% 80%, rgba(217, 119, 6, 0.05) 0%, transparent 50%);
+ radial-gradient(circle at 20% 50%, rgba(25, 118, 210, 0.1) 0%, transparent 50%),
+ radial-gradient(circle at 80% 80%, rgba(13, 71, 161, 0.05) 0%, transparent 50%);
pointer-events: none;
animation: glow 8s ease-in-out infinite;
}
@@ -220,7 +220,7 @@ body.dark-theme .hero {
.hero-badge {
display: inline-block;
padding: var(--spacing-md) var(--spacing-xl);
- background: rgba(245, 158, 11, 0.15);
+ background: rgba(25, 118, 210, 0.15);
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
border-radius: var(--radius-full);
@@ -228,14 +228,14 @@ body.dark-theme .hero {
font-weight: var(--font-semibold);
letter-spacing: 0.1em;
margin-bottom: var(--spacing-xl);
- border: 3px solid var(--primary-orange);
- box-shadow: var(--shadow-orange);
+ border: 3px solid var(--primary-blue);
+ box-shadow: var(--shadow-blue);
text-transform: uppercase;
transition: all var(--transition-base);
}
.hero-badge:hover {
- background: rgba(245, 158, 11, 0.25);
+ background: rgba(25, 118, 210, 0.25);
transform: translateY(-2px);
}
@@ -245,8 +245,8 @@ body.dark-theme .hero {
margin-bottom: var(--spacing-lg);
letter-spacing: -0.02em;
line-height: 1.1;
- color: var(--accent-amber-light);
- text-shadow: 0 6px 30px rgba(0,0,0,0.8), 0 0 60px rgba(245, 158, 11, 0.4);
+ color: var(--accent-cyan-light);
+ text-shadow: 0 6px 30px rgba(0,0,0,0.8), 0 0 60px rgba(25, 118, 210, 0.4);
}
.hero-subtitle {
@@ -268,22 +268,22 @@ body.dark-theme .hero {
/* Hero浮动卡片 */
.hero-floating-cards {
display: flex;
- gap: var(--spacing-lg);
+ gap: var(--spacing-md);
justify-content: center;
- margin-top: var(--spacing-2xl);
- flex-wrap: wrap;
+ margin-top: var(--spacing-xl);
+ flex-wrap: nowrap; /* 强制并排显示 */
}
.hero-card {
background: var(--bg-card);
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
- padding: var(--spacing-lg) var(--spacing-xl);
- border-radius: var(--radius-xl);
- border: 2px solid var(--border-light);
- box-shadow: var(--shadow-lg);
- transition: all var(--transition-base);
- min-width: 160px;
+ padding: var(--spacing-md) var(--spacing-lg); /* 紧凑但不过分 */
+ border-radius: var(--radius-lg); /* 优雅的圆角 */
+ border: 1px solid var(--border-light); /* 更细的边框 */
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); /* 轻柔的阴影 */
+ transition: all 0.3s cubic-bezier(0.34, 1.56, 0.64, 1); /* 弹性缓动 */
+ min-width: 120px; /* 合适的最小宽度 */
animation: fadeInUp 0.8s ease forwards;
}
@@ -292,23 +292,28 @@ body.dark-theme .hero {
.hero-card:nth-child(3) { animation-delay: 0.6s; opacity: 0; }
.hero-card:hover {
- transform: translateY(-8px) scale(1.05);
- box-shadow: var(--shadow-xl), var(--shadow-orange);
- border-color: var(--primary-orange);
+ transform: translateY(-6px) scale(1.03);
+ box-shadow: 0 8px 24px rgba(25, 118, 210, 0.15),
+ 0 4px 12px rgba(0, 0, 0, 0.1);
+ border-color: var(--primary-blue);
}
.hero-card-value {
- font-size: var(--text-3xl);
+ font-size: var(--text-lg); /* 从xl进一步缩小为lg,更精致 */
font-weight: var(--font-bold);
- color: var(--primary-orange);
+ color: var(--primary-blue);
margin-bottom: var(--spacing-xs);
- text-shadow: 0 2px 10px rgba(245, 158, 11, 0.3);
+ text-shadow: 0 1px 4px rgba(25, 118, 210, 0.2); /* 减小阴影 */
+ letter-spacing: -0.01em; /* 减小字间距 */
}
.hero-card-label {
- font-size: var(--text-sm);
+ font-size: 0.7rem; /* 比xs更小,约11.2px */
color: var(--text-gray);
font-weight: var(--font-medium);
+ text-transform: uppercase; /* 大写字母更精致 */
+ letter-spacing: 0.08em; /* 增加字间距,更精致 */
+ opacity: 0.85; /* 添加透明度 */
}
/* 滚动指示器 */
@@ -317,7 +322,7 @@ body.dark-theme .hero {
bottom: 40px;
left: 50%;
transform: translateX(-50%);
- color: var(--primary-orange);
+ color: var(--primary-blue);
animation: bounce 2s infinite;
cursor: pointer;
z-index: 10;
@@ -399,16 +404,16 @@ body.dark-theme .hero {
.nav-item:hover {
background: var(--hover-bg);
- color: var(--primary-orange);
+ color: var(--primary-blue);
transform: translateY(-2px);
- box-shadow: var(--shadow-orange);
+ box-shadow: var(--shadow-blue);
}
.nav-item.active {
background: var(--active-bg);
- color: var(--primary-orange);
- border-color: var(--primary-orange);
- box-shadow: var(--shadow-orange);
+ color: var(--primary-blue);
+ border-color: var(--primary-blue);
+ box-shadow: var(--shadow-blue);
}
/* ========== 内容区块 - 图片背景 ========== */
@@ -421,8 +426,8 @@ body.dark-theme .hero {
/* 浅色图片背景 - 每个区块使用不同图片 */
.section:nth-child(1) {
background-image:
- linear-gradient(to bottom, rgba(255, 251, 235, 0.9) 0%, rgba(254, 243, 199, 1) 100%),
- url('../images/PLC示意图.jpg');
+ linear-gradient(to bottom, rgba(255, 255, 255, 0.9) 0%, rgba(255, 255, 255, 0.95) 100%),
+ url('https://images.unsplash.com/photo-1581091226825-a6a2a5aee158?w=1920&q=80');
background-size: cover;
background-position: center;
background-attachment: fixed;
@@ -430,8 +435,8 @@ body.dark-theme .hero {
.section:nth-child(2) {
background-image:
- linear-gradient(to bottom, rgba(255, 251, 235, 0.9) 0%, rgba(254, 243, 199, 1) 100%),
- url('../images/Mermaid流程图.jpg');
+ linear-gradient(to bottom, rgba(255, 255, 255, 0.9) 0%, rgba(255, 255, 255, 0.95) 100%),
+ url('https://images.unsplash.com/photo-1518770660439-4636190af475?w=1920&q=80');
background-size: cover;
background-position: center;
background-attachment: fixed;
@@ -439,8 +444,8 @@ body.dark-theme .hero {
.section:nth-child(3) {
background-image:
- linear-gradient(to bottom, rgba(255, 251, 235, 0.9) 0%, rgba(254, 243, 199, 1) 100%),
- url('../images/工业机器人图片.jpg');
+ linear-gradient(to bottom, rgba(255, 255, 255, 0.9) 0%, rgba(255, 255, 255, 0.95) 100%),
+ url('https://images.unsplash.com/photo-1563207153-f403bf289096?w=1920&q=80');
background-size: cover;
background-position: center;
background-attachment: fixed;
@@ -448,8 +453,8 @@ body.dark-theme .hero {
.section:nth-child(4) {
background-image:
- linear-gradient(to bottom, rgba(255, 251, 235, 0.9) 0%, rgba(254, 243, 199, 1) 100%),
- url('../images/机器视觉相机图片.jpg');
+ linear-gradient(to bottom, rgba(255, 255, 255, 0.9) 0%, rgba(255, 255, 255, 0.95) 100%),
+ url('https://images.unsplash.com/photo-1581092160562-40aa08e78837?w=1920&q=80');
background-size: cover;
background-position: center;
background-attachment: fixed;
@@ -458,8 +463,8 @@ body.dark-theme .hero {
/* 通用奇偶区块(当超过4个section时) */
.section:nth-child(n+5):nth-child(odd) {
background-image:
- linear-gradient(to bottom, rgba(255, 251, 235, 0.9) 0%, rgba(254, 243, 199, 1) 100%),
- url('../images/光伏面板室外场景图片.jpg');
+ linear-gradient(to bottom, rgba(255, 255, 255, 0.9) 0%, rgba(255, 255, 255, 0.95) 100%),
+ url('https://images.unsplash.com/photo-1509391366360-2e959784a276?w=1920&q=80');
background-size: cover;
background-position: center;
background-attachment: fixed;
@@ -467,8 +472,8 @@ body.dark-theme .hero {
.section:nth-child(n+5):nth-child(even) {
background-image:
- linear-gradient(to bottom, rgba(255, 251, 235, 0.9) 0%, rgba(254, 243, 199, 1) 100%),
- url('../images/输送与治具.jpg');
+ linear-gradient(to bottom, rgba(255, 255, 255, 0.9) 0%, rgba(255, 255, 255, 0.95) 100%),
+ url('https://images.unsplash.com/photo-1581092160607-ee67be8e3b13?w=1920&q=80');
background-size: cover;
background-position: center;
background-attachment: fixed;
@@ -477,8 +482,8 @@ body.dark-theme .hero {
/* 深色主题下的区块背景 - 每个区块使用对应图片 */
body.dark-theme .section:nth-child(1) {
background-image:
- linear-gradient(to bottom, rgba(120, 53, 15, 0.92) 0%, rgba(217, 119, 6, 0.88) 100%),
- url('../images/PLC示意图.jpg');
+ linear-gradient(to bottom, rgba(10, 25, 41, 0.92) 0%, rgba(13, 71, 161, 0.88) 100%),
+ url('https://images.unsplash.com/photo-1581091226825-a6a2a5aee158?w=1920&q=80');
background-size: cover;
background-position: center;
background-attachment: fixed;
@@ -486,8 +491,8 @@ body.dark-theme .section:nth-child(1) {
body.dark-theme .section:nth-child(2) {
background-image:
- linear-gradient(to bottom, rgba(217, 119, 6, 0.90) 0%, rgba(120, 53, 15, 0.88) 100%),
- url('../images/Mermaid流程图.jpg');
+ linear-gradient(to bottom, rgba(13, 71, 161, 0.90) 0%, rgba(10, 25, 41, 0.88) 100%),
+ url('https://images.unsplash.com/photo-1518770660439-4636190af475?w=1920&q=80');
background-size: cover;
background-position: center;
background-attachment: fixed;
@@ -495,8 +500,8 @@ body.dark-theme .section:nth-child(2) {
body.dark-theme .section:nth-child(3) {
background-image:
- linear-gradient(to bottom, rgba(120, 53, 15, 0.92) 0%, rgba(217, 119, 6, 0.88) 100%),
- url('../images/工业机器人图片.jpg');
+ linear-gradient(to bottom, rgba(10, 25, 41, 0.92) 0%, rgba(13, 71, 161, 0.88) 100%),
+ url('https://images.unsplash.com/photo-1563207153-f403bf289096?w=1920&q=80');
background-size: cover;
background-position: center;
background-attachment: fixed;
@@ -504,8 +509,8 @@ body.dark-theme .section:nth-child(3) {
body.dark-theme .section:nth-child(4) {
background-image:
- linear-gradient(to bottom, rgba(217, 119, 6, 0.90) 0%, rgba(120, 53, 15, 0.88) 100%),
- url('../images/机器视觉相机图片.jpg');
+ linear-gradient(to bottom, rgba(13, 71, 161, 0.90) 0%, rgba(10, 25, 41, 0.88) 100%),
+ url('https://images.unsplash.com/photo-1581092160562-40aa08e78837?w=1920&q=80');
background-size: cover;
background-position: center;
background-attachment: fixed;
@@ -514,8 +519,8 @@ body.dark-theme .section:nth-child(4) {
/* 通用奇偶区块(当超过4个section时) */
body.dark-theme .section:nth-child(n+5):nth-child(odd) {
background-image:
- linear-gradient(to bottom, rgba(120, 53, 15, 0.92) 0%, rgba(217, 119, 6, 0.88) 100%),
- url('../images/光伏面板室外场景图片.jpg');
+ linear-gradient(to bottom, rgba(10, 25, 41, 0.92) 0%, rgba(13, 71, 161, 0.88) 100%),
+ url('https://images.unsplash.com/photo-1509391366360-2e959784a276?w=1920&q=80');
background-size: cover;
background-position: center;
background-attachment: fixed;
@@ -523,8 +528,8 @@ body.dark-theme .section:nth-child(n+5):nth-child(odd) {
body.dark-theme .section:nth-child(n+5):nth-child(even) {
background-image:
- linear-gradient(to bottom, rgba(217, 119, 6, 0.90) 0%, rgba(120, 53, 15, 0.88) 100%),
- url('../images/输送与治具.jpg');
+ linear-gradient(to bottom, rgba(13, 71, 161, 0.90) 0%, rgba(10, 25, 41, 0.88) 100%),
+ url('https://images.unsplash.com/photo-1581092160607-ee67be8e3b13?w=1920&q=80');
background-size: cover;
background-position: center;
background-attachment: fixed;
@@ -532,26 +537,26 @@ body.dark-theme .section:nth-child(n+5):nth-child(even) {
/* 深色主题下的特定元素调整 */
body.dark-theme .stat-item {
- background: rgba(245, 158, 11, 0.8);
+ background: rgba(25, 118, 210, 0.8);
backdrop-filter: blur(5px);
}
body.dark-theme .stat-item:hover {
- background: rgba(251, 191, 36, 0.15);
- border-color: var(--primary-orange);
+ background: rgba(0, 188, 212, 0.15);
+ border-color: var(--primary-blue);
}
body.dark-theme .stat-value {
- color: var(--accent-amber-light);
+ color: var(--accent-cyan-light);
}
body.dark-theme th {
- background: rgba(251, 191, 36, 0.12);
- color: var(--accent-amber-light);
+ background: rgba(0, 188, 212, 0.12);
+ color: var(--accent-cyan-light);
}
body.dark-theme tr:hover {
- background: rgba(251, 191, 36, 0.08);
+ background: rgba(0, 188, 212, 0.08);
}
.container {
@@ -579,7 +584,7 @@ body.dark-theme tr:hover {
height: 100px;
border-radius: var(--radius-xl);
object-fit: cover;
- border: 3px solid var(--primary-orange);
+ border: 3px solid var(--primary-blue);
box-shadow: var(--shadow-md);
transition: all var(--transition-base);
}
@@ -587,7 +592,7 @@ body.dark-theme tr:hover {
.agent-avatar:hover {
transform: scale(1.05);
box-shadow: var(--shadow-lg);
- border-color: var(--accent-amber);
+ border-color: var(--accent-cyan);
}
.agent-info {
@@ -596,7 +601,7 @@ body.dark-theme tr:hover {
.agent-name {
font-size: var(--text-lg);
- color: var(--primary-orange);
+ color: var(--primary-blue);
text-transform: uppercase;
letter-spacing: 0.1em;
margin-bottom: var(--spacing-sm);
@@ -620,7 +625,7 @@ body.dark-theme tr:hover {
left: 0;
width: 180px;
height: 4px;
- background: linear-gradient(90deg, var(--primary-orange), transparent);
+ background: linear-gradient(90deg, var(--primary-blue), transparent);
border-radius: 2px;
}
@@ -642,7 +647,7 @@ body.dark-theme tr:hover {
.expert-intro h3 {
font-size: var(--text-2xl);
- color: var(--primary-orange);
+ color: var(--primary-blue);
margin-bottom: var(--spacing-lg);
display: flex;
align-items: center;
@@ -666,7 +671,7 @@ body.dark-theme tr:hover {
}
.grid-3 {
- grid-template-columns: repeat(2, 1fr);
+ grid-template-columns: repeat(3, 1fr); /* 3列并排布局,避免2x2 */
}
.grid-4 {
@@ -701,7 +706,7 @@ body.dark-theme tr:hover {
.split-layout-image:hover {
transform: scale(1.02);
- box-shadow: var(--shadow-xl), var(--shadow-orange);
+ box-shadow: var(--shadow-xl), var(--shadow-blue);
}
.split-layout-image img {
@@ -724,7 +729,7 @@ body.dark-theme tr:hover {
}
.split-badge {
- background: var(--primary-orange);
+ background: var(--primary-blue);
color: white;
padding: var(--spacing-sm) var(--spacing-lg);
border-radius: var(--radius-full);
@@ -744,7 +749,7 @@ body.dark-theme tr:hover {
.split-title {
font-size: var(--text-2xl);
- color: var(--primary-orange);
+ color: var(--primary-blue);
margin-bottom: var(--spacing-lg);
display: flex;
align-items: center;
@@ -793,16 +798,16 @@ body.dark-theme tr:hover {
right: 0;
bottom: 0;
background: linear-gradient(135deg,
- rgba(120, 53, 15, 0.85) 0%,
- rgba(217, 119, 6, 0.7) 100%
+ rgba(10, 25, 41, 0.85) 0%,
+ rgba(13, 71, 161, 0.7) 100%
);
backdrop-filter: blur(2px);
}
body:not(.dark-theme) .visual-divider::before {
background: linear-gradient(135deg,
- rgba(255, 251, 235, 0.85) 0%,
- rgba(254, 243, 199, 0.9) 100%
+ rgba(255, 255, 255, 0.85) 0%,
+ rgba(255, 255, 255, 0.9) 100%
);
}
@@ -823,25 +828,25 @@ body:not(.dark-theme) .visual-divider::before {
display: flex;
align-items: center;
justify-content: center;
- border: 3px solid var(--primary-orange);
- box-shadow: var(--shadow-xl), 0 0 30px rgba(245, 158, 11, 0.5);
+ border: 3px solid var(--primary-blue);
+ box-shadow: var(--shadow-xl), 0 0 30px rgba(25, 118, 210, 0.5);
animation: pulse 2s ease-in-out infinite;
}
.divider-icon i {
width: 40px !important;
height: 40px !important;
- color: var(--primary-orange);
+ color: var(--primary-blue);
}
@keyframes pulse {
0%, 100% {
transform: scale(1);
- box-shadow: var(--shadow-xl), 0 0 30px rgba(245, 158, 11, 0.5);
+ box-shadow: var(--shadow-xl), 0 0 30px rgba(25, 118, 210, 0.5);
}
50% {
transform: scale(1.05);
- box-shadow: var(--shadow-xl), 0 0 50px rgba(245, 158, 11, 0.8);
+ box-shadow: var(--shadow-xl), 0 0 50px rgba(25, 118, 210, 0.8);
}
}
@@ -890,7 +895,7 @@ body:not(.dark-theme) .visual-divider::before {
.timeline-title {
font-size: var(--text-3xl);
- color: var(--primary-orange);
+ color: var(--primary-blue);
margin-bottom: var(--spacing-2xl);
display: flex;
align-items: center;
@@ -921,8 +926,8 @@ body:not(.dark-theme) .visual-divider::before {
width: 3px;
background: linear-gradient(to bottom,
transparent,
- var(--primary-orange) 10%,
- var(--primary-orange) 90%,
+ var(--primary-blue) 10%,
+ var(--primary-blue) 90%,
transparent
);
transform: translateX(-50%);
@@ -951,7 +956,7 @@ body:not(.dark-theme) .visual-divider::before {
height: 60px;
border-radius: 50%;
background: var(--bg-card);
- border: 4px solid var(--primary-orange);
+ border: 4px solid var(--primary-blue);
display: flex;
align-items: center;
justify-content: center;
@@ -963,12 +968,12 @@ body:not(.dark-theme) .visual-divider::before {
.timeline-marker i {
width: 28px !important;
height: 28px !important;
- color: var(--primary-orange);
+ color: var(--primary-blue);
}
.timeline-item:hover .timeline-marker {
transform: translateX(-50%) scale(1.1);
- box-shadow: var(--shadow-xl), 0 0 0 12px var(--bg-dark), var(--shadow-orange);
+ box-shadow: var(--shadow-xl), 0 0 0 12px var(--bg-dark), var(--shadow-blue);
}
.timeline-content {
@@ -992,13 +997,13 @@ body:not(.dark-theme) .visual-divider::before {
.timeline-content:hover {
transform: translateY(-4px);
- box-shadow: var(--shadow-xl), var(--shadow-orange);
- border-color: var(--primary-orange);
+ box-shadow: var(--shadow-xl), var(--shadow-blue);
+ border-color: var(--primary-blue);
}
.timeline-step {
font-size: var(--text-sm);
- color: var(--primary-orange);
+ color: var(--primary-blue);
font-weight: var(--font-bold);
text-transform: uppercase;
letter-spacing: 0.1em;
@@ -1023,7 +1028,7 @@ body:not(.dark-theme) .visual-divider::before {
display: inline-block;
padding: var(--spacing-xs) var(--spacing-md);
background: var(--active-bg);
- color: var(--primary-orange);
+ color: var(--primary-blue);
border-radius: var(--radius-full);
font-size: var(--text-sm);
font-weight: var(--font-medium);
@@ -1096,8 +1101,8 @@ body:not(.dark-theme) .visual-divider::before {
.card:hover {
transform: translateY(-8px);
- box-shadow: var(--shadow-xl), var(--shadow-orange);
- border-color: var(--primary-orange);
+ box-shadow: var(--shadow-xl), var(--shadow-blue);
+ border-color: var(--primary-blue);
}
.card-header {
@@ -1110,7 +1115,7 @@ body:not(.dark-theme) .visual-divider::before {
.card-title {
font-size: var(--text-2xl);
font-weight: var(--font-semibold);
- color: var(--primary-orange);
+ color: var(--primary-blue);
margin-bottom: var(--spacing-sm);
}
@@ -1182,7 +1187,7 @@ body:not(.dark-theme) .visual-divider::before {
}
.feature-list li:hover {
- color: var(--primary-orange);
+ color: var(--primary-blue);
padding-left: var(--spacing-sm);
}
@@ -1227,21 +1232,30 @@ body:not(.dark-theme) .visual-divider::before {
.stat-value {
font-size: var(--text-2xl);
font-weight: var(--font-bold);
- color: var(--primary-orange);
+ color: var(--primary-blue);
text-shadow: none;
}
-/* ========== 增强数据可视化 - 环形进度条 ========== */
+/* ========== 增强数据可视化 - 精致四列布局 ========== */
.stats-enhanced {
display: grid;
- grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
- gap: var(--spacing-xl);
- padding: var(--spacing-xl);
- background: var(--bg-overlay);
- backdrop-filter: blur(15px);
+ grid-template-columns: repeat(4, 1fr);
+ gap: var(--spacing-2xl);
+ padding: var(--spacing-2xl);
+ background: linear-gradient(135deg,
+ rgba(255, 255, 255, 0.6) 0%,
+ rgba(255, 255, 255, 0.4) 100%);
+ backdrop-filter: blur(20px);
+ -webkit-backdrop-filter: blur(20px);
border-radius: var(--radius-2xl);
border: 2px solid var(--border-light);
- box-shadow: var(--shadow-lg);
+ box-shadow: var(--shadow-xl);
+}
+
+body.dark-theme .stats-enhanced {
+ background: linear-gradient(135deg,
+ rgba(10, 25, 41, 0.6) 0%,
+ rgba(13, 71, 161, 0.4) 100%);
}
.stat-circle-item {
@@ -1277,12 +1291,12 @@ body:not(.dark-theme) .visual-divider::before {
}
.circle-fill {
- stroke: var(--primary-orange);
+ stroke: var(--primary-blue);
stroke-linecap: round;
stroke-dasharray: 326.73; /* 2 * π * r = 2 * π * 52 */
stroke-dashoffset: calc(326.73 * (1 - var(--progress, 0) / 100));
transition: stroke-dashoffset 2s cubic-bezier(0.16, 1, 0.3, 1);
- filter: drop-shadow(0 0 8px rgba(245, 158, 11, 0.5));
+ filter: drop-shadow(0 0 8px rgba(25, 118, 210, 0.5));
}
.circle-text {
@@ -1296,7 +1310,7 @@ body:not(.dark-theme) .visual-divider::before {
.circle-value {
font-size: var(--text-3xl);
font-weight: var(--font-bold);
- color: var(--primary-orange);
+ color: var(--primary-blue);
line-height: 1;
margin-bottom: var(--spacing-xs);
}
@@ -1313,10 +1327,18 @@ body:not(.dark-theme) .visual-divider::before {
font-weight: var(--font-semibold);
}
+@media (max-width: 1200px) {
+ .stats-enhanced {
+ grid-template-columns: repeat(2, 1fr);
+ gap: var(--spacing-xl);
+ }
+}
+
@media (max-width: 768px) {
.stats-enhanced {
grid-template-columns: repeat(2, 1fr);
gap: var(--spacing-lg);
+ padding: var(--spacing-lg);
}
.circle-progress {
@@ -1329,6 +1351,148 @@ body:not(.dark-theme) .visual-divider::before {
}
}
+@media (max-width: 480px) {
+ .stats-enhanced {
+ grid-template-columns: 1fr;
+ }
+}
+
+/* ========== 现代化统计卡片 - 优化版 ========== */
+.stat-modern-item {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ text-align: center;
+ padding: var(--spacing-2xl);
+ background: linear-gradient(135deg, var(--bg-card) 0%, rgba(255, 255, 255, 0.8) 100%);
+ backdrop-filter: blur(20px);
+ -webkit-backdrop-filter: blur(20px);
+ border-radius: var(--radius-2xl);
+ border: 2px solid var(--border-light);
+ transition: all 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
+ box-shadow: var(--shadow-md);
+ gap: var(--spacing-lg);
+ position: relative;
+ overflow: hidden;
+}
+
+.stat-modern-item::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background: linear-gradient(135deg, transparent 0%, rgba(25, 118, 210, 0.05) 100%);
+ opacity: 0;
+ transition: opacity var(--transition-base);
+}
+
+.stat-modern-item:hover::before {
+ opacity: 1;
+}
+
+.stat-modern-item:hover {
+ transform: translateY(-12px) scale(1.02);
+ box-shadow: 0 12px 32px rgba(25, 118, 210, 0.2),
+ 0 6px 16px rgba(0, 0, 0, 0.1);
+ border-color: var(--primary-blue);
+}
+
+.stat-icon-wrapper {
+ width: 72px;
+ height: 72px;
+ border-radius: 50%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);
+ transition: all 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
+ position: relative;
+}
+
+.stat-icon-wrapper::after {
+ content: '';
+ position: absolute;
+ inset: -4px;
+ border-radius: 50%;
+ background: inherit;
+ opacity: 0.3;
+ filter: blur(12px);
+ z-index: -1;
+ transition: all var(--transition-base);
+}
+
+.stat-modern-item:hover .stat-icon-wrapper {
+ transform: scale(1.15) rotate(5deg);
+ box-shadow: 0 12px 32px rgba(0, 0, 0, 0.2);
+}
+
+.stat-modern-item:hover .stat-icon-wrapper::after {
+ opacity: 0.5;
+ filter: blur(16px);
+}
+
+.stat-modern-value {
+ font-size: var(--text-3xl);
+ font-weight: var(--font-bold);
+ color: var(--text-light);
+ line-height: 1;
+ letter-spacing: -0.02em;
+ text-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
+}
+
+body.dark-theme .stat-modern-value {
+ color: var(--accent-cyan-light);
+ text-shadow: 0 2px 12px rgba(77, 208, 225, 0.3);
+}
+
+body.dark-theme .stat-modern-item {
+ background: linear-gradient(135deg, rgba(25, 118, 210, 0.15) 0%, rgba(13, 71, 161, 0.1) 100%);
+}
+
+.stat-modern-unit {
+ font-size: var(--text-base);
+ font-weight: var(--font-semibold);
+ color: var(--text-gray);
+ margin-left: var(--spacing-xs);
+ opacity: 0.75;
+}
+
+.stat-modern-label {
+ font-size: var(--text-sm);
+ font-weight: var(--font-semibold);
+ color: var(--text-gray);
+ text-transform: uppercase;
+ letter-spacing: 0.08em;
+ opacity: 0.8;
+}
+
+@media (max-width: 768px) {
+ .stat-modern-item {
+ padding: var(--spacing-lg);
+ gap: var(--spacing-sm);
+ }
+
+ .stat-icon-wrapper {
+ width: 60px;
+ height: 60px;
+ }
+
+ .stat-modern-value {
+ font-size: var(--text-2xl);
+ }
+
+ .stat-modern-unit {
+ font-size: var(--text-base);
+ }
+
+ .stat-modern-label {
+ font-size: var(--text-sm);
+ }
+}
+
/* ========== 表格 ========== */
.table-container {
overflow-x: auto;
@@ -1348,11 +1512,11 @@ table {
th {
background: var(--active-bg);
- color: var(--primary-orange);
+ color: var(--primary-blue);
padding: var(--spacing-md);
text-align: left;
font-weight: var(--font-semibold);
- border-bottom: 2px solid var(--primary-orange);
+ border-bottom: 2px solid var(--primary-blue);
}
td {
@@ -1623,7 +1787,7 @@ tr:hover {
left: 0;
right: 0;
bottom: 0;
- background: linear-gradient(135deg, transparent, rgba(245, 158, 11, 0.1));
+ background: linear-gradient(135deg, transparent, rgba(25, 118, 210, 0.1));
opacity: 0;
transition: opacity var(--transition-base);
border-radius: var(--radius-2xl);
@@ -1648,7 +1812,7 @@ tr:hover {
left: -100%;
width: 100%;
height: 100%;
- background: linear-gradient(90deg, transparent, rgba(245, 158, 11, 0.2), transparent);
+ background: linear-gradient(90deg, transparent, rgba(25, 118, 210, 0.2), transparent);
transition: left 0.5s ease;
}
@@ -1675,7 +1839,7 @@ tr:hover {
top: 50%;
left: 50%;
transform: translate(-50%, -50%) scale(0);
- background: radial-gradient(circle, rgba(245, 158, 11, 0.3), transparent);
+ background: radial-gradient(circle, rgba(25, 118, 210, 0.3), transparent);
border-radius: 50%;
opacity: 0;
transition: all 0.5s ease;
@@ -1702,7 +1866,7 @@ tr:hover {
transform: translate(-50%, -50%) scale(0);
width: 60px;
height: 60px;
- background: rgba(245, 158, 11, 0.9);
+ background: rgba(25, 118, 210, 0.9);
border-radius: 50%;
opacity: 0;
transition: all 0.3s ease;
@@ -1743,7 +1907,7 @@ tr:hover {
bottom: 0;
width: 0;
height: 2px;
- background: var(--primary-orange);
+ background: var(--primary-blue);
transition: width 0.3s ease;
}
@@ -1756,14 +1920,14 @@ tr:hover {
0%, 100% {
box-shadow:
var(--shadow-md),
- 0 0 20px rgba(245, 158, 11, 0.3),
- inset 0 0 20px rgba(245, 158, 11, 0.1);
+ 0 0 20px rgba(25, 118, 210, 0.3),
+ inset 0 0 20px rgba(25, 118, 210, 0.1);
}
50% {
box-shadow:
var(--shadow-lg),
- 0 0 30px rgba(245, 158, 11, 0.5),
- inset 0 0 30px rgba(245, 158, 11, 0.2);
+ 0 0 30px rgba(25, 118, 210, 0.5),
+ inset 0 0 30px rgba(25, 118, 210, 0.2);
}
}
@@ -1774,7 +1938,7 @@ tr:hover {
/* 文字打字机效果类 */
.typewriter {
overflow: hidden;
- border-right: 2px solid var(--primary-orange);
+ border-right: 2px solid var(--primary-blue);
white-space: nowrap;
animation: typing 3.5s steps(40) 1s 1 normal both,
blink 0.75s step-end infinite;
@@ -1802,7 +1966,7 @@ tr::before {
top: 0;
width: 3px;
height: 0;
- background: var(--primary-orange);
+ background: var(--primary-blue);
transition: height var(--transition-base);
}
@@ -1817,10 +1981,10 @@ tr:hover::before {
@keyframes breathe {
0%, 100% {
- box-shadow: 0 0 20px rgba(245, 158, 11, 0.4);
+ box-shadow: 0 0 20px rgba(25, 118, 210, 0.4);
}
50% {
- box-shadow: 0 0 30px rgba(245, 158, 11, 0.7);
+ box-shadow: 0 0 30px rgba(25, 118, 210, 0.7);
}
}
@@ -1835,28 +1999,28 @@ tr:hover::before {
}
::-webkit-scrollbar-thumb {
- background: var(--primary-orange);
+ background: var(--primary-blue);
border-radius: var(--radius-full);
}
::-webkit-scrollbar-thumb:hover {
- background: var(--accent-amber);
+ background: var(--accent-cyan);
}
/* 选中文本样式 */
::selection {
- background: var(--primary-orange);
+ background: var(--primary-blue);
color: white;
}
::-moz-selection {
- background: var(--primary-orange);
+ background: var(--primary-blue);
color: white;
}
/* 焦点可见性优化 */
*:focus-visible {
- outline: 2px solid var(--primary-orange);
+ outline: 2px solid var(--primary-blue);
outline-offset: 2px;
border-radius: var(--radius-sm);
}
@@ -1986,7 +2150,7 @@ img.error {
}
body:not(.dark-theme) .theme-icon-light {
- color: var(--primary-orange);
+ color: var(--primary-blue);
transform: scale(1.2);
}
@@ -1995,10 +2159,82 @@ body:not(.dark-theme) .theme-icon-dark {
}
body.dark-theme .theme-icon-dark {
- color: var(--primary-orange);
+ color: var(--primary-blue);
transform: scale(1.2);
}
body.dark-theme .theme-icon-light {
opacity: 0.5;
}
+
+/* ========== 机器人工作流程可视化 ========== */
+.robot-workflow-visual {
+ margin-bottom: var(--spacing-2xl);
+}
+
+.workflow-step {
+ text-align: center;
+ transition: all var(--transition-base);
+ cursor: pointer;
+}
+
+.workflow-step:hover {
+ transform: translateY(-8px);
+}
+
+.workflow-icon {
+ width: 80px;
+ height: 80px;
+ border-radius: 50%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ margin: 0 auto var(--spacing-md);
+ box-shadow: var(--shadow-lg);
+ transition: all var(--transition-base);
+}
+
+.workflow-step:hover .workflow-icon {
+ box-shadow: var(--shadow-xl), 0 0 30px rgba(0,0,0,0.3);
+ transform: scale(1.1);
+}
+
+.workflow-number {
+ font-size: var(--text-lg);
+ font-weight: var(--font-bold);
+ color: var(--text-gray);
+ margin-bottom: var(--spacing-xs);
+}
+
+.workflow-step h4 {
+ font-size: var(--text-lg);
+ font-weight: var(--font-bold);
+ color: var(--text-light);
+ margin-bottom: var(--spacing-xs);
+}
+
+.workflow-step p {
+ font-size: var(--text-sm);
+ color: var(--text-gray);
+}
+
+@media (max-width: 1024px) {
+ .robot-workflow-visual > div {
+ grid-template-columns: repeat(3, 1fr) !important;
+ }
+}
+
+@media (max-width: 768px) {
+ .robot-workflow-visual > div {
+ grid-template-columns: repeat(2, 1fr) !important;
+ }
+
+ .workflow-icon {
+ width: 60px;
+ height: 60px;
+ }
+
+ .workflow-step h4 {
+ font-size: var(--text-base);
+ }
+}
diff --git a/web_frontend/web_result/order-classes/energy/index.html b/web_frontend/web_result/order-classes/energy/index.html
index 77cf81fa..38d973d1 100644
--- a/web_frontend/web_result/order-classes/energy/index.html
+++ b/web_frontend/web_result/order-classes/energy/index.html
@@ -6,6 +6,179 @@
光伏晶硅电池片印后AOI检测与分拣单元 - 能源订单班
+
+
+
@@ -208,82 +381,43 @@