/* ============ 马卡龙主题变量 ============ */
:root{
  --mac-pink:#F7B7C8;     /* 樱花粉 */
  --mac-blue:#A7D8F0;     /* 雾霾蓝 */
  --mac-mint:#B8E6CF;     /* 薄荷绿 */
  --mac-yellow:#FCE3A0;   /* 奶油黄 */
  --mac-purple:#D9C2F0;   /* 薰衣草紫 */
  --mac-peach:#FBC9A6;    /* 蜜桃橙 */
  --mac-lav:#E9D8F4;
  --bg:#FBF7FB;
  --panel:#FFFFFF;
  --ink:#5A4A55;
  --ink-soft:#9A8A95;
  --line:#F0E6EE;
  --shadow:0 8px 24px rgba(190,150,180,.18);
  --shadow-sm:0 3px 10px rgba(190,150,180,.14);
  --radius:18px;
  --radius-sm:12px;
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{
  font-family:"PingFang SC","Microsoft YaHei","Segoe UI",system-ui,sans-serif;
  background:var(--bg);color:var(--ink);
  -webkit-font-smoothing:antialiased;
}
.hidden{display:none!important}
button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit}

/* ============ 登录页 ============ */
.login-screen{
  min-height:100vh;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(135deg,var(--mac-pink),var(--mac-purple) 45%,var(--mac-blue));
  position:relative;overflow:hidden;
}
.login-screen::before,.login-screen::after{
  content:"";position:absolute;border-radius:50%;opacity:.5;filter:blur(2px);
}
.login-screen::before{width:340px;height:340px;background:var(--mac-yellow);top:-80px;right:-60px}
.login-screen::after{width:260px;height:260px;background:var(--mac-mint);bottom:-70px;left:-50px}
.login-card{
  position:relative;z-index:2;background:#fff;border-radius:28px;
  padding:38px 34px;width:360px;box-shadow:0 20px 60px rgba(120,90,140,.3);
  text-align:center;
}
.login-badge{
  width:64px;height:64px;border-radius:20px;margin:0 auto 14px;
  background:linear-gradient(135deg,var(--mac-purple),var(--mac-pink));
  color:#fff;font-size:34px;font-weight:800;display:flex;align-items:center;justify-content:center;
  box-shadow:var(--shadow-sm);
}
.login-title{font-size:26px;font-weight:800;letter-spacing:1px}
.login-sub{color:var(--ink-soft);font-size:13px;margin:6px 0 22px}
.login-field{text-align:left;margin-bottom:14px}
.login-field label{display:block;font-size:13px;color:var(--ink-soft);margin-bottom:6px;font-weight:600}
.login-field input,.login-field select{
  width:100%;padding:12px 14px;border-radius:14px;border:2px solid var(--line);
  font-size:15px;background:#FFFDFE;color:var(--ink);outline:none;transition:.2s;
}
.login-field input:focus,.login-field select:focus{border-color:var(--mac-purple)}
.login-btn{
  width:100%;margin-top:8px;padding:14px;border-radius:16px;font-size:16px;font-weight:700;color:#fff;
  background:linear-gradient(135deg,var(--mac-pink),var(--mac-purple));
  box-shadow:0 10px 24px rgba(214,140,190,.4);transition:.2s;
}
.login-btn:hover{transform:translateY(-2px);box-shadow:0 14px 30px rgba(214,140,190,.5)}
.login-tip{margin-top:16px;font-size:11px;color:var(--ink-soft);line-height:1.5}
.auth-install-auto{margin:6px 0 14px;padding:12px 14px;border:1px dashed var(--mac-purple);border-radius:14px;background:rgba(184,155,224,.08)}
.auth-install-auto p{margin:0 0 8px;font-size:13px;color:var(--ink-soft)}
.auth-install-auto strong{color:var(--mac-purple)}
.auth-install-pw{font-size:22px;font-weight:800;letter-spacing:3px;color:#5b3fae;background:#fff;padding:8px 12px;border-radius:10px;text-align:center;word-break:break-all}
.auth-install-btns{display:flex;gap:10px;margin-top:10px}
.auth-install-btns .login-btn{margin-top:0}
.login-btn.ghost{background:#f0ecfa;color:#6a5f96;box-shadow:none}
/* 未激活提示条：说明「已注册过可直接登录」，避免安装码吓退老用户 */
.auth-install-tip{margin:2px 0 8px;padding:10px 12px;border-radius:12px;background:#fff7e6;border:1px solid #f2d9a8;color:#8a5a00;font-size:12.8px;line-height:1.7}
.auth-install-tip b{color:#7a4a00}
.auth-install-tip + div a,.login-tip a{color:var(--mac-purple);font-weight:600;text-decoration:none}
.auth-install-tip + div a:hover,.login-tip a:hover{text-decoration:underline}

/* ============ 顶栏 ============ */
.app{min-height:100vh;display:flex;flex-direction:column}
.topbar{
  height:60px;background:var(--panel);border-bottom:1px solid var(--line);
  display:flex;align-items:center;justify-content:space-between;padding:0 22px;
  box-shadow:var(--shadow-sm);position:sticky;top:0;z-index:20;
}
.topbar-left{display:flex;align-items:center;gap:10px}
.logo{
  width:34px;height:34px;border-radius:10px;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(135deg,var(--mac-purple),var(--mac-pink));color:#fff;font-weight:800;font-size:20px;
}
.brand{font-weight:800;font-size:17px}
.topbar-right{display:flex;align-items:center;gap:10px}
.honor-chip,.point-chip,.user-chip,.date-chip{
  background:var(--bg);border-radius:20px;padding:7px 14px;font-size:13px;font-weight:700;
  border:1px solid var(--line);
}
.point-chip{color:#C99A2E}
.honor-chip{color:#B96FB0}
.date-chip{color:#2E7BB8;font-variant-numeric:tabular-nums}
.date-chip .date-wd{margin-left:4px;color:#5BA8CF;font-size:12px}
.icon-btn{width:34px;height:34px;border-radius:10px;background:var(--line);font-size:16px;transition:.2s}
.icon-btn:hover{background:var(--mac-pink);color:#fff}
.sync-btn{width:auto;padding:0 12px;font-size:13px;font-weight:600;color:#6a5f96;background:#f3ecfb}
.sync-btn:hover{background:var(--mac-purple);color:#fff}
.sync-btn:disabled{opacity:.6;cursor:default}
.sync-time{font-size:11px;color:var(--ink-soft)}

/* ============ 布局 ============ */
.layout{display:flex;flex:1;min-height:0}
.sidebar{
  width:200px;background:var(--panel);border-right:1px solid var(--line);
  padding:18px 12px;display:flex;flex-direction:column;gap:4px;
}
.nav-group{font-size:11px;color:var(--ink-soft);font-weight:700;margin:14px 8px 4px;letter-spacing:1px}
.nav-group:first-child{margin-top:0}
.nav-item{
  text-align:left;padding:11px 14px;border-radius:12px;font-size:14px;font-weight:600;color:var(--ink);
  transition:.18s;
}
.nav-item:hover{background:var(--bg)}
.nav-item.active{
  background:linear-gradient(135deg,var(--mac-purple),var(--mac-pink));color:#fff;
  box-shadow:var(--shadow-sm);
}
.content{flex:1;padding:26px 30px;overflow:auto;min-height:0}

/* ============ 通用卡片 ============ */
.card{background:var(--panel);border-radius:var(--radius);padding:22px;box-shadow:var(--shadow);margin-bottom:20px}
.card-title{font-size:18px;font-weight:800;margin-bottom:4px;display:flex;align-items:center;gap:8px}
.card-sub{font-size:13px;color:var(--ink-soft);margin-bottom:18px}
.grid{display:grid;gap:16px}
.grid-2{grid-template-columns:repeat(2,1fr)}
.grid-3{grid-template-columns:repeat(3,1fr)}
.grid-5{grid-template-columns:repeat(5,1fr)}
.grid-6{grid-template-columns:repeat(6,1fr)}
@media(max-width:1100px){.grid-5{grid-template-columns:repeat(2,1fr)}.grid-6{grid-template-columns:repeat(2,1fr)}.grid-3{grid-template-columns:repeat(2,1fr)}}
@media(max-width:600px){.grid-5{grid-template-columns:1fr}.grid-6{grid-template-columns:1fr}}

/* ============ 能力库 ============ */
.ability-card{background:var(--panel);border-radius:var(--radius-sm);padding:18px;box-shadow:var(--shadow-sm);border:2px solid var(--line);transition:.2s;text-align:center}
.ability-card:hover{transform:translateY(-3px);box-shadow:var(--shadow)}
.ability-emoji{font-size:30px;margin-bottom:8px}
.ability-name{font-weight:700;font-size:15px}
.ability-desc{font-size:11px;color:var(--ink-soft);margin:6px 0 12px;line-height:1.5;min-height:32px}
.score-ring{position:relative;width:84px;height:84px;margin:0 auto 10px}
.score-ring svg{transform:rotate(-90deg)}
.score-ring .val{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:20px;font-weight:800}
.ability-meta{font-size:11px;color:var(--ink-soft);margin-bottom:6px}
.ability-last{font-size:10px;color:var(--mac-purple);margin-bottom:10px}
.ability-steps{text-align:left;margin:10px 0;font-size:11px;color:var(--ink-soft);line-height:1.6;min-height:40px}
.step-row{padding-left:14px;position:relative;margin:3px 0}
.step-row::before{content:"▸";position:absolute;left:0;color:var(--mac-purple);font-weight:800}
.btn{
  padding:9px 16px;border-radius:12px;font-weight:700;font-size:13px;background:var(--mac-mint);color:#3c7a5a;
  transition:.18s;
}
.btn:hover{filter:brightness(.97)}
.btn-pink{background:var(--mac-pink);color:#a8456a}
.btn-blue{background:var(--mac-blue);color:#3a6f93}
.btn-purple{background:var(--mac-purple);color:#7a4a9a}
.btn-ghost{background:var(--bg);color:var(--ink-soft);border:1px solid var(--line)}
.btn:disabled{opacity:.45;cursor:not-allowed}

.modal-mask{position:fixed;inset:0;background:rgba(90,74,85,.45);display:flex;align-items:center;justify-content:center;z-index:50}
.modal{background:#fff;border-radius:20px;padding:26px;width:min(440px,92vw);box-shadow:0 20px 60px rgba(0,0,0,.25);max-height:88vh;overflow:auto}
.modal h3{font-size:18px;margin-bottom:14px}
.modal label{font-size:13px;font-weight:600;color:var(--ink-soft);display:block;margin:12px 0 6px}
.modal textarea,.modal input,.modal select{width:100%;padding:10px 12px;border:2px solid var(--line);border-radius:12px;font-size:14px;outline:none;resize:vertical}
.modal textarea:focus,.modal input:focus,.modal select:focus{border-color:var(--mac-purple)}
.stars{display:flex;gap:6px;font-size:26px;justify-content:center;margin:6px 0}
.star{cursor:pointer;color:var(--line);transition:.15s}
.star.on{color:#F2B705}
.modal-actions{display:flex;gap:10px;margin-top:18px;justify-content:flex-end}
.modal-lg{width:min(560px,94vw)}
.attach-bar{display:flex;gap:8px;flex-wrap:wrap;margin:8px 0 6px}
.btn-attach{background:var(--bg);color:var(--ink);border:1px solid var(--line);padding:8px 12px;font-size:12px}
.btn-xs{padding:4px 8px;font-size:11px;border-radius:8px}
.attach-list{display:flex;flex-direction:column;gap:6px;margin:8px 0}
.attach-item{display:flex;align-items:center;justify-content:space-between;background:var(--bg);border:1px solid var(--line);padding:8px 10px;border-radius:10px;font-size:12px}
.attach-item span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:78%}
.attach-tip{font-size:11px;color:var(--ink-soft);margin:0 0 8px;line-height:1.5}
.btn-attach.btn-gen{background:var(--mac-mint,#B8E6CF);color:#2f6b50;border-color:#9ed9bf;font-weight:700}
/* 录音/视频录制框 */
.recorder-box{background:#FFF5F8;border:2px dashed var(--mac-pink);border-radius:14px;padding:14px;margin:10px 0;text-align:center}
.recorder-status{font-size:13px;font-weight:700;color:var(--mac-pink);margin-bottom:8px}
.recorder-tip{font-size:11px;color:var(--ink-soft);margin-top:8px}
/* 生成练习 */
.gen-types{display:flex;gap:8px;flex-wrap:wrap;margin:12px 0 6px}
.gen-chip{display:flex;flex-direction:column;align-items:center;gap:2px;background:var(--bg);border:2px solid var(--line);border-radius:12px;padding:10px 14px;font-size:13px;font-weight:700;cursor:pointer;color:var(--ink)}
.gen-chip .gen-sub{font-size:10px;font-weight:500;color:var(--ink-soft)}
.gen-chip.on{border-color:var(--mac-pink);background:#FCEEF4;color:var(--mac-pink)}
.gen-note{font-size:12px;color:var(--ink-soft);margin-bottom:10px}
.gen-problems{display:flex;flex-direction:column;gap:10px;max-height:52vh;overflow:auto;padding-right:4px}
.gen-item{background:var(--bg);border:1px solid var(--line);border-radius:12px;padding:10px 12px}
.gen-q{font-size:14px;font-weight:600;margin-bottom:6px}
.gen-ans{width:100%;padding:8px 10px;border-radius:10px;border:2px solid var(--line);font-size:14px;margin-top:4px}
.gen-badge{display:inline-block;font-size:12px;font-weight:800;margin-left:8px;padding:1px 8px;border-radius:8px}
.gen-badge.ok{background:#E4F6EC;color:#2f8a55}
.gen-badge.no{background:#FBE3E9;color:#C0392B}
.gen-exp{display:inline-block;font-size:12px;color:var(--ink-soft);margin-left:8px}
.gen-err{margin-left:8px;padding:5px 8px;border-radius:8px;border:2px solid var(--line);font-size:12px}
.gen-summary{background:#FCEEF4;border-radius:12px;padding:10px 12px;margin-bottom:12px;font-size:14px;font-weight:700;color:var(--mac-pink)}
/* 生成器：双流程标签页 + 手写/拍照批改区 */
.gen-tabs{display:flex;gap:8px;margin:10px 0 4px}
.gen-tab{flex:1;background:var(--bg);border:2px solid var(--line);border-radius:12px;padding:9px 6px;font-size:13px;font-weight:700;cursor:pointer;color:var(--ink)}
.gen-tab.on{border-color:var(--mac-purple);background:#F1ECFA;color:var(--mac-purple)}
.gen-hand{background:#FBF7FF;border:2px dashed #D9C2F0;border-radius:14px;padding:12px;margin:6px 0 12px}
.gen-steps{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px;font-size:12px;font-weight:700;color:var(--mac-purple)}
.gen-steps span{background:#F1ECFA;border-radius:8px;padding:4px 8px}
.gen-handbar{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:10px}
.gen-photos{display:flex;flex-wrap:wrap;gap:8px}
.gen-photo{position:relative;width:88px;height:88px;border-radius:10px;overflow:hidden;border:1px solid var(--line);background:#fff}
.gen-photo img{width:100%;height:100%;object-fit:cover}
.gen-photo-x{position:absolute;top:2px;right:2px;width:20px;height:20px;border:none;border-radius:50%;background:rgba(0,0,0,.55);color:#fff;font-size:12px;line-height:18px;cursor:pointer}
/* OCR 识别状态条 */
.ocr-status{font-size:12px;line-height:1.5;margin:6px 0 2px;padding:7px 10px;border-radius:9px;border:1px solid var(--line);background:#fff}
.ocr-status.ocr-loading{color:#2C6FB0;border-color:#CFE3F7;background:#F4FAFE}
.ocr-status.ocr-ok{color:#2E7D5B;border-color:#BFE6CF;background:#F1FBF5}
.ocr-status.ocr-warn{color:#B26A00;border-color:#FCE3A0;background:#FFF9EC}
/* 竖式/脱式书写区（手写板就绪） */
.gen-online{background:#F7FBFE;border:2px dashed #CFE3F7;border-radius:14px;padding:12px;margin:6px 0 12px}
.calc-box{border-radius:10px;margin:6px 0 4px;background:#fff;position:relative}
.calc-box.step{border:1.5px solid #D9C2F0;min-height:120px;background:repeating-linear-gradient(#fff,#fff 23px,#ECE4F7 23px,#ECE4F7 24px)}
.calc-box.grid{border:1.5px solid #CFE3F7;min-height:185px;background:repeating-linear-gradient(#fff,#fff 23px,#E3EEFB 23px,#E3EEFB 24px)}
.calc-hw{position:absolute;top:6px;right:6px;z-index:2;background:var(--mac-purple);color:#fff;border:1px solid #fff;box-shadow:var(--shadow-sm)}
/* 打印练习纸 iframe */
.ws-frame{width:100%;height:42vh;border:1px solid var(--line);border-radius:10px;background:#fff}
/* 手写板 */
.hw-canvas{width:100%;height:300px;border:2px solid var(--line);border-radius:12px;background:#fff;touch-action:none;cursor:crosshair}
.hw-tools{display:flex;gap:8px;justify-content:flex-end;margin-top:10px}
.hw-fallback{text-align:center;color:var(--ink-soft);padding:30px;background:var(--bg);border-radius:12px}
.tag-pink{background:var(--mac-pink);color:#fff}
.ability-actions{display:flex;gap:8px;margin-top:auto}
.hist-list{max-height:60vh;overflow:auto;padding-right:6px}
.hist-item{background:var(--bg);border:1px solid var(--line);border-radius:14px;padding:12px;margin-bottom:10px}
.hist-head{font-weight:700;color:var(--mac-purple);font-size:13px;margin-bottom:8px}
.hist-fields{font-size:12px;color:var(--ink);line-height:1.6}
.hist-field{margin:3px 0}
.hist-field b{color:var(--ink-soft)}
.hist-attach-box{margin-top:8px;padding-top:8px;border-top:1px dashed var(--line);font-size:12px}
.hist-attach{display:flex;align-items:center;gap:8px;margin:4px 0}
.hist-note{margin-top:8px;font-size:12px;color:var(--ink-soft);font-style:italic}

/* ============ 雷达图区 ============ */
.radar-wrap{display:flex;gap:24px;flex-wrap:wrap;align-items:center}
.radar-side{flex:1;min-width:240px}
.legend-row{display:flex;align-items:center;gap:8px;font-size:13px;margin:6px 0}
.legend-dot{width:12px;height:12px;border-radius:50%}

/* ============ 考试诊断 ============ */
.upload-zone{
  border:2px dashed var(--mac-purple);border-radius:16px;padding:30px;text-align:center;
  background:#FCF8FE;cursor:pointer;transition:.2s;color:var(--ink-soft);
}
.upload-zone:hover{background:#F6EEFB}
.upload-zone.drag{border-color:var(--mac-pink);background:#FCEEF4}
.preview-img{max-width:100%;border-radius:12px;margin-top:14px;box-shadow:var(--shadow-sm)}
.mistake-item{background:var(--bg);border-radius:14px;padding:16px;margin-bottom:12px;border-left:4px solid var(--mac-pink)}
.mistake-item h4{font-size:14px;margin-bottom:6px}
.tag{display:inline-block;background:var(--mac-yellow);color:#9a7b1e;border-radius:8px;padding:3px 9px;font-size:12px;font-weight:700;margin:3px 4px 0 0}
.tag-purple{background:var(--mac-purple);color:#fff}
.tag-blue{background:var(--mac-blue);color:#fff}
.kp-miss{color:#C0392B;font-weight:700}
.explain-box{background:#FFFDF6;border-radius:12px;padding:12px;font-size:13px;line-height:1.7;margin-top:8px;border:1px solid var(--mac-yellow)}

/* ============ 知识图谱 ============ */
.kg-stage{width:100%;height:520px;background:radial-gradient(circle at 30% 30%,#FFF,#F7EEF8);border-radius:var(--radius);overflow:hidden;border:1px solid var(--line)}
.kg-node{cursor:pointer}
.kg-node circle{transition:.2s}
.kg-node:hover circle{stroke:#fff;stroke-width:3}
.kg-node text{font-size:12px;fill:var(--ink);pointer-events:none}
.kg-link{stroke:var(--mac-purple);stroke-opacity:.3}
.kg-panel{position:fixed;inset:0;background:rgba(90,74,85,.45);display:flex;align-items:center;justify-content:center;z-index:50}
.kg-detail{background:#fff;border-radius:20px;padding:26px;width:min(460px,92vw);box-shadow:0 20px 60px rgba(0,0,0,.25)}
.meter{height:10px;border-radius:6px;background:var(--line);overflow:hidden;margin:8px 0}
.meter>span{display:block;height:100%;border-radius:6px}

/* ============ 报告 ============ */
.report-tabs{display:flex;gap:8px;margin-bottom:18px;flex-wrap:wrap}
.report-tab{padding:9px 16px;border-radius:12px;font-weight:700;font-size:13px;background:var(--bg);border:1px solid var(--line);color:var(--ink-soft)}
.report-tab.active{background:linear-gradient(135deg,var(--mac-blue),var(--mac-purple));color:#fff}
.stat-row{display:flex;gap:14px;flex-wrap:wrap;margin:14px 0}
.stat{background:var(--bg);border-radius:14px;padding:14px 18px;flex:1;min-width:120px;text-align:center}
.stat .n{font-size:26px;font-weight:800;color:var(--mac-pink)}
.stat .l{font-size:12px;color:var(--ink-soft)}

/* ============ 荣誉殿堂 ============ */
.medal{text-align:center;padding:18px;border-radius:16px;background:var(--bg);box-shadow:var(--shadow-sm)}
.medal .m{font-size:40px}
.medal .mn{font-weight:700;margin-top:6px}
.medal .md{font-size:11px;color:var(--ink-soft);margin-top:4px}
.locked{filter:grayscale(1);opacity:.5}

/* ============ 飘字 ============ */
.toast{
  position:fixed;left:50%;top:80px;transform:translateX(-50%) translateY(-20px);
  background:linear-gradient(135deg,var(--mac-mint),var(--mac-blue));color:#356;
  padding:12px 22px;border-radius:30px;font-weight:800;box-shadow:var(--shadow);
  opacity:0;pointer-events:none;transition:.35s;z-index:99;
}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}

.empty{text-align:center;color:var(--ink-soft);padding:40px;font-size:14px}
.section-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
.pill{background:var(--mac-yellow);color:#9a7b1e;border-radius:20px;padding:4px 12px;font-size:12px;font-weight:700}
.flash{animation:flash .5s}
@keyframes flash{0%{background:var(--mac-mint)}100%{background:var(--panel)}}

/* ============ 题库视图 ============ */
.btn-bank{background:linear-gradient(135deg,var(--mac-purple),var(--mac-blue));color:#fff;border:none;font-weight:700}
.btn-bank:hover{filter:brightness(1.03)}
.bank-filters{display:flex;flex-direction:column;gap:10px;background:var(--bg);border-radius:14px;padding:14px;margin-bottom:14px}
.bank-filter-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.bank-fl{font-size:12px;font-weight:700;color:var(--ink-soft);min-width:64px}
.bank-chip{background:#fff;border:2px solid var(--line);border-radius:20px;padding:6px 13px;font-size:12px;font-weight:700;color:var(--ink);cursor:pointer;transition:.15s}
.bank-chip:hover{border-color:var(--mac-purple)}
.bank-chip.on{background:linear-gradient(135deg,var(--mac-purple),var(--mac-blue));color:#fff;border-color:transparent}
.bank-search{padding:8px 12px;border-radius:10px;border:2px solid var(--line);font-size:13px;outline:none;flex:1;min-width:180px}
.bank-search:focus{border-color:var(--mac-purple)}
.bank-actions{display:flex;align-items:center;gap:12px;margin-bottom:12px}
.bank-count{font-size:12px;color:var(--ink-soft);font-weight:700}
.bank-list{display:flex;flex-direction:column;gap:12px;max-height:54vh;overflow:auto;padding-right:4px}
.bank-item{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:14px}
.bank-item-head{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-bottom:8px}
.tag-cat{background:var(--mac-pink);color:#fff}
.tag-src{background:var(--mac-blue);color:#fff}
.tag-grade{background:var(--mac-yellow);color:#9a7b1e}
.tag-train{background:var(--mac-purple);color:#fff}
.tag-kp{background:var(--mac-mint);color:#2f6b50}
.bank-diff{margin-left:auto;font-size:12px;color:#C99A2E;font-weight:700}
.bank-q{font-size:14px;font-weight:600;line-height:1.6;color:var(--ink)}
.bank-a{margin-top:8px;font-size:13px;line-height:1.7;color:var(--ink-soft);background:var(--bg);border-radius:10px;padding:10px;border:1px solid var(--line)}
.bank-item-foot{margin-top:8px}
.bank-train-row{display:flex;gap:10px;flex-wrap:wrap}
.bank-train-row .btn-bank{flex:1;min-width:120px}

/* 从题库生成练习弹窗 */
.bank-p-item{background:var(--bg);border:1px solid var(--line);border-radius:12px;padding:12px;margin-bottom:10px}
.bank-p-q{font-size:14px;font-weight:600;line-height:1.6;margin-bottom:8px}
.bank-p-a{font-size:13px;line-height:1.7;color:var(--ink-soft);background:#fff;border:1px dashed var(--mac-purple);border-radius:10px;padding:10px;margin-bottom:8px}
.bank-p-judge{display:flex;gap:8px}

/* ============ 思维表达 6 步 · 语音按钮 ============ */
.fl-step-wrap{margin-bottom:10px}
.fl-step-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:12px 0 6px}
.fl-step-head label{margin:0;font-size:13px;font-weight:600;color:var(--ink-soft)}
.btn-mini-voice{background:var(--mac-purple);color:#fff;border:1px solid #fff;border-radius:20px;padding:5px 11px;font-size:12px;font-weight:700;box-shadow:var(--shadow-sm);transition:.15s}
.btn-mini-voice:hover{filter:brightness(1.05)}
.fl-voice.recorded{background:#7FD1A8;color:#fff}
.fl-play{background:#5BC8E0;color:#fff}            /* 回放：青色，与录制的紫色区分 */
.fl-play:hover{filter:brightness(1.05)}
.fl-undo{background:#F2A9B8;color:#5A4A55}          /* 撤回：浅粉，与录制/回放区分 */
.fl-undo:hover{filter:brightness(1.03)}
/* 分步录音「多段累计」列表：每段一行，可单独重听/删除 */
.fl-clips{display:flex;flex-direction:column;gap:6px;margin:6px 0 4px}
.fl-clip-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;
  background:rgba(91,200,224,.08);border:1px solid rgba(91,200,224,.25);border-radius:10px;padding:5px 8px}
.fl-clip-idx{font-size:12px;font-weight:700;color:var(--ink-soft);min-width:64px}
.fl-clip-row .fl-del{background:#FFD3DC;color:#8A3B52}   /* 删除此段：更浅的粉，弱化 */
.fl-clip-row .fl-del:hover{filter:brightness(1.03)}
.btn-mini-voice.recorded{background:#7FD1A8;color:#fff}   /* 已录：绿色 */
.abs-rec.recorded,.sv-rec.recorded{background:#7FD1A8;color:#fff}
/* ---- 录制中：🎙️ 不停闪烁提醒在录，右侧带时间计时 ---- */
.btn-mini-voice.rec-live,
.abs-rec.rec-live,.sv-rec.rec-live,.fl-voice.rec-live,.zp-rec.rec-live{
  background:#F2628A;color:#fff;border-color:#fff;
  box-shadow:0 0 0 3px rgba(242,98,138,.20);
}
.btn-mini-voice.rec-live .rec-ico{
  display:inline-block;margin-right:6px;
  animation:recBlink .8s steps(1,end) infinite;
}
.btn-mini-voice.rec-live .rec-time{
  font-variant-numeric:tabular-nums;letter-spacing:.5px;font-weight:800;
}
@keyframes recBlink{ 0%,49%{opacity:1} 50%,100%{opacity:.10} }

/* ============ 题库模版（下载/批量导入） ============ */
.bank-tpl-bar{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.bank-tpl-bar .btn-bank{background:var(--mac-purple);color:#fff}

/* ============ 概念点选择 / 参考答案 ============ */
.ck-concept{background:#FBF6FF;border:1.5px dashed #D9C2F0;border-radius:12px;padding:12px;margin:10px 0}
.ck-concept > label{display:block;font-weight:700;color:var(--mac-purple);margin-bottom:6px}
.ck-concept select{width:100%;padding:9px 10px;border-radius:10px;border:1.5px solid #E3D2F2;background:#fff;font-size:14px;margin-bottom:8px}
.ck-ref{margin-top:8px;background:#fff;border-radius:10px;padding:10px 12px;border:1px solid #EFE6FA}
.ck-ref-box .ck-ref-row{font-size:13px;line-height:1.7;color:#5b4a63;margin:3px 0}
.ck-ref-box b{color:var(--mac-purple)}

/* ============ 概念完整度批改报告 ============ */
.gd-summary{display:flex;align-items:center;gap:18px;background:#FBF6FF;border-radius:14px;padding:14px 16px;margin:10px 0}
.gd-ring{
  --p:0;flex:0 0 78px;width:78px;height:78px;border-radius:50%;
  background:conic-gradient(var(--mac-purple) calc(var(--p)*1%), #ECE4F7 0);
  display:flex;align-items:center;justify-content:center;font-weight:800;font-size:22px;color:#6b4f8a;position:relative;
}
.gd-ring::after{content:"";position:absolute;width:60px;height:60px;border-radius:50%;background:#FBF6FF}
.gd-ring>span{position:relative;z-index:1;font-size:13px}
.gd-summary-txt{font-size:14px;line-height:1.6;color:#5b4a63}
.gd-list{margin-top:6px}
.gd-row{display:grid;grid-template-columns:96px 92px 1fr;gap:10px;align-items:start;
  padding:9px 0;border-bottom:1px dashed #ECE4F7;font-size:13px}
.gd-label{font-weight:700;color:#5b4a63}
.gd-status{padding:3px 8px;border-radius:20px;font-size:12px;font-weight:700;text-align:center;white-space:nowrap}
.gd-ok{background:#D6F0E2;color:#2e8b57}
.gd-part{background:#FFF1CC;color:#b8860b}
.gd-miss{background:#FBD9D9;color:#c0392b}
.gd-ref{color:#7a6a82;line-height:1.6}
.gd-ref b{color:var(--mac-purple)}

/* ============ 思维表达训练 · 训练完成度面板 ============ */
.gd-mini-row{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px;margin:8px 0}
.gd-mini{background:#fff;border:1.5px solid var(--c,#E3D2F2);border-radius:12px;padding:10px 12px;
  box-shadow:0 2px 6px rgba(0,0,0,.04)}
.gd-mini-l{font-size:12px;color:#7a6a82;font-weight:700}
.gd-mini-v{font-size:32px;font-weight:800;color:var(--c,#E3D2F2);line-height:1.1;margin:4px 0}
.gd-mini-u{font-size:14px;color:var(--ink-soft);margin-left:2px}
.gd-mini-h{font-size:11px;color:var(--ink-soft);line-height:1.4}

.gd-row2{display:flex;flex-direction:column;gap:2px;padding:8px 0;border-bottom:1px dashed #ECE4F7;font-size:13px}
.gd-row2 .gd-label{font-weight:700;color:#5b4a63}
.gd-row2 .gd-txt{color:#7a6a82;line-height:1.5;font-size:12px;padding-left:14px}

.gd-accs{margin:10px 0;background:#FFFAF0;border:1px dashed #FCE3A0;border-radius:12px;padding:10px 12px}
.gd-accs-head{font-weight:800;color:#7a5c2e;margin-bottom:6px;font-size:13px}
.gd-accs-row{display:flex;flex-wrap:wrap;gap:6px}
.gd-pill{padding:3px 9px;border-radius:18px;font-size:12px;font-weight:700;background:#fff;border:1.5px solid #ddd}
.gd-pill.gd-ok{background:#D6F0E2;color:#2e8b57;border-color:#b6e3c5}
.gd-pill.gd-part{background:#FFF1CC;color:#b8860b;border-color:#f3d57b}
.gd-pill.gd-miss{background:#FBD9D9;color:#c0392b;border-color:#f1aaaa}

.gd-prog{background:#F4FAFF;border:1.5px solid #B9DCEF;border-radius:12px;padding:10px 12px;margin:10px 0}
.gd-prog-head{font-weight:800;color:#2e6da4;margin-bottom:6px;font-size:13px}
.gd-prog-row{display:flex;align-items:center;gap:8px;font-size:13px;color:#5b4a63;padding:2px 0}
.gd-prog-row b{font-size:14px}
.gd-prog-d{padding:1px 8px;border-radius:10px;background:#fff;border:1px solid #ddd;font-size:11px;color:var(--ink-soft)}
.gd-prog-first{background:#F4FAFF}

.gd-tips{margin:10px 0}
.gd-tips-head{font-weight:800;color:var(--mac-purple);margin-bottom:6px;font-size:13px}
.gd-tip{padding:7px 10px;border-radius:10px;margin:5px 0;font-size:13px;line-height:1.6;border-left:4px solid #ccc}
.gd-tip-h{background:#FBD9D9;border-left-color:#c0392b;color:#922}
.gd-tip-m{background:#FFF1CC;border-left-color:#b8860b;color:#7a5c2e}
.gd-tip-l{background:#E5F4E5;border-left-color:#2e8b57;color:#225522}

/* ============ 历史：概念完整度 ============ */
.hist-grade{background:#FBF6FF;border:1px solid #E3D2F2;border-radius:10px;padding:8px 10px;margin:6px 0;font-size:13px;color:#6b4f8a}

/* ============ 文本分析 · 标色找数量 / 列式子 ============ */
.ta-intro{margin:6px 0}
.ta-palette{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin:6px 0}
.ta-palette-label{font-size:13px;color:var(--ink-soft)}
.ta-swatch{width:22px;height:22px;border-radius:50%;border:2px solid #fff;box-shadow:0 0 0 1px #ddd;cursor:pointer;padding:0}
.ta-swatch.on{box-shadow:0 0 0 2px var(--mac-pink)}
.ta-problem{position:relative;background:#fff;border:1px solid #eadfef;border-radius:10px;padding:10px 12px;line-height:2.1;font-size:15px;white-space:pre-wrap;word-break:break-word;user-select:text;min-height:48px;color:#333}
.ta-mark{border-radius:4px;padding:1px 2px;cursor:pointer}
.ta-sep{display:inline-block;width:1px;height:16px;background:#e6dcf0;margin:0 4px;vertical-align:middle}
.ta-gran{display:inline-flex;border:1px solid #e3d6ee;border-radius:8px;overflow:hidden}
.ta-granbtn{border:0;background:#faf6ff;font-size:12px;padding:4px 10px;cursor:pointer;color:var(--ink-soft)}
.ta-granbtn+.ta-granbtn{border-left:1px solid #e3d6ee}
.ta-granbtn.on{background:var(--mac-purple);color:#fff;font-weight:700}
.ta-tok{position:relative;border-radius:3px;padding:1px 0;cursor:pointer}
.ta-tok:hover{outline:1px dashed rgba(160,120,200,.55)}
.ta-tok.marked{padding-right:2px}
.ta-tokx{position:absolute;top:-9px;right:-8px;width:14px;height:14px;line-height:14px;text-align:center;border-radius:50%;background:#fff;border:1px solid #cfc0dd;color:#8b6fa8;font-size:11px;font-style:normal;cursor:pointer;z-index:2;box-shadow:0 1px 3px rgba(0,0,0,.12)}
.ta-tokx::after{content:'×'}
.ta-tokx:hover{background:var(--mac-pink);color:#fff;border-color:var(--mac-pink)}
.ta-mchip{display:inline-flex;align-items:center;border:1px solid #eadfef;border-radius:20px;font-size:14px;line-height:1.6;overflow:hidden}
.ta-mchip-t{padding:5px 4px 5px 13px;cursor:pointer;font-weight:400}
.ta-mchip-t:hover{text-decoration:underline}
.ta-mchip-x{padding:2px 9px 2px 5px;font-style:normal;font-size:15px;color:#9a86b3;cursor:pointer}
.ta-mchip-x:hover{color:var(--mac-pink);font-weight:700}
.ta-mchip-op{color:var(--mac-purple);margin-left:3px}
.ta-op{display:inline-block;min-width:8px;font-size:12px;color:var(--mac-purple);border-bottom:2px solid var(--mac-purple);margin:0 1px;cursor:pointer;font-weight:700}
.ta-op::after{content:attr(data-op)}
.ta-opbar{position:fixed;z-index:10000;display:none;gap:4px;align-items:center;background:#fff;border:1px solid var(--mac-purple);border-radius:10px;padding:6px 8px;box-shadow:0 6px 18px rgba(0,0,0,.15)}
.ta-opbar-t{font-size:12px;color:var(--ink-soft);margin-right:4px;white-space:nowrap}
.ta-opbtn{width:30px;height:30px;border:1px solid #e3d6ee;border-radius:8px;background:#faf6ff;font-size:16px;cursor:pointer;padding:0}
.ta-opbtn:hover{background:#efe5fb}
.ta-opbtn-x{width:30px;font-size:14px}
/* 附件行：查看 / 回放入口 */
.attach-ops{display:inline-flex;gap:4px;align-items:center;margin-left:6px}
.attach-item{display:flex;align-items:center;flex-wrap:wrap;gap:2px}
/* 思维表达：每步语音的可见播放器 */
.fl-audio{margin:4px 0 8px}
.fl-audio audio{width:100%;height:32px;border-radius:8px}
.ta-opbar-tip{font-size:12px;color:var(--ink-soft);margin:4px 0}
/* 批改报告里的标准答案块 */
.gd-std{background:#FBF6FF;border:1px solid #E3D2F2;border-radius:12px;padding:10px 12px;margin:10px 0}
.gd-std-head{font-weight:800;color:var(--mac-purple);margin-bottom:4px}
.gd-std-from{font-size:12px;color:var(--ink-soft);margin-bottom:6px}
.gd-std-txt{font-size:14px;line-height:1.7;color:#4a3a5c;white-space:pre-wrap}
.gd-std-sec{font-size:13px;line-height:1.7;color:#4a3a5c;margin:4px 0}
.gd-steps{margin:4px 0 4px 18px;padding:0;font-size:13px;line-height:1.8}
.gd-steps li{margin:1px 0}
.ta-chips{display:flex;flex-wrap:wrap;gap:6px;margin:4px 0 8px}
.ta-chip{width:34px;height:30px;border:1px solid #e3d6ee;border-radius:8px;background:#faf6ff;font-size:16px;cursor:pointer;padding:0}
.ta-chip:hover{background:#efe5fb}
.bank-pick-list{display:flex;flex-direction:column;gap:6px;max-height:60vh;overflow:auto}
.bank-pick-item{text-align:left;padding:8px 10px;border:1px solid #eadfef;border-radius:8px;background:#fff;cursor:pointer;font-size:14px;line-height:1.5}
.bank-pick-item:hover{background:var(--bg)}

/* ============ 936 法则：母题 · 诊断 · 9题3天 ============ */
.bank-tags{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0}
.bank-tags:empty{display:none}
.bank-tags .tag{font-size:11px;padding:2px 8px;border-radius:12px;background:#F3ECFB;color:#7a5c9e}
.diag-row{display:flex;gap:8px;font-size:13px;line-height:1.6;padding:4px 0;border-bottom:1px dashed #eee}
.diag-row:last-child{border-bottom:none}
.diag-row b{flex:0 0 72px;color:var(--ink-soft)}
.diag-row span{flex:1;color:#4a3a5c}
.r9-days{display:flex;flex-direction:column;gap:10px;margin:8px 0}
.r9-day{border:1px solid #eadfef;border-radius:12px;padding:8px 10px;background:#fff}
.r9-day-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:6px}
.r9-day-head b{font-size:14px;color:var(--mac-purple)}
.r9-state{font-size:12px;color:var(--ink-soft)}
.r9-state.ok{color:#3f9d63;font-weight:700}
.r9-q{border-top:1px dashed #f0e8f6;padding:6px 0}
.r9-q:first-of-type{border-top:none}
.r9-qt{font-size:14px;line-height:1.6;margin-bottom:4px;color:#4a3a5c}
.r9-qb{display:flex;align-items:center;gap:4px;flex-wrap:wrap}
.r9-time{font-variant-numeric:tabular-nums;font-weight:800;color:var(--mac-purple);min-width:46px;text-align:center;font-size:13px}
.r9-ans{background:#FBF6FF;border:1px solid #E3D2F2;border-radius:10px;padding:6px 10px;margin-top:4px;font-size:13px;line-height:1.6;color:#4a3a5c}
.btn.on{background:var(--mac-purple);color:#fff;border-color:var(--mac-purple)}

/* ============ 抽象概念 / 提取练习 专用打卡 ============ */
.abs-book{background:#FBF6FF;border:1.5px dashed #D9C2F0;border-radius:12px;padding:10px;margin:6px 0}
.abs-book-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:13px;margin-bottom:6px}
.abs-book-bar label{font-weight:700;color:var(--ink-soft)}
.abs-book-bar select{padding:5px 8px;border-radius:8px;border:1.5px solid #E3D2F2;background:#fff}
.abs-book-meta{flex:1;font-size:12px;color:var(--ink-soft)}
.abs-book-page{font-weight:800;color:var(--mac-purple);min-width:50px;text-align:center}
.abs-book-pageview{min-height:120px;display:flex;align-items:stretch;justify-content:center}
.abs-book-empty{color:#C5B7D9;font-size:13px;padding:24px;text-align:center;width:100%;background:#fff;border-radius:10px;border:1px dashed #E3D2F2}
.abs-book-paper{background:#fff;border:1px solid #E3D2F2;border-radius:10px;padding:14px 16px;width:100%;box-shadow:var(--shadow-sm);line-height:1.7}
.abs-book-paper-head{display:flex;justify-content:space-between;font-size:12px;color:var(--ink-soft);margin-bottom:6px}
.abs-book-paper-title{font-weight:800;font-size:16px;color:var(--mac-purple);margin-bottom:6px}
.abs-book-paper-body{font-size:14px;color:#3b2c4a;white-space:pre-wrap}
.abs-book-paper-ex{margin-top:8px;padding:6px 10px;background:#FFF4F8;border:1px dashed #F7B7C8;border-radius:8px;font-size:13px;color:#7a3850}
.abs-book-pdf{width:100%;height:280px;border:1px solid #E3D2F2;border-radius:8px;margin-top:8px;background:#fafafa}

.abs-ai{background:#FFFAF0;border:1.5px dashed #FCE3A0;border-radius:12px;padding:10px;margin:6px 0}
.abs-ai-tip{font-size:12px;color:var(--ink-soft);margin-left:8px}
.abs-ai-bar{display:flex;align-items:center;gap:8px;margin-top:8px}
.abs-ai-progress{flex:1;height:8px;background:#fff;border:1px solid #FCE3A0;border-radius:6px;overflow:hidden}
.abs-ai-progress-fill{height:100%;width:0;background:linear-gradient(90deg,#FCE3A0,#FBC9A6);transition:width .2s}
.abs-ai-clock{font-weight:800;color:#B07A1F;min-width:36px;text-align:center;font-variant-numeric:tabular-nums}
.abs-ai-hint{background:#fff;border:1px solid #E3D2F2;border-radius:10px;padding:10px 12px;max-height:60vh;overflow:auto;white-space:pre-wrap;font-family:inherit;font-size:13px;line-height:1.7;color:#3b2c4a}

.abs-mm{background:#FBF6FF;border:1.5px dashed #D9C2F0;border-radius:12px;padding:10px;margin:6px 0}
.abs-mm-tabs{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-bottom:8px}
.abs-mm-tab{background:#fff;color:var(--ink-soft);border:1.5px solid #E3D2F2}
.abs-mm-tab.on{background:var(--mac-purple);color:#fff;border-color:var(--mac-purple)}
.abs-mm-pane{background:#fff;border-radius:10px;border:1px solid #E3D2F2;padding:6px}
.abs-mm-svg{width:100%;height:280px;display:block;background:#fff;border-radius:8px;cursor:crosshair;touch-action:none}
.abs-mm-editor-row{display:grid;grid-template-columns:1fr 1fr;gap:8px;min-height:280px}
.abs-mm-src{width:100%;height:280px;border:1px solid #E3D2F2;border-radius:8px;padding:8px;font-family:Menlo,Consolas,monospace;font-size:12px;line-height:1.6;background:#fff;resize:vertical}
.abs-mm-render-wrap{border:1px solid #E3D2F2;border-radius:8px;background:#fff;padding:6px;overflow:auto;max-height:360px}
.abs-mm-render{display:flex;align-items:flex-start;justify-content:center}
.mm-svg{width:100%;max-width:100%;height:auto;display:block}
@media (max-width: 640px){ .abs-mm-editor-row{grid-template-columns:1fr} }
.abs-ref-row{margin-top:6px}
.ck-ref{background:#fff;border:1px solid #E3D2F2;border-radius:8px;padding:8px 10px;margin-top:6px;font-size:13px;line-height:1.7;color:#3b2c4a}
.ck-ref > div{margin:2px 0}

/* ============ 思维导图法之复习巩固 专用打卡 ============ */
.mm-sec{font-weight:800;color:var(--mac-purple);margin:14px 0 6px;font-size:14px;border-left:4px solid var(--mac-pink);padding-left:8px}
.mm-toc{background:#FBF6FF;border:1.5px dashed #D9C2F0;border-radius:12px;padding:10px;margin:6px 0}
.mm-toc-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:13px;margin-bottom:8px}
.mm-toc-bar label{font-weight:700;color:var(--ink-soft)}
.mm-toc-bar select{padding:5px 8px;border-radius:8px;border:1.5px solid #E3D2F2;background:#fff}
.mm-toc-meta{flex:1;font-size:12px;color:var(--ink-soft)}
.mm-toc-list{display:flex;flex-direction:column;gap:6px;max-height:240px;overflow:auto}
.mm-toc-empty{color:#C5B7D9;font-size:13px;padding:16px;text-align:center;background:#fff;border-radius:10px;border:1px dashed #E3D2F2}
.mm-toc-item{background:#fff;border:1.5px solid #E3D2F2;border-radius:10px;padding:8px 10px;cursor:pointer;transition:.15s}
.mm-toc-item:hover{border-color:var(--mac-purple);box-shadow:var(--shadow-sm)}
.mm-toc-item.on{border-color:var(--mac-purple);background:#FBF6FF;box-shadow:var(--shadow-sm)}
.mm-toc-unit{font-weight:700;font-size:14px;color:#4a3a5c;margin-bottom:4px}
.mm-toc-secs{display:flex;flex-wrap:wrap;gap:4px}
.mm-toc-sec{font-size:11px;padding:2px 7px;border-radius:10px;background:#F3ECFB;color:#7a5c9e}
.mm-toc-topic{margin-top:8px;padding:8px 10px;background:#fff;border:1px solid var(--mac-purple);border-radius:10px;font-size:14px;line-height:1.7}
.mm-toc-topic b{color:var(--mac-purple)}
.mm-toc-topicsecs{font-size:12px;color:var(--ink-soft);margin-top:2px}

.mm-kp{background:#FBF6FF;border:1.5px dashed #D9C2F0;border-radius:12px;padding:10px;margin:6px 0}
.mm-kp-input{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-bottom:8px}
.mm-kp-input input{flex:1;min-width:180px;padding:8px 10px;border-radius:10px;border:1.5px solid #E3D2F2;font-size:14px}
.mm-kp-handbox{margin-bottom:8px}
.mm-hand-svg{height:220px}
.mm-kp-handacts{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-top:6px}
.mm-kp-ocrstatus{font-size:12px;color:var(--ink-soft)}
.mm-kp-ocrstatus.ok{color:#3f9d63}
.mm-kp-ocrstatus.warn{color:#c07a1f}
.mm-chips{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0}
.mm-chips:empty{display:none}
.mm-chip{display:inline-flex;align-items:center;gap:4px;background:#fff;border:1.5px solid var(--mac-purple);color:#5a3f78;border-radius:16px;padding:4px 10px;font-size:13px;cursor:pointer;transition:.15s}
.mm-chip:hover{background:var(--mac-purple);color:#fff}
.mm-chip-x{font-weight:800;font-size:13px;opacity:.6}
.mm-chip-x:hover{opacity:1;color:#e05}
.mm-chips-tip{font-size:12px;color:var(--ink-soft);margin:2px 0 6px}

.mm-gap{background:#FFFAF0;border:1.5px dashed #FCE3A0;border-radius:12px;padding:10px;margin:6px 0}
.mm-gap-acts{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:8px}
.mm-gap-tip{font-size:12px;color:var(--ink-soft);flex:1;min-width:160px;line-height:1.5}

/* ============ 手动编排导图（知识点 / 分类 / 查漏补缺摘选） ============ */
.mm-arr{background:#FBF6FF;border:1.5px dashed #D9C2F0;border-radius:12px;padding:10px;margin:6px 0}
.mm-arr-bar{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-bottom:8px}
.mm-arr-stat{font-size:12px;color:var(--ink-soft);flex:1;min-width:150px;text-align:right}
.mm-paste{background:#fff;border:1px solid #E3D2F2;border-radius:10px;padding:8px;margin-bottom:8px}
.mm-paste-acts{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-top:6px}
.mm-paste-tip{font-size:12px;color:var(--ink-soft)}
.mm-paste-picks{display:flex;flex-direction:column;gap:4px;max-height:180px;overflow:auto;margin:6px 0;padding:6px;background:#FBF6FF;border-radius:8px}
.mm-pick{display:flex;gap:6px;align-items:flex-start;font-size:13px;color:#3b2c4a;line-height:1.5;cursor:pointer}
.mm-pick input{margin-top:3px}
.mm-pool-filter{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:8px}
.mm-pf{font-size:12px;padding:3px 10px;border-radius:12px;border:1.5px solid #E3D2F2;background:#fff;color:var(--ink-soft);cursor:pointer;user-select:none}
.mm-pf.on{border-color:var(--mac-purple);background:var(--mac-purple);color:#fff}
.mm-branches{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:8px}
.mm-branch{background:#fff;border:1.5px solid #E3D2F2;border-radius:10px;padding:8px}
.mm-branch-head{display:flex;align-items:center;gap:4px;margin-bottom:6px}
.mm-branch-name{flex:1;min-width:80px;padding:4px 8px;border-radius:8px;border:1.5px solid #E3D2F2;font-size:13px;font-weight:700;color:#4a3a5c}
.mm-branch-count{font-size:12px;color:var(--ink-soft);min-width:20px;text-align:center}
.mm-branch-items{min-height:56px;border:1px dashed #EDE4F6;border-radius:8px;padding:6px;display:flex;flex-wrap:wrap;gap:6px;align-content:flex-start}
.mm-branch-items.over{border-color:var(--mac-purple);background:#FBF6FF}
.mm-branch-empty{font-size:12px;color:#C5B7D9;padding:8px}
.mm-un-wrap{margin-top:8px}
.mm-un-title{font-size:12px;color:var(--ink-soft);margin-bottom:4px}
.mm-un{min-height:56px;border:1px dashed #E3D2F2;border-radius:8px;padding:6px;background:#fff;display:flex;flex-wrap:wrap;gap:6px;align-content:flex-start}
.mm-un.over{border-color:var(--mac-purple);background:#FBF6FF}
.mm-pchip{display:inline-flex;align-items:center;gap:4px;background:#fff;border:1.5px solid #E3D2F2;border-radius:16px;padding:3px 8px;font-size:13px;cursor:grab;transition:.15s;max-width:100%}
.mm-pchip:hover{border-color:var(--mac-purple);box-shadow:var(--shadow-sm)}
.mm-pchip.dragging{opacity:.5}
.mm-pchip .mm-dot{width:8px;height:8px;border-radius:50%;background:#C5B7D9;flex:none}
.mm-pchip.mm-src-kp .mm-dot{background:#A7D8F0}
.mm-pchip.mm-src-cat .mm-dot{background:#B8E6CF}
.mm-pchip.mm-src-gap .mm-dot{background:#FBC9A6}
.mm-pchip .mm-k-sel{border:1px solid #E3D2F2;border-radius:10px;font-size:11px;padding:1px 2px;background:#FBF6FF;color:#5a3f78;max-width:96px}
.mm-pchip .mm-pchip-x{font-weight:800;font-size:13px;opacity:.55}
.mm-pchip .mm-pchip-x:hover{opacity:1;color:#e05}

/* ============ 原版教材页 · 维护 / 导入导出 ============ */
.abs-book-bar label{font-weight:700;color:var(--ink-soft)}
.abs-book-bar select{padding:4px 8px;border-radius:8px;border:1.5px solid #E3D2F2;background:#fff;font-size:13px}
.abs-book-img{width:100%;border-radius:8px;border:1px solid #E3D2F2;margin-top:8px;display:block}
.book-edit-unit{font-size:14px;margin-bottom:6px}
.book-edit-unit b{color:var(--mac-purple)}
.book-edit-tip{font-size:12px;color:var(--ink-soft);line-height:1.6;background:#fff;border:1px dashed #E3D2F2;border-radius:8px;padding:6px 8px;margin-bottom:8px}
.book-edit-tip code{background:#F3ECFB;padding:1px 4px;border-radius:4px}
.book-edit-list{max-height:200px;overflow:auto;background:#fff;border:1px solid #E3D2F2;border-radius:8px;padding:6px;margin-bottom:8px}
.be-item{display:flex;align-items:center;gap:6px;padding:4px 2px;border-bottom:1px dashed #F0E6F8;font-size:13px}
.be-item:last-child{border-bottom:none}
.be-item-page{font-weight:800;color:var(--mac-purple);min-width:52px}
.be-item-title{flex:1;color:#3b2c4a;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.be-item-flags{font-size:12px}
.be-empty{color:#C5B7D9;font-size:13px;text-align:center;padding:14px}
.book-edit-form{background:#FBF6FF;border:1.5px dashed #D9C2F0;border-radius:12px;padding:10px}
.be-row{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin:6px 0}
.be-row label{font-weight:700;color:var(--ink-soft);font-size:13px}
.be-row input{flex:1;min-width:140px;padding:6px 8px;border-radius:8px;border:1.5px solid #E3D2F2;font-size:13px}
.be-img-status{font-size:12px;color:var(--ink-soft)}
.be-actions{display:flex;gap:8px;justify-content:flex-end;margin-top:8px}
.book-io-acts{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-bottom:8px}
.book-io-stat{font-size:12px;color:var(--ink-soft);flex:1;text-align:right}

/* ============ 归纳总结清单 · 专用打卡 ============ */
.sm-sec{font-weight:800;color:var(--mac-purple);margin:14px 0 6px;font-size:14px;border-left:4px solid var(--mac-pink);padding-left:8px}
.sm-tags{background:#FBF6FF;border:1.5px dashed #D9C2F0;border-radius:12px;padding:10px;margin:6px 0}
.sm-tg{display:flex;gap:8px;align-items:flex-start;margin:6px 0}
.sm-tg-name{flex:none;font-weight:800;font-size:12px;color:#4a3a5c;border-radius:8px;padding:3px 10px;margin-top:2px}
.sm-tg-tags{display:flex;flex-wrap:wrap;gap:6px}
.sm-tag{background:#fff;border:1.5px solid #E3D2F2;color:#5a3f78;border-radius:16px;padding:3px 10px;font-size:13px;cursor:pointer;transition:.15s}
.sm-tag:hover{border-color:var(--mac-purple)}
.sm-tag.on{background:var(--mac-purple);color:#fff;border-color:var(--mac-purple)}
.sm-tag-add{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin:6px 0}
.sm-tag-add input{flex:1;min-width:180px;padding:7px 10px;border-radius:10px;border:1.5px solid #E3D2F2;font-size:13px}
.sm-tag-stat{font-size:12px;color:var(--ink-soft)}
.sm-tag-chosen{display:flex;flex-wrap:wrap;gap:6px;margin:4px 0 2px}
.sm-tag-hint{font-size:12px;color:#C5B7D9}
.sm-chip{display:inline-flex;align-items:center;gap:4px;background:#fff;border:1.5px solid var(--mac-purple);color:#5a3f78;border-radius:16px;padding:4px 10px;font-size:13px}
.sm-chip-x{font-weight:800;font-size:13px;opacity:.55;cursor:pointer}
.sm-chip-x:hover{opacity:1;color:#e05}

.sm-pick-bar{display:flex;align-items:center;gap:6px;flex-wrap:wrap;font-size:12px;margin:6px 0}
.sm-pick-label{font-weight:700;color:var(--ink-soft)}
.sm-picktab{background:#fff;border:1.5px solid #E3D2F2;color:var(--ink-soft);border-radius:14px;padding:3px 12px;font-size:12px;cursor:pointer}
.sm-picktab.on{background:var(--mac-purple);color:#fff;border-color:var(--mac-purple)}
.sm-stuck-tabs{display:inline-flex;flex-wrap:wrap;gap:4px}
.sm-stuck-tab{background:#fff;border:1.5px solid #E3D2F2;color:var(--ink-soft);border-radius:12px;padding:2px 9px;font-size:12px;cursor:pointer}
.sm-stuck-tab.on{background:var(--mac-pink);color:#fff;border-color:var(--mac-pink)}
.sm-tok{cursor:pointer}
.sm-tok:hover{background:#FCE3A0}
.sm-tok.used{background:#B8E6CF}
.sm-tok-sel{background:#FBC9A6;outline:1.5px solid var(--mac-purple);outline-offset:-1px;border-radius:4px;font-weight:700}
.sm-tok-sel:hover{background:#F8B58F}

.sm-steps{display:flex;flex-direction:column;gap:6px;margin:4px 0}
.sm-step-row{display:flex;align-items:center;gap:6px}
.sm-step-no{flex:none;font-weight:800;font-size:12px;color:var(--mac-purple);background:#F3ECFB;border-radius:8px;padding:3px 8px}
.sm-step-name{flex:1;padding:6px 9px;border-radius:9px;border:1.5px solid #E3D2F2;font-size:13px}
.sm-step-del{flex:none}
.sm-steps-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:6px 0}
.sm-steps-tip{font-size:12px;color:var(--ink-soft)}

.sm-ans-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:4px 0 6px}
.sm-ans-tip{font-size:12px;color:var(--ink-soft)}

.sm-stuck{display:flex;flex-direction:column;gap:6px;padding:8px 4px 10px;border-top:2px solid #EDE4F6;border-bottom:2px solid #EDE4F6;background:#FBF6FF}
.sm-stuck-head{display:grid;grid-template-columns:1fr 200px 28px;gap:8px;font-size:12px;font-weight:800;color:var(--mac-purple);padding:0 4px}
.sm-stuck-hcol{background:transparent}
.sm-stuck-hact{background:transparent}
.sm-stuck-body{display:flex;flex-direction:column;gap:6px}
.sm-stuck-row{display:grid;grid-template-columns:1fr 200px 28px;gap:8px;align-items:stretch;background:#fff;border:1.5px solid #E3D2F2;border-radius:10px;padding:6px;transition:border-color .15s,background-color .15s}
.sm-stuck-row.has-data{border-color:var(--mac-pink);background:#FFF6F9;box-shadow:var(--shadow-sm)}
.sm-stuck-row:focus-within{border-color:var(--mac-purple)}
.sm-stuck-quote{width:100%;padding:5px 8px;border-radius:8px;border:1px solid #E3D2F2;font-size:13px;resize:vertical;font-family:inherit;background:#fff;color:#4a3a5c;min-height:42px;line-height:1.5}
.sm-stuck-reason{padding:5px 6px;border-radius:8px;border:1px solid #E3D2F2;font-size:12px;background:#fff;color:#4a3a5c;align-self:start;margin-top:2px}
.sm-stuck-del{padding:2px 6px;font-size:14px;border:none;background:transparent;color:var(--ink-soft);cursor:pointer;border-radius:6px;align-self:start;margin-top:2px}
.sm-stuck-del:hover{background:#FBE5EE;color:#c0392b}
.sm-stuck-add{align-self:flex-start;margin-top:6px}
.sm-stuck-empty{padding:14px;color:var(--ink-soft);font-size:12px;text-align:center;background:#fff;border:1.5px dashed #E3D2F2;border-radius:10px}

.sm-cause{background:#FFFAF0;border:1.5px dashed #FCE3A0;border-radius:12px;padding:10px;margin:6px 0}
.sm-cause-hint{font-size:12px;color:#C5A97A}
.sm-cause-row,.sm-stuck-cause-row{display:flex;align-items:center;gap:8px;margin:5px 0;font-size:13px}
.sm-cause-k{flex:0 0 110px;color:#7a5c2e;font-weight:700}
.sm-cause-bar{flex:1;height:12px;background:#fff;border:1px solid #FCE3A0;border-radius:7px;overflow:hidden}
.sm-cause-bar i{display:block;height:100%;background:linear-gradient(90deg,#FCE3A0,#FBC9A6)}
.sm-cause-n{flex:0 0 44px;text-align:right;font-size:12px;color:var(--ink-soft)}
.sm-cause-total{font-size:12px;color:var(--ink-soft);text-align:right;margin-top:4px}

.sm-ai-bar{display:flex;gap:6px;flex-wrap:wrap;margin:2px 0 6px}
.pm-paste{margin-top:8px;background:#FBF6FF;border:1.5px dashed #D9C2F0;border-radius:10px;padding:8px}
.pm-paste label{font-size:12px;color:var(--ink-soft);display:block;margin-bottom:4px}
.pm-paste textarea{width:100%;padding:6px 8px;border-radius:8px;border:1.5px solid #E3D2F2;font-size:13px;font-family:inherit}

.hist-sum-tags{font-size:12px;color:#5a3f78;margin:4px 0}
.hist-sum-steps{font-size:13px;margin:4px 0}
.hist-sum-steps ol{margin:2px 0 2px 20px;padding:0}
.hist-sum-stucks{font-size:13px;margin:4px 0;background:#FFF6F9;border:1px dashed #F7B7C8;border-radius:8px;padding:6px 8px}
.hist-sum-stuck{margin:2px 0;line-height:1.6}
.hist-quote{background:#FCE3A0;border-radius:4px;padding:0 4px}
.hist-reason{color:#c0392b;font-weight:700}
.sm-tok-p{color:#B9AEC7}

/* ============ 最近发展区检查法（ZPD）专用打卡 ============ */
.zp-tg{display:flex;gap:8px;align-items:flex-start;margin:6px 0}
.zp-tg-name{flex:none;font-weight:800;font-size:12px;color:#3d5566;background:#DCEFFA;border-radius:8px;padding:3px 10px;margin-top:2px}
.zp-tg-tags{display:flex;flex-wrap:wrap;gap:6px}
.zp-tag{display:inline-flex;align-items:center;gap:5px;background:#fff;border:1.5px solid #BFE0F2;color:#37627c;border-radius:16px;padding:3px 10px;font-size:13px;cursor:pointer;transition:.15s}
.zp-tag:hover{border-color:#5BA8CF}
.zp-tag.on{background:#5BA8CF;color:#fff;border-color:#5BA8CF}
.zp-tag.on .zp-tag-m{background:#fff;color:#3d5566}
.zp-tag-m{font-style:normal;font-size:10px;font-weight:800;background:#EAF6FC;color:#7fa6bb;border-radius:8px;padding:0 5px;line-height:15px}
.zp-tag-bar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:6px 0}
.zp-from{margin:4px 0 2px;font-size:12px;color:#37627c;background:#F0F8FC;border:1px dashed #BFE0F2;border-radius:8px;padding:5px 8px}
.zp-answer{min-height:180px;font-size:14px;line-height:1.7}
.zp-recall{margin:4px 0 2px}
.zp-recall-bar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:2px 0 6px}
.zp-recall-tip{font-size:12px;color:var(--ink-soft);line-height:1.5;flex:1;min-width:200px}
.zp-rec-list{margin-top:4px}
.zp-rec-row .zp-rec-short{color:#c0392b;font-weight:700}
.zp-row2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
@media (max-width:640px){ .zp-row2{grid-template-columns:1fr} }

/* 查漏补缺 · 信息收集 */
.gap-col{display:flex;align-items:center;gap:10px;padding:7px 10px;margin:6px 0;background:#F0F8FC;border:1px dashed #BFE0F2;border-radius:10px;font-size:13px}
.gap-col-kp{font-weight:800;color:#37627c;flex:none}
.gap-col-d{flex:1;color:var(--ink-soft);font-size:12px}

/* ============================================================
   走题训练（🚶）：限时闹钟 · 错题重学 · 四同题卡片
   ============================================================ */
.wt-timer{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:4px 0 8px}
.wt-timer-btns{display:flex;gap:8px;flex-wrap:wrap}
.wt-tbtn{background:#fff;border:1.5px solid #BFE0F2;color:#37627c;border-radius:18px;padding:5px 14px;font-size:13px;font-weight:700;cursor:pointer;transition:.15s}
.wt-tbtn:hover{border-color:#5BA8CF;background:#F0F8FC}
.wt-tbtn.on{background:var(--mac-pink);border-color:var(--mac-pink);color:#fff}
.wt-cd{margin-left:auto;font-size:20px;font-weight:900;font-variant-numeric:tabular-nums;color:#9aa8b3;background:#F6F8FA;border-radius:12px;padding:5px 14px;letter-spacing:.5px}
.wt-cd.on{color:var(--mac-pink);background:#FFF0F4}
.wt-cd.over{color:#c0392b;background:#FDEDEC;animation:recBlink 1s steps(1,end) infinite}

.wt-redo{max-height:190px;overflow:auto;border:1px dashed #BFE0F2;border-radius:10px;padding:6px 8px;background:#FBFDFF}
.wt-redo-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:6px 4px;border-bottom:1px dashed #E3EFF6}
.wt-redo-row:last-child{border-bottom:none}
.wt-redo-l{display:flex;align-items:center;gap:6px;flex-wrap:wrap;flex:1;min-width:220px;font-size:13px}
.wt-redo-e{font-size:12px;color:#8a97a3}
.wt-redo-s{font-size:11px;font-weight:800;border-radius:10px;padding:1px 8px;background:#EEF2F5;color:#8a97a3}
.wt-redo-s.ing{background:#FFF4E0;color:#c07a1e}
.wt-redo-s.ok{background:#E6F7EF;color:#2e8b62}
.wt-redo-r{display:flex;gap:6px;flex-wrap:wrap}

.wt-gen-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:4px 0 6px}
.wt-gen-l{font-size:13px;font-weight:700;color:var(--ink-soft)}
.wt-gen-bar input[type=range]{width:170px}
.wt-qnv{font-weight:900;color:var(--mac-pink);min-width:44px}
.wt-same-note{font-size:12px;color:#37627c;background:#F0F8FC;border-radius:8px;padding:5px 9px;margin-bottom:6px}
.wt-same-note:empty{display:none}

.wt-qlist{display:flex;flex-direction:column;gap:12px;margin:6px 0 4px}
.wt-empty{font-size:12px;color:#9aa8b3;background:#F6F8FA;border-radius:10px;padding:14px;text-align:center}
.wt-q{border:1.5px solid #DCE9F1;border-radius:14px;padding:10px 12px;background:#fff}
.wt-q-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:6px}
.wt-q-no{font-weight:900;color:var(--mac-blue);font-size:14px}
.wt-q-tags{display:flex;gap:5px;flex-wrap:wrap;flex:1}
.wt-q-del{margin-left:auto}
.wt-q textarea{width:100%;font-size:13.5px}
.wt-q .fl-step-wrap{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:6px}
.wt-ans-bar{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
.wt-ans{margin-top:6px;padding:8px 10px;background:#FBFDFF;border:1px dashed #BFE0F2;border-radius:10px}
.wt-ans label{font-size:12px;font-weight:800;color:#37627c;margin-top:4px}
.wt-check{margin-top:8px;padding:8px 10px;background:#FFFBF2;border:1px dashed #F3D9A4;border-radius:10px}
.wt-check-t{font-size:12px;font-weight:800;color:#a3762a;margin-bottom:4px}
.wt-check textarea{width:100%;font-size:13px}

@media (max-width:640px){
  .wt-cd{margin-left:0}
  .wt-gen-bar input[type=range]{width:120px}
}

/* ============================================================
   走题训练 · 卡点错因多选 + 题数下拉
   ============================================================ */
.wt-stucks{display:flex;flex-wrap:wrap;gap:6px;margin:4px 0 2px}
.wt-qnsel{padding:5px 10px;border:1.5px solid #BFE0F2;border-radius:10px;font-size:13px;font-weight:700;color:#37627c;background:#fff;cursor:pointer}
.wt-qnsel:focus{outline:none;border-color:#5BA8CF;box-shadow:0 0 0 3px rgba(91,168,207,.15)}

/* ============================================================
   阶梯计算训练 · 累计/连续统计 + 练习方式 + 用时
   ============================================================ */
.ladder-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:6px 0 10px}
.ladder-stat{background:#fff;border:1.5px solid #DCE9F1;border-radius:12px;padding:8px 6px;text-align:center}
.ladder-n{font-size:20px;font-weight:900;color:var(--mac-blue);font-variant-numeric:tabular-nums;line-height:1.2}
.ladder-n .ladder-u{font-size:11px;font-weight:700;color:#9aa8b3;margin-left:1px}
.ladder-l{font-size:11px;color:var(--ink-soft);margin-top:2px}
.ladder-hint{grid-column:1 / -1;font-size:12px;color:#8a97a3;text-align:right}
.ladder-time{margin:6px 0 2px;font-size:13px;font-weight:800;color:#9aa8b3;background:#F6F8FA;border-radius:10px;padding:6px 10px;font-variant-numeric:tabular-nums}
.ladder-time.on{color:#2e8b62;background:#E9F7F0}
@media (max-width:640px){ .ladder-stats{grid-template-columns:repeat(2,1fr)} }

/* ============================================================
   生成练习题 · 自动计时条
   ============================================================ */
.gen-timer-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;background:#FBFDFF;border:1px dashed #BFE0F2;border-radius:10px;padding:6px 10px;margin:6px 0}
.gen-timer{font-size:16px;font-weight:900;color:#9aa8b3;font-variant-numeric:tabular-nums;min-width:150px}
.gen-timer.on{color:var(--mac-pink)}
.gen-timer.done{color:#2e8b62}
.gen-timer-tip{font-size:11px;color:var(--ink-soft)}

/* ============================================================
   思维导图法 · 分类结果（脑图 / 大纲 / 文本）
   ============================================================ */
.mmcat{border:1.5px solid #DCE9F1;border-radius:14px;padding:10px 12px;background:#FBFDFF;margin:4px 0 8px}
.mmcat-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:6px}
.mmcat-seg{display:inline-flex;gap:0;border:1.5px solid #BFE0F2;border-radius:16px;overflow:hidden;background:#fff}
.mmcat-m,.mmcat-d{padding:5px 12px;font-size:12.5px;font-weight:700;color:#37627c;cursor:pointer;user-select:none;transition:.15s}
.mmcat-m:hover,.mmcat-d:hover{background:#F0F8FC}
.mmcat-m.on,.mmcat-d.on{background:var(--mac-pink);color:#fff}
.mmcat-stat{margin-left:auto;font-size:12px;color:#8a97a3}
.mmcat-tip{font-size:11.5px;color:#8a97a3;margin-bottom:6px}
.mmcat-tip b{color:#37627c}
.mmcat-stage{position:relative;width:100%;min-height:220px;overflow:auto;background:
  linear-gradient(#fff,#fff) padding-box, #fff;
  border:1px dashed #E3EFF6;border-radius:12px}
.mmcat-links{position:absolute;left:0;top:0;pointer-events:none}
.mmcat-nodes{position:relative;width:100%;height:100%}
.mmcat-n{position:absolute;display:flex;align-items:center;justify-content:center;text-align:center;
  border-radius:12px;padding:6px 10px;box-sizing:border-box;font-size:13px;line-height:1.45;
  word-break:break-word;white-space:pre-wrap;cursor:default;transition:.15s;border:1.5px solid #DCE9F1;background:#fff}
.mmcat-n:hover{box-shadow:0 3px 10px rgba(120,150,180,.18)}
.mmcat-root{background:var(--mac-pink);color:#fff;border-color:var(--mac-pink);font-weight:900;font-size:15px;box-shadow:0 3px 12px rgba(255,135,171,.35)}
.mmcat-b{background:#EAF6FC;border-color:#5BA8CF;color:#245a75;font-weight:800}
.mmcat-l{background:#fff;border-color:#DCE9F1;color:var(--ink)}
.mmcat-txt{max-width:100%}
.mmcat-add,.mmcat-del{position:absolute;top:-8px;width:18px;height:18px;line-height:16px;text-align:center;
  border-radius:50%;font-size:13px;font-weight:900;cursor:pointer;opacity:0;transition:.15s}
.mmcat-add{right:-8px;background:#5BA8CF;color:#fff}
.mmcat-del{left:-8px;background:#F48FB1;color:#fff}
.mmcat-n:hover .mmcat-add,.mmcat-n:hover .mmcat-del{opacity:1}
.mmcat-empty{padding:34px 12px;text-align:center;color:#9aa8b3;font-size:12.5px}
.mmcat-outline{width:100%;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:13px;line-height:1.7}
.mmcat-freetext{width:100%;min-height:190px;position:relative}

/* ============================================================
   考试诊断（📝）：科目/类型/年级学期 · 照片框选 · 倒钉子分析
   ============================================================ */
.ex-row1{display:flex;gap:14px;flex-wrap:wrap;align-items:flex-end;background:#FBFDFF;border:1.5px solid #DCE9F1;border-radius:14px;padding:10px 12px;margin:8px 0 12px}
.ex-f{display:flex;flex-direction:column;gap:5px}
.ex-f label{font-size:12px;font-weight:800;color:var(--ink-soft)}
.ex-f-sub label{color:var(--mac-pink)}
.ex-f select{padding:7px 10px;border-radius:10px;border:2px solid var(--line);font-size:13.5px;font-weight:700;background:#fff;min-width:110px}
.ex-seg{display:inline-flex;border:1.5px solid #BFE0F2;border-radius:18px;overflow:hidden;background:#fff}
.ex-seg-i{padding:6px 14px;font-size:13px;font-weight:700;color:#37627c;cursor:pointer;user-select:none;transition:.15s}
.ex-seg-i:hover{background:#F0F8FC}
.ex-seg-i.on{background:var(--mac-pink);color:#fff}
.ex-state{font-size:12px;font-weight:900;border-radius:12px;padding:3px 10px;margin-left:8px;vertical-align:middle}
.ex-state-ok,.ms-state-ok{background:#E6F7EF;color:#2e8b62;border:1.5px solid #7FD1A8}
.ex-state-bad,.ms-state-bad{background:#FDEFF3;color:#c0392b;border:1.5px solid #F48FB1}

.ex-mhead{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:8px}
.ex-mhead-tip{font-size:12px;color:#8a97a3}
.ex-save-row{display:flex;gap:10px;margin-top:12px}
.ex-save-row .btn{flex:1}

.ex-shot{position:relative;display:inline-block;max-width:100%;user-select:none}
.ex-shot img{display:block;max-width:100%;border-radius:10px}
.ex-crop-box{position:absolute;border:2px dashed var(--mac-pink);background:rgba(255,135,171,.14);pointer-events:none;border-radius:4px}
.ex-crop-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:8px}
.ex-crop-tip{font-size:12px;color:#8a97a3}
.ex-crop-info{font-size:12px;color:#37627c;margin-top:4px}

/* ---------- 错题卡（每题独立编号 / 填写 / AI 分析） ---------- */
.ms-card{border:1.5px solid #DCE9F1;border-radius:14px;padding:10px 12px;margin-bottom:10px;background:#fff}
.ms-card.ms-ok{background:#F1FAF5;border-color:#A8E0C4}
.ms-card.ms-bad{background:#FFF6F8;border-color:#F7C5D4}
.ms-mini{padding:8px 10px}
.ms-head{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin-bottom:6px}
.ms-no{font-weight:900;color:var(--mac-blue);font-size:14px}
.ms-kptag{font-size:11.5px;font-weight:800;background:#EAF6FC;color:#245a75;border-radius:10px;padding:2px 9px}
.ms-meta-tag{font-size:11.5px;color:#8a97a3;background:#F6F8FA;border-radius:8px;padding:2px 7px}
.ms-freq{margin-left:auto;font-size:11.5px;font-weight:900;color:#c0392b;background:#FDEFF3;border-radius:10px;padding:2px 9px}
.ms-del{margin-left:6px;background:none;border:none;cursor:pointer;font-size:14px;opacity:.6}
.ms-del:hover{opacity:1}
.ms-card label{display:block;font-size:12px;font-weight:800;color:var(--ink-soft);margin:6px 0 3px}
.ms-card textarea{width:100%;border:2px solid var(--line);border-radius:10px;padding:7px 9px;font-size:13.5px;line-height:1.55;resize:vertical}
.ms-nail-top{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.ms-meta{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin:8px 0 4px}
.ms-meta-l{font-size:12px;font-weight:800;color:var(--ink-soft)}
.ms-meta select{padding:5px 8px;border-radius:9px;border:1.5px solid #BFE0F2;font-size:13px;background:#fff}

/* 倒钉子：左上原题 / 右上标准答案 / 下方通栏对比分析 */
.ms-nail{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:8px}
.ms-nail-l,.ms-nail-r,.ms-nail-d{border-radius:12px;padding:8px 10px;background:#fff;border:1.5px dashed #E3EFF6}
.ms-nail-r{background:#F4FCF8;border-color:#BFE6D3}
.ms-nail-d{grid-column:1 / -1;background:#FFFBF2;border-color:#F3D9A4}
.ms-nail-t{font-size:12px;font-weight:900;color:#37627c;margin-bottom:5px}
.ms-nail-d .ms-nail-t{color:#a3762a}
.ms-nail-b{font-size:13px;line-height:1.65;white-space:pre-wrap;word-break:break-word}
.ms-nail-stem{font-weight:700;margin-bottom:5px}
.ms-nail-crop{font-size:11.5px;color:#8a97a3;margin-bottom:4px}
.ms-nail-mine{margin-top:5px;font-size:12.5px;color:#a04a68;background:#FDEFF3;border-radius:8px;padding:5px 8px}
.ms-nail-cmp{white-space:pre-wrap}
.ms-nail-stemimg .ms-shot-img{width:100%;border-radius:6px;display:block}
.ms-nail-top{grid-template-columns:1fr}

.ms-notes{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:8px;padding-top:7px;border-top:1px dashed #E3EFF6}
.ms-notes-t{font-size:12px;font-weight:900;color:#a3762a}
.ms-notes-list{display:flex;gap:6px;flex-wrap:wrap;flex:1}
.ms-note{font-size:12px;background:#FFF4E0;color:#8a5a10;border:1px solid #F3D9A4;border-radius:10px;padding:3px 9px}
.ms-note-x{margin-left:5px;cursor:pointer;color:#c0392b}
.ms-notes-empty{font-size:11.5px;color:#9aa8b3}

/* ---------- 检索条 ---------- */
.ms-filters{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin:6px 0}
.ms-filters select,.ms-filters input{padding:6px 9px;border-radius:10px;border:1.5px solid #BFE0F2;font-size:13px;background:#fff}
.mf-only{font-size:12.5px;color:var(--ink-soft);display:inline-flex;align-items:center;gap:4px}
.mf-stat{font-size:12.5px;color:var(--ink-soft);margin-bottom:6px}
.ms-stem-mini{font-size:13px;color:var(--ink);background:#F6F8FA;border-radius:8px;padding:6px 9px;margin:4px 0}
.ms-log{display:flex;align-items:center;gap:6px;flex-wrap:wrap;font-size:11.5px;margin:4px 0}
.ms-log-t{color:#8a97a3}
.ms-log-i{border-radius:8px;padding:1px 7px;font-weight:700}
.lg-ok{background:#E6F7EF;color:#2e8b62}
.lg-bad{background:#FDEFF3;color:#c0392b}
.ms-acts{display:flex;gap:7px;flex-wrap:wrap;margin-top:6px}

/* ---------- 重做弹窗 ---------- */
.rd-stem{font-size:14px;line-height:1.7;background:#FBFDFF;border:1.5px dashed #BFE0F2;border-radius:12px;padding:10px 12px;margin:8px 0}
.rd-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:8px 0}
.rd-tip{font-size:12.5px;color:var(--ink-soft)}
.rd-peek{margin:6px 0;padding:8px 10px;background:#FFFBF2;border:1px dashed #F3D9A4;border-radius:12px}
.rd-peek-t{font-size:12px;font-weight:900;color:#a3762a;margin-top:4px}
.rd-peek-b{font-size:13px;line-height:1.6;white-space:pre-wrap}

/* ---------- 易错点数据库 ---------- */
.en-tip{font-size:12px;font-weight:600;color:#8a97a3;margin-left:8px}
.en-group{margin-bottom:12px}
.en-g-h{font-size:13px;font-weight:900;color:#37627c;background:#F0F8FC;border-radius:10px;padding:5px 10px;margin-bottom:6px}
.en-kp{border:1.5px solid #E3EFF6;border-radius:12px;padding:7px 10px;margin-bottom:6px;background:#fff}
.en-kp-h{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.en-cnt{font-size:11.5px;color:#8a97a3}
.en-notes{display:flex;gap:6px;flex-wrap:wrap;margin:5px 0}
.en-note{font-size:12px;background:#FFF4E0;color:#8a5a10;border:1px solid #F3D9A4;border-radius:10px;padding:2px 9px}
.en-miss{margin-top:6px;border-top:1px dashed #E3EFF6;padding-top:6px}
.en-miss-row{display:flex;align-items:center;gap:7px;flex-wrap:wrap;padding:5px 7px;border-radius:9px;margin-bottom:4px}
.en-miss-no{font-weight:800;font-size:12.5px;color:var(--mac-blue)}
.en-miss-s{font-size:12.5px;color:var(--ink-soft);flex:1;min-width:120px}

@media (max-width:640px){
  .ms-nail,.ms-nail-top{grid-template-columns:1fr}
}

/* ============================================================
   考试诊断 · 原卷框选摘抄（题干去痕 / 原版错题摘抄原样）
   ============================================================ */
.ms-lab-tip{font-size:11px;font-weight:600;color:#8a97a3;margin-left:6px}
.ms-shotwrap{display:flex;flex-direction:column;align-items:flex-start;gap:4px;margin:6px 0 2px}
.ms-shot-t{font-size:11px;color:#8a97a3}
.ms-shot{border:1.5px solid #DCE9F1;border-radius:10px;overflow:hidden;background:#fff;max-width:100%;box-shadow:0 1px 4px rgba(120,150,180,.10)}
.ms-shot-img{display:block;background-repeat:no-repeat}
.ms-mine{min-height:160px;line-height:1.7;font-size:14px}
.ms-std{min-height:160px;line-height:1.7;font-size:14px}
.ms-stem{min-height:60px;line-height:1.65;font-size:14px}
/* ---------- 题干富文本：文字与图片混排（图可插在文字前 / 中间 / 后面） ---------- */
.ms-stem-rich{ padding:8px 10px; border:1.5px solid var(--line); border-radius:10px; background:#fff; outline:none; overflow-wrap:break-word; word-break:break-word; }
.ms-stem-rich:focus{ border-color:#7EC8F0; box-shadow:0 0 0 3px rgba(126,200,240,.18); }
.ms-stem-rich:empty:before{ content:attr(data-ph); color:#b6c2cc; }
.ms-stem-rich img{ display:block; max-width:100%; max-height:260px; height:auto; margin:6px 0; border-radius:8px; border:1px solid var(--line); background:#fff; }
/* ===== 通用富文本录入框（题干）：图文混排 + Ctrl+V 粘贴图片 ===== */
.rich-field{ padding:10px 12px; border:2px solid var(--line); border-radius:12px; background:#fff;
  outline:none; min-height:64px; font-size:14px; line-height:1.65;
  overflow-wrap:break-word; word-break:break-word; white-space:pre-wrap; }
.rich-field:focus{ border-color:var(--mac-purple); }
.rich-field:empty:before{ content:attr(data-ph); color:#b6c2cc; }
.rich-field img{ display:block; max-width:100%; max-height:260px; height:auto;
  margin:6px 0; border-radius:8px; border:1px solid var(--line); background:#fff; }
/* 普通录入框（textarea）粘贴的图：框下方附图条 */
.rich-attach{ display:flex; flex-wrap:wrap; gap:6px; margin:6px 0 8px; }
.rich-attach-item{ position:relative; display:inline-block; }
.rich-attach-item img{ display:block; max-height:84px; max-width:180px;
  border-radius:8px; border:1px solid var(--line); background:#fff; cursor:zoom-in; }
.rich-attach-x{ position:absolute; top:-6px; right:-6px; width:18px; height:18px;
  line-height:17px; text-align:center; border-radius:50%; background:#ff5b6e; color:#fff;
  font-size:12px; font-style:normal; cursor:pointer; }
.rich-zoom{ position:fixed; left:0; top:0; right:0; bottom:0; background:rgba(0,0,0,.72);
  z-index:9999; display:flex; align-items:center; justify-content:center; cursor:zoom-out; }
.rich-zoom img{ max-width:92vw; max-height:92vh; border-radius:10px; background:#fff; }

/* 打卡历史：题干图文 / 粘贴的附图 */
.hist-rich{ margin-top:4px; line-height:1.7; }
.hist-rich img{ display:block; max-width:100%; max-height:220px; height:auto; margin:6px 0; border-radius:8px; border:1px solid var(--line); background:#fff; }
.hist-paste-imgs{ display:flex; flex-wrap:wrap; gap:6px; margin-top:6px; }
.hist-paste-img{ max-height:110px; max-width:220px; border-radius:8px; border:1px solid var(--line); background:#fff; }

.ms-stem-mini-img{ display:block; max-width:100%; max-height:120px; border-radius:6px; margin:0 0 5px; }
.rd-stem img,.ms-nail-stem img{ display:block; max-width:100%; max-height:240px; height:auto; border-radius:8px; margin:6px 0; }
.ex-wps-tip{margin-top:10px;background:#FFF8E1;border:1px solid #F5DCAA;border-radius:8px;padding:8px 12px;font-size:12px;color:#6B4E10}
.ex-wps-tip summary{cursor:pointer;font-weight:600;user-select:none;outline:none}
.ex-wps-tip summary::-webkit-details-marker{color:#F5A623}
.ex-wps-tip ol{margin:8px 0 6px 0;padding-left:22px;line-height:1.85}
.ex-wps-tip ol li{margin-bottom:2px}
.ex-wps-tip-foot{margin-top:6px;color:#9A5B00;font-size:11.5px;line-height:1.7}
.ex-wps-paste{margin-top:10px;background:#F4F9FC;border:1px solid #C8E1F0;border-radius:8px;padding:8px 12px;font-size:12.5px;color:#245a75}
.ex-wps-paste summary{cursor:pointer;font-weight:600;user-select:none;outline:none}
.ex-wps-paste summary::-webkit-details-marker{color:#5BA8CF}
.ex-wps-paste textarea{width:100%;margin-top:8px;border:1px solid #C8E1F0;border-radius:6px;padding:8px;font-size:13px;line-height:1.65;font-family:inherit;background:#fff;box-sizing:border-box;resize:vertical}
.wps-paste-acts{display:flex;align-items:center;gap:8px;margin-top:8px;flex-wrap:wrap}
.wps-paste-tip{color:#5BA8CF;font-size:11.5px;line-height:1.5}
.wps-pick{border:1px solid #C8E1F0;border-radius:6px;padding:8px;margin-top:8px;background:#fff;display:flex;gap:8px;align-items:flex-start;flex-wrap:wrap}
.wps-pick-no{flex:0 0 28px;height:28px;line-height:28px;text-align:center;border-radius:14px;background:#5BA8CF;color:#fff;font-weight:700;font-size:12px}
.wps-pick-text{flex:1 1 100%;min-width:200px;background:#FAFCFE;border:1px dashed #C8E1F0;border-radius:4px;padding:6px 8px;font-size:13px;line-height:1.6;white-space:pre-wrap;word-break:break-word}
.wps-pick-actions{flex:1 1 100%;display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.wps-pick-sel,.wps-pick-target{flex:0 0 auto;font-size:12px;padding:4px 8px;border-radius:4px;border:1px solid #C8E1F0;background:#fff}
.wps-docx-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:8px}
.wps-docx-name{font-size:12px;color:#2E7BB8;font-weight:600}
.wps-docx-view{margin-top:8px;min-height:120px;max-height:320px;overflow-y:auto;background:#fff;border:1px solid #C8E1F0;border-radius:6px;padding:12px 16px;font-size:13.5px;line-height:1.75;outline:none}
.wps-docx-view:empty:before{content:attr(placeholder);color:#9DBACC;font-style:italic}
.wps-docx-view p{margin:0 0 8px 0;padding:2px 0}
.wps-docx-view p:last-child{margin-bottom:0}
.wps-docx-view:focus{border-color:#5BA8CF;box-shadow:0 0 0 2px rgba(91,168,207,0.15)}
/* 摘抄识别状态条（加载中 / 成功 / 降级提示） */
.ms-ocr-st{display:inline-block;font-size:11.5px;line-height:1.5;margin:5px 0 2px;padding:4px 9px;border-radius:9px;max-width:100%}
.ms-ocr-st.ocr-load{background:#EEF4FF;color:#2C5FD8;border:1px solid #CFE0FF}
.ms-ocr-st.ocr-ok{background:#EAF8EE;color:#1F7A3D;border:1px solid #C8EBD3}
.ms-ocr-st.ocr-warn{background:#FFF6E5;color:#9A5B00;border:1px solid #F5DCAA}

/* ---------- 照片 → 可编辑题干（Word 式校对 + 文本分析选词句） ---------- */
.ms-word{background:#F0F8FC;border-color:#5BA8CF;color:#245a75}
.ex-word-body{max-height:78vh;overflow:auto;padding:2px 0 8px}
.ex-word-top{display:grid;grid-template-columns:260px 1fr;gap:14px;align-items:start;margin-bottom:12px}
.ex-word-img-wrap{position:sticky;top:0;border:1.5px solid #DCE9F1;border-radius:12px;background:#fff;padding:8px;max-height:360px;overflow:auto}
.ex-word-img-wrap .ms-shot-img{display:block;margin:0 auto;border-radius:8px;max-width:100%}
.ex-word-input{display:flex;flex-direction:column;gap:8px}
.ex-word-input textarea{width:100%;font-size:14px;min-height:90px}
.ex-word-targets{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:10px 0 6px}
.ex-word-targets textarea{width:100%;font-size:13.5px;min-height:70px}
.ex-word-targets label{font-size:12px;font-weight:800;color:var(--ink-soft)}
@media (max-width:640px){
  .ex-word-top{grid-template-columns:1fr}
  .ex-word-img-wrap{position:static}
  .ex-word-targets{grid-template-columns:1fr}
}

/* 考试诊断改造：题干 tip / 原版照片框 / 标准答案 元宝·豆包条 */
.ms-stem-tip{ margin:0 0 6px; font-size:12.5px; color:var(--ink-soft); }
.ms-mine-shot{ border:1px dashed var(--line); border-radius:10px; padding:6px; background:#fff; min-height:120px; display:flex; align-items:center; justify-content:center; overflow:auto; }
.ms-mine-shot .ms-shot-img{ width:100%; border-radius:6px; display:block; }
.ms-shot-empty{ color:var(--ink-soft); font-size:13px; text-align:center; padding:18px; }
.ms-std-bar{ display:flex; gap:8px; margin-bottom:6px; }
.ms-nail-mine{ margin-top:6px; padding:6px; background:#FDEFF3; border-radius:8px; }
.ms-nail-mine .ms-shot-img{ width:100%; border-radius:6px; display:block; }
.ms-nail-crop-empty{ color:var(--ink-soft); font-size:12px; }
/* 题干：插入图片（图直接贴入错题题干框，可点击放大） */
.ms-stem-tools{ display:flex; gap:8px; margin:6px 0 2px; }
.ms-stem-img{ position:relative; margin:2px 0 6px; border:1px dashed var(--line); border-radius:10px; padding:6px; background:#fff; display:block; max-width:100%; }
.ms-stem-img img{ max-width:320px; max-height:240px; border-radius:6px; display:block; cursor:zoom-in; }
.ms-stem-img-x{ position:absolute; top:-8px; right:-8px; width:22px; height:22px; line-height:20px; text-align:center; border-radius:50%; background:#e74c3c; color:#fff; font-weight:700; cursor:pointer; border:2px solid #fff; }
.ms-nail-stemimg{ margin-top:6px; }
.ms-nail-stemimg img{ max-width:280px; max-height:200px; border-radius:6px; display:block; cursor:zoom-in; }
/* 截图 / 题干图 点击放大 */
.ms-shot-zoom{ cursor:zoom-in; }
.ms-zoom-mask{ z-index:60; cursor:zoom-out; }
.ms-zoom-box{ border-radius:10px; background:#fff no-repeat center/cover; box-shadow:0 12px 48px rgba(0,0,0,.35); }
/* 题干框内的插入图片按钮（行内链接式） */
.link-btn{ border:none; background:none; color:var(--link,#2b7de9); cursor:pointer; font-size:inherit; padding:0 2px; text-decoration:underline; }
/* WPS Word 区：选中文字 → 左键摘抄 */
.wps-target-lab{ font-size:12px; color:var(--ink-soft); align-self:center; }
.wps-target-sel{ max-width:140px; }
.wps-sel-btn{ position:absolute; z-index:60; background:var(--mac-blue); color:#fff; border:none; border-radius:8px; padding:6px 10px; font-size:13px; cursor:pointer; box-shadow:0 4px 14px rgba(0,0,0,.22); }
.wps-sel-btn:hover{ filter:brightness(1.05); }

/* 考试诊断：每道题下方「重做区」大框格 + 多横栏横线 */
.ms-redo-box{ margin:10px 0 4px; border:1.5px dashed #E2A6B8; border-radius:10px; padding:10px 12px; background:#FFF8FB; }
.ms-redo-h{ font-weight:600; color:#c0392b; margin-bottom:6px; font-size:14px; }
.ms-redo-tip{ font-weight:400; color:#a98; font-size:12px; margin-left:6px; }
.ms-redo-ans{ width:100%; border:1px solid #e8c4d0; border-radius:8px; padding:8px 10px; font-size:14px; line-height:27px;
  background-image:linear-gradient(#fff 26px, #f3e6ec 27px, #fff 28px); background-size:100% 27px; background-attachment:local;
  min-height:270px; resize:vertical; box-sizing:border-box; }
.ms-redo-bar{ display:flex; gap:8px; align-items:center; margin-top:8px; }
.ms-redo-pill{ font-size:13px; padding:2px 10px; border-radius:20px; }
.ms-redo-pill.ok{ background:#E6F7EF; color:#2e8b62; border:1px solid #7FD1A8; }
.ms-redo-pill.bad{ background:#FDEFF3; color:#c0392b; border:1px solid #F48FB1; }
.ms-redo-log{ margin-top:8px; font-size:12px; color:#888; }
.ms-redo-li{ margin-right:6px; padding:1px 8px; border-radius:14px; }
.ms-redo-li.ok{ background:#E6F7EF; color:#2e8b62; }
.ms-redo-li.bad{ background:#FDEFF3; color:#c0392b; }
/* 做题时（光标在重做区）隐藏标准答案，避免偷看 */
.ms-card.ms-redo-on .ms-std,
.ms-card.ms-redo-on .ms-std-bar,
.ms-card.ms-redo-on .ms-nail-std{ visibility:hidden; }

/* 考试诊断 · 走题训练计划卡片（参考延伸技能「走题训练」四同题结构） */
.wt-problem{font-size:13px;color:#3a6b86;background:#EAF4FB;border-radius:8px;padding:6px 9px;margin:2px 0 8px;white-space:pre-wrap}
.wt-ans-body{margin-top:6px}
.wt-ans-body label{font-size:12px;font-weight:800;color:#37627c;margin-top:4px;display:block}
.wt-step{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:6px}
.wt-rec-ind{font-size:12px;color:#2e9e6b}
.wt-check-text{margin-top:2px}
.tag-ok{background:#E3F6EA;color:#2e9e6b;border:1px solid #B7E3C7}


/* ============ F1b 走题训练作答区拓宽 ============ */
.wt-q-text, .wt-ans-f, .wt-check-text{ width:100%; box-sizing:border-box; min-height:64px; font-size:14px; line-height:1.6; }
.wt-q-text{ min-height:72px; }
.wt-ans-body{ margin-top:8px; }
.wt-ans-body label{ font-size:12px; font-weight:800; color:#37627c; margin-top:6px; display:block; }
.wt-ans-f{ min-height:52px; }
.wt-check-text{ min-height:56px; }
.wt-ans{ margin-top:6px; display:flex; gap:8px; flex-wrap:wrap; }

/* ============ F2 查漏补缺 · bilibili + 漏洞定位 ============ */
.kp-bili{ margin-top:12px; display:flex; align-items:center; gap:10px; flex-wrap:wrap; }
.kp-bili-tip{ font-size:12px; color:var(--ink-soft); }
.kp-gap{ margin-top:12px; border:1px dashed var(--mac-blue); border-radius:10px; padding:8px 10px; background:#F4FAFE; }
.kp-gap-t{ font-weight:800; color:#2b7aa0; font-size:13px; margin-bottom:4px; }
.kp-gap-sub{ font-size:12px; color:var(--ink-soft); margin:6px 0 2px; }
.kp-gap-row{ font-size:13px; color:var(--ink); padding:2px 0; }
.kp-gap-empty{ font-size:13px; color:var(--ink-soft); }

/* ============ F4 积分超市 ============ */
.mall-top{ display:flex; align-items:center; justify-content:space-between; gap:12px; flex-wrap:wrap; margin:8px 0 14px; }
.mall-bal{ font-size:16px; color:var(--mac-purple); }
.mall-bal b{ font-size:22px; }
.mall-top-btns{ display:flex; gap:8px; }
.mall-grid{ display:grid; grid-template-columns:repeat(auto-fill,minmax(190px,1fr)); gap:14px; }
.mall-item{ border:1px solid #f0e2ea; border-radius:14px; padding:14px; background:#fff; display:flex; flex-direction:column; gap:6px; box-shadow:0 2px 10px rgba(247,183,200,.18); }
.mall-emoji{ font-size:34px; text-align:center; }
.mall-name{ font-weight:800; font-size:15px; }
.mall-desc{ font-size:12px; color:var(--ink-soft); min-height:32px; line-height:1.5; }
.mall-cost{ color:#d2487f; font-weight:800; }
.mall-stock{ font-size:12px; color:var(--ink-soft); }
.mall-buy{ margin-top:4px; }
.mall-ledger-sum{ display:flex; gap:18px; flex-wrap:wrap; font-size:13px; font-weight:700; color:var(--ink); margin-bottom:8px; }
.mall-ledger-sum span{ background:#F4FAFE; border:1px solid #dfeef6; border-radius:8px; padding:4px 10px; }
.mall-ledger-filter{ margin-bottom:8px; }
.mall-ledger{ width:100%; border-collapse:collapse; font-size:13px; }
.mall-ledger th, .mall-ledger td{ border-bottom:1px solid #f0e6ec; padding:7px 8px; text-align:left; }
.mall-ledger th{ color:var(--ink-soft); font-weight:700; background:#FBF7FB; }
.mall-ledger .ml-out{ color:#d2487f; font-weight:700; }
.mall-admin{ background:#fff; border-radius:16px; padding:18px; width:560px; max-width:92vw; }
.mall-admin h3{ margin:0 0 10px; }
.ma-note{ font-size:13px; color:var(--mac-purple); margin-bottom:10px; }
.ma-pwd{ display:flex; align-items:center; gap:8px; margin-bottom:10px; }
.ma-pwd label{ font-size:13px; font-weight:600; white-space:nowrap; }
.ma-add{ display:flex; flex-wrap:wrap; gap:8px; align-items:center; margin-bottom:12px; }
.ma-add .gr-emoji{ width:54px; }
.ma-add .gr-cost{ width:90px; }
.ma-add .ma-desc{ flex:1; min-width:160px; }
.ma-list{ display:flex; flex-direction:column; gap:8px; max-height:300px; overflow:auto; }
.ma-row{ display:flex; align-items:center; gap:10px; border:1px solid #f0e6ec; border-radius:10px; padding:6px 10px; font-size:13px; }
.ma-r-emoji{ font-size:20px; }
.ma-r-name{ flex:1; font-weight:700; }
.ma-r-cost{ color:#d2487f; font-weight:700; }
.ma-r-stock{ color:var(--ink-soft); }

/* ============ F5 增长曲线 ============ */
.gr-form{ display:grid; grid-template-columns:1fr 1fr; gap:10px; }
.gr-form label{ display:flex; flex-direction:column; font-size:12px; font-weight:700; color:var(--ink-soft); gap:4px; }
.gr-in{ padding:7px 9px; border:1px solid #ecdfe6; border-radius:9px; font-size:13px; background:#fff; color:var(--ink); }
.gr-svg{ width:100%; height:auto; background:#fff; border:1px solid #f0e6ec; border-radius:12px; }
.gr-legend{ display:flex; gap:14px; flex-wrap:wrap; margin-top:8px; font-size:12px; font-weight:700; }
.gr-rows{ display:flex; flex-direction:column; gap:6px; }
.gr-row{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; border-bottom:1px solid #f3ecf0; padding:6px 2px; font-size:13px; }
.gr-row .gr-d{ font-weight:700; }
.gr-row .gr-l{ color:var(--mac-purple); }
.gr-row .gr-m{ color:var(--ink-soft); }
.gr-row .gr-num{ background:#F4FAFE; border-radius:7px; padding:2px 7px; }
.gr-energy-box{ margin-top:10px; display:flex; flex-direction:column; gap:6px; }
.gr-energy-row{ background:linear-gradient(135deg,#FFF3F8,#F3F0FE); border:1px solid #f0dcec; border-radius:10px; padding:8px 10px; font-size:13px; color:#7a4a66; }

/* ============ F3 成长足迹年度纪录片（动态视频） ============ */
.rep-movie-bar{ display:flex; align-items:center; gap:12px; flex-wrap:wrap; margin:10px 0; }
.rep-movie-tip{ font-size:12px; color:var(--ink-soft); max-width:520px; }
.movie-mask{ position:fixed; inset:0; background:rgba(40,20,40,.92); z-index:9999; display:flex; align-items:center; justify-content:center; }
.movie-stage{ width:min(880px,94vw); height:min(560px,90vh); background:radial-gradient(circle at 30% 20%,#3a2150,#1c1030); border-radius:18px; position:relative; overflow:hidden; box-shadow:0 20px 60px rgba(0,0,0,.5); display:flex; flex-direction:column; }
.movie-scenes{ flex:1; position:relative; color:#fff; }
.movie-scene{ position:absolute; inset:0; padding:40px 46px; display:flex; flex-direction:column; justify-content:center; opacity:0; transform:translateY(18px) scale(.98); transition:opacity .8s ease, transform .8s ease; }
.movie-scene.mv-in{ opacity:1; transform:translateY(0) scale(1); }
.mv-kicker{ font-size:13px; letter-spacing:3px; color:#F7B7C8; text-transform:uppercase; }
.mv-title{ font-size:30px; font-weight:800; margin:8px 0 18px; }
.mv-body{ font-size:16px; line-height:1.9; }
.mv-cap{ font-size:14px; color:#d9c2f0; margin-top:6px; }
.mv-sub{ font-size:14px; color:#e9dcef; margin-top:12px; line-height:1.9; }
.mv-big{ font-size:64px; font-weight:900; color:#FFD6E6; line-height:1; }
.mv-stats{ display:grid; grid-template-columns:repeat(4,1fr); gap:14px; margin-top:6px; }
.mv-stats>div{ background:rgba(255,255,255,.08); border-radius:12px; padding:12px; text-align:center; }
.mv-stats b{ display:block; font-size:26px; font-weight:800; color:#FFE08A; }
.mv-stats span{ font-size:12px; color:#e9dcef; }
.mv-review{ display:flex; flex-direction:column; gap:8px; }
.mv-rev-row{ display:flex; align-items:center; gap:10px; font-size:13px; }
.mv-rev-n{ width:96px; font-weight:700; }
.mv-rev-bar{ flex:1; height:10px; background:rgba(255,255,255,.12); border-radius:6px; overflow:hidden; }
.mv-rev-bar i{ display:block; height:100%; background:linear-gradient(90deg,#FFB7C8,#C9A0FF); }
.mv-rev-t{ width:96px; color:#FFE08A; font-weight:700; }
.mv-poem{ margin-top:22px; font-size:17px; font-style:italic; color:#FFE3EF; border-left:3px solid #F7B7C8; padding-left:14px; line-height:1.8; }
.movie-bar{ display:flex; align-items:center; gap:10px; padding:12px 18px; background:rgba(0,0,0,.25); }
.movie-btn{ background:rgba(255,255,255,.15); color:#fff; border:none; border-radius:10px; width:38px; height:34px; font-size:15px; cursor:pointer; }
.movie-btn:hover{ background:rgba(255,255,255,.3); }
.movie-prog{ flex:1; height:6px; background:rgba(255,255,255,.18); border-radius:4px; overflow:hidden; }
.movie-prog span{ display:block; height:100%; background:linear-gradient(90deg,#F7B7C8,#C9A0FF); transition:width .5s; }

/* ===================== 题库：导入 / 校对 / 标签编辑 ===================== */
.bank-import-bar{margin:8px 0 4px}
.bank-import-hint{font-size:12px;color:var(--ink-soft);line-height:1.75}
.bank-imp-sub{font-size:12px;color:var(--ink-soft);margin-bottom:6px;word-break:break-all;line-height:1.7}
.bank-imp-tip{font-size:12px;color:var(--ink-soft);background:#faf6f8;border:1px dashed var(--line);border-radius:12px;padding:10px 12px;margin-top:14px;line-height:1.85}
.bank-imp-log{max-height:220px;overflow:auto;font-size:12px;line-height:1.9;color:var(--ink-soft);background:#faf6f8;border-radius:12px;padding:10px 12px;font-family:ui-monospace,Consolas,monospace;white-space:pre-wrap}
.modal-xl{width:min(880px,96vw)}
.bank-pick{display:inline-flex;align-items:center}
.bank-pick input{width:auto!important;margin:0}
.bank-seed-hint{font-size:11px;color:#b9adb5}
.btn-danger{color:#c0392b!important;border-color:#f0c9c2!important}
.btn-danger:hover{background:#fdf2f0!important}
.tag-teach{background:#fff4e0;color:#a9711a;border:1px solid #f2dcb0}
.tag-term{background:#eef4ff;color:#3a63a8;border:1px solid #d3e0f7}
.tag-ch{background:#f2eefc;color:#6b4fa8;border:1px solid #ddd2f5}
.tag-tag{background:#f0f7f2;color:#3d7a52;border:1px solid #d2e8da}
.bank-item.is-teach{border-color:#f2dcb0;background:#fffdf7}
.bank-figs{margin:8px 0;display:flex;flex-direction:column;gap:8px}
.bank-fig{max-width:100%;height:auto;border:1px solid var(--line);border-radius:10px;background:#fff}
.bank-tbl{margin:8px 0;overflow:auto}
.bank-tbl table{border-collapse:collapse;font-size:13px;max-width:100%}
.bank-tbl td,.bank-tbl th{border:1px solid var(--line);padding:4px 10px}
.bank-rev-cnt{font-size:13px;font-weight:400;color:var(--ink-soft)}
.bank-rev-note{font-size:12px;color:var(--ink-soft);background:#faf6f8;border-radius:12px;padding:10px 12px;line-height:1.85;margin-bottom:12px}
.bank-rev-scroll{max-height:60vh;overflow:auto;padding-right:4px}
.rev-card{background:var(--panel);border:1px solid var(--line);border-radius:14px;margin-bottom:14px}
.rev-card.q-sm{padding:12px}
.rev-card.q-md{padding:16px}
.rev-card.q-lg{padding:22px}
.rev-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:6px}
.rev-no{display:inline-flex;align-items:center;justify-content:center;min-width:26px;height:26px;border-radius:50%;background:var(--mac-purple);color:#fff;font-size:12px;font-weight:700}
.rev-in{padding:6px 10px!important;border:1px solid var(--line)!important;border-radius:8px!important;font-size:13px!important;width:auto!important;min-width:70px}
.rev-ch{width:118px!important}
.rev-sec{width:80px!important}
.rev-teach{font-size:12px!important;font-weight:600;color:var(--ink-soft);display:inline-flex!important;align-items:center;gap:4px;margin:0!important}
.rev-teach input{width:auto!important;margin:0}
.rev-lb{font-size:11px!important;font-weight:700;color:var(--ink-soft);display:block!important;margin:10px 0 4px!important}
.rev-ta{width:100%;border:1px solid var(--line);border-radius:10px;padding:10px 12px;font-size:14px;line-height:1.9;resize:vertical;outline:none;font-family:inherit;box-sizing:border-box}
.rev-ta:focus{border-color:var(--mac-purple)}
.rev-fig{margin:8px 0}
.rev-fig img{max-width:100%;height:auto;border:1px solid var(--line);border-radius:10px;background:#fff}
.rev-tbl{margin:8px 0;overflow:auto;border:1px solid var(--line);border-radius:10px;padding:8px}
.rev-tbl table{border-collapse:collapse;font-size:13px}
.rev-tbl td,.rev-tbl th{border:1px solid var(--line);padding:4px 10px}
.rev-mini-del{margin-top:6px;font-size:11px;padding:3px 8px;border:1px solid #f0c9c2;background:#fff;color:#c0392b;border-radius:8px;cursor:pointer}
.rev-tags{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;margin-top:10px}
.rev-tags > div{display:flex;flex-direction:column}
.rev-tag-wide{grid-column:1/-1}


/* ============ 积累库（各科默写 / 刷书法 / 影子跟读 / 经典阅读 / 卡片快闪） ============ */
.accum-wrap{max-width:960px;margin:0 auto}
.accum-head{margin-bottom:14px}
.accum-logo{font-size:22px}
.accum-title{font-size:20px;font-weight:800;color:var(--ink)}
.accum-sub{font-size:13px;color:var(--ink-soft);margin-top:2px}
.accum-tabs{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:16px}
.accum-tab{border:1px solid var(--line);background:#fff;color:var(--ink-soft);padding:9px 14px;border-radius:999px;font-size:14px;cursor:pointer;font-weight:600;transition:.15s}
.accum-tab:hover{border-color:var(--mac-purple)}
.accum-tab.active{background:linear-gradient(135deg,#d68cbe,#b89be0);color:#fff;border-color:transparent;box-shadow:var(--shadow-sm)}
.accum-body{min-height:300px}
.mod{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:18px;box-shadow:var(--shadow-sm)}
.mod-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:12px}
.mod-bar .lbl{font-size:13px;font-weight:700;color:var(--ink-soft)}
.sel,.inp{border:1px solid var(--line);border-radius:10px;padding:8px 10px;font-size:14px;font-family:inherit;background:#fff;color:var(--ink)}
.inp{flex:1;min-width:140px}
.inp-n{width:90px;flex:none}
.ta{width:100%;border:1px solid var(--line);border-radius:10px;padding:10px 12px;font-size:14px;line-height:1.8;resize:vertical;min-height:72px;font-family:inherit;outline:none}
.ta:focus,.inp:focus,.sel:focus{border-color:var(--mac-purple)}
.mod-actions{display:flex;gap:10px;align-items:center;margin:10px 0;flex-wrap:wrap}
.empty{color:var(--ink-soft);font-size:13px;padding:14px;background:#faf6f8;border-radius:12px;text-align:center}
.hint{font-size:12px;color:var(--ink-soft);margin-top:10px;background:#fbf7f9;border-radius:10px;padding:10px;line-height:1.6}
/* 各科默写 */
.dict-list{display:flex;flex-direction:column;gap:10px;margin:8px 0}
.dict-card{background:#fff;border:1px solid var(--line);border-radius:12px;padding:12px 14px}
.dict-q{font-weight:700;color:var(--ink);font-size:15px}
.dict-note{font-size:12px;color:var(--ink-soft);margin:4px 0}
.dict-a{width:100%;border:1px solid var(--line);border-radius:8px;padding:8px 10px;font-size:14px;margin-top:6px;font-family:inherit}
.dict-del{margin-top:6px;font-size:11px;padding:3px 8px;border:1px solid #f0c9c2;background:#fff;color:#c0392b;border-radius:8px;cursor:pointer}
.dict-result{margin-top:12px}
.dict-score{font-size:15px;font-weight:700;color:var(--brand,#7b3f63);background:#fdf2f7;border-radius:10px;padding:10px 12px}
.dict-ok{color:#2e9e6b;font-weight:600;margin-top:6px}
.dict-wrong{margin-top:8px}
.dw{display:flex;flex-direction:column;gap:2px;background:#fff6f3;border:1px solid #f3d6cd;border-radius:10px;padding:8px 10px;margin:6px 0}
.dw-q{font-weight:700;color:var(--ink)}
.dw-y{font-size:12px;color:#c0392b}
.dw-a{font-size:12px;color:#2e9e6b}
.dict-done{color:#2e9e6b;font-size:12px;margin-top:6px}
/* 计时器 */
.timer-box{background:linear-gradient(135deg,#fdf2f7,#f3ecfb);border-radius:14px;padding:18px;text-align:center;margin:8px 0}
.timer-state{font-size:13px;color:var(--ink-soft)}
.timer-num{font-size:38px;font-weight:800;color:var(--brand,#7b3f63);font-variant-numeric:tabular-nums;letter-spacing:1px}
.brush-end{margin-top:10px}
/* 卡片快闪 */
.flash-mod{position:relative}
.flash-top{display:flex;align-items:flex-start;gap:12px;margin-bottom:12px}
.peter-box{flex:none}
.peter{display:block}
.flash-review{min-height:80px;margin:8px 0}
.flash-card{background:#fff;border:1px solid var(--line);border-radius:14px;padding:18px;text-align:center}
.flash-face.front{font-size:20px;font-weight:800;color:var(--ink);margin-bottom:12px;min-height:48px;display:flex;align-items:center;justify-content:center}
.flash-btns{display:flex;justify-content:center;gap:10px;flex-wrap:wrap}
.flash-back{margin-top:12px;font-size:16px;color:#2e9e6b;font-weight:600;background:#f2faf5;border-radius:10px;padding:10px}
.flash-list-title{font-size:13px;font-weight:700;color:var(--ink-soft);margin:12px 0 6px}
.flash-list{display:flex;flex-direction:column;gap:6px}
.flash-row{display:grid;grid-template-columns:1fr 1fr auto;gap:10px;align-items:center;background:#fff;border:1px solid var(--line);border-radius:10px;padding:8px 10px;font-size:13px;cursor:default}
.flash-row:hover{background:#fbf7fb}
.fr-front{font-weight:600;color:var(--ink)}
.fr-back{color:var(--ink-soft)}
.fr-box{font-size:11px;color:var(--mac-purple);background:#f3ecfb;border-radius:8px;padding:2px 8px}
.voice-tag{font-size:12px;color:#2e9e6b;font-weight:600}
.btn-pink{background:linear-gradient(135deg,#d68cbe,#b89be0);color:#fff;border:none;border-radius:10px;padding:10px 16px;font-weight:700;font-size:14px;cursor:pointer}
.btn-ghost{background:#f0ecfa;color:#6a5f96;border:none;border-radius:10px;padding:9px 14px;font-weight:600;font-size:13px;cursor:pointer}
.btn-xs{padding:6px 10px;font-size:12px}
.btn-pink:active{transform:translateY(1px)}


.sel-xs{border:1px solid var(--line);border-radius:8px;padding:4px 6px;font-size:12px;background:#fff;color:var(--ink-soft);font-family:inherit}
.tpl-hint{font-size:12px;line-height:1.7;color:var(--ink-soft);background:#f7f4fc;border:1px dashed var(--line);border-radius:10px;padding:10px 12px;margin:10px 0}
.tpl-hint b{color:var(--mac-purple)}

/* ============================================================
   手机端适配（≤768px）
   解决的问题：
     ① 200px 侧边栏在小屏吃掉一半宽度 → 改成底部可横向滑动的标签栏
     ② 能力/技能卡竖排成一列，滚很久才找到打卡入口 → 压成一行一条
     ③ 弹窗是居中卡片，键盘弹出后内容被挤、提交按钮要滚到底 → 改底部抽屉 + 操作条吸底
     ④ 输入框 14px 会触发 iOS 聚焦自动放大 → 统一 16px
     ⑤ 按钮高度只有 ~35px，手指容易点偏 → 触控目标 ≥44px
   ============================================================ */
@media (max-width: 768px){
  /* ---- 顶栏：只留品牌 / 积分 / 同步 / 退出，其余收起 ---- */
  .topbar{height:54px;padding:0 12px}
  .logo{width:30px;height:30px;border-radius:9px;font-size:17px}
  .brand{font-size:15px}
  .date-chip,.honor-chip,.user-chip,.sync-time{display:none}
  .topbar-right{gap:6px}
  .icon-btn{width:40px;height:40px;border-radius:11px;font-size:17px}
  .sync-btn{width:auto;min-height:40px;padding:0 12px;font-size:12px}

  /* ---- 侧边栏 → 底部横向滑动标签栏 ---- */
  .layout{display:block}
  .sidebar{
    position:fixed;left:0;right:0;bottom:0;top:auto;
    width:auto;height:auto;flex-direction:row;
    overflow-x:auto;overflow-y:hidden;
    border-right:none;border-top:1px solid var(--line);
    box-shadow:0 -4px 16px rgba(120,90,140,.12);
    padding:8px 10px calc(8px + env(safe-area-inset-bottom,0px));
    gap:6px;z-index:40;-webkit-overflow-scrolling:touch;
  }
  .sidebar::-webkit-scrollbar{display:none}
  .nav-group{display:none}
  .nav-item{flex:0 0 auto;white-space:nowrap;padding:11px 14px;min-height:44px;font-size:13.5px;border-radius:12px}
  .nav-item.active{box-shadow:none}

  /* ---- 内容区：给底部导航留位置 ---- */
  .content{padding:14px 12px calc(82px + env(safe-area-inset-bottom,0px))}
  .card{padding:16px 14px;margin-bottom:14px;border-radius:14px}
  .card-title{font-size:16px}
  .card-sub{font-size:12px;margin-bottom:12px}

  /* ---- 能力/技能卡：一行一条，一屏能看到 4~5 个 ---- */
  .grid{gap:10px}
  .grid-3,.grid-5,.grid-6{grid-template-columns:1fr}
  .ability-card{
    display:grid;grid-template-columns:38px minmax(0,1fr) 52px;
    column-gap:10px;align-items:center;text-align:left;padding:12px 14px;
  }
  .ability-emoji{grid-column:1;grid-row:1;font-size:24px;margin:0;align-self:center}
  .ability-name{grid-column:2;grid-row:1;font-size:15px}
  .ability-desc{grid-column:2;grid-row:2;margin:2px 0 0;font-size:11px;min-height:0}
  .ability-steps{display:none}          /* 流程在打卡弹窗里会重讲一遍，这里省空间 */
  .score-ring{grid-column:3;grid-row:1/4;width:52px;height:52px;margin:0}
  .score-ring svg{width:100%;height:100%}   /* svg 自带 width=84 属性，需由 CSS 覆盖 */
  .score-ring .val{font-size:15px}
  .ability-meta{grid-column:2;grid-row:3;margin:2px 0 0;font-size:10.5px}
  .ability-last{grid-column:2;grid-row:4;margin:0;font-size:10px}
  .ability-actions{grid-column:1/4;grid-row:5;display:flex;gap:8px;margin-top:10px}
  .ability-actions .btn{flex:1;min-height:46px;font-size:14.5px}

  /* ---- 雷达图：图在上、图例在下 ---- */
  .radar-wrap{flex-direction:column;gap:10px;align-items:stretch}
  .radar-side{display:flex;flex-wrap:wrap;gap:8px 14px;justify-content:center}

  /* ---- 弹窗：底部抽屉 + 按钮吸底（打卡表单很长，提交按钮不再藏在最底） ---- */
  .modal-mask{align-items:flex-end;padding:0}
  .modal,.modal-lg,.modal-xl{
    width:100%!important;max-width:100%!important;
    max-height:92vh;max-height:92dvh;
    border-radius:20px 20px 0 0;
    padding:18px 14px calc(14px + env(safe-area-inset-bottom,0px));
    -webkit-overflow-scrolling:touch;
  }
  .modal textarea,.modal input,.modal select{font-size:16px;padding:12px}
  .modal-actions{
    position:sticky;bottom:0;background:#fff;
    box-shadow:0 -8px 14px -8px rgba(120,90,140,.18);
    margin:12px -14px 0;padding:10px 14px calc(8px + env(safe-area-inset-bottom,0px));
    gap:10px;
  }
  .modal-actions .btn{flex:1;min-height:46px;font-size:15px}

  /* ---- 触控目标与防溢出 ---- */
  .btn{min-height:44px;padding:10px 16px;font-size:14px}
  .content img,.hist-rich img,.modal img,table{max-width:100%}
  .hist-list{max-height:70vh;padding-right:2px}
  .modal-xl .abs-mm-editor-row,.ex-word-top,.ex-word-targets{grid-template-columns:1fr}
}

@media (max-width: 400px){
  .brand{display:none}
  .ability-card{grid-template-columns:32px minmax(0,1fr) 46px}
  .score-ring,.score-ring{width:46px;height:46px}
}
