/* ===========================================================
   湖南专升本英语 · 智能刷题台   —  样式表
   =========================================================== */
:root{
  --bg:#f4f6fb;
  --bg-soft:#eef1f8;
  --panel:#ffffff;
  --panel-2:#fafbfe;
  --text:#1e2430;
  --text-2:#4b5563;
  --muted:#8b95a7;
  --line:#e4e8f0;
  --line-2:#eef1f7;
  --primary:#4f46e5;
  --primary-dark:#4338ca;
  --primary-soft:#eef0ff;
  --ok:#12a150;
  --ok-soft:#e8f8ef;
  --bad:#e0344a;
  --bad-soft:#fdecef;
  --warn:#c2740a;
  --warn-soft:#fdf3e2;
  --mark:#fff2a8;
  --radius:14px;
  --radius-sm:9px;
  --shadow:0 1px 2px rgba(23,32,56,.05),0 8px 24px -12px rgba(23,32,56,.16);
  --shadow-lg:0 24px 60px -20px rgba(23,32,56,.32);
  --font:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  --serif:Georgia,"Times New Roman","Songti SC",serif;
  --mono:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;
}

*{box-sizing:border-box}
html,body{margin:0;padding:0}
html{scroll-behavior:smooth}
body{
  background:var(--bg);
  color:var(--text);
  font-family:var(--font);
  font-size:14px;
  line-height:1.65;
  -webkit-font-smoothing:antialiased;
}
h1,h2,h3,h4{margin:0;font-weight:700;line-height:1.35}
p{margin:0}
button{font-family:inherit;font-size:inherit;cursor:pointer}
input,select,textarea{font-family:inherit;font-size:inherit;color:inherit}
a{color:var(--primary)}
.mono{font-family:var(--mono);font-size:.9em}
.muted{color:var(--muted)}
.ok{color:var(--ok)}
.bad{color:var(--bad)}
.spacer{flex:1}
.mt12{margin-top:12px}
.gap{gap:12px}
[hidden]{display:none !important}

.wrap{max-width:1080px;margin:0 auto;padding:0 20px}

/* ---------- 顶栏 ---------- */
.topbar{
  position:sticky;top:0;z-index:40;
  background:rgba(255,255,255,.86);
  backdrop-filter:saturate(180%) blur(12px);
  border-bottom:1px solid var(--line);
}
.topbar-inner{display:flex;align-items:center;justify-content:space-between;gap:14px;height:64px}
.brand{display:flex;align-items:center;gap:11px;min-width:0}
.logo{
  width:38px;height:38px;flex:0 0 38px;border-radius:11px;
  background:linear-gradient(135deg,#6366f1,#8b5cf6);
  color:#fff;display:flex;align-items:center;justify-content:center;
  font-weight:700;font-size:18px;letter-spacing:.5px;
  box-shadow:0 6px 16px -6px rgba(99,102,241,.9);
}
.brand-txt{min-width:0}
.brand-txt h1{font-size:15.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.brand-txt p{font-size:11.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.topbar-actions{display:flex;align-items:center;gap:8px;flex:0 0 auto}

/* ---------- 按钮 ---------- */
.btn{
  display:inline-flex;align-items:center;gap:6px;justify-content:center;
  border:1px solid var(--line);
  background:#fff;color:var(--text);
  padding:8px 14px;border-radius:var(--radius-sm);
  font-weight:600;font-size:13.5px;line-height:1.2;white-space:nowrap;
  transition:background .18s cubic-bezier(.4,0,.2,1),border-color .18s cubic-bezier(.4,0,.2,1),
             color .18s cubic-bezier(.4,0,.2,1),box-shadow .24s cubic-bezier(.4,0,.2,1),
             transform .16s cubic-bezier(.22,.81,.29,1);
}
.btn:hover{background:var(--panel-2);border-color:#d3d9e6;transform:translateY(-1px);box-shadow:0 5px 14px -9px rgba(23,32,56,.55)}
.btn:active{transform:translateY(1px) scale(.98);box-shadow:none}
.btn.primary{background:var(--primary);border-color:var(--primary);color:#fff;box-shadow:0 6px 16px -8px rgba(79,70,229,.85)}
.btn.primary:hover{background:var(--primary-dark);border-color:var(--primary-dark);box-shadow:0 10px 22px -10px rgba(79,70,229,.95)}
.btn.ghost{background:#fff}
.btn.ghost.danger{color:var(--bad);border-color:#f3d2d8}
.btn.ghost.danger:hover{background:var(--bad-soft);border-color:#eab6c0}
.btn.sm{padding:6px 11px;font-size:12.8px}
.btn[disabled]{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}
.icon-btn{
  border:none;background:transparent;color:var(--muted);font-size:22px;line-height:1;
  width:34px;height:34px;border-radius:9px;
  transition:background .18s ease,color .18s ease,transform .2s cubic-bezier(.22,.81,.29,1);
}
.icon-btn:hover{background:var(--bg-soft);color:var(--text);transform:rotate(90deg)}

.chip{
  display:inline-flex;align-items:center;gap:7px;
  background:#fff;border:1px solid var(--line);border-radius:999px;
  padding:6px 12px;font-size:12.8px;font-weight:600;color:var(--text-2);
  transition:border-color .2s ease,background .2s ease,box-shadow .24s ease,transform .16s cubic-bezier(.22,.81,.29,1);
}
.chip-btn:hover{border-color:#cfd6e6;background:var(--panel-2);transform:translateY(-1px);box-shadow:0 5px 14px -10px rgba(23,32,56,.9)}
.chip-btn:active{transform:translateY(1px) scale(.98)}
.chip b{color:var(--primary);font-size:13.5px}
.dot{width:7px;height:7px;border-radius:50%;background:var(--muted);flex:0 0 7px}
.dot.on{background:var(--ok);box-shadow:0 0 0 3px var(--ok-soft)}
.dot.off{background:#cfd5e0}

.ico-refresh{
  width:12px;height:12px;border-radius:50%;
  border:1.8px solid currentColor;border-right-color:transparent;
  display:inline-block;
}
.spinning .ico-refresh{animation:spin .7s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}

/* ---------- 页签 ---------- */
.tabs{display:flex;gap:4px;margin-top:20px;background:#fff;border:1px solid var(--line);border-radius:12px;padding:4px;max-width:660px}
.tab{
  flex:1;border:none;background:transparent;color:var(--text-2);
  padding:9px 12px;border-radius:9px;font-weight:600;font-size:13.5px;
  transition:background .22s cubic-bezier(.4,0,.2,1),color .22s cubic-bezier(.4,0,.2,1),
             box-shadow .26s cubic-bezier(.4,0,.2,1),transform .18s cubic-bezier(.22,.81,.29,1);
}
.tab:hover{background:var(--panel-2);color:var(--text)}
.tab:active{transform:scale(.97)}
.tab.active{background:var(--primary);color:#fff;box-shadow:0 6px 14px -8px rgba(79,70,229,.9)}
.tab.active:hover{background:var(--primary);color:#fff;transform:none}

.content{padding:18px 20px 40px;display:flex;flex-direction:column;gap:16px}
.view{display:flex;flex-direction:column;gap:16px}
/* 页签切换：新视图淡入 + 轻微上浮，替代生硬的显示/隐藏跳变 */
.view-enter{animation:viewIn .34s cubic-bezier(.22,.81,.29,1) both}
@keyframes viewIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}

/* ---------- 面板 ---------- */
.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:18px;box-shadow:var(--shadow)}
.panel-title{font-size:14.5px}
.panel.hero{background:linear-gradient(160deg,#fbfbff,#f2f3ff);border-color:#dfe2f6}
.panel.hero h2{font-size:19px;margin-bottom:8px}
.steps{margin:14px 0 16px;padding-left:20px;color:var(--text-2)}
.steps li{margin-bottom:6px}

.row-between{display:flex;align-items:center;justify-content:space-between}
.row-between.wrap{flex-wrap:wrap}
.row-gap{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.row-gap.sm{gap:8px}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.hint{color:var(--muted);font-size:12.4px;margin-top:10px;line-height:1.6}

/* ---------- 分段控件 ---------- */
.seg{display:inline-flex;background:var(--bg-soft);border-radius:10px;padding:3px;gap:2px}
.seg-item{
  border:none;background:transparent;color:var(--text-2);
  padding:7px 14px;border-radius:8px;font-weight:600;font-size:13px;white-space:nowrap;
  transition:background .24s cubic-bezier(.4,0,.2,1),color .24s cubic-bezier(.4,0,.2,1),
             box-shadow .24s cubic-bezier(.4,0,.2,1),transform .16s cubic-bezier(.22,.81,.29,1);
}
.seg-item:hover{color:var(--text);background:rgba(255,255,255,.66)}
.seg-item:active{transform:scale(.97)}
.seg-item.active{background:#fff;color:var(--primary);box-shadow:0 1px 3px rgba(23,32,56,.12)}

/* 阅读理解顶部控制条：模式 / 难度 / 题材 / 题量 / 生成 全部排在同一行 */
.readbar{display:flex;align-items:center;gap:10px 12px;flex-wrap:wrap}
.readbar .field-inline select{min-width:104px}
.readbar .field-inline input[type=number]{width:80px;flex:0 0 80px}
.readbar .btn.primary{margin-left:auto}

/* ---------- 表单 ---------- */
.field{display:flex;flex-direction:column;gap:6px;margin-top:12px}
.field>span{font-size:12.6px;font-weight:600;color:var(--text-2)}
input[type=text],input[type=password],input[type=number],input[type=search],input[type=date],select,textarea{
  width:100%;padding:9px 12px;border:1px solid var(--line);border-radius:var(--radius-sm);
  background:#fff;outline:none;transition:.15s;
}
input:focus,select:focus,textarea:focus{border-color:#a9a4f0;box-shadow:0 0 0 3px rgba(79,70,229,.12)}
textarea{resize:vertical;line-height:1.6}
select{cursor:pointer;appearance:none;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'><path d='M2 4.5L6 8.5L10 4.5' fill='none' stroke='%238b95a7' stroke-width='1.6' stroke-linecap='round'/></svg>");background-repeat:no-repeat;background-position:right 11px center;padding-right:30px}
.input-row{display:flex;gap:8px;align-items:center}
.field-inline{display:flex;align-items:center;gap:8px}
.field-inline label{font-size:12.6px;font-weight:600;color:var(--text-2);white-space:nowrap}
.field-inline select{width:auto;min-width:112px}

.switch{display:inline-flex;align-items:center;gap:8px;font-size:13px;color:var(--text-2);cursor:pointer;user-select:none}
.switch input{display:none}
.switch .track{width:36px;height:20px;border-radius:999px;background:#d6dbe6;position:relative;transition:.18s;flex:0 0 36px}
.switch .track::after{content:"";position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:#fff;transition:.18s;box-shadow:0 1px 3px rgba(0,0,0,.2)}
.switch input:checked + .track{background:var(--primary)}
.switch input:checked + .track::after{transform:translateX(16px)}

/* ---------- 记分条 ---------- */
.scorebar{
  display:flex;align-items:center;gap:22px;flex-wrap:wrap;
  background:#fff;border:1px solid var(--line);border-radius:var(--radius);
  padding:12px 18px;box-shadow:var(--shadow);
}
.score-item{display:flex;align-items:baseline;gap:5px;font-size:12.6px;color:var(--muted);font-weight:600}
.score-item b{font-size:17px;color:var(--text);font-variant-numeric:tabular-nums}
.score-item b.ok{color:var(--ok)}
.score-item i{font-style:normal;color:var(--muted)}
.score-actions{margin-left:auto}

/* ---------- 题目卡 ---------- */
.qlist{display:flex;flex-direction:column;gap:14px}
.qcard{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:18px;box-shadow:var(--shadow);position:relative}
.qcard.answered-right{border-color:#c6ebd6}
.qcard.answered-wrong{border-color:#f6ccd4}
.qhead{display:flex;align-items:center;gap:9px;margin-bottom:10px}
.qidx{
  width:24px;height:24px;flex:0 0 24px;border-radius:7px;background:var(--primary-soft);color:var(--primary);
  display:flex;align-items:center;justify-content:center;font-weight:700;font-size:12.5px;
}
.qtag{font-size:11.5px;font-weight:600;color:var(--muted);background:var(--bg-soft);padding:3px 9px;border-radius:999px}
/* 作答前隐藏考点 / 取材单词标签：它们会提前泄露答案（如直接写出被考的单词）。
   卡片在判分后才会被加上 answered-right / answered-wrong，届时标签自动出现。 */
.qcard:not(.answered-right):not(.answered-wrong) .qtag{display:none}
.qstate{margin-left:auto;font-size:12.5px;font-weight:700}
.qstem{font-family:var(--serif);font-size:16px;line-height:1.85;color:var(--text);margin:4px 0 14px}
.qstem .blank{display:inline-block;min-width:76px;border-bottom:1.5px solid var(--text-2);margin:0 4px;text-align:center;vertical-align:baseline}

.opts{display:flex;flex-direction:column;gap:9px}
.opt{
  display:flex;align-items:flex-start;gap:10px;width:100%;text-align:left;
  border:1px solid var(--line);background:#fff;border-radius:10px;padding:10px 13px;
  font-size:14.2px;line-height:1.6;color:inherit;
  transition:border-color .2s cubic-bezier(.4,0,.2,1),background .2s cubic-bezier(.4,0,.2,1),
             box-shadow .24s cubic-bezier(.4,0,.2,1),transform .16s cubic-bezier(.22,.81,.29,1);
}
.opt:hover:not(:disabled):not(.locked){border-color:#c3c0f0;background:#fbfbff;transform:translateX(2px);box-shadow:0 5px 14px -10px rgba(79,70,229,.85)}
.opt .k{
  width:22px;height:22px;flex:0 0 22px;border-radius:6px;background:var(--bg-soft);
  display:flex;align-items:center;justify-content:center;font-weight:700;font-size:12.5px;color:var(--text-2);
  transition:background .2s ease,color .2s ease;
}
.opt .v{flex:1;min-width:0}
.opt.correct{border-color:#9de0bb;background:var(--ok-soft);animation:optPop .36s cubic-bezier(.22,.81,.29,1)}
.opt.correct .k{background:var(--ok);color:#fff}
.opt.wrong{border-color:#f2a8b6;background:var(--bad-soft);animation:optPop .36s cubic-bezier(.22,.81,.29,1)}
.opt.wrong .k{background:var(--bad);color:#fff}
@keyframes optPop{0%{transform:scale(1)}42%{transform:scale(1.02)}100%{transform:scale(1)}}
.opt:disabled{cursor:default}
.opt.locked{cursor:default}

/* ---------- 单选题里的「可点击单词」 ----------
   规则：点英文单词 = 查释义；点选项的其他位置 = 选答案。
   作答后 .opt 只会加 .locked（不用 disabled），否则按钮内部收不到点击事件、
   选项里的单词就点不开了。 */
.qcard .w{cursor:pointer;border-radius:3px;transition:background .12s,box-shadow .12s}
.qcard .w:hover{background:#e9edfa;box-shadow:inset 0 0 0 1px #d5ddf3}
.qcard .w-def{border-bottom:1px dotted #a9b4cc}
.qcard .w-user{background:#ffe2ec;border-bottom:2px solid #ff9dbb;color:#9c2447;font-weight:600;padding:0 1px}
/* 选项里的单词要比按钮本身更「亮」，用户才知道点哪里是查词而不是选答案 */
.opt .v .w:hover{background:#e4e9fb;box-shadow:inset 0 0 0 1px #c3cbf0}
.qtag-word{cursor:pointer}
.qtag-word:hover{background:var(--primary-soft);color:var(--primary-dark)}

/* ---------- 逐题翻译（题干 + 选项 → 中文） ----------
   按钮在 .qhead 里靠右（.qstate 已经 margin-left:auto 把后半段推到右边）。
   译文不做成覆盖层：题干译文接在题干下方，选项译文各自贴在选项下方，
   这样学生能中英对照着读，也不用遮住英文原文。 */
.qtrans{
  flex:0 0 auto;white-space:nowrap;
  border:1px solid var(--line);background:#fff;color:var(--primary);
  font-size:12px;font-weight:600;line-height:1;padding:5px 11px;border-radius:999px;
  transition:background .16s ease,border-color .16s ease,color .16s ease,transform .16s ease;
}
.qtrans:hover{border-color:#c3c0f0;background:#f7f7ff}
.qtrans:active{transform:translateY(1px)}
.qtrans.busy{color:var(--muted);border-color:var(--line)}
.qtrans[data-on="1"]{background:var(--primary-soft);border-color:#c9c4f5;color:var(--primary-dark)}
.qzh-stem{
  font-family:var(--font);font-size:13.6px;line-height:1.75;color:var(--text-2);
  background:#f7f8fd;border-left:3px solid #c9c4f5;border-radius:0 8px 8px 0;
  padding:8px 12px;margin:-6px 0 14px;
  animation:zhIn .22s cubic-bezier(.22,.81,.29,1);
}
/* .opt 是 flex 容器，.v 作为 flex 项被块化，因此里面的 .zh 用 display:block 就能换行 */
.opt .zh{
  display:block;font-size:12.8px;line-height:1.6;color:var(--text-2);
  margin-top:4px;padding-top:4px;border-top:1px dashed var(--line-2);
}
@keyframes zhIn{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){ .qzh-stem{animation:none} }

.explainbox{margin-top:14px;border-top:1px dashed var(--line);padding-top:12px}
.explain-toggle{
  border:none;background:transparent;color:var(--primary);font-weight:600;font-size:13px;
  padding:0;display:inline-flex;align-items:center;gap:5px;
  transition:color .18s ease;
}
.explain-toggle:hover{color:var(--primary-dark)}
.explain-toggle::before{content:"▸";transition:transform .22s cubic-bezier(.22,.81,.29,1);display:inline-block;font-size:11px}
.explain-toggle.open::before{transform:rotate(90deg)}
.explain{padding-top:10px;color:var(--text-2);font-size:13.6px;line-height:1.8;white-space:pre-wrap}

/* ---------- 阅读 ---------- */
.readhead{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;flex-wrap:wrap}
.readhead h3{font-size:17px;font-family:var(--serif)}
.metarow{display:flex;gap:8px;flex-wrap:wrap;margin-top:6px}
.tag{font-size:11.5px;font-weight:600;padding:3px 9px;border-radius:999px;background:var(--bg-soft);color:var(--text-2)}
.tag.pool{background:var(--primary-soft);color:var(--primary)}
.tag.ok{background:var(--ok-soft);color:var(--ok)}

.readgrid{display:grid;grid-template-columns:1fr 1fr;gap:0;margin-top:16px;border:1px solid var(--line);border-radius:12px;overflow:hidden;background:#fff}
.readcol{padding:18px 20px;min-width:0}
.readcol + .readcol{border-left:1px solid var(--line);background:#fcfcff}
.readcol h4{font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:700;margin-bottom:10px}

/* ---------- 阅读右栏：题目面板 + 可覆盖其上的译文层 ----------
   右栏的高度**完全由左栏文章决定**（栅格默认拉伸），右栏内容不参与撑高：
   「题目面板」和「译文层」都是四边为 0 的绝对层，各自在自己的高度里滚动。
   于是题目面板与译文层永远等高，题目再多也只是面板内滚动，不会把整页拉长。
   （padding 必须放在内层，否则四边 0 的层会对齐到 padding 外沿、内边距叠两层。） */
.readcol.readside{position:relative;overflow:hidden;padding:0;min-height:420px}
.readside-main{position:absolute;top:0;right:0;bottom:0;left:0;overflow:auto;padding:18px 20px;min-width:0}
.readside-empty{margin-top:6px;font-size:13px;line-height:1.9;color:var(--muted)}
.readzh{
  position:absolute;top:0;right:0;bottom:0;left:0;z-index:3;padding:18px 20px;overflow:auto;background:#fcfcff;
  opacity:0;visibility:hidden;transform:translateX(22px);
  transition:opacity .26s ease,transform .32s cubic-bezier(.22,.81,.29,1),visibility .32s;
}
.readzh.show{opacity:1;visibility:visible;transform:none}
.readzh-top{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px}
.readzh-top h4{margin-bottom:0}
.readzh-close{
  border:1px solid var(--line);background:#fff;color:var(--primary);font-size:12px;font-weight:600;
  padding:4px 11px;border-radius:999px;flex:0 0 auto;
  transition:border-color .18s ease,background .18s ease,transform .16s ease,box-shadow .22s ease;
}
.readzh-close:hover{border-color:#c3c0f0;background:#f7f7ff;transform:translateY(-1px);box-shadow:0 4px 12px -9px rgba(79,70,229,.8)}
.readzh-close:active{transform:translateY(1px) scale(.98)}

/* 右栏页签：习题 / 固定搭配·语法 */
.side-tabs{display:flex;gap:6px;background:var(--bg-soft);border-radius:10px;padding:3px;margin-bottom:12px}
.side-tab{
  flex:1;border:none;background:transparent;color:var(--text-2);cursor:pointer;
  padding:7px 10px;border-radius:8px;font-weight:600;font-size:12.6px;white-space:nowrap;
  transition:background .24s cubic-bezier(.4,0,.2,1),color .24s cubic-bezier(.4,0,.2,1),
             box-shadow .24s cubic-bezier(.4,0,.2,1),transform .16s cubic-bezier(.22,.81,.29,1);
}
.side-tab:hover{color:var(--text);background:rgba(255,255,255,.66)}
.side-tab:active{transform:scale(.97)}
.side-tab.active{background:#fff;color:var(--primary);box-shadow:0 1px 3px rgba(23,32,56,.12)}
.side-pane:not([hidden]){animation:paneIn .3s cubic-bezier(.22,.81,.29,1) both}
@keyframes paneIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.side-pane-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px}
.side-pane-head h4{margin-bottom:0}
/* 两块面板的滚动条收窄，不抢视觉 */
.readside-main,.readzh{scrollbar-width:thin;scrollbar-color:#d9dcf0 transparent}
.readside-main::-webkit-scrollbar,.readzh::-webkit-scrollbar{width:8px}
.readside-main::-webkit-scrollbar-thumb,.readzh::-webkit-scrollbar-thumb{background:#d9dcf0;border-radius:4px}
.readside-main::-webkit-scrollbar-thumb:hover,.readzh::-webkit-scrollbar-thumb:hover{background:#c3c8e6}
.readside-main::-webkit-scrollbar-track,.readzh::-webkit-scrollbar-track{background:transparent}
@media (prefers-reduced-motion:reduce){
  .readzh{transition:none;transform:none}
  .view-enter,.side-pane:not([hidden]),.opt.correct,.opt.wrong,.toast,.modal-mask,.modal-card{animation:none}
  .btn,.tab,.seg-item,.side-tab,.opt,.colitem,.pitem,.hitem,.readzh-close,.icon-btn,
  .explain-toggle,.chip-btn,.stag button{transition:none}
  .btn:hover,.btn:active,.opt:hover:not(:disabled):not(.locked),.colitem:hover,
  .pitem:hover,.icon-btn:hover,.readzh-close:hover{transform:none}
}

.passage{font-family:var(--serif);font-size:16.2px;line-height:2;white-space:pre-wrap;color:#1b2330}
.passage p{margin:0 0 12px}
.trans{font-size:14.6px;line-height:2.05;white-space:pre-wrap;color:var(--text-2);font-family:var(--font)}
.fire{color:var(--text-2);font-size:15px}
.fire .fire-title{font-size:17px;font-weight:700;color:var(--text);font-family:var(--serif);margin-bottom:8px}
mark.hl{background:var(--mark);color:#6b4b00;padding:0 3px;border-radius:3px;font-weight:600}

/* 原文单词：可点击查释义 */
.passage .w{cursor:pointer;border-radius:3px;transition:background .12s,box-shadow .12s}

/* 被动标记（单词池高亮 / 已收录点线）只在 .show-zh 下可见：
   未点「显示中文」时原文干干净净，任何高亮和下划线都不出现。
   这两条必须写在 .w:hover 之前 —— 选择器权重相同（0,3,0），后写的赢，
   这样悬停时看到的仍是 hover 底色，和以前一致。 */
.passage.show-zh .w-pool{background:#f6f5ff;border-bottom:2px solid #c9c4f5;border-radius:2px;padding:0 1px}
.passage.show-zh .w-def{border-bottom:1px dotted #a9b4cc}

.passage .w:hover{background:#e9edfa;box-shadow:inset 0 0 0 1px #d5ddf3}

.whint{font-size:12.2px;color:var(--muted);margin-top:10px;line-height:1.6}
.whint .dot{display:inline-block;width:9px;height:9px;border-radius:2px;vertical-align:-1px;margin:0 3px 0 0}
.whint .dot.pool{background:#f6f5ff;border:1px solid #c9c4f5}

/* 点击右栏「固定搭配」后，把原文里命中的整组词一起点亮（权重 0,3,0，压得住 .w-pool） */
.passage .w.w-hl{
  background:#c9f0dd;box-shadow:inset 0 0 0 1px #6fd3a4;border-bottom:2px solid #6fd3a4;
  border-radius:3px;color:#0f5136;font-weight:600;padding:0 1px;
  animation:hlIn .34s cubic-bezier(.22,.81,.29,1);
}
@keyframes hlIn{from{background:#eafaf1;box-shadow:inset 0 0 0 1px #b9e8d0}to{background:#c9f0dd;box-shadow:inset 0 0 0 1px #6fd3a4}}

/* ---------- 单词释义浮层 ---------- */
.wordpop{
  position:fixed;z-index:130;width:min(370px,calc(100vw - 24px));
  background:#fff;border:1px solid var(--line);border-radius:14px;
  box-shadow:var(--shadow-lg);padding:15px 16px 12px;
}
.wp-head{display:flex;align-items:baseline;gap:8px;padding-right:24px;position:relative;flex-wrap:wrap}
.wp-head b{font-family:var(--serif);font-size:19px;color:var(--text)}
.wp-ph{font-size:12.5px;color:var(--muted);font-family:var(--mono)}
.wp-pos{font-size:11.5px;font-weight:700;color:var(--primary);background:var(--primary-soft);padding:2px 7px;border-radius:999px}
.wp-head .icon-btn{position:absolute;right:-6px;top:-8px;width:28px;height:28px;font-size:18px}
.wp-row{display:flex;gap:8px;margin-top:9px;font-size:13.4px;line-height:1.72;color:var(--text-2)}
.wp-k{flex:0 0 34px;font-size:11.5px;font-weight:700;color:var(--muted);letter-spacing:.06em;padding-top:3px}
.wp-coll{display:flex;gap:8px;margin-top:9px}
.wp-coll ul{list-style:none;margin:0;padding:0;font-size:13.2px;line-height:1.78}
.wp-coll li{color:var(--text-2)}
.wp-coll li b{color:var(--text);font-family:var(--serif);font-size:13.8px}
.wp-coll li + li{margin-top:2px}
.wp-note{margin-top:10px;font-size:12.6px;line-height:1.65;color:var(--warn);background:var(--warn-soft);border-radius:8px;padding:7px 9px}
.wp-src{margin-top:9px;font-size:11.5px;color:var(--muted)}
.wp-loading{display:flex;align-items:center;gap:9px;margin-top:12px;font-size:13px;color:var(--muted)}
.wp-err{margin-top:10px;font-size:13px;line-height:1.65;color:var(--bad);background:var(--bad-soft);border-radius:8px;padding:8px 10px}
.wp-foot{display:flex;align-items:center;gap:10px;margin-top:12px;border-top:1px solid var(--line-2);padding-top:10px}
.wp-hintk{font-size:11.6px;color:var(--muted)}
.spinner.sm{width:15px;height:15px;border-width:2px;margin:0}

/* ---------- 第二模型复核状态条 ---------- */
.reviewbar{
  display:flex;flex-wrap:wrap;gap:4px 10px;align-items:baseline;
  margin:12px 0 2px;padding:9px 12px;border-radius:10px;
  font-size:12.6px;line-height:1.65;border:1px solid transparent;
}
.reviewbar b{font-weight:700}
.reviewbar > span{color:var(--text-2)}
.reviewbar.ok{background:var(--ok-soft);border-color:#c9ead8;color:var(--ok)}
.reviewbar.fixed{background:var(--warn-soft);border-color:#f0dcb8;color:var(--warn)}
.reviewbar.warn{background:var(--bad-soft);border-color:#f6cdd5;color:var(--bad)}
.qtag.fixed{background:var(--warn-soft);color:var(--warn)}

.wordbank{margin-top:14px;border-top:1px dashed var(--line);padding-top:12px}
.wordbank h4{font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin-bottom:8px}
.wbtags{display:flex;flex-wrap:wrap;gap:6px}
.wbtag{font-family:var(--mono);font-size:12px;background:var(--primary-soft);color:var(--primary-dark);padding:3px 8px;border-radius:6px;font-weight:600}
.wbtag.user{background:#ffe2ec;color:#9c2447}

/* ---------- 阅读语法详解 & 固定搭配 ---------- */
.subhead{font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin:18px 0 10px;padding-bottom:6px;border-bottom:1px solid var(--line-2)}
.subhead:first-child{margin-top:0}
/* 语法/搭配为空时的说明条：不让这一栏「无声消失」 */
.ghint{
  margin:0;font-size:12.6px;line-height:1.75;color:var(--text-2);
  background:var(--bg-soft);border:1px dashed var(--line);border-radius:9px;padding:10px 12px;
}
.glist{display:flex;flex-direction:column;gap:12px}
.gitem{border:1px solid var(--line);border-left:3px solid var(--primary);border-radius:10px;padding:12px 14px;background:var(--panel-2)}
.gpoint{display:flex;align-items:center;gap:8px;font-weight:700;font-size:14px;color:var(--primary-dark)}
.gnum{flex:0 0 20px;width:20px;height:20px;border-radius:50%;background:var(--primary-soft);color:var(--primary);font-size:11.5px;display:inline-flex;align-items:center;justify-content:center;font-weight:700}
.gex{font-family:var(--serif);font-size:14.2px;color:#1b2330;margin:8px 0 0;padding-left:11px;border-left:2px solid var(--line);font-style:italic}
.gdesc{font-size:13.4px;color:var(--text-2);margin-top:8px;line-height:1.75;white-space:pre-wrap}
/* 固定搭配：不再展示例句，改为「点条目 → 原文高亮」（所以做成按钮） */
.collist{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:9px}
.colitem{
  display:block;width:100%;text-align:left;font:inherit;color:inherit;cursor:pointer;
  border:1px solid var(--line);border-radius:10px;padding:10px 13px;background:#fff;
  transition:background .2s cubic-bezier(.4,0,.2,1),border-color .2s cubic-bezier(.4,0,.2,1),
             box-shadow .24s cubic-bezier(.4,0,.2,1),transform .16s cubic-bezier(.22,.81,.29,1);
}
.colitem:hover{border-color:#b7ddc9;background:#f4fbf7;transform:translateY(-1px);box-shadow:0 6px 16px -12px rgba(18,161,80,.9)}
.colitem:active{transform:translateY(0) scale(.99)}
.colitem.active{border-color:#6fd3a4;background:#e8f9f1;box-shadow:0 0 0 2px rgba(111,211,164,.28)}
.colph{font-family:var(--mono);font-size:13.2px;font-weight:700;color:var(--primary-dark);background:var(--primary-soft);padding:2px 7px;border-radius:5px;display:inline-block;transition:background .2s ease,color .2s ease}
.colitem.active .colph{background:#c9f0dd;color:#0f5136}
.colmean{display:block;font-size:12.6px;color:var(--text-2);margin-top:6px;line-height:1.6}

/* ---------- 历史 ---------- */
.statgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
.statcard{
  background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:16px;box-shadow:var(--shadow);
  transition:transform .2s cubic-bezier(.22,.81,.29,1),box-shadow .26s cubic-bezier(.4,0,.2,1),border-color .2s ease;
}
.statcard:hover{transform:translateY(-3px);box-shadow:0 16px 34px -22px rgba(23,32,56,.75);border-color:#dfe3ef}
.statcard .n{font-size:26px;font-weight:700;font-variant-numeric:tabular-nums;line-height:1.2}
.statcard .l{font-size:12.4px;color:var(--muted);font-weight:600;margin-top:2px}
.bar{height:7px;border-radius:999px;background:var(--bg-soft);overflow:hidden;margin-top:10px}
.bar>i{display:block;height:100%;border-radius:999px;background:linear-gradient(90deg,#6366f1,#8b5cf6)}

.histlist{display:flex;flex-direction:column;gap:8px;margin-top:14px;max-height:560px;overflow:auto}
.hitem{
  display:flex;align-items:flex-start;gap:12px;border:1px solid var(--line-2);border-radius:10px;
  padding:10px 12px;background:var(--panel-2);cursor:pointer;
  transition:background .2s cubic-bezier(.4,0,.2,1),border-color .2s cubic-bezier(.4,0,.2,1),box-shadow .24s cubic-bezier(.4,0,.2,1);
}
.hitem:hover{border-color:#d7dceb;background:#fff;box-shadow:0 6px 18px -14px rgba(23,32,56,.95)}
.hitem.nodetail{cursor:default}
.hitem .hbadge{font-size:11px;font-weight:700;padding:3px 8px;border-radius:6px;flex:0 0 auto;margin-top:1px}
.hbadge.r{background:var(--ok-soft);color:var(--ok)}
.hbadge.w{background:var(--bad-soft);color:var(--bad)}
.hitem .hbody{flex:1;min-width:0}
.hitem .hstem{font-size:13.4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hitem.open .hstem{white-space:normal;overflow:visible}
.hitem .hmeta{font-size:11.6px;color:var(--muted);margin-top:1px}
.hitem .htip{display:inline-block;margin-left:7px;font-size:11px;font-weight:600;color:var(--primary);background:var(--primary-soft);border-radius:5px;padding:0 6px}
.hitem.open .hmeta .htip{display:none}
.hitem.nodetail .htip{display:none}
.hitem .htime{font-size:11.4px;color:var(--muted);flex:0 0 auto;font-variant-numeric:tabular-nums;margin-top:1px}
.hcaret{flex:0 0 auto;color:var(--muted);font-size:11px;line-height:1.6;margin-top:1px;transition:transform .26s cubic-bezier(.22,.81,.29,1)}
.hitem.open .hcaret{transform:rotate(180deg)}
.hitem.nodetail .hcaret{opacity:.3}
/* 展开的题目详情：grid-template-rows 由 0fr → 1fr，高度自然过渡（不用 display:none 的硬切换） */
.hdetail{display:grid;grid-template-rows:0fr;opacity:0;margin-top:0;
  transition:grid-template-rows .34s cubic-bezier(.22,.81,.29,1),opacity .26s ease,margin-top .3s ease}
.hitem.open .hdetail{grid-template-rows:1fr;opacity:1;margin-top:10px}
.hdetail-in{overflow:hidden;min-height:0}
.hopts{display:flex;flex-direction:column;gap:6px}
.hopt{
  display:flex;align-items:flex-start;gap:8px;font-size:12.9px;line-height:1.6;color:var(--text-2);
  border:1px solid var(--line-2);border-radius:8px;padding:6px 10px;background:#fff;
}
.hopt .hk{
  flex:0 0 18px;width:18px;height:18px;border-radius:5px;background:var(--bg-soft);color:var(--text-2);
  display:inline-flex;align-items:center;justify-content:center;font-weight:700;font-size:11px;
}
.hopt .hv{flex:1;min-width:0}
.hopt.ans{border-color:#9de0bb;background:var(--ok-soft)}
.hopt.ans .hk{background:var(--ok);color:#fff}
.hopt.wrong-pick{border-color:#f2a8b6;background:var(--bad-soft)}
.hopt.wrong-pick .hk{background:var(--bad);color:#fff}
.hmark{flex:0 0 auto;font-size:10.5px;font-weight:700;border-radius:999px;padding:1px 7px;background:var(--ok);color:#fff;align-self:center}
.hmark.pick{background:var(--primary)}
.hexp{margin-top:8px;font-size:12.6px;line-height:1.75;color:var(--text-2);background:#fff;border:1px dashed var(--line);border-radius:8px;padding:8px 11px;white-space:pre-wrap}
.hexp b{color:var(--text);margin-right:6px}
.hnone{font-size:12.4px;color:var(--muted);line-height:1.7}
.empty{text-align:center;color:var(--muted);padding:30px 10px;font-size:13px}

/* ---------- 弹窗 ---------- */
.modal{position:fixed;inset:0;z-index:90;display:flex;align-items:center;justify-content:center;padding:20px}
.modal-mask{position:absolute;inset:0;background:rgba(22,28,45,.42);backdrop-filter:blur(3px);animation:fade .18s ease}
.modal-card{
  position:relative;background:#fff;border-radius:16px;box-shadow:var(--shadow-lg);
  width:100%;max-width:560px;max-height:88vh;display:flex;flex-direction:column;animation:pop .24s cubic-bezier(.22,.81,.29,1);
}
.modal-card.wide{max-width:760px}
/* 关闭时先播一遍退场动画，再由 JS 置 hidden */
.modal.closing .modal-mask{animation:fadeOut .16s ease forwards}
.modal.closing .modal-card{animation:popOut .16s ease forwards}
@keyframes fade{from{opacity:0}to{opacity:1}}
@keyframes fadeOut{from{opacity:1}to{opacity:0}}
@keyframes pop{from{opacity:0;transform:translateY(10px) scale(.985)}to{opacity:1;transform:none}}
@keyframes popOut{from{opacity:1;transform:none}to{opacity:0;transform:translateY(8px) scale(.99)}}
.modal-head{display:flex;align-items:center;justify-content:space-between;padding:16px 18px;border-bottom:1px solid var(--line)}
.modal-head h3{font-size:15.5px}
.modal-body{padding:6px 18px 18px;overflow:auto}
.modal-foot{display:flex;align-items:center;gap:10px;padding:14px 18px;border-top:1px solid var(--line);background:var(--panel-2);border-radius:0 0 16px 16px}
.group{padding-top:6px}
.group+.group{border-top:1px solid var(--line-2);margin-top:18px}
.group-title{font-size:12.4px;font-weight:700;color:var(--primary);letter-spacing:.05em;margin-top:14px}
.modal-msg{margin-top:14px;padding:10px 12px;border-radius:9px;font-size:13px;line-height:1.6}
.modal-msg.err{background:var(--bad-soft);color:var(--bad)}
.modal-msg.ok{background:var(--ok-soft);color:var(--ok)}
.modal-msg.info{background:var(--warn-soft);color:var(--warn)}

.poolmeta{display:flex;flex-wrap:wrap;gap:8px 16px;color:var(--muted);font-size:12.6px;background:var(--panel-2);border:1px solid var(--line-2);border-radius:10px;padding:10px 12px}
.poollist{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:7px;margin-top:14px;max-height:46vh;overflow:auto}
.pitem{
  border:1px solid var(--line-2);border-radius:8px;padding:7px 10px;background:var(--panel-2);min-width:0;position:relative;cursor:pointer;
  transition:border-color .2s cubic-bezier(.4,0,.2,1),background .2s cubic-bezier(.4,0,.2,1),
             box-shadow .24s cubic-bezier(.4,0,.2,1),transform .16s cubic-bezier(.22,.81,.29,1);
}
.pitem:hover{border-color:#c3c0f0;background:#fbfbff;transform:translateY(-2px);box-shadow:0 9px 20px -14px rgba(79,70,229,.95)}
.pitem:active{transform:translateY(0) scale(.99)}
.pitem:hover::after{
  content:"查释义";position:absolute;right:7px;top:5px;font-size:10.5px;font-weight:700;
  color:var(--primary);background:var(--primary-soft);padding:1px 6px;border-radius:5px;
}
.pitem .pw{font-family:var(--mono);font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pitem .pm{font-size:11.4px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pitem.strong{border-color:#f0dcb8;background:var(--warn-soft)}
.pitem.strong .pw{color:var(--warn)}
.pitem .pstar{color:var(--warn);margin-right:3px;font-size:11px}
.importbox{background:var(--panel-2);border:1px solid var(--line);border-radius:11px;padding:12px;margin-top:12px}

/* ---------- 单词温习 ---------- */
.reviewcard{text-align:left}
.rc-top{display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin-bottom:6px}
.rc-prog{font-size:12.4px;font-weight:700;color:var(--muted)}
.rc-badge{font-size:11.5px;font-weight:700;padding:3px 9px;border-radius:999px;background:var(--bg-soft);color:var(--text-2)}
.rc-badge.strong{background:var(--warn-soft);color:var(--warn)}
.rc-word{
  font-family:var(--serif);font-size:clamp(28px,6vw,42px);font-weight:700;line-height:1.25;
  text-align:center;margin:22px 0 8px;word-break:break-word;letter-spacing:.4px;
}
.rc-ask{text-align:center;color:var(--muted);font-size:12.8px;margin-bottom:4px}
.rc-ask b.rc-st{font-size:13.6px}
.rc-st.known{color:var(--ok)}
.rc-st.vague{color:var(--warn)}
.rc-st.forgot{color:var(--bad)}
.rc-actions{display:flex;gap:10px;justify-content:center;flex-wrap:wrap;margin-top:18px}
.rc-actions .btn{min-width:106px;justify-content:center}
.rc-tip{text-align:center;font-size:11.8px;color:var(--muted);margin-top:12px}
.btn.mark-know{border-color:#9de0bb;background:var(--ok-soft);color:var(--ok)}
.btn.mark-know:hover{background:#d6f2e3;border-color:#7fd4a8}
.btn.mark-vague{border-color:#f0dcb8;background:var(--warn-soft);color:var(--warn)}
.btn.mark-vague:hover{background:#fbe9cd;border-color:#e6c98f}
.btn.mark-forgot{border-color:#f2a8b6;background:var(--bad-soft);color:var(--bad)}
.btn.mark-forgot:hover{background:#fbdae1;border-color:#eb92a5}
.rc-def{
  border:1px solid var(--line);border-radius:12px;background:var(--panel-2);
  padding:14px 16px;margin:14px auto 0;max-width:560px;
}
.rc-def .wp-head{padding-right:0}
.rc-sum{display:flex;gap:16px;justify-content:center;flex-wrap:wrap;margin:18px 0 6px}
.rc-sum>div{text-align:center;min-width:74px}
.rc-sum b{display:block;font-size:26px;line-height:1.2;font-variant-numeric:tabular-nums}
.rc-sum span{font-size:12.2px;color:var(--muted);font-weight:600}
.rc-sum .k b{color:var(--ok)}
.rc-sum .v b{color:var(--warn)}
.rc-sum .f b{color:var(--bad)}
.count-badge{display:inline-block;font-size:12px;font-weight:700;background:var(--warn-soft);color:var(--warn);border-radius:999px;padding:2px 9px;margin-left:7px;vertical-align:1px}
.stronglist{display:flex;flex-wrap:wrap;gap:7px;margin-top:12px}
.stronglist:empty{margin-top:0}
.stag{
  display:inline-flex;align-items:center;gap:6px;font-family:var(--mono);font-size:12.4px;font-weight:600;
  background:var(--warn-soft);color:var(--warn);border:1px solid #f0dcb8;padding:4px 8px 4px 10px;border-radius:8px;
}
.stag .scount{font-style:normal;font-size:11px;opacity:.75;font-family:var(--font)}
.stag button{border:none;background:transparent;color:inherit;font-size:15px;line-height:1;padding:0 2px;opacity:.6}
.stag button:hover{opacity:1}

/* ---------- 提示 ---------- */
.toasts{position:fixed;top:76px;right:20px;z-index:120;display:flex;flex-direction:column;gap:9px;max-width:360px}
.toast{
  background:#fff;border:1px solid var(--line);border-left:3px solid var(--primary);
  border-radius:10px;padding:11px 14px;box-shadow:var(--shadow-lg);font-size:13.2px;line-height:1.6;
  animation:slide .22s ease;word-break:break-word;
}
.toast.err{border-left-color:var(--bad)}
.toast.ok{border-left-color:var(--ok)}
.toast.warn{border-left-color:var(--warn)}
.toast b{display:block;margin-bottom:2px;font-size:13.4px}
@keyframes slide{from{opacity:0;transform:translateX(16px)}to{opacity:1;transform:none}}

/* ---------- 加载遮罩 ---------- */
.overlay{position:fixed;inset:0;z-index:110;background:rgba(244,246,251,.8);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center}
.overlay-card{background:#fff;border:1px solid var(--line);border-radius:16px;padding:26px 30px;box-shadow:var(--shadow-lg);text-align:center;min-width:250px}
.overlay-card p{margin-top:14px;font-size:13.6px;color:var(--text-2);font-weight:600}
.overlay-card .overlay-sub{margin-top:7px;font-size:12.2px;font-weight:500;color:var(--muted);font-variant-numeric:tabular-nums;min-height:17px}
.overlay-card .overlay-actions{display:flex;justify-content:center;gap:8px;margin-top:16px}
.overlay-card .btn{margin-top:0}
.spinner{width:34px;height:34px;margin:0 auto;border-radius:50%;border:3px solid var(--primary-soft);border-top-color:var(--primary);animation:spin .8s linear infinite}

/* 骨架屏 */
.skel{background:linear-gradient(90deg,#eef1f7 25%,#f7f9fc 37%,#eef1f7 63%);background-size:400% 100%;animation:shimmer 1.3s ease infinite;border-radius:8px}
@keyframes shimmer{0%{background-position:100% 50%}100%{background-position:0 50%}}
.skel-card{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:18px;box-shadow:var(--shadow)}
.skel-line{height:13px;margin-bottom:10px}

/* ---------- 页脚 ---------- */
.footer{display:flex;justify-content:space-between;gap:12px;padding-bottom:0;color:var(--muted);font-size:12px;border-top:1px solid var(--line);padding-top:14px;flex-wrap:wrap}

/* ---------- 响应式 ---------- */
@media (max-width:900px){
  .statgrid{grid-template-columns:repeat(2,1fr)}
  .readgrid{grid-template-columns:1fr}
  .readcol + .readcol{border-left:none;border-top:1px solid var(--line)}
  /* 单列堆叠时右栏在文章下方，没有「与左栏等高」的比较对象，
     让题目按内容自然展开，避免在手机上出现一个很矮的小滚动条 */
  .readcol.readside{min-height:0}
  .readside-main{position:static;overflow:visible}
}
@media (max-width:720px){
  .wrap{padding:0 14px}
  .topbar-inner{height:auto;padding:10px 0;flex-direction:column;align-items:stretch;gap:10px}
  .topbar-actions{justify-content:space-between;flex-wrap:wrap}
  .tabs{max-width:none;margin-top:14px}
  .grid2{grid-template-columns:1fr}
  .qstem{font-size:15.2px}
  .passage{font-size:15.6px}
  .toasts{left:14px;right:14px;top:auto;bottom:14px;max-width:none}
}
