
/* ==========================================================================
   冲击波英语 · 小学 1–2 年级精品课程
   ========================================================================== */
.bk{
  --paper:#FFFCF6;
  --card:#FFFFFF;
  --ink:#1E2A31;
  --ink-soft:#465661;
  --grey:#7B8892;
  --zh:#9E9890;
  --line:#E7E0D2;
  --line-soft:#F1ECE1;

  --accent:#1B5E57;
  --tint:#E8F1EE;
  --tline:#C3DBD5;
  --adeep:#0E3B37;

  --gold:#B98A2E;
  --gold-soft:#F6EEDC;
  --coral:#C9502F;
  --coral-soft:#FBEBE5;
  --plum:#6E5A93;
  --plum-soft:#F0ECF6;
  --sky:#2A6F97;
  --sky-soft:#E8F1F6;
  --leaf:#3F7A45;
  --leaf-soft:#EBF3EC;

  --display:Georgia,"Times New Roman","Songti SC",serif;
  --body:"Segoe UI","Trebuchet MS","Microsoft YaHei",sans-serif;
  --kid:"Trebuchet MS","Segoe UI",Verdana,sans-serif;
  /* ★ 音标字体栈。
     曾经怀疑「Cambria 缺 IPA 扩展字符、/ɜː/ 印成 /3:/」—— **那是误判**。
     放大逐字体渲染验证过：ɜ 本来就长成「3」的样子（反向 epsilon），
     ʃ 本来就长得像积分号 ∫，ɪ 就是小号大写 I。字形一直是对的。
     这里换成 SIL 字族打头，纯粹是因为它们是为 IPA 设计的字面，
     比 Cambria 的衬线更好认；Lucida Sans Unicode 是 Windows 自带的完整覆盖兜底。 */
  --ipa:"Charis SIL","Doulos SIL","Gentium Plus","Lucida Sans Unicode",
        "Segoe UI","DejaVu Sans",Georgia,serif;
  --zhf:"Microsoft YaHei","PingFang SC","Hiragino Sans GB",sans-serif;
}


.bk, .bk *{box-sizing:border-box}

.bk{background:var(--paper);-webkit-print-color-adjust:exact;print-color-adjust:exact}

.bk{
  margin:0;padding:0;color:var(--ink);background-color:var(--paper);
  font-family:var(--body);font-size:16.5px;line-height:1.72;
  -webkit-font-smoothing:antialiased;
}

.bk h1, .bk h2, .bk h3, .bk h4{font-family:var(--display);color:var(--adeep);margin:0;line-height:1.2}

.bk p{margin:0 0 10px}

.bk b, .bk strong{font-weight:700}

.bk sup{font-size:.68em;vertical-align:super}


/* 中文注释：英文是主文，中文是小字 */
.bk .zh{display:block;font-family:var(--zhf);font-size:11.5px;line-height:1.62;
    color:var(--zh);font-weight:400;letter-spacing:.12px;margin-top:2px}

.bk .zh-i{font-family:var(--zhf);font-size:11.5px;line-height:1.62;color:var(--zh)}

.bk .ipa{font-family:var(--ipa);color:var(--sky);font-size:.94em;letter-spacing:.2px}


/* ===================== 纸张 ===================== */
.bk .page{
  min-height:250mm;position:relative;display:flex;flex-direction:column;
  page-break-after:always;padding-bottom:4mm;
}

.bk .page:last-of-type{page-break-after:auto}

.bk .page.plain{min-height:0}


/* 页眉 */
.bk .rh{display:flex;align-items:center;gap:10px;padding-bottom:7px;
    border-bottom:1px solid var(--line);margin-bottom:16px}

.bk .rh .tag{font-family:var(--display);font-size:9.5px;letter-spacing:.22em;
  text-transform:uppercase;color:var(--grey);font-weight:700}

.bk .rh .sp{flex:1;height:1px;background:var(--line-soft)}

.bk .rh .pg{font-family:var(--display);font-size:11px;color:var(--grey);letter-spacing:.1em}

.bk .rh .pg b{color:var(--accent);font-size:13px}


/* 页脚 */
.bk .pf{margin-top:auto;padding-top:9px;border-top:1px solid var(--line-soft);
    display:flex;justify-content:space-between;align-items:center;
    font-size:9px;letter-spacing:.16em;text-transform:uppercase;color:#B3ADA3}

.bk .pf b{color:var(--accent);font-weight:700}


/* ===================== 章节头 ===================== */
.bk .sec{margin:0 0 13px}

.bk .sec .n{
  display:inline-grid;place-items:center;width:34px;height:34px;border-radius:11px;
  background:var(--accent);color:#fff;font-family:var(--display);font-size:16px;
  font-weight:700;margin-right:10px;vertical-align:-7px;
}

.bk .sec h2{display:inline;font-size:25px;letter-spacing:-.2px}

.bk .sec .en{display:block;font-family:var(--kid);font-size:12px;color:var(--accent);
  letter-spacing:.06em;margin-top:5px;font-weight:700;text-transform:uppercase}

.bk .sec .zh{display:block;font-size:11.5px;color:var(--zh);margin-top:2px}

.bk .sec-rule{height:2px;background:linear-gradient(90deg,var(--accent) 0 46px,var(--line-soft) 46px 100%);
  margin:11px 0 15px;border:0}


/* 小标题 */
.bk .sh{display:flex;align-items:center;gap:8px;margin:16px 0 9px}

.bk .sh .dot{width:7px;height:7px;border-radius:50%;background:var(--gold);flex:0 0 7px}

.bk .sh b{font-family:var(--display);font-size:14.5px;color:var(--adeep);letter-spacing:.01em}

.bk .sh span{font-size:10.5px;color:var(--zh);font-family:var(--zhf)}


/* ===================== 封面 ===================== */
.bk .cover{
  min-height:250mm;display:flex;flex-direction:column;position:relative;
  padding:15mm 13mm 12mm;overflow:hidden;
  background-color:var(--adeep);color:#FBF3E4;
  page-break-after:always;
}

.bk .cover::before{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:
    radial-gradient(700px 420px at 86% -8%, rgba(255,255,255,.11), transparent 62%),
    radial-gradient(560px 380px at -6% 106%, rgba(0,0,0,.24), transparent 66%);
}

.bk .cover > *{position:relative;z-index:2}

.bk .cover .c-top{display:flex;align-items:center;justify-content:space-between;gap:16px}

.bk .cover .brand{display:flex;align-items:center;gap:12px}

.bk .cover .brand .mark{
  width:44px;height:44px;border-radius:13px;display:grid;place-items:center;
  background:rgba(251,243,228,.13);border:1px solid rgba(251,243,228,.32);
  font-family:var(--display);font-size:20px;font-weight:700;
}

.bk .cover .brand .txt b{display:block;font-family:var(--display);font-size:16.5px}

.bk .cover .brand .txt i{display:block;font-style:normal;font-size:9px;letter-spacing:.26em;
  text-transform:uppercase;color:rgba(251,243,228,.58);margin-top:1px}

.bk .cover .c-badge{
  font-family:var(--display);font-size:10.5px;letter-spacing:.2em;text-transform:uppercase;
  border:1px solid rgba(251,243,228,.32);border-radius:999px;padding:6px 14px;
  color:rgba(251,243,228,.88);white-space:nowrap;
}

.bk .cover .c-mid{margin-top:auto;padding:9mm 0 0}

.bk .cover .c-foot{margin-top:auto}

.bk .cover .eyebrow{font-size:10px;letter-spacing:.3em;text-transform:uppercase;
  color:rgba(251,243,228,.62);font-weight:700;margin-bottom:12px}

.bk .cover .c-no{font-family:var(--display);font-size:12.5px;letter-spacing:.3em;
  text-transform:uppercase;color:#E4B45C;font-weight:700;margin-bottom:9px}

.bk .cover h1{font-size:58px;line-height:1.02;color:#fff;letter-spacing:-.6px}

.bk .cover h1 .sub{display:block;font-size:27px;font-weight:400;font-style:italic;
  color:rgba(251,243,228,.85);letter-spacing:.3px;margin-top:9px}

.bk .cover .c-zh{font-family:var(--zhf);font-size:15px;color:rgba(251,243,228,.8);
  margin-top:12px;letter-spacing:.5px}

.bk .cover .c-lead{margin:15px 0 0;font-size:13.5px;line-height:1.72;
  color:rgba(251,243,228,.8);max-width:118mm}

.bk .cover .c-lead .zh{color:rgba(251,243,228,.62);font-size:11px;margin-top:5px}

.bk .cover .c-chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:14px}

.bk .cover .c-chips span{font-size:9.5px;letter-spacing:.12em;text-transform:uppercase;
  border:1px solid rgba(251,243,228,.28);border-radius:999px;padding:5px 11px;
  color:rgba(251,243,228,.82)}

/* 封面角色一排 */
.bk .cover .c-cast{display:flex;align-items:flex-end;margin:16px 0 0}

.bk .cover .c-cast .face{width:62px;height:62px;border-radius:50%;overflow:hidden;
  border:2px solid rgba(251,243,228,.5);margin-right:-14px;background:#0B2C29}

.bk .cover .c-cast .face img{width:100%;height:100%;object-fit:cover;display:block}

.bk .cover .c-cast .face:last-child{margin-right:0}

.bk .cover .c-foot-in{display:flex;justify-content:space-between;align-items:flex-end;
  gap:14px;border-top:1px solid rgba(251,243,228,.2);padding-top:11px}

.bk .cover .c-foot-in b{font-family:var(--display);font-size:13px;display:block}

.bk .cover .c-foot-in i{font-style:normal;font-size:10px;color:rgba(251,243,228,.6);
  display:block;margin-top:2px}

.bk .cover .c-foot-in .r{text-align:right;font-size:9.5px;letter-spacing:.1em;
  color:rgba(251,243,228,.6)}


/* ===================== 版权 / 说明页 ===================== */
.bk .imprint{min-height:250mm;display:flex;flex-direction:column;
  padding:6mm 0 4mm;page-break-after:always}

.bk .imp-eyebrow{font-size:9.5px;letter-spacing:.28em;text-transform:uppercase;
  color:var(--gold);font-weight:700}

.bk .imprint h1{font-size:38px;margin:9px 0 4px}

.bk .imprint .imp-zh{font-family:var(--zhf);font-size:14px;color:var(--ink-soft);
  letter-spacing:.4px;margin-bottom:18px}

.bk .imp-grid{border-top:2px solid var(--accent);margin-top:4px}

.bk .imp-row{display:grid;grid-template-columns:34mm 1fr;gap:12px;
  padding:9px 0;border-bottom:1px solid var(--line-soft)}

.bk .imp-k{font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--grey);
  font-weight:700;padding-top:2px}

.bk .imp-v{font-size:13.5px;line-height:1.6}

.bk .imp-v b{color:var(--adeep)}

.bk .imp-v i{font-style:normal;color:var(--grey);font-size:12px}

.bk .imp-note{margin-top:16px;background:var(--tint);border-left:3px solid var(--accent);
  padding:12px 14px;font-size:12.5px;line-height:1.75;color:var(--ink-soft)}

.bk .imp-note b{color:var(--adeep)}

.bk .imp-foot{margin-top:auto;display:flex;justify-content:space-between;
  font-size:9.5px;letter-spacing:.14em;text-transform:uppercase;color:#B3ADA3;
  border-top:1px solid var(--line);padding-top:8px}


/* ===================== 通用页（信 / 目录 / 路线） ===================== */
.bk .fm{min-height:250mm;display:flex;flex-direction:column;page-break-after:always;padding:5mm 0 3mm}

.bk .fm-eyebrow{font-size:9.5px;letter-spacing:.28em;text-transform:uppercase;
  color:var(--gold);font-weight:700}

.bk .fm h2{font-size:31px;margin:8px 0 3px}

.bk .fm .fm-en{font-family:var(--display);font-style:italic;font-size:14px;
  color:var(--grey);margin-bottom:16px}

.bk .fm p{font-size:13.5px;line-height:1.8}

.bk .fm p .zh{font-size:11.5px;margin-top:3px}

.bk .lead-in{font-size:15px !important;line-height:1.8;color:var(--adeep);
  border-left:3px solid var(--gold);padding-left:13px;margin-bottom:15px}


/* 四步卡片 */
.bk .steps-4{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:15px 0}

.bk .step-card{background:var(--card);border:1px solid var(--line);border-radius:12px;
  padding:11px 12px}

.bk .step-card .sc-h{display:flex;align-items:center;gap:7px;margin-bottom:5px}

.bk .step-card .sc-n{width:19px;height:19px;border-radius:6px;background:var(--accent);
  color:#fff;font-size:10.5px;display:grid;place-items:center;font-weight:700;flex:0 0 19px}

.bk .step-card .sc-h b{font-family:var(--display);font-size:12.5px;color:var(--adeep)}

.bk .step-card p{font-size:11.5px;line-height:1.66;margin:0;color:var(--ink-soft)}

.bk .step-card p .zh{font-size:10.5px;margin-top:2px}


/* 目录 */
.bk .toc{margin-top:6px}

.bk .toc-part{font-size:10px;letter-spacing:.2em;text-transform:uppercase;
  color:var(--gold);font-weight:700;margin:13px 0 6px;
  border-bottom:1px solid var(--gold-soft);padding-bottom:4px}

.bk .toc-part i{font-style:normal;font-family:var(--zhf);letter-spacing:.1em;
  color:var(--zh);margin-left:8px;font-size:10px}

.bk .toc-row{display:grid;grid-template-columns:26px 1fr 30px;gap:9px;
  padding:4.5px 0;border-bottom:1px dotted var(--line);align-items:baseline}

.bk .toc-row .no{font-family:var(--display);font-size:11.5px;color:var(--gold);font-weight:700}

.bk .toc-row .nm{font-size:12.8px;color:var(--ink)}

.bk .toc-row .nm i{font-style:normal;font-family:var(--zhf);font-size:10.5px;
  color:var(--zh);margin-left:7px}

.bk .toc-row .pg{font-family:var(--display);font-size:11px;color:var(--grey);text-align:right}


/* 路线表 */
.bk .road{border:1px solid var(--line);border-radius:12px;overflow:hidden;margin-top:8px}

.bk .road-row{display:grid;grid-template-columns:38px 1fr 46mm;gap:10px;
  padding:8px 11px;border-bottom:1px solid var(--line-soft);align-items:center}

.bk .road-row:last-child{border-bottom:0}

.bk .road-row.on{background:var(--tint)}

.bk .road-row .rn{font-family:var(--display);font-size:13px;font-weight:700;color:var(--accent)}

.bk .road-row .rt b{display:block;font-size:12.8px;color:var(--adeep)}

.bk .road-row .rt span{font-size:10.5px;color:var(--zh);font-family:var(--zhf)}

.bk .road-row .rf{font-size:10px;color:var(--grey);text-align:right;letter-spacing:.02em}

.bk .road-row.on .rf{color:var(--accent);font-weight:700}


/* ===================== 人物页 ===================== */
.bk .cast-grid{display:grid;grid-template-columns:1fr 1fr;gap:11px;margin-top:6px}

.bk .cast-card{background:var(--card);border:1px solid var(--line);border-radius:13px;
  padding:11px;display:grid;grid-template-columns:52px 1fr;gap:10px;align-items:start}

.bk .cast-card .fc{width:52px;height:52px;border-radius:50%;overflow:hidden;
  border:2px solid var(--tline);background:var(--tint)}

.bk .cast-card .fc img{width:100%;height:100%;object-fit:cover;display:block}

.bk .cast-card .cn b{display:block;font-family:var(--display);font-size:13.5px;color:var(--adeep)}

.bk .cast-card .cn em{font-style:normal;font-size:9.5px;letter-spacing:.1em;
  text-transform:uppercase;color:var(--gold);font-weight:700}

.bk .cast-card .cn p{font-size:11px;line-height:1.6;margin:3px 0 0;color:var(--ink-soft)}

.bk .cast-card .cn p .zh{font-size:10px;margin-top:1px}


/* ===================== 本课导航 ===================== */
.bk .goal-box{background:var(--tint);border:1px solid var(--tline);border-radius:13px;
  padding:13px 15px;margin:10px 0}

.bk .goal-box .gb-h{font-size:10px;letter-spacing:.2em;text-transform:uppercase;
  color:var(--accent);font-weight:700;margin-bottom:7px}

.bk .goal-box ul{margin:0;padding-left:17px}

.bk .goal-box li{font-size:12.8px;line-height:1.72;margin-bottom:3px}

.bk .goal-box li .zh{display:inline;font-size:11px;margin-left:5px}


.bk .maplist{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:9px}

.bk .mapitem{display:grid;grid-template-columns:24px 1fr;gap:8px;align-items:start;
  background:var(--card);border:1px solid var(--line-soft);border-radius:10px;padding:8px 9px}

.bk .mapitem .mi{font-family:var(--display);font-size:11px;color:#fff;background:var(--accent);
  width:20px;height:20px;border-radius:6px;display:grid;place-items:center;font-weight:700}

.bk .mapitem b{display:block;font-size:11.8px;color:var(--adeep);font-family:var(--display)}

.bk .mapitem span{font-size:10.2px;color:var(--zh);font-family:var(--zhf)}


/* ===================== 主课文 ===================== */
.bk .script{background:var(--card);border:1px solid var(--tline);border-radius:14px;
  padding:15px 17px;margin:11px 0;position:relative}

.bk .script .sc-tag{position:absolute;top:-9px;left:15px;background:var(--accent);color:#fff;
  font-size:9px;letter-spacing:.18em;text-transform:uppercase;font-weight:700;
  padding:3px 9px;border-radius:999px}

.bk .script .sc-title{font-family:var(--display);font-size:16px;color:var(--adeep);
  margin:3px 0 9px;text-align:center;letter-spacing:.01em}

.bk .script .sc-title .zh{font-size:10.5px;margin-top:2px}

.bk .script p{font-size:15.5px;line-height:2.05;margin:0 0 7px;font-family:var(--kid);
  color:var(--ink)}

.bk .script p:last-child{margin-bottom:0}

.bk .script .zh{font-size:10.8px;line-height:1.6;margin-top:1px}

.bk .bl{display:inline-block;min-width:26mm;border-bottom:1.6px solid var(--gold);
  margin:0 2px;height:1.05em;vertical-align:-2px}

.bk .bl.s{min-width:17mm}

.bk .bl.xs{min-width:11mm}

.bk .num{color:var(--coral);font-weight:700}


/* 拆句 */
.bk .sent{display:grid;grid-template-columns:22mm 1fr;gap:10px;padding:9px 0;
  border-bottom:1px solid var(--line-soft)}

.bk .sent:last-child{border-bottom:0}

.bk .sent .sn{font-family:var(--display);font-size:10px;letter-spacing:.1em;
  text-transform:uppercase;color:var(--gold);font-weight:700}

.bk .sent .sn b{display:block;font-size:17px;color:var(--accent);letter-spacing:0}

.bk .sent .sb .en{font-family:var(--kid);font-size:14.5px;line-height:1.62;color:var(--ink)}

.bk .sent .sb .ip{font-family:var(--ipa);font-size:11.5px;color:var(--sky);
  line-height:1.55;margin-top:2px}

.bk .sent .sb .zh{font-size:11px;margin-top:2px}

.bk .sent .sb .tip{font-size:10.8px;line-height:1.6;color:var(--ink-soft);margin-top:4px;
  background:var(--gold-soft);border-radius:6px;padding:4px 8px;display:inline-block}

.bk .sent .sb .tip b{color:var(--coral)}


/* ===================== 音标卡 ===================== */
.bk .sound-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:9px;margin-top:8px}

.bk .sound{background:var(--card);border:1px solid var(--line);border-radius:12px;
  padding:9px;text-align:center;position:relative;overflow:hidden}

.bk .sound .s-ipa{font-family:var(--ipa);font-size:22px;color:var(--accent);font-weight:700;
  line-height:1.1}

.bk .sound .s-ipa small{font-size:10px;color:var(--grey);font-family:var(--body);
  letter-spacing:.06em;display:block;margin-top:1px}

.bk .sound .s-mouth{width:100%;height:56px;margin:3px 0 2px}

.bk .sound .s-mouth svg{width:100%;height:100%}

.bk .sound .s-words{font-family:var(--kid);font-size:10.6px;color:var(--ink-soft);
  line-height:1.5}

.bk .sound .s-words b{color:var(--coral)}

.bk .sound .s-trap{font-size:9.6px;line-height:1.45;color:var(--zh);font-family:var(--zhf);
  margin-top:4px;border-top:1px dashed var(--line);padding-top:4px}

.bk .sound .s-trap b{color:var(--coral);font-family:var(--zhf)}

.bk .sound.wide{grid-column:span 1}


/* ===================== 字母组合表 ===================== */
.bk .combo{width:100%;border-collapse:collapse;margin-top:8px;font-size:11.6px}

.bk .combo th{background:var(--accent);color:#fff;font-size:9.5px;letter-spacing:.12em;
  text-transform:uppercase;font-weight:700;padding:6px 8px;text-align:left}

.bk .combo td{padding:6px 8px;border-bottom:1px solid var(--line-soft);vertical-align:top}

.bk .combo tr:nth-child(even) td{background:#FCFAF4}

.bk .combo .c-g{font-family:var(--kid);font-weight:700;color:var(--coral);font-size:12.5px;
  white-space:nowrap}

.bk .combo .c-s{font-family:var(--ipa);color:var(--sky);white-space:nowrap}

.bk .combo .c-w{font-family:var(--kid);color:var(--ink)}

.bk .combo .c-w u{text-decoration:none;background:var(--gold-soft);padding:0 2px;
  border-radius:3px;font-weight:700}

.bk .combo .c-n{font-family:var(--zhf);color:var(--zh);font-size:10.4px}

/* ★ _combo_table / _pair_table 用的是 td.ip 和 td.z，
   但原来只定义了 .c-s / .c-w —— 音标单元格没有套上 --ipa，
   一直跟着正文吃 body 字体。字形本身没错（这些字符 body 字体也有），
   但衬线/无衬线的切换会让同一页的音标看起来是两套字体。补上。 */
.bk .combo td.ip{font-family:var(--ipa);color:var(--sky);white-space:nowrap;font-size:11.4px}

.bk .combo td.z{font-family:var(--kid);font-weight:700;color:var(--ink);font-size:12px}


/* ===================== 词表 ===================== */
.bk .wordtable{width:100%;border-collapse:collapse;margin-top:7px;font-size:11.8px}

.bk .wordtable th{background:var(--tint);color:var(--adeep);font-size:9.5px;
  letter-spacing:.12em;text-transform:uppercase;font-weight:700;padding:5px 7px;
  text-align:left;border-bottom:2px solid var(--tline)}

.bk .wordtable td{padding:4.5px 7px;border-bottom:1px solid var(--line-soft)}

.bk .wordtable .w{font-family:var(--kid);font-weight:700;color:var(--ink);font-size:12.4px}

.bk .wordtable .p{font-family:var(--ipa);color:var(--sky);font-size:11px}

.bk .wordtable .z{font-family:var(--zhf);color:var(--ink-soft);font-size:11px}

.bk .wordtable .e{font-family:var(--kid);color:var(--grey);font-size:10.6px}

.bk .wordtable tr.hi td{background:var(--gold-soft)}


/* 词卡 4 列 */
.bk .wordrow{display:grid;grid-template-columns:repeat(4,1fr);gap:7px;margin:9px 0}

.bk .wcard{background:var(--card);border:1px solid var(--line);border-radius:10px;
  padding:7px 6px;text-align:center}

.bk .wcard .wt{font-family:var(--kid);font-size:12.2px;font-weight:700;color:var(--ink)}

.bk .wcard .wi{font-family:var(--ipa);font-size:10px;color:var(--sky);margin-top:1px}

.bk .wcard .wz{font-family:var(--zhf);font-size:10px;color:var(--zh);margin-top:1px}

.bk .wcard .wx{font-family:var(--kid);font-size:9.2px;color:var(--grey);margin-top:3px;
  line-height:1.4;border-top:1px dotted var(--line);padding-top:3px}


/* ===================== 一问一答 ===================== */
.bk .qa{margin-top:7px}

.bk .qa-pair{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin-bottom:8px}

.bk .qb, .bk .ab{border-radius:11px;padding:8px 11px;position:relative}

.bk .qb{background:var(--sky-soft);border:1px solid #CFE1EC}

.bk .ab{background:var(--leaf-soft);border:1px solid #CFE3D2}

.bk .qb .qh, .bk .ab .ah{font-size:8.6px;letter-spacing:.18em;text-transform:uppercase;
  font-weight:700;margin-bottom:3px}

.bk .qb .qh{color:var(--sky)}

.bk .ab .ah{color:var(--leaf)}

.bk .qb .qt, .bk .ab .at{font-family:var(--kid);font-size:12.6px;line-height:1.58;color:var(--ink)}

.bk .ab .at .bl{min-width:20mm}

.bk .qb .qip, .bk .ab .aip{font-family:var(--ipa);font-size:10px;color:var(--grey);margin-top:2px}

.bk .qb .zh, .bk .ab .zh{font-size:10px;margin-top:1px}


/* 采访卡 */
.bk .interview{background:var(--plum-soft);border:1px solid #DCD3EA;border-radius:12px;
  padding:11px 13px;margin-top:10px}

.bk .interview .ih{font-family:var(--display);font-size:13px;color:var(--plum);
  margin-bottom:5px;font-weight:700}

.bk .interview p{font-size:11.5px;line-height:1.7;margin:0 0 4px;color:var(--ink-soft)}


/* ===================== 阅读 ===================== */
.bk .read{display:grid;grid-template-columns:44mm 1fr;gap:13px;margin-top:8px}

.bk .read .r-side{text-align:center}

.bk .read .r-face{width:40mm;height:40mm;border-radius:50%;overflow:hidden;
  border:3px solid var(--tline);background:var(--tint);margin:0 auto}

.bk .read .r-face img{width:100%;height:100%;object-fit:cover;display:block}

.bk .read .r-name{font-family:var(--display);font-size:14px;color:var(--adeep);margin-top:7px;
  font-weight:700}

.bk .read .r-role{font-size:9.5px;letter-spacing:.12em;text-transform:uppercase;
  color:var(--gold);font-weight:700}

.bk .read .r-meta{font-size:9.5px;color:var(--grey);margin-top:4px;line-height:1.5}

.bk .read .r-body p{font-size:13.6px;line-height:1.92;margin:0 0 6px;font-family:var(--kid)}

.bk .read .r-body p .zh{font-size:10.4px;line-height:1.55}

.bk .read .r-body .k{background:var(--gold-soft);border-radius:3px;padding:0 2px;font-weight:700}

.bk .rc{background:var(--card);border:1px solid var(--line);border-radius:12px;
  padding:10px 12px;margin-top:9px}

.bk .rc .rch{font-size:9.5px;letter-spacing:.16em;text-transform:uppercase;
  color:var(--accent);font-weight:700;margin-bottom:5px}

.bk .rc ol{margin:0;padding-left:16px}

.bk .rc li{font-size:11.8px;line-height:1.72;margin-bottom:3px}

.bk .rc li .zh{display:inline;font-size:10.4px;margin-left:4px}


/* ===================== 作业 ===================== */
.bk .day{background:var(--card);border:1px solid var(--line);border-radius:12px;
  padding:10px 12px;margin-bottom:8px;display:grid;
  grid-template-columns:31mm 1fr;gap:11px}

.bk .day .d-h{display:flex;flex-direction:column;gap:2px}

.bk .day .d-h .dn{font-family:var(--display);font-size:15px;color:var(--accent);font-weight:700}

.bk .day .d-h .dt{font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--gold);
  font-weight:700}

.bk .day .d-h .dm{font-size:9.6px;color:var(--grey);margin-top:2px}

.bk .day .d-b p{font-size:11.6px;line-height:1.68;margin:0 0 3px;color:var(--ink-soft)}

.bk .day .d-b p b{color:var(--adeep)}

.bk .day .d-b .zh{font-size:10.2px;margin-top:1px}

.bk .day .d-b .rec{display:inline-block;font-size:9.6px;background:var(--coral-soft);
  color:var(--coral);border-radius:5px;padding:2px 7px;margin-top:3px;font-weight:700;
  letter-spacing:.04em}


/* 打卡表 */
.bk .check{width:100%;border-collapse:collapse;margin-top:9px;font-size:10.6px}

.bk .check th{background:var(--accent);color:#fff;font-size:9px;letter-spacing:.1em;
  text-transform:uppercase;padding:5px 4px;font-weight:700}

.bk .check td{border:1px solid var(--tline);height:26px;text-align:center}

.bk .check td.lbl{background:var(--tint);font-family:var(--zhf);font-size:10px;
  color:var(--adeep);text-align:left;padding-left:6px;font-weight:700;white-space:nowrap}

.bk .check .star{color:var(--gold);font-size:11px}


/* 延伸作业卡 */
.bk .ext{background:var(--card);border:1px solid var(--line);border-radius:12px;
  padding:11px 13px;margin-bottom:9px}

.bk .ext .eh{display:flex;align-items:center;gap:8px;margin-bottom:6px}

.bk .ext .ei{width:26px;height:26px;border-radius:8px;display:grid;place-items:center;
  font-family:var(--display);font-size:11px;font-weight:700;color:#fff;flex:0 0 26px}

.bk .ext .eh b{font-family:var(--display);font-size:13.5px;color:var(--adeep)}

.bk .ext .eh span{font-size:10px;color:var(--zh);font-family:var(--zhf);margin-left:auto}

.bk .ext p{font-size:11.4px;line-height:1.7;margin:0 0 4px;color:var(--ink-soft)}

.bk .ext p .zh{font-size:10.2px;margin-top:1px}

.bk .ext ol, .bk .ext ul{margin:3px 0 0;padding-left:16px}

.bk .ext li{font-size:11.2px;line-height:1.68;margin-bottom:2px;color:var(--ink-soft)}

.bk .ext .lyric{background:var(--gold-soft);border-radius:8px;padding:8px 11px;margin-top:5px;
  font-family:var(--kid);font-size:11.6px;line-height:1.8;color:var(--ink)}

.bk .ext .lyric .zh{font-size:10px}


/* 抄写格（四线三格） */
.bk .hand{border:1px solid var(--line);border-radius:10px;padding:9px 11px;margin-top:8px;
  background:var(--card)}

.bk .hand .hh{font-size:9.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--accent);
  font-weight:700;margin-bottom:6px}

.bk .hand .hl{height:34px;border-bottom:1px solid #D9D2C4;position:relative}

.bk .hand .hl::before{content:"";position:absolute;left:0;right:0;top:50%;
  border-top:1px dashed #E3DCCC}

.bk .hand .hl::after{content:"";position:absolute;left:0;right:0;top:25%;
  border-top:1px dashed #EFE9DC}

.bk .hand .hint{font-family:var(--kid);font-size:11px;color:var(--grey);margin-top:4px}


/* 证书 */
.bk .cert{border:2px solid var(--gold);border-radius:6px;padding:20px 24px;margin-top:14px;
  text-align:center;position:relative;background:#FFFDF8}

.bk .cert::before{content:"";position:absolute;inset:5px;border:1px solid var(--gold-soft);
  border-radius:3px;pointer-events:none}

.bk .cert .ce{font-size:9.5px;letter-spacing:.3em;text-transform:uppercase;color:var(--gold);
  font-weight:700}

.bk .cert h2{font-size:27px;margin:7px 0 3px}

.bk .cert .cz{font-family:var(--zhf);font-size:12px;color:var(--zh);margin-bottom:11px}

.bk .cert .cl{font-size:12.5px;line-height:1.8;color:var(--ink-soft);max-width:130mm;margin:0 auto}

.bk .cert .cline{display:flex;justify-content:space-between;margin-top:18px;
  font-size:10.5px;color:var(--grey)}

.bk .cert .cline span{border-top:1px solid var(--line);padding-top:4px;width:52mm;text-align:center}


/* 通用小件 */
.bk .note{background:var(--gold-soft);border-left:3px solid var(--gold);padding:8px 12px;
  font-size:11.4px;line-height:1.7;color:var(--ink-soft);margin:9px 0;border-radius:0 8px 8px 0}

.bk .note b{color:var(--coral)}

.bk .tip{background:var(--tint);border-left:3px solid var(--accent);padding:8px 12px;
  font-size:11.4px;line-height:1.7;color:var(--ink-soft);margin:9px 0;border-radius:0 8px 8px 0}

.bk .tip b{color:var(--adeep)}

.bk .two{display:grid;grid-template-columns:1fr 1fr;gap:12px}

.bk .three{display:grid;grid-template-columns:1fr 1fr 1fr;gap:9px}

.bk .kv{font-size:11.5px;line-height:1.7}

.bk .kv b{color:var(--adeep)}

.bk .rule{height:1px;background:var(--line);margin:12px 0;border:0}


/* ==========================================================================
   ★ 压缩层（2026-10-25）
   第一版出 PDF 是 44 页，比设计的 33 页多出 11 页 —— 十一个板块各溢出到第二页，
   其中三页是**空白页**（只溢出几毫米，页脚被挤到下一页）。
   这里在文件末尾统一压一档：**只压留白和行距，字号基本不动**，
   因为读者是 6–8 岁的孩子，字不能小。放在最后靠层叠覆盖，改起来也好调。
   ========================================================================== */
.bk .page{min-height:246mm;padding-bottom:2mm}

.bk .fm{min-height:246mm;padding:3mm 0 2mm}

.bk .imprint{min-height:246mm;padding:4mm 0 2mm}


.bk{line-height:1.62}

.bk p{margin:0 0 8px}


.bk .fm p{font-size:13px;line-height:1.66}

.bk .fm h2{font-size:28px}

.bk .lead-in{font-size:14px !important;line-height:1.7;margin-bottom:12px}


.bk .sec{margin:0 0 10px}

.bk .sec h2{font-size:23px}

.bk .sec-rule{margin:8px 0 11px}

.bk .sh{margin:12px 0 7px}


.bk .sent{padding:6px 0}

.bk .sent .sb .en{font-size:13.6px}

.bk .sent .sb .ip{font-size:10.8px}

.bk .sent .sb .tip{padding:3px 7px;font-size:10.2px;margin-top:3px}


.bk .script{padding:13px 15px;margin:9px 0}

.bk .script p{font-size:14.6px;line-height:1.86;margin:0 0 5px}

.bk .script .sc-title{font-size:15px;margin:2px 0 7px}


.bk .combo th{padding:4px 7px}

.bk .combo td{padding:3.6px 7px}


.bk .wordtable th{padding:4px 7px}

.bk .wordtable td{padding:3.2px 7px}

.bk .wordtable .w{font-size:12px}

.bk .wordtable .e{font-size:10.2px}


.bk .wordrow{margin:6px 0;gap:6px}

.bk .wcard{padding:5px 5px}

.bk .wcard .wx{margin-top:2px;padding-top:2px}


.bk .qa-pair{margin-bottom:5px;gap:8px}

.bk .qb, .bk .ab{padding:6px 9px}

.bk .qb .qt, .bk .ab .at{font-size:12.2px}


.bk .day{padding:8px 10px;margin-bottom:6px}

.bk .day .d-b p{font-size:11.2px;line-height:1.6}

.bk .ext{padding:8px 11px;margin-bottom:7px}

.bk .ext p{font-size:11px;line-height:1.6;margin:0 0 3px}

.bk .ext li{font-size:10.8px;line-height:1.56;margin-bottom:1px}

.bk .ext .lyric{padding:6px 10px;line-height:1.66;font-size:11.2px}

.bk .ext .eh{margin-bottom:4px}


.bk .steps-4{gap:8px;margin:11px 0}

.bk .step-card{padding:8px 9px}

.bk .step-card p{font-size:11px;line-height:1.58}


.bk .toc-row{padding:2.6px 0}

.bk .toc-row .nm{font-size:12.2px}

.bk .toc-part{margin:9px 0 4px}


.bk .road-row{padding:5.2px 10px}

.bk .road-row .rt b{font-size:12.2px}


.bk .read .r-body p{font-size:12.8px;line-height:1.76;margin:0 0 4px}

.bk .read .r-face{width:36mm;height:36mm}

.bk .read{grid-template-columns:40mm 1fr;gap:11px}

.bk .rc{padding:8px 11px;margin-top:7px}

.bk .rc li{font-size:11.2px;line-height:1.62}


.bk .goal-box{padding:10px 13px;margin:8px 0}

.bk .goal-box li{font-size:12.2px;line-height:1.64}

.bk .mapitem{padding:6px 8px}

.bk .maplist{gap:6px}


.bk .cast-card{padding:9px}

.bk .cast-grid{gap:9px}


.bk .hand{padding:7px 9px;margin-top:6px}

.bk .hand .hl{height:31px}


.bk .cert{padding:15px 20px;margin-top:10px}

.bk .cert h2{font-size:24px}

.bk .cert .cl{font-size:11.8px;line-height:1.7}


.bk .interview{padding:9px 11px;margin-top:8px}

.bk .interview p{font-size:11px;line-height:1.6}

.bk .note, .bk .tip{padding:7px 11px;font-size:11px;line-height:1.62;margin:7px 0}

.bk .check td{height:23px}

.bk .sound{padding:7px}

.bk .sound .s-mouth{height:50px;margin:2px 0 1px}

.bk .sound .s-ipa{font-size:20px}

.bk .rh{margin-bottom:12px;padding-bottom:6px}

.bk .pf{padding-top:7px}


/* ==========================================================================
   ★★ 压缩层 2（2026-10-25 深夜）—— 这一次是「量出来的」，不是猜的
   ==========================================================================

   ## 上一轮为什么越改越差（38 页 → 39 页）

   上一轮是盲改：出一次 PDF（3 分钟）→ 数页数 → 猜哪节溢出 → 删文字。
   删掉的那段「找一找」从第 08 节搬到第 25 节，结果第 08 节还是溢出、
   第 25 节反而被挤爆 —— **因为根本不知道每页到底超了几毫米**。

   ## 现在的办法：先量，再改

   `_fit.py` 用 Edge 以 **print 媒体 + 680px 视口**（= 180mm 打印内容宽度）
   加载同一份 HTML，读每个 `.page` 的 getBoundingClientRect().height，
   换算成毫米，直接跟可用高度 264mm 比。**8 秒一次，精确到 0.1mm。**

   ⚠️ 第一版 `_fit.py` 用 794px（210mm，A4 全宽）量，量出只有 5 页溢出，
   而实际 PDF 多出 6 页 —— 对不上。**因为打印时正文宽度只有 180mm**，
   容器一窄就多换行、多占行高，794px 下量出来的是**低估值**。
   视口宽度必须是「打印内容宽度」，不是纸张宽度。

   ## 这一层压什么：只压「重复出现的竖向节奏」，一个字不删

   一页里 `.sh` 小标题出现 3–5 次、表格行十几行 —— 每处省 1mm 就是 10mm，
   而**字号一点没动**（读者是 6–8 岁，字不能小，行距也不能太挤）。
   ========================================================================== */

.bk .rh{margin-bottom:9px;padding-bottom:5px}

.bk .pf{padding-top:5px}


.bk .sec{margin:0 0 7px}

.bk .sec-rule{margin:6px 0 8px}

.bk .sh{margin:9px 0 5px}
                 /* ★ 每页 3–5 处，最划算的一刀 */

.bk .toc-row{padding:1.5px 0}
             /* 目录 33 行，每行省 2.2px */
.bk .toc-part{margin:7px 0 3px}


.bk .sent{padding:4px 0}

.bk .combo td{padding:3.2px 7px}

.bk .wordtable td{padding:2.9px 7px}


.bk .day{padding:7px 10px;margin-bottom:5px}

.bk .ext{padding:7px 11px;margin-bottom:6px}

.bk .step-card{padding:7px 9px}


.bk .read .r-body p{line-height:1.7}

.bk .rc li{line-height:1.56}

.bk .goal-box{padding:9px 12px}

.bk .qa-pair{margin-bottom:4px}

.bk .cast-card{padding:8px}


/* 第 03 节「逐句精讲」一页装 7 句，量出来超 12.2mm。
   每句的 tip 是一个小色块，7 个叠起来就是 21px —— 只收它的内边距，字号不动。 */
.bk .sent{padding:2.5px 0}

.bk .sent .sb .tip{padding:2px 7px;margin-top:2px}


/* 第 23 节歌词 8 行 + 中文对照，量出来超 1.2mm，只收行距。 */
.bk .ext .lyric{line-height:1.58}


/* 第 25 节抄写页差 2.0mm。
   ★ 这里**不许动 .hl**（四线三格的行高）—— 孩子写字的手部空间不能压，
   31px 已经是下限。所以从 .hand 的外框内边距里取：3 个手写框 × 2px ≈ 1.6mm。 */
.bk .hand{padding:6px 9px;margin-top:5px}


/* ==========================================================================
   ★★★ 满版出血层（2026-10-26）—— 照《语法精讲 Book1（印刷版）》的口径
   ==========================================================================

   ## 杨老师原话
   「现在的字体内容太接近边缘了，完全不行！你参考这本书的做法。」

   ## 量出来的真相（`_margins.py`，两本都是 A4 595×841.9pt）

   | | 底色块 | 文字离纸边 |
   |---|---|---|
   | 语法精讲 | 0 → 210mm（满版出血） | 左 11.0 / 右 11.1 / 上 14.0 |
   | 本册旧版 | 15.1 → 195.3mm（卡片浮在白纸上） | 左 15.1 / 右 15.0 |

   ⇒ 本册边距其实比语法书**还宽 4mm**，但它多了一条「卡片边」。
     文字紧贴那条边，眼睛读到的不是「离纸边 15mm」，而是
     「贴着色块边、快掉出去了」。**病根是卡片感，不是边距小。**

   ## 所以：取消卡片，不是加边距
   `@page` margin 归零 → `.page` 自己就是整张纸（210×297mm），米色铺到纸边；
   文字靠 padding 收回版心：**左右 16mm**（比语法书的 11mm 更宽，
   儿童书要给孩子留手写余地），上 16mm，下 6mm（页脚位）。

   ## 两条硬约束
   1. `.page` 的 min-height 必须 ≤ 296mm（297 留 1mm 安全余量）。
      写成 297mm 会叠上 1px 边界，挤出一个**只有页脚的空白页**。
   2. 底色要出血到纸边，**不能**再给 body 加 padding/margin —— 那会把卡片又缩回来。
   ========================================================================== */


/* ==========================================================================
   web 增量层 —— 课本原样式是 A4 打印用的，这里改成可流动的网页版
   ========================================================================== */

.bk{
  --paper:#FFFCF6; --card:#FFFFFF; --ink:#1E2A31; --ink-soft:#465661;
  --grey:#7B8892; --zh:#9E9890; --line:#E7E0D2; --line-soft:#F1ECE1;
  --accent:#1B5E57; --tint:#E8F1EE; --tline:#C3DBD5; --adeep:#0E3B37;
  --gold:#B98A2E; --gold-soft:#F6EEDC; --coral:#C9502F; --coral-soft:#FBEBE5;
  --plum:#6E5A93; --plum-soft:#F0ECF6; --sky:#2A6F97; --sky-soft:#E8F1F6;
  --leaf:#3F7A45; --leaf-soft:#EBF3EC;
  --display:Georgia,"Times New Roman","Songti SC",serif;
  --body:"Segoe UI","Trebuchet MS","Microsoft YaHei",sans-serif;
  --kid:"Trebuchet MS","Segoe UI",Verdana,sans-serif;
  --ipa:"Charis SIL","Doulos SIL","Gentium Plus","Lucida Sans Unicode",
        "Segoe UI","DejaVu Sans",Georgia,serif;
  --zhf:"Microsoft YaHei","PingFang SC","Hiragino Sans GB",sans-serif;

  background:var(--paper); color:var(--ink);
  font-family:var(--body); font-size:15.5px; line-height:1.74;
  -webkit-font-smoothing:antialiased;
  padding:26px 30px 40px; border-radius:14px;
}
.bk *{box-sizing:border-box}
.bk h1,.bk h2,.bk h3,.bk h4{
  font-family:var(--display); color:var(--adeep); margin:0; line-height:1.25;}
.bk p{margin:0 0 10px}
.bk img{max-width:100%;height:auto}
.bk table{border-collapse:collapse}

/* 固定高度一律解除 —— 网页高度由内容决定 */
.bk .page,.bk .cover,.bk .imprint,.bk .fm{
  min-height:0 !important; width:auto !important; padding:0 !important;}

/* 两栏/三栏在小屏折成一栏 */
@media (max-width:860px){
  .bk{padding:18px 16px 30px;font-size:15px}
  .bk .two,.bk .three{grid-template-columns:1fr !important}
  .bk .sound-grid{grid-template-columns:1fr 1fr !important}
  .bk .read{grid-template-columns:1fr !important}
  .bk .qa-pair{grid-template-columns:1fr !important}
  .bk .day{grid-template-columns:1fr !important}
  .bk .wcard{grid-template-columns:1fr 1fr !important}
}

/* ==========================================================================
   节标题 —— 课本的 .sec 已由网页模板渲染，这里只给「网页版标题」上样式
   ========================================================================== */
.bk-sec{ margin:0 0 30px; }
.bk-sec:last-child{ margin-bottom:0; }

.bk-sec-head{
  display:flex; align-items:flex-start; gap:14px;
  padding:0 0 13px; margin:0 0 18px;
  border-bottom:2px solid var(--line);
}
.bk-sec-no{
  flex:0 0 auto; width:46px; height:46px; border-radius:13px;
  display:grid; place-items:center;
  font-family:var(--display); font-size:17px; font-weight:700; letter-spacing:.02em;
  color:#fff; background:linear-gradient(150deg,#1B5E57,#0E3B37);
  box-shadow:0 3px 10px rgba(14,59,55,.20);
}
.bk-sec-tt{ flex:1 1 auto; min-width:0; }
.bk-sec-tt h3{
  font-size:20.5px; letter-spacing:.1px; color:var(--adeep); margin:0 0 3px;
}
.bk-sec-tt .bk-sec-en{
  display:block; font-family:var(--display); font-size:11px;
  letter-spacing:.16em; text-transform:uppercase; color:var(--grey); font-weight:700;
}
.bk-sec-tt .bk-sec-zh{
  display:block; font-family:var(--zhf); font-size:12.5px; color:var(--zh);
  margin-top:2px; letter-spacing:.2px;
}
