*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}
body{font-family:-apple-system,"Microsoft YaHei","PingFang SC",sans-serif;background:#F7F5F0;color:#17302F;font-size:14px;line-height:1.6}
.hidden{display:none!important}
button{font-family:inherit;font-size:14px;cursor:pointer;border:none;border-radius:8px;padding:8px 14px;background:#1F7A74;color:#fff}
button.ghost{background:#fff;color:#1F7A74;border:1px solid #D8D2C4}
button.danger{background:#B4432E}
button.sm{padding:5px 10px;font-size:12.5px;border-radius:6px}
button:disabled{opacity:.5;cursor:not-allowed}

/* login gate */
.gate{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(160deg,#0E3B3A,#1F7A74 70%,#17302F)}
.gate-card{background:#fff;border-radius:16px;padding:32px 28px;max-width:380px;width:92%;text-align:center;box-shadow:0 18px 50px rgba(2,10,40,.35)}
.gate-logo{font-size:22px;font-weight:900;color:#0E3B3A;letter-spacing:2px}
.gate-title{font-size:14.5px;color:#1F7A74;margin:6px 0 4px;font-weight:600}
.gate-sub{font-size:13px;color:#68736E;margin-bottom:18px}
.gate-btn{display:block;background:#1F7A74;color:#fff;border-radius:8px;padding:11px;text-decoration:none;font-size:14px}

/* layout */
.topbar{position:fixed;top:0;left:0;right:0;height:52px;background:#0E3B3A;color:#F2EFE6;display:flex;align-items:center;justify-content:space-between;padding:0 16px;z-index:30}
.topbar .brand{font-size:16px;font-weight:700}
.topbar .brand small{font-weight:400;font-size:11.5px;opacity:.8;margin-left:6px}
.topbar .ver{font-size:11px;background:rgba(255,255,255,.2);padding:2px 8px;border-radius:10px;margin-left:8px;font-weight:400}
.topbar .user{display:flex;align-items:center;gap:8px;font-size:13px}
.topbar .user button{background:rgba(255,255,255,.16);font-size:12.5px;padding:5px 10px}
.role-chip{background:#C67B2B;color:#fff;font-size:11.5px;padding:2px 8px;border-radius:10px}
.sidenav{position:fixed;top:52px;left:0;bottom:0;width:190px;background:#fff;border-right:1px solid #D8D2C4;overflow-y:auto;z-index:20}
.sidenav a{display:block;padding:11px 14px;color:#17302F;text-decoration:none;font-size:13.5px;border-left:3px solid transparent}
.sidenav a:hover{background:#E2EFEE}
.sidenav a.on{background:#E2EFEE;color:#1F7A74;border-left-color:#1F7A74;font-weight:600}
.sidenav a.ext{display:flex;align-items:center;justify-content:space-between;gap:6px}
.sidenav a.ext-ic{font-size:11px;opacity:.5}
.sidenav a.ext:hover{color:#1F7A74}
.sidenav .grp{font-size:11px;color:#8A938F;padding:12px 14px 4px;letter-spacing:1px}
.main{margin:52px 0 0 190px;padding:18px;min-height:calc(100vh - 52px)}

/* cards & tables */
.card{background:#fff;border:1px solid #D8D2C4;border-radius:12px;padding:16px;margin-bottom:14px}
.card>h3{font-size:15px;color:#0E3B3A;margin-bottom:8px;display:flex;align-items:center;gap:8px}
.card>h3::before{content:"";width:4px;height:15px;background:#C67B2B;border-radius:2px}
.muted{color:#68736E;font-size:12.5px}
.row{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-bottom:10px}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:12px}
.stat{background:#fff;border:1px solid #D8D2C4;border-radius:12px;padding:14px}
.stat .k{font-size:12px;color:#68736E}
.stat .v{font-size:24px;font-weight:800;color:#1F7A74;line-height:1.25}
.stat.warn .v{color:#B4432E}
.stat .u{font-size:11.5px;color:#8A938F}
table{width:100%;border-collapse:collapse;font-size:13px}
th{background:#0E3B3A;color:#F2EFE6;text-align:left;padding:8px 8px;font-weight:600;font-size:12.5px}
td{padding:7px 8px;border-top:1px solid #EAE6DA;border-right:1px solid #EAE6DA}
td:last-child,th:last-child{border-right:none}
tbody tr:nth-child(even){background:#FBFAF6}
.tw{overflow-x:auto;border:1px solid #D8D2C4;border-radius:10px;background:#fff}
.alert{background:#F6E3DE;color:#B4432E;border-left:4px solid #B4432E;padding:9px 12px;border-radius:0 8px 8px 0;font-size:13px;margin-bottom:10px}
.ok{background:#E3F0E7;color:#2E7D4F;border-left:4px solid #2E7D4F;padding:9px 12px;border-radius:0 8px 8px 0;font-size:13px;margin-bottom:10px}
.tag{display:inline-block;font-size:11.5px;padding:2px 8px;border-radius:100px;font-weight:600;white-space:nowrap}
.t-g{background:#E3F0E7;color:#2E7D4F}.t-a{background:#F5EBD7;color:#A8762B}.t-r{background:#F6E3DE;color:#B4432E}.t-b{background:#E2EFEE;color:#1F7A74}.t-x{background:#EFEDE6;color:#7A837F}

input,select,textarea{padding:8px 10px;border:1px solid #D8D2C4;border-radius:8px;font-size:14px;font-family:inherit;background:#fff;width:100%}
label.fl{display:block;font-size:12.5px;color:#68736E;margin-bottom:4px}
.field{margin-bottom:10px}
.btn-block{width:100%;padding:11px;font-size:15px}

/* modal */
.modal-mask{position:fixed;inset:0;background:rgba(20,30,28,.5);display:flex;align-items:center;justify-content:center;z-index:60;padding:16px}
.modal-box{background:#fff;border-radius:14px;padding:20px;max-width:760px;width:100%;max-height:88vh;overflow-y:auto}
.modal-box h3{font-size:16px;color:#0E3B3A;margin-bottom:10px}
.toast{position:fixed;left:50%;bottom:26px;transform:translateX(-50%);background:#17302F;color:#fff;padding:10px 18px;border-radius:10px;font-size:13.5px;opacity:0;pointer-events:none;z-index:99;transition:opacity .25s;max-width:80%}
.toast.on{opacity:1}

/* scan */
.scanbox{background:#0E3B3A;color:#fff;border-radius:12px;padding:16px;text-align:center}
.scanbox video{width:100%;max-width:420px;border-radius:10px;background:#000;display:block;margin:0 auto}
.scanbox .big-btn{width:100%;padding:18px;font-size:17px;margin-top:10px}
.launcher{position:fixed;inset:0;background:#0E3B3A;color:#fff;z-index:70;display:none;flex-direction:column;padding:20px}
.launcher.on{display:flex}

/* print */
@media print{
  .topbar,.sidenav,.main>*{display:none!important}
  .main{margin:0;padding:0}
  .print-only{display:block!important}
  body{background:#fff}
}
.print-only{display:none}

/* ============ A2 平衡表：结论文区（模板 表尾 r21~r30） ============ */
.bl-form{background:#fff;border:1px solid #D8D2C4;border-radius:10px;padding:12px 14px}
.bl-formline{display:flex;flex-wrap:wrap;align-items:center;gap:6px 14px;font-size:13px;padding:10px 0;border-bottom:1px dashed #E0DACC}
.bl-formline input[type=text],.bl-formline input:not([type]){width:120px;display:inline-block}
.bl-sign{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:12px}
.bl-sign-cell{border:1px solid #D8D2C4;border-radius:10px;padding:10px;text-align:center;background:#FBFAF6}
.bl-sign-cell .k{font-size:12px;color:#68736E;margin-bottom:8px}
.bl-sign-cell input{text-align:center;margin-bottom:6px}
.bl-sign-cell input[type=date]{font-size:12px;padding:5px 4px}
.bl-legend{display:flex;flex-wrap:wrap;gap:8px 16px;margin-top:12px;font-size:11.5px;color:#68736E}
.lg-y::before{content:"";display:inline-block;width:11px;height:11px;background:#FFF4CF;border:1px solid #E8C86A;vertical-align:-1px;margin-right:5px}
.lg-b::before{content:"";display:inline-block;width:11px;height:11px;background:#DCEEF3;border:1px solid #7FB6C6;vertical-align:-1px;margin-right:5px}
.lg-o::before{content:"";display:inline-block;width:11px;height:11px;background:#FBE2CE;border:1px solid #D9A066;vertical-align:-1px;margin-right:5px}

/* ============ A3/A4/A6 生产记录：检查表 ============ */
.rc-sec{background:#0E3B3A;color:#F2EFE6;font-size:13px;font-weight:600;padding:7px 12px;border-radius:8px 8px 0 0;margin-top:16px}
.rc-tbl{border:1px solid #D8D2C4;border-radius:0 0 8px 8px;overflow:hidden}
.rc-tbl td{vertical-align:top;font-size:12.8px;line-height:1.55}
.rc-tbl td.rc-no{width:44px;text-align:center;color:#68736E;background:#FBFAF6;white-space:nowrap}
.rc-tbl td.rc-t{min-width:220px}
.rc-tbl td.rc-txt{min-width:170px}
.rc-tbl input.rc-txt{padding:5px 7px;font-size:13px;background:#fff}
.rc-tbl input.rc-txt:disabled{background:#EAF4F2;color:#1F7A74;font-weight:700}
.rc-tbl td>label.cb{display:inline-flex;align-items:center;gap:4px;margin-right:10px;white-space:nowrap;font-size:12.5px;color:#17302F}
.rc-tbl td>label.cb input{width:auto;margin:0}
.grp{background:#E2EFEE!important;color:#0E3B3A;font-weight:700;font-size:12.5px;text-align:center;letter-spacing:1px}
label.cb{display:inline-flex;align-items:center;gap:5px;white-space:nowrap;font-size:13px;color:#17302F}
label.cb input[type=radio],label.cb input[type=checkbox]{width:auto;margin:0}
label.cb input+span{margin-left:2px}

/* ============ A5 生产日报 ============ */
.dy-tbl{font-size:12.5px}
.dy-tbl th{text-align:center;padding:7px 6px}
.dy-tbl td{text-align:center;padding:7px 6px;white-space:nowrap}
.dy-tbl td.grp{text-align:center}
.dy-tbl td.dy-rate{font-weight:800;color:#1F7A74;background:#EAF4F2}
.dy-tbl tbody tr:hover td{background:#F6FBFA}
.psel{min-width:96px;padding:6px 8px;font-size:13px}

/* ============ A7 装箱记录表 QR-PR01-06 ============ */
.bx-head{display:flex;flex-wrap:wrap;gap:8px 18px;align-items:center;background:#fff;border:1px solid #D8D2C4;border-bottom:none;border-radius:10px 10px 0 0;padding:11px 14px;font-size:13px}
.bx-head input{width:150px;display:inline-block}
.bx-tbl{border:1px solid #D8D2C4;border-radius:0 0 10px 10px;overflow:hidden}
.bx-tbl th{text-align:center;padding:7px 6px}
.bx-tbl td{text-align:center;padding:4px 6px;white-space:nowrap}
.bx-tbl td.bx-no{width:52px;color:#68736E;background:#FBFAF6;font-size:12.5px}
.bx-tbl input.bx-c{padding:5px 6px;font-size:13px;text-align:center}
.bx-foot{display:flex;flex-wrap:wrap;gap:8px 16px;align-items:center;margin-top:12px;padding:11px 14px;background:#FBFAF6;border:1px solid #D8D2C4;border-radius:10px;font-size:13px}
.bx-foot input{width:130px;display:inline-block}
.bx-ver{margin-left:auto;font-size:11.5px;color:#8A938F;letter-spacing:.5px}

@media (max-width:760px){
  .sidenav{width:100%;position:fixed;bottom:0;top:auto;height:auto;display:flex;overflow-x:auto;border-right:none;border-top:1px solid #D8D2C4;padding:4px}
  .sidenav a{padding:8px 10px;white-space:nowrap;border-left:none;border-bottom:3px solid transparent}
  .sidenav a.on{border-bottom-color:#1F7A74}
  .sidenav .grp{display:none}
  .main{margin:52px 0 56px 0;padding:12px}
  .grid{grid-template-columns:repeat(2,1fr)}
  .bl-sign{grid-template-columns:repeat(2,1fr)}
  .rc-tbl td.rc-t{min-width:150px}
  .rc-tbl td.rc-txt{min-width:110px}
  .bx-head input,.bx-foot input{width:120px}
  .bx-ver{margin-left:0;width:100%;text-align:right}
}

/* ===== 冻结表头 / 冻结首列（2026-09-28）=====
   宽表（岗位权限矩阵、按账号权限、页面权限弹窗）在页面内滚动时，
   表头行始终固定可见，首列（岗位/账号）横向滚动时也固定，便于对照填写。 */
.tw-freeze{max-height:66vh;overflow:auto}
/* 表头整行冻结（注意：th 不是 thead 的直接子元素，中间还有 tr，所以不能用 >） */
.tw-freeze table thead th{position:sticky;top:0;z-index:3;background:#0E3B3A;color:#F2EFE6}
/* 首列冻结 */
.tw-freeze table th.sticky-l,.tw-freeze table td.sticky-l{position:sticky;left:0;z-index:2;background:#fff}
.tw-freeze table thead th.sticky-l{z-index:4;top:0;background:#0E3B3A}
.tw-freeze table td.sticky-l{box-shadow:1px 0 0 #EAE6DA}
.tw-freeze table tbody tr:nth-child(even) td.sticky-l{background:#FBFAF6}
/* 第 2 个冻结列（岗位权限矩阵的「类别」） */
.tw-freeze table th.sticky-l2,.tw-freeze table td.sticky-l2{position:sticky;left:88px;z-index:2;background:#fff}
.tw-freeze table thead th.sticky-l2{z-index:4;top:0;background:#0E3B3A}
.tw-freeze table tbody tr:nth-child(even) td.sticky-l2{background:#FBFAF6}
/* 最后一个冻结列的右侧阴影，明确「这一列被钉住了」 */
.tw-freeze table th.edge,.tw-freeze table td.edge{box-shadow:6px 0 6px -5px rgba(0,0,0,.28)}

/* ===== 导入体检提示框（2026-09-28）=====
   .warn-box  ：会引起失败的问题（红）
   .warn-box.soft：只需留意、不影响导入（黄） */
.warn-box{background:#FDEDEC;color:#9B2C2C;border-left:4px solid #C0392B;padding:9px 12px;border-radius:0 8px 8px 0;font-size:13px;margin-bottom:10px}
.warn-box b{color:#8E2420}
.warn-box ol{margin:6px 0 0 18px;padding:0}
.warn-box li{margin:2px 0}
.warn-box.soft{background:#FDF6E3;color:#8A6D1F;border-left-color:#D4A017}
.warn-box.soft b{color:#7A5F14}

/* ===== 工单下拉的搜索框（2026-09-28）===== */
.ym-order-q{display:block;width:100%;margin:0 0 4px;padding:6px 9px;font-size:13px;border:1px solid #C9DAD7;border-radius:8px;background:#fff}
.ym-order-q:focus{outline:none;border-color:#0E3B3A;box-shadow:0 0 0 2px rgba(14,59,58,.12)}
/* 系统自动带出的字段（浅色底，便于人工复核） */
.rc-auto{background:#F6FAF8!important}
@media print{.ym-order-q{display:none!important}}
