:root{--red:#e53935;--green:#2e7d32;--yellow:#f9a825;--orange:#ef6c00;--gray:#78909c;--blue:#1565c0;--bg:#f6f8fb;--card:#fff;--border:#d9e0e8}*{box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Microsoft YaHei",Arial,sans-serif;margin:0;background:var(--bg);color:#17212b}.topbar{height:70px;background:#fff;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;padding:0 28px;position:sticky;top:0;z-index:10}.brand{font-size:30px;font-weight:900;color:#000}.userbar{font-size:14px;color:#546371}.container{max-width:1180px;margin:24px auto;padding:0 18px}.footer{position:fixed;right:20px;bottom:12px;font-size:12px;color:#555}.card{background:var(--card);border:1px solid var(--border);border-radius:16px;padding:20px;margin-bottom:18px;box-shadow:0 2px 12px rgba(20,40,60,.04)}.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px}.btn{display:inline-block;border:0;border-radius:10px;background:#111;color:#fff;padding:10px 15px;text-decoration:none;cursor:pointer;font-weight:700;margin:4px}.btn.secondary{background:#eceff3;color:#111}.btn.blue{background:var(--blue)}.btn.red{background:var(--red)}.btn.green{background:var(--green)}.btn.small{padding:6px 10px;font-size:13px}.menu-btn{font-size:18px;text-align:center;padding:22px}.input,select,textarea{width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:10px;background:#fff;margin:6px 0 12px}textarea{min-height:90px}.row{display:flex;gap:12px;align-items:flex-end;flex-wrap:wrap}.row>*{flex:1}.muted{color:#66727f;font-size:13px}.alert{padding:12px 14px;background:#fff3cd;border:1px solid #ffe08a;border-radius:10px;margin-bottom:12px}.todo{border-left:5px solid var(--red)}.todo li{color:var(--red);font-weight:700;margin:5px 0}.red-dot{display:inline-block;width:9px;height:9px;background:var(--red);border-radius:50%;vertical-align:top;margin-left:5px}.bigbox{border:2px solid #c8d2df;border-radius:16px;background:#fff;padding:16px;margin:16px 0}.smallbox{border:1px solid #dbe2ea;border-radius:12px;padding:12px;margin:10px;background:#f8fafc}.group-row{display:flex;justify-content:space-between;gap:10px;align-items:flex-start}.tag{display:inline-block;padding:4px 8px;border-radius:8px;font-size:12px;margin:2px;background:#eef2f7}.status-red{border-left:6px solid var(--red);background:#fff5f5}.status-green{border-left:6px solid var(--green);background:#f4fff5}.status-yellow{border-left:6px solid var(--yellow);background:#fffdf2}.status-orange{border-left:6px solid var(--orange);background:#fff7ed}.status-gray{border-left:6px solid var(--gray);background:#f7f9fa}.table{width:100%;border-collapse:collapse;background:#fff}.table th,.table td{border-bottom:1px solid var(--border);padding:10px;text-align:left;vertical-align:top}.table th{background:#f4f6f9}.question-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px}.qcard{border:1px solid var(--border);border-radius:12px;padding:10px;background:#fff}.qcard img{max-width:100%;max-height:220px;object-fit:contain;background:#f2f4f8;border-radius:8px}.absent{color:var(--red);font-weight:800}.pill{display:inline-block;padding:5px 9px;border-radius:999px;background:#eef2f7;font-size:12px}.modal-like{padding:12px;border:1px dashed #b7c3d0;border-radius:12px;background:#fafcff;margin-top:10px}.flash{padding:10px 12px;background:#e3f2fd;border:1px solid #90caf9;border-radius:10px;margin:10px 0}.center{max-width:480px;margin:60px auto}.danger-text{color:var(--red);font-weight:800}.ok-text{color:var(--green);font-weight:800}@media(max-width:700px){.brand{font-size:22px}.topbar{padding:0 14px}.table{font-size:13px}.container{padding:0 10px}}
.chips{display:flex;gap:8px;flex-wrap:wrap;margin:10px 0}.chip{background:#eef2ff;border:1px solid #c7d2fe;border-radius:999px;padding:5px 10px}.chip button{border:0;background:transparent;color:#b91c1c;font-weight:700;cursor:pointer}.soft{background:#f8fafc}.wide-table{overflow:auto}.part-row{padding:8px 0;border-top:1px solid #eee}.disabled{pointer-events:none;opacity:.45}.warn-text{color:#b45309;font-weight:600}.pill.orange{background:#fed7aa;color:#9a3412}
/* Prominent mastery percentages */
.percent-panel{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin:12px 0 6px}.percent-label{font-weight:800;color:#24303b}.mastery-percent{font-size:42px;font-weight:950;line-height:1;letter-spacing:-1px}.kp-percent{font-size:20px;font-weight:900}.pct-excellent{color:#15803d}.pct-good{color:#2563eb}.pct-watch{color:#ca8a04}.pct-risk{color:#dc2626}.pct-none{color:#64748b}.temp-percent{font-size:38px;font-weight:950;line-height:1}.percent-hint{font-size:13px;color:#66727f}.percent-card{border-left:7px solid #dbeafe;background:linear-gradient(90deg,#f8fbff,#fff)}
.memory-panel{margin-top:10px;padding:10px 12px;border-radius:12px;background:#f8fafc;display:flex;gap:12px;align-items:baseline;flex-wrap:wrap}
.memory-half-life{font-size:1.65rem;font-weight:800;color:#7c3aed}
.qcard-repeat-recent{border:2px solid #f59e0b;background:#fffaf0}
.qcard-repeat-same-lesson{border:2px solid #ef4444;background:#fff5f5}
.redpill{background:#fee2e2;color:#991b1b}
.status-blue{border-left:6px solid var(--blue);background:#f3f8ff}
.ability-radar-wrap{margin:16px 0 14px;padding:14px;border:1px solid #dbeafe;border-radius:16px;background:linear-gradient(180deg,#f8fbff,#fff)}
.ability-radar-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap}.ability-radar-head h3{margin:0 0 4px}.ability-score{font-size:38px;font-weight:950;line-height:1}.ability-score span{font-size:15px;margin-left:2px}.ability-radar{display:block;width:100%;max-width:560px;height:340px;margin:8px auto;cursor:pointer}.ability-detail{margin-top:8px}.ability-radar-wrap:hover{box-shadow:0 4px 18px rgba(21,101,192,.08)}
/* Achievement system */
.achievement-section{margin-top:28px;padding-top:18px;border-top:2px solid #dbeafe}.achievement-divider{display:flex;align-items:center;gap:12px;margin:8px 0 16px;color:#475569;font-weight:900}.achievement-divider:before,.achievement-divider:after{content:"";height:1px;background:#cbd5e1;flex:1}.achievement-block{background:#fff;border:1px solid var(--border);border-radius:18px;padding:18px;margin:16px 0;box-shadow:0 3px 14px rgba(15,23,42,.04)}.achievement-block h2{margin-top:0}.achievement-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:14px}.ach-card{position:relative;min-height:136px;border-radius:18px;padding:18px 16px 15px;cursor:pointer;overflow:hidden;transition:.18s transform,.18s box-shadow;border:2px solid #cbd5e1;background:#f8fafc}.ach-card:hover{transform:translateY(-2px);box-shadow:0 10px 28px rgba(15,23,42,.13)}.ach-card:before{content:"";position:absolute;right:-30px;top:-30px;width:90px;height:90px;border-radius:50%;opacity:.18}.ach-card:after{content:"";position:absolute;left:12px;bottom:10px;width:70px;height:6px;border-radius:999px;opacity:.22}.ach-ribbon{position:absolute;right:12px;top:10px;font-size:12px;font-weight:900;border-radius:999px;padding:4px 8px;background:rgba(255,255,255,.76)}.ach-name{font-size:22px;font-weight:950;letter-spacing:.5px;margin:18px 0 8px}.ach-text{font-size:13px;line-height:1.55;color:#475569}.ach-card.unlocked.level-one{border-color:#60a5fa;background:linear-gradient(135deg,#eff6ff,#fff);box-shadow:0 0 14px rgba(96,165,250,.22)}.ach-card.unlocked.level-one:before,.ach-card.unlocked.level-one:after{background:#60a5fa}.ach-card.unlocked.level-two{border-color:#a78bfa;background:linear-gradient(135deg,#f5f3ff,#fff);box-shadow:0 0 16px rgba(167,139,250,.25)}.ach-card.unlocked.level-two:before,.ach-card.unlocked.level-two:after{background:#8b5cf6}.ach-card.unlocked.level-three{border-color:#f59e0b;background:linear-gradient(135deg,#fffbeb,#fff);box-shadow:0 0 18px rgba(245,158,11,.32)}.ach-card.unlocked.level-three:before,.ach-card.unlocked.level-three:after{background:#f59e0b}.ach-card.unlocked.level-group{border-color:#10b981;background:linear-gradient(135deg,#ecfdf5,#fff);box-shadow:0 0 18px rgba(16,185,129,.32)}.ach-card.unlocked.level-group:before,.ach-card.unlocked.level-group:after{background:#10b981}.ach-card.locked{filter:grayscale(1);opacity:.72;background:#f1f5f9;border-color:#cbd5e1;box-shadow:none}.ach-card.locked .ach-name{color:#64748b}.ach-card.locked .ach-text{color:#94a3b8}.ach-quick_answer:after{width:90px}.ach-voice:after{height:8px}.ach-hard:after{width:54px}.ach-support:after{width:80px}.ach-question:after{width:36px;height:10px}.ach-homework:after{width:100px;height:5px}.ach-team_contrib:after{width:70px;height:12px}.ach-improve:after{transform:skewX(-20deg)}.ach-bet:after{width:45px}.ach-modal{position:fixed;inset:0;background:rgba(15,23,42,.55);z-index:1000;display:flex;align-items:center;justify-content:center;padding:18px}.ach-modal-card{background:#fff;border-radius:22px;max-width:560px;width:100%;padding:28px;box-shadow:0 18px 60px rgba(0,0,0,.25);position:relative;border:2px solid #dbeafe}.ach-modal-close{position:absolute;right:16px;top:12px;border:0;background:#f1f5f9;border-radius:999px;width:34px;height:34px;font-size:22px;cursor:pointer}.ach-modal-level{font-weight:900;color:#2563eb}.ach-modal-name{font-size:30px;margin:8px 0}.ach-modal-text{color:#334155;line-height:1.65}.ach-modal-condition{margin:14px 0;color:#475569;font-weight:700}.ach-progress{height:10px;background:#e5e7eb;border-radius:999px;overflow:hidden}.ach-progress-bar{height:100%;width:0;background:#2563eb;border-radius:999px}
.ach-admin-toolbar{display:flex;align-items:center;justify-content:space-between;gap:18px;flex-wrap:wrap}.ach-admin-toolbar h2{margin:0 0 6px}.switch-line{font-weight:800;color:#334155;display:flex;align-items:center;gap:8px}.switch-line input{transform:scale(1.2)}.ach-card.admin-card.locked{filter:grayscale(1);opacity:.78}.achievement-section.preview-unlocked .ach-card.admin-card.locked{filter:none;opacity:1}.achievement-section.preview-unlocked .ach-card.admin-card.locked.level-one{border-color:#60a5fa;background:linear-gradient(135deg,#eff6ff,#fff);box-shadow:0 0 14px rgba(96,165,250,.22)}.achievement-section.preview-unlocked .ach-card.admin-card.locked.level-one:before,.achievement-section.preview-unlocked .ach-card.admin-card.locked.level-one:after{background:#60a5fa}.achievement-section.preview-unlocked .ach-card.admin-card.locked.level-two{border-color:#a78bfa;background:linear-gradient(135deg,#f5f3ff,#fff);box-shadow:0 0 16px rgba(167,139,250,.25)}.achievement-section.preview-unlocked .ach-card.admin-card.locked.level-two:before,.achievement-section.preview-unlocked .ach-card.admin-card.locked.level-two:after{background:#8b5cf6}.achievement-section.preview-unlocked .ach-card.admin-card.locked.level-three{border-color:#f59e0b;background:linear-gradient(135deg,#fffbeb,#fff);box-shadow:0 0 18px rgba(245,158,11,.32)}.achievement-section.preview-unlocked .ach-card.admin-card.locked.level-three:before,.achievement-section.preview-unlocked .ach-card.admin-card.locked.level-three:after{background:#f59e0b}.achievement-section.preview-unlocked .ach-card.admin-card.locked.level-group{border-color:#10b981;background:linear-gradient(135deg,#ecfdf5,#fff);box-shadow:0 0 18px rgba(16,185,129,.32)}.achievement-section.preview-unlocked .ach-card.admin-card.locked.level-group:before,.achievement-section.preview-unlocked .ach-card.admin-card.locked.level-group:after{background:#10b981}.score-help{font-size:12px;color:#64748b;margin-top:4px}.score-target-box{border:1px dashed #cbd5e1;border-radius:14px;padding:12px;margin:10px 0;background:#f8fafc}

.score-summary-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px;margin-top:12px}.mini-stat{border:1px solid #dbeafe;background:#f8fafc;border-radius:12px;padding:12px}.mini-stat b{display:block;font-size:20px;color:#0f172a}.mini-stat span{display:block;color:#64748b;font-size:13px;margin-top:4px}.student-submit-detail{border:1px solid #e5e7eb;border-radius:12px;margin:10px 0;padding:10px;background:#fff}.student-submit-detail summary{cursor:pointer;display:flex;gap:10px;align-items:center;flex-wrap:wrap}.homework-result-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:10px;margin-top:10px}.homework-result-card{border:1px solid #e5e7eb;border-radius:12px;padding:10px;background:#f8fafc}.result-q-title{margin-bottom:4px}.result-parts{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}.part-badge{display:inline-flex;align-items:center;border-radius:999px;padding:4px 8px;font-size:13px;font-weight:700}.part-correct{background:#dcfce7;color:#166534}.part-wrong{background:#fee2e2;color:#991b1b}.part-missing{background:#e5e7eb;color:#475569}.small-text{font-size:12px}.pill.green{background:#dcfce7;color:#166534;border-color:#86efac}
.selected-card{outline:3px solid #38bdf8;box-shadow:0 0 0 4px rgba(56,189,248,.12)}
.test-score-panel{margin:14px 0 8px;padding:14px;border-radius:14px;background:#f8fafc;border:1px solid #dbeafe;display:flex;gap:14px;align-items:baseline;flex-wrap:wrap}.test-score-big{font-size:44px;font-weight:950;line-height:1}.test-rank-big{font-size:26px;font-weight:900}.soft{background:#f8fafc}

/* PATCH_INPUT_MEMORY_AND_TEST_SCORE_FIX */
.wide-table{overflow-x:auto;max-width:100%;}
.data-grid th.score-col,.data-grid td.score-col{min-width:130px;width:130px;background:#fff;}
.data-grid th.score-col{background:#f4f6f9;}
.test-score-input{min-width:108px!important;width:108px!important;max-width:108px!important;text-align:center;font-weight:800;font-size:16px;padding:8px 6px!important;}
.input-memory-note{font-size:12px;color:#64748b;margin-top:4px;}

/* PATCH_TRENDS_SORT_TODO_UI */
.test-trend-wrap{margin:16px 0 16px;padding:16px;border:1px solid #dbeafe;border-radius:18px;background:linear-gradient(180deg,#f8fbff,#fff);box-shadow:0 2px 14px rgba(37,99,235,.04)}
.trend-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}.trend-head h3{margin:0 0 4px}.trend-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}.trend-card{border:1px solid #e0e7ff;border-radius:16px;background:#fff;padding:12px;box-shadow:0 4px 16px rgba(15,23,42,.05)}.trend-title{font-weight:900;color:#1e293b;margin-bottom:6px}.test-line-chart{width:100%;height:240px;display:block}
.transposed-grid th.student-col,.transposed-grid td{min-width:92px;text-align:center}.transposed-grid .sticky-qno{position:sticky;left:0;z-index:2;min-width:92px;background:#f4f6f9;text-align:left}.transposed-grid .score-row td{background:#fff}.transposed-grid input[type=radio]{margin-right:3px}.old-todo-panel{margin-top:12px}.old-todo-list{margin-top:10px}.old-todo-list li{color:#92400e;font-weight:700;margin:5px 0}.todo-muted{color:#92400e;background:#fffbeb;border:1px solid #fde68a;border-radius:10px;padding:10px;margin-top:8px}

/* Achievement v3: first-time unlock and classroom-test honors */
.ach-card.unclaimed{filter:none;opacity:1;background:linear-gradient(135deg,#f8fafc,#fff);position:relative}
.ach-card.unclaimed .ach-name{color:#1e293b}.ach-card.unclaimed .ach-text{color:#64748b}
.ach-card.unclaimed.level-one{border-color:#60a5fa;box-shadow:0 0 16px rgba(96,165,250,.26)}
.ach-card.unclaimed.level-two{border-color:#a78bfa;box-shadow:0 0 18px rgba(167,139,250,.28)}
.ach-card.unclaimed.level-three{border-color:#f59e0b;box-shadow:0 0 20px rgba(245,158,11,.34)}
.ach-card.unclaimed.level-honor{border-color:#14b8a6;box-shadow:0 0 18px rgba(20,184,166,.30)}
.ach-card.unclaimed:before{background:currentColor}.ach-card.unclaimed:after{background:currentColor}
.ach-card.unlocked.level-honor{border-color:#14b8a6;background:linear-gradient(135deg,#f0fdfa,#fff);box-shadow:0 0 18px rgba(20,184,166,.32)}
.ach-card.unlocked.level-honor:before,.ach-card.unlocked.level-honor:after{background:#14b8a6}
.achievement-section.preview-unlocked .ach-card.admin-card.locked.level-honor{border-color:#14b8a6;background:linear-gradient(135deg,#f0fdfa,#fff);box-shadow:0 0 18px rgba(20,184,166,.32)}
.achievement-section.preview-unlocked .ach-card.admin-card.locked.level-honor:before,.achievement-section.preview-unlocked .ach-card.admin-card.locked.level-honor:after{background:#14b8a6}
.ach-test{background-image:radial-gradient(circle at 12% 18%,rgba(59,130,246,.08),transparent 28%),linear-gradient(135deg,rgba(255,255,255,.94),rgba(248,250,252,.94))}
.ach-card.ach-test:after{height:9px;width:88px;clip-path:polygon(0 50%,12% 0,24% 50%,36% 0,48% 50%,60% 0,72% 50%,84% 0,100% 50%,84% 100%,72% 50%,60% 100%,48% 50%,36% 100%,24% 50%,12% 100%)}
.ach-todo{font-weight:900}.ach-todo.level-one{color:#2563eb}.ach-todo.level-two{color:#7c3aed}.ach-todo.level-three{color:#d97706}.ach-todo.level-honor{color:#0f766e}
.align-end{display:flex;align-items:flex-end}.grade-exam-panel summary{cursor:pointer;padding:8px 0}.grade-exam-panel[open]{border-color:#bfdbfe;background:#f8fbff}
