:root{--bg:#f5f6f8;--surface:#fff;--border:#e3e6ea;--track:#e8eaee;--text:#1e2430;--muted:#6b7280;--accent:#4f6df5;--accent-dark:#3b55d9;--danger:#d64545;--success:#2f9e63;--warning:#b97d1c;--radius:12px;--shadow:0 1px 3px #14192812}*{box-sizing:border-box}body{background:var(--bg);color:var(--text);margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:15px;line-height:1.55}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}h1{margin:0 0 12px;font-size:24px}h2{margin:0 0 10px;font-size:18px}h3{margin:0 0 8px;font-size:16px}.muted{color:var(--muted)}.small-text{font-size:13px}.app{min-height:100vh}.topnav{background:var(--surface);border-bottom:1px solid var(--border)}.topnav-inner{align-items:center;gap:28px;max-width:1080px;height:56px;margin:0 auto;padding:0 20px;display:flex}.brand{color:var(--text);font-size:17px;font-weight:700}.brand:hover{text-decoration:none}.topnav nav{gap:4px;display:flex}.nav-link{color:var(--muted);border-radius:8px;padding:6px 12px;font-weight:500}.nav-link:hover{color:var(--text);background:var(--bg);text-decoration:none}.nav-link.active{color:var(--accent);background:#eef1fe}.container{max-width:1080px;margin:0 auto;padding:24px 20px 64px}.page{flex-direction:column;gap:16px;display:flex}.page.narrow{max-width:560px}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:20px}.card-header{justify-content:space-between;align-items:baseline;display:flex}.loading{color:var(--muted);text-align:center;padding:40px 0}.error-banner{color:var(--danger);border-radius:var(--radius);background:#fdecec;border:1px solid #f3c2c2;padding:12px 16px}.button{background:var(--accent);color:#fff;cursor:pointer;border:none;border-radius:8px;padding:9px 18px;font-family:inherit;font-size:14px;font-weight:600;display:inline-block}.button:hover{background:var(--accent-dark);text-decoration:none}.button:disabled{opacity:.6;cursor:default}.button.small{padding:5px 12px;font-size:13px}.button.ghost{color:var(--accent);border:1px solid var(--border);background:0 0}.button.ghost:hover{background:var(--bg)}.badge{text-transform:capitalize;background:var(--track);color:var(--muted);border-radius:999px;padding:3px 10px;font-size:12px;font-weight:600;display:inline-block}.badge-marked,.badge-exam_ready{color:var(--success);background:#e2f4ea}.badge-in_progress,.badge-submitted{color:var(--warning);background:#fdf3e0}.badge-marking_failed{color:var(--danger);background:#fdecec}.badge-insufficient_data{background:var(--track);color:var(--muted)}.table{border-collapse:collapse;width:100%;font-size:14px}.table th{text-align:left;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;border-bottom:1px solid var(--border);padding:8px 10px;font-size:12px;font-weight:600}.table td{border-bottom:1px solid var(--border);padding:9px 10px}.table tr:last-child td{border-bottom:none}.dial-card{flex-wrap:wrap;align-items:center;gap:32px;display:flex}.dial-wrap{width:260px;position:relative}.dial{width:100%;display:block}.dial-tick{fill:var(--muted);font-size:10px}.dial-value{flex-direction:column;align-items:center;gap:4px;display:flex;position:absolute;bottom:6px;left:0;right:0}.dial-percent{font-size:30px;font-weight:700;line-height:1}.dial-side{flex-direction:column;flex:1;align-items:flex-start;gap:8px;min-width:240px;display:flex}.module-grid{grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:16px;display:grid}.module-card h3{margin-bottom:4px}.module-mean{margin:0 0 4px;font-size:24px;font-weight:700}.paper-grid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:16px;display:grid}.paper-card{flex-direction:column;align-items:flex-start;gap:8px;display:flex}.paper-card p{flex:1;margin:0}.test-header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;display:flex}.test-title{margin:0 0 10px;font-size:18px}.steps{flex-wrap:wrap;gap:6px;display:flex}.step{border:1px solid var(--border);background:var(--surface);color:var(--muted);cursor:pointer;border-radius:999px;padding:5px 14px;font-family:inherit;font-size:13px;font-weight:600}.step.done{color:var(--success);border-color:#cbe7d8}.step.active{background:var(--accent);border-color:var(--accent);color:#fff}.test-meta{flex-direction:column;align-items:flex-end;gap:4px;display:flex}.timer{font-variant-numeric:tabular-nums;font-size:22px;font-weight:700}.timer.low{color:var(--danger)}.save-indicator{min-height:18px;display:inline-block}.audio-player audio{width:100%;margin-top:8px}.audio-header{justify-content:space-between;align-items:center;gap:12px;display:flex}.question-group{margin-top:18px}.group-instructions{margin:0 0 8px;font-weight:600}.group-options{background:var(--bg);border-radius:8px;gap:4px;margin:0 0 12px;padding:12px 16px;list-style:none;display:grid}.group-options li{font-size:14px}.question{border-top:1px solid var(--border);padding:10px 0}.question-head{gap:10px;margin-bottom:8px;display:flex}.question-number{width:26px;height:26px;color:var(--accent);background:#eef1fe;border-radius:50%;flex:none;justify-content:center;align-items:center;font-size:13px;font-weight:700;display:inline-flex}.question-prompt{white-space:pre-wrap}.options{flex-direction:column;gap:6px;margin-left:36px;display:flex}.options.inline{flex-flow:wrap}.option{border:1px solid var(--border);cursor:pointer;border-radius:8px;align-items:center;gap:8px;padding:6px 12px;font-size:14px;display:flex}.option.selected{border-color:var(--accent);background:#eef1fe}.option input{accent-color:var(--accent);margin:0}.option-letter{color:var(--accent);font-weight:700}.matching-select,.text-answer input{border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:8px;min-width:200px;margin-left:36px;padding:8px 10px;font-family:inherit;font-size:14px}.text-answer{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.word-limit{color:var(--muted);font-size:12px;font-weight:600}.tabs{gap:6px;display:flex}.tab{border:1px solid var(--border);background:var(--surface);color:var(--muted);cursor:pointer;border-radius:8px;padding:7px 16px;font-family:inherit;font-size:14px;font-weight:600}.tab.active{background:var(--accent);border-color:var(--accent);color:#fff}.reading-split{grid-template-columns:1fr 1fr;align-items:start;gap:16px;display:grid}@media (width<=860px){.reading-split{grid-template-columns:1fr}}.passage,.passage-questions{max-height:70vh;overflow-y:auto}.passage-text{white-space:pre-wrap;font-size:14.5px}.writing-prompt{white-space:pre-wrap;font-weight:500}.writing-image{border:1px solid var(--border);border-radius:8px;max-width:100%;margin:8px 0}.chart-brief{background:var(--bg);border-radius:8px;margin:10px 0;padding:12px 16px;font-size:14px}.chart-brief p{white-space:pre-wrap;margin:6px 0 0}.essay-editor textarea{border:1px solid var(--border);resize:vertical;border-radius:8px;width:100%;margin-top:10px;padding:12px;font-family:inherit;font-size:14.5px;line-height:1.6}.essay-footer{align-items:baseline;gap:12px;margin-top:6px;display:flex}.word-count{color:var(--success);font-size:13px;font-weight:600}.word-count.under{color:var(--warning)}.word-count-warn{color:var(--warning);font-size:12px}.review-summary{gap:4px;margin:0 0 12px;padding-left:20px;display:grid}.test-nav{justify-content:space-between;display:flex}.band-summary{flex-wrap:wrap;gap:16px;display:flex}.band-cell{background:var(--bg);border-radius:10px;flex-direction:column;flex:1;gap:4px;min-width:110px;padding:14px;display:flex}.band-cell.overall{background:#eef1fe}.band-label{text-transform:uppercase;letter-spacing:.04em;color:var(--muted);font-size:12px;font-weight:600}.band-value{font-size:24px;font-weight:700}.band-value.big{color:var(--accent);font-size:32px}.raw-score{margin:0 0 10px;font-size:15px}.review-table .row-wrong td{background:#fdf6f6}.mark-correct{color:var(--success);font-weight:700}.mark-wrong{color:var(--danger);font-weight:700}.band-chip{color:var(--accent);background:#eef1fe;border-radius:8px;padding:4px 12px;font-size:15px;font-weight:700}.band-chip.small{padding:2px 10px;font-size:13px}.writing-review{margin-top:16px}.writing-review-header{justify-content:space-between;align-items:center;margin-bottom:12px;display:flex}.writing-review-header h3{margin:0}.criterion{border-top:1px solid var(--border);padding:12px 0}.criterion-header{justify-content:space-between;align-items:center;margin-bottom:6px;display:flex}.criterion p{white-space:pre-wrap;margin:0}.warning-card{background:snow;border-color:#f3c2c2}.field{flex-direction:column;gap:6px;margin-bottom:18px;display:flex}.field-label{font-weight:600}.field select{border:1px solid var(--border);background:var(--surface);border-radius:8px;max-width:200px;padding:8px 10px;font-family:inherit;font-size:14px}.form-actions{align-items:center;gap:12px;display:flex}.saved-note{color:var(--success);font-size:14px;font-weight:600}
