/* 测试账号切换（系统管理-测试与系统开关，默认关闭，仅管理员） */
.impersonate-btn{margin-bottom:6px}
.impersonate-banner{position:fixed;top:0;left:0;right:0;z-index:200;display:flex;align-items:center;justify-content:center;gap:12px;padding:6px 16px;background:#fff7e6;color:#7a4f01;border-bottom:1px solid #ffd591;font-size:13px}
.impersonate-banner strong{color:#d46b08}
.impersonate-banner button{border:1px solid #d46b08;color:#d46b08;background:#fff;border-radius:4px;padding:2px 10px;cursor:pointer}
.impersonate-groups{max-height:60vh;overflow:auto;display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px}
.impersonate-group h4{margin:0 0 6px;font-size:13px;color:#475569}
.impersonate-user{display:flex;flex-direction:column;align-items:flex-start;gap:2px;width:100%;padding:8px 10px;margin-bottom:6px;border:1px solid #e2e8f0;border-radius:6px;background:#f8fafc;cursor:pointer;text-align:left}
.impersonate-user:hover{border-color:#0b57b7;background:#eef4ff}
.impersonate-user strong{font-size:13px}
.impersonate-user small{font-size:12px;color:#64748b}
.admin-settings{max-width:720px}
.settings-row{margin-top:14px;padding:14px 16px;border:1px solid #e2e8f0;border-radius:8px;background:#fff}
.settings-toggle{display:flex;align-items:center;gap:8px;font-size:14px}
.settings-toggle input{width:18px;height:18px}
.state-chip{font-size:12px;padding:4px 8px;border-radius:4px;background:#f2f4f7;color:#344054;white-space:nowrap}
.drawing-flag{color:#b42318;background:#fff0ef;border:1px solid #f9c4c0;padding:6px 10px;border-radius:6px;font-size:13px;margin:10px 0}
.return-note{color:#9a5700;background:#fffbeb;border:1px solid #f3e3b5;padding:6px 10px;border-radius:6px;font-size:13px;margin:10px 0}
.op-tools{display:flex;gap:6px}
.waiting{color:#b54708;font-style:normal}
.task-list{display:grid;gap:12px}
.task-card{background:#fff;border:1px solid #e4e7ec;border-radius:8px;padding:18px 20px}
.task-card .item-title{display:flex;justify-content:space-between;gap:12px;align-items:center}
.task-card .item-title h4{margin:0;font-size:16px}
.task-card .meta{display:block;color:#667085;font-size:13px;margin-top:10px}
.task-card .item-tools{margin-top:12px}
.dept-users{display:grid;gap:24px}
/* .link-button 统一外观见 machining-list.css（全局兜底），此处不再重复定义，避免两套样式 */
.dept-user-form{background:#fff;border:1px solid #e4e7ec;border-radius:8px;padding:22px;display:grid;grid-template-columns:repeat(4,1fr);gap:14px;align-items:end}
.dept-user-form h3{grid-column:1/-1;margin:0}
.dept-user-form label{display:grid;gap:6px;color:#475467;font-size:13px}
.dept-user-form input,.dept-user-form select{width:100%;padding:10px;border:1px solid #d0d5dd;border-radius:6px;font:inherit}
.dept-user-form button{width:auto;min-width:100px}
.dept-user-form .error{grid-column:1/-1;margin:0}
.dept-user-table{background:#fff;border:1px solid #e4e7ec;border-radius:8px;border-collapse:collapse;width:100%}
.dept-user-table th,.dept-user-table td{text-align:left;padding:12px 16px;border-bottom:1px solid #edf0f4;font-size:14px}
.dept-user-table th{background:#f7f8fa;color:#475467;font-weight:600}
@media(max-width:800px){.dept-user-form{grid-template-columns:1fr}.task-card .item-title{flex-direction:column;align-items:flex-start}}
.dept-positions{background:#fff;border:1px solid #e4e7ec;border-radius:8px;padding:20px 22px}
.dept-positions h3{margin:0 0 12px;font-size:16px}
.pos-chips{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px}
.pos-chip{background:#eef4ff;color:#1769c2;border:1px solid #cfe0fb;border-radius:20px;padding:5px 12px;font-size:13px}
.pos-chip em{font-style:normal;color:#667085;margin-left:4px;font-size:12px}
.dept-position-form{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.dept-position-form select{width:auto;min-width:140px;padding:7px 10px;border:1px solid #d0d5dd;border-radius:6px;font:inherit;font-size:13px;color:#344054;background:#fff}
.dept-position-form input{flex:1;min-width:140px;max-width:220px;padding:7px 10px;border:1px solid #d0d5dd;border-radius:6px;font:inherit;font-size:13px}
.dept-position-form input::placeholder{font-size:12px;color:#98a2b3}
.dept-position-form .primary{width:auto;min-width:84px;padding:7px 12px;font-size:13px}
.dept-position-form .error{flex-basis:100%;margin:4px 0 0;font-size:12px}
.dept-role-form{display:flex;flex-wrap:wrap;gap:8px 14px;align-items:center}
.pos-check{display:inline-flex;gap:5px;align-items:center;color:#344054;font-size:13px;cursor:pointer}
.dept-role-form .primary.small{width:auto;min-width:80px;padding:6px 12px;font-size:13px}
.dept-user-table .primary.small{margin-left:auto}
.flow-collapse{background:#fff;border:1px solid #e4e7ec;border-radius:8px;padding:14px 18px;margin-top:18px}
.flow-collapse summary{cursor:pointer;color:#344054;font-weight:600;font-size:15px}
.flow-collapse .flow-timeline{margin-top:12px}
.operation-planner label{display:grid;gap:6px;color:#475467;font-size:14px;margin:14px 0}
.operation-planner textarea,.operation-planner input[type=file]{width:100%;padding:10px;border:1px solid #d0d5dd;border-radius:6px;font:inherit}
.operation-planner textarea{min-height:84px}
.metrics-row{display:flex;align-items:center;gap:18px;margin:28px 0}
.metrics-row .metrics{margin:0;flex:1}
.metrics-row .filter-bar{margin:0;flex-shrink:0}
.filter-bar{display:flex;justify-content:flex-end;align-items:center;gap:8px}
.filter-bar label{color:#667085;font-size:13px}
/* 2026-09-20：选择器必须带 `.toolbar` 前缀。单独写 `.dept-filter`(0-1-0) 权重低于 app.css 的
   `.toolbar select`(0-1-1)，那条 `background:#fff` 简写会把下面自绘箭头的 background-image 重置成 none，
   而原生箭头已被 appearance:none 关掉 → 部门下拉表现为"没有下拉箭头"（padding 右侧留白同样被覆盖）。 */
.toolbar .dept-filter{appearance:none;-webkit-appearance:none;padding:9px 34px 9px 12px;border:1px solid #d0d5dd;border-radius:6px;font:inherit;color:#344054;background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%23667085' stroke-width='1.5' stroke-linecap='round'/%3E%3C/svg%3E") no-repeat right 10px center;cursor:pointer}
.overdue{color:#d92d20;font-style:normal;font-weight:600;margin-left:4px}
.other-files{background:#fff;border:1px solid #e4e7ec;border-radius:8px;padding:16px 18px;margin-top:14px}
.other-files h4{margin:0 0 12px;font-size:14px;color:#475467}
.other-group{display:flex;align-items:baseline;gap:12px;padding:7px 0;border-top:1px solid #edf0f4}
.other-group strong{min-width:140px;font-size:14px}
.other-group .item-files{margin:0}
.file-chip .file-download{margin-left:8px;color:#1769c2;text-decoration:none;font-size:12px}
.pager{display:flex;justify-content:flex-end;align-items:center;gap:12px;padding:16px 0}
.pager button{border:1px solid #b7cef4;background:#fff;color:#1769c2;border-radius:6px;padding:8px 14px;cursor:pointer}
.pager button:disabled{opacity:.45;cursor:default}
.pager span{color:#667085;font-size:13px}
.pager button.current{background:#347ff0;color:#fff;border-color:#347ff0}
.pager .pager-ellipsis{color:#98a2b3}
.pager select{border:1px solid #d0d5dd;border-radius:6px;padding:8px 10px;font:inherit;color:#344054;background:#fff}
.stage-line{color:#1769c2;font-size:13px;margin:8px 0 0}
.admin-result{background:#fff;border:1px solid #e4e7ec;border-radius:8px;padding:22px;margin-top:24px}
/* 系统管理模块入口：5 个大标同一行 */
.admin-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:14px;margin-bottom:4px}
.admin-grid button{display:flex;flex-direction:column;align-items:flex-start;gap:8px;background:#fff;border:1px solid #e4e7ec;border-radius:10px;padding:16px 18px;cursor:pointer;text-align:left;color:#1f2937;font-size:16px;font-weight:700;box-shadow:0 1px 3px rgba(16,24,40,.05)}
.admin-grid button:hover{border-color:#347ff0;box-shadow:0 4px 12px rgba(52,127,240,.12)}
.admin-grid button span{font-size:12px;font-weight:400;color:#667085;line-height:1.5}
@media(max-width:1000px){.admin-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:600px){.admin-grid{grid-template-columns:1fr}}
.perm-table{width:100%;border-collapse:collapse;font-size:12px;table-layout:fixed}
.perm-table th,.perm-table td{border:1px solid #e4e7ec;padding:6px 6px;text-align:center;vertical-align:middle;word-break:break-word}
.perm-table thead th{background:#f7f8fa;color:#475467;line-height:1.35}
.perm-table tbody th{background:#fafbfc;color:#1f2937;text-align:left;width:88px}
.perm-table select{width:100%;max-width:60px;padding:4px 3px;border:1px solid #d0d5dd;border-radius:6px;font-size:11px;color:#1f2937;background:#fff;text-align:center;text-align-last:center;transition:border-color .15s,background-color .15s}
.perm-table select.perm-allow{border-color:#12b76a;background:#ecfdf3;color:#027a48;font-weight:700}
.perm-table select.perm-deny{border-color:#f04438;background:#fef3f2;color:#b42318;font-weight:700}
.perm-table select option[value="1"]{color:#027a48;font-weight:600;text-align:center}
.perm-table select option[value="0"]{color:#b42318;font-weight:600;text-align:center}
.perm-table td.perm-na{color:#c0c6d0;font-size:13px;letter-spacing:1px;user-select:none;text-align:center}
.perm-table td.perm-locked-deny{color:#98a2b3;font-weight:700;background:#fcfcfd;text-decoration:line-through}
.perm-table td.perm-locked{color:#027a48;font-weight:700;background:#f6fef9;font-size:12px}
.perm-table tr.perm-admin-row th{color:#1769c2}
.perm-table tr.perm-admin-row td{background:#f8fbff}
.perm-table .perm-dep{color:#98a2b3;font-size:10px;vertical-align:super;margin-left:2px}
.perm-showall{display:inline-flex;align-items:center;gap:6px;color:#344054;font-size:12px;margin:10px 0 4px;cursor:pointer}
.perm-showall input{accent-color:#347ff0;width:14px;height:14px}
.perm-legend{color:#667085;font-size:12px;margin:10px 0 4px}
.perm-legend b{color:#1f2937}
.perm-legend.perm-color-tip{display:flex;gap:18px;align-items:center;background:#f7f8fa;border:1px dashed #d0d5dd;border-radius:6px;padding:6px 10px;margin-top:8px}
.perm-color-allow{color:#027a48;font-weight:700}
.perm-color-deny{color:#b42318;font-weight:700}
.perm-tabs{display:flex;align-items:center;gap:10px;margin-top:14px;flex-wrap:wrap}
.perm-tabs button{border:1px solid #d0d5dd;background:#fff;color:#475467;border-radius:6px;padding:8px 16px;cursor:pointer;font-size:13px}
.perm-tabs button.active{background:#347ff0;color:#fff;border-color:#347ff0}
.perm-tabs .perm-dept-select{margin-left:auto;border:1px solid #d0d5dd;border-radius:6px;padding:8px 10px;font:inherit;color:#344054;background:#fff;min-width:200px}
.admin-result .dept-user-table{margin-top:14px}
.admin-result .dept-user-table.audit-table th,.admin-result .dept-user-table.audit-table td{padding:8px 12px;font-size:13px}
.admin-result .dept-user-table.audit-table{max-width:1100px}
.admin-result details summary{cursor:pointer;color:#1769c2;font-size:13px}
.admin-result details pre{max-height:220px;overflow:auto;background:#f7f8fa;padding:10px;border-radius:6px;font-size:12px}
.audit-detail{display:grid;gap:10px;margin-top:8px;background:#f7f8fa;border:1px solid #e4e7ec;border-radius:6px;padding:12px}
.audit-detail-block{display:grid;gap:4px}
.audit-detail-block strong{color:#475467;font-size:12px}
.audit-detail-block p,.audit-line{margin:0;color:#1f2937;font-size:13px}
.operation-planner-overlay{position:fixed;inset:0;background:#10182880;z-index:1000;display:grid;place-items:center;padding:18px}
.operation-planner{background:#fff;width:min(960px,100%);max-height:92vh;overflow:auto;border-radius:12px;padding:26px 28px;box-shadow:0 24px 60px #10182833}
.operation-planner footer{display:flex;justify-content:flex-end;gap:10px;margin-top:24px}
.operation-planner footer button{width:auto!important;min-width:96px;flex:0 0 auto}
/* 侧边栏用户信息：用户名粗体、职位与部门分行显示 */
.side-user strong{display:block;font-size:15px}
.side-user .side-dept{margin-top:4px;color:#0b57b7;font-weight:600;font-size:15px}
/* 筛选工具栏布局修复：允许换行、控件定宽、查询按钮自适应，避免超出外框 */
.toolbar{flex-wrap:wrap;align-items:center}
.toolbar input{flex:0 1 190px;min-width:150px}
.toolbar select{max-width:190px}
.toolbar .primary{width:auto;min-width:110px}
.toolbar .date-range{display:inline-flex;gap:8px;align-items:center;flex-wrap:nowrap}
.toolbar .date-quick{display:inline-flex;gap:6px;align-items:center}
.toolbar .date-quick button{border:1px solid #d0d5dd;border-radius:6px;background:#fff;color:#344054;padding:6px 10px;cursor:pointer;font-size:13px;width:56px;min-width:0;white-space:nowrap;text-align:center}
.toolbar .date-quick button.active{background:#eef4ff;color:#0b57b7;border-color:#347ff0}
.toolbar .date-range{margin-right:64px}
/* 订单筛选栏（2026-09-20 四次调整，用户定稿）：固定两行，第一行强制不换行——
   ① 时间相关：订单搜索（220px）｜开始日期—结束日期｜快捷范围（必须紧跟结束日期）；② 其余：部门｜交期风险｜查询 导出（右对齐）。
   控件宽度（搜索框 220px、日期 140px、部门 140px、风险 240px、快捷范围下拉 120px）：这 340px 余量在
   搜索框与「快捷范围」之间调配——快捷范围最宽只显示"近 1 个月"，120px 够用，省下的宽度给订单搜索框；
   第一行 nowrap：窗口变窄时先压缩第一个搜索框，保证「快捷范围」始终留在结束日期右边而不是掉到第二行（<800px 才允许换行）。
  只在 .order-filter-bar 作用域内生效，其他页面工具栏不受影响。 */
   .order-filter-bar{display:grid;gap:12px;padding:14px 16px}
   .order-filter-bar .order-filter-row{display:flex;align-items:flex-end;gap:12px;min-width:0;flex-wrap:wrap}
   /* 第一行（订单搜索｜开始—结束日期｜快捷范围）永不换行（2026-09-20：用户要求快捷范围放在结束时间后面） */
   .order-filter-bar .order-filter-main{flex-wrap:nowrap}
   .order-filter-bar .order-filter-field{display:grid;gap:5px;min-width:0;color:#667085;font-size:12px;white-space:nowrap}
   .order-filter-bar .order-filter-field>input,.order-filter-bar .order-filter-field>select{height:40px;margin:0;font-size:14px}
   /* 第一个框（订单号/标题搜索）宽度：2026-09-20 四次调整 190px → 220px（快捷范围收窄后把宽度让给搜索框） */
   .order-filter-bar .order-filter-search{flex:0 1 220px;max-width:220px}
   .order-filter-bar .order-filter-search>input{width:100%;min-width:0}
   .order-filter-bar .order-filter-dates{gap:8px;margin-right:0!important}
   .order-filter-bar .order-filter-dates .order-filter-field{flex:0 0 140px}
   .order-filter-bar .order-filter-dates input{width:140px;min-width:0}
   .order-filter-bar .order-filter-to{align-self:flex-end;padding-bottom:11px;color:#667085}
   /* 快捷范围（2026-09-20 由 4 个按钮改为下拉选择框）：150px → 120px，点选后立即查询（最长选项"近 1 个月"够用） */
   .order-filter-bar .order-filter-quick{flex:0 0 120px}
   .order-filter-bar .order-filter-quick>select{width:100%;max-width:none}
.order-filter-bar .order-filter-dept{flex:0 0 140px}
.order-filter-bar .order-filter-dept>select{width:100%;max-width:none}
.order-filter-bar .order-filter-risk{flex:0 0 240px}
.order-filter-bar .order-filter-risk>select{width:100%;max-width:none}
.order-filter-bar .order-filter-actions{display:flex;gap:8px;margin-left:auto}
.order-filter-bar .order-filter-actions .primary{min-width:90px}
/* 订单页「在制订单 / 历史订单」切换标签：按内容宽度、强制同一行（勿被 flex 拉伸或换行） */
.tabs{flex-wrap:nowrap}
.tabs button{flex:0 0 auto;white-space:nowrap}
@media(max-width:800px){
  .order-filter-bar{padding:12px}
  .order-filter-bar .order-filter-row{align-items:stretch;flex-wrap:wrap}
  .order-filter-bar .order-filter-search,.order-filter-bar .order-filter-dept,.order-filter-bar .order-filter-risk{flex:1 1 100%;max-width:none}
  .order-filter-bar .order-filter-actions{width:100%;margin-left:0}
  .order-filter-bar .order-filter-actions button{flex:1 1 0}
  .order-filter-bar .order-filter-dates{width:100%;flex-wrap:wrap}
  .order-filter-bar .order-filter-dates .order-filter-field{flex:1 1 140px}
  .order-filter-bar .order-filter-dates input{width:100%}
  .order-filter-bar .order-filter-to{padding-bottom:11px}
  .order-filter-bar .order-filter-quick{max-width:100%}
}
/* 工作台统计卡片：白底还原，仅数字颜色醒目 */
.metrics .metric-card{display:flex;align-items:center;gap:32px;padding:18px 22px;border-radius:12px;background:#fff;border:1px solid #e4e7ec;min-width:180px;box-shadow:0 2px 8px rgba(16,24,40,.06)}
.metrics .metric-card .metric-item{display:grid;gap:8px;justify-items:start}
.metrics .metric-card .metric-item.metric-right{margin-left:auto}
.metrics .metric-card span{font-size:14px;color:#667085}
.metrics .metric-card strong{font-size:32px;line-height:1.15}
.metrics .metric-active strong{color:#0f9d58}
.metrics .metric-done strong{color:#1d63ed}
.metrics .metric-card .metric-item .metric-red{color:#d92d20}
/* 订单页「在制订单+延期订单 / 历史订单」两张统计卡：同一行、等宽各占一半（2026-09-20 用户要求）。
   通用 .metrics 是 3 列网格：每张占 1/3（显得又宽又空）、≤1280px 变 2 列、≤1024px 变 1 列（上下两行），
   本页改用 flex 行 + flex:1 1 0 → 两张卡宽度一致、各占当前行的 50%（仅 ≤800px 窄屏改为各占一整行）。 */
.metrics.order-metrics{display:flex;flex-wrap:nowrap;gap:16px;align-items:stretch}
.metrics.order-metrics>.metric-card{flex:1 1 0;min-width:0;padding:18px 22px;gap:32px}
.metrics.order-metrics .metric-item{gap:6px}
.metrics.order-metrics strong{font-size:28px;margin-top:0}
@media(max-width:800px){.metrics.order-metrics>.metric-card{flex:1 1 100%}}
/* ===== 全站可复用版式基元（2026-09-11）：.stats-panel/.stats-panel-head/.stats-statrow/.stats-stat/
   .stats-kpi/.stats-grid2/.stats-seg/.stats-emptybox/.stats-chart —— 其他页面做"面板 + 紧凑指标"时
   请直接复用这些类，不要另写一套样式（避免再次出现各页面各长一套外壳的历史问题）。 ===== */
/* 顶部工具条：筛选摘要 + 修改筛选 + 导出，收起状态只占一行 */
.stats-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:8px 14px;background:#fff;border:1px solid #e4e7ec;border-radius:10px}
.stats-summary{flex:1 1 320px;min-width:0;color:#475467;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.stats-toggle{border:1px solid #e4e7ec;background:#fff;color:#475467;border-radius:8px;padding:7px 14px;font-size:13px;cursor:pointer;white-space:nowrap}
.stats-toggle:hover{border-color:#bcd0f7;color:#1d63ed}
.stats-bar button.stats-export,.stats-filters button.stats-export{background:#1d63ed;border:1px solid #1d63ed;color:#fff;border-radius:8px;padding:8px 14px;font-size:13px;cursor:pointer;white-space:nowrap}
.stats-bar button.stats-export:hover,.stats-filters button.stats-export:hover{background:#1752c4;border-color:#1752c4}
.stats-bar button.stats-export:disabled,.stats-filters button.stats-export:disabled{opacity:.6;cursor:default}
/* 分栏导航：下划线式文字标签（非按钮块） */
.stats-nav{display:flex;gap:24px;flex-wrap:wrap;border-bottom:1px solid #e4e7ec;margin:16px 0 0}
.stats-nav-item{border:0;background:none;padding:10px 2px 11px;margin-bottom:-1px;color:#667085;font-size:15px;line-height:1;cursor:pointer;border-bottom:2px solid transparent;transition:color .12s,border-color .12s}
.stats-nav-item:hover{color:#1d63ed}
.stats-nav-item.is-active{color:#0b57b7;font-weight:700;border-bottom-color:#1d63ed}
/* 统一面板：所有区块同一外壳与标题样式 */
.stats-panel{background:#fff;border:1px solid #e4e7ec;border-radius:10px;padding:16px 18px;margin-top:14px}
.stats-panel-head{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap;margin-bottom:14px}
.stats-panel-head h3{margin:0;font-size:15px;color:#1f2937}
.stats-panel-head>span{color:#98a2b3;font-size:12px;font-weight:400}
.stats-kpi{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}
.stats-kpi .stat-card{border:0;border-left:1px solid #eef0f4;border-radius:0;padding:2px 16px;background:none;display:grid;gap:4px}
.stats-kpi .stat-card:first-child{border-left:0;padding-left:0}
.stats-kpi .stat-card:hover{box-shadow:none;transform:none;background:#f8fafc;border-radius:8px}
.stats-kpi .stat-card span{font-size:12px}
.stats-kpi .stat-card strong{font-size:22px}
.stat-spark{width:96px;height:24px;display:block;margin-top:2px;opacity:.9}
.stat-info{margin-left:4px;color:#c3cbd8;font-style:normal;font-size:12px;cursor:help}
.stat-info:hover{color:#1d63ed}
/* 面板内的紧凑指标行（替代一格一张大卡） */
.stats-statrow{display:flex;flex-wrap:wrap;gap:10px 32px;padding:0 0 12px;border-bottom:1px solid #f2f4f7;margin-bottom:12px}
.stats-stat{display:flex;align-items:baseline;gap:8px}
.stats-stat em{color:#667085;font-size:12px;font-style:normal}
.stats-stat strong{font-size:19px;color:#1f2937;line-height:1.2}
/* 分段按钮（与系统统一：白底描边胶囊，选中填充主色） */
.qi-toolbar{display:flex;flex-wrap:wrap;gap:8px 16px;align-items:center;margin-bottom:12px}
.stats-seg{display:inline-flex;gap:6px;flex-wrap:wrap}
.stats-seg-btn{border:1px solid #e4e7ec;background:#fff;color:#475467;border-radius:8px;padding:6px 12px;font-size:13px;line-height:1.2;cursor:pointer;transition:background .12s,border-color .12s,color .12s}
.stats-seg-btn:hover{border-color:#bcd0f7;color:#1d63ed}
.stats-seg-btn.is-active{background:#1d63ed;border-color:#1d63ed;color:#fff;font-weight:600}
.stats-emptybox{padding:6px 0}
.stats-empty-hint{color:#cbd2dc;font-size:12px;margin:4px 0 0}
.stats-note{color:#98a2b3;font-size:12px;margin:0 0 12px}
.stats-subhead{font-size:13px;color:#475467;margin:0 0 8px}
/* 两栏并排（次要区块），窄屏堆叠 */
.stats-grid2{display:grid;grid-template-columns:1fr 1fr;gap:14px;align-items:start}
@media (max-width:1100px){.stats-grid2{grid-template-columns:1fr}}
/* 趋势迷你折线 */
.stats-chart{margin-top:4px}
.stats-legend{display:flex;gap:16px;flex-wrap:wrap;margin-bottom:6px}
.stats-legend-item{display:inline-flex;align-items:center;gap:6px;color:#667085;font-size:12px}
.stats-legend-item i{width:10px;height:10px;border-radius:3px;display:inline-block}
.stats-chart svg{width:100%;height:auto;max-height:170px;display:block}
/* 统计分析：人员排行/问题类型/高维修设备 */
.stats-analysis{display:grid;gap:16px;margin-top:18px}
.stats-analysis-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:16px}
/* 2026-09-11：区块已统一收进 .stats-panel，内部不再叠一层边框盒子 */
.stats-rank,.stats-block{background:none;border:0;padding:0}
.stats-analysis-grid .stats-rank{background:#f8fafc;border-radius:8px;padding:12px 14px}
.stats-rank h4,.stats-block h4{margin:0 0 12px;font-size:15px;color:#1f2937}
.stats-empty{color:#98a2b3;font-size:13px;margin:0}
.stats-rank-list{list-style:none;margin:0;padding:0;display:grid;gap:10px}
.stats-rank-list li{display:grid;grid-template-columns:1fr auto;gap:4px 10px;align-items:center;font-size:13px}
.stats-rank-name{color:#1f2937;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;grid-column:1;grid-row:1}
.stats-rank-dept{color:#98a2b3;font-size:12px;grid-column:1;grid-row:2}
.stats-rank-bar{grid-column:1;grid-row:3;background:#f2f4f7;border-radius:4px;height:8px;overflow:hidden}
.stats-rank-bar i{display:block;height:100%;background:#1d63ed;border-radius:4px}
.stats-rank-cnt{grid-column:2;grid-row:1/4;color:#d92d20;font-weight:700;font-size:15px;text-align:right;align-self:center}
.stats-bar-list{display:grid;gap:8px}
/* 条形分布：进度条限宽，避免单条数据占满整行显得突兀 */
.stats-bar-row{display:grid;grid-template-columns:minmax(96px,180px) minmax(0,320px) 84px;gap:10px;align-items:center;justify-content:start;font-size:13px}
.stats-bar-label{color:#344054;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.stats-bar-track{background:#f2f4f7;border-radius:4px;height:10px;overflow:hidden}
.stats-bar-track i{display:block;height:100%;background:#0f9d58;border-radius:4px}
.stats-bar-cnt{color:#1f2937;font-weight:600;text-align:right}
.stats-repeat-cnt{color:#d92d20}
.stats-block .dept-user-table{margin-top:6px}
/* 统计页卡片/TOP 块点击跳转 */
.stat-card{cursor:pointer;transition:box-shadow .15s,transform .15s;border:1px solid #e4e7ec;border-radius:10px;padding:14px 16px;background:#fff;display:grid;gap:6px}
.stat-card:hover{box-shadow:0 4px 14px rgba(16,24,40,.14);transform:translateY(-1px)}
/* 只读指标卡（2026-09-11，销售统计分栏）：没有下钻目标，不要做出"可点击"的样子 */
.stat-card:not([data-stats-goto]){cursor:default}
.stat-card:not([data-stats-goto]):hover{box-shadow:none;transform:none}
.stat-card span{font-size:13px;color:#667085}
.stat-card strong{font-size:28px;line-height:1.15;color:#1f2937}
.stat-card .stat-delta{font-style:normal;font-size:12px;color:#98a2b3}
.stats-loading{color:#98a2b3;font-size:13px;padding:18px 2px;margin:0}
.stats-goto{cursor:pointer;transition:background .12s,color .12s}
.stats-goto:hover{color:#1d63ed}
tr.stats-goto:hover td{background:#f5f8ff}
.stats-jump-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;background:#eff6ff;border:1px solid #bfdbfe;color:#1d4ed8;font-size:13px;padding:8px 14px;border-radius:8px;margin-bottom:12px}
.stats-jump-bar button{margin-left:auto;background:#1d63ed;color:#fff;border:0;border-radius:6px;padding:4px 12px;font-size:12px;cursor:pointer}
.stats-jump-bar button:hover{background:#1752c4}
/* 统计分析页布局整理（2026-08-31） */
.metrics.stats-metrics{grid-template-columns:repeat(4,1fr);gap:14px;margin:18px 0}
.metrics.stats-metrics>div{padding:14px 16px}
.metrics.stats-metrics strong{font-size:26px;margin-top:8px}
.stats-filters{display:flex;flex-wrap:wrap;gap:12px 16px;align-items:center;padding:12px 14px;background:#fff;border:1px solid #e4e7ec;border-radius:10px;margin-top:10px}
.stats-filters input[type="date"]{width:152px}
.stats-filter-row{display:flex;gap:14px;flex-wrap:wrap;align-items:center}
.stats-filters label{display:inline-flex;align-items:center;gap:6px;color:#667085;font-size:13px;white-space:nowrap}
.stats-filters input,.stats-filters select{flex:0 0 auto;min-width:0;width:auto;padding:8px 10px;font-size:13px}
.stats-filters input[data-stats-filter="model"]{width:150px}
.stats-filters input[type="date"]{width:132px}
.stats-filters .date-range{margin-right:0}
.stats-two-col{display:grid;grid-template-columns:1fr 1fr;gap:16px;align-items:start}
.stats-rank.is-empty,.stats-block.is-empty{display:flex;align-items:baseline;gap:12px;padding:10px 18px}
.stats-rank.is-empty h4,.stats-block.is-empty h4{margin:0}
.stats-rank.is-empty .stats-empty,.stats-block.is-empty .stats-empty{margin:0}
@media (max-width:1100px){.metrics.stats-metrics{grid-template-columns:repeat(2,1fr)}.stats-two-col{grid-template-columns:1fr}}
/* 统计页问题洞察强化（2026-08-31） */
.stats-insights{display:flex;gap:10px;flex-wrap:wrap;margin:0 0 14px}
.stats-insight{display:inline-flex;align-items:center;background:#fff7ed;border:1px solid #fed7aa;color:#9a3412;font-size:13px;font-weight:600;padding:6px 14px;border-radius:999px;cursor:pointer}
.stats-insight:hover{background:#ffedd5;border-color:#fdba74}
.stats-rank h4{display:flex;align-items:baseline;gap:8px}
.stats-rank-total{margin-left:auto;font-size:12px;color:#98a2b3;font-weight:400;white-space:nowrap}
.stats-bar-cnt{white-space:nowrap}
.stats-cnt-high{color:#b42318}
.stats-cnt-mid{color:#b54708}
.stats-cnt-low{color:#475467}
.stats-risk-high td{background:#fef3f2}
.stats-risk-mid td{background:#fffaeb}
.stats-risk-low td{background:#f8fafc}
tr.stats-goto.stats-risk-high:hover td{background:#fee4e2}
tr.stats-goto.stats-risk-mid:hover td{background:#fef0c7}
tr.stats-goto.stats-risk-low:hover td{background:#f5f8ff}
/* 登录待办提醒弹窗 */
.todo-dialog{width:min(440px,100%)}
.todo-list{list-style:none;margin:16px 0;padding:0;display:grid;gap:8px}
.todo-list li{display:flex;justify-content:space-between;align-items:center;background:#f5f7fa;border:1px solid #e4e7ec;border-radius:8px;padding:10px 14px;font-size:14px;color:#475467}
.todo-list li b{color:#0b57b7;font-size:17px}
/* 定位板/灌胶棒提交前提醒开关 */
.remind-toggle{display:inline-flex;align-items:center;gap:6px;margin-left:14px;font-size:13px;color:#667085;cursor:pointer;user-select:none}
.remind-toggle input[type=checkbox]{width:auto;margin:0;accent-color:#0b57b7}
/* 订单完工入库确认弹窗（2026-09-04） */
.stock-inbound-dialog{width:min(880px,94vw);max-width:880px}
.stock-inbound-body{max-height:58vh;overflow:auto;margin:14px 0}
.stock-switch{display:inline-flex;align-items:center;gap:8px;font-size:14px;font-weight:700;color:#344054;cursor:pointer;user-select:none}
.stock-switch input[type=checkbox]{width:auto;margin:0;accent-color:#0b57b7}
.stock-inbound-body .muted{margin:6px 0 12px;color:#667085;font-size:12px;line-height:1.6}
.stock-item{border:1px solid #e4e7ec;border-radius:10px;padding:12px 14px;margin-bottom:10px;background:#fcfcfd}
.stock-item-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-weight:700;color:#344054;font-size:14px;margin-bottom:10px}
.stock-item-head label{display:inline-flex;align-items:center;gap:6px;font-weight:600;color:#1769c2;cursor:pointer}
.stock-item-head label input[type=checkbox]{width:auto;margin:0;accent-color:#0b57b7}
.stock-sn{font-weight:400;color:#667085;font-size:12px}
.stock-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px 14px}
.stock-grid label{display:grid;gap:4px;font-size:12px;color:#475467}
.stock-grid-wide{grid-column:1/-1}
.stock-grid input,.stock-grid select{width:100%;padding:8px 10px;border:1px solid #d0d5dd;border-radius:6px;font:inherit;font-size:13px;color:#1f2937;background:#fff}
.stock-item input[disabled],.stock-item select[disabled]{background:#f2f4f7;color:#667085;cursor:not-allowed}
@media(max-width:760px){.stock-grid{grid-template-columns:1fr}}

/* ===== 人事管理：管理区折叠面板 + 新增人员表单排版（2026-09-13 用户反馈"可用岗位和新增人员两个卡片看着有点乱"）=====
   实测问题（1240px 宽）：两张卡片合计 540px 高、把人员列表挤到屏外；新增人员表单里
   ①「钉钉号」因按钮夹在 label 内变成 95px 高；②「岗位（可多选）」是 135px 高的 5 行下拉、还与相邻列顶部错位（139 vs 179）；
   ③ 创建按钮孤零零落在左下角。整顿后：两个卡片＝**可折叠面板（默认收起）**，表单重排为
   「部门 / 账号 / 姓名 / 手机号」一行 →「钉钉号（含按钮）+ 自定义岗位」一行 →「岗位勾选块」→ 右下角创建按钮。
   ⚠️ 一律用两个类（.dept-users .xxx）提高优先级：app.css 里有 .dept-user-form{grid-template-columns:1fr} 等同级规则，
   且 workflow.css 在 app.css 之后加载，同级规则互相覆盖过（2026-09-13 踩过两次）。 */
.dept-users .dept-panel{background:#fff;border:1px solid #e4e7ec;border-radius:8px}
.dept-users .dept-panel-head{display:flex;align-items:center;gap:10px;width:100%;padding:14px 20px;border:0;background:transparent;font:inherit;cursor:pointer;text-align:left;border-radius:8px}
.dept-users .dept-panel-head:hover{background:#f8fafc}
.dept-users .dept-panel-title{font-size:15px;font-weight:600;color:#101828}
.dept-users .dept-panel-summary{font-size:13px;font-weight:400;color:#667085}
.dept-users .dept-panel-arrow{margin-left:auto;color:#98a2b3;transition:transform .15s}
.dept-users .dept-panel.is-open .dept-panel-arrow{transform:rotate(180deg)}
.dept-users .dept-panel:not(.is-open) .dept-panel-body{display:none}
.dept-users .dept-panel-body{padding:2px 20px 20px;border-top:1px solid #eef0f4}
/* 旧的卡片外壳（白底/边框/圆角）改由面板统一提供，内层去掉，避免两层框套在一起 */
.dept-users .dept-positions,.dept-users .dept-user-form{background:none;border:0;border-radius:0;padding:0}
.dept-users .dept-user-form{display:grid;grid-template-columns:repeat(4,1fr);gap:12px 14px;align-items:start}
/* ⚠️ 必须用子选择器 `> label`：.pos-check 也是 <label>（在 .pos-checks 里嵌套），
   若用后代选择器会把这套 display:grid 套到勾选项上 → 勾选框与文字被拆成上下两行 ✗ */
.dept-users .dept-user-form > label{display:grid;gap:6px;color:#475467;font-size:13px}
.dept-users .dept-user-form .dept-span2{grid-column:span 2}
.dept-inline{display:flex;gap:6px;align-items:center}
.dept-inline input{flex:1;min-width:0}
.dept-inline .link-button{white-space:nowrap;padding:9px 10px;font-size:13px}
.dept-field-block{grid-column:1/-1;display:grid;gap:6px}
.dept-field-label{color:#475467;font-size:13px}
.pos-checks{display:flex;flex-wrap:wrap;gap:8px 16px;padding:12px 14px;background:#f8fafc;border:1px dashed #d0d5dd;border-radius:8px}
.dept-users .dept-user-form .dept-form-actions{grid-column:1/-1;display:flex;justify-content:flex-end;gap:10px;margin-top:2px}
.dept-form-actions .primary{min-width:110px}
@media(max-width:1100px){.dept-users .dept-user-form{grid-template-columns:repeat(2,1fr)}.dept-users .dept-user-form .dept-span2{grid-column:1/-1}}
@media(max-width:1024px){.dept-users .dept-user-form{grid-template-columns:1fr}}

/* 新增人员表单：字段收窄并排成一行（2026-09-13 用户反馈"这些框都太宽了，可以合并到一行来"）
   原 4 列网格每格 279px、表单内边距偏空 ✗ → 改 flex 自适应：宽屏时「部门/账号/姓名/手机号/钉钉号/自定义岗位」
   一行放下（各 150–285px），窄屏自动换行；岗位勾选块与创建按钮仍各占一整行。
   注：上面的 grid-template-columns 与 @media 里的 2 列/1 列规则在 flex 下不再生效（已由换行替代），保留不影响。 */
/* 基准宽度按可用宽反推：面板内容宽约 1163px 时，6 个字段基准合计 140×4 + 220×2 + 间隙 5×12 = 1060 ≤ 1163
   → 一行全部放下；若基准给大了（如 150/260），flex 会按基准换行，"自定义岗位"会独占第二行并被拉伸到整行 ✗ */
.dept-users .dept-user-form{display:flex;flex-wrap:wrap;align-items:flex-end;gap:12px}
.dept-users .dept-user-form > label{flex:1 1 140px;min-width:0}
/* 钉钉号（输入框 + 获取按钮）与自定义岗位略宽一些 */
.dept-users .dept-user-form label.dept-span2{flex:1.6 1 220px}
.dept-users .dept-user-form select[name="departmentId"]{width:100%}
.dept-users .dept-field-block,.dept-users .dept-user-form .dept-form-actions{flex:1 1 100%;width:100%}

/* 岗位勾选框收拢 + 自定义岗位单独收窄（2026-09-13 用户反馈"岗位选择框哪里太分散了，自定义新岗位太宽了"）
   原状：7 个勾选项按自然宽度 + 16px 间距摊在 1163px 宽的虚线框里 → 看着散 ✗；自定义岗位与钉钉号共用 flex:1.6 → 被撑到 243px ✗。
   改法：① 勾选框改**定宽列的网格**（每列 120–140px、行内列对齐、间距 6/8px）+ 每项做成**紧凑胶囊**，
   并把虚线框**最大宽度收到 620px**（不再横跨整行留一大片空白）→ 7 项排成 2 行整齐网格；
   ② 自定义岗位改 `.dept-narrow`（flex:0.6 1 130px）→ 约 140px；长标签"（逗号分隔）"挪进 placeholder。
   ⚠️ 用 `.dept-users` 前缀（0,2,0）压过本文件前面 `.pos-checks{display:flex...}` 等同级规则。 */
/* 2026-09-13 二次调整（用户：小卡片宽度要适配外面的大卡片，620px 太小）：去掉 max-width**，
   改用 `auto-fit` 让轨道数按容器宽自动铺满（1163px 容器 → 7 列，7 个岗位正好一行铺满、每格约 157px）；
   仍是等宽列 + 8px 窄间距 + 紧凑胶囊 → 整齐且不显散。胶囊上限 200px，避免岗位很少时被拉成超宽条。 */
/* 2026-09-13 三次调整（用户：每个岗位的小框还是长了点，可以缩短些）：列宽由"等分铺满"改为
   **固定上限 `minmax(112px,max-content)`**——常见 4 字岗位名 → 每格约 112px（原 155px，短了 43px ✓），
   遇超长岗位名时该列自动变宽、不会折行；`justify-content:start` 让整组靠左紧凑排列（外层大卡片仍是满宽 ✓）。 */
.dept-users .pos-checks{display:grid;grid-template-columns:repeat(auto-fill,minmax(112px,max-content));gap:6px 8px;justify-content:start;padding:10px 12px}
.dept-users .pos-check{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border:1px solid #e4e7ec;border-radius:14px;background:#fff;max-width:200px}
/* 复选框复位（2026-09-13）：表单里的 `.dept-user-form input{width:100%;padding:10px;...}` 会把**岗位勾选框**一起撑大
   （约 36px 高、宽度占满）→ 胶囊被顶到 44px ✗。这里显式还原成 14px 小方框（0,4,0 稳压 0,1,0 的通用 input 规则）。 */
.dept-users .pos-checks .pos-check input[type=checkbox]{width:14px;height:14px;min-width:0;flex:0 0 auto;margin:0;padding:0;border-radius:3px;accent-color:#1769c2}
.dept-users .dept-user-form label.dept-narrow{flex:0.6 1 130px}

/* 账号框内提示（2026-09-13 二次调整：用户"不要加宽框体，缩小字号就行"）
   上一版为容纳提示把账号框 171px 加宽到 292px → 用户不要加宽 ✗ → 这里**还原框宽**（删掉 .dept-account/.dept-span2/.dept-narrow
   的宽度覆盖，回到 v1.0.224 的一行排布），改为**缩小 placeholder 字号**。
   实测约束：提示原文 13px 约 262px，而账号框可用文字宽仅 149px（171 - 内边距 20 - 边框 2）→ 单靠缩字号也放不下（需 ~7px ✗ 不可读）
   → 故提示措辞精简为 "MZ+岗位英文简称+姓名缩写"（11px 下约 135px ✓ 完整可见），**完整规则**放在 input 的 title 悬浮提示里。 */
.dept-users .dept-user-form input::placeholder{font-size:11px;color:#98a2b3}

/* 卡片高度缩减（2026-09-13 用户：创建按钮离卡片底部间隙太大）——实测定位：
   ① 表单末尾的空错误提示段落 <p class=.error> 带 min-height:20px，空着也占 20px，再加 12px 换行间距 = **32px 空高** ✗（按钮底→表单底正好 32px）；
   ② 面板主体下内边距还有 20px。→ ①空时隐藏 ②下内边距 20→12px。
   预期：按钮底→卡片底 53 → 约 13px，卡片高 308 → 约 268px。 */
.dept-users .dept-user-form .error:empty{display:none}
.dept-users .dept-panel-body{padding:2px 20px 12px}

/* 版本号移到侧栏 logo 下方（2026-09-13 用户："版本号移到logo下面"）
   原来版本号在右侧页头 eyebrow 行里（"MINGZHE / MES · v1.0.227"），logo 在左侧栏（.brand）。
   现在把版本号放到 logo 正下方：.brand 原本 margin-bottom:44px，故版本用负上边距"嵌"进这段留白，
   再补一个小下边距，使 logo→版本→用户信息的总留白与原来基本一致（实测后按需微调）。
   移动端（≤800px）侧栏变成横向条，版本号隐藏，避免挤在 logo 右侧。 */
/* 2026-09-14 根治版本号与 logo 重叠：不再用负上边距嵌留白，改为 .side-brand 竖向 flex + gap 排版，
   任何断点都不会重叠。 */
.side-brand{display:flex;flex-direction:column;align-items:center;gap:6px;margin:0 auto 34px}
/* 容器内 logo 的下边距归零（0,2,0 优先级压过 app.css 各断点里的 .brand margin-bottom） */
.side-brand .brand{margin:0}
.side-version{margin:0;text-align:center;font-size:12px;color:#94a3b8;letter-spacing:.5px}
@media(max-width:800px){.side-version{display:none}}

/* 新增成功后的提示（A2 修复 2026-09-13）：弹窗退回“新增态”时显示“已保存：X，可继续新增” */
.inv-saved-hint{margin:4px 0 0;font-size:12px;color:#16a34a}

/* 2026-09-14（用户："同时建立产品档案（SN 归档）和勾选框要在同一行"）：
   根因同人事管理勾选项 —— .mz-fields > label 的 display:grid 把这一行也拆成了上下两行 ✗。
   这里显式改回 flex 同行，并把复选框复位成 14px（表单里的 input 通用样式会把它撑大 ✗）。 */
.mz-dialog-inv .inv-check-line{display:flex;align-items:center;gap:8px}
.mz-dialog-inv .inv-check-line input[type=checkbox]{width:14px;height:14px;min-width:0;flex:0 0 auto;margin:0;padding:0;accent-color:#1769c2}
