:root{--bg: #fff8dc;--paper: #fffdf3;--white: #fff;--ink: #444;--muted: #777;--faint: #999;--pink: #ff69b4;--pink-deep: #d6458f;--pink-soft: #ffe4e1;--pink-shadow: #ffc0cb;--orange: #d2691e;--dash: #ffa07a;--line: #f3d6c6;--blue-bg: #e8f4ff;--blue: #6aa9e0;--blue-ink: #3b7fc0;--warn-bg: #fff4e2;--warn: #a85b00;--warn-line: #f0b35a;--red: #d9534f;--red-soft: #f0a0a0;--red-bg: #fdeaea;--green: #2f7d45;--green-soft: #9fd3ad;--green-bg: #e8f3ea;--code-bg: #2b2d3a;--code-top: #23242f;--code-ink: #f4efe6;--hand: "Patrick Hand", "Comic Neue", cursive, sans-serif;--mono: "DejaVu Sans Mono", Monaco, Consolas, "Courier New", monospace;--correct: var(--green);--partial: var(--warn);--wrong: var(--red);--ungraded: var(--faint);color-scheme:light}*{box-sizing:border-box}html,body,#root{min-height:100%}body{margin:0;background:var(--bg);color:var(--ink);font:13pt/1.45 var(--hand)}h1,h2,h3{color:var(--pink);text-shadow:1px 1px var(--pink-shadow);line-height:1.2;margin:0 0 .5rem;font-weight:400}h1{font-size:2rem}h2{font-size:1.45rem}h3,h4{color:var(--orange);text-shadow:none}p{margin:0 0 .75rem}:focus-visible{outline:2px solid var(--pink);outline-offset:2px}.muted{color:var(--muted)}.tiny{font-size:.85rem}.lead{font-size:1.15rem;color:var(--muted)}.eyebrow{display:inline-block;border:2px solid var(--pink);background:var(--pink-soft);color:var(--pink-deep);border-radius:999px;padding:1px 14px 2px;font-size:.85em;letter-spacing:.08em;text-transform:uppercase;margin-bottom:.5rem}code{background:var(--pink-soft);color:var(--orange);padding:1px 5px;border-radius:6px;font-family:var(--mono);font-size:.82em;word-break:break-word}.card{background:var(--paper);border:2px dashed var(--dash);border-radius:12px;padding:14px 22px 18px;margin:0 0 18px}button{font:inherit;font-size:1rem;color:#fff;background:var(--pink);border:2px solid var(--pink-deep);border-radius:999px;padding:4px 18px 5px;box-shadow:0 3px 0 var(--pink-deep);cursor:pointer;transition:transform .05s}button:hover:not(:disabled){background:var(--pink-deep)}button:active:not(:disabled){transform:translateY(2px);box-shadow:0 1px 0 var(--pink-deep)}button:disabled{opacity:.45;cursor:not-allowed}button.ghost{color:var(--ink);background:var(--white);border-color:var(--ink);box-shadow:0 3px 0 var(--ink)}button.ghost:hover:not(:disabled){background:var(--pink-soft)}button.ghost:active:not(:disabled){box-shadow:0 1px 0 var(--ink)}button.danger-text,.danger-text{color:var(--red)}button.ghost.danger-text{border-color:var(--red);box-shadow:0 3px 0 var(--red)}input,textarea,select{font:inherit;color:var(--ink);background:var(--white);border:2px solid var(--dash);border-radius:10px;padding:6px 12px}input:focus,textarea:focus,select:focus{border-color:var(--pink);outline:none}input[type=file]{border-style:dashed;max-width:100%}.centered{display:flex;flex-direction:column;align-items:center;gap:.75rem;padding:2rem 0}.banner{border-radius:12px;padding:10px 14px;margin-bottom:1rem}.banner.error{background:var(--red-bg);border:2px solid var(--red-soft);border-left-width:8px;color:var(--ink)}.spinner{width:30px;height:30px;border-radius:50%;border:3px solid var(--pink-soft);border-top-color:var(--pink);animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.chip{display:inline-block;font-size:.85rem;padding:0 11px 1px;border-radius:999px;border:2px solid var(--line);background:var(--white);color:var(--muted);white-space:nowrap}.chip-type{color:var(--blue-ink);border-color:var(--blue);background:var(--blue-bg)}.chip.warn{color:var(--warn);border-color:var(--warn-line);background:var(--warn-bg)}.chip.status-in_progress{color:var(--blue-ink);border-color:var(--blue);background:var(--blue-bg)}.chip.status-submitted{color:var(--pink-deep);border-color:var(--pink);background:var(--pink-soft)}.chip.status-reviewed,.chip.grade-pass{color:var(--green);border-color:var(--green-soft);background:var(--green-bg)}.chip.grade-fail{color:var(--red);border-color:var(--red-soft);background:var(--red-bg)}.chip.suspicion-calm{color:var(--green);border-color:var(--green-soft);background:var(--green-bg)}.chip.suspicion-warm{color:var(--warn);border-color:var(--warn-line);background:var(--warn-bg)}.chip.suspicion-hot{color:var(--red);border-color:var(--red-soft);background:var(--red-bg)}.badge{font-size:.85rem;padding:0 10px 1px;border-radius:999px;border:2px solid;white-space:nowrap}.badge-correct{color:var(--green);border-color:var(--green-soft);background:var(--green-bg)}.badge-partial{color:var(--warn);border-color:var(--warn-line);background:var(--warn-bg)}.badge-wrong{color:var(--red);border-color:var(--red-soft);background:var(--red-bg)}.badge-ungraded{color:var(--muted);border-color:var(--line);background:var(--white)}.code-block{margin:.6rem 0 1rem;background:var(--code-bg);border-radius:14px;overflow:hidden;box-shadow:0 10px 24px #2b2d3a2e}.code-block figcaption{display:flex;align-items:center;justify-content:flex-end;padding:8px 16px;background:var(--code-top);color:#9da3b4;font:9pt var(--mono);position:relative}.code-block figcaption:before{content:"";position:absolute;left:16px;top:50%;width:11px;height:11px;margin-top:-5.5px;border-radius:50%;background:#ff5f57;box-shadow:18px 0 #febc2e,36px 0 #28c840}.code-block pre{margin:0;padding:14px 18px;overflow-x:auto}.code-block code{background:none;padding:0;color:var(--code-ink);font:10.5pt/1.5 var(--mono);word-break:normal}.answer-block{margin-top:.9rem}.answer-block h4{margin:0 0 .25rem;font-size:1rem;font-weight:400}.answer-block p{white-space:pre-wrap}.your-answer{white-space:pre-wrap;background:var(--white);border:2px solid var(--line);border-radius:12px;padding:8px 12px}.correct-answer{color:var(--green);background:var(--green-bg);border:2px solid var(--green-soft);border-radius:12px;padding:8px 12px}.answer-block.explanation p{background:var(--blue-bg);border:2px solid var(--blue);border-radius:12px;padding:8px 12px}.result-wait,.review{max-width:880px;margin:0 auto;padding:24px 16px 96px}.result-wait{padding-top:64px}.wait-card{text-align:center;border:2px solid var(--pink);border-left-width:8px}.wait-card .spinner{margin:0 auto 1rem}.review-hero{text-align:center;padding:20px 0 6px;margin-bottom:1rem}.review-hero h1{font-size:2.6rem;color:var(--ink);text-shadow:2px 2px var(--pink-shadow);margin:.3em 0 .25em}.score-summary{margin-top:1rem}.score-value{font-size:3.2rem;line-height:1;color:var(--pink);text-shadow:2px 2px var(--pink-shadow)}.score-max{font-size:1.6rem;color:var(--muted);text-shadow:none}.score-unit{margin-top:.3rem;color:var(--muted)}.grade-block{margin:1.1rem auto 0;max-width:28rem;padding:10px 18px;border-radius:12px;border:2px solid var(--line);border-left-width:8px;background:var(--paper)}.grade-block.pass{border-color:var(--green-soft);border-left-color:var(--green);background:var(--green-bg)}.grade-block.fail{border-color:var(--red-soft);border-left-color:var(--red);background:var(--red-bg)}.grade-label{font-size:1.6rem}.grade-block.pass .grade-label{color:var(--green)}.grade-block.fail .grade-label{color:var(--red)}.grade-note{margin-top:.2rem;color:var(--muted)}.class-position{margin-top:.85rem;font-size:1.1rem}.totals{display:flex;gap:8px;justify-content:center;flex-wrap:wrap;margin-top:1rem}.total-pill{padding:1px 13px 2px;border-radius:999px;border:2px dashed var(--dash);background:var(--paper)}.total-pill.correct{color:var(--green);border:2px solid var(--green-soft);background:var(--green-bg)}.total-pill.partial{color:var(--warn);border:2px solid var(--warn-line);background:var(--warn-bg)}.total-pill.wrong{color:var(--red);border:2px solid var(--red-soft);background:var(--red-bg)}.total-pill.ungraded{color:var(--muted)}.course-report{display:grid;gap:1rem;margin-top:.8rem}.course-row-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:.3rem}.course-pct{font-variant-numeric:tabular-nums}.course-pct.strong{color:var(--green)}.course-pct.ok{color:var(--warn)}.course-pct.weak{color:var(--red)}.course-bar{height:12px;background:var(--white);border:2px solid var(--line);border-radius:999px;overflow:hidden}.course-bar-fill{height:100%;border-radius:999px}.course-bar-fill.strong{background:var(--green-soft)}.course-bar-fill.ok{background:var(--warn-line)}.course-bar-fill.weak{background:var(--red-soft)}.course-counts{margin-top:.25rem;font-size:.9rem;color:var(--muted)}.result-list{display:grid;gap:8px;margin-top:.75rem}.result-q{border:2px solid var(--line);border-radius:12px;background:var(--white);overflow:hidden}.result-q[open]{border-color:var(--dash)}.result-q summary{cursor:pointer;list-style:none;display:flex;align-items:center;gap:10px;padding:8px 14px}.result-q summary::-webkit-details-marker{display:none}.result-q summary:hover{background:var(--paper)}.result-q-number{flex:0 0 auto;min-width:1.8rem;text-align:right;color:var(--pink-deep)}.result-q-title{flex:1}.result-q-body{padding:0 14px 14px;border-top:2px dashed var(--line)}.admin{max-width:1400px;margin:0 auto;padding:24px 16px 80px}.admin-header{display:flex;justify-content:space-between;align-items:flex-start;gap:1rem;flex-wrap:wrap;margin-bottom:1rem;padding-bottom:.8rem;border-bottom:2px dashed var(--dash)}.admin-header h1{font-size:2.2rem}.admin-gate{max-width:560px;margin:4rem auto;border:2px solid var(--pink);border-left-width:8px}.admin-header-actions{display:flex;align-items:flex-end;gap:12px;flex-wrap:wrap}.admin-exam-picker{display:flex;flex-direction:column;gap:2px}.admin-exam-picker select{min-width:15rem;max-width:100%}.admin-roster-list{display:grid;gap:8px;margin-top:.6rem}.admin-roster-row{display:flex;align-items:center;gap:8px 10px;flex-wrap:wrap;padding:8px 12px;background:var(--white);border:2px solid var(--line);border-radius:12px}.admin-roster-row:hover{border-color:var(--dash)}.admin-roster-name{min-width:9rem;font-size:1.1rem;color:var(--ink)}.admin-roster-score{font-variant-numeric:tabular-nums}.admin-roster-row button{font-size:.9rem;padding:2px 13px 3px}.admin-grade-btn{margin-left:auto}.admin-publish-btn.publish{background:var(--green);border-color:#23603a;box-shadow:0 3px #23603a}.admin-publish-btn.publish:hover:not(:disabled){background:#23603a}.admin-link-text{flex-basis:100%;font-size:.8rem;word-break:break-all}.admin-matrix-head{display:flex;justify-content:space-between;align-items:center;gap:1rem;flex-wrap:wrap}.admin-switch{display:inline-flex;align-items:center;gap:8px;cursor:pointer;-webkit-user-select:none;user-select:none}.admin-switch input{position:absolute;opacity:0;width:1px;height:1px;pointer-events:none}.admin-switch-track{flex:0 0 auto;position:relative;width:42px;height:24px;border-radius:999px;background:var(--white);border:2px solid var(--dash);transition:background .15s ease,border-color .15s ease}.admin-switch-thumb{position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:var(--dash);transition:transform .15s ease,background .15s ease}.admin-switch input:checked+.admin-switch-track{background:var(--pink-soft);border-color:var(--pink)}.admin-switch input:checked+.admin-switch-track .admin-switch-thumb{transform:translate(18px);background:var(--pink)}.admin-switch input:focus-visible+.admin-switch-track{outline:2px solid var(--pink);outline-offset:2px}.admin-matrix-scroll{overflow:auto;max-height:78vh;border:2px solid var(--line);border-radius:12px;margin-top:.6rem;background:var(--white)}.admin-matrix{border-collapse:separate;border-spacing:0;width:max-content;min-width:100%}.admin-matrix th,.admin-matrix td{border-bottom:1px dashed var(--line);font-weight:400}.admin-corner{position:sticky;left:0;top:0;z-index:3;background:var(--paper);border-right:2px solid var(--line);text-align:left;padding:6px 10px;color:var(--orange)}.admin-student-head{position:sticky;top:0;z-index:2;background:var(--paper);padding:6px 4px;min-width:3.6rem;text-align:center}.admin-student-name{display:block;max-width:6.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.9rem}.admin-student-pct{display:block;font-size:.8rem;color:var(--muted);font-variant-numeric:tabular-nums}.admin-q-head{position:sticky;left:0;z-index:1;background:var(--paper);border-right:2px solid var(--line);text-align:left;padding:4px 10px;max-width:360px}.admin-q-index{color:var(--pink-deep);font-variant-numeric:tabular-nums;margin-right:6px}.admin-q-text{display:inline-block;max-width:290px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:bottom;font-size:.9rem}.admin-cell-td{padding:3px;text-align:center}.admin-cell{position:relative;width:2.2rem;height:2.2rem;padding:0;border-radius:8px;border:2px solid var(--line);box-shadow:none;font-size:1rem;background:var(--white);color:var(--muted)}.admin-cell:active:not(:disabled){box-shadow:none}.admin-cell.badge-correct,.admin-cell.badge-correct:hover:not(:disabled){background:var(--green-bg);border-color:var(--green-soft);color:var(--green)}.admin-cell.badge-partial,.admin-cell.badge-partial:hover:not(:disabled){background:var(--warn-bg);border-color:var(--warn-line);color:var(--warn)}.admin-cell.badge-wrong,.admin-cell.badge-wrong:hover:not(:disabled){background:var(--red-bg);border-color:var(--red-soft);color:var(--red)}.admin-cell.badge-ungraded:hover:not(:disabled){background:var(--paper)}.admin-cell:hover:not(:disabled){filter:brightness(.96)}.admin-cell.selected{outline:2px solid var(--pink);outline-offset:1px}.admin-cell.overridden{border-style:dashed;border-color:var(--pink-deep)}.admin-cell-mark{position:absolute;top:-4px;right:1px;font-size:.7rem;color:var(--pink-deep)}.admin-drawer-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;display:flex;justify-content:flex-end;background:color-mix(in srgb,var(--bg) 70%,transparent);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.admin-drawer{width:min(620px,100%);height:100%;overflow-y:auto;background:var(--paper);border-left:8px solid var(--pink);padding:20px 24px 40px;box-shadow:-12px 0 32px #d6458f26;animation:slidein .2s ease}@keyframes slidein{0%{transform:translate(24px);opacity:.5}to{transform:translate(0);opacity:1}}.admin-drawer-head{display:flex;justify-content:space-between;align-items:flex-start;gap:1rem;margin-bottom:.5rem}.admin-drawer-head h2{font-size:1.35rem;white-space:pre-wrap}.admin-drawer-meta{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-top:.4rem}.admin-drawer-close{flex:0 0 auto}.admin-override-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:.4rem}.admin-override-row .spinner{width:22px;height:22px}.admin-verdict-btn{color:var(--ink);background:var(--white);border-color:var(--ink);box-shadow:0 3px 0 var(--ink)}.admin-verdict-btn:hover:not(:disabled){background:var(--pink-soft)}.admin-verdict-btn.v-Korrekt.active{background:var(--green-bg);color:var(--green);border-color:var(--green);box-shadow:0 3px 0 var(--green)}.admin-verdict-btn.v-Delvis.active{background:var(--warn-bg);color:var(--warn);border-color:var(--warn);box-shadow:0 3px 0 var(--warn)}.admin-verdict-btn.v-Fel.active{background:var(--red-bg);color:var(--red);border-color:var(--red);box-shadow:0 3px 0 var(--red)}.surv-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px;margin:12px 0}.surv-stat{background:var(--white);border:2px dashed var(--dash);border-radius:10px;padding:6px 10px}.surv-stat b{display:block;font-size:1.3rem;font-weight:400}.surv-stat span{font-size:.85rem;color:var(--muted)}.surv-stat.flag{background:var(--red-bg);border:2px solid var(--red-soft)}.surv-stat.flag b{color:var(--red)}.surv-timeline{position:relative;height:30px;background:var(--white);border:2px solid var(--line);border-radius:8px;margin:10px 0 4px;overflow:hidden}.surv-timeline .seg{position:absolute;top:0;bottom:0;min-width:2px;opacity:.85;background:var(--red)}.surv-timeline .seg.window{background:var(--warn-line)}.surv-timeline .mk{position:absolute;top:0;bottom:0;width:2px}.surv-timeline .mk.paste{background:#6a4bc4}.surv-timeline .mk.fs{background:var(--ink)}.surv-timeline .mk.reload{background:var(--blue-ink)}.surv-legend{display:flex;flex-wrap:wrap;gap:12px;font-size:.85rem;color:var(--muted);margin-bottom:12px}.surv-legend i{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:5px;vertical-align:-1px}.surv-log-wrap{max-height:50vh;overflow:auto;border:2px solid var(--line);border-radius:10px;background:var(--white)}.surv-log,.surv-similar{width:100%;border-collapse:collapse;font-size:.9rem}.surv-log td,.surv-similar td{padding:4px 8px;border-top:1px dashed var(--dash);vertical-align:top}.surv-log tr:first-child td,.surv-similar tr:first-child td{border-top:none}.surv-log td:first-child{font-family:var(--mono);font-size:.8rem;white-space:nowrap;color:var(--muted)}.surv-log tr.bad td{color:var(--red)}.surv-preview{display:block;font-family:var(--mono);font-size:.75rem;color:var(--muted);white-space:pre-wrap;word-break:break-word}@media(max-width:640px){html,body{font-size:12.5pt}.review-hero h1{font-size:2rem}.card{padding:10px 16px 16px}}
