:root{--bg: #f5f6f8;--surface: #ffffff;--border: #d9dde3;--text: #1c2330;--muted: #5b6472;--accent: #2f6fed;--accent-dark: #2456b8;--danger: #c0392b;--success: #1e7e46;--warning: #9a6b00;--radius: 8px}*{box-sizing:border-box}body{margin:0;font-family:Segoe UI,system-ui,-apple-system,sans-serif;background:var(--bg);color:var(--text);font-size:15px;line-height:1.5}.layout{min-height:100vh;display:flex;flex-direction:column}.topbar{background:var(--surface);border-bottom:1px solid var(--border);padding:0 24px;height:56px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:10}.brand{font-weight:700;font-size:17px;color:var(--text);text-decoration:none}.topbar-right{display:flex;align-items:center;gap:12px}.user-chip{color:var(--muted);font-size:14px}.user-chip em{font-style:normal;color:var(--muted);opacity:.75}.content{flex:1;width:100%;max-width:1080px;margin:0 auto;padding:24px}.content-workspace{max-width:none;padding:16px clamp(16px,2vw,32px) 24px}.layout:has(.is-focused) .topbar{display:none}.student-assignment-layout.is-focused .assignment-navigation,.student-assignment-layout.is-focused .assignment-overview{display:none}.student-assignment-layout.is-focused .exercise-toolbar{top:0}.assignment-overview .page-title{font-size:22px;margin:12px 0 2px}.assignment-overview .page-sub{margin:0 0 10px;font-size:13px}.assignment-instructions{margin-bottom:12px;font-size:13px}.assignment-instructions summary{cursor:pointer}.assignment-instructions summary span{display:inline-block;max-width:min(70vw,880px);vertical-align:bottom;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;margin-left:8px}.assignment-instructions[open] summary span{display:none}.exercise-toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:10px 16px;position:sticky;top:56px;z-index:4;background:var(--bg);padding:10px 0}.exercise-toolbar h2{font-size:17px;margin:0}.exercise-toolbar .exercise-total{margin-left:auto}.exercise-progress-bar{display:block;width:100%;height:4px;border:0;accent-color:var(--accent);background:var(--border)}.exercise-progress-bar::-webkit-progress-bar{background:var(--border)}.exercise-progress-bar::-webkit-progress-value{background:var(--accent)}.exercise-progress-bar::-moz-progress-bar{background:var(--accent)}.page-loading{text-align:center;color:var(--muted);padding-top:80px}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:20px;margin-bottom:20px}.card h2{margin-top:0;font-size:18px}.card h3{margin-top:0;font-size:16px}.muted{color:var(--muted)}.teaching-team-row{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px}.teaching-team-row>div{min-width:0;overflow-wrap:anywhere}.small{font-size:13px}.grid-2{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:16px}.field{margin-bottom:14px}.field label{display:block;font-weight:600;font-size:14px;margin-bottom:4px}.field input,.field select,.field textarea{width:100%;padding:8px 10px;border:1px solid var(--border);border-radius:6px;font:inherit;background:var(--surface);color:var(--text)}.field input:focus,.field select:focus,.field textarea:focus{outline:2px solid var(--accent);outline-offset:0;border-color:var(--accent)}.field textarea{min-height:120px;resize:vertical}.form-row{display:flex;gap:16px;flex-wrap:wrap}.form-row .field{flex:1;min-width:180px}.char-count{text-align:right;font-size:12px;color:var(--muted)}.btn{display:inline-block;padding:8px 16px;border:1px solid var(--accent);border-radius:6px;background:var(--accent);color:#fff;font:inherit;font-weight:600;cursor:pointer;text-decoration:none}.btn:hover{background:var(--accent-dark)}.btn:disabled{opacity:.55;cursor:not-allowed}.btn-ghost{background:transparent;color:var(--accent)}.btn-ghost:hover{background:var(--accent);color:#fff}.btn-danger{background:var(--danger);border-color:var(--danger)}.btn-danger:hover{background:#a93226}.btn-small{padding:4px 10px;font-size:13px}.btn-row{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px}.error-box{background:#fdecea;border:1px solid #f5c6c1;color:var(--danger);border-radius:6px;padding:10px 14px;margin-bottom:14px;white-space:pre-wrap}.success-box{background:#eaf6ef;border:1px solid #bfe3cf;color:var(--success);border-radius:6px;padding:10px 14px;margin-bottom:14px}.warning-box{background:#fff6e5;border:1px solid #f2dcae;color:var(--warning);border-radius:6px;padding:10px 14px;margin-bottom:14px}.chip{display:inline-block;padding:2px 10px;border-radius:999px;font-size:12px;font-weight:600;text-transform:capitalize;letter-spacing:.03em}.chip-pending{background:#eceff3;color:var(--muted)}.chip-draft{background:#fff6e5;color:var(--warning)}.chip-final{background:#eaf6ef;color:var(--success)}.chip-review{background:#fdecea;color:var(--danger)}.chip-submitted{background:#e8f0fe;color:var(--accent)}.table-wrap{overflow-x:auto}table.data{width:100%;border-collapse:collapse;background:var(--surface)}table.data th,table.data td{border:1px solid var(--border);padding:8px 10px;text-align:left;vertical-align:top}table.data th{background:#f0f2f5;font-size:13px;text-transform:none;letter-spacing:.03em;color:var(--muted)}table.data td.num,table.data th.num{text-align:right;font-variant-numeric:tabular-nums}table.data td.center,table.data th.center{text-align:center}.cell-graded{font-weight:600}.cell-final{color:var(--success)}.cell-blank{color:var(--muted)}.auth-wrap{max-width:420px;margin:48px auto}.auth-wrap .card{padding:28px}.auth-wrap h1{margin:0 0 4px;font-size:22px}.auth-wrap .sub{color:var(--muted);margin-bottom:20px}.auth-switch{margin-top:16px;text-align:center;font-size:14px;color:var(--muted)}.divider{display:flex;align-items:center;gap:12px;margin:20px 0 16px;color:var(--muted);font-size:12px;font-weight:600;text-transform:none;letter-spacing:.05em}.divider:before,.divider:after{content:"";flex:1;height:1px;background:var(--border)}.oauth-row{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin-bottom:4px}.link-list{list-style:none;margin:0;padding:0}.link-list li{border-bottom:1px solid var(--border);padding:10px 0}.link-list li:last-child{border-bottom:none}.page-title{font-size:22px;margin:0 0 16px}.page-sub{color:var(--muted);margin:-8px 0 20px}.back-link{display:inline-block;margin-bottom:12px;color:var(--accent);text-decoration:none;font-size:14px}.back-link:hover{text-decoration:underline}.copy-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.code{font-family:Consolas,Courier New,monospace;background:#f0f2f5;border:1px solid var(--border);border-radius:6px;padding:4px 10px;font-size:15px;letter-spacing:.06em}.criterion-row{display:grid;grid-template-columns:1fr 2fr 100px 36px;gap:8px;align-items:start;margin-bottom:8px}.criterion-row input{padding:7px 9px;border:1px solid var(--border);border-radius:6px;font:inherit}.rubric-total{font-weight:700;margin-top:8px}.answer-box{background:#f8f9fb;border:1px solid var(--border);border-radius:6px;padding:14px;white-space:pre-wrap;word-break:break-word}.criterion-score-row{display:grid;grid-template-columns:1fr 110px 1fr;gap:10px;align-items:start;margin-bottom:12px;padding-bottom:12px;border-bottom:1px solid var(--border)}.criterion-score-row .meta{font-weight:600}.criterion-score-row .meta .small{font-weight:400}.score-input{width:100%;padding:7px 9px;border:1px solid var(--border);border-radius:6px;font:inherit}.criterion-comment{min-width:0;min-height:4.5em;line-height:1.5;overflow-y:auto;overflow-wrap:anywhere;resize:vertical}.exercise-section-heading{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:12px}.exercise-section-heading h2,.exercise-section-heading h3{margin:0}.exercise-builder{margin-top:24px}.exercise-editor{border-top:1px solid var(--border);padding:24px 0}.exercise-editor .exercise-section-heading{margin-bottom:20px}.exercise-rubric{padding:0;border:0;min-width:0}.exercise-rubric legend{font-weight:600;margin-bottom:10px}.exercise-tabs{display:flex;gap:4px;overflow-x:auto;border-bottom:1px solid var(--border);margin:12px 0 0;padding:0 0 1px}.exercise-workspace-body,.exercise-active-content{min-width:0}.exercise-tab{display:flex;align-items:center;gap:10px;text-align:left;font:inherit;color:var(--text);border:0;border-bottom:2px solid transparent;flex-shrink:0;max-width:300px;padding:10px 12px;background:transparent;cursor:pointer;transition:background .14s ease,border-color .14s ease}.exercise-tab>span:nth-child(2){flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.exercise-tab:hover,.exercise-tab.is-current{background:#eaf1ff;border-bottom-color:var(--accent)}.exercise-tab:focus-visible{outline:2px solid var(--accent)}.exercise-number{color:var(--muted);min-width:20px}.exercise-answer-state{color:var(--accent-dark);font-size:13px}.export-control{display:inline-flex;flex-direction:column;align-items:flex-start;gap:4px}.export-error{color:var(--danger);max-width:280px}.attachments{margin:20px 0;padding-top:12px;border-top:1px solid var(--border);min-width:0}.attachments h3{margin:0 0 10px;font-size:16px}.attachment-list{list-style:none;padding:0;margin:10px 0}.attachment-list li{display:flex;align-items:center;flex-wrap:wrap;gap:8px 12px;margin:8px 0}.attachment-list .export-control{min-width:0;max-width:100%}.attachment-list .btn{white-space:normal;overflow-wrap:anywhere;max-width:100%}.attachment-filename{min-width:0;overflow-wrap:anywhere}.attachment-picker input[type=file]{width:100%;max-width:100%}.attachment-picker summary{cursor:pointer;font-size:13px}.exercise-question{padding-top:12px;animation:exercise-appear .16s ease-out}.exercise-question h3{font-size:20px;margin:2px 0 12px}.exercise-heading{display:flex;justify-content:space-between;align-items:center;gap:16px}.exercise-heading p{margin:0}.translation-workbench{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:clamp(16px,2vw,32px);align-items:start}.translation-workbench.is-preview{grid-template-columns:minmax(0,1fr)}.translation-workbench.is-preview .source-text{min-height:0}.translation-workbench h4,.translation-pane label{font-size:14px;margin:0 0 8px;font-weight:600}.source-pane,.translation-pane{min-width:0}.translation-pane .field{margin:0}.translation-pane textarea,.translation-pane .answer-box,.translation-workbench .source-text{min-height:clamp(280px,calc(100dvh - 370px),720px);padding:20px;font-size:16px;line-height:1.8;border-radius:6px;background:var(--surface)}.translation-pane textarea{width:100%;resize:vertical}.is-focused .translation-pane textarea,.is-focused .translation-pane .answer-box,.is-focused .translation-workbench .source-text{min-height:max(320px,calc(100dvh - 230px))}.exercise-prompt{white-space:pre-wrap;overflow-wrap:anywhere}.source-text{border-left:3px solid var(--border);padding:12px 16px;background:var(--surface);line-height:1.8}.exercise-scoring{margin:20px 0;padding:12px 0;border-top:1px solid var(--border);border-bottom:1px solid var(--border)}.exercise-scoring summary{font-size:14px;cursor:pointer;font-weight:600}.exercise-submit{border-top:1px solid var(--border);padding:16px 0;margin-top:16px}.exercise-controls{display:flex;gap:8px;flex-shrink:0}.exercise-submit{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.exercise-submit p{font-size:13px;margin:0}.exercise-submit p:first-child{flex:1 1 320px}.exercise-review{border-top:1px solid var(--border);padding:12px 0}.exercise-inline-scores{margin-top:20px}.exercise-results{margin-top:16px;border-top:1px solid var(--border);padding-top:12px}.exercise-results h4{margin:0 0 8px;font-size:14px}.student-exercise-review{scroll-margin-top:130px;padding:20px 0}.student-exercise-review h3{margin:0 0 12px;font-size:20px}.student-exercise-review h4{margin:12px 0 8px;font-size:14px}.graded-exercise-answer{margin-top:16px}.student-exercise-review .exercise-results{margin-top:12px}.student-exercise-review .exercise-reference-key{margin-bottom:0}.is-focused .student-exercise-review{scroll-margin-top:80px}.exercise-reference-key{margin:20px 0;padding-top:12px;border-top:1px solid var(--border)}.criterion-score-row input{min-width:0}@keyframes exercise-appear{0%{opacity:0;transform:translateY(3px)}to{opacity:1;transform:translateY(0)}}@media (prefers-reduced-motion: reduce){.exercise-question{animation:none}.exercise-tab{transition:none}}@media (max-width: 760px){.criterion-score-row{grid-template-columns:minmax(0,1fr) 90px}.criterion-score-row .criterion-comment{grid-column:1 / -1}.translation-workbench{grid-template-columns:minmax(0,1fr)}.translation-workbench .source-text{min-height:0}.translation-pane textarea,.translation-pane .answer-box{min-height:280px}.is-focused .translation-workbench .source-text{min-height:0}.is-focused .translation-pane textarea,.is-focused .translation-pane .answer-box{min-height:45dvh}.exercise-toolbar .exercise-total{display:none}.exercise-toolbar{gap:8px 12px}.exercise-heading{flex-wrap:wrap;gap:0;margin-bottom:12px}.exercise-controls{margin-left:auto}.exercise-tab{max-width:230px}.exercise-editor .criterion-row{grid-template-columns:minmax(0,1fr) 90px 36px}.exercise-editor .criterion-row input:first-child{grid-column:1 / -1}.exercise-editor .criterion-row input{min-width:0;width:100%}.exercise-controls .btn{font-size:13px;padding:8px 10px}.exercise-controls{gap:6px}.exercise-tab{padding:10px 8px}}.assignment-navigation-row{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px}.student-assignment-layout,.assignment-content{min-width:0}.assignment-navigation{position:relative;display:flex;align-items:center;flex-wrap:wrap;gap:8px 20px;border-bottom:1px solid var(--border);padding-bottom:10px}.assignment-navigation .back-link{margin:0;font-size:13px}.assignment-switcher summary{cursor:pointer;font-size:13px;font-weight:600}.assignment-navigation nav.assignment-navigation-row{margin-left:auto}.assignment-preview-panel{position:absolute;top:calc(100% + 4px);left:0;width:min(340px,100%);max-height:min(70dvh,620px);overflow-y:auto;padding:16px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:0 8px 24px #1c233018;z-index:6;animation:exercise-appear .14s ease-out}.assignment-preview-panel h2{font-size:16px;margin:0}.assignment-navigation .assignment-navigation-row{gap:8px}.assignment-navigation nav .btn{padding:7px 8px;font-size:12px}.assignment-preview-list{display:grid;gap:10px;margin-top:20px}.assignment-preview{display:grid;gap:5px;border:1px solid var(--border);border-radius:6px;padding:12px;color:var(--text);text-decoration:none;overflow-wrap:anywhere}.assignment-preview:hover,.assignment-preview.is-current{border-color:var(--accent);background:#f0f5ff}.assignment-preview.is-current{box-shadow:inset 3px 0 var(--accent)}.assignment-preview:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.assignment-preview-description{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;font-size:13px;color:var(--muted)}.assignment-submitted{color:var(--success);font-weight:600}@media (max-width: 760px){.assignment-class-progress{display:none}.assignment-navigation{gap:8px 12px}.assignment-navigation nav.assignment-navigation-row{margin-left:0}.content-workspace{padding:12px 16px 20px}}@media (prefers-reduced-motion: reduce){.assignment-preview-panel{animation:none}}.assignment-progress{margin-top:16px}.assignment-progress progress{display:block;width:100%;height:10px;margin-top:8px;border:0;border-radius:6px;overflow:hidden;background:var(--border);accent-color:var(--accent)}.assignment-progress progress::-webkit-progress-bar{background:var(--border)}.assignment-progress progress::-webkit-progress-value{background:var(--accent)}.assignment-progress progress::-moz-progress-bar{background:var(--accent)}.stat-bar{height:8px;background:#eceff3;border-radius:4px;overflow:hidden;margin-top:4px}.stat-bar>div{height:100%;background:var(--accent)}.profile-page .card{margin-top:20px}.profile-details{display:grid;grid-template-columns:minmax(120px,1fr) minmax(0,2fr);gap:12px 20px;margin-top:24px}.profile-details dt{font-weight:600}.profile-details dd{margin:0;overflow-wrap:anywhere}@media (max-width: 600px){.profile-details{grid-template-columns:minmax(0,1fr);gap:4px}.profile-details dd{margin-bottom:12px}.topbar:has(a[href="/profile"]){height:auto;min-height:56px;flex-wrap:wrap;gap:8px;padding:12px 16px}.topbar-right{flex-wrap:wrap}}
