:root{color:#18202a;font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:#eef2f7;font-family:Noto Sans Thai,Leelawadee UI,Tahoma,system-ui,sans-serif}html,body,#root{min-width:320px;min-height:100%;margin:0}body{min-height:100vh}*{box-sizing:border-box}button,input,select{font:inherit}.app-shell{color:#18202a;background:#eef2f7;min-height:100vh}.app-header,.readiness-panel,.toolbar,.backup-bar,.print-note,.template-section,.storage-note{width:min(1180px,100% - 32px);margin-inline:auto}.app-header{justify-content:space-between;align-items:flex-start;gap:24px;padding:28px 0 18px;display:flex}.eyebrow{color:#2563eb;letter-spacing:.04em;text-transform:uppercase;margin:0 0 4px;font-size:13px;font-weight:800}.app-header h1{color:#111827;margin:0;font-size:clamp(26px,3vw,38px)}.subtle{color:#64748b;margin:6px 0 0}.status-pill{color:#1d4ed8;white-space:nowrap;background:#eff6ff;border:1px solid #bfdbfe;border-radius:999px;padding:8px 12px;font-weight:700}.status-pill.offline{color:#92400e;background:#fffbeb;border-color:#fde68a}.readiness-panel{background:#fff;border:1px solid #fbbf24;border-radius:16px;margin-bottom:14px;padding:16px 18px;box-shadow:0 8px 24px #0f172a0f}.readiness-panel.ready{border-color:#86efac}.readiness-heading{justify-content:space-between;align-items:center;gap:14px;display:flex}.readiness-heading h2{color:#111827;margin:0}.readiness-badge{color:#92400e;white-space:nowrap;background:#fffbeb;border:1px solid #fde68a;border-radius:999px;padding:7px 11px;font-size:12px;font-weight:800}.readiness-badge.pass{color:#166534;background:#ecfdf5;border-color:#bbf7d0}.readiness-grid{grid-template-columns:repeat(5,minmax(0,1fr));gap:8px;margin-top:12px;display:grid}.readiness-item{background:#f8fafc;border:1px solid #e2e8f0;border-radius:9px;gap:3px;padding:10px 12px;display:grid}.readiness-item span{color:#64748b;font-size:11px;font-weight:700}.readiness-item strong{color:#475569}.readiness-item.pass{background:#f0fdf4;border-color:#bbf7d0}.readiness-item.pass strong{color:#166534}.readiness-item.active{background:#eff6ff;border-color:#bfdbfe}.readiness-item.active strong{color:#1d4ed8}.session-lock-note{color:#1e40af;background:#eff6ff;border-radius:8px;margin-top:10px;padding:9px 11px;font-size:12px;font-weight:700}.toolbar{background:#fff;border:1px solid #dce3ec;border-radius:16px;flex-wrap:wrap;align-items:end;gap:14px;padding:18px;display:flex;box-shadow:0 8px 24px #0f172a0f}.backup-bar{color:#1e3a8a;background:#eff6ff;border:1px solid #dbeafe;border-radius:12px;flex-wrap:wrap;align-items:center;gap:12px 18px;margin-top:12px;padding:12px 14px;display:flex}.backup-bar>div:first-child{flex:340px;gap:2px;display:grid}.backup-bar span{font-size:12px}.backup-actions{flex-wrap:wrap;gap:8px;display:flex}.backup-import-label{cursor:pointer;justify-content:center;align-items:center;display:inline-flex}.backup-import-label input{display:none}.backup-message{color:#1d4ed8;width:100%;font-weight:700}.field{color:#334155;gap:7px;font-weight:700;display:grid}.field-grow{flex:360px}.field-main{flex:260px;min-width:220px}.field.compact{width:142px}.class-field{width:118px}.room-field{width:104px}.field input,.field select{color:#0f172a;background:#fff;border:1px solid #cbd5e1;border-radius:9px;outline:none;height:42px;padding:0 12px}.field input:focus,.field select:focus{border-color:#2563eb;box-shadow:0 0 0 3px #2563eb1f}.field input:disabled,.field select:disabled,.preset:disabled{cursor:not-allowed;opacity:.6;background:#f1f5f9}.preset-row{gap:6px;display:flex}.preset{color:#334155;cursor:pointer;background:#fff;border:1px solid #cbd5e1;border-radius:9px;min-width:46px;height:42px;padding:0 11px;font-weight:800}.preset.active{color:#1d4ed8;background:#eff6ff;border-color:#2563eb}.primary{color:#fff;cursor:pointer;background:#2563eb;border:0;border-radius:9px;height:42px;padding:0 18px;font-weight:800}.template-section{background:#fff;border:1px solid #dce3ec;border-radius:16px;margin-top:18px;padding:18px;box-shadow:0 8px 24px #0f172a0f}.template-section-heading{justify-content:space-between;align-items:center;gap:18px;display:flex}.template-section-heading h2{color:#111827;margin:0}.print-note{color:#9a3412;background:#fff7ed;border:1px solid #fed7aa;border-radius:10px;margin-top:12px;padding:12px 16px;font-size:14px}.preview-stage{padding:28px 16px 56px;overflow:auto}.a4-page{color:#000;background:#fff;width:210mm;height:297mm;margin:0 auto;position:relative;overflow:hidden;box-shadow:0 18px 45px #0f172a2e}.answer-half{background:#fff;width:210mm;height:148.5mm;padding:0;position:relative;overflow:hidden}.omr-marker{z-index:3;background:#000;width:10mm;height:10mm;position:absolute}.marker-tl{top:8mm;left:8mm}.marker-tr{top:8mm;right:8mm}.marker-bl{bottom:8mm;left:8mm}.marker-br{bottom:8mm;right:8mm}.sheet-header{text-align:center;color:#000;position:absolute;top:5mm;left:24mm;right:24mm}.sheet-kicker{letter-spacing:.06em;font-size:7pt;font-weight:800}.sheet-subject-row,.sheet-exam-row,.student-fields{white-space:nowrap;justify-content:space-between;align-items:center;gap:4mm;display:flex}.sheet-subject-row{margin-top:.6mm;font-size:9pt;line-height:1.15}.sheet-subject-row strong{text-overflow:ellipsis;min-width:0;overflow:hidden}.sheet-exam-row{margin-top:.45mm;font-size:6.8pt;font-weight:700}.sheet-exam-title{text-overflow:ellipsis;min-width:0;max-width:92mm;overflow:hidden}.student-fields{justify-content:stretch;gap:5mm;margin-top:.7mm;font-size:7.2pt;font-weight:700}.student-field{align-items:flex-end;gap:2mm;min-width:0;display:flex}.student-field b{flex:none;font-weight:700}.student-name-field{flex:auto}.student-number-field{flex:0 0 38mm}.student-write-line{border-bottom:.25mm solid #000;flex:auto;min-width:0;height:3.2mm}.sheet-header p{margin:.65mm 0 0;font-size:6.1pt;line-height:1.15}.question-columns{align-items:start;gap:5mm;display:grid;position:absolute;top:28.5mm;left:18mm;right:18mm}.question-column{min-width:0}.choice-heading,.question-row{grid-template-columns:8mm repeat(4,7mm);justify-content:center;align-items:center;display:grid}.choice-heading{height:5mm;font-size:7pt;font-weight:800}.choice-heading strong{text-align:center;font-weight:800}.question-row{height:4.55mm;font-size:7pt}.question-number{text-align:right;font-variant-numeric:tabular-nums;padding-right:1.7mm;font-weight:700}.bubble{background:#fff;border:.38mm solid #000;border-radius:50%;width:4.2mm;height:4.2mm;margin:0 auto;display:block}.template-stamp{color:#4b5563;font-size:5.5pt;position:absolute;bottom:3.4mm;right:20mm}.cut-line{z-index:10;text-align:center;pointer-events:none;border-top:.25mm dashed #606060;position:absolute;top:148.5mm;left:0;right:0;transform:translateY(-.125mm)}.cut-line span{color:#555;background:#fff;padding:0 2mm;font-size:6pt;display:inline-block;position:relative;top:-2.4mm}.storage-note{color:#166534;background:#ecfdf5;border:1px solid #bbf7d0;border-radius:10px;margin-bottom:40px;padding:10px 12px;font-size:13px}.storage-note button{color:#166534;cursor:pointer;background:#fff;border:1px solid #86efac;border-radius:7px;margin-left:10px;padding:4px 8px}@media (width<=900px){.app-header,.readiness-heading{align-items:center}.readiness-grid{grid-template-columns:1fr 1fr}.template-section-heading{flex-direction:column;align-items:stretch}}@page{size:A4 portrait;margin:0}@media print{html,body,#root{width:210mm;height:297mm;background:#fff!important;margin:0!important;padding:0!important}.no-print{display:none!important}.app-shell,.preview-stage{width:210mm;height:297mm;background:#fff!important;margin:0!important;padding:0!important;overflow:visible!important}.a4-page{break-after:page;-webkit-print-color-adjust:exact;print-color-adjust:exact;width:210mm;height:297mm;box-shadow:none!important;margin:0!important}}.answer-key-panel,.template-section{background:#fff;border:1px solid #dce3ec;border-radius:16px;width:min(1180px,100% - 32px);margin:16px auto 0;padding:18px;box-shadow:0 8px 24px #0f172a0d}.answer-key-heading,.template-section-heading{justify-content:space-between;align-items:center;gap:16px;display:flex}.answer-key-heading h2,.template-section-heading h2{color:#111827;margin:0}.answer-key-actions{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:8px;display:flex}.answer-progress{color:#1d4ed8;background:#eff6ff;border-radius:10px;align-items:baseline;gap:4px;padding:8px 12px;display:flex}.answer-progress strong{font-size:26px}.answer-progress span{font-weight:800}.answer-confirm-state{color:#9a3412;background:#fff7ed;border:1px solid #fed7aa;border-radius:999px;padding:7px 10px;font-size:12px;font-weight:800}.answer-confirm-state.confirmed{color:#166534;background:#f0fdf4;border-color:#bbf7d0}.confirm-answer-button{color:#fff;cursor:pointer;background:#166534;border:0;border-radius:9px;min-height:42px;padding:0 14px;font-weight:800}.confirm-answer-button:disabled{cursor:not-allowed;opacity:.45}.answer-mode-tabs{border-bottom:1px solid #e2e8f0;gap:6px;margin-top:16px;padding-bottom:8px;display:flex}.answer-tab{color:#64748b;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:8px;padding:8px 12px;font-weight:800}.answer-tab.active{color:#1d4ed8;background:#eff6ff;border-color:#bfdbfe}.answer-mode-help{color:#64748b;margin-top:10px;font-size:13px}.answer-import-box{background:#f8fbff;border:1px solid #dbeafe;border-radius:10px;justify-content:space-between;align-items:center;gap:18px;margin-top:12px;padding:13px 14px;display:flex}.answer-import-box p{color:#64748b;margin:4px 0 0;font-size:13px}.answer-import-button{color:#fff;cursor:pointer;white-space:nowrap;background:#1d4ed8;border-radius:8px;justify-content:center;align-items:center;min-height:38px;padding:0 13px;font-weight:800;display:inline-flex}.answer-import-button input{display:none}.answer-import-pending{background:#fffbeb;border-color:#fde68a}.answer-import-error,.answer-import-report{border-radius:9px;margin-top:10px;padding:10px 12px;font-size:13px}.answer-import-error{color:#991b1b;background:#fef2f2;border:1px solid #fecaca}.answer-import-report{color:#166534;background:#f0fdf4;border:1px solid #bbf7d0;flex-wrap:wrap;gap:8px 16px;display:flex}.answer-key-grid{grid-template-columns:repeat(auto-fit,minmax(185px,1fr));gap:8px;max-height:420px;margin-top:16px;padding-right:2px;display:grid;overflow:auto}.answer-key-row{background:#fff;border:1px solid #e2e8f0;border-radius:9px;outline:none;grid-template-columns:34px 1fr;align-items:center;gap:8px;padding:7px 8px;display:grid}.answer-key-row:focus{border-color:#2563eb;box-shadow:0 0 0 2px #2563eb1f}.answer-key-row.complete{background:#f8fafc}.answer-key-number{color:#475569;text-align:right;font-weight:800}.answer-key-choices{grid-template-columns:repeat(4,1fr);gap:4px;display:grid}.answer-key-choice{color:#334155;cursor:pointer;background:#fff;border:1px solid #cbd5e1;border-radius:7px;min-height:34px;font-weight:800}.answer-key-choice.selected{color:#fff;background:#2563eb;border-color:#2563eb}.answer-key-panel.locked{background:#f8fbff;border-color:#bfdbfe}.answer-key-panel.locked .answer-key-choice:not(.selected),.answer-key-panel.locked .answer-tab,.answer-key-panel.locked .answer-import-button{cursor:not-allowed;opacity:.55}.answer-key-choice:disabled{cursor:not-allowed}@media (width<=800px){.answer-key-heading,.template-section-heading,.answer-import-box{flex-direction:column;align-items:stretch}.answer-key-actions{justify-content:flex-start}.answer-progress{width:fit-content}}.scanner-prototype{background:#fff;border:1px solid #dce3ec;border-radius:16px;width:min(1180px,100% - 32px);margin:0 auto 56px;padding:20px;box-shadow:0 8px 24px #0f172a0f}.scanner-heading{justify-content:space-between;align-items:center;gap:18px;margin-bottom:18px;display:flex}.scanner-heading h2,.anomaly-panel h3{color:#111827;margin:0}.scanner-mode-tabs{gap:6px;display:flex}.scanner-tab{color:#475569;cursor:pointer;background:#fff;border:1px solid #cbd5e1;border-radius:9px;min-height:40px;padding:0 14px;font-weight:800}.scanner-tab.active{color:#fff;background:#111827;border-color:#111827}.upload-zone{background:#f8fafc;border:1px dashed #94a3b8;border-radius:12px;justify-content:space-between;align-items:center;gap:16px;padding:16px;display:flex}.upload-zone>div{gap:3px;display:grid}.upload-zone span{color:#64748b;font-size:13px}.upload-button{color:#fff;cursor:pointer;background:#111827;border-radius:9px;justify-content:center;align-items:center;min-height:42px;padding:0 16px;font-weight:800;display:inline-flex}.upload-button input{display:none}.scanner-empty,.scanner-error{text-align:center;color:#64748b;background:#f8fafc;border:1px dashed #cbd5e1;border-radius:12px;place-content:center;gap:6px;min-height:110px;margin-top:14px;display:grid}.scanner-warning{color:#9a3412;background:#fff7ed;border:1px solid #fed7aa;border-radius:9px;margin-bottom:12px;padding:10px 12px;font-size:13px;font-weight:800}.duplicate-warning{color:#92400e;background:#fffbeb;border:1px solid #fbbf24;border-radius:10px;justify-content:space-between;align-items:center;gap:14px;margin:14px 0;padding:12px 14px;display:flex}.duplicate-warning>div:first-child{gap:3px;display:grid}.duplicate-warning span{font-size:13px}.duplicate-actions{flex-wrap:wrap;gap:8px;display:flex}.duplicate-accept-button{color:#fff;cursor:pointer;background:#b45309;border:1px solid #b45309;border-radius:9px;min-height:40px;padding:0 14px;font-weight:800}.upload-disabled{cursor:not-allowed;opacity:.5}.scanner-error{color:#991b1b;background:#fef2f2;border-color:#fecaca}.live-scanner{gap:12px;display:grid}.camera-stage{aspect-ratio:16/9;background:#0f172a;border:1px solid #1e293b;border-radius:14px;width:100%;position:relative;overflow:hidden}.camera-video{object-fit:cover;background:#0f172a;width:100%;height:100%;display:block}.camera-guide{pointer-events:none;border:1px solid #ffffff59;border-radius:10px;position:absolute;inset:10% 11%}.guide-corner{border-style:solid;border-color:#fff;width:44px;height:44px;position:absolute}.guide-tl{border-width:4px 0 0 4px;border-radius:8px 0 0;top:-2px;left:-2px}.guide-tr{border-width:4px 4px 0 0;border-radius:0 8px 0 0;top:-2px;right:-2px}.guide-bl{border-width:0 0 4px 4px;border-radius:0 0 0 8px;bottom:-2px;left:-2px}.guide-br{border-width:0 4px 4px 0;border-radius:0 0 8px;bottom:-2px;right:-2px}.camera-status{color:#fff;white-space:nowrap;background:#0f172adb;border-radius:999px;max-width:calc(100% - 32px);padding:8px 13px;font-size:13px;font-weight:800;position:absolute;bottom:18px;left:50%;transform:translate(-50%)}.camera-steady,.camera-captured{background:#166534eb}.camera-processing,.camera-starting{background:#1e40afeb}.camera-error{background:#991b1beb}.camera-controls{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.secondary-button,.next-sheet-button{color:#334155;cursor:pointer;background:#fff;border:1px solid #cbd5e1;border-radius:9px;min-height:40px;padding:0 14px;font-weight:800}.next-sheet-button{color:#fff;background:#166534;border-color:#166534}.result-actions{flex-wrap:wrap;gap:8px;display:flex}.confirm-result-button{color:#fff;cursor:pointer;background:#1d4ed8;border:1px solid #1d4ed8;border-radius:9px;min-height:40px;padding:0 14px;font-weight:800}.confirm-result-button:disabled,.next-sheet-button:disabled{cursor:not-allowed;opacity:.45}.camera-error-text{color:#991b1b;font-size:13px;font-weight:700}.score-banner{color:#1d4ed8;background:#eff6ff;border:1px solid #bfdbfe;border-radius:12px;align-items:baseline;gap:10px;margin:14px 0;padding:14px 16px;display:flex}.score-banner span{font-weight:800}.score-banner strong{font-size:34px}.score-banner em{color:#92400e;margin-left:auto;font-style:normal;font-weight:800}.score-banner .result-confirmed-label{color:#166534}.scanner-result-grid{grid-template-columns:minmax(0,1.05fr) minmax(320px,.95fr);gap:18px;display:grid}.normalized-preview-card{background:#f8fafc;border:1px solid #e2e8f0;border-radius:12px;min-width:0;overflow:hidden}.normalized-preview-card img{background:#fff;width:100%;height:auto;display:block}.preview-caption{color:#64748b;border-top:1px solid #e2e8f0;padding:9px 12px;font-size:12px}.scanner-summary{align-content:start;gap:12px;display:grid}.metric-row{grid-template-columns:repeat(3,1fr);gap:8px;display:grid}.metric-row-five{grid-template-columns:repeat(5,1fr);gap:8px}.metric-card{background:#f8fafc;border:1px solid #e2e8f0;border-radius:10px;gap:4px;padding:12px;display:grid}.metric-card span{color:#64748b;font-size:12px;font-weight:700}.metric-card strong{color:#0f172a;font-size:22px}.metric-good{background:#f0fdf4;border-color:#bbf7d0}.metric-good strong{color:#166534}.metric-bad{background:#fef2f2;border-color:#fecaca}.metric-bad strong{color:#991b1b}.primary-metric{background:#eff6ff;border-color:#bfdbfe}.primary-metric strong{color:#1d4ed8;font-size:30px}.answer-readout{grid-template-columns:repeat(auto-fill,minmax(58px,1fr));gap:6px;max-height:310px;padding-right:2px;display:grid;overflow:auto}.answer-chip{background:#f0fdf4;border:1px solid #bbf7d0;border-radius:8px;justify-content:space-between;gap:5px;padding:7px 8px;display:flex}.answer-chip span{color:#64748b;font-size:11px}.answer-chip strong{color:#166534}.answer-correct{background:#f0fdf4;border-color:#bbf7d0}.answer-correct strong{color:#166534}.answer-wrong{background:#fef2f2;border-color:#fecaca}.answer-wrong strong{color:#991b1b}.answer-review{background:#fff7ed;border-color:#fed7aa}.answer-review strong{color:#9a3412}.answer-blank,.answer-multiple,.answer-low_confidence,.answer-position_error{background:#fff7ed;border-color:#fed7aa}.answer-blank strong,.answer-multiple strong,.answer-low_confidence strong,.answer-position_error strong{color:#9a3412}.wrong-answer-strip{color:#991b1b;background:#fef2f2;border:1px solid #fecaca;border-radius:9px;gap:8px;padding:9px 11px;font-size:13px;display:flex}.anomaly-panel{border-top:1px solid #e2e8f0;margin-top:18px;padding-top:16px}.anomaly-list{gap:8px;margin-top:10px;display:grid}.anomaly-item{color:#7c2d12;background:#fff7ed;border:1px solid #fed7aa;border-radius:9px;gap:10px;padding:11px;font-size:13px;display:grid}.anomaly-summary{grid-template-columns:80px 130px 1fr 1fr;align-items:center;gap:10px;display:grid}.review-actions{border-top:1px solid #fed7aa;flex-wrap:wrap;gap:6px;padding-top:8px;display:flex}.review-choice{color:#9a3412;cursor:pointer;background:#fff;border:1px solid #fdba74;border-radius:7px;min-height:32px;padding:0 10px;font-weight:800}.review-choice.selected{color:#fff;background:#9a3412;border-color:#9a3412}.review-reset{color:#475569;border-color:#cbd5e1;margin-left:auto}@media (width<=900px){.scanner-heading,.upload-zone{flex-direction:column;align-items:stretch}.scanner-mode-tabs{width:100%}.scanner-tab{flex:1}.scanner-result-grid{grid-template-columns:1fr}.metric-row-five{grid-template-columns:repeat(2,1fr)}.anomaly-item{grid-template-columns:1fr}.camera-stage{aspect-ratio:4/3}}.calibration-panel{background:#fff;border:1px solid #fbbf24;border-radius:16px;width:min(1180px,100% - 32px);margin:18px auto 0;padding:20px;box-shadow:0 8px 24px #0f172a0f}.calibration-panel.ready{border-color:#86efac}.calibration-heading{justify-content:space-between;align-items:flex-start;gap:18px;display:flex}.calibration-heading h2{color:#111827;margin:0}.calibration-badge{color:#92400e;white-space:nowrap;background:#fffbeb;border:1px solid #fde68a;border-radius:999px;padding:7px 11px;font-size:12px;font-weight:800}.calibration-badge.pass{color:#166534;background:#ecfdf5;border-color:#bbf7d0}.calibration-print-check{color:#9a3412;background:#fff7ed;border:1px solid #fed7aa;border-radius:10px;gap:3px;margin-top:14px;padding:11px 13px;font-size:13px;display:grid}.calibration-pattern{background:#f8fafc;border:1px solid #e2e8f0;border-radius:10px;margin-top:10px;padding:12px 14px}.calibration-pattern>strong{color:#334155;margin-bottom:9px;display:block}.calibration-steps{grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;display:grid}.calibration-steps span{color:#334155;background:#fff;border:1px solid #e2e8f0;border-radius:8px;min-height:54px;padding:9px;font-size:13px}.calibration-steps b{color:#1d4ed8;background:#dbeafe;border-radius:50%;place-items:center;width:22px;height:22px;margin-right:5px;display:inline-grid}.calibration-actions{align-items:center;gap:9px;margin-top:12px;display:flex}.calibration-upload{cursor:pointer;align-items:center;display:inline-flex}.calibration-upload input{display:none}.calibration-error,.calibration-success{border-radius:9px;gap:3px;margin-top:12px;padding:10px 12px;font-size:13px;display:grid}.calibration-error{color:#991b1b;background:#fef2f2;border:1px solid #fecaca}.calibration-success{color:#166534;background:#ecfdf5;border:1px solid #bbf7d0;font-weight:700}@media (width<=760px){.calibration-heading{flex-direction:column}.calibration-steps{grid-template-columns:1fr 1fr}}.calibration-camera-wrap{margin-top:12px}.calibration-camera-stage{aspect-ratio:16/9;background:#0f172a;border:1px solid #cbd5e1;border-radius:12px;width:100%;min-height:220px;position:relative;overflow:hidden}.calibration-camera-video{object-fit:cover;width:100%;height:100%;display:block}.calibration-camera-guide{pointer-events:none;position:absolute;inset:8%}.cal-guide{border-style:solid;border-color:#fff;width:34px;height:34px;position:absolute}.cal-guide-tl{border-width:3px 0 0 3px;top:0;left:0}.cal-guide-tr{border-width:3px 3px 0 0;top:0;right:0}.cal-guide-bl{border-width:0 0 3px 3px;bottom:0;left:0}.cal-guide-br{border-width:0 3px 3px 0;bottom:0;right:0}.calibration-camera-placeholder{color:#e2e8f0;text-align:center;background:#0f172ab8;place-items:center;padding:24px;font-weight:700;display:grid;position:absolute;inset:0}@media (width<=760px){.calibration-camera-stage{aspect-ratio:4/3;min-height:200px}.calibration-actions{flex-direction:column;align-items:stretch}.calibration-actions .primary,.calibration-actions .secondary-button,.calibration-upload{justify-content:center;width:100%}}.self-test-panel{background:#fff;border:1px solid #93c5fd;border-radius:16px;width:min(1180px,100% - 32px);margin:18px auto 0;padding:20px;box-shadow:0 8px 24px #0f172a0f}.self-test-panel.ready{border-color:#86efac}.self-test-heading{justify-content:space-between;align-items:flex-start;gap:18px;display:flex}.self-test-heading h2{color:#111827;margin:0}.self-test-badge{color:#1d4ed8;white-space:nowrap;background:#eff6ff;border:1px solid #bfdbfe;border-radius:999px;padding:7px 11px;font-size:12px;font-weight:800}.self-test-badge.pass{color:#166534;background:#ecfdf5;border-color:#bbf7d0}.self-test-actions{align-items:center;gap:9px;margin-top:14px;display:flex}.self-test-actions .primary:disabled{cursor:wait;opacity:.6}.self-test-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin-top:12px;display:grid}.self-test-item{background:#f8fafc;border:1px solid #e2e8f0;border-radius:9px;gap:3px;padding:10px 11px;font-size:12px;display:grid}.self-test-item span{color:#64748b}.self-test-item.pass{background:#f0fdf4;border-color:#bbf7d0}.self-test-item.pass strong{color:#166534}.self-test-item.fail{background:#fef2f2;border-color:#fecaca}.self-test-item.fail strong{color:#991b1b}.self-test-error,.self-test-success{border-radius:9px;margin-top:12px;padding:10px 12px;font-size:13px;font-weight:700}.self-test-error{color:#991b1b;background:#fef2f2;border:1px solid #fecaca}.self-test-success{color:#166534;background:#ecfdf5;border:1px solid #bbf7d0}@media (width<=800px){.self-test-heading{flex-direction:column}.self-test-grid{grid-template-columns:1fr 1fr}}.exam-dashboard,.cloud-publish-panel{background:#fff;border:1px solid #dce3ec;border-radius:16px;width:min(1180px,100% - 32px);margin:0 auto 14px;padding:18px;box-shadow:0 8px 24px #0f172a0f}.exam-dashboard-heading,.cloud-publish-heading{justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.exam-dashboard-heading h2,.cloud-publish-heading h2{color:#111827;margin:0}.exam-dashboard-stats{grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-top:14px;display:grid}.dashboard-stat{color:#334155;background:#f8fafc;border:1px solid #dbe3ee;border-radius:12px;gap:2px;padding:12px 14px;display:grid}.dashboard-stat span{font-size:12px;font-weight:800}.dashboard-stat strong{color:#0f172a;font-size:26px;line-height:1}.dashboard-stat small{color:#64748b}.dashboard-stat.ready{background:#f0fdf4;border-color:#bbf7d0}.dashboard-stat.draft{background:#fffbeb;border-color:#fde68a}.exam-dashboard-message{color:#1d4ed8;background:#eff6ff;border:1px solid #bfdbfe;border-radius:9px;margin-top:12px;padding:9px 11px;font-size:12px;font-weight:700}.exam-card-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-top:14px;display:grid}.exam-card{background:#fff;border:1px solid #dce3ec;border-radius:14px;gap:12px;min-width:0;padding:14px;display:grid}.exam-card.current{background:#f8fbff;border-color:#93c5fd;box-shadow:inset 0 0 0 1px #bfdbfe}.exam-card-topline{justify-content:space-between;align-items:center;gap:8px;display:flex}.exam-card-status,.exam-card-current{border-radius:999px;align-items:center;min-height:26px;padding:4px 8px;font-size:11px;font-weight:800;display:inline-flex}.exam-card-status.ready{color:#166534;background:#ecfdf5}.exam-card-status.confirmed{color:#1d4ed8;background:#eff6ff}.exam-card-status.sync{color:#9a3412;background:#fff7ed}.exam-card-status.draft{color:#991b1b;background:#fef2f2}.exam-card-current{color:#1e40af;background:#dbeafe}.exam-card-main{min-width:0}.exam-card-main h3{color:#111827;white-space:nowrap;text-overflow:ellipsis;margin:0;font-size:17px;overflow:hidden}.exam-card-main p{color:#64748b;white-space:nowrap;text-overflow:ellipsis;margin:4px 0 0;font-size:13px;overflow:hidden}.exam-card-meta{color:#475569;flex-wrap:wrap;gap:8px;font-size:12px;font-weight:700;display:flex}.exam-card-meta span{background:#f1f5f9;border-radius:7px;padding:5px 7px}.exam-card-actions{gap:8px;margin-top:auto;display:flex}.exam-card-actions .secondary-button,.exam-card-actions .danger-button{flex:1 1 0}.danger-button{color:#b91c1c;cursor:pointer;background:#fff;border:1px solid #fecaca;border-radius:9px;height:42px;padding:0 14px;font-weight:800}.danger-button:hover:not(:disabled){background:#fef2f2}.danger-button:disabled{cursor:not-allowed;opacity:.55}.exam-library-quick-switch{border-top:1px solid #e2e8f0;justify-content:flex-end;margin-top:14px;padding-top:12px;display:flex}.exam-library-quick-switch label{color:#334155;gap:6px;width:min(420px,100%);font-size:13px;font-weight:700;display:grid}.exam-library-quick-switch select{color:#0f172a;width:100%;height:42px;font:inherit;background:#fff;border:1px solid #cbd5e1;border-radius:9px;padding:0 10px}.cloud-badge{color:#475569;white-space:nowrap;background:#f8fafc;border:1px solid #cbd5e1;border-radius:999px;padding:7px 11px;font-size:12px;font-weight:800}.cloud-badge.published{color:#166534;background:#ecfdf5;border-color:#bbf7d0}.privacy-note{color:#166534;background:#f0fdf4;border:1px solid #bbf7d0;border-radius:9px;margin-top:12px;padding:9px 11px;font-size:12px;font-weight:700}.cloud-publish-content{grid-template-columns:minmax(0,1fr) 260px;align-items:start;gap:18px;margin-top:14px;display:grid}.cloud-actions{flex-wrap:wrap;align-items:flex-start;gap:10px;display:flex}.cloud-help,.cloud-message{width:100%;margin:0;font-size:12px}.cloud-help{color:#64748b}.cloud-message{color:#1d4ed8;font-weight:700}.scan-qr-card{text-align:center;background:#f8fbff;border:1px solid #dbeafe;border-radius:12px;justify-items:center;gap:4px;padding:12px;display:grid}.scan-qr-card img{width:180px;height:180px}.scan-qr-card span,.scan-qr-card small{color:#64748b}@media (width<=900px){.exam-card-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=700px){.exam-dashboard-heading,.cloud-publish-heading{flex-direction:column;align-items:stretch}.exam-dashboard-stats,.exam-card-grid{grid-template-columns:1fr}.exam-card-actions{flex-direction:column}.exam-library-quick-switch{justify-content:stretch}.exam-library-quick-switch label{width:100%}.cloud-publish-content{grid-template-columns:1fr}}.mobile-shell{color:#18202a;background:#eef2f7;min-height:100vh;padding-bottom:30px}.mobile-header,.mobile-offline-note,.mobile-session-note,.mobile-footer-note{width:min(1180px,100% - 24px);margin-inline:auto}.mobile-header{justify-content:space-between;gap:16px;padding:18px 0 10px;display:flex}.mobile-header h1{color:#111827;margin:0;font-size:clamp(24px,7vw,34px)}.mobile-header p:not(.eyebrow){color:#64748b;margin:5px 0 0}.mobile-local-only{color:#166534;background:#ecfdf5;border:1px solid #bbf7d0;border-radius:12px;align-content:center;gap:2px;min-width:220px;padding:10px 12px;display:grid}.mobile-local-only span{font-size:11px}.mobile-offline-note,.mobile-session-note,.mobile-footer-note{border-radius:10px;margin-top:8px;padding:10px 12px}.mobile-offline-note{color:#92400e;background:#fffbeb;border:1px solid #fde68a;font-weight:700}.mobile-session-note{color:#1e40af;background:#eff6ff;border:1px solid #bfdbfe;gap:2px;display:grid}.mobile-session-note span,.mobile-footer-note{font-size:12px}.mobile-footer-note{color:#475569;text-align:center;background:#f8fafc;border:1px solid #e2e8f0;margin-bottom:20px}.mobile-loading,.mobile-error{background:#fff;border:1px solid #dce3ec;border-radius:16px;gap:8px;width:min(520px,100% - 32px);margin:20vh auto 0;padding:22px;display:grid;box-shadow:0 8px 24px #0f172a14}.mobile-loading strong,.mobile-error strong{font-size:22px}.mobile-loading span,.mobile-error span{color:#64748b}.mobile-error a{color:#2563eb;font-weight:700}@media (width<=700px){.mobile-header{flex-direction:column}.mobile-local-only{min-width:0}.mobile-shell .self-test-panel,.mobile-shell .calibration-panel,.mobile-shell .scanner-prototype{width:calc(100% - 16px);margin-left:8px;margin-right:8px}}
