/* ==================================================================
   三级权限（PRD2-SPEC 功能 3）· 按角色隐藏金额
   ------------------------------------------------------------------
   这是**第二道防线**：C 级的金额字段服务端本就不返回，这里保证
   页面上连金额列 / 金额输入 / 金额按钮都不出现。
   标记方式：所有金额相关的节点带 class="money"（或 data-money="1"）。
   html[data-money-hidden="1"] 由 /role.js 写入（验收用覆盖开关也在它里面）。
   ================================================================== */

html[data-money-hidden="1"] .money,
html[data-money-hidden="1"] [data-money] {
  display: none !important;
}

/* ==================================================================
   顶栏设计令牌（**全站唯一来源**：改高度 / 改颜色只改这一段）
   ------------------------------------------------------------------
   · 抬头固定高度、导航胶囊、右侧动作按钮的语义色全部取这里的变量；
   · 8 个工作台页面共用 /role.css（顶栏由 /role.js 运行时生成），
     所以"改一处 = 全站一致"，页面自己的 CSS 里不再出现顶栏色值；
   · 页面正文（单据 / 打印 / 导出）**一个像素都不受影响**：
     下面所有规则都限定在 .header-inner 之内，正文按钮另有一套样式。
   ================================================================== */
:root {
  /* —— 高度体系（导航项与动作按钮共用同一个控件高度）—— */
  --dsh-header-h: 62px;          /* 顶栏固定高度（全站同高；文字/按钮垂直居中） */
  --dsh-header-h-narrow: 84px;   /* ≤860px：品牌行 + 动作行两行时的固定高度 */
  --dsh-ctl-h: 34px;             /* 导航胶囊 / 动作按钮的统一高度 */
  --dsh-gap: 6px;                /* 顶栏内各块之间的横向间距 */
  --dsh-row-gap: 8px;            /* 窄屏两行布局的行距 */
  --dsh-brand-logo: 26px;        /* 品牌 Logo 尺寸（给"9 项导航 + 6 个动作"腾出同排空间） */
  --dsh-brand-font: 13px;        /* 品牌字号 */

  /* —— 左侧全局导航：独立胶囊（底色 + 圆角 + 左右等内边距）—— */
  --dsh-nav-bg: #eef1f6;
  --dsh-nav-bg-hover: #e2e8f3;
  --dsh-nav-bg-current: #d8e6fb;
  --dsh-nav-fg: #3a3a3e;
  --dsh-nav-fg-hover: #1d1d1f;
  --dsh-nav-fg-current: #0057b8;
  --dsh-nav-pad-x: 7px;
  --dsh-nav-gap: 4px;            /* 胶囊之间的间隙：留出白缝，不做成"整条灰底" */
  --dsh-nav-font: 12.5px;
  --dsh-nav-badge-bg: #ffffff;

  /* —— 右侧本页动作（语义色：主操作 / 新增导入 / 次要导航 / 危险）—— */
  --dsh-btn-font: 12.5px;
  --dsh-btn-pad-x: 8px;
  --dsh-btn-gap: 4px;
  /* 主操作 = 实心蓝（保存报价 / 保存结算 / 生成合同 / 预览与导出） */
  --dsh-btn-bg-primary: #0071e3;
  --dsh-btn-bg-primary-hover: #0060c0;
  --dsh-btn-fg-primary: #ffffff;
  --dsh-btn-line-primary: #0071e3;
  /* 新增 / 导入类 = 浅蓝底 + 蓝描边（新建报价 / 导入报价表格 / 新建子账号） */
  --dsh-btn-bg-add: #e8f2ff;
  --dsh-btn-bg-add-hover: #d9eaff;
  --dsh-btn-fg-add: #0060c0;
  --dsh-btn-line-add: #b6d5f8;
  /* 次要 / 导航类 = 浅灰底（已保存报价 / 返回编辑 / 刷新 / 跨页入口） */
  --dsh-btn-bg-quiet: #f0f1f5;
  --dsh-btn-bg-quiet-hover: #e5e7ee;
  --dsh-btn-fg-quiet: #3a3a3e;
  --dsh-btn-line-quiet: #e4e5eb;
  /* 危险类 = 红系（删除 / 清空；**只有真的危险操作才用**） */
  --dsh-btn-bg-danger: #fdeff0;
  --dsh-btn-bg-danger-hover: #fbe0e2;
  --dsh-btn-fg-danger: #c8102e;
  --dsh-btn-line-danger: #f3c6ca;
}

/* C 级提示行（页面里插入的说明） */
.role-banner {
  display: flex;
  align-items: center;
  gap: 8px;
  margin: 0 0 14px;
  padding: 10px 14px;
  border: 1px solid #e5e5ea;
  border-left: 3px solid #0071e3;
  border-radius: 12px;
  background: #f5faff;
  color: #1d1d1f;
  font-size: 12.5px;
  line-height: 1.5;
}
.role-banner .role-banner-badge {
  flex: none;
  padding: 2px 8px;
  border-radius: 999px;
  background: #0071e3;
  color: #fff;
  font-size: 11px;
}
html[data-money-hidden="1"] .role-banner { display: flex; }
html:not([data-money-hidden="1"]) .role-banner { display: none; }

/* 首页 / 工作台身份行：名称 · 角色 */
.identity-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  font-size: 12.5px;
  color: #6e6e73;
}
.identity-row .identity-name { color: #1d1d1f; font-weight: 600; }
.identity-row .identity-role {
  padding: 2px 8px;
  border-radius: 999px;
  background: #f0f0f5;
  color: #333336;
  font-size: 11.5px;
}

/* 结算页用来区分列宽的页面级容器（本身不加样式，仅作选择器锚点） */
.settlement-layout { display: grid; }

/* C 级只读：禁用的控件给一点视觉反馈（避免用户以为"点了没反应"） */
.is-role-readonly input:disabled,
.is-role-readonly textarea:disabled,
.is-role-readonly select:disabled {
  background: #f5f5f7;
  color: var(--muted, #6e6e73);
  cursor: not-allowed;
}
.is-role-readonly .row-actions button,
.is-role-readonly .group-tools button,
.is-role-readonly .detail-tools button,
.is-role-readonly .heading-actions button {
  opacity: .45;
}

/* 「非 C 级才显示」的补充说明（例如报价页明细工具条上的单价提示） */
html[data-money-hidden="1"] .non-money { display: none !important; }

/* 会话失效提示（子账号被重置密码 / 停用后旧会话 401）：红色告警样式 */
.role-banner[data-state="lost"] {
  display: flex !important;
  border-color: #ffd0d3;
  border-left-color: #d70015;
  background: #fff5f5;
  color: #a3000f;
}

/* ------------------------------------------------------------------ *
 * 明细表：隐藏「单价 / 金额」两列后重排列宽
 * ------------------------------------------------------------------
 * 必须按「报价页」「结算页」分开写：报价行 7 格、结算行 8 格，
 * 两页都引用同一份 interface.css 的 1180 / 860 / 620 断点。
 * 两页的 <form id="form"> 都带 .quote-layout（结算页沿用同一套骨架），
 * 所以用页面上独有的容器区分：结算页的明细区带 .settlement-settings。
 * ------------------------------------------------------------------ */
html[data-money-hidden="1"] .rows .row:not(.row-head),
html[data-money-hidden="1"] .rows .row-head {
  /* 报价页：项目｜描述｜数量｜单位｜[单价]｜[金额]｜操作 */
  grid-template-columns: minmax(130px, 1.5fr) minmax(150px, 2fr) 78px 74px minmax(96px, 1fr) 66px;
}
html[data-money-hidden="1"] .settlement-layout .rows .row:not(.row-head),
html[data-money-hidden="1"] .settlement-layout .rows .row-head {
  /* 结算页：项目｜说明｜数量｜单位｜[单价]｜变动｜[金额]｜操作 */
  grid-template-columns: minmax(130px, 1.5fr) minmax(150px, 2fr) 78px 74px 84px 108px 66px;
}

@media (max-width: 1180px) {
  html[data-money-hidden="1"] .rows .row:not(.row-head),
  html[data-money-hidden="1"] .rows .row-head {
    grid-template-columns: minmax(120px, 1.4fr) minmax(130px, 1.7fr) 70px 66px minmax(88px, 1fr) 62px;
  }
  html[data-money-hidden="1"] .settlement-layout .rows .row:not(.row-head),
  html[data-money-hidden="1"] .settlement-layout .rows .row-head {
    grid-template-columns: minmax(120px, 1.4fr) minmax(130px, 1.7fr) 70px 66px 78px 96px 62px;
  }
}

@media (max-width: 860px) {
  html[data-money-hidden="1"] .rows .row:not(.row-head),
  html[data-money-hidden="1"] .rows .row-head,
  html[data-money-hidden="1"] .settlement-layout .rows .row:not(.row-head),
  html[data-money-hidden="1"] .settlement-layout .rows .row-head {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

/* 620 断点：原模板用 grid-template-areas 显式摆放（含 price / amount 两格），
   金额列消失后必须重新摆放，否则项目 / 说明会挤在同一格。 */
@media (max-width: 620px) {
  /* C 级金额列整列消失：行内只剩 项目 / 说明 / 数量 / 单位 / 变动 / 操作。
     模板与 interface.css 的 620 断点保持一致（说明整行独占），
     金额区域留空即可 —— 不要再用 grid-area:auto 覆盖，那会把命名区域的列也冲掉。 */
  html[data-money-hidden="1"] .rows .row:not(.row-head) {
    grid-template-columns: minmax(0, 1fr) 92px 94px;
    grid-template-areas:
      "project qty    unit"
      "desc    desc   desc"
      "actions actions actions";
  }
  html[data-money-hidden="1"] .settlement-layout .rows .row:not(.row-head) {
    grid-template-columns: minmax(0, 1fr) 92px 94px;
    grid-template-areas:
      "project qty    unit"
      "desc    desc   desc"
      "change  change actions";
  }
}

/* 「单价（含税）」这类纯金额表头文字：列没了，文字也不该留下 */
html[data-money-hidden="1"] .money-label { display: none !important; }

/* 汇总区整块是金额时（报价总览 / 结算总览）连标题一起收起，避免空卡片 */
html[data-money-hidden="1"] .summary.money { display: none !important; }

/* 资料库里金额没了以后，右侧按钮组仍然贴右 */
html[data-money-hidden="1"] .saved-side { gap: 10px; }

/* 列表项上的只读说明（C 级看不到编辑入口时的替代文案） */
.saved-readonly {
  font-size: 12px;
  color: #86868b;
  white-space: nowrap;
}

/* ------------------------------------------------------------------ *
 * 顶栏里的「档期日历」入口（PHASE2-SPEC 功能 1）
 * ------------------------------------------------------------------
 * 各工作台顶栏的按钮是 <button class="quiet-button">；日历入口是链接，
 * 所以在这里补一条 `a.quiet-button` 的等价样式（role.css 是所有页面共同引用的
 * 样式表，避免同一个链接在报价/结算/日历三页长得不一样）。
 * 注意：没有遮罩的 <a> 会触发浏览器对 http 页面的 HTTP Basic 弹框，这里用
 * ::before 铺一层透明遮罩把点击交给链接本身，行为与 <button> 一致。
 * ------------------------------------------------------------------ */
a.quiet-button {
  position: relative;
  display: inline-flex;
  align-items: center;
  border: 1px solid transparent;
  border-radius: 999px;
  padding: 9px 16px;
  color: #0071e3;
  font-size: 14px;
  line-height: 1.5;
  text-decoration: none;
  white-space: nowrap;
  transition: background .18s ease, border-color .18s ease, color .18s ease;
}
a.quiet-button::before { content: ""; position: absolute; inset: 0; }
a.quiet-button:hover { background: #0071e30f; border-color: transparent; }

/* 顶栏入口分组（用于按角色整体显隐，见 html[data-money-hidden="1"] .money） */
.header-nav { display: inline-flex; align-items: center; }

/* ==================================================================
   顶栏「重新规划排序」（用户 2026-10-16 · 红框标的那一条）
   ------------------------------------------------------------------
   左 = 全局导航（活动执行宝｜报价工作台｜结算工作台｜档期日历｜月账单汇总｜电子签章｜
               公章与 Logo｜我的文件｜子账号管理[仅 A]）
   右 = 本页动作（各页原有的按钮，一个都没挪走）
   中间 = 一条细竖线
   窄屏（≤1180px）= 全局导航折成「更多」菜单，本页动作自己换行（390px 不横滚）

   DOM 由 /role.js 运行时生成（一处实现 → 9 个页面同一套排布）；
   各页原有的全局入口节点**保留原处**、由下面第一条规则收进"导航收纳区"不显示，
   这样依赖它们 id 的既有代码与既有验收脚本一行都不用改。
   ================================================================== */

/* ① 旧的全局入口节点：不显示（语义与显示都搬到新导航上；DOM 保留给既有代码用） */
.header-inner .actions > .header-nav,
.header-inner .actions > .nav-link,
.header-inner .actions > [data-subusers-entry] {
  display: none !important;
}

/* ② 顶栏容器：**固定高度**（全站同高），文字与按钮一律垂直居中。
   ⚠️ 高度取 --dsh-header-h（62px）：既在用户给的 56–64px 区间内，又与各页
      `.row-head { top: 62px }` 等既有吸顶偏移同值（改高度只需改这一个变量）。
   ⚠️ flex: 0 0 auto（**不压缩、不省略**）：早先写成 `flex: 1 1 auto` + 列表 overflow:hidden，
      结果本页动作一宽就把导航挤窄、「我的文件」被裁掉半截（真机上看得见）。
      导航是"集成导航键"，任何宽度下都必须完整可见。 */
.header-inner.has-dsh-nav {
  height: var(--dsh-header-h);
  min-height: var(--dsh-header-h);
  max-height: var(--dsh-header-h);
  flex-wrap: nowrap;
  align-items: center;
  justify-content: flex-start;
  gap: var(--dsh-gap);
  padding: 0;
}
.header-inner > .dsh-nav {
  display: flex;
  align-items: center;
  flex: 0 0 auto;
}
/* 品牌块：**绝不压缩、绝不折行**（用户口径：品牌名被挤成竖排 3 行是不允许的）。
   flex: 0 0 auto 让它不参与收缩，white-space: nowrap 保证单行（字号/Logo 走变量）。 */
.header-inner.has-dsh-nav .brand {
  flex: 0 0 auto;
  min-width: 0;
  font-size: var(--dsh-brand-font);
  gap: 8px;
  white-space: nowrap;
}
.header-inner.has-dsh-nav .brand span { white-space: nowrap; }
.header-inner.has-dsh-nav .brand img { width: var(--dsh-brand-logo); height: var(--dsh-brand-logo); }

/* 顶栏里的身份行（公司名 + 角色）：也不许折成两行把顶栏撑高 */
.header-inner .identity-row { flex-wrap: nowrap; white-space: nowrap; }
.dsh-nav-list {
  display: flex;
  align-items: center;
  flex-wrap: nowrap;
  gap: var(--dsh-nav-gap);
  min-width: 0;
}
/* 左侧导航项 = 独立胶囊：有底色、圆角、左右等内边距，与右侧动作按钮同高 */
.dsh-nav-link {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  flex: none;
  height: var(--dsh-ctl-h);
  padding: 0 var(--dsh-nav-pad-x);
  border: 1px solid transparent;
  border-radius: 999px;
  background: var(--dsh-nav-bg);
  color: var(--dsh-nav-fg);
  font-size: var(--dsh-nav-font);
  font-weight: 500;
  line-height: 1;
  text-decoration: none;
  white-space: nowrap;
  transition: background .18s ease, color .18s ease;
}
.dsh-nav-link:hover { background: var(--dsh-nav-bg-hover); color: var(--dsh-nav-fg-hover); }
.dsh-nav-link.is-current {
  background: var(--dsh-nav-bg-current);
  color: var(--dsh-nav-fg-current);
  font-weight: 600;
}
.dsh-nav-badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 20px;
  height: 18px;
  padding: 0 6px;
  border-radius: 999px;
  background: var(--dsh-nav-badge-bg);
  color: var(--dsh-nav-fg);
  font-size: 11px;
  font-weight: 500;
  font-variant-numeric: tabular-nums;
}
.dsh-nav-badge[hidden] { display: none !important; }

/* ③ 细竖线：全局导航与本页动作之间（本页动作为空的页面由 role.js 直接不插这条线） */
.header-inner > .dsh-divider {
  flex: none;
  align-self: center;
  width: 1px;
  height: 20px;
  margin: 0;
  background: var(--line-strong, #d2d2d7);
}

/* ④ 「更多」折叠按钮：桌面不出现（窄屏由下面的断点打开）；外观与导航胶囊同族。
   ⚠️ 选择器带 `.dsh-nav` 前缀：各页的 `button.quiet-button`（interface.css）比单个类名更具体，
      不加前缀会被它按"透明底 + 蓝字"盖掉，折叠按钮就没有底色了。 */
.dsh-nav .dsh-nav-toggle {
  display: none;
  flex: none;
  align-items: center;
  height: var(--dsh-ctl-h);
  padding: 0 calc(var(--dsh-nav-pad-x) + 2px);
  border: 1px solid transparent;
  border-radius: 999px;
  background: var(--dsh-nav-bg);
  color: var(--dsh-nav-fg);
  font-size: var(--dsh-nav-font);
  font-weight: 500;
  line-height: 1;
  cursor: pointer;
}
.dsh-nav .dsh-nav-toggle:hover { background: var(--dsh-nav-bg-hover); color: var(--dsh-nav-fg-hover); }

/* ⑤ 本页动作：**永远只占一行**（flex-wrap: nowrap），整组贴右。
   高度与左侧导航胶囊同高（同一个 --dsh-ctl-h）。
   ❗一行放不下时**不换行、也不横向滚动**：由 role.js 把放不下的那几个搬进
     「更多操作」下拉（见下面 ⑥）。所以这里不能有 overflow 裁剪，否则下拉会被切掉。 */
.header-inner > .actions {
  position: relative;
  flex: 1 1 auto;
  min-width: 0;
  margin-left: 0;
  gap: var(--dsh-btn-gap);
  flex-wrap: nowrap;
  justify-content: flex-end;
  align-items: center;
  overflow: visible;
  padding: 2px 0;
}

/* 语义色**只在这里映射一次**：给语义组挂 4 个局部变量，
   下面所有按钮（行内 + 「更多操作」面板里）统一用 var(--b-*, 兜底=次要) 上色 ——
   "要改颜色改哪里"永远只有一处（:root 的 --dsh-btn-*）。 */
.header-inner .actions > button.primary,
.header-inner .actions .dsh-more-panel > button.primary,
.header-inner .actions > button.save-button,
.header-inner .actions .dsh-more-panel > button.save-button,
.header-inner .actions > button.quiet-button#make-contract,
.header-inner .actions .dsh-more-panel > button.quiet-button#make-contract,
.header-inner .actions > button[data-btn-role="primary"],
.header-inner .actions .dsh-more-panel > button[data-btn-role="primary"] {
  --b-bg: var(--dsh-btn-bg-primary);
  --b-bg-h: var(--dsh-btn-bg-primary-hover);
  --b-fg: var(--dsh-btn-fg-primary);
  --b-line: var(--dsh-btn-line-primary);
}
.header-inner .actions > button.quiet-button#new,
.header-inner .actions .dsh-more-panel > button.quiet-button#new,
.header-inner .actions > button.quiet-button#import-open,
.header-inner .actions .dsh-more-panel > button.quiet-button#import-open,
.header-inner .actions > button#new-subuser,
.header-inner .actions .dsh-more-panel > button#new-subuser,
.header-inner .actions > button[data-btn-role="add"],
.header-inner .actions .dsh-more-panel > button[data-btn-role="add"],
.header-inner .actions > a[data-btn-role="add"],
.header-inner .actions .dsh-more-panel > a[data-btn-role="add"] {
  --b-bg: var(--dsh-btn-bg-add);
  --b-bg-h: var(--dsh-btn-bg-add-hover);
  --b-fg: var(--dsh-btn-fg-add);
  --b-line: var(--dsh-btn-line-add);
}
.header-inner .actions > button.danger,
.header-inner .actions .dsh-more-panel > button.danger,
.header-inner .actions > button[data-btn-role="danger"],
.header-inner .actions .dsh-more-panel > button[data-btn-role="danger"],
.header-inner .actions > a[data-btn-role="danger"],
.header-inner .actions .dsh-more-panel > a[data-btn-role="danger"] {
  --b-bg: var(--dsh-btn-bg-danger);
  --b-bg-h: var(--dsh-btn-bg-danger-hover);
  --b-fg: var(--dsh-btn-fg-danger);
  --b-line: var(--dsh-btn-line-danger);
}

/* 动作按钮本体：统一高度 + 统一字号 + 语义底色（色值全部来自 :root 的变量） */
.header-inner .actions > button,
.header-inner .actions > a.quiet-button,
.header-inner .actions > a.nav-link,
.header-inner .actions .dsh-more-panel > button,
.header-inner .actions .dsh-more-panel > a {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex: none;
  height: var(--dsh-ctl-h);
  padding: 0 var(--dsh-btn-pad-x);
  border: 1px solid var(--b-line, var(--dsh-btn-line-quiet));
  border-radius: 999px;
  background: var(--b-bg, var(--dsh-btn-bg-quiet));
  color: var(--b-fg, var(--dsh-btn-fg-quiet));
  font-size: var(--dsh-btn-font);
  font-weight: 500;
  line-height: 1;
  white-space: nowrap;
  text-decoration: none;
  cursor: pointer;
  transition: background .18s ease, border-color .18s ease, color .18s ease;
}
.header-inner .actions > button:hover,
.header-inner .actions > a.quiet-button:hover,
.header-inner .actions > a.nav-link:hover,
.header-inner .actions .dsh-more-panel > button:hover,
.header-inner .actions .dsh-more-panel > a:hover {
  background: var(--b-bg-h, var(--dsh-btn-bg-quiet-hover));
  border-color: var(--b-line, var(--dsh-btn-line-quiet));
  color: var(--b-fg, var(--dsh-btn-fg-quiet));
}
.header-inner .actions > button:disabled { opacity: .45; cursor: not-allowed; }

/* ⑥ 「更多操作」：一行放不下时由 role.js 用起来的那个下拉
   （默认藏起来；面板里的按钮与行内同高同色，只是整宽左对齐）。
   ⚠️ [hidden] 必须写死 display:none!important —— 否则会被上面的 display:inline-flex
      覆盖，下拉关不掉（客服弹窗踩过同一个坑）。 */
.header-inner .actions > .dsh-more-toggle[hidden],
.header-inner .actions > .dsh-more-panel[hidden] { display: none !important; }

.header-inner .actions > .dsh-more-panel {
  position: absolute;
  top: calc(100% + 8px);
  right: 0;
  z-index: 40;
  display: flex;
  flex-direction: column;
  align-items: stretch;
  gap: 4px;
  min-width: 176px;
  max-height: min(70vh, 520px);
  overflow: auto;
  margin: 0;
  padding: 8px;
  border: 1px solid var(--line, #e5e5ea);
  border-radius: var(--r-md, 14px);
  background: var(--surface, #fff);
  box-shadow: var(--shadow-md, 0 8px 24px #0000000f);
}
.header-inner .actions .dsh-more-panel > button,
.header-inner .actions .dsh-more-panel > a {
  width: 100%;
  justify-content: flex-start;
  flex: none;
}

/* ------------------------ 窄屏：全局导航折成「更多」 ------------------------ *
 * 断点为什么是 1399px：顶栏容器宽度 = min(1360px, 100vw - 40px)，也就是
 * **视口 ≥1400px 时容器正好是 1360px**，此时 9 项导航与最宽的一页动作（报价页 6 个）
 * 刚好同排放下；再窄就没有"导航不压缩 + 按钮不藏"的余地了，于是把导航收进「更多」
 * （9 项一个不少，只是折叠），把宽度让给本页动作 —— **任何时候都不挤压导航、也不裁掉它**。
 * 子账号页的顶栏容器只有 1080px（与该页正文同宽），见下面单独一条。
 * ------------------------------------------------------------------------- */
@media (max-width: 1399px) {
  .header-inner > .dsh-nav {
    flex: 0 0 auto;
    position: relative;
  }
  .dsh-nav-list {
    display: none;
    position: absolute;
    top: calc(100% + 10px);
    left: 0;
    z-index: 40;
    flex-direction: column;
    align-items: stretch;
    gap: 2px;
    min-width: 208px;
    max-height: min(70vh, 520px);
    overflow: auto;
    padding: 8px;
    border: 1px solid var(--line, #e5e5ea);
    border-radius: var(--r-md, 14px);
    background: var(--surface, #fff);
    box-shadow: var(--shadow-md, 0 8px 24px #0000000f);
  }
  .header-inner > .dsh-nav[data-open="1"] .dsh-nav-list { display: flex; }
  .dsh-nav-list .dsh-nav-link {
    width: 100%;
    justify-content: flex-start;
    padding: 0 12px;
    border-radius: var(--r-sm, 10px);
  }
  .dsh-nav .dsh-nav-toggle { display: inline-flex; }
}

/* 子账号管理页：顶栏容器只有 1080px（与正文同宽），装不下 9 项导航 + 3 个动作按钮，
   所以这一页在任何宽度下都用「更多」折叠（9 项仍在菜单里，一个不少）。 */
.subusers-page .header-inner > .dsh-nav .dsh-nav-list { display: none; }
.subusers-page .header-inner > .dsh-nav .dsh-nav-toggle { display: inline-flex; }
.subusers-page .header-inner > .dsh-nav[data-open="1"] .dsh-nav-list { display: flex; }

/* 很窄的屏幕：品牌行 + 动作行两行，**总高度仍是固定值**（跨页同高、不横滚）。
   动作行同样"只占一行"：放不下的由 role.js 收进「更多操作」（不换行、不横滚）。 */
@media (max-width: 860px) {
  .header-inner.has-dsh-nav {
    height: var(--dsh-header-h-narrow);
    min-height: var(--dsh-header-h-narrow);
    max-height: var(--dsh-header-h-narrow);
    flex-wrap: wrap;
    align-content: center;
    align-items: center;
    row-gap: var(--dsh-row-gap);
    column-gap: var(--dsh-gap);
  }
  .header-inner > .dsh-nav { order: 2; margin-left: auto; }
  .header-inner > .dsh-divider { display: none; }
  .header-inner > .actions {
    order: 3;
    width: 100%;
    flex: 1 1 100%;
    margin-left: 0;
    justify-content: flex-end;
    min-height: var(--dsh-ctl-h);
  }
  .dsh-nav-list { left: auto; right: 0; }
}

@media (max-width: 420px) {
  :root { --dsh-nav-pad-x: 7px; --dsh-btn-pad-x: 8px; }
  .dsh-nav-list { min-width: 184px; }
}

