/* ============================================================ * AgentDock 全局样式(Wave 0.5) * 全部颜色/辉光/动效时长来自 tokens/(视觉规范 v1.3), * 本文件不出现任何魔法色值;布局尺寸来自规范 §3.0/§6。 * ============================================================ */ /* ---------- 重置与基础 ---------- */ * { box-sizing: border-box; margin: 0; padding: 0; } html, 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-gradient); /* v1.3 §3.0:静态深空渐变,网格已移除 */ overflow-y: auto; /* v1.3 §3.0:主滚动容器 = 窗口,滚动条贴右缘 */ overflow-x: hidden; -webkit-font-smoothing: antialiased; } button { font-family: inherit; } /* ---------- 自定义滚动条(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; min-height: 100vh; z-index: 1; } .app-main { flex: 1; min-width: 0; display: flex; flex-direction: column; } /* 内容区与顶栏内区共用同一宽度体系(v1.3 §3.0:顶栏与内容区右缘对齐) */ .app-content, .header-inner { width: 100%; 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); } .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; flex-direction: column; background: var(--ad-bg-1); border-right: 1px solid var(--ad-border); padding: var(--ad-space-3) 0 0; } .sidebar-nav { flex: 1; display: flex; flex-direction: column; gap: 2px; padding: 0 var(--ad-space-2); } /* 导航项:圆角背景块,选中态为「左缘生长光晕 + 内描边」,无独立指示条(v1.2) */ .nav-item { display: flex; align-items: center; gap: var(--ad-space-3); width: 100%; height: 40px; padding: 0 var(--ad-space-3); border: none; border-radius: var(--ad-radius-m); background: transparent; color: var(--ad-text-2); font-size: var(--ad-text-m-size); cursor: pointer; user-select: none; transition: background var(--ad-dur-fast) var(--ad-ease-out), color var(--ad-dur-fast) var(--ad-ease-out); } .nav-item:hover { background: var(--ad-bg-3); color: var(--ad-text-1); } .nav-item.active { background: var(--ad-nav-selected-bg); box-shadow: var(--ad-nav-selected-border); color: var(--ad-primary); } .nav-icon { flex-shrink: 0; } /* 底部引擎状态区(§3.0:48px + 顶部分隔线) */ .sidebar-engine { height: 48px; flex-shrink: 0; display: flex; align-items: center; gap: var(--ad-space-2); padding: 0 var(--ad-space-4); border-top: 1px solid var(--ad-border); color: var(--ad-text-2); font-size: var(--ad-text-s-size); white-space: nowrap; overflow: hidden; } .engine-version { margin-left: auto; } /* ---------- 顶栏(§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); } .header-title { font-size: var(--ad-text-xl-size); font-weight: var(--ad-text-xl-weight); white-space: nowrap; } .header-actions { display: flex; align-items: center; gap: var(--ad-space-3); } /* 搜索框(§3.0:限宽 320px,聚焦青边框 + 主辉光) */ .search-box { position: relative; width: 320px; } .search-box input { width: 100%; height: 36px; padding: 0 var(--ad-space-3) 0 36px; border: 1px solid var(--ad-border); border-radius: var(--ad-radius-m); background: var(--ad-bg-1); color: var(--ad-text-1); font-size: var(--ad-text-m-size); outline: none; transition: border-color var(--ad-dur-micro) var(--ad-ease-out), box-shadow var(--ad-dur-micro) var(--ad-ease-out); } .search-box input::placeholder { color: var(--ad-text-3); } .search-box input:focus { border-color: var(--ad-primary); box-shadow: var(--ad-glow-primary); } .search-icon { position: absolute; left: var(--ad-space-3); top: 50%; transform: translateY(-50%); color: var(--ad-text-3); pointer-events: none; } /* 环境警告 chip(§3.0:黄描边 + 黄点 + chevron,悬浮带辉光) */ .env-chip { display: inline-flex; align-items: center; gap: var(--ad-space-2); height: 28px; padding: 0 var(--ad-space-3); border: 1px solid var(--ad-warning-chip-border); border-radius: var(--ad-radius-s); background: var(--ad-warning-dim); color: var(--ad-warning); font-size: var(--ad-text-s-size); cursor: pointer; transition: border-color var(--ad-dur-fast) var(--ad-ease-out), box-shadow var(--ad-dur-fast) var(--ad-ease-out); } .env-chip:hover { border-color: var(--ad-warning); box-shadow: var(--ad-glow-warning); } /* ---------- 按钮 ---------- */ .btn { display: inline-flex; align-items: center; 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); font-size: var(--ad-text-m-size); font-weight: 500; cursor: pointer; transition: filter var(--ad-dur-fast) var(--ad-ease-out), box-shadow var(--ad-dur-fast) var(--ad-ease-out), border-color var(--ad-dur-fast) var(--ad-ease-out); } .btn:disabled { opacity: 0.4; /* v1.3 §3.7:无意义操作置灰 */ cursor: not-allowed; } /* 主按钮(§2.6 v1.2:内渐变 + 内高光 + 常驻弱辉光,hover 双层扩散辉光) */ .btn-primary { background: var(--ad-btn-primary-bg); box-shadow: var(--ad-btn-primary-inner), var(--ad-btn-primary-glow); color: var(--ad-btn-primary-text); } .btn-primary:hover:not(:disabled) { filter: brightness(1.08); box-shadow: var(--ad-btn-primary-inner), var(--ad-btn-primary-glow-hover); } .btn-primary:active:not(:disabled) { filter: brightness(0.94); box-shadow: var(--ad-btn-primary-inner); } /* 次按钮(§3.6) */ .btn-secondary { background: transparent; border-color: var(--ad-border-bright); color: var(--ad-text-1); } .btn-secondary:hover:not(:disabled) { border-color: var(--ad-primary); } /* 链接式按钮 */ .link-btn { display: inline-flex; align-items: center; gap: var(--ad-space-1); border: none; background: none; color: var(--ad-primary); font-size: var(--ad-text-s-size); cursor: pointer; transition: color var(--ad-dur-fast) var(--ad-ease-out); } .link-btn:hover { color: var(--ad-primary-hover); } .link-btn svg { transition: transform var(--ad-dur-fast) var(--ad-ease-out); } .link-btn:hover svg { transform: translateX(2px); } /* ---------- 通用小组件 ---------- */ /* Mono chip(§2.2) */ .mono-chip { display: inline-block; font-family: var(--ad-mono-chip-font); font-size: var(--ad-mono-chip-size); line-height: 1.5; background: var(--ad-mono-chip-bg); border: var(--ad-mono-chip-border); border-radius: var(--ad-mono-chip-radius); padding: var(--ad-mono-chip-padding); color: var(--ad-mono-chip-color); white-space: nowrap; } /* CLI 单色字母头像(§3.1.4 / §7) */ .monogram { display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; border: 1px solid var(--ad-border); border-radius: var(--ad-radius-m); background: var(--ad-bg-2); color: var(--ad-text-2); font-weight: 600; letter-spacing: 0.02em; } /* 状态角标(§3.1.4 / §3.2) */ .badge { display: inline-flex; align-items: center; height: 22px; padding: 0 var(--ad-space-2); border: 1px solid transparent; border-radius: var(--ad-radius-s); font-size: var(--ad-text-xs-size); white-space: nowrap; } .badge-installed { color: var(--ad-primary); border-color: var(--ad-primary-border); background: var(--ad-primary-dim); } .badge-update { color: var(--ad-accent); border-color: var(--ad-accent-border); background: var(--ad-accent-dim); box-shadow: var(--ad-glow-accent); } .badge-auth { color: var(--ad-attention); border-color: var(--ad-attention-border); background: var(--ad-attention-dim); } .badge-uninstalled { color: var(--ad-text-3); border-color: var(--ad-border); background: var(--ad-bg-1); } /* 状态点(§4.5:绿静态;警告/错误可呼吸;紫/灰静态) */ .status-dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; } .status-dot.ok { background: var(--ad-success); } .status-dot.warn { background: var(--ad-warning); } .status-dot.error { background: var(--ad-danger); } .status-dot.unknown { background: var(--ad-text-3); } .status-dot.breathe { animation: ad-breathe var(--ad-breathe-duration) var(--ad-ease-inout) infinite; } /* ---------- 面板 ---------- */ .panel { background: var(--ad-bg-1); border: 1px solid var(--ad-border); border-radius: var(--ad-radius-l); padding: var(--ad-space-5); } .panel-head { display: flex; align-items: center; justify-content: space-between; gap: var(--ad-space-4); margin-bottom: var(--ad-space-4); } .panel-title { font-size: var(--ad-text-l-size); font-weight: var(--ad-text-l-weight); } .panel-hint { color: var(--ad-text-2); font-size: var(--ad-text-xs-size); } .panel-empty { padding: var(--ad-space-5); color: var(--ad-text-2); font-size: var(--ad-text-s-size); } /* ---------- 总览:KPI 卡(§3.1.1) ---------- */ .kpi-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: var(--ad-space-4); margin-bottom: var(--ad-space-6); } .kpi-card { position: relative; overflow: hidden; padding: var(--ad-space-4) var(--ad-space-5) var(--ad-space-5); border-radius: var(--ad-radius-l); background: var(--ad-surface-card); box-shadow: var(--ad-card-highlight), var(--ad-shadow-panel); transition: transform var(--ad-dur-fast) var(--ad-ease-out); } .kpi-card:hover { transform: translateY(-2px); } .kpi-bar { position: absolute; top: 0; left: 0; right: 0; height: 2px; } .kpi-value { font-size: var(--ad-text-num-size); line-height: var(--ad-text-num-height); font-weight: var(--ad-text-num-weight); } .kpi-label { margin-top: 2px; color: var(--ad-text-2); font-size: var(--ad-text-s-size); } .kpi-subtitle { margin-top: var(--ad-space-2); color: var(--ad-text-2); font-size: var(--ad-text-xs-size); } /* ---------- 总览:中段(诊断 + 快速操作) ---------- */ .overview-mid { display: grid; grid-template-columns: 2fr 1fr; gap: var(--ad-space-4); margin-bottom: var(--ad-space-6); } .diag-row { display: flex; align-items: center; gap: var(--ad-space-3); min-height: 48px; padding: 0 var(--ad-space-2); border-bottom: 1px solid var(--ad-border); } .diag-row:last-child { border-bottom: none; } .diag-cli { color: var(--ad-text-1); font-size: var(--ad-text-m-size); white-space: nowrap; } .diag-text { color: var(--ad-text-2); font-size: var(--ad-text-s-size); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .diag-time { margin-left: auto; color: var(--ad-text-2); font-size: var(--ad-text-xs-size); white-space: nowrap; } .quick-card { display: flex; flex-direction: column; gap: var(--ad-space-3); } /* v1.3 §2.6.1:快速操作组定宽(组宽 = min(内容宽, 360px)),左对齐,不通栏 */ .quick-card .btn { width: min(100%, 360px); justify-content: flex-start; padding-left: var(--ad-space-4); padding-right: var(--ad-space-4); } .recent-installs { margin-top: var(--ad-space-2); } .group-label { color: var(--ad-text-3); font-size: var(--ad-text-xs-size); } .group-empty { padding: var(--ad-space-2) 0; color: var(--ad-text-2); font-size: var(--ad-text-s-size); } .safety-note { display: flex; align-items: center; gap: var(--ad-space-2); margin-top: auto; padding-top: var(--ad-space-3); border-top: 1px solid var(--ad-border); color: var(--ad-text-2); font-size: var(--ad-text-xs-size); } /* ---------- 总览:CLI 状态网格(§3.1.4) ---------- */ .cli-status-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: var(--ad-space-4); } .cli-block { display: flex; flex-direction: column; gap: var(--ad-space-2); padding: var(--ad-space-4); background: var(--ad-bg-1); border: 1px solid var(--ad-border); border-radius: var(--ad-radius-m); transition: border-color var(--ad-dur-fast) var(--ad-ease-out); } .cli-block:hover { border-color: var(--ad-border-bright); } .cli-block-top { display: flex; align-items: center; gap: var(--ad-space-3); } .cli-block-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--ad-text-m-size); color: var(--ad-text-1); } .cli-block-auth { display: flex; align-items: center; gap: var(--ad-space-2); color: var(--ad-text-2); 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); } .env-grid { display: grid; grid-template-columns: 1.1fr 1fr; gap: var(--ad-space-6); } .env-basic { display: flex; flex-direction: column; gap: var(--ad-space-3); } .env-row { display: flex; align-items: baseline; gap: var(--ad-space-3); } .env-key { flex-shrink: 0; width: 64px; color: var(--ad-text-2); font-size: var(--ad-text-s-size); } .env-val { color: var(--ad-text-1); font-size: var(--ad-text-m-size); word-break: break-all; } /* 本机环境运行时项(v1.3 §3.1.6:四元组同构,点—名称—版本—行动,行高 28px) */ .runtime-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: var(--ad-space-4); align-content: start; } .runtime-item { display: flex; align-items: center; gap: var(--ad-space-2); min-height: 28px; min-width: 0; } .runtime-name { 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-text-3); font-size: var(--ad-text-xs-size); white-space: nowrap; } .runtime-action { margin-left: auto; white-space: nowrap; } .path-block { margin-top: var(--ad-space-5); padding-top: var(--ad-space-4); border-top: 1px solid var(--ad-border); } .path-head { display: flex; align-items: center; gap: var(--ad-space-3); margin-bottom: var(--ad-space-2); } .path-title { display: flex; align-items: center; gap: var(--ad-space-2); color: var(--ad-text-2); font-size: var(--ad-text-s-size); } .path-entry { padding: var(--ad-space-1) 0; color: var(--ad-text-2); font-size: var(--ad-text-xs-size); font-family: var(--ad-font-mono); word-break: break-all; } /* ---------- CLI 目录(§3.2) ---------- */ .catalog-toolbar { display: flex; align-items: center; gap: var(--ad-space-4); flex-wrap: wrap; margin-bottom: var(--ad-space-5); } .filter-group { display: flex; align-items: center; gap: var(--ad-space-2); } .pill { height: 32px; padding: 0 var(--ad-space-3); border: 1px solid var(--ad-border); border-radius: 16px; background: transparent; color: var(--ad-text-2); font-size: var(--ad-text-s-size); cursor: pointer; transition: border-color var(--ad-dur-fast) var(--ad-ease-out), color var(--ad-dur-fast) var(--ad-ease-out); } .pill:hover { border-color: var(--ad-border-bright); color: var(--ad-text-1); } .pill.active { border-color: var(--ad-primary); color: var(--ad-primary); background: var(--ad-primary-dim); } .catalog-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: var(--ad-space-4); } .catalog-card { display: flex; flex-direction: column; gap: var(--ad-space-3); padding: var(--ad-space-5); background: var(--ad-bg-1); border: 1px solid var(--ad-border); border-radius: var(--ad-radius-m); transition: border-color var(--ad-dur-fast) var(--ad-ease-out), box-shadow var(--ad-dur-fast) var(--ad-ease-out); } .catalog-card:hover { border-color: var(--ad-primary); box-shadow: var(--ad-glow-primary); } .catalog-card-top { display: flex; align-items: center; gap: var(--ad-space-3); } .catalog-card-head { min-width: 0; } .catalog-card-name { font-size: var(--ad-text-l-size); font-weight: var(--ad-text-l-weight); color: var(--ad-text-1); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .catalog-card-vendor { color: var(--ad-text-2); font-size: var(--ad-text-s-size); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .catalog-card-desc { color: var(--ad-text-2); font-size: var(--ad-text-s-size); line-height: 1.5; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; } .catalog-card-bottom { display: flex; align-items: center; gap: var(--ad-space-3); margin-top: auto; } .catalog-platforms { margin-left: auto; color: var(--ad-text-3); font-size: var(--ad-text-xs-size); white-space: nowrap; } .catalog-empty { grid-column: 1 / -1; } /* ---------- 占位页(Wave 0 页面) ---------- */ .placeholder-page { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--ad-space-4); min-height: 60vh; text-align: center; } .placeholder-icon { color: var(--ad-text-3); } .placeholder-title { font-size: var(--ad-text-xl-size); font-weight: var(--ad-text-xl-weight); } .placeholder-desc { max-width: 480px; color: var(--ad-text-2); font-size: var(--ad-text-m-size); } /* ---------- 设置页 ---------- */ .settings-page { max-width: 720px; } .settings-group { margin-top: var(--ad-space-4); background: var(--ad-bg-1); border: 1px solid var(--ad-border); border-radius: var(--ad-radius-l); } .setting-row { display: flex; align-items: center; justify-content: space-between; gap: var(--ad-space-4); padding: var(--ad-space-4) var(--ad-space-5); border-bottom: 1px solid var(--ad-border); } .setting-row:last-child { border-bottom: none; } .setting-label { color: var(--ad-text-1); font-size: var(--ad-text-m-size); } .setting-hint { margin-top: 2px; color: var(--ad-text-2); font-size: var(--ad-text-xs-size); } .setting-value { flex-shrink: 0; color: var(--ad-text-2); font-size: var(--ad-text-s-size); } .settings-page-foot { display: flex; align-items: center; gap: var(--ad-space-2); margin-top: var(--ad-space-5); color: var(--ad-text-2); font-size: var(--ad-text-xs-size); } /* ---------- 页面切换动效(§4.2) ---------- */ .page-enter { animation: page-in var(--ad-dur-med) var(--ad-ease-out); } @keyframes page-in { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } } /* ---------- 响应式(v1.3 §6 四断点) ---------- */ /* 紧凑 960–1199px:导航收起 64px,KPI 2×2,中段上下堆叠 */ @media (max-width: 1199px) { .sidebar { width: 64px; padding: var(--ad-space-3) 0 0; } .sidebar-nav { padding: 0 var(--ad-space-2); } .nav-item { justify-content: center; padding: 0; } .nav-label { display: none; } .sidebar-engine { justify-content: center; padding: 0; } .engine-text, .engine-version { display: none; } .kpi-grid { grid-template-columns: repeat(2, 1fr); } .overview-mid { grid-template-columns: 1fr; } .runtime-grid { grid-template-columns: repeat(2, 1fr); } .env-grid { grid-template-columns: 1fr; } } /* 紧凑断点搜索框收缩为 36px 图标按钮 */ @media (max-width: 1199px) { .search-box { width: 36px; } .search-box input { padding: 0; border-color: transparent; background: transparent; cursor: pointer; } .search-box input::placeholder { color: transparent; } .search-box:focus-within { width: 240px; } .search-box:focus-within input { padding: 0 var(--ad-space-3) 0 36px; border-color: var(--ad-border); background: var(--ad-bg-1); } .search-icon { left: 10px; } } /* 标准 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; grid-row: 2; margin-bottom: 0; } .overview .cli-status-panel { grid-column: 1 / -1; } .overview .env-panel { grid-column: 3; grid-row: 2; margin-top: 0; } } /* 窗口高度 < 700px:顶栏 44px,KPI 大数字缩小 */ @media (max-height: 699px) { .header { height: 44px; } .kpi-value { font-size: 22px; line-height: 28px; } } /* 低档/减弱动效下呼吸灯停用(tiers.css 已兜底 animation,此处补充过渡抑制) */ [data-fx-tier="low"] .kpi-card:hover { transform: none; } /* ============================================================ * Wave 2:CLI 详情页 / 安装确认弹窗 / 配置表单 / 诊断结果 * 全部颜色/辉光/时长来自 tokens/(视觉规范 v1.2 §3.3–3.5 + v1.3) * ============================================================ */ /* 授权状态点(未授权 = 紫,静态,不发光不呼吸,§3.3) */ .status-dot.auth { background: var(--ad-attention); } /* ---------- CLI 详情页 ---------- */ .cli-detail { max-width: var(--ad-frame-max); margin: 0 auto; } .detail-back { margin-bottom: var(--ad-space-4); } .cli-head { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--ad-space-6); padding: var(--ad-space-6); margin-bottom: var(--ad-space-5); } .cli-head-main { display: flex; align-items: flex-start; gap: var(--ad-space-4); min-width: 0; } .cli-head-info { min-width: 0; display: flex; flex-direction: column; gap: var(--ad-space-2); } .cli-head-name { font-size: var(--ad-text-xl-size); font-weight: var(--ad-text-xl-weight); } .cli-head-vendor { color: var(--ad-text-2); font-size: var(--ad-text-s-size); } .cli-head-license { color: var(--ad-text-3); } .cli-head-meta { display: flex; align-items: center; flex-wrap: wrap; gap: var(--ad-space-2); margin-top: var(--ad-space-1); } .status-badge-mini { color: var(--ad-text-2); font-size: var(--ad-text-xs-size); } .cli-head-path { max-width: 420px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .cli-head-unconfirmed { color: var(--ad-text-3); font-size: var(--ad-text-xs-size); } .cli-head-side { display: flex; flex-direction: column; align-items: flex-end; gap: var(--ad-space-3); flex-shrink: 0; } .auth-light { display: inline-flex; align-items: center; gap: var(--ad-space-2); } .auth-light-text { color: var(--ad-text-1); font-size: var(--ad-text-s-size); } .cli-head-actions { display: flex; align-items: center; gap: var(--ad-space-3); } /* 危险文字按钮(§3.3:卸载 = 文字按钮,悬停变红) */ .btn-text-danger { display: inline-flex; align-items: center; gap: var(--ad-space-2); height: 36px; padding: 0 var(--ad-space-2); border: none; background: none; color: var(--ad-text-2); font-size: var(--ad-text-m-size); cursor: pointer; transition: color var(--ad-dur-fast) var(--ad-ease-out); } .btn-text-danger:hover:not(:disabled) { color: var(--ad-danger); } .btn-text-danger:disabled { opacity: 0.4; cursor: not-allowed; } /* ---------- 标签页(§3.3:底部 2px 青条 + 青色文字) ---------- */ .tabs { display: flex; align-items: center; gap: var(--ad-space-5); border-bottom: 1px solid var(--ad-border); margin-bottom: var(--ad-space-5); } .tab { position: relative; height: 40px; padding: 0 var(--ad-space-2); border: none; background: none; color: var(--ad-text-2); font-size: var(--ad-text-m-size); cursor: pointer; transition: color var(--ad-dur-fast) var(--ad-ease-out); } .tab:hover { color: var(--ad-text-1); } .tab.active { color: var(--ad-primary); } .tab.active::after { content: ""; position: absolute; left: 0; right: 0; bottom: -1px; height: 2px; background: var(--ad-primary); } .cli-detail-body { max-width: 720px; } /* ---------- 概览 / 文档块 ---------- */ .detail-block { margin-bottom: var(--ad-space-5); } .detail-block-title { display: flex; align-items: center; gap: var(--ad-space-2); font-size: var(--ad-text-l-size); font-weight: var(--ad-text-l-weight); margin-bottom: var(--ad-space-3); } .detail-block-text { color: var(--ad-text-2); font-size: var(--ad-text-m-size); line-height: 1.6; } .detail-channels { list-style: none; display: flex; flex-direction: column; gap: var(--ad-space-2); } .detail-channel { display: flex; align-items: center; flex-wrap: wrap; gap: var(--ad-space-2); } .detail-channel-pkg { color: var(--ad-text-2); font-size: var(--ad-text-xs-size); } .detail-note { display: flex; align-items: flex-start; gap: var(--ad-space-2); color: var(--ad-text-2); font-size: var(--ad-text-s-size); padding: var(--ad-space-4); border: 1px solid var(--ad-border); border-radius: var(--ad-radius-m); background: var(--ad-bg-1); } .detail-commands { list-style: none; display: flex; flex-direction: column; gap: var(--ad-space-3); } .detail-command { display: flex; align-items: center; gap: var(--ad-space-3); } .detail-command-desc { color: var(--ad-text-2); font-size: var(--ad-text-s-size); } /* ---------- 诊断结果(§3.5) ---------- */ .diag-summary { display: flex; align-items: center; gap: var(--ad-space-3); padding: var(--ad-space-4); margin-bottom: var(--ad-space-4); background: var(--ad-bg-1); border: 1px solid var(--ad-border); border-radius: var(--ad-radius-m); font-size: var(--ad-text-m-size); } .diag-finding { display: flex; align-items: stretch; margin-bottom: var(--ad-space-3); background: var(--ad-bg-1); border: 1px solid var(--ad-border); border-radius: var(--ad-radius-m); overflow: hidden; } .diag-sev-bar { width: 3px; flex-shrink: 0; } .diag-sev-bar.diag-sev-info, .diag-sev-tag.diag-sev-info { background: var(--ad-attention); color: var(--ad-attention); } .diag-sev-bar.diag-sev-warn, .diag-sev-tag.diag-sev-warn { background: var(--ad-warning); color: var(--ad-warning); } .diag-sev-bar.diag-sev-error, .diag-sev-tag.diag-sev-error { background: var(--ad-danger); color: var(--ad-danger); } .diag-finding-body { flex: 1; padding: var(--ad-space-4); display: flex; flex-direction: column; gap: var(--ad-space-2); } .diag-finding-head { display: flex; align-items: center; gap: var(--ad-space-2); } .diag-sev-tag { display: inline-flex; align-items: center; height: 20px; padding: 0 var(--ad-space-2); border-radius: var(--ad-radius-s); font-size: var(--ad-text-xs-size); background: transparent; } .diag-finding-rule { color: var(--ad-text-3); font-family: var(--ad-font-mono); font-size: var(--ad-text-xs-size); } .diag-finding-msg { color: var(--ad-text-1); font-size: var(--ad-text-m-size); line-height: 1.5; } .diag-evidence-toggle { align-self: flex-start; } .diag-evidence { padding: var(--ad-space-3); background: var(--ad-bg-0); border: 1px solid var(--ad-border); border-radius: var(--ad-radius-s); font-family: var(--ad-font-mono); font-size: var(--ad-text-xs-size); color: var(--ad-text-2); white-space: pre-wrap; word-break: break-all; } /* ---------- 弹窗(§3.6) ---------- */ .modal-mask { position: fixed; inset: 0; z-index: 100; display: flex; align-items: center; justify-content: center; background: var(--ad-modal-mask); } .modal { width: min(560px, calc(100vw - 48px)); max-height: calc(100vh - 96px); display: flex; flex-direction: column; background: var(--ad-bg-2); border-radius: var(--ad-radius-l); box-shadow: var(--ad-shadow-pop); border: 1px solid var(--ad-border); } .modal-head { display: flex; align-items: center; justify-content: space-between; padding: var(--ad-space-4) var(--ad-space-5); border-bottom: 1px solid var(--ad-border); } .modal-title { font-size: var(--ad-text-l-size); font-weight: var(--ad-text-l-weight); } .modal-close { display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; border: none; background: none; color: var(--ad-text-2); cursor: pointer; border-radius: var(--ad-radius-s); } .modal-close:hover { color: var(--ad-text-1); background: var(--ad-bg-3); } .modal-body { padding: var(--ad-space-5); overflow-y: auto; } .modal-foot { display: flex; align-items: center; justify-content: flex-end; gap: var(--ad-space-3); padding: var(--ad-space-4) var(--ad-space-5); border-top: 1px solid var(--ad-border); } /* ---------- 确认弹窗内容 ---------- */ .confirm-body { display: flex; flex-direction: column; gap: var(--ad-space-4); } .confirm-section { display: flex; flex-direction: column; gap: var(--ad-space-2); } .confirm-label { color: var(--ad-text-2); font-size: var(--ad-text-xs-size); } .confirm-text { color: var(--ad-text-1); font-size: var(--ad-text-m-size); } .confirm-empty { color: var(--ad-text-3); font-size: var(--ad-text-s-size); } .confirm-cmd { padding: var(--ad-space-3); background: var(--ad-bg-0); border: 1px solid var(--ad-border); border-radius: var(--ad-radius-s); overflow-x: auto; } .confirm-files { display: flex; flex-wrap: wrap; gap: var(--ad-space-2); } .confirm-note { color: var(--ad-warning); font-size: var(--ad-text-xs-size); } /* ---------- 流式执行日志 ---------- */ .run-log { display: flex; flex-direction: column; gap: var(--ad-space-1); max-height: 320px; overflow-y: auto; font-family: var(--ad-font-mono); font-size: var(--ad-text-xs-size); } .run-log-wait { display: flex; align-items: center; gap: var(--ad-space-2); color: var(--ad-text-2); } .run-log-line { display: flex; align-items: flex-start; gap: var(--ad-space-2); color: var(--ad-text-2); word-break: break-all; white-space: pre-wrap; } .run-log-line.step { color: var(--ad-primary); } .run-log-line.stderr { color: var(--ad-warning); } .run-log-line.error { color: var(--ad-danger); } .spin { animation: ad-spin 1.2s linear infinite; } @keyframes ad-spin { to { transform: rotate(360deg); } } /* ---------- 配置表单(§3.4) ---------- */ .config-form { display: flex; flex-direction: column; gap: var(--ad-space-5); max-width: 640px; } .field { display: flex; flex-direction: column; gap: var(--ad-space-2); } .field-label { color: var(--ad-text-2); font-size: var(--ad-text-s-size); } .field-required { color: var(--ad-primary); } .field-control { position: relative; display: flex; align-items: center; } .field-control input { width: 100%; height: 36px; padding: 0 var(--ad-space-3); border: 1px solid var(--ad-border); border-radius: var(--ad-radius-m); background: var(--ad-bg-0); color: var(--ad-text-1); font-size: var(--ad-text-m-size); outline: none; transition: border-color var(--ad-dur-micro) var(--ad-ease-out), box-shadow var(--ad-dur-micro) var(--ad-ease-out); } .field-control input::placeholder { color: var(--ad-text-3); } .field-control input:focus { border-color: var(--ad-primary); box-shadow: var(--ad-glow-primary); } .field-control input[type="password"] { padding-right: 40px; } .field-lock { position: absolute; left: var(--ad-space-3); color: var(--ad-text-2); pointer-events: none; } .field-control .field-lock + input { padding-left: 32px; } .field-eye { position: absolute; right: var(--ad-space-2); display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; border: none; background: none; color: var(--ad-text-2); cursor: pointer; } .field-eye:hover { color: var(--ad-text-1); } .field-help { color: var(--ad-text-2); font-size: var(--ad-text-xs-size); } .field-keyring-note { color: var(--ad-attention); } .config-file-info { display: flex; align-items: center; flex-wrap: wrap; gap: var(--ad-space-2); padding-top: var(--ad-space-4); border-top: 1px solid var(--ad-border); color: var(--ad-text-2); font-size: var(--ad-text-xs-size); } .config-savebar { position: sticky; bottom: 0; display: flex; align-items: center; justify-content: space-between; gap: var(--ad-space-4); padding: var(--ad-space-4) 0; background: linear-gradient(180deg, transparent, var(--ad-bg-0) 40%); } .config-save-msg { display: flex; flex-direction: column; gap: var(--ad-space-1); font-size: var(--ad-text-xs-size); } .save-ok { display: inline-flex; align-items: center; gap: var(--ad-space-1); color: var(--ad-success); } .save-detail { color: var(--ad-text-2); } .save-error { color: var(--ad-danger); } /* ============================================================ * Wave 2.1:安装进度 / 配置校验 / 详情信息 / 目录真机状态 / 我的 CLI * 全部颜色来自 tokens/ * ============================================================ */ /* ---------- 执行进度三阶段(安装弹窗) ---------- */ .run-body { display: flex; flex-direction: column; gap: var(--ad-space-4); } .run-phases { display: flex; align-items: center; gap: var(--ad-space-2); } .run-phase { display: flex; align-items: center; gap: var(--ad-space-2); color: var(--ad-text-3); font-size: var(--ad-text-s-size); } .run-phase-dot { display: inline-flex; align-items: center; justify-content: center; width: 20px; height: 20px; border-radius: 50%; border: 1px solid var(--ad-border); font-size: var(--ad-text-xs-size); } .run-phase.done { color: var(--ad-success); } .run-phase.done .run-phase-dot { border-color: var(--ad-success); color: var(--ad-success); } .run-phase.active { color: var(--ad-primary); } .run-phase.active .run-phase-dot { border-color: var(--ad-primary); color: var(--ad-primary); box-shadow: var(--ad-glow-primary); } .run-result { display: flex; align-items: center; flex-wrap: wrap; gap: var(--ad-space-2); padding: var(--ad-space-3) var(--ad-space-4); border-radius: var(--ad-radius-m); font-size: var(--ad-text-s-size); } .run-result.success { color: var(--ad-success); border: 1px solid var(--ad-border); background: var(--ad-bg-1); } .run-result.failed { color: var(--ad-danger); border: 1px solid var(--ad-border); background: var(--ad-bg-1); } .run-result-version { color: var(--ad-text-2); font-family: var(--ad-font-mono); font-size: var(--ad-text-xs-size); word-break: break-all; } /* ---------- 详情概览:基本信息表 + 官方链接 ---------- */ .detail-meta { display: flex; flex-direction: column; gap: var(--ad-space-2); } .detail-meta-row { display: flex; align-items: center; gap: var(--ad-space-3); } .detail-meta-label { width: 88px; flex-shrink: 0; color: var(--ad-text-2); font-size: var(--ad-text-s-size); } .detail-meta-value { display: flex; align-items: center; flex-wrap: wrap; gap: var(--ad-space-2); min-width: 0; color: var(--ad-text-1); font-size: var(--ad-text-m-size); } .detail-links { display: flex; gap: var(--ad-space-4); } .detail-link { color: var(--ad-primary); font-size: var(--ad-text-m-size); text-decoration: none; } .detail-link:hover { text-decoration: underline; } .detail-doc-footer { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: var(--ad-space-3); padding-top: var(--ad-space-4); border-top: 1px solid var(--ad-border); } .detail-doc-meta { color: var(--ad-text-3); font-size: var(--ad-text-xs-size); } /* ---------- 配置表单:下拉 + 官方链接 + 校验结果 ---------- */ .field-select { width: 100%; height: 36px; padding: 0 var(--ad-space-3); border: 1px solid var(--ad-border); border-radius: var(--ad-radius-m); background: var(--ad-bg-0); color: var(--ad-text-1); font-size: var(--ad-text-m-size); outline: none; } .field-select:focus { border-color: var(--ad-primary); box-shadow: var(--ad-glow-primary); } .field-docs-link { display: inline-flex; align-items: center; gap: 2px; margin-left: var(--ad-space-2); color: var(--ad-primary); text-decoration: none; } .field-docs-link:hover { text-decoration: underline; } .verify-ok { display: inline-flex; align-items: flex-start; gap: var(--ad-space-1); color: var(--ad-success); font-size: var(--ad-text-xs-size); } .verify-fail { display: inline-flex; align-items: flex-start; gap: var(--ad-space-1); color: var(--ad-danger); font-size: var(--ad-text-xs-size); } /* ---------- 目录真机版本位 ---------- */ .catalog-version { display: inline-flex; align-items: center; gap: var(--ad-space-2); } /* ---------- 我的 CLI 列表 ---------- */ .mycli { max-width: var(--ad-frame-max); margin: 0 auto; } .mycli-list { padding: var(--ad-space-4); } .mycli-row { display: flex; align-items: center; gap: var(--ad-space-3); width: 100%; padding: var(--ad-space-3) var(--ad-space-2); border: none; border-bottom: 1px solid var(--ad-border); background: none; cursor: pointer; text-align: left; } .mycli-row:last-child { border-bottom: none; } .mycli-row:hover { background: var(--ad-bg-3); } .mycli-row-main { display: flex; flex-direction: column; gap: 2px; min-width: 0; } .mycli-row-name { color: var(--ad-text-1); font-size: var(--ad-text-m-size); } .mycli-row-version { display: inline-flex; align-items: center; gap: var(--ad-space-2); color: var(--ad-text-2); font-size: var(--ad-text-xs-size); } .mycli-row-path { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .mycli-auth { display: inline-flex; align-items: center; gap: var(--ad-space-2); color: var(--ad-text-2); font-size: var(--ad-text-xs-size); white-space: nowrap; } .mycli-row-arrow { color: var(--ad-text-3); } /* ---------- 错误边界(防黑屏) ---------- */ .crash-screen { display: flex; flex-direction: column; align-items: flex-start; gap: var(--ad-space-4); padding: var(--ad-space-8); } .crash-title { font-size: var(--ad-text-xl-size); font-weight: var(--ad-text-xl-weight); } .crash-desc { color: var(--ad-text-2); font-size: var(--ad-text-m-size); } .crash-detail { color: var(--ad-text-3); font-family: var(--ad-font-mono); font-size: var(--ad-text-xs-size); word-break: break-all; } /* ---------- 配置表单三层分组(授权/常用/高级) ---------- */ .config-section { display: flex; flex-direction: column; gap: var(--ad-space-3); } .config-section-title { font-size: var(--ad-text-m-size); font-weight: var(--ad-text-m-weight); color: var(--ad-text-1); } .auth-modes { list-style: none; display: flex; flex-direction: column; gap: var(--ad-space-2); padding: var(--ad-space-3); margin: 0; border: 1px solid var(--ad-border); border-radius: var(--ad-radius-m); background: var(--ad-bg-1); } .auth-mode { display: flex; align-items: flex-start; flex-wrap: wrap; gap: var(--ad-space-2); } .auth-mode-name { color: var(--ad-primary); font-size: var(--ad-text-s-size); white-space: nowrap; } .auth-mode-note { flex: 1; min-width: 0; color: var(--ad-text-2); font-size: var(--ad-text-s-size); } .auth-mode-cmd { color: var(--ad-text-3); } .config-advanced-toggle { display: flex; align-items: center; gap: var(--ad-space-2); padding: 0; border: none; background: none; cursor: pointer; text-align: left; } .advanced-badge { display: inline-flex; align-items: center; height: 18px; padding: 0 var(--ad-space-2); border-radius: var(--ad-radius-s); background: var(--ad-attention); color: var(--ad-bg-0); font-size: var(--ad-text-xs-size); } .advanced-chevron { color: var(--ad-text-2); transition: transform var(--ad-dur-fast) var(--ad-ease-out); } .advanced-chevron.open { transform: rotate(180deg); } .advanced-hint { color: var(--ad-text-3); font-size: var(--ad-text-xs-size); } .advanced-fields { display: flex; flex-direction: column; gap: var(--ad-space-5); } /* ============================================================ * Wave 2.2ʵʱ / Ȩ / һװ / عǼ * ȫɫ tokens/ * ============================================================ */ /* ---------- ʧ̬˻װ/жص ---------- */ .run-failure { flex-direction: column; align-items: flex-start; } .run-failure-head { display: flex; align-items: flex-start; gap: var(--ad-space-2); } .run-failure-action { margin-top: var(--ad-space-2); } .run-failure-toggle { align-self: flex-start; } .run-failure-raw { width: 100%; padding: var(--ad-space-3); background: var(--ad-bg-0); border: 1px solid var(--ad-border); border-radius: var(--ad-radius-s); font-family: var(--ad-font-mono); font-size: var(--ad-text-xs-size); color: var(--ad-text-2); white-space: pre-wrap; word-break: break-all; } /* ---------- ȨAuthPanel ---------- */ .auth-mode-action { height: 28px; min-width: 0; padding: 0 var(--ad-space-3); margin-left: auto; flex-shrink: 0; } .auth-flow { display: flex; flex-direction: column; gap: var(--ad-space-4); } .auth-device { display: flex; flex-direction: column; align-items: center; gap: var(--ad-space-3); padding: var(--ad-space-5); border: 1px solid var(--ad-border); border-radius: var(--ad-radius-m); background: var(--ad-bg-1); } .auth-device-label { color: var(--ad-text-2); font-size: var(--ad-text-s-size); } .auth-device-code { display: flex; align-items: center; gap: var(--ad-space-3); } .auth-device-code-text { font-family: var(--ad-font-mono); font-size: var(--ad-text-num-size); letter-spacing: 0.12em; color: var(--ad-primary); } .auth-copy { height: 32px; min-width: 0; } .auth-open { text-decoration: none; } .auth-device-hint { color: var(--ad-text-3); font-size: var(--ad-text-xs-size); } .auth-status { display: flex; align-items: center; gap: var(--ad-space-2); font-size: var(--ad-text-s-size); } .auth-waiting { display: inline-flex; align-items: center; gap: var(--ad-space-2); color: var(--ad-attention); } .auth-done { display: inline-flex; align-items: center; gap: var(--ad-space-2); color: var(--ad-success); } .auth-failed { display: inline-flex; align-items: center; gap: var(--ad-space-2); color: var(--ad-danger); } .auth-log { display: flex; flex-direction: column; gap: var(--ad-space-1); max-height: 200px; overflow-y: auto; padding: var(--ad-space-3); border: 1px solid var(--ad-border); border-radius: var(--ad-radius-s); background: var(--ad-bg-0); font-family: var(--ad-font-mono); font-size: var(--ad-text-xs-size); } .auth-log-line { color: var(--ad-text-2); word-break: break-all; white-space: pre-wrap; } .auth-log-line.waiting { color: var(--ad-attention); } /* ---------- һװRuntimeInstallModal ---------- */ .runtime-install { display: flex; flex-direction: column; gap: var(--ad-space-4); } .runtime-source, .runtime-meta { display: flex; flex-direction: column; gap: var(--ad-space-2); } .runtime-url { display: flex; flex-direction: column; gap: var(--ad-space-1); } .runtime-url-text { font-family: var(--ad-font-mono); font-size: var(--ad-text-xs-size); color: var(--ad-text-2); word-break: break-all; } .runtime-progress { display: flex; align-items: center; } .runtime-error { display: flex; align-items: flex-start; gap: var(--ad-space-2); padding: var(--ad-space-3); border: 1px solid var(--ad-border); border-radius: var(--ad-radius-m); color: var(--ad-danger); font-size: var(--ad-text-s-size); } .runtime-note { color: var(--ad-text-3); font-size: var(--ad-text-xs-size); } /* ---------- عǼWave 2.2 Req 4 ---------- */ .overview-skeleton { padding: var(--ad-space-5); background: var(--ad-bg-1); border: 1px solid var(--ad-border); border-radius: var(--ad-radius-l); } .skeleton-notice { display: flex; align-items: center; gap: var(--ad-space-2); margin-bottom: var(--ad-space-4); color: var(--ad-text-2); font-size: var(--ad-text-m-size); } .skeleton-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: var(--ad-space-4); } .skeleton-card { display: flex; flex-direction: column; gap: var(--ad-space-2); padding: var(--ad-space-4); border: 1px solid var(--ad-border); border-radius: var(--ad-radius-m); } .skeleton-rows { display: flex; flex-direction: column; gap: var(--ad-space-3); } .skeleton-line { height: 14px; border-radius: 4px; background: var(--ad-bg-3); animation: ad-skeleton 1.4s var(--ad-ease-inout) infinite; } .skeleton-line.short { width: 60%; } .skeleton-line.avatar { width: 32px; height: 32px; border-radius: var(--ad-radius-m); } @keyframes ad-skeleton { 0%, 100% { opacity: 0.4; } 50% { opacity: 0.9; } } /* ---------- ȫϻ ---------- */ .diag-summary-all { display: flex; flex-direction: column; gap: var(--ad-space-3); } .diag-report-group { display: flex; flex-direction: column; gap: var(--ad-space-2); padding: var(--ad-space-3); border: 1px solid var(--ad-border); border-radius: var(--ad-radius-m); } .diag-report-cli { color: var(--ad-primary); font-family: var(--ad-font-mono); font-size: var(--ad-text-s-size); } .diag-finding-row { display: flex; align-items: flex-start; gap: var(--ad-space-2); } .diag-finding-row-msg { flex: 1; min-width: 0; color: var(--ad-text-1); font-size: var(--ad-text-s-size); line-height: 1.5; } /* ȫϻļֱǩɫ diag-sev-tag ɫ̵ֱ */ .diag-sev-label { flex-shrink: 0; font-size: var(--ad-text-xs-size); } .diag-sev-label.error { color: var(--ad-danger); } .diag-sev-label.warn { color: var(--ad-warning); } .diag-sev-label.info { color: var(--ad-attention); }