:root {
  --tms-primary: #2A7F6F;
  --tms-primary-dark: #1F5F52;
  --tms-primary-light: #E6F3F1;
  --tms-sidebar: #1E2A2A;
  --tms-bg-page: #F5F4F1;
  --tms-text: #2D3A3A;
  --tms-text-muted: #5A6A6A;
  --tms-text-hint: #8A9A99;
  --tms-border: rgba(45,58,58,0.10);
}

body { background: var(--tms-bg-page); color: var(--tms-text); touch-action: pan-y; }
html { overflow-x: hidden; scrollbar-gutter: stable; }
.fw-500 { font-weight: 500; }

/* Kartu Open Trip — judul trip panjangnya macam-macam (ada yang 1 baris, ada yang sampai 2
   baris). Tanpa ini, kartu yang judulnya kebetulan 2 baris bikin destinasi/tanggal/Kuota Terisi
   di bawahnya jadi lebih turun dibanding kartu sebelahnya yang judulnya cuma 1 baris — jadi
   terlihat tidak rata sejajar dalam 1 baris grid. Dikunci selalu reservasi ruang 2 baris (judul
   yang lebih panjang dari itu dipotong dengan "…"), jadi tinggi area judul selalu sama.
   min-height sedikit lebih dari 2x line-height default Bootstrap (1.5) buat jaga-jaga font
   metrics browser berbeda-beda. */
.ot-card-title {
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  min-height: 3.1rem;
}

/* Kartu tidak boleh pernah mendorong lebar halaman — apapun isinya dibatasi ke lebar kartu sendiri */
.card { max-width: 100%; overflow: hidden; }
.card-body { min-width: 0; }
.card-body .d-flex > * { min-width: 0; }

.btn-primary { background-color: var(--tms-primary); border-color: var(--tms-primary); }
.btn-primary:hover, .btn-primary:focus { background-color: var(--tms-primary-dark); border-color: var(--tms-primary-dark); }
.btn-touch { min-height: 44px; }

.form-control:focus, .form-select:focus { border-color: var(--tms-primary); box-shadow: 0 0 0 .2rem rgba(42,127,111,.15); }

.table-hover > tbody > tr:hover > td { background-color: #F0EFEC; }

/* Badge status reservasi */
.badge-inquiry { background:#ECEEED; color:#4A5A5A; }
.badge-deal    { background:#F5EDD8; color:#7A6020; }
.badge-dp      { background:#E3EDF5; color:#295A80; }
.badge-lunas   { background:#E6F3F1; color:#1F5F52; }
.badge-selesai { background:#E3F3E6; color:#1F7A3D; }
.badge-batal   { background:#F5E6E6; color:#8A2D2D; }
.badge-urgent  { background:#F5E6E6; color:#8A2D2D; }

/* Filter chip */
.filter-chips-wrap { display:flex; gap:.5rem; overflow-x:auto; padding-bottom:.25rem; touch-action: pan-x; }
.filter-chip { border:1px solid var(--tms-border); background:#fff; color: var(--tms-text-muted); border-radius: 999px; white-space:nowrap; }
.filter-chip.active { background: var(--tms-primary); color:#fff; border-color: var(--tms-primary); }

/* Fix klasik flexbox: input di dalam input-group tidak mau menyusut di layar sempit, bikin halaman overflow ke samping */
.input-group > .form-control { min-width: 0; }

/* Avatar */
.avatar-circle { width:36px; height:36px; border-radius:50%; background: var(--tms-primary); color:#fff; display:flex; align-items:center; justify-content:center; font-weight:500; font-size:.85rem; flex-shrink:0; }

/* FAB */
.fab {
  position: fixed; right: 18px; bottom: 78px;
  width: 54px; height: 54px; min-width: 54px; min-height: 54px;
  padding: 0; margin: 0; box-sizing: border-box;
  border-radius: 50%; border: none;
  background: var(--tms-primary); color: #fff;
  display: flex; align-items: center; justify-content: center;
  box-shadow: 0 3px 8px rgba(0,0,0,.22), 0 6px 16px rgba(0,0,0,.18);
  z-index: 1045; line-height: 1; text-decoration: none;
  transition: transform .15s ease, box-shadow .15s ease, background-color .15s ease;
}
/* Tanda plus digambar pakai CSS murni supaya presisi di tengah, tidak tergantung rendering font ikon */
.fab i { display: none; }
.fab::before, .fab::after {
  content: ''; position: absolute; background: #fff; border-radius: 2px;
}
.fab::before { width: 18px; height: 3px; top: 50%; left: 50%; transform: translate(-50%, -50%); }
.fab::after { width: 3px; height: 18px; top: 50%; left: 50%; transform: translate(-50%, -50%); }
.fab:hover, .fab:focus { color: #fff; background: var(--tms-primary-dark); box-shadow: 0 4px 10px rgba(0,0,0,.26), 0 8px 20px rgba(0,0,0,.2); }
.fab:active { transform: scale(0.92); }

/* Dashboard follow-up dots */
.dot-urgent, .dot-tinggi, .dot-sedang, .dot-info, .dot-siap { width:8px; height:8px; border-radius:50%; display:inline-block; flex-shrink:0; }
.dot-urgent { background:#C94A4A; }
.dot-tinggi { background:#C9952A; }
.dot-sedang { background:#2A7F6F; }
.dot-info   { background:#4A8ABB; }
.dot-siap   { background:#3FA34D; }

.min-w-0 { min-width: 0; }

/* Metric card v2 — ikon kotak berwarna + label/nilai, menggantikan border-top warna lama */
.card-metric { border: 1px solid var(--tms-border); cursor: default; }
.card-metric.card-metric-clickable { cursor: pointer; }
.card-metric.card-metric-clickable:hover { border-color: var(--tms-border-strong, rgba(45,58,58,0.25)); }
.card-metric .card-body { display:flex; align-items:flex-start; gap:.6rem; }
.metric-icon { width:36px; height:36px; border-radius:10px; display:flex; align-items:center; justify-content:center; flex-shrink:0; font-size:1rem; }
.metric-icon-teal   { background:#E1F0EC; color:#2A7F6F; }
.metric-icon-red    { background:#F7E7E7; color:#C94A4A; }
.metric-icon-blue   { background:#E7F0F7; color:#4A8ABB; }
.metric-icon-purple { background:#EFEAF3; color:#7A6A9A; }
.metric-icon-amber  { background:#FBF0DC; color:#C9952A; }
.metric-icon-green  { background:#E9F5EA; color:#3FA34D; }
html[data-theme="dark"] .metric-icon-teal   { background:#173A32; color:#5DCAA5; }
html[data-theme="dark"] .metric-icon-red    { background:#3A2222; color:#E5A3A3; }
html[data-theme="dark"] .metric-icon-blue   { background:#1D2C38; color:#9CC3E8; }
html[data-theme="dark"] .metric-icon-purple { background:#2B2635; color:#C6B8DD; }
html[data-theme="dark"] .metric-icon-amber  { background:#3A331B; color:#E3CE8E; }
html[data-theme="dark"] .metric-icon-green  { background:#173A22; color:#7FDB92; }

/* List row avatar (Sisa Hutang Vendor Terbesar) */
.list-avatar-circle {
  width:26px; height:26px; border-radius:50%; display:flex; align-items:center; justify-content:center;
  font-size:.68rem; font-weight:500; flex-shrink:0; background:#F7E7E7; color:#C94A4A;
}
html[data-theme="dark"] .list-avatar-circle { background:#3A2222; color:#E5A3A3; }

/* Empty state ikon (kartu piutang/hutang kosong) */
.empty-state-icon { font-size:1.4rem; color: var(--tms-text-hint); display:block; margin-bottom:.4rem; }

.text-hint { color: var(--tms-text-hint); }
.main-content { min-height: 100vh; }

/* Detail pelanggan di Form Reservasi — dropdown pencarian & kotak ringkasan di bawah select
   sama-sama menonjolkan Catatan (riwayat/preferensi pelanggan), supaya user tidak salah pilih
   ketika ada beberapa pelanggan dengan nama yang sama. */
.pelanggan-detail-box { border: 1px solid var(--tms-border); border-radius: .5rem; padding: .5rem .65rem; color: var(--tms-text-muted); }
.detail-catatan-highlight { color: var(--tms-primary-dark); background: var(--tms-primary-light); border-radius: .375rem; padding: .35rem .5rem; }
html[data-theme="dark"] .detail-catatan-highlight { background: rgba(42,127,111,.14); color: #fff; }
/* Garis pemisah tegas antar baris di dropdown pencarian Pelanggan & Vendor -- tiap baris berisi
   beberapa info (nama, kontak, alamat, catatan), jadi perlu batas yang jelas biar mata tidak
   ketuker antara data satu pelanggan/vendor dengan yang berikutnya. */
.detail-option-item { padding: .5rem 0; border-bottom: 1px solid var(--tms-border); }
.ts-dropdown-content .option:last-child .detail-option-item { border-bottom: none; }

/* Catatan konteks di Laporan Rasio Keuangan — callout kecil (ikon + teks) supaya penjelasan
   nuansa tiap rasio terasa seperti tips ringan, bukan disclaimer tebal, tapi tetap rapi & mudah
   dipindai matanya (beda visual dari angka rasio di atasnya). */
.rasio-catatan {
  display: flex; align-items: flex-start; gap: .5rem;
  background: var(--tms-primary-light); border-radius: .5rem;
  padding: .5rem .65rem; margin-top: .6rem; font-size: .8125rem; line-height: 1.45;
  color: var(--tms-text-muted);
}
.rasio-catatan i { color: var(--tms-primary); flex-shrink: 0; margin-top: .1rem; }
html[data-theme="dark"] .rasio-catatan { background: rgba(42,127,111,.14); }


/* Tombol tutup modal (X) — selalu merah & terlihat jelas, di light maupun dark mode (default
   Bootstrap warnanya hitam tipis 50% opacity, gampang hilang di latar gelap). Bootstrap merender
   ikonnya lewat background-image SVG, bukan warna teks biasa, jadi diganti total SVG-nya. */
.btn-close {
  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23C94A4A'%3e%3cpath stroke-linecap='round' stroke-width='2' d='M1 1l14 14M15 1L1 15'/%3e%3c/svg%3e") !important;
  opacity: 1 !important;
}
.btn-close:hover, .btn-close:focus { opacity: .7 !important; box-shadow: none !important; }

/* Ikon "lihat contoh" — hover/fokus untuk menampilkan contoh isian lewat tooltip,
   dipakai sebagai pengganti placeholder panjang di dalam kolom entry (supaya kolom
   kosong benar-benar terlihat kosong, tidak seperti sudah terisi). */
.example-hint {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: var(--tms-text-hint);
  cursor: help;
  margin-left: .4rem;
  font-size: .95em;
  vertical-align: middle;
}
.example-hint:hover, .example-hint:focus { color: var(--tms-primary); }
th .example-hint { font-size: .85em; }

/* Tabel baris-dinamis (Susun Biaya, Rincian Penjualan) — semua kolom di baris yang sama dibuat
   SAMA TINGGI (ikut menyamai kolom Uraian, yang biasanya paling tinggi karena teksnya panjang),
   dengan isi tetap rata atas. Kotak input/select dibungkus ".cell-stretch" (lihat markup), yang
   diregangkan penuh 1 baris lalu isinya di-PIN persis ke pojok kiri-atas pakai position:absolute
   — teknik ini dipilih (bukan flexbox align-items) karena terbukti lebih pasti menembus gaya
   internal TomSelect (dropdown Jenis Biaya/Vendor tetap ke-tengah kalau cuma pakai flexbox biasa).
   Trik "height:1px" di <td> diperlukan supaya height:100% pada elemen anak bisa mengikuti tinggi
   baris SEBENARNYA (batasan CSS tabel: tanpa ini height:100% percuma).
*/
#tabelBiaya > tbody > tr > td, #tabelJual > tbody > tr > td { height: 1px; vertical-align: top; }
#tabelBiaya > tbody > tr > td .cell-stretch,
#tabelJual > tbody > tr > td .cell-stretch {
  height: 100%;
  position: relative;
  min-width: 100%;
}
#tabelBiaya > tbody > tr > td .cell-stretch > *,
#tabelJual > tbody > tr > td .cell-stretch > * {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
}
#tabelBiaya > tbody > tr > td .btn-hapus-baris { margin-top: .1rem; }

/* Hilangkan border/kotak bawaan input-select di dalam tabel Susun Biaya & Rincian Penjualan —
   tabelnya sendiri sudah bergaris (table-bordered), jadi kalau tiap input juga punya kotak sendiri
   di dalamnya, jadi terlihat "kotak di dalam kotak" dan ukurannya kelihatan tidak seragam. Garis
   sel tabel yang jadi satu-satunya pembatas; saat fokus diberi highlight warna supaya tetap
   kelihatan sedang mengetik di sel mana. */
#tabelBiaya .form-control, #tabelBiaya .form-select,
#tabelJual .form-control, #tabelJual .form-select,
#tabelBiaya .ts-wrapper .ts-control, #tabelJual .ts-wrapper .ts-control {
  border: none;
  border-radius: 0;
  box-shadow: none;
  background-color: transparent;
}
#tabelBiaya .form-control:focus, #tabelBiaya .form-select:focus,
#tabelJual .form-control:focus, #tabelJual .form-select:focus,
#tabelBiaya .ts-wrapper.focus .ts-control, #tabelJual .ts-wrapper.focus .ts-control {
  background-color: var(--tms-primary-light);
  box-shadow: none;
}
#tabelBiaya .ts-wrapper.single .ts-control, #tabelBiaya .ts-wrapper.multi .ts-control,
#tabelJual .ts-wrapper.single .ts-control, #tabelJual .ts-wrapper.multi .ts-control {
  min-height: 0;
}

/* Dark mode: dua tabel di atas adalah tabel ENTRY (Susun Biaya, Rincian Penjualan) — sengaja
   dibuat TERANG (bukan ikut gelap seperti latar sekitarnya) dengan teks gelap yang kontras, supaya
   jelas beda area mana yang harus diisi. Override "transparent" di atas KHUSUS untuk dark mode
   (di light mode "transparent" sudah pas karena warna latar tabel & input sama-sama putih).

   Warna terang dipasang di WRAPPER ".cell-stretch" (yang tingginya sudah pasti menyamai baris),
   BUKAN di kontrolnya langsung (yang tingginya natural/pendek) — supaya kotak terang yang
   kelihatan itu benar-benar setinggi baris, bukan cuma setinggi kontrolnya sendiri (itu penyebab
   kotak-kotak kelihatan tidak sama tinggi). Kontrol di dalamnya dibuat transparan supaya menyatu
   rata dengan warna wrapper-nya. Uraian TIDAK dibungkus ".cell-stretch" (dari sananya sudah paling
   tinggi di barisnya sendiri), jadi tetap pakai warna langsung di dirinya sendiri. Berlaku juga
   untuk kolom Total & tombol Hapus per baris, plus baris footer Total Estimasi Biaya/Estimasi
   Biaya per Orang — supaya seluruh tabel konsisten kotak terangnya, bukan cuma kolom isian. */
html[data-theme="dark"] #tabelBiaya .cell-stretch,
html[data-theme="dark"] #tabelJual .cell-stretch {
  background-color: #EAEDEC;
  border-radius: .25rem;
  color: #1B2426 !important;
}
html[data-theme="dark"] #tabelBiaya .cell-stretch:focus-within,
html[data-theme="dark"] #tabelJual .cell-stretch:focus-within {
  background-color: #FFFFFF;
}
html[data-theme="dark"] #tabelBiaya .c-total, html[data-theme="dark"] #tabelJual .s-total {
  display: inline-block;
  padding: .25rem .5rem;
}
/* Baris footer (Total Estimasi Biaya, Estimasi Biaya per Orang, Subtotal Rincian Penjualan) —
   dibungkus <span class="footer-value-box"> (bukan warnanya langsung di <td>) supaya lebarnya
   PASTI menyamai kolom Total di atasnya (block, 100% lebar sel kolom yang sama) dan ada jarak
   antar baris (margin), tidak lagi kelihatan menyatu jadi satu kotak besar. */
html[data-theme="dark"] #tabelBiaya .footer-value-box, html[data-theme="dark"] #tabelJual .footer-value-box {
  display: block;
  background-color: #EAEDEC;
  color: #1B2426 !important;
  border-radius: .25rem;
  padding: .375rem .75rem;
  margin: .2rem 0;
}
html[data-theme="dark"] #tabelBiaya .btn-hapus-baris, html[data-theme="dark"] #tabelJual .btn-hapus-baris {
  background-color: #fff;
}
/* Kotak Estimasi Margin di kartu Ringkasan (reservasi/form.php) — normalnya IKUT gelap seperti
   baris lain (readonly input default), TAPI saat baris ini di-hover, kotaknya ikut terang
   menyamai highlight hover baris (bukan terang permanen — itu malah beda sendiri dari baris lain
   yang semuanya baru terang saat di-hover). Border dihilangkan (baik light maupun dark mode) —
   baris-baris lain di Ringkasan tidak ada border, jadi ini disamakan biar konsisten satu kartu.
*/
#estimasiMarginDisplay { border: none !important; box-shadow: none !important; }
html[data-theme="dark"] .list-group-item:hover #estimasiMarginDisplay {
  background-color: #E9EFEE !important;
  color: #12181A !important;
}
/* Kotak Total Akhir di kartu Diskon & Pembayaran — readonly, sebelumnya ikut gelap seperti input
   readonly umumnya sehingga kurang menonjol sebagai angka penting. Dibuat terang kontras. */
html[data-theme="dark"] #grandTotalDisplay {
  background-color: #EAEDEC !important;
  color: #1B2426 !important;
  border-color: transparent !important;
}
html[data-theme="dark"] #tabelBiaya textarea.form-control,
html[data-theme="dark"] #tabelJual textarea.form-control {
  background-color: #EAEDEC;
  color: #1B2426;
}
html[data-theme="dark"] #tabelBiaya textarea.form-control:focus,
html[data-theme="dark"] #tabelJual textarea.form-control:focus {
  background-color: #FFFFFF;
  color: #1B2426;
}
html[data-theme="dark"] #tabelBiaya .cell-stretch .form-control, html[data-theme="dark"] #tabelBiaya .cell-stretch .form-select,
html[data-theme="dark"] #tabelJual .cell-stretch .form-control, html[data-theme="dark"] #tabelJual .cell-stretch .form-select,
html[data-theme="dark"] #tabelBiaya .cell-stretch .ts-wrapper .ts-control, html[data-theme="dark"] #tabelJual .cell-stretch .ts-wrapper .ts-control {
  background-color: transparent;
  color: #1B2426;
}
html[data-theme="dark"] #tabelBiaya .form-control::placeholder, html[data-theme="dark"] #tabelJual .form-control::placeholder {
  color: #6B7877;
}

/* Duplikat persis blok di atas, khusus untuk tabel Struktur Biaya di halaman Open Trip
   (#tabelBiayaOpenTrip) — supaya formatnya identik dengan Susun Biaya di Reservasi (#tabelBiaya
   di atas). Sengaja diduplikasi sebagai blok terpisah (bukan digabung pakai koma di selector yang
   sama), supaya rantai kombinator "> tbody > tr > td" tetap benar (kalau digabung pakai koma di
   tengah rantai descendant, artinya jadi berubah total, bukan sekadar "berlaku untuk tabel ini
   juga"). Tabel Estimasi Nilai Jual (#tabelJualOpenTrip) dapat blok duplikatnya sendiri di bawah,
   dengan alasan yang sama. */
#tabelBiayaOpenTrip > tbody > tr > td { height: 1px; vertical-align: top; }
#tabelBiayaOpenTrip > tbody > tr > td .cell-stretch {
  height: 100%;
  position: relative;
  min-width: 100%;
}
#tabelBiayaOpenTrip > tbody > tr > td .cell-stretch > * {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
}
#tabelBiayaOpenTrip > tbody > tr > td .btn-hapus-baris { margin-top: .1rem; }
#tabelBiayaOpenTrip .form-control, #tabelBiayaOpenTrip .form-select,
#tabelBiayaOpenTrip .ts-wrapper .ts-control {
  border: none;
  border-radius: 0;
  box-shadow: none;
  background-color: transparent;
}
#tabelBiayaOpenTrip .form-control:focus, #tabelBiayaOpenTrip .form-select:focus,
#tabelBiayaOpenTrip .ts-wrapper.focus .ts-control {
  background-color: var(--tms-primary-light);
  box-shadow: none;
}
#tabelBiayaOpenTrip .ts-wrapper.single .ts-control, #tabelBiayaOpenTrip .ts-wrapper.multi .ts-control {
  min-height: 0;
}
html[data-theme="dark"] #tabelBiayaOpenTrip .cell-stretch {
  background-color: #EAEDEC;
  border-radius: .25rem;
  color: #1B2426 !important;
}
html[data-theme="dark"] #tabelBiayaOpenTrip .cell-stretch:focus-within {
  background-color: #FFFFFF;
}
html[data-theme="dark"] #tabelBiayaOpenTrip .c-total {
  display: inline-block;
  padding: .25rem .5rem;
}
html[data-theme="dark"] #tabelBiayaOpenTrip .footer-value-box {
  display: block;
  background-color: #EAEDEC;
  color: #1B2426 !important;
  border-radius: .25rem;
  padding: .375rem .75rem;
  margin: .2rem 0;
}
html[data-theme="dark"] #tabelBiayaOpenTrip .btn-hapus-baris {
  background-color: #fff;
}
html[data-theme="dark"] #tabelBiayaOpenTrip textarea.form-control {
  background-color: #EAEDEC;
  color: #1B2426;
}
html[data-theme="dark"] #tabelBiayaOpenTrip textarea.form-control:focus {
  background-color: #FFFFFF;
  color: #1B2426;
}
html[data-theme="dark"] #tabelBiayaOpenTrip .cell-stretch .form-control, html[data-theme="dark"] #tabelBiayaOpenTrip .cell-stretch .form-select,
html[data-theme="dark"] #tabelBiayaOpenTrip .cell-stretch .ts-wrapper .ts-control {
  background-color: transparent;
  color: #1B2426;
}
html[data-theme="dark"] #tabelBiayaOpenTrip .form-control::placeholder {
  color: #6B7877;
}

/* Duplikat yang sama lagi untuk tabel Komponen Biaya di halaman Template Biaya
   (#tabelBiayaTemplate) — supaya tinggi baris & warna kotak terang saat dark mode identik dengan
   Susun Biaya di Reservasi (#tabelBiaya). */
#tabelBiayaTemplate > tbody > tr > td { height: 1px; vertical-align: top; }
#tabelBiayaTemplate > tbody > tr > td .cell-stretch {
  height: 100%;
  position: relative;
  min-width: 100%;
}
#tabelBiayaTemplate > tbody > tr > td .cell-stretch > * {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
}
#tabelBiayaTemplate > tbody > tr > td .btn-hapus-baris { margin-top: .1rem; }
#tabelBiayaTemplate .form-control, #tabelBiayaTemplate .form-select,
#tabelBiayaTemplate .ts-wrapper .ts-control {
  border: none;
  border-radius: 0;
  box-shadow: none;
  background-color: transparent;
}
#tabelBiayaTemplate .form-control:focus, #tabelBiayaTemplate .form-select:focus,
#tabelBiayaTemplate .ts-wrapper.focus .ts-control {
  background-color: var(--tms-primary-light);
  box-shadow: none;
}
#tabelBiayaTemplate .ts-wrapper.single .ts-control, #tabelBiayaTemplate .ts-wrapper.multi .ts-control {
  min-height: 0;
}
html[data-theme="dark"] #tabelBiayaTemplate .cell-stretch {
  background-color: #EAEDEC;
  border-radius: .25rem;
  color: #1B2426 !important;
}
html[data-theme="dark"] #tabelBiayaTemplate .cell-stretch:focus-within {
  background-color: #FFFFFF;
}
html[data-theme="dark"] #tabelBiayaTemplate .i-total {
  display: inline-block;
  padding: .25rem .5rem;
}
html[data-theme="dark"] #tabelBiayaTemplate .footer-value-box {
  display: block;
  background-color: #EAEDEC;
  color: #1B2426 !important;
  border-radius: .25rem;
  padding: .375rem .75rem;
  margin: .2rem 0;
}
html[data-theme="dark"] #tabelBiayaTemplate .btn-hapus-baris {
  background-color: #fff;
}
html[data-theme="dark"] #tabelBiayaTemplate textarea.form-control {
  background-color: #EAEDEC;
  color: #1B2426;
}
html[data-theme="dark"] #tabelBiayaTemplate textarea.form-control:focus {
  background-color: #FFFFFF;
  color: #1B2426;
}
html[data-theme="dark"] #tabelBiayaTemplate .cell-stretch .form-control, html[data-theme="dark"] #tabelBiayaTemplate .cell-stretch .form-select,
html[data-theme="dark"] #tabelBiayaTemplate .cell-stretch .ts-wrapper .ts-control {
  background-color: transparent;
  color: #1B2426;
}
html[data-theme="dark"] #tabelBiayaTemplate .form-control::placeholder {
  color: #6B7877;
}

/* Duplikat yang sama untuk tabel Estimasi Nilai Jual di Open Trip (#tabelJualOpenTrip) --
   markup-nya sekarang sudah dibungkus .cell-stretch sama seperti Rincian Penjualan di Reservasi
   (#tabelJual), jadi aman diterapkan (lihat catatan di atas kenapa harus blok terpisah, bukan
   digabung koma). */
#tabelJualOpenTrip > tbody > tr > td { height: 1px; vertical-align: top; }
#tabelJualOpenTrip > tbody > tr > td .cell-stretch {
  height: 100%;
  position: relative;
  min-width: 100%;
}
#tabelJualOpenTrip > tbody > tr > td .cell-stretch > * {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
}
#tabelJualOpenTrip > tbody > tr > td .btn-hapus-baris { margin-top: .1rem; }
#tabelJualOpenTrip .form-control, #tabelJualOpenTrip .form-select,
#tabelJualOpenTrip .ts-wrapper .ts-control {
  border: none;
  border-radius: 0;
  box-shadow: none;
  background-color: transparent;
}
#tabelJualOpenTrip .form-control:focus, #tabelJualOpenTrip .form-select:focus,
#tabelJualOpenTrip .ts-wrapper.focus .ts-control {
  background-color: var(--tms-primary-light);
  box-shadow: none;
}
#tabelJualOpenTrip .ts-wrapper.single .ts-control, #tabelJualOpenTrip .ts-wrapper.multi .ts-control {
  min-height: 0;
}
html[data-theme="dark"] #tabelJualOpenTrip .cell-stretch {
  background-color: #EAEDEC;
  border-radius: .25rem;
  color: #1B2426 !important;
}
html[data-theme="dark"] #tabelJualOpenTrip .cell-stretch:focus-within {
  background-color: #FFFFFF;
}
html[data-theme="dark"] #tabelJualOpenTrip .s-total {
  display: inline-block;
  padding: .25rem .5rem;
}
html[data-theme="dark"] #tabelJualOpenTrip .footer-value-box {
  display: block;
  background-color: #EAEDEC;
  color: #1B2426 !important;
  border-radius: .25rem;
  padding: .375rem .75rem;
  margin: .2rem 0;
}
html[data-theme="dark"] #tabelJualOpenTrip .btn-hapus-baris {
  background-color: #fff;
}
html[data-theme="dark"] #tabelJualOpenTrip textarea.form-control {
  background-color: #EAEDEC;
  color: #1B2426;
}
html[data-theme="dark"] #tabelJualOpenTrip textarea.form-control:focus {
  background-color: #FFFFFF;
  color: #1B2426;
}
html[data-theme="dark"] #tabelJualOpenTrip .cell-stretch .form-control, html[data-theme="dark"] #tabelJualOpenTrip .cell-stretch .form-select,
html[data-theme="dark"] #tabelJualOpenTrip .cell-stretch .ts-wrapper .ts-control {
  background-color: transparent;
  color: #1B2426;
}
html[data-theme="dark"] #tabelJualOpenTrip .form-control::placeholder {
  color: #6B7877;
}

/* Menyamakan tinggi label yang berdampingan dalam satu baris grid, supaya input di
   bawahnya tetap sejajar walau salah satu label membungkus jadi 2 baris (mis. saat
   layar menyempit tapi kolom masih berdampingan). Hanya berlaku mulai breakpoint md
   ke atas — di layar mobile kolom sudah menumpuk penuh (col-12), jadi tidak perlu
   reservasi ruang kosong 2 baris di sana. */
@media (min-width: 768px) {
  .form-label-align { min-height: 3rem; }
}

/* Baris ringkasan Jurnal Umum (accounting/index.php) — tabelnya tidak pakai .table-hover
   (butuh sel <tr> tetap bisa diklik untuk expand/collapse, bukan cuma efek visual), jadi
   highlight hover dark mode ditulis khusus di sini: latar terang + teks gelap kontras,
   sama polanya dengan highlight kursor di tempat lain. Badge (jenis/status) tidak disentuh
   karena warnanya sendiri sudah kontras baik di light maupun dark mode. */
html[data-theme="dark"] tr.jurnal-summary-row:hover,
html[data-theme="dark"] div.jurnal-summary-row:hover {
  background-color: #E9EFEE !important;
  color: #12181A !important;
  border-radius: .25rem;
}
html[data-theme="dark"] tr.jurnal-summary-row:hover td,
html[data-theme="dark"] tr.jurnal-summary-row:hover .fw-500,
html[data-theme="dark"] tr.jurnal-summary-row:hover .text-hint,
html[data-theme="dark"] div.jurnal-summary-row:hover .fw-500,
html[data-theme="dark"] div.jurnal-summary-row:hover .text-hint {
  color: #12181A !important;
}

.tooltip .tooltip-inner {
  max-width: 300px;
  text-align: left;
}

/* Tombol toggle dark mode (di sidebar footer) */
.theme-toggle-btn {
  width: 34px; height: 34px; border-radius: 50%; border: 1px solid rgba(255,255,255,.15);
  background: rgba(255,255,255,.05); color: #8AABAA; display: flex; align-items: center; justify-content: center;
  flex-shrink: 0; transition: background .15s, color .15s;
}
.theme-toggle-btn:hover { background: rgba(255,255,255,.12); color: #fff; }

/* ================= DARK MODE ================= */
html[data-theme="dark"] {
  --tms-primary-light: #17332E;
  --tms-bg-page: #12181A;
  --tms-text: #E6EDEC;
  --tms-text-muted: #B7C7C4;
  --tms-text-hint: #93A6A3;
  --tms-border: rgba(255,255,255,0.09);
  color-scheme: dark;
  /* Variabel internal Bootstrap — banyak komponen (navbar-brand, heading, dsb)
     pakai warna sendiri yang tidak ikut variabel tema kita kalau tidak di-override di sini */
  --bs-body-color: var(--tms-text);
  --bs-body-bg: var(--tms-bg-page);
  --bs-emphasis-color: var(--tms-text);
  --bs-heading-color: var(--tms-text);
  --bs-navbar-brand-color: var(--tms-text);
  --bs-navbar-color: var(--tms-text);
  --bs-navbar-active-color: var(--tms-text);
  --bs-card-color: var(--tms-text);
  --bs-table-color: var(--tms-text);
  --bs-dropdown-link-color: var(--tms-text);
  --bs-border-color: var(--tms-border);
  --bs-secondary-color: var(--tms-text-hint);
}
html[data-theme="dark"] .form-text { color: var(--tms-text-hint); }
html[data-theme="dark"] .navbar-brand,
html[data-theme="dark"] h1, html[data-theme="dark"] h2, html[data-theme="dark"] h3,
html[data-theme="dark"] h4, html[data-theme="dark"] h5, html[data-theme="dark"] h6,
html[data-theme="dark"] .fw-500 { color: var(--tms-text); }

/* Komponen Bootstrap bawaan (alert & bg-*-subtle) belum disentuh sama sekali di dark mode
   sebelumnya — tetap pakai warna latar terang bawaan, sementara teks di dalamnya (mis. .fw-500)
   sudah dipaksa terang oleh aturan di atas. Kombinasinya jadi terang-di-atas-terang, nyaris tak
   terbaca. Diberi warna dark mode yang senada dengan badge yang sudah ada (badge-deal untuk
   warning/kuning, badge-dp untuk info/biru) supaya konsisten dan pasti kontras. */
html[data-theme="dark"] .alert-warning {
  background-color: #3A331B; color: #E3CE8E; border-color: rgba(255,255,255,.1);
}
html[data-theme="dark"] .alert-info {
  background-color: #1D2C38; color: #9CC3E8; border-color: rgba(255,255,255,.1);
}
html[data-theme="dark"] .bg-body-secondary {
  background-color: #232B2D !important; color: var(--tms-text) !important;
}
html[data-theme="dark"] .bg-primary-subtle {
  background-color: var(--tms-primary-light) !important; color: var(--tms-text) !important;
}
html[data-theme="dark"] body { background: var(--tms-bg-page); color: var(--tms-text); }
html[data-theme="dark"] .card,
html[data-theme="dark"] .modal-content,
html[data-theme="dark"] .list-group-item,
html[data-theme="dark"] .dropdown-menu {
  background-color: #1B2426; color: var(--tms-text); border-color: var(--tms-border);
}
html[data-theme="dark"] .dropdown-item:hover,
html[data-theme="dark"] .dropdown-item:focus {
  background-color: #E9EFEE !important; color: #12181A !important;
}
html[data-theme="dark"] .dropdown-header { color: var(--tms-text-hint); }
html[data-theme="dark"] .table { color: var(--tms-text); border-color: var(--tms-border); }
html[data-theme="dark"] .table > :not(caption) > * > * { background-color: transparent; border-color: var(--tms-border); color: var(--tms-text); }

/* Highlight posisi kursor di dark mode — latar jadi TERANG + teks jadi GELAP supaya baris/kartu
   yang sedang di-hover kontras jelas dari sekelilingnya (bukan cuma sedikit lebih terang seperti
   sebelumnya). Berlaku untuk baris tabel, item list-group, dan kartu yang bisa diklik (dibungkus
   <a>). Elemen yang sudah punya warna sendiri (badge status, dot prioritas) TIDAK disentuh karena
   sudah kontras terhadap latar apa pun. ".text-hint" perlu di-override tersendiri karena warnanya
   sengaja dibuat redup untuk latar gelap, jadi kalau tidak diubah malah nyaris tak terlihat di
   atas latar terang ini. */
html[data-theme="dark"] .table-hover > tbody > tr:hover > td,
html[data-theme="dark"] .list-group-item:hover,
html[data-theme="dark"] a.card:hover,
html[data-theme="dark"] a:hover > .card {
  background-color: #E9EFEE !important;
  color: #12181A !important;
}
html[data-theme="dark"] .table-hover > tbody > tr:hover > td .text-hint,
html[data-theme="dark"] .list-group-item:hover .text-hint,
html[data-theme="dark"] a.card:hover .text-hint,
html[data-theme="dark"] a:hover > .card .text-hint,
html[data-theme="dark"] .table-hover > tbody > tr:hover > td .text-muted,
html[data-theme="dark"] .list-group-item:hover .text-muted,
html[data-theme="dark"] a.card:hover .text-muted,
html[data-theme="dark"] a:hover > .card .text-muted {
  color: #5A6A6A !important;
}
html[data-theme="dark"] .table-hover > tbody > tr:hover > td .fw-500,
html[data-theme="dark"] .list-group-item:hover .fw-500,
html[data-theme="dark"] a.card:hover .fw-500,
html[data-theme="dark"] a:hover > .card .fw-500 {
  color: #12181A !important;
}
html[data-theme="dark"] .form-control, html[data-theme="dark"] .form-select {
  background-color: #D8DEDD; color: #1B2426; border-color: rgba(0,0,0,0.15);
}
html[data-theme="dark"] .form-control:focus, html[data-theme="dark"] .form-select:focus {
  background-color: #EAEDEC; color: #1B2426; border-color: var(--tms-primary);
  box-shadow: 0 0 0 .2rem rgba(45,138,120,.25);
}
html[data-theme="dark"] .form-control::placeholder { color: #5A6A6A; }
html[data-theme="dark"] input[type="date"], html[data-theme="dark"] input[type="time"],
html[data-theme="dark"] input[type="month"], html[data-theme="dark"] input[type="week"],
html[data-theme="dark"] input[type="datetime-local"] { color-scheme: light; }
html[data-theme="dark"] .form-control:disabled, html[data-theme="dark"] .form-control[readonly],
html[data-theme="dark"] .form-select:disabled {
  background-color: #1B2426; color: var(--tms-text-muted); border-color: var(--tms-border);
}
html[data-theme="dark"] .input-group-text { background-color: #1B2426; color: var(--tms-text-hint); border-color: var(--tms-border); }
html[data-theme="dark"] .navbar.bg-white,
html[data-theme="dark"] .topbar { background-color: #171F21 !important; border-color: var(--tms-border) !important; }
html[data-theme="dark"] .bottom-nav { background-color: #171F21; border-color: var(--tms-border); }
html[data-theme="dark"] .filter-chip { background: #1B2426; color: var(--tms-text-muted); border-color: var(--tms-border); }
html[data-theme="dark"] .filter-chip.active { background: var(--tms-primary); color: #fff; }
html[data-theme="dark"] .btn-outline-secondary {
  color: #F2F5F4 !important;
  background-color: #2A3538 !important;
  border-color: rgba(255,255,255,0.35) !important;
}
html[data-theme="dark"] .btn-outline-secondary:hover {
  background-color: #F2F5F4 !important;
  color: #12181A !important;
  border-color: #F2F5F4 !important;
}
html[data-theme="dark"] hr { border-color: var(--tms-border); opacity: 1; }
html[data-theme="dark"] .badge-inquiry { background:#2A3130; color:#B7C4C2; }
html[data-theme="dark"] .badge-deal    { background:#3A331B; color:#E3CE8E; }
html[data-theme="dark"] .badge-dp      { background:#1D2C38; color:#9CC3E8; }
html[data-theme="dark"] .badge-lunas   { background:#17332E; color:#7FD9C4; }
html[data-theme="dark"] .badge-selesai { background:#173A22; color:#7FDB92; }
html[data-theme="dark"] .badge-batal   { background:#3A2222; color:#E5A3A3; }

/* Tombol Kembali di topbar: ikon bulat + garis pemisah vertikal (tidak bersaing dengan judul halaman) */
.topbar-back-icon {
  width: 34px; height: 34px; border-radius: 50%; border: 1px solid var(--tms-border);
  display: inline-flex; align-items: center; justify-content: center;
  color: var(--tms-text-hint); text-decoration: none; flex-shrink: 0; transition: background .15s, color .15s;
}
.topbar-back-icon:hover { background: #F2F1EE; color: var(--tms-text); }
.topbar-back-divider { width: 1px; align-self: stretch; background: var(--tms-border); margin: 12px 12px 12px 10px; flex-shrink: 0; }
html[data-theme="dark"] .topbar-back-icon { border-color: var(--tms-border); color: var(--tms-text-hint); }
html[data-theme="dark"] .topbar-back-icon:hover { background: #1B2426; color: var(--tms-text); }
html[data-theme="dark"] .topbar-back-divider { background: var(--tms-border); }

/* Sticky top (topbar + search + filter) di semua ukuran layar — hanya konten daftar yang scroll */
.reservasi-sticky-top {
  position: sticky; top: 0; z-index: 1030;
  background: #fff; box-shadow: 0 2px 4px rgba(0,0,0,.06);
}
.reservasi-sticky-top .topbar { border-bottom: none; }
.reservasi-toolbar { padding-top: .5rem; padding-bottom: .0625rem; }
html[data-theme="dark"] .reservasi-sticky-top { background: #171F21; }

/* Jarak aman bawah di mobile supaya FAB tidak menutupi konten/tombol terakhir */
@media (max-width: 767.98px) {
  main.p-3 { padding-bottom: 120px !important; }
}

/* Sembunyikan FAB saat sidebar (offcanvas) sedang terbuka */
body.offcanvas-open .fab { display: none; }

/* Tom Select — samakan dengan tema TravelMS */
.ts-wrapper.single .ts-control, .ts-wrapper.multi .ts-control { min-height: 38px; }
.ts-wrapper.form-select-sm .ts-control { min-height: 31px; font-size: .875rem; padding: .25rem .5rem; }
.ts-control { border-color: var(--tms-border) !important; }
.ts-wrapper.focus .ts-control { border-color: var(--tms-primary) !important; box-shadow: 0 0 0 .2rem rgba(42,127,111,.15); }
.ts-dropdown .active { background-color: var(--tms-primary-light); color: var(--tms-primary-dark); }
.ts-dropdown .create { color: var(--tms-primary); }

html[data-theme="dark"] .ts-control {
  background-color: #D8DEDD !important; color: #1B2426 !important; border-color: rgba(0,0,0,0.15) !important;
}
html[data-theme="dark"] .ts-dropdown {
  background-color: #1B2426 !important; color: var(--tms-text) !important; border-color: rgba(255,255,255,0.22) !important;
}
html[data-theme="dark"] .ts-dropdown .option { color: var(--tms-text); }
html[data-theme="dark"] .ts-dropdown .active { background-color: #223032; color: #7FD9C4; }
html[data-theme="dark"] .ts-control input { color: #1B2426 !important; }

/* Cegah auto-zoom Safari iOS saat fokus ke input — WebKit otomatis zoom
   kalau font-size elemen form di bawah 16px. Ini bug klasik semua form
   yang pakai .form-control-sm di tabel, bukan bug Safari itu sendiri. */
@media (max-width: 767.98px) {
  input, select, textarea, .form-control, .form-select, .ts-control { font-size: 16px !important; }
}

/* Cetak Laporan — elemen ber-kelas .no-print (sidebar, topbar, tombol, filter form) disembunyikan
   total saat dicetak; sisanya (kartu ringkasan, tabel) dirapikan supaya rapi di kertas.
   Dipasang di sini (bukan per-halaman) supaya semua halaman Laporan otomatis konsisten. */
@media print {
  .tms-sidebar, .topbar, .bottom-nav, .no-print { display: none !important; }
  #wrapper { display: block !important; }
  .main-content { width: 100% !important; margin: 0 !important; padding: 0 !important; min-height: 0 !important; }
  main.p-3 { padding: 0 !important; }
  body { background: #fff !important; }
  .card { border: 1px solid #ccc !important; box-shadow: none !important; break-inside: avoid; }
  .table { font-size: 12px; }
  a { color: inherit !important; text-decoration: none !important; }
  .badge { border: 1px solid #999; color: #000 !important; background: none !important; }
}
.print-header { display: none; }
@media print {
  .print-header { display: flex !important; align-items: center; margin-bottom: 1rem; }
  .print-header-side { width: 90px; flex-shrink: 0; }
  .print-header-side img { max-width: 90px; max-height: 70px; object-fit: contain; }
  .print-header-title { flex: 1 1 auto; text-align: center; }
  .print-header .judul { font-size: 1.1rem; font-weight: 600; }
  .print-header .sub { font-size: .85rem; color: #555; }
}

/* Blok tanda tangan Accounting di bagian bawah setiap Laporan Accounting saat dicetak.
   Data (nama, jabatan, TTD) bersumber dari Setting > Penanda Tangan Laporan Accounting. */
.print-signature { display: none; }
@media print {
  .print-signature {
    display: block !important;
    margin-top: 28px;
    margin-left: auto;
    width: 200px;
    text-align: center;
    font-size: 12px;
    page-break-inside: avoid;
  }
  .print-signature .sign-space { position: relative; height: 70px; }
  .print-signature .sign-space .ttd-img { position: absolute; left: 50%; top: 0; transform: translateX(-50%); max-width: 130px; max-height: 70px; object-fit: contain; }
  .print-signature .nama { font-weight: 600; text-decoration: underline; }
}

/* Baris total Neraca (Total Aktiva / Total Kewajiban + Ekuitas) dipaksa 1 baris (text-nowrap)
   supaya kedua sisi sejajar. Di layar sempit, kecilkan fontnya dulu sebelum akhirnya
   dibiarkan wrap, supaya tidak overflow horizontal di card. */
@media (max-width: 420px) {
  .neraca-total-row { font-size: .95rem !important; }
}
@media (max-width: 340px) {
  .neraca-total-row { white-space: normal !important; }
}

/* Tanda "x" bawaan browser di semua kotak fitur cari (<input type="search"> di dalam
   .search-form) — bawaannya abu-abu gelap, hampir tidak kelihatan di atas latar gelap saat
   dark mode. Dibuat MERAH & custom (ganti ikon bawaan lewat -webkit-appearance:none + SVG
   sendiri) supaya kontras jelas. Firefox tidak punya tombol cancel bawaan untuk
   input[type=search], jadi aturan ini otomatis tidak berpengaruh di sana (bukan bug). */
html[data-theme="dark"] .search-form input[type="search"]::-webkit-search-cancel-button {
  -webkit-appearance: none;
  appearance: none;
  height: .95em;
  width: .95em;
  cursor: pointer;
  background-color: #E15252;
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M2.146 2.146a.5.5 0 0 1 .708 0L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8 2.146 2.854a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M2.146 2.146a.5.5 0 0 1 .708 0L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8 2.146 2.854a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E");
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
}

/* Checkbox & toggle-switch (mis. "Pilih Semua"/"Pilih Grup" di halaman Export Data) nyaris tak
   kelihatan saat dark mode: border-nya ikut variabel --bs-border-color yang sengaja dibuat sangat
   tipis (rgba(255,255,255,0.09)) untuk komponen lain, dan lingkaran knop switch bawaan Bootstrap
   warnanya "dibakar" langsung ke dalam SVG data-URI saat build (bukan ikut CSS variable), jadi
   tetap gelap walau tema berubah -- akibatnya track & knop menyatu dengan latar card yang gelap. */
html[data-theme="dark"] .form-check-input {
  background-color: rgba(255,255,255,0.08);
  border-color: rgba(255,255,255,0.4);
}
html[data-theme="dark"] .form-check-input:checked {
  background-color: var(--tms-primary);
  border-color: var(--tms-primary);
}
html[data-theme="dark"] .form-check-input:focus {
  border-color: var(--tms-primary);
  box-shadow: 0 0 0 .2rem rgba(42,127,111,.35);
}
html[data-theme="dark"] .form-switch .form-check-input {
  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba(230,237,236,0.85)'/%3e%3c/svg%3e");
}
html[data-theme="dark"] .form-switch .form-check-input:checked {
  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e");
}
