/* ===== 课本研读（PDF 注释阅读器） ===== */
/* 右侧研读工作区语义色：左侧 PDF 为白/浅灰纸张，右侧工作区用极浅灰区分，
   输入框与独立卡片回到白色，形成「浅灰工作区 + 白色交互面」的层次。 */
.tb-body {
  --tb-side-bg: #f4f6f8;
  --tb-side-bg-soft: #eceff3;
  --tb-side-text: #26313d;
  --tb-side-text-2: #566576;
  --tb-side-text-3: #778493;
  --tb-side-border: #dde3e9;
  margin: 0;
  height: 100vh;
  height: 100dvh;
  overflow: hidden;
  display: flex;
  flex-direction: column;
}

/* ===== 阅读模式：沉浸（默认）/ 标准 =====
   沉浸：隐藏网站全局导航，显示紧凑教材标题栏，教材与 AI 双栏占满视口；
   标准：恢复全局导航（标题栏随之隐藏，避免两条标题重复）。 */
body[data-tb-mode="immersive"] #shell-root .app-frame-inline { display: none; }
.tb-titlebar {
  flex: none;
  display: flex;
  align-items: center;
  gap: 12px;
  height: 44px;
  padding: 0 12px;
  background: var(--color-surface);
  border-bottom: 1px solid var(--color-border);
}
body[data-tb-mode="standard"] .tb-titlebar { display: none; }
.tb-titlebar-home {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 5px 8px;
  border-radius: 8px;
  color: var(--color-text-secondary);
  font-size: 13px;
  line-height: 1;
  text-decoration: none;
  white-space: nowrap;
}
.tb-titlebar-home:hover { color: var(--color-primary); background: color-mix(in srgb, var(--color-primary) 8%, transparent); }
.tb-titlebar-home svg { width: 15px; height: 15px; }
.tb-titlebar-crumb {
  margin: 0;
  min-width: 0;
  font-size: 14px;
  font-weight: 650;
  color: var(--color-text);
  line-height: 1.4;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.tb-topbar {
  flex: none;
  height: 48px;
  display: flex;
  align-items: center;
  gap: 20px;
  padding: 0 16px;
  background: var(--color-surface);
  border-bottom: 1px solid var(--color-border);
}
.tb-top-brand { display: flex; align-items: center; gap: 8px; font-weight: 800; font-size: 16px; color: var(--color-text); text-decoration: none; }
.tb-top-brand img { width: 26px; height: 26px; border-radius: 7px; }
.tb-top-nav { flex: 1; display: flex; gap: 4px; }
.tb-top-nav a { padding: 6px 13px; border-radius: 8px; font-size: 13px; color: var(--color-text-secondary); text-decoration: none; }
.tb-top-nav a:hover { color: var(--color-primary); background: color-mix(in srgb, var(--color-primary) 8%, transparent); }
.tb-top-nav a.on { color: #fff; background: var(--color-primary); }
.tb-top-settings { padding: 6px 14px; border-radius: 8px; font-size: 13px; color: var(--color-text-secondary); text-decoration: none; border: 1px solid var(--color-border); }
.tb-top-settings:hover { color: var(--color-primary); border-color: var(--color-primary); }
.tb-app {
  display: grid;
  grid-template-columns: minmax(0, auto) minmax(0, 1fr) minmax(0, auto);
  position: relative;   /* 目录悬停浮层（.tb-toc.preview）的定位上下文 */
  min-height: 0;
  flex: 1;
  background: var(--color-background);
  overflow: hidden;
}
/* 四个直接子元素钉进固定网格槽位：目录转悬停浮层（absolute 退出流）时，
   其余子元素不会因 auto-placement 前移一列而错位（曾致研读面板被挤出屏幕） */
.tb-reader { grid-column: 2; }
.tb-panel-resizer { grid-column: 3; }
.tb-notes { grid-column: 4; }

/* 左侧目录 */
.tb-toc {
  width: 240px;
  min-width: 0;
  display: flex;
  flex-direction: column;
  border-right: 1px solid var(--color-border);
  background: var(--color-surface);
  transition: width .25s;
  overflow: hidden;
}
.tb-toc.collapsed {
  width: 0;
  border-right: 0;
}
/* ===== 目录悬停浮层（preview 态）：浮在阅读区上方，不挤压教材、不触发 PDF 重排 =====
   鼠标悬停工具栏目录按钮时由 JS 挂 .preview；点击固定则回到左侧正常布局列（移除 .collapsed）。 */
.tb-toc.preview {
  position: absolute;
  left: 0;
  top: 44px;             /* 工具栏高度，浮层从工具栏下方滑出，不遮挡目录按钮 */
  bottom: 0;
  z-index: 65;           /* 高于工具栏(60)/侧栏(50)，低于选区浮层(70)与弹窗(80) */
  width: min(300px, 82vw);
  height: auto;          /* 覆盖窄屏媒体查询的 100vh，避免超出视口 */
  border-right: 1px solid var(--color-border);
  border-radius: 0 var(--radius-overlay) var(--radius-overlay) 0;
  box-shadow: var(--shadow-overlay);
  transition: none;      /* 浮层宽度不参与布局，停用 width 过渡 */
  animation: tb-toc-slide-in .2s ease-out;
}
/* 滑出收场：JS 挂 .preview-out 播完动画后再真正收起（期间禁用指针事件防误触） */
.tb-toc.preview-out {
  animation: tb-toc-slide-out .18s ease-in forwards;
  pointer-events: none;
}
/* 落定收起瞬间禁用宽度过渡：否则「浮层 300px → 布局 0px」会播放一段幻影宽度动画，
   把工具栏按钮推离静止的指针再送回，触发回弹式重新浮出 */
.tb-toc.no-anim { transition: none !important; }
@keyframes tb-toc-slide-in {
  from { transform: translateX(-16px); opacity: 0; }
}
@keyframes tb-toc-slide-out {
  to { transform: translateX(-16px); opacity: 0; }
}
@media (prefers-reduced-motion: reduce) {
  .tb-toc.preview, .tb-toc.preview-out { animation: none; }
}
.tb-toc-head {
  flex: none;
  display: flex;
  gap: 8px;
  padding: 12px;
  align-items: center;
}
.tb-book-select { flex: 1; min-width: 0; padding: 8px 10px; border: 1px solid var(--color-border); border-radius: 9px; background: var(--color-background); color: var(--color-text); font-size: 13px; }
.tb-collapse, .tb-notes-toggle, .tb-notes-show { flex: none; width: 32px; height: 32px; display: grid; place-items: center; border: 1px solid var(--color-border); border-radius: 8px; background: transparent; color: var(--color-text-secondary); cursor: pointer; }
.tb-collapse svg, .tb-notes-toggle svg, .tb-notes-show svg { width: 17px; height: 17px; }
.tb-collapse:hover, .tb-notes-toggle:hover, .tb-notes-show:hover { color: var(--color-primary); border-color: var(--color-primary); }
.tb-toc-search {
  flex: none;
  padding: 0 12px 10px;
}
.tb-toc-search input { width: 100%; padding: 8px 11px; border: 1px solid var(--color-border); border-radius: 9px; background: var(--color-background); color: var(--color-text); font-size: 13px; }
.tb-toc-tree {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  padding: 2px 6px 16px;
}
.toc-item { padding: 7px 12px; font-size: 13px; line-height: 1.4; color: var(--color-text-secondary); border-radius: 8px; cursor: pointer; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.toc-item:hover { background: color-mix(in srgb, var(--color-primary) 9%, transparent); color: var(--color-primary); }
/* 当前所在章节：浅红底 + 左侧红色细标记 */
.toc-item.active { background: color-mix(in srgb, var(--color-primary) 10%, transparent); color: var(--color-primary); font-weight: 600; box-shadow: inset 2px 0 0 var(--color-primary); }
.toc-muted { color: var(--color-text-tertiary, #9aa3b2); cursor: default; font-size: 13px; }
.toc-muted:hover { background: transparent; color: var(--color-text-tertiary, #9aa3b2); }
/* AI 面板收起后的贴边悬浮入口：白色胶囊（左侧 14px 圆角、右缘与容器齐平），默认只显示
   品牌红 AI 图标，悬停/键盘聚焦时向左扩展露出「AI研读」。固定定位不入 flex 流，宽度不被
   压缩；文案用 nowrap 单行整体显隐，绝无逐字换行的竖排。z-index 55：高于教材内容
   （lead-svg 45 / 窄屏侧栏 50），低于工具栏(60)、目录浮层(65)、选区浮层(72)、弹窗(80)——
   不遮挡任何下拉与弹窗。品牌红走 --color-primary 令牌（当前主题值 #b40000，与全站一致）。 */
.tb-notes-show {
  position: fixed;
  right: 0;
  top: 110px;
  z-index: 55;
  flex: none;
  display: inline-flex;
  align-items: center;
  gap: 7px;
  width: 48px;
  height: 60px;
  padding: 0 8px 0 12px;
  box-sizing: border-box;
  border: 1px solid color-mix(in srgb, var(--color-primary) 20%, var(--color-border, #e3e6ea));
  border-right: 0;
  /* 14px 走登记例外令牌 --radius-frame（tokens.css），避免离档大圆角字面量 */
  border-radius: var(--radius-frame) 0 0 var(--radius-frame);
  background: #fff;
  color: var(--color-primary);
  box-shadow: 0 2px 10px rgba(15, 18, 24, 0.08);
  cursor: pointer;
  white-space: nowrap;
  overflow: hidden;
  transition: width 0.18s ease, border-color 0.18s ease;
}
.tb-notes-show[hidden] { display: none; }
.tb-notes-show svg { width: 20px; height: 20px; flex: none; }
.tb-notes-show .tb-notes-show-label { flex: none; font-size: 14px; font-weight: 600; letter-spacing: 1px; opacity: 0; transition: opacity 0.15s ease; }
.tb-notes-show:hover, .tb-notes-show:focus-visible { width: 118px; border-color: var(--color-primary); }
.tb-notes-show:hover .tb-notes-show-label, .tb-notes-show:focus-visible .tb-notes-show-label { opacity: 1; }
.tb-notes-show:focus-visible { outline: 2px solid var(--color-primary); outline-offset: 2px; }
/* 面板收起后同时收回 5px 拖宽条：收起态不留任何窄侧栏，拖宽条也不再可交互 */
.tb-app:has(#tbNotes.collapsed) .tb-panel-resizer { width: 0; min-width: 0; }
@media (prefers-reduced-motion: reduce) {
  .tb-notes-show, .tb-notes-show .tb-notes-show-label { transition: none; }
}
/* 窄屏：工具栏可能折行成多行，悬浮入口改贴右下角，避开顶部工具区 */
@media (max-width: 820px) {
  .tb-notes-show { top: auto; bottom: 24px; }
}

/* 中间阅读 */
.tb-reader {
  min-width: 0;
  min-height: 0;
  display: grid;
  grid-template-rows: auto minmax(0, 1fr);
}
/* ===== PDF 工具栏（44px 固定高；按钮无框、悬停浅色） ===== */
.tb-toolbar {
  position: relative;
  display: flex;
  align-items: center;
  gap: 8px;
  flex: none;
  min-width: 0;
  max-width: 100%;
  height: 44px;
  padding: 0 12px;
  border-bottom: 1px solid var(--color-border);
  background: var(--color-surface);
}
.tb-tb-group { display: flex; align-items: center; gap: 8px; min-width: 0; }
.tb-tb-aux { margin-left: auto; }
.tb-tb-sep { flex: none; width: 1px; height: 18px; background: var(--color-border); }
.tb-tb-btn { width: 32px; height: 32px; flex: none; display: grid; place-items: center; padding: 0; border: 0; border-radius: 8px; background: transparent; color: var(--color-text-secondary); cursor: pointer; transition: background .15s, color .15s; }
.tb-tb-btn svg { width: 17px; height: 17px; }
.tb-tb-btn:hover:not(:disabled) { color: var(--color-primary); background: color-mix(in srgb, var(--color-primary) 9%, transparent); }
.tb-tb-btn:focus-visible { outline: 2px solid var(--color-primary); outline-offset: 1px; }
.tb-tb-btn:disabled { opacity: .4; cursor: not-allowed; }
.tb-tb-btn.active, .tb-tb-btn[aria-pressed="true"] { color: var(--color-primary); background: color-mix(in srgb, var(--color-primary) 12%, transparent); }
/* 阅读模式切换（标准/沉浸/全屏）：文字分段控件 */
.tb-mode-seg { display: flex; align-items: center; gap: 2px; flex: none; padding: 2px; border: 1px solid var(--color-border); border-radius: 8px; }
.tb-mode-seg button { border: 0; background: none; padding: 4px 12px; border-radius: 8px; font-size: 13px; line-height: 1.4; color: var(--color-text-secondary); cursor: pointer; white-space: nowrap; }
.tb-mode-seg button:hover { color: var(--color-primary); }
.tb-mode-seg button.active { color: var(--color-primary); background: color-mix(in srgb, var(--color-primary) 10%, transparent); font-weight: 600; }
/* 页码定位（原底部翻页条上移进工具栏，省出阅读高度） */
.tb-tb-pager { display: flex; align-items: center; gap: 2px; flex: none; }
.tb-page-ind { display: flex; align-items: center; gap: 3px; font-size: 13px; color: var(--color-text-secondary); white-space: nowrap; }
.tb-page-ind input { width: 38px; text-align: center; padding: 4px 2px; border: 1px solid var(--color-border); border-radius: 8px; font-size: 13px; color: var(--color-text); background: var(--color-surface); }
.tb-sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
.tb-zoom-label { font-size: 13px; color: var(--color-text-secondary); min-width: 44px; text-align: center; font-variant-numeric: tabular-nums; }
.tb-tb-hint { font-size: 13px; color: var(--color-text-tertiary, #9aa3b2); }
/* 加载提示浮出化：不参与工具栏占位（慢网加载中也不把按钮挤换行），居中浮在工具栏上，完成后消失 */
.tb-toolbar { position: relative; }
.tb-toolbar .tb-tb-hint { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); max-width: 60%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; background: var(--color-surface); padding: 0 8px; pointer-events: none; }
.tb-scroll {
  position: relative;
  min-height: 0;
  overflow-x: hidden;
  overflow-y: auto;
  overscroll-behavior: contain;
  background: #e9ebf0;
  padding: 20px;
  /* AI 研读·教材阅读状态描边色（薄荷绿），仅供 .tb-reading-on 使用 */
  --tb-reading: #21e68a;
}

/* ===== AI 研读 · 教材阅读状态（绑定真实研读请求生命周期） ===== */
/* outline 不占布局：出现/消失不引起 PDF 内容跳动 */
.tb-scroll.tb-reading-on {
  outline: 2px solid var(--tb-reading);
  outline-offset: -2px;
  animation: tb-reading-breath 2.4s ease-in-out infinite;
}
@keyframes tb-reading-breath {
  0%, 100% { outline-color: var(--tb-reading); }
  50% { outline-color: color-mix(in srgb, var(--tb-reading) 42%, transparent); }
}
@media (prefers-reduced-motion: reduce) {
  .tb-scroll.tb-reading-on { animation: none; }
}
.tb-reading-badge {
  /* sticky 零高行：作为 #tbScroll 首个子节点，钉在可视区顶部（随滚动保持可见），自身不占布局 */
  position: sticky;
  top: 10px;
  z-index: 30;
  height: 0;
  pointer-events: none;
}
.tb-reading-chip {
  position: absolute;
  top: 0;
  right: 0;
  display: none;
  align-items: center;
  gap: 6px;
  max-width: min(70%, 360px);
  padding: 4px 10px;
  border: 1px solid var(--color-border);
  border-radius: 6px;
  background: var(--color-surface);
  font-size: 12px;
  line-height: 1.5;
  color: var(--color-text-secondary);
}
.tb-reading-badge.on .tb-reading-chip { display: flex; border-color: color-mix(in srgb, var(--tb-reading) 45%, var(--color-border)); color: color-mix(in srgb, var(--tb-reading) 40%, var(--color-text-primary)); }
.tb-reading-badge.on .tb-reading-chip svg { color: color-mix(in srgb, var(--tb-reading) 55%, var(--color-text-primary)); }
.tb-reading-badge.ok .tb-reading-chip { display: flex; }
.tb-reading-badge.err .tb-reading-chip { display: flex; border-color: color-mix(in srgb, #d64545 45%, var(--color-border)); color: #b03636; }
.tb-reading-badge.err .tb-reading-chip svg { color: #b03636; }
.tb-reading-chip span { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

/* 加载进度浮层 */
.tb-load-overlay {
  position: absolute;
  inset: 0;
  z-index: 40;
  display: grid;
  place-items: center;
  background: color-mix(in srgb, var(--color-background, #f4f5f7) 72%, transparent);
  backdrop-filter: blur(2px);
}
.tb-load-card {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 10px;
  min-width: 240px;
  max-width: 78%;
  padding: 22px 28px;
  border: 1px solid var(--color-border);
  border-radius: 8px;
  background: var(--color-surface);
  box-shadow: 0 12px 40px rgba(0, 0, 0, .14);
}
.tb-load-spinner {
  width: 26px;
  height: 26px;
  border-radius: 8px;
  border: 3px solid color-mix(in srgb, var(--color-primary) 22%, transparent);
  border-top-color: var(--color-primary);
  animation: tbSpin .8s linear infinite;
}
@keyframes tbSpin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .tb-load-spinner { animation-duration: 2.4s; } }
.tb-load-title { font-size: 14px; font-weight: 650; color: var(--color-text); }
.tb-load-bar {
  width: 100%;
  height: 6px;
  border-radius: 6px;
  overflow: hidden;
  background: color-mix(in srgb, var(--color-border) 70%, transparent);
}
.tb-load-bar-fill {
  height: 100%;
  width: 0%;
  border-radius: 6px;
  background: var(--color-primary);
  transition: width .25s ease;
}
.tb-load-bar-fill.indeterminate {
  width: 100%;
  background: linear-gradient(90deg, transparent, var(--color-primary), transparent); /* indeterminate loader：不确定进度滑动光斑 */
  background-size: 40% 100%;
  background-repeat: no-repeat;
  animation: tbSlide 1.1s ease-in-out infinite;
}
@keyframes tbSlide { from { background-position: -40% 0; } to { background-position: 140% 0; } }
.tb-load-sub { font-size: 12px; color: var(--color-text-tertiary, #9aa3b2); font-variant-numeric: tabular-nums; }
.tb-load-pct { font-size: 24px; font-weight: 750; line-height: 1; color: var(--color-primary); font-variant-numeric: tabular-nums; }
.tb-load-pct[hidden] { display: none; }
.tb-load-retry {
  margin-top: 6px;
  padding: 9px 26px;
  border: 0;
  border-radius: 8px;
  background: var(--color-primary);
  color: #fff;
  font-size: 14px;
  font-weight: 600;
  cursor: pointer;
}
.tb-load-retry:hover { filter: brightness(1.1); }
.tb-load-retry[hidden] { display: none; }
.tb-load-overlay.error .tb-load-spinner,
.tb-load-overlay.error .tb-load-bar { display: none; }
.tb-load-overlay[hidden] { display: none; }
.tb-scroll-inner {
  width: 100%;
  display: flex;
  justify-content: center;
  align-items: flex-start;
  min-height: 100%;
}
/* 朗读高亮定位层（沿用旧容器 id；数字锚点已取消，本层只服务朗读高亮） */
.tb-anchor-layer { position: absolute; inset: 0; pointer-events: none; }
.tb-page-wrap {
  position: relative;
  background: #fff;
  box-shadow: 0 14px 44px rgba(0,0,0,.35);
}
#pdfCanvas { display: block; }
/* 标注开关关闭时：课本上不显示批注序号徽标与虚线引线（正文与朗读高亮不受影响） */

/* 翻页条：纯图标 + 页码，压低固定占比（整条约 41px） */
.tb-pager { flex: none; display: flex; align-items: center; justify-content: center; gap: 10px; min-width: 0; max-width: 100%; padding: 4px 12px; border-top: 1px solid var(--color-border); background: var(--color-surface); }
.tb-page-btn { width: 32px; height: 32px; display: grid; place-items: center; padding: 0; border: 0; border-radius: 8px; background: transparent; color: var(--color-text-secondary); cursor: pointer; }
.tb-page-btn svg { width: 17px; height: 17px; }
.tb-page-btn:hover:not(:disabled) { color: var(--color-primary); background: color-mix(in srgb, var(--color-primary) 9%, transparent); }
.tb-page-btn:disabled { opacity: .45; cursor: not-allowed; }
.tb-page-ind { display: flex; align-items: center; gap: 5px; font-size: 13px; color: var(--color-text-secondary); font-variant-numeric: tabular-nums; }
.tb-page-ind input { width: 44px; padding: 5px 4px; text-align: center; border: 1px solid var(--color-border); border-radius: 8px; background: var(--color-surface); color: var(--color-text); font-size: 13px; }
.tb-page-ind input:focus { outline: none; border-color: var(--color-primary); }

/* 右侧研读工作区：极浅灰背景，与左侧 PDF 纸张形成轻微明度差 */
.tb-notes { flex: none; width: 348px; display: flex; flex-direction: column; border-left: 1px solid var(--tb-side-border); background: var(--tb-side-bg); transition: width .25s; overflow: hidden; }
.tb-notes.collapsed { width: 0; border-left: 0; }
.tb-notes-head { display: flex; align-items: center; justify-content: space-between; padding: 13px 16px; }
.tb-notes-head h3 { margin: 0; font-size: 16px; }
.tb-notes-body { flex: 1; overflow-y: auto; padding: 14px 14px 20px; background: transparent; }
.tb-notes-empty { font-size: 13px; line-height: 1.8; color: var(--tb-side-text-3); padding: 26px 6px; }
.tb-note-p { margin: 0; font-size: 13px; line-height: 1.85; color: var(--color-text-secondary); }

/* ===== 教学研读卡（StudyCard 卡片组） ===== */
/* 顶部标签栏：与工作区背景融合，只用细分割线分层；压低高度、弱化边框存在感 */
.tb-notes-tabs { flex: none; display: flex; gap: 4px; align-items: center; padding: 3px 8px 0; background: var(--tb-side-bg); border-bottom: 1px solid var(--tb-side-border); }
.tb-notes-tab { flex: 1; min-width: 0; padding: 6px 0 7px; border: 0; border-bottom: 2px solid transparent; background: transparent; color: var(--tb-side-text-2); font-size: 13px; cursor: pointer; white-space: nowrap; }
.tb-notes-tab:hover { color: var(--color-primary); }
.tb-notes-tab.active { color: var(--color-primary); border-bottom-color: var(--color-primary); font-weight: 600; }
.tb-tabs-acts { flex: none; display: flex; align-items: center; gap: 4px; margin-left: 2px; align-self: flex-start; }
.tb-tabs-acts .tb-notes-toggle { border: 0; width: 28px; height: 28px; }

.tb-study-head { padding: 13px 4px 4px; }
.tb-study-scope { font-size: 14px; font-weight: 700; color: var(--color-text); }
.tb-study-meta { margin-top: 2px; font-size: 12px; color: var(--color-text-tertiary, #9aa3b2); }
.tb-study-library-link { display: inline-block; margin-top: 8px; color: var(--color-primary); font-size: 12px; text-decoration: none; }
.tb-study-library-link:hover { text-decoration: underline; }
/* 研读卡分区：备课卡 / 本页批注 / 课堂讲稿 —— 用小标题 + 分隔线分层，不叠卡片 */
.tb-study-part { margin-top: 24px; padding-top: 16px; border-top: 1px solid var(--color-border); }
.tb-study-part:first-child { margin-top: 0; padding-top: 0; border-top: 0; }
.tb-study-part[hidden] { display: none; }
.tb-study-part-cap { font-size: 13px; font-weight: 650; color: var(--color-text); margin-bottom: 12px; }
.tb-study-part .tb-deck { margin-top: 0; }
/* 「本页批注」在研读卡内作为一级分区，不再自带上边框 */
.tb-study-extra { margin: 20px 0 8px; padding-top: 13px; border-top: 1px solid var(--color-border); }
.tb-study-extra > summary { color: var(--color-primary); cursor: pointer; font-weight: 650; font-size: 13px; line-height: 1.5; }
.tb-study-extra-note { color: var(--color-text-secondary); font-size: 12px; line-height: 1.6; margin: 9px 0; }
.tb-card-provenance p { font-size: 11px; color: var(--color-text-tertiary, #9aa3b2); }

.tb-deck { display: flex; flex-direction: column; gap: 11px; margin-top: 10px; }
/* 研读卡分区：在浅灰工作区上用白色卡片承载独立条目 */
.tb-card { border: 1px solid var(--tb-side-border); border-radius: 8px; background: #fff; overflow: hidden; }
.tb-card.open { border-color: color-mix(in srgb, var(--color-primary) 40%, var(--tb-side-border)); }
.tb-card-head { display: flex; align-items: center; gap: 8px; padding: 11px 12px; cursor: pointer; user-select: none; }
.tb-card-head:hover { background: color-mix(in srgb, var(--color-primary) 7%, transparent); }
.tb-card-id { display: none; }
.tb-card-type { flex: none; padding: 3px 9px; border-radius: 7px; font-size: 12px; font-weight: 700; border: 1px solid transparent; }
.tb-card-type.ctype-concept { color: #f59e0b; background: color-mix(in srgb, #f59e0b 16%, transparent); border-color: color-mix(in srgb, #f59e0b 38%, transparent); }
.tb-card-type.ctype-logic { color: var(--color-ai-secondary); background: color-mix(in srgb, var(--color-ai-primary) 18%, transparent); border-color: color-mix(in srgb, var(--color-ai-primary) 40%, transparent); }
.tb-card-type.ctype-mixup { color: #fb7185; background: color-mix(in srgb, #f43f5e 16%, transparent); border-color: color-mix(in srgb, #f43f5e 38%, transparent); }
.tb-card-type.ctype-column { color: #2dd4bf; background: color-mix(in srgb, #14b8a6 16%, transparent); border-color: color-mix(in srgb, #14b8a6 38%, transparent); }
.tb-card-type.ctype-advice { color: #a78bfa; background: color-mix(in srgb, #8b5cf6 16%, transparent); border-color: color-mix(in srgb, #8b5cf6 38%, transparent); }
.tb-card-type.ctype-curric { color: #34d399; background: color-mix(in srgb, #10b981 16%, transparent); border-color: color-mix(in srgb, #10b981 38%, transparent); }
.tb-card-type.ctype-other { color: var(--color-text-secondary); background: var(--color-surface); border-color: var(--color-border); }
.tb-card-tit { flex: 1; min-width: 0; font-size: 13px; font-weight: 650; color: var(--color-text); line-height: 1.35; }
.tb-card-review { flex: none; font-size: 11px; padding: 2px 7px; border-radius: 6px; color: var(--color-text-tertiary, #9aa3b2); background: var(--color-surface); border: 1px solid var(--color-border); }
.tb-card-review.ok { color: #34d399; border-color: color-mix(in srgb, #10b981 45%, transparent); }
.tb-card-chev { flex: none; color: var(--color-text-tertiary, #9aa3b2); font-size: 12px; transition: transform .15s; }
.tb-card.open .tb-card-chev { transform: rotate(180deg); }
.tb-card-summary { padding: 0 13px 12px; font-size: 13px; line-height: 1.7; color: var(--color-text-secondary); }
.tb-card-detail { display: none; padding: 4px 13px 14px; border-top: 1px dashed var(--color-border); }
.tb-card.open .tb-card-detail { display: block; }
.tb-card-sec { margin-top: 10px; }
.tb-card-sec b { display: block; font-size: 12px; margin-bottom: 3px; color: var(--color-text); }
.tb-card-sec p { margin: 0; font-size: 12px; line-height: 1.75; color: var(--color-text-secondary); }
.tb-card-src, .tb-card-sec ul { margin: 0; padding-left: 1.1em; font-size: 12px; line-height: 1.7; color: var(--color-text-secondary); }
.tb-card-src-id { font-weight: 700; color: var(--color-text); }
.tb-card-rel { color: var(--color-text-tertiary, #9aa3b2); }

.tb-deck-pager { display: flex; align-items: center; justify-content: center; gap: 12px; margin: 14px 0 6px; }
.tb-deck-pager button { padding: 7px 15px; border: 1px solid var(--color-border); border-radius: 9px; background: var(--color-background); color: var(--color-text); font-size: 13px; cursor: pointer; }
.tb-deck-pager button:hover:not(:disabled) { color: var(--color-primary); border-color: var(--color-primary); }
.tb-deck-pager button:disabled { opacity: .42; cursor: not-allowed; }
.tb-deck-ind { font-size: 12px; color: var(--color-text-tertiary, #9aa3b2); font-variant-numeric: tabular-nums; }

.tb-sec { margin-top: 18px; border: none; border-radius: 0; background: transparent; }
.tb-sec-toggle { display: flex; align-items: center; justify-content: space-between; padding: 9px 0 8px; border-bottom: 1px solid color-mix(in srgb, var(--color-border) 60%, transparent); font-size: 13px; font-weight: 650; color: var(--color-text); cursor: pointer; user-select: none; }
.tb-sec-toggle:hover { background: color-mix(in srgb, var(--color-primary) 7%, transparent); }
.tb-sec-chev { color: var(--color-text-tertiary, #9aa3b2); font-size: 12px; transition: transform .15s; }
.tb-sec.open .tb-sec-chev { transform: rotate(180deg); }
.tb-sec > ul, .tb-sec > .tb-ref { display: none; padding: 4px 0 12px; margin: 0; }
.tb-sec.open > ul, .tb-sec.open > .tb-ref { display: block; }
.tb-src-list li, .tb-dt-list li { list-style: none; margin-bottom: 11px; font-size: 12.8px; line-height: 1.7; color: var(--color-text-secondary); }
.tb-src-list { padding-left: 0 !important; }
.tb-src-status { font-size: 11px; padding: 1px 7px; border-radius: 6px; margin-right: 6px; font-weight: 600; }
.tb-src-status.s-已读取 { color: #34d399; background: color-mix(in srgb, #10b981 16%, transparent); }
.tb-src-status.s-仅目录 { color: #fbbf24; background: color-mix(in srgb, #f59e0b 16%, transparent); }
.tb-src-status.s-未读取 { color: #fb7185; background: color-mix(in srgb, #f43f5e 16%, transparent); }
.tb-src-status.s-待核对 { color: #94a3b8; background: color-mix(in srgb, #64748b 18%, transparent); }
.tb-src-loc { color: var(--color-text-tertiary, #9aa3b2); }
.tb-src-note { margin: 3px 0 0; font-size: 11.8px; line-height: 1.6; color: var(--color-text-tertiary, #9aa3b2); }
.tb-dt-list { padding-left: 0 !important; counter-reset: dt; }
.tb-dt-basis { margin: 3px 0 0; font-size: 11.8px; color: var(--color-text-tertiary, #9aa3b2); }
.tb-dt-cards { display: inline-block; margin-top: 3px; font-size: 12px; color: var(--color-primary); }
.tb-ref-sec { margin-bottom: 10px; }
.tb-ref-sec b, .tb-ref > p > b { color: var(--color-text); }
.tb-ref p { margin: 0 0 8px; font-size: 12.8px; line-height: 1.78; color: var(--color-text-secondary); }

/* 引线 */
.tb-lead-svg { position: absolute; inset: 0; pointer-events: none; z-index: 45; overflow: visible; }
.tb-lead-path { stroke: var(--color-primary); stroke-width: 2; stroke-dasharray: 7 5; fill: none; animation: tbDash 1s linear infinite; }
@keyframes tbDash { to { stroke-dashoffset: -12; } }
@media (prefers-reduced-motion: reduce) { .tb-lead-path { animation: none; } }

/* 工具栏「更多」菜单：收纳低频操作（朗读 / 默写 / 缓存课本） */
.tb-more { position: relative; }
.tb-more .tb-icon-btn.live { color: var(--color-primary); border-color: color-mix(in srgb, var(--color-primary) 45%, transparent); }
.tb-tb-menu {
  position: absolute;
  right: 0;
  top: calc(100% + 6px);
  z-index: 70;
  min-width: 172px;
  padding: 4px;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-overlay);
  background: var(--color-surface);
  box-shadow: var(--shadow-overlay);
  display: flex;
  flex-direction: column;
}
.tb-tb-menu[hidden] { display: none; }
.tb-menu-item { display: flex; align-items: center; gap: 8px; border: 0; background: none; padding: 8px 10px; border-radius: 6px; font-size: 13px; color: var(--color-text); cursor: pointer; text-align: left; white-space: nowrap; }
.tb-menu-item svg { flex: none; color: var(--color-text-secondary); }
.tb-menu-item:hover { background: color-mix(in srgb, var(--color-primary) 9%, transparent); color: var(--color-primary); }
.tb-menu-item:hover svg { color: var(--color-primary); }
.tb-menu-item.on { color: var(--color-primary); background: color-mix(in srgb, var(--color-primary) 10%, transparent); }
.tb-menu-item.on svg { color: var(--color-primary); }
.tb-menu-item:disabled { opacity: .55; cursor: wait; }
.tb-menu-sep { height: 1px; margin: 4px 6px; background: var(--color-border); }

/* ===== AI 研读弹出菜单（会话「导出」与单条回复「更多」共用容器与项样式） ===== */
.tb-ai-more { position: relative; display: inline-block; }
/* 容器：宽 250px、轻边框、8px 圆角、适度阴影；展开定位由 popup-position.js 以 fixed 接管
   （测量后写内联样式），此处 absolute 规则仅作无 JS 兜底；max-height 由 JS 依可用空间设置，
   overflow-y 保证菜单内部滚动（选项永不超出可视区） */
.tb-ai-more-menu { position: absolute; bottom: calc(100% + 4px); right: 0; z-index: 50; width: 250px;
  background: var(--color-surface, #fff); border: 1px solid var(--color-border, #e5e7eb); border-radius: var(--radius-overlay, 8px); padding: 4px;
  box-shadow: var(--shadow-overlay, 0 8px 24px rgba(15,18,24,.14)); display: flex; flex-direction: column; overflow-y: auto; }
/* 菜单项：左图标右文字、高 40px、单行不换行、无独立边框、悬停浅灰 */
.tb-ai-menuitem { display: flex; align-items: center; gap: 10px; flex: none; width: 100%; height: 40px; padding: 0 12px;
  border: 0; background: none; border-radius: 8px; font: inherit; font-size: 13px; line-height: 1.4;
  color: var(--tb-side-text, #26313d); cursor: pointer; text-align: left;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.tb-ai-menuitem:hover { background: var(--color-surface-hover, #f3f4f6); }
.tb-ai-menuitem:focus-visible { outline: 2px solid var(--color-primary); outline-offset: -2px; }
.tb-ai-menuitem svg { flex: none; color: var(--tb-side-text-2, #566576); }
.tb-ai-menuitem span { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.tb-ai-menu-sep { flex: none; height: 1px; margin: 4px 8px; background: var(--color-border, #e3e6ea); }

/* 会话级「导出」触发钮定位变体：菜单向左对齐、从按钮下方弹出（fixed 接管后由 JS 写坐标） */
.tb-ai-bar-more { position: relative; display: inline-block; }
.tb-ai-bar-more .tb-ai-more-menu { right: 0; bottom: auto; top: calc(100% + 4px); }
.tb-ai-selrow { flex-direction: row; gap: 10px; align-items: flex-start; }
.tb-ai-sel { display: flex; align-items: center; gap: 6px; font-size: 12px; color: var(--tb-side-text-2, #566576); margin-top: 4px; cursor: pointer; flex-shrink: 0; }
.tb-ai-selbar { display: flex; align-items: center; gap: 8px; padding: 8px 4px; border-top: 1px solid var(--color-border, #e5e7eb); background: #fff; flex-wrap: wrap; }
.tb-ai-selbar button { border: 1px solid var(--color-border, #d9dce1); background: #fff; font-size: 12px; padding: 4px 10px; border-radius: 8px; cursor: pointer; }
.tb-ai-selbar .tb-ai-selbar-export { background: var(--color-primary, #b40000); color: #fff; border-color: var(--color-primary, #b40000); }
.tb-ai-selbar-count { font-size: 12px; color: var(--color-text-secondary, #6b7280); }
.tb-ai-selbar-q { display: inline-flex; align-items: center; gap: 4px; font-size: 12px; color: var(--tb-side-text-2, #566576); cursor: pointer; }
.tb-ai-empty-head { min-width: 0; }
.tb-ai-empty-loc { margin-top: 3px; font-size: 12px; color: var(--color-text-tertiary, #9aa3b2); line-height: 1.6; }
.tb-ai-empty-q { display: flex; flex-direction: column; gap: 6px; margin-top: 12px; }
.tb-ai-empty-q button {
  text-align: left;
  padding: 8px 12px;
  border: 1px solid var(--color-border);
  border-radius: 8px;
  background: var(--color-surface, #fff);
  font-size: 13px;
  color: var(--tb-side-text, #26313d);
  cursor: pointer;
  line-height: 1.5;
}
.tb-ai-empty-q button:hover { border-color: var(--color-primary); color: var(--color-primary); }
.tb-menu-label { font-size: 13px; }
/* 「我的批注」菜单项右侧状态文字 */
.tb-menu-state { margin-left: auto; font-size: 12px; color: var(--color-text-tertiary, #9aa3b2); }

/* ===== 个人教材批注层（教师私有，附着于 PDF 页面，与原文件分离） ===== */
/* 阅读笔记形态（2026-11-01）：阅读态不做卡片——无白底/边框/阴影，只留左侧暖棕金细线，
   楷体正文直接落在纸面上；操作条（拖动手柄 + 编辑/删除）悬停/键盘聚焦/选中时浮出于
   框内右上角（绝对定位浮层，不挤动正文排版）。编辑态才出现轻量输入区。
   批注永远叠在白纸 PDF 上，墨色固定用纸面色、不随站点主题走——色板无对应令牌，
   登记于 scripts/check-styles.mjs COLOR_EXCEPTIONS（--pa-ink / --pa-accent）。
   图层常态 pointer-events:none 让 PDF 正常交互，只在批注框与放置模式时接管指针；
   隐藏开关只改显示，不动数据。内容无内部滚动、不截断文字。 */
.tb-pa-layer {
  position: absolute; inset: 0; z-index: 6; pointer-events: none; overflow: visible;
  --pa-ink: #514534;    /* 批注正文墨色：深棕灰 */
  --pa-accent: #A47732; /* 批注标识：暖棕金（左细线/选中态/拖动反馈） */
}
.tb-pa-layer.hidden { display: none; }
.tb-pa-layer.placing { pointer-events: auto; cursor: crosshair; }

/* —— 阅读态：左侧细线 + 楷体正文，无卡片容器 —— */
.pa-box {
  position: absolute;
  pointer-events: auto;
  background: transparent;
  border-left: 3px solid color-mix(in srgb, var(--pa-accent) 55%, transparent);
  font-family: "KaiTi", "STKaiti", "Kaiti SC", "Noto Serif CJK SC", serif;
  font-size: 16px;
  line-height: 1.6;
  color: var(--pa-ink);
  user-select: none;
}
.pa-box:hover, .pa-box:focus-within { background: color-mix(in srgb, var(--pa-accent) 4%, transparent); z-index: 2; }
.pa-box.selected { border-left-color: var(--pa-accent); }
.pa-box:focus-visible { outline: 2px solid color-mix(in srgb, var(--pa-accent) 60%, transparent); outline-offset: 2px; }
.pa-box.dragging {
  border-left-color: var(--pa-accent);
  background: color-mix(in srgb, var(--pa-accent) 8%, transparent);
  box-shadow: 0 0 0 1px color-mix(in srgb, var(--pa-accent) 30%, transparent);
  z-index: 2;
}

/* —— 内容排版：楷体 16px/1.6；表格与代码保持紧凑小字，不撑破布局 —— */
.pa-box .pa-content { padding: 2px 8px 4px 9px; }
.pa-box .pa-content p { margin: 0 0 4px; }
.pa-box .pa-content p:last-child { margin-bottom: 0; }
.pa-box .pa-content ul, .pa-box .pa-content ol { margin: 2px 0; padding-left: 1.3em; }
.pa-box .pa-content table { border-collapse: collapse; width: 100%; margin: 4px 0; font-size: 12px; line-height: 1.5; }
.pa-box .pa-content th, .pa-box .pa-content td { border: 1px solid color-mix(in srgb, var(--pa-ink) 22%, transparent); padding: 2px 5px; font-size: 12px; text-align: left; }
.pa-box .pa-content code { font-family: Consolas, monospace; font-size: 12px; background: color-mix(in srgb, var(--pa-ink) 8%, transparent); border-radius: 4px; padding: 0 3px; }

/* —— 操作条：拖动手柄 + 编辑/删除。悬停/聚焦/选中浮出，绝对定位不占流；
      opacity 而非 display 切换：按钮保持可 Tab 聚焦（键盘聚焦即显示），过渡防闪烁 —— */
.pa-head {
  position: absolute; top: 2px; right: 2px; z-index: 3;
  display: flex; align-items: center; gap: 2px;
  height: 22px; padding: 0 3px;
  border: 1px solid color-mix(in srgb, var(--pa-accent) 22%, transparent);
  border-radius: var(--radius-control, 8px);
  background: color-mix(in srgb, var(--color-surface, #fffdfb) 90%, transparent);
  opacity: 0; pointer-events: none;
  transition: opacity 0.12s ease;
  cursor: grab;
  touch-action: none; /* 触屏拖动手柄不被页面滚动手势劫持 */
}
.pa-box:hover .pa-head, .pa-box:focus-within .pa-head, .pa-box.selected .pa-head { opacity: 1; pointer-events: auto; }
.pa-box.pa-editing .pa-head { opacity: 0; pointer-events: none; } /* 编辑中不需要拖动，避免压住输入框 */
.pa-head:active { cursor: grabbing; }
.pa-grip { color: color-mix(in srgb, var(--pa-ink) 45%, transparent); display: grid; place-items: center; }
.pa-acts { display: inline-flex; align-items: center; gap: 2px; }
.pa-btn { border: 0; background: none; padding: 2px; display: grid; place-items: center; border-radius: 4px; color: var(--color-text-tertiary, #9aa3b2); cursor: pointer; }
.pa-btn:hover { color: var(--pa-ink); background: color-mix(in srgb, var(--pa-accent) 14%, transparent); }
.pa-btn-danger:hover { color: var(--color-error, #c0182c); }

/* —— 宽度手柄：选中时显示 —— */
.pa-resize { position: absolute; right: -3px; top: 4px; bottom: 6px; width: 7px; cursor: ew-resize; display: none; touch-action: none; }
.pa-box.selected .pa-resize { display: block; }
.pa-resize::after { content: ""; position: absolute; right: 2px; top: 50%; transform: translateY(-50%); width: 3px; height: 22px; border-radius: 2px; background: color-mix(in srgb, var(--pa-accent) 45%, transparent); }

/* —— 编辑态：轻量输入区，高度随内容自适应（JS 置 scrollHeight）—— */
.pa-box.pa-editing {
  background: color-mix(in srgb, var(--color-surface, #fffdfb) 92%, transparent);
  border-left-color: var(--pa-accent);
  box-shadow: 0 1px 8px rgba(15, 18, 24, 0.08);
  z-index: 2;
}
.pa-edit {
  width: 100%; box-sizing: border-box;
  border: 1px solid color-mix(in srgb, var(--pa-accent) 45%, transparent);
  border-radius: var(--radius-control, 8px);
  padding: 6px 8px;
  font: inherit;
  color: var(--pa-ink);
  resize: none; overflow: hidden;
  min-height: 64px;
  background: var(--color-surface, #fff);
}
.pa-editbar { display: flex; gap: 6px; padding: 6px 8px 8px; }
.pa-btn-save { border: 0; border-radius: var(--radius-control, 8px); padding: 3px 12px; font-size: 12px; cursor: pointer; background: var(--pa-accent); color: #fff; }
.pa-btn-cancel { border: 1px solid var(--color-border, #d9dce1); border-radius: var(--radius-control, 8px); padding: 3px 12px; font-size: 12px; cursor: pointer; background: var(--color-surface, #fff); color: var(--color-text-secondary, #566576); }

/* —— 放置预览：虚线框（与阅读态区分），内容过高红边提示保留 —— */
.pa-ghost {
  opacity: 0.72; pointer-events: none;
  border: 1px dashed color-mix(in srgb, var(--pa-accent) 55%, transparent);
  border-radius: var(--radius-control, 8px);
  background: color-mix(in srgb, var(--color-surface, #fffdfb) 85%, transparent);
}
.pa-ghost[data-ok="0"] { border-color: var(--color-error, #c0182c); }
.pa-placeholder { color: var(--color-text-tertiary, #9aa3b2); margin: 0; }
.pa-dirty { position: absolute; right: 4px; bottom: 2px; width: 15px; height: 15px; border-radius: 8px; background: var(--color-warning, #d97706); color: #fff; font-size: 11px; line-height: 15px; text-align: center; }

/* 插入教材批注 · 统一内容处理弹窗（长文精简 + 表格确认，一次只开一个） */
.pa-dlg-box { width: min(680px, 94vw); }
.pa-dlg-body { display: flex; flex-direction: column; gap: 14px; }
.pa-dlg-sec { min-width: 0; }
.pa-dlg-cap { font-size: 13px; font-weight: 600; color: var(--color-text); margin-bottom: 6px; }
.pa-dlg-count { font-weight: 400; color: var(--color-text-tertiary); font-size: 12px; }
.pa-dlg-preview { max-height: 180px; overflow-y: auto; border: 1px solid var(--color-border); border-radius: 8px; padding: 8px 12px; background: var(--color-background); font-size: 13px; line-height: 1.6; }
.pa-dlg-preview table { border-collapse: collapse; margin: 4px 0; }
.pa-dlg-preview th, .pa-dlg-preview td { border: 1px solid var(--color-border); padding: 2px 8px; font-size: 12px; }
.pa-dlg-text { min-height: 120px; font-size: 13px; }
.pa-dlg-opts { display: flex; flex-direction: column; gap: 6px; font-size: 13px; }
.pa-dlg-opts label { display: flex; align-items: center; gap: 6px; cursor: pointer; }
.pa-dlg-warn { margin: 6px 0 0; font-size: 12px; color: var(--color-warning); }
.pa-dlg-acts { display: flex; align-items: center; gap: 8px; margin-top: 8px; flex-wrap: wrap; }
.pa-dlg-hint { font-size: 12px; color: var(--color-text-tertiary); }

/* 研读卡/讲稿空态提示（讲稿段仍在用） */
.tb-anno-empty { padding: 14px 2px; font-size: 13px; color: var(--color-text-tertiary, #9aa3b2); }
/* 研读卡 · 问答对话块（课堂问答形态的研读段） */
.tb-sc-dlg { border-left: 3px solid color-mix(in srgb, var(--color-primary) 55%, transparent); }

/* 窄屏 */
@media (max-width: 1000px) {
  .tb-notes { width: 280px; }
  .tb-toc { width: 230px; }
}
@media (max-width: 820px) {
  .tb-notes, .tb-toc { position: absolute; z-index: 50; height: 100vh; box-shadow: 0 0 40px rgba(0,0,0,.2); }
  .tb-notes { right: 0; }
  .tb-scroll { padding: 14px; }
  /* 目录/研读浮层不得遮住工具栏与紧凑标题栏：二者保持可点（浮层从下方滑过） */
  .tb-titlebar, .tb-toolbar { position: relative; z-index: 60; }
}

/* 工具栏右侧按钮组 */
.tb-tb-right { display: flex; align-items: center; gap: 8px; margin-left: auto; }
/* 工具栏纯图标按钮：高频图标 + 更多菜单（含义看 title 提示，朗读中菜单项与触发钮高亮），保证工具栏一行左右分布不换行 */
.tb-toolbar .tb-icon-btn { width: 32px; min-width: 32px; padding: 0; display: grid; place-items: center; }
/* 中窄屏压缩档：收紧工具栏内边距与间隙，1024 宽（目录 + AI 面板并存的 classroom 分屏）也能单行 */
@media (max-width: 1100px) {
  .tb-toolbar { padding: 6px 6px; gap: 4px 6px; }
  .tb-zoom-label { min-width: 38px; }
}

/* 本页正文朗读弹窗 */
.tb-modal { position: fixed; inset: 0; z-index: 80; background: rgba(15,18,24,.48); display: flex; align-items: center; justify-content: center; padding: 22px; }
.tb-modal[hidden] { display: none; }
.tb-modal-box { width: min(1080px, 96vw); max-height: 88vh; display: flex; flex-direction: column; background: var(--color-surface, #fff); border: 1px solid var(--color-border, #e3e6ea); border-radius: 8px; box-shadow: 0 20px 60px rgba(0,0,0,.22); overflow: hidden; }
.tb-modal-head { display: flex; align-items: center; gap: 12px; padding: 13px 16px; border-bottom: 1px solid var(--color-border, #e3e6ea); font-size: 15px; font-weight: 700; }
.tb-modal-head span { flex: 1; }
.tb-modal-head button { border: 0; background: none; font-size: 21px; line-height: 1; cursor: pointer; color: var(--color-text-secondary, var(--color-neutral)); }
.tb-modal-tools { display: flex; align-items: center; gap: 14px; padding: 10px 16px; border-bottom: 1px solid var(--color-border, #e3e6ea); background: var(--color-surface, #fff); }
.tb-rselect-all { color: var(--color-text-primary, #1f2937); font-weight: 600; }
.tb-rsource { margin-left: auto; color: var(--color-text-tertiary, #9aa3b2); font-size: 12px; text-align: right; }
.tb-modal-body { padding: 12px 14px; overflow: auto; background: var(--color-background, #f6f7f9); }
/* 段落卡片：一段一张，可勾选 */
.tb-rcard { display: flex; align-items: flex-start; gap: 10px; padding: 10px 12px; margin-bottom: 8px; border-radius: 8px; background: var(--color-surface, #fff); border: 1px solid var(--color-border, #e3e6ea); cursor: pointer; transition: .15s; }
.tb-rcard:hover { border-color: color-mix(in srgb, var(--color-primary, var(--color-error)) 45%, transparent); }
.tb-rcard.on { border-color: var(--color-primary, var(--color-error)); background: color-mix(in srgb, var(--color-primary, var(--color-error)) 6%, var(--color-surface, #fff)); }
.tb-rcard.cur { box-shadow: 0 0 0 2px color-mix(in srgb, var(--color-primary, var(--color-error)) 30%, transparent); }
.tb-rc-pick { flex: none; padding-top: 2px; }
.tb-rcard input[type=checkbox] { width: 15px; height: 15px; accent-color: var(--color-primary, var(--color-error)); cursor: pointer; }
.tb-rc-body { flex: 1; min-width: 0; font-size: 15px; line-height: 2; color: var(--color-text-primary, #1f2937); text-align: justify; text-indent: 2em; }
.tb-rc-body b { display: block; color: var(--color-text-tertiary, #9aa3b2); font-weight: 500; font-size: 12px; margin-bottom: 2px; }
.tb-rc-play { flex: none; width: 28px; height: 28px; border: 1px solid var(--color-border, #e3e6ea); border-radius: 8px; background: var(--color-surface, #fff); color: var(--color-text-secondary, var(--color-neutral)); font-size: 12px; line-height: 1; cursor: pointer; }
.tb-rc-play:hover { color: var(--color-primary, var(--color-error)); border-color: var(--color-primary, var(--color-error)); }
.tb-rempty { text-align: center; color: var(--color-text-tertiary, #9aa3b2); font-size: 13px; padding: 26px 0; }
.tb-modal-foot { display: flex; flex-direction: column; gap: 9px; padding: 12px 14px; border-top: 1px solid var(--color-border, #e3e6ea); }
.tb-rrow { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.tb-rrow select { padding: 5px 8px; border: 1px solid var(--color-border, #e3e6ea); border-radius: 8px; background: var(--color-surface, #fff); color: var(--color-text-primary, #1f2937); font-size: 13px; }
.tb-rbtn { padding: 7px 12px; border: 1px solid var(--color-border, #e3e6ea); border-radius: 9px; background: var(--color-surface, #fff); color: var(--color-text-primary, #1f2937); font-size: 13px; cursor: pointer; }
.tb-rbtn:hover { border-color: var(--color-primary, var(--color-error)); color: var(--color-primary, var(--color-error)); }
.tb-rbtn.primary { background: var(--color-primary, var(--color-error)); border-color: var(--color-primary, var(--color-error)); color: #fff; }
.tb-rcheck { display: inline-flex; align-items: center; gap: 5px; font-size: 13px; color: var(--color-text-secondary, var(--color-neutral)); }
.tb-rstat { margin-left: auto; font-size: 12px; color: var(--color-text-tertiary, #9aa3b2); }
.tb-rbtn:disabled { opacity: .5; cursor: not-allowed; }

/* 弹窗关闭后，在 PDF 原页上提示当前正在朗读的正文行 */
.tb-read-highlight { position: absolute; z-index: 2; pointer-events: none; border-radius: 4px; background: color-mix(in srgb, #f5b942 28%, transparent); box-shadow: inset 3px 0 0 #e59c16; transition: top .15s ease, left .15s ease, width .15s ease; }
.tb-read-highlight.active { animation: tbReadPulse 1.8s ease-in-out infinite; }
@keyframes tbReadPulse { 50% { background: color-mix(in srgb, #f5b942 42%, transparent); } }
@media (prefers-reduced-motion: reduce) { .tb-read-highlight.active { animation: none; } }

/* ---------- 课堂讲稿（研读卡内第三段） ----------
   讲稿是教师可直接开口的口播稿，按「导入/讲解/板书/易错/追问/小结」分块。
   块之间只用小标题 + 分隔线区分，不套多层卡片。 */
.tb-sc-head-bar { padding: 0 4px 8px; }
.tb-sc-scope { font-size: 14px; font-weight: 700; color: var(--color-text); line-height: 1.5; }
.tb-sc-meta { margin-top: 2px; font-size: 12px; color: var(--color-text-tertiary, #9aa3b2); }

.tb-sc-blocks { display: flex; flex-direction: column; }
.tb-sc-block { padding: 12px 4px; border-bottom: 1px solid var(--color-border); }
.tb-sc-block:last-child { border-bottom: 0; }
.tb-sc-head { display: flex; align-items: baseline; gap: 8px; margin-bottom: 6px; flex-wrap: wrap; }
.tb-sc-kind { flex: none; font-size: 12px; font-weight: 700; color: var(--color-primary); letter-spacing: .5px; }
/* 讲解块的命名知识点 —— 块内小标题，让教师一眼看到"这段讲什么" */
.tb-sc-point {
  flex: none; font-size: 12px; font-weight: 700; color: var(--color-text);
  padding: 0 2px; border-left: 2px solid color-mix(in srgb, var(--color-primary) 45%, transparent);
  line-height: 1.4;
}
.tb-sc-para { flex: none; margin-left: auto; font-size: 11px; color: var(--color-text-tertiary, #9aa3b2); border: 1px solid var(--color-border); border-radius: 4px; padding: 1px 6px; }
.tb-sc-hint { font-size: 11px; color: var(--color-text-tertiary, #9aa3b2); }
.tb-sc-text { font-size: 14px; line-height: 1.75; color: var(--color-text); }
.tb-sc-text b { font-weight: 700; color: var(--color-primary); }

/* 师生对话块：只在真实误解处出现，学生问 / 老师答，左侧竖线区分 */
.tb-sc-block[data-kind="dialogue"] { background: color-mix(in srgb, var(--color-primary) 3%, transparent); }
.tb-sc-turns { display: flex; flex-direction: column; gap: 6px; }
.tb-sc-turn { display: flex; gap: 7px; font-size: 13px; line-height: 1.7; color: var(--color-text); }
.tb-sc-who {
  flex: none; width: 19px; height: 19px; margin-top: 2px; border-radius: 8px;
  display: inline-flex; align-items: center; justify-content: center;
  font-size: 11px; font-weight: 700;
}
.tb-sc-turn[data-who="student"] .tb-sc-who { background: color-mix(in srgb, var(--color-text) 10%, transparent); color: var(--color-text-secondary, var(--color-neutral)); }
.tb-sc-turn[data-who="teacher"] .tb-sc-who { background: color-mix(in srgb, var(--color-primary) 18%, transparent); color: var(--color-primary); }
.tb-sc-say { flex: 1; min-width: 0; }
.tb-sc-say b { font-weight: 700; color: var(--color-primary); }

/* 讲解块可点击定位正文段落 */
.tb-sc-block.linkable { cursor: pointer; }
.tb-sc-block.linkable:hover { background: color-mix(in srgb, var(--color-primary) 4%, transparent); }
.tb-sc-block.hl { background: color-mix(in srgb, var(--color-primary) 7%, transparent); }
.tb-sc-block.hl .tb-sc-para { color: var(--color-primary); border-color: color-mix(in srgb, var(--color-primary) 45%, transparent); }
.tb-sc-block.hl .tb-sc-para::after { content: " · 已定位"; }

/* 板书块：等宽感 + 左侧竖线，与口播块视觉区分。
   注意不要加 white-space: pre-wrap —— 换行已由 richText 转成 <br>，叠加会双倍行距。 */
.tb-sc-block[data-kind="board"] .tb-sc-text {
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size: 13px; line-height: 2;
  border-left: 3px solid color-mix(in srgb, var(--color-primary) 55%, transparent);
  padding-left: 10px; color: var(--color-text);
}
.tb-sc-block[data-kind="board"] .tb-sc-text b { color: var(--color-text); text-decoration: underline; text-underline-offset: 3px; }

/* 易错 / 追问：左侧细色条区分语气，不用底色块 */
.tb-sc-block[data-kind="alert"] { border-left: 3px solid #d97706; padding-left: 10px; }
.tb-sc-block[data-kind="ask"] { border-left: 3px solid #0284c7; padding-left: 10px; }
.tb-sc-block[data-kind="hook"] .tb-sc-text { font-size: 14px; }
.tb-sc-block[data-kind="close"] .tb-sc-text { color: var(--color-text-secondary); }

.tb-sc-foot { margin: 12px 4px 4px; font-size: 12px; line-height: 1.7; color: var(--color-text-tertiary, #9aa3b2); }

@media (max-width: 720px) {
  .tb-modal { padding: 10px; }
  .tb-modal-box { width: 100%; max-height: 94vh; }
  .tb-modal-tools { align-items: flex-start; flex-direction: column; gap: 5px; }
  .tb-rsource { margin-left: 0; text-align: left; }
}

/* 全屏显示课本：整块工作区（含 PDF 与右侧研读侧栏）铺满屏幕 */
.tb-app:fullscreen { width: 100vw; height: 100vh; background: #e9ebf0; }
.tb-app:fullscreen .tb-scroll { padding: 18px 0 0; }
.tb-app:fullscreen .tb-page-wrap { box-shadow: 0 6px 24px rgba(0,0,0,.18); }

/* 全屏纯PDF：强制收起左侧目录与右侧研读工作区，隐藏浮动展开按钮 */
.tb-app:fullscreen #tbToc { width: 0; min-width: 0; border-right: 0; }
.tb-app:fullscreen #tbNotes { width: 0; min-width: 0; border-left: 0; }
.tb-app:fullscreen #panelResizer { width: 0; min-width: 0; }
.tb-app:fullscreen #tocShow,
.tb-app:fullscreen #notesShow { display: none; }
/* 全屏下的目录浮层：.tb-app 即全屏元素，浮层渲染在其内部不会被浏览器全屏层遮挡。
   凡未收起（悬停预览 / 全屏内点击固定 / 滑出动画中）都以浮层呈现，
   id 级强制收起需在此恢复宽度；固定态不随鼠标离开收起，仍由按钮/收起钮控制。 */
.tb-app:fullscreen #tbToc:not(.collapsed) {
  position: absolute;
  left: 0;
  top: 44px;
  bottom: 0;
  z-index: 65;
  width: min(300px, 82vw);
  height: auto;
  border-right: 1px solid var(--color-border);
  border-radius: 0 var(--radius-overlay) var(--radius-overlay) 0;
  box-shadow: var(--shadow-overlay);
}

/* 全屏双栏研读：直接控制 grid 轨道，避免 item 百分比宽度在 auto 列中产生循环依赖。
   右侧工作区最小 420px，默认 45%，用户拖动后通过 --fs-notes-w 覆盖。 */
.tb-app:fullscreen.fs-notes-open {
  grid-template-columns: 0 minmax(0, 1fr) 5px minmax(420px, var(--fs-notes-w, 45%));
}
.tb-app:fullscreen.fs-notes-open #tbNotes {
  width: auto;
  min-width: 0;
  border-left: 1px solid var(--tb-side-border);
}
.tb-app:fullscreen.fs-notes-open #panelResizer { width: 5px; min-width: 0; }

/* 全屏时才显示工具栏上的「展开/收起研读侧栏」按钮 */
#tbFsNotesBtn { display: none; }
.tb-app:fullscreen #tbFsNotesBtn { display: inline-grid; }
@media (prefers-reduced-motion: reduce) {
  .tb-app:fullscreen #tbNotes,
  .tb-app:fullscreen #tbToc { transition: none; }
}
.tb-rcheck { white-space: nowrap; }

/* ===== 阅读记忆：继续上次研读 / 最近研读 / 我的收藏 ===== */
.tb-memory { padding: 10px 12px 8px; border-bottom: 1px solid var(--color-border); }
.tb-memory[hidden] { display: none; }
.tb-memory-cap { font-size: 12px; color: var(--color-text-secondary); }
.tb-memory-line { margin-top: 3px; font-size: 13px; font-weight: 600; color: var(--color-text); line-height: 1.45; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
.tb-memory-time { margin-top: 2px; font-size: 12px; color: var(--color-text-secondary); }
.tb-memory-btn { width: 100%; margin-top: 8px; padding: 6px 10px; border: 1px solid var(--color-primary); border-radius: 6px; background: var(--color-primary); color: #fff; font-size: 13px; line-height: 1.4; cursor: pointer; }
.tb-memory-btn:hover { filter: brightness(1.06); }
.tb-memory-links { display: flex; align-items: center; gap: 14px; padding: 8px 12px; border-bottom: 1px solid var(--color-border); }
.tb-memory-links button { border: 0; background: none; padding: 0; font-size: 13px; color: var(--color-text-secondary); cursor: pointer; }
.tb-memory-links button:hover { color: var(--color-primary); }
.tb-memory-box { width: min(560px, 96vw); }
.tb-memory-list { flex: 1; min-height: 120px; max-height: 60vh; overflow: auto; padding: 4px 0; }
.tb-memory-row { display: flex; align-items: center; gap: 12px; padding: 10px 16px; cursor: pointer; }
.tb-memory-row:hover, .tb-memory-row:focus-visible { background: var(--color-background); outline: none; }
.tb-memory-row + .tb-memory-row { border-top: 1px solid var(--color-border); }
.tb-memory-row-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.tb-memory-row-title { font-size: 14px; font-weight: 600; color: var(--color-text); }
.tb-memory-row-sub { font-size: 12px; color: var(--color-text-secondary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tb-memory-row-side { flex-shrink: 0; display: flex; align-items: center; gap: 10px; }
.tb-memory-row-time { font-size: 12px; color: var(--color-text-secondary); }
.tb-memory-row-unfav { border: 1px solid var(--color-border); border-radius: 6px; padding: 3px 8px; font-size: 12px; color: var(--color-text-secondary); cursor: pointer; }
.tb-memory-row-unfav:hover { color: var(--color-primary); border-color: var(--color-primary); }
.tb-memory-foot { display: flex; justify-content: flex-end; padding: 10px 16px; border-top: 1px solid var(--color-border); }
.tb-memory-foot[hidden] { display: none; }
.tb-memory-clear { border: 0; background: none; padding: 0; font-size: 12px; color: var(--color-text-secondary); cursor: pointer; }
.tb-memory-clear:hover { color: var(--color-error); }
.tb-memory-empty { padding: 44px 20px; text-align: center; font-size: 13px; color: var(--color-text-secondary); line-height: 1.7; }

/* ===== 右侧面板宽度拖拽 ===== */
.tb-panel-resizer {
  flex: none;
  width: 5px;
  cursor: col-resize;
  background: transparent;
  position: relative;
  z-index: 5;
}
.tb-panel-resizer:hover, .tb-panel-resizer.dragging { background: color-mix(in srgb, var(--color-primary) 22%, transparent); }
.tb-app { grid-template-columns: minmax(0, auto) minmax(0, 1fr) 5px minmax(0, auto); }
.tb-notes { width: var(--tb-notes-w, 348px); }
.tb-notes-head-acts { display: flex; align-items: center; gap: 6px; }

/* ===== AI 研读面板 ===== */
.tb-ai-pane { flex: 1; min-height: 0; display: flex; flex-direction: column; }
.tb-ai-pane[hidden] { display: none; }

.tb-ai-msgs { flex: 1; min-height: 0; overflow-y: auto; padding: 12px 14px 10px; }
/* AI 回答直接排在工作区背景上，不套气泡卡片；用户消息浅色底细边框 */
.tb-ai-msg { display: flex; gap: 8px; margin-bottom: 14px; min-width: 0; }
.tb-ai-msg:last-child { margin-bottom: 4px; }
.tb-ai-msg.user { justify-content: flex-end; }
.tb-ai-col { min-width: 0; max-width: 100%; display: flex; flex-direction: column; }
.tb-ai-msg.user .tb-ai-col { align-items: flex-end; }
.tb-ai-bubble { padding: 0; font-size: 15px; line-height: 1.8; overflow-wrap: anywhere; min-width: 0; }
.tb-ai-msg.user .tb-ai-bubble {
  max-width: 86%;
  padding: 8px 12px;
  background: color-mix(in srgb, var(--color-primary) 7%, #fff);
  border: 1px solid color-mix(in srgb, var(--color-primary) 16%, transparent);
  color: var(--tb-side-text);
  border-radius: 8px;
  white-space: pre-wrap;
  line-height: 1.65;
}
.tb-ai-msg.assistant .tb-ai-bubble {
  flex: 1;
  background: transparent;
  border: 0;
  border-radius: 0;
  color: var(--tb-side-text);
}
/* 教材原文引用：浅灰底 + 深色字，作为正文内的引文块 */
.tb-ai-quote {
  margin: 0 0 8px;
  padding: 8px 11px;
  border-left: 3px solid color-mix(in srgb, var(--color-primary) 35%, transparent);
  background: rgba(255, 255, 255, .65);
  color: var(--tb-side-text-2);
  font-size: 13px;
  line-height: 1.65;
  max-height: 130px;
  overflow-y: auto;
  border-radius: 0 6px 6px 0;
}
.tb-ai-quote-cap { display: block; font-size: 12px; color: var(--tb-side-text-3); margin-bottom: 3px; }
.tb-ai-meta { margin-top: 6px; font-size: 12px; color: var(--tb-side-text-3); display: flex; flex-wrap: wrap; gap: 4px 8px; align-items: center; padding: 0 2px; }
.tb-ai-cost { margin-top: 8px; padding-top: 7px; border-top: 1px dashed var(--tb-side-border); font-size: 12px; line-height: 1.5; color: var(--tb-side-text-3); }
.tb-ai-cite {
  display: inline-block;
  padding: 1px 7px;
  border: 1px solid var(--tb-side-border);
  border-radius: 6px;
  background: rgba(255,255,255,.6);
  color: var(--tb-side-text-2);
  font-size: 12px;
  line-height: 1.7;
  cursor: pointer;
  font-variant-numeric: tabular-nums;
}
.tb-ai-cite:hover { color: var(--color-primary); border-color: var(--color-primary); }
/* 研读诊断（仅开发环境由服务端下发）：小字键值行，1px 分隔线，不做卡片 */
.tb-ai-diag { margin-bottom: 8px; font-size: 12px; color: var(--color-text-tertiary, #9aa3b2); border-bottom: 1px dashed var(--color-border); }
.tb-ai-diag summary { cursor: pointer; padding-bottom: 5px; user-select: none; }
.tb-ai-diag-rows { display: grid; grid-template-columns: auto 1fr; gap: 2px 10px; padding-bottom: 5px; }
.tb-ai-diag-rows span { color: var(--color-text-secondary); white-space: nowrap; }
.tb-ai-diag-preview { padding: 4px 0 6px; border-top: 1px dashed var(--color-border); line-height: 1.6; overflow-wrap: break-word; }
/* 诊断里的实发页图预览：随内容缩放，1px 边框标识图像边界，不额外加容器 */
.tb-ai-diag-imgcap { padding: 6px 0 2px; border-top: 1px dashed var(--color-border); color: var(--color-text-tertiary, #9aa3b2); }
.tb-ai-diag-img { display: block; width: 100%; max-width: 320px; margin: 4px 0 6px; border: 1px solid var(--color-border); }
/* AI 长文排版：15px 正文 + 1.8 行距，标题克制不抢色 */
.tb-ai-md { font-size: 15px; line-height: 1.8; color: var(--tb-side-text); overflow-wrap: break-word; min-width: 0; }
.tb-ai-md h1, .tb-ai-md h2, .tb-ai-md h3, .tb-ai-md h4 { font-size: 15px; margin: 14px 0 6px; line-height: 1.5; font-weight: 650; color: var(--tb-side-text); }
.tb-ai-md p { margin: 7px 0; }
.tb-ai-md ul, .tb-ai-md ol { margin: 7px 0; padding-left: 1.4em; }
.tb-ai-md li { margin: 3px 0; }
.tb-ai-md strong { color: var(--tb-side-text); font-weight: 650; }
.tb-ai-md blockquote { margin: 8px 0; padding: 2px 10px; border-left: 3px solid var(--tb-side-border); color: var(--tb-side-text-2); background: rgba(255,255,255,.5); }
.tb-ai-md code { font-size: 13px; background: rgba(0,0,0,.05); border-radius: 4px; padding: 1px 5px; font-family: ui-monospace, Menlo, Consolas, monospace; }
.tb-ai-md pre { overflow-x: auto; padding: 10px 12px; border: 1px solid var(--tb-side-border); border-radius: 6px; background: #fff; }
.tb-ai-md pre code { background: none; padding: 0; }
.tb-ai-md table { border-collapse: collapse; margin: 8px 0; max-width: 100%; display: block; overflow-x: auto; }
.tb-ai-md th, .tb-ai-md td { border: 1px solid var(--tb-side-border); padding: 5px 9px; font-size: 13px; }
.tb-ai-md th { background: rgba(0,0,0,.03); font-weight: 600; }
.tb-ai-typing { display: inline-flex; align-items: center; gap: 4px; padding: 4px 0; }
.tb-ai-typing i { width: 6px; height: 6px; border-radius: 6px; background: var(--color-border, #cbd5e1); animation: tbAiBlink 1.2s infinite; }
.tb-ai-typing i:nth-child(2) { animation-delay: .2s; }
.tb-ai-typing i:nth-child(3) { animation-delay: .4s; }
@keyframes tbAiBlink { 0%, 70%, 100% { opacity: .35; } 35% { opacity: 1; } }
.tb-ai-acts { margin-top: 2px; display: flex; flex-wrap: wrap; gap: 2px; }
.tb-ai-acts button { border: 0; background: none; padding: 4px 7px; font-size: 12px; color: var(--color-text-tertiary, #9aa3b2); cursor: pointer; border-radius: 6px; }
.tb-ai-acts button:hover { color: var(--color-primary); background: color-mix(in srgb, var(--color-primary) 9%, transparent); }
.tb-ai-err { padding: 8px 10px; border-left: 3px solid var(--color-error); background: color-mix(in srgb, var(--color-error) 6%, transparent); color: var(--color-text); font-size: 14px; line-height: 1.6; }
.tb-ai-empty { padding: 40px 10px 20px; text-align: center; }
.tb-ai-empty-title { font-size: 16px; font-weight: 650; color: var(--color-text); }
.tb-ai-empty-sub { margin-top: 6px; font-size: 13px; line-height: 1.7; color: var(--color-text-tertiary, #9aa3b2); }

/* 输入区：白色交互面固定底部，与浅灰工作区形成轻微对比。
   统一复合输入框：textarea 无边框，范围选择器、快捷提问与发送按钮都在框内底行。 */
.tb-ai-dock { flex: none; border-top: 1px solid var(--tb-side-border); padding: 6px 10px 8px; background: #fff; }
.tb-ai-dockrow { display: flex; align-items: center; justify-content: flex-end; gap: 8px; padding: 0 2px 6px; }
.tb-ai-bar-acts { display: flex; align-items: center; gap: 4px; }
.tb-ai-barbtn { border: 0; background: none; padding: 4px 7px; border-radius: 8px; font-size: 12px; color: var(--tb-side-text-2); cursor: pointer; white-space: nowrap; }
.tb-ai-barbtn:hover { color: var(--color-primary); background: color-mix(in srgb, var(--color-primary) 9%, transparent); }
/* 复合输入框：仅一层容器持有边框与圆角，内部控件全部透明 */
.tb-ai-input { display: flex; flex-direction: column; border: 1px solid var(--tb-side-border); border-radius: 8px; background: #fff; }
.tb-ai-input:focus-within { border-color: var(--color-primary); }
.tb-ai-input textarea {
  width: 100%;
  min-width: 0;
  resize: none;
  padding: 8px 10px 2px;
  border: 0;
  border-radius: 0;
  background: transparent;
  color: var(--tb-side-text);
  font-size: 14px;
  line-height: 1.6;
  max-height: 132px;
  font-family: inherit;
}
.tb-ai-input textarea::placeholder { color: var(--tb-side-text-3); }
.tb-ai-input textarea:focus { outline: none; }
.tb-ai-inputfoot { display: flex; align-items: center; gap: 2px; padding: 2px 6px 6px; }
.tb-ai-footspace { flex: 1; min-width: 8px; }
/* 快捷提问：框内左下角一枚幽灵按钮，点开向上弹出的菜单 */
.tb-ai-quickwrap { position: relative; flex: none; }
.tb-ai-quickbtn { width: 28px; height: 28px; display: grid; place-items: center; border: 0; border-radius: 8px; background: transparent; color: var(--tb-side-text-2); cursor: pointer; }
.tb-ai-quickbtn:hover, .tb-ai-quickbtn.open { color: var(--color-primary); background: color-mix(in srgb, var(--color-primary) 9%, transparent); }
.tb-ai-quickmenu {
  position: absolute;
  left: 0;
  bottom: calc(100% + 6px);
  z-index: 30;
  min-width: 190px;
  padding: 4px;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-overlay);
  background: var(--color-surface);
  box-shadow: var(--shadow-overlay);
  display: flex;
  flex-direction: column;
}
.tb-ai-quickmenu[hidden] { display: none; }
.tb-ai-quickmenu button { border: 0; background: none; padding: 7px 10px; border-radius: 8px; text-align: left; font-size: 13px; color: var(--tb-side-text); cursor: pointer; white-space: nowrap; }
.tb-ai-quickmenu button:hover { background: color-mix(in srgb, var(--color-primary) 9%, transparent); color: var(--color-primary); }
/* 研读范围：框内窄下拉（覆盖全局 select width:100%） */
.tb-ai-scope { flex: none; width: auto; max-width: none; padding: 3px 2px; border: 0; border-radius: 8px; background: transparent; color: var(--tb-side-text-2); font-size: 12px; cursor: pointer; }
.tb-ai-scope:hover { background: color-mix(in srgb, var(--color-primary) 9%, transparent); }
.tb-ai-send { flex: none; width: 30px; height: 30px; display: grid; place-items: center; border: 1px solid var(--color-primary); border-radius: 8px; background: var(--color-primary); color: #fff; cursor: pointer; }
.tb-ai-send:hover { filter: brightness(1.08); }
.tb-ai-send:disabled { opacity: .55; cursor: default; }
.tb-ai-send.stop { background: #fff; color: var(--tb-side-text-2); border-color: var(--tb-side-border); }

/* 「选中即操作」引用条：输入框上方的一层引文条（来源 + 两行摘要 + 移除），不嵌套容器 */
.tb-ai-quotebar { display: flex; align-items: flex-start; gap: 8px; padding: 6px 8px; margin-bottom: 6px; border-left: 3px solid color-mix(in srgb, var(--color-primary) 35%, transparent); background: color-mix(in srgb, var(--color-primary) 5%, transparent); }
.tb-ai-quotebar-cap { flex: none; padding-top: 1px; font-size: 12px; color: var(--tb-side-text-3); white-space: nowrap; }
.tb-ai-quotebar-text { flex: 1; min-width: 0; font-size: 12px; line-height: 1.6; color: var(--tb-side-text-2); cursor: pointer; overflow-wrap: break-word; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.tb-ai-quotebar-text.open { display: block; max-height: 132px; overflow-y: auto; }
.tb-ai-quotebar-del { flex: none; border: 0; background: none; padding: 0 2px; font-size: 14px; line-height: 18px; color: var(--tb-side-text-3); cursor: pointer; }
.tb-ai-quotebar-del:hover { color: var(--color-error); }

/* 「选中即操作」浮动工具栏：fixed 弹层（popup-position rect 模式），浮层允许一层边框+阴影 */
.tb-ai-selpop { display: flex; align-items: center; gap: 2px; padding: 3px; border: 1px solid var(--color-border); border-radius: var(--radius-overlay); background: var(--color-surface); box-shadow: var(--shadow-overlay); z-index: 72; }
.tb-ai-selpop[hidden] { display: none; }
.tb-ai-selpop button { border: 0; background: none; padding: 4px 10px; border-radius: 8px; font-size: 12px; color: var(--tb-side-text); cursor: pointer; white-space: nowrap; }
.tb-ai-selpop button:hover { color: var(--color-primary); background: color-mix(in srgb, var(--color-primary) 9%, transparent); }

/* AI 研读会话弹窗列表 */
.tb-ai-session-row { display: flex; align-items: center; gap: 10px; padding: 10px 16px; cursor: pointer; }
.tb-ai-session-row:hover { background: var(--color-background); }
.tb-ai-session-row + .tb-ai-session-row { border-top: 1px solid var(--color-border); }
.tb-ai-session-row.on .tb-ai-session-title { color: var(--color-primary); }
.tb-ai-session-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.tb-ai-session-title { font-size: 13px; font-weight: 600; color: var(--color-text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tb-ai-session-sub { font-size: 12px; color: var(--color-text-secondary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.tb-ai-session-act { flex-shrink: 0; display: flex; gap: 6px; }
.tb-ai-session-act button { border: 1px solid var(--color-border); border-radius: 6px; padding: 3px 8px; background: transparent; font-size: 12px; color: var(--color-text-secondary); cursor: pointer; }
.tb-ai-session-act button:hover { color: var(--color-primary); border-color: var(--color-primary); }
.tb-ai-session-act button.tb-danger:hover { color: var(--color-error); border-color: var(--color-error); }

/* ===== 我的笔记（教师个人笔记）：白色条目在浅灰背景上 ===== */
.tb-un-item { border: 1px solid var(--tb-side-border); border-radius: 8px; background: #fff; padding: 10px 12px; margin-bottom: 8px; }
.tb-un-quote { font-size: 12px; line-height: 1.65; color: var(--tb-side-text-2); border-left: 3px solid color-mix(in srgb, var(--color-primary) 40%, transparent); padding: 2px 8px; margin-bottom: 6px; max-height: 84px; overflow-y: auto; }
.tb-un-text { font-size: 13px; line-height: 1.75; color: var(--tb-side-text); white-space: pre-wrap; word-break: break-word; }
.tb-un-text.is-empty { color: var(--tb-side-text-3); font-style: normal; }
.tb-un-foot { margin-top: 6px; display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--tb-side-text-3); flex-wrap: wrap; }
.tb-un-loc { border: 0; background: none; padding: 0; color: var(--tb-side-text-2); font-size: 12px; cursor: pointer; }
.tb-un-loc:hover { color: var(--color-primary); }
.tb-un-acts { margin-left: auto; display: flex; gap: 2px; }
.tb-un-acts button { border: 0; background: none; padding: 2px 6px; font-size: 12px; color: var(--tb-side-text-3); cursor: pointer; border-radius: 6px; }
.tb-un-acts button:hover { color: var(--color-primary); }
.tb-un-acts button.tb-danger:hover { color: var(--color-error); }
.tb-un-edit { width: 100%; margin-top: 6px; padding: 8px 10px; border: 1px solid var(--tb-side-border); border-radius: 8px; background: #fff; color: var(--tb-side-text); font-size: 13px; line-height: 1.65; font-family: inherit; resize: vertical; min-height: 64px; }
.tb-un-edit:focus { outline: none; border-color: var(--color-primary); }
.tb-un-empty { font-size: 13px; line-height: 1.7; color: var(--tb-side-text-3); padding: 6px 2px 10px; }
.tb-un-toast { position: fixed; left: 50%; bottom: 56px; transform: translateX(-50%); z-index: 90; padding: 8px 18px; border-radius: 8px; background: rgba(23, 26, 33, .88); color: #fff; font-size: 12px; pointer-events: none; opacity: 0; transition: opacity .25s; }
.tb-un-toast.on { opacity: 1; }

/* ===== PDF 文字层（选中文本） ===== */
.tb-text-layer {
  position: absolute;
  inset: 0;
  overflow: hidden;
  line-height: 1;
  opacity: 1;
  z-index: 1;
  text-size-adjust: none;
  forced-color-adjust: none;
  transform-origin: 0 0;
}
.tb-text-layer span { position: absolute; white-space: pre; cursor: text; transform-origin: 0 0; color: transparent; }
.tb-text-layer span.markedContent { top: 0; height: 0; }
.tb-text-layer .endOfContent { position: absolute; top: 0; right: 0; bottom: 0; left: 0; z-index: -1; cursor: default; user-select: none; }
.tb-text-layer .endOfContent.active { top: 0; right: auto; bottom: auto; left: 0; width: 0; height: 0; }
.tb-text-layer ::selection { background: color-mix(in srgb, var(--color-primary) 26%, transparent); }

/* ===== 选区操作浮层 ===== */
.tb-sel-pop {
  position: fixed;
  z-index: 80;
  display: flex;
  align-items: center;
  gap: 2px;
  padding: 3px;
  border: 1px solid var(--color-border);
  border-radius: 8px;
  background: var(--color-surface);
  box-shadow: var(--shadow-overlay);
}
.tb-sel-pop[hidden] { display: none; }
.tb-sel-pop button { border: 0; background: none; padding: 5px 9px; border-radius: 6px; font-size: 12px; color: var(--color-text); cursor: pointer; white-space: nowrap; }
.tb-sel-pop button:hover { background: color-mix(in srgb, var(--color-primary) 10%, transparent); color: var(--color-primary); }
.tb-sel-pop-sep { width: 1px; height: 14px; background: var(--color-border); }
