/*
 * --------------------------------------------------------------------------
 * MIS Print Template Bundle
 * --------------------------------------------------------------------------
 * Scoped styles for PDF/print outputs. Each template wraps its markup in a
 * `print-template` root with a template-specific modifier class (see the
 * views under views/plumbershawaii/). Declarations supply literal fallbacks
 * for mPDF while mirroring the design token values exposed in theme.css.
 *
 * TWO CLASS ARCHITECTURES:
 * - .print-template  Legacy templates (plumbershawaii views)
 * - .print-doc       New templates (trans/print/history, etc.)
 */

/* ==========================================================================
   PRINT-DOC ARCHITECTURE (New Templates)
   ========================================================================== */

.print-doc {
  color: #0f172a;
  font-family: Arial, Helvetica, sans-serif;
  font-size: 14px;
  font-size: var(--ph-font-size-print-sm);
  line-height: 1.45;
  margin: 0;
  padding: 0;
}

.print-doc * {
  box-sizing: border-box;
}

/* Document Header --------------------------------------------------------- */

.print-header {
  border-bottom: 2px solid #000073;
  margin-bottom: 16pt;
  padding-bottom: 12pt;
}

.print-header__org {
  color: #000073;
  font-size: 18px;
  font-weight: 700;
  letter-spacing: 0.5px;
  margin: 0 0 2pt;
  text-transform: uppercase;
}

.print-header__title {
  color: #0f172a;
  font-size: 24px;
  font-weight: 700;
  margin: 8pt 0 0;
}

.print-header__subtitle {
  color: #475569;
  font-size: 14px;
  font-size: var(--ph-font-size-print-sm);
  margin: 4pt 0 0;
}

.print-header__meta {
  display: table;
  width: 100%;
  margin-top: 12pt;
  font-size: 14px;
  font-size: var(--ph-font-size-print-sm);
}

.print-header__meta-row {
  display: table-row;
}

.print-header__meta-left,
.print-header__meta-right {
  display: table-cell;
  vertical-align: top;
}

.print-header__meta-left {
  text-align: left;
  width: 50%;
}

.print-header__meta-right {
  text-align: right;
  width: 50%;
}

.print-header__label {
  color: #475569;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.5px;
  text-transform: uppercase;
}

.print-header__value {
  color: #0f172a;
  font-weight: 600;
}

/* Data Tables - Clean, ink-efficient design with borders -------------------- */

.print-table {
  border-collapse: collapse;
  font-size: 13px;
  width: 100%;
}

.print-table th,
.print-table td {
  border: 0.5pt solid #64748b;
  padding: 6pt 8pt;
  text-align: left;
  vertical-align: top;
  background-color: transparent;
}

.print-table th {
  color: #1e293b;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.5px;
  text-transform: uppercase;
  border-bottom-width: 1.5pt;
}

/* No zebra striping - consistent clean background */
.print-table tr td {
  background-color: transparent;
}

.print-table tr:nth-child(even) td,
.print-table tr:nth-child(odd) td {
  background-color: transparent;
}

/* Alignment utilities */
.print-table .text-right,
.print-table td.text-right,
.print-table th.text-right {
  text-align: right;
}

.print-table .text-center,
.print-table td.text-center,
.print-table th.text-center {
  text-align: center;
}

/* Currency columns */
.print-table .col-currency {
  font-family: 'Courier New', Courier, monospace;
  text-align: right;
  white-space: nowrap;
}

/* Summary/total row - borders only */
.print-table .row-total td {
  border-top: 1.5pt solid #334155;
  font-weight: 700;
}

/* Write-in note lane for the BATCH report path (Trello #279 R2).
   The batch renderer (commands/PrintController.php renderReportHtml / streaming)
   builds its own .print-table HTML — it does NOT go through the Yii print view,
   so the view's .print-doc__table--writein rules never reach it. This is the
   batch twin: FIXED layout makes the declared Notes width bind (auto-layout
   otherwise feeds free space to long-text columns and starves the empty lane).
   Batch cells already wrap (no dense nowrap here), so no white-space override
   needed. Fires only when a report declares blankColumns. */
.print-table--writein {
  table-layout: fixed;
}

.print-table--writein th.col-writein,
.print-table--writein td.col-writein {
  width: 150pt;
}

/* Document Footer --------------------------------------------------------- */

.print-footer {
  border-top: 1px solid #cbd5e1;
  color: #475569;
  font-size: 10px;
  margin-top: 16pt;
  padding-top: 8pt;
}

/* Template: Transaction History ------------------------------------------- */

/* 15.13: Landscape layout with larger font for readability */
.print-doc--trans-history {
  font-size: 15px;
}

.print-doc--trans-history .print-table {
  font-size: 14px;
}

.print-doc--trans-history .print-table th {
  font-size: 12px;
  white-space: nowrap;
}

.print-doc--trans-history .col-period {
  width: 12%;
}
.print-doc--trans-history .col-date {
  width: 10%;
}
.print-doc--trans-history .col-type {
  width: 8%;
}
.print-doc--trans-history .col-receipt {
  width: 10%;
}
.print-doc--trans-history .col-amount {
  width: 9%;
}
.print-doc--trans-history .col-desc {
  width: 14%;
}

/* Utilities --------------------------------------------------------------- */

.page-break {
  page-break-after: always;
}
.page-break-before {
  page-break-before: always;
}
.no-break {
  page-break-inside: avoid;
}
.text-muted {
  color: #475569;
}
.mt-lg {
  margin-top: 16pt;
}

/* ==========================================================================
   PRINT-TEMPLATE ARCHITECTURE (Legacy Templates)
   ========================================================================== */

.print-template {
  color: #0f172a;
  color: var(--ph-color-text-strong);
  font-family: 'Times New Roman', Times, serif;
  font-family: var(--ph-font-serif);
  font-size: 14px;
  font-size: var(--ph-font-size-print-sm);
  line-height: 1.35;
}

.print-template table {
  width: 100%;
  border-collapse: collapse;
}

.print-template p {
  margin: 0.3125rem 0;
}

.print-template .center {
  margin: 0 auto;
  text-align: center;
  width: 100%;
}

.print-template .blue {
  color: #000073;
  color: var(--ph-color-print-accent);
}

.print-template .bottom_border {
  border-bottom: 1pt solid #000;
  border-bottom: 1pt solid var(--ph-color-print-border);
}

.print-template .top_border {
  border-top: 1pt solid #000;
  border-top: 1pt solid var(--ph-color-print-border);
}

.print-template .template {
  font-family: 'Times New Roman', Times, serif;
  font-family: var(--ph-font-serif);
}

/* Window Envelope Address Positioning — LOCKED from physical measurement 2026-02-21 */

/* Small envelope (tri-fold): 11cm × 2.8cm window */
.window-addr--small {
  display: block;
  margin-left: 0.875in;
  width: 4in;
  line-height: 1.5;
}

/* Large envelope (half-fold): 10.2cm × 3.3cm window */
.window-addr--large {
  display: block;
  margin-left: 0.7in;
  width: 4in;
  line-height: 1.4;
}

/* Envelope ---------------------------------------------------------------- */

/* #10 envelope: vertical position is driven by mPDF widget marginTop in the
   controller. Horizontal centering is done in the view via <table align="center">
   — most reliable centering primitive in mPDF MODE_CORE. The table cell holds
   typography only; lines stay left-aligned within (postal convention — centered
   address text reads weird and is harder to OCR). */
.print-template--no10-envelope .label {
  text-align: left;
  font-family: 'Arial', 'Helvetica Neue', Helvetica, sans-serif;
  font-family: var(--ph-font-sans);
  font-size: 14.5px;
  letter-spacing: 0.135px;
  line-height: 1.25;
  white-space: nowrap;
}

/* Avery 5160 Labels -------------------------------------------------------- */

.print-template--avery5160 {
  padding: 0.125in 0;
}

.print-template--avery5160 .label {
  width: 2.025in;
  height: 0.875in;
  padding: 0.125in 0.3in 0;
  margin-right: 0.125in;
  float: left;
  text-align: left;
  overflow: hidden;
  outline: 1px dotted #000;
  outline: 1px dotted var(--ph-color-print-border);
  font-size: 11px;
  font-family: 'Arial', 'Helvetica Neue', Helvetica, sans-serif;
  font-family: var(--ph-font-sans);
}

.print-template--avery5160 .page-break {
  clear: left;
  display: block;
  page-break-after: always;
}

.print-template--avery5160::after {
  content: '';
  display: table;
  clear: both;
}

/* Shared document typography ---------------------------------------------- */

.print-template--receipt .label,
.print-template--delinquency-hours .label,
.print-template--official-notice .label,
.print-template--exhibit-gj .label,
.print-template--national-union .label,
.print-template--con-sheet .label {
  text-align: left;
  font-family: 'Franklin Gothic Medium', 'Arial Narrow', Arial, sans-serif;
  font-family: var(--ph-font-sans-condensed);
  font-size: 14px;
  font-size: var(--ph-font-size-print-sm);
}

.print-template--receipt .section-header,
.print-template--delinquency-hours .section-header,
.print-template--official-notice .section-header,
.print-template--exhibit-gj .section-header,
.print-template--national-union .section-header,
.print-template--con-sheet .section-header {
  text-align: center;
  font-family: 'Times New Roman', Times, serif;
  font-family: var(--ph-font-serif);
  font-size: 16px;
  font-size: var(--ph-font-size-print-md);
  font-weight: 400;
  padding-bottom: 0.3125rem;
}

.print-template--exhibit-gj .section-header,
.print-template--national-union .section-header,
.print-template--con-sheet .section-header {
  font-weight: 600;
}

.print-template--receipt .info,
.print-template--delinquency-hours .info,
.print-template--official-notice .info,
.print-template--exhibit-gj .info,
.print-template--national-union .info,
.print-template--con-sheet .info {
  font-family: 'Times New Roman', Times, serif;
  font-family: var(--ph-font-serif);
  font-size: 14px;
  font-size: var(--ph-font-size-print-sm);
}

.print-template--receipt p,
.print-template--delinquency-hours p,
.print-template--official-notice p,
.print-template--exhibit-gj p,
.print-template--national-union p,
.print-template--con-sheet p {
  padding-top: 0.3125rem;
  padding-bottom: 0.3125rem;
}

/* Receipt ----------------------------------------------------------------- */

.print-template--receipt .section-header {
  font-weight: 500;
}

/* Exhibit GJ --------------------------------------------------------------- */

.print-template--exhibit-gj ol {
  margin-left: 1.25rem;
}

/* National Union Report ---------------------------------------------------- */

.print-template--national-union table {
  font-size: 14px;
  font-size: var(--ph-font-size-print-sm);
}

.print-template--national-union td,
.print-template--national-union th {
  padding: 0.125rem 0.25rem;
}

/* Ledger Statement Run ---------------------------------------------------- */

.print-template--ledger-run {
  font-family:
    system-ui,
    -apple-system,
    'Segoe UI',
    Roboto,
    Helvetica,
    Arial,
    sans-serif;
  font-family: var(--ph-font-sans);
  font-size: 14px;
  font-size: var(--ph-font-size-print-sm);
  line-height: 1.35;
  padding: 1rem;
}

.print-template--ledger-run .ledger-run__header {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  margin-bottom: 1rem;
}

.print-template--ledger-run .ledger-run__title {
  margin: 0;
  font-size: 1.125rem;
  font-weight: 600;
}

.print-template--ledger-run .ledger-run__meta {
  text-align: right;
  font-size: 0.75rem;
  color: #4b5563;
  color: var(--ph-color-text-muted);
}

.print-template--ledger-run .ledger-run__summary {
  display: inline-flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.75rem;
  margin: 0 0 1rem;
  padding: 0.5rem 0.75rem;
  background: #f5f7fa;
  border: 1px solid #ccd4dd;
  border-radius: 0.25rem;
  font-size: 14px;
}

.print-template--ledger-run .ledger-run__summary-divider {
  color: #6b7280;
}

.print-template--ledger-run .ledger-run__table {
  width: 100%;
  border-collapse: collapse;
  font-size: 14px;
}

.print-template--ledger-run .ledger-run__table th,
.print-template--ledger-run .ledger-run__table td {
  border: 1px solid #999;
  padding: 0.25rem 0.4rem;
  vertical-align: top;
  text-align: left;
}

.print-template--ledger-run .ledger-run__table th {
  background: #eeeeee;
  text-transform: uppercase;
  font-size: 12px;
  letter-spacing: 0.06em;
}

.print-template--ledger-run .ledger-run__column--member {
  width: 65px;
}

.print-template--ledger-run .ledger-run__column--balance {
  width: 90px;
}

.print-template--ledger-run .ledger-run__address-cell {
  font-size: 13px;
}

.print-template--ledger-run .ledger-run__balance-cell {
  text-align: right;
  font-variant-numeric: tabular-nums;
  font-weight: 600;
}

.print-template--ledger-run .ledger-run__periods {
  font-size: 13px;
}

.print-template--ledger-run .ledger-run__period-entry {
  margin-bottom: 0.15rem;
}

.print-template--ledger-run .ledger-run__empty {
  text-align: center;
  color: #6b7280;
  color: var(--ph-color-text-muted);
}

.print-template--ledger-run .balance-pos {
  color: #b30000;
  font-weight: 600;
}

.print-template--ledger-run .balance-neg {
  color: #006600;
  font-weight: 600;
}

.print-template--ledger-run .balance-zero {
  color: #555555;
}

/* Ledger Member Statement ------------------------------------------------- */

.print-template--ledger-member {
  font-family:
    system-ui,
    -apple-system,
    'Segoe UI',
    Roboto,
    Helvetica,
    Arial,
    sans-serif;
  font-family: var(--ph-font-sans);
  font-size: 14px;
  font-size: var(--ph-font-size-print-sm);
  line-height: 1.25;
  padding: 1rem;
}

.print-template--ledger-member .ledger-member__header {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  margin-bottom: 1rem;
}

.print-template--ledger-member .ledger-member__title {
  margin: 0 0 0.35rem;
  font-size: 1.15rem;
  font-weight: 600;
}

.print-template--ledger-member .ledger-member__meta {
  font-size: 0.7rem;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: #555555;
  color: var(--ph-color-text-muted);
  font-weight: 600;
}

.print-template--ledger-member .ledger-member__generated {
  text-align: right;
  font-size: 0.8rem;
  color: #555555;
  color: var(--ph-color-text-muted);
}

.print-template--ledger-member .ledger-member__table {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.8rem;
}

.print-template--ledger-member .ledger-member__table th,
.print-template--ledger-member .ledger-member__table td {
  border: 1px solid #cccccc;
  padding: 0.35rem 0.5rem;
  text-align: right;
}

.print-template--ledger-member .ledger-member__table th {
  background: #f5f7fa;
  text-transform: uppercase;
  font-size: 0.6rem;
  letter-spacing: 0.05em;
}

.print-template--ledger-member .ledger-member__column--period,
.print-template--ledger-member .ledger-member__period-cell {
  text-align: left;
}

.print-template--ledger-member .ledger-member__empty {
  text-align: center;
  color: #777777;
  color: var(--ph-color-text-muted);
}

.print-template--ledger-member .ledger-member__summary {
  margin-top: 1rem;
  font-size: 0.85rem;
  font-weight: 600;
}

.ledger-print-btn {
  position: fixed;
  top: 0.5rem;
  right: 0.5rem;
}

/* ==========================================================================
   Assignment Print Template — Detail Table Layout
   ========================================================================== */

.print-doc--assignment .print-table--details {
  width: 100%;
  border-collapse: collapse;
  margin-top: 8pt;
}

.print-doc--assignment .print-table--details td {
  padding: 6pt 12pt;
  border-bottom: 1px solid #e2e8f0;
  vertical-align: top;
}

.print-doc--assignment .print-table__label {
  width: 35%;
  color: #475569;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.5px;
  text-transform: uppercase;
  background: #f8fafc;
}

.print-doc--assignment .print-table__value {
  width: 65%;
  color: #0f172a;
  font-size: 14px;
  font-family: Arial, Helvetica, sans-serif;
}

.print-doc--assignment .row-section-header td {
  background: #f1f5f9;
  color: #000073;
  font-size: 14px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.5px;
  padding: 8pt 12pt;
  border-top: 2px solid #000073;
  border-bottom: 1px solid #000073;
}

/* ==========================================================================
   PRINT-DOC ARCHITECTURE: Exhibit G-J Form (High-Density Legal Document)
   ========================================================================== */

/*
 * HIGH-DENSITY LAYOUT RULES:
 * - 10pt body text, 1.3 line-height for maximum density
 * - 0.5in page margins (set via mPDF config or @page)
 * - Continuous vertical flow (NO forced page breaks between exhibits)
 * - "Glue" rule: page-break-inside: avoid on section containers
 * - Horizontal rules separate exhibits (no whitespace gaps)
 * - 4-column metadata grid compresses header info
 * - 2-column signature grids (signature + date side-by-side)
 *
 * Page margins are set per-controller via mPDF widget params (marginTop,
 * marginLeft, etc.) — NOT via @page here. A global @page rule poisons every
 * other template that loads this stylesheet (envelope, ledger, group pay…),
 * and mPDF's @page cascade is unreliable enough that "fix it with !important"
 * doesn't actually work in MODE_CORE. Each controller owns its margins.
 */

.print-doc--exhibit-gj {
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;
  /* 10pt body with line-height 1.4 — pixel-measured against VN's 13.08"
     content height. 10pt @ 1.35 landed 0.31" short; 10pt @ 1.4 adds ~15pt
     across ~30 body lines (combined with clause margin bump to 5pt = ~22pt
     total) to close the gap without overflowing single-page legal. */
  font-size: 10pt;
  line-height: 1.4;
  color: #111;
  max-width: 100%;
  margin: 0;
}

/* Employee Metadata — Open Label/Value Layout (matches old Access report) -- */
/*
 * No box, no borders. Label cells are fixed-width so wrapped values flow back
 * to the value-cell start (i.e., a long name's second line aligns under the
 * first name, not under the "Employee" label). Address gets rowspan=2 so the
 * city/state/zip line stacks directly under the street line.
 */

.exhibit-meta {
  width: 100%;
  border-collapse: collapse;
  /* ~12pt gap from Employer row to union title, matching Version Now PDF's
     pixel-measured 11.5pt blank band between meta block and "PLUMBERS FITTERS
     UNION" title (Amy 2026-05-15). Earlier inflated values (30/36pt) were
     compensation for the v1.2 date-relocation that's now reverted. */
  margin-bottom: 12pt;
  page-break-inside: avoid;
}

.exhibit-meta td {
  vertical-align: top;
  padding: 1pt 0;
  font-size: 11pt;
  color: #000;
}

.exhibit-meta-label {
  width: 110pt;
  white-space: nowrap;
  padding-right: 4pt !important;
  color: #000;
}

.exhibit-meta-label--right {
  width: 60pt;
  padding-left: 12pt !important;
}

.exhibit-meta-value {
  font-weight: normal;
  color: #000;
}

/* Address cell value — text wrapping is enabled (city/state/zip line stacks
   under street via <br> in the address string). */
.exhibit-meta-value--address {
  white-space: normal;
}

/* Exhibit Sections (Continuous Flow) -------------------------------------- */

.exhibit-section {
  margin-bottom: 0;
  /* 0 top-padding on the first section — its top spacing now comes entirely
     from .exhibit-meta's 36pt margin-bottom (Trello #209). 8pt bottom remains
     to keep signature off the next section's title. */
  padding: 0 0 8pt;
  page-break-inside: avoid; /* THE GLUE RULE: keeps section + signature together */
}

/* Whitespace separates exhibits — no rule line, per stakeholder reference.
   The adjacent-sibling selector below is kept for browser preview, but mPDF
   MODE_CORE doesn't reliably honor `E + F` for padding properties — the actual
   inter-exhibit gap is enforced by `.exhibit-section--break` (class on G-1 and
   J, NOT on G) below. */
.exhibit-section + .exhibit-section {
  padding-top: 55pt;
}

/* NO forced page breaks - continuous flow.
   Top padding on G-1 and J — applied via class (not adjacent-sibling selector)
   because mPDF MODE_CORE doesn't reliably honor `E + F` for padding properties.
   The `.exhibit-section + .exhibit-section { padding-top: 55pt }` rule below is
   kept for browser preview parity only; the rendered PDF gap is enforced here.
   Trello #209 v1.3: pixel-measured v1.2's page → top whitespace 40.3pt, bottom
   whitespace 94.6pt, excess 54.3pt. Split into 2 gaps = +27pt each. This lands
   the bottom margin ≈ top margin and gives G-1/J the breathing Naga asked for
   without losing single-page legal fit. */
.exhibit-section--break {
  padding-top: 27pt;
}

.exhibit-header {
  text-align: center;
  margin-bottom: 6pt;
  padding-bottom: 0;
  page-break-after: avoid;
}

/* EXHIBIT "G" / "G-1" / "J" — prominent centered banner so contractors
   immediately see which authorization they're signing on each page. */
.exhibit-number {
  font-weight: bold;
  font-size: 13pt;
  text-align: center;
  margin: 0 0 3pt;
  color: #000;
  letter-spacing: 0.5pt;
}

/* Union name title — centered block above EXHIBIT "G". Sized to match Version
   Now PDF (slightly larger than v1.2's inline span). */
.exhibit-title {
  display: block;
  font-size: 13pt;
  font-weight: bold;
  text-transform: uppercase;
  text-align: center;
  margin: 0 0 3pt;
  color: #000;
  letter-spacing: 0.3pt;
}

.exhibit-subtitle {
  font-size: 10pt;
  font-weight: bold;
  text-transform: uppercase;
  margin: 0;
  color: #000;
  letter-spacing: 0.2pt;
  line-height: 1.3;
}

/* Body Content (Dense Typography) ----------------------------------------- */

.exhibit-body {
  text-align: left;
}

.exhibit-clause {
  margin: 0 0 5pt;
  text-indent: 18pt;
  text-align: justify;
  line-height: 1.4;
  color: #000;
}

.exhibit-list {
  /* Tightened from 4pt/6pt to 2pt/3pt for the same budget reason as .exhibit-clause. */
  margin: 2pt 0 3pt 28pt;
  padding: 0;
}

.exhibit-list li {
  margin-bottom: 2pt;
  line-height: 1.3;
  text-align: justify;
  color: #000;
}

/* Input Blanks (Compact) -------------------------------------------------- */

/* Fill-in lines for dollar amounts are rendered inline in the view as
   `<u>&nbsp;` × 12, which mPDF MODE_CORE renders as a clean underline at
   ~36pt (0.5") — Amy's spec, Trello #209 follow-up. The `.exhibit-blank`
   class is intentionally absent; an earlier attempt to use inline-block +
   width: 36pt + text-decoration: underline rendered the underline only under
   the nbsp character itself (~10pt), not the full span width. The `<u>` +
   nbsp approach is the proven primitive — width is controlled by nbsp count. */

/* Signature Row (Cell-Based Layout) -------------------------------------- */
/*
 * mPDF MODE_CORE renders <td> border-bottom reliably; an inline-block <span>
 * with border-bottom does not. The 5-cell row gives us: label, flex line,
 * gap, date label, fixed date line — all bottom-aligned so labels sit on the
 * line like a real form blank.
 */

.exhibit-signature-row {
  width: 100%;
  margin-top: 10pt;
  page-break-before: avoid;
  page-break-inside: avoid;
  border-collapse: collapse;
}

.exhibit-signature-row td {
  vertical-align: bottom;
  padding: 0;
  font-size: 11pt;
  color: #000;
  height: 16pt;
}

.sig-label {
  white-space: nowrap;
  padding-right: 6pt !important;
}

.sig-label--sig {
  width: 132pt;
}

.sig-label--date {
  width: 38pt;
}

.sig-line {
  width: 240pt; /* explicit — mPDF MODE_CORE doesn't auto-fill remaining width */
  border-bottom: 1pt solid #000;
}

.sig-gap {
  width: 30pt;
}

.sig-line--date {
  width: 110pt;
}

/* Print-Specific Rules ---------------------------------------------------- */

@media print {
  .print-doc--exhibit-gj {
    margin: 0;
    max-width: 100%;
  }

  .exhibit-meta {
    page-break-inside: avoid;
  }

  .exhibit-header {
    page-break-after: avoid;
  }

  .exhibit-section {
    page-break-inside: avoid; /* THE GLUE RULE */
  }

  .exhibit-signature-row {
    page-break-before: avoid;
    page-break-inside: avoid;
  }
}

@media print {
  .no-print {
    display: none !important;
  }

  body {
    margin: 0;
    padding: 0;
  }
}
/* ==========================================================================
   REPORT PRINT TEMPLATE (.print-doc--report)
   Clean, corporate, ink-efficient design using borders instead of backgrounds
   ========================================================================== */

.print-doc--report {
  max-width: 100%;
  -webkit-font-smoothing: auto; /* Force subpixel AA — Chrome renders thin without this */
  text-rendering: optimizeLegibility;
}

/* Header with org, title, subtitle from base .print-doc */
.print-doc--report .print-doc__header {
  border-bottom: 2px solid #334155;
  margin-bottom: 8pt;
  padding-bottom: 6pt;
}

.print-doc--report .print-doc__org {
  color: #1e40af;
  font-size: 14px;
  font-weight: 700;
  letter-spacing: 0.5px;
  margin: 0 0 2pt;
  text-transform: uppercase;
}

.print-doc--report .print-doc__title {
  color: #1e293b;
  font-size: 16px;
  font-weight: 700;
  margin: 4pt 0 0;
}

.print-doc--report .print-doc__subtitle {
  color: #475569;
  font-size: 13px;
  margin: 4pt 0 0;
}

/* Info Bar (Run Date + Record Count) */
.print-doc--report .print-doc__info-bar {
  display: table;
  width: 100%;
  margin-bottom: 6pt;
  font-size: 13px;
  border-bottom: 1px solid #94a3b8;
  padding-bottom: 4pt;
}

.print-doc--report .print-doc__info-item {
  display: inline-block;
  margin-right: 24pt;
}

.print-doc--report .print-doc__info-label {
  color: #334155;
  font-weight: 600;
  margin-right: 4pt;
}

.print-doc--report .print-doc__info-value {
  color: #1e293b;
  font-weight: 700;
}

/* Section Titles */
.print-doc--report .print-doc__section {
  margin-bottom: 16pt;
}

.print-doc--report .print-doc__section-title {
  color: #1e40af;
  font-size: 15px;
  font-weight: 700;
  margin: 0 0 8pt;
  text-transform: uppercase;
  letter-spacing: 0.5px;
}

/* Parameters Table - borders only, no background fills */
.print-doc--report .print-doc__params-table {
  border-collapse: collapse;
  font-size: 12px;
  width: 100%;
  margin-bottom: 6pt;
}

.print-doc--report .print-doc__params-table td {
  border: 0.5pt solid #94a3b8;
  padding: 4pt 8pt;
}

.print-doc--report .print-doc__param-name {
  color: #1e293b;
  font-weight: 600;
  width: 30%;
}

.print-doc--report .print-doc__param-value {
  color: #1e293b;
}

/* Results Table - clean borders, no background fills */
.print-doc--report .print-doc__table {
  border-collapse: collapse;
  font-size: 11px;
  width: 100%;
}

.print-doc--report .print-doc__table th,
.print-doc--report .print-doc__table td {
  border: 0.5pt solid #64748b;
  padding: 5pt 6pt;
  text-align: left;
  vertical-align: top;
  background-color: transparent;
  color: #000;            /* Explicit black — prevents Chrome's thin-gray rendering */
  font-family: Arial, Helvetica, sans-serif; /* mPDF MODE_CORE drops parent .print-doc cascade — see comment at line ~1169 */
}

.print-doc--report .print-doc__table th {
  color: #000;
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.3px;
  text-transform: uppercase;
  border-bottom-width: 1.5pt;
}

/* Currency columns — right-aligned, narrow, monospace for clean alignment */
.print-doc--report .print-doc__table th.print-doc__col-currency,
.print-doc--report .print-doc__table td.print-doc__col-currency {
  text-align: right;
  white-space: nowrap;
  font-family: 'Courier New', Courier, monospace;
  font-weight: bold;       /* Courier New has thinner strokes than Arial — needs bold to match in mPDF */
}

/* Summary/totals row — bold top border, dark text to stand out */
.print-doc--report .print-doc__table tfoot td {
  border-top: 2pt solid #334155;
  font-weight: 700;
  color: #000;
  padding-top: 6pt;
}

.print-doc--report .print-doc__table .print-doc__summary-label {
  font-weight: 700;
  color: #000;
  text-transform: uppercase;
  letter-spacing: 0.5px;
}

/* No zebra striping - consistent white background for all rows */
.print-doc--report .print-doc__table tr td {
  background-color: transparent;
}

/* Ensure nth-child doesn't add backgrounds */
.print-doc--report .print-doc__table tr:nth-child(even) td,
.print-doc--report .print-doc__table tr:nth-child(odd) td {
  background-color: transparent;
}

/* Empty State */
.print-doc--report .print-doc__empty {
  color: #64748b;
  font-style: italic;
  padding: 16pt;
  text-align: center;
}

/* Report 9: Classic centered header — matches legacy system layout */
.print-doc--report .print-doc__classic-header {
  text-align: center;
  margin-bottom: 10pt;
  padding-bottom: 0;
}

.print-doc--report .print-doc__classic-org {
  font-family: Arial, Helvetica, sans-serif; /* mPDF MODE_CORE drops parent .print-doc cascade onto child rules with their own props */
  font-size: 14pt;
  font-weight: 700;
  color: #000;
  line-height: 1.3;
}

.print-doc--report .print-doc__classic-sub {
  font-family: Arial, Helvetica, sans-serif;
  font-size: 10pt;
  font-weight: 700;
  color: #000;
  line-height: 1.4;
}

.print-doc--report .print-doc__classic-period {
  font-family: Arial, Helvetica, sans-serif;
  font-size: 11pt;
  font-weight: 700;
  color: #1e40af;
  text-decoration: underline;
  line-height: 1.6;
}

/* Blank date columns — equal width for handwriting space */
.print-doc--report td.print-doc__col-blank-date,
.print-doc--report th.print-doc__col-blank-date {
  width: 90pt;
}

/* Blank write-in note column (Trello #279) — generous handwriting lane for
   columns declared in a report's 'blankColumns'. Wider than the date boxes
   above because a free-form note needs more room than a date. */
.print-doc--report td.print-doc__col-writein,
.print-doc--report th.print-doc__col-writein {
  width: 120pt;
}

@media print {
  .print-doc--report .print-doc__table {
    page-break-inside: auto;
  }

  .print-doc--report .print-doc__table tr {
    page-break-inside: avoid;
    page-break-after: auto;
  }
}

/* ==========================================================================
   EMPLOYER ROSTER PRINT TEMPLATE (.print-doc--employer)

   SPEC #204 (2026-05-03): Extends .print-doc--report with a 2-column header
   table (title left, ID/Status above Generated date right) and roster column
   width hints. Header uses table layout — flex/grid is unreliable in mPDF
   MODE_CORE, and the table primitive is the same one all the legacy
   print-templates depend on.

   Column proportions tuned for an 8.5x11 portrait page at letter margins
   (~6.5in usable width), leaving address and name as the breathable cells
   so wraps land naturally.
   ========================================================================== */

/* mPDF MODE_CORE renders <h1>/<h2> with its built-in Times serif by default.
   Tried overriding via tag selectors, deep class chains, and inline style — each
   change to heading font triggers Chrome to *download* the PDF rather than
   render it inline (mPDF's font-subsetting alters the PDF byte stream enough
   that Chrome's "is this an attachment" heuristic flips). The serif title
   actually reads as classical / official for a printed roster, so we keep
   the default and ensure body/table cells inherit Arial via .print-doc. */

.print-doc--employer .print-doc__header-table {
  width: 100%;
  border-bottom: 2px solid #334155;
  border-bottom: 2px solid var(--ph-color-print-border);
  margin-bottom: 8pt;
  padding-bottom: 6pt;
}

.print-doc--employer .print-doc__header-title-cell {
  vertical-align: top;
  text-align: left;
  width: 65%;
}

.print-doc--employer .print-doc__header-meta-cell {
  vertical-align: top;
  text-align: right;
  width: 35%;
  font-size: 11px;
  font-size: var(--ph-font-size-print-sm);
  line-height: 1.4;
}

.print-doc--employer .print-doc__meta-line {
  color: #1e293b;
  color: var(--ph-color-text-strong);
  font-weight: 700;
  letter-spacing: 0.3pt;
  margin: 0 0 1pt;
}

.print-doc--employer .print-doc__meta-generated {
  color: #475569;
  color: var(--ph-color-text-muted);
  font-size: 10px;
  font-weight: 600;
  margin: 0;
}

/* Tighten the title cell — the .print-doc--report rules add top margin to
   __title that visually fights the right-aligned meta block. We want the
   title baseline to align roughly with the ID line on the right.
   Font-family is set explicitly: mPDF MODE_CORE doesn't reliably cascade the
   parent .print-doc Arial declaration onto inherited child rules, so the
   title silently falls back to Times. Set it here to keep the look matched
   to the rest of the report-class templates. */
.print-doc--employer .print-doc__header-title-cell .print-doc__title {
  margin: 0 0 2pt;
  font-family: Arial, Helvetica, sans-serif;
  font-size: 17px;
  font-weight: 700;
  color: #0f172a;
  color: var(--ph-color-text-strong);
}

.print-doc--employer .print-doc__header-title-cell .print-doc__subtitle {
  margin: 0;
  font-family: Arial, Helvetica, sans-serif;
  font-size: 11px;
  color: #475569;
  color: var(--ph-color-text-muted);
  font-style: italic;
}

.print-doc--employer .print-doc__header-meta-cell,
.print-doc--employer .print-doc__meta-line,
.print-doc--employer .print-doc__meta-generated {
  font-family: Arial, Helvetica, sans-serif;
}

/* Roster column hints — second-pass tuning (2026-05-03):
   First pass had Name=24% / Prog=11%, which fit short names but forced
   "APPRENTICE" to wrap into "APPRENTIC E" on the Program column. Reallocated
   ~5pp from Name and Job into Program so single-word values like APPRENTICE,
   PROBATION, MWI sit on one line. Long names (e.g. "KAHAKAUWILA, DANIEL J JR")
   now wrap to 2 lines naturally — line-height tightened so the wrap stays
   compact and the row keeps a single visual band with Address/Dispatch. */
.print-doc--employer .print-doc__table--roster th,
.print-doc--employer .print-doc__table--roster td {
  vertical-align: top;
}
.print-doc--employer .print-doc__table--roster .print-doc__col-name {
  width: 19%;
  line-height: 1.3;
}
.print-doc--employer .print-doc__table--roster .print-doc__col-class {
  width: 16%;
}
.print-doc--employer .print-doc__table--roster .print-doc__col-job {
  width: 9%;
}
.print-doc--employer .print-doc__table--roster .print-doc__col-addr {
  width: 28%;
}
.print-doc--employer .print-doc__table--roster .print-doc__col-disp {
  width: 12%;
  white-space: nowrap;
}
.print-doc--employer .print-doc__table--roster .print-doc__col-prog {
  width: 16%;
}

/* Address cell wraps to multi-line; date cell stays compact. */
.print-doc--employer .print-doc__table--roster .print-doc__cell-addr {
  line-height: 1.35;
  font-size: 10px;
}

.print-doc--employer .print-doc__table--roster .print-doc__cell-date {
  white-space: nowrap;
  font-variant-numeric: tabular-nums;
}

/* Footer total row — separated from the data with a subtle top rule, mirrors
   the legacy "Total Members = 4" line beneath the assignment list. */
.print-doc--employer .print-doc__roster-total td {
  border-top: 1.5pt solid #334155;
  border-top: 1.5pt solid var(--ph-color-print-border);
  padding-top: 6pt;
  font-weight: 700;
  font-size: 11px;
  color: #0f172a;
  color: var(--ph-color-text-strong);
  text-align: left;
}

/* ==========================================================================
   CONSOLIDATED SHEET (.cs-*) — Employer Remittance Document
   ========================================================================== */

/*
 * Design Intent:
 * - Matches legacy template layout for stakeholder familiarity
 * - Clean, professional, corporate appearance
 * - Function over form: clear data hierarchy, easy to fill in
 * - Ink-efficient: borders instead of fills for print economy
 */

.cs {
  font-family: Arial, Helvetica, sans-serif;
  font-size: 11pt;
  line-height: 1.35;
  color: #000;
}

.cs-page {
  width: 100%;
}

/* Detail (regular + MW) and summary pages need their own top padding because
 * the controller pins mPDF marginTop=0 for cover-letter envelope-window
 * alignment. Without this, the page header (date / "Plumbers and Fitters
 * Local 675" / "Page N") jams against the physical top edge of the paper
 * — printers will clip it, and even when they don't it looks unprofessional.
 * 36pt = 0.5in is the calibrated sweet spot: enough breathing room above the
 * header to survive a printer's clip area, but tight enough that the 30-row
 * data table (17pt rows × 30 = 510pt) + subheader + thead + tfoot still fits
 * on a single page. mPDF's table-break logic is conservative — at 50pt
 * padding it bumped Page Totals + table thead onto a phantom page, ballooning
 * a 4-page sheet to 6. The cover letter is intentionally NOT in this rule —
 * its top spacing lives inside .cs-letterhead so the recipient block's Y
 * stays envelope-calibrated.
 */
.cs-page--detail,
.cs-page--summary {
  /* Round 3: pulled 36pt → 18pt to reclaim space and fight the phantom-page
     bug (mPDF was bumping the data tfoot+thead onto an orphan continuation
     page even after the row-height pullback). 18pt still keeps the page
     header off the printer's clip edge. */
  padding-top: 18pt;
}

/* Letterhead (Page 1) -----------------------------------------------------
 * Stakeholder ask 2026-05-04: letterhead centered horizontally with the date
 * pulled INTO the centered block (org + 2 address lines + date). The 1in
 * margin-top pushes the letterhead down to ~1in from page top so the
 * recipient block lands at ~2¼in from page top (matching the annotated
 * spec on the marked-up image). mPDF marginTop=0 in the controller is kept
 * because the recipient address is what shows through the envelope window —
 * its absolute Y position is calibrated and must not move.
 */

.cs-letterhead {
  text-align: center;
  /* Padding NOT margin: mPDF MODE_BLANK collapses the first block's margin-top
     into the page's top margin (which the controller pins at 0 for envelope-
     window alignment), so margin-top: 1in evaporates. Padding-top is the
     reliable knob — it pushes the letterhead content down without participating
     in margin-collapse. 72pt = 1in (annotated top margin) lands the letterhead
     at 1in from page top; the 14pt margin-bottom + ~76pt of letterhead content
     puts the recipient block at ~2¼in (162pt) from page top — matching the
     envelope-window calibration AND the stakeholder spec. */
  padding-top: 72pt;
  margin-bottom: 14pt;
}

.cs-letterhead__org {
  font-size: 14pt;
  font-weight: 700;
  color: #000;
  margin-bottom: 2pt;
}

.cs-letterhead__addr {
  font-size: 11pt;
  color: #333;
  line-height: 1.4;
}

.cs-letterhead__date {
  font-size: 11pt;
  color: #000;
  margin-top: 10pt;
}

/* Cover Letter ------------------------------------------------------------
 * Stakeholder ask: more centered + spaced out like the legacy system.
 * Recipient sits at the page's left margin (envelope-window calibrated
 * margin-left preserved so the address still lands in the window).
 * Body paragraph is single-line. Numbered list is indented further (~1.5in
 * from page edge once the 0.6in mPDF margin is added) and uses a looser
 * line-height for visual breathing room ("more than single" annotation).
 */

.cs-letter__recipient {
  margin-top: 0;          /* Letterhead margin-bottom owns the gap */
  margin-left: 0.4in;     /* + mPDF 15mm L margin ≈ 1in from page edge */
  margin-bottom: 28pt;
  font-size: 11pt;
  line-height: 1.4;
  width: 4in;
}

.cs-letter__salutation {
  /* Round-3 pullback: 1in (72pt) gap looked unnatural — pulled to 24pt for a
     normal formal-letter rhythm. The breathing room the stakeholder wanted
     lives in the list line-spacing now (.cs-letter__instructions > li). */
  margin-left: 0.4in;
  margin-bottom: 24pt;
  font-size: 11pt;
}

.cs-letter__body {
  margin-left: 0.9in;     /* + mPDF 15mm L margin ≈ 1.5in from page edge */
  margin-right: 0;
  margin-bottom: 14pt;
  text-align: left;        /* Was justify — image shows left-aligned */
  line-height: 1.2;        /* Single line spacing */
  font-size: 11pt;
}

.cs-letter__instructions {
  /* margin-left: 0.8in lands the "1." marker at exactly 1.5in from page edge.
     0.9in (matching the body) overshoots because mPDF's <ol> implementation
     adds ~7pt of natural indent between margin-left and the digit's actual
     glyph origin. Pulling the margin back 0.1in compensates for that offset
     and aligns the marker with the stakeholder annotation. The list TEXT
     ends up at ~1.8in (digit + gutter), which still reads as a clean
     hanging-indent body — the digits are the visible left edge. */
  margin: 0 0 36pt 0.8in;
  padding: 0 0 0 22pt;
  font-size: 11pt;
}

.cs-letter__instructions > li {
  /* Round 4 (2026-05-07): subtle bump x2 — line-height 2.2→2.6 and
     margin-bottom 14→22pt for more breathing room between items. List
     also gets a 36pt tail so the block doesn't hug page bottom. */
  margin-bottom: 22pt;
  line-height: 2.6;
}

.cs-letter__instructions ul {
  margin: 4pt 0 0 18pt;
  padding: 0;
  list-style-type: disc;
}

.cs-letter__instructions ul li {
  margin-bottom: 3pt;
}

.cs-letter__address-block {
  /* Stakeholder ask 2026-05-06: indent the mail-to address block under
     item 9 further. Was 18pt; 36pt visually nests it under the list text
     (which lives ~22pt right of the digit marker). */
  display: block;
  margin-top: 6pt;
  margin-left: 36pt;
  line-height: 1.5;
}

/* Page Header (Summary & Detail Pages) ------------------------------------ */

.cs-header {
  width: 100%;
  border-collapse: collapse;
  /* Trello #207 round 6 (Naga 2026-05-25): 8pt → 3pt — claw back 5pt
     of chrome to fit more data rows. */
  margin-bottom: 3pt;
}

.cs-header td {
  vertical-align: top;
  padding: 0;
}

.cs-header__date {
  width: 20%;
  text-align: left;
  font-size: 10pt;
  font-family: Arial, Helvetica, sans-serif;
}

.cs-header__title {
  width: 60%;
  text-align: center;
  font-size: 11pt;
  line-height: 1.3;
  font-family: Arial, Helvetica, sans-serif;
}

.cs-header__page {
  width: 20%;
  text-align: right;
  font-size: 10pt;
  font-family: Arial, Helvetica, sans-serif;
}

/* Subheader (Employer / Statement / Payroll) ------------------------------
 * Stakeholder ask 2026-05-04: drop the outlines on the top row (employer
 * address / consolidated statement / payroll period). Reads cleaner without
 * the box. Padding stays so the three columns keep their visual rhythm.
 */

.cs-subheader {
  width: 100%;
  border-collapse: collapse;
  /* Trello #207 round 6 (Naga 2026-05-25): 12pt → 5pt — claw back 7pt. */
  margin-bottom: 5pt;
}

.cs-subheader td {
  vertical-align: top;
  /* Trello #207 round 6: 6pt → 3pt vertical to claw back ~6pt of chrome. */
  padding: 3pt 8pt;
}

.cs-subheader__employer {
  width: 35%;
  font-size: 10pt;
  line-height: 1.35;
  font-family: Arial, Helvetica, sans-serif;
}

.cs-subheader__label {
  font-weight: 700;
  font-family: Arial, Helvetica, sans-serif;
}

.cs-subheader__statement {
  width: 35%;
  text-align: center;
  font-size: 11pt;
  line-height: 1.4;
  font-family: Arial, Helvetica, sans-serif;
}

.cs-subheader__payroll {
  width: 30%;
  padding: 4pt;
}

.cs-payroll-box {
  width: 100%;
  border-collapse: collapse;
}

.cs-payroll-box td {
  padding: 2pt 4pt;
  text-align: center;
  font-size: 9pt;
  border: none;
  font-family: Arial, Helvetica, sans-serif;
}

.cs-payroll-box__title {
  font-weight: 600;
  border-bottom: 0.5pt solid #666;
  font-family: Arial, Helvetica, sans-serif;
}

.cs-payroll-box__label {
  font-size: 8pt;
  color: #333;
  font-family: Arial, Helvetica, sans-serif;
}

.cs-payroll-box__blank {
  /* Trello #207 round 3 (Pam 2026-05-20): Courier dropped — "ALL FONT change
     to sans serif style." The underscore line still renders fine in Arial. */
  font-family: Arial, Helvetica, sans-serif;
  font-size: 9pt;
}

/* Summary Section ---------------------------------------------------------
 * Stakeholder ask 2026-05-04 (cohesion across all pages): bump the summary
 * fonts in lockstep with the detail-page report bump so the document reads
 * as one family — title 12→13pt, supporting text 10→11pt. Section borders
 * (top+bottom rules around the SUMMARY-PAGE title) kept intentionally —
 * those are the page's anchor element. Only the top-row info-box border on
 * cs-subheader was removed upstream (shared class).
 */

.cs-summary {
  /* Stakeholder ask 2026-05-06: summary page body (everything below the
     header subheader block) is 1.5in inset from page edge. mPDF's default
     L margin is 15mm (≈0.59in), so add 0.91in CSS margin to land at 1.5in.
     Same inset applied to .cs-certification + .cs-union-use below. */
  margin: 0 0.91in 16pt 0.91in;
}

.cs-summary__title {
  /* Trello #207 round 3: <div> not <h2> in markup. Class-based selector
     still applies; explicit font-family because mPDF MODE_BLANK can drop the
     .cs Arial cascade onto child rules with their own font-size. */
  font-size: 13pt;
  font-weight: 700;
  text-align: center;
  margin: 0 0 8pt;
  padding: 4pt 0;
  border-top: 1pt solid #000;
  border-bottom: 1pt solid #000;
  font-family: Arial, Helvetica, sans-serif;
}

.cs-summary__subtitle {
  font-size: 11pt;
  font-weight: 600;
  margin-bottom: 6pt;
  font-family: Arial, Helvetica, sans-serif;
}

.cs-summary__table {
  width: 100%;
  border-collapse: collapse;
}

.cs-summary__table td {
  padding: 4pt 0;
  font-size: 11pt;
  vertical-align: middle;
  font-family: Arial, Helvetica, sans-serif;
}

.cs-summary__label {
  /* Round 3 (third pass): bumped 30% → 33% so "Total Dues and Initiation"
     (25 chars at 11pt Arial ≈ 1.85in) fits on one line. Sum across the 4
     columns is 33 + 25 + 17 + 25 = 100%. */
  width: 33%;
  text-align: left;
}

.cs-summary__label--right {
  width: 17%;
  text-align: right;
  padding-right: 8pt;
}

.cs-summary__value {
  /* 25% × 5.5in = 1.375in — fits "$ _______________" (16 underscores at 11pt
     Arial ≈ 1.3in) on a single line. white-space: nowrap is the belt to the
     width's suspenders: even if some math drifts, the value never wraps. */
  width: 25%;
  white-space: nowrap;
}

/* Certification Block ----------------------------------------------------- */

.cs-certification {
  /* Stakeholder ask 2026-05-06: full border around the certification block
     (was just border-top), and 1.5in inset matching .cs-summary. */
  margin: 20pt 0.91in;
  padding: 12pt;
  border: 1pt solid #000;
}

.cs-certification__statement {
  font-size: 11pt;
  margin-bottom: 16pt;
  font-family: Arial, Helvetica, sans-serif;
}

.cs-certification__table {
  width: 100%;
  border-collapse: collapse;
}

.cs-certification__table td {
  padding: 8pt 12pt 8pt 0;
  vertical-align: bottom;
}

.cs-certification__field {
  width: 50%;
}

/* Round 3: brought the line back as a real, full-cell-width writing line —
   stakeholder wants someone to actually sign on it. The fix for the previous
   collapse: the markup now has &nbsp; content (instead of an empty div),
   which forces mPDF MODE_BLANK to honor the height. padding-top creates the
   vertical writing space ABOVE the line; border-bottom draws the line at
   the bottom of that padded box. Cell-wide because parent td has no width
   constraint on the inner block — the &nbsp; text sits at the bottom of the
   padded box but the border draws the full block width. */
.cs-certification__line {
  /* Trello #207 round 3 (Pam 2026-05-20): switched primitive from <hr> to
     a 1-cell <table>. mPDF caps <hr>'s rendered weight even with `noshade
     size="3" color="#000"` — every <hr> attempt rendered as a thin gray
     hairline regardless of declared border-top weight (tried 1.5pt, 3pt,
     6pt). The fix: <table><tr><td>&nbsp;</td></tr></table> with background-
     color on the td. Table cells are mPDF's most reliable primitive for
     filled rectangles; bg-color renders as a literal black bar with no
     fade math. &nbsp; content + font-size:1pt + line-height:3pt forces
     the cell to honor its declared height (codex L139: cells without
     content can collapse in MODE_BLANK). */
  width: 100%;
  border-collapse: collapse;
  margin: 22pt 4pt 4pt 4pt;
}

.cs-certification__line td {
  /* Trello #207 round 4 (Pam 2026-05-24): 3pt bar → 1pt line. Pam asked
     for "darker" relative to faded <hr> hairline; round-3's 3pt bar
     overshot into modern-designer territory. Standard form-line weight
     is 1pt — visible, signable, not aggressive. */
  height: 1pt;
  background-color: #000;
  font-size: 1pt;
  line-height: 1pt;
  padding: 0;
  border: 0;
}

.cs-certification__label {
  /* Round 3: reverted to plain centered label below the line. */
  display: block;
  font-size: 10pt;
  color: #333;
  text-align: center;
  font-family: Arial, Helvetica, sans-serif;
}

/* Union Use Only Block ---------------------------------------------------- */

.cs-union-use {
  /* Stakeholder ask 2026-05-06: 1.5in inset matching .cs-summary +
     .cs-certification. Border was already present. */
  margin: 20pt 0.91in 0;
  padding: 10pt;
  border: 1.5pt solid #000;
}

.cs-union-use__title {
  font-size: 12pt;
  font-weight: 700;
  margin-bottom: 10pt;
  text-align: center;
  font-family: Arial, Helvetica, sans-serif;
}

.cs-union-use__table {
  width: 100%;
  border-collapse: collapse;
  margin-bottom: 8pt;
}

.cs-union-use__table td {
  padding: 4pt 0;
  font-size: 11pt;
  width: 50%;
  font-family: Arial, Helvetica, sans-serif;
}

.cs-union-use__comments {
  width: 100%;
  border-collapse: collapse;
}

.cs-union-use__comments td {
  padding: 3pt 0;
  font-size: 11pt;
  vertical-align: top;
  font-family: Arial, Helvetica, sans-serif;
}

.cs-union-use__comments-label {
  width: 15%;
}

.cs-union-use__comments-line {
  /* Stakeholder ask 2026-05-06: sans-serif everywhere — was Courier. */
}

/* Data Table (Detail Pages) -----------------------------------------------
 * Stakeholder ask 2026-05-04: bump report-portion text 1-2pt larger so member
 * names + class + amounts read cleaner from arm's length. Column rule of
 * thumb: body 10pt, headers 8pt, row height matches body line so 30 rows
 * still fit per page. Currency cells stay Courier mono — that's the
 * standard accounting alignment trick for a column of dollar figures.
 */

/* Trello #207 round 5 (Naga 2026-05-25): body 8pt → 10pt. R4 chose 8pt to
   honor Pam's "previous size" literally; Naga's R5 audit reverses that to
   10pt for arm's-length readability. Paired with rowsPerPage push to the
   empirical max so the detail page renders flush to the bottom margin
   (R4 wasted ~140pt of bottom slack per page; R5 fills it). Explicit
   font-family defends against mPDF MODE_BLANK dropping the .cs parent
   Arial cascade onto child rules that set their own font-size (silently
   reverts to Times serif). Same fix applied across every .cs-* rule that
   sets font-size (Pam's "ALL FONT change to sans serif style" ask). */
.cs-data {
  width: 100%;
  border-collapse: collapse;
  font-family: Arial, Helvetica, sans-serif;
  /* Trello #207 round 6 (Naga 2026-05-25): 10pt → 11pt. R5's 10pt was
     readable but Naga audited rendered output and called for one more
     step up for arm's-length comfort. Row geometry below scales
     proportionally; rowsPerPage recalibrated for the new orphan budget. */
  font-size: 11pt;
}

.cs-data__th,
.cs-data__td {
  border: none;
  /* Trello #207 round 7 (Pam 2026-05-26): vertical 1pt → 5pt. Pam:
     "Many contractors fill in their reports by hand and need the extra
     vertical space. May not be legible if they're writing in the small
     line." 5pt × 2 + 12pt set-height = 22pt actual row (was 14pt). Pam
     also gave explicit permission to drop density: "don't have to worry
     about getting as many members per page." Horizontal still 6pt. */
  padding: 5pt 6pt;
  vertical-align: middle;
  font-family: Arial, Helvetica, sans-serif;
}

.cs-data__th {
  font-weight: 600;
  /* Trello #207 round 6 (Naga 2026-05-25): 9pt → 10pt — proportional to
     11pt body (column headers stay ~1pt smaller for visual hierarchy). */
  font-size: 10pt;
  text-align: center;
  white-space: nowrap;
  border-bottom: 0.5pt solid #666;
  font-family: Arial, Helvetica, sans-serif;
}

.cs-data__th--name {
  text-align: left;
  /* Trello #207 round 3 (Pam 2026-05-20): 38% → 30%. Pam asked for "narrower
     gap to SSN" — long names will now ellipsis where they previously fit on
     one line. She approved the tradeoff explicitly: SSN last-4 is sufficient
     to verify which member when the name is truncated. */
  width: 30%;
}

/* SPEC 205: SSN last-4 column — fixed physical width (~0.55in) so the
   digits sit neatly between Name and Class without forcing line wrap. */
.cs-data__th--ssn {
  width: 36pt;
  text-align: center;
}

.cs-data__td--ssn {
  width: 36pt;
  font-family: 'Courier New', monospace;
  text-align: center;
}

.cs-data__th--class {
  width: 24pt;
}

.cs-data__th--currency {
  /* Round 4 (2026-05-07): 42pt → 36pt — currency columns had visible slack
     at the prior width (see screenshot). Trimmed evenly so each currency
     col gives 6pt back; name col absorbs the freed width. */
  width: 36pt;
}

/* Trello #207 round 3 (Pam 2026-05-20): blank-line input columns (Hours,
   Dues, PPAC) widened to 54pt = 0.75" so the form-blank line on the printed
   sheet matches Pam's annotation. The cs-data__th--input modifier sits next
   to cs-data__th--currency on the relevant headers — specificity falls in
   favor of --input (later rule) so 54pt wins over the 36pt --currency. */
.cs-data__th--input,
.cs-data__td--input {
  width: 54pt;
}

.cs-data__td {
  /* Trello #207 round 6 (Naga 2026-05-25): 10pt → 11pt matching .cs-data. */
  font-size: 11pt;
  font-family: Arial, Helvetica, sans-serif;
}

/* Fixed row height — single line, no wrapping. mPDF table-break heuristic
   bumps tfoot+thead to a phantom continuation page when the data block
   exceeds ~540pt under Arial (proven Round 4 ceiling at 8pt body + 15pt
   actual rows); design at or below that ceiling. */
.cs-data__row td {
  /* Trello #207 round 6 EXP (Naga 2026-05-25): 13pt → 12pt at 11pt body
     to push the orphan threshold lower (12 set + 4 pad = 16pt actual,
     35 × 16 = 560pt < ~580pt 11pt-body orphan ceiling). 1.09× line-
     height is the empirical floor for Arial — descenders on 'g/j/p/q/y'
     sit at the bottom of the line box; if they clip, bump back to 13pt. */
  height: 12pt;
  line-height: 12pt;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}

.cs-data__td--name {
  text-align: left;
  /* Trello #207 round 3 (Pam 2026-05-20): 200pt → 158pt to honor Pam's
     narrower-gap-to-SSN ask. Names like "KAHAKAUWILA, DANIEL J JR" will
     now ellipsis — explicitly approved by Pam since SSN last-4 verifies
     member identity when name is truncated. */
  max-width: 158pt;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}

/* Stakeholder ask 2026-05-07: top breathing between column-header rule
   and first member row. Trello #207 round 5 (Naga 2026-05-25): 4pt → 5pt
   proportional to 10pt body (was 4pt at 8pt body in R4). */
.cs-data tbody tr:first-child td {
  padding-top: 5pt;
}

.cs-data__td--class {
  text-align: center;
}

.cs-data__td--currency {
  /* Stakeholder ask 2026-05-06: sans-serif everywhere. Right-alignment still
     keeps the column's rightmost digit lined up across rows even with a
     proportional font. */
  text-align: right;
}

.cs-data__td--input {
  /* Round 5 (2026-05-17): cell is just a positioning container. The actual
     form-blank line lives on the inner <span class="cs-data__input-line"> so
     the line is discrete per column (narrower than cell width) with visible
     gaps from cell padding on both sides. vertical-align: bottom anchors the
     inner span and any value inside it to the row baseline.
     Round 6 (2026-05-17): text-align right → center. The column headers
     (.cs-data__th) are centered; right-anchoring the input line created
     visible horizontal drift between "Hours" / "Dues" / "Init" / "PPAC" and
     the underline below them. Centering puts the label, the line, and the
     filled-in value on the same vertical axis — admin reads the page top-to-
     bottom and the eye lands where it expects. Centered td + leading-and-
     trailing nbsp padding (template-side, $padNbsp) co-locates the digit on
     the line's midpoint. */
  text-align: center;
  vertical-align: bottom;
}

.cs-data__input-line {
  /* Per-column form-blank line via text-decoration: underline. mPDF respects
     this reliably (inline-block + width was ignored). The span is inline
     (sizes to content), the underline draws under the entire content — and
     because each <td> contains its own <span>, the underlines are bounded by
     the cell. Adjacent cells have ~12pt of total padding between them, so
     the per-column lines read as discrete. Content padded with leading &nbsp;
     in the template so empty cells still show a line of consistent length. */
  text-decoration: underline;
  text-decoration-color: #666;
}

/* Round 6 v2 (2026-05-17): the digit-lift mechanism. When a cell carries
   a value (e.g. "10.00" for an apprentice's init due), the template wraps
   it in this inner span. text-decoration: underline on the OUTER .cs-data__
   input-line draws the line at the inline-run baseline; position: relative
   on this inner span paints the digit 2pt higher than its natural position
   WITHOUT shifting the baseline of the underline. Net visual: the digit
   floats above the line with a visible gap, while the line stays anchored
   at the row's bottom — what you'd see on a hand-filled paper form.
   Empty cells skip this inner span entirely (no value to lift), so the
   line draws identically to round 5/round 6 v1. mPDF position: relative
   support is "partial" per project gotcha notes; basic vertical offsets
   render reliably — if a future mPDF upgrade breaks this, swap to <sup>
   with explicit font-size as the fallback. */
.cs-data__input-line__value {
  position: relative;
  bottom: 2pt;
}

/* Filler rows are visual spacers — they must NOT render the form-blank line.
   Filler markup uses &nbsp; directly without the inner span, so this is a
   safety net in case a future change wires the span into filler rows. */
.cs-data__row--filler .cs-data__input-line {
  text-decoration: none;
}

.cs-data__td--totals-label {
  text-align: right;
  font-weight: 600;
  padding-right: 8pt;
}

/* Trello #207 round 7 (Pam 2026-05-26): Page Totals $ left-aligned.
   Pam: "could you move the $ to left for each column?" The $ symbol now
   sits at the left edge of each currency column on the Page Totals row,
   anchoring the hand-written total that the employer will fill in.
   Overrides .cs-data__td--currency right-alignment via later-rule wins.
   Padding-left matches .cs-data__th, .cs-data__td horizontal padding. */
.cs-data__td--totals-value {
  text-align: left;
  padding-left: 6pt;
}

.cs-data__totals td {
  border-top: 0.5pt solid #000;
  font-weight: 600;
}

/* SPEC 205: Section header above the Maintenance Worker data table.
   Appears only on the first MW page, above the data table.
   Keeps visual weight consistent with the summary title style.
   Stakeholder ask 2026-05-04: bumped to 11pt for cohesion with the
   surrounding body text. */
.cs-section-title {
  /* Trello #207 round 3: <div> not <h2> in markup (mPDF MODE_CORE renders
     h2 as Times serif and overriding font-family flips Chrome to download).
     Class selector + explicit font-family delivers the sans-serif look
     without touching the heading tags. */
  font-size: 11pt;
  font-weight: 700;
  text-align: center;
  margin: 4pt 0 3pt 0;
  padding: 2pt 0;
  border-top: 0.5pt solid #000;
  border-bottom: 0.5pt solid #000;
  letter-spacing: 0.5pt;
  font-family: Arial, Helvetica, sans-serif;
}

/* Print-specific ---------------------------------------------------------- */

@media print {
  .cs-page {
    page-break-inside: avoid;
  }

  .cs-data tr {
    page-break-inside: avoid;
  }
}

/* ==========================================================================
   MEMBER SUMMARY PRINT TEMPLATE (.print-doc--member-summary)

   Design: Data-dense, corporate, ops-focused single-page layout
   Constraint: MUST fit on one Letter page (8.5x11") with 10mm margins

   Color palette (from theme.css):
   - Primary blue: #1d4ed8
   - Text primary: #000000
   - Text muted: #475569
   - Border: #cbd5e1
   - Surface accent: #f8fafc
   ========================================================================== */

/* TYPOGRAPHIC SCALE — anchored at 13pt body for print readability
 *
 *   22pt  — Hero (member name)
 *   13pt  — Body (field values — the data aunty reads)
 *   12pt  — H2 (date generated)
 *   11pt  — Support (labels, badge, card#, section headers, comment body)
 *   10pt  — Meta (comment dates, time)
 *    8pt  — Micro (photo placeholder only)
 */

.print-doc--member-summary {
  font-family: Arial, Helvetica, sans-serif;
  font-size: 13pt;
  line-height: 1.35;
  color: #1e293b;
  max-width: 100%;
  /* Multi-page: stakeholder cleared the single-page cap (Trello #200 follow-up).
     Comment table is allowed to spill onto additional pages. */
}

/* HEADER ------------------------------------------------------------------ */

.ms-header {
  width: 100%;
  border-collapse: collapse;
  margin-bottom: 8pt;
  border-bottom: 1.5pt solid #1d4ed8;
  padding-bottom: 5pt;
}

.ms-header td {
  vertical-align: middle;
  padding: 0;
}

.ms-header__logo {
  width: 15%;
  text-align: left;
}

.ms-header__logo img {
  max-height: 42pt;
  max-width: 100pt;
}

.ms-header__identity {
  width: 65%;
  text-align: center;
}

.ms-header__status-line {
  margin-bottom: 2pt;
}

.ms-header__status {
  display: inline-block;
  font-size: 11pt;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.8pt;
  padding: 2pt 12pt;
  border: 1pt solid;
  border-radius: 2pt;
}

.ms-header__status--success {
  color: #166534;
  border-color: #bbf7d0;
  background: #f0fdf4;
}

.ms-header__status--warning {
  color: #9a3412;
  border-color: #fed7aa;
  background: #fff7ed;
}

.ms-header__status--danger {
  color: #991b1b;
  border-color: #fecaca;
  background: #fef2f2;
}

.ms-header__status--default {
  color: #475569;
  border-color: #e2e8f0;
  background: #f8fafc;
}

.ms-header__name {
  font-size: 22pt;
  font-weight: 700;
  color: #0f172a;
  letter-spacing: 0.3pt;
}

.ms-header__card-no {
  font-size: 11pt;
  color: #64748b;
  margin-top: 1pt;
  letter-spacing: 0.2pt;
}

.ms-header__generated {
  width: 20%;
  text-align: right;
  font-size: 12pt;
  color: #334155;
  font-weight: 600;
}

.ms-header__time {
  font-size: 10pt;
  color: #64748b;
  font-weight: 400;
}

/* DATA GRID — single table, 3 cols × 2 rows for true column alignment ---- */

.ms-grid {
  width: 100%;
  border-collapse: collapse;
  /* Lock the 33%/34%/33% outer columns. Without fixed layout, mPDF will grow
     any column to fit an unbreakable token inside it (long emails, no-space
     streets), which then pushes the sibling cells off their declared widths
     and visually warps the grid. Fixed layout makes those values overflow
     horizontally instead — union-print convention, matches the address row. */
  table-layout: fixed;
}

.ms-grid__cell {
  vertical-align: top;
  padding: 0 6pt 10pt 0;
}

.ms-grid__cell:last-child {
  padding-right: 0;
}

/* Extra bottom gap for row 1 cells so Contact has breathing room */
tr:first-child .ms-grid__cell {
  padding-bottom: 14pt;
}

/* PHOTO ------------------------------------------------------------------- */

.ms-photo-placeholder {
  width: 100%;
  height: 100pt;
  border: 0.5pt solid #e2e8f0;
  background: #f8fafc;
  text-align: center;
  line-height: 100pt;
  font-size: 10pt;
  color: #94a3b8;
}

/* SECTIONS ---------------------------------------------------------------- */

.ms-section {
  margin-bottom: 4pt !important;
}

.ms-section__header {
  font-size: 11pt;
  font-weight: 700;
  color: #1d4ed8;
  text-transform: uppercase;
  letter-spacing: 0.8pt;
  border-bottom: 0.5pt solid #cbd5e1;
  padding-bottom: 2pt;
  margin-bottom: 4pt !important;
}

/* FIELD TABLE ------------------------------------------------------------- */

.ms-fields {
  width: 100%;
  border-collapse: collapse;
  /* Lock the 38%/62% label/value split inside each Contact/Identity/etc.
     section. See `.ms-grid` for the same reasoning — long unbreakable values
     spill horizontally instead of stretching the cell and breaking alignment
     with the sibling rows. */
  table-layout: fixed;
}

.ms-fields td {
  padding: 1pt 0;
  vertical-align: top;
}

.ms-label {
  width: 38%;
  font-size: 11pt;
  font-weight: 400;
  color: #64748b;
  padding-right: 3pt;
  white-space: nowrap;
}

.ms-value {
  width: 62%;
  font-size: 13pt;
  color: #0f172a;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  max-width: 140pt;
}

.ms-value--mono {
  font-family: Arial, Helvetica, sans-serif;
  font-size: 13pt;
  letter-spacing: 0.3pt;
}

.ms-value--address {
  /* Long addresses wrap at the commas/spaces that MemberSummaryService
     inserts; unbreakable streets render on one line and spill horizontally
     past the 62% value cell (column widths are locked by the table-layout:
     fixed rule on `.ms-fields`/`.ms-grid`, so the spill does not warp the
     sibling rows). Union-print convention. */
  font-size: 11pt;
  line-height: 1.25;
  white-space: normal;
  max-width: 140pt;
}

/* Wrap modifier — used by fields whose content can be long (employer, email).
   Disables the default nowrap+ellipsis so content flows onto multiple lines
   at any whitespace break point. For no-space strings like emails, mPDF
   MODE_CORE will not insert break points (CSS word-break/wbr/soft-hyphen are
   all no-ops here), so the value renders on a single line and spills past
   the cell. Column widths stay rigid because `.ms-fields`/`.ms-grid` use
   table-layout: fixed, so the spill does not warp sibling rows. */
.ms-value--wrap {
  white-space: normal;
  max-width: 140pt;
  text-overflow: clip;
  overflow: visible;
}

.ms-value--periods {
  font-size: 10pt;
  white-space: normal;
  max-width: 160pt;
  line-height: 1.3;
}

/* COMMENTS — compact table layout ----------------------------------------- */

.ms-comments {
  margin-top: 6pt;
  padding-top: 4pt;
  border-top: 0.5pt solid #cbd5e1;
  /* No page-break-inside: avoid here — comments are allowed to paginate.
     Per-row break-avoidance lives on .ms-comments__table tr below. */
}

.ms-comments__header {
  font-size: 11pt;
  font-weight: 700;
  color: #1d4ed8;
  text-transform: uppercase;
  letter-spacing: 0.8pt;
  margin-bottom: 3pt;
}

.ms-comments__table {
  width: 100%;
  border-collapse: collapse;
}

.ms-comments__table tr {
  page-break-inside: avoid;
}

.ms-comments__table td {
  padding: 2pt 0;
  vertical-align: top;
  border-bottom: 0.25pt solid #e2e8f0;
}

.ms-comments__table tr:last-child td {
  border-bottom: none;
}

.ms-comments__date {
  width: 25%;
  font-size: 10pt;
  color: #64748b;
  white-space: nowrap;
  padding-right: 4pt;
}

.ms-comments__body {
  width: 75%;
  font-size: 11pt;
  color: #1e293b;
  line-height: 1.35;
}

.ms-comments__overflow {
  font-size: 10pt;
  color: #64748b;
  font-style: italic;
  padding-top: 2pt;
}

.ms-comments__none {
  font-size: 11pt;
  color: #64748b;
  font-style: italic;
}

/* PRINT-SPECIFIC ---------------------------------------------------------- */

@media print {
  /* Keep the 3×2 grid intact on its first page; comments may flow onto p.2+. */
  .ms-grid {
    page-break-inside: avoid;
  }

  .ms-section {
    page-break-inside: avoid;
  }
}

/* ============================================================
   EMPLOYER SUMMARY PRINT TEMPLATE (.print-doc--employer-summary)
   Trello #204 pass-4 (2026-05-05): graduates Employer print onto
   the ms-* lane established by the Member summary. Reuses
   ms-header / ms-section / ms-fields. Adds .ms-data-table for
   data grids (Contracts + Roster).
   Landscape orientation set in EmployerController::actionPrint
   via 'orientation' => 'L' (NOT in CSS @page).
   ============================================================ */

.print-doc--employer-summary {
  font-family: Arial, Helvetica, sans-serif;
  font-size: 11pt;
  line-height: 1.35;
  color: #1e293b;
  max-width: 100%;
}

/* DATA TABLES (Contracts + Roster) ------------------------------ */

.ms-data-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 9.5pt;
  margin-top: 4pt;
}

.ms-data-table th,
.ms-data-table td {
  border: 0.5pt solid #cbd5e1;
  padding: 3pt 5pt;
  vertical-align: top;
}

.ms-data-table th {
  background: #f1f5f9;
  text-align: left;
  font-weight: 700;
  color: #1e293b;
  text-transform: uppercase;
  letter-spacing: 0.4pt;
  font-size: 8.5pt;
}

.ms-data-table tr:nth-child(even) td {
  background: #fbfcfd;
}

.ms-data-table tfoot td {
  background: #e2e8f0;
  font-weight: 700;
  text-align: right;
  border-top: 1pt solid #94a3b8;
}

/* Roster column widths — Letter landscape has ~720pt usable width.
   Sums to ~715pt; Address is the flex column (no explicit width). */
.ms-data-table--roster .col-name { width: 150pt; }
.ms-data-table--roster .col-class { width: 50pt; text-align: center; }
.ms-data-table--roster .col-job { width: 60pt; text-align: center; }
.ms-data-table--roster .col-addr { /* flex */ }
.ms-data-table--roster .col-phone { width: 90pt; }
.ms-data-table--roster .col-disp { width: 65pt; text-align: center; }
.ms-data-table--roster .col-prog { width: 90pt; }

.ms-empty {
  padding: 12pt 0;
  text-align: center;
  color: #94a3b8;
  font-style: italic;
}

/* ==========================================================================
   PAYMENT RECEIPT — old-system aligned chassis (Pam alignment 2026-05-09)
   Pairs with views/trans/print/receipt-modern.php.
   Page is 0.5" margins via mPDF; bottom 3.5" reserved for htmlpagefooter
   (address window + disclaimer + bottom-left PAYMENT RECEIPT badge).
   ========================================================================== */

.print-doc--payment-receipt {
  font-family: Arial, Helvetica, sans-serif;
  font-size: 11pt;
  line-height: 1.35;
  color: #000;
}

/* Letterhead row: 3-cell table — left pad / centered org block / right badge cell */
.print-doc--payment-receipt .rcpt-header {
  border-collapse: collapse;
  margin-bottom: 14pt;
  width: 100%;
}
.print-doc--payment-receipt .rcpt-header__pad,
.print-doc--payment-receipt .rcpt-header__badge {
  vertical-align: top;
  width: 1.6in;
}
.print-doc--payment-receipt .rcpt-header__center {
  font-size: 11pt;
  text-align: center;
  vertical-align: top;
}
.print-doc--payment-receipt .rcpt-header__org {
  font-size: 12pt;
  font-weight: 700;
  letter-spacing: 0.3px;
}
.print-doc--payment-receipt .rcpt-header__badge {
  text-align: right;
}

/* Boxed PAYMENT RECEIPT badge — used both top-right + bottom-left */
.print-doc--payment-receipt .rcpt-badge {
  border: 1pt solid #000;
  display: inline-block;
  font-size: 10pt;
  font-weight: 700;
  letter-spacing: 0.5px;
  padding: 8pt 14pt;
}

/* Two-row info bar: SocSec# + Receipt# / Emp#/Name + Date */
.print-doc--payment-receipt .rcpt-info {
  border-collapse: collapse;
  font-size: 11pt;
  margin-bottom: 18pt;
  width: 100%;
}
.print-doc--payment-receipt .rcpt-info td {
  padding: 1pt 0;
}
.print-doc--payment-receipt .rcpt-info__l {
  text-align: left;
  width: 60%;
}
.print-doc--payment-receipt .rcpt-info__r {
  text-align: right;
  width: 40%;
}

/* Period table — top horizontal rule under headers; no vertical rules; blank cells for zero */
.print-doc--payment-receipt .rcpt-table {
  border-collapse: collapse;
  font-size: 11pt;
  margin-bottom: 12pt;
  width: 100%;
}
.print-doc--payment-receipt .rcpt-table th,
.print-doc--payment-receipt .rcpt-table td {
  border: 0;
  padding: 4pt 6pt;
  vertical-align: top;
}
.print-doc--payment-receipt .rcpt-table__group th {
  border-bottom: 0;
  font-size: 10pt;
  font-weight: 700;
  padding-bottom: 0;
  text-align: left;
}
.print-doc--payment-receipt .rcpt-table__head th {
  border-bottom: 1pt solid #000;
  font-weight: 700;
  text-align: right;
}
.print-doc--payment-receipt .rcpt-table__head .rcpt-col-month,
.print-doc--payment-receipt .rcpt-table__head .rcpt-col-year {
  text-align: left;
}
.print-doc--payment-receipt .rcpt-col-month {
  text-align: left;
  width: 0.7in;
}
.print-doc--payment-receipt .rcpt-col-year {
  text-align: left;
  width: 0.7in;
}
.print-doc--payment-receipt .rcpt-col-amt {
  text-align: right;
  white-space: nowrap;
}

/* Total Received row: top rule, no $ on intermediate cells, $ + bold on Total */
.print-doc--payment-receipt .rcpt-table__total td {
  border-top: 1pt solid #000;
  font-weight: 700;
  padding-top: 8pt;
}
.print-doc--payment-receipt .rcpt-table__total-label {
  text-align: right;
}

/* "By: S. Barrett Jr." trailing line */
.print-doc--payment-receipt .rcpt-table__by-cell {
  border: 0;
  font-weight: 700;
  padding-top: 4pt;
  text-align: right;
}

/* ----- Bottom 3.5" zone (htmlpagefooter content) ----- */

.print-doc--payment-receipt .rcpt-footer {
  font-family: Arial, Helvetica, sans-serif;
  font-size: 11pt;
  line-height: 1.35;
}

/* Address window — top of footer = 7.5" from page top.
   Box: 3.5" wide × 1.25" tall, indented 0.25" from page-content-left
   (page already has 0.5" left margin → window left edge = 0.75" from page edge). */
.print-doc--payment-receipt .rcpt-window {
  font-size: 11pt;
  height: 1.25in;
  line-height: 1.4;
  margin-left: 0.25in;
  width: 3.5in;
}
.print-doc--payment-receipt .rcpt-window__name {
  font-weight: 700;
}

/* Centered disclaimer sits below window box */
.print-doc--payment-receipt .rcpt-disclaimer {
  font-size: 10pt;
  font-style: italic;
  margin-top: 0.45in;
  text-align: center;
}

/* Bottom-left PAYMENT RECEIPT badge */
.print-doc--payment-receipt .rcpt-bottom-badge {
  margin-left: 0;
  margin-top: 0.3in;
}
