@font-face{font-family:DM Sans;font-style:normal;font-weight:100 1000;font-display:swap;src:url(../media/c3cb240f9c892514-s.163v2i5cux7-c.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:DM Sans;font-style:normal;font-weight:100 1000;font-display:swap;src:url(../media/5c285b27cdda1fe8-s.p.0yo6-5yoeeudq.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:DM Sans Fallback;src:local(Arial);ascent-override:94.9%;descent-override:29.66%;line-gap-override:0.0%;size-adjust:104.53%}.dm_sans_40b93add-module__kJBK_q__className{font-family:DM Sans,DM Sans Fallback;font-style:normal}.dm_sans_40b93add-module__kJBK_q__variable{--font-sans:"DM Sans", "DM Sans Fallback"}
@font-face{font-family:Fraunces;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/167cd0713aa75522-s.0j1f760ks3~7e.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Fraunces;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/e455bcff747f0d5e-s.0lukgm0wyhr0a.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Fraunces;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/791bf8c4bb753ed6-s.p.0524igg32t-c1.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Fraunces Fallback;src:local(Times New Roman);ascent-override:84.71%;descent-override:22.09%;line-gap-override:0.0%;size-adjust:115.45%}.fraunces_f79135ed-module__f-lpTW__className{font-family:Fraunces,Fraunces Fallback;font-style:normal}.fraunces_f79135ed-module__f-lpTW__variable{--font-serif:"Fraunces", "Fraunces Fallback"}
:root{--bg:#f4efe5;--surface:#fffcf7e0;--surface-strong:#fffaf0;--ink:#1f2a2c;--muted:#586569;--line:#323e4121;--accent:#0f766e;--accent-soft:#0f766e1f;--warm:#c66b3d;--warn:#b45309;--good:#1d7a46;--danger:#b91c1c;--shadow:0 4px 24px #3a2b1714;--shadow-lg:0 8px 40px #3a2b171f;--radius-xl:24px;--radius-lg:18px;--radius-md:12px;--radius-sm:8px;--font-sans:"DM Sans", sans-serif;--font-serif:"Fraunces", serif}*,:before,:after{box-sizing:border-box}body{font-family:var(--font-sans,"DM Sans", sans-serif);color:var(--ink);background:radial-gradient(circle at top left, #c66b3d24, transparent 30%), radial-gradient(circle at bottom right, #0f766e21, transparent 32%), var(--bg);min-height:100vh;margin:0}button,input,textarea,select{font:inherit}.app{max-width:1360px;margin:0 auto;padding:24px 20px 60px}.header{justify-content:space-between;align-items:center;gap:16px;margin-bottom:28px;display:flex}.brand{align-items:baseline;gap:10px;display:flex}.brand-name{font-family:var(--font-serif,"Fraunces", serif);color:var(--ink);margin:0;font-size:1.6rem;font-weight:700}.brand-tag{text-transform:uppercase;letter-spacing:.12em;color:var(--warm);font-size:.75rem;font-weight:600}.main-grid{grid-template-columns:340px 1fr;align-items:start;gap:18px;display:grid}.card{background:var(--surface);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border:1px solid var(--line);border-radius:var(--radius-lg);box-shadow:var(--shadow);padding:20px}.card+.card{margin-top:14px}.card-title{text-transform:uppercase;letter-spacing:.12em;color:var(--warm);margin:0 0 14px;font-size:.72rem;font-weight:600}.card h3{font-family:var(--font-serif,"Fraunces", serif);margin:0 0 4px;font-size:1.05rem}.btn{cursor:pointer;white-space:nowrap;border:1px solid #0000;border-radius:999px;justify-content:center;align-items:center;gap:7px;padding:9px 18px;font-size:.9rem;font-weight:500;transition:opacity .15s,box-shadow .15s;display:inline-flex}.btn:disabled{opacity:.45;cursor:not-allowed}.btn-primary{background:var(--accent);color:#fff;box-shadow:var(--shadow)}.btn-primary:hover:not(:disabled){opacity:.88}.btn-warm{background:var(--warm);color:#fff;box-shadow:var(--shadow)}.btn-warm:hover:not(:disabled){opacity:.88}.btn-ghost{color:var(--ink);border-color:var(--line);background:#fffaf0cc}.btn-ghost:hover:not(:disabled){background:#fffaf0}.btn-danger{background:var(--danger);color:#fff}.btn-danger:hover:not(:disabled){opacity:.88}.btn-sm{padding:6px 13px;font-size:.82rem}.btn-full{width:100%}.upload-zone{border:2px dashed var(--line);border-radius:var(--radius-md);cursor:pointer;background:#fffaf080;align-items:center;gap:12px;padding:16px;transition:border-color .15s,background .15s;display:flex}.upload-zone:hover{border-color:var(--accent);background:var(--accent-soft)}.upload-zone.has-file{border-style:solid;border-color:var(--accent)}.upload-icon{flex-shrink:0;font-size:1.4rem}.upload-label{color:var(--muted);font-size:.88rem}.upload-filename{color:var(--ink);word-break:break-all;font-size:.88rem;font-weight:500}input[type=file]{display:none}.score-table{border-collapse:collapse;width:100%;font-size:.88rem}.score-table th{text-align:left;color:var(--muted);border-bottom:1px solid var(--line);padding:6px 8px;font-weight:500}.score-table td{border-bottom:1px solid var(--line);padding:5px 8px}.score-table tr:last-child td{border-bottom:0}.score-table .sub-row td:first-child{color:var(--muted);padding-left:22px;font-size:.82rem}.tbl-btn{cursor:pointer;border:1px solid var(--line);color:var(--accent);background:0 0;border-radius:4px;padding:1px 6px;font-size:.82rem;line-height:1.4}.tbl-btn:hover{background:var(--accent-soft)}.tbl-btn-remove{color:var(--muted);margin-left:2px}.tbl-btn-remove:hover{color:#b91c1c;background:#fef2f2;border-color:#fecaca}.score-input{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface-strong);text-align:right;width:62px;padding:4px 7px;font-size:.85rem}.label-input{border-radius:var(--radius-sm);background:0 0;border:1px solid #0000;width:100%;padding:3px 6px;font-size:.88rem}.label-input:hover,.label-input:focus{border-color:var(--line);background:var(--surface-strong);outline:none}.table-total{color:var(--accent);text-align:right;padding:8px 8px 0;font-size:.88rem;font-weight:600}.submissions-header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px;display:flex}.filter-sort-bar{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:12px;display:flex}.filter-sort-bar select{border:1px solid var(--line);color:var(--ink);cursor:pointer;background:#fffaf0cc;border-radius:999px;padding:5px 12px;font-size:.82rem}.filter-sort-bar label{color:var(--muted);font-size:.8rem}.drop-target{border:2px dashed var(--line);border-radius:var(--radius-md);text-align:center;color:var(--muted);cursor:pointer;margin-bottom:14px;padding:20px;font-size:.88rem;transition:border-color .15s,background .15s}.drop-target:hover,.drop-target.drag-over{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}.submission-list{flex-direction:column;gap:6px;display:flex}.submission-item{border-radius:var(--radius-md);cursor:pointer;border:1px solid var(--line);background:#fffaf099;align-items:center;gap:10px;padding:10px 14px;transition:background .12s,border-color .12s;display:flex}.submission-item:hover{background:#fffaf0f2}.submission-item.selected{background:var(--accent-soft);border-color:#0f766e40}.submission-name{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:.9rem;font-weight:500;overflow:hidden}.submission-score{color:var(--muted);white-space:nowrap;font-size:.85rem}.name-edit-input{border:1px solid var(--accent);border-radius:var(--radius-sm);background:var(--surface);min-width:0;color:var(--text);outline:none;flex:1;padding:2px 6px;font-size:.9rem;font-weight:500}.workspace-name-input{padding:3px 8px;font-size:1rem;font-weight:600}.status-badge{white-space:nowrap;border-radius:999px;align-items:center;gap:4px;padding:3px 9px;font-size:.75rem;font-weight:500;display:inline-flex}.status-pending{color:var(--muted);background:#5865691a}.status-grading{background:var(--accent-soft);color:var(--accent)}.status-graded{color:var(--good);background:#1d7a461c}.status-failed{color:var(--danger);background:#b91c1c1a}@keyframes spin{to{transform:rotate(360deg)}}.spinner{border:2px solid;border-top-color:#0000;border-radius:50%;width:12px;height:12px;animation:.7s linear infinite spin;display:inline-block}.workspace{grid-template-columns:1fr 360px;align-items:start;gap:14px;margin-top:18px;display:grid}.workspace-nav{justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px;display:flex}.workspace-student{font-family:var(--font-serif,"Fraunces", serif);font-size:1.1rem;font-weight:600}.pdf-frame{border-radius:var(--radius-lg);border:1px solid var(--line);box-shadow:var(--shadow);background:#fff;overflow:hidden}.pdf-toolbar{border-bottom:1px solid var(--line);color:var(--muted);justify-content:space-between;align-items:center;gap:12px;padding:10px 14px;font-size:.85rem;display:flex}.pdf-body{background:#f0ece5;justify-content:center;max-height:calc(100vh - 140px);padding:8px;display:flex;overflow-y:auto}.pdf-body .react-pdf__Document{flex-direction:column;align-items:center;gap:12px;display:flex}.pdf-body .react-pdf__Page{box-shadow:0 2px 12px #00000026}.pdf-loading,.pdf-error{text-align:center;color:var(--muted);padding:40px;font-size:.9rem}.grading-panel{flex-direction:column;gap:12px;display:flex}.grading-actions{flex-wrap:wrap;gap:8px;display:flex}.grading-timer{border-radius:var(--radius-md);background:var(--accent-soft);color:var(--accent);align-items:center;gap:8px;padding:10px 14px;font-size:.88rem;font-weight:500;display:flex}.grading-mode-row{align-items:center;gap:8px;display:flex}.grading-mode-row label{color:var(--muted);font-size:.82rem}.grading-mode-row select{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface-strong);padding:5px 10px;font-size:.85rem}.error-banner{border-radius:var(--radius-md);color:var(--danger);background:#b91c1c14;padding:10px 14px;font-size:.85rem}.question-card{border-radius:var(--radius-md);background:var(--surface);border:1px solid var(--line);padding:14px 16px}.question-header{justify-content:space-between;align-items:center;gap:8px;margin-bottom:10px;display:flex}.question-label{font-size:.92rem;font-weight:600}.score-row{color:var(--muted);align-items:center;gap:6px;font-size:.88rem;display:flex}.awarded-input{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface-strong);width:56px;color:var(--accent);text-align:center;padding:4px 7px;font-size:.9rem;font-weight:600}.feedback-area{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface-strong);resize:vertical;width:100%;min-height:60px;margin-top:8px;padding:8px 10px;font-size:.83rem;line-height:1.5}.sub-question{border-top:1px solid var(--line);margin-top:8px;padding-top:8px}.sub-question-header{justify-content:space-between;align-items:center;gap:8px;margin-bottom:6px;display:flex}.sub-question-label{color:var(--muted);font-size:.82rem}.summary-area{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface-strong);resize:vertical;width:100%;min-height:72px;padding:8px 10px;font-size:.85rem;line-height:1.5}.export-section{border-top:1px solid var(--line);margin-top:28px;padding-top:24px}.stats-row{flex-wrap:wrap;gap:14px;margin-bottom:16px;display:flex}.stat-chip{border-radius:var(--radius-md);background:var(--surface);border:1px solid var(--line);padding:8px 16px;font-size:.85rem}.stat-chip strong{color:var(--accent);font-size:1.2rem;font-family:var(--font-serif,"Fraunces", serif);display:block}.divider{background:var(--line);height:1px;margin:14px 0}.empty-state{text-align:center;color:var(--muted);padding:32px 20px;font-size:.9rem}.tag{background:var(--accent-soft);color:var(--accent);border-radius:999px;align-items:center;padding:2px 8px;font-size:.75rem;display:inline-flex}.grades-copy-table{border-collapse:collapse;white-space:nowrap;-webkit-user-select:text;user-select:text;font-size:.82rem}.grades-copy-table th{background:var(--accent-soft);color:var(--accent);border:1px solid var(--line);text-align:left;padding:7px 12px;font-weight:600}.grades-copy-table td{border:1px solid var(--line);vertical-align:top;white-space:pre-wrap;max-width:280px;padding:6px 12px}.grades-copy-table tr:nth-child(2n) td{background:#fffaf0b3}.grades-copy-table tr:nth-child(odd) td{background:var(--surface-strong)}@media (max-width:1100px){.main-grid,.workspace{grid-template-columns:1fr}.grading-panel{max-height:none!important;overflow-y:visible!important}}@media (max-width:640px){.app{padding:14px 12px 40px}.header{flex-direction:column;align-items:flex-start}}
