/* xnngy-editor.css —— 「首页即后台」内联编辑器组件样式（2026-10-08 十九次;二十次起双形态;二十三次单形态）
 * 自 static/editor/editor.css 迁移而来：
 * 1. 删除两条全局规则（* box-sizing / body）——Hextra Tailwind preflight 已提供,
 *    主题样式不得被覆盖（旧 editor.css 独立页可全页掌控,内联形态不行）
 * 2. 删除旧三栏页骨架类（.ed-header/.ed-layout/.ed-sidebar/.ed-side-title/
 *    .ed-main/.ed-tip）与死样式（.ed-grid/.ed-fieldset 十七次已删四区块）
 * 3. 色值由旧 GitHub 板升级全站 Primer 板（需求文档十二次变更遗留缺口）:
 *    #0366d6→#0969da  #57606a→#59636e  #d0d7de→#d1d9e0  #8c959f→#818b98
 * 4. 新增树节点按钮组（.xnngy-node-btns）、文件夹页管理列表（.xnngy-admin-*）
 * 5. 二十次新增：顶部工具条（.ed-topbar）、文字颜色色板（.ed-palette）、
 *    标题输入框 .ed-il-title/browse 态 hover 提示 .xnngy-owner
 * 6. 二十一次改造：块级编辑替换逐行透明 textarea 方案（.ed-rline/.ed-source 等删除）
 *    ——.xnngy-block 块容器+hover 工具按钮（.ed-block-act ✎/✕）+.xnngy-block-ta 块编辑框
 * 7. 二十二次改造（真·零变动）：.ed-topbar 改 fixed 浮层不占流;.ed-il-title 与主题 h1
 *    视觉一致（聚焦才有淡提示）;.ed-inline-body/.ed-render 块渲染层样式删除
 *    （正文 DOM 保持主题渲染不动）;.xnngy-block-ta 补主题块间距（mt-6/mt-10/my-4）
 *    使原位替换形态跳变最小
 * 8. 二十三次（单形态统一）：表单模式退役——.xnngy-ed-wrap/.ed-form-row/.ed-label/
 *    .ed-tabs/.ed-tab/.ed-textarea/.ed-preview/.ed-path-row/.ed-topbar-inflow/
 *    .xnngy-editing-page 全部删除（新建文件走空白内联编辑页）;.ed-input 保留
 *    （dir-picker 文件夹选择弹窗复用）;新增树顶新建下拉菜单（.xnngy-new-menu/.xnngy-new-item,
 *    body 级 fixed 定位）与文件夹选择弹窗（.ed-overlay/.ed-dialog）;工具条移动端适配
 * 9. 二十四次（文件树瘦身+文件夹管理视图）：管理列表样式退役——.xnngy-admin-
 *    .ed-item/.ed-item-btns/.ed-list/.ed-empty 删除;新增文件夹页文件列表
 *    （.xnngy-dir-filelist/.xnngy-dir-file-row/.xnngy-dir-row-btns）、文件夹标题 inline
 *    重命名输入框（.ed-dir-title-input）、重命名面板字段（.ed-dialog-body/.ed-field-label）;
 *    .xnngy-node-btns 现在文件夹与文件条目共用
 * 10. 二十九次（工具条常驻）：.ed-topbar fixed 全宽浮层→sticky 占位(不再横穿遮挡左右两栏);
 *    新增 .ed-btn:disabled/.ed-tb:disabled 置灰样式(浏览态按钮不可用,进入编辑激活)
 * 11. 三十次（工具条铺满中间区域）：.ed-topbar 加 flex-basis:100% 独占 article 首行
 * 12. 三十四次（全部按钮同尺寸）：.ed-tb padding 3px 10px/12px→5px 14px/13px
 *     （与 .ed-topbar .ed-btn 完全一致,站长要求功能按钮大小对齐保存按钮）
 *    (宽度=中间区域,树收缩/TOC 断点自动跟随);.xnngy-*-layout > article 加 flex-wrap:wrap
 *    (article 默认 nowrap 会把工具条与 main 并排压缩各半)
 * 13. 四十四次（2026-10-10）：文件夹页文件行增强退役——.xnngy-dir-file-row/
 *    .xnngy-dir-row-btns/.ed-mini-btn 与重命名面板字段 .ed-dialog-body/.ed-field-label
 *    全部删除（点文件标题=正常跳转,行尾✎/－与重命名面板删除）;
 *    .ed-dialog .ed-input 间距保留（dir-picker 文件夹选择弹窗仍用）
 * 14. 五十三次（2026-10-11）：块级编辑退役——.xnngy-block/.xnngy-block-tools/
 *    .ed-block-act/.ed-block-del/.xnngy-block-ta(含 -h/-img/-video 变体)全部删除;
 *    新增 .xnngy-body-ta 整块正文编辑框（正文区整体=单编辑框,全文 MD 源码,
 *    等宽字体,高度由 JS 自适应 min 200px）;.ed-il-title 标题输入框保留不变。
 * 15. 五十四次（2026-10-11）：浏览态可编辑提示整块化——站长反馈"未进入编辑态时
 *    悬停正文区标题/正文还是块状的,与整块编辑形态不一致"→.xnngy-owner 逐元素
 *    hover(p/h2/ul/ol 各自出虚线框)删除,改 .xnngy-body:hover 整块一个虚线框
 *    (悬停正文区任意位置整个正文区出框);h1 大标题保留单独提示(独立编辑目标)。
 * 16. 五十六次（2026-10-11）：空正文可点击进入编辑——站长反馈"正文区没内容后点
 *    正文区不能编辑,只能点标题进"→空正文 .xnngy-body 渲染为空 div 高度 0 点不中;
 *    JS(armInlineEntry)检测无子元素加 .xnngy-body-empty 类,CSS 给 min-height:160px
 *    撑出可点击区,hover 整块提示自动生效,点击=进入整块编辑。
 * 17. 五十七次（2026-10-11）：代码按钮替换为 Telegram 式链接弹窗——新增 .ed-field-label
 *    弹窗字段标签样式(文本/链接两字段);链接渲染样式用主题链接默认(蓝+下划线)+加粗,
 *    无需新增正文样式。
 * 18. 五十九次（2026-10-11）：导航栏中间可编辑区域——.ed-navbar-topbar 悬浮工具条
 *    （复用 .ed-topbar 视觉,定位覆盖为 fixed 居中悬浮导航栏下方;与 sticky 文章工具条
 *    互斥并存不存在冲突）;编辑框 .xnngy-navbar-ta 样式见 custom.css(与导航栏容器同域)。
 * 19. 六十次（2026-10-11）：导航栏编辑区宽度对齐中间内容区——新增 .xnngy-navbar-overlay
 *    悬浮层(fixed 定位导航栏正下方,left/width 由 JS 实测 main#content 与内容区左右边缘
 *    精确对齐);.ed-navbar-topbar 定位从 fixed 居中改悬浮层内文档流(紧随编辑框下方,
 *    编辑框变高自动下移,无需 JS 同步工具条位置)。
 * 20. 任务61（2026-10-30）：超长正文底部编辑置底遮挡修复——站长报障"编辑超长正文
 *    到最底下,每打一个字内容一直置底被遮挡"。①.xnngy-body-ta 启用 field-sizing:content
 *    （Chrome/Edge 123+ 原生按内容自适应高度,JS 检测到支持即不再写内联高度,
 *    根除 height=auto 测量导致的文档瞬时塌缩、滚动位置被钳回顶部）;
 *    ②编辑框底部加 margin-bottom:40vh 空白;③新增编辑态 scroll-padding-bottom:30vh
 *    （html:has(.xnngy-body-ta) 作用域,仅编辑正文时生效,浏览/阅读态不受影响）,
 *    光标自动入视时离视口底边约 30vh,不再贴在窗口最下沿。
 * 全部为作用域类（.ed- 与 .xnngy- 前缀）,全站加载不影响主题样式。
 */

/* ---------- 状态行 ---------- */
.ed-status {
  color: #59636e;
  margin-right: 8px;
  font-size: 13px;
  /* 二十九次:限宽省略号——状态文本浏览态空/编辑态长,不限宽会把工具条撑换行致正文跳动;
     六十次 180→90px:12 按钮下 1280 视口内容区仅 793px,状态行占宽须进一步压缩 */
  max-width: 90px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* ---------- 输入控件（二十三:dir-picker 文件夹选择弹窗复用） ---------- */
.ed-input {
  width: 100%;
  padding: 8px 10px;
  border: 1px solid #d1d9e0;
  border-radius: 6px;
  font-size: 14px;
  font-family: inherit;
  background: #fff;
  color: #1f2328;
}
.ed-input:focus { outline: none; border-color: #0969da; box-shadow: 0 0 0 3px rgba(9, 105, 218, 0.15); }

/* ---------- 顶部工具条（二十二:fixed 浮层不占流;二十三:单形态;二十九:常驻改 sticky 占位） ---------- */
/* 二十九次（2026-10-09）：站长需求"工具栏固定在中间内容区顶部,不要横穿遮挡顶部导航栏和
   左右两栏"→fixed 全宽浮层(left/right:0 横穿整屏)改 **sticky 占位**——工具条宽度=中间
   正文容器宽度,天然不遮左侧文件树/右侧章节标题列表(树收缩、TOC 断点变化自动跟随,无需
   JS 同步);占位使正文比游客态下移约 41px,但登录态浏览态=编辑态布局完全一致(常驻注入,
   进入编辑零布局变化,二十二次"零变动"承诺不回归);滚动时黏在导航栏下方(top:64),此时
   面包屑已滚出视口,不遮挡任何内容 */
.ed-topbar {
  position: sticky;
  top: var(--navbar-height, 64px);
  z-index: 10;        /* 八十四次(2026-10-14 悬浮布局):原 20 高于悬浮侧栏/TOC 的 15,
                          会把展开的面板连同其收缩按钮一起盖住(点击被工具条吞掉);
                          降到 10 后两栏浮在工具条之上——展开态面板盖住工具条两端,
                          视觉与旧"左贴树右缘/右贴 TOC 左缘"完全一致,z 序替代流式占位 */
  flex-basis: 100%;   /* 三十次:article 为 flex row(justify-center),工具条独占首行——
                          八十四次后 article 恒全宽(侧栏改 fixed 脱流),工具条即全宽条,
                          两端由悬浮面板覆盖;树收起时两端透出,随开合自动跟随,无断点代码 */
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: nowrap;   /* 二十九次:恒一行——状态文本浏览态空/编辑态长会撑宽,wrap 下引发换行
                          工具条高度翻倍、正文下移(测试抓出),nowrap+状态行省略号保证高度恒定 */
  background: #f6f8fa;
  border-bottom: 1px solid #d1d9e0;
  padding: 6px 12px;
  box-shadow: 0 2px 8px rgba(31, 35, 40, 0.08);
}
/* 三十次:中间区域容器允许换行——工具条 flex-basis:100% 独占首行,main 换到第二行
   (article 默认 flex nowrap,不加此规则工具条与 main 会被并排压缩各半)。
   align-content:flex-start——短文章页 article 被 min-h[100vh-导航栏] 撑高时,默认
   align-content:stretch 会均分行高并连带拉伸工具条(站长报障"第二本书工具栏很粗",
   诊断实测 tbH 44.5→216.75);flex-start 后各行=内容高,剩余留白留底部 */
.xnngy-home-layout > article,
.xnngy-page-layout > article { flex-wrap: wrap; align-content: flex-start; }
.ed-topbar-spacer { flex: 1; }
/* 二十九次:按钮组同样 nowrap——状态文本编辑态变长时组内换行会撑高工具条致正文跳动
   (诊断实测:外层 nowrap 后工具条仍 44.5→80px,根因=组内 wrap 换行) */
.ed-tb-group, .ed-act-group { display: flex; gap: 4px; align-items: center; flex-wrap: nowrap; }
.ed-topbar .ed-btn { padding: 4px 10px; font-size: 13px; }

.ed-tb {
  border: 1px solid #d1d9e0;
  background: #f6f8fa;
  color: #1f2328;
  border-radius: 6px;
  padding: 4px 10px;   /* 三十四次:与保存/取消按钮(.ed-topbar .ed-btn)完全同尺寸——站长要求
                          全部按钮大小一致;六十次 5px 14px→4px 10px 窄化——12 个功能按钮
                          1280 视口内容区(793px)放不下,挤压会致按钮文字换行撑高工具条、
                          正文下移(零变动回归),窄化后恒一行 */
  font-size: 13px;
  cursor: pointer;
  white-space: nowrap;  /* 六十次:防挤压换行——换行撑高工具条=正文下移(用例 11/22 抓出) */
}
.ed-tb:hover { background: rgba(129, 139, 152, 0.10); }

/* 五十二次:浏览量公开开关按钮——独立类不用 .ed-tb(浏览态禁用规则仅限 .ed-tb/.ed-btn,
   开关须浏览态可点);样式与 .ed-tb 同尺寸保持一致 */
.ed-stats-toggle {
  border: 1px solid #d1d9e0;
  background: #f6f8fa;
  color: #1f2328;
  border-radius: 6px;
  padding: 4px 10px;
  font-size: 13px;
  cursor: pointer;
  white-space: nowrap;
}
.ed-stats-toggle:hover { background: rgba(129, 139, 152, 0.10); }

/* 二十九次:常驻工具条浏览态按钮置灰(未进入编辑时保存/插入均无意义,仅编辑态可用) */
.ed-topbar .ed-btn:disabled,
.ed-topbar .ed-tb:disabled {
  color: #818b98;
  background: #f6f8fa;
  border-color: #d1d9e0;
  cursor: not-allowed;
  opacity: 0.7;
}
.ed-topbar .ed-btn:disabled:hover,
.ed-topbar .ed-tb:disabled:hover {
  background: #f6f8fa;
}

/* ---------- 文字颜色色板 ---------- */
.ed-palette-host { position: relative; display: inline-flex; }
.ed-palette {
  position: absolute;
  top: calc(100% + 6px);
  right: 0;
  display: flex;
  gap: 6px;
  background: #fff;
  border: 1px solid #d1d9e0;
  border-radius: 6px;
  padding: 6px 8px;
  box-shadow: 0 4px 12px rgba(31, 35, 40, 0.15);
  z-index: 60;
  flex-wrap: wrap;
  width: 148px;
}
.ed-palette button {
  width: 18px;
  height: 18px;
  border-radius: 50%;
  border: 1px solid rgba(0, 0, 0, 0.15);
  cursor: pointer;
  padding: 0;
}
.ed-palette button:hover { transform: scale(1.2); }

/* ---------- 按钮 ---------- */
.ed-btn {
  padding: 8px 20px;
  border-radius: 6px;
  font-size: 14px;
  cursor: pointer;
  border: 1px solid #d1d9e0;
  background: #fff;
  color: #1f2328;
}
.ed-btn-primary { background: #0969da; border-color: #0969da; color: #fff; }
.ed-btn-primary:hover { background: #0856ad; }
.ed-btn-danger { background: #fff; border-color: #cf222e; color: #cf222e; }
.ed-btn-danger:hover { background: #fff1f0; }

/* ---------- 树节点「⋮」菜单按钮（任务65:文件夹与文件条目共用,注入于 .hextra-sidebar-item 内;
   桌面 hover 显示;触摸设备无 hover,常驻显示——否则手机端点不到） ---------- */
.xnngy-node-btns {
  position: absolute;
  right: 2px;
  top: 50%;
  transform: translateY(-50%);
  display: none;
  align-items: center;
  background: #fff;
  border: 1px solid #d1d9e0;
  border-radius: 6px;
  padding: 0 2px;
}
.hextra-sidebar-item:hover .xnngy-node-btns { display: flex; }
@media (hover: none), (pointer: coarse) {
  .xnngy-node-btns { display: flex; }
}
.xnngy-node-btns button {
  background: none;
  border: 0;
  cursor: pointer;
  color: #59636e;
  font-size: 14px;
  padding: 0 4px;
  line-height: 1.5;
}
.xnngy-node-btns button:hover { color: #0969da; }

/* ---------- 批量选择（任务85,2026-11-02 站长定稿）：行点击多选,无勾选框 ----------
   选中行蓝色选中框（沿用勾选框蓝 #0969da）：inset 描边 + 浅蓝底,
   不改变行尺寸——批量模式下文件树样式与平时完全一致 */
.hextra-sidebar-item.xnngy-batch-selected {
  background: rgba(9, 105, 218, 0.08);
  box-shadow: inset 0 0 0 1px #0969da;
  border-radius: 6px;
}
/* 树顶批量操作条（已选数量 + 退出） */
.xnngy-batch-bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  margin-bottom: 4px;
  padding: 5px 8px;
  border: 1px dashed #0969da;
  border-radius: 6px;
  background: rgba(9, 105, 218, 0.06);
  color: #0969da;
  font-size: 12px;
  line-height: 1.4;
}
.xnngy-batch-bar button {
  flex: none;
  border: 0;
  background: none;
  color: #0969da;
  cursor: pointer;
  font-size: 12px;
  padding: 0 2px;
  text-decoration: underline;
}

/* 文件夹标题 inline 重命名输入框（h1 内换输入框,视觉与主题 h1 一致） */
.ed-dir-title-input {
  width: 100%;
  font: inherit;
  color: inherit;
  background: transparent;
  border: 1px dashed #0969da;
  border-radius: 4px;
  padding: 2px 6px;
  margin: 0;
}
.ed-dir-title-input:focus { outline: none; }

/* 弹窗内输入框间距（dir-picker 文件夹选择弹窗用） */
.ed-dialog .ed-input { margin-bottom: 12px; }

/* ---------- browse 态可编辑提示（仅登录用户,.xnngy-owner 由 JS 注入;五十四次:逐元素块状
     提示→整块提示——悬停正文区任意位置整个正文区一个虚线框,与整块编辑形态对应） ---------- */
.xnngy-owner h1.xnngy-title:hover {
  outline: 1px dashed #0969da;
  outline-offset: 3px;
  cursor: text;
}
.xnngy-owner .xnngy-body:hover {
  outline: 1px dashed #0969da;
  outline-offset: 3px;
  cursor: text;
}
/* 五十六次:空正文区撑出可点击高度(否则空 div 高度 0,点击永远进不了编辑;
   hover 整块提示规则自动生效,点击=进入整块编辑) */
.xnngy-owner .xnngy-body-empty { min-height: 160px; }

/* ---------- 整块内联编辑（五十三次:正文区整体=单编辑框,全文 MD 源码连续编辑;
     块级样式[二十一次-五十二次]退役——.xnngy-block 系列全删） ---------- */
/* 标题 input（二十二:与主题 h1[text-4xl/bold/tracking-tight] 视觉一致——无边框无底色,
     聚焦才有浅蓝提示;flex:1 与右侧菜单同排不换行） */
.ed-il-title {
  flex: 1;
  min-width: 0;
  font-size: 2.25rem;
  font-weight: 700;
  line-height: 2.5rem;   /* = Tailwind text-4xl 行高,与 h1 框高一致(3d 3.2px 位移根因) */
  letter-spacing: -0.025em;
  color: inherit;
  background: transparent;
  border: 0;
  border-radius: 6px;
  padding: 0;
  margin: 0.5rem 0 0 0;   /* 对齐 .content h1 的 mt-2;h1 原带 hx:mb-0 */
  font-family: inherit;
  scroll-margin-top: calc(var(--navbar-height, 64px) + 52px);   /* 聚焦自动滚动时不躲进浮层工具条下 */
}
.ed-il-title:focus {
  outline: none;
  background: rgba(9, 105, 218, 0.04);
  box-shadow: inset 0 0 0 1px rgba(9, 105, 218, 0.2);
}

/* 整块正文编辑框（五十三次:.xnngy-body 容器内唯一子元素,值=全文 MD 源码;等宽字体贴近
   MD 源码写作;高度由 JS autoSizeBody 自适应内容(min 200px 保底),无框内滚动条;
   margin 对齐主题正文首元素间距,进入编辑正文区零位移） */
.xnngy-body-ta {
  display: block;
  width: 100%;
  min-height: 200px;
  border: 1px solid #d1d9e0;
  border-radius: 6px;
  background: #fff;
  padding: 12px 14px;
  font-family: ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace;
  font-size: 15px;
  line-height: 1.8;
  color: #1f2328;
  resize: none;      /* 高度自适应,禁手动拖拽 */
  outline: none;
  box-sizing: border-box;
  margin: 1rem 0 0;
  overflow-y: hidden;
  /* 任务61:原生按内容自适应高度(Chrome/Edge 123+),替代 JS 先置 height:auto 再量的
     塌缩式测量——塌缩会令整篇文档高度瞬间缩小、window.scrollY 被钳回顶部
     （站长报障"超长正文编辑置底被遮挡"根因）;不支持的旧浏览器由 JS 兜底(见 autoSizeBody) */
  field-sizing: content;
  /* 任务61:编辑框底部留 40vh 空白,配合下方编辑态 scroll-padding-bottom:30vh,
     让光标自动入视时停在离视口底边约 30vh 处,不再贴窗口最下沿被遮挡 */
  margin-bottom: 40vh;
}
.xnngy-body-ta:focus {
  border-color: #0969da;
  box-shadow: 0 0 0 3px rgba(9, 105, 218, 0.12);
}
/* 任务61:编辑正文时给光标"最小入视"留底部余量——scroll-padding-bottom 作用于
   浏览器把光标滚入视口时的对齐位置,30vh 让光标行离视口底边留一截空白,
   用户能看清正在输入的这一行;:has 限定只在编辑框存在时生效,浏览/阅读态不受影响 */
html:has(.xnngy-body-ta) {
  scroll-padding-bottom: 30vh;
}

/* ---------- 弹出菜单（二十三:body 级 fixed 定位,Primer 风格面板;
   任务65:树顶「＋ 新建」与节点「⋮」共用,新增分隔线与危险项） ---------- */
.xnngy-new-menu {
  position: fixed;
  z-index: 1000;
  display: flex;
  flex-direction: column;
  min-width: 168px;
  background: #fff;
  border: 1px solid #d1d9e0;
  border-radius: 6px;
  box-shadow: 0 8px 24px rgba(31, 35, 40, 0.15);
  padding: 4px;
}
.xnngy-new-item {
  display: block;
  width: 100%;
  text-align: left;
  border: 0;
  background: none;
  color: #1f2328;
  font-size: 13px;
  padding: 9px 10px;
  border-radius: 6px;
  cursor: pointer;
}
.xnngy-new-item:hover { background: rgba(129, 139, 152, 0.10); }
.xnngy-new-item.danger { color: #cf222e; }
.xnngy-new-item.danger:hover { background: #fff1f0; }
.xnngy-new-sep {
  height: 1px;
  background: #d1d9e0;
  margin: 4px 6px;
}

/* ---------- 文件夹选择弹窗（dir-picker,任务73 起树顶「新建文件/新建文件夹」总是先弹,
   与「移动到…」同款数据源:根目录+全部层级、缩进显示、默认根目录） ---------- */
.ed-overlay {
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.45);
  z-index: 2000;
  display: flex;
  align-items: center;
  justify-content: center;
}
.ed-dialog {
  background: #fff;
  border-radius: 10px;
  padding: 20px;
  width: min(360px, 90vw);
  box-shadow: 0 8px 30px rgba(0, 0, 0, 0.25);
}
.ed-dialog-title { display: block; font-size: 15px; color: #1f2328; margin-bottom: 10px; }
/* 2026-10-18：站内弹窗消息正文（uialert/uiconfirm/uiprompt 通用；原生弹窗替换时新增） */
.ed-dialog-msg { font-size: 14px; line-height: 1.6; color: #1f2328; margin-bottom: 16px; word-break: break-word; }
.ed-dialog .ed-input { margin-bottom: 14px; }
/* 链接弹窗字段标签（五十七次:Telegram 式插入链接——文本/链接两字段） */
.ed-field-label {
  display: block;
  font-size: 12px;
  color: #59636e;
  margin-bottom: 4px;
}
.ed-dialog-btns { display: flex; justify-content: flex-end; gap: 8px; }

/* ---------- 响应式 ---------- */
@media (max-width: 768px) {
  /* 窄屏工具条:紧凑间距自然折行(块级编辑移动端与桌面同形态,二十三;
     二十九:恢复 wrap——窄屏一行放不下,状态行已省略号不撑宽,浏览态=编辑态换行数恒定) */
  .ed-topbar { padding: 4px 8px; gap: 4px; flex-wrap: wrap; }
  .ed-topbar .ed-btn { padding: 4px 10px; }
  .ed-status { font-size: 12px; margin-right: 6px; max-width: 90px; }   /* 六十次:120→90 与桌面统一 */
  .ed-tb { padding: 3px 8px; white-space: normal; }   /* 六十次:桌面 nowrap 防撑高;窄屏恢复允许
                                                         文字换行收缩(旧行为) */
  .ed-tb-group, .ed-act-group { flex-wrap: wrap; }    /* 六十次:375px 视口 16 个按钮元素
                                                         min-content 也放不下一行,组内折行;
                                                         浏览态=编辑态恒定折行,零变动不回归 */
}

/* 八十六次（2026-10-15 站长手机报障）：窄屏（<1280px，两栏为贴边按钮条档）
   工具条左右各让出 32px——悬浮布局（八十四次）下正文区≈全屏宽，工具条
   flex-basis:100% 从 x0 铺满，其首/末按钮与贴边收缩按钮（2rem 宽，实测
   3~29 / 视口-29）水平重叠叠在一起（390px 实测工具条首按钮 8~95 与左收缩
   按钮 3~29 完全叠加、768px 实测工具条末按钮 608~760 与右收缩按钮 739~765
   叠加）；让位后两栏收缩按钮独占边带、工具条按钮从 32px 起排。
   ≥1280px 不变：双栏展开 256px 悬浮面板盖住工具条两端属八十四次既定形态
   （z-index 面板 15 > 工具条 10） */
@media (max-width: 79.999rem) {
  .ed-topbar {
    flex-basis: auto;
    width: calc(100% - 64px);
    margin-left: auto;
    margin-right: auto;
  }
}

/* 六十次（2026-10-11）：导航栏编辑悬浮层——fixed 定位,left/width 由 JS
   实测 main#content 矩形与中间内容区左右边缘精确对齐(resize 重算);z-index 30 高于
   导航栏容器 20;宽度完全信任实测值(内容区恒 ≤ 视口宽,无需 max-width 兜底——
   兜底反而造成小屏下与内容区 24px 偏差)。
   七十三次(2026-10-12):定位改与展开浮层同款顶对齐(top=banner 实测顶,JS
   positionNavbarPanel anchorTop=true 写回);浮层双类带 .xnngy-navbar-panel
   (custom.css 展开面板实底 #f6f8fa+边线+排版+暗色同款零色差),本类仅负责
   定位基准,背景/边线由 panel 类提供 */
.xnngy-navbar-overlay {
  position: fixed;
  z-index: 30;
  box-sizing: border-box;
}

/* 五十九次（2026-10-11）：导航栏中间可编辑区域悬浮工具条。
   复用 .ed-topbar 视觉——六十次起定位改为悬浮层内文档流(悬浮层 fixed 定位,工具条
   自然紧随编辑框下方,编辑框高度自适应时无需 JS 同步);导航栏编辑与文章编辑互斥 */
.ed-navbar-topbar {
  position: static;   /* 覆盖 .ed-topbar 的 sticky 占位规则(悬浮层无滚动上下文) */
  flex-basis: auto;   /* 覆盖 article 首行铺满规则(fixed 定位下无 flex 上下文,防混淆) */
  max-width: none;
  border: 1px solid #d1d9e0;
  border-top: 0;
  border-radius: 0 0 8px 8px;
  padding: 6px 10px;
}
