/* ============================================================
   cetak.css — lembar cetak A4 untuk laporan SP.

   Dipakai halaman `…/cetak` (mis. `/laporan-akuntansi/jurnal/cetak`) yang memakai
   `CetakLayout` + `<CetakLaporan>`, jadi yang tercetak **hanya laporannya**: sidebar,
   header, tombol, dan tema aplikasi tidak ikut (keputusan user 2026-09-17 — catatan
   "Buatkan Printable version dari semua Laporan … rapi dan pas untuk kertas A4, berisi
   tempat ttd Pengurus dan Pengawas").

   Ukuran: 210mm × 297mm (A4). Di layar lembarnya digambar selebar kertas aslinya supaya
   yang dilihat = yang tercetak; margin kertas diatur `@page` saat mencetak.
   ============================================================ */

/* Margin kertas: cukup lega supaya BINGKAI laporan tidak terpotong area tak-tercetak printer
   (catatan user 2026-09-16: "saat mau di print kepotong, terutama kiri kanannya"), tetapi
   DIPERKECIL 2026-09-18 atas permintaan user — "Kurangi page margin pada semua laporan
   akuntansi" (16mm × 18mm → 12mm × 12mm). Angka ini SAMA dengan padding `.cetak-sheet` di
   layar, jadi yang dilihat = yang tercetak. Kalau printer Anda masih memotong, naikkan dua
   angka ini bersama-sama. */
@page {
    size: A4 portrait;
    margin: 12mm 12mm;
}

.cetak-shell {
    background: #e6e7eb;
    min-height: 100vh;
    padding: 16px 0 40px;
}

/* Toolbar (Cetak / Kembali) — tidak pernah tercetak. */
.cetak-toolbar {
    width: 210mm;
    max-width: calc(100% - 24px);
    margin: 0 auto 10px;
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
    font-family: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
}

/* Toolbar ikut lebar kertas pada lembar landscape (Neraca Lajur). */
.cetak-toolbar.ct-lanskap-toolbar { width: 297mm; }

.cetak-toolbar .ct-info {
    font-size: 12px;
    color: #3a3a3a;
    margin-right: auto;
}

/* Label pendek di dalam toolbar (mis. "Jenis surat:") — tidak mengambil sisa lebar seperti
   `.ct-info`, karena ia berdampingan dengan tombol-tombolnya, bukan mendorongnya ke kanan. */
.cetak-toolbar .ct-inline-label {
    font-size: 12px;
    color: #3a3a3a;
    flex: 0 0 auto;
}

.cetak-sheet {
    background: #fff;
    color: #000;
    width: 210mm;
    min-height: 297mm;
    margin: 0 auto;
    padding: 12mm 12mm;
    box-shadow: 0 6px 26px rgba(0, 0, 0, 0.18);
    font-family: "Times New Roman", Times, serif;
    font-size: 11.5pt;
    line-height: 1.35;
}

/* Butir 1 catatan user 2026-09-18: "Jangan memakai Font dengan warna selain Hitam".
   Isi lembar = tinta hitam saja; warna tema aplikasi (biru/abu) tidak boleh ikut ke kertas.

   `!important` di sini bukan hiasan: komponen bersama (`shared.css`) memakai token tema untuk
   teks bantunya (`.nt-ringkas .baris span`, `.nt-selisih`, `.nt-kosong`) dengan spesifisitas
   lebih tinggi daripada `.cetak-sheet *`, sehingga tanpa itu ada tulisan berwarna
   `rgb(203, 213, 225)` — abu sangat terang, nyaris tak terbaca di kertas. */
.cetak-sheet,
.cetak-sheet * { color: #000 !important; }

/* Lembar LANDSCAPE (Neraca Lajur — butir 9: "Tampilkan pada A4 Landscape").
   Di layar lebarnya mengikuti kertas aslinya supaya yang dilihat = yang tercetak. */
.cetak-sheet.ct-lanskap {
    width: 297mm;
    min-height: 210mm;
    padding: 10mm 12mm;
}

@page lajur {
    size: A4 landscape;
    margin: 10mm 12mm;
}

@media print {
    .cetak-sheet.ct-lanskap { page: lajur; width: auto; min-height: 0; padding: 0; }
}

/* ── Kop laporan ───────────────────────────────────────── */
.cetak-kop {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    border-bottom: 2.5px double #000;
    padding-bottom: 6px;
    margin-bottom: 10px;
}

.cetak-kop .ct-logo {
    width: 58px;
    height: 58px;
    flex: 0 0 58px;
}

.cetak-kop .ct-kop-teks { flex: 1; text-align: center; }
.cetak-kop .ct-nama {
    font-weight: 700;
    font-size: 14pt;
    text-transform: uppercase;
    letter-spacing: 0.3px;
}

.cetak-kop .ct-alamat { font-size: 9.5pt; }

/* Bagian narasi di dalam lampiran dokumen (CALK): sub-judul yang lebih kecil dari judul bab,
   teks rata kanan-kiri, dan jarak antar paragraf supaya terbaca sebagai catatan — bukan tabel. */
.ctd-lap-bagian { font-weight: 700; font-size: 9.5pt; margin: 6pt 0 2pt; }
.ctd-lap-teks { text-align: justify; font-size: 9.5pt; line-height: 1.35; margin: 0 0 3pt; }

/* Istilah lama judul ("(Neraca)" di bawah "LAPORAN POSISI KEUANGAN") — kecil & miring supaya
   jelas hanya penunjuk, bukan bagian judul resmi berkas Permenkop. */
.cetak-judul-lama {
    text-align: center;
    font-style: italic;
    font-size: 9.5pt;
    margin-top: 1pt;
}

.cetak-judul {
    border-bottom: .9pt solid #000;
    text-align: center;
    font-weight: 700;
    font-size: 12.5pt;
    text-transform: uppercase;
    text-decoration: underline;
    margin: 2px 0;
}

.cetak-periode {
    border-bottom: 1.6pt double #000;
    text-align: center;
    font-size: 10.5pt;
    margin-bottom: 10px;
}

.ct-seksi {
    font-weight: 700;
    font-size: 11pt;
    margin: 12px 0 4px;
    page-break-after: avoid;
}

/* ── Tabel ─────────────────────────────────────────────── */
/* Kerangka tabel laporan — bentuk yang dibuktikan user pada contoh kecil
   (`contoh-neraca-per-sandi.html`: "Column dan tetap harus ada line" + "border bawah"),
   lalu diminta untuk SEMUA laporan kecuali Neraca Skontro:
   "Semua Laporan Akuntansi kecuali neraca Skontro agar tiap kolom menggunakan divider dan
   border pada kiri kanan" (catatan user 2026-09-18, butir 4 & 5).

   Jadi: **divider tegak di tiap kolom** + **border luar kiri/kanan**, sedangkan garis
   MENDATAR hanya di bawah kepala kolom dan di sekitar baris total — bukan kotak penuh per sel.
   Latar abu-abu dibuang: kertas laporan lembaga polos, tintanya hitam saja (butir 1: "Jangan
   memakai Font dengan warna selain Hitam"). */
table.ct {
    width: 100%;
    border-collapse: collapse;
    font-size: 10.5pt;
    border: .7pt solid #000;
}

table.ct th,
table.ct td {
    border: 0;
    border-left: .6pt solid #000;
    padding: 2px 5px;
    vertical-align: top;
}

/* Garis kiri kolom pertama sudah datang dari border luar tabel — jangan digandakan. */
table.ct th:first-child,
table.ct td:first-child { border-left: 0; }

/* Lebar kolom yang ditulis di `<th style="width:NNmm">` SUDAH TERMASUK padding sel.
   Nyata (uji peramban 2026-09-20): tanpa `border-box`, lebar itu dihitung dari isi saja sementara
   padding 2×5px (±2,6mm) ditambahkan DI LUARNYA — tabel 10 kolom jadi ~26mm lebih lebar dari
   anggaran dan tepi kanannya keluar lembar A4, walau hitungan `KolomKertas`-nya benar (persis
   kelas cacat yang diminta user 2026-09-20 untuk dicegah: "jangan sampai lewat"). */
table.ct th,
table.ct td { box-sizing: border-box; }

table.ct thead th {
    text-align: center;
    font-weight: 700;
    border-bottom: .7pt solid #000;
}

table.ct td.r,
table.ct th.r { text-align: right; white-space: nowrap; }
table.ct td.c,
table.ct th.c { text-align: center; }
table.ct td.mono { font-family: "Courier New", monospace; font-size: 10pt; }
table.ct td.b { font-weight: 700; }
table.ct tfoot td { font-weight: 700; border-top: .7pt solid #000; }
/* Baris total terakhir = satu-satunya garis penutup (ganda, seperti contoh lembaga). */
table.ct tfoot tr:last-child td { border-bottom: 1.6pt double #000; }
table.ct tr { page-break-inside: avoid; }

/* Baris judul KELOMPOK di dalam tabel — mis. kategori COA "AKTIVA"/"PASSIVA" pada Laporan
   Komparatif, "Jenis: Perorangan" pada Daftar Anggota, kelompok jenis pada Laporan Kesehatan.
   Tebal + garis mendatar di BAWAHNYA (pemisah ke baris datanya) DAN di ATASNYA (pemisah dari
   blok sebelumnya).
   Catatan user 2026-09-25: "banyak group header yang bottom divider nya gak ada … malah passiva
   gak ada divider atas dan bawah" — dulu kelas ini HANYA menebalkan huruf, sehingga judul
   kelompok menempel langsung ke baris datanya dan batas antar-blok tidak terbaca. */
table.ct tr.ct-grup > td {
    font-weight: 700;
    border-top: .7pt solid #000;
    border-bottom: .7pt solid #000;
}

/* Kelompok PERTAMA tidak butuh garis atas: kepala kolom (`thead th`) sudah menarik garis di
   situ — dua garis berjarak satu baris hanya terbaca sebagai garis kembar. */
table.ct > tbody > tr.ct-grup:first-child > td { border-top: 0; }

/* Tingkat HEADER CoA di dalam laporan "Per Akun Detail" (kategori CoA → header CoA → akun):
   baris judul header memakai `ct-grup` (tebal + garis atas/bawah) dengan indentasi hanya di sel
   PERTAMA (label) — sel angkanya tidak digeser. Nama akun di bawahnya menjorok. Kolom KODE tidak
   dijorokkan pada baris akun: kolomnya hanya 22mm dan "1111011001" (10 digit, Courier) sudah
   hampir memenuhi lebar itu. */
table.ct tr.ct-grup-anak > td:first-child { padding-left: 7mm; }
table.ct td.ct-anak { padding-left: 4mm; }

/* Baris jumlah di bawah tabel kertas (`PagerBaris` mode Kertas): selebar kotak lembar =
   186mm — persis sama dengan kolom tabelnya, rata kanan, tanpa tombol. */
.rep-pager-kertas { justify-content: flex-end; margin-top: 6px; font-size: 8pt; }
.rep-pager-kertas .rep-pager-info { font-size: 8pt; color: #000; }

/* ── Jurnal Umum bentuk Head–Detail ──
   Catatan user 2026-09-18 butir 7: "Seperti legacy: gunakan Laporan Head Detail agar
   tempatnya cukup di kertas A4. 1 Nomor Transaksi, tanggal, keterangan, nominal di Head,
   kemudian detailnya hanya Idx, kode Akun, nama Akun, Keterangan, Debet, Kredit".
   Kepala transaksi ditulis SEKALI sebagai satu baris pita selebar tabel, detailnya di bawahnya. */
/* Pita kepala transaksi (Jurnal Umum bentuk Head–Detail): garis di ATAS dan BAWAHNYA — sama
   aturannya dengan kepala blok lain ("tiap kepala wajib punya garis mendatar di bawahnya",
   catatan user 2026-09-16 yang sebelumnya berhenti di `ct-kepala` saja). `jr-head` bisa
   dirangkai dengan `ct-kepala` (Buku Besar) — nilainya sama, jadi tidak ada garis ganda. */
table.ct tr.jr-head > td {
    border-top: .7pt solid #000;
    border-bottom: .7pt solid #000;
    padding: 3px 5px;
    background: none;
}

/* Kepala BLOK di dalam tabel: kepala akun pada "Buku Besar — Semua Akun" dan baris
   `Saldo awal` pada "Buku Besar — Mutasi Akun". Garis mendatar juga di BAWAH kepala,
   bukan hanya di atas — catatan user 2026-09-16: "Laporan Buku besar: tiap Header harus
   ada horizontal divider nya" (dulu kepalanya menempel langsung ke baris mutasinya). */
table.ct tr.ct-kepala > td { border-bottom: .7pt solid #000; }

/* Pita kepala: nomor transaksi · tanggal · keterangan · nominal, sejajar kolom di bawahnya. */
table.ct .jr-pita { display: flex; gap: 4mm; align-items: baseline; }
table.ct .jr-no { font-family: "Courier New", monospace; font-weight: 700; min-width: 30mm; }
table.ct .jr-tgl { min-width: 22mm; }
table.ct .jr-ket { flex: 1 1 auto; }
table.ct .jr-nom { text-align: right; font-weight: 700; white-space: nowrap; }
/* Baris detail tidak mengulang kepala transaksi — kolomnya jadi 6 (Idx, kode, nama,
   keterangan, debet, kredit) sehingga muat A4 tanpa mengecilkan huruf. */
table.ct tr.jr-detail > td { padding-top: 1px; padding-bottom: 1px; }

/* ── Tanda tangan ──────────────────────────────────────── */
/* Baris satuan nilai `(Nilai Dalam Rupiah)` — dicetak contoh lembaga di Neraca, Rugi Laba,
   Neraca Percobaan, dan Lajur (lihat `Contoh Laporan Keuangan/Sandi/Neraca.pdf`). */
.cetak-satuan {
    text-align: center;
    font-size: 9.5pt;
    margin: 6px 0 4px;
}

/* Kota + tanggal di atas kolom tanda tangan (`Manukaya Anyar, 16-09-2026`). */
.ct-tgl {
    text-align: right;
    font-size: 10.5pt;
    margin-top: 18px;
}

.ct-ttd {
    margin-top: 24px;
    display: flex;
    justify-content: space-between;
    gap: 24px;
    page-break-inside: avoid;
}

.ct-ttd .ct-kol { flex: 1; text-align: center; }
.ct-ttd .ct-jab { margin-bottom: 58px; }
.ct-ttd .ct-nm { font-weight: 700; text-decoration: underline; }
.ct-ttd .ct-nip { font-size: 10pt; }

.ct-catatan {
    font-size: 9.5pt;
    margin-top: 6px;
    border-top: .6pt solid #000;
    padding-top: 4px;
}

.ct-kosong {
    text-align: center;
    padding: 18px 0;
    font-style: italic;
}

/* ── Saat mencetak ─────────────────────────────────────── */
@media print {
    .no-print { display: none !important; }

    .cetak-shell { background: #fff; padding: 0; }
    .cetak-sheet {
        width: auto;
        min-height: 0;
        margin: 0;
        padding: 0;
        box-shadow: none;
    }

    /* Header tabel diulang di halaman berikutnya; footer mengikuti isinya. */
    thead { display: table-header-group; }

    body {
        -webkit-print-color-adjust: exact;
        print-color-adjust: exact;
    }
}

/* ── Bentuk Neraca skontro (`<NeracaTampilan>`) di atas kertas A4 ──
   Aturan dasarnya di `shared.css` (dipakai juga oleh halaman layar); di sini hanya
   ukuran huruf, kerapatan baris, dan garis/bingkai kertas.

   Butir 3 catatan user 2026-09-18 — tiga hal yang HANYA berlaku untuk Neraca Skontro:
   a. border luar (dulu sisi terluar kiri/kanan tidak bergaris) → bingkai tabel skontro;
   b. baris TOTAL AKTIVA dan TOTAL PASSIVA wajib sejajar di bawah → keduanya di satu
      baris `<tfoot>` (satu tabel empat kolom, lihat `NeracaTampilan.razor`);
   c. kode akun tidak dicetak (`.nt-kode` disembunyikan) — layar tetap menampilkannya.

   Catatan user 2026-09-16: "horizontal divider masih belum menyentuh vertical divider
   yang membagi aktiva dan passiva" — karena itu garis mendatar dibiarkan sebagai border
   SEL yang membentang sampai kolom pemisah, dan jarak ke garis tegak dipindahkan ke
   padding sel (`--nt-jarak`), bukan ke padding pembungkus. */
.cetak-shell .nt-wrap { font-size: 8.6pt; }
.cetak-shell .nt th { font-size: 7.6pt; padding: 2px 4px; }
.cetak-shell .nt td { padding: 1.6px 4px; line-height: 1.25; border-bottom: none; }
/* Garis laporan di atas kertas: aturannya sama dengan `shared.css` (kepala kolom, subtotal,
   total, dan garis GANDA di bawah total terakhir), satuannya pt agar tidak ikut menyusut
   saat dicetak. Garis tipis antar baris sengaja dimatikan — bentuk kertas lembaga polos. */
.cetak-shell .nt thead th { border-top: .9pt solid #000; border-bottom: .6pt solid #000; }
.cetak-shell .nt > tbody > tr.nt-l0 > td { border-top: .7pt solid #000; }
.cetak-shell .nt > tbody > tr.nt-sub > td { border-top: .6pt solid #000; }
/* Kepala kelompok juga bergaris di BAWAHNYA (permintaan user 2026-09-24) — sama seperti di layar:
   tanpa garis bawah, kepala kelompok menggantung di atas barisnya. Baris kepala bertingkat yang
   berdekatan menyatu jadi satu garis (`border-collapse: collapse`), jadi tidak ada garis ganda. */
.cetak-shell .nt > tbody > tr.nt-l0 > td { border-bottom: .7pt solid #000; }
.cetak-shell .nt > tbody > tr.nt-sub > td { border-bottom: .6pt solid #000; }
.cetak-shell .nt tfoot > tr > td { border-top: .7pt solid #000; }
.cetak-shell .nt tfoot > tr:last-child > td { border-bottom: 1.6pt double #000; }
.cetak-shell .nt tr { page-break-inside: avoid; }
/* Laporan Perubahan Ekuitas di atas kertas: lebarnya MENGIKUTI `colgroup` komponennya
   (`table-layout: fixed`). Tanpa ini tata letak otomatis melebarkan kolom menurut isinya,
   sehingga tabel melewati tepi lembar lanskap begitu lembaga punya banyak komponen ekuitas. */
.cetak-shell .nt-ekuitas { table-layout: fixed; }

/* Kertas laporan lembaga polos: latar tema (pita judul sisi + baris subtotal) tidak ikut
   tercetak. Di mode gelap latar itu bahkan gelap, jadi tinta hitamnya tidak terbaca. */
.cetak-shell .nt-2sisi thead tr.nt-band th,
.cetak-shell .nt-2sisi td.nt-sub,
.cetak-shell .nt > tbody > tr.nt-sub > td { background: none; }

/* Skontro: bingkai luar (butir 3a) + garis tegak pemisah AKTIVA|PASSIVA. Garis mendatar
   TIDAK dimatikan di sini: border sel `nt-l0`/`nt-sub`/`tfoot` membentang sampai kolom
   pemisah, jadi garisnya benar-benar menyentuh garis tegak. */
.cetak-shell .nt-2sisi {
    border: .7pt solid #000;
    border-collapse: collapse;
    --nt-jarak: 0mm;
}
.cetak-shell .nt-2sisi th.nt-pisah,
.cetak-shell .nt-2sisi td.nt-pisah { border-left: .7pt solid #000; }
.cetak-shell .nt-2sisi thead tr.nt-band th { font-size: 8.4pt; padding: 3px 5px; }
.cetak-shell .nt-2sisi td.nt-nama:nth-child(3) { --nt-jarak: 3mm; }
.cetak-shell .nt-2sisi td.nt-nom:nth-child(2) { padding-right: 3mm; }
.cetak-shell .nt-2sisi td.nt-nama { padding-left: calc(4px + var(--nt-jarak)); }
.cetak-shell .nt-2sisi td.nt-nama.nt-l1 { padding-left: calc(3mm + var(--nt-jarak)); }
.cetak-shell .nt-2sisi td.nt-nama.nt-l2 { padding-left: calc(6mm + var(--nt-jarak)); }
.cetak-shell .nt-2sisi td.nt-nama.nt-l3 { padding-left: calc(9mm + var(--nt-jarak)); }
/* ── Garis kelompok Skontro: SEL KOSONG ikut bergaris ──
   Catatan user 2026-09-25: garis mendatar SKONTRO hanya boleh selebar sisinya sendiri —
   "misalnya heading di kiri, horizontal lines nya malah sampai ke area kanan (passiva)".
   Karena itu kelas garis hidup di SEL (`nt-l0`/`nt-sub`), bukan di <tr>: satu baris tabel
   memuat satu baris AKTIVA dan satu baris PASSIVA sekaligus, jadi kelas di <tr> selalu
   menyeberang. Garis tetap menyentuh garis tegak pemisah karena tepi sel = tepi pemisah
   (jarak ke garis itu padding SEL lewat `--nt-jarak`). */
.cetak-shell .nt-2sisi td.nt-l0 { border-top: .7pt solid #000; border-bottom: .7pt solid #000; }
.cetak-shell .nt-2sisi td.nt-sub { border-top: .6pt solid #000; border-bottom: .6pt solid #000; }
/* Indentasi tabel `nt` lain (Rugi Laba, Lajur, Per Sandi) — kelasnya di BARIS. */
.cetak-shell .nt-l1 > td:first-child { padding-left: 3mm; }
.cetak-shell .nt-l2 > td:first-child { padding-left: 6mm; }
.cetak-shell .nt-l3 > td:first-child { padding-left: 9mm; }
.cetak-shell .nt-selisih { margin-top: 1.5mm; font-size: 8.6pt; }

/* Divider kolom + border luar untuk tabel laporan selain Skontro (Rugi Laba, Neraca
   Percobaan, Neraca Lajur) — butir 4 & 5. Neraca Skontro mengecualikan diri (butir 5:
   "semua laporan KECUALI neraca Skontro"): ia hanya punya bingkai luar + SATU garis tegak
   pemisah AKTIVA|PASSIVA, seperti contoh `Contoh Laporan Keuangan/CoA/Neraca.pdf`. */
.cetak-shell .nt-percobaan,
.cetak-shell .nt-lajur,
.cetak-shell .nt-rl { border: .7pt solid #000; }
.cetak-shell .nt-percobaan th, .cetak-shell .nt-percobaan td,
.cetak-shell .nt-lajur th, .cetak-shell .nt-lajur td,
.cetak-shell .nt-rl th, .cetak-shell .nt-rl td { border-left: .6pt solid #000; }
.cetak-shell .nt-percobaan th:first-child, .cetak-shell .nt-percobaan td:first-child,
.cetak-shell .nt-lajur th:first-child, .cetak-shell .nt-lajur td:first-child,
.cetak-shell .nt-rl th:first-child, .cetak-shell .nt-rl td:first-child { border-left: 0; }
.cetak-shell .nt-kode { display: none; }
.cetak-shell .nt-sandi .nt-no { padding-left: 1mm; }
.cetak-shell .nt th.r, .cetak-shell .nt td.r { text-align: right; }
.cetak-shell .nt th.grup { text-align: center; }
.cetak-shell .nt-ringkas { margin-top: 2mm; }
.cetak-shell .nt-ringkas .baris { font-size: 8.6pt; gap: 6mm; padding: 0 1mm; }
.cetak-shell .nt-ringkas .baris span { min-width: 45mm; }
.cetak-shell .nt-ringkas .baris b { min-width: 35mm; }
@media print {
    .cetak-shell .nt-skontro { display: table; }
    .cetak-shell .nt-skontro .nt-sisi { display: table-cell; }
    .cetak-shell .nt-blok { page-break-inside: auto; }
}

/* ── Daftar Perincian Laba Rugi — kertas format Dinas ──
   User 2026-09-17: "JANGAN border kotak penuh di setiap sel; hanya garis horizontal
   (bawah kepala kolom + baris total akhir)". Karena itu tidak ada satu pun border vertikal
   di sini, dan garis antar baris data tidak dicetak. */
.cetak-shell .perincian-lr { font-family: "Times New Roman", Times, serif; }
.cetak-shell .plr-kepala { margin: 0 0 3mm; }
.cetak-shell .plr-judul { font-size: 12pt; font-weight: 700; text-align: center;
    text-transform: uppercase; margin-bottom: 2mm; }
/* Kepala: tiga baris identitas KIRI (titik dua sejajar) + kotak `SANDI` KANAN, lalu
   `(Nilai Dalam Rupiah)` rata KANAN di atas tabel — seperti contoh Dinas `Sandi/Rugi Laba.pdf`. */
.cetak-shell .plr-kepala-baris { display: flex; gap: 6mm; align-items: flex-start; }
.cetak-shell .plr-kepala-teks { flex: 1 1 auto; }
.cetak-shell .plr-baris { display: flex; font-size: 10pt; line-height: 1.5; }
.cetak-shell .plr-label { min-width: 52mm; }
.cetak-shell .plr-titik { width: 4mm; }
.cetak-shell .plr-satuan { font-size: 9pt; margin-top: 1mm; text-align: right; }
/* Kotak `SANDI` (nomor kantor pelapor) — bentuk yang sama dengan lembar Neraca Per Sandi. */
.cetak-shell .perincian-lr .ns-sandi,
.cetak-shell .neraca-sandi .ns-sandi { width: 42mm; flex: 0 0 42mm; }
.cetak-shell .perincian-lr .ns-sandi-judul,
.cetak-shell .neraca-sandi .ns-sandi-judul { text-align: center; font-size: 10pt; margin-bottom: 1mm; }
.cetak-shell .perincian-lr .ns-sandi-sel,
.cetak-shell .neraca-sandi .ns-sandi-sel { display: flex; border: .7pt solid #000; height: 9mm; }
.cetak-shell .perincian-lr .ns-sandi-sel > span,
.cetak-shell .neraca-sandi .ns-sandi-sel > span { flex: 1; display: flex; align-items: center;
    justify-content: center; border-right: .7pt solid #000; }
.cetak-shell .perincian-lr .ns-sandi-sel > span:last-child,
.cetak-shell .neraca-sandi .ns-sandi-sel > span:last-child { border-right: 0; }
/* Border luar + dua divider tegak (kiri kolom Sandi & kiri kolom Jumlah) — contoh Dinas
   `Sandi/Rugi Laba.pdf` menggambar SATU KOTAK penuh untuk tabelnya: x 23,5…585, y 120,7…747,7
   (sisi kiri/kanan/bawah ikut), plus garis penuh di bawah kepala kolom dan garis mendatar
   hanya di kolom Sandi+Jumlah pada baris induk. Tanpa kotak per sel. */
.cetak-shell .plr-tabel { width: 100%; border-collapse: collapse; border: .7pt solid #000; }
.cetak-shell .plr-tabel th { padding: 1mm 2mm; border-top: 1pt solid #000; border-bottom: 1pt solid #000;
    font-size: 9.5pt; text-align: left; }
.cetak-shell .plr-tabel th.plr-sandi { text-align: center; }
.cetak-shell .plr-tabel th.plr-angka { text-align: right; }
.cetak-shell .plr-tabel td.plr-sandi, .cetak-shell .plr-tabel th.plr-sandi,
.cetak-shell .plr-tabel td.plr-angka, .cetak-shell .plr-tabel th.plr-angka { border-left: .6pt solid #000; }
/* Baris Dinas: 46 baris harus muat SATU lembar A4 (catatan user 2026-09-16: "Rugi Laba nya
   belum fit di A4"). Tinggi barisnya diukur dari contoh lembaga `Sandi/Rugi Laba.pdf`:
   jarak antar baris ≈ 14,5pt dan seluruh isi (40 baris) berakhir di y≈734 dari 792pt.

   Huruf dinaikkan 8,5pt → 9,5pt 2026-09-18 (catatan user: "Rugi Laba per Sandi: naikkan
   ukuran font agar standard") — tadinya paling kecil di antara lembar Dinas lain (Neraca per
   Sandi mencetak badan tabelnya 10pt). Agar tetap muat satu lembar, ruangnya diambil dari
   margin kertas yang dikecilkan di atas: tinggi isi = 297 − 2×12 = 273mm, sedangkan 46 baris
   ≈ 46 × (9,5pt × 1,15 + 2 × .5mm) ≈ 223mm + kepala ≈ 33mm ≈ 256mm. Jangan naikkan lagi tanpa
   menghitung ulang anggaran ini. */
.cetak-shell .plr-tabel td { padding: .5mm 2mm; font-size: 9.5pt; line-height: 1.15;
    vertical-align: top; }
.cetak-shell .plr-tabel .plr-sandi { width: 16mm; text-align: center; }
.cetak-shell .plr-tabel .plr-angka { width: 34mm; text-align: right; white-space: nowrap; }
.cetak-shell .plr-tabel .plr-prefix { display: inline-block; min-width: 6mm; }
/* Kolom nomor alternatif (C…J): lebar tetap supaya baris kedua (`2.`) sejajar di bawah
   nomor baris pertama (`1.`) — bentuk contoh Dinas. */
.cetak-shell .plr-tabel .plr-sub { display: inline-block; min-width: 6mm; }
/* (Tidak ada aturan tebal untuk `tr.plr-tebal` — kertas contoh polos, tanpa bold.) */
/* Kertas contoh TIDAK memakai huruf tebal sama sekali (catatan user 2026-09-16: "semua gak
   pakai font bold") dan kepala kolomnya huruf campur — bukan KAPITAL seperti tema layar. */
.cetak-shell .plr-tabel th { font-weight: 400; text-transform: none; }
.cetak-shell .plr-tabel tr > td { font-weight: 400; }
/* Garis di kolom Sandi+Jumlah. Satu KOTAK boleh memuat DUA baris (contoh: 320 & 330 serta
   560 & 570 digabung — tidak ada garis di antara keduanya), jadi garis atas dan garis bawah
   ditandai per baris, bukan "kotak" per baris. */
.cetak-shell .plr-tabel tr.plr-garis-atas > td.plr-sandi,
.cetak-shell .plr-tabel tr.plr-garis-atas > td.plr-angka { border-top: .6pt solid #000; }
.cetak-shell .plr-tabel tr.plr-garis-bawah > td.plr-sandi,
.cetak-shell .plr-tabel tr.plr-garis-bawah > td.plr-angka { border-bottom: .6pt solid #000; }
/* Indentasi mengikuti contoh: tiap tingkat menjorok ≈3mm (A x≈29,5pt → 1. 37,8 → a. 46,4
   → i. 54,9 pada lembar 612pt). */
.cetak-shell .plr-tabel tr.plr-t1 > .plr-nama { padding-left: 2mm; }
.cetak-shell .plr-tabel tr.plr-t2 > .plr-nama { padding-left: 5mm; }
.cetak-shell .plr-tabel tr.plr-t3 > .plr-nama { padding-left: 8mm; }
.cetak-shell .plr-tabel tr.plr-t4 > .plr-nama { padding-left: 11mm; }
/* Garis penutup tabel = border luar kotaknya sendiri (contoh Dinas: kotak x 23,5…585,
   y 120,7…747,7) — jadi tidak ada garis ganda tambahan di baris terakhir. */
.cetak-shell .plr-tabel tr { page-break-inside: avoid; }

/* ── Neraca Per Sandi (Sandi/Neraca.pdf + contoh user `artifacts/contoh-neraca-per-sandi.html`) ──
   Bentuk kertasnya: kepala kolom berkotak (border penuh + latar), divider tegak tiap kolom,
   dan garis tegas atas+bawah di baris JUMLAH. Tidak ada garis mendatar antar baris data. */
.neraca-sandi { font-family: "Times New Roman", Times, serif; }
/* Kepala laporan: judul TENGAH; dua baris identitas KIRI; kotak `SANDI` (nomor kantor
   pelapor) di KANAN — persis contoh Dinas `Contoh Laporan Keuangan/Sandi/Neraca.pdf`. */
.neraca-sandi .ns-kepala { text-align: center; margin: 0 0 6px; }
.neraca-sandi .ns-judul { font-size: 12pt; font-weight: 700; text-transform: uppercase; margin-bottom: 4px; }
.neraca-sandi .ns-kepala-baris { display: flex; gap: 6mm; align-items: flex-start; text-align: left; margin-top: 2mm; }
.neraca-sandi .ns-kepala-teks { flex: 1 1 auto; }
.neraca-sandi .ns-baris { font-size: 10pt; line-height: 1.5; }
.neraca-sandi .ns-sandi { width: 42mm; flex: 0 0 42mm; }
.neraca-sandi .ns-sandi-judul { text-align: center; font-size: 10pt; margin-bottom: 1mm; }
.neraca-sandi .ns-sandi-sel { display: flex; border: .7pt solid #000; height: 9mm; }
.neraca-sandi .ns-sandi-sel > span { flex: 1; display: flex; align-items: center; justify-content: center;
    border-right: .7pt solid #000; }
.neraca-sandi .ns-sandi-sel > span:last-child { border-right: 0; }
/* Label sisi (`AKTIVA` / `PASSIVA`) KIRI dan `(Nilai Dalam Rupiah)` KANAN, di atas tabelnya. */
.neraca-sandi .ns-sisi { display: flex; justify-content: space-between; align-items: baseline; margin: 4mm 0 1mm; }
.neraca-sandi .ns-sisi > span:first-child { font-weight: 700; font-size: 10pt; }
.neraca-sandi .ns-satuan { font-size: 9pt; }
/* Judul kepala laporan di lembar: tanpa garis bawah/ganda bawaan `.cetak-judul` — contoh
   menulisnya sebagai judul biasa (huruf kapital, di tengah). */
.cetak-shell .neraca-sandi .cetak-judul { border: 0; text-decoration: none; font-size: 12pt; }
.tbl-sandi { width: 100%; border-collapse: collapse; font-size: 9.5pt; margin-bottom: 6px;
    border: .7pt solid #000; }
.tbl-sandi th, .tbl-sandi td { padding: 2px 4px; vertical-align: top; }
/* Kepala kolom bergaris kotak penuh TANPA latar kelabu — catatan user 2026-09-16: "hilangkan
   header warna grey"; kertas formulir Dinas memang polos (hanya garis). */
.tbl-sandi th { border: .7pt solid #000; font-weight: 700; text-align: center; }
.tbl-sandi td { border-left: .6pt solid #000; border-right: .6pt solid #000; }
.tbl-sandi th:first-child, .tbl-sandi td:first-child { border-left: 0; }
/* Baris JUMLAH: garis tegas atas+bawah, dan garis KOLOM tetap ikut — kalau tidak, sel-sel
   baris ini kehilangan garis tegaknya sehingga tampak tanpa border kanan (catatan user
   2026-09-16: "jumlah aktiva dan passiva di bagian kanan border nya gak ada"). */
.tbl-sandi tfoot td {
    font-weight: 700;
    border-top: 1pt solid #000;
    border-bottom: 1pt solid #000;
    border-left: .6pt solid #000;
    border-right: .6pt solid #000;
}
.tbl-sandi tfoot td:first-child { border-left: 0; }
.tbl-sandi td.r, .tbl-sandi th.r { text-align: right; white-space: nowrap; }
.tbl-sandi td.c, .tbl-sandi th.c { text-align: center; }
.tbl-sandi td.b { font-weight: 700; }
/* Judul kelompok (baris bertanda `b`) pada Neraca Per Sandi/RL Per Sandi: garis mendatar di
   BAWAHNYA. Kertas formulir ini memang hanya bergaris KOLOM (lihat catatan di atas), jadi kepala
   kelompok perlu garis penutup supaya tidak menyatu dengan baris anaknya (permintaan user
   2026-09-24: "group header tidak memiliki bottom horizontal divider"). */
.tbl-sandi tr.ns-grup > td { border-bottom: .7pt solid #000; }
/* Anak kelompok (a., b., c. …) menjorok seperti contoh user — judulnya sendiri rata kiri.
   Hurufnya ditulis di kolom Pos-Pos dengan lebar tetap supaya nama barisnya rata. */
.tbl-sandi td.ns-anak { padding-left: 6mm; }
.tbl-sandi .ns-prefix { display: inline-block; min-width: 6mm; }

/* ═══════════════════════════════════════════════════════════════════════════
   FORMULIR LAPORAN KEGIATAN (5 seksi bernomor) — Tools ▸ Setup Laporan Kegiatan
   Gaya garis mengikuti aturan yang sudah dipakai laporan lain di lembar ini:
   TIDAK ada kotak penuh / garis vertikal antar kolom. Hanya garis MENDATAR —
   bawah kepala tabel, atas setiap kepala seksi (yang sekaligus menutup seksi di atasnya),
   atas+bawah baris Jumlah, dan satu garis penutup di akhir tabel. Seksi pertama tidak
   bergaris atas supaya tidak dobel dengan garis kepala tabel.
   ═══════════════════════════════════════════════════════════════════════════ */
.lk-form { border-collapse: collapse; width: 100%; }
.lk-form th, .lk-form td { border: 0; padding: 2mm 2mm; vertical-align: top; }
.lk-form thead th { border-bottom: 1pt solid #000; font-weight: 700; }
.lk-form .lk-pos { white-space: nowrap; }
.lk-form td.lk-anak { padding-left: 7mm; }
.lk-form td.lk-satuan { font-size: 8.5pt; font-style: italic; }
.lk-form tr.lk-seksi > td { border-top: 1pt solid #000; border-bottom: 1pt solid #000; font-weight: 700; padding-top: 3.5mm; }
.lk-form tbody tr.lk-seksi:first-child > td { border-top: 0; }
.lk-form tr.lk-jumlah > td { border-top: 1pt solid #000; border-bottom: 1pt solid #000; }
.lk-form tbody tr:last-child > td { border-bottom: 1pt solid #000; }

/* Peringatan pos tanpa sumber data — HANYA layar (`no-print`), supaya operator tahu sebelum
   berkas ditandatangani bahwa tanda `-` di pos itu berarti "belum dihitung", bukan nol. */
.lk-peringatan {
    margin: 0 0 6mm;
    padding: 3mm 4mm;
    border: 1px solid #b45309;
    border-left: 5px solid #b45309;
    background: #fffbeb;
    font-size: 9.5pt;
    line-height: 1.45;
}
.lk-peringatan ul { margin: 1.5mm 0 1.5mm 5mm; padding: 0; }
.lk-peringatan-kaki { font-style: italic; opacity: .75; }

/* ═══════════════════════════════════════════════════════════════════════════
   LAPORAN KREDIT (head-detail) — lembar A4 **portrait**, tiga kolom.
   Satu rekening = satu blok: judul (no. rek + nama), empat tabel bidang
   (identitas · syarat kredit · pembayaran · tunggakan), lalu tabel detail
   (jadwal · jaminan · perpanjangan).

   RIWAYAT ANGSURAN sengaja TIDAK dicetak di sini — ia punya laporan sendiri
   (catatan user 2026-09-18: "Hilangkan Tabel History Pembayaran (Karena sudah
   dipisah)"). Blok jadi jauh lebih pendek sehingga muat portrait.

   Bidang dijajarkan **empat kolom** per baris (`KreditBlok.Empat`), karena
   lembar portrait hanya selebar 186mm — dua kolom membuatnya boros kertas.
   Aturan lembar ini sama dengan laporan Dinas lain: tinta hitam, garis mendatar
   saja (tanpa kotak penuh/vertikal antar kolom), dan setiap blok diusahakan
   tidak terpotong antar halaman.
   ═══════════════════════════════════════════════════════════════════════════ */
/* ── Pemutusan halaman (catatan user 2026-09-18: "break-inside: avoid ini
   terapkan untuk laporan komprehensif nya") ──────────────────────────────
   Tiga lapis, dari yang paling luas ke yang paling kecil:
   1. SATU REKENING = SATU BLOK UTUH — `.ct-kredit` tidak boleh terbelah, dan
      begitu juga tabel di dalamnya.
   2. SATU BARIS BIDANG tidak boleh terbelah — lapis ini baru bekerja ketika
      satu rekening memang LEBIH PANJANG daripada satu halaman (mis. jaminan
      dan jadwalnya banyak): blok terpaksa diputus, tetapi pemutusannya jatuh
      di antara baris, bukan membelah satu baris angka.
   3. JUDUL tidak boleh tertinggal sendiri di dasar halaman (`break-after:
      avoid`): judul rekening, judul bagian, dan judul sub-bagian selalu ikut
      ke halaman berikutnya bersama isi pertamanya.
   Batas jujur: CSS tidak dapat memaksa blok yang lebih tinggi daripada satu
   halaman untuk tetap utuh — yang bisa dijamin adalah pemutusan yang rapi. */
/* `.ct-blok*` = bentuk blok umum (`LaporanBlok`) yang dipakai laporan produk lain (Over Limit,
   Daftar Deposito/TBB/Anggota) — tampilannya SENGAJA sama dengan blok Laporan Kredit, karena
   bentuk itu yang diminta user 2026-09-20 sebagai contoh untuk laporan berisi banyak bidang. */
.ct-kredit,
.ct-blok,
.ct-kredit .ct-kredit-tabel,
.ct-blok .ct-blok-tabel,
table.ct.ct-ringkas { break-inside: avoid; page-break-inside: avoid; }
.ct-kredit tr,
.ct-blok tr,
table.ct.ct-ringkas tr { break-inside: avoid; page-break-inside: avoid; }
.ct-kredit-judul,
.ct-blok-judul,
.ct-kredit-bagian,
.ct-kredit-sub { break-after: avoid; page-break-after: avoid; }

.ct-kredit,
.ct-blok { margin: 0 0 4mm; }
.ct-kredit + .ct-kredit,
.ct-blok + .ct-blok { border-top: 1pt solid #000; padding-top: 2mm; }
.ct-kredit-judul,
.ct-blok-judul { display: flex; gap: 3mm; align-items: baseline; margin-bottom: 1mm; flex-wrap: wrap; }
.ct-kredit-no,
.ct-blok-no { font-family: "Courier New", monospace; font-weight: 700; font-size: 9pt; }
.ct-kredit-nama,
.ct-blok-nama { font-weight: 700; font-size: 9pt; }
.ct-kredit-status,
.ct-blok-status { font-size: 7.5pt; font-style: italic; }
/* Pinjaman & sisa pokok pada baris judul blok rekening: tebal dan rata angka, supaya
   dua nominal terpenting sejajar antar-rekening saat menyapu daftar (user 2026-09-18). */
.ct-kredit-nominal,
.ct-blok-nominal { font-size: 8.5pt; font-weight: 700; white-space: nowrap; font-variant-numeric: tabular-nums; }
.ct-kredit-bagian {
    font-size: 7pt;
    font-weight: 700;
    letter-spacing: .3px;
    text-transform: uppercase;
    border-bottom: .7pt solid #000;
    margin: 1.5mm 0 0.3mm;
}
/* Empat pasangan label+nilai per baris (catatan user 2026-09-18: "padatkan lagi menjadi
   4 kolom"): 4 × (8.5% + 16.5%) = 100% lebar lembar. Label memakai singkatan
   (`KolomKredit.LabelCetak`) supaya tidak berebut ruang dengan angkanya; artinya dicetak
   di akhir laporan. */
table.ct.ct-kredit-tabel td,
table.ct.ct-blok-tabel td { padding: .4mm 1.2mm; font-size: 7.5pt; vertical-align: top; }
table.ct.ct-kredit-tabel td.ct-kredit-l,
table.ct.ct-blok-tabel td.ct-blok-l { width: 8.5%; font-size: 6.8pt; font-style: italic; white-space: nowrap; }
table.ct.ct-kredit-tabel td.ct-kredit-v,
table.ct.ct-blok-tabel td.ct-blok-v { width: 16.5%; }
.ct-kredit-sub {
    font-size: 7pt;
    font-weight: 700;
    letter-spacing: .3px;
    text-transform: uppercase;
    border-bottom: .7pt solid #000;
    margin: 1.5mm 0 0.3mm;
}
.ct-kredit-kosong { font-size: 7.5pt; font-style: italic; margin: 1mm 0 1.5mm; }
/* Catatan arti singkatan label di akhir laporan (karena label di blok kredit disingkat). */
.ct-singkatan {
    font-size: 7pt;
    line-height: 1.5;
    margin: 3mm 0 1mm;
    padding-top: 1.5mm;
    border-top: .7pt solid #000;
    break-inside: avoid;
    page-break-inside: avoid;
}
.ct-singkatan span { margin-right: 3mm; white-space: nowrap; }

/* ══ Anggaran lebar lembar A4 ══════════════════════════════════════════════
   Ruang isi = 210mm − 12mm − 12mm = 186mm (kertas selalu portrait).
   Kolom ber-lebar mm (`KolomTabel.LebarMm`) mengunci kolom kode/tanggal/angka
   supaya TIDAK PERNAH terbelah dua baris; jumlah seluruh kolom tidak boleh
   melewati anggaran — kalau lewat, tabelnya mendorong dirinya keluar tepi lembar.
   Kolom teks bebas (tanpa lebar) menerima sisa ruang; kalau sisanya tidak cukup,
   laporan itu dicetak sebagai blok ringkas, bukan tabel. Aturan lengkap:
   `KolomKertas` (`KolomKertas.cs`); gerbangnya `scripts/audit_kolom_cetak.py`
   (ikut pre-commit/CI). Permintaan user 2026-09-20: "jangan sampai lewat,
   jangan sampai sebuah kolom mengambil 2 row".

   `ct-rapat` = tabel dengan kolom banyak (9+): huruf & padding dikecilkan supaya
   seluruh kolom muat di 186mm tanpa kolom terbelah. */
table.ct.ct-rapat { font-size: 8pt; }
table.ct.ct-rapat th,
table.ct.ct-rapat td { padding: 1px 3px; }
table.ct.ct-rapat thead th { font-size: 7.4pt; }
table.ct.ct-rapat td.mono { font-size: 7.4pt; }

/* Tabel laporan bersama (`LaporanTabel`) memakai lebar kolom yang MENGIKAT: jumlah mm-nya tepat
   186mm dan `table-layout: fixed` membuat peramban memakainya apa adanya. Tanpa ini lebar di markup
   hanya saran — peramban melebarkannya begitu ada isi yang panjang, dan laporan 10 kolom keluar
   197mm walau anggarannya 186mm (terukur di peramban 2026-09-20). Hanya tabel ini yang memakai
   `fixed`; tabel lembar lain (Jurnal Umum, Neraca) menulis kepalanya sendiri dan beberapa
   memang memakai baris ber-`colspan` yang tidak cocok dengan tata letak tetap. */
table.ct.ct-tetap { table-layout: fixed; }
/* ── SATU BARIS = SATU DATA (aturan user 2026-09-22) ──────────────────────────────────────────
   "laporan anggota ini tidak boleh ada kolom yang mengambil lebih dari 1 row". Sebelumnya kolom
   teks bebas di tabel ber-lebar tetap sengaja DIBIARKAN membungkus dengan alasan "memotong isi
   menghilangkan informasi" — akibatnya satu anggota mengambil 2-4 baris (Nama, Alamat), baris
   tabel jadi tidak sejajar, dan daftar yang seharusnya 40 baris per halaman hanya memuat 12.
   Sekarang setiap sel tabel kertas dipaksa satu baris: `nowrap` + `overflow: hidden` supaya isi
   yang lebih panjang **tidak meluber ke kolom sebelah** maupun menambah tinggi baris; angkanya
   `text-overflow: ellipsis` supaya pemotongan terlihat (tanda …), bukan senyap.
   Lebarnya sendiri TIDAK dikira-kira: tiap kolom teks bebas membawa `PerluMm` yang diukur dari
   data nyata, dan `scripts/audit_kolom_cetak.py` menolak tabel kertas yang anggarannya melebihi
   186mm — jadi elipsis ini jaring pengaman, bukan cara kerja sehari-hari. */
table.ct.ct-tetap td {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

/* Kepala kolom & sel kode/tanggal/angka tidak boleh terbelah dua baris: yang dicari pembaca
   saat menyapu daftar adalah satu baris = satu data. Sejak 2026-09-22 berlaku untuk SELURUH sel
   tabel kertas (lihat aturan di atas) — kolom teks bebas dulu dikecualikan, dan justru di situ
   satu anggota mengambil beberapa baris. */
table.ct thead th { white-space: nowrap; }
table.ct td.c,
table.ct td.r,
table.ct tfoot td { white-space: nowrap; }

/* Tabel grid blok ringkas memakai lebar penuh lembar (4 × (8.5% + 16.5%)). */
table.ct.ct-blok-tabel { width: 100%; }

/* Baris jumlah di bawah deretan blok — bentuk blok tidak punya `<tfoot>`, jadi totalnya
   ditulis sebagai satu baris tebal setelah blok terakhir. */
.ct-blok-total {
    margin-top: 2mm;
    padding-top: 1.5mm;
    border-top: .9pt solid #000;
    font-size: 8.5pt;
    font-weight: 700;
    text-align: right;
    break-inside: avoid;
    page-break-inside: avoid;
}

/* Baris kepala KELOMPOK (dua tingkat), mis. "Suku Bunga" di atas "RC" · "Giro":
   satu sel membentang untuk beberapa kolom sehingga kepalanya bisa pendek. */
table.ct thead tr.ct-kepala-grup th {
    font-size: 7.4pt;
    border-bottom: .5pt solid #000;
    padding: 1px 3px;
}
table.ct.ct-ringkas { margin-bottom: 3mm; break-after: avoid; page-break-after: avoid; }
table.ct.ct-ringkas td { font-size: 8.5pt; padding: .8mm 2mm; }
table.ct.ct-ringkas td.ct-kredit-l { font-style: italic; }
table.ct.ct-ringkas td.ct-kredit-v { font-weight: 700; white-space: nowrap; }

/* ══════════════════════════════════════════════════════════════════════════════
   BUKTI KAS 1/3 A4 — `<LembarBukti>` di halaman `/cetak/bukti/{modul}/{noTrx}`.

   Satu bukti = satu lembar **210 × 99 mm** (kertas A4 dipotong tiga) — keputusan user
   2026-09-22 malam ("harusnya 1/3 A4, kertas A4 dipotong jadi 3"). Ukurannya datang dari DUA
   variabel di `.ctb-sheet`; memindah lembar mendatar ↔ tegak = tukar nilainya (+ `size:` di
   `@page bukti`), tanpa menyentuh komponennya.

   Bentuk kertasnya sengaja berbeda dari laporan: bukti adalah dokumen transaksi teller yang
   diterima nasabah. Kertasnya lebar-tapi-pendek, jadi BADAN lembar dibelah dua kolom
   (rincian + jumlah di kiri, posisi/mutasi di kanan) dan KAKI-nya sebaris (terbilang di kiri,
   tanda tangan di kanan) — begitulah seluruh isi muat tanpa saling menumpuk.

   Seluruh komposisi memakai `<table>` (bukan flex): tata letak tabel dicetak sama oleh semua
   peramban/printer, sedangkan flex bisa menggeser & memotong kop saat dicetak.
   ══════════════════════════════════════════════════════════════════════════════ */
/* Margin kertas 4 mm × 5 mm: area cetak ± 200 × 91 mm. Kalau printer Anda memotong pinggirnya,
   naikkan dua angka ini bersama-sama (padding `.ctb-sheet` di layar sama dengan margin ini). */
@page bukti {
    size: 210mm 99mm;
    margin: 4mm 5mm;
}

.cetak-sheet.ctb-sheet {
    --ctb-lebar: 210mm;
    --ctb-tinggi: 99mm;
    /* `border-box` WAJIB di sini, bukan hiasan: aturan `.cetak-sheet` lain memakai content-box,
       sehingga `width: 210mm` + padding 10mm = 220mm — 10 mm lebih lebar dari kertas, dan saat
       mencetak pinggir kanannya terpotong. Dengan border-box, 210 mm itu SUDAH termasuk padding
       dan sama persis dengan `@page bukti` (margin 5 mm memotong dari 210 mm). */
    box-sizing: border-box;
    width: var(--ctb-lebar);
    min-height: var(--ctb-tinggi);
    padding: 4mm 5mm;
    font-size: 8.6pt;
    line-height: 1.2;
}

/* Di LAYAR HP, kertas 210 mm lebih lebar dari layar sehingga lembar terpotong / harus digeser ke
   samping. Halaman bukti biasa dibuka **nasabah dari tautan WhatsApp** — hampir selalu di HP — jadi
   di layar sempit lembar mengikuti lebar layar (isi lembar memakai lebar persen, jadi barisnya
   mengalir ulang — bukan diperkecil sampai tak terbaca).
   HANYA di layar: `@media print` tetap 210 × 99 mm, jadi hasil cetaknya tidak berubah. */
@media screen and (max-width: 899px) {
    .cetak-sheet.ctb-sheet {
        width: 100%;
        min-height: 0;
        padding: 3mm;
        box-shadow: none;
    }
}

/* Lembar bukti TANPA bingkai luar (catatan user 2026-09-22: "hilangkan box border paling luar").
   Batas kertasnya dibentuk oleh margin `@page bukti` (5 mm) — bukan garis kotak. Karena
   bingkainya dilepas, padding kiri/kanan juga dilepas supaya lebarnya terpakai penuh oleh tabel;
   angka kolom kanan tetap berjarak dari tepi kertas lewat margin halaman itu. */
.ct-bukti {
    padding: 0 0 1mm;
    break-inside: avoid;
    page-break-inside: avoid;
}

@media print {
    .cetak-sheet.ctb-sheet { page: bukti; }
}

/* ── Kop: nama lembaga + unit/alamat/telp, bergaris pemisah ── */
.ctb-kop { border-bottom: 1.1pt solid #000; padding-bottom: .55mm; }
.ctb-lembaga { font-size: 10.5pt; font-weight: 700; line-height: 1.08; letter-spacing: .2pt; }
.ctb-sub { font-size: 6.8pt; line-height: 1.3; }

/* ── Judul di TENGAH, bergaris atas & bawah ──
   Meniru bukti teller legacy (contoh `Penerimaan Angsuran.pdf`): judul adalah kepala dokumen,
   bukan tulisan kecil di samping kop — kalau dikecilkan ke samping, ia terbaca sebagai catatan
   kaki dan lembar kehilangan "header"-nya (keluhan user 2026-09-22). */
.ctb-judul {
    text-align: center;
    font-size: 10.5pt;
    font-weight: 700;
    letter-spacing: 1pt;
    text-transform: uppercase;
    border-bottom: .6pt solid #000;
    padding: .4mm 0 .5mm;
    margin-bottom: 1mm;
}

/* ── Identitas: kiri pihak (no. rekening/nama), kanan nomor & tanggal ──
   Nilai kolom kanan rata KANAN ke tepi lembar (pola bukti legacy), labelnya tetap dekat. */
.ctb-identitas { width: 100%; border-collapse: collapse; margin-bottom: 1.1mm; }
.ctb-identitas td { vertical-align: bottom; padding: .1mm 0; font-size: 8.7pt; }
.ctb-identitas td.ctb-lbl {
    width: 24mm;
    font-size: 6.9pt;
    text-transform: uppercase;
    letter-spacing: .25pt;
}
.ctb-identitas td.ctb-nilai { font-weight: 700; padding-right: 6mm; }
.ctb-identitas td.ctb-nilai.r { padding-right: 0; }
.ctb-identitas td.ctb-nilai.mono { font-family: "Courier New", monospace; }

/* ── Isi: SATU tabel; panel posisi/mutasi jadi dua kolom terakhirnya ──
   Satu tabel (bukan dua tabel berdampingan) menjamin baris, garis, dan tinggi kedua sisi
   sejajar; dua tabel berdampingan selalu melenceng sedikit dan terbaca "tidak rapi". */
table.ct.ctb-baris { width: 100%; }
table.ct.ctb-baris th,
table.ct.ctb-baris td {
    border-left: 0;
    border-right: 0;
    border-bottom: .3pt solid #c8c8c8;
    padding: .42mm 1mm;
    font-size: 8.6pt;
    vertical-align: bottom;
}
table.ct.ctb-baris thead th {
    border-top: .6pt solid #000;
    border-bottom: .6pt solid #000;
    font-size: 7pt;
    text-transform: uppercase;
    letter-spacing: .3pt;
    white-space: nowrap;
}
/* Angka kolom kanan diberi JARAK dari tepi area cetak — catatan user 2026-09-22: "tabel kanan,
   berikan jarak antara teks dengan border kanan (saat ini menempel)". Sebelumnya sel terakhir
   sengaja ber-padding 0 agar angka rata dengan bingkai; bingkai itu sudah dilepas, dan angka yang
   menempel tepi kertas tetap terlihat tidak rapi. */
table.ct.ctb-baris th.r:last-child,
table.ct.ctb-baris td.r:last-child { padding-right: 2mm; }

/* Garis tegak pemisah kiri|kanan: satu garis lurus dari kepala sampai baris terakhir. */
table.ct.ctb-baris th.ctb-pisah,
table.ct.ctb-baris td.ctb-pisah { border-left: .5pt solid #000; padding-left: 2.5mm; }
table.ct.ctb-baris tbody tr:last-child td { border-bottom: .5pt solid #000; }
table.ct.ctb-baris tfoot td {
    border-left: 0;
    border-right: 0;
    border-top: .6pt solid #000;
    border-bottom: 0;
    font-size: 9pt;
    padding-top: .5mm;
}
/* Baris `Terbilang` = baris terakhir tabel: tanpa garis penutup ganda yang diwarisi `table.ct`. */
table.ct.ctb-baris tfoot tr:last-child td { border-bottom: 0; }
table.ct.ctb-baris .ctb-terbilang-lbl {
    font-size: 6.9pt;
    text-transform: uppercase;
    letter-spacing: .25pt;
}
table.ct.ctb-baris .ctb-terbilang-isi {
    font-size: 8.2pt;
    font-style: italic;
    font-weight: 700;
    padding-left: 2mm;
}

/* ── Kaki: dua kolom tanda tangan (lebar penuh) + kalimat penutup di tengah ── */
.ctb-ttd { width: 100%; border-collapse: collapse; margin-top: 1.4mm; }
.ctb-ttd td { width: 50%; text-align: center; padding: 0; }
.ctb-ttd-jab { font-size: 6.8pt; }
/* Ruang tanda tangan basah. Garisnya DILEPAS (catatan user 2026-09-22: "hilangkan garis
   horizontal di atas nama penandatangan"); kelasnya dinamai `ruang`, bukan `garis`, supaya tidak
   menyesatkan pembaca berikutnya — kalau kelak garisnya diminta lagi, kembalikan `border-bottom`. */
.ctb-ttd-ruang { height: 4.6mm; }
.ctb-ttd-nama { font-size: 7.4pt; }

.ctb-penutup { text-align: center; font-size: 7pt; font-style: italic; margin-top: 1.3mm; }

/* Catatan petugas: penjelasan asal angka (mis. definisi sisa pokok) — hidup di LUAR lembar,
   di bawah bilah Cetak/Kembali, dan tidak ikut tercetak (`no-print`). Lembar bukti dipegang
   nasabah; baris seperti "sisa pokok = pinjaman − pokok terbayar" bukan untuknya, dan tidak ada
   di contoh bukti teller legacy. */
.ctb-petugas {
    width: 210mm;
    max-width: calc(100% - 24px);
    margin: 0 auto 12px;
    display: flex;
    gap: 6px;
    align-items: flex-start;
    font-family: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
    font-size: 12px;
    line-height: 1.5;
    color: #3a3a3a;
    background: #fffbe6;
    border: 1px solid #e6d9a2;
    border-radius: 6px;
    padding: 8px 10px;
}

/* Tautan bagikan yang ditampilkan di bilah hasil — satu baris, bisa dipilih/diklik
   (`word-break` supaya token panjang tidak melebarkan bilahnya keluar layar HP). */
.ctb-tautan {
    color: #1d4ed8;
    word-break: break-all;
}

/* ══════════════════════════════════════════════════════════════════════════════════════════
   SURAT ADMINISTRASI (`.ct-dok`) — lembar A4 dari blok dokumen
   ══════════════════════════════════════════════════════════════════════════════════════════
   Dipakai `Shared/LembarDokumen.razor` di halaman `/master/administrasikredit/cetak/{noReg}`.
   Gaya kertas mengikuti laporan lain (`CetakLaporan`): Times New Roman, garis hitam, kop
   `.cetak-kop` yang SAMA — jadi surat dan laporan lembaga berkepala sama.

   Sengaja TIDAK ada `border` bingkai luar: batas lembarnya dibentuk margin `@page` 12 mm
   (keputusan yang sama dengan lembar bukti 1/3 A4, 2026-09-22).

   Isi boleh melewati satu halaman: tidak ada `min-height` per blok, dan saat mencetak
   `.cetak-sheet` kehilangan `min-height`-nya (lihat blok `@media print` di atas), sedangkan
   tabel surat tidak dipotong header/footer tabel yang tidak perlu.
   ══════════════════════════════════════════════════════════════════════════════════════════ */

/* Lebar lembar: mengikuti `.cetak-sheet` (210 mm) supaya surat & laporan terlihat sama di layar.
   Padding 12 mm = angka `.cetak-sheet` (bukan 14 mm lagi): kop surat dan kop laporan jadi duduk
   di titik yang sama, sehingga surat & laporan lembaga tidak tampak "bergeser" saat dibandingkan. */
.ct-dok-sheet { padding: 12mm 12mm; }

.ct-dok { font-size: 11pt; line-height: 1.45; }

/* Judul di tengah, bergaris atas-bawah — bentuk yang diminta user "Header nya harus ada". */
.ct-dok .ctd-judul {
    border-top: .9pt solid #000;
    border-bottom: .9pt solid #000;
    text-align: center;
    font-weight: 700;
    font-size: 12.5pt;
    text-transform: uppercase;
    padding: 3px 0;
    margin: 10px 0 12px;
}

.ct-dok .ctd-nomor { text-align: center; margin-bottom: 14px; }

.ct-dok .ctd-para { margin: 0 0 7px; text-align: justify; text-indent: 0; }

/* Butir bernomor: nomornya dari penghitung saat menggambar (bukan dari teks), jadi menambah/
   menghapus butir tidak meninggalkan nomor yang melompat. */
.ct-dok .ctd-butir { display: flex; gap: 6px; margin: 0 0 6px; text-align: justify; }
.ct-dok .ctd-butir-no { flex: 0 0 16px; text-align: right; }
/* Teks butir WAJIB mengambil sisa lebar: tanpa `flex: 1` ia mengecil ke lebar isinya sehingga
   `text-align: justify` tidak punya apa pun untuk dirapatkan dan teks tampak menggantung di kiri. */
.ct-dok .ctd-butir > span:last-child { flex: 1; }

/* Tabel label : nilai — SATU tabel (bukan dua tabel berdampingan) supaya garis & tinggi baris
   dijamin sejajar. Sel nilai rata kiri (isinya campur angka & teks), kolom label tidak
   dibungkus. */
.ct-dok .ctd-tabel { width: 100%; border-collapse: collapse; margin: 6px 0 10px; }
.ct-dok .ctd-tabel td { padding: 2.4px 6px; vertical-align: top; }
/* Label `width: 1%` + `nowrap`: kolom label menyusut ke selebar teksnya dan kolom NILAI yang
   mengambil seluruh sisa lembar. Lebar tetap 30% (persentase dari lebar tabel) membuat dua
   pasang label:nilai dalam satu baris hanya menyisakan ±20% untuk nilainya, sehingga nama atau
   alamat panjang membungkus jadi 3–4 baris dan tabel isian tampak berantakan. */
.ct-dok .ctd-label { width: 1%; white-space: nowrap; padding-right: 10px; }
.ct-dok .ctd-nilai { }
/* Nilai KOSONG diberi garis titik-titik: blanko yang belum terisi tetap terbaca sebagai kolom
   isian (bukan ruang putih yang membuat baris tampak rusak). Kelas ini dipasang komponen saat
   placeholder-nya tidak menghasilkan teks. */
.ct-dok .ctd-nilai.ctd-kosong { border-bottom: .5pt dotted #000; }

.ct-dok .ctd-garis { border-top: .9pt solid #000; margin: 8px 0; }
.ct-dok .ctd-spasi { width: 100%; }

/* Tanda tangan: jabatan di atas, ruang tanda tangan tangan basah, nama di bawah. Tanpa garis
   (kertas lembaga yang dipakai contoh tidak menggambar garis ttd; bentuk yang sama dipakai
   lembar bukti — permintaan user 2026-09-22). */
.ct-dok .ctd-ttd { width: 100%; border-collapse: collapse; margin-top: 6px; }
.ct-dok .ctd-ttd td { text-align: center; padding: 0 4px; vertical-align: top; }
.ct-dok .ctd-ttd-jab { font-size: 10pt; }
.ct-dok .ctd-ttd-ruang { height: 16mm; }
.ct-dok .ctd-ttd-nama { font-weight: 700; text-decoration: underline; }

/* ── Dokumen RAT: bab, pasal, pindah halaman, daftar isi, dan laporan tersemat ─────────────────
   Bentuknya mengikuti dokumen surat (`ctd-*`) supaya satu mesin dokumen terlihat sama di mana pun;
   yang ditambah hanya yang memang khas laporan tahunan. */
.ct-dok .ctd-bab {
    font-weight: 700;
    text-transform: uppercase;
    text-align: center;
    margin: 14px 0 8px;
    page-break-after: avoid;
}

.ct-dok .ctd-pasal { font-weight: 700; margin: 10px 0 5px; page-break-after: avoid; }

/* Pindah halaman dipaksa lewat elemen kosong: `page-break-before` di blok berikutnya tidak bisa
   dipakai karena bloknya digambar data-dorong (daftar blok), bukan ditulis di Razor. */
.ct-dok .ctd-pisah { break-before: page; page-break-before: always; }

.ct-dok .ctd-isi { padding-left: 6mm; }

/* Laporan tersemat: tabel angka, rata kanan, angka ber-`mono` supaya kolomnya sejajar. */
.ct-dok .ctd-lap { width: 100%; border-collapse: collapse; margin: 4px 0 12px; font-size: 9.5pt; }
.ct-dok .ctd-lap th,
.ct-dok .ctd-lap td { border: .5pt solid #000; padding: 2.2px 5px; vertical-align: top; }
.ct-dok .ctd-lap thead th { background: #ececec; text-align: left; }
.ct-dok .ctd-lap thead th.r,
.ct-dok .ctd-lap td.r { text-align: right; }
.ct-dok .ctd-lap tfoot td { font-weight: 700; }
.ct-dok .ctd-lap-sempit { width: 1%; }
.ct-dok .ctd-lap-catatan { font-size: 9pt; font-style: italic; margin: -6px 0 12px; }
.ct-dok .ctd-lap-kosong { border: .5pt dashed #000; padding: 6px 8px; margin: 6px 0 12px; font-size: 9.5pt; }

/* Di LAYAR HP surat memakai lebar penuh layar (bukan kertas 210 mm yang terpotong) — aturan yang
   sama dengan lembar bukti 1/3 A4; saat mencetak `.cetak-sheet` tetap A4. */
@media screen and (max-width: 899px) {
    .cetak-sheet.ct-dok-sheet {
        width: 100%;
        min-height: 0;
        padding: 4mm;
        box-shadow: none;
    }
}

/* Surat selalu dimulai di halaman baru saat dicetak (satu surat = satu dokumen), dan tabel
   surat tidak dipecah barisnya oleh page-break di tengah baris. */
@media print {
    .ct-dok { page-break-inside: auto; }
    .ct-dok .ctd-judul { page-break-after: avoid; }
    .ct-dok .ctd-tabel tr { page-break-inside: avoid; }
    .ct-dok .ctd-ttd { page-break-inside: avoid; }
    /* Laporan tersemat: kepala tabel diulang di halaman berikutnya, dan satu baris angka tidak
       dipecah dua halaman (kelas cacat yang membuat tabel panjang tak terbaca). */
    .ct-dok .ctd-lap thead { display: table-header-group; }
    .ct-dok .ctd-lap tr { page-break-inside: avoid; }
    .ct-dok .ctd-bab { page-break-after: avoid; }
}

/* ── CALK — kertas (gaya layarnya di shared.css; judul seksi jangan menempel di kaki halaman) ── */
.cetak-shell .calk-judul { font-weight: 700; font-size: 11pt; margin: 10pt 0 4pt; page-break-after: avoid; }
.cetak-shell .calk-teks { text-align: justify; white-space: pre-line; line-height: 1.5; margin: 0 0 5pt; }
.cetak-shell .calk-halus { font-size: 9pt; font-style: italic; }
.cetak-shell .calk-tag { font-size: 9pt; font-style: italic; }
