:root{--primary: #1e56a0;--primary-dark: #17457f;--primary-light: #eaf2fc;--good: #1a9e6c;--bad: #d64545;--mid: #d9930d;--bg: #f4f6f9;--card: #ffffff;--text: #243b53;--muted: #7a8aa0;--line: #e3e8ef;--radius: 12px}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body{margin:0;padding:0;background:var(--bg);color:var(--text);font-family:-apple-system,PingFang SC,Microsoft YaHei,Helvetica Neue,Arial,sans-serif;font-size:15px;line-height:1.6}a{color:var(--primary);text-decoration:none}button{font-family:inherit}.nowrap{white-space:nowrap}.topbar{background:linear-gradient(135deg,#17457f,#1e56a0);color:#fff;position:sticky;top:0;z-index:50;box-shadow:0 2px 8px #17457f40}.topbar-inner{max-width:980px;margin:0 auto;padding:10px 16px;display:flex;align-items:center;gap:14px;flex-wrap:wrap}.brand{color:#fff;font-weight:700;font-size:17px;letter-spacing:.5px}.nav-links{display:flex;gap:4px;flex-wrap:wrap}.nav-links a{color:#fffc;padding:5px 12px;border-radius:18px;font-size:14px}.nav-links a.active,.nav-links a:hover{color:#fff;background:#ffffff29}.nav-user{margin-left:auto;display:flex;align-items:center;gap:8px;font-size:14px}.nav-track{background:#fff3;border-radius:12px;padding:1px 10px;font-size:12px}.nav-user .guest-tag{background:#ffe28a;color:#6b3a00}.page{max-width:980px;margin:0 auto;padding:18px 16px 60px}.page.narrow{max-width:480px}.page-title{font-size:21px;margin:14px 0 6px}.muted{color:var(--muted)}.small{font-size:12.5px}.boot{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:90px 0;color:var(--text);font-size:15px}.boot-spin{width:34px;height:34px;border-radius:50%;border:3px solid rgba(42,111,196,.2);border-top-color:var(--primary);animation:bootspin .8s linear infinite}.boot-tip{font-size:12.5px;color:var(--muted)}@keyframes bootspin{to{transform:rotate(360deg)}}.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px;background:linear-gradient(160deg,#17457f,#2a6fc4 60%,#3f8ae0)}.login-card{background:#fff;border-radius:18px;padding:36px 30px;width:100%;max-width:400px;text-align:center;box-shadow:0 18px 50px #0a234659}.login-logo{margin-bottom:4px}.login-logo img{height:96px;width:auto;display:block;margin:0 auto}.login-card h1{font-size:20px;margin:4px 0 2px}.login-form{margin-top:22px;display:flex;flex-direction:column;gap:12px}.login-card p{margin:6px 0}.guest-divider{display:flex;align-items:center;gap:10px;margin:22px 0 14px;color:var(--muted);font-size:13px}.guest-divider:before,.guest-divider:after{content:"";flex:1;height:1px;background:var(--line)}.guest-pick p{margin-bottom:8px}.guest-tracks{display:flex;flex-direction:column;gap:8px}.tb-mini{flex:1 1 calc(33.33% - 5.5px);min-width:80px;padding:8px 6px!important;border-radius:8px!important;border:1.5px solid var(--line);background:#fff;cursor:pointer;font-size:13px;white-space:nowrap}.tb-mini.on{border-color:var(--primary);background:var(--primary-light);color:var(--primary-dark);font-weight:600}.btn.guest-btn{background:linear-gradient(135deg,#ffd864,#ffb52e);color:#5a3300;border-color:#e89e0a;font-weight:700;box-shadow:0 4px 14px #e89e0a38}.btn.guest-btn:hover{background:linear-gradient(135deg,#ffe488,#ffc24d)}.guest-orgs{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:10px}.guest-orgs .ipt{margin:0;grid-column:span 1}.guest-orgs .ipt.full{grid-column:1 / -1}@media (max-width: 480px){.guest-orgs{grid-template-columns:1fr}}.guest-tag{display:inline-block;padding:1px 7px;border-radius:999px;background:#fff3cc;color:#a06b00;font-size:11.5px;line-height:1.5}.guest-tag.big{padding:3px 10px;font-size:12.5px;margin-right:8px}.guest-banner{background:#fff8e1;border:1px solid #f3d27a;color:#735300;padding:11px 14px;border-radius:10px;font-size:14px;margin-bottom:18px}.login-footer{margin-top:22px;padding-top:16px;border-top:1px solid var(--line);text-align:center}.admin-entry{color:var(--muted);font-size:12px;opacity:.55;text-decoration:none;letter-spacing:.5px}.admin-entry:hover{color:var(--primary);opacity:1}.ipt{width:100%;padding:11px 14px;border:1.5px solid var(--line);border-radius:10px;font-size:15px;outline:none;background:#fff;color:var(--text)}.ipt:focus{border-color:var(--primary);box-shadow:0 0 0 3px #1e56a01f}.ipt.big{padding:13px 16px;font-size:16px}.batch-area{font-family:inherit;margin-top:8px;resize:vertical}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:9px 18px;border-radius:10px;border:1.5px solid transparent;font-size:15px;cursor:pointer;transition:all .15s;background:#fff;color:var(--text)}.btn.primary{background:var(--primary);color:#fff}.btn.primary:hover{background:var(--primary-dark)}.btn.ghost{border-color:var(--line);color:var(--text)}.btn.ghost:hover{border-color:var(--primary);color:var(--primary)}.btn.danger{background:#fdeeee;color:var(--bad)}.btn.big{padding:13px 22px;font-size:16px}.btn.tiny{padding:3px 9px;font-size:12.5px;border-radius:7px}.btn.full{width:100%}.btn:disabled{opacity:.6;cursor:not-allowed}.card-actions{display:flex;gap:10px;flex-wrap:wrap;align-items:center}.card-actions.center{justify-content:center}.home-hero{margin:6px 0 14px}.home-hero h2{margin:4px 0}.made-by{display:inline-flex;align-items:center;gap:5px;font-size:12.5px;color:var(--muted);background:#eef3fa;border:1px solid #dbe6f3;border-radius:999px;padding:3px 12px;letter-spacing:.5px;margin-bottom:8px}.made-by-name{color:var(--primary);font-weight:700}.track-tabs{display:flex;gap:10px;flex-wrap:wrap;margin:12px 0 18px}.track-tab{flex:1;min-width:180px;display:flex;flex-direction:column;align-items:flex-start;gap:3px;padding:13px 16px;border-radius:var(--radius);border:2px solid var(--line);background:#fff;cursor:pointer;font-size:14px;color:var(--text)}.track-tab.on{border-color:var(--primary);background:var(--primary-light)}.track-badge{display:inline-block;padding:1px 10px;border-radius:12px;color:#fff;font-size:12.5px;font-weight:600}.tb-A{background:#d9930d}.tb-B{background:#1a9e6c}.tb-C{background:#7b5cd6}.cat-block{margin-bottom:10px}.cat-title{font-size:15px;color:var(--primary);border-left:4px solid var(--primary);padding-left:8px;margin:14px 0 10px}.cat-header{display:flex;align-items:center;gap:8px;padding:12px 14px;background:var(--card);border:1.5px solid var(--line);border-radius:var(--radius);cursor:pointer;transition:all .15s}.cat-header:hover{border-color:var(--primary)}.cat-header .cat-name{flex:1;font-size:15px;font-weight:600;color:var(--text)}.cat-header .cat-count{flex:0 0 70px;text-align:right;font-size:12.5px;white-space:nowrap}.cat-header:after{content:"▶";font-size:12px;color:var(--muted);transition:transform .15s}.cat-block.expanded .cat-header:after{transform:rotate(90deg)}.cat-block .cat-majors{display:none;margin-bottom:14px}.cat-block.expanded .cat-majors{display:grid}.grid-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:12px}.major-card{background:var(--card);border:1.5px solid var(--line);border-radius:var(--radius);padding:15px 16px;display:flex;flex-direction:column;gap:4px;transition:all .15s;color:var(--text)}.major-card:hover{border-color:var(--primary);box-shadow:0 6px 18px #1e56a01f;transform:translateY(-2px)}.major-name{font-weight:600;font-size:15.5px}.major-meta{font-size:12.5px}.major-cta{margin-top:8px;color:var(--primary);font-size:13.5px;font-weight:600}.paper-card{background:var(--card);border:1.5px solid var(--line);border-radius:var(--radius);padding:16px;display:flex;flex-direction:column;gap:6px}.paper-card h3{margin:0}.mode-card{background:var(--card);border:1.5px dashed #b9c8dd;border-radius:var(--radius);padding:18px;text-align:center;cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:6px;color:var(--text)}.mode-card.href{cursor:pointer}.mode-card:hover{border-color:var(--primary);background:var(--primary-light)}.mode-num{font-size:26px;font-weight:700;color:var(--primary)}.mode-label{font-size:13px}.grid-cards.two{grid-template-columns:1fr 1fr}.exam-list{display:flex;flex-direction:column;gap:12px;margin-top:12px}.q-card{background:var(--card);border:1.5px solid var(--line);border-radius:var(--radius);padding:16px}.q-card.ok{border-color:#bfe6d5}.q-card.no{border-color:#f3caca}.q-card.skip{opacity:.85}.case-card{padding:16px 16px 4px}.sub-card{margin:10px 0 14px;border-top:1px dashed var(--line);padding-top:12px}.sec-title{margin:22px 0 4px;font-size:16px;color:var(--primary);border-left:4px solid var(--primary);padding-left:8px}.q-head{display:flex;gap:8px;align-items:center}.q-type{font-size:12px;padding:1px 9px;border-radius:10px;color:#fff}.tag-judge{background:#7b5cd6}.tag-single{background:#1e56a0}.tag-multi{background:#d9930d}.tag-blank{background:#0d8f8f}.tag-case{background:#d64545}.q-score{font-size:12.5px;color:var(--muted)}.q-stem{display:flex;gap:8px}.q-no{font-weight:700;color:var(--primary);flex-shrink:0}.sub-no{color:var(--muted)}.case-mat{font-size:12px;font-weight:700;color:#fff;background:var(--primary);border-radius:6px;padding:2px 9px;align-self:flex-start;letter-spacing:1px}.case-tip{margin:8px 0 0}.case-card>.q-stem+img{margin-top:10px}.q-text{word-break:break-word}.q-image,.expl-image{display:block;max-width:100%;height:auto;margin:10px 0;border-radius:8px;border:1px solid var(--line);background:#fff}.case-prefix{background:#f7f9fc;border-radius:8px;padding:10px 12px;font-size:13.5px;color:#51617a;margin-bottom:10px}.opt-list{display:flex;flex-direction:column;gap:8px;margin-top:12px}.multi-hint{display:flex;align-items:center;gap:7px;margin-top:12px;margin-bottom:-4px;font-size:12.5px;color:#a97708}.multi-live{margin-top:8px;font-weight:600;color:#a97708;letter-spacing:1px}.multi-badge{display:inline-flex;align-items:center;padding:1.5px 8px;border-radius:10px;background:#fdf3dd;border:1px solid #f0dca6;color:#a97708;font-weight:700;letter-spacing:.5px}.multi-hint-text{opacity:.9}.opt{display:flex;align-items:flex-start;gap:10px;text-align:left;padding:10px 13px;border:1.5px solid var(--line);border-radius:10px;background:#fff;cursor:pointer;font-size:14.5px;line-height:1.55}.opt:hover{border-color:#9db8d9}.opt.picked{border-color:var(--primary);background:var(--primary-light)}.opt.right{border-color:var(--good);background:#ecf9f3}.opt.wrong{border-color:var(--bad);background:#fdf0f0}.opt-letter{flex-shrink:0;width:24px;height:24px;border-radius:50%;border:1.5px solid currentColor;display:inline-flex;align-items:center;justify-content:center;font-size:13px;font-weight:600;margin-top:1px}.opt-row{display:flex;gap:10px;margin-top:12px}.opt-row .opt{flex:1;justify-content:center;font-size:16px}.blank-input{margin-top:12px;width:100%;padding:8px 12px;font-size:14.5px;border:1.5px solid var(--line);border-radius:8px;outline:none;background:#fff;color:var(--text)}.blank-input:focus{border-color:var(--primary);box-shadow:0 0 0 3px #1e56a01f}.blank-input.blank-inline{display:inline-block;width:96px;min-width:70px;max-width:150px;margin:0 3px;padding:2px 6px;font-size:14px;border-width:0 0 1.5px 0;border-radius:4px 4px 0 0;vertical-align:middle}.blank-input.blank-inline:focus{box-shadow:none;border-bottom-color:var(--primary)}.blank-stem{display:inline;line-height:1.8}.blank-stem.legacy{display:block}.blank-stem.legacy .blank-input{margin-top:6px}.blank-stem.legacy .blank-input:first-child{margin-top:0}.blank-review{margin-top:10px;display:flex;flex-direction:column;gap:6px;font-size:14px}.blank-line{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.blank-label{color:var(--muted);font-size:13px;flex-shrink:0}.blank-mine{background:#f2f6fb;border-radius:8px;padding:6px 10px;color:var(--text);min-width:40px;text-align:center}.blank-mine.empty{color:var(--muted)}.blank-std{background:#ecf9f3;border-radius:8px;padding:6px 10px;color:var(--good);min-width:40px;text-align:center}.blank-arrow{color:var(--muted);font-size:12px}.blank-tag{font-size:12px;color:var(--muted)}.blank-tag.ok{color:var(--good);font-weight:700}.expl{margin-top:12px;background:#f7f9fc;border-radius:10px;padding:10px 14px;font-size:13.5px;display:flex;flex-direction:column;gap:4px}.expl-line b{color:var(--primary);margin-right:8px}.expl-line span{white-space:pre-wrap}.expl-ans{font-weight:700;color:var(--good)}.expl-hl{font-weight:700;color:var(--primary)}.mark{font-size:13px;margin-top:10px;font-weight:600}.mark-ok{color:var(--good)}.mark-no{color:var(--bad)}.mark-skip{color:var(--muted)}.exam-topbar{position:sticky;top:54px;z-index:40;background:var(--bg);padding:8px 0;display:flex;align-items:center;gap:10px;flex-wrap:wrap;border-bottom:1px solid var(--line)}.exam-title{font-weight:700;font-size:16px;flex:1;min-width:160px}.exam-ops{display:flex;gap:8px;align-items:center}.timer{font-variant-numeric:tabular-nums;font-weight:700;font-size:16px;background:#fff;border:1.5px solid var(--line);padding:5px 12px;border-radius:10px}.timer.danger{color:var(--bad);border-color:var(--bad)}.exam-sub{margin-top:8px;font-size:13px}.exam-distribution{margin-top:6px;margin-bottom:12px;font-size:12.5px;line-height:1.6}.exam-footer{position:sticky;bottom:0;background:var(--bg);padding:10px 0 14px;border-top:1px solid var(--line)}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f1e3280;z-index:100;display:flex;align-items:center;justify-content:center;padding:20px}.modal{background:#fff;border-radius:16px;padding:24px;max-width:560px;width:100%;max-height:80vh;overflow:auto}.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(48px,1fr));gap:8px;margin:14px 0}.card-cell{padding:9px 0;border:1.5px solid var(--line);border-radius:9px;background:#fff;font-size:14px;cursor:pointer}.card-cell.done{background:var(--primary);color:#fff;border-color:var(--primary)}.result-hero{text-align:center;padding:26px 0 10px}.result-score{font-size:52px;font-weight:800;line-height:1.1}.result-total{font-size:20px;color:var(--muted);margin-top:-6px}.good{color:var(--good)}.mid{color:var(--mid)}.bad{color:var(--bad)}.result-meta{text-align:center;margin:6px 0 18px}.me-summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:10px;margin:14px 0}.stat-card{background:var(--card);border:1.5px solid var(--line);border-radius:var(--radius);padding:14px;text-align:center}.stat-num{font-size:26px;font-weight:800;color:var(--primary)}.stat-num.ok{color:var(--good)}.stat-num.bad{color:var(--bad)}.stat-label{font-size:12.5px}.batch-head{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap}.batch-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:12px 0}.batch-panel .stat-card{padding:10px 4px}.batch-panel .stat-num{font-size:22px}@media (max-width: 480px){.batch-stats{grid-template-columns:repeat(2,1fr)}}.absent-box{margin-top:10px;background:#fdf6f6;border:1px dashed #e8b8b8;border-radius:8px;padding:8px 12px}.absent-title{font-size:13px;color:#b03030;font-weight:600;margin-bottom:6px}.absent-chip{display:inline-block;margin:2px 5px 2px 0;padding:2px 10px;background:#fff;border:1px solid #eec9c9;color:#a33;border-radius:999px;font-size:12.5px}.ok-line{margin-top:10px;color:var(--good);font-weight:600}.panel{background:var(--card);border:1.5px solid var(--line);border-radius:var(--radius);padding:16px;margin-bottom:16px}.form-row{display:flex;gap:10px;flex-wrap:wrap;margin:8px 0}.form-row .ipt{flex:1;min-width:150px}.tbl-wrap{overflow-x:auto;background:var(--card);border:1.5px solid var(--line);border-radius:var(--radius)}.tbl{width:100%;border-collapse:collapse;font-size:13.5px;min-width:560px}.tbl th,.tbl td{padding:9px 12px;text-align:left;border-bottom:1px solid var(--line);white-space:nowrap}.tbl th{background:#f2f6fb;color:#51617a;font-weight:600}.tbl tr:last-child td{border-bottom:none}.tbl .ops{display:flex;gap:6px}.practice-card{margin:0 auto}.p-prog{margin:10px 0 14px;font-variant-numeric:tabular-nums}.p-feedback{margin-top:12px;border-radius:10px;padding:10px 14px;font-weight:600}.pf-ok{background:#ecf9f3;color:var(--good)}.pf-no{background:#fdf0f0;color:var(--bad)}.back-link{display:inline-block;margin-top:10px}.toast{position:fixed;left:50%;bottom:46px;transform:translate(-50%,20px);background:#2c3e50;color:#fff;padding:10px 20px;border-radius:26px;font-size:14px;opacity:0;transition:all .3s;z-index:200;max-width:88vw;text-align:center}.toast.show{opacity:1;transform:translate(-50%)}.toast.error{background:var(--bad)}.roadmap-banner{display:flex;align-items:center;gap:14px;background:linear-gradient(120deg,#17457f,#2a6fc4);color:#fff;border-radius:var(--radius);padding:16px 18px;margin:4px 0 18px;text-decoration:none;transition:all .15s}.roadmap-banner:hover{box-shadow:0 8px 20px #17457f40;transform:translateY(-1px)}.roadmap-banner-tag{flex-shrink:0;background:#ffd864;color:#6b3a00;font-size:12.5px;font-weight:700;border-radius:10px;padding:4px 10px}.roadmap-banner-body{flex:1;min-width:0}.roadmap-banner-title{font-size:16px;font-weight:700}.roadmap-banner-desc{color:#ffffffd9;font-size:12.5px}.roadmap-banner-arrow{flex-shrink:0;color:#fff;font-size:14px}.rp-overview{display:flex;align-items:center;gap:20px;margin:12px 0 16px;padding:18px 20px}.rp-ov-left{text-align:center;flex-shrink:0;min-width:96px}.rp-ov-num{font-size:34px;font-weight:800;color:var(--primary);line-height:1.15}.rp-ov-label{font-size:12.5px}.rp-ov-right{flex:1;display:flex;flex-direction:column;gap:8px}.rp-bar{height:12px;background:var(--primary-light);border-radius:999px;overflow:hidden}.rp-bar-in{height:100%;background:linear-gradient(90deg,#1e56a0,#2a6fc4);border-radius:999px;transition:width .4s;min-width:0}.rp-steps{display:flex;flex-wrap:wrap;gap:4px 14px}.rp-step{color:var(--muted);font-size:12px}.rp-step.done{color:var(--good);font-weight:600}.rp-level{margin-bottom:14px}.rp-level.done{border-color:#bfe6d5;background:#fbfefd}.rp-level-head{display:flex;align-items:center;gap:10px;justify-content:space-between;flex-wrap:wrap}.rp-level-title{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.rp-level-no{background:var(--primary);color:#fff;font-size:12.5px;font-weight:700;border-radius:8px;padding:2px 9px}.rp-level.done .rp-level-no{background:var(--good)}.rp-level-name{font-size:16px;font-weight:700}.rp-level-phase{font-size:12.5px}.rp-goal{margin:8px 0 12px}.rp-tag{font-size:12.5px;font-weight:600;border-radius:999px;padding:2px 12px;white-space:nowrap}.rp-tag.done{background:#e2f5ec;color:#0f6e56}.rp-tag.now{background:var(--primary-light);color:var(--primary)}.rp-tag.lock{background:#eef1f5;color:var(--muted)}.rp-tag.pick{background:#fff7e6;color:#a3690b;border:1px solid #f0d9a8}.rp-stage{margin-bottom:22px}.rp-stage-head{background:linear-gradient(135deg,#f8faff,#f1f5fb);border:1px solid #e3eaf3;border-radius:14px;padding:14px 16px;margin-bottom:12px}.rp-stage-head.locked{background:#f4f5f7;border-color:#e6e8eb}.rp-stage-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.rp-stage-tag{font-size:12px;font-weight:700;color:#fff;background:var(--primary);border-radius:6px;padding:3px 10px;letter-spacing:.5px}.rp-stage-head.locked .rp-stage-tag{background:#b7bfc9}.rp-stage-title{font-size:16px;font-weight:700}.rp-stage-desc{margin:8px 0 0}.rp-stage.locked .rp-level{opacity:.55}.rp-tasks{display:flex;flex-direction:column;gap:8px}.rp-task{display:flex;align-items:center;gap:12px;border:1.5px solid var(--line);border-radius:10px;padding:10px 14px;cursor:pointer;transition:all .15s;background:#fff}.rp-task:hover{border-color:var(--primary)}.rp-task.pass{border-color:#bfe6d5;background:#f4fbf8;cursor:default}.rp-task.lock{opacity:.6;cursor:not-allowed}.rp-task-no{width:30px;height:30px;border-radius:50%;background:var(--primary-light);color:var(--primary);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:13px;flex-shrink:0}.rp-task.pass .rp-task-no{background:var(--good);color:#fff}.rp-task.lock .rp-task-no{background:#eef1f5;color:var(--muted)}.rp-task-body{flex:1;min-width:0}.rp-task-label{font-size:14.5px;font-weight:600}.rp-task-meta{font-size:12px}.rp-task-state{flex-shrink:0;font-size:13px;font-weight:700;color:var(--primary)}.rp-task.pass .rp-task-state{color:var(--good)}.rp-task.lock .rp-task-state{color:var(--muted);font-weight:400}.rp-track-sel{max-width:360px;margin-bottom:10px}.rp-chips{margin-top:4px}.rp-chip-grid{display:flex;flex-wrap:wrap;gap:8px}.rp-chip{display:inline-block;border:1.5px solid var(--line);border-radius:999px;padding:5px 13px;font-size:13px;color:var(--text);background:#fff}.rp-chip:hover{border-color:var(--primary);color:var(--primary)}.rp-chip.pass{border-color:#bfe6d5;background:#f4fbf8;color:var(--good);font-weight:600}.rp-chip.lock{opacity:.55;cursor:not-allowed}@media (max-width: 640px){.topbar-inner{padding:8px 12px}.nav-user{width:100%;order:3;margin-left:0;font-size:13px}.page{padding:12px 12px 80px}.grid-cards,.grid-cards.two{grid-template-columns:1fr}.track-tab{min-width:100%}.result-score{font-size:44px}.exam-topbar{top:92px}.opt{padding:12px 13px}}
