/*
 * ps-kit.css — komponen tambahan tema Warm Stone v2 (opt-in, class ps-*) + penyelarasan global §8.
 * Dimuat global oleh application/views/css.php & css_auth.php, SETELAH bootstrap_custom.min.css
 * dan ps-tokens.css. Aturan pakai lengkap: docs/tema/STANDAR.md.
 *
 * Pembagian kerja (2026-10-16):
 *   - WARNA tombol, link, paginasi, fokus input, validasi, alert, dropdown = Bootstrap yang sudah
 *     dibangun ulang dengan palet tema (plugin/scss → bootstrap_custom.min.css). Tidak ditambal di sini.
 *     Tombol per aksi memakai class Bootstrap biasa (STANDAR §4): btn-primary, btn-warning (Edit),
 *     btn-danger, btn-success, btn-info, btn-secondary, btn-outline-success|danger|secondary (export).
 *   - File ini berisi yang tidak dimiliki Bootstrap: ukuran sentuh (ps-btn), badge status tinted,
 *     tabel standar, panel halaman daftar (D56), baris filter, isian 48px + kalibrasi select2, judul
 *     halaman, kartu, modal — semua bernama baru (ps-*), opt-in. SATU-SATUNYA bagian global = §8: warna
 *     sidebar sb-admin & select2, yang menulis warnanya sendiri sehingga tidak ikut palet build Bootstrap.
 *
 * Aturan file ini: warna HANYA lewat var(--ps-*) dari ps-tokens.css. Pengecualian: #fff, cincin fokus rgba()
 * (CSS var tak bisa diberi alfa tanpa color-mix) dan border fokus select2 = nilai hasil build — nilainya di komentar.
 *
 * Isi: 1 utilitas · 2 tombol · 3 badge · 4 tabel, panel daftar & DataTables · 5 kartu & modal
 *      6 isian & baris filter · 7 judul halaman · 8 penyelarasan global (sidebar, select2)
 */

/* ============ 1. UTILITAS ============ */
.ps-num  { font-variant-numeric: tabular-nums; }   /* angka/tanggal sejajar per digit */
/* Naik/turun memakai token -ink, bukan text-success/-danger: teks kecil tetap >= 4.5:1 juga di surface,
   baris terpilih, dan baris hover (warna solid hanya 4.1–4.3:1 di sana). */
.ps-up   { color: var(--ps-success-ink); }
.ps-down { color: var(--ps-danger-ink); }

/* ============ 2. TOMBOL ============
   Warna = class Bootstrap per aksi (STANDAR §4). .ps-btn = ukuran sentuh untuk pengguna 25–60 th:
   tinggi mengikuti kepadatan (48px), teks 15px/700. Aksi per baris tabel: tambah .btn-sm. */
.ps-btn {
	min-height: var(--ps-control-h);
	font-size: var(--ps-fs-body);
	font-weight: 700;
	display: inline-flex; align-items: center; justify-content: center; gap: var(--ps-sp-2);
}
.ps-btn.btn-sm { min-height: 0; font-size: var(--ps-fs-sm); gap: var(--ps-sp-1); }
/* Tombol outline (export & sekunder) di atas latar surface (pita panel, kartu): latar putih agar teks
   tetap >= 4.5:1 (hijau/merah outline di surface hanya 4.1–4.3:1). Ber-scope wadah kit → halaman lama
   tidak berubah. Saat hover/aktif, warna isi dari Bootstrap. */
:is(.ps-panel, .ps-card) :is(.btn-outline-success, .btn-outline-danger, .btn-outline-secondary, .btn-outline-primary, .btn-outline-dark):not(:hover):not(:active):not(.active) { background-color: #fff; }

/* ============ 3. BADGE STATUS — tinted (bukan solid) + kategori ============
   <span class="ps-badge ps-badge-success">APPROVED</span> — kata status UPPERCASE, titik warna di depan.
   (badge-* Bootstrap = solid; dipakai hanya untuk penghitung/angka, bukan status.) */
.ps-badge {
	display: inline-flex; align-items: center; gap: 6px;
	font-size: var(--ps-fs-sm); font-weight: 700; line-height: 1.4;
	padding: 2px 10px; border-radius: 999px; white-space: nowrap;
	background: var(--ps-surface); color: var(--ps-text-muted);
}
.ps-badge::before { content: ""; width: 8px; height: 8px; border-radius: 50%; background: currentColor; flex: none; }
.ps-badge-success { background: var(--ps-success-tint); color: var(--ps-success-ink); }
.ps-badge-warning { background: var(--ps-warning-tint); color: var(--ps-warning-ink); }
.ps-badge-info    { background: var(--ps-info-tint);    color: var(--ps-info-ink); }
.ps-badge-danger  { background: var(--ps-danger-tint);  color: var(--ps-danger-ink); }
.ps-badge-draft   { background: var(--ps-surface);      color: var(--ps-text-muted); }
/* kategori (tanpa titik) — HANYA untuk kategori: jenis item, gudang, jenis dokumen, seri grafik */
.ps-badge[class*="ps-badge-cat-"]::before { display: none; }
.ps-badge-cat-teal   { background: var(--ps-cat-teal-tint);   color: var(--ps-cat-teal-ink); }
.ps-badge-cat-cyan   { background: var(--ps-cat-cyan-tint);   color: var(--ps-cat-cyan-ink); }
.ps-badge-cat-indigo { background: var(--ps-cat-indigo-tint); color: var(--ps-cat-indigo-ink); }
.ps-badge-cat-purple { background: var(--ps-cat-purple-tint); color: var(--ps-cat-purple-ink); }
.ps-badge-cat-pink   { background: var(--ps-cat-pink-tint);   color: var(--ps-cat-pink-ink); }
.ps-badge-cat-orange { background: var(--ps-cat-orange-tint); color: var(--ps-cat-orange-ink); }
.ps-badge-cat-gold   { background: var(--ps-cat-gold-tint);   color: var(--ps-cat-gold-ink); }
.ps-badge-cat-slate  { background: var(--ps-cat-slate-tint);  color: var(--ps-cat-slate-ink); }

/* ============ 4. TABEL, PANEL DAFTAR (D56) & DATATABLES ============
   <table class="table ps-table">: header & baris total --ps-chrome + teks putih, hairline --ps-divider,
   badan putih, angka tabular rata kanan (.ps-num di <td>/<th>). Total di <tfoot> (DataTables mengurutkan
   isi <tbody>, jadi tr.ps-total di tbody ikut teracak). */
.ps-table { color: var(--ps-text); background-color: #fff; }
.ps-table thead th,
.ps-table tfoot th, .ps-table tfoot td,
.ps-table tr.ps-total > * {
	background: var(--ps-chrome); color: #fff; border-color: var(--ps-chrome);
	font-size: var(--ps-fs-sm); font-weight: 700; vertical-align: middle;
}
.ps-table thead th { white-space: nowrap; }
.ps-table th, .ps-table td { padding: var(--ps-cell-py) var(--ps-cell-px); }
.ps-table tbody td { border-color: var(--ps-divider); vertical-align: middle; }
.ps-table tbody tr:not(.ps-total):hover > td { background: var(--ps-bg); }   /* baris total tidak ikut hover */
.ps-table tbody tr.ps-sorot > td { background: var(--ps-highlight); }       /* hasil cari */
.ps-table tbody tr.ps-selected > td { background: var(--ps-action-soft); }  /* baris terpilih */
.ps-table .ps-num { text-align: right; }
/* baris filter per-kolom di thead: latar surface, jadi teksnya gelap (bukan putih warisan header) */
.ps-table thead tr.ps-filter-row th {
	background: var(--ps-surface); color: var(--ps-text); border-color: var(--ps-divider);
	font-weight: 400; padding: var(--ps-sp-1) 6px;
}
/* keadaan kosong: <td colspan="…" class="ps-empty"><i class="fa fa-inbox"></i> Tidak ada data…</td> */
.ps-table td.ps-empty { text-align: center; color: var(--ps-text-muted); padding: var(--ps-sp-5) var(--ps-sp-4); }
.ps-compact .ps-table th, .ps-compact .ps-table td { font-size: var(--ps-fs-sm); }

/* ---- Halaman DAFTAR = SATU panel, tabel rata tepi (D56) ----
   <div class="ps-panel">
     <div class="ps-panel-band"> …ps-filter… </div>
     <table class="table ps-table">…</table>      (atau DataTables dengan dom di bawah)
   </div>
   DataTables: dom: "<'ps-panel-band ps-dt-bar'Bf><'ps-table-wrap't><'ps-panel-band ps-dt-bar'ip>"
   — pita toolbar/footer lewat opsi dom (bukan :nth-child, D56); gulir mendatar hanya di
   .ps-table-wrap sehingga toolbar & paginasi tidak ikut tergeser (frontend-conventions §5 #12).
   Sengaja TANPA overflow:hidden: daftar Kolom (colvis) & dropdown berposisi absolute harus bisa keluar
   dari panel saat tabel pendek (uji 2026-10-16: item terakhir terpotong). Sudut membulat di pita. */
.ps-panel { background: #fff; border: 1px solid var(--ps-border); border-radius: var(--ps-radius); margin-bottom: var(--ps-sp-4); }
.ps-panel-band { background: var(--ps-surface); padding: var(--ps-sp-3) var(--ps-sp-4); border-bottom: 1px solid var(--ps-divider); }
.ps-panel-band:last-child { border-bottom: 0; border-top: 1px solid var(--ps-divider); }
.ps-panel > .ps-panel-band:first-child,
.ps-panel > .dataTables_wrapper:first-child > .ps-panel-band:first-child { border-top-left-radius: calc(var(--ps-radius) - 1px); border-top-right-radius: calc(var(--ps-radius) - 1px); }
.ps-panel > .ps-panel-band:last-child,
.ps-panel > .dataTables_wrapper:last-child > .ps-panel-band:last-child { border-bottom-left-radius: calc(var(--ps-radius) - 1px); border-bottom-right-radius: calc(var(--ps-radius) - 1px); }
.ps-panel-band > .ps-filter { margin-bottom: 0; }
.ps-panel > .ps-table, .ps-panel .ps-table-wrap > .ps-table, .ps-panel .dataTables_wrapper .ps-table { margin: 0 !important; border: 0; }
.ps-table-wrap { overflow-x: auto; }
.ps-dt-bar { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--ps-sp-2) var(--ps-sp-4); }
/* Reset pita: spesifisitas div.dataTables_wrapper … sengaja dinaikkan karena css.php global memakai
   `div.dataTables_wrapper div.dataTables_filter { transform: translate(0,15px); height: 50px }` dan
   datatables.min.css memberi padding-top pada info/paginate — keduanya menggeser isi pita dari garis tengah. */
div.dataTables_wrapper .ps-dt-bar div.dataTables_filter,
div.dataTables_wrapper .ps-dt-bar div.dataTables_length,
div.dataTables_wrapper .ps-dt-bar div.dataTables_info,
div.dataTables_wrapper .ps-dt-bar div.dataTables_paginate {
	margin: 0; padding: 0; transform: none; height: auto; text-align: left;
	font-size: var(--ps-fs-body); color: var(--ps-text-muted);
}
div.dataTables_wrapper .ps-dt-bar div.dataTables_paginate ul.pagination { margin: 0; }
.ps-dt-bar .dataTables_filter label, .ps-dt-bar .dataTables_length label { margin-bottom: 0; }
/* kotak cari & jumlah baris: kontrol sekunder 40px. .custom-select: JANGAN timpa padding tanpa
   menyisakan ruang panah (D56 #4). Warna & fokus dari Bootstrap. */
.ps-dt-bar .dataTables_filter input { height: var(--ps-control-h-2); font-size: var(--ps-fs-body); }
.ps-dt-bar .dataTables_length select {
	height: var(--ps-control-h-2); font-size: var(--ps-fs-body);
	padding: 0 2rem 0 .7rem; background-position: right .65rem center; min-width: 88px;
}

/* ============ 5. KARTU / PANEL / MODAL ============ */
.ps-card       { background: var(--ps-surface); border: 1px solid var(--ps-border); border-radius: var(--ps-radius); padding: var(--ps-sp-4); }
.ps-card-plain { background: #fff;              border: 1px solid var(--ps-border); border-radius: var(--ps-radius); padding: var(--ps-sp-4); }
.ps-card-title { font-size: var(--ps-fs-h); font-weight: 700; line-height: 1.25; color: var(--ps-text); margin: 0 0 var(--ps-sp-2); }
fieldset.ps-fieldset { border: 1px solid var(--ps-action); border-radius: var(--ps-radius); padding: 6px var(--ps-sp-3) var(--ps-sp-3); }
fieldset.ps-fieldset > legend { font-size: var(--ps-fs-h); font-weight: 700; width: auto; padding: 0 10px; margin: 0; }
/* Modal: <div class="modal fade ps-modal">…  header surface, judul 18px, garis divider */
.ps-modal .modal-header { background: var(--ps-surface); border-bottom-color: var(--ps-divider); }
.ps-modal .modal-title { font-size: var(--ps-fs-h); font-weight: 700; line-height: 1.3; color: var(--ps-text); }
.ps-modal .modal-footer { border-top-color: var(--ps-divider); }

/* ============ 6. ISIAN & BARIS FILTER ============
   Label SELALU di atas input. <div class="ps-field"><label>..</label><input class="form-control"></div>
   Galat & wajib-isi memakai Bootstrap (is-invalid + invalid-feedback, text-danger) — warnanya sudah tema. */
.ps-field { margin-bottom: var(--ps-sp-4); }
.ps-field > label { display: block; font-size: var(--ps-fs-sm); font-weight: 600; color: var(--ps-text-muted); margin-bottom: var(--ps-sp-1); }
.ps-field .form-control,
.ps-field .custom-select { height: var(--ps-control-h); font-size: var(--ps-fs-body); }
.ps-field textarea.form-control { height: auto; }
.ps-field .form-text, .ps-field .invalid-feedback { font-size: var(--ps-fs-sm); }
/* select2 (tema bootstrap4) di dalam ps-field: tinggi 48px. Warnanya diselaraskan global di §8.
   select2-bootstrap4.min.css memakai height:…!important → !important WAJIB (D58, frontend-conventions §5 #18). */
.ps-field .select2-container--bootstrap4 .select2-selection--single { height: var(--ps-control-h) !important; }
.ps-field .select2-container--bootstrap4 .select2-selection--single .select2-selection__rendered {
	line-height: calc(var(--ps-control-h) - 2px); font-size: var(--ps-fs-body); color: var(--ps-text); padding-left: .75rem;
}
.ps-field .select2-container--bootstrap4 .select2-selection--single .select2-selection__arrow { height: calc(var(--ps-control-h) - 2px); }
/* teks galat/valid di atas latar surface (kartu, pita panel): token -ink agar tetap >= 4.5:1 (merah solid 4.1:1) */
:is(.ps-card, .ps-panel-band) .invalid-feedback { color: var(--ps-danger-ink); }
:is(.ps-card, .ps-panel-band) .valid-feedback   { color: var(--ps-success-ink); }

/* Baris filter: isian + tombol sejajar di bawah (tombol tidak turun karena hint/label).
   <div class="ps-filter"><div class="ps-field">…</div> … <div class="ps-filter-actions">[Tampilkan][Reset]</div></div>
   Hint (.form-text) jangan diletakkan di dalam baris filter — taruh di bawahnya. */
.ps-filter { display: flex; flex-wrap: wrap; align-items: flex-end; gap: var(--ps-sp-3) var(--ps-sp-4); margin-bottom: var(--ps-sp-4); }
.ps-filter > .ps-field { flex: 1 1 200px; margin-bottom: 0; }
.ps-filter > .ps-filter-actions { display: flex; flex-wrap: wrap; gap: var(--ps-sp-2); }

/* ============ 7. JUDUL HALAMAN ============ */
.ps-page-head {
	display: flex; flex-wrap: wrap; align-items: flex-start; justify-content: space-between; gap: 14px;
	margin-bottom: 18px; padding-left: 14px; border-left: 4px solid var(--ps-action);
}
.ps-page-head h1, .ps-page-head h2 { font-size: var(--ps-fs-title); font-weight: 800; line-height: 1.2; color: var(--ps-text); margin: 0 0 4px; }
.ps-page-head p { font-size: var(--ps-fs-body); color: var(--ps-text-muted); margin: 0; max-width: 70ch; }
.ps-page-head .ps-actions { display: flex; flex-wrap: wrap; gap: 6px; }

/* ============ 8. PENYELARASAN GLOBAL — komponen di luar build Bootstrap (BUKAN opt-in) ============
   Satu-satunya bagian file ini yang berlaku ke semua halaman. Isinya hanya WARNA, untuk komponen pihak ketiga
   yang menulis warnanya sendiri sehingga tidak ikut palet tema di build Bootstrap (keputusan PM 2026-10-16:
   warna tema otomatis terimplementasi tanpa merombak kode). Nilai = palet tema; tidak ada ukuran/tata letak. */

/* Sidebar SB-Admin: navbar ber-bg-dark kini navy (palet tema), tetapi sb-admin.min.css menulis sidebar #343a40
   sendiri → chrome dua warna. Disamakan. (Penanda menu aktif emas milik project-tema TIDAK dibawa — bug #1 review.) */
#mainNav.navbar-dark .navbar-collapse .navbar-sidenav { background: var(--ps-chrome); }
#mainNav.navbar-dark .navbar-collapse .navbar-sidenav > .nav-item .sidenav-second-level,
#mainNav.navbar-dark .navbar-collapse .navbar-sidenav > .nav-item .sidenav-third-level { background: var(--ps-chrome-2); }
#mainNav.navbar-dark .navbar-collapse .navbar-sidenav li.active a { background-color: var(--ps-chrome-2); }
#mainNav.fixed-top.navbar-dark .sidenav-toggler { background-color: var(--ps-brand-navy); }
.scroll-to-top { background: rgba(30, 42, 58, .6); }   /* --ps-chrome 60% */
.scroll-to-top:hover { background: var(--ps-chrome); }

/* select2 tema bootstrap4 (±272 view): select2-bootstrap4.min.css menulis border #ced4da, fokus #80bdff dan sorotan
   opsi #007bff sendiri. Disamakan dengan .form-control dari build tema: border --ps-border-control, fokus = border
   lighten(primary, 25%) + cincin primary .25 (nilai persis hasil build), sorotan opsi = biru tema. */
.select2-container--bootstrap4 .select2-selection,
.select2-container--bootstrap4 .select2-dropdown,
.select2-search--dropdown .select2-search__field { border-color: var(--ps-border-control); }
.select2-container--bootstrap4.select2-container--focus .select2-selection,
.select2-container--bootstrap4.select2-container--open .select2-selection {
	border-color: rgb(95, 144, 231);                      /* = .form-control:focus build tema */
	box-shadow: 0 0 0 .2rem rgba(26, 79, 173, .25);       /* --ps-action .25 */
}
.select2-container--bootstrap4 .select2-results__option--highlighted,
.select2-container--bootstrap4 .select2-results__option--highlighted.select2-results__option[aria-selected="true"] { color: #fff; background-color: var(--ps-action); }
