:root{color:#17211d;background:#f4f7f5;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;font-synthesis:none;text-rendering:optimizeLegibility}*{box-sizing:border-box}body{margin:0;min-width:320px;min-height:100vh}button,input,select{font:inherit}button{border:0;cursor:pointer}button:disabled{cursor:not-allowed;opacity:.65}.auth-shell,.app-shell{min-height:100vh;display:grid;place-items:center;padding:24px;background:linear-gradient(120deg,rgba(45,97,85,.1),transparent 38%),linear-gradient(300deg,rgba(198,76,62,.08),transparent 36%),#f4f7f5}.auth-panel,.account-panel,.dialog{width:min(100%,440px);background:#fffffff5;border:1px solid rgba(23,33,29,.1);border-radius:8px;box-shadow:0 22px 70px #192a241f}.auth-panel,.account-panel{padding:28px}.brand-row,.topbar,.identity,.dialog-head{display:flex;align-items:center}.brand-row,.topbar,.dialog-head{justify-content:space-between;gap:16px}.brand-row{justify-content:flex-start;margin-bottom:24px}.brand-mark,.avatar-fallback,.icon-button{display:grid;place-items:center}.brand-mark{width:46px;height:46px;border-radius:8px;color:#fff;background:#256c5a}h1,h2,h3,p{margin:0}h1{font-size:24px;line-height:1.2;letter-spacing:0}h2{font-size:20px;line-height:1.3;letter-spacing:0}h3{font-size:15px;line-height:1.4;letter-spacing:0}.brand-row p,.identity p{margin-top:4px;color:#66746e;font-size:14px}.segmented{display:grid;grid-template-columns:repeat(3,1fr);gap:4px;padding:4px;margin-bottom:22px;border-radius:8px;background:#edf2ef}.segmented button{height:38px;border-radius:6px;color:#596861;background:transparent}.segmented button.active{color:#17211d;background:#fff;box-shadow:0 4px 14px #17211d14}.form{display:grid;gap:16px}label{display:grid;gap:8px;color:#31433b;font-size:14px}input,.run-select{width:100%;height:44px;padding:0 12px;border:1px solid #d9e1dd;border-radius:7px;color:#17211d;background:#fff;outline:none}input:focus,.run-select:focus{border-color:#256c5a;box-shadow:0 0 0 3px #256c5a24}.primary,.secondary,.ghost,.icon-button,.inline-check{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;border-radius:7px;transition:transform .15s ease,background .15s ease}.primary{color:#fff;background:#256c5a}.secondary{color:#20352d;background:#e6eee9}.ghost{color:#506159;background:#eef3f0}.small{min-height:34px;padding:0 12px}.primary:hover,.secondary:hover,.ghost:hover,.icon-button:hover,.inline-check:hover{transform:translateY(-1px)}.message{color:#496159;font-size:14px;line-height:1.6}.message.error{color:#b3261e}.topbar{align-items:flex-start;margin-bottom:28px}.identity{gap:14px;min-width:0}.name-row{display:flex;align-items:center;gap:10px;min-width:0;flex-wrap:wrap}.identity img,.avatar-fallback{width:58px;height:58px;flex:0 0 auto;border-radius:8px;background:#e5efea}.identity img{object-fit:cover}.identity h1{max-width:210px;overflow-wrap:anywhere}.icon-button{width:42px;height:42px;color:#40524b;background:#edf2ef}.icon-button.danger{color:#fff;background:#c43d32}.icon-button.danger:hover{background:#ad3028}.inline-check{min-height:30px;padding:0 9px;border-radius:7px;color:#24614f;background:#e6f3ee;font-size:13px;white-space:nowrap}.action-grid{display:grid;grid-template-columns:1fr;gap:12px}.longmao-panel{display:grid;gap:14px;margin-top:20px;padding:16px;border:1px solid #dce6e1;border-radius:8px;background:#f8faf9}.longmao-head,.student-list{display:grid;gap:10px}.longmao-head{grid-template-columns:1fr;align-items:center;justify-items:end}.longmao-head .secondary{min-height:36px;padding:0 12px}.student-list{grid-template-columns:72px 1fr;margin:0;color:#263c33;font-size:14px}.student-list dt{color:#6a7a73}.student-list dd{min-width:0;margin:0;overflow-wrap:anywhere}.run-panel{display:grid;gap:12px;margin-top:16px;padding:16px;border:1px solid #dce6e1;border-radius:8px;background:#fff}.run-form{display:grid;gap:12px}.run-head-tools{display:inline-flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap}.run-credit{min-height:30px;display:inline-flex;align-items:center;padding:0 9px;border-radius:7px;color:#24614f;background:#e6f3ee;font-size:13px;white-space:nowrap}.run-select{padding-right:34px}.run-submit{width:100%}.task-box{display:grid;gap:6px;padding:12px;border:1px solid #e1ebe6;border-radius:8px;background:#f8faf9}.task-box p{color:#31433b;font-size:14px;line-height:1.45}.task-box small{color:#74837c;font-size:12px}.task-status{width:fit-content;padding:4px 8px;border-radius:999px;color:#8a6415;background:#fff6df;font-size:12px;line-height:1.2}.task-status.success{color:#24614f;background:#e6f3ee}.task-status.error{color:#9f271f;background:#fff0ed}.records-panel{display:grid;gap:12px;margin-top:16px}.records-head,.record-month-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.records-head h2{font-size:18px}.record-tools{display:inline-flex;align-items:center;gap:8px}.month-select{width:92px;height:34px;padding:0 28px 0 10px;border:1px solid #d7e2dd;border-radius:7px;color:#20352d;background:#fff;outline:none}.month-select:focus{border-color:#256c5a;box-shadow:0 0 0 3px #256c5a24}.records-box{max-height:320px;overflow-y:auto;display:grid;gap:14px;padding:14px;border:1px solid #dce6e1;border-radius:8px;background:#fff}.record-month{display:grid;gap:10px}.record-month+.record-month{padding-top:14px;border-top:1px solid #e6eee9}.record-month-head span{color:#66746e;font-size:13px;white-space:nowrap}.record-table{display:grid;gap:6px}.record-row{display:grid;grid-template-columns:minmax(92px,1fr) minmax(82px,.85fr) minmax(68px,.75fr);gap:10px;align-items:start;padding:8px 0;border-top:1px solid #edf2ef;color:#263c33;font-size:13px}.record-header{padding-top:0;border-top:0;color:#6a7a73;font-size:12px}.record-empty{padding:20px 0 10px;border-top:1px solid #edf2ef;color:#74837c;font-size:13px;text-align:center}.record-row span{min-width:0;display:grid;gap:2px}.record-row strong{font-weight:600;overflow-wrap:anywhere}.record-row small{color:#74837c;font-size:12px;line-height:1.35;overflow-wrap:anywhere}.record-row mark{width:fit-content;padding:3px 7px;border-radius:999px;color:#7b3b32;background:#fff0ed;font-size:12px;line-height:1.2}.record-row mark.pass{color:#24614f;background:#e6f3ee}.refresh-box{display:grid;gap:12px;margin-top:18px;padding:16px;border:1px solid #f0c7c2;border-radius:8px;background:#fff7f6}.refresh-box p{color:#9f271f;font-size:15px}.dialog-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:20;display:grid;place-items:center;padding:20px;background:#0c12106b}.dialog{padding:22px}.dialog.narrow{width:min(100%,390px)}.dialog-head{margin-bottom:18px}.qr-box{width:min(100%,260px);aspect-ratio:1;display:grid;place-items:center;margin:0 auto 16px;border:1px solid #dce6e1;border-radius:8px;background:#f8faf9}.qr-box img{width:100%;height:100%;padding:10px;object-fit:contain}.loader{display:grid;place-items:center;color:#256c5a;animation:spin 1s linear infinite}.toast{position:fixed;left:50%;bottom:28px;z-index:30;transform:translate(-50%);max-width:min(90vw,460px);padding:12px 16px;border-radius:7px;color:#fff;background:#20352d;animation:toast 3s ease forwards}@keyframes spin{to{transform:rotate(360deg)}}@keyframes toast{0%,80%{opacity:1}to{opacity:0}}@media(min-width:560px){.action-grid{grid-template-columns:1fr 1fr}.action-grid .secondary:last-child{grid-column:1 / -1}}@media(max-width:420px){.auth-shell,.app-shell{padding:14px}.auth-panel,.account-panel{padding:20px}h1{font-size:21px}.records-head{align-items:flex-start;flex-direction:column}.record-tools{width:100%}.month-select{flex:1;min-width:0}.segmented button{font-size:14px}}
