@import "https://fonts.googleapis.com/css2?family=Source+Serif+4:opsz,wght@8..60,400;8..60,600;8..60,700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@500;700&display=swap";:root{--color-bg:#faf7f0;--color-surface:#fff;--color-ink:#211e1b;--color-ink-muted:#6b6259;--color-ink-faint:#9a9086;--color-primary:#7a2e2e;--color-primary-dark:#5c2222;--color-primary-soft:#f3e4df;--color-accent:#b8862f;--color-accent-soft:#f6ecd8;--color-success:#2f6f62;--color-success-soft:#e3efea;--color-danger:#b33a3a;--color-danger-soft:#f7e6e3;--color-border:#e4ddd0;--color-border-strong:#cfc5b4;--font-display:"Source Serif 4", Georgia, serif;--font-body:"Inter", -apple-system, BlinkMacSystemFont, sans-serif;--font-mono:"JetBrains Mono", "SFMono-Regular", monospace;--radius-sm:4px;--radius-md:8px;--radius-lg:14px;--shadow-card:0 1px 2px #211e1b0a, 0 4px 16px #211e1b0f;--shadow-raised:0 2px 8px #211e1b14, 0 8px 28px #211e1b1a}*{box-sizing:border-box}html,body,#root{height:100%}body{background:var(--color-bg);background-image:linear-gradient(var(--color-border) 1px, transparent 1px);color:var(--color-ink);font-family:var(--font-body);-webkit-font-smoothing:antialiased;background-size:100% 42px;background-attachment:fixed;margin:0;font-size:15px;line-height:1.5}h1,h2,h3,h4{font-family:var(--font-display);letter-spacing:-.01em;margin:0 0 .4em;font-weight:600}a{color:inherit}button,input,select,textarea{font-family:inherit;font-size:inherit}:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.app-shell{flex-direction:column;min-height:100%;display:flex}.topbar{background:var(--color-surface);border-bottom:1px solid var(--color-border);z-index:20;justify-content:space-between;align-items:center;padding:14px 28px;display:flex;position:sticky;top:0}.topbar-brand{font-family:var(--font-display);color:var(--color-primary);align-items:baseline;gap:10px;font-size:20px;font-weight:700;display:flex}.topbar-brand .seal{border:2px solid var(--color-primary);width:30px;height:30px;font-family:var(--font-mono);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-size:12px;font-weight:700;display:inline-flex}.topbar-nav{align-items:center;gap:18px;font-size:14px;display:flex}.topbar-nav a{color:var(--color-ink-muted);font-weight:500;text-decoration:none}.topbar-nav a:hover{color:var(--color-primary)}.page{flex:1;width:100%;max-width:880px;margin:0 auto;padding:36px 24px 60px}.page-wide{max-width:1080px}.page-header{margin-bottom:28px}.page-header .eyebrow{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--color-accent);margin-bottom:6px;font-size:11px;font-weight:700;display:block}.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-card);padding:24px}.card-tight{padding:16px 20px}.paper-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-card);padding:28px;position:relative}.paper-card:before{content:"";border:1px dashed var(--color-border-strong);border-radius:calc(var(--radius-lg) - 4px);pointer-events:none;position:absolute;inset:8px}.btn{border-radius:var(--radius-md);cursor:pointer;border:1px solid #0000;justify-content:center;align-items:center;gap:8px;padding:10px 18px;font-size:14px;font-weight:600;transition:transform 60ms,box-shadow .15s,background .15s;display:inline-flex}.btn:active{transform:translateY(1px)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--color-primary);color:#fff}.btn-primary:hover:not(:disabled){background:var(--color-primary-dark)}.btn-outline{color:var(--color-primary);border-color:var(--color-primary);background:0 0}.btn-outline:hover:not(:disabled){background:var(--color-primary-soft)}.btn-ghost{color:var(--color-ink-muted);background:0 0}.btn-ghost:hover:not(:disabled){background:var(--color-border);color:var(--color-ink)}.btn-danger{background:var(--color-danger);color:#fff}.btn-danger:hover:not(:disabled){background:#92302f}.btn-block{width:100%}.btn-sm{padding:6px 12px;font-size:13px}.field{margin-bottom:18px}.field label{color:var(--color-ink-muted);margin-bottom:6px;font-size:13px;font-weight:600;display:block}.field input,.field select,.field textarea{border:1px solid var(--color-border-strong);border-radius:var(--radius-md);background:var(--color-surface);width:100%;color:var(--color-ink);padding:10px 12px}.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--color-primary)}.field-hint{color:var(--color-ink-faint);margin-top:4px;font-size:12px}.field-error{color:var(--color-danger);margin-top:4px;font-size:12px}.form-narrow{max-width:400px;margin:0 auto}.badge{font-family:var(--font-mono);letter-spacing:.02em;text-transform:uppercase;border-radius:999px;align-items:center;gap:5px;padding:4px 10px;font-size:11px;font-weight:700;display:inline-flex}.badge-neutral{background:var(--color-border);color:var(--color-ink-muted)}.badge-success{background:var(--color-success-soft);color:var(--color-success)}.badge-danger{background:var(--color-danger-soft);color:var(--color-danger)}.badge-accent{background:var(--color-accent-soft);color:var(--color-accent)}.alert{border-radius:var(--radius-md);border:1px solid #0000;margin-bottom:18px;padding:12px 16px;font-size:14px}.alert-danger{background:var(--color-danger-soft);color:var(--color-primary-dark);border-color:#e9c7c1}.alert-success{background:var(--color-success-soft);color:var(--color-success);border-color:#c9e1d9}.alert-info{background:var(--color-accent-soft);color:#7a5d1c;border-color:#ead9ae}.filter-row{flex-wrap:wrap;gap:10px;margin-bottom:24px;display:flex}.filter-row select{min-width:160px}.test-grid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:16px;display:grid}.test-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-card);flex-direction:column;gap:10px;padding:20px;display:flex}.test-card h3{font-size:17px}.test-card .meta{color:var(--color-ink-muted);flex-wrap:wrap;gap:12px;font-size:12.5px;display:flex}.test-card .meta span{align-items:center;gap:4px;display:inline-flex}.timer-chip{font-family:var(--font-mono);border-radius:var(--radius-md);background:var(--color-primary-soft);color:var(--color-primary-dark);letter-spacing:.02em;padding:8px 16px;font-size:16px;font-weight:700}.timer-chip.timer-warn{background:var(--color-danger-soft);color:var(--color-danger);animation:1s infinite pulse}@keyframes pulse{0%,to{opacity:1}50%{opacity:.6}}.exam-shell{grid-template-columns:1fr 260px;align-items:start;gap:20px;display:grid}@media (width<=860px){.exam-shell{grid-template-columns:1fr}}.question-number-chip{font-family:var(--font-mono);color:var(--color-accent);letter-spacing:.04em;font-size:13px;font-weight:700}.question-text{margin:10px 0 20px;font-size:16.5px;line-height:1.6}.omr-options{flex-direction:column;gap:10px;display:flex}.omr-option{border:1.5px solid var(--color-border-strong);border-radius:var(--radius-md);cursor:pointer;background:var(--color-surface);align-items:center;gap:14px;padding:12px 16px;transition:border-color .12s,background .12s;display:flex}.omr-option:hover{border-color:var(--color-primary)}.omr-option.selected{border-color:var(--color-primary);background:var(--color-primary-soft)}.omr-bubble{border:2px solid var(--color-ink-faint);width:26px;height:26px;font-family:var(--font-mono);color:var(--color-ink-faint);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-size:11px;font-weight:700;display:flex}.omr-option.selected .omr-bubble{border-color:var(--color-primary);background:var(--color-primary);color:#fff}.omr-option.review-correct{border-color:var(--color-success);background:var(--color-success-soft)}.omr-option.review-wrong{border-color:var(--color-danger);background:var(--color-danger-soft)}.omr-option.review-correct .omr-bubble{border-color:var(--color-success);background:var(--color-success);color:#fff}.omr-option.review-wrong .omr-bubble{border-color:var(--color-danger);background:var(--color-danger);color:#fff}.exam-actions{justify-content:space-between;margin-top:24px;display:flex}.palette-panel{position:sticky;top:84px}.palette-grid{grid-template-columns:repeat(5,1fr);gap:8px;margin-top:14px;display:grid}.palette-cell{aspect-ratio:1;border-radius:var(--radius-sm);border:1.5px solid var(--color-border-strong);background:var(--color-surface);font-family:var(--font-mono);cursor:pointer;color:var(--color-ink-muted);font-size:12px;font-weight:700}.palette-cell.answered{background:var(--color-success);border-color:var(--color-success);color:#fff}.palette-cell.review{background:var(--color-accent);border-color:var(--color-accent);color:#fff}.palette-cell.current{outline:2px solid var(--color-primary);outline-offset:2px}.legend{color:var(--color-ink-muted);flex-direction:column;gap:6px;margin-top:16px;font-size:12px;display:flex}.legend-item{align-items:center;gap:8px;display:flex}.legend-dot{border-radius:3px;width:10px;height:10px}.score-hero{text-align:center;padding:40px 20px}.score-hero .score-number{font-family:var(--font-display);color:var(--color-primary);font-size:56px;font-weight:700}.score-hero .score-total{color:var(--color-ink-muted);font-size:20px}.stat-row{grid-template-columns:repeat(auto-fit,minmax(110px,1fr));gap:12px;margin-top:24px;display:grid}.stat-box{text-align:center;border-radius:var(--radius-md);background:var(--color-bg);border:1px solid var(--color-border);padding:14px}.stat-box .num{font-family:var(--font-mono);font-size:22px;font-weight:700}.stat-box .label{color:var(--color-ink-muted);text-transform:uppercase;letter-spacing:.04em;font-size:11px}table.simple-table{border-collapse:collapse;width:100%;font-size:14px}table.simple-table th{text-align:left;text-transform:uppercase;letter-spacing:.04em;color:var(--color-ink-muted);border-bottom:2px solid var(--color-border);padding:10px 12px;font-size:11px}table.simple-table td{border-bottom:1px solid var(--color-border);padding:12px}table.simple-table tr:hover td{background:var(--color-bg)}.empty-state{text-align:center;color:var(--color-ink-muted);padding:60px 20px}.empty-state h3{color:var(--color-ink)}.center-screen{justify-content:center;align-items:center;min-height:100vh;padding:24px;display:flex}.spinner{border:3px solid var(--color-border);border-top-color:var(--color-primary);border-radius:50%;width:22px;height:22px;animation:.7s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}
