:root{
  --bg:#f5f7fb;
  --card:#ffffff;
  --ink:#1f2a44;
  --ink-soft:#5b6680;
  --line:#e7ebf3;
  --brand:#5b8def;
  --brand-soft:#eaf1ff;
  --green:#27ae60;
  --green-soft:#e7f7ee;
  --amber:#f0a020;
  --red:#e2554f;
  --shadow:0 6px 22px rgba(31,42,68,.08);
  --radius:16px;
}
*{box-sizing:border-box;}
html,body{margin:0;padding:0;}
body{
  font-family:'Nunito',-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
  background:var(--bg);color:var(--ink);line-height:1.6;
  -webkit-font-smoothing:antialiased;
}
.app{max-width:1180px;margin:0 auto;padding:18px 18px 40px;}

/* Topbar — 横幅重设计（蓝青渐变 + ABC 水印） */
.topbar{
  position:relative;overflow:hidden;
  display:flex;align-items:center;justify-content:space-between;gap:14px;
  padding:20px 24px;margin-bottom:16px;border-radius:20px;
  background:linear-gradient(118deg,#4b7ce4 0%,#5b8def 44%,#3fb2b4 100%);
  box-shadow:0 14px 30px rgba(75,124,228,.26);
}
.topbar::before{
  content:"ABC";position:absolute;right:10px;bottom:-32px;
  font-size:112px;font-weight:900;letter-spacing:-6px;line-height:1;
  color:rgba(255,255,255,.11);pointer-events:none;user-select:none;
}
.topbar::after{
  content:"";position:absolute;left:-120px;top:-180px;width:320px;height:320px;border-radius:50%;
  background:radial-gradient(circle,rgba(255,255,255,.30),rgba(255,255,255,0) 68%);
  pointer-events:none;
}
.topbar .brand,.topbar .top-actions{position:relative;z-index:1;}
.brand{display:flex;align-items:center;gap:14px;min-width:0;}
.logo{
  flex:none;width:54px;height:54px;border-radius:16px;font-size:27px;line-height:1;
  display:flex;align-items:center;justify-content:center;
  background:rgba(255,255,255,.20);border:1px solid rgba(255,255,255,.44);
  box-shadow:0 4px 14px rgba(18,48,116,.18);
}
.topbar h1{font-size:22px;margin:0;font-weight:900;color:#fff;letter-spacing:.3px;}
.subtitle{margin:3px 0 0;color:rgba(255,255,255,.87);font-size:13px;font-weight:600;}
.top-actions{display:flex;gap:9px;}
.topbar .btn.ghost{background:rgba(255,255,255,.18);border-color:rgba(255,255,255,.46);color:#fff;font-weight:800;}
.topbar .btn.ghost:hover{background:#fff;border-color:#fff;color:#3d6ed8;}

/* Buttons */
.btn{border:1px solid var(--line);background:var(--card);color:var(--ink);
  padding:8px 14px;border-radius:10px;cursor:pointer;font-size:14px;transition:.15s;}
.btn:hover{border-color:var(--brand);color:var(--brand);}
.btn.ghost{background:transparent;}
.btn.primary{background:var(--brand);border-color:var(--brand);color:#fff;}
.btn.primary:hover{filter:brightness(1.05);color:#fff;}
.btn.danger{border-color:#f3c2c0;color:var(--red);background:#fff;}
.btn.danger:hover{background:#fdeceb;}
.btn.small{padding:6px 10px;font-size:12px;border-radius:8px;}
.btn.round{width:38px;height:38px;border-radius:50%;font-size:20px;line-height:1;display:flex;align-items:center;justify-content:center;padding:0;}

/* Progress strip */
.progress-strip{display:flex;align-items:center;gap:22px;background:var(--card);
  border:1px solid var(--line);border-radius:var(--radius);padding:14px 20px;box-shadow:var(--shadow);margin-bottom:16px;flex-wrap:wrap;}
.stat{display:flex;flex-direction:column;align-items:center;min-width:64px;}
.stat-num{font-size:22px;font-weight:700;color:var(--brand);}
.stat-label{font-size:12px;color:var(--ink-soft);}
.bar-wrap{flex:1;min-width:160px;height:10px;background:var(--brand-soft);border-radius:99px;overflow:hidden;}
.bar{height:100%;width:0;background:linear-gradient(90deg,#5b8def,#7fd1a6);transition:width .3s;}

/* Layout */
.layout{display:grid;grid-template-columns:minmax(0,1fr) 1.4fr;gap:18px;align-items:start;}
@media(max-width:860px){.layout{grid-template-columns:minmax(0,1fr);}}
body{overflow-x:clip;}

/* Calendar — flat redesign */
.calendar-card{background:var(--card);border:1px solid var(--line);border-radius:14px;
  padding:18px 18px 16px;box-shadow:0 1px 3px rgba(31,42,68,.05);min-width:0;}
.cal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;}
.cal-head h2{font-family:'Nunito',-apple-system,"PingFang SC","Microsoft YaHei",sans-serif;
  font-size:20px;margin:0;font-weight:800;letter-spacing:.3px;}
.weekdays{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));text-align:center;
  font-size:12px;color:var(--ink-soft);margin-bottom:8px;font-weight:600;}
.grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:8px;}
.cell{aspect-ratio:1/1;border:1px solid var(--line);border-radius:12px;background:#fff;
  display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-start;
  padding:9px 11px;cursor:pointer;position:relative;transition:.15s;}
.cell:hover{border-color:var(--brand);background:var(--brand-soft);}
.cell.empty{border:none;background:transparent;cursor:default;}
.cell.empty:hover{background:transparent;border:none;}
.cell.has{background:#f4f8ff;border-color:#dce7fb;}
.cell.has:hover{background:var(--brand-soft);}
.cell.today{border:2px solid var(--amber);padding:8px 10px;}
.cell.done{background:#eef9f1;border-color:#cdeed7;}
.cell .num{font-family:'Nunito',-apple-system,"PingFang SC","Microsoft YaHei",sans-serif;
  font-size:21px;font-weight:800;line-height:1;color:var(--ink);letter-spacing:.2px;}
.cell.today .num{color:#c8790a;}
.cell.done .num{color:var(--green);}
.cell .badge{position:absolute;left:11px;bottom:9px;font-size:11px;color:var(--brand);
  font-weight:700;letter-spacing:.3px;line-height:1;}
.cell.today .badge{left:10px;}
.cell.done .badge{color:var(--green);}
.cell.today .badge{color:#c8790a;}
.cell .done2{position:absolute;left:11px;bottom:9px;font-size:11px;color:#9aa3b5;font-weight:700;}
.legend{display:flex;gap:18px;margin-top:16px;font-size:12px;color:var(--ink-soft);flex-wrap:wrap;}
.legend .dot{display:inline-block;width:11px;height:11px;border-radius:3px;margin-right:5px;vertical-align:middle;}
.dot-today{background:#fff;border:2px solid var(--amber);}
.dot-has{background:#f4f8ff;border:1px solid #dce7fb;}
.dot-done{background:#eef9f1;border:1px solid #cdeed7;}
.cell .star{position:absolute;top:7px;right:9px;font-size:15px;line-height:1;color:#f5a623;
  text-shadow:0 1px 1px rgba(255,255,255,.7);pointer-events:none;}
.cell.today .star{top:5px;right:7px;}
.dot-star{display:inline-block;width:auto;height:auto;border:none;background:none;color:#f5a623;
  font-size:13px;margin-right:4px;vertical-align:middle;}

@media(max-width:640px){
  .app{padding:12px 12px 28px;}
  .topbar{flex-wrap:wrap;gap:12px;margin-bottom:12px;padding:15px 16px;border-radius:16px;}
  .topbar::before{font-size:78px;right:2px;bottom:-22px;letter-spacing:-4px;}
  .brand{gap:10px;}
  .logo{width:44px;height:44px;font-size:23px;border-radius:13px;}
  .topbar h1{font-size:16.5px;}
  .subtitle{font-size:11.5px;}
  .top-actions{flex:1 1 100%;justify-content:flex-end;gap:8px;}
  .top-actions .btn{padding:7px 12px;font-size:13px;min-height:40px;}
  .btn{min-height:40px;}
  .btn.small{min-height:36px;}
  .btn.round{width:44px;height:44px;}

  .progress-strip{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px 6px;padding:12px;margin-bottom:12px;}
  .stat{min-width:auto;align-items:flex-start;}
  .stat-num{font-size:17px;}
  .stat-label{font-size:11px;}
  .bar-wrap{grid-column:1 / -1;height:8px;min-width:0;}

  .detail-card{min-height:260px;padding:14px;}

  .day-title{gap:8px;margin-bottom:8px;}
  .day-title h3{font-size:16px;}
  .day-hint{font-size:12px;}

  .flashcard .fc-head{padding:12px;}
  .fc-word{font-size:23px;}
  .fc-phon{font-size:14px;}
  .fc-meaning{font-size:12px;}
  .fc-level{min-width:86px;padding:4px 9px;}
  .fc-stars{font-size:12px;}
  .fc-level-label{font-size:11px;}
  /* 🔴 只作用于「单词卡」里那个小喇叭。不加 .flashcard 前缀时这条规则会同时命中
     听写页的 .dict-prompt .fc-speak.big（🔊 播放发音），把它压成 44×44 方块，
     文字竖排成 5 行溢出到卡片上（v70 修）。 */
  .flashcard .fc-speak{width:44px;height:44px;padding:0;display:flex;align-items:center;justify-content:center;font-size:18px;}
  .fc-actions{gap:8px;}

  .checkin-bar{padding:10px 12px;gap:10px;}
  .ck-timer{font-size:17px;}
  .ck-actions .btn{font-size:12px;padding:6px 12px;min-height:36px;}
}

@media(max-width:480px){
  .calendar-card{padding:14px 12px 12px;border-radius:12px;}
  .cal-head h2{font-size:17px;}
  .weekdays{font-size:11px;margin-bottom:6px;}
  .grid{gap:4px;}
  .cell{padding:6px 6px;border-radius:9px;}
  .cell.today{padding:5px 5px;border-width:2px;}
  .cell .num{font-size:17px;}
  .cell .badge{font-size:9px;left:6px;bottom:5px;}
  .cell .done2{font-size:9px;left:6px;bottom:5px;}
  .legend{gap:12px;margin-top:12px;font-size:11px;}
  .legend .dot{width:9px;height:9px;}
  .cell .star{font-size:13px;top:5px;right:6px;}
  .checkin-bar{gap:8px;padding:10px 12px;}
  .ck-timer{font-size:17px;}
  .ck-actions{margin-left:0;}
  .fc-word{font-size:21px;}
  .fc-level{min-width:76px;padding:4px 8px;}
}

/* Detail */
.detail-card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  padding:18px;box-shadow:var(--shadow);min-height:480px;min-width:0;}
.detail-head{margin-bottom:14px;}
.search{width:100%;padding:11px 14px;border:1px solid var(--line);border-radius:10px;font-size:14px;outline:none;}
.search:focus{border-color:var(--brand);}
.day-title{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-bottom:6px;}
.day-title h3{margin:0;font-size:18px;}
.day-tools{display:flex;align-items:center;gap:10px;}
.day-progress{font-size:13px;color:var(--ink-soft);}
.day-hint{color:var(--ink-soft);font-size:13px;margin:10px 0;}
.checkin-bar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:6px 0 2px;
  padding:12px 14px;border:1px solid #f0e2b8;border-radius:12px;
  background:linear-gradient(0deg,#fffdf3,#fff8e6);}
.ck-left{display:flex;align-items:baseline;gap:10px;min-width:0;flex-wrap:wrap;}
.ck-status{font-size:13px;font-weight:700;color:var(--ink-soft);}
.ck-status.run{color:var(--brand);}
.ck-status.done{color:var(--green);}
.ck-timer{font-family:'Nunito',-apple-system,"PingFang SC","Microsoft YaHei",sans-serif;
  font-size:20px;font-weight:800;color:var(--ink);font-variant-numeric:tabular-nums;letter-spacing:.5px;}
.ck-timer.done{color:var(--green);}
.ck-actions{margin-left:auto;display:flex;gap:8px;flex-wrap:wrap;}
.btn.start-btn{background:var(--green);border-color:var(--green);color:#fff;}
.btn.start-btn:hover{filter:brightness(1.05);background:var(--green);border-color:var(--green);color:#fff;}
.btn.start-btn:disabled{opacity:.6;cursor:default;}
.ck-detail{flex-basis:100%;font-size:12px;color:var(--ink-soft);}
/* v53：打卡要求「当天每张卡片都翻到过」—— 进度与灰按钮 */
.ck-seen{font-size:13px;font-weight:700;color:var(--ink-soft);font-variant-numeric:tabular-nums;}
.ck-seen.warn{color:#c9821b;}
.ck-seen.ok{color:var(--green);}
/* 按钮置灰但仍可点击：点了会说明还差几张并自动跳到那一张，比一个死按钮更好懂 */
.btn.is-locked{opacity:.55;filter:grayscale(.45);cursor:not-allowed;}
.btn.is-locked:hover{filter:grayscale(.45);}

/* Word card */
.word-list{display:flex;flex-direction:column;gap:12px;}
.wcard{border:1px solid var(--line);border-radius:12px;overflow:hidden;}
.wcard.mastered{border-color:#bfe9cf;background:#f7fdf9;}
.wcard-head{display:flex;align-items:center;gap:10px;padding:12px 14px;cursor:pointer;background:#fbfcff;}
.wcard.mastered .wcard-head{background:#f1faf4;}
.wcard-head .wmain{flex:1;min-width:0;overflow-wrap:anywhere;}
.wword{font-size:17px;font-weight:700;color:var(--ink);}
.wmeaning{font-size:13px;color:var(--ink-soft);margin-top:4px;line-height:1.5;}
.wphon{font-size:13px;color:var(--ink-soft);margin-left:8px;}
.wpos{display:inline-block;font-size:11px;background:var(--brand-soft);color:var(--brand);
  padding:2px 7px;border-radius:6px;margin-left:6px;font-weight:600;}
.wgrade{font-size:11px;color:var(--amber);background:#fff5e6;padding:2px 7px;border-radius:6px;margin-left:6px;}
.wcat{font-size:11px;padding:2px 7px;border-radius:6px;margin-left:6px;font-weight:700;}
.wcat-课标{background:#eaf1ff;color:#3b6fd4;}
.wcat-补充{background:#e7f7ee;color:#27ae60;}
.wcat-拓展{background:#fdeef6;color:#c2529b;}
/* v94：非课标一律显示成「非课标」并加重 —— 拓展 / 补充是来源，不是给学生看的类别 */
.wcat-非课标{background:#fff1cc;color:#8a5a00;border:1px solid #f0d9a8;}
.wcaret{color:var(--ink-soft);transition:.2s;font-size:13px;}
.wcard.open .wcaret{transform:rotate(90deg);}
.wcheck{display:flex;align-items:center;gap:5px;font-size:12px;color:var(--ink-soft);user-select:none;}
.wcheck input{width:16px;height:16px;accent-color:var(--green);cursor:pointer;}

.wcard-body{padding:4px 14px 14px;display:none;border-top:1px solid var(--line);}
.wcard.open .wcard-body{display:block;}
.field-row{margin:10px 0;}
/* ===== 详情区分区卡片 ===== */
.sec{margin:16px 0 4px;padding:10px 12px 4px;border:1px solid var(--line);border-left-width:3px;
  border-radius:12px;background:#fbfcfe;}
.sec:first-child{margin-top:2px;}
.sec-head{display:flex;align-items:center;gap:7px;margin:-10px -12px 8px;padding:7px 12px;
  border-bottom:1px solid var(--line);border-radius:12px 12px 0 0;}
.sec-ico{font-size:15px;line-height:1;}
.sec-t{font-size:13.5px;font-weight:800;letter-spacing:.5px;color:#3a4a66;}
.sec .field-row:first-child{margin-top:4px;}
.sec:last-child{margin-bottom:0;}
/* 各分区配色 */
.s-blue  .sec-head{background:linear-gradient(90deg,#eaf1ff,#f9fbfe);}  .s-blue{border-left-color:#5b8def;}
.s-teal  .sec-head{background:linear-gradient(90deg,#e4f6f4,#f8fcfb);}  .s-teal{border-left-color:#3fb2b4;}
.s-purple .sec-head{background:linear-gradient(90deg,#f1edfd,#faf9fe);} .s-purple{border-left-color:#8f7ae8;}
.s-amber .sec-head{background:linear-gradient(90deg,#fdf1e3,#fefaf4);}  .s-amber{border-left-color:#f0a020;}
@media(max-width:640px){
  .sec{padding:8px 10px 2px;margin:12px 0 2px;}
  .sec-head{margin:-8px -10px 6px;padding:6px 10px;}
  .sec-t{font-size:12.5px;}
}
.field-row .k{font-size:12px;font-weight:700;color:var(--brand);margin-bottom:3px;display:flex;align-items:center;gap:6px;}
.field-row .k .ico{font-size:13px;}
.field-row .v{font-size:14px;color:var(--ink);}
.field-row .v.en{font-family:"Cambria","Times New Roman",serif;}
ul.ph{margin:4px 0 0;padding-left:18px;}
ul.ph li{margin:3px 0;font-size:14px;}
.ex{padding:8px 10px;background:#f7f9fc;border-left:3px solid var(--brand);border-radius:6px;margin:6px 0;font-size:14px;}
.ex .zh{color:var(--ink-soft);font-size:13px;}
.exam{padding:8px 10px;background:#fff6f0;border-left:3px solid var(--amber);border-radius:6px;margin:6px 0;font-size:14px;}
.exam .ex-q{color:var(--ink);white-space:pre-line;}
.exam-show{margin-top:7px;font-size:12px;padding:4px 13px;border:1px solid var(--brand);background:#fff;color:var(--brand);border-radius:8px;cursor:pointer;font-weight:600;transition:.15s;}
.exam-show:hover{background:var(--brand-soft);}
.ex-a{margin-top:7px;padding:8px 10px;background:var(--green-soft);border-left:3px solid var(--green);border-radius:6px;color:var(--ink);font-size:13.5px;line-height:1.5;}
.exam .ex-src{font-size:11px;color:#c77b1f;margin-top:4px;font-weight:600;}
.err{padding:8px 10px;background:#fdeceb;border-left:3px solid var(--red);border-radius:6px;margin:6px 0;font-size:14px;}

/* 造句练习 */
.sent-maker .v{min-width:0;}
.sent-tip{margin:0 0 8px;font-size:13px;color:var(--ink-soft);}
.sent-tip b{color:var(--brand);}
.sent-note{font-size:12px;color:#9aa3b8;}
.sent-input{width:100%;min-width:0;box-sizing:border-box;font-size:15px;line-height:1.5;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:#fbfcff;color:var(--ink);resize:vertical;font-family:inherit;}
.sent-input:focus{outline:none;border-color:var(--brand);background:#fff;box-shadow:0 0 0 3px var(--brand-soft);}
.sent-btns{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px;}
.sent-btns button{font-size:13px;padding:6px 14px;border-radius:9px;cursor:pointer;border:1px solid var(--line);background:#fff;color:var(--ink);transition:.15s;font-family:inherit;}
.sent-grade{background:var(--brand);border-color:var(--brand);color:#fff;font-weight:600;}
.sent-grade:hover{filter:brightness(1.05);}
.sent-read:hover,.sent-clear:hover{border-color:var(--brand);color:var(--brand);}
.sent-fb{margin-top:10px;padding:11px 13px;background:var(--brand-soft);border-left:3px solid var(--brand);border-radius:8px;font-size:14px;}
.sent-old{font-size:12px;color:var(--ink-soft);margin-bottom:5px;}
.sent-score{display:flex;align-items:center;gap:10px;margin-bottom:4px;}
.sent-stars{color:var(--amber);font-size:17px;letter-spacing:1px;}
.sent-num{font-weight:700;color:var(--ink);}
.sent-msg{color:var(--ink);margin-bottom:4px;}
.sent-detail{margin:4px 0 0;padding-left:20px;color:var(--ink-soft);font-size:13px;}
.sent-detail li{margin:2px 0;}
.sent-good{margin:6px 0 0;padding-left:20px;color:var(--green);font-size:13px;list-style:none;}
.sent-good li{margin:2px 0;}
.sent-empty{color:var(--ink-soft);font-size:13px;}

/* 设置弹窗：大模型配置 */
.set-sep{margin:16px 0 6px;font-weight:700;color:var(--ink);font-size:14px;}
.field input[type=text],.field input[type=password],.field input[type=date]{font-family:inherit;}

/* AI 精批改反馈 */
.sent-fb-ai{margin-top:10px;padding:11px 13px;background:#f3efff;border-left:3px solid #7c5cff;border-radius:8px;font-size:14px;}
.ai-fb{background:#f3efff;border-left:3px solid #7c5cff;}
.ai-raw{white-space:pre-wrap;font-size:13px;color:var(--ink-soft);line-height:1.5;}
.ai-suggest{margin-top:6px;color:#5b3fd6;font-size:13px;}

/* 中翻英练习 */
.trans-maker .trans-zh{font-size:16px;font-weight:700;color:var(--ink);margin:0 0 6px;line-height:1.5;}
.trans-ref-box{margin-top:8px;}
.trans-list{display:flex;flex-direction:column;gap:14px;margin-top:12px;}
.trans-list .trans-maker{background:#fff;border:1px solid var(--line);border-radius:12px;padding:14px 16px;margin:0;}
.trans-ai-gen{font-size:13px;padding:6px 14px;border-radius:9px;cursor:pointer;border:1px solid var(--line);background:#fff;color:var(--ink);font-family:inherit;}
/* 同一单词下的多道中翻英题 */
.trans-maker .trans-item{position:relative;padding:12px 0 4px;}
.trans-maker .trans-item + .trans-item{border-top:1px dashed var(--line);margin-top:6px;}
.trans-maker .trans-idx{display:inline-block;font-size:12px;font-weight:700;color:#3b6fd4;background:#eef3ff;border-radius:8px;padding:2px 9px;margin-bottom:6px;}
.trans-maker .trans-mic{font-size:13px;padding:6px 14px;border-radius:9px;cursor:pointer;border:1px solid #3b6fd4;background:#3b6fd4;color:#fff;font-family:inherit;margin-right:6px;}
.trans-maker .trans-mic:hover{filter:brightness(1.05);}
.trans-maker .trans-mic:disabled{background:#e6e9ef;border-color:var(--line);color:#9aa3b2;cursor:not-allowed;}
/* 非 HTTPS 安全地址：浏览器必然禁用麦克风，用琥珀色提示 */
.trans-maker .trans-mic.mic-warn{background:#fff8e6;border-color:#e8c882;color:#8a5a12;}
.trans-maker .trans-mic.listening{background:#e0533a;animation:pulseMic 1.1s infinite;}
@keyframes pulseMic{0%{box-shadow:0 0 0 0 rgba(224,83,58,.5);}70%{box-shadow:0 0 0 8px rgba(224,83,58,0);}100%{box-shadow:0 0 0 0 rgba(224,83,58,0);}}
.trans-maker .trans-zh{font-size:16px;font-weight:700;color:var(--ink);margin:0 0 6px;line-height:1.5;}

/* 课文原句出处（译林版教材 7A~9B）——
   句子可能取自该词的**本单元**，也可能是同册其他单元/其他册的兜底句，
   所以如实标出「册 + 单元」，不能笼统写成「课文原句」。 */
.tb-src{font-size:12px;color:#8a6d3b;background:#fdf6e6;border:1px solid #f0e0bd;border-radius:6px;padding:1px 8px;display:inline-block;margin:0 0 6px;font-weight:600;}
.trans-cnt{font-size:12px;color:var(--ink-soft);margin:0 0 6px;}

/* 相近词辨析 */
.sim{padding:7px 0;border-bottom:1px dashed var(--line);}
.sim:last-child{border-bottom:none;}
.sim-word{display:inline-block;font-weight:700;color:#3b6fd4;margin-right:8px;background:#eaf1ff;padding:1px 7px;border-radius:6px;font-size:13px;}
.sim-diff{color:var(--ink-soft);font-size:13px;}

/* 分类筛选 */
.cat-filter{margin-top:10px;width:100%;padding:9px 11px;border:1px solid var(--line);border-radius:10px;font-size:13px;background:#fff;color:var(--ink);outline:none;}
.cat-filter:focus{border-color:var(--brand);}

.search-title{font-size:16px;margin:0 0 10px;}
.search-title span{font-size:13px;color:var(--ink-soft);font-weight:400;}

/* Footer */
.foot{margin-top:18px;font-size:12px;color:var(--ink-soft);text-align:center;}
.foot code{background:#eef1f6;padding:1px 6px;border-radius:5px;}

/* Modal */
.modal{position:fixed;inset:0;background:rgba(31,42,68,.35);display:flex;align-items:center;justify-content:center;z-index:50;padding:16px;}
.modal-box{background:#fff;border-radius:16px;padding:22px;width:min(420px,100%);box-shadow:var(--shadow);}
.modal-box h3{margin:0 0 14px;}
.field{display:block;margin-bottom:12px;}
.field span{display:block;font-size:13px;color:var(--ink-soft);margin-bottom:6px;}
.field input{width:100%;padding:9px 11px;border:1px solid var(--line);border-radius:9px;font-size:14px;}
.field select{width:100%;padding:9px 11px;border:1px solid var(--line);border-radius:9px;font-size:14px;font-family:inherit;background:#fff;color:var(--ink);cursor:pointer;}.hint{font-size:12px;color:var(--ink-soft);margin:6px 0 14px;}
.modal-actions{display:flex;justify-content:space-between;gap:10px;}.checkin-box{width:min(400px,100%);}
.checkin-prompt{font-size:16px;font-weight:700;color:var(--ink);margin:0 0 8px;line-height:1.5;}
.checkin-sub{font-size:13px;color:var(--ink-soft);margin:0 0 16px;}
.checkin-sub b{color:var(--brand);font-variant-numeric:tabular-nums;}

/* ===== 翻页闪卡 ===== */
.flash-area{margin:8px 0 4px;}
.pager{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:12px;}
.card-counter{font-size:14px;font-weight:700;color:var(--brand);background:var(--brand-soft);padding:5px 14px;border-radius:99px;}
#btn-prev-card:disabled,#btn-next-card:disabled,#btn-prev-card2:disabled,#btn-next-card2:disabled{opacity:.4;cursor:not-allowed;}
.deck-tools{margin-top:10px;text-align:center;}
.deck-tip{font-size:12px;color:var(--ink-soft);}

.flashcard{margin:4px 0;min-width:0;border:1px solid var(--line);border-radius:14px;background:#fff;box-shadow:var(--shadow);overflow:hidden;}
.day-title,.day-tools,.pager,.flashcard,.fc-head{min-width:0;}
.flashcard.is-mastered{border-color:#bfe9cf;background:#f7fdf9;}

/* v94：非课标标注 —— ① 卡片正面右上角角标 ② 卡片顶部说明行 */
.flashcard.is-nonke{position:relative;border-color:#f0d9a8;background:#fffdf6;}
.flashcard.is-nonke .fc-head{background:linear-gradient(180deg,#fff8e8,#fffdf6);padding-right:96px;}
.nonke-corner{position:absolute;top:12px;right:-1px;z-index:3;font-size:11px;font-weight:800;letter-spacing:1px;
  color:#7a4e00;background:linear-gradient(180deg,#ffe9b0,#ffd473);padding:3px 11px 3px 10px;
  border-radius:8px 0 0 8px;box-shadow:0 2px 6px rgba(170,115,0,.22);pointer-events:none;}
.fc-nonke{display:flex;align-items:flex-start;gap:8px;padding:9px 16px;font-size:12.5px;line-height:1.6;
  color:#8a5a00;background:linear-gradient(90deg,#fff6e0,#fffbf2);border-bottom:1px dashed #f0d9a8;}
.fc-nonke .nonke-tag{flex:0 0 auto;font-weight:800;color:#fff;background:#e6a100;border-radius:6px;
  padding:1px 7px;font-size:11px;letter-spacing:.5px;margin-top:1px;}
.wcard-body .fc-nonke{margin:-4px -14px 10px;}
.wcard.is-nonke{border-left:3px solid #e6a100;}
@media (max-width:560px){
  .flashcard.is-nonke .fc-head{padding-right:18px;padding-top:34px;}
  .nonke-corner{top:0;right:0;border-radius:0 14px 0 8px;}
}

/* 卡片头部：单词 + 音标 + 词性 + 年级单元 + 定级徽章 */
.fc-head{display:flex;flex-wrap:wrap;align-items:center;gap:10px 14px;padding:15px 18px;
  background:linear-gradient(180deg,#f6f9ff,#fff);border-bottom:1px solid var(--line);}
.fc-title{display:flex;align-items:baseline;flex-wrap:wrap;gap:6px 10px;flex:1 1 240px;min-width:0;}
.fc-titlewrap{flex:1 1 240px;min-width:0;}
.fc-meaning{font-size:13px;color:var(--ink-soft);margin-top:3px;line-height:1.5;}
.fc-word{font-size:30px;font-weight:800;color:var(--ink);line-height:1.15;word-break:break-word;}
.fc-phon{font-size:16px;color:var(--ink-soft);}
.fc-pos{display:inline-block;font-size:12px;background:var(--brand-soft);color:var(--brand);padding:3px 9px;border-radius:7px;font-weight:600;}
.fc-sub{display:flex;flex-wrap:wrap;gap:6px;width:100%;order:3;}
.fc-grade{font-size:12px;font-weight:600;color:#5b6b8c;background:#eef2f8;padding:3px 9px;border-radius:7px;}
.fc-actions{display:flex;align-items:center;gap:10px;margin-left:auto;}
.fc-speak{border:1px solid var(--line);background:#fff;border-radius:10px;padding:7px 11px;font-size:15px;cursor:pointer;transition:.15s;}
.fc-speak:hover{background:var(--brand-soft);border-color:var(--brand);}

/* 中考定级徽章 */
.fc-level{display:flex;flex-direction:column;align-items:flex-start;line-height:1.15;padding:5px 11px;border-radius:10px;background:#eef2f8;min-width:92px;}
.fc-stars{font-size:13px;letter-spacing:1px;color:#f0a020;}
.fc-level-label{font-size:12px;font-weight:700;color:#3a4a66;}
.fc-level.lv-S{background:#fff1e6;} .fc-level.lv-S .fc-level-label{color:#d9660a;}
.fc-level.lv-A{background:#fff6e0;} .fc-level.lv-A .fc-level-label{color:#c98a00;}
.fc-level.lv-B{background:#eaf3ff;} .fc-level.lv-B .fc-level-label{color:#1f6fd6;}
.fc-level.lv-C{background:#eef2f8;} .fc-level.lv-C .fc-level-label{color:#3a4a66;}
.fc-level.lv-D{background:#f1f3f6;} .fc-level.lv-D .fc-level-label{color:#6b7689;}
.fc-level.lv-E{background:#f3eefb;} .fc-level.lv-E .fc-level-label{color:#7a4fb0;}

.fc-examfreq{font-size:12.5px;color:#5b6b8c;background:#f6f8fb;padding:8px 18px;border-bottom:1px solid var(--line);}
.fc-detail{padding:14px 18px 18px;}
.fc-detail .field-row:first-child{margin-top:0;}
.fc-detail .ex,.fc-detail .exam,.fc-detail .err{font-size:13.5px;}
.fc-check{display:flex;align-items:center;gap:5px;font-size:12px;color:var(--ink-soft);user-select:none;cursor:pointer;}
.fc-check input{width:16px;height:16px;accent-color:var(--green);cursor:pointer;}

/* 搜索列表卡片上的小定级标签 */
.wlevel{display:inline-flex;align-items:center;gap:3px;font-size:11px;font-weight:700;padding:2px 7px;border-radius:6px;background:#eef2f8;color:#3a4a66;margin-left:3px;vertical-align:middle;}
.wlevel.lv-S{background:#fff1e6;color:#d9660a;}
.wlevel.lv-A{background:#fff6e0;color:#c98a00;}
.wlevel.lv-B{background:#eaf3ff;color:#1f6fd6;}
.wlevel.lv-C{background:#eef2f8;color:#3a4a66;}
.wlevel.lv-D{background:#f1f3f6;color:#6b7689;}
.wlevel.lv-E{background:#f3eefb;color:#7a4fb0;}

/* 学习心得 */
.reflection-wrap{margin-top:18px;border-top:1px dashed var(--line);padding-top:16px;}
.reflection-title{margin:0 0 8px;font-size:16px;color:var(--ink);}
.reflection-input{width:100%;min-height:96px;resize:vertical;padding:12px 14px;border:1px solid var(--line);border-radius:12px;
  font-size:14px;font-family:inherit;line-height:1.6;outline:none;color:var(--ink);}
.reflection-input:focus{border-color:var(--brand);background:#fff;}
.reflection-meta{margin-top:6px;text-align:right;}
.reflection-saved{font-size:12px;color:var(--green);font-weight:600;}

/* 搜索列表里的朗读按钮 */
.wspeak{font-size:16px;cursor:pointer;user-select:none;padding:2px 5px;border-radius:6px;}
.wspeak:hover{background:var(--brand-soft);}

/* ===== 标签页导航 ===== */
.tabs{display:flex;margin-bottom:14px;border-bottom:1px solid var(--line);}
.tab{flex:1 1 0;min-width:0;border:none;background:transparent;color:var(--ink-soft);font-size:14px;font-weight:600;
  padding:10px 4px;cursor:pointer;border-bottom:2px solid transparent;display:flex;align-items:center;justify-content:center;gap:5px;
  transition:.15s;white-space:nowrap;}
.tab:hover{color:var(--brand);}
.tab.active{color:var(--brand);border-bottom-color:var(--brand);}
.tab-badge{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;
  border-radius:99px;background:var(--red);color:#fff;font-size:11px;font-weight:700;line-height:1;}
.tab:not(.active) .tab-badge{background:#c4ccdb;}
.view-panel{min-width:0;}

/* 窄屏：标签改为 3×2 按钮卡片网格（放在基础规则后，确保能覆盖） */
@media(max-width:640px){
  .tabs{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-bottom:12px;border-bottom:none;}
  .tab{min-height:42px;font-size:13px;font-weight:700;padding:8px 2px;border:1px solid var(--line);border-radius:12px;
    background:var(--card);box-shadow:0 1px 3px rgba(31,42,68,.07);color:var(--ink-soft);}
  .tab.active{border-color:var(--brand);background:var(--brand-soft);color:var(--brand);box-shadow:inset 0 0 0 1px var(--brand);}
  .tab:hover{color:var(--ink-soft);}
  .tab.active:hover{color:var(--brand);}
}

/* 工具卡片（听写/错词/复习的容器） */
.tool-card{padding:6px 2px;}
.panel-title{margin:0 0 10px;font-size:18px;color:var(--ink);}
.tool-card .day-hint{margin:6px 0 14px;}

/* 听写 / 复习 设置项 */
.dict-opt{display:flex;align-items:center;gap:12px;margin:10px 0;}
.dict-opt label{font-size:13px;color:var(--ink-soft);min-width:42px;}
.dict-opt .cat-filter{margin-top:0;flex:1;}

/* 听写 / 复习 卡片 */
.dict-card{border:1px solid var(--line);border-radius:14px;background:#fff;box-shadow:var(--shadow);padding:18px;margin-top:10px;}
.dict-progress{font-size:13px;font-weight:700;color:var(--brand);background:var(--brand-soft);
  display:inline-block;padding:4px 12px;border-radius:99px;margin-bottom:14px;}
.dict-prompt{display:flex;flex-direction:column;align-items:center;gap:10px;text-align:center;margin-bottom:14px;min-height:60px;justify-content:center;}
/* 听写页的「🔊 播放发音」大按钮：显式声明自适应宽高 + 不折行，
   外壳打补丁——避免今后任何全局 .fc-speak 规则又把它方块化（v70） */
.dict-prompt .fc-speak.big{width:auto;height:auto;max-width:100%;white-space:nowrap;
  font-size:18px;padding:12px 22px;border-radius:12px;}
.dict-cn{font-size:20px;font-weight:700;color:var(--ink);line-height:1.4;}
.dict-prompt .fc-pos{font-size:13px;}
#sess-input{margin:6px 0 14px;font-size:17px;padding:13px 15px;}
.dict-actions{display:flex;gap:10px;flex-wrap:wrap;align-items:center;}
.dict-feedback{margin-top:14px;font-size:15px;min-height:22px;}
.dict-feedback.ok{color:var(--green);font-weight:700;}
.dict-feedback.bad{color:var(--red);font-weight:700;}
.dict-feedback b{font-size:17px;color:var(--ink);}
.dict-score{font-size:16px;margin:6px 0 14px;}
.dict-score b{font-size:22px;color:var(--brand);}

/* 错词本 */
.wrong-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:6px;}
.wrong-card{margin-bottom:12px;}
.wrong-card .wmain{flex:1;min-width:0;}
.wrong-card .wmeaning{font-size:13px;color:var(--ink-soft);margin-top:4px;}
.wrong-card .wspeak{font-size:16px;padding:4px 7px;}
.wrong-meta{font-size:12px;color:var(--ink-soft);padding:6px 14px 12px;background:#fbfcff;}

/* 艾宾浩斯复习 */
.rev-stat{font-size:13px;color:var(--ink-soft);font-weight:600;}
.rev-list{display:flex;flex-direction:column;gap:8px;margin:14px 0;}
.rev-item{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:#fbfcff;}
.rev-word{font-size:16px;font-weight:700;color:var(--ink);}
.rev-box{font-size:12px;font-weight:700;color:#3b6fd4;background:#eaf1ff;padding:2px 9px;border-radius:6px;}
.rev-item .rev-one{margin-left:auto;}

/* ===== 左列（日历 + AI 提问）===== */
.left-col{display:flex;flex-direction:column;gap:18px;min-width:0;}

/* AI 衍生提问卡片 */
.ai-card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:16px;box-shadow:var(--shadow);min-width:0;}
.ai-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:10px;}
.ai-head h3{margin:0;font-size:16px;font-weight:800;color:var(--ink);}
.ai-ctx{font-size:12px;font-weight:700;color:var(--brand);background:var(--brand-soft);padding:3px 10px;border-radius:99px;max-width:62%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.ai-chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px;}
.ai-chip{border:1px solid var(--line);background:#f8faff;color:var(--ink-soft);font-size:12px;padding:5px 11px;border-radius:99px;cursor:pointer;transition:.15s;font-family:inherit;}
.ai-chip:hover{border-color:var(--brand);color:var(--brand);background:var(--brand-soft);}
.ai-log{max-height:260px;overflow-y:auto;display:flex;flex-direction:column;gap:8px;padding:10px;background:#fafbfe;border:1px solid var(--line);border-radius:10px;margin-bottom:10px;}
.ai-empty{margin:0;font-size:13px;color:var(--ink-soft);text-align:center;padding:10px 0;}
.ai-msg{font-size:13.5px;line-height:1.65;padding:8px 12px;border-radius:12px;max-width:92%;white-space:pre-wrap;word-break:break-word;min-width:0;}
.ai-msg-user{align-self:flex-end;background:var(--brand);color:#fff;border-bottom-right-radius:4px;}
.ai-msg-ai{align-self:flex-start;background:#fff;border:1px solid var(--line);color:var(--ink);border-bottom-left-radius:4px;}
.ai-input-row{display:flex;gap:8px;align-items:flex-end;}
.ai-input{flex:1;min-width:0;resize:none;border:1px solid var(--line);border-radius:10px;padding:9px 12px;font:inherit;font-size:13.5px;line-height:1.5;color:var(--ink);background:#fff;}
.ai-input:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft);}
.ai-hint{margin:8px 0 0;font-size:12px;color:var(--ink-soft);line-height:1.6;}
.ai-hint.warn{color:var(--amber);font-weight:700;}

/* 页尾翻页条（学习心得上方） */
.pager-bottom{margin-top:14px;}

@media(max-width:640px){
  .ai-card{padding:13px 12px;}
  .ai-log{max-height:200px;}
  .ai-ctx{font-size:11px;padding:2px 8px;}
}
@media(max-width:480px){
  .ai-ctx{display:none;}
  .ai-msg{max-width:96%;}
}

/* ===== 悬浮球：快捷问 AI ===== */
.ai-fab{
  position:fixed;right:20px;bottom:22px;z-index:46;
  width:74px;height:74px;border:none;background:none;box-shadow:none;cursor:pointer;
  font-family:inherit;padding:0;
  transition:transform .18s,opacity .18s;
  touch-action:none;-webkit-user-select:none;user-select:none;
}
.ai-fab-img{
  display:block;width:100%;height:100%;object-fit:contain;pointer-events:none;
  filter:drop-shadow(0 6px 15px rgba(31,42,68,.32));
}
.ai-fab:hover{transform:translateY(-3px) scale(1.05);}
.ai-fab:active{transform:scale(.96);}
.ai-fab.dragging{transition:none;opacity:.9;cursor:grabbing;}
.ai-fab.on{background:none;box-shadow:none;}
.ai-fab-dot{
  position:absolute;top:1px;right:1px;width:13px;height:13px;border-radius:50%;
  background:var(--red);border:2px solid #fff;
}

/* 悬浮球展开的快捷提问面板：浅绿主题，与页面浅底白卡片明显区分 */
.ai-fab-panel{
  position:fixed;right:20px;bottom:104px;z-index:45;
  width:340px;max-width:calc(100vw - 24px);
  max-height:min(72vh,560px);
  display:flex;flex-direction:column;
  background:linear-gradient(180deg,#f4fdf8 0%,#e7f8ef 100%);
  border:1px solid #a7ddc3;border-radius:16px;overflow:hidden;
  box-shadow:0 20px 48px rgba(30,110,76,.26),0 0 0 4px rgba(76,196,143,.12);
  padding:0;min-width:0;
  animation:fabIn .18s ease-out;
}
@keyframes fabIn{from{opacity:0;transform:translateY(10px) scale(.98);}to{opacity:1;transform:none;}}
.fb-head{
  display:flex;align-items:center;gap:8px;min-width:0;
  padding:12px 14px;
  background:linear-gradient(135deg,#4cc48e,#2f9e72);
  color:#fff;
}
.fb-head h3{margin:0;font-size:15px;font-weight:800;color:#fff;white-space:nowrap;}
.fb-head .ai-ctx{max-width:none;flex:1;text-align:right;min-width:0;background:rgba(255,255,255,.24);color:#fff;}
.fb-close{
  flex:none;width:26px;height:26px;border:1px solid rgba(255,255,255,.45);background:rgba(255,255,255,.18);
  color:#fff;border-radius:8px;cursor:pointer;font-size:13px;line-height:1;font-family:inherit;padding:0;
}
.fb-close:hover{background:#fff;color:#2f9e72;border-color:#fff;}
.ai-fab-panel .ai-log-fb{
  flex:1;min-height:110px;max-height:none;
  margin:12px 14px 10px;background:#fff;border-color:#cbebda;
}
.ai-fab-panel .ai-input-row{margin:0 14px;}
.ai-fab-panel .ai-input{border-color:#bfe5d1;background:#fff;}
.ai-fab-panel .ai-input:focus{border-color:#3fbd8b;box-shadow:0 0 0 3px rgba(63,189,139,.18);}
.ai-fab-panel > .ai-hint{margin:8px 14px 13px;color:#3f6b57;}
.ai-fab-panel > .ai-hint.warn{color:var(--amber);font-weight:700;}
.ai-fab-panel .ai-empty{color:#3f6b57;}
.ai-fab-panel .btn.primary{background:#2fa86f;border-color:#2fa86f;}
.ai-fab-panel .ai-msg-user{background:#2fa86f;}

@media(max-width:640px){
  .ai-fab{width:64px;height:64px;right:12px;bottom:12px;}
  .ai-fab-panel{
    left:10px;right:10px;bottom:84px;width:auto;max-width:none;
    max-height:calc(100vh - 100px);
  }
  .ai-log-fb{min-height:100px;}
  .fb-head{padding:10px 12px;}
  .fb-head h3{font-size:14px;flex:none;}
  /* 移动端也保留「当前单词」上下文，过长时省略号收尾 */
  .fb-head .ai-ctx{display:inline-block;font-size:11px;padding:2px 8px;text-align:right;}
  .ai-fab-panel .ai-log-fb{margin:10px 12px 8px;}
  .ai-fab-panel .ai-input-row{margin:0 12px;}
  .ai-fab-panel > .ai-hint{margin:7px 12px 11px;}
}

/* ===== v84：电脑端放大「悬浮问 AI」面板 =====
   手机端（上面那条 @media(max-width:640px)）**一个字没动** —— 这三条都走 min-width，
   天然不落在手机上。加宽的同时把消息区高度、字号、留白一起抬，
   否则「框变宽了但内容还是挤成一坨」，只是变得更空。
   面板里所有选择器都挂在 .ai-fab-panel 下，避免碰到页面内 AI 卡片（.ai-card）。 */
@media (min-width:900px){
  .ai-fab-panel{width:460px;max-height:min(78vh,660px);}
  .ai-fab-panel .ai-log-fb{min-height:150px;}
  .fb-head{padding:13px 16px;}
  .fb-head h3{font-size:16px;}
  .ai-fab-panel .ai-msg{font-size:14px;}
  .ai-fab-panel .ai-input{font-size:14px;padding:10px 13px;}
}
@media (min-width:1280px){
  .ai-fab-panel{width:580px;max-height:min(80vh,780px);}
  .ai-fab-panel .ai-log-fb{min-height:200px;margin:14px 16px 12px;}
  .ai-fab-panel .ai-input-row{margin:0 16px;}
  .ai-fab-panel > .ai-hint{margin:10px 16px 15px;}
  .ai-fab-panel .ai-pick-row{margin:12px 16px 0;}
  .ai-fab-panel .ai-msg{font-size:14.5px;line-height:1.7;}
  .ai-fab-panel .ai-input{font-size:14.5px;}
}
@media (min-width:1600px){
  .ai-fab-panel{width:680px;max-height:min(82vh,900px);}
}

/* ===== 中考倒计时牌（页面最顶端）===== */
.exam-card{
  --ec-accent:#3f6fd8;--ec-line:rgba(63,111,216,.22);
  display:flex;align-items:center;gap:16px;flex-wrap:wrap;
  padding:14px 20px;margin-bottom:16px;border-radius:var(--radius);
  border:1px solid var(--ec-line);
  background:linear-gradient(135deg,#eef3ff,#e6efff);
  box-shadow:var(--shadow);
}
.exam-card.lv-2{--ec-accent:#1f9d63;--ec-line:rgba(31,157,99,.24);background:linear-gradient(135deg,#eafaf3,#e0f6ea);}
.exam-card.lv-3{--ec-accent:#d98214;--ec-line:rgba(217,130,20,.26);background:linear-gradient(135deg,#fff5e6,#ffeacb);}
.exam-card.lv-4{--ec-accent:#d63b34;--ec-line:rgba(214,59,52,.28);background:linear-gradient(135deg,#ffecec,#ffdedd);}

.ec-main{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;min-width:0;}
.ec-emoji{font-size:20px;line-height:1;}
.ec-text{font-size:15px;font-weight:800;color:var(--ink);}
.ec-num{
  font-size:40px;font-weight:900;line-height:1;letter-spacing:-1px;
  color:var(--ec-accent);font-variant-numeric:tabular-nums;
}
.ec-unit{font-size:15px;font-weight:800;color:var(--ink);}
.exam-card.lv-4 .ec-num{animation:ecPulse 2s ease-in-out infinite;}
@keyframes ecPulse{0%,100%{transform:scale(1);}50%{transform:scale(1.07);}}

.ec-right{flex:1;min-width:190px;display:flex;flex-direction:column;gap:6px;min-height:0;}
.ec-meta{display:flex;gap:8px;flex-wrap:wrap;font-size:12.5px;font-weight:800;color:var(--ink-soft);}
.ec-dot{opacity:.45;}
.ec-bar-wrap{height:8px;border-radius:99px;overflow:hidden;background:rgba(255,255,255,.72);border:1px solid rgba(255,255,255,.95);}
.ec-bar{height:100%;width:0;border-radius:99px;background:var(--ec-accent);opacity:.8;transition:width .4s;}
.ec-sub{font-size:12px;color:var(--ink-soft);line-height:1.5;}

.ec-btn{
  flex:none;margin-left:auto;cursor:pointer;font-family:inherit;
  border:1px solid var(--ec-line);background:#fff;color:var(--ec-accent);
  font-size:12.5px;font-weight:800;padding:7px 13px;border-radius:99px;transition:.15s;
}
.ec-btn:hover{background:var(--ec-accent);color:#fff;border-color:var(--ec-accent);}

@media(max-width:640px){
  .exam-card{padding:12px 14px;gap:10px;}
  .ec-emoji{font-size:17px;}
  .ec-text{font-size:13.5px;}
  .ec-num{font-size:32px;}
  .ec-unit{font-size:13.5px;}
  .ec-right{min-width:100%;flex-basis:100%;}
  .ec-btn{width:100%;margin:2px 0 0;text-align:center;}
}

/* ================= 长难句精读 ================= */
.ai-fill-day{
  border-color:#b9cdf7 !important;background:#f2f7ff !important;color:#3b6fd4 !important;
  font-weight:700;
}
.ai-fill-day:hover{background:#e6efff !important;}
.ai-fill-day:disabled{opacity:.7;cursor:default;}

.field-row .k .tag{font-size:10.5px;font-weight:800;padding:1px 7px;border-radius:99px;letter-spacing:.3px;}
.tag-hard{background:#e8efff;color:#3b6fd4;}
.tag-quiz{background:var(--green-soft);color:#1f9d63;}

.hard-item{
  position:relative;padding:11px 40px 11px 12px;margin:7px 0;border-radius:11px;
  background:linear-gradient(135deg,#f7faff,#eef4ff);
  border:1px solid #dfe8fb;border-left:3px solid var(--brand);
}
.hard-en{font-family:"Cambria","Times New Roman",serif;font-size:14.5px;color:var(--ink);line-height:1.62;}
.hard-zh{font-size:13px;color:var(--ink-soft);margin-top:4px;}
.hard-point{
  margin-top:7px;padding:6px 9px;border-radius:8px;background:rgba(91,141,239,.09);
  color:#3b5f9e;font-size:12.5px;line-height:1.55;
}
.hard-speak{
  position:absolute;right:9px;top:9px;border:none;background:#fff;border-radius:8px;
  width:26px;height:26px;cursor:pointer;font-size:12px;line-height:1;padding:0;
  box-shadow:0 1px 4px rgba(31,42,68,.13);transition:.15s;
}
.hard-speak:hover{background:var(--brand-soft);}
.hard-empty{margin:2px 0 8px;font-size:12.5px;color:var(--ink-soft);line-height:1.6;}
.hard-gen{
  display:block;margin-top:8px;font-size:12.5px;padding:7px 15px;border-radius:9px;cursor:pointer;
  font-weight:700;font-family:inherit;border:1px dashed var(--brand);background:#fff;
  color:var(--brand);transition:.15s;
}
.hard-gen:hover{background:var(--brand-soft);}
.hard-gen:disabled{opacity:.62;cursor:default;border-style:solid;}

.ex-warn{
  font-size:12.5px;color:#96691b;background:#fff8ec;border:1px solid #f6e3c0;
  border-left:3px solid var(--amber);border-radius:9px;padding:8px 10px;line-height:1.6;
}
.ex-by{font-size:11px;color:var(--ink-soft);margin-top:4px;}
.ex-sub{font-size:12px;font-weight:700;color:var(--ink-soft);margin:9px 0 3px;}

/* ================= 多维演练 ================= */
.qz-group{margin:9px 0 13px;}
.qz-title{
  display:flex;align-items:center;gap:6px;font-size:12.5px;font-weight:800;color:#1f9d63;
  padding-bottom:5px;margin-bottom:6px;border-bottom:1px dashed var(--line);
}
.qz-title>i{width:6px;height:6px;border-radius:50%;background:var(--green);flex:none;display:block;}
.qz-title b{margin-left:auto;font-size:11px;color:var(--ink-soft);font-weight:700;}
.qz-group.qz-ai .qz-title{color:#3b6fd4;}
.qz-group.qz-ai .qz-title>i{background:var(--brand);}

.qz-item{padding:8px 10px;margin:6px 0;border-radius:10px;background:#fbfcfe;border:1px solid var(--line);}
.qz-q{font-size:13.5px;color:var(--ink);line-height:1.62;white-space:pre-line;}
.qz-opts{display:flex;flex-wrap:wrap;gap:6px;margin-top:7px;}
.qz-opt{
  font-size:12.5px;padding:5px 11px;border-radius:8px;cursor:pointer;font-weight:600;
  font-family:inherit;border:1px solid var(--line);background:#fff;color:var(--ink);transition:.15s;
}
.qz-opt:hover{border-color:var(--brand);color:var(--brand);}
.qz-opt.ok{background:var(--green-soft);border-color:var(--green);color:#1f7a4d;}
.qz-opt.bad{background:#fdeceb;border-color:var(--red);color:#c0392b;}
.qz-show{
  margin-top:7px;font-size:12px;padding:4px 13px;border-radius:8px;cursor:pointer;font-weight:700;
  font-family:inherit;border:1px solid var(--brand);background:#fff;color:var(--brand);transition:.15s;
}
.qz-show:hover{background:var(--brand-soft);}
.qz-ex{
  margin-top:7px;padding:8px 10px;border-radius:8px;font-size:13px;line-height:1.55;
  background:var(--green-soft);border-left:3px solid var(--green);color:var(--ink);
}
.qz-tip{margin-top:3px;font-size:12px;color:var(--ink-soft);}

@media(max-width:640px){
  .hard-item{padding:10px 36px 10px 11px;}
  .hard-en{font-size:14px;}
  .hard-gen{width:100%;text-align:center;}
  .qz-opt{flex:1 1 46%;text-align:center;}
  .qz-item{padding:7px 9px;}
}

/* ===== 首屏载入提示（词库较大，给个进度反馈，避免以为卡死）===== */
.boot-screen{
  position:fixed;inset:0;z-index:9999;
  display:flex;align-items:center;justify-content:center;
  background:var(--bg);
  transition:opacity .22s ease;
}
.boot-screen.hide{opacity:0;pointer-events:none;}
.boot-box{text-align:center;padding:24px;}
.boot-spinner{
  width:34px;height:34px;margin:0 auto 14px;
  border:3px solid rgba(31,42,68,.12);
  border-top-color:var(--brand);
  border-radius:50%;
  animation:bootspin .8s linear infinite;
}
@keyframes bootspin{to{transform:rotate(360deg);}}
.boot-text{font-size:15px;font-weight:700;color:var(--ink);}
.boot-sub{font-size:12.5px;color:var(--ink-soft);margin-top:6px;}
@media (prefers-reduced-motion:reduce){.boot-spinner{animation-duration:2s;}}

/* 词卡上「已移出」小标签（.wcat-out 仍在使用） */
.wcat-out{background:#fdecea;color:#c0392b;}
/* 搜索结果卡片「计划学习日」小标签（v95） */
.wcat-day{background:#eef6ff;color:#2f7fd6;border:1px solid #cfe4fb;}
.wcat-day.wld-today{background:#fff4e0;color:#b9770a;border-color:#f3dca6;}
.wcat-day.wld-past{background:#eef0f3;color:#7a8290;border-color:#dde1e7;}
/* ===== 记号笔（悬浮快捷键 + 颜色 + 橡皮 + 清除）=====
   v100：交互改为「先点颜色拿笔 → 划过文字即上色」，所以悬浮球要能看出「手里有没有笔、
   拿的是哪支」—— 用右下角的小色点 + 外圈高亮表示。 */
.hl-fab{
  position:fixed;left:20px;bottom:22px;z-index:47;
  width:52px;height:52px;border-radius:50%;
  border:1px solid #ffd76e;background:linear-gradient(180deg,#fff6d8,#ffe9a8);
  color:#8a5a00;font-size:22px;line-height:1;cursor:pointer;padding:0;font-family:inherit;
  box-shadow:0 6px 16px rgba(31,42,68,.18);
  display:flex;align-items:center;justify-content:center;
  transition:transform .18s,box-shadow .18s,border-color .18s;
}
.hl-fab:hover{transform:translateY(-2px);}
.hl-fab.armed{border-color:#2f7fd6;box-shadow:0 0 0 3px rgba(47,127,214,.22),0 6px 16px rgba(31,42,68,.18);}
.hl-fab.erasing{border-color:#8a94a3;box-shadow:0 0 0 3px rgba(138,148,163,.22),0 6px 16px rgba(31,42,68,.18);}
.hl-fab .hl-dot{
  position:absolute;right:2px;bottom:2px;width:15px;height:15px;border-radius:50%;
  border:2px solid #fff;box-shadow:0 1px 3px rgba(31,42,68,.3);display:none;
}
.hl-panel{
  position:fixed;left:20px;bottom:84px;z-index:48;
  width:214px;padding:10px 12px;border-radius:14px;
  background:#fff;border:1px solid #e6eaf2;box-shadow:0 12px 30px rgba(31,42,68,.18);
  display:none;
}
.hl-panel.on{display:block;}
.hl-panel .hl-row{display:flex;align-items:center;gap:6px;margin-bottom:8px;}
.hl-panel .hl-row:last-of-type{margin-bottom:0;}
.hl-panel .hl-lab{font-size:13px;font-weight:700;color:#46536b;flex:0 0 auto;}
.hl-panel .hl-st{font-size:11px;color:#8a94a3;margin-left:auto;white-space:nowrap;}
.hl-panel .hl-off{
  flex:0 0 auto;font-size:11px;padding:2px 7px;border-radius:7px;cursor:pointer;font-family:inherit;
  border:1px solid #dfe4ee;background:#f7f9fc;color:#46536b;
}
.hl-panel .hl-off:hover{background:#eef2f8;}
.hl-panel .hl-sw-row{flex-wrap:wrap;}
.hl-panel .hl-sw{width:26px;height:26px;border-radius:7px;border:2px solid #dfe4ee;cursor:pointer;padding:0;}
.hl-panel .hl-sw.on{border-color:#2f7fd6;box-shadow:0 0 0 2px rgba(47,127,214,.25);transform:scale(1.1);}
.hl-panel .hl-btn{
  flex:1;font-size:12px;padding:6px 4px;border-radius:8px;cursor:pointer;
  border:1px solid #dfe4ee;background:#f7f9fc;color:#46536b;font-family:inherit;
}
.hl-panel .hl-btn:hover{background:#eef2f8;}
.hl-panel .hl-btn.on{border-color:#e6a100;background:#fff6e0;color:#8a5a00;}
.hl-panel.erasing .hl-sw{opacity:.4;}
/* 提示行常显（原来是透明+短暂显示，用户看不到「怎么用」），做事时高亮一下 */
.hl-panel .hl-hint{font-size:11px;color:#8a94a3;margin-top:6px;line-height:1.45;transition:color .2s;}
.hl-panel .hl-hint.on{color:#2f7fd6;font-weight:700;}
mark.hlm{border-radius:3px;padding:0 1px;color:inherit;cursor:pointer;}
@media (max-width:640px){
  .hl-fab{left:12px;bottom:12px;width:48px;height:48px;font-size:20px;}
  .hl-panel{left:12px;bottom:70px;width:196px;}
}
/* v97 长难句「隐藏英文」—— 遮住英文，看着中文练中翻英
   v98：按钮挪到英文句末（.hard-en 内的最后一个行内元素），比挂在整块角落显眼得多。 */
.hard-en{position:relative;}
.hard-hide{
  margin-left:8px;vertical-align:1px;
  border:1px solid #cfd8ea;background:#fff;color:#2f7fd6;
  font-size:12px;font-weight:600;padding:3px 10px;border-radius:99px;
  cursor:pointer;font-family:inherit;white-space:nowrap;
  box-shadow:0 1px 3px rgba(31,42,68,.08);
}
.hard-hide:hover{background:#eef6ff;border-color:#9dc4ef;color:#1d64b4;}
.hard-hide.on{background:#fff3d6;border-color:#f0cf7a;color:#8a5a00;}
/* 隐藏态：文字透明但仍占位，提示行用 ::after 叠上去（不能挡住按钮的点击） */
.hard-en-txt.en-hidden{color:transparent;-webkit-user-select:none;user-select:none;}
.hard-en.en-hidden::after{
  content:"英文已隐藏 · 看着中文自己译一遍";
  position:absolute;left:0;top:0;color:#8a94a3;font-size:13px;pointer-events:none;
}
/* 「计时记在另一天」时的状态色（v98：显示必须与实际一致） */
.ck-status.other{color:#b9770a;}


/* =========================================================
   v45 学习端右上角：孩子姓名 + 同步状态 + 退出登录
   ========================================================= */
.user-chip{
  display:flex;align-items:center;gap:8px;flex:none;
  background:rgba(255,255,255,.18);border:1px solid rgba(255,255,255,.46);
  border-radius:999px;padding:4px 5px 4px 12px;color:#fff;
}
.user-chip .uc-dot{
  width:9px;height:9px;border-radius:50%;background:#c8d2e4;flex:none;
  box-shadow:0 0 0 2px rgba(255,255,255,.32);transition:.2s;
}
.user-chip .uc-name{
  font-size:13px;font-weight:800;max-width:96px;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap;
}
.user-chip .uc-out{
  border:0;background:rgba(255,255,255,.92);color:#3d6ed8;font-weight:800;font-size:12px;
  padding:5px 11px;border-radius:999px;cursor:pointer;font-family:inherit;transition:.15s;
}
.user-chip .uc-out:hover{background:#fff;}

@media (max-width:700px){
  .topbar{padding:16px 14px;gap:10px;flex-wrap:wrap;}
  .topbar h1{font-size:18px;}
  .subtitle{font-size:12px;}
  .user-chip{padding:3px 4px 3px 9px;order:-1;width:100%;justify-content:space-between;}
  .user-chip .uc-name{max-width:none;}
  .top-actions{width:100%;justify-content:flex-start;flex-wrap:wrap;}
}

/* =========================================================
   v48 学习端：打卡积分 chip + 🎁 奖励池面板
   由 account.js 使用（零侵入，不改 app.js 的任何学习逻辑）
   ========================================================= */
.pt-chip{
  display:flex;align-items:center;gap:6px;flex:none;cursor:pointer;
  border:0;border-radius:999px;padding:6px 13px;color:#4a2c00;
  background:linear-gradient(120deg,#ffc65c,#ff9a2e);
  font:inherit;font-size:13px;font-weight:900;font-variant-numeric:tabular-nums;
  box-shadow:0 4px 12px rgba(255,154,46,.34);transition:.15s;
}
.pt-chip:hover{filter:brightness(1.06);transform:translateY(-1px);}
.pt-chip.zero{
  background:rgba(255,255,255,.22);color:#fff;box-shadow:none;
  border:1px solid rgba(255,255,255,.46);
}

.pt-mask{
  position:fixed;inset:0;z-index:9000;display:flex;align-items:center;justify-content:center;
  background:rgba(20,28,46,.5);padding:18px;animation:ptFade .16s ease-out;
}
@keyframes ptFade{from{opacity:0}to{opacity:1}}
.pt-box{
  width:100%;max-width:600px;max-height:88vh;overflow-y:auto;overscroll-behavior:contain;
  background:#f5f7fc;border-radius:20px;box-shadow:0 24px 64px rgba(16,24,44,.36);
  animation:ptUp .2s ease-out;
}
@keyframes ptUp{from{transform:translateY(12px) scale(.985);opacity:.55}to{transform:none;opacity:1}}
.pt-head{
  position:sticky;top:0;z-index:2;display:flex;align-items:center;gap:9px;
  padding:15px 18px;background:linear-gradient(120deg,#4b7ce4,#5b8def 60%,#3fb2b4);color:#fff;
}
.pt-head h3{margin:0;font-size:16.5px;font-weight:900;}
.pt-head .pt-close{
  margin-left:auto;flex:none;border:0;background:rgba(255,255,255,.92);color:#3d6ed8;
  width:30px;height:30px;border-radius:50%;font-size:15px;font-weight:900;cursor:pointer;
  line-height:1;font-family:inherit;
}
.pt-body{padding:14px 16px 20px;}

.pt-hero{
  display:flex;flex-wrap:wrap;align-items:center;gap:14px;
  padding:16px 18px;border-radius:16px;background:#fff;box-shadow:0 6px 18px rgba(20,32,60,.07);
}
.pt-hero-main{display:flex;flex-direction:column;gap:3px;}
.pt-hero-main b{font-size:36px;line-height:1;color:#e08a00;font-variant-numeric:tabular-nums;}
.pt-hero-main span{font-size:12px;font-weight:700;color:#7b86a0;}
.pt-hero-sub{display:flex;flex-wrap:wrap;gap:8px;margin-left:auto;}
.pt-pill{
  display:flex;flex-direction:column;gap:2px;padding:8px 12px;border-radius:12px;
  background:#f2f5fb;min-width:76px;
}
.pt-pill i{font-style:normal;font-size:15px;font-weight:900;color:#3d5a8c;font-variant-numeric:tabular-nums;}
.pt-pill span{font-size:11px;font-weight:700;color:#8a94ac;}

.pt-streak{display:flex;flex-wrap:wrap;gap:10px;margin-top:12px;}
.pt-bar{
  flex:1;min-width:210px;padding:12px 14px;border-radius:14px;background:#fff;
  box-shadow:0 6px 18px rgba(20,32,60,.07);
}
.pt-bar-h{display:flex;align-items:baseline;gap:6px;font-size:12.5px;font-weight:800;color:#5b6680;}
.pt-bar-h b{color:#3d6ed8;font-size:14px;}
.pt-bar-h em{margin-left:auto;font-style:normal;color:#8a94ac;font-weight:700;font-size:11.5px;}
.pt-track{margin-top:8px;height:9px;border-radius:999px;background:#eef2f9;overflow:hidden;}
.pt-track i{display:block;height:100%;border-radius:999px;background:linear-gradient(90deg,#5b8def,#3fb2b4);transition:width .3s;}
.pt-bar.done .pt-track i{background:linear-gradient(90deg,#ffb84d,#ff9a2e);}

.pt-group{margin-top:18px;}
.pt-group h4{
  display:flex;align-items:center;gap:8px;margin:0 0 10px;
  font-size:13.5px;font-weight:900;color:#3d6ed8;
}
.pt-group h4::after{content:"";flex:1;height:1px;background:#dfe6f3;}

.pt-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(158px,1fr));gap:10px;}
.pt-card{
  display:flex;flex-direction:column;gap:7px;padding:13px;border-radius:14px;background:#fff;
  border:1.5px solid transparent;box-shadow:0 5px 14px rgba(20,32,60,.06);transition:.15s;
}
.pt-card.ok{border-color:#ffd58a;}
.pt-card.locked{opacity:.66;}
.pt-emoji{font-size:24px;line-height:1;}
.pt-name{font-size:13.5px;font-weight:900;color:#1f2a44;line-height:1.35;}
.pt-note{font-size:11.5px;color:#8a94ac;line-height:1.5;}
.pt-cost{
  margin-top:auto;display:flex;align-items:center;gap:5px;
  font-size:12.5px;font-weight:900;color:#e08a00;font-variant-numeric:tabular-nums;
}
.pt-btn{
  border:0;border-radius:10px;padding:9px 12px;font:inherit;font-size:12.5px;font-weight:900;
  cursor:pointer;background:linear-gradient(120deg,#ffb84d,#ff9a2e);color:#4a2c00;transition:.15s;
}
.pt-btn:hover{filter:brightness(1.06);}
.pt-btn[disabled]{background:#eef2f9;color:#9aa4bb;cursor:not-allowed;filter:none;}

.pt-log{margin-top:18px;}
.pt-row{
  display:flex;align-items:center;gap:10px;padding:10px 13px;border-radius:12px;
  background:#fff;margin-bottom:7px;box-shadow:0 4px 12px rgba(20,32,60,.05);
}
.pt-row-n{flex:1;min-width:0;font-size:13px;font-weight:800;color:#1f2a44;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.pt-row-d{flex:none;font-size:11.5px;color:#8a94ac;font-weight:700;}
.pt-tag{flex:none;font-size:11px;font-weight:900;padding:3px 9px;border-radius:999px;}
.pt-tag.pending{background:#fff4dd;color:#b57700;}
.pt-tag.done{background:#e6f7ee;color:#1c8a52;}
.pt-tag.rejected{background:#fdeaea;color:#c0453f;}
.pt-cancel{
  flex:none;border:0;background:#f2f5fb;color:#5b6680;border-radius:9px;
  padding:6px 10px;font:inherit;font-size:11.5px;font-weight:900;cursor:pointer;
}
.pt-empty{padding:22px 10px;text-align:center;font-size:13px;color:#8a94ac;font-weight:700;}
.pt-hint{padding:12px 14px;border-radius:12px;background:#fff8e8;color:#8a6200;
  font-size:12.5px;font-weight:700;line-height:1.7;margin-top:12px;}
.pt-msg{margin-top:12px;font-size:13px;font-weight:800;}
.pt-msg.ok{color:#1c8a52;}
.pt-msg.bad{color:#c0453f;}
.pt-loading{padding:34px 10px;text-align:center;font-size:13px;color:#8a94ac;font-weight:700;}

@media (max-width:700px){
  .pt-chip{padding:6px 12px;font-size:12.5px;}
  .pt-mask{padding:0;align-items:flex-end;}
  .pt-box{max-width:none;max-height:92vh;border-radius:20px 20px 0 0;}
  .pt-hero-main b{font-size:31px;}
  .pt-hero-sub{margin-left:0;width:100%;}
  .pt-grid{grid-template-columns:repeat(auto-fill,minmax(138px,1fr));gap:9px;}
  .pt-body{padding:12px 12px 18px;}
}

/* =========================================================
   v49 学习端：AI 选择下拉 + 轻提示条
   （设置与词库已整体搬到家长端，学习端不再有任何设置界面）
   ========================================================= */
.ai-pick-row{display:flex;align-items:center;gap:8px;margin:0 0 10px;}
.ai-pick-lb{flex:none;font-size:12px;font-weight:700;color:var(--ink-soft);}
.ai-pick{
  flex:1;min-width:0;font:inherit;font-size:12.5px;font-weight:700;color:var(--ink);
  background:#f8faff;border:1px solid var(--line);border-radius:9px;
  padding:6px 10px;cursor:pointer;text-overflow:ellipsis;
}
.ai-pick:hover{border-color:var(--brand);color:var(--brand);}
.ai-pick:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft);}
/* 悬浮球面板里的那一份，配色跟它自己的绿色头部对齐 */
.ai-fab-panel .ai-pick-row{margin:10px 14px 0;}
.ai-fab-panel .ai-pick{border-color:#bfe5d1;}
.ai-fab-panel .ai-pick-lb{color:#3f6b57;}

/* 家长刚改过设置时的轻提示，4 秒后自动消失 */
.study-toast{
  position:fixed;left:50%;bottom:26px;transform:translateX(-50%);
  z-index:9998;max-width:86vw;
  padding:10px 18px;border-radius:99px;
  background:rgba(31,42,68,.94);color:#fff;
  font-size:13px;font-weight:700;line-height:1.5;
  box-shadow:0 8px 26px rgba(31,42,68,.28);
  animation:studyToastIn .22s ease-out;
  pointer-events:none;
}
@keyframes studyToastIn{
  from{opacity:0;transform:translate(-50%,10px);}
  to{opacity:1;transform:translate(-50%,0);}
}

/* ================= 语音输入按钮（造句 / 中翻英 / 跟读 共用）v64 ================= */
/* 放在文件末尾：与 .sent-btns button 同特异性，靠「后来居上」拿到蓝色主按钮观感 */
button.va-mic{border:1px solid #3b6fd4;background:#3b6fd4;color:#fff;font-family:inherit;font-weight:600;transition:.15s;}
button.va-mic:hover{filter:brightness(1.05);}
button.va-mic:disabled{background:#e6e9ef;border-color:var(--line);color:#9aa3b2;cursor:not-allowed;}
/* 非 HTTPS 安全地址：浏览器必然禁用麦克风，用琥珀色提示（点了会说清原因） */
button.va-mic.mic-warn{background:#fff8e6;border-color:#e8c882;color:#8a5a12;}
button.va-mic.listening{background:#e0533a;animation:pulseMic 1.1s infinite;}

/* ================= 跟读打分（长难句精读）v64 ================= */
.hard-block{margin:8px 0 12px;}
.hard-block .hard-item{margin:0;}
.read-tool{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:6px;}
.read-mic{font-size:12.5px;padding:5px 13px;border-radius:9px;cursor:pointer;}
.read-best{font-size:11.5px;font-weight:700;color:var(--green);}
.read-box{
  flex-basis:100%;padding:9px 11px;border:1px solid var(--line);border-left:3px solid var(--brand);
  border-radius:9px;background:#fff;font-size:13px;line-height:1.6;
}
.read-head{display:flex;align-items:baseline;gap:8px;margin-bottom:3px;color:var(--ink);}
.read-head b{font-size:16px;}
.read-head span{font-size:13px;font-weight:700;}
.read-head.lv-a span{color:#1f9d63;}
.read-head.lv-b span{color:#3b6fd4;}
.read-head.lv-c span{color:#b8860b;}
.read-head.lv-d span{color:#c0503a;}
.read-tip{color:var(--ink-soft);font-size:12.5px;}
.read-row{margin-top:5px;font-size:12.5px;color:var(--ink-soft);}
.read-row i{font-style:normal;color:#9aa3b8;}
.read-row b{display:inline-block;margin:2px 4px 0 0;padding:1px 6px;border-radius:6px;background:#fdecea;color:#c0392b;font-weight:600;}
.read-row.read-extra b{background:#eef3ff;color:#3b6fd4;}
.read-heard{margin-top:6px;font-size:12px;color:#9aa3b8;word-break:break-word;}

@media (max-width:560px){
  .read-mic{font-size:12px;padding:5px 11px;}
  .read-head b{font-size:15px;}
}


/* ================= v68 技能奖励气泡（跟读打分 / AI 精批改后弹出）=================
   固定在下方中央，几秒后自己淡出；不用 alert 是为了不打断朗读与输入。
   手机端抬高一点，别压到底部的操作条。 */
.gain-toast{position:fixed;left:50%;bottom:28px;z-index:9999;
  display:flex;flex-direction:column;align-items:center;gap:3px;max-width:86vw;
  padding:11px 20px;border-radius:16px;
  background:linear-gradient(180deg,#ffd76a,#f5b023);color:#4a3000;
  font-weight:900;font-size:15px;line-height:1.4;text-align:center;
  box-shadow:0 10px 26px rgba(120,80,0,.28);
  transform:translate(-50%,14px);opacity:0;
  transition:opacity .28s ease, transform .28s ease;pointer-events:none;}
.gain-toast b{font-size:16px;letter-spacing:.2px;}
.gain-toast i{font-style:normal;font-weight:700;font-size:12.5px;opacity:.85;}
.gain-toast.show{opacity:1;transform:translate(-50%,0);}
.gain-toast.out{opacity:0;transform:translate(-50%,10px);}
@media (max-width:520px){.gain-toast{bottom:78px;font-size:14px;padding:10px 16px;}}


/* =========================================================
   🌱 延伸词专练（预览版 v86）
   —— 它是「对应课标词自己那张卡」的最后一块分区（不再挂在页尾），
      所以配色沿用卡片的分区语言：.sec + .s-green（绿色左条），内容用 .dv-*。
   ========================================================= */
.s-green{border-left-color:#27ae60;}
.s-green .sec-head{background:linear-gradient(90deg,#e7f7ee,#f8fdfa);}
.s-green .sec-t{color:#1e6b45;}
.dv-sec{margin-top:12px;}
.dv-sec .sec-body{padding-top:2px;}
.tag-derive{font-size:11px;font-weight:700;color:#1e6b45;background:#fff;border:1px solid #bfe4cd;
  border-radius:999px;padding:1px 9px;}
.dv-note{font-size:11.5px;font-weight:700;color:#3c5a49;margin-left:auto;text-align:right;}
.dv-item{padding:2px 0 4px;}
.dv-pair{display:flex;flex-wrap:wrap;align-items:baseline;gap:7px;margin:0 0 6px;}
.dv-from{font-size:14px;font-weight:700;color:#586a86;}
.dv-arrow{color:#27ae60;font-weight:800;}
.dv-word{font-size:19px;font-weight:800;color:#183055;letter-spacing:.3px;}
.dv-phon{font-size:12.5px;color:var(--ink-soft);}
.dv-pos{font-size:11.5px;font-weight:700;color:#1e6b45;background:var(--green-soft);border-radius:6px;padding:1px 6px;}
.dv-zh{font-size:13px;color:#2b3a55;font-weight:600;}
.dv-flag{font-size:11px;font-weight:700;border-radius:999px;padding:1px 9px;white-space:nowrap;}
.dv-flag.out{color:#8a5a10;background:#fdf1e3;border:1px solid #f3d9b4;}
.dv-spk{border:none;background:#eef6f1;color:#1e6b45;border-radius:8px;padding:2px 8px;font:inherit;
  font-size:12px;cursor:pointer;line-height:1.5;}
.dv-spk:hover{background:#dff0e6;}
.dv-why{margin:0 0 8px;padding:7px 10px;border-radius:9px;background:#f4faf6;border:1px dashed #bfe4cd;
  font-size:12.5px;color:#3c5a49;line-height:1.7;}
.dv-why b{color:#1e6b45;}
.dv-sub{display:flex;align-items:center;gap:6px;margin:11px 0 5px;font-size:12.5px;font-weight:800;
  color:#3a4a66;letter-spacing:.3px;}
.dv-sub .n{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;
  border-radius:50%;background:#27ae60;color:#fff;font-size:10.5px;font-weight:700;flex:0 0 16px;}
.dv-ph{list-style:none;margin:0;padding:0;}
.dv-ph li{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;padding:5px 8px;margin:4px 0;
  border-radius:8px;background:#f7fbf9;border:1px solid #e3f0e9;font-size:13px;}
.dv-ph li .en{font-weight:700;color:#1f3a5f;}
.dv-ph li .zh{color:var(--ink-soft);font-size:12.5px;}
.dv-q{padding:8px 10px;margin:6px 0;border-radius:9px;background:#fff;border:1px solid var(--line);
  font-size:13.5px;line-height:2.4;color:#22304c;}
.dv-q .zh{display:block;font-size:12px;color:var(--ink-soft);line-height:1.6;margin-top:1px;}
.dv-in{width:118px;border:none;border-bottom:2px solid #9fc4e8;background:#f4f8ff;border-radius:4px 4px 0 0;
  padding:1px 6px;font:inherit;font-size:13.5px;color:#183055;text-align:center;}
.dv-in:focus{outline:none;border-bottom-color:var(--brand);background:#eaf1ff;}
.dv-in.ok{border-bottom-color:#27ae60;background:var(--green-soft);color:#1e6b45;}
.dv-in.no{border-bottom-color:#e2554f;background:#fdeceb;color:#a8342e;}
.dv-bar{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:4px 0 2px;}
.dv-btn{border:1px solid var(--line);background:#fff;border-radius:9px;padding:4px 12px;font:inherit;
  font-size:12px;font-weight:700;color:#3a4a66;cursor:pointer;transition:transform .12s;}
.dv-btn:hover{transform:translateY(-1px);}
.dv-btn.p{background:var(--brand);border-color:var(--brand);color:#fff;}
.dv-res{font-size:12.5px;font-weight:700;}
.dv-res.ok{color:#2b8a55;} .dv-res.no{color:#c0392b;}
.dv-ta{display:block;width:100%;min-height:50px;border:1px solid var(--line);border-radius:9px;
  padding:7px 9px;font:inherit;font-size:13.5px;line-height:1.7;resize:vertical;background:#fcfdff;color:#22304c;}
.dv-ta:focus{outline:none;border-color:var(--brand);background:#fff;}
.dv-ref{display:none;margin-top:7px;padding:8px 10px;border-radius:9px;background:#f4faf6;border:1px solid #cfe9db;}
.dv-ref.show{display:block;}
.dv-ref .en{font-weight:700;color:#1f3a5f;font-size:13.5px;}
.dv-ref .kw{display:flex;flex-wrap:wrap;gap:5px;margin-top:7px;align-items:center;}
.dv-ref .kw i{font-size:11.5px;font-style:normal;color:var(--ink-soft);}
.dv-ref .kw span{font-size:11.5px;font-weight:700;border-radius:999px;padding:1px 8px;
  background:#e7f7ee;color:#2b8a55;border:1px solid #bfe4cd;}
.dv-ref .kw span.miss{background:#fdeceb;color:#c0392b;border-color:#f3c6c3;}
.dv-hard{margin:2px 0 4px;}
.dv-more{list-style:none;margin:2px 0 0;padding:0;}
.dv-more li{display:flex;flex-wrap:wrap;align-items:center;gap:7px;padding:5px 8px;margin:4px 0;
  border-radius:8px;background:#f7fbf9;border:1px solid #e3f0e9;font-size:13px;}
.dv-more li b{color:#1f3a5f;font-size:13.5px;}
.dv-more li .pos{font-size:11.5px;font-weight:700;color:#1e6b45;background:var(--green-soft);
  border-radius:6px;padding:1px 6px;}
.dv-more li .zh{color:var(--ink-soft);font-size:12.5px;}
.dv-spell{margin-top:10px;font-size:12.5px;color:#6b5320;background:#fffaf0;border:1px dashed #f0d9a8;
  border-radius:9px;padding:7px 10px;line-height:1.75;}
.dv-spell b{color:#8a5a10;}
.dv-spell code{background:#fdf1e3;border-radius:4px;padding:0 4px;font-size:12px;}
@media(max-width:640px){
  .dv-word{font-size:17px;}
  .dv-in{width:96px;}
  .dv-q{line-height:2.6;}
  .dv-note{display:none;}
  .tag-derive{font-size:10.5px;}
}

/* ===== v101：「选中单词 → 加入生词本」浮条（真题页 exam.html 用；学习端样式同源）=====
   真题页没拿笔时选中一个英文词，选区上方浮出这个小条。 */
.nw-pop{
  position:fixed;z-index:80;display:none;align-items:center;gap:7px;max-width:310px;
  background:#fff;border:1px solid #d9e4fb;border-radius:999px;padding:5px 6px 5px 12px;
  box-shadow:0 8px 22px rgba(31,42,68,.2);
}
.nw-pop .nw-pop-w{
  font-size:13px;font-weight:800;color:#25304a;max-width:128px;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap;
}
.nw-pop .nw-pop-add{
  border:0;border-radius:999px;background:#3a6fd8;color:#fff;font-size:12px;font-weight:800;
  padding:6px 11px;cursor:pointer;font-family:inherit;white-space:nowrap;
}
.nw-pop .nw-pop-add:hover{background:#2f5fc0;}
.nw-pop .nw-pop-add:disabled{background:#e8f2e9;color:#1d8a4c;cursor:default;}

/* ===== v101：生词本（学习端「⭐ 生词本」页签）===== */
.newword-card .nw-src{
  display:inline-block;margin-top:6px;font-size:11.5px;font-weight:700;color:#3a6fd8;
  background:#eef4ff;border:1px solid #dbe7ff;border-radius:999px;padding:2px 9px;line-height:1.6;
}
.newword-card .nw-src + .nw-src{margin-left:5px;}
.newword-card .nw-from{font-size:11.5px;color:#8a94a3;font-weight:700;margin-left:6px;}
.newword-card .nw-none{font-size:12px;color:#8a94a3;margin-top:4px;}
