    :root{
        --side-1:#0d1b30; --side-2:#14294a; --bg:#f3f5f9; --card:#ffffff;
        --accent:#2563eb; --accent-d:#1d4ed8; --line:#e5e9f1; --line-2:#eef1f7; --text:#1c2434; --muted:#7b8794;
        --green:#16a34a; --amber:#d97706; --blue:#2563eb; --purple:#7c3aed; --gray:#94a3b8; --red:#dc2626;
        --th-bg:#f5f7fb; --hover-bg:#f6f9ff;
        --r-sm:8px; --r-md:12px; --r-lg:14px;
        --shadow-sm:0 1px 2px rgba(16,24,40,.05);
        --shadow:0 2px 10px rgba(16,24,40,.06);
        --shadow-lg:0 18px 50px rgba(16,24,40,.16);
        --focus-ring:0 0 0 3px rgba(37,99,235,.14);
    }
    *{box-sizing:border-box;}
    html,body{margin:0;padding:0;height:100%;font-family:-apple-system,"Microsoft YaHei",Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--text);}
    .layout{display:flex;min-height:100vh;}
    .sidebar{width:248px;color:#e8eefb;position:fixed;top:0;left:0;bottom:0;display:flex;flex-direction:column;background:linear-gradient(178deg,var(--side-1) 0%,var(--side-2) 100%);box-shadow:4px 0 20px rgba(11,31,58,.18);}
    .brand{padding:20px 16px 16px;border-bottom:1px solid rgba(255,255,255,.08);display:flex;align-items:center;gap:12px;}
    .brand .logo{width:38px;height:38px;border-radius:10px;flex:0 0 auto;background:linear-gradient(135deg,#3b82f6,#1d4ed8);display:flex;align-items:center;justify-content:center;font-weight:800;font-size:15px;color:#fff;box-shadow:0 4px 12px rgba(29,78,216,.40);letter-spacing:.5px;}
    .brand .meta{display:flex;flex-direction:column;min-width:0;}
    .brand .title{font-size:17px;font-weight:700;letter-spacing:.5px;color:#fff;line-height:1.25;}
    .brand .sub{font-size:11px;color:#a9c0ea;margin-top:3px;letter-spacing:.5px;}
    /* overflow-anchor:none —— 关掉浏览器的滚动锚定：导航内容因「分组折叠记忆恢复」等发生高度变化时，
       浏览器不得自行调整侧栏 scrollTop（否则会表现为「左侧导航自己滑动」）。 */
    .nav{padding:12px 12px;flex:1;overflow-y:auto;overflow-anchor:none;}
    .nav::-webkit-scrollbar{width:6px;}
    .nav::-webkit-scrollbar-thumb{background:rgba(255,255,255,.18);border-radius:3px;}
    /* 组名：亮蓝色 + 加粗，色相与亮度都明显高于子项，一眼可辨「这是分组标题」 */
    .nav-group-label{font-size:14px;color:#cfe2ff;padding:16px 12px 8px;letter-spacing:.5px;font-weight:700;display:flex;align-items:center;justify-content:space-between;cursor:pointer;user-select:none;}
    .nav-group-label .grp-toggle{width:14px;height:14px;flex:0 0 auto;opacity:.85;transition:transform .2s ease;}
    .nav-group-label.collapsed .grp-toggle{transform:rotate(-90deg);}
    .nav-group-label:hover{color:#d7e8ff;}
    /* 导航子项：左侧比分组标题(.nav-group-label)多缩进 1 个字符，用于区分「组名」与「组内页面」 */
    /* 子项用中性灰蓝（低饱和、低亮度），与组名的亮蓝拉开层次；悬停/选中时才提亮为白色 */
    .nav-item{display:flex;align-items:center;gap:10px;padding:9px 12px 9px calc(12px + 1em);margin:3px 0;border-radius:10px;color:#9aabc2;text-decoration:none;font-size:12.5px;cursor:pointer;position:relative;transition:background .18s ease,color .18s ease,transform .18s ease;}
    .nav-item:hover{background:rgba(255,255,255,.09);color:#fff;transform:translateX(2px);}
    .nav-item.active{background:linear-gradient(90deg,rgba(59,130,246,.30),rgba(59,130,246,.10));color:#fff;font-weight:600;box-shadow:inset 0 0 0 1px rgba(147,197,253,.25);}
    .nav-item.active::before{content:"";position:absolute;left:0;width:4px;height:22px;background:linear-gradient(180deg,#60a5fa,#3b82f6);border-radius:0 3px 3px 0;box-shadow:0 0 10px rgba(59,130,246,.7);}
    .nav-item.sub{padding-left:28px;font-size:12px;color:#9aabc2;}
    .side-foot{padding:14px 18px;font-size:11px;color:#8ea7d6;border-top:1px solid rgba(255,255,255,.10);letter-spacing:.3px;}
    .main{margin-left:248px;flex:1;padding:22px 26px 30px;min-width:0;background:var(--bg);}
    .page-head{margin-bottom:16px;display:flex;align-items:flex-end;justify-content:space-between;gap:16px;}
    .page-head h2{margin:6px 0 0;font-size:20px;font-weight:700;letter-spacing:.3px;color:#141d30;line-height:1.3;}
    .page-head .sub{color:var(--muted);font-size:12.5px;margin-top:5px;}
    /* 面包屑：分组名 › 页面短标题（Site.master 渲染） */
    .crumb{display:flex;align-items:center;gap:7px;font-size:12.5px;color:var(--muted);letter-spacing:.3px;}
    .crumb i{font-style:normal;color:#c2cad6;font-size:12px;}
    .crumb b{color:var(--accent);font-weight:600;}
    /* 页头右侧：登录用户胶囊（头像首字 + 姓名） */
    .ph-user{display:flex;align-items:center;gap:9px;padding:6px 12px 6px 6px;border-radius:999px;
        background:var(--card);border:1px solid var(--line);box-shadow:var(--shadow-sm);white-space:nowrap;}
    .ph-user .ava{width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;
        background:linear-gradient(135deg,#3b82f6,#1d4ed8);color:#fff;font-size:13px;font-weight:700;}
    .ph-user .una{font-size:13px;color:var(--text);font-weight:600;}
    .ph-user .urole{font-size:11px;color:var(--muted);}
    .filterbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;background:var(--card);border:1px solid var(--line);border-radius:var(--r-md);padding:10px 12px;margin-bottom:14px;box-shadow:var(--shadow-sm);}
    .filterbar select,.filterbar input[type=text],.filterbar input[type=month]{height:34px;padding:0 11px;border:1px solid #dfe5ee;border-radius:var(--r-sm);font-size:13px;outline:none;background:#fbfcfe;color:var(--text);transition:border-color .15s,box-shadow .15s;}
    .filterbar select:hover,.filterbar input[type=text]:hover,.filterbar input[type=month]:hover{border-color:#c9d4e5;}
    .filterbar select:focus,.filterbar input[type=text]:focus,.filterbar input[type=month]:focus{border-color:var(--accent);box-shadow:var(--focus-ring);background:#fff;}
    .filterbar input[type=text]{min-width:165px;}
    /* display:inline-flex + 居中：无论挂在 <button> 还是 <a> 上尺寸与文字垂直位置都一致
       （<a> 默认 inline 会忽略 height、文字基线偏上，且浏览器默认带下划线） */
    .btn{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;vertical-align:middle;
        height:34px;padding:0 16px;border:none;border-radius:var(--r-sm);background:var(--accent);color:#fff;
        font-size:13px;line-height:1;cursor:pointer;font-weight:500;letter-spacing:.3px;text-decoration:none;white-space:nowrap;
        box-shadow:none;transition:background .14s ease,box-shadow .14s ease,transform .06s ease;}
    .btn.ghost{background:#fff;color:#47536b;border:1px solid #dfe5ee;box-shadow:none;}
    .btn:hover{background:var(--accent-d);}
    .btn:active{transform:translateY(1px);}
    .btn:focus-visible{outline:none;box-shadow:var(--focus-ring);}
    .btn.ghost:hover{background:#f4f7fd;border-color:#c9d4e5;color:var(--accent);}
    /* 危险操作按钮（如考勤数据表重置）：红色醒目，提示不可恢复 */
    .btn.danger{background:#e23b3b;color:#fff;}
    .btn.danger:hover{background:#c92f2f;}
    .btn.danger:active{background:#b62a2a;}
    /* 筛选条操作按钮：紧凑尺寸，缩小宽度以便查询/重置/刷新/导出在同一行内显示 */
    .btn.sm{height:30px;padding:0 13px;font-size:12.5px;letter-spacing:0;border-radius:7px;box-shadow:none;}
    .table-wrap{background:var(--card);border:1px solid var(--line);border-radius:var(--r-md);overflow:auto;box-shadow:var(--shadow);}
    /* 绩效分配页（横剪/纵剪/碳钢/磨砂/深加工）：容器固定高度，内部滚动，
       配合 .alloc-x thead 的 position:sticky 实现「表头钉顶、仅表体滚动」。 */
    .table-wrap.alloc-scroll{max-height:calc(100vh - 210px);}
    /* 磨砂车间绩效：索引框（筛选条）下方的细分产能板块明细导航按钮行（紧凑版，
       样式对齐 月度考评/主观考评.aspx 的「考评表」导航：实心渐变胶囊(白字白图标)） */
    .ms-detail-nav{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:6px 0 10px;
        padding:6px 10px;background:#fff;border:1px solid #e9eef5;border-radius:10px;
        box-shadow:0 3px 10px rgba(31,56,90,.04);}
    .ms-detail-nav-label{font-size:12px;font-weight:600;color:#58697c;margin-right:2px;}
    .ms-nav-link{display:inline-flex;align-items:center;gap:5px;height:24px;padding:0 10px;
        font-size:12px;font-weight:600;color:#fff;text-decoration:none;border-radius:6px;
        background:linear-gradient(180deg,#3d85c4,#2b6aa6);box-shadow:0 2px 5px rgba(43,106,166,.22);
        transition:filter .15s,transform .1s;white-space:nowrap;cursor:pointer;line-height:1;}
    .ms-nav-link svg{width:12px;height:12px;flex:none;}
    .ms-nav-link:hover{filter:brightness(1.08);color:#fff;}
    .ms-nav-link:active{transform:translateY(1px);}
    .ms-nav-link.c2{background:linear-gradient(180deg,#2fae86,#1e8f6b);box-shadow:0 2px 5px rgba(30,143,107,.22);}
    .ms-nav-link.c3{background:linear-gradient(180deg,#8065d6,#6548bf);box-shadow:0 2px 5px rgba(101,72,191,.22);}
    .ms-nav-link.c4{background:linear-gradient(180deg,#e0903a,#c0762a);box-shadow:0 2px 5px rgba(192,118,42,.22);}
    .ms-nav-link.c5{background:linear-gradient(180deg,#3aa6c0,#2a8aa6);box-shadow:0 2px 5px rgba(42,138,166,.22);}
    .ms-nav-link.c6{background:linear-gradient(180deg,#d65f8a,#bf4870);box-shadow:0 2px 5px rgba(191,72,112,.22);}
    .ms-nav-link.c7{background:linear-gradient(180deg,#5a7fd6,#4864bf);box-shadow:0 2px 5px rgba(72,100,191,.22);}
    table.tbl{border-collapse:collapse;width:100%;font-size:13px;}
    table.tbl th{position:sticky;top:0;background:var(--th-bg);text-align:left;padding:11px 14px;border-bottom:1px solid #dfe5ee;color:#5b6678;font-weight:600;font-size:12.5px;letter-spacing:.3px;white-space:nowrap;box-shadow:0 1px 0 #dfe5ee;z-index:1;}
    table.tbl td{padding:10px 14px;border-bottom:1px solid var(--line-2);white-space:nowrap;color:#33415c;}
    table.tbl tbody tr{transition:background .1s ease;}
    table.tbl tbody tr:hover{background:var(--hover-bg);}
    table.tbl tbody tr:hover td:first-child{box-shadow:inset 3px 0 0 var(--accent);}
    table.tbl tbody tr:nth-child(even){background:#fbfcfe;}
    table.tbl tbody tr:nth-child(even):hover{background:var(--hover-bg);}
    td.idx{color:var(--gray);width:42px;text-align:center;}
    table.tbl th.idx{width:42px;text-align:center;color:var(--muted);}
    /* 人员信息页：表格内直接编辑的工种 / 学历 / 入职日期 */
    input.cell-ed,select.cell-ed{width:100%;min-width:96px;padding:5px 7px;border:1px solid var(--line);border-radius:6px;
        font:inherit;font-size:13px;color:var(--text);background:#fff;outline:none;}
    input.cell-ed:focus,select.cell-ed:focus{border-color:var(--accent);box-shadow:0 0 0 2px rgba(37,99,235,.15);}
    input.cell-ed[type=date]{min-width:132px;}
    .btn.save{background:var(--green);color:#fff;}
    /* 考勤总览：刷新按钮 / 设备列换行 */
    .btn.refresh{background:#0891b2;color:#fff;}
    .btn.export{background:var(--purple);color:#fff;}
    /* 帮工情况「跨车间帮工」开关：默认中性灰，点亮后琥珀色发光（点亮 = 仅显示跨车间帮工） */
    .btn.toggle{background:#eef2ff;color:#475569;border:1px solid #c7d2fe;box-shadow:none;}
    .btn.toggle.on{background:linear-gradient(180deg,#f59e0b,#d97706);color:#fff;border-color:#d97706;box-shadow:0 4px 12px rgba(217,119,6,.30);}
    .btn.toggle.on:hover{box-shadow:0 6px 16px rgba(217,119,6,.40);}
    /* 安全管理 · 数据图表：图表展示 / 车间报表 / 班组报表 分段切换（占位：默认选中「图表展示」） */
    .seg{display:inline-flex;border:1px solid var(--line);border-radius:9px;overflow:hidden;background:#fff;}
    .seg-btn{border:none;background:#fff;color:#475569;padding:6px 14px;font-size:12.5px;cursor:pointer;letter-spacing:0;font-weight:500;transition:background .12s ease,color .12s ease;}
    .seg-btn + .seg-btn{border-left:1px solid var(--line);}
    .seg-btn:hover{background:#f1f5ff;}
    .seg-btn.active{background:linear-gradient(180deg,var(--accent),var(--accent-d));color:#fff;box-shadow:none;}
    table.tbl td.dev{white-space:normal;max-width:320px;line-height:1.6;}
    /* ===== 安全管理 · 数据图表（车间 × 机组 评分汇总表）===== */
    table.tbl td.num{text-align:right;font-variant-numeric:tabular-nums;}
    table.tbl th.num{text-align:right;}
    /* 安全评分是三项之和，作为汇总列加重显示 */
    table.tbl th.sum-col,table.tbl td.sum-col{background:#f5f8ff;font-weight:700;color:#1d4ed8;}
    table.tbl tr.rsum td{background:#eef4ff;font-weight:700;color:#16223b;border-top:2px solid #c7d2fe;}
    table.tbl tr.rsum td.idx{color:var(--accent);font-weight:700;}
    /* 机组列由多个班组归并而来：虚下划线提示「可悬停查看包含哪些班组」 */
    table.tbl td.mach{white-space:nowrap;cursor:help;text-decoration:underline dotted #9fb3d9;}
    table.tbl td.mach:hover{color:var(--accent);}
    .chart-tip{display:block;margin:12px 2px 0;line-height:1.8;}
    /* 安全管理 · 数据图表：车间安全评分条形图（图表展示视图）*/
    .saf-view{margin:2px 0;}
    /* 安全管理 · 数据图表：图表展示视图左右两栏（左=安全总评分条形图，右=三张数量柱状图），整页一屏显示 */
    .chart-duo{display:grid;grid-template-columns:minmax(360px,2fr) 3fr;gap:16px;align-items:start;}
    @media (max-width:1100px){.chart-duo{grid-template-columns:1fr;}}
    .chart-left,.chart-right{min-width:0;}
    /* 标题：左侧主色竖条装饰 */
    .chart-h{font-size:16px;font-weight:800;color:#16223b;margin:2px 2px 10px;padding-left:12px;position:relative;letter-spacing:.5px;}
    .chart-h::before{content:'';position:absolute;left:0;top:50%;transform:translateY(-50%);width:4px;height:16px;border-radius:2px;background:linear-gradient(180deg,#3b82f6,#1d4ed8);}
    /* 左栏：安全总评分条形图 */
    .barchart{margin:0;padding:14px 18px 12px;background:linear-gradient(180deg,#ffffff,#fafcff);
        border:1px solid var(--line);border-radius:12px;box-shadow:0 4px 14px rgba(30,50,90,.07);}
    /* 考勤总览：条形图卡片宽度减半（KPI 速览与标题保持通栏）；仅该页图表带 half 类，数据图表页不受影响 */
    .barchart.half{width:50%;max-width:50%;}
    .bar-row{display:flex;align-items:center;gap:12px;padding:8px 6px;border-radius:8px;}
    .bar-row:hover{background:#f3f7ff;}
    .bar-row + .bar-row{border-top:1px dashed #eef1f6;}
    .bar-rank{width:24px;flex:0 0 24px;text-align:center;color:#8b98ad;font-size:12px;font-weight:700;font-variant-numeric:tabular-nums;}
    .bar-row:first-child .bar-rank{color:#d97706;}
    .bar-label{width:96px;flex:0 0 96px;text-align:right;color:#16223b;font-size:12.5px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
    .bar-track{flex:1;background:#eef2f8;border-radius:8px;height:18px;overflow:hidden;position:relative;}
    .bar-fill{height:18px;line-height:18px;border-radius:8px;color:#fff;font-size:11px;font-weight:700;
        padding:0 8px;box-sizing:border-box;text-align:right;font-variant-numeric:tabular-nums;
        white-space:nowrap;box-shadow:inset 0 -1px 2px rgba(0,0,0,.12);transition:width .25s ease;}
    /* 左栏下方：作业票超时审批 · 责任车间扇型图（环形） */
    .pie-card{margin-top:0;padding:14px 18px 10px;background:linear-gradient(180deg,#ffffff,#fafcff);
        border:1px solid var(--line);border-radius:12px;box-shadow:0 4px 14px rgba(30,50,90,.07);}
    /* 加工总览：扇形图卡片宽度减半（与考勤总览的条形图一致），避免图例被拉得过长 */
    .pie-card.half{width:50%;max-width:50%;}
    /* 数据图表页（attchart）：月度出勤情况环形图取当前卡片（50%）的 2/3 宽 ≈ 33.3% */
    .pie-card.attchart-pie{width:33.333%;max-width:33.333%;}
    /* 数据图表页（attchart）：上方一行 = 左「月度出勤情况」环形图 + 右侧三张车间扇形图（三张平分剩余宽度） */
    .attchart-top{display:flex;flex-wrap:wrap;gap:18px;align-items:stretch;}
    .attchart-top > .pie-card.attchart-pie{flex:0 0 auto;}
    .attchart-pies{flex:1 1 0;min-width:0;display:flex;flex-wrap:wrap;gap:18px;align-items:stretch;}
    .attchart-pies > .pie-card.attchart-ws3{flex:1 1 0;min-width:0;width:auto;max-width:none;margin-top:0;display:flex;flex-direction:column;}
    /* 三张小扇形图：环形缩小居中，图例改两列紧凑网格铺在下方 */
    .attchart-ws3 .pie-wrap{justify-content:center;}
    .attchart-ws3 .pie-svg{flex:0 0 150px;width:150px;height:146px;}
    .attchart-ws3 .pie-legend{flex:1 1 100%;min-width:0;grid-template-columns:1fr 1fr;gap:1px 12px;align-content:start;}
    .attchart-ws3 .pie-item{font-size:11px;gap:5px;padding:2px 4px;}
    .attchart-ws3 .pie-pct{width:36px;font-size:10.5px;}
    /* 数据图表页（attchart）：下方一行 = 左「各车间总考勤时长」条形图 + 右「各车间加班时长」分组柱状图，
       左卡固定 33.333% 宽，右卡加宽至覆盖剩余宽度；align-items:stretch 使二者等高 */
    .attchart-mid{display:flex;flex-wrap:wrap;gap:18px;align-items:stretch;margin-top:14px;}
    .attchart-mid > .barchart.att-ws-total{flex:0 0 33.333%;width:33.333%;max-width:33.333%;margin-top:0;}
    /* 加班柱状图卡片：宽度自适应覆盖剩余空间（flex-grow），纵向弹性，绘图区撑满卡片剩余高度 → 与左卡等高 */
    .attchart-mid > .barchart.att-ws-ot{flex:1 1 300px;width:auto;max-width:none;min-width:0;margin-top:0;display:flex;flex-direction:column;}
    .attchart-mid > .barchart.att-ws-ot .col-plot{flex:1 1 auto;min-height:150px;align-items:stretch;}
    .attchart-mid > .barchart.att-ws-ot .col-group{height:100%;min-width:46px;flex:1 1 0;}
    .attchart-mid > .barchart.att-ws-ot .col-bars{flex:1 1 auto;height:auto;min-height:0;gap:2px;padding:0 3px;}
    /* 柱体加宽：随分组宽度自适应（不再固定 9px），三根柱填满各分组的多数宽度，观感更饱满 */
    .attchart-mid > .barchart.att-ws-ot .col-bar{flex:1 1 0;width:auto;min-width:10px;max-width:40px;border-radius:3px 3px 0 0;}
    /* —— 数据图表页美化：卡片悬停微抬升 / 标题右侧月份徽标 / 柱状图横向网格线 / 拉伸卡片内容垂直居中 —— */
    .attchart-top > .pie-card, .attchart-pies > .pie-card, .attchart-mid > .barchart{transition:box-shadow .18s ease,transform .18s ease;}
    .attchart-top > .pie-card:hover, .attchart-pies > .pie-card:hover, .attchart-mid > .barchart:hover{transform:translateY(-2px);box-shadow:0 8px 22px rgba(30,50,90,.13);}
    .attchart-top .chart-h, .attchart-mid .chart-h{display:flex;align-items:center;padding-right:2px;}
    .chart-month{margin-left:auto;flex:0 0 auto;font-size:11px;font-weight:700;color:#4a5b78;letter-spacing:.5px;
        background:linear-gradient(180deg,#eef4ff,#e3ecfb);border:1px solid #d9e4f5;border-radius:10px;padding:2px 9px;font-variant-numeric:tabular-nums;}
    .attchart-top > .pie-card.attchart-pie{display:flex;flex-direction:column;}
    .attchart-top > .pie-card.attchart-pie .pie-wrap{flex:1 1 auto;}
    .attchart-mid > .barchart.att-ws-ot .col-bars{background:linear-gradient(#edf1f7 1px,transparent 1px) 0 0/100% 25%;}
    .attchart-ws3 .pie-cnt{font-size:30px;}
    .attchart-ws3 .pie-cap{font-size:14px;}
    /* 分组柱状图（各车间加班时长）：每车间 3 根柱子（平时/休息日/节假日） */
    .barchart.att-ws-ot .chart-h{margin-bottom:6px;}
    .col-legend{display:flex;gap:14px;flex-wrap:wrap;margin:2px 2px 10px;font-size:12px;color:#5b6678;}
    .col-leg{display:inline-flex;align-items:center;gap:5px;}
    .col-leg i{width:10px;height:10px;border-radius:2px;display:inline-block;}
    .col-plot{display:flex;align-items:flex-end;gap:8px;padding:6px 2px 0;overflow-x:auto;}
    .col-group{flex:1 1 0;min-width:34px;display:flex;flex-direction:column;align-items:center;}
    .col-bars{display:flex;align-items:flex-end;justify-content:center;gap:2px;height:200px;width:100%;border-bottom:1px solid var(--line);}
    .col-bar{width:9px;border-radius:2px 2px 0 0;min-height:0;transition:height .3s;}
    .col-label{margin-top:6px;font-size:11px;color:#5b6678;text-align:center;white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis;}
    .pie-sum{font-size:12.5px;color:#5b6678;line-height:1.8;margin-bottom:6px;}
    .pie-sum b{color:#e53935;font-weight:800;font-variant-numeric:tabular-nums;}
    .pie-empty{padding:26px 8px;text-align:center;color:var(--muted);font-size:12.5px;line-height:1.9;}
    .pie-empty b{color:#16a34a;}
    .pie-wrap{display:flex;gap:16px;align-items:center;flex-wrap:wrap;padding:4px 0 2px;}
    .pie-svg{flex:0 0 210px;width:210px;height:204px;}
    .pie-svg .slice{transition:opacity .14s ease;}
    .pie-svg .slice:hover{opacity:.78;}
    .pie-cnt{fill:#16223b;font-size:27px;font-weight:800;text-anchor:middle;font-variant-numeric:tabular-nums;}
    .pie-cap{fill:#8b98ad;font-size:11px;text-anchor:middle;}
    .pie-legend{flex:1;min-width:190px;display:grid;gap:5px;align-content:center;}
    .pie-item{display:flex;align-items:center;gap:8px;font-size:12.5px;color:#33415c;
        padding:3px 7px;border-radius:7px;transition:background .12s ease;}
    .pie-item:hover{background:#f3f7ff;}
    .pie-dot{flex:0 0 10px;width:10px;height:10px;border-radius:3px;}
    .pie-name{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
        font-weight:700;color:#16223b;}
    .pie-val{font-variant-numeric:tabular-nums;font-weight:800;color:#e53935;white-space:nowrap;}
    .pie-pct{width:50px;text-align:right;font-variant-numeric:tabular-nums;color:#7a8699;white-space:nowrap;}
    /* 右栏：三张竖向「数量 / 整改数量」柱状图 */
    .count-stack{display:flex;flex-direction:column;gap:14px;}
    .count-card{background:linear-gradient(180deg,#ffffff,#fafcff);border:1px solid var(--line);
        border-radius:12px;padding:12px 16px 14px;box-shadow:0 4px 14px rgba(30,50,90,.07);}
    .count-card h4{text-align:center;font-size:15px;font-weight:800;color:#16223b;margin:0 0 6px;letter-spacing:1px;}
    .cbar-legend{text-align:center;font-size:11px;color:#5b6678;margin:0 0 8px;}
    .cbar-legend .lg{display:inline-block;width:9px;height:9px;border-radius:2px;margin:0 5px 0 12px;vertical-align:-1px;}
    .cbar-legend .lg:first-child{margin-left:0;}
    .lg-total{background:#5b8ff9;} .lg-fix{background:#1f9d55;}
    .vplot{display:flex;gap:4px;align-items:stretch;padding-top:4px;}
    .vcell{flex:1;min-width:0;display:flex;flex-direction:column;align-items:center;border-radius:6px;}
    .vcell:hover{background:#f3f7ff;}
    .vbars{display:flex;align-items:flex-end;justify-content:center;gap:5px;height:150px;}
    .vcol{display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%;}
    .vnum{font-size:11px;color:#33415c;font-weight:700;line-height:1.2;font-variant-numeric:tabular-nums;margin-bottom:2px;}
    .vbar{display:block;width:22px;border-radius:5px 5px 0 0;box-shadow:0 1px 3px rgba(20,40,90,.18);transition:height .25s ease;}
    .c-total{background:linear-gradient(180deg,#7aa6ff,#3d7bf7);}
    .c-fix{background:linear-gradient(180deg,#3cc57f,#169549);}
    .vname{margin-top:5px;max-width:66px;font-size:10.5px;color:#42506b;font-weight:600;line-height:1.25;text-align:center;
        overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;}
    /* ---- 图表展示美化：KPI 摘要条 / 条形图图例与奖牌名次 / 柱状图网格基线 / 评分药丸 ---- */
    .kpi-strip{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:0 0 14px;}
    @media (max-width:1100px){.kpi-strip{grid-template-columns:repeat(2,minmax(0,1fr));}}
    .kpi{background:linear-gradient(180deg,#ffffff,#fafcff);border:1px solid var(--line);border-left-width:4px;
        border-radius:12px;padding:11px 16px;box-shadow:0 4px 14px rgba(30,50,90,.07);}
    .kpi .k-label{font-size:12px;color:#5b6678;font-weight:600;letter-spacing:.5px;}
    .kpi .k-val{margin-top:4px;font-size:24px;font-weight:800;color:#16223b;line-height:1.25;
        font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
    .kpi .k-val small{font-size:11.5px;color:#8b98ad;font-weight:600;margin-left:4px;letter-spacing:0;}
    .kpi.k-blue{border-left-color:#3d7bf7;}
    .kpi.k-violet{border-left-color:#7c3aed;}
    .kpi.k-green{border-left-color:#1f9d55;} .kpi.k-green .k-val{color:#1f9d55;}
    .kpi.k-orange{border-left-color:#d97706;} .kpi.k-orange .k-val{color:#d97706;}
    .kpi.k-red{border-left-color:#e53935;} .kpi.k-red .k-val{color:#e53935;}
    /* 条形图：卡内图例（分档色卡），替代原先卡片下方的整段文字说明 */
    .bar-legend{display:flex;align-items:center;gap:7px;flex-wrap:wrap;font-size:11.5px;color:#7a8699;
        margin:0 0 6px;padding-bottom:8px;border-bottom:1px dashed #eef1f6;}
    .bar-legend .chip{display:inline-flex;align-items:center;gap:5px;padding:2px 9px;border-radius:10px;
        background:#f4f7fd;color:#5b6678;font-weight:600;font-variant-numeric:tabular-nums;}
    .bar-legend .chip i{width:9px;height:9px;border-radius:3px;display:inline-block;}
    .bar-legend .chip.full{margin-left:auto;}
    /* 条形图：前三名奖牌位 + 分值外置 */
    .bar-rank{width:26px;flex:0 0 26px;height:20px;line-height:20px;border-radius:7px;}
    .bar-rank.r1{background:linear-gradient(180deg,#fbbf24,#d97706);color:#fff;}
    .bar-rank.r2{background:#e2e8f0;color:#475569;}
    .bar-rank.r3{background:#fde3cc;color:#b45309;}
    .bar-row:hover .bar-fill{filter:brightness(1.08) saturate(1.05);}
    .bar-score{width:48px;flex:0 0 48px;text-align:right;font-weight:800;font-size:13px;
        font-variant-numeric:tabular-nums;}
    .bar-score.hi{color:#1f9d55;} .bar-score.mid{color:#d97706;} .bar-score.lo{color:#dc2626;}
    @keyframes barGrow{from{width:0;}}
    .bar-fill{animation:barGrow .55s ease both;}
    /* 柱状图：底轴 + 横向网格线 + 柱宽加大 */
    .vplot{border-bottom:1px solid #e3eaf5;}
    .vbars{background:repeating-linear-gradient(180deg,transparent 0 29px,#eef2f8 29px 30px);border-radius:2px;}
    .vbar{width:30px;}
    .vnum.zero{color:#b6c0d2;font-weight:600;}
    .cdot{display:inline-block;width:9px;height:9px;border-radius:3px;margin-right:7px;vertical-align:0;}
    /* 评分药丸：表格里把分档着色成圆角徽标（车间报表 / 班组报表共用） */
    .score-pill{display:inline-block;min-width:46px;text-align:center;padding:2px 10px;border-radius:10px;
        font-size:12.5px;font-weight:800;font-variant-numeric:tabular-nums;color:#fff;letter-spacing:.3px;}
    .score-pill.hi{background:linear-gradient(180deg,#2fae6d,#1f9d55);}
    .score-pill.mid{background:linear-gradient(180deg,#f0a13a,#d97706);}
    .score-pill.lo{background:linear-gradient(180deg,#ef5350,#dc2626);}
    /* 扇型图：环形投影 + 可点击手型 */
    .pie-svg{filter:drop-shadow(0 5px 12px rgba(30,50,90,.14));}
    .pie-svg .slice{cursor:pointer;}
    /* ===== 安全管理 · 数据图表（图表展示）：压缩到一屏内完整显示，不出现整页滚动 ===== */
    #safViewChart .kpi-strip{gap:10px;margin-bottom:10px;}
    #safViewChart .kpi{padding:8px 14px;}
    #safViewChart .kpi .k-label{font-size:11.5px;}
    #safViewChart .kpi .k-val{margin-top:2px;font-size:20px;}
    #safViewChart .kpi .k-val small{font-size:11px;}
    #safViewChart .chart-h{font-size:15px;margin-bottom:6px;}
    #safViewChart .barchart{padding:10px 14px 8px;}
    #safViewChart .bar-legend{padding-bottom:6px;margin-bottom:4px;}
    #safViewChart .bar-row{padding:2px 6px;}
    #safViewChart .bar-track,#safViewChart .bar-fill{height:15px;line-height:15px;}
    #safViewChart .pie-card{padding:10px 14px 8px;}
    #safViewChart .pie-sum{font-size:11.5px;line-height:1.5;margin-bottom:4px;}
    #safViewChart .pie-svg{flex:0 0 150px;width:150px;height:146px;}
    #safViewChart .pie-legend{min-width:160px;grid-template-columns:repeat(2,minmax(0,1fr));gap:2px 10px;align-content:start;}
    #safViewChart .pie-item{font-size:12px;padding:2px 6px;}
    #safViewChart .count-stack{gap:10px;}
    #safViewChart .count-card{padding:8px 12px 10px;}
    #safViewChart .count-card h4{font-size:14px;margin:0 0 3px;}
    #safViewChart .cbar-legend{margin-bottom:4px;}
    #safViewChart .vbars{height:92px;}
    #safViewChart .vbar{width:26px;}
    #safViewChart .vname{margin-top:3px;font-size:10px;line-height:1.15;}
    /* 矮屏（1366×768 及以下）：进一步收紧，保证整页仍能一屏显示 */
    @media (max-height:820px){
        #safViewChart .kpi-strip{gap:8px;margin-bottom:8px;}
        #safViewChart .kpi{padding:6px 12px;}
        #safViewChart .kpi .k-val{font-size:18px;}
        #safViewChart .chart-h{font-size:14px;margin-bottom:4px;}
        #safViewChart .barchart{padding:8px 12px 6px;}
        #safViewChart .bar-legend{padding-bottom:4px;margin-bottom:2px;font-size:10.5px;}
        #safViewChart .bar-row{padding:1px 6px;}
        #safViewChart .bar-track,#safViewChart .bar-fill{height:13px;line-height:13px;}
        #safViewChart .pie-card{padding:8px 12px 6px;}
        #safViewChart .pie-sum{font-size:11px;line-height:1.4;margin-bottom:2px;}
        #safViewChart .pie-svg{flex:0 0 132px;width:132px;height:128px;}
        #safViewChart .count-stack{gap:8px;}
        #safViewChart .count-card{padding:6px 10px 8px;}
        #safViewChart .count-card h4{font-size:13px;margin:0 0 2px;}
        #safViewChart .cbar-legend{margin-bottom:2px;font-size:10.5px;}
        #safViewChart .vbars{height:78px;}
        #safViewChart .vname{font-size:9.5px;margin-top:2px;}
    }
    .filterbar input[type=month]{min-width:140px;}
    .ftip{font-size:12px;color:var(--muted);margin-left:6px;}
    .null-val{color:var(--gray);}
    /* 作业票审批：下一级审批较上一级超时（>20 分钟）时，对应审批时间 / 责任车间 / 审批人标红 */
    table.tbl td.ot{color:#e53935;font-weight:700;}
    /* 作业票审批：表单状态三态标签（与「危险作业票报表.aspx」语义一致） */
    .status-tag{display:inline-block;padding:3px 11px;border-radius:12px;font-size:12px;font-weight:600;color:#fff;white-space:nowrap;letter-spacing:1px;}
    .status-pass{background:#2e7d32;}
    .status-fail{background:#ef6c00;}
    .status-void{background:#c62828;}
    /* 作业票审批：预览 PDF 链接 */
    a.pv-link{display:inline-block;padding:4px 13px;border-radius:6px;background:#1d6fe0;color:#fff;text-decoration:none;font-size:12.5px;font-weight:600;white-space:nowrap;}
    a.pv-link:hover{background:#155ed6;color:#fff;}
    /* 操作列：删除 */
    a.del{display:inline-block;padding:4px 12px;border:1px solid #fecaca;border-radius:6px;background:#fef2f2;
        color:#dc2626;font-size:12.5px;text-decoration:none;white-space:nowrap;}
    a.del:hover{background:#fee2e2;border-color:#fca5a5;}
    table.tbl th.op,td.op{width:96px;text-align:center;}
    .tag{display:inline-block;padding:2px 10px;border-radius:999px;font-size:12px;font-weight:500;box-shadow:var(--shadow-sm);}
    .tag-green{background:#dcfce7;color:var(--green);}
    .tag-amber{background:#fef3c7;color:var(--amber);}
    .tag-blue{background:#dbeafe;color:var(--blue);}
    .tag-purple{background:#ede9fe;color:var(--purple);}
    .tag-gray{background:#f1f5f9;color:var(--muted);}
    .empty{padding:52px 20px;text-align:center;color:#9aa5b5;font-size:13px;position:relative;}
    .empty::before{content:"";display:block;width:52px;height:52px;margin:0 auto 12px;border-radius:14px;
        background:#f1f5fa url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23aab6c6' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z'/%3E%3Cpath d='M14 2v6h6'/%3E%3Cpath d='M9 13h6M9 17h4'/%3E%3C/svg%3E") center/24px no-repeat;}
    .pager{display:flex;align-items:center;gap:7px;padding:12px 14px;flex-wrap:wrap;border-top:1px solid var(--line);background:#fafbfd;border-radius:0 0 var(--r-md) var(--r-md);}
    .pager .pinfo{color:var(--muted);font-size:12.5px;margin-right:6px;}
    .pager .lnk{padding:6px 12px;border:1px solid var(--line);border-radius:8px;background:#fff;cursor:pointer;font-size:12.5px;text-decoration:none;color:var(--text);transition:all .14s;}
    .pager .lnk:hover{border-color:var(--accent);color:var(--accent);}
    .pager .lnk.active{background:var(--accent);border-color:var(--accent);color:#fff;cursor:default;font-weight:600;}
    .pager .lnk.disabled{color:var(--muted);background:#f3f4f6;cursor:not-allowed;opacity:.7;}
    .pager .pgdot{color:var(--muted);padding:0 1px;}
    /* 考勤列表 · 姓名索引框筛选提示条 */
    .filter-cap{padding:9px 14px;margin-bottom:10px;background:#eef4ff;border:1px solid #c7d2fe;border-radius:9px;font-size:13px;color:#334155;}
    .filter-cap b{color:#1d4ed8;}
    .filter-cap .filter-clear{margin-left:12px;color:#2563eb;text-decoration:none;border:1px solid #c7d2fe;padding:3px 10px;border-radius:7px;font-size:12px;transition:all .15s;}
    .filter-cap .filter-clear:hover{background:#fff;border-color:var(--accent);box-shadow:var(--shadow-sm);}
    /* ===== 上传提示 / 弹窗 ===== */
    .msg{padding:9px 14px;border-radius:var(--r-sm);font-size:13px;margin-bottom:12px;border:1px solid transparent;border-left-width:4px;}
    .msg.ok{background:#f0fdf4;color:#15803d;border-color:#bbf7d0;border-left-color:var(--green);}
    .msg.err{background:#fef2f2;color:#dc2626;border-color:#fecaca;border-left-color:var(--red);}
    /* 操作成功但存在需要人工关注的口径异常（如导入完成但备注/基价可疑） */
    .msg.warn{background:#fffbeb;color:#b45309;border-color:#fde68a;border-left-color:var(--amber);}
    .modal{display:none;position:fixed;top:0;left:0;right:0;bottom:0;z-index:100;align-items:center;justify-content:center;}
    .modal.show{display:flex;}
    .modal-mask{position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(15,23,42,.45);}
    .modal-box{position:relative;background:#fff;border-radius:16px;width:460px;max-width:92vw;box-shadow:var(--shadow-lg);overflow:hidden;}
    .modal-head{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid var(--line);font-weight:600;}
    .modal-x{border:none;background:transparent;font-size:22px;line-height:1;cursor:pointer;color:var(--muted);}
    .modal-body{padding:16px 18px;max-height:70vh;overflow:auto;}
    .fld{margin-bottom:14px;}
    .fld label{display:block;font-size:12px;color:var(--muted);margin-bottom:5px;}
    .fld select,.fld input[type=file]{width:100%;padding:7px 10px;border:1px solid var(--line);border-radius:7px;font-size:13px;}
    .tip{font-size:12px;color:var(--muted);background:#f8fafc;border:1px dashed var(--line);border-radius:7px;padding:8px 10px;word-break:break-all;line-height:1.6;}
    .modal-foot{display:flex;gap:10px;justify-content:flex-end;padding:12px 18px;border-top:1px solid var(--line);background:#f8fafc;}
    /* 作业票审批 · 点【刷新】同步微信云数据库时的全屏加载遮罩：立刻出现、显示进度，
       避免 8~13 秒的同步过程里让人误以为页面卡死。整页回发完成、页面重新渲染后遮罩自然消失。 */
    .sync-mask{display:none;position:fixed;top:0;left:0;right:0;bottom:0;z-index:300;background:rgba(15,23,42,.5);align-items:center;justify-content:center;}
    .sync-mask.show{display:flex;animation:syncFade .18s ease;}
    @keyframes syncFade{from{opacity:0;}to{opacity:1;}}
    .sync-box{position:relative;width:430px;max-width:92vw;background:#fff;border-radius:16px;box-shadow:var(--shadow-lg);padding:22px 24px 18px;text-align:center;}
    .sync-spin{width:46px;height:46px;margin:2px auto 12px;border-radius:50%;border:4px solid rgba(8,145,178,.18);border-top-color:#0891b2;animation:syncSpin .8s linear infinite;}
    @keyframes syncSpin{to{transform:rotate(360deg);}}
    .sync-title{font-size:15px;font-weight:700;color:#0f172a;letter-spacing:.2px;}
    .sync-sub{margin-top:6px;font-size:12.5px;color:var(--muted);min-height:18px;}
    .sync-bar{position:relative;height:10px;margin:14px 0 7px;border-radius:999px;background:#eef2f7;overflow:hidden;}
    .sync-bar i{position:relative;display:block;height:100%;width:0;border-radius:999px;overflow:hidden;background:linear-gradient(90deg,#0891b2,#22c1c3);transition:width .25s linear;}
    .sync-bar i::after{content:"";position:absolute;top:0;bottom:0;left:-45%;width:45%;background:linear-gradient(90deg,rgba(255,255,255,0),rgba(255,255,255,.65),rgba(255,255,255,0));animation:syncSheen 1.1s linear infinite;}
    @keyframes syncSheen{to{left:110%;}}
    .sync-meta{display:flex;justify-content:space-between;font-size:12px;color:var(--muted);}
    .sync-meta b{color:#0891b2;font-weight:700;}
    .sync-steps{margin:14px 0 0;text-align:left;font-size:12.5px;color:#a3aec0;display:grid;gap:5px;}
    .sync-steps div{display:flex;align-items:center;gap:7px;}
    .sync-steps div.now{color:#0f172a;font-weight:600;}
    .sync-steps div.done{color:#16a34a;}
    .sync-steps em{font-style:normal;width:13px;display:inline-block;text-align:center;}
    /* ===== 安全违章：违章图片 / 整改图片列（缩略图 + 点击看大图）===== */
    table.tbl td.photo{vertical-align:middle;}
    img.vthumb{display:block;width:76px;height:56px;object-fit:cover;border-radius:7px;border:1px solid #dbe4f0;
        background:#f1f5f9;cursor:zoom-in;transition:transform .14s ease,box-shadow .14s ease,border-color .14s ease;}
    img.vthumb:hover{transform:translateY(-2px) scale(1.05);border-color:#93c5fd;box-shadow:0 6px 16px rgba(37,99,235,.28);}
    span.noimg{display:inline-block;width:76px;height:56px;line-height:56px;text-align:center;
        border:1px dashed #cbd5e1;border-radius:7px;color:#94a3b8;font-size:12px;background:#f8fafc;}
    /* 照片大图查看层（覆盖整屏，点击任意处或 Esc 关闭） */
    .imgview{display:none;position:fixed;top:0;left:0;right:0;bottom:0;z-index:400;background:rgba(9,14,26,.84);
        align-items:center;justify-content:center;flex-direction:column;gap:12px;cursor:zoom-out;}
    .imgview.show{display:flex;animation:syncFade .16s ease;}
    .imgview img{max-width:88vw;max-height:80vh;border-radius:10px;background:#fff;box-shadow:0 18px 50px rgba(0,0,0,.55);cursor:default;}
    .imgview-tip{color:rgba(255,255,255,.82);font-size:12.5px;letter-spacing:.5px;}
    /* 导出遮罩：沿用同步遮罩外观，主色换成导出按钮的紫 */
    .sync-spin.exp{border-color:rgba(124,58,237,.18);border-top-color:#7c3aed;}
    .sync-bar i.exp{background:linear-gradient(90deg,#7c3aed,#a855f7);}
    .sync-meta b.exp{color:#7c3aed;}
    /* 清空数据类危险操作的进度框：沿用同步遮罩外观，主色换成【删除】按钮的红（.btn.danger） */
    .sync-spin.danger{border-color:rgba(220,38,38,.18);border-top-color:#dc2626;}
    .sync-bar i.danger{background:linear-gradient(90deg,#dc2626,#f87171);}
    .sync-meta b.danger{color:#dc2626;}
    /* 同步完成后把结果提示条闪一下，提示用户结果在筛选条下方 */
    .msg.sync-done{animation:syncFlash 1.6s ease 2;}
    @keyframes syncFlash{0%{box-shadow:0 0 0 0 rgba(8,145,178,.45);}70%{box-shadow:0 0 0 10px rgba(8,145,178,0);}100%{box-shadow:0 0 0 0 rgba(8,145,178,0);}}
    a.dl{color:var(--accent);text-decoration:none;}
    a.dl:hover{text-decoration:underline;}
    /* 附件列「预览」图标：点击在新标签内联打开 PDF / 图片 */
    a.pv{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:8px;color:var(--accent);background:rgba(37,99,235,.08);transition:background .12s ease,transform .12s ease;}
    /* 产效加工 · 设备开机率（参考设备开停机数据表.aspx 列表部分） */
    table.tbl.oprate th, table.tbl.oprate td { text-align:center; }
    table.tbl.oprate tbody tr:nth-child(even){ background:transparent; }
    table.tbl.oprate td.dev-name{ font-weight:700; color:#0c4a6e; white-space:nowrap; }
    table.tbl.oprate .workshop-cell{ font-weight:700; color:#1565c0; white-space:nowrap; background-image:linear-gradient(rgba(21,101,192,.10),rgba(21,101,192,.10)); }
    table.tbl.oprate .rate{ font-weight:700; }
    table.tbl.oprate .rate-blue{ color:#1976d2; }
    table.tbl.oprate .rate-orange{ color:#f57c00; }
    table.tbl.oprate .rate-red{ color:#d32f2f; }
    table.tbl.oprate tr.opr-ws-0 td{ background-color:#e3f2fd; }
    table.tbl.oprate tr.opr-ws-1 td{ background-color:#fff8e1; }
    table.tbl.oprate tr.opr-ws-2 td{ background-color:#e8f5e9; }
    table.tbl.oprate tr.opr-ws-3 td{ background-color:#f3e5f5; }
    table.tbl.oprate tr.opr-ws-4 td{ background-color:#e0f2f1; }
    table.tbl.oprate tr.opr-ws-5 td{ background-color:#fff3e0; }
    table.tbl.oprate tr.opr-ws-6 td{ background-color:#fce4ec; }
    table.tbl.oprate tr.opr-ws-7 td{ background-color:#ede7f6; }
    table.tbl.oprate tr.opr-ws-8 td{ background-color:#f1f8e9; }
    a.pv:hover{background:rgba(37,99,235,.18);transform:translateY(-1px);}
    .pv-ico{width:18px;height:18px;}
    .btn.up{background:#16a34a;}
    /* ===== 考勤查询 · 出勤日历图（.attcal-*，只在本页使用，不影响其它页面） ===== */
    .attcal{display:flex;flex-direction:column;gap:14px;}
    .attcal-top{display:flex;flex-direction:column;gap:12px;}
    .attcal-who{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;padding:0 2px;}
    .attcal-nm{font-size:20px;font-weight:800;color:#16223b;letter-spacing:.5px;}
    .attcal-meta{font-size:12.5px;color:var(--muted);}
    .attcal-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:8px;}
    /* 星期表头：周末用暖色与工作日区分 */
    .attcal-wd{text-align:center;font-size:12px;font-weight:700;color:#5b6678;letter-spacing:1px;
        padding:6px 0;background:#f4f7fc;border-radius:8px;}
    .attcal-wd.we{color:#c2410c;background:#fdf4ee;}
    .attcal-cell{min-height:104px;padding:8px 9px;border:1px solid var(--line);border-radius:10px;background:#fff;
        display:flex;flex-direction:column;gap:4px;}
    /* 非本月补位格：虚线置灰，不承载数据 */
    .attcal-cell.out{background:#f8fafc;border-style:dashed;}
    .attcal-cell.out .attcal-d span{color:#c3ccd8;}
    /* 出勤格按强度分四档底色（AttCalLevel 输出 lv1~lv4） */
    .attcal-cell.has{border-color:#cfe2fd;}
    .attcal-cell.lv1{background:#f4f9ff;}
    .attcal-cell.lv2{background:#e7f1ff;}
    .attcal-cell.lv3{background:#d7e8fe;}
    .attcal-cell.lv4{background:#c3dbfc;}
    .attcal-cell.today{box-shadow:0 0 0 2px rgba(37,99,235,.45) inset;}
    .attcal-d{display:flex;align-items:center;justify-content:space-between;gap:6px;font-size:12.5px;
        font-weight:800;color:#3b4a5f;}
    .attcal-tot{font-size:11.5px;font-weight:800;color:#1d4ed8;background:#fff;border:1px solid #cddffb;
        border-radius:999px;padding:1px 7px;}
    .attcal-dev{display:flex;align-items:baseline;justify-content:space-between;gap:6px;font-size:11px;
        color:#46536b;line-height:1.35;}
    .attcal-dev span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
    .attcal-dev b{flex:0 0 auto;font-weight:700;color:#16223b;}
    /* 考勤查询：日历格内「一条记录」——按人员查=加工班组/班次/参与人员+设备工时；按设备查=班次编号/班组/班次/加工人员 */
    .attcal-rec{display:flex;flex-wrap:wrap;align-items:baseline;gap:3px 6px;font-size:10.5px;line-height:1.4;
        padding:3px 0;border-top:1px dashed #e3e9f2;}
    .attcal-cell.has .attcal-rec:first-of-type{border-top:none;padding-top:0;}
    .attcal-rec .rc-k{color:#8a96a8;font-weight:600;}
    .attcal-rec .rc-v{color:#2b3a52;font-weight:700;}
    /* 按设备查的「班次1 / 班次2 …」编号标签：蓝色加重，与灰底字段名区分开 */
    .attcal-rec .rc-no{color:#1d4ed8;font-weight:800;}
    .attcal-rec .rc-people{color:#1d4ed8;font-weight:700;word-break:break-all;}
    .attcal-rec b{flex:0 0 auto;font-weight:700;color:#b45309;margin-left:auto;white-space:nowrap;}
    @media (max-width:1100px){
        .attcal-cell{min-height:86px;padding:6px 7px;}
        .attcal-dev{font-size:10.5px;}
        .attcal-rec{font-size:10px;}
    }
    @media (max-width:720px){
        /* 导航图标已移除，窄屏下不能再隐藏文字，否则导航项会变成空白；改为收窄侧栏并保留文字 */
        .sidebar{width:132px;}
        .brand{padding:16px 12px 14px;}
        .brand .title,.brand .sub,.side-foot{display:none;}
        .nav{padding:10px 8px;}
        .nav-item{padding:8px 10px 8px calc(10px + 1em);font-size:11.5px;line-height:1.4;white-space:normal;}
        .nav-item:hover{transform:none;}
        .nav-group-label{padding:14px 10px 6px;font-size:12.5px;}
        .main{margin-left:132px;padding:18px 14px;}
    }

    /* ===== 产效加工 · 加工总览：索引框下方的统计卡片 + 5 张 ECharts 图表（只在本页使用） ===== */
    /* 6 张统计卡片：通用 .kpi-strip 是 4 列，这里用附加类 k6 改成 6 列，不动通用类本身 */
    .kpi-strip.k6{grid-template-columns:repeat(6,minmax(0,1fr));}
    @media (max-width:1240px){.kpi-strip.k6{grid-template-columns:repeat(3,minmax(0,1fr));}}
    @media (max-width:900px){.kpi-strip.k6{grid-template-columns:repeat(2,minmax(0,1fr));}}
    /* 图表网格：3 列；龙虎图纵向占两行（与参考看板布局一致，配色走本页浅色主题） */
    .kb-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;}
    .kb-card{background:linear-gradient(180deg,#ffffff,#fafcff);border:1px solid var(--line);border-radius:12px;
        padding:12px 14px 10px;box-shadow:0 4px 14px rgba(30,50,90,.07);min-width:0;}
    .kb-card h4{margin:0 0 8px;font-size:15px;font-weight:800;color:#16223b;letter-spacing:.5px;
        padding-left:11px;position:relative;}
    .kb-card h4::before{content:'';position:absolute;left:0;top:50%;transform:translateY(-50%);
        width:4px;height:14px;border-radius:2px;background:linear-gradient(180deg,#3b82f6,#1d4ed8);}
    .kb-chart{width:100%;height:290px;}
    .kb-card.tall{grid-row:span 2;}
    .kb-card.tall .kb-chart{height:640px;}
    /* 空态：索引月份没有平台数据 */
    .kb-empty{padding:34px 12px;text-align:center;color:var(--muted);font-size:12.5px;line-height:2;}
    .kb-empty b{color:#16a34a;}
    .kb-empty a{color:var(--accent);text-decoration:none;}
    .kb-empty a:hover{text-decoration:underline;}
    @media (max-width:1300px){
        .kb-grid{grid-template-columns:repeat(2,minmax(0,1fr));}
        .kb-card.tall{grid-column:span 2;grid-row:span 1;}
        .kb-card.tall .kb-chart{height:290px;}
    }
    @media (max-width:900px){
        .kb-grid{grid-template-columns:1fr;}
        .kb-card.tall{grid-column:span 1;}
    }
    /* 加工总览 · 一屏完整显示：卡片 + 图表整体铺满一屏（高度由页内脚本按视口计算）。
       仅 3 列布局生效；窄屏仍沿用上面的固定高度，允许整页滚动。 */
    @media (min-width:1301px){
        .kb-fit{display:flex;flex-direction:column;gap:14px;}
        .kb-fit .kpi-strip{margin:0;flex:0 0 auto;}
        .kb-fit .kb-grid{flex:1 1 auto;min-height:0;grid-template-rows:minmax(0,1fr) minmax(0,1fr);}
        .kb-fit .kb-card{display:flex;flex-direction:column;min-height:0;overflow:hidden;}
        .kb-fit .kb-card h4{flex:0 0 auto;}
        .kb-fit .kb-chart{height:auto;flex:1 1 auto;min-height:120px;}
        .kb-fit .kb-card.tall .kb-chart{height:auto;}
    }

    /* ===== 设备管理 · 设备清单：设备展示界面（.eqc-*，只在本页使用，不动任何通用类） ===== */
    /* 页头速览：通用 .kpi-strip 是 4 列，这里用附加类改成 6 列（列数与响应式见下方「顶部六格概览」段） */

    /* 设计令牌：设备清单页专用（墨色 / 辅助字 / 分隔线 / 浅底 / 主蓝 / 圆角），列表与抽屉共用 */
    .eqc-wrap,.eqc-drawer,.kpi-strip.eqc-kpi6{
        --eq-ink:#0f172a;--eq-sub:#5b6b84;--eq-faint:#94a3b8;--eq-line:#e6ebf3;--eq-soft:#f4f7fc;
        --eq-blue:#2563eb;--eq-blue-d:#1d4ed8;--eq-r:16px;}
    .eqc-wrap{display:flex;gap:20px;align-items:flex-start;padding:18px 20px 26px;}
    @keyframes eqcIn{from{opacity:0;transform:translateY(10px);}to{opacity:1;transform:none;}}
    /* 左侧平台导轨：白卡 + 分组标题 + 圆角导航项（激活态左侧蓝色指示条） */
    .eqc-rail{width:200px;flex:0 0 200px;position:sticky;top:18px;padding:12px 10px;
        background:#fff;border:1px solid var(--eq-line);border-radius:var(--eq-r);
        box-shadow:0 1px 2px rgba(15,23,42,.04),0 10px 28px rgba(30,50,90,.06);}
    .eqc-rail-h{font-size:12.5px;font-weight:800;color:var(--eq-ink);letter-spacing:1px;padding:6px 8px 11px;
        border-bottom:1px solid var(--eq-line);margin-bottom:9px;display:flex;align-items:center;}
    .eqc-rail-h::before{content:'';width:4px;height:13px;border-radius:2px;margin-right:8px;
        background:linear-gradient(180deg,#3b82f6,#1d4ed8);}
    .eqc-item{display:flex;align-items:center;gap:9px;padding:8px 10px;border-radius:10px;color:#47536b;
        text-decoration:none;font-size:13px;margin-bottom:2px;position:relative;
        transition:background .15s ease,color .15s ease;}
    .eqc-item .dot{width:9px;height:9px;border-radius:3px;flex:0 0 auto;box-shadow:0 0 0 3px rgba(255,255,255,.8);}
    .eqc-item b{flex:1;min-width:0;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
    .eqc-item em{flex:0 0 auto;font-style:normal;font-size:11.5px;font-weight:700;color:#64748b;
        background:#f1f5f9;border-radius:999px;padding:1px 8px;font-variant-numeric:tabular-nums;}
    .eqc-item:hover{background:#f1f5fb;color:var(--eq-ink);}
    .eqc-item.on{background:linear-gradient(90deg,#eaf1ff,#f6f9ff);color:var(--eq-blue-d);box-shadow:inset 0 0 0 1px #cfe0fd;}
    .eqc-item.on::before{content:'';position:absolute;left:0;top:7px;bottom:7px;width:3px;border-radius:0 2px 2px 0;
        background:var(--eq-blue);}
    .eqc-item.on b{font-weight:800;}
    .eqc-item.on em{background:var(--eq-blue-d);color:#fff;}
    /* 加工平台编辑态：标题右侧「编辑中」徽标；编辑态导轨加一圈主蓝微光提示可写 */
    .eqc-rail-ed{margin-left:auto;flex:0 0 auto;font-size:10.5px;font-weight:800;letter-spacing:.5px;color:#1d4ed8;
        background:#e3ecfd;border:1px solid #c7d9fb;border-radius:999px;padding:1px 9px;}
    .eqc-wrap.is-pe .eqc-rail{box-shadow:0 0 0 2px rgba(37,99,235,.16),0 10px 28px rgba(30,50,90,.08);}
    /* 导轨底部「＋ 新增加工平台」：虚线按钮，点击展开行内输入框（编辑态才渲染） */
    .eqc-platadd{margin-top:8px;padding-top:9px;border-top:1px dashed var(--eq-line);}
    .eqc-pa-btn{width:100%;display:flex;align-items:center;justify-content:center;gap:7px;cursor:pointer;
        padding:9px 8px;border:1.5px dashed #b9c8e4;border-radius:10px;background:#f8faff;
        color:var(--eq-blue-d);font-size:12.5px;font-weight:700;
        transition:background .15s ease,border-color .15s ease;}
    .eqc-pa-btn b{font-size:15px;font-weight:800;line-height:1;}
    .eqc-pa-btn:hover{background:#eef4ff;border-color:var(--eq-blue);}
    .eqc-pa-box input{width:100%;box-sizing:border-box;padding:8px 10px;font-size:13px;color:#0f172a;
        background:#fff;border:1px solid #c7d9fb;border-radius:9px;outline:none;}
    .eqc-pa-box input:focus{border-color:var(--eq-blue);box-shadow:0 0 0 3px rgba(37,99,235,.14);}
    .eqc-pa-acts{display:flex;gap:7px;margin-top:8px;}
    .eqc-pa-acts .btn{flex:1 1 auto;text-align:center;padding-left:4px;padding-right:4px;}
    .eqc-main{flex:1;min-width:0;}
    /* 设备卡片墙：白卡 + 悬浮上移 + 入场渐显 */
    .eqc-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(262px,1fr));gap:18px;}
    /* 设备编辑态：卡片外层包裹（X 按钮与卡片链接同级，避免交互元素嵌套），卡片填满格子 */
    .eqc-cell{position:relative;display:flex;min-width:0;}
    .eqc-cell>.eqc-card{flex:1 1 0;min-width:0;}
    /* 卡片右上角删除 X：圆形半透明按钮，hover 转实心红；编辑态常显（触摸设备无 hover） */
    .eqc-delx{position:absolute;right:10px;top:10px;z-index:6;width:26px;height:26px;padding:0;
        display:inline-flex;align-items:center;justify-content:center;border-radius:50%;
        border:1px solid rgba(220,38,38,.35);background:rgba(255,255,255,.94);color:#dc2626;
        font-size:17px;line-height:1;font-weight:700;cursor:pointer;
        box-shadow:0 2px 8px rgba(15,23,42,.20);opacity:0;transform:scale(.8);
        transition:opacity .15s ease,transform .15s ease,background .15s ease,color .15s ease;}
    .eqc-grid-ed .eqc-delx{opacity:.9;transform:none;}
    .eqc-cell:hover .eqc-delx,.eqc-delx:focus{opacity:1;transform:none;outline:none;}
    .eqc-delx:hover,.eqc-delx:focus{background:#dc2626;color:#fff;border-color:#dc2626;}
    /* 编辑态状态徽标下移，给右上角 X 让位 */
    .eqc-grid-ed .eqc-st{top:44px;}
    /* 删除确认弹层 */
    .eqc-dm{position:fixed;inset:0;z-index:210;display:flex;align-items:center;justify-content:center;padding:20px;}
    .eqc-dm[hidden]{display:none;}
    .eqc-dm-mask{position:absolute;inset:0;background:rgba(15,23,42,.46);backdrop-filter:blur(3px);
        animation:eqcDmFade .18s ease;}
    .eqc-dm-box{position:relative;width:min(430px,94vw);background:#fff;border-radius:16px;
        padding:24px 24px 20px;box-shadow:0 30px 80px rgba(15,23,42,.38);
        animation:eqcDmPop .2s cubic-bezier(.2,.9,.3,1.15);}
    @keyframes eqcDmFade{from{opacity:0;}to{opacity:1;}}
    @keyframes eqcDmPop{from{opacity:0;transform:translateY(14px) scale(.97);}to{opacity:1;transform:none;}}
    .eqc-dm-ic{width:40px;height:40px;border-radius:50%;background:#fee2e2;color:#dc2626;
        display:flex;align-items:center;justify-content:center;font-size:24px;font-weight:800;
        font-style:italic;font-family:Georgia,serif;margin-bottom:12px;}
    .eqc-dm-t{font-size:17px;font-weight:800;color:#0f172a;margin-bottom:8px;}
    .eqc-dm-d{font-size:13.5px;color:#334155;line-height:1.7;}
    .eqc-dm-d b{color:#dc2626;}
    .eqc-dm-list{margin:10px 0 4px;padding-left:20px;font-size:12.5px;color:#5b6b84;line-height:1.9;}
    .eqc-dm-list b{color:#0f172a;}
    .eqc-dm-acts{display:flex;justify-content:flex-end;gap:10px;margin-top:18px;}
    .eqc-btn-danger{background:#dc2626;color:#fff;}
    .eqc-btn-danger:hover{background:#b91c1c;}
    .eqc-card{display:flex;flex-direction:column;text-decoration:none;color:inherit;overflow:hidden;
        background:#fff;border:1px solid var(--eq-line);border-radius:var(--eq-r);
        box-shadow:0 1px 2px rgba(15,23,42,.04),0 10px 26px rgba(30,50,90,.06);
        transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease;
        animation:eqcIn .3s ease both;}
    .eqc-card:hover{transform:translateY(-4px);border-color:#bcd0f7;
        box-shadow:0 4px 10px rgba(15,23,42,.05),0 20px 40px rgba(30,50,90,.14);}
    .eqc-shot{position:relative;height:156px;display:flex;align-items:center;justify-content:center;overflow:hidden;
        background:linear-gradient(180deg,#f6f9ff,#e9f0fb);}
    .eqc-shot img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .3s ease;}
    .eqc-card:hover .eqc-shot img{transform:scale(1.06);}
    .eqc-shot .init{width:76px;height:76px;border-radius:22px;display:flex;align-items:center;justify-content:center;
        color:#fff;font-size:23px;font-weight:800;letter-spacing:1px;box-shadow:0 10px 22px rgba(30,50,90,.22);}
    .eqc-chip{display:inline-flex;align-items:center;font-size:11px;font-weight:700;color:#fff;letter-spacing:.5px;
        padding:3px 10px;border-radius:999px;box-shadow:0 4px 10px rgba(15,23,42,.22);}
    .eqc-shot > .eqc-chip{position:absolute;left:12px;top:12px;}
    /* 状态徽标：改为对应语义色的浅底胶囊（在用绿 / 备用琥珀 / 检修蓝 / 停用灰），比白底彩字更醒目 */
    .eqc-st{position:absolute;right:12px;top:12px;font-size:11px;font-weight:700;padding:3px 10px;border-radius:999px;
        backdrop-filter:blur(4px);box-shadow:0 1px 4px rgba(15,23,42,.12);}
    .eqc-st.run{color:#15803d;background:rgba(220,252,231,.92);}
    .eqc-st.idle{color:#b45309;background:rgba(254,243,199,.92);}
    .eqc-st.fix{color:#1d4ed8;background:rgba(219,234,254,.92);}
    .eqc-st.stop{color:#475569;background:rgba(241,245,249,.92);}
    .eqc-cbody{padding:13px 15px 14px;display:flex;flex-direction:column;flex:1 1 auto;}
    .eqc-cname{display:flex;align-items:baseline;gap:8px;font-size:16px;font-weight:800;color:var(--eq-ink);letter-spacing:.3px;
        white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
    .eqc-care{flex:0 0 auto;font-size:11px;font-weight:700;color:#475569;background:#f1f5f9;border-radius:6px;padding:1px 7px;}
    .eqc-csub{margin-top:4px;font-size:12px;color:var(--eq-faint);line-height:1.55;height:37px;overflow:hidden;
        display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;}
    .eqc-caps{margin-top:11px;display:grid;grid-template-columns:1fr 1fr;gap:7px;}
    .eqc-cap{min-width:0;padding:7px 10px;border-radius:10px;background:var(--eq-soft);border:1px solid #eaeff7;
        display:flex;flex-direction:column;gap:2px;}
    .eqc-cap i{font-style:normal;font-size:10.5px;color:#8a96a8;letter-spacing:.5px;}
    .eqc-cap b{font-size:13px;font-weight:800;color:#1e293b;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
        font-variant-numeric:tabular-nums;}
    .eqc-cap.empty{background:#fbfcfe;border-style:dashed;border-color:#e3e8f2;}
    .eqc-cap.empty b{color:#b6c0d2;font-weight:600;}
    /* 抽屉操作行里的「档案完整度」徽标（卡片底栏已移除，此类仅详情抽屉使用） */
    .eqc-met b{color:var(--eq-blue-d);font-weight:800;font-variant-numeric:tabular-nums;}
    .eqc-empty{margin:8px 0;padding:64px 20px;text-align:center;color:var(--eq-sub);font-size:13px;line-height:2;
        background:#fbfcfe;border:1px dashed #dbe3ef;border-radius:var(--eq-r);}
    .todo{color:#a9b3c2;font-weight:600;}
    @media (max-width:1240px){.eqc-rail{width:170px;flex:0 0 170px;}}
    @media (max-width:980px){
        .eqc-wrap{flex-direction:column;}
        .eqc-rail{width:100%;flex:none;position:static;display:flex;flex-wrap:wrap;gap:6px;box-shadow:none;}
        .eqc-rail-h{flex:1 1 100%;margin-bottom:2px;}
        .eqc-item{flex:1 1 150px;}
        .eqc-item.on::before{display:none;}
        .eqc-platadd{flex:1 1 100%;}
        .eqc-pa-btn{width:100%;}
    }
    /* ===== 设备档案抽屉 ===== */
    .eqc-mask{position:fixed;left:0;top:0;right:0;bottom:0;z-index:120;background:rgba(15,23,42,.46);
        backdrop-filter:blur(3px);animation:syncFade .18s ease;}
    .eqc-drawer{position:fixed;top:0;right:0;bottom:0;z-index:130;width:min(960px,88vw);background:#fff;
        display:flex;flex-direction:column;box-shadow:-24px 0 60px rgba(15,23,42,.25);
        border-radius:18px 0 0 18px;animation:eqcSlide .26s cubic-bezier(.2,.9,.3,1.1);}
    @keyframes eqcSlide{from{transform:translateX(60px);opacity:.4;}to{transform:none;opacity:1;}}
    /* 1366×768 这类小屏：抽屉收窄一档，主图同比缩小；窄到 900 以下改为整屏 + 上下堆叠 */
    @media (max-width:1200px){
        .eqc-drawer{width:min(840px,94vw);}
        .eqc-shot.big{width:280px;height:190px;}
        .eqc-dhead{padding:14px 18px 12px;}
        .eqc-dbody{padding:14px 18px 24px;}
        .eqc-dnav{padding:9px 18px;}
    }
    @media (max-width:900px){
        .eqc-drawer{width:100vw;border-radius:0;}
        .eqc-hero{flex-direction:column;}
        .eqc-shot.big{width:100%;height:200px;flex:none;}
        .eqc-dnav-n{font-size:11.5px;}
    }
    .eqc-dhead{padding:16px 22px 13px;border-bottom:1px solid var(--line);background:linear-gradient(180deg,#fbfdff,#ffffff);}
    .eqc-dtitle{display:flex;align-items:center;gap:10px;flex-wrap:wrap;}
    .eqc-dtitle h3{margin:0;font-size:21px;font-weight:800;color:#16223b;letter-spacing:.5px;}
    .eqc-pill{flex:0 0 auto;font-size:11.5px;font-weight:700;padding:3px 10px;border-radius:999px;background:#eef2f8;color:#334155;}
    .eqc-pill.st-run{background:#dcfce7;color:#15803d;}
    .eqc-pill.st-idle{background:#fef3c7;color:#b45309;}
    .eqc-pill.st-fix{background:#dbeafe;color:#1d4ed8;}
    .eqc-pill.st-stop{background:#f1f5f9;color:#64748b;}
    .eqc-x{margin-left:auto;width:34px;height:34px;border-radius:50%;display:flex;align-items:center;justify-content:center;
        font-size:20px;line-height:1;color:#64748b;background:#f1f5f9;text-decoration:none;transition:all .15s ease;}
    .eqc-x:hover{background:#e2e8f0;color:#0f172a;transform:rotate(90deg);}
    .eqc-dsub{margin-top:7px;font-size:12.5px;color:#7b8794;line-height:1.6;}
    .eqc-dbody{flex:1 1 auto;overflow-y:auto;padding:16px 22px 30px;}
    .eqc-dbody .chart-h{margin-top:20px;}
    .eqc-hero{display:flex;gap:18px;align-items:flex-start;flex-wrap:wrap;}
    .eqc-shot.big{width:330px;height:220px;flex:0 0 auto;border:1px solid var(--eq-line);border-radius:14px;
        cursor:zoom-in;background:linear-gradient(180deg,#f6f9ff,#e9f0fb);}
    .eqc-shot.big .init{width:88px;height:88px;font-size:29px;}
    .eqc-zoom,.eqc-nophoto{position:absolute;left:0;right:0;bottom:0;text-align:center;font-size:11.5px;
        padding:5px 0;letter-spacing:.5px;color:#fff;background:rgba(15,23,42,.45);}
    .eqc-nophoto{background:rgba(15,23,42,.26);color:#f8fafc;}
    .eqc-photohint{position:absolute;left:8px;right:8px;bottom:27px;font-size:10.5px;line-height:1.55;
        color:#dbe4f0;background:rgba(15,23,42,.38);border-radius:8px;padding:4px 9px;}
    .eqc-heroinfo{flex:1 1 380px;min-width:0;}
    .eqc-capline{padding:9px 14px;border-radius:10px;border-left:4px solid var(--eq-blue);font-size:15px;font-weight:700;
        color:#0f172a;line-height:1.7;background:linear-gradient(90deg,#eff5ff,#fafcff);}
    .kpi-strip.eqc-kpi4{grid-template-columns:repeat(4,minmax(0,1fr));margin-top:12px;}
    /* 能力值多为「4~16 mm」这类区间串，允许换行并缩小字号，避免被省略号截断 */
    .kpi-strip.eqc-kpi4 .k-val{font-size:15.5px;white-space:normal;line-height:1.45;}
    .kpi-strip.eqc-kpi4 .kpi{background:var(--eq-soft);border:1px solid #eaeff7;border-left-width:1px;border-radius:12px;
        box-shadow:none;}
    .kpi-strip.eqc-kpi4 .kpi.k-blue{background:#eff5ff;border-color:#dbe7fb;}
    .kpi-strip.eqc-kpi4 .kpi.k-blue .k-val{color:var(--eq-blue-d);}
    @media (max-width:1100px){.kpi-strip.eqc-kpi4{grid-template-columns:repeat(2,minmax(0,1fr));}}
    .eqc-acts{margin-top:12px;display:flex;align-items:center;gap:10px;flex-wrap:wrap;}
    .eqc-editbase{margin-top:14px;padding:12px 14px;border:1px dashed #c7d7f0;border-radius:12px;background:#f9fbff;}
    .eqc-frow{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:8px;}
    .eqc-frow:last-child{margin-bottom:0;}
    .eqc-frow label{font-size:12px;color:#5b6678;font-weight:600;flex:0 0 auto;}
    .eqc-frow input[type=text],.eqc-frow select,.eqc-frow input[type=file]{padding:7px 10px;border:1px solid var(--line);
        border-radius:8px;font-size:13px;background:#fff;font-family:inherit;}
    .eqc-frow input[type=text]{flex:1 1 160px;min-width:150px;}
    .eqc-frow input[type=text]:focus,.eqc-frow select:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(37,99,235,.12);}
    /* 参数数据表 */
    table.tbl.eqc-ptbl td.pn{font-weight:700;color:#16223b;}
    table.tbl.eqc-ptbl td.pv{color:#1d4ed8;font-weight:700;font-variant-numeric:tabular-nums;}
    table.tbl.eqc-ptbl td.g{color:#7b8794;}
    table.tbl.eqc-ptbl td.del,table.tbl.eqc-ptbl th.del{width:58px;text-align:center;}
    table.tbl.eqc-ptbl tr.newrow{display:none;} /* 仅作克隆模板，不可见 */
    table.tbl.eqc-ptbl tr.cloned td{background:#fbfdff;}
    /* 编辑态：关联图纸资料 - 上传资料（随保存一并入库） */
    .eqc-docupl{margin-top:14px;padding:12px 14px;border:1px dashed #bcd3f0;border-radius:12px;background:#f5f9ff;}
    .eqc-docupl .chart-h{margin:0 0 8px;}
    .eqc-docupl-body{display:flex;flex-direction:column;gap:6px;}
    .eqc-docupl input[type=file]{padding:7px 10px;border:1px solid var(--line);border-radius:8px;font-size:13px;background:#fff;font-family:inherit;width:100%;max-width:520px;}
    .eqc-dochint{font-size:11.5px;color:#64748b;line-height:1.5;}
    table.tbl.eqc-ptbl input.cell-ed{min-width:0;}
    /* 编辑态 6 列录入表：fixed 布局按列性质显式分配（查看态 4 列分组表的 pn19%/pv31% 不再生效）。
       数值/第二数值常放「0.3~2.0mm」「80~800mm」这类带单位范围值，给最宽；表标题/第二标签给够 5~6 个汉字。 */
    .eqc-ptbl-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}
    table.tbl.eqc-ptbl.eqc-ptbl-ed{table-layout:fixed;min-width:580px;}
    table.tbl.eqc-ptbl.eqc-ptbl-ed th:nth-child(1){width:12%;}
    table.tbl.eqc-ptbl.eqc-ptbl-ed th:nth-child(2){width:16%;}
    table.tbl.eqc-ptbl.eqc-ptbl-ed th:nth-child(3){width:27%;}
    table.tbl.eqc-ptbl.eqc-ptbl-ed th:nth-child(4){width:13%;}
    table.tbl.eqc-ptbl.eqc-ptbl-ed th:nth-child(5){width:27%;}
    /* 删除列沿用 .del 的 58px；编辑态单元格统一白底，去掉查看态 pn 灰底在输入框外圈造成的异色边 */
    table.tbl.eqc-ptbl.eqc-ptbl-ed td.pn,
    table.tbl.eqc-ptbl.eqc-ptbl-ed td.pv,
    table.tbl.eqc-ptbl.eqc-ptbl-ed td.g{background:#fff;}
    table.tbl.eqc-ptbl tr.addrow-wrap td{padding:8px 10px;background:#f4f9ff;border-top:1px dashed #cfdefb;}
    .eqc-addrow{display:inline-flex;align-items:center;gap:6px;width:100%;justify-content:center;
        padding:8px 14px;border:1px dashed #5b9dd9;background:#fff;color:#1d6fb8;border-radius:9px;
        font-size:13px;font-weight:700;cursor:pointer;transition:background .15s,border-color .15s,transform .05s;}
    .eqc-addrow:hover{background:#eaf4ff;border-color:#2f86d6;}
    .eqc-addrow:active{transform:translateY(1px);}
    .eqc-addrow:disabled{opacity:.5;cursor:default;}
    /* 分组参数表（表标题＝青色通栏表头，如「原材料信息」「加工能力表」） */
    table.tbl.eqc-ptbl{margin-bottom:12px;}
    table.tbl.eqc-ptbl:last-child{margin-bottom:0;}
    table.tbl.eqc-ptbl td.pn{width:19%;background:#eef2f9;}
    table.tbl.eqc-ptbl td.pv{width:31%;background:#fff;}
    table.tbl.eqc-ptbl th.tt{background:#d9f2fb;color:#0b6a86;font-size:15px;font-weight:800;
        letter-spacing:8px;text-indent:8px;text-align:center;padding:9px 10px;border:1px solid #b7e4f2;}
    table.tbl.eqc-ptbl tbody tr{transition:background .12s ease;}
    table.tbl.eqc-ptbl tbody tr:hover td.pv{background:#f8fbff;}
    .eqc-phint{font-size:12px;color:#5b8ab8;background:#f4f9ff;border:1px dashed #c7d7f0;
        border-radius:8px;padding:7px 11px;line-height:1.7;}
    .eqc-blank{padding:16px 18px;border:1px dashed #c7d7f0;border-radius:12px;background:#f9fbff;
        color:#7b8794;font-size:12.5px;line-height:1.8;}
    /* 注意点 */
    .eqc-notes{display:flex;flex-direction:column;gap:8px;}
    .eqc-note{display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:10px;font-size:13px;line-height:1.6;
        border:1px solid var(--line);border-left-width:4px;background:#fff;}
    .eqc-note.n-safe{background:#fff5f5;border-left-color:#e0453f;}
    .eqc-note.n-qlt{background:#fff8f0;border-left-color:#f59e0b;}
    .eqc-note.n-op{background:#f3f8ff;border-left-color:#2563eb;}
    .eqc-note.n-mnt{background:#f3fbf6;border-left-color:#15a35a;}
    .eqc-note.n-new{background:#f9fbff;border-left-color:#94a3b8;border-left-width:4px;border-style:dashed;}
    .eqc-nkind{flex:0 0 auto;font-size:11.5px;font-weight:800;padding:2px 9px;border-radius:999px;
        background:rgba(15,23,42,.07);color:#334155;}
    .eqc-ntxt{flex:1 1 auto;min-width:0;color:#1f2937;}
    .eqc-note select.cell-ed{width:84px;flex:0 0 auto;}
    .eqc-note input.wide{flex:1 1 260px;min-width:180px;}
    .eqc-ck{font-size:12px;color:#94a3b8;display:inline-flex;align-items:center;gap:4px;flex:0 0 auto;}
    /* 关联图纸资料 */
    .eqc-doc-n{margin-left:auto;font-size:11.5px;font-weight:700;color:#1d4ed8;background:#eef4ff;
        border:1px solid #cfe0fd;border-radius:999px;padding:1px 9px;}
    .eqc-docs{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:9px;}
    .eqc-doc{display:flex;align-items:center;gap:9px;padding:9px 12px;border:1px solid var(--eq-line);border-radius:12px;
        background:#fff;text-decoration:none;color:#334155;transition:all .15s ease;}
    .eqc-doc:hover{border-color:#93c5fd;background:#f6f9ff;color:var(--eq-blue-d);transform:translateY(-2px);
        box-shadow:0 8px 18px rgba(30,50,90,.1);}
    .eqc-doct{flex:0 0 auto;font-size:10.5px;font-weight:800;color:#fff;background:var(--eq-blue);border-radius:6px;padding:2px 7px;
        letter-spacing:.5px;}
    .eqc-docn{flex:1 1 auto;min-width:0;font-size:12.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}

    /* ---- 顶部六格概览：白卡 + 语义色顶条，可点击筛选（除「加工平台」外均为 a.kpi） ---- */
    .kpi-strip.eqc-kpi6{grid-template-columns:repeat(6,minmax(0,1fr));gap:14px;}
    @media (max-width:1500px){.kpi-strip.eqc-kpi6{grid-template-columns:repeat(3,minmax(0,1fr));}}
    @media (max-width:820px){.kpi-strip.eqc-kpi6{grid-template-columns:repeat(2,minmax(0,1fr));}}
    .eqc-kpi6 .kpi{position:relative;overflow:hidden;background:#fff;border:1px solid var(--eq-line);border-left-width:1px;
        border-radius:var(--eq-r);box-shadow:0 1px 2px rgba(15,23,42,.04),0 8px 22px rgba(30,50,90,.05);
        animation:eqcIn .3s ease both;}
    .eqc-kpi6 .kpi::before{content:'';position:absolute;left:0;top:0;right:0;height:3px;background:var(--kc,#cbd5e1);}
    .eqc-kpi6 .kpi.k-blue{--kc:#2563eb;}
    .eqc-kpi6 .kpi.k-green{--kc:#059669;}
    .eqc-kpi6 .kpi.k-violet{--kc:#7c3aed;}
    .eqc-kpi6 .kpi.k-orange{--kc:#ea580c;}
    .eqc-kpi6 .kpi.k-red{--kc:#e11d48;}
    .eqc-kpi6 .k-label,.eqc-kpi6 .k-val{display:block;}
    /* 用 .kpi 后代选择器压过通用 .kpi.k-green .k-val 等彩色数字，顶条已承担语义色，数字统一墨色 */
    .eqc-kpi6 .kpi .k-label{font-size:12px;color:var(--eq-sub);letter-spacing:.3px;}
    .eqc-kpi6 .kpi .k-val{font-size:26px;color:var(--eq-ink);font-variant-numeric:tabular-nums;}
    .eqc-kpi6 .kpi .k-val small{font-size:12px;color:var(--eq-faint);}
    .eqc-kpi6 a.kpi{text-decoration:none;color:inherit;cursor:pointer;
        transition:transform .16s ease,box-shadow .16s ease,border-color .16s ease;}
    .eqc-kpi6 a.kpi:hover{transform:translateY(-3px);border-color:#c7d8f7;
        box-shadow:0 4px 10px rgba(15,23,42,.05),0 16px 32px rgba(30,50,90,.12);}
    .eqc-kpi6 a.kpi::after{content:'筛选 ›';position:absolute;right:12px;top:11px;font-size:10.5px;font-weight:700;
        color:#c3cede;letter-spacing:.5px;opacity:0;transition:opacity .16s ease;}
    .eqc-kpi6 a.kpi:hover::after{opacity:1;}
    .eqc-kpi6 .kpi.eqc-kon{border-color:var(--kc,#2563eb);background:linear-gradient(180deg,#f7faff,#ffffff);}
    .eqc-kpi6 .kpi.eqc-kon::before{height:4px;}
    .eqc-kpi6 .kpi.eqc-kon::after{content:'已生效';opacity:1;color:var(--kc,#2563eb);}
    /* 筛选条件标签：显示在筛选条里，点一下即取消该条件 */
    .eqc-fchip{display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:700;padding:5px 11px;
        border-radius:999px;background:#eef4ff;border:1px solid #cfe0fd;color:#1d4ed8;text-decoration:none;transition:all .14s ease;}
    .eqc-fchip:hover{background:#dbe6ff;border-color:#93c5fd;}
    .eqc-fchip.plat{background:#eefaf3;border-color:#bfe8d3;color:#137a4a;}
    .eqc-fchip.plat:hover{background:#dcf3e7;border-color:#7fd0a8;}

    /* ---- 卡片：四项能力全空时的紧凑提示，避免与已录设备形成高度落差 ---- */
    .eqc-caps-none{margin-top:10px;padding:6px 9px;border-radius:9px;background:#fafbfd;border:1px dashed #e3e8f2;
        font-size:11.5px;color:#b6c0d2;text-align:center;letter-spacing:.3px;}

    /* ---- 照片加载失败后的回退占位：复用 .init 方块，不显示浏览器破图 ---- */
    .eqc-shot.is-nopic{background:linear-gradient(135deg,#f3f6fb,#e9eef7)!important;}
    .eqc-shot.big.is-nopic .init{width:88px;height:88px;font-size:29px;}

    /* ---- 抽屉底部常驻导航条 ---- */
    .eqc-dnav{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;gap:12px;
        padding:11px 22px;border-top:1px solid var(--eq-line);background:#fbfcfe;border-radius:0 0 0 18px;}
    .eqc-dnav-n{font-size:12.5px;color:var(--eq-sub);letter-spacing:.5px;}
    .eqc-dnav-n b{color:var(--eq-blue-d);font-size:15px;font-weight:800;font-variant-numeric:tabular-nums;}
    .eqc-dis{opacity:.42;cursor:not-allowed;pointer-events:none;}
    /* 抽屉标题下的快捷键提示 */
    .eqc-kbd{margin-left:10px;font-size:11px;color:#94a3b8;letter-spacing:.3px;white-space:nowrap;}
    .eqc-kbd::before{content:'⌨';margin-right:5px;opacity:.7;}

    /* ---- 抽屉打开时锁住背景滚动（挂 html 上，打印时自动解除） ---- */
    html.eqc-lock,html.eqc-lock body{overflow:hidden;}

    /* ---- 打印：把抽屉变成一张可直接贴在设备上的纸质档案卡 ---- */
    @media print{
        html.eqc-lock,html.eqc-lock body{overflow:visible;}
        @page{size:A4 portrait;margin:12mm;}
        .sidebar,.filterbar,.page-head .sub,.kpi-strip.eqc-kpi6,.eqc-wrap,.eqc-mask,
        .eqc-x,.eqc-acts,.eqc-dnav,.eqc-zoom,.eqc-photohint,.imgview,.eqc-kbd,.table-wrap>.chart-h:first-child{display:none!important;}
        .main{margin-left:0!important;}
        .table-wrap{box-shadow:none;border:0;padding:0;margin:0;background:#fff;}
        .eqc-drawer{position:static!important;width:auto!important;max-width:none!important;box-shadow:none!important;
            border:0!important;animation:none!important;transform:none!important;}
        .eqc-dhead{padding:0 0 8px;border-bottom:2px solid #1f2937;background:none;}
        .eqc-dtitle h3{font-size:20px;}
        .eqc-dbody{overflow:visible!important;padding:12px 0 0;}
        .eqc-hero{gap:14px;}
        .eqc-shot.big{width:270px;height:180px;}
        .eqc-card,.eqc-note,.eqc-doc,table.tbl{break-inside:avoid;page-break-inside:avoid;}
        .chart-h{margin-top:14px!important;font-size:14px!important;}
        body{background:#fff;font-size:12px;}
    }
    /* 金蝶数据列表 ·【删除】确认弹窗：危险按钮 + 清空范围清单（表名 + 当前行数）。
       只在本页弹窗里使用，与既有的 .modal / .msg / .tip 组合，不改通用类。 */
    .btn.danger{background:var(--red);color:#fff;}
    .btn.danger:hover{background:#b91c1c;box-shadow:none;}
    .del-tbl{width:100%;border-collapse:collapse;font-size:13px;}
    .del-tbl th,.del-tbl td{padding:7px 10px;border-bottom:1px solid var(--line);text-align:left;}
    .del-tbl thead th{background:#f8fafc;color:var(--muted);font-weight:500;font-size:12px;}
    .del-tbl td.num,.del-tbl th.num{text-align:right;font-variant-numeric:tabular-nums;color:#dc2626;font-weight:500;}
    .del-tbl tr.sum td{background:#fff7f7;border-top:1px solid #fecaca;font-weight:500;color:#b91c1c;}
    .del-tbl .tbl-name{display:block;font-size:11.5px;color:var(--muted);margin-top:2px;font-weight:400;}

    /* ==================================================================
       员工绩效分配三页（横剪 / 纵剪 / 碳钢）· Excel 风格表格
       配色直接取自《2026年X月绩效核算表》「简单加工XX板块员工绩效分配」
       三张工作表的 Office 主题色（accent2 橙 / accent6 绿 / accent1 蓝 + lt1 灰）：
          基础信息列  #BFBFBF   lt1 白 -25%（源表 A:F 表头）
          客观绩效块  #F8CBAD   accent2 #ED7D31 淡 60%（源表 G:N）
          主观考评块  #C6DEB5   accent6 #70AD47 淡 60%（源表 P:W）
          效率子组    #B7D3A0   上色加深一档，体现它是「主观考评」下的二级组
          计算列强调  #D9D9D9   lt1 白 -15% + 加粗（源表「目标效率」等结果列的做法）
       表格走全格细边框 + 全列居中 + 数字等宽，视觉上贴近原表。
       ================================================================== */
    table.tbl.alloc-x{border-collapse:collapse;table-layout:fixed;width:max-content;min-width:100%;font-size:12px;background:#fff;
        font-family:"Microsoft YaHei","微软雅黑",sans-serif;}
    table.tbl.alloc-x th,table.tbl.alloc-x td{border:1px solid #bfc6d2;padding:5px 8px;text-align:center;
        white-space:nowrap;line-height:1.5;color:#1f2937;font-weight:400;font-variant-numeric:tabular-nums;}

    /* 覆盖通用 .tbl 的斑马纹、淡蓝分割线阴影与左对齐 —— 还原源表的素底 + 居中 */
    table.tbl.alloc-x thead th{position:sticky;z-index:2;font-weight:700;font-size:11.5px;
        background-image:none;box-shadow:0 2px 0 #9aa6b6;color:#1f2937;border-bottom-color:#a9b3c2;text-align:center;}
    table.tbl.alloc-x tbody tr:nth-child(even){background:transparent;}
    table.tbl.alloc-x tbody tr:nth-child(even):hover{background:transparent;}
    table.tbl.alloc-x tbody tr:hover td{background:#eef4ff;}

    /* 三层表头逐层吸顶：行高固定，故 top 偏移量取固定像素 */
    table.tbl.alloc-x thead tr.h1 th{top:0;height:34px;}
    table.tbl.alloc-x thead tr.h2 th{top:34px;height:30px;}
    table.tbl.alloc-x thead tr.h3 th{top:64px;height:26px;}

    /* 分组配色（表头） */
    table.tbl.alloc-x th.g-ab{background:#BFBFBF;}
    table.tbl.alloc-x th.g-ao{background:#F8CBAD;}
    table.tbl.alloc-x th.g-as{background:#C6DEB5;}
    table.tbl.alloc-x th.g-ae{background:#B7D3A0;}
    /* 单项奖罚块（accent1 蓝 80%）/ 结果列（主观考核绩效、应发绩效，accent5 40%） */
    table.tbl.alloc-x th.g-af{background:#DEEBF7;}
    table.tbl.alloc-x th.g-az{background:#8FAADC;color:#1a2b5e;}

    /* 数据区按同样分组带上极淡底色，滚动时仍能对上表头分组 */
    table.tbl.alloc-x td.c-ab{background:#fff;}
    table.tbl.alloc-x td.c-ao{background:#fffaf6;}
    table.tbl.alloc-x td.c-as{background:#fbfdf9;}
    table.tbl.alloc-x td.c-ae{background:#fbfdf9;}
    table.tbl.alloc-x td.c-af{background:#fbfdff;}
    table.tbl.alloc-x td.c-az{background:#f4f7fd;}
    /* 合计行（源表 A:F 横向合并行）：灰底加粗，醒目收尾 */
    table.tbl.alloc-x tr.alloc-total td{background:#f1f5f9;font-weight:600;color:#334155;}
    /* 「目标效率」沿用源表结果列的灰底加粗 */
    table.tbl.alloc-x td.c-key{background:#D9D9D9;font-weight:700;}

    /* 数据区纵向合并格（还原源表「一机组一个值」的合并单元格）：内容垂直居中 */
    table.tbl.alloc-x tbody td.c-mg{vertical-align:middle;font-weight:600;}

    /* 编辑态输入框：仅「可编辑列」（_allocEditCols）才会渲染 input.cell-ed，
       因此以下样式天然只作用于具备编辑权限的单元格。
       ① 保留边框显示：输入框带 1px 浅蓝边框，单元格视觉上明确可改；
       ② 输入框背景设为淡蓝色，悬停加深、聚焦白底+内嵌描边；
       继承字体/字号/颜色/对齐，box-sizing:border-box 贴合格子，不改变表格布局。 */
    table.tbl.alloc-x input.cell-ed,table.tbl.alloc-x select.cell-ed{width:100%;min-width:0;
        box-sizing:border-box;padding:2px 6px;margin:0;font:inherit;color:inherit;text-align:inherit;
        background:#e8f0fe;border:1px solid #9cc2f0;border-radius:4px;outline:none;}
    table.tbl.alloc-x input.cell-ed:hover,table.tbl.alloc-x select.cell-ed:hover{background:#dbeafe;}
    table.tbl.alloc-x input.cell-ed:focus,table.tbl.alloc-x select.cell-ed:focus{background:#fff;
        outline:2px solid var(--accent);outline-offset:-2px;}
    table.tbl.alloc-x td.c-key input.cell-ed{font-weight:700;}

    /* ==================================================================
       绩效分配五页 · 编辑模式皮肤（对齐 人员档案/组织架构.aspx 的编辑态）
       —— 编辑模式徽标提示条 + 橙色「完成 / 新增人员」按钮 + 行淡蓝底、
          悬停淡橙放大、聚焦蓝色外发光；输入框白底、聚焦蓝色描边光晕。
       仅作用于 .alloc-x.editing，正常浏览态样式完全不变。
       ================================================================== */

    /* 编辑模式提示条（位于表格卡片上方，Messages 区输出） */
    .alloc-editbar{display:flex;flex-wrap:wrap;align-items:center;gap:10px;
        margin:0 0 10px;padding:8px 12px;border-radius:10px;font-size:12.5px;color:#24425f;
        background:linear-gradient(90deg,#f2f8ff 0%,#f8fbff 62%,#fff 100%);
        border:1px solid #dbe9fb;box-shadow:0 1px 2px rgba(15,42,74,.04);
        animation:allocFadeIn .2s ease-out;}
    .alloc-editbar .badge{display:inline-flex;align-items:center;gap:6px;flex:0 0 auto;
        height:22px;padding:0 10px;border-radius:11px;font-size:12px;font-weight:600;
        color:#1677ff;background:#e6f2ff;border:1px solid #c9e2ff;white-space:nowrap;}
    .alloc-editbar .badge i{width:6px;height:6px;border-radius:50%;background:#1677ff;
        box-shadow:0 0 0 3px rgba(22,119,255,.16);animation:allocPulse 1.8s ease-in-out infinite;}
    .alloc-editbar .hint{flex:1 1 260px;min-width:0;color:#5b6b80;}
    .alloc-editbar .hint b{color:#1677ff;font-weight:600;}
    .alloc-editbar .cnt{flex:0 0 auto;color:#5b6b80;white-space:nowrap;}
    .alloc-editbar .cnt b{color:#1677ff;font-weight:700;}
    @keyframes allocPulse{0%,100%{opacity:1}50%{opacity:.45}}
    @keyframes allocFadeIn{from{opacity:0}to{opacity:1}}

    /* 编辑模式按钮：橙色实心「完成」+ 橙色描边「新增人员」 */
    .btn.alloc-done{background:#fa8c16;border-color:#fa8c16;color:#fff;
        box-shadow:0 2px 6px rgba(250,140,22,.28);}
    .btn.alloc-done:hover{background:#ffa940;border-color:#ffa940;color:#fff;}
    .btn.alloc-addbtn{display:inline-flex;align-items:center;gap:5px;
        background:#fff7e6;border:1px solid #ffd591;color:#d46b08;box-shadow:none;}
    .btn.alloc-addbtn:hover{background:#fff1d6;border-color:#ffc069;color:#ad4e00;}
    /* 「新增到 [班组]」下拉：编辑模式同橙色系 */
    #allocNewTeam{border-color:#ffd591 !important;background:#fffdf8;color:#874d00;}
    #allocNewTeam:focus{outline:none;border-color:#fa8c16 !important;box-shadow:0 0 0 3px rgba(250,140,22,.16);}

    /* 编辑模式画布：表格顶部淡蓝渐隐，提示当前处于可编辑状态 */
    table.tbl.alloc-x.editing{background:linear-gradient(180deg,rgba(238,247,255,.62) 0%,rgba(255,255,255,0) 150px);}

    /* 数据行：淡蓝底（编辑态画布）。悬停 / 聚焦只给「鼠标下的那个输入框」着色，
       同一行其他输入框与其他人行一律不变色；纯 CSS :hover / :focus，无需 JS 联动。 */
    table.tbl.alloc-x.editing tbody tr.erow td{background:#f0f7ff;}

    /* 编辑态输入框：白底细蓝边；悬停橙、聚焦蓝，只作用于当前控件本身 */
    table.tbl.alloc-x.editing input.cell-ed,table.tbl.alloc-x.editing select.cell-ed{
        position:relative;z-index:1;transform:scale(1);transform-origin:center;
        background:#fff;border-color:#a9c7ef;
        transition:background .16s ease,border-color .16s ease,color .16s ease,box-shadow .16s ease,transform .14s ease;}
    /* 悬停 / 点击放大当前单元格（只放大鼠标下的控件，不放大整行） */
    table.tbl.alloc-x.editing input.cell-ed:hover,table.tbl.alloc-x.editing select.cell-ed:hover{
        background:#fff1d9;border-color:#ffd591;color:#874d00;
        transform:scale(1.12);z-index:5;box-shadow:0 4px 12px rgba(15,42,74,.18);}
    table.tbl.alloc-x.editing input.cell-ed:focus,table.tbl.alloc-x.editing select.cell-ed:focus{
        background:#d9ecff;border-color:#69b1ff;color:#123a63;outline:none;
        transform:scale(1.12);z-index:6;box-shadow:0 0 0 3px rgba(22,119,255,.18),0 6px 14px rgba(15,42,74,.20);}

    /* ==================================================================
       UI 2.0 · 全局细节 + 导航首页工作台（2026-09-24）
       仅追加，不改上方既有页面专属类。
       ================================================================== */
    /* 全局细滚动条（webkit 内核 / Edge / Chrome） */
    ::-webkit-scrollbar{width:9px;height:9px;}
    ::-webkit-scrollbar-track{background:transparent;}
    ::-webkit-scrollbar-thumb{background:#c9d2e0;border-radius:999px;border:2px solid transparent;background-clip:content-box;}
    ::-webkit-scrollbar-thumb:hover{background:#a9b6c9;border:2px solid transparent;background-clip:content-box;}
    .table-wrap::-webkit-scrollbar-thumb{background:#cfd8e6;border:2px solid transparent;background-clip:content-box;}

    /* ---- 工作台（index.aspx）---- */
    .dash{max-width:1280px;margin:0 auto;}
    /* 欢迎横幅：左侧问候与日期，右侧品牌色装饰 */
    .dash-hero{position:relative;overflow:hidden;border-radius:16px;padding:26px 30px;color:#fff;
        background:linear-gradient(120deg,#152b4e 0%,#1d3f74 58%,#2563eb 130%);
        box-shadow:0 10px 30px rgba(20,45,90,.22);}
    .dash-hero::before{content:"";position:absolute;right:-70px;top:-90px;width:300px;height:300px;border-radius:50%;
        background:radial-gradient(circle,rgba(96,165,250,.35),transparent 65%);}
    .dash-hero::after{content:"";position:absolute;right:90px;bottom:-120px;width:240px;height:240px;border-radius:50%;
        background:radial-gradient(circle,rgba(59,130,246,.28),transparent 62%);}
    .dash-hi{margin:0;font-size:22px;font-weight:700;letter-spacing:.5px;}
    .dash-date{margin-top:7px;font-size:13px;color:#bcd2f5;letter-spacing:.5px;}
    .dash-tip{margin-top:4px;font-size:12.5px;color:#8fb0e8;}
    /* 快捷入口分节 */
    .dash-sec{margin-top:22px;}
    .dash-sec-h{display:flex;align-items:center;gap:9px;margin:0 2px 12px;font-size:15px;font-weight:700;color:#1c2434;letter-spacing:.5px;}
    .dash-sec-h::before{content:'';width:4px;height:15px;border-radius:2px;background:linear-gradient(180deg,#3b82f6,#1d4ed8);}
    .dash-sec-h .cnt{font-size:11.5px;color:#8b98ad;font-weight:600;background:#f1f5fa;border-radius:999px;padding:1px 9px;}
    /* 入口宫格 */
    .dash-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(212px,1fr));gap:12px;}
    .dash-card{display:flex;align-items:center;gap:12px;padding:14px 16px;border-radius:12px;text-decoration:none;
        background:var(--card);border:1px solid var(--line);box-shadow:var(--shadow-sm);color:inherit;
        transition:transform .16s ease,box-shadow .16s ease,border-color .16s ease;}
    .dash-card:hover{transform:translateY(-3px);box-shadow:0 10px 24px rgba(25,45,90,.12);border-color:#c9dbf7;}
    .dash-ico{width:42px;height:42px;flex:0 0 42px;border-radius:11px;display:flex;align-items:center;justify-content:center;
        font-size:17px;font-weight:800;color:#fff;letter-spacing:0;box-shadow:0 4px 10px rgba(25,45,90,.18);}
    .dash-tt{font-size:13.5px;font-weight:600;color:#22304a;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
    .dash-gr{margin-top:2px;font-size:11.5px;color:#93a0b4;}
    .dash-card:hover .dash-tt{color:var(--accent);}
    @media (max-width:720px){
        .dash-grid{grid-template-columns:1fr 1fr;}
        .dash-hero{padding:20px 20px;}
    }

    /* ==================== 报工管理 · 报工单页面（14 个报工单共用皮肤） ====================
       设计原则：与全站一致的扁平白卡 + 细边框 + 浅投影；去掉旧版大面积蓝色渐变。
       结构约定：FilterBar 内容包在 .rpt-filtershell 里，Body 内容包在 .rpt-root 里。 */

    /* ---- 筛选区：挂在全局 .filterbar 白卡内，只做排布，不再重复画卡片 ---- */
    .rpt-filtershell .nav{display:flex;align-items:center;flex-wrap:wrap;gap:8px 14px;padding:2px 0;background:none;border-radius:0;box-shadow:none;}
    .rpt-filtershell .filter-group{display:flex;align-items:center;gap:6px;}
    .rpt-filtershell .filter-label{font-size:12.5px;color:var(--muted);font-weight:500;white-space:nowrap;min-width:0;text-align:left;}
    .rpt-filtershell .select{width:150px;text-align:left;}
    .rpt-filtershell .btn-search{margin-right:2px;}
    .rpt-filtershell .btn-export{background:var(--green);}
    .rpt-filtershell .btn-export:hover{background:#15803d;}
    /* 报工单视图切换器（统计图表/数据列表）靠右，与筛选条件分开主次 */
    .filterbar #rptViewSeg{margin-left:auto;}

    /* ---- 视图容器 ---- */
    .rpt-view{min-width:0;}

    /* ---- 汇总指标卡：深色数字 + 彩色小圆点标识，克制不抢眼 ---- */
    .rpt-root .summary-row{display:flex;gap:14px;flex-wrap:wrap;margin:0 0 14px;}
    .rpt-root .summary-card{flex:1 1 200px;min-width:0;background:var(--card);border:1px solid var(--line);border-radius:var(--r-md);
        box-shadow:var(--shadow-sm);padding:18px 22px 15px;text-align:center;transition:box-shadow .16s ease,transform .16s ease;}
    .rpt-root .summary-card:hover{transform:translateY(-2px);box-shadow:0 8px 20px rgba(30,50,90,.10);}
    .rpt-root .summary-card .num{font-size:30px;font-weight:700;color:#16223b;letter-spacing:.3px;font-variant-numeric:tabular-nums;line-height:1.2;}
    .rpt-root .summary-card .label{display:flex;align-items:center;justify-content:center;gap:6px;font-size:12.5px;color:var(--muted);margin-top:7px;font-weight:500;}
    .rpt-root .summary-card .label::before{content:'';width:7px;height:7px;border-radius:50%;background:var(--dot,#2563eb);flex:0 0 auto;}
    .rpt-root .summary-card:nth-child(1){--dot:#2563eb;}
    .rpt-root .summary-card:nth-child(2){--dot:#16a34a;}
    .rpt-root .summary-card:nth-child(3){--dot:#d97706;}
    .rpt-root .summary-card:nth-child(4){--dot:#7c3aed;}
    .rpt-root .summary-card:nth-child(5){--dot:#0891b2;}
    .rpt-root .summary-card:nth-child(6){--dot:#dc2626;}

    /* ---- 图表卡：标题左侧主色竖条，与全站 .chart-h 呼应 ---- */
    .rpt-root .chart-row{display:flex;gap:14px;flex-wrap:wrap;align-items:stretch;margin:0 0 14px;}
    .rpt-root .chart-row .chart-card{flex:1 1 340px;width:auto;max-width:none;margin:0;}
    .rpt-root .chart-card{background:var(--card);border:1px solid var(--line);border-radius:var(--r-md);box-shadow:var(--shadow-sm);
        padding:16px 18px 10px;margin:0 0 14px;min-width:0;}
    .rpt-root .chart-title{font-size:14.5px;font-weight:700;color:#16223b;margin:0 0 8px;padding-left:11px;position:relative;letter-spacing:.3px;text-align:left;}
    .rpt-root .chart-title::before{content:'';position:absolute;left:0;top:50%;transform:translateY(-50%);width:4px;height:15px;border-radius:2px;background:linear-gradient(180deg,#3b82f6,#1d4ed8);}
    .rpt-root .chart-card-wide{flex:1 1 auto;}

    /* ---- 月度效率趋势卡：标题与右侧机组索引按钮（与刨边机组报工单同一套观感） ---- */
    .rpt-root .trend-title{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;margin-bottom:10px;}
    .rpt-root .trend-selector{display:flex;flex-wrap:wrap;gap:8px;}
    .rpt-root .trend-selector button{height:30px;padding:0 14px;font-size:12.5px;font-weight:500;color:#47536b;background:#fff;
        border:1px solid #dfe5ee;border-radius:7px;cursor:pointer;transition:all .14s ease;}
    .rpt-root .trend-selector button.has-data{color:var(--accent);background:#f4f8ff;border-color:#c3d7f8;}
    .rpt-root .trend-selector button.has-data:hover{border-color:var(--accent);}
    .rpt-root .trend-selector button.has-data.active{color:#fff;background:var(--accent);border-color:var(--accent);font-weight:600;}
    .rpt-root .trend-selector button.no-data{color:var(--muted);background:#f3f4f6;border-color:#eceef2;cursor:not-allowed;}

    /* ---- 明细区头部（表名/同步时间/同步按钮） ---- */
    .rpt-root .rpt-detail-head{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;
        background:var(--card);border:1px solid var(--line);border-radius:var(--r-md);box-shadow:var(--shadow-sm);padding:11px 16px;margin:0 0 14px;}
    .rpt-root .rpt-detail-main{display:flex;align-items:center;gap:14px;min-width:0;flex-wrap:wrap;}
    .rpt-root .rpt-detail-title{color:#16223b;font-size:15px;font-weight:700;white-space:nowrap;}
    .rpt-root .rpt-detail-table,.rpt-root .rpt-detail-time{color:var(--muted);font-size:12.5px;white-space:nowrap;}
    .rpt-root .rpt-detail-table code{color:#1d4ed8;background:#f0f5ff;border:1px solid #dbe7ff;border-radius:5px;padding:2px 7px;
        font-family:Consolas,"Microsoft YaHei",monospace;font-size:12px;}
    .rpt-root .rpt-detail-time b{color:#33415c;font-weight:600;}
    .rpt-root .rpt-sync-btn{flex:0 0 auto;height:32px;padding:0 18px;color:#fff;background:var(--accent);border:0;border-radius:8px;
        cursor:pointer;font-size:12.5px;font-weight:600;transition:background .14s ease;}
    .rpt-root .rpt-sync-btn:hover{background:var(--accent-d);}
    /* 过滤条里的「同步」按钮（如 安全违章）：沿用报工页 rpt-sync-btn 同款蓝色实心外观，高度与 filterbar 其他按钮对齐 */
    .filterbar .btn.rpt-sync-btn{background:var(--accent);color:#fff;border:0;border-radius:8px;font-weight:600;}
    .filterbar .btn.rpt-sync-btn:hover{background:var(--accent-d);}

    /* ---- 明细表：与全局 table.tbl 同一观感（浅灰表头/斑马纹/悬停左侧主色描边） ---- */
    .rpt-root .table-container{background:var(--card);border:1px solid var(--line);border-radius:var(--r-md);box-shadow:var(--shadow-sm);overflow-x:auto;margin:0 0 4px;}
    .rpt-root table{width:100%;border-collapse:collapse;min-width:1600px;}
    .rpt-root thead th{position:sticky;top:0;z-index:1;background:var(--th-bg);color:#5b6678;font-weight:600;padding:11px 10px;
        text-align:center;border-bottom:1px solid #dfe5ee;font-size:12.5px;white-space:nowrap;letter-spacing:.3px;}
    .rpt-root tbody td{padding:10px;text-align:center;border-bottom:1px solid var(--line-2);font-size:12.5px;background:#fff;color:#33415c;white-space:nowrap;}
    .rpt-root tbody tr:nth-child(even) td{background:#fbfcfe;}
    .rpt-root tbody tr:hover td{background:var(--hover-bg);}
    .rpt-root tbody tr:hover td:first-child{box-shadow:inset 3px 0 0 var(--accent);}
    /* 异常原因等长文本列：覆盖全局 nowrap，限宽换行显示，避免溢出遮挡后续列 */
    .rpt-root td.reason-cell{max-width:260px;white-space:normal;word-break:break-word;text-align:left;line-height:1.5;}
    .rpt-root .weight{color:var(--accent);font-weight:700;font-variant-numeric:tabular-nums;}

    /* ---- 审批状态标签：已审批绿、未审批琥珀（待办语义） ---- */
    .rpt-root .tag{display:inline-block;padding:3px 11px;border-radius:999px;font-size:12px;font-weight:500;}
    .rpt-root .tag-done{background:#dcfce7;color:#15803d;}
    .rpt-root .tag-todo{background:#fef3c7;color:#b45309;}

    /* ---- 分页：极简胶囊，当前页主色实心 ---- */
    .rpt-root .pagination{display:flex;justify-content:center;align-items:center;gap:7px;flex-wrap:wrap;padding:14px 6px 4px;margin:0;background:none;border-radius:0;box-shadow:none;}
    .rpt-root .pagination a{padding:6px 13px;border:1px solid var(--line);border-radius:8px;background:#fff;font-size:12.5px;
        text-decoration:none;color:#33415c;transition:all .14s ease;font-weight:500;}
    .rpt-root .pagination a:hover{border-color:var(--accent);color:var(--accent);background:#fff;transform:none;box-shadow:none;}
    .rpt-root .pagination span{padding:6px 4px;color:var(--muted);font-size:12.5px;}
    .rpt-root .pagination .current{background:var(--accent);border:1px solid var(--accent);color:#fff;font-weight:600;padding:6px 13px;border-radius:8px;}
    .rpt-root .pagination .disabled{color:var(--muted);background:#f3f4f6;border:1px solid #eceef2;cursor:not-allowed;opacity:.7;pointer-events:none;padding:6px 13px;border-radius:8px;}

    /* ---- 导出进度遮罩 ---- */
    .rpt-root .export-overlay{display:none;position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(15,23,42,.45);z-index:9999;justify-content:center;align-items:center;}
    .rpt-root .export-dialog{background:#fff;border:1px solid var(--line);border-radius:var(--r-md);padding:28px 44px;text-align:center;box-shadow:var(--shadow-lg);min-width:320px;}
    .rpt-root .export-dialog .export-icon{font-size:36px;margin-bottom:10px;}
    .rpt-root .export-dialog .export-text{font-size:14.5px;color:#16223b;font-weight:600;margin-bottom:16px;}
    .rpt-root .export-progress-track{width:100%;height:10px;background:#eef2f8;border-radius:5px;overflow:hidden;}
    .rpt-root .export-progress-bar{height:100%;width:0%;background:linear-gradient(90deg,#16a34a,#22c55e);border-radius:5px;transition:width .3s ease;}
    .rpt-root .export-progress-percent{font-size:12.5px;color:#15803d;font-weight:600;margin-top:9px;}

    @media (max-width:980px){
        .rpt-root .summary-card{flex:1 1 45%;}
        .rpt-root .chart-row .chart-card{flex:1 1 100%;}
    }
