:root {
  --brand: #0C447C;
  --brand-light: #1a5a9c;
  --mint: #5DCAA5;
  --bg: #f4f6fa;
  --panel: #ffffff;
  --border: #e2e8f0;
  --text: #1f2937;
  --muted: #6b7280;
  --danger: #e0524d;
  --warn: #e6a23c;
  --ok: #2f9e6e;
}

* { box-sizing: border-box; margin: 0; padding: 0; }

body {
  font-family: "Microsoft YaHei", "PingFang SC", system-ui, sans-serif;
  background: var(--bg);
  color: var(--text);
  font-size: 14px;
}

.layout { display: flex; min-height: 100vh; }

/* 侧边栏（一二级可收缩菜单） */
.sidebar {
  width: 220px;
  background: var(--brand);
  color: #fff;
  display: flex;
  flex-direction: column;
  position: sticky;
  top: 0;
  height: 100vh;
  transition: width .2s ease;
  overflow: hidden;
}
.sidebar.collapsed { width: 62px; }
.brand { display: flex; align-items: center; gap: 12px; padding: 20px 18px; border-bottom: 1px solid rgba(255,255,255,.12); position: relative; }
.side-toggle {
  position: absolute; right: -1px; top: 50%; transform: translate(-10px, -50%);
  background: rgba(255,255,255,.12); color: #fff; border: none;
  width: 22px; height: 22px; border-radius: 50%; cursor: pointer; font-size: 13px; line-height: 1;
}
.side-toggle:hover { background: var(--mint); color: var(--brand); }
.sidebar.collapsed .side-toggle { position: static; transform: translateY(-50%); margin-left: -14px; flex: none; }
.brand-logo {
  width: 38px; height: 38px; min-width: 38px; border-radius: 9px;
  background: var(--mint); color: var(--brand);
  font-weight: 800; font-size: 18px;
  display: flex; align-items: center; justify-content: center;
}
.brand-name { font-size: 16px; font-weight: 700; }
.brand-sub { font-size: 11px; opacity: .7; letter-spacing: .5px; }
.sidebar.collapsed .brand { padding: 20px 12px; justify-content: center; }
.sidebar.collapsed .brand-text,
.sidebar.collapsed .g-text,
.sidebar.collapsed .g-arrow,
.sidebar.collapsed .nav-sub,
.sidebar.collapsed .sidebar-foot { display: none; }

.nav { padding: 12px 10px; flex: none; }
.nav-scroll { flex: 1; overflow-y: auto; overflow-x: hidden; padding-bottom: 10px; }
.nav-scroll::-webkit-scrollbar { width: 4px; }
.nav-scroll::-webkit-scrollbar-thumb { background: rgba(255,255,255,.25); border-radius: 4px; }

/* 一级分组标题：可点击，带箭头 */
.nav-group-title {
  display: flex; align-items: center; gap: 9px;
  padding: 12px 16px 6px; font-size: 13px; font-weight: 600;
  color: rgba(219,230,243,.85); cursor: pointer; user-select: none;
  white-space: nowrap;
}
.nav-group-title:hover { color: #fff; }
.g-icon { width: 20px; text-align: center; font-size: 14px; }
.g-arrow { margin-left: auto; font-size: 11px; opacity: .7; transition: transform .2s; }
.nav-group:not(.open) .g-arrow { transform: rotate(-90deg); }
.nav-group:not(.open) .nav-sub { display: none; }

/* 二级菜单 */
.nav-sub { padding: 0 10px; }
.nav-sub .nav-item { padding-left: 39px; font-size: 13px; }
.nav-item {
  display: flex; align-items: center; padding: 10px 14px; margin: 3px 0;
  border-radius: 8px; color: #dbe6f3; cursor: pointer;
  text-decoration: none; font-size: 14px; transition: .15s;
  white-space: nowrap;
}
.n-icon { width: 22px; text-align: center; margin-right: 9px; }
.sidebar.collapsed .nav { padding: 12px 6px; }
.sidebar.collapsed .nav-item { justify-content: center; padding: 10px 0; }
.sidebar.collapsed .n-icon { margin-right: 0; }
.sidebar.collapsed .n-text { display: none; }
.nav-item:hover { background: rgba(255,255,255,.08); color: #fff; }
.nav-item.active { background: var(--mint); color: var(--brand); font-weight: 700; }

.sidebar-foot { padding: 14px 18px; font-size: 11px; opacity: .55; border-top: 1px solid rgba(255,255,255,.12); white-space: nowrap; }

/* 主区 */
.main { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.topbar {
  height: 56px; background: var(--panel); border-bottom: 1px solid var(--border);
  display: flex; align-items: center; justify-content: space-between; padding: 0 24px;
}
.crumb { font-size: 16px; font-weight: 600; }
.env-tag { font-size: 12px; color: var(--muted); background: var(--bg); padding: 4px 10px; border-radius: 20px; }
/* 顶栏用户区：与 EC 平台口径一致（头像 + 姓名 + 角色标识） */
.top-user { display: flex; align-items: center; gap: 9px; padding-left: 6px; }
.avatar { width: 34px; height: 34px; border-radius: 50%; background: linear-gradient(135deg, var(--brand), var(--mint)); color: #fff; display: flex; align-items: center; justify-content: center; font-size: 14px; font-weight: 700; }
.top-user-name { font-size: 13px; font-weight: 600; color: var(--text); line-height: 1.2; }
.top-user-role { font-size: 11px; color: var(--muted); line-height: 1.2; }
.content { padding: 24px; }
/* 内容区滚动条样式与 EC 平台 .view 一致 */
.content::-webkit-scrollbar { width: 8px; }
.content::-webkit-scrollbar-thumb { background: #d3dde8; border-radius: 4px; }

/* 仪表盘 */
.stat-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; margin-bottom: 20px; }
.stat-card {
  background: var(--panel); border: 1px solid var(--border); border-radius: 12px;
  padding: 18px 20px; position: relative; overflow: hidden;
}
.stat-card::before { content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 4px; background: var(--brand); }
.stat-card.mint::before { background: var(--mint); }
.stat-card.warn::before { background: var(--warn); }
.stat-card.danger::before { background: var(--danger); }
.stat-label { font-size: 13px; color: var(--muted); }
.stat-value { font-size: 30px; font-weight: 800; margin-top: 6px; color: var(--brand); }
.stat-card.mint .stat-value { color: var(--ok); }
.stat-card.warn .stat-value { color: var(--warn); }
.stat-card.danger .stat-value { color: var(--danger); }
.stat-sub { font-size: 12px; color: var(--muted); margin-top: 4px; }

.panel { background: var(--panel); border: 1px solid var(--border); border-radius: 12px; padding: 18px; }
.panel-title { font-size: 15px; font-weight: 700; margin-bottom: 12px; }

/* 工具栏 */
.toolbar { display: flex; gap: 10px; align-items: center; margin-bottom: 14px; flex-wrap: wrap; }
.toolbar .grow { flex: 1; }

/* 表格 */
.table { width: 100%; border-collapse: collapse; font-size: 13px; }
/* v1.10：全站表格统一能碳运营风格——深蓝表头白字加粗 + 全表边框 */
.table th, .table td { padding: 9px 12px; text-align: center; border: 1px solid #c9d4de; }
.table th { background: var(--brand); color: #fff; font-weight: 700; white-space: nowrap; }
.table tbody tr:nth-child(even) td { background: #f7fafc; }
.table tr:hover td { background: #eef5fb; }
.cell-actions { white-space: nowrap; }
.cell-actions button { margin-right: 6px; }

/* 状态徽标 */
.badge { display: inline-block; padding: 2px 9px; border-radius: 20px; font-size: 12px; font-weight: 600; }
.badge.ok { background: #e6f6ee; color: var(--ok); }
.badge.warn { background: #fdf3e3; color: var(--warn); }
.badge.danger { background: #fdeaea; color: var(--danger); }
.badge.info { background: #e7f0fb; color: var(--brand); }
.badge.muted { background: #eef1f5; color: var(--muted); }
/* v1.29：维修任务状态新增配色——维修中=橙、待审核=紫（共性，同步维修中心各菜单） */
.badge.orange { background: #fff3e6; color: #f07c00; border: 1px solid #ffce99; }
.badge.purple { background: #f3ecff; color: #7b3ff2; border: 1px solid #d6c2ff; }

/* 按钮 */
.btn { border: 1px solid transparent; border-radius: 8px; padding: 8px 16px; font-size: 13px; cursor: pointer; transition: .15s; }
.btn-primary { background: var(--brand); color: #fff; }
.btn-primary:hover { background: var(--brand-light); }
.btn-mint { background: var(--mint); color: var(--brand); font-weight: 700; }
.btn-ghost { background: #fff; border-color: var(--border); color: var(--text); }
.btn-ghost:hover { background: var(--bg); }
.btn-sm { padding: 5px 11px; font-size: 12px; }
.btn-danger { background: #fff; border-color: var(--danger); color: var(--danger); }
.btn-danger:hover { background: var(--danger); color: #fff; }

/* 表单控件 */
.input, .select, .textarea {
  width: 100%; padding: 8px 10px; border: 1px solid var(--border); border-radius: 8px;
  font-size: 13px; font-family: inherit; background: #fff; color: var(--text);
}
.input:focus, .select:focus, .textarea:focus { outline: none; border-color: var(--brand); }
.textarea { resize: vertical; min-height: 64px; }
.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin-bottom: 14px; }
.form-field label { display: block; font-size: 12px; color: var(--muted); margin-bottom: 5px; }
.form-field .req { color: var(--danger); margin-left: 2px; }

/* 弹窗 */
.modal-mask { position: fixed; inset: 0; background: rgba(15,23,42,.45); display: flex; align-items: center; justify-content: center; z-index: 980; } /* v1.16：高于 picker-mask(950)，规则弹窗内新增/编辑可正常置顶 */
.modal-mask[hidden] { display: none; }
.modal { background: #fff; border-radius: 14px; width: 720px; max-width: 92vw; max-height: 88vh; display: flex; flex-direction: column; }
.modal-head { padding: 16px 20px; border-bottom: 1px solid var(--border); font-weight: 700; font-size: 16px; display: flex; justify-content: space-between; align-items: center; }
.modal-close { background: none; border: none; font-size: 22px; cursor: pointer; color: var(--muted); }
.modal-body { padding: 20px; overflow-y: auto; }
.modal-foot { padding: 14px 20px; border-top: 1px solid var(--border); text-align: right; }

/* toast */
.toast { position: fixed; top: 20px; left: 50%; transform: translateX(-50%); background: var(--brand); color: #fff; padding: 10px 20px; border-radius: 8px; z-index: 99; font-size: 13px; box-shadow: 0 6px 24px rgba(0,0,0,.18); }
.toast.err { background: var(--danger); }

.empty { text-align: center; color: var(--muted); padding: 40px 0; }

/* v1.3 新增：Tab 条与字段提示 */
.tab-bar { display: flex; gap: 8px; margin-bottom: 16px; align-items: center; }
.tab { border: 1px solid var(--border); background: var(--panel); padding: 8px 16px; border-radius: 8px; cursor: pointer; font-size: 13px; color: var(--muted); }
.tab:hover { border-color: var(--brand); color: var(--brand); }
.tab.active { background: var(--brand); color: #fff; border-color: var(--brand); font-weight: 600; }
.field-hint { display: block; font-size: 11px; color: var(--muted); margin-top: 2px; font-weight: 400; }

/* ---------- v1.5 详情抽屉 ---------- */
.drawer-mask { position: fixed; inset: 0; background: rgba(15,23,42,.45); display: flex; justify-content: flex-end; z-index: 60; }
.drawer-mask[hidden] { display: none; }
.drawer {
  width: 50vw; min-width: 560px; max-width: 92vw; height: 100vh; background: #fff;
  display: flex; flex-direction: column; box-shadow: -8px 0 30px rgba(0,0,0,.15);
  animation: drawerIn .18s ease-out;
}
@keyframes drawerIn { from { transform: translateX(40px); opacity: .4; } to { transform: none; opacity: 1; } }
/* v1.32：设备位置详情 → 与「编辑·设备位置」弹窗（标准 .modal 720px）盒参数完全一致 */
.drawer-mask.dlg-mode { justify-content: center; align-items: center; z-index: 980; }
.drawer-mask.dlg-mode .drawer {
  width: 720px; max-width: 92vw; height: auto; min-width: 0; max-height: 88vh;
  border-radius: 14px; box-shadow: none; border: none;
  animation: dlgIn .16s ease-out;
}
.drawer-mask.dlg-mode .drawer-head { padding: 16px 20px; border-bottom: 1px solid var(--border); font-weight: 700; font-size: 16px; color: var(--text, #2a3b4d); }
.drawer-mask.dlg-mode .drawer-body { padding: 20px; }
@keyframes dlgIn { from { transform: translateY(14px); opacity: .4; } to { transform: none; opacity: 1; } }
.drawer-head {
  display: flex; align-items: center; justify-content: space-between;
  padding: 16px 20px; border-bottom: 1px solid var(--line); font-weight: 700; color: var(--brand);
}
.drawer-body { padding: 18px 20px 40px; overflow-y: auto; flex: 1; }
.d-code { font-size: 12px; color: var(--mint); font-weight: 700; letter-spacing: .5px; margin-bottom: 10px; }
.d-fields { display: grid; grid-template-columns: 1fr; gap: 0; border: 1px solid var(--line); border-radius: 10px; overflow: hidden; }
.d-row { display: flex; border-bottom: 1px solid var(--line); font-size: 13px; }
.d-row:last-child { border-bottom: none; }
.d-label { width: 110px; flex: none; background: #f6f9fc; color: var(--muted); padding: 9px 12px; }
.d-value { padding: 9px 12px; flex: 1; word-break: break-all; }
.d-section { margin-top: 18px; border: 1px solid var(--line); border-radius: 10px; padding: 14px; }
.d-sec-title { font-size: 13px; font-weight: 700; color: var(--brand); margin-bottom: 10px; }
.d-empty { font-size: 12px; color: var(--muted); padding: 6px 0; }
.d-link {
  display: flex; align-items: center; justify-content: space-between; gap: 8px;
  font-size: 13px; padding: 8px 10px; border-radius: 8px; cursor: pointer; color: var(--brand);
}
.d-link:hover { background: #eef4f9; }
.d-param-table td { padding: 4px 6px !important; }
.d-param-table .input { padding: 6px 8px; font-size: 12px; }
.verify-row { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 5px 0; font-size: 13px; }
.verify-row .v-name { color: var(--text); }
.flow-line { position: relative; padding-left: 18px; }
.flow-line::before { content: ''; position: absolute; left: 5px; top: 6px; bottom: 6px; width: 2px; background: var(--line); }
.flow-item { position: relative; padding: 6px 0 6px 12px; }
.flow-dot {
  position: absolute; left: -18px; top: 12px; width: 10px; height: 10px; border-radius: 50%;
  background: var(--brand); border: 2px solid #fff; box-shadow: 0 0 0 2px var(--line);
}
.flow-dot.done { background: var(--mint); }
.flow-head { font-size: 13px; font-weight: 600; display: flex; align-items: center; gap: 8px; }
.flow-head .t-time { font-size: 11px; color: var(--muted); font-weight: 400; }
.flow-note { font-size: 12px; color: var(--muted); margin-top: 2px; }

/* v1.4 个人看板 */
.board-hello { display: flex; align-items: baseline; gap: 12px; margin-bottom: 16px; }
.board-hello .hello { font-size: 18px; font-weight: 700; color: var(--brand); }
.board-hello .date { font-size: 12px; color: var(--muted); }
.board-grid { display: grid; grid-template-columns: 1fr 1.45fr 1fr; gap: 16px; margin-bottom: 16px; }
.board-card { background: var(--panel); border: 1px solid var(--border); border-radius: 12px; padding: 16px 18px; }
.board-card.hl { border: 2px solid var(--brand); box-shadow: 0 4px 18px rgba(12,68,124,.10); }
.board-title { font-size: 15px; font-weight: 700; margin-bottom: 12px; }
.donut-wrap { display: flex; align-items: center; gap: 16px; justify-content: center; padding: 6px 0; }
.donut { width: 150px; height: 150px; }
.donut-big { font-size: 34px; font-weight: 800; fill: var(--text); }
.donut-sub { font-size: 11px; fill: var(--muted); }
.legend { list-style: none; font-size: 12px; color: var(--text); min-width: 82px; }
.legend li { display: flex; align-items: center; gap: 7px; margin: 6px 0; }
.legend .cnt { margin-left: auto; color: var(--muted); }
.dot { width: 10px; height: 10px; border-radius: 3px; display: inline-block; flex: none; }

.todo-tabs { display: flex; gap: 6px; margin-bottom: 10px; flex-wrap: wrap; }
.todo-tab { border: 1px solid var(--border); background: #fff; border-radius: 6px; padding: 4px 12px; font-size: 12px; cursor: pointer; color: var(--muted); }
.todo-tab:hover { border-color: var(--brand); color: var(--brand); }
.todo-tab.active { background: var(--brand); color: #fff; border-color: var(--brand); }
.todo-tab .t-cnt { font-weight: 700; margin-left: 2px; }
.todo-list { max-height: 218px; overflow-y: auto; }
.todo-item { display: flex; justify-content: space-between; align-items: center; gap: 8px; padding: 9px 10px; border-radius: 8px; cursor: pointer; border-bottom: 1px dashed var(--border); }
.todo-item:hover { background: #f2f7fd; }
.todo-item .t-name { font-size: 13px; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.todo-item .t-time { font-size: 11px; color: var(--muted); flex: none; }
.todo-empty { text-align: center; color: var(--muted); font-size: 12px; padding: 30px 0; }

.duty-item { display: flex; align-items: center; gap: 10px; padding: 9px 2px; border-bottom: 1px dashed var(--border); }
.duty-item:last-child { border-bottom: none; }
.avatar { width: 34px; height: 34px; border-radius: 50%; background: linear-gradient(135deg, var(--brand), var(--mint)); color: #fff; display: flex; align-items: center; justify-content: center; font-weight: 700; font-size: 14px; flex: none; }
.duty-info { min-width: 0; }
.duty-name { font-size: 13px; font-weight: 600; }
.duty-sub { font-size: 11px; color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

.maint-head { display: flex; align-items: center; gap: 10px; margin-bottom: 14px; flex-wrap: wrap; }
.maint-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.maint-block { border: 1px solid var(--border); border-radius: 10px; padding: 14px 16px; }
.m-block-head { display: flex; justify-content: space-between; align-items: center; gap: 10px; margin-bottom: 8px; }
.m-block-head .m-title { font-weight: 700; font-size: 14px; white-space: nowrap; }
.m-block-head input { width: 130px; }
/* v1.29：年度下拉缩短，与左侧月度计划（input[type=month]）视觉效果保持一致 */
.m-block-head select#bdYear { width: 96px; }
.m-total { font-size: 12px; color: var(--muted); }
.m-total b { font-size: 22px; color: var(--brand); margin-left: 4px; }
.m-status { display: flex; flex-wrap: wrap; gap: 6px 16px; margin-top: 10px; font-size: 12px; color: var(--muted); }
.m-status span b { color: var(--text); margin-left: 3px; }

/* 登录页 */
.login-view {
  position: fixed; inset: 0; z-index: 100;
  background: linear-gradient(135deg, var(--brand) 0%, #0a3560 100%);
  display: flex; align-items: center; justify-content: center;
}
.login-card { background: #fff; border-radius: 16px; padding: 34px 32px; width: 360px; box-shadow: 0 20px 60px rgba(0,0,0,.3); }
.login-brand { display: flex; align-items: center; gap: 12px; margin-bottom: 22px; }
.login-title { font-size: 20px; font-weight: 800; color: var(--brand); }
.login-sub { font-size: 12px; color: var(--muted); }
.login-hint { margin-top: 16px; font-size: 12px; color: var(--muted); text-align: center; line-height: 1.6; }
.login-err { color: var(--danger); font-size: 12px; min-height: 16px; margin-top: 8px; text-align: center; }

/* ===== v1.6 设备类型树形 & 看板未处理报警卡 ===== */
.dt-tree { display: inline-block; padding-left: calc(var(--depth, 0) * 22px); }
.dt-fold { display: inline-block; width: 16px; color: var(--muted); font-size: 12px; }
tr.dt-selected td { background: #eaf3fb !important; }
.board-card.alarm-card { grid-column: 1 / -1; }
.alarm-line { display: flex; align-items: center; gap: 10px; padding: 8px 6px; border-bottom: 1px dashed var(--border); font-size: 13px; cursor: pointer; }
.alarm-line:hover { background: #f2f7fd; }
.alarm-line .a-time { color: var(--muted); font-size: 12px; flex: none; }
.alarm-line .a-main { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.alarm-line .a-badge { margin-left: auto; flex: none; }
.alarm-line .a-badge + .a-badge { margin-left: 0; }
/* v1.29：驾驶舱未处理报警配色——等级（无背景，仅文字色）/ 状态（带背景） */
.a-badge.lv-darkred { background: transparent; color: #c0152f; font-weight: 700; }
.a-badge.lv-orange { background: transparent; color: #f07c00; font-weight: 700; }
.a-badge.lv-normal { background: transparent; color: #1677ff; }
.a-badge.st-red { background: #fdeaea; color: #cf1322; border: 1px solid #ffa39e; }
.a-badge.st-blue { background: #e7f0fb; color: #1e80ff; border: 1px solid #aacffb; }
.a-badge.st-green { background: #e6f6ee; color: #2dbb6e; border: 1px solid #b7eb8f; }

/* ===== v1.7 角色管理权限矩阵 ===== */
.perm-matrix-wrap { max-height: 420px; overflow: auto; border: 1px solid var(--border); border-radius: 8px; }
.perm-matrix { margin: 0; }
.perm-matrix th { position: sticky; top: 0; background: #f5f8fb; z-index: 1; white-space: nowrap; font-size: 12px; }
.perm-matrix td { padding: 6px 8px; font-size: 13px; white-space: nowrap; }
.perm-matrix td:first-child { font-weight: 500; }
.perm-matrix input[type="checkbox"] { width: 15px; height: 15px; accent-color: #0C447C; cursor: pointer; }
.perm-matrix tbody tr:hover { background: #f2f7fd; }
.perm-matrix label { font-size: 12px; color: var(--muted); font-weight: 500; }
.field-hint { font-size: 12px; color: var(--muted); font-weight: 400; margin-left: 6px; }

/* ===== v1.8 设备类型三级方框级联 & 巡检计划状态汇总 ===== */
/* v1.11：设备类型三级卡片级联（一行为一级 / 二行二级 / 三行三级） */
.dt-rows { display: flex; flex-direction: column; gap: 14px; }
.dt-row { display: flex; gap: 14px; align-items: stretch; }
.dt-rlabel { flex: 0 0 124px; display: flex; align-items: center; gap: 8px; font-size: 13px; font-weight: 600; color: #0C447C; background: #f8fafc; border: 1px solid var(--border); border-radius: 10px; padding: 0 12px; }
.dt-rlabel .dt-col-cnt { margin-left: 0; }
/* v1.16：多点位自动换行（不再横向挤压布局/顶走侧栏），分页控件交给 JS */
.dt-rowboxes { flex: 1; display: flex; flex-wrap: wrap; gap: 10px; align-content: flex-start; background: #f8fafc; border: 1px solid var(--border); border-radius: 10px; padding: 12px; min-height: 92px; overflow: hidden; }
.loc-pager { display: flex; align-items: center; gap: 8px; padding: 10px 4px 2px; font-size: 12px; color: var(--muted); justify-content: flex-end; }
.loc-pager button { min-width: 28px; height: 26px; border: 1px solid var(--border); background: #fff; border-radius: 6px; cursor: pointer; font-size: 12px; }
.loc-pager button.active { background: #0C447C; color: #fff; border-color: #0C447C; }
.loc-pager button:disabled { opacity: .4; cursor: default; }
.dt-devpanel { background: #f8fafc; border: 1px solid var(--border); border-radius: 10px; padding: 10px; min-height: 92px; }
.dt-col-title { font-size: 13px; font-weight: 600; color: #0C447C; margin-bottom: 10px; display: flex; align-items: center; gap: 6px; }
.dt-col-cnt { margin-left: auto; font-size: 11px; font-weight: 400; color: var(--muted); background: #eef2f6; border-radius: 8px; padding: 1px 8px; }
.dt-col-empty { font-size: 12px; color: var(--muted); padding: 16px 6px; text-align: center; align-self: center; }
.dt-box { position: relative; background: #fff; border: 1.5px solid var(--border); border-radius: 8px; padding: 10px 66px 10px 12px; min-width: 156px; max-width: 280px; cursor: pointer; transition: all .15s; }
.dt-box:hover { border-color: #5DCAA5; box-shadow: 0 2px 8px rgba(12,68,124,.08); transform: translateY(-2px); }
.dt-box.active { border-color: #0C447C; background: #eaf3fb; box-shadow: 0 2px 8px rgba(12,68,124,.15); }
.dt-box.dt-hit { border-color: #5DCAA5; box-shadow: 0 0 0 2px rgba(93,202,165,.35); }
.dt-box .db-name { font-size: 14px; font-weight: 500; color: #2a3b4d; }
.dt-box .db-sub { margin-top: 5px; }
.dt-box .db-sub .badge { font-size: 11px; }
.dt-detail-btn { position: absolute; top: 8px; right: 8px; font-size: 11px; padding: 2px 9px; border-radius: 6px; border: 1px solid #cdd8e2; background: #fff; color: #0C447C; cursor: pointer; transition: all .15s; }
.dt-detail-btn:hover { background: #0C447C; color: #fff; border-color: #0C447C; }
.dt-dev-list { max-height: 320px; overflow: auto; }
.insp-summary { display: flex; gap: 0; background: #fff; border: 1px solid var(--border); border-radius: 10px; margin-bottom: 12px; overflow: hidden; }
/* v1.20：卡片取消任何放大/位移效果，仅保留底色变化 */
.insp-card { flex: 1; display: flex; align-items: center; gap: 12px; padding: 26px 28px; cursor: pointer; border-right: 1px dashed var(--border); transition: background .15s; transform: none !important; }
.insp-card:last-child { border-right: none; }
.insp-card:hover { background: #f2f7fd; }
/* v1.20：选中卡片 = 深蓝底 + 白色文字图标 + 数字/占比高亮 */
.insp-card.active { background: #0C447C; border-color: transparent; }
.insp-card.active .dot { box-shadow: 0 0 0 3px rgba(255,255,255,.55); }
.insp-card.active .ic-label { color: #fff; font-weight: 600; }
.insp-card.active .ic-num { color: #fff; }
.insp-card.active .ic-num em { color: #7FE0BC; font-weight: 600; }
.insp-card .dot { width: 16px; height: 16px; border-radius: 50%; flex: none; }
.insp-card .ic-label { font-size: 16px; color: #5a6a7a; }
.insp-card .ic-num { margin-left: auto; font-size: 30px; font-weight: 700; color: #2a3b4d; }
.insp-card .ic-num em { font-style: normal; font-size: 14px; font-weight: 400; color: var(--muted); margin-left: 4px; }

/* ===== v1.9 驾驶舱改版（v1.13：模块 .panel 取消悬停放大，仅保留绿色阴影） ===== */
/* 板块悬停：放大 + 能源绿(#5DCAA5)阴影 */
.board-card, .maint-block { transition: transform .22s ease, box-shadow .22s ease, border-color .22s ease; }
.panel { transition: box-shadow .22s ease, border-color .22s ease; }
.board-card:hover, .maint-block:hover {
  transform: translateY(-4px) scale(1.015);
  border-color: rgba(93, 202, 165, .8);
  box-shadow: 0 10px 26px rgba(93, 202, 165, .45), 0 0 0 1px rgba(93, 202, 165, .35);
  z-index: 2;
}
/* 模块表格/卡片（设备台账、设备类型、供应商、设备位置等）取消悬停放大，保留绿色阴影 */
.panel:hover {
  border-color: rgba(93, 202, 165, .8);
  box-shadow: 0 10px 26px rgba(93, 202, 165, .45), 0 0 0 1px rgba(93, 202, 165, .35);
}
/* 三大卡片高度增加 */
.board-grid > .board-card { min-height: 430px; }
.board-card.alarm-card { min-height: 0; }
.todo-list { max-height: 340px; scrollbar-width: thin; }
.todo-list::-webkit-scrollbar { width: 6px; }
.todo-list::-webkit-scrollbar-thumb { background: #c6d2de; border-radius: 3px; }
/* 饼图下方文字注释 */
.donut-col { display: flex; flex-direction: column; align-items: center; gap: 6px; padding: 8px 0 2px; }
.donut-col .donut { width: 168px; height: 168px; }
.legend-below { min-width: 0; display: flex; flex-wrap: wrap; justify-content: center; gap: 4px 18px; }
.legend-below li { margin: 2px 0; }
.maint-donut { border-top: 1px dashed var(--border); }
/* 未处理报警：标题与内容红色加粗 */
.alarm-card .board-title { color: var(--danger); }
.alarm-card .board-title span { color: var(--danger); }
.alarm-line .a-main, .alarm-line .a-time { color: var(--danger); font-weight: 700; }

/* ===== v1.10 设备台账：到期提醒 + 设备档案 ===== */
.warranty-due { color: var(--danger); font-weight: 700; }
.q-mark {
  display: inline-flex; align-items: center; justify-content: center;
  width: 18px; height: 18px; border-radius: 50%; margin-left: 6px;
  background: var(--mint); color: #fff; font-size: 12px; font-weight: 700;
  cursor: help; user-select: none; vertical-align: middle;
}
.q-mark:hover { filter: brightness(1.08); }
.arc-tabs { display: flex; gap: 6px; flex-wrap: wrap; margin-bottom: 10px; }
.arc-tab {
  border: 1px solid var(--border); background: #fff; color: var(--muted);
  border-radius: 6px; padding: 6px 14px; font-size: 12px; cursor: pointer;
}
.arc-tab:hover { border-color: var(--brand); color: var(--brand); }
.arc-tab.active { background: var(--brand); border-color: var(--brand); color: #fff; font-weight: 700; }
.arc-filter { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; }
.arc-filter .input { max-width: 150px; }
.arc-body { min-height: 60px; }

/* ===== v1.11 统计卡（考勤等模块复用） ===== */
.as-card {
  display: flex; align-items: center; gap: 8px; cursor: pointer;
  border: 1.5px solid var(--border); border-radius: 8px; padding: 10px 16px;
  background: #fff; transition: all .15s; min-width: 128px;
}
.as-card:hover { border-color: #5DCAA5; box-shadow: 0 2px 8px rgba(12,68,124,.08); }
.as-card.active { border-color: #0C447C; background: #eaf3fb; box-shadow: 0 2px 8px rgba(12,68,124,.15); }
.as-card.static { cursor: default; }
.as-card.static:hover { border-color: var(--border); box-shadow: none; }
.as-card .dot { width: 10px; height: 10px; border-radius: 50%; display: inline-block; }
.as-card .as-label { font-size: 13px; color: #2a3b4d; }
.as-card .as-num { margin-left: auto; font-size: 18px; font-weight: 700; color: #0C447C; }

/* ===== v1.14 告警中心：完全复刻能碳运营平台告警中心界面 ===== */
.al-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; margin-bottom: 14px; }
.al-head-left .al-title { font-size: 24px; font-weight: 800; color: #1a2b3c; letter-spacing: .5px; }
.al-head-left .al-sub { font-size: 13px; color: #7a8a99; margin-top: 4px; }
.al-head-right { display: flex; gap: 10px; flex-shrink: 0; padding-top: 4px; }
.al-cfg-btn {
  border: 1px solid #d5dde5; background: #fff; color: #3a4b5c;
  border-radius: 6px; padding: 8px 18px; font-size: 13px; cursor: pointer; transition: all .15s;
}
.al-cfg-btn:hover { border-color: #1677ff; color: #1677ff; }
.al-readall-btn {
  border: none; background: #1677ff; color: #fff;
  border-radius: 6px; padding: 8px 18px; font-size: 13px; cursor: pointer; transition: all .15s;
}
.al-readall-btn:hover { background: #4096ff; }
/* 等级统计卡 */
.al-cards { display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px; margin-bottom: 14px; }
/* v1.30：告警中心四个等级卡片固定（随列表滚动保持可见） */
.al-cards { position: sticky; top: 0; z-index: 6; background: var(--bg, #f4f7fb); padding: 2px; margin-top: -2px; }
.al-card {
  position: relative; overflow: hidden; cursor: pointer;
  background: #fff; border: 1px solid #edf0f3; border-radius: 10px;
  padding: 14px 18px 12px; transition: all .15s;
}
.al-card::after {
  content: ''; position: absolute; right: -18px; top: -18px; width: 72px; height: 72px;
  border-radius: 50%; background: var(--al, #1677ff); opacity: .1;
}
.al-card:hover { box-shadow: 0 3px 10px rgba(12,68,124,.08); }
.al-card.active { border-color: var(--al, #1677ff); box-shadow: 0 0 0 1px var(--al, #1677ff) inset; }
.al-card-top { display: flex; align-items: center; gap: 8px; }
.al-dot { width: 9px; height: 9px; border-radius: 50%; display: inline-block; }
.al-card-label { font-size: 13px; color: #5a6b7c; }
.al-card-num { font-size: 30px; font-weight: 800; color: #1a2b3c; margin-top: 6px; line-height: 1.1; }
/* 状态页签 */
.al-tabs { display: flex; gap: 22px; border-bottom: 1px solid #e8ecf0; margin-bottom: 14px; }
.al-tab {
  border: none; background: none; color: #7a8a99; font-size: 14px; cursor: pointer;
  padding: 10px 2px; position: relative; transition: color .15s;
}
.al-tab:hover { color: #1677ff; }
.al-tab.active { color: #1a2b3c; font-weight: 700; }
.al-tab.active::after { content: ''; position: absolute; left: 0; right: 0; bottom: -1px; height: 3px; background: #1677ff; border-radius: 2px; }
/* 列表头 + 告警列表 */
.al-list-head { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 10px; }
.al-list-title { font-size: 15px; font-weight: 800; color: #1a2b3c; }
.al-list-note { font-size: 12px; color: #9aa6b2; }
.al-list { background: #fff; border: 1px solid #edf0f3; border-radius: 10px; }
.al-row { display: flex; align-items: flex-start; gap: 12px; padding: 14px 18px; border-bottom: 1px solid #f2f4f6; transition: background .15s; }
.al-row:last-child { border-bottom: none; }
.al-row:hover { background: #f8fafc; }
.al-row-dot { width: 9px; height: 9px; border-radius: 50%; flex-shrink: 0; margin-top: 7px; }
.al-row-main { flex: 1; min-width: 0; }
.al-row-title { font-size: 15px; font-weight: 600; color: #1a2b3c; }
.al-row-loc { font-size: 12px; color: #9aa6b2; margin-top: 3px; }
.al-row-flow { font-size: 12px; color: #52c41a; margin-top: 5px; }
.al-row-right { display: flex; flex-direction: column; align-items: flex-end; gap: 6px; flex-shrink: 0; width: 112px; }
.al-row-time { font-size: 12px; color: #9aa6b2; }
.al-badge { font-size: 12px; border-radius: 4px; padding: 2px 10px; border: 1px solid transparent; }
.al-badge.st-todo { background: #fff1f0; color: #cf1322; border-color: #ffa39e; }
.al-badge.st-doing { background: #fff7e6; color: #d46b08; border-color: #ffd591; }
.al-badge.st-done { background: #f6ffed; color: #389e0d; border-color: #b7eb8f; }
.al-btn { border: none; background: #1677ff; color: #fff; border-radius: 4px; padding: 5px 16px; font-size: 12px; cursor: pointer; transition: background .15s; }
.al-btn:hover { background: #4096ff; }
.al-link { border: none; background: none; color: #1677ff; font-size: 12px; cursor: pointer; padding: 5px 0; }
.al-link:hover { text-decoration: underline; }
/* 三步处理流程弹窗 */
.proc-mask { position: fixed; inset: 0; background: rgba(15,23,42,.45); z-index: 1000; display: flex; align-items: center; justify-content: center; padding: 20px; }
.proc-card { width: 560px; max-width: 100%; max-height: 90vh; overflow: auto; background: #fff; border-radius: 12px; box-shadow: 0 12px 40px rgba(15,23,42,.18); }
.proc-head { display: flex; align-items: center; justify-content: space-between; padding: 16px 22px; border-bottom: 1px solid #f0f2f4; font-size: 16px; font-weight: 800; color: #1a2b3c; }
.proc-x { border: none; background: none; font-size: 14px; color: #9aa6b2; cursor: pointer; }
.proc-x:hover { color: #1a2b3c; }
.proc-steps { display: flex; align-items: center; padding: 18px 22px 6px; }
.proc-step { display: flex; align-items: center; gap: 8px; }
.proc-step-dot { width: 24px; height: 24px; border-radius: 50%; background: #eef2f6; color: #9aa6b2; display: flex; align-items: center; justify-content: center; font-size: 12px; font-weight: 700; }
.proc-step.on .proc-step-dot { background: #52c41a; color: #fff; }
.proc-step.cur .proc-step-dot { background: #1677ff; color: #fff; }
.proc-step-label { font-size: 13px; color: #9aa6b2; }
.proc-step.on .proc-step-label, .proc-step.cur .proc-step-label { color: #1a2b3c; font-weight: 600; }
.proc-step-line { width: 56px; height: 2px; background: #eef2f6; margin: 0 10px; }
.proc-step.on .proc-step-line { background: #52c41a; }
.proc-body { padding: 14px 22px 18px; }
.proc-summary { background: #f8fafc; border: 1px solid #edf0f3; border-radius: 8px; padding: 14px 16px; }
.proc-alarm-title { font-size: 15px; font-weight: 700; color: #1a2b3c; margin-bottom: 10px; }
.proc-kv { display: flex; font-size: 13px; padding: 5px 0; }
.proc-kv span { width: 72px; flex-shrink: 0; color: #9aa6b2; }
.proc-kv b { font-weight: 600; color: #2a3b4d; }
.proc-tip { font-size: 12px; color: #9aa6b2; margin-top: 12px; }
.proc-form .proc-label { display: block; font-size: 13px; color: #2a3b4c; font-weight: 600; margin: 12px 0 6px; }
.proc-form .proc-label i { color: #f5222d; font-style: normal; }
.proc-row2 { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.proc-foot { display: flex; justify-content: flex-end; gap: 10px; padding: 14px 22px; border-top: 1px solid #f0f2f4; }

/* ===== v1.13 8.5 钉钉风格考勤日历 ===== */
.att-month-label { min-width: 110px; text-align: center; font-weight: 700; font-size: 15px; color: var(--brand); }
.att-summary { display: flex; gap: 12px; flex-wrap: wrap; margin-bottom: 12px; }
.att-cal-panel { padding: 14px 16px; }
.att-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 6px; }
.att-gh { text-align: center; font-size: 12px; color: var(--muted); font-weight: 600; padding: 4px 0; }
.att-cell { min-height: 64px; border: 1px solid var(--border); border-radius: 8px; padding: 6px 8px; display: flex; flex-direction: column; justify-content: space-between; background: #fff; transition: all .12s; }
.att-cell.att-empty { background: transparent; border: none; }
.att-day { font-size: 13px; font-weight: 700; color: #2a3b4d; }
.att-st { font-size: 11px; align-self: flex-start; padding: 1px 7px; border-radius: 8px; }
.att-cell.st-在岗 { background: #eafaf1; border-color: #9fe3c0; }
.att-cell.st-在岗 .att-st { background: #2dbb6e; color: #fff; }
.att-cell.st-请假 { background: #fff6e8; border-color: #f3cf94; }
.att-cell.st-请假 .att-st { background: #f0a020; color: #fff; }
.att-cell.st-休息 { background: #f3f5f8; border-color: #dfe5ec; }
.att-cell.st-休息 .att-st { background: #9aa6b2; color: #fff; }
.att-cell.st-离职 { background: #fdecec; border-color: #f3b6b6; }
.att-cell.st-离职 .att-st { background: #f25555; color: #fff; }
.att-cell.st-缺卡 { background: #fff; border-style: dashed; border-color: #e2e8f0; }
.att-cell.st-缺卡 .att-st { background: #c0c8d0; color: #fff; }
.att-list-title { font-size: 13px; font-weight: 700; color: var(--brand); margin: 4px 2px 10px; }

/* ===== v1.11 设备位置卡片附加信息 ===== */
.dt-box .db-mgr { font-size: 11px; color: var(--muted); margin-left: 6px; }

/* ===== v1.11 人力中心 · 项目人员架构（组织架构图） ===== */
.org-tree { padding: 6px 0; }
.org-node {
  position: relative; display: flex; align-items: center; gap: 12px;
  border: 1.5px solid var(--border); border-radius: 8px; background: #fff;
  padding: 10px 14px; margin-bottom: 8px; transition: all .15s;
}
.org-node:hover { border-color: #5DCAA5; box-shadow: 0 2px 8px rgba(12,68,124,.08); }
.org-bar { position: absolute; left: 0; top: 8px; bottom: 8px; width: 3px; border-radius: 3px; background: #0C447C; }
.org-main { flex: 1; min-width: 0; }
.org-name { font-size: 14px; font-weight: 600; color: #2a3b4d; }
.org-leader { margin-left: 10px; font-size: 11px; font-weight: 400; color: var(--muted); background: #eef2f6; border-radius: 8px; padding: 1px 8px; }
.org-code { margin-top: 4px; font-size: 11px; color: var(--muted); }
.org-acts { display: flex; gap: 6px; flex-shrink: 0; }

/* ===== v1.13 8.1 组织架构图（自顶向下，连接线） ===== */
.org-scroll { overflow-x: auto; padding: 8px 4px 16px; }
.org-chart { display: flex; justify-content: center; min-width: max-content; }
.org-chart ul { display: flex; padding-top: 22px; position: relative; transition: .3s; }
.org-chart li { list-style: none; position: relative; padding: 22px 10px 0; display: flex; flex-direction: column; align-items: center; }
.org-chart li::before, .org-chart li::after {
  content: ''; position: absolute; top: 0; width: 50%; height: 22px; border-top: 2px solid #cbd5e1;
}
.org-chart li::before { right: 50%; border-right: 2px solid #cbd5e1; }
.org-chart li::after { left: 50%; border-left: 2px solid #cbd5e1; }
.org-chart li:only-child::before, .org-chart li:only-child::after { display: none; }
.org-chart li:first-child::before, .org-chart li:last-child::after { border: 0 none; }
.org-chart li:last-child::before { border-right: 2px solid #cbd5e1; border-radius: 0 6px 0 0; }
.org-chart li:first-child::after { border-left: 2px solid #cbd5e1; border-radius: 6px 0 0 0; }
.org-chart ul::before { content: ''; position: absolute; top: 0; left: 50%; border-left: 2px solid #cbd5e1; width: 0; height: 22px; }
.org-chart > ul { padding-top: 0; }
.org-chart > ul::before { display: none; }
.org-box {
  position: relative; width: 210px; background: #fff; border: 1.5px solid var(--border);
  border-radius: 10px; padding: 12px 14px; box-shadow: 0 4px 14px rgba(12,68,124,.06);
  transition: all .15s;
}
.org-box::before {
  content: ''; position: absolute; top: -22px; left: 50%; transform: translateX(-50%);
  width: 2px; height: 22px; background: #cbd5e1;
}
.org-chart > ul > li > .org-box::before { display: none; }
.org-box:hover { border-color: #5DCAA5; box-shadow: 0 6px 20px rgba(12,68,124,.15); }
.ob-name { font-size: 14px; font-weight: 700; color: #0C447C; }
.ob-leader { margin-top: 5px; font-size: 12px; color: var(--muted); }
.ob-code { margin-top: 2px; font-size: 11px; color: #9aa6b2; }
.ob-acts { display: flex; gap: 5px; flex-wrap: wrap; justify-content: center; margin-top: 10px; }
.ob-acts .btn { padding: 3px 8px; font-size: 11px; }

/* ===== v1.12/v1.13 驾驶舱巡检统计：饼图放大居中 + 图例正下方 ===== */
.donut-hero { padding: 22px 0 16px; display: flex; flex-direction: column; align-items: center; }
.donut-hero .donut { width: 260px; height: 260px; }
.donut-hero .donut-big { font-size: 25px; }  /* v1.18：50→25 缩小25字号 */
.donut-hero .donut-sub { font-size: 8px; }   /* v1.19：5→8 调整字号 */
.donut-hero .legend { font-size: 13px; margin-top: 16px; width: 100%; justify-content: center; }
.donut-hero .legend li { margin: 7px 0; }

/* ===== v1.13 分页控件 ===== */
.pager { display: flex; align-items: center; gap: 6px; justify-content: center; padding: 14px 0 4px; flex-wrap: wrap; }
.pg { border: 1px solid var(--border); background: #fff; color: var(--text); border-radius: 6px; padding: 6px 12px; font-size: 13px; cursor: pointer; transition: all .15s; min-width: 34px; }
.pg:hover:not(:disabled) { border-color: var(--brand); color: var(--brand); }
.pg.active { background: var(--brand); border-color: var(--brand); color: #fff; font-weight: 700; }
.pg:disabled { opacity: .45; cursor: not-allowed; }
.pg-ellipsis { color: var(--muted); padding: 0 2px; }
.pg-info { margin-left: 8px; font-size: 12px; color: var(--muted); }

/* ===== v1.15：维保中心 / 维修中心 / 库管中心 / 账号角色 改版 ===== */
/* 大弹窗（维保MOP / 维保计划 新增） */
/* v1.18：弹窗整体加宽（MOP / 维保计划 / 到期提醒等宽表使用）
 * 注意：modal-lg / modal-xl 加在遮罩层 #modalMask（.modal-mask）上，需按后代选择器命中内部 .modal */
.modal-mask.modal-lg .modal { width: 1180px; max-width: 96vw; height: 88vh; }
.modal-mask.modal-lg .modal-body { flex: 1; }
.modal-mask.modal-xl .modal { width: 1400px; max-width: 98vw; height: 90vh; }
.modal-mask.modal-xl .modal-body { flex: 1; }
.form-row3 { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 14px; margin-bottom: 14px; }
.mop-steps-table th, .mop-steps-table td { padding: 6px 8px; font-size: 12px; }
.mop-steps-table td .input { padding: 5px 8px; font-size: 12px; }

/* 维保计划：年度视图 */
.pl-legend { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; margin-bottom: 12px; }
.pl-legend .pl-lg { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; color: #44576b; cursor: pointer; padding: 3px 10px; border-radius: 14px; border: 1px solid var(--border); background: #fff; }
.pl-legend .pl-lg.active { border-color: #0C447C; background: #eaf3fb; font-weight: 700; }
.pl-legend .pl-lg .dot { width: 10px; height: 10px; border-radius: 50%; }
.pl-table th.month { text-align: center; padding: 9px 4px; min-width: 64px; }
.pl-table td.month-cell { text-align: center; padding: 6px 4px; }
.pl-dot { width: 14px; height: 14px; border-radius: 50%; display: inline-block; cursor: pointer; box-shadow: 0 0 0 2px rgba(255,255,255,.85), 0 1px 3px rgba(0,0,0,.18); transition: transform .12s; }
.pl-dot:hover { transform: scale(1.35); }
.pl-plan-name { color: var(--brand); cursor: pointer; font-weight: 600; }
.pl-plan-name:hover { text-decoration: underline; }
.pl-dev-cnt { color: var(--brand); cursor: pointer; }
.pl-dev-cnt:hover { text-decoration: underline; }
.pl-status-pill { display: inline-block; padding: 2px 10px; border-radius: 12px; font-size: 12px; font-weight: 700; color: #fff; }

/* 维保工单：设备列表 / 步骤 / 附件缩略图 */
.ex-photos { display: flex; gap: 8px; flex-wrap: wrap; }
.ex-photos img, .rf-photos img { width: 84px; height: 64px; object-fit: cover; border-radius: 6px; border: 1px solid var(--border); cursor: zoom-in; transition: transform .12s; }
.ex-photos img:hover, .rf-photos img:hover { transform: scale(1.06); box-shadow: 0 3px 10px rgba(12,68,124,.25); }
.ex-steps-note { font-size: 12px; color: var(--muted); margin: 6px 0 4px; }

/* 灯箱（图片放大 + 左右翻页） */
.lb-mask { position: fixed; inset: 0; background: rgba(8,14,24,.82); z-index: 2000; display: flex; align-items: center; justify-content: center; flex-direction: column; }
.lb-mask[hidden] { display: none; }
.lb-img { max-width: 78vw; max-height: 76vh; border-radius: 10px; box-shadow: 0 18px 60px rgba(0,0,0,.5); }
.lb-bar { display: flex; align-items: center; gap: 18px; margin-top: 16px; color: #dbe6f3; font-size: 13px; }
.lb-btn { width: 42px; height: 42px; border-radius: 50%; border: 1px solid rgba(255,255,255,.4); background: rgba(255,255,255,.1); color: #fff; font-size: 19px; cursor: pointer; transition: all .15s; }
.lb-btn:hover { background: #1677ff; border-color: #1677ff; }
.lb-close { position: absolute; right: 22px; top: 18px; background: none; border: none; color: #cfd9e4; font-size: 26px; cursor: pointer; }
.lb-close:hover { color: #fff; }

/* 维修中心：左统计 + 右列表 */
.rp-layout { display: grid; grid-template-columns: 300px 1fr; gap: 14px; align-items: start; }
.rp-stat-panel { background: var(--panel); border: 1px solid var(--border); border-radius: 12px; padding: 14px; }
.rp-stat-title { font-size: 13px; font-weight: 700; color: var(--brand); margin-bottom: 10px; }
.rp-stat-head { display: grid; grid-template-columns: 1fr 64px 64px; font-size: 12px; color: var(--muted); padding: 4px 8px; }
.rp-stat-row { display: grid; grid-template-columns: 1fr 64px 64px; align-items: center; padding: 8px; border-radius: 8px; font-size: 13px; cursor: pointer; }
.rp-stat-row:hover { background: #eef5fb; }
.rp-stat-row b { text-align: center; }
.rp-stat-row.total { border-top: 1px dashed var(--border); margin-top: 4px; padding-top: 10px; font-weight: 700; color: var(--brand); }
.rp-note { grid-column: 1 / -1; }

/* 维修任务 6 步流程详情（全屏弹窗） */
.rpd-mask { position: fixed; inset: 0; background: rgba(15,23,42,.5); z-index: 900; overflow-y: auto; padding: 26px 20px; }
.rpd-card { max-width: 1100px; margin: 0 auto; background: #fff; border-radius: 14px; box-shadow: 0 14px 50px rgba(15,23,42,.25); overflow: hidden; }
.rpd-head { display: flex; align-items: center; justify-content: space-between; padding: 16px 24px; border-bottom: 1px solid #eef1f4; }
.rpd-title { font-size: 17px; font-weight: 800; color: #1a2b3c; display: flex; align-items: center; gap: 10px; }
.rpd-x { border: none; background: none; font-size: 20px; color: #9aa6b2; cursor: pointer; }
.rpd-x:hover { color: #1a2b3c; }
.rpd-actions { display: flex; justify-content: flex-end; gap: 10px; padding: 12px 24px 0; }
/* 六步流程条 */
.rf-steps { display: flex; align-items: flex-start; justify-content: center; padding: 22px 30px 8px; gap: 0; }
.rf-step { display: flex; flex-direction: column; align-items: center; width: 128px; position: relative; cursor: pointer; }
.rf-step .rf-line { position: absolute; top: 24px; left: 50%; margin-left: 14px; width: 100px; height: 3px; background: #e6ebf1; border-radius: 2px; }
.rf-step.done .rf-line { background: #2dbb6e; }
.rf-icon { width: 48px; height: 48px; border-radius: 50%; background: #eef2f6; color: #9aa6b2; display: flex; align-items: center; justify-content: center; font-size: 22px; z-index: 1; border: 3px solid #f2f5f8; transition: all .15s; }
.rf-step.done .rf-icon { background: #2dbb6e; color: #fff; border-color: #d3f3e1; }
.rf-step.cur .rf-icon { background: #1677ff; color: #fff; border-color: #d8e8ff; box-shadow: 0 0 0 5px rgba(22,119,255,.14); }
.rf-step.wait .rf-icon { background: #f4f6f9; }
.rf-name { margin-top: 8px; font-size: 14px; font-weight: 700; color: #1a2b3c; }
.rf-step.wait .rf-name { color: #9aa6b2; font-weight: 400; }
.rf-step.done .rf-name, .rf-step.cur .rf-name { color: #1a2b3c; }
.rf-avatar { margin-top: 5px; width: 30px; height: 30px; border-radius: 50%; background: #fdeed8; border: 1.5px solid #f2c98a; display: flex; align-items: center; justify-content: center; font-size: 16px; }
.rf-avatar-empty { visibility: hidden; }
/* 阶段信息块 */
.rf-sec { margin: 10px 24px; border-radius: 10px; overflow: hidden; border: 1px solid #eef1f4; }
.rf-sec-head { background: linear-gradient(90deg, #e9f0f8, #f4f8fc); padding: 8px 14px; font-size: 13px; font-weight: 700; color: #0C447C; display: flex; align-items: center; gap: 8px; }
.rf-sec-head .rf-sec-time { margin-left: auto; font-weight: 400; color: #7a8a99; font-size: 12px; }
.rf-sec-body { padding: 10px 14px; }
.rf-kv { display: flex; padding: 4px 0; font-size: 13px; }
.rf-kv .k { width: 96px; flex: none; color: #8a99a8; }
.rf-kv .v { color: #253444; font-weight: 500; word-break: break-all; }
.rf-label { display: block; font-size: 12px; color: #5a6b7c; font-weight: 600; margin: 10px 0 4px; }
.rf-photos { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 6px; }
.rf-upload { display: flex; align-items: center; gap: 8px; margin-top: 8px; flex-wrap: wrap; }
.rf-empty { font-size: 12px; color: #9aa6b2; padding: 4px 0; }

/* 维修分类管理（新增任务弹窗内联） */
.cat-manage { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-top: 6px; }
.cat-chip { display: inline-flex; align-items: center; gap: 6px; border: 1px solid var(--border); background: #f8fafc; border-radius: 14px; padding: 3px 10px; font-size: 12px; }
.cat-chip button { border: none; background: none; color: var(--danger); cursor: pointer; font-size: 12px; padding: 0; }
.rc-add-row { display: flex; gap: 6px; margin-top: 8px; }
.rc-add-row .input { max-width: 160px; }

/* 在修人员卡片 */
.rst-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); gap: 14px; }
.rst-card { background: #fff; border: 1px solid var(--border); border-radius: 12px; padding: 16px; transition: box-shadow .15s; }
.rst-card:hover { box-shadow: 0 6px 20px rgba(12,68,124,.12); border-color: rgba(93,202,165,.7); }
.rst-top { display: flex; align-items: center; gap: 12px; }
.rst-avatar { width: 48px; height: 48px; border-radius: 50%; background: linear-gradient(135deg, #0C447C, #1a5a9c); color: #fff; display: flex; align-items: center; justify-content: center; font-size: 20px; font-weight: 700; flex: none; }
.rst-name { font-size: 15px; font-weight: 700; color: #1a2b3c; }
.rst-sub { font-size: 12px; color: #8a99a8; margin-top: 2px; }
.rst-stats { display: flex; gap: 8px; margin-top: 12px; }
.rst-st { flex: 1; background: #f6f9fc; border-radius: 8px; padding: 8px 6px; text-align: center; }
.rst-st b { display: block; font-size: 20px; color: #0C447C; }
.rst-st span { font-size: 11px; color: #8a99a8; }
.rst-tags { margin-top: 10px; display: flex; gap: 6px; flex-wrap: wrap; }

/* 账号管理：密码眼睛 + 状态开关 */
.eye-btn { border: none; background: none; cursor: pointer; font-size: 15px; color: #7a8a99; padding: 2px 4px; vertical-align: middle; }
.eye-btn:hover { color: #1677ff; }
.st-toggle { display: inline-flex; border-radius: 14px; overflow: hidden; border: 1px solid var(--border); }
.st-toggle button { border: none; padding: 3px 12px; font-size: 12px; cursor: pointer; background: #fff; color: #8a99a8; }
.st-toggle button.on-on { background: #e6f6ee; color: #1d9a55; font-weight: 700; }
.st-toggle button.on-off { background: #fdeaea; color: #cf3f3a; font-weight: 700; }
.role-link { color: var(--brand); cursor: pointer; }
.role-link:hover { text-decoration: underline; }

/* 角色管理：关联用户弹窗（复用 proc-card 风格） */
.picker-mask { position: fixed; inset: 0; background: rgba(15,23,42,.45); z-index: 950; display: flex; align-items: center; justify-content: center; padding: 20px; }
.picker-card { width: 860px; max-width: 96vw; max-height: 88vh; overflow: auto; background: #fff; border-radius: 12px; box-shadow: 0 14px 50px rgba(15,23,42,.25); display: flex; flex-direction: column; }
.picker-head { display: flex; align-items: center; justify-content: space-between; padding: 15px 22px; border-bottom: 1px solid #eef1f4; font-size: 15px; font-weight: 800; color: #1a2b3c; }
.picker-body { padding: 16px 22px; overflow-y: auto; flex: 1; }
.picker-foot { display: flex; justify-content: flex-end; gap: 10px; padding: 12px 22px; border-top: 1px solid #eef1f4; }
/* 添加保养设备选择器 */
.dp-filter { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-bottom: 10px; }
.dp-check { width: 15px; height: 15px; cursor: pointer; }
.dp-cnt { font-size: 12px; color: #8a99a8; margin: 8px 0; }
/* 执行周期（可添加多段） */
.period-list { display: flex; flex-direction: column; gap: 8px; }
.period-row { display: flex; align-items: center; gap: 8px; }
.period-row .input { max-width: 150px; }
.period-row .idx { width: 24px; color: #8a99a8; font-size: 12px; }

/* ==================== v1.16 应急中心（沿用51扳手版式） ==================== */
.yj-tabs { display: flex; gap: 0; border-bottom: 2px solid var(--border); margin-bottom: 12px; }
.yj-tab { padding: 10px 22px; font-size: 14px; color: var(--muted); background: none; border: none; cursor: pointer; border-bottom: 2px solid transparent; margin-bottom: -2px; }
.yj-tab.active { color: #0C447C; font-weight: 600; border-bottom-color: #0C447C; }
.yj-filter { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; background: #fff; border: 1px solid var(--border); border-radius: 10px; padding: 12px 16px; margin-bottom: 12px; }
.yj-f-label { font-size: 13px; color: #5a6a7a; }
.yj-f-sep { color: var(--muted); font-size: 12px; margin: 0 2px; }
.yj-f-val { font-size: 13px; color: #2a3b4d; font-weight: 600; }
.yj-stats { display: flex; background: #fff; border: 1px solid var(--border); border-radius: 10px; margin-bottom: 12px; overflow: hidden; flex-wrap: wrap; }
.yj-stat { flex: 1; min-width: 150px; display: flex; align-items: center; gap: 10px; padding: 18px 22px; border-right: 1px dashed var(--border); }
.yj-stat:last-child { border-right: none; }
.yj-stat .dot { width: 14px; height: 14px; border-radius: 50%; flex: none; }
.yj-st-label { font-size: 13px; color: #5a6a7a; }
.yj-st-num { font-size: 20px; font-weight: 700; color: #1e80ff; }
.yj-stat:nth-child(n+2) .yj-st-num { color: #2a3b4d; }
.yj-st-num em { font-style: normal; font-size: 12px; font-weight: 400; color: var(--muted); margin-left: 4px; }
.yj-pager { display: flex; align-items: center; gap: 8px; padding: 12px 6px 4px; font-size: 12px; color: var(--muted); justify-content: flex-end; flex-wrap: wrap; }
.yj-pager button { min-width: 28px; height: 26px; border: 1px solid var(--border); background: #fff; border-radius: 6px; cursor: pointer; font-size: 12px; }
.yj-pager button.active { background: #1e80ff; color: #fff; border-color: #1e80ff; }
.yj-pager button:disabled { opacity: .4; cursor: default; }
.yj-pager input { height: 26px; }
/* 应急/安全 流程抽屉 */
.yj-card { width: min(920px, 94vw); max-height: 88vh; }
.yj-flow-status { font-size: 13px; color: #2dbb6e; margin-bottom: 8px; }
.yj-flow-status a { color: #1e80ff; margin-left: 8px; }
.yj-fstep { display: flex; gap: 14px; padding: 12px 14px; border-left: 4px solid #e3ebf2; border-radius: 6px; margin-left: 6px; margin-bottom: 10px; position: relative; }
.yj-fstep:before { display: none; }
.yj-fava { width: 34px; height: 34px; border-radius: 8px; color: #fff; font-size: 14px; font-weight: 600; display: flex; align-items: center; justify-content: center; flex: none; }
.yj-fmain { flex: 1; min-width: 0; }
.yj-fhead { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.yj-fhead b { font-size: 14px; color: #2a3b4d; }
/* v1.29：流程节点经办人姓名（与节点名称并排展示） */
.yj-fperson { font-size: 12px; color: #1e80ff; background: #e7f0fb; border: 1px solid #aacffb; border-radius: 12px; padding: 1px 10px; font-weight: 600; }
.yj-fst { font-size: 12px; color: var(--muted); }
.yj-ftime { margin-left: auto; font-size: 12px; color: var(--muted); }
.yj-fitems { margin: 8px 0 0; padding-left: 18px; color: #44566b; font-size: 13px; line-height: 1.9; }
.yj-upload-row { display: flex; align-items: center; gap: 14px; margin: 12px 0; }
.yj-upload-label { font-size: 13px; color: #5a6a7a; font-weight: 600; }
.yj-divider { border-top: 1px dashed var(--border); margin: 14px 0; }

/* ==================== v1.16 人员考勤 · 钉钉排班网格 ==================== */
.sk-table { border-collapse: collapse; min-width: 900px; }
.sk-table th, .sk-table td { border: 1px solid #eef2f6; padding: 0; text-align: center; font-size: 12px; }
.sk-table thead tr:first-child th { height: 30px; background: #f8fafc; color: #44566b; }
.sk-table thead tr:nth-child(2) th { height: 26px; background: #f8fafc; color: #8c9bab; font-size: 11px; }
.sk-table th.sk-wk { color: #f25555; }
.sk-table td { height: 38px; min-width: 34px; }
.sk-table .sk-name { min-width: 90px; }
.sk-table .sk-sticky { background: #fff; font-weight: 600; color: #2a3b4d; font-size: 13px; position: sticky; left: 0; z-index: 1; }
.sk-cell { display: inline-block; min-width: 30px; padding: 4px 6px; border-radius: 4px; color: #fff; font-size: 11px; line-height: 1.2; }
.sk-blank { background: #fbfcfe; }
.sk-legend { display: flex; gap: 8px; flex-wrap: wrap; padding: 4px 2px 10px; }
.sk-lg { line-height: 1; }

/* ==================== v1.16 组织架构 · 部门人员 ==================== */
.org-staff { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.org-chip { background: #eef4fb; color: #0C447C; border: 1px solid #d7e4f2; font-size: 12px; padding: 2px 10px; border-radius: 12px; }

/* ==================== v1.16 通知规则弹窗 ==================== */
.rules-card { width: min(960px, 94vw); max-height: 86vh; }

/* ==================== v1.17 库存中心 / 维保计划配色 / MOP判断型 ==================== */
/* 紧凑表格：列间距缩短 */
.cmp-table th, .cmp-table td { padding: 7px 8px !important; font-size: 12.5px; white-space: nowrap; }
.cmp-table th:last-child, .cmp-table td:last-child { padding-right: 12px !important; }
/* 三个颜色标签操作按钮：编辑蓝 / 删除红 / 出入库记录橙 */
.act-tags { display: inline-flex; gap: 6px; flex-wrap: wrap; }
.act-tag { border: none; border-radius: 4px; padding: 3px 10px; font-size: 12px; color: #fff; cursor: pointer; line-height: 1.4; }
.act-tag.at-edit { background: #1e80ff; }
.act-tag.at-del { background: #f25555; }
.act-tag.at-rec { background: #e6772e; }
.act-tag:hover { opacity: .85; }
/* 出入库类型徽标：出库橙 / 入库绿 */
.rec-badge { display: inline-block; padding: 2px 10px; border-radius: 4px; font-size: 12px; font-weight: 600; color: #fff; }
.rec-badge.rec-out { background: #e6772e; }
.rec-badge.rec-in { background: #2dbb6e; }
.rec-add-box { border-top: 1px dashed var(--border); margin-top: 10px; padding-top: 8px; }
/* MOP 判断型判定徽标 */
.judge-badge { display: inline-block; padding: 2px 10px; border-radius: 4px; font-size: 12px; font-weight: 600; color: #fff; }
.judge-badge.judge-pass { background: #2dbb6e; }
.judge-badge.judge-fail { background: #f25555; }

/* ==================== v1.18 迭代 ==================== */
/* 1) 告警明细右侧：时间 / 状态标签 / 处理按钮 同一行（v1.19：由 1×2 改为单行） */
.al-row-right { display: flex; flex-direction: row; align-items: center; justify-content: flex-end; gap: 10px; flex-shrink: 0; white-space: nowrap; width: auto; }
.al-rr-left, .al-rr-right { display: contents; }
.al-row-time { font-size: 12px; color: #9aa6b2; }
/* 2) 出入库记录按钮：橘色 → 浅灰 */
.act-tag.at-rec { background: #dfe5ec; color: #2a3b4d; border: 1px solid #ccd5df; }
/* 3) 到期提醒设置：删除按钮与内容不换行 */
.wty-table td, .wty-table th { white-space: nowrap; }
.wty-table td:last-child, .wty-table th:last-child { width: 78px; }
/* 4) 备件分类管理列表 */
.cat-list-table td, .cat-list-table th { padding: 8px 10px; }
/* 5) 一键全选（绿色标识） */
.btn-pickall { background: #2dbb6e; border-color: #2dbb6e; color: #fff; }
.btn-pickall:hover { background: #27a562; color: #fff; }

/* ===== v1.20：巡检计划统计卡 / 巡检路线 ===== */
/* 1) 巡检管理表格：显式取消悬停放大/位移（仅保留背景高亮） */
.panel .table tr:hover td { transform: none; }
.panel .table { transform: none; }
/* 2) 巡检路线状态列：按钮形式（启用绿 / 停用红） */
.st-btn { display: inline-block; min-width: 64px; text-align: center; padding: 5px 16px; border-radius: 6px; font-size: 13px; font-weight: 700; color: #fff; letter-spacing: 2px; }
.st-btn.st-on { background: #2dbb6e; box-shadow: 0 1px 4px rgba(45,187,110,.35); }
.st-btn.st-off { background: #f25555; box-shadow: 0 1px 4px rgba(242,85,85,.35); }
/* 3) 执行时间段：多段自选范围 */
.freq-box { display: flex; flex-direction: column; gap: 8px; align-items: flex-start; }
.freq-row { display: flex; align-items: center; gap: 8px; }
.freq-row .input[type="time"] { width: 128px; }
.freq-sep { color: var(--muted); font-size: 13px; }
#freqAdd { margin-top: 2px; }

/* ===== v1.21：巡检路线弹窗 / 时间段控件 ===== */
/* 1) 巡检路线新增·编辑弹窗加宽 */
.modal.modal-route { width: 980px; max-width: 96vw; height: 88vh; }
.modal.modal-route .modal-body { flex: 1; }
/* 2) 执行时间段删除按钮：加宽 + 不换行 */
.freq-del { white-space: nowrap; padding: 6px 18px; font-weight: 600; }
/* 3) 添加时间段：绿色背景标签 */
.btn-addfreq { background: #2dbb6e; border-color: #2dbb6e; color: #fff; font-weight: 600; }
.btn-addfreq:hover { background: #27a562; border-color: #27a562; color: #fff; }

/* v1.21：维保计划/工单统一状态色胶囊（与维保计划 8 色一致） */
.pl-stpill { display: inline-block; padding: 3px 12px; border-radius: 6px; font-size: 13px; font-weight: 600; white-space: nowrap; line-height: 1.5; }

/* ===== v1.22：巡检计划全屏详情页 ===== */
/* v1.24：巡检详情页渲染在内容区内（与巡检计划页同宽，左侧菜单保留），不再是全屏遮罩 */
.ip-page { min-height: 60vh; }
.ip-topbar { display: flex; align-items: center; justify-content: space-between; background: #fff; border: 1px solid var(--border); border-radius: 10px; padding: 10px 18px; margin-bottom: 16px; }
.ip-crumbs { display: flex; align-items: center; gap: 8px; }
.ip-crumb { font-size: 13px; color: #5a6a7a; background: #eef3f8; border-radius: 4px; padding: 4px 12px; }
.ip-crumb.active { background: #0C447C; color: #fff; font-weight: 600; }
.ip-crumb-sep { color: #c6d2de; }
.ip-actions { display: flex; gap: 8px; }
.ip-body { padding: 0; }
.ip-page-title { font-size: 20px; font-weight: 700; color: #1a2b3c; margin-bottom: 14px; }
.ip-sec { background: #fff; border: 1px solid var(--border); border-radius: 10px; padding: 16px 20px; margin-bottom: 16px; }
.ip-sec-title { font-size: 15px; font-weight: 700; color: #1a2b3c; border-left: 4px solid #1677ff; padding-left: 10px; margin-bottom: 12px; }
.ip-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px 24px; }
.ip-kv { display: flex; gap: 8px; font-size: 13px; align-items: center; }
.ip-k { color: var(--muted); flex: none; }
.ip-v { color: #1a2b3c; font-weight: 600; word-break: break-all; }
.ip-filters { display: flex; gap: 10px; margin-bottom: 10px; }
.ip-tbl-wrap { max-height: 62vh; overflow: auto; border: 1px solid var(--border); border-radius: 8px; }
.ip-table { transform: none; }
.ip-table th, .ip-table td { font-size: 12.5px; }
.ip-c { text-align: center; }
/* 动态巡检点高亮：浅绿背景 + 左侧绿色描边；已完成组浅色底 */
.ip-table tr.insp-live > td { background: #e2f6ea !important; box-shadow: inset 3px 0 0 #2dbb6e; }
.ip-table tr.insp-done > td { background: #f6faf8; }
.ip-pager { display: flex; align-items: center; gap: 12px; margin-top: 10px; }
.ip-pg-info { font-size: 12.5px; color: var(--muted); }
.ip-live-hint { margin-left: auto; display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; color: #1b7a43; font-weight: 600; }
.ip-live-dot { width: 8px; height: 8px; border-radius: 50%; background: #2dbb6e; animation: ipPulse 1s infinite; }
@keyframes ipPulse { 0%, 100% { opacity: 1; } 50% { opacity: .3; } }

/* ==================== v1.23 ==================== */
/* 1) 驾驶舱今日在岗：与待办事项等高，滚动查看（每屏约 7 条） */
.duty-card { display: flex; flex-direction: column; }
.duty-card .board-title { flex: none; }
.duty-list { flex: 1; min-height: 0; overflow-y: auto; max-height: 371px; scrollbar-width: thin; }
.duty-list::-webkit-scrollbar { width: 6px; }
.duty-list::-webkit-scrollbar-thumb { background: #c6d2de; border-radius: 3px; }
/* 2) 巡检计划表格状态：圆点 + 文字（文字颜色与表格其他列一致） */
.insp-st { display: inline-flex; align-items: center; gap: 7px; color: inherit; }
.insp-st .dot { width: 9px; height: 9px; border-radius: 50%; flex: none; }
/* 3) 维修分类自定义下拉：选项列表底部内置「增加 / 删除」按钮 */
.cat-select { position: relative; }
.cat-select-btn { width: 100%; text-align: left; cursor: pointer; color: #8a99a8; }
.cat-select-btn.has-val { color: #2a3b4d; }
.cat-panel { position: absolute; top: calc(100% + 4px); left: 0; right: 0; background: #fff; border: 1px solid var(--border); border-radius: 10px; box-shadow: 0 12px 32px rgba(15,35,60,.18); z-index: 990; overflow: hidden; }
.cat-opts { max-height: 208px; overflow-y: auto; }
.cat-opt { padding: 9px 14px; font-size: 13.5px; cursor: pointer; }
.cat-opt:hover { background: #f2f7fd; }
.cat-opt.active { background: #e8f1fb; color: #0C447C; font-weight: 600; }
.cat-foot { display: flex; gap: 8px; align-items: center; padding: 8px 10px; border-top: 1px solid var(--border); background: #fafbfc; }
.cat-foot .input { flex: 1; height: 30px; }
/* 4) 维修流程图人名：完整姓名胶囊 */
.rf-avatar { width: auto; min-width: 30px; height: 24px; border-radius: 12px; padding: 0 10px; font-size: 12.5px; background: #eef4fa; border: 1px solid #d7e3ef; color: #33475b; white-space: nowrap; justify-content: center; }
.rf-avatar-empty { visibility: visible; opacity: .45; }
/* 5) 在修人员：选中卡片高亮 + 任务清单分区 */
.rst-card { cursor: pointer; }
.rst-card.sel { border-color: #0C447C; box-shadow: 0 0 0 2px rgba(12,68,124,.18); background: #f4f8fc; }
.rs-task-title { font-weight: 700; color: #22333f; padding: 12px 0 6px; font-size: 14px; }
.rs-sec { margin: 8px 0 14px; }
.rs-sec-title { display: flex; align-items: center; gap: 8px; font-weight: 600; font-size: 13.5px; color: #33475b; padding: 8px 0; }
.rs-sec-title .dot { width: 9px; height: 9px; border-radius: 50%; flex: none; }
/* 6) 翻页页码省略号 */
.pg-ellipsis { color: var(--muted); padding: 0 2px; user-select: none; }

/* ==================== v1.25 维保计划年度概览：图例+表头锁定，表格区独立滚动 ==================== */
.pl-year-scroll { max-height: calc(100vh - 320px); min-height: 300px; overflow: auto; border: 1px solid var(--border); border-radius: 10px; background: #fff; }
.pl-year-scroll::-webkit-scrollbar { width: 12px; height: 12px; }
.pl-year-scroll::-webkit-scrollbar-track { background: #eef2f6; border-radius: 6px; }
.pl-year-scroll::-webkit-scrollbar-thumb { background: #b9c6d2; border-radius: 6px; border: 2px solid #eef2f6; }
.pl-year-scroll::-webkit-scrollbar-thumb:hover { background: #93a6b8; }
.pl-table { border-collapse: separate; border-spacing: 0; }
.pl-table th, .pl-table td { border-top: none; border-left: none; border-right: 1px solid #c9d4de; border-bottom: 1px solid #c9d4de; }
.pl-table thead th { position: sticky; top: 0; z-index: 2; }
.pl-table thead tr th:first-child { border-top-left-radius: 10px; }
.pl-table thead tr th:last-child { border-top-right-radius: 10px; }

/* ==================== v1.26 维修中心微调 ==================== */
/* 1) 分类下拉选项：左右布局 + 选项尾部红色 × 删除按钮 */
.cat-opt { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.cat-del { width: 20px; height: 20px; border-radius: 50%; border: none; background: transparent; color: #f25555; font-size: 15px; line-height: 1; cursor: pointer; flex: none; display: inline-flex; align-items: center; justify-content: center; padding: 0; }
.cat-del:hover { background: #fdeeec; }
/* 2) 任务总览「总维修任务」卡加宽，标签不换行 */
.insp-card .ic-label { white-space: nowrap; }
.insp-card.ic-total { flex: 1.7; }
/* v1.31：维保计划总览导航 —— 两行结构：左上角圆点+名称、正中数字+百分比，全部不跨行 */
.mp-summary { flex-wrap: nowrap; }
.mp-stat { cursor: default; flex-direction: column; align-items: flex-start; justify-content: center; gap: 8px; padding: 12px 12px 14px; min-width: 0; transition: background .18s, transform .18s; }
.mp-stat:hover { background: #eef5fb; transform: translateY(-2px); }
.mp-stat .mp-top { display: flex; align-items: center; gap: 6px; min-width: 0; }
.mp-stat .dot { width: 12px; height: 12px; flex: none; }
.mp-stat .ic-label { font-size: 13px; color: #5a6a7a; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.mp-stat .mp-num { align-self: center; white-space: nowrap; font-size: 22px; font-weight: 700; color: #2a3b4d; }
.mp-stat .mp-num em { font-style: normal; font-size: 12px; font-weight: 400; color: var(--muted); margin-left: 3px; }

.topbar-right { display: flex; align-items: center; gap: 12px; }

/* ---------- v1.33：顶栏全局搜索（与 EC 能碳平台一致） ---------- */
.top-search { display: flex; align-items: center; gap: 8px; background: var(--bg); border-radius: 9px; padding: 7px 12px; color: var(--muted); font-size: 13px; position: relative; }
.top-search input { border: none; background: none; outline: none; width: 170px; font-size: 13px; color: var(--text); }
.search-drop { display: none; position: absolute; top: calc(100% + 6px); right: 0; width: 280px; background: #fff; border: 1px solid var(--border); border-radius: 12px; box-shadow: 0 12px 32px rgba(12, 68, 124, .14); overflow: hidden; z-index: 80; }
.search-drop.show { display: block; }
.search-item { display: flex; align-items: center; gap: 8px; padding: 9px 14px; font-size: 13px; cursor: pointer; color: var(--text); }
.search-item:hover, .search-item.on { background: #F2F7FC; }
.search-item .si-ico { color: var(--mint); font-weight: 700; }
.search-item .si-label { font-weight: 600; color: var(--brand); }
.search-item .si-group { margin-left: auto; font-size: 11px; color: #92A1B0; white-space: nowrap; }
