/* ═══════════════════════════════════════════════
   星星作业本 · 样式
   设计原则：圆润、明亮、低刺激色块、大点击区域
   ═══════════════════════════════════════════════ */

:root{
  --c-bg:#eef4ff;
  --c-bg2:#f7fafe;
  --c-card:#ffffff;
  --c-ink:#26334d;
  --c-sub:#7a8aa8;
  --c-line:#e2eaf7;

  --c-star:#ffc531;
  --c-star-deep:#f0a800;

  --c-cn:#ff8a80;
  --c-cn-bg:#fff0ee;
  --c-ma:#5aa9f5;
  --c-ma-bg:#eaf4ff;
  --c-en:#5ecf9a;
  --c-en-bg:#e9fbf2;
  --c-ot:#c49bf0;
  --c-ot-bg:#f5eefd;

  --c-primary:#4a90ff;
  --c-primary-deep:#2f6fe0;

  --r-lg:22px;
  --r-md:16px;
  --r-sm:11px;

  --sh-sm:0 2px 8px rgba(74,120,200,.08);
  --sh-md:0 6px 20px rgba(74,120,200,.13);
  --sh-lg:0 14px 40px rgba(60,110,190,.20);
}

*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent;}

/* hidden 属性优先级最高，防止类选择器的 display 覆盖 */
[hidden]{display:none !important;}

html,body{height:100%;}

/* App 外壳：body 作为 flex 纵向容器，顶栏 + 主区域(可滚动) + 底部导航 三段固定，
   主区域内部滚动，底部导航不再用 fixed 浮层压住内容（避免最下方任务卡遮挡「拍照上传」按钮）。 */
body{
  display:flex;
  flex-direction:column;
  font-family:"PingFang SC","Microsoft YaHei",-apple-system,"Hiragino Sans GB",system-ui,sans-serif;
  background:
    radial-gradient(1100px 520px at 12% -8%, #dceaff 0%, transparent 62%),
    radial-gradient(900px 460px at 92% 4%, #ffeede 0%, transparent 58%),
    var(--c-bg);
  background-attachment:fixed;
  color:var(--c-ink);
  line-height:1.7;
  font-size:15.5px;
  min-height:100%;
}

/* ────────────── 图标（SVG 图标体系，取代 emoji） ────────────── */
.ic{
  display:inline-block;
  vertical-align:-0.18em;
  flex:none;
  line-height:1;
}
/* 图标与右侧文字的常规间距；只给带 ic-gap 的场合，避免影响纯装饰图标 */
.ic-gap{margin-right:.34em;}
button .ic,
.ic-btn{margin-right:.36em;}

/* ────────────── 顶栏 ────────────── */
.topbar{
  position:sticky;top:0;z-index:60;
  background:rgba(255,255,255,.86);
  backdrop-filter:blur(14px);
  border-bottom:1px solid var(--c-line);
}
.topbar-inner{
  max-width:900px;margin:0 auto;
  display:flex;align-items:center;gap:16px;
  padding:11px 18px;
}
.logo{display:flex;align-items:center;gap:7px;flex:none;}
.logo-star{font-size:21px;color:var(--c-star);text-shadow:0 2px 5px rgba(255,197,49,.5);}
.logo-text{font-weight:800;font-size:17px;letter-spacing:.5px;
  background:linear-gradient(92deg,#4a90ff,#7a5df0);
  -webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;}

.progress-hud{flex:1;min-width:0;}
.hud-label{font-size:12.5px;color:var(--c-sub);margin-bottom:4px;font-weight:600;}
.hud-track{height:11px;background:#e6eefb;border-radius:99px;overflow:hidden;
  box-shadow:inset 0 1px 3px rgba(80,120,190,.12);}
.hud-fill{height:100%;width:0;border-radius:99px;
  background:linear-gradient(90deg,#7ed0a0,#5aa9f5,#8b7cf6);
  transition:width .7s cubic-bezier(.34,1.4,.5,1);
  box-shadow:0 0 10px rgba(90,169,245,.5);}
.hud-count{font-size:12px;color:var(--c-sub);margin-top:3px;font-weight:600;text-align:right;}

.star-wallet{
  flex:none;display:flex;align-items:center;gap:5px;
  background:linear-gradient(140deg,#fff6db,#ffe9a8);
  border:2px solid #ffdf8a;border-radius:99px;
  padding:6px 15px 6px 12px;cursor:default;
  box-shadow:0 3px 10px rgba(240,168,0,.22);
}
.star-icon{color:var(--c-star-deep);font-size:17px;}
.star-num{font-weight:800;font-size:17px;color:#b8760a;font-variant-numeric:tabular-nums;}
.star-wallet.pop{animation:walletPop .55s cubic-bezier(.34,1.56,.64,1);}
@keyframes walletPop{0%{transform:scale(1)}45%{transform:scale(1.22)}100%{transform:scale(1)}}

.btn-cfg{
  flex:none;width:36px;height:36px;border-radius:50%;border:1.5px solid var(--c-line);
  background:#fff;font-size:16px;cursor:pointer;transition:all .2s ease;
}
.btn-cfg:hover{border-color:var(--c-primary);transform:rotate(35deg);}

.app-ver{
  flex:none;align-self:center;
  font-size:11px;line-height:1;color:#93a1b3;
  background:rgba(255,255,255,.6);
  border:1px solid rgba(120,140,160,.2);
  border-radius:999px;padding:5px 10px;
  font-variant-numeric:tabular-nums;letter-spacing:.3px;
  cursor:default;user-select:none;white-space:nowrap;
}

.cfg-label{display:block;font-size:13px;font-weight:700;color:#4a5b78;margin:13px 0 5px;}
.cfg-input{
  width:100%;border:1.5px solid var(--c-line);border-radius:11px;padding:10px 13px;
  font-family:inherit;font-size:13.5px;color:var(--c-ink);background:#fbfdff;
  transition:border-color .2s ease;
}
.cfg-input:focus{outline:none;border-color:var(--c-primary);background:#fff;}
.cfg-status{margin-top:12px;font-size:13px;font-weight:600;}
.cfg-status.ok{color:#1a9e64;}
.cfg-status.err{color:#d9534f;}
.cfg-help{margin-top:14px;font-size:12.5px;color:var(--c-sub);line-height:1.75;
  background:#f7faff;border-radius:10px;padding:10px 13px;}

/* ── 引擎选择 ── */
.cfg-engine{display:grid;gap:9px;}
.ce-item{
  display:flex;align-items:flex-start;gap:10px;
  border:1.5px solid var(--c-line);border-radius:13px;padding:12px 13px;
  background:#fbfdff;cursor:pointer;transition:all .2s ease;
}
.ce-item:active{transform:scale(.99);}
.ce-item.on{border-color:var(--c-primary);background:#f2f8ff;box-shadow:0 0 0 3px rgba(90,169,245,.12);}
.ce-item input[type="radio"]{
  flex:none;width:18px;height:18px;margin-top:1px;accent-color:var(--c-primary);cursor:pointer;
}
.ce-txt{flex:1;min-width:0;}
.ce-txt b{display:block;font-size:13.5px;color:#33415c;font-weight:800;margin-bottom:3px;}
.ce-txt small{display:block;font-size:12px;color:var(--c-sub);line-height:1.6;}
.cfg-model-block{margin-top:4px;padding-top:2px;}
.cfg-model-block[hidden]{display:none !important;}

/* ────────────── 舞台 ────────────── */
.stage{max-width:900px;margin:0 auto;padding:22px 18px 30px;flex:1 1 auto;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;}
.panel{animation:fadeUp .42s ease both;}
@keyframes fadeUp{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}

/* ────────────── 欢迎区 ────────────── */
.welcome{text-align:center;padding:20px 6px 6px;}
.welcome-emoji{display:block;margin:0 auto 4px;animation:bob 2.6s ease-in-out infinite;}
@keyframes bob{0%,100%{transform:translateY(0) rotate(-4deg)}50%{transform:translateY(-10px) rotate(4deg)}}
.welcome h1{font-size:22px;margin:8px 0 6px;letter-spacing:.3px;}
.welcome p{color:var(--c-sub);font-size:14px;}

/* ────────────── 上传区 ────────────── */
.dropzone{
  margin-top:20px;border:3px dashed #b9d3fb;border-radius:var(--r-lg);
  background:linear-gradient(170deg,#ffffff,#f4f9ff);
  padding:38px 22px;text-align:center;cursor:pointer;
  transition:all .26s ease;position:relative;overflow:hidden;
}
.dropzone::after{
  content:"";position:absolute;inset:0;border-radius:var(--r-lg);
  background:radial-gradient(420px 200px at 50% 0%,rgba(120,180,255,.14),transparent 70%);
  pointer-events:none;
}
.dropzone:hover{border-color:var(--c-primary);transform:translateY(-2px);box-shadow:var(--sh-md);}
.dropzone.dragover{
  border-color:#5ecf9a;background:linear-gradient(170deg,#f2fff9,#e7fbf1);
  transform:scale(1.014);box-shadow:0 0 0 6px rgba(94,207,154,.16),var(--sh-md);
}
.dz-icon{margin-bottom:6px;}
.dz-title{font-size:18px;font-weight:700;margin-bottom:5px;}
.dz-sub{font-size:13px;color:var(--c-sub);margin-bottom:16px;}
.dz-sub kbd{
  background:#eef3fb;border:1px solid #d5e2f5;border-bottom-width:2px;
  border-radius:5px;padding:1px 6px;font-size:12px;font-family:inherit;color:#5a7ba8;
}

/* ────────────── 按钮 ────────────── */
.btn{
  border:none;border-radius:99px;cursor:pointer;
  font-family:inherit;font-size:14.5px;font-weight:700;
  padding:10px 22px;transition:all .2s ease;
  display:inline-flex;align-items:center;gap:6px;justify-content:center;
}
.btn:active{transform:scale(.96);}
.btn-primary{
  background:linear-gradient(140deg,#5ea3ff,#3f7ce8);
  color:#fff;box-shadow:0 5px 16px rgba(74,144,255,.36);
}
.btn-primary:hover{box-shadow:0 8px 22px rgba(74,144,255,.46);transform:translateY(-1px);}
.btn-primary:disabled{opacity:.5;cursor:not-allowed;box-shadow:none;transform:none;}
.btn-ghost{background:#fff;color:var(--c-sub);border:1.5px solid var(--c-line);}
.btn-ghost:hover{border-color:#c5d6f0;color:var(--c-ink);}
.btn-camera{
  display:none;background:#fff;color:var(--c-primary);
  border:2px solid var(--c-primary);margin-top:10px;
}
.btn-camera:hover{background:#f2f8ff;}
.btn-lg{font-size:16.5px;padding:13px 30px;}
.btn-mini{font-size:13px;padding:7px 14px;background:#fff;color:var(--c-sub);
  border:1.5px solid var(--c-line);}
.btn-mini:hover{border-color:var(--c-primary);color:var(--c-primary);}
.btn-emoji{font-size:17px;}

.upload-actions{display:flex;gap:12px;justify-content:center;margin-top:20px;}

/* ────────────── 图片预览 ────────────── */
.preview-strip{display:flex;gap:10px;flex-wrap:wrap;justify-content:center;margin-top:18px;}
.preview-item{
  position:relative;width:104px;height:104px;border-radius:14px;overflow:hidden;
  border:2.5px solid #fff;box-shadow:var(--sh-sm);animation:fadeUp .3s both;
}
.preview-item img{width:100%;height:100%;object-fit:cover;display:block;}
.preview-item button{
  position:absolute;top:4px;right:4px;width:22px;height:22px;border-radius:50%;
  border:none;background:rgba(0,0,0,.55);color:#fff;font-size:13px;cursor:pointer;
  display:flex;align-items:center;justify-content:center;line-height:1;
}

/* ────────────── 使用说明 ────────────── */
.howto{
  display:flex;align-items:center;justify-content:center;gap:10px;
  margin-top:26px;flex-wrap:wrap;font-size:12.5px;color:var(--c-sub);
}
.howto-item{display:flex;align-items:center;gap:6px;}
.howto-item span{
  width:19px;height:19px;border-radius:50%;background:#dbe8fb;color:#5a86c9;
  display:flex;align-items:center;justify-content:center;font-size:11.5px;font-weight:800;
}
.howto-arrow{color:#c6d5ea;}

/* ────────────── 加载中 ────────────── */
.panel-loading{text-align:center;padding:60px 20px;}
.loading-cat{font-size:62px;animation:bob 1.5s ease-in-out infinite;}
.loading-title{font-size:17px;font-weight:700;margin:14px 0 22px;}
.loading-bar{max-width:340px;margin:0 auto;height:12px;background:#e6eefb;border-radius:99px;overflow:hidden;}
.loading-bar-fill{
  height:100%;width:34%;border-radius:99px;
  background:linear-gradient(90deg,#7ed0a0,#5aa9f5,#8b7cf6);
  animation:slide 1.35s ease-in-out infinite;
}
@keyframes slide{0%{transform:translateX(-110%)}100%{transform:translateX(330%)}}
.loading-hint{margin-top:14px;font-size:13.5px;color:var(--c-sub);}

/* ────────────── 任务区 ────────────── */
.tasks-head{display:flex;justify-content:space-between;align-items:flex-end;gap:14px;
  margin-bottom:18px;flex-wrap:wrap;}
.tasks-title h2{font-size:20px;letter-spacing:.3px;}
.tasks-sub{font-size:13px;color:var(--c-sub);margin-top:2px;}
.tasks-tools{display:flex;gap:8px;}

/* ── 非教材类纸质资料清单（练习册/单元卷/默写本…）── */
.paper-panel{
  background:linear-gradient(180deg,#fffdf6 0%,#fffaf0 100%);
  border:2px solid #ffe6b8;border-radius:var(--r-lg);
  padding:16px 18px;margin-bottom:16px;box-shadow:var(--sh-sm);
}
.paper-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;flex-wrap:wrap;}
.paper-head h3{
  font-size:16px;color:#a86a05;display:flex;align-items:center;gap:7px;letter-spacing:.2px;
}
.paper-head h3 svg{color:var(--c-star-deep);flex:none;}
.paper-count{font-size:12.5px;color:#b58533;}
.paper-note{
  font-size:13px;line-height:1.65;color:#8a6b2f;margin:8px 0 12px;
  background:#fff7e4;border-radius:var(--r-sm);padding:9px 12px;border-left:3px solid var(--c-star);
}
/* ── 已完成作业：空状态引导 ── */
.done-empty{text-align:center;padding:52px 24px;color:var(--c-sub);}
.done-empty svg{margin-bottom:14px;}
.done-empty p{font-size:14.5px;line-height:1.75;margin-bottom:18px;}

/* ── 任务卡按学科分组：组标题 ── */
.tc-group{
  grid-column:1/-1;display:flex;align-items:center;gap:8px;
  font-size:13.5px;font-weight:800;color:var(--c-ink);
  margin:6px 2px 2px;
}
.tc-group .subj-dot{width:22px;height:22px;font-size:12px;flex:none;}

/* 拍照任务卡（纸质资料）：结构同任务卡，卡上保留拍照按钮 */
.paper-card .tc-actions{padding-left:6px;}
.pi-btn{
  border:none;border-radius:999px;padding:8px 16px;cursor:pointer;
  background:var(--c-star);color:#7a5200;font-size:13.5px;font-weight:700;
  display:inline-flex;align-items:center;gap:6px;
  box-shadow:0 2px 8px rgba(240,168,0,.28);transition:transform .18s ease, box-shadow .18s ease;
}
.pi-btn svg{color:#7a5200;}
.pi-btn:active{transform:scale(.96);}
.pi-btn:disabled{opacity:.6;cursor:default;box-shadow:none;}
.pi-btn.again{background:#fff;color:#7a8aa8;border:1.5px solid var(--c-line);box-shadow:none;}
.pi-btn.again svg{color:#7a8aa8;}

.task-grid{display:grid;gap:14px;}

/* ── 任务卡 ── */
.task-card{
  background:var(--c-card);border-radius:var(--r-lg);padding:18px 20px;
  box-shadow:var(--sh-sm);border:2px solid transparent;
  position:relative;overflow:hidden;
  transition:transform .22s ease, box-shadow .22s ease, border-color .22s ease;
  animation:fadeUp .4s both;
}
.task-card:hover{transform:translateY(-3px);box-shadow:var(--sh-md);}
.task-card::before{
  content:"";position:absolute;left:0;top:0;bottom:0;width:7px;background:var(--accent);
}
.task-card.is-done{background:#f7fdfa;border-color:#c9eeda;}
.task-card.is-done .tc-content{opacity:.6;}

.tc-top{display:flex;align-items:center;gap:11px;margin-bottom:11px;padding-left:6px;}
.tc-badge{
  font-size:13px;font-weight:800;padding:4px 13px;border-radius:99px;
  background:var(--accent-bg);color:var(--accent);flex:none;
}
.tc-type{font-size:12px;color:var(--c-sub);background:#f3f6fb;border-radius:99px;
  padding:2px 9px;flex:none;}
.tc-time{font-size:12.5px;color:var(--c-sub);margin-left:auto;flex:none;font-weight:600;}
.tc-done-badge{font-size:12.5px;color:#1a9e64;font-weight:800;flex:none;}

.tc-content{
  font-size:15px;line-height:1.82;white-space:pre-wrap;word-break:break-word;
  padding-left:6px;color:#33415c;
}
.tc-kb{
  margin-top:9px;padding-left:6px;font-size:12.5px;color:#2f6bd0;
  background:#eef4ff;border-radius:10px;padding:7px 12px;
  border-left:3px solid #9cc3ff;
}
.tc-kb b{color:#1f57a8;}
.tc-tip{
  margin-top:11px;padding-left:6px;font-size:13px;color:#8a6a1f;
  background:#fffbf0;border-radius:10px;padding:8px 12px 8px 13px;
  border-left:3px solid #ffd877;
}
.tc-tip::before{content:"★ ";color:#e3a600;}

.tc-actions{display:flex;gap:9px;margin-top:14px;padding-left:6px;flex-wrap:wrap;}

/* 整卡可点：右侧箭头 + 悬停反馈 */
.task-card{cursor:pointer;}
.task-card:focus-visible{outline:3px solid color-mix(in srgb, var(--accent) 45%, transparent);outline-offset:2px;}
.tc-go{
  position:absolute;right:14px;bottom:16px;
  font-size:24px;line-height:1;color:var(--accent);opacity:.45;
  transition:transform .22s ease, opacity .22s ease;
  pointer-events:none;
}
.task-card:hover .tc-go{transform:translateX(4px);opacity:.85;}
.btn-do{
  background:var(--accent);color:#fff;border-radius:99px;border:none;
  font-family:inherit;font-weight:700;font-size:14px;padding:9px 20px;cursor:pointer;
  box-shadow:0 4px 12px color-mix(in srgb, var(--accent) 34%, transparent);
  transition:all .2s ease;
}
.btn-do:hover{transform:translateY(-1px);filter:brightness(1.06);}
.btn-do:active{transform:scale(.96);}
.btn-do.is-done{background:#e7f7ef;color:#1a9e64;box-shadow:none;}

.btn-soft{
  background:#f2f6fc;color:#5b7ba8;border:none;border-radius:99px;
  font-family:inherit;font-weight:700;font-size:13.5px;padding:9px 17px;cursor:pointer;
  transition:all .2s ease;
}
.btn-soft:hover{background:#e6eefb;color:var(--c-primary);}
.btn-soft:active{transform:scale(.96);}

.tc-photo-note{
  margin-top:11px;padding-left:6px;font-size:12.5px;color:#8b6cc9;
  background:#f7f2ff;border-radius:10px;padding:8px 12px;
  border-left:3px solid #c4a6f0;
}
.tc-photo-note::before{content:"● ";font-size:9px;vertical-align:2px;color:#7c5cd6;}

/* ────────────── 全部完成 ────────────── */
.all-done{margin-top:22px;animation:fadeUp .45s both;}
.all-done-inner{
  text-align:center;padding:30px 22px;border-radius:var(--r-lg);
  background:linear-gradient(150deg,#fff8e3,#ffeec4);
  border:2.5px solid #ffdf95;box-shadow:0 10px 30px rgba(240,168,0,.18);
}
.done-emoji{font-size:56px;animation:bob 1.9s ease-in-out infinite;}
.all-done-inner h3{font-size:19px;margin:10px 0 5px;color:#a86a05;}
.all-done-inner p{font-size:14px;color:#b58533;margin-bottom:16px;}

/* ────────────── 收藏册 ────────────── */
.collect-title{font-size:20px;margin-bottom:18px;text-align:center;}
.collect-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(128px,1fr));gap:14px;}
.star-card{
  background:linear-gradient(160deg,#fffdf5,#fff3d2);
  border:2.5px solid #ffe19b;border-radius:var(--r-md);
  padding:16px 10px;text-align:center;box-shadow:var(--sh-sm);
  animation:starIn .45s cubic-bezier(.34,1.56,.64,1) both;
}
@keyframes starIn{from{opacity:0;transform:scale(.6) rotate(-14deg)}to{opacity:1;transform:none}}
.star-card .sc-emoji{font-size:32px;}
.star-card .sc-subject{font-size:13.5px;font-weight:800;color:#a86a05;margin-top:4px;}
.star-card .sc-date{font-size:11px;color:#c6a356;margin-top:2px;}
.collect-empty{text-align:center;color:var(--c-sub);font-size:14px;padding:50px 20px;}

/* ────────────── 底部导航 ────────────── */
.tabbar{
  position:static;flex:none;
  display:flex;justify-content:center;gap:6px;
  background:rgba(255,255,255,.94);backdrop-filter:blur(14px);
  border-top:1px solid var(--c-line);padding:9px 14px 11px;
  z-index:70;
}
.tab{
  flex:1;max-width:180px;border:none;background:transparent;cursor:pointer;
  font-family:inherit;font-size:12.5px;font-weight:700;color:var(--c-sub);
  display:flex;flex-direction:column;align-items:center;gap:2px;
  padding:6px 0;border-radius:13px;transition:all .2s ease;
  position:relative;white-space:nowrap;
}
.tab span{font-size:20px;}
.tab.is-active{color:var(--c-primary);background:#eef4ff;}
/* 页签角标：待完成=红（还有几项要做）/ 已完成=绿（已收几颗星） */
.tab-badge{
  position:absolute;top:1px;left:calc(50% + 12px);
  min-width:18px;height:18px;padding:0 5px;border-radius:999px;
  display:flex;align-items:center;justify-content:center;
  font-size:11px;font-weight:800;line-height:1;color:#fff;
  box-shadow:0 2px 6px rgba(30,60,120,.22);
}
.tab-badge[hidden]{display:none;}
.tab-badge-pending{background:#ff6b6b;}
.tab-badge-done{background:#1a9e64;}

/* ────────────── 抽屉 ────────────── */
.drawer-mask{position:fixed;inset:0;background:rgba(30,45,75,.34);z-index:125;
  animation:fadeIn .25s both;}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
.drawer{
  position:fixed;top:0;right:0;bottom:0;width:min(480px,100%);
  background:#fff;z-index:130;box-shadow:-10px 0 44px rgba(30,60,120,.2);
  display:flex;flex-direction:column;animation:slideIn .34s cubic-bezier(.25,1,.4,1) both;
}
@keyframes slideIn{from{transform:translateX(100%)}to{transform:none}}
.drawer-head{
  display:flex;align-items:center;justify-content:space-between;
  padding:18px 22px;border-bottom:1px solid var(--c-line);flex:none;
}
.drawer-subject{font-size:18px;font-weight:800;}
.drawer-close{
  width:34px;height:34px;border-radius:50%;border:none;background:#f2f6fc;
  color:var(--c-sub);font-size:16px;cursor:pointer;transition:all .2s;
}
.drawer-close:hover{background:#e6eefb;color:var(--c-ink);}
.drawer-body{padding:20px 22px 34px;overflow-y:auto;flex:1;}

.kb-block{margin-bottom:22px;}
.kb-block h4{
  font-size:15px;margin-bottom:9px;padding-left:11px;position:relative;color:#33415c;
}
.kb-block h4::before{
  content:"";position:absolute;left:0;top:5px;bottom:5px;width:4px;border-radius:99px;
  background:var(--c-primary);
}
.kb-summary{font-size:14.5px;color:#44546e;line-height:1.85;
  background:#f7faff;border-radius:12px;padding:12px 15px;}
.kb-list{list-style:none;padding:0;}
.kb-list li{
  font-size:14px;line-height:1.8;padding:7px 13px;margin-bottom:6px;
  background:#f8fafd;border-radius:10px;border-left:3px solid #cfe0f7;
}
.kb-pills{display:flex;flex-wrap:wrap;gap:6px;}
.kb-pill{
  font-size:13px;padding:3px 12px;border-radius:99px;
  background:#eef4ff;color:#3f74c4;border:1px solid #d8e6fb;
}
.kb-pill.gold{background:#fff8e6;color:#b8760a;border-color:#ffe3a3;}
.kb-poem{
  text-align:center;background:#fbf8f1;border:1px solid #eadfc9;
  border-radius:13px;padding:15px 12px;
}
.kb-poem h5{font-size:15.5px;margin-bottom:7px;color:#7a6234;}
.kb-poem p{font-size:15.5px;letter-spacing:2px;line-height:2;color:#4a4235;}
.kb-poem .poem-mean{font-size:12.5px;color:#96896d;letter-spacing:0;margin-top:9px;line-height:1.7;}
.kb-qa{background:#f0fdf5;border:1px solid #c9eeda;border-radius:13px;padding:13px 16px;}
.kb-qa .q{font-weight:800;color:#178a58;font-size:14px;margin-bottom:6px;}
.kb-qa .a{font-size:14px;color:#2f5d47;line-height:1.85;}

/* ────────────── 弹窗 ────────────── */
.modal-mask{
  position:fixed;inset:0;background:rgba(30,45,75,.42);z-index:150;
  display:flex;align-items:center;justify-content:center;padding:18px;
  animation:fadeIn .22s both;
}
.modal{
  background:#fff;border-radius:var(--r-lg);width:min(460px,100%);
  max-height:88vh;display:flex;flex-direction:column;overflow:hidden;
  box-shadow:var(--sh-lg);animation:modalIn .3s cubic-bezier(.34,1.4,.6,1) both;
}
@keyframes modalIn{from{opacity:0;transform:scale(.9) translateY(18px)}to{opacity:1;transform:none}}
.modal-head{display:flex;align-items:center;justify-content:space-between;
  padding:17px 22px;border-bottom:1px solid var(--c-line);flex:none;}
.modal-head h3{font-size:16.5px;}
.modal-close{width:32px;height:32px;border-radius:50%;border:none;background:#f2f6fc;
  color:var(--c-sub);font-size:15px;cursor:pointer;}
.modal-body{padding:18px 22px;overflow-y:auto;flex:1;}
.modal-tip{font-size:13.5px;color:var(--c-sub);margin-bottom:13px;}
.photo-drop{
  border:2.5px dashed #c3d8f7;border-radius:var(--r-md);padding:30px 16px;
  text-align:center;cursor:pointer;background:#f8fbff;transition:all .2s ease;
  font-size:14px;color:#6d8ab5;font-weight:600;
}
.photo-drop:hover{border-color:var(--c-primary);background:#f0f7ff;}
.pd-icon{font-size:36px;margin-bottom:5px;}
.photo-preview{margin-top:14px;border-radius:13px;overflow:hidden;border:1px solid var(--c-line);}
.photo-preview img{width:100%;display:block;}
.photo-result{margin-top:14px;}
.pr-summary{background:#f0fdf5;border:1px solid #c9eeda;border-radius:12px;
  padding:13px 15px;font-size:14px;color:#2f5d47;line-height:1.8;}
.pr-item{display:flex;gap:9px;padding:9px 12px;border-radius:10px;margin-top:8px;font-size:13.5px;}
.pr-item.right{background:#f0fdf5;}
.pr-item.wrong{background:#fff5f3;}
.pr-item.unclear{background:#fffbee;}
.pr-item .pi-no{font-weight:800;flex:none;}
.pr-item .pi-hint{color:#8a6a1f;font-size:12.5px;margin-top:2px;}
.modal-foot{display:flex;gap:11px;justify-content:flex-end;padding:15px 22px;
  border-top:1px solid var(--c-line);flex:none;background:#fafcff;}

/* ────────────── 庆祝动画 ────────────── */
.celebrate{
  position:fixed;inset:0;z-index:200;display:flex;align-items:center;justify-content:center;
  pointer-events:none;
}
.celebrate-text{
  font-size:46px;font-weight:900;color:#fff;letter-spacing:3px;
  text-shadow:0 4px 0 #e8a300, 0 8px 26px rgba(232,163,0,.6);
  animation:celebrateIn 1.5s cubic-bezier(.34,1.5,.5,1) both;
}
@keyframes celebrateIn{
  0%{opacity:0;transform:scale(.3) rotate(-16deg)}
  32%{opacity:1;transform:scale(1.14) rotate(5deg)}
  52%{transform:scale(1) rotate(0)}
  82%{opacity:1;transform:scale(1)}
  100%{opacity:0;transform:scale(1.5)}
}
.confetti{
  position:fixed;width:11px;height:11px;z-index:199;pointer-events:none;
  animation:confettiFall linear forwards;
}
@keyframes confettiFall{
  0%{transform:translateY(-12vh) rotate(0);opacity:1}
  100%{transform:translateY(105vh) rotate(760deg);opacity:.15}
}

/* ────────────── 手机端选择方式弹层 ────────────── */
.pick-sheet-mask{
  position:fixed;inset:0;background:rgba(30,45,75,.42);z-index:150;
  display:flex;align-items:flex-end;justify-content:center;
  opacity:0;transition:opacity .2s ease;
  /* 未展开时完全透明且不接收点击，避免残留遮罩挡住所有按钮 */
  pointer-events:none;
}
.pick-sheet-mask.show{opacity:1;pointer-events:auto;}
.pick-sheet{
  width:100%;max-width:520px;background:#f4f6fa;
  border-radius:20px 20px 0 0;padding:10px 12px calc(12px + var(--safe-bottom));
  transform:translateY(100%);transition:transform .26s cubic-bezier(.25,1,.4,1);
}
.pick-sheet-mask.show .pick-sheet{transform:none;}
.pick-item{
  display:block;width:100%;border:none;background:#fff;border-radius:14px;
  font-family:inherit;font-size:16.5px;font-weight:600;color:var(--c-primary);
  padding:16px;margin-bottom:8px;cursor:pointer;min-height:54px;
  transition:background .15s ease;
}
.pick-item:active{background:#eef4ff;}
.pick-cancel{color:var(--c-sub);margin-bottom:0;}

/* ────────────── 提示条 ────────────── */
.toast{
  position:fixed;left:50%;bottom:104px;transform:translateX(-50%);
  background:rgba(38,51,77,.94);color:#fff;font-size:14px;font-weight:600;
  padding:11px 22px;border-radius:99px;z-index:300;
  box-shadow:0 8px 26px rgba(20,35,65,.3);animation:toastIn .3s both;
  max-width:88vw;text-align:center;
  /* 提示条只是提示，绝不能挡住下面的按钮 */
  pointer-events:none;
}
@keyframes toastIn{from{opacity:0;transform:translate(-50%,14px)}to{opacity:1;transform:translate(-50%,0)}}

.subj-dot{
  display:inline-flex;align-items:center;justify-content:center;
  width:21px;height:21px;border-radius:50%;flex:none;
  color:#fff;font-size:12px;font-weight:800;line-height:1;
  box-shadow:0 2px 5px rgba(0,0,0,.14);
  transform:translateY(2px);
}
.tc-badge .subj-dot{margin-right:2px;}
.drawer-subject .subj-dot{width:24px;height:24px;font-size:13.5px;margin-right:4px;}
.sc-emoji .subj-dot{width:44px;height:44px;font-size:22px;margin:0 auto;}

/* ────────────── 空态 ────────────── */
.tc-empty{text-align:center;padding:44px 20px;color:var(--c-sub);font-size:14.5px;}

/* ═══════════════════════════════════════════════
   移动端（iPad / iPhone）适配
   —— 触控优先：所有可点元素 ≥ 44px
   —— 尊重安全区：刘海屏底部不被遮挡
   —— 禁止误缩放：输入框字号 ≥16px 防 iOS 自动放大
   ═══════════════════════════════════════════════ */

/* iOS 安全区支持 */
:root{
  --safe-top:env(safe-area-inset-top, 0px);
  --safe-bottom:env(safe-area-inset-bottom, 0px);
  --safe-left:env(safe-area-inset-left, 0px);
  --safe-right:env(safe-area-inset-right, 0px);
}

/* 触屏设备：去掉 hover 位移，避免点击后卡住 */
@media (hover:none){
  .task-card:hover{transform:none;box-shadow:var(--sh-sm);}
  .dropzone:hover{transform:none;box-shadow:none;}
  .btn-primary:hover{transform:none;}
  .btn-do:hover{transform:none;}
  .btn-cfg:hover{transform:none;}
  .photo-drop:hover{background:#f8fbff;}
}

/* 触摸反馈用 :active 代替 */
.btn-do:active,.btn-primary:active,.btn-soft:active,.tab:active{opacity:.82;}

/* ────────── 窄屏手机 ────────── */
@media (max-width:560px){
  body{
    font-size:15.5px;
    line-height:1.72;
  }

  /* 顶栏：压缩但保持清晰 */
  .topbar{padding-top:var(--safe-top);}
  .topbar-inner{padding:9px 13px;gap:10px;}
  .logo{gap:5px;}
  .logo-star{font-size:19px;}
  .logo-text{display:none;}
  .hud-label{font-size:11.5px;margin-bottom:3px;}
  .hud-track{height:10px;}
  .hud-count{font-size:11.5px;text-align:left;}
  .star-wallet{padding:5px 13px 5px 10px;gap:4px;}
  .star-icon{font-size:16px;}
  .star-num{font-size:16px;}
  .btn-cfg{width:40px;height:40px;font-size:17px;}

  /* 主区域 */
  .stage{padding:14px 12px 20px;}
  .welcome{padding:14px 4px 2px;}
  .welcome-emoji{width:46px;height:46px;}
  .welcome h1{font-size:18.5px;line-height:1.45;}
  .welcome p{font-size:13.5px;line-height:1.7;}

  /* 上传区：手机上做成大按钮，好按 */
  .dropzone{margin-top:16px;padding:26px 14px;border-width:2.5px;}
  .dz-icon{width:44px;height:44px;}
  .dz-title{font-size:16.5px;}
  .dz-sub{font-size:12.5px;margin-bottom:14px;}
  .dz-sub kbd{display:none;}
  /* 手机上显示「拍照上传作业单」按钮 */
  .btn-camera{display:inline-flex;}
  .btn{padding:12px 22px;font-size:15px;min-height:46px;}
  .btn-lg{font-size:16px;padding:14px 26px;width:100%;max-width:300px;}
  .btn-primary{width:100%;max-width:300px;margin:0 auto;}
  .upload-actions{flex-direction:column-reverse;align-items:center;gap:10px;}
  .upload-actions .btn-ghost{order:2;min-height:42px;font-size:14px;}

  .preview-strip{gap:8px;margin-top:14px;}
  .preview-item{width:84px;height:84px;}
  .howto{gap:7px;font-size:11.5px;margin-top:20px;}

  /* 任务卡 */
  .tasks-head{flex-direction:column;align-items:flex-start;gap:10px;margin-bottom:14px;}
  .tasks-title h2{font-size:18.5px;}
  .tasks-sub{font-size:12.5px;}
  .tasks-tools{width:100%;}
  .tasks-tools .btn-mini{flex:1;padding:10px 8px;font-size:13px;min-height:42px;}

  .task-grid{gap:12px;}
  .task-card{padding:15px 15px 16px;border-radius:19px;}
  .task-card::before{width:6px;}
  .tc-top{gap:8px;margin-bottom:10px;padding-left:4px;flex-wrap:wrap;}
  .tc-badge{font-size:12.5px;padding:3px 11px;}
  .tc-type{font-size:11.5px;padding:2px 8px;}
  .tc-time,.tc-done-badge{font-size:12px;margin-left:auto;}
  .tc-content{font-size:15.5px;line-height:1.78;padding-left:4px;}
  .tc-tip{font-size:13px;padding:8px 11px;margin-top:10px;}
  .tc-photo-note{font-size:12.5px;padding:8px 11px;}

  /* 操作按钮：手机上大而清楚，两列排布 */
  .tc-actions{
    display:grid;grid-template-columns:1fr 1fr;gap:9px;
    margin-top:13px;padding-left:4px;
  }
  .tc-actions .btn-do{grid-column:1 / -1;}   /* 完成按钮独占一行，最显眼 */
  .btn-do{font-size:15.5px;padding:13px 18px;min-height:50px;width:100%;border-radius:14px;}
  .btn-soft{font-size:14px;padding:11px 10px;min-height:46px;border-radius:13px;
    background:#f2f6fc;}
  /* 只有 3 个按钮时，让删除不孤零零占一行 */
  .tc-actions > .btn-soft:last-child:nth-child(even){grid-column:1 / -1;}

  /* 全部完成 */
  .all-done-inner{padding:24px 16px;border-radius:19px;}
  .done-emoji{width:50px;height:50px;}
  .all-done-inner h3{font-size:17.5px;}
  .all-done-inner p{font-size:13.5px;}
  .all-done-inner .btn{width:100%;max-width:none;}

  /* 收藏册 */
  .collect-title{font-size:18px;margin-bottom:14px;}
  .collect-grid{grid-template-columns:repeat(auto-fill,minmax(102px,1fr));gap:10px;}
  .star-card{padding:13px 8px;border-radius:14px;}
  .sc-emoji .subj-dot{width:38px;height:38px;font-size:19px;}
  .star-card .sc-subject{font-size:13px;}

  /* 底部导航：大触控区 + 安全区 */
  .tabbar{
    padding:7px 12px calc(7px + var(--safe-bottom));
    gap:6px;
  }
  .tab{font-size:12px;padding:7px 0;min-height:50px;border-radius:14px;}
  .tab svg{width:23px;height:23px;}

  /* 抽屉：手机上占满全屏，从底部弹出更顺手 */
  .drawer{
    top:auto;left:0;right:0;bottom:0;width:100%;height:88vh;
    border-radius:22px 22px 0 0;
    animation:sheetUp .34s cubic-bezier(.25,1,.4,1) both;
  }
  @keyframes sheetUp{from{transform:translateY(100%)}to{transform:none}}
  .drawer-head{padding:15px 18px;padding-top:15px;}
  .drawer-subject{font-size:17px;}
  .drawer-close{width:40px;height:40px;font-size:18px;}
  .drawer-body{padding:16px 18px calc(30px + var(--safe-bottom));}
  .kb-block h4{font-size:14.5px;}
  .kb-summary{font-size:14.5px;line-height:1.8;}
  .kb-list li{font-size:14px;padding:8px 12px;}
  .kb-pill{font-size:13px;padding:4px 12px;}
  .kb-poem p{font-size:15.5px;letter-spacing:1.5px;}

  /* 弹窗：底部弹起式，贴合手机操作习惯 */
  .modal-mask{padding:0;align-items:flex-end;}
  .modal{
    width:100%;max-width:none;max-height:92vh;
    border-radius:22px 22px 0 0;
    animation:sheetUp .32s cubic-bezier(.25,1,.4,1) both;
  }
  .modal-head{padding:16px 18px;}
  .modal-head h3{font-size:16.5px;}
  .modal-close{width:40px;height:40px;font-size:17px;}
  .modal-body{padding:16px 18px;}
  .modal-tip{font-size:13.5px;}
  .photo-drop{padding:26px 14px;min-height:110px;}
  .pd-icon{width:36px;height:36px;}
  .modal-foot{padding:13px 18px calc(13px + var(--safe-bottom));gap:10px;}
  .modal-foot .btn{flex:1;min-height:48px;}

  /* 设置表单：字号≥16px 防止 iOS 自动放大 */
  .cfg-input{font-size:16px;padding:12px 14px;min-height:48px;}
  .cfg-label{font-size:13.5px;}

  /* 提示条抬高，避开底部导航 */
  .toast{bottom:calc(96px + var(--safe-bottom));font-size:13.5px;padding:12px 20px;}

  /* 庆祝文字适配 */
  .celebrate-text{font-size:38px;letter-spacing:2px;}
}

/* ────────── 中等屏幕（iPad 竖屏 768px 等） ────────── */
@media (min-width:561px) and (max-width:1024px){
  .stage{max-width:820px;padding:22px 26px 34px;}
  .tab{max-width:200px;min-height:52px;}
  .btn-do,.btn-soft{min-height:46px;}
  .btn-cfg{width:40px;height:40px;}
  /* iPad 上抽屉宽度适中，不完全占满 */
  .drawer{width:min(520px,86%);}
}

/* ────────── 横屏手机（高度受限） ────────── */
@media (max-height:500px) and (orientation:landscape){
  .topbar-inner{padding:6px 16px;}
  .welcome{padding:8px 6px 0;}
  .welcome-emoji{width:36px;height:36px;}
  .welcome h1{font-size:17px;margin:4px 0 3px;}
  .dropzone{margin-top:12px;padding:20px 16px;}
  .drawer{height:96vh;}
}

/* 触屏设备上隐藏 hover 产生的滚动条抖动 */
@media (pointer:coarse){
  ::-webkit-scrollbar{width:0;height:0;}
}

/* ═══════════════════════════════════════════════
   任务详情页 · 四类作业专用界面
   设计理念：不同性质的作业，给孩子不同的"完成方式"
   —— 让"做完"这件事本身变成可操作的、看得见的过程
   ═══════════════════════════════════════════════ */

.taskpage{
  position:fixed;inset:0;z-index:120;background:var(--c-bg);
  display:flex;flex-direction:column;overflow:hidden;
  animation:tpIn .3s cubic-bezier(.25,1,.4,1) both;
}
@keyframes tpIn{from{opacity:0;transform:translateX(26px)}to{opacity:1;transform:none}}

.tp-bar{
  flex:none;display:flex;align-items:center;gap:12px;
  padding:11px 16px;padding-top:calc(11px + var(--safe-top));
  background:rgba(255,255,255,.92);backdrop-filter:blur(14px);
  border-bottom:1px solid var(--c-line);
}
.tp-back{
  display:flex;align-items:center;gap:3px;
  border:none;background:#eef4ff;color:var(--c-primary);
  font-family:inherit;font-size:14.5px;font-weight:700;
  padding:8px 15px 8px 11px;border-radius:99px;cursor:pointer;
  min-height:40px;transition:all .18s ease;flex:none;
}
.tp-back:active{transform:scale(.95);background:#dce9ff;}
.tp-title{
  flex:1;text-align:center;font-weight:800;font-size:16.5px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.tp-stars{
  flex:none;display:flex;align-items:center;gap:3px;
  background:linear-gradient(140deg,#fff6db,#ffe9a8);
  border:2px solid #ffdf8a;border-radius:99px;
  padding:4px 13px;font-size:14.5px;font-weight:800;color:#b8760a;
}
.tp-del{
  flex:none;border:none;background:#fbe9e9;color:#d9534f;
  font-family:inherit;font-size:16px;line-height:1;
  width:38px;height:38px;border-radius:50%;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  transition:all .18s ease;
}
.tp-del:active{transform:scale(.92);background:#f6d6d6;}

.tp-body{
  flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;
  padding:18px 16px calc(30px + var(--safe-bottom));
  max-width:760px;margin:0 auto;width:100%;
}

/* 任务抬头卡片 */
.tp-head{
  background:#fff;border-radius:20px;padding:18px 19px;
  box-shadow:var(--sh-sm);margin-bottom:16px;
  border-left:7px solid var(--accent);
}
.tp-head-top{display:flex;align-items:center;gap:9px;margin-bottom:11px;flex-wrap:wrap;}
.tp-subject{
  font-size:13.5px;font-weight:800;padding:4px 13px;border-radius:99px;
  background:var(--accent-bg);color:var(--accent);
}
.tp-type{font-size:12.5px;color:var(--c-sub);background:#f3f6fb;border-radius:99px;padding:3px 11px;}
.tp-time{font-size:12.5px;color:var(--c-sub);font-weight:700;margin-left:auto;}
.tp-content{
  font-size:16.5px;line-height:1.8;white-space:pre-wrap;
  word-break:break-word;color:#2d3a52;
}
.tp-tip{
  margin-top:12px;font-size:13.5px;color:#8a6a1f;
  background:#fffbf0;border-radius:11px;padding:10px 13px;
  border-left:3px solid #ffd877;line-height:1.7;
}
.tp-tip b{font-weight:800;}

/* 通用区块 */
.tp-sec{
  background:#fff;border-radius:20px;padding:18px 19px;
  box-shadow:var(--sh-sm);margin-bottom:15px;
}
.tp-sec-title{
  font-size:15.5px;font-weight:800;margin-bottom:13px;
  display:flex;align-items:center;gap:7px;color:#33415c;
}
.tp-sec-title .n{
  width:22px;height:22px;border-radius:50%;background:var(--accent);
  color:#fff;font-size:12.5px;display:flex;align-items:center;justify-content:center;flex:none;
}
.tp-hint{font-size:13px;color:var(--c-sub);line-height:1.7;margin-bottom:12px;}

/* 拍照任务详情页：拍照区 + 生成的子清单 */
.pp-photo-box{
  background:linear-gradient(140deg,#eef4ff,#f4f8ff);
  border:1.5px dashed #b9cdf2;border-radius:20px;padding:18px 19px;margin:6px 0 16px;text-align:center;
}
.pp-photo-tip{font-size:13.5px;color:var(--c-sub);line-height:1.7;margin-bottom:14px;}
.pp-photo-box .tp-mainbtn{max-width:320px;margin:0 auto;}
.pp-gen-list{display:flex;flex-direction:column;gap:11px;}
.pp-gen-item{
  background:#f7faff;border:1px solid #e3ecfb;border-radius:15px;padding:13px 15px;
}
.pp-gen-main{display:flex;align-items:flex-start;gap:8px;font-size:15px;font-weight:600;color:#2b3a4f;line-height:1.5;}
.pp-gen-main svg{flex:none;margin-top:3px;color:var(--accent);}
.pp-gen-ref{margin-top:6px;font-size:13.5px;color:#1f8a57;line-height:1.6;padding-left:22px;}
.pp-gen-tip{margin-top:4px;font-size:13px;color:var(--c-sub);line-height:1.6;padding-left:22px;}

/* 主行动按钮 */
.tp-mainbtn{
  display:flex;align-items:center;justify-content:center;gap:8px;
  width:100%;border:none;border-radius:16px;cursor:pointer;
  font-family:inherit;font-size:17px;font-weight:800;
  padding:17px;min-height:58px;color:#fff;
  background:linear-gradient(140deg,var(--accent),color-mix(in srgb,var(--accent) 78%, #000 12%));
  box-shadow:0 7px 20px color-mix(in srgb,var(--accent) 38%, transparent);
  transition:all .2s ease;margin-top:4px;
}
.tp-mainbtn:active{transform:scale(.975);}
.tp-mainbtn.ghost{
  background:#fff;color:var(--accent);
  border:2.5px solid var(--accent);box-shadow:none;
}
.tp-mainbtn.done{background:#e7f7ef;color:#1a9e64;box-shadow:none;}
.tp-mainbtn:disabled{opacity:.5;cursor:not-allowed;box-shadow:none;}
.tp-btnrow{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:11px;}
.tp-btnrow .tp-mini{
  border:none;border-radius:14px;background:#f2f6fc;color:#5b7ba8;
  font-family:inherit;font-size:14.5px;font-weight:700;
  padding:13px;min-height:50px;cursor:pointer;transition:all .18s ease;
}
.tp-btnrow .tp-mini:active{transform:scale(.96);background:#e6eefb;}

/* ══════ 类型一：读背 / 口答 ══════ */
.read-timer{
  text-align:center;padding:20px 10px 16px;
}
.rt-display{
  font-size:56px;font-weight:900;letter-spacing:2px;
  font-variant-numeric:tabular-nums;color:var(--accent);
  line-height:1;margin-bottom:6px;
}
.rt-display.running{animation:pulseSoft 2s ease-in-out infinite;}
@keyframes pulseSoft{0%,100%{opacity:1}50%{opacity:.72}}
.rt-label{font-size:13.5px;color:var(--c-sub);margin-bottom:16px;}
.rt-controls{display:flex;gap:11px;justify-content:center;}
.rt-btn{
  border:none;border-radius:99px;font-family:inherit;
  font-size:15.5px;font-weight:800;padding:13px 30px;min-height:50px;
  cursor:pointer;transition:all .2s ease;
  background:var(--accent);color:#fff;
  box-shadow:0 5px 15px color-mix(in srgb,var(--accent) 36%, transparent);
}
.rt-btn.sec{background:#f2f6fc;color:#5b7ba8;box-shadow:none;}
.rt-btn:active{transform:scale(.96);}

/* 朗读步骤清单 */
.read-steps{list-style:none;padding:0;margin:0;}
.read-steps li{
  display:flex;align-items:flex-start;gap:11px;
  padding:11px 13px;border-radius:13px;margin-bottom:8px;
  background:#f8fafd;font-size:14.5px;line-height:1.6;
  cursor:pointer;transition:all .2s ease;
}
.read-steps li:active{transform:scale(.985);}
.read-steps li.on{background:#eefbf4;color:#1a7a52;}
.read-steps .step-check{
  width:24px;height:24px;border-radius:50%;flex:none;
  border:2.5px solid #cfdcf0;background:#fff;
  display:flex;align-items:center;justify-content:center;
  font-size:13px;color:transparent;transition:all .2s ease;
}
.read-steps li.on .step-check{
  background:#3ec27f;border-color:#3ec27f;color:#fff;
}

/* 朗读结果自评 */
.selfeval{display:grid;grid-template-columns:repeat(3,1fr);gap:9px;margin-top:13px;}
.se-btn{
  border:2.5px solid var(--c-line);background:#fff;border-radius:15px;
  font-family:inherit;font-size:14px;font-weight:700;color:#5b7ba8;
  padding:15px 8px;min-height:74px;cursor:pointer;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;
  transition:all .2s ease;line-height:1.35;
}
.se-btn .se-icon{
  width:28px;height:28px;border-radius:50%;background:#eef3fb;
  display:flex;align-items:center;justify-content:center;
  font-size:15px;font-weight:900;color:#7a97c4;
}
.se-btn:active{transform:scale(.96);}
.se-btn.on{border-color:#3ec27f;background:#f0fdf6;color:#178a58;}
.se-btn.on .se-icon{background:#3ec27f;color:#fff;}

/* ══════ 类型二：书写练习 ══════ */
.photo-slot{
  border:2.5px dashed #c3d8f7;border-radius:17px;
  background:#f8fbff;padding:32px 18px;text-align:center;
  cursor:pointer;transition:all .2s ease;margin-bottom:13px;
}
.photo-slot:active{transform:scale(.985);border-color:var(--accent);}
.ps-icon{font-size:40px;margin-bottom:7px;line-height:1;}
.ps-main{font-size:15.5px;font-weight:800;color:#4a6a99;margin-bottom:4px;}
.ps-sub{font-size:12.5px;color:var(--c-sub);}
.photo-shot{
  border-radius:17px;overflow:hidden;border:1px solid var(--c-line);
  margin-bottom:13px;position:relative;
}
.photo-shot img{width:100%;display:block;}
.photo-shot .re{
  position:absolute;right:10px;bottom:10px;border:none;
  background:rgba(0,0,0,.6);color:#fff;font-family:inherit;
  font-size:13px;font-weight:700;padding:8px 15px;border-radius:99px;cursor:pointer;
}

/* 检查结果 */
.chk-sum{
  background:#f0fdf5;border:1px solid #c9eeda;border-radius:14px;
  padding:14px 16px;font-size:14.5px;color:#2f5d47;line-height:1.78;margin-bottom:11px;
}
.chk-item{
  display:flex;gap:10px;padding:11px 13px;border-radius:13px;margin-bottom:8px;
  font-size:14.5px;line-height:1.65;
}
.chk-item.right{background:#f0fdf5;}
.chk-item.wrong{background:#fff5f3;}
.chk-item.unclear{background:#fffbee;}
.chk-no{font-weight:800;flex:none;font-size:13px;padding-top:1px;}
.chk-hint{color:#8a6a1f;font-size:13px;margin-top:4px;line-height:1.6;}

/* 书写步骤 */
.write-steps{list-style:none;padding:0;margin:0;}
.write-steps li{
  display:flex;gap:11px;padding:11px 13px;border-radius:13px;
  margin-bottom:8px;background:#f8fafd;font-size:14.5px;line-height:1.6;
  cursor:pointer;transition:all .2s ease;align-items:flex-start;
}
.write-steps li.on{background:#eefbf4;color:#1a7a52;}
.write-steps .step-check{
  width:24px;height:24px;border-radius:50%;flex:none;
  border:2.5px solid #cfdcf0;background:#fff;
  display:flex;align-items:center;justify-content:center;
  font-size:13px;color:transparent;transition:all .2s ease;
}
.write-steps li.on .step-check{background:#3ec27f;border-color:#3ec27f;color:#fff;}

/* ══════ 类型三：实践 / 准备 ══════ */
.check-list{list-style:none;padding:0;margin:0;}
.check-list li{
  display:flex;gap:12px;padding:14px 15px;border-radius:15px;
  margin-bottom:9px;background:#f8fafd;font-size:15px;line-height:1.6;
  cursor:pointer;transition:all .22s ease;align-items:flex-start;
}
.check-list li:active{transform:scale(.985);}
.check-list li.on{background:#eefbf4;color:#1a7a52;}
.check-list .step-check{
  width:26px;height:26px;border-radius:9px;flex:none;
  border:2.5px solid #cfdcf0;background:#fff;
  display:flex;align-items:center;justify-content:center;
  font-size:14px;color:transparent;transition:all .22s ease;
}
.check-list li.on .step-check{background:#3ec27f;border-color:#3ec27f;color:#fff;transform:rotate(-6deg);}

/* 计数打卡器（如跳绳个数） */
.counter{
  display:flex;align-items:center;justify-content:center;gap:18px;
  padding:20px 10px;background:#f8fbff;border-radius:17px;margin-bottom:13px;
}
.counter-num{
  font-size:44px;font-weight:900;color:var(--accent);
  font-variant-numeric:tabular-nums;min-width:110px;text-align:center;line-height:1;
}
.counter-num .unit{font-size:16px;font-weight:700;margin-left:4px;color:var(--c-sub);}
.counter-btn{
  width:52px;height:52px;border-radius:50%;border:2.5px solid var(--accent);
  background:#fff;color:var(--accent);font-size:24px;font-weight:900;
  cursor:pointer;line-height:1;transition:all .18s ease;
  display:flex;align-items:center;justify-content:center;
}
.counter-btn:active{transform:scale(.9);background:var(--accent-bg);}
.counter-goal{text-align:center;font-size:13px;color:var(--c-sub);margin-bottom:13px;}

/* ══════ 完成状态横幅 ══════ */
.tp-finish{
  text-align:center;padding:26px 18px;border-radius:20px;
  background:linear-gradient(150deg,#fff8e3,#ffeec4);
  border:2.5px solid #ffdf95;margin-top:4px;
}
.tp-finish .fi-icon{font-size:44px;line-height:1;margin-bottom:8px;}
.tp-finish h4{font-size:17.5px;color:#a86a05;margin-bottom:5px;}
.tp-finish p{font-size:13.5px;color:#b58533;}

/* 学习帮手入口 */
.tp-help{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  background:#fff;border-radius:18px;padding:15px 18px;
  box-shadow:var(--sh-sm);margin-bottom:15px;cursor:pointer;
  transition:all .2s ease;
}
.tp-help:active{transform:scale(.985);}
.tp-help-l{display:flex;align-items:center;gap:11px;}
.tp-help-icon{
  width:42px;height:42px;border-radius:13px;background:#eef4ff;
  display:flex;align-items:center;justify-content:center;flex:none;
}
.tp-help-txt b{display:block;font-size:15px;color:#33415c;}
.tp-help-txt small{font-size:12.5px;color:var(--c-sub);}
.tp-help-arrow{color:#b9c9e2;font-size:19px;flex:none;}

/* 移动端微调 */
@media (max-width:560px){
  .tp-bar{padding:9px 13px;padding-top:calc(9px + var(--safe-top));gap:9px;}
  .tp-back{font-size:14px;padding:7px 13px 7px 9px;min-height:40px;}
  .tp-title{font-size:15.5px;}
  .tp-stars{padding:4px 11px;font-size:13.5px;}
  .tp-body{padding:14px 13px calc(26px + var(--safe-bottom));}
  .tp-head{padding:16px 16px;border-radius:18px;border-left-width:6px;}
  .tp-content{font-size:16px;line-height:1.78;}
  .tp-sec{padding:16px 16px;border-radius:18px;}
  .tp-sec-title{font-size:15px;}
  .rt-display{font-size:48px;}
  .rt-btn{padding:12px 24px;font-size:15px;min-height:48px;}
  .selfeval{gap:7px;}
  .se-btn{padding:13px 5px;min-height:70px;font-size:13.5px;}
  .photo-slot{padding:26px 14px;}
  .counter-num{font-size:38px;min-width:92px;}
  .counter-btn{width:50px;height:50px;font-size:22px;}
  .tp-btnrow{gap:9px;}
  .tp-btnrow .tp-mini{font-size:14px;min-height:48px;}
}

@media (min-width:1024px){
  .tp-body{max-width:720px;}
}

/* ══════════════════════════════════════════════════════════
   朗读模块 · 关键内容 + 拼音 + 麦克风录音
   ══════════════════════════════════════════════════════════ */

.rd-loading{padding:52px 20px;text-align:center;color:var(--c-sub);font-size:14.5px;}

/* ── 朗读内容：语文带拼音 ── */
.rd-content{
  background:linear-gradient(180deg,#fbfdff,#f6faff);
  border:1.5px solid #e4eefb;border-radius:16px;
  padding:18px 16px;margin-top:4px;
}
.py-text{display:flex;flex-wrap:wrap;align-items:flex-end;}
.py-char{
  display:inline-flex;flex-direction:column;align-items:center;
  margin:0 1px 8px;min-width:26px;
}
.py-mark{
  font-size:11.5px;line-height:1.25;color:#7b93b8;font-weight:600;
  letter-spacing:.2px;white-space:nowrap;
  font-family:"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
}
.py-han{
  font-size:21px;line-height:1.3;color:#2b3b57;font-weight:600;
  font-family:"Kaiti SC","STKaiti","KaiTi","Songti SC",serif;
}
.py-char.focus .py-han{color:#2f6fe0;}
.py-char.focus .py-mark{color:#4a90ff;font-weight:800;}
.py-char.focus{background:#eaf3ff;border-radius:8px;}
.py-space{display:inline-block;width:14px;}

/* ── 朗读内容：英语纯文本 ── */
.rd-plain{
  font-size:19px;line-height:2;color:#2b3b57;letter-spacing:.3px;
  font-family:"Georgia","Times New Roman",serif;word-break:break-word;
}
.rd-plain .rd-key{
  color:#1a9e64;font-weight:800;background:#e9fbf2;
  border-radius:6px;padding:1px 4px;
}

/* ── 重点词 ── */
.rd-focus{
  display:flex;flex-wrap:wrap;align-items:center;gap:7px;
  margin-top:12px;padding-top:12px;border-top:1px dashed #e2eaf7;
}
.rd-focus-t{font-size:12.5px;color:var(--c-sub);font-weight:700;}
.rd-focus-p{
  font-size:13px;font-weight:700;color:#2f6fe0;background:#eaf3ff;
  border-radius:99px;padding:3px 11px;
}

/* ── 麦克风 ── */
.rd-mic-sec{text-align:center;}
.rd-mic{
  position:relative;display:inline-flex;align-items:center;justify-content:center;
  width:104px;height:104px;border-radius:50%;border:none;cursor:pointer;
  background:linear-gradient(145deg,var(--accent,#4a90ff),color-mix(in srgb,var(--accent,#4a90ff) 72%,#2f6fe0));
  color:#fff;font-family:inherit;
  box-shadow:0 10px 26px color-mix(in srgb,var(--accent,#4a90ff) 40%,transparent);
  transition:transform .18s ease, box-shadow .18s ease;
  -webkit-tap-highlight-color:transparent;
}
.rd-mic:active{transform:scale(.94);}
.rd-mic.is-on{animation:micPulse 1.5s ease-in-out infinite;}
.rd-mic-ring{
  position:absolute;inset:-10px;border-radius:50%;
  border:2.5px solid color-mix(in srgb,var(--accent,#4a90ff) 45%,transparent);
  opacity:0;transition:opacity .2s ease;
}
.rd-mic.is-on .rd-mic-ring{opacity:1;animation:ringOut 1.5s ease-out infinite;}
.rd-mic-icon{position:relative;z-index:1;}
@keyframes micPulse{
  0%,100%{box-shadow:0 10px 26px color-mix(in srgb,var(--accent,#4a90ff) 40%,transparent);}
  50%{box-shadow:0 10px 34px color-mix(in srgb,var(--accent,#4a90ff) 62%,transparent);}
}
@keyframes ringOut{
  0%{transform:scale(.9);opacity:.85;}
  100%{transform:scale(1.28);opacity:0;}
}
.rd-mic-label{
  margin-top:14px;font-size:14.5px;font-weight:700;color:#41527a;
}
.rd-live{
  margin-top:11px;font-size:13.5px;color:#7b93b8;line-height:1.6;
  background:#f5f9ff;border-radius:11px;padding:9px 13px;
  min-height:38px;word-break:break-word;
}
.rd-nosupport{
  font-size:14px;color:#7a6a4a;line-height:1.85;
  background:#fffbf0;border-radius:14px;padding:15px 17px;
  border-left:4px solid #ffd877;text-align:left;
}
/* 麦克风出错/无声音时的友好提示（替代静默失败） */
.rd-mic-notice{
  margin-top:13px;font-size:14px;line-height:1.8;color:#8a5a1f;
  background:#fff8ec;border-radius:13px;padding:13px 15px;
  border-left:4px solid #f5a623;text-align:left;
  animation:noticeIn .25s ease;
}
@keyframes noticeIn{from{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}

/* ── 逐句点亮 ── */
.rd-lines{display:grid;gap:9px;}
.rd-line{
  display:flex;align-items:flex-start;gap:10px;
  background:#f8fbff;border:1.5px solid #e8f0fa;border-radius:13px;
  padding:11px 13px;transition:all .25s ease;
}
.rd-line-dot{
  flex:none;width:17px;height:17px;border-radius:50%;
  border:2px solid #cfdcee;margin-top:2px;position:relative;
  transition:all .25s ease;
}
.rd-line-txt{
  font-size:15px;line-height:1.75;color:#41527a;word-break:break-word;
}
.rd-line.on{background:#eafaf1;border-color:#b9ead1;}
.rd-line.on .rd-line-dot{background:#2fb673;border-color:#2fb673;}
.rd-line.on .rd-line-dot::after{
  content:"";position:absolute;left:4px;top:1px;width:5px;height:9px;
  border:solid #fff;border-width:0 2.2px 2.2px 0;transform:rotate(45deg);
}
.rd-line.on .rd-line-txt{color:#1a7a4e;font-weight:600;}

/* ── 评分结果 ── */
.rd-score{
  margin-top:16px;padding:17px 16px;border-radius:16px;
  background:linear-gradient(180deg,#fffdf4,#fff9e8);
  border:1.5px solid #ffe4a3;text-align:center;
  animation:fadeUp .35s both;
}
.rd-stars{font-size:32px;line-height:1;color:#ffc531;letter-spacing:4px;}
.rd-praise{margin-top:10px;font-size:15px;font-weight:800;color:#a86a05;line-height:1.6;}
.rd-detail{margin-top:7px;font-size:13px;color:#b58533;}

/* ── 选段 ── */
.rd-chips{display:flex;flex-wrap:wrap;gap:9px;}
.rd-chip{
  border:1.5px solid var(--c-line);background:#fbfdff;border-radius:99px;
  padding:8px 15px;font-family:inherit;font-size:13.5px;font-weight:700;
  color:#5b7ba8;cursor:pointer;transition:all .2s ease;
}
.rd-chip:active{transform:scale(.96);}
.rd-chip.on{
  background:var(--accent-bg,#eaf4ff);color:var(--accent,#2f6fe0);
  border-color:var(--accent,#2f6fe0);
}

/* ══════════════════════════════════════════════════════════
   数学趣味练习
   ══════════════════════════════════════════════════════════ */

.fq-progress{display:flex;align-items:center;gap:11px;margin:14px 0 16px;}
.fq-bar{
  flex:1;height:9px;border-radius:99px;background:#e9f1fb;overflow:hidden;
}
.fq-bar span{
  display:block;height:100%;border-radius:99px;
  background:linear-gradient(90deg,#6db3ff,#4a90ff);
  transition:width .35s ease;
}
.fq-count{font-size:13px;font-weight:800;color:var(--c-sub);flex:none;}

.fq-list{display:grid;gap:13px;}
.fq-card{
  background:#fbfdff;border:1.5px solid #e6eefa;border-radius:16px;
  padding:15px 16px;transition:all .25s ease;
}
.fq-card.is-done{background:#f6fdf9;border-color:#bdebd2;}
.fq-top{display:flex;align-items:center;gap:9px;margin-bottom:9px;flex-wrap:wrap;}
.fq-kind{
  font-size:12px;font-weight:800;border-radius:99px;padding:3px 11px;flex:none;
}
.fq-kind-story{background:#fff4e3;color:#c47a12;}
.fq-kind-concept{background:#eaf3ff;color:#2f6fe0;}
.fq-kind-oral{background:#e9fbf2;color:#1a9e64;}
.fq-kind-judge{background:#f5eefd;color:#8a5cd6;}
.fq-title{font-size:14.5px;font-weight:800;color:#33415c;}
.fq-q{
  font-size:15.5px;line-height:1.85;color:#2b3b57;word-break:break-word;
}
.fq-hint{
  margin-top:10px;font-size:13px;line-height:1.75;color:#8a6a1f;
  background:#fffbf0;border-radius:10px;padding:8px 12px;
  border-left:3px solid #ffd877;
}
.fq-hint b{font-weight:800;margin-right:6px;}
.fq-actions{display:flex;gap:9px;margin-top:13px;flex-wrap:wrap;}
.fq-btn-ans{
  background:#f2f6fc;color:#5b7ba8;border:none;border-radius:99px;
  font-family:inherit;font-weight:700;font-size:13.5px;padding:9px 17px;cursor:pointer;
  transition:all .2s ease;
}
.fq-btn-ans:active{transform:scale(.96);}
.fq-btn-done{
  background:var(--accent,#5aa9f5);color:#fff;border:none;border-radius:99px;
  font-family:inherit;font-weight:700;font-size:13.5px;padding:9px 20px;cursor:pointer;
  box-shadow:0 4px 12px color-mix(in srgb, var(--accent,#5aa9f5) 32%, transparent);
  transition:all .2s ease;
}
.fq-btn-done:active{transform:scale(.96);}
.fq-card.is-done .fq-btn-done{background:#e7f7ef;color:#1a9e64;box-shadow:none;}

.fq-answer{
  margin-top:12px;padding:12px 14px;border-radius:12px;
  background:#f0f8ff;border-left:4px solid #7cc0f5;
  font-size:14px;line-height:1.85;color:#2b4b6b;
  animation:fadeUp .28s both;
}
.fq-answer[hidden]{display:none !important;}

/* ── 移动端微调 ── */
@media (max-width:560px){
  .py-han{font-size:20px;}
  .py-mark{font-size:11px;}
  .rd-plain{font-size:17.5px;line-height:1.95;}
  .rd-mic{width:96px;height:96px;}
  .rd-line-txt{font-size:14.5px;}
  .fq-q{font-size:15px;}
  .fq-actions{gap:8px;}
  .fq-btn-ans,.fq-btn-done{font-size:13px;padding:9px 15px;min-height:42px;}
  .rd-chip{min-height:40px;display:inline-flex;align-items:center;}
  .rd-focus-p{font-size:12.5px;}
}
@media (hover:none){
  .rd-mic:hover{transform:none;}
}

/* ═══════════ 识字认字界面 ═══════════ */
.lt-progress{display:flex;align-items:center;gap:10px;margin:14px 0 6px}
.lt-bar{flex:1;height:10px;background:#eef1f6;border-radius:99px;overflow:hidden}
.lt-bar-in{height:100%;background:linear-gradient(90deg,#5b7cfa,#8a6bd1);border-radius:99px;transition:width .3s}
.lt-count{font-size:14px;font-weight:700;color:#5b7cfa;white-space:nowrap}
.lt-challenge-hint{font-size:13.5px;color:#7d8899;margin:8px 0 2px;text-align:center}
.lt-stage{margin:14px 0;display:flex;justify-content:center}
.lt-card{position:relative;width:min(62vw,240px);aspect-ratio:3/4;background:#fff;border-radius:20px;
  box-shadow:0 6px 24px rgba(60,80,150,.12);display:flex;flex-direction:column;align-items:center;
  justify-content:center;gap:6px;cursor:pointer;user-select:none;border:2px solid #eef1f6;transition:transform .15s}
.lt-card:active{transform:scale(.97)}
.lt-py{font-size:22px;color:#5b7cfa;font-weight:600;min-height:30px;letter-spacing:1px;transition:opacity .2s}
.lt-ch{font-size:min(30vw,110px);line-height:1.1;color:#26303d;font-weight:400}
.lt-word{font-size:15px;color:#93a0b1}
.lt-card.lt-hide-py .lt-py{opacity:0}
.lt-card.lt-reveal .lt-py{opacity:1}
.lt-nav{display:flex;gap:10px;justify-content:center;margin:6px 0 14px}
.lt-btn{border:none;background:#eef1f6;color:#4a5a6e;border-radius:12px;padding:11px 18px;
  font-size:15px;font-weight:600;cursor:pointer;transition:transform .1s}
.lt-btn:active{transform:scale(.95)}
.lt-btn:disabled{opacity:.4;cursor:default}
.lt-btn.lt-say{background:#fff4e0;color:#c77d1f}
.lt-btn.primary{background:linear-gradient(140deg,#3ecf9a,#2aa87a);color:#fff}
.lt-actions{display:flex;gap:12px;justify-content:center;flex-wrap:wrap}
.lt-big-btn{border:none;border-radius:16px;padding:15px 26px;font-size:16.5px;font-weight:700;cursor:pointer;
  transition:transform .12s;color:#fff;background:#5b7cfa;min-width:140px}
.lt-big-btn:active{transform:scale(.96)}
.lt-big-btn.lt-know{background:#2aa87a}
.lt-big-btn.lt-show{background:#e8a13c}
.lt-big-btn.lt-go-challenge{background:linear-gradient(135deg,#5b7cfa,#8a6bd1)}
.lt-finish{display:block;width:calc(100% - 32px);margin:16px auto 0;border:none;border-radius:16px;
  padding:16px;font-size:17px;font-weight:700;color:#fff;background:#c3cad6;cursor:not-allowed;transition:background .2s}
.lt-finish.ready{background:linear-gradient(135deg,#f5a623,#f76b1c);cursor:pointer;animation:pulseReady 1.2s infinite}
@keyframes pulseReady{0%,100%{transform:scale(1)}50%{transform:scale(1.02)}}
.lt-dots{display:flex;flex-wrap:wrap;gap:7px;justify-content:center;margin-top:18px}
.lt-dot{width:12px;height:12px;border-radius:50%;background:#dde3ec;transition:background .2s}
.lt-dot.on{outline:2px solid #5b7cfa;outline-offset:2px}
.lt-dot.known{background:#2aa87a}

/* ═══════════ 英语单词默写界面 ═══════════ */
.dt-mode-hint{font-size:14.5px;color:#5c6a7c;margin:16px 0 12px;text-align:center}
.dt-preview-hint{font-size:13.5px;color:#5c6a7c;line-height:1.7;margin-bottom:14px;text-align:center}
.dt-word-list-preview .dt-word-item{background:linear-gradient(140deg,#fffdf5,#fff8e6);
  border:1.5px solid #ffe6a8;padding:14px 16px;align-items:center}
.dt-word-list-preview .dt-word-item b{font-size:24px}
.dt-word-list-preview .dt-word-py{font-size:15px;color:#a4670c}
/* 拼音置于文字上方，与朗读题型的 .py-text/.py-char 排版完全一致（字号/间距/行距/居中） */
.dt-word-item .py-text{justify-content:center;margin:0 auto;padding:2px 0}
.dt-word-item .dt-word-plain{font-size:20px;color:#26303d;letter-spacing:.5px}
.dt-word-py-above{margin-right:auto}
.dt-reveal-tip{font-size:14px;color:#5c6a7c;margin-top:8px;line-height:1.6}
.dt-mode-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin:6px 0}
.dt-mode-card{background:#fff;border:2px solid #eef1f6;border-radius:18px;padding:22px 14px;text-align:center;
  cursor:pointer;transition:transform .15s,border-color .15s}
.dt-mode-card:active{transform:scale(.96)}
.dt-mode-card:hover{border-color:#2aa87a}
.dt-mode-ic{font-size:40px;margin-bottom:10px}
.dt-mode-name{font-size:16.5px;font-weight:700;color:#26303d;margin-bottom:5px}
.dt-mode-desc{font-size:12.5px;color:#8b97a8;line-height:1.5}
.dt-progress{height:8px;background:#eef1f6;border-radius:99px;overflow:hidden;margin-top:12px}
.dt-word-list{display:flex;flex-direction:column;gap:10px;margin:4px 0 2px}
.dt-word-item{display:flex;align-items:baseline;gap:10px;background:#fff;border:1.5px solid #eef1f6;
  border-radius:14px;padding:12px 16px}
.dt-word-item b{font-size:20px;color:#26303d;letter-spacing:.5px}
.dt-word-item .dt-word-py{font-size:14px;color:#8b97a8}
.dt-word-item.ok{border-color:#bfe9d5;background:#f2fbf6}
.dt-word-item.ok b{color:#1f8a57}
.dt-word-item i{margin-left:auto;font-style:normal;font-size:12.5px;color:#b0624f}
.dt-word-item.ok i{color:#1f8a57}
.dt-bar-in{height:100%;background:linear-gradient(90deg,#2aa87a,#3ecf9a);border-radius:99px;transition:width .3s}
.dt-write-stage{text-align:center;padding:26px 0 8px}
.dt-zh{font-size:32px;font-weight:700;color:#26303d;margin-bottom:10px}
.dt-first-letter{font-size:15px;color:#2aa87a;font-weight:700;letter-spacing:1px}
.dt-write-hint{margin-top:14px;font-size:13.5px;color:#93a0b1}
.dt-main-btn{display:block;width:calc(100% - 32px);margin:22px auto 0;border:none;border-radius:16px;
  padding:16px;font-size:17px;font-weight:700;color:#fff;cursor:pointer;
  background:linear-gradient(135deg,#2aa87a,#3ecf9a);transition:transform .12s}
.dt-main-btn:active{transform:scale(.97)}
.dt-check{margin:20px 0;background:#fff;border-radius:16px;padding:18px;box-shadow:0 3px 14px rgba(35,55,90,.07)}
.dt-check.right{border:2px solid #2aa87a}
.dt-check.wrong{border:2px solid #e8604c}
.dt-correct{font-size:16px;color:#4a5a6e;margin-bottom:10px}
.dt-correct b{color:#2aa87a;font-size:22px;letter-spacing:2px;margin-left:6px}
.dt-check-q{font-size:14.5px;color:#8b97a8;margin-bottom:12px}
.dt-check-btns{display:flex;gap:12px}
.dt-mark{flex:1;border:none;border-radius:13px;padding:13px;font-size:16px;font-weight:700;cursor:pointer;
  transition:transform .12s;color:#fff}
.dt-mark:active{transform:scale(.95)}
.dt-mark.right{background:#2aa87a}
.dt-mark.wrong{background:#e8604c}
.dt-nav{display:flex;gap:10px;justify-content:center;margin:16px 0}
.dt-result{text-align:center;padding:22px 0 8px}
.dt-result.great .dt-score{color:#2aa87a}
.dt-stars{font-size:34px;color:#f5a623;letter-spacing:6px;margin-bottom:8px}
.dt-score{font-size:38px;font-weight:800;color:#26303d;margin-bottom:6px}
.dt-praise{font-size:16px;color:#5c6a7c}
.mg-best{margin-top:10px;font-size:14px;color:#e8a13c;font-weight:700}
.dt-wrong-list{background:#fff;border-radius:14px;padding:14px 16px;margin:14px 0}
.dt-wrong-h{font-size:13.5px;font-weight:700;color:#e8604c;margin-bottom:9px}
.dt-wrong-item{display:flex;justify-content:space-between;align-items:center;padding:8px 0;
  border-bottom:1px dashed #f0f2f6;font-size:15.5px}
.dt-wrong-item:last-child{border-bottom:none}
.dt-wrong-item b{color:#26303d;letter-spacing:1px}
.dt-wrong-item span{color:#8b97a8;font-size:13.5px}
.dt-result-btns{display:flex;gap:12px;margin-top:18px}
.dt-big-btn{flex:1;border:none;border-radius:16px;padding:15px;font-size:16.5px;font-weight:700;
  cursor:pointer;transition:transform .12s;background:#eef1f6;color:#4a5a6e}
.dt-big-btn:active{transform:scale(.96)}
.dt-big-btn.primary{background:linear-gradient(135deg,#f5a623,#f76b1c);color:#fff}
/* 字母拼词 */
.dt-build-stage{text-align:center;padding:18px 0 8px}
.dt-slots{display:flex;gap:8px;justify-content:center;flex-wrap:wrap;margin-top:14px}
.dt-slot{width:44px;height:52px;border-radius:11px;background:#fff;border:2px dashed #cdd6e3;
  display:flex;align-items:center;justify-content:center;font-size:24px;font-weight:800;color:#26303d}
.dt-slot.filled{border-style:solid;border-color:#2aa87a;background:#ebf8f3}
.dt-slot-gap{width:20px;flex:none}
.dt-slot-space{border-style:dotted;border-color:#e3b23c;background:#fffaf0}
.dt-spell-warn{max-width:420px;margin:12px auto 0;padding:9px 14px;border-radius:12px;
  background:#fff4e5;border:1.5px solid #ffd9a0;color:#a4670c;font-size:13px;line-height:1.6;text-align:center}
.dt-tiles{display:flex;flex-wrap:wrap;gap:11px;justify-content:center;margin:22px 0 6px}
.dt-tile{width:54px;height:58px;border:none;border-radius:13px;background:#fff;color:#2b3a4d;
  font-size:23px;font-weight:800;cursor:pointer;box-shadow:0 3px 10px rgba(35,55,90,.09);
  transition:transform .12s,opacity .15s}
.dt-tile:active{transform:scale(.9)}
.dt-tile.used{opacity:.25;cursor:default}
.dt-tile.used:active{transform:none}

/* ═══════════ 数学数字游戏界面 ═══════════ */
.mg-combo{text-align:center;margin-top:10px;font-size:15px;font-weight:800;color:#f76b1c;
  animation:comboPop .35s}
@keyframes comboPop{0%{transform:scale(.6);opacity:0}70%{transform:scale(1.12)}100%{transform:scale(1)}}
.mg-stage{padding:12px 0 4px}
.mg-from{font-size:12.5px;color:#8b97a8;text-align:center;margin-bottom:8px}
.mg-q{font-size:24px;font-weight:700;color:#26303d;text-align:center;margin:14px 0 18px;line-height:1.5}
.mg-hint{font-size:13.5px;color:#93a0b1;text-align:center;margin:-8px 0 14px}
.mg-answer{margin:0 0 16px;background:#fff;border-radius:13px;padding:13px 15px;font-size:14.5px;
  color:#4a5568;line-height:1.8;box-shadow:0 2px 10px rgba(35,55,90,.06)}
.mg-answer b{display:block;color:#2f7fd8;font-size:12.5px;margin-bottom:4px}
.mg-opts{display:grid;grid-template-columns:1fr 1fr;gap:13px;padding:0 4px}
.mg-opt{border:none;border-radius:16px;background:#fff;color:#2b3a4d;padding:20px 12px;
  font-size:24px;font-weight:800;cursor:pointer;box-shadow:0 3px 12px rgba(35,55,90,.08);
  transition:transform .12s,background .15s}
.mg-opt:active{transform:scale(.95)}
.mg-opt.wide{grid-column:1/-1;font-size:17px;font-weight:700;padding:16px;
  background:linear-gradient(135deg,#2f7fd8,#4f9ce8);color:#fff}
.mg-opt.done{background:linear-gradient(135deg,#2f7fd8,#4f9ce8);color:#fff}
.mg-opt.correct{background:#2aa87a;color:#fff;animation:correctPop .35s}
.mg-opt.incorrect{background:#e8604c;color:#fff;animation:shake .4s}
@keyframes correctPop{0%{transform:scale(1)}50%{transform:scale(1.06)}100%{transform:scale(1)}}
@keyframes shake{0%,100%{transform:translateX(0)}25%{transform:translateX(-7px)}75%{transform:translateX(7px)}}
.mg-compare{display:flex;align-items:center;gap:14px;justify-content:center;margin:16px 0}
.mg-side{flex:1;max-width:150px;border:none;border-radius:18px;background:#fff;color:#2b3a4d;
  padding:26px 10px;font-size:32px;font-weight:800;cursor:pointer;
  box-shadow:0 3px 12px rgba(35,55,90,.08);transition:transform .12s}
.mg-side:active{transform:scale(.95)}
.mg-side.correct{background:#2aa87a;color:#fff}
.mg-side.incorrect{background:#e8604c;color:#fff;animation:shake .4s}
.mg-vs{font-size:16px;font-weight:800;color:#c3cad6}
.mg-count-display{background:#fff;border-radius:16px;padding:20px 14px;text-align:center;
  font-size:26px;line-height:1.6;letter-spacing:5px;margin-bottom:16px;white-space:pre-wrap}
.mg-open-btns{display:flex;justify-content:center;margin-top:6px}
.mg-score-row{text-align:center;margin-top:16px;font-size:14.5px;color:#8b97a8}
.mg-score-row b{color:#2f7fd8;font-size:17px}

/* 移动端微调 */
@media (max-width:560px){
  .lt-ch{font-size:96px}
  .dt-zh{font-size:28px}
  .mg-q{font-size:21px}
  .mg-opt{font-size:21px;padding:17px 10px}
  .dt-slot{width:38px;height:46px;font-size:20px}
  .dt-tile{width:48px;height:52px;font-size:20px}
  .mg-count-display{font-size:22px;letter-spacing:4px}
}

/* ═══════════ 手写练字板 ═══════════ */
.hw-progress{display:flex;align-items:center;gap:10px;margin:0 0 12px}
.hw-bar{flex:1;height:9px;background:#eef1f6;border-radius:99px;overflow:hidden}
.hw-bar-in{height:100%;background:linear-gradient(90deg,#f5a623,#f76b1c);border-radius:99px;transition:width .3s}
.hw-count{font-size:13px;color:#8b97a8;font-weight:700}
.hw-stage{display:flex;justify-content:center;margin:6px 0 12px}
.hw-canvas{border-radius:18px;box-shadow:0 3px 14px rgba(35,55,90,.10);cursor:crosshair;
  background:#fffdf7;touch-action:none;max-width:100%}
.hw-word{text-align:center;font-size:15px;color:#5c6a7c;margin-bottom:10px}
.hw-word b{color:#e8604c;font-size:17px}
.hw-tools{display:flex;justify-content:center;gap:10px;margin-bottom:14px;flex-wrap:wrap}
.hw-btn{border:none;border-radius:12px;background:#fff;color:#4a5a6e;padding:9px 15px;
  font-size:14px;font-weight:600;cursor:pointer;box-shadow:0 2px 8px rgba(35,55,90,.07)}
.hw-btn:active{transform:scale(.95)}
.hw-actions{display:flex;gap:10px;justify-content:center;align-items:center;margin-bottom:14px;flex-wrap:wrap}
.hw-main-btn{border:none;border-radius:16px;padding:15px 22px;font-size:16.5px;font-weight:700;
  cursor:pointer;background:linear-gradient(135deg,#f5a623,#f76b1c);color:#fff;
  box-shadow:0 4px 14px rgba(247,107,28,.28);transition:transform .12s}
.hw-main-btn:active{transform:scale(.96)}
.hw-main-btn:disabled{opacity:.5;cursor:default}
.hw-finish{display:block;width:100%;border:none;border-radius:16px;padding:15px;font-size:16.5px;
  font-weight:700;cursor:pointer;background:#eef1f6;color:#9aa5b5;transition:all .2s}
.hw-finish.ready{background:linear-gradient(135deg,#f5a623,#f76b1c);color:#fff;
  box-shadow:0 4px 14px rgba(247,107,28,.28)}
.hw-entry-btn{display:block;width:100%;border:none;border-radius:14px;padding:14px;font-size:16px;
  font-weight:700;cursor:pointer;background:#fff2ef;color:#e8604c;
  box-shadow:0 2px 10px rgba(232,96,76,.14);transition:transform .12s}
.hw-entry-btn:active{transform:scale(.97)}

/* ═══════════ 语音输入按钮 ═══════════ */
.fq-btn-mic{border:none;border-radius:12px;background:#eaf4ff;color:#2f7fd8;padding:9px 14px;
  font-size:14px;font-weight:600;cursor:pointer;transition:all .15s}
.fq-btn-mic:active{transform:scale(.95)}
.fq-btn-mic.is-on{background:#2f7fd8;color:#fff;animation:micPulse 1.1s infinite}
@keyframes micPulse{0%,100%{box-shadow:0 0 0 0 rgba(47,127,216,.45)}50%{box-shadow:0 0 0 8px rgba(47,127,216,0)}}
.fq-voice{margin-top:10px;background:#f2f8ff;border-radius:11px;padding:10px 13px;
  font-size:14.5px;color:#2b5f9e;line-height:1.7;word-break:break-all}
.fq-actions{display:flex;gap:9px;flex-wrap:wrap;margin-top:12px}
.mg-mic{display:block;margin:14px auto 8px;border:none;border-radius:14px;background:#fff;
  color:#2f7fd8;padding:12px 22px;font-size:15px;font-weight:700;cursor:pointer;
  box-shadow:0 2px 10px rgba(35,55,90,.08)}
.mg-mic.is-on{background:#2f7fd8;color:#fff;animation:micPulse 1.1s infinite}
.mg-voice{max-width:420px;margin:0 auto;background:#f2f8ff;border-radius:11px;padding:10px 13px;
  font-size:14.5px;color:#2b5f9e;line-height:1.7;text-align:center;word-break:break-all}
.task-mic{margin:10px 0 4px}

/* ═══════════ 添加任务面板 ═══════════ */
.subj-pick{display:flex;gap:9px;margin-bottom:6px}
.sp-item{flex:1;border:1.6px solid #e2e8f0;background:#fff;border-radius:11px;padding:10px 0;
  font-size:15px;font-weight:700;color:#5c6a7c;cursor:pointer;transition:all .15s}
.sp-item.on{border-color:#f5a623;background:#fff7e8;color:#c77c0a}

/* ═══════════ 详情页计时器 ═══════════ */
.tp-timer{font-size:13px;font-weight:700;color:#8b97a8;background:#f2f5f9;border-radius:99px;
  padding:4px 10px;white-space:nowrap}
.tp-timer.over{color:#e8604c;background:#fff0ee}

/* ═══════════ 朗读：逐字判定 ═══════════ */
.rd-legend{display:flex;gap:12px;justify-content:center;margin:10px 0 4px;flex-wrap:wrap}
.lg{font-size:12.5px;color:#8b97a8;display:flex;align-items:center;gap:5px}
.lg::before{content:'';width:11px;height:11px;border-radius:3px;display:inline-block}
.lg-right::before{background:#2fbf71}
.lg-wrong::before{background:#e8604c}
.lg-wait::before{background:#dfe5ec}
.lg-lock::before{background:#cdd3dc}
.rd-progress{display:flex;align-items:center;gap:9px;margin:8px 0 2px}
.rd-progress-bar{flex:1;height:9px;background:#eef1f6;border-radius:99px;overflow:hidden}
.rd-progress-bar span{display:block;height:100%;background:linear-gradient(90deg,#5ecf9a,#2fbf71);
  border-radius:99px;transition:width .3s}
.rd-progress-num{font-size:14px;font-weight:800;color:#2fbf71}
/* 原文逐字染色 */
.py-char.right .py-han,.rd-word.right,.pv-han.right{color:#2fbf71;background:#e6f9ef;
  border-radius:6px;box-shadow:0 0 0 2px #e6f9ef}
.py-char.wrong .py-han,.rd-word.wrong{color:#e8604c;background:#fff0ee;
  border-radius:6px;box-shadow:0 0 0 2px #fff0ee}
.py-char.right .py-mark{color:#2fbf71}
.py-char.wrong .py-mark{color:#e8604c}
.py-punc .py-han{color:#a5b0bf}
.rd-en{font-size:24px;line-height:2.1;letter-spacing:.5px}
.rd-word{padding:1px 3px;border-radius:6px;transition:all .18s}
.rd-punc{color:#a5b0bf}
.rd-content.is-hidden .py-han{color:transparent;text-shadow:0 0 11px rgba(60,80,110,.35)}
.rd-peek{display:block;margin:10px auto 0;border:none;border-radius:12px;background:#fff2ef;
  color:#e8604c;padding:9px 16px;font-size:14px;font-weight:700;cursor:pointer}
.rd-listen{display:block;margin:12px auto 0;border:none;border-radius:12px;background:#eaf4ff;
  color:#2f7fd8;padding:9px 16px;font-size:14px;font-weight:700;cursor:pointer}
.rd-score-card{background:#f7f9fc;border-radius:14px;padding:14px;text-align:center}
.rd-score-card.perfect{background:#e9fbf2}
.rd-score-num{font-size:38px;font-weight:800;color:#2fbf71;line-height:1.1}
.rd-score-num span{font-size:18px;margin-left:2px}
.rd-score-detail{font-size:14px;color:#5c6a7c;margin-top:2px}
.rd-score-tip{font-size:13.5px;color:#8b97a8;margin-top:6px}
.rd-perfect-tip{text-align:center;font-size:16px;font-weight:800;color:#2fbf71;margin:6px 0 10px}
.rd-need100{background:#fff8e8;border:1.5px dashed #f5a623;border-radius:14px;padding:13px 15px;
  font-size:15px;font-weight:700;color:#a8720a;text-align:center;margin-bottom:10px}
.rd-need100 b{color:#e8604c}
.rd-need100-sub{font-size:13px;font-weight:500;color:#a08a5e;margin-top:5px;line-height:1.6}

/* ═══════════ 口答 ═══════════ */
.oa-question{font-size:18px;line-height:1.8;color:#2b3a55;font-weight:700;
  background:#f7f9fc;border-radius:14px;padding:14px 16px}
.oa-say-q{margin-top:9px;border:none;border-radius:11px;background:#eaf4ff;color:#2f7fd8;
  padding:8px 14px;font-size:14px;font-weight:700;cursor:pointer;
  display:inline-flex;align-items:center;gap:6px}
.oa-input-row{display:flex;gap:9px;align-items:flex-start}
.oa-input{flex:1;border:1.6px solid #e2e8f0;border-radius:13px;padding:11px 13px;font-size:15.5px;
  font-family:inherit;resize:vertical;line-height:1.6;color:#2b3a55}
.oa-input:focus{outline:none;border-color:#5aa9f5}
.oa-input-main{flex:1;min-width:0}
.oa-mic{border:none;border-radius:13px;background:#eaf4ff;color:#2f7fd8;width:52px;height:52px;
  cursor:pointer;flex-shrink:0;display:flex;align-items:center;justify-content:center}
.oa-mic:disabled{opacity:.45;cursor:default}
.oa-mic.is-on{background:#2f7fd8;color:#fff;animation:micPulse 1.1s infinite}
.oa-rec-hint{margin-top:6px;font-size:12.5px;color:#e0670a;font-weight:700;min-height:17px}
.oa-actions{margin-top:11px}
.oa-submit{width:100%;border:none;border-radius:14px;padding:14px;font-size:16px;font-weight:700;
  cursor:pointer;background:linear-gradient(135deg,#5aa9f5,#3d8dea);color:#fff;
  box-shadow:0 4px 14px rgba(90,169,245,.28)}
.oa-submit.is-rec{background:linear-gradient(135deg,#ff9a3d,#f77b1f);box-shadow:0 4px 14px rgba(247,123,31,.3)}
.oa-submit:disabled{opacity:.6;cursor:default}
/* 语音转文字：原样展示区（只读） */
.oa-transcript{border:1.6px solid #e2e8f0;border-radius:13px;background:#fbfcfe;
  padding:10px 11px;min-height:86px;display:flex;flex-direction:column;gap:8px}
.oa-take{background:#fff;border:1.4px solid #e6edf5;border-radius:10px;padding:8px 11px}
.oa-take.live{border-style:dashed;border-color:#f5a623;background:#fffdf6}
.oa-take-n{display:inline-block;background:#eaf4ff;color:#2f7fd8;font-size:11.5px;font-weight:800;
  border-radius:99px;padding:1px 9px;margin-bottom:4px}
.oa-take.live .oa-take-n{background:#fff2dd;color:#a8720a}
.oa-take-txt{font-size:15px;color:#2b3a55;line-height:1.75;word-break:break-all}
.oa-take-waiting{color:#a8b4c4;font-size:13.5px}
.oa-empty{color:#8b97a8;font-size:14px;line-height:1.7;text-align:center;padding:14px 8px}
.oa-empty small{font-size:12px;color:#a8b4c4}
.oa-transcript-note{margin-top:7px;font-size:12px;color:#8b97a8;line-height:1.6}
.oa-transcript-note b{color:#5c6a7c}
.oa-novoice{font-size:13.5px;color:#a8720a;background:#fff8e8;border-radius:10px;
  padding:9px 12px;margin-bottom:9px;line-height:1.6}
/* 比对结果：差异点 + 建议 */
.oa-feedback{display:flex;gap:11px;align-items:flex-start;padding:13px 14px;border-radius:14px}
.oa-feedback.pass{background:#e9fbf2}
.oa-feedback.try{background:#fff8e8}
.oa-fb-icon{width:26px;flex:none;display:flex;justify-content:center;padding-top:1px}
.oa-fb-txt b{display:block;margin-bottom:3px;font-size:15px}
.oa-fb-txt div{font-size:14.5px;color:#5c6a7c;line-height:1.7}
.oa-sayback{margin-top:5px;font-size:13px;color:#8b97a8}
.oa-diff{margin-top:10px;background:#fff;border:1.5px solid #ffd9a8;border-radius:12px;padding:11px 13px}
.oa-diff-title,.oa-advice-title,.oa-ref-title{display:flex;align-items:center;gap:6px;
  font-size:13px;font-weight:800;color:#a8720a;margin-bottom:5px}
.oa-diff-list{margin:0;padding-left:20px}
.oa-diff-list li{font-size:14px;color:#5c6a7c;line-height:1.75;margin:2px 0}
.oa-advice{margin-top:10px;background:#eef4ff;border:1.5px solid #cfe0ff;border-radius:12px;padding:11px 13px}
.oa-advice-title{color:#2f6bd0;margin-bottom:4px}
.oa-advice-txt{font-size:14.5px;color:#41567a;line-height:1.75}
.oa-ref-box{margin-top:4px;background:#e9fbf2;border:1.5px solid #bfe9d4;border-radius:12px;padding:12px 14px}
.oa-ref-title{color:#1e7a52;margin-bottom:5px}
.oa-ref-txt{font-size:14.5px;color:#20614a;line-height:1.85}
.oa-guide{margin-top:11px;background:#eef4ff;border:1.5px solid #cfe0ff;border-radius:12px;padding:11px 13px}
.oa-guide-tag{display:inline-flex;align-items:center;gap:5px;background:#e0ebff;color:#2f6bd0;
  font-size:12px;font-weight:800;border-radius:99px;padding:2px 10px;margin-bottom:5px}
.oa-guide-txt{font-size:14.5px;color:#41567a;line-height:1.75}
.oa-hint{margin-top:10px;background:#fff;border:1.5px dashed #f5a623;border-radius:12px;padding:11px 13px}
.oa-hint-tag{display:inline-block;background:#fff2dd;color:#a8720a;font-size:12px;font-weight:800;
  border-radius:99px;padding:2px 9px;margin-bottom:5px}
.oa-hint-txt{font-size:14.5px;color:#5c6a7c;line-height:1.7}
.oa-need{background:#f7f9fc;border-radius:14px;padding:13px 15px;font-size:15px;font-weight:700;
  color:#5c6a7c;text-align:center;margin-bottom:10px}
.oa-need-sub{font-size:13px;font-weight:500;color:#8b97a8;margin-top:4px}

/* ═══════════ 背默听写 ═══════════ */
.dt-listen-box{display:flex;align-items:center;gap:12px;background:#f7f9fc;border-radius:14px;
  padding:14px 16px;transition:all .25s}
.dt-listen-box.is-on{background:#eaf4ff;box-shadow:0 0 0 2px #d6ebff inset}
.dt-speak-icon{font-size:28px}
.dt-speak-txt{font-size:15px;font-weight:700;color:#3d5a80}
.dt-tip-line{margin-top:9px;font-size:14px;color:#8b97a8}
.dt-listen-btns{display:flex;gap:9px;margin-top:11px}
.dt-btn{border:none;border-radius:12px;background:linear-gradient(135deg,#5aa9f5,#3d8dea);color:#fff;
  padding:11px 18px;font-size:15px;font-weight:700;cursor:pointer}
.dt-btn.ghost{background:#f2f5f9;color:#5c6a7c}
.dt-btn.mini{padding:8px 13px;font-size:13.5px;background:#fff;color:#5c6a7c;
  box-shadow:0 2px 8px rgba(35,55,90,.07)}
.dt-btn.mini.is-on{background:#5aa9f5;color:#fff}
.dt-pad-wrap{display:flex;justify-content:center;margin:6px 0 10px}
.dt-pad{border-radius:16px;box-shadow:0 3px 14px rgba(35,55,90,.10);background:#fffdf7;
  touch-action:none;max-width:100%}
.dt-pad-tools{display:flex;gap:9px;justify-content:center;flex-wrap:wrap}
.dt-paper-hint{font-size:14.5px;color:#5c6a7c;line-height:1.7;margin-bottom:10px}
.dt-upload{width:100%;border:none;border-radius:14px;padding:15px;font-size:16px;font-weight:700;
  cursor:pointer;background:#fff2ef;color:#e8604c;box-shadow:0 2px 10px rgba(232,96,76,.14)}
.dt-shot{text-align:center}
.dt-shot img{max-width:100%;border-radius:14px;box-shadow:0 3px 12px rgba(35,55,90,.12)}
.dt-shot .dt-btn{margin-top:9px}
.dt-next-row{margin-top:14px}
.dt-next-btn{width:100%;border:none;border-radius:16px;padding:16px;font-size:17px;font-weight:700;
  cursor:pointer;background:linear-gradient(135deg,#f5a623,#f76b1c);color:#fff;
  box-shadow:0 4px 14px rgba(247,107,28,.28)}
.dt-next-hint{text-align:center;font-size:12.5px;color:#8b97a8;margin-top:8px;line-height:1.6}

/* ───── 任务卡上的任务清单子项（按题型分类，逐项打勾） ───── */
.tc-subs{margin:10px 2px 0;padding:10px 12px;background:#f6f9ff;border:1px solid #e3ecfa;border-radius:12px}
.tc-subs-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}
.tc-subs-head b{font-size:13px;color:#2b3a55}
.tc-subs-head span{font-size:12px;color:#5b8def;font-weight:700}
.tc-sub{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;padding:7px 0;border-top:1px dashed #e3ecfa}
.tc-sub:first-of-type{border-top:none}
.tc-sub-icon{font-size:18px;line-height:1.4;flex-shrink:0}
.tc-sub-body{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0}
.tc-sub-tag{display:inline-block;align-self:flex-start;font-size:11px;font-weight:700;color:#3d6fd4;
  background:#eaf1ff;border-radius:6px;padding:1px 7px;margin-bottom:1px}
.tc-sub-text{font-size:13.5px;color:#2b3a55;line-height:1.5;word-break:break-word}
.tc-sub-tip{font-size:12px;color:#7a8aa3;line-height:1.45;word-break:break-word}
.tc-sub-donetag{flex-shrink:0;font-size:12px;font-weight:700;color:#1a9e64;background:#e8f8ef;
  border:1.5px solid #bfe6d0;border-radius:999px;padding:4px 10px}
.tc-sub.is-done .tc-sub-text{color:#9aa7bb;text-decoration:line-through}
.tc-sub.is-done .tc-sub-icon{filter:grayscale(1);opacity:.5}
.tc-sub-btn{flex-shrink:0;border:none;border-radius:999px;padding:5px 13px;font-size:12.5px;font-weight:600;
  background:#fff;border:1.5px solid #c9d9f5;color:#3d6fd4;cursor:pointer;transition:.15s}
.tc-sub-btn:hover{background:#eef4ff}
.tc-sub-btn.go{background:#3d6fd4;border-color:#3d6fd4;color:#fff}
.tc-sub-btn.go:hover{background:#2f5bbf}
.tc-subs-hint{margin-top:6px;font-size:11.5px;color:#93a1b8;line-height:1.5}

/* 多题型任务：分步清单（详情页内按真实内容列出每一步） */
.tp-subrow{display:flex;align-items:flex-start;gap:12px;padding:12px 2px;border-top:1px solid #eef2f8}
.tp-subrow:first-of-type{border-top:none}
.tp-subrow-ic{font-size:22px;line-height:1.3;flex-shrink:0}
.tp-subrow-body{display:flex;flex-direction:column;gap:3px;flex:1;min-width:0}
.tp-subrow-tag{display:inline-block;align-self:flex-start;font-size:11.5px;font-weight:700;color:#3d6fd4;
  background:#eaf1ff;border-radius:6px;padding:1px 8px}
.tp-subrow-text{font-size:15px;color:#21304a;line-height:1.5;font-weight:600;word-break:break-word}
.tp-subrow-tip{font-size:12.5px;color:#7a8aa3;line-height:1.5;word-break:break-word}
.tp-subrow-done{flex-shrink:0;font-size:13px;font-weight:700;color:#1a9e64;background:#e8f8ef;
  border:1.5px solid #bfe6d0;border-radius:999px;padding:5px 12px}
.tp-subrow.is-done .tp-subrow-text{color:#9aa7bb;text-decoration:line-through}
.tp-subrow.is-done .tp-subrow-ic{filter:grayscale(1);opacity:.5}
.tp-subrow-btn{flex-shrink:0;border:none;border-radius:999px;padding:7px 16px;font-size:13px;font-weight:700;
  background:#3d6fd4;border:1.5px solid #3d6fd4;color:#fff;cursor:pointer;transition:.15s}
.tp-subrow-btn:hover{background:#2f5bbf}

/* 逐词高亮展示（拼写后把完整单词/词组亮给孩子看） */
.dt-reveal{display:flex;flex-direction:column;align-items:center;justify-content:center;
  text-align:center;padding:34px 22px;min-height:48vh;animation:dtRevealIn .28s ease}
@keyframes dtRevealIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.dt-reveal-ic{font-size:46px;line-height:1;margin-bottom:10px}
.dt-reveal-label{font-size:18px;font-weight:800;margin-bottom:16px}
.dt-reveal-word{font-size:34px;font-weight:900;letter-spacing:.5px;padding:14px 26px;border-radius:16px;
  background:#eafaf0;color:#1f9d57;border:2px solid #b6e8c8;box-shadow:0 6px 18px rgba(31,157,87,.16);
  word-break:break-word;max-width:100%}
.dt-reveal.bad .dt-reveal-word{background:#fff3ef;color:#e8604c;border-color:#f4c4ba;
  box-shadow:0 6px 18px rgba(232,96,76,.16)}
.dt-reveal.unclear .dt-reveal-word{background:#eef4ff;color:#3a6bd6;border-color:#c9dbff;
  box-shadow:0 6px 18px rgba(58,107,214,.16)}
.dt-reveal-tip{margin-top:14px;font-size:15px;color:#5c6a7c;font-weight:600}
/* 提交后展示的标准答案：拼音同样置于文字上方，与朗读题型 .py-text 排版一致 */
.dt-reveal-py{justify-content:center;margin:4px auto 2px}
.dt-reveal-okbubble{background:#eafaf0;color:#1f9d57;border:2px solid #b6e8c8;border-radius:16px;padding:14px 26px}
.dt-reveal.bad .dt-reveal-okbubble{background:#fff3ef;color:#e8604c;border-color:#f4c4ba}
.dt-reveal.unclear .dt-reveal-okbubble{background:#eef4ff;color:#3a6bd6;border-color:#c9dbff}
.dt-reveal-foot{margin-top:18px;font-size:13px;color:#9aa6b6}
.dt-reveal .dt-btn{margin-top:16px;min-width:160px}
/* 词间空格：渲染成可见间隔，保证词组（如 get up）词与词之间保留空格 */
.dt-reveal-word .dt-sp{display:inline-block;width:.42em}
.dt-review-row{display:flex;align-items:center;gap:10px;padding:11px 0;border-bottom:1px dashed #e6ebf2;flex-wrap:wrap}
.dt-review-no{width:24px;height:24px;border-radius:50%;background:#f2f5f9;color:#8b97a8;
  font-size:13px;font-weight:800;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.dt-review-write{flex:1;min-width:120px}
.dt-review-write b{font-size:20px;color:#2b3a55;letter-spacing:1px}
.dt-review-write span{display:block;font-size:13px;color:#8b97a8;margin-top:2px}
.dt-review-img{width:64px;height:64px;object-fit:contain;background:#fff;border:1px solid #eef1f6;
  border-radius:10px}
.dt-review-btns{display:flex;gap:7px}
.dt-mark{border:1.6px solid #e2e8f0;background:#fff;color:#5c6a7c;border-radius:10px;padding:7px 11px;
  font-size:13px;font-weight:700;cursor:pointer}
.dt-mark.on{background:#e9fbf2;border-color:#2fbf71;color:#2fbf71}
.dt-mark.wrong.on{background:#fff0ee;border-color:#e8604c;color:#e8604c}
.dt-paper-full{width:100%;border-radius:14px;margin-bottom:10px;box-shadow:0 3px 12px rgba(35,55,90,.12)}
.dt-review-hint{font-size:14px;color:#8b97a8;margin-bottom:8px}

/* ═══════════ 数学多题型 ═══════════ */
.mg-fill-row{display:flex;gap:9px;justify-content:center;margin-top:14px}
.mg-fill{border:1.8px solid #dbe3ee;border-radius:13px;padding:12px 14px;font-size:20px;font-weight:700;
  width:150px;text-align:center;color:#2b3a55;font-family:inherit}
.mg-fill:focus{outline:none;border-color:#5aa9f5}
.mg-fill-btn{border:none;border-radius:13px;background:linear-gradient(135deg,#5aa9f5,#3d8dea);
  color:#fff;padding:12px 20px;font-size:15.5px;font-weight:700;cursor:pointer}
.mg-story{background:#f7f9fc;border-radius:14px;padding:14px 16px;line-height:1.9}
.mg-story-txt{font-size:16px;color:#2b3a55}
.mg-story-q{font-size:16.5px;font-weight:800;color:#e8604c;margin-top:8px}
.mg-feedback{border-radius:14px;padding:13px 15px;margin-top:12px;font-size:14.5px;line-height:1.75}
.mg-feedback.ok{background:#e9fbf2;color:#2b7a5a}
.mg-feedback.try{background:#fff8e8;color:#8a6a1a}
.mg-feedback b{display:block;margin-bottom:3px;font-size:15px}
.mg-explain{margin-top:8px;background:#fff;border-radius:10px;padding:9px 11px;color:#5c6a7c;font-size:14px}
.mg-steps{margin-top:8px;background:#fff;border-radius:10px;padding:9px 11px;font-size:14px;color:#2b3a55}
.mg-steps div{padding:3px 0}
.mg-hint-btn{margin-top:9px;border:none;border-radius:10px;background:#fff2dd;color:#a8720a;
  padding:8px 13px;font-size:13.5px;font-weight:700;cursor:pointer}
.mg-from{font-size:12.5px;color:#8b97a8;margin-bottom:6px}
.mg-count-display{font-size:26px;line-height:1.9;text-align:center;margin:12px 0;word-break:break-all}

/* ═══════════ 预习闯关 ═══════════ */
.pv-progress{display:flex;align-items:center;gap:10px;margin:0 0 12px}
.pv-bar{flex:1;height:9px;background:#eef1f6;border-radius:99px;overflow:hidden}
.pv-bar span{display:block;height:100%;background:linear-gradient(90deg,#c49bf0,#a678e0);
  border-radius:99px;transition:width .3s}
.pv-count{font-size:13px;color:#8b97a8;font-weight:700}
.pv-card{background:#fff;border-radius:16px;padding:14px;margin-bottom:12px;
  box-shadow:0 3px 12px rgba(35,55,90,.07);border-left:4px solid #c49bf0}
.pv-card.is-done{border-left-color:#2fbf71;background:#fbfefc}
.pv-card-top{display:flex;align-items:center;gap:9px;margin-bottom:9px}
.pv-no{width:22px;height:22px;border-radius:50%;background:#f5eefd;color:#8a5fd0;font-size:12.5px;
  font-weight:800;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.pv-title{font-size:15.5px;font-weight:800;color:#2b3a55;flex:1}
.pv-ok{font-size:12.5px;color:#2fbf71;font-weight:700}
.pv-hint{font-size:13.5px;color:#8b97a8;margin-bottom:9px;line-height:1.7}
.pv-words{display:flex;flex-wrap:wrap;gap:9px;margin-bottom:11px}
.pv-word{width:74px;text-align:center;background:#fff8f7;border:1.6px solid #ffe3dd;border-radius:12px;
  padding:8px 4px;cursor:pointer;transition:all .18s}
.pv-word.seen{background:#e9fbf2;border-color:#b6ecd0}
.pv-py{display:block;font-size:11.5px;color:#e8604c;height:15px}
.pv-ch{display:block;font-size:26px;font-weight:700;color:#2b3a55;line-height:1.3}
.pv-w{display:block;font-size:11px;color:#8b97a8}
.pv-enwords{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:11px}
.pv-enword{background:#e9fbf2;border-radius:11px;padding:8px 12px;cursor:pointer}
.pv-enword b{display:block;font-size:15px;color:#2b7a5a}
.pv-enword span{font-size:12.5px;color:#8b97a8}
.pv-sents{display:flex;flex-direction:column;gap:7px;margin-bottom:11px}
.pv-sent{background:#f7f9fc;border-radius:11px;padding:9px 12px;cursor:pointer}
.pv-sent-en{font-size:15.5px;color:#2b3a55;font-weight:600}
.pv-sent-zh{font-size:12.5px;color:#8b97a8;margin-top:2px}
.pv-read{font-size:21px;line-height:2.05;background:#fffdf7;border-radius:12px;padding:12px}
.pv-han{padding:1px 2px;border-radius:5px}
.pv-read-row{display:flex;gap:9px;margin-top:10px;flex-wrap:wrap}
.pv-mic,.pv-say{border:none;border-radius:12px;padding:10px 16px;font-size:14.5px;font-weight:700;cursor:pointer}
.pv-mic{background:#eaf4ff;color:#2f7fd8}
.pv-mic.is-on{background:#2f7fd8;color:#fff;animation:micPulse 1.1s infinite}
.pv-say{background:#f2f5f9;color:#5c6a7c}
.pv-pct{font-size:14px;font-weight:800;color:#2fbf71;margin-top:7px}
.pv-judge-q{font-size:16px;line-height:1.8;color:#2b3a55;margin-bottom:10px}
.pv-judge-btns{display:flex;gap:9px}
.pv-judge{flex:1;border:1.6px solid #e2e8f0;background:#fff;color:#5c6a7c;border-radius:12px;
  padding:12px;font-size:15px;font-weight:700;cursor:pointer}
.pv-judge.on{background:#eaf4ff;border-color:#5aa9f5;color:#2f7fd8}
.pv-judge-fb{margin-top:10px;border-radius:11px;padding:10px 12px;font-size:14px;line-height:1.7}
.pv-judge-fb.ok{background:#e9fbf2;color:#2b7a5a}
.pv-judge-fb.try{background:#fff8e8;color:#8a6a1a}
.pv-order-my{min-height:52px;background:#f7f9fc;border-radius:12px;padding:9px;display:flex;
  flex-direction:column;gap:6px;margin-bottom:9px}
.pv-order-empty{font-size:13px;color:#b3bccb}
.pv-order-item{position:relative;text-align:left;border:1.6px solid #e2e8f0;background:#fff;
  border-radius:11px;padding:9px 11px 9px 30px;font-size:14.5px;color:#2b3a55;cursor:pointer}
.pv-order-item.picked{background:#eaf4ff;border-color:#5aa9f5;cursor:default}
.pv-order-item i{position:absolute;left:9px;top:9px;font-style:normal;font-size:12px;font-weight:800;
  color:#2f7fd8;background:#fff;border-radius:50%;width:16px;height:16px;display:flex;
  align-items:center;justify-content:center}
.pv-order-pool{display:flex;flex-direction:column;gap:6px;margin-bottom:10px}
.pv-order-btns{display:flex;gap:9px}
.pv-btn{flex:1;border:none;border-radius:12px;background:#f2f5f9;color:#5c6a7c;padding:11px;
  font-size:14.5px;font-weight:700;cursor:pointer}
.pv-btn.primary{background:linear-gradient(135deg,#c49bf0,#a678e0);color:#fff}
.pv-btn:disabled{opacity:.5;cursor:default}
.pv-oral-q{font-size:16px;line-height:1.8;color:#2b3a55;margin-bottom:10px}
.pv-oral-row{display:flex;gap:9px;align-items:center}
.pv-oral-input{flex:1;border:1.6px solid #e2e8f0;border-radius:12px;padding:11px 12px;font-size:15px;
  font-family:inherit;color:#2b3a55}
.pv-oral-fb{margin-top:10px;border-radius:11px;padding:11px 12px;font-size:14px;line-height:1.7}
.pv-oral-fb.ok{background:#e9fbf2;color:#2b7a5a}
.pv-oral-fb.try{background:#fff8e8;color:#8a6a1a}
.pv-oral-hint{margin-top:6px;font-size:13.5px;color:#a8720a}
.pv-examples{margin:0 0 11px;padding-left:18px;color:#5c6a7c;font-size:14.5px;line-height:1.85}
.pv-done-btn{width:100%;border:none;border-radius:12px;background:#f2f5f9;color:#5c6a7c;
  padding:11px;font-size:14.5px;font-weight:700;cursor:pointer;margin-top:6px}
.pv-card.is-done .pv-done-btn{background:#e9fbf2;color:#2fbf71}

/* ═══════════ 英语互动 ═══════════ */
.en-word-list{display:flex;flex-direction:column;gap:7px}
.en-word-item{display:flex;align-items:center;gap:10px;background:#f7f9fc;border-radius:11px;padding:9px 12px}
.en-word-item b{flex:1;font-size:15.5px;color:#2b3a55}
.en-word-item span{font-size:13px;color:#8b97a8}
.en-say{border:none;background:#e9fbf2;color:#2b7a5a;border-radius:9px;width:36px;height:32px;
  font-size:15px;cursor:pointer}
.en-say-big{border:none;border-radius:12px;background:#eaf4ff;color:#2f7fd8;padding:9px 16px;
  font-size:14.5px;font-weight:700;cursor:pointer;margin:8px 0}
.en-role-grid{display:flex;gap:10px}
.en-role-card{flex:1;background:#fff;border:1.6px solid #e2e8f0;border-radius:14px;padding:14px 10px;
  text-align:center;cursor:pointer}
.en-role-ic{font-size:30px}
.en-role-name{font-size:15.5px;font-weight:800;color:#2b3a55;margin-top:4px}
.en-role-desc{font-size:12.5px;color:#8b97a8;margin-top:3px;line-height:1.6}
.en-dialogue{background:#f7f9fc;border-radius:13px;padding:11px 13px}
.en-line{display:flex;gap:9px;align-items:baseline;padding:5px 0}
.en-who{font-size:12px;font-weight:800;border-radius:6px;padding:1px 7px;flex-shrink:0}
.en-who.A{background:#eaf4ff;color:#2f7fd8}
.en-who.B{background:#fff2dd;color:#a8720a}
.en-txt{font-size:15px;color:#2b3a55}
.en-zh{font-size:12.5px;color:#8b97a8}
.en-bubble{background:#f2f5f9;border-radius:13px;padding:10px 12px;margin-bottom:8px;position:relative}
.en-bubble div{font-size:15.5px;color:#2b3a55;line-height:1.7}
.en-bubble small{font-size:12.5px;color:#8b97a8}
.en-play-other{border:none;border-radius:11px;background:#eaf4ff;color:#2f7fd8;padding:8px 14px;
  font-size:13.5px;font-weight:700;cursor:pointer}
.en-myline{font-size:22px;line-height:2.05;background:#fffdf7;border-radius:12px;padding:12px}
.en-zh-line{font-size:13.5px;color:#8b97a8;margin-top:6px}
.en-role-btns{display:flex;gap:9px;margin-top:11px;flex-wrap:wrap}
.en-mic,.en-listen{border:none;border-radius:12px;padding:11px 16px;font-size:14.5px;font-weight:700;cursor:pointer}
.en-mic{background:#eaf4ff;color:#2f7fd8}
.en-mic.is-on{background:#2f7fd8;color:#fff;animation:micPulse 1.1s infinite}
.en-mic:disabled{opacity:.55;cursor:default}
.en-listen{background:#f2f5f9;color:#5c6a7c}
.en-live{margin-top:9px;background:#f2f8ff;border-radius:10px;padding:9px 11px;font-size:14px;color:#2b5f9e}
.en-score{margin-top:9px}
.en-pct{font-size:20px;font-weight:800;color:#5c6a7c}
.en-pct.perfect{color:#2fbf71}
.en-pct-tip{font-size:13px;color:#8b97a8;margin-top:2px}

/* ═══════════ 知识点精要页 ═══════════ */
.briefpage{position:fixed;inset:0;z-index:220;background:#f6f8fb;overflow-y:auto;
  -webkit-overflow-scrolling:touch}
.briefpage .tp-bar{position:sticky;top:0;z-index:2}
.bp-body{padding:14px 14px 40px;max-width:760px;margin:0 auto}
.bp-head{background:#fff;border-radius:16px;padding:14px 16px;margin-bottom:12px;
  box-shadow:0 3px 12px rgba(35,55,90,.06)}
.bp-title{font-size:16px;font-weight:800;color:#2b3a55}
.bp-sub{font-size:13.5px;color:#8b97a8;margin-top:4px;line-height:1.7}
.bp-group{background:#fff;border-radius:16px;padding:14px 16px;margin-bottom:12px;
  box-shadow:0 3px 12px rgba(35,55,90,.06);border-top:4px solid var(--accent,#c49bf0)}
.bp-group-head{display:flex;align-items:center;gap:9px;margin-bottom:8px}
.bp-dot{width:26px;height:26px;border-radius:50%;background:var(--accent,#c49bf0);color:#fff;
  font-size:14px;font-weight:800;display:flex;align-items:center;justify-content:center}
.bp-subject{font-size:16px;font-weight:800;color:#2b3a55;flex:1}
.bp-say{border:none;border-radius:10px;background:var(--accent-bg,#f2f5f9);color:var(--accent,#5c6a7c);
  padding:7px 12px;font-size:13px;font-weight:700;cursor:pointer}
.bp-tasks{display:flex;flex-direction:column;gap:6px;margin-bottom:11px}
.bp-task{background:var(--accent-bg,#f7f9fc);border-radius:10px;padding:8px 11px;font-size:14px;color:#5c6a7c}
.bp-task.done{color:#2fbf71;text-decoration:line-through;opacity:.75}
.bp-item{margin-bottom:11px}
.bp-item-label{font-size:15px;font-weight:800;color:#2b3a55;margin-bottom:5px}
.bp-points{margin:0;padding-left:18px}
.bp-points li{font-size:14px;color:#5c6a7c;line-height:1.85;margin-bottom:2px}

/* 原文配套资料 */
.bp-sources{background:#fffdf4;border:1.6px dashed #f0d28a;border-radius:13px;padding:11px 13px;margin-top:9px}
.bp-sources-h{font-size:13.5px;font-weight:800;color:#a86a05;margin-bottom:8px;display:flex;align-items:center;gap:6px}
.bp-src-head{display:flex;align-items:center;gap:8px;margin-bottom:6px}
.bp-src-flag{background:#f0d28a;color:#7a5800;font-size:11px;font-weight:800;border-radius:7px;padding:2px 7px;flex-shrink:0}
.bp-src-title{font-size:13.5px;font-weight:700;color:#8a6a1f;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bp-src-say{border:none;border-radius:9px;background:#fff;border:1px solid #e8d3a0;color:#a86a05;
  padding:4px 9px;font-size:12px;font-weight:700;cursor:pointer;flex-shrink:0}
.bp-src-say:active{transform:scale(.95)}
.bp-src{margin-bottom:10px}
.bp-src:last-child{margin-bottom:0}
.bp-src-title{font-size:13.5px;font-weight:700;color:#8a6a1f;margin-bottom:5px}
.bp-src-text{font-size:14.5px;color:#4a4a45;line-height:2;background:#fff;border-radius:9px;padding:8px 11px}
.bp-src-pairs{display:flex;flex-direction:column;gap:5px}
.bp-src-pair{display:flex;justify-content:space-between;gap:12px;font-size:14px;background:#fff;border-radius:9px;padding:7px 11px}
.bp-src-pair .en{font-weight:700;color:#2b3a55}
.bp-src-pair .zh{color:#8b97a8}
.bp-src-list{margin:0;padding-left:18px}
.bp-src-list li{font-size:14px;color:#5c6a7c;line-height:1.9}

/* 拼词抖动 */
@keyframes shake{0%,100%{transform:translateX(0)}25%{transform:translateX(-5px)}75%{transform:translateX(5px)}}
.dt-tile.shake{animation:shake .35s}
.rd-score-seg{margin-top:6px;font-size:12.5px;color:#8b97a8}
.rd-chip.ok{background:#e9fbf2;color:#2fbf71;border-color:#b6ecd0}

/* ═══════════ 朗读：逐句集成判定 ═══════════ */
.rd-sent{border-radius:14px;padding:10px 12px;margin-bottom:10px;border:1.6px solid transparent;
  transition:all .2s;position:relative}
.rd-sent.cur{background:#fffbe8;border-color:#f5c84a;box-shadow:0 2px 10px rgba(245,200,74,.18)}
.rd-sent.cur .rd-sent-no{background:#f5a623;color:#fff}
.rd-sent.done{opacity:.72}
.rd-sent.done .rd-sent-no{background:#2fbf71;color:#fff}
/* 顺序未解锁的句子：变灰、不可点（听老师读仍可） */
.rd-sent.locked{background:#f4f5f7;border-color:#e7eaef;opacity:.6;filter:grayscale(.15)}
.rd-sent.locked .rd-sent-no{background:#cdd3dc;color:#fff}
.rd-sent.locked .py-han{color:#b9c0cb}
.rd-sent-lock{font-size:11.5px;color:#aab2bf;font-weight:600;flex-shrink:0;
  background:#eef1f6;border-radius:8px;padding:2px 7px}
/* 点错（想读未解锁句）时的轻微抖动提示 */
.rd-sent.shake{animation:rdShake .5s}
@keyframes rdShake{0%,100%{transform:translateX(0)}20%{transform:translateX(-6px)}
  40%{transform:translateX(6px)}60%{transform:translateX(-4px)}80%{transform:translateX(4px)}}
.rd-sent-head{display:flex;align-items:center;gap:8px;margin-bottom:5px}
.rd-sent-no{width:21px;height:21px;border-radius:50%;background:#eef1f6;color:#8b97a8;font-size:12px;
  font-weight:800;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.rd-sent-label{font-size:12.5px;color:#8b97a8;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rd-sent-pct{font-size:13px;font-weight:800;color:#f5a623;flex-shrink:0}
.rd-sent-pct.full{color:#2fbf71}
.rd-btn-row{display:flex;gap:9px;justify-content:center;margin-top:12px;flex-wrap:wrap}
.rd-redo{border:none;border-radius:12px;background:#fff2ef;color:#e8604c;padding:9px 16px;
  font-size:14px;font-weight:700;cursor:pointer}
.rd-oralq-chip{margin-top:8px;background:#eaf4ff;border-radius:11px;padding:8px 12px;
  font-size:13.5px;color:#2b5f9e;font-weight:600}
.rd-manual-done{margin:12px auto 0;display:block;width:60%}
/* 逐句示例朗读按钮 */
.rd-sent-play{border:none;border-radius:10px;background:#eaf4ff;color:#2b5f9e;padding:5px 10px;
  font-size:12.5px;font-weight:700;cursor:pointer;flex-shrink:0;white-space:nowrap}
.rd-sent-play.is-on{background:#cfe4ff}
.rd-sent-play:active{transform:scale(.96)}
.oa-hint-encour{margin-top:9px;font-size:13.5px;color:#8b97a8;text-align:center}
.mg-open-btns{display:flex;gap:9px;flex-wrap:wrap;justify-content:center;align-items:center}
.mg-open-btns .mg-fill{flex:1;min-width:150px;border:1.8px solid #dbe3ee;border-radius:13px;
  padding:12px 14px;font-size:15px;color:#2b3a55;font-family:inherit}
.en-mode-recommend{margin-top:4px;font-size:13px;color:#2b7a5a;font-weight:700}

/* 数学情境图 */
.mg-figure{background:#f4f9ff;border:1.6px solid #d6e7fb;border-radius:14px;padding:12px;
  margin-bottom:12px;text-align:center}
.mg-fig-svg{width:100%;max-width:320px;height:auto;max-height:220px}
.mg-fig-scene{font-size:54px;line-height:1;padding:10px 0}
.mg-fig-emoji{filter:drop-shadow(0 4px 8px rgba(90,169,245,.2))}
.mg-fig-cap{font-size:13px;color:#5a7fb0;margin-top:8px;font-weight:600}
/* 多空填空 */
.mg-fill-blank{width:84px;text-align:center;border:1.8px solid #dbe3ee;border-radius:12px;
  padding:10px 8px;font-size:16px;color:#2b3a55;font-family:inherit;margin:0 2px}
.mg-fill-blank:focus{outline:none;border-color:#5aa9f5;box-shadow:0 0 0 3px rgba(90,169,245,.15)}

/* 背默：上一个/下一个在书写区上方 */
.dt-nav-top{display:flex;align-items:center;gap:8px;margin-bottom:12px}
.dt-nav-btn{border:none;border-radius:11px;padding:9px 14px;font-size:14px;font-weight:700;cursor:pointer;
  background:#eef2f8;color:#4a6a99}
.dt-nav-btn.primary{background:#5aa9f5;color:#fff;flex:1}
.dt-nav-btn:disabled{opacity:.45;cursor:not-allowed}
.dt-nav-mid{font-size:13.5px;color:#8b97a8;flex:1;text-align:center}

/* ═══════════ 复习闯关 ═══════════ */
.rv-map{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0 4px}
.rv-map-chip{font-size:12.5px;font-weight:700;color:#5c6a7c;background:#eef2f8;
  border-radius:99px;padding:5px 11px;white-space:nowrap}
.rv-map-chip.is-ok{background:#e3f7ec;color:#1e8a55}
.rv-q{display:flex;flex-direction:column;gap:10px}
.rv-guide{background:#eef4ff;border:1.5px solid #cfe0ff;border-radius:12px;padding:11px 13px}
.rv-guide-tag{display:inline-block;background:#e0ebff;color:#2f6bd0;font-size:12px;font-weight:800;
  border-radius:99px;padding:2px 9px;margin-bottom:5px}
.rv-guide-txt{font-size:14.5px;color:#41567a;line-height:1.75}
.rv-read-box{display:flex;flex-direction:column;gap:11px;align-items:center;
  background:#f5f9ff;border:1.5px solid #dbe8fb;border-radius:14px;padding:16px}
.rv-read-text{font-size:18px;line-height:1.7;color:#26303d;text-align:center;
  font-weight:600;word-break:break-word}
.rv-read-ok{background:#1e8a55 !important;border-color:#1e8a55 !important}
.rv-score-row{text-align:center;font-size:13.5px;color:#7b8798;margin:12px 0 4px}
.rv-order-my{display:flex;flex-wrap:wrap;gap:6px;min-height:46px;padding:9px;
  background:#f5f8fd;border:1.5px dashed #cfdcef;border-radius:12px;margin-bottom:8px}
.rv-order-empty{font-size:13px;color:#9aa6b6;align-self:center}
.rv-order-item{font-family:inherit;font-size:14.5px;color:#3a4a63;background:#fff;
  border:1.5px solid #dbe4f2;border-radius:10px;padding:8px 12px;cursor:pointer;
  text-align:left;line-height:1.5}
.rv-order-pool{display:flex;flex-direction:column;gap:7px}
.rv-order-item.picked{background:#e8f2ff;border-color:#8fc0f5}
.rv-order-item.picked i{display:inline-block;width:19px;height:19px;line-height:19px;
  text-align:center;background:#5aa9f5;color:#fff;border-radius:50%;font-size:12px;
  font-style:normal;margin-right:6px}
.rv-order-item.is-picked{opacity:.4}
.mg-q-icon{font-size:20px;margin-right:6px}
