/* ===== 智学研途 全局样式（基于参考样例蓝白教育科技风格） ===== */
:root{
  --blue:#2563eb;--blue-dark:#1746b5;--blue-soft:#eaf2ff;
  --ink:#17233d;--muted:#71809a;--line:#e7edf5;--bg:#f5f8fd;
  --white:#fff;--green:#16a578;--orange:#f59e0b;--purple:#7c5ce7;
  --shadow:0 8px 28px rgba(32,65,120,.07);--radius:18px;
  /* 掌握度统一配色：V2 报告与「知识掌握度」页共用这一份，禁止各写一套 */
  --st-insufficient-bg:#f1f5f9;--st-insufficient-fg:#64748b;
  --st-not_mastered-bg:#fdecec;--st-not_mastered-fg:#b91c1c;
  --st-weak-bg:#fef4e6;--st-weak-fg:#b45309;
  --st-basic-bg:var(--blue-soft);--st-basic-fg:var(--blue);
  --st-stable-bg:#e9f8f3;--st-stable-fg:#0f766e;
}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);font-family:"Microsoft YaHei","PingFang SC",system-ui,sans-serif}
button,input,select{font:inherit}
button{cursor:pointer}

/* ===== 布局骨架 ===== */
.app{min-height:100vh;display:flex}
.sidebar{width:246px;flex-shrink:0;background:#fff;border-right:1px solid var(--line);padding:26px 16px;display:flex;flex-direction:column;position:fixed;inset:0 auto 0 0;z-index:10}
.main{margin-left:246px;width:calc(100% - 246px);min-width:0}
.content{max-width:1500px;margin:0 auto;padding:30px 36px 48px}

/* ===== 侧边栏 ===== */
.brand{display:flex;align-items:center;gap:11px;padding:0 10px 30px}
.brand-mark{width:42px;height:42px;border-radius:13px;background:linear-gradient(145deg,#4385ff,#1d4ed8);color:white;display:grid;place-items:center;font-size:21px;font-weight:800;box-shadow:0 7px 16px #2563eb35}
.brand-name{font-size:19px;font-weight:800;letter-spacing:.5px}
.brand-sub{font-size:11px;color:var(--muted);margin-top:3px}
.nav-label{font-size:11px;letter-spacing:1.5px;color:#9aa6b8;padding:0 13px 10px;margin-top:6px}
.nav{display:grid;gap:5px}
.nav button{display:flex;align-items:center;gap:12px;border:0;background:transparent;color:#64728b;padding:12px 14px;border-radius:12px;text-align:left;font-size:14px;transition:.18s}
.nav button:hover{background:#f4f7fc;color:var(--blue)}
.nav button.active{background:var(--blue-soft);color:var(--blue);font-weight:700}
.nav-icon{width:22px;text-align:center;font-size:17px}
.sidebar-bottom{margin-top:auto;border-top:1px solid var(--line);padding:18px 8px 0}
.tip{background:#f5f8ff;border:1px solid #e4ecff;border-radius:14px;padding:13px;font-size:12px;line-height:1.7;color:#60708b}
.tip strong{color:#2855b7;display:block;margin-bottom:3px}
.user{display:flex;align-items:center;gap:10px;margin-top:17px;padding:5px 4px}
.avatar{width:34px;height:34px;border-radius:50%;background:#dce9ff;color:#2455b8;display:grid;place-items:center;font-weight:800}
.user small{display:block;color:var(--muted);font-size:11px;margin-top:3px}

/* ===== 顶部栏 ===== */
.topbar{height:78px;background:#fff;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 36px;position:sticky;top:0;z-index:5}
.breadcrumb{font-size:13px;color:var(--muted)}.breadcrumb strong{color:var(--ink)}
.top-actions{display:flex;align-items:center;gap:12px}
.date-chip,.icon-btn{border:1px solid var(--line);background:#fff;border-radius:11px;padding:9px 12px;color:#61708a;font-size:12px}
.icon-btn{font-size:17px;padding:7px 10px}

/* 演示数据入口：全站同一个按钮、同一个动作，所以统一样式更不容易被误认成别的功能 */
/* flex:0 0 auto 不能省：页头左栏文字很长时会把它挤成一条细缝，
   按钮就被迫竖着堆起来（错题页实测出现过） */
.demo-cta{display:flex;align-items:center;gap:8px;flex-wrap:wrap;flex:0 0 auto}
@media(min-width:761px){.demo-cta{flex-wrap:nowrap}}
.demo-load-btn{background:#fff;color:var(--blue);border:1px solid #bcd2f7;box-shadow:none;
  padding:10px 15px;font-size:12.5px}
.demo-load-btn:hover{background:#f2f7ff}
.demo-load-btn:disabled{opacity:.6;cursor:not-allowed;transform:none}
.top-actions .demo-load-btn{padding:8px 13px;font-size:12px}

/* ===== 通用组件 ===== */
.welcome{display:flex;align-items:center;justify-content:space-between;gap:22px;margin-bottom:25px}
.eyebrow{font-size:12px;color:var(--blue);font-weight:800;letter-spacing:1px;margin-bottom:10px}
h1{font-size:28px;letter-spacing:-.6px;margin:0 0 9px}
.subtitle{color:var(--muted);font-size:14px;line-height:1.7;margin:0}
.primary-btn,.secondary-btn{border:0;border-radius:11px;padding:12px 17px;font-size:13px;font-weight:700;transition:.18s}
.primary-btn{background:var(--blue);color:#fff;box-shadow:0 6px 14px #2563eb25}
.primary-btn:hover{background:var(--blue-dark);transform:translateY(-1px)}
.secondary-btn{background:#eef4ff;color:var(--blue)}
.secondary-btn:hover{background:#e0ebff}
.text-btn{border:0;background:transparent;color:var(--blue);font-size:12px;font-weight:700;padding:7px}
.pill{font-size:10px;padding:5px 8px;border-radius:20px;background:#f2f5fa;color:#70809a}
.notice{margin-top:16px;padding:13px 15px;border-radius:11px;background:#f0f6ff;color:#49658f;font-size:12px;line-height:1.8}
/* ===== 折叠说明条 =====
   页面里有一批「口径 / 数据来源 / 算法边界」的长解释：核对时有用，日常使用是噪音，
   而且往往一占三四行，把真正的操作顶到屏幕外。
   统一收成一行摘要，点开看全文——文案一个字都不删，只是默认不展开。 */
.zx-more{margin-top:14px;border:1px solid #e3eaf5;background:#f8fafd;border-radius:11px}
.zx-more>summary{cursor:pointer;padding:10px 14px;font-size:12px;color:#5b6b82;list-style:none;display:flex;align-items:center;gap:7px}
.zx-more>summary::-webkit-details-marker{display:none}
.zx-more>summary::before{content:"▸";color:#9aa6b8;font-size:10px;transition:transform .18s}
.zx-more[open]>summary::before{transform:rotate(90deg)}
.zx-more>summary:hover{color:var(--blue)}
.zx-more-body{padding:0 14px 12px;font-size:12px;line-height:1.85;color:#49658f}
.zx-more-body p{margin:0 0 8px}
.zx-more-body p:last-child{margin-bottom:0}
/* 整块面板级折叠（院校页的口径 / 来源面板）：把四五行的说明收成一行标题 */
details.zx-note-fold{display:block}
details.zx-note-fold>summary{cursor:pointer;list-style:none;display:flex;align-items:center;gap:8px;font-size:13px;font-weight:700;color:#3f4d63}
details.zx-note-fold>summary::-webkit-details-marker{display:none}
details.zx-note-fold>summary::before{content:"▸";font-size:10px;color:#9aa6b8;font-weight:400;transition:transform .18s}
details.zx-note-fold[open]>summary::before{transform:rotate(90deg)}
details.zx-note-fold[open]>summary{margin-bottom:12px}
details.zx-note-fold>summary:hover{color:var(--blue)}
.zx-note-fold-body{font-size:12px;line-height:1.85;color:#49658f}
.zx-note-fold-lead{margin:0 0 10px;font-size:12px;color:#7c8ba1;line-height:1.8}
.empty-state{padding:40px;text-align:center;color:var(--muted);font-size:13px}
.footer-note{text-align:center;color:#9aa6b8;font-size:11px;margin-top:28px}
.section-head{display:flex;align-items:end;justify-content:space-between;margin:28px 0 15px;gap:14px}
.section-head h2{font-size:18px;margin:0 0 5px}.section-head p{font-size:12px;color:var(--muted);margin:0}

/* ===== 首页：Hero 与统计 ===== */
.hero{position:relative;overflow:hidden;background:linear-gradient(115deg,#1e4fc3 0%,#2c6fea 62%,#5b9aff 100%);border-radius:22px;color:#fff;padding:27px 30px;margin-bottom:25px;min-height:184px;display:flex;align-items:center;justify-content:space-between}
.hero:after{content:"";position:absolute;width:260px;height:260px;border:1px solid #ffffff24;border-radius:50%;right:95px;top:-115px;box-shadow:0 0 0 28px #ffffff08,0 0 0 58px #ffffff06}
.hero-copy{position:relative;z-index:1;max-width:620px}
.hero-tag{display:inline-flex;gap:7px;align-items:center;background:#ffffff22;border:1px solid #ffffff35;padding:6px 10px;border-radius:20px;font-size:11px;margin-bottom:14px}
.hero h2{font-size:24px;margin:0 0 10px;letter-spacing:.2px}
.hero p{font-size:13px;color:#e5eeff;margin:0;line-height:1.8}
.hero-art{position:relative;z-index:1;width:185px;height:130px;flex-shrink:0;display:grid;place-items:center}
.book-illustration{width:104px;height:92px;border-radius:12px 15px 15px 12px;background:#fff;box-shadow:12px 10px 0 #c9ddff55;transform:rotate(-7deg);color:var(--blue);display:flex;align-items:center;justify-content:center;flex-direction:column;gap:5px;font-weight:900}
.book-illustration span{font-size:31px}.book-illustration small{font-size:10px;color:#5e80bf}
.stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:15px;margin-bottom:28px}
.stat,.panel,.feature-card,.subject-card{background:#fff;border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}
.stat{padding:18px 19px;display:flex;align-items:center;gap:13px;min-width:0}
.stat-icon{width:43px;height:43px;border-radius:13px;display:grid;place-items:center;font-size:20px;flex-shrink:0}
.stat-icon.blue{background:#eaf2ff;color:#2563eb}.stat-icon.green{background:#e4f8f0;color:#15966d}.stat-icon.orange{background:#fff4df;color:#c47a00}.stat-icon.purple{background:#f0eaff;color:#7653d6}
.stat-label{font-size:12px;color:var(--muted);margin-bottom:7px}.stat-value{font-size:24px;font-weight:800;letter-spacing:-.5px}.stat-value small{font-size:11px;color:var(--muted);font-weight:500;margin-left:4px}
/* 四卡的来源说明：数字是本机还是服务端，必须写在页面上而不是让人猜 */
.stats-note{font-size:11.5px;color:#9aa6b8;line-height:1.75;margin:-16px 0 26px;min-height:18px}
.stats-note.warn{color:#96650f;background:#fdf7ea;border:1px solid #f0e0c4;border-radius:8px;padding:8px 12px;margin-top:-14px}

/* ===== 首页：功能卡与科目卡 ===== */
.feature-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}
.feature-card{padding:20px;position:relative;overflow:hidden;transition:.2s;cursor:pointer}
.feature-card:hover,.subject-card:hover{transform:translateY(-3px);box-shadow:0 14px 34px rgba(32,65,120,.12);border-color:#c9d9ff}
.feature-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:18px}
.feature-icon{width:48px;height:48px;border-radius:15px;display:grid;place-items:center;font-size:23px}
.feature-icon.blue{background:#eaf2ff}.feature-icon.green{background:#e4f8f0}.feature-icon.purple{background:#f0eaff}
.feature-card h3{font-size:16px;margin:0 0 8px}.feature-card p{font-size:12px;color:var(--muted);line-height:1.8;margin:0 0 18px;min-height:43px}
.feature-link{color:var(--blue);font-size:12px;font-weight:700}
/* 首页三个入口条：一行三个，只留「图标 + 名称 + 一句用途」。
   原来三张大卡每张一句营销文案，与左侧导航同名同义，占掉一屏。 */
.quick-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-top:4px}
.quick-item{
  display:flex;align-items:center;gap:11px;padding:13px 15px;text-align:left;
  background:#fff;border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow);
  cursor:pointer;font-family:inherit;transition:.18s;
}
.quick-item:hover{transform:translateY(-2px);box-shadow:0 12px 28px rgba(32,65,120,.11);border-color:#c9d9ff}
.quick-icon{
  width:34px;height:34px;border-radius:11px;display:grid;place-items:center;
  font-size:16px;flex:0 0 auto;
}
.quick-icon.blue{background:#eaf2ff;color:#2563eb}
.quick-icon.green{background:#e4f8f0;color:#0f766e}
.quick-icon.purple{background:#f0eaff;color:#7c3aed}
.quick-body{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}
.quick-body b{font-size:13.5px;color:var(--ink);line-height:1.35}
.quick-body small{font-size:11px;color:var(--muted);line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.quick-go{color:#c2cde0;font-size:14px;flex:0 0 auto;transition:.18s}
.quick-item:hover .quick-go{color:var(--blue);transform:translateX(2px)}
.lower-grid{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(300px,1fr);gap:16px;margin-top:26px}
/* 只剩一块时别再留半列空着 */
.lower-grid.single{grid-template-columns:1fr}
.panel{padding:21px}
.panel-title{display:flex;justify-content:space-between;align-items:center;margin-bottom:18px}
.panel-title h3{margin:0;font-size:16px}.panel-title span{font-size:11px;color:var(--muted)}
.progress-row{display:grid;grid-template-columns:1fr auto;gap:8px 12px;margin:17px 0}
.progress-name{font-size:12px;font-weight:700}.progress-percent{font-size:12px;color:var(--muted)}
.progress-track{grid-column:1/-1;height:7px;border-radius:20px;background:#edf1f7;overflow:hidden}
.progress-fill{height:100%;border-radius:20px;background:linear-gradient(90deg,#3478f6,#68a1ff);transition:width .35s}
.subject-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:13px}
.subject-card{padding:16px;cursor:pointer;transition:.2s}
.subject-card .subject-icon{font-size:24px;margin-bottom:12px}
.subject-card h3{font-size:13px;margin:0 0 7px;line-height:1.6}
.subject-card p{font-size:11px;color:var(--muted);margin:0 0 13px}
/* 科目卡里的覆盖进度条：原来这块在下面单独一块「专业课学习进度」，
   四条进度条与卡上的「覆盖 xx%」是同一份数，等于把同一件事写了两遍 */
.subject-track{height:6px;border-radius:20px;background:#edf1f7;overflow:hidden;margin:0 0 11px}
.subject-fill{height:100%;border-radius:20px;background:linear-gradient(90deg,#3478f6,#68a1ff);transition:width .35s}
.subject-bottom{display:flex;justify-content:space-between;align-items:center;font-size:11px;color:var(--blue);font-weight:700}
.subject-bottom span:last-child{color:var(--muted);font-weight:500}
.task-list{display:grid;gap:13px}
.task{display:flex;align-items:flex-start;gap:11px}
.task-dot{width:9px;height:9px;border-radius:50%;background:var(--blue);margin-top:5px;box-shadow:0 0 0 4px #eaf2ff;flex-shrink:0}
.task strong{font-size:12px;display:block;margin-bottom:4px}.task small{font-size:11px;color:var(--muted)}

/* ===== 页面切换 ===== */
.page{display:none}.page.active{display:block;animation:fade .2s ease}
@keyframes fade{from{opacity:.5;transform:translateY(3px)}to{opacity:1;transform:translateY(0)}}
.page-heading{display:flex;justify-content:space-between;align-items:flex-start;gap:18px;margin-bottom:24px}
.page-heading h1{font-size:26px}.page-heading p{color:var(--muted);font-size:13px;line-height:1.8;margin:0}

/* ===== 表单 ===== */
.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
/* 七门目标分这类「短输入 + 短标签」的格子，两列排会把表单拉成四行 */
.form-grid.tight{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px 14px}
@media(max-width:1180px){.form-grid.tight{grid-template-columns:repeat(2,minmax(0,1fr))}}
.field{display:grid;gap:8px}.field label{font-size:12px;font-weight:700}
.field input,.field select{width:100%;border:1px solid #dfe6f0;border-radius:10px;padding:12px 13px;background:#fff;color:var(--ink);outline:none}
.field input:focus,.field select:focus{border-color:#79a4ff;box-shadow:0 0 0 3px #eaf2ff}
/* 日期输入框：未选择时显示中文占位，隐藏 yyyy/mm/dd */
input[type="date"],input[type="text"].date-input{position:relative}
input[type="date"]::-webkit-datetime-edit-fields-wrapper{color:transparent}
input[type="date"]:focus::-webkit-datetime-edit-fields-wrapper,
input[type="date"]:valid::-webkit-datetime-edit-fields-wrapper{color:var(--ink)}
input[type="date"]::before{content:"请选择日期";position:absolute;left:13px;top:50%;transform:translateY(-50%);color:#8a97aa;font-size:14px;pointer-events:none}
input[type="date"]:focus::before,
input[type="date"]:valid::before{content:none}
input[type="text"].date-input::placeholder{color:#8a97aa}
.form-actions{display:flex;gap:10px;margin-top:22px}

/* ===== 408 诊断：题目与选项 ===== */
.subject-tabs{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:18px}
.subject-tabs button{border:1px solid var(--line);background:#fff;color:#66748c;padding:9px 13px;border-radius:10px;font-size:12px}
.subject-tabs button.active{background:var(--blue-soft);border-color:#cfe0ff;color:var(--blue);font-weight:700}
.question-card{max-width:850px}
.question-meta{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:16px}
.question-title{font-size:18px;line-height:1.9;margin:0 0 20px}
.options{display:grid;gap:10px}
.option{display:flex;gap:11px;align-items:center;text-align:left;border:1px solid var(--line);background:#fff;padding:14px;border-radius:12px;color:var(--ink);font-size:13px}
.option:hover{border-color:#a9c5ff;background:#f8faff}
.option.selected{border-color:var(--blue);background:var(--blue-soft)}
.option-key{width:27px;height:27px;display:grid;place-items:center;background:#f1f4f9;border-radius:8px;font-weight:700;color:#687790}
.option.selected .option-key{background:var(--blue);color:white}
.feedback{display:none;margin-top:17px;padding:15px;border-radius:12px;font-size:13px;line-height:1.8}
.feedback.show{display:block}
.feedback.correct{background:#e9faf3;color:#137b58}
.feedback.wrong{background:#fff4e5;color:#945c08}

/* ===== Toast ===== */
.toast{position:fixed;right:24px;bottom:24px;background:#17233d;color:#fff;padding:13px 17px;border-radius:12px;box-shadow:var(--shadow);font-size:13px;opacity:0;pointer-events:none;transform:translateY(10px);transition:.25s;z-index:99}.toast.show{opacity:1;transform:translateY(0)}

/* ===== 待实现标记 ===== */
.todo-badge{display:inline-block;font-size:11px;padding:4px 10px;border-radius:20px;background:#fff7e6;color:#b36a0b;border:1px dashed #f0c36d;font-weight:700}

/* ===== 响应式 ===== */
@media(max-width:1180px){.quick-grid{grid-template-columns:1fr}.content{padding:25px 24px}.topbar{padding:0 24px}.stats{grid-template-columns:repeat(2,minmax(0,1fr))}.feature-grid{grid-template-columns:1fr}.feature-card p{min-height:0}.subject-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:760px){.sidebar{width:72px;padding:18px 9px}.brand{padding:0 5px 25px}.brand-name,.brand-sub,.nav-label,.nav button .nav-text,.sidebar-bottom{display:none}.brand-mark{width:44px;height:44px}.nav button{justify-content:center;padding:13px 8px}.nav-icon{width:auto}.main{margin-left:72px;width:calc(100% - 72px)}.topbar{height:64px;padding:0 15px}.content{padding:22px 14px}.welcome{align-items:flex-start;flex-direction:column}.welcome h1{font-size:24px}.hero{padding:23px;min-height:0}.hero-art{display:none}.hero h2{font-size:21px}.stats{gap:10px}.stat{padding:13px;gap:9px}.stat-icon{width:36px;height:36px}.stat-value{font-size:20px}.feature-grid,.quick-grid,.lower-grid,.form-grid{grid-template-columns:1fr}.subject-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.page-heading{flex-direction:column}.date-chip{display:none}}

/* ===== 考研规划页 ===== */
.plan-subhead{font-size:13px;font-weight:800;color:var(--ink);margin:22px 0 12px;padding-bottom:8px;border-bottom:1px solid var(--line)}
.plan-subject-table{display:grid;gap:8px}
.plan-subject-row{display:grid;grid-template-columns:minmax(140px,1.2fr) minmax(110px,1fr) minmax(80px,.7fr) minmax(160px,1.3fr);gap:8px;align-items:center}
.plan-subject-name{font-size:12px;font-weight:700;display:flex;align-items:center;gap:6px}
.plan-subject-name small{color:var(--muted);font-weight:400;font-size:10px}
.plan-subject-row select,.plan-subject-row input{width:100%;border:1px solid #dfe6f0;border-radius:8px;padding:9px 10px;background:#fff;color:var(--ink);outline:none;font-size:12px}
.plan-subject-row select:focus,.plan-subject-row input:focus{border-color:#79a4ff;box-shadow:0 0 0 3px #eaf2ff}
.plan-notice-error{background:#fff0f0;color:#b33232;border:1px solid #ffd5d5}
.plan-overview-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}
.plan-stat{background:#f8faff;border:1px solid var(--line);border-radius:12px;padding:14px;text-align:center}
.plan-stat small{display:block;font-size:11px;color:var(--muted);margin-bottom:6px}
.plan-stat strong{font-size:22px;font-weight:800;color:var(--blue)}
.plan-meta{font-size:11px;color:var(--muted);margin-top:12px;line-height:1.7}
.plan-timeline{display:grid;gap:0;position:relative}
.plan-phase{display:flex;gap:14px;padding:14px 0;position:relative}
.plan-phase:not(:last-child){border-bottom:1px solid var(--line)}
.plan-phase-dot{width:13px;height:13px;border-radius:50%;background:var(--blue);margin-top:5px;box-shadow:0 0 0 4px var(--blue-soft);flex-shrink:0}
.plan-phase.current .plan-phase-dot{background:var(--green);box-shadow:0 0 0 4px #e4f8f0}
.plan-phase-body{flex:1;min-width:0}
.plan-phase-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;gap:8px;flex-wrap:wrap}
.plan-phase-head strong{font-size:13px}
.plan-phase-head span{font-size:11px;color:var(--muted)}
.plan-phase-body small{font-size:11px;color:var(--muted);display:block;margin-top:6px}
.plan-week-select{border:1px solid #dfe6f0;border-radius:8px;padding:8px 10px;font-size:12px;color:var(--ink);background:#fff;outline:none}
.plan-task{display:flex;align-items:center;gap:12px;padding:13px 0;border-bottom:1px solid var(--line)}
.plan-task:last-child{border-bottom:0}
.plan-task-check input{width:17px;height:17px;accent-color:var(--blue);cursor:pointer}
.plan-task-info{flex:1;min-width:0}
.plan-task-info strong{font-size:13px;display:block;margin-bottom:4px}
.plan-task-info small{font-size:11px;color:var(--muted)}
.plan-task-actions{display:flex;gap:4px;flex-shrink:0}
.plan-task.done .plan-task-info strong{text-decoration:line-through;color:#8a97aa}
.plan-task.skipped{opacity:.55}
.plan-task.skipped .plan-task-info strong{color:#b36a0b}
@media(max-width:760px){.plan-subject-row{grid-template-columns:1fr 1fr}.plan-overview-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.plan-task{flex-wrap:wrap}.plan-task-actions{width:100%;justify-content:flex-end}}

/* ==================== V2 规划模块样式 ==================== */

/* V1/V2 版本切换 */
.plan-version-tabs{display:flex;gap:8px;margin-bottom:16px;border-bottom:2px solid #e8edf4;padding-bottom:0}
.plan-version-tab{padding:8px 18px;border:none;background:none;font-size:13px;font-weight:600;color:var(--muted);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-2px;border-radius:6px 6px 0 0;transition:all .2s}
.plan-version-tab:hover{color:var(--blue);background:#f4f8ff}
.plan-version-tab.active{color:var(--blue);border-bottom-color:var(--blue);background:#f4f8ff}

/* V2 子Tab */
.plan-v2-subtabs{display:flex;gap:6px;margin:16px 0 12px;flex-wrap:wrap}
.plan-v2-subtab{padding:7px 16px;border:1px solid #dce4ee;border-radius:20px;background:#fff;font-size:12px;font-weight:600;color:var(--muted);cursor:pointer;transition:all .2s}
.plan-v2-subtab:hover{border-color:var(--blue);color:var(--blue)}
.plan-v2-subtab.active{background:var(--blue);border-color:var(--blue);color:#fff}

/* 画像：科目摘要 */
.plan-v2-subject-summary{display:flex;align-items:center;gap:16px;padding:12px 0;border-bottom:1px solid #eef2f7;margin-bottom:12px;flex-wrap:wrap}
.plan-v2-score-ring{width:64px;height:64px;border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;border:3px solid #dce4ee;flex-shrink:0}
.plan-v2-score-ring strong{font-size:20px;line-height:1}
.plan-v2-score-ring small{font-size:9px;color:var(--muted);margin-top:2px}
.plan-v2-score-ring.green{border-color:#15966d;background:#e4f8f0;color:#15966d}
.plan-v2-score-ring.blue{border-color:#2563eb;background:#eaf2ff;color:#2563eb}
.plan-v2-score-ring.yellow{border-color:#d4a017;background:#fffbe8;color:#a07c0a}
.plan-v2-score-ring.orange{border-color:#c47a00;background:#fff4df;color:#c47a00}
.plan-v2-score-ring.red{border-color:#dc2626;background:#fef0f0;color:#dc2626}
.plan-v2-score-ring.na{border-color:#dce4ee;background:#f7f9fc;color:#8a97aa}
.plan-v2-score-meta{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.plan-v2-cred-label{font-size:11px;padding:3px 10px;border-radius:12px;background:#f0f4fa;color:var(--muted)}
.plan-v2-cred-label.low{background:#fff4df;color:#c47a00}
.plan-v2-cred-label.mid{background:#eaf2ff;color:#2563eb}
.plan-v2-cred-label.high{background:#e4f8f0;color:#15966d}
.plan-v2-est-badge{font-size:10px;padding:2px 8px;border-radius:10px;background:#f7f9fc;color:#8a97aa;border:1px dashed #dce4ee}

/* 画像：评估点表格 */
.plan-v2-cell-table{width:100%;border-collapse:collapse;font-size:12px}
.plan-v2-cell-table th{padding:8px 6px;text-align:left;border-bottom:2px solid #e8edf4;color:var(--muted);font-size:11px;white-space:nowrap}
.plan-v2-cell-table td{padding:7px 6px;border-bottom:1px solid #eef2f7;vertical-align:middle}
.plan-v2-cell-table tr:hover{background:#f9fbfe}
.plan-v2-self-input{width:74px;padding:4px 6px;border:1px solid #dce4ee;border-radius:6px;font-size:12px;text-align:center;appearance:textfield}
/* 数字框右侧的上下箭头会吃掉 14px：60px 宽时 placeholder「0-100」被截成「0-10C」 */
.plan-v2-self-input::-webkit-outer-spin-button,.plan-v2-self-input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.plan-v2-self-input:focus{border-color:var(--blue);outline:none}
.plan-v2-na{color:#b8c2d0;font-size:11px}
td.green{color:#15966d;font-weight:600}td.blue{color:#2563eb;font-weight:600}td.yellow{color:#a07c0a;font-weight:600}td.orange{color:#c47a00;font-weight:600}td.red{color:#dc2626;font-weight:600}td.na{color:#b8c2d0}
.plan-v2-tag{display:inline-block;font-size:10px;padding:2px 7px;border-radius:10px;background:#fef0f0;color:#dc2626;margin:1px 2px}

/* 画像：薄弱卡片 */
.plan-v2-weak-section{margin-top:16px}
.plan-v2-weak-section h4{font-size:13px;margin-bottom:10px;color:#dc2626}
.plan-v2-weak-card{border:1px solid #fdd;border-radius:10px;padding:12px;margin-bottom:10px;background:#fffbfb}
.plan-v2-weak-head{display:flex;align-items:center;gap:8px;margin-bottom:8px;flex-wrap:wrap}
.plan-v2-score-badge{font-size:11px;padding:2px 8px;border-radius:10px;font-weight:600}
.plan-v2-score-badge.green{background:#e4f8f0;color:#15966d}.plan-v2-score-badge.blue{background:#eaf2ff;color:#2563eb}.plan-v2-score-badge.yellow{background:#fffbe8;color:#a07c0a}.plan-v2-score-badge.orange{background:#fff4df;color:#c47a00}.plan-v2-score-badge.red{background:#fef0f0;color:#dc2626}.plan-v2-score-badge.na{background:#f7f9fc;color:#8a97aa}
.plan-v2-remedy-list{margin:6px 0 6px 18px;font-size:12px;color:#475569}
.plan-v2-remedy-list li{margin-bottom:6px}
.plan-v2-task-type{display:inline-block;font-size:10px;padding:1px 6px;border-radius:8px;background:#eaf2ff;color:#2563eb;margin-right:4px}
.plan-v2-fallback{display:block;font-size:11px;color:#c47a00;margin-top:6px}
.plan-v2-source{display:block;font-size:10px;color:#8a97aa;margin-top:2px}

/* 日历 */
.plan-v2-day-card{border:1px solid #e8edf4;border-radius:10px;padding:10px 12px;margin-bottom:8px}
.plan-v2-day-card.rest{background:#f9fbfe;opacity:.8}
.plan-v2-day-head{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.plan-v2-rest-badge{font-size:10px;padding:2px 8px;border-radius:10px;background:#f0f4fa;color:var(--muted)}
.plan-v2-slots{display:flex;flex-direction:column;gap:6px}
.plan-v2-slot{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.plan-v2-slot input[type=time]{padding:3px 5px;border:1px solid #dce4ee;border-radius:6px;font-size:12px}
.plan-v2-slot select{padding:3px 6px;border:1px solid #dce4ee;border-radius:6px;font-size:12px}
.plan-v2-slot input[type=number]{padding:3px 5px;border:1px solid #dce4ee;border-radius:6px;font-size:12px;width:55px}
.plan-v2-calendar-summary{margin-top:10px;padding:10px;background:#f4f8ff;border-radius:8px;font-size:12px;color:#475569}

/* 计划Tab */
.plan-v2-overview{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:8px;margin-bottom:12px}
.plan-v2-stat{background:#f7f9fc;border-radius:8px;padding:10px;text-align:center}
.plan-v2-stat small{display:block;font-size:10px;color:var(--muted);margin-bottom:4px}
.plan-v2-stat strong{font-size:16px}
.plan-v2-workload-note{font-size:11px;color:var(--muted);line-height:1.7;background:#f7f9fc;border-left:3px solid #cddcf0;border-radius:0 8px 8px 0;padding:8px 10px;margin-bottom:4px}
/* 计划覆盖范围。演示数据只排 46 天，不写清楚就会被当成「404 天只学 68 小时」，
   用暖色和上面那条灰的区分开：这是解释口径，不是又一条免责声明。 */
.plan-v2-scope{font-size:11.5px;color:#7a5a12;line-height:1.75;background:#fffaf0;border:1px solid #f2e2bd;border-radius:8px;padding:9px 11px;margin:10px 0 6px}
.plan-v2-scope b{color:#6b4a08}
.plan-v2-phase{display:inline-block;font-style:normal;font-size:10px;padding:1px 6px;border-radius:4px;margin-right:6px;background:#eef3fb;color:#3b6fb5;vertical-align:1px}
.plan-v2-phase.basic{background:#eef3fb;color:#3b6fb5}
.plan-v2-phase.strengthen{background:#f1eefb;color:#6b52b8}
.plan-v2-phase.review{background:#fdf3e7;color:#b5762a}
.plan-v2-phase.sprint{background:#fdeced;color:#c04a52}
.plan-v2-risk{border-radius:10px;padding:12px 14px;margin-bottom:12px}
.plan-v2-risk.high{background:#fef0f0;border:1px solid #fdd;color:#dc2626}
.plan-v2-risk.tight{background:#fff4df;border:1px solid #fde;color:#c47a00}
.plan-v2-risk.fitted{background:#eef7f0;border:1px solid #bfdcc3;color:#166534}
.plan-v2-risk .primary-btn,.plan-v2-risk .secondary-btn{font-size:12px;padding:5px 14px}
.plan-v2-fit-note{display:inline-block;margin-left:10px;font-size:11px;color:var(--muted)}
.plan-v2-risk p{margin:6px 0 0;font-size:12px}
.plan-v2-failures{border:1px solid #fde;border-radius:10px;padding:12px;margin-bottom:12px;background:#fffbfb}
.plan-v2-failure-item{padding:8px 0;border-bottom:1px solid #fdd;font-size:12px}
.plan-v2-failure-item:last-child{border-bottom:0}
.plan-v2-failure-item small{display:block;color:var(--muted);margin-top:2px}
/* 失败归因的说明句：这批和「未排入」是同一批任务，写清楚别让人以为有两处故障 */
.plan-v2-failure-note{margin:6px 0 2px;font-size:11.5px;color:var(--muted);line-height:1.7}
.plan-v2-day-group{margin-bottom:14px}
.plan-v2-day-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px;font-size:13px}
.plan-v2-day-head span{font-size:11px;color:var(--muted)}
.plan-v2-task{display:flex;align-items:flex-start;gap:10px;padding:10px;border:1px solid #eef2f7;border-radius:8px;margin-bottom:6px;transition:background .2s}
.plan-v2-task:hover{background:#f9fbfe}
.plan-v2-task.done{background:#f6fbf8;border-color:#d4edda}
.plan-v2-task.done .plan-v2-task-info strong{text-decoration:line-through;color:#8a97aa}
.plan-v2-task.skipped{opacity:.55}
.plan-v2-task.remedy{border-left:3px solid #dc2626}
.plan-v2-task input[type=checkbox]{width:17px;height:17px;accent-color:var(--blue);cursor:pointer;margin-top:2px}
.plan-v2-task-info{flex:1;min-width:0}
.plan-v2-task-info strong{font-size:13px;display:block;margin-bottom:3px}
.plan-v2-task-info small{font-size:11px;color:var(--muted);display:block}
.plan-v2-acceptance{font-size:10px!important;color:#8a97aa!important}
.plan-v2-task-actions{display:flex;gap:4px;flex-shrink:0}

/* AI 解读卡片（WF03）：数字由引擎给，模型只解释 */
.v2-explain-card{border:1px solid #e2e8f0;border-radius:10px;padding:14px 16px;margin-bottom:14px;background:#fbfcfe}
.v2-explain-card.idle{border-style:dashed;background:#f8fafc}
.v2-explain-card.ok{border-color:#d7e3f5;background:#fafcff}
.v2-explain-card.degraded{border-color:#fde2c8;background:#fffbf5}
.v2-explain-head{display:flex;align-items:center;gap:8px;margin-bottom:6px}
.v2-explain-head strong{font-size:13px}
.v2-explain-tag{margin-left:auto;font-size:10px;color:#3b6fb6;background:#eaf2fd;border-radius:20px;padding:2px 8px;white-space:nowrap}
.v2-explain-card.degraded .v2-explain-tag{color:#a9681a;background:#fdefdd}
.v2-explain-msg{margin:0 0 8px;font-size:12px;color:#475569;line-height:1.65}
.v2-explain-hint{margin:0 0 8px;font-size:11px;color:#8a6d3b;background:#fdf6e8;border-radius:6px;padding:6px 8px;line-height:1.6}
.v2-explain-summary{margin:0 0 10px;font-size:13px;line-height:1.75;color:#334155}
.v2-explain-block{margin-bottom:10px}
.v2-explain-block h4{margin:0 0 5px;font-size:12px;color:#64748b;font-weight:600}
.v2-explain-block ul{margin:0;padding-left:18px}
.v2-explain-block li{font-size:12px;line-height:1.7;color:#475569}
.v2-explain-block p{margin:0;font-size:12px;line-height:1.7;color:#475569}
.v2-explain-risk{display:flex;gap:8px;padding:8px 10px;border-radius:8px;margin-bottom:6px;background:#f8fafc}
.v2-explain-risk.high{background:#fef3f2}
.v2-explain-risk.medium{background:#fffaef}
.v2-explain-risk-lv{font-size:10px;padding:1px 7px;border-radius:20px;background:#e2e8f0;color:#475569;height:18px;line-height:16px;white-space:nowrap;flex-shrink:0}
.v2-explain-risk.high .v2-explain-risk-lv{background:#fee2e2;color:#b91c1c}
.v2-explain-risk.medium .v2-explain-risk-lv{background:#fef3c7;color:#b45309}
.v2-explain-risk strong{display:block;font-size:12px;color:#334155;margin-bottom:2px}
.v2-explain-risk small{display:block;font-size:11px;color:#7b8a9e;line-height:1.6}
.v2-explain-stripped{margin:10px 0;font-size:11px;color:#8a6d3b}
.v2-explain-stripped summary{cursor:pointer;color:#a9681a}
.v2-explain-stripped-item{display:flex;gap:8px;padding:5px 8px;margin-top:4px;background:#fdf6e8;border-radius:6px;line-height:1.6}
.v2-explain-stripped-num{color:#b45309;font-weight:600;flex-shrink:0}
.v2-explain-note{margin:8px 0 0;font-size:10px;color:#94a3b8;line-height:1.6}
.v2-explain-btn{padding:7px 15px;font-size:12px;margin-top:8px;box-shadow:none}
.v2-explain-btn:hover{transform:none}

/* 进度Tab */
.plan-v2-progress-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.plan-v2-log-item{padding:8px 0;border-bottom:1px solid #eef2f7;font-size:12px}
.plan-v2-log-item:last-child{border-bottom:0}
.plan-v2-log-item small{color:var(--muted);margin-right:6px}

@media(max-width:760px){.plan-v2-overview{grid-template-columns:repeat(3,minmax(0,1fr))}.plan-v2-progress-grid{grid-template-columns:1fr}.plan-v2-cell-table{font-size:11px}.plan-v2-task{flex-wrap:wrap}.plan-v2-task-actions{width:100%;justify-content:flex-end}}

/* ===== 408 诊断：错题记录增强 ===== */
.mistake-item{padding:16px 0;border-bottom:1px solid var(--line)}
.mistake-item:last-child{border-bottom:0}
.mistake-header{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-bottom:8px}
.mistake-header strong{font-size:13px}
.mistake-header small{color:var(--muted);font-size:11px}
.mistake-question{font-size:13px;line-height:1.8;margin:0 0 6px}
.mistake-answers{font-size:12px;margin:0 0 8px}
.wrong-answer{color:#b36a0b;font-weight:700}
.right-answer{color:#137b58;font-weight:700}
.mistake-diagnosis{font-size:12px;color:#687790;background:#f6f8fb;border-radius:8px;padding:10px 12px;margin:0 0 8px;line-height:1.8}
.mistake-explain-detail{background:#f9fafb;border-radius:8px;padding:10px 12px;margin:0 0 8px}
.mistake-explain-text{font-size:12px;color:var(--muted);line-height:1.8;margin:0}
.mistake-actions{display:flex;gap:8px;align-items:center}
.mistake-actions .secondary-btn{padding:5px 12px;font-size:11px}
.mistake-actions .text-btn{font-size:11px;color:#c0392b}

/* 错题来源标注：同一题号可能同时有服务端流水与本机记录，来源必须写在卡片上，
   否则用户无法判断这张卡片换设备后还在不在 */
.me-summary{font-size:11.5px;color:#687790;line-height:1.8;margin:0 0 10px;padding:8px 12px;
  background:#f7f9fc;border:1px solid #e8edf4;border-radius:8px}
.me-hint{color:#8a97aa}
.me-warn{color:#b36a0b}
.me-tag{display:inline-block;padding:1px 7px;border-radius:9px;font-size:10px;line-height:1.7;
  background:#eef3fb;color:#3f6ba8;border:1px solid #d9e4f5}
.me-tag-both{background:#eef8f2;color:#137b58;border-color:#cfe9dc}
.me-tag-local{background:#fdf5e8;color:#96650f;border-color:#f0e0c4}
.me-meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.me-still{color:#c0392b}
.me-nostem{color:#8a97aa;font-size:11.5px}
.me-err{font-size:11.5px;color:#96650f;background:#fdf7ea;border:1px solid #f0e0c4;
  border-radius:8px;padding:8px 12px;margin-top:10px;line-height:1.8}
/* ===== 统一折叠条（js/zx-fold.js）=====
   错题本 / 错题排行 / 掌握度排行 / 掌握度风险 / 周任务 / 计划每日任务 /
   调整日志 / 周复盘诊断 / 院校目录，全站共用这一个控件，别再各写一套。
   放在列表底部、与内容用一条细线隔开：折叠按钮是「还有东西在下面」的收尾，
   不是又一个操作入口，所以不做成主色实心按钮。 */
.zx-fold{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:10px;
  margin:6px 0 2px;padding:14px 0 4px;border-top:1px solid var(--line);
  grid-column:1/-1}   /* 放进 grid 布局（院校卡片）时独占一行，不被挤进某一格 */
.zx-fold-btn{display:inline-flex;align-items:center;gap:7px;border:1px solid #d9e5f7;background:#fff;
  color:#3a5c96;border-radius:999px;padding:7px 16px;font-size:12px;line-height:1.5;
  transition:background .16s,border-color .16s,color .16s;
  box-shadow:0 2px 8px rgba(32,65,120,.04)}
.zx-fold-btn:hover{border-color:#b9cff3;background:#f5f9ff;color:var(--blue)}
.zx-fold-btn:focus-visible{outline:2px solid #b9cff3;outline-offset:2px}
.zx-fold-caret{font-size:10px;line-height:1;color:#8fa4c4}
.zx-fold-note{font-size:11px;color:#9aa6b8;line-height:1.5}
@media(max-width:760px){
  .zx-fold{padding:12px 0 2px}
  .zx-fold-btn{width:100%;justify-content:center;padding:9px 12px}
}

/* ===== V2 能力画像：408学习能力分析面板 ===== */

/* 统计卡片网格 */
.v2-stat-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:16px}
.v2-stat-card{background:#f7f9fc;border:1px solid #e8edf4;border-radius:10px;padding:14px;text-align:center;transition:.2s}
.v2-stat-card:hover{border-color:#c9d9ff;background:#f4f8ff}
.v2-stat-value{font-size:26px;font-weight:700;line-height:1.2}
.v2-stat-label{font-size:12px;color:var(--muted);margin-top:4px}
.v2-stat-src{font-size:10px;color:#8a97aa;margin-top:2px}

/* 通用颜色类（分析面板） */
.v2-stat-value.green,.v2-subject-acc.green,.v2-trend-value.green{color:#15966d}
.v2-stat-value.blue,.v2-subject-acc.blue,.v2-trend-value.blue{color:#2563eb}
.v2-stat-value.yellow,.v2-subject-acc.yellow,.v2-trend-value.yellow{color:#a07c0a}
.v2-stat-value.orange,.v2-subject-acc.orange,.v2-trend-value.orange{color:#c47a00}
.v2-stat-value.red,.v2-subject-acc.red,.v2-trend-value.red{color:#dc2626}
.v2-stat-value.na,.v2-subject-acc.na,.v2-trend-value.na{color:#8a97aa}

/* 区块容器 */
.v2-section{margin-bottom:16px}
.v2-section-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;flex-wrap:wrap;gap:6px}
.v2-section-head h4{font-size:13px;margin:0;color:#1e293b}
.v2-data-tag{font-size:10px;color:#8a97aa;background:#f0f4fa;padding:3px 8px;border-radius:10px}

/* 科目表现对比 */
.v2-subject-compare{display:flex;flex-direction:column;gap:4px}
.v2-subject-row{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:8px;cursor:pointer;transition:.15s;border:1px solid transparent}
.v2-subject-row:hover{background:#f4f8ff;border-color:#dce4ee}
.v2-subject-icon{font-size:16px;width:24px;text-align:center;flex-shrink:0}
.v2-subject-name{font-size:12px;font-weight:600;width:90px;flex-shrink:0;color:#1e293b}
.v2-subject-bar-wrap{flex:1;height:10px;background:#eef2f7;border-radius:5px;overflow:hidden;min-width:100px}
.v2-subject-bar{height:100%;border-radius:5px;transition:width .4s}
.v2-subject-bar.green{background:#15966d}
.v2-subject-bar.blue{background:#2563eb}
.v2-subject-bar.yellow{background:#d4a017}
.v2-subject-bar.orange{background:#c47a00}
.v2-subject-bar.red{background:#dc2626}
.v2-subject-bar.na{background:#dce4ee}
.v2-subject-acc{font-size:12px;font-weight:700;width:48px;text-align:right;flex-shrink:0}
.v2-subject-count{font-size:11px;color:var(--muted);width:44px;text-align:right;flex-shrink:0}

/* 科目详情展开区 */
.v2-subject-detail{background:#f9fbfe;border:1px solid #e8edf4;border-radius:10px;padding:12px;margin-top:10px}
.v2-detail-stats{display:flex;gap:16px;flex-wrap:wrap;font-size:12px;color:#475569;margin-bottom:10px}
.v2-detail-stats strong{font-size:14px}
.v2-detail-mistakes{margin-top:10px;font-size:12px}
.v2-detail-mistake-item{display:flex;gap:8px;align-items:center;padding:6px 0;border-bottom:1px solid #eef2f7;flex-wrap:wrap}
.v2-mistake-kp{font-size:11px;background:#eaf2ff;color:#2563eb;padding:2px 8px;border-radius:10px;flex-shrink:0}
.v2-mistake-q{flex:1;color:#475569;min-width:120px}
.v2-mistake-date{font-size:10px;color:#8a97aa;flex-shrink:0}

/* 薄弱知识点表格 */
.v2-kp-table{width:100%;border-collapse:collapse;font-size:12px}
.v2-kp-table th{padding:8px 6px;text-align:left;border-bottom:2px solid #e8edf4;color:var(--muted);font-size:11px;white-space:nowrap}
.v2-kp-table td{padding:7px 6px;border-bottom:1px solid #eef2f7;vertical-align:middle}
.v2-kp-table tr:hover{background:#f9fbfe}
.v2-kp-table-sm th,.v2-kp-table-sm td{padding:5px 4px;font-size:11px}
.v2-kp-name{font-weight:600;color:#1e293b}
.v2-kp-na{color:#b8c2d0}
.v2-kp-table td.green{color:#15966d;font-weight:600}
.v2-kp-table td.blue{color:#2563eb;font-weight:600}
.v2-kp-table td.yellow{color:#a07c0a;font-weight:600}
.v2-kp-table td.orange{color:#c47a00;font-weight:600}
.v2-kp-table td.red{color:#dc2626;font-weight:600}
.v2-kp-table td.na{color:#8a97aa}
.v2-risk-badge{font-size:10px;padding:2px 8px;border-radius:10px;font-weight:600;white-space:nowrap}
.v2-risk-badge.green{background:#e4f8f0;color:#15966d}
.v2-risk-badge.blue{background:#eaf2ff;color:#2563eb}
.v2-risk-badge.yellow{background:#fffbe8;color:#a07c0a}
.v2-risk-badge.orange{background:#fff4df;color:#c47a00}
.v2-risk-badge.red{background:#fef0f0;color:#dc2626}
.v2-risk-badge.na{background:#f0f4fa;color:#8a97aa}
.v2-kp-action{font-size:11px;padding:4px 10px;border:1px solid #c9d9ff;border-radius:6px;background:#eaf2ff;color:#2563eb;cursor:pointer;transition:.15s;white-space:nowrap}
.v2-kp-action:hover{background:#2563eb;color:#fff;border-color:#2563eb}
.v2-kp-ok{font-size:11px;color:#15966d}

/* 近期学习趋势图（纯CSS柱状图） */
.v2-trend-chart{display:flex;gap:8px;align-items:stretch}
.v2-trend-y-axis{display:flex;flex-direction:column;justify-content:space-between;font-size:9px;color:#8a97aa;text-align:right;padding:14px 4px 28px 0}
.v2-trend-bars{display:flex;gap:10px;flex:1;align-items:flex-end;border-bottom:1px solid #e8edf4;overflow-x:auto;padding-bottom:0}
.v2-trend-col{display:flex;flex-direction:column;align-items:center;min-width:52px;flex:1}
.v2-trend-value{font-size:10px;font-weight:700;margin-bottom:3px}
.v2-trend-bar-wrap{width:100%;max-width:36px;height:100px;background:#f0f4fa;border-radius:6px 6px 0 0;display:flex;align-items:flex-end;overflow:hidden}
.v2-trend-bar{width:100%;border-radius:6px 6px 0 0;transition:height .4s}
.v2-trend-bar.green{background:linear-gradient(180deg,#1db585,#15966d)}
.v2-trend-bar.blue{background:linear-gradient(180deg,#4a80f0,#2563eb)}
.v2-trend-bar.yellow{background:linear-gradient(180deg,#e6b422,#d4a017)}
.v2-trend-bar.orange{background:linear-gradient(180deg,#dd8e1a,#c47a00)}
.v2-trend-bar.red{background:linear-gradient(180deg,#e84545,#dc2626)}
.v2-trend-bar.na{background:#dce4ee}
.v2-trend-label{font-size:9px;color:#475569;margin-top:4px;white-space:nowrap}
.v2-trend-count{font-size:9px;color:#8a97aa}

/* 空状态 */
.v2-empty-state{text-align:center;padding:36px 20px;background:#f9fbfe;border:1px dashed #dce4ee;border-radius:12px}
.v2-empty-title{font-size:15px;font-weight:700;color:#1e293b;margin-bottom:8px}
.v2-empty-hint{font-size:12px;color:var(--muted);line-height:1.8;margin-bottom:14px}
.v2-empty-inline{font-size:12px;color:var(--muted);padding:12px;background:#f9fbfe;border-radius:8px;text-align:center}

/* 雷达图占位（预留接口，不伪造） */
.v2-radar-placeholder{margin-top:14px;padding:16px;background:#f9fbfe;border:1px dashed #dce4ee;border-radius:10px;text-align:center}
.v2-radar-placeholder-title{font-size:12px;font-weight:700;color:#8a97aa;margin-bottom:6px}
.v2-radar-placeholder p{font-size:11px;color:#8a97aa;line-height:1.7;margin:0 0 10px}
.v2-radar-reserved{width:180px;height:180px;margin:0 auto;border:1px dashed #dce4ee;border-radius:50%;background:repeating-linear-gradient(45deg,transparent,transparent 8px,#f0f4fa 8px,#f0f4fa 16px)}

/* ===== V2 画像来源与口径说明 =====
   规划页此前把「目标专业 / 各科目标分」又收集了一遍，与智能建档重复。
   现在这两项从档案带入，这里负责说清「数据从哪来、你改过没有」。 */
.v2-source{
  display:flex;flex-wrap:wrap;align-items:center;gap:10px 18px;
  background:#f7faff;border:1px solid #dbe7fb;border-radius:12px;
  padding:12px 16px;margin-bottom:14px;font-size:12px;color:#49658f;
}
.v2-source-tag{
  font-size:10px;font-weight:700;color:#1d4ed8;background:#e5eeff;
  border-radius:6px;padding:2px 7px;letter-spacing:.2px;
}
.v2-source b{color:#2b3d5c}
.v2-source-meta{color:#8b98ac;font-size:11px}
.v2-source-ops{margin-left:auto;display:flex;gap:8px;align-items:center}
.v2-source-btn{
  border:1px solid #cfdcf2;background:#fff;color:#2f5cab;border-radius:8px;
  padding:4px 10px;font-size:11px;font-weight:700;cursor:pointer;transition:.15s;
}
.v2-source-btn:hover{background:#eef4ff;border-color:#b9cdf0}
.v2-source-empty{border-style:dashed;background:#fffdf6;border-color:#f0e3c2;color:#8a6520}
.v2-source-empty .v2-source-tag{color:#8a6520;background:#fbf0d8}
.v2-field-src{font-size:10px;font-weight:400;color:#0f7a55;margin-left:6px}
/* 粗估来的分数要一眼看出和自评不一样 */
.v2-est-banner{margin-bottom:14px;padding:11px 14px;border-radius:10px;background:#fffbf2;border:1px solid #f0dfb8;font-size:11.5px;line-height:1.8;color:#8a6520}
.v2-est-banner b{color:#7a5410}
/* 推算出来的日期不能和用户亲自填的长得一样 */
.v2-field-src.estimated{color:#b07b1e}
.v2-exam-note{display:none;margin-top:5px;font-size:11px;line-height:1.6;color:#8a6520}
.v2-exam-note.show{display:block}
.v2-target-note{
  margin-top:10px;padding:11px 13px;border-radius:10px;background:#f6faf7;
  border:1px solid #dcefe4;font-size:11.5px;line-height:1.75;color:#4a6b57;
}
.v2-target-note.warn{background:#fffbf2;border-color:#f0dfb8;color:#8a6520}
.v2-target-note b{color:#2f5545}
.v2-scope-hint{
  padding:12px 15px;border-radius:11px;background:#fbfcfe;border:1px dashed #dfe7f2;
  font-size:12px;line-height:1.85;color:#6b7a92;margin-bottom:14px;
}
.v2-scope-hint b{color:#3f4d63}
.v2-reconcile{
  padding:12px 15px;border-radius:11px;margin-bottom:14px;
  font-size:12px;line-height:1.85;
}
.v2-reconcile.ok{background:#f4faf7;border:1px solid #d8eede;color:#3f6b52}
.v2-reconcile.warn{background:#fffbf2;border:1px solid #f0dfb8;color:#8a6520}
.v2-reconcile.gap{background:#fff7f7;border:1px solid #f5dcdc;color:#95504f}
.v2-reconcile b{font-weight:700}
.v2-reconcile .v2-rec-nums{
  display:block;margin-top:5px;font-size:11px;color:#8b98ac;font-variant-numeric:tabular-nums;
}
.v2-target-note .v2-rec-nums{display:block;margin-top:5px;font-size:11px;color:#93a0b3}
.v2-target-note.warn .v2-rec-nums{color:#a8926a}

/* ===== WF04 周复盘 ===== */
.review-panel{margin-bottom:14px}
.review-panel:last-child{margin-bottom:0}
.review-state-tip{background:#fff8e8;border-left:3px solid #f0c674;border-radius:0 8px 8px 0;padding:9px 12px;font-size:12px;color:#8a6a2f;line-height:1.7;margin-bottom:12px}
.review-stats{margin-bottom:10px}
.review-stats .plan-v2-stat em{display:block;font-style:normal;font-size:10px;color:var(--muted);margin-top:3px}
.review-source-note{font-size:11px;color:var(--muted);line-height:1.75;background:#f7f9fc;border-radius:8px;padding:9px 11px}

.review-table{width:100%;border-collapse:collapse;font-size:12px}
.review-table th{text-align:left;font-weight:600;font-size:11px;color:var(--muted);padding:7px 8px;border-bottom:1px solid var(--line);white-space:nowrap}
.review-table td{padding:8px;border-bottom:1px solid #f2f6fb}
.review-table tr:last-child td{border-bottom:0}
.review-table td:first-child{font-weight:600}
.review-table td:nth-child(n+2){text-align:right;font-variant-numeric:tabular-nums}
.review-cell-warn{color:#c04a52;font-weight:700}
.review-empty{text-align:center;color:var(--muted);padding:18px 0}

.review-diag{border:1px solid var(--line);border-radius:10px;padding:12px 13px;margin-bottom:10px;background:#fcfdff}
.review-diag:last-child{margin-bottom:0}
.review-diag-head{display:flex;align-items:center;gap:8px;justify-content:space-between;margin-bottom:6px}
.review-diag-head strong{font-size:13px;color:var(--ink)}
.review-diag p{margin:0 0 7px;font-size:12px;line-height:1.75;color:#41506b}
.review-evidence{font-size:11px;color:var(--muted);line-height:1.65;background:#f4f7fc;border-radius:6px;padding:6px 9px}
.review-conf{flex-shrink:0;font-size:10px;padding:2px 7px;border-radius:5px;white-space:nowrap}
.review-conf-high{background:#e7f7f1;color:#0f8a63}
.review-conf-medium{background:#eef3fb;color:#3b6fb5}
.review-conf-low{background:#f4f5f8;color:#7b8798}

.review-sug{border-left:3px solid #cddcf0;border-radius:0 8px 8px 0;padding:10px 12px;background:#f9fbff;margin-bottom:10px}
.review-sug:last-child{margin-bottom:0}
.review-sug-head{display:flex;align-items:center;gap:8px;margin-bottom:5px}
.review-sug-head b{font-size:12px;color:#24509a}
.review-replan-tag{font-size:10px;color:#8a6a2f;background:#fff8e8;border-radius:4px;padding:1px 6px}
.review-sug p{margin:0;font-size:12px;line-height:1.75;color:#41506b}

.review-trend{display:flex;align-items:flex-end;gap:6px;height:120px;padding:0 2px}
.review-trend-col{flex:1;min-width:0;display:flex;flex-direction:column;align-items:center;height:100%}
.review-trend-bar{flex:1;width:100%;display:flex;align-items:flex-end;background:#f2f6fb;border-radius:5px 5px 0 0;overflow:hidden}
.review-trend-fill{width:100%;background:linear-gradient(180deg,#5b93ea,#2563eb);border-radius:5px 5px 0 0;min-height:3px;transition:height .3s}
.review-trend-col:last-child .review-trend-fill{background:linear-gradient(180deg,#c3cedd,#9aa9bd)}
.review-trend-col small{display:block;margin-top:6px;font-size:10px;color:var(--muted);white-space:nowrap;transform:scale(.92)}
.review-trend-note{font-size:11px;color:var(--muted);margin-top:10px;line-height:1.7}

.review-textarea{width:100%;min-height:88px;border:1px solid var(--line);border-radius:10px;padding:10px 12px;font-size:12px;line-height:1.7;resize:vertical;font-family:inherit;color:var(--ink);background:#fcfdff}
.review-textarea:focus{outline:none;border-color:#9dc0f0;background:#fff}
.review-save-row{display:flex;align-items:center;gap:10px;margin-top:10px;flex-wrap:wrap}
.review-save-hint{font-size:11px}
.review-save-hint.is-ok{color:var(--green)}
.review-save-hint.is-warn{color:#b5762a}

@media(max-width:760px){
  .review-table{font-size:11px}
  .review-table th,.review-table td{padding:6px 4px}
  .review-trend{height:90px}
  .review-trend-col small{display:none}
}

/* ================= WF05 动态调整 ================= */

.adjust-panel{margin-top:0}
.adjust-items{display:grid;gap:10px;margin-bottom:14px}
.adjust-item{border:1px solid var(--line);border-radius:10px;padding:11px 13px;background:#fcfdff;transition:border-color .15s,background .15s}
.adjust-item.is-on{border-color:#b9d0f2;background:#f7faff}
.adjust-item.is-danger.is-on{border-color:#f0c9c9;background:#fffafa}
.adjust-check{display:flex;align-items:center;gap:8px;cursor:pointer}
.adjust-check input{width:15px;height:15px;accent-color:var(--blue);cursor:pointer}
.adjust-check b{font-size:13px;color:var(--ink);font-weight:600}
.adjust-danger-tag{font-style:normal;font-size:10px;color:#b4453f;background:#fdecec;border-radius:4px;padding:1px 6px;margin-left:6px}
.adjust-item p{margin:6px 0 0 23px;font-size:12px;line-height:1.75;color:#41506b}
.adjust-num{display:inline-flex;align-items:center;gap:6px;margin:8px 0 0 23px;font-size:12px;color:var(--muted)}
.adjust-num input{width:74px;padding:4px 8px;border:1px solid var(--line);border-radius:7px;font-size:12px;color:var(--ink)}
.adjust-num input:disabled{background:#f4f6fa;color:#a3aec2}
.adjust-preview{margin-bottom:12px}
.adjust-empty{border:1px dashed var(--line);border-radius:10px;padding:14px;font-size:12px;color:var(--muted);text-align:center;line-height:1.7}
.adjust-empty.is-warn{border-color:#f0c9c9;background:#fffafa;color:#b4453f;text-align:left}
.adjust-preview-table{width:100%;border-collapse:collapse;font-size:12px}
.adjust-preview-table th{text-align:left;font-weight:600;color:var(--muted);background:#f6f9fe;padding:7px 10px;border-bottom:1px solid var(--line)}
.adjust-preview-table td{padding:7px 10px;border-bottom:1px solid #f0f4fa;color:#3d4c66}
.adjust-preview-table tr.is-changed td{background:#f6faff;color:var(--ink);font-weight:600}
.adjust-preview-table tr.is-changed td:nth-child(2){color:var(--muted);font-weight:400;text-decoration:line-through}
.adjust-preview-note{margin-top:8px;font-size:11px;color:var(--muted);line-height:1.7}
.adjust-preview-note b{color:#b4453f}
.adjust-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.adjust-actions .primary-btn:disabled,.adjust-actions .secondary-btn:disabled{opacity:.45;cursor:not-allowed}
.adjust-foot{margin-top:9px;font-size:11px;color:var(--muted)}
.review-sug-go{margin-left:auto;font-size:11px;padding:3px 10px}

/* 未排入任务 */
.plan-v2-deferred{margin:12px 0;border:1px solid #f2e0c2;border-radius:12px;background:#fffbf3;padding:12px 14px}
.plan-v2-deferred-head{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin-bottom:6px}
.plan-v2-deferred-head strong{font-size:13px;color:#8a5f1f}
.plan-v2-deferred-head span{font-size:11px;color:#a98449}
.plan-v2-deferred p{margin:0 0 8px;font-size:12px;line-height:1.7;color:#7a6547}
.plan-v2-deferred-list{display:grid;gap:5px}
.plan-v2-deferred-item{display:flex;justify-content:space-between;gap:10px;font-size:12px;color:#5f4d33;border-top:1px dashed #f0e2ca;padding-top:5px}
.plan-v2-deferred-item small{color:#a98449;white-space:nowrap}
.plan-v2-deferred-more{display:block;margin-top:6px;color:#a98449}

/* 版本历史 */
.plan-v2-version-box{margin-top:16px;border-top:1px solid var(--line);padding-top:14px}
.plan-v2-version-box .empty-state{padding:10px}
.version-current{font-size:12px;color:var(--muted);margin-bottom:10px}
.version-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:9px 0;border-bottom:1px dashed var(--line)}
.version-row:last-of-type{border-bottom:none}
.version-main{display:grid;gap:2px;min-width:0}
.version-main b{font-size:12px;color:var(--ink);font-weight:600}
.version-main small{font-size:11px;color:var(--muted)}
.version-hint{font-size:12px;margin-top:8px;min-height:0}
.version-hint.is-ok{color:var(--green)}
.version-hint.is-warn{color:#b4453f}

@media(max-width:760px){
  .adjust-item p,.adjust-num{margin-left:0}
  .adjust-preview-table{font-size:11px}
  .adjust-preview-table th,.adjust-preview-table td{padding:6px 6px}
  .version-row{flex-direction:column;align-items:flex-start;gap:6px}
}

/* ===== 题干渲染（含表格的真题） =====
   408 真题里有 26 道自带路由表/页表/指令格式表，题库里是 Markdown 表格。
   由 js/stem.js 解析成真表格，这里只负责样式。 */
.zx-stem-p{display:block}
.zx-stem-p + .zx-stem-p{margin-top:6px}
.zx-stem-table{
  border-collapse:collapse;margin:10px 0 12px;max-width:100%;
  font-size:13px;line-height:1.65;font-weight:400;letter-spacing:0;
}
.zx-stem-table th,.zx-stem-table td{
  border:1px solid var(--line);padding:6px 11px;text-align:left;vertical-align:top;
}
.zx-stem-table th{background:var(--blue-soft);font-weight:600;color:var(--ink);white-space:nowrap}
.zx-stem-table td{font-variant-numeric:tabular-nums;white-space:nowrap}
.zx-stem-table tbody tr:nth-child(even){background:#fafcff}

@media(max-width:760px){
  .zx-stem-table{font-size:12px;width:100%}
  .zx-stem-table th,.zx-stem-table td{padding:5px 6px;white-space:normal}
}

/* ===== 错题分析中心（错题记录页下半部分） ===== */
.mx-range{display:flex;gap:6px;background:#f1f5fb;padding:4px;border-radius:10px}
.mx-range button{border:0;background:transparent;color:#64728b;font-size:12px;padding:6px 12px;border-radius:7px;transition:.16s}
.mx-range button:hover{color:var(--blue)}
.mx-range button.active{background:#fff;color:var(--blue);font-weight:700;box-shadow:0 1px 4px rgba(37,99,235,.15)}

.mx-loading{padding:36px;text-align:center;color:var(--muted);font-size:13px}
.mx-error{padding:18px 20px;background:#fff4f4;border:1px solid #f6d5d5;border-radius:12px;color:#b23c3c;font-size:13px;line-height:1.7}
.mx-empty{padding:34px 20px;text-align:center;background:#f9fbfe;border:1px dashed #dce4ee;border-radius:14px}
.mx-empty-title{font-size:15px;font-weight:700;color:#41506b;margin-bottom:8px}
.mx-empty-desc{font-size:12.5px;color:var(--muted);line-height:1.9}

.mx-cards{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;margin-bottom:22px}
.mx-card{background:linear-gradient(160deg,#fbfdff,#f3f7fe);border:1px solid #e9eff9;border-radius:14px;padding:14px 16px}
.mx-card-label{font-size:12px;color:var(--muted);margin-bottom:6px}
.mx-card-value{font-size:25px;font-weight:800;color:var(--ink);line-height:1.15}
.mx-card-value small{font-size:12px;font-weight:600;color:var(--muted);margin-left:3px}
.mx-card-note{font-size:11px;color:#9aa6b8;margin-top:5px;line-height:1.5}

.mx-section{margin-top:22px;padding-top:20px;border-top:1px solid var(--line)}
.mx-section:first-of-type{border-top:0;padding-top:0}
.mx-section h4{margin:0;font-size:15px;color:var(--ink)}
.mx-section-head{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:10px;margin-bottom:14px}
.mx-legend{display:flex;gap:14px;font-size:12px;color:var(--muted);flex-wrap:wrap}
.mx-legend b{color:var(--ink);font-size:13px}
.mx-tag{background:#eef3fb;color:#5b6c88;border-radius:6px;padding:2px 7px;font-size:11px}

.mx-chart{width:100%;height:auto;display:block;background:#fcfdff;border-radius:12px;border:1px solid #eef2f8}
.mx-chart-note{font-size:11.5px;color:#9aa6b8;line-height:1.75;margin-top:10px}

.mx-table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
.mx-table{width:100%;border-collapse:collapse;font-size:13px;min-width:640px}
.mx-table th{text-align:right;font-size:11.5px;font-weight:600;color:#9aa6b8;padding:0 10px 10px;border-bottom:1px solid var(--line);white-space:nowrap}
.mx-table th:nth-child(1),.mx-table th:nth-child(2){text-align:left}
.mx-row{cursor:pointer;transition:.14s}
.mx-row:hover{background:#f7faff}
.mx-row.open{background:#f2f7ff}
.mx-row td{padding:12px 10px;border-bottom:1px solid #f0f4f9;vertical-align:top}
.mx-rank{color:#b3bccb;font-size:12px;width:26px}
.mx-kp{font-weight:700;color:var(--ink);line-height:1.45}
.mx-kp-sub{font-size:11px;color:#9aa6b8;margin-top:2px}
.mx-kp-bar{height:4px;background:#eef2f8;border-radius:3px;margin-top:7px;max-width:200px;overflow:hidden}
.mx-kp-bar i{display:block;height:100%;background:linear-gradient(90deg,#f0897f,#e35d5d);border-radius:3px}
.mx-num{text-align:right;color:#4a5872;white-space:nowrap}
.mx-num b{color:#c2453f;font-size:15px}
.mx-arrow{text-align:right;color:var(--blue);font-size:12px;white-space:nowrap;width:76px}
.mx-detail-row td{padding:0 0 14px;border-bottom:1px solid #f0f4f9;background:#fbfcfe}

.mx-detail{padding:12px 14px;background:#fff;border:1px solid #e9eff9;border-radius:12px;margin:0 8px 0 8px}
.mx-detail-loading,.mx-detail-empty{padding:14px;color:var(--muted);font-size:12.5px}
.mx-q{padding:11px 0;border-bottom:1px dashed #e6edf7}
.mx-q:last-child{border-bottom:0}
.mx-q-head{display:flex;gap:10px;align-items:center;flex-wrap:wrap;font-size:11.5px;color:var(--muted);margin-bottom:6px}
.mx-qid{font-family:ui-monospace,Menlo,monospace;background:#f1f5fb;border-radius:5px;padding:2px 6px;color:#5b6c88}
.mx-qstat{color:#b06a63;font-weight:600}
.mx-flag{background:#fdeeee;color:#c2453f;border-radius:5px;padding:1px 6px;font-size:11px;font-weight:600}
.mx-q-stem{font-size:13px;color:#37455e;line-height:1.75}
.mx-q-stem table{border-collapse:collapse;margin:6px 0;font-size:12px}
.mx-q-stem td,.mx-q-stem th{border:1px solid #e2e9f3;padding:4px 8px}
.mx-nostem{color:#9aa6b8;font-style:normal}

.mx-metrics{margin-top:20px;padding:14px 16px;background:#f8fafd;border:1px solid #eaf0f8;border-radius:12px;font-size:11.5px;color:#7a879b;line-height:1.85}
.mx-metrics b{color:#5b6c88}

@media (max-width:1180px){.mx-cards{grid-template-columns:repeat(3,1fr)}}
@media (max-width:720px){
  .mx-cards{grid-template-columns:repeat(2,1fr)}
  .mx-card-value{font-size:21px}
  .mx-range button{padding:6px 9px;font-size:11.5px}
  .panel-title{flex-wrap:wrap;gap:10px}
}
/* 窄屏：序号列是装饰，先让位给真正要看的指标；仍保留横滑，但不至于一屏只剩两列 */
.mx-scroll-hint{display:none;font-size:11px;color:#b3bccb;margin-bottom:8px}
@media (max-width:560px){
  .mx-table{min-width:470px;font-size:12px}
  .mx-table th:nth-child(1),
  .mx-table tbody tr.mx-row>td:nth-child(1){display:none}
  .mx-scroll-hint{display:block}
}
@media (max-width:420px){
  .mx-cards{grid-template-columns:1fr 1fr;gap:9px}
  .mx-detail{margin:0 4px}
}

/* ===== 错题分析中心：导出与「按知识点再练」 ===== */
.mx-tools{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.mx-export{
  border:1px solid #cfe0ff;background:#eef5ff;color:var(--blue);
  font-size:12px;font-weight:600;padding:7px 14px;border-radius:9px;
  transition:.16s;white-space:nowrap;
}
.mx-export:hover{background:#e2eeff;border-color:#b7d2ff}
.mx-export:disabled{opacity:.6;cursor:default}
.mx-export.ghost{background:#fff;color:#64728b;border-color:#dce4ee;padding:7px 10px}
.mx-export.ghost:hover{color:var(--blue);border-color:#cfe0ff}

.mx-detail-bar{
  display:flex;justify-content:space-between;align-items:center;gap:10px;
  flex-wrap:wrap;padding-bottom:10px;margin-bottom:4px;border-bottom:1px solid #eef3fa;
  font-size:12px;color:var(--muted);
}
.mx-retry{
  border:1px solid #cfe0ff;background:#eef5ff;color:var(--blue);
  font-size:12px;font-weight:600;padding:6px 12px;border-radius:8px;transition:.16s;
}
.mx-retry:hover{background:#e2eeff;border-color:#b7d2ff}

/* 专项练习提示：可点击退出，所以要做成按钮而不是纯文字 */
.kp-mode{
  border:1px solid #cddcf7;background:#eef5ff;color:#2c5cbf;cursor:pointer;
  font-size:10.5px;padding:5px 10px;border-radius:20px;font-weight:600;
}
.kp-mode:hover{background:#e2eeff;border-color:#b7d2ff}
[hidden]{display:none !important}

@media (max-width:720px){
  /* 窄屏：时间范围独占一行，导出按钮靠左紧挨着，不要被 space-between 顶到两头 */
  .mx-tools{width:100%;justify-content:flex-start;gap:8px}
  .mx-range{flex:1 1 100%}
  .mx-export,.mx-export.ghost{padding:6px 10px;font-size:11.5px}
}

/* ===== AI 错因诊断（第二阶段） ===== */
/* 事实用实线、假设用虚线：这是刻意的——用户必须一眼看出
   「哪些是记录」和「哪些是 AI 的猜测」不是一回事。 */
.mx-ai{margin-top:14px;padding-top:14px;border-top:1px dashed #e3ebf6}
.mx-ai-bar{display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.mx-ai-btn{
  border:1px solid #cfe0ff;background:#eef5ff;color:var(--blue);
  font-size:12px;font-weight:600;padding:7px 14px;border-radius:9px;transition:.16s;
}
.mx-ai-btn:hover:not(:disabled){background:#e2eeff;border-color:#b7d2ff}
.mx-ai-btn:disabled{opacity:.6;cursor:default}
.mx-ai-btn.drill{background:var(--blue);border-color:var(--blue);color:#fff}
.mx-ai-btn.drill:hover:not(:disabled){background:var(--blue-dark);border-color:var(--blue-dark)}
.mx-ai-hint{font-size:11px;color:var(--muted)}
.mx-ai-err{
  margin-top:10px;font-size:12px;line-height:1.7;color:#b4322c;
  background:#fff5f4;border:1px solid #ffd9d5;border-radius:10px;padding:10px 12px;
}

.mx-diag{margin-top:12px;border:1px solid var(--line);border-radius:14px;background:#fff;padding:14px 15px}
.mx-diag-insufficient{border-color:#ffe2b8;background:#fffbf3}
.mx-diag-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:9px}
.mx-tag-ai{
  font-size:10.5px;font-weight:800;letter-spacing:.4px;color:#7a4bd6;
  background:#f3eeff;border:1px solid #e2d6ff;border-radius:6px;padding:3px 8px;
}
.mx-tag-warn{
  font-size:10.5px;font-weight:800;color:#a26a00;
  background:#fff3d6;border:1px solid #ffe2b0;border-radius:6px;padding:3px 8px;
}
.mx-diag-conf{font-size:12px;color:#4a5b76}
.mx-diag-conf b{color:var(--ink)}
.mx-diag-time{font-size:11px;color:#9aa6b8;margin-left:auto}
.mx-diag-confbasis{font-size:11px;color:#8b98ad;line-height:1.65;margin-bottom:10px}
.mx-diag-note{font-size:12.5px;line-height:1.8;color:#8a5a12;margin:4px 0 10px}

/* 事实块 */
.mx-facts{border:1px solid #e5eefb;background:#f7faff;border-radius:11px;padding:11px 12px;margin-bottom:12px}
.mx-facts-title{font-size:12px;font-weight:700;color:#2c4a7c;margin-bottom:9px}
.mx-facts-title span{font-weight:400;color:#8b98ad;font-size:11px}
.mx-facts-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:8px}
.mx-fact{background:#fff;border:1px solid #e9f1fc;border-radius:8px;padding:7px 9px}
.mx-fact span{display:block;font-size:10.5px;color:#8b98ad}
.mx-fact b{font-size:15px;color:var(--ink)}
.mx-fact small{font-size:10px;color:#8b98ad;font-weight:400;margin-left:2px}
.mx-facts-line{font-size:11.5px;line-height:1.75;color:#5b6b85;margin-top:7px}
.mx-facts-line b{color:#2c4a7c}
.mx-facts-foot{font-size:10.5px;color:#96a3b6;margin-top:8px;padding-top:7px;border-top:1px dashed #e3ebf6}

/* 假设块：虚线 + 左侧竖条 */
.mx-hyp{border:1.5px dashed #d9c9ff;border-radius:11px;padding:11px 12px;background:#fdfbff}
.mx-hyp-title{font-size:12px;font-weight:700;color:#6b46c1;margin-bottom:9px}
.mx-hyp-title span{font-weight:400;color:#9b8fb8;font-size:10.5px}
.mx-hyp-item{position:relative;background:#fff;border-radius:9px;padding:9px 11px;margin-bottom:7px;border-left:3px solid #c4b0f0}
.mx-hyp-item:last-child{margin-bottom:0}
.mx-hyp-item.to-verify{border-left-color:#f0c46a;background:#fffdf6}
.mx-hyp-name{font-size:12.5px;font-weight:600;color:#26324a;line-height:1.65}
.mx-hyp-name i{
  display:inline-grid;place-items:center;width:17px;height:17px;border-radius:50%;
  background:#efe8ff;color:#6b46c1;font-size:10px;font-style:normal;margin-right:6px;
}
.mx-hyp-basis,.mx-hyp-advice{font-size:11.5px;line-height:1.75;color:#5b6b85;margin-top:5px}
.mx-hyp-basis b{color:#7a4bd6;margin-right:5px;font-size:11px}
.mx-hyp-advice b{color:#0f8a63;margin-right:5px;font-size:11px}
.mx-hyp-empty{font-size:11.5px;color:#8b98ad;line-height:1.75}
.mx-flag-soft{
  position:absolute;top:9px;right:10px;font-size:10px;color:#a26a00;
  background:#fff3d6;border:1px solid #ffe2b0;border-radius:5px;padding:1px 6px;
}

/* 列表块 */
.mx-list{margin-top:11px}
.mx-list-title{font-size:11.5px;font-weight:700;color:#4a5b76;margin-bottom:5px}
.mx-list ul{margin:0;padding-left:17px}
.mx-list li{font-size:11.5px;line-height:1.8;color:#5b6b85}
.mx-list-verify li{color:#8a5a12}
.mx-list-advice li{color:#0f6b52}

.mx-diag-foot{
  display:flex;align-items:center;gap:8px;flex-wrap:wrap;
  margin-top:12px;padding-top:11px;border-top:1px solid #eef3fa;
}
.mx-diag-ask{font-size:11.5px;color:#8b98ad}
.mx-mini{
  border:1px solid #dce4ee;background:#fff;color:#64728b;
  font-size:11px;padding:5px 11px;border-radius:7px;transition:.15s;
}
.mx-mini:hover{color:var(--blue);border-color:#cfe0ff}
.mx-mini.on{background:#eef5ff;border-color:#b7d2ff;color:var(--blue);font-weight:700}
.mx-diag-src{font-size:10.5px;color:#a0abbb;line-height:1.7;margin-top:9px}

/* ===== 专项训练 ===== */
.mx-drill{background:#fff;border:1px solid var(--line);border-radius:14px;padding:16px 17px}
.mx-drill-head{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:11px}
.mx-drill-badge{
  font-size:10.5px;font-weight:800;color:#fff;background:var(--blue);
  border-radius:6px;padding:3px 9px;margin-right:9px;letter-spacing:.4px;
}
.mx-drill-kp{font-size:13px;font-weight:700;color:var(--ink)}
.mx-drill-prog{font-size:11.5px;color:var(--muted);display:flex;align-items:center;gap:9px}
.mx-drill-prog b{color:var(--blue);font-size:14px}
.mx-drill-note{
  font-size:11px;line-height:1.7;color:#6d7d96;background:#f7faff;
  border:1px solid #e9f1fc;border-radius:9px;padding:8px 11px;margin-bottom:11px;
}
.mx-drill-bar{display:flex;gap:4px;margin-bottom:14px}
.mx-drill-bar i{flex:1;height:5px;border-radius:3px;background:#eef2f8}
.mx-drill-bar i.ok{background:#43b581}
.mx-drill-bar i.bad{background:#e35d5d}
.mx-drill-bar i.now{background:#b7d2ff}

.mx-drill-qid{font-size:10.5px;color:#9aa6b8;margin-bottom:7px;letter-spacing:.3px}
.mx-drill-stem{font-size:13.5px;line-height:1.85;color:#22304a}
.mx-drill-stem table{border-collapse:collapse;margin:8px 0;font-size:12px}
.mx-drill-stem th,.mx-drill-stem td{border:1px solid #dbe4f0;padding:5px 9px}
.mx-drill-stem code{background:#f4f7fc;padding:1px 5px;border-radius:4px;font-size:12px}

.mx-drill-opts{display:grid;gap:8px;margin:14px 0}
.mx-opt{
  display:flex;align-items:flex-start;gap:10px;text-align:left;width:100%;
  border:1px solid #e3ebf6;background:#fff;border-radius:10px;
  padding:10px 12px;font-size:12.5px;line-height:1.7;color:#2d3b55;transition:.15s;
}
.mx-opt:hover:not(:disabled){border-color:#b7d2ff;background:#f7faff}
.mx-opt b{
  flex-shrink:0;width:22px;height:22px;border-radius:6px;background:#f2f6fd;
  color:#64728b;display:grid;place-items:center;font-size:11.5px;
}
.mx-opt.sel{border-color:var(--blue);background:#f2f7ff}
.mx-opt.sel b{background:var(--blue);color:#fff}
.mx-opt.right{border-color:#43b581;background:#f1fbf6}
.mx-opt.right b{background:#43b581;color:#fff}
.mx-opt.wrong{border-color:#e35d5d;background:#fff5f5}
.mx-opt.wrong b{background:#e35d5d;color:#fff}
.mx-opt.dim{opacity:.55}
.mx-opt:disabled{cursor:default}

.mx-fb{margin-top:12px;padding:9px 12px;border-radius:9px;font-size:12.5px;font-weight:600}
.mx-fb.ok{background:#f1fbf6;border:1px solid #c9efd9;color:#0f8a63}
.mx-fb.bad{background:#fff5f5;border:1px solid #ffd9d5;color:#b4322c}
.mx-drill-explain{margin-top:10px;background:#f9fbff;border:1px solid #e9f1fc;border-radius:10px;padding:10px 12px}
.mx-drill-explain>b{display:block;font-size:11px;color:#4a5b76;margin-bottom:6px}
.mx-drill-explain div{font-size:12px;line-height:1.85;color:#41526e}
.mx-drill-actions{display:flex;gap:9px;align-items:center;flex-wrap:wrap;margin-top:13px}
.mx-drill-empty{padding:26px 10px;text-align:center}
.mx-drill-empty-title{font-size:14px;font-weight:700;color:var(--ink);margin-bottom:8px}
.mx-drill-empty p{font-size:12.5px;line-height:1.85;color:#6d7d96;margin:0 auto 14px;max-width:560px}

/* ===== 复测报告 ===== */
.mx-report{background:#fff;border:1px solid var(--line);border-radius:14px;padding:16px 17px}
.mx-report-head{margin-bottom:13px}
.mx-report-cards{display:grid;grid-template-columns:repeat(5,1fr);gap:9px;margin-bottom:14px}
.mx-report-card{border:1px solid #e9f1fc;background:#f9fbff;border-radius:10px;padding:9px 11px}
.mx-report-card span{display:block;font-size:10.5px;color:#8b98ad}
.mx-report-card b{font-size:18px;color:var(--ink)}
.mx-report-card small{font-size:10px;color:#8b98ad;font-weight:400;margin-left:2px}
.mx-report-cmp{border:1px solid #e5eefb;background:#f7faff;border-radius:11px;padding:11px 13px;margin-bottom:13px}
.mx-report-cmp-title{font-size:11.5px;font-weight:700;color:#2c4a7c;margin-bottom:8px}
.mx-cmp-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:12px;color:#4a5b76;margin-top:6px}
.mx-cmp-row span{color:#8b98ad;min-width:110px}
.mx-cmp-row b{color:var(--ink)}
.mx-cmp-row i{color:#b3bccb;font-style:normal}
.mx-cmp-row em{font-style:normal;font-size:11px;padding:1px 7px;border-radius:5px}
.mx-cmp-row em.up{background:#e8f8f0;color:#0f8a63}
.mx-cmp-row em.down{background:#fdeceb;color:#b4322c}
.mx-cmp-row em.flat{background:#f1f4f9;color:#8b98ad}
.mx-report-basis,.mx-report-note{font-size:11px;line-height:1.75;color:#8b98ad;margin-top:10px}
.mx-report-note{color:#a08a63;background:#fffbf3;border:1px solid #ffe2b8;border-radius:8px;padding:8px 10px}

/* ===== 历史记录 ===== */
.mx-hist-block{margin-top:14px}
.mx-hist-block h4{font-size:13px;margin:0 0 9px;color:var(--ink)}
.mx-hist-empty{font-size:12px;color:#8b98ad;line-height:1.8;padding:12px;background:#f9fbff;border:1px dashed #e3ebf6;border-radius:10px}
.mx-hist-table{font-size:11.5px}
.mx-st{font-size:10.5px;padding:2px 7px;border-radius:5px;background:#f1f4f9;color:#64728b}
.mx-st-ok{background:#e8f8f0;color:#0f8a63}
.mx-st-insufficient{background:#fff3d6;color:#a26a00}
.mx-st-failed{background:#fdeceb;color:#b4322c}

@media (max-width:900px){
  .mx-facts-grid{grid-template-columns:repeat(3,1fr)}
  .mx-report-cards{grid-template-columns:repeat(3,1fr)}
}
@media (max-width:560px){
  .mx-facts-grid{grid-template-columns:repeat(2,1fr)}
  .mx-report-cards{grid-template-columns:repeat(2,1fr)}
  .mx-ai-bar{gap:7px}
  .mx-ai-hint{width:100%}
  .mx-opt{font-size:12px}
  .mx-cmp-row span{min-width:100%}
}

/* ===== AI 定制习题（非真题） ===== */
/* 这一组样式都在做同一件事：让「这是 AI 出的题」在任何位置都不会被忽略。
   紫色=AI 推断/生成，黄色=非真题提示，与真题的蓝白配色明确区分。 */
.mx-ai-btn.ghost{
  background:#fff;color:#7a4bd6;border-color:#e2d6ff;font-weight:600;
}
.mx-ai-btn.ghost:hover:not(:disabled){background:#f7f3ff;border-color:#cdb9f7}
.mx-ai-btn.ghost:disabled{opacity:.6;cursor:default}

.mx-drill-badge.ai{background:#7a4bd6}
.mx-drill.mx-drill-ai{border-color:#e2d6ff}

.mx-drill-warn{
  font-size:11.5px;line-height:1.75;color:#8a5a12;
  background:#fffbf3;border:1px solid #ffe2b8;border-radius:9px;
  padding:8px 11px;margin-bottom:11px;
}
.mx-drill-warn b{color:#a26a00}

.mx-loading-sub{
  margin-top:7px;font-size:11.5px;color:#9aa6b8;line-height:1.7;
}

.mx-src-split{
  border:1px solid #e5eefb;background:#f7faff;border-radius:11px;
  padding:11px 13px;margin-bottom:13px;
}
.mx-src-title{font-size:11.5px;font-weight:700;color:#2c4a7c;margin-bottom:8px}
.mx-src-row{
  display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  font-size:12px;color:#4a5b76;padding:4px 0;
}
.mx-src-row em{font-style:normal;color:#8b98ad;font-size:11.5px}
.mx-src-row b{margin-left:auto;color:var(--ink);font-size:13px}
.mx-src-tag{
  font-size:10.5px;font-weight:700;padding:2px 8px;border-radius:5px;
  background:#eef5ff;color:#2c5cbf;border:1px solid #d6e6ff;white-space:nowrap;
}
.mx-src-tag.ai{background:#f3eeff;color:#6b46c1;border-color:#e2d6ff}
.mx-src-note{
  font-size:10.5px;line-height:1.7;color:#9b8fb8;
  margin-top:8px;padding-top:7px;border-top:1px dashed #e3ebf6;
}

.mx-drill-empty-sub{
  font-size:11.5px;color:#8b98ad;line-height:1.8;margin:0 auto 14px;max-width:520px;
}

@media (max-width:560px){
  .mx-drill-badge.ai{font-size:10px}
  .mx-src-row b{margin-left:0;min-width:46px}
}

/* 「口径不同，不给涨跌」的说明：跟在对比行下面，字号更小、颜色更浅，
   避免被当成又一个结论 */
.mx-cmp-hint{
  font-size:10.5px;line-height:1.7;color:#a08a63;
  margin-top:5px;padding-left:2px;
}

/* ============================================================
   知识掌握度（V3）
   沿用全局蓝白：白卡片 + #e7edf5 边线 + 状态色只出现在徽章和条上。
   一条纪律：颜色只区分「状态强弱」，不用来装饰，否则用户会把配色当结论。
   ============================================================ */

.ms-head-actions{display:flex;gap:8px;flex-wrap:wrap}

/* ---- 加载 / 空 / 错误 三态 */
.ms-loading{color:var(--muted);font-size:13px;padding:22px 4px;text-align:center}
.ms-state{
  border:1px dashed var(--line);border-radius:14px;padding:20px;text-align:center;
  color:var(--muted);font-size:13px;line-height:1.75;background:#fbfdff;
}
.ms-state b{display:block;color:var(--ink);font-size:14px;margin-bottom:6px}
.ms-state p{margin:0 0 10px}
.ms-state-err{border-color:#f3c7c7;background:#fffafa}
.ms-state-err b{color:#b91c1c}
.ms-state-ok{border-color:#cfe8e0;background:#f7fdfb}
.ms-state-ok b{color:#0f766e}

.ms-note{font-size:11.5px;color:var(--muted);line-height:1.75;margin-top:10px}
.ms-hint{font-size:11px;color:var(--muted);font-weight:400}
.ms-na{color:#b6c1d2}
.ms-empty{color:#c2cbda}
.ms-ok{color:#0f766e;font-weight:700}
.ms-bad{color:#dc2626;font-weight:700}

/* ---- 四科总览 */
.ms-subjects{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin-bottom:18px}
.ms-subject{
  background:#fff;border:1px solid var(--line);border-radius:var(--radius);
  box-shadow:var(--shadow);padding:16px 16px 14px;display:flex;flex-direction:column;gap:6px;
  position:relative;overflow:hidden;
}
.ms-subject::before{content:"";position:absolute;inset:0 auto 0 0;width:3px;background:#dbe6f7}
.ms-sub-ok::before{background:#16a578}
.ms-sub-thin::before{background:#f59e0b}
.ms-sub-na::before{background:#cbd5e1}
.ms-subj-top{display:flex;align-items:center;justify-content:space-between;gap:8px}
.ms-subj-name{font-size:13px;font-weight:800;color:var(--ink)}
.ms-chip{
  font-size:10.5px;color:var(--muted);background:#f2f6fc;border-radius:8px;
  padding:2px 7px;white-space:nowrap;
}
.ms-subj-score{font-size:30px;font-weight:900;color:var(--blue);line-height:1.15;letter-spacing:-.5px}
.ms-subj-score i{font-size:12px;font-weight:600;color:var(--muted);font-style:normal;margin-left:2px}
.ms-subj-note{font-size:11px;color:var(--muted);line-height:1.6}
.ms-subj-bars{display:flex;gap:5px;flex-wrap:wrap;margin-top:4px}
.ms-mini{font-size:10.5px;padding:2px 6px;border-radius:7px;background:#f4f7fc;color:#54637c}
.ms-mini.ms-s-stable{background:#e9f8f3;color:#0f766e}
.ms-mini.ms-s-basic{background:var(--blue-soft);color:var(--blue)}
.ms-mini.ms-s-weak{background:#fef4e6;color:#b45309}
.ms-mini.ms-s-none{background:#fdecec;color:#b91c1c}
.ms-mini.ms-s-na{background:#f1f5f9;color:#64748b}
.ms-subj-weak{font-size:10.5px;color:#8a97ad;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ms-subj-risk{font-size:10.5px;font-weight:700;color:#b45309;margin-top:auto}

/* ---- 两栏 */
.ms-grid2{display:grid;grid-template-columns:minmax(0,.92fr) minmax(0,1.08fr);gap:18px;align-items:start}
/* 左栏（分布）比右栏（十几条风险卡）短一截，右边一长左边就剩一大片空白。
   让左栏跟着滚：空白变成「边看风险边对照分布」，而不是像版式断了。
   sticky 失效时退化成普通定位，不影响可读性。 */
.ms-grid2>#msDistPanel{position:sticky;top:14px}

/* ---- 分布图 */
.ms-dist{display:flex;flex-direction:column;gap:9px}
.ms-dist-row{display:grid;grid-template-columns:72px 1fr 92px;align-items:center;gap:10px}
.ms-dist-label{font-size:12px;color:#54637c}
.ms-dist-track{height:9px;background:#eef3fa;border-radius:6px;overflow:hidden}
.ms-dist-track i{display:block;height:100%;border-radius:6px;background:#cbd5e1;transition:width .35s ease}
.ms-dist-track i.ms-s-stable{background:#16a578}
.ms-dist-track i.ms-s-basic{background:var(--blue)}
.ms-dist-track i.ms-s-weak{background:#f59e0b}
.ms-dist-track i.ms-s-none{background:#dc2626}
.ms-dist-track i.ms-s-na{background:#94a3b8}
.ms-dist-num{font-size:11px;color:var(--muted);text-align:right}

/* ---- 徽章 */
.ms-badge{
  display:inline-block;font-size:11px;font-weight:700;padding:3px 9px;border-radius:9px;
  background:#f1f5f9;color:#64748b;white-space:nowrap;
}
.ms-badge.ms-s-stable{background:var(--st-stable-bg);color:var(--st-stable-fg)}
.ms-badge.ms-s-basic{background:var(--st-basic-bg);color:var(--st-basic-fg)}
.ms-badge.ms-s-weak{background:var(--st-weak-bg);color:var(--st-weak-fg)}
.ms-badge.ms-s-none{background:var(--st-not_mastered-bg);color:var(--st-not_mastered-fg)}
.ms-badge.ms-s-na{background:var(--st-insufficient-bg);color:var(--st-insufficient-fg)}
.ms-badge.ms-r-high{background:#fdecec;color:#b91c1c}
.ms-badge.ms-r-mid{background:#fef4e6;color:#b45309}
.ms-badge.ms-r-low{background:#e9f8f3;color:#0f766e}
.ms-badge.ms-r-na{background:#f1f5f9;color:#64748b}

/* ---- 风险卡 */
.ms-risk{
  border:1px solid var(--line);border-left:3px solid #cbd5e1;border-radius:12px;
  padding:10px 13px 8px;margin-bottom:8px;background:#fff;
}
.ms-risk.ms-r-high{border-left-color:#dc2626;background:#fffafa}
.ms-risk.ms-r-mid{border-left-color:#f59e0b;background:#fffdf7}
.ms-risk-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:4px}
.ms-risk-kp{font-size:13px;color:var(--ink)}
.ms-risk-basis{font-size:11.5px;color:#5b6b85;line-height:1.7}
/* 卡面事实行：距上次 / 建议间隔 / 超几倍，一眼扫出这条为什么排在前面 */
.ms-risk-line{font-size:11.5px;color:#5b6b85;font-variant-numeric:tabular-nums}
/* 依据折叠：默认收起，需要核对的人自己点开。23 条卡里大半措辞相同，
   全铺开等于用三行字把真正的差异（天数、倍数）埋掉。 */
.ms-risk-why{margin-left:auto;align-self:center}
.ms-risk-why summary{
  cursor:pointer;font-size:10.5px;color:#94a1b5;list-style:none;
  display:inline-flex;align-items:center;gap:3px;white-space:nowrap;
}
.ms-risk-why summary::-webkit-details-marker{display:none}
.ms-risk-why summary::before{content:"▸";font-size:9px;transition:transform .15s}
.ms-risk-why[open]{flex-basis:100%;margin-left:0;margin-top:6px}
.ms-risk-why[open] summary::before{transform:rotate(90deg)}
.ms-risk-why summary:hover{color:var(--blue)}
.ms-risk-why p{margin:6px 0 0;font-size:11.5px;color:#5b6b85;line-height:1.75}
/* 面板顶部说一次就够：原来这句话原来印在 23 条卡里各一遍 */
.ms-risk-caveat{
  margin:0 0 12px;padding:7px 10px;border-radius:9px;background:#f6f8fc;
  font-size:11px;color:#6b7a94;line-height:1.7;
}
.ms-risk-foot{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  margin-top:5px;font-size:11px;color:var(--muted);
}
.ms-link{
  border:0;background:transparent;color:var(--blue);font-size:11.5px;
  font-weight:700;cursor:pointer;padding:2px 0;
}
.ms-link:hover{text-decoration:underline}

/* ---- 表格 */
.ms-tools{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.ms-table-wrap{overflow-x:auto}
.ms-table{width:100%;border-collapse:collapse;font-size:12px}
.ms-table th{
  text-align:left;font-size:11px;font-weight:700;color:var(--muted);
  padding:8px 10px;border-bottom:1px solid var(--line);white-space:nowrap;background:#fbfdff;
}
.ms-table td{padding:9px 10px;border-bottom:1px solid #f1f5fb;vertical-align:top;color:#33415c}
.ms-table tbody tr:hover{background:#fafcff}
.ms-td-kp b{display:block;font-size:12.5px;color:var(--ink);margin-bottom:3px}
.ms-td-score{font-weight:800;color:var(--blue);white-space:nowrap}
.ms-td-go{color:#b6c1d2;font-size:11px;white-space:nowrap}
.ms-td-note{font-size:11px;color:#61708a;line-height:1.65;min-width:180px}
.ms-row{cursor:pointer}
.ms-row:hover .ms-td-go{color:var(--blue)}
.ms-tr-na td{background:#fcfdff;color:#94a3b8}

/* ---- 详情 */
/* 滚到详情时会被 78px 的吸顶栏盖住标题，留出等高的上边距。
   注意要加在实际发生 scrollIntoView 的容器 #msDetail 上，
   只加在内层 .ms-detail 上是无效的。 */
#msDetail{scroll-margin-top:96px}
.ms-detail{margin-top:18px}
.ms-detail-head{
  display:flex;align-items:flex-start;justify-content:space-between;gap:14px;
  padding-bottom:14px;border-bottom:1px solid var(--line);margin-bottom:14px;
}
.ms-detail-title{font-size:18px;font-weight:900;color:var(--ink);display:flex;
  align-items:center;gap:8px;flex-wrap:wrap}
.ms-detail-sub{font-size:12px;color:var(--muted);margin-top:8px;display:flex;
  align-items:center;gap:6px;flex-wrap:wrap}
.ms-detail-basis{
  background:#f7faff;border:1px solid #e3ecfa;border-radius:12px;padding:12px 14px;
}
.ms-detail-basis b{font-size:12px;color:var(--blue)}
.ms-detail-basis p{margin:6px 0 0;font-size:12.5px;line-height:1.8;color:#33415c}
/* v1.1 置信区间：分数旁边那个「有多硬」的标签，以及点开后的说明块 */
.ms-ci{font-size:11.5px;color:var(--blue);background:#eef4ff;border-radius:999px;
  padding:1px 8px;cursor:help;white-space:nowrap}
.ms-ci.is-fragile{color:#b45309;background:#fff3e2}
.ms-ci-box{margin-top:10px;background:#fff;border:1px solid var(--line);border-radius:12px;
  padding:12px 14px}
.ms-ci-box.is-fragile{border-color:#f3d3a0;background:#fffaf2}
.ms-ci-box b{font-size:12px;color:var(--blue)}
.ms-ci-box.is-fragile b{color:#b45309}
.ms-ci-range{margin-top:6px;font-size:13px;color:var(--ink)}
.ms-ci-range strong{font-size:15px}
.ms-ci-level{display:inline-block;margin-left:8px;font-size:11px;color:var(--muted)}
/* 列表分数列下面那行小字：只有两端数字，档位在 tooltip */
.ms-ci-mini{display:block;font-size:10.5px;line-height:1.5;color:var(--muted);
  margin-top:2px;font-weight:500;cursor:help}
.ms-ci-mini.is-fragile{color:#b45309}
.ms-h4{
  font-size:13px;font-weight:800;color:var(--ink);margin:22px 0 10px;
  padding-left:9px;border-left:3px solid var(--blue);
}
.ms-gates{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.ms-gate{
  display:flex;align-items:center;gap:8px;font-size:12px;padding:9px 12px;
  border-radius:10px;border:1px solid var(--line);background:#fff;
}
.ms-gate span{font-weight:900}
.ms-gate.ok{border-color:#cfe8e0;background:#f7fdfb;color:#0f766e}
.ms-gate.no{border-color:#f6d5d5;background:#fffafa;color:#b91c1c}
.ms-unavail{
  margin-top:18px;background:#fbfcfe;border:1px dashed var(--line);
  border-radius:12px;padding:14px 16px;
}
.ms-unavail b{font-size:12px;color:#54637c}
.ms-unavail ul{margin:8px 0 0;padding-left:18px}
.ms-unavail li{font-size:11.5px;color:#61708a;line-height:1.85;margin-bottom:4px}

.ms-riskbox{
  border:1px solid var(--line);border-radius:12px;padding:14px 16px;background:#fff;
}
.ms-riskbox.ms-r-high{background:#fffafa;border-color:#f6d5d5}
.ms-riskbox.ms-r-mid{background:#fffdf7;border-color:#f5e3c2}
.ms-risk-meta{font-size:11.5px;color:var(--muted)}
.ms-risk-method{
  margin-top:10px;font-size:12px;color:#33415c;line-height:1.75;
  padding-top:10px;border-top:1px dashed var(--line);
}
.ms-chart{width:100%;height:auto;display:block;margin-bottom:12px}
.ms-detail-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:22px;
  padding-top:16px;border-top:1px solid var(--line)}

/* ---- 评分口径 */
.ms-formula{padding:2px}
.ms-formula h4{font-size:12.5px;color:var(--ink);margin:16px 0 8px}
.ms-formula h4:first-child{margin-top:0}
.ms-formula ul{margin:0;padding-left:18px}
.ms-formula li{font-size:11.5px;color:#54637c;line-height:1.9}
.ms-code{
  font-family:Consolas,"Courier New",monospace;font-size:12px;background:#f5f8fd;
  border:1px solid var(--line);border-radius:9px;padding:10px 12px;color:#1e3a8a;
  margin:0 0 6px;overflow-x:auto;
}

/* ---- 窄屏 */
@media (max-width:1100px){
  .ms-subjects{grid-template-columns:repeat(2,minmax(0,1fr))}
  .ms-grid2{grid-template-columns:1fr}
}
@media (max-width:640px){
  .ms-subjects{grid-template-columns:1fr}
  .ms-gates{grid-template-columns:1fr}
  .ms-dist-row{grid-template-columns:60px 1fr 78px;gap:6px}
  .ms-detail-head{flex-direction:column}
  .ms-detail-title{font-size:16px}
  .ms-subj-score{font-size:26px}
  .ms-tools{width:100%}
  .ms-detail-actions .primary-btn{width:100%}
}

/* ================================================================
   掌握度统一状态徽章（V2 报告与「知识掌握度」页共用）
   配色全部来自 :root 的 --st-* 变量，与 .ms-badge.ms-s-* 同源。
   ================================================================ */
.zx-st{
  display:inline-block;font-size:11px;font-weight:700;padding:3px 9px;border-radius:9px;
  background:var(--st-insufficient-bg);color:var(--st-insufficient-fg);white-space:nowrap;
}
.zx-st-stable{background:var(--st-stable-bg);color:var(--st-stable-fg)}
.zx-st-basic{background:var(--st-basic-bg);color:var(--st-basic-fg)}
.zx-st-weak{background:var(--st-weak-bg);color:var(--st-weak-fg)}
.zx-st-not_mastered{background:var(--st-not_mastered-bg);color:var(--st-not_mastered-fg)}
.zx-st-insufficient{background:var(--st-insufficient-bg);color:var(--st-insufficient-fg)}
/* 「待复测」辅助标记：不参与档位，只提示缺延迟复测证据 */
.zx-st-chip{
  display:inline-block;margin-left:6px;font-size:10px;font-weight:600;padding:2px 7px;
  border-radius:8px;background:#eef2ff;color:#4f46e5;border:1px dashed #c7d2fe;
}
.zx-st-desc{display:inline-block;margin-left:8px;font-size:11px;color:var(--muted)}
.zx-st-raw{display:inline-block;margin-left:8px;font-size:11px;color:#94a3b8}

/* ================================================================
   V4：计划同步提示条 + 遗忘风险复测区块
   ================================================================ */
.v2-sync-note{
  display:none;margin:10px 0;padding:8px 14px;border-radius:10px;
  font-size:12px;font-weight:600;
}
.v2-sync-note.is-ok{background:#e9f8f3;color:#0f766e}
.v2-sync-note.is-warn{background:#fef4e6;color:#b45309}
.plan-v2-risk.retest{border-left:4px solid #4f46e5;background:#eef2ff}
.plan-v2-risk.retest .plan-v2-failure-item small{color:#4338ca}

/* V4：复盘页「掌握度与遗忘风险」区块（与复盘其它 panel 同宽同距） */
.review-mastery-box{margin-top:16px}
.review-mastery-box .review-diag-id{background:#eef2ff;color:#4338ca}

/* V4：复盘页 AI 偏差分析 */
.review-advice{margin-top:14px;padding:14px 16px;border:1px solid #e2eaf6;border-radius:14px;background:#fbfdff}
.review-advice-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.review-advice-head b{font-size:14px;color:#1e293b}
.review-advice-head span{font-size:11px;color:#94a3b8;flex:1;min-width:160px}
.review-advice-body{margin-top:10px}
.review-advice-reading{margin:0 0 10px;font-size:13px;line-height:1.75;color:#334155}
.review-advice-item{padding:9px 12px;border-left:3px solid #c7d2fe;background:#fff;border-radius:0 10px 10px 0;margin-bottom:8px}
.review-advice-title{font-size:13px;font-weight:700;color:#1e293b;display:flex;align-items:center;gap:8px}
.review-advice-title em{font-style:normal;font-size:10px;font-weight:700;padding:2px 7px;border-radius:7px;background:#eef2ff;color:#4338ca}
.review-advice-title em.pri-high{background:#fdecec;color:#b91c1c}
.review-advice-title em.pri-low{background:#f1f5f9;color:#64748b}
.review-advice-item p{margin:5px 0 3px;font-size:12px;color:#475569;line-height:1.7}
.review-advice-item small{font-size:11px;color:#94a3b8}
.review-advice-gaps{margin-top:10px;padding:9px 12px;border-radius:10px;background:#fff8ec;border:1px solid #fde8c8}
.review-advice-gaps b{font-size:12px;color:#b45309}
.review-advice-gaps ul{margin:6px 0 0;padding-left:18px}
.review-advice-gaps li{font-size:12px;color:#92400e;line-height:1.7}
.review-advice-warn{padding:9px 12px;border-radius:10px;background:#fef2f2;color:#b91c1c;font-size:12px}
.review-advice-foot{margin-top:8px;font-size:11px;color:#94a3b8}
