*,*:before,*:after{box-sizing:border-box}body{margin:0;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;background:#f6f7fb;color:#111;min-height:100vh}.button-group{display:flex;gap:1rem;flex-wrap:wrap;justify-content:center;margin-top:2rem}button{padding:.9rem 2.2rem;border-radius:.6rem;border:none;cursor:pointer;font-size:1.05rem;font-weight:600;letter-spacing:.01em;transition:background .15s ease,transform .1s ease,box-shadow .15s ease}button.primary{background:linear-gradient(135deg,#4f46e5,#7c3aed);color:#fff;box-shadow:0 4px 14px #4f46e559}button.primary:hover:not(:disabled){background:linear-gradient(135deg,#4338ca,#6d28d9);box-shadow:0 6px 20px #4f46e573;transform:translateY(-1px)}button.primary:active:not(:disabled){transform:translateY(0);box-shadow:0 2px 8px #4f46e54d}button.secondary{background:#f1f0ff;color:#4338ca;box-shadow:0 2px 8px #0000000f}button.secondary:hover:not(:disabled){background:#e0deff;box-shadow:0 4px 12px #0000001a;transform:translateY(-1px)}button.secondary:active:not(:disabled){transform:translateY(0)}button.danger{background:linear-gradient(135deg,#ef4444,#dc2626);color:#fff;box-shadow:0 4px 14px #ef444459}button.danger:hover:not(:disabled){background:linear-gradient(135deg,#dc2626,#b91c1c);box-shadow:0 6px 20px #ef444473;transform:translateY(-1px)}button.danger:active:not(:disabled){transform:translateY(0);box-shadow:0 2px 8px #ef44444d}button:disabled{opacity:.45;cursor:not-allowed}.card{background:#fff;border-radius:.75rem;box-shadow:0 10px 25px #00000014;padding:1.5rem}.table{width:100%;border-collapse:collapse;margin-top:1rem}.table th,.table td{text-align:left;padding:.75rem .5rem;border-bottom:1px solid rgba(0,0,0,.08)}.session-row{cursor:pointer;transition:background .1s ease}.session-row:hover{background:#f5f3ff}.table th{font-weight:700;opacity:.8}.badge{display:inline-flex;align-items:center;padding:.25rem .6rem;border-radius:999px;font-size:.85rem;font-weight:700}.badge.passed{background:#dcfce7;color:#166534}.badge.failed{background:#fee2e2;color:#991b1b}.badge.in-progress{background:#fef9c3;color:#854d0e}.muted{color:#6b7280;font-size:.92rem}.session-warning{padding:.6rem 1rem;background:#fefce8;border:1px solid #fde047;border-radius:.5rem;color:#854d0e;font-size:.9rem;margin-bottom:1rem}.exam-progress{display:flex;gap:.75rem;justify-content:center;margin-bottom:1.25rem}.progress-step{width:2.2rem;height:2.2rem;border-radius:50%;border:2px solid #d1d5db;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:.9rem;color:#9ca3af;cursor:pointer;transition:border-color .2s,background .2s,color .2s}.progress-step:hover{border-color:#a5b4fc;color:#4f46e5}.progress-step.active{border-color:#4f46e5;color:#4f46e5}.progress-step.done{background:#4f46e5;border-color:#4f46e5;color:#fff}.exam-counter{text-align:center;margin:0 0 .5rem}.exam-question{font-size:1.15rem;line-height:1.6;font-weight:600;margin:0 0 1.5rem}.exam-complete{margin-top:1.5rem;padding:1rem;background:#f0fdf4;border-radius:.5rem;text-align:center}.next-hint{text-align:center;margin-top:.5rem}.recorder{background:#f8f9ff;border:1px solid #e0e7ff;border-radius:.75rem;padding:1.5rem;margin-bottom:1.5rem;text-align:center}.recorder-mic-icon{width:1.5rem;height:1.5rem;margin:0 auto .75rem;color:#4f46e5}.recorder-mic-icon svg{width:100%;height:100%}.recorder-hint{color:#6b7280;font-size:.92rem;margin:0 0 1rem}.recorded-label{margin-bottom:.75rem}.recorder-requesting{display:flex;flex-direction:column;align-items:center;gap:.75rem;padding:.5rem 0}.recorder-spinner{width:1.75rem;height:1.75rem;border:3px solid #e0e7ff;border-top-color:#4f46e5;border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.recorder-active{display:flex;flex-direction:column;align-items:center;gap:1.25rem}.recording-indicator{display:flex;align-items:center;gap:.6rem;font-weight:600}.rec-dot{width:.75rem;height:.75rem;border-radius:50%;background:#ef4444;animation:pulse-dot 1s ease-in-out infinite}@keyframes pulse-dot{0%,to{opacity:1;transform:scale(1)}50%{opacity:.5;transform:scale(.85)}}.rec-label{color:#ef4444;font-size:.95rem}.rec-timer{font-variant-numeric:tabular-nums;font-size:1.1rem;color:#374151;min-width:3rem}.recorder-done{display:flex;flex-direction:column;align-items:center}.audio-player{width:100%;max-width:480px;margin-bottom:1rem;border-radius:.5rem}.recorder-actions{display:flex;gap:.75rem;justify-content:center}.recorder-error{display:flex;flex-direction:column;align-items:center;gap:.75rem}.error-text{color:#dc2626;font-size:.92rem;margin:0}.transcription-status{margin-bottom:1rem}.transcribing{display:flex;align-items:center;gap:.75rem;padding:.75rem 1rem;background:#f0f4ff;border:1px solid #c7d2fe;border-radius:.5rem;color:#4338ca;font-size:.92rem}.transcription-spinner{width:1.1rem;height:1.1rem;border:2px solid #c7d2fe;border-top-color:#4f46e5;border-radius:50%;animation:spin .7s linear infinite;flex-shrink:0}.transcription-error{display:flex;align-items:center;gap:.75rem;padding:.75rem 1rem;background:#fef2f2;border:1px solid #fecaca;border-radius:.5rem}.transcript-preview{padding:.75rem 1rem;background:#f0fdf4;border:1px solid #bbf7d0;border-radius:.5rem}.transcript-label{font-size:.78rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:#16a34a;margin:0 0 .4rem}.transcript-text{font-size:.95rem;line-height:1.6;color:#374151;margin:0}.grading-screen{text-align:center;padding:2rem 1rem}.grading-spinner-large{width:3rem;height:3rem;border:4px solid #e0e7ff;border-top-color:#4f46e5;border-radius:50%;animation:spin .8s linear infinite;margin:0 auto 1.5rem}.grading-title{font-size:1.3rem;font-weight:700;margin:0 0 1.5rem;color:#111}.grading-questions{display:flex;flex-direction:column;gap:.75rem;max-width:320px;margin:0 auto 1.5rem}.grading-question-row{display:flex;align-items:center;justify-content:space-between;padding:.6rem 1rem;background:#f8f9ff;border:1px solid #e0e7ff;border-radius:.5rem}.grading-question-label{font-weight:600;color:#374151}.grading-item-spinner{width:1.1rem;height:1.1rem;border:2px solid #c7d2fe;border-top-color:#4f46e5;border-radius:50%;animation:spin .7s linear infinite}.grading-item-done{color:#16a34a;font-weight:600;font-size:.9rem}.grading-item-error{color:#dc2626;font-weight:600;font-size:.9rem}.extraction-summary{display:flex;align-items:center;gap:.75rem;padding:.6rem 1rem;border-radius:.5rem;margin-top:.5rem;border:1px solid transparent}.extraction-passed{background:#f0fdf4;border-color:#bbf7d0}.extraction-failed{background:#fef2f2;border-color:#fecaca}.extraction-score{font-size:.92rem;font-weight:600;color:#374151}
