/* Brief 转笔记 · 页面与小红书 App 模拟详情页
 * 2026-10-03 新建
 * 约束：主色 #FF2442；动效只用 transform / opacity；尊重 prefers-reduced-motion；移动端降级为简洁模式
 */

/* ==================== ① 页面骨架 ==================== */
.bf-wrap { display: flex; flex-direction: column; gap: 16px; }
.bf-steps { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 4px; }
.bf-step {
  display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; color: var(--sub, #5B5457);
  padding: 5px 12px; border-radius: 999px; background: #fff; border: 1px solid var(--line, #EDE3E6);
}
.bf-step.on { color: var(--xhs-red-text, #D81B37); border-color: #FFD6DC; background: #FFF5F6; font-weight: 600; }
.bf-step i { width: 14px; height: 14px; }
.bf-arrow { color: var(--graphic-strong, #6E6869); font-size: 12px; }

.bf-drop {
  border: 1.5px dashed #E3C9CE; border-radius: 14px; background: #FFF9FA; padding: 22px 18px; text-align: center;
  transition: border-color .18s var(--ease, cubic-bezier(.4,0,.2,1)), background .18s var(--ease, cubic-bezier(.16,1,.3,1));
  display: flex; flex-direction: column; justify-content: center; min-height: 240px;
}
.bf-drop.on { border-color: var(--xhs-red-text, #D81B37); background: #FFF1F3; }
.bf-drop h4 { margin: 0 0 6px; font-size: 14px; color: #1A1A1A; }
.bf-drop p { margin: 0 0 12px; font-size: 12.5px; color: var(--text-muted, #5B5457); }
.bf-drop-actions { display: flex; gap: 10px; justify-content: center; flex-wrap: wrap; }

/* ===== 生成方式：一个主按钮 + 折叠的其它方式（2026-10-19）=====
 * 园园：五种生成方式对新手太不友好，一般人不知道什么意思，学习成本太高。
 * 原来是 5 个等宽按钮平铺，且全是内部黑话（全域 3 版 / 基于大纲优化 / 只按方向生成）。
 * 现在主按钮只说结果，其余折进「想换个方式生成」，每条配一句什么情况下选它。 */
.bf-gen { margin-top: 16px; }
.bf-gen-main {
  display: inline-flex; align-items: center; gap: 10px;
  height: 44px; padding: 0 22px; border-radius: 999px;
  font-size: 15px; font-weight: 600;
}
.bf-gen-main .bf-gen-n {
  font-size: 12px; font-weight: 500;
  padding-left: 10px; border-left: 1px solid rgba(255, 255, 255, .38);
  opacity: .92;
}
.bf-gen-sub {
  margin: 8px 0 0; font-size: 12.5px; line-height: 1.6;
  color: var(--text-muted, #5B5457);
}

/* G71：会话纠正记忆输入区 */
.bf-fb {
  margin-top: 10px; padding: 9px 11px;
  border: 1px solid rgba(255, 255, 255, .22); border-radius: 8px;
  background: rgba(255, 255, 255, .04);
}
.bf-fb-lb {
  display: block; font-size: 12px; font-weight: 600;
  color: var(--text, #2B2729); margin-bottom: 5px;
}
.bf-fb-in {
  width: 100%; box-sizing: border-box; resize: vertical;
  font: inherit; font-size: 13px; line-height: 1.6;
  color: var(--text, #2B2729);
  border: 1px solid rgba(255, 255, 255, .28); border-radius: 6px;
  background: rgba(255, 255, 255, .06);
  padding: 7px 9px;
}
.bf-fb-in:focus-visible {
  outline: 2px solid var(--brand, #FF2E4D); outline-offset: 1px;
}
.bf-fb-tip {
  margin: 6px 0 0; font-size: 11.5px; color: var(--text-muted, #5B5457);
}
.bf-gen-toggle {
  margin-top: 10px; padding: 4px 2px;
  border: 0; background: transparent;
  font: inherit; font-size: 12.5px; color: #6E6869;
  cursor: pointer; display: inline-flex; align-items: center; gap: 5px;
  transition: color .15s;
}
.bf-gen-toggle:hover { color: var(--xhs-red-text, #D81B37); }
.bf-gen-toggle .caret { transition: transform .2s cubic-bezier(.4, 0, .2, 1); }
.bf-gen-toggle.on .caret { transform: rotate(180deg); }
.bf-gen-more {
  margin-top: 8px;
  display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 8px;
}
.bf-gen-opt {
  display: flex; flex-direction: column; gap: 3px; align-items: flex-start;
  padding: 11px 14px;
  border: 1px solid var(--line2, #E8E8EC); border-radius: 12px;
  background: #fff; text-align: left; font: inherit; cursor: pointer;
  transition: border-color .15s, background .15s, transform .12s;
}
.bf-gen-opt:hover {
  border-color: rgba(216, 27, 55, .3);
  background: #FFF9FA;
}
.bf-gen-opt:active { transform: scale(.985); }
.bf-gen-opt:focus-visible { outline: 2px solid var(--xhs-red-text, #D81B37); outline-offset: 2px; }
.bf-gen-opt b { font-size: 13.5px; font-weight: 600; color: #1F1B1D; }
.bf-gen-opt span { font-size: 12px; line-height: 1.5; color: #6E6869; }
[data-theme="dark"] .bf-gen-toggle { color: #b3aab0; }
[data-theme="dark"] .bf-gen-opt { background: #241f22; border-color: #3a3337; }
[data-theme="dark"] .bf-gen-opt b { color: #f0eaec; }
[data-theme="dark"] .bf-gen-opt span { color: #b3aab0; }
[data-theme="dark"] .bf-gen-opt:hover { background: #2c2629; border-color: rgba(216, 27, 55, .42); }

/* 上传 + 粘贴 双栏（2026-10-03：之前粘贴框裸奔——主站 .sw-input 样式全部限定在
   #page-workshop 等容器内，#page-brief 里一个都不生效，textarea 显示成默认小方块） */
.bf-input-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-top: 12px; align-items: stretch; }
.bf-paste { display: flex; flex-direction: column; }
.bf-paste > label { font-size: 12.5px; font-weight: 600; color: #3A3F46; margin-bottom: 8px; }
.bf-textarea {
  width: 100%; flex: 1; min-height: 170px; box-sizing: border-box;
  border: 1.5px solid var(--line2, #E8E8EC); border-radius: 12px;
  padding: 12px 14px; font-size: 13px; line-height: 1.7; font-family: inherit;
  background: #fff; color: var(--ink, #1F1B1D); resize: vertical; outline: none;
  transition: border-color .15s var(--ease, cubic-bezier(.4,0,.2,1)), box-shadow .15s var(--ease, cubic-bezier(.16,1,.3,1));
}
.bf-textarea::placeholder { color: #6E6869; }
.bf-textarea:hover:not(:focus) { border-color: #E3A8B8; }
.bf-textarea:focus { border-color: var(--xhs-red-text, #D81B37); box-shadow: 0 0 0 4px rgba(255,36,66,.10); }
.bf-paste-actions { justify-content: flex-end; margin-top: 10px; }

/* 底部亮点卡：页面空态时也有东西可看、可读 */
.bf-feats { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; }
.bf-feat {
  background: #fff; border: 1px solid var(--line, #EDE3E6); border-radius: 14px;
  padding: 16px 16px 14px; box-shadow: 0 2px 10px rgba(31,27,29,.04);
}
.bf-feat .ic { font-size: 20px; line-height: 1; margin-bottom: 8px; }
.bf-feat b { display: block; font-size: 13.5px; color: #1A1A1A; margin-bottom: 5px; }
.bf-feat p { margin: 0; font-size: 12.5px; line-height: 1.65; color: var(--text-muted, #5B5457); }

.bf-badge {
  display: inline-flex; align-items: center; gap: 5px; font-size: 12px; font-weight: 700;
  padding: 3px 10px; border-radius: 999px;
}
.bf-badge.outline { background: linear-gradient(135deg, #E02039, #FF6B80); color: #fff; }
.bf-badge.regular { background: #F1F3F5; color: #5B5457; }

.bf-kv { display: grid; grid-template-columns: 88px 1fr; gap: 8px 12px; font-size: 13px; }
.bf-kv > div:nth-child(odd) { color: var(--text-muted, #5B5457); }
.bf-kv > div:nth-child(even) { color: #1A1A1A; word-break: break-all; }

/* 图片规划表 */
.bf-plan { width: 100%; border-collapse: collapse; font-size: 12.5px; }
.bf-plan th, .bf-plan td { border: 1px solid var(--line, #EDE3E6); padding: 7px 9px; text-align: left; vertical-align: top; }
.bf-plan th { background: #FFF5F6; color: #6B7078; font-weight: 600; white-space: nowrap; }
.bf-plan td input { width: 100%; border: 0; background: transparent; font-size: 12.5px; color: #1A1A1A; padding: 0; outline: none; }
.bf-plan td input:focus { box-shadow: 0 1px 0 #FF2442; }
.bf-plan .live { color: var(--xhs-red-text, #D81B37); font-weight: 600; }

/* ==================== ② 模拟小红书 App 详情页 ==================== */
.xhs {
  --xhs-red: #FF2442;
  --xhs-ink: #333;
  --xhs-sub: #6E6869;
  --xhs-line: #F1F1F1;
  width: 100%; max-width: 420px; margin: 0 auto; background: #fff;
  border-radius: 16px; overflow: hidden; box-shadow: 0 8px 28px rgba(31, 27, 29, .09);
  font-family: -apple-system, "PingFang SC", "Noto Sans SC", "Microsoft YaHei", sans-serif;
  color: var(--xhs-ink); position: relative;
}
.xhs *, .xhs *::before, .xhs *::after { box-sizing: border-box; }

/* 顶部导航栏：44px，白底无阴影 */
.xhs-nav {
  height: 44px; display: flex; align-items: center; gap: 8px; padding: 0 12px; background: #fff;
  position: relative; z-index: 3;
}
.xhs-nav .back { font-size: 20px; color: #333; line-height: 1; background: none; border: 0; cursor: pointer; padding: 4px; }
.xhs-nav .av { width: 30px; height: 30px; border-radius: 50%; background: linear-gradient(135deg, #E02039, #FF8A9B); color: #fff; font-size: 13px; display: flex; align-items: center; justify-content: center; font-weight: 600; flex-shrink: 0; overflow: hidden; }
.xhs-nav .av img { width: 100%; height: 100%; object-fit: cover; }
.xhs-nav .nm { font-size: 14px; font-weight: 600; color: #333; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.xhs-nav .follow {
  margin-left: auto; height: 28px; padding: 0 14px; border-radius: 999px; background: var(--xhs-red-solid, #E01230);
  color: #fff; font-size: 12px; font-weight: 600; border: 0; cursor: pointer;
  transition: transform .16s cubic-bezier(.4,0,.2,1);
}
.xhs-nav .follow:active { transform: scale(.94); }
.xhs-nav .more { font-size: 18px; color: #666; background: none; border: 0; cursor: pointer; padding: 4px; }

/* 图片轮播：3:4 竖版，无圆角（App 端就是这样） */
.xhs-slider { position: relative; width: 100%; aspect-ratio: 3 / 4; background: #F7F7F7; overflow: hidden; }
.xhs-track { display: flex; height: 100%; transition: transform .32s cubic-bezier(.32,.72,0,1); will-change: transform; }
.xhs-slide { flex: 0 0 100%; height: 100%; position: relative; background: #EFEFEF; }
.xhs-slide img { width: 100%; height: 100%; object-fit: cover; display: block; }
/* 占位图（还没出图时）：编号 + 场景 + 花字，方便先看版式 */
.xhs-ph { width: 100%; height: 100%; display: flex; flex-direction: column; justify-content: flex-end; padding: 16px; background: linear-gradient(160deg, #FFE1E6 0%, #FFF3F5 55%, #F6F7F8 100%); }
.xhs-ph .idx { position: absolute; top: 12px; left: 12px; font-size: 12px; color: var(--xhs-red-text, #D81B37); font-weight: 700; background: #fff; border-radius: 999px; padding: 2px 9px; }
.xhs-ph .scene { font-size: 13px; color: #6B7078; line-height: 1.5; }
.xhs-ph .ov { margin-top: 8px; font-size: 20px; font-weight: 700; color: #fff; line-height: 1.35; text-shadow: 0 2px 8px rgba(0,0,0,.35); }
.xhs-ph .live-tag { position: absolute; top: 12px; right: 12px; background: rgba(0,0,0,.55); color: #fff; font-size: 12px; padding: 2px 8px; border-radius: 999px; }

/* 指示器：右下角「1/9」+ 原点 */
.xhs-dots { position: absolute; right: 12px; bottom: 12px; display: flex; gap: 4px; align-items: center; background: rgba(0,0,0,.35); border-radius: 999px; padding: 4px 9px; }
.xhs-dots i { width: 5px; height: 5px; border-radius: 50%; background: rgba(255,255,255,.5); transition: transform .2s var(--ease, cubic-bezier(.16,1,.3,1)), background .2s; }
.xhs-dots i.on { background: #fff; transform: scale(1.35); }
.xhs-count { position: absolute; right: 12px; top: 12px; background: rgba(0,0,0,.62); color: #fff; font-size: 12px; padding: 3px 9px; border-radius: 999px; }

/* 互动数据栏 */
.xhs-bar { display: flex; align-items: center; gap: 18px; padding: 12px 16px 4px; }
.xhs-bar span { font-size: 14px; color: #666; display: inline-flex; align-items: center; gap: 5px; }
.xhs-bar svg { width: 18px; height: 18px; }

.xhs-main { padding: 4px 16px 16px; }
.xhs-title { font-size: 17px; font-weight: 600; color: #333; line-height: 1.4; margin: 4px 0 8px; }
.xhs-body { font-size: 15px; line-height: 1.6; color: #333; white-space: pre-wrap; }
.xhs-body.clamp { display: -webkit-box; -webkit-line-clamp: 4; -webkit-box-orient: vertical; overflow: hidden; }
.xhs-more { color: var(--xhs-red-text, #D81B37); font-size: 15px; background: none; border: 0; padding: 2px 0; cursor: pointer; }
.xhs-tags { margin-top: 8px; display: flex; flex-wrap: wrap; gap: 8px; }
.xhs-tags a { color: var(--xhs-red-text, #D81B37); font-size: 14px; text-decoration: none; }
.xhs-meta { padding: 0 16px 14px; font-size: 12px; color: var(--xhs-sub); }

/* 评论区 */
.xhs-cmt { background: #F7F7F7; border-radius: 12px; margin: 0 16px 16px; padding: 12px 14px; }
.xhs-cmt h5 { margin: 0 0 8px; font-size: 13px; color: #666; font-weight: 600; }
.xhs-cmt li { list-style: none; font-size: 13px; color: #333; line-height: 1.6; padding: 3px 0; }
.xhs-cmt li b { color: #666; font-weight: 500; }

/* 底部输入栏 */
.xhs-foot { display: flex; align-items: center; gap: 12px; padding: 10px 16px; border-top: 1px solid var(--xhs-line); background: #fff; }
.xhs-foot .say { flex: 1; height: 34px; border-radius: 999px; background: #F5F5F5; border: 0; padding: 0 14px; font-size: 13px; color: #6E6869; display: flex; align-items: center; }
.xhs-foot .ic { font-size: 16px; color: #666; background: none; border: 0; cursor: pointer; display: inline-flex; align-items: center; gap: 4px; }

/* ==================== ③ 悬浮复制按钮 ==================== */
.xhs-copy {
  position: absolute; z-index: 5; background: rgba(0,0,0,.72); color: #fff; font-size: 12px;
  padding: 5px 10px; border-radius: 999px; border: 0; cursor: pointer; white-space: nowrap;
  opacity: 0; transform: translateY(4px); transition: opacity .18s var(--ease, cubic-bezier(.16,1,.3,1)), transform .18s var(--ease, cubic-bezier(.16,1,.3,1));
  pointer-events: none;
}
.xhs-copy.show { opacity: 1; transform: translateY(0); pointer-events: auto; }

/* 顶部工具栏 */
.bf-tools { display: flex; gap: 8px; flex-wrap: wrap; justify-content: center; margin-top: 12px; }
.bf-tools .btn { min-height: 34px; }

/* ==================== ④ 导出长图（画布）/ ZIP ==================== */
.bf-longimg { max-width: 420px; margin: 0 auto; border-radius: 12px; overflow: hidden; box-shadow: 0 6px 20px rgba(31,27,29,.1); }
.bf-longimg img { width: 100%; display: block; }
.bf-zipbox { max-width: 420px; margin: 0 auto; padding: 14px 16px; border: 1px dashed var(--line,#E8E8EC); border-radius: 12px; text-align: center; background: #fff; }
.bf-zipbox b { font-size: 14px; color: var(--ink,#1F1B1D); }
.bf-zipbox .hint { margin: 6px 0 10px; }
.bf-zipbox .btn { text-decoration: none; display: inline-flex; align-items: center; }

/* ==================== ⑤ 移动端降级：简洁模式 ==================== */
@media (max-width: 768px) {
  .xhs { border-radius: 0; box-shadow: none; max-width: 100%; }
  .xhs-cmt { display: none; }          /* 窄屏不塞评论区，信息密度优先 */
  .xhs-foot { display: none; }
  .bf-kv { grid-template-columns: 76px 1fr; font-size: 12.5px; }
  .bf-plan { font-size: 12px; }
  .bf-plan th, .bf-plan td { padding: 6px 7px; }
  .bf-input-grid { grid-template-columns: 1fr; }
  .bf-drop { min-height: 180px; }
  .bf-feats { grid-template-columns: 1fr; }
}

/* ==================== ⑥ 动效偏好 ==================== */
@media (prefers-reduced-motion: reduce) {
  .xhs-track, .xhs-dots i, .xhs-nav .follow, .xhs-copy { transition: none !important; }
}

/* ==================== ⑦ 打印 / 导出 PDF ====================
 * 屏幕上不显示，打印时才出现；打印时把站内其它内容全部隐藏，
 * 只留 #bfPrintArea，这样另存出来的 PDF 是干净的笔记稿。 */
#bfPrintArea { display: none; }
@media print {
  /* 2026-10-11 重写：旧版 body * { visibility:hidden } 隐藏元素仍占版面，
     「导出 PDF」打出来是一沓空白页。现在由 JS 在打印期间给 <html> 挂
     bf-printing，用 display:none 真正移除其余内容（无 #bfPrintArea 的页面不受影响）。 */
  html.bf-printing body > *:not(#bfPrintArea) { display: none !important; }
  body * { visibility: hidden !important; }
  #bfPrintArea, #bfPrintArea * { visibility: visible !important; }
  #bfPrintArea {
    display: block !important;
    position: absolute; left: 0; top: 0; width: 100%;
    font-family: -apple-system, "PingFang SC", "Microsoft YaHei", sans-serif;
    color: #1F1B1D; padding: 0; margin: 0;
  }
  #bfPrintArea h1 { font-size: 20px; line-height: 1.4; margin: 0 0 8px; }
  #bfPrintArea h2 { font-size: 15px; margin: 18px 0 8px; }
  #bfPrintArea .p-meta { font-size: 12px; color: var(--text-muted, #5B5457); margin-bottom: 12px; }
  #bfPrintArea pre { white-space: pre-wrap; font: 14px/1.7 inherit; margin: 0 0 14px; }
  #bfPrintArea .p-tags { color: var(--xhs-red-text, #D81B37); font-size: 13px; margin-bottom: 14px; }
  #bfPrintArea table { width: 100%; border-collapse: collapse; font-size: 12px; }
  #bfPrintArea th, #bfPrintArea td { border: 1px solid #E8E8EC; padding: 6px 8px; text-align: left; }
  #bfPrintArea th { background: #FAFAFA; }
  #bfPrintArea .p-foot { margin-top: 18px; font-size: 12px; color: #6E6869; }
  @page { margin: 16mm; }
}
/* Brief 转笔记 · 新增分区样式（2026-10-08 全域改造） */

/* 补充信息区 */
.bf-supp { margin-top: 14px; padding-top: 12px; border-top: 1px dashed rgba(0,0,0,.08); }
.bf-supp > label { display: block; font-size: 12px; color: var(--text-muted, #5B5457); margin-bottom: 6px; }
.bf-supp textarea { min-height: 60px; }
.bf-supp-row { display: flex; gap: 10px; align-items: center; margin-top: 8px; flex-wrap: wrap; }
.bf-input, .bf-fld {
  height: 34px; padding: 0 10px; border: 1px solid rgba(0,0,0,.12); border-radius: 8px;
  font-size: 13px; background: #fff; color: #333; width: 100%; box-sizing: border-box;
}
.bf-supp-row .bf-input { flex: 1 1 180px; width: auto; }
.bf-fld:focus, .bf-input:focus { outline: none; border-color: var(--xhs-red-text, #D81B37); }
.bf-kv-edit input { font-size: 13px; }

/* 通用分区 */
.bf-block { margin-top: 14px; }
.bf-bt { font-size: 13px; font-weight: 600; color: #333; margin-bottom: 6px; }
.bf-ul { margin: 0; padding-left: 18px; }
.bf-ul li { font-size: 13px; color: #4A4348; line-height: 1.7; }
.bf-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.bf-chips span {
  font-size: 12px; padding: 3px 9px; border-radius: 999px;
  background: #FFF1F3; color: var(--xhs-red-text, #D81B37); border: 1px solid rgba(255,36,66,.16);
}
.bf-tag { font-size: 12px; padding: 2px 7px; border-radius: 999px; background: #F1F2F4; color: #666; font-weight: 400; }

/* 标题候选 */
.bf-title {
  font-size: 14px; color: #333; padding: 9px 12px; margin-bottom: 6px;
  border: 1px solid rgba(0,0,0,.08); border-radius: 10px; cursor: pointer;
  transition: border-color .18s ease, background .18s ease;
}
.bf-title:hover { border-color: var(--xhs-red-text, #D81B37); background: #FFFAFB; }

/* 追问 */
.bf-need {
  margin-top: 10px; padding: 10px 12px; border-radius: 10px;
  background: #FFF8E6; border: 1px solid rgba(214,158,46,.28);
}
.bf-need b { font-size: 13px; color: #8A5A00; }
.bf-need ul { margin: 6px 0 0; padding-left: 18px; }
.bf-need li { font-size: 13px; color: #6B5220; line-height: 1.7; }

/* 合规 */
.bf-comp { margin-top: 12px; padding: 10px 12px; border-radius: 10px; font-size: 13px; }
.bf-comp.ok { background: #F1FAF5; border: 1px solid rgba(29,158,117,.24); color: #0F6E56; }
.bf-afixtip {
  margin: 4px 0 6px; padding: 6px 8px; border-radius: 6px;
  background: rgba(76, 175, 80, 0.10); color: #2e7d32;
  font-size: 12px; line-height: 1.5;
}
.bf-comp.bad { background: #FFF1F1; border: 1px solid rgba(226,75,74,.3); color: #A32D2D; }
.bf-comp.bad div { margin-top: 4px; }
.bf-comp .hint { color: #8A6A6A; }

/* 置顶评论 */
.bf-pins { display: flex; flex-direction: column; gap: 6px; }
.bf-pin {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  padding: 7px 10px; background: #F7F8FA; border-radius: 8px; font-size: 13px; color: #444;
}

/* 历史记录 */
.bf-his-list { margin-top: 8px; display: flex; flex-direction: column; gap: 6px; }
.bf-his {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  padding: 9px 12px; border: 1px solid rgba(0,0,0,.07); border-radius: 10px;
}
.bf-his b { font-size: 13px; color: #333; }
.bf-his-act { display: flex; gap: 6px; flex-shrink: 0; }
.bf-live {
  font-size: 12px; padding: 1px 5px; border-radius: 4px;
  background: #E02039; color: #fff; font-weight: 600;
}

@media (max-width: 768px) {
  .bf-supp-row { flex-direction: column; align-items: stretch; }
  .bf-supp-row .bf-input { width: 100%; }
  .bf-his { flex-direction: column; align-items: flex-start; }
}
/* P0-1 三栏布局样式（2026-10-08） */

.bf-layout { max-width: none; }
/* 2026-10-17 fe-brief：左栏宽度收敛为单一真源。
   历史上有三处定义三个值：本文件 264px / brief-preview.css 232px / <=1024 的 208px，
   切预览开关时左栏 264<->232、版本卡 226<->194 会整栏跳动。
   现在只剩这一处变量，两份 css 都读它，预览开合只改第三列（0px <-> 404px）。 */
#page-brief { --bf-col-left: 264px; --bf-col-right: 404px; }
/* 2026-10-09 阶段三：三栏 20/50/30（1440 下 264/676/404），右栏 404 给 375 手机壳留出呼吸位 */
.bf-cols {
  display: grid;
  grid-template-columns: var(--bf-col-left, 264px) minmax(0, 1fr) var(--bf-col-right, 404px);
  gap: 16px;
  align-items: start;
}
.bf-col { min-width: 0; }

/* 左栏 */
.bf-col-left { display: flex; flex-direction: column; gap: 12px; }
.bf-col-left:empty { display: none; }
/* UI1（2026-10-09）：左栏（版本列表 / 历史）还没内容时，三栏会留一条 264px 的空槽，
   把中间内容顶到偏右。此时切两栏 + 给栅格上限居中，整体重心回到页面中间。
   类名由 brief-note.js 的 syncCols() 按「左栏有没有可见内容」实时切换。 */
/* 空状态就给一条居中的单列：右栏此时宽度为 0，留着它那一列反而把中间内容顶偏。
   width:100% 是必须的 —— .bf-wrap 是 flex 容器，只写 margin:0 auto 会让栅格
   不再沿交叉轴拉伸、宽度塌成内容的收缩宽度（实测从 1376 塌到 545）。 */
.bf-cols.bf-nol { grid-template-columns: minmax(0, 1fr); width: 100%; max-width: 960px; margin: 0 auto; }
/* 注意：栅格里其实是三个子元素（左/中/右）。只改模板而不隐藏左栏的话，
   第三项会换行、中间列被挤到第二行 —— 必须把空左栏真正拿掉。 */
.bf-cols.bf-nol .bf-col-left { display: none; }
/* 光写 .bf-cols.bf-nol（0,2,0）压不过 brief-preview.css 里的
   .bf-wrap:not(.bf-pv-open) .bf-cols（0,3,0）——那条 232px 的轨道会留着，
   左栏又 display:none，中间列就顶替进了 232px 那一列（实测 midW 只有 232）。
   所以这里套上同样的 .bf-wrap 前缀把特异性抬到 (0,4,0)，收起/展开两种状态都覆盖：
   收起时右栏本来就是 0 宽，直接单列居中；展开时保留 404 给手机壳。 */
.bf-wrap:not(.bf-pv-open) .bf-cols.bf-nol { grid-template-columns: minmax(0, 1fr); }
.bf-wrap.bf-pv-open .bf-cols.bf-nol { grid-template-columns: minmax(0, 1fr) 404px; }
/* P5 修复：版本卡与其它卡片统一 18px 内边距（原来 12/14 两套并存） */
.bf-vlist { padding: 18px; }
.bf-vitem {
  font-size: 13px; color: #4A4348; padding: 7px 10px; border-radius: 8px;
  cursor: pointer; transition: background .18s ease, color .18s ease;
  border: 1px solid transparent;
}
.bf-vitem:hover { background: #F7F8FA; }
.bf-vitem.on { background: #FFF1F3; color: var(--xhs-red-text, #D81B37); border-color: rgba(255,36,66,.18); }

/* 右栏：常驻预览 */
.bf-col-right { position: sticky; top: 12px; }
#bfPreviewPane {
  max-height: calc(100vh - 40px); overflow-y: auto;
  max-height: calc(100dvh - 40px);
  border-radius: 12px;
}
.bf-preview-empty {
  padding: 28px 16px; text-align: center; font-size: 13px; color: var(--text-muted, #5B5457);
  border: 1px dashed rgba(0,0,0,.12); border-radius: 12px; background: #FCFCFD;
}

/* 步骤条可点击 */
.bf-steps .bf-step[data-go] { cursor: pointer; }
.bf-steps .bf-step[data-go]:hover { color: var(--xhs-red-text, #D81B37); }

/* 双栏：右栏落到整行（2026-10-09：断点 1200 -> 1024，平板横屏还给三栏）
   2026-10-17 fe-brief：左栏宽度改走变量，与桌面态同一真源。 */
@media (max-width: 1024px) {
  #page-brief { --bf-col-left: 208px; }
  .bf-cols { grid-template-columns: var(--bf-col-left, 208px) minmax(0, 1fr); }
  .bf-cols.bf-nol { grid-template-columns: minmax(0, 1fr); max-width: 820px; }
  .bf-col-right { grid-column: 1 / -1; position: static; }
  #bfPreviewPane { max-height: none; overflow: visible; }
}

/* 单栏：手机 */
@media (max-width: 768px) {
  .bf-cols { grid-template-columns: minmax(0, 1fr); }
  .bf-cols.bf-nol { max-width: none; }
  .bf-col-left { order: 2; }
  .bf-col-mid { order: 1; }
  .bf-col-right { order: 3; }
}
/* ============================================================
   Brief 转笔记 · P0-3 / P1-5 / P1-6 / P1-7 / P1-8 / P1-9 / P2
   只做新增，不覆盖既有类（.bf-comp / .bf-tools / .bf-his / .bf-vlist 等保持原样）
   动效只用 transform / opacity，且全部尊重 prefers-reduced-motion
   ============================================================ */

/* ---------- P0-3 骨架屏 ---------- */
.bf-skel-wrap { display: grid; gap: 10px; margin-top: 10px; }
.bf-skel {
  border: 1px solid var(--line, #ececec);
  border-radius: 12px;
  padding: 14px;
  background: var(--card, #fff);
}
.bf-skel-line {
  height: 12px;
  border-radius: 6px;
  margin-bottom: 8px;
  background: linear-gradient(90deg, #f2f3f5 25%, #e9eaee 37%, #f2f3f5 63%);
  background-size: 400% 100%;
  animation: bfShimmer 1.4s ease infinite;
}
.bf-skel-line.w60 { width: 60%; }
.bf-skel-line.w40 { width: 40%; }
.bf-skel-line:last-child { margin-bottom: 0; }
@keyframes bfShimmer {
  0%   { background-position: 100% 50%; }
  100% { background-position: 0 50%; }
}

/* 逐版渐显：出图/生成过程中已完成的版本 */
.bf-genone {
  border: 1px solid var(--line, #ececec);
  border-radius: 12px;
  padding: 12px 14px;
  margin-bottom: 10px;
  background: var(--card, #fff);
  animation: bfPop .28s cubic-bezier(.22, .61, .36, 1) both;
}
.bf-typing {
  font-size: 13px;
  line-height: 1.7;
  color: var(--text-2, #6b6f76);
  white-space: pre-wrap;
  border-left: 2px solid var(--brand, #ff2e4d);
  padding-left: 10px;
}
@keyframes bfPop {
  from { opacity: 0; transform: translateY(6px); }
  to   { opacity: 1; transform: none; }
}

/* ---------- P1-5 信心分 / 主推 / 并排对比 ---------- */
.bf-starbox { display: inline-flex; align-items: center; gap: 6px; }
.bf-star, .bf-vstar .bf-star {
  font-size: 12px;
  color: #8A5A00;
  white-space: nowrap;
}
.bf-star b { font-weight: 600; margin: 0 2px; }
.bf-star.s3 { color: #8A5A00; }
.bf-star.s2 { color: var(--text-muted, #5B5457); }
.bf-star.s1 { color: #6E6869; }
.bf-vstar { display: block; margin-top: 2px; }
.bf-vstar .bf-star { font-size: 12px; }
.bf-main-dot {
  display: inline-block;
  margin-left: 6px;
  padding: 1px 6px;
  border-radius: 999px;
  font-size: 12px;
  color: #fff;
  background: var(--brand, #ff2e4d);
}

.bf-cmpsel {
  margin-left: 8px;
  padding: 2px 6px;
  font-size: 12px;
  border: 1px solid var(--line, #ececec);
  border-radius: 8px;
  background: var(--card, #fff);
  color: var(--text, #1f2126);
}
.bf-diff { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-top: 10px; }
.bf-diffbox {
  border: 1px solid var(--line, #ececec);
  border-radius: 10px;
  padding: 10px 12px;
  font-size: 13px;
  line-height: 1.8;
  max-height: 320px;
  overflow: auto;
  background: var(--card, #fff);
}
.bf-diffbox ins {
  text-decoration: none;
  background: rgba(255, 46, 77, .1);
  border-bottom: 1px solid rgba(255, 46, 77, .45);
}
@media (max-width: 768px) {
  .bf-diff { grid-template-columns: 1fr; }
}

/* ---------- P1-6 出图缩略图网格 ---------- */
.bf-imgs {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(132px, 1fr));
  gap: 10px;
}
.bf-img {
  position: relative;
  border: 1px solid var(--line, #ececec);
  border-radius: 12px;
  overflow: hidden;
  background: var(--card, #fff);
  cursor: grab;
  transition: transform .18s cubic-bezier(.22, .61, .36, 1), box-shadow .18s;
}
.bf-img:hover { transform: translateY(-2px); box-shadow: 0 6px 18px rgba(0, 0, 0, .08); }
.bf-img:active { cursor: grabbing; }
.bf-img img { display: block; width: 100%; height: 118px; object-fit: cover; }
.bf-img-ph {
  height: 118px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: repeating-linear-gradient(45deg, #f7f8fa, #f7f8fa 8px, #f1f2f5 8px, #f1f2f5 16px);
  color: #6E6869;
  font-size: 20px;
  font-weight: 600;
}
.bf-img.pending { border-style: dashed; }
.bf-img-bar {
  display: flex;
  align-items: center;
  gap: 4px;
  padding: 7px 8px;
  border-top: 1px solid var(--line, #ececec);
  font-size: 12px;
  flex-wrap: wrap;   /* 132px 窄格里 4 个胶囊装不下一行，换行也要保持对齐 */
}
/* ===== 图片操作按钮统一（2026-10-19）=====
 * 园园：重绘、删除、封面的按钮样式都不统一。
 * 原来是三种形态：封面=红色 999px 胶囊 span（无边框、padding 1px 6px），
 * 重绘/删除=无 class 的 button（6px 圆角、padding 2px 6px），下载=无 class 的 a。
 * 现在统一成一个基类 .bf-imact：同高 26px / 同圆角 999px / 同字号 12px / 同边框 /
 * 同过渡。差异只靠两个修饰类表达语义：
 *   .is-cover  —— 当前封面（实心红，是状态不是操作）
 *   .is-danger —— 删除（红字，hover 红底）
 * 三态（hover / active / :focus-visible）齐全，键盘可达。 */
.bf-img-bar .bf-imact {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  height: 26px;
  /* min-height 必须显式归零：全站 button 基础样式里有 min-height:44px，
     只写 height:26px 会被它顶成 44px（复测 2026-10-19：span 26px / button 44px 不齐），
     这正是「重绘/删除/封面按钮样式不统一」的另一半根因。 */
  min-height: 0;
  box-sizing: border-box;
  padding: 0 9px;
  border: 1px solid var(--line, #ececec);
  border-radius: 999px;
  background: transparent;
  font: inherit;
  font-size: 12px;
  line-height: 1;
  color: var(--text-2, #6b6f76);
  cursor: pointer;
  text-decoration: none;
  white-space: nowrap;
  transition: background .16s, color .16s, border-color .16s;
}
.bf-img-bar .bf-imact:hover {
  background: rgba(255, 46, 77, .07);
  border-color: rgba(216, 27, 55, .28);
  color: var(--brand, #D81B37);
}
.bf-img-bar .bf-imact:active { transform: scale(.96); }
.bf-img-bar .bf-imact:focus-visible {
  outline: 2px solid var(--brand, #D81B37);
  outline-offset: 1px;
}
.bf-img-bar .bf-imact.is-cover {
  background: var(--xhs-red-solid, #E01230);
  border-color: var(--xhs-red-solid, #E01230);
  color: #fff;
  cursor: default;
}
.bf-img-bar .bf-imact.is-cover:hover {
  background: var(--xhs-red-solid, #E01230);
  color: #fff;
}
.bf-img-bar .bf-imact.is-danger { color: #C0392B; }
.bf-img-bar .bf-imact.is-danger:hover {
  background: rgba(192, 57, 43, .09);
  border-color: rgba(192, 57, 43, .3);
  color: #C0392B;
}
/* 旧类名保留（历史 DOM / 缓存页面里的 .bf-cover），样式跟新基类对齐 */
.bf-cover {
  display: inline-flex; align-items: center; justify-content: center;
  height: 26px; box-sizing: border-box; padding: 0 9px;
  border: 1px solid var(--xhs-red-solid, #E01230);
  border-radius: 999px;
  background: var(--xhs-red-solid, #E01230);
  color: #fff;
  font-size: 12px;
  white-space: nowrap;
}

/* ---------- P1-7 历史抽屉 ---------- */
.bf-his-tools { display: flex; gap: 8px; align-items: center; margin-top: 10px; flex-wrap: wrap; }
.bf-his-tools .bf-input { flex: 1 1 180px; min-width: 140px; }
.bf-his-sel { flex: 0 0 auto; width: 120px; }
.bf-his { display: flex; align-items: center; gap: 8px; }
.bf-his.on { background: rgba(255, 46, 77, .06); border-radius: 10px; }
.bf-his-cb { display: flex; align-items: center; padding-left: 2px; }
.bf-his-main { flex: 1 1 auto; min-width: 0; }
.bf-his-main b { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* ---------- P1-8 对话式补充 ---------- */
.bf-chat {
  margin-top: 12px;
  border: 1px solid var(--line, #ececec);
  border-radius: 12px;
  background: var(--card, #fff);
  padding: 10px 12px;
}
.bf-chat-log { max-height: 260px; overflow: auto; display: flex; flex-direction: column; gap: 8px; }
.bf-chat-tip { font-size: 12px; color: var(--text-2, #6b6f76); line-height: 1.7; }
.bf-bubble {
  max-width: 84%;
  padding: 8px 12px;
  border-radius: 12px;
  font-size: 13px;
  line-height: 1.7;
  word-break: break-word;
  animation: bfPop .22s cubic-bezier(.22, .61, .36, 1) both;
}
.bf-bubble.me {
  align-self: flex-end;
  background: var(--xhs-red-solid, #E01230);
  color: #fff;
  border-bottom-right-radius: 4px;
}
.bf-bubble.ai {
  align-self: flex-start;
  background: #f4f5f7;
  color: var(--text, #1f2126);
  border-bottom-left-radius: 4px;
}
.bf-chat-in { display: flex; gap: 8px; margin-top: 10px; }
.bf-chat-in .bf-input { flex: 1 1 auto; }

/* ---------- P1-9 任务悬浮球 ---------- */
.bf-ball {
  position: fixed;
  right: 20px;
  /* 2026-10-09：薯薯占住 bottom 8~124，原来 bottom:96 正好落在它身上（z 900 < 9000 被盖住）。
     抬到 132 完全离开薯薯的方块范围。 */
  bottom: 132px;
  z-index: var(--z-cursor, 900);
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 8px;
}
.bf-ball.hidden { display: none; }
.bf-ball-btn {
  width: 48px;
  height: 48px;
  border-radius: 50%;
  border: none;
  background: var(--xhs-red-solid, #E01230);
  color: #fff;
  font-size: 18px;
  cursor: pointer;
  box-shadow: 0 6px 20px rgba(255, 46, 77, .35);
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 2px;
  transition: transform .18s cubic-bezier(.22, .61, .36, 1);
}
.bf-ball-btn:hover { transform: scale(1.06); }
.bf-ball-btn:active { transform: scale(.94); }
.bf-ball-ic { animation: bfSpin 2.4s linear infinite; display: inline-block; }
@keyframes bfSpin { to { transform: rotate(360deg); } }
.bf-ball-n { font-size: 12px; font-weight: 600; }
.bf-ball-panel { display: none; }
.bf-ball.open .bf-ball-panel {
  display: block;
  width: 280px;
  max-height: 340px;
  overflow: auto;
  background: var(--card, #fff);
  border: 1px solid var(--line, #ececec);
  border-radius: 14px;
  padding: 10px 12px;
  box-shadow: 0 12px 32px rgba(0, 0, 0, .12);
  animation: bfPop .2s cubic-bezier(.22, .61, .36, 1) both;
}
.bf-ball-empty { font-size: 12px; color: var(--text-2, #6b6f76); padding: 6px 2px; }
.bf-ball-item { padding: 8px 0; border-bottom: 1px dashed var(--line, #ececec); }
.bf-ball-item:last-child { border-bottom: none; }
.bf-ball-t { font-size: 13px; font-weight: 600; display: flex; justify-content: space-between; gap: 8px; }
.bf-ball-s { font-weight: 400; font-size: 12px; color: var(--text-2, #6b6f76); }
.bf-ball-bar {
  height: 6px;
  border-radius: 999px;
  background: #f0f1f4;
  overflow: hidden;
  margin: 6px 0;
}
.bf-ball-bar i {
  display: block;
  height: 100%;
  background: var(--brand, #ff2e4d);
  border-radius: 999px;
  transition: width .4s cubic-bezier(.22, .61, .36, 1);
}
.bf-ball-act { display: flex; align-items: center; justify-content: space-between; }
@media (max-width: 768px) {
  .bf-ball { right: 12px; bottom: 132px; }
  .bf-ball.open .bf-ball-panel { width: min(280px, calc(100vw - 24px)); }
}

/* ---------- P2-12 快捷键面板 ---------- */
.bf-keys {
  position: fixed;
  inset: 0;
  z-index: calc(var(--z-widget, 1200) - 200);
  background: rgba(0, 0, 0, .35);
  display: flex;
  align-items: center;
  justify-content: center;
  animation: bfFade .18s ease both;
}
@keyframes bfFade { from { opacity: 0; } to { opacity: 1; } }
.bf-keys-card {
  width: min(420px, calc(100vw - 32px));
  background: var(--card, #fff);
  border-radius: 16px;
  padding: 18px 20px;
  box-shadow: 0 20px 50px rgba(0, 0, 0, .2);
  animation: bfPop .2s cubic-bezier(.22, .61, .36, 1) both;
}
.bf-keys-card .bf-bt { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; }

/* ---------- P2-10 移动端 ---------- */
.bf-mobile-only { display: none; }
@media (max-width: 768px) {
  .bf-mobile-only { display: inline-flex; }
  .bf-imgs { grid-template-columns: repeat(2, 1fr); }
  .bf-his-tools .bf-input { flex: 1 1 100%; }
  .bf-his-sel { width: 100%; }
  .bf-chat-log { max-height: 200px; }
}

/* ---------- P2-12 深色模式（跟随全站 data-theme） ---------- */
[data-theme="dark"] .bf-skel { border-color: #3a3337; background: #241f22; }
[data-theme="dark"] .bf-skel-line { background-image: linear-gradient(90deg, #2c2629 25%, #362f33 37%, #2c2629 63%); }
[data-theme="dark"] .bf-genone { border-color: #3a3337; background: #241f22; }
[data-theme="dark"] .bf-typing { color: #b3aab0; }
[data-theme="dark"] .bf-diffbox { border-color: #3a3337; background: #241f22; color: #e8e3e6; }
[data-theme="dark"] .bf-diffbox ins { background: rgba(255, 46, 77, .18); }
[data-theme="dark"] .bf-img { border-color: #3a3337; background: #241f22; }
[data-theme="dark"] .bf-img-bar { border-color: #3a3337; }
[data-theme="dark"] .bf-img-bar button,
[data-theme="dark"] .bf-img-bar a { border-color: #453c40; color: #b3aab0; }
[data-theme="dark"] .bf-img-ph { background: repeating-linear-gradient(45deg, #2c2629, #2c2629 8px, #332c30 8px, #332c30 16px); color: #6f676c; }
[data-theme="dark"] .bf-chat { border-color: #3a3337; background: #241f22; }
[data-theme="dark"] .bf-bubble.ai { background: #2c2629; color: #e8e3e6; }
[data-theme="dark"] .bf-chat-tip { color: #b3aab0; }
[data-theme="dark"] .bf-ball-panel { border-color: #3a3337; background: #241f22; }
[data-theme="dark"] .bf-ball-bar { background: #332c30; }
[data-theme="dark"] .bf-keys-card { background: #241f22; color: #e8e3e6; }
[data-theme="dark"] .bf-cmpsel { border-color: #453c40; background: #2c2629; color: #e8e3e6; }
[data-theme="dark"] .bf-his.on { background: rgba(255, 46, 77, .14); }

/* ---------- 尊重系统的「减少动效」 ---------- */
@media (prefers-reduced-motion: reduce) {
  .bf-skel-line, .bf-ball-ic { animation: none; }
  .bf-genone, .bf-bubble, .bf-ball-panel, .bf-keys, .bf-keys-card { animation: none; }
  .bf-img:hover, .bf-ball-btn:hover { transform: none; }
}

/* ============================================================
   阶段二（2026-10-09）：顶栏草稿按钮 / 自动保存提示 / 清除确认弹窗
   ============================================================ */
.bf-head-actions {
  display: flex;
  align-items: center;
  gap: 10px;
  flex: 0 0 auto;
  position: relative;
}
.bf-draft-hint {
  position: absolute;
  right: 0;
  top: 100%;
  margin-top: 6px;
  font-size: 12px;
  color: #6B7078;
  white-space: nowrap;
  opacity: 0;
  transition: opacity .25s ease;
  pointer-events: none;
}
.bf-draft-hint:not(:empty) { opacity: 1; }
@media (max-width: 768px) {
  /* sec-head 是 flex nowrap：按钮组 width:100% 会和标题挤同一行把布局撑爆
     （2026-10-09 实测 375 视口被撑到 430 出横向滚动），必须允许换行 */
  #page-brief .sec-head { flex-wrap: wrap; }
  .bf-head-actions { width: 100%; margin-top: 10px; }
  .bf-draft-hint { position: static; margin-top: 6px; }
}

/* 保存并清空：二次确认弹窗（不用 window.confirm，样式与站点一致） */
.bf-modal {
  position: fixed;
  inset: 0;
  z-index: var(--z-widget, 1200);
  display: flex;
  align-items: center;
  justify-content: center;
  background: rgba(17, 17, 17, .42);
  animation: bfFade .18s ease;
}
.bf-modal-card {
  width: min(400px, calc(100vw - 48px));
  background: #fff;
  border-radius: 16px;
  padding: 22px;
  box-shadow: 0 24px 64px rgba(17, 17, 17, .26);
  animation: bfModalIn .22s cubic-bezier(.16, 1, .3, 1);
}
@keyframes bfModalIn {
  from { opacity: 0; transform: translateY(14px) scale(.97); }
  to   { opacity: 1; transform: none; }
}
.bf-modal-t { font-size: 17px; font-weight: 800; color: #1F1B1D; }
.bf-modal-d { margin: 10px 0 18px; font-size: 13px; line-height: 1.7; color: #6B7078; }
.bf-modal-btns { display: flex; justify-content: flex-end; gap: 10px; }
[data-theme="dark"] .bf-modal-card { background: #1F1D1F; }
[data-theme="dark"] .bf-modal-t { color: #F0F0F0; }
[data-theme="dark"] .bf-modal-d { color: #A8ADB5; }
@media (prefers-reduced-motion: reduce) {
  .bf-modal, .bf-modal-card { animation: none; }
}

/* ---------- 本页兜底 toast（2026-10-09：/app 下无全局 toast，以前只 console.log） ---------- */
#bfToastBox {
  position: fixed;
  left: 50%;
  bottom: 32px;
  transform: translateX(-50%);
  z-index: var(--z-sheet-mask-top, 1300);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  pointer-events: none;
}
.bf-toast {
  max-width: min(78vw, 420px);
  padding: 10px 18px;
  border-radius: 999px;
  background: rgba(31, 27, 29, .92);
  color: #fff;
  font-size: 13px;
  line-height: 1.5;
  text-align: center;
  box-shadow: 0 10px 28px rgba(17, 17, 17, .28);
  opacity: 0;
  transform: translateY(10px);
  transition: opacity .28s ease, transform .28s cubic-bezier(.16, 1, .3, 1);
}
.bf-toast.on { opacity: 1; transform: none; }
@media (prefers-reduced-motion: reduce) {
  .bf-toast { transition: opacity .2s ease; transform: none; }
}

/* ============================================================
   差异化展示（2026-10-09）：版本卡差异化标签 / 星级徽章 / 标题差异高亮
   只作用于 #page-brief
   ============================================================ */
.bf-diffcard {
  margin-bottom: 12px;
  padding: 12px 14px;
  border: 1px solid rgba(255, 36, 66, .16);
  border-radius: 12px;
  background: linear-gradient(180deg, #FFF8F9, #FFFDFD);
}
.bf-diffhead {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  margin-bottom: 8px;
}
.bf-diffhead b { font-size: 13px; color: #1F1B1D; font-weight: 700; }
.bf-dyntag {
  font-size: 12px;
  font-weight: 600;
  color: var(--xhs-red-text, #D81B37);
  background: #FFEFF2;
  border-radius: 999px;
  padding: 2px 9px;
  cursor: help;
}
.bf-db {
  margin-left: auto;
  font-size: 12px;
  font-weight: 600;
  color: #8A5A00;
  background: rgba(255, 176, 32, .12);
  border-radius: 999px;
  padding: 2px 10px;
  cursor: help;
  white-space: nowrap;
}
.bf-db.bad { color: var(--xhs-red-text, #D81B37); background: #FFEFF2; }
.bf-diffkv { gap: 4px 10px; font-size: 12px; }
.bf-diffkv > div:nth-child(odd) { color: var(--text-muted, #5B5457); }
.bf-diffkv > div:nth-child(even) { color: #4A4348; }
/* 并排对比：标题差异 */
.bf-diff.bf-difftitle { margin-bottom: 10px; }
.bf-difftitle .bf-diffbox { min-height: 34px; font-size: 13px; line-height: 1.7; }
.bf-dw {
  background: #FFE9EC;
  color: var(--xhs-red-text, #D81B37);
  text-decoration: none;
  border-radius: 3px;
  padding: 0 1px;
}
.bf-dtag {
  display: inline-block;
  margin-left: 6px;
  font-size: 12px;
  border-radius: 999px;
  padding: 1px 8px;
  white-space: nowrap;
}
.bf-dtag.ok { color: #137A52; background: rgba(59, 162, 114, .12); }
.bf-dtag.bad { color: var(--xhs-red-text, #D81B37); background: #FFEFF2; }
[data-theme="dark"] .bf-diffcard {
  background: linear-gradient(180deg, #241F21, #1F1C1E);
  border-color: rgba(255, 90, 116, .28);
}
[data-theme="dark"] .bf-diffhead b { color: #F0F0F0; }
[data-theme="dark"] .bf-diffkv > div:nth-child(even) { color: #E4E4E6; }
[data-theme="dark"] .bf-dw { background: rgba(255, 90, 116, .22); color: #FF8A9B; }

/* ===================== P0-1 错误提示条（2026-10-10） =====================
 * 只作用于 Brief 转笔记页面内部，不污染全局。
 * 失败时给「人话原因 + 一键恢复」，不再只丢一句纯文本让用户自己想办法。 */
#page-brief .bf-errbar {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  margin: 0 0 8px; padding: 9px 12px; border-radius: 10px;
  background: #FFF1F1; border: 1px solid rgba(226, 75, 74, .3);
  color: #A32D2D; font-size: 13px; line-height: 1.55;
}
#page-brief .bf-errbar-msg { flex: 1 1 220px; }
#page-brief .bf-errbar-btn {
  flex: none; border: 1px solid rgba(226, 75, 74, .45); background: #fff; color: #A32D2D;
  border-radius: 8px; padding: 5px 12px; font-size: 12px; font-weight: 600; cursor: pointer;
  transition: transform .18s cubic-bezier(.22, 1, .36, 1), background .18s;
}
#page-brief .bf-errbar-btn:hover { background: #ffe9e9; }
#page-brief .bf-errbar-btn:active { transform: scale(.94); }
#page-brief .bf-errbar-btn:focus-visible { outline: 2px solid #E24B4A; outline-offset: 2px; }
@media (prefers-reduced-motion: reduce) {
  #page-brief .bf-errbar-btn { transition: none; }
  #page-brief .bf-errbar-btn:active { transform: none; }
}

/* ---------- 发给品牌方：分享文案弹窗（2026-10-11） ----------
   比「清除并保存」弹窗高得多（品牌方名称 + 可编辑文案 + 按钮），所以单独收口高度：
   卡片限高、文案区自己滚，按钮永远留在可视区里，窄屏也不会顶出屏幕。 */
.bf-share-card {
  width: min(480px, calc(100vw - 32px));
  max-height: calc(100vh - 40px);
  max-height: calc(100dvh - 40px);
  display: flex;
  flex-direction: column;
  padding: 20px;
}
.bf-share-card .bf-modal-d { margin: 8px 0 4px; }
.bf-share-lb {
  display: block; font-size: 12.5px; font-weight: 600; color: #3A3F46;
  margin: 14px 0 6px;
}
.bf-share-hint { margin: 6px 0 0; font-size: 12px; line-height: 1.6; color: var(--text-muted, #5B5457); }
.bf-share-ta {
  flex: 1 1 auto;
  min-height: 132px;
  max-height: 40vh;
  margin-top: 0;
  font-size: 13px;
}
.bf-share-card .bf-modal-btns { flex: 0 0 auto; margin-top: 16px; }
[data-theme="dark"] .bf-share-lb { color: #D8D3D6; }
[data-theme="dark"] .bf-share-hint { color: #8A8490; }
[data-theme="dark"] .bf-share-card .bf-input,
[data-theme="dark"] .bf-share-ta { background: #2A272A; color: #E8E3E6; border-color: #453C40; }
@media (max-width: 640px) {
  .bf-share-card { width: calc(100vw - 32px); padding: 16px; }
  .bf-share-ta { max-height: 34vh; }
}
@media (prefers-reduced-motion: reduce) {
  .bf-share-card { animation: none; }
}

/* ===================== 版本号悬停详情（2026-10-11） =====================
 * 原生 title 有约 1 秒延迟，且鼠标落在 flex 间隙上就整个消失，
 * 用户会觉得「时灵时不灵」。改成自绘气泡：
 *   - 触发区用 padding 撑开，不再只有文字那几个像素能 hover；
 *   - position:fixed —— 版本卡外层 .card 是 overflow:hidden，absolute 会被裁掉；
 *   - z-index 拉到最上层，不被任何浮层遮挡；
 *   - 80ms 出现、离开立刻收，位置由 JS 现算并做边界回收。 */
#page-brief .bf-verhover {
  position: relative;
  display: inline-flex;
  align-items: center;
  padding: 3px 6px;
  margin: -3px -6px;
  border-radius: 8px;
  cursor: help;
  outline: none;
}
#page-brief .bf-verhover:hover,
#page-brief .bf-verhover:focus-visible { background: rgba(255, 36, 66, .07); }
#page-brief .bf-verhover::after {
  content: "";
  width: 0; height: 0;
  border-left: 4px solid transparent;
  border-right: 4px solid transparent;
  border-top: 4px solid rgba(31, 27, 29, .45);
  margin-left: 5px;
  align-self: center;
}
#page-brief .bf-vtip {
  position: fixed;
  z-index: var(--z-critical-top, 2147483000);
  left: 0; top: 0;
  min-width: 220px;
  max-width: 320px;
  padding: 10px 12px;
  border-radius: 10px;
  background: rgba(31, 27, 29, .96);
  color: #fff;
  font-size: 12px;
  line-height: 1.6;
  box-shadow: 0 10px 28px rgba(0, 0, 0, .26);
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transition: opacity .12s ease;
  white-space: normal;
}
#page-brief .bf-vtip.on { opacity: 1; visibility: visible; }
#page-brief .bf-vtip b {
  display: block;
  margin-bottom: 4px;
  font-size: 13px;
  color: #fff;
}
#page-brief .bf-vtip .tv-r { color: rgba(255, 255, 255, .82); }
#page-brief .bf-vtip .tv-r + .tv-r { margin-top: 2px; }
[data-theme="dark"] #page-brief .bf-verhover::after { border-top-color: rgba(255, 255, 255, .5); }

/* 结合热点开关（2026-10-11） */
#page-brief .bf-hot-row{display:flex;flex-wrap:wrap;gap:8px;margin:8px 0 2px;}
#page-brief .bf-hot{display:inline-flex;align-items:center;gap:6px;cursor:pointer;font-size:13px;color: var(--ink,#2b2b2b);user-select:none;}
#page-brief .bf-hot input[type=checkbox]{width:15px;height:15px;cursor:pointer;accent-color: var(--xhs-red-text, #D81B37);}
#page-brief .bf-hot-tip{font-size:12px;color: #6E6869;font-weight:400;}

/* ===== 发布前自检（2026-10-12 新增）=====
   只回答「这篇现在能不能发」。全部通过收成一行绿字，有问题才展开，
   不做成天天弹的红条。独立的 bf-pc 前缀，不复用 .bf-comp（那是合规专用，
   语义不同，复用会让两边的样式改动互相牵连）。 */
#page-brief .bf-pc {
  margin-top: 12px; border: 1px solid rgba(0,0,0,.09); border-radius: 10px;
  background: #fff; overflow: hidden;
}
#page-brief .bf-pc.ok   { border-color: rgba(29,158,117,.26); background: #F6FCF9; }
#page-brief .bf-pc.warn { border-color: rgba(214,158,46,.32); background: #FFFDF5; }
#page-brief .bf-pc.bad  { border-color: rgba(226,75,74,.30); background: #FFF8F8; }
#page-brief .bf-pc-hd {
  display: flex; align-items: center; gap: 8px;
  padding: 10px 12px; cursor: pointer; user-select: none;
}
#page-brief .bf-pc-hd b { font-size: 13px; font-weight: 600; color: var(--ink, #2b2b2b); }
#page-brief .bf-pc-chev { font-size: 13px; color: #6E6869; transition: transform .18s ease; }
#page-brief .bf-pc.open .bf-pc-chev { transform: rotate(90deg); }
#page-brief .bf-pc-sum { margin-left: auto; font-size: 12px; font-weight: 600; }
#page-brief .bf-pc.ok .bf-pc-sum   { color: #0F6E56; }
#page-brief .bf-pc.warn .bf-pc-sum { color: #8A5A00; }
#page-brief .bf-pc.bad .bf-pc-sum  { color: #A32D2D; }
#page-brief .bf-pc-bd { display: none; padding: 2px 12px 8px; border-top: 1px dashed rgba(0,0,0,.09); }
#page-brief .bf-pc.open .bf-pc-bd { display: block; }
#page-brief .bf-pc-ul { list-style: none; margin: 0; padding: 0; }
#page-brief .bf-pc-li {
  display: flex; gap: 9px; padding: 8px 0;
  border-bottom: 1px solid rgba(0,0,0,.05);
  font-size: 12.5px; line-height: 1.65;
}
#page-brief .bf-pc-li:last-child { border-bottom: 0; }
#page-brief .bf-pc-ic { flex: 0 0 14px; text-align: center; font-weight: 700; font-size: 12px; }
#page-brief .bf-pc-li.ok .bf-pc-ic   { color: #137A52; }
#page-brief .bf-pc-li.warn .bf-pc-ic { color: #8A5A00; }
#page-brief .bf-pc-li.bad .bf-pc-ic  { color: #D81B37; }
#page-brief .bf-pc-tx { flex: 1; min-width: 0; color: #5a5a5a; word-break: break-word; }
#page-brief .bf-pc-tx b { display: block; font-weight: 600; color: var(--ink, #2b2b2b); }
#page-brief .bf-pc-li.bad .bf-pc-tx b { color: #A32D2D; }
#page-brief .bf-pc-tx span { display: block; margin-top: 2px; color: #6E6869; }
#page-brief .bf-pc-li.bad .bf-pc-tx span { color: #9c4a4a; }
[data-theme="dark"] #page-brief .bf-pc { background: rgba(255,255,255,.03); border-color: rgba(255,255,255,.12); }
[data-theme="dark"] #page-brief .bf-pc.ok   { background: rgba(29,158,117,.10); border-color: rgba(29,158,117,.30); }
[data-theme="dark"] #page-brief .bf-pc.warn { background: rgba(214,158,46,.10); border-color: rgba(214,158,46,.32); }
[data-theme="dark"] #page-brief .bf-pc.bad  { background: rgba(226,75,74,.10);  border-color: rgba(226,75,74,.32); }
[data-theme="dark"] #page-brief .bf-pc-hd b { color: rgba(255,255,255,.88); }
[data-theme="dark"] #page-brief .bf-pc-tx { color: rgba(255,255,255,.66); }
[data-theme="dark"] #page-brief .bf-pc-tx b { color: rgba(255,255,255,.90); }
[data-theme="dark"] #page-brief .bf-pc-tx span { color: rgba(255,255,255,.52); }
[data-theme="dark"] #page-brief .bf-pc-li.bad .bf-pc-tx b { color: #F5A3A3; }
[data-theme="dark"] #page-brief .bf-pc-li.bad .bf-pc-tx span { color: rgba(245,163,163,.78); }
[data-theme="dark"] #page-brief .bf-pc-bd { border-top-color: rgba(255,255,255,.10); }
[data-theme="dark"] #page-brief .bf-pc-li { border-bottom-color: rgba(255,255,255,.07); }

/* ==================== P1-#355 AIGC 声明位（2026-10-15） ====================
   AI 生成内容标识：结果卡底部一行浅色小字。cubic-bezier 淡入上浮，
   低调不抢焦点（与站内 Galaxy / uiverse.io 动效节奏一致），无 emoji。 */
/* 2026-10-17 fe-brief：AIGC 声明对比度 2.55:1 -> 4.83:1（WCAG AA 需 >=4.5:1）。
   配色与动画两处同时收口：
   ① 色值 #767076 -> #6B7280（白底实测 4.83:1）
   ② 入场动画终点由 opacity .92 改为 1 —— .92 会把 4.83 稀释回 4.13，白改。
   视觉层级仍然是最弱的一档（12px / 居中 / 顶部分隔线 / 无强调色），不抢正文。 */
#page-brief .bf-aigc {
  margin-top: 14px;
  padding-top: 10px;
  border-top: 1px solid rgba(23, 26, 31, .07);
  font-size: 12px;
  line-height: 1.6;
  letter-spacing: .02em;
  color: var(--text-muted, #5B5457);
  text-align: center;
  user-select: none;
  opacity: 0;
  transform: translateY(4px);
  animation: bf-aigc-in .5s cubic-bezier(.16, 1, .3, 1) .12s forwards;
}
@keyframes bf-aigc-in { to { opacity: 1; transform: none; } }
[data-theme="dark"] #page-brief .bf-aigc {
  color: rgba(255, 255, 255, .58);
  border-top-color: rgba(255, 255, 255, .10);
}
@media (prefers-reduced-motion: reduce) {
  #page-brief .bf-aigc { animation: none; opacity: 1; transform: none; }
}


/* ==================== 2026-10-16 前端遗留批（任务 #385） ==================== */

/* 历史抽屉：挂载点已从 .bf-col-left 移到 .bf-wrap 的直接子级，
   不再被 .bf-cols.bf-nol .bf-col-left{display:none} 连带藏掉（原 bug：无左栏态下
   点「历史记录」只出遮罩、抽屉一片空白）。定位仍相对 .bf-wrap（brief-preview.css
   的 .bf-wrap{position:relative}），absolute 已脱离文档流，不会挤走或顶偏内容。 */
/* 收起态显式收口：不拦任何点击（抽屉收起时 innerHTML 已被清空，
   不额外加 visibility:hidden —— 那会让 opacity 淡出动画放不完就整块消失）。 */
#bfHistory { pointer-events: none; }
#bfHistory[data-open="1"] { pointer-events: auto; }

/* 无左栏态（.bf-nol）下中间内容居中，抽屉照旧浮在 .bf-wrap 左上角并带遮罩；
   打开时盖住内容是模态预期行为，absolute 已脱离文档流，不会把内容挤走或顶偏。 */

/* AIGC 中性标识：版本卡角落，小号 muted，不抢焦点 */
.bf-vaigc {
  display: inline-block;
  margin-left: 6px;
  padding: 0 5px;
  font-size: 12px;
  line-height: 16px;
  color: var(--text-muted, #5B5457);
  border: 1px solid rgba(23, 26, 31, .10);
  border-radius: 4px;
  vertical-align: 1px;
  white-space: nowrap;
}
[data-theme="dark"] .bf-vaigc {
  color: #767076;
  border-color: rgba(255, 255, 255, .16);
}

/* ==================== 2026-10-17 fe-brief P0 修复批 ====================
   作用域：新规则一律带 #page-brief 前缀。.bf-* 前缀全站只出现在本页；
   .xhs-copy 会被 share.html 复用，所以只做「增强」不改语义。
   缓动统一 cubic-bezier(.16,1,.3,1)（= 站内 --ease-out），并全部尊重 prefers-reduced-motion。 */

/* ---------- 视觉-2 生成中进度条：从内联样式抽到 CSS ----------
   原来是 height:4px + 内联 #F0F1F3 + transition:width .4s ease，
   深色模式下浅灰轨道会浮在深底上，4px 在截图里几乎看不见。 */
#page-brief .bf-genhead { margin-top: 12px; }
#page-brief .bf-genrow {
  display: flex; align-items: baseline; justify-content: space-between; gap: 12px;
}
#page-brief .bf-genstage {
  font-size: 14px; font-weight: 600; line-height: 1.4; color: #1F1B1D;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
#page-brief .bf-genpct {
  flex: none; font-size: 16px; font-weight: 700; color: var(--xhs-red-text, #D81B37);
  font-variant-numeric: tabular-nums;
}
#page-brief .bf-genbar {
  height: 10px; border-radius: 999px; background: #F1F2F4;
  overflow: hidden; margin-top: 8px;
}
#page-brief .bf-genbar-in {
  display: block; height: 100%; width: 6%; border-radius: 999px;
  background: linear-gradient(90deg, #FF2442, #FF6B80);
  transition: width .4s cubic-bezier(.16, 1, .3, 1);
}
/* 四段管线：跟着真实阶段推进。
   以前 MODEL_FLOW 每 1.5s 全量重绘却从不点亮，反而强化「卡住了」。 */
#page-brief .bf-genpipe { display: flex; gap: 4px; margin-top: 8px; }
#page-brief .bf-genpipe i {
  flex: 1; height: 4px; border-radius: 999px; background: #EDE3E6;
  transition: background .34s cubic-bezier(.16, 1, .3, 1);
}
#page-brief .bf-genpipe i.done { background: #FFC2CC; }
#page-brief .bf-genpipe i.on { background: linear-gradient(90deg, #FF2442, #FF6B80); }
#page-brief .bf-genmeta { margin-top: 6px; font-size: 12.5px; color: var(--text-muted, #5B5457); }
[data-theme="dark"] #page-brief .bf-genstage { color: rgba(255, 255, 255, .88); }
[data-theme="dark"] #page-brief .bf-genbar { background: rgba(255, 255, 255, .12); }
[data-theme="dark"] #page-brief .bf-genpipe i { background: rgba(255, 255, 255, .12); }
[data-theme="dark"] #page-brief .bf-genpipe i.done { background: rgba(255, 36, 66, .38); }
[data-theme="dark"] #page-brief .bf-genmeta { color: rgba(255, 255, 255, .62); }
@media (prefers-reduced-motion: reduce) {
  #page-brief .bf-genbar-in, #page-brief .bf-genpipe i { transition: none; }
}
/* 视觉补充：页内进度已给全（阶段 + 百分比 + 版数 + 已用秒数），
   左下浮动任务卡（ai-tasks.js 的 .sp-task-dock）会用「68%」撞车。
   只在 brief 生成期间让位，生成结束立刻恢复（类名由 brief-note.js 摘掉）。 */
body.bf-generating .sp-task-dock { display: none !important; }

/* ---------- 视觉-4 生成中左栏骨架 ----------
   原来 vitem=0 一直到 110s 完成，完成后凭空长出一栏 264px + 中栏 1112->676。
   生成一开始就渲染 N 个占位项，左栏宽度从第一帧就是终值。 */
#page-brief .bf-vitem.bf-vskel {
  display: flex; flex-direction: column; gap: 7px;
  padding: 10px; min-height: 72px; cursor: default; border-color: transparent;
}
#page-brief .bf-vitem.bf-vskel:hover { background: transparent; }
#page-brief .bf-vskel-l {
  display: block; height: 10px; border-radius: 999px;
  background: linear-gradient(90deg, #F2F3F5 25%, #E9EBEF 37%, #F2F3F5 63%);
  background-size: 400% 100%;
  animation: bf-vskel 1.4s ease-in-out infinite;
}
#page-brief .bf-vskel-l.w60 { width: 60%; }
#page-brief .bf-vskel-l.w40 { width: 40%; }
@keyframes bf-vskel {
  0% { background-position: 100% 50%; }
  100% { background-position: 0 50%; }
}
[data-theme="dark"] #page-brief .bf-vskel-l {
  background: linear-gradient(90deg, #2A2528 25%, #332D31 37%, #2A2528 63%);
  background-size: 400% 100%;
}
@media (prefers-reduced-motion: reduce) {
  #page-brief .bf-vskel-l { animation: none; }
}

/* ---------- 视觉-3 结果卡：正文置顶，次要板块折叠 ----------
   原来单卡 1086x1976px、10 个板块全展开，正文被埋在中段。 */
#page-brief .bf-doc {
  margin-top: 12px; padding: 14px 16px;
  border: 1px solid #EDE3E6; border-radius: 12px; background: #fff;
}
#page-brief .bf-doc-hd {
  display: flex; align-items: flex-start; justify-content: space-between; gap: 10px;
}
#page-brief .bf-doc-t {
  font-size: 17px; line-height: 1.5; font-weight: 700; color: #1F1B1D;
  word-break: break-word; min-width: 0;
}
#page-brief .bf-doc-b {
  margin-top: 10px; font-size: 15px; line-height: 1.75; color: #333;
  white-space: pre-wrap; word-break: break-word;
}
/* 长正文先折到 8 行：首屏就能读完开头，不把下面的操作按钮顶到 1976px 外 */
#page-brief .bf-doc-b.bf-clamp {
  display: -webkit-box; -webkit-line-clamp: 8; -webkit-box-orient: vertical; overflow: hidden;
}
#page-brief .bf-doc-tags { margin-top: 10px; display: flex; flex-wrap: wrap; gap: 6px; }
#page-brief .bf-doc-tagv { font-size: 13px; color: #13386c; }
#page-brief .bf-doc-more {
  margin-top: 8px; font-size: 13px; color: var(--xhs-red-text, #D81B37);
  background: none; border: 0; padding: 4px 0; cursor: pointer;
}
[data-theme="dark"] #page-brief .bf-doc { background: #241f22; border-color: #3a3337; }
[data-theme="dark"] #page-brief .bf-doc-t { color: rgba(255, 255, 255, .90); }
[data-theme="dark"] #page-brief .bf-doc-b { color: rgba(255, 255, 255, .76); }
[data-theme="dark"] #page-brief .bf-doc-tagv { color: #7FA6D9; }

/* ---------- UX-1 逐块复制的常驻按钮 ----------
   原来只有预览抽屉里 hover 才浮出的胶囊，触屏永远 opacity:0。
   这里给版本卡的标题 / 正文 / 标签各配一个常驻按钮，桌面也能少走 4 步。 */
#page-brief .bf-cpbtn {
  display: inline-flex; align-items: center; gap: 4px; flex: none;
  min-height: 30px; padding: 4px 10px; border-radius: 999px;
  border: 1px solid rgba(23, 26, 31, .10); background: #fff; color: #4A4348;
  font-size: 12px; line-height: 1.2; cursor: pointer; white-space: nowrap;
  transition: background .16s cubic-bezier(.16, 1, .3, 1),
              transform .16s cubic-bezier(.16, 1, .3, 1);
}
#page-brief .bf-cpbtn:hover { background: #FFF1F3; color: var(--xhs-red-text, #D81B37); }
#page-brief .bf-cpbtn:active { transform: scale(.94); }
#page-brief .bf-cpbtn:focus-visible { outline: 2px solid #FF2442; outline-offset: 2px; }
#page-brief .bf-cpbtn.done { background: #3BA272; border-color: #3BA272; color: #fff; }
[data-theme="dark"] #page-brief .bf-cpbtn {
  background: #2a2528; border-color: rgba(255, 255, 255, .14); color: rgba(255, 255, 255, .78);
}
@media (prefers-reduced-motion: reduce) { #page-brief .bf-cpbtn { transition: none; } }

/* 次要板块折叠容器（内容结构 / 真实感 / 互动设计 / 合规 / 图片规划） */
#page-brief .bf-fold {
  margin-top: 12px; border: 1px solid #EDE3E6; border-radius: 12px; background: #FCFCFD;
}
#page-brief .bf-fold > summary {
  list-style: none; cursor: pointer; min-height: 44px;
  padding: 11px 14px; display: flex; align-items: center; gap: 6px;
  font-size: 13px; color: #4A4348;
}
#page-brief .bf-fold > summary::-webkit-details-marker { display: none; }
#page-brief .bf-fold > summary::after {
  content: ''; flex: none; width: 7px; height: 7px; margin-left: auto;
  border-right: 1.6px solid #767076; border-bottom: 1.6px solid #767076;
  transform: rotate(45deg); transition: transform .22s cubic-bezier(.16, 1, .3, 1);
}
#page-brief .bf-fold[open] > summary::after { transform: rotate(-135deg); }
#page-brief .bf-fold > summary:hover { color: var(--xhs-red-text, #D81B37); }
#page-brief .bf-fold > summary:focus-visible { outline: 2px solid #FF2442; outline-offset: -2px; }
#page-brief .bf-fold-bd { padding: 0 14px 14px; }
[data-theme="dark"] #page-brief .bf-fold { background: #241f22; border-color: #3a3337; }
[data-theme="dark"] #page-brief .bf-fold > summary { color: rgba(255, 255, 255, .80); }
@media (prefers-reduced-motion: reduce) {
  #page-brief .bf-fold > summary::after { transition: none; }
}

/* ---------- 后端闸门可见性（gate_held / gate_reason）----------
   两档语义（后端 BriefService.g25GateMark）：
     gate_held = false → 已自动修正并重新出稿（中性黄）
     gate_held = true  → 两次质检都没过（弱警告红，提示换一版）
   字段不存在时 JS 不渲染这个节点，所以这里不需要任何兜底。 */
#page-brief .bf-gate {
  margin-top: 10px; padding: 7px 10px; border-radius: 8px;
  font-size: 12.5px; line-height: 1.5; color: #8A5A00;
  background: #FFF8E8; border: 1px solid rgba(214, 158, 46, .28);
}
#page-brief .bf-gate b { font-weight: 600; }
/* held=true：不能做成大面积红底压住正文，用边框 + 字色表达「建议换一版」 */
#page-brief .bf-gate.held {
  color: #A3243A; background: #FFF3F5; border-color: rgba(216, 27, 55, .28);
}
/* 左栏版本项上的「未过检」标记：切过去之前就知道这一版有问题 */
#page-brief .bf-vgate {
  flex: none; margin-left: 6px; padding: 1px 6px; border-radius: 999px;
  font-size: 11px; line-height: 1.6; color: #A3243A;
  background: #FFEFF2; border: 1px solid rgba(216, 27, 55, .22);
}
[data-theme="dark"] #page-brief .bf-gate {
  color: #E8B96A; background: rgba(214, 158, 46, .10); border-color: rgba(214, 158, 46, .30);
}
[data-theme="dark"] #page-brief .bf-gate.held {
  color: #F4A3B0; background: rgba(216, 27, 55, .14); border-color: rgba(216, 27, 55, .34);
}
[data-theme="dark"] #page-brief .bf-vgate {
  color: #F4A3B0; background: rgba(216, 27, 55, .16); border-color: rgba(216, 27, 55, .34);
}

/* ---------- UX-1 触屏：复制胶囊改常驻 ----------
   只在 (hover:none) 下改呈现；桌面 (hover:hover) 完全保持原来的悬浮胶囊交互。 */
@media (hover: none) {
  /* 只动标题 / 正文 / 标签这三个文本块。
     图片的复制胶囊留在 .xhs-slide 里，改成常驻会撑坏横滑轨道，
     而且移动端写图片进剪贴板支持很差（iOS Safari 基本写不进去），
     触屏用户本来就该走图片网格里的「下载」。 */
  #page-brief .xhs-copy[data-bcopy="title"],
  #page-brief .xhs-copy[data-bcopy="body"],
  #page-brief .xhs-copy[data-bcopy="tags"] {
    position: static; display: inline-flex; align-items: center;
    opacity: 1; transform: none; pointer-events: auto;
    /* 32px 是当初为不撑坏手机壳定的妥协值，低于全站 44px 触控标准
       （QUALITY_STANDARD §3.4）；三个按钮各高 12px，实测手机壳仍在屏内。 */
    margin-top: 6px; min-height: 44px; padding: 7px 12px;
    background: rgba(0, 0, 0, .72); color: #fff;
  }
  #page-brief .xhs-title .xhs-copy { display: flex; width: max-content; }
  #page-brief .xhs-tags .xhs-copy { margin-top: 0; }
}

/* ---------- 移动端：触摸目标 >=44px + 版本 Tab 不折行 ----------
   .sopt / .bf-step 是全站共用类，必须带 #page-brief + 包在 max-width:768px 内，
   否则会压掉 mobile.css 的 44px 规则（本文件已踩过这个坑）。 */
@media (max-width: 768px) {
  #page-brief .sopt { min-height: 44px; padding: 10px 14px; }
  #page-brief .bf-steps .bf-step[data-go] { min-height: 44px; padding: 10px 12px; }
  #page-brief .bf-cpbtn { min-height: 44px; padding: 8px 14px; font-size: 13px; }
  #page-brief .bf-doc-more { min-height: 44px; }
}
/* #bfVTabs 是 id 选择器，特异性足够压过全局 .sort-bar 的 flex-wrap:wrap */
#page-brief #bfVTabs {
  flex-wrap: nowrap; overflow-x: auto; -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
}
#page-brief #bfVTabs::-webkit-scrollbar { display: none; }
#page-brief #bfVTabs .sopt { flex: none; }

/* ============================================================
 * 园园验收修复轮（2026-10-18）
 * ============================================================ */

/* ---------- 修复 #4：星级从 3 星制改 5 星制，补 s4 / s5 配色 ---------- */
.bf-star.s4 { color: #8A5A00; }
.bf-star.s5 { color: #B45309; }

/* ---------- 修复 #6：解析结果字段表原本完全没有样式 ----------
 * .bf-fields / .bf-fldrow / .bf-fldlabel / .bf-fldval / .bf-fldtext
 * 在全站 CSS 里 0 条规则，标签和值挤成一坨，行内的 ✏️🔓↩ 动作图标
 * 换行散落，看起来就是「乱码」。这里补齐结构样式，
 * flex 子项一律 min-width:0，防止长字段把行挤到逐字竖排。 */
#page-brief .bf-fields { display: flex; flex-direction: column; gap: 2px; margin-top: 6px; }
#page-brief .bf-fldrow {
  display: flex; align-items: flex-start; gap: 10px;
  padding: 7px 10px; border-radius: 10px; min-width: 0;
}
#page-brief .bf-fldrow:nth-child(odd) { background: rgba(0,0,0,.022); }
#page-brief .bf-fldrow.locked { background: rgba(216,27,55,.05); }
#page-brief .bf-fldlabel {
  flex: 0 0 76px; font-size: 12px; color: #6E6869; line-height: 22px;
  text-align: right; flex-shrink: 0;
}
#page-brief .bf-fldval {
  flex: 1 1 auto; min-width: 0; display: flex; align-items: baseline;
  gap: 8px; flex-wrap: wrap; font-size: 13px; line-height: 22px;
}
#page-brief .bf-fldtext { min-width: 0; overflow-wrap: anywhere; word-break: break-word; }
#page-brief .bf-fldtext.empty { color: #A8A3A5; }
/* 2026-10-18：空态类名从 .empty 改为 .bf-fldempty —— 原类名与全站空状态块
   .empty（style.css:349 虚线框+大 padding）撞车，空字段渲染成 53x88 竖虚线椭圆。
   旧类保留兼容（恢复原始抽取等旧 DOM 片段），新类与全站 .empty 彻底解耦。 */
#page-brief .bf-fldtext.bf-fldempty { color: #A8A3A5; }
/* 卖点三件套展示 */
#page-brief .bf-spval { display: block; }
#page-brief .bf-sp-prod { font-weight: 600; font-size: 12.5px; color: var(--xhs-red-text, #D81B37); margin: 5px 0 2px; }
#page-brief .bf-sp-prod:first-child { margin-top: 0; }
#page-brief .bf-sp-item { font-size: 13px; line-height: 21px; color: #3B3639; width: 100%; }
#page-brief .bf-fldacts { display: inline-flex; gap: 6px; flex: none; margin-left: auto; align-items: center; }
#page-brief .bf-fldacts i {
  font-style: normal; cursor: pointer; font-size: 13px; line-height: 22px;
  opacity: .55; transition: opacity .15s ease;
}
#page-brief .bf-fldacts i:hover { opacity: 1; }
/* ===== 字段编辑入口做成看得见（2026-10-19）=====
 * 园园：「解析结果里面，要可以编辑，如果我要补充达人、主页等信息，
 * 可以直接在解析结果里面添加」。原来只有 12px、opacity .55 的 emoji 图标，
 * 空值行还显示「—」，用户根本不知道该往哪儿填。现在：
 *   有值 → 「✎ 改」常显（.32 边框的浅胶囊）
 *   空值 → 「＋ 补充」（红边红字，和「点这里补充」文字一起构成双入口）
 * 仍然比主按钮轻，不抢正文焦点。 */
#page-brief .bf-fldact {
  font: inherit;
  font-size: 11.5px;
  line-height: 1;
  height: 22px;
  box-sizing: border-box;
  padding: 0 8px;
  border: 1px solid rgba(0, 0, 0, .12);
  border-radius: 999px;
  background: transparent;
  color: #6E6869;
  cursor: pointer;
  white-space: nowrap;
  transition: background .15s, color .15s, border-color .15s;
}
#page-brief .bf-fldact:hover {
  background: rgba(216, 27, 55, .07);
  border-color: rgba(216, 27, 55, .28);
  color: var(--xhs-red-text, #D81B37);
}
#page-brief .bf-fldact:active { transform: scale(.96); }
#page-brief .bf-fldact:focus-visible { outline: 2px solid var(--xhs-red-text, #D81B37); outline-offset: 1px; }
#page-brief .bf-fldact.is-add {
  border-color: rgba(216, 27, 55, .35);
  background: rgba(216, 27, 55, .05);
  color: var(--xhs-red-text, #D81B37);
}
/* 空值行整块可点：点「点这里补充」也能进编辑，不需要精确命中 22px 的胶囊 */
#page-brief .bf-fldadd {
  cursor: pointer;
  color: var(--xhs-red-text, #D81B37);
  border-bottom: 1px dashed rgba(216, 27, 55, .35);
  padding-bottom: 1px;
}
#page-brief .bf-fldadd:hover { border-bottom-style: solid; }
#page-brief .bf-fldrow.is-empty { background: rgba(0, 0, 0, .012); }
#page-brief .bf-fldrow.editing { background: rgba(216,27,55,.04); }
#page-brief .bf-fldedit { flex: 1 1 240px; min-width: 0; font-size: 13px; }

/* 防编造徽章（.bf-vb 同样全站无样式） */
#page-brief .bf-vb {
  flex: none; font-size: 11px; line-height: 18px; padding: 0 7px;
  border-radius: 999px; white-space: nowrap;
}
#page-brief .bf-vb.ok   { color: #0F7B4A; background: rgba(15,123,74,.10); }
#page-brief .bf-vb.warn { color: #8A5A00; background: rgba(138,90,0,.10); }
#page-brief .bf-vb.miss { color: #6E6869; background: rgba(110,104,105,.12); }

/* 解析结果的话题标签：原来 span 各占一行竖着排（园园实测「一列 emoji 竖排」同源），
   改成横排小胶囊 */
#page-brief #bfResult .xhs-tags { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px; }
#page-brief #bfResult .xhs-tags span {
  display: inline-block; padding: 2px 9px; border-radius: 999px;
  background: rgba(216,27,55,.07); line-height: 20px; white-space: nowrap;
}

/* ---------- 修复 #7：历史记录结构化卡片 ---------- */
#page-brief .bf-his-card {
  display: block; padding: 10px 12px; border: 1px solid rgba(0,0,0,.06);
  border-radius: 12px; background: #fff;
}
#page-brief .bf-his-card.on { border-color: rgba(216,27,55,.35); background: #FFF7F8; }
#page-brief .bf-his-top { display: flex; align-items: center; gap: 8px; min-width: 0; }
#page-brief .bf-his-title {
  font-size: 13px; font-weight: 600; color: #2b2b2b;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0;
}
#page-brief .bf-his-badge {
  flex: none; font-size: 11px; line-height: 18px; padding: 0 7px; border-radius: 999px;
}
#page-brief .bf-his-badge.gen   { color: #0F7B4A; background: rgba(15,123,74,.10); }
#page-brief .bf-his-badge.draft { color: #8A5A00; background: rgba(138,90,0,.10); }
#page-brief .bf-his-vc {
  flex: none; font-size: 11px; line-height: 18px; padding: 0 7px;
  border-radius: 999px; color: #5B5457; background: rgba(0,0,0,.05);
}
#page-brief .bf-his-meta {
  display: flex; flex-wrap: wrap; gap: 4px 10px; margin-top: 4px;
  font-size: 11px; color: #8A8486;
}
#page-brief .bf-his-sum {
  margin-top: 7px; padding-top: 7px; border-top: 1px dashed rgba(0,0,0,.08);
  font-size: 12px; line-height: 19px; color: #5B5457; overflow-wrap: anywhere;
}
#page-brief .bf-his-sum-t { display: block; }
#page-brief .bf-his-act { margin-top: 8px; display: flex; gap: 6px; flex-wrap: wrap; }

[data-theme="dark"] #page-brief .bf-fldrow:nth-child(odd) { background: rgba(255,255,255,.03); }
[data-theme="dark"] #page-brief .bf-his-card { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.08); }
[data-theme="dark"] #page-brief .bf-his-title { color: #EDE9EA; }
[data-theme="dark"] #page-brief .bf-his-vc { color: #B9B3B5; background: rgba(255,255,255,.08); }


/* ==================== G72 风格胶囊 ====================
   一排四选一，选中项带主色描边。移动端两列，触控区 ≥44px（全站 button min-height
   是 44px，这里不能写更小的 height，要显式把 min-height 归零）。 */
.bf-cap{margin:0 0 12px;padding:10px 12px;border:1px solid var(--line,#e6e6ef);
  border-radius:12px;background:var(--bg-soft,#fafaff)}
.bf-cap-hd{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}
.bf-cap-lb{font-size:13px;font-weight:600;color:var(--fg,#1c1c28)}
.bf-cap-cur{font-size:12px;color:var(--primary,#6c5ce7);font-weight:600}
.bf-cap-row{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.bf-cap-i{display:flex;flex-direction:column;align-items:flex-start;gap:2px;
  min-height:0;height:auto;padding:8px 10px;border:1px solid var(--line,#e6e6ef);
  border-radius:10px;background:var(--bg,#fff);cursor:pointer;
  transition:border-color .16s cubic-bezier(.4,0,.2,1),background .16s cubic-bezier(.4,0,.2,1)}
.bf-cap-i b{font-size:13px;font-weight:600;color:var(--fg,#1c1c28)}
.bf-cap-i span{font-size:11px;line-height:1.35;color:var(--fg-dim,#8a8aa0)}
.bf-cap-i:hover{border-color:var(--primary-dim,#b3a7f5)}
.bf-cap-i.on{border-color:var(--primary,#6c5ce7);background:var(--primary-tint,#f2effd)}
.bf-cap-i.on b{color:var(--primary,#6c5ce7)}
@media (max-width:640px){.bf-cap-row{grid-template-columns:repeat(2,1fr)}}

/* ==================== G73 洞察引擎 ====================
   卡片与雷达图。配色沿用主站令牌；移动端雷达图等比缩放。
   ★ 全站 button 有 min-height:44px，小按钮必须显式 min-height:0。 */
.bi-entry{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.bi-wrap{display:flex;flex-direction:column;gap:12px;margin-top:12px}
.bi-card{border:1px solid var(--line,#e6e6ef);border-radius:12px;
  background:var(--bg,#fff);padding:12px 14px;margin-top:12px}
.bi-hd{display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding-bottom:8px;border-bottom:1px solid var(--line-soft,#f1f1f7)}
.bi-hd b{font-size:14px;color:var(--fg,#1c1c28)}
.bi-hd .hint{font-size:11px}
.bi-score{display:inline-block;min-width:40px;padding:2px 8px;border-radius:999px;
  font-size:13px;font-weight:700;text-align:center}
.bi-score.good{background:#e8f7ee;color:#17864a}
.bi-score.mid{background:#fff5e0;color:#9a6b00}
.bi-score.low{background:#fdecec;color:#b3261e}
.bi-verdict{font-size:12px;font-weight:600}
.bi-verdict.ok{color:#17864a}
.bi-verdict.no{color:#b3261e}
.bi-radar-wrap{display:flex;justify-content:center;padding:6px 0 2px}
.bi-radar{width:100%;max-width:240px;height:auto}
.bi-dims{margin-top:8px}
.bi-dim{border-top:1px solid var(--line-soft,#f1f1f7);padding:6px 0}
.bi-dim summary{display:flex;align-items:center;gap:10px;cursor:pointer;list-style:none}
.bi-dim summary::-webkit-details-marker{display:none}
.bi-dn{font-size:13px;width:52px;flex:none;color:var(--fg,#1c1c28)}
.bi-bar{flex:1;height:6px;border-radius:999px;background:var(--line-soft,#f1f1f7);overflow:hidden}
.bi-bar i{display:block;height:100%;background:var(--primary,#6c5ce7)}
.bi-ds{font-size:12px;font-weight:700;width:26px;text-align:right;flex:none}
.bi-metric{margin:6px 0 4px;font-size:12px;color:var(--fg-dim,#8a8aa0)}
.bi-ev{margin:3px 0;padding:5px 8px;border-left:3px solid var(--primary-dim,#b3a7f5);
  background:var(--bg-soft,#fafaff);font-size:12px;line-height:1.5;color:var(--fg,#1c1c28)}
.bi-hot{margin-top:10px}
.bi-hot-hd{font-size:12px;color:var(--fg-dim,#8a8aa0);margin:0 0 6px}
.bi-hotrow{padding:8px 0;border-top:1px dashed var(--line-soft,#f1f1f7)}
.bi-hotsent{margin:0;font-size:13px;color:var(--fg,#1c1c28)}
.bi-hotwhy{margin:3px 0 0;font-size:11px;color:#9a6b00}
.bi-hotfix{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:6px;flex-wrap:wrap}
.bi-fixnew{font-size:12px;color:#17864a;flex:1;min-width:180px}
.bi-apply{min-height:0;height:30px;padding:0 12px;border:1px solid var(--primary,#6c5ce7);
  border-radius:8px;background:var(--primary-tint,#f2effd);color:var(--primary,#6c5ce7);
  font-size:12px;cursor:pointer}
.bi-apply:disabled{opacity:.5;cursor:default}
.bi-sec{margin:10px 0 4px;font-size:12px;font-weight:600;color:var(--fg,#1c1c28)}
.bi-list{margin:0 0 6px;padding-left:20px}
.bi-list li{margin:4px 0;font-size:12px;line-height:1.6}
.bi-where{display:inline-block;margin-left:6px;padding:1px 6px;border-radius:6px;
  background:var(--bg-soft,#fafaff);font-size:11px;color:var(--fg-dim,#8a8aa0)}
.bi-fix{margin:2px 0 0;font-size:12px;color:var(--fg-dim,#8a8aa0)}
.bi-okline{margin:2px 0 0;font-size:12px;color:#17864a;line-height:1.6}
.bi-tl{margin:6px 0 0;padding-left:20px}
.bi-tlrow{margin:8px 0}
.bi-tltop{display:flex;align-items:center;justify-content:space-between;gap:10px}
.bi-tltitle{font-size:13px;color:var(--fg,#1c1c28);flex:1;min-width:0}
.bi-tlchecks{display:flex;flex-wrap:wrap;gap:6px;margin-top:5px}
.bi-tick{display:inline-block;padding:2px 8px;border-radius:8px;font-size:11px;
  background:var(--bg-soft,#fafaff);color:var(--fg-dim,#8a8aa0)}
.bi-tick.ok{background:#e8f7ee;color:#17864a}
.bi-tick.no{background:#fdecec;color:#b3261e}
.bi-mask{position:fixed;inset:0;z-index:9998;background:rgba(20,18,32,.42);
  display:flex;align-items:center;justify-content:center;padding:16px}
.bi-modal{width:100%;max-width:560px;max-height:86vh;overflow:auto;border-radius:14px;
  background:var(--bg,#fff);padding:16px 18px;box-shadow:0 18px 48px rgba(20,18,32,.22)}
.bi-mhd{display:flex;align-items:center;justify-content:space-between;gap:10px}
.bi-x{min-height:0;height:28px;width:28px;border:0;background:transparent;
  font-size:15px;cursor:pointer;color:var(--fg-dim,#8a8aa0)}
.bi-ta{width:100%;margin-top:8px;padding:10px;border:1px solid var(--line,#e6e6ef);
  border-radius:10px;font-size:13px;line-height:1.6;resize:vertical}
.bi-act{display:flex;gap:8px;margin-top:10px}
.bi-out{margin-top:8px}
.bi-sk{margin-top:6px}
.bi-sk .bi-beat{margin:6px 0;padding:7px 10px;border-radius:10px;background:var(--bg-soft,#fafaff)}
.bi-sk .bi-tag{display:inline-block;margin-right:8px;padding:1px 7px;border-radius:6px;
  background:var(--primary-tint,#f2effd);color:var(--primary,#6c5ce7);font-size:11px;font-weight:700}
.bi-sk .bi-beat p{margin:3px 0 0;font-size:12px;color:var(--fg-dim,#8a8aa0);line-height:1.55}
.bi-q{color:var(--fg-dim,#8a8aa0);font-style:italic}
.bi-rh{margin:8px 0 0;font-size:11px;color:var(--fg-dim,#8a8aa0)}
@media (max-width:640px){.bi-radar{max-width:200px}}

/* ============================================================
   一句话生成笔记（One-shot，2026-10-20）
   ------------------------------------------------------------
   放在上传卡片之上，是这条链路唯一的「零输入」入口。
   全部走站点设计令牌（--xhs-red-text / --line / --text-muted / --ease），
   不新造色值，换主题时自动跟随。
   ============================================================ */
.bf-os{position:relative;overflow:hidden;
  background:linear-gradient(135deg,#fff 0%,#fff7f8 58%,#fff 100%);
  border:1px solid #F3DDE1}
.bf-os::before{content:"";position:absolute;top:-90px;right:-70px;width:230px;height:230px;
  background:radial-gradient(circle,rgba(216,27,55,.10),rgba(216,27,55,0) 68%);
  pointer-events:none}
.bf-os-hd{position:relative;margin-bottom:11px}
.bf-os-title{display:flex;align-items:center;gap:8px;font-size:17.5px;font-weight:700;
  color:var(--fg,#2B2426);letter-spacing:.2px}
.bf-os-new{font-size:10.5px;font-weight:700;color:#fff;background:var(--xhs-red-solid,#E01230);
  border-radius:999px;padding:2px 7px;letter-spacing:.6px;line-height:1.5}
.bf-os-sub{margin-top:6px;font-size:12.5px;line-height:1.65;color:var(--text-muted,#5B5457)}
.bf-os-row{position:relative;display:flex;gap:10px;align-items:stretch}
.bf-os-in{flex:1 1 auto;min-height:0;min-width:0;padding:11px 13px;border:1px solid var(--line,#E7DCDE);
  border-radius:12px;font-size:14px;line-height:1.65;color:var(--fg,#2B2426);background:#fff;
  resize:vertical;font-family:inherit;
  transition:border-color .24s var(--ease,cubic-bezier(.22,1,.36,1)),
             box-shadow .24s var(--ease,cubic-bezier(.22,1,.36,1))}
.bf-os-in:focus{outline:none;border-color:var(--xhs-red-text,#D81B37);
  box-shadow:0 0 0 3px rgba(216,27,55,.10)}
.bf-os-in::placeholder{color:#ADA4A6}
.bf-os-btn{flex:0 0 auto;min-height:0;height:auto;padding:0 22px;border-radius:12px;font-weight:600;
  transition:transform .18s var(--ease,cubic-bezier(.22,1,.36,1)),box-shadow .18s ease}
.bf-os-btn:active{transform:scale(.97)}
.bf-os-btn:disabled{opacity:.62;cursor:progress;transform:none}
.bf-os-try{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.bf-os-chip{min-height:0;padding:5px 11px;border:1px solid #F0E4E6;border-radius:999px;
  background:#fff;color:var(--text-muted,#5B5457);font-size:12px;line-height:1.5;cursor:pointer;
  font-family:inherit;transition:all .2s var(--ease,cubic-bezier(.22,1,.36,1))}
.bf-os-chip:hover{color:var(--xhs-red-text,#D81B37);border-color:#F2C6CE;background:#FFF4F6;
  transform:translateY(-1px)}
.bf-os-chip:focus-visible{outline:2px solid var(--xhs-red-text,#D81B37);outline-offset:2px}
.bf-os-out{margin-top:10px;font-size:12.5px;color:var(--text-muted,#5B5457)}
.bf-os-loading{display:inline-flex;align-items:center;gap:8px}
.bf-os-loading::before{content:"";width:12px;height:12px;border-radius:50%;
  border:2px solid rgba(216,27,55,.22);border-top-color:var(--xhs-red-text,#D81B37);
  animation:bfOsSpin .7s linear infinite}
@keyframes bfOsSpin{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){
  .bf-os-loading::before{animation:none}
  .bf-os-chip,.bf-os-btn,.bf-os-in{transition:none}
}
.bf-os-or{display:flex;align-items:center;gap:12px;margin:16px 2px 14px;
  color:#B0A7A9;font-size:12px}
.bf-os-or::before,.bf-os-or::after{content:"";flex:1;height:1px;background:var(--line,#F0EAEB)}

/* —— 「我理解成这样」卡片 —— */
.bf-os-card{border:1px solid #F1DEE2;background:linear-gradient(180deg,#FFF9FA,#fff 44%)}
.bf-os-q{margin:2px 0 13px;padding:9px 12px;border-left:3px solid var(--xhs-red-text,#D81B37);
  background:#FFF4F6;border-radius:0 8px 8px 0;font-size:13px;line-height:1.65;color:#4A4143;
  word-break:break-word}
.bf-os-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(158px,1fr));gap:9px 18px}
.bf-os-kv{display:flex;flex-direction:column;gap:2px;min-width:0}
.bf-os-kv span{font-size:11.5px;color:#A79EA0;line-height:1.5}
.bf-os-kv b{font-size:13px;font-weight:600;color:var(--fg,#2B2426);line-height:1.55;
  word-break:break-word}
.bf-os-dirs{margin-top:13px}
.bf-os-lb{font-size:11.5px;color:#A79EA0}
.bf-os-dlist{display:flex;flex-wrap:wrap;gap:6px;margin-top:7px}
.bf-os-d{font-size:12.5px;line-height:1.5;color:#8A2B3C;background:#FFF0F3;
  border:1px solid #F7D8DF;border-radius:999px;padding:4px 10px}
.bf-os-warn{margin-top:13px;padding:9px 12px;border-radius:10px;background:#FFF8E6;
  border:1px solid #F3E0AE;font-size:12.5px;line-height:1.65;color:#7A5B12}
.bf-os-warn b{display:block}
.bf-os-warn span{display:block;margin-top:3px;color:#95762A}
.bf-os-note{margin:11px 0 0;line-height:1.65}
@media (max-width:640px){
  .bf-os-row{flex-direction:column}
  .bf-os-btn{height:44px;padding:0}
  .bf-os-title{font-size:16px}
  .bf-os-grid{grid-template-columns:1fr 1fr}
}
