:root{font-family:system-ui,-apple-system,"Microsoft YaHei UI",sans-serif;color:#23394b;background:#f2f5f8;font-size:14px}*{box-sizing:border-box}body{margin:0}button,input,select,textarea{font:inherit}button{background:#185c5a;color:white;border:1px solid transparent;border-radius:7px;padding:10px 17px;cursor:pointer}button:hover{filter:brightness(.95)}button:disabled{opacity:.55;cursor:wait}button.secondary{background:#fff;color:#31495d;border-color:#d8e0e7}button.danger{background:#a43737}a{color:#185c5a}input,select,textarea{border:1px solid #ccd6df;border-radius:6px;background:white;padding:10px;min-width:0;width:100%;color:#253b4d}input:focus,select:focus,textarea:focus{outline:2px solid #8ebcba;outline-offset:1px}label{display:flex;flex-direction:column;gap:7px;margin-bottom:16px;color:#425767}textarea{min-height:88px;resize:vertical}.brand{font-size:11px;font-weight:700;letter-spacing:2px;color:#478381}.login{max-width:440px;margin:12vh auto;padding:36px;background:white;border-radius:12px;box-shadow:0 12px 50px #192a3d0c}.login h1{font-size:30px;margin:18px 0}.login p{line-height:1.7}.login button{width:100%;margin-top:8px}.muted,.version{color:#738392;font-size:12px;line-height:1.7}#shell{min-height:100vh}aside{position:fixed;inset:0 auto 0 0;width:220px;background:#fff;border-right:1px solid #e1e7ed;padding:30px 22px;display:flex;flex-direction:column}aside h2{margin:16px 0 7px;font-size:24px}nav{display:flex;flex-direction:column;gap:6px;margin-top:32px}nav button{text-align:left;background:transparent;color:#465c6c;padding:12px 15px}nav button.active{background:#e9f3f0;color:#185c5a;font-weight:700}.aside-bottom{margin-top:auto;display:grid;gap:16px;overflow-wrap:anywhere;font-size:12px}main{margin-left:220px;padding:32px 42px;min-width:0}header{display:flex;align-items:center;justify-content:space-between;gap:15px;margin-bottom:28px}.eyebrow{font-size:12px;color:#778996}h1{font-size:28px;margin:8px 0}h2{font-size:20px}.badge{border:1px solid #c8ded5;border-radius:20px;padding:7px 12px;color:#347260;background:#f4faf6;font-size:12px;white-space:nowrap}.cards{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}.card{padding:24px;background:white;border:1px solid #e0e7ed;border-radius:10px}.card strong{display:block;font-size:34px;margin-top:14px;font-weight:600}.notice{background:#eaf2f4;border-left:3px solid #4c8f92;padding:15px 18px;line-height:1.8;margin:20px 0;color:#3c5b68}.toolbar{display:flex;gap:10px;flex-wrap:wrap;margin:18px 0;align-items:center}.toolbar input{width:230px}.toolbar input[type=month],.toolbar input[type=number]{width:160px}.toolbar label{margin:0;flex-direction:row;align-items:center}.toolbar input[type=checkbox]{width:auto}.table-wrap{overflow:auto;background:white;border:1px solid #dce4eb;border-radius:9px}table{border-collapse:collapse;width:100%;white-space:nowrap;font-size:13px}th{text-align:left;background:#edf2f5;color:#536877;font-weight:600}td,th{padding:13px 14px;border-bottom:1px solid #e8edf2;max-width:350px;overflow:hidden;text-overflow:ellipsis}tbody tr:hover{background:#f8fbfc}td button{padding:6px 10px;font-size:12px;margin-right:5px}.empty{padding:50px;text-align:center;color:#7b8b99}.formgrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 18px}.full{grid-column:1/-1}.actions{display:flex;gap:10px;justify-content:flex-end;margin-top:20px}dialog{border:0;border-radius:12px;width:min(1100px,94vw);max-height:90vh;padding:26px;box-shadow:0 20px 100px #0003}dialog::backdrop{background:#172a3b80}.dialog-head{display:flex;justify-content:space-between;align-items:center;gap:20px}.dialog-head h2{margin:0 0 20px}.dialog-head button{margin-bottom:20px}#toast{position:fixed;right:24px;top:20px;background:#233e50;color:white;border-radius:8px;padding:14px 20px;max-width:520px;z-index:1000;box-shadow:0 8px 25px #0002;white-space:pre-wrap}pre{white-space:pre-wrap;overflow-wrap:anywhere;background:#f2f5f7;padding:16px;border-radius:8px;font-size:12px}footer{margin-top:32px;color:#8b98a3;font-size:12px;line-height:1.7}.small-note{font-size:12px;color:#728390;margin:12px 0}@media(max-width:900px){aside{position:static;width:100%;padding:18px}nav{flex-direction:row;flex-wrap:wrap;margin-top:15px}.aside-bottom{margin-top:15px;display:flex;justify-content:space-between}main{margin:0;padding:22px}.cards{grid-template-columns:1fr}.formgrid{grid-template-columns:1fr}header .badge{display:none}}
:root .mfa-qr{display:block;width:240px;height:240px;max-width:100%;margin:18px auto;background:white}
:root .mfa-secret{display:block;overflow-wrap:anywhere;white-space:normal;padding:12px;background:#f2f5f7}
#error{color:#a02525;min-height:1.5em}
.permission-panel{display:grid;gap:12px;padding:18px;border:1px solid #dbe4eb;border-radius:10px;background:#f6f9fb}
.permission-option{display:flex;align-items:center;gap:12px;margin:0;color:#233e50}
.permission-option input{width:20px;height:20px;margin:0;accent-color:#1c6a68}
#activationBox{margin:16px 0;color:#506474}#activationBox summary{cursor:pointer;margin-bottom:12px}
input.row-select{width:18px;height:18px;margin:0;accent-color:#1c6a68}

/* Pending source data: a real zero is never painted as missing. */
.missing-cell{background:#fff2a8!important;color:#5e4b00!important}.missing-input{background:#fff5bd!important;border-color:#ad7e05!important}.invalid-cell,.invalid-input{background:#ffe3e1!important;color:#8a1b15!important;border-color:#b9372c!important}fieldset.full{grid-column:1/-1}fieldset label{display:flex;align-items:flex-start;gap:.6rem;margin:.6rem 0}fieldset input[type=checkbox]{width:20px;min-width:20px;margin-top:4px}details{margin:1rem 0}summary{cursor:pointer;font-weight:600}input[aria-label="选择本页待补记录"]{width:20px}dialog{max-height:90vh;overflow:auto}
.import-panel{padding:20px;background:#fff;border:1px solid #d8e4e2;border-radius:12px;margin:0 0 20px}.import-panel h3{margin:0 0 12px}.import-panel .notice{margin:0 0 16px}details>summary{cursor:pointer;padding:12px 0;color:#315d62;font-weight:600}
aside{overflow-y:auto}.intake-cards{grid-template-columns:repeat(4,minmax(0,1fr))}.intake-cards .card{padding:18px}.intake-cards .card strong{font-size:28px;margin-top:10px}.intake-table td:last-child,.intake-table th:last-child{position:sticky;right:0;background:#fff;box-shadow:-4px 0 8px #23394b0a}.intake-table th:last-child{background:#edf2f5}@media(max-width:900px){.intake-cards{grid-template-columns:repeat(2,minmax(0,1fr))}}
