:root{--g:#197b61;--ink:#17212b;--muted:#7b8791;--line:#e5eaed;--bg:#f5f7f8}*{box-sizing:border-box}body,html{max-width:100%;overflow-x:hidden}body{margin:0;background:var(--bg);color:var(--ink);font-family:Arial,PingFang SC,Microsoft YaHei,sans-serif}.shell{min-height:100vh;width:100%;max-width:100vw;overflow-x:clip;display:grid;grid-template-columns:240px minmax(0,1fr)}.shell>aside{position:fixed;inset:0 auto 0 0;width:240px;background:#fff;border-right:1px solid var(--line);padding:26px 18px;display:flex;flex-direction:column}.brand{display:flex;align-items:center;gap:11px;padding:0 8px 30px}.brand>i{width:42px;height:42px;display:grid;place-items:center;border-radius:12px;background:var(--g);color:#fff;font-style:normal;font-weight:800}.account b,.account small,.brand b,.brand small{display:block}.account small,.brand small{font-size:10px;color:#96a0aa;margin-top:4px}nav{display:grid;gap:7px}nav button{border:0;background:transparent;padding:13px;border-radius:10px;text-align:left;color:#65717c;cursor:pointer}nav button span{display:inline-block;width:30px;font-size:18px}nav button.on{background:#e9f5f0;color:var(--g);font-weight:700}.account{margin-top:auto;border-top:1px solid var(--line);padding:20px 7px 0;display:flex;gap:10px;align-items:center;font-size:12px}.account>i{width:34px;height:34px;display:grid;place-items:center;border-radius:9px;background:#eaf0f1;font-style:normal}.content{grid-column:2;min-width:0;max-width:100%;overflow-x:hidden;padding:0 34px 48px;width:100%;margin:0}.content>header{height:105px;display:flex;align-items:center;justify-content:space-between}.content>header h1{font-size:24px;margin:0 0 7px}.content>header p{font-size:12px;color:var(--muted);margin:0}.content>header>div:last-child{display:flex;gap:9px}.ghost,.primary{height:40px;padding:0 16px;border-radius:9px}.primary{border:0;background:var(--g);color:#fff;font-weight:700}.ghost{border:1px solid #dce2e5;color:#4e5963}.card,.ghost{background:#fff}.card{border:1px solid var(--line);border-radius:14px}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:15px}.stat{padding:19px;display:flex;gap:13px}.si{width:40px;height:40px;border-radius:10px;display:grid;place-items:center;background:#e8f5f0;color:var(--g);font-style:normal;font-weight:800}.si.s2{background:#fff3de;color:#b97718}.si.s3{background:#fce9e8;color:#b95852}.stat p{font-size:11px;color:var(--muted);margin:0 0 7px}.stat strong{font-size:26px}.stat strong small{font-size:11px;margin-left:5px}.stat span{display:block;color:#8c969e;font-size:10px;margin-top:6px}.main-grid{display:grid;grid-template-columns:1.55fr .7fr;gap:15px;margin-top:15px}.clock,.latest,.projects,.quick,.record-page,.rules{padding:21px}.title{display:flex;justify-content:space-between}.rules h2,.step h2,.title h2{font-size:15px;margin:0 0 5px}.step p,.title p{font-size:10px;color:var(--muted);margin:0}.title button{border:0;background:none;color:var(--g);font-size:10px}.project{display:flex;align-items:center;gap:11px;padding:11px 0;border-top:1px solid #f0f2f3}.projects>.title{margin-bottom:12px}.badge{width:34px;height:34px;display:grid;place-items:center;border-radius:9px;background:#e8f4ef;color:#24765e;font-style:normal;font-weight:700}.badge.b1{background:#eaf0fa;color:#4d72a4}.badge.b2{background:#fff2dc;color:#a97328}.badge.b3{background:#f4eafa;color:#865aa0}.badge.b4{background:#fbe9e9;color:#a85050}.project>div{flex:1 1}.project p{display:flex;justify-content:space-between;font-size:11px;margin:0 0 7px}.project p span{color:#8c969e}.project em{display:block;height:5px;background:#edf1f2;border-radius:8px;overflow:hidden}.project em i{display:block;height:100%;background:#41977b}.project>strong{font-size:11px;width:36px;text-align:right}.quick{display:flex;flex-direction:column}.quick-box{margin-top:17px;padding:20px;text-align:center;background:#f0f8f5;border:1px dashed #b6d4c9;border-radius:12px}.quick-box>i{display:grid;place-items:center;width:50px;height:50px;border-radius:50%;background:#fff;margin:auto auto 9px;font-size:23px;font-style:normal;color:var(--g)}.quick-box b{display:block;font-size:13px}.quick-box p{font-size:10px;color:var(--muted)}.quick-box button{border:0;background:var(--g);color:#fff;border-radius:8px;padding:9px 14px;font-size:10px}.loc{margin-top:auto;padding-top:15px;color:var(--g);display:flex;gap:9px}.loc span b,.loc span small{display:block;font-size:10px}.loc span small{color:#86918d;margin-top:4px}.latest{margin-top:15px}.table{overflow:auto}table{width:100%;border-collapse:collapse;margin-top:13px;white-space:nowrap;font-size:11px}th{text-align:left;color:#8a949c;font-size:9px;font-weight:500;padding:9px;border-bottom:1px solid var(--line)}td{padding:10px 9px;border-bottom:1px solid #f0f2f3}.person{display:flex;gap:8px;align-items:center}.person>i{width:29px;height:29px;border-radius:50%;background:#e9f3ef;color:#337961;display:grid;place-items:center;font-style:normal;font-weight:700}.person span b,.person span small{display:block}.person small{font-size:8px;color:#8d969d;margin-top:3px}.status{padding:5px 8px;border-radius:20px;background:#e8f5ef;color:#307b61;font-size:9px}.status.迟到{background:#fff2dd;color:#aa711f}.status.缺卡{background:#fde9e8;color:#b5524c}.status.待退卡{background:#eaf1fb;color:#4c70a1}.status.未打卡{background:#fce7e7;color:#a63c3c}.admin-assisted-badge{color:#7b5b19}.admin-assisted-badge,.group-punch-badge{display:block;margin-top:6px;font-size:8px;white-space:normal}.group-punch-badge{color:#17694f}.clock-grid{display:grid;grid-template-columns:minmax(0,700px) 290px;gap:16px;align-items:start}.clock{padding:27px}.step{display:flex;gap:11px;margin-bottom:13px}.step>i{width:26px;height:26px;border-radius:8px;display:grid;place-items:center;background:var(--g);color:#fff;font-style:normal;font-size:11px}.clock>select{width:100%;height:47px;border:1px solid #dce2e5;background:#fff;border-radius:9px;padding:0 12px;margin-bottom:25px}.photo{width:100%;height:250px;border:1.5px dashed #abcabd;border-radius:12px;background:#f0f8f5 50%/cover;display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--g)}.photo span{font-size:35px}.photo strong{font-size:14px;margin:6px}.photo small{color:#7f8d87}.photo>b{background:#ffffffdd;padding:9px 13px;border-radius:8px}.geo{display:flex;gap:10px;margin:14px 0;background:#eef8f4;color:var(--g);padding:12px;border-radius:9px}.geo div b,.geo div small{display:block;font-size:10px}.geo div small{color:#789087;margin-top:4px}.punch{display:grid;grid-template-columns:1fr 1fr;gap:9px}.punch button{height:47px;border:0;border-radius:9px;background:var(--g);color:#fff;font-weight:700}.punch button+button{background:#fff;color:var(--g);border:1px solid var(--g)}.msg{padding:11px;background:#e8f5ef;color:var(--g);border-radius:8px;font-size:11px}.rules dl{margin:18px 0}.rules dl div{display:flex;justify-content:space-between;padding:11px 0;border-bottom:1px solid var(--line);font-size:11px}.rules h3{font-size:11px;margin:20px 0 7px}.rules p{font-size:10px;line-height:1.7;color:var(--muted)}.filters{display:grid;grid-template-columns:minmax(210px,1fr) minmax(170px,.65fr) 145px minmax(165px,.6fr) auto auto;gap:9px;min-width:0;width:100%}.filters input,.filters select{width:100%;min-width:0;height:40px;border:1px solid #dce2e5;background:#fff;border-radius:8px;padding:0 11px}.count{font-size:10px;color:var(--muted);margin:18px 0 0}.record-summary{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:9px;margin-top:14px}.record-page{min-width:0;max-width:100%;overflow:hidden}.record-page .table{width:100%;max-width:100%;-webkit-overflow-scrolling:touch}.record-summary article{display:grid;gap:5px;padding:12px;border:1px solid #dfe8e4;border-radius:10px;background:#f8fbfa}.record-summary small{color:var(--muted);font-size:9px}.record-summary b{color:var(--g);font-size:20px}.record-summary article.active{border-color:#c58b8b;background:#fff5f5}.record-summary article.active b{color:#a63c3c}.assist-message{margin:12px 0 0;padding:10px 12px;border-radius:8px;background:#eef8f4;color:#276c55;font-size:10px}.assist-punch-open{min-height:40px;padding:0 13px;border-radius:8px;white-space:nowrap}.attendance-project-cell{display:grid;gap:7px;min-width:190px}.attendance-project-cell button{width:fit-content;border:1px solid #b9d7cc;border-radius:7px;background:#eff9f5;color:#08785f;padding:5px 9px;font-weight:700}.assist-row-actions{display:flex;flex-wrap:wrap;gap:6px;min-width:135px}.assist-row-actions button{padding:7px 9px;border:1px solid #b9d8cc;border-radius:7px;background:#eff8f4;color:#146f55;font-size:9px;font-weight:700}.assist-row-actions button.attendance-more-button{border-color:#d6dfdb;background:#fff;color:#66736d}.attendance-record-actions{flex:1 0 100%;display:grid;gap:6px;padding:7px;border:1px solid #d9e4df;border-radius:8px;background:#f8fbfa}.attendance-record-actions small{color:#9b5c5c;font-size:8px;line-height:1.4;white-space:normal}.assist-row-actions button.edit-attendance-time-button{border-color:#aad2c3;background:#eaf8f2;color:#0b7457}.assist-row-actions button.delete-attendance-button{border-color:#e5bcbc;background:#fff4f4;color:#a53333}.assist-row-actions span,.no-proof{color:#8b9591;font-size:9px;white-space:normal}.empty-records{padding:28px 12px;text-align:center;color:#7d8984}.proof-actions{display:flex;flex-wrap:wrap;gap:6px;min-width:140px}.teams{grid-template-columns:1fr 1fr}.project-management,.teams{display:grid;gap:15px}.project-alert-center{padding:20px;border-color:#d8e6e1}.project-alert-center.has-alerts{border-color:#e7c47a;background:#fffaf0}.project-alert-center>header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin:0 0 14px}.project-alert-center>header h2{margin:0 0 5px;font-size:17px}.project-alert-center>header p{margin:0;color:var(--muted);font-size:10px}.project-alert-center>header>strong{min-width:72px;text-align:center;color:#a46612;font-size:26px}.project-alert-center>header>strong small{display:block;color:var(--muted);font-size:8px}.project-alert-empty{padding:14px;border-radius:9px;background:#edf8f3;color:#1d7358;font-size:11px}.project-alert-list{display:grid;gap:9px}.project-alert-list>article{display:grid;grid-template-columns:minmax(170px,.7fr) minmax(280px,1.2fr) auto;gap:14px;align-items:center;padding:13px;border:1px solid #ecd59c;border-radius:10px;background:#fff}.project-alert-person{display:grid;gap:4px}.project-alert-person b{font-size:12px}.project-alert-person small{color:var(--muted);font-size:9px}.project-alert-route{display:flex;align-items:center;gap:9px;min-width:0;font-size:10px}.project-alert-route b,.project-alert-route span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.project-alert-route span{color:#64736d}.project-alert-route i{color:#b4771d;font-style:normal}.project-alert-route b{color:#9d5910}.project-alert-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:7px}.project-alert-actions button{min-height:36px;padding:0 10px;border-radius:8px;font-size:9px}.project-action-message{margin:0 0 12px;padding:10px 12px;border-radius:8px;background:#edf8f3;color:#236c56;font-size:10px}.read-only-note{display:block;margin-top:11px;color:#7b827f}.team{padding:21px;display:grid;grid-template-columns:auto 1fr auto;gap:12px;align-items:center}.team h2{font-size:14px;margin:0 0 5px}.team p{font-size:10px;color:var(--muted);margin:0}.team>strong{font-size:24px;text-align:center}.team>strong small{display:block;font-size:8px;color:var(--muted)}.team footer{grid-column:1/-1;border-top:1px solid var(--line);padding-top:13px;display:flex;gap:7px}.team footer span{background:#f1f5f5;border-radius:6px;padding:6px 8px;font-size:9px}.team-actions{grid-column:1/-1;display:flex;flex-wrap:wrap;gap:8px}.team-actions button{min-height:36px;padding:0 11px;border:1px solid #cddcd6;border-radius:8px;background:#fff;color:var(--g);font-size:10px;font-weight:700}.team-actions button.team-add{border-color:#177b60;background:#177b60;color:#fff}.team-members{grid-column:1/-1;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px;padding-top:4px}.team-members-heading{grid-column:1/-1;display:flex;align-items:center;justify-content:space-between;margin:5px 0 0;padding:7px 2px 3px;color:#1f5f4e;font-size:10px}.team-members-heading.assigned-heading{margin-top:8px;border-top:1px solid #dfe9e5;color:#5a6b64}.team-members-heading b{min-width:24px;padding:3px 7px;border-radius:999px;background:#dff2eb;text-align:center}.team-members>span{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:9px 10px;border-radius:8px;background:#f2f7f5;font-size:10px}.team-members>span.team-member-present{border:1px solid #a9d9c9;background:#e9f8f2}.team-member-present>i{flex:0 0 auto;padding:4px 7px;border-radius:999px;background:#177b60;color:#fff;font-size:8px;font-style:normal}.team-member-name{display:grid;gap:3px;min-width:0}.team-members>span>button{flex:0 0 auto;min-height:31px;padding:0 9px;border:1px solid #b9d8cf;border-radius:7px;background:#fff;color:var(--g);font-size:9px;font-weight:700}.team-members>span>button:disabled{opacity:.45}.team-members p,.team-members small{margin:0;color:var(--muted);font-size:8px}.team-members p.team-members-empty{grid-column:1/-1;padding:9px 10px;border-radius:8px;background:#f7f9f8}.pay-controls{padding:16px;display:grid;grid-template-columns:170px minmax(220px,1fr) 130px 150px auto;gap:11px;align-items:end}.pay-controls label{display:block;font-size:9px;color:var(--muted);margin:0 0 6px}.pay-controls input,.pay-controls select{width:100%;height:39px;border:1px solid #dce2e5;border-radius:8px;background:#fff;padding:0 10px}.pay-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:15px;margin:15px 0}.pay-stats article{padding:18px}.pay-stats p{font-size:10px;color:var(--muted);margin:0 0 9px}.pay-stats strong{display:block;font-size:22px}.pay-stats span{display:block;margin-top:7px;color:#8a959d;font-size:9px}.payroll-table{padding:21px}.pay-head{display:flex;align-items:center;justify-content:space-between}.pay-head h2{font-size:15px;margin:0 0 5px}.pay-head p{font-size:10px;color:var(--muted);margin:0}.pay-head>div:last-child{display:flex;gap:8px}.payroll-table table{min-width:1050px}.money-plus{color:#21785f}.money-minus,.money-warn{color:#b85950}.net{font-size:12px}.pay-status{display:inline-block;padding:5px 8px;border-radius:20px;background:#fff2dd;color:#a97122;font-size:9px}.pay-status.done{background:#e8f5ef;color:#307b61}.pay-foot{display:flex;justify-content:space-between;padding-top:15px;margin-top:5px;border-top:1px solid var(--line);font-size:10px;color:var(--muted)}.pay-foot strong{font-size:13px;color:var(--ink)}@media (max-width:1000px){.pay-stats,.stats{grid-template-columns:1fr 1fr}.clock-grid,.main-grid{grid-template-columns:1fr}.rules{display:none}.pay-controls{grid-template-columns:1fr 1fr 1fr}}@media (max-width:720px){.shell{display:block}.shell>aside{z-index:5;inset:auto 0 0;width:auto;height:136px;padding:6px 8px max(6px,env(safe-area-inset-bottom));overflow:hidden;box-shadow:0 -8px 24px rgba(23,33,43,.1)}.account,.brand{display:none}nav{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));grid-template-rows:repeat(2,60px);gap:3px;width:100%;height:100%;overflow:visible}nav button{min-width:0;min-height:58px;text-align:center;font-size:9px;padding:5px 3px;line-height:1.15}nav button span{display:block;margin:auto}.content{padding:0 13px calc(156px + env(safe-area-inset-bottom))}.content>header{height:auto;min-height:83px;padding:14px 0;gap:10px}.content>header>div:first-child{min-width:0}.content>header h1{font-size:20px;line-height:1.25;overflow-wrap:anywhere}.content>header .primary,.content>header>div:last-child,.ghost{display:none}.pay-stats,.stat,.stats{gap:8px}.stat{padding:13px}.si{width:32px;height:32px}.stat strong{font-size:21px}.clock,.latest,.payroll-table,.projects,.quick,.record-page{padding:15px}.filters{grid-template-columns:minmax(0,1fr)}.filters>*{grid-column:1;width:100%;min-width:0}.filters input:first-child{grid-column:1/-1}.filters .record-clear{display:block}.record-summary{grid-template-columns:repeat(2,minmax(0,1fr));gap:6px}.record-summary article{padding:10px 8px}.record-summary b{font-size:18px}.assist-punch-modal .ghost{display:block}.teams{grid-template-columns:1fr}.photo{height:220px}.punch{grid-template-columns:1fr}.pay-controls{grid-template-columns:1fr 1fr}.pay-controls>div:nth-child(2){grid-column:1/-1;grid-row:1}.pay-head{align-items:flex-start}.pay-head .ghost{display:none}.pay-foot{display:grid;gap:10px}.pay-stats article{padding:13px}.pay-stats strong{font-size:18px}}.alias-message{margin:10px 0;padding:9px 12px;border-radius:8px;background:#e8f5ef;color:#176d55;font-size:12px}.alias-value{border:1px solid #cfe1da;border-radius:8px;padding:7px 10px;background:#f1f8f5;color:#14795e;font-weight:700;white-space:nowrap}.alias-value:disabled{cursor:default;opacity:1}.alias-editor{display:grid;min-width:210px;gap:6px}.alias-editor input{width:100%;min-width:0;height:36px;padding:0 9px;border:1px solid #b9cec6;border-radius:7px}.alias-editor button{min-height:34px;border:0;border-radius:7px;background:#197b61;color:#fff;font-weight:700}.alias-editor button.ghost{border:1px solid #d9e1de;background:#fff;color:#596862}.employee-edit-backdrop{position:fixed;z-index:1000;inset:0;display:grid;place-items:center;padding:20px;background:rgba(8,27,22,.58)}.employee-edit-modal{width:min(720px,100%);max-height:92vh;overflow:auto;padding:22px;border-radius:16px;background:#fff;box-shadow:0 24px 70px rgba(0,0,0,.25)}.employee-edit-modal>header{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:18px}.employee-edit-modal h2,.employee-edit-modal p{margin:0}.employee-edit-modal header p{margin-top:4px;color:#7a8781;font-size:12px}.employee-edit-modal header button{border:0;background:transparent;font-size:26px}.employee-edit-modal form{display:grid;grid-template-columns:1fr 1fr;gap:13px}.employee-edit-modal label{display:grid;gap:6px;color:#53635c;font-size:12px}.employee-edit-modal input,.employee-edit-modal select{width:100%;height:42px;padding:0 10px;border:1px solid #d5dfdb;border-radius:8px;background:#fff}.employee-edit-modal textarea{width:100%;min-height:84px;box-sizing:border-box;padding:10px;border:1px solid #d5dfdb;border-radius:8px;background:#fff;font:inherit;resize:vertical}.employee-edit-modal form>footer,.employee-edit-modal form>p,.employee-edit-modal form>small{grid-column:1/-1}.employee-edit-modal form>small{color:#78857f;line-height:1.5}.employee-edit-modal .attendance-default-project-option{grid-column:1/-1;display:flex;align-items:flex-start;gap:10px;padding:11px;border:1px solid #cfe0d9;border-radius:10px;background:#f3faf7;cursor:pointer}.attendance-default-project-option input{width:18px;height:18px;margin:1px 0 0;accent-color:#0b7a55}.attendance-default-project-option span{display:grid;gap:3px}.attendance-default-project-option b{color:#204c3e;font-size:12px}.attendance-default-project-option small{color:#6c7c75;font-size:10px}.employee-edit-message{padding:10px;border-radius:8px;background:#fff2dd;color:#8a5a16}.employee-edit-modal footer{display:flex;justify-content:flex-end;gap:10px}.employee-edit-modal footer button{min-height:42px;padding:0 16px;border-radius:8px}.employee-edit-modal footer button.danger{border:0;background:#a93636;color:#fff;font-weight:800}.attendance-delete-modal{width:min(610px,100%)}.attendance-delete-summary{grid-column:1/-1;display:grid;grid-template-columns:1fr 110px 110px;gap:9px}.attendance-delete-summary>span{display:grid;gap:5px;padding:12px;border:1px solid #e3e9e6;border-radius:9px;background:#f8faf9}.attendance-delete-summary small{color:#7b8882;font-size:10px}.attendance-delete-summary b{color:#283832;font-size:12px}.attendance-delete-warning{padding:12px;border:1px solid #ebc2c2;border-radius:9px;background:#fff2f2;color:#923232;line-height:1.6}.attendance-time-modal{width:min(640px,100%)}.attendance-time-reason,.attendance-time-summary{grid-column:1/-1}.attendance-time-summary{display:grid;gap:5px;padding:12px;border:1px solid #d9e6e1;border-radius:9px;background:#f3faf7}.attendance-time-summary small{color:#718078;font-size:10px}.attendance-time-summary b{color:#244b3e;font-size:12px}.batch-employee-picker{grid-column:1/-1;display:grid;gap:9px}.batch-picker-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;color:#53635c;font-size:12px}.batch-picker-heading b{color:#087f65}.batch-select-tools{display:flex;flex-wrap:wrap;gap:8px}.batch-select-tools button{min-height:34px;padding:0 11px;border:1px solid #b9d8cf;border-radius:8px;background:#f1faf7;color:#087f65}.batch-employee-list{display:grid;grid-template-columns:1fr 1fr;gap:8px;max-height:42vh;padding:8px;overflow-y:auto;overscroll-behavior:contain;border:1px solid #d5dfdb;border-radius:10px;background:#f8faf9}.batch-employee-option{display:flex!important;grid-template-columns:none!important;grid-auto-flow:column;justify-content:start;align-items:center;gap:9px!important;min-height:54px;padding:8px 10px;border:1px solid #dce6e2;border-radius:9px;background:#fff;cursor:pointer}.batch-employee-option input{flex:0 0 auto;width:18px;height:18px;margin:0;accent-color:#087f65}.batch-employee-option span{display:grid;gap:3px;min-width:0}.batch-employee-option b{color:#1e2d27;font-size:13px}.batch-employee-option b,.batch-employee-option small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.batch-employee-option small{color:#78857f;font-size:11px}.batch-employee-option.already-assigned{border-color:#b8ddd2;background:#edf8f4;cursor:default}@media (max-width:640px){.employee-edit-backdrop{align-items:end;padding:0}.employee-edit-modal{max-height:94vh;border-radius:18px 18px 0 0;padding:17px}.employee-edit-modal form{grid-template-columns:1fr}.attendance-delete-summary{grid-template-columns:1fr 1fr}.attendance-delete-summary>span:first-child{grid-column:1/-1}.batch-employee-list{grid-template-columns:1fr;max-height:48vh}.project-assignment-modal .ghost,.project-member-move-modal .ghost{display:inline-flex}.project-alert-center{padding:15px}.project-alert-center>header{align-items:center}.project-alert-list>article{grid-template-columns:1fr;gap:9px}.project-alert-route{display:grid;grid-template-columns:1fr auto 1fr}.project-alert-route b,.project-alert-route span{white-space:normal}.project-alert-actions{justify-content:stretch}.project-alert-actions button{flex:1 1 140px}.team-members{grid-template-columns:1fr}}.employee-row-actions{display:grid;gap:6px}.employee-row-actions .resign{border-color:#e5b8b8;color:#a63c3c}.employee-row-actions .resume{border-color:#9ccfbd;background:#edf8f4;color:#08785f}.employee-row-actions .employee-more{border-color:#d3ddd9;background:#fff;color:#66736d}.employee-danger-zone{display:grid;gap:6px;padding:7px;border:1px solid #efd0d0;border-radius:8px;background:#fff7f7}.employee-danger-zone small{color:#9a5c5c;font-size:9px;line-height:1.4;white-space:normal}.employee-row-actions .delete-account{border-color:#dca9a9;background:#fff0f0;color:#a42f2f}.possible-duplicate-badge{width:fit-content;margin:4px 0 0!important;padding:3px 6px;border-radius:999px;background:#fff0d4;color:#9a6214!important;font-weight:700}.employee-account-delete-modal{width:min(680px,100%)}.employee-delete-identity{grid-column:1/-1;display:grid;grid-template-columns:1fr 1fr;gap:8px}.employee-delete-identity>span{display:grid;gap:5px;min-width:0;padding:11px;border:1px solid #e0e7e4;border-radius:9px;background:#f8faf9}.employee-delete-identity small{color:#76837d;font-size:10px}.employee-delete-identity b,.employee-delete-identity code{overflow-wrap:anywhere;color:#283832;font-size:12px}.employee-delete-warning{grid-column:1/-1;padding:12px;border:1px solid #e9bcbc;border-radius:9px;background:#fff1f1;color:#922f2f;line-height:1.6}.pay-status.resigned{background:#f6e8e8;color:#9e3838}.pay-status.resting{background:#fff0cf;color:#97620d}.resigned-expiry{display:block;margin-top:6px;color:#8a6464;font-size:9px;line-height:1.4}.secondary-permission-banner{margin:0 0 14px;padding:11px 14px;border:1px solid #efcf8e;border-radius:10px;background:#fff6dc;color:#79551a;font-size:11px;line-height:1.5}.inactivity-alert-bar{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 14px;padding:9px 11px;border:1px solid #d9e4e0;border-radius:11px;background:#f8fbfa}.inactivity-alert-bar.has-alerts{border-color:#e6b76f;background:#fff8e9}.inactivity-summary{display:inline-flex;align-items:center;gap:7px;min-height:34px;padding:0 11px;border:1px solid #e2ad5d;border-radius:999px;background:#fff;color:#805313;font-size:10px}.inactivity-summary span{font-size:15px}.inactivity-summary strong{min-width:23px;padding:3px 6px;border-radius:999px;background:#b65335;color:#fff;text-align:center}.inactivity-alert-pills{display:flex;flex:1 1 320px;gap:6px;overflow-x:auto;-webkit-overflow-scrolling:touch}.inactivity-alert-pills button{flex:0 0 auto;min-height:31px;padding:0 10px;border:1px solid #e6c58e;border-radius:999px;background:#fffdf7;color:#7c5317;font-size:9px;font-weight:700}.inactivity-alert-bar>small{color:#6f7e78;font-size:9px}.inactivity-alert-bar>p{flex:1 0 100%;margin:0;color:#236c56;font-size:10px}.inactivity-review-modal{width:min(560px,100%)}.inactivity-review-person{display:grid;gap:7px;padding:15px;border:1px solid #ead4a7;border-radius:10px;background:#fff9ed}.inactivity-review-person b{font-size:16px}.inactivity-review-person small,.inactivity-review-person span{color:#66736d}.inactivity-review-actions{display:flex;flex-wrap:wrap;gap:9px;margin-top:15px}.inactivity-review-actions button{flex:1 1 150px;min-height:42px;border-radius:9px;font-weight:700}.inactivity-review-actions .rest-lock{border:1px solid #d49a3c;background:#fff3d7;color:#87570d}button:disabled,input:disabled,select:disabled{cursor:not-allowed;opacity:.58}@media (max-width:720px){.main-grid>*{min-width:0}.table{display:block!important;width:100%!important;max-width:100%!important;overflow-x:auto!important;-webkit-overflow-scrolling:touch}.employee-delete-identity{grid-template-columns:1fr}}.advance-admin{margin-top:15px;padding:21px}.advance-admin>.pay-head>strong{font-size:11px;color:#9a681f}.advance-status{display:inline-block;padding:5px 8px;border-radius:20px;background:#fff2dd;color:#a97122;font-size:9px}.advance-status.approved{background:#e8f5ef;color:#307b61}.advance-status.rejected{background:#fde9e8;color:#b5524c}.reviewed{color:#849089;font-size:9px}@media (max-width:720px){.advance-admin{padding:15px}.advance-admin>.pay-head{display:grid;gap:8px}.advance-admin .table{display:block!important;width:100%!important;max-width:100%!important;overflow-x:auto!important}.advance-admin table{min-width:820px}}.proof-link{border:1px solid #b8d5ca;background:#eef8f4;color:#197b61;border-radius:7px;padding:7px 9px;font-size:9px;white-space:nowrap}.proof-backdrop{position:fixed;z-index:50;inset:0;display:grid;place-items:center;padding:18px;background:#10251dcc;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}.proof-modal{width:min(100%,680px);max-height:92vh;overflow:auto;background:#fff;border-radius:18px;padding:20px;box-shadow:0 28px 80px #0004}.proof-modal>header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:15px}.proof-modal h2{margin:0 0 5px;font-size:18px}.proof-modal header p{margin:0;color:#7b8791;font-size:9px}.proof-modal header>button{width:34px;height:34px;border:0;border-radius:50%;background:#eef2f1;color:#50615b;font-size:22px}.proof-photo{position:relative;min-height:180px;max-height:65vh;overflow:hidden;border-radius:13px;background:linear-gradient(145deg,#cbd8d3,#77988c);display:grid;place-items:center}.proof-photo>img{width:100%;height:auto;max-height:65vh;object-fit:contain;display:block;background:#102019}.proof-person{width:110px;height:110px;border:5px solid #ffffff99;border-radius:50%;display:grid;place-items:center;background:#eaf3ef;color:#2a765e;font-size:52px;font-weight:800}.proof-watermark{position:absolute;inset:auto 0 0;display:grid;gap:5px;padding:15px 18px;background:#081a15c7;color:#fff}.proof-watermark b{font-size:14px}.proof-watermark span{font-size:10px}.proof-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:14px}.proof-grid>div{padding:11px;border-radius:9px;background:#f4f7f6}.proof-grid b,.proof-grid span{display:block}.proof-grid span{color:#7c8984;font-size:8px}.proof-grid b{margin-top:5px;font-size:11px}.proof-note{margin-top:12px;padding:11px;border-radius:9px;background:#e9f6f1;color:#27755d;font-size:9px}.proof-modal footer{display:flex;justify-content:flex-end;gap:8px;margin-top:15px}.proof-modal footer button{height:40px;padding:0 15px;border:1px solid #dce3e0;border-radius:8px;background:#fff}.proof-modal footer .primary{border:0;background:#b4771f;color:#fff}@media (max-width:720px){.proof-backdrop{align-items:end;padding:0}.proof-modal{width:100%;max-height:94vh;border-radius:18px 18px 0 0;padding:16px}.proof-photo{height:260px}.proof-grid,.proof-modal footer{grid-template-columns:1fr 1fr}.proof-modal footer{display:grid}.proof-modal footer button{width:100%}}.employee-attendance-approvals .attendance-request-summary{display:grid;gap:3px;min-width:0}.attendance-review-actions{display:flex;gap:8px;flex:0 0 auto}.attendance-review-actions button.reject,.attendance-review-dialog-actions button.reject{background:#9d3c3c}.attendance-review-message{margin:0 0 10px;padding:9px 11px;border-radius:8px;background:#e9f7f1!important;color:#126b50!important;font-weight:700}.attendance-review-dialog{position:fixed;inset:0;z-index:80;display:grid;place-items:center;padding:18px;background:#08251db8}.attendance-review-card{width:min(520px,100%);box-sizing:border-box;padding:22px;border-radius:16px;background:#fff;box-shadow:0 24px 70px #001c1460}.attendance-review-card h3{margin:0 0 8px}.attendance-review-card p{margin:0 0 16px;color:#42564e}.attendance-review-time-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.attendance-rejection-reason,.attendance-review-time-grid label{display:grid;gap:7px;font-weight:700;color:#33483f}.attendance-rejection-reason textarea,.attendance-review-time-grid input{min-height:44px;box-sizing:border-box;border:1px solid #cad8d2;border-radius:9px;padding:10px;font:inherit;background:#fff}.attendance-rejection-reason textarea{min-height:96px;resize:vertical}.attendance-review-dialog-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:18px}.attendance-review-dialog-actions button{min-height:44px;border:0;border-radius:9px;padding:10px 16px;background:#0b7a55;color:#fff;font-weight:700}.attendance-review-dialog-actions button.secondary{border:1px solid #cbd8d2;background:#fff;color:#33483f}@media(max-width:640px){.attendance-review-actions,.attendance-review-dialog-actions{width:100%}.attendance-review-actions button,.attendance-review-dialog-actions button{flex:1 1;min-height:44px}.attendance-review-time-grid{grid-template-columns:1fr}.attendance-review-card{padding:18px}}.photo{background-size:contain;background-repeat:no-repeat}.photo.processing{cursor:wait}.photo:disabled{opacity:.75}.punch button:disabled{cursor:not-allowed;opacity:.45}.geo.verified{border:1px solid #cbe4da}.msg.notice{background:#fff3de;color:#a76e1e}.pay-controls.dual{grid-template-columns:170px minmax(220px,1fr) 220px auto}.currency-stats .cny{border-top:3px solid #c94b42}.currency-stats .myr{border-top:3px solid #2f7f69}.dual-table{min-width:1420px!important}.worker-group{display:inline-block;padding:5px 8px;border-radius:20px;font-size:9px;font-weight:700}.worker-group.cny{color:#a7433d;background:#fceae8}.worker-group.myr{color:#2d735f;background:#e7f4ef}.rate-input{display:flex;align-items:center;width:104px;height:32px;overflow:hidden;border:1px solid #dce2e5;border-radius:7px;background:#fff}.rate-input span{padding-left:8px;color:#69757f;font-size:10px}.rate-input input{width:72px;height:30px;border:0;outline:0;padding:0 5px;font-weight:700}.effective-date{height:32px;border:1px solid #dce2e5;border-radius:7px;padding:0 7px;background:#fff;font-size:10px}.history-note{margin-top:14px;padding:11px 13px;border-radius:8px;background:#eef5f8;color:#5f727d;font-size:10px}@media (max-width:720px){.pay-controls.dual{grid-template-columns:1fr 1fr}.pay-controls.dual>div:nth-child(2){grid-column:auto;grid-row:auto}.pay-controls.dual>div:nth-child(3){grid-column:1/-1}}nav button b,nav button small{display:inline}.registration-approval{display:grid;grid-template-columns:minmax(220px,1fr) minmax(360px,1.4fr) auto;gap:22px;align-items:center;padding:22px;margin-bottom:15px;border:1px solid #f0c36b;background:linear-gradient(135deg,#fffaf0,#ffffff 62%)}.registration-approval h2{margin:8px 0 4px}.registration-approval dt,.registration-approval p{color:#687588}.approval-badge{display:inline-flex;padding:4px 9px;border-radius:999px;background:#fff0c7;color:#9a6100;font-size:12px;font-weight:700}.registration-approval dl{display:grid;grid-template-columns:repeat(3,minmax(110px,1fr));gap:12px;margin:0}.registration-approval dt{font-size:11px}.registration-approval dd{margin:4px 0 0;font-weight:700}.registration-actions{display:flex;gap:8px}.registration-reviewed{margin-bottom:15px;padding:12px 15px;border-radius:10px;background:#eaf8ef;color:#23733d;font-weight:700}@media (max-width:900px){.registration-approval,.registration-approval dl{grid-template-columns:1fr}}nav button small{margin-left:5px;font-size:9px;font-weight:500;opacity:.72}.employee-stats{display:grid;min-width:0;grid-template-columns:repeat(5,minmax(0,1fr));gap:15px;margin-bottom:15px}.employee-stats article{min-width:0;padding:18px}.employee-stats p{margin:0 0 8px;color:var(--muted);font-size:10px}.employee-stats strong{display:block;font-size:24px}.employee-stats span{display:block;margin-top:6px;color:#89949c;font-size:9px}.employee-page{width:100%;max-width:100%;min-width:0;overflow:hidden;padding:20px}.employee-page .employee-table{display:block;width:100%;max-width:100%;overflow-x:auto;overscroll-behavior-inline:contain}.employee-toolbar{display:grid;min-width:0;grid-template-columns:minmax(250px,1fr) 220px auto auto;gap:9px}.employee-toolbar input,.employee-toolbar select{height:40px;padding:0 11px;border:1px solid #dce2e5;border-radius:8px;background:#fff}.privacy-alert{margin:15px 0 4px;padding:11px 13px;border-radius:8px;background:#fff5df;color:#8a681f;font-size:10px;line-height:1.5}.employee-table table{min-width:2050px}.employee-name-reset{display:inline-flex;align-items:center;min-height:32px;margin-top:7px;padding:4px 9px;border:1px solid #a9d0c2;border-radius:7px;background:#f1faf6;color:#086b51;font-size:12px;font-weight:700;cursor:pointer}.employee-name-reset:focus-visible{outline:2px solid #086b51;outline-offset:2px}.ot-rate-value,.wage-value{display:inline-block;min-width:92px;padding:6px 8px;border-radius:7px;font-size:10px;font-weight:700}.wage-value{background:#eef5f8;color:#3f6575}.ot-rate-value{background:#fff2dd;color:#9b681d}.selfie{width:54px;height:54px;display:grid;place-items:center;align-content:center;overflow:hidden;border:1px dashed #a9c9bd;border-radius:50%;background:#edf6f2 50%/cover no-repeat;color:var(--g);cursor:pointer}.selfie input{display:none}.selfie small,.selfie span{display:block;line-height:1;text-align:center}.selfie span{font-size:17px}.selfie small{margin-top:4px;font-size:7px}.selfie.has-selfie{border-style:solid;box-shadow:0 0 0 3px #edf6f2}.admin-selfie{cursor:default}.admin-selfie a,.admin-selfie img{width:100%;height:100%;display:block;border-radius:inherit}.admin-selfie img{object-fit:cover}.employee-table code{padding:5px 7px;border-radius:5px;background:#f0f3f4;font-family:ui-monospace,monospace;font-size:10px}.row-action{padding:5px 8px;border:0;background:transparent;color:var(--g);font-size:10px;cursor:pointer}.employee-foot{display:flex;justify-content:space-between;align-items:center;padding-top:14px;color:var(--muted);font-size:10px}.employee-foot button{border:0;background:transparent;color:var(--g);font-size:10px}@media (max-width:1000px){.employee-stats,.employee-toolbar{grid-template-columns:1fr 1fr}}@media (max-width:720px){nav{grid-template-columns:repeat(6,1fr)}nav button b,nav button small{display:block;margin:0;font-size:8px}nav button small{font-size:7px}.employee-stats{gap:8px}.employee-stats article{padding:13px}.employee-page{padding:14px}.employee-toolbar{grid-template-columns:1fr}.employee-toolbar .ghost{display:block}}.punch-label{margin:15px 0 8px;font-size:11px}.overtime-label{color:#9a6619}.overtime-punch button:first-child{background:#b4771f}.overtime-punch button:last-child{border-color:#b4771f;color:#9a6619}.ot-help{margin:9px 0 0;color:#7c8790;font-size:9px;line-height:1.5}.ot-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:15px;margin-bottom:15px}.ot-stats article{padding:18px}.ot-stats p{margin:0 0 8px;color:var(--muted);font-size:10px}.ot-stats strong{display:block;font-size:23px}.ot-stats span{display:block;margin-top:6px;color:#8a959d;font-size:9px}.ot-page{padding:21px}.ot-page table{min-width:1100px}.overtime-filters{display:grid;grid-template-columns:minmax(180px,1.5fr) minmax(145px,.8fr) minmax(210px,1.2fr) minmax(160px,.8fr) auto;gap:10px;align-items:end;margin-top:16px;padding:13px;border:1px solid var(--line);border-radius:10px;background:#f8faf9}.overtime-filters label{display:grid;gap:6px;min-width:0}.overtime-filters label>span{color:#66736d;font-size:9px}.overtime-filters input,.overtime-filters select{width:100%;min-width:0;height:38px;padding:0 10px;border:1px solid #d8e0dc;border-radius:8px;background:#fff;color:#26332e;font:inherit;font-size:10px}.overtime-filter-actions{display:flex;gap:7px}.overtime-filter-actions button{min-height:38px;padding:0 10px;border:1px solid #b8d5ca;border-radius:8px;background:#eef8f4;color:#197b61;font-size:9px;white-space:nowrap;cursor:pointer}.overtime-filter-actions button:last-child{border-color:#d8e0dc;background:#fff;color:#65736d}.overtime-filter-summary{display:flex;justify-content:space-between;gap:12px;margin:11px 0 0;color:#74817b;font-size:9px}.overtime-filter-summary strong{color:#9a6619}.overtime-empty{height:100px;color:#7d8984;text-align:center;white-space:normal}.ot-status{display:inline-block;padding:5px 8px;border-radius:20px;background:#fff2dd;color:#a56b18;font-size:9px}.ot-status.approved{background:#e8f5ef;color:#307b61}.ot-status.rejected{background:#fde9e8;color:#b5524c}.ot-status.active{background:#eaf1fb;color:#4c70a1}.review-actions{display:flex;flex-wrap:wrap;gap:6px}.review-actions button{padding:6px 8px;border:1px solid #badaca;border-radius:6px;background:#eff8f4;color:#24745d;font-size:9px;cursor:pointer}.review-actions button:last-child{border-color:#ecc9c6;background:#fff1f0;color:#ad514b}.review-actions .row-action{display:inline-flex;align-items:center;margin:0;text-decoration:none}.continuous-badge{display:block;margin-top:4px;color:#8a5c13;font-size:8px}.overtime-proof-actions{display:flex;flex-wrap:wrap;gap:6px}.overtime-proof-actions .row-action{display:inline-flex;align-items:center;margin:0;text-decoration:none}.ot-foot{display:flex;justify-content:space-between;padding-top:14px;border-top:1px solid var(--line);color:var(--muted);font-size:10px}@media (max-width:1000px){.ot-stats,.overtime-filters{grid-template-columns:1fr 1fr}.overtime-filter-actions{grid-column:1/-1}}@media (max-width:720px){nav{grid-template-columns:repeat(7,1fr)}.ot-stats{gap:8px}.ot-page,.ot-stats article{padding:13px}.ot-foot{display:grid;gap:8px}.ot-page>.pay-head{display:grid;gap:12px}.ot-page>.pay-head>button{width:100%}.overtime-filters{grid-template-columns:1fr;padding:11px}.overtime-filter-actions{grid-column:1;display:grid;grid-template-columns:1fr 1fr}.overtime-filter-actions button{white-space:normal}.overtime-filter-summary{display:grid;gap:4px}}.labor-cost-page{gap:16px}.cost-filters,.labor-cost-page{display:grid;min-width:0;width:100%}.cost-filters{grid-template-columns:minmax(210px,1.3fr) 165px minmax(180px,1fr) auto auto auto;gap:10px;padding:16px}.cost-filters button,.cost-filters input,.cost-filters select{width:100%;min-width:0;height:40px;border:1px solid #dce2e5;border-radius:9px;background:#fff;padding:0 12px;color:#4e5963}.cost-filters button:not(.ghost){border-color:var(--g);background:var(--g);color:#fff;cursor:pointer}.cost-summary{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.cost-summary article{position:relative;overflow:hidden;min-width:0;padding:21px}.cost-summary article:before{content:"";position:absolute;inset:0 auto 0 0;width:4px;background:var(--g)}.cost-summary article.myr:before{background:#4475b8}.cost-summary article.pending:before{background:#d68b24}.cost-summary p{margin:0 0 12px;color:#65717c;font-size:11px}.cost-summary strong{display:block;font-size:25px;overflow-wrap:anywhere}.cost-summary span{display:block;margin-top:9px;color:var(--muted);font-size:9px}.budget-card,.cost-detail,.period-cost-card{min-width:0;max-width:100%;padding:21px}.cost-heading{display:flex;align-items:center;justify-content:space-between;gap:16px}.cost-heading h2{margin:0 0 5px;font-size:15px}.cost-heading p,.cost-heading>span,.cost-heading>strong{margin:0;color:var(--muted);font-size:10px}.budget-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:13px;margin-top:18px}.budget-grid article{padding:14px;border:1px solid #e8edef;border-radius:11px;background:#fafcfc}.budget-grid article>b{display:block;min-height:31px;font-size:10px;line-height:1.45}.budget-grid article>div{height:7px;margin:13px 0 10px;overflow:hidden;border-radius:8px;background:#e8edef}.budget-grid article>div span{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,#2f8a6d,#70b59e)}.budget-grid p{margin:0;color:#75818a;font-size:9px}.budget-grid p strong{color:var(--ink)}.budget-grid p em{float:right;color:var(--g);font-style:normal;font-weight:700}.currency-chip{display:inline-block;padding:4px 7px;border-radius:6px;font-size:9px;font-weight:700}.currency-chip.cny{background:#e8f5ef;color:#28745c}.currency-chip.myr{background:#eaf1fb;color:#436da6}.pending-cost{color:#b8791f;background:#fffaf1}.cost-detail footer{margin-top:14px;padding:12px;border-radius:8px;background:#f5f8f8;color:#6e7b84;font-size:10px}@media (max-width:1100px){.cost-filters{grid-template-columns:repeat(3,1fr)}.budget-grid{grid-template-columns:repeat(2,1fr)}}@media (max-width:720px){.budget-grid,.cost-summary{grid-template-columns:1fr}.cost-filters{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;padding:15px;overflow:hidden}.cost-filters>:nth-child(-n+3){grid-column:1/-1}.cost-filters .ghost{display:block}.cost-filters button{padding:0 6px;font-size:11px;white-space:normal}.cost-summary{gap:10px}.cost-heading{flex-direction:column;align-items:flex-start;gap:8px}.cost-heading>div{min-width:0}.cost-heading h2,.cost-heading p,.cost-heading>span,.cost-heading>strong{overflow-wrap:anywhere}.budget-card,.cost-detail,.period-cost-card{padding:15px}.cost-detail .table,.period-cost-card .table{width:100%;max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}}@media print{.content>header,.cost-filters,.shell>aside{display:none!important}.content,.shell{display:block;width:100%;max-width:none;padding:0}.labor-cost-page{gap:10px}.card{page-break-inside:avoid;break-inside:avoid;box-shadow:none}.budget-grid{grid-template-columns:repeat(5,1fr)}.cost-detail .table{overflow:visible}.cost-detail table{white-space:normal}}