/* ============================================================
   Home Styles — Three-Column Layout
   Chat Panel | Lesson Renderer | Dashboard
   ============================================================ */

/* === Home Container === */

.home-container {
  display: none;   /* JS 控制可见性: launchHome() → flex */
  height: 100%;
  width: 100%;
  overflow: hidden;
}

/* === B139 节点①（2026-09-03）：PC 三栏面板开合（桌面 >900px） ===
   新用户默认收拢只留学习区（home.js 读 localStorage，无记录 = 收起）；
   收拢后窄轨（.panel-rail）为唯一展开入口。移动端抽屉逻辑不受影响。 */
.panel-collapse-btn { display: none; }
.panel-rail { display: none; }

@media (min-width: 901px) {
  .panel-collapse-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 28px;
    height: 28px;
    border-radius: var(--radius-sm);
    background: transparent;
    border: none;
    cursor: pointer;
    color: var(--color-text-tertiary);
  }
  .panel-collapse-btn:hover { color: var(--color-text-primary); background: var(--color-accent-subtle); }

  .home-container[data-panel-left='collapsed'] #chat-panel { display: none; }
  .home-container[data-panel-right='collapsed'] #dashboard-panel { display: none; }

  .panel-rail {
    flex-direction: column;
    align-items: center;
    gap: var(--space-3);
    width: 38px;
    flex-shrink: 0;
    padding: var(--space-3) 0;
    background: var(--color-bg-surface);
    border: none;
    cursor: pointer;
    color: var(--color-text-tertiary);
  }
  .panel-rail:hover { color: var(--color-accent); background: var(--color-accent-subtle); }
  .panel-rail--left { border-right: var(--border-subtle); }
  .panel-rail--right { border-left: var(--border-subtle); }
  .panel-rail-label { writing-mode: vertical-rl; font-size: var(--text-xs); letter-spacing: 2px; }

  .home-container[data-panel-left='collapsed'] .panel-rail--left { display: flex; }
  .home-container[data-panel-right='collapsed'] .panel-rail--right { display: flex; }
}

/* === Left: Chat Panel === */

.chat-panel {
  width: var(--chat-panel-width);
  min-width: 280px;
  display: flex;
  flex-direction: column;
  border-right: var(--border-subtle);
  background: var(--color-bg-surface);
}

.chat-panel-header {
  padding: var(--space-4) var(--space-5);
  border-bottom: var(--border-subtle);
  flex-shrink: 0;
  display: flex;
  align-items: center;
  gap: var(--space-2);
  /* B153 ⑤（2026-09-11 用户拍板，spec §6）：不再 space-between——
     解壳后开关/标题/按钮组都直接参与头部 flex，位置由 order + 自动边距接管。
     2026-09-12 用户拍板：开关左移撤销——标题回最左、开关回右侧按钮组
     （视觉 = ⑤之前：对话 ── 专家模式/收起/返回），order 规则随之退役。 */
}

.chat-panel-title {
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
  color: var(--color-text-secondary);
  margin-right: auto; /* 吸收剩余空间 → 右侧（专家模式/收起/返回）保持最右 */
}

/* B153 ⑤（2026-09-11 用户拍板，spec §6）：解壳（display: contents）让
   子项直接参与头部 flex 布局。⑤ 曾用 order 把开关排到标题左侧——
   2026-09-12 用户拍板撤销（标题回最左、开关回右侧按钮组，视觉同 ⑤ 之前），
   order 已退役；解壳保留（间隙/自动边距由头部统一接管）。DOM 不动。 */
.chat-header-actions {
  display: contents;
}

.chat-header-btn {
  padding: 4px 10px;
  background: transparent;
  border: var(--border-subtle);
  border-radius: var(--radius-sm);
  color: var(--color-text-secondary);
  cursor: pointer;
  font-family: var(--font-sans);
  font-size: var(--text-xs);
  transition: all var(--duration-fast) var(--ease-out);
}

.chat-header-btn:hover {
  border-color: var(--color-accent-soft);
  color: var(--color-accent);
}

/* ============================================================
   B149-6（2026-09-10 用户拍板）：可点亮开关组件（专家模式/记忆统一）
   ——点亮 = 勾选（accent 底 + 微光 + 圆钮右移动效）；置灰 = 未开启。
   左栏头部 .chat-header-mode 带边框胶囊壳，纯聊工作台无壳。
   ============================================================ */
.toggle {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  cursor: pointer;
  user-select: none;
  font-family: var(--font-sans);
  font-size: var(--text-xs);
  color: var(--color-text-secondary);
  transition: color var(--duration-fast) var(--ease-out);
}

.toggle:hover { color: var(--color-text-primary); }

/* 隐藏原生 checkbox（保留语义与键盘可达性） */
.toggle input {
  position: absolute;
  opacity: 0;
  width: 0;
  height: 0;
}

.toggle__track {
  position: relative;
  width: 34px;
  height: 18px;
  flex-shrink: 0;
  background: var(--color-bg-elevated);
  border: 1px solid var(--color-text-tertiary);
  border-radius: 999px;
  transition: background var(--duration-fast) var(--ease-out),
    border-color var(--duration-fast) var(--ease-out),
    box-shadow var(--duration-fast) var(--ease-out);
}

.toggle__knob {
  position: absolute;
  top: 2px;
  left: 2px;
  width: 12px;
  height: 12px;
  border-radius: 50%;
  background: var(--color-text-secondary);
  transition: transform var(--duration-fast) var(--ease-out),
    background var(--duration-fast) var(--ease-out);
}

/* 点亮态：accent 底 + 微光 + 圆钮右移变深色 */
.toggle input:checked + .toggle__track {
  background: var(--color-accent);
  border-color: var(--color-accent);
  box-shadow: 0 0 6px var(--color-accent-soft);
}

.toggle input:checked + .toggle__track .toggle__knob {
  transform: translateX(16px);
  background: #0D0D0F;
}

.toggle__label { transition: color var(--duration-fast) var(--ease-out); }

.toggle:has(input:checked) .toggle__label { color: var(--color-accent); }
.toggle:has(input:checked) { color: var(--color-accent); }

/* 左栏头部：开关 + 文字装进胶囊壳（同原 chat-header-btn 壳） */
.chat-header-mode {
  padding: 4px 10px;
  background: transparent;
  border: var(--border-subtle);
  border-radius: var(--radius-sm);
  transition: all var(--duration-fast) var(--ease-out);
  /* 2026-09-12 用户拍板：不再 order:-1 左移——开关回标题右侧按钮组 */
}

.chat-header-mode:hover { border-color: var(--color-accent-soft); }

.chat-header-mode:has(input:checked) { border-color: var(--color-accent-soft); }

/* 登录后：个人中心（B10 验证反馈 2026-08-17）——黄底醒目按钮 */
.chat-header-btn.btn-profile {
  background: var(--color-accent);
  border-color: var(--color-accent);
  color: #0D0D0F;
  font-weight: 600;
}

.chat-header-btn.btn-profile:hover {
  background: var(--color-accent-soft);
  border-color: var(--color-accent-soft);
  color: #0D0D0F;
}

.chat-panel-messages {
  flex: 1;
  overflow-y: auto;
  padding: var(--space-4) var(--space-4);
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
}

.chat-panel-input {
  display: flex;
  gap: var(--space-2);
  /* B154-2 二轮 #8（2026-09-16）：修正A 左 padding 清零（工具簇贴死左边界）+
     修正B align-items:flex-end（展开/发送列 stretch 撑满行高、发送贴底） */
  padding: var(--space-3) var(--space-4) var(--space-3) 0;
  border-top: var(--border-subtle);
  flex-shrink: 0;
  align-items: flex-end;
}

.home-chat-input {
  flex: 1;
  min-height: 40px;
  /* B154-2 二轮 #8（2026-09-16）：1-10 行自适应——高度由 autosizeChatTextarea
     统管（10 行封顶 + 内部滚动），CSS 不再设 max-height（避免与 JS 上限冲突） */
  padding: var(--space-2) var(--space-3);
  background: var(--color-bg-deep);
  border: var(--border-subtle);
  border-radius: var(--radius-sm);
  color: var(--color-text-primary);
  font-family: var(--font-sans);
  font-size: var(--text-sm);
  line-height: var(--leading-normal);
  resize: none;
  transition: border-color var(--duration-fast) var(--ease-out);
}

.home-chat-input:focus {
  outline: none;
  border-color: var(--color-accent-soft);
}

.home-chat-input::placeholder {
  color: var(--color-text-tertiary);
}

.home-chat-send {
  width: 40px;
  height: 40px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--color-accent-subtle);
  border: none;
  border-radius: var(--radius-sm);
  color: var(--color-accent);
  cursor: pointer;
  flex-shrink: 0;
  transition: background var(--duration-fast) var(--ease-out);
}

.home-chat-send:hover {
  background: var(--color-accent-glow);
}

/* === Center: Lesson Renderer === */

.lesson-panel {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: stretch;
  justify-content: flex-start;
  background: var(--color-bg-deep);
  position: relative;
  overflow: hidden;
}

.lesson-empty {
  text-align: center;
  animation: fadeIn var(--duration-slow) var(--ease-out);
}

/* lessonloop 二轮 ②（2026-09-01 实景取证）：阶段卡宿主随内容区拉满——
   .lesson-content 行向 flex 使 #lesson-empty 收缩为内容宽（B79 标签重构
   遗留），阶段卡 width:100% 无宿主可依（实测 313px，与 R0c 640 列不符）。
   恢复全宽后各子内容自带宽约束（progress 520 / r0d 640 / 空态居中），
   视觉不受影响。 */
#lesson-empty {
  width: 100%;
}

.lesson-empty-icon {
  margin-bottom: var(--space-4);
  opacity: 0.4;
}

.lesson-empty-text {
  font-size: var(--text-sm);
  color: var(--color-text-tertiary);
}

/* B147-c（2026-09-08 用户反馈）：学习区主区「生成我的路线」按钮
   （与右下角行动条同入口——创建工作台） */
.lesson-empty__create {
  margin-top: var(--space-4);
  padding: 8px 22px;
  font-size: var(--text-sm);
  font-family: inherit;
  color: var(--color-text-primary);
  background: var(--color-accent-subtle);
  border: 1px solid var(--color-accent-soft);
  border-radius: var(--radius-full);
  cursor: pointer;
  transition: background var(--duration-fast) var(--ease-out), border-color var(--duration-fast) var(--ease-out);
}
.lesson-empty__create:hover { background: var(--color-accent-glow); }

/* Loading spinner for center panel
   B154-1 第四轮：CSS 圆环 spinner 已退役——加载一律用 avvmo 三角
   （loading-indicator.js AVVMO_SPINNER_HTML），双图标问题根除。 */

/* 生成进度（B8 修正 2：阶段提示 + 已等待计时；B10 验证反馈：三行结构——
   标签一行 / 思考 3 行实时内容 / 计时固定一行；B12：思考区固定 3 行高度）
   */
.lesson-gen-progress {
  margin-top: var(--space-3);
  font-size: var(--text-xs, 12px);
  color: var(--color-text-secondary, #aaa);
  /* B13 实测修复（CDP 2026-08-17）：根因 = 进度块随 #lesson-empty 拉满 800px，
     每行 ~66 字视觉过长 → 限宽 ~43 字/行 + 居中 */
  max-width: 520px;
  margin-left: auto;
  margin-right: auto;
}

/* 第一行：阶段标签 + 我正在想： */
.lesson-gen-progress .progress-label {
  font-weight: 600;
  color: var(--color-accent, #C4A265);
}

/* 中间：实时思考固定 3 行（高度恒定不跳动；单行强制换行、超出截断） */
.lesson-gen-progress .progress-think {
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
  line-height: 1.5;
  height: calc(1.5em * 3); /* 内容不足 3 行也保持 3 行占位 */
  word-break: break-all;
  overflow-wrap: anywhere;
  margin-top: 2px;
}

/* 末行固定：「已等待 N 秒」——秒数跳动不推挤思考行 */
.lesson-gen-progress .progress-timer {
  margin-top: 4px;
  color: var(--color-text-muted, #888);
}

/* === 学习区 chrome（B146-a a4：课级条 + 五阶段条 + sticky 行动条，tab 栏退役） === */
#lesson-chrome {
  flex: none;
  padding: var(--space-1) var(--space-2) 0;
  background: var(--color-bg-deep);
  border-bottom: var(--border-subtle);
}
#lesson-level-bar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-1);
  padding: var(--space-1) 0;
}
#lesson-level-bar .ll-item {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 2px var(--space-2);
  font-size: var(--text-xs, 12px);
  color: var(--color-text-secondary, #aaa);
  background: none;
  border: 1px solid transparent;
  border-radius: var(--radius-sm, 6px);
  cursor: pointer;
  white-space: nowrap;
}
#lesson-level-bar .ll-item:hover { color: var(--color-text, #eee); }
#lesson-level-bar .ll-item--active {
  color: var(--color-text, #eee);
  background: var(--color-bg-card, #1E1E22);
  border-color: var(--color-border);
}
#lesson-level-bar .ll-item--done { color: var(--color-accent, #C4A265); }
#lesson-level-bar .ll-item--done:hover { color: var(--color-accent); }
#lesson-level-bar .ll-item--locked { color: var(--color-text-tertiary); opacity: .55; cursor: not-allowed; }
#lesson-level-bar .ll-item--current { color: var(--color-text, #eee); }
#lesson-level-bar .ll-dot { font-size: 10px; }
#lesson-level-bar .ll-item--current .ll-dot,
#lesson-level-bar .ll-item--next .ll-dot { color: var(--color-accent); }
/* B146 五轮反馈 #2（2026-09-06）：下一课生成期节点——当前态同款点亮 */
#lesson-level-bar .ll-item--generating { color: var(--color-text, #eee); }
#lesson-level-bar .ll-item--generating .ll-dot { color: var(--color-accent); }
/* B146 三轮反馈 #1（2026-09-06 用户实测）：课级条折叠——其余步收成省略号 */
#lesson-level-bar .ll-ellipsis {
  color: var(--color-text-tertiary);
  font-size: var(--text-xs, 12px);
  padding: 0 2px;
  user-select: none;
}

/* 五阶段条（journeyStageBarHTML 渲染在父文档）——B146 十轮反馈（2026-09-07
   用户实测）：一条线节点式——五个节点圆点由线段串联，当前阶段高亮
   （accent 光环 + 加粗标签），已完成节点填充 ✓，未来灰空；打勾 pill
   风格退役 */
#journey-stage-bar-host .journey-stage-bar {
  display: flex;
  align-items: flex-start;
  /* B146 十一轮反馈（2026-09-07 用户实测）：overflow-x:auto 使容器成为
     垂直裁剪容器——当前节点光环（box-shadow 上扩 9px）被顶部裁掉、看上
     去像被上方课级条行挡住。顶部留出光环空间（12px 覆盖光环 9px + 轻仪式
     js-flash 14px 的裁边余量），侧边留空保护首尾节点左右光环。 */
  padding: 12px var(--space-1) var(--space-2);
  overflow-x: auto;
}
#journey-stage-bar-host .js-item {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 5px;
  flex: 0 0 auto;
  padding: 0;
  font-size: var(--text-xs, 12px);
  color: var(--color-text-secondary, #aaa);
  background: none;
  border: none;
  cursor: pointer;
  white-space: nowrap;
}
#journey-stage-bar-host .js-seg {
  flex: 1 1 20px;
  min-width: 20px;
  height: 2px;
  margin-top: 8px; /* 对齐节点圆心（dot 18px → 圆心 9px − 线高一半 1px） */
  border-radius: 999px;
  background: var(--color-border);
}
#journey-stage-bar-host .js-seg--reached { background: var(--color-accent); }
#journey-stage-bar-host .js-dot {
  width: 18px;
  height: 18px;
  box-sizing: border-box;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 10px;
  line-height: 1;
  border: 2px solid var(--color-border);
  color: var(--color-text-tertiary, #777);
}
#journey-stage-bar-host .js-item:hover .js-label { color: var(--color-text, #eee); }
#journey-stage-bar-host .js-item--done .js-dot {
  border-color: var(--color-accent);
  background: var(--color-accent);
  color: #16130c;
}
#journey-stage-bar-host .js-item--current .js-dot {
  border-color: var(--color-accent);
  box-shadow: 0 0 8px 1px var(--color-accent);
  color: var(--color-accent);
  font-weight: 700;
}
#journey-stage-bar-host .js-item--current.js-item--done .js-dot {
  background: var(--color-accent);
  color: #16130c;
}
#journey-stage-bar-host .js-item--current .js-label {
  color: var(--color-text, #eee);
  font-weight: 600;
}
#journey-stage-bar-host .js-item--locked { opacity: .45; cursor: not-allowed; }

/* sticky 行动条：面板底栏（左状态 + 右主按钮），不随 iframe 滚动消失（spec §3.4） */
#action-bar-host { flex: none; }
#action-bar-host .action-bar {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: var(--space-2);
  padding: var(--space-2);
  border-top: var(--border-subtle);
  background: var(--color-bg-deep);
}
#action-bar-host .ab-status {
  font-size: var(--text-xs, 12px);
  color: var(--color-text-secondary, #aaa);
  margin-right: auto;
}
#action-bar-host .ab-main {
  padding: var(--space-1) var(--space-3);
  font-size: var(--text-sm, 13px);
  border: 1px solid var(--color-accent);
  border-radius: 999px;
  background: var(--color-accent);
  color: #16130c;
  cursor: pointer;
  white-space: nowrap;
}
#action-bar-host .ab-main:hover { filter: brightness(1.08); }
#action-bar-host .ab-main--disabled {
  background: transparent;
  color: var(--color-text-tertiary);
  border-color: var(--color-border);
  cursor: not-allowed;
}
#action-bar-host .ab-main--disabled:hover { filter: none; }
/* 260927 用户拍板：轮间反馈建议收口 → 「完成这一步」按钮高亮闪烁
   （纯视觉引导，不阻碍继续练更多轮；完成/重渲染后类随行动条重建消失） */
@keyframes ab-go-pulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(212, 175, 55, 0.55); }
  50% { box-shadow: 0 0 0 7px rgba(212, 175, 55, 0); filter: brightness(1.15); }
}
#action-bar-host .ab-main--pulse { animation: ab-go-pulse 1.4s ease-in-out infinite; }

/* ============================================================
   B146-a a5（2026-09-06）：双档仪式（spec §6）——零外部资源，
   全部内联 SVG/CSS 动画
   ============================================================ */

/* --- 轻仪式：阶段条点亮（≤0.5s）+ 彩纸/表情 --- */
/* 十轮反馈：节点式布局下按钮不再有底色/边框——点亮 = 光环闪烁 + 圆点弹跳 */
#journey-stage-bar-host .js-item--just-done {
  animation: js-flash 0.5s ease-out;
}
#journey-stage-bar-host .js-item--just-done .js-dot { animation: js-pop 0.5s ease-out; }
@keyframes js-flash {
  0% { box-shadow: 0 0 0 0 var(--color-accent); }
  60% { box-shadow: 0 0 12px 2px var(--color-accent); }
  100% { box-shadow: 0 0 0 0 transparent; }
}
@keyframes js-pop {
  0% { transform: scale(0.4); }
  55% { transform: scale(1.5); }
  100% { transform: scale(1); }
}

/* 行动条上方的轻彩纸/表情（定位基准 = action-bar-host） */
#action-bar-host { position: relative; }
#action-bar-host .light-confetti {
  position: absolute;
  bottom: calc(100% - 4px);
  left: 50%;
  margin-left: var(--dx, 0px);
  font-size: 10px;
  color: var(--color-accent);
  filter: hue-rotate(var(--hue, 0deg));
  transform: rotate(var(--rot, 90deg));
  pointer-events: none;
  animation: light-confetti-fall 0.5s ease-in var(--delay, 0ms) forwards;
}
@keyframes light-confetti-fall {
  0% { opacity: 0; translate: 0 6px; rotate: 0deg; }
  30% { opacity: 1; }
  100% { opacity: 0; translate: 0 34px; rotate: 300deg; }
}
#action-bar-host .light-emoji {
  position: absolute;
  bottom: calc(100% - 6px);
  right: 84px;
  font-size: 20px;
  pointer-events: none;
  animation: light-emoji-float 0.5s ease-out forwards;
}
@keyframes light-emoji-float {
  0% { opacity: 0; transform: scale(0.4) translateY(6px); }
  40% { opacity: 1; transform: scale(1.25) translateY(0); }
  100% { opacity: 0; transform: scale(1) translateY(-16px); }
}

/* --- 重仪式：主内容区中央 overlay（遮罩不打断数据） --- */
#ceremony-host .ceremony-overlay {
  position: fixed;
  inset: 0;
  z-index: 300;
  display: flex;
  align-items: center;
  justify-content: center;
  background: rgba(10, 8, 4, 0.66);
}
#ceremony-host .ceremony-card {
  position: relative;
  width: min(320px, calc(100vw - 48px));
  padding: var(--space-4) var(--space-3);
  background: var(--color-bg-deep);
  border: 1px solid var(--color-accent);
  border-radius: var(--radius-md, 10px);
  text-align: center;
  overflow: hidden;
  cursor: default;
}
#ceremony-host .ceremony-card--ready { cursor: pointer; animation: cer-card-pulse 1.2s ease-in-out infinite; }
@keyframes cer-card-pulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(196, 162, 101, 0); }
  50% { box-shadow: 0 0 18px 2px rgba(196, 162, 101, 0.45); }
}
#ceremony-host .ceremony-svg { display: flex; align-items: center; justify-content: center; min-height: 128px; }
#ceremony-host .ceremony-hint {
  margin: var(--space-2) 0 0;
  font-size: var(--text-xs, 12px);
  color: var(--color-text-secondary, #aaa);
}
#ceremony-host .ceremony-prize {
  margin: 0;
  font-size: var(--text-lg, 17px);
  font-weight: 600;
  color: var(--color-accent);
}
#ceremony-host .ceremony-title {
  margin: var(--space-1) 0 var(--space-3);
  font-size: var(--text-base, 15px);
  color: var(--color-text, #eee);
}
#ceremony-host .ceremony-cta {
  padding: var(--space-1) var(--space-4);
  font-size: var(--text-sm, 13px);
  border: 1px solid var(--color-accent);
  border-radius: 999px;
  background: var(--color-accent);
  color: #16130c;
  cursor: pointer;
}
#ceremony-host .ceremony-cta:hover { filter: brightness(1.08); }

/* 揭示：① 探索动画 → 隐藏，② 奖品浮现（脉冲停止） */
#ceremony-host .ceremony-card--revealed { animation: none; cursor: default; }
#ceremony-host .ceremony-card--revealed .ceremony-stage-1 { display: none; }
#ceremony-host .ceremony-card--revealed .ceremony-stage-2 { display: block; animation: cer-reveal 0.35s ease-out; }
@keyframes cer-reveal {
  from { opacity: 0; transform: translateY(10px) scale(0.9); }
  to { opacity: 1; transform: none; }
}

/* 三选一探索动画（自动播 ≤2s，纯 CSS） */
#ceremony-host .cer-tree-crown { transform-origin: 50% 100%; animation: cer-tree-shake 0.9s ease-in-out 2; }
@keyframes cer-tree-shake {
  0%, 100% { transform: rotate(0deg); }
  30% { transform: rotate(-9deg); }
  60% { transform: rotate(8deg); }
  80% { transform: rotate(-4deg); }
}
#ceremony-host .cer-tree-fall { opacity: 0; animation: cer-seed-drop 1.6s ease-in 0.6s 1 forwards; }
@keyframes cer-seed-drop {
  0% { opacity: 0; transform: translateY(-40px); }
  25% { opacity: 1; }
  100% { opacity: 1; transform: translateY(44px); }
}
#ceremony-host .cer-shovel-head { transform-origin: 70% 90%; animation: cer-shovel-swing 0.8s ease-in-out 2; }
@keyframes cer-shovel-swing {
  0%, 100% { transform: rotate(0deg); }
  40% { transform: rotate(-24deg); }
  70% { transform: rotate(10deg); }
}
#ceremony-host .cer-shovel-spark { opacity: 0; animation: cer-seed-spark 1.4s ease-out 0.7s 1 forwards; }
@keyframes cer-seed-spark {
  0% { opacity: 0; transform: translateY(-8px) scale(0.3); }
  35% { opacity: 1; transform: translateY(-14px) scale(1.15); }
  100% { opacity: 1; transform: translateY(8px) scale(1); }
}
#ceremony-host .cer-cave-seed { opacity: 0; animation: cer-seed-glow 1.5s ease-out 0.5s 1 forwards; }
@keyframes cer-seed-glow {
  0% { opacity: 0; transform: scale(0.3); filter: drop-shadow(0 0 0 rgba(139, 195, 74, 0)); }
  45% { opacity: 1; transform: scale(1.2); filter: drop-shadow(0 0 8px rgba(139, 195, 74, 0.9)); }
  100% { opacity: 1; transform: scale(1); filter: drop-shadow(0 0 4px rgba(139, 195, 74, 0.55)); }
}

/* 大撒花（揭示时一次性 30 粒三角） */
#ceremony-host .ceremony-confetti {
  position: absolute;
  inset: 0;
  pointer-events: none;
  overflow: hidden;
}
#ceremony-host .heavy-confetti {
  position: absolute;
  top: -12px;
  left: 50%;
  margin-left: var(--dx, 0px);
  font-size: 11px;
  color: var(--color-accent);
  filter: hue-rotate(var(--hue, 0deg));
  transform: rotate(var(--rot, 90deg));
  animation: heavy-confetti-fall 1.4s ease-in var(--delay, 0ms) forwards;
}
@keyframes heavy-confetti-fall {
  0% { opacity: 1; translate: 0 0; rotate: 0deg; }
  100% { opacity: 0; translate: 0 320px; rotate: 420deg; }
}

/* 标签内容区（iframe 常驻 + 共享 lesson-empty 占位） */
.lesson-content {
  flex: 1;
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 0;
}

.lesson-frame {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  border: none;
  background: var(--color-bg-deep);
}

/* === Right: Dashboard === */

.dashboard-panel {
  width: var(--dashboard-width);
  min-width: 240px;
  display: flex;
  flex-direction: column;
  border-left: var(--border-subtle);
  background: var(--color-bg-surface);
  overflow: hidden; /* B79：滚动交给 .dashboard-scroll，面板自身不滚 */
}

/* B79（2026-08-26）：结构改造——复用左栏 .chat-panel 结构（头部普通流 +
   独立滚动区）。B57/B75 两版 sticky 补丁（负 margin + 描边）都没能兜住
   滚动缝隙，彻底弃用 sticky：头部永远不动，只有下方 .dashboard-scroll 滚动。 */
.dashboard-panel-header {
  display: flex;
  justify-content: flex-end;
  gap: var(--space-2);
  align-items: center;
  flex-shrink: 0;
  padding: var(--space-3) var(--space-4);
  border-bottom: var(--border-subtle);
  background: var(--color-bg-surface);
}

/* B79：右侧面板唯一滚动区（同 .chat-panel-messages 的定位）。 */
.dashboard-scroll {
  flex: 1;
  overflow-y: auto;
  display: flex;
  flex-direction: column;
  gap: var(--space-5);
  padding: var(--space-4);
}

.dashboard-section {
  padding: var(--space-4); /* B139 节点①：+4（原 space-3，D7 留白） */
  background: var(--color-bg-deep);
  border-radius: var(--radius-md);
  border: var(--border-subtle);
}

.dashboard-heading {
  font-size: var(--text-xs);
  font-weight: var(--weight-medium);
  color: var(--color-text-tertiary);
  text-transform: uppercase;
  letter-spacing: 0.06em;
  margin-bottom: var(--space-3);
}

.dashboard-stat {
  margin-bottom: var(--space-3);
}

.dashboard-stat:last-child {
  margin-bottom: 0;
}

.dashboard-stat-label {
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
  margin-bottom: 2px;
}

.dashboard-stat-value {
  font-size: var(--text-sm);
  color: var(--color-text-primary);
  line-height: var(--leading-normal);
}

/* Dashboard 5-dimension keywords — concise, bold */
.dashboard-stat-value--keyword {
  font-weight: var(--font-medium);
  font-size: var(--text-base);
  letter-spacing: -0.01em;
}

.dashboard-empty-text {
  font-size: var(--text-xs);
  color: var(--color-text-disabled);
  font-style: italic;
}

/* Tags (for teachable moments in dashboard) */
.tag {
  display: inline-block;
  padding: 2px 8px;
  margin: 2px 4px 2px 0;
  background: var(--color-accent-subtle);
  color: var(--color-accent);
  border-radius: var(--radius-full);
  font-size: var(--text-xs);
  white-space: nowrap;
}

/* B36 迭代（2026-08-20 用户反馈）：学习内容条目卡片化——
   内部分组（学习路线 / 学习记录 / 术语掌握）+ 题目/简介整卡可点 */
.lc-group { margin-bottom: 10px; }
.lc-group__title {
  font-size: var(--text-xs, 12px);
  font-weight: 600;
  color: var(--color-text-muted, #888);
  margin: 2px 0 6px;
}
.lc-card {
  background: var(--color-bg-card, #1E1E22);
  border: var(--border-subtle);
  border-radius: 8px;
  padding: 8px 10px;
  margin-bottom: 6px;
}
.lc-card[role="button"] { cursor: pointer; }
.lc-card[role="button"]:hover { border-color: var(--color-accent); }
.lc-card__title {
  font-size: var(--text-sm, 13px);
  font-weight: 600;
  line-height: var(--leading-normal);
}
.lc-card__desc {
  margin-top: 3px;
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
  line-height: var(--leading-normal);
}
/* 术语卡：无跳转目标——更轻样式，区别于可点卡片 */
.lc-card--term { background: transparent; }
/* 节点 11（2026-08-24）：未登录术语卡置灰不可点（无 role，hover 不高亮；title 提示登录） */
.lc-card--locked { opacity: 0.5; cursor: not-allowed; }
/* 新记录出现时复用 dashboard dash-pulse 光晕闪烁（第一步标记完成瞬间） */
.lc-card--pulse {
  animation: dash-pulse 0.9s var(--ease-in-out) 3;
}

/* 标记本阶段完成按钮已移出 Dashboard——按 2026-08-17 裁决移至
   第一步最后（J4 成果页 + 弹窗确认 → 完成后进入下一课时）。 */

/* === Home Quick Replies === */

#home-quick-replies {
  padding: var(--space-2) var(--space-4);
  justify-content: flex-start;
  border-top: var(--border-subtle);
}

/* B60（2026-08-24）：真因修复——.quick-replies 的 display:flex 会压过 UA 的
   [hidden]（display:none），home.js 全程用 hidden 属性控制 chips 显隐 → 从未生效，
   chips 一直可见（纯聊/＋ 历史列表下方同此因）。显式补回（hub-panel 先例 B34③） */
#home-quick-replies[hidden] {
  display: none;
}

/* === Chat Action Button (inline gold CTA in message bubble) === */

.chat-action-btn {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  margin-top: 10px;
  padding: 8px 20px;
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
  font-family: var(--font-sans);
  color: var(--color-bg-deep);
  background: var(--color-accent);
  border: none;
  border-radius: var(--radius-md);
  cursor: pointer;
  transition: background 0.2s var(--ease-out),
              transform 0.2s var(--ease-out),
              opacity 0.2s var(--ease-out);
  white-space: nowrap;
}

.chat-action-btn:hover:not(:disabled) {
  background: var(--color-accent-soft);
  transform: translateY(-1px);
}

.chat-action-btn:disabled {
  opacity: 0.5;
  cursor: not-allowed;
  transform: none;
}

/* B148-0 A5（2026-09-08）：多按钮动作行——首按钮主金、其余次级描边 */
.chat-action-row {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
  margin-top: 10px;
}

.chat-action-row .chat-action-btn {
  margin-top: 0;
}

.chat-action-btn--secondary {
  color: var(--color-accent);
  background: transparent;
  border: 1px solid var(--color-accent);
}

.chat-action-btn--secondary:hover:not(:disabled) {
  background: var(--color-accent-subtle);
}

/* === Chat Hint — gold-accent reassurance bubble === */

.chat-hint {
  background: var(--color-accent-subtle);
  border-left: 3px solid var(--color-accent);
  border-radius: 0 var(--radius-md) var(--radius-md) 0;
  padding: 14px 18px;
  font-size: var(--text-sm);
  line-height: var(--leading-relaxed);
  color: var(--color-text-secondary);
  animation: fadeIn var(--duration-normal) var(--ease-out) forwards;
}

.chat-hint strong {
  color: var(--color-accent);
  font-weight: var(--weight-medium);
}

/* === Dashboard Pulse (Item 5: "去逛逛" highlight) === */

@keyframes dash-pulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(196, 162, 101, 0); }
  50% { box-shadow: 0 0 0 4px var(--color-accent-glow); border-color: var(--color-accent); }
}

.dashboard-section--pulse {
  animation: dash-pulse 0.9s var(--ease-in-out) 3;
}

/* === Dashboard Info Tooltips === */

.dashboard-heading-row {
  display: inline-flex;
  align-items: center;
  gap: var(--space-1);
}

.dash-info {
  cursor: help;
  color: var(--color-text-tertiary);
  font-size: var(--text-sm);
  font-weight: var(--weight-normal);
  position: relative;
}

.dash-info:hover::after {
  content: attr(data-tip);
  position: absolute;
  left: 0;
  top: calc(100% + 6px);
  z-index: 30;
  width: 190px;
  background: var(--color-bg-overlay);
  color: var(--color-text-primary);
  font-size: var(--text-xs);
  line-height: var(--leading-relaxed);
  padding: var(--space-2) var(--space-3);
  border-radius: var(--radius-sm);
  border: var(--border-subtle);
  box-shadow: var(--shadow-md);
}


@media (max-width: 640px) {
  .chat-panel-header {
    gap: var(--space-1); /* B153 ⑤：解壳后头部间隙收紧（原 actions gap 语义承接） */
  }

  .chat-header-btn,
  .chat-header-mode {
    padding: 3px 8px;
    font-size: var(--text-xs, 12px);
  }

  #home-quick-replies {
    padding: var(--space-2);
  }

  .quick-reply-chip {
    padding: 4px 10px;
    font-size: var(--text-xs, 12px);
  }

  .modal {
    padding: var(--space-5);
  }

  /* B154-2 三轮 #12：图鉴移动端收紧——全屏口径下无 modal 内边距，
     旧负 margin 覆写退役；tab 字号/间距收紧 + tab 行允许换行防溢出 */
  .codex__topbar { padding: var(--space-2) var(--space-3); gap: var(--space-2); }
  .codex__topbar-title { font-size: var(--text-sm); }
  .codex__tabbar { gap: var(--space-1); padding: var(--space-2) var(--space-3) var(--space-2); }
  .codex__tabs { flex-wrap: wrap; gap: 4px; }
  .codex__tab { font-size: var(--text-xs); padding: 3px 10px; }
  .codex__subbar { gap: 4px; }
  .codex__sub-toggle,
  .codex__sub { font-size: var(--text-xs); padding: 2px 8px; }
  .codex__content { padding: var(--space-2) var(--space-3) var(--space-5); gap: var(--space-3); }
  .codex__section { padding: var(--space-2) var(--space-3); }
  .codex__head { font-size: var(--text-xs); margin-bottom: var(--space-1); }
  .codex__head-desc { font-size: var(--text-xs); }
  .codex__row { gap: var(--space-1) var(--space-2); padding: var(--space-1) var(--space-2); }
  .codex__icon { font-size: 16px; }
  .codex__icon svg { width: 16px; height: 16px; }
  .codex__skins { gap: 6px; }
  .codex__skin { padding: 6px; }
}

/* .btn-icon 基础样式——?debug 调试挂载按钮（debug-panel 放大镜）使用；
   B132（2026-09-03）：#home-bottom-right 容器及其媒体查询随默认隐藏删除，
   此规则保留（api-settings 自带注入版；此处供 debug-panel 按钮复用） */
.btn-icon {
  background: none;
  border: none;
  color: var(--color-text-secondary, #aaa);
  cursor: pointer;
  font-size: var(--text-base, 14px);
  padding: var(--space-1, 4px);
}
.btn-icon:hover { color: var(--color-text, #eee); }

/* === Hub 主菜单（节点 8b-1 2026-08-20） ===
   中+右区域变个人中心；右滑入动效；左栏对话保留。
   打开时 home.js 隐藏 .lesson-panel + .dashboard-panel。 */

.hub-panel {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  background: var(--color-bg-deep);
  overflow: hidden;
  animation: hub-slide-in var(--duration-normal) var(--ease-out);
}

/* display:flex 会压过 UA 的 [hidden]——显式补回（home.js 用 hidden 属性控制显隐） */
.hub-panel[hidden] { display: none; }

/* 节点 14（2026-08-24）：hub 内瞬时操作通知（删除成功等）——
   fixed 右上浮层，~4.5s 自动消失；[hidden] 显式补回（防 display 压过，B60 同款陷阱） */
.hub-notice {
  position: fixed;
  top: 20px;
  right: 24px;
  max-width: 420px;
  background: var(--color-bg-overlay);
  border: var(--border-normal);
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-lg);
  padding: var(--space-3) var(--space-5);
  font-size: var(--text-sm);
  color: var(--color-text-primary);
  z-index: 95;
  pointer-events: none; /* 非阻断：不挡右上角「个人中心」按钮（2026-09-13 用户实报） */
  animation: hub-slide-in var(--duration-fast) var(--ease-out);
}
.hub-notice[hidden] { display: none; }

@keyframes hub-slide-in {
  from { transform: translateX(32px); opacity: 0; }
  to   { transform: translateX(0); opacity: 1; }
}

.hub-header {
  flex-shrink: 0;
  border-bottom: var(--border-subtle);
  background: var(--color-bg-surface);
  padding: var(--space-3) var(--space-4);
}

.hub-header__row {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  flex-wrap: wrap;
}

/* B154-1 第二轮（2026-09-13 拍板）：展示区两行（行1 名称+A币 / 行2 六槽+a珠），
   标题行下、导航行上；行内两端分布 */
.hub-header__top {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
  margin-bottom: var(--space-2);
}

.hub-back {
  background: transparent;
  border: var(--border-subtle);
  border-radius: var(--radius-sm);
  color: var(--color-text-secondary);
  cursor: pointer;
  font-family: var(--font-sans);
  font-size: var(--text-xs);
  padding: 4px 10px;
  transition: all var(--duration-fast) var(--ease-out);
}
.hub-back:hover { border-color: var(--color-accent-soft); color: var(--color-accent); }

.hub-title {
  font-size: var(--text-md);
  font-weight: var(--weight-medium);
  color: var(--color-text-primary);
}

.hub-nav {
  display: flex;
  /* B154-1 第二轮：独立成行（原与标题同行 flex:1 + margin-left），顶部淡分隔 */
  width: 100%;
  gap: var(--space-2);
  margin-top: var(--space-1);
  padding-top: var(--space-2);
  border-top: var(--border-subtle);
  align-items: center;
  justify-content: space-evenly;
}

.hub-nav__item {
  background: transparent;
  border: none;
  border-radius: var(--radius-sm);
  color: var(--color-text-secondary);
  cursor: pointer;
  font-family: var(--font-sans);
  font-size: var(--text-sm);
  padding: 6px 12px;
  transition: all var(--duration-fast) var(--ease-out);
}
.hub-nav__item:hover { color: var(--color-text-primary); background: var(--color-bg-elevated); }
.hub-nav__item--active {
  color: var(--color-accent);
  background: var(--color-accent-subtle);
  font-weight: var(--weight-medium);
}
.hub-nav__item--create {
  font-size: var(--text-lg);
  padding: 2px 12px;
  line-height: 1.4;
}

.hub-view {
  flex: 1;
  overflow-y: auto;
  padding: var(--space-5) var(--space-6);
}

/* --- 看板四格（B148-0b §4.2：旧统计条退役） --- */

.hub-board-zone {
  position: relative;
  margin-bottom: var(--space-4);
}

.hub-board {
  display: grid;
  /* B154-1 反馈批：4 → 3 格（连续学习并入融合轮播块） */
  grid-template-columns: 1.2fr 1.3fr 1.3fr;
  gap: var(--space-3);
  margin-bottom: var(--space-3);
}

.hub-board__cell {
  background: var(--color-bg-surface);
  border: var(--border-subtle);
  border-radius: var(--radius-md);
  padding: var(--space-3) var(--space-4);
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
  min-width: 0;
  font: inherit;
  color: inherit;
  /* B148-1 #1（2026-09-08 用户实报）：四格内容上下/左右居中（数据居卡中心） */
  align-items: center;
  justify-content: center;
  text-align: center;
}

button.hub-board__cell { cursor: pointer; }
button.hub-board__cell:hover { border-color: var(--color-accent); }

.hub-board__label {
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
}

/* B1-1 总时长最醒目：字号最大 */
.hub-board__total {
  font-size: var(--text-xl);
  font-weight: var(--weight-bold);
  color: var(--color-accent);
  line-height: 1.1;
}

/* B1-2 连续学习样式随 B154-1 反馈批并入融合轮播块（.hub-fusion__streak）——退役 */

/* B1-3 本月路线 + 徽章 */
.hub-board__routes {
  font-size: var(--text-lg);
  font-weight: var(--weight-medium);
  color: var(--color-text-primary);
}

.hub-board__routes-unit { font-size: var(--text-sm); color: var(--color-text-secondary); }

/* B148-1 #1：徽章与完成条数同一行居中 */
.hub-board__routes-row {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  min-width: 0;
}

.hub-board__badge { width: 26px; height: 26px; color: var(--color-accent); flex: none; }
.hub-board__badge svg { width: 100%; height: 100%; }
.hub-board__badge--none { color: var(--color-text-tertiary); }
.hub-board__badge-shadow { opacity: 0.7; }

.hub-board__badge-name {
  font-size: var(--text-xs);
  color: var(--color-text-secondary);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* B1-4 本周步骤三角（5 只 × Y 切 3 角）
   B148-1 #1/#2（2026-09-08 用户实报）：整体居中；换行防溢出
   （窄卡/真机 2×2 网格时 5 只不再越出卡片与屏幕右缘）。
   B154-2 待优化 #2（2026-09-15 夜批）：一行排列（不再换行）——
   gap 6→8px 紧凑美观；第 2/4 只倒置（正-倒-正-倒-正）。 */
.hub-board__tris {
  display: flex;
  flex-wrap: nowrap;
  justify-content: center;
  gap: 8px;
  align-items: flex-end;
  padding: 2px 0;
}

/* B154-2 待优化 #2：三角序数壳可定位翻转（svg 层摆动动画自带 transform，
   倒置须挂在壳上才不会被 rotate 覆盖）；第 2/4 只倒置 */
.hub-tri-box { display: inline-flex; }
.hub-tri-box--1,
.hub-tri-box--3 { transform: scaleY(-1); }

.hub-board__cell--weekly[data-hub-claim-ticket] { cursor: pointer; }
.hub-board__cell--weekly[data-hub-claim-ticket]:hover { border-color: var(--color-accent); }

.hub-tri { width: 34px; height: 30px; flex: none; }

.hub-tri__seg { fill: var(--color-bg-deep); stroke: var(--color-text-tertiary); stroke-width: 1; }
.hub-tri__seg--on { fill: var(--color-accent); stroke: var(--color-accent); transition: fill 0.25s ease; }

/* 动效分级：1 只整三角=微光、2-3 只=发光+轻摆、4-5 只=强发光+摆动 */
.hub-board__tris--t1 .hub-tri__seg--on { animation: tri-glow-soft 2.4s ease-in-out infinite; }
.hub-board__tris--t2 .hub-tri__seg--on { animation: tri-glow 2s ease-in-out infinite; }
.hub-board__tris--t2 .hub-tri { animation: tri-sway-soft 3s ease-in-out infinite; }
.hub-board__tris--t3 .hub-tri__seg--on { animation: tri-glow-strong 1.5s ease-in-out infinite; }
.hub-board__tris--t3 .hub-tri { animation: tri-sway 2.2s ease-in-out infinite; transform-origin: 50% 90%; }
/* B154-1 第二轮：三角套 .hub-tri-box 序号壳（窄屏 2+3 换行）——延迟改壳定位 */
.hub-board__tris--t3 .hub-tri-box:nth-child(2) .hub-tri { animation-delay: 0.15s; }
.hub-board__tris--t3 .hub-tri-box:nth-child(3) .hub-tri { animation-delay: 0.3s; }
.hub-board__tris--t3 .hub-tri-box:nth-child(4) .hub-tri { animation-delay: 0.45s; }
.hub-board__tris--t3 .hub-tri-box:nth-child(5) .hub-tri { animation-delay: 0.6s; }

@keyframes tri-glow-soft {
  0%, 100% { filter: drop-shadow(0 0 0 rgba(255, 176, 32, 0)); }
  50% { filter: drop-shadow(0 0 3px rgba(255, 176, 32, 0.45)); }
}
@keyframes tri-glow {
  0%, 100% { filter: drop-shadow(0 0 0 rgba(255, 176, 32, 0)); }
  50% { filter: drop-shadow(0 0 5px rgba(255, 176, 32, 0.6)); }
}
@keyframes tri-glow-strong {
  0%, 100% { filter: drop-shadow(0 0 0 rgba(255, 176, 32, 0)); }
  50% { filter: drop-shadow(0 0 8px rgba(255, 176, 32, 0.8)); }
}
@keyframes tri-sway-soft {
  0%, 100% { transform: rotate(0deg); }
  50% { transform: rotate(-2deg); }
}
@keyframes tri-sway {
  0%, 100% { transform: rotate(0deg); }
  25% { transform: rotate(-3deg); }
  75% { transform: rotate(3deg); }
}

.hub-board__weekly-note {
  font-size: var(--text-xs);
  color: var(--color-text-secondary);
}

.hub-board__ticket {
  margin-top: var(--space-1);
  font-size: var(--text-xs);
  color: #16130c;
  background: var(--color-accent);
  border: none;
  border-radius: var(--radius-sm);
  padding: 4px 8px;
  cursor: pointer;
  align-self: center; /* B148-1 #1：卡内容整体居中 */
}

.hub-board__ticket--claimed {
  color: var(--color-text-secondary);
  background: transparent;
  border: 1px dashed var(--color-text-tertiary);
  cursor: default;
}

/* 移动端：看板 2×2（spec §4.1 真机口径；B148-1 #2 真机溢出修复——三角缩小 + 换行） */
@media (max-width: 900px) {
  .hub-board { grid-template-columns: repeat(2, 1fr); }
  .hub-board__cell { padding: var(--space-3) var(--space-2); }
  .hub-tri { width: 28px; height: 25px; }
  .hub-board__tris { gap: 4px; }
}

/* --- 背包横条（B148-0b §4.3） --- */

.hub-backpack-bar {
  display: flex;
  align-items: center;
  gap: var(--space-4);
  width: 100%;
  background: var(--color-bg-surface);
  border: var(--border-subtle);
  border-radius: var(--radius-md);
  padding: var(--space-3) var(--space-4);
  margin-bottom: var(--space-4);
  font: inherit;
  color: inherit;
  cursor: pointer;
  overflow-x: auto;
  white-space: nowrap;
  scrollbar-width: none;
}

.hub-backpack-bar::-webkit-scrollbar { display: none; }
.hub-backpack-bar:hover { border-color: var(--color-accent); }

.hub-backpack-bar__name { font-weight: var(--weight-medium); color: var(--color-text-primary); }
.hub-backpack-bar__item { font-size: var(--text-sm); color: var(--color-text-secondary); }
.hub-backpack-bar__more { margin-left: auto; color: var(--color-text-tertiary); }

/* --- 背包视图 --- */

.hub-backpack__summary {
  display: flex;
  gap: var(--space-4);
  flex-wrap: wrap;
  padding: var(--space-3) 0;
  font-weight: var(--weight-medium);
}

.hub-backpack__section {
  margin-bottom: var(--space-5);
}

.hub-backpack__head {
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
  color: var(--color-text-primary);
  margin-bottom: var(--space-2);
}

.hub-backpack__ledger { display: flex; flex-direction: column; gap: var(--space-1); }

.hub-backpack__ledger-row {
  display: flex;
  gap: var(--space-3);
  align-items: baseline;
  padding: var(--space-2) var(--space-3);
  background: var(--color-bg-surface);
  border: var(--border-subtle);
  border-radius: var(--radius-sm);
  font-size: var(--text-sm);
}

.hub-backpack__ledger-label { color: var(--color-text-primary); }
.hub-backpack__ledger-value { color: var(--color-accent); font-weight: var(--weight-medium); margin-left: auto; }
.hub-backpack__ledger-time { color: var(--color-text-tertiary); font-size: var(--text-xs); }

.hub-backpack__slots { display: flex; gap: var(--space-3); }

.hub-backpack__slot {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 2px;
  padding: var(--space-4) var(--space-2);
  border: 1px dashed var(--color-text-tertiary);
  border-radius: var(--radius-md);
  color: var(--color-text-tertiary);
  font-size: var(--text-xs);
}

.hub-backpack__slot-name { color: var(--color-text-secondary); }

/* --- B154-1 反馈批：今日任务 ⇄ 连续学习 融合轮播块（看板与月历之间；旧 .hub-daily 行退役） --- */

.hub-fusion {
  position: relative;
  /* B154-2 三轮 #2：收紧内边距与下边距（150px → ~90px 含 margin） */
  margin-bottom: var(--space-2);
  padding: var(--space-2);
  background: var(--color-bg-surface);
  border: var(--border-subtle);
  border-radius: var(--radius-md);
  touch-action: pan-y; /* 横向滑动切换手势——浏览器不抢水平滚动 */
}

/* B154-1 第三轮（2026-09-14 用户拍板）：翻页卡——3D 翻面切换。
   正面 = 今日任务（右上角仅「查看详情」）、背面 = 连续学习（右上角仅「查看日历」）；
   home.js 给 [data-fusion-card] 挂 data-flipped 驱动 rotateY(180deg)。 */
.hub-fusion__stage { perspective: 1000px; }

.hub-fusion__card {
  position: relative;
  transform-style: preserve-3d;
  transition: transform 0.5s var(--ease-out);
}

.hub-fusion__card[data-flipped] { transform: rotateY(180deg); }

.hub-fusion__face {
  position: relative;
  display: flex;
  align-items: center;
  /* B154-2 三轮 #2：96→64 + 顶部 30px 让位取消（右上角按钮已删） */
  min-height: 64px;
  padding: var(--space-2) var(--space-3);
  background: var(--color-bg-surface);
  backface-visibility: hidden;
  -webkit-backface-visibility: hidden;
  /* 隐藏面退出 tab 键序（visibility 延迟半程切换——与 0.5s 翻面动画 90° 时刻对齐，不闪面） */
  visibility: hidden;
  transition: visibility 0s linear 0.25s;
}

.hub-fusion__face[data-active] { visibility: visible; }

.hub-fusion__face--back {
  position: absolute;
  inset: 0;
  transform: rotateY(180deg);
}

.hub-fusion__slide-body {
  display: flex;
  align-items: center;
  justify-content: center;
  flex-wrap: wrap;
  gap: var(--space-2) var(--space-3);
  width: 100%;
  /* B154-2 三轮 #2：滑片内边距收紧 */
  padding: var(--space-1) var(--space-2);
  background: transparent;
  border: none;
  font: inherit;
  color: inherit;
  cursor: pointer;
  text-align: center;
}

.hub-fusion__title {
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
  color: var(--color-text-primary);
}

.hub-fusion__icons { display: flex; gap: var(--space-2); }

.hub-fusion__task {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 30px;
  height: 30px;
  border: var(--border-subtle);
  border-radius: var(--radius-sm);
  background: var(--color-bg-elevated);
  font-size: 15px;
  line-height: 1;
  opacity: 0.45;
}

.hub-fusion__task--done { opacity: 1; border-color: var(--color-accent); }
.hub-fusion__task--claimed { opacity: 1; border-color: var(--color-accent); background: var(--color-accent-soft, #fff7e8); }

.hub-fusion__meta { font-size: var(--text-xs); color: var(--color-text-secondary); }

.hub-fusion__streak {
  display: flex;
  align-items: baseline;
  gap: 4px;
  font-size: var(--text-lg);
  font-weight: var(--weight-bold);
  color: var(--color-accent);
}

.hub-fusion__flame { font-size: var(--text-md); }
.hub-fusion__streak-unit { font-size: var(--text-xs); font-weight: var(--weight-normal); color: var(--color-text-secondary); }

.hub-fusion__dots {
  display: flex;
  justify-content: center;
  gap: 4px;
  /* B154-2 三轮 #2：圆点行收紧 */
  margin-top: var(--space-1);
}

.hub-fusion__dot {
  width: 8px;
  height: 8px;
  padding: 0;
  border: none;
  border-radius: 999px;
  background: var(--color-text-tertiary);
  opacity: 0.4;
  cursor: pointer;
  transition: all var(--duration-fast) var(--ease-out);
}

.hub-fusion__dot[data-active] { opacity: 1; width: 18px; background: var(--color-accent); }

/* B154-2 三轮 #2/#3：右上角翻卡按钮已删（拍板：保留翻面 = 圆点 + 滑动）。
   .hub-fusion__btns/.hub-fusion__btn 退役。 */

@media (max-width: 640px) {
  /* 窄屏：看板 3 格 → 2 列（总时长通栏） */
  .hub-board { grid-template-columns: 1fr 1fr; }
  .hub-board__cell--total { grid-column: span 2; }
  /* B154-2 待优化 #2：窄屏仍保持一行（5 只缩小 + 紧间隙，不再 2+3 两行） */
  .hub-board__tris {
    display: flex;
    flex-wrap: nowrap;
    justify-content: center;
    gap: 4px;
    width: 100%;
  }
  .hub-board__tris .hub-tri { width: 22px; height: 20px; }
}

/* --- B154-1 反馈批：今日任务详情弹窗（body 级 .modal--tasks） --- */

.modal--tasks { width: min(560px, 92vw); }

.hub-tasks__hint { margin-bottom: var(--space-2); }

.hub-tasks__row {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  padding: var(--space-2) var(--space-3);
  margin-bottom: var(--space-2);
  border: var(--border-subtle);
  border-radius: var(--radius-sm);
  background: var(--color-bg-elevated);
}

.hub-tasks__row--done { border-color: var(--color-accent); }
.hub-tasks__row--claimed { border-color: var(--color-accent); background: var(--color-accent-soft, #fff7e8); }

.hub-tasks__icon { flex: none; font-size: 18px; line-height: 1; }
.hub-tasks__info { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.hub-tasks__name { font-size: var(--text-sm); color: var(--color-text-primary); }
.hub-tasks__reward { font-size: var(--text-xs); color: var(--color-accent); }
.hub-tasks__desc { font-size: var(--text-xs); color: var(--color-text-tertiary); }

.hub-tasks__claim {
  flex: none;
  padding: 4px 12px;
  border: 1px solid var(--color-accent);
  border-radius: 999px;
  background: var(--color-accent);
  color: #fff;
  font: inherit;
  font-size: var(--text-xs);
  cursor: pointer;
}
.hub-tasks__claim:hover { filter: brightness(1.05); }

.hub-tasks__state { flex: none; font-size: var(--text-xs); color: var(--color-text-tertiary); }
.hub-tasks__state--claimed { color: var(--color-accent); font-weight: var(--weight-medium); }

.hub-tasks__full {
  padding-top: var(--space-1);
  text-align: center;
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
}
.hub-tasks__full--lit { color: var(--color-accent); font-weight: var(--weight-medium); }

/* --- B154-1 第三轮：资源详情弹窗（body 级 .modal--resource：种子/a珠/A币/补卡券 介绍与获取途径） --- */

.modal--resource { width: min(480px, 92vw); }

.hub-resource__head {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  margin-bottom: var(--space-3);
}

.hub-resource__icon { font-size: 30px; line-height: 1; }

.hub-resource__title {
  font-size: var(--text-md);
  font-weight: var(--weight-medium);
  color: var(--color-text-primary);
}

.hub-resource__count {
  font-size: var(--text-sm);
  font-weight: var(--weight-bold);
  color: var(--color-accent);
}

.hub-resource__desc {
  margin-bottom: var(--space-2);
  font-size: var(--text-sm);
  color: var(--color-text-primary);
}

.hub-resource__use {
  margin-bottom: var(--space-3);
  font-size: var(--text-xs);
  color: var(--color-text-secondary);
}

.hub-resource__obtain {
  padding: var(--space-2) var(--space-3);
  background: var(--color-bg-elevated);
  border: var(--border-subtle);
  border-radius: var(--radius-sm);
}

.hub-resource__label {
  margin-bottom: var(--space-1);
  font-size: var(--text-xs);
  font-weight: var(--weight-medium);
  color: var(--color-text-secondary);
}

.hub-resource__obtain ul {
  margin: 0;
  padding-left: 18px;
  display: grid;
  gap: 4px;
  font-size: var(--text-sm);
  color: var(--color-text-primary);
}

/* B154-1 第四轮：资源详情弹窗内 展示物品/不再展示 按钮行 */
.hub-resource__actions {
  margin-top: var(--space-3);
  display: flex;
  justify-content: flex-end;
}

/* --- B154-1 反馈批：图鉴弹窗（body 级 .modal--codex：27 称号 + 12 皮肤 + 6 道具） --- */

/* B154-2 三轮 #11：图鉴全屏视图——覆盖 .modal 弹窗形态：去圆角/边框/内边距，
   overflow 转给 .codex__body 滚动区；顶部固定头 + sticky 冻结条贴死无缝隙 */
.modal--codex {
  position: fixed;
  inset: 0;
  width: 100vw;
  height: 100vh;
  max-width: none;
  max-height: none;
  border: none;
  border-radius: 0;
  padding: 0;
  overflow: hidden;
  display: flex;
  flex-direction: column;
}

.codex__topbar {
  flex: none;
  display: flex;
  align-items: center;
  gap: var(--space-3);
  padding: var(--space-2) var(--space-4);
  background: var(--color-bg-overlay);
  border-bottom: var(--border-subtle);
}

.codex__back { flex: none; }

.codex__topbar-title {
  margin: 0;
  font-size: var(--text-md);
  font-weight: var(--weight-medium);
  color: var(--color-text-primary);
}

.codex__body {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
}

.codex { display: flex; flex-direction: column; gap: 0; }

/* B154-2 三轮 #11：正文滚动区内容——居中限宽 + 自担内边距 */
.codex__content {
  width: 100%;
  max-width: 720px;
  margin: 0 auto;
  padding: var(--space-3) var(--space-4) var(--space-6);
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
}

.codex__section {
  background: var(--color-bg-surface);
  border: var(--border-subtle);
  border-radius: var(--radius-md);
  padding: var(--space-3) var(--space-4);
}

.codex__head {
  display: flex;
  align-items: baseline;
  gap: var(--space-2);
  flex-wrap: wrap;
  margin: 0 0 var(--space-2);
  font-size: var(--text-sm);
  color: var(--color-text-primary);
}

.codex__head-desc { font-size: var(--text-xs); color: var(--color-text-tertiary); font-weight: var(--weight-normal); }

.codex__list { display: flex; flex-direction: column; gap: var(--space-1); }

.codex__row {
  display: grid;
  grid-template-columns: auto auto auto 1fr auto;
  align-items: center;
  gap: var(--space-2) var(--space-3);
  width: 100%;
  padding: var(--space-2) var(--space-3);
  background: var(--color-bg-elevated);
  border: var(--border-subtle);
  border-radius: var(--radius-sm);
  font: inherit;
  color: var(--color-text-primary);
  text-align: left;
  cursor: pointer;
}

.codex__row:hover { border-color: var(--color-accent); }

.codex__row--locked {
  cursor: default;
  opacity: 0.62;
}

.codex__row--locked .codex__icon { filter: grayscale(1); }

.codex__icon { font-size: 20px; line-height: 1; display: flex; }
.codex__icon svg { width: 20px; height: 20px; }

.codex__name {
  font-size: var(--text-xs);
  color: var(--color-text-secondary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.codex__value {
  font-size: 10px;
  color: var(--color-accent);
  letter-spacing: 1px;
  white-space: nowrap;
}

.codex__meta {
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.codex__state {
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
  white-space: nowrap;
}

.codex__state--on { color: var(--color-accent); font-weight: var(--weight-medium); }

.codex__skin-group { margin-bottom: var(--space-3); }
.codex__skin-group:last-child { margin-bottom: 0; }

.codex__skin-group-label {
  display: flex;
  align-items: baseline;
  gap: var(--space-2);
  flex-wrap: wrap;
  margin: 0 0 var(--space-2);
  font-size: var(--text-xs);
  color: var(--color-text-primary);
}

.codex__skins {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(96px, 1fr));
  gap: var(--space-2);
}

.codex__skin {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 3px;
  padding: var(--space-2) var(--space-1);
  background: var(--color-bg-elevated);
  border: var(--border-subtle);
  border-radius: var(--radius-sm);
  min-width: 0;
  text-align: center;
}

.codex__skin--locked { opacity: 0.62; }
.codex__skin--locked .codex__icon { filter: grayscale(1); }

.codex__skin .codex__name {
  font-size: var(--text-xs);
  color: var(--color-text-secondary);
  max-width: 100%;
}

.codex__skin .codex__state { font-size: 10px; }

@media (max-width: 640px) {
  .codex__row { grid-template-columns: auto 1fr auto; }
  .codex__row .codex__meta { grid-column: 1 / -1; white-space: normal; }
}

/* --- B154-1 成就列表（背包视图） --- */

.hub-ach { display: flex; flex-direction: column; gap: var(--space-2); }

.hub-ach__item {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  padding: var(--space-2) var(--space-3);
  background: var(--color-bg-elevated);
  border: var(--border-subtle);
  border-radius: var(--radius-sm);
}

.hub-ach__item--ready { border-color: var(--color-accent); }
.hub-ach__item--claimed { opacity: 0.75; }

.hub-ach__icon { font-size: 20px; line-height: 1; }

.hub-ach__main {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.hub-ach__name { font-size: var(--text-sm); font-weight: var(--weight-medium); color: var(--color-text-primary); }
.hub-ach__desc { font-size: var(--text-xs); color: var(--color-text-secondary); }
.hub-ach__rewards { font-size: var(--text-xs); color: var(--color-accent); }

.hub-ach__state { font-size: var(--text-xs); color: var(--color-text-tertiary); white-space: nowrap; }
.hub-ach__state--claimed { color: var(--color-accent); }

.hub-ach__claim {
  font: inherit;
  font-size: var(--text-xs);
  white-space: nowrap;
  padding: var(--space-1) var(--space-3);
  background: var(--color-accent);
  color: var(--color-accent-contrast, #fff);
  border: none;
  border-radius: var(--radius-sm);
  cursor: pointer;
}

.hub-ach__claim:hover { filter: brightness(1.05); }

/* --- B154-1 第二轮 展示区（头部常显：两行两端分布；6 槽全部用户自定义，
       仅图标无名称；空槽虚线诚实占位，点击跳背包对应筛选） --- */

.hub-showcase__line {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-2);
  min-width: 0;
}

.hub-showcase__group {
  display: flex;
  gap: var(--space-2);
  min-width: 0;
}

.hub-showcase__slot {
  display: flex;
  align-items: center;
  justify-content: center;
  flex: none;
  width: 30px;
  height: 30px;
  padding: 0;
  border: 1px dashed var(--color-text-tertiary);
  border-radius: 50%;
  background: var(--color-bg-elevated);
  font: inherit;
  color: var(--color-text-tertiary);
  cursor: pointer;
  transition: border-color var(--duration-fast) var(--ease-out);
}

.hub-showcase__slot--empty:hover { border-color: var(--color-accent); }

.hub-showcase__slot--title {
  border-style: solid;
  border-color: var(--color-accent);
  color: var(--color-text-primary);
}

.hub-showcase__slot--title:hover { background: var(--color-accent-subtle); }

.hub-showcase__slot--item {
  border-style: solid;
  border-color: var(--color-text-tertiary);
  color: var(--color-text-secondary);
}

.hub-showcase__slot--item:hover { border-color: var(--color-accent); }

.hub-showcase__icon { flex: none; font-size: 14px; line-height: 1; display: flex; }
.hub-showcase__icon svg { width: 14px; height: 14px; }
/* 「我的展示」= 名称占位（未来换成用户名 + 账号设置入口，本期仅文字） */
.hub-showcase__name {
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.hub-currency__chip {
  display: flex;
  align-items: center;
  gap: 5px;
  padding: 3px 10px;
  border: 1px solid var(--color-accent-soft);
  border-radius: 999px;
  background: var(--color-bg-elevated);
  font: inherit;
  font-size: var(--text-xs);
  color: var(--color-text-primary);
  cursor: pointer;
  transition: all var(--duration-fast) var(--ease-out);
}

.hub-currency__chip:hover { background: var(--color-accent-subtle); }
.hub-currency__icon { font-size: 14px; line-height: 1; }
.hub-currency__name { color: var(--color-text-secondary); }
.hub-currency__num { font-weight: var(--weight-medium); font-variant-numeric: tabular-nums; }

@media (max-width: 640px) {
  /* B154-1 第二轮：6 槽不换行挤压——窄屏缩小槽径 + 紧排（两端分布保持）
     （行内空间不足时 group 可横向滚动，货币 chip 不参与挤压） */
  .hub-showcase__group { gap: var(--space-1); overflow-x: auto; scrollbar-width: none; }
  .hub-showcase__group::-webkit-scrollbar { display: none; }
  .hub-showcase__slot { width: 26px; height: 26px; }
  .hub-currency__chip { flex: none; }
}

/* --- B154-1 反馈批：背包统一网格（称号徽章 / 皮肤 / 道具——仅已拥有，右上筛选 + 图鉴） --- */

.hub-backpack__top {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--space-3);
  flex-wrap: wrap;
  margin-bottom: var(--space-3);
}

.hub-backpack__actions {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  flex-wrap: wrap;
}

/* B154-1 第二轮：图鉴移到左上角（与返回+标题一组）；筛选 chips → select 下拉 */
.hub-backpack__left {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  flex-wrap: wrap;
}

.hub-backpack-filter {
  display: flex;
  align-items: center;
  gap: var(--space-1);
}

.hub-backpack-filter__label {
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
}

.hub-backpack-filter__select {
  font: inherit;
  font-size: var(--text-xs);
  color: var(--color-text-primary);
  background: var(--color-bg-surface);
  border: var(--border-subtle);
  border-radius: 999px;
  padding: 3px 10px;
  cursor: pointer;
  transition: border-color var(--duration-fast) var(--ease-out);
}

.hub-backpack-filter__select:hover { border-color: var(--color-accent); }

.hub-codex-btn {
  font: inherit;
  font-size: var(--text-xs);
  color: var(--color-accent);
  /* B154-2 待优化 #7：对比度对齐个人中心按钮口径（accent + accent-subtle 半透明底） */
  background: var(--color-accent-subtle);
  border: 1px solid var(--color-accent);
  border-radius: 999px;
  padding: 3px 14px;
  cursor: pointer;
}

.hub-codex-btn:hover { filter: brightness(1.06); }

/* B154-2 待优化 #7：图鉴弹窗三页切换（图鉴/获取历史/成就任务）
   B154-2 二轮 §5.4/§5.5（2026-09-16）：tab 行 + 二级菜单行包进 .codex__tabbar
   ——sticky top:0 冻结在 .codex__body 滚动容器内（滚动到底仍可见可切换）。
   B154-2 三轮 #11：滚动容器改为无内边距的 .codex__body——冻结条贴死
   顶部固定头（无缝隙），负 margin 全宽口径退役。 */
.codex__tabbar {
  position: sticky;
  top: 0;
  z-index: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--space-2);
  background: var(--color-bg-overlay);
  border-bottom: var(--border-subtle);
  margin: 0;
  padding: var(--space-2) var(--space-4) var(--space-3);
}

.codex__tabs {
  display: flex;
  justify-content: center;
  gap: var(--space-1);
}

/* B154-2 二轮 §5.2/§5.3：二级菜单——分类 chips 点选过滤 + ▾/▸ 折叠 */
.codex__subbar {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-1);
  flex-wrap: wrap;
}

.codex__sub-toggle {
  font: inherit;
  font-size: var(--text-xs);
  color: var(--color-text-secondary);
  background: transparent;
  border: 1px solid var(--color-border);
  border-radius: 999px;
  padding: 2px 10px;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  gap: var(--space-1);
}

.codex__sub-toggle:hover { color: var(--color-text-primary); }

.codex__subs {
  display: flex;
  justify-content: center;
  gap: var(--space-1);
  flex-wrap: wrap;
}

.codex__sub {
  font: inherit;
  font-size: var(--text-xs);
  color: var(--color-text-secondary);
  background: transparent;
  border: 1px solid var(--color-border);
  border-radius: 999px;
  padding: 2px 12px;
  cursor: pointer;
}

.codex__sub:hover { color: var(--color-text-primary); }

.codex__sub--active {
  color: var(--color-accent);
  background: var(--color-accent-subtle);
  border-color: var(--color-accent);
}

.codex__tab {
  font: inherit;
  font-size: var(--text-sm);
  color: var(--color-text-secondary);
  background: transparent;
  border: 1px solid transparent;
  border-radius: 999px;
  padding: 4px 14px;
  cursor: pointer;
}

.codex__tab:hover { color: var(--color-text-primary); }

.codex__tab--active {
  color: var(--color-accent);
  background: var(--color-accent-subtle);
  border-color: var(--color-accent);
}

.hub-inv__grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(104px, 1fr));
  gap: var(--space-2);
}

.hub-inv__cell {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 4px;
  padding: var(--space-3) var(--space-2);
  background: var(--color-bg-elevated);
  border: var(--border-subtle);
  border-radius: var(--radius-sm);
  min-width: 0;
  font: inherit;
  color: var(--color-text-primary);
  text-align: center;
  /* B154-1 第三轮：Minecraft 背包槽位感——内凹阴影 + 底部高光线 */
  box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(255, 255, 255, 0.05);
}

button.hub-inv__cell:hover {
  border-color: var(--color-accent);
  box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 0 0 1px var(--color-accent);
}

/* 佩戴中（称号/皮肤）与展示中（道具/资源）同款高亮——2026-09-18 统一（此前展示中只有角标无背景） */
.hub-inv__cell--worn,
.hub-inv__cell--shown {
  border-color: var(--color-accent);
  background: var(--color-accent-subtle);
  box-shadow: inset 0 0 0 1px var(--color-accent);
}

/* B154-1 第二轮：资源格（种子/a珠/A币/补卡券）——同格堆叠 ×N，无佩戴操作，底色略沉 */
.hub-inv__cell--resource { background: var(--color-bg-surface); }

/* B154-2 待优化 #7：空物品栏格（固定 15 栏未占用位）——虚线框弱化提示 */
.hub-inv__cell--ghost {
  background: transparent;
  border: 1px dashed var(--color-border);
  box-shadow: none;
  cursor: default;
}

.hub-inv__icon--ghost { color: var(--color-text-tertiary); opacity: 0.6; }


/* B154-2 待优化 #7：物品超过 15 栏翻页（上一页/页码/下一页） */
.hub-inv__pager {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-3);
  margin-top: var(--space-3);
}

.hub-inv__pager-btn {
  font: inherit;
  font-size: var(--text-sm);
  color: var(--color-accent);
  background: transparent;
  border: 1px solid var(--color-accent);
  border-radius: 999px;
  padding: 4px 14px;
  cursor: pointer;
}

.hub-inv__pager-btn:hover:not(:disabled) { filter: brightness(1.06); }

.hub-inv__pager-btn:disabled {
  color: var(--color-text-tertiary);
  border-color: var(--color-border);
  cursor: default;
}

.hub-inv__pager-state { font-size: var(--text-sm); color: var(--color-text-secondary); }

.hub-inv__icon { font-size: 24px; line-height: 1; display: flex; }
.hub-inv__icon svg { width: 24px; height: 24px; }

.hub-inv__name {
  font-size: var(--text-xs);
  color: var(--color-text-secondary);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  max-width: 100%;
}

.hub-inv__badge {
  position: absolute;
  top: 4px;
  right: 4px;
  max-width: 76px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 9px;
  line-height: 1;
  color: var(--color-accent);
  /* 2026-09-18 用户实报：佩戴中/展示中角标 accent-soft 实色底与
     accent 文字对比度不足——对齐「灵感图鉴」按钮口径（subtle 半透明底） */
  background: var(--color-accent-subtle);
  border: 1px solid var(--color-accent);
  border-radius: 999px;
  padding: 2px 6px;
}

.hub-inv__badge--muted {
  color: var(--color-text-tertiary);
  background: var(--color-bg-surface);
  border-color: var(--color-text-tertiary);
}

/* B154-1 第三轮：资源格堆叠数右下角（Minecraft 槽位计数风格——白字描影） */
.hub-inv__badge--count {
  top: auto;
  bottom: 5px;
  right: 6px;
  color: #fff;
  background: rgba(0, 0, 0, 0.45);
  border: none;
  font-size: 11px;
  font-weight: var(--weight-bold);
  padding: 1px 6px;
  text-shadow: 0 1px 1px rgba(0, 0, 0, 0.6);
}

.hub-inv__state {
  font-size: 10px;
  color: var(--color-text-tertiary);
  font-weight: var(--weight-medium);
}

.hub-inv__state--on { color: var(--color-accent); }

.hub-inv__equip {
  font: inherit;
  font-size: var(--text-xs);
  color: var(--color-accent);
  background: var(--color-accent-soft);
  border: 1px solid var(--color-accent);
  border-radius: 999px;
  padding: 2px 12px;
  cursor: pointer;
}

.hub-inv__equip:hover { filter: brightness(1.06); }

/* 看板月度徽章光效（spec §6.2 限时月度称号的看板形态） */
.hub-board__badge--monthly { animation: badge-monthly-pulse 3s ease-in-out infinite; }

@keyframes badge-monthly-pulse {
  0%, 100% { filter: drop-shadow(0 0 0 rgba(255, 176, 32, 0)); }
  50% { filter: drop-shadow(0 0 5px rgba(255, 176, 32, 0.7)); }
}

/* --- 术语卡 + 笔记卡并列（B148-0b §4.4） --- */

.hub-cards {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--space-3);
  margin-bottom: var(--space-4);
}

.hub-card {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  background: var(--color-bg-surface);
  border: var(--border-subtle);
  border-radius: var(--radius-md);
  padding: var(--space-3) var(--space-4);
  font: inherit;
  color: inherit;
  text-align: left;
  cursor: pointer;
  min-width: 0;
}

.hub-card:hover { border-color: var(--color-accent); }

.hub-card__head { display: flex; align-items: center; gap: var(--space-2); }

.hub-card__icon { font-size: var(--text-md); }

.hub-card__title {
  font-size: var(--text-md);
  font-weight: var(--weight-medium);
  color: var(--color-text-primary);
}

.hub-card__count {
  font-size: var(--text-sm);
  color: var(--color-text-secondary);
  margin-left: auto;
}

.hub-card__list { display: flex; flex-direction: column; gap: 4px; }

.hub-card__row {
  display: flex;
  gap: 6px;
  align-items: baseline;
  font-size: var(--text-sm);
  min-width: 0;
}

.hub-card__row-term {
  color: var(--color-text-primary);
  font-weight: var(--weight-medium);
  flex: none;
}

.hub-card__row-insight {
  color: var(--color-text-tertiary);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.hub-card__more {
  margin-top: auto;
  font-size: var(--text-xs);
  color: var(--color-accent);
}

/* B154-1 第二轮：笔记卡最新 1 条（图标 + 预览单行省略 + 来源标签） */
.hub-card__note {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  padding: var(--space-1) var(--space-2);
  background: var(--color-bg-elevated);
  border: var(--border-subtle);
  border-radius: var(--radius-sm);
  font-size: var(--text-xs);
  color: var(--color-text-secondary);
  min-width: 0;
}

.hub-card__note-icon { flex: none; font-size: 14px; line-height: 1; }

.hub-card__note-preview {
  flex: 1;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.hub-card__note-meta { flex: none; color: var(--color-text-tertiary); }

/* 移动端：两卡堆叠（spec §4.1 真机口径） */
@media (max-width: 900px) {
  .hub-cards { grid-template-columns: 1fr; }
}

/* --- 笔记索引视图（B148-0b §4.4） --- */

.hub-notes-index__search { margin-bottom: var(--space-2); }

.hub-notes-index__input {
  width: 100%;
  padding: var(--space-2) var(--space-3);
  border: var(--border-subtle);
  border-radius: var(--radius-md);
  background: var(--color-bg-surface);
  color: var(--color-text-primary);
  font-size: var(--text-sm);
}

.hub-notes-index__input:focus { outline: none; border-color: var(--color-accent); }

.hub-notes-index__groups { display: flex; flex-direction: column; gap: var(--space-2); }

.hub-note-item {
  display: flex;
  gap: var(--space-2);
  padding: var(--space-2);
  border-top: var(--border-subtle);
  min-width: 0;
}

.hub-note-item__kind { flex: none; font-size: var(--text-sm); }

.hub-note-item__body {
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
}

.hub-note-item__preview {
  font-size: var(--text-sm);
  color: var(--color-text-primary);
  overflow: hidden;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  word-break: break-word;
}

.hub-note-item__meta { font-size: var(--text-xs); color: var(--color-text-tertiary); }

/* B148-1 #5（2026-09-08 用户实报）：清单/全文初始折叠，点 summary 展开完整内容 */
.hub-note-item__full { margin-top: var(--space-1); }
.hub-note-item__full-head {
  font-size: var(--text-xs);
  color: var(--color-accent);
  cursor: pointer;
  user-select: none;
}
.hub-note-item__full-body {
  margin-top: var(--space-1);
  font-size: var(--text-sm);
  color: var(--color-text-primary);
  white-space: pre-wrap;
  word-break: break-word;
}
.hub-note-item__checks {
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.hub-note-item__check { color: var(--color-text-secondary); }
.hub-note-item__check--done { color: var(--color-text-tertiary); }

/* --- B154-2 待优化 #4/#5/#6：笔记区多层文件夹 + 多块笔记 --- */

/* 多块卡：标题行 + 标题块 + 操作行 */
.hub-note-item__title {
  font-size: var(--text-base);
  font-weight: var(--weight-medium);
  color: var(--color-text-primary);
  word-break: break-word;
}
.hub-note-item__heading {
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
  color: var(--color-text-primary);
  word-break: break-word;
}
/* 三轮 #9：L3 步骤分区「本步笔记」文档卡（虚线 = 系统文档，区别于条目卡） */
.hub-note-item--doc {
  border-style: dashed;
  background: var(--color-accent-subtle);
}
.hub-note-item__hint {
  font-size: var(--text-sm);
  color: var(--color-text-tertiary);
}

/* 笔记编辑弹窗（modal--wide 加宽；块区独立滚动） */
.modal--wide {
  width: min(680px, 94vw);
  max-height: 86vh;
  display: flex;
  flex-direction: column;
}
.hub-note-editor__hint { font-size: var(--text-xs); color: var(--color-text-tertiary); }
.hub-note-editor__blocks {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  overflow-y: auto;
  min-height: 0;
  padding-right: var(--space-1);
}
.hub-note-editor__block {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  padding: var(--space-3);
  border: var(--border-subtle);
  border-radius: var(--radius-sm);
  background: var(--color-bg-surface);
}
.hub-note-editor__block-bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-2);
}
.hub-note-editor__block-kind { font-size: var(--text-xs); color: var(--color-text-tertiary); }
.hub-note-editor__block-ops { display: flex; gap: var(--space-1); }
.hub-note-editor__block-ops button,
.hub-note-editor__row-del,
.hub-note-editor__table-ops button {
  padding: var(--space-1) var(--space-2);
  background: transparent;
  border: 1px solid var(--border-subtle);
  border-radius: var(--radius-sm);
  color: var(--color-text-secondary);
  cursor: pointer;
  font-size: var(--text-xs);
  font-family: var(--font-sans);
  transition: all var(--duration-fast) var(--ease-out);
}
.hub-note-editor__block-ops button:hover:not(:disabled),
.hub-note-editor__table-ops button:hover,
.hub-note-editor__row-del:hover {
  border-color: var(--color-accent);
  color: var(--color-text-primary);
}
.hub-note-editor__block-ops button:disabled { opacity: 0.35; cursor: default; }
.hub-note-editor__row-del:hover { border-color: var(--color-error); color: var(--color-error); }
.hub-note-editor__input {
  width: 100%;
  padding: var(--space-2) var(--space-3);
  background: var(--color-bg-overlay);
  border: var(--border-normal);
  border-radius: var(--radius-sm);
  color: var(--color-text-primary);
  font-family: var(--font-sans);
  font-size: var(--text-sm);
}
.hub-note-editor__input:focus { outline: none; border-color: var(--color-accent-soft); }
.hub-note-editor__input--heading { font-weight: var(--weight-medium); }
.hub-note-editor__textarea {
  width: 100%;
  min-height: 72px;
  padding: var(--space-2) var(--space-3);
  background: var(--color-bg-overlay);
  border: var(--border-normal);
  border-radius: var(--radius-sm);
  color: var(--color-text-primary);
  font-family: var(--font-sans);
  font-size: var(--text-sm);
  resize: vertical;
}
.hub-note-editor__textarea:focus { outline: none; border-color: var(--color-accent-soft); }
.hub-note-editor__grid {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
  overflow-x: auto;
}
.hub-note-editor__row {
  display: flex;
  gap: var(--space-1);
  align-items: center;
}
.hub-note-editor__cell {
  flex: 1;
  min-width: 96px;
  display: flex;
  gap: var(--space-1);
  align-items: center;
}
.hub-note-editor__cell--head .hub-note-editor__input { font-weight: var(--weight-medium); }
.hub-note-editor__cell--head { flex-direction: column; align-items: stretch; }
.hub-note-editor__cell-head-row { display: flex; gap: var(--space-1); align-items: center; }
.hub-note-editor__cell-meta { display: flex; gap: var(--space-1); align-items: center; min-height: 14px; }
.hub-note-editor__col-type { font-size: var(--text-2xs, 0.625rem); color: var(--color-text-tertiary); }
.hub-note-editor__col-opts {
  background: transparent;
  border: none;
  padding: 0;
  color: var(--color-accent);
  cursor: pointer;
  font-size: var(--text-2xs, 0.625rem);
  font-family: var(--font-sans);
}
.hub-note-editor__col-opts:hover { text-decoration: underline; }
.hub-note-editor__check { width: 16px; height: 16px; margin: 2px auto; cursor: pointer; accent-color: var(--color-accent); }
.hub-note-editor__cell-select { width: 100%; min-height: 0; padding: var(--space-1); }
.hub-note-editor__row-tools { flex: none; width: 28px; }
.hub-note-editor__table-ops { display: flex; gap: var(--space-2); align-items: center; flex-wrap: wrap; }
/* 新增列就地表单（列名 + 类型下拉）与下拉选项管理——口径同课内表格 */
.hub-note-editor__addcol-form { display: inline-flex; gap: var(--space-1); align-items: center; flex-wrap: wrap; }
.hub-note-editor__addcol-form .hub-note-editor__input { width: auto; min-width: 76px; min-height: 0; padding: var(--space-1); }
.hub-note-editor__colopts-editor {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
  margin-top: var(--space-1);
  padding: var(--space-2);
  border: 1px dashed var(--border-subtle);
  border-radius: var(--radius-sm);
}
.hub-note-editor__colopts-chips { display: flex; gap: var(--space-1); flex-wrap: wrap; }
.hub-note-editor__colopts-chip {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 2px 8px;
  background: var(--color-bg-overlay);
  border-radius: 999px;
  font-size: var(--text-xs);
}
.hub-note-editor__colopts-rm { background: transparent; border: none; padding: 0; color: var(--color-text-tertiary); cursor: pointer; font-size: var(--text-xs); }
.hub-note-editor__colopts-rm:hover { color: var(--color-error); }
.hub-note-editor__colopts-actions { display: flex; gap: var(--space-1); }

/* --- B154-2 二轮 §6（2026-09-16）+ 三轮 4.1（进入式导航）：面包屑 + 卡片 --- */
.hub-notes-crumbs {
  display: flex;
  align-items: center;
  gap: var(--space-1);
  flex-wrap: wrap;
  flex: 1;
  min-width: 0;
}
.hub-notes-crumb {
  font-size: var(--text-sm);
  color: var(--color-accent);
  background: none;
  border: none;
  padding: 2px var(--space-1);
  border-radius: var(--radius-sm);
  cursor: pointer;
  white-space: nowrap; /* 2026-09-16 人工测试反馈整改：分区名不再在按钮内部换行 */
}
.hub-notes-crumb:hover { background: var(--color-accent-subtle); }
.hub-notes-crumb--current {
  color: var(--color-text-primary);
  font-weight: var(--weight-medium);
  cursor: default;
}
.hub-notes-crumb--current:hover { background: none; }
.hub-notes-crumb--ellipsis { color: var(--color-text-tertiary); cursor: default; }
.hub-notes-crumb-sep { color: var(--color-text-tertiary); }

/* 三轮 4.1（决策 D1）：卡片列表（根层/焦点层共用；纯文字分区卡无 📁） */
.hub-notes-cards {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  margin-top: var(--space-2);
}
.hub-notes-card {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  padding: var(--space-3) var(--space-4);
  border: var(--border-subtle);
  border-radius: var(--radius-md);
  background: var(--color-bg-surface);
  cursor: pointer;
  min-width: 0;
  transition: border-color var(--duration-fast) var(--ease-out);
}
.hub-notes-card:hover { border-color: var(--color-accent-soft); }
.hub-notes-card__icon { flex: none; font-size: var(--text-base); }
.hub-notes-card__name {
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
  color: var(--color-text-primary);
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.hub-notes-card__meta {
  margin-left: auto;
  flex: none;
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
}
.hub-notes-card--system { border-style: dashed; }

/* 三轮 4.1（决策 D2）：焦点层顶栏——←返回 + 全路径面包屑 + 右上操作 */
.hub-notes-focus__head {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  flex-wrap: wrap;
  margin-top: var(--space-3);
}
.hub-notes-back {
  flex: none;
  background: transparent;
  border: var(--border-subtle);
  border-radius: var(--radius-sm);
  color: var(--color-text-secondary);
  cursor: pointer;
  font-family: var(--font-sans);
  font-size: var(--text-xs);
  padding: 4px 10px;
  transition: all var(--duration-fast) var(--ease-out);
}
.hub-notes-back:hover { border-color: var(--color-accent-soft); color: var(--color-accent); }
.hub-notes-focus__ops {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  margin-left: auto;
  flex: none;
}
/* 三轮 #9：L1/L2/L3 系统分区徽标（不可重命名/删除） */
.hub-notes-focus__badge {
  font-size: var(--text-xs);
  color: var(--color-text-tertiary, var(--color-text-secondary));
  background: var(--color-surface-raised, transparent);
  border: var(--border-subtle);
  border-radius: 999px;
  padding: 2px 8px;
  flex: none;
}
.hub-notes-op {
  background: transparent;
  border: var(--border-subtle);
  border-radius: var(--radius-sm);
  color: var(--color-text-secondary);
  cursor: pointer;
  font-family: var(--font-sans);
  font-size: var(--text-xs);
  padding: 4px 10px;
  transition: all var(--duration-fast) var(--ease-out);
}
.hub-notes-op:hover { border-color: var(--color-accent-soft); color: var(--color-accent); }
.hub-notes-op--danger:hover { border-color: var(--color-error); color: var(--color-error); }

/* 三轮 D1：单一灰色「+」按钮（风格同「返回知识网」）→ 下拉 */
.hub-notes-add { position: relative; flex: none; }
.hub-notes-add__btn {
  background: transparent;
  border: var(--border-subtle);
  border-radius: var(--radius-sm);
  color: var(--color-text-secondary);
  cursor: pointer;
  font-family: var(--font-sans);
  font-size: var(--text-xs);
  padding: 4px 12px;
  transition: all var(--duration-fast) var(--ease-out);
}
.hub-notes-add__btn:hover { border-color: var(--color-accent-soft); color: var(--color-accent); }
.hub-notes-add__menu {
  position: absolute;
  top: calc(100% + 4px);
  right: 0;
  z-index: 70;
  min-width: 130px;
  background: var(--color-bg-overlay);
  border: var(--border-subtle);
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-lg);
  overflow: hidden;
}
.hub-notes-add__menu[hidden] { display: none; }
.hub-notes-add__item {
  display: block;
  width: 100%;
  text-align: left;
  font-size: var(--text-sm);
  color: var(--color-text-primary);
  background: none;
  border: none;
  padding: var(--space-2) var(--space-3);
  cursor: pointer;
  font-family: var(--font-sans);
}
.hub-notes-add__item:hover { background: var(--color-accent-subtle); }

/* 二轮 #7：卡片点开编辑（可点态）+ 清单只读徽标 */
.hub-note-item--clickable { cursor: pointer; }
.hub-note-item--clickable:hover { background: var(--color-accent-subtle); }
.hub-note-item--readonly { opacity: 0.95; }
.hub-note-item__badge {
  flex: none;
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
  padding: 0 var(--space-1);
  border: 1px solid var(--border-subtle);
  border-radius: var(--radius-sm);
}

/* 三轮 #7：Word 式全屏编辑器（工具栏上 / 正文中 / 右下角字数） */
.modal--note-editor {
  position: fixed;
  inset: 0;
  width: 100vw;
  height: 100vh;
  max-width: none;
  max-height: none;
  border: none;
  border-radius: 0;
  padding: 0;
  overflow: hidden;
  display: flex;
  flex-direction: column;
}
.hub-note-editor.note-editor {
  display: flex;
  flex-direction: column;
  min-height: 0;
  height: 100%;
}
.note-editor__bar {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  flex-wrap: wrap;
  padding: var(--space-2) var(--space-4);
  background: var(--color-bg-overlay);
  border-bottom: var(--border-subtle);
  flex: none;
}
.note-editor__back {
  flex: none;
  background: transparent;
  border: var(--border-subtle);
  border-radius: var(--radius-sm);
  color: var(--color-text-secondary);
  cursor: pointer;
  font-family: var(--font-sans);
  font-size: var(--text-xs);
  padding: 4px 10px;
  transition: all var(--duration-fast) var(--ease-out);
}
.note-editor__back:hover { border-color: var(--color-accent-soft); color: var(--color-accent); }
.note-editor__title {
  margin: 0;
  font-size: var(--text-md);
  font-weight: var(--weight-medium);
  color: var(--color-text-primary);
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.note-editor__spacer { flex: 1; }
.note-editor__tools { display: flex; align-items: center; gap: var(--space-2); flex-wrap: wrap; }
.note-editor__tool-row {
  display: inline-flex;
  align-items: center;
  gap: var(--space-1);
}
.note-editor__tool {
  background: transparent;
  border: var(--border-subtle);
  border-radius: var(--radius-sm);
  color: var(--color-text-secondary);
  cursor: pointer;
  font-family: var(--font-sans);
  font-size: var(--text-xs);
  padding: 4px 10px;
  transition: all var(--duration-fast) var(--ease-out);
}
.note-editor__tool:hover { border-color: var(--color-accent-soft); color: var(--color-accent); }
.note-editor__tool--danger:hover { border-color: var(--color-error); color: var(--color-error); }
.note-editor__body {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  padding: var(--space-4);
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
}
.note-editor__hint { margin: 0; font-size: var(--text-xs); color: var(--color-text-tertiary); }
.note-editor__body > .hub-note-editor__blocks { overflow-y: visible; }
.note-editor__foot {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  padding: var(--space-1) var(--space-4);
  border-top: var(--border-subtle);
  background: var(--color-bg-overlay);
  flex: none;
}
.note-editor__status {
  font-size: var(--text-xs);
  color: var(--color-success, #16a34a);
}
.note-editor__count {
  margin-left: auto;
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
}

@media (max-width: 640px) {
  .note-editor__bar { gap: var(--space-2); padding: var(--space-2) var(--space-3); }
  .note-editor__title { font-size: var(--text-sm); }
  .note-editor__body { padding: var(--space-3); }
  .note-editor__tools { width: 100%; justify-content: flex-start; }
  .hub-notes-card { padding: var(--space-2) var(--space-3); }
  .hub-notes-focus__head { row-gap: var(--space-1); }
  /* 2026-09-16 人工测试反馈整改：标题行（返回+面包屑）在前、不换行，
     超长分区名省略号截断；重命名/删除/＋ 整体换到第二行右对齐
     （原 order:3 width:100% 把标题压到按钮之后，已撤） */
  .hub-notes-crumbs { flex-wrap: nowrap; overflow: hidden; }
  .hub-notes-crumb { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
  .hub-notes-focus__ops { flex-basis: 100%; margin-left: 0; justify-content: flex-end; }
}

/* 二轮 §6.4：编辑器自动保存状态行（错误态由 home.js 切换）+ 位置下拉 */
.hub-note-editor__status {
  font-size: var(--text-xs);
  color: var(--color-success, #16a34a);
  margin-left: auto;
}
.hub-note-editor__status--error { color: var(--color-error); }
.hub-note-editor__meta-label { font-size: var(--text-xs); color: var(--color-text-tertiary); flex: none; }
.hub-note-editor__select {
  font-size: var(--text-sm);
  color: var(--color-text-primary);
  background: var(--color-bg-surface);
  border: var(--border-subtle);
  border-radius: var(--radius-sm);
  padding: var(--space-1) var(--space-2);
  max-width: 100%;
}

/* 通用输入弹窗（文件夹新建/重命名） */
.modal--prompt { display: flex; flex-direction: column; gap: var(--space-4); }

/* --- 月历补卡浮层（B148-0b §4.2 B1-2）
   B148-1 #8（2026-09-08 用户实报）：左锚 → 屏幕正中（fixed 视口居中；
   hub 面板无 transform 祖先，fixed 不被捕获） --- */

.hub-cal {
  position: fixed;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  z-index: 75;
  width: min(320px, calc(100vw - 32px));
  background: var(--color-bg-surface);
  border: var(--border-subtle);
  border-radius: var(--radius-md);
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.18);
  padding: var(--space-3);
}

.hub-cal__head {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  margin-bottom: var(--space-2);
}

.hub-cal__nav {
  border: var(--border-subtle);
  background: transparent;
  color: var(--color-text-primary);
  border-radius: var(--radius-sm);
  width: 26px;
  height: 26px;
  cursor: pointer;
  font-size: 14px;
  line-height: 1;
}

.hub-cal__title { flex: 1; text-align: center; font-size: var(--text-sm); font-weight: var(--weight-medium); }

.hub-cal__close {
  border: none;
  background: transparent;
  color: var(--color-text-tertiary);
  font-size: 16px;
  cursor: pointer;
}

.hub-cal__week {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  text-align: center;
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
  margin-bottom: 4px;
}

.hub-cal__grid {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 2px;
}

.hub-cal__empty { min-height: 34px; }

.hub-cal__day {
  position: relative;
  min-height: 34px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: var(--radius-sm);
  font-size: var(--text-sm);
  color: var(--color-text-primary);
}

.hub-cal__num { line-height: 1; }

.hub-cal__day--today { outline: 2px solid var(--color-accent); outline-offset: -2px; font-weight: var(--weight-medium); }

.hub-cal__tri {
  position: absolute;
  top: 2px;
  right: 3px;
  font-size: 7px;
  color: var(--color-accent);
}

.hub-cal__madeup {
  position: absolute;
  bottom: 1px;
  left: 50%;
  transform: translateX(-50%);
  font-size: 7px;
  color: var(--color-accent);
}

.hub-cal__day--eligible { border: 1px dashed var(--color-text-tertiary); }

.hub-cal__makeup {
  position: absolute;
  top: -6px;
  right: -4px;
  font-size: 9px;
  padding: 0 3px;
  color: #16130c;
  background: var(--color-accent);
  border: none;
  border-radius: 8px;
  cursor: pointer;
  line-height: 1.4;
}

.hub-cal__confirm {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 2px;
  background: var(--color-bg-surface);
  border-radius: var(--radius-sm);
  z-index: 1;
}

.hub-cal__confirm button {
  font-size: 9px;
  padding: 1px 5px;
  border-radius: 6px;
  border: 1px solid var(--color-text-tertiary);
  background: transparent;
  color: var(--color-text-primary);
  cursor: pointer;
}

.hub-cal__confirm button[data-hub-makeup-confirm] {
  border-color: var(--color-accent);
  color: var(--color-accent);
}

.hub-cal__hint {
  margin-top: var(--space-2);
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
}

/* --- 路线节点图 --- */

.hub-section { margin-bottom: var(--space-6); }

.hub-section__title {
  font-size: var(--text-md);
  font-weight: var(--weight-medium);
  color: var(--color-text-primary);
  margin: 0;
}

.hub-roadmap {
  background: var(--color-bg-surface);
  border: var(--border-subtle);
  border-radius: var(--radius-md);
  padding: var(--space-4);
  margin-bottom: var(--space-5);
}

.hub-roadmap__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-3);
  margin-bottom: var(--space-2);
}

.hub-roadmap__progress {
  font-size: var(--text-xs);
  color: var(--color-accent);
  background: var(--color-accent-subtle);
  border-radius: var(--radius-full);
  padding: 2px 10px;
  flex-shrink: 0;
}

.hub-roadmap__hint {
  margin: 0;
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
  line-height: var(--leading-relaxed);
}

.hub-tree {
  display: flex;
  flex-direction: column;
}

.hub-node {
  display: flex;
  gap: var(--space-3);
}

.hub-node--locked { opacity: 0.55; }

.hub-node__rail {
  width: 18px;
  flex-shrink: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
}

.hub-node__dot {
  width: 12px;
  height: 12px;
  border-radius: var(--radius-full);
  background: var(--color-border);
  margin-top: 4px;
  flex-shrink: 0;
}

.hub-node--done .hub-node__dot { background: var(--color-success); }
.hub-node--current .hub-node__dot {
  background: var(--color-accent);
  animation: hub-pulse 2s var(--ease-in-out) infinite;
}
.hub-node--next .hub-node__dot {
  background: transparent;
  border: 2px solid var(--color-accent-soft);
}

@keyframes hub-pulse {
  0%, 100% { box-shadow: 0 0 0 0 var(--color-accent-glow); }
  50%      { box-shadow: 0 0 0 6px transparent; }
}

.hub-node__line {
  flex: 1;
  width: 2px;
  background: var(--color-border);
  margin: 4px 0;
}

.hub-node__body {
  flex: 1;
  min-width: 0;
  padding-bottom: var(--space-5);
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}

.hub-node__head {
  display: flex;
  align-items: baseline;
  gap: var(--space-2);
  flex-wrap: wrap;
}

.hub-node__title {
  font-size: var(--text-md);
  font-weight: var(--weight-medium);
  /* B147-c（2026-09-08 用户反馈）：阶段标题标黄强调——路线图主次分层 */
  color: var(--color-accent);
}

.hub-node__status {
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
}

.hub-node--done .hub-node__status { color: var(--color-success); }
.hub-node--current .hub-node__status { color: var(--color-accent); }

.hub-node__weeks {
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
  margin-left: auto;
}

.hub-node__desc {
  margin: 0;
  font-size: var(--text-sm);
  color: var(--color-text-secondary);
  line-height: var(--leading-relaxed);
}

/* lessonloop ⑪（2026-08-31）：节点参考资料行——已走阶段 = 实际引用，
   未走阶段 = 资料池；chips 与课程内引用同款（.ref-src）。
   B147-1 #11（2026-09-07 用户要求）：默认折叠为一行标签，
   点标签行展开 chips（.hub-node__refs--open） */
.hub-node__refs {
  display: flex;
  flex-direction: column;
  align-items: stretch;
  gap: var(--space-1);
  margin-top: var(--space-1);
}
.hub-node__refs-toggle {
  display: inline-flex;
  align-items: center;
  gap: var(--space-1);
  align-self: flex-start;
  border: 0;
  background: transparent;
  padding: 0;
  cursor: pointer;
  font-family: var(--font-sans);
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
  transition: color var(--duration-fast) var(--ease-out);
}
.hub-node__refs-toggle:hover { color: var(--color-text-secondary); }
.hub-node__refs-chev {
  display: inline-block;
  transition: transform var(--duration-fast) var(--ease-out);
}
.hub-node__refs--open .hub-node__refs-chev { transform: rotate(90deg); }
.hub-node__refs-label {
  flex-shrink: 0;
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
}
.hub-node__refs-list {
  display: none;
  align-items: center;
  gap: var(--space-2);
  flex-wrap: wrap;
}
.hub-node__refs--open .hub-node__refs-list { display: flex; }

/* B147-1 #11（2026-09-07 用户要求）：「点击生成下一步」要最突出——
   生成入口强化：强调色虚线 + 二级文字；补课待走入口再进一步（实线 + 强调色） */
.hub-node__blank {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  border: 1px dashed var(--color-accent-soft);
  border-radius: var(--radius-md);
  background: transparent;
  color: var(--color-text-secondary);
  cursor: pointer;
  font-family: var(--font-sans);
  font-size: var(--text-sm);
  padding: var(--space-3) var(--space-4);
  text-align: left;
  transition: all var(--duration-fast) var(--ease-out);
}
.hub-node__blank:hover {
  border-color: var(--color-accent);
  color: var(--color-text);
}
.hub-node__blank--makeup {
  border-style: solid;
  border-color: var(--color-accent);
  color: var(--color-text);
  font-weight: 600;
}
.hub-node__blank--makeup .hub-node__plus { color: var(--color-accent); }

.hub-node__plus {
  font-size: var(--text-xl);
  color: var(--color-accent-soft);
  line-height: 1;
}

.hub-node__blank-text { line-height: var(--leading-relaxed); }

/* 查看路线图落地：空白「＋ 下一课」节点闪烁引导（2026-08-21 用户反馈） */
.hub-node__blank--pulse {
  animation: dash-pulse 0.9s var(--ease-in-out) 3;
  border-color: var(--color-accent);
}

/* --- 课程卡（收藏/置顶） --- */

.hub-course {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  background: var(--color-bg-surface);
  border: var(--border-subtle);
  border-radius: var(--radius-md);
  padding: var(--space-2) var(--space-3);
  cursor: pointer;
  transition: all var(--duration-fast) var(--ease-out);
}
.hub-course:hover { border-color: var(--color-accent-soft); }

.hub-course--live { border-color: var(--color-accent-soft); }

.hub-course__tag {
  font-size: var(--text-xs);
  color: var(--color-accent);
  background: var(--color-accent-subtle);
  border-radius: var(--radius-full);
  padding: 2px 8px;
  flex-shrink: 0;
}

.hub-course__title {
  flex: 1;
  min-width: 0;
  font-size: var(--text-sm);
  color: var(--color-text-primary);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.hub-course__meta {
  display: flex;
  gap: var(--space-1);
  flex-shrink: 0;
}

.hub-course__btn {
  background: transparent;
  border: none;
  border-radius: var(--radius-sm);
  color: var(--color-text-tertiary);
  cursor: pointer;
  font-size: var(--text-md);
  line-height: 1;
  padding: 2px 6px;
  transition: color var(--duration-fast) var(--ease-out);
}
.hub-course__btn:hover { color: var(--color-text-secondary); }
.hub-course__btn--on { color: var(--color-accent); }

/* --- 多 mission 分组（DB v7，8b-2a） --- */

.hub-groups {
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
}

.hub-group {
  background: var(--color-bg-surface);
  border: var(--border-subtle);
  border-radius: var(--radius-md);
}

.hub-group--active {
  border-color: var(--color-accent-soft);
  box-shadow: 0 0 0 1px var(--color-accent-soft);
}

.hub-group__head {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  padding: var(--space-3) var(--space-4);
  cursor: pointer;
  user-select: none;
  list-style: none; /* Firefox */
}
.hub-group__head::-webkit-details-marker { display: none; }

.hub-group__caret {
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
  transition: transform var(--duration-fast) var(--ease-out);
}
.hub-group[open] > .hub-group__head .hub-group__caret { transform: rotate(90deg); }

.hub-group__title {
  font-size: var(--text-md);
  font-weight: var(--weight-medium);
  color: var(--color-text-primary);
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.hub-group__meta {
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
  flex-shrink: 0;
}

.hub-group__activate {
  margin-left: auto;
  flex-shrink: 0;
  background: transparent;
  border: var(--border-subtle);
  border-radius: var(--radius-full);
  color: var(--color-accent);
  cursor: pointer;
  font-family: var(--font-sans);
  font-size: var(--text-xs);
  padding: 3px 10px;
  transition: all var(--duration-fast) var(--ease-out);
}
.hub-group__activate:hover {
  background: var(--color-accent-subtle);
  border-color: var(--color-accent-soft);
}

/* 节点 14（2026-08-24）：删除路线按钮（仅非现役组有；现役组不渲染）——
   低调红字，悬停变实红，确认后再删（二次确认弹窗） */
.hub-group__delete {
  flex-shrink: 0;
  background: transparent;
  border: var(--border-subtle);
  border-radius: var(--radius-full);
  color: var(--color-text-tertiary);
  cursor: pointer;
  font-family: var(--font-sans);
  font-size: var(--text-xs);
  padding: 3px 10px;
  transition: all var(--duration-fast) var(--ease-out);
}
.hub-group__delete:hover {
  border-color: var(--color-error);
  color: var(--color-error);
}

.hub-group__body {
  padding: 0 var(--space-4) var(--space-4);
}

/* B148-0b §4.5：[设为当前]/[删除] 随展开移入组内（预览行只剩折叠信息） */
.hub-group__actions {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  padding-bottom: var(--space-3);
}

.hub-group__new {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  width: 100%;
  background: transparent;
  border: 1px dashed var(--color-border);
  border-radius: var(--radius-md);
  color: var(--color-text-tertiary);
  cursor: pointer;
  font-family: var(--font-sans);
  font-size: var(--text-sm);
  padding: var(--space-3) var(--space-4);
  text-align: left;
  transition: all var(--duration-fast) var(--ease-out);
}
.hub-group__new:hover {
  border-color: var(--color-accent-soft);
  color: var(--color-text-secondary);
}

.hub-group__new-plus {
  font-size: var(--text-xl);
  color: var(--color-accent-soft);
  line-height: 1;
}

/* --- 术语卡详情视图（B40，2026-08-22；B41 并入「我的」+ 原地展开） --- */

/* B148-1 #7（2026-09-08 用户实报）：返回按钮左上（模板 button 先于标题） */
.hub-terms-head {
  display: flex;
  align-items: center;
  justify-content: flex-start;
  gap: var(--space-2);
}

.hub-terms-back {
  flex-shrink: 0;
  background: var(--color-bg-elevated);
  color: var(--color-text-secondary);
  border: var(--border-subtle);
  border-radius: var(--radius-sm);
  padding: 4px 10px;
  font-size: var(--text-xs);
  cursor: pointer;
  transition: color var(--transition-fast), border-color var(--transition-fast);
}

.hub-terms-back:hover {
  color: var(--color-accent);
  border-color: var(--color-accent);
}

.hub-terms-groups {
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
}

.hub-terms-group__head {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  margin-bottom: var(--space-2);
}

.hub-terms-group__title {
  font-size: var(--text-md);
  font-weight: var(--weight-medium);
  color: var(--color-text-primary);
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.hub-terms-group__count {
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
  flex-shrink: 0;
}

/* 2026-09-18 模糊想法前优化 #2/#3/#4：术语路线组可折叠 + 搜索框 + 排序/分类下拉 */
.hub-terms-group__head {
  cursor: pointer;
  user-select: none;
  list-style: none;
}
.hub-terms-group__head::-webkit-details-marker { display: none; }
.hub-terms-group__head::marker { content: ''; }

.hub-terms-group__caret {
  display: inline-block;
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
  transition: transform var(--transition-fast);
  flex-shrink: 0;
}
.hub-terms-group[open] > .hub-terms-group__head .hub-terms-group__caret { transform: rotate(90deg); }

.hub-terms-controls {
  margin-left: auto;
  display: flex;
  align-items: center;
  gap: var(--space-2);
  flex-shrink: 0;
}

.hub-terms-search {
  font: inherit;
  font-size: var(--text-xs);
  color: var(--color-text-primary);
  background: var(--color-bg-elevated);
  border: var(--border-subtle);
  border-radius: 999px;
  padding: 4px 12px;
  width: 150px;
  outline: none;
}
.hub-terms-search:focus { border-color: var(--color-accent); }
.hub-terms-search::placeholder { color: var(--color-text-tertiary); }

.hub-terms-filter {
  font: inherit;
  font-size: var(--text-xs);
  color: var(--color-text-secondary);
  background: var(--color-bg-elevated);
  border: var(--border-subtle);
  border-radius: 999px;
  padding: 4px 10px;
  cursor: pointer;
  outline: none;
}
.hub-terms-filter:focus { border-color: var(--color-accent); }

.hub-terms {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}

.hub-term {
  background: var(--color-bg-surface);
  border: var(--border-subtle);
  border-radius: var(--radius-md);
  padding: var(--space-3) var(--space-4);
  cursor: pointer; /* B41：可点展开/收起详情 */
  transition: border-color var(--transition-fast);
}

.hub-term:hover {
  border-color: var(--color-accent);
}

.hub-term__head {
  display: flex;
  align-items: center;
  gap: var(--space-2);
}

.hub-term__caret {
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
  flex-shrink: 0;
  transition: transform var(--transition-fast);
}

.hub-term--open .hub-term__caret {
  transform: rotate(90deg);
}

.hub-term__term {
  font-size: var(--text-md);
  font-weight: var(--weight-medium);
  color: var(--color-accent);
}

.hub-term__source {
  font-size: var(--text-xs, 12px);
  color: var(--color-text-secondary);
  background: var(--color-bg-elevated);
  border-radius: 3px;
  padding: 1px 6px;
}

/* B147-b §4.4：已收藏标星 + type 五类副标签（术语/概念/知识点/金句/想法） */
.hub-term__star {
  flex-shrink: 0;
  color: var(--color-accent);
  font-size: var(--text-xs);
}

.hub-term__type {
  flex-shrink: 0;
  font-size: var(--text-xs, 12px);
  color: var(--color-text-tertiary);
  border: var(--border-subtle);
  border-radius: 3px;
  padding: 1px 6px;
}

/* B41：详情默认收起——展开显示完整解释 + 来源 + 来源路线 + 记录时间 */
.hub-term__detail {
  display: none;
  margin-top: var(--space-2);
  padding-top: var(--space-2);
  border-top: var(--border-subtle);
}

.hub-term--open .hub-term__detail {
  display: block;
}

.hub-term__insight {
  font-size: var(--text-sm);
  color: var(--color-text-secondary);
  line-height: var(--leading-relaxed);
  margin: 0 0 var(--space-2);
}

.hub-term__meta {
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.hub-term__meta-row {
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
  line-height: var(--leading-relaxed);
}

/* --- 每路线最近术语（B41，2026-08-22；B148-0b 总卡→两卡并列，overview 卡退役） --- */

.hub-group__terms {
  margin-top: var(--space-3);
  padding-top: var(--space-3);
  border-top: var(--border-subtle);
}

.hub-group__terms-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-2);
  margin-bottom: var(--space-2);
}

.hub-group__terms-title {
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
}

.hub-group__terms-more {
  background: none;
  border: none;
  padding: 0;
  font-size: var(--text-xs);
  color: var(--color-accent);
  cursor: pointer;
}

.hub-group__terms-more:hover {
  text-decoration: underline;
}

.hub-group__terms-cards {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
}

.hub-term-mini {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  background: var(--color-bg-elevated);
  border-radius: var(--radius-sm);
  padding: 3px 8px;
  max-width: 100%;
}

.hub-term-mini__term {
  font-size: var(--text-xs);
  font-weight: var(--weight-medium);
  color: var(--color-accent);
  white-space: nowrap;
}

.hub-term-mini__source {
  font-size: var(--text-xs, 12px);
  color: var(--color-text-tertiary);
  white-space: nowrap;
}

.hub-term-mini__star {
  flex-shrink: 0;
  color: var(--color-accent);
  font-size: var(--text-xs);
}

/* 2026-09-16 反馈整改：未读/已读状态徽标（详情卡 + 路线组迷你卡） */
.hub-term__state {
  flex-shrink: 0;
  font-size: var(--text-xs, 12px);
  border-radius: 999px;
  padding: 1px 8px;
  margin-left: auto;
}
.hub-term__state--unread {
  color: var(--color-warning, #b45309);
  background: var(--color-warning-soft, rgba(245, 158, 11, 0.12));
  border: 1px solid var(--color-warning-soft, rgba(245, 158, 11, 0.3));
}
.hub-term__state--read {
  color: var(--color-text-tertiary);
  background: transparent;
  border: var(--border-subtle);
}

/* 2026-09-18 模糊想法前优化 #5：术语视图收藏/取消收藏按钮（卡头内，点击不展开卡片） */
.hub-term__save {
  flex-shrink: 0;
  font: inherit;
  font-size: var(--text-xs, 12px);
  color: var(--color-accent);
  /* 2026-09-18 用户实报：accent-soft 实色底与 accent 文字对比度不足——
     对齐「灵感图鉴」按钮口径（accent-subtle 半透明底） */
  background: var(--color-accent-subtle);
  border: 1px solid var(--color-accent);
  border-radius: 999px;
  padding: 1px 8px;
  cursor: pointer;
  transition: filter var(--transition-fast);
}
.hub-term__save:hover { filter: brightness(1.06); }

/* 用户实报（2026-09-18 模糊想法验收 #7）：术语卡头在手机窄视口下
   术语名/来源 chip 不美观换行甚至出屏——移动端结构化换行：名称领行
   （可自然换行、超长无空格单词强制断行）、chips 与按钮整组后续行
   （chip 不折行、超长省略号），字体大小不变 */
@media (max-width: 640px) {
  .hub-term__head { flex-wrap: wrap; row-gap: 4px; }
  .hub-term__term { flex: 1 1 auto; min-width: 0; overflow-wrap: anywhere; }
  .hub-term__type, .hub-term__source {
    white-space: nowrap;
    max-width: 100%;
    overflow: hidden;
    text-overflow: ellipsis;
  }
  .hub-term__save, .hub-term__state { white-space: nowrap; }
}
.hub-term-mini__state {
  flex-shrink: 0;
  font-size: 0.625rem;
  color: var(--color-warning, #b45309);
  background: var(--color-warning-soft, rgba(245, 158, 11, 0.12));
  border-radius: 999px;
  padding: 0 5px;
}

/* --- 空态 / 占位视图 --- */

.hub-empty {
  margin: var(--space-3) 0 0;
  font-size: var(--text-sm);
  color: var(--color-text-tertiary);
  line-height: var(--leading-relaxed);
}

/* --- B147-c（2026-09-08 用户反馈）：笔记条目表格渲染真表格——
   与课程笔记表格模块（.note-table）同形态；只读（无编辑/增删按钮）。
   B148-0b：旧笔记区（.hub-notes/.hub-note）退役 → 笔记索引视图
   （.hub-notes-index/.hub-note-item，样式见上方知识网段）。 --- */

.hub-note-table__title {
  font-size: 0.875rem;
  font-weight: 600;
  color: var(--color-text-primary);
  margin-bottom: 6px;
}
.hub-note-table-wrap { overflow-x: auto; }
.hub-note-table {
  border-collapse: collapse;
  width: 100%;
  font-size: 0.8125rem;
}
.hub-note-table th, .hub-note-table td {
  border: 1px solid var(--color-border);
  padding: 6px 10px;
  text-align: left;
  vertical-align: top;
  color: var(--color-text-secondary);
}
.hub-note-table th {
  color: var(--color-text-primary);
  background: var(--color-accent-subtle);
  font-weight: 600;
  white-space: nowrap;
}
.hub-note-table__empty {
  margin-top: 8px;
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
}

.hub-placeholder {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--space-3);
  text-align: center;
  background: var(--color-bg-surface);
  border: var(--border-subtle);
  border-radius: var(--radius-lg);
  padding: var(--space-12) var(--space-8);
  max-width: 520px;
  margin: var(--space-8) auto 0;
}

.hub-placeholder__icon {
  font-size: var(--text-3xl, 40px);
  line-height: 1;
}

.hub-placeholder__title {
  margin: 0;
  font-size: var(--text-xl);
  font-weight: var(--weight-medium);
  color: var(--color-text-primary);
}

.hub-placeholder__body {
  margin: 0;
  font-size: var(--text-sm);
  color: var(--color-text-secondary);
  line-height: var(--leading-relaxed);
  max-width: 400px;
}

.hub-placeholder__badge {
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
  border: var(--border-subtle);
  border-radius: var(--radius-full);
  padding: 3px 12px;
}

.hub-placeholder__note {
  margin: 0;
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
}

/* --- 响应式：统计条收窄 --- */

@media (max-width: 900px) {
  .hub-panel {
    width: 100%;
    max-height: 50vh;
    flex-shrink: 0;
  }
  .hub-stats { grid-template-columns: repeat(3, 1fr); }
  .hub-view { padding: var(--space-4); }
}

@media (max-width: 640px) {
  .hub-stats { grid-template-columns: repeat(2, 1fr); }
}

/* === 设置视图（节点 8b-2c，2026-08-22）——§14.6-8 八项 === */

.hub-settings {
  display: flex;
  flex-direction: column;
  gap: var(--space-3, 12px);
}

.hub-settings__section {
  background: var(--color-bg-secondary, #1a1a2e);
  border: var(--border-subtle);
  border-radius: var(--radius-lg, 12px);
  padding: var(--space-4, 16px);
}

.hub-settings__head {
  margin: 0 0 var(--space-2, 8px);
  font-size: var(--text-base, 14px);
  color: var(--color-text, #eee);
}

/* === B139 节点①（2026-09-03）：设置分区折叠——标题行点击开合；
   默认只展开「avvmo 风格」「显示」（模板层定；后台模型及调整 2026-09-10
   用户拍板删除），会话内记忆 === */
.hub-fold-sec { padding: 0; overflow: hidden; }
.hub-fold-head {
  display: flex;
  align-items: center;
  gap: var(--space-2, 8px);
  width: 100%;
  padding: var(--space-3, 12px) var(--space-4, 16px);
  background: none;
  border: none;
  cursor: pointer;
  font: inherit;
  font-size: var(--text-base, 14px);
  font-weight: 600;
  color: var(--color-text, #eee);
  text-align: left;
}
.hub-fold-head:hover { color: var(--color-accent, #C4A265); }
.hub-fold-chev { flex: none; color: var(--color-accent, #C4A265); font-size: var(--text-xs, 12px); }
.hub-fold-body { display: none; padding: 0 var(--space-4, 16px) var(--space-4, 16px); }
.hub-fold-sec[data-hub-fold-open] .hub-fold-body { display: block; }
.hub-fold-sec[data-hub-fold-open] .hub-fold-head { border-bottom: var(--border-subtle); }
.hub-fold-head .hub-kb-info { margin-left: 2px; }

.hub-settings__row {
  display: flex;
  align-items: center;
  gap: var(--space-3, 12px);
  margin-bottom: var(--space-2, 8px);
}

.hub-settings__label {
  flex-shrink: 0;
  min-width: 88px;
  font-size: var(--text-sm, 12px);
  color: var(--color-text-secondary, #aaa);
}

.hub-settings__value {
  font-size: var(--text-sm, 12px);
  color: var(--color-text, #eee);
}

.hub-settings__styles {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2, 8px);
}

.hub-settings-style {
  padding: 6px 14px;
  font-size: var(--text-sm, 12px);
  color: var(--color-text, #eee);
  background: var(--color-bg-tertiary, #111);
  border: 1px solid var(--color-border, #333);
  border-radius: var(--radius-full, 999px);
  cursor: pointer;
}

.hub-settings-style:hover { border-color: var(--color-accent, #4ade80); }

.hub-settings-style--active {
  background: var(--color-accent, #4ade80);
  border-color: var(--color-accent, #4ade80);
  color: #000;
  font-weight: 600;
}

.hub-settings__actions {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2, 8px);
  margin-top: var(--space-2, 8px);
}

.hub-settings__btn {
  padding: 6px 14px;
  font-size: var(--text-sm, 12px);
  color: var(--color-text, #eee);
  background: var(--color-bg-tertiary, #222);
  border: 1px solid var(--color-border, #333);
  border-radius: var(--radius-sm, 6px);
  cursor: pointer;
}

.hub-settings__btn:hover { background: var(--color-bg-elevated, #333); }

.hub-settings__btn--primary {
  background: var(--color-accent, #4ade80);
  border-color: var(--color-accent, #4ade80);
  color: #000;
}

.hub-settings__btn--danger {
  border-color: var(--color-danger, #f87171);
  color: var(--color-danger, #f87171);
}

.hub-settings__hint {
  margin: var(--space-2, 8px) 0 0;
  font-size: var(--text-xs, 11px);
  color: var(--color-text-tertiary, #888);
}

.hub-settings-notice {
  margin: 0;
  padding: var(--space-2, 8px) var(--space-3, 12px);
  font-size: var(--text-sm, 12px);
  color: var(--color-text, #eee);
  background: var(--color-bg-secondary, #1a1a2e);
  border: 1px solid var(--color-accent, #4ade80);
  border-radius: var(--radius-sm, 6px);
}

/* === R0a（2026-08-24）：设置「知识库」管理区（§14.18 拍板；
   B65（2026-08-25）改版：工具栏一行 / 共用行 / 分页 / ⓘ 角标 / 弹窗族） === */

.hub-settings-kb__toolbar {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--space-2, 8px);
  margin-top: var(--space-3, 12px);
}

.hub-settings-kb__input,
.hub-settings-kb__select {
  padding: 6px 10px;
  font-size: var(--text-sm, 12px);
  color: var(--color-text, #eee);
  background: var(--color-bg-surface, #0d0d1a);
  border: 1px solid var(--color-border, #333);
  border-radius: var(--radius-sm, 6px);
}

.hub-settings-kb__input:focus,
.hub-settings-kb__select:focus {
  outline: none;
  border-color: var(--color-accent, #4ade80);
}

.hub-settings-kb__input--grow { flex: 1; font-family: inherit; }

.hub-settings-kb__meta-line {
  margin: var(--space-2, 8px) 0 0;
  font-size: var(--text-xs, 11px);
  color: var(--color-text-tertiary, #888);
}

.hub-settings-kb__docs {
  display: flex;
  flex-direction: column;
  gap: var(--space-2, 8px);
  margin-top: var(--space-3, 12px);
}

.hub-settings-kb__doc {
  padding: var(--space-2, 8px) var(--space-3, 12px);
  background: var(--color-bg-surface, #0d0d1a);
  border: 1px solid var(--color-border, #333);
  border-radius: var(--radius-sm, 6px);
}

.hub-settings-kb__doc-head {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--space-2, 8px);
}

.hub-settings-kb__doc-title {
  font-size: var(--text-sm, 12px);
  font-weight: 600;
  color: var(--color-text, #eee);
}

.hub-settings-kb__badge {
  padding: 1px 8px;
  font-size: var(--text-xs, 11px);
  color: var(--color-accent, #4ade80);
  background: transparent;
  border: 1px solid var(--color-accent, #4ade80);
  border-radius: var(--radius-full, 999px);
}

.hub-settings-kb__badge--mission {
  color: var(--color-info, #60a5fa);
  border-color: var(--color-info, #60a5fa);
}

.hub-settings-kb__badge--src {
  color: var(--color-text-secondary, #aaa);
  border-color: var(--color-border, #333);
}

.hub-settings-kb__meta {
  font-size: var(--text-xs, 11px);
  color: var(--color-text-tertiary, #888);
}

/* B65：可点击元信息（Wiki / 字数 / 块数）——链接化的按钮样式 */
.hub-settings-kb__meta-link {
  padding: 0;
  font-size: var(--text-xs, 11px);
  color: var(--color-info, #60a5fa);
  background: none;
  border: none;
  border-bottom: 1px dashed currentColor;
  cursor: pointer;
}

.hub-settings-kb__meta-link:hover { color: var(--color-text, #eee); }

.hub-settings-kb__actions {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2, 8px);
  margin-top: var(--space-2, 8px);
}

.hub-settings-kb__confirm {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--space-2, 8px);
  margin-top: var(--space-2, 8px);
  padding: var(--space-2, 8px) var(--space-3, 12px);
  background: var(--color-bg-surface, #0d0d1a);
  border: 1px dashed var(--color-accent, #4ade80);
  border-radius: var(--radius-sm, 6px);
  font-size: var(--text-sm, 12px);
  color: var(--color-text-secondary, #aaa);
}

.hub-settings-kb__confirm .hub-settings-kb__input,
.hub-settings-kb__confirm .hub-settings-kb__select { flex: 1; min-width: 140px; }

.hub-settings-kb__confirm .hub-settings-kb__input { flex: 2; }

.hub-settings-kb__result-snippet {
  margin-top: var(--space-1, 4px);
  font-size: var(--text-xs, 11px);
  line-height: 1.5;
  color: var(--color-text-secondary, #aaa);
}

.hub-settings-kb__empty {
  margin: var(--space-2, 8px) 0 0;
  font-size: var(--text-xs, 11px);
  color: var(--color-text-tertiary, #888);
}

/* B65：分页行（每 5 条一页；边界按钮 disabled） */
.hub-settings-kb__pager {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-3, 12px);
  margin-top: var(--space-3, 12px);
}

.hub-settings__btn:disabled {
  opacity: 0.4;
  cursor: not-allowed;
}

/* B65：知识库 ⓘ 角标——悬停/聚焦显示原理说明（如实：向量化索引计划中） */
.hub-kb-info {
  position: relative;
  display: inline-block;
  margin-left: var(--space-2, 8px);
  font-size: var(--text-sm, 12px);
  color: var(--color-text-tertiary, #888);
  cursor: help;
}

.hub-kb-info__tip {
  position: absolute;
  top: 140%;
  left: 0;
  z-index: 10;
  width: 300px;
  padding: var(--space-3, 12px);
  font-size: var(--text-xs, 11px);
  line-height: 1.6;
  color: var(--color-text, #eee);
  background: var(--color-bg-secondary, #1a1a2e);
  border: 1px solid var(--color-border, #333);
  border-radius: var(--radius-sm, 6px);
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.5);
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transition: opacity 0.15s ease;
}

.hub-kb-info:hover .hub-kb-info__tip,
.hub-kb-info:focus .hub-kb-info__tip {
  opacity: 1;
  visibility: visible;
}

/* 查看原文只读浮层 */
.kb-doc-overlay {
  position: fixed;
  inset: 0;
  z-index: 2000;
  display: flex;
  align-items: center;
  justify-content: center;
  background: rgba(0, 0, 0, 0.6);
}

/* B63（2026-08-25）：display:flex 压过 UA [hidden]（B60③ 同一陷阱）——
   显隐走 hidden 属性，必须显式声明 hidden 态 display:none，否则
   「关闭」/「在知识库中管理」置 hidden 后浮层仍显示 */
.kb-doc-overlay[hidden] { display: none; }

.kb-doc-overlay__card {
  display: flex;
  flex-direction: column;
  width: min(720px, 86vw);
  max-height: 80vh;
  padding: var(--space-4, 16px);
  background: var(--color-bg-secondary, #1a1a2e);
  border: var(--border-subtle);
  border-radius: var(--radius-lg, 12px);
}

.kb-doc-overlay__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-3, 12px);
  margin-bottom: var(--space-2, 8px);
}

.kb-doc-overlay__title {
  font-size: var(--text-base, 14px);
  font-weight: 600;
  color: var(--color-text, #eee);
}

/* B145 F5（2026-09-06 二轮反馈 #10.3）：浮层来源行——可点链接 + 域名
   （.web-src 芯片 B98 同款视觉；无来源时整行隐藏） */
.kb-doc-overlay__src {
  margin: 0 0 var(--space-2, 8px);
}

.kb-doc-overlay__src[hidden] { display: none; }

/* 优化 #9（2026-09-18）：只读原文浮层升级为 md 渲染——正文由 mdToHtml
   生成（段落 <br>/块级元素），等宽字体下沉到 .md-code/.md-inline-code；
   textarea 编辑形态由 .kb-doc-overlay--modal 覆写 +
   .kb-doc-overlay__textarea 承担（口径不变） */
.kb-doc-overlay__body {
  flex: 1;
  margin: 0;
  padding: var(--space-3, 12px);
  overflow: auto;
  font-family: inherit;
  font-size: var(--text-sm, 12px);
  line-height: 1.6;
  white-space: normal;
  word-break: break-word;
  color: var(--color-text, #eee);
  background: var(--color-bg-surface, #0d0d1a);
  border: 1px solid var(--color-border, #333);
  border-radius: var(--radius-sm, 6px);
}

/* 模糊想法前优化 #9（2026-09-18）：轻量 Markdown 渲染元素样式
   （mdToHtml 输出——KB 原文浮层 / 笔记卡全文 / 学习记录；lesson iframe
   同款样式在 lesson-templates.js 内嵌 CSS） */
.md-code-block {
  margin: 8px 0;
  border: 1px solid var(--color-border, #333);
  border-radius: var(--radius-sm, 6px);
  overflow: hidden;
  background: var(--color-bg-surface, #0d0d1a);
}
.md-code-lang {
  padding: 2px 10px;
  font-size: var(--text-xs, 12px);
  color: var(--color-text-secondary, #9B9994);
  background: var(--color-accent-subtle, rgba(196, 162, 101, 0.12));
  border-bottom: 1px solid var(--color-border, #333);
}
.md-code {
  margin: 0;
  padding: 10px 12px;
  overflow-x: auto;
  font-family: monospace;
  font-size: var(--text-sm, 12px);
  line-height: 1.6;
  white-space: pre-wrap;
  color: var(--color-text, #eee);
}
.md-inline-code {
  padding: 0 4px;
  font-family: monospace;
  font-size: 0.9em;
  color: var(--color-accent, #c4a265);
  background: var(--color-accent-subtle, rgba(196, 162, 101, 0.12));
  border-radius: 4px;
}
.md-h { margin: 10px 0 4px; font-weight: 700; line-height: 1.4; }
.md-list { margin: 6px 0; padding-left: 1.4em; }
.md-list li { margin: 2px 0; }
.md-blockquote {
  margin: 6px 0;
  padding: 2px 10px;
  border-left: 3px solid var(--color-accent, #c4a265);
  color: var(--color-text-secondary, #9B9994);
}
.material-table { border-collapse: collapse; margin: 8px 0; width: 100%; font-size: var(--text-sm, 12px); }
.material-table th, .material-table td {
  border: 1px solid var(--color-border, #333);
  padding: 6px 10px;
  text-align: left;
  vertical-align: top;
}
.material-table th { color: var(--color-accent, #c4a265); background: var(--color-accent-subtle, rgba(196, 162, 101, 0.12)); }

/* B94（2026-08-26，§14.36）：home DOM 内知识库引用来源行/芯片——
   课程对话气泡 / 教学卡 / 右栏术语卡 / hub 术语详情（与课程 iframe
   内 .ref-src 同款视觉；点击由 home 委托 → 只读浮层） */
.ref-src-row {
  font-size: var(--text-xs, 12px);
  color: var(--color-text-secondary, #9B9994);
  margin-top: 6px;
}
.ref-src {
  /* B146-b b5：chip 可为 <a>（有原始网址直开）或 button（.md 浮层兜底）——
     display/text-decoration 对齐锚点默认样式，两种形态视觉一致。
     B146 十轮反馈（2026-09-07 用户实测）：参考资料不高亮——透明底 +
     简单外围线，悬停只提亮边框；不突出于学习记录 */
  display: inline-block;
  text-decoration: none;
  background: transparent;
  border: 1px solid var(--color-border, #333);
  color: var(--color-text-secondary, #9B9994);
  border-radius: 6px;
  padding: 1px 8px;
  cursor: pointer;
  font-size: var(--text-xs, 12px);
  font-family: inherit;
  margin-left: 6px;
}
.ref-src:first-child { margin-left: 0; }
.ref-src:hover { border-color: var(--color-accent-soft, rgba(196, 162, 101, 0.4)); color: var(--color-text, #eee); }

/* B98（2026-08-27，§14.37）：联网搜索来源行（方案 Y——app 持有真实检索来源；
   蓝色系与金色知识库引用 chips 区分；点击新开外链） */
.web-src {
  display: inline-block;
  /* B146 十轮反馈（2026-09-07）：联网搜索来源同参考资料口径——不高亮，
     透明底 + 简单外围线；悬停提亮边框（蓝色系保留来源身份） */
  background: transparent;
  border: 1px solid var(--color-border, #333);
  color: var(--color-text-secondary, #9B9994);
  border-radius: 6px;
  padding: 1px 8px;
  cursor: pointer;
  font-size: var(--text-xs, 12px);
  text-decoration: none;
  margin-left: 6px;
}
.web-src:first-child { margin-left: 0; }
.web-src:hover { border-color: rgba(96, 141, 204, 0.5); color: var(--color-text, #eee); }
.web-src__domain {
  color: var(--color-text-secondary, #9B9994);
  font-size: var(--text-xs, 12px);
  margin-left: 4px;
}

/* B65（2026-08-25）：知识库弹窗族——Wiki 编辑 / 分块详情 / 编辑原文
   （与只读原文浮层共用 .kb-doc-overlay 壳；[hidden] 规则同款） */
.kb-doc-overlay--modal .kb-doc-overlay__card { width: min(760px, 90vw); }

.kb-doc-overlay--modal .kb-doc-overlay__body {
  padding: 0;
  font-family: inherit;
  white-space: normal;
  background: transparent;
  border: none;
}

.kb-doc-overlay__textarea {
  width: 100%;
  min-height: 180px;
  padding: var(--space-2, 8px);
  font-family: monospace;
  font-size: var(--text-sm, 12px);
  line-height: 1.6;
  color: var(--color-text, #eee);
  background: var(--color-bg-surface, #0d0d1a);
  border: 1px solid var(--color-border, #333);
  border-radius: var(--radius-sm, 6px);
  resize: vertical;
}

.kb-doc-overlay__textarea:focus { outline: none; border-color: var(--color-accent, #4ade80); }

.kb-doc-overlay__foot {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--space-2, 8px);
  margin-top: var(--space-3, 12px);
}

.kb-doc-overlay__hint {
  flex: 1;
  min-width: 180px;
  font-size: var(--text-xs, 11px);
  color: var(--color-text-tertiary, #888);
}

.kb-doc-overlay__chunk {
  padding: var(--space-2, 8px) var(--space-3, 12px);
  background: var(--color-bg-surface, #0d0d1a);
  border: 1px solid var(--color-border, #333);
  border-radius: var(--radius-sm, 6px);
}

.kb-doc-overlay__chunk + .kb-doc-overlay__chunk { margin-top: var(--space-2, 8px); }

.kb-doc-overlay__chunk-head {
  font-size: var(--text-xs, 11px);
  font-weight: 600;
  color: var(--color-info, #60a5fa);
}

.kb-doc-overlay__chunk-text {
  margin: var(--space-1, 4px) 0 0;
  font-size: var(--text-sm, 12px);
  line-height: 1.6;
  color: var(--color-text-secondary, #aaa);
  word-break: break-word;
}

/* === B45（2026-08-22）：退出登录三栏遮罩（用户拍板） ===
   数据保留在 IndexedDB，遮罩揭开即恢复；学习区 = 居中占位卡 + [登录]。
   面板补 position:relative 供绝对定位遮罩锚定（面板原有布局不受影响）。 */
#chat-panel,
#lesson-panel,
#dashboard-panel {
  position: relative;
}

.home-loggedout-mask {
  position: absolute;
  inset: 0;
  z-index: 20;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: var(--space-3, 12px);
  text-align: center;
  background: var(--color-bg-surface, #0d0d1a);
}

.home-loggedout-mask[hidden] {
  display: none; /* flex 会压过 UA [hidden]，同 hub-panel 先例（B34③） */
}

.home-loggedout-card {
  max-width: 360px;
  width: 90%;
  padding: var(--space-6, 24px);
  background: var(--color-bg-secondary, #1a1a2e);
  border: 1px solid var(--color-border, #333);
  border-radius: var(--radius-lg, 12px);
}

.home-loggedout-card__title {
  margin: 0 0 var(--space-2, 8px);
  font-size: var(--text-lg, 16px);
  color: var(--color-text, #eee);
}

.home-loggedout-card__text {
  margin: 0 0 var(--space-4, 16px);
  font-size: var(--text-sm, 12px);
  color: var(--color-text-secondary, #aaa);
}

.home-loggedout-card__login {
  padding: var(--space-2, 8px) var(--space-5, 20px);
  font-size: var(--text-sm, 12px);
  font-weight: 600;
  background: var(--color-accent, #4ade80);
  color: #000;
  border: none;
  border-radius: var(--radius-sm, 6px);
  cursor: pointer;
}

.home-loggedout-note {
  margin: 0;
  font-size: var(--text-sm, 12px);
  color: var(--color-text-secondary, #aaa);
}

/* B146-c c1（2026-09-06，spec §5.1）：B36 全局置灰退役——生成期间不再
   全量禁用按钮（.ai-busy 容器规则与 busy-allow 豁免清单删除）；同课生成
   触发类控件各自局部禁用（JS disabled + 「生成中…」状态），跨区域
   （左栏对话/笔记/个人中心/回看）放行。
   B60（2026-08-24 用户裁决）：mission 生成期「回到学习」锁定仍保留——
   禁用（click 不派发）+ 置灰；生成落定（成功/失败）由
   home._setHubBackLocked 恢复（B146-c c2：仅确认生成在途计锁）。 */
#home-container .hub-back:disabled {
  pointer-events: none;
  opacity: 0.55;
  cursor: not-allowed;
}

/* === 纯聊工作台（节点 8b-2b 2026-08-21） ===
   hub「纯净聊天」导航：左栏 = 对话历史列表；中+右区域 = 对话工作台
   （标题/记忆开关/引用菜单/消息流/输入行）。 */

/* hub-view 全高布局（纯聊模式无内边距、内部滚动） */
.hub-view--pure {
  padding: 0;
  display: flex;
  flex-direction: column;
  overflow: hidden;
}

.pure-chat {
  flex: 1;
  min-height: 0;
  display: flex;
  flex-direction: column;
}

/* B149-6（2026-09-10）：「＋」二选一入口（新建路线 / 日常聊天） */
.pure-chat--chooser {
  align-items: center;
  justify-content: center;
  padding: var(--space-5);
  overflow-y: auto;
}

.create-chooser {
  width: 100%;
  max-width: 620px;
  text-align: center;
}

.create-chooser__title {
  margin: 0 0 var(--space-2);
  font-size: var(--text-xl);
  font-weight: var(--weight-bold);
  color: var(--color-text-primary);
}

.create-chooser__hint {
  margin: 0 0 var(--space-5);
  font-size: var(--text-sm);
  color: var(--color-text-secondary);
}

.create-chooser__cards {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--space-4);
  text-align: left;
}

.create-chooser__card {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  padding: var(--space-4);
  background: var(--color-bg-surface);
  border: var(--border-subtle);
  border-radius: var(--radius-md);
  cursor: pointer;
  font-family: var(--font-sans);
  transition: all var(--duration-fast) var(--ease-out);
}

.create-chooser__card:hover {
  border-color: var(--color-accent-soft);
  transform: translateY(-1px);
  box-shadow: var(--shadow-md);
}

.create-chooser__card-title {
  font-size: var(--text-md);
  font-weight: var(--weight-medium);
  color: var(--color-text-primary);
}

.create-chooser__card-desc {
  font-size: var(--text-xs);
  color: var(--color-text-secondary);
  line-height: 1.6;
}

/* B154-1 第四轮 bug7（2026-09-14）：草稿询问态「← 返回」——回到二选一入口 */
.create-chooser__back {
  margin-top: var(--space-4);
  padding: var(--space-2) var(--space-4);
  background: none;
  border: none;
  border-radius: var(--radius-sm);
  cursor: pointer;
  font-family: var(--font-sans);
  font-size: var(--text-sm);
  color: var(--color-text-secondary);
}

.create-chooser__back:hover {
  color: var(--color-text-primary);
  background: var(--color-bg-elevated);
}

@media (max-width: 640px) {
  .create-chooser__cards { grid-template-columns: 1fr; }
}

.pure-chat__head {
  flex-shrink: 0;
  border-bottom: var(--border-subtle);
  background: var(--color-bg-surface);
  padding: var(--space-3) var(--space-4);
}

.pure-chat__headrow {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  flex-wrap: wrap;
}

.pure-chat__title {
  font-size: var(--text-md);
  font-weight: var(--weight-medium);
  color: var(--color-text-primary);
  max-width: 40ch;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.pure-chat__badge {
  font-size: var(--text-xs);
  color: var(--color-accent);
  background: var(--color-accent-subtle);
  border-radius: var(--radius-sm);
  padding: 2px 8px;
}

.pure-chat__spacer { flex: 1; }

.pure-chat__refs-btn {
  background: transparent;
  border: var(--border-subtle);
  border-radius: var(--radius-sm);
  color: var(--color-text-secondary);
  cursor: pointer;
  font-family: var(--font-sans);
  font-size: var(--text-xs);
  padding: 4px 10px;
  transition: all var(--duration-fast) var(--ease-out);
}
.pure-chat__refs-btn:hover { border-color: var(--color-accent-soft); color: var(--color-accent); }

/* B149-6（2026-09-10）：纯聊工作台记忆/专家开关——共用 .toggle 点亮组件 */
.pure-chat__memory,
.pure-chat__mode {
  gap: 5px;
}

.pure-chat__refs-wrap { position: relative; }

.pure-chat__refchips {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-1);
  margin-top: var(--space-2);
}
.pure-chat__refchip {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: var(--text-xs);
  color: var(--color-accent);
  background: var(--color-accent-subtle);
  border-radius: var(--radius-sm);
  padding: 2px 4px 2px 8px;
}

/* B40：chip 右上 ✕ = 取消这条引用 */
.pure-chat__refchip-x {
  background: none;
  border: none;
  border-radius: 50%;
  color: var(--color-text-tertiary);
  cursor: pointer;
  font-family: var(--font-sans);
  font-size: var(--text-xs, 12px);
  line-height: 1;
  padding: 2px 4px;
  transition: all var(--duration-fast) var(--ease-out);
}
.pure-chat__refchip-x:hover { color: var(--color-text-primary); background: var(--color-bg-elevated); }

.pure-chat__refs-menu {
  position: absolute;
  right: 0;
  top: calc(100% + 4px);
  z-index: 20;
  min-width: 260px;
  max-height: 340px;
  overflow-y: auto;
  background: var(--color-bg-surface);
  border: var(--border-subtle);
  border-radius: var(--radius-md);
  padding: var(--space-3);
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.25);
}

.pure-refs__group { margin-bottom: var(--space-3); }
.pure-refs__group:last-of-type { margin-bottom: var(--space-2); }

.pure-refs__label {
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
  margin-bottom: var(--space-1);
}

.pure-refs__item {
  display: block;
  width: 100%;
  text-align: left;
  background: none;
  border: none;
  border-radius: var(--radius-sm);
  padding: 5px 8px;
  cursor: pointer;
  font-family: var(--font-sans);
  font-size: var(--text-sm);
  color: var(--color-text-secondary);
  transition: background var(--duration-fast) var(--ease-out);
}
.pure-refs__item:hover { background: var(--color-bg-elevated); }
.pure-refs__item--on { color: var(--color-accent); font-weight: var(--weight-medium); }

.pure-refs__empty {
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
  margin: 2px 8px;
}

.pure-refs__clear {
  width: 100%;
  background: none;
  border: var(--border-subtle);
  border-radius: var(--radius-sm);
  padding: 5px 8px;
  cursor: pointer;
  font-family: var(--font-sans);
  font-size: var(--text-xs);
  color: var(--color-text-secondary);
}
.pure-refs__clear:hover { border-color: var(--color-accent-soft); color: var(--color-accent); }

.pure-chat__messages {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  padding: var(--space-4) var(--space-5);
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}

.pure-chat__input {
  flex-shrink: 0;
  display: flex;
  gap: var(--space-2);
  /* B154-2 二轮 #8 修正A（2026-09-16）：左 padding 清零——工具簇贴死左边界，
     输入框拿满剩余宽度；右 padding 保留 */
  padding: var(--space-3) var(--space-4) var(--space-3) 0;
  border-top: var(--border-subtle);
  background: var(--color-bg-surface);
  /* B154-2 待优化 #8：输入框向上生长，表情/附件/发送贴最下行；
     修正B：展开/发送列 align-self:stretch 撑满行高（展开列顶 = 输入框上边沿） */
  align-items: flex-end;
}

/* 确认生成挂进消息流的进度节点（沿用 B36 三行指示条样式） */
.pure-chat__messages .lesson-gen-progress {
  margin: var(--space-2) 0;
}

/* B144 H2（2026-09-05 内测）：纯聊目标意图轻提示——「进入＋制定路线」 */
.pure-goal-nudge {
  align-self: flex-start;
  max-width: 85%;
  margin: var(--space-2) 0;
  padding: var(--space-3) var(--space-4);
  border: 1px solid var(--color-accent-border);
  border-radius: var(--radius-sm);
  background: var(--color-accent-subtle);
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  align-items: flex-start;
}
.pure-goal-nudge__text {
  margin: 0;
  font-size: var(--text-sm);
  line-height: var(--leading-normal);
  color: var(--color-text-secondary);
}
.pure-goal-nudge__btn {
  background: var(--color-accent);
  border: none;
  border-radius: 999px;
  padding: 0.4rem 1rem;
  font-size: var(--text-sm);
  font-weight: 600;
  color: var(--color-bg-deep);
  cursor: pointer;
}
.pure-goal-nudge__btn:hover { background: var(--color-accent-soft); }

.pure-chat__input-area {
  flex: 1;
  min-height: 40px;
  /* B154-2 待优化 #8：1-10 行自适应——高度由 autosizeChatTextarea 统管
     （10 行封顶 + 内部滚动），CSS 不再设 max-height（避免与 JS 上限冲突） */
  padding: var(--space-2) var(--space-3);
  background: var(--color-bg-deep);
  border: var(--border-subtle);
  border-radius: var(--radius-sm);
  color: var(--color-text-primary);
  font-family: var(--font-sans);
  font-size: var(--text-sm);
  line-height: var(--leading-normal);
  resize: none;
  transition: border-color var(--duration-fast) var(--ease-out);
}
.pure-chat__input-area:focus { outline: none; border-color: var(--color-accent-soft); }
.pure-chat__input-area::placeholder { color: var(--color-text-tertiary); }

.pure-chat__send {
  min-width: 64px;
  height: 40px;
  background: var(--color-accent-subtle);
  border: none;
  border-radius: var(--radius-sm);
  color: var(--color-accent);
  cursor: pointer;
  flex-shrink: 0;
  font-family: var(--font-sans);
  font-size: var(--text-sm);
  transition: background var(--duration-fast) var(--ease-out);
}
.pure-chat__send:hover { background: var(--color-accent-glow); }

/* B102（2026-08-27）：只占内容高度贴底——原 flex:1 与消息区平分剩余高度，
   提示框撑到正中间，只留上半区给历史回放 */
.pure-chat__readonly {
  flex-shrink: 0;
  margin: var(--space-2) var(--space-4) var(--space-3);
  font-size: var(--text-sm);
  color: var(--color-text-tertiary);
  padding: var(--space-2) var(--space-3);
  border: 1px dashed var(--border-subtle);
  border-radius: var(--radius-sm);
  text-align: center;
}

/* B40：新路线对话五方面进展卡（常驻顶部，已知项实时点亮） */
.pure-chat__profile {
  flex-shrink: 0;
  border-bottom: var(--border-subtle);
  background: var(--color-bg-surface);
  padding: var(--space-2) var(--space-4);
}

.pure-chat__profile-inner {
  display: flex;
  gap: var(--space-2);
  overflow-x: auto;
  padding-bottom: 2px;
}

.aspect-card {
  flex: 0 0 auto;
  min-width: 96px;
  max-width: 160px;
  background: var(--color-bg-elevated);
  border: var(--border-subtle);
  border-radius: var(--radius-sm);
  padding: var(--space-2) var(--space-3);
}
.aspect-card--known {
  border-color: var(--color-accent-soft);
  background: var(--color-accent-subtle);
}

.aspect-card__label {
  font-size: var(--text-xs, 12px);
  color: var(--color-text-tertiary);
  margin-bottom: 2px;
}

.aspect-card__value {
  font-size: var(--text-xs);
  color: var(--color-text-primary);
  line-height: var(--leading-snug);
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.aspect-card:not(.aspect-card--known) .aspect-card__value { color: var(--color-text-tertiary); }

/* B155（2026-09-21）：目标类型格（含修饰符 chips）+ 待确认/不适用状态卡 */
.aspect-card--type {
  min-width: 124px;
  max-width: 240px;
  border-color: var(--color-accent-soft);
  background: var(--color-accent-subtle);
}
.aspect-card--type .aspect-card__value { color: var(--color-text-primary); }

.aspect-card--pending {
  border-style: dashed;
  border-color: var(--border-subtle);
  background: transparent;
}

.aspect-card--na {
  background: transparent;
  border-color: transparent;
}

.aspect-chip {
  display: inline-block;
  margin: 2px 4px 0 0;
  padding: 0 var(--space-1);
  font-size: 10px;
  line-height: 16px;
  border: var(--border-subtle);
  border-radius: var(--radius-sm);
  color: var(--color-text-secondary);
  white-space: nowrap;
}
.aspect-chip--pending {
  border-style: dashed;
  color: var(--color-text-tertiary);
}

/* 左栏历史列表 */
.pure-history {
  display: flex;
  flex-direction: column;
  height: 100%;
}

.pure-history__head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: var(--space-2);
}

.pure-history__hint {
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
}

/* B154-1 第四轮 bug10（2026-09-14 用户反馈）：「＋ 新对话」按钮退役——
   唯一新建对话入口 = 个人中心「＋」导航（二选一）；此处样式随按钮移除 */

.pure-history__list {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
}

.pure-history__item {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  padding: var(--space-2) var(--space-3);
  border: var(--border-subtle);
  border-radius: var(--radius-sm);
  background: var(--color-bg-surface);
  cursor: pointer;
  transition: all var(--duration-fast) var(--ease-out);
}
.pure-history__item:hover { border-color: var(--color-accent-soft); }
.pure-history__item--active {
  border-color: var(--color-accent-soft);
  background: var(--color-accent-subtle);
}

.pure-history__main { flex: 1; min-width: 0; }

.pure-history__title {
  font-size: var(--text-sm);
  color: var(--color-text-primary);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.pure-history__meta {
  display: flex;
  align-items: center;
  gap: var(--space-1);
  margin-top: 2px;
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
}

.pure-history__badge {
  padding: 0 5px;
  border-radius: 3px;
  background: var(--color-bg-elevated);
  font-size: var(--text-xs, 12px);
  color: var(--color-text-secondary);
}
.pure-history__badge--new { color: var(--color-accent); }
/* B40：课程对话 / 欢迎访谈会话徽标 */
.pure-history__badge--course { color: var(--color-success); }
.pure-history__badge--welcome { color: var(--color-warning); }

.pure-history__del {
  background: none;
  border: none;
  cursor: pointer;
  font-size: var(--text-sm);
  color: var(--color-accent); /* B41：垃圾桶用主题黄——深色模式下可见 */
  opacity: 0.55;
  transition: opacity var(--duration-fast) var(--ease-out);
}
.pure-history__del:hover { opacity: 1; }

.pure-history__clear {
  align-self: center;
  margin-top: var(--space-3);
  background: none;
  border: var(--border-subtle);
  border-radius: var(--radius-sm);
  padding: 4px 12px;
  cursor: pointer;
  font-family: var(--font-sans);
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
  transition: all var(--duration-fast) var(--ease-out);
}
.pure-history__clear:hover { border-color: var(--color-accent-soft); color: var(--color-text-secondary); }

.pure-history__empty {
  font-size: var(--text-sm);
  color: var(--color-text-tertiary);
  padding: var(--space-3);
  text-align: center;
}

/* === B129（2026-09-02）：移动端抽屉布局（取代 B128 三 Tab） ===
   常态仅学习区全屏；左抽屉 = #chat-panel、右抽屉 = #dashboard-panel；
   面板 DOM 常驻，data-drawer 驱动 visibility+transform 滑入滑出。
   置于文件尾：B45 的 ID 规则 #chat-panel{position:relative} 在本块之前，
   必须靠文件序赢得级联。 */

/* 桌面端一律不渲染抽屉控件 */
#drawer-scrim { display: none; }
#lesson-topbar { display: none; }
.chat-drawer-back { display: none; }
.hub-drawer-btn { display: none; }
.hub-more-btn { display: none; } /* B130：三横杠更多仅移动端 */

@media (max-width: 900px) {
  .home-container {
    flex-direction: column;
    height: 100vh;
    height: -webkit-fill-available; /* iOS <15.4：键盘跟随兜底 */
    height: 100svh;                 /* iOS ≥15.4 小视口兜底 */
    height: 100dvh;                 /* 动态视口：键盘弹起抽屉底随之收起 */
    position: relative;
  }

  /* 常态：只有学习区 */
  .lesson-panel {
    display: flex;
    flex: 1;
    width: 100%;
    min-width: auto;
  }

  /* --- 问题 2 修复：竖排 flex 自动最小尺寸 = 内容高度 → 消息区永不滚动、
     输入行被裁出容器（同 .lesson-content/.pure-chat 的 min-height:0 先例） --- */
  .chat-panel { min-height: 0; }
  .chat-panel-messages { min-height: 0; }
  .chat-panel-input {
    padding-bottom: calc(var(--space-3) + env(safe-area-inset-bottom, 0px));
  }

  /* --- B130（2026-09-02）：iOS 聚焦自动缩放修复——输入 font-size ≥16px 才不触发
       （--text-sm=13px 聚焦时整页放大 → 全屏抽屉错位、发送按钮被裁出视口）。
       纯聊工作台 textarea 是另一个类，一并补；设置/KB 输入（13px）与登录弹窗
       输入（15px）留待下次动工时并入（§14.60 已知项）。
       B139 节点②：max(基准, 16px)——iOS ≥16px 地板保留，中/大挡随字号放大。 --- */
  .home-chat-input,
  .pure-chat__input-area { font-size: max(var(--text-base, 15px), 16px); }
  /* B129 遗留：工作台输入行补底部安全区（左抽屉行已有——home indicator 不压发送钮） */
  .pure-chat__input {
    padding-bottom: calc(var(--space-3) + env(safe-area-inset-bottom, 0px));
  }

  /* --- 左抽屉（聊天/历史） --- */
  #chat-panel {
    position: absolute;
    top: 0; bottom: 0; left: 0;
    width: 85%;
    min-width: auto;
    z-index: 70;
    visibility: hidden;
    transform: translateX(-105%);
    transition: transform var(--duration-normal) var(--ease-out),
                width var(--duration-normal) var(--ease-out),
                visibility 0s var(--duration-normal);
  }
  .home-container[data-drawer='chat'] #chat-panel {
    visibility: visible;
    transform: none;
    transition: transform var(--duration-normal) var(--ease-out),
                width var(--duration-normal) var(--ease-out),
                visibility 0s;
  }
  /* 输入聚焦 → 全屏聊天（系统键盘由原生 focus 唤起） */
  .home-container[data-drawer='chat'][data-chat-focus='on'] #chat-panel {
    width: 100%;
  }

  /* --- 右抽屉（学习画像/学习记录） --- */
  #dashboard-panel {
    position: absolute;
    top: 0; bottom: 0; right: 0;
    width: 85%;
    min-width: auto;
    z-index: 70;
    visibility: hidden;
    transform: translateX(105%);
    transition: transform var(--duration-normal) var(--ease-out),
                visibility 0s var(--duration-normal);
  }
  .home-container[data-drawer='dashboard'] #dashboard-panel {
    visibility: visible;
    transform: none;
    transition: transform var(--duration-normal) var(--ease-out),
                visibility 0s;
  }

  /* 横向手势自管，纵向滚动照常（只作用于抽屉与遮罩） */
  #chat-panel, #dashboard-panel, #drawer-scrim { touch-action: pan-y; }

  /* --- 遮罩（盖住 15% 露出条——其上点按/滑动不再被课程 iframe 吞掉） --- */
  #drawer-scrim {
    display: block;
    position: absolute;
    inset: 0;
    z-index: 65;
    background: rgba(0, 0, 0, 0.25);
    opacity: 0;
    visibility: hidden;
    transition: opacity var(--duration-normal) var(--ease-out),
                visibility 0s var(--duration-normal);
  }
  .home-container[data-drawer='chat'] #drawer-scrim,
  .home-container[data-drawer='dashboard'] #drawer-scrim {
    opacity: 1;
    visibility: visible;
    transition: opacity var(--duration-normal) var(--ease-out),
                visibility 0s;
  }

  /* --- 学习区顶栏（44px 触控目标） --- */
  #lesson-topbar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    height: 44px;
    padding: 0 var(--space-2);
    flex-shrink: 0;
    background: var(--color-bg-deep);
    border-bottom: var(--border-subtle);
  }
  .lesson-topbar__btn {
    position: relative;
    width: 44px;
    height: 44px;
    display: flex;
    align-items: center;
    justify-content: center;
    background: none;
    border: none;
    color: var(--color-text-secondary);
    cursor: pointer;
    -webkit-tap-highlight-color: transparent;
  }

  /* 未读红点（学习区顶栏 + hub 壳聊天图标共用；B128 红点样式迁移） */
  .drawer-dot {
    position: absolute;
    top: 7px;
    right: 6px;
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: #e5484d;
    border: 1.5px solid var(--color-bg-deep);
  }
  .drawer-dot[hidden] { display: none; }

  /* --- 抽屉返回按钮（两面板头共用类；B153 验证期 #5 2026-09-11 用户拍板：
     品牌金底 + 一圈边缘——两栏统一样式，提高可见性与可点性。
     验证期修订 ①（2026-09-11）：外框长方形（圆角口径同个人中心按钮
     .chat-header-btn.btn-profile），不再用圆形。
     验证期修订 ②（2026-09-12）：高度与个人中心按钮一致——不再固定
     44px，改用同口径垂直 padding（≤640 随 .chat-header-btn 收紧）） --- */
  .chat-drawer-back {
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 4px 14px; /* 高度同个人中心按钮（.chat-header-btn 同垂直 padding） */
    background: var(--color-accent);
    border: 2px solid var(--color-accent-soft); /* 一圈边缘 */
    border-radius: var(--radius-sm); /* 长方形圆角（同个人中心按钮口径） */
    color: #0D0D0F; /* 金底深色箭头（同 toggle 点亮钮口径） */
    cursor: pointer;
    -webkit-tap-highlight-color: transparent;
  }
  /* 2026-09-12 高度同个人中心：≤640 随 .chat-header-btn 垂直 padding 一起收紧
     （嵌套于 900 块内——该块源序在后，同级特异性才压得住上面的 4px） */
  @media (max-width: 640px) {
    .chat-drawer-back { padding: 3px 14px; }
  }
  #dashboard-panel .chat-drawer-back { margin-right: auto; } /* 登录/个人中心+主题 留右侧 */

  /* --- hub 壳左上抽屉按钮 --- */
  .hub-drawer-btn {
    display: flex;
    align-items: center;
    justify-content: center;
    position: relative;
    width: 44px;
    height: 44px;
    flex-shrink: 0;
    background: transparent;
    border: var(--border-subtle);
    border-radius: var(--radius-sm);
    color: var(--color-text-secondary);
    cursor: pointer;
  }
  .hub-drawer-btn[data-kind='history'] .hub-drawer-btn__icon--chat { display: none; }
  .hub-drawer-btn[data-kind='chat'] .hub-drawer-btn__icon--history { display: none; }

  /* --- B130（2026-09-02）：hub 头部两行——第一行 = 回到学习/个人中心/对话+三横杠，
       第二行 = 五分区等距居中（10s 自动折叠：.hub-header--nav-hidden 由 home.js 驱动）。
       标题锚定第一行（top:0 + 44px 行高——nav 展开时 row 跨两行，不能用 row 高 50% 居中） --- */
  .hub-header__row { position: relative; }
  .hub-title {
    position: absolute;
    left: 50%;
    transform: translateX(-50%);
    top: 0;
    height: 44px;
    display: flex;
    align-items: center;
  }
  .hub-drawer-btn { margin-left: auto; } /* 对话按钮推右 */
  .hub-more-btn {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 44px;
    height: 44px;
    flex-shrink: 0;
    background: transparent;
    border: var(--border-subtle);
    border-radius: var(--radius-sm);
    color: var(--color-text-secondary);
    cursor: pointer;
    -webkit-tap-highlight-color: transparent;
  }
  .hub-nav {
    width: 100%;
    flex-basis: 100%;
    margin-left: 0;
    justify-content: space-evenly;
  }
  .hub-header--nav-hidden .hub-nav { display: none; }

  /* --- 左缘手势条：盖住 iframe 左缘，承接「左→右滑开抽屉」手势
       （iframe 吞事件；条上事件冒泡到 home-container 统一判定） --- */
  .lesson-content { position: relative; }
  #lesson-edge-swipe {
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: 24px;
    z-index: 5;
    background: transparent;
  }

  /* --- hub 全屏（废除 B128 的 chat 42vh + hub 50vh 纵向共分；
       覆盖上文 900px 块的 max-height:50vh，同特异性文件尾胜） --- */
  .hub-panel {
    width: 100%;
    flex: 1;
    flex-shrink: 1;
    max-height: none;
  }
}

/* 窄屏：hub 头部新增图标后收紧（375px 起不挤）；行已有 flex-wrap，最坏换行 */
@media (max-width: 640px) {
  .hub-header__row { gap: var(--space-2); }
  .hub-nav { gap: var(--space-1); }
  .hub-nav__item { padding: 5px 8px; }
}

/* ============================================================
   B136 节点③（2026-09-03）：笔记摘要管线浮条——顶部居中非阻断提示
   （D15：与 B36 aiBusy 全置灰明确区分——浮条出现时按钮可点；
   spinner + 诚实文案；多任务串行依次显示，全部完成自动消失）
   B137（2026-09-03，用户验证反馈 2）：右下角 → 正上方中间
   ============================================================ */
.note-toast {
  position: fixed;
  top: 24px;
  left: 50%;
  transform: translateX(-50%);
  z-index: 80;
  display: flex;
  align-items: center;
  gap: 10px;
  max-width: 360px;
  background: var(--color-bg-deep);
  border: 1px solid var(--color-accent-soft);
  border-radius: var(--radius-sm);
  padding: 10px 16px;
  color: var(--color-text-secondary);
  font-size: var(--text-sm);
  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
  pointer-events: none; /* 非阻断：不挡按钮不挡操作 */
}
.note-toast[hidden] { display: none; }
/* B154-1 第四轮：浮条圆形 spinner → avvmo 三角（口径统一，双图标根除） */
.note-toast-spin {
  display: inline-flex;
  flex-shrink: 0;
  font-size: 13px;
  color: var(--color-accent);
}

/* ============================================================
   B136 节点④（2026-09-03，D11 §5.3）：未读数字徽章——替换 B129
   红点：数字 pill + 呼吸闪烁（温和，不抢注意力）。
   0 条 → JS 设 hidden；1..99 → 数字；≥100 → 99+。
   ============================================================ */
.unread-badge {
  position: absolute;
  top: 3px;
  right: 2px;
  width: auto; /* 中和 .drawer-dot 的 8px 圆点宽度 */
  border: 0;   /* 中和 .drawer-dot 的描边（数字 pill 不带环） */
  min-width: 14px;
  height: 0.875rem;
  padding: 0 4px;
  border-radius: 999px;
  background: #e5484d;
  color: #fff;
  font-size: 0.5625rem; /* B139 节点②：9px → rem，与徽章高度同比例随挡缩放 */
  line-height: 0.875rem;
  font-weight: 600;
  text-align: center;
  pointer-events: none;
  box-sizing: border-box;
  animation: unread-breathe 2.6s ease-in-out infinite;
}
@keyframes unread-breathe {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.5; }
}
/* 纯净聊天导航徽章：跟随标签内联（导航项需定位上下文） */
.hub-nav__item { position: relative; }
.hub-nav__badge.unread-badge {
  position: static;
  display: inline-block;
  margin-left: 5px;
  vertical-align: 1px;
}
.hub-nav__badge[hidden] { display: none; }

/* ==========================================================
   B154-3-2 灵感田（2026-09-22）：四页签 + 田里（栏位卡片/
   进度条/种子仓/种植弹窗/反馈横幅）
   ========================================================== */

.inspire { display: flex; flex-direction: column; gap: 0; }

.inspire__tabbar {
  display: flex;
  gap: var(--space-2);
  flex-wrap: wrap;
  padding: var(--space-3) var(--space-4);
  border-bottom: var(--border-subtle);
  background: var(--color-bg-surface);
  position: sticky;
  top: 0;
  z-index: 5;
}

.inspire__tab {
  padding: var(--space-1) var(--space-3);
  border: var(--border-subtle);
  border-radius: 999px;
  background: var(--color-bg-elevated);
  color: var(--color-text-primary);
  font: inherit;
  font-size: var(--text-sm);
  cursor: pointer;
}

.inspire__tab:hover { border-color: var(--color-accent); }

.inspire__tab--active {
  background: var(--color-accent);
  border-color: var(--color-accent);
  color: var(--color-text-on-accent, #fff);
  font-weight: var(--weight-medium);
}

.inspire__content {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
}

/* 未实装页签诚实占位 */
.farm__soon {
  max-width: 480px;
  margin: var(--space-6) auto;
  padding: var(--space-6) var(--space-4);
  text-align: center;
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  align-items: center;
}

.farm__soon-icon { font-size: 2.5rem; }
.farm__soon-title { margin: 0; font-size: var(--text-md); color: var(--color-text-primary); }
.farm__soon-body { margin: 0; font-size: var(--text-sm); color: var(--color-text-tertiary); }

/* 田里主体 */
.farm {
  max-width: 720px;
  margin: 0 auto;
  padding: var(--space-3) var(--space-4) var(--space-6);
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
}

.farm__flash {
  padding: var(--space-2) var(--space-3);
  border: 1px solid var(--color-accent);
  border-radius: var(--radius-sm);
  background: var(--color-bg-elevated);
  color: var(--color-text-primary);
  font-size: var(--text-sm);
}

.farm__stats {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  flex-wrap: wrap;
  font-size: var(--text-sm);
  color: var(--color-text-secondary, var(--color-text-tertiary));
}

.farm__stat b { color: var(--color-text-primary); }

.farm__next-hint { color: var(--color-text-tertiary); font-size: var(--text-xs); }

.farm__bless {
  padding: var(--space-2) var(--space-3);
  border-radius: var(--radius-sm);
  background: var(--color-bg-elevated);
  border: var(--border-subtle);
  color: var(--color-text-primary);
  font-size: var(--text-sm);
}

.farm__unlock-btn {
  align-self: flex-start;
  padding: var(--space-2) var(--space-3);
  border: var(--border-subtle);
  border-radius: var(--radius-sm);
  background: var(--color-bg-elevated);
  color: var(--color-text-primary);
  font: inherit;
  font-size: var(--text-sm);
  cursor: pointer;
}

.farm__unlock-btn:hover { border-color: var(--color-accent); }

/* B154-5：田里页「灵感图鉴」入口（视觉同解锁按钮） */
.farm__codex-btn {
  align-self: flex-start;
  padding: var(--space-2) var(--space-3);
  border: var(--border-subtle);
  border-radius: var(--radius-sm);
  background: var(--color-bg-elevated);
  color: var(--color-text-primary);
  font: inherit;
  font-size: var(--text-sm);
  cursor: pointer;
}

.farm__codex-btn:hover { border-color: var(--color-accent); }

.farm__plots {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-3);
}

@media (min-width: 720px) {
  .farm__plots { grid-template-columns: 1fr 1fr; }
}

.farm-plot {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  padding: var(--space-3);
  background: var(--color-bg-surface);
  border: var(--border-subtle);
  border-radius: var(--radius-md);
}

.farm-plot--ready { border-color: var(--color-accent); }

.farm-plot--empty { align-items: center; text-align: center; gap: var(--space-3); }

.farm-plot__head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--space-2);
  flex-wrap: wrap;
}

.farm-plot__terrain { font-size: var(--text-xs); color: var(--color-text-tertiary); }

.farm-plot__crop { font-size: var(--text-sm); color: var(--color-text-primary); font-weight: var(--weight-medium); }

.farm-plot__empty { font-size: var(--text-sm); color: var(--color-text-tertiary); }

.farm-plot__bar {
  height: 8px;
  border-radius: 4px;
  background: var(--color-bg-elevated);
  border: var(--border-subtle);
  overflow: hidden;
}

.farm-plot__bar i {
  display: block;
  height: 100%;
  border-radius: 4px;
  background: linear-gradient(90deg, #7cc06a, #4e9f3d);
  transition: width 0.4s ease;
}

.farm-plot__meta {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-2);
  flex-wrap: wrap;
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
}

.farm-plot__ready { color: var(--color-accent); font-weight: var(--weight-medium); }

.farm-plot__buffs { color: var(--color-text-secondary, var(--color-text-tertiary)); }

.farm-plot__actions { display: flex; gap: var(--space-2); flex-wrap: wrap; }

.farm-plot__btn,
.farm-plot__mini {
  padding: var(--space-1) var(--space-3);
  border: var(--border-subtle);
  border-radius: var(--radius-sm);
  background: var(--color-bg-elevated);
  color: var(--color-text-primary);
  font: inherit;
  font-size: var(--text-sm);
  cursor: pointer;
}

.farm-plot__btn:hover,
.farm-plot__mini:hover { border-color: var(--color-accent); }

.farm-plot__mini { font-size: var(--text-xs); padding: var(--space-1) var(--space-2); }

.farm-plot__btn--harvest {
  background: var(--color-accent);
  border-color: var(--color-accent);
  color: var(--color-text-on-accent, #fff);
  font-weight: var(--weight-medium);
}

/* 种子仓 */
.farm__seeds {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  padding: var(--space-3);
  background: var(--color-bg-surface);
  border: var(--border-subtle);
  border-radius: var(--radius-md);
}

.farm__seeds-head {
  margin: 0;
  font-size: var(--text-sm);
  color: var(--color-text-primary);
}

.farm-seed-terrain { display: flex; flex-direction: column; gap: var(--space-2); }

.farm-seed-terrain__head {
  display: flex;
  align-items: baseline;
  gap: var(--space-2);
  flex-wrap: wrap;
  font-size: var(--text-xs);
  color: var(--color-text-secondary, var(--color-text-tertiary));
}

.farm-seed-terrain__lock { color: var(--color-text-tertiary); }

.farm-seed-terrain--locked { opacity: 0.72; }

.farm-seeds-row {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
  gap: var(--space-2);
}

.farm-seed {
  display: grid;
  grid-template-columns: auto 1fr auto;
  grid-template-areas:
    "icon name count"
    "icon meta count";
  align-items: center;
  column-gap: var(--space-2);
  row-gap: 2px;
  padding: var(--space-2);
  background: var(--color-bg-elevated);
  border: var(--border-subtle);
  border-radius: var(--radius-sm);
  font: inherit;
  text-align: left;
  color: var(--color-text-primary);
  cursor: pointer;
}

button.farm-seed:hover { border-color: var(--color-accent); }

.farm-seed--none { cursor: default; opacity: 0.55; }

.farm-seed--locked { cursor: not-allowed; }

.farm-seed__icon { grid-area: icon; font-size: 1.25rem; }
.farm-seed__name { grid-area: name; font-size: var(--text-sm); }
.farm-seed__meta { grid-area: meta; font-size: var(--text-xs); color: var(--color-text-tertiary); }
.farm-seed__count { grid-area: count; font-size: var(--text-xs); color: var(--color-text-secondary, var(--color-text-tertiary)); }

/* 玩法说明 */
.farm__help {
  padding: var(--space-3);
  background: var(--color-bg-surface);
  border: var(--border-subtle);
  border-radius: var(--radius-md);
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}

.farm__help-list {
  margin: 0;
  padding-left: var(--space-4);
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
}

/* 种植弹窗 */
.farm__modal {
  position: fixed;
  inset: 0;
  z-index: 120;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: var(--space-4);
  background: rgba(0, 0, 0, 0.45);
}

.farm__modal[hidden] { display: none; }

.farm__modal-box {
  width: 100%;
  max-width: 480px;
  max-height: 80vh;
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  padding: var(--space-3);
  background: var(--color-bg-surface);
  border-radius: var(--radius-md);
}

.farm__modal-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-2);
  font-size: var(--text-sm);
  color: var(--color-text-primary);
}

.farm__modal-close {
  border: none;
  background: none;
  color: var(--color-text-tertiary);
  font: inherit;
  font-size: var(--text-sm);
  cursor: pointer;
  padding: var(--space-1);
}

.farm__modal-close:hover { color: var(--color-text-primary); }

.farm__modal-body {
  overflow-y: auto;
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
}

.farm-modal__section[hidden] { display: none; }

.farm-modal__section-head {
  margin: 0 0 var(--space-2);
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
}

.farm-modal__crops {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}

.farm-modal__crop {
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding: var(--space-2) var(--space-3);
  background: var(--color-bg-elevated);
  border: var(--border-subtle);
  border-radius: var(--radius-sm);
  font: inherit;
  text-align: left;
  color: var(--color-text-primary);
  cursor: pointer;
}

.farm-modal__crop:hover:not(:disabled) { border-color: var(--color-accent); }

.farm-modal__crop:disabled { opacity: 0.6; cursor: not-allowed; }

.farm-modal__crop-main { font-size: var(--text-sm); }

.farm-modal__crop-meta { font-size: var(--text-xs); color: var(--color-text-tertiary); }

/* ==========================================================
   B154-4 制作台 + momo（2026-09-22）
   ========================================================== */

/* 制作台 */
.craft {
  max-width: 720px;
  margin: 0 auto;
  padding: var(--space-3) var(--space-4) var(--space-6);
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
}

.craft__hint {
  margin: 0;
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
}

.craft__grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-2);
}

@media (min-width: 720px) {
  .craft__grid { grid-template-columns: 1fr 1fr; }
}

.craft__card {
  display: grid;
  grid-template-columns: auto 1fr auto;
  grid-template-areas:
    "icon body meta"
    "icon body btn";
  align-items: center;
  column-gap: var(--space-3);
  row-gap: var(--space-1);
  padding: var(--space-3);
  background: var(--color-bg-surface);
  border: var(--border-subtle);
  border-radius: var(--radius-md);
}

.craft__card--no { opacity: 0.72; }

.craft__icon { grid-area: icon; font-size: 1.75rem; }

.craft__body {
  grid-area: body;
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
  min-width: 0;
}

.craft__name {
  font-size: var(--text-sm);
  color: var(--color-text-primary);
  font-weight: var(--weight-medium);
}

.craft__tags {
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
  font-weight: var(--weight-normal);
}

.craft__ings {
  display: flex;
  gap: var(--space-2);
  flex-wrap: wrap;
  font-size: var(--text-xs);
  color: var(--color-text-secondary, var(--color-text-tertiary));
}

.craft__ing--miss { color: #c0522f; }

.craft__ing b { font-weight: var(--weight-medium); }

.craft__meta {
  grid-area: meta;
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
  text-align: right;
}

.craft__btn {
  grid-area: btn;
  justify-self: end;
  padding: var(--space-1) var(--space-3);
  border: var(--border-subtle);
  border-radius: var(--radius-sm);
  background: var(--color-accent);
  border-color: var(--color-accent);
  color: var(--color-text-on-accent, #fff);
  font: inherit;
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
  cursor: pointer;
}

.craft__btn--no {
  background: var(--color-bg-elevated);
  border-color: var(--border-subtle);
  color: var(--color-text-tertiary);
  cursor: default;
  font-weight: var(--weight-normal);
}

/* momo */
.momo {
  max-width: 720px;
  margin: 0 auto;
  padding: var(--space-3) var(--space-4) var(--space-6);
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
}

.momo__hero {
  display: flex;
  gap: var(--space-3);
  align-items: flex-start;
}

.momo__avatar { font-size: 3rem; line-height: 1; }

.momo__bubble {
  flex: 1;
  padding: var(--space-3);
  background: var(--color-bg-surface);
  border: var(--border-subtle);
  border-radius: var(--radius-md) var(--radius-md) var(--radius-md) 2px;
  font-size: var(--text-sm);
  color: var(--color-text-primary);
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
}

.momo__wish-meta {
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
  font-weight: var(--weight-normal);
}

.momo__wish-recipe {
  font-size: var(--text-xs);
  color: var(--color-text-secondary, var(--color-text-tertiary));
}

.momo__give {
  align-self: flex-start;
  padding: var(--space-2) var(--space-3);
  border: var(--border-subtle);
  border-radius: var(--radius-sm);
  background: var(--color-accent);
  border-color: var(--color-accent);
  color: var(--color-text-on-accent, #fff);
  font: inherit;
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
  cursor: pointer;
}

.momo__give-hint,
.momo__away {
  margin: 0;
  font-size: var(--text-sm);
  color: var(--color-text-tertiary);
}

.momo__section {
  padding: var(--space-3);
  background: var(--color-bg-surface);
  border: var(--border-subtle);
  border-radius: var(--radius-md);
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}

.momo__head {
  margin: 0;
  font-size: var(--text-sm);
  color: var(--color-text-primary);
  display: flex;
  align-items: baseline;
  gap: var(--space-2);
  flex-wrap: wrap;
}

.momo__head-desc { font-size: var(--text-xs); color: var(--color-text-tertiary); font-weight: var(--weight-normal); }

.momo__counts,
.momo__souvs {
  display: flex;
  gap: var(--space-2);
  flex-wrap: wrap;
}

.momo__count,
.momo__souv {
  padding: var(--space-1) var(--space-2);
  background: var(--color-bg-elevated);
  border: var(--border-subtle);
  border-radius: var(--radius-sm);
  font-size: var(--text-xs);
  color: var(--color-text-primary);
  display: inline-flex;
  align-items: baseline;
  gap: var(--space-1);
}

.momo__souv-src { color: var(--color-text-tertiary); }

.momo__empty {
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
}

.momo__hint {
  margin: 0;
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
}

/* ============================================================
   B154-5 探险页签（2026-09-22）：状态横幅 + SVG 大地图 +
   目的地卡 + 归来仪式
   ============================================================ */

.expedition {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
}

.expedition__status {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  flex-wrap: wrap;
  padding: var(--space-2) var(--space-3);
  background: var(--color-bg-surface);
  border: var(--border-subtle);
  border-radius: var(--radius-md);
  font-size: var(--text-sm);
  color: var(--color-text-primary);
}

.expedition__status--away { border-color: var(--color-accent-soft, #f0d48a); background: var(--color-bg-elevated); }
.expedition__status--ready { border-color: var(--color-success-soft, #b7e4c7); }

.expedition__status-icon { font-size: 1.2em; }

.expedition__status-text { flex: 1; min-width: 180px; }

.expedition__passive {
  display: inline-block;
  margin-left: var(--space-2);
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
}

.expedition__return-btn {
  border: none;
  border-radius: var(--radius-sm);
  background: var(--color-accent, #e6a817);
  color: #1f1a10;
  font: inherit;
  font-size: var(--text-sm);
  font-weight: var(--weight-semibold, 600);
  padding: var(--space-1) var(--space-3);
  cursor: pointer;
}

.expedition__return-btn:hover { filter: brightness(1.06); }

/* 手绘风大地图（SVG；零外部资源 D3） */
.expedition__map {
  width: 100%;
  max-height: 420px;
  background: var(--color-bg-surface);
  border: var(--border-subtle);
  border-radius: var(--radius-md);
  overflow: visible;
}

.expedition__decor {
  fill: none;
  stroke: var(--color-text-tertiary);
  stroke-width: 0.6;
  stroke-linecap: round;
  opacity: 0.35;
}

.expedition__route {
  stroke: var(--color-accent, #e6a817);
  stroke-width: 1.4;
  stroke-linecap: round;
  stroke-dasharray: 2.4 2.4;
  animation: expedition-dash 0.9s linear infinite;
}

@keyframes expedition-dash {
  to { stroke-dashoffset: -9.6; }
}

.expedition__momo {
  font-size: 5.2;
  animation: expedition-bounce 1.1s ease-in-out infinite;
}

@keyframes expedition-bounce {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-2.2px); }
}

.expedition__home { font-size: 5.6; }

.expedition__marker { cursor: default; }

.expedition__marker--open { cursor: pointer; }
.expedition__marker--open:hover .expedition__marker-icon { font-size: 6.4; }
.expedition__marker--open:focus-visible { outline: 2px solid var(--color-accent, #e6a817); outline-offset: 2px; }

.expedition__marker-icon {
  font-size: 5.6;
  transition: font-size 0.15s ease;
}

.expedition__marker-name {
  font-size: 3;
  fill: var(--color-text-secondary);
}

.expedition__marker--locked .expedition__marker-icon {
  filter: grayscale(1) brightness(0.45);
  opacity: 0.85;
}

.expedition__marker--locked .expedition__marker-name {
  fill: var(--color-text-tertiary);
}

.expedition__marker-lock { font-size: 3; opacity: 0.8; }

/* 目的地卡 */
.expedition__cards {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-2);
}

@media (min-width: 720px) {
  .expedition__cards { grid-template-columns: repeat(2, 1fr); }
}

.expedition__card {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  padding: var(--space-3);
  background: var(--color-bg-surface);
  border: var(--border-subtle);
  border-radius: var(--radius-md);
}

.expedition__card-head {
  display: flex;
  align-items: center;
  gap: var(--space-2);
}

.expedition__card-icon { font-size: 1.6em; }

.expedition__card-titles {
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.expedition__card-name {
  font-size: var(--text-sm);
  font-weight: var(--weight-semibold, 600);
  color: var(--color-text-primary);
}

.expedition__card-meta {
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
}

.expedition__card-lean,
.expedition__card-news {
  margin: 0;
  font-size: var(--text-xs);
  color: var(--color-text-secondary);
}

.expedition__go {
  align-self: flex-start;
  border: none;
  border-radius: var(--radius-sm);
  background: var(--color-accent, #e6a817);
  color: #1f1a10;
  font: inherit;
  font-size: var(--text-xs);
  font-weight: var(--weight-semibold, 600);
  padding: var(--space-1) var(--space-3);
  cursor: pointer;
}

.expedition__go:hover { filter: brightness(1.06); }

.expedition__go--no {
  background: var(--color-bg-elevated);
  color: var(--color-text-tertiary);
  cursor: default;
  border: var(--border-subtle);
}

/* 未解锁区 */
.expedition__locked {
  padding: var(--space-3);
  background: var(--color-bg-surface);
  border: var(--border-subtle);
  border-radius: var(--radius-md);
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}

.expedition__locked-hint {
  margin: 0;
  font-size: var(--text-xs);
  color: var(--color-text-secondary);
}

.expedition__locked-list {
  display: flex;
  gap: var(--space-2);
  flex-wrap: wrap;
}

.expedition__locked-item {
  display: inline-flex;
  align-items: baseline;
  gap: var(--space-1);
  padding: var(--space-1) var(--space-2);
  background: var(--color-bg-elevated);
  border: var(--border-subtle);
  border-radius: var(--radius-sm);
  font-size: var(--text-xs);
  color: var(--color-text-secondary);
}

.expedition__locked-silhouette { filter: grayscale(1) brightness(0.5); }

.expedition__locked-meta { color: var(--color-text-tertiary); }

.expedition__all {
  margin: 0;
  font-size: var(--text-sm);
  color: var(--color-text-secondary);
}

/* 灵感探索卡（D-B14：本批落 UI） */
.expedition__probe {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  padding: var(--space-3);
  background: var(--color-bg-surface);
  border: var(--border-subtle);
  border-radius: var(--radius-md);
}

.expedition__probe-head {
  display: flex;
  align-items: center;
  gap: var(--space-2);
}

.expedition__probe-icon { font-size: 1.4em; }

.expedition__probe-titles {
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.expedition__probe-name {
  font-size: var(--text-sm);
  font-weight: var(--weight-semibold, 600);
  color: var(--color-text-primary);
}

.expedition__probe-meta {
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
}

.expedition__probe-body {
  margin: 0;
  font-size: var(--text-xs);
  color: var(--color-text-secondary);
}

.expedition__hint {
  margin: 0;
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
}

/* 归来仪式弹窗（容器 = 探险页内固定浮层；内容复用 farm__modal-box） */
.expedition__ceremony {
  position: fixed;
  inset: 0;
  z-index: 130;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: var(--space-4);
  background: rgba(0, 0, 0, 0.45);
}

.expedition__ceremony[hidden] { display: none; }

.expedition__loot-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}

.expedition__loot {
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding: var(--space-2);
  background: var(--color-bg-elevated);
  border: var(--border-subtle);
  border-radius: var(--radius-sm);
  font-size: var(--text-sm);
  color: var(--color-text-primary);
}

.expedition__loot-meta {
  font-size: var(--text-xs);
  color: var(--color-text-secondary);
}

.expedition__ceremony-passive {
  margin: 0;
  font-size: var(--text-sm);
  color: var(--color-text-primary);
}

.expedition__ceremony-hint {
  margin: 0;
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
}

/* ---------- C-1 路线认证徽章（2026-09-22，item 9） ---------- */

.lc-card--badge {
  border-left-color: #c79a2e;
  background: linear-gradient(135deg, rgba(199, 154, 46, 0.1), rgba(199, 154, 46, 0.03));
}

.lc-card--badge:hover {
  border-left-color: #c79a2e;
}

.modal--route-badge {
  max-width: 460px;
  padding: 0;
  overflow: hidden;
}

.route-badge__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: var(--space-3) var(--space-5);
  border-bottom: var(--border-subtle);
}

.route-badge__title {
  margin: 0;
  font-size: var(--text-base);
}

.route-badge__body {
  padding: var(--space-5);
  max-height: min(76vh, 640px);
  overflow-y: auto;
}

.route-badge__svg {
  border-radius: var(--radius-md);
  overflow: hidden;
  box-shadow: var(--shadow-md);
}

.route-badge__svg svg {
  display: block;
  width: 100%;
  height: auto;
}

.route-badge__stats {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: var(--space-2);
  margin-top: var(--space-4);
}

.route-badge__stat {
  text-align: center;
  padding: var(--space-2) var(--space-1);
  background: var(--color-bg-subtle, rgba(0, 0, 0, 0.04));
  border-radius: var(--radius-sm);
}

.route-badge__stat-label {
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
}

.route-badge__stat-value {
  font-size: var(--text-sm);
  font-weight: 600;
  color: var(--color-text-primary);
  margin-top: 2px;
}

.route-badge__hint {
  margin: var(--space-4) 0 0;
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
  line-height: 1.7;
}

.route-badge__actions {
  display: flex;
  justify-content: center;
  margin-top: var(--space-4);
}

/* ============================================================
   D 批运营优化（2026-09-23，D spec 子批 4）：种子商店 / 幸运罗盘卡 /
   图鉴皮肤直购 / 节日活动横幅
   ============================================================ */

/* 种子商店（灵感田页） */
.farm__shop {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  padding: var(--space-3);
  background: var(--color-bg-surface);
  border: var(--border-subtle);
  border-radius: var(--radius-md);
}

.farm__shop-balance {
  margin-left: auto;
  font-size: var(--text-xs);
  font-weight: var(--weight-medium);
  color: var(--color-accent);
}

.farm__shop-hint {
  margin: 0;
  font-size: var(--text-xs);
  color: var(--color-text-secondary, var(--color-text-tertiary));
  line-height: 1.6;
}

.farm-shop__grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
  gap: var(--space-2);
}

.farm-shop__row {
  display: grid;
  grid-template-columns: auto 1fr auto;
  grid-template-areas:
    "icon name buy"
    "icon meta buy";
  align-items: center;
  column-gap: var(--space-2);
  row-gap: 2px;
  padding: var(--space-2);
  background: var(--color-bg-elevated);
  border: var(--border-subtle);
  border-radius: var(--radius-sm);
}

.farm-shop__icon { grid-area: icon; font-size: 1.2em; }
.farm-shop__name {
  grid-area: name;
  font-size: var(--text-sm);
  color: var(--color-text-primary);
}
.farm-shop__meta {
  grid-area: meta;
  font-size: var(--text-xs);
  color: var(--color-text-tertiary);
}

.farm-shop__buy {
  grid-area: buy;
  align-self: center;
  padding: var(--space-1) var(--space-2);
  font: inherit;
  font-size: var(--text-xs);
  color: var(--color-text-on-accent, #fff);
  background: var(--color-accent);
  border: 1px solid var(--color-accent);
  border-radius: var(--radius-sm);
  cursor: pointer;
  white-space: nowrap;
}

button.farm-shop__buy:hover { filter: brightness(1.08); }

.farm-shop__buy--no {
  color: var(--color-text-tertiary);
  background: transparent;
  border-color: var(--border-subtle, var(--color-text-tertiary));
  cursor: default;
  opacity: 0.75;
}

/* 幸运罗盘卡（探险页） */
.expedition__compass {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  padding: var(--space-3);
  background: var(--color-bg-surface);
  border: var(--border-subtle);
  border-radius: var(--radius-md);
}

.expedition__compass-head {
  display: flex;
  align-items: center;
  gap: var(--space-2);
}

.expedition__compass-icon { font-size: 1.4em; }

.expedition__compass-titles {
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
}

.expedition__compass-name {
  font-size: var(--text-sm);
  color: var(--color-text-primary);
}

.expedition__compass-meta {
  font-size: var(--text-xs);
  color: var(--color-text-secondary, var(--color-text-tertiary));
  line-height: 1.5;
}

.expedition__compass-carry {
  display: flex;
  align-items: center;
  gap: var(--space-1);
  margin-left: auto;
  font-size: var(--text-xs);
  color: var(--color-text-primary);
  cursor: pointer;
  white-space: nowrap;
}

.expedition__compass-carry--no { color: var(--color-text-tertiary); cursor: not-allowed; }

/* 图鉴皮肤直购按钮 */
.codex__skin-buy {
  margin-top: var(--space-1);
  padding: var(--space-1) var(--space-2);
  font: inherit;
  font-size: var(--text-xs);
  color: var(--color-text-on-accent, #fff);
  background: var(--color-accent);
  border: 1px solid var(--color-accent);
  border-radius: var(--radius-sm);
  cursor: pointer;
  white-space: nowrap;
}

.codex__skin-buy:hover { filter: brightness(1.08); }

/* 节日活动横幅（右栏个人中心） */
.festival-banner {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  margin-bottom: var(--space-3);
  padding: var(--space-2) var(--space-3);
  background: var(--color-bg-elevated);
  border: 1px solid var(--color-accent);
  border-radius: var(--radius-md);
}

.festival-banner--claimed { opacity: 0.85; }

.festival-banner__icon { font-size: 1.6em; }

.festival-banner__body {
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
}

.festival-banner__name {
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
  color: var(--color-text-primary);
}

.festival-banner__desc {
  font-size: var(--text-xs);
  color: var(--color-text-secondary, var(--color-text-tertiary));
  line-height: 1.5;
}

.festival-banner__claim {
  margin-left: auto;
  padding: var(--space-1) var(--space-3);
  font: inherit;
  font-size: var(--text-sm);
  color: var(--color-text-on-accent, #fff);
  background: var(--color-accent);
  border: 1px solid var(--color-accent);
  border-radius: var(--radius-sm);
  cursor: pointer;
  white-space: nowrap;
}

.festival-banner__claim:hover { filter: brightness(1.08); }

.festival-banner__claimed {
  margin-left: auto;
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
  color: var(--color-accent);
  white-space: nowrap;
}
