:root{--brand-primary: #0369a1;--brand-accent: #0ea5e9;--brand-light: #f0f9ff;--primary: #2563eb;--primary-dark: #1d4ed8;--primary-light: #eff6ff;--primary-border: #bfdbfe;--success: #16a34a;--success-light: #f0fdf4;--success-border: #bbf7d0;--error: #dc2626;--error-light: #fef2f2;--error-border: #fecaca;--warning: #d97706;--warning-light: #fffbeb;--bg: #f1f5f9;--card: #ffffff;--text: #0f172a;--text-muted: #64748b;--text-light: #94a3b8;--border: #e2e8f0;--shadow-sm: 0 1px 2px rgba(0,0,0,.05);--shadow: 0 1px 3px rgba(0,0,0,.1), 0 1px 2px rgba(0,0,0,.06);--shadow-md: 0 4px 6px rgba(0,0,0,.07), 0 2px 4px rgba(0,0,0,.06);--shadow-lg: 0 10px 15px rgba(0,0,0,.1), 0 4px 6px rgba(0,0,0,.05);--radius-sm: 8px;--radius: 12px;--radius-lg: 16px}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,sans-serif;background:var(--bg);color:var(--text);line-height:1.6;-webkit-font-smoothing:antialiased}a{color:var(--primary);text-decoration:none}a:hover{text-decoration:underline}.page-center{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:1rem}.container{max-width:1100px;margin:0 auto;padding:0 1.5rem}.card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:2rem}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;padding:.625rem 1.25rem;border:none;border-radius:var(--radius-sm);font-size:.9375rem;font-weight:600;font-family:inherit;cursor:pointer;transition:background .15s,transform .1s,box-shadow .15s;text-decoration:none}.btn:active{transform:scale(.98)}.btn:disabled{opacity:.55;cursor:not-allowed;transform:none}.btn-primary{background:var(--primary);color:#fff}.btn-primary:hover:not(:disabled){background:var(--primary-dark);box-shadow:0 4px 12px #2563eb59}.btn-secondary{background:var(--card);color:var(--text);border:1.5px solid var(--border)}.btn-secondary:hover:not(:disabled){background:var(--bg)}.btn-ghost{background:transparent;color:var(--primary)}.btn-ghost:hover:not(:disabled){background:var(--primary-light)}.btn-danger{background:var(--error);color:#fff}.btn-danger:hover:not(:disabled){background:#b91c1c}.btn-lg{padding:.75rem 2rem;font-size:1rem}.btn-sm{padding:.4rem .9rem;font-size:.8125rem}.btn-full{width:100%}.form-group{display:flex;flex-direction:column;gap:.375rem}.form-label{font-size:.875rem;font-weight:600;color:var(--text)}.form-input{padding:.625rem .875rem;border:1.5px solid var(--border);border-radius:var(--radius-sm);font-size:.9375rem;font-family:inherit;color:var(--text);background:var(--card);transition:border-color .15s,box-shadow .15s;outline:none}.form-input:focus{border-color:var(--primary);box-shadow:0 0 0 3px #2563eb26}.form-input::placeholder{color:var(--text-light)}.alert{padding:.75rem 1rem;border-radius:var(--radius-sm);font-size:.875rem;font-weight:500}.alert-error{background:var(--error-light);border:1px solid var(--error-border);color:var(--error)}.alert-success{background:var(--success-light);border:1px solid var(--success-border);color:var(--success)}.navbar{background:var(--card);border-bottom:1px solid var(--border);box-shadow:var(--shadow-sm);position:sticky;top:0;z-index:100}.navbar-inner{max-width:1100px;margin:0 auto;padding:0 1.5rem;height:60px;display:flex;align-items:center;justify-content:space-between}.navbar-brand{font-size:1.125rem;font-weight:700;color:var(--primary);letter-spacing:-.3px}.navbar-brand span{color:var(--text)}.navbar-user{display:flex;align-items:center;gap:1rem;font-size:.875rem;color:var(--text-muted)}.auth-card{width:100%;max-width:420px}.auth-header{text-align:center;margin-bottom:2rem}.auth-header h1{font-size:1.75rem;font-weight:700;color:var(--text);margin-bottom:.375rem}.auth-header p{color:var(--text-muted);font-size:.9375rem}.auth-form{display:flex;flex-direction:column;gap:1.25rem}.auth-footer{text-align:center;margin-top:1.5rem;font-size:.875rem;color:var(--text-muted)}.dashboard{padding:2rem 0}.dashboard-welcome{margin-bottom:2rem}.dashboard-welcome h1{font-size:1.75rem;font-weight:700;color:var(--text)}.dashboard-welcome p{color:var(--text-muted);margin-top:.25rem}.section-title{font-size:1rem;font-weight:700;color:var(--text);margin-bottom:1rem;letter-spacing:.3px;text-transform:uppercase;font-size:.8125rem;color:var(--text-muted)}.topics-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:1rem;margin-bottom:2rem}.topic-card{background:var(--card);border:1.5px solid var(--border);border-radius:var(--radius);padding:1.25rem;cursor:pointer;transition:border-color .15s,box-shadow .15s,transform .15s;display:flex;flex-direction:column;gap:.5rem}.topic-card:hover{border-color:var(--primary);box-shadow:0 4px 16px #2563eb1f;transform:translateY(-2px)}.topic-card-unit{font-size:.75rem;font-weight:600;color:var(--primary);text-transform:uppercase;letter-spacing:.5px}.topic-card-name{font-size:1rem;font-weight:700;color:var(--text);line-height:1.3}.topic-card-desc{font-size:.8125rem;color:var(--text-muted);line-height:1.4}.topic-card-count{font-size:.8125rem;color:var(--text-light);margin-top:auto;padding-top:.5rem;border-top:1px solid var(--border)}.mixed-quiz-banner{background:linear-gradient(135deg,var(--primary) 0%,#1e40af 100%);border-radius:var(--radius);padding:1.5rem 2rem;display:flex;align-items:center;justify-content:space-between;margin-bottom:2rem;gap:1rem}.mixed-quiz-banner-text h3{color:#fff;font-size:1.125rem;font-weight:700}.mixed-quiz-banner-text p{color:#fffc;font-size:.875rem;margin-top:.25rem}.btn-white{background:#fff;color:var(--primary);font-weight:700;white-space:nowrap}.btn-white:hover{background:var(--primary-light)}.attempts-list{display:flex;flex-direction:column;gap:.625rem}.attempt-row{background:var(--card);border:1px solid var(--border);border-radius:var(--radius-sm);padding:.875rem 1.125rem;display:flex;align-items:center;gap:1rem}.attempt-score{font-size:1.25rem;font-weight:800;min-width:52px;text-align:right}.attempt-score.pass{color:var(--success)}.attempt-score.fail{color:var(--error)}.attempt-meta{flex:1}.attempt-topic{font-size:.9rem;font-weight:600;color:var(--text)}.attempt-date{font-size:.8rem;color:var(--text-muted)}.no-attempts{color:var(--text-muted);font-size:.9375rem;padding:1rem 0}.quiz-layout{padding:2rem 0 4rem}.quiz-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:1.5rem;flex-wrap:wrap;gap:1rem}.quiz-topic-label{font-size:.875rem;color:var(--text-muted);font-weight:500}.quiz-topic-label strong{color:var(--text)}.timer{display:flex;align-items:center;gap:.5rem;font-size:1.125rem;font-weight:700;color:var(--text)}.timer.warning{color:var(--warning)}.timer.danger{color:var(--error)}.timer-icon{font-size:1.1rem}.progress-wrap{margin-bottom:1.5rem;display:flex;flex-direction:column;gap:.375rem}.progress-label{font-size:.8125rem;color:var(--text-muted);display:flex;justify-content:space-between}.progress-bar-bg{height:8px;background:var(--border);border-radius:99px;overflow:hidden}.progress-bar-fill{height:100%;background:var(--primary);border-radius:99px;transition:width .3s ease}.question-card{margin-bottom:1.5rem}.question-meta{display:flex;gap:.5rem;margin-bottom:1rem;flex-wrap:wrap}.badge{display:inline-block;padding:.2rem .6rem;border-radius:99px;font-size:.75rem;font-weight:600}.badge-blue{background:var(--primary-light);color:var(--primary)}.badge-easy{background:var(--success-light);color:var(--success)}.badge-medium{background:var(--warning-light);color:var(--warning)}.badge-hard{background:var(--error-light);color:var(--error)}.question-text{font-size:1.0625rem;color:var(--text);line-height:1.65;margin-bottom:1.25rem;white-space:pre-line}.code-block-wrap{margin-bottom:1.25rem;border-radius:var(--radius-sm);overflow:hidden;border:1px solid #2d3748}.code-block-header{background:#1a202c;padding:.4rem .875rem;font-size:.75rem;font-weight:600;color:#a0aec0;letter-spacing:.5px;text-transform:uppercase;border-bottom:1px solid #2d3748;display:flex;align-items:center;gap:.5rem}.code-dot{width:10px;height:10px;border-radius:50%;display:inline-block}.code-dot-r{background:#fc8181}.code-dot-y{background:#f6e05e}.code-dot-g{background:#68d391}pre[class*=language-]{margin:0!important;border-radius:0!important;font-size:.9rem!important}.choices{display:flex;flex-direction:column;gap:.625rem}.choice-btn{display:flex;align-items:center;gap:.875rem;padding:.875rem 1.125rem;background:var(--card);border:1.5px solid var(--border);border-radius:var(--radius-sm);font-size:.9375rem;font-family:inherit;color:var(--text);cursor:pointer;text-align:left;transition:border-color .15s,background .15s,box-shadow .15s;line-height:1.45;width:100%}.choice-btn:hover:not(.selected){border-color:var(--primary-border);background:var(--primary-light)}.choice-btn.selected{border-color:var(--primary);background:var(--primary-light);box-shadow:0 0 0 3px #2563eb26}.choice-letter{flex-shrink:0;width:32px;height:32px;border-radius:50%;background:var(--bg);border:1.5px solid var(--border);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:.875rem;color:var(--text-muted);transition:background .15s,border-color .15s,color .15s}.choice-btn.selected .choice-letter{background:var(--primary);border-color:var(--primary);color:#fff}.quiz-footer{display:flex;justify-content:flex-end;margin-top:1.5rem}.results-layout{padding:2rem 0 4rem}.score-hero{text-align:center;padding:2.5rem 2rem;margin-bottom:2rem}.score-circle{width:140px;height:140px;border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;margin:0 auto 1.25rem;border:8px solid}.score-circle.pass{border-color:var(--success);background:var(--success-light)}.score-circle.fail{border-color:var(--error);background:var(--error-light)}.score-pct{font-size:2.25rem;font-weight:800;line-height:1}.score-circle.pass .score-pct{color:var(--success)}.score-circle.fail .score-pct{color:var(--error)}.score-label{font-size:.75rem;font-weight:600;color:var(--text-muted)}.score-hero h2{font-size:1.375rem;font-weight:700;margin-bottom:.375rem}.score-hero p{color:var(--text-muted)}.score-stats{display:flex;justify-content:center;gap:2.5rem;margin-top:1.5rem}.score-stat-val{font-size:1.5rem;font-weight:800;color:var(--text)}.score-stat-lbl{font-size:.8rem;color:var(--text-muted)}.review-list{display:flex;flex-direction:column;gap:1rem}.review-item{background:var(--card);border:1.5px solid var(--border);border-radius:var(--radius);overflow:hidden}.review-item.correct{border-color:var(--success-border)}.review-item.wrong{border-color:var(--error-border)}.review-item-header{padding:.875rem 1.25rem;display:flex;align-items:center;gap:.75rem}.review-item.correct .review-item-header{background:var(--success-light)}.review-item.wrong .review-item-header{background:var(--error-light)}.review-icon{font-size:1.1rem}.review-q-text{font-size:.9375rem;font-weight:600;color:var(--text);flex:1;white-space:pre-line}.review-item-body{padding:1rem 1.25rem}.review-answers{display:flex;flex-wrap:wrap;gap:.625rem;margin-bottom:.875rem}.review-answer-chip{padding:.3rem .75rem;border-radius:99px;font-size:.8125rem;font-weight:600;border:1.5px solid transparent}.review-answer-chip.chosen-wrong{background:var(--error-light);border-color:var(--error-border);color:var(--error)}.review-answer-chip.chosen-correct,.review-answer-chip.correct-answer{background:var(--success-light);border-color:var(--success-border);color:var(--success)}.review-explanation{background:var(--bg);border-radius:var(--radius-sm);padding:.875rem 1rem;font-size:.875rem;color:var(--text-muted);line-height:1.6;white-space:pre-line}.review-explanation strong{color:var(--text);font-weight:600}.results-actions{display:flex;gap:1rem;justify-content:center;margin-top:2rem;flex-wrap:wrap}.loading{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:40vh;gap:1rem;color:var(--text-muted)}.spinner{width:36px;height:36px;border:3px solid var(--border);border-top-color:var(--primary);border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@media (max-width: 600px){.topics-grid{grid-template-columns:1fr 1fr}.mixed-quiz-banner{flex-direction:column;text-align:center}.score-stats{gap:1.5rem}.review-answers{flex-direction:column}}@media (max-width: 400px){.topics-grid{grid-template-columns:1fr}}code[class*=language-],pre[class*=language-]{color:#ccc;background:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.comment,.token.block-comment,.token.prolog,.token.doctype,.token.cdata{color:#999}.token.punctuation{color:#ccc}.token.tag,.token.attr-name,.token.namespace,.token.deleted{color:#e2777a}.token.function-name{color:#6196cc}.token.boolean,.token.number,.token.function{color:#f08d49}.token.property,.token.class-name,.token.constant,.token.symbol{color:#f8c555}.token.selector,.token.important,.token.atrule,.token.keyword,.token.builtin{color:#cc99cd}.token.string,.token.char,.token.attr-value,.token.regex,.token.variable{color:#7ec699}.token.operator,.token.entity,.token.url{color:#67cdcc}.token.important,.token.bold{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:green}
