/* ==================== 全局变量 ==================== */
:root {
  --changqin-green: #009999;  /* 长琴绿（西门子绿）— 交付管理主题色 */
  --primary: #3370ff;
  --primary-dark: #2b5fd9;
  --primary-light: #e8edff;
  --accent: #3370ff;
  --bg: #f5f6f7;
  --card-bg: #ffffff;
  /* 顶部栏背景：淡淡的紫色（状态栏安全区 + 导航条） */
  --header-bg: #f5f6f7;
  --text: #1f2329;
  --text-secondary: #646a73;
  --text-tertiary: #8f959e;
  --border: #e5e6eb;
  --danger: #f54a45;
  --warning: #ff7d00;
  --info: #3370ff;
  --success: #00b578;
  --shadow: 0 1px 3px rgba(0,0,0,0.04);
  --shadow-lg: 0 4px 12px rgba(0,0,0,0.06);
  --radius: 8px;
  --radius-sm: 6px;
  --radius-lg: 12px;
  --nav-height: 56px;
  --safe-bottom: env(safe-area-inset-bottom, 0px);
  /* 顶部安全区（状态栏/挖孔/刘海）：取系统安全区高度，最低 12px，保证标题不被摄像头遮挡 */
  --safe-top: max(12px, env(safe-area-inset-top, 0px));
  --header-height: 46px;
  /* ===== 字号规范 v1（P0 · 2026-10-22）=====
     12 / 13 / 14 / 15 / 16 / 17(内容流) / 18 / 22 / 32
     组件里一律写 var(--fs-*)，不再写死数值 */
  --fs-micro: 12px;        /* 角标、徽标、极小标注（下限） */
  --fs-caption: 13px;      /* 辅助说明、单位、时间 */
  --fs-body-2: 14px;       /* 次要信息、列表副行 */
  --fs-body: 15px;         /* 正文、主要信息、表单值 */
  --fs-card-title: 16px;   /* 卡片标题、列表主标题 */
  --fs-content: 17px;      /* 内容流正文（朋友圈式，微信同款） */
  --fs-title-2: 18px;      /* 顶栏、页面标题 */
  --fs-title-1: 22px;      /* 弹窗标题、区块大标题 */
  --fs-title-1-plus: 26px; /* 26 档：大号区块标题 / 图表主数字 */
  --fs-display: 32px;      /* 仪表盘主数值 */
  --lh-micro: 17px;
  --lh-caption: 18px;
  --lh-body-2: 20px;
  --lh-body: 22px;
  --lh-card-title: 23px;
  --lh-content: 25px;
  --lh-title-2: 26px;
  --lh-title-1: 30px;
  --lh-title-1-plus: 34px;
  --lh-display: 40px;
}

* { margin: 0; padding: 0; box-sizing: border-box; -webkit-tap-highlight-color: transparent; }

html, body {
  height: 100%;
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
  font-size: var(--fs-body);
  color: var(--text);
  background: var(--bg);
  overflow: hidden;
  -webkit-font-smoothing: antialiased;
}

input, textarea, button { font-family: inherit; font-size: inherit; border: none; outline: none; }
button { cursor: pointer; background: none; }
img { display: block; max-width: 100%; }

/* ==================== App 容器 ==================== */
#app {
  max-width: 480px;
  margin: 0 auto;
  height: 100vh;
  height: 100dvh;
  display: flex;
  flex-direction: column;
  background: var(--bg);
  position: relative;
  overflow: hidden;
  box-shadow: 0 0 40px rgba(0,0,0,0.08);
}

#app.auth-mode .app-main { display: none !important; }
#app.auth-mode .bottom-nav { display: none !important; }

#app.app-mode .auth-view { display: none; }
#app.app-mode .app-main { display: flex !important; }

/* ==================== 头部 ==================== */
.app-header {
  /* 顶部结构参考企业微信：状态栏安全区（避开摄像头/刘海）+ 48px 导航条，标题在导航条内居中
     "琴书"上方留白在安全区基础上再减 8px（高度整体收紧） */
  height: calc(var(--header-height) + var(--safe-top) - 13px);
  padding-top: calc(var(--safe-top) - 13px);
  background: var(--header-bg);
  display: flex;
  align-items: center;
  justify-content: center;
  position: relative;
  border-bottom: 0.5px solid var(--border);
  flex-shrink: 0;
  z-index: 10;
}

.app-header .title {
  font-size: var(--fs-card-title);
  font-weight: 600;
  color: var(--text);
}

.header-slogan {
  font-size: var(--fs-title-2);
  color: var(--text-secondary);
  font-weight: 600;
  letter-spacing: 0.5px;
}
/* 品牌名「琴书」：字间距 3px（仅对品牌标题生效，不影响其他页面标题） */
.header-slogan.brand { letter-spacing: 3px; }
.auth-logo-title.brand { letter-spacing: 3px; }

.app-header .btn-back {
  position: absolute;
  left: 4px;
  /* SVG 双箭头：线粗 2px；颜色比"琴书"标题浅 40%（60% 不透明度，较上一版加深 50%） */
  color: var(--text);
  opacity: 0.6;
  padding: 10px 12px;
  display: none;
  cursor: pointer;
}
.app-header .btn-back svg { display: block; }

.app-header .btn-right {
  position: absolute;
  right: 8px;
  font-size: var(--fs-body);
  color: var(--accent);
  padding: 8px 12px;
  font-weight: 500;
}

/* ==================== 主内容区 ==================== */
.app-content {
  flex: 1;
  overflow-y: auto;
  overflow-x: hidden;
  -webkit-overflow-scrolling: touch;
  position: relative;
}

.view { display: none; }
.view.active { display: block; animation: fadeIn 0.2s ease; }

@keyframes fadeIn {
  from { opacity: 0; transform: translateY(4px); }
  to { opacity: 1; transform: translateY(0); }
}

/* ==================== 底部导航 ==================== */
.bottom-nav {
  height: var(--nav-height);
  background: var(--card-bg);
  border-top: 0.5px solid var(--border);
  display: flex;
  align-items: center;
  justify-content: space-around;
  flex-shrink: 0;
  padding-bottom: var(--safe-bottom);
  z-index: 100;
}

.nav-item {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 2px;
  padding: 4px 12px;
  color: var(--text-tertiary);
  font-size: var(--fs-caption);   /* v1599：与模块二级底栏统一为 12.5px */
  position: relative;
  cursor: pointer;
}

.nav-item .nav-icon { line-height: 1; display: flex; align-items: center; justify-content: center; }
.nav-item.active { color: var(--accent); font-weight: 500; }

.nav-item .nav-badge {
  position: absolute;
  top: -2px;
  right: 2px;
  min-width: 16px;
  height: 16px;
  background: var(--danger);
  color: white;
  border-radius: 8px;
  font-size: 10px;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0 4px;
  font-weight: 600;
}

/* ================================================================
   工作台 (Workbench)
   ================================================================ */

/* 公司头部 */
.wb-company {
  background: linear-gradient(135deg, #009999 0%, #008080 50%, #006666 100%);
  padding: 20px 20px 40px;
  color: white;
  position: relative;
  overflow: hidden;
  cursor: pointer;
}

.wb-company::after {
  content: '';
  position: absolute;
  top: -40px;
  right: -40px;
  width: 180px;
  height: 180px;
  border-radius: 50%;
  background: rgba(255,255,255,0.04);
}

.wb-company-top {
  display: flex;
  align-items: center;
  gap: 14px;
  position: relative;
  z-index: 1;
}

.wb-company-logo {
  width: 52px;
  height: 52px;
  border-radius: 12px;
  background: rgba(255,255,255,0.18);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 28px;
  flex-shrink: 0;
  overflow: hidden;
}

/* ===== 公司头像（v1457：取消 emoji，青色底 + 公司首字 / 上传图片） ===== */
.co-ava,
.co-ava-img {
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  overflow: hidden;
  box-sizing: border-box;
  background: rgba(0,128,128,0.8);
  color: #fff;
  font-weight: 500;
  line-height: 1;
}

/* 首页公司头部本身是青色渐变，这里换半透明白底避免融为一片 */
.co-ava.on-dark {
  background: rgba(255,255,255,0.22);
}

.co-ava-img {
  background: var(--bg);
}

.co-ava-img img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

.wb-company-name {
  font-size: var(--fs-title-2);
  font-weight: 600;
}

.wb-company-edit {
  font-size: var(--fs-body-2);
  opacity: 0.55;
  margin-left: 6px;
  vertical-align: middle;
}

.wb-company-slogan {
  font-size: var(--fs-caption);
  opacity: 0.6;
  margin-top: 2px;
}

.wb-company-meta {
  display: flex;
  gap: 12px;
  font-size: var(--fs-micro);
  opacity: 0.45;
  position: relative;
  z-index: 1;
}

/* 快捷统计 */
.wb-stats {
  display: flex;
  background: var(--card-bg);
  margin: -20px 12px 24px;
  border-radius: var(--radius);
  padding: 16px 0;
  box-shadow: var(--shadow-lg);
  position: relative;
  z-index: 2;
}

.wb-stat-item {
  flex: 1;
  text-align: center;
  position: relative;
}

.wb-stat-item:not(:last-child)::after {
  content: '';
  position: absolute;
  right: 0;
  top: 6px;
  bottom: 6px;
  width: 0.5px;
  background: var(--border);
}

.wb-stat-num {
  font-size: var(--fs-title-1-plus);
  font-weight: 600;
  line-height: 1;
  margin-bottom: 6px;
}

.wb-stat-num.dark { color: var(--text); }
.wb-shortcut-icon {
  display: flex;
  align-items: center;
  justify-content: center;
  margin-bottom: 4px;
}

.wb-stat-label {
  font-size: var(--fs-body-2);
  color: var(--text-tertiary);
}

.wb-stat-item.green .wb-stat-num { color: var(--success); }
.wb-stat-item.red .wb-stat-num { color: var(--danger); }
.wb-stat-item.blue .wb-stat-num { color: var(--accent); }
.wb-stat-item.amber .wb-stat-num { color: var(--warning); }

/* 子系统网格标题 */
.wb-grid-title {
  padding: 20px 16px 10px;
  font-size: var(--fs-body);
  font-weight: 600;
  color: var(--text);
  display: flex;
  align-items: center;
  gap: 6px;
}

.wb-grid-title::before {
  content: '';
  width: 3px;
  height: 14px;
  border-radius: 2px;
  background: var(--accent);
}

/* 子系统网格 */
.wb-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 8px;
  padding: 0 12px;
  margin-bottom: 12px;
}

.wb-card {
  background: var(--card-bg);
  border-radius: var(--radius);
  padding: 20px 8px 16px;
  text-align: center;
  box-shadow: var(--shadow);
  cursor: pointer;
  position: relative;
  overflow: hidden;
}

.wb-card:active {
  background: #f2f3f5;
}

.wb-card .card-stripe {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 3px;
}

.wb-card-icon {
  display: flex;
  align-items: center;
  justify-content: center;
  margin: 6px 0 10px;
  line-height: 1;
  /* 首页 9 大模块图形徽标：长琴绿加深版 #008080 */
  color: #008080;
}

.wb-card-name {
  font-size: var(--fs-body);
  font-weight: 500;
  color: var(--text);
  line-height: 1.3;
}

.wb-card-desc {
  font-size: var(--fs-micro);
  color: var(--text-tertiary);
  line-height: 1.3;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.wb-card-badge {
  position: absolute;
  top: 8px;
  right: 8px;
  width: 8px;
  height: 8px;
  border-radius: 50%;
}

/* 最近动态 */
.wb-recent {
  background: var(--card-bg);
  margin: 0 12px 0;
  border-radius: var(--radius);
  padding: 14px 16px;
  box-shadow: var(--shadow);
}

.wb-recent-title {
  font-size: var(--fs-body);
  font-weight: 600;
  color: var(--text);
  margin-bottom: 10px;
  display: flex;
  align-items: center;
  gap: 6px;
}

.wb-recent-item {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 0;
  border-bottom: 0.5px solid var(--border);
  font-size: var(--fs-body-2);
  cursor: pointer;
}

.wb-recent-item:last-child { border-bottom: none; }
.wb-recent-item:active { background: #f8f9fa; margin: 0 -16px; padding-left: 16px; padding-right: 16px; }

.wb-recent-item:last-child { border-bottom: none; }

.wb-recent-dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  flex-shrink: 0;
}

.wb-recent-content {
  flex: 1;
  color: #333;
  line-height: 1.4;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.wb-recent-time {
  font-size: var(--fs-micro);
  color: var(--text-tertiary);
  flex-shrink: 0;
}

.wb-footer {
  text-align: center;
  padding: 16px;
  color: var(--text-tertiary);
  font-size: var(--fs-caption);
}

/* ================================================================
   子系统容器
   ================================================================ */

.sys-banner {
  padding: 11px 16px 11px 10px;
  color: white;
  display: flex;
  align-items: center;
  gap: 12px;
}

.sys-banner-back {
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  flex-shrink: 0;
  width: 36px;
  height: 36px;
  border-radius: 8px;
}
.sys-banner-back:active { background: rgba(255,255,255,0.2); }
.sys-banner-back svg { width: 24px; height: 24px; stroke: white; }

.sys-banner-icon {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 48px;
  height: 48px;
  border-radius: 12px;
  background: rgba(255,255,255,0.2);
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}

.sys-banner-info { flex: 1; min-width: 0; }

.sys-banner-name {
  font-size: var(--fs-title-2);
  font-weight: 700;
  margin-bottom: 2px;
}

.sys-banner-desc {
  font-size: var(--fs-caption);
  opacity: 0.8;
  line-height: 1.4;
}

.sys-banner-home {
  font-size: var(--fs-title-1);
  padding: 8px;
  flex-shrink: 0;
  opacity: 0.8;
}

.sys-banner-home:active { opacity: 0.5; }

/* 子系统内容区 */
#sysContent { min-height: 100px; }

/* 子系统子Tab栏 */
.sys-subtabs {
  display: flex;
  background: var(--card-bg);
  border-bottom: 0.5px solid var(--border);
  position: sticky;
  top: 0;
  z-index: 5;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}

.sys-subtabs::-webkit-scrollbar { display: none; }

.sys-subtab {
  flex-shrink: 0;
  padding: 12px 16px;
  font-size: var(--fs-body);
  color: var(--text-secondary);
  position: relative;
  cursor: pointer;
  white-space: nowrap;
}

.sys-subtab.active {
  color: var(--accent);
  font-weight: 600;
}

.sys-subtab.active::after {
  content: '';
  position: absolute;
  bottom: 0;
  left: 50%;
  transform: translateX(-50%);
  width: 20px;
  height: 3px;
  background: var(--accent);
  border-radius: 2px;
}

/* 子系统占位页 */
.sys-placeholder {
  padding: 20px 16px;
}

.sys-placeholder-header {
  text-align: center;
  padding: 32px 0 24px;
}

.sys-placeholder-icon {
  display: flex;
  align-items: center;
  justify-content: center;
  margin-bottom: 16px;
}

.sys-placeholder-title {
  font-size: var(--fs-title-2);
  font-weight: 600;
  margin-bottom: 8px;
  color: var(--text);
}

.sys-placeholder-desc {
  font-size: var(--fs-body);
  color: var(--text-secondary);
  line-height: 1.5;
}

.sys-feature-list {
  background: var(--card-bg);
  border-radius: var(--radius);
  padding: 4px 0;
  margin-bottom: 16px;
  box-shadow: var(--shadow);
}

.sys-feature-item {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 14px 16px;
  border-bottom: 0.5px solid var(--border);
}

.sys-feature-item:last-child { border-bottom: none; }

.sys-feature-check {
  width: 24px;
  height: 24px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 14px;
  color: white;
  flex-shrink: 0;
}

.sys-feature-name {
  font-size: var(--fs-body);
  color: var(--text);
}

.sys-feature-status {
  margin-left: auto;
  font-size: var(--fs-micro);
  padding: 2px 8px;
  border-radius: 10px;
  font-weight: 500;
}

.sys-feature-status.planned {
  background: #fef3c7;
  color: #92400e;
}

/* ================================================================
   问题解决子系统内嵌视图（朋友圈式Feed系统）
   ================================================================ */

/* 朋友圈 Feed */
.feed-list { background: var(--card-bg); }

.feed-dashboard {
  display: flex;
  gap: 8px;
  padding: 12px;
  background: #fff;
  border-radius: 8px;
  margin: 8px;
}

.feed-dash-item {
  flex: 1;
  text-align: center;
  padding: 10px 4px;
  border-radius: 6px;
  cursor: pointer;
  transition: background 0.15s;
}

.feed-dash-item .num {
  font-size: var(--fs-title-1);
  font-weight: 600;
  color: #333;
  line-height: 1.2;
}

.feed-dash-item .lbl {
  font-size: var(--fs-caption);
  color: #999;
  margin-top: 2px;
}

.dash-dot {
  display: inline-block;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: #ef4444;
  margin-left: 3px;
  vertical-align: top;
}

.feed-dash-item.active { background: #e6f5f5; }
.feed-dash-item.active .num { color: #009999; }
.feed-dash-item.active .lbl { color: #009999; }

.feed-item {
  display: flex;
  padding: 16px;
  border-bottom: 0.5px solid var(--border);
  gap: 12px;
}

.feed-item:active { background: #f9f9f9; }

/* v1461（用户要求）：与通讯录头像口径统一 —— 青色 80% 底 + 白色首字
   （原先沿用早期浅蓝底 #e8edff + 深色 emoji，是两套历史样式） */
.feed-avatar {
  width: 45px; height: 45px;   /* v1576：42 → 45（与详情页统一） */
  border-radius: 6.9px;   /* 按 45/42 等比缩放 6.4 */
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 20px;   /* 19 → 20（随尺寸等比） */
  font-weight: 600;
  flex-shrink: 0;
  background: rgba(0, 128, 128, 0.8);
  color: #fff;
}

.feed-body { flex: 1; min-width: 0; }

.feed-name {
  font-weight: 600;
  color: #009999;
  font-size: var(--fs-content);
  margin-bottom: 4px;
}

.feed-title {
  font-size: var(--fs-card-title);
  font-weight: 500;
  margin-bottom: 6px;
  line-height: 1.4;
  color: var(--text);
}

.feed-desc {
  font-size: var(--fs-content);
  color: #333;
  line-height: 1.5;
  margin-bottom: 8px;
  word-break: break-word;
}

.feed-photos {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 4px;
  margin-bottom: 8px;
  max-width: 240px;
}

.feed-photo {
  aspect-ratio: 1;
  border-radius: 6px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 32px;
  overflow: hidden;
}

.feed-photo.single { max-width: 180px; aspect-ratio: 4/3; font-size: 48px; }

.feed-meta {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-top: 6px;
}

.feed-time { font-size: var(--fs-caption); color: var(--text-tertiary); }

.feed-location {
  font-size: var(--fs-caption);
  color: var(--text-tertiary);
  display: flex;
  align-items: center;
  gap: 2px;
}

/* 状态徽章 */
.status-badge {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 2px 8px;
  border-radius: 4px;
  font-size: var(--fs-caption);
  font-weight: 500;
}

.status-badge .dot {
  width: 6px; height: 6px;
  border-radius: 50%;
  background: currentColor;
}

/* 部门标签 */
.dept-tag {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 2px 8px;
  border-radius: 12px;
  font-size: var(--fs-caption);
  font-weight: 500;
}

/* 点赞和评论区 */
.feed-interactions {
  margin-top: 8px;
  background: #f5f6f7;
  border-radius: 6px;
  padding: 8px 12px;
}

.feed-likes-row {
  display: flex;
  gap: 12px;
  flex-wrap: wrap;
}

.feed-likes {
  display: flex;
  align-items: center;
  gap: 4px;
  font-size: var(--fs-body-2);
  color: var(--changqin-green);
  font-weight: 600;
  padding: 2px 0;
}

.feed-likes .like-icon { font-size: 14px; }

.feed-comments { padding-top: 6px; border-top: 0.5px solid var(--border); }

.feed-comment {
  font-size: var(--fs-card-title);
  line-height: 1.6;
  color: #333;
}

.feed-comment .commenter {
  color: #333;
  font-weight: 500;
}

.feed-actions {
  display: flex;
  justify-content: flex-end;
  gap: 16px;
  margin-top: 8px;
}

.feed-action-btn {
  font-size: var(--fs-body-2);
  color: var(--text-secondary);
  display: flex;
  align-items: center;
  gap: 3px;
  padding: 4px 8px;
}

.feed-action-btn:active { opacity: 0.6; }
.feed-action-btn.liked { color: var(--danger); }
.feed-action-btn.feed-like-heart { color: var(--changqin-green); }
.feed-action-btn.feed-like-heart.liked { color: var(--changqin-green); }
.feed-action-btn.booed { color: #999; }
.feed-action-btn.urged { color: var(--accent); }

/* 问题圈内联留言框 */
.feed-comment-inline {
  margin-top: 8px;
}

.feed-comment-input-row {
  display: flex;
  gap: 8px;
  align-items: center;
}

.feed-comment-input {
  flex: 1;
  border: 1px solid #ddd;
  border-radius: 6px;
  padding: 6px 14px;
  font-size: var(--fs-body);
  outline: none;
  background: #f5f6f7;
}

.feed-comment-input:focus {
  border-color: #009999;
  background: #fff;
}

.feed-comment-send {
  background: #009999;
  color: #fff;
  border: none;
  border-radius: 6px;
  padding: 6px 14px;
  font-size: var(--fs-body-2);
  white-space: nowrap;
  cursor: pointer;
}

.feed-comment-send:active { opacity: 0.7; }

/* ==================== 发布问题 ==================== */
.post-form {
  background: var(--card-bg);
  padding: 16px;
  min-height: 100%;
}

.post-input {
  width: 100%;
  border: none;
  resize: none;
  font-size: var(--fs-card-title);
  line-height: 1.6;
  min-height: 100px;
  background: transparent;
}

.post-input::placeholder { color: var(--text-tertiary); font-size: var(--fs-body); white-space: pre-wrap; word-break: break-all; }

/* 期望完成时间："年/月/日"整体显示，透明 input 覆盖整体区域 */
.date-input-wrap {
  position: relative;
  min-height: 32px;
  display: flex;
  align-items: center;
}
.date-native-input {
  position: absolute;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  opacity: 0;
  cursor: pointer;
  z-index: 2;
  border: none;
  padding: 0;
  margin: 0;
}
.date-input-display {
  position: relative;
  z-index: 1;
  font-size: var(--fs-body);
  color: var(--text-tertiary);
  pointer-events: none;
}
.date-input-display.has-value { color: var(--text); }

.post-title-input {
  width: 100%;
  border: none;
  font-size: var(--fs-title-2);
  font-weight: 600;
  margin-bottom: 12px;
  background: transparent;
}

.post-title-input::placeholder { color: var(--text-tertiary); font-weight: 400; }

.post-section {
  border-top: 0.5px solid var(--border);
  padding: 12px 0;
}

.post-section-label {
  font-size: var(--fs-body-2);
  color: var(--text-secondary);
  margin-bottom: 8px;
}

.post-photo-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 8px;
}

.post-photo-item {
  aspect-ratio: 1;
  border-radius: 8px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 36px;
  position: relative;
}

.post-photo-add {
  aspect-ratio: 1;
  border: 2px dashed #ddd;
  border-radius: 8px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 32px;
  color: #ccc;
  cursor: pointer;
}

.post-photo-add:active { border-color: var(--accent); color: var(--accent); }

.post-tag-row {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.post-tag {
  padding: 4px 12px;
  border-radius: 16px;
  font-size: var(--fs-body-2);
  background: #f2f3f5;
  color: var(--text-secondary);
}

.post-tag.active {
  background: #e8edff;
  color: var(--accent);
  font-weight: 500;
}

.dept-suggestion {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 10px 12px;
  background: #e8edff;
  border-radius: 8px;
  margin-top: 8px;
}

.dept-suggestion .icon { font-size: var(--fs-title-1-plus); }
.dept-suggestion .info { flex: 1; }
.dept-suggestion .name { font-size: var(--fs-body); font-weight: 500; color: var(--accent); }
.dept-suggestion .desc { font-size: var(--fs-caption); color: var(--text-secondary); }

/* 报送部门下拉框 */
.dept-combobox { position: relative; }
.dept-combobox-input { width: 100%; box-sizing: border-box; }
.dept-combobox-dropdown {
  display: none;
  position: absolute;
  top: 100%;
  left: 0;
  right: 0;
  background: #fff;
  border: 0.5px solid var(--border);
  border-radius: 8px;
  box-shadow: 0 4px 12px rgba(0,0,0,0.12);
  z-index: 100;
  max-height: 200px;
  overflow-y: auto;
}
.dept-combobox-item {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 10px 12px;
  cursor: pointer;
  transition: background 0.15s;
}
.dept-combobox-item:hover, .dept-combobox-item:active {
  background: var(--bg-hover, #f5f5f5);
}
.dept-combobox-icon { font-size: 20px; flex-shrink: 0; }
.dept-combobox-name { font-size: var(--fs-body); color: var(--text-primary, #333); }

/* 设备负责人 / 维保负责人 人员选择器（复用 dept-combobox 交互） */
.person-combobox { position: relative; flex: 1; min-width: 0; }
.person-combobox-input { width: 100%; box-sizing: border-box; }
.person-combobox-dropdown {
  display: none;
  position: absolute;
  top: 100%;
  left: 0;
  right: 0;
  margin-top: 4px;
  background: #fff;
  border: 1px solid var(--border);
  border-radius: 8px;
  box-shadow: 0 4px 12px rgba(0,0,0,0.12);
  z-index: 100;
  max-height: 220px;
  overflow-y: auto;
}
.person-combobox-item {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 9px 12px;
  cursor: pointer;
  transition: background 0.15s;
}
.person-combobox-item:hover, .person-combobox-item:active { background: var(--bg-hover, #f5f5f5); }
.person-combobox-avatar {
  width: 28px; height: 28px; border-radius: 50%; flex-shrink: 0;
  background: #008080; color: #fff; font-size: 13px;
  display: flex; align-items: center; justify-content: center;
}
.person-combobox-main { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.person-combobox-name { font-size: var(--fs-body); color: #1f2329; line-height: 1.2; }
.person-combobox-sub { font-size: var(--fs-micro); color: #8f959e; margin-top: 2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.person-combobox-phone { font-size: var(--fs-caption); color: #8f959e; flex-shrink: 0; font-variant-numeric: tabular-nums; }
.person-combobox-empty { padding: 10px 12px; font-size: var(--fs-body-2); color: #8f959e; text-align: center; }

.priority-row {
  display: flex;
  gap: 8px;
}

.priority-btn {
  flex: 1;
  padding: 8px;
  border-radius: 6px;
  font-size: var(--fs-body-2);
  text-align: center;
  border: 1px solid var(--border);
  color: var(--text-secondary);
  cursor: pointer;
  background: var(--card-bg);
}

.priority-btn.active {
  border-color: var(--accent);
  background: #e8edff;
  color: var(--accent);
  font-weight: 500;
}

.submit-btn {
  width: 100%;
  padding: 12px;
  background: transparent;
  color: var(--text-secondary);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  font-size: var(--fs-body);
  font-weight: 500;
  margin-top: 20px;
}

.submit-btn:active { background: var(--bg-hover); }
.submit-btn:disabled { opacity: 0.5; }

/* ==================== 日常任务卡片 / 详情（复用问题圈发布问题字段）==================== */
.pj-task-tags { display: flex; flex-wrap: wrap; gap: 6px; margin: 6px 0 2px; }
.pj-task-tag { font-size: var(--fs-micro); padding: 2px 8px; border-radius: 10px; background: #f0eeea; color: #6b6a66; }
.pj-task-photos { display: flex; flex-wrap: wrap; gap: 8px; }
.pj-task-photo { width: 54px; height: 54px; border-radius: 8px; display: flex; align-items: center; justify-content: center; color: #fff; }

/* ==================== 问题详情 ==================== */
.detail-card {
  background: var(--card-bg);
  margin-bottom: 8px;
}

.detail-header {
  padding: 16px;
  display: flex;
  gap: 12px;
  align-items: flex-start;
}

.detail-header .feed-avatar { width: 45px; height: 45px; font-size: 20px; border-radius: 6.9px; }   /* v1576：48 → 45，字号/圆角与卡片完全一致 */

.detail-info { flex: 1; }

.detail-user-name {
  font-weight: 600;
  font-size: var(--fs-content);
  color: var(--accent);
}
.detail-user-name.has-code { display: flex; align-items: baseline; justify-content: space-between; }

.detail-time {
  font-size: var(--fs-caption);
  color: var(--text-tertiary);
  margin-top: 2px;
}

.detail-content { padding: 0 16px 16px; }

.detail-title {
  font-size: var(--fs-title-2);
  font-weight: 600;
  line-height: 1.4;
  margin-bottom: 8px;
}

.detail-desc {
  font-size: var(--fs-content);
  line-height: 1.6;
  color: #333;
  margin-bottom: 12px;
}

.detail-photos {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 4px;
  margin-bottom: 12px;
}

.detail-photo {
  aspect-ratio: 1;
  border-radius: 8px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 36px;
}

.detail-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  align-items: center;
  margin-bottom: 12px;
}

.detail-tag {
  padding: 3px 10px;
  border-radius: 12px;
  font-size: var(--fs-caption);
  color: #999;
}
/* 详情页标签行：纯灰字、无框、左对齐（与问题圈一致） */
.detail-tags .detail-tag,
.detail-tags .status-badge,
.detail-tags .dept-tag {
  padding: 0;
  border-radius: 0;
  background: transparent;
}

.detail-meta-row {
  display: flex;
  align-items: center;
  gap: 12px;
  font-size: var(--fs-body-2);
  color: var(--text-tertiary);
}

/* 状态时间线 */
.timeline { padding: 16px; }

.tl-toggle { display: flex; align-items: center; gap: 12px; color: #009999; font-size: var(--fs-body-2); padding: 2px 0 24px; cursor: pointer; user-select: none; background: var(--card-bg); position: relative; }
.tl-toggle::before { content: ''; position: absolute; left: 7px; top: 0; bottom: 0; width: 2px; background: var(--border); z-index: 0; }
.tl-toggle:active { opacity: .55; }
.tl-arrow { width: 20px; flex-shrink: 0; display: flex; justify-content: center; transition: transform .15s; position: relative; z-index: 1; background: var(--card-bg); }
.tl-arrow.up { transform: rotate(180deg); }
.tl-text { line-height: 16px; font-size: var(--fs-body); font-weight: 500; }
.tl-middle { padding: 0; }
.tl-middle > .timeline-item:last-child::before { content: ''; position: absolute; left: 7px; top: 20px; bottom: 0; width: 2px; background: var(--border); }
.tl-middle > .timeline-item:last-child { padding-bottom: 20px; }

.timeline-item {
  display: flex;
  gap: 12px;
  position: relative;
  padding-bottom: 20px;
}

.timeline-item:last-child { padding-bottom: 0; }

.timeline-item:not(:last-child)::before {
  content: '';
  position: absolute;
  left: 7px;
  top: 20px;
  bottom: 0;
  width: 2px;
  background: var(--border);
}

.timeline-dot {
  width: 16px; height: 16px;
  border-radius: 50%;
  flex-shrink: 0;
  margin-top: 2px;
  z-index: 1;
  border: 3px solid var(--card-bg);
  box-shadow: 0 0 0 1px var(--border);
}

.timeline-content { flex: 1; }
.timeline-label { font-size: var(--fs-body); font-weight: 500; }
.timeline-time { font-size: var(--fs-caption); color: var(--text-tertiary); margin-top: 2px; }
.timeline-detail { font-size: var(--fs-body-2); color: var(--text-secondary); margin-top: 4px; }

/* 解决方案区 */
.solution-card {
  background: var(--card-bg);
  border-radius: 0;
  padding: 0;
  margin: 8px 0;
}

.solution-card .label {
  font-size: var(--fs-content);
  color: #000;
  font-weight: 600;
  margin-bottom: 6px;
  display: flex;
  align-items: center;
  gap: 6px;
}

.solution-card .content {
  font-size: var(--fs-content);
  line-height: 1.6;
  color: #333;
}

.solution-card .feed-interactions {
  background: transparent;
}

.solution-card > div:first-child .feed-actions {
  margin-top: -6px;
}

/* ===== 8D 报告模板（仅 8D 问题的解决方案模块）===== */
.eightd-report { }
.eightd-status { font-size: var(--fs-caption); color: #009999; background: #e6f5f5; padding: 3px 10px; border-radius: 10px; }
/* 8D 流程图：与上方"解决方案"标题、下方 D1 卡片间距加大 50%（12→18 / 24→36）。
   上方与 .label(10px) 相邻会发生 margin 折叠（取较大值），故 margin-top 直接用目标值 18px */
.eightd-progress-wrap { margin: 18px 0 26px; }
.eightd-progress { display: flex; align-items: flex-start; }
.eightd-pnode { display: flex; flex-direction: column; align-items: center; width: 28px; flex-shrink: 0; }
.eightd-circle { width: 28px; height: 28px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: var(--fs-micro); font-weight: 600; flex-shrink: 0; outline: 1px solid #d0d2d6; outline-offset: -1px; }
.eightd-circle.done { background: #cfd2d6; color: #222; }
.eightd-circle.current { background: #e6f5f5; color: #222; font-weight: 700; }
.eightd-circle.todo { background: #f2f3f4; color: #222; }
.eightd-line { flex: 1; height: 2px; background: #e3e5e8; margin-top: 13px; }

.eightd-step { border: 0.5px solid #eee; border-radius: 12px; padding: 12px; margin-bottom: 10px; background: #fff; }
.eightd-step.done { }
.eightd-step.current { border: 0.5px solid #eee; } /* 当前步骤不再加粗边框，与其它模块一致 */
.eightd-step.locked { background: #f7f8f9; opacity: 0.75; }
.eightd-step-head { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }
.eightd-badge { font-size: var(--fs-body); color: #009999; background: #e6f5f5; padding: 2px 8px; border-radius: 8px; flex-shrink: 0; }
.eightd-step.locked .eightd-badge { color: #bbb; background: #eceef0; }
.eightd-step-name { font-size: var(--fs-card-title); font-weight: 500; color: #222; }
.eightd-step-state { font-size: var(--fs-body-2); color: #009999; margin-left: auto; }
.eightd-step.locked .eightd-step-state { color: #bbb; }

.eightd-fields { margin-top: 17px; }
/* D8 完成按钮：前置步骤未完成时置灰禁用 */
.eightd-save-disabled { opacity: 0.45; cursor: not-allowed; }
/* D5：与卡片标题（D5）之间的间距——编辑页缩小20%，只读页加大30% */
.eightd-fields-d5 { margin-top: 18px; }
/* 8D：改善措施文本框自动增高，无滚动条 */
textarea[data-8dfield$="Measure"] { overflow: hidden; resize: none; }
/* D5/D6 只读（措施类摘要共用）：顶部间距（双类选择器覆盖 .eightd-summary 的 4px） */
.eightd-summary.eightd-summary-measures { margin-top: 14px; }
/* D3 围堵措施：标题与首字段间距保持更大（30px） */
.eightd-step.step-d3 .eightd-fields { margin-top: 22px; }
/* D3 制定措施提示语：比标签小 2px、颜色比标签浅（#666 → #949494 → 再浅20% #a9a9a9） */
.eightd-field textarea[data-8dfield="d3.measure"]::placeholder { font-size: var(--fs-body); color: #a9a9a9; }
.eightd-field { margin-bottom: 18px; }
.eightd-field label { display: block; font-size: var(--fs-body); color: #666; margin-bottom: 4px; }
/* D4：鱼骨图分析（5M1E）标签与 5Why 模块标题同款式 */
.eightd-field label.d4-label { font-size: var(--fs-body); font-weight: 600; color: #333; }
.eightd-row2 { display: flex; gap: 10px; }
/* D5：改善措施文本框与下方负责人/完成时间行之间的间距（已缩小 20%） */
.d4-part .eightd-field:has(+ .eightd-row2) { margin-bottom: 10px; }
.eightd-input { width: 100%; box-sizing: border-box; font-size: var(--fs-card-title); }
/* 8D 单行输入框：避免继承 .modal-input 的 80px 最小高度，保持紧凑 */
input.eightd-input { min-height: 0; padding: 9px 10px; margin-bottom: 0; line-height: 20px; }
/* 同行的时间选择器与文本输入框等高 */
.eightd-row2 input.eightd-input { height: 40px; }
.eightd-input[type="datetime-local"] { height: 40px; padding-top: 9px; padding-bottom: 9px; }
/* 8D 多行输入框：保留 min-height（80px 起步），仅清零下边距以统一字段间距 */
textarea.eightd-input { margin-bottom: 0; }
.eightd-summary { margin-top: 4px; }
.eightd-sum-row { display: flex; gap: 8px; padding: 3px 0; font-size: var(--fs-body); line-height: 1.5; align-items: baseline; }
/* D5 只读：后一个措施行与上一组"负责人/完成时间"行的间距再加 40%（行间距 12px → 16.8px） */
.eightd-sum-row.d5-measure-gap { padding-top: 13.8px; }
.eightd-sum-label { color: #999; flex-shrink: 0; min-width: 76px; }
.eightd-sum-val { color: #333; flex: 1; }
/* D5/D6 只读（措施类摘要共用）：标签列按最长标签"负责人："的宽度统一 60px，使内容左对齐 */
.eightd-summary-measures .eightd-sum-label { min-width: 60px; }
/* D6 实施并验证：带入的 D5 措施为只读文本块；未填 D5 时给出提示 */
.eightd-fields-d6 { margin-top: 18px; }
.d6-measure-text { padding: 10px 12px; background: #f5f7f9; border-radius: 6px; font-size: var(--fs-body); line-height: 1.7; color: #26384a; white-space: pre-line; }
.d6-tip { padding: 14px 0; font-size: var(--fs-body); color: #999; line-height: 1.6; }
/* D6 只读：从 D5 带入的措施内容用浅灰色，与 D6 填写的实施结果（深色）区分 */
.d6-bringin-val { color: #999; }
.eightd-summary.empty { font-size: var(--fs-body); color: #bbb; }

.eightd-btn-row { display: flex; gap: 8px; margin-top: 10px; }
.eightd-save { flex: 1; padding: 10px; background: #009999; color: #fff; border: none; border-radius: 8px; font-size: var(--fs-card-title); cursor: pointer; }
/* 取消与保存等宽（各占一行一半，flex:1） */
.eightd-cancel { flex: 1; padding: 10px 16px; background: #fff; color: #646a73; border: 1px solid #d0d0d0; border-radius: 8px; font-size: var(--fs-card-title); cursor: pointer; }
.eightd-edit { margin-left: auto; padding: 2px 4px; background: transparent; color: #009999; border: none; border-radius: 4px; font-size: var(--fs-body); cursor: pointer; flex-shrink: 0; }

/* 8D 卡片右下角收起/展开箭头 */
.eightd-step-foot { display: flex; margin-top: 2px; }
.eightd-toggle { margin-left: auto; background: transparent; border: none; cursor: pointer; padding: 0; display: flex; align-items: center; }
/* 收起与展开使用统一内边距，避免展开时标题跳动（摘要功能已删除） */

/* 8D D1 组建团队：成员选择器（下拉筛选 + 职位自动带入） */
.mp-wrap { position: relative; }
.mp-drop {
  position: absolute; top: 100%; left: 0; right: 0; z-index: 30;
  background: #fff; border: 1px solid #d0d0d0; border-radius: 8px;
  max-height: 200px; overflow: auto; display: none; box-shadow: 0 4px 12px rgba(0,0,0,0.08);
}
.mp-opt { display: flex; justify-content: space-between; align-items: center; gap: 10px; padding: 9px 12px; cursor: pointer; font-size: var(--fs-body); }
.mp-opt:hover { background: #f0f7f7; }
.mp-opt-name { color: #222; flex-shrink: 0; }
.mp-opt-title { color: #999; font-size: var(--fs-caption); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mp-title { background: #f5f6f7; color: #666; }
.mp-title-wrap { width: 38%; flex-shrink: 0; }
.mp-title-wrap .mp-title { width: 100%; }
.mp-member { display: flex; align-items: center; gap: 6px; margin-bottom: 16px; }
.mp-del { border: none; background: transparent; color: #bbb; font-size: var(--fs-title-2); cursor: pointer; padding: 0 6px; flex-shrink: 0; line-height: 1; }
.mp-del-spacer { width: 28px; flex-shrink: 0; }

/* 8D D2 问题描述：摘要区现场图片 */
.d2-sum-photos { display: flex; gap: 8px; margin-top: 8px; flex-wrap: wrap; }
.d2-sum-photo { width: 64px; height: 64px; border-radius: 8px; display: flex; align-items: center; justify-content: center; font-size: 26px; }

/* 8D D4 根因分析：分析工具选择框 + 竖版鱼骨图（任务包真实版）+ 5Why */
.d4-tool-btn { flex: 1; padding: 9px 0; border-radius: 6px; font-size: var(--fs-body); border: 1px solid #d0d0d0; color: #646a73; background: #fff; cursor: pointer; text-align: center; }
.d4-tool-btn.active { border-color: #009999; color: #009999; font-weight: 500; background: #e6f5f5; }
.fb-stage { position: relative; width: 100%; aspect-ratio: 595.2 / 840; background: transparent; overflow: hidden; margin: 0 0 9px; }
/* 鱼骨图与根本原因之间的浅灰分隔线（细线中间打断加两点，比卡片内宽稍短，不连边框） */
.fb-divider { position: relative; display: flex; align-items: center; width: 86%; margin: 12px auto 19px; }
/* D4.1 与 D4.2 之间的双线分隔（无圆点） */
.fb-divider-double { width: 86%; margin: 23px auto 19px; height: 3px; border-top: 0.5px solid #e3e5e8; border-bottom: 0.5px solid #e3e5e8; }
/* D5 措施组分隔线（双点）：上下间距 */
.fb-divider-d5 { margin-top: 22px; margin-bottom: 35px; }
/* D5.1 与 D5.2 之间的双线分隔线（仅作用于 D5，不影响 D4 的双线分隔） */
.fb-divider-double.fb-divider-double-d5 { margin-top: 22px; margin-bottom: 35px; }
.fb-dl { flex: 1; height: 0.5px; background: #e3e5e8; }
.fb-dot { width: 3px; height: 3px; border-radius: 50%; background: #d9dcdf; margin: 0 6px; flex-shrink: 0; }
.fb-stage svg { position: absolute; inset: 0; width: 100%; height: 100%; display: block; }
.fb-layer { position: absolute; inset: 0; }
.fb-box { position: absolute; }
.fb-box .fb-idx { position: absolute; top: -16px; left: 10px; font-size: var(--fs-body-2); font-weight: 600; color: #fff; background: rgba(0,153,153,.9); padding: 2px 9px; border-radius: 99px; pointer-events: none; }
.fb-box textarea { position: absolute; inset: 0; width: 100%; height: 100%; border: none; border-radius: 12px; padding: 12px 12px 12px 14px; font-size: var(--fs-body-2); line-height: 1.5; color: #26384A; background: transparent; resize: none; outline: none; text-align: left; overflow: hidden; }
.fb-box textarea:focus { background: rgba(65,113,156,.05); }
.d4why-wrap { margin: 4px 0 18px; }
.d4-part-title { font-size: var(--fs-card-title); font-weight: 700; color: #1c2733; margin: 14px 0 10px; padding-left: 8px; border-left: 3px solid #009999; }
.d4-part-title-d2 { margin-top: 25px; }
.d4-part-title-mb15 { margin-bottom: 15px; }
.d4-root-field { padding-left: 11px; }
.d4why-title { font-size: var(--fs-body); font-weight: 600; color: #333; margin-bottom: 4px; }
.d4why-hint { font-size: var(--fs-body-2); color: #999; margin-bottom: 10px; }
.d4why-q { font-size: var(--fs-body); color: #333; background: #f2f8f8; border-left: 3px solid #009999; padding: 7px 9px; margin-bottom: 6px; border-radius: 4px; line-height: 1.5; }
/* D4 模块标题行 + 启用/停用按钮 + 添加追问（标题缩进与 D4.1/D4.2 标题文字左对齐，不加粗） */
.d4-mod-head { display: flex; align-items: center; margin: 2px 0 15px; padding-left: 11px; }
/* 收起状态下两个模块标题相邻时（鱼骨图标题与5Why标题之间）的间距 */
.d4-mod-head:has(+ .d4-mod-head) { margin-bottom: 10px; }
.d4-mod-title { flex: 1; font-size: var(--fs-body); font-weight: 400; color: #333; }
.d4-enable-btn { padding: 4px 12px; border-radius: 6px; font-size: var(--fs-body-2); cursor: pointer; background: #fff; }
.d4-enable-btn.off { border: 1px solid #009999; color: #009999; }
.d4-enable-btn.on { border: 1px solid #d0d0d0; color: #646a73; }
.d4-mod-btns { display: flex; gap: 6px; }
.d4-add-why { display: block; width: 100%; padding: 9px; background: #fff; color: #009999; border: 1px dashed #009999; border-radius: 8px; font-size: var(--fs-body); cursor: pointer; margin-bottom: 8px; }
/* 8D 方法：所有输入框提示语统一浅灰色 */
.eightd-input::placeholder, .fb-ta::placeholder { color: #b8b8b8; font-size: var(--fs-body); }
.d4why-row { margin-bottom: 2px; }
.d4why-label { font-size: var(--fs-body-2); color: #009999; font-weight: 500; margin-bottom: 4px; }
.d4why-arrow { text-align: center; color: #009999; font-size: 18px; line-height: 1; margin: 3px 0; }
/* 5Why 填写框自动增高，无需滚动条 */
.d4why-input { overflow: hidden; resize: none; }
/* D7 预防性对策文本框：按内容自动增高，隐藏右侧滚动条 */
textarea[data-8dfield^="d7."] { overflow: hidden; resize: none; }
/* 四步法（4S）所有文本框：按内容自动增高，隐藏右侧滚动条 */
textarea[data-8dfield^="s1."], textarea[data-8dfield^="s2."], textarea[data-8dfield^="s3."], textarea[data-8dfield^="s4."] { overflow: hidden; resize: none; }
/* 四步法当前步骤：不显示 2px 加粗外框（保持与其他步骤一致的细边框） */
.eightd-step.fourS-step.current { border: 0.5px solid #eee; }
/* S2 根因分析：鱼骨图/原因追问模块标题统一靠左（去掉 11px 缩进，与根因总结左对齐） */
.s2-part .d4-mod-head { padding-left: 0; }
/* S3/D5 改善措施：添加措施按钮与下方保存/取消按钮行间距加大一倍（8+10=18px → 26+10=36px） */
.eightd-fields-d5 .d4-add-why { margin-bottom: 26px; }

.mp-add { margin-top: 2px; padding: 7px 14px; background: #fff; color: #009999; border: 1px solid #009999; border-radius: 6px; font-size: var(--fs-body-2); cursor: pointer; }

/* SLA 倒计时 */
.sla-banner {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 10px 16px;
  font-size: var(--fs-body-2);
  font-weight: 500;
}

.sla-banner.warning { background: #fff7ed; color: #c2410c; }
.sla-banner.danger { background: #fef2f2; color: var(--danger); }
.sla-banner.normal { background: #eff6ff; color: var(--info); }

/* 操作按钮区 */
.action-bar {
  padding: 12px 16px;
  display: flex;
  gap: 8px;
  background: var(--card-bg);
  border-top: 0.5px solid var(--border);
}

.action-btn {
  flex: 1;
  padding: 10px;
  border-radius: 8px;
  font-size: var(--fs-body);
  font-weight: 500;
  text-align: center;
  border: 1px solid #d0d0d0;
  background: #fff;
}

.action-btn.primary { background: #fff; color: var(--text-secondary); border-color: #d0d0d0; }
.action-btn.primary:active { background: #f5f6f7; }
.action-btn.secondary { background: #fff; color: var(--text-secondary); border-color: #d0d0d0; }
.action-btn.secondary:active { background: #f5f6f7; }
.action-btn.danger { background: #fff; color: var(--text-secondary); border-color: #d0d0d0; }
.action-btn:disabled { opacity: 0.5; }

/* ==================== 任务列表 ==================== */
.task-tabs {
  display: flex;
  background: var(--card-bg);
  border-bottom: 0.5px solid var(--border);
  position: sticky;
  top: 0;
  z-index: 5;
}

.task-tab {
  flex: 1;
  padding: 12px;
  text-align: center;
  font-size: var(--fs-body);
  color: var(--text-secondary);
  position: relative;
  font-weight: 400;
  cursor: pointer;
}

.task-tab.active { color: var(--accent); font-weight: 500; }

.task-tab.active::after {
  content: '';
  position: absolute;
  bottom: 0;
  left: 50%;
  transform: translateX(-50%);
  width: 20px;
  height: 2px;
  background: var(--accent);
  border-radius: 1px;
}

.task-item {
  background: var(--card-bg);
  margin: 8px;
  border-radius: var(--radius);
  padding: 14px;
  box-shadow: var(--shadow);
}

.task-item-header {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  margin-bottom: 8px;
  gap: 8px;
}

.task-item-title {
  font-size: var(--fs-body);
  font-weight: 600;
  flex: 1;
  line-height: 1.4;
}

.task-item-body {
  font-size: var(--fs-body-2);
  color: var(--text-secondary);
  line-height: 1.5;
  margin-bottom: 8px;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.task-item-footer {
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-size: var(--fs-caption);
  color: var(--text-tertiary);
}

.task-empty {
  text-align: center;
  padding: 60px 20px;
  color: var(--text-tertiary);
}

.task-empty .icon { margin-bottom: 12px; display: flex; align-items: center; justify-content: center; }
.task-empty .text { font-size: var(--fs-body); }

/* ==================== 消息页（微信风格） ==================== */
.chat-item {
  display: flex;
  gap: 12px;
  padding: 14px 16px;
  background: var(--card-bg);
  align-items: center;
  cursor: pointer;
  transition: background 0.15s;
}

.chat-item:active { background: var(--hover-bg, #ededed); }

.chat-item + .chat-item {
  border-top: 0.5px solid var(--border);
}

.chat-item.unread {
  background: #fff;
}

.chat-avatar {
  width: 48px; height: 48px;
  border-radius: 4.8px;   /* v1574：6→4.8 */
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 20px;
  font-weight: 600;
  flex-shrink: 0;
  overflow: hidden;
  /* v1463：与通讯录头像统一（原为 var(--bg) 灰白底） */
  background: rgba(0, 128, 128, 0.8);
  color: #fff;
}

.chat-body {
  flex: 1;
  min-width: 0;
  overflow: hidden;
}

.chat-top {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  margin-bottom: 4px;
}

.chat-name {
  font-size: var(--fs-body);
  font-weight: 500;
  color: var(--text);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  max-width: 65%;
}

.chat-time {
  font-size: var(--fs-caption);
  color: var(--text-tertiary);
  flex-shrink: 0;
  margin-left: 8px;
}

.chat-preview {
  font-size: var(--fs-body-2);
  color: var(--text-secondary);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  line-height: 1.4;
}

.chat-badge {
  min-width: 18px;
  height: 18px;
  border-radius: 9px;
  background: var(--danger);
  color: #fff;
  font-size: 10px;
  font-weight: 600;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0 5px;
  flex-shrink: 0;
}

/* ==================== 仪表盘 ==================== */
.dashboard { padding: 12px 16px; }

/* 浮动发布按钮 */
.fab-btn {
  position: fixed;
  right: 20px;
  bottom: 80px;
  width: 52px;
  height: 52px;
  border-radius: 50%;
  background: var(--accent);
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 4px 12px rgba(0,0,0,0.2);
  z-index: 100;
  cursor: pointer;
  transition: transform 0.2s;
}
.fab-btn:active { transform: scale(0.9); }

/* ==================== 问题圈专用底部导航 ==================== */
.feed-nav-item {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 2px;
  padding: 4px 20px;
  color: var(--text-tertiary);
  font-size: var(--fs-micro);
  cursor: pointer;
  flex: 1;
}
.feed-nav-item.active { color: var(--accent); font-weight: 500; }
.feed-nav-icon { line-height: 1; display: flex; align-items: center; justify-content: center; position: relative; }

.feed-nav-icon .nav-badge {
  position: absolute;
  top: -5px;
  right: -12px;
  min-width: 16px;
  height: 16px;
  padding: 0 4px;
  border-radius: 8px;
  background: #ef4444;
  color: #fff;
  font-size: 10px;
  font-weight: 600;
  line-height: 16px;
  text-align: center;
  box-sizing: border-box;
}

.feed-nav-plus {
  width: 43px;
  height: 43px;
  border-radius: 50%;
  background: var(--changqin-green, #009999);
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 2px 8px rgba(0,153,153,0.35);
  cursor: pointer;
  transition: transform 0.2s;
  flex-shrink: 0;
  margin: 0 16px;
}
.feed-nav-plus span {
  display: flex;
  align-items: center;
  justify-content: center;
  line-height: 0;
}
.feed-nav-plus:active { transform: scale(0.9); }

/* 故障维修二级底部导航：中间「报修」圆形+号，与问题圈发布按钮同款 */
.fr-nav-plus {
  width: 43px;
  height: 43px;
  border-radius: 50%;
  background: var(--changqin-green, #009999);
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 2px 8px rgba(0,153,153,0.35);
  cursor: pointer;
  transition: transform 0.2s;
  flex-shrink: 0;
  margin: 0 10px;
  align-self: center;
}
.fr-nav-plus span {
  display: flex;
  align-items: center;
  justify-content: center;
  line-height: 0;
}
.fr-nav-plus:active { transform: scale(0.9); }

/* 模块占位页（建设中） */
.eq-placeholder {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  min-height: 60vh; text-align: center; padding: 0 24px;
}
.eq-ph-ico { color: #c2c8cf; margin-bottom: 12px; }
.eq-ph-t { font-size: var(--fs-card-title); font-weight: 600; color: #1f2329; margin-bottom: 6px; }
.eq-ph-d { font-size: var(--fs-body-2); color: #8f959e; }

/* 方法论步骤 */
.method-step {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  padding: 10px 0;
  border-bottom: 0.5px solid #f0f0f0;
}
.method-step:last-child { border-bottom: none; }
.method-step-num {
  flex-shrink: 0;
  width: 32px;
  height: 32px;
  border-radius: 8px;
  background: var(--accent);
  color: #fff;
  font-size: var(--fs-caption);
  font-weight: 700;
  display: flex;
  align-items: center;
  justify-content: center;
}
.method-step-title { font-size: var(--fs-body); font-weight: 600; color: #1a1a1a; }
.method-step-desc { font-size: var(--fs-caption); color: #999; margin-top: 2px; }

/* 四步法/8D 列表 */
.method-filter { display: flex; gap: 8px; margin-bottom: 12px; }
.method-filter-tab { flex: 1; text-align: center; padding: 8px 0; border: 1px solid #d0d0d0; border-radius: 8px; font-size: var(--fs-body); color: #646a73; background: #fff; cursor: pointer; }
.method-filter-tab.active { color: #009999; border-color: #009999; font-weight: 600; }
.method-list { display: flex; flex-direction: column; gap: 12px; }
.method-item { background: #fff; border-radius: 12px; padding: 14px; box-shadow: 0 1px 3px rgba(0,0,0,.05); }
.method-item:active { background: #f7f7f7; }
.method-item-head { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }
.method-badge { font-size: var(--fs-body-2); font-weight: 600; padding: 2px 10px; border-radius: 6px; }
.method-badge.fourstep { background: #e6f5f5; color: #009999; }
.method-badge.eightd { background: #fff3e6; color: #fa8c16; }
.method-seq { font-size: var(--fs-body-2); color: #999; }
.feed-name-row { display: flex; justify-content: space-between; align-items: baseline; }
.method-code { font-size: var(--fs-content); font-weight: 500; }
.method-progress { font-size: var(--fs-body-2); color: #999; margin-bottom: 6px; }
.method-progress span { color: #009999; font-weight: 500; }
.method-code.fourstep { color: #009999; }
.method-code.eightd { color: #fa8c16; }
.method-summary { font-size: var(--fs-body); color: #333; line-height: 1.5; margin-bottom: 8px; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; overflow: hidden; }
.method-meta { border-top: 0.5px solid #f0f0f0; padding-top: 8px; display: flex; flex-direction: column; gap: 4px; }
.method-meta-row { display: flex; justify-content: space-between; font-size: var(--fs-body-2); }
.mm-label { color: #999; }
.mm-val { color: #333; }

.stat-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 10px;
  margin-bottom: 12px;
}

.stat-card {
  background: var(--card-bg);
  border-radius: var(--radius);
  padding: 16px;
  box-shadow: var(--shadow);
}

.stat-card .stat-value {
  font-size: var(--fs-display);
  font-weight: 700;
  line-height: 1;
  margin-bottom: 4px;
}

.stat-card .stat-label {
  font-size: var(--fs-body-2);
  color: var(--text-secondary);
}

.stat-card .stat-icon {
  margin-bottom: 8px;
  display: flex;
  align-items: center;
  justify-content: center;
}

.dashboard-card {
  background: var(--card-bg);
  border-radius: var(--radius);
  padding: 16px;
  margin-bottom: 12px;
  box-shadow: var(--shadow);
}

.dashboard-card .card-title {
  font-size: var(--fs-body);
  font-weight: 600;
  margin-bottom: 12px;
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.card-title .card-action {
  font-size: var(--fs-body-2);
  color: var(--accent);
  font-weight: 400;
}

/* 图表 */
.chart-bars {
  display: flex;
  align-items: flex-end;
  justify-content: space-around;
  height: 120px;
  gap: 8px;
  padding-top: 10px;
  overflow-x: auto;
}

.chart-bar-group {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 4px;
  flex: 1 1 0;
  min-width: 24px;
}

.chart-bars-pair {
  display: flex;
  gap: 3px;
  align-items: flex-end;
  height: 80px;
}

.chart-bar {
  width: 12px;
  border-radius: 3px 3px 0 0;
  min-height: 2px;
  transition: height 0.3s ease;
}

.chart-bar.submitted { background: var(--accent); }
.chart-bar.resolved { background: #93c5fd; }

.chart-bar-label { font-size: var(--fs-micro); color: var(--text-tertiary); }

.chart-legend {
  display: flex;
  gap: 16px;
  justify-content: center;
  margin-top: 8px;
  font-size: var(--fs-caption);
  color: var(--text-secondary);
}

.chart-legend .dot {
  display: inline-block;
  width: 10px; height: 10px;
  border-radius: 2px;
  margin-right: 4px;
  vertical-align: middle;
}

/* 部门统计列表 */
.dept-stat-row {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 0;
  border-bottom: 0.5px solid var(--border);
}

.dept-stat-row:last-child { border-bottom: none; }

.dept-stat-icon { font-size: 24px; flex-shrink: 0; }
.dept-stat-info { flex: 1; }
.dept-stat-name { font-size: var(--fs-body); font-weight: 500; margin-bottom: 4px; }

.dept-stat-bar {
  height: 6px;
  background: #f0f0f0;
  border-radius: 3px;
  overflow: hidden;
}

.dept-stat-bar-fill {
  height: 100%;
  border-radius: 3px;
  transition: width 0.3s ease;
}

.dept-stat-numbers { text-align: right; font-size: var(--fs-caption); color: var(--text-secondary); }
.dept-stat-rate { font-size: var(--fs-card-title); font-weight: 700; color: var(--text); }

/* ==================== 弹窗/抽屉 ==================== */
.modal-overlay {
  position: fixed;
  inset: 0;
  background: rgba(0,0,0,0.5);
  z-index: 1000;
  display: none;
  align-items: flex-end;
  justify-content: center;
}

.modal-overlay.show { display: flex; animation: fadeIn 0.2s; }

.modal-sheet {
  background: var(--card-bg);
  border-radius: 12px 12px 0 0;
  width: 100%;
  max-width: 480px;
  padding: 16px 20px;
  padding-bottom: calc(20px + var(--safe-bottom));
  animation: slideUp 0.25s ease;
  max-height: 80vh;
  overflow-y: auto;
}

@keyframes slideUp {
  from { transform: translateY(100%); }
  to { transform: translateY(0); }
}

.modal-title {
  font-size: var(--fs-card-title);
  font-weight: 600;
  margin-bottom: 14px;
  text-align: center;
  color: var(--text);
}

.modal-input {
  width: 100%;
  padding: 10px 12px;
  border: 1px solid var(--border);
  border-radius: 6px;
  font-size: var(--fs-body);
  margin-bottom: 12px;
  resize: vertical;
  min-height: 80px;
  background: var(--card-bg);
}

.assignee-list .assignee-item {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 12px;
  border-radius: 8px;
  cursor: pointer;
}

.assignee-item:active { background: #f5f5f5; }

.assignee-item.selected {
  background: #e8edff;
  box-shadow: inset 0 0 0 1px var(--accent);
}

.assignee-item .avatar {
  width: 40px; height: 40px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 18px;
  font-weight: 600;
  overflow: hidden;
  /* v1463：与通讯录头像统一（原为 #e8edff 浅蓝底） */
  background: rgba(0, 128, 128, 0.8);
  color: #fff;
}

.assignee-item .name { font-size: var(--fs-body); font-weight: 500; }
.assignee-item .title { font-size: var(--fs-caption); color: var(--text-secondary); }

.deadline-selector {
  display: flex;
  gap: 8px;
  margin: 12px 0;
}

.deadline-btn {
  flex: 1;
  padding: 10px;
  border-radius: 6px;
  text-align: center;
  font-size: var(--fs-body);
  border: 1px solid var(--border);
  color: var(--text-secondary);
  background: var(--card-bg);
  cursor: pointer;
}

.deadline-btn.active {
  border-color: var(--accent);
  background: #e8edff;
  color: var(--accent);
  font-weight: 500;
}

.method-btn {
  flex: 1;
  padding: 10px 0;
  border-radius: 6px;
  font-size: var(--fs-body);
  text-align: center;
  border: 1px solid var(--border);
  color: var(--text-secondary);
  background: var(--card-bg);
  cursor: pointer;
}

.method-btn.active {
  border-color: var(--accent);
  background: #e8edff;
  color: var(--accent);
  font-weight: 500;
}

/* ==================== Toast ==================== */
.toast {
  position: fixed;
  top: 50%;
  left: 0;
  right: 0;
  margin: 0 auto;
  width: fit-content;
  max-width: min(420px, calc(100vw - 40px));
  transform: translateY(-50%);
  background: rgba(0,0,0,0.8);
  color: white;
  padding: 12px 24px;
  border-radius: 8px;
  font-size: var(--fs-body);
  line-height: 1.5;
  z-index: 9999;
  pointer-events: none;
  opacity: 0;
  transition: opacity 0.3s;
  /* 长文案自动换行，不超出页面边界（原来 nowrap 会横向溢出） */
  white-space: normal;
  word-break: break-word;
  overflow-wrap: anywhere;
  text-align: center;
  box-sizing: border-box;
}

.toast.show { opacity: 1; }

/* ==================== 个人中心 ==================== */
.profile-header {
  background: var(--card-bg);
  padding: 20px 16px;
  display: flex;
  align-items: center;
  gap: 14px;
  margin-bottom: 8px;
}

.profile-avatar {
  width: 56px; height: 56px;
  border-radius: 8px;   /* v1574：10→8 */
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 25px;
  font-weight: 600;
  flex-shrink: 0;
  overflow: hidden;
  /* v1463：与通讯录头像统一（原为 #e8edff 浅蓝底） */
  background: rgba(0, 128, 128, 0.8);
  color: #fff;
}

.profile-name { font-size: var(--fs-title-2); font-weight: 600; }
.profile-title { font-size: var(--fs-body-2); color: var(--text-secondary); margin-top: 3px; }

.profile-stats {
  display: flex;
  justify-content: space-around;
  padding: 14px;
  background: var(--card-bg);
  margin-bottom: 8px;
}

.profile-stat { text-align: center; }
.profile-stat .value { font-size: var(--fs-title-1); font-weight: 600; }
.profile-stat .label { font-size: var(--fs-caption); color: var(--text-secondary); margin-top: 2px; }

.profile-menu { background: var(--card-bg); margin-bottom: 8px; }

.profile-menu-item {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 13px 16px;
  border-bottom: 0.5px solid var(--border);
  font-size: var(--fs-body);
  cursor: pointer;
}

.profile-menu-item:last-child { border-bottom: none; }
.profile-menu-item:active { background: #f5f6f7; }
.profile-menu-item .icon { font-size: var(--fs-title-2); width: 22px; text-align: center; }
.profile-menu-item .arrow { margin-left: auto; color: var(--text-tertiary); font-size: 18px; }

/* ==================== 系统管理 ==================== */
.admin-container { background: var(--bg); min-height: 100%; }
.admin-form { padding: 0; }

.admin-field { margin-bottom: 14px; }

.admin-field label {
  display: block;
  font-size: var(--fs-body-2);
  color: var(--text-secondary);
  margin-bottom: 6px;
  font-weight: 500;
}

.admin-input {
  width: 100%;
  padding: 10px 12px;
  border: 1px solid var(--border);
  border-radius: 6px;
  font-size: var(--fs-body);
  color: var(--text);
  background: var(--card-bg);
}

.admin-input:focus {
  border-color: var(--accent);
  background: var(--card-bg);
  outline: none;
  box-shadow: 0 0 0 2px rgba(51,112,255,0.1);
}

.admin-select {
  appearance: none;
  background: #fafafa url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23999' d='M6 8L1 3h10z'/%3E%3C/svg%3E") no-repeat right 12px center;
  padding-right: 32px;
  cursor: pointer;
}

.member-card {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 12px;
  background: var(--card-bg);
  border-radius: var(--radius);
  margin-bottom: 8px;
  box-shadow: var(--shadow);
}

.member-avatar {
  width: 44px; height: 44px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 20px;
  font-weight: 600;
  flex-shrink: 0;
  overflow: hidden;
  background: rgba(0, 128, 128, 0.8);   /* v1463：统一青色（原由内联部门色给底） */
  color: #fff;
}

.member-info { flex: 1; min-width: 0; }
.member-name { font-size: var(--fs-body); font-weight: 500; margin-bottom: 3px; }

.member-meta {
  display: flex;
  gap: 8px;
  font-size: var(--fs-caption);
  color: var(--text-secondary);
  flex-wrap: wrap;
  align-items: center;
}

.role-badge-sm {
  display: inline-block;
  padding: 1px 6px;
  border-radius: 8px;
  font-size: var(--fs-micro);
  font-weight: 500;
}

.perm-card {
  padding: 12px;
  background: var(--card-bg);
  border-radius: var(--radius);
  margin-bottom: 10px;
  box-shadow: var(--shadow);
}
.perm-head { display: flex; align-items: center; gap: 12px; }
.perm-head .member-info { flex: 1; min-width: 0; }
.perm-sub { font-size: var(--fs-caption); color: #888; margin: 6px 0 4px 56px; }
.perm-chips-wrap { margin-top: 4px; }
.perm-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.perm-chip {
  padding: 5px 10px;
  border-radius: 14px;
  font-size: var(--fs-caption);
  background: #f0f0f0;
  color: #888;
  border: 1px solid #e0e0e0;
  cursor: pointer;
  user-select: none;
}
.perm-chip.on { background: #008080; color: #fff; border-color: #008080; }
.perm-chip.disabled { cursor: not-allowed; opacity: 0.7; }
.perm-chip.on.disabled { background: #06b6d4; border-color: #06b6d4; opacity: 0.9; }
.perm-switch { position: relative; width: 44px; height: 24px; flex-shrink: 0; cursor: pointer; }
.perm-switch input { position: absolute; opacity: 0; width: 100%; height: 100%; margin: 0; cursor: pointer; }
.perm-switch-track {
  position: absolute; top: 0; left: 0; right: 0; bottom: 0;
  background: #d0d0d0; border-radius: 12px; transition: background .2s;
}
.perm-switch-track::after {
  content: ''; position: absolute; width: 20px; height: 20px; border-radius: 50%;
  background: #fff; top: 2px; left: 2px; transition: left .2s; box-shadow: 0 1px 2px rgba(0,0,0,.2);
}
.perm-switch input:checked + .perm-switch-track { background: #008080; }
.perm-switch input:checked + .perm-switch-track::after { left: 22px; }
.perm-switch input:disabled { cursor: not-allowed; }

.dept-card {
  padding: 14px;
  border-radius: var(--radius);
  margin-bottom: 8px;
  background: var(--card-bg);
  box-shadow: var(--shadow);
}

.icon-btn {
  width: 32px; height: 32px;
  border-radius: 8px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 16px;
  background: #f5f5f5;
  border: none;
  cursor: pointer;
}

.icon-btn:active { background: #e8e8e8; }

.avatar-option {
  width: 36px; height: 36px;
  border-radius: 6.4px;   /* v1574：8→6.4（头像选项） */
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 22px;
  border: 2px solid transparent;
  cursor: pointer;
  background: #f5f5f5;
  transition: all 0.15s;
}

.avatar-option.selected {
  border-color: var(--accent);
  background: #e8edff;
  transform: scale(1.1);
}

.color-option {
  width: 32px; height: 32px;
  border-radius: 50%;
  cursor: pointer;
  border: 3px solid transparent;
  transition: all 0.15s;
}

.color-option.selected {
  border-color: var(--text);
  transform: scale(1.15);
  box-shadow: 0 0 0 2px white, 0 0 0 4px var(--accent);
}

/* ==================== 工具类 ==================== */
.text-primary { color: var(--accent); }
.text-danger { color: var(--danger); }
.text-secondary { color: var(--text-secondary); }
.text-sm { font-size: var(--fs-body-2); }
.text-xs { font-size: var(--fs-caption); }
.font-bold { font-weight: 600; }
.mt-2 { margin-top: 8px; }
.mt-4 { margin-top: 16px; }
.mb-2 { margin-bottom: 8px; }
.flex { display: flex; }
.items-center { align-items: center; }
.justify-between { justify-content: space-between; }
.gap-2 { gap: 8px; }

/* 滚动条隐藏 */
.app-content::-webkit-scrollbar { display: none; }
.app-content { -ms-overflow-style: none; scrollbar-width: none; }

/* ==================== 认证视图 ==================== */
.auth-view {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  background: var(--bg);
  min-height: 100vh;
  min-height: 100dvh;
}

.auth-container {
  width: 100%;
  max-width: 360px;
  padding: 0 24px;
}

.auth-logo {
  text-align: center;
  margin-bottom: 32px;
}

.auth-logo-icon {
  width: 64px;
  height: 64px;
  border-radius: 16px;
  background: linear-gradient(135deg, #3370ff, #1e4bd8);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 32px;
  margin: 0 auto 12px;
  color: white;
}

.auth-logo-title {
  font-size: var(--fs-title-1-plus);
  font-weight: 700;
  color: var(--text);
  margin-bottom: 4px;
}

.auth-logo-slogan {
  font-size: var(--fs-card-title);
  color: var(--text-tertiary);
}

.auth-card {
  background: var(--card-bg);
  border-radius: var(--radius-lg);
  padding: 24px;
  box-shadow: var(--shadow-lg);
}

.auth-card-title {
  font-size: var(--fs-title-2);
  font-weight: 600;
  color: var(--text);
  margin-bottom: 4px;
  text-align: center;
}

.auth-card-subtitle {
  font-size: var(--fs-body-2);
  color: var(--text-tertiary);
  text-align: center;
  margin-bottom: 20px;
}

.auth-field {
  margin-bottom: 14px;
}

.auth-field label {
  display: block;
  font-size: var(--fs-body-2);
  color: var(--text-secondary);
  margin-bottom: 6px;
  font-weight: 500;
}

.auth-input {
  width: 100%;
  padding: 10px 12px;
  border: 1px solid var(--border);
  border-radius: 8px;
  font-size: var(--fs-body);
  color: var(--text);
  background: var(--card-bg);
  transition: border-color 0.2s;
}

.auth-input:focus {
  border-color: var(--accent);
  outline: none;
  box-shadow: 0 0 0 3px rgba(51,112,255,0.1);
}

.auth-btn {
  width: 100%;
  padding: 12px;
  background: #fff;
  color: var(--text-secondary);
  border: 1px solid #d0d0d0;
  border-radius: 8px;
  font-size: var(--fs-card-title);
  font-weight: 600;
  cursor: pointer;
  margin-top: 4px;
}

.auth-btn:active { background: #f5f6f7; }
.auth-btn:disabled { opacity: 0.5; cursor: default; }

.auth-btn-outline {
  background: transparent;
  color: var(--text-secondary);
  border: 1px solid #d0d0d0;
}

.auth-btn-outline:active { background: var(--primary-light); }

.auth-link {
  text-align: center;
  margin-top: 16px;
  font-size: var(--fs-body-2);
  color: var(--text-secondary);
}

.auth-link a {
  color: var(--accent);
  cursor: pointer;
  font-weight: 500;
}

.auth-error {
  background: #fef2f2;
  color: #dc2626;
  font-size: var(--fs-body-2);
  padding: 8px 12px;
  border-radius: 6px;
  margin-bottom: 12px;
  text-align: center;
}

.auth-divider {
  display: flex;
  align-items: center;
  gap: 12px;
  margin: 20px 0;
  color: var(--text-tertiary);
  font-size: var(--fs-caption);
}

.auth-divider::before,
.auth-divider::after {
  content: '';
  flex: 1;
  height: 0.5px;
  background: var(--border);
}

.auth-invite-field {
  display: flex;
  gap: 8px;
}

.auth-invite-field .auth-input {
  text-align: center;
  font-size: var(--fs-title-1-plus);
  font-weight: 700;
  letter-spacing: 8px;
  padding: 10px 8px;
}

.auth-invite-field .auth-btn {
  width: auto;
  padding: 12px 20px;
  flex-shrink: 0;
}

.auth-info-card {
  background: #f0f7ff;
  border-radius: 8px;
  padding: 14px 16px;
  margin-bottom: 16px;
  display: flex;
  align-items: center;
  gap: 12px;
}

.auth-info-card .icon {
  font-size: var(--fs-display);
  flex-shrink: 0;
}

.auth-info-card .info {
  flex: 1;
  min-width: 0;
}

.auth-info-card .name {
  font-size: var(--fs-body);
  font-weight: 600;
  color: var(--text);
}

.auth-info-card .desc {
  font-size: var(--fs-caption);
  color: var(--text-secondary);
  margin-top: 2px;
}

/* 隐藏底部导航（认证页） */
.app-main { flex: 1; display: flex; flex-direction: column; overflow: hidden; }

/* ==================== 通讯录 ==================== */
#view-contacts.active {
  display: flex;
  flex-direction: column;
  height: 100%;
}

/* 搜索栏 */
#contactsSearchWrap {
  padding: 8px 16px;
  background: var(--bg);
  position: sticky;
  top: 0;
  z-index: 10;
}
.contacts-search {
  display: flex;
  align-items: center;
  background: var(--card-bg);
  border-radius: 8px;
  padding: 8px 12px;
  gap: 8px;
}
.contacts-search-icon svg { flex-shrink: 0; }
.contacts-search-input {
  flex: 1;
  border: none;
  outline: none;
  font-size: var(--fs-body);
  background: transparent;
  color: var(--text);
}
.contacts-search-input::placeholder { color: var(--text-tertiary); }
.contacts-search-clear {
  cursor: pointer;
  flex-shrink: 0;
  width: 20px;
  height: 20px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background: var(--border);
  color: var(--text-secondary);
  font-size: var(--fs-caption);
}

/* 部门列表行（企业微信风格） */
.contacts-dept-list {
  background: var(--card-bg);
}
.contacts-dept-item {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 14px 16px;
  border-bottom: 0.5px solid var(--f0);
  cursor: pointer;
  background: var(--card-bg);
  transition: background 0.15s;
}
.contacts-dept-item:active { background: #f5f5f5; }
.contacts-dept-icon {
  width: 40px;
  height: 40px;
  border-radius: 8px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 18px;
  flex-shrink: 0;
  color: #fff;
  font-weight: 700;
}
.contacts-dept-info {
  flex: 1;
  min-width: 0;
}
.contacts-dept-name {
  font-size: var(--fs-body);
  font-weight: 500;
  color: var(--text);
}
.contacts-dept-desc {
  font-size: var(--fs-caption);
  color: var(--text-tertiary);
  margin-top: 2px;
}
.contacts-dept-arrow {
  flex-shrink: 0;
  color: var(--text-tertiary);
  display: flex;
  align-items: center;
}
/* 分隔标题（比如"公司部门"和"外部联系人"之间） */
.contacts-divider {
  font-size: var(--fs-caption);
  color: var(--text-tertiary);
  padding: 12px 16px 6px;
  background: var(--bg);
}
/* v1454：通讯录改为「全员名录 + 拼音字母分组」（不再有部门层级）
   字母标题吸顶（sticky 的滚动祖先是 .contacts-list-wrap），左右用负 margin 撑满屏宽以遮住下方滚动的行 */
.contacts-letter {
  font-size: var(--fs-caption);
  font-weight: 600;
  color: var(--text-secondary);
  margin: 0 -16px;
  padding: 12px 16px 6px;
  background: var(--bg);
  position: sticky;
  top: 0;
  z-index: 1;
}
.contacts-section > .contacts-letter:first-child { padding-top: 6px; }

/* ==================== 私聊页（v1456 前端骨架）==================== */
#view-chat.active {
  display: flex;
  flex-direction: column;
  height: 100%;
}
.chat-scroll {
  flex: 1;
  overflow-y: auto;
  padding: 14px 16px 8px;
  -ms-overflow-style: none;
  scrollbar-width: none;
}
.chat-scroll::-webkit-scrollbar { display: none; }
.chat-day {
  text-align: center;
  font-size: var(--fs-micro);
  color: var(--text-tertiary);
  margin: 6px 0 14px;
}
.chat-row {
  display: flex;
  align-items: flex-end;
  gap: 6px;
  margin-bottom: 12px;
}
.chat-row.me { flex-direction: row-reverse; }
.chat-bubble {
  max-width: 74%;
  padding: 8px 12px;
  border-radius: 12px;
  font-size: var(--fs-body);
  line-height: 1.5;
  word-break: break-word;
  white-space: pre-wrap;
}
.chat-row.them .chat-bubble {
  background: var(--card-bg);
  color: var(--text);
  border: 0.5px solid var(--border);
  border-bottom-left-radius: 4px;
}
.chat-row.me .chat-bubble {
  background: rgba(0, 128, 128, 0.9);
  color: #fff;
  border-bottom-right-radius: 4px;
}
.chat-time {
  font-size: var(--fs-micro);
  color: var(--text-tertiary);
  flex-shrink: 0;
  padding-bottom: 2px;
}
.chat-empty {
  text-align: center;
  color: var(--text-tertiary);
  font-size: var(--fs-body-2);
  padding: 48px 20px;
}
.chat-inputbar {
  display: flex;
  gap: 8px;
  align-items: center;
  padding: 10px 16px;
  background: var(--card-bg);
  border-top: 0.5px solid var(--border);
}
.chat-inputbar input {
  flex: 1;
  height: 36px;
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 0 12px;
  font-size: var(--fs-body);
  background: var(--bg);
  color: var(--text);
  outline: none;
}
.chat-inputbar input::placeholder { color: #b8b8b8; }
.chat-send {
  flex-shrink: 0;
  height: 36px;
  padding: 0 16px;
  border: none;
  border-radius: 8px;
  background: rgba(0, 128, 128, 0.9);
  color: #fff;
  font-size: var(--fs-body);
  cursor: pointer;
}
.chat-send:active { opacity: 0.85; }

/* 成员列表 */
.contacts-list-wrap {
  flex: 1;
  overflow-y: auto;
  -ms-overflow-style: none;
  scrollbar-width: none;
  padding-bottom: 16px;   /* v1454：全员名录变长后，最后一行会被固定底部导航压住 4px → 留出呼吸空间 */
}
.contacts-list-wrap::-webkit-scrollbar { display: none; }
.contacts-section {
  padding: 0 16px;
}
.contacts-section-title {
  font-size: var(--fs-caption);
  font-weight: 600;
  color: var(--text-secondary);
  padding: 12px 16px 6px;
  background: var(--bg);
  position: sticky;
  top: 0;
  z-index: 1;
}
.contacts-empty {
  text-align: center;
  padding: 60px 20px;
  color: var(--text-tertiary);
  font-size: var(--fs-body);
}
.contacts-empty .empty-icon { margin-bottom: 12px; opacity: 0.3; }

/* 成员行 */
.contact-item {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 12px 0;
  border-bottom: 0.5px solid var(--border);
  cursor: pointer;
  transition: background 0.15s;
}
.contact-item:active { background: #f5f5f5; }
.contact-avatar {
  width: 40px;
  height: 40px;
  border-radius: 6.4px;   /* v1574：8→6.4 */
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 18px;            /* v1455：20 → 18px（-10%） */
  flex-shrink: 0;
  color: #fff;
  font-weight: 600;
  background: rgba(0, 128, 128, 0.8);   /* v1455：统一「青色 80%」（原为各部门色） */
}
.contact-info { flex: 1; min-width: 0; }
.contact-name {
  font-size: var(--fs-body);
  font-weight: 500;
  color: var(--text);
  margin-bottom: 2px;
  display: flex;
  align-items: center;
  gap: 6px;
}
.contact-name .role-tag {
  font-size: var(--fs-micro);
  padding: 1px 6px;
  border-radius: 3px;
  font-weight: 500;
  flex-shrink: 0;
}
.contact-meta {
  font-size: var(--fs-caption);
  color: var(--text-tertiary);
  display: flex;
  align-items: center;
  gap: 6px;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}
.contact-meta span {
  display: inline-flex;
  align-items: center;
  gap: 2px;
}

/* 成员详情弹窗 */
.contact-detail-header {
  text-align: center;
  padding: 24px 0 16px;
}
.contact-detail-avatar {
  width: 64px;
  height: 64px;
  border-radius: 12.8px;   /* v1574：16→12.8 */
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 28.8px;          /* v1455：32 → 28.8px（-10%） */
  color: #fff;
  font-weight: 700;
  margin: 0 auto 12px;
  background: rgba(0, 128, 128, 0.8);   /* v1455：统一「青色 80%」 */
}
.contact-detail-name {
  font-size: var(--fs-title-2);
  font-weight: 600;
  color: var(--text);
  margin-bottom: 4px;
}
.contact-detail-title {
  font-size: var(--fs-body-2);
  color: var(--text-secondary);
}
.contact-detail-fields {
  margin: 0 20px 16px;
  background: var(--bg);
  border-radius: var(--radius);
  overflow: hidden;
}
.contact-detail-field {
  display: flex;
  align-items: center;
  padding: 14px 16px;
  border-bottom: 0.5px solid var(--border);
  gap: 12px;
}
.contact-detail-field:last-child { border-bottom: none; }
.contact-detail-field .field-label {
  width: 56px;
  font-size: var(--fs-body-2);
  color: var(--text-tertiary);
  flex-shrink: 0;
}
.contact-detail-field .field-value {
  font-size: var(--fs-body);
  color: var(--text);
  flex: 1;
}
.contact-detail-field .field-action {
  color: var(--primary);
  font-size: var(--fs-caption);
  cursor: pointer;
  flex-shrink: 0;
}

/* Detail action buttons */
.contact-detail-actions {
  display: flex;
  gap: 10px;
  margin: 0 20px 20px;
}
.contact-detail-actions .action-btn {
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  padding: 10px;
  border-radius: 8px;
  font-size: var(--fs-body-2);
  border: 1px solid var(--border);
  background: var(--card-bg);
  color: var(--text);
  cursor: pointer;
}
.contact-detail-actions .action-btn.primary {
  background: #fff;
  color: var(--text-secondary);
  border-color: #d0d0d0;
}

/* ================================================================
   交付管理子系统 - 黑白灰简约风格
   ================================================================ */

/* --- 首页仪表盘 --- */
.dm-home {
  padding: 12px 16px 20px;
}
.dm-dashboard {
  padding: 0 0 12px;
}
.dm-dash-row {
  display: flex;
  gap: 10px;
  margin-bottom: 10px;
}
.dm-dash-card {
  flex: 1;
  background: #fff;
  border: 1px solid #e5e5e5;
  border-radius: 10px;
  padding: 14px 8px;
  text-align: center;
}
.dm-dash-card.dm-dash-primary {
  background: transparent;
  border-color: #1a1a1a;
}
.dm-dash-card.dm-dash-primary .dm-dash-val { color: #1a1a1a; }
.dm-dash-card.dm-dash-primary .dm-dash-label { color: #999; }
.dm-dash-card.dm-dash-alert {
  border-color: #1a1a1a;
  border-width: 2px;
}
.dm-dash-val {
  font-size: var(--fs-title-1-plus);
  font-weight: 700;
  color: #1a1a1a;
  line-height: 1.2;
}
.dm-dash-label {
  font-size: var(--fs-micro);
  color: #999;
  margin-top: 4px;
}
.dm-dash-wide {
  background: #fafafa;
  border: 1px solid #eee;
  border-radius: 10px;
  padding: 14px;
  text-align: center;
  margin-top: 2px;
}
.dm-dash-wide .dm-dash-val { font-size: var(--fs-title-1); }

/* --- 仪表盘可点击卡片 --- */
.dm-dash-clickable { cursor: pointer; transition: border-color 0.2s; }
.dm-dash-clickable:active { border-color: #1a1a1a; background: #f9f9f9; }

/* --- 仪表盘详情页 --- */
.dm-dash-detail { padding: 12px 16px; }
.dm-dash-summary { display: flex; justify-content: space-around; padding: 16px 0 8px; }
.dm-dash-summary-item { text-align: center; }
.dm-dash-summary-val { font-size: var(--fs-display); font-weight: 700; color: #009999; }
.dm-dash-summary-label { font-size: var(--fs-caption); color: #999; margin-top: 4px; }
.dm-period-row { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin: 12px 0; padding-left: 6px; padding-right: 6px; }
.dm-period-tabs { display: flex; gap: 0; border: 1px solid #e5e5e5; border-radius: 8px; overflow: hidden; flex: 1; min-width: 0; }
.dm-period-tab { flex: 1; min-width: 0; padding: 8px 0; text-align: center; font-size: var(--fs-body-2); color: #666; background: #fff; border: none; cursor: pointer; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.dm-period-tab.active { background: #009999; color: #fff; }
.dm-year-picker { flex-shrink: 0; }
.dm-year-picker select { padding: 8px 14px; border: 1px solid #e5e5e5; border-radius: 8px; font-size: var(--fs-body-2); color: #666; background: #fff; cursor: pointer; outline: none; width: 90px; box-sizing: border-box; }
.dm-chart-box { padding: 8px 6px; }
.dm-target-set { display: flex; align-items: center; gap: 8px; padding: 12px 15px; border-top: 1px solid #f0f0f0; margin-top: 8px; }
.dm-target-set > label { font-size: var(--fs-body); color: #333; white-space: nowrap; }
.dm-target-input { display: flex; align-items: center; gap: 4px; }
.dm-target-input input { width: 64px; padding: 6px 8px; border: 1px solid #ddd; border-radius: 6px; font-size: var(--fs-body); text-align: center; }
.dm-target-input span { font-size: var(--fs-body); color: #999; }
.dm-target-input .dm-btn { padding: 6px 14px; font-size: var(--fs-body-2); }
.dm-dash-note { font-size: var(--fs-micro); color: #bbb; margin-top: 4px; }
.dm-badge-warn { background: #fff3e0; color: #e65100; border: 1px solid #ffb74d; }

/* 多产品行 */
.dm-item-row { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }
.dm-item-row .dm-item-name { flex: 1; min-width: 0; padding: 8px 10px; border: 1px solid #ddd; border-radius: 6px; font-size: var(--fs-body); }
.dm-item-row .dm-item-qty { width: 64px; flex-shrink: 0; padding: 8px 6px; border: 1px solid #ddd; border-radius: 6px; font-size: var(--fs-body); text-align: center; }
.dm-item-row .dm-item-del { flex-shrink: 0; display: flex; align-items: center; justify-content: center; width: 28px; height: 28px; color: #999; cursor: pointer; border-radius: 6px; }
.dm-item-row .dm-item-del:active { background: #f0f0f0; }
.dm-add-item-btn { display: block; width: 100%; padding: 8px; border: 1px dashed #ccc; border-radius: 6px; background: #fafafa; color: #666; font-size: var(--fs-body-2); text-align: center; cursor: pointer; margin-top: 4px; }
.dm-add-item-btn:active { background: #f0f0f0; }
.dm-detail-row-total { border-top: 1px solid #eee; padding-top: 6px; font-weight: 600; }

/* 竖向柱状图 */
.dm-vchart { padding: 4px 0; }
.dm-vchart-row { display: flex; align-items: center; margin-bottom: 13px; }
.dm-vchart-label { width: 72px; flex-shrink: 0; font-size: var(--fs-body); color: #666; text-align: left; padding-left: 10px; padding-right: 8px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.dm-vchart-track { flex: 1; height: 18px; background: #f5f5f5; border-radius: 4px; position: relative; overflow: visible; }
.dm-vchart-bar { height: 100%; border-radius: 4px; transition: width 0.3s ease; position: relative; z-index: 1; }
.dm-vchart-bar.above { background: #009999; }
.dm-vchart-bar.below { background: #ccc; }
.dm-vchart-target-mark { position: absolute; top: -2px; bottom: -2px; width: 0; border-left: 1.5px dashed #009999; z-index: 2; }
.dm-vchart-val { width: 48px; flex-shrink: 0; font-size: var(--fs-body-2); color: #333; font-weight: 600; padding-left: 6px; text-align: left; }
.dm-vchart-legend { display: flex; gap: 12px; justify-content: center; margin-top: 12px; font-size: var(--fs-micro); color: #999; flex-wrap: wrap; }
.dm-vchart-legend-item { display: flex; align-items: center; gap: 4px; }
.dm-vchart-dot { display: inline-block; width: 8px; height: 8px; border-radius: 2px; }
.dm-vchart-dot.above { background: #009999; }
.dm-vchart-dot.below { background: #ccc; }
.dm-vchart-dash { display: inline-block; width: 14px; border-top: 1.5px dashed #009999; }

/* --- 模块入口 --- */
.dm-modules {
  padding: 8px 16px 0;
}
.dashboard .dm-modules {
  /* 问题解决仪表盘：根容器 .dashboard 已带 16px 左右留白，模块区不再重复留白 */
  padding: 8px 0 12px;
}
.dm-home .dm-modules {
  /* 交付管理首页：根容器 .dm-home 已带 16px 左右留白，模块区去掉重复留白 → 四业务模块卡片与问题解决页同宽 */
  padding: 8px 0 0;
}
.dm-modules-title {
  font-size: var(--fs-body);
  font-weight: 500;
  color: #1d1d1f;
  margin-bottom: 10px;
}
.dm-modules-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
}
.dm-module-card {
  background: #fff;
  border: 1px solid #e5e5e5;
  border-radius: 12px;
  padding: 20px 12px;
  height: 117px;
  text-align: center;
  cursor: pointer;
  transition: border-color 0.2s;
}
.dm-module-card:active {
  border-color: #1a1a1a;
  background: #fafafa;
}
.dm-module-icon {
  color: #333;
  margin-bottom: 8px;
  display: flex;
  justify-content: center;
}
/* 问题解决仪表盘：业务模块图形徽标 #008080（交付管理/任务管理不受影响） */
.dashboard .dm-module-icon { color: #008080; }
/* 业务模块卡名称：问题解决/交付管理/任务管理三页统一 15px */
.dm-module-name {
  font-size: var(--fs-body);
  font-weight: 600;
  color: #1a1a1a;
  /* 中文字体优先：数字/字母与汉字同源字形，混排大小视觉统一 */
  font-family: "PingFang SC", "HarmonyOS Sans SC", "Microsoft YaHei", sans-serif;
}

.dm-module-desc {
  font-size: var(--fs-micro);
  color: #999;
  margin-top: 4px;
}

.dm-back-bar {
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 10px 16px;
  font-size: var(--fs-card-title);
  font-weight: 600;
  color: #1a1a1a;
  background: #fff;
  border-bottom: 1px solid #e5e5e5;
  cursor: pointer;
}
.dm-back-bar:active {
  background: #f0f0f0;
}

.dm-toolbar {
  display: flex;
  gap: 10px;
  padding: 12px 16px;
  align-items: center;
}
.dm-search {
  flex: 1;
  display: flex;
  align-items: center;
  gap: 8px;
  background: none;
  border: 1px solid rgba(0,0,0,0.2);
  border-radius: 8px;
  padding: 8px 12px;
}
.dm-search input {
  border: none;
  background: none;
  outline: none;
  flex: 1;
  font-size: var(--fs-body-2);
  color: var(--text);
}
.dm-search input::placeholder { color: #999; }
.dm-btn-add {
  display: flex;
  align-items: center;
  gap: 4px;
  background: none;
  color: var(--text);
  border: 1px solid rgba(0,0,0,0.2);
  border-radius: 8px;
  padding: 8px 14px;
  font-size: var(--fs-body-2);
  cursor: pointer;
  white-space: nowrap;
  flex-shrink: 0;
}

.dm-list { padding: 0 16px 16px; }

.dm-card {
  background: #fff;
  border: 1px solid #e5e5e5;
  border-radius: 10px;
  padding: 9px;
  margin-bottom: 10px;
  cursor: pointer;
  transition: border-color 0.2s;
}
.dm-card:active { border-color: #999; }
.dm-card-head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 8px;
}
.dm-card-title {
  font-size: var(--fs-body);
  font-weight: 500;
  color: #1a1a1a;
}
.dm-card-body {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin-bottom: 8px;
}
.dm-card-tag {
  font-size: var(--fs-caption);
  color: #666;
  background: #f5f5f5;
  border-radius: 4px;
  padding: 2px 8px;
}
.dm-card-foot {
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-size: var(--fs-body-2);
  color: #666;
}
.dm-card-foot strong { color: #1a1a1a; }
.dm-ship-scope .dm-card-body { margin-bottom: 16px; }

/* 库存详情 */
.dm-inv-summary { display: flex; padding: 0 16px; margin-bottom: 12px; }
.dm-inv-summary-item { flex: 1; text-align: center; }
.dm-inv-summary-val { font-size: var(--fs-title-1); font-weight: 700; color: #1a1a1a; }
.dm-inv-summary-val.dm-inv-in { color: #009999; }
.dm-inv-summary-val.dm-inv-out { color: #e65100; }
.dm-inv-summary-label { font-size: var(--fs-micro); color: #999; margin-top: 2px; }
.dm-card-log .dm-card-head { align-items: center; }
.dm-log-icon { display: inline-block; font-size: 13px; font-weight: 600; padding: 2px 8px; border-radius: 4px; margin-right: 6px; }
.dm-log-inbound { background: #e0f5f5; color: #009999; }
.dm-log-outbound { background: #fff3e0; color: #e65100; }
.dm-card-time { font-size: var(--fs-caption); color: #999; }
.dm-card-overdue {
  border-color: #ccc;
  background: #fafafa;
}
.dm-card-completed {
  background: #f5f5f5;
}
.dm-card-abnormal {
  border-color: #ccc;
  border-left: 3px solid #1a1a1a;
}

.dm-badge {
  font-size: var(--fs-micro);
  padding: 2px 8px;
  border-radius: 4px;
  font-weight: 500;
  background: #f0f0f0;
  color: #666;
}
.dm-badge-ok { background: #f5f5f5; color: #666; }
.dm-badge-low { background: #eee; color: #333; border: 1px solid #ccc; }
.dm-badge-out { background: #eee; color: #333; border: 1px solid #ccc; }
.dm-badge-order-pending { background: transparent; color: #666; border: 1px solid #ccc; }
.dm-badge-order-production { background: transparent; color: #333; border: 1px solid #ccc; }
.dm-badge-order-ready { background: transparent; color: #1a1a1a; border: 1px solid #ccc; }
.dm-badge-order-shipped { background: transparent; color: #333; border: 1px solid #ccc; }
.dm-badge-order-completed { background: transparent; color: #1a1a1a; border: 1px solid #ccc; }
.dm-badge-ship-pending { background: transparent; color: #666; border: 1px solid #ccc; }
.dm-badge-ship-packed { background: #e5e5e5; color: #333; border: 1px solid #ccc; }
.dm-badge-ship-shipped { background: #d5d5d5; color: #1a1a1a; border: 1px solid #ccc; }
.dm-badge-ship-completed { background: transparent; color: #1a1a1a; border: 1px solid #1a1a1a; }

.dm-stats {
  display: flex;
  padding: 12px 16px;
  gap: 6px;
}
.dm-stat {
  flex: 1;
  text-align: center;
  background: #fafafa;
  border: 1px solid #eee;
  border-radius: 8px;
  padding: 10px 2px;
  cursor: pointer;
}
.dm-stat.active {
  border-color: #1a1a1a;
  background: #f0f0f0;
}
.dm-stat-val {
  font-size: var(--fs-title-2);
  font-weight: 600;
  color: #1a1a1a;
}
.dm-stat-val.dm-stat-warn { color: #333; }
.dm-stat-val.dm-stat-danger { color: #555; }
.dm-stat-label {
  font-size: var(--fs-micro);
  color: #999;
  margin-top: 2px;
}

.dm-filter-bar {
  display: flex;
  gap: 6px;
  padding: 0 16px 10px;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}
.dm-filter-bar::-webkit-scrollbar { display: none; }
.dm-filter-btn {
  border: 1px solid #e5e5e5;
  background: #fff;
  color: #666;
  border-radius: 16px;
  padding: 4px 14px;
  font-size: var(--fs-caption);
  white-space: nowrap;
  cursor: pointer;
  flex-shrink: 0;
}
.dm-filter-btn.active {
  background: transparent;
  color: #1a1a1a;
  border-color: #1a1a1a;
}

.dm-section-title {
  font-size: var(--fs-body);
  font-weight: 500;
  color: #1a1a1a;
  padding: 12px 16px 8px;
}

.dm-empty {
  text-align: center;
  padding: 40px 0;
  color: #ccc;
  font-size: var(--fs-body-2);
}

.dm-form {
  padding: 16px;
}
.dm-form-header {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 20px;
}
.dm-form-back-icon {
  display: flex;
  align-items: center;
  cursor: pointer;
  color: #666;
  flex-shrink: 0;
}
.dm-form-title {
  font-size: var(--fs-title-2);
  font-weight: 600;
  color: #1a1a1a;
  margin: 0;
}
.dm-field {
  margin-bottom: 16px;
}
.dm-field label {
  display: block;
  font-size: var(--fs-body-2);
  color: #666;
  margin-bottom: 6px;
}
.dm-field input, .dm-field select {
  width: 100%;
  border: 1px solid #e5e5e5;
  border-radius: 8px;
  padding: 10px 12px;
  font-size: var(--fs-body);
  color: #1a1a1a;
  background: #fff;
  outline: none;
  box-sizing: border-box;
}
.dm-field input:focus, .dm-field select:focus {
  border-color: #999;
}
.dm-field-row {
  display: flex;
  gap: 12px;
}
.dm-field-row .dm-field {
  flex: 1;
}
.dm-param-row {
  display: flex;
  gap: 8px;
  align-items: center;
  margin-bottom: 8px;
}
.dm-param-row input.pf-param-name {
  flex: 1;
}
.dm-param-row input.pf-param-val {
  flex: 2;
}
.dm-param-row input {
  border: 1px solid #e5e5e5;
  border-radius: 8px;
  padding: 10px 12px;
  font-size: var(--fs-body);
  outline: none;
  background: #fff;
  box-sizing: border-box;
}
.dm-param-del {
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  color: #999;
  padding: 4px;
}
.dm-btn-add-param {
  border: 1px dashed rgba(0,0,0,0.2);
  background: none;
  color: #666;
  border-radius: 8px;
  padding: 8px 12px;
  font-size: var(--fs-body-2);
  cursor: pointer;
  width: 100%;
  margin-top: 4px;
}
.dm-form-actions {
  display: flex;
  gap: 10px;
  margin-top: 20px;
}
.dm-btn {
  flex: 1;
  border: 1px solid #e5e5e5;
  background: #fff;
  color: #333;
  border-radius: 8px;
  padding: 12px;
  font-size: var(--fs-body);
  cursor: pointer;
}
.dm-btn-primary {
  background: transparent;
  color: #1a1a1a;
  border-color: #1a1a1a;
}
.dm-btn-danger {
  background: #fff;
  color: #333;
  border-color: #ccc;
  flex: 0 0 auto;
  padding: 12px 16px;
}
.dm-btn-line {
  border: 1px dashed #ccc;
  background: transparent;
  color: #666;
  border-radius: 8px;
  padding: 8px 16px;
  font-size: var(--fs-body-2);
  cursor: pointer;
  margin-bottom: 12px;
}

/* 产品查看页（只读） */
.dm-view-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 20px;
  gap: 12px;
}
.dm-view-title {
  font-size: var(--fs-title-2);
  font-weight: 600;
  color: #1a1a1a;
  margin: 0;
}
.dm-view-edit {
  display: flex;
  align-items: center;
  gap: 4px;
  flex-shrink: 0;
  border: 1px solid rgba(0,0,0,0.1);
  background: transparent;
  color: #666;
  border-radius: 8px;
  padding: 6px 12px;
  font-size: var(--fs-body-2);
  cursor: pointer;
  white-space: nowrap;
}
.dm-view-section {
  background: #f7f7f7;
  border-radius: 10px;
  padding: 4px 14px;
  margin-bottom: 16px;
}
.dm-view-section-title {
  font-size: var(--fs-body-2);
  color: #999;
  padding: 10px 0 6px;
  border-bottom: 1px solid #eee;
  margin-bottom: 4px;
}
.dm-view-row {
  display: flex;
  align-items: flex-start;
  padding: 10px 0;
  border-bottom: 1px solid #eee;
  gap: 12px;
}
.dm-view-row:last-child {
  border-bottom: none;
}
.dm-view-label {
  flex-shrink: 0;
  width: 80px;
  font-size: var(--fs-body-2);
  color: #999;
}
.dm-view-value {
  flex: 1;
  font-size: var(--fs-body);
  color: #1a1a1a;
  word-break: break-all;
}

.dm-item-row {
  display: flex;
  gap: 8px;
  align-items: center;
  margin-bottom: 8px;
}
.dm-item-row select {
  flex: 1;
  border: 1px solid #e5e5e5;
  border-radius: 8px;
  padding: 8px;
  font-size: var(--fs-body-2);
  color: #1a1a1a;
}
.dm-combobox {
  flex: 1;
  position: relative;
}
.dm-combobox input {
  width: 100%;
  border: 1px solid #e5e5e5;
  border-radius: 8px;
  padding: 8px;
  font-size: var(--fs-body-2);
  color: #1a1a1a;
  background: #fff;
  box-sizing: border-box;
}
.dm-combobox-list {
  display: none;
  position: absolute;
  top: 100%;
  left: 0;
  right: 0;
  max-height: 200px;
  overflow-y: auto;
  background: #fff;
  border: 1px solid #e5e5e5;
  border-top: none;
  border-radius: 0 0 8px 8px;
  z-index: 100;
  box-shadow: 0 4px 8px rgba(0,0,0,0.08);
}
.dm-combobox-item {
  padding: 8px 10px;
  font-size: var(--fs-body-2);
  color: #1a1a1a;
  cursor: pointer;
  border-bottom: 1px solid #f5f5f5;
}
.dm-combobox-item:hover {
  background: #f0f0f0;
}
.dm-combobox-item.active {
  background: #e6f7f7;
  border-left: 3px solid #009999;
}
.dm-combobox-meta {
  color: #999;
  font-size: var(--fs-caption);
}
.dm-combobox-empty {
  padding: 10px;
  font-size: var(--fs-body-2);
  color: #999;
  text-align: center;
}
.dm-icon-btn {
  border: none;
  background: #f5f5f5;
  border-radius: 6px;
  width: 28px;
  height: 28px;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  color: #999;
  flex-shrink: 0;
}

.dm-detail-header {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-bottom: 16px;
}
.dm-detail-section {
  background: #fafafa;
  border-radius: 8px;
  padding: 4px 14px;
  margin-bottom: 16px;
}
.dm-detail-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 10px 0;
  border-bottom: 1px solid #f0f0f0;
  font-size: var(--fs-body);
}
.dm-detail-row:last-child { border-bottom: none; }
.dm-detail-row span:first-child { color: #999; }
.dm-detail-row span:last-child { color: #1a1a1a; font-weight: 500; }

.dm-progress {
  display: flex;
  justify-content: space-between;
  margin-bottom: 24px;
  padding: 0 4px;
}
.dm-step {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
  flex: 1;
}
/* v1745（生产模块专用，共用类保持原样 —— 主工程订单详情也用 .dm-progress/.dm-step）：
   步骤条两端与下方外框对齐：节点按内容定宽、线段 flex:1 自动填满间隙 */
.prod-content .dm-progress { padding: 0; }
.prod-content .dm-progress .dm-step { flex: 0 0 auto; min-width: 26px; }
/* v1745：节点之间的连接线段（占满剩余空间；margin 左右 -5px 补上圆点两侧留白） */
.dm-line {
  flex: 1 1 auto;
  align-self: flex-start;
  height: 1px;
  margin: 6px -5px 0;
  background: #e0e0e0;
}
.dm-line.done { background: #1a1a1a; }
.dm-step-dot {
  width: 12px;
  height: 12px;
  border-radius: 50%;
  border: 2px solid #ddd;
  background: #fff;
}
.dm-step.done .dm-step-dot {
  background: transparent;
  border-color: #1a1a1a;
}
.dm-step-label {
  font-size: var(--fs-micro);
  color: #999;
}
.dm-step.done .dm-step-label {
  color: #1a1a1a;
  font-weight: 500;
}

.dm-table {
  background: #fafafa;
  border-radius: 8px;
  padding: 4px 14px;
  margin-bottom: 16px;
}
.dm-table-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 10px 0;
  border-bottom: 1px solid #f0f0f0;
  font-size: var(--fs-body-2);
}
.dm-table-row:last-child { border-bottom: none; }
.dm-table-row span:first-child { color: #1a1a1a; flex: 1; }
.dm-table-row span:nth-child(2) { color: #666; width: 50px; text-align: center; }
.dm-table-row span:nth-child(3) { color: #666; width: 70px; text-align: right; }
.dm-table-row span:last-child { color: #1a1a1a; font-weight: 500; width: 80px; text-align: right; }

.dm-timeline {
  padding: 0 16px 16px;
}
.dm-tl-item {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  padding: 8px 0;
}
.dm-tl-dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  margin-top: 4px;
  flex-shrink: 0;
}
.dm-tl-inbound { background: #333; }
.dm-tl-outbound { background: #ccc; border: 1px solid #999; }
.dm-tl-content {
  display: flex;
  flex-direction: column;
  gap: 2px;
  flex: 1;
}
.dm-tl-name {
  font-size: var(--fs-body-2);
  color: #1a1a1a;
  font-weight: 500;
}
.dm-tl-detail {
  font-size: var(--fs-caption);
  color: #999;
}
.dm-tl-time {
  font-size: var(--fs-micro);
  color: #ccc;
}

.dm-text-danger { color: #666 !important; font-weight: 500; }

/* === 订单管理页面字体放大15% === */
.dm-order-scope .dm-card { padding: 10px; }
.dm-order-scope .dm-card-body { margin-bottom: 15px; }

/* === 订单管理时间筛选栏 === */
.dm-date-filter {
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 8px 12px;
  background: #f8f8f8;
  border-bottom: 1px solid #eee;
}
.dm-date-filter select {
  font-size: var(--fs-body-2);
  border: 1px solid #ddd;
  border-radius: 6px;
  padding: 4px 6px;
  background: white;
  flex-shrink: 0;
  height: 28px;
  box-sizing: border-box;
}
.dm-date-filter input[type="date"] {
  font-size: var(--fs-body-2);
  border: 1px solid #ddd;
  border-radius: 6px;
  padding: 4px 6px;
  flex: 1;
  min-width: 0;
  height: 28px;
  box-sizing: border-box;
}
.dm-date-filter-sep {
  font-size: var(--fs-body-2);
  color: #999;
  flex-shrink: 0;
}
.dm-date-filter-clear {
  font-size: var(--fs-caption);
  color: #009999;
  background: none;
  border: none;
  cursor: pointer;
  flex-shrink: 0;
  white-space: nowrap;
}
.dm-order-scope .dm-stat-val { font-size: var(--fs-title-1); }
.dm-order-scope .dm-stat-label { font-size: var(--fs-caption); }
.dm-order-scope .dm-card-title { font-size: var(--fs-card-title); }
.dm-order-scope .dm-card-tag { font-size: var(--fs-body-2); }
.dm-order-scope .dm-card-foot { font-size: var(--fs-body); }
.dm-order-scope .dm-search input { font-size: var(--fs-body-2); }
.dm-order-scope .dm-btn-add { font-size: var(--fs-body-2); }
.dm-order-scope .dm-empty { font-size: var(--fs-body); }
.dm-order-scope .dm-badge { font-size: var(--fs-body-2); }
.dm-order-scope .dm-form-title { font-size: var(--fs-title-1); }
.dm-order-scope .dm-step-label { font-size: var(--fs-caption); }
.dm-order-scope .dm-detail-row { font-size: var(--fs-card-title); }
.dm-order-scope .dm-table-row { font-size: var(--fs-body); }
.dm-order-scope .dm-field label { font-size: var(--fs-body); }
.dm-order-scope .dm-field input,
.dm-order-scope .dm-field select { font-size: var(--fs-card-title); }
.dm-order-scope .dm-param-row input { font-size: var(--fs-card-title); }
.dm-order-scope .dm-btn-add-param { font-size: var(--fs-body); }
.dm-order-scope .dm-btn { font-size: var(--fs-card-title); }
.dm-order-scope .dm-combobox input { font-size: var(--fs-body); }
.dm-order-scope .dm-combobox-item { font-size: var(--fs-body); }
.dm-order-scope .dm-combobox-meta { font-size: var(--fs-body); }
.dm-order-scope .dm-combobox-empty { font-size: var(--fs-body); }
.dm-order-scope .dm-section-title { font-size: var(--fs-card-title); }

.dm-card-low { border-left: 3px solid #ccc; }
.dm-card-out { border-left: 3px solid #ef4444; }
.dm-card-ok { border-left: 3px solid #f0f0f0; }

.dm-sign-modal {
  padding: 20px;
}
.dm-sign-modal h3 {
  font-size: var(--fs-title-2);
  font-weight: 600;
  color: #1a1a1a;
  margin-bottom: 16px;
}
.dm-radio-group {
  display: flex;
  gap: 20px;
  padding: 4px 0;
}
.dm-radio-group label {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: var(--fs-body);
  color: #333;
  cursor: pointer;
}
.dm-radio-group input[type="radio"] {
  width: auto;
}


/* ===== 统计看板 ===== */
.pm-stat-cards { display:flex; gap:8px; margin-bottom:10px; }
.pm-stat-card { flex:1; background:#fff; border:0.5px solid #ebedf0; border-radius:10px; padding:12px 8px; text-align:center; }
/* 问题总数卡片：10% 浅灰色背景（其余统计卡片保持白底），减弱 50% 后为 5% */
.pm-stat-card.pm-stat-card-total { background: rgba(0,0,0,0.05); }
.pm-stat-num { font-size: var(--fs-title-1-plus); font-weight:700; color:#1d1d1f; line-height:1.1; }
.pm-stat-label { font-size: var(--fs-caption); color:#999; margin-top:4px; }

.pm-chart-card { background:#fff; border:0.5px solid #ebedf0; border-radius:10px; padding:12px; margin-bottom:12px; }
.pm-chart-title { font-size: var(--fs-body); font-weight:600; color:#1d1d1f; margin-bottom:10px; }

.pm-bar-row { margin-bottom:12px; }
.pm-bar-row:last-child { margin-bottom:0; }
.cat-donut-wrap { display:flex; align-items:center; gap:32px; }
.cat-donut { width:144px; height:144px; flex:0 0 144px; }
.cat-legend { flex:1; display:flex; flex-direction:column; gap:12px; min-width:0; }
.cat-legend-row { display:flex; align-items:center; gap:8px; font-size: var(--fs-body-2); color:#1d1d1f; }
.pm-chart-card[data-catcard] { cursor:pointer; }
.pm-chart-card[data-catcard]:active { opacity:.92; }
.cat-enter { float:right; color:#c4c4c4; font-weight:600; }
.cat-dot { width:10px; height:10px; border-radius:2px; flex:0 0 10px; }
.cat-name { flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.cat-val { font-weight:500; }
.cat-pct { color:#888780; width:40px; flex:0 0 40px; text-align:right; }

/* 问题类别筛选页 */
.cat-filter-page { padding:0 16px 16px; }
.cat-filter-bar-top { margin-bottom:12px; }
.cat-filter-row { display:flex; align-items:center; gap:8px; margin-bottom:10px; }
.cat-filter-row:last-child { margin-bottom:0; }
.cat-filter-label { display:inline-flex; align-items:center; justify-content:center; width:96px; padding:4px 6px; font-size: var(--fs-body-2); border:1px solid #ddd; border-radius:6px; height:28px; box-sizing:border-box; background:#fff; color:#1d1d1f; }
.cat-date-input { flex:1; min-width:0; font-size: var(--fs-body-2); padding:4px 6px; border:1px solid #ddd; border-radius:6px; height:28px; box-sizing:border-box; color:#1d1d1f; background:#fff; }
.cat-date-sep { color:#999; font-size: var(--fs-body-2); flex:0 0 auto; }
.cat-select { flex:1; min-width:0; font-size: var(--fs-body-2); padding:4px 6px; border:1px solid #ddd; border-radius:6px; height:28px; box-sizing:border-box; color:#1d1d1f; background:#fff; }
.cat-time-type { flex:0 0 auto; width:96px; padding:4px 6px; font-size: var(--fs-body-2); border:1px solid #ddd; border-radius:6px; height:28px; box-sizing:border-box; background:#fff; color:#1d1d1f; }
.cat-result-count { font-size: var(--fs-body-2); color:#888780; margin:10px 2px 12px; }
/* 窄屏：环形图进一步缩小，给类别图例留出空间，避免被挤出可视区 */
@media (max-width: 440px) {
  .cat-donut-wrap { gap:20px; }
  .cat-donut { width:120px; height:120px; flex:0 0 120px; }
  .cat-legend { gap:8px; }
}
@media (max-width: 360px) {
  .cat-donut { width:104px; height:104px; flex:0 0 104px; }
}
.pm-bar-label { font-size: var(--fs-body-2); color:#333; margin-bottom:5px; }
.pm-bar-track { display:flex; background:#f2f3f5; border-radius:6px; height:14px; overflow:hidden; }
.pm-bar-fill { height:100%; border-radius:0; }
.pm-bar-fill.bar-pub { background:#fa8c16; }
.pm-bar-fill.bar-rel { background:#009999; }
.pm-bar-val { font-size: var(--fs-caption); color:#999; margin-top:5px; }
.dept-top { display:flex; align-items:center; justify-content:space-between; gap:12px; margin-bottom:12px; }
.dept-tabs { display:inline-flex; background:#f0f0f0; border-radius:8px; padding:3px; }
.dept-tab { padding:6px 16px; border-radius:6px; font-size: var(--fs-body); color:#646a73; cursor:pointer; background:transparent; white-space:nowrap; }
.dept-tab.active { background:#fff; color:#1d1d1f; font-weight:600; box-shadow:0 1px 2px rgba(0,0,0,.08); }

.dept-dashboard { margin-bottom:12px; }
.dept-close-rate { display:flex; flex-direction:column; align-items:flex-end; gap:3px; flex:none; }
.dept-close-rate .cr-head { font-size: var(--fs-caption); color:#646a73; }
.dept-close-rate .cr-val { font-size: var(--fs-card-title); font-weight:700; color:#1d1d1f; }
.dept-close-rate .cr-bar { width:168px; height:8px; border-radius:4px; background:#f0f0f0; overflow:hidden; }
.dept-close-rate .cr-fill { display:block; height:100%; background:#009999; transition:width .3s ease; }

.pm-stat-card[data-go]:active { background:#f5f5f5; }
.dept-dashboard .pm-stat-card { cursor:pointer; transition:box-shadow .15s, background .15s; }
.dept-dashboard .pm-stat-card:hover { box-shadow:0 1px 4px rgba(0,0,0,.08); }
.dept-dashboard .pm-stat-card.active { background:#ededed; }

/* 问题管理页：发布/解决趋势柱状图 */
.mg-trend { margin-top:12px; }
.mg-trend-head { display:flex; align-items:center; justify-content:space-between; margin-bottom:8px; }
.mg-trend-toggle { display:flex; gap:6px; }
.mg-period { padding:4px 12px; border:1px solid #d0d0d0; border-radius:6px; background:#fff; font-size: var(--fs-body-2); color:#646a73; cursor:pointer; }
.mg-period.active { background:#009999; color:#fff; border-color:#009999; }
.mg-trend-legend { display:flex; gap:16px; margin-bottom:8px; font-size: var(--fs-caption); color:#646a73; }
.trend-dot { display:inline-block; width:10px; height:10px; border-radius:2px; margin-right:4px; vertical-align:middle; }
.trend-dot.pub { background:#fa8c16; }
.trend-dot.res { background:#009999; }
.mg-trend-bars { display:flex; gap:10px; align-items:flex-end; height:160px; overflow-x:auto; padding:6px 2px 0; }
.trend-col { display:flex; flex-direction:column; align-items:center; justify-content:flex-end; min-width:20px; flex:1; height:100%; }
.trend-bar-group { display:flex; gap:3px; align-items:flex-end; height:124px; }
.trend-bar { width:9px; border-radius:3px 3px 0 0; }
.trend-bar.pub { background:#fa8c16; }
.trend-bar.res { background:#009999; }
.trend-xlabel { font-size: var(--fs-micro); color:#888780; margin-top:5px; white-space:nowrap; }
.trend-empty { color:#888780; font-size: var(--fs-body-2); padding:24px 0; }

/* 审核印章（详情页半透明标记） */
.review-stamp {
  position:absolute; top:47px; right:14px; /* 下移避开头部（8D/4S 编号徽章） */
  padding:5px 11px; border-radius:6px;
  font-size: var(--fs-body); font-weight:700; letter-spacing:2px;
  transform:rotate(-12deg); opacity:0.7; pointer-events:none;
  border:2px solid;
}
.review-stamp.approved { color:#2563eb; border-color:#2563eb; background:rgba(37,99,235,0.08); }
.review-stamp.rejected { color:#dc2626; border-color:#dc2626; background:rgba(220,38,38,0.08); }
.review-stamp.forced { color:#dc2626; border-color:#dc2626; background:rgba(220,38,38,0.08); }

/* 审核状态徽标（问题列表页） */
.review-badge { font-size: var(--fs-micro); padding:1px 7px; border-radius:8px; white-space:nowrap; }
.review-badge.approved { color:#2563eb; background:rgba(37,99,235,0.1); }
.review-badge.rejected { color:#dc2626; background:rgba(220,38,38,0.1); }
.review-badge.unreviewed { color:#d97706; background:rgba(217,119,6,0.1); }

/* 审核面板（详情页底部操作区：意见框 + 按钮） */
.review-panel { width:100%; }
.review-panel .modal-input { width:100%; min-height:64px; box-sizing:border-box; }

/* 危险操作按钮（强制关闭 / 打回重做） */
.action-btn.danger { color:#dc2626; border-color:#dc2626; }
.action-btn.danger:active { background:#dc262611; }

/* ==================== 任务管理子系统（移植自看板模版；主题色 80青 #008080） ==================== */
.pj-hd { display:flex; align-items:center; justify-content:space-between; gap:10px; margin:12px 4px 5px; }
.pj-hd .pj-tt { font-size: var(--fs-body); font-weight:500; }
.pj-yp-wrap { position:relative; }
.pj-year-pick { display:inline-flex; align-items:center; gap:4px; cursor:pointer; font-size: var(--fs-body); color:#5f5e5a; padding:2px 2px 2px 4px; }
.pj-caret { width:0; height:0; border-left:3.5px solid transparent; border-right:3.5px solid transparent; border-top:4px solid #9aa0a6; }
.pj-yp-menu { position:absolute; right:0; top:100%; margin-top:6px; z-index:60; background:#fff; border:0.5px solid #d3d1c7; border-radius:10px; min-width:104px; padding:4px; display:none; }
.pj-yp-menu.show { display:block; }
.pj-yp-item { font-size: var(--fs-body); color:#2c2c2a; padding:8px 10px; border-radius:7px; cursor:pointer; white-space:nowrap; }
.pj-yp-item:active { background:#f4f6f8; }
.pj-yp-item.on { color:#185fa5; font-weight:500; }
.pj-card { background:#fff; border:0.5px solid #008080; border-radius:14px; padding:11px; margin-top:5px; }
.pj-gauge { display:flex; justify-content:center; padding:2px 0 4px; }
.pj-gauge svg { width:100%; max-width:252px; height:auto; display:block; }
.pj-divider { height:0.5px; background:#eceae3; margin:8px 0 8px; }
.pj-kpis { display:grid; grid-template-columns:repeat(4,1fr); gap:6px; }
.pj-kpi { text-align:center; }
.pj-kpi .pj-num { font-size: var(--fs-title-1); font-weight:500; color:#008080; line-height:1.1; }
.pj-kpi.pj-danger .pj-num { color:#a32d2d; }
.pj-kpi .pj-lbl { font-size: var(--fs-micro); color:#888780; margin-top:3px; white-space:nowrap; }
.pj-modtitle { font-size: var(--fs-body); font-weight:500; margin:20px 4px 12px; }
.pj-grid { display:grid; grid-template-columns:1fr 1fr; gap:12px; }
.pj-mod { background:#fff; border:0.5px solid #d3d1c7; border-radius:14px; padding:18px 14px; height:117px; display:flex; flex-direction:column; align-items:center; cursor:pointer; transition:background .12s; }
.pj-mod:active { background:#faf9f6; }
.pj-mod .pj-ic { width:32px; height:32px; display:flex; align-items:center; justify-content:center; }
.pj-mod .pj-name { font-size: var(--fs-body); font-weight:500; margin-top:8px; line-height:1.2; }
.pj-mod .pj-cnt { font-size: var(--fs-caption); color:#5f5e5a; margin-top:6px; line-height:1.2; }
/* 清单页 */
.pj-rate { display:flex; flex-direction:column; align-items:center; padding:6px 0 2px; }
.pj-rate-num { font-size: var(--fs-display); font-weight:500; color:#008080; line-height:1.1; }
.pj-rate-cap { font-size: var(--fs-caption); color:#888780; margin-top:4px; letter-spacing:.5px; }
/* 清单页顶部仪表盘卡：高度对齐 140px（v1029，与降本增效目标卡等高）
   做法＝收窄内部间距（rate 上内边距 6→4、分隔线上下外边距 8→5，共减 10px），不锁死 height，避免内容溢出
   到上沿间距 15px（v1030，.pj-page padding-top 12 + margin-top 3）；用 `.pj-card.pj-dash` 双类提高特异性，压过媒体查询里的 .pj-card margin-top:10px */
.pj-card.pj-dash { margin-top:3px; }
.pj-dash .pj-rate { padding:4px 0 0; }
.pj-dash .pj-divider { margin:5px 0; }
/* 进度条上的计划位置标记 */
.pj-prog-plan { position:absolute; top:0; width:2px; height:8px; background:#5f5e5a; border-radius:1px; }
/* 状态标签：未开始 */
.pj-tag-not { background:#f1efe8; color:#5f5e5a; }
.pj-listhead { display:flex; align-items:center; gap:10px; margin:18px 0 10px; }
/* 搜索框：内部白底 + 左侧放大镜徽标（v1020）；用 background-color 而非 background 简写，
   否则 focus 规则里的简写会把背景图（放大镜）一并重置掉 */
.pj-search {
  flex:1; min-width:0; height:32px; border:0.5px solid #d3d1c7; border-radius:8px;
  background-color:#fff;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%238a8a86' stroke-width='2' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='M20.5 20.5l-4.2-4.2'/%3E%3C/svg%3E");
  background-repeat:no-repeat;
  background-position:8px center;
  padding:0 10px 0 26px;
  font-size: var(--fs-caption); color:#2c2c2a; font-family:inherit;
}
.pj-search:focus { outline:none; border-color:#185fa5; background-color:#fff; }
.pj-add { height:32px; padding:0 12px; flex:none; border:0.5px solid #008080; background:#fff; color:#008080; border-radius:8px; font-size: var(--fs-caption); cursor:pointer; display:flex; align-items:center; gap:3px; }
.pj-add:active { background:#f0f5fb; }
.pj-list { display:flex; flex-direction:column; gap:13px; padding-bottom:24px; }  /* 卡片纵向间距统一 13px（v1015）：靠 gap 单一控制，卡片不再自带 margin-bottom */
.pj-item { display:flex; align-items:center; gap:10px; padding:14px; background:#fff; border:0.5px solid #d3d1c7; border-radius:14px; cursor:pointer; }
.pj-item:active { background:#faf9f6; }
.pj-item-main { flex:1; min-width:0; }
.pj-item-name { font-size: var(--fs-body); color:#2c2c2a; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.pj-item-meta { font-size: var(--fs-micro); color:#888780; }
.pj-mini { height:4px; border-radius:2px; background:#eceae3; margin-top:13.5px; overflow:hidden; }
/* 列表卡：负责人/截止日期行右侧完成率（13px 加大 20% ≈ 16px），80青；行间距较原 3px 加大 50% */
.pj-item-metaline { display:flex; align-items:center; justify-content:space-between; gap:10px; margin-top:4.5px; }
.pj-item-rate { flex:none; font-size: var(--fs-card-title); font-weight:500; color:#008080; line-height:1; }
.pj-mini > i { display:block; height:100%; border-radius:2px; }
.pj-item-right { display:flex; flex-direction:column; align-items:flex-end; gap:5px; flex:none; }
.pj-empty, .pj-none { padding:24px 0; text-align:center; color:#b4b2a9; font-size: var(--fs-body-2); }
.pj-tag { font-size: var(--fs-micro); padding:3px 8px; border-radius:6px; white-space:nowrap; }
.pj-tag-done { background:#eaf3e4; color:#3b6d11; }
.pj-tag-doing { background:#e6f0fa; color:#185fa5; }
.pj-tag-over { background:#fbe9e9; color:#a32d2d; }
.pj-tag-high { background:#fbe9e9; color:#a32d2d; }
.pj-tag-mid { background:#faeeda; color:#854f0b; }
.pj-tag-low { background:#f1efe8; color:#5f5e5a; }
/* 详情页：状态/重要度/编号标签与编辑按钮——无背景、深灰字 */
.pj-dtags .pj-tag { background: transparent; color: #5f5e5a; border: 0.5px solid #d0d0d0; }
.pj-dtags .pj-edit { background: transparent; color: #5f5e5a; border-color: #d0d0d0; }
.pj-dtags .pj-edit:active { background: #f5f6f7; }
/* 详情页 */
/* 研发项目详情页：淘宝式顶部主图（产品封面）→ 项目名称 → 基本信息卡（v1031） */
.pj-hero { width:100%; aspect-ratio:1/1; margin-top:3px; border-radius:14px; overflow:hidden; display:flex; align-items:center; justify-content:center; background:linear-gradient(135deg,#eef7f7,#dceeee); border:0.5px solid #e3e1da; }
.pj-hero img { display:block; width:100%; height:100%; object-fit:cover; }
.pj-hero-ph { font-size:64px; font-weight:500; color:#008080; opacity:0.28; letter-spacing:4px; }
.pj-dtitle { margin-top:12px; font-size: var(--fs-title-1); font-weight:500; line-height:1.4; color:#2c2c2a; }
.pj-dhead--hero .pj-dtags { margin-top:0; }
/* 研发详情页基本信息卡：去掉卡片外观（无背景、无边框，v1034）；双类名才压得过媒体查询里的 .pj-card
   v1035：左右内边距归零 → 内容与项目名左对齐；负责人行距项目名 = padding-top + 2.5（13px → 10.5，15px → 12.5）
   注：.pj-dtags 是 align-items:center 的 flex（行高 24 由右侧标签撑起），负责人文字盒被压低 2.5px，
       故 padding-top 要减掉这 2.5 才能得到目标行距。**当前值 10.5 → 实测 13.0px（v1038）** */
.pj-card.pj-dhead--hero { background: transparent; border: none; margin-top: 0; padding: 10.5px 0 16px; }
.pj-dhead { padding:16px 14px; }
.pj-dname { font-size: var(--fs-title-1); font-weight:500; line-height:1.4; }
.pj-dtags { display:flex; align-items:center; gap:6px; margin-top:12px; flex-wrap:wrap; }
/* 研发详情页标签行（v1032）：左端负责人文字（无「负责人」label），右端状态/优先级/编号 */
.pj-downer { font-size: var(--fs-body); color:#2c2c2a; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.pj-downer b { font-weight:600; }   /* 负责人姓名加粗（v1033） */
.pj-dtags-r { margin-left:auto; display:flex; align-items:center; gap:6px; flex-wrap:wrap; justify-content:flex-end; }
.pj-edit { margin-left:auto; height:36px; padding:0 12px; border:0.5px solid #008080; background:#fff; color:#008080; border-radius:8px; font-size: var(--fs-caption); cursor:pointer; }
.pj-edit:active { background:#f0f5fb; }
.pj-progline { display:flex; align-items:baseline; justify-content:space-between; }
.pj-prog-num { font-size: var(--fs-display); font-weight:500; color:#008080; line-height:1; }
.pj-prog-cap { font-size: var(--fs-caption); color:#888780; }
.pj-progtr { height:8px; border-radius:4px; background:#eceae3; overflow:hidden; margin-top:10px; }
.pj-progtr > i { display:block; height:100%; border-radius:4px; }
/* 详情页进度条左下角一行：计划进度 · 偏差（v1037；偏差在滞后时单独标红） */
.pj-progsub { margin-top:7px; font-size: var(--fs-caption); line-height:1.45; color:#888780; }
.pj-kv { display:flex; justify-content:space-between; gap:12px; font-size: var(--fs-body); padding:8px 0; border-bottom:0.5px solid #f2f0ea; }
.pj-kv:last-child { border-bottom:none; }
.pj-kv .pj-k { color:#888780; flex:none; }
.pj-kv .pj-v { color:#2c2c2a; text-align:right; }
.pj-sec { margin-top:18px; }
.pj-sec .pj-card { margin-top: 3px; } /* 覆盖 pj-card 全局 margin-top:5px，保证标题-内容间距=3px */
.pj-sec-t { font-size: var(--fs-body); font-weight:500; color:#5f5e5a; margin:0 4px 3px; }
.pj-goal { font-size: var(--fs-body); line-height:1.65; color:#2c2c2a; white-space:pre-wrap; }   /* v1066：正文 13px → 14px */
.pj-sub { display:flex; align-items:center; gap:9px; font-size: var(--fs-body-2); padding:10px 0; border-bottom:0.5px solid #f2f0ea; cursor:pointer; }
.pj-sub:active { background:#faf9f6; border-radius:8px; }
.pj-sub:last-child { border-bottom:none; }
.pj-sub .pj-dot { width:15px; height:15px; border-radius:50%; border:1.5px solid #b4b2a9; flex:none; }
.pj-sub.on .pj-dot { background:#185fa5; border-color:#185fa5; }
.pj-sub.on .pj-sn { color:#b4b2a9; }
.pj-sub .pj-sn { flex:1; min-width:0; white-space:normal; word-break:break-all; line-height:1.45; }
.pj-sub .pj-sm { margin-left:auto; font-size: var(--fs-micro); color:#b4b2a9; flex:none; white-space:nowrap; }
.pj-deliv { font-size: var(--fs-body-2); padding:8px 0; display:flex; gap:8px; border-bottom:0.5px solid #f2f0ea; }
.pj-deliv:last-child { border-bottom:none; }
.pj-deliv i { color:#b4b2a9; font-style:normal; flex:none; }
.pj-log { font-size: var(--fs-caption); color:#5f5e5a; padding:8px 0; display:flex; gap:8px; align-items:baseline; }
.pj-log span { color:#b4b2a9; flex:none; }
.pj-log b { color:#2c2c2a; font-weight:500; }
/* 表单 */
.pj-fld { display:flex; align-items:center; justify-content:space-between; gap:12px; padding:11px 0; }
.pj-fld.pj-col { flex-direction:column; align-items:stretch; }
.pj-fld label { font-size: var(--fs-body-2); color:#42423f; flex:none; } /* v975：小标题再加深 30%（#888780 → #5f5e5a → #42423f） */
.pj-fld > label { margin-bottom:6px; } /* v1057：只作用于直接子级标签，否则会命中框内 .pj-f2 的字段标签（多 6px） */
.pj-col > label { margin-bottom:-6px; } /* 小标题与下方文本框间距统一为 6px（= 父级 gap 12px + 本值 -6px）；不动 gap，避免影响模板区/子任务块其他元素间距
   v1057：改为「仅直接子级」—— 原来 `.pj-col label` 会把 .pj-f2 里的字段标签也一起命中，
   导致框内（#pjCostFld 是 .pj-col）的「基线值 / 改善后值」等标签间距被减到 0px */
/* 表单提示语：在 #838383 基础上再变浅 20%（v975） */
.pj-fld.pj-col > textarea::placeholder, .pj-fld.pj-col > input::placeholder { color:#9c9c9c; }
/* 多行提示语的字段（研发项目「产品规划」）：placeholder 共 4 段 6 行，给足高度完整展示 */
.pj-col > textarea.pj-multi { min-height:131px; }
.pj-fld input, .pj-fld select { font-size: var(--fs-body-2); font-family:inherit; color:#2c2c2a; background:#fff; border:0.5px solid #e3e1da; border-radius:8px; padding:7px 9px; text-align:left; }
.pj-fld input:focus, .pj-fld select:focus, .pj-fld textarea:focus { outline:none; border-color:#185fa5; }
/* 校验失败：点保存但项目名称为空时，输入框转浅红提示（重新输入即恢复） */
.pj-fld textarea.pj-invalid, .pj-fld input.pj-invalid { border-color:#d98b8b !important; background:#fdf5f5 !important; }
/* v1130：负责人（.pj-f2 行内输入框）也要能被标红 —— 它不在 .pj-fld 里，原选择器罩不到 */
.pj-f2 input.pj-invalid { border-color:#d98b8b !important; background:#fdf5f5 !important; }
.pj-col input, .pj-col select { width:100%; }
.pj-col > textarea, .pj-subline1 textarea.pj-subname { min-height:32px; width:100%; display:block; font-size: var(--fs-body-2); font-family:inherit; color:#2c2c2a; background:#fff; border:0.5px solid #e3e1da; border-radius:8px; padding:7px 9px; resize:none; overflow:hidden; line-height:1.45; }
#pjfPlan { min-height:64px; }
.pj-row2 { display:flex; gap:14px; align-items:flex-start; margin-top:14px; }
/* 降本增效表单：信息区与收益测算区各用一个框包起来（v1052 / v1056 负责人~类别也入框） */
.pj-cost-box { border:0.5px solid #e3e1da; border-radius:10px; background:#fcfcfb; padding:14px 12px 12px; margin-top:14px; }
/* v1107：降本表单里的小标题（「基本信息」「收益试算」）—— 与「方案规划」等字段标签同规格 14px / #42423f */
.pj-cost-lb { font-size: var(--fs-body); color:#42423f; line-height:1.3; margin:14px 0 6px; }
.pj-cost-lb + .pj-cost-box { margin-top:0; }          /* 小标题紧跟的框不再自带 14px 上边距，间距＝6px */
/* v1120：收益试算下方两个框（框② 降本对象 → 框③ 收益金额）的间距收到 9px（原 26 = flex gap 12 + 默认 14）
   注意：`.pj-fld` 的 gap 名义 12、实测 11 → 负 margin 按实测值反推（11 - 2 = 9） */
#pjCostMoneyBox { margin-top:-3px; }
/* v1109：小标题与「上方框下沿」的间距统一成 25px（对齐「基本信息」上方：方案规划框底→基本信息 = 25）
   - 收益试算：11（#pjCostFld 的 padding-top）+ 14 = 25
   - 流程模板：11（.pj-fld 的 padding-top）+ 14 = 25（用 label 的 margin-top 顶开，流程模板隐藏时不影响下方） */
.pj-cost-lb--in { margin:14px 0 -6px; }
.pj-form-cost #pjTplFld > label { margin-top:14px; }
.pj-cost-box .pj-row2:first-child { margin-top:0; }   /* v1091：金额框内套了一层 #pjCostMoney，用后代选择器才能命中 */
/* v1095：降本表单信息框（框①）顶部加小标题「基本信息」—— 标题后第一行的间距单独收一下
   （.pj-row2 基础 margin-top 14px，与标题的 margin-bottom 折叠，这里直接给 10px） */
.pj-cost-box .pj-card-title { margin-bottom:0; }
.pj-cost-box .pj-card-title + .pj-row2 { margin-top:10px; }
/* 收益框底部灰色备注（v1062） */
.pj-cost-note { margin-top:10px; font-size: var(--fs-caption); color:#8a8a86; line-height:1.5; }
/* v1106：收益核算完成后的红色圆形印章（盖在卡片右上部）—— .pj-c-stamped 只为建立定位上下文 */
.pj-card.pj-c-stamped { position:relative; }
.pj-cost-stamp { position:absolute; top:7px; right:9px; width:58px; height:58px; border:2px solid #c0392b; border-radius:50%; color:#c0392b; display:flex; align-items:center; justify-content:center; transform:rotate(-12deg); opacity:.9; pointer-events:none; }
.pj-cost-stamp::before { content:''; position:absolute; inset:3px; border:1px solid #c0392b; border-radius:50%; opacity:.55; }
.pj-cost-stamp span { font-size: var(--fs-body); font-weight:600; letter-spacing:1px; }
/* v1104：详情页收益测算卡的核算确认按钮（仅财务 / 超管可见） */
.pj-conf-btn { margin-top:12px; width:100%; height:36px; border:0.5px solid #0b7d7d; border-radius:8px; background:#e6f7f7; color:#0b7d7d; font-size: var(--fs-body-2); font-weight:500; font-family:inherit; cursor:pointer; }
.pj-conf-btn:active { background:#d5efef; }
/* v1104：核算确认弹窗 */
.pj-cf-sub { margin:8px 0 12px; font-size: var(--fs-caption); color:#8a8a86; line-height:1.6; }
.pj-cf-sub b { color:#0b7d7d; font-weight:500; }
.pj-cf-row { display:flex; align-items:center; gap:10px; margin-bottom:9px; }
.pj-cf-row label { flex:0 0 108px; font-size: var(--fs-body-2); color:#42423f; }
.pj-cf-row .modal-input { flex:1; margin:0; }
/* v1098：降本方式（芯片式多选）—— 白底灰边（沿用矩形按钮规范），选中转青 */
/* v1100：固定「一行三个」（flex-basis 均分；grow=0 避免落单项被拉宽，shrink=1 容忍亚像素误差） */
.pj-way-chips { display:flex; flex-wrap:wrap; gap:8px; }
.pj-way-chip { flex:0 1 calc((100% - 16px) / 3); min-width:0; height:32px; padding:0 8px; border:0.5px solid #d0d0d0; border-radius:16px; background:#fff; color:#646a73; font-size: var(--fs-body-2); font-family:inherit; cursor:pointer; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.pj-way-chip.on { border-color:#0b7d7d; background:#e6f7f7; color:#0b7d7d; font-weight:500; }
/* v1100：方式行要与上方「类别」拉开距离 —— 上面那条 `.pj-cost-box .pj-row2:first-child{margin-top:0}`
   会命中 #pjCostWayRow 里的这一行（它是该容器里的第一个子元素，实测间距被压成 0px），
   所以必须用更高优先级显式给值 */
.pj-cost-box .pj-row2.pj-way-row { margin-top:18px; }
/* v1071：类别模板 —— 字段标签后的口径小字、类别说明、详情页收益说明 */
.pj-flb-note { font-size: var(--fs-micro); color:#a9a9a9; margin-left:4px; }
.pj-cost-tip { margin-top:10px; font-size: var(--fs-micro); color:#8a8a86; line-height:1.55; }

/* v1082：降本明细清单（一个提案含多个产品 / 几十个料号） */
.pj-cost-rows { margin-top:14px; }
.pj-cmrow { border:0.5px solid #e3e1da; border-radius:10px; background:#fff; padding:9px 10px 10px; margin-top:8px; }
.pj-cmrow-hd { display:flex; align-items:center; gap:8px; }
.pj-cmrow-hd .no { flex:none; min-width:16px; font-size: var(--fs-micro); color:#8a8a86; }
/* v1083：名称框改成正常的输入框样式（原来只有一条下划线，太矮了）；字号比下面字段略大一档
   v1084：高度按 32px 定（padding 5.5px → 39px − 2×3.5 = 32px） */
.pj-cmrow-hd .nm { flex:1; min-width:0; box-sizing:border-box; border:0.5px solid #e3e1da; border-radius:8px; background:#fcfcfb; padding:5.5px 10px; font-size: var(--fs-body); color:#1f1e1c; }
.pj-cmrow-hd .nm::placeholder { color:#b8b8b8; }
.pj-cmrow-hd .nm:focus { outline:none; border-color:#7fc4c4; background:#fff; }
/* v1086：行内小计占位符已取消（`.sub` 规则删除，不再显示每行金额） */
/* v1087：删除按钮定宽 19px（居中显示 ✕），这样「名称框右边 → 按钮右边」的宽度是固定值，
   下一行才能按 27px（= 按钮 19 + 头部 gap 8）做右缩进，与名称框右边缘对齐 */
.pj-cmrow-hd .del { flex:none; width:19px; height:19px; border:none; background:none; color:#b0aea6; font-size: var(--fs-body-2); line-height:1; padding:0; display:flex; align-items:center; justify-content:center; cursor:pointer; }
/* v1086：字段行左缩进 = 序号宽度(16) + 头部 gap(8) = 24px → 与「对象名称」文本框左对齐
   v1087：右缩进 27px → 与名称框右边缘对齐（两行左右都对齐） */
.pj-cmrow-bd { display:flex; gap:8px; margin-top:8px; margin-left:24px; margin-right:27px; }
.pj-cmrow-bd .cf { flex:1; min-width:0; display:flex; flex-direction:column; gap:4px; }
.pj-cmrow-bd label { font-size: var(--fs-micro); color:#8a8a86; }
.pj-cmrow-bd input { width:100%; box-sizing:border-box; border:0.5px solid #e3e1da; border-radius:7px; background:#fcfcfb; padding:6px 8px; font-size: var(--fs-body-2); color:#1f1e1c; }
.pj-cmrow-bd input:focus { outline:none; border-color:#7fc4c4; }
.pj-cost-rows-act { display:flex; gap:8px; margin-top:10px; }
.pj-cost-mini { flex:1; border:0.5px dashed #d3d1c7; border-radius:8px; background:#fff; color:#185fa5; font-size: var(--fs-caption); padding:9px 10px; cursor:pointer; }
.pj-cost-paste { margin-top:10px; border:0.5px solid #e3e1da; border-radius:10px; background:#fcfcfb; padding:9px 10px; }
.pj-cost-paste summary { font-size: var(--fs-caption); color:#185fa5; cursor:pointer; }
.pj-cost-paste textarea { width:100%; box-sizing:border-box; margin-top:8px; border:0.5px solid #e3e1da; border-radius:8px; padding:8px; font-size: var(--fs-caption); line-height:1.6; color:#1f1e1c; font-family:inherit; }
.pj-cost-paste textarea:focus { outline:none; border-color:#7fc4c4; }
.pj-cost-paste .hint { margin-top:6px; font-size: var(--fs-micro); color:#8a8a86; line-height:1.5; }
/* 详情页明细清单表 + 「N 个对象」小字 */
.pj-c-tbl--sub { margin-top:10px; font-size: var(--fs-caption); }
.pj-c-tbl--sub th, .pj-c-tbl--sub td { padding:6px 4px; }
.pj-c-bigsub { margin-left:7px; font-size: var(--fs-caption); color:#8a8a86; }
.pj-c-desc { font-size: var(--fs-body-2); color:#42423f; line-height:1.65; white-space:pre-wrap; margin-bottom:8px; padding:8px 10px; border-radius:8px; background:#faf9f6; }
.pj-f2 { flex:1; min-width:0; display:flex; flex-direction:column; gap:6px; }
.pj-f2 label { font-size: var(--fs-body-2); color:#42423f; } /* v975：与 .pj-fld label 同步再加深 30% */
.pj-f2 input[type="text"], .pj-f2 select { width:100%; box-sizing:border-box; font-size: var(--fs-body-2); color:#2c2c2a; background:#fff; border:0.5px solid #e3e1da; border-radius:8px; padding:7px 9px; }
.pj-f2 select { -webkit-appearance:none; -moz-appearance:none; appearance:none; background:#fff url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6' fill='none' stroke='%235f5e5a' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'><path d='M1 1 L5 5 L9 1'/></svg>") no-repeat right 10px center / 10px 6px; padding-right:30px; }
.pj-dwrap { position:relative; width:100%; }
.pj-dwrap input { display:block; width:100%; box-sizing:border-box; font-size: var(--fs-body-2); color:#2c2c2a; border:0.5px solid #e3e1da; border-radius:8px; padding:7px 9px; }
/* v977：开始/截止日期取消框内提示语（原 .pj-dhint「开始日期/完成日期」已移除，与 label 重复） */
.pj-fld.pj-subblock { border-top:0.5px solid #d3d2ce; margin-top:30px; padding-top:14px; }
/* v1069：分隔线颜色调浅 20%（#c2c0bb → #cecdc9，各通道向 255 靠拢 20%）；v1070 再调浅 10%（#cecdc9 → #d3d2ce）；
   并把「分隔线↔上方模块」与「分隔线↔＋添加子任务」统一为 30px ——
     上方 = margin-top 30
     下方 = 1px 边框 + padding-top 14 + .pj-fld 的 flex gap 12 + 按钮 margin-top 3 = 30
   改下方那个值要同时动 padding-top（gap 12 是全表单共用变量，不要改它） */
.pj-subrow { margin-top:10px; }
.pj-subline1 { display:flex; align-items:center; gap:6px; }
.pj-subline1 .pj-stri {
  width: 8px; flex: none; margin: 0 1px 0 2px;
  display: inline-flex; align-items: center; justify-content: center;
  font-size: var(--fs-micro); line-height: 1; color: #b4b2a9; user-select: none;
}
.pj-subline1 textarea.pj-subname { flex:1 1 0; min-width:0; width:auto; }
.pj-subline1 .pj-subdel { width:26px; height:26px; flex:none; border:none; background:none; color:#b4b2a9; font-size: var(--fs-content); line-height:1; cursor:pointer; padding:0; }
.pj-subline1 .pj-subdel:active { color:#a32d2d; }
.pj-subline2 { display:flex; gap:6px; margin:6px 32px 0 17px; } /* 左缩进 = 三角(8)+外边距(2+1)+flex gap(6)=17，与名称框左对齐 */
.pj-subline2 .pj-subowner { flex:1 1 0; min-width:0; font-size: var(--fs-body-2); color:#2c2c2a; border:0.5px solid #e3e1da; border-radius:8px; padding:7px 9px; }
.pj-subline2 .pj-sdw { position:relative; flex:none; width:136px; }
.pj-sdw input.pj-sd { display:block; width:100%; box-sizing:border-box; font-size: var(--fs-body-2); color:#2c2c2a; border:0.5px solid #e3e1da; border-radius:8px; padding:7px 9px; }
.pj-sd-hint { position:absolute; left:9px; top:50%; transform:translateY(-50%); color:#b4b2a9; font-size: var(--fs-body-2); pointer-events:none; white-space:nowrap; }
.pj-sdw.filled .pj-sd-hint { display:none; }
.pj-sdw:not(.filled) input::-webkit-datetime-edit, .pj-sdw:not(.filled) input::-webkit-datetime-edit-fields-wrapper,
.pj-sdw:not(.filled) input::-webkit-datetime-edit-text, .pj-sdw:not(.filled) input::-webkit-datetime-edit-month-field,
.pj-sdw:not(.filled) input::-webkit-datetime-edit-day-field, .pj-sdw:not(.filled) input::-webkit-datetime-edit-year-field,
.pj-dwrap:not(.filled) input::-webkit-datetime-edit, .pj-dwrap:not(.filled) input::-webkit-datetime-edit-fields-wrapper,
.pj-dwrap:not(.filled) input::-webkit-datetime-edit-text, .pj-dwrap:not(.filled) input::-webkit-datetime-edit-month-field,
.pj-dwrap:not(.filled) input::-webkit-datetime-edit-day-field, .pj-dwrap:not(.filled) input::-webkit-datetime-edit-year-field {
  color:transparent !important; visibility:hidden !important; opacity:0 !important;
}
.pj-check { width:22px; height:22px; flex:none; border-radius:50%; border:1.5px solid #b4b2a9; background:#fff; color:#fff; display:flex; align-items:center; justify-content:center; font-size:11px; line-height:1; cursor:pointer; padding:0; }
.pj-check.on { background:#185fa5; border-color:#185fa5; }
.pj-subadd { margin-top:3px; width:100%; box-sizing:border-box; border:0.5px dashed #d3d1c7; background:#fff; color:#185fa5; font-size: var(--fs-body-2); border-radius:8px; padding:11px 12px; cursor:pointer; }   /* v1058：加大（原 12px 字 / padding 6px 12px / 只占内容宽）；v1064：margin-top 10→3（与 .pj-subblock 的 padding-top 一起把「分隔线→按钮」缩到 27px） */
.pj-subadd:active { background:#f4f6f8; }
.pj-save { margin-top:18px; width:100%; height:44px; border:none; border-radius:12px; background:#008080; color:#fff; font-size: var(--fs-body); cursor:pointer; }
.pj-save:active { background:#006666; }
.pj-cancel { height:44px; border:0.5px solid #d0d0d0; border-radius:12px; background:#fff; color:#646a73; font-size: var(--fs-body); cursor:pointer; }
.pj-cancel:active { background:#f5f6f7; }
.pj-reset { margin-top:10px; width:100%; height:40px; border:0.5px solid #d3d1c7; border-radius:12px; background:#fff; color:#888780; font-size: var(--fs-body-2); cursor:pointer; margin-bottom:24px; }

/* ===== 任务管理：页面布局与字号对齐问题解决页规范（覆盖） ===== */
.pj-page { padding: 12px 16px 24px; }
.pj-hd { margin: 0 2px 8px; }
.pj-tt { font-size: var(--fs-card-title); font-weight: 600; }
.pj-card { border-radius: 12px; border-color: var(--border,#e5e5e5); margin-top: 10px; }
/* 新建/编辑表单：取消卡片外框，内容扩展到原边框的左右边沿（v973） */
.pj-card.pj-form-card { border:none; background:transparent; border-radius:0; padding:11px 0; }
/* v1113：任务管理「新增/编辑」表单页的顶部留白统一为 34px（对齐设备「新增设备」页）
   构成：.pj-page padding-top 12 + 卡片 margin-top 0 + 卡片 padding-top 11 + 首个 .pj-fld padding-top 11 = 34
   只作用于表单页（.pj-form-page 仅 renderPjForm 加），不影响清单页 / 详情页 / 阶段页 */
.pj-form-page .pj-form-card { margin-top:0; }
.pj-modtitle { font-size: var(--fs-card-title); font-weight: 400; margin: 20px 2px 12px; }
.pj-kpi .pj-num { font-size: var(--fs-title-1); }
.pj-kpi .pj-lbl { font-size: var(--fs-caption); }
.pj-mod .pj-name { font-size: var(--fs-body); font-weight: 600; }
.pj-mod .pj-cnt { font-size: var(--fs-body-2); }
.pj-item-name { font-size: var(--fs-card-title); font-weight: 500; }
.pj-item-meta { font-size: var(--fs-body-2); }
.pj-rate-num { font-size: var(--fs-display); }
.pj-rate-cap { font-size: var(--fs-body-2); }
.pj-dname { font-size: var(--fs-title-2); font-weight: 600; }
.pj-prog-num { font-size: var(--fs-display); }
.pj-prog-cap { font-size: var(--fs-body-2); }
.pj-kv { font-size: var(--fs-body); }
.pj-kv .pj-k { color: #888780; font-size: var(--fs-body-2); }
.pj-sec-t { font-size: var(--fs-body); font-weight: 600; margin-bottom: 3px; }
.pj-goal { font-size: var(--fs-body); line-height: 1.7; }   /* v1066：13px → 14px（此条后写、实际生效；行高实测 1.7 倍） */
.pj-sub { font-size: var(--fs-body); }
.pj-sub .pj-sn { font-size: var(--fs-body); }
.pj-sub .pj-sm { font-size: var(--fs-body-2); }
.pj-deliv { font-size: var(--fs-body); }
.pj-log { font-size: var(--fs-body-2); }
.pj-tag { font-size: var(--fs-caption); padding: 3px 9px; border-radius: 6px; }
.pj-search { height: 34px; font-size: var(--fs-body); border-radius: 8px; }
.pj-add { height: 34px; font-size: var(--fs-body); }
.pj-fld label, .pj-f2 label { font-size: var(--fs-body); }
.pj-fld input, .pj-fld select, .pj-col > textarea, .pj-subline1 textarea.pj-subname,
.pj-f2 input[type="text"], .pj-f2 select, .pj-dwrap input, .pj-sdw input.pj-sd,
.pj-subline2 .pj-subowner { font-size: var(--fs-body-2); border-radius: 8px; padding: 8px 10px; }
/* v1085：表单字段高度统一 34px —— 下拉框与文本框的浏览器默认内容高度不同（15 vs 17px），
   同样 padding 下 select 会比 input 矮 2px、日期框又高 2px，用显式 height 拉平；
   **只作用于单行控件，textarea 不在此列**（要自动增高） */
.pj-fld input:not([type="file"]):not([type="checkbox"]):not([type="radio"]),
.pj-fld select, .pj-f2 input:not([type="file"]):not([type="checkbox"]):not([type="radio"]),
.pj-f2 select, .pj-dwrap input, .pj-sdw input.pj-sd, .pj-subline2 .pj-subowner {
  height: 34px; box-sizing: border-box;
}
/* v1085：项目名称是「单行自动增高」的 textarea（不走上面的 height），
   靠收掉 1.5px 内边距让它的单行高度同样落在 34px（多行时仍自动长高） */
#pjfName { padding: 6.5px 10px; }
.pj-subline2 input::placeholder { color: #a9a9a9; font-size: var(--fs-body-2); }
.pj-sd-hint { font-size: var(--fs-body); }
.pj-save { font-size: var(--fs-card-title); }
.pj-reset { font-size: var(--fs-body); }
.pj-edit { font-size: var(--fs-body-2); }
.pj-empty, .pj-none { font-size: var(--fs-body); }

/* ==================== 4S/8D 独立填写页 ==================== */
.m8d-post { padding: 12px 16px 24px; }
.m8d-type-row { display: flex; gap: 8px; margin-bottom: 12px; }
.m8d-type-btn {
  flex: 1; text-align: center; padding: 10px 0; border-radius: 10px;
  border: 1px solid #d0d0d0; background: #fff; color: #646a73;
  font-size: var(--fs-body); cursor: pointer;
}
.m8d-type-btn.active { border-color: #3370ff; color: #3370ff; font-weight: 600; background: #eef3ff; }
.m8d-post-card { background: #fff; border: 1px solid #e5e5e5; border-radius: 10px; padding: 12px; }
.m8d-post-card label { display: block; font-size: var(--fs-body-2); color: #888; margin-bottom: 8px; }
.m8d-post-hint { margin-top: 10px; text-align: center; font-size: var(--fs-caption); color: #b8b8b8; }

/* 4S/8D 填写页 · D2 问题描述（5W2H）字段 */
.m8d-d2-field { margin-bottom: 10px; }
.m8d-d2-field:last-child { margin-bottom: 0; }
.m8d-d2-label { display: block; font-size: var(--fs-caption); color: #888; margin-bottom: 4px; }
.m8d-d2-input {
  width: 100%; box-sizing: border-box; font-size: var(--fs-body); font-family: inherit;
  color: #1f2329; background: #f7f8fa; border: 1px solid #e3e5e8;
  border-radius: 8px; padding: 9px 10px; outline: none;
}
.m8d-d2-input:focus { border-color: #3370ff; background: #fff; }

/* 新建 8D 分析 · D1~D8 模块分区 */
.m8d-step-card { margin-bottom: 12px; }
.m8d-step-title {
  font-size: var(--fs-body); font-weight: 600; color: #1f2329;
  padding-bottom: 8px; margin-bottom: 10px;
  border-bottom: 1px solid #eef0f2;
}
.m8d-post > .submit-btn { margin-top: 4px; }

/* 4S/8D 步骤表单：同行并排字段组（如 S1 发生时间 + 发生地点） */
.eightd-field-row { display: flex; gap: 8px; }
.eightd-field-row .eightd-field { margin-bottom: 18px; }

/* 问题管理：个人数据下拉（完整四边线框） */
.mg-rank-select {
  width: 96px; height: 30px; padding: 0 6px; font-size: var(--fs-caption);
  border: 1px solid #ddd; border-radius: 6px; background: #fff;
  color: #1d1d1f; box-sizing: border-box; line-height: 28px;
}
/* 问题管理：员工提问/解决数统计（纵向双色柱状图） */
.mg-rank-toggle { display: flex; gap: 4px; }
.mg-rank-chart { display: flex; gap: 12px; overflow-x: auto; padding: 4px 2px 0; }
.mg-rank-col { display: flex; flex-direction: column; align-items: center; flex-shrink: 0; min-width: 40px; }
.mg-rank-bars { display: flex; align-items: flex-end; gap: 4px; height: 136px; }
.mg-rank-bar { display: flex; flex-direction: column; align-items: center; justify-content: flex-end; height: 100%; }
.mg-rank-bar .num { font-size: var(--fs-micro); color: #5f5e5a; margin-bottom: 2px; }
.mg-rank-bar .bar { width: 11px; border-radius: 3px 3px 0 0; background: #008080; }
.mg-rank-bar .bar.lt { background: #8AC6C6; }
.mg-rank-name { font-size: var(--fs-caption); color: #5f5e5a; margin-top: 4px; max-width: 56px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* 问题管理：部门数据展开/收起按钮 */
.mg-dept-toggle {
  display: flex; align-items: center; justify-content: center; gap: 5px;
  width: 100%; margin-top: 10px; padding: 7px 0;
  font-size: var(--fs-caption); color: #646a73; background: #fff;
  border: 1px solid #e3e5e8; border-radius: 8px; cursor: pointer;
}
.mg-dept-toggle svg { transition: transform 0.15s; }

/* 经验案例库 */
.cases-tabs { display: flex; gap: 8px; margin-bottom: 10px; }
.cases-tab {
  flex: 1; padding: 8px 0; font-size: var(--fs-body); color: #646a73;
  background: #fff; border: 0.5px solid #e3e5e8; border-radius: 8px; cursor: pointer;
}
.cases-tab.active { background: #008080; color: #fff; border-color: #008080; font-weight: 500; }
.cases-tools { display: flex; gap: 8px; margin-bottom: 10px; }
.cases-kw {
  flex: 1; height: 30px; padding: 0 10px; font-size: var(--fs-body-2);
  border: 1px solid #ddd; border-radius: 6px; background: #fff; outline: none;
}
.cases-list { min-height: 120px; }
.case-card {
  background: #fff; border: 0.5px solid #ebedf0; border-radius: 10px;
  padding: 12px; margin-bottom: 10px; cursor: pointer;
}
.case-card-head { display: flex; align-items: center; gap: 6px; margin-bottom: 6px; }
.case-type {
  font-size: var(--fs-micro); font-weight: 600; padding: 1px 6px; border-radius: 6px;
  background: #e6f2f2; color: #008080;
}
.case-type.t-8D { background: #e6f2f2; color: #008080; }
.case-type.t-4S { background: #eaf3de; color: #4d7c0f; }
.case-type.t-JDI { background: #e6f1fb; color: #185fa5; }
.case-star { font-size: var(--fs-micro); color: #d97706; }
.case-date { margin-left: auto; font-size: var(--fs-micro); color: #999; }
.case-title { font-size: var(--fs-body); font-weight: 600; color: #1f2329; }
.case-sum { font-size: var(--fs-caption); color: #666; margin-top: 4px; line-height: 1.4; }
.case-meta { font-size: var(--fs-micro); color: #999; margin-top: 6px; }
.detail-case-refs { margin-top: 8px; margin-bottom: 16px; display: flex; flex-wrap: wrap; gap: 6px; }
.case-ref-tag {
  font-size: var(--fs-caption); color: #008080; background: #e6f2f2;
  border-radius: 6px; padding: 3px 8px; cursor: pointer;
}
.refcase-item {
  display: flex; align-items: center; gap: 8px;
  border: 0.5px solid #ebedf0; border-radius: 8px; padding: 10px; margin-bottom: 8px;
}
.refcase-title { font-size: var(--fs-body-2); font-weight: 500; color: #1f2329; }
.refcase-meta { font-size: var(--fs-micro); color: #999; margin-top: 2px; }

/* 8D D1：各步骤负责人 */
.owners-list { display: flex; flex-direction: column; gap: 8px; }
.owner-row { display: flex; align-items: center; gap: 8px; }
.owner-lb { font-size: var(--fs-caption); font-weight: 600; color: #008080; width: 60px; flex-shrink: 0; white-space: nowrap; }

/* 任务卡片：项目目标节选（浅灰虚线框 + 极浅红底）
   v1068 改为「双层」结构：外层只管边框与内边距（上下各 6px，视觉对称），
   内层 .pj-goal-txt 负责 line-clamp + overflow:hidden。
   原因：本机 Chromium 里 -webkit-line-clamp 不生效（display 实测为 flow-root），
   溢出行靠 overflow 裁，而裁剪边界是 padding box —— 单层时下内边距只能为 0，
   否则被裁的下一行会从 padding-bottom 露出「字头」；内层化后裁剪线与末行底边重合，既对称又不漏字。 */
.pj-item-goal {
  font-size: var(--fs-body-2); color:#8a9aa5; margin-top:9px; line-height:1.4;   /* v1067：目标字号 12px → 13px */
  border:1px dashed #e4e2da; background:#fdf5f5;
  border-radius:8px; padding:6px 8px 5px;   /* 下 5 而非 6：末行的行盒半行距比首行多 1.2px，减 1 后上下实测 7.0 / 7.2，视觉对称 */
}
.pj-item-goal .pj-goal-txt {
  display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical;
  overflow:hidden; word-break:break-all;
}

/* 子任务列表：不属于当前用户的子任务名称 70% 灰，用于区分 */
.pj-sub .pj-sn.pj-bold { font-weight: 400; color: #1f2329; }
.pj-sub .pj-sn.pj-dim50 { color: rgba(0,0,0,0.5); }

.pj-sub .pj-dot.pj-dot2 { width:6px; height:6px; margin:0 4px 0 5px; background:#b4b2a9; border:none; flex:none; }
/* 子任务行：层级三角形（实心=有下一级，空心=无；▶收起 ▼展开） */
.pj-sub .pj-tri {
  width: 16px; flex: none; font-size: var(--fs-micro); color: #888780;
  display: inline-flex; align-items: center; justify-content: center;
  cursor: pointer; user-select: none;
}
.pj-sub .pj-tri.none { color: #b9b7ae; cursor: default; }
/* ===== 流程模板：纵向时间线 + 模板结构预览 ===== */
/* 时间线：6 个阶段自上而下排列，左侧圆点+竖线标识状态，点击进入该阶段任务页 */
.pj-tl { display: flex; flex-direction: column; margin-top: 2px; }
.pj-tl-item { display: flex; align-items: flex-start; gap: 10px; padding: 10px 6px 12px 2px; border-radius: 10px; cursor: pointer; }
.pj-tl-item:active { background: #faf9f6; }
.pj-tl-rail { position: relative; flex: none; width: 14px; display: flex; justify-content: center; align-self: stretch; }
.pj-tl-rail::after { content: ''; position: absolute; top: 17px; bottom: -14px; width: 1.5px; background: #e6e4dc; }
.pj-tl-item:last-child .pj-tl-rail::after { display: none; }
.pj-tl-dot { width: 9px; height: 9px; box-sizing: border-box; border-radius: 50%; background: #e3e1da; margin-top: 6px; position: relative; z-index: 1; }
.pj-tl-item.done .pj-tl-dot { background: #7cb342; }
.pj-tl-item.now .pj-tl-dot { background: #008080; box-shadow: 0 0 0 3px rgba(0, 128, 128, .14); }
.pj-tl-body { flex: 1; min-width: 0; }
.pj-tl-head { display: flex; align-items: baseline; gap: 7px; }
.pj-tl-code { flex: none; font-size: var(--fs-caption); font-weight: 600; color: #888780; letter-spacing: .3px; }
.pj-tl-name { flex: 1; min-width: 0; font-size: var(--fs-body); color: #2c2c2a; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pj-tl-pct { flex: none; font-size: var(--fs-body-2); color: #888780; font-variant-numeric: tabular-nums; }
.pj-tl-item.done .pj-tl-code { color: #639922; }
.pj-tl-item.done .pj-tl-name, .pj-tl-item.done .pj-tl-pct { color: #3b6d11; }
.pj-tl-item.now .pj-tl-code, .pj-tl-item.now .pj-tl-name, .pj-tl-item.now .pj-tl-pct { color: #008080; }
.pj-tl-meta { font-size: var(--fs-micro); color: #b4b2a9; margin-top: 3px; }
.pj-tl-bar { height: 3px; border-radius: 2px; background: #eceae3; margin-top: 7px; overflow: hidden; }
.pj-tl-bar > i { display: block; height: 100%; border-radius: 2px; background: #7cb342; }
.pj-tl-item.now .pj-tl-bar > i { background: #008080; }
/* 阶段行右侧的展开三角形：点击在本行内联展开该阶段的步骤（仅一层） */
/* 阶段行右侧「完成率 + 三角形」合并热区：80×40，点击展开/收起该阶段步骤（视觉尺寸不变） */
.pj-tl-expand {
  flex: none; box-sizing: border-box; width: 80px; height: 40px;
  display: flex; align-items: center; justify-content: flex-end; gap: 7px;
  margin: -11px -2px -11px 0; border-radius: 8px; cursor: pointer;
  user-select: none; -webkit-user-select: none;
}
.pj-tl-expand:active { background: #f0eee7; }
.pj-tl-pct { flex: none; font-size: var(--fs-body-2); color: #888780; font-variant-numeric: tabular-nums; }
.pj-tl-caret { flex: none; width: 18px; text-align: center; font-size: var(--fs-micro); line-height: 1; color: #b4b2a9; }
.pj-tl-item.now .pj-tl-caret { color: #008080; }
.pj-tl-item.done .pj-tl-caret { color: #8fbf6a; }
/* 展开的一层步骤列表（步骤本身不再可展开） */
.pj-tl-kids { margin: 8px 0 2px 2px; padding-left: 10px; border-left: 2px solid #f0eee7; }
.pj-tl-kid { display: flex; align-items: baseline; gap: 7px; padding: 7px 2px; cursor: pointer; }
.pj-tl-kid + .pj-tl-kid { border-top: 0.5px solid #f5f3ee; }
.pj-tl-kid:active { background: #faf9f6; }
.pj-tl-kid-code { flex: none; font-size: var(--fs-caption); color: #008080; font-variant-numeric: tabular-nums; }
.pj-tl-kid-n { flex: 1; min-width: 0; font-size: var(--fs-body-2); color: #2c2c2a; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pj-tl-kid-p { flex: none; font-size: var(--fs-caption); color: #b4b2a9; font-variant-numeric: tabular-nums; }
.pj-tl-kid.done .pj-tl-kid-code, .pj-tl-kid.done .pj-tl-kid-n, .pj-tl-kid.done .pj-tl-kid-p { color: #9aa5a8; }
.pj-tpl-sel { width: 100%; }
.pj-tpl-pv { margin-top: 12px; border:0.5px solid #e3e1da; border-radius:10px; padding:11px 12px; background:#fff; } /* v974 加框；v975 加白底 */
/* v1117：流程模板预览框与上方「流程模板」下拉的间距减半（原 flex gap 12 + margin 12 = 24 → 12）
   v1118：再收到 9px（flex gap 12 + margin-top -3 = 9；沿用本表单既有的「负 margin 凑数」写法）
   只作用于流程模板预览 #pjTplPv；框③ 里的收益试算结果 #pjCostPv 保持 12px 不变 */
#pjTplPv { margin-top: -2px; }
.pj-tpl-hd { font-size: var(--fs-body-2); color: #2c2c2a; font-weight: 500; }
.pj-tpl-note { font-size: var(--fs-caption); color: #a9a9a9; margin-top: 4px; line-height: 1.5; }
.pj-tpl-row { font-size: var(--fs-body-2); color: #2c2c2a; margin-top: 10px; }
.pj-tpl-code { display: inline-block; min-width: 26px; margin-right: 6px; font-size: var(--fs-caption); color: #008080; }
.pj-tpl-kids { display: flex; flex-wrap: wrap; gap: 6px 10px; margin-top: 5px; padding-left: 32px; }
.pj-tpl-kid { font-size: var(--fs-caption); color: #888780; }
.pj-tpl-kid b { color: #a9a9a9; font-weight: 400; margin-right: 3px; }
/* 子任务行：层级编号（2.x=二级、3.x=三级、4.x=四级，按绝对层级固定不变） */
.pj-sub .pj-sno {
  flex: none; margin-right: 5px; font-size: var(--fs-caption); color: #008080;
  font-variant-numeric: tabular-nums; letter-spacing: 0.2px;
}
.pj-sub.on .pj-sno { color: #b4b2a9; }
/* 子任务树：原位展开二/三级 */
.pj-sub .pj-caret {
  width: 14px; height: 14px; flex: none; margin-left: -2px;
  display: inline-flex; align-items: center; justify-content: center;
  font-size: var(--fs-micro); color: #888780; cursor: pointer;
  transition: transform 0.15s; user-select: none;
}
.pj-sub .pj-caret.open { transform: rotate(90deg); }
.pj-sub .pj-caret.none { visibility: hidden; cursor: default; }
.pj-sub-children { margin-left: 14px; }

/* 任务状态：待确认 */
.pj-tag-pending { background:#fdf1e0; color:#c77700; }

/* 卡片内小标题（目标设定等） */
.pj-card-title { font-size: var(--fs-body); font-weight: 600; color: #2c2c2a; margin-bottom: 6px; }

/* 任务详情：评论模块 */
.pj-cmt-divider { height: 0.5px; background: #f2f0ea; margin: 12px 0; }
.pj-cmt-inputrow { display: flex; gap: 8px; }
.pj-cmt-input { flex: 1; min-width: 0; height: 34px; border: 0.5px solid #e3e1da; border-radius: 8px; padding: 0 10px; font-size: var(--fs-body-2); background: #fff; outline: none; }
.pj-cmt-send { height: 34px; padding: 0 14px; border: none; border-radius: 8px; background: #008080; color: #fff; font-size: var(--fs-body-2); cursor: pointer; }
.pj-cmt-send:active { background: #006666; }
.pj-cmt-list { margin-top: 4px; }
.pj-cmt { padding: 9px 0; border-bottom: 0.5px solid #f2f0ea; }
.pj-cmt:last-child { border-bottom: none; }
.pj-cmt-head { display: flex; justify-content: space-between; font-size: var(--fs-caption); color: #888780; margin-bottom: 3px; }
.pj-cmt-head b { color: #1f2329; font-weight: 600; }
.pj-cmt-text { font-size: var(--fs-body-2); color: #2c2c2a; line-height: 1.5; white-space: pre-wrap; word-break: break-all; }

/* 进度更新：逐条展示 */
.pj-pg { padding: 7px 0; border-bottom: 0.5px solid #f2f0ea; }
.pj-pg:last-child { border-bottom: none; padding-bottom: 0; }
.pj-pg:first-child { padding-top: 0; }
.pj-pg-head { display: flex; justify-content: space-between; align-items: baseline; font-size: var(--fs-caption); color: #888780; margin-bottom: 3px; }
.pj-pg-head b { color: #008080; font-weight: 600; font-size: var(--fs-body-2); }
.pj-pg-text { font-size: var(--fs-body-2); color: #2c2c2a; line-height: 1.5; white-space: pre-wrap; word-break: break-all; }

/* 上级任务列表中：已完成的任务名统一浅灰（覆盖"我的任务"黑色/50%灰） */
.pj-sub.on .pj-sn,
.pj-sub.on .pj-sn.pj-bold,
.pj-sub.on .pj-sn.pj-dim50 { color: #b4b2a9; }


/* ===== 管理变革（cg-*）与设备管理（eq-*）子系统样式：自 v805 桌面版增量移植 ===== */
.kj-yp-wrap { position: relative; }
.kj-year-pick { display: inline-flex; align-items: center; gap: 3px; cursor: pointer; font-size: var(--fs-body); color: #5f5e5a; background: none; padding: 4px 2px 4px 4px; }
.kj-caret { width: 0; height: 0; border-left: 3.5px solid transparent; border-right: 3.5px solid transparent; border-top: 4px solid #9aa0a6; }
.kj-yp-menu { position: absolute; right: 0; top: 100%; margin-top: 6px; z-index: 60; text-align: left; background: #fff; border: 0.5px solid #d3d1c7; border-radius: 10px; min-width: 104px; padding: 4px; display: none; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
.kj-yp-menu.show { display: block; }
.kj-yp-item { font-size: var(--fs-body); color: #2c2c2a; padding: 8px 10px; border-radius: 7px; cursor: pointer; white-space: nowrap; }
/* 管理变革治理总览的年度选择器独立字号 14px（项目概览仍为 15px） */
.cg-yp .kj-year-pick { font-size: var(--fs-body); padding: 0 2px 0 4px; } /* 治理总览年度选择器：去掉上下内边距，标题行高与纯文字(质量概览)一致 */
.cg-yp .kj-yp-item { font-size: var(--fs-body); }
.kj-yp-item:active { background: #f4f6f8; }
.kj-yp-item.on { color: #185fa5; font-weight: 500; }


/* ================================================================
   管理变革子系统（cg-*，#6366f1 靛蓝治理主题）
   ================================================================ */
.cg-home, .cg-page { padding: 12px 16px 28px; }
.cg-sec-t { font-size: var(--fs-body); font-weight: 500; color: #1f2329; margin: 14px 2px 10px; }
.cg-sec-hd { display: flex; align-items: center; justify-content: space-between; margin-right: 0; }

/* 首页 KPI */
.cg-kpi-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; }
.cg-kpi { background: #fff; border: 0.5px solid #e3e1da; border-radius: 12px; padding: 10px 4px 8px; text-align: center; cursor: pointer; }
.cg-kpi:active { background: #f7f6ff; }
.cg-kpi .cg-kpi-n { font-size: var(--fs-title-1); font-weight: 500; color: #3c3489; line-height: 1.15; }
.cg-kpi.cg-danger .cg-kpi-n { color: #d93026; }
.cg-kpi .cg-kpi-l { font-size: var(--fs-micro); color: #5f5e5a; margin-top: 3px; white-space: nowrap; }
.cg-kpi .cg-kpi-flag { display: inline-block; margin-top: 4px; font-size: var(--fs-micro); color: #8f959e; background: #f1f0f7; border-radius: 8px; padding: 1px 6px; white-space: nowrap; }

/* 通用卡片 / 列表头 / 空态 */
.cg-card { background: #fff; border: 0.5px solid #e3e1da; border-radius: 14px; padding: 14px; margin-bottom: 10px; }
.cg-card-t { font-size: var(--fs-body-2); font-weight: 500; color: #2c2c2a; margin-bottom: 6px; }
.cg-list-hd { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin: 4px 2px 10px; }
.cg-list-t { font-size: var(--fs-body); font-weight: 500; }
.cg-empty { text-align: center; padding: 28px 0; font-size: var(--fs-caption); color: #b4b2a9; }
.cg-tip { font-size: var(--fs-micro); color: #8f959e; line-height: 1.6; margin: 10px 4px; }

/* 待办 */
.cg-todo-row { display: flex; align-items: center; gap: 9px; padding: 9px 0; border-bottom: 0.5px solid #f2f0f7; cursor: pointer; }
.cg-todo-row:last-child { border-bottom: none; }
.cg-todo-row:active { background: #faf9ff; border-radius: 8px; }
.cg-todo-dot { width: 7px; height: 7px; border-radius: 50%; flex: none; }
.cg-todo-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; }
.cg-todo-main b { font-size: var(--fs-body-2); font-weight: 500; color: #2c2c2a; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cg-todo-main span { font-size: var(--fs-micro); color: #8f959e; }
.cg-todo-go { font-size: var(--fs-micro); color: #534ab7; flex: none; }
.cg-todo-note { margin-top: 8px; font-size: var(--fs-micro); color: #8f959e; background: #faf9ff; border-radius: 8px; padding: 8px 10px; }

/* 模块入口网格 */
.cg-mod-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.cg-mod { background: #fff; border: 0.5px solid #e3e1da; border-radius: 14px; padding: 14px 12px; display: flex; flex-direction: column; align-items: center; cursor: pointer; }
.cg-mod:active { background: #faf9ff; }
.cg-mod-ic { width: 38px; height: 38px; border-radius: 11px; display: flex; align-items: center; justify-content: center; }
.cg-mod-nm { font-size: var(--fs-body); font-weight: 500; color: #2c2c2a; margin-top: 8px; }
.cg-mod-cn { font-size: var(--fs-micro); color: #8f959e; margin-top: 3px; text-align: center; line-height: 1.4; }

/* tabs / chips */
.cg-tabs { display: flex; gap: 8px; background: #f1f0f7; border-radius: 10px; padding: 3px; margin-bottom: 12px; }
.cg-tab { flex: 1; text-align: center; font-size: var(--fs-body-2); color: #5f5e5a; padding: 7px 0; border-radius: 8px; cursor: pointer; }
.cg-tab.on { background: #fff; color: #3c3489; font-weight: 500; box-shadow: 0 1px 4px rgba(0,0,0,0.06); }
.cg-chips { display: flex; gap: 7px; flex-wrap: wrap; margin: 4px 0 12px; }
.cg-chip { display: inline-flex; align-items: center; font-size: var(--fs-micro); color: #5f5e5a; background: #f1f0f7; border-radius: 10px; padding: 3px 10px; cursor: pointer; white-space: nowrap; }
.cg-chip.on { background: #3c3489; color: #fff; }
.cg-type { font-size: var(--fs-micro); color: #534ab7; background: #eeedfe; border-radius: 8px; padding: 2px 7px; flex: none; }
.cg-cat-tiles { display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px; }
.cg-cat-tile { border: 1px solid #e3e1da; background: #fff; border-radius: 12px; padding: 12px 14px; cursor: pointer; transition: all .12s; }
.cg-cat-tile.on { border-color: #6366f1; background: #f3f3fd; }
.cg-cat-n { font-size: var(--fs-title-1); font-weight: 700; color: #6366f1; line-height: 1.1; }
.cg-cat-l { font-size: var(--fs-body-2); color: #1f2329; margin-top: 4px; }

/* 组织架构树 */
.cg-root { display: flex; align-items: center; gap: 12px; background: linear-gradient(135deg, #faf9ff, #fff); }
.cg-root-ic { font-size: var(--fs-title-1); }
.cg-root-nm { font-size: var(--fs-body); font-weight: 500; color: #1f2329; }
/* 通讯录（组织架构风格）补充：根节点人数 / 部门行人数 */
.cg-root-sub { font-size: var(--fs-micro); color: #8f959e; margin-top: 2px; }
.cg-dept-cnt { font-size: var(--fs-caption); color: #8f959e; margin-right: 2px; flex: none; }
.cg-tree-body { margin: 2px 0 10px 10px; border-left: 1.5px dashed #d3d1c7; padding-left: 12px; }
/* 嵌套子树（部门内的下级部门） */
.cg-tree-sub { margin: 6px 0 2px 6px; }
.cg-dept-add { position: relative; margin-top: 6px; }
.cg-dept-add::before {
  content: '';
  position: absolute;
  left: -12px;
  top: 16px;
  width: 12px;
  border-top: 1.5px dashed #d3d1c7;
  z-index: 2;
}
.cg-dept { margin-bottom: 8px; }
.cg-dept-hd { display: flex; align-items: center; gap: 10px; background: #fff; border: 0.5px solid #e3e1da; border-radius: 12px; padding: 10px 12px; cursor: pointer; }
/* v1522：展开/点选中的部门用浅青底区分 */
/* v1523：只有最近点选的那个部门高亮 —— 80% 青色底 + 白字 */
.cg-dept-hd.sel { background: rgba(0, 128, 128, 0.8); border-color: transparent; }
.cg-dept-hd.sel .cg-dept-nm { color: #fff; }
.cg-dept-hd.sel .cg-dept-ic { color: #fff; }
.cg-dept-hd.sel .cg-dept-meta { color: rgba(255, 255, 255, .78); }
.cg-dept-hd.sel .cg-dept-ar { color: rgba(255, 255, 255, .9); }
.cg-dept-hd:active { background: #faf9ff; }
.cg-dept-ic { width: 30px; height: 30px; border-radius: 9px; display: flex; align-items: center; justify-content: center; font-size: var(--fs-body); flex: none; }
.cg-dept-main { flex: 1; min-width: 0; }
.cg-dept-nm { font-size: var(--fs-body-2); font-weight: 500; color: #2c2c2a; }
.cg-dept-meta { font-size: var(--fs-micro); color: #8f959e; margin-top: 2px; }
.cg-dept-ar { color: #b4b2a9; font-size: var(--fs-body); transform: rotate(0deg); transition: transform .15s; flex: none; }
.cg-dept-ar.on { transform: rotate(90deg); }
.cg-dept-mems { margin: 6px 0 2px 40px; display: flex; flex-direction: column; gap: 6px; }
.cg-dept-mem { display: flex; align-items: center; gap: 8px; cursor: pointer; }
.cg-dept-mem-main { display: flex; flex-direction: row; align-items: center; line-height: 1.35; }   /* v1543：负责人徽标与姓名同一行，不再换行到下面 */
.cg-dept-mem-main b { font-size: var(--fs-body); font-weight: 500; color: #2c2c2a; }
.cg-dept-nomem { font-size: var(--fs-micro); color: #b4b2a9; padding: 4px 0; }
.cg-ava { width: 40px; height: 40px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; font-size: var(--fs-caption); flex: none; }

/* 组织变更卡 */
.cg-orgc-hd { display: flex; justify-content: space-between; align-items: flex-start; gap: 8px; }
.cg-orgc-t { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.cg-orgc-t b { font-size: var(--fs-body); font-weight: 500; color: #2c2c2a; }
.cg-orgc-meta { font-size: var(--fs-micro); color: #8f959e; margin-top: 7px; }
.cg-orgc-reason { font-size: var(--fs-caption); color: #5f5e5a; background: #faf9ff; border-radius: 8px; padding: 8px 10px; margin-top: 8px; line-height: 1.6; white-space: pre-wrap; }
.cg-orgc-act { display: flex; gap: 8px; margin-top: 12px; justify-content: flex-end; }

/* 按钮体系（白色底 + 主题描边/文字，符合全局约定） */
.cg-btn { display: inline-flex; align-items: center; justify-content: center; gap: 4px; border: 0.5px solid #534ab7; background: #fff; color: #534ab7; border-radius: 8px; padding: 7px 14px; font-size: var(--fs-caption); font-family: inherit; cursor: pointer; }
.cg-btn:active { background: #f3f1ff; }
.cg-btn.sm { padding: 5px 10px; font-size: var(--fs-caption); }
.cg-btn.xs { padding: 3px 8px; font-size: var(--fs-micro); }
.cg-btn.line { border-color: #d0d0d0; color: #646a73; }
.cg-btn.line:active { background: #f7f8fa; }
.cg-btn.ghost { border-color: #d0d0d0; color: #8f959e; background: #fff; }
.cg-btn.block { display: flex; width: 100%; margin-top: 10px; height: 42px; font-size: var(--fs-body); }

/* OKR */
.cg-okr-top { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.cg-scope { font-size: var(--fs-micro); border-radius: 8px; padding: 2px 7px; flex: none; }
.cg-okr-owner { font-size: var(--fs-micro); color: #8f959e; margin-left: auto; }
.cg-okr-o { font-size: var(--fs-body); font-weight: 500; color: #1f2329; margin: 9px 0 8px; line-height: 1.45; display: flex; gap: 6px; align-items: flex-start; }
.cg-okr-krs { background: #faf9ff; border-radius: 10px; padding: 8px 10px; }
.cg-okr-kr { display: flex; align-items: center; gap: 7px; font-size: var(--fs-caption); color: #5f5e5a; padding: 3px 0; }
.cg-okr-kr-dot { width: 5px; height: 5px; border-radius: 50%; background: #7f77dd; flex: none; }
.cg-okr-kr-t { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cg-okr-kr b { font-size: var(--fs-micro); color: #3c3489; flex: none; }
.cg-okr-more { font-size: var(--fs-micro); color: #b4b2a9; padding: 3px 0 0; }
.cg-okr-foot { display: flex; align-items: center; gap: 10px; margin-top: 10px; }
.cg-okr-p { display: flex; flex-direction: column; }
.cg-okr-p b { font-size: var(--fs-title-1); font-weight: 500; color: #3c3489; line-height: 1.1; }
.cg-okr-p span { font-size: var(--fs-micro); color: #8f959e; }
.cg-okr-bar { flex: 1; height: 6px; border-radius: 3px; background: #ecebf5; overflow: hidden; }
.cg-okr-bar i { display: block; height: 100%; border-radius: 3px; }
.cg-okr-period { font-size: var(--fs-micro); color: #8f959e; flex: none; }

/* 详情通用 */
.cg-detail-title { font-size: var(--fs-content); font-weight: 500; color: #1f2329; line-height: 1.45; display: flex; gap: 6px; align-items: flex-start; }
.cg-detail-chips { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-top: 10px; }
.cg-detail-meta { font-size: var(--fs-micro); color: #8f959e; margin-top: 9px; }
.cg-big-p { display: flex; align-items: baseline; gap: 8px; margin-top: 14px; }
.cg-big-p b { font-size: var(--fs-display); font-weight: 500; line-height: 1; }
.cg-big-p span { font-size: var(--fs-caption); color: #8f959e; }
.cg-prog { height: 8px; border-radius: 4px; background: #ecebf5; overflow: hidden; flex: 1; }
.cg-prog i { display: block; height: 100%; border-radius: 4px; }

/* KR 列表 */
.cg-krrow { padding: 11px 0; border-bottom: 0.5px solid #f0eef7; }
.cg-krrow:last-child { border-bottom: none; }
.cg-krrow-hd { display: flex; align-items: center; gap: 7px; }
.cg-kr-no { font-size: var(--fs-micro); color: #534ab7; background: #eeedfe; border-radius: 7px; padding: 1px 6px; flex: none; }
.cg-krrow-t { flex: 1; min-width: 0; font-size: var(--fs-body-2); font-weight: 500; color: #2c2c2a; }
.cg-kr-w { font-size: var(--fs-micro); color: #8f959e; flex: none; }
.cg-krrow-bar { display: flex; align-items: center; gap: 8px; margin-top: 8px; }
.cg-krrow-bar b { font-size: var(--fs-caption); color: #3c3489; flex: none; width: 34px; text-align: right; }
.cg-krrow-act { display: flex; gap: 7px; margin-top: 8px; }
.cg-kradd { margin-top: 10px; }

/* 表单 */
.cg-form-g { margin-bottom: 12px; }
.cg-form-g label { display: block; font-size: var(--fs-caption); color: #646a73; margin-bottom: 5px; }
.cg-form-g input[type="text"], .cg-form-g input[type="date"], .cg-form-g input[type="number"], .cg-form-g select, .cg-form-g textarea { width: 100%; box-sizing: border-box; font-size: var(--fs-body-2); font-family: inherit; color: #2c2c2a; background: #fff; border: 0.5px solid #d3d1c7; border-radius: 9px; padding: 8px 10px; }
.cg-form-g input:focus, .cg-form-g select:focus, .cg-form-g textarea:focus { outline: none; border-color: #7f77dd; }
.cg-form-g select {
  -webkit-appearance: none; -moz-appearance: none; appearance: none;
  border: 1px solid #d3d1c7;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6' fill='none' stroke='%235f5e5a' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'><path d='M1 1 L5 5 L9 1'/></svg>");
  background-repeat: no-repeat;
  background-position: right 12px center;
  background-size: 10px 6px;
  padding-right: 32px;
}
.cg-form-g textarea { resize: none; line-height: 1.55; }
.cg-form-row2 { display: flex; gap: 12px; }
.cg-form-row2 .cg-form-g { flex: 1; min-width: 0; }
.cg-form-tip { font-size: var(--fs-micro); color: #8f959e; margin-top: 10px; text-align: center; }

/* 表单 KR 动态行 */
.cg-kr-form-row { border: 0.5px dashed #d3d1c7; border-radius: 10px; padding: 10px; margin-bottom: 8px; background: #fdfcff; }
.cg-kr-ft { width: 100%; box-sizing: border-box; font-size: var(--fs-body-2); font-family: inherit; color: #2c2c2a; border: none; background: transparent; resize: none; line-height: 1.45; }
.cg-kr-ft:focus { outline: none; }
.cg-kr-form-sub { display: flex; align-items: center; gap: 6px; margin-top: 6px; }
.cg-kr-form-sub span { font-size: var(--fs-micro); color: #8f959e; }
.cg-kr-form-sub input { width: 64px; font-size: var(--fs-caption); font-family: inherit; border: 0.5px solid #d3d1c7; border-radius: 7px; padding: 4px 6px; }
.cg-kr-del { margin-left: auto; font-size: var(--fs-card-title); color: #b4b2a9; cursor: pointer; padding: 0 4px; }
.cg-kr-del:active { color: #d93026; }

/* 制度 */
.cg-pol-code { font-size: var(--fs-micro); color: #534ab7; background: #eeedfe; border-radius: 7px; padding: 1px 6px; flex: none; }
.cg-pol-hd { display: flex; justify-content: space-between; align-items: flex-start; gap: 8px; }
.cg-pol-t { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; }
.cg-pol-t b { font-size: var(--fs-body); font-weight: 500; color: #2c2c2a; line-height: 1.35; }
.cg-pol-meta { font-size: var(--fs-micro); color: #8f959e; margin-top: 8px; }
.cg-sign-prog { display: flex; align-items: center; gap: 9px; margin-top: 9px; }
.cg-sign-bar { flex: 1; height: 5px; border-radius: 3px; background: #ecebf5; overflow: hidden; }
.cg-sign-bar i { display: block; height: 100%; background: #0a8a4d; border-radius: 3px; }
.cg-sign-prog span { font-size: var(--fs-micro); color: #8f959e; flex: none; }
.cg-pol-flag { display: inline-block; margin-top: 8px; font-size: var(--fs-micro); color: #c77700; background: #fff4e0; border-radius: 8px; padding: 2px 8px; }
.cg-body-txt { font-size: var(--fs-body-2); line-height: 1.75; color: #2c2c2a; white-space: normal; }
.cg-sign-cta { display: flex; align-items: center; justify-content: space-between; gap: 10px; background: #fff8ee; border: 0.5px solid #f2e3c4; border-radius: 10px; padding: 10px 12px; margin-bottom: 10px; }
.cg-sign-cta span { font-size: var(--fs-caption); color: #854f0b; line-height: 1.5; }
.cg-sign-ok { font-size: var(--fs-caption); color: #0a8a4d; background: #e4f6ec; border-radius: 10px; padding: 9px 12px; margin-bottom: 10px; }
.cg-sign-list { border-top: 0.5px solid #f0eef7; padding-top: 4px; }
.cg-sign-row { display: flex; align-items: center; gap: 9px; padding: 8px 0; border-bottom: 0.5px solid #f6f5fb; }
.cg-sign-row:last-child { border-bottom: none; }
.cg-sign-main { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.cg-sign-main b { font-size: var(--fs-caption); font-weight: 500; color: #2c2c2a; }
.cg-sign-main span { font-size: var(--fs-micro); color: #8f959e; }
.cg-sign-yes { color: #0a8a4d; font-size: var(--fs-body-2); flex: none; }
.cg-sign-no { color: #d3d1c7; flex: none; }
.cg-pol-ops .cg-ops-row { display: flex; gap: 8px; justify-content: flex-end; }

/* MRC 委员会 */
.cg-mrc-com { background: linear-gradient(160deg, #faf9ff 0%, #fff 60%); }
.cg-mrc-com-hd { display: flex; gap: 11px; align-items: center; }
.cg-mrc-com-ic { width: 42px; height: 42px; border-radius: 12px; display: flex; align-items: center; justify-content: center; flex: none; }
.cg-mrc-com-nm { font-size: var(--fs-card-title); font-weight: 500; color: #1f2329; }
.cg-mrc-com-meta { font-size: var(--fs-micro); color: #8f959e; margin-top: 3px; }
.cg-mrc-com-desc { font-size: var(--fs-caption); color: #5f5e5a; line-height: 1.7; margin-top: 12px; background: #f6f5fb; border-radius: 10px; padding: 10px 12px; }
.cg-mrc-mems { display: flex; flex-wrap: wrap; gap: 9px; }
.cg-mrc-mem { display: flex; align-items: center; gap: 7px; border: 0.5px solid #e6e3f5; border-radius: 10px; padding: 6px 10px 6px 6px; background: #fff; }
.cg-mrc-mem-main { display: flex; flex-direction: column; line-height: 1.3; }
.cg-mrc-mem-main b { font-size: var(--fs-caption); font-weight: 500; color: #2c2c2a; }
.cg-mrc-mem-main span { font-size: var(--fs-micro); color: #8f959e; }
.cg-mt { display: flex; gap: 12px; align-items: center; cursor: pointer; }
.cg-mt:active { background: #faf9ff; }
.cg-mt-date { width: 42px; height: 46px; border-radius: 10px; background: #eeedfe; color: #3c3489; display: flex; flex-direction: column; align-items: center; justify-content: center; flex: none; }
.cg-mt-date b { font-size: var(--fs-content); font-weight: 500; line-height: 1.1; }
.cg-mt-date span { font-size: var(--fs-micro); opacity: .75; }
.cg-mt-main { flex: 1; min-width: 0; }
.cg-mt-t { font-size: var(--fs-body-2); font-weight: 500; color: #2c2c2a; display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.cg-mt-meta { font-size: var(--fs-micro); color: #8f959e; margin-top: 3px; }
.cg-mt-stat { font-size: var(--fs-micro); color: #646a73; margin-top: 5px; }
.cg-go { color: #c9c6e0; font-size: var(--fs-card-title); flex: none; }
.cg-agenda { display: flex; align-items: baseline; gap: 9px; font-size: var(--fs-body-2); color: #2c2c2a; padding: 7px 0; border-bottom: 0.5px solid #f6f5fb; }
.cg-agenda:last-child { border-bottom: none; }
.cg-agenda span { width: 18px; height: 18px; border-radius: 50%; background: #eeedfe; color: #534ab7; font-size: var(--fs-micro); display: inline-flex; align-items: center; justify-content: center; flex: none; transform: translateY(2px); }
.cg-card textarea { width: 100%; box-sizing: border-box; font-size: var(--fs-body-2); font-family: inherit; color: #2c2c2a; background: #fdfcff; border: 0.5px solid #e3e1da; border-radius: 9px; padding: 9px 10px; resize: none; line-height: 1.6; }
.cg-card textarea:focus { outline: none; border-color: #7f77dd; }
.cg-res { padding: 11px 0; border-bottom: 0.5px solid #f0eef7; }
.cg-res:last-child { border-bottom: none; }
.cg-res-hd { display: flex; justify-content: space-between; align-items: flex-start; gap: 8px; }
.cg-res-t { font-size: var(--fs-body-2); font-weight: 500; color: #2c2c2a; line-height: 1.5; }
.cg-res-meta { display: flex; align-items: center; gap: 6px; font-size: var(--fs-micro); color: #8f959e; margin-top: 8px; }
.cg-res-act { display: flex; gap: 7px; margin-top: 9px; }
.cg-resadd { border: 0.5px dashed #d3d1c7; border-radius: 10px; padding: 11px; margin-top: 10px; }
.cg-sel { border: 0.5px solid #d3d1c7; border-radius: 8px; background: #fff; color: #2c2c2a; font-size: var(--fs-caption); font-family: inherit; padding: 6px 9px; outline: none; }
.cg-sel:focus { border-color: #7f77dd; }

/* ================================================================
   物料供应子系统（sp-*，琥珀供应主题 #f59e0b / #b45309）
   ================================================================ */
/* 需求卡 */
/* 采购单卡 / 明细 */
/* 供应商 */
/* 详情 */
/* 采购单明细编辑行 */
/* 按钮 / 表单 */
/* ================================================================
   版式统一层：管理变革 cg-* / 物料供应 sp-* 对齐问题解决(pm/feed/dashboard)
   卡片基底 #fff + 0.5 #ebedf0 + 圆角10 + mb12；统计数字 24/700；
   区块标题 15/500，卡内标题 14/600，正文 13.5-14，说明 12
   ================================================================ */
.cg-card, .sp-card { border: 0.5px solid #ebedf0; border-radius: 10px; margin-bottom: 12px; }
.cg-sec-t, .sp-sec-t { font-size: var(--fs-body); font-weight: 500; color: #1d1d1f; margin: 16px 2px 8px; }
.cg-list-t, .sp-list-t { font-size: var(--fs-body); font-weight: 500; color: #1d1d1f; }
.cg-card-t, .sp-card-t { font-size: var(--fs-body); font-weight: 600; color: #1d1d1f; margin-bottom: 8px; }
.cg-empty, .sp-empty { font-size: var(--fs-body-2); }

/* KPI 统计卡（对照 pm-stat-card：24/700 数字 + 12 标签） */
.cg-kpi, .sp-kpi { border: 0.5px solid #ebedf0; border-radius: 10px; padding: 12px 4px 10px; }
.cg-kpi .cg-kpi-n, .sp-kpi .sp-kpi-n { font-size: var(--fs-title-1-plus); font-weight: 700; color: #1d1d1f; }
.cg-kpi .cg-kpi-l, .sp-kpi .sp-kpi-l { font-size: var(--fs-caption); color: #999; margin-top: 4px; }
.cg-kpi .cg-kpi-flag, .sp-kpi .sp-kpi-f { font-size: var(--fs-micro); color: #888780; background: #f5f5f5; margin-top: 5px; padding: 1px 7px; }

/* 首页"业务模块"入口（对照 dm-module-card：icon 居中、名称 14/600、说明 12） */
.cg-mod-grid, .sp-mod-grid { gap: 12px; }
.cg-mod, .sp-mod { border: 0.5px solid #ebedf0; border-radius: 12px; padding: 18px 12px; }
.cg-mod-ic, .sp-mod-ic { width: 34px; height: 34px; border-radius: 9px; }
.cg-mod-nm, .sp-mod-nm { font-size: var(--fs-body); font-weight: 600; color: #1d1d1f; margin-top: 9px; }
.cg-mod-cn, .sp-mod-cn { font-size: var(--fs-micro); color: #999; margin-top: 4px; }

/* 列表/详情卡内主要文本字号（主 14 / 次 12.5 / 说明 12） */
.cg-orgc-t b, .cg-okr-o, .cg-detail-title, .cg-pol-t b, .cg-mrc-com-nm,
.cg-res-t, .cg-mt-t, .cg-krrow-t, .cg-dept-nm, .cg-root-nm, .sp-detail-title,
.cg-mt-t, .cg-res-t, .cg-krrow-t, .cg-orgc-t b, .cg-pol-t b { font-size: var(--fs-body); font-weight: 500; }
.cg-okr-o, .cg-detail-title, .sp-detail-title { font-weight: 500; line-height: 1.45; }

/* 元信息 / 说明：统一 12px 灰 (#888780/#8f959e) */
.cg-dept-meta, .cg-orgc-meta, .cg-okr-owner, .cg-okr-kr,
.cg-okr-period, .cg-detail-meta, .cg-pol-meta, .cg-sign-prog span, .cg-mrc-com-meta,
.cg-mrc-mem-main span, .cg-mt-meta, .cg-mt-stat, .cg-res-meta, .cg-sign-main span,
.cg-todo-main span, .cg-todo-note, .cg-tip, .sp-dept-meta, .sp-mat-meta, .sp-req-meta,
/* 详情长文本正文（制度正文 / 纪要 / 说明） */
.cg-body-txt { font-size: var(--fs-body); line-height: 1.7; color: #1d1d1f; }
.cg-orgc-reason, .cg-mrc-com-desc, .sp-motto-txt { font-size: var(--fs-body-2); line-height: 1.7; color: #5f5e5a; }

/* 内容/入口/小徽标 */
.cg-chip, .sp-chip { font-size: var(--fs-caption); padding: 3px 11px; }
.cg-tab { font-size: var(--fs-body); padding: 8px 0; }
.cg-tabs, .sp-chips { margin-bottom: 14px; }
.cg-add-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  background: #f5f6f7;
  border: 1px solid #e3e1da;
  border-radius: 12px;
  padding: 10px 16px;
  font-size: var(--fs-body);
  color: #1f2329;
  cursor: pointer;
}
.cg-add-btn:active { background: #f7f6ff; }
.cg-kr-no, .cg-pol-code, .cg-type, .cg-scope { font-size: var(--fs-micro); }
.cg-ava, .sp-ava, .cg-ava { font-size: var(--fs-body-2); }
.cg-sign-row b, .cg-mrc-mem-main b, .cg-res-meta b, .cg-mt-date b { font-size: var(--fs-body-2); font-weight: 500; }

/* 待办行 / 卡片标题行 14px 主文本 */
.cg-todo-main b, .cg-todo-go, .sp-todo-main b, .sp-todo-go { font-size: var(--fs-body-2); }
.cg-sign-cta span, .cg-sign-ok, .cg-req-qty span { font-size: var(--fs-body-2); }

/* 明细网格：与问题解决详情一致的最小行文本 13px */
.cg-agenda { font-size: var(--fs-body); }
.cg-agenda span { width: 20px; height: 20px; font-size: var(--fs-micro); }
.cg-prog, .sp-stock-bar { height: 6px; border-radius: 3px; }
.cg-okr-bar { height: 6px; border-radius: 3px; }

/* 表单：label 12.5 / 输入 13.5（与问题解决 cat-filter/表单体系相近） */
.cg-form-g label, .sp-form-g label { font-size: var(--fs-caption); color: #646a73; }
.cg-form-g input, .cg-form-g select, .cg-form-g textarea,
.cg-sel, .sp-search, .sp-sel { font-size: var(--fs-body-2); }

/* 文件列表搜索栏（对齐 dm-search / kj-d-search 高度 32） */
.cg-list-hd, .sp-list-hd { margin: 6px 2px 12px; }
.cg-btn, .sp-btn { font-size: var(--fs-body-2); padding: 8px 14px; }
.cg-btn.sm, .sp-btn.sm { font-size: var(--fs-caption); padding: 6px 11px; }
.cg-btn.xs, .sp-btn.xs { font-size: var(--fs-caption); padding: 4px 9px; }
.cg-btn.block, .sp-btn.block { height: 44px; font-size: var(--fs-body); }

/* OKR 关键结果行 / 进度数字 */
.cg-big-p b { font-size: var(--fs-display); font-weight: 500; color: #1d1d1f; }
.cg-krrow-bar b { font-size: var(--fs-body-2); color: #1d1d1f; }
.cg-req-qty b { font-size: var(--fs-title-1); font-weight: 700; color: #1d1d1f; }
.cg-root-nm { font-size: var(--fs-card-title); font-weight: 500; }
.cg-detail-chips, .sp-detail-chips { margin-top: 12px; }

/* v687：仪表盘首页顶部留白与问题解决 dashboard 完全一致（实测横幅下 14px 到标题）；左右保留内边距，卡片不贴屏幕边沿 */
.cg-home, .sp-home { padding: 12px 16px 28px; }
.cg-home > .cg-sec-t:first-child, .sp-home > .sp-sec-t:first-child { margin-top: 0; } /* 治理/物料总览：顶部归0，总间距=容器12px，与质量概览一致 */

/* v688：首页竖向节奏匀称——总览 KPI 网格与下方卡片保持 12px 间距（卡片体系一致） */
.cg-home .cg-kpi-grid, .sp-home .sp-kpi-grid { margin-bottom: 12px; }

/* v689：MRC 工作报告卡（首页 3 条 + 历年归档页） */
.cg-card-hd { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 4px; }
.cg-card-hd .cg-card-t { margin-bottom: 0; }
.cg-card-lk { font-size: var(--fs-caption); color: #534ab7; cursor: pointer; flex: none; }
.cg-rptcard .cg-todo-row b { font-size: var(--fs-body); font-weight: 500; color: #1d1d1f; }
.cg-rpt-item-hd { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.cg-rpt-item-t { display: flex; align-items: center; gap: 7px; }
.cg-rpt-item-t b { font-size: var(--fs-body); font-weight: 500; color: #1d1d1f; }
.cg-rpt-item-brief { font-size: var(--fs-caption); color: #8f959e; margin-top: 6px; line-height: 1.5; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cg-rpt-slot { display: flex; flex-direction: column; align-items: flex-start; background: #faf9ff; border-style: dashed; }
.cg-rpt-slot-t { font-size: var(--fs-body); font-weight: 500; color: #5f5e5a; }
.cg-rpt-slot-d { font-size: var(--fs-caption); color: #b4b2a9; margin: 4px 0 10px; }

/* v690：组织架构部门徽标改为扁平线型（深灰描边，无彩色块/emoji）
   v1524：去掉图标底下的浅灰方块（用户要求「取消部门名前图标的背景色」） */
.cg-dept-ic { width: 32px; height: 32px; border-radius: 9px; display: flex; align-items: center; justify-content: center; color: #5f5e5a; flex: none; }
.cg-root-ic { width: 42px; height: 42px; border-radius: 11px; display: flex; align-items: center; justify-content: center; background: #f2f3f5; color: #5f5e5a; flex: none; font-size: 0; }

/* v691：成员头像——统一线型占位（头像点击进入员工信息） */
.cg-ava { width: 40px; height: 40px; border-radius: 50%; background: #f2f3f5; color: #a8adb5; display: flex; align-items: center; justify-content: center; overflow: hidden; flex: none; border: 0.5px solid #e3e5e8; }
.cg-ava img { width: 100%; height: 100%; object-fit: cover; display: block; border-radius: 50%; }
.cg-ava.has-pic { background: #fff; }

/* v692：学习组织（学习小组 / 学习分享活动） */
.cg-lgrp-hd { display: flex; justify-content: space-between; align-items: flex-start; gap: 8px; }
.cg-lgrp-t { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; }
.cg-lgrp-t b { font-size: var(--fs-body); font-weight: 500; color: #1d1d1f; }
.cg-lgrp-act { display: flex; gap: 6px; flex: none; }
.cg-lgrp-meta { font-size: var(--fs-caption); color: #888780; margin-top: 8px; }
.cg-lgrp-theme { font-size: var(--fs-body-2); color: #5f5e5a; background: #faf9ff; border-radius: 8px; padding: 8px 10px; margin-top: 8px; }
.cg-lgrp-prog { display: flex; align-items: center; gap: 9px; margin-top: 10px; }
.cg-lgrp-prog b { font-size: var(--fs-caption); color: #3c3489; width: 34px; text-align: right; flex: none; }
.cg-lses-hd { display: flex; justify-content: space-between; align-items: flex-start; gap: 8px; }
.cg-lses-t { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; }
.cg-lses-t b { font-size: var(--fs-body); font-weight: 500; color: #1d1d1f; }
.cg-lses-meta { font-size: var(--fs-caption); color: #888780; margin-top: 8px; }
.cg-lses-sum { font-size: var(--fs-body-2); color: #5f5e5a; line-height: 1.6; background: #f8f8fb; border-radius: 8px; padding: 8px 10px; margin-top: 8px; white-space: pre-wrap; }
.cg-lses-act { display: flex; gap: 7px; margin-top: 10px; }
.cg-lses.done { background: #fcfcfd; }

/* ==================== 设备管理（TPM）eq-* · 80青 #008080 ==================== */
.eq-page { padding: 16px; }
.eq-page.qc-home-page, .eq-page.eq-home-page { padding: 12px 16px 16px; } /* 质量/设备首页：仅顶部内边距压到12px，与交付总览一致，不影响其它模块 */
.eq-home-page > .eq-sec-hd:first-child { margin-top: 0; margin-bottom: 8px; } /* 设备总览：顶部归0、底部8px，与质量概览一致 */
.eq-page .eq-page { padding: 0; } /* 嵌套页面（点检管理内嵌统计/异常）避免双层内边距变窄 */
.eq-page.eq-page-tight { padding-top: 12px; } /* 点检/保养的「异常」「管理」页：去掉原 section 标题后压顶，离顶部更近 */
.eq-page.mt-page-manage { padding-top: 16px; } /* 保养管理页：与设计页一致，顶部内边距 16px（专属类，不动共享 eq-page-tight） */
.eq-page.am-page-manage { padding-top: 16px; } /* 点检管理页：与保养管理页/设计页一致，顶部内边距 16px（专属类，不动共享 eq-page-tight） */
.eq-top-sep-double { height: 3px; border-top: 0.5px solid #e3e5e8; border-bottom: 0.5px solid #e3e5e8; margin: 13px 2px 8px; } /* 异常TOP5「按设备」与「按保养项」之间：双线分隔；上间距13px=原按保养项标题margin-top 10px×1.3（加大30%） */
.eq-sec-t { font-size: var(--fs-body); font-weight: 500; color: #1d1d1f; margin: 14px 2px 10px; }
.eq-sec-hd { display: flex; align-items: center; justify-content: space-between; margin: 2px 2px 12px; }
.eq-sec-hd .eq-sec-t { margin: 0; }
.eq-todos { display: flex; flex-direction: column; gap: 8px; }
.eq-todo { display: flex; align-items: center; gap: 10px; background: #fff; border: 0.5px solid #e3e1da; border-radius: 12px; padding: 11px 12px; cursor: pointer; }
.eq-todo:active { background: #f7f9fd; }
.eq-todo-ic { width: 32px; height: 32px; border-radius: 9px; display: flex; align-items: center; justify-content: center; flex: none; }
.eq-todo-main { flex: 1; display: flex; flex-direction: column; }
.eq-todo-main b { font-size: var(--fs-body-2); font-weight: 500; color: #1f2329; }
.eq-todo-main span { font-size: var(--fs-micro); color: #8f959e; margin-top: 2px; }
.eq-todo-arrow { color: #b4b2a9; font-size: 16px; flex: none; }
.eq-mods { display: grid; grid-template-columns: repeat(2, 1fr); gap: 8px; margin-top: 16px; }
.eq-mod { display: flex; flex-direction: column; align-items: center; background: var(--card-bg); border-radius: var(--radius); padding: 20px 8px 16px; box-shadow: var(--shadow); cursor: pointer; color: #008080; }
.eq-mod:active { background: #f2f3f5; }
.eq-mod svg { margin: 6px 0 10px; }
.eq-mod span { font-size: var(--fs-body); font-weight: 500; color: var(--text); }
/* 业务模块通栏长方形（图标+文字横向）—— v1420 起仅「设备改进」一项用它 */
.eq-mods .eq-mod-wide { grid-column: 1 / -1; flex-direction: row; align-items: center; justify-content: center; gap: 10px; padding: 14px 8px; }
.eq-mods .eq-mod-wide svg { margin: 0; }
/* 设备改进：通栏基础上高度 +20%（v1420 用户要求；实测 54px → 65px），min-height 保证内容变化时不再缩回 */
.eq-mods .eq-mod-wide.eq-mod-tall { min-height: 65px; }
.eq-stats { display: flex; gap: 6px; margin-bottom: 12px; }
.eq-assets-bar { display: flex; align-items: center; gap: 8px; margin-bottom: 12px; }
.eq-search { flex: 1; min-width: 0; height: 36px; border: 0.5px solid #d3d1c7; border-radius: 8px; background: #f6f8fa; padding: 0 10px; font-size: var(--fs-caption); font-family: inherit; color: #2c2c2a; }
.eq-search:focus { outline: none; border-color: #008080; background-color: #fff; }
/* 搜索框左侧放大镜图标 */
.eq-search {
  padding-left: 30px;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%238f959e' stroke-width='2.2' stroke-linecap='round'><circle cx='11' cy='11' r='7'/><line x1='16.6' y1='16.6' x2='21' y2='21'/></svg>");
  background-repeat: no-repeat;
  background-position: 10px center;
}
.eq-stat { flex: 1; text-align: center; background: #fafafa; border: 1px solid #eee; border-radius: 8px; padding: 10px 2px; cursor: pointer; }
.eq-stat.active { border-color: #008080; background: #e6f2f2; }
.eq-stat-val { font-size: var(--fs-title-2); font-weight: 600; color: #1f2329; font-variant-numeric: tabular-nums; }
.eq-stat.active .eq-stat-val { color: #008080; }
.eq-stat-label { font-size: var(--fs-micro); color: #999; margin-top: 2px; }
.eq-tabs { flex: 1; min-width: 0; display: flex; gap: 8px; overflow-x: auto; }
/* 趋势曲线卡：选项卡嵌在卡片顶部，与曲线融合（参考问题总览风格） */
.eq-trend-wrap { border-radius: 10px; overflow: hidden; border: 0.5px solid rgba(0,0,0,0.15); background: #fff; }
.eq-trend-tabs { display: flex; }
.eq-trend-tab { flex: 1; text-align: center; padding: 11px 0 5px; font-size: var(--fs-body-2); color: #9a9aa0; cursor: pointer; }
.eq-trend-tab.on { color: #008080; font-weight: 500; }
.eq-trend-tab i { font-style: normal; position: relative; display: inline-block; }
/* 选中指示条：宽度贴合文字（左右各外扩 3px），紧贴文字下方 4px */
.eq-trend-tab.on i::after { content: ''; position: absolute; left: -3px; right: -3px; bottom: -4px; height: 2px; border-radius: 2px; background: #008080; }
.eq-trend-body { padding: 8px 8px 4px; }
.eq-trend-body svg { display: block; }
/* 「设备管理 KPI」数据表（v1402 起；v1404 起随选中指标切换，行标签用真实名称：
   故障率＝故障停机时长·计划运行时长·故障率；MTBF＝累计运行时长·故障次数·MTBF；
   MTTR＝累计维修时长·故障次数·MTTR；OEE＝可用率·性能率·合格率·OEE） */
.eq-kpi-tb { margin-top: 10px; border: 0.5px solid rgba(0,0,0,0.12); border-radius: 10px; background: #fff; overflow: hidden; }
.eq-kpi-tb table { width: 100%; border-collapse: collapse; table-layout: fixed; }
.eq-kpi-tb thead th:first-child { width: 80px; }   /* 首列（指标名 / 行名称）收窄，余下 8 周等分 */
.eq-kpi-tb th, .eq-kpi-tb td { padding: 6px 1px; text-align: center; font-size: var(--fs-micro); border-bottom: 0.5px solid #f0f1f3; }
.eq-kpi-tb thead th { color: #8f959e; font-weight: 400; background: #fafbfc; font-size: var(--fs-micro); line-height: 1.3; padding: 4px 1px; }
.eq-kpi-tb thead th:first-child, .eq-kpi-tb tbody th { text-align: left; padding-left: 8px; }
.eq-kpi-tb tbody th { color: #1d1d1f; font-weight: 500; background: #fff; font-size: var(--fs-micro); }
.eq-kpi-tb tbody td { color: #1d1d1f; font-weight: 500; }
.eq-kpi-tb .eq-kpi-prev { display: block; font-size: var(--fs-micro); color: #b4b2a9; font-weight: 400; line-height: 1.35; }
.eq-kpi-tb .eq-kpi-none { color: #c9c7bf; font-weight: 400; }
.eq-kpi-tb tbody tr:last-child th, .eq-kpi-tb tbody tr:last-child td { border-bottom: none; }
/* 「结果」行稍作强调（背景浅灰 + 加粗）—— v1404 */
.eq-kpi-tb tbody tr.eq-kpi-res th, .eq-kpi-tb tbody tr.eq-kpi-res td { background: #fafbfc; font-weight: 600; }
.eq-kpi-note { font-size: var(--fs-micro); color: #8f959e; line-height: 1.75; margin: 8px 4px 0; }
.eq-kpi-note b { color: #5f5e5a; font-weight: 500; }
.eq-tab { flex: none; font-size: var(--fs-caption); color: #646a73; background: #fff; border: 0.5px solid #e3e1da; border-radius: 16px; padding: 5px 13px; cursor: pointer; }
.eq-tab.on { background: #008080; border-color: #008080; color: #fff; font-weight: 500; }
.eq-card { background: #fff; border: 0.5px solid #e3e1da; border-radius: 12px; padding: 12px; margin-bottom: 8px; cursor: pointer; }
.eq-card.late { border-color: #f09595; }
.eq-form-card { background: transparent; border: none; border-radius: 0; padding: 0; margin-bottom: 0; cursor: default; box-shadow: none; }
.eq-card-hd { display: flex; align-items: center; gap: 6px; }
.eq-code { font-size: var(--fs-micro); color: #b4b2a9; margin-left: auto; font-variant-numeric: tabular-nums; }
.eq-card-nm { font-size: var(--fs-body); font-weight: 500; color: #1f2329; margin-top: 7px; display: flex; align-items: baseline; gap: 6px; flex-wrap: wrap; }
.eq-model { font-size: var(--fs-micro); color: #8f959e; font-weight: 400; }
.eq-card-meta { font-size: var(--fs-caption); color: #8f959e; margin-top: 4px; line-height: 1.5; }
/* 故障报修卡片字号放大（v1341）：仅故障报修模块生效，不影响点检/保养等共用 .eq-card 的模块 */
.eq-fr-card .eq-card-nm { font-size: var(--fs-card-title); }
.eq-fr-card .eq-card-meta { font-size: var(--fs-body-2); }
.eq-fr-card .eq-code { font-size: var(--fs-body-2); }
/* 故障报修卡片三行行距迭代：原 7/4 → v1342 +30% → 9.1/5.2 → v1344 再 +30% → 11.8/6.8 → v1345 +20% → 14.2/8.2（累计 ≈ 原值 +103%） */
.eq-fr-card .eq-card-nm { margin-top: 14.2px; }
.eq-fr-card .eq-card-meta { margin-top: 8.2px; }
/* 故障报修卡片高度：v1343 +20% → padding 纵向 22px；v1346 -10% → 15.6px
   （当前内容 ≈84px + 上下 44px ≈ 128px，减 10%≈13px → 上下各减 6.4px；横向恒为 12px 保持文本行宽） */
.eq-fr-card { padding: 15.6px 12px; }
/* 维修详情「关联问题」链接行（整行可点，模块内文字统一青色） */
.eq-fr-prob-card { display: block; line-height: 1.7; font-size: var(--fs-body-2); color: #008080; cursor: pointer; }
.eq-fr-prob-card .eq-link { font-size: var(--fs-body-2); color: #008080; }
.eq-fr-prob-card:active { opacity: .6; }
.eq-card .eq-card-oee { width: fit-content; font-size: var(--fs-micro); color: #008080; margin-top: 6px; background: #e6f2f2; border-radius: 8px; padding: 2px 8px; }
.eq-desc { font-size: var(--fs-caption); color: #5f5e5a; line-height: 1.6; background: #f7f8fa; border-radius: 8px; padding: 8px 10px; margin-top: 8px; }
/* 故障卡故障描述专属：去灰底、字号 16px（不改共用 .eq-desc，避免影响维修方案/配件/验收等灰框） */
.eq-desc.eq-desc-fr { background: none; border-radius: 0; padding: 0; font-size: var(--fs-card-title); }
.eq-compare { display: flex; gap: 8px; margin-top: 8px; }
.eq-compare span { flex: 1; font-size: var(--fs-micro); line-height: 1.5; border-radius: 8px; padding: 7px 9px; background: #f7f8fa; color: #5f5e5a; }
.eq-compare span:last-child { background: #e4f6ec; color: #0a8a4d; }
.eq-steps { display: flex; gap: 5px; margin-top: 10px; }
.eq-steps i { flex: 1; height: 4px; border-radius: 2px; background: #e8e8ee; }
.eq-steps i.on { background: #008080; }
.eq-empty { font-size: var(--fs-caption); color: #b4b2a9; text-align: center; padding: 18px 0; }
.eq-actions { display: flex; gap: 8px; margin-top: 12px; }
.eq-btn { display: inline-flex; align-items: center; justify-content: center; gap: 5px; background: #008080; color: #fff; border: none; border-radius: 10px; padding: 10px 16px; font-size: var(--fs-body-2); cursor: pointer; }
.eq-btn[disabled] { opacity: 0.45; cursor: not-allowed; }
.eq-btn:active { opacity: 0.85; }
.eq-btn.ghost { background: #fff; color: #008080; border: 0.5px solid #b8d8d8; }
.eq-btn.danger { background: #fff; color: #a32d2d; border: 0.5px solid #f09595; }
.eq-btn.block { display: flex; width: 100%; margin-top: 10px; }
.eq-btn.sm { padding: 6px 12px; font-size: var(--fs-caption); border-radius: 8px; flex: none; }
.eq-assets-bar .eq-btn.sm { height: 36px; }
/* 备件管理搜索行（v1423）：行内「＋新增备件」与设备台账「＋新增设备」同格式 —— 同为 36px 高 */
.eq-spare-bar .eq-btn.sm { height: 36px; }
.eq-btn.disabled { opacity: 0.45; pointer-events: none; }
.eq-btn.locked { background: #f2f3f5; color: #b0b4ba; border: 0.5px solid #e2e4e8; cursor: not-allowed; }
/* 无操作权限的按钮：置灰 + disabled，保持灰底清晰（不叠加 [disabled] 的 45% 透明）—— v1401 */
.eq-btn.locked[disabled] { opacity: 1; }
.eq-form-actions { display: flex; gap: 10px; margin-top: 16px; }
.eq-form-actions .eq-btn { margin-top: 0; flex: 1; }
/* 故障维修详情：页面级操作按钮行（上下各 10px；避免与下方「关联问题」框贴住） */
.eq-fr-actrow { display: flex; gap: 8px; margin: 10px 0; }
.eq-fr-actrow .eq-btn { margin-top: 0; }
.eq-form-row2 { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
/* 更换配件行：v1356 名框 65% → v1357 再加宽 15%（相对值）→ 74.75% : 25.25% */
.eq-fr-part-row { grid-template-columns: 1.48fr 0.5fr; }
.eq-fr-part-qty { text-align: center; }
.eq-fr-part-pick input { font-size: var(--fs-body-2); }
/* 备件新建表单（v1426）：窄框缩到一半（原 1fr→0.5fr，即行宽 50%→25%），左框相应加宽 → 75% : 25% */
.eq-spare-row-wide { grid-template-columns: 3fr 1fr; }
/* 备件新建表单（v1427）：①占位提示统一标准浅灰 #b8b8b8；②价格框改为「直接输入」—— 去掉数字框右侧上下箭头 */
.eq-spare-form input::placeholder { color: #b8b8b8; }
.eq-spare-form .eq-spare-num::-webkit-outer-spin-button,
.eq-spare-form .eq-spare-num::-webkit-inner-spin-button { -webkit-appearance: none; appearance: none; margin: 0; }
.eq-spare-form .eq-spare-num { -moz-appearance: textfield; appearance: textfield; }
.eq-form-g { margin-bottom: 12px; }
.eq-warranty-state { display: inline-block; margin-top: 6px; font-size: var(--fs-caption); color: #8a8a8a; }
.eq-warranty-state.ok { color: #1a9c5b; font-weight: 500; }
.eq-warranty-state.over { color: #e34d4d; font-weight: 500; }
.eq-warranty-state[hidden] { display: none; }
.eq-warranty-box { display: flex; align-items: center; border: 1px solid #d3d1c7; border-radius: 9px; background: #fff; height: 40px; padding: 0 10px; box-sizing: border-box; }
.eq-warranty-box:focus-within { border-color: #008080; }
.eq-warranty-date { flex: 2 1 0; min-width: 0; width: auto; border: none !important; border-radius: 0 !important; padding: 0 2px !important; background: transparent !important; height: 100%; font-size: var(--fs-body-2); color: #1f2329; box-shadow: none; }
.eq-warranty-sep { flex: none; width: 1px; height: 18px; background: #c4c2b8; margin: 0 8px; }
.eq-warranty-status { flex: 1 1 0; text-align: center; font-size: var(--fs-caption); font-weight: 500; color: #0a8a4d; white-space: nowrap; }
.eq-warranty-status.over { color: #d4380d; }
.eq-warranty-status.empty { color: #b8b8b8; }
.eq-form-g label { display: block; font-size: var(--fs-caption); color: #646a73; margin-bottom: 5px; }
/* 设备模块卡片内小标题（原先无样式，v1351 补齐；口径对齐 .cg-card-t/.sp-card-t） */
.eq-card-t { font-size: var(--fs-body); font-weight: 600; color: #1d1d1f; margin-bottom: 8px; }
/* 故障处理小标题：与下方「故障原因」行间距加大 2 倍（8px → 16px） */
.eq-fr-card-t { margin-bottom: 16px; }
.eq-form-g input, .eq-form-g select, .eq-form-g textarea {
  width: 100%; box-sizing: border-box; font-size: var(--fs-body-2); color: #1f2329;
  border: 1px solid #d3d1c7; border-radius: 9px; padding: 9px 10px; background: #fff;
  appearance: none; -webkit-appearance: none; font-family: inherit;
}
.eq-form-g select { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%238f959e' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 10px center; padding-right: 30px; }
.eq-form-g input:focus, .eq-form-g select:focus, .eq-form-g textarea:focus { outline: none; border-color: #008080; }
.eq-form-g textarea { resize: vertical; line-height: 1.6; }
/* ===== 自适应文本框（ta-auto，项目标准件）=====
   规范：琴书所有「需要手动输入文字」的文本框统一使用此类
   行为：内容超出时自动撑高、隐藏右侧滚动条；超过 max-height 后转为滚动
   用法：<textarea class="ta-auto" oninput="app.eqGrow(this)"></textarea>
   回显：renderEquipmentContent() 末尾已统一补算高度，无需各处自处理 */
textarea.ta-auto,
textarea.eq-grow { overflow-y: hidden; resize: none; min-height: 54px; max-height: 240px; }
textarea.ta-auto::placeholder,
textarea.eq-grow::placeholder { color: #b8b8b8; }
/* 更换配件行输入框（普通 input，非 ta-auto）占位符与项目规范统一 #b8b8b8 */
.eq-fr-part-row input::placeholder { color: #b8b8b8; }
/* 设备资料表单（eq-form-card 专属）：标签居左、输入控件居右同一行 */
.eq-form-card .eq-form-g { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; }
.eq-form-card .eq-form-g > label { flex: none; width: 64px; margin-bottom: 0; }
.eq-form-card .eq-form-g > input, .eq-form-card .eq-form-g > select, .eq-form-card .eq-form-g > .eq-warranty-box { flex: 1; min-width: 0; }
/* --- 自主点检 V2 --- */
.eq-am-tools { display: flex; gap: 8px; margin-bottom: 12px; }
.eq-tabs { display: flex; gap: 6px; margin-bottom: 12px; border-bottom: 1px solid #e3e1da; padding-bottom: 8px; }
.eq-tab { flex: 1; text-align: center; font-size: var(--fs-body-2); color: #646a73; padding: 6px 2px; border-radius: 8px; cursor: pointer; white-space: nowrap; }
.eq-tab.on { background: #e6f2f2; color: #008080; font-weight: 600; }
.eq-ins-main { display: flex; flex-direction: column; flex: 1; min-width: 0; }
.eq-ins-meta { font-size: var(--fs-micro); color: #8f959e; line-height: 1.5; }
.eq-ins-val { display: flex; align-items: center; gap: 6px; flex: none; }
.eq-val-input { width: 76px; border: 1px solid #d3d1c7; border-radius: 8px; padding: 6px 8px; font-size: var(--fs-body-2); text-align: center; font-family: inherit; }
.eq-val-input.good { border-color: #0a8a4d; background: #f2fbf6; }
.eq-val-input.bad { border-color: #a32d2d; background: #fdf3f3; }
.eq-val-input:focus { outline: none; border-color: #008080; }
.eq-ins-val i { font-style: normal; font-size: var(--fs-micro); color: #646a73; }
.eq-ins-val em { font-style: normal; font-size: var(--fs-micro); color: #8f959e; }
.eq-ib-ro { font-size: var(--fs-caption); color: #1f2329; }
.eq-ib-ro.bad { color: #a32d2d; }
.eq-ib-ro-ic { font-style: normal; font-size: var(--fs-body); color: #0a8a4d; }
.eq-ib-ro-ic.bad { color: #a32d2d; }
.eq-team-row { display: flex; align-items: center; gap: 8px; padding: 8px 2px; border-top: 1px solid #f0f0f0; cursor: pointer; }
.eq-tr-nm { flex: 1; min-width: 0; font-size: var(--fs-body-2); color: #1f2329; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.eq-tr-sub { flex: none; font-size: var(--fs-micro); color: #8f959e; }
.eq-plan-acts { display: flex; gap: 8px; margin-top: 8px; }
.eq-sheet-actions { display: flex; align-items: center; gap: 8px; margin: 10px 0; }
.eq-sh-copy { max-width: 180px; height: 34px; border: 1px solid #d3d1c7; border-radius: 8px; font-size: var(--fs-caption); background: #fff; color: #1f2329; }
.eq-sh-item { border: 1px solid #eee; border-radius: 9px; padding: 8px; margin-bottom: 8px; background: #fafbfb; }
/* 点检表只读查看（无编辑权限账号）：结构同编辑页，但为纯文本展示 */
.eq-sh-item.ro { background: #fff; }
.eq-sh-ro-name { font-size: var(--fs-body-2); color: #1f2329; line-height: 1.5; }
.eq-sh-ro-meta { margin-top: 4px; font-size: var(--fs-caption); color: #8f959e; line-height: 1.55; }
.eq-sh-ro-basis { margin-top: 4px; font-size: var(--fs-caption); color: #646a73; line-height: 1.55; }
.eq-form-g .eq-ro-val { padding: 3px 0; font-size: var(--fs-body-2); }
.eq-sh-row { display: flex; gap: 6px; margin-bottom: 6px; }
.eq-sh-row:last-child { margin-bottom: 0; }
.eq-sh-row input, .eq-sh-row select { flex: 1; min-width: 0; height: 34px; border: 1px solid #d3d1c7; border-radius: 8px; padding: 0 8px; font-size: var(--fs-caption); font-family: inherit; background: #fff; color: #1f2329; box-sizing: border-box; }
.eq-sh-row input:focus, .eq-sh-row select:focus { outline: none; border-color: #008080; }
.eq-sh-del { flex: none; width: 52px; height: 34px; border: 1px solid #d0d0d0; border-radius: 8px; background: #fff; color: #646a73; font-size: var(--fs-caption); cursor: pointer; }
.eq-sh-del-wide { width: 104px; }
/* v1285：保养计划的日期表（首期保养 / 保养日期 / 额外保养计划） */
.eq-mt-dates .eq-sh-row { align-items: center; }
.eq-mt-dates .eq-sh-row input[type="date"] { flex: 1; min-width: 0; }
.eq-mt-dates .eq-btn.sm { margin: 6px 6px 0 0; }
/* v1287：首期保养行尾的次数说明（1次/季度或年度 …） */
.eq-mt-dates .eq-sh-note { flex: none; font-size: var(--fs-micro); color: #8f959e; white-space: nowrap; }
/* v1288：后续保养 >6 个时折叠（display:none 的行仍在 DOM，capture 不丢数据） */
.eq-mt-dates .eq-sh-row.eq-date-fold { display: none; }
/* v1294：自定义保养的“+添加自定义保养日期”按钮 — 白底灰边灰字（项目标准矩形按钮） */
.eq-mt-dates .eq-btn.sub { background: #fff; color: #646a73; border: 1px solid #d0d0d0; }
/* v1295：后续保养无日期时，占位提示与「后续保养」标签水平对齐、与日期行左对齐 */
.eq-mt-dates .eq-empty { text-align: left; padding: 0; line-height: 34px; }
.eq-dates-toggle { display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 22px; margin: 4px 0 0; cursor: pointer; color: #008080; }
.eq-dates-toggle .chev { width: 9px; height: 9px; border-right: 2px solid currentColor; border-bottom: 2px solid currentColor; transform: rotate(45deg); margin-top: 2px; }
.eq-dates-toggle .chev + .chev { margin-top: -5px; }
.eq-dates-toggle.open .chev { transform: rotate(225deg); }
.eq-dates-toggle:active { opacity: .6; }
/* v1286：日期表分组 —— 左侧标签固定与「第一行日期」对齐，不随行数纵向居中 */
.eq-form-card .eq-form-g.eq-fg-top { align-items: flex-start; }
.eq-form-card .eq-form-g.eq-fg-top > label { line-height: 34px; }
.eq-sh-row input.eq-sh-invalid, .eq-sh-row textarea.eq-sh-invalid { border-color: #d98b8b !important; background: #fdf5f5 !important; }
.eq-link { color: #008080; cursor: pointer; }
.eq-wd-grid { display: flex; flex-wrap: wrap; gap: 6px; }
.eq-wd { display: inline-flex; align-items: center; gap: 4px; border: 1px solid #d0d0d0; border-radius: 8px; padding: 5px 10px; font-size: var(--fs-caption); color: #646a73; background: #fff; cursor: pointer; }
.eq-wd.on { border-color: #008080; color: #008080; background: #e6f2f2; }
.eq-mode-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.eq-mode-card { border: 1px solid #d0d0d0; border-radius: 10px; padding: 10px 12px; cursor: pointer; background: #fff; }
.eq-mode-card b { display: block; font-size: var(--fs-body-2); color: #1f2329; }
.eq-mode-card span { font-size: var(--fs-micro); color: #8f959e; }
.eq-mode-card.on { border-color: #008080; background: #e6f2f2; }
.eq-mode-card.on b { color: #008080; }
.eq-inline { display: inline-flex; align-items: center; gap: 6px; font-size: var(--fs-caption); color: #646a73; flex: none; }
/* --- 自主点检 P2：异常闭环 / 真实性 / 统计 --- */
.eq-start-box { border: 1px dashed #b7b5ab; border-radius: 10px; padding: 10px; margin: 8px 0; background: #fbfbf7; }
.eq-start-row { display: flex; gap: 8px; }
.eq-start-row input { flex: 1; min-width: 0; height: 38px; border: 1px solid #d3d1c7; border-radius: 9px; padding: 0 10px; font-size: var(--fs-body-2); font-family: inherit; box-sizing: border-box; background: #fff; color: #1f2329; }
.eq-start-row input:focus { outline: none; border-color: #008080; }
/* 扫码输入组：左端扫码分段（仿淘宝搜索框左端扫码） */
.eq-scan-box { flex: 1; min-width: 0; display: flex; align-items: stretch; height: 38px; border: 1px solid #d3d1c7; border-radius: 9px; background: #fff; overflow: hidden; box-sizing: border-box; }
.eq-scan-box:focus-within { border-color: #008080; }
.eq-scan-box > input { flex: 1; min-width: 0; height: 100%; border: none; border-radius: 0; padding: 0 10px; font-size: var(--fs-body-2); font-family: inherit; box-sizing: border-box; background: transparent; color: #1f2329; }
.eq-scan-box > input:focus { outline: none; border: none; }
.eq-scan-seg { flex: none; width: 40px; display: flex; align-items: center; justify-content: center; background: #f5f5f3; border: none; border-right: 1px solid #e6e4dc; color: #008080; cursor: pointer; padding: 0; }
.eq-scan-seg:active { background: #eaeae6; }
.eq-scan-seg svg { pointer-events: none; }
/* 扫码浮层 */
.eq-scan-mask { position: fixed; inset: 0; background: rgba(0,0,0,.86); z-index: 3000; display: flex; flex-direction: column; align-items: center; justify-content: center; }
.eq-scan-video-wrap { position: relative; width: 78vw; max-width: 340px; aspect-ratio: 1 / 1; border-radius: 14px; overflow: hidden; background: #000; }
.eq-scan-video-wrap video { width: 100%; height: 100%; object-fit: cover; display: block; }
.eq-scan-frame { position: absolute; inset: 12%; border: 2px solid rgba(255,255,255,.85); border-radius: 10px; box-shadow: 0 0 0 9999px rgba(0,0,0,.28); }
.eq-scan-frame::after { content: ''; position: absolute; left: 6%; right: 6%; top: 50%; height: 2px; background: #33d6c0; box-shadow: 0 0 8px #33d6c0; animation: eqScanLine 2.2s ease-in-out infinite; }
@keyframes eqScanLine { 0%,100% { top: 12%; } 50% { top: 88%; } }
.eq-scan-tip { margin-top: 18px; color: #fff; font-size: var(--fs-body-2); opacity: .9; text-align: center; padding: 0 24px; line-height: 1.6; }
.eq-scan-close { margin-top: 22px; padding: 8px 26px; border-radius: 20px; border: 1px solid rgba(255,255,255,.5); background: transparent; color: #fff; font-size: var(--fs-body); font-family: inherit; cursor: pointer; }
.eq-scan-close:active { background: rgba(255,255,255,.15); }
.eq-abn-overdue { border-color: #e8b4b4; }
.eq-rank-row { display: flex; align-items: center; gap: 8px; padding: 7px 2px; border-top: 1px solid #f0f0f0; font-size: var(--fs-caption); }
.eq-rank-nm { width: 64px; flex: none; color: #1f2329; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.eq-rank-bar { flex: 1; height: 8px; background: #eef0f2; border-radius: 4px; overflow: hidden; }
.eq-rank-bar i { display: block; height: 100%; background: #008080; border-radius: 4px; }
.eq-rank-val { flex: none; max-width: 46%; text-align: right; color: #646a73; font-size: var(--fs-micro); }
.eq-rv-btns { display: flex; gap: 4px; flex: none; }
.eq-top-list { font-size: var(--fs-caption); }
.eq-top-row { display: flex; justify-content: space-between; align-items: center; padding: 6px 2px; border-top: 1px solid #f0f0f0; gap: 8px; }
.eq-top-row b.n { color: #a32d2d; flex: none; font-size: var(--fs-caption); }
.eq-form-tip { font-size: var(--fs-micro); color: #8f959e; line-height: 1.6; margin: 10px 4px; }
.eq-sec-title { font-size: var(--fs-body); font-weight: 600; color: var(--text); margin: 18px 2px 8px; }
.eq-file-row { display: flex; align-items: center; gap: 10px; padding: 9px 2px; border-bottom: 1px solid #f0f0f0; }
.eq-file-label { width: 84px; flex: none; font-size: var(--fs-body-2); color: #5f5e5a; }
.eq-file-pick { font-size: var(--fs-caption); color: #008080; cursor: pointer; padding: 4px 10px; border: 1px solid #c4d4d4; border-radius: 8px; background: #f2fafa; flex: none; }
.eq-file-pick:hover { background: #eaf0ff; }
.eq-file-name { flex: 1; min-width: 0; font-size: var(--fs-caption); color: #333; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.eq-file-dl { font-size: var(--fs-caption); color: #008080; text-decoration: none; flex: none; }
.eq-file-dl[hidden] { display: none; }
.eq-file-del { font-size: var(--fs-caption); color: #e34d4d; border: 1px solid #f0d5d5; background: #fff; border-radius: 8px; padding: 3px 8px; cursor: pointer; flex: none; }
.eq-file-del[hidden] { display: none; }
.eq-history { display: flex; flex-direction: column; gap: 10px; margin-top: 4px; }
.eq-hist-row { display: flex; gap: 10px; align-items: flex-start; }
.eq-hist-tag { flex: none; align-self: flex-start; font-size: var(--fs-micro); color: #5f5e5a; background: #f2f1ee; border-radius: 6px; padding: 3px 8px; white-space: nowrap; }
.eq-hist-tag.warn { color: #a32d2d; background: #fcebeb; }

/* ==================== 任务进展附件（更新进展上传的文件） ==================== */
.pj-atc-hd { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.pj-atc-add { font-size: var(--fs-caption); color: #008080; background: #fff; border: 1px solid #d0d0d0; border-radius: 8px; padding: 4px 10px; cursor: pointer; flex: none; }
.pj-atc-row { display: flex; align-items: center; gap: 8px; padding: 9px 0; border-bottom: 1px solid #f0f0f0; }
.pj-atc-row:last-child { border-bottom: none; }
.pj-atc-ext { flex: none; font-size: var(--fs-micro); color: #5f5e5a; background: #f1efe8; border-radius: 5px; padding: 2px 5px; letter-spacing: .5px; }
.pj-atc-nm { flex: 1; min-width: 0; font-size: var(--fs-body-2); color: #333; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; text-decoration: none; }
.pj-atc-meta { flex: none; font-size: var(--fs-micro); color: #9c9c9c; }
.pj-atc-dl { flex: none; font-size: var(--fs-caption); color: #008080; text-decoration: none; }
.pj-atc-del { flex: none; font-size: var(--fs-caption); color: #e34d4d; background: #fff; border: 1px solid #f0d5d5; border-radius: 8px; padding: 3px 8px; cursor: pointer; }
.pj-atc-tip { font-size: var(--fs-micro); color: #9c9c9c; margin-top: 6px; line-height: 1.5; }

/* ==================== 降本增效：收益看板 / 清单 / 详情 ==================== */
.pj-c-goal { background: #e6f7f7; border: 0.5px solid #b9dcdc; border-radius: 12px; padding: 14px 16px; cursor: pointer; }
.pj-c-goal .l1 { font-size: var(--fs-body); color: #2b6b6b; }
.pj-c-goal .l2 { font-size: var(--fs-display); font-weight: 500; margin-top: 2px; letter-spacing: 0.3px; color: #1f1e1c; }
.pj-c-goal .l2 small { font-size: var(--fs-body); font-weight: 400; color: #5f5e5a; margin-left: 4px; }
.pj-c-goal .bar { height: 7px; background: #fff; border-radius: 4px; margin-top: 9px; overflow: hidden; }
.pj-c-goal .bar i { display: block; height: 7px; background: #008080; border-radius: 4px; }
.pj-c-goal .l3 { font-size: var(--fs-body-2); color: #2b6b6b; margin-top: 7px; }
/* 年度降增目标：环形进度（方案 A，v1022）—— 环在左、金额在右 */
/* v1024：环加大 10%（92.4 → 101.6）并往外扩，收窄内边距让卡片保持原高 */
/* v1028：整个组件（环 + 卡片框 + 内边距 + 间距 + 全部字号）等比放大 10% —— 卡片 122 → 134px */
.pj-c-goal--ring { display: flex; align-items: center; gap: 15.4px; padding: 13.1px 13.2px; margin-top: 3px; }   /* 内边距 13.1 → 卡片高 140px（v1029）；margin-top 3 → 到上沿 15px（v1030，与仪表盘一致） */
.pj-c-ring { position: relative; width: 111.8px; height: 111.8px; flex: none; }
.pj-c-ring svg { display: block; width: 111.8px; height: 111.8px; }
.pj-c-ringtx { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; }
.pj-c-ringtx b { font-size: var(--fs-title-2); font-weight: 500; color: #1f1e1c; line-height: 1.15; }
.pj-c-ringtx span { font-size: var(--fs-caption); color: #2b6b6b; margin-top: 1.1px; }
.pj-c-goalinfo { flex: 1; min-width: 0; }
.pj-c-goal--ring .l1 { font-size: var(--fs-body); }
.pj-c-goal--ring .l2 { font-size: var(--fs-title-1-plus); margin-top: 3.3px; }
.pj-c-goal--ring .l2 small { font-size: var(--fs-body); }
.pj-c-goal--ring .l3 { font-size: var(--fs-body-2); margin-top: 6.6px; }
.pj-c-goal--ring .l4 { font-size: var(--fs-body-2); color: #2b6b6b; margin-top: 4.4px; }   /* 降本：X 万，增效：Y 万（v1025） */
.pj-c-goal--static { cursor: default; }   /* 年度降增目标页里的卡只展示，不可点（v1026） */
/* 年度降增目标页：目标设定（v1026 起单输入；v1136 按类别分设 + 汇总总目标；v1138 改为「一年一年」折叠列表） */
.pj-tgt-years { margin-top: 4px; }
.pj-ty { border-top: 0.5px solid #eceae3; }
.pj-ty:first-child { border-top: 0; }
.pj-ty-hd { display: flex; align-items: center; gap: 8px; padding: 12px 0; cursor: pointer; }
.pj-ty-hd .y { flex: 1; min-width: 0; font-size: var(--fs-body); color: #2c2c2a; }
.pj-ty-hd .sum { flex: none; font-size: var(--fs-body-2); font-weight: 500; color: #008080; }
.pj-ty-hd .sum.mute { font-weight: 400; color: #a8a8a3; }
.pj-ty-caret { flex: none; width: 0; height: 0; border-left: 4.5px solid transparent; border-right: 4.5px solid transparent; border-top: 5px solid #b0b0aa; transition: transform .18s; }
.pj-ty.on .pj-ty-caret { transform: rotate(180deg); }
.pj-ty-bd { display: none; }
.pj-ty.on .pj-ty-bd { display: block; padding-bottom: 12px; }
.pj-ty-bd .pj-tgt-cats { margin-top: 0; }
.pj-tgt-cats { margin-top: 10px; }
.pj-tgt-line { display: flex; align-items: center; gap: 8px; margin-top: 8px; }
.pj-tgt-line:first-child { margin-top: 0; }
.pj-tgt-line .nm { flex: none; width: 72px; font-size: var(--fs-body-2); color: #5f5e5a; }
.pj-tgt-line input { flex: 1; min-width: 0; height: 34px; border: 0.5px solid #d3d1c7; border-radius: 8px; background: #fff; padding: 0 10px; font-size: var(--fs-body); color: #2c2c2a; font-family: inherit; }
.pj-tgt-line input:focus { outline: none; border-color: #185fa5; }
.pj-tgt-line .u { flex: none; font-size: var(--fs-caption); color: #8a8a86; }
.pj-tgt-total { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; margin-top: 12px; padding-top: 10px; border-top: 0.5px solid #eceae3; font-size: var(--fs-caption); color: #8a8a86; }
.pj-tgt-total b { font-size: var(--fs-title-1); font-weight: 500; color: #008080; }
.pj-tgt-total em { font-style: normal; font-size: var(--fs-caption); color: #8a8a86; margin-left: 1px; }
.pj-tgt-act { margin-top: 12px; }
.pj-tgt-act .pj-add { width: 100%; height: 34px; justify-content: center; }
.pj-c-row { display: flex; align-items: center; gap: 9px; margin-bottom: 11.7px; cursor: pointer; }
.pj-c-row:last-child { margin-bottom: 0; }
.pj-c-row .nm { font-size: var(--fs-caption); color: #5f5e5a; width: 78px; flex: none; }
.pj-c-row .tr { flex: 1; height: 10.4px; background: #f2f0ea; border-radius: 5.2px; overflow: hidden; }
.pj-c-row .tr i { display: block; height: 10.4px; background: #008080; border-radius: 5.2px; opacity: 0.85; }
.pj-c-row .vl { font-size: var(--fs-caption); color: #5f5e5a; width: 56px; text-align: right; flex: none; }
.pj-c-two { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-top: 10px; }
.pj-c-blk { background: #fff; border: 0.5px solid #e3e1da; border-radius: 12px; padding: 16px 14px; cursor: pointer; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; }
.pj-c-blk:nth-child(2) { background: #fbfdfd; border-color: #b9dcdc; }
.pj-c-blk .t { font-size: var(--fs-content); font-weight: 500; color: #1f1e1c; letter-spacing: 0.5px; text-align: center; }  /* 标题居方块中线 */
.pj-c-blk .v { font-size: var(--fs-title-1-plus); font-weight: 500; color: #008080; line-height: 1.25; margin-top: 4px; }
.pj-c-blk .v small { font-size: var(--fs-body); font-weight: 400; color: #5f5e5a; margin-left: 2px; }
.pj-c-blk .s { font-size: var(--fs-body-2); color: #8a8a86; margin-top: 5px; line-height: 1.5; }
.pj-c-rank { display: flex; align-items: center; gap: 10px; padding: 8px 0; border-bottom: 0.5px solid #f2f0ea; font-size: var(--fs-caption); }
.pj-c-rank:last-child { border-bottom: none; padding-bottom: 0; }
.pj-c-rank .nm { flex: 1; min-width: 0; color: #1f1e1c; }
.pj-c-rank .vl { font-weight: 500; }
.pj-c-rank .rt { font-size: var(--fs-micro); color: #8a8a86; width: 78px; text-align: right; }
/* .pj-c-todo（我的待办）已于 v1013 随看板该区块一并移除 */
.pj-c-tabs { display: flex; flex-wrap: wrap; gap: 6px; margin: 2px 0 8px; }
.pj-c-tabs span { font-size: var(--fs-caption); color: #5f5e5a; border: 0.5px solid #e3e1da; border-radius: 20px; padding: 3px 11px; background: #fff; cursor: pointer; }
.pj-c-tabs span.on { color: #fff; background: #008080; border-color: #008080; }
.pj-c-flt { display: flex; justify-content: flex-start; align-items: center; gap: 16px; font-size: var(--fs-caption); color: #8a8a86; margin-bottom: 9px; }
.pj-c-flt > span:last-child { margin-left: auto; }
.pj-c-chip { font-size: var(--fs-caption); color: #008080; background: #e6f7f7; border: 0.5px solid #b9dcdc; border-radius: 20px; padding: 2px 10px; cursor: pointer; white-space: nowrap; }
.pj-c-flt select { font-size: var(--fs-caption); color: #5f5e5a; border: 0.5px solid #e3e1da; border-radius: 6px; background: #fff; padding: 3px 6px; font-family: inherit; }
.pj-c-card { background: #fff; border: 0.5px solid #e3e1da; border-radius: 12px; padding: 12px 13px; cursor: pointer; }  /* 间距交给容器 .pj-list 的 gap（原 margin-bottom:9px 会与 gap 叠加成 19px，v1015 去掉） */
.pj-c-card .r1 { display: flex; align-items: baseline; gap: 8px; }
.pj-c-card .r1 .n { flex: 1; min-width: 0; font-size: var(--fs-body); font-weight: 500; color: #1f1e1c; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
.pj-c-card .r2 { display: flex; align-items: center; gap: 7px; margin: 13px 0 12px; font-size: var(--fs-micro); color: #8a8a86; }  /* 上间距 13px（名字→状态标签） */
.pj-c-card .pbar { height: 5px; background: #f2f0ea; border-radius: 3px; overflow: hidden; }
.pj-c-card .pbar i { display: block; height: 5px; background: #008080; border-radius: 3px; }
.pj-c-card .r3 { display: flex; justify-content: space-between; font-size: var(--fs-caption); color: #8a8a86; margin-top: 9px; }  /* 行间距 +50%：6→9 */
.pj-c-card .pj-c-tag { font-size: var(--fs-caption); }  /* 卡片内状态标签（含降本/增效小标） */
/* 提案卡（淘宝列表式，v1040）：左侧金额块，右侧标题 / 目标节选 / 摘要（v1128 起左侧不再有金币图案） */
.pj-c-card--row { display: flex; gap: 11px; align-items: stretch; }
.pj-c-card--row .pj-c-thumb { width: 88px; flex: none; border-radius: 10px; background: linear-gradient(135deg,#fcfefe,#f5fafa); display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 5px; padding: 8px 4px; }   /* 底色调浅 80%（原 #eef8f8→#cfe7e7，v1046） */
.pj-c-card--row .pj-c-coin { width: 56px; height: auto; display: block; flex: none; }   /* v1128：金币图案已不再渲染，规则保留以便随时恢复 */
.pj-c-card--row .pj-c-thumb .amt { font-size: var(--fs-title-2); font-weight: 500; color: #0b7d7d; line-height: 1.2; text-align: center; }   /* 金额数字 13→18px（v1047） */
.pj-c-card--row .pj-c-thumb .amt small { font-size: var(--fs-card-title); font-weight: 400; margin-left: 1px; }   /* 「万」11→16px（v1047） */
.pj-c-card--row .pj-c-body { flex: 1; min-width: 0; }
.pj-c-card--row .pj-c-body .n { font-size: var(--fs-body); font-weight: 500; color: #1f1e1c; line-height: 1.35; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
/* v1128：提案卡里补「目标设定」节选，复用 `任务卡片项目目标节选` 那套虚线框（.pj-item-goal，双层截断见上文注释）
   口径对齐战略卡（.pj-mod-strategy）：margin-top 10px + 3 行截断 */
.pj-c-card--row .pj-c-body .pj-item-goal { margin-top: 10px; }
.pj-c-card--row .pj-c-body .pj-item-goal .pj-goal-txt { -webkit-line-clamp: 3; }
/* v1134：与战略项目卡对齐 —— 战略的「负责人·截止」行是 .pj-item-meta 13px、行上方间距 10px
   （见 .pj-mod-strategy .pj-item-metaline），这里把提案卡的同类行调成同口径：
   字号 11.5 → 13px、目标虚线框到本行 8 → 10px
   v1135：本行 → 进度条的间距 9 → 5px（对齐战略卡 `.pj-mod-strategy .pj-mini{margin-top:5px}`） */
.pj-c-card--row .pj-c-body .r2 { margin: 10px 0 5px; font-size: var(--fs-body-2); }
/* v1133：截止日期从原来的 .r3 挪进 .r2 —— 与「降本类别 · 负责人」同一行、靠右对齐（编号已去掉，.r3 不再渲染）
   .pj-c-meta 自带 flex:1，所以截止只要 flex:none 就会被推到行尾；字号随 .r2（v1134 起 13px） */
.pj-c-card--row .pj-c-body .r2 .pj-c-due { flex: none; white-space: nowrap; }
.pj-c-v { color: #008080; font-weight: 500; font-size: var(--fs-body); flex: none; }
.pj-c-est { color: #5f5e5a; font-weight: 400; font-size: var(--fs-caption); flex: none; }
.pj-c-big { font-size: var(--fs-title-1-plus); font-weight: 500; color: #008080; letter-spacing: 0.5px; margin-top: 2px; }
.pj-c-big small { font-size: var(--fs-caption); font-weight: 400; color: #5f5e5a; margin-left: 4px; }
.pj-c-cf { font-size: var(--fs-micro); color: #8a8a86; margin-top: 4px; }
.pj-c-tbl { width: 100%; border-collapse: collapse; }
.pj-c-tbl th, .pj-c-tbl td { text-align: left; font-size: var(--fs-caption); padding: 7px 6px; border-bottom: 0.5px solid #f2f0ea; }
.pj-c-tbl th { font-size: var(--fs-micro); font-weight: 400; color: #8a8a86; }
.pj-c-tbl td.num { text-align: right; font-variant-numeric: tabular-nums; }
.pj-c-tbl tr:last-child td { border-bottom: none; }
.pj-c-roi { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-top: 10px; }
.pj-c-roi > div { background: #fbfbf9; border: 0.5px solid #e3e1da; border-radius: 10px; padding: 9px 11px; }
.pj-c-roi .l { font-size: var(--fs-micro); color: #8a8a86; }
.pj-c-roi .v { font-size: var(--fs-card-title); font-weight: 500; color: #1f1e1c; }
.pj-c-tag { display: inline-block; font-size: var(--fs-micro); border-radius: 20px; padding: 1px 8px; letter-spacing: 0.2px; }
.pj-c-st-draft { color: #8a8a86; background: #f4f3ef; }
.pj-c-st-review, .pj-c-st-doing { color: #185fa5; background: #e6f1fb; border: 0.5px solid #b5d4f4; }
.pj-c-st-verify { color: #854f0b; background: #faeeda; border: 0.5px solid #efc98a; }
.pj-c-st-fixed { color: #0f6e56; background: #e6f7f7; border: 0.5px solid #b9dcdc; }
.pj-c-st-closed { color: #5f5e5a; background: #f1efe8; }
.pj-c-st-rejected { color: #a32d2d; background: #fcebeb; border: 0.5px solid #f7c1c1; }

/* 收益看板：搜索 + 新增工具条与清单（类型 / 状态 / 排序筛选已于 v1014 取消） */
.pj-c-lh { margin: 17px 0 8px; }   /* 上间距 17px（年度降增目标卡 → 搜索行，v1016） */
.pj-c-card .r2 .pj-c-meta { flex: 1; min-width: 0; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
/* ===== 研发项目：方格（淘宝式）项目卡片 —— 仅 pj_list 的 rd 模块使用 ===== */
.pj-list.pj-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; padding-bottom: 24px; align-items: stretch; }
.pj-pcard { display: flex; flex-direction: column; background: #fff; border: 0.5px solid #d3d1c7; border-radius: 14px; overflow: hidden; cursor: pointer; }
.pj-pcard:active { background: #faf9f6; }
.pj-pcard-img { position: relative; width: 100%; aspect-ratio: 1 / 1; display: flex; align-items: center; justify-content: center; overflow: hidden; background: #eef7f7; }
.pj-pcard-img img { width: 100%; height: 100%; object-fit: cover; display: block; }
.pj-pcard-ph { font-size: var(--fs-display); font-weight: 500; letter-spacing: 2px; color: #008080; opacity: 0.28; }
.pj-pcard-body { padding: 9px 10px 0; }
.pj-pcard-n { font-size: var(--fs-body); line-height: 1.35; color: #2c2c2a; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.pj-pcard-goal { margin-top: 4px; font-size: var(--fs-micro); line-height: 1.45; color: #888780; min-height: 2.9em; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.pj-pcard-foot { padding: 0 10px 11px; margin-top: auto; }
.pj-pcard .pj-mini { margin-top: 9px; }
.pj-pcard-metaline { display: flex; align-items: center; justify-content: space-between; gap: 6px; margin-top: 6px; font-size: var(--fs-micro); color: #888780; }
.pj-pcard-meta { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pj-pcard-rate { flex: none; font-size: var(--fs-body); font-weight: 500; color: #008080; line-height: 1; }
/* 战略项目卡片：仅本模块生效的间距与目标框规格（日常任务等其它模块不受影响） */
.pj-mod-strategy .pj-item-metaline { margin-top: 10px; }    /* 目标摘要框 → 负责人/截止行 */
.pj-mod-strategy .pj-mini { margin-top: 5px; }              /* 负责人/截止行 → 进度条 */
/* 战略项目：目标框最多 3 行，超出在第 3 行末以省略号收尾
   注意：① 只靠 -webkit-line-clamp，不要再加 max-height —— 两者高度基准不同，
   像素取整会让 max-height 比「3 行 + 内边距」少 1~2px，导致第 3 行显示不全
   ② v1068 起 clamp 挂在**内层** .pj-goal-txt 上（外层只留边框+内边距），
   所以这里要把行数写到内层，否则不生效 */
.pj-mod-strategy .pj-item-goal { margin-top: 10px; }
.pj-mod-strategy .pj-item-goal .pj-goal-txt { -webkit-line-clamp: 3; }
/* 表单里的「产品封面」 */
.pj-cover-row { display: flex; align-items: flex-start; gap: 12px; margin-top: 4px; }
.pj-cover-pv { width: 84px; height: 84px; flex: none; border-radius: 10px; border: 0.5px solid #e3e1da; background: #f7f7f4; display: flex; align-items: center; justify-content: center; overflow: hidden; }
.pj-cover-pv img { width: 100%; height: 100%; object-fit: cover; display: block; }
.pj-cover-pv span { font-size: var(--fs-micro); color: #b4b2a9; }
.pj-cover-btns { display: flex; flex-direction: column; gap: 7px; padding-top: 2px; }
.pj-cover-btn { font-size: var(--fs-caption); color: #646a73; background: #fff; border: 0.5px solid #d0d0d0; border-radius: 8px; padding: 6px 14px; cursor: pointer; font-family: inherit; align-self: flex-start; }
.pj-cover-tip { font-size: var(--fs-micro); color: #9c9c9c; line-height: 1.4; }
.eq-hist-tag.good { color: #0a8a4d; background: #e4f6ec; }
.eq-hist-tag.move { color: #008080; background: #e6f2f2; }
.eq-hist-main { flex: 1; min-width: 0; }
.eq-hist-hd { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; }
.eq-hist-hd b { font-size: var(--fs-body-2); color: #1d1d1f; font-weight: 600; }
.eq-hist-date { font-size: var(--fs-micro); color: #9a9a93; flex: none; }
.eq-hist-detail { font-size: var(--fs-caption); color: #5f5e5a; margin-top: 3px; line-height: 1.5; }
.eq-hist-src { font-size: var(--fs-micro); color: #b0b0a8; margin-top: 3px; }
/* 设备资料只读详情页 */
.eq-det-sec { background: #fff; border: 0.5px solid #e3e1da; border-radius: 12px; padding: 12px; margin-bottom: 8px; }
.eq-det-sec > .eq-sec-title:first-child { margin-top: 0; }
.eq-ro-row { display: flex; align-items: baseline; justify-content: space-between; gap: 18px; padding: 10px 2px; border-bottom: 0.5px solid #f0eee8; min-width: 0; }
.eq-ro-label { flex: none; font-size: var(--fs-body-2); color: #646a73; }
.eq-ro-val { flex: 1; text-align: left; font-size: var(--fs-body); color: #1f2329; line-height: 1.5; word-break: break-word; }
.eq-ro-val.sec { color: #b4b2a9; }
.eq-ro-tip { font-size: var(--fs-caption); color: #8f959e; text-align: center; padding: 14px 0 4px; }
.eq-edit-btn { display: inline-flex; align-items: center; gap: 4px; height: 30px; padding: 0 14px; border: 1px solid #008080; color: #008080; background: #fff; border-radius: 8px; font-size: var(--fs-body-2); font-weight: 500; cursor: pointer; }
.eq-edit-btn:active { background: #eef4ff; }
.eq-alert { font-size: var(--fs-caption); color: #a32d2d; background: #fcebeb; border: 0.5px solid #f09595; border-radius: 10px; padding: 10px 12px; margin-bottom: 10px; }
.eq-timeline { display: flex; flex-direction: column; }
.eq-tl-row { display: flex; gap: 10px; padding: 0 4px; position: relative; }
.eq-tl-dot { width: 9px; height: 9px; border-radius: 50%; background: #d3d1c7; flex: none; margin-top: 5px; position: relative; }
.eq-tl-dot.cur { background: #008080; }
/* 连接线：铺满本行剩余高度并向下延伸 5px，正好接到下一个圆点。
   （原先挂在圆点上且固定 height:26px，步骤带「备注」时行更高 → 线在中途断开、接不到下一个点，v1400 修） */
.eq-tl-row:not(:last-child)::before { content: ''; position: absolute; left: 8px; top: 14px; bottom: -5px; width: 1px; background: #e3e1da; }
.eq-tl-main { padding-bottom: 14px; }
.eq-tl-main b { display: block; font-size: var(--fs-body-2); font-weight: 500; color: #1f2329; }
.eq-tl-main span { display: block; font-size: var(--fs-micro); color: #8f959e; margin-top: 2px; }
.eq-tl-main i { display: block; font-style: normal; font-size: var(--fs-caption); color: #5f5e5a; margin-top: 3px; line-height: 1.5; }
.eq-ins-list { margin-top: 10px; display: flex; flex-direction: column; gap: 6px; }
.eq-ins-preview-hd { font-size: var(--fs-body-2); color: #1f2329; font-weight: 600; margin: 14px 2px 2px; }
.eq-ins-preview { margin-top: 6px; }
.eq-ins-preview .eq-ins-item { background: #fbfbfc; }
.eq-ins-item { display: flex; align-items: center; gap: 8px; background: #f7f8fa; border-radius: 9px; padding: 8px 10px; }
.eq-ins-item.good { background: #e4f6ec; }
.eq-ins-item.bad { background: #fcebeb; }
.eq-ins-name { flex: 1; font-size: var(--fs-caption); color: #1f2329; }
.eq-ins-btns { display: flex; gap: 6px; flex: none; }
.eq-ib { width: 28px; height: 28px; border-radius: 8px; border: 0.5px solid #d3d1c7; background: #fff; color: #8f959e; font-size: var(--fs-body-2); cursor: pointer; display: flex; align-items: center; justify-content: center; padding: 0; }
.eq-ib.ok.on { background: #0a8a4d; border-color: #0a8a4d; color: #fff; }
.eq-ib.bad.on { background: #a32d2d; border-color: #a32d2d; color: #fff; }
.eq-ins-note { width: 100%; box-sizing: border-box; font-size: var(--fs-caption); border: 0.5px solid #f09595; border-radius: 8px; padding: 7px 9px; margin-top: -2px; font-family: inherit; }
.eq-ins-note:focus { outline: none; border-color: #a32d2d; }
.eq-ins-repair { display: flex; align-items: center; gap: 6px; padding: 7px 2px 1px; }
.eq-ins-repair-lb { font-size: var(--fs-caption); color: #8f959e; flex: none; }
.eq-rp { padding: 4px 11px; border-radius: 14px; font-size: var(--fs-caption); font-family: inherit; line-height: 1.5; border: 1px solid #d3d1c7; background: #fff; color: #646a73; cursor: pointer; flex: none; }
.eq-rp.on { background: #008080; border-color: #008080; color: #fff; }
/* v1246：「暂不报修」选中态与「需要报修」一致（同为 #008080 青色），原灰色覆盖 .eq-rp.muted.on 已移除 */
/* 保养项：保养前 / 保养后 状态文本框与照片 */
/* v1354：保养前 / 保养后由左右并列改为上下堆叠（文本框可完整展开，不再挤半栏） */
.eq-ba-box { display: flex; flex-direction: column; gap: 10px; margin-top: 6px; padding-left: 2px; }
.eq-ba-row { min-width: 0; }
.eq-ba-hd { font-size: var(--fs-micro); color: #8f959e; margin-bottom: 3px; }
.eq-ba-input { width: 100%; box-sizing: border-box; font-size: var(--fs-caption); font-family: inherit; border: 0.5px solid #e2e2e2; border-radius: 8px; padding: 6px 8px; min-height: 38px; resize: vertical; line-height: 1.4; }
/* v1354：保养前/后状态框自增高、隐藏右侧滚动条（240px 封顶后转滚动） */
.eq-ba-input.ta-auto,
.eq-ba-input.eq-grow { overflow-y: hidden; resize: none; max-height: 240px; }
.eq-ba-input:focus { outline: none; border-color: #008080; }
.eq-ba-txt { font-size: var(--fs-caption); color: #1f2329; background: #f7f8fa; border-radius: 8px; padding: 6px 8px; line-height: 1.4; word-break: break-word; }
.eq-ba-photo { width: 100%; height: 60px; object-fit: cover; border-radius: 8px; margin-top: 4px; display: block; }
.eq-ins-photo { width: 64px; height: 64px; box-sizing: border-box; border-radius: 8px; border: 0.5px dashed #cfd2d6; background: #fafbfc; display: flex; align-items: center; justify-content: center; cursor: pointer; flex: none; position: relative; overflow: hidden; margin-top: 2px; }
.eq-ins-photo .eq-photo-img { width: 100%; height: 100%; object-fit: cover; display: block; }
.eq-ins-photo .eq-photo-hint { display: flex; flex-direction: column; align-items: center; color: #b8b8b8; font-size: 10px; gap: 2px; }
.eq-ins-photo .eq-photo-hint em { font-style: normal; }
.eq-photo-del-mini { position: absolute; top: 1px; right: 1px; width: 16px; height: 16px; line-height: 16px; text-align: center; background: rgba(0,0,0,0.5); color: #fff; border-radius: 50%; font-size: 12px; cursor: pointer; }
/* 保养异常页：前后状态照片 */
.eq-abn-photos { display: flex; gap: 6px; margin-top: 7px; flex-wrap: wrap; }
.eq-abn-photo { width: 76px; height: 76px; object-fit: cover; border-radius: 8px; display: block; }
/* 保养作业页：记录保养异常入口 */
.eq-abn-add { display: flex; align-items: center; gap: 8px; margin-top: 12px; flex-wrap: wrap; }
.eq-abn-add-tip { font-size: var(--fs-micro); color: #8f959e; }
/* 保养异常记录表单（.eq-abn-form）*/
.eq-abn-form { margin-top: 12px; background: #fbfbfc; border: 0.5px solid #eceef0; border-radius: 10px; padding: 10px; }

/* ===== v1355：保养作业页（.eq-mt-exec）所有文字字号统一 +1px =====
   仅作用于保养作业页，点检页/清单页等复用 .eq-ins-*.eq-ba-* 的模块不受影响 */
.eq-mt-exec .eq-ins-name { font-size: var(--fs-body-2); }        /* 原 12.5 */
.eq-mt-exec .eq-ins-meta { font-size: var(--fs-caption); }          /* 原 11 */
.eq-mt-exec .eq-ba-hd { font-size: var(--fs-caption); }             /* 原 11 */
.eq-mt-exec .eq-ba-input { font-size: var(--fs-body-2); }          /* 原 12 */
.eq-mt-exec .eq-ba-txt { font-size: var(--fs-body-2); }            /* 原 12 */
.eq-mt-exec .eq-ins-note { font-size: var(--fs-body-2); }          /* 原 12（未完成说明） */
.eq-mt-exec .eq-ins-repair-lb { font-size: var(--fs-body-2); }     /* 原 12（是否报修标签） */
.eq-mt-exec .eq-rp { font-size: var(--fs-body-2); }                /* 原 12（需要报修/暂不报修） */
.eq-mt-exec .eq-photo-hint em { font-size: 12px; }     /* 原 11（拍照/上传） */
.eq-mt-exec .eq-ins-val i { font-size: var(--fs-caption); }       /* 原 11.5（实测值单位） */
.eq-mt-exec .eq-ins-val em { font-size: var(--fs-micro); }      /* 原 10.5（上下限提示） */
.eq-mt-exec .eq-val-input { font-size: var(--fs-body); }         /* 原 13（实测值输入框） */
.eq-mt-exec .eq-ib { font-size: var(--fs-body); }                /* 原 13（✓/✗ 按钮） */
.eq-mt-exec .eq-ib-ro { font-size: var(--fs-body-2); }           /* 原 12.5（只读态实测值） */
.eq-mt-exec .eq-card-nm { font-size: var(--fs-card-title); }           /* 原 14.5（卡片标题） */
.eq-mt-exec .eq-card-meta { font-size: var(--fs-body-2); }         /* 原 12（卡片信息行） */
.eq-mt-exec .eq-card .eq-card-oee { font-size: var(--fs-caption); } /* 原 11 */
.eq-abn-collapse { float: right; font-size: var(--fs-caption); font-weight: normal; color: var(--primary, #008080); cursor: pointer; }
/* 点检任务类型标签：日常点检 / 专业点检 */
.eq-blk-tag { display: inline-block; font-size: var(--fs-micro); line-height: 1.55; padding: 0 6px; border-radius: 8px; background: #eef0f2; color: #646a73; margin-right: 2px; }
.eq-blk-tag.pro { background: #e6f2f2; color: #008080; }
.eq-skill-row { background: #fff; border: 0.5px solid #e3e1da; border-radius: 12px; padding: 11px 12px; margin-bottom: 8px; }
.eq-skill-eq { display: flex; align-items: center; gap: 6px; margin-bottom: 8px; }
.eq-skill-eq b { font-size: var(--fs-body-2); font-weight: 500; color: #1f2329; flex: 1; }
.eq-skill-btns { display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px; }
.eq-sk { font-size: var(--fs-micro); color: #8f959e; background: #f7f8fa; border: 0.5px solid #e3e1da; border-radius: 8px; padding: 6px 2px; cursor: pointer; }
.eq-sk.on { background: #008080; border-color: #008080; color: #fff; }
.eq-stock-row { display: flex; align-items: center; gap: 6px; margin-top: 8px; background: #f7f8fa; border-radius: 9px; padding: 7px 10px; }
.eq-stock-row b { font-size: var(--fs-content); font-weight: 500; color: #0a8a4d; }
.eq-stock-row b.low { color: #a32d2d; }
.eq-stock-row span { font-size: var(--fs-caption); color: #8f959e; }
.eq-stock-btns { margin-left: auto; display: flex; gap: 6px; }
.eq-import-row { font-size: var(--fs-caption); color: #1f2329; background: #fff; border: 0.5px solid #e3e1da; border-radius: 9px; padding: 9px 11px; margin-bottom: 6px; line-height: 1.5; }
.eq-import-row.err { color: #a32d2d; background: #fcebeb; border-color: #f09595; }
/* 全部任务页签：无外框平铺 */
.eq-group-flat { margin-bottom: 12px; }
.eq-flat-hd { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin: 2px 2px 10px; }
.eq-flat-meta { font-size: var(--fs-caption); color: #646a73; }
/* 已点检卡片：灰底收起态 */
.eq-card-done { background: #f1f1ee; border-color: #e2e0da; }
.eq-card-done .eq-card-nm { color: #55565a; }
.eq-card-done .eq-tr-sub, .eq-card-done .eq-card-meta { color: #8a8a85; }
.eq-btn-donebar { background: #d8d8d3; color: #646a73; cursor: default; }
/* 卡片首行：设备名（左）+ 状态徽标（右） */
.eq-card-nm-row { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.eq-nm-tags { display: flex; gap: 6px; flex: none; align-items: center; }
/* 任务中心过滤行：搜索框 + 日期选择 */
.eq-filter-row { display: flex; gap: 8px; margin-bottom: 12px; }
.eq-filter-row .eq-search { flex: 1; }
.eq-filter-row .eq-date { flex: none; width: 136px; height: 36px; border: 0.5px solid #d3d1c7; border-radius: 8px; background: #f6f8fa; padding: 0 8px; font-size: var(--fs-caption); font-family: inherit; color: #2c2c2a; box-sizing: border-box; }
.eq-filter-row .eq-date:focus { outline: none; border-color: #008080; background: #fff; }
/* 自主点检主选项卡（组织架构同款胶囊分段式，选中色 80青） */
.eq-am-maintabs .cg-tab.on { color: #008080; }
.eq-manage-sec-t { font-size: var(--fs-body); font-weight: 600; color: #008080; margin: 18px 2px 8px; }
.eq-assets-bar select { flex: 1; min-width: 0; height: 36px; border: 0.5px solid #d3d1c7; border-radius: 8px; background: #f6f8fa; padding: 0 10px; font-size: var(--fs-caption); font-family: inherit; color: #2c2c2a; }
/* 点检计划：被检设备可输入实时筛选 */
.eq-plan-eq-pick { position: relative; flex: 1; min-width: 0; }
.eq-plan-eq-pick input { width: 100%; box-sizing: border-box; }
.eq-plan-eq-list { position: absolute; top: calc(100% + 4px); left: 0; right: 0; z-index: 60; border: 0.5px solid #d3d1c7; border-radius: 10px; background: #fff; max-height: 240px; overflow-y: auto; box-shadow: 0 8px 22px rgba(0, 0, 0, 0.12); }
.eq-plan-eq-item { display: flex; justify-content: space-between; gap: 8px; padding: 9px 12px; font-size: var(--fs-caption); color: #1f2329; cursor: pointer; border-top: 1px solid #f2f2ef; }
.eq-plan-eq-item:first-child { border-top: none; }
.eq-plan-eq-item span { color: #8f959e; font-size: var(--fs-micro); flex: none; }
.eq-plan-eq-item:hover, .eq-plan-eq-item.on { background: #e6f2f2; color: #008080; }
.eq-plan-eq-pick input::placeholder { color: #b8b8b8; }
.eq-plan-eq-none { position: absolute; top: calc(100% + 4px); left: 0; right: 0; z-index: 60; border: 0.5px solid #d3d1c7; border-radius: 10px; padding: 10px 12px; font-size: var(--fs-caption); color: #8f959e; background: #fff; box-shadow: 0 8px 22px rgba(0, 0, 0, 0.12); }

/* ============ 来料检验（IQC） ============ */
.qc-cfg-row { display: flex; align-items: center; gap: 10px; padding: 12px; cursor: pointer; }
.qc-cfg-ic { width: 34px; height: 34px; border-radius: 9px; display: flex; align-items: center; justify-content: center; flex: 0 0 auto; }
.qc-cfg-main { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.qc-cfg-main b { font-size: var(--fs-body-2); color: #1d1d1f; }
.qc-cfg-main span { font-size: var(--fs-micro); color: #8f959e; margin-top: 1px; }
.qc-cfg-arrow { color: #c4c4c4; font-size: 18px; flex: none; }
.qc-back { color: #008080; font-size: var(--fs-body-2); margin: 2px 0 8px; cursor: pointer; }
.qc-item-card { border: 0.5px solid #e3e1d8; border-radius: 10px; padding: 10px; margin-top: 8px; background: #fafafa; }
.qc-del { color: #a32d2d; font-size: var(--fs-micro); cursor: pointer; }
.qc-note { width: 100%; border: 1px solid #e0e0e0; border-radius: 7px; padding: 7px 9px; font-size: var(--fs-body-2); margin-top: 6px; box-sizing: border-box; }


/* ===== FMOS 设备模块合并 (pms-v1192) 新增设备样式 ===== */

.eq-plan-tags {
 margin-left: auto; display: inline-flex; align-items: center; gap: 6px; flex: none;
}

.eq-plan-code-row {
 margin-top: 0; height: 18px; line-height: 18px;
}

.eq-plan-code-row .eq-code {
 margin-left: 0;
}

.eq-plan-meta {
 margin-top: 7px;
}

.eq-plan-lines .eq-plan-line + .eq-plan-line:not(.eq-plan-range) {
 margin-top: 7px;
}

.eq-sheet-form input::placeholder, .eq-sheet-form textarea::placeholder {
 color: #8f8f8f; opacity: 1;
}

.eq-sheet-form .eq-sh-ph {
 color: #8f8f8f;
}

.eq-scan-row .eq-btn.sm {
 flex: 0 0 60px; padding: 6px 0;
}

.eq-skill-line {
 display: flex; align-items: center; gap: 8px; margin-top: 6px;
}

.eq-skill-lb {
 flex: 0 0 56px; font-size: var(--fs-caption); color: #646a73;
}

.eq-skill-line .eq-skill-btns {
 flex: 1; grid-template-columns: repeat(4, 1fr); gap: 5px;
}

.eq-tb-item {
 display: flex; align-items: center; gap: 12px; background: #fff; border: 0.5px solid #e3e1da; border-radius: 12px; padding: 0 12px; height: 112px; margin-bottom: 8px; cursor: pointer;
}

.eq-tb-thumb {
 width: 90px; height: 90px; flex: none; border-radius: 6px; display: flex; align-items: center; justify-content: center;
}

.eq-tb-info {
 flex: 1; min-width: 0; height: 100%; padding: 9px 0; box-sizing: border-box; display: flex; flex-direction: column; justify-content: center; gap: 3px;
}

.eq-tb-info .eq-tb-bot {
 margin-top: 0;
}

.eq-tb-info > div:nth-child(3) {
 margin-top: 1.5px;
}

.eq-tb-r1 > span:nth-child(2) {
 font-size: var(--fs-caption) !important;
}

.eq-tb-r1 {
 display: flex; align-items: center; justify-content: space-between; gap: 8px;
}

.eq-tb-nm {
 font-size: var(--fs-body); font-weight: 600; color: #1f2329; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

.eq-tb-sub {
 font-size: var(--fs-body-2); color: #8f959e; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

.eq-tb-bot {
 display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-top: auto;
}

.eq-tb-oee {
 font-size: var(--fs-caption); font-weight: 600; color: #008080; flex: none;
}

.eq-photo-pick {
 flex: 1; min-width: 0; display: flex; align-items: center; gap: 10px;
}

.eq-photo-box {
 width: 92px; height: 92px; flex: none; border: 1px dashed #c9c7bf; border-radius: 10px; background: #fafaf8; display: flex; align-items: center; justify-content: center; overflow: hidden; cursor: pointer;
}

.eq-photo-box:active {
 border-color: #008080;
}

.eq-photo-img {
 width: 100%; height: 100%; object-fit: cover; display: block;
}

.eq-photo-hint {
 display: flex; flex-direction: column; align-items: center; gap: 3px; color: #8f959e;
}

.eq-photo-hint em {
 font-style: normal; font-size: 11px;
}

.eq-photo-del {
 border: 0.5px solid #d3d1c7; background: #fff; color: #a32d2d; font-size: 12px; border-radius: 8px; padding: 6px 10px; cursor: pointer; font-family: inherit;
}

.eq-tb-img {
 width: 100%; height: 100%; object-fit: cover; border-radius: 6px; display: block;
}

.eq-photo-hero-wrap {
 margin: 0 0 10px; border-radius: 12px; overflow: hidden; background: #f2f2ef;
}

.eq-photo-hero {
 width: 100%; max-height: 240px; object-fit: cover; display: block;
}

.eq-mt-photobox {
 flex: 1; min-width: 0; display: flex; flex-wrap: wrap; gap: 8px; align-items: center;
}

.eq-mt-photos {
 display: flex; flex-wrap: wrap; gap: 8px; margin-top: 8px;
}

.eq-mt-photo {
 position: relative; width: 68px; height: 68px; flex: none; border-radius: 8px; overflow: hidden; background: #f2f2ef;
}

.eq-mt-photo img {
 width: 100%; height: 100%; object-fit: cover; display: block;
}

.eq-mt-photo i {
 position: absolute; top: 2px; right: 2px; width: 18px; height: 18px; line-height: 17px; text-align: center; border-radius: 50%; background: rgba(0,0,0,.55); color: #fff; font-style: normal; font-size: 13px; cursor: pointer;
}

.eq-mt-photoadd {
 width: 68px; height: 68px; flex: none; border: 1px dashed #c9c7bf; border-radius: 8px; display: flex; align-items: center; justify-content: center; color: #8f959e; font-size: 12px; cursor: pointer; background: #fafaf8;
}

.eq-manage-sec-s {
 font-size: var(--fs-body-2); font-weight: 500; color: #1f2329; margin: 12px 2px 6px;
}

.eq-mt-partrow {
 display: flex; align-items: center; gap: 8px; font-size: var(--fs-caption); color: #1f2329; padding: 6px 2px; border-top: 1px solid #f2f2ef;
}

.eq-mt-partrow:first-child {
 border-top: none;
}

.eq-mt-partrow b {
 color: #008080; margin-left: auto; flex: none;
}

.eq-mt-partrow .eq-tr-sub {
 color: #8f959e;
}

.eq-mt-partrow i {
 margin-left: auto; font-style: normal; color: #a32d2d; font-weight: 600; cursor: pointer;
}

.eq-mt-trend {
 display: flex; align-items: center; gap: 8px; padding: 5px 2px; font-size: var(--fs-caption);
}

.eq-mt-trend-lb {
 width: 42px; flex: none; color: #646a73;
}

.eq-mt-trend-bar {
 flex: 1; min-width: 0; height: 10px; background: #f1f1ee; border-radius: 6px; overflow: hidden;
}

.eq-mt-trend-bar i {
 display: block; height: 100%; background: #008080;
}

.eq-mt-trend-num {
 flex: none; color: #646a73; font-variant-numeric: tabular-nums;
}

.eq-daterange input {
 flex: 1; min-width: 0;
}

.eq-daterange-sep {
 flex: none; color: #8f959e; font-size: var(--fs-caption);
}

.eq-timerange {
 flex: 1; min-width: 0; display: flex; flex-wrap: wrap; gap: 8px;
}

.eq-timerange input {
 flex: 1; min-width: 84px;
}

.eq-day-grid {
 display: flex; flex-wrap: wrap; gap: 5px;
}

.eq-day-grid .eq-wd {

  display: inline-flex; align-items: center; justify-content: center;
  margin-bottom: 0; padding: 6px 10px; font-size: var(--fs-caption);
  color: #646a73; background: #fff; border: 1px solid #d0d0d0; border-radius: 8px;
}

.eq-day-grid .eq-wd.on {
 color: #008080; background: #e6f2f2; border-color: #008080;
}

.eq-day-grid .eq-wd.eq-day {
 width: 34px; padding: 6px 0; font-variant-numeric: tabular-nums;
}

.eq-rp-sla {
 display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin: 8px 0 0; padding: 8px 10px; background: #fafaf8; border-radius: 8px;
}

.eq-rp-sla > div {
 display: flex; flex-direction: column; gap: 2px; min-width: 0;
}

.eq-rp-sla span {
 font-size: var(--fs-micro); color: #8f959e;
}

.eq-rp-sla b {
 font-size: var(--fs-caption); color: #1f2329;
}

.sub-bottom-nav {

  display: flex; background: #fff; border-top: 0.5px solid #e3e1da;
  flex-shrink: 0; z-index: 99;
}

.sub-bn-item {
 flex: 1; display: flex; flex-direction: column; align-items: center; gap: 2px; padding: 7px 0 6px; font-size: var(--fs-caption); color: #8f959e; cursor: pointer; position: relative;   /* v1598：+1px */
}

.sub-bn-item.on {
 color: #008080; font-weight: 500;
}

.sub-bn-ic {
 line-height: 1; display: flex; align-items: center; justify-content: center;
}

.sub-bn-badge {
 position: absolute; top: 2px; left: 50%; margin-left: 6px; min-width: 15px; height: 15px; line-height: 15px; text-align: center; background: #e34d4d; color: #fff; border-radius: 8px; font-size: var(--fs-micro); padding: 0 4px;
}

body.eq-sub-nav #bottomNav {
 display: none !important;
}

.eq-dash {
 background: #fff; border: 0.5px solid #e3e1da; border-radius: 12px; padding: 12px 12px 10px; margin-bottom: 12px;
}

.eq-dash-hd {
 display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px;
}

.eq-dash-hd > span {
 font-size: var(--fs-body-2); color: #646a73;
}

.eq-dash-hd b {
 color: #008080; font-size: var(--fs-body);
}

.eq-dash-bar {
 height: 6px; border-radius: 4px; background: #f1f1ee; overflow: hidden; margin-bottom: 10px;
}

.eq-dash-bar i {
 display: block; height: 100%; background: #008080; transition: width .2s ease;
}

.eq-dash-grid {
 display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px;
}

.eq-dash-cell {
 text-align: center; padding: 8px 2px; border-radius: 10px; background: #fafaf8; cursor: pointer;
}

.eq-dash-cell b {
 display: block; font-size: var(--fs-content); color: #1f2329; font-variant-numeric: tabular-nums; line-height: 1.25;
}

.eq-dash-cell span {
 font-size: var(--fs-micro); color: #8f959e;
}

.eq-dash-cell.warn b {
 color: #b45309;
}

.eq-dash-cell.on {
 background: #e6f2f2;
}

.eq-dash-cell.on b, .eq-dash-cell.on span {
 color: #008080;
}

.eq-dash-miss {
 margin-top: 8px; font-size: var(--fs-caption); color: #a32d2d;
}

/* 点检任务页「计划体检」提示条：解释为什么有计划却没有任务 */
.eq-hint-card {
  margin: 10px 0 0; padding: 10px 12px;
  background: #fff8ec; border: 0.5px solid #f0d9a8; border-radius: 10px;
}
.eq-hint-hd { font-size: var(--fs-caption); font-weight: 600; color: #b45309; line-height: 1.5; }
.eq-hint-row {
  margin-top: 6px; font-size: var(--fs-caption); color: #5f5e5a; line-height: 1.55; cursor: pointer;
}
.eq-hint-row b { color: #2b2b2b; font-weight: 600; margin-right: 6px; }
.eq-hint-row:active { opacity: .65; }
.eq-hint-ft { margin-top: 7px; font-size: var(--fs-caption); color: #008080; cursor: pointer; }

.eq-dash-trend-t {
 margin: 12px 0 4px; font-size: var(--fs-micro); color: #8f959e;
}

.eq-plan-cyc {
 border-left: 3px solid #d9ebeb; padding: 0 0 2px 12px; margin: 0 0 6px;
}

.eq-plan-cyc .eq-sec-title {
 margin: 10px 0 8px; font-size: var(--fs-body-2); color: #008080;
}

.eq-holiday-list {
 display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 10px;
}

.eq-holiday-chip {
 display: inline-flex; align-items: center; gap: 6px; padding: 4px 8px; background: #fafaf8; border: 1px solid #e3e1da; border-radius: 8px; font-size: var(--fs-caption); color: #646a73; font-variant-numeric: tabular-nums;
}

.eq-holiday-chip b {
 font-weight: 500; color: #1f2329;
}

.eq-holiday-chip i {
 font-style: normal; color: #b4b2a9; cursor: pointer; font-size: var(--fs-caption);
}

.eq-holiday-chip i:hover {
 color: #a32d2d;
}

.eq-holiday-none {
 font-size: var(--fs-caption); color: #b4b2a9;
}

.eq-holiday-add {
 display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
}

.eq-holiday-add input[type="date"] {
 flex: none; width: 150px;
}

.eq-seg {
 display: inline-flex; flex: none; border: 1px solid #d0d0d0; border-radius: 8px; overflow: hidden;
}

.eq-seg-i {
 padding: 6px 14px; font-size: var(--fs-body-2); color: #646a73; background: #fff; cursor: pointer; line-height: 1.3;
}

.eq-seg-i + .eq-seg-i {
 border-left: 1px solid #d0d0d0;
}

.eq-seg-i.on {
 background: #e6f2f2; color: #008080; font-weight: 500;
}
/* 故障等级 / 影响程度 分段控件加高（v1365，专属修饰类不改共用 .eq-seg-i） */
.eq-seg-tall .eq-seg-i { padding: 10px 14px; }
/* 报修现场照片（v1365） */
.eq-img-upload { width:72px; height:72px; flex:none; display:flex; align-items:center; justify-content:center; border:1px dashed #d0d0d0; border-radius:8px; color:#646a73; cursor:pointer; background:#fff; }
.eq-img-upload:hover { border-color:#008080; color:#008080; }
.eq-img-list { display:flex; flex-wrap:wrap; gap:8px; margin-top:8px; }
.eq-img-thumb { position:relative; width:72px; height:72px; border-radius:8px; overflow:hidden; border:1px solid #e6e6e6; flex:none; }
.eq-img-thumb img { width:100%; height:100%; object-fit:cover; }
.eq-img-thumb.lg { width:100px; height:100px; }
.eq-img-thumb.eq-img-more { display:flex; align-items:center; justify-content:center; background:#f2f3f5; color:#646a73; font-size: var(--fs-caption); }
.eq-img-del { position:absolute; top:2px; right:2px; width:18px; height:18px; line-height:18px; text-align:center; border-radius:50%; background:rgba(0,0,0,.55); color:#fff; font-size: var(--fs-caption); cursor:pointer; }

.eq-insp-chips {
 display: flex; flex-wrap: wrap; gap: 6px; min-width: 0;
}

.eq-insp-chip {
 display: inline-flex; align-items: center; gap: 6px; padding: 4px 8px; background: #f2fafa; border: 1px solid #c4d4d4; border-radius: 8px; font-size: var(--fs-caption); color: #008080;
}

.eq-insp-chip b {
 display: inline-flex; align-items: center; justify-content: center; width: 15px; height: 15px; border-radius: 50%; background: #008080; color: #fff; font-size: var(--fs-micro); font-weight: 500;
}

.eq-insp-chip i {
 font-style: normal; color: #8f959e; cursor: pointer; font-size: var(--fs-micro);
}

.eq-insp-chip i:hover {
 color: #a32d2d;
}

.eq-insp-none {
 font-size: var(--fs-caption); color: #b4b2a9;
}

.eq-plan-insp-hint {
 margin: -2px 0 10px 80px; font-size: var(--fs-micro); color: #8f959e; line-height: 1.6;
}

.eq-plan-insp-hint:empty {
 display: none;
}

.eq-card-link {
 cursor: pointer; transition: border-color .15s ease, box-shadow .15s ease, background .15s ease;
}

.eq-card-link:hover {
 border-color: #cfccc2; box-shadow: 0 2px 10px rgba(31, 35, 41, .07);
}

.eq-card-link:active {
 box-shadow: 0 1px 4px rgba(31, 35, 41, .06);
}

.eq-card-link:focus-visible {
 outline: 2px solid rgba(0, 128, 128, .35); outline-offset: 1px;
}

.eq-design-card {
 display: flex; flex-direction: column; justify-content: center; min-height: 108px;
}

.eq-card-link .eq-plan-tags span {
 font-size: var(--fs-caption) !important; line-height: 14px;
}

.eq-card-link .eq-card-nm {
 font-size: var(--fs-card-title); line-height: 18px; align-items: center; margin-top: 0;
}

.eq-card-link .eq-plan-code-row .eq-code {
 font-size: var(--fs-caption);
}

.eq-card-link .eq-card-meta {
 font-size: var(--fs-body-2); line-height: 18px;
}

.eq-det-acts {
 display: flex; gap: 10px; margin: 18px 2px 4px;
}

.eq-det-acts .eq-btn {
 flex: 1;
}

.eq-det-row {
 display: flex; align-items: center; flex-wrap: wrap; gap: 8px 18px; margin: 18px 2px 8px;
}

.eq-det-row .eq-sec-title {
 margin: 0;
}

.eq-det-row .eq-link {
 display: inline-block; padding: 3px 2px; font-size: var(--fs-body-2); cursor: pointer; user-select: none;
}

.eq-det-row .eq-link:hover {
 text-decoration: underline;
}

.eq-item-ro-grp {
 font-size: var(--fs-body-2); font-weight: 600; color: #646a73;
}

.eq-skill-top {
 display: flex; align-items: center; gap: 10px; margin-bottom: 12px;
}

.eq-skill-search {
 flex: 1 1 auto; min-width: 0; height: 36px; padding: 0 12px; border: 1px solid var(--border); border-radius: 9px; font-size: var(--fs-body-2); background: var(--card-bg); color: var(--text); font-family: inherit;
}
/* 搜索框左侧放大镜图标（与 .eq-search 同款；图标 14px、左内边距 32px） */
.eq-skill-search {
 padding-left: 32px;
 background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%238f959e' stroke-width='2.2' stroke-linecap='round'><circle cx='11' cy='11' r='7'/><line x1='16.6' y1='16.6' x2='21' y2='21'/></svg>");
 background-repeat: no-repeat;
 background-position: 12px center;
}

.eq-skill-top .eq-btn.sm {
 flex: none; white-space: nowrap; height: 36px; padding: 0 12px;
}

.eq-skill-add-title {
 font-size: var(--fs-title-2); font-weight: 600; color: var(--text); margin-bottom: 12px; padding: 2px 0;
}

.eq-skill-mx-card {
 background: var(--card-bg); border: 1px solid var(--border); border-radius: 12px; margin-bottom: 12px; overflow: hidden;
}

.eq-skill-mx-h {
 display: flex; align-items: center; gap: 8px; padding: 11px 12px; border-bottom: 1px solid #eef0f2; cursor: pointer; user-select: none; -webkit-tap-highlight-color: transparent;
}

.eq-skill-mx-h:active {
 background: #f7f8fa;
}

.eq-skill-mx-h b {
 font-size: var(--fs-body); font-weight: 600; color: #1f2329; flex: 1 1 auto;
}

.eq-skill-mx-sub {
 font-size: var(--fs-caption); color: #8f959e; flex: none;
}

.eq-mx-arrow {
 width: 16px; height: 16px; position: relative; flex: none; transition: transform .18s ease;
}

.eq-mx-arrow::before, .eq-mx-arrow::after {

  content: ''; position: absolute; left: 3px; width: 8px; height: 8px; box-sizing: border-box;
  border-right: 2px solid #646a73; border-bottom: 2px solid #646a73; transform: rotate(45deg);
}

.eq-mx-arrow::before {
 top: 1px;
}

.eq-mx-arrow::after {
 top: 6px;
}

.eq-skill-mx-card.open .eq-mx-arrow {
 transform: rotate(180deg);
}

.eq-skill-mx-sum {
 padding: 8px 12px 11px 36px;
}

.eq-mx-sum-line {
 font-size: var(--fs-caption); color: #1f2329; line-height: 1.7;
}

.eq-mx-sum-line.eq-mx-names {
 color: #646a73;
}

.eq-skill-mx-scroll {
 overflow-x: auto; -webkit-overflow-scrolling: touch;
}

.eq-skill-mx {
 border-collapse: collapse; width: 100%; font-size: var(--fs-body-2);
}

.eq-skill-mx th, .eq-skill-mx td {
 border-bottom: 1px solid #f2f3f5; border-right: 1px solid #f2f3f5; padding: 9px 10px; text-align: center;
}

.eq-skill-mx th {
 font-weight: 600; color: #1f2329; background: #f7f8fa; white-space: nowrap;
}

.eq-skill-mx th:not(.eq-mx-corner) {
 min-width: 64px; font-weight: 400;
}

.eq-skill-mx .eq-mx-corner {
 text-align: left; color: #646a73; font-weight: 600; position: sticky; left: 0; background: #f7f8fa; z-index: 1;
}

.eq-skill-mx .eq-mx-name {
 text-align: left; color: #1f2329; font-weight: 500; white-space: nowrap; position: sticky; left: 0; background: var(--card-bg); z-index: 1;
}

.eq-skill-mx .eq-mx-cell {
 width: 1%;
}

.eq-ring {
 display: inline-block; width: 15px; height: 15px; border-radius: 50%; box-sizing: border-box; border: 1.5px solid #d3d1c7; background: transparent; vertical-align: middle;
}

.eq-ring.on {
 background: var(--rc, #34c759); border-color: var(--rc, #34c759); box-shadow: 0 0 0 2px color-mix(in srgb, var(--rc, #34c759) 22%, transparent);
}

.eq-mx-update {
 flex: none; border: none; background: transparent; color: #008080; padding: 4px 0; font-size: var(--fs-caption); cursor: pointer; font-family: inherit; white-space: nowrap;
}

.eq-mx-update:active {
 opacity: 0.7;
}

.eq-form-ro {
 font-size: var(--fs-body-2); color: #1f2329; padding: 9px 10px; background: #f7f8fa; border: 1px solid #e3e1da; border-radius: 9px;
}

.eq-dev-add {
 display: flex; align-items: center; gap: 8px;
}

.eq-dev-add label {
 flex: none; margin-bottom: 0;
}

.eq-dev-add select {
 flex: 1 1 auto; min-width: 0;
}

.eq-dev-add .eq-btn.sm {
 flex: none;
}

.eq-skill-dev-row {
 background: var(--card-bg); border: 1px solid var(--border); border-radius: 12px; padding: 12px; margin-bottom: 10px;
}

.eq-skill-dev-h {
 display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px;
}

.eq-skill-dev-h b {
 font-size: var(--fs-body); font-weight: 600; color: #1f2329;
}

.eq-dev-rm {
 border: 1px solid #f0c2c2; background: #fff5f5; color: #d4380d; border-radius: 8px; padding: 4px 10px; font-size: var(--fs-caption); cursor: pointer; font-family: inherit; white-space: nowrap;
}

.eq-dev-rm:active {
 background: #ffe9e9;
}

/* ===== FMOS 点检表/计划表单补齐 ===== */
.eq-sheet-actions > .eq-btn,
.eq-sheet-actions > .eq-sh-copy {
  flex: 1 1 calc(50% - 4px); min-width: 0;
}
.eq-sheet-actions > .eq-btn {
  height: 34px;
}
.eq-sheet-actions > .eq-sh-copy {
  max-width: none; width: auto;
}
.eq-sh-row textarea {
  flex: 1; min-width: 0; min-height: 34px; border: 1px solid #d3d1c7; border-radius: 8px; padding: 6px 8px; font-size: var(--fs-caption); font-family: inherit; line-height: 1.5; background: #fff; color: #1f2329; box-sizing: border-box; resize: none; overflow: hidden; display: block;
}
.eq-sh-row textarea:focus {
  outline: none; border-color: #008080;
}
.eq-sh-row .eq-sh-part {
  flex: 1 1 calc(65% - 3.9px);
}
.eq-sh-row .eq-sh-method {
  flex: 0 1 calc(35% - 2.1px);
}
.eq-start-row input::placeholder {
  color: #bababa; opacity: 1;
}
.eq-form-card .eq-form-g > .eq-daterange {
  flex: 1; min-width: 0; display: flex; align-items: center; gap: 8px;
}
.eq-form-card .eq-form-g > .eq-timerange {
  flex: 1; min-width: 0;
}
.eq-form-card .eq-form-g > .eq-wd-grid, .eq-form-card .eq-form-g > .eq-day-grid {
  flex: 1; min-width: 0;
}
.eq-wd.eq-day {
  padding: 4px 0; width: 32px; justify-content: center; font-variant-numeric: tabular-nums;
}
.eq-wd input[type="checkbox"] {
  display: none;
}
.eq-wd-grid .eq-wd, .eq-day-grid .eq-wd {
  display: inline-flex; align-items: center; justify-content: center;
    margin-bottom: 0; padding: 6px 10px; font-size: var(--fs-caption);
    color: #646a73; background: #fff; border: 1px solid #d0d0d0; border-radius: 8px;
}
.eq-wd-grid .eq-wd.on, .eq-day-grid .eq-wd.on {
  color: #008080; background: #e6f2f2; border-color: #008080;
}
.eq-form-tip.eq-tip-in {
  margin-left: 80px;
}
.eq-form-card .eq-form-check {
  display: block; margin: 12px 0 10px;
}
.eq-form-card .eq-form-check > label {
  display: flex; align-items: flex-start; gap: 7px;
    width: auto; flex: 1; margin-bottom: 0;
    font-size: var(--fs-caption); color: #5f5e5a; line-height: 1.55; cursor: pointer;
}
.eq-form-card .eq-form-check input[type="checkbox"] {
  flex: none; margin: 2px 0 0;
}
.eq-form-card .eq-form-check span {
  flex: 1; min-width: 0;
}
.eq-form-card .eq-form-check.eq-check-13 > label {
  font-size: var(--fs-body-2);
}
/* v1282：本行字号 13px，行框 20.15（其它行 12.5px/19.375）；勾选框沿用为 12.5px 调好的
   margin-top:2px 会偏高 1px → 该行方框下移 1px，使方框中心与文字光学中心重合 */
.eq-form-card .eq-form-check.eq-check-13 input[type="checkbox"] {
  margin-top: 3px;
}
.eq-form-card .eq-form-check-group {
  display: flex; flex-wrap: wrap; gap: 8px 22px; margin: 12px 0 10px;
}
.eq-form-card .eq-form-check-group .eq-form-check {
  margin: 0; flex: none;
}

/* ===== 新增技能（双模式：按设备 / 按人）v1203 ===== */
.eq-skill-add-bar { display: flex; align-items: center; gap: 10px; margin: 2px 2px 12px; }
.eq-skill-add-n { font-size: var(--fs-caption); color: #8f959e; }
.eq-skill-savebar { display: flex; gap: 10px; padding: 16px 12px 22px; }
.eq-skill-savebar .eq-btn { flex: 1 1 0; width: auto; margin-top: 0; }
.eq-skill-dev-h { gap: 8px; }
.eq-skill-dev-h .eq-plan-eq-pick { flex: 1 1 auto; }
.eq-skill-dev-h .eq-plan-eq-pick input { width: 100%; box-sizing: border-box; border: 1px solid #d3d1c7; border-radius: 9px; padding: 8px 10px; font-size: var(--fs-body-2); color: #1f2329; background: #fff; font-family: inherit; }
.eq-skill-dev-h .eq-plan-eq-pick input:focus { outline: none; border-color: #008080; }
.eq-skill-rowsub { font-size: var(--fs-caption); color: #8f959e; margin: 0 0 4px 2px; }
.eq-sk:disabled { opacity: .45; cursor: default; }

.eq-form-card .eq-form-g > .eq-mt-dates-wrap { flex: 1; min-width: 0; }

/* ============================================================
   生产管理模块（琴书 9 大模块）· v1433 并入
   来源：拆分工程 mos-module-production/production.html 的内联 <style> 块
   说明：原注释「合并时移入 style.css 统一管理」——本条即为此。
   改造：①去掉独立页专用的 `.app-header .btn-back{display:block}`；
         ②`.dm-step` 连接线 3 条规则限定到 `.prod-content` 下（该共用类主工程也在用，
           避免影响交付管理的订单进度条）。
   ============================================================ */
    /* ============================================================
       生产管理模块页 — 补充样式（合并时移入 style.css 统一管理）
       规范对齐琴书：矩形按钮白底+灰边#d0d0d0+灰字#646a73；
       占位符 #b8b8b8；主色紫 #8b5cf6；进度条沿用 80青 #008080
       ============================================================ */
    .prod-page-body { background:#f5f6f7; min-height:100vh; }
    .prod-content { padding-bottom: 32px; }
    /* 独立页面需要常显返回箭头（主工程默认 display:none，进子系统时才由 JS 打开） */
    .pl-page { padding: 0 12px 32px; }

    /* —— 产能匹配 + 物料齐套（排产约束卡，参考订单页卡片风格） —— */
    .pl-cap2 { display:grid; grid-template-columns:1fr 1fr; gap:10px; padding:12px 12px 0; }
    .pl-cap-card { background:#fff; border:0.5px solid #d3d1c7; border-radius:14px; padding:12px 14px; min-width:0; }
    .pl-cap-title { display:flex; justify-content:space-between; align-items:center; font-size: var(--fs-body-2); font-weight:600; color:#1f2329; }
    .pl-cap-bar { height:6px; background:#efeff1; border-radius:3px; overflow:hidden; margin-top:8px; }
    .pl-cap-bar i { display:block; height:100%; border-radius:3px; }
    .pl-cap-row { display:flex; justify-content:space-between; align-items:center; gap:8px; font-size: var(--fs-caption); color:#646a73; margin-top:7px; }
    .pl-cap-row b { font-size: var(--fs-caption); color:#1f2329; font-weight:600; text-align:right; }
    .pl-cap-row span:last-child { text-align:right; }
    .pl-cap-warn { font-size: var(--fs-micro); color:#dc2626; margin-top:8px; }

    /* —— MRP 判定结果：满足（绿）/ 不满足（红，含原因） —— */
    .pl-mrp-ok { background:#e7f5ec; border:1px solid #bfe5cd; color:#16a34a; border-radius:8px; padding:8px 12px; font-size: var(--fs-caption); margin-top:10px; }
    .pl-mrp-reasons { background:#fef2f2; border:1px solid #f3c1c1; color:#dc2626; border-radius:8px; padding:8px 12px; font-size: var(--fs-caption); margin-top:10px; line-height:1.6; }
    .pl-mrp-reasons b { font-weight:600; }
    .pl-mrp-warnsoft { background:#fef6e7; border:1px solid #f0d9a8; color:#a16207; border-radius:8px; padding:8px 12px; font-size: var(--fs-caption); margin-top:10px; line-height:1.6; }
    .pl-card-notactive { border:1px solid #f3b8b8 !important; border-left:3px solid #dc2626 !important; background:#fff5f5 !important; }

    /* —— 日视图四日卡：默认白底无灰框，仅选中变灰 —— */
    .day-stat { background:transparent !important; border:none !important; padding:3px 2px !important; line-height:1.2 !important; }
    /* —— 计划详情步骤条：v1745 改「节点 + 独立线段」—— 线段 flex:1 自动填满节点间隙，
       节点本身按内容定宽所以首尾能贴住外框（旧的 ::after 百分比线会随节点变窄而断开） —— */
    #dayStrip::-webkit-scrollbar { display:none; }
    .day-stat .dm-stat-val { font-size: var(--fs-body) !important; font-weight:400 !important; color:#8a8f99 !important; }
    .day-stat .dm-stat-label { color:#8a8f99 !important; }
    .day-stat.active { background:transparent !important; border:none !important; }
    .day-stat.active .dm-stat-val { font-weight:700 !important; color:#1f2329 !important; }
    .day-stat.active .dm-stat-label { font-weight:700 !important; color:#1f2329 !important; }
    /* —— PS排程时间序列：数字18px / 档名15px（仅PS页，不影响PP编制） —— */
    .ps-tab { flex:0 0 calc((100% - 24px)/4); margin:0; min-height:42px; box-sizing:border-box; text-align:center; cursor:pointer; opacity:.5; }
    .ps-tab.active { opacity:1; }
    .ps-tab .ps-label { font-size: var(--fs-body-2); font-weight:500; color:#1f2329; }
    .ps-tab.active .ps-label { color:#3C3489; }
    .ps-dot-wrap { height:18px; display:flex; align-items:center; justify-content:center; }
    .ps-dot { width:8px; height:8px; border-radius:50%; box-sizing:border-box; background:#B4B2A9; }
    .ps-tab.active .ps-dot { width:12px; height:12px; background:#534AB7; border:3px solid #CECBF6; }
    .ps-count { font-size: var(--fs-body-2); color:#8a8f99; }
    .ps-tab.active .ps-count { color:#534AB7; }

    .day-filter-search { height:33px; padding:0 8px; }
    .day-filter-search input { font-size: var(--fs-caption); }
    .day-btn-frame {
      flex-shrink:0; height:33px; display:flex; align-items:center;
      border:1px solid rgba(0,0,0,0.2); border-radius:8px; padding:0 4px; background:#fff;
    }
    .day-btn-frame .mo-btn { border:none; background:none; height:100%; padding:0 8px; font-size: var(--fs-caption); }
    /* v1753（用户要求）：「＋ 新建工单」→「＋」，框宽缩一半（约 95 → 48px） */
    .day-btn-frame .mo-btn { min-width: 38px; text-align: center; }
    /* v1754（用户要求）：加号字号加大两倍 13 → 26px；缩小左右 padding 保证外框仍为 48px */
    .day-btn-frame .mo-btn { font-size: 30px; padding: 0 1px; line-height: 1; }
    /* v1756（用户反馈“偏下”）：全角＋ 的字形在 em 框中本身偏下，
       实测字形中心比按钮中心低 ~3px → 用相对定位把字形上提 */
    .day-btn-frame .mo-btn .plus-y { position: relative; top: -2.5px; }
    .day-btn-frame .mo-btn:disabled { color:#b8b8b8; cursor:not-allowed; }
    #dayFilterMenu { left:0; right:0; }


    /* —— 产品名称下拉（实时筛选可点选） —— */
    .pl-combomenu {
      position:absolute; top:100%; left:84px; right:0; z-index:50;
      background:#fff; border:1px solid #d0d0d0; border-radius:8px;
      box-shadow:0 4px 14px rgba(0,0,0,.10); max-height:190px; overflow-y:auto;
    }
    .pl-combomenu-item { padding:9px 14px; font-size: var(--fs-body-2); color:#1f2329; cursor:pointer; }
    .pl-combomenu-item:active, .pl-combomenu-item:hover { background:#f5f3ff; }
    .pl-combomenu-empty { color:#b8b8b8; cursor:default; }

    /* —— 通用按钮：白底灰边灰字（琴书规范） —— */
    .mo-btn {
      display:inline-flex; align-items:center; justify-content:center;
      background:#fff; border:1px solid #d0d0d0; color:#646a73;
      border-radius:8px; padding:8px 14px; font-size: var(--fs-body-2); cursor:pointer;
      transition:background .12s; line-height:1.2;
    }
    .mo-btn:active { background:#f2f3f5; }
    .mo-btn.mo-primary { background:#8b5cf6; border-color:#8b5cf6; color:#fff; }
    .mo-btn.mo-primary:active { background:#7c4ee0; }
    .mo-btn.mo-danger { color:#dc2626; border-color:#f3c1c1; }
    .mo-btn:disabled { opacity:.45; cursor:not-allowed; }

    /* —— 列表头：统计 + 工具行 —— */
    .pl-stats { display:grid; grid-template-columns:repeat(4,1fr); gap:8px; margin-top:14px; }
    .pl-stat { background:#fff; border:0.5px solid #e2e1da; border-radius:10px; text-align:center; padding:10px 4px; }
    .pl-stat b { display:block; font-size: var(--fs-title-2); color:#1f2329; line-height:1.2; }
    .pl-stat span { display:block; font-size: var(--fs-micro); color:#8a8f99; margin-top:3px; }

    .pl-tools { display:flex; gap:8px; margin:14px 0 4px; align-items:center; }
    .pl-search {
      flex:1; border:1px solid #d0d0d0; border-radius:8px; padding:8px 10px;
      font-size: var(--fs-body-2); background:#fff; color:#1f2329;
    }
    .pl-search::placeholder { color:#b8b8b8; }

    /* —— 视图/状态筛选 chips —— */
    .pl-chips { display:flex; gap:6px; flex-wrap:wrap; margin:10px 0 4px; }
    .pl-chip {
      border:1px solid #d0d0d0; background:#fff; color:#646a73;
      border-radius:14px; padding:4px 12px; font-size: var(--fs-caption); cursor:pointer;
    }
    .pl-chip.on { background:#8b5cf6; border-color:#8b5cf6; color:#fff; }

    /* —— 计划卡片 —— */
    .pl-list { margin-top:10px; display:flex; flex-direction:column; gap:10px; }
    .pl-card {
      background:#fff; border:0.5px solid #d3d1c7; border-radius:14px;
      padding:14px 16px; cursor:pointer; transition:background .12s;
    }
    .pl-card:active { background:#faf9f7; }
    .pl-card-top { display:flex; align-items:center; gap:8px; }
    .pl-no { font-size: var(--fs-micro); color:#8a8f99; }
    .pl-pri { font-size: var(--fs-micro); border-radius:4px; padding:1px 6px; background:#fef2f2; color:#dc2626; }
    .pl-card-name { font-size: var(--fs-body); font-weight:600; color:#1f2329; margin-top:4px; }
    .pl-card-meta { font-size: var(--fs-caption); color:#8a8f99; margin-top:4px; display:flex; gap:12px; flex-wrap:wrap; }
    .pl-card-bottom { display:flex; align-items:center; gap:10px; margin-top:10px; }
    .pl-bar { flex:1; height:6px; background:#efeff1; border-radius:3px; overflow:hidden; }
    .pl-bar i { display:block; height:100%; background:#008080; border-radius:3px; }
    .pl-bar i.warn { background:#dc2626; }
    /* ===== v1748（用户要求）：工单卡进度条改成「灰色细线 + 黑圆点」 =====
       未完成＝2px 浅灰细线；已完成段＝2px 黑线覆盖；分界处一枚 8px 黑圆点。
       容器 margin 左右各 4px，让 0% / 100% 时圆点不会顶到卡片边缘。 */
    .pl-prog { position:relative; flex:1; height:8px; margin:0 4px; }
    .pl-prog::before {
      content:''; position:absolute; left:0; right:0; top:50%; transform:translateY(-50%);
      height:0.5px; background:#b5b5b5; border-radius:0;
    }
    .pl-prog > i {
      position:absolute; left:0; top:50%; transform:translateY(-50%);
      height:0.5px; background:#1a1a1a; border-radius:0; max-width:100%;
    }
    .pl-prog-dot {
      position:absolute; top:50%; width:8px; height:8px; margin:-4px 0 0 -4px;
      border-radius:50%; background:#1a1a1a; box-sizing:border-box;
    }
    .pl-rate { font-size: var(--fs-caption); color:#008080; font-weight:600; min-width:38px; text-align:right; }
    .pl-rate.warn { color:#dc2626; }
    /* 新建工单：三个上下模块 */
    .pl-mod { margin-top:14px; }
    .pl-mod-title { font-size: var(--fs-body-2); font-weight:600; color:#1f2329; margin:0 2px 6px; }
    #bomBox { background:#fff; border:0.5px solid #d3d1c7; border-radius:10px; padding:10px 12px; }
    #bomBox { background:#fff; border:0.5px solid #d3d1c7; border-radius:10px; padding:10px 12px; }
    /* —— PP编制日卡片：foot 间距2px；除产品名/数量外字号+1px —— */
    .pp-day .dm-card-head { margin-bottom:5px; }
    .pp-day .pp-cycle { font-size: var(--fs-caption); color:#646a73; margin:0 0 15px; font-variant-numeric: tabular-nums; }
    .pp-day .dm-card-body { margin-bottom:16.5px; }
    /* v1752（用户要求）：计划周期下方显示创建人 */
    .pp-day .pp-creator { font-size: var(--fs-caption); color:#8a8f99; margin:-9px 0 15px; }
    .pp-day .dm-card-foot { margin-top:2.2px; font-size: var(--fs-body-2); }
    .pp-day.dm-card { padding-top:12px; padding-bottom:12px; margin-bottom:20px; }
    .pp-day .dm-card-tag { font-size: var(--fs-caption); }
    .pp-day .dm-badge { font-size: var(--fs-caption); }
    .pp-day .pl-rate { font-size: var(--fs-body-2); }
    .pp-day .pl-tag { font-size: var(--fs-caption); }

    /* —— 状态标签 —— */
    .pl-tag { font-size: var(--fs-micro); border-radius:4px; padding:2px 8px; margin-left:auto; }
    .pl-tag.st-draft     { background:#f2f3f5; color:#646a73; }
    .pl-tag.st-confirmed { background:#e8edff; color:#3370ff; }
    .pl-tag.st-producing { background:#f5f3ff; color:#8b5cf6; }
    .pl-tag.st-done      { background:#e7f5ec; color:#16a34a; }
    .pl-tag.st-closed    { background:#f2f3f5; color:#8a8f99; }
    .pl-tag.st-cancelled { background:#fef2f2; color:#dc2626; }

    /* —— 详情页 —— */
    .pl-detail-card { background:#fff; border:0.5px solid #d3d1c7; border-radius:14px; padding:16px; margin-top:12px; }
    .pl-dt-title { font-size: var(--fs-content); font-weight:600; color:#1f2329; display:flex; align-items:center; gap:8px; }
    .pl-dt-row { display:flex; font-size: var(--fs-body-2); margin-top:8px; }
    .pl-dt-row .k { width:76px; color:#8a8f99; flex-shrink:0; }
    .pl-dt-row .v { color:#1f2329; flex:1; }

    .pl-ach { text-align:center; padding:6px 0 2px; }
    .pl-ach-num { font-size: var(--fs-display); font-weight:600; color:#008080; line-height:1.2; }
    .pl-ach-num.warn { color:#dc2626; }
    .pl-ach-lbl { font-size: var(--fs-caption); color:#8a8f99; margin-top:2px; }
    .pl-ach-bar { height:8px; background:#efeff1; border-radius:4px; overflow:hidden; margin-top:10px; }
    .pl-ach-bar i { display:block; height:100%; background:#008080; border-radius:4px; }
    .pl-ach-bar i.warn { background:#dc2626; }
    .pl-ach-warn { font-size: var(--fs-caption); color:#dc2626; margin-top:8px; }

    .pl-wo-item {
      display:flex; align-items:center; gap:10px; padding:10px 2px;
      border-top:1px solid #f0f0f2; font-size: var(--fs-body-2);
    }
    .pl-wo-item .no { color:#8a8f99; font-size: var(--fs-caption); }
    .pl-wo-item .nm { flex:1; color:#1f2329; }
    .pl-wo-item .qt { color:#646a73; font-size: var(--fs-caption); }
    .pl-wo-empty { font-size: var(--fs-caption); color:#b8b8b8; text-align:center; padding:14px 0 6px; }

    .pl-actions { display:flex; gap:8px; margin-top:14px; flex-wrap:wrap; }
    .pl-actions .mo-btn { flex:1; min-width:96px; }

    .pl-log-item { font-size: var(--fs-caption); color:#8a8f99; padding:6px 2px; border-top:1px solid #f0f0f2; }
    .pl-log-item b { color:#646a73; font-weight:500; }

    /* —— 表单 —— */
    .mo-form { background:#fff; border:0.5px solid #d3d1c7; border-radius:14px; padding:6px 16px; margin-top:12px; }
    .mo-form-row { display:flex; align-items:center; border-bottom:1px solid #f0f0f2; padding:11px 0; }
    .mo-form-row:last-child { border-bottom:none; }
    .mo-form-row .k { width:84px; font-size: var(--fs-body-2); color:#646a73; flex-shrink:0; }
    .mo-form-row .k i { color:#dc2626; font-style:normal; margin-left:2px; }
    .mo-form-row input[type=text], .mo-form-row input[type=number], .mo-form-row input[type=date],
    .mo-form-row select, .mo-form-row textarea {
      flex:1; border:none; outline:none; font-size: var(--fs-body); color:#1f2329;
      background:transparent; text-align:right; font-family:inherit;
    }
    .mo-form-row input::placeholder, .mo-form-row textarea::placeholder { color:#b8b8b8; }
    .mo-form-row textarea { text-align:left; resize:none; min-height:44px; padding-top:2px; }
    .mo-form-hint { font-size: var(--fs-micro); color:#b8b8b8; padding:8px 2px 0; }

    /* —— 弹层 ——
       v1795：z-index 99 → 200。底部导航（.bottom-nav）是 z-index:100，
       原来弹层压在它下面，工单管理的开工/报工/派单/完工浮层下沿会被导航盖掉 56px */
    .mo-overlay {
      position:fixed; inset:0; background:rgba(0,0,0,.45); z-index:200;
      display:flex; align-items:flex-end; justify-content:center;
    }
    .mo-sheet {
      background:#fff; border-radius:16px 16px 0 0; width:100%; max-width:520px;
      padding:18px 18px 26px; max-height:82vh; overflow-y:auto;
    }
    .mo-sheet h3 { font-size: var(--fs-body); margin:0 0 12px; color:#1f2329; }

    /* —— Toast —— */
    .mo-toast {
      position:fixed; left:50%; bottom:88px; transform:translateX(-50%);
      background:rgba(31,35,41,.92); color:#fff; font-size: var(--fs-body-2);
      padding:9px 18px; border-radius:8px; z-index:120; pointer-events:none;
      opacity:0; transition:opacity .2s;
    }
    .mo-toast.show { opacity:1; }

    .pl-subhd { font-size: var(--fs-body-2); font-weight:600; color:#646a73; margin:18px 2px 0; }
    .pl-backrow { padding-top:14px; }


/* ============================================================
   生产管理 · 生产工单时间轴（v1434 用户要求）
   左侧＝一根竖线 + 节点时间（紧贴工单列左缘）；右侧＝工单卡片列，卡高 ∝ 计划量
   ============================================================ */
.ps-tl { display: flex; align-items: stretch; margin-top: 8px; }
.ps-tl-axis { position: relative; width: 58px; flex: none; }   /* v1444：54→58，左侧要放「第 N 班」 */
.ps-tl-line { position: absolute; right: 8px; top: 2px; bottom: 2px; width: 2px; background: #dedcd4; border-radius: 1px; }
.ps-tl-node { position: absolute; right: 8px; transform: translateY(-50%); display: flex; align-items: center; white-space: nowrap; }
.ps-tl-node em { font-style: normal; font-size: var(--fs-micro); letter-spacing: 1px; color: #8a8f99; margin-right: 6px; }
/* v1449：时刻字距 +1px ⇒ 墨宽 26→31px，与「第 N 班」（墨宽 31）等宽 */
.ps-tl-node b { width: 8px; height: 8px; border-radius: 50%; background: #534AB7; box-shadow: 0 0 0 2px #fff; margin-right: -3px; }
/* v1453：段首节点**恢复居中**（原来顶端对齐会让它的圆点比卡片上沿低 7px ⇒ 用户看到「卡片上沿高过 16:00」）。
   它向上溢出的 8px 由段头下边距让出（见 .ps-seg-head 的 18px），视觉净空仍是 10px。 */
/* ============ 每班一段独立时间轴（v1445）============
   段头在轴的**流程之外**（不占轴高）：「第 N 班」左（列宽＝轴宽）、虚线、时间段靠右 */
.ps-segs { display: block; }
.ps-seg + .ps-seg { margin-top: 30px; }                 /* 第 2/3 班：段头**上方**间距 30px */
.ps-seg:first-child .ps-seg-head { margin-top: 23px; }
/* v1761（用户要求）：「生产计划 / 生产工单」小标题（两页共用，原内联 margin 13/2 已提到此处） */
.ps-plan-title { font-size: var(--fs-body-2); font-weight: 600; color: #646a73; margin: 13px 0 2px; }
/* v1761 工单排程页：标题与上方 +50%（13→20）、与下方 -40%（23→14） */
#psUnitPage .ps-plan-title { margin-top: 20px; }
#psUnitPage .ps-seg:first-child .ps-seg-head { margin-top: 14px; }
/* v1759（用户要求）：**计划排产列表页展开区** —— 「生产计划」标题到「第 1 班」行的间距缩 30%（23 → 16px）。
   只限 #psUnits（列表页展开区），工单排程页 #psUnitPage 保持 23px。 */
#psUnits .ps-seg:first-child .ps-seg-head { margin-top: 16px; }  /* v1450：**第 1 班**上方 23px（其余仍 30px）*/
.ps-seg-head { display: flex; align-items: center; gap: 0; height: 18px; margin: 30px 0 18px; }
/* v1448/v1450/v1453：① 段头**上方** 30px（第 1 班 23px，见下条；首段的 30px 由 margin-top 折叠穿透 `.ps-segs`、
      与「生产工单」标题的下边距 2px 取大）② 段头**下方** 18px —— 其中 8px 是留给**段首时刻标签**向上溢出的，
      所以视觉净空仍是 10px（`.ps-seg .ps-tl` 的 margin-top:3px 折叠后取大 ＝ 18）*/
.ps-seg-name { width: 49px; flex: none; box-sizing: border-box; padding-right: 10px; text-align: right;
  font-size: var(--fs-micro); font-weight: 600; color: #534AB7; }
/* v1448：「第 N 班」**右对齐** —— 右缘 62 与时间轴上的时刻标注右缘（62）一致；盒宽 49 ＝ 到竖线（72），留 10px 呼吸 */
.ps-seg-rule { flex: 1; height: 1px; background: #dedcd4; margin-right: 8px; }
/* v1448：分隔虚线**左端 72 ＝ 时间轴竖线位置**（原来从 89 起，比竖线右 17px）；右端仍留 8px 到时间段 */
.ps-seg-range { font-size: var(--fs-micro); color: #646a73; white-space: nowrap; }
.ps-seg .ps-tl { margin-top: 3px; }                     /* 段头与自己的轴贴紧 */
.ps-tl-list { flex: 1; min-width: 0; }
.ps-tl-card { background: #fafafa; border: 0.5px solid #e5e3dc; border-radius: 8px; }
.ps-tl-card:active { background: #f0f0ee; }
.ps-tl-cap { display: flex; align-items: center; box-sizing: border-box; padding: 0 10px; font-size: var(--fs-micro); color: #8a8f99; background: #f2f1ee; border-radius: 6px; }


/* ============================================================
   生产工单时间轴 v1442 增补
   —— 启动/换型行（可点修改 / 「＋」添加 / 行内编辑）
   —— 班次分隔条（第 N 班 · 起–止）
   ============================================================ */
.ps-tl-row { box-sizing: border-box; }
.ps-co-add { display: flex; align-items: center; justify-content: center; box-sizing: border-box;
  border: 1px dashed #cfcdc6; border-radius: 6px; background: #fbfbfa;
  font-size: var(--fs-micro); color: #8a8f99; cursor: pointer; user-select: none; }
.ps-co-add:active { background: #f1f0ec; }
.ps-tl-cap.ps-gap-chip, .ps-tl-cap.ps-startup-chip { cursor: pointer; }
.ps-tl-cap.ps-gap-chip:active, .ps-tl-cap.ps-startup-chip:active { background: #e9e7e0; }
.ps-tl-cap.ps-gap-chip::after, .ps-tl-cap.ps-startup-chip::after { content: '✎'; font-size: var(--fs-micro); color: #b8b8b8; margin-left: 6px; }
.ps-co-edit { display: flex; align-items: center; gap: 6px; box-sizing: border-box; padding: 0 8px;
  background: #f2f1ee; border-radius: 6px; }
.ps-co-edit .ps-co-label { font-size: var(--fs-micro); color: #646a73; }
.ps-co-edit .ps-co-input { width: 56px; height: 20px; box-sizing: border-box; border: 0.5px solid #d3d1c7;
  border-radius: 5px; padding: 0 5px; font-size: var(--fs-caption); color: #1f2329; background: #fff; }
.ps-co-edit .ps-co-unit { font-size: var(--fs-micro); color: #8a8f99; }
.ps-co-edit .ps-co-save { font-size: var(--fs-micro); font-weight: 600; color: #008080; cursor: pointer; }
.ps-co-edit .ps-co-cancel { font-size: var(--fs-micro); color: #8a8f99; cursor: pointer; }
.ps-co-edit .ps-co-remove { font-size: var(--fs-micro); color: #dc2626; cursor: pointer; margin-left: auto; }
/* v1452：虚拟拆分的编辑行（本班数量）与卡片上的拆分标签 */
.ps-split-edit { overflow: hidden; }
.ps-split-edit .ps-co-input { width: 52px; }
.ps-split-tag:active { opacity: .7; }

/* 子系统横幅：未接云端模块的标注（V1.0 只有「问题解决」上了云，其余 4 个数据仍在本机） */
.sys-banner-local {
  display: inline-block;
  margin-top: 6px;
  padding: 2px 8px;
  border-radius: 10px;
  background: rgba(255, 255, 255, .22);
  border: 1px solid rgba(255, 255, 255, .5);
  font-size: var(--fs-micro);
  line-height: 1.5;
  color: #fff;
  letter-spacing: .5px;
}

/* ==================== v1458：通讯录邀请按钮 + 员工信息编辑页 ==================== */
.contacts-search-row {
  display: flex;
  align-items: center;
  gap: 8px;
}
.contacts-search-row .contacts-search {
  flex: 1;
  min-width: 0;
}
.contacts-invite-btn {
  flex-shrink: 0;
  width: 36px;
  height: 36px;
  border: none;
  border-radius: 8px;
  background: var(--card-bg);
  color: var(--accent);
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
}
.contacts-invite-btn:active { background: var(--border); }

/* 员工信息编辑页（通讯录右击 / 长按进入） */
#view-member-edit.active { display: block; }
.member-edit-wrap {
  padding: 16px;
  padding-bottom: calc(var(--nav-height, 56px) + 24px);
}
.me-head {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-bottom: 18px;
}
.me-head-avatar {
  width: 52px;
  height: 52px;
  border-radius: 9.6px;   /* v1574：12→9.6 */
  font-size: 22px;
}
.me-head-name {
  font-size: var(--fs-card-title);
  font-weight: 600;
  color: var(--text);
}
.me-head-sub {
  font-size: var(--fs-caption);
  color: var(--text-secondary);
  margin-top: 2px;
}
.me-avatar-picker {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
}
.me-actions {
  display: flex;
  gap: 8px;
  margin-top: 20px;
}
.me-actions .action-btn { flex: 1; }
.me-danger { color: #e5484d; }

/* 邀请码弹层 */
.invite-sheet {
  padding: 20px 16px 16px;
  text-align: center;
}
.invite-title {
  font-size: var(--fs-card-title);
  font-weight: 600;
  color: var(--text);
}
.invite-sub {
  font-size: var(--fs-caption);
  color: var(--text-secondary);
  margin-top: 6px;
  line-height: 1.6;
}
.invite-code {
  font-family: monospace;
  font-size: var(--fs-display);
  letter-spacing: 8px;
  color: var(--accent);
  font-weight: 600;
  margin: 16px 0 4px;
}
.invite-acts {
  display: flex;
  gap: 8px;
  margin-top: 16px;
}
.invite-acts .action-btn { flex: 1; }

/* ==================== v1459：员工头像（取消 emoji → 上传图片 / 姓名首字） ==================== */
.u-ava-img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  border-radius: inherit;
}

/* 头像容器统一裁切，避免图片溢出圆角 */
.feed-avatar,
.member-avatar,
.profile-avatar,
.chat-avatar,
.contact-avatar,
.contact-detail-avatar,
.cg-ava,
.assignee-item .avatar {
  overflow: hidden;
}

/* 自带「青色底 + 首字」的方形头像块（编辑页预览 / 头部） */
.u-ava-box {
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  overflow: hidden;
  box-sizing: border-box;
  background: rgba(0, 128, 128, 0.8);
  color: #fff;
  font-weight: 600;
}
.u-ava-box img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

/* 编辑页 · 头像行 + 小按钮 */
.me-ava-row {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-top: 4px;
}
.me-mini-btn {
  border: 0.5px solid var(--border);
  background: var(--card-bg);
  color: var(--text);
  border-radius: 8px;
  padding: 7px 12px;
  font-size: var(--fs-body-2);
  font-family: inherit;
  cursor: pointer;
}
.me-mini-btn:active { background: var(--bg); }

/* ==================== v1462：个人资料页（一行一项） ==================== */
#view-my-profile.active { display: block; }
.pf-wrap {
  padding: 4px 16px calc(var(--nav-height, 56px) + 24px);
}
.pf-row {
  display: flex;
  align-items: center;
  gap: 12px;
  min-height: 46px;
  padding: 8px 0;
  border-bottom: 0.5px solid var(--border);
}
.pf-label {
  width: 72px;
  flex-shrink: 0;
  font-size: var(--fs-body);
  color: var(--text-secondary);
}
.pf-input {
  flex: 1;
  min-width: 0;
  border: none;
  outline: none;
  background: transparent;
  font-family: inherit;
  font-size: var(--fs-body);
  color: var(--text);
  text-align: right;
}
.pf-input::placeholder { color: #b8b8b8; }
/* v1600：.pf-input 默认 text-align:right（左标签右数值的行式表单）；
   标题这类长文本要左对齐，用它覆盖 */
.pf-input.pf-input-l { text-align: left; }
.pf-select { text-align-last: right; }
.pf-static {
  flex: 1;
  min-width: 0;
  text-align: right;
  font-size: var(--fs-body);
  color: var(--text-tertiary);
}
.pf-ava-right {
  flex: 1;
  min-width: 0;
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 10px;
}
.pf-tip {
  font-size: var(--fs-caption);
  color: var(--text-tertiary);
  padding: 10px 0 0;
  line-height: 1.6;
}

/* 「我的」页头部：点它进个人资料 */
.profile-header-arrow {
  flex-shrink: 0;
  font-size: 12px;
  color: var(--accent);
}

/* ==================== v1463：个人资料页头像 = 点击上传 ==================== */
#profileHeader { cursor: pointer; }
.pf-ava-click {
  cursor: pointer;
  line-height: 0;
}
.pf-ava-hint {
  font-size: var(--fs-caption);
  color: var(--text-tertiary);
  flex-shrink: 0;
}

/* ==================== v1464：员工信息页（独立页面，替代原弹层） ==================== */
#view-member-detail.active { display: block; }
.member-detail-wrap {
  padding-bottom: calc(var(--nav-height, 56px) + 24px);
}
.md-head {
  background: var(--card-bg);
  padding: 22px 16px 18px;
  text-align: center;
  margin-bottom: 8px;
}
.md-head .u-ava-box {
  margin: 0 auto 10px;
}
.md-name {
  font-size: var(--fs-title-2);
  font-weight: 500;
  color: var(--text);
}
.md-sub {
  font-size: var(--fs-caption);
  color: var(--text-secondary);
  margin-top: 4px;
}
.md-rows {
  background: var(--card-bg);
  padding: 0 16px;
}
.md-copy {
  flex-shrink: 0;
  font-size: var(--fs-caption);
  color: var(--accent);
  cursor: pointer;
  padding-left: 10px;
}
.md-acts {
  display: flex;
  gap: 8px;
  padding: 16px;
}
.md-acts .action-btn { flex: 1; }

/* ==================== v1465：会议模块 ==================== */
#view-meeting.active { display: block; }
.mt-head-btn {
  font-size: var(--fs-body-2);
  color: var(--accent);
  cursor: pointer;
}
/* v1469：页头有两个操作（＋新建 / 会议室）时必须留间距，否则会粘成「＋新建会议室」 */
.mt-head-btn + .mt-head-btn { margin-left: 14px; }

/* 7 天日历条 */
.mt-strip {
  display: flex;
  gap: 6px;
  padding: 10px 12px;
  background: var(--card-bg);
  border-bottom: 0.5px solid var(--border);
}
.mt-day {
  flex: 1;
  text-align: center;
  padding: 6px 0 5px;
  border-radius: 8px;
  cursor: pointer;
}
/* v1515：一周条不再每格都上灰底 —— 整条平铺卡片白（与展开后月历同色），只有点选的那天才出灰框 */
.mt-day.on { background: #e9ebed; }   /* 比 --bg(#f5f6f7) 深一档，白底上才看得出框；不与 .today 的 box-shadow 冲突 */
.mt-day.today { box-shadow: inset 0 0 0 1px #b3d8d8; }
.mt-day-w { font-size: var(--fs-caption); color: var(--text-tertiary); }   /* v1597：日历文字统一 +1px */
.mt-day-d { font-size: var(--fs-body); font-weight: 500; color: var(--text); margin-top: 2px; }   /* v1597：+1 */
.mt-day-l { font-size: var(--fs-micro); line-height: 1.15; color: var(--text-tertiary); }   /* v1597：+1 */
.mt-day-l.fest, .mt-day-l.off { color: #d14343; }
.mt-day-l.work { color: #8a8a8a; }
.mt-day-c { font-size: var(--fs-micro); height: 13px; color: #008080; }   /* v1597：+1 */
.mt-day-c:empty { height: 12px; }

/* v1480：双箭头展开整月 */
/* v1499：一周条 + 展开整月的同一行，两端放「上一周 / 下一周」 */
.mt-week-bar {
  display: flex;
  align-items: center;
  background: var(--card-bg);
  padding: 0 6px;
}
.mt-week-bar .mt-more { flex: 1; }
.mt-week-nav {
  width: 34px;
  text-align: center;
  font-size: var(--fs-title-1-plus);   /* v1516：20 → 26（+30%），与月历翻页箭头观感对齐 */
  line-height: 1;
  color: var(--text-secondary);
  padding: 6px 0;
  cursor: pointer;
  user-select: none;
  flex-shrink: 0;
}
.mt-week-nav.hide { visibility: hidden; }
/* v1499：会议模块二级底部导航（日程 / ＋ / 会议室）替换全局导航 */
body.mt-sub-nav #bottomNav { display: none !important; }
.mt-nav-plus {
  width: 43px;
  height: 43px;
  border-radius: 50%;
  background: #009999;
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 2px 8px rgba(0, 153, 153, 0.35);
  cursor: pointer;
  flex-shrink: 0;
  margin: 0 10px;
  align-self: center;
  transition: transform 0.2s;
}
.mt-nav-plus span { display: flex; }
.mt-nav-plus:active { transform: scale(0.9); }
.mt-more {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 4px;
  padding: 7px 0 3px;
  font-size: var(--fs-body-2);   /* v1597：日历控制条文字 +1 */
  color: var(--text-tertiary);
  background: var(--card-bg);
  cursor: pointer;
}
.mt-more-ico { display: inline-flex; align-items: center; }
.mt-more-ico svg { display: block; }
.mt-more-ico.up svg { transform: rotate(180deg); }
.mt-month {
  background: var(--card-bg);
  padding: 6px 12px 12px;
  border-bottom: 0.5px solid var(--border);
}
.mt-month-h {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 2.2px 2px 8.8px;   /* v1493：上下各 +10% */
}
.mt-month-t { font-size: var(--fs-card-title); font-weight: 600; color: var(--text); }   /* v1597：15 → 16（日历文字 +1） */
.mt-month-nav { font-size: var(--fs-title-1-plus); line-height: 1; color: var(--text-secondary); padding: 0 12px; cursor: pointer; }   /* v1493：18 → 23.4（+30%） */
.mt-month-w {
  display: grid;
  grid-template-columns: 24px repeat(7, 1fr);   /* v1513：左侧留出周数列 */
  text-align: center;
  font-size: var(--fs-caption);   /* v1597：11 → 12 */
  color: var(--text-tertiary);
  padding-bottom: 4px;
}
/* v1513：日期格间距整体缩 20%：4 → 3.2px（行=每周之间，列=同周日期之间） */
.mt-month-g { display: grid; grid-template-columns: 24px repeat(7, 1fr); gap: 3.2px; }
/* v1513：月历每行行首的 ISO 周数 */
.mt-wkno, .mt-wkno-h {
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--text-tertiary);
  font-variant-numeric: tabular-nums;
}
.mt-wkno { font-size: var(--fs-body-2); opacity: .8; }   /* v1597：12 → 13 */
.mt-wkno-h { font-size: var(--fs-caption); }              /* v1597：11 → 12 */
.mt-mcell {
  height: 40px;   /* v1513：46 → 40，月历整体压矮（行距 43.2px） */
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 1px;
  position: relative;
  font-size: var(--fs-body-2);
  color: var(--text);
  border-radius: 6px;
  cursor: pointer;
}
/* v1489：格子里第二行是农历（初一显示月名）；节日/休/班用颜色区分 */
.mt-md { font-size: var(--fs-body); line-height: 1.15; }   /* v1597：14 → 15 */
.mt-ml { font-size: var(--fs-micro); line-height: 1.2; color: var(--text-tertiary); }   /* v1597：+1 */
.mt-ml.fest, .mt-ml.off { color: #d14343; }
.mt-ml.work { color: #8a8a8a; }
.mt-mcell.on .mt-md { color: #fff; }
.mt-mcell.on .mt-ml { color: rgba(255, 255, 255, 0.85); }
.mt-mcell.empty { visibility: hidden; cursor: default; }
.mt-mcell.today { box-shadow: inset 0 0 0 1px #b3d8d8; }
.mt-mcell.on { background: #008080; color: #fff; }
.mt-mcell i {
  position: absolute;
  top: 2px;
  right: 5px;
  font-style: normal;
  font-size: var(--fs-micro);   /* v1597：日历角标 +1 */
  line-height: 1;
  color: #008080;
}
.mt-mcell.on i { color: #cdecec; }
.mt-seg-reset { padding: 10px 12px; font-size: var(--fs-caption); color: var(--accent); cursor: pointer; }

/* v1487：重复会议的日期预览 */
.mt-rep-preview { padding: 8px 0 2px; border-top: 0.5px solid var(--border); }
.mt-rep-h { font-size: var(--fs-caption); color: var(--text-secondary); margin-bottom: 4px; }
.mt-rep-list { font-size: var(--fs-caption); line-height: 1.75; color: var(--text-tertiary); word-break: break-all; }

/* v1483：循环会议的「重复日」多选 */
.mt-weekdays { flex: 1; display: flex; flex-wrap: wrap; gap: 6px; justify-content: flex-end; }
.mt-wd {
  width: 30px;
  height: 30px;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: var(--fs-caption);
  color: var(--text-secondary);
  background: var(--bg);
  cursor: pointer;
}
.mt-wd.on { background: #008080; color: #fff; }

/* 我的 / 全部 */
.mt-seg {
  display: flex;
  background: var(--card-bg);
  border-bottom: 0.5px solid var(--border);
}
.mt-seg-item {
  flex: 1;
  text-align: center;
  padding: 10px 0;
  font-size: var(--fs-body-2);
  color: var(--text-secondary);
  cursor: pointer;
}
.mt-seg-item.on {
  color: #008080;
  font-weight: 500;
  border-bottom: 2px solid #008080;
}

/* 列表 */
.mt-list { padding: 10px 12px calc(var(--nav-height, 56px) + 24px); }
/* v1478：日期字号 +2px 加粗；与下方卡片间距 14→10（-29%），靠日期下移而非删内容 */
.mt-group-h {
  font-size: var(--fs-body);
  font-weight: 400;
  color: var(--text-tertiary);
  margin: 8px 0 8px;
  display: flex;
  align-items: center;
  gap: 6px;
}
.mt-group-n { font-size: var(--fs-caption); font-weight: 400; }
.mt-item {
  display: block;
  background: var(--card-bg);
  border-radius: 8px;
  padding: 10px 12px;
  margin-bottom: 16px;
  cursor: pointer;
  border-left: 3px solid var(--border);
}
.mt-item.st-ongoing { border-left-color: #008080; }
.mt-item.st-done { border-left-color: #d9d9d9; }
.mt-item.st-cancelled { border-left-color: #e8e8e8; opacity: 0.6; }
.mt-time { width: 44px; flex-shrink: 0; text-align: center; }
.mt-start { font-size: var(--fs-body-2); font-weight: 500; color: var(--text); }
.mt-end { font-size: var(--fs-micro); color: var(--text-tertiary); margin-top: 2px; }
.mt-body { flex: 1; min-width: 0; }
.mt-title { font-size: var(--fs-body); font-weight: 500; color: var(--text); }
.mt-meta { font-size: var(--fs-micro); color: var(--text-tertiary); margin-top: 3px; }
/* v1474 会议卡片：五行竖排（名称/时间/发起人/参会人/会议室），右上角回执徽标 */
.mt-it-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 8px;
  margin-bottom: -0.4px;   /* v1569：标题→时间间距定为 3px（原先 6.4） */
}
.mt-item .mt-title {
  font-size: var(--fs-card-title);
  font-weight: 550;
  line-height: 1.4;
  flex: 1;
  min-width: 0;
}
.mt-it-row { display: flex; align-items: baseline; gap: 8px; padding: 1px 0; }
.mt-it-time { margin-bottom: 3px; }   /* v1569：时间→发起人定为 7px（原先 4） */
.mt-it-time .mt-it-v { flex: 1; }   /* 时间不再有「时间」标签，值直接左对齐 */
.mt-it-k { width: 42px; flex-shrink: 0; font-size: var(--fs-body-2); color: var(--text-tertiary); }
.mt-it-v {
  flex: 1;
  min-width: 0;
  font-size: var(--fs-body);
  line-height: 1.5;
  color: var(--text);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.mt-it-st { font-style: normal; font-size: var(--fs-caption); color: var(--text-tertiary); margin-left: 6px; }
.mt-it-st.st-ongoing { color: #008080; }
.mt-empty {
  text-align: center;
  color: var(--text-tertiary);
  font-size: var(--fs-body-2);
  padding: 48px 20px;
}
.mt-tip {
  font-size: var(--fs-caption);
  color: var(--text-tertiary);
  padding: 14px 4px 0;
  line-height: 1.6;
}

/* 会议室管理 */
.mt-wrap { padding: 8px 12px calc(var(--nav-height, 56px) + 24px); }
.mt-room {
  display: flex;
  align-items: center;
  gap: 8px;
  background: var(--card-bg);
  border-radius: 8px;
  padding: 12px;
  margin-bottom: 8px;
}
.mt-room-main { flex: 1; min-width: 0; }
.mt-room-name { font-size: var(--fs-body); font-weight: 500; color: var(--text); }
.mt-off {
  font-size: var(--fs-micro);
  color: var(--text-tertiary);
  background: var(--bg);
  border-radius: 3px;
  padding: 1px 5px;
  margin-left: 6px;
}
.mt-room-meta { font-size: var(--fs-caption); color: var(--text-secondary); margin-top: 3px; }
.mt-mini {
  flex-shrink: 0;
  font-size: var(--fs-caption);
  color: var(--accent);
  cursor: pointer;
  padding: 4px 6px;
}
.mt-mini.danger { color: #e5484d; }
/* v1507：会议室详情 —— 占用状态 / 当天时间轴 / 会议清单 */
.mt-rd-card { background: var(--card-bg); border-radius: 8px; padding: 14px 12px; margin-bottom: 10px; }
.mt-rd-top { display: flex; align-items: center; gap: 8px; }
.mt-rd-top .mt-room-name { flex: 1; min-width: 0; font-size: var(--fs-card-title); }
.mt-rd-state { margin-top: 10px; font-size: var(--fs-body-2); line-height: 1.45; border-radius: 6px; padding: 8px 10px; }
.mt-rd-state.free { background: #e7f5ec; color: #16a34a; }
.mt-rd-state.busy { background: #fdecec; color: #d14343; }
.mt-rd-state.booked { background: #fff7e6; color: #d97706; }
.mt-rd-datebar { display: flex; align-items: center; justify-content: space-between; background: var(--card-bg); border-radius: 8px; padding: 3px 6px; margin-bottom: 10px; }
.mt-rd-date { font-size: var(--fs-body-2); color: var(--text); }
.mt-rd-tlwrap { background: var(--card-bg); border-radius: 8px; padding: 12px 12px 10px; margin-bottom: 10px; }
.mt-tl { position: relative; height: 26px; background: var(--bg); border-radius: 5px; }
.mt-tl-bar { position: absolute; top: 0; bottom: 0; border-radius: 5px; background: #008080; color: #fff; font-size: var(--fs-micro); display: flex; align-items: center; justify-content: center; cursor: pointer; overflow: hidden; }
.mt-tl-bar.st-done { background: #b9c0c4; }
.mt-tl-now { position: absolute; top: -4px; bottom: -4px; width: 2px; background: #e5484d; border-radius: 1px; }
.mt-tl-axis { position: relative; height: 15px; margin-top: 3px; }
.mt-tl-tick { position: absolute; transform: translateX(-50%); font-size: var(--fs-micro); color: var(--text-tertiary); white-space: nowrap; }
.mt-rd-list { background: var(--card-bg); border-radius: 8px; overflow: hidden; }
.mt-rd-row { display: flex; align-items: center; gap: 8px; padding: 10px 12px; border-bottom: 0.5px solid var(--border); cursor: pointer; }
.mt-rd-row:last-child { border-bottom: none; }
/* v1510：会议室列表底部「＋ 新建会议室」 */
.mt-room-add { margin-top: 10px; background: var(--card-bg); border: 1px dashed #b9d8d8; color: #008080; border-radius: 8px; text-align: center; font-size: var(--fs-body); padding: 11px 0; cursor: pointer; }
.mt-room-add:active { background: #f2fafa; }
/* v1510：时间轴上「已选时段」与预定行 */
.mt-tl-pick { position: absolute; top: -2px; bottom: -2px; border-radius: 5px; background: rgba(0, 128, 128, 0.18); border: 1px solid #008080; display: flex; align-items: center; justify-content: center; pointer-events: none; }
.mt-tl-pick b { font-size: var(--fs-micro); color: #006666; font-weight: 600; }
.mt-rd-bookrow { display: flex; align-items: center; gap: 8px; margin-top: 10px; }
.mt-rd-picktxt { flex: 1; min-width: 0; font-size: var(--fs-caption); color: var(--text-secondary); }
.mt-rd-bookrow .action-btn { flex: 0 0 auto; padding-left: 16px; padding-right: 16px; }
.mt-rd-bookrow .mt-rd-book { flex: 1 1 auto; }   /* v1513：已选文本移到上一行后，预定按钮铺开 */
.mt-rd-hint { margin-top: 9px; font-size: var(--fs-caption); color: var(--text-tertiary); }
/* v1513：选中时段后可选时长（0.5 / 1 / 1.5 / 2 小时） */
.mt-rd-pickrow { display: flex; align-items: center; justify-content: space-between; gap: 8px; flex-wrap: wrap; margin-top: 10px; }
.mt-rd-pickrow .mt-rd-picktxt { flex: 0 1 auto; }
.mt-rd-durs { display: flex; gap: 6px; flex-wrap: wrap; }
.mt-rd-dur { font-size: var(--fs-caption); line-height: 1.2; padding: 5px 8px; border-radius: 6px; background: var(--bg); color: var(--text-secondary); cursor: pointer; }
.mt-rd-dur.on { background: #008080; color: #fff; }

.mt-rd-time { flex-shrink: 0; font-size: var(--fs-caption); color: var(--text-secondary); font-variant-numeric: tabular-nums; }
.mt-rd-title { flex: 1; min-width: 0; font-size: var(--fs-body-2); color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mt-rd-org { flex-shrink: 0; font-size: var(--fs-micro); color: var(--text-tertiary); }


/* 会议室表单 */
.mt-form {
  background: var(--card-bg);
  border-radius: 8px;
  padding: 0 12px;
}
.mt-form .pf-row { border-bottom: 0.5px solid var(--border); }
.mt-form .pf-row:last-child { border-bottom: none; }
.mt-devices {
  flex: 1;
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  justify-content: flex-end;
}
.mt-dev {
  font-size: var(--fs-caption);
  padding: 5px 10px;
  border-radius: 6px;
  background: var(--bg);
  color: var(--text-secondary);
  cursor: pointer;
}
.mt-dev.on {
  background: #008080;          /* v1512：选中态改为实心主色，浅青底在浅色背景上分不清 */
  color: #fff;
}

/* ==================== v1466：会议表单 / 选择器 / 详情 / 提醒 ==================== */
.mt-time-range {
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 6px;
}
.mt-time-in { flex: 1 1 auto; width: auto; min-width: 0; text-align: right; }   /* v1506：占满右侧、与其它行右对齐 */
.mt-dash { color: var(--text-tertiary); }
.mt-pick-row { cursor: pointer; }
.ta-auto {
  width: 100%;
  min-height: 44px;
  max-height: 200px;
  border: none;
  outline: none;
  resize: none;
  background: transparent;
  font-family: inherit;
  font-size: var(--fs-body);
  line-height: 1.6;
  color: var(--text);
  text-align: left;
  padding: 6px 0;
  overflow-y: auto;
}
.mt-agenda { box-sizing: border-box; }
.mt-avs { flex: 1; display: flex; align-items: center; justify-content: flex-end; gap: 6px; }
.mt-avs-wrap { flex-wrap: wrap; }
.mt-av-more {
  font-size: var(--fs-micro);
  color: var(--text-secondary);
  background: var(--bg);
  border-radius: 6px;
  padding: 4px 6px;
}
.mt-av { line-height: 0; cursor: pointer; }
/* v1468：会议里参会人一律显示人名（不再用头像） */
.mt-att-names {
  flex: 1;
  text-align: right;
  font-size: var(--fs-body-2);
  line-height: 1.6;
  color: var(--text);
  word-break: break-all;
}
.mt-att-chips { flex: 1; display: flex; flex-wrap: wrap; gap: 6px; justify-content: flex-end; }
.mt-att-chip {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-size: var(--fs-caption);
  line-height: 1.4;
  color: var(--text);
  background: var(--bg);
  border-radius: 6px;
  padding: 3px 8px;
  cursor: pointer;
}
/* 发起人：同一个灰框，只多一个「发起人」小标签 */
.mt-org-tag {
  font-style: normal;
  font-size: var(--fs-micro);
  line-height: 1.5;
  color: var(--text-secondary);
  background: #fff;
  border-radius: 3px;
  padding: 0 4px;
}
/* v1473 用户要求：回执不写文字，用名字后的小圆圈表达
   已接受＝绿底白✓ ｜ 待接受＝灰边空圈 ｜ 已拒绝＝红底白× */
.mt-rb {
  width: 16px;
  height: 16px;
  box-sizing: border-box;
  border-radius: 50%;
  border: 1px solid #d0d0d0;
  background: #f7f7f7;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.mt-rb.ok { background: #16a34a; border-color: #16a34a; }
.mt-rb.no { background: #e5484d; border-color: #e5484d; }
.mt-rb.ok::after { content: '✓'; color: #fff; font-size: var(--fs-micro); line-height: 1; }
.mt-rb.no::after { content: '×'; color: #fff; font-size: var(--fs-body); line-height: 1; transform: translate(1px, -1.3px); }
.mt-resp {
  flex-shrink: 0;
  font-size: var(--fs-micro);
  line-height: 1.5;
  border-radius: 4px;
  padding: 1px 7px;
  background: #fff7e6;
  color: #d97706;
}
.mt-resp.accepted { background: #e7f5ec; color: #16a34a; }
.mt-resp.declined { background: #fef2f2; color: #dc2626; }
.mt-myresp { margin: 14px 16px 0; font-size: var(--fs-caption); text-align: right; color: var(--text-tertiary); }
.mt-myresp.r-accepted { color: #16a34a; }
.mt-myresp.r-pending { color: #d97706; }
.mt-myresp.r-declined { color: #dc2626; }

/* v1476：回执里不可点的按钮（拒绝后那个「接受」）明确画成灰底灰字 */
.mt-detail .action-btn:disabled {
  background: #f5f6f7;
  border-color: #e5e5e5;
  color: #bfbfbf;
  opacity: 1;
}
/* v1473：详情页底部按钮与内容左右边沿对齐（.md-rows 的内容边距是 16px） */
.mt-detail > .me-actions { margin: 20px 16px 0; }
/* v1473 用户要求：会议详情页所有字号 +1px */
.mt-detail .mt-d-title { font-size: var(--fs-content); }
.mt-detail .mt-st { font-size: var(--fs-caption); }
.mt-detail .mt-d-sub { font-size: var(--fs-body-2); }
.mt-detail .pf-label { font-size: var(--fs-body); }
.mt-detail .pf-static { font-size: var(--fs-body); }
.mt-detail .mt-para { font-size: var(--fs-body); }
.mt-detail .mt-min-h { font-size: var(--fs-body); }
.mt-detail .mt-min-edit { font-size: var(--fs-body-2); }
.mt-detail .mt-min-body { font-size: var(--fs-body); }
.mt-detail .mt-tip { font-size: var(--fs-body-2); }
.mt-detail .mt-att-chip { font-size: var(--fs-body-2); }
.mt-detail .mt-myresp { font-size: var(--fs-body-2); }
.mt-detail .action-btn { font-size: var(--fs-body); }
.mt-detail textarea.ta-auto { font-size: var(--fs-body); }

/* 冲突提示 */
.mt-alert {
  margin: 12px 0 0;
  background: #fdecec;
  color: #c0392b;
  border-radius: 8px;
  padding: 10px 12px;
  font-size: var(--fs-caption);
  line-height: 1.7;
}
.mt-sugs { display: flex; flex-direction: column; gap: 6px; margin-top: 8px; }
.mt-sug {
  background: #fff;
  color: var(--accent);
  border-radius: 6px;
  padding: 6px 10px;
  font-size: var(--fs-caption);
  cursor: pointer;
}

/* 选择器弹层 */
.mt-pick { padding: 16px 14px 14px; }
.mt-pick-h {
  font-size: var(--fs-body);
  font-weight: 500;
  color: var(--text);
  margin-bottom: 10px;
  display: flex;
  align-items: baseline;
  gap: 8px;
}
.mt-pick-sub { font-size: var(--fs-caption); color: var(--text-tertiary); font-weight: 400; }
.mt-pick-list { max-height: 46vh; overflow-y: auto; margin: 0 -4px; }
.mt-pick-item {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 6px;
  border-bottom: 0.5px solid var(--border);
  cursor: pointer;
}
.mt-pick-item.on { background: #f0f8f8; }
.mt-pick-item.dis { opacity: 0.45; }
.mt-pick-main { flex: 1; min-width: 0; }
.mt-pick-tag { flex-shrink: 0; font-size: var(--fs-micro); color: #0a8a4d; }
.mt-pick-tag.busy { color: #c0392b; }
.mt-pick-check { flex-shrink: 0; width: 18px; text-align: center; color: #008080; font-size: 14px; }
/* v1504：会议表单「开始 + 时长」——右侧显示算出来的结束时间 */
.mt-dur-end { flex-shrink: 0; font-size: var(--fs-body-2); color: var(--text-tertiary); font-variant-numeric: tabular-nums; }
.mt-unit { flex-shrink: 0; font-size: var(--fs-body-2); color: var(--text-secondary); }
/* v1504：选参会人弹层顶部的时段说明 */
.mt-att-slot { font-size: var(--fs-caption); color: var(--text-tertiary); margin: 0 0 8px; }
.mt-pick-acts { display: flex; gap: 8px; margin-top: 12px; }
.mt-pick-acts .action-btn { flex: 1; }

/* 详情页 */
.mt-detail { padding-bottom: calc(var(--nav-height, 56px) + 24px); }
.mt-d-head {
  background: var(--card-bg);
  padding: 16px 16px 0;
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 10px;
}
.mt-d-title { font-size: var(--fs-card-title); font-weight: 500; color: var(--text); line-height: 1.45; }
.mt-st {
  flex-shrink: 0;
  font-size: var(--fs-micro);
  border-radius: 4px;
  padding: 2px 7px;
  background: var(--bg);
  color: var(--text-secondary);
}
.mt-st.st-ongoing { background: #e6f2f2; color: #008080; }
.mt-st.st-done { background: var(--bg); color: var(--text-tertiary); }
.mt-st.st-cancelled { background: #f5f5f5; color: var(--text-tertiary); }
.mt-d-sub {
  background: var(--card-bg);
  padding: 6px 16px 14px;
  font-size: var(--fs-caption);
  color: var(--text-tertiary);
  border-bottom: 0.5px solid var(--border);
  margin-bottom: 8px;
}
.mt-para {
  flex: 1;
  text-align: right;
  font-size: var(--fs-body-2);
  line-height: 1.65;
  color: var(--text);
  white-space: pre-wrap;
  word-break: break-word;
}
.mt-minutes {
  background: var(--card-bg);
  padding: 14px 16px;
  margin-top: 8px;
}
.mt-min-h {
  font-size: var(--fs-body);
  font-weight: 500;
  color: var(--text);
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 6px;
}
.mt-min-edit { font-size: var(--fs-caption); color: var(--accent); cursor: pointer; }
.mt-min-body {
  font-size: var(--fs-body-2);
  line-height: 1.7;
  color: var(--text);
  white-space: pre-wrap;
  word-break: break-word;
}

/* 即将开始横幅 */
.mt-soon {
  margin: 10px 12px 0;
  background: #e6f2f2;
  border-radius: 8px;
  padding: 10px 12px;
  cursor: pointer;
}
.mt-soon-t { font-size: var(--fs-body-2); font-weight: 500; color: #00695c; }
.mt-soon-s { font-size: var(--fs-micro); color: #4a8a86; margin-top: 3px; }

/* ==================== v1514：汇报模块（M1 上报）==================== */
body.rp-sub-nav #bottomNav { display: none !important; }
.rp-wrap { padding: 8px 12px calc(var(--nav-height, 56px) + 24px); }
.rp-group-h { font-size: var(--fs-body); color: var(--text-tertiary); margin: 8px 0; display: flex; align-items: center; gap: 6px; }
.rp-group-n { font-size: var(--fs-body-2); color: var(--text-tertiary); }
.rp-card { background: var(--card-bg); border-radius: 10px; padding: 12px 14px; margin-bottom: 10px; cursor: pointer; }
.rp-card.unread { box-shadow: inset 0 0 0 1px #b3d8d8; }
/* v1517：三种汇报的卡片统一「发布人头像 + 名字 + 状态徽标」抬头 */
.rp-who { display: flex; align-items: center; gap: 10px; margin-bottom: 9px; }
.rp-who-m { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.rp-who-n { font-size: var(--fs-body); font-weight: 500; color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rp-who-s { font-size: var(--fs-caption); color: var(--text-tertiary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rp-av { display: inline-flex; align-items: center; justify-content: center; border-radius: 6px; overflow: hidden; flex-shrink: 0; }   /* v1601：6.4 → 6 */
.rp-av img { width: 100%; height: 100%; object-fit: cover; display: block; }
.rp-av-t { background: rgba(0, 128, 128, .8); color: #fff; font-weight: 600; line-height: 1; }
.rp-card-top { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }
.rp-tag { font-size: var(--fs-caption); color: #008080; background: #e6f4f4; border-radius: 5px; padding: 2px 7px; flex-shrink: 0; }
.rp-period { font-size: var(--fs-body); color: var(--text-secondary); }
.rp-st { margin-left: auto; font-style: normal; font-size: var(--fs-caption); padding: 2px 8px; border-radius: 10px; flex-shrink: 0; }
.rp-st.draft { color: #8f959e; background: #eef0f2; }
.rp-st.wait { color: #c77700; background: #fff4e0; }
.rp-st.done { color: #0a8a4d; background: #e4f6ec; }
.rp-card-body { font-size: var(--fs-body); color: var(--text); line-height: 1.5; margin-bottom: 8px; word-break: break-word; }
.rp-card-foot { display: flex; justify-content: space-between; gap: 10px; font-size: var(--fs-caption); color: var(--text-tertiary); }
.rp-empty { text-align: center; padding: 64px 20px; color: var(--text-tertiary); font-size: var(--fs-body); }
.rp-empty-tip { font-size: var(--fs-body-2); margin-top: 6px; opacity: .8; }
.rp-seg { display: flex; gap: 8px; background: var(--card-bg); border-radius: 10px; padding: 8px; margin-bottom: 10px; }
.rp-seg-i { flex: 1; text-align: center; font-size: var(--fs-body); padding: 8px 0; border-radius: 7px; color: var(--text-secondary); background: var(--bg); cursor: pointer; }
.rp-seg-i.on { background: #008080; color: #fff; }
.rp-form { background: var(--card-bg); border-radius: 10px; padding: 0 12px; }
.rp-form .pf-row { border-bottom: 0.5px solid var(--border); }
.rp-form .pf-row:last-child { border-bottom: none; }
.rp-fields { padding-top: 2px; }
.rp-field { padding: 12px 0; border-top: 0.5px solid var(--border); }
.rp-fields .rp-field:first-child { border-top: none; }
.rp-field-h { display: flex; align-items: center; gap: 6px; margin-bottom: 8px; }
.rp-field-l { font-size: var(--fs-body); color: var(--text); }
.rp-req { font-style: normal; font-size: var(--fs-micro); color: #d14343; background: #fbeceb; padding: 1px 6px; border-radius: 4px; }
.rp-req.soft { color: var(--text-tertiary); background: var(--bg); }
.rp-ta { width: 100%; border: none; background: var(--bg); border-radius: 8px; padding: 9px 10px; font-size: var(--fs-body); line-height: 1.55; color: var(--text); resize: vertical; min-height: 76px; box-sizing: border-box; font-family: inherit; }
.rp-ta::placeholder { color: #b8b8b8; }
.rp-tos { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.rp-to { font-size: var(--fs-body-2); background: #e6f4f4; color: #008080; border-radius: 6px; padding: 5px 10px; }
.rp-to-none { font-size: var(--fs-body-2); color: var(--text-tertiary); }
.rp-to-add { font-size: var(--fs-body-2); color: #008080; border: 0.5px dashed #9ccfcf; border-radius: 6px; padding: 5px 10px; cursor: pointer; }
.rp-detail { background: var(--card-bg); border-radius: 10px; padding: 14px; margin-bottom: 10px; }
.rp-d-top { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; }
.rp-d-meta { display: flex; justify-content: space-between; align-items: center; gap: 10px; font-size: var(--fs-body); color: var(--text-tertiary); margin-bottom: 8px; }   /* v1601：13 → 14（详情页文字 +1） */
/* v1602：汇报详情头部 = 左侧发布者头像 + 右侧两行（作者+时间 / 收件人） */
.rp-d-head { display: flex; align-items: flex-start; gap: 10px; margin-bottom: 10px; }
.rp-d-head > .rp-av { transform: translateY(2px); }   /* v1605：头像下移累计 2px */
.rp-d-lines { flex: 1; min-width: 0; }
.rp-d-line1 { display: flex; justify-content: space-between; align-items: baseline; gap: 10px; font-size: var(--fs-body); color: var(--text-tertiary); margin-bottom: 4px; }
.rp-d-who { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rp-d-time { flex-shrink: 0; font-size: var(--fs-body-2); }   /* 日期/时间：不随详情页 +1 */
.rp-d-tos { font-size: var(--fs-body); color: var(--text-secondary); padding-bottom: 10px; border-bottom: 0.5px solid var(--border); display: flex; align-items: center; gap: 8px; }
.rp-d-read { margin-left: auto; font-size: var(--fs-body-2); color: #0a8a4d; background: #e4f6ec; padding: 2px 8px; border-radius: 10px; }
.rp-d-body { padding-top: 2px; }
.rp-d-item { padding: 10px 0; border-bottom: 0.5px dashed var(--border); }
.rp-d-item:last-child { border-bottom: none; }
.rp-d-l { font-size: var(--fs-body); color: var(--text-tertiary); margin-bottom: 6px; }
.rp-d-v { font-size: var(--fs-card-title); line-height: 1.65; color: var(--text); word-break: break-word; }
.rp-d-v.empty { color: var(--text-tertiary); }
.rp-tip { font-size: var(--fs-body-2); color: var(--text-tertiary); text-align: center; margin-top: 14px; }
.rp-mask { position: fixed; inset: 0; background: rgba(0, 0, 0, .45); display: flex; align-items: flex-end; justify-content: center; z-index: 3000; }
.rp-picker { width: 100%; max-width: 480px; background: #fff; border-radius: 14px 14px 0 0; max-height: 76vh; display: flex; flex-direction: column; }
.rp-picker-h { display: flex; align-items: center; justify-content: space-between; padding: 14px 16px; font-size: var(--fs-card-title); font-weight: 500; border-bottom: 0.5px solid var(--border); }
.rp-picker-x { font-size: var(--fs-body); color: var(--text-tertiary); font-weight: 400; cursor: pointer; }
.rp-picker-list { overflow-y: auto; padding: 4px 0; flex: 1; }
.rp-pk-item { display: flex; align-items: center; gap: 10px; padding: 11px 16px; border-bottom: 0.5px solid var(--border); cursor: pointer; }
.rp-pk-nm { font-size: var(--fs-body); color: var(--text); flex-shrink: 0; }
.rp-pk-sub { font-size: var(--fs-caption); color: var(--text-tertiary); flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rp-pk-ck { font-style: normal; font-size: var(--fs-body); color: #008080; width: 16px; text-align: center; }
.rp-picker-f { padding: 10px 16px calc(10px + env(safe-area-inset-bottom)); border-top: 0.5px solid var(--border); }
.rp-picker-f .action-btn { width: 100%; }

/* ---------- v1514：汇报 · 分类分段与下达 ---------- */
.rp-kind { display: flex; gap: 6px; padding: 10px 12px 2px; }
.rp-kind-i { flex: 1; text-align: center; font-size: var(--fs-body); padding: 8px 0; border-radius: 8px; color: var(--text-secondary); background: var(--card-bg); cursor: pointer; }
.rp-kind-i.on { background: #008080; color: #fff; font-weight: 500; }
.rp-tag.dn { color: #4a5fa5; background: #eef1fa; }
.rp-card-title { font-size: var(--fs-card-title); font-weight: 500; color: var(--text); line-height: 1.4; margin-bottom: 7px; word-break: break-word; }
.rp-prog { height: 4px; border-radius: 2px; background: rgba(0, 128, 128, .12); overflow: hidden; margin: 2px 0 8px; }
.rp-prog i { display: block; height: 100%; background: #008080; border-radius: 2px; }
.rp-chips { display: flex; flex-wrap: wrap; gap: 8px; }
.rp-chip { font-size: var(--fs-body-2); padding: 6px 12px; border-radius: 7px; background: var(--bg); color: var(--text-secondary); cursor: pointer; }
.rp-chip.on { background: #008080; color: #fff; }
.rp-subrow { display: flex; align-items: center; gap: 10px; margin-top: 10px; }
.rp-subrow .pf-input { flex: 1; }
.rp-dept-fixed { flex: 1; min-width: 0; font-size: var(--fs-body); color: var(--text); }
textarea.rp-ta.ta-auto { min-height: 184px; }   /* 自适应文本框：初始约 8 行（92 → 184），撑高到 240 后转滚动 */
.rp-subtip { font-size: var(--fs-caption); color: var(--text-tertiary); flex-shrink: 0; }
.rp-d-title { font-size: var(--fs-content); font-weight: 500; color: var(--text); line-height: 1.45; margin: 2px 0 8px; word-break: break-word; }
.rp-ack { margin-top: 12px; padding-top: 12px; border-top: 0.5px solid var(--border); }
.rp-ack-h { font-size: var(--fs-body-2); color: var(--text-secondary); margin-bottom: 7px; }
.rp-ack-h b { color: #008080; font-size: var(--fs-body); }
.rp-ack-sub { font-size: var(--fs-body-2); color: var(--text-tertiary); line-height: 1.6; }
.rp-ack-sub.done { color: #0a8a4d; }
.rp-replies { margin-top: 12px; padding-top: 12px; border-top: 0.5px solid var(--border); }
.rp-reply { display: flex; flex-direction: column; gap: 3px; padding: 8px 0; border-bottom: 0.5px dashed var(--border); }
.rp-reply:last-child { border-bottom: none; }
.rp-reply-n { font-size: var(--fs-body-2); color: #008080; }
.rp-reply-t { font-size: var(--fs-body); color: var(--text); line-height: 1.55; word-break: break-word; }
.rp-reply-d { font-style: normal; font-size: var(--fs-caption); color: var(--text-tertiary); }

/* ---------- v1514：汇报 · 奏折（M3） ---------- */
.rp-tag.mem { color: #8a5a1a; background: #fdf3e3; }
.rp-tipbar { background: var(--card-bg); border-radius: 9px; padding: 10px 12px; margin-bottom: 10px; font-size: var(--fs-body-2); color: var(--text-secondary); line-height: 1.6; }
.rp-tipbar b { color: #008080; }
.rp-tipbar.warn { background: #fdf6e8; color: #8a5a1a; }
.rp-tipbar.warn b { color: #c77700; }
.rp-link { color: #008080; cursor: pointer; text-decoration: underline; }
.rp-topics { display: flex; flex-direction: column; gap: 8px; }
.rp-topic { border: 0.5px solid var(--border); border-radius: 8px; padding: 10px 12px; cursor: pointer; background: var(--bg); }
.rp-topic.on { border-color: #008080; background: #e9f5f5; }
.rp-topic-t { display: block; font-size: var(--fs-body); color: var(--text); margin-bottom: 3px; }
.rp-topic.on .rp-topic-t { color: #008080; font-weight: 500; }
.rp-topic-h { display: block; font-size: var(--fs-caption); color: var(--text-tertiary); line-height: 1.5; }
.rp-confirm { width: 86%; max-width: 340px; background: #fff; border-radius: 14px; padding: 20px 18px 16px; margin: auto; }
.rp-mask.rp-mask-center { align-items: center; }
.rp-confirm-t { font-size: var(--fs-card-title); font-weight: 500; color: var(--text); margin-bottom: 8px; }
.rp-confirm-b { font-size: var(--fs-body); color: var(--text-secondary); line-height: 1.65; margin-bottom: 16px; }
.rp-confirm-b b { color: #c77700; }
.rp-confirm-a { display: flex; gap: 10px; }
.rp-confirm-a .action-btn { flex: 1; }

/* ---------- v1520：组织架构页 → 最高层管理团队（奏折收件人） ---------- */
.cg-toptop-h { display: flex; align-items: center; justify-content: space-between; }
.cg-toptop-t { font-size: var(--fs-body); font-weight: 500; color: var(--text); }
.cg-toptop-b { font-size: var(--fs-caption); color: #008080; cursor: pointer; padding: 3px 6px; }
.cg-toptop-d { font-size: var(--fs-micro); color: var(--text-tertiary); margin-top: 4px; }
.cg-toptop-n { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 10px; }
.cg-toptop-tag { font-size: var(--fs-caption); background: #e6f4f4; color: #008080; border-radius: 6px; padding: 4px 10px; }
.cg-toptop-none { font-size: var(--fs-caption); color: var(--text-tertiary); }
/* v1522：额度与规则说明移到奏折页 */
.rp-tipbar.sub { background: none; padding: 0 2px 10px; font-size: var(--fs-caption); color: var(--text-tertiary); display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.rp-quota-in { width: 48px; border: 0.5px solid var(--border); border-radius: 6px; padding: 3px 6px; font-size: var(--fs-body-2); text-align: center; background: var(--card-bg); }

/* ===== v1526：组织架构编辑页（仅超管可见入口） ===== */
.cg-root-main { flex: 1; min-width: 0; }
.cg-root-edit { flex: none; font-size: var(--fs-caption); color: #646a73; background: #fff; border: 0.5px solid #d0d0d0; border-radius: 8px; padding: 5px 14px; cursor: pointer; }
.cg-root-edit:active { background: #f5f6f7; }
.cg-ed-hd { font-size: var(--fs-body); font-weight: 500; color: #1f2329; margin-bottom: 10px; }
.cg-ed-company { font-size: var(--fs-caption); color: #8f959e; margin: 0 2px 8px; }
.cg-ed-list { display: flex; flex-direction: column; gap: 8px; }
.cg-ed-row { background: #fff; border: 0.5px solid #e3e1da; border-radius: 12px; padding: 10px 12px; }
.cg-ed-row-h { display: flex; align-items: center; gap: 8px; }
.cg-ed-ic { flex: none; display: flex; align-items: center; }
.cg-ed-nm { flex: 1; min-width: 0; font-size: var(--fs-body); font-weight: 500; color: #1f2329; border: 0; border-bottom: 1px dashed transparent; background: transparent; padding: 2px 0; }
.cg-ed-nm:focus { outline: none; border-bottom-color: #008080; }
.cg-ed-cnt { flex: none; font-size: var(--fs-caption); color: #8f959e; }
.cg-ed-sel { display: flex; align-items: center; gap: 8px; margin-top: 8px; }
.cg-ed-sel label { flex: none; font-size: var(--fs-caption); color: #8f959e; }
.cg-ed-head { flex: 1; min-width: 0; height: 32px; font-size: var(--fs-body-2); color: #1f2329; border: 0.5px solid #d0d0d0; border-radius: 8px; background: #fff; padding: 0 8px; }
.cg-ed-chips { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.cg-ed-chip { display: inline-flex; align-items: center; gap: 4px; font-size: var(--fs-caption); color: #1f2329; background: #f2f3f5; border-radius: 6px; padding: 4px 8px; }
.cg-ed-chip i { font-style: normal; font-size: var(--fs-body-2); color: #8f959e; cursor: pointer; padding: 0 1px; }
.cg-ed-chip.add { color: #008080; background: #fff; border: 0.5px dashed #9ccfcf; cursor: pointer; }
.cg-ed-none { font-size: var(--fs-caption); color: #b8b8b8; }
.cg-ed-acts { display: flex; gap: 6px; margin-top: 10px; }
.cg-ed-op { flex: 1; height: 30px; font-size: var(--fs-caption); color: #646a73; background: #fff; border: 0.5px solid #d0d0d0; border-radius: 8px; }
.cg-ed-op:active { background: #f5f6f7; }
.cg-ed-op[disabled] { opacity: .45; }
.cg-ed-op.danger { color: #d14343; border-color: #f0c7c7; }
.cg-ed-tip { font-size: var(--fs-micro); color: #b8b8b8; line-height: 1.55; margin-top: 8px; }

.cg-ed-row.sub { border-left: 3px solid #d9eeed; }

/* ===== v1534：组织架构编辑页（沿用只读骨架 + 内联编辑控件） ===== */
.cg-ed-sub { font-size: var(--fs-micro); color: #8f959e; margin-top: 2px; }
.cg-dept-hd.sel .cg-ed-sub { color: rgba(255, 255, 255, .78); }
.cg-ed-mvcol { display: flex; flex-direction: column; align-items: center; flex: none; margin-left: 2px; gap: 10.5px; }   /* v1537：上下箭头视觉间距 12.5 → 20px（+60%） */
.cg-ed-mv { width: 26px; height: 14px; display: flex; align-items: center; justify-content: center; color: #646a73; cursor: pointer; }
.cg-ed-mv.off { opacity: .2; pointer-events: none; }
.cg-ed-mv:active { color: #008080; }
.cg-dept-hd.sel .cg-ed-mv { color: rgba(255, 255, 255, .85); }
.cg-ed-badge { font-style: normal; font-size: var(--fs-micro); color: #008080; background: #e6f4f4; border-radius: 4px; padding: 1px 5px; margin-left: 6px; vertical-align: 1px; }
.cg-ed-x { margin-left: auto; width: 26px; height: 24px; display: flex; align-items: center; justify-content: center; color: #b0b4bb; font-size: var(--fs-body); flex: none; }
.cg-ed-x:active { color: #d14343; }
.cg-ed-addmem { font-size: var(--fs-caption); color: #008080; padding: 7px 0 1px; cursor: pointer; }
.cg-ed-bottom { display: flex; gap: 8px; margin: 2px 0 8px 23px; }   /* v1539：左边与部门行对齐（部门行被 cg-tree-body 缩进 10+1.5+12） */
.cg-ed-bottom .cg-add-btn { flex: 1; height: 37px; padding: 0 16px; }   /* v1539：高度 41 → 37（−10%），两框等宽 */
.cg-ed-bottom .cg-add-btn.danger { color: #d14343; border-color: #f0c7c7; }

/* ===== v1540：部门行内联「负责人 + 人数」（只读页与编辑页同一套） ===== */
.cg-dept-head { flex: none; font-size: var(--fs-micro); color: #8f959e; display: inline-flex; align-items: center; white-space: nowrap; }
.cg-dept-head.none { color: #b8b8b8; }
.cg-dept-badge { font-style: normal; font-size: var(--fs-micro); line-height: 1.4; color: #008080; background: #e6f4f4; border-radius: 4px; padding: 1px 5px; margin-left: 4px; }
.cg-dept-hd .cg-dept-cnt { flex: none; font-size: var(--fs-micro); color: #8f959e; margin: 0 0 0 8px; white-space: nowrap; }
.cg-dept-hd .cg-dept-nm { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.cg-dept-hd.sel .cg-dept-head, .cg-dept-hd.sel .cg-dept-cnt { color: rgba(255, 255, 255, .85); }
.cg-dept-hd.sel .cg-dept-badge { background: rgba(255, 255, 255, .24); color: #fff; }

/* ===== v1545：奏章「呈报」大卡片（替掉右下角圆形＋） ===== */
.rp-filecard { margin: 4px 0 14px; padding: 26px 16px 22px; border: 1px dashed #9ccfcf; border-radius: 14px; background: #f7fcfc; text-align: center; cursor: pointer; }   /* v1552：云雷纹水印已去掉 */
.rp-filecard:active { background: #eef8f8; }
.rp-filecard-ico { display: flex; justify-content: center; color: #008080; margin-bottom: 8px; }
.rp-filecard-t { font-size: var(--fs-title-2); font-weight: 500; color: #008080; letter-spacing: 1px; }
.rp-filecard-s { font-size: var(--fs-caption); color: #8f959e; margin-top: 6px; }
/* v1553：本年额度用完时的占位卡（不可点） */
.rp-filecard.used { border-color: #dfe2e5; background: #fafbfb; cursor: default; }
.rp-filecard.used .rp-filecard-ico, .rp-filecard.used .rp-filecard-t { color: #b0b4bb; }
.rp-filecard.used .rp-filecard-t { font-size: var(--fs-card-title); letter-spacing: 0; }

/* ===== v1555：汇报顶部改为「收 / 交(发)」两段 + 右侧新建按钮（分类挪到底部导航） ===== */
.rp-topbar { display: flex; align-items: center; gap: 8px; padding: 10px 12px 2px; }
.rp-topbar .rp-kind { flex: 1; padding: 0; }
.rp-write { flex: none; width: 44px; height: 35px; display: flex; align-items: center; justify-content: center; border: 0.5px solid #9ccfcf; border-radius: 8px; background: #fff; color: #008080; cursor: pointer; }
.rp-write:active { background: #eef8f8; }

/* ===== v1558：顶部「收 / 交(发)」改成一条白色横条 + 中间细线，仅选中格为青色 ===== */
.rp-topbar .rp-kind { flex: 1; display: flex; gap: 0; padding: 0; height: 36px; background: #fff; border: 0.5px solid #e3e1da; border-radius: 10px; overflow: hidden; }
.rp-topbar .rp-kind-i { flex: 1; display: flex; align-items: center; justify-content: center; padding: 0; font-size: var(--fs-body); color: #646a73; background: transparent; border-radius: 0; }
.rp-topbar .rp-kind-i:first-child { border-right: 0.5px solid rgba(0, 0, 0, .08); }
.rp-topbar .rp-kind-i.on { background: #008080; color: #fff; font-weight: 500; }

/* ===== v1559：选中不填底 → 白底 + 青色加粗字；下面加搜索行（下拉 + 输入 + 大写＋） ===== */
.rp-topbar .rp-kind-i.on { background: transparent; color: #008080; font-weight: 600; }
.rp-searchrow { display: flex; align-items: center; gap: 8px; padding: 8px 12px 2px; }
.rp-sel { flex: none; height: 34px; border: 0.5px solid #d0d0d0; border-radius: 8px; background: #fff; font-size: var(--fs-body-2); color: #646a73; padding: 0 6px; }
.rp-searchin { flex: 1; min-width: 0; height: 34px; border: 0.5px solid #d0d0d0; border-radius: 8px; background: #fff; padding: 0 10px; font-size: var(--fs-body); color: #1f2329; }
.rp-searchin::placeholder { color: #b8b8b8; }
.rp-write.big { width: 46px; height: 34px; }

/* ===== v1560：搜索框内嵌放大镜徽标 ===== */
.rp-searchbox { position: relative; flex: 1; min-width: 0; display: flex; }
.rp-searchico { position: absolute; left: 10px; top: 50%; transform: translateY(-50%); color: #b8b8b8; pointer-events: none; }
.rp-searchbox .rp-searchin { width: 100%; padding-left: 32px; }

/* ===== v1577：审批模块 M1（批红卡片 + 按住用印） ===== */
/* v1580：三段（待我批 / 我申请 / 模板）挪到底部导航，页面顶部不再放分段条 */
body.ap-sub-nav #bottomNav { display: none !important; }
.ap-hd-plus { display: flex; align-items: center; justify-content: center; color: #008080; cursor: pointer; }
.ap-hd-plus:active { opacity: .55; }
.ap-wrap { padding: 10px 12px calc(var(--nav-height, 56px) + 20px); }
.ap-empty { text-align: center; color: var(--text-tertiary); font-size: var(--fs-body); padding: 56px 0 0; }
.ap-empty-tip { font-size: var(--fs-caption); color: #b8b8b8; margin-top: 6px; }
.ap-card { position: relative; background: #FDFCF8; border: 0.5px solid #E8E4D8; border-radius: 12px; padding: 11px 12px 9px; margin-bottom: 10px; cursor: pointer; overflow: hidden; }
.ap-card.plain { background: var(--card-bg); border-color: var(--border); }
.ap-c-top { display: flex; align-items: center; gap: 8px; }
.ap-c-tag { font-size: var(--fs-caption); color: #646a73; background: #F1EFE8; border-radius: 4px; padding: 2px 7px; }
.ap-c-tag.to { background: #eef6f6; color: #008080; }
.ap-c-wait { margin-left: auto; font-size: var(--fs-caption); color: #A32D2D; }
.ap-c-wait.calm { color: #A8A29A; }
.ap-c-title { font-size: var(--fs-card-title); font-weight: 500; color: var(--text); line-height: 1.45; margin-top: 7px; }
.ap-c-meta { display: flex; align-items: center; gap: 6px; margin-top: 7px; font-size: var(--fs-caption); color: var(--text-tertiary); }
.ap-c-meta .rp-av { border-radius: 5px; }
.ap-c-time { margin-left: auto; }
.ap-dot { color: #d9d9d9; }
.ap-c-act { display: flex; align-items: center; gap: 8px; margin-top: 9px; padding-top: 9px; border-top: 0.5px solid #EDEBE4; }
.ap-c-return { font-size: var(--fs-body-2); color: var(--text-tertiary); padding: 4px 2px; }
.ap-c-hint { margin-left: auto; font-size: var(--fs-micro); color: #b8b8b8; }
.ap-seal { width: 38px; height: 38px; flex: none; border: 1.1px dashed #A32D2D; border-radius: 5px; color: #A32D2D; font-size: var(--fs-card-title); display: flex; align-items: center; justify-content: center; background: #FDF6F5; user-select: none; -webkit-user-select: none; touch-action: none; transition: transform .12s, background-color .12s; }
.ap-seal.holding { transform: scale(.93); background: rgba(163,45,45,.12); border-style: solid; }
.ap-seal.held { background: #A32D2D; color: #fff; border-style: solid; }
.ap-ghost { position: absolute; right: 12px; bottom: 46px; width: 54px; height: 54px; border: 2px solid #A32D2D; border-radius: 4px; color: #A32D2D; font-size: var(--fs-title-1-plus); display: flex; align-items: center; justify-content: center; transform: rotate(-9deg); opacity: 0; pointer-events: none; transition: opacity .16s; }
.ap-card.preview .ap-ghost { opacity: .3; }
.ap-detail { background: var(--card-bg); border: 0.5px solid var(--border); border-radius: 12px; padding: 13px 13px 12px; }
.ap-d-title { font-size: var(--fs-content); font-weight: 500; color: var(--text); line-height: 1.4; margin-top: 9px; }
.ap-d-row { display: flex; align-items: center; gap: 8px; font-size: var(--fs-body-2); color: var(--text-tertiary); margin-top: 9px; }
.ap-d-row b { font-weight: 400; color: var(--text); }
.ap-d-note { margin-top: 11px; padding-top: 11px; border-top: 0.5px solid #EDEBE4; font-size: var(--fs-body); color: var(--text); line-height: 1.75; white-space: pre-wrap; }
.ap-d-sec { margin-top: 14px; font-size: var(--fs-caption); color: var(--text-tertiary); }
.ap-seal-row { display: flex; gap: 9px; margin-top: 9px; }
.ap-seal-mark { width: 26px; height: 26px; flex: none; border-radius: 4px; display: flex; align-items: center; justify-content: center; font-size: var(--fs-body); border: 1px solid #A32D2D; color: #A32D2D; transform: rotate(-4deg); }
.ap-seal-mark.no { border-color: #B4B2A9; color: #888780; }
.ap-seal-txt { font-size: var(--fs-body-2); color: var(--text-secondary); line-height: 1.5; }
.ap-seal-txt b { font-weight: 500; color: var(--text); margin-right: 6px; }
.ap-seal-txt i { display: block; font-style: normal; font-size: var(--fs-body-2); color: var(--text-tertiary); margin-top: 2px; }
.ap-d-act { display: flex; gap: 10px; margin-top: 16px; }
.ap-d-act .action-btn { flex: 1; }
.ap-form { background: var(--card-bg); border-radius: 12px; border: 0.5px solid var(--border); padding: 4px 13px 13px; }
.ap-pick { display: flex; align-items: center; gap: 8px; padding: 12px 0; border-top: 0.5px solid var(--border); }
.ap-pick-label { font-size: var(--fs-body-2); color: var(--text-tertiary); width: 52px; flex: none; }
.ap-pick-val { flex: 1; font-size: var(--fs-body); color: var(--text); }
.ap-pick-val.none { color: #b8b8b8; }
.ap-pick-go { font-size: var(--fs-body-2); color: var(--text-tertiary); }

/* ===== v1764 工单管理工作台：单元条 / 四段（复用 .inline-tabs）/ 五层卡片 ===== */
.wbo-unitbar { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 12px 12px 6px; }
.wbo-unit-sel { border: none; background: none; font-size: 15px; font-weight: 600; color: #1a1a1a; max-width: 190px; padding: 0; }
.wbo-lead { font-size: 12px; color: #8a8f99; flex-shrink: 0; }
.wbo-card.dm-card { padding: 12px 14px; margin: 0 0 12px; cursor: pointer; }
.wbo-hd { display: flex; align-items: center; gap: 6px; }
.wbo-no { font-size: 13px; color: #8a8f99; }
.wbo-name { font-size: 16px; font-weight: 600; color: #1a1a1a; margin-top: 6px; }
.wbo-meta { font-size: 13px; color: #8a8f99; margin-top: 4.8px; }
.wbo-creator { font-size: 13px; color: #8a8f99; margin-top: 4.8px; line-height: 1.15; }
.wbo-qty { font-size: 12px; color: #8a8f99; margin-left: auto; min-width: 0; }
/* v1769：进度数字移到进度条上方右对齐；进度条整宽延伸，右端与操作按钮右缘齐
   v1771：创建人 → 进度区间距 −20%（9 → 7.2px）
   v1780：再 −50%（7.2 → 3.6px）
   v1781：创建人行盒 17px 本身在撑间距 → 行高收到 1.15，margin 归零，数字行高 1 */
.wbo-progwrap { margin-top: 0; }
.wbo-progwrap .wbo-qty { display: block; text-align: right; margin: 0 0 2px; line-height: 1; }
.wbo-progwrap .pl-prog { margin: 0; }
/* v1775：待开工卡改「扫码器 + 编码输入框 + 右端开工」三件套（对齐设备点检的开始方式） */
/* v1779：说明文字 + 虚线框（对齐设备点检 .eq-start-box 的包法） */
.wbo-startbox { border: 1px dashed #b7b5ab; border-radius: 10px; padding: 10px; margin-top: 10px; background: #fbfbf7; }
.wbo-starttip { font-size: var(--fs-micro); color: #8f959e; line-height: 1.6; margin: 0 0 8px; }
.wbo-startbox .wbo-scanrow { margin-top: 0; }
.wbo-scanrow { display: flex; align-items: stretch; gap: 8px; margin-top: 10px; }
.wbo-scanbox { flex: 1; min-width: 0; display: flex; align-items: stretch; height: 34px; border: 1px solid #d3d1c7; border-radius: 9px; background: #fff; overflow: hidden; box-sizing: border-box; }
.wbo-scanbox:focus-within { border-color: #008080; }
.wbo-scanbox.wbo-bad { border-color: #dc2626; }
.wbo-scanseg { flex: none; width: 38px; display: flex; align-items: center; justify-content: center; background: #f5f5f3; border: none; border-right: 1px solid #e6e4dc; color: #008080; cursor: pointer; padding: 0; }
.wbo-scanseg:active { background: #eaeae6; }
.wbo-scanseg svg { pointer-events: none; }
.wbo-codeinp { flex: 1; min-width: 0; height: 100%; border: none; border-radius: 0; padding: 0 10px; font-size: 13px; font-family: inherit; background: transparent; color: #1a1a1a; box-sizing: border-box; }
.wbo-codeinp:focus { outline: none; }
.wbo-codeinp::placeholder { color: #b8b8b8; opacity: 1; }
.wbo-begin { flex: none; height: 34px; padding: 0 18px; background: #008080; border-color: #008080; color: #fff; }
.wbo-begin:active { background: #006b6b; }
.wbo-acts { display: flex; gap: 8px; margin-top: 10px; }
.wbo-acts .wbo-btn-b { flex: 1; height: 34px; }
.wbo-acts .wbo-pri { background: #008080; border-color: #008080; color: #fff; }
.wbo-acts .wbo-pri:active { background: #006b6b; }
.wbo-foot { display: flex; justify-content: space-between; padding: 12px; font-size: 12px; color: #8a8f99; }
.wb-badge { position: absolute; top: -3px; right: 50%; margin-right: -22px; min-width: 15px; height: 15px; border-radius: 8px; background: var(--danger); color: #fff; font-size: 10px; line-height: 15px; text-align: center; padding: 0 4px; font-style: normal; }
/* v1577 修：用印预览时让印章落在「时间」的位置上，不压文字 */
.ap-card.preview .ap-c-time { opacity: 0; transition: opacity .12s; }
.ap-ghost { right: 11px; bottom: 44px; }

/* ===== v1578：审批 M1.5（模板 / 字段 / 流程节点） ===== */
/* v1581：模板列表改两列矩阵 —— 图标在上、名称/节点/范围竖排，编辑入口在卡内右上 */
/* v1584：模板按「所属模块」分组显示 */
.ap-grp-h { display: flex; align-items: baseline; gap: 6px; font-size: var(--fs-body-2); color: #8f959e; margin: 14px 2px 8px; }
.ap-grp-h:first-child { margin-top: 2px; }
.ap-grp-h span { font-size: var(--fs-micro); color: #b8b8b8; }
.ap-tpl-grid { display: grid; grid-template-columns: 1fr 1fr; grid-auto-rows: minmax(118px, auto); gap: 9px; }
.ap-tpl { display: flex; flex-direction: column; align-items: flex-start; gap: 0; background: #FDFCF8; border: 0.5px solid #E8E4D8; border-radius: 10px; padding: 10px 11px 11px; cursor: pointer; height: 100%; }
.ap-tpl-top { display: flex; align-items: flex-start; justify-content: space-between; width: 100%; }
.ap-tpl-ic { width: 32px; height: 32px; flex: none; border-radius: 7px; background: #F1EFE8; color: #5F5E5A; font-size: var(--fs-body); display: flex; align-items: center; justify-content: center; }
.ap-tpl-main { flex: 1; min-width: 0; }
.ap-tpl-nm { font-size: var(--fs-body); color: var(--text); font-weight: 500; margin-top: 8px; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ap-tpl-sub { font-size: var(--fs-caption); color: var(--text-tertiary); margin-top: 3px; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ap-tpl-scope { font-size: var(--fs-micro); color: #A8A29A; margin-top: 2px; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ap-tpl-ed { font-size: var(--fs-body-2); color: #008080; flex: none; padding: 1px 0 1px 4px; }
.ap-tpl-ar { font-size: var(--fs-body); color: #C9C5BD; flex: none; }
.ap-ed-scope { padding: 10px 0 4px; font-size: var(--fs-body-2); color: var(--text-tertiary); border-top: 0.5px solid var(--border); }
.ap-ed-scope b { font-weight: 400; color: var(--text); }
.ap-sec-h { font-size: var(--fs-body-2); color: var(--text-tertiary); margin: 16px 2px 7px; }
.ap-ed-row { display: flex; align-items: center; gap: 6px; padding: 6px 0; border-bottom: 0.5px solid #F2F0EA; }
.ap-ed-row .pf-input { flex: 1; min-width: 0; }
.ap-ed-sel { flex: none; height: 34px; border: 0.5px solid var(--border); border-radius: 7px; background: #fff; font-size: var(--fs-body-2); color: var(--text); padding: 0 4px; }
.ap-ed-sel.wide { flex: 1; min-width: 0; }
.ap-ed-ck { flex: none; font-size: var(--fs-caption); color: var(--text-tertiary); display: flex; align-items: center; gap: 3px; }
.ap-ed-x { flex: none; width: 24px; height: 24px; display: flex; align-items: center; justify-content: center; color: #b0b4bb; cursor: pointer; }
.ap-add { text-align: center; font-size: var(--fs-body-2); color: #008080; padding: 11px 0 3px; cursor: pointer; }
.ap-node { border: 0.5px solid #EDEBE4; border-radius: 9px; padding: 8px 9px; margin: 8px 0; background: #FDFCF8; }
.ap-node-hd { display: flex; align-items: center; gap: 8px; }
.ap-node-hd .pf-input { flex: 1; min-width: 0; }
.ap-node-n { width: 20px; height: 20px; flex: none; border-radius: 50%; background: #F1EFE8; color: #5F5E5A; font-size: var(--fs-caption); display: flex; align-items: center; justify-content: center; }
.ap-node-bd { display: flex; align-items: center; gap: 6px; margin-top: 7px; }
.ap-node-uid { font-size: var(--fs-body-2); color: #008080; flex: none; padding: 4px 2px; }
.ap-node-cond { font-size: var(--fs-caption); color: var(--text-tertiary); margin-top: 7px; display: flex; align-items: center; gap: 4px; }
.pf-input.tiny { width: 66px; height: 28px; font-size: var(--fs-caption); text-align: center; }
.ap-f { padding: 9px 0; border-bottom: 0.5px solid #F2F0EA; }
.ap-f:last-child { border-bottom: none; }
.ap-f-h { display: flex; align-items: center; gap: 6px; font-size: var(--fs-body-2); color: var(--text-secondary); margin-bottom: 6px; }
.ap-req { font-style: normal; font-size: var(--fs-micro); color: #d14343; }
.ap-select { width: 100%; }
.ap-f-title { font-size: var(--fs-card-title); font-weight: 500; color: var(--text); padding: 10px 0 4px; }
.ap-flow-view { padding: 6px 13px 10px; }
.ap-flow-i { display: flex; align-items: center; gap: 8px; padding: 5px 0; }
.ap-flow-n { width: 18px; height: 18px; border-radius: 50%; background: #F1EFE8; color: #5F5E5A; font-size: var(--fs-micro); display: flex; align-items: center; justify-content: center; flex: none; }
.ap-flow-t { font-size: var(--fs-body-2); color: var(--text); }
.ap-flow-cond { font-size: var(--fs-micro); color: #A32D2D; margin-left: auto; }
.ap-step { display: flex; gap: 9px; padding: 9px 0; border-bottom: 0.5px solid #F2F0EA; }
.ap-step:last-child { border-bottom: none; }
.ap-step-n { width: 22px; height: 22px; flex: none; border-radius: 50%; border: 1px solid #D3D1C7; color: #888780; font-size: var(--fs-caption); display: flex; align-items: center; justify-content: center; }
.ap-step.done .ap-step-n { background: #A32D2D; border-color: #A32D2D; color: #fff; }
.ap-step.doing .ap-step-n { border-color: #008080; color: #008080; font-weight: 500; }
.ap-step-main { flex: 1; min-width: 0; }
.ap-step-t { font-size: var(--fs-body); color: var(--text); font-weight: 500; }
.ap-step-s { font-size: var(--fs-caption); color: var(--text-tertiary); margin-top: 2px; }
.ap-step-note { font-size: var(--fs-caption); color: #A32D2D; margin-top: 3px; }
.ap-step-mk { display: flex; gap: 3px; align-items: center; flex: none; }
.ap-mini-seal { width: 20px; height: 20px; border: 1px solid #A32D2D; color: #A32D2D; border-radius: 3px; font-size: var(--fs-micro); display: flex; align-items: center; justify-content: center; transform: rotate(-4deg); }
/* v1578 修：模板编辑里的输入左对齐、条件行不再乱折 */
.ap-ed-row .pf-input, .ap-node-hd .pf-input { text-align: left; }
.ap-node-cond { flex-wrap: wrap; }
.ap-node-cond .nc { white-space: nowrap; }
/* v1578 修：发起表单里的输入框要有边界（.pf-input 原本只服务左标签右输入的行式表单） */
.ap-f .pf-input { width: 100%; height: 38px; border: 0.5px solid var(--border); border-radius: 8px; background: #fff; padding: 0 10px; font-size: var(--fs-body); text-align: left; }

.ap-form .pf-row .pf-input { text-align: left; }
/* ===== v1589：群聊（消息页 ＋ 建群、群头像、群内发言人） ===== */
.msg-hd-plus { display: flex; align-items: center; justify-content: center; color: #008080; cursor: pointer; }
.msg-hd-plus:active { opacity: .55; }
.chat-avatar-group { background: rgba(0,128,128,.8); color: #fff; font-size: 13px; font-weight: 600; }
.chat-gtag { font-style: normal; font-size: var(--fs-micro); color: #b8b8b8; margin-left: 5px; }
/* 群聊发言人：伪元素挂在气泡上方，不参与 flex 宽度计算 */
.chat-row.grp { position: relative; margin-top: 15px; }
.chat-row.grp::before { content: attr(data-who); position: absolute; top: -14px; left: 6px; font-size: var(--fs-micro); color: #8f959e; }
.chat-row.grp + .chat-row.grp { margin-top: 17px; }
/* 弹窗里的独立输入框需要自己的边框（.pf-input 原本只服务行式表单） */
.modal-sheet .pf-input { width: 100%; height: 38px; border: 0.5px solid #d0d0d0; border-radius: 8px; padding: 0 10px; font-size: var(--fs-body); color: #1f2329; }
.modal-sheet .pf-input::placeholder { color: #b8b8b8; }
/* ===== v1592：群信息 / 群设置页 ===== */
.gi-scroll { position: absolute; inset: 0; overflow-y: auto; -webkit-overflow-scrolling: touch; padding: 10px 12px 28px; box-sizing: border-box; }
.gi-head { display: flex; align-items: center; gap: 12px; padding: 14px 12px; background: #fff; border-radius: 10px; }
.gi-nm { font-size: var(--fs-card-title); font-weight: 600; color: #1f2329; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.gi-sub { font-size: var(--fs-caption); color: #8f959e; margin-top: 3px; }
.gi-sec { font-size: var(--fs-micro); color: #8f959e; margin: 16px 4px 6px; }
.gi-card { background: #fff; border-radius: 10px; overflow: hidden; }
.gi-row { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 13px 14px; font-size: var(--fs-body); color: #1f2329; border-bottom: 0.5px solid #f2f2f2; }
.gi-row:last-child { border-bottom: 0; }
.gi-row .v { color: #8f959e; font-size: var(--fs-body-2); max-width: 62%; text-align: right; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.gi-row[data-act]:active { background: #f7f7f7; }
.gi-switch { width: 42px; height: 24px; border-radius: 12px; background: #d9d9d9; position: relative; flex-shrink: 0; transition: background .18s; }
.gi-switch.on { background: #008080; }
.gi-switch::after { content: ''; position: absolute; top: 2px; left: 2px; width: 20px; height: 20px; border-radius: 50%; background: #fff; transition: left .18s; }
.gi-switch.on::after { left: 20px; }
.gi-mems { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px 6px; padding: 16px 8px; background: #fff; border-radius: 10px; }
.gi-mem { display: flex; flex-direction: column; align-items: center; gap: 6px; position: relative; }
.gi-mem:active { opacity: .6; }
.gi-av { width: 44px; height: 44px; border-radius: 10px; background: rgba(0,128,128,.8); color: #fff; display: flex; align-items: center; justify-content: center; font-size: var(--fs-title-1); font-weight: 600; overflow: hidden; }
.gi-av img { width: 100%; height: 100%; object-fit: cover; }
.gi-mem-nm { font-size: var(--fs-micro); color: #1f2329; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.gi-role { position: absolute; top: -6px; right: 4px; font-style: normal; font-size: var(--fs-micro); line-height: 14px; color: #0F6E56; background: #E1F5EE; padding: 0 4px; border-radius: 6px; }
.gi-role.owner { color: #854F0B; background: #FAEEDA; }
.gi-danger { margin-top: 18px; text-align: center; color: #A32D2D; font-size: var(--fs-body); padding: 13px; background: #fff; border-radius: 10px; }
.gi-danger:active { background: #fdf3f3; }
.gi-hint { font-size: var(--fs-caption); color: #8f959e; line-height: 1.5; }
.gi-menu { padding: 13px 4px; text-align: center; font-size: var(--fs-body); color: #1f2329; border-top: 0.5px solid #f2f2f2; }
.gi-menu:active { background: #f7f7f7; }
.gi-menu.danger { color: #A32D2D; }
.gi-ta { min-height: 76px; padding: 9px 10px; resize: none; line-height: 1.5; font-family: inherit; }
/* ===== v1593：拼图式群头像 —— 成员头像等比缩放后拼成一个整体
   无外框、无内边距、无缝隙；外轮廓圆角与单人头像一致 ===== */
.chat-gpic { display: grid; padding: 0; gap: 0; border: 0; background: transparent; overflow: hidden; box-sizing: border-box;
  /* .chat-avatar 带 align-items:center，继承到 grid 后会让格子按内容高度缩水（实测 24×15）；
     必须显式 stretch，四格才会真正填满 48×48 */
  align-items: stretch; justify-items: stretch; }
.chat-gpic > .ga { display: flex; align-items: center; justify-content: center; color: #fff; font-weight: 600; background: rgba(0,128,128,.8); overflow: hidden; border-radius: 0; line-height: 1; }
.chat-gpic > .ga img { width: 100%; height: 100%; object-fit: cover; display: block; }
.chat-gpic-1 { grid-template-columns: 1fr; grid-template-rows: 1fr; }
.chat-gpic-2 { grid-template-columns: 1fr 1fr; grid-template-rows: 1fr; }
.chat-gpic-3 { grid-template-columns: 1fr 1fr; grid-template-rows: 1fr 1fr; }
/* 3 人：上排两个 + 下排一个居中，每格都保持 1:1，避免出现横向长条 */
.chat-gpic-3 > .ga:nth-child(3) { grid-column: 1 / 3; justify-self: center; width: 50%; }
.chat-gpic-4 { grid-template-columns: 1fr 1fr; grid-template-rows: 1fr 1fr; }
.chat-notice { margin: 10px 12px 6px; padding: 9px 12px; background: #FDF6E3; border-radius: 8px; font-size: var(--fs-caption); color: #8a6d3b; line-height: 1.5; }
.chat-notice b { display: block; font-size: var(--fs-micro); color: #b08d3f; margin-bottom: 2px; font-weight: 600; }
.chat-pin { color: #008080; }
/* ===== v1607：权限页三层结构 ===== */
.perm-rules { background: #f0f7ff; border: 0.5px solid #d6e6ff; border-radius: 9px; padding: 11px 13px; font-size: var(--fs-caption); color: #33517a; line-height: 1.75; margin-bottom: 14px; }
.perm-rules b { color: #1a4d8f; }
.perm-section { margin-bottom: 20px; }
.perm-sec-h { display: flex; justify-content: space-between; align-items: baseline; font-size: var(--fs-body); font-weight: 600; color: var(--text); margin-bottom: 4px; }
.perm-sec-n { font-size: var(--fs-caption); font-weight: 400; color: #8f959e; }
.perm-sec-tip { font-size: var(--fs-caption); color: #8f959e; line-height: 1.6; margin-bottom: 9px; }
.perm-list { background: #fff; border-radius: 10px; overflow: hidden; }
.perm-row { display: flex; align-items: center; gap: 10px; padding: 11px 13px; border-bottom: 0.5px solid #f2f2f2; }
.perm-row:last-child { border-bottom: 0; }
.perm-av { display: inline-flex; align-items: center; justify-content: center; border-radius: 6px; background: rgba(0,128,128,.8); color: #fff; font-weight: 600; overflow: hidden; flex-shrink: 0; }
.perm-av img { width: 100%; height: 100%; object-fit: cover; }
.perm-info { flex: 1; min-width: 0; }
.perm-nm { font-size: var(--fs-body); color: var(--text); display: flex; align-items: center; gap: 6px; }
.perm-sub { font-size: var(--fs-caption); color: #8f959e; margin-top: 2px; }
/* v1608：全局有一条旧的 .perm-sub { margin-left: 56px }（给某个老卡片做头像缩进用的），
   会把权限页里成员下方的部门往右推 56px。这里在权限页作用域内清零，让部门与姓名左对齐。 */
.perm-info .perm-sub { margin: 2px 0 0 0; }
.perm-tag { font-style: normal; font-size: var(--fs-micro); padding: 1px 6px; border-radius: 5px; font-weight: 500; }
.perm-tag.owner { color: #854F0B; background: #FAEEDA; }
.perm-tag.sa { color: #0F6E56; background: #E1F5EE; }
.perm-x { font-size: var(--fs-caption); color: #A32D2D; padding: 4px 8px; cursor: pointer; }
.perm-addbig { margin-top: 9px; text-align: center; font-size: var(--fs-body-2); color: #008080; background: #fff; border: 0.5px dashed #b3d8d8; border-radius: 9px; padding: 11px; cursor: pointer; }
.perm-addbig:active { background: #f2fafa; }
.perm-modlist { background: #fff; border-radius: 10px; overflow: hidden; }
.perm-mod { display: flex; align-items: center; gap: 10px; padding: 11px 13px; border-bottom: 0.5px solid #f2f2f2; }
.perm-mod:last-child { border-bottom: 0; }
.perm-mod-nm { font-size: var(--fs-body); color: var(--text); width: 82px; flex-shrink: 0; }
.perm-mod-adm { flex: 1; display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
.perm-none { font-size: var(--fs-caption); color: #b8b8b8; }
.perm-addmini { font-size: var(--fs-caption); color: #008080; padding: 3px 7px; border: 0.5px dashed #b3d8d8; border-radius: 12px; cursor: pointer; }
.perm-members { display: flex; flex-direction: column; gap: 10px; }
.perm-mcard { background: #fff; border-radius: 10px; padding: 12px 13px; }
.perm-mhead { display: flex; align-items: center; gap: 10px; margin-bottom: 9px; }
.perm-chip.sm { font-size: var(--fs-caption); padding: 3px 8px; }
.chip-x { font-style: normal; margin-left: 5px; color: #8f959e; }
/* ===== v1610：模块管理员九宫格 + 模块子页 ===== */
.perm-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
.perm-grid-cell { background: #fff; border-radius: 10px; padding: 12px 8px; text-align: center; cursor: pointer; border: 0.5px solid #efefef; }
.perm-grid-cell:active { background: #f4fafa; }
.pgc-nm { font-size: var(--fs-body-2); color: var(--text); font-weight: 500; margin-bottom: 7px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pgc-avs { display: flex; justify-content: center; align-items: center; gap: 3px; min-height: 22px; margin-bottom: 5px; }
.pgc-avs .perm-av { border-radius: 4px; }
.pgc-more { font-size: var(--fs-micro); color: #8f959e; }
.pgc-cnt { font-size: var(--fs-micro); color: #8f959e; }
.perm-back { font-size: var(--fs-body-2); color: #008080; padding: 8px 12px; margin: -8px -8px -8px 0; cursor: pointer; }   /* v1610：加大点击区，手机上更好点 */
.perm-subh { font-size: var(--fs-caption); color: #8f959e; margin: 14px 2px 6px; }
.perm-mrow { display: flex; align-items: center; gap: 10px; padding: 9px 13px; border-bottom: 0.5px solid #f2f2f2; }
.perm-mrow:last-child { border-bottom: 0; }
.perm-mrow-nm { flex: 1; font-size: var(--fs-body); color: var(--text); }
.perm-mini-sw { width: 38px; height: 22px; border-radius: 11px; background: #d9d9d9; position: relative; flex-shrink: 0; transition: background .18s; }
.perm-mini-sw.on { background: #008080; }
.perm-mini-sw::after { content: ''; position: absolute; top: 2px; left: 2px; width: 18px; height: 18px; border-radius: 50%; background: #fff; transition: left .18s; }
.perm-mini-sw.on::after { left: 18px; }
.perm-mini-sw.disabled { opacity: .45; }
.perm-empty { text-align: center; color: #b8b8b8; font-size: var(--fs-body-2); padding: 22px 0; background: #fff; border-radius: 10px; }
/* ===== v1613：成员权限（搜索选人 → 42 项二级权限勾选 → 保存） ===== */
.perm-search-wrap { margin-bottom: 9px; }
.perm-search { width: 100%; height: 36px; box-sizing: border-box; padding: 0 12px; border: 0.5px solid #d0d0d0; border-radius: 9px; background: #fff; font-size: var(--fs-body-2); color: var(--text); text-align: left; }
.perm-search::placeholder { color: #b8b8b8; }
.perm-search:focus { outline: none; border-color: #008080; }
.perm-pick-list { max-height: 268px; overflow-y: auto; }
.perm-pick-row { display: flex; align-items: center; gap: 9px; padding: 9px 13px; border-bottom: 0.5px solid #f2f2f2; cursor: pointer; }
.perm-pick-row:last-child { border-bottom: 0; }
.perm-pick-row:active { background: #f4fafa; }
.perm-pick-dept { font-size: var(--fs-caption); color: #8f959e; margin-left: auto; max-width: 42%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.perm-pick-n { font-size: var(--fs-micro); color: #008080; background: #e6f4f4; border-radius: 9px; padding: 1px 7px; flex-shrink: 0; }
.perm-edit { font-size: var(--fs-caption); color: #008080; padding: 5px 9px; cursor: pointer; flex-shrink: 0; }
.perm-picker { background: #fff; border-radius: 10px; padding: 12px 13px 0; }
.perm-pk-head { display: flex; align-items: center; gap: 10px; padding-bottom: 10px; border-bottom: 0.5px solid #f2f2f2; margin-bottom: 4px; }
.perm-pgroup { padding: 11px 0; border-bottom: 0.5px solid #f6f6f6; }
.perm-pgroup:last-of-type { border-bottom: 0; }
.perm-pgh { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; }
.perm-pgh > span { font-size: var(--fs-body-2); color: var(--text); font-weight: 500; }
.perm-pgn { font-style: normal; font-size: var(--fs-micro); color: #b8b8b8; }
.perm-pgn.has { color: #008080; font-weight: 500; }
.perm-opts { display: flex; flex-wrap: wrap; gap: 7px; }
.perm-opt { font-size: var(--fs-caption); color: #646a73; background: #f5f6f7; border: 0.5px solid #ececec; border-radius: 13px; padding: 5px 11px; cursor: pointer; }
.perm-opt.on { color: #fff; background: #008080; border-color: #008080; }
.perm-opt.disabled { opacity: .4; }
/* 保存条放在列表末尾（不用 sticky —— 会贴住视口底部把功能区盖住）；顶部另有一个保存按钮 */
.perm-pk-foot { display: flex; align-items: center; gap: 12px; padding: 12px 0; border-top: 0.5px solid #f2f2f2; margin-top: 4px; }
.perm-pk-clear { font-size: var(--fs-body-2); color: #8f959e; padding: 7px 10px; cursor: pointer; }
.perm-pk-save { flex: 1; height: 40px; border: 0; border-radius: 9px; background: #008080; color: #fff; font-size: var(--fs-body); font-weight: 500; }
.perm-pk-save.sm { flex: 0 0 auto; height: 30px; padding: 0 15px; border-radius: 8px; font-size: var(--fs-body-2); }
.perm-pk-save:active { opacity: .85; }
.perm-plines { display: flex; flex-direction: column; gap: 4px; }
.perm-pline { display: flex; gap: 8px; font-size: var(--fs-caption); line-height: 1.6; }
.perm-pg { color: #8f959e; flex-shrink: 0; width: 58px; }
.perm-pv { color: #33517a; flex: 1; min-width: 0; }
/* v1619：成员卡片里只列二级权限名，横向排列 */
.perm-pchips { display: flex; flex-wrap: wrap; gap: 6px; }
.perm-pchip { font-size: var(--fs-caption); line-height: 1.5; color: #33517a; background: #f0f7ff; border: 0.5px solid #d6e6ff; border-radius: 12px; padding: 3px 10px; }
/* ===== v1620：模块管理员设置浮层（底部弹出） ===== */
.psheet-mask { position: fixed; inset: 0; background: rgba(0,0,0,.42); z-index: 900; display: flex; align-items: flex-end; justify-content: center; animation: psFade .16s ease-out; }
.psheet { width: 100%; max-width: 480px; background: #fff; border-radius: 14px 14px 0 0; max-height: 76vh; display: flex; flex-direction: column; animation: psUp .22s ease-out; padding-bottom: env(safe-area-inset-bottom, 0); }
@keyframes psFade { from { opacity: 0 } to { opacity: 1 } }
@keyframes psUp { from { transform: translateY(30px); opacity: .5 } to { transform: none; opacity: 1 } }
.psheet-bar { width: 36px; height: 4px; border-radius: 2px; background: #e0e0e0; margin: 8px auto 2px; flex-shrink: 0; }
.psheet-h { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 10px 16px 12px; border-bottom: 0.5px solid #f2f2f2; flex-shrink: 0; }
.psheet-t { font-size: var(--fs-card-title); font-weight: 600; color: var(--text); }
.psheet-sub { font-size: var(--fs-caption); color: #8f959e; margin-top: 2px; }
.psheet-x { font-size: var(--fs-body-2); color: #008080; padding: 6px 10px; cursor: pointer; flex-shrink: 0; }
.psheet-body { padding: 12px 16px 20px; overflow-y: auto; -webkit-overflow-scrolling: touch; }
.psheet-body .perm-list { border: 0.5px solid #f0f0f0; }
.psheet-tip { font-size: var(--fs-caption); color: #8f959e; line-height: 1.6; margin-top: 10px; }
/* ===== v1621：操作日志（公司信息 → 日志）业务化卡片 ===== */
.au-tip { font-size: var(--fs-caption); color: #8f959e; line-height: 1.65; background: #f7f9fa; border-radius: 8px; padding: 9px 11px; margin-bottom: 12px; }
.au-list { display: flex; flex-direction: column; gap: 8px; }
.au-item { background: #fff; border: 0.5px solid #eef0f3; border-radius: 9px; padding: 10px 12px; }
.au-item.failed { background: #fdf6f6; border-color: #f4dede; }
.au-top { display: flex; align-items: center; justify-content: space-between; gap: 8px; font-size: var(--fs-micro); color: #8f959e; margin-bottom: 5px; }
.au-who { color: #646a73; }
.au-main { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 7px; margin-bottom: 5px; }
.au-act { font-size: var(--fs-body-2); font-weight: 500; color: #1f2329; }
.au-act.fail { color: #A32D2D; }
.au-obj { font-size: var(--fs-caption); color: #8f959e; }
.au-delta { font-size: var(--fs-caption); color: #646a73; }
.au-diff { display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 4px; line-height: 1.65; }
.au-diff .k { color: #8f959e; }
.au-diff .o { color: #b0b0b0; text-decoration: line-through; }
.au-diff .ar { color: #c8c8c8; }
.au-diff .nn { color: #0F6E56; font-weight: 500; }
.au-none { color: #b8b8b8; font-size: var(--fs-micro); }
.au-more { font-size: var(--fs-micro); color: #8f959e; }
.au-failmsg { font-size: var(--fs-micro); color: #A32D2D; line-height: 1.6; }
.au-raw { margin-top: 4px; }
.au-raw summary { font-size: var(--fs-micro); color: #b8b8b8; cursor: pointer; }
.au-raw pre { margin: 5px 0 0; font-size: var(--fs-micro); color: #646a73; white-space: pre-wrap; word-break: break-all; max-height: 120px; overflow: auto; background: #fafbfc; padding: 7px; border-radius: 5px; }
.au-empty { text-align: center; color: #b8b8b8; font-size: var(--fs-body-2); padding: 28px 0; background: #fff; border-radius: 9px; }

/* ===== v1629：生产单元卡片 —— 去掉右侧箭头，点卡片本体展开；面板底部「收起 / 排程」 ===== */
.ps-unit-card { cursor: pointer; }
/* v1688（用户要求）：底部「收起 / 排程」两边与工单卡对齐 ——
   左边让出时间轴列宽 58px（＝ .ps-tl-axis 宽度），右边本来就对齐；宽度随之缩小 */
.ps-panel-foot { display: flex; gap: 8px; margin-top: 24px; margin-left: 58px; }
.ps-panel-foot button { flex: 1; height: 38px; border-radius: 9px; font-size: var(--fs-body); font-weight: 500; border: 0.5px solid #d3d1c7; background: #fff; color: #646a73; cursor: pointer; font-family: inherit; }
.ps-panel-foot button:active { opacity: .85; }

/* ===== v1630：计划排产页 内容字号 +1px（顶部标题、底部导航不变） ===== */
.ps-view .ps-tab .ps-label { font-size: var(--fs-body-2); }
.ps-view .ps-count { font-size: var(--fs-body); }

/* ===== v1643：平板 / 横屏适配（新增，不改动任何既存规则） ===== */

/* ① 平板 / 桌面：手机画布居中，给一层边界，避免「贴纸浮在灰底上」 */
@media (min-width: 700px) {
  body { background: #e7e7e4; }
  #app { box-shadow: 0 0 0 1px rgba(0, 0, 0, .05), 0 10px 40px rgba(0, 0, 0, .12); }
}

/* ② 横屏手机：压缩顶部固定区，把纵向空间还给内容；宽度放开到 720，九宫格改 4 列 */
@media (orientation: landscape) and (max-height: 520px) {
  :root { --safe-top: 0px; --header-height: 40px; }
  #app { max-width: 720px; }
  .app-header { min-height: 40px; }
  .wb-company { padding: 10px 16px 22px; }
  .wb-stats { margin: -12px 12px 10px; padding: 8px 0; }
  .wb-grid { grid-template-columns: repeat(4, 1fr); gap: 6px; }
  .wb-card { padding: 10px 6px 9px; }
  .wb-grid-title { margin-top: 8px; }
}

/* ===== v1664：工单排程页 —— 仪表盘吸顶（滚动时不随内容上移） ===== */
#psUnitHead {
  position: sticky;
  top: 0;
  z-index: 6;
  /* 用 12px 的背景色外扩遮住卡片左右/上下的 margin 缝隙，避免内容从缝里透出来 */
  box-shadow: 0 0 0 12px var(--bg);
}
/* v1665：工单排程页顶部卡内，档位条压缩（只作用于 #psUnitHead） */
#psUnitHead .ps-tab { min-height: 30px; }
#psUnitHead .ps-dot-wrap { height: 10px; }

/* ===== v1683：换型位置拆成左右两格（＋换型时间 | ＋添加工单） ===== */
.ps-co-split { display: flex; gap: 6px; align-items: stretch; }
.ps-co-split > * {
  flex: 1 1 0; min-width: 0; box-sizing: border-box;
  display: flex; align-items: center; justify-content: center;
  border: 1px dashed #cfcdc6; border-radius: 6px; background: #fbfbfa;
  font-size: var(--fs-micro); color: #8a8f99; cursor: pointer;
  white-space: nowrap; overflow: hidden;
}
.ps-co-split > *:active { background: #f1f0ec; }

/* ============================================================
   信息沟通（公告 + 工作圈）· 第三批 2026-10-23
   前缀 fd- ，与主工程其它模块不冲突
   ============================================================ */
#view-feed { padding-bottom: 24px; }

/* ---- 顶部分段 ---- */
.fd-seg {
  display: flex; gap: 4px; margin: 10px 12px 12px; padding: 3px;
  background: #eef0f3; border-radius: 9px;
}
.fd-seg-i {
  flex: 1; text-align: center; padding: 8px 0; border-radius: 7px;
  font-size: var(--fs-body-2); color: var(--text-secondary);
  cursor: pointer; position: relative; transition: background .15s, color .15s;
}
.fd-seg-i.on {
  background: var(--card-bg); color: var(--text); font-weight: 600;
  box-shadow: 0 1px 3px rgba(0,0,0,.08);
}
.fd-dot {
  display: inline-block; min-width: 16px; height: 16px; line-height: 16px;
  margin-left: 5px; padding: 0 4px; border-radius: 8px;
  background: var(--danger); color: #fff; font-style: normal;
  font-size: 10px; font-weight: 600; vertical-align: 1px;
}

/* ---- 悬浮发布按钮 ---- */
.fd-fab {
  position: fixed; right: 16px; bottom: calc(72px + var(--safe-bottom));
  z-index: 30; height: 44px; padding: 0 18px; border: none;
  border-radius: 22px; background: var(--primary); color: #fff;
  font-size: var(--fs-body-2); font-weight: 600;
  box-shadow: 0 6px 18px rgba(51,112,255,.32); cursor: pointer;
}
.fd-fab:active { background: var(--primary-dark); }

/* ---- 空态 ---- */
.fd-empty {
  padding: 56px 28px; text-align: center;
  color: var(--text-tertiary); font-size: var(--fs-body-2); line-height: 1.8;
}
.fd-empty.fd-err { color: var(--danger); }
.fd-hint { margin-top: 6px; color: var(--text-tertiary); font-size: var(--fs-caption); }

/* ---- 公告列表 ---- */
.fd-list { padding: 0 12px; }
.fd-card {
  background: var(--card-bg); border-radius: var(--radius);
  padding: 14px; margin-bottom: 10px; cursor: pointer;
  box-shadow: var(--shadow); position: relative;
}
.fd-card:active { background: #fafbfc; }
.fd-card.fd-unread { box-shadow: 0 0 0 1px rgba(51,112,255,.18), var(--shadow); }
.fd-card-hd { display: flex; align-items: flex-start; gap: 6px; }
.fd-new {
  width: 7px; height: 7px; border-radius: 50%; background: var(--danger);
  flex: 0 0 auto; margin-top: 7px;
}
.fd-title {
  flex: 1; min-width: 0; font-size: var(--fs-card-title); font-weight: 600;
  color: var(--text); line-height: 1.4;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.fd-chips { display: flex; gap: 4px; flex: 0 0 auto; }
.fd-chip {
  font-size: 11px; line-height: 16px; padding: 0 5px; border-radius: 4px;
  background: #f2f3f5; color: var(--text-secondary); white-space: nowrap;
}
.fd-chip-pin { background: #fff2e8; color: #d4380d; }
.fd-snippet {
  margin-top: 7px; color: var(--text-secondary); font-size: var(--fs-body-2);
  line-height: 1.55; display: -webkit-box; -webkit-line-clamp: 2;
  -webkit-box-orient: vertical; overflow: hidden;
}
.fd-meta {
  margin-top: 8px; color: var(--text-tertiary); font-size: var(--fs-caption);
}

/* ---- 工作圈 ---- */
.fd-flow { padding: 0 12px; }
.fd-post {
  background: var(--card-bg); border-radius: var(--radius);
  padding: 14px; margin-bottom: 10px; box-shadow: var(--shadow);
}
.fd-post-hd { display: flex; align-items: center; gap: 10px; }
.fd-av {
  border-radius: 50%; background: var(--primary-light); color: var(--primary);
  display: inline-flex; align-items: center; justify-content: center;
  font-weight: 600; flex: 0 0 auto; overflow: hidden;
}
.fd-av img { width: 100%; height: 100%; object-fit: cover; }
.fd-post-who { flex: 1; min-width: 0; }
.fd-post-nm {
  font-size: var(--fs-body); font-weight: 600; color: var(--text);
  display: flex; align-items: center; gap: 6px;
}
.fd-self {
  font-size: 11px; font-weight: 400; color: var(--text-tertiary);
  background: #f2f3f5; border-radius: 3px; padding: 0 4px;
}
.fd-post-tm { margin-top: 2px; color: var(--text-tertiary); font-size: var(--fs-caption); }
.fd-mini {
  border: 1px solid #d0d0d0; background: #fff; color: #646a73;
  border-radius: var(--radius-sm); padding: 4px 10px;
  font-size: var(--fs-caption); cursor: pointer;
}
.fd-post-tx {
  margin-top: 10px; font-size: var(--fs-content); line-height: 1.6;
  color: var(--text); white-space: pre-wrap; word-break: break-word;
}
.fd-imgs { margin-top: 10px; }
.fd-img-ph {
  display: inline-block; padding: 8px 14px; border-radius: var(--radius-sm);
  background: #f2f3f5; color: var(--text-secondary);
  font-size: var(--fs-caption); cursor: pointer;
}
.fd-post-ft {
  display: flex; gap: 18px; margin-top: 12px;
  padding-top: 10px; border-top: 1px solid var(--border);
}
.fd-like, .fd-cmt-btn {
  border: none; background: none; padding: 0; cursor: pointer;
  color: var(--text-secondary); font-size: var(--fs-body-2);
  display: inline-flex; align-items: center; gap: 4px;
}
.fd-heart { font-size: 15px; color: #c9cdd4; }
.fd-like.on { color: var(--danger); }
.fd-like.on .fd-heart { color: var(--danger); }
.fd-cmts {
  margin-top: 10px; padding: 8px 10px; border-radius: var(--radius-sm);
  background: #f7f8fa;
}
.fd-cmt {
  font-size: var(--fs-body-2); line-height: 1.6; color: var(--text);
  word-break: break-word;
}
.fd-cmt b { font-weight: 600; color: var(--primary); margin-right: 5px; }

/* ---- 公告详情 ---- */
.fd-detail { padding: 0 16px; }
.fd-d-hd { padding: 16px 0 12px; border-bottom: 1px solid var(--border); }
.fd-d-title {
  margin: 6px 0 0; font-size: var(--fs-title-2); font-weight: 600;
  line-height: 1.45; color: var(--text);
}
.fd-d-body {
  padding: 16px 0; font-size: var(--fs-content); line-height: 1.75;
  color: var(--text); white-space: pre-wrap; word-break: break-word;
}
.fd-d-imgs { display: flex; flex-wrap: wrap; gap: 8px; padding-bottom: 14px; }
.fd-img {
  width: calc((100% - 16px) / 3); aspect-ratio: 1 / 1; object-fit: cover;
  border-radius: var(--radius-sm); cursor: pointer; background: #f2f3f5;
}
.fd-d-ft { padding: 14px 0 24px; border-top: 1px solid var(--border); }

/* ---- 已读明细 ---- */
.fd-read-sec { margin-top: 18px; }
.fd-read-tt {
  font-size: var(--fs-body-2); font-weight: 600; color: var(--text);
  margin-bottom: 8px;
}
.fd-read-row {
  display: flex; align-items: center; justify-content: space-between;
  padding: 9px 0; border-bottom: 1px solid #f2f3f5;
}
.fd-read-nm { font-size: var(--fs-body-2); color: var(--text); }
.fd-read-nm.fd-warn { color: var(--warning); }
.fd-read-tm { font-size: var(--fs-caption); color: var(--text-tertiary); }
.fd-gray { color: #bfc4cc; }

/* ---- 表单 ---- */
.fd-form { padding: 14px 16px 90px; }
.fd-lb {
  display: block; margin: 16px 0 7px;
  font-size: var(--fs-body-2); color: var(--text-secondary);
}
.fd-lb:first-child { margin-top: 0; }
.fd-in, .fd-ta {
  width: 100%; box-sizing: border-box; padding: 10px 12px;
  border: 1px solid var(--border); border-radius: var(--radius-sm);
  background: #fff; color: var(--text); font-size: var(--fs-body);
  font-family: inherit;
}
.fd-ta { line-height: 1.6; resize: vertical; }
.fd-in:focus, .fd-ta:focus { outline: none; border-color: var(--accent); }
.fd-chk {
  display: flex; align-items: center; gap: 7px; margin-top: 16px;
  font-size: var(--fs-body-2); color: var(--text-secondary);
}
.fd-pick {
  margin-top: 8px; display: flex; flex-wrap: wrap; gap: 8px;
  max-height: 190px; overflow: auto;
}
.fd-pick-i {
  display: inline-flex; align-items: center; gap: 5px;
  padding: 6px 10px; border: 1px solid var(--border); border-radius: var(--radius-sm);
  font-size: var(--fs-body-2); color: var(--text); background: #fff;
}
.fd-form-ft {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 20;
  display: flex; gap: 10px; padding: 12px 16px calc(12px + var(--safe-bottom));
  background: var(--card-bg); border-top: 1px solid var(--border);
}
.fd-btn {
  flex: 1; height: 40px; border: 1px solid #d0d0d0; border-radius: var(--radius-sm);
  background: #fff; color: #646a73; font-size: var(--fs-body-2);
  cursor: pointer; font-family: inherit;
}
.fd-btn:active { background: #f5f6f7; }
.fd-btn.fd-primary {
  flex: 2; border-color: var(--primary); background: var(--primary);
  color: #fff; font-weight: 600;
}
.fd-btn.fd-primary:active { background: var(--primary-dark); }

/* ---- 图片选择 ---- */
.fd-img-pick { display: flex; flex-wrap: wrap; gap: 8px; }
.fd-img-w {
  position: relative; width: 74px; height: 74px;
  border-radius: var(--radius-sm); overflow: hidden; background: #f2f3f5;
}
.fd-img-w img { width: 100%; height: 100%; object-fit: cover; }
.fd-img-x {
  position: absolute; right: 0; top: 0; width: 19px; height: 19px;
  line-height: 18px; text-align: center; font-size: 14px; font-style: normal;
  background: rgba(0,0,0,.55); color: #fff;
  border-bottom-left-radius: 6px; cursor: pointer;
}
.fd-img-add {
  width: 74px; height: 74px; border-radius: var(--radius-sm);
  border: 1px dashed #cfd3d9; background: #fafbfc; color: var(--text-tertiary);
  display: flex; align-items: center; justify-content: center;
  font-size: 26px; cursor: pointer;
}

/* ---- 大图查看 ---- */
.fd-zoom {
  position: fixed; inset: 0; z-index: 999; display: none;
  background: rgba(0,0,0,.92); align-items: center; justify-content: center;
}
.fd-zoom.on { display: flex; }
.fd-zoom-img { max-width: 96vw; max-height: 84vh; object-fit: contain; }
.fd-zoom-nav {
  position: absolute; bottom: calc(28px + var(--safe-bottom));
  display: flex; gap: 8px;
}
.fd-zoom-nav i {
  width: 7px; height: 7px; border-radius: 50%;
  background: rgba(255,255,255,.35); cursor: pointer;
}
.fd-zoom-nav i.on { background: #fff; }
/* v1684：已填换型时间的左格 —— 实底、无虚线边框，与右格「＋添加工单」区分 */
.ps-co-split > .ps-tl-cap {
  border: none; background: #eeece6; color: #646a73; height: 100%;
}


/* ===== v1686：时间轴末尾「＋收工时间」「＋添加工单」两个框（宽度＝工单卡） ===== */
.ps-ft-row { width: 100%; height: 100%; box-sizing: border-box; }
.ps-end { cursor: pointer; user-select: none; }
.ps-end.ps-tl-cap::after { content: '✎'; font-size: var(--fs-micro); color: #b8b8b8; margin-left: 6px; }
.ps-end.ps-tl-cap:active { background: #e9e7e0; }

/* ===== v1699：计划排产页顶部 —— 「计划时间」小标题 + 搜索框高度对齐「生产工单」页 ===== */
.ps-date-cap { flex: none; font-size: var(--fs-caption); color: #8a8f99; white-space: nowrap; }
.ps-view .dm-search { height: 33px; padding: 0 8px; box-sizing: border-box; }
.ps-view .dm-search input { font-size: var(--fs-caption); }

/* ===== v1701：生产单元卡片底部「派单 / 排程」 ===== */
.ps-card-foot { display: flex; gap: 8px; margin-top: 24px; }
.ps-card-foot button {
  flex: 1; height: 34px; border-radius: 9px; font-family: inherit;
  font-size: var(--fs-body-2); font-weight: 500;
  border: 0.5px solid #d3d1c7; background: #fff; color: #646a73; cursor: pointer;
}
.ps-card-foot button:active { opacity: .85; }
/* v1798：下发后置灰 / 派单页非负责人置灰 / 派单选人列表 */
.ps-card-foot button:disabled,
.ps-panel-foot button:disabled { color: #bababa; background: #f7f7f5; border-color: #e6e4dc; cursor: not-allowed; opacity: 1; }
.ps-card-foot .ps-issue-done,
.ps-panel-foot .ps-issue-done { color: #8a8f99; background: #f2f2f0; }
.ps-cand {
  padding: 11px 12px; border-radius: 9px; background: #fafafa; margin-bottom: 6px;
  font-size: var(--fs-caption); color: #1f2329; cursor: pointer;
  border: 1px solid transparent; box-sizing: border-box;
}
.ps-cand:active { background: #f2f2f0; }
.ps-cand.on { background: #e8f4f4; border-color: #008080; color: #008080; font-weight: 600; }

/* ===== v1707 单族（原单 + 补单）显示 ===== */
.pl-fam { margin-bottom: 4px; }
.pl-fam.pl-fam-single { margin-bottom: 0; }
.pl-fam-head {
  display: flex; align-items: center; gap: 8px;
  padding: 6px 10px; margin: 0 0 6px;
  background: #f7f7f5; border-radius: 8px;
  font-size: var(--fs-caption); color: var(--text-3, #646a73);
}
.pl-fam-title { font-weight: 600; color: #1f2329; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pl-fam-tag { flex: none; padding: 1px 6px; border-radius: 6px; background: #eceae4; color: #8a8f99; font-size: var(--fs-micro); }
.pl-fam-agg { margin-left: auto; flex: none; color: #8a8f99; white-space: nowrap; }
.pl-fam-badge {
  flex: none; padding: 1px 6px; border-radius: 6px;
  background: #EEEDFE; color: #534AB7; font-size: var(--fs-micro);
  border: none; line-height: 1.5;
}
.pl-fam-child { margin-left: 16px; position: relative; }
.pl-fam-child::before {
  content: ''; position: absolute; left: -9px; top: 10px; bottom: 10px;
  width: 1px; background: #e3e1d9;
}

/* ===== v1708/1709 PM 管理页 ===== */
.pm-kpi { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; margin: 8px 12px 0; }
.pm-kpi-i { background: #fff; border: 0.5px solid #e5e3dc; border-radius: 10px; padding: 9px 6px; text-align: center; }
.pm-kpi-v { font-size: var(--fs-title-2); font-weight: 700; color: #1f2329; line-height: 1.2; }
.pm-kpi-l { font-size: var(--fs-micro); color: #8a8f99; margin-top: 3px; }
.pm-sec { margin: 14px 12px 0; }
.pm-sec-head { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }
.pm-sec-title { font-size: var(--fs-body); font-weight: 600; color: #1f2329; }
.pm-sec-sub { margin-left: auto; font-size: var(--fs-micro); color: #8a8f99; white-space: nowrap; }
.pm-card { background: #fff; border: 0.5px solid #e5e3dc; border-radius: 12px; padding: 12px; }
.pm-card-flat { padding: 4px 12px; }
.pm-done-h { display: flex; align-items: baseline; gap: 8px; margin-bottom: 8px; }
.pm-done-h b { font-size: var(--fs-title-1); color: #1f2329; }
.pm-done-h span { font-size: var(--fs-micro); color: #8a8f99; }
.pm-seg { display: flex; height: 8px; border-radius: 4px; overflow: hidden; background: #e6e3da; }
.pm-seg i { display: block; height: 100%; }
.pm-lg-row { display: flex; gap: 12px; margin-top: 8px; font-size: var(--fs-micro); color: #646a73; flex-wrap: wrap; }
.pm-lg-row i { display: inline-block; width: 7px; height: 7px; border-radius: 2px; margin-right: 4px; vertical-align: middle; }
.pm-row { display: flex; align-items: center; gap: 8px; padding: 9px 0; border-bottom: 0.5px solid #f2f0ea; font-size: var(--fs-caption); }
.pm-row:last-child { border-bottom: none; }
.pm-row-t { font-weight: 600; color: #1f2329; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pm-row-s { flex: none; color: #b8b8b8; font-size: var(--fs-micro); }
.pm-row-r { flex: none; margin-left: auto; color: #646a73; font-size: var(--fs-micro); white-space: nowrap; }
.pm-row-x { flex: 1; min-width: 0; margin-left: 4px; color: #dc2626; font-size: var(--fs-micro); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pm-link { flex: none; border: none; background: transparent; color: #008080; font-size: var(--fs-caption); padding: 2px 2px; cursor: pointer; }
.pm-abn { padding: 10px 0; border-bottom: 0.5px solid #f2f0ea; }
.pm-abn:last-child { border-bottom: none; }
.pm-abn-h { display: flex; align-items: baseline; gap: 8px; }
.pm-abn-h b { font-size: var(--fs-body-2); color: #1f2329; }
.pm-abn-n { margin-left: auto; flex: none; font-size: var(--fs-micro); color: #646a73; }
.pm-abn-m { margin-top: 4px; font-size: var(--fs-micro); color: #8a8f99; }
.pm-abn-b { display: flex; gap: 8px; margin-top: 8px; }
.pm-btn {
  flex: 1; height: 34px; border-radius: 8px; cursor: pointer;
  background: #fff; border: 0.5px solid #d0d0d0; color: #646a73;
  font-size: var(--fs-caption);
}
.pm-btn-primary { background: #008080; border-color: #008080; color: #fff; font-weight: 600; }
.pm-heat { overflow-x: auto; scrollbar-width: none; }
.pm-heat-row { display: flex; align-items: center; gap: 2px; margin-bottom: 2px; }
.pm-heat-lb {
  flex: 0 0 72px; font-size: 11px; color: #646a73;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.pm-heat-cell { flex: 1 0 0; min-width: 12px; height: 16px; border-radius: 3px; background: #f4f2ec; }
.pm-heat-head .pm-heat-cell { height: auto; background: transparent; font-size: 9px; color: #b8b8b8; text-align: center; line-height: 1.2; }
.pm-heat-lg {
  display: flex; align-items: center; gap: 6px; flex-wrap: wrap;
  margin-top: 10px; font-size: var(--fs-micro); color: #8a8f99;
}
.pm-heat-lg i { display: inline-block; width: 10px; height: 10px; border-radius: 2px; margin: 0 2px 0 8px; vertical-align: middle; }
.pm-fs {
  display: flex; align-items: center; gap: 10px;
  border-bottom: 0.5px solid #f2f0ea; padding: 9px 0;
  font-size: var(--fs-caption); color: #646a73;
}
.pm-fs > span { flex: 0 0 68px; }
.pm-fs > input, .pm-fs > select {
  flex: 1; min-width: 0; border: none; background: transparent; outline: none;
  font-size: var(--fs-body-2); color: #1f2329; text-align: right;
}
.pm-chip {
  padding: 5px 11px; border-radius: 14px; background: #f2f2f0;
  color: #646a73; font-size: var(--fs-micro); cursor: pointer;
}

/* ===== v1713 详情页 单族关联 ===== */
.pl-fam-box {
  margin: 12px 0 0; padding: 10px 12px;
  background: #faf9f6; border: 0.5px solid #e5e3dc; border-radius: 10px;
}
.pl-fam-box-h { display: flex; align-items: baseline; gap: 8px; margin-bottom: 4px; }
.pl-fam-box-h b { font-size: var(--fs-caption); color: #1f2329; }
.pl-fam-box-h span { margin-left: auto; font-size: var(--fs-micro); color: #8a8f99; }
.pl-fam-row {
  display: flex; align-items: center; gap: 8px;
  padding: 8px 0; border-top: 0.5px solid #f2f0ea;
  font-size: var(--fs-caption); color: #646a73; cursor: pointer;
}
.pl-fam-row.cur { color: #1f2329; font-weight: 600; }
.pl-fam-no { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pl-fam-q { margin-left: auto; flex: none; font-size: var(--fs-micro); color: #8a8f99; }
.pl-fam-st { flex: none; font-size: var(--fs-micro); color: #b8b8b8; min-width: 44px; text-align: right; }
.pl-fam-tip { margin-top: 6px; font-size: var(--fs-micro); color: #b8b8b8; }


/* ===== v1719：消息页置顶入口（公告 / 工作圈）=====
   这两个入口原先藏在「信息沟通」模块里，现在提到消息页前两行固定显示。
   图标底做成方形的色块，和真人头像（圆形/图片）区分开，一眼能看出不是人。 */
.feed-pin .feed-pin-av {
  border-radius: 8px;
  font-size: 0;                 /* 只放 svg，避免行高影响 */
}
.feed-pin-ann { background: #e8f2ff; color: #1a6fd6; }
.feed-pin-mo  { background: #e9f7ee; color: #1a8a4d; }
.feed-pin-tag {
  font-size: 10px;
  line-height: 16px;
  padding: 0 5px;
  margin-left: 6px;
  border-radius: 3px;
  background: #f0f1f3;
  color: #8f959e;
  font-weight: 400;
  vertical-align: 1px;
}

/* ===== v1722 趋势卡 双 tab ===== */

.pm-trend-note { margin-top: 8px; font-size: var(--fs-micro); color: #b8b8b8; line-height: 1.5; }

/* ===== 内嵌选项卡 v1732（基准：设备总览图 .eq-trend-tab）=====
   平分整行、无背景胶囊、选中＝文字变主色 + 文字下 2px 指示条。
   ⚠️ 以后用户说「内嵌选项卡」= 这套 inline-tabs / inline-tab / .on */
.inline-tabs { display: flex; }
.inline-tab {
  flex: 1; text-align: center; padding: 11px 0 5px;
  font-size: var(--fs-body-2); color: #9a9aa0; cursor: pointer;
  user-select: none;
}
.inline-tab.on { color: #008080; font-weight: 500; }
.inline-tab > i { font-style: normal; position: relative; display: inline-block; }
.inline-tab.on > i::after {
  content: ''; position: absolute; left: -3px; right: -3px; bottom: -4px;
  height: 2px; border-radius: 2px; background: #008080;
}

/* ===== v1740 生产管理首页宫格改 3 列（取消工票后只剩 3 个模块） ===== */
.pj-grid-3 { grid-template-columns: repeat(3, 1fr); }
