2524 lines
49 KiB
CSS
2524 lines
49 KiB
CSS
/* ============================================================
|
||
* 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);
|
||
}
|