diff --git a/apps/desktop/src/App.tsx b/apps/desktop/src/App.tsx index 7bff421..bf7a808 100644 --- a/apps/desktop/src/App.tsx +++ b/apps/desktop/src/App.tsx @@ -33,13 +33,13 @@ export default function App() { const content = useMemo(() => { switch (page) { case "overview": - return ; + return ; case "catalog": return ; case "my-cli": - return ; + return ; case "config": - return ; + return ; case "backup": return ; case "settings": @@ -49,7 +49,6 @@ export default function App() { return (
-
); diff --git a/apps/desktop/src/pages/Backup.tsx b/apps/desktop/src/pages/Backup.tsx index 0f799c9..a012af3 100644 --- a/apps/desktop/src/pages/Backup.tsx +++ b/apps/desktop/src/pages/Backup.tsx @@ -1,17 +1,22 @@ import { Archive } from "lucide-react"; -/** 备份与迁移(PRD §7):创建备份、查看内容、恢复。Wave 0 占位。 */ +/** 备份与迁移(PRD §7):创建备份、查看内容、恢复。空态按 v1.3 §3.7。 */ export function BackupPage() { return (
-

备份与迁移

+

还没有可备份的内容

- 备份功能在 Wave 4 落地。备份将明确标注是否包含敏感信息,密钥永不进备份。 + 安装 CLI 并完成配置后,可以在这里创建备份与迁移。密钥永不进备份。

-
diff --git a/apps/desktop/src/pages/Catalog.tsx b/apps/desktop/src/pages/Catalog.tsx index dafab11..eaadc5c 100644 --- a/apps/desktop/src/pages/Catalog.tsx +++ b/apps/desktop/src/pages/Catalog.tsx @@ -2,7 +2,6 @@ import { useMemo, useState } from "react"; import { Search } from "lucide-react"; import { useCatalog } from "../hooks/useCatalog"; import { StatusBadge } from "../components/StatusBadge"; -import { MonoChip } from "../components/MonoChip"; import { CliMonogram } from "../components/CliMonogram"; type StatusFilter = "all" | "installed" | "uninstalled" | "update"; @@ -90,17 +89,16 @@ export function CatalogPage() { {filtered.map((entry) => (
- +
{entry.name_zh}
{entry.vendor}
-

官方渠道安装 · 适配器随 Wave 1 落地

+

官方渠道安装 · 全平台支持

Windows · Linux - v1
))} diff --git a/apps/desktop/src/pages/ConfigCenter.tsx b/apps/desktop/src/pages/ConfigCenter.tsx index 778aeb7..ad213c8 100644 --- a/apps/desktop/src/pages/ConfigCenter.tsx +++ b/apps/desktop/src/pages/ConfigCenter.tsx @@ -1,17 +1,18 @@ import { SlidersHorizontal } from "lucide-react"; +import type { PageKey } from "../components/Sidebar"; -/** 配置中心(PRD §7):按 CLI 展示中文配置表单。Wave 0 占位。 */ -export function ConfigCenterPage() { +/** 配置中心(PRD §7):按 CLI 展示中文配置表单。空态按 v1.3 §3.7。 */ +export function ConfigCenterPage({ onNavigate }: { onNavigate: (p: PageKey) => void }) { return (
-

配置中心

+

还没有可配置的 CLI

- 中文配置表单在 Wave 2 落地。敏感字段将使用密码输入与系统密钥库。 + 安装 CLI 后,在这里用中文表单管理配置。敏感字段会用密码输入并存入系统密钥库。

-
diff --git a/apps/desktop/src/pages/MyCli.tsx b/apps/desktop/src/pages/MyCli.tsx index b423456..d96e926 100644 --- a/apps/desktop/src/pages/MyCli.tsx +++ b/apps/desktop/src/pages/MyCli.tsx @@ -1,17 +1,18 @@ import { SquareTerminal } from "lucide-react"; +import type { PageKey } from "../components/Sidebar"; -/** 我的 CLI(PRD §7):版本 / 路径 / 授权状态。Wave 0 尚无已安装 CLI,展示空态。 */ -export function MyCliPage() { +/** 我的 CLI(PRD §7):版本 / 路径 / 授权状态。空态按 v1.3 §3.7。 */ +export function MyCliPage({ onNavigate }: { onNavigate: (p: PageKey) => void }) { return (
-

暂无已安装 CLI

+

还没有安装任何 CLI

- 安装功能在 Wave 1 开放。届时这里会展示每个 CLI 的版本、路径与授权状态。 + 安装后,这里会展示每个 CLI 的版本、路径与授权状态。

-
diff --git a/apps/desktop/src/pages/Overview.tsx b/apps/desktop/src/pages/Overview.tsx index 0aca283..13677ba 100644 --- a/apps/desktop/src/pages/Overview.tsx +++ b/apps/desktop/src/pages/Overview.tsx @@ -1,12 +1,13 @@ import { useState } from "react"; -import { Activity, Archive, ChevronRight, Lock, Plus } from "lucide-react"; +import { Activity, Archive, Lock, Plus, ScanSearch } from "lucide-react"; import { useEnv } from "../hooks/useEnv"; import { useCatalog } from "../hooks/useCatalog"; import { KpiCard } from "../components/KpiCard"; import { MonoChip } from "../components/MonoChip"; import { StatusBadge } from "../components/StatusBadge"; import { CliMonogram } from "../components/CliMonogram"; -import type { PlatformEnv, RuntimeInfo } from "../ipc/types"; +import type { PlatformEnv, RuntimeInfo, RuntimeStatus, CatalogEntry } from "../ipc/types"; +import type { PageKey } from "../components/Sidebar"; /** 平台相关运行时集合(Windows 不看 apt,Linux 不看 winget) */ const WINDOWS_RUNTIMES = ["node", "npm", "python", "uv", "git", "winget"] as const; @@ -24,42 +25,61 @@ function runtimeProblems(env: PlatformEnv): { name: string; info: RuntimeInfo }[ return problems; } -function runtimeStatusText(status: string): string { +/** 本机环境运行时项四元组(v1.3 §3.1.6):状态点 + 名称 + 版本位 + 行动位 */ +function runtimeMeta(status: RuntimeStatus): { + dot: string; + missingText: string | null; + needsGuide: boolean; +} { switch (status) { - case "not_in_path": - return "不在 PATH"; + case "installed": + return { dot: "status-dot ok", missingText: null, needsGuide: false }; case "not_installed": - return "未安装"; + return { dot: "status-dot unknown", missingText: "未检测到", needsGuide: true }; + case "not_in_path": + return { dot: "status-dot warn breathe", missingText: "不在 PATH", needsGuide: false }; + case "permission_denied": + return { dot: "status-dot warn breathe", missingText: "无访问权限", needsGuide: false }; case "exec_failed": - return "执行失败"; + return { dot: "status-dot warn breathe", missingText: "执行失败", needsGuide: false }; case "version_unparseable": - return "版本未知"; + return { dot: "status-dot warn breathe", missingText: "版本未知", needsGuide: false }; default: - return "未知"; + return { dot: "status-dot unknown", missingText: "未知", needsGuide: false }; } } -function RuntimeItem({ name, info }: { name: string; info: RuntimeInfo }) { - const dotClass = - info.status === "installed" - ? "status-dot ok" - : info.status === "exec_failed" - ? "status-dot error" - : "status-dot warn"; +function RuntimeItem({ + name, + info, + onNavigate, +}: { + name: string; + info: RuntimeInfo; + onNavigate: (p: PageKey) => void; +}) { + const meta = runtimeMeta(info.status); return (
-
); } -function EnvPanel() { +function EnvPanel({ onNavigate }: { onNavigate: (p: PageKey) => void }) { const { env, loading, error } = useEnv(); const [showAllPath, setShowAllPath] = useState(false); @@ -122,7 +142,7 @@ function EnvPanel() { (key) => { const info = env.runtimes[key]; if (!info) return null; - return ; + return ; }, )} @@ -155,100 +175,222 @@ function EnvPanel() { ); } -/** 总览页(视觉规范 §3.1 + PRD §7):KPI + 最近诊断/快速操作 + CLI 状态网格 + 本机环境 */ -export function OverviewPage() { +/** 首跑空态引导插画(v1.3 §7:等距线框终端 + 集装箱 Dock,1px 线,霓虹点缀) */ +function OnboardingArt() { + return ( + + ); +} + +/** 首跑引导区(v1.3 §3.1.5:插画 + 三句式文案 + 主行动按钮) */ +function Onboarding({ onNavigate }: { onNavigate: (p: PageKey) => void }) { + return ( +
+
+ +
+
+

你的工具箱还是空的

+

+ 从目录安装第一个 Agent CLI,安装、配置、授权、诊断都帮你盯好。 +

+
+ + +
+
+
+ ); +} + +/** 最近诊断卡(v1.3 §3.1.2:无记录时展示空态,不渲染占位行与「查看全部」) */ +function DiagPanel() { + // Wave 0.5 尚无诊断引擎数据,恒为空态(语义按 §3.7,不虚构记录) + const records: { cli: string; text: string; time: string }[] = []; + return ( +
+
+

最近诊断

+
+ {records.length === 0 ? ( +
+ 暂无诊断记录 + +
+ ) : ( +
    + {records.map((r) => ( +
  • +
  • + ))} +
+ )} +
+ ); +} + +/** 快速操作卡(v1.3 §3.1.3:三按钮竖向操作组,创建备份依赖数据置灰) */ +function QuickActions({ + firstRun, + onNavigate, +}: { + firstRun: boolean; + onNavigate: (p: PageKey) => void; +}) { + return ( +
+

快速操作

+ + + +
+
最近安装
+

暂无记录

+
+

+

+
+ ); +} + +/** CLI 状态网格块(v1.3 §3.1.4;首跑精简为两行 + 安装入口,§3.1.5) */ +function CliBlock({ + entry, + compact, + onNavigate, +}: { + entry: CatalogEntry; + compact: boolean; + onNavigate: (p: PageKey) => void; +}) { + const installed = entry.status === "installed"; + return ( +
+
+ + {entry.name_zh} + +
+
+ {installed ? null : 未安装} +
+ {!compact && ( +
+ {installed ? ( + <> +
+ )} + {compact && ( +
+ +
+ )} +
+ ); +} + +interface OverviewProps { + onNavigate: (p: PageKey) => void; +} + +/** 总览页(视觉规范 §3.1 + PRD §7):首跑空态 / KPI + 诊断/快速操作 + CLI 状态网格 + 本机环境 */ +export function OverviewPage({ onNavigate }: OverviewProps) { const { env } = useEnv(); const { entries } = useCatalog(); + const installedCount = entries.filter((e) => e.status === "installed").length; + const firstRun = installedCount === 0; // 无安装且无诊断记录(当前无诊断引擎) + const warningCount = env ? runtimeProblems(env).length : 0; const warningNames = env ? runtimeProblems(env).map((p) => p.name) : []; return (
- {/* ① KPI 一排 4 张 */} -
- - - - 0 ? warningNames.join(" · ") : "环境正常"} - /> -
+ {/* ① KPI 一排 4 张(首跑空态隐藏,v1.3 §3.1.5) */} + {!firstRun && ( +
+ onNavigate("catalog") }} /> + + + 0 ? warningNames.join(" · ") : "环境正常"} + /> +
+ )} - {/* ② 中段:左 2/3 最近诊断 + 右 1/3 快速操作 */} + {/* ② 中段:诊断/引导 + 快速操作(超宽三栏见 global.css) */}
-
-
-

最近诊断

- -
-
    -
  • -
  • -
-
-
-

快速操作

- - - -
-
最近安装
-

暂无记录

-
-

-

-
+ {firstRun ? : } +
- {/* ③ 下段:CLI 状态网格通栏 */} + {/* ③ 下段:CLI 状态网格通栏(首跑精简:可安装列表 + 安装入口) */}
-

CLI 状态

- +

+ {firstRun ? `可安装的 CLI(${entries.length})` : "CLI 状态"} +

+ {/* 「管理全部 N 个」入口:仅当未全量展示时才渲染(v1.3 §3.1.4),本页恒全量展示,故不渲染 */}
{entries.map((entry) => ( -
-
- - {entry.name_zh} - -
-
- -
-
-
-
+ ))}
- {/* ④ 本机环境(真实检测结果,架构 §5) */} - + {/* ④ 本机环境(真实检测结果,架构 §5;超宽断点上提为第三栏) */} +
); } diff --git a/apps/desktop/src/pages/Settings.tsx b/apps/desktop/src/pages/Settings.tsx index 6cc303e..3e02e21 100644 --- a/apps/desktop/src/pages/Settings.tsx +++ b/apps/desktop/src/pages/Settings.tsx @@ -9,14 +9,14 @@ export function SettingsPage() {
下载源策略
-
选择 CLI 安装时的首选下载渠道(Wave 1 生效)
+
选择 CLI 安装时的首选下载渠道
官方渠道
自动检查更新
-
启动时检查 AgentDock 自身与 CLI 的更新(Wave 4 生效)
+
启动时检查 AgentDock 自身与 CLI 的更新
@@ -30,7 +30,7 @@ export function SettingsPage() {
日志与隐私
-
日志本地保存,敏感值自动脱敏(Wave 1 生效)
+
日志本地保存,敏感值自动脱敏
默认
diff --git a/apps/desktop/src/styles/global.css b/apps/desktop/src/styles/global.css index f99911c..4dc31d6 100644 --- a/apps/desktop/src/styles/global.css +++ b/apps/desktop/src/styles/global.css @@ -1,6 +1,6 @@ /* ============================================================ - * AgentDock 全局样式(Wave 0) - * 全部颜色/辉光/动效时长来自 tokens/(视觉规范 v1.2), + * AgentDock 全局样式(Wave 0.5) + * 全部颜色/辉光/动效时长来自 tokens/(视觉规范 v1.3), * 本文件不出现任何魔法色值;布局尺寸来自规范 §3.0/§6。 * ============================================================ */ @@ -12,18 +12,22 @@ } html, -body, -#root { +body { height: 100%; } +#root { + min-height: 100%; +} + body { font-family: var(--ad-font-ui); font-size: var(--ad-text-m-size); line-height: var(--ad-text-m-height); color: var(--ad-text-1); - background: var(--ad-bg-0); - overflow: hidden; + background: var(--ad-bg-gradient); /* v1.3 §3.0:静态深空渐变,网格已移除 */ + overflow-y: auto; /* v1.3 §3.0:主滚动容器 = 窗口,滚动条贴右缘 */ + overflow-x: hidden; -webkit-font-smoothing: antialiased; } @@ -31,25 +35,40 @@ button { font-family: inherit; } -/* ---------- 背景网格(§3.0:5% + 边缘羽化,低档静态) ---------- */ -.bg-grid { - position: fixed; - inset: 0; - z-index: 0; - pointer-events: none; - background-image: - linear-gradient(var(--ad-grid-color) 1px, transparent 1px), - linear-gradient(90deg, var(--ad-grid-color) 1px, transparent 1px); - background-size: var(--ad-grid-size) var(--ad-grid-size); - -webkit-mask-image: var(--ad-grid-mask); - mask-image: var(--ad-grid-mask); +/* ---------- 自定义滚动条(v1.3 §2.7:10px、灰蓝滑块、透明轨道、不发光) ---------- */ +::-webkit-scrollbar { + width: 10px; + height: 10px; +} + +::-webkit-scrollbar-track { + background: transparent; +} + +::-webkit-scrollbar-thumb { + background: var(--ad-scrollbar-thumb); + border-radius: 5px; + border: 2px solid transparent; + background-clip: padding-box; + min-height: 32px; +} + +::-webkit-scrollbar-thumb:hover { + background: var(--ad-scrollbar-thumb-hover); + background-clip: padding-box; +} + +/* 标准属性兜底(Firefox 等) */ +* { + scrollbar-width: thin; + scrollbar-color: var(--ad-scrollbar-thumb) transparent; } /* ---------- 应用外壳 ---------- */ .app-shell { position: relative; display: flex; - height: 100%; + min-height: 100vh; z-index: 1; } @@ -60,17 +79,29 @@ button { flex-direction: column; } -.app-content { - flex: 1; - overflow-y: auto; +/* 内容区与顶栏内区共用同一宽度体系(v1.3 §3.0:顶栏与内容区右缘对齐) */ +.app-content, +.header-inner { width: 100%; - max-width: 1440px; /* §6 宽阔断点锁宽居中 */ - margin: 0 auto; - padding: var(--ad-space-6) var(--ad-space-8); + max-width: var(--ad-frame-max); + margin-left: auto; + margin-right: auto; + padding-left: var(--ad-frame-pad-x); + padding-right: var(--ad-frame-pad-x); } -/* ---------- 侧边栏(§3.0) ---------- */ +.app-content { + flex: 1; + padding-top: var(--ad-space-6); + padding-bottom: var(--ad-space-6); +} + +/* ---------- 侧边栏(§3.0:232px 贴左,窗口滚动时保持固定) ---------- */ .sidebar { + position: sticky; + top: 0; + align-self: flex-start; + height: 100vh; width: 232px; flex-shrink: 0; display: flex; @@ -141,17 +172,23 @@ button { margin-left: auto; } -/* ---------- 顶栏(§3.0) ---------- */ +/* ---------- 顶栏(§3.0:通栏 56px,内区与内容区同一宽度体系,滚动时吸顶) ---------- */ .header { + position: sticky; + top: 0; + z-index: 10; height: 56px; flex-shrink: 0; + background: var(--ad-bg-0); + border-bottom: 1px solid var(--ad-border); +} + +.header-inner { + height: 100%; display: flex; align-items: center; justify-content: space-between; gap: var(--ad-space-4); - padding: 0 var(--ad-space-8); - background: var(--ad-bg-0); - border-bottom: 1px solid var(--ad-border); } .header-title { @@ -233,6 +270,8 @@ button { justify-content: center; gap: var(--ad-space-2); height: 36px; + min-width: 96px; /* v1.3 §2.6.1 */ + max-width: 360px; /* v1.3 §2.6.1:禁止通栏 */ padding: 0 var(--ad-space-4); border: 1px solid transparent; border-radius: var(--ad-radius-s); @@ -245,7 +284,7 @@ button { } .btn:disabled { - opacity: 0.55; + opacity: 0.4; /* v1.3 §3.7:无意义操作置灰 */ cursor: not-allowed; } @@ -524,8 +563,12 @@ button { gap: var(--ad-space-3); } +/* v1.3 §2.6.1:快速操作组定宽(组宽 = min(内容宽, 360px)),左对齐,不通栏 */ .quick-card .btn { - width: 100%; + width: min(100%, 360px); + justify-content: flex-start; + padding-left: var(--ad-space-4); + padding-right: var(--ad-space-4); } .recent-installs { @@ -592,10 +635,6 @@ button { color: var(--ad-text-1); } -.cli-block-version .mono-chip { - color: var(--ad-text-3); -} - .cli-block-auth { display: flex; align-items: center; @@ -604,6 +643,80 @@ button { font-size: var(--ad-text-xs-size); } +/* 未安装卡版本位(v1.3 §3.1.4:废止「—」chip,改灰字「未安装」) */ +.cli-block-version .version-missing { + color: var(--ad-text-3); + font-size: var(--ad-text-s-size); +} + +/* 首跑精简块:安装入口(v1.3 §3.1.5) */ +.cli-block-install { + display: flex; + align-items: center; + justify-content: flex-end; + margin-top: var(--ad-space-1); +} + +/* ---------- 总览:首跑空态引导区(v1.3 §3.1.5) ---------- */ +.onboarding { + display: grid; + grid-template-columns: auto 1fr; + gap: var(--ad-space-6); + align-items: center; + padding: var(--ad-space-6); + background: var(--ad-bg-1); + border: 1px solid var(--ad-border); + border-radius: var(--ad-radius-l); +} + +.onboarding-art { + display: flex; + align-items: center; + justify-content: center; + color: var(--ad-border-bright); +} + +.onboarding-copy { + display: flex; + flex-direction: column; + align-items: flex-start; + gap: var(--ad-space-3); +} + +.onboarding-title { + font-size: var(--ad-text-xl-size); + font-weight: var(--ad-text-xl-weight); + color: var(--ad-text-1); +} + +.onboarding-desc { + max-width: 480px; + color: var(--ad-text-2); + font-size: var(--ad-text-m-size); + line-height: 1.6; +} + +.onboarding-actions { + display: flex; + align-items: center; + gap: var(--ad-space-3); + margin-top: var(--ad-space-2); +} + +/* 诊断空态(v1.3 §3.1.2 / §3.7:无记录不渲染占位行) */ +.diag-empty { + display: flex; + flex-direction: column; + align-items: flex-start; + gap: var(--ad-space-3); + padding: var(--ad-space-5) var(--ad-space-2); +} + +.diag-empty-text { + color: var(--ad-text-2); + font-size: var(--ad-text-s-size); +} + /* ---------- 总览:本机环境 ---------- */ .env-panel { margin-top: var(--ad-space-6); @@ -640,10 +753,11 @@ button { word-break: break-all; } +/* 本机环境运行时项(v1.3 §3.1.6:四元组同构,点—名称—版本—行动,行高 28px) */ .runtime-grid { display: grid; - grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); - gap: var(--ad-space-3); + grid-template-columns: repeat(4, 1fr); + gap: var(--ad-space-4); align-content: start; } @@ -651,17 +765,32 @@ button { display: flex; align-items: center; gap: var(--ad-space-2); + min-height: 28px; + min-width: 0; } .runtime-name { - flex: 1; - color: var(--ad-text-2); + color: var(--ad-text-1); font-size: var(--ad-text-s-size); + white-space: nowrap; +} + +.runtime-version { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + min-width: 0; } .runtime-missing { - color: var(--ad-warning); + color: var(--ad-text-3); font-size: var(--ad-text-xs-size); + white-space: nowrap; +} + +.runtime-action { + margin-left: auto; + white-space: nowrap; } .path-block { @@ -903,8 +1032,8 @@ button { } } -/* ---------- 响应式(§6 三断点) ---------- */ -/* 紧凑 960–1199px:导航收起 64px,KPI 2×2,中段上下堆叠,状态网格 2 列 */ +/* ---------- 响应式(v1.3 §6 四断点) ---------- */ +/* 紧凑 960–1199px:导航收起 64px,KPI 2×2,中段上下堆叠 */ @media (max-width: 1199px) { .sidebar { width: 64px; @@ -942,7 +1071,7 @@ button { grid-template-columns: 1fr; } - .cli-status-grid { + .runtime-grid { grid-template-columns: repeat(2, 1fr); } @@ -983,11 +1112,48 @@ button { } } -/* 标准 1200–1599px:默认样式(完整导航、KPI 一排 4、诊断+快速 2:1、状态网格 3 列) */ -/* 宽阔 ≥1600px:内容锁 1440 居中,状态网格 4 列 */ -@media (min-width: 1600px) { - .cli-status-grid { - grid-template-columns: repeat(4, 1fr); +/* 标准 1200–1919px:默认(完整导航、KPI 一排 4、诊断+快速 2:1、内容区 max 1440 居中) + * 宽阔 1920–2559px:内容区 max 1760 居中(v1.3 §6) + * 超宽 ≥2560px:取消居中锁宽,内容区全宽、边距 48px(v1.3 §6) */ +@media (min-width: 1920px) and (max-width: 2559px) { + :root { + --ad-frame-max: 1760px; + } +} + +@media (min-width: 2560px) { + :root { + --ad-frame-max: none; + --ad-frame-pad-x: var(--ad-space-12); + } +} + +/* 超宽 ≥2560px:中段三栏(诊断 1/2 + 快速操作 1/4 + 本机环境 1/4),本机环境上提 */ +@media (min-width: 2560px) { + .overview { + display: grid; + grid-template-columns: 2fr 1fr 1fr; + column-gap: var(--ad-space-4); + row-gap: var(--ad-space-6); + } + + .overview .kpi-grid { + grid-column: 1 / -1; + margin-bottom: 0; + } + + .overview .overview-mid { + grid-column: 1 / 3; + margin-bottom: 0; + } + + .overview .cli-status-panel { + grid-column: 1 / -1; + } + + .overview .env-panel { + grid-column: 3; + margin-top: 0; } } diff --git a/apps/desktop/src/tokens/color.css b/apps/desktop/src/tokens/color.css index 411a201..73bae67 100644 --- a/apps/desktop/src/tokens/color.css +++ b/apps/desktop/src/tokens/color.css @@ -12,6 +12,10 @@ --ad-border: #22304A; /* 常规 1px 分隔线 */ --ad-border-bright: #35507A; /* 悬浮/选中的边框 */ + /* ---- 自定义滚动条(v1.3 §2.7:灰蓝滑块、透明轨道、不发光)---- */ + --ad-scrollbar-thumb: #1A2438; /* = --ad-bg-3 */ + --ad-scrollbar-thumb-hover: #35507A; /* = --ad-border-bright */ + /* ---- 霓虹强调色(全系统只有这两个霓虹色)---- */ --ad-primary: #00E5FF; /* 主操作、链接、聚焦、选中态(青) */ --ad-primary-hover: #4DEFFF; /* 主操作悬浮 */ diff --git a/apps/desktop/src/tokens/effects.css b/apps/desktop/src/tokens/effects.css index 572bea8..7a31a86 100644 --- a/apps/desktop/src/tokens/effects.css +++ b/apps/desktop/src/tokens/effects.css @@ -30,10 +30,8 @@ --ad-btn-accent-glow-hover: 0 0 14px rgba(255, 77, 219, 0.30), 0 0 36px rgba(255, 77, 219, 0.12); - /* ---- 背景网格(§3.0:要么可见要么不做)---- */ - --ad-grid-color: rgba(0, 229, 255, 0.05); /* 透明度固定 5%,施工员不许再调 */ - --ad-grid-size: 40px; - --ad-grid-mask: radial-gradient(120% 90% at 50% 40%, #000 30%, transparent 75%); + /* ---- 背景氛围(v1.3 §3.0:网格移除,降级为静态深空渐变,三档通用)---- */ + --ad-bg-gradient: radial-gradient(120% 90% at 50% 0%, #0D1420 0%, #070B14 70%); /* ---- 弹窗遮罩(§3.6)---- */ --ad-modal-mask: rgba(4, 7, 13, 0.7); diff --git a/apps/desktop/src/tokens/space.css b/apps/desktop/src/tokens/space.css index 3db43da..ba79eaf 100644 --- a/apps/desktop/src/tokens/space.css +++ b/apps/desktop/src/tokens/space.css @@ -13,6 +13,11 @@ --ad-space-6: 24px; --ad-space-8: 32px; --ad-space-10: 40px; + --ad-space-12: 48px; /* v1.3 §3.0 超宽断点内容区边距 */ + + /* ---- 内容区宽度体系(v1.3 §6:标准 1440 / 宽阔 1760 / 超宽全宽)---- */ + --ad-frame-max: 1440px; + --ad-frame-pad-x: var(--ad-space-8); /* ---- 圆角 ---- */ --ad-radius-s: 4px; /* 标签、小按钮、chip */ diff --git a/apps/desktop/src/tokens/tiers.css b/apps/desktop/src/tokens/tiers.css index 1575528..ac197a7 100644 --- a/apps/desktop/src/tokens/tiers.css +++ b/apps/desktop/src/tokens/tiers.css @@ -34,18 +34,6 @@ box-shadow: var(--ad-glow-balanced); } -/* 背景网格漂移(§4.8,60s 一周,仅高档/中档) */ -[data-fx-tier="low"] .grid-drift { - animation: none; -} -.grid-drift { - animation: grid-drift 60s linear infinite; -} -@keyframes grid-drift { - from { background-position: 0 0; } - to { background-position: 40px 40px; } -} - /* 状态点呼吸(§4.5:仅警告/错误/授权可能过期呼吸;低档停用) */ [data-fx-tier="low"] .status-dot-breathe { animation: none;