:root{--purple-50:#f6f4fd;--purple-100:#ece8fb;--purple-200:#d9d1f6;--purple-400:#a99be6;--purple-500:#8b7fd4;--purple-700:#5b4fa8;--text:#2e2a40;--muted:#6c6782;--white:#fff;--ok-bg:#e7f5ec;--ok-text:#2f7d4f;--err-bg:#fdecea;--err-text:#b3261e;--radius:16px;color:var(--text);background:var(--purple-50);font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,sans-serif;line-height:1.5}*{box-sizing:border-box}body{background:var(--purple-50);min-width:320px;margin:0}.page{flex-direction:column;min-height:100vh;display:flex}.topbar{background:var(--white);border-bottom:1px solid var(--purple-100);padding:10px 16px}.topbar-inner{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;max-width:960px;margin:0 auto;display:flex}.brand{align-items:center;gap:10px;display:flex}.brand-logo{background:var(--purple-500);width:36px;height:36px;color:var(--white);border-radius:10px;place-items:center;font-size:20px;display:grid}.brand-name{color:var(--purple-700);font-size:18px;font-weight:700}.user-box{align-items:center;gap:10px;font-size:14px;display:flex}.user-name{align-items:center;gap:6px;font-weight:600;display:flex}.role-tag{background:var(--purple-100);color:var(--purple-700);border-radius:999px;padding:2px 8px;font-size:12px;font-weight:600}.content{flex:1;width:100%;max-width:760px;margin:0 auto;padding:24px 16px}.stack{flex-direction:column;gap:16px;display:flex}.card{background:var(--white);border:1px solid var(--purple-100);border-radius:var(--radius);width:100%;padding:24px 20px;box-shadow:0 6px 20px #8b7fd41f}.card-narrow{max-width:420px;margin:24px auto 0}.card h1{color:var(--purple-700);margin:0 0 6px;font-size:22px}.card h2{color:var(--purple-700);margin:0 0 12px;font-size:18px}.muted{color:var(--muted);margin:0 0 16px}.form{flex-direction:column;gap:14px;display:flex}.field{flex-direction:column;gap:6px;font-size:14px;font-weight:600;display:flex}.field input,.field select{font:inherit;border:1.5px solid var(--purple-200);background:var(--white);color:var(--text);border-radius:10px;width:100%;padding:10px 12px;font-size:16px;font-weight:400}.field input:focus,.field select:focus{border-color:var(--purple-500);box-shadow:0 0 0 3px var(--purple-100);outline:none}.inline-form{background:var(--purple-50);border-radius:10px;margin-top:10px;padding:12px}.btn{font:inherit;cursor:pointer;border:2px solid #0000;border-radius:12px;padding:11px 20px;font-size:16px;font-weight:600}.btn-small{border-radius:10px;padding:6px 12px;font-size:14px}.btn:disabled{cursor:not-allowed;opacity:.6}.btn-primary{background:var(--purple-500);color:var(--white)}.btn-primary:hover:not(:disabled){background:var(--purple-700)}.btn-secondary{background:var(--white);color:var(--purple-700);border-color:var(--purple-200)}.notice{background:var(--purple-100);color:var(--purple-700);border-radius:10px;padding:10px 12px;font-size:14px}.alert{border-radius:10px;margin-top:8px;padding:10px 12px;font-size:14px}.alert-error{background:var(--err-bg);color:var(--err-text)}.alert-ok{background:var(--ok-bg);color:var(--ok-text)}.simple-list{margin:0;padding:0;list-style:none}.simple-list li{border-top:1px solid var(--purple-100);padding:10px 0}.simple-list li:first-child{border-top:none}.row-between{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;display:flex}.center-screen{flex-direction:column;align-items:center;gap:12px;padding:48px 0;display:flex}.spinner{border:3px solid var(--purple-100);border-top-color:var(--purple-500);border-radius:50%;width:32px;height:32px;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.footer{text-align:center;color:var(--muted);padding:16px;font-size:13px}.check-box{border:1px dashed var(--purple-200);text-align:left;border-radius:10px;margin-top:20px;padding:12px;font-size:13px}.check-title{color:var(--purple-700);margin-bottom:6px;font-weight:600}.check-row{align-items:flex-start;gap:8px;padding:2px 0;display:flex}.check-icon{flex-shrink:0;width:16px;font-weight:700}.check-ok{color:var(--ok-text)}.check-error{color:var(--err-text)}.check-loading{color:var(--muted)}a.btn{text-align:center;text-decoration:none;display:inline-block}.btn-danger{background:var(--err-text);color:var(--white)}.small{font-size:13px}.hint{margin:8px 0 0}.error-text{color:var(--err-text);font-weight:600}.back-link{color:var(--purple-700);font-size:14px;font-weight:600;text-decoration:none}.list-link{color:inherit;justify-content:space-between;align-items:center;gap:8px;padding:2px 0;text-decoration:none;display:flex}.list-link:hover b{color:var(--purple-700);text-decoration:underline}.create-class{border-top:1px dashed var(--purple-200);margin-top:16px;padding-top:16px}.input-row{flex-wrap:wrap;gap:8px;display:flex}.input-row input{flex:200px}.button-row{flex-wrap:wrap;gap:8px;margin-top:12px;display:flex}.steps{flex-direction:column;gap:8px;margin:8px 0 16px;padding-left:20px;font-size:15px;display:flex}.file-field input[type=file]{background:var(--purple-50);cursor:pointer;border-style:dashed;padding:10px}.summary{flex-wrap:wrap;gap:6px;margin:8px 0 12px;display:flex}.chip{background:var(--purple-100);color:var(--purple-700);border-radius:999px;padding:3px 10px;font-size:13px;font-weight:600}.chip-ok{background:var(--ok-bg);color:var(--ok-text)}.chip-error{background:var(--err-bg);color:var(--err-text)}.table-wrap{border:1px solid var(--purple-100);border-radius:10px;width:100%;margin-top:8px;overflow-x:auto}.table{border-collapse:collapse;width:100%;font-size:14px}.table th,.table td{text-align:left;vertical-align:top;border-bottom:1px solid var(--purple-100);padding:8px 10px}.table th{background:var(--purple-50);color:var(--purple-700);white-space:nowrap}.row-invalid td:last-child,.row-failed td:last-child,.row-unknown td:last-child{color:var(--err-text)}.row-ready td:last-child,.row-created td:last-child{color:var(--ok-text)}.stack-sm{flex-direction:column;gap:10px;display:flex}.ok-text{color:var(--ok-text)}.meta-list{flex-wrap:wrap;gap:4px 16px;margin:4px 0 12px;padding:0;font-size:14px;list-style:none;display:flex}.err-list{margin:0;padding-left:18px}.question-list{flex-direction:column;gap:10px;margin:0;padding:0;list-style:none;display:flex}.question-card{border:1px solid var(--purple-100);border-radius:12px;padding:12px 14px}.q-text{margin:8px 0;font-size:16px}.mc-options{margin:0;padding-left:22px}.mc-options li{padding:2px 0}.mc-correct{font-weight:600}.answer-box{flex-direction:column;gap:6px;font-size:15px;display:flex}.pieces{flex-wrap:wrap;gap:6px;display:flex}.piece{background:var(--purple-50);border:1px solid var(--purple-200);border-radius:8px;padding:4px 10px}.piece small{color:var(--muted)}.nowrap{white-space:nowrap}:root{--warn-bg:#fff4e0;--warn-text:#8a5300}.chip-warn,.alert-warn{background:var(--warn-bg);color:var(--warn-text)}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.center{justify-content:center}.assignment-cards{flex-direction:column;gap:10px;margin:0;padding:0;list-style:none;display:flex}.assignment-card{border:1px solid var(--purple-100);border-radius:14px;flex-direction:column;gap:8px;padding:12px 14px;display:flex}.assignment-title{color:var(--purple-700);font-size:16px}.score{color:var(--purple-700)}.history{margin-top:8px;font-size:14px}.history summary{cursor:pointer;color:var(--purple-700);font-weight:600}.question-do{padding:16px;transition:border-color .2s}.question-do.q-done{border-color:var(--purple-400)}.choices{flex-direction:column;gap:8px;display:flex}.choice{border:1.5px solid var(--purple-100);cursor:pointer;border-radius:12px;align-items:center;gap:10px;padding:10px 12px;font-size:16px;display:flex}.choice input{opacity:0;pointer-events:none;position:absolute}.choice:hover{border-color:var(--purple-200)}.choice-on{border-color:var(--purple-500);background:var(--purple-50)}.choice:focus-within{box-shadow:0 0 0 3px var(--purple-100)}.choice-letter{background:var(--purple-100);width:28px;height:28px;color:var(--purple-700);border-radius:50%;flex-shrink:0;place-items:center;font-size:14px;font-weight:700;display:grid}.choice-on .choice-letter{background:var(--purple-500);color:var(--white)}.answer-input{font-size:18px!important}.ordering{flex-direction:column;gap:10px;display:flex}.ordering-answer{border:1.5px dashed var(--purple-200);background:var(--purple-50);border-radius:12px;flex-wrap:wrap;align-items:center;gap:6px;min-height:52px;padding:8px;display:flex}.piece-btn,.piece-picked{font:inherit;cursor:pointer;padding:6px 14px;font-size:18px}.piece-btn{background:var(--white)}.piece-btn:hover:not(:disabled){border-color:var(--purple-500)}.piece-picked{background:var(--purple-500);color:var(--white);border-color:var(--purple-500)}.submit-bar{position:sticky;bottom:8px;box-shadow:0 -2px 16px #8b7fd42e}.submit-bar .muted{margin-bottom:4px}.result-summary{text-align:center}.big-score{color:var(--purple-700);font-size:56px;font-weight:800;line-height:1.1}.big-score span{color:var(--muted);font-size:28px;font-weight:600}.review-ok{box-shadow:inset 4px 0 0 var(--ok-text), 0 6px 20px #8b7fd41f;border-left:0}.review-bad{box-shadow:inset 4px 0 0 var(--err-text), 0 6px 20px #8b7fd41f}.filter-row{flex-wrap:wrap;gap:6px;margin-bottom:8px;display:flex}.chip-btn{cursor:pointer;font:inherit;border:1.5px solid #0000;font-size:13px;font-weight:600}.chip-active{border-color:var(--purple-500);background:var(--purple-500);color:var(--white)}.results-table td{vertical-align:middle}.attempts-row td{background:var(--purple-50)}.results-table .chip{white-space:nowrap}
