:root{font-family:Inter,"Microsoft YaHei",system-ui,sans-serif;color:#20342c;background:#f3f6f5;font-size:16px;--green:#176550;--muted:#6d7c75;--border:#dfe7e2}*{box-sizing:border-box}body{margin:0}button,input,select,textarea{font:inherit}button{cursor:pointer}button,a,input,select,textarea{outline-offset:4px}button:disabled{opacity:.45;cursor:not-allowed}button{border:1px solid var(--border);border-radius:8px;background:white;color:#254238;padding:10px 15px;font-size:.875rem;font-weight:600}button:hover{background:#edf4f0}.primary{background:var(--green);border-color:var(--green);color:white}.primary:hover{background:#104f3f}.danger{color:#a03939}.quiet{background:transparent}.shell{display:grid;grid-template-columns:232px 1fr;min-height:100vh}.side{background:#102e25;color:#e1eae5;padding:30px 20px;display:flex;flex-direction:column;position:fixed;inset:0 auto 0 0;width:232px}.brand{display:flex;align-items:center;gap:12px;font-weight:800;font-size:1.4rem;letter-spacing:1px}.brand img{width:37px;height:37px}.brand small{font-size:.68rem;font-weight:500;color:#8db8a8;letter-spacing:2px}.side-label{font-size:.75rem;letter-spacing:2px;color:#87a99b;margin:37px 12px 12px}.side nav{display:grid;gap:7px}.side nav button{border:0;background:none;color:#b9cec4;text-align:left;padding:14px 15px;display:flex;gap:12px}.side nav button.active{background:#245345;color:white}.side nav button:hover{background:#1c4538}.nav-number{font-size:.75rem;opacity:.6;margin-top:2px}.side-bottom{margin-top:auto;border-top:1px solid #315044;padding:20px 10px 0;font-size:.875rem}.side-bottom p{color:#8ca99b;font-size:.75rem}.avatar{border-radius:50%;background:#dcece3;color:#176550;width:38px;height:38px;display:inline-grid;place-items:center;font-weight:700;flex-shrink:0}.main{grid-column:2;padding:0 40px 40px;max-width:1600px;width:100%}.top{height:84px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;gap:16px}.breadcrumb{font-size:.875rem;color:var(--muted)}.top-controls{display:flex;gap:10px;align-items:center}.top input{width:150px;padding:8px 10px;background:white;border:1px solid var(--border);border-radius:6px}.demo-tag{font-size:.75rem;font-weight:700;color:#865e18;background:#fcf1d8;border:1px solid #ecdcb6;border-radius:5px;padding:5px 8px}.heading{display:flex;justify-content:space-between;align-items:center;gap:20px;margin:32px 0 23px}h1{font-size:1.8rem;letter-spacing:-.5px;margin:0 0 9px}h2{font-size:1.1rem;margin:0}h3{font-size:1rem;margin:0}.sub{font-size:.875rem;color:var(--muted);line-height:1.7;margin:0}.actions{display:flex;flex-wrap:wrap;gap:9px;align-items:center}.metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:18px;margin:24px 0}.metric{background:white;border:1px solid var(--border);border-radius:12px;padding:22px}.metric label{color:var(--muted);font-size:.875rem}.metric strong{font-size:2rem;font-weight:650;display:block;margin:12px 0 7px;letter-spacing:-1px}.metric small{color:var(--muted);font-size:.75rem}.metric:first-child{border-top:3px solid var(--green)}.panel{background:white;border:1px solid var(--border);border-radius:12px;overflow:hidden;margin-bottom:20px}.panel-head{padding:22px 24px;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items:center;gap:16px}.panel-body{padding:24px}.two{display:grid;grid-template-columns:1.6fr 1fr;gap:20px}.status{display:inline-block;border-radius:5px;padding:5px 9px;font-size:.75rem;white-space:nowrap;background:#f0f3f1;color:#6e7973;font-weight:600}.status.submitted,.status.pending{background:#fff4dc;color:#9a6d16}.status.approved,.status.paid{background:#e6f3eb;color:#287348}.status.returned{background:#fbe9e7;color:#a6453d}.notice{border-left:3px solid #c39336;padding:12px 15px;background:#fff9ed;font-size:.875rem;line-height:1.7;margin:16px 0;color:#785d2c}.work-card{padding:23px 24px;border-bottom:1px solid var(--border);display:grid;grid-template-columns:1fr auto;gap:14px}.work-card:last-child{border-bottom:0}.work-title{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.company{font-size:.75rem;color:#6b8175;background:#eef4f0;padding:4px 7px;border-radius:4px}.work-card .sub{margin-top:9px}.work-meta{display:flex;flex-wrap:wrap;gap:17px;margin-top:15px;color:#5b7063;font-size:.875rem}.percent{color:var(--green);font-weight:700}.progress-bar{height:4px;background:#edf2ef;border-radius:8px;margin-top:15px;max-width:460px}.progress-bar span{display:block;height:100%;background:#5b9b79;border-radius:8px}.tiny{font-size:.75rem;color:var(--muted)}.attachments{display:flex;gap:10px;flex-wrap:wrap;margin-top:13px}.attachments a{color:var(--green);font-size:.875rem;text-decoration:none;display:block;border:1px solid var(--border);border-radius:6px;padding:6px}.attachments img{display:block;max-width:120px;height:72px;object-fit:contain;background:#f4f6f5}.empty{padding:48px 24px;text-align:center;color:var(--muted);font-size:.875rem}.empty strong{display:block;font-size:1rem;color:#425b4c;margin-bottom:8px}.table-wrap{overflow:auto}table{border-collapse:collapse;width:100%;font-size:.875rem;text-align:left}th{color:#697c70;background:#f8faf9;font-weight:500;white-space:nowrap}td,th{padding:16px 23px;border-bottom:1px solid #edf1ee;line-height:1.6}td .tiny{display:block;margin-top:4px}tbody tr:last-child td{border-bottom:0}.right{text-align:right}.chips{display:flex;flex-wrap:wrap;gap:7px}.chip{border-radius:5px;background:#f0f5f2;padding:4px 8px;font-size:.75rem;color:#537161}.summary-line{display:flex;justify-content:space-between;border-bottom:1px solid #edf1ee;padding:15px 0;font-size:.875rem}.summary-line:last-child{border:0}.summary-line b{color:var(--green)}.toolbar{display:flex;gap:12px;align-items:center;margin-bottom:18px;flex-wrap:wrap}.toolbar select{padding:9px 12px;border:1px solid var(--border);border-radius:7px;background:white}.person-name{display:flex;align-items:center;gap:12px}.footnote{font-size:.75rem;color:var(--muted);line-height:1.7;margin:18px 0}.login{min-height:100vh;display:grid;grid-template-columns:1fr 1fr}.login-art{background:#102e25;color:white;display:flex;flex-direction:column;padding:60px 10%;justify-content:center;position:relative}.login-art .brand{position:absolute;top:45px}.login-art h1{font-size:2.8rem;line-height:1.5;margin:45px 0 20px;max-width:480px}.login-art p{color:#a8c5b6;font-size:1rem;line-height:1.9;max-width:400px}.login-example{margin-top:30px;border-top:1px solid #456257;padding-top:22px;display:flex;gap:32px}.login-example strong{font-size:1.7rem;display:block;margin-bottom:8px}.login-example span{font-size:.875rem;color:#99b9a7}.login-main{display:flex;align-items:center;justify-content:center;padding:45px 30px}.login-card{width:390px}.login-card h1{font-size:1.6rem}.login-card .sub{margin-bottom:25px}.field{display:grid;gap:8px;margin-bottom:18px;font-size:.875rem}.field label{font-weight:600}.field input,.field select,.field textarea{width:100%;border:1px solid #ccd9d1;padding:11px 12px;border-radius:7px;background:white;color:#213e2e;min-height:44px}.field textarea{resize:vertical;min-height:90px}.field input:focus,.field select:focus,.field textarea:focus{border-color:#176550;outline:2px solid #d4e8dc}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 18px}.full{grid-column:1/-1}.demo-accounts{border-top:1px solid var(--border);margin-top:25px;padding-top:20px}.demo-accounts p{font-size:.875rem;color:var(--muted)}.demo-accounts .actions button{font-weight:500;padding:8px 11px}.login-card .primary{width:100%}.error{color:#a23c32;font-size:.875rem;min-height:22px}.upload-box{padding:18px;border:1px dashed #a9c6b6;border-radius:8px;background:#f7fbf8}.upload-box input{border:0;padding:0;min-height:auto;background:transparent}.file-list{display:grid;gap:8px;margin-top:12px;font-size:.875rem}.file-list div{display:flex;align-items:center;justify-content:space-between;gap:10px}.file-list button{padding:4px 8px}.check-list{display:grid;grid-template-columns:1fr 1fr;gap:10px}.check-list label{font-weight:400;display:flex;gap:8px;align-items:center}.check-list input{width:17px;min-height:auto}.quick-values{display:flex;gap:6px;margin-top:2px}.quick-values button{padding:6px 10px;font-size:.75rem}dialog{border:0;border-radius:14px;width:min(680px,calc(100% - 32px));padding:0;max-height:90vh;box-shadow:0 20px 80px #132b3040}dialog::backdrop{background:#0d231a66;backdrop-filter:blur(3px)}.modal-head{position:sticky;top:0;background:white;z-index:1;display:flex;align-items:center;justify-content:space-between;padding:22px 26px;border-bottom:1px solid var(--border)}.modal-body{padding:24px 26px}.modal-foot{display:flex;justify-content:flex-end;gap:10px;padding-top:10px}#toast{position:fixed;bottom:25px;left:50%;transform:translateX(-50%);background:#173d2d;color:white;border-radius:8px;padding:13px 22px;box-shadow:0 4px 20px #0002;display:none;z-index:100;font-size:.875rem;max-width:90%}.phone-links a{color:var(--green);overflow-wrap:anywhere;display:block;margin:12px 0}.phone-preview{display:grid;grid-template-columns:1fr 150px;gap:20px}.phone-preview img{width:140px;height:140px}.mobile-bar{display:none}.print-sheet{padding:30px}a{color:var(--green)}
.stage-field{border:0;padding:0;min-width:0}.stage-field legend{font-weight:600;padding:0;margin-bottom:10px}.stage-field legend .tiny{font-weight:400;margin-left:8px}.stage-options{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-bottom:4px}.stage-options label{display:flex;align-items:center;gap:9px;padding:12px;border:1px solid #ccd9d1;border-radius:7px;font-weight:400;min-height:46px;cursor:pointer;background:white}.stage-options label:has(input:checked){background:#edf7f1;border-color:#176550;color:#176550;font-weight:600}.stage-options input{width:18px;height:18px;min-height:0;margin:0;accent-color:#176550;flex-shrink:0}.stage-field .tiny{line-height:1.7}@media(max-width:760px){.stage-options{grid-template-columns:repeat(2,minmax(0,1fr))}}
.contribution-field{gap:10px}.contribution-control{display:flex;align-items:flex-start;gap:22px}.contribution-track{flex:1;min-width:0}.field input.contribution-slider{appearance:none;-webkit-appearance:none;border:0;border-radius:0;padding:0;min-height:44px;height:44px;margin:0;background:transparent;cursor:pointer;touch-action:pan-y}.contribution-slider::-webkit-slider-runnable-track{height:6px;border-radius:8px;background:linear-gradient(to right,#176550 0 var(--filled),#dfe7e2 var(--filled) 100%)}.contribution-slider::-webkit-slider-thumb{-webkit-appearance:none;width:24px;height:24px;border-radius:50%;background:#176550;border:3px solid white;box-shadow:0 1px 5px #143d3040;margin-top:-9px}.contribution-slider::-moz-range-track{height:6px;border-radius:8px;background:#dfe7e2}.contribution-slider::-moz-range-progress{height:6px;border-radius:8px;background:#176550}.contribution-slider::-moz-range-thumb{width:19px;height:19px;border-radius:50%;background:#176550;border:3px solid white;box-shadow:0 1px 5px #143d3040}.field input.contribution-slider:focus-visible{outline:2px solid #176550;outline-offset:4px}.contribution-scale{display:flex;justify-content:space-between;color:var(--muted);font-size:.75rem;margin-top:-1px}.contribution-number{position:relative;width:96px;flex-shrink:0}.contribution-number input{padding-right:29px;text-align:center;font-size:1.125rem;font-weight:650;color:#176550;appearance:textfield;-moz-appearance:textfield}.contribution-number input::-webkit-inner-spin-button,.contribution-number input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.contribution-number span{position:absolute;right:13px;top:14px;color:var(--muted);pointer-events:none}.contribution-presets{gap:9px;flex-wrap:wrap;margin-top:5px}.contribution-presets button{min-width:64px;min-height:40px;font-size:.875rem;font-weight:500;padding:8px 14px}.contribution-presets button[aria-pressed=true]{color:#176550;background:#edf7f1;border-color:#176550;font-weight:650}@media(max-width:760px){.contribution-control{gap:16px}.contribution-number{width:85px}.contribution-presets{gap:7px}.contribution-presets button{flex:1;min-width:0;min-height:44px;padding:8px 10px}}
@media(min-width:1500px){.main{padding-left:55px;padding-right:55px}}
@media(max-width:1100px){.main{padding:0 24px 30px}.side{width:200px}.shell{grid-template-columns:200px 1fr}.metrics{gap:10px}.metric{padding:17px}.two{grid-template-columns:1fr}.work-card{padding:20px}.heading{align-items:flex-start}td,th{padding:13px 15px}}
@media(max-width:760px){.shell{display:block}.side{display:none}.main{padding:0 16px 90px}.top{height:69px}.top-controls{gap:6px}.top-controls input{width:137px}.breadcrumb{font-weight:700;color:var(--green)}.top .quiet{display:none}.heading{margin:25px 0 18px;gap:12px;flex-wrap:wrap}h1{font-size:1.5rem}.metrics{grid-template-columns:1fr 1fr;gap:10px;margin:18px 0}.metric{padding:16px}.metric strong{font-size:1.6rem;margin:8px 0 5px}.panel-head{padding:18px 16px;flex-wrap:wrap}.panel-body{padding:18px 16px}.work-card{padding:19px 16px;grid-template-columns:1fr}.work-card>.actions{justify-content:flex-end}.work-meta{gap:10px;font-size:.8125rem}.mobile-bar{display:flex;position:fixed;bottom:0;left:0;right:0;background:white;border-top:1px solid var(--border);z-index:10;justify-content:space-around;padding:8px 5px max(8px,env(safe-area-inset-bottom))}.mobile-bar button{border:0;padding:9px 5px;font-size:.75rem;color:#6c7e73;min-height:43px}.mobile-bar button.active{color:var(--green);background:#eaf4ed}.login{display:block}.login-art{padding:24px;min-height:auto}.login-art .brand{position:static}.login-art h1,.login-art p,.login-example{display:none}.login-main{padding:36px 23px}.login-card{width:100%;max-width:400px}.form-grid{grid-template-columns:1fr}.check-list{grid-template-columns:1fr}.modal-body{padding:20px}.modal-head{padding:18px 20px}.phone-preview{grid-template-columns:1fr}.actions button{padding:10px 12px}dialog{max-height:92vh}.demo-tag{font-size:.6875rem}.toolbar{gap:8px}.toolbar select{max-width:100%}.mobile-cards table,.mobile-cards tbody{display:block}.mobile-cards thead{display:none}.mobile-cards tr{display:block;padding:14px 16px;border-bottom:1px solid var(--border)}.mobile-cards td{display:block;border:0;padding:5px 0}.mobile-cards td::before{content:attr(data-label);display:inline-block;color:var(--muted);min-width:72px;margin-right:10px}.mobile-cards td.right{text-align:left}.mobile-cards td.actions-cell::before{display:none}.footnote{font-size:.75rem}.phone-preview img{margin:auto}}
.stage-contributions{display:grid;gap:12px;margin-bottom:18px}.stage-contributions .contribution-field{border:1px solid var(--border);border-radius:9px;padding:16px 18px;margin:0;background:#f8fbf9;min-width:0}.stage-contribution-summary{display:flex;flex-wrap:wrap;gap:8px;margin-top:13px;font-size:.8125rem}.stage-contribution-summary>span{padding:6px 9px;border:1px solid #dfe9e3;background:#f5f9f6;border-radius:5px}.stage-contribution-summary b{margin-left:6px}@media(max-width:760px){.stage-contributions .contribution-field{padding:13px 14px}.stage-contribution-summary{gap:7px}}
@media print{body{background:white}.side,.top,.mobile-bar,.heading .actions,.toolbar,button,.demo-tag{display:none!important}.shell{display:block}.main{padding:0}.metrics{grid-template-columns:repeat(4,1fr)}.panel{break-inside:avoid}.work-card{break-inside:avoid}.two{display:block}.metric strong{font-size:1.3rem}.notice{display:none}dialog{display:none}.attachments img{height:85px}.footnote{color:#555}@page{size:A4;margin:12mm}}
.progress-field{--progress-blue:#2563c4;border:1px solid #c8daf6;border-left:4px solid var(--progress-blue);border-radius:9px;padding:18px;background:#f2f7ff;min-width:0;gap:12px}
.progress-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.progress-heading label{color:#244673}.progress-badge{font-size:.6875rem;font-weight:600;line-height:1.4;padding:4px 8px;border-radius:5px;color:#2454a0;background:#dfeaff}
.progress-field input.contribution-slider{height:48px;min-height:48px;outline-color:#c8daf6}.progress-field input.contribution-slider:focus-visible{outline:2px solid var(--progress-blue);outline-offset:4px}
.progress-field .contribution-slider::-webkit-slider-runnable-track{height:12px;border-radius:12px;background:linear-gradient(to right,var(--progress-blue) 0 var(--filled),#dbe6f5 var(--filled) 100%)}
.progress-field .contribution-slider::-webkit-slider-thumb{box-sizing:border-box;width:28px;height:28px;background:var(--progress-blue);border:3px solid white;box-shadow:0 2px 6px #214e9338;margin-top:-8px}
.progress-field .contribution-slider::-moz-range-track{height:12px;border-radius:12px;background:#dbe6f5}.progress-field .contribution-slider::-moz-range-progress{height:12px;border-radius:12px;background:var(--progress-blue)}.progress-field .contribution-slider::-moz-range-thumb{box-sizing:border-box;width:28px;height:28px;background:var(--progress-blue);border:3px solid white;box-shadow:0 2px 6px #214e9338}
.progress-field .contribution-scale{color:#57749b}.progress-field .contribution-number{width:104px}.progress-field .contribution-number input{font-size:1.375rem;font-weight:700;min-height:48px;color:var(--progress-blue);border-color:#b9cfea}.progress-field .contribution-number input:focus{border-color:var(--progress-blue);outline-color:#c8daf6}.progress-field .contribution-number span{top:16px;color:#57749b}
.progress-field .contribution-presets button{color:#315d99;border-color:#c7d7ed}.progress-field .contribution-presets button:hover{background:#e5eeff}.progress-field .contribution-presets button[aria-pressed=true]{color:white;background:var(--progress-blue);border-color:var(--progress-blue);font-weight:650}.progress-field .tiny{color:#57749b}
.work-card .progress-bar{height:6px;background:#e4ecf8}.work-card .progress-bar span{background:#2563c4}
@media(max-width:760px){.progress-field{padding:14px}.progress-field .contribution-number{width:96px}}
.drive-share{margin-top:14px;padding:12px 14px;border:1px solid var(--border);border-radius:7px;background:#f7faf8;font-size:.8125rem;overflow-wrap:anywhere}.drive-share strong{font-weight:600}.drive-share p{margin:8px 0 0;white-space:pre-wrap;line-height:1.7}.drive-share a{font-weight:500}
.field[hidden]{display:none}.pending-toolbar{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}.assignment-list{display:grid;gap:8px;max-height:240px;overflow:auto;margin:16px 0}.assignment-list>div{border:1px solid var(--border);background:#f7faf8;border-radius:7px;padding:12px 14px;font-size:.875rem}.assignment-list span{display:block;color:var(--muted);font-size:.75rem;margin-top:6px;line-height:1.6}
.backup-schedule{display:flex;justify-content:space-between;align-items:center;gap:16px;flex-wrap:wrap;margin-bottom:14px}.backup-schedule strong{display:block;font-size:1.4rem;color:var(--green);margin-top:9px}.backup-location{padding:14px 16px;border:1px solid var(--border);border-radius:8px;background:#f5f9f6;margin:20px 0 14px;min-width:0}.backup-location code{display:block;font-family:ui-monospace,Consolas,monospace;font-size:.8125rem;line-height:1.7;overflow-wrap:anywhere;margin-top:7px}.backup-scope{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;margin-top:24px}.backup-scope>div{padding:16px;border:1px solid var(--border);border-radius:8px}.backup-scope strong{font-size:.875rem}.backup-scope p{margin:8px 0 0;font-size:.8125rem;color:var(--muted);line-height:1.7}.backup-alert{color:#a23c32;background:#fff2ef;border:1px solid #edc9c1;border-radius:8px;padding:14px 16px;font-size:.875rem;line-height:1.8;overflow-wrap:anywhere}.backup-alert span{font-size:.8125rem}.backup-filename{overflow-wrap:anywhere;max-width:290px}.backup-download{display:inline-flex;align-items:center;justify-content:center;padding:10px 14px;border:1px solid #cadfd2;border-radius:7px;text-decoration:none;font-weight:600;white-space:nowrap}.backup-download:hover{background:#edf4f0}.backup-restore{padding-left:21px;margin:0;font-size:.875rem;color:#4a6254;line-height:1.8}.backup-restore li+li{margin-top:12px}@media(max-width:760px){.backup-scope{grid-template-columns:1fr;gap:10px}.backup-schedule strong{font-size:1.25rem}.backup-location{padding:12px}.backup-filename{max-width:none}.backup-table td .tiny{margin-left:0}.mobile-bar button{padding-left:4px;padding-right:4px}}
.attendance-calendar{padding:20px}.calendar-caption{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:.875rem}.calendar-legend{display:flex;flex-wrap:wrap;gap:7px;margin:14px 0 17px}.calendar-key{display:inline-block;border-radius:5px;padding:5px 7px;font-size:.6875rem;line-height:1.35}.calendar-key.weekend,.calendar-mark.weekend{background:#e5f2e9;color:#286b42}.calendar-key.late,.calendar-mark.late{background:#fff1d7;color:#936510}.calendar-key.verylate,.calendar-mark.verylate{background:#ede9fc;color:#6851a3}.calendar-key.leave,.calendar-mark.leave{background:#fce5e5;color:#a34545}.calendar-mark.overtime{background:#e4edf5;color:#3c6387}.calendar-weekdays,.calendar-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:5px}.calendar-weekdays{margin-bottom:8px;text-align:center;color:var(--muted);font-size:.6875rem}.calendar-weekdays span:nth-last-child(-n+2){color:#9b7e53}.calendar-day{display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-start;gap:6px;min-width:0;min-height:75px;padding:7px 5px;border-radius:6px;font-size:.75rem;font-weight:500;background:#fff}.calendar-day.weekend-day{background:#faf9f5}.calendar-day.has-records{border-color:#aecbb9}.calendar-day:hover{background:#edf5ef;border-color:#176550}.calendar-date{font-weight:600;color:#3e5c4a}.calendar-marks{display:flex;flex-wrap:wrap;gap:3px;max-width:100%}.calendar-mark{font-size:9px;border-radius:3px;line-height:1.4;padding:2px 3px;white-space:nowrap}.attendance-calendar .footnote{margin:13px 0 0}.attendance-details{display:grid;gap:14px}.attendance-details article{border:1px solid var(--border);border-radius:8px;padding:16px}.attendance-details .sub,.attendance-details .chips{margin-top:10px}@media(max-width:760px){.attendance-calendar{padding:16px}.calendar-caption{flex-wrap:wrap}.calendar-grid,.calendar-weekdays{gap:4px}.calendar-day{min-height:72px;padding:6px 4px}.calendar-mark{padding:2px;font-size:9px}.calendar-legend{gap:6px}}@media print{.calendar-day{display:flex!important;color:#333}.calendar-grid{break-inside:avoid}}

.feedback-entry{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:20px}.feedback-list{display:grid;gap:12px;margin-top:16px}.feedback-content{white-space:pre-wrap;overflow-wrap:anywhere}#employee-login{margin:20px 0}hr{border:0;border-top:1px solid #dfe7e2;margin:24px 0}@media(max-width:600px){.feedback-entry{align-items:flex-start;flex-direction:column}}

/* Home feedback invitation: clear type hierarchy and a distinct action. */
.feedback-entry{margin:24px 0 20px;padding:22px 26px;gap:24px;border:1px solid #d5e6de;border-radius:16px;background:linear-gradient(110deg,#f8fcfa,#edf6f1);box-shadow:0 3px 12px rgba(24,70,51,.035)}
.feedback-entry>div{min-width:0}.feedback-entry h3{font-size:18px;font-weight:650;line-height:1.5;letter-spacing:.2px;color:#214d3e;margin:0 0 6px}.feedback-entry .sub{font-size:13px;line-height:1.8;color:#6a8076}
.feedback-entry button{display:inline-flex;align-items:center;justify-content:center;gap:9px;flex-shrink:0;min-height:44px;padding:11px 20px;border:1px solid #226b53;border-radius:12px;background:#226b53;color:#fff;font-size:14px;line-height:1.4;font-weight:600;box-shadow:0 3px 7px rgba(34,107,83,.12);transition:background .15s,box-shadow .15s}
.feedback-entry button:hover{background:#19583f;border-color:#19583f;box-shadow:0 4px 10px rgba(34,107,83,.18)}.feedback-entry button:focus-visible{outline:3px solid #9acbb5;outline-offset:3px}.feedback-entry button svg{width:17px;height:17px;flex-shrink:0}
@media(max-width:600px){.feedback-entry{margin-top:18px;padding:19px 20px;gap:15px;border-radius:14px;align-items:flex-start;flex-direction:column}.feedback-entry h3{font-size:17px}.feedback-entry .sub{font-size:13px}.feedback-entry button{min-height:44px;padding:11px 17px}}
@media print{.feedback-entry{display:none}}

.bonus-invoice{display:inline-flex;background:#fff0d6;color:#985706;border:1px solid #edcc91;border-radius:7px;padding:5px 9px;font-weight:700;font-size:13px}.field select.bonus-selected{background:#fff5e3;color:#92520b;border-color:#ddb66b;font-weight:700}.field option{color:#254238;background:#fff}.field option[value="奖金补充发票"]{color:#985706;background:#fff0d6;font-weight:700}
.ai-usage-card{padding:24px;border-bottom:1px solid var(--border)}.ai-usage-card:last-child{border-bottom:0}.ai-totals{display:flex;gap:24px;flex-wrap:wrap;margin:20px 0;font-size:13px;color:#6d7c75}.ai-totals b{display:block;margin-top:5px;color:#176550;font-size:22px}.ai-project-row{display:grid;grid-template-columns:minmax(0,1.7fr) minmax(0,1fr) auto;gap:10px;margin-bottom:12px}.ai-project-row select,.ai-project-row input{min-width:0;width:100%;padding:11px;border:1px solid var(--border);border-radius:8px;background:white;font-size:14px}
@media(max-width:760px){.ai-usage-card{padding:19px 16px}.ai-totals{gap:16px}.ai-project-row{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.ai-project-row button{grid-column:2;justify-self:end}.mobile-bar{justify-content:flex-start;overflow-x:auto;gap:3px}.mobile-bar button{flex-shrink:0;white-space:nowrap}}

.project-picker{background:#f7faf8;border:1px solid #dfe7e2;border-radius:12px;padding:14px;margin-bottom:16px}.project-picker-filters{grid-column:1/-1;display:grid;grid-template-columns:1.1fr .8fr .8fr 1.4fr;gap:8px}.project-picker-count{grid-column:1/-1}@media(max-width:600px){.project-picker-filters{grid-template-columns:1fr 1fr}.project-picker{padding:12px}}

.project-search-fields{display:grid;grid-template-columns:1fr 1fr 1.5fr;gap:9px;padding:13px;background:#f7faf8;border:1px solid var(--border);border-radius:10px;margin-bottom:18px}.project-search-fields select,.project-search-fields input{width:100%;min-width:0;padding:10px;border:1px solid var(--border);border-radius:7px;background:white;font-size:13px}.check-list label[hidden]{display:none}@media(max-width:600px){.project-search-fields{grid-template-columns:1fr 1fr}.project-search-fields input{grid-column:1/-1}}

/* Attendance typography, calendar proportions and project attribution. */
.attendance-calendar{padding:22px}.calendar-caption{font-size:15px;line-height:1.5}.calendar-caption strong{font-weight:650;color:#254b3c}.calendar-caption .tiny{font-size:12px;color:#819087}.calendar-legend{gap:8px;margin:17px 0 21px}.calendar-key{padding:6px 9px;font-size:11px;border-radius:6px;font-weight:500;line-height:1.4}.calendar-key.overtime{background:#e9f0f6;color:#456681}.calendar-weekdays{font-size:12px;margin-bottom:10px}.calendar-weekdays,.calendar-grid{gap:7px}.calendar-day{min-height:78px;padding:9px 7px;border-radius:9px;gap:9px;border-color:#e5eae7}.calendar-date{font-size:13px;line-height:1.3;font-weight:600}.calendar-day.has-records{border-color:#bad4c5;background:#f6faf7}.calendar-day.weekend-day{background:#faf9f6}.calendar-marks{gap:4px}.calendar-mark{font-size:10px;line-height:1.5;padding:2px 4px;border-radius:4px}.attendance-calendar-main .calendar-day{min-height:94px;padding:12px}.attendance-calendar-main .calendar-date{font-size:15px}.attendance-calendar-main .calendar-mark{font-size:11px;padding:3px 6px}.attendance-calendar-main .calendar-marks{gap:5px}.attendance-table th{font-size:12px;padding:16px 20px;color:#77877f}.attendance-table td{font-size:13px;padding:19px 20px;vertical-align:middle}.attendance-table .chips{gap:5px;max-width:210px}.attendance-table .calendar-key{font-size:11px;padding:4px 7px}.attendance-table .tiny{font-size:11px;line-height:1.7}.attendance-table .actions{flex-wrap:nowrap;gap:7px}.attendance-table .actions button{font-size:12px;padding:8px 12px;border-radius:8px}.overtime-project-info{display:grid;gap:7px;min-width:135px}.overtime-project-info strong{font-size:14px;font-weight:600;line-height:1.55;color:#244e3d}.attendance-owner{display:inline-flex;justify-self:start;background:#edf4f0;border:1px solid #dbe8df;color:#47715b;padding:3px 7px;border-radius:5px;font-size:11px;line-height:1.5}.attendance-details .overtime-project-info{margin:13px 0}
@media(max-width:760px){.attendance-calendar{padding:16px}.calendar-grid,.calendar-weekdays{gap:4px}.calendar-day,.attendance-calendar-main .calendar-day{min-height:77px;padding:7px 4px;gap:7px;border-radius:7px}.calendar-date,.attendance-calendar-main .calendar-date{font-size:12px}.calendar-marks,.attendance-calendar-main .calendar-marks{gap:3px}.calendar-mark,.attendance-calendar-main .calendar-mark{font-size:9px;padding:2px 3px}.calendar-legend{gap:6px;margin:14px 0 18px}.calendar-key{font-size:10px;padding:5px 7px}.attendance-table td{padding:6px 0;font-size:13px}.attendance-table .overtime-project-info{display:inline-grid;vertical-align:top;min-width:0;max-width:calc(100% - 85px)}.attendance-table .actions{margin-top:8px;justify-content:flex-end}.attendance-table .chips{display:inline-flex;vertical-align:middle}}

/* Clipboard attachment previews */
.upload-box:focus-visible{outline:2px solid var(--green);outline-offset:3px}.file-list .file-item{padding:10px;background:white;border:1px solid var(--border);border-radius:8px}.file-preview{width:80px;height:64px;object-fit:contain;background:#f3f6f5;border-radius:5px;flex-shrink:0}.file-name{flex:1;min-width:0;overflow-wrap:anywhere;font-size:.8rem;line-height:1.5}.file-icon{font-size:.75rem;color:var(--muted)}.file-item button{flex-shrink:0}

.attachment-dragging .upload-box{border:2px dashed var(--green);background:#e5f3ec;box-shadow:0 0 0 4px #17655015}.attachment-state{display:block;color:var(--muted);font-size:.72rem;margin-top:4px}

.file-list .file-item{display:block}.file-item-main{display:flex;align-items:center;gap:10px}.invoice-check{margin-top:12px;border-top:1px solid var(--border);padding-top:10px}.invoice-check summary{cursor:pointer;font-size:.8rem;font-weight:600}.invoice-fields{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:12px 0}.invoice-fields label{font-size:.75rem;min-width:0}.invoice-fields input{border:1px solid var(--border);padding:8px;background:white;min-height:36px}.invoice-page{margin-top:14px}.invoice-page b{font-size:.75rem}.invoice-warning{font-size:.75rem;color:#a66b15;line-height:1.6}.non-invoice{display:flex;align-items:center;gap:8px;font-size:.75rem}.non-invoice input{width:16px;min-height:auto}@media(max-width:600px){.invoice-fields{grid-template-columns:1fr}}

.month-switch{display:flex;align-items:center;gap:8px;font-size:.75rem;color:var(--muted)}.settlement-banner{margin:24px 0 0;padding:20px 24px;display:flex;justify-content:space-between;align-items:center;gap:16px;border:1px solid #c5ddd2;border-left:5px solid var(--green);border-radius:12px;background:#eaf4ef}.settlement-eyebrow{display:block;color:#637c70;font-size:.75rem;margin-bottom:6px}.settlement-banner strong{font-size:1.5rem;color:#164d3b}.settlement-banner p{margin:7px 0 0;font-size:.8rem;line-height:1.6;color:#587264}.settlement-banner.historical{background:#fff5e2;border-color:#efcc83;border-left-color:#c78b20}.settlement-banner.historical strong{color:#8c5b12}.settlement-pill{background:white;padding:8px 12px;border-radius:20px;font-size:.8rem;color:var(--green);white-space:nowrap}.form-month-banner{background:#edf5f1;border:1px solid #c7ded2;border-radius:10px;padding:16px;margin-bottom:20px;display:grid;gap:8px}.form-month-banner label{font-size:.9rem;font-weight:700;color:#234d3a}.form-month-banner input[type=month]{font-size:1.2rem;font-weight:650;border:1px solid #aacdb9;background:white;border-radius:7px;padding:10px;min-height:44px;width:100%;color:#164d3b}.form-month-banner small{font-size:.75rem;color:#6b7d73}.form-month-banner strong{font-size:1.25rem}.cross-month-warning{background:#fff0d6;padding:12px;border-radius:7px;color:#875717;font-size:.8rem;line-height:1.7}.cross-month-warning label{display:flex;align-items:center;gap:8px;margin-top:8px;font-size:.8rem;font-weight:500}.cross-month-warning input{width:17px;min-height:auto}.bonus-progress{border:1px solid #ead3a4;background:#fffaf0;border-radius:12px;padding:24px;margin-bottom:24px}.bonus-progress-head{display:flex;justify-content:space-between;align-items:center;gap:12px}.bonus-metrics{display:grid;grid-template-columns:1fr 1fr 1fr;gap:20px;margin-top:22px}.bonus-metrics span{font-size:.8rem;color:#7b715e}.bonus-metrics strong{display:block;font-size:1.4rem;color:#544732;margin-top:8px}.bonus-metrics small{display:block;font-size:.75rem;color:#8b806d;margin-top:7px;line-height:1.6}.bonus-gap strong,.bonus-remaining{color:#a36913}.bonus-progress-track{height:8px;border-radius:10px;background:#f0e3c9;margin-top:18px;overflow:hidden}.bonus-progress-track span{display:block;height:100%;background:#c08d33}.panel-note{padding:0 24px 16px;font-size:.75rem;color:var(--muted);line-height:1.7}@media(max-width:650px){.settlement-banner{padding:16px;align-items:flex-start}.settlement-banner strong{font-size:1.2rem}.month-switch{display:block}.bonus-progress{padding:18px}.bonus-metrics{grid-template-columns:1fr;gap:16px}.bonus-metrics>div{padding-bottom:12px;border-bottom:1px solid #eee0c4}.bonus-progress-head{align-items:flex-start}}

.expense-bulk{padding:16px 20px;margin:0 0 16px;display:flex;align-items:center;justify-content:space-between;gap:16px;border:1px solid #bad8ca;border-radius:10px;background:#eaf4ef}.expense-bulk[hidden]{display:none}.expense-bulk strong{font-size:.9rem}.expense-bulk small{display:block;font-size:.75rem;line-height:1.6;color:#8a661d;margin-top:6px}.bulk-confirm-summary{background:#edf5f1;border-radius:10px;padding:16px;margin-bottom:20px}.bulk-confirm-summary strong{font-size:1.2rem}.bulk-confirm-summary p{font-size:.85rem;margin:8px 0 0}.bulk-record-preview{max-height:210px;overflow:auto;border:1px solid var(--border);border-radius:8px;margin:16px 0}.bulk-record-preview>div{display:flex;justify-content:space-between;gap:12px;padding:12px;border-bottom:1px solid var(--border);font-size:.8rem}.bulk-record-preview>div:last-child{border-bottom:0}.bulk-ack{display:flex;align-items:center;gap:8px;font-size:.85rem;margin-top:18px}.bulk-ack input{width:17px;height:17px}@media(max-width:650px){.expense-bulk{align-items:flex-start;flex-direction:column;padding:16px}.expense-bulk .actions{width:100%}.expense-bulk button{flex:1}.bulk-record-preview>div{font-size:.75rem}}

.side{overflow-y:auto}.pm-todo-box{padding:14px 0 18px;margin-bottom:18px;border-bottom:1px solid #315044}.pm-todo-heading{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;font-size:.85rem}.pm-todo-heading>span{padding:2px 7px;background:#d6b469;color:#26392f;border-radius:10px;font-size:.75rem}.pm-todo-box button{display:flex;justify-content:space-between;align-items:center;width:100%;background:#1c4538;color:#d9e9e1;border:0;padding:10px;margin-top:6px;font-size:.75rem}.pm-todo-box button:hover{background:#295a48}.pm-todo-box b{color:#efd59d}.pm-todo-box small{display:block;color:#8eaea0;font-size:.68rem;margin-top:9px}.pm-todo-mobile{display:none}.todo-section-title{margin:22px 0 12px}.todo-card{border:1px solid var(--border);border-radius:10px;padding:16px;margin:12px 0;background:#fafcfb}.todo-card-heading{display:flex;justify-content:space-between;align-items:flex-start;gap:16px}.todo-card-heading h3{font-size:.9rem;margin-bottom:6px}.todo-card-heading strong{font-size:1.15rem;color:var(--green);white-space:nowrap}.todo-card>.actions{justify-content:flex-end;margin-top:16px}.todo-card .attachments a{max-width:100%;overflow-wrap:anywhere}.todo-card .attachments>div{min-width:0;max-width:100%}.todo-card .tiny{line-height:1.6}@media(max-width:650px){.pm-todo-mobile{display:flex;width:100%;justify-content:space-between;margin-top:18px;background:#edf5f1;color:var(--green)}.todo-card{padding:12px}.todo-card-heading{gap:8px}.todo-card>.actions button{flex:1;font-size:.75rem}}@media(max-height:900px) and (min-width:901px){.side nav button{padding-top:10px;padding-bottom:10px}.pm-todo-box{padding-top:10px;padding-bottom:12px;margin-bottom:12px}.side-bottom{padding-top:12px}}
/* Login character playground */
.login-art .frame-play{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px;width:100%;max-width:620px;margin:65px 0 24px}
.frame-play .frame-cell{min-width:0;aspect-ratio:1;padding:0;overflow:hidden;border:1px solid rgba(215,235,223,.13);border-radius:14px;background:rgba(255,255,255,.025);transition:background .25s,border-color .25s,transform .25s;touch-action:manipulation}
.frame-play .frame-cell:hover,.frame-play .frame-cell.is-face{background:rgba(255,255,255,.07);border-color:var(--tile-color);transform:translateY(-4px)}
.frame-play .frame-cell:focus-visible{outline:2px solid var(--tile-color);outline-offset:4px}
.frame-cell canvas{display:block;width:100%;height:100%}
.login-art .frame-caption{font-size:clamp(20px,2.3vw,30px);font-weight:700;color:#f5f3df;letter-spacing:2px;line-height:1.5;margin:0 0 16px}
@media(max-width:900px){.login-art .frame-play{margin-top:28px;max-width:440px;gap:6px}.login-art .frame-caption{font-size:22px}.frame-play .frame-cell{border-radius:10px}}
@media(prefers-reduced-motion:reduce){.frame-play .frame-cell{transition:none}.frame-play .frame-cell:hover,.frame-play .frame-cell.is-face{transform:none}}
/* Single large pixel stage */
.login-art .frame-play{display:block;width:100%;max-width:560px;margin:64px auto 0}
.frame-play .frame-cell{display:block;width:100%;border-radius:0;overflow:visible;background:transparent;border:0;transform:none!important}
.frame-play .frame-cell:hover,.frame-play .frame-cell.is-face{background:transparent;border:0}
.frame-cell canvas{width:100%;height:100%;overflow:visible}
@media(max-width:900px){.login-art .frame-play{max-width:280px;margin:24px auto 0}.frame-play .frame-cell{border-radius:0}}
.frame-play .frame-cell{background-image:linear-gradient(rgba(219,234,222,.09) 1px,transparent 1px),linear-gradient(90deg,rgba(219,234,222,.09) 1px,transparent 1px);background-size:4.166667% 4.166667%;isolation:isolate}
.frame-play .frame-cell:hover,.frame-play .frame-cell.is-face{background-image:linear-gradient(rgba(219,234,222,.09) 1px,transparent 1px),linear-gradient(90deg,rgba(219,234,222,.09) 1px,transparent 1px);background-size:4.166667% 4.166667%}
