Files
bot_dev1 8b68d015c2 fix: 组件配色全面对齐 Ant Design 5 token + 修复 iframe 内页签初始激活(issue #131)
组件审查结论:全站组件为自绘 HTML+CSS 仿 AntD(纯静态无组件库),
pro.css 已统一设计 token,但各页 CSS/JS 残留一批旧配色硬编码,
pro.css 覆盖不到,本次全部清理:

- 旧 iOS 红 #ff3b30 → --ant-error #ff4d4f(告警 P0/严重度/DLP 条/
  工艺 alarm 态/diff 删除行)
- 旧橙 #f5a623 → --ant-warning #faad14(P1 告警/warning 态/暂存徽章)
- 旧 iOS 绿 #2ecc71 → --ant-success #52c41a(running 态/prod 徽章/
  索引完成/路由本地标签/权限矩阵)
- 杂色蓝统一 → --ant-primary #1677ff:发送键 #0ea5e9、P2 告警
  #3aa0ff、编排画布残留青 rgba(24,211,200)、旧气泡 #1d4ed8
- 主色按钮上的深色文字 #04202a → #fff(对比度修正)
- 灰 #64748b → --ant-text-tertiary rgba(0,0,0,0.45)
- 各页 CSS :root 深色默认变量值(#0b1220/#13203a/#18d3c8 等死值)
  对齐为 AntD 亮色默认值,修正"深色主题"过时注释
- 删除已无任何引用的旧深色登录页样式 auth/auth.css

顺带修复实测发现的 bug:SPA 外壳内直达 admin/studio 子页时页签
不切换——studio.js/admin.js 的 Tab 事件在异步 boot(user) 中绑定,
bindPageTabs 的 window load 初始激活可能早于绑定完成,改为带重试
的激活(直到 Tab 点亮,最多 10s)。实测 #/admin/#alerts 直达后
page-alerts 正确激活。
2026-08-06 08:20:17 +08:00

93 lines
5.3 KiB
CSS
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* iAOP 移动端样式(issue #136):竖屏卡片流,字号档 sm/md/lg 由配置驱动。
* 调色 = Ant Design 5 亮色 token(共享 themeTokens 注入,2026-08 AntD Pro 重构)。 */
:root {
/* 默认值 = Ant Design 5 亮色 token(pro.css 在后加载再次确认) */
--cockpit-bg: #f0f2f5; --cockpit-surface: #ffffff;
--cockpit-fg: rgba(0,0,0,0.88);
--cockpit-fg-muted: rgba(0,0,0,0.45); --cockpit-accent: #1677ff;
--cockpit-warn: #faad14;
--cockpit-grid-line: rgba(5,5,5,0.06);
--fs-body: 14px;
}
.fontsize-sm { --fs-body: 12px; } .fontsize-lg { --fs-body: 16px; }
* { box-sizing: border-box; -webkit-tap-highlight-color: transparent; }
body { margin: 0; font-family: "PingFang SC", "Microsoft YaHei", sans-serif;
background: var(--cockpit-bg); color: var(--cockpit-fg); font-size: var(--fs-body);
padding-bottom: calc(56px + env(safe-area-inset-bottom)); }
#topbar { display: flex; align-items: center; justify-content: space-between;
padding: 12px 14px; padding-top: calc(12px + env(safe-area-inset-top));
background: var(--cockpit-surface); border-bottom: 1px solid var(--cockpit-grid-line);
position: sticky; top: 0; z-index: 2; }
#topbar h1 { font-size: 17px; margin: 0; color: var(--cockpit-accent); }
#ro-badge { font-size: 11px; color: var(--cockpit-warn); border: 1px solid var(--cockpit-warn);
border-radius: 10px; padding: 2px 8px; margin-left: 8px; }
.ghost-btn { background: none; border: 1px solid var(--cockpit-grid-line); border-radius: 8px;
color: var(--cockpit-accent); font-size: 12px; padding: 4px 10px; cursor: pointer; }
.view { display: none; padding: 10px 12px; }
.view.active { display: block; }
.card { background: var(--cockpit-surface); border: 1px solid var(--cockpit-grid-line);
border-radius: 10px; padding: 12px 14px; margin-bottom: 10px; }
.card-title { font-size: 13px; color: var(--cockpit-fg-muted); margin-bottom: 8px; }
.hint { font-size: 11px; color: rgba(0,0,0,0.45); }
.row { display: flex; gap: 8px; align-items: center; }
/* 四状态工艺(横向滑动卡片) */
#m-stages { display: flex; gap: 8px; overflow-x: auto; }
.stage-chip { min-width: 96px; border-radius: 8px; padding: 10px; text-align: center;
border: 1px solid var(--cockpit-grid-line); flex-shrink: 0; }
.stage-chip .n { font-weight: 600; }
.stage-chip .d { font-size: 11px; color: var(--cockpit-fg-muted); margin-top: 3px; }
.stage-chip .s { font-size: 11px; margin-top: 5px; padding: 1px 8px; border-radius: 9px;
display: inline-block; }
.s-running { box-shadow: inset 0 0 0 1px #52c41a; }
.s-running .s { background: rgba(82,196,26,.15); color: #52c41a; }
.s-warning { box-shadow: inset 0 0 0 1px var(--cockpit-warn); }
.s-warning .s { background: rgba(250,173,20,.15); color: var(--cockpit-warn); }
.s-alarm { box-shadow: inset 0 0 0 1px #ff4d4f; }
.s-alarm .s { background: rgba(255,77,79,.15); color: #ff4d4f; }
.s-offline { opacity: .55; }
.s-offline .s { background: rgba(0,0,0,0.06); color: var(--cockpit-fg-muted); }
/* KPI 两列网格 */
.kpi-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 10px; }
.kpi { background: var(--cockpit-surface); border: 1px solid var(--cockpit-grid-line);
border-radius: 10px; padding: 10px 12px; }
.kpi .v { font-size: 22px; font-weight: 700; color: var(--cockpit-accent); }
.kpi .l { font-size: 12px; margin-top: 2px; }
.kpi .d { font-size: 10px; color: var(--cockpit-fg-muted); margin-top: 3px; }
/* 告警(只读,severity 配色同源 alarm_panel.ti.yaml) */
.alarm { border-radius: 6px; padding: 8px 10px; margin-bottom: 6px; font-size: 12px;
border-left: 3px solid transparent; display: flex; gap: 8px; }
.alarm .sev { font-weight: 700; }
/* 交接班摘要 */
.brief-sec { margin-bottom: 8px; }
.brief-sec .sec-title { color: var(--cockpit-accent); font-size: 13px; margin-bottom: 4px; }
.brief-sec .sec-body { color: var(--cockpit-fg); white-space: pre-wrap; line-height: 1.6; }
.event { display: flex; gap: 8px; font-size: 12px; padding: 4px 0;
border-bottom: 1px solid var(--cockpit-grid-line); }
.event .t { color: var(--cockpit-fg-muted); flex-shrink: 0; }
.todo { font-size: 12px; padding: 4px 0; }
.todo .pri { color: var(--cockpit-warn); }
.fold-btn { background: none; border: none; color: var(--cockpit-accent);
font-size: 12px; padding: 4px 0; cursor: pointer; }
.confirm-tag { display: inline-block; background: rgba(250,173,20,.15); color: var(--cockpit-warn);
padding: 2px 8px; border-radius: 9px; font-size: 11px; margin-top: 6px; }
select, button { padding: 9px 12px; border-radius: 8px; font-size: 14px; }
select { border: 1px solid var(--cockpit-grid-line); background: var(--cockpit-bg);
color: var(--cockpit-fg); flex: 1; }
button.primary { border: none; background: var(--cockpit-accent); color: #ffffff; }
button:disabled { opacity: .5; }
/* 底部页签 */
#tabbar { position: fixed; bottom: 0; left: 0; right: 0; display: flex;
background: var(--cockpit-surface); border-top: 1px solid var(--cockpit-grid-line);
padding-bottom: env(safe-area-inset-bottom); }
#tabbar .tab { flex: 1; padding: 12px; background: none; border: none;
color: var(--cockpit-fg-muted); font-size: 14px; cursor: pointer; }
#tabbar .tab.active { color: var(--cockpit-accent); }