/* ==========================================================================
   单证通 DocSys · app.css
   上半部分：应用界面样式
   下半部分：单证 A4 打印样式
   ========================================================================== */

/* ---------------------------------------------------------------- *
 * 0. 变量与重置
 * ---------------------------------------------------------------- */
:root {
  --c-primary: #1f5fa8;
  --c-primary-d: #123a68;
  --c-primary-l: #eef3f9;
  --c-ok: #0b7a3b;
  --c-ok-l: #eaf7ef;
  --c-warn: #b8860b;
  --c-warn-l: #fff8e1;
  --c-err: #b00020;
  --c-err-l: #fdf0f0;
  --c-line: #d5dde5;
  --c-bg: #f4f6f9;
  --c-text: #1a1a1a;
  --c-muted: #6b7a8a;
  --radius: 5px;
  --shadow: 0 1px 3px rgba(18, 58, 104, .12);
}
* { box-sizing: border-box; }
html, body { height: 100%; }
body {
  margin: 0; background: var(--c-bg); color: var(--c-text);
  font-family: "Microsoft YaHei", "PingFang SC", "Hiragino Sans GB", -apple-system, sans-serif;
  font-size: 13px; line-height: 1.5; -webkit-font-smoothing: antialiased;
}
button, input, select, textarea { font-family: inherit; font-size: inherit; color: inherit; }
a { color: var(--c-primary); }

/* ---------------------------------------------------------------- *
 * 1. 布局
 * ---------------------------------------------------------------- */
.app { display: flex; flex-direction: column; height: 100vh; overflow: hidden; }

.topbar {
  flex: 0 0 auto; display: flex; align-items: center; gap: 14px;
  padding: 0 16px; height: 50px; background: var(--c-primary-d); color: #fff;
  box-shadow: var(--shadow); z-index: 20;
}
.topbar .brand { font-size: 15px; font-weight: 700; letter-spacing: .5px; white-space: nowrap; }
.topbar .brand small { font-weight: 400; opacity: .7; font-size: 11px; margin-left: 6px; }
.topbar .spacer { flex: 1; }
.topbar .tbtn {
  background: rgba(255,255,255,.12); color: #fff; border: 1px solid rgba(255,255,255,.25);
  padding: 5px 11px; border-radius: var(--radius); cursor: pointer; font-size: 12px; white-space: nowrap;
}
.topbar .tbtn:hover { background: rgba(255,255,255,.24); }
.topbar .tbtn.primary { background: #2e8b57; border-color: #2e8b57; }
.topbar .tbtn.primary:hover { background: #37a066; }
.topbar select.tbtn { color: #fff; }
.topbar select.tbtn option { color: #1a1a1a; }
.topbar .shipno { font-size: 12px; opacity: .85; white-space: nowrap; }
.topbar .badge-status {
  font-size: 11px; padding: 2px 8px; border-radius: 10px;
  background: rgba(255,255,255,.18); border: 1px solid rgba(255,255,255,.3);
}

.main { flex: 1; display: flex; min-height: 0; }

.sidebar {
  flex: 0 0 208px; background: #fff; border-right: 1px solid var(--c-line);
  overflow-y: auto; padding: 10px 0;
}
.sidebar .grp { padding: 8px 14px 4px; font-size: 11px; color: var(--c-muted);
  text-transform: uppercase; letter-spacing: .5px; }
.sidebar .nav {
  display: flex; align-items: center; gap: 8px; padding: 7px 14px; cursor: pointer;
  border-left: 3px solid transparent; font-size: 12.5px;
}
.sidebar .nav:hover { background: var(--c-primary-l); }
.sidebar .nav.active { background: var(--c-primary-l); border-left-color: var(--c-primary);
  color: var(--c-primary-d); font-weight: 600; }
.sidebar .nav .ico { width: 16px; text-align: center; }
.sidebar .nav .cnt { margin-left: auto; font-size: 10px; color: var(--c-muted); }
.sidebar .nav .dot { width: 6px; height: 6px; border-radius: 50%; margin-left: auto; }
.sidebar .nav .dot.err { background: var(--c-err); }
.sidebar .nav .dot.warn { background: var(--c-warn); }

.content { flex: 1; min-width: 0; overflow-y: auto; padding: 16px 20px 60px; }
.content.no-pad { padding: 0; overflow: hidden; }

/* ---------------------------------------------------------------- *
 * 2. 表单
 * ---------------------------------------------------------------- */
.page-head { display: flex; align-items: center; gap: 12px; margin-bottom: 12px; flex-wrap: wrap; }
.page-head h2 { margin: 0; font-size: 16px; color: var(--c-primary-d); }
.page-head .desc { font-size: 12px; color: var(--c-muted); }

.card {
  background: #fff; border: 1px solid var(--c-line); border-radius: var(--radius);
  margin-bottom: 14px; box-shadow: var(--shadow); overflow: hidden;
}
.card > .card-h {
  padding: 8px 14px; background: var(--c-primary-l); border-bottom: 1px solid var(--c-line);
  font-weight: 600; font-size: 12.5px; color: var(--c-primary-d);
  display: flex; align-items: center; gap: 8px;
}
.card > .card-h .hint { font-weight: 400; font-size: 11px; color: var(--c-muted); }
.card > .card-b { padding: 12px 14px; }

.grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 10px 18px; }
.grid3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px 18px; }
.grid4 { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px 18px; }
@media (max-width: 1100px) { .grid3, .grid4 { grid-template-columns: 1fr 1fr; } }
@media (max-width: 720px) { .grid2, .grid3, .grid4 { grid-template-columns: 1fr; } }

.f { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.f.span2 { grid-column: span 2; }
.f.span3 { grid-column: span 3; }
.f.span4 { grid-column: span 4; }
@media (max-width: 1100px) { .f.span3, .f.span4 { grid-column: span 2; } }
.f > label { font-size: 11.5px; color: var(--c-muted); display: flex; align-items: center; gap: 4px; }
.f > label .req { color: var(--c-err); }
.f > label .en { font-size: 10px; opacity: .75; }
.f input[type=text], .f input[type=number], .f input[type=date], .f select, .f textarea {
  padding: 5px 8px; border: 1px solid var(--c-line); border-radius: 4px;
  background: #fff; font-size: 12.5px; width: 100%; min-width: 0;
}
.f textarea { resize: vertical; min-height: 58px; font-family: inherit; }
.f input:focus, .f select:focus, .f textarea:focus {
  outline: none; border-color: var(--c-primary); box-shadow: 0 0 0 2px rgba(31,95,168,.14);
}
.f .fld-err input, .f .fld-err select, .f .fld-err textarea { border-color: var(--c-err); background: #fffafa; }
.f .fld-warn input, .f .fld-warn select { border-color: var(--c-warn); background: #fffdf5; }
.f .tip { font-size: 10.5px; color: var(--c-muted); }

.chk { display: flex; align-items: center; gap: 6px; font-size: 12.5px; padding: 5px 0; }
.chk input { width: 15px; height: 15px; accent-color: var(--c-primary); }

/* ---------------------------------------------------------------- *
 * 3. 商品明细编辑器
 * ---------------------------------------------------------------- */
.items-wrap { overflow-x: auto; }
table.items-ed { width: 100%; border-collapse: collapse; min-width: 1080px; }
table.items-ed th {
  background: var(--c-primary-l); color: var(--c-primary-d); font-size: 11px; font-weight: 600;
  padding: 6px 5px; border: 1px solid var(--c-line); text-align: left; white-space: nowrap;
}
table.items-ed td { border: 1px solid var(--c-line); padding: 3px; vertical-align: top; }
table.items-ed input, table.items-ed select {
  width: 100%; border: 1px solid transparent; background: transparent; padding: 4px 5px;
  border-radius: 3px; font-size: 12px;
}
table.items-ed input:focus, table.items-ed select:focus {
  outline: none; border-color: var(--c-primary); background: #fff;
}
table.items-ed input[readonly] { background: #f7f9fb; color: var(--c-muted); }
table.items-ed td.num input { text-align: right; }
table.items-ed tr.dg-row td { background: #fffdf7; }
table.items-ed .row-tools { display: flex; gap: 3px; }
.mini-btn {
  border: 1px solid var(--c-line); background: #fff; border-radius: 3px; cursor: pointer;
  padding: 3px 7px; font-size: 11px; color: var(--c-primary-d); white-space: nowrap;
}
.mini-btn:hover { background: var(--c-primary-l); }
.mini-btn.danger { color: var(--c-err); border-color: #e6b8bd; }
.mini-btn.danger:hover { background: var(--c-err-l); }
.mini-btn.solid { background: var(--c-primary); color: #fff; border-color: var(--c-primary); }
.mini-btn.solid:hover { background: var(--c-primary-d); }
.mini-btn.ok { background: var(--c-ok); color: #fff; border-color: var(--c-ok); }

.totals-bar {
  display: flex; flex-wrap: wrap; gap: 16px; padding: 9px 14px; background: #f8fbfe;
  border-top: 1px solid var(--c-line); font-size: 12px;
}
.totals-bar b { color: var(--c-primary-d); }

/* ---------------------------------------------------------------- *
 * 4. 标签页
 * ---------------------------------------------------------------- */
.tabs { display: flex; gap: 2px; border-bottom: 1px solid var(--c-line); margin-bottom: 14px;
  overflow-x: auto; }
.tabs .tab {
  padding: 7px 13px; cursor: pointer; font-size: 12.5px; white-space: nowrap;
  border: 1px solid transparent; border-bottom: none; border-radius: 4px 4px 0 0;
  color: var(--c-muted);
}
.tabs .tab:hover { color: var(--c-primary-d); background: var(--c-primary-l); }
.tabs .tab.active {
  background: #fff; border-color: var(--c-line); color: var(--c-primary-d);
  font-weight: 600; margin-bottom: -1px; padding-bottom: 8px;
}
.tabs .tab .dot { display: inline-block; width: 6px; height: 6px; border-radius: 50%; margin-left: 5px; }
.tabs .tab .dot.err { background: var(--c-err); }
.tabs .tab .dot.warn { background: var(--c-warn); }

/* ---------------------------------------------------------------- *
 * 5. 校验面板
 * ---------------------------------------------------------------- */
.chk-cards { display: flex; gap: 12px; margin-bottom: 14px; flex-wrap: wrap; }
.chk-cards .cc {
  flex: 1; min-width: 120px; background: #fff; border: 1px solid var(--c-line);
  border-radius: var(--radius); padding: 12px; text-align: center; box-shadow: var(--shadow);
}
.chk-cards .cc .n { font-size: 26px; font-weight: 700; line-height: 1.1; }
.chk-cards .cc .l { font-size: 11px; color: var(--c-muted); margin-top: 3px; }
.chk-cards .cc.err .n { color: var(--c-err); }
.chk-cards .cc.warn .n { color: var(--c-warn); }
.chk-cards .cc.ok .n { color: var(--c-ok); }

.vlist { background: #fff; border: 1px solid var(--c-line); border-radius: var(--radius); overflow: hidden; }
.vrow { display: flex; gap: 10px; padding: 8px 14px; border-bottom: 1px solid #eef1f4; font-size: 12.5px; }
.vrow:last-child { border-bottom: none; }
.vrow .lv { flex: 0 0 46px; font-size: 11px; font-weight: 700; }
.vrow .cat { flex: 0 0 132px; color: var(--c-muted); font-size: 11.5px; }
.vrow .msg { flex: 1; min-width: 0; }
.vrow .fix { flex: 0 0 240px; color: var(--c-muted); font-size: 11.5px; }
.vrow.error { background: var(--c-err-l); }
.vrow.error .lv { color: var(--c-err); }
.vrow.warn { background: var(--c-warn-l); }
.vrow.warn .lv { color: var(--c-warn); }
.vrow.info { background: #f6faff; }
.vrow.info .lv { color: var(--c-primary); }
.empty-ok { padding: 30px; text-align: center; color: var(--c-ok); font-size: 14px; }

/* ---------------------------------------------------------------- *
 * 6. 单证预览
 * ---------------------------------------------------------------- */
.preview-bar {
  display: flex; align-items: center; gap: 8px; padding: 8px 14px; background: #fff;
  border-bottom: 1px solid var(--c-line); flex-wrap: wrap;
}
.preview-bar .title { font-weight: 600; color: var(--c-primary-d); font-size: 13px; }
.preview-scroll {
  flex: 1; overflow: auto; padding: 22px; background: #e8ecf1;
  display: flex; justify-content: center; align-items: flex-start;
}
.preview-inner { flex: 0 0 auto; }

/* 导出格式条（Word / Excel / PDF） */
.export-bar {
  display: flex; align-items: center; gap: 10px; padding: 7px 14px;
  background: var(--c-primary-l); border-bottom: 1px solid var(--c-line); flex-wrap: wrap;
  font-size: 12.5px;
}
.export-bar .eb-lb { font-weight: 600; color: var(--c-primary-d); }
.export-bar .eb-opt {
  display: inline-flex; align-items: center; gap: 5px; cursor: pointer;
  padding: 3px 9px; border: 1px solid var(--c-line); border-radius: 5px;
  background: #fff; transition: border-color .15s, background .15s;
}
.export-bar .eb-opt:hover { border-color: var(--c-primary); }
.export-bar .eb-opt:has(input:checked) {
  border-color: var(--c-primary); background: #fff; box-shadow: 0 0 0 1px var(--c-primary) inset;
}
.export-bar .eb-opt input { margin: 0; cursor: pointer; }
.export-bar .eb-opt span { font-weight: 600; color: var(--c-primary-d); }
.export-bar .eb-opt em { font-style: normal; font-size: 11px; color: #6b7a8a; }
.export-bar .eb-scope { margin-left: auto; color: #6b7a8a; }
@media (max-width: 900px) {
  .export-bar .eb-opt em { display: none; }
  .export-bar .eb-scope { margin-left: 0; }
}
@media print { .export-bar { display: none !important; } }

.doc-list-grid {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(210px, 1fr)); gap: 10px;
}
.doc-card {
  border: 1px solid var(--c-line); border-radius: var(--radius); padding: 10px 12px;
  background: #fff; cursor: pointer; box-shadow: var(--shadow); transition: .12s;
}
.doc-card:hover { border-color: var(--c-primary); transform: translateY(-1px); }
.doc-card .dc-n { font-weight: 600; font-size: 13px; color: var(--c-primary-d); }
.doc-card .dc-e { font-size: 10.5px; color: var(--c-muted); margin-top: 1px; }
.doc-card .dc-t { font-size: 11px; color: var(--c-muted); margin-top: 5px; }
.doc-card.off { opacity: .48; }

/* ---------------------------------------------------------------- *
 * 7. 弹窗 / 提示
 * ---------------------------------------------------------------- */
.modal-mask {
  position: fixed; inset: 0; background: rgba(18,32,48,.5); z-index: 100;
  display: flex; align-items: center; justify-content: center; padding: 20px;
}
.modal {
  background: #fff; border-radius: 6px; max-width: 620px; width: 100%;
  max-height: 86vh; overflow: auto; box-shadow: 0 8px 30px rgba(0,0,0,.25);
}
.modal .m-h { padding: 12px 16px; border-bottom: 1px solid var(--c-line); font-weight: 600;
  color: var(--c-primary-d); display: flex; align-items: center; }
.modal .m-h .x { margin-left: auto; cursor: pointer; color: var(--c-muted); font-size: 18px; line-height: 1; }
.modal .m-b { padding: 16px; }
.modal .m-f { padding: 12px 16px; border-top: 1px solid var(--c-line); display: flex;
  gap: 8px; justify-content: flex-end; }

.toast {
  position: fixed; bottom: 22px; left: 50%; transform: translateX(-50%);
  background: #23384d; color: #fff; padding: 9px 18px; border-radius: 20px;
  font-size: 12.5px; z-index: 200; box-shadow: 0 4px 16px rgba(0,0,0,.28);
}
.toast.ok { background: var(--c-ok); }
.toast.err { background: var(--c-err); }

.hint-bar {
  font-size: 11.5px; color: var(--c-muted); background: #fff; border: 1px dashed var(--c-line);
  border-radius: var(--radius); padding: 8px 12px; margin-bottom: 12px;
}
.hint-bar b { color: var(--c-primary-d); }

/* 排序/筛选行 */
.toolrow { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin-bottom: 10px; }
.toolrow input[type=text], .toolrow select {
  padding: 5px 8px; border: 1px solid var(--c-line); border-radius: 4px; font-size: 12px;
}

/* 设置页 logo */
.logo-box { display: flex; align-items: center; gap: 12px; }
.logo-box img { max-height: 52px; max-width: 180px; border: 1px solid var(--c-line);
  border-radius: 4px; padding: 3px; background: #fff; }

/* ================================================================ *
 * 8. 单证 A4 样式（屏幕预览 + 打印共用）
 * ================================================================ */
.doc-page {
  width: 210mm; min-height: 297mm; padding: 12mm 12mm 14mm;
  background: #fff; color: #000; box-shadow: 0 2px 12px rgba(0,0,0,.2);
  font-family: "SimSun", "Songti SC", "Noto Serif CJK SC", serif;
  font-size: 9.5pt; line-height: 1.4; position: relative;
}
.doc-page table { border-collapse: collapse; width: 100%; }
.doc-page .sm { font-size: 7.8pt; color: #333; }

/* 抬头 */
.doc-head { display: flex; align-items: center; gap: 12px; padding-bottom: 6px;
  border-bottom: 2px solid #000; margin-bottom: 5px; }
.doc-head-l { flex: 1; min-width: 0; }
.doc-head-r img { max-height: 46px; max-width: 130px; object-fit: contain; }
.co-name-cn { font-size: 13pt; font-weight: 700; letter-spacing: .5px; font-family: "SimHei","Heiti SC",sans-serif; }
.co-name-en { font-size: 9.5pt; font-weight: 700; }
.co-addr, .co-contact { font-size: 7.8pt; color: #222; }

/* 标题 */
.doc-title { text-align: center; margin: 7px 0 5px; }
.doc-title-en { font-size: 15pt; font-weight: 700; letter-spacing: 1px;
  font-family: "SimHei","Heiti SC",sans-serif; }
.doc-title-cn { font-size: 10pt; letter-spacing: 5px; color: #222; }
.doc-head-plain .doc-title { margin-top: 0; }
.bl-title { text-align: center; font-size: 15pt; font-weight: 700; letter-spacing: 1px;
  font-family: "SimHei","Heiti SC",sans-serif; }
.bl-sub { text-align: center; font-size: 9pt; color: #333; margin-bottom: 2px; }

/* 键值表 */
table.kv { margin-bottom: 5px; }
table.kv td { border: 1px solid #000; padding: 3px 5px; font-size: 8.6pt; vertical-align: top; }
table.kv td.k { background: #f0f0f0; width: 90px; font-weight: 600; white-space: nowrap; }
table.kv td.v { min-width: 82px; word-break: break-word; }
table.kv tr.kv-sep td { height: 4px; border: none; background: #fff; }

/* 商品表格 */
table.grid { border: 1px solid #000; }
table.grid th { border: 1px solid #000; background: #e8e8e8; padding: 3px 4px;
  font-size: 7.8pt; font-weight: 700; text-align: center; }
table.grid td { border: 1px solid #000; padding: 3px 4px; font-size: 8.6pt; vertical-align: top; }
table.grid td.c { text-align: center; }
table.grid td.r { text-align: right; }
table.grid tr.total-row td { background: #f4f4f4; font-weight: 700; }
table.grid tr.ok-row td { background: #f7fbf7; }
table.items td { word-break: break-word; }

/* 当事人块 */
.party-block { display: flex; gap: 8px; margin: 5px 0; }
.party { flex: 1; border: 1px solid #000; padding: 5px 7px; font-size: 8.6pt; }
.party-h { font-weight: 700; background: #f0f0f0; margin: -5px -7px 4px; padding: 2px 7px;
  font-size: 8pt; }
.party-n { font-weight: 700; }

/* 唛头 */
.marks-box { border: 1px solid #000; margin: 5px 0; }
.marks-h { background: #f0f0f0; padding: 2px 6px; font-size: 8pt; font-weight: 700;
  border-bottom: 1px solid #000; }
.marks-b { padding: 5px 7px; font-size: 8.6pt; min-height: 42px; white-space: pre-wrap;
  font-family: "Consolas", monospace; }

/* 金额大写 */
.amt-words { border: 1px solid #000; border-top: none; padding: 4px 6px; font-size: 8.8pt;
  background: #fafafa; margin-top: -5px; margin-bottom: 5px; }

/* 条款块 */
.terms-block { border: 1px solid #000; margin: 5px 0; }
.terms-block > b { display: block; background: #f0f0f0; padding: 2px 6px; font-size: 8pt;
  border-bottom: 1px solid #000; }
.terms-body { padding: 5px 7px; font-size: 8pt; line-height: 1.5; }
.clause-h { font-size: 8.8pt; font-weight: 700; margin: 6px 0 3px; padding: 2px 0;
  border-bottom: 1px solid #000; }
.entrust-lead { font-size: 8.8pt; margin: 5px 0 6px; line-height: 1.6; }
.decl-block { border: 1px solid #000; padding: 5px 7px; font-size: 8.4pt; margin: 6px 0; }

/* 签字区 */
.sign-row { display: flex; gap: 14px; margin-top: 14px; }
.sign-box { flex: 1; }
.sign-label { font-size: 8.6pt; font-weight: 700; margin-bottom: 22px; }
.sign-line { border-bottom: 1px solid #000; height: 1px; }
.sign-sub { font-size: 7.4pt; color: #444; margin-top: 2px; text-align: right; }

/* 危险品提示 */
.dg-inline { border: 1px solid #000; border-left: 4px solid #b00020; padding: 5px 8px;
  font-size: 8.4pt; margin: 6px 0; background: #fffdfa; }
.dg-warn { border: 1px solid #b00020; background: #fdf0f0; padding: 6px 9px; font-size: 8.4pt;
  margin: 7px 0; }
.dg-tag { color: #b00020; font-weight: 700; }
.req { color: #b00020; }

/* 提单页脚 */
.bl-foot { border: 1px solid #000; border-top: none; padding: 5px 7px; font-size: 8.4pt;
  line-height: 1.6; }

/* 单据页脚 */
.doc-foot { margin-top: 10px; }
.foot-note { font-size: 7.6pt; color: #333; margin-bottom: 3px; }
.foot-line { font-size: 7.4pt; color: #444; border-top: 1px solid #999; padding-top: 3px; }

/* 校验报告 */
.chk-summary { display: flex; gap: 10px; margin: 6px 0 10px; }
.chk-summary .chk-item { flex: 1; border: 1px solid #000; padding: 6px; text-align: center; }
.chk-summary .chk-n { font-size: 16pt; font-weight: 700; }
.chk-summary .chk-l { font-size: 7.6pt; }
.chk-summary .err .chk-n { color: #b00020; }
.chk-summary .warn .chk-n { color: #b8860b; }
.chk-summary .ok .chk-n { color: #0b7a3b; }
.lv-err { color: #b00020; }
.lv-warn { color: #b8860b; }
.lv-info { color: #1f5fa8; }
.render-err { border: 1px solid #b00020; background: #fdf0f0; padding: 10px; font-size: 9pt; }

/* ---------------------------------------------------------------- *
 * 9. 打印
 * ---------------------------------------------------------------- */
#printArea { display: none; }

@media print {
  @page { size: A4 portrait; margin: 12mm 10mm; }
  html, body { background: #fff !important; margin: 0 !important; padding: 0 !important; }
  body.printing .app { display: none !important; }
  body.printing #printArea { display: block !important; }
  /* ⚠️ 打印时 .doc-page 必须「去掉自己的固定宽高和外边距」，交给 @page 的 margin 管。
     原因（2026-09-30 实测踩到）：原来写 width:210mm; min-height:297mm + @page margin:0，
     屏幕上的 box-shadow/padding 与分页计算叠加，内容溢出一页就多出一张几乎空白的页
     —— 实测 15 份单证打出来 16 页，其中一张只剩「Signature & Stamp」签名栏。
     正解：容器宽高交给纸张，doc-page 自身不设高度（内容多高就多高，浏览器自己分页），
     只在两份单证之间强制分页。 */
  #printArea .doc-page {
    width: auto !important;
    min-height: 0 !important;
    height: auto !important;
    padding: 0 !important;
    margin: 0 !important;
    box-shadow: none !important;
    border: none !important;
    page-break-after: always;
    break-after: page;
    page-break-inside: auto;
    break-inside: auto;
  }
  #printArea .doc-page:last-child { page-break-after: auto; break-after: auto; }
  /* 表格行/签名区不许被拦腰截断；签名区还要跟内容同页，避免「只剩签名栏」的空白页 */
  #printArea .sign-row, #printArea .sign-box,
  #printArea .doc-title, #printArea .marks-b, #printArea .decl-block,
  #printArea .dg-warn, #printArea .terms-block {
    page-break-inside: avoid; break-inside: avoid;
  }
  #printArea tr { page-break-inside: avoid; break-inside: avoid; }
  #printArea thead { display: table-header-group; }
  /* 签名区前不许分页：逼它跟上面内容待在同一页（放不下就整体挪到下一页，而不是把签名单独留在空页） */
  #printArea .sign-row { page-break-before: avoid; break-before: avoid; }
  .no-print { display: none !important; }
}
