/* ============================================================
 * 打印 · 多层针打单据（网页管理端 · 第 56 轮建 · 第 57 轮改针打口径）
 * ============================================================
 * ⚠️⚠️ **「多层」是纸的性质，不是程序多打几遍。**
 *    业务上用的是多层压感复写纸：整叠一起走针打机，针头一击穿透 N 层，
 *    一次走纸出来 N 联。所以**一份单据只输出一页版面**，
 *    联次靠 `print.js` 的「复写层说明条」（`.sh-carbon`）交代。
 *
 * ⚠️ 这个文件里**不允许出现第二个颜色**。
 *    打印是白纸黑字：黑白激光机上彩色只会变成一团深浅不一的灰，
 *    浅底彩字更是直接糊掉；而且单据是对外凭证，纯黑白是行业惯例。
 *    所以下面只有 #000 / #333 / #555 / #777 / #999 / #bbb / #f2f2f2 这几档中性灰。
 *    ⚠️ 唯独复写说明条那条线用 `--print-hair`（浅灰）—— 它是**操作提示**，
 *       本来就该比单据正文轻，针打出来是一根细灰线，不抢注意力。
 *
 * ⚠️ 单位用 **pt / mm** 而不是 px：纸张是物理尺寸，pt 在打印时换算才准
 *    （px 在打印时会按 96dpi 折算，遇到不同的缩放设置就会跑偏）。
 *    屏幕预览用同一套 pt，所以**预览里看到的大小就是纸上印出来的大小**。
 *
 * ⚠️ 纸张尺寸与 `print.js` 的 `paperSize()` 必须一致 ——
 *    JS 给 width/minHeight，CSS 给内边距，两边合起来才是真实版面。
 *    ⚠️ 针打纸（241×279 / 241×140 / 381×279）**不是 A4/A5**：
 *       它由 JS 内联 style 给毫米宽高，CSS 只负责内边距（见 `.paper-dot`）。
 * ============================================================ */

/* ---------- 一、纸 ---------- */
.paper {
  position: relative;
  box-sizing: border-box;
  background: #fff;
  color: #000;
  margin: 0 auto 20px;
  padding: 12mm 12mm 10mm;
  box-shadow: 0 2px 12px rgba(16, 24, 40, .16);
  font-size: 10pt;
  line-height: 1.45;
  /* 单据一律用等宽友好字体：数字对齐是核对的前提 */
  font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Arial, sans-serif;
}

/* 针打纸：两边有定位孔，正文要躲开孔位 ⇒ 左右内边距比普通纸宽一点 */
.paper-dot { padding: 10mm 14mm 8mm; }

/* 一页多联时（裁开模式），每联等高，裁开之后一摞纸是齐的 */
.sh-stack > .pdoc { min-height: 84mm; }
.paper-dot .sh-stack > .pdoc { min-height: 70mm; }
.paper-paperA5 .sh-stack > .pdoc { min-height: 56mm; }
.paper.landscape .sh-stack > .pdoc { min-height: auto; }

/* ---------- 一·补、复写层说明条（针打模式的关键一件） ---------- */
/* 一份单次版面在每一层纸上长得一样，分开后没法认哪张给谁 ⇒ 单据上方印一条说明 */
.sh-carbon {
  margin: 0 0 4mm;
  padding: 1.6mm 2.4mm;
  border: 0.5pt dashed var(--print-hair, #bbb);
  color: #333;
  font-size: 8.5pt;
  line-height: 1.4;
}
.sh-carbon-h { display: flex; align-items: baseline; gap: 3mm; }
.sh-carbon-h b { font-size: 9pt; }
.sh-carbon-h span { color: #777; }
.sh-carbon-l {
  margin-top: 0.8mm;
  padding-top: 0.8mm;
  border-top: 0.5pt dotted var(--print-hair, #bbb);
  font-size: 9pt;
  letter-spacing: .2pt;
}
/* 打印时说明条要留着（它是给分张人看的），但别让它占满一整页的头 —— 保持原样即可 */

/* ---------- 二、裁切线（仅「单层纸裁开」模式用） ---------- */
.sh-cut {
  position: relative;
  height: 0;
  margin: 6mm 0;
  border-top: 1px dashed #999;
}
.sh-cut-sc {
  position: absolute;
  left: -1px;
  top: -7pt;
  padding-right: 5px;
  background: #fff;
  font-size: 10pt;
  line-height: 1;
  color: #777;
}

/* ---------- 三、一份单据 ---------- */
.pdoc { position: relative; }

/* 联次角标：贴右上角，开一个小口让它像「票根」 */
.pd-tag {
  position: absolute;
  top: 0;
  right: 0;
  padding: 2px 7px;
  border: 1px solid #000;
  border-top: 0;
  border-right: 0;
  font-size: 8.5pt;
  font-weight: 700;
  letter-spacing: .4px;
  background: #fff;
}

/* --- 抬头 --- */
.pd-head {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  align-items: end;
  gap: 10px;
  padding-bottom: 6px;
  border-bottom: 2px solid #000;
}
.pd-co { min-width: 0; }
.pd-co-n { font-size: 12pt; font-weight: 800; letter-spacing: .5px; }
.pd-co-s { font-size: 8pt; color: #555; margin-top: 1px; }
.pd-title {
  font-size: 17pt;
  font-weight: 800;
  letter-spacing: 3px;
  white-space: nowrap;
  text-align: center;
}
.pd-no {
  font-size: 8.5pt;
  text-align: right;
  color: #333;
  white-space: nowrap;          /* ⚠️ 单号绝不截断、绝不换行 —— 折行会让人读错号 */
  line-height: 1.6;
}

/* --- 往来方 --- */
.pd-parties {
  display: flex;
  flex-wrap: wrap;
  gap: 4px 20px;
  padding: 6px 0;
  border-bottom: 1px solid #000;
  font-size: 9.5pt;
}
.pd-p { display: inline-flex; min-width: 0; }
.pd-k { color: #333; white-space: nowrap; }
.pd-v { font-weight: 600; word-break: break-all; }

/* --- 明细表 --- */
.pd-tb {
  width: 100%;
  margin-top: 6px;
  border-collapse: collapse;
  font-size: 9.5pt;
}
.pd-tb th, .pd-tb td {
  border: 1px solid #000;
  padding: 3px 5px;
  vertical-align: middle;
  word-break: break-all;
}
.pd-tb th {
  background: #f2f2f2;          /* 黑白机上是一层浅灰，刚好区分表头 */
  font-weight: 700;
  text-align: center;
  white-space: nowrap;
}
.pd-tb .pd-idx { width: 26px; text-align: center; color: #333; }
.pd-tb tbody tr { break-inside: avoid; }   /* 一行不要被页缝劈成两半 */

/* --- 合计 --- */
.pd-sum {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 16px;
  padding-top: 5px;
  font-size: 9.5pt;
}
.pd-sum-l { flex: 1; min-width: 0; }
.pd-cap { font-weight: 700; }
.pd-sum-r { display: flex; gap: 16px; white-space: nowrap; }
.pd-sum-r b { font-size: 10.5pt; }

/* --- 余额块（对账单：期初 / 本期新增 / 本期回款 / 期末） ---
   ⚠️ 与上面的「合计」是两回事：合计属于明细表，这里是**余额与发生额**。
      所以用一条虚线隔开、整块右对齐，一眼看得出「这是钱，不是件数」。 */
.pd-extra {
  display: flex;
  justify-content: flex-end;
  flex-wrap: wrap;
  gap: 6px 18px;
  margin-top: 6px;
  padding-top: 5px;
  border-top: 1px dashed #000;
  font-size: 9.5pt;
}
.pd-extra .pd-ex { white-space: nowrap; }
.pd-extra .pd-ex.strong .pd-v { font-weight: 700; border-bottom: 1px solid #000; padding-bottom: 1px; }

/* --- 备注 / 签字 --- */
.pd-remark { margin-top: 5px; font-size: 9pt; }
.pd-remark span:last-child { word-break: break-all; }
.pd-sign {
  display: flex;
  gap: 16px;
  margin-top: 12px;
  font-size: 9.5pt;
}
.pd-sign span { flex: 1; display: flex; align-items: flex-end; min-width: 0; }
.pd-sign i { font-style: normal; white-space: nowrap; }
.pd-sign u {
  flex: 1;
  min-width: 30px;
  height: 15pt;
  margin-left: 4px;
  border-bottom: 1px solid #000;
  text-decoration: none;
}

/* --- 作废水印 ---
   作废单**不能悄悄打印出去**：印出来必须一眼看出是废单。
   用一枚斜着的双线印章，浅到不遮字、又能看见。 */
.pd-void {
  position: absolute;
  top: 46%;
  left: 50%;
  transform: translate(-50%, -50%) rotate(-14deg);
  padding: 4px 20px;
  border: 3px double #000;
  font-size: 20pt;
  font-weight: 800;
  letter-spacing: 6px;
  white-space: nowrap;
  color: #000;
  opacity: .26;
  pointer-events: none;
}

/* ---------- 五、打印 ---------- */
@media print {
  /* 主文档被直接 Ctrl+P 时：只留内容区（与 pages.css 的同类规则一致） */
  .side, .top, .no-print, .pr-toolbar { display: none !important; }

  .paper {
    width: auto !important;
    min-height: 0 !important;
    margin: 0 !important;
    padding: 0 !important;
    box-shadow: none !important;
  }
  .paper.pg-break { page-break-after: always; }

  /* 一页多联的预览等高，打印时放开 —— 否则每联后面会多出一段白纸 */
  .sh-stack > .pdoc { min-height: 0 !important; }

  .print-area { padding: 0 !important; }
  .pd-tb tbody tr { break-inside: avoid; }
  .pd-void { opacity: .3; }
}
