/* ═══════════════════════════════════════════════════════════════════════════
   RAPOR TAHFIZH — replika berkas Word "LAPORAN HASIL UJIAN TAHFIZH"
   Kotak halaman A4 penuh (21 x 29,7 cm) dengan padding = margin halaman
   berkas contoh. Lebar kolom & tinggi baris ditulis inline oleh
   rapthRenderDoc() (js/app.js) langsung dari nilai twip berkas contoh, jadi
   pratinjau, cetak/PDF, dan DOCX sebangun.
   ═══════════════════════════════════════════════════════════════════════════ */

.rapth-preview {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 18px;
  overflow-x: auto;
  padding-bottom: 8px;
}

/* Rapor selalu lembar putih bertinta hitam, lepas dari tema aplikasi. */
.rapth-doc {
  position: relative;
  flex: 0 0 auto;
  box-sizing: border-box;
  width: 21cm;
  height: 29.7cm;
  overflow: hidden;
  background: #fff;
  color: #000;
  font-family: 'Times New Roman', Times, 'Liberation Serif', serif;
  font-size: 11pt;
  font-weight: 700;
  line-height: 1.15;
  border: 1px solid rgba(0, 0, 0, .16);
  box-shadow: 0 2px 14px rgba(0, 0, 0, .22);
}

.rapth-doc .rapth-wm {
  position: absolute;
  z-index: 0;
  object-fit: contain;
  pointer-events: none;
  user-select: none;
}

.rapth-doc .rapth-isi {
  position: relative;
  z-index: 1;
}

/* Paragraf kosong pembuka (spasi bawaan dokumen: line 276 + after 200). */
.rapth-doc .rapth-awal { height: calc(12.65pt * 1.15 + 10pt); }
/* Paragraf kosong 11pt spasi tunggal di antara tabel. */
.rapth-doc .rapth-spasi { height: 12.65pt; }

/* Aturan global aplikasi menyetel table/td langsung (tinggi 38px, padding,
   background hover, ukuran huruf !important di layar kecil), jadi seluruhnya
   dinyatakan ulang di sini. */
.rapth-doc .rapth-t {
  border-collapse: collapse;
  table-layout: fixed;
  background: transparent;
  margin: 0;
  min-width: 0 !important;
}

.rapth-doc .rapth-t td.rapth-c {
  border: none;
  height: auto !important;
  padding: 0 0.1905cm !important;      /* w:tblCellMar 108 twip */
  vertical-align: top;
  text-align: left;
  background: transparent;
  color: #000;
  font-size: 11pt !important;
  font-weight: 700;
  line-height: 1.15;
  overflow-wrap: break-word;
}

/* Tabel kriteria autofit di Word: kolom sempit ("Skor") dilebarkan sedikit
   supaya katanya utuh. Di browser lebar kolom tetap dipakai (table-layout
   auto membagi ulang lebar dan menyempitkan kolom Kriteria); cukup larang
   kata dipotong di tengah. */
.rapth-doc .rapth-t.rapth-t-auto td.rapth-c { overflow-wrap: normal; word-break: keep-all; }

.rapth-doc .rapth-t td.rapth-grid { border: 0.75pt solid #000; }   /* w:sz 6 */
.rapth-doc .rapth-t td.rapth-celah {
  border-top: none;
  border-bottom: none;
  border-left: 0.75pt solid #000;
  border-right: 0.75pt solid #000;
}
.rapth-doc .rapth-t td.rapth-tengah { text-align: center; }
.rapth-doc .rapth-t td.rapth-tengah-v { vertical-align: middle; }
.rapth-doc .rapth-t td.rapth-normal { font-weight: 400; }
.rapth-doc .rapth-t td.rapth-pt14 { font-size: 14pt !important; }
.rapth-doc .rapth-t td.rapth-pt10 { font-size: 10pt !important; }

/* Arsir "thinReverseDiagStripe" Word: garis tipis miring "\" rapat, yang di
   kertas terbaca sebagai abu-abu. Digambar oleh <svg class="rapth-arsir-svg">
   berpola vektor (lihat RAPTH_POLA_DEFS) — bukan gradien CSS, yang membuat
   PDF hasil cetak membengkak karena tiap sel dirasterisasi. */
.rapth-preview > .rapth-defs { position: absolute; width: 0; height: 0; overflow: hidden; }
.rapth-doc .rapth-t td.rapth-arsir { position: relative; }
.rapth-doc .rapth-arsir-svg {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
}
.rapth-doc .rapth-arsir .rapth-par { position: relative; }

.rapth-doc .rapth-par { min-height: 1.15em; white-space: pre-wrap; }

/* Catatan sumber data di panel atas pratinjau. */
.rapth-catatan {
  margin: 8px 0 0;
  padding-left: 18px;
  display: flex;
  flex-direction: column;
  gap: 4px;
  font-size: 11.5px;
  font-weight: 600;
  line-height: 1.5;
  color: var(--app-dim);
}
.rapth-catatan strong { color: var(--app-text); }

@media print {
  /* Selain rapor, semuanya display:none supaya tidak muncul halaman kosong. */
  body.rapth-printing > *:not(#appShell) { display: none !important; }
  body.rapth-printing #appShell > *:not(#laporanView) { display: none !important; }
  body.rapth-printing #laporanView > *:not(#lapPanelRaporTahfizh) { display: none !important; }
  body.rapth-printing #lapPanelRaporTahfizh > *:not(#rapthResult) { display: none !important; }

  html.rapth-printing,
  body.rapth-printing,
  body.rapth-printing #appShell {
    background: #fff !important;
    height: auto !important;
    min-height: 0 !important;
    max-height: none !important;
    overflow: visible !important;
    -webkit-print-color-adjust: exact;
    print-color-adjust: exact;
  }

  /* @page bermargin nol (rapthPrint), jadi induk #rapthResult dinolkan dan
     padding .rapth-doc yang menjadi margin halaman. */
  body.rapth-printing,
  body.rapth-printing #appShell,
  body.rapth-printing #laporanView,
  body.rapth-printing #lapPanelRaporTahfizh,
  body.rapth-printing #rapthResult {
    display: block !important;
    position: static !important;
    margin: 0 !important;
    padding: 0 !important;
    border: none !important;
    max-width: none !important;
    transform: none !important;
    background: #fff !important;
  }

  body.rapth-printing .rapth-preview {
    display: block;
    gap: 0;
    overflow: visible;
    padding: 0;
  }

  /* Tinggi dilepas saat cetak supaya pembulatan piksel tidak melahirkan
     halaman kosong; tiap rapor tetap satu halaman lewat break-after. */
  body.rapth-printing .rapth-doc {
    height: auto !important;
    min-height: 0;
    padding-bottom: 0;
    overflow: visible;
    border: none;
    box-shadow: none;
    break-after: page;
    page-break-after: always;
  }
  body.rapth-printing .rapth-doc:last-child {
    break-after: auto;
    page-break-after: auto;
  }

  body.rapth-printing .rapth-doc .rapth-wm,
  body.rapth-printing .rapth-doc .rapth-t td {
    -webkit-print-color-adjust: exact;
    print-color-adjust: exact;
  }

  body.rapth-printing .rapth-doc tr {
    break-inside: avoid;
    page-break-inside: avoid;
  }
}
