/* ============================================================
   山木金代采平台 · 新前端补充样式（Bootstrap5 之上）
   仅放老项目两套 CSS 没有的部分：AI 面板 / 备注图粘贴格 / 杂项
   ============================================================ */

/* ---------- 页脚贴底（内容不足一屏时页脚也固定在视口底部） ---------- */
.app-shell { min-height: 100vh; display: flex; flex-direction: column; }
.app-shell > main { flex: 1 0 auto; }
.app-shell > .footer { margin-top: auto; }

/* ---------- 页脚样式 ---------- */
.site-footer {
  margin-top: auto;
  padding: 20px 16px calc(18px + env(safe-area-inset-bottom, 0px));
  background: #f8f9fb;
  border-top: 1px solid #e9ecef;
  text-align: center;
}
.site-footer .footer-container {
  max-width: 1140px; margin: 0 auto;
  display: flex; flex-direction: column; align-items: center; gap: 4px;
}
.site-footer .footer-icp a,
.site-footer .footer-extra {
  font-size: 12.5px; color: #8a94a6; line-height: 1.7;
  text-decoration: none; letter-spacing: .3px;
}
.site-footer .footer-icp a { transition: color .15s ease; }
.site-footer .footer-icp a:hover,
.site-footer .footer-icp a:focus { color: #0d6efd; text-decoration: underline; }
.site-footer .footer-divider { width: 1px; height: 12px; background: #d5dae2; }
@media (min-width: 576px) {
  .site-footer .footer-container { flex-direction: row; justify-content: center; gap: 12px; }
}

/* ---------- 产品图单元格（悬停聚焦后 Ctrl+V 粘贴上传） ---------- */
.pimg-cell {
  min-width: 72px; min-height: 46px; border: 1px dashed #ced4da; border-radius: 4px;
  padding: 2px; text-align: center; cursor: pointer; position: relative;
  display: inline-flex; align-items: center; justify-content: center;
  background: #fff; outline: none;
}
.pimg-cell:hover, .pimg-cell:focus { border-color: #0d6efd; background: #f8fbff; }
.pimg-cell img { max-width: 64px; max-height: 64px; display: block; border-radius: 4px; }
.pimg-cell .pimg-tip { font-size: 11px; color: #adb5bd; line-height: 1.3; pointer-events: none; }
.pimg-cell .pimg-del {
  position: absolute; top: -8px; right: -8px; background: #dc3545; color: #fff;
  font-size: 11px; border-radius: 50%; width: 18px; height: 18px; line-height: 16px;
  cursor: pointer; text-align: center; z-index: 2;
}

/* ---------- AI 助手 ---------- */
.ai-fab {
  position: fixed; right: 22px; bottom: 22px; width: 52px; height: 52px;
  border-radius: 50%; border: none; cursor: pointer; z-index: 1080;
  background: linear-gradient(135deg, #0d6efd, #6610f2); color: #fff;
  font-weight: 700; font-size: 15px; letter-spacing: .5px;
  box-shadow: 0 6px 20px rgba(13,110,253,.45);
}
.ai-fab:hover { transform: translateY(-2px); }
.ai-panel {
  position: fixed; right: 22px; bottom: 84px; width: 360px; max-width: calc(100vw - 32px);
  height: 480px; background: #fff; border-radius: 12px; z-index: 1080;
  box-shadow: 0 12px 40px rgba(0,0,0,.18); display: flex; flex-direction: column; overflow: hidden;
}
.ai-head {
  padding: 10px 12px; border-bottom: 1px solid #eef0f3; display: flex;
  justify-content: space-between; align-items: center; background: #f8f9fc;
}
.ai-msgs { flex: 1; overflow-y: auto; padding: 10px; }
.ai-msg { max-width: 88%; padding: 8px 11px; border-radius: 10px; font-size: 13px; line-height: 1.55; margin-bottom: 8px; white-space: pre-wrap; word-break: break-word; }
.ai-msg.user { margin-left: auto; background: #0d6efd; color: #fff; }
.ai-msg.assistant { background: #f1f3f6; color: #222b45; }
.ai-input { display: flex; gap: 8px; padding: 10px; border-top: 1px solid #eef0f3; }

/* ---------- AI 助手：过程提示 / 动作按钮 / 反馈 / 历史 ---------- */
.ai-status {
  font-size: 12px; color: #6c757d; padding: 2px 11px 6px; display: flex; align-items: center; gap: 6px;
}
.ai-status::before {
  content: ''; width: 10px; height: 10px; border: 2px solid #c7d2fe; border-top-color: #0d6efd;
  border-radius: 50%; animation: ai-spin .7s linear infinite; flex: none;
}
@keyframes ai-spin { to { transform: rotate(360deg); } }
.ai-caret::after { content: ''; display: inline-block; width: 2px; height: 13px; background: #0d6efd; vertical-align: -2px; margin-left: 1px; animation: ai-blink 1s steps(2, start) infinite; }
@keyframes ai-blink { 50% { opacity: 0; } }

.ai-actions { display: flex; flex-wrap: wrap; gap: 6px; margin: -2px 0 8px; }
.ai-actions button {
  font-size: 12px; padding: 3px 10px; border-radius: 999px; cursor: pointer;
  border: 1px solid #0d6efd; background: #fff; color: #0d6efd; line-height: 1.5;
}
.ai-actions button:hover { background: #0d6efd; color: #fff; }

.ai-fb { display: flex; align-items: center; gap: 8px; margin: -4px 0 10px; font-size: 11px; }
.ai-fb button {
  border: 1px solid #dee2e6; background: #fff; color: #6c757d; border-radius: 999px;
  padding: 1px 9px; font-size: 11px; cursor: pointer; line-height: 1.6;
}
.ai-fb button:hover { border-color: #adb5bd; color: #343a40; }
.ai-fb button.on-up { border-color: #198754; color: #198754; background: #eaf6ef; }
.ai-fb button.on-down { border-color: #dc3545; color: #dc3545; background: #fdeeee; }
.ai-fb .fb-expect { display: flex; gap: 4px; margin-top: 4px; }
.ai-fb .fb-expect input {
  flex: 1; font-size: 11px; border: 1px solid #dee2e6; border-radius: 4px; padding: 2px 6px; min-width: 0;
}

.ai-hist { border-top: 1px solid #eef0f3; max-height: 190px; overflow-y: auto; background: #fbfcfd; }
.ai-hist-item {
  padding: 7px 12px; font-size: 12px; border-bottom: 1px solid #f1f3f6; cursor: pointer;
  display: flex; justify-content: space-between; align-items: center; gap: 6px; color: #343a40;
}
.ai-hist-item:hover { background: #f1f5ff; }
.ai-hist-item.cur { background: #e7f0ff; color: #0d6efd; }
.ai-hist-item .t { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ai-hist-item .x { color: #adb5bd; padding: 0 3px; flex: none; }
.ai-hist-item .x:hover { color: #dc3545; }
.ai-hist-item input {
  flex: 1; font-size: 12px; border: 1px solid #0d6efd; border-radius: 4px; padding: 1px 5px; min-width: 0;
}

/* ===== 字段级 AI 问号 ===== */
.ai-q {
  display: inline-flex; align-items: center; justify-content: center;
  width: 14px; height: 14px; margin-left: 3px; border-radius: 50%;
  background: #e9f1ff; color: #0d6efd; font-size: 10px; line-height: 1;
  cursor: pointer; user-select: none; vertical-align: middle; font-weight: 600;
}
.ai-q:hover { background: #0d6efd; color: #fff; }
.ai-tip-card {
  border: 1px solid #cfe0ff; background: #f6f9ff; border-radius: 8px;
  padding: 10px 12px; max-width: 720px;
}
.ai-tip-card .btn-close { --bs-btn-close-opacity: .5; }

@media (max-width: 575.98px) {
  .ai-panel { right: 8px; left: 8px; width: auto; bottom: 76px; height: 60vh; }
  .ai-fab { right: 14px; bottom: 14px; }
}

/* ---------- 批量提交订单：可粘贴备注图单元格 ---------- */
.book-img-cell {
  min-width: 72px; min-height: 46px; border: 1px dashed #ced4da; border-radius: 4px;
  padding: 2px; text-align: center; cursor: pointer; position: relative;
  display: inline-block; vertical-align: middle; background: #fff;
}
.book-img-cell:hover { border-color: #0d6efd; background: #f8fbff; }
.book-img-cell img { max-width: 64px; max-height: 64px; display: block; margin: 0 auto; border-radius: 4px; }
.book-img-cell .book-img-del {
  position: absolute; top: -8px; right: -8px; background: #dc3545; color: #fff;
  font-size: 11px; border-radius: 50%; width: 18px; height: 18px; line-height: 16px;
  cursor: pointer; text-align: center;
}

/* ---------- 批量表格 ---------- */
.batch-wrap { overflow-x: auto; border: 1px solid #dee2e6; border-radius: 6px; }
.batch-tbl { width: 100%; border-collapse: separate; border-spacing: 0; font-size: 13px; }
.batch-tbl th {
  background: #f8f9fa; padding: 8px 10px; text-align: left; white-space: nowrap;
  border-bottom: 1px solid #dee2e6; font-weight: 600; color: #495057;
}
.batch-tbl td { padding: 5px 6px; border-bottom: 1px solid #f1f3f6; vertical-align: middle; }
.batch-tbl tbody tr:hover td { background: #f8f9fc; }
.batch-tbl tr.row-err td { background: #fff5f5; }
.batch-tbl input { border: 1px solid #dee2e6; border-radius: 4px; padding: 4px 6px; font-size: 13px; width: 100%; min-width: 70px; }
.batch-tbl input:focus { outline: none; border-color: #0d6efd; box-shadow: 0 0 0 2px rgba(13,110,253,.12); }
.batch-tbl .req { color: #dc3545; margin-left: 1px; }
.batch-tbl .sno { width: 46px; text-align: center; color: #6c757d; }
.batch-tbl .op { width: 64px; }

/* ---------- 通用小工具 ---------- */
.filter-bar { background: #fff; border: 1px solid #eaecef; border-radius: 8px; padding: 14px 16px; margin-bottom: 14px; }
.filter-bar .row > [class*="col-"] { margin-bottom: 10px; }
.stat-card { border-radius: 10px; background: #fff; box-shadow: 0 2px 8px rgba(0,0,0,.04); padding: 16px; text-align: center; height: 100%; }
.stat-card .ic { font-size: 22px; }
.stat-card .num { font-size: 24px; font-weight: 700; margin-top: 4px; }
.stat-card .lb { font-size: 13px; color: #868e96; margin-top: 2px; }
.clickable-row { cursor: pointer; }
.text-money-lg { font-size: 26px; font-weight: 700; color: #e74c3c; }
.qr-tile { border: 1px solid #eaecef; border-radius: 8px; padding: 14px; text-align: center; height: 100%; background: #fff; }
.qr-tile img { max-width: 180px; width: 100%; border-radius: 6px; }
.qr-tile .stars { color: #f0a020; font-size: 12px; }
.section-title { font-size: 15px; font-weight: 600; color: #222b45; margin: 0 0 12px; }
.empty-tip { text-align: center; color: #adb5bd; padding: 3rem 1rem; font-size: .9rem; }
.empty-tip::before { content: '📭'; display: block; font-size: 2.2rem; margin-bottom: .4rem; }
.mini-muted { font-size: 12px; color: #868e96; }
.img-set { display: flex; gap: 4px; flex-wrap: wrap; }
.img-set img { width: 42px; height: 42px; object-fit: cover; border: 1px solid #dee2e6; border-radius: 4px; cursor: pointer; }

/* ---------- 可删除缩略图（任务编辑弹窗的「商品图 / 备注图」） ----------
   ⚠️ 血泪坑：这里**不能**用 bootstrap 的 .btn-close + .btn-close-white 画红色圆底删除键。
      .btn-close-white 自带 filter: invert(1) grayscale(1) brightness(2)，filter 作用于
      **整个元素**（含背景色）：红底 #dc3545 → 反色 → 灰度 → 提亮 → **纯白**，而 ✕ 图标
      也是白的 —— 结果白底白叉，肉眼完全看不见（只在深色缩略图上留一道白缺口）。
      改用真实文字 ✕ + 自绘圆底：无 filter、白描边 + 投影，在任意图片上都清晰可见。 */
.img-thumb { position: relative; display: inline-block; line-height: 0; }
.img-del {
  position: absolute; top: -9px; right: -9px; z-index: 2;
  width: 22px; height: 22px; padding: 0;
  display: inline-flex; align-items: center; justify-content: center;
  border: 2px solid #fff; border-radius: 50%;
  background: #dc3545; color: #fff;
  font-size: 13px; line-height: 1; font-weight: 700; font-family: Arial, Helvetica, sans-serif;
  box-shadow: 0 1px 4px rgba(0, 0, 0, .35);
  cursor: pointer; transition: transform .12s ease, background .12s ease;
}
.img-del:hover { background: #bb2d3b; transform: scale(1.12); }
.img-del:active { transform: scale(.96); }

/* ---------- 长单号防溢出串列（平台单号 29~31 位无空格，不能撑破单元格） ---------- */
.admin-table tbody td,
.table tbody td { overflow-wrap: anywhere; word-break: break-word; }
/* 单号列给一个上限，超长自动折行，避免把相邻列挤没 */
.admin-table .cell-no, .table .cell-no { max-width: 220px; }
.mono-no { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; letter-spacing: -.2px; }

/* ===== 详情页字段表格（订单信息） ===== */
.detail-table { width: 100%; border-collapse: collapse; font-size: .875rem; }
.detail-table th, .detail-table td {
  border: 1px solid #e9ecf2; padding: 8px 12px; vertical-align: middle; text-align: left;
}
.detail-table th {
  width: 110px; background: #f8f9fc; color: #5a6478;
  font-weight: 600; white-space: nowrap;
}
.detail-table td { word-break: break-all; }
@media (max-width: 767.98px) {
  .detail-table th, .detail-table td { padding: 6px 8px; }
  .detail-table th { width: 88px; font-size: .8125rem; }
}

/* ---------- 单号复制按钮 ---------- */
.app-table .btn-copy, .admin-table .btn-copy {
  padding: 0 .3rem;
  font-size: .72rem;
  line-height: 1.5;
  opacity: .55;
  flex: none;
}
.app-table .btn-copy:hover, .admin-table .btn-copy:hover { opacity: 1; }

/* ===== 图片角标：多张图只显示 1 张 + 右上角 ×N ===== */
.img-count { position: relative; display: inline-block; line-height: 0; }
.img-count > img { width: 42px; height: 42px; object-fit: cover; border: 1px solid #dee2e6; border-radius: 4px; cursor: pointer; }
.img-count-badge {
  position: absolute; top: -7px; right: -7px;
  min-width: 18px; height: 18px; padding: 0 4px;
  background: #dc3545; color: #fff; font-size: 11px; font-weight: 600;
  line-height: 18px; text-align: center; border-radius: 9px;
  box-shadow: 0 1px 2px rgba(0,0,0,.2);
  pointer-events: none;
}

/* ===== 列表里可点的人名 / 单号（点一下按它筛选） ===== */
.pick-link {
  cursor: pointer;
  border-bottom: 1px dashed currentColor;
  opacity: .85;
  transition: opacity .15s;
}
.pick-link:hover { opacity: 1; }

/* ===== 页内查找条（Ctrl+F）=====
   便携版桌面壳没有浏览器的「在页面中查找」，这里自带一套，浏览器里也一致。
   高亮用 CSS Highlight API（纯渲染层，不动 DOM，故不会干扰 Vue 渲染）。 */
#smj-findbar {
  position: fixed; top: 12px; right: 16px; z-index: 2147000000;
  display: none; align-items: center; gap: 6px;
  padding: 6px 8px; border-radius: 10px;
  background: #fff; border: 1px solid #dee2e6;
  box-shadow: 0 8px 28px rgba(0, 0, 0, .18);
  font-size: 13px; color: #212529;
}
#smj-findbar.on { display: flex; }
#smj-findbar .smj-find-ico { opacity: .55; }
#smj-findbar .smj-find-input {
  width: 200px; border: 0; outline: 0; background: transparent;
  font-size: 13px; color: inherit; padding: 2px 0;
}
#smj-findbar .smj-find-cnt {
  color: #6c757d; min-width: 46px; text-align: center;
  font-variant-numeric: tabular-nums;
}
#smj-findbar .smj-find-btn {
  border: 0; background: #f1f3f5; color: #343a40; border-radius: 6px;
  width: 24px; height: 24px; line-height: 1; cursor: pointer; padding: 0;
}
#smj-findbar .smj-find-btn:hover { background: #e2e6ea; }
#smj-findbar .smj-find-list {
  position: absolute; top: 100%; right: 0; margin-top: 6px;
  width: 340px; max-height: 300px; overflow: auto;
  background: #fff; border: 1px solid #dee2e6; border-radius: 10px;
  box-shadow: 0 8px 28px rgba(0, 0, 0, .18);
}
#smj-findbar .smj-find-item {
  padding: 6px 10px; cursor: pointer; word-break: break-all;
  border-bottom: 1px solid #f1f3f5; line-height: 1.5;
}
#smj-findbar .smj-find-item:hover,
#smj-findbar .smj-find-item.on { background: #fff3cd; }
#smj-findbar .smj-find-more { padding: 6px 10px; color: #6c757d; font-size: 12px; }

/* 浏览器支持 Highlight API 时生效：淡黄=全部命中，橙色=当前命中 */
::highlight(smj-find) { background-color: #ffe58f; color: #000; }
::highlight(smj-find-cur) { background-color: #ff9f43; color: #000; }

/* ---------- 后台用户管理：昵称可点击行内修改 ----------
   虚线底边 = 可点击的提示；点一下原地变输入框（见 AdminUsersView 的 nick 状态）。
   输入框宽度给足 20 字，避免中文被截断看不清。 */
.nick-cell {
  cursor: pointer; padding-bottom: 1px;
  border-bottom: 1px dashed #c8ccd4; transition: color .12s ease, border-color .12s ease;
}
.nick-cell:hover { color: #0d6efd; border-bottom-color: #0d6efd; }
.nick-cell.is-empty { color: #adb5bd; }
/* 输入框用**浮层**而不是撑开单元格：
   昵称列很窄（长用户名会折成三行），而且 .admin-table 是固定布局 —— 直接把输入框做宽
   会压到「手机」列的文字上（实测过），撑开 td 又会让整张表位移。
   浮层像表格软件那样“盖”在格子上，宽度管够、零位移。 */
.nick-wrap { position: relative; display: inline-block; max-width: 100%; }
.nick-edit {
  position: absolute; left: 0; top: 50%; transform: translateY(-50%);
  width: 170px; z-index: 6;
  box-shadow: 0 3px 12px rgba(0, 0, 0, .16);
}

/* ---------- 状态徽章：「等待物流」 ----------
   接单方已提交除物流外的材料，物流三项（渠道/单号/轨迹截图）待后补。
   用橙色系区分于「进行中」的蓝色，一眼能看出这单还差物流。 */
.badge-status-await { background:#fd7e14; color:#fff; }

/* ---------- 法定文件阅读页（LegalDocView） ----------
   正文用 v-html 渲染 LegalDocService 返回的 HTML，所以这里的样式要覆盖
   Bootstrap 的默认排版：字号、行高、标题间距都要按「长文阅读」调，
   否则一屏放不下三段，用户会以为没加载出来。 */
.legal-doc {
  font-size: 15px; line-height: 1.9; color: #23272f; word-break: break-word;
}
.legal-doc h1 {
  font-size: 24px; font-weight: 700; color: #1f2940;
  text-align: center; margin-bottom: 14px;
}
.legal-doc h2 {
  font-size: 17px; font-weight: 700; color: #1f2940;
  margin: 26px 0 10px; padding-left: 10px; border-left: 4px solid #0d6efd;
}
.legal-doc h3 {
  font-size: 15px; font-weight: 700; color: #38404d;
  margin: 18px 0 8px;
}
.legal-doc ol, .legal-doc ul { padding-left: 22px; margin-bottom: 12px; }
.legal-doc li { margin-bottom: 6px; }
/* <p> 里常有「（一）（二）」这类缩进，手动留白 */
.legal-doc p { margin-bottom: 10px; }
.legal-doc b { color: #0b4f9e; }
/* 条款里的风险提示：黄色底 + 左侧橙边 */
.legal-doc .legal-meta {
  font-size: 13px; color: #6c757d; margin-bottom: 2px;
}
.legal-doc .legal-tip {
  background: #fff8e5; border-left: 4px solid #fd7e14;
  padding: 10px 12px; border-radius: 4px;
  font-size: 13.5px; color: #664d03; margin: 14px 0 18px;
}
/* ---------- 合同签署栏 + 平台公章 ----------
   公章是透明图，320px，倒置源图已旋转正向后导出。
   网页用 <picture> 首选 WebP（33KB），PNG（121KB）只给老浏览器兜底 + 给 PDF 用。
   2026-10-29 改：章从「文档流放在文字下方」改成「绝对定位盖在落款文字上方」——
   真实用印就是压在公司名/编号上，且章略微出框、带 7° 倾斜才像盖上去的。
   multiply 让红油墨与底下文字相乘：白底自动透掉，黑字穿过油墨仍可辨认。 */
.legal-doc .contract-sign {
  display: flex; gap: 18px; margin-top: 26px;
}
.legal-doc .cs-col {
  flex: 1 1 0; min-width: 0; position: relative;
  border: 1px solid #dee2e6; border-radius: 6px;
  padding: 14px 16px; background: #fbfcfd;
}
.legal-doc .cs-title {
  font-weight: 700; color: #1f2940; margin-bottom: 8px;
  padding-bottom: 6px; border-bottom: 1px dashed #ced4da;
}
.legal-doc .cs-line { font-size: 13.5px; color: #495057; line-height: 1.9; }
/* 章尺寸 = 真实公章 4.0cm。
   换算口径：A4 版心 483pt / 正文 10.5pt = 正文宽 46 字；4.0cm = 113.4pt = 10.8 倍字号，
   网页正文 15px → 章直径 162px。弹窗里乙方栏 ~367px 的 44% 正好 161px，
   所以 width 仍按栏宽自适应，只把上下限抬到 162px 附近，窄容器才回落到 min-width。
   ⚠️ 下限不能太小：112px 只有 2.8cm，一眼就是「贴了张小图」。
   right 由用户实测确定 117px：章压在乙方公司名/信用代码上，不出框、不压「合同编号」。 */
.legal-doc .cs-seal {
  position: absolute; right: 117px; bottom: 12px;
  width: 44%; min-width: 120px; max-width: 162px;
  transform: rotate(-7deg); transform-origin: 100% 100%;
  mix-blend-mode: multiply; pointer-events: none; z-index: 2;
}
.legal-doc .cs-seal img { width: 100%; height: auto; display: block; opacity: .94; }
/* <picture> 只是「选哪种图片格式」的外壳，不参与布局：
   .cs-seal 已按栏宽定了尺寸，外壳不设 block+100% 的话，
   img 的 width:100% 找不到确定的参照，窄栏里章会塌成一条。 */
.legal-doc .cs-seal picture { display: block; width: 100%; }

/* 协议文末落款：公司名 + 生效日期，章压在文字右侧（同样 abs 叠加） */
.legal-doc .legal-seal {
  position: relative; margin: 20px 0 8px; text-align: right;
  padding-right: 64px; min-height: 150px;
}
.legal-doc .legal-seal-org { font-weight: 700; color: #1f2940; font-size: 14.5px; }
.legal-doc .legal-seal-date { font-size: 13px; color: #6c757d; margin-top: 2px; }
/* 外壳不占位（里面只有绝对定位的 img），否则会在落款下方多撑出一行高度 */
.legal-doc .legal-seal picture { display: block; }
.legal-doc .legal-seal img {
  position: absolute; right: 4px; top: -16px;
  width: 162px; height: auto;
  transform: rotate(-7deg); transform-origin: 100% 0;
  mix-blend-mode: multiply; pointer-events: none;
}

/* 手机端：签署栏改单列，否则两栏挤压到看不清。
   手机正文字号 14px → 4.0cm 尺寸约 150px，比 PC 略小一档免得盖住整栏；
   PC 的 right:117px 在窄栏里会把章推到左边，改 8px 让它仍贴右下。 */
@media (max-width: 576px) {
  .legal-doc .contract-sign { flex-direction: column; gap: 12px; }
  .legal-doc .cs-seal { width: 44%; min-width: 116px; max-width: 150px; right: 8px; }
  .legal-doc .legal-seal { padding-right: 56px; min-height: 132px; }
  .legal-doc .legal-seal img { width: 140px; top: -12px; }
}

/* 手机端再收一收字号，避免左右大幅留白 */
@media (max-width: 576px) {
  .legal-doc { font-size: 14px; line-height: 1.85; }
  .legal-doc h1 { font-size: 20px; }
  .legal-doc h2 { font-size: 16px; }
  .legal-doc ol, .legal-doc ul { padding-left: 18px; }
}

/* ---------- 协议重新确认弹窗（App 全局层，app.js） ----------
   要点：z-index 必须高于普通 modal，且 .modal-open 兜底。
   普通 modal 默认 z-index 1055，这里用 1080 保证盖住所有弹窗，
   否则用户在「调整弹窗上再点发布」时会同时看到两层，焦点混乱。 */
.terms-modal { z-index: 1080; }
.terms-modal .modal-dialog { max-width: 560px; }
.terms-modal .modal-body { max-height: 62vh; overflow-y: auto; }
.terms-modal .list-group-item { font-size: 14px; }
.terms-modal .form-check-label { cursor: pointer; }
