feat(v3): 配色体系对齐 deepseek-harness Web(D7 视觉)

- 提取 dsh design-platform 官方色板为设计令牌:品牌蓝 #4176e6、bluish 灰阶、
  语义状态色、透明描边(rgba 0.04-0.1)
- 侧栏改近白(sidebar-fill),扁平化阴影,悬停/滚动条/缓动全部对齐 dsh
- 六视图旧硬编码蓝批量令牌化,视觉单一来源
This commit is contained in:
tzt
2026-09-01 21:48:05 +08:00
parent 1ae9ffb159
commit 943eecc5ef
26 changed files with 164 additions and 128 deletions
+27 -26
View File
@@ -1,6 +1,6 @@
<template>
<div class="app">
<!-- 深色侧边导航 -->
<!-- 侧边导航(dsh 风格:近白 + 透明描边) -->
<aside class="side">
<div class="brand">
<div class="brand-logo">🤖</div>
@@ -31,7 +31,7 @@
</template>
<script setup lang="ts">
// App.vue — 深色侧边栏壳 + 路由出口
// App.vue — 侧边栏壳(deepseek-harness 配色:sidebar-fill 近白 + 品牌蓝点缀)
const NAV = [
{ to: '/chat', icon: '💬', label: '对话' },
{ to: '/collaboration', icon: '🔄', label: '协作过程' },
@@ -48,13 +48,14 @@ const NAV = [
height: 100%;
}
/* ---------- 侧边栏 ---------- */
/* ---------- 侧边栏(dsh:specific-sidebar-fill 近白) ---------- */
.side {
width: 208px;
flex-shrink: 0;
display: flex;
flex-direction: column;
background: linear-gradient(180deg, var(--c-side-bg) 0%, var(--c-side-bg-2) 100%);
background: var(--c-side-bg);
border-right: 1px solid var(--c-side-border);
color: var(--c-side-text);
padding: 18px 12px 14px;
user-select: none;
@@ -64,9 +65,8 @@ const NAV = [
display: flex;
align-items: center;
gap: 10px;
padding: 4px 8px 18px;
border-bottom: 1px solid rgba(255, 255, 255, 0.07);
margin-bottom: 14px;
padding: 4px 8px 16px;
margin-bottom: 12px;
}
.brand-logo {
width: 38px;
@@ -74,43 +74,44 @@ const NAV = [
display: grid;
place-items: center;
font-size: 20px;
background: linear-gradient(135deg, #4f6ef7, #7c5cf5);
background: linear-gradient(135deg, var(--ds-blue-400), var(--ds-blue-500));
border-radius: 11px;
box-shadow: 0 4px 14px rgba(79, 110, 247, 0.45);
box-shadow: 0 3px 10px rgba(65, 118, 230, 0.35);
}
.brand-text { display: flex; flex-direction: column; line-height: 1.25; }
.brand-text b { color: #fff; font-size: 15px; letter-spacing: 0.5px; }
.brand-text span { font-size: 11px; color: var(--c-side-text); }
.brand-text { display: flex; flex-direction: column; line-height: 1.3; }
.brand-text b { color: var(--c-text); font-size: 15px; letter-spacing: 0.5px; }
.brand-text span { font-size: 11px; color: var(--c-caption); }
.nav { display: flex; flex-direction: column; gap: 3px; flex: 1; }
.nav { display: flex; flex-direction: column; gap: 2px; flex: 1; }
.nav-item {
display: flex;
align-items: center;
gap: 11px;
padding: 9px 12px;
padding: 8px 10px;
border-radius: 9px;
text-decoration: none;
color: var(--c-side-text);
font-size: 13.5px;
font-weight: 500;
position: relative;
transition: background 0.15s, color 0.15s;
transition: background 0.15s var(--ds-ease), color 0.15s var(--ds-ease);
}
.nav-item:hover { background: rgba(255, 255, 255, 0.055); color: #e6eaf4; }
.nav-item:hover { background: var(--c-side-hover); color: var(--c-text); }
.nav-item.router-link-active {
background: var(--c-side-active);
color: var(--c-side-text-active);
font-weight: 600;
}
.nav-item.router-link-active::before {
content: '';
position: absolute;
left: -12px;
top: 8px;
bottom: 8px;
top: 7px;
bottom: 7px;
width: 3px;
border-radius: 0 3px 3px 0;
background: var(--c-primary);
background: var(--c-accent);
}
.nav-icon {
width: 26px;
@@ -118,26 +119,25 @@ const NAV = [
display: grid;
place-items: center;
font-size: 15px;
background: rgba(255, 255, 255, 0.06);
background: var(--c-hover);
border-radius: 7px;
}
.nav-item.router-link-active .nav-icon { background: rgba(79, 110, 247, 0.35); }
.nav-item.router-link-active .nav-icon { background: var(--c-primary-soft); }
.side-foot {
display: flex;
align-items: center;
gap: 7px;
padding: 10px 8px 2px;
border-top: 1px solid rgba(255, 255, 255, 0.07);
padding: 12px 8px 2px;
font-size: 11px;
color: #7d879e;
color: var(--c-caption);
}
.foot-dot {
width: 7px;
height: 7px;
border-radius: 50%;
background: #34d399;
box-shadow: 0 0 6px #34d399;
background: var(--c-ok);
box-shadow: 0 0 6px rgba(34, 197, 94, 0.6);
}
/* ---------- 内容区 ---------- */
@@ -147,6 +147,7 @@ const NAV = [
height: 100%;
display: flex;
flex-direction: column;
background: var(--c-surface);
}
.content {
flex: 1;