.login-brand[data-v-9cd4befa]{display:flex;align-items:center;gap:.85rem;margin-bottom:.25rem}.login-logo[data-v-9cd4befa]{width:72px;height:72px;object-fit:contain;flex-shrink:0;border-radius:50%;background:#fff}.login-card h1[data-v-9cd4befa]{margin:0 0 .2rem;font-size:1.35rem;line-height:1.2}.login-sub[data-v-9cd4befa]{margin:0;font-size:.88rem;line-height:1.35}@media(max-width:400px){.login-brand[data-v-9cd4befa]{flex-direction:column;text-align:center}}.dash-header[data-v-1bee8610]{display:flex;justify-content:space-between;align-items:flex-start;gap:.75rem;margin-bottom:.75rem}.dash-header h2[data-v-1bee8610]{margin:0 0 .15rem;font-size:1.25rem}.page-sub[data-v-1bee8610]{margin:0;font-size:.85rem}.stat-link[data-v-1bee8610]{text-decoration:none;color:inherit;transition:box-shadow .15s,border-color .15s}.stat-link[data-v-1bee8610]:hover{border-color:#93c5fd;box-shadow:0 2px 8px #1d4ed814}.stat-pending .num[data-v-1bee8610]{color:#b45309}.stat-processing .num[data-v-1bee8610]{color:#1d4ed8}.stat-scored .num[data-v-1bee8610]{color:#059669}.stat-failed .num[data-v-1bee8610]{color:#dc2626}.stat-total .num[data-v-1bee8610]{color:#0f172a}.num.sm[data-v-1bee8610]{font-size:1.15rem}.stats-secondary[data-v-1bee8610]{margin-top:.25rem}.alert-box[data-v-1bee8610]{background:#fff7ed;border:1px solid #fed7aa;color:#9a3412;border-radius:10px;padding:.65rem .85rem;margin-bottom:.75rem;font-size:.9rem}.alert-box a[data-v-1bee8610]{margin-left:.35rem;font-weight:600}.quick-actions[data-v-1bee8610]{display:flex;flex-wrap:wrap;gap:.45rem;margin:.85rem 0 .5rem}.section-title[data-v-1bee8610]{margin:1rem 0 .55rem;font-size:.95rem}.empty-card[data-v-1bee8610]{padding:1.1rem}.mono[data-v-1bee8610]{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.85em}.dash-table[data-v-1bee8610]{min-width:640px}.recent-cards[data-v-1bee8610]{display:none;flex-direction:column;gap:.55rem}.recent-card[data-v-1bee8610]{background:#fff;border:1px solid var(--border);border-radius:10px;padding:.75rem}.recent-card-top[data-v-1bee8610]{display:flex;justify-content:space-between;gap:.5rem;align-items:flex-start;margin-bottom:.45rem}.recent-name[data-v-1bee8610]{font-weight:700;color:var(--text)}.recent-scores[data-v-1bee8610]{display:flex;gap:.85rem;flex-wrap:wrap;font-size:.88rem;font-variant-numeric:tabular-nums}@media(max-width:700px){.recent-table-wrap[data-v-1bee8610]{display:none}.recent-cards[data-v-1bee8610]{display:flex}.quick-actions .btn[data-v-1bee8610]{flex:1 1 calc(50% - .45rem);min-width:0}}.page-header[data-v-a45f0c3d]{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:.75rem;margin-bottom:.75rem}.page-header h2[data-v-a45f0c3d]{margin:0 0 .15rem;font-size:1.25rem}.page-sub[data-v-a45f0c3d]{margin:0;font-size:.85rem}.view-toggle[data-v-a45f0c3d]{display:inline-flex;border:1px solid var(--border);border-radius:8px;overflow:hidden;background:#fff}.toggle-btn[data-v-a45f0c3d]{border:none;background:transparent;padding:.4rem .85rem;font:inherit;font-size:.85rem;font-weight:600;color:var(--muted);cursor:pointer}.toggle-btn.active[data-v-a45f0c3d]{background:var(--primary);color:#fff}.filters-compact[data-v-a45f0c3d]{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:.65rem;align-items:end;padding:.85rem;margin-bottom:.85rem}.filters-compact label[data-v-a45f0c3d]{display:flex;flex-direction:column;gap:.2rem;font-size:.78rem;color:var(--muted);margin:0}.filter-grow[data-v-a45f0c3d]{grid-column:span 2;min-width:0}.filter-actions[data-v-a45f0c3d]{display:flex;gap:.4rem;flex-wrap:wrap}.list-status[data-v-a45f0c3d]{padding:.5rem 0}.empty-state[data-v-a45f0c3d]{text-align:center;padding:1.5rem}.mono[data-v-a45f0c3d]{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.88em}.exam-cards[data-v-a45f0c3d]{display:none;flex-direction:column;gap:.65rem}.exam-card[data-v-a45f0c3d]{background:#fff;border:1px solid var(--border);border-radius:12px;padding:.85rem}.exam-card-top[data-v-a45f0c3d]{display:flex;justify-content:space-between;gap:.5rem;align-items:flex-start;margin-bottom:.65rem}.exam-name[data-v-a45f0c3d]{font-weight:700;font-size:1rem;color:var(--text)}.exam-code[data-v-a45f0c3d]{font-size:.8rem;margin-top:.15rem}.exam-card-badges[data-v-a45f0c3d]{display:flex;flex-wrap:wrap;gap:.25rem;justify-content:flex-end}.exam-card-scores[data-v-a45f0c3d]{display:grid;grid-template-columns:1fr 1fr;gap:.5rem}.score-block[data-v-a45f0c3d]{background:#f8fafc;border:1px solid var(--border);border-radius:10px;padding:.55rem .65rem;text-align:center}.score-block-label[data-v-a45f0c3d]{display:block;font-size:.72rem;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.03em}.score-block-main[data-v-a45f0c3d]{display:block;font-size:1.45rem;font-weight:800;line-height:1.2;font-variant-numeric:tabular-nums;margin:.1rem 0}.score-parts[data-v-a45f0c3d]{display:flex;justify-content:center;gap:.45rem;flex-wrap:wrap;font-size:.75rem;color:var(--muted);font-variant-numeric:tabular-nums}.exam-card-foot[data-v-a45f0c3d]{display:flex;justify-content:space-between;align-items:center;margin-top:.55rem;padding-top:.45rem;border-top:1px dashed var(--border)}.compact-table[data-v-a45f0c3d]{min-width:0;width:100%;font-size:.88rem}.compact-table th[data-v-a45f0c3d],.compact-table td[data-v-a45f0c3d]{padding:.4rem .35rem}.compact-table .col-name[data-v-a45f0c3d]{min-width:9rem;max-width:14rem}.compact-table .col-code[data-v-a45f0c3d]{min-width:6.5rem}.compact-table .col-stt[data-v-a45f0c3d]{width:2.5rem}.compact-table .col-status[data-v-a45f0c3d]{min-width:5.5rem}.compact-table .col-act[data-v-a45f0c3d]{width:3rem}.compact-table .col-total[data-v-a45f0c3d]{background:#f0fdf4;font-variant-numeric:tabular-nums}.compact-table thead .col-total[data-v-a45f0c3d]{background:#dcfce7}.compact-table .subhead th[data-v-a45f0c3d]{font-size:.75rem;font-weight:600;color:var(--muted);background:#f8fafc}.data-row[data-v-a45f0c3d]{cursor:pointer}.data-row[data-v-a45f0c3d]:hover{background:#f1f5f9!important}.data-row.open[data-v-a45f0c3d]{background:#eef2ff!important}.flags-cell[data-v-a45f0c3d]{white-space:nowrap}.flags-cell .badge+.badge[data-v-a45f0c3d]{margin-left:.2rem}.expand-row>td[data-v-a45f0c3d]{background:#f1f5f9;text-align:left!important;padding:.45rem .55rem!important;white-space:normal!important;border-top:none!important}.full-table[data-v-a45f0c3d]{min-width:1400px;font-size:.78rem}.full-table th[data-v-a45f0c3d],.full-table td[data-v-a45f0c3d]{padding:.3rem .28rem}.full-legend[data-v-a45f0c3d]{margin:.5rem 0 0;font-size:.78rem;padding:0 .25rem}.badge-tight[data-v-a45f0c3d]{margin-left:.2rem}.criteria-expand[data-v-a45f0c3d]{margin-top:.55rem;padding-top:.5rem;border-top:1px solid var(--border)}[data-v-a45f0c3d] .detail-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;border:1px solid var(--border);border-radius:8px;background:#fff}[data-v-a45f0c3d] .criteria-detail-table{border-collapse:collapse;width:max-content;min-width:100%;font-size:.78rem;font-variant-numeric:tabular-nums}[data-v-a45f0c3d] .criteria-detail-table th,[data-v-a45f0c3d] .criteria-detail-table td{border:1px solid var(--border);padding:.28rem .38rem;text-align:center;white-space:nowrap}[data-v-a45f0c3d] .criteria-detail-table .d-group-row th{font-size:.72rem;font-weight:700;letter-spacing:.01em}[data-v-a45f0c3d] .criteria-detail-table .d-group.d-speak{background:#eef2ff;color:#3730a3}[data-v-a45f0c3d] .criteria-detail-table .d-group.d-write{background:#ecfdf5;color:#065f46}[data-v-a45f0c3d] .criteria-detail-table .d-sub-row th{background:#f8fafc;font-size:.7rem;font-weight:600;color:var(--muted);padding:.2rem .32rem}[data-v-a45f0c3d] .criteria-detail-table .d-data-row td{font-weight:600;background:#fff}[data-v-a45f0c3d] .criteria-detail-table .d-sum{background:#f0fdf4!important;font-weight:700}[data-v-a45f0c3d] .criteria-detail-table .d-sub-row th.d-sum{background:#dcfce7!important;color:#166534}[data-v-a45f0c3d] .detail-legend{margin:.35rem 0 0;padding:0 .15rem;font-size:.72rem;line-height:1.35}[data-v-a45f0c3d] .detail-empty{margin:0;padding:.35rem .15rem;font-size:.85rem}.pagination[data-v-a45f0c3d]{display:flex;flex-wrap:wrap;gap:.65rem;align-items:center;justify-content:center;margin-top:1rem;padding-bottom:.5rem}.page-info[data-v-a45f0c3d]{font-size:.9rem}@media(max-width:900px){.desktop-only[data-v-a45f0c3d]{display:none!important}.exam-cards[data-v-a45f0c3d]{display:flex}.view-toggle[data-v-a45f0c3d]{display:none}.filter-grow[data-v-a45f0c3d]{grid-column:1 / -1}.filters-compact[data-v-a45f0c3d]{grid-template-columns:1fr 1fr}.filter-actions[data-v-a45f0c3d]{grid-column:1 / -1}.filter-actions .btn[data-v-a45f0c3d]{flex:1}}@media(max-width:480px){.filters-compact[data-v-a45f0c3d],.exam-card-scores[data-v-a45f0c3d]{grid-template-columns:1fr}}.back-link[data-v-fe2cb03a]{margin:0 0 .65rem;font-size:.9rem;font-weight:600}.exam-header-text[data-v-fe2cb03a]{min-width:0;flex:1}.mono[data-v-fe2cb03a]{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.9em}.muted-id[data-v-fe2cb03a]{word-break:break-all}.meta-sep[data-v-fe2cb03a]{margin:0 .2rem;opacity:.6}.badge-gap[data-v-fe2cb03a]{margin-left:.25rem}.result-url-line[data-v-fe2cb03a]{margin:.55rem 0 0;font-size:.88rem}.toolbar-hint[data-v-fe2cb03a]{margin:.25rem 0 0;font-size:.85rem;line-height:1.4}.train-count[data-v-fe2cb03a]{margin:0;font-size:.9rem}.writing-title[data-v-fe2cb03a]{margin:0 0 .85rem;font-size:1.05rem}.writing-part[data-v-fe2cb03a]{margin-bottom:1.15rem;padding-bottom:1rem;border-bottom:1px solid var(--border)}.writing-part[data-v-fe2cb03a]:last-child{margin-bottom:0;padding-bottom:0;border-bottom:none}.writing-part-head[data-v-fe2cb03a]{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:.4rem .75rem;margin-bottom:.65rem}.writing-part-head h4[data-v-fe2cb03a]{margin:0;font-size:1rem}.writing-total[data-v-fe2cb03a]{font-weight:700;color:var(--ok);font-variant-numeric:tabular-nums;font-size:.95rem}.writing-box[data-v-fe2cb03a]{border:1px solid var(--border);border-radius:10px;background:#fff;margin-bottom:.65rem;overflow:hidden}.writing-box-label[data-v-fe2cb03a]{padding:.4rem .75rem;font-size:.78rem;font-weight:700;letter-spacing:.02em;text-transform:uppercase;color:#334155;background:#f1f5f9;border-bottom:1px solid var(--border)}.writing-box-body[data-v-fe2cb03a]{padding:.7rem .85rem;white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;line-height:1.55;font-size:.92rem;color:#1f2937;max-height:220px;overflow:auto;-webkit-overflow-scrolling:touch}.writing-box-prompt[data-v-fe2cb03a]{border-left:3px solid #6366f1}.writing-box-prompt .writing-box-label[data-v-fe2cb03a]{background:#eef2ff;color:#3730a3}.writing-box-answer[data-v-fe2cb03a]{border-left:3px solid var(--primary)}.writing-box-answer .writing-box-label[data-v-fe2cb03a]{background:#eff6ff;color:#1e40af}.writing-answer[data-v-fe2cb03a]{max-height:360px;font-size:.95rem;line-height:1.65}.writing-box-meta .writing-box-body[data-v-fe2cb03a]{max-height:120px;font-size:.88rem}.writing-criteria-wrap[data-v-fe2cb03a]{overflow-x:auto;-webkit-overflow-scrolling:touch;margin-top:.35rem}@media(max-width:480px){.exam-meta[data-v-fe2cb03a]{font-size:.82rem}.writing-box-body[data-v-fe2cb03a]{padding:.6rem .7rem;font-size:.88rem}.writing-answer[data-v-fe2cb03a]{max-height:280px}}.page-header h2[data-v-c3ddd863]{margin:0 0 .15rem;font-size:1.25rem}.page-sub[data-v-c3ddd863]{margin:0 0 .85rem;font-size:.85rem}.create-card[data-v-c3ddd863]{margin-bottom:1rem}.create-card h3[data-v-c3ddd863]{margin:0 0 .75rem;font-size:1rem}.create-form[data-v-c3ddd863]{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:.65rem;align-items:end}.create-form label[data-v-c3ddd863]{display:flex;flex-direction:column;gap:.25rem;font-size:.8rem;color:var(--muted)}.user-actions[data-v-c3ddd863]{display:flex;flex-wrap:wrap;gap:.4rem;justify-content:flex-start}.badge-ok[data-v-c3ddd863]{background:#d1fae5;color:#065f46}.badge-muted[data-v-c3ddd863]{background:#e5e7eb;color:#4b5563}.row-locked td[data-v-c3ddd863],.row-locked.user-card[data-v-c3ddd863]{opacity:.75}.field[data-v-c3ddd863]{display:block;margin-bottom:.75rem}.field .input[data-v-c3ddd863]{margin-top:.35rem}.modal-backdrop[data-v-c3ddd863]{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a73;display:flex;align-items:center;justify-content:center;z-index:1000;padding:1rem}.modal[data-v-c3ddd863]{width:min(420px,100%);margin:0}.modal-actions[data-v-c3ddd863]{display:flex;justify-content:flex-end;gap:.5rem;margin-top:1rem}.users-table[data-v-c3ddd863]{min-width:720px}.user-cards[data-v-c3ddd863]{display:none;flex-direction:column;gap:.55rem;margin-bottom:.5rem}.user-card[data-v-c3ddd863]{background:#fff;border:1px solid var(--border);border-radius:10px;padding:.75rem}.user-card-top[data-v-c3ddd863]{display:flex;justify-content:space-between;gap:.5rem;align-items:flex-start}.user-role[data-v-c3ddd863]{font-size:.8rem;margin:.35rem 0 .55rem}.mono[data-v-c3ddd863]{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.85em}.empty-state[data-v-c3ddd863]{text-align:center;padding:1.25rem}@media(max-width:700px){.users-table-wrap[data-v-c3ddd863]{display:none}.user-cards[data-v-c3ddd863]{display:flex}.create-form[data-v-c3ddd863]{grid-template-columns:1fr}.create-form .btn[data-v-c3ddd863]{width:100%}.user-actions .btn[data-v-c3ddd863]{flex:1}}.page-header h2[data-v-74533280]{margin:0 0 .15rem;font-size:1.25rem}.page-sub[data-v-74533280]{margin:0 0 .85rem;font-size:.85rem}.import-card[data-v-74533280]{margin-bottom:1rem;max-width:720px}.import-form[data-v-74533280]{display:flex;flex-direction:column;gap:.75rem}.import-form label[data-v-74533280]:not(.check){display:flex;flex-direction:column;gap:.3rem;font-size:.85rem;color:var(--muted)}.textarea[data-v-74533280]{width:100%;font-family:inherit;resize:vertical;min-height:4.5rem}.hint[data-v-74533280]{margin:0;font-size:.88rem}.check[data-v-74533280]{display:flex;align-items:center;gap:.5rem;font-size:.9rem;color:var(--text)}.result-list[data-v-74533280]{margin:0;padding-left:1.2rem;line-height:1.7}.table-wrap[data-v-74533280]{overflow-x:auto;-webkit-overflow-scrolling:touch}.result-table[data-v-74533280]{width:100%;border-collapse:collapse;font-size:.85rem;min-width:640px}.result-table th[data-v-74533280],.result-table td[data-v-74533280]{border-bottom:1px solid #e2e8f0;padding:.45rem .5rem;text-align:left;vertical-align:top}.result-table th[data-v-74533280]{font-weight:600;white-space:nowrap}.msg-cell[data-v-74533280]{max-width:220px;font-size:.82rem;color:#475569;word-break:break-word}.code-block[data-v-74533280]{background:#0f172a;color:#e2e8f0;padding:.75rem 1rem;border-radius:8px;overflow:auto;font-size:.82rem;max-height:360px}.badge.ok[data-v-74533280]{background:#d1fae5;color:#065f46}.badge.warn[data-v-74533280]{background:#fef3c7;color:#92400e}.badge.danger[data-v-74533280]{background:#fee2e2;color:#991b1b}@media(max-width:480px){.import-form .btn[data-v-74533280]{width:100%}}.settings-page[data-v-d650d9e2]{max-width:720px;margin:0 auto;display:flex;flex-direction:column;gap:1rem;position:relative;z-index:1;pointer-events:auto}.page-header h2[data-v-d650d9e2]{margin:0 0 .25rem}.page-sub[data-v-d650d9e2]{margin:0}.guide-list[data-v-d650d9e2]{margin:.5rem 0 0;padding-left:1.25rem;color:var(--text);line-height:1.55}.guide-list ul[data-v-d650d9e2]{margin:.25rem 0;padding-left:1.1rem}.settings-form[data-v-d650d9e2]{display:flex;flex-direction:column;gap:.85rem}.field[data-v-d650d9e2]{display:flex;flex-direction:column;gap:.3rem;font-size:.9rem;font-weight:600}.toggle-enabled[data-v-d650d9e2]{display:flex;align-items:center;gap:.75rem;width:100%;text-align:left;padding:.75rem .9rem;border-radius:10px;border:1px solid #bfdbfe;background:#eff6ff;cursor:pointer;font:inherit;color:inherit}.toggle-enabled.on[data-v-d650d9e2]{border-color:#6ee7b7;background:#ecfdf5}.toggle-enabled[data-v-d650d9e2]:hover{filter:brightness(.98)}.toggle-switch[data-v-d650d9e2]{flex-shrink:0;width:44px;height:26px;border-radius:999px;background:#94a3b8;position:relative;transition:background .15s ease}.toggle-enabled.on .toggle-switch[data-v-d650d9e2]{background:#059669}.toggle-knob[data-v-d650d9e2]{position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:#fff;box-shadow:0 1px 2px #0003;transition:transform .15s ease}.toggle-enabled.on .toggle-knob[data-v-d650d9e2]{transform:translate(18px)}.toggle-text[data-v-d650d9e2]{display:flex;flex-direction:column;gap:.1rem;min-width:0}.hint-inline[data-v-d650d9e2]{font-size:.8rem;font-weight:400}.hint[data-v-d650d9e2]{font-weight:400;font-size:.82rem}.token-row[data-v-d650d9e2]{display:flex;gap:.5rem;align-items:stretch}.token-row .input[data-v-d650d9e2]{flex:1;min-width:0}.token-row .btn[data-v-d650d9e2]{flex-shrink:0;align-self:center}.check[data-v-d650d9e2]{display:flex!important;flex-direction:row!important;align-items:center;gap:.5rem!important;font-weight:500!important;font-size:.9rem;cursor:pointer}.event-toggles[data-v-d650d9e2]{border:1px solid var(--border);border-radius:10px;padding:.75rem 1rem;margin:0;display:flex;flex-direction:column;gap:.45rem}.event-toggles legend[data-v-d650d9e2]{padding:0 .35rem;font-size:.85rem;font-weight:700;color:var(--muted)}.actions[data-v-d650d9e2]{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.25rem}.ok-msg[data-v-d650d9e2]{color:var(--ok);font-size:.9rem;margin:.75rem 0 0}.mono[data-v-d650d9e2]{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.88rem}.code-block[data-v-d650d9e2]{background:#0f172a;color:#e2e8f0;border-radius:8px;padding:.75rem .9rem;font-size:.78rem;overflow-x:auto;line-height:1.45;white-space:pre-wrap;word-break:break-word}.token-reveal[data-v-d650d9e2]{margin:.75rem 0 0;word-break:break-all}:root{--bg: #f4f6f9;--card: #ffffff;--text: #1f2937;--muted: #6b7280;--primary: #1d4ed8;--primary-hover: #1e40af;--border: #e5e7eb;--danger: #dc2626;--ok: #059669;--warn: #d97706;--topbar-h: 52px}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--text);line-height:1.45}a{color:var(--primary);text-decoration:none}button,input,select,textarea{font:inherit}.btn{border:none;border-radius:8px;padding:.5rem .9rem;background:var(--primary);color:#fff;cursor:pointer;font-weight:600;font-size:.9rem;line-height:1.25;display:inline-flex;align-items:center;justify-content:center;gap:.35rem;white-space:nowrap}.btn:hover:not(:disabled){background:var(--primary-hover)}.btn:disabled{opacity:.55;cursor:not-allowed}.btn.secondary{background:#e5e7eb;color:var(--text)}.btn.secondary:hover:not(:disabled){background:#d1d5db}.btn.danger{background:var(--danger);color:#fff}.btn.danger:hover:not(:disabled){background:#b91c1c}.btn-sm{padding:.35rem .7rem;font-size:.82rem}.btn-link{border:none;background:transparent;color:var(--primary);font:inherit;font-size:.82rem;font-weight:600;cursor:pointer;padding:.15rem .35rem;border-radius:4px}.btn-link:hover:not(:disabled){background:#e0e7ff}.btn-link:disabled{opacity:.45;cursor:not-allowed}.input{width:100%;border:1px solid var(--border);border-radius:8px;padding:.5rem .7rem;background:#fff;min-height:2.4rem}.input:focus{outline:2px solid #bfdbfe;outline-offset:0;border-color:#93c5fd}.card{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:1rem;box-shadow:0 1px 2px #0000000a}.muted{color:var(--muted)}.error{color:var(--danger);font-size:.9rem}.badge{display:inline-block;padding:.12rem .45rem;border-radius:999px;font-size:.72rem;font-weight:600;line-height:1.3;vertical-align:middle}.badge.pending{background:#fef3c7;color:#92400e}.badge.processing{background:#dbeafe;color:#1e40af}.badge.scored{background:#d1fae5;color:#065f46}.badge.failed{background:#fee2e2;color:#991b1b}.badge.train{background:#ede9fe;color:#5b21b6}.score-hi,.score-hi strong{color:#047857!important}.score-mid,.score-mid strong{color:#1d4ed8!important}.score-lo,.score-lo strong{color:#b45309!important}.score-fail,.score-fail strong{color:#dc2626!important}.score-empty{color:#94a3b8!important}.layout{min-height:100vh;display:grid;grid-template-rows:auto 1fr}.topbar{position:sticky;top:0;z-index:50;background:#0f172a;color:#fff;display:flex;align-items:center;justify-content:space-between;padding:0 .85rem;height:var(--topbar-h);gap:.75rem}.topbar-left{display:flex;align-items:center;gap:.5rem;min-width:0}.brand{color:#fff;display:flex;align-items:center;gap:.5rem;text-decoration:none;white-space:nowrap;min-width:0}.brand-logo{width:32px;height:32px;object-fit:contain;flex-shrink:0;border-radius:50%;background:#fff;box-shadow:0 0 0 1px #ffffff26}.brand-text{font-size:.92rem;font-weight:700;letter-spacing:.01em;color:#fff;line-height:1.2;min-width:0;overflow:hidden;text-overflow:ellipsis}.nav-toggle{display:none;flex-direction:column;justify-content:center;gap:4px;width:2.25rem;height:2.25rem;padding:.4rem;border:1px solid #334155;border-radius:8px;background:transparent;cursor:pointer}.nav-toggle-bar{display:block;height:2px;width:100%;background:#e2e8f0;border-radius:1px}.topnav{display:flex;gap:.15rem .35rem;align-items:center}.topnav .nav-link{color:#cbd5e1;font-size:.9rem;font-weight:500;padding:.4rem .65rem;border-radius:8px;border-bottom:none;text-decoration:none;transition:background .12s ease,color .12s ease}.topnav .nav-link:hover{color:#fff;background:#94a3b81f}.topnav .nav-link.is-active{color:#fff;font-weight:700;background:#60a5fa2e;box-shadow:inset 0 0 0 1px #60a5fa73}.topbar-right{display:flex;gap:.55rem;align-items:center;flex-shrink:0}.user-chip{color:#cbd5e1;font-size:.8rem;max-width:14rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.topbar .btn.secondary{background:#1e293b;color:#e2e8f0;border:1px solid #334155}.topbar .btn.secondary:hover:not(:disabled){background:#334155}.mobile-only,.nav-backdrop{display:none}.main{padding:1rem 1.15rem 1.5rem;max-width:1400px;margin:0 auto;width:100%}.filters{display:flex;flex-wrap:wrap;gap:.75rem;margin-bottom:1rem;align-items:end}.filters label{display:flex;flex-direction:column;gap:.25rem;font-size:.85rem;color:var(--muted)}.table-wrap{overflow:auto;border:1px solid var(--border);border-radius:12px;background:#fff;-webkit-overflow-scrolling:touch}table.score-table{border-collapse:collapse;width:100%;font-size:.85rem}table.score-table th,table.score-table td{border:1px solid var(--border);padding:.4rem .45rem;text-align:center;white-space:nowrap;font-variant-numeric:tabular-nums}table.score-table th{background:#f8fafc;font-weight:600;position:sticky;top:0;z-index:1}table.score-table th.group{background:#eef2ff}table.score-table td.left,table.score-table th.left{text-align:left}table.score-table tbody tr:hover{background:#f8fafc}.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:.65rem;margin-bottom:.85rem}.stat{background:#fff;border:1px solid var(--border);border-radius:12px;padding:.85rem}.stat .num{font-size:1.45rem;font-weight:700;font-variant-numeric:tabular-nums;line-height:1.2}.pagination{display:flex;gap:.5rem;align-items:center;margin-top:1rem;flex-wrap:wrap}.login-page{min-height:100vh;display:grid;place-items:center;padding:1rem}.login-card{width:min(400px,100%)}.login-card h1{margin:0 0 .25rem;font-size:1.35rem}.login-card form{display:grid;gap:.85rem;margin-top:1rem}.login-card label{display:flex;flex-direction:column;gap:.3rem;font-size:.88rem;color:var(--muted)}.detail-grid{display:grid;gap:.85rem;max-width:100%;overflow-x:hidden}.part-card h3{margin-top:0}.criteria-table{width:100%;border-collapse:collapse}.criteria-table th,.criteria-table td{border:1px solid var(--border);padding:.5rem;text-align:left}.transcript-block{margin:.75rem 0;padding:.75rem 1rem;background:#f8fafc;border-radius:8px;border-left:3px solid var(--primary)}.transcript-label{font-weight:600;margin-bottom:.35rem}.transcript-text{white-space:pre-wrap;margin:0;line-height:1.5}.transcript-meta{margin:.4rem 0 0;font-size:.85rem}.exam-header-row{display:flex;flex-wrap:wrap;justify-content:space-between;gap:.75rem;align-items:flex-start}.exam-title{margin:0 0 .25rem;font-size:1.2rem;line-height:1.3}.exam-meta{margin:0;font-size:.88rem;line-height:1.5}.exam-scores-summary{display:flex;flex-wrap:wrap;gap:.4rem}.score-pill{background:#f1f5f9;border:1px solid var(--border);border-radius:10px;padding:.4rem .75rem;min-width:4.2rem;text-align:center}.score-pill.teacher{background:#ecfdf5;border-color:#a7f3d0}.score-pill-label{display:block;font-size:.68rem;color:var(--muted);text-transform:uppercase;letter-spacing:.02em}.score-pill strong{font-size:1.1rem;font-variant-numeric:tabular-nums}.speaking-toolbar{display:flex;flex-wrap:wrap;justify-content:space-between;gap:.75rem;align-items:flex-start;margin-bottom:.85rem;padding-bottom:.85rem;border-bottom:1px solid var(--border)}.speaking-toolbar h3{font-size:1.05rem}.train-check{display:flex;gap:.65rem;align-items:flex-start;max-width:320px;padding:.55rem .75rem;border:1px solid var(--border);border-radius:10px;background:#f8fafc;cursor:pointer;-webkit-user-select:none;user-select:none}.train-check.on{background:#f5f3ff;border-color:#c4b5fd}.train-check input{margin-top:.2rem;width:1.1rem;height:1.1rem;accent-color:#7c3aed}.train-check strong{display:block;font-size:.9rem}.train-check small{display:block;color:var(--muted);font-size:.78rem;margin-top:.15rem;line-height:1.3}.part-grade{border:1px solid var(--border);border-radius:12px;padding:.85rem;margin-bottom:.85rem;background:#fafbfc;max-width:100%;box-sizing:border-box;overflow-x:hidden}.part-grade-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:.65rem;margin-bottom:.65rem}.part-grade-head h4{margin:0;font-size:1rem;line-height:1.4}.part-grade.part-train-on{border-color:#c4b5fd;background:#faf8ff}.train-check.part-train{max-width:220px;margin:0;flex-shrink:0}.teacher-total{color:var(--ok);font-weight:600}.prompt-box{white-space:pre-wrap;background:#fff;border:1px dashed var(--border);border-radius:8px;padding:.55rem .7rem;margin:0 0 .65rem;font-size:.88rem;color:#475569;max-height:100px;overflow:auto}.media-asr-row{display:grid;grid-template-columns:minmax(140px,200px) minmax(0,1fr);gap:.65rem;margin-bottom:.75rem;align-items:stretch;width:100%;max-width:100%;box-sizing:border-box;overflow:hidden}.media-col{border:1px solid var(--border);border-radius:10px;background:#fff;padding:.45rem .55rem;display:flex;flex-direction:column;min-width:0;max-width:100%;overflow:hidden}.media-col-label{font-weight:600;font-size:.78rem;margin-bottom:.35rem;color:#334155}.media-box{margin-bottom:0;flex:1;display:flex;align-items:center;min-width:0;max-width:100%;overflow:hidden}.media-player{max-width:100%;max-height:140px;width:100%;border-radius:8px;background:#0f172a;object-fit:contain}.media-player.audio{width:100%;max-width:100%;max-height:none;height:40px;background:transparent}.transcript-panel{border-radius:10px;border:1px solid var(--border);background:#fff;overflow:hidden;display:flex;flex-direction:column;min-height:0;min-width:0;max-width:100%;box-sizing:border-box}.transcript-panel.asr{border-left:3px solid #94a3b8}.transcript-panel.asr.asr-side{max-height:280px;width:100%;min-width:0}.transcript-panel.asr.asr-side .transcript-readonly,.transcript-panel.asr.asr-side .asr-karaoke{max-height:200px;overflow:auto;overflow-x:hidden;word-break:break-word;overflow-wrap:anywhere;white-space:pre-wrap}.asr-karaoke-wrap{display:flex;flex-direction:column;min-height:0;flex:1}.asr-karaoke-toolbar{display:flex;align-items:center;gap:.65rem;flex-wrap:wrap;padding:.35rem .75rem 0;font-size:.8rem}.asr-karaoke{line-height:1.9;font-size:.9rem;padding:.5rem .75rem}.asr-karaoke .sync-w{display:inline;border-radius:4px;padding:.08em .16em;margin:0 .12em .15em 0;transition:background .08s ease,color .08s ease,box-shadow .08s ease}.asr-karaoke .sync-w.has-time{cursor:pointer}.asr-karaoke .sync-w.has-time:hover{outline:1px dashed #93c5fd}.asr-karaoke.follow-on .sync-w.is-past{color:#64748b;background:#f1f5f9}.asr-karaoke .sync-w.is-active{background:#fde047;color:#713f12;font-weight:700;box-shadow:0 0 0 1px #facc15}.asr-karaoke .sync-w.no-time{border-bottom:1px dotted #cbd5e1}.transcript-panel.edit,.transcript-panel.edit.gv-full{border-left:3px solid var(--primary);width:100%;max-width:100%;margin-bottom:.75rem;box-sizing:border-box}.transcript-panel-head{display:flex;justify-content:space-between;align-items:center;gap:.5rem;padding:.4rem .65rem;background:#f1f5f9;font-weight:600;font-size:.82rem;flex-wrap:wrap}.transcript-panel-actions{display:flex;align-items:center;gap:.35rem;flex-wrap:wrap;justify-content:flex-end}.meta-inline{font-weight:400;font-size:.75rem}.transcript-readonly{padding:.65rem;white-space:pre-wrap;line-height:1.55;font-size:.88rem;color:#334155;max-height:200px;overflow:auto;overflow-x:hidden;word-break:break-word;overflow-wrap:anywhere;flex:1}.transcript-edit{width:100%;border:none;resize:vertical;min-height:140px;padding:.75rem;font:inherit;font-size:.9rem;line-height:1.55;background:#fff;color:var(--text)}.transcript-edit:focus{outline:2px solid #bfdbfe;outline-offset:-2px}.transcript-panel .hint{margin:0;padding:0 .75rem .55rem;font-size:.78rem}.transcript-panel .hint.warn-hint{color:#b45309;padding-top:.25rem}.segment-details{border-top:1px solid var(--border);padding:.4rem .75rem .65rem;font-size:.82rem}.segment-details summary{cursor:pointer;color:var(--muted);font-weight:600;-webkit-user-select:none;user-select:none}.segment-list{margin:.45rem 0 0;padding-left:1.1rem;max-height:180px;overflow:auto}.segment-list li{margin-bottom:.3rem;line-height:1.4}.seg-time{display:inline-block;min-width:5.5rem;font-variant-numeric:tabular-nums;color:var(--muted);font-size:.75rem;margin-right:.35rem}.seg-text{color:#334155}.sync-editor{display:flex;flex-direction:column;min-height:0;flex:1;width:100%;max-width:100%;min-width:0;overflow:hidden}.sync-editor-head{display:flex;justify-content:space-between;align-items:center;gap:.5rem;padding:.4rem .65rem;background:#eef2ff;font-weight:600;font-size:.82rem;flex-wrap:wrap}.sync-editor-actions{display:flex;align-items:center;gap:.55rem;flex-wrap:wrap;font-weight:400}.sync-follow-toggle{display:inline-flex;align-items:center;gap:.3rem;cursor:pointer;font-size:.78rem;font-weight:600;color:var(--primary);-webkit-user-select:none;user-select:none}.sync-follow-toggle input{accent-color:var(--primary)}.sync-karaoke-edit{min-height:100px;max-height:360px;overflow:auto;overflow-x:hidden;padding:.65rem .85rem;font-size:.92rem;line-height:1.7;background:#fff;outline:none;word-break:break-word;overflow-wrap:anywhere;white-space:pre-wrap;box-sizing:border-box;width:100%}.sync-karaoke-edit:focus,.sync-karaoke-edit.is-editing{outline:2px solid #bfdbfe;outline-offset:-2px;background:#fafbff}.sync-karaoke-edit.empty:before{content:attr(data-placeholder);color:#94a3b8;pointer-events:none;white-space:pre-wrap}.sync-karaoke-edit .sync-w{display:inline;border-radius:4px;padding:.08em .16em;margin:0 .12em .15em 0;cursor:text}.sync-karaoke-edit.show-diff .sync-w.is-edited{background:#fecaca!important;color:#7f1d1d!important;font-weight:600;box-shadow:0 0 0 1px #f87171}.badge-edited-count{display:inline-block;background:#fee2e2;color:#991b1b;font-size:.72rem;font-weight:700;padding:.1rem .4rem;border-radius:999px}.hint-red{background:#fecaca;color:#7f1d1d;padding:0 .25rem;border-radius:3px;font-weight:600}.transcript-panel.edit{display:flex;flex-direction:column;min-width:0}.speaking-card{max-width:100%;overflow-x:hidden}.score-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(96px,1fr));gap:.45rem;margin-bottom:.65rem}.score-cell{background:#fff;border:1px solid var(--border);border-radius:8px;padding:.45rem .5rem}.score-cell label{display:block;font-size:.72rem;color:var(--muted);margin-bottom:.25rem;font-weight:600}.score-cell.total{background:#ecfdf5;border-color:#a7f3d0}.score-inputs{display:flex;flex-direction:column;gap:.15rem}.score-input{width:100%;padding:.35rem .4rem;text-align:center;font-weight:600;font-size:1rem;min-height:2.2rem}.score-total-val{font-size:1.2rem;font-weight:700;color:var(--ok);font-variant-numeric:tabular-nums}.ai-hint{font-size:.7rem;color:var(--muted)}.ai-feedback{margin-top:.35rem;font-size:.88rem}.ai-feedback summary{cursor:pointer;color:var(--muted);font-weight:600;padding:.25rem 0}.fb-summary{margin:.5rem 0 .35rem;padding:.45rem .65rem;background:#f1f5f9;border-radius:6px;font-size:.88rem;line-height:1.45}.fb-block{display:flex;flex-direction:column;gap:.28rem;font-size:.88rem;line-height:1.4}.fb-line{display:grid;grid-template-columns:5.5rem 1fr;gap:.35rem;align-items:start}.fb-k{font-weight:600;color:#0f172a;white-space:nowrap}.fb-v{min-width:0;word-break:break-word}.fb-line.fb-scale .fb-k,.fb-line.fb-scale .fb-v{font-size:.8rem;font-weight:500}.criteria-table.compact{font-size:.82rem;margin-top:.5rem}.teacher-note-block{margin:.5rem 0 1rem}.teacher-note-block label{display:block;font-size:.85rem;color:var(--muted);margin-bottom:.3rem;font-weight:600}.save-bar{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.65rem;padding-top:.75rem;border-top:1px solid var(--border);position:sticky;bottom:0;background:linear-gradient(to top,#fff 70%,#ffffffeb);padding-bottom:.35rem;z-index:2}.save-bar-left{display:flex;flex-direction:column;gap:.2rem;min-width:0}.ok-msg{color:var(--ok);font-weight:600;font-size:.9rem}@media(max-width:900px){.nav-toggle{display:flex}.topnav{display:none;position:fixed;top:var(--topbar-h);left:0;right:0;background:#0f172a;flex-direction:column;align-items:stretch;gap:0;padding:.5rem .75rem 1rem;border-bottom:1px solid #1e293b;box-shadow:0 8px 24px #00000040;z-index:60}.topnav.open{display:flex}.topnav .nav-link{padding:.75rem .65rem;border-radius:8px;border-bottom:none;font-size:.95rem}.topnav .nav-link.is-active{color:#93c5fd;background:#60a5fa24;box-shadow:inset 0 0 0 1px #60a5fa59}.topnav .mobile-only{display:flex;flex-direction:column;gap:.55rem;padding:.85rem .35rem .25rem;border-top:1px solid #1e293b;margin-top:.25rem}.desktop-user{display:none}.nav-backdrop{display:block;position:fixed;inset:var(--topbar-h) 0 0 0;background:#0f172a66;z-index:55}.main{padding:.75rem .7rem 1.25rem}.media-asr-row{grid-template-columns:1fr}.fb-line{grid-template-columns:1fr;gap:.1rem}.fb-k{font-size:.75rem;color:var(--muted)}.criteria-table{display:block;overflow-x:auto;-webkit-overflow-scrolling:touch}.save-bar{flex-direction:column;align-items:stretch}.save-bar .btn{width:100%}.train-check.part-train{max-width:100%;width:100%}.part-grade-head{flex-direction:column}}@media(max-width:480px){.brand-logo{width:28px;height:28px}.brand-text{font-size:.82rem}.score-grid{grid-template-columns:repeat(2,1fr)}.score-cell.total{grid-column:1 / -1}.exam-scores-summary{width:100%}.score-pill{flex:1;min-width:0}.speaking-toolbar p{font-size:.82rem!important}}
