/* ========================================
   Zotero 技能面板（Viamolt R1-S2 · B3 mockup 1:1 对齐）
   壳 = .cortex-panel（styles.css）；本文件 = B3 S3 面板词汇
   （sk-panel-search / sk-tree / sk-item / sk-panel-banner /
    sk-panel-foot / sk-empty / sk-dot）+ 研究区过渡样式（阶段②迁 chat）。
   纪律：不在此定义 --tm-*（tokensContract T5）；无 transition:all；
   暗色走 token 自适应 + 本文件内 :root[data-theme="dark"] 定点补丁
   （styles.css 冻结，补丁不进主文件）。
   ======================================== */

/* ── 0728 观墨窗换皮（B4 v1《书房动线》拍板）：面板 = 纸面书房。
   壳从玻璃换暖纸（dark 经 paper token 族自动翻夜书房）；版头（cortex-header）
   结构与文字不动。 ── */
.zotero-panel.cortex-panel .cortex-panel-inner {
  background: linear-gradient(var(--tm-paper-veil), var(--tm-paper-veil)), var(--tm-paper-texture) var(--tm-paper);
  background-size: auto, 300px 300px;
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
  border-left: 1px solid var(--tm-paper-hairline);
}
/* 版头贴顶（用户 0728 两轮：ZOTERO 两行贴墨线正下——面板顶对位墨线下缘
   （刊头场景态收起门楣行），×与 ZOTERO 同行右侧；头下细线撤——
   刊头 2px 墨线是唯一分界，层级归一） */
.zotero-panel.cortex-panel {
  top: var(--mast-rule-bottom, var(--header-height));
}
.zotero-panel.cortex-panel .cortex-header {
  padding: 9px 10px 4px 20px;
  border-bottom: 0;
}
/* × 与 ZOTERO 首行对齐（icon-btn 自带内边距，上提抵消）；
   墨色随纸面 token（暗色夜书房下原 icon-btn 色近黑不可见） */
.zotero-panel.cortex-panel .cortex-close {
  margin-top: -6px;
  color: var(--tm-paper-ink-2);
}
.zotero-panel.cortex-panel .cortex-close:hover { color: var(--tm-ink-purple-strong); }

/* ── 面板密度（B3 frame：16px 边距 / 10px 纵距；原 cortex-scroll 24px 过疏） ── */
.zotero-panel .cortex-scroll {
  padding: 14px 16px 16px;
  gap: 10px;
}

/* 主内容列（banner/empty/foot 之外的可 dim 区）。
   flex: none —— 在 cortex-scroll（flex 列滚动容器）内禁止收缩：
   若允许收缩（曾为 min-height: 0），内容会被压进容器高度而非触发滚动，
   溢出条目直接压过面板脚（真机 11 条结果与 foot 重叠的根因）。 */
.zotero-content {
  display: flex;
  flex-direction: column;
  gap: 10px;
  flex: none;
}

/* 暗色下 cortex 眉标/副题原为深字（styles.css 无覆盖，暗底不可读）——面板域内修正 */
:root[data-theme="dark"] .zotero-panel .cortex-title { color: rgba(241, 245, 249, 0.72); }
:root[data-theme="dark"] .zotero-panel .cortex-subtitle { color: rgba(203, 213, 225, 0.55); }

/* ── 状态点（B3 sk-dot 三态词汇：实心=健康 / amber=降级 / 空心=关闭 / 缺口旋转=进行中） ── */
.sk-dot {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  flex: none;
  background: var(--tm-status-success);
}
/* 0728 拍板：降级/异常态不带彩色——warn 点走空心灰墨（banner 文字陈述原因） */
.sk-dot.warn { background: transparent; border: 1.5px solid var(--tm-paper-ink-mut); }
.sk-dot.off { background: transparent; border: 1.5px solid var(--text-muted); }
.sk-dot.run {
  width: 8px;
  height: 8px;
  background: none;
  border: 1.5px solid var(--tm-brand-purple);
  border-top-color: transparent;
  animation: zt-spin-notch 1s linear infinite;
}
@keyframes zt-spin-notch { to { transform: rotate(360deg); } }

/* 眉标行内健康点（B3 hdrDot） */
.zotero-health-dot { display: inline-block; margin-left: 7px; vertical-align: 1px; }

.sk-hairline { height: 1px; background: var(--tm-paper-hairline); margin: 2px 0; flex: none; }

.sk-inline-btn {
  background: none;
  border: none;
  padding: 0;
  cursor: pointer;
  font-family: inherit;
  font-size: var(--tm-text-sm);
  color: var(--tm-brand-purple);
  font-weight: var(--tm-weight-medium);
}
.sk-inline-btn:hover { color: var(--tm-brand-purple-strong); text-decoration: underline; }

/* ── 面板搜索槽（B4 v1 检索题签：raised 纸面 + 1.5px 界线 + 12px 圆角） ── */
.sk-panel-search {
  display: flex;
  align-items: center;
  gap: 8px;
  flex: none;
  padding: 8px 12px;
  background: var(--tm-paper-raised);
  border: 1.5px solid var(--tm-paper-hairline-2);
  border-radius: 12px;
}
/* B4 v1：放大镜居右（检索题签形制） */
.sk-panel-search svg { width: 13px; height: 13px; color: var(--tm-paper-ink-mut); flex: none; order: 2; }
.sk-panel-search input { order: 1; }
.sk-panel-search .sk-dot { order: 3; }
.sk-panel-search input {
  flex: 1;
  border: none;
  background: transparent;
  outline: none;
  font-size: var(--tm-text-md);
  color: var(--tm-paper-ink);
  font-family: inherit;
  min-width: 0;
}
.sk-panel-search input::placeholder { color: var(--tm-paper-ink-mut); }

/* 搜索框清除键（0725 真机反馈）：仅有文字时在场，安静的灰 × */
.zotero-search-clear {
  flex: none;
  width: 16px;
  height: 16px;
  padding: 0;
  border: none;
  border-radius: 50%;
  background: transparent;
  color: var(--text-muted);
  font: inherit;
  font-size: 14px;
  line-height: 1;
  cursor: pointer;
}
.zotero-search-clear:hover { background: var(--tm-glass-bg-faint); color: var(--text-primary); }
.zotero-search-clear.hidden { display: none; }

/* ── 研究钤记行（0813 范围拆分一期：⊕=研究范围，紫墨钤记居 ask 行上方；
      检索限定的灰墨短命签属二期，勿混用本形制） ── */
.sk-scope-row { display: flex; gap: 6px; flex-wrap: wrap; flex: none; margin: 8px 0 2px; }
.sk-scope-row .context-chip.zotero-scope-chip {
  border: 1px solid var(--tm-ink-purple);
  background: var(--tm-brand-purple-alpha-08);
  color: var(--tm-ink-purple-strong);
}
.sk-scope-row .zotero-scope-chip .chip-label {
  color: var(--tm-ink-purple-strong);
}
.sk-scope-row .zotero-scope-chip .chip-close {
  color: var(--tm-ink-purple);
}
.sk-scope-row .context-chip { max-width: 100%; height: auto; min-height: 22px; }
.sk-scope-row .chip-label {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* ── 检索限定签（0815 范围拆分二期）：灰墨虚线、短命（清词/×/关面板即散）。
      与紫墨研究钤记一实一虚、一灰一紫——两套范围看得出是两件事 ── */
.zotero-limit-row { display: flex; flex: none; margin: 6px 0 0; min-width: 0; }
.zotero-limit-row.hidden { display: none; }
.zotero-limit-chip {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  max-width: 100%;
  min-height: 20px;
  padding: 1px 4px 1px 9px;
  border: 1px dashed var(--tm-paper-hairline-2);
  border-radius: 999px;
  background: transparent;
  color: var(--tm-paper-ink-2);
  font-size: var(--tm-text-xs);
}
.zotero-limit-chip .chip-label {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.zotero-limit-chip .chip-close {
  flex: none;
  border: 0;
  background: transparent;
  padding: 0 4px;
  font-size: 13px;
  line-height: 1;
  color: var(--tm-paper-ink-2);
  cursor: pointer;
}
.zotero-limit-chip .chip-close:hover { color: var(--tm-paper-ink); }
/* 检索态里被限定的树行：灰墨虚线行框（与紫墨 picked-row 分家族，不抢研究语义） */
.sk-tree-row.limit-row {
  background: color-mix(in srgb, var(--tm-paper-ink) 5%, transparent);
  outline: 1px dashed var(--tm-paper-hairline-2);
  outline-offset: -1px;
}

/* ── 集合树（B3 sk-tree：行=下钻、hover 行尾 ⊕=设范围、picked 品牌底） ── */
.sk-tree { display: flex; flex-direction: column; flex: none; }
.sk-tree-row {
  position: relative;
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 4px 6px;
  border-radius: var(--radius-sm);
  cursor: pointer;
  font-family: inherit;
  font-size: var(--tm-text-sm);
  color: var(--tm-paper-ink-2);
  text-align: left;
  transition: background 0.15s ease;
  user-select: none;
}
.sk-tree-row:hover { background: color-mix(in srgb, var(--tm-paper-ink) 6%, transparent); }
.sk-tree-arrow {
  width: 10px;
  height: 10px;
  color: var(--text-muted);
  flex: none;
  transition: transform 0.15s ease;
}
.sk-tree-arrow svg { display: block; width: 10px; height: 10px; }
.sk-tree-row[aria-expanded="true"] .sk-tree-arrow { transform: rotate(90deg); }
.sk-tree-arrow.leaf { visibility: hidden; }
/* B4 v1 排印：集合名衬线（目录卷），计数灰墨小字无括号 */
.sk-tree-name {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-family: var(--tm-serif);
  font-size: 12.5px;
  color: var(--tm-paper-ink);
}
.sk-count { color: var(--tm-paper-ink-mut); font-size: var(--tm-text-xs); font-variant-numeric: tabular-nums; flex: none; }

/* ⊕：16px 视觉圆点，::before 扩 ≥24px 命中层（sol-A10）；picked 恒显 */
.sk-tree-pick {
  position: relative;
  margin-left: auto;
  width: 16px;
  height: 16px;
  border-radius: 50%;
  border: 1.5px solid var(--text-muted);
  background: transparent;
  color: transparent;
  font-size: 9px;
  line-height: 1;
  padding: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  flex: none;
  opacity: 0;
  cursor: pointer;
  transition: opacity 0.15s ease, background 0.15s ease, border-color 0.15s ease;
}
.sk-tree-pick::before { content: ""; position: absolute; inset: -5px; }
.sk-tree-row:hover .sk-tree-pick,
.sk-tree-pick:focus-visible { opacity: 1; }
.sk-tree-pick.picked {
  opacity: 1;
  border-color: var(--tm-brand-purple);
  background: var(--tm-brand-purple);
  color: #fff;
}
.sk-tree-row.picked-row { background: var(--tm-brand-purple-alpha-08); }
.sk-tree-row.picked-row:hover { background: var(--tm-brand-purple-alpha-10); }

/* 群组库分节标：B4 v1 kicker 形制（衬线宽字距小字距标）；
   sk-section-row = 可收起版（树行习语 caret + kicker 排印，用户 0728） */
.sk-section-label {
  padding: 8px 6px 2px;
  font-family: var(--tm-serif);
  font-size: var(--tm-text-2xs);
  letter-spacing: 0.25em;
  color: var(--tm-paper-ink-2);
  flex: none;
}
.sk-section-row { margin-top: 6px; }
.sk-section-row .sk-section-name {
  font-size: var(--tm-text-2xs);
  letter-spacing: 0.25em;
  color: var(--tm-paper-ink-2);
}

.zotero-scope-info { padding: 8px 6px; font-size: var(--tm-text-sm); color: var(--tm-paper-ink-mut); }

/* ── 条目列表（B3 sk-item：作者-年主键 13px medium、标题 12px muted、
      动作=右侧悬浮药丸 absolute 零占位，v1.3② 密度拍板 ~44px/行） ── */
.sk-item-list { display: flex; flex-direction: column; flex: none; }
/* 检索结果计数行（列表顶；仅有结果时渲染） */
.sk-item-count {
  flex: none;
  padding: 0 8px 2px;
  font-size: var(--tm-text-xs);
  color: var(--tm-paper-ink-mut);
}
.sk-item {
  position: relative;
  padding: 6px 8px;
  border-radius: var(--radius-md);
  transition: background 0.15s ease;
}
.sk-item:hover,
.sk-item:focus-within { background: color-mix(in srgb, var(--tm-paper-ink) 5%, transparent); }
.sk-item + .sk-item { margin-top: 1px; }
/* B4 v1 目录卷排印：标题=衬线主键（最多两行折行）；meta=作者-年 · 出处 灰墨小字
   （过长截断省略号）+ PDF 细框小徽（companion 报 has_pdf 才亮） */
.sk-item-title {
  font-family: var(--tm-serif);
  font-size: var(--tm-text-md);
  font-weight: var(--tm-weight-medium);
  line-height: 1.4;
  color: var(--tm-paper-ink);
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  white-space: normal;
}
.sk-item-meta {
  display: flex;
  align-items: center;
  gap: 8px;
  /* v1 保真再收（用户 0728 两轮）：无衬线细体 300 + 墨色向纸面退淡 30%——
     meta 只是页边注记，不与衬线标题争重 */
  font-family: var(--tm-font-sans);
  font-weight: 300;
  letter-spacing: normal;
  font-size: 10.5px;
  color: color-mix(in srgb, var(--tm-paper-ink-mut) 70%, var(--tm-paper));
  font-variant-numeric: tabular-nums;
  margin-top: 3px;
}
.sk-item-meta-text { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.sk-item-meta.hidden { display: none; }
.sk-pdf-tag {
  flex: none;
  font-size: 8.5px;
  letter-spacing: 0.08em;
  color: var(--tm-paper-ink-2);
  border: 1px solid var(--tm-paper-hairline-2);
  border-radius: 3px;
  padding: 0 4px;
}
/* v1 条目分割线（发丝线；hover 圆角底不受影响） */
.sk-item + .sk-item { border-top: 1px solid var(--tm-paper-hairline); }

/* 结果分页（每页 7 条；页码=跳转，当前页墨色实字） */
.sk-pager {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 2px;
  padding: 8px 0 2px;
}
.sk-pager-btn {
  min-width: 22px;
  height: 22px;
  padding: 0 5px;
  border: 0;
  background: none;
  border-radius: var(--tm-radius-sm);
  font-family: var(--tm-serif);
  font-size: var(--tm-text-xs);
  font-variant-numeric: tabular-nums;
  color: var(--tm-paper-ink-2);
  cursor: pointer;
  transition: color var(--tm-dur-fast) var(--tm-ease-out), background var(--tm-dur-fast) var(--tm-ease-out);
}
.sk-pager-btn:hover:not(:disabled) { color: var(--tm-ink-purple-strong); background: color-mix(in srgb, var(--tm-paper-ink) 6%, transparent); }
.sk-pager-btn.current { color: var(--tm-paper-ink); font-weight: var(--tm-weight-semibold); cursor: default; }
.sk-pager-btn:disabled:not(.current) { opacity: 0.35; cursor: default; }
.sk-pager-gap { font-size: var(--tm-text-xs); color: var(--tm-paper-ink-mut); padding: 0 2px; }
.sk-item-actions {
  position: absolute;
  top: 50%;
  right: 6px;
  transform: translateY(-50%);
  display: flex;
  align-items: center;
  gap: 4px;
  padding: 2px 7px;
  background: var(--tm-paper-raised);
  border: 1px solid var(--tm-paper-hairline-2);
  border-radius: var(--radius-full);
  box-shadow: var(--tm-shadow-1);
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.15s ease;
}
.sk-item:hover .sk-item-actions,
.sk-item:focus-within .sk-item-actions { opacity: 1; pointer-events: auto; }
/* s04 精修（v-21）：三动作图标化——文字药丸盖住条目两行；描边图标 + hover title */
.sk-item-action-btn { display: inline-flex; align-items: center; justify-content: center; flex: none; padding: 3px; border: none; background: none; color: var(--text-muted); cursor: pointer; border-radius: var(--radius-sm); transition: color 0.15s ease; }
.sk-item-action-btn:hover { color: var(--tm-brand-purple); }
.sk-item-action-btn svg { width: 14px; height: 14px; display: block; }

/* ── 降级横幅（0728 拍板：异常态不带彩色——灰墨陈述，banner 只说事实） ── */
.sk-panel-banner {
  display: flex;
  align-items: center;
  flex-wrap: wrap; /* offline 折叠(sk-offline-more)独占一行 */
  gap: 7px;
  flex: none;
  padding: 7px 11px;
  border-radius: var(--radius-md);
  font-size: var(--tm-text-sm);
  background: color-mix(in srgb, var(--tm-paper-ink) 5%, transparent);
  color: var(--tm-paper-ink-2);
  border: 1px solid var(--tm-paper-hairline);
}
.sk-panel-banner svg { width: 12px; height: 12px; flex: none; }
.sk-panel-banner span { min-width: 0; }
.sk-panel-banner .sk-inline-btn { color: inherit; text-decoration: underline; margin-left: auto; flex: none; }

/* 离线降级：内容整体降透明禁点（B3 sk-panel-dim） */
.zotero-content.sk-panel-dim { opacity: 0.4; pointer-events: none; }

/* ── 面板脚（B3 sk-panel-foot：健康点 + 状态短语；右侧=引用样式微控件）——
   位于 cortex-scroll 外（cortex-panel-inner 直接子元素），常驻面板底部；
   侧边距对齐滚动区 padding（14px 16px 16px）。 ── */
/* 页脚带撤除（用户 0728：底带不要了——健康归 ZOTERO 行墨点、计数归列表首行、
   样式签上移刊头场景工具位）。元素保留在 DOM 作隐藏 select 的状态载体。 */
.sk-panel-foot { display: none; }
.sk-panel-foot > span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* s04 重设计：原生 select 藏为状态载体（JS mount 加 .hidden），可见面 = chip +
   向上 solid 弹层（model-dropdown 配方：眉标 + 选中 ✓；zt-pop-up 同族动画）。 */
.sk-panel-foot { position: relative; }
.zotero-style-chip { flex: none; display: inline-flex; align-items: center; gap: 5px; max-width: 120px; padding: 3px 9px; border: 1px solid var(--tm-paper-hairline-2); border-radius: var(--radius-full); background: transparent; color: var(--tm-paper-ink-2); font-size: var(--tm-text-xs); font-family: inherit; cursor: pointer; transition: color 0.15s ease, border-color 0.15s ease; }
.zotero-style-chip:hover { color: var(--tm-brand-purple); border-color: var(--tm-brand-purple-alpha-28); }
.zotero-style-chip-label { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.zotero-style-chip svg { width: 10px; height: 10px; flex: none; transform: rotate(-90deg); opacity: 0.7; }
.zotero-style-pop { position: absolute; bottom: calc(100% + 6px); right: 12px; min-width: 176px; padding: 0 0 6px; background: var(--tm-paper-raised); border: 1px solid var(--tm-paper-hairline-2); border-radius: var(--radius-xl); box-shadow: var(--tm-shadow-3); overflow: hidden; z-index: 400; animation: zt-pop-up 0.22s var(--tm-ease-expo); }
/* 样式签挂刊头场景工具位时：弹层改向下开（锚 chip 右缘） */
.mast-tools .zotero-style-pop { bottom: auto; top: calc(100% + 6px); right: 0; animation: zt-pop-down 0.22s var(--tm-ease-expo); }
@keyframes zt-pop-down { from { opacity: 0; transform: translateY(-6px); } to { opacity: 1; transform: translateY(0); } }
.zotero-style-pop-head { padding: 9px 12px 7px; font-size: var(--tm-text-2xs); font-weight: var(--tm-weight-semibold); text-transform: uppercase; letter-spacing: 0.07em; color: var(--tm-paper-ink-mut); }
.zotero-style-opt { display: flex; align-items: center; justify-content: space-between; gap: 10px; width: 100%; padding: 6px 12px; border: none; background: none; color: var(--tm-paper-ink-2); font-size: var(--tm-text-sm); font-family: inherit; text-align: left; cursor: pointer; }
.zotero-style-opt:hover { background: var(--tm-brand-purple-alpha-08); color: var(--text-primary); }
.zotero-style-opt[aria-selected="true"] { color: var(--text-primary); font-weight: var(--tm-weight-medium); }
.zotero-style-opt-check { display: inline-flex; flex: none; color: var(--tm-brand-purple); }
.zotero-style-opt-check svg { width: 12px; height: 12px; display: block; }

/* ── 空态（B3 sk-empty：未配对 setup / 检索零结果） ── */
.sk-empty {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  gap: 10px;
  padding: 36px 22px;
  color: var(--text-secondary);
}
.sk-empty svg { width: 26px; height: 26px; color: var(--tm-brand-purple); opacity: 0.75; }
.sk-empty-title { font-family: var(--tm-serif); font-size: var(--tm-text-md); font-weight: var(--tm-weight-medium); color: var(--tm-paper-ink); }
.sk-empty-body { font-size: var(--tm-text-sm); color: var(--tm-paper-ink-mut); line-height: 1.5; max-width: 240px; }

/* ── B6 配对刀「引荐」立信卡（效果权威 docs/mockups/B6_PAIRING_LETTER_v2.html）──
   意象只在标题与画面（信笺纹章/凸版码/一炷香/藏书章），按钮全功能词（D5 语言律）。
   藏书章朱砂 = mockup 定稿锚值（亮 #c93a2b / 暗 #d9573f），非语义色不入 token 族。 */
.sk-pair-card {
  width: 100%;
  max-width: 280px;
  text-align: left;
  background: var(--tm-paper-raised);
  border: 1px solid var(--tm-paper-hairline);
  border-radius: 12px;
  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);
  padding: 20px 18px 18px;
}
.sk-pair-glyph { display: flex; justify-content: center; margin-bottom: 10px; }
.sk-empty .sk-pair-glyph svg { width: 46px; height: 32px; color: var(--tm-paper-ink); opacity: 1; }
.sk-pair-kicker {
  font-family: var(--tm-font-mono);
  font-size: 8.5px;
  letter-spacing: 0.3em;
  color: var(--tm-paper-ink-mut);
  text-transform: uppercase;
  text-align: center;
}
.sk-pair-title {
  font-family: var(--tm-serif);
  font-size: 18px;
  font-weight: var(--tm-weight-semibold);
  letter-spacing: 0.06em;
  color: var(--tm-paper-ink);
  text-align: center;
  margin: 8px 0 0;
}
.sk-pair-body {
  font-size: var(--tm-text-sm);
  color: var(--tm-paper-ink-2);
  line-height: 1.75;
  margin: 10px 0 0;
  /* 两端对齐已撤（0813 全页清点 G）：en 词距被拉花、300px 中文字距拉爆 */
}
.sk-pair-cta {
  display: block;
  margin: 16px auto 0;
  font-family: var(--tm-serif);
  font-size: 14px;
  font-weight: var(--tm-weight-semibold);
  letter-spacing: 0.14em;
  color: var(--tm-paper);
  background: var(--tm-paper-ink);
  border: none;
  border-radius: 4px;
  padding: 10px 28px;
  cursor: pointer;
  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);
  transition: opacity var(--tm-dur-fast) var(--tm-ease-out);
}
.sk-pair-cta:hover { opacity: 0.87; }
.sk-pair-cta:disabled { opacity: 0.45; cursor: default; }
/* 凸版码行必须在卡片 244px 内容宽（280 卡宽 − 2×18 内边距）里原尺寸排下：
   8×26 格 + 8×3 间隙 + 分隔点 ≈ 237px。旧值（4px 间隙 + 带内边距的分隔点）合计 259px
   已越界，靠 flex-shrink 把格子压窄——凸版格因此不再是等宽方章。B7 起码是这张卡的
   唯一主角，宁可收紧间隙，也不让主角变形。 */
.sk-pair-press { display: flex; justify-content: center; align-items: center; gap: 3px; margin-top: 14px; }
.sk-pair-ch {
  display: grid;
  place-items: center;
  /* W/M 真机难辨并档(0813 采纳):格与字各放大一档(26/38/16→28/40/18),
     300px 窄档实算 8 格+分隔 ≈251px 仍收得下 */
  width: 28px;
  height: 40px;
  border-radius: 3px;
  background: var(--tm-paper-band);
  font-family: var(--tm-font-mono);
  font-size: 18px;
  font-weight: var(--tm-weight-semibold);
  color: var(--tm-paper-ink);
  box-shadow: 0 2px 3px rgba(88, 66, 30, 0.22) inset, 0 1px 0 rgba(255, 255, 255, 0.6);
}
html[data-theme="dark"] .sk-pair-ch { box-shadow: 0 2px 3px rgba(0, 0, 0, 0.55) inset, 0 1px 0 rgba(255, 255, 255, 0.05); }

/* ── 托盘启动引导（0813 TRAY 三态）：获取行/超时提示/offline 折叠 ── */
.sk-pair-getlink {
  font: inherit;
  font-size: 11.5px;
  background: none;
  border: none;
  padding: 0;
  cursor: pointer;
  color: var(--tm-paper-ink-2);
  text-decoration: underline;
  text-underline-offset: 2px;
}
.sk-pair-getlink:hover {
  color: var(--tm-ink-purple-strong);
}
.sk-pair-get {
  margin-top: 10px;
}
.sk-pair-latehint {
  margin-top: 10px;
  line-height: 1.6;
}
.sk-pair-latehint .sk-pair-getlink {
  display: inline-block;
  margin-top: 4px;
}
.sk-offline-more {
  flex-basis: 100%;
  margin-top: 2px;
}
.sk-offline-more summary {
  cursor: pointer;
  font-size: 11px;
  color: var(--tm-paper-ink-mut);
  list-style: none;
}
.sk-offline-more summary::-webkit-details-marker {
  display: none;
}
.sk-offline-more summary:hover {
  color: var(--tm-paper-ink-2);
}
.sk-offline-more-body {
  margin-top: 4px;
  font-size: 11px;
  line-height: 1.6;
  color: var(--tm-paper-ink-2);
}
.sk-pair-sep { font-family: var(--tm-serif); color: var(--tm-cinnabar); font-size: 13px; }
.sk-pair-under {
  margin-top: 8px;
  text-align: center;
  font-family: var(--tm-font-mono);
  font-size: 8px;
  letter-spacing: 0.24em;
  color: var(--tm-paper-ink-mut);
  text-transform: uppercase;
}
.sk-pair-steps { margin-top: 14px; display: flex; flex-direction: column; gap: 7px; }
.sk-pair-step { display: flex; gap: 10px; font-size: 11.5px; color: var(--tm-paper-ink-2); line-height: 1.6; text-align: left; }
.sk-pair-step i { font-style: normal; font-family: var(--tm-serif); color: var(--tm-cinnabar); flex: none; width: 14px; text-align: center; }
.sk-pair-incense { margin-top: 14px; }
.sk-pair-iline { position: relative; height: 2px; background: var(--tm-paper-hairline); }
.sk-pair-iburn { position: absolute; left: 0; top: 0; bottom: 0; width: 92%; background: var(--tm-paper-ink-2); }
.sk-pair-iburn::after {
  content: "";
  position: absolute;
  right: -2px;
  top: -2px;
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: var(--tm-cinnabar);
  box-shadow: 0 0 6px var(--tm-cinnabar);
}
.sk-pair-itext { margin-top: 7px; font-size: 10px; color: var(--tm-paper-ink-mut); text-align: center; letter-spacing: 0.08em; }
.sk-pair-await { display: flex; align-items: center; justify-content: center; gap: 8px; margin-top: 13px; font-size: 11px; color: var(--tm-paper-ink-2); }
.sk-pair-pulse { width: 7px; height: 7px; border-radius: 50%; background: var(--tm-brand-purple); animation: sk-pair-pulse 2.2s ease-in-out infinite; }
@keyframes sk-pair-pulse { 0%, 100% { opacity: 0.25; } 50% { opacity: 1; } }
.sk-pair-note { display: flex; gap: 8px; margin-top: 14px; padding-top: 11px; border-top: 1px solid var(--tm-paper-hairline); font-size: 11px; line-height: 1.65; text-align: left; }
.sk-pair-note-mark { font-family: var(--tm-serif); flex: none; color: var(--tm-cinnabar); }
.sk-pair-note.err { color: var(--tm-cinnabar); }
/* 藏书章礼成（S3）：落章动画 + 文案；1.4s 后面板翻已配对态 */
.sk-pair-grand { display: flex; flex-direction: column; align-items: center; }
.sk-pair-seal {
  width: 84px;
  height: 84px;
  border-radius: 6px;
  background: #c93a2b;
  color: #fff;
  display: grid;
  place-items: center;
  transform: rotate(2.5deg);
  box-shadow: 0 3px 10px rgba(88, 66, 30, 0.35);
  position: relative;
  margin-top: 6px;
  animation: sk-pair-stamp 0.55s var(--tm-ease-out) both;
}
html[data-theme="dark"] .sk-pair-seal { background: #d9573f; }
.sk-pair-seal::before { content: ""; position: absolute; inset: 5px; border: 1.5px solid rgba(255, 255, 255, 0.55); border-radius: 3px; }
.sk-pair-seal-word { display: flex; flex-direction: column; align-items: center; font-family: var(--tm-serif); font-size: 25px; font-weight: var(--tm-weight-semibold); line-height: 1.18; }
.sk-pair-seal-word.latin { flex-direction: row; font-size: 13px; letter-spacing: 0.12em; }
@keyframes sk-pair-stamp {
  0% { transform: rotate(9deg) scale(2.1); opacity: 0; }
  62% { transform: rotate(2deg) scale(0.96); opacity: 1; }
  100% { transform: rotate(2.5deg) scale(1); opacity: 1; }
}
.sk-pair-done { font-family: var(--tm-serif); font-size: 15px; letter-spacing: 0.14em; color: var(--tm-paper-ink); margin-top: 16px; }
.sk-pair-donesub { font-size: 11px; color: var(--tm-paper-ink-mut); margin-top: 6px; letter-spacing: 0.05em; }
@media (prefers-reduced-motion: reduce) {
  .sk-pair-pulse { animation: none; opacity: 0.7; }
  .sk-pair-seal { animation: none; }
  .sk-pair-iburn { transition: none !important; }
}
/* 安静解除入口（用户 0731 拍板）：内容区末尾灰墨小字 + 行内一句确认，不进主视野 */
.sk-pair-unpair-row {
  padding: 14px 4px 6px;
  text-align: center;
  font-size: var(--tm-text-2xs);
  color: var(--tm-paper-ink-mut);
  letter-spacing: 0.04em;
  line-height: 1.7;
}
.sk-pair-unpair-act {
  background: none;
  border: none;
  padding: 0 0 1px;
  font: inherit;
  color: var(--tm-paper-ink-2);
  border-bottom: 1px solid var(--tm-paper-hairline-2);
  cursor: pointer;
  transition: color var(--tm-dur-fast) var(--tm-ease-out);
}
.sk-pair-unpair-act:hover { color: var(--tm-ink-purple); border-color: var(--tm-ink-purple); }
.sk-pair-unpair-act.danger:hover { color: var(--tm-cinnabar); border-color: var(--tm-cinnabar); }
.sk-pair-unpair-act:disabled { opacity: 0.5; cursor: default; }

/* ── 瞬态状态行（错误/截断提示；环境级状态走 banner/empty/foot） ── */
/* 异常态无彩色（用户 0728 拍板）：面板域内错误/降级一律灰墨陈述 */
.zotero-status { flex: none; font-size: var(--tm-text-sm); color: var(--tm-paper-ink-2); }
.zotero-status[data-kind="error"] { color: var(--tm-paper-ink-2); }
.zotero-status[data-kind="warn"] { color: var(--tm-paper-ink-2); }

/* ── 「去 chat 提问」交接入口（研究已迁 chat；面板保留发现入口） ── */
.sk-ask-row {
  display: flex;
  align-items: center;
  gap: 8px;
  flex: none;
  padding: 7px 8px;
  border: none;
  background: transparent;
  border-radius: var(--radius-md);
  font-family: inherit;
  font-size: var(--tm-text-sm);
  font-weight: var(--tm-weight-medium);
  color: var(--tm-brand-purple);
  text-align: left;
  cursor: pointer;
  transition: background 0.15s ease;
}
.sk-ask-row:hover { background: var(--tm-brand-purple-alpha-08); }
.sk-ask-row svg { width: 13px; height: 13px; flex: none; }

/* ========================================
   R1-S2 任务② · chat 技能面（zoteroChatSkill）
   B3 §5 词汇：sk-chip 家族（progress shimmer / receipt / amber / neutral）
   + 候选抽屉 + 句尾引用 chip（N3 防伪双态）。
   ======================================== */
.sk-chip-block { width: 100%; display: flex; flex-direction: column; gap: 8px; }
.sk-chip {
  display: flex;
  align-items: center;
  gap: 7px;
  width: fit-content;
  max-width: 100%;
  min-height: 26px;
  padding: 3px 10px;
  border-radius: var(--radius-md);
  font-size: var(--tm-text-sm);
  color: var(--text-secondary);
  background: rgba(148, 163, 184, 0.06);
  border: 1px solid rgba(148, 163, 184, 0.15);
}
.sk-chip .sk-chip-icon { width: 12px; height: 12px; color: var(--tm-brand-purple); flex: none; }
.sk-chip .sk-chip-icon svg { display: block; width: 12px; height: 12px; }
.sk-chip-progress {
  background-image: linear-gradient(100deg, rgba(148, 163, 184, 0.06) 30%, rgba(148, 163, 184, 0.16) 50%, rgba(148, 163, 184, 0.06) 70%);
  background-size: 200% 100%;
  animation: chip-fade-in 160ms ease-out, zt-skeleton-shimmer 1.8s linear infinite;
}
@keyframes zt-skeleton-shimmer {
  0% { background-position: -200% 0; }
  100% { background-position: 200% 0; }
}
.sk-chip-progress .sk-query-echo {
  color: var(--text-muted);
  font-style: italic;
  max-width: 150px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.sk-chip-amber {
  background: var(--tm-status-warning-bg);
  border-color: rgba(245, 158, 11, 0.35);
  color: var(--tm-status-warning-fg);
}
.sk-chip-amber .sk-chip-icon { color: var(--tm-status-warning); }
.sk-chip-neutral { color: var(--text-muted); }
.sk-chip-neutral .sk-chip-icon { color: var(--text-muted); }


/* 句尾引用 chip（N3 防伪双态 · 演出稿纸墨化：引用是事实不是状态,
   不配彩色底——细描边中性,hover 才透一点紫；快照外=红虚线防伪,永不可点） */
.sk-cite-chip {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 0 7px;
  margin: 0 2px;
  border-radius: var(--tm-radius-full);
  background: rgba(255, 255, 255, 0.5);
  border: 1px solid var(--tm-border-soft);
  color: var(--text-secondary);
  font-size: var(--tm-text-xs);
  line-height: 1.7;
  vertical-align: 1px;
  cursor: default;
  white-space: nowrap;
  transition: border-color 0.16s ease, color 0.16s ease, box-shadow 0.16s ease;
}
.sk-cite-chip svg { width: 10px; height: 10px; flex: none; opacity: 0.65; }
.sk-cite-chip:hover {
  border-color: var(--tm-brand-purple-alpha-28, rgba(85, 69, 182, 0.28));
  color: var(--tm-brand-purple);
  box-shadow: var(--tm-shadow-1);
}
.sk-cite-chip:hover svg { opacity: 1; }
:root[data-theme="dark"] .sk-cite-chip { background: transparent; color: var(--text-secondary); }
.sk-cite-chip.unverified {
  background: transparent;
  border: 1px dashed rgba(var(--tm-status-danger-rgb), 0.55);
  color: var(--tm-status-danger-fg);
}
.sk-cite-chip.unverified svg { color: var(--tm-status-danger); }

/* ── netfind③：联网候选（B3 candL2 描边卡=「外部来源」视觉语义；无插入特权） ── */
.zotero-net-cta { align-self: flex-start; }
.sk-btn-secondary {
  background: none;
  border: 1px solid var(--border-color);
  cursor: pointer;
  font-family: inherit;
  font-size: var(--tm-text-sm);
  color: var(--text-secondary);
  padding: 5px 12px;
  border-radius: var(--radius-full);
  transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;
}
.sk-btn-secondary:hover {
  border-color: var(--border-light);
  color: var(--text-primary);
  background: var(--bg-tertiary);
}
.sk-btn-secondary[disabled] { opacity: 0.5; cursor: default; }

/* ── 「存入到」文件夹选择器（统一作用于本批候选；树行复用 sk-tree 语言） ── */
.zotero-net-saveto { display: flex; flex-direction: column; margin: 2px 0 4px; max-width: 380px; }
.zotero-net-saveto-row { display: flex; align-items: center; gap: 8px; min-width: 0; flex-wrap: wrap; }
.zotero-net-saveto-label { font-size: var(--tm-text-xs); color: var(--text-muted); flex: none; }
.zotero-net-saveto-btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-width: 0;
  background: none;
  border: 1px solid var(--border-color);
  border-radius: var(--radius-full);
  padding: 3px 10px;
  font-family: inherit;
  font-size: var(--tm-text-sm);
  color: var(--text-primary);
  cursor: pointer;
  transition: background 0.15s ease, border-color 0.15s ease;
}
.zotero-net-saveto-btn:hover { border-color: var(--border-light); background: var(--bg-tertiary); }
.zotero-net-saveto-btn > svg { width: 12px; height: 12px; flex: none; color: var(--text-muted); }
.zotero-net-saveto-name { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 220px; }
.zotero-net-saveto-caret { display: inline-flex; flex: none; transition: transform 0.15s ease; }
.zotero-net-saveto-caret svg { width: 10px; height: 10px; }
.zotero-net-saveto-btn[aria-expanded="true"] .zotero-net-saveto-caret { transform: rotate(90deg); }
.zotero-net-saveto-hint { font-size: var(--tm-text-xs); color: var(--text-muted); margin-top: 4px; }
.zotero-net-target-tree {
  margin-top: 6px;
  border: 1px solid var(--tm-border-soft);
  border-radius: var(--radius-lg);
  padding: 4px 0;
  max-height: 240px;
  overflow-y: auto;
}
.zotero-net-target-info { font-size: var(--tm-text-sm); color: var(--text-muted); padding: 6px 12px; }
.zotero-net-target-tree.sk-tree { padding: 4px 6px; }
.zotero-net-target-tree .sk-inline-btn { margin: 2px 12px 6px; align-self: flex-start; }

.zotero-netcands { display: flex; flex-direction: column; }
.sk-cand {
  border-radius: var(--radius-lg);
  padding: 11px 13px;
  max-width: 380px;
  transition: opacity 0.4s var(--tm-ease-out);
}
.sk-cand + .sk-cand { margin-top: 8px; }
.sk-cand-l2 { background: transparent; border: 1px solid var(--tm-border-soft); }
.sk-cand-badge {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-size: var(--tm-text-xs);
  margin-bottom: 6px;
  color: var(--text-muted);
}
.sk-cand-badge svg { width: 11px; height: 11px; flex: none; }
.sk-cand-key {
  font-size: var(--tm-text-md);
  font-weight: var(--tm-weight-medium);
  color: var(--text-primary);
}
.sk-cand-title { font-size: var(--tm-text-sm); color: var(--text-muted); margin-top: 1px; }
.zotero-netcand-meta { font-size: var(--tm-text-xs); color: var(--text-muted); margin-top: 2px; }
.sk-cand-doi {
  font-family: var(--tm-font-mono);
  font-size: var(--tm-text-xs);
  color: var(--text-secondary); /* sol-A10：DOI=身份信息非装饰 */
  margin-top: 4px;
  overflow-wrap: anywhere;
}
.sk-cand-actions { display: flex; align-items: center; gap: 12px; margin-top: 8px; flex-wrap: wrap; }

/* 「存入我的文库」：候选卡唯一实底动作（后果性写操作的视觉特权）。
   P3-12：实底色从鲜亮 brand-purple 换沉纸墨紫（ink-purple）——与整体
   安静书房调性统一；切片② 插入按钮工作流态将复用同 token。 */
.zotero-netcand-save {
  padding: 4px 12px;
  border-radius: var(--radius-full);
  border: none;
  background: var(--tm-ink-purple);
  color: #fff;
  font-size: var(--tm-text-sm);
  font-weight: var(--tm-weight-semibold);
  font-family: inherit;
  cursor: pointer;
  transition: background 0.15s ease, opacity 0.15s ease;
}
.zotero-netcand-save:hover { background: var(--tm-ink-purple-strong); }
.zotero-netcand-save[disabled] { opacity: 0.5; cursor: default; }

/* 卡片状态行（saving/success/error/warn 四态） */
.zotero-netcand-status {
  display: flex;
  align-items: center;
  gap: 6px;
  margin-top: 7px;
  font-size: var(--tm-text-sm);
  line-height: 1.45;
  color: var(--text-secondary);
}
.zotero-netcand-status[data-kind="success"] { color: var(--tm-status-success); }
.zotero-netcand-status[data-kind="error"] { color: var(--tm-status-danger-fg); }
.zotero-netcand-status[data-kind="warn"] { color: var(--tm-status-warning-fg); }

/* 过期灰化：卡片降透明（复制 DOI 仍可用——DOI 不过期，保存时效才过期） */
.zotero-netcand.expired { opacity: 0.55; }
.zotero-net-expired-row {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
}

/* 研究答案（chat 内嵌；引用 chip 与文本同流） */
.zotero-chat-answer {
  font-size: 15px;
  line-height: 1.6;
  color: var(--text-secondary);
  white-space: pre-wrap;
  word-break: break-word;
}



/* C3：失败详情是降级只读面；无可点击引用、无可用写回。 */
.zotero-research-failure-reason,
.zotero-research-failure-billing {
  font-size: var(--tm-text-sm);
  line-height: 1.45;
  color: var(--text-secondary);
}

.zotero-research-failure-billing { color: var(--text-muted); }

.zotero-research-failure-toggle {
  align-self: flex-start;
  border: 0;
  padding: 0;
  background: transparent;
  color: var(--tm-brand-purple);
  cursor: pointer;
  font-family: inherit;
  font-size: var(--tm-text-sm);
}

/* 模型原文以「降级引用块」呈现：弱化色 + 左边线 + 浅底，滚动容器防 8000 字符撑爆侧栏 */
.zotero-research-failure-output {
  margin: 0;
  padding: 8px 10px;
  white-space: pre-wrap;
  overflow-wrap: anywhere;
  font: inherit;
  font-size: var(--tm-text-sm);
  line-height: 1.5;
  color: var(--text-secondary);
  border-left: 2px solid rgba(148, 163, 184, 0.35);
  background: rgba(148, 163, 184, 0.08);
  border-radius: 0 var(--radius-xs) var(--radius-xs) 0;
  max-height: 240px;
  overflow-y: auto;
}

/* ========================================
   研究线（the thread）· 演出稿切片1（2026-07-21 设计重写）
 一次研究 = 一条从提问下方生长的细线;过程作为「拍」沿线逐一浮现; 终态整线收拢为一行「场记单」（可点开回看）。
 canonical 设计稿 = .tmp/RESEARCH_STAGE_FABLE_v1.html（演出五幕）。
 ======================================== */
.sk-thread { position: relative; margin: 2px 0 0 10px; padding-left: 17px; }
.sk-thread::before { content: ""; position: absolute; left: 0; top: 4px; bottom: 4px; width: 1px; background: linear-gradient(
 to bottom,
 rgba(var(--tm-brand-purple-rgb), 0.03),
 rgba(var(--tm-brand-purple-rgb), 0.30) 12%,
 rgba(var(--tm-brand-purple-rgb), 0.30) 82%,
 rgba(var(--tm-brand-purple-rgb), 0.03)
 ); }
/* 拍：线上的一个事件。node 骑在线上,label 11px 低语 */
.sk-beat { position: relative; display: flex; align-items: baseline; gap: 7px; padding: 4px 0; min-height: 22px; animation: sk-beat-in 0.32s var(--tm-ease-expo) both; }
@keyframes sk-beat-in { from { opacity: 0; transform: translateY(5px); }
 to { opacity: 1; transform: translateY(0); }; }
.sk-beat-node { position: absolute; left: -19.5px; top: 9px; width: 6px; height: 6px; border-radius: 50%; background: rgba(var(--tm-brand-purple-rgb), 0.38); transition: background 0.3s var(--tm-ease-out), box-shadow 0.3s var(--tm-ease-out); }
/* 当前拍：节点呼吸 + 动词微光扫过 = 全程唯一的「动」 */
.sk-beat.now .sk-beat-node { width: 7px; height: 7px; left: -20px; top: 8.5px; background: var(--tm-brand-purple); animation: sk-node-breathe 2s ease-in-out infinite; }
@keyframes sk-node-breathe { 0%, 100% { box-shadow: 0 0 0 0 rgba(var(--tm-brand-purple-rgb), 0.30); }
 50% { box-shadow: 0 0 0 5px rgba(var(--tm-brand-purple-rgb), 0); }; }
.sk-beat.stopped .sk-beat-node { background: transparent; border: 1.5px solid var(--text-muted); }
.sk-beat.warn .sk-beat-node { background: var(--tm-status-warning); }
.sk-beat-label { font-size: var(--tm-text-xs); color: var(--text-muted); line-height: 1.5; display: inline-flex; align-items: baseline; gap: 6px; flex-wrap: wrap; }
.sk-beat.now .sk-beat-label { color: var(--text-secondary); }
.sk-beat.warn .sk-beat-label { color: var(--tm-status-warning-fg); }
.sk-beat.now .sk-beat-verb { background: linear-gradient(90deg, var(--text-secondary) 40%, #a9a0e6 50%, var(--text-secondary) 60%); background-size: 200% 100%; -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; animation: sk-verb-shimmer 2.2s linear infinite; }
@keyframes sk-verb-shimmer { 0% { background-position: 120% 0; }
 100% { background-position: -80% 0; }; }
.sk-beat-meta { font-size: var(--tm-text-xs); color: var(--text-muted); opacity: 0.75; font-variant-numeric: tabular-nums; }
/* 场记单：终态整线收拢成的一行回执（aria-expanded 可回看） */
.sk-thread.settled::before { display: none; }
.sk-thread.settled { margin-left: 0; padding-left: 0; }
.sk-thread-fold { display: inline-flex; align-items: center; gap: 6px; max-width: 100%; border: none; background: transparent; padding: 3px 8px 3px 4px; margin-left: -4px; border-radius: var(--tm-radius-sm); cursor: pointer; font-family: inherit; font-size: var(--tm-text-xs); color: var(--text-muted); transition: background 0.16s ease, color 0.16s ease; animation: sk-beat-in 0.3s var(--tm-ease-expo); }
/* 运行期线头（P2-9）：标题行即刻在场，活动态呼吸;不可折叠（线本就展开） */
.sk-thread-fold.running,
.sk-thread-fold.halted { cursor: default; }
.sk-thread-fold.running:hover,
.sk-thread-fold.halted:hover { background: transparent; color: var(--text-muted); }
.sk-thread-fold.running .sk-head-label { animation: sk-head-breathe 2.2s ease-in-out infinite; }
@keyframes sk-head-breathe { 0%, 100% { opacity: 0.55; } 50% { opacity: 1; } }
@media (prefers-reduced-motion: reduce) { .sk-thread-fold.running .sk-head-label { animation: none; } }
/* 线头在场时，左侧竖线从头行下方起（同 settled.reopen 的 top 语义） */
.sk-thread:not(.settled)::before { top: 30px; }
.sk-thread.settled .sk-thread-fold:hover { background: rgba(148, 163, 184, 0.1); color: var(--text-secondary); }
.sk-thread-fold .sk-fold-caret { width: 10px; height: 10px; flex: none; transition: transform 0.2s ease; }
.sk-thread-fold .sk-fold-caret svg { display: block; width: 10px; height: 10px; }
.sk-thread.reopen .sk-thread-fold .sk-fold-caret { transform: rotate(90deg); }
.sk-fold-dotline { display: inline-flex; align-items: center; gap: 3px; margin: 0 2px; }
.sk-fold-dot { width: 4px; height: 4px; border-radius: 50%; background: rgba(var(--tm-brand-purple-rgb), 0.35); }
.sk-fold-dot.warn { background: var(--tm-status-warning); }
.sk-thread.settled .sk-thread-beats { display: grid; grid-template-rows: 0fr; transition: grid-template-rows 0.3s var(--tm-ease-expo); }
.sk-thread.settled .sk-thread-beats > .sk-tb-inner { overflow: hidden; }
.sk-thread.settled.reopen .sk-thread-beats { grid-template-rows: 1fr; }
.sk-thread.settled.reopen { padding-left: 17px; margin-left: 10px; }
.sk-thread.settled.reopen::before { display: block; top: 30px; }
/* 回看态：拍全部静止直接可见 */
.sk-thread.settled .sk-beat { animation: none; }
.sk-thread.settled .sk-beat .sk-beat-verb { animation: none; background: none; -webkit-text-fill-color: currentColor; }
.sk-thread.settled .sk-beat-node { animation: none; box-shadow: none; }
/* 答案降临：墨滴入水（唯一允许的亮相） */
.zotero-answer-arrive { animation: sk-ink-in 0.5s var(--tm-ease-expo) both; }
@keyframes sk-ink-in { from { opacity: 0; transform: translateY(7px); filter: blur(3px); }
 to { opacity: 1; transform: translateY(0); filter: blur(0); }; }
/* 失败详情/计费行沿用旧类,线下方轻声呈现 */
.sk-thread-after { margin-top: 4px; }
@media (prefers-reduced-motion: reduce) { .sk-beat { animation: none; }
 .sk-beat.now .sk-beat-node { animation: none; }
 .sk-beat.now .sk-beat-verb { animation: none; background: none; -webkit-text-fill-color: currentColor; }
 .zotero-answer-arrive { animation: none; }
 .sk-thread.settled .sk-thread-beats { transition: none; }; }

/* ========================================
 稿纸卡（draft card）· 演出稿切片2
 卡内只有稿子（左缘书脊线=「这是作品」）;动作住卡外下方一行
 （主动作=描边一级小字钮,与消息动作行同语言）;确认小节在卡内翻开。
 ======================================== */
.zotero-draft-card { position: relative; margin-top: 10px; background: rgba(255, 255, 255, 0.72); backdrop-filter: blur(12px) saturate(160%); -webkit-backdrop-filter: blur(12px) saturate(160%); border: 1px solid var(--border-color); border-radius: var(--radius-xl, 16px); box-shadow: var(--tm-shadow-1); overflow: hidden; }
.zotero-draft-card::before { content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 2px; background: linear-gradient(to bottom, rgba(var(--tm-brand-purple-rgb), 0.62), rgba(var(--tm-brand-purple-rgb), 0.26)); }
:root[data-theme="dark"] .zotero-draft-card { background: rgba(255, 255, 255, 0.06); }
.zotero-draft-card.spine-glow::before { animation: zt-spine-glow 0.55s var(--tm-ease-out) 1; }
@keyframes zt-spine-glow { 0% { box-shadow: none; }
 45% { box-shadow: 0 0 14px 1.5px rgba(var(--tm-brand-purple-rgb), 0.45); }
 100% { box-shadow: none; }; }
.zotero-draft-body { padding: 12px 14px 12px 15px; font-size: var(--tm-text-md); line-height: 1.7; color: var(--text-primary); }
.zotero-draft-card.inserted { opacity: 0.86; }
.zotero-draft-card.inserted::before { background: rgba(var(--tm-brand-purple-rgb), 0.28); }
/* 卡外动作行：主动作=描边一级,次动作=icon 幽灵钮;完成后整行换回执 */
.zotero-draft-actions { display: flex; align-items: center; gap: 4px; margin-top: 6px; }
.zotero-draft-insert-btn { display: inline-flex; align-items: center; justify-content: center; gap: 5px; height: 27px; padding: 0 12px; border: 1px solid var(--tm-brand-purple-alpha-28); border-radius: var(--radius-full); background: rgba(255, 255, 255, 0.5); color: var(--tm-brand-purple); font-size: var(--tm-text-xs); font-weight: var(--tm-weight-semibold); font-family: inherit; cursor: pointer; transition: background 0.18s var(--tm-ease-out), border-color 0.18s var(--tm-ease-out); }
.zotero-draft-insert-btn:hover { background: var(--tm-brand-purple-alpha-08); border-color: rgba(var(--tm-brand-purple-rgb), 0.45); }
.zotero-draft-insert-btn[disabled] { opacity: 0.6; cursor: default; }
.zotero-draft-insert-btn svg { width: 11px; height: 11px; }
.zotero-ghost-btn { width: 26px; height: 26px; display: inline-flex; align-items: center; justify-content: center; border: none; background: transparent; border-radius: var(--radius-full); color: var(--text-muted); cursor: pointer; transition: background 0.15s ease, color 0.15s ease; padding: 0; }
.zotero-ghost-btn:hover { background: rgba(148, 163, 184, 0.14); color: var(--text-secondary); }
.zotero-ghost-btn[disabled] { opacity: 0.5; cursor: default; }
.zotero-ghost-btn svg { width: 13px; height: 13px; }
.zotero-draft-final { display: flex; align-items: center; gap: 10px; margin-top: 8px; animation: sk-beat-in 0.3s var(--tm-ease-expo); }
.zotero-draft-done { display: inline-flex; align-items: center; gap: 5px; font-size: var(--tm-text-2xs); color: var(--text-muted); font-weight: 400; opacity: 0.85; }
.zotero-draft-done svg { width: 11px; height: 11px; color: var(--text-muted); }
.zotero-draft-done.warn svg { color: var(--tm-status-warning); }
.zotero-draft-note { font-size: var(--tm-text-2xs); color: var(--text-muted); opacity: 0.85; }
/* 确认小节：卡内 grid-rows 翻开;一切披露只在被需要的那一刻出现 */
.zotero-confirm-fold { display: grid; grid-template-rows: 0fr; transition: grid-template-rows 0.32s var(--tm-ease-expo); }
.zotero-confirm-fold.open { grid-template-rows: 1fr; }
.zotero-confirm-fold > .zotero-confirm-clip { overflow: hidden; }
.zotero-confirm-inner { border-top: 1px solid var(--border-color); margin: 0 13px 0 15px; padding: 10px 0 12px; }
.zotero-confirm-row { display: flex; align-items: center; gap: 8px; padding: 3.5px 0; font-size: var(--tm-text-sm); color: var(--text-secondary); }
.zotero-confirm-row .zotero-confirm-dot { width: 5px; height: 5px; border-radius: 50%; background: rgba(var(--tm-brand-purple-rgb), 0.35); flex: none; }
.zotero-confirm-disclose { margin-top: 8px; padding-top: 8px; border-top: 1px dashed var(--border-color); display: flex; flex-direction: column; gap: 3px; }
.zotero-confirm-disclose > div { font-size: var(--tm-text-2xs); color: var(--text-muted); line-height: 1.55; }
.zotero-confirm-actions { display: flex; gap: 8px; margin-top: 10px; justify-content: flex-end; }
.zotero-confirm-go { display: inline-flex; align-items: center; justify-content: center; height: 27px; padding: 0 13px; border: none; border-radius: var(--radius-full); background: var(--tm-brand-purple); color: #fff; font-size: var(--tm-text-xs); font-weight: var(--tm-weight-semibold); font-family: inherit; cursor: pointer; transition: background 0.15s ease, opacity 0.15s ease; }
.zotero-confirm-go:hover { background: var(--tm-brand-purple-strong); }
.zotero-confirm-go[disabled] { opacity: 0.6; cursor: default; }
.zotero-confirm-cancel { display: inline-flex; align-items: center; justify-content: center; height: 27px; padding: 0 11px; border: none; border-radius: var(--radius-full); background: transparent; color: var(--text-muted); font-size: var(--tm-text-xs); font-weight: var(--tm-weight-medium); font-family: inherit; cursor: pointer; transition: background 0.15s ease, color 0.15s ease; }
.zotero-confirm-cancel:hover { background: rgba(148, 163, 184, 0.12); color: var(--text-secondary); }
/* 问答答案的动作行（恒显;侧栏触屏无 hover,重交付物不玩捉迷藏） */
.zotero-answer-actions { display: flex; align-items: center; gap: 4px; margin-top: 8px; }
@media (prefers-reduced-motion: reduce) { .zotero-confirm-fold { transition: none; }
 .zotero-draft-card.spine-glow::before { animation: none; }
 .zotero-draft-final { animation: none; }; }

/* ========================================
   输入期 · 范围浮层 + 定向拍（演出稿切片3）
   chip 三态如实汇报（未选=虚线）;浮层=锚定 composer 的快选树（工具不进流）;
   定向拍=未选范围发送时线上的第零拍（choice 被线吸收,零残骸）。
   ======================================== */
.context-chip.zotero-research-chip { cursor: pointer; transition: border-color 0.16s ease, color 0.16s ease; }
.context-chip.zotero-research-chip:hover { border-color: var(--tm-brand-purple-alpha-28); color: var(--text-secondary); }
.context-chip.zotero-research-chip svg { color: var(--tm-brand-purple); opacity: 0.8; }
.context-chip.zotero-research-chip.unset { border-style: dashed; border-color: rgba(148, 163, 184, 0.4); }
.context-chip.zotero-research-chip.unset svg { color: var(--text-muted); opacity: 0.7; }
/* 窄侧栏（320px）可用性：chip 随容器收缩，标签省略号截断，× 常驻可点——
   否则 context-bar 的 overflow:hidden 会把行尾 × 硬裁出可视区。 */
.context-chip.zotero-research-chip { max-width: 100%; min-width: 0; }
.context-chip.zotero-research-chip .chip-label { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.context-chip.zotero-research-chip .chip-close { flex-shrink: 0; }
#zotero-scope-pop-mount { position: relative; }
.zotero-scope-pop { position: absolute; bottom: calc(100% + 10px); left: 0; width: min(300px, 100%); background: var(--bg-secondary); border: 1px solid var(--border-color); border-radius: var(--radius-xl); box-shadow: var(--tm-shadow-3); overflow: hidden; z-index: 400; animation: zt-pop-up 0.22s var(--tm-ease-expo); }
@keyframes zt-pop-up { from { opacity: 0; transform: translateY(8px) scale(0.97); } to { opacity: 1; transform: translateY(0) scale(1); } }
.zotero-scope-pop-head { padding: 9px 12px 8px; font-size: var(--tm-text-2xs); font-weight: var(--tm-weight-semibold); text-transform: uppercase; letter-spacing: 0.07em; color: var(--text-muted); border-bottom: 1px solid var(--border-color); display: flex; justify-content: space-between; align-items: center; }
.zotero-scope-pop-head button { border: none; background: none; color: var(--text-muted); font-size: 13px; cursor: pointer; padding: 0; line-height: 1; }
.zotero-scope-pop-head button:hover { color: var(--text-secondary); }
.zotero-scope-pop-tree { padding: 5px 6px 8px; max-height: 240px; overflow-y: auto; scrollbar-width: thin; scrollbar-color: rgba(0, 0, 0, 0.12) transparent; }
.zotero-scope-pop-tree::-webkit-scrollbar { width: 5px; }
.zotero-scope-pop-tree::-webkit-scrollbar-thumb { background: var(--border-color); border-radius: 3px; }
.zotero-scope-pop-info { font-size: var(--tm-text-sm); color: var(--text-muted); padding: 6px 8px; }
.zotero-scope-pop-tree .sk-inline-btn { margin: 2px 8px 4px; }
.zotero-pop-row { user-select: none; }
.zotero-pop-check { display: inline-flex; flex: none; color: var(--tm-brand-purple); }
.zotero-pop-check svg { width: 11px; height: 11px; display: block; }
.zotero-pop-caret { cursor: pointer; }
/* 定向拍（拍板1）：需要回应的拍略显;choice chip 主次两级 */
.sk-beat.asks .sk-beat-label { font-size: var(--tm-text-sm); color: var(--text-secondary); }
/* A2 超额确认拍的费率「100 滴/次」= 价格披露,不是装饰:不吃 .sk-beat-meta 的 0.75 淡化。
   0820 Word 真机像素实测:淡化后仅 1.82:1,是整拍最淡的一行,而它恰恰是「这一次要扣多少」。
   用独立修饰类而非 .asks——落定后 asks 会被摘掉,费率作为记录仍须可读。 */
.sk-beat.zotero-overage-ask .sk-beat-meta { color: var(--text-secondary); opacity: 1; }
.sk-beat-choices { display: flex; gap: 6px; margin: 3px 0 2px; flex-wrap: wrap; }
.sk-choice-chip { display: inline-flex; align-items: center; gap: 5px; height: 27px; padding: 0 12px; border-radius: var(--radius-full); border: 1px solid var(--tm-brand-purple-alpha-28); background: rgba(255, 255, 255, 0.55); color: var(--tm-brand-purple); font-size: var(--tm-text-sm); font-weight: var(--tm-weight-medium); font-family: inherit; cursor: pointer; transition: background 0.18s var(--tm-ease-out), border-color 0.18s var(--tm-ease-out); white-space: nowrap; }
.sk-choice-chip:hover { background: var(--tm-brand-purple-alpha-08); border-color: rgba(var(--tm-brand-purple-rgb), 0.45); }
.sk-choice-chip svg { width: 11px; height: 11px; }
.sk-choice-chip.ghost { border-color: rgba(148, 163, 184, 0.35); color: var(--text-secondary); }
.sk-choice-chip.ghost:hover { background: rgba(148, 163, 184, 0.08); border-color: rgba(148, 163, 184, 0.5); }
:root[data-theme="dark"] .sk-choice-chip { background: rgba(255, 255, 255, 0.05); }

/* 切片4：联网候选卡的实体感梯度补笔——左缘虚线书脊（外部来源,信任低一级）。 */
.zotero-netcand { position: relative; overflow: hidden; }
.zotero-netcand::before { content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 2px; background: repeating-linear-gradient(to bottom, rgba(var(--tm-brand-purple-rgb), 0.38) 0 4px, transparent 4px 8px); }
.zotero-net-cta { align-self: flex-start; margin-top: 6px; }

/* 真机修复（0721）：全局 .message 是 display:flex 无方向（默认 row,gap 16）——
   研究线 wrap 含 thread+after 两个子元素,会被排成两列窄条。研究消息自带纵向布局。 */
.message.zotero-chat-run { flex-direction: column; gap: 0; }

/* ========================================
   s02 完善批（2026-07-24）：条目多选 + 面板改造 + 零碎搭车
   ======================================== */

/* ── 行尾 ⊕（条目行；树行同习语：hover 浮现、picked 恒显 ✓） ── */
.sk-item-pick {
  position: absolute;
  top: 50%;
  right: 8px;
  margin-left: 0;
  transform: translateY(-50%);
}
.sk-item-pick::before { inset: -6px; }
.sk-item:hover .sk-item-pick,
.sk-item-pick:focus-visible,
.sk-item-pick.picked { opacity: 1; }
/* 动作药丸让位行尾 ⊕（否则 hover 时两者重叠） */
.zotero-item .sk-item-actions { right: 34px; }
.sk-item.picked-row { background: var(--tm-brand-purple-alpha-08); }
.sk-item.picked-row:hover { background: var(--tm-brand-purple-alpha-10); }
.zotero-selected-label { padding: 6px 8px 2px; }

/* ── 有选择才浮出的 CTA（面板底、foot 之上；工作流态 = 沉纸墨紫实心） ── */
.zotero-selection-cta {
  display: flex;
  align-items: center;
  gap: 8px;
  flex: none;
  padding: 8px 10px;
  border-top: 1px solid rgba(0, 0, 0, 0.06);
}
:root[data-theme="dark"] .zotero-selection-cta { border-top-color: rgba(255, 255, 255, 0.08); }
.zotero-selection-go {
  display: flex;
  align-items: center;
  gap: 7px;
  flex: 1;
  min-width: 0;
  padding: 7px 10px;
  border: none;
  border-radius: var(--radius-md);
  background: var(--tm-ink-purple);
  color: #fff;
  font-family: inherit;
  font-size: var(--tm-text-sm);
  font-weight: var(--tm-weight-medium);
  cursor: pointer;
  transition: background 0.15s ease;
}
.zotero-selection-go:hover { background: var(--tm-ink-purple-strong); }
.zotero-selection-go svg { width: 13px; height: 13px; flex: none; }
.zotero-selection-go-label { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.zotero-selection-clear {
  flex: none;
  border: none;
  background: transparent;
  font-family: inherit;
  font-size: var(--tm-text-xs);
  color: var(--text-muted);
  cursor: pointer;
  padding: 4px 6px;
  border-radius: var(--radius-sm);
  transition: background 0.15s ease, color 0.15s ease;
}
.zotero-selection-clear:hover { color: var(--text-secondary); background: rgba(148, 163, 184, 0.12); }

/* ── 树可达：检索期的「Folders」切换行 ── */
.zotero-tree-toggle {
  display: flex;
  align-items: center;
  gap: 6px;
  flex: none;
  padding: 4px 6px;
  border: none;
  background: transparent;
  border-radius: var(--radius-sm);
  font-family: inherit;
  font-size: var(--tm-text-xs);
  color: var(--text-muted);
  cursor: pointer;
  text-align: left;
  transition: background 0.15s ease, color 0.15s ease;
}
.zotero-tree-toggle:hover { color: var(--tm-paper-ink-2); background: color-mix(in srgb, var(--tm-paper-ink) 6%, transparent); }
.zotero-tree-toggle svg { width: 10px; height: 10px; flex: none; transition: transform 0.15s ease; }
.zotero-tree-toggle[aria-expanded="true"] svg { transform: rotate(90deg); }

/* ── B3' 层级线（⑨）：per-row repeating 竖线画出祖先各级导轨；
      hover/picked 的 background 简写会临时盖掉导轨（可接受的取舍） ── */
.sk-tree-row.has-guide {
  background-image: repeating-linear-gradient(
    to right,
    transparent 0,
    transparent 15px,
    rgba(148, 163, 184, 0.24) 15px,
    rgba(148, 163, 184, 0.24) 16px
  );
  background-size: calc(var(--tree-depth, 1) * 16px - 4px) 100%;
  background-position: -5px 0;
  background-repeat: no-repeat;
}
:root[data-theme="dark"] .sk-tree-row.has-guide {
  background-image: repeating-linear-gradient(
    to right,
    transparent 0,
    transparent 15px,
    rgba(255, 255, 255, 0.10) 15px,
    rgba(255, 255, 255, 0.10) 16px
  );
}
/* 浮层树缩进 14px 一级（同导轨、不同周期） */
.zotero-pop-row.has-guide {
  background-image: repeating-linear-gradient(
    to right,
    transparent 0,
    transparent 13px,
    rgba(148, 163, 184, 0.24) 13px,
    rgba(148, 163, 184, 0.24) 14px
  );
  background-size: calc(var(--tree-depth, 1) * 14px - 4px) 100%;
  background-position: -5px 0;
  background-repeat: no-repeat;
}
:root[data-theme="dark"] .zotero-pop-row.has-guide {
  background-image: repeating-linear-gradient(
    to right,
    transparent 0,
    transparent 13px,
    rgba(255, 255, 255, 0.10) 13px,
    rgba(255, 255, 255, 0.10) 14px
  );
}

/* ── ②：插入按钮一组件两态——工作流态（研究稿纸卡）= 沉纸墨紫实心 ── */
.zotero-draft-insert-btn {
  background: var(--tm-ink-purple);
  border-color: var(--tm-ink-purple);
  color: #fff;
}
.zotero-draft-insert-btn:hover {
  background: var(--tm-ink-purple-strong);
  border-color: var(--tm-ink-purple-strong);
}

/* ── ①：引用 chip tooltip（题目 + 冗余复制小钮；chip 子元素 hover 显隐） ── */
.sk-cite-chip { position: relative; }
/* 挂 body、JS 定位（脱离稿纸卡 overflow+backdrop-filter 裁剪）；显隐走 .visible 类 */
.sk-cite-tip {
  position: fixed;
  z-index: 60;
  display: flex;
  align-items: flex-start;
  gap: 6px;
  max-width: 260px;
  padding: 6px 8px;
  border-radius: var(--radius-md);
  background: var(--bg-secondary);
  border: 1px solid var(--border-color);
  box-shadow: var(--tm-shadow-2);
  font-size: var(--tm-text-xs);
  color: var(--text-secondary);
  line-height: 1.45;
  visibility: hidden;
  opacity: 0;
  transition: opacity 0.12s ease;
  cursor: default;
}
.sk-cite-tip.visible { visibility: visible; opacity: 1; }
.sk-cite-tip-text {
  min-width: 0;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.sk-cite-tip-copy {
  flex: none;
  width: 18px;
  height: 18px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: none;
  background: transparent;
  border-radius: var(--radius-sm);
  color: var(--text-muted);
  cursor: pointer;
  padding: 0;
}
.sk-cite-tip-copy:hover { color: var(--tm-brand-purple); background: rgba(148, 163, 184, 0.14); }
.sk-cite-tip-copy svg { width: 11px; height: 11px; }

/* ── ⑤：答案动作行记忆 pin（已记忆态点亮） ── */
.zotero-answer-pin.memorized { color: var(--tm-brand-purple); }

/* ── ④：浮层条目搜索 + 条目行 + ③ 清除范围入口 ── */
.zotero-pop-search { flex: none; padding: 6px 8px 2px; }
.zotero-pop-search input {
  width: 100%;
  box-sizing: border-box;
  padding: 5px 8px;
  border: 1px solid var(--border-color);
  border-radius: var(--radius-md);
  background: transparent;
  font-family: inherit;
  font-size: var(--tm-text-sm);
  color: var(--text-primary);
  outline: none;
}
.zotero-pop-search input:focus { border-color: rgba(var(--tm-brand-purple-rgb), 0.45); }
.zotero-pop-item { align-items: flex-start; }
.zotero-pop-item-text { min-width: 0; display: flex; flex-direction: column; gap: 1px; }
.zotero-pop-item-key {
  font-size: var(--tm-text-sm);
  font-weight: var(--tm-weight-medium);
  color: var(--text-primary);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.zotero-pop-item-title {
  font-size: var(--tm-text-xs);
  color: var(--text-muted);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.zotero-pop-sel-label { padding: 6px 6px 2px; }
.zotero-pop-clear {
  display: block;
  width: 100%;
  margin-top: 4px;
  padding: 6px;
  border: none;
  border-top: 1px solid var(--border-color);
  background: transparent;
  font-family: inherit;
  font-size: var(--tm-text-xs);
  color: var(--text-muted);
  text-align: center;
  cursor: pointer;
  transition: color 0.15s ease, background 0.15s ease;
}
.zotero-pop-clear:hover { color: var(--tm-status-danger-fg); background: rgba(148, 163, 184, 0.08); }

/* ── ⑧：引用样式选择器（面板脚）下拉体验精修 ── */
.zotero-style-select {
  appearance: none;
  -webkit-appearance: none;
  padding: 2px 16px 2px 6px;
  border-radius: var(--radius-sm);
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2394a3b8' stroke-width='2.5'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 3px center;
  background-size: 9px;
  transition: background-color 0.15s ease, color 0.15s ease;
}
.zotero-style-select:hover { background-color: rgba(148, 163, 184, 0.12); }

/* ── T2 插入变体二选一菜单（面板/netfind 共用；点外即散零残骸） ── */
.zotero-insert-menu {
  z-index: 220;
  min-width: 172px;
  padding: 4px;
  display: flex;
  flex-direction: column;
  background: var(--bg-secondary);
  border: 1px solid var(--border-color);
  border-radius: var(--radius-md);
  box-shadow: var(--tm-shadow-2);
}
.zotero-insert-menu-item {
  border: 0;
  background: none;
  text-align: left;
  padding: 6px 10px;
  border-radius: var(--radius-sm);
  font-size: var(--tm-text-sm);
  color: var(--text-primary);
  cursor: pointer;
}
.zotero-insert-menu-item:hover,
.zotero-insert-menu-item:focus-visible {
  background: var(--tm-brand-purple-alpha-08);
  color: var(--tm-brand-purple-strong);
}

/* ========================================
   0728 观墨窗署名呈现（B4 v1 B/C/D 幕；auth 逻辑零改动）
   题记行 = EX LIBRIS · 名（滚动区首）；署名开卷行 = guest 面板脚上方；
   落款写名仪式 = 登录成功且面板在场时名字洇出 + ANNO DOMINI 随影显现。
   ======================================== */
/* 面板内题记行与落款仪式已随 B5 刀① 移交常驻刊头（用户 0728 拍板：不再重复 EX LIBRIS） */

/* 执笔搁笔行（B4 v1 D幕）：羽毛笔缩影静卧笔架，免费署名态唯一转化触点 */
.sk-penrest {
  flex: none;
  /* 底带撤除后搁笔行即面板收束（用户 0728：下移但保持呼吸感） */
  margin: 12px 16px 18px;
  border: 1px solid var(--tm-paper-hairline);
  border-radius: 12px;
  background: var(--tm-paper-band);
  padding: 10px 14px;
  display: flex;
  align-items: center;
  gap: 12px;
  cursor: pointer;
  font-family: inherit;
  text-align: left;
  transition: border-color var(--tm-dur-fast) var(--tm-ease-out),
    background var(--tm-dur-fast) var(--tm-ease-out);
}
.sk-penrest:hover { border-color: var(--tm-paper-hairline-2); background: var(--tm-paper-raised); }
.sk-penrest.hidden { display: none; }
.sk-pen-thumb { width: 64px; height: 26px; overflow: hidden; position: relative; flex: none; }
.sk-pen-thumb img {
  position: absolute;
  width: 22px;
  height: 92px;
  left: 21px;
  top: -33px;
  transform: rotate(76deg);
  filter: drop-shadow(1px 2px 2px rgba(0, 0, 0, 0.19));
}
.sk-penrest-tx { min-width: 0; display: flex; flex-direction: column; gap: 1px; }
.sk-penrest-title {
  font-family: var(--tm-serif);
  font-size: 13px;
  font-weight: var(--tm-weight-semibold);
  letter-spacing: 0.1em;
  color: var(--tm-paper-ink);
}
.sk-penrest-sub { font-size: var(--tm-text-2xs); color: var(--tm-paper-ink-mut); }
.sk-penrest-go { margin-left: auto; flex: none; font-size: var(--tm-text-xs); color: var(--tm-ink-purple-strong); letter-spacing: 0.08em; }

.ink-signin-row {
  display: flex;
  align-items: center;
  gap: 10px;
  flex: none;
  margin: 0 16px 10px;
  padding: 11px 14px;
  border: 1.5px solid var(--tm-paper-hairline-2);
  border-radius: 14px;
  background: var(--tm-paper-raised);
  cursor: pointer;
  font-family: inherit;
  text-align: left;
  transition: border-color 0.15s ease;
}
.ink-signin-row:hover { border-color: var(--tm-ink-purple); }
.ink-signin-row.hidden { display: none; }
.ink-signin-ph {
  font-family: var(--tm-serif);
  font-size: 13px;
  letter-spacing: 0.05em;
  color: var(--tm-paper-ink-2);
}
.ink-signin-dot {
  margin-left: auto;
  flex: none;
  width: 24px;
  height: 24px;
  border-radius: var(--tm-radius-full);
  background: var(--tm-brand-purple);
}

/* ── 0731 库底卡墨态（与 composer 墨点同一投影）：圈心墨核提示点 +
      执笔卡触发式浮现动画（free 意图时刻出现，非常驻家具） ── */
.sk-ink-core-dot {
  flex: none;
  width: 12px;
  height: 12px;
  border-radius: var(--tm-radius-full);
  border: 1.5px solid var(--tm-brand-purple);
  position: relative;
  margin-left: 6px;
}
.sk-ink-core-dot::after {
  content: "";
  position: absolute;
  left: 50%;
  top: 50%;
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: var(--tm-brand-purple);
  transform: translate(-50%, -50%);
}
#zotero-ask-chat[data-ink="dry"] {
  color: var(--tm-paper-ink-mut);
}
.sk-penrest {
  animation: tm-block-reveal var(--tm-dur-normal) var(--tm-ease-out) both;
}

/* ── 0731 会员立笔：与 composer 案头同姿态（free 的笔躺在执笔卡里，
      会员的笔立在面板右下）；点立笔 = 让 AI 研究你的文库 ── */
.zotero-panel.cortex-panel .cortex-panel-inner {
  position: relative;
}
.sk-panel-quill {
  position: absolute;
  right: 12px;
  bottom: 58px;
  width: 34px;
  height: 112px;
  padding: 0;
  border: 0;
  background: transparent;
  cursor: pointer;
  z-index: 4;
}
.sk-panel-quill img {
  width: 26px;
  height: 112px;
  transform: scaleX(-1) rotate(14deg);
  transform-origin: 50% 96%;
  filter: drop-shadow(2px 3px 3px rgba(0, 0, 0, 0.19));
  transition: transform var(--tm-dur-fast) var(--tm-ease-out);
}
.sk-panel-quill:hover img {
  transform: scaleX(-1) rotate(20deg);
}
.sk-panel-quill.hidden {
  display: none;
}
