*{box-sizing:border-box}
:root{--ink:#23483e;--muted:#798870;--line:#dce2d3;--paper:#fffefa;--bg:#f3f1e8;--accent:#648b7f;--red:#b52e27;--gold:#9d8455}
html{font-family:"PingFang SC","Microsoft YaHei",system-ui,sans-serif;color:var(--ink);background:var(--bg)}
body{margin:0}[hidden]{display:none!important}button,input,select{font:inherit;color:inherit}button,a,input,select{touch-action:manipulation}button,a{outline-offset:4px}
button{cursor:pointer;border:1px solid #c4cfbb;background:#f8f9f2;border-radius:7px;min-height:44px;padding:9px 15px;font-size:12px}button:hover{background:#e6eddc}button:disabled{cursor:not-allowed;opacity:.55}a{color:inherit}
input,select{border:1px solid #c7d2bd;background:#fffefa;border-radius:7px;min-height:44px;padding:10px 12px;font-size:14px;max-width:100%}input:focus-visible,select:focus-visible,button:focus-visible,a:focus-visible{outline:2px solid #557f6c}input[aria-invalid=true]{border-color:var(--red);outline-color:var(--red)}
.page-header{display:flex;justify-content:space-between;align-items:center;gap:20px;min-height:90px;padding:19px max(24px,4vw);border-bottom:1px solid var(--line);background:#eeeee3}
.brand{display:flex;align-items:center;gap:12px;text-decoration:none}.brand-mark{font-size:35px;color:#527d6f}.brand>span:last-child{font-size:21px;font-weight:600;letter-spacing:3px}.brand small{display:block;font-size:7px;letter-spacing:2.5px;margin-top:4px;font-weight:400}
.page-header nav{display:flex;gap:25px;flex-wrap:wrap}.page-header nav a{font-size:11px;text-decoration:none;border-bottom:1px solid #b6c0a8;min-height:40px;display:flex;align-items:center}
main{max-width:1440px;margin:auto;padding:35px max(24px,4vw) 45px}.eyebrow{font-size:10px;letter-spacing:2px;color:#8d9478;margin:0 0 12px}h1{font-size:38px;font-weight:600;letter-spacing:2px;margin:0 0 9px}.page-intro>p:not(.eyebrow){font-size:12px;color:var(--muted);margin:8px 0}
.storage-note{font-size:12px;line-height:1.9;padding:14px 17px;margin:20px 0 13px;border-left:3px solid #829a6e;background:#e9eedf;max-width:1040px}.storage-note strong{font-weight:600;color:#385b45}
.toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.save-state{font-size:11px;line-height:1.8;color:#617b54;margin:0 0 0 8px;flex:1;min-width:200px}.save-state.unsaved{color:#a26c2f}.save-state.failed{color:var(--red)}
.notice{font-size:12px;line-height:1.9;border:1px solid #c6d6bb;border-radius:8px;padding:13px 16px;margin-top:14px;background:#eef4e6;color:#42613b;overflow-wrap:anywhere}.notice.error{border-color:#d7b3a6;background:#fff4ed;color:#a34534}.notice p{margin:0 0 8px}.notice h2{font-size:17px;margin:0 0 5px}.notice.error button{border-color:#caaa97;background:#fff9f1}
.progress-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:25px 0 27px}.progress-grid>div{padding:16px 18px;border:1px solid var(--line);border-radius:9px;background:#eeefe3}.progress-grid span{display:block;font-size:11px;color:var(--muted)}.progress-grid strong{display:block;margin-top:7px;font-size:27px;font-weight:550;font-variant-numeric:tabular-nums}.zero{color:var(--red)!important}
.workspace{display:grid;grid-template-columns:225px minmax(0,1fr);gap:28px}.roster{position:sticky;top:20px;align-self:start;min-width:0;border-top:1px solid var(--line);padding-top:16px}.roster>label{display:block;font-size:12px;color:#687f58;margin-bottom:8px}.roster>input{width:100%}.muted{font-size:11px;line-height:1.8;color:var(--muted);margin:7px 0}
.student-results{max-height:70vh;overflow:auto;overscroll-behavior:contain;scrollbar-width:thin}.student-result{width:100%;border:0;border-bottom:1px solid var(--line);background:none;border-radius:0;display:grid;grid-template-columns:24px minmax(0,1fr) auto;align-items:center;gap:8px;padding:10px 7px;min-height:57px;text-align:left}.student-result.is-active{background:#e0e9d8;box-shadow:inset 3px 0 #73916a}.student-result-number{font-size:10px;color:#8b997c}.student-result-name{font-size:14px;font-weight:550}.student-result-progress{font-size:10px;color:#7a8f6b;white-space:nowrap}.student-result-progress.is-done{color:#3e7653}
.detail{min-width:0;scroll-margin-top:20px}.student-heading{min-height:105px;padding:14px 0 18px;display:flex;justify-content:space-between;align-items:center;gap:18px;border-top:1px solid var(--line)}.student-heading .eyebrow span{color:var(--gold);margin-left:9px;letter-spacing:1px}.student-heading h2{font-size:29px;margin:0;font-weight:550;letter-spacing:2px}.outline-link{font-size:11px;text-decoration:none;flex:none;min-height:44px;border:1px solid #c7d3bc;border-radius:7px;padding:12px 14px;background:#edf1e5}
.filters{display:flex;align-items:end;gap:14px;flex-wrap:wrap;padding:14px 16px;background:#e9eddc;border-radius:8px}.filters>label:first-child{font-size:10px;display:flex;flex-direction:column;gap:5px;min-width:210px;flex:1}.filters select{font-size:12px}.check-label{display:flex;align-items:center;gap:6px;min-height:44px;font-size:12px;cursor:pointer}.check-label input{min-height:18px;width:17px;height:17px;margin:0;accent-color:#618876}.filters>button{font-size:11px;white-space:nowrap}.entry-hint{font-size:10px;color:#889179;line-height:1.9;margin:12px 2px}
.assignment-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:13px}.assignment-card{min-width:0;background:var(--paper);border:1px solid var(--line);border-radius:10px;padding:16px}.assignment-card.is-missing{border-color:#dfc9bc;background:#fffaf4}.assignment-card-head{display:flex;align-items:start;gap:8px;border-bottom:1px solid #e5e9dc;padding-bottom:10px}.assignment-number{font-size:10px;color:#a18a61;padding-top:3px}.assignment-card h3{font-size:15px;font-weight:550;line-height:1.7;margin:0}
.submission-label{font-size:11px;line-height:1.8;color:#6f855c;margin:11px 0 9px}.submission-label[data-state=missing]{color:var(--red)}.submission-label[data-state=unknown],.submission-label[data-state=unbound],.submission-label[data-state=error]{color:#9b7636}
.score-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.score-field{font-size:11px;color:#7f8c70;display:flex;align-items:center;gap:7px}.score-input{width:88px;text-align:center;font-size:21px;font-variant-numeric:tabular-nums;font-weight:550;padding:6px;min-height:48px}.score-input[readonly]{background:#f4f2e8;cursor:default}.score-input.zero{background:#fff3ec;border-color:#d9afa2}.grade-origin{font-size:10px;line-height:1.7;color:#8a987b}.grade-origin.is-automatic{color:var(--red)}
.field-feedback{font-size:10px;line-height:1.8;color:#718567;min-height:18px;margin:6px 0 3px;overflow-wrap:anywhere}.field-feedback.is-error{color:var(--red)}.field-feedback.is-unsaved{color:#ab7d39}
.model-links{display:flex;gap:6px;flex-direction:column;margin-top:9px}.model-links a{font-size:11px;line-height:1.75;text-decoration:none;border:1px solid #dbe3d1;border-radius:6px;background:#f4f6ed;min-height:40px;padding:9px 10px;overflow-wrap:anywhere}.model-links a:hover{background:#e9efdf}.model-links a::after{content:" ↗";color:#7a8e62}.model-empty,.assignment-note{font-size:10px;line-height:1.9;color:#96967e;margin:8px 0 0;overflow-wrap:anywhere}.assignment-note{color:#8b8c74}.detail-note{font-size:10px;line-height:1.9;color:#8c967e;margin:18px 2px 0}
.empty-state{padding:34px 20px;text-align:center;border:1px dashed #c7d1bb;border-radius:9px;color:#7d8e70}.empty-state h3{font-size:17px;font-weight:500}.empty-state p{font-size:12px}.empty-state button{margin-top:5px}
dialog{width:min(560px,calc(100vw - 32px));max-height:90vh;border:1px solid #c7d3bd;border-radius:12px;padding:0;color:var(--ink);background:#fbfbf3}dialog::backdrop{background:#1b302a88}.import-panel{padding:26px}.import-panel h2{font-size:24px;font-weight:550;margin:0 0 12px}.import-panel>p{font-size:12px;line-height:1.9;overflow-wrap:anywhere}.dialog-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:23px}.primary{background:#5d8777;color:white;border-color:#5d8777}.primary:hover{background:#496f60}.import-error{color:var(--red)}footer{border-top:1px solid var(--line);text-align:center;font-size:10px;color:#8c967f;padding:21px;letter-spacing:2px}
@media(max-width:1050px){.workspace{grid-template-columns:195px minmax(0,1fr);gap:20px}.assignment-list{grid-template-columns:minmax(0,1fr)}.filters{gap:9px}.progress-grid>div{padding:14px}.toolbar .save-state{flex-basis:100%;margin:4px 0 0}}
@media(max-width:650px){.page-header{padding:15px 17px;gap:14px}.brand{gap:8px}.brand-mark{font-size:28px}.brand>span:last-child{font-size:17px}.brand small{font-size:6px;letter-spacing:1.3px}.page-header nav{gap:8px 12px;justify-content:flex-end}.page-header nav a{font-size:10px}main{padding:25px 16px 34px}h1{font-size:30px}.page-intro>p:not(.eyebrow){font-size:11px}.storage-note{font-size:11px;padding:11px 12px;margin-top:16px}.toolbar{gap:6px}.toolbar button{font-size:11px;padding:9px 11px;flex:1}.toolbar .save-state{font-size:10px}.progress-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:9px;margin:20px 0}.progress-grid strong{font-size:25px}.progress-grid span{font-size:10px}.workspace{display:block}.roster{position:static;margin-bottom:22px;padding-top:13px}.student-results{max-height:210px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 7px}.student-result{gap:5px;padding:9px 6px;grid-template-columns:20px minmax(0,1fr) auto}.student-result-name{font-size:12px}.student-result-progress{font-size:9px}.student-heading h2{font-size:26px}.student-heading{gap:10px;min-height:100px}.student-heading .eyebrow{font-size:9px}.outline-link{font-size:10px;padding:11px 10px}.filters{padding:12px;gap:7px}.filters>label:first-child{min-width:100%;font-size:10px}.filters>.check-label{flex:1}.filters button{padding:9px 11px}.entry-hint,.detail-note{font-size:10px}.assignment-card{padding:15px}.assignment-card h3{font-size:14px}.model-links a{font-size:12px;min-height:44px}.score-input{min-height:50px}.import-panel{padding:21px}.dialog-actions>button{flex:1}.notice{font-size:11px}}
