:root{--bg:#f5f6f8;--card:#fff;--line:#e6e8ec;--text:#1f2329;--dim:#8a919e;--blue:#2563eb;--green:#16a34a;--amber:#d97706;--red:#dc2626;--radius:10px}*{box-sizing:border-box}body{background:var(--bg);color:var(--text);margin:0;font-family:PingFang SC,Microsoft YaHei,-apple-system,Segoe UI,sans-serif;font-size:14px;line-height:1.6}.app{min-height:100vh}.topbar{background:var(--card);border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;padding:14px 28px;display:flex}.brand{align-items:center;gap:12px;display:flex}.logo{background:var(--blue);color:#fff;border-radius:9px;place-items:center;width:34px;height:34px;font-weight:700;display:grid}.brand-title{font-weight:600}.brand-sub{color:var(--dim);font-size:12px}.topbar-right{align-items:center;gap:16px;display:flex}.month{color:var(--dim);align-items:center;gap:8px;font-size:13px;display:flex}.month input{border:1px solid var(--line);font:inherit;color:var(--text);background:#fff;border-radius:8px;padding:6px 10px}.steps{max-width:1080px;color:var(--dim);gap:8px;margin:0 auto;padding:14px 28px 0;font-size:13px;display:flex}.step{border-radius:999px;padding:4px 10px}.step.active{color:var(--blue);background:#e8efff;font-weight:600}.step.done{color:var(--green)}main{flex-direction:column;gap:16px;max-width:1080px;margin:0 auto;padding:16px 28px 64px;display:flex}.drop{background:var(--card);text-align:center;border:1.5px dashed #cfd4dc;border-radius:16px;margin-top:48px;padding:56px 32px}.drop-icon{width:46px;height:46px;color:var(--blue);background:#eef2ff;border-radius:50%;place-items:center;margin:0 auto 12px;font-size:20px;display:grid}.drop h2{margin:0 0 6px;font-size:18px}.drop p{color:var(--dim);margin:0 0 20px}.drop-actions{justify-content:center;align-items:center;gap:12px;display:flex}.summary{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:20px;padding:16px 20px;display:flex}.file-name{font-weight:600}.file-meta{color:var(--dim);font-size:12px}.chips{gap:10px;display:flex}.chip{text-align:center;background:#f7f8fa;border-radius:8px;min-width:76px;padding:8px 12px}.chip b{font-size:18px;line-height:1.2;display:block}.chip span{color:var(--dim);font-size:12px}.chip.ok b{color:var(--green)}.chip.warn b{color:var(--amber)}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:16px 20px}.card-head{justify-content:space-between;align-items:center;gap:12px;margin-bottom:10px;display:flex}.card-head h2{margin:0;font-size:15px}.hint{color:var(--dim);font-size:12px}.tbl{border-collapse:collapse;width:100%}.tbl th{text-align:left;color:var(--dim);border-bottom:1px solid var(--line);white-space:nowrap;padding:8px 10px;font-size:12px;font-weight:500}.tbl td{border-bottom:1px solid #f1f2f4;padding:8px 10px}.tbl tbody tr:last-child td{border-bottom:none}.tbl .num{text-align:right;font-variant-numeric:tabular-nums}.tbl .strong{font-weight:600}.col-letter{width:42px;color:var(--dim)}.dim{color:var(--dim)}.mono{font-family:ui-monospace,Consolas,monospace;font-size:13px}.muted{opacity:.6}.missing{color:var(--red)}select{font:inherit;border:1px solid var(--line);color:var(--text);background:#fff;border-radius:6px;padding:4px 8px}.tag{color:var(--blue);background:#eef2ff;border-radius:6px;padding:2px 8px;font-size:12px;display:inline-block}.badge{color:var(--dim);background:#f1f2f4;border-radius:999px;padding:2px 8px;font-size:12px;display:inline-block}.badge.on{color:var(--green);background:#e9f7ee}.note{color:var(--dim);background:#fafafa;border-radius:8px;margin-top:10px;padding:8px 12px;font-size:12px}.group{margin-bottom:12px}.group-title{margin-bottom:4px;font-size:13px;font-weight:600}.group-line{color:#454c56;font-size:13px}.error-group .group-title{color:var(--red)}.search{border:1px solid var(--line);font:inherit;border-radius:8px;width:240px;padding:6px 12px}.has-issue td{background:#fff9f5}.issues{color:var(--amber);font-size:12px}.pager{justify-content:space-between;align-items:center;margin-top:12px;display:flex}.pager-controls{align-items:center;gap:10px;font-size:13px;display:flex}.warn-line{align-items:flex-start;gap:8px;padding:5px 0;font-size:13px;display:flex}.warn-line .dot{background:var(--blue);border-radius:50%;flex:none;width:6px;height:6px;margin-top:8px}.warn-line.warn .dot{background:var(--amber)}.warn-line.error .dot{background:var(--red)}.actions{justify-content:space-between;align-items:center;gap:16px;display:flex}button{font:inherit;cursor:pointer;border:1px solid #0000;border-radius:8px;padding:8px 16px;transition:background .15s,opacity .15s}button:disabled{opacity:.5;cursor:not-allowed}.primary{background:var(--blue);color:#fff}.primary:hover:not(:disabled){background:#1d4ed8}.ghost{border-color:var(--line);color:var(--text);background:#fff}.ghost:hover:not(:disabled){background:#f7f8fa}.link{color:var(--blue);background:0 0;padding:0;text-decoration:underline}.alert{border-radius:8px;padding:10px 14px;font-size:13px}.alert.error{color:var(--red);background:#fdecec}.alert.ok{color:var(--green);background:#e9f7ee}@media (width<=720px){.topbar,.steps{padding-left:16px;padding-right:16px}main{padding:12px 16px 48px}.chips{flex-wrap:wrap}.columns th:nth-child(4),.columns td:nth-child(4){display:none}}.col-check{width:108px}.check{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:6px;font-size:13px;display:inline-flex}.check input{width:16px;height:16px;accent-color:var(--blue);cursor:pointer}.sample{text-overflow:ellipsis;white-space:nowrap;max-width:220px;font-size:13px;overflow:hidden}.table-scroll{overflow-x:auto}.table-scroll .tbl{min-width:max-content}.table-scroll .tbl th,.table-scroll .tbl td{white-space:nowrap}.table-scroll .tbl td.issues{white-space:normal;min-width:140px}.tbl tfoot td{color:var(--text);background:#f7f8fa;border-top:2px solid #dfe3e8;border-bottom:none;font-weight:700}.tbl tfoot td.total-label{color:var(--dim);font-weight:600}.tbl tfoot td.total-count{color:var(--dim);font-size:12px;font-weight:500}.confirm-row{border-top:1px solid var(--line);padding:14px 0}.confirm-row:first-of-type{border-top:none}.confirm-head{margin-bottom:8px;font-size:14px}.candidates{flex-wrap:wrap;gap:8px 18px;margin-bottom:10px;display:flex}.candidate{border:1px solid var(--line);cursor:pointer;background:#fff;border-radius:8px;align-items:center;gap:6px;padding:6px 12px;font-size:13px;display:inline-flex}.candidate:has(input:checked){border-color:var(--blue);background:#f2f6ff}.candidate input{accent-color:var(--blue)}.confirm-actions{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;display:flex}.modal-mask{z-index:20;background:#14181f73;place-items:center;padding:24px;display:grid;position:fixed;inset:0}.modal{background:#fff;border-radius:12px;width:min(440px,100%);padding:22px 24px;box-shadow:0 18px 48px #0000002e}.modal h3{margin:0 0 10px;font-size:16px}.modal-lead{color:var(--dim);margin:0 0 12px}.modal-lead b{color:var(--text);font-size:16px}.text-warn{color:var(--amber)!important}.modal-list{color:#454c56;margin-bottom:12px;font-size:13px}.modal-list .note{margin-top:8px}.modal-schedule{margin:8px 0}.schedule-input{border:1px solid var(--line);width:100%;font:inherit;border-radius:8px;margin-bottom:8px;padding:8px 10px;display:block}.modal-actions{justify-content:flex-end;gap:10px;margin-top:16px;display:flex}.sent-facts{flex-wrap:wrap;gap:28px;margin:4px 0 14px;display:flex}.sent-facts b{font-size:18px;display:block}.sent-facts span{color:var(--dim);font-size:12px}.pill{color:var(--dim);background:#f1f2f4;border-radius:999px;padding:2px 8px;font-size:12px;display:inline-block}.pill.read{color:var(--blue);background:#eef2ff}.pill.confirmed{color:var(--green);background:#e9f7ee}.board{border-top:1px solid var(--line);margin-top:18px;padding-top:14px}.payslip-wrap{background:#eef0f3;justify-content:center;align-items:flex-start;min-height:100vh;padding:16px;display:flex}.payslip-card{z-index:1;background:#fff;border-radius:16px;width:min(430px,100%);padding:22px 20px;position:relative;box-shadow:0 6px 24px #14181f14}.payslip-head{margin-bottom:18px}.payslip-month{color:var(--dim);font-size:13px}.payslip-name{margin:4px 0;font-size:20px;font-weight:600}.payslip-net{background:#f7f8fa;border-radius:12px;flex-direction:column;gap:6px;margin-bottom:18px;padding:16px;display:flex}.payslip-net b{letter-spacing:.5px;font-size:30px}.payslip-fields{border-top:1px solid var(--line)}.payslip-row{border-bottom:1px solid #f1f2f4;justify-content:space-between;padding:9px 0;font-size:14px;display:flex}.payslip-tip{color:var(--dim);margin:16px 0 12px;font-size:12px}.payslip-btn{width:100%;padding:12px;font-size:15px}.payslip-done{text-align:center;color:var(--green);background:#e9f7ee;border-radius:8px;padding:12px;font-weight:600}.payslip-note{color:var(--dim);text-align:center;margin:10px 0 0;font-size:12px}.pc-card{text-align:center;padding:36px 24px}.pc-card h2{margin:0 0 8px;font-size:17px}.pc-card .qr{width:240px;height:240px;margin:18px auto 0;display:block}.error-card{text-align:center;padding:40px 24px}.month-filter{flex-wrap:wrap;gap:6px;display:flex}.month-filter button{border:1px solid var(--line);color:var(--dim);background:#fff;border-radius:999px;padding:4px 10px;font-size:12px}.month-filter button.active{border-color:var(--blue);color:var(--blue);background:#eef2ff}tr.selected td{background:#f2f6ff}button.link{color:var(--blue);background:0 0;border:none;padding:0;text-decoration:underline}.mode-tag{vertical-align:middle;color:var(--dim);background:#f1f2f4;border-radius:999px;margin-left:8px;padding:1px 8px;font-size:11px;font-weight:500}.mode-tag.dingtalk{color:var(--green);background:#e9f7ee}.uid-box{background:#f7f8fa;border-radius:8px;margin-top:16px;padding:12px}.uid-box span{margin-bottom:6px;font-size:12px;display:block}.uid-box code{word-break:break-all;-webkit-user-select:all;user-select:all;font-size:13px}.pill.void{color:var(--red);background:#fdecec}.actions-cell{align-items:center;gap:14px;display:flex}button.link.danger{color:var(--red)}.head-right{flex-wrap:wrap;align-items:center;gap:14px;display:flex}.card-head .hint{margin-top:2px;display:block}.actions-head{text-align:right}.actions-cell{justify-content:flex-end;align-items:center;gap:14px;display:flex}.row-tools{align-items:center;gap:16px;display:flex}.rows td.issues{min-width:180px}.board-tools{align-items:center;gap:10px;display:flex}.filter-row{flex-wrap:wrap;gap:8px;margin:4px 0 14px;display:flex}.filter-chip{border:1px solid var(--line);color:var(--dim);background:#fff;border-radius:999px;padding:5px 12px;font-size:13px}.filter-chip b{color:var(--text);margin-left:2px;font-weight:600}.filter-chip.active{border-color:var(--blue);color:var(--blue);background:#eef2ff}.filter-chip.active b{color:var(--blue)}.send-detail{border-top:1px solid var(--line);margin-top:16px;padding-top:10px}.send-detail summary{cursor:pointer;color:var(--dim);font-size:13px}.send-detail[open] summary{margin-bottom:8px}.history-head{justify-content:space-between;align-items:baseline;margin-bottom:14px;display:flex}.history-head h2{margin:0;font-size:18px}.year-row{gap:8px;margin-bottom:12px;display:flex}.history-list{flex-direction:column;display:flex}.history-item{color:inherit;border-bottom:1px solid #f1f2f4;justify-content:space-between;align-items:center;padding:14px 2px;text-decoration:none;display:flex}.history-item:last-child{border-bottom:none}.history-item:active{background:#fafbfc}.history-month b{font-size:15px;display:block}.history-month span{font-size:12px}.history-right{text-align:right;flex-direction:column;align-items:flex-end;gap:4px;display:flex}.history-net{font-size:16px}.empty-history{text-align:center;padding:40px 0}.history-entry{text-align:center;margin-top:14px;font-size:14px}@media (width<=720px){body{font-size:15px}.topbar{flex-direction:column;align-items:stretch;gap:10px;padding:12px 14px}.brand{gap:10px}.logo{width:30px;height:30px;font-size:15px}.brand-title{font-size:16px}.brand-sub{font-size:11px}.topbar-right{flex-wrap:wrap;gap:10px;width:100%}.month{flex:140px;justify-content:space-between}.month input{flex:1;min-width:0}.topbar-right .ghost{padding:8px 12px}.steps{-webkit-overflow-scrolling:touch;scrollbar-width:none;padding:10px 14px 0;overflow-x:auto}.steps::-webkit-scrollbar{display:none}.step{flex:none;padding:4px 8px;font-size:12px}main{gap:12px;padding:12px 14px 48px}.card{border-radius:8px;padding:14px 12px}.card-head{flex-direction:column;align-items:stretch;gap:10px}.card-head h2{font-size:15px}.summary{flex-direction:column;align-items:stretch;gap:12px;padding:14px 12px}.chips{grid-template-columns:repeat(4,1fr);gap:8px;display:grid}.chip{min-width:0;padding:8px 4px}.chip b{font-size:17px}.chip span{font-size:11px}.drop{margin-top:16px;padding:36px 18px}.drop h2{font-size:17px}.drop-actions{flex-direction:column;gap:10px}.drop-actions .primary{width:100%}.tbl th,.tbl td{padding:8px;font-size:13px}.table-scroll{-webkit-overflow-scrolling:touch;margin:0 -12px;padding:0 12px}.row-tools{flex-direction:column;align-items:stretch;gap:10px}.search{width:100%}.pager{flex-direction:column;align-items:stretch;gap:10px}.pager-controls{justify-content:space-between}.actions{flex-direction:column;align-items:stretch;gap:12px}.actions .primary{width:100%;padding:13px;font-size:15px}.board-tools{flex-wrap:wrap}.board-tools .primary{flex:100%}.filter-row{flex-wrap:nowrap;padding-bottom:2px;overflow-x:auto}.filter-chip{flex:none}.modal{border-radius:12px;padding:18px}.modal-actions{flex-direction:column-reverse}.modal-actions button{width:100%;padding:12px}.sent-facts{gap:20px}.sent-facts b{font-size:16px}}.recent-mobile{display:none}@media (width<=720px){.recent-desktop{display:none}.recent-mobile{display:block}.recent-item{text-align:left;background:0 0;border:none;border-bottom:1px solid #f1f2f4;border-radius:0;width:100%;padding:12px 4px;display:block}.recent-item:last-child{border-bottom:none}.recent-item:active{background:#fafbfc}.recent-main{justify-content:space-between;align-items:center;gap:10px;display:flex}.recent-main b{font-size:15px}.recent-sub{color:var(--dim);margin-top:4px;font-size:13px}.recent-time{color:var(--dim);margin-top:2px;font-size:12px}}.batch-mobile{display:none}@media (width<=720px){.batch-desktop{display:none}.batch-mobile{display:block}.batch-item{border-bottom:1px solid #f1f2f4;padding:6px 0 2px}.batch-item:last-child{border-bottom:none}.batch-item.selected{background:#f7f9ff}.batch-row{text-align:left;background:0 0;border:none;border-radius:0;width:100%;padding:8px 4px 4px;display:block}.batch-line1{justify-content:space-between;align-items:center;gap:10px;display:flex}.batch-line1 b{font-size:15px}.batch-line2{color:var(--dim);margin-top:5px;font-size:13px}.batch-line3{color:var(--dim);margin-top:2px;font-size:12px}.batch-actions{gap:18px;padding:4px 4px 10px;display:flex}.month-filter{flex-wrap:nowrap;overflow-x:auto}.month-filter button{flex:none}.card-head>div:first-child{min-width:0}}.records-mobile{display:none}@media (width<=720px){.records-desktop{display:none}.records-mobile{display:block}.record-item{border-bottom:1px solid #f1f2f4;padding:12px 2px}.record-item:last-child{border-bottom:none}.record-line1{justify-content:space-between;align-items:center;gap:10px;display:flex}.record-line1 b{font-size:15px}.record-line2{color:var(--dim);margin-top:4px;font-size:13px}.record-line3{color:var(--dim);margin-top:2px;font-size:12px}}.inline-board{background:#fafbfc;border-radius:8px;margin:6px 0 12px;padding:12px}.inline-board .board{border-top:none;margin-top:0;padding-top:0}.inline-board-row td{background:#fafbfc;padding:12px 10px}.inline-board-row .board{border-top:none;margin-top:0;padding-top:0}.field-picker{flex-wrap:wrap;gap:8px;display:flex}.field-chip{border:1px solid var(--line);color:var(--text);cursor:pointer;-webkit-user-select:none;user-select:none;background:#fff;border-radius:999px;align-items:center;gap:6px;padding:6px 12px;font-size:13px;display:inline-flex}.field-chip input{accent-color:var(--blue);cursor:pointer;width:15px;height:15px}.field-chip.on{border-color:var(--blue);color:var(--text);background:#eef2ff}.field-sample{background:#fafbfc;border-radius:8px;margin-top:14px;padding:12px 14px}.sample-label{color:var(--dim);font-size:12px}.sample-line{flex-wrap:wrap;gap:4px 18px;margin-top:8px;font-size:13px;display:flex}.sample-item{white-space:nowrap}.sample-item b{margin-left:2px;font-weight:600}.field-chip.off{color:#b0b4bb;background:#f1f2f4;border-color:#e2e5e9;text-decoration:line-through}.field-chip.off input{accent-color:#b0b4bb}
