:root{--bg: #f3f5f8;--surface: #ffffff;--text: #1c2430;--muted: #5f6b7a;--border: #d9dee5;--primary: #2459d6;--primary-soft: #e7eefc;--success: #188a4c;--danger: #c62f2f;--warn-bg: #fff6dd;--warn-text: #7a5600;--error-bg: #fdeaea;--radius: 10px;--shadow: 0 2px 12px rgb(20 30 50 / 8%)}*{box-sizing:border-box}html,body{margin:0}body{font-family:system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;background:var(--bg);color:var(--text);line-height:1.45}h1{font-size:1.5rem;margin:0 0 .5rem}h2{font-size:1.2rem}h3{font-size:1.05rem;margin:0 0 .5rem}h4{margin:1rem 0 .4rem;font-size:.95rem}.app-header{background:#18212f;color:#fff;display:flex;align-items:center;justify-content:space-between;padding:12px 24px}.app-header .brand{color:#fff;font-weight:700;font-size:1.15rem;text-decoration:none}.app-header nav a{color:#c9d3e2;margin-left:18px;text-decoration:none}.app-header nav a.active,.app-header nav a:hover{color:#fff}.app-main{max-width:1280px;margin:24px auto;padding:0 16px}.card{background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow);padding:24px}.card.narrow{max-width:520px;margin:24px auto}.center{text-align:center}.muted{color:var(--muted)}.small{font-size:.85rem}.loading{text-align:center;color:var(--muted);padding:48px}label{display:block;font-weight:600;margin:14px 0 6px}input[type=text],input:not([type]),input[type=email],input[type=password],select{width:100%;padding:10px 12px;font:inherit;border:1px solid var(--border);border-radius:8px;background:#fff}input:focus,select:focus{outline:2px solid var(--primary);outline-offset:0;border-color:transparent}label.check{display:flex;gap:8px;align-items:center;font-weight:500}.row{display:grid;grid-template-columns:1fr 1fr;gap:14px}.btn{display:inline-block;padding:10px 16px;font:inherit;font-weight:600;border:1px solid var(--border);border-radius:8px;background:#fff;color:var(--text);cursor:pointer;text-decoration:none}.btn:hover:not(:disabled){background:#f0f2f5}.btn:disabled{opacity:.55;cursor:not-allowed}.btn.primary{background:var(--primary);border-color:var(--primary);color:#fff}.btn.success{background:var(--success);border-color:var(--success);color:#fff}.btn.danger{background:var(--danger);border-color:var(--danger);color:#fff}.btn.primary:hover:not(:disabled){background:#1d4bb8;border-color:#1d4bb8;color:#fff}.btn.success:hover:not(:disabled){background:#13733f;border-color:#13733f;color:#fff}.btn.danger:hover:not(:disabled){background:#a82626;border-color:#a82626;color:#fff}.btn.block{display:block;width:100%;margin-top:18px}.btn.small{padding:5px 10px;font-size:.85rem}.alert{padding:10px 14px;border-radius:8px;margin:14px 0 0}.alert.error{background:var(--error-bg);color:var(--danger)}.alert.warn{background:var(--warn-bg);color:var(--warn-text)}.facts{display:flex;gap:24px;margin:16px 0}.facts dt{color:var(--muted);font-size:.85rem}.facts dd{margin:0;font-weight:700}.rules{background:var(--primary-soft);border-radius:8px;padding:14px 16px;margin-top:18px;font-size:.92rem}.rules ul{padding-left:20px;margin:8px 0}.done-icon{width:64px;height:64px;border-radius:50%;margin:0 auto 12px;background:var(--success);color:#fff;font-size:2rem;line-height:64px}.score{font-size:1.2rem}.exam-bar{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow);padding:12px 18px;margin-bottom:14px;position:sticky;top:8px;z-index:5}.exam-bar-right{display:flex;align-items:center;gap:14px}.save-indicator{font-size:.85rem;color:var(--success)}.save-indicator.error{color:var(--danger)}.timer{font-variant-numeric:tabular-nums;font-weight:700;font-size:1.15rem;padding:4px 10px;border-radius:6px;background:#eef1f5}.timer.warn{background:var(--warn-bg);color:var(--warn-text)}.timer.danger{background:var(--danger);color:#fff}.fs-banner{display:flex;justify-content:space-between;align-items:center;gap:12px;margin:0 0 14px}.exam-layout{display:grid;grid-template-columns:1fr 260px;gap:16px;align-items:start}.q-head{display:flex;justify-content:space-between;color:var(--muted);font-weight:600}.tag{background:var(--primary-soft);color:var(--primary);border-radius:999px;padding:2px 10px;font-size:.8rem}.q-text{margin:14px 0 18px;font-size:1.2rem}.option{display:flex;gap:12px;align-items:center;font-weight:500;border:1px solid var(--border);border-radius:8px;padding:12px 14px;margin:8px 0;cursor:pointer}.option:hover{border-color:var(--primary)}.option.selected{border-color:var(--primary);background:var(--primary-soft)}.option input{margin:0;width:18px;height:18px}.matching{display:grid;gap:10px}.match-row{display:grid;grid-template-columns:1fr auto 1.3fr;gap:10px;align-items:center;border:1px solid var(--border);border-radius:8px;padding:10px 12px}.match-left{font-weight:600}.match-arrow{color:var(--muted)}.q-actions{display:flex;justify-content:space-between;gap:10px;margin-top:22px}.navigator h3{margin-bottom:10px}.nav-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:6px}.nav-item{padding:8px 0;border:1px solid var(--border);border-radius:6px;background:#fff;cursor:pointer;font:inherit}.nav-item.answered{background:#e3f4ea;border-color:#9bd3b2}.nav-item.current{outline:2px solid var(--primary)}.modal-backdrop{position:fixed;inset:0;background:#0a0f197f;display:grid;place-items:center;z-index:50;padding:16px}.modal{max-width:460px;width:100%}.dot{display:inline-block;width:10px;height:10px;border-radius:50%;background:#b8c0cc;vertical-align:middle}.dot.on{background:#22b35e;box-shadow:0 0 0 3px #22b35e33}.dash-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:wrap}.dash-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.dash-actions select{width:auto;min-width:240px}.stats{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;margin:16px 0}.stat{background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow);padding:14px;color:var(--muted);font-size:.85rem}.stat span{display:block;font-size:1.6rem;font-weight:700;color:var(--text)}.stat.alertish span{color:var(--danger)}.filters{display:flex;gap:10px;align-items:center;margin-bottom:14px;flex-wrap:wrap}.filters input{flex:1;min-width:220px}.filters select{width:auto}.filters label.check{margin:0}.dash-layout{display:grid;grid-template-columns:1fr 360px;gap:16px;align-items:start}.tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:12px}.tile{text-align:left;font:inherit;color:inherit;cursor:pointer;background:var(--surface);border:1px solid transparent;border-left:5px solid var(--primary);border-radius:var(--radius);box-shadow:var(--shadow);padding:14px}.tile:hover{border-color:var(--border);border-left-color:var(--primary)}.tile.finished{border-left-color:var(--success);opacity:.85}.tile.flagged{border-left-color:var(--danger)}.tile.selected{outline:2px solid var(--primary)}.tile-head{display:flex;align-items:center;gap:8px}.tile-row{display:flex;justify-content:space-between;align-items:center;font-size:.85rem;gap:8px}.progress{height:6px;background:#e8ecf1;border-radius:3px;margin:10px 0 8px;overflow:hidden}.progress div{height:100%;background:var(--primary);transition:width .3s}.timer-sm{font-variant-numeric:tabular-nums;font-weight:600}.timer-sm.danger{color:var(--danger)}.badge.done{color:var(--success);font-weight:600}.incident{margin-top:8px;font-size:.8rem;color:var(--danger)}.feed{position:sticky;top:16px;max-height:calc(100vh - 32px);overflow:auto}.feed-head{display:flex;justify-content:space-between;align-items:center}.events{list-style:none;padding:0;margin:0;font-size:.85rem}.events li{padding:6px 0;border-bottom:1px solid #eef1f4}.events li.incident{color:var(--danger)}.events time{color:var(--muted);font-variant-numeric:tabular-nums;margin-right:4px}@media(max-width:900px){.exam-layout,.dash-layout{grid-template-columns:1fr}.stats{grid-template-columns:repeat(2,1fr)}.feed{position:static;max-height:none}}@media(max-width:560px){.row,.match-row{grid-template-columns:1fr}.match-arrow{display:none}}.hidden{display:none!important}.ok-text{color:var(--success);font-weight:600}.card.narrow.wide-card{max-width:640px}.camera-check{display:grid;grid-template-columns:220px 1fr;gap:16px;align-items:start;margin:16px 0;padding:14px;border:1px solid var(--border);border-radius:8px}.camera-preview{width:220px;aspect-ratio:4 / 3;background:#10161f;border-radius:6px;display:grid;place-items:center;overflow:hidden;text-align:center;padding:6px}.camera-preview video{width:100%;height:100%;object-fit:cover;transform:scaleX(-1)}.camera-preview .muted{color:#b8c0cc}.cam-indicator{font-size:.82rem;font-weight:600;color:var(--success)}.cam-indicator.off{color:var(--danger)}.spinner{width:42px;height:42px;margin:0 auto 12px;border-radius:50%;border:4px solid var(--primary-soft);border-top-color:var(--primary);animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.thumb{position:relative;aspect-ratio:4 / 3;background:#10161f;border-radius:6px;margin-bottom:8px;overflow:hidden;display:grid;place-items:center}.thumb img{width:100%;height:100%;object-fit:cover;transform:scaleX(-1)}.thumb .muted{color:#b8c0cc}.cam-flag{position:absolute;left:6px;bottom:6px;background:#0009;color:#7ee2a8;font-size:.72rem;padding:1px 6px;border-radius:4px}.cam-flag.off{color:#ff9b9b}.pill-warn{background:var(--warn-bg);color:var(--warn-text);font-size:.72rem;font-weight:700;padding:1px 8px;border-radius:999px;margin-left:auto}.reentry{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}.reentry-actions{display:flex;gap:6px}.live-cam{position:relative;background:#10161f;border-radius:8px;aspect-ratio:4 / 3;display:grid;place-items:center;overflow:hidden;margin:10px 0 8px;padding:0}.live-cam video{width:100%;height:100%;object-fit:contain;transform:scaleX(-1)}.live-cam p{padding:10px;color:#b8c0cc}.live-badge{position:absolute;top:8px;left:8px;background:var(--danger);color:#fff;font-size:.72rem;font-weight:700;padding:2px 8px;border-radius:4px}.feed .btn.small{margin:4px 4px 4px 0}@media(max-width:560px){.camera-check{grid-template-columns:1fr}.camera-preview{width:100%}}.grade-box{display:inline-block;margin:14px auto;padding:10px 26px;border-radius:10px;background:var(--error-bg);color:var(--danger);font-size:.85rem;text-align:center}.grade-box span{display:block;font-size:2.4rem;font-weight:800;line-height:1.1}.grade-box.pass{background:#e3f4ea;color:var(--success)}.head-row{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}.result-row{display:grid;grid-template-columns:1fr auto auto;gap:16px;align-items:center;padding:14px 0;border-top:1px solid var(--border)}.grade-mini{font-size:1.5rem;font-weight:800;color:var(--danger)}.grade-mini.pass{color:var(--success)}.grade-mini small{font-size:.8rem;font-weight:500;color:var(--muted)}.result-action{text-align:right}.back-link{display:inline-block;margin-bottom:12px;color:var(--primary);text-decoration:none}.review-head{display:flex;justify-content:space-between;align-items:center;gap:16px;flex-wrap:wrap;margin-bottom:14px}.review-head .grade-box{margin:0}.review-q{margin-bottom:14px}.points{font-weight:700;color:var(--warn-text)}.points.full{color:var(--success)}.points.zero{color:var(--danger)}.review-opts{list-style:none;padding:0;margin:0}.review-opts li{padding:8px 10px;border-radius:6px;margin:4px 0;border:1px solid var(--border)}.review-opts li.correct{border-color:#9bd3b2;background:#e3f4ea}.review-opts li.wrong{border-color:#f0b4b4;background:var(--error-bg)}.review-opts .mark{margin-right:6px}.tag-ok,.tag-bad{font-size:.72rem;font-weight:700;padding:1px 8px;border-radius:999px;margin-left:8px}.tag-ok{background:var(--success);color:#fff}.tag-bad{background:var(--danger);color:#fff}.review-table{width:100%;border-collapse:collapse;font-size:.9rem}.review-table th,.review-table td{padding:8px;border-bottom:1px solid var(--border);text-align:left}.review-table .ok-row td{background:#e3f4ea}.review-table .bad-row td{background:var(--error-bg)}.justification{margin-top:14px;padding:12px 14px;border-left:4px solid var(--primary);background:var(--primary-soft);border-radius:0 8px 8px 0}.justification p{margin:4px 0 0;white-space:pre-wrap}@media(max-width:560px){.result-row{grid-template-columns:1fr auto}.result-action{grid-column:1 / -1;text-align:left}}
