组件审查结论:全站组件为自绘 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 正确激活。
93 lines
5.3 KiB
CSS
93 lines
5.3 KiB
CSS
/* 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); }
|