:root{--bg:#f5f7fb;--panel:#fff;--ink:#172033;--muted:#667085;--line:#e4e7ec;--brand:#2d5bff;--soft:#eef3ff;--warn:#9a6700}*{box-sizing:border-box}body{background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;margin:0;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}a{color:inherit;text-decoration:none}.shell{max-width:1180px;margin:0 auto;padding:28px}.topbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:24px;display:flex}.brand{letter-spacing:-.5px;font-size:22px;font-weight:800}.muted{color:var(--muted)}.panel{background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:24px;box-shadow:0 4px 14px #1018280d}.narrow{max-width:560px;margin:64px auto}h1{margin:0 0 10px;font-size:32px;line-height:1.15}h2{margin:0 0 16px;font-size:20px}p{line-height:1.6}.label{margin-bottom:7px;font-size:14px;font-weight:650;display:block}.input,.select{background:#fff;border:1px solid #cfd5df;border-radius:10px;width:100%;padding:13px 14px;font-family:inherit;font-size:15px;transition:border-color .15s,box-shadow .15s}.input:focus,.select:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--soft);outline:none}.btn{cursor:pointer;color:#24304a;background:#e9edf5;border:0;border-radius:10px;justify-content:center;align-items:center;padding:12px 16px;font-family:inherit;font-size:14px;font-weight:700;line-height:1.25;transition:all .15s;display:inline-flex}.btn.primary{background:var(--brand);color:#fff}.btn.ghost{border:1px solid var(--line);background:#fff}.btn:disabled{opacity:.45;cursor:not-allowed}.row{align-items:center;gap:12px;display:flex}.between{justify-content:space-between}.stack{gap:16px;display:grid}.grid{grid-template-columns:repeat(3,1fr);gap:16px;display:grid}.stat{font-size:30px;font-weight:800}.small{font-size:13px}.badge{background:var(--soft);border-radius:999px;padding:6px 10px;font-size:12px;font-weight:700}table{border-collapse:collapse;width:100%}th,td{text-align:left;border-bottom:1px solid var(--line);padding:12px;font-size:14px}th{color:var(--muted);font-weight:650}.exam-shell{padding:18px 28px 28px}.exam-topbar{background:var(--panel);border:1px solid var(--line);border-radius:14px;margin-bottom:16px;padding:12px 18px;box-shadow:0 2px 8px #1018280a}.exam{grid-template-columns:minmax(0,1fr) 310px;align-items:start;gap:20px;display:grid}.exam-question-panel{flex-direction:column;height:calc(100vh - 132px);min-height:520px;max-height:760px;display:flex;overflow:hidden}.exam-question-head{border-bottom:1px solid var(--line);flex-shrink:0;padding-bottom:12px}.exam-question-body{flex:1;min-height:0;padding:14px 6px 14px 2px;overflow-y:auto}.exam-actions{border-top:1px solid var(--line);background:var(--panel);flex-shrink:0;margin-top:auto;padding-top:16px}.exam-nav-panel{max-height:calc(100vh - 132px);position:sticky;top:18px;overflow-y:auto}.timer{font-variant-numeric:tabular-nums;font-size:22px;font-weight:800}.question{margin:4px 0 12px;font-size:20px;font-weight:700;line-height:1.45}.choice{border:1.5px solid var(--line);cursor:pointer;background:#fff;border-radius:12px;align-items:flex-start;gap:12px;margin:10px 0;padding:14px 16px;transition:border-color .15s,background-color .15s,box-shadow .15s;display:flex}.choice:hover{border-color:var(--brand);background:var(--soft)}.choice:has(input:checked){border-color:var(--brand);background:var(--soft);box-shadow:0 0 0 1px var(--brand)}.choice input{accent-color:var(--brand);margin-top:3px}.navgrid{grid-template-columns:repeat(6,1fr);gap:8px;display:grid}.qnum{border:1.5px solid var(--line);cursor:pointer;background:#fff;border-radius:10px;height:38px;font-weight:700;transition:all .15s}.qnum:hover{border-color:var(--brand);background:var(--soft)}.qnum.answered{background:var(--soft);border-color:var(--brand);color:var(--self-dark,#173ea5)}.qnum.review{color:#92400e;background:#fef3c7;border-color:#f59e0b}.qnum.current{border-color:var(--brand);box-shadow:0 0 0 3px var(--soft);border-width:2px;outline:none}.qnum.unvisited{color:var(--muted);border-style:dashed}.timer.warn{color:var(--warn)}.notice{background:#fff9e8;border:1px solid #f5df9f;border-radius:10px;padding:12px 14px}.success{background:#edfcf2;border:1px solid #b7ebc6;border-radius:10px;padding:12px 14px}.sidebar{width:230px}.appframe{min-height:100vh;display:flex}.sidenav{color:#fff;background:#101828;width:240px;padding:24px}.sidenav a{color:#d0d5dd;padding:10px 0;display:block}.content{flex:1;padding:30px}.steps{gap:8px;margin-bottom:24px;display:flex}.step{background:#eef1f6;border-radius:999px;padding:8px 10px;font-size:13px}.step.active{color:#173ea5;background:#dfe8ff;font-weight:700}@media (max-width:800px){.grid,.exam{grid-template-columns:1fr}.exam-question-panel{height:auto;min-height:0;max-height:none;overflow:visible}.exam-question-body{padding-right:0;overflow:visible}.exam-actions{z-index:5;padding:14px 0 4px;position:sticky;bottom:0}.exam-nav-panel{max-height:none;position:static}.appframe{display:block}.sidenav{width:100%}.navgrid{grid-template-columns:repeat(8,1fr)}}.savestate{color:var(--muted);font-weight:650}.savestate.saving{color:var(--brand)}.savestate.saved,.savestate.idle{color:var(--self,#067647)}.savestate.offline,.savestate.error,.savestate.stopped{color:var(--warn);background:#fff9e8;border:1px solid #f5df9f;border-radius:999px;padding:4px 10px}.modal-backdrop{z-index:40;background:#10182873;place-items:center;padding:16px;display:grid;position:fixed;inset:0}.modal{background:#fff;border-radius:16px;width:100%;max-width:480px;padding:28px;box-shadow:0 24px 60px #10182840}.modal h2{margin-bottom:10px}.modal p{margin:0 0 4px}.sidenav{flex-direction:column;display:flex}.sidenav-account{color:#d0d5dd;word-break:break-word;border-top:1px solid #ffffff1f;gap:4px;margin-top:auto;padding-top:24px;font-size:13px;display:grid}.sidenav-account b{color:#fff;font-size:14px}.sidenav-signout{color:#fff;cursor:pointer;text-align:left;background:0 0;border:1px solid #ffffff40;border-radius:8px;margin-top:10px;padding:8px 10px;font-weight:650}.sidenav-signout:hover{background:#ffffff14}.auth-panel{max-width:480px}.auth-panel h1{font-size:30px}.password-field{position:relative}.password-field .input{padding-right:70px}.password-toggle{color:var(--brand);cursor:pointer;background:0 0;border:0;padding:6px 8px;font-weight:700;position:absolute;top:50%;right:8px;transform:translateY(-50%)}.mono{letter-spacing:1px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.detail-grid{grid-template-columns:1fr 1fr;gap:18px;display:grid}.step.done{color:#067647;background:#e8f7ee;font-weight:650}.badge.status-draft{background:#eef1f6}.badge.status-upcoming{color:#173ea5;background:#eef3ff}.badge.status-live{color:#067647;background:#e8f7ee}.badge.status-completed{color:#344054;background:#f2f4f7}.badge.status-cancelled{color:#b42318;background:#fdecec}.warn-badge{color:#9a6700;background:#fff4e5}.question-category-badge{color:#1b4332;letter-spacing:.01em;background:#e8f7ee;border:1px solid #95d5b2}.dropzone{text-align:center;cursor:pointer;background:#fafbff;border:2px dashed #cfd5df;border-radius:14px;place-items:center;gap:4px;padding:28px;display:grid}.dropzone.dragging,.dropzone:hover{border-color:var(--brand);background:var(--soft)}.dropzone:focus-within{outline:2px solid var(--brand)}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.table-scroll{overflow-x:auto}.row-invalid td{background:#fff8f7}.issue{color:#b42318;font-size:13px}.ok{color:#067647;font-size:13px}.btn-small{padding:6px 10px;font-size:13px}.btn.danger{color:#b42318;border-color:#f3c3be}.message{border:1px solid var(--line);border-radius:12px;padding:14px 16px}.message.resolved{opacity:.6}.topic-bars{gap:12px;margin:0;padding:0;list-style:none;display:grid}.bar{background:#eef1f6;border-radius:999px;height:8px;margin-top:4px;overflow:hidden}.bar span{background:var(--brand);height:100%;display:block}.timeline{gap:8px;margin:0;padding:0;list-style:none;display:grid}.timeline li{grid-template-columns:150px 1fr;gap:12px;font-size:14px;display:grid}.sort-button{font:inherit;color:inherit;cursor:pointer;background:0 0;border:0;padding:0;font-weight:650}.help-box{border:1px solid var(--line);border-radius:12px;padding:12px 14px}.help-box summary{cursor:pointer;font-weight:650}.help-box[open] summary{margin-bottom:12px}textarea.input{resize:vertical;font-family:inherit}@media (max-width:900px){.detail-grid{grid-template-columns:1fr}}.sidenav-account .sidenav-profile{color:#c7d2fe;padding:6px 0 0;font-weight:650}.admin-nav{background:#1a1033}.reply{border-left:3px solid var(--brand);background:var(--soft);border-radius:0 8px 8px 0;margin-top:10px;padding:10px 12px}.btn.btn-submit{background:var(--self,#2d6a4f);color:#fff;border:1px solid var(--self,#2d6a4f)}.btn.btn-submit:hover:not(:disabled){background:var(--self-dark,#1b4332)}.jump-list{flex-wrap:wrap;gap:6px;max-height:140px;margin-top:6px;display:flex;overflow:auto}.self-tag{background:var(--self-soft,#d8f3dc);color:var(--self-dark,#1b4332)}.live-monitor{z-index:20;justify-items:end;gap:8px;max-width:280px;display:grid;position:fixed;bottom:16px;right:16px}.live-monitor-panel{border:1px solid var(--line);background:#fff;border-radius:14px;width:260px;padding:14px;box-shadow:0 8px 24px #1018281a}.live-monitor-list{gap:2px;margin:10px 0 0;font-size:13px;display:grid}.live-monitor-list>div{border-radius:5px;margin:0 -6px;padding:3px 6px}.live-monitor-row-flagged{background:#fef3f2}.live-monitor-left{justify-items:start;left:16px;right:auto}.live-monitor-close{color:#344054;cursor:pointer;background:0 0;border:0;border-radius:6px;padding:4px;line-height:0}.live-monitor-close:hover{background:#f2f4f7}.live-monitor-list dt,.live-monitor-list dd{margin:0}.live-monitor-list dd{color:var(--self,#2d6a4f);font-weight:700}.live-monitor-list dd.flagged{color:#b42318}.live-monitor-note{margin:8px 0 0;font-size:12px}.live-monitor-badge{border:1px solid var(--line);cursor:pointer;background:#fff;border-radius:999px;padding:8px 12px;font-size:13px;font-weight:700;box-shadow:0 2px 8px #1018280f}.live-monitor-toast{color:#93370d;background:#fffaeb;border:1px solid #fedf89;border-radius:10px;max-width:280px;padding:10px 12px;font-size:13px}.review-item{padding:18px}.review-options{gap:8px;margin:0;padding:0;list-style:none;display:grid}.review-options li{border:1px solid var(--line);border-radius:10px;flex-wrap:wrap;justify-content:space-between;gap:12px;padding:10px 12px;font-size:14px;display:flex}.review-options li.correct{background:#ecfdf3;border-color:#52b788}.review-options li.chosen-wrong{background:#fef3f2;border-color:#fda29b}.review-badge-correct{color:var(--self,#2d6a4f);background:#ecfdf3}.review-badge-wrong{color:#b42318;background:#fef3f2}.review-badge-unanswered{color:#475467;background:#f2f4f7}.review-filter-active{background:var(--self,#2d6a4f);color:#fff}.code-block{color:#e2e8f0;white-space:pre;tab-size:4;background:#1c1917;border-radius:12px;margin:6px 0 12px;padding:12px 14px;font:13px/1.55 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;overflow-x:auto}.question .code-block{font-weight:400}.brand-logo{width:auto;height:30px;display:block}.brand.brand-dark{color:#fff;align-items:center;gap:8px;display:inline-flex}.brand.brand-dark img{display:block}@media print{.no-print{display:none!important}}.coding-layout{grid-template-columns:minmax(0,1fr) minmax(0,1.15fr);align-items:start;gap:16px;max-width:1500px;margin:0 auto;padding:16px;display:grid}.coding-layout>*{grid-template-columns:minmax(0,1fr);min-width:0}.coding-layout .cm-editor{max-width:100%}.coding-layout pre{max-width:100%;overflow-x:auto}.coding-samples{grid-template-columns:1fr 1fr;gap:10px;display:grid}@media (max-width:960px){.coding-layout{grid-template-columns:1fr;padding:12px}}@media (max-width:520px){.coding-samples{grid-template-columns:1fr}}.drill{background:var(--bg,#fafaf9);flex-direction:column;height:100vh;display:flex;overflow:hidden}.drill-header{z-index:10;border-bottom:1px solid var(--line,#e7e5e4);background:#fff;grid-template-columns:auto minmax(0,1fr) auto;align-items:stretch;gap:16px;min-height:56px;padding:0 20px;display:grid;position:sticky;top:0;box-shadow:0 1px 2px #0000000a}.drill-brand{align-items:center;gap:12px;display:flex}.drill-pill{white-space:nowrap;background:var(--self-soft,#d8f3dc);color:var(--self-dark,#1b4332);border-radius:999px;padding:4px 10px;font-size:12px;font-weight:700}.drill-tabs{justify-content:center;align-items:stretch;gap:4px;min-width:0;display:flex;overflow-x:auto}.drill-tab{text-overflow:ellipsis;max-width:340px;font:inherit;color:var(--muted,#57534e);cursor:pointer;white-space:nowrap;background:0 0;border:0;border-bottom:2px solid #0000;padding:0 14px;font-size:14px;font-weight:600;transition:color .15s,border-color .15s;overflow:hidden}.drill-tab:hover{color:var(--ink,#1c1917)}.drill-tab.active{color:var(--self,#2d6a4f);border-bottom-color:var(--self,#2d6a4f)}.drill-tab-score{color:var(--muted,#57534e);font-weight:500}.drill-tab.active .drill-tab-score{color:var(--self,#2d6a4f)}.drill-actions{justify-content:flex-end;align-items:center;gap:10px;display:flex}.drill-timer{font-variant-numeric:tabular-nums;color:var(--ink,#1c1917);align-items:center;gap:6px;margin-right:4px;font-size:18px;font-weight:800;display:inline-flex}.drill-timer.low{color:#e11d48}.drill-btn{white-space:nowrap;font:inherit;cursor:pointer;border:1px solid var(--line,#d6d3d1);color:var(--ink,#1c1917);background:#fff;border-radius:10px;justify-content:center;align-items:center;gap:7px;padding:8px 14px;font-size:14px;font-weight:600;transition:all .15s;display:inline-flex}.drill-btn:disabled{opacity:.6;cursor:default}.drill-btn.ghost:hover:not(:disabled){background:#f5f5f4}.drill-btn.finish{background:var(--self,#2d6a4f);border-color:var(--self,#2d6a4f);color:#fff}.drill-btn.finish:hover:not(:disabled){background:var(--self-dark,#1b4332)}.drill-btn.submit{background:var(--self,#2d6a4f);border-color:var(--self,#2d6a4f);color:#fff}.drill-btn.submit:hover:not(:disabled){background:var(--self-dark,#1b4332)}.drill-body{flex:1;grid-template-rows:minmax(0,1fr);grid-template-columns:minmax(0,.92fr) minmax(0,1.08fr);gap:20px;min-height:0;padding:20px;display:grid}.drill-panel{border:1px solid var(--line,#e7e5e4);background:#fff;border-radius:16px;min-width:0;min-height:0;box-shadow:0 4px 12px #1c19170d}.drill-statement{padding:24px;overflow:auto}.drill-title{color:var(--ink,#1c1917);margin:6px 0 14px;font-family:Georgia,Times New Roman,serif;font-size:26px}.drill-editor{flex-direction:column;display:flex;overflow:hidden}.drill-editor-bar{border-bottom:1px solid var(--line,#e7e5e4);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;padding:14px 20px;display:flex}.drill-language{align-items:center;gap:10px;font-size:14px;font-weight:600;display:flex}.drill-language .select{width:auto;min-width:130px;padding:8px 12px}.drill-editor-tools{align-items:center;gap:10px;display:flex}.drill-icon-btn{color:var(--muted,#57534e);cursor:pointer;background:0 0;border:0;border-radius:8px;padding:6px;line-height:0}.drill-icon-btn:hover{background:#f5f5f4}.drill-menu{z-index:20;border:1px solid var(--line,#d6d3d1);background:#fff;border-radius:12px;width:230px;padding:12px;position:absolute;top:36px;right:0;box-shadow:0 10px 25px #1c19171f}.drill-chip{border:1px solid var(--line,#d6d3d1);cursor:pointer;font:inherit;background:#fff;border-radius:8px;padding:4px 10px;font-size:13px}.drill-chip.on{border-color:var(--self,#2d6a4f);color:var(--self-dark,#1b4332);background:var(--self-soft,#d8f3dc);font-weight:600}.drill-code{flex:1;min-height:0;padding:12px 20px 0}.drill-code .cm-editor{border-radius:10px;max-width:100%;overflow:hidden}.drill-console{border-top:1px solid var(--line,#e7e5e4);background:#fafaf9;flex-direction:column;height:38%;min-height:160px;margin-top:12px;display:flex}.drill-console-tabs{border-bottom:1px solid var(--line,#e7e5e4);gap:6px;padding:8px 20px;display:flex}.drill-console-tabs button{font:inherit;color:var(--muted,#57534e);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:8px;padding:6px 12px;font-size:13px;font-weight:600;transition:all .15s}.drill-console-tabs button.on{color:#fff;background:var(--self,#2d6a4f);border-color:var(--self,#2d6a4f)}.drill-console-body{flex:1;padding:12px 20px;overflow:auto}.drill-console-body pre{max-width:100%;overflow-x:auto}.drill-run{border:1px solid var(--line,#e7e5e4);background:#fff;border-radius:10px;padding:8px 12px}.drill-test{border-radius:999px;padding:3px 10px;font-size:12px;font-weight:700}.drill-test.pass{background:var(--self-soft,#d8f3dc);color:var(--self-dark,#1b4332)}.drill-test.fail{color:#be123c;background:#ffe4e6}.drill-footer{border-top:1px solid var(--line,#e7e5e4);background:#fff;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin-top:12px;padding:12px 20px;display:flex}.drill-overlay{z-index:40;-webkit-backdrop-filter:blur(4px);background:#1c191773;place-items:center;padding:16px;display:grid;position:fixed;inset:0}.drill-dialog{background:#fff;border-radius:18px;width:100%;max-width:480px;padding:26px;box-shadow:0 20px 48px #1c19173d}.drill-dialog h2{margin:0 0 10px;font-size:22px}.drill-dialog p{margin:0 0 20px;line-height:1.55}@media (max-width:1000px){.drill-header{grid-template-columns:1fr auto;row-gap:6px;padding:8px 12px}.drill-tabs{grid-area:2/1/auto/-1}.drill-tab{padding:8px 10px}.drill{height:auto;min-height:100vh;overflow:visible}.drill-body{grid-template-rows:auto;grid-template-columns:1fr;padding:12px}.drill-tabs{justify-content:flex-start}.drill-editor{min-height:70vh}}@media (max-width:640px){.drill-brand .drill-pill,.drill-fullscreen{display:none}.drill-header{grid-template-columns:minmax(0,1fr) auto;gap:8px}.drill-brand img{max-width:120px;height:auto}.drill-actions{gap:6px}.drill-timer{margin-right:0;font-size:16px}.drill-btn{padding:7px 10px}}.camera-setup{max-width:860px;margin:24px auto}.camera-privacy{background:var(--self-soft,#d8f3dc);color:var(--self-dark,#1b4332);border-radius:10px;padding:12px 14px;font-size:14px;line-height:1.5}.camera-setup-grid{grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);gap:20px;margin:12px 0 16px;display:grid}.camera-preview{aspect-ratio:4/3;background:#101828;border-radius:14px;position:relative;overflow:hidden}.camera-preview video{object-fit:cover;width:100%;height:100%;display:block;transform:scaleX(-1)}.camera-preview-tag{color:#fff;background:#101828b3;border-radius:999px;padding:4px 8px;font-size:12px;font-weight:700;position:absolute;top:10px;left:10px}.camera-progress{background:#ffffff59;border-radius:999px;height:8px;position:absolute;bottom:12px;left:12px;right:12px;overflow:hidden}.camera-progress span{background:var(--self,#2d6a4f);height:100%;transition:width .2s linear;display:block}.camera-checks{gap:8px;margin:0;padding:0;list-style:none;display:grid}.camera-check{align-items:center;gap:10px;font-size:14px;font-weight:650;display:flex}.camera-check>span[aria-hidden]{color:#475467;background:#f2f4f7;border-radius:999px;place-items:center;width:24px;height:24px;font-size:13px;display:inline-grid}.camera-check.ok>span[aria-hidden]{color:#067647;background:#ecfdf3}.camera-check.bad>span[aria-hidden]{color:#b54708;background:#fffaeb}.camera-view{border:1px solid var(--line);background:#fff;border-radius:14px;gap:8px;width:260px;padding:10px;display:grid;box-shadow:0 8px 24px #1018281a}.camera-view-head{gap:8px}.camera-status{color:var(--self,#2d6a4f);font-size:12px;font-weight:700}.camera-status.paused,.camera-status.starting{color:#b54708}.camera-view-video{aspect-ratio:4/3;object-fit:cover;background:#101828;border-radius:10px;width:100%;display:block;transform:scaleX(-1)}.camera-view.collapsed .camera-view-video{opacity:0;pointer-events:none;width:1px;height:1px;position:absolute}.camera-view-toggle,.camera-view-off{color:#344054;font:inherit;cursor:pointer;background:0 0;border:0;border-radius:6px;justify-self:start;padding:4px 6px;font-size:12px;font-weight:700}.camera-view-toggle:hover,.camera-view-off:hover{background:#f2f4f7}.camera-banner-region{z-index:30;pointer-events:none;max-width:calc(100% - 32px);position:fixed;top:12px;left:50%;transform:translate(-50%)}.camera-banner{color:#93370d;background:#fffaeb;border:1px solid #fedf89;border-radius:999px;padding:8px 16px;font-size:14px;font-weight:650;box-shadow:0 4px 14px #1018281a}@media (max-width:800px){.camera-setup-grid{grid-template-columns:1fr}.camera-view{width:200px}}.camera-diagnostics{color:#475467;white-space:normal;background:#f2f4f7;border-radius:6px;padding:4px 6px;font-size:11px;line-height:1.4;display:block}
