{"id":9,"date":"2026-08-28T07:02:14","date_gmt":"2026-08-28T07:02:14","guid":{"rendered":"https:\/\/sipadutalbar.com\/sdn2selaawi\/?page_id=9"},"modified":"2026-09-10T03:12:47","modified_gmt":"2026-09-10T03:12:47","slug":"home","status":"publish","type":"page","link":"https:\/\/sipadutalbar.com\/sdn2selaawi\/","title":{"rendered":"Home"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"9\" class=\"elementor elementor-9\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-d880e38 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"d880e38\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-d91c228\" data-id=\"d91c228\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-3728564 elementor-widget elementor-widget-html\" data-id=\"3728564\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- KODE LENGKAP - APLIKASI PRODUKSI SDN 2 SELAAWI (FORMAT PRESISI SEPERTI CONTOH PDF) -->\r\n<div class=\"fin-dashboard-wrapper\">\r\n    \r\n    <!-- 1. GERBANG KEAMANAN: VERIFIKASI KEHADIRAN -->\r\n    <div id=\"securityGateModal\" class=\"security-gate-container\">\r\n        <div class=\"security-card\">\r\n            <div class=\"sec-brand-badge\">SDN 2 SELAAWI \u2022 T.A. 2026<\/div>\r\n            <div class=\"sec-logo-icon\">\ud83d\udd10<\/div>\r\n            <h3 id=\"secCardTitle\">Verifikasi Kehadiran<\/h3>\r\n            <p id=\"secCardDesc\">Gunakan PIN Default <b>2026<\/b> untuk login pertama, lalu ubah PIN Anda. Jika lupa, hubungi Super Admin.<\/p>\r\n            \r\n            <div id=\"pinFormBox\" class=\"sec-form-box\">\r\n                <input type=\"password\" id=\"pinInput\" placeholder=\"\u2022\u2022\u2022\u2022\" maxlength=\"4\" inputmode=\"numeric\" class=\"pin-input-field\" autocomplete=\"off\">\r\n                <button type=\"button\" class=\"btn-unlock\" onclick=\"verifyPinCode()\">Masuk ke Sistem<\/button>\r\n                <div id=\"pinErrorMsg\" style=\"color: #dc2626; font-size: 12px; font-weight: 600; margin-top: 8px; display: none; text-align: center;\">\u274c PIN Akses Salah. Silakan coba lagi.<\/div>\r\n                \r\n                <div style=\"margin-top: 12px; text-align: center;\">\r\n                    <a href=\"javascript:void(0);\" onclick=\"showResetSection()\" style=\"font-size: 11.5px; color: #0b5124; text-decoration: underline; font-weight: 600;\">Lupa PIN Verifikator? (Hubungi Super Admin)<\/a>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div id=\"resetFormBox\" class=\"sec-form-box\" style=\"display: none; background: #fff5f5; border-color: #feb2b2;\">\r\n                <p style=\"color: #c53030; font-size: 11.5px; font-weight: bold; margin-bottom: 8px;\">\ud83d\udee1\ufe0f Panel Reset Super Admin<\/p>\r\n                <input type=\"password\" id=\"superAdminPinInput\" placeholder=\"PIN Super Admin\" maxlength=\"4\" inputmode=\"numeric\" class=\"pin-input-field\" style=\"border-color: #feb2b2;\" autocomplete=\"off\">\r\n                <button type=\"button\" class=\"btn-unlock\" style=\"background: #c53030;\" onclick=\"executeResetPin()\">Reset PIN Perangkat<\/button>\r\n                <div id=\"resetErrorMsg\" style=\"color: #c53030; font-size: 11.5px; font-weight: bold; margin-top: 6px; display: none; text-align: center;\">\u274c PIN Super Admin Salah!<\/div>\r\n                <div style=\"margin-top: 10px; text-align: center;\">\r\n                    <a href=\"javascript:void(0);\" onclick=\"hideResetSection()\" style=\"font-size: 11.5px; color: #475569; text-decoration: underline;\">\u00ab Kembali ke Login PIN<\/a>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div style=\"margin-top: 15px; border-top: 1px solid #e2e8f0; padding-top: 12px;\">\r\n                <button type=\"button\" onclick=\"openGuideModal()\" style=\"width: 100%; background: #f0fdf4; color: #0b5124; border: 1.5px solid #bbf7d0; padding: 10px; border-radius: 8px; font-weight: 600; font-size: 12.5px; cursor: pointer; display: flex; align-items: center; justify-content: center; gap: 6px;\">\r\n                    \ud83d\udcd6 Buka Petunjuk Penggunaan\r\n                <\/button>\r\n            <\/div>\r\n\r\n            <div class=\"sec-footer-note\">\r\n                \ud83d\udca1 <i>Tips: Gunakan PIN Default <b>2026<\/b> untuk akses pertama, lalu tetapkan PIN pribadi Anda.<\/i>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <!-- MODAL PETUNJUK PENGGUNAAN -->\r\n    <div id=\"guideModal\" class=\"camera-modal no-print\" style=\"display:none;\">\r\n        <div class=\"camera-box\" style=\"max-width: 450px; text-align: left; max-height: 85vh; overflow-y: auto;\">\r\n            <div style=\"display: flex; justify-content: space-between; align-items: center; border-bottom: 2px solid #0b5124; padding-bottom: 8px; margin-bottom: 12px;\">\r\n                <h4 style=\"margin:0; font-size: 16px; color: #0b5124;\">\ud83d\udcdc PETUNJUK PENGGUNAAN<\/h4>\r\n                <button type=\"button\" onclick=\"closeGuideModal()\" style=\"background: #dc2626; border: none; color: white; width: 26px; height: 26px; border-radius: 50%; font-weight: bold; cursor: pointer;\">\u00d7<\/button>\r\n            <\/div>\r\n            \r\n            <ol style=\"padding-left: 18px; font-size: 12.5px; color: #334155; line-height: 1.5; margin: 0 0 15px 0;\">\r\n                <li style=\"margin-bottom: 8px;\">Saat pertama kali membuka tautan, masukkan PIN Default <b>2026<\/b>. Anda disarankan segera mengganti dan mempermanenkan 4 digit PIN pribadi Anda sendiri di perangkat tersebut.<\/li>\r\n                <li style=\"margin-bottom: 8px;\">Waktu pengisian absensi harian <b>ditutup pukul 08.00 hingga 15.15 WIB<\/b>.<\/li>\r\n                <li style=\"margin-bottom: 8px;\">Jika database masih kosong, tugas pertama Anda adalah mendaftarkan seluruh pekerja ke dalam sistem melalui tab <b>Kelola Pekerja<\/b>.<\/li>\r\n                <li style=\"margin-bottom: 8px;\">Centang nama pekerja yang hadir, lalu ketuk tombol hijau <b>Ambil Foto Bersama Realtime & Kirim Absen<\/b>.<\/li>\r\n                <li style=\"margin-bottom: 8px;\">Setelah terkirim, kartu rekapitulasi dengan animasi elegan dan kata motivasi harian akan muncul otomatis.<\/li>\r\n                <li>Menu pengelolaan keuangan dan cetak dokumen rekapitulasi dikhususkan untuk Super Admin\/Bendahara.<\/li>\r\n            <\/ol>\r\n\r\n            <button type=\"button\" class=\"btn-snap\" onclick=\"closeGuideModal()\" style=\"width: 100%; background: #0b5124; padding: 10px; border-radius: 6px; color: white; font-weight: bold; cursor: pointer; border: none;\">Saya Mengerti & Tutup<\/button>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <!-- 2. APLIKASI UTAMA -->\r\n    <div id=\"mainAppContent\" style=\"display: none;\">\r\n        <div class=\"fin-topbar no-print\">\r\n            <div class=\"fin-brand\">\r\n                <div class=\"fin-logo-icon-app\">\ud83d\udc77<\/div>\r\n                <div>\r\n                    <h2>App. Upah Pegawai<\/h2>\r\n                    <p>Revitalisasi SDN 2 SELAAWI<\/p>\r\n                <\/div>\r\n            <\/div>\r\n            <div style=\"display: flex; align-items: center; gap: 8px;\">\r\n                <div class=\"fin-badge-org\" id=\"userRoleBadge\">VERIFIED<\/div>\r\n                <button onclick=\"lockAppAgain()\" title=\"Keluar \/ Kunci Aplikasi\" style=\"background: #dc2626; border: none; color: white; padding: 6px 12px; border-radius: 6px; cursor: pointer; font-size: 11.5px; font-weight: bold; display: flex; align-items: center; gap: 4px;\">\ud83d\udeaa Logout<\/button>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <!-- TAB NAVIGASI UTAMA -->\r\n        <div class=\"nav-tabs-bar no-print\">\r\n            <button type=\"button\" class=\"tab-btn active\" onclick=\"switchTab('absenTab')\">\ud83d\udcc5 Absensi Harian<\/button>\r\n            <button type=\"button\" class=\"tab-btn\" onclick=\"switchTab('masterTab')\">\ud83d\udee1\ufe0f Kelola Pekerja<\/button>\r\n            <button type=\"button\" id=\"tabFinanceBtn\" class=\"tab-btn\" onclick=\"switchTab('financeTab')\" style=\"display: none; background: #fef08a; border-color: #ca8a04; color: #713f12;\">\ud83d\udcb0 Dokumen Keuangan<\/button>\r\n        <\/div>\r\n\r\n        <!-- TAB 1: ABSENSI HARIAN -->\r\n        <div id=\"absenTab\" class=\"tab-content\">\r\n            <div class=\"fin-search-card no-print\">\r\n                <div style=\"display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; flex-wrap: wrap; gap: 8px;\">\r\n                    <h4 style=\"margin:0; font-size: 15px;\">Pencatatan Kehadiran Harian<\/h4>\r\n                    <span id=\"realtimeDateBadge\" style=\"background:#e6f4ea; color:#0b5124; padding:5px 12px; border-radius:20px; font-weight:600; font-size:12px;\">\ud83d\udcc5 Memuat Tanggal...<\/span>\r\n                <\/div>\r\n                \r\n                <div id=\"statusAbsenBanner\" style=\"padding: 10px 14px; border-radius: 8px; font-size: 12.5px; font-weight: 600; margin-bottom: 12px; display: none;\"><\/div>\r\n\r\n                <p style=\"font-size:12.5px; color:#64748b; line-height: 1.4;\">Ceklis pekerja yang hadir di lokasi, tanggal terkunci otomatis, lalu ambil 1 foto bersama sebagai bukti kehadiran.<\/p>\r\n\r\n                <div id=\"checkboxWorkerList\" style=\"background:#f8fafc; padding:10px; border-radius:8px; border:1px solid #e2e8f0; max-height:220px; overflow-y:auto; margin-bottom:15px;\">\r\n                    <p style=\"font-size: 13px;\"><i>Memuat daftar pekerja...<\/i><\/p>\r\n                <\/div>\r\n\r\n                <button type=\"button\" id=\"btnBukaKamera\" class=\"btn-load\" onclick=\"openGroupCamera()\" style=\"width:100%; padding:14px; font-size:14px; background:#25d366; cursor:pointer; border:none; border-radius:8px; color:white; font-weight:bold;\">\r\n                    \ud83d\udcf7 Ambil Foto Bersama Realtime & Kirim Absen\r\n                <\/button>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <!-- TAB KEUANGAN KHUSUS SUPER ADMIN \/ BENDAHARA -->\r\n        <div id=\"financeTab\" class=\"tab-content\" style=\"display:none;\">\r\n            <div class=\"fin-search-card no-print\" style=\"background: #fefce8; border-color: #fde047;\">\r\n                <h4 style=\"color: #713f12; font-size: 15px;\">\ud83d\udcb0 Panel Dokumen Keuangan & SPPU (Akses Admin)<\/h4>\r\n                <p style=\"font-size: 12.5px; color: #854d0e; line-height: 1.4;\">Pilih tanggal transaksi dari dropdown berikut untuk merekapitulasi Surat Perintah Pengeluaran Uang (SPPU) dan Kwitansi.<\/p>\r\n                \r\n                <div class=\"fin-input-row\" style=\"display: flex; gap: 8px; flex-wrap: wrap;\">\r\n                    <select id=\"rekapTanggalDropdown\" style=\"flex:1; min-width: 180px; padding:10px; border:1px solid #facc15; border-radius:6px; font-size: 13px; background: white; cursor: pointer;\">\r\n                        <option value=\"\">-- Memuat Data Absen dari Database... --<\/option>\r\n                    <\/select>\r\n                    <button class=\"btn-load\" onclick=\"loadKwitansiRekap()\" style=\"padding: 10px 15px; background: #ca8a04; color: white; border: none; border-radius: 6px; font-weight: bold; cursor: pointer;\">Tampilkan Dokumen<\/button>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <!-- Lembar Dokumen A4 Responsive Container (Gaya Resmi PDF BOSP) -->\r\n            <div class=\"kwitansi-container-outer\">\r\n                <div id=\"kwitansiCard\" class=\"kwitansi-card-a4\" style=\"display: none;\">\r\n                    \r\n                    <!-- BAGIAN 1: SURAT PERINTAH PENGELUARAN DANA -->\r\n                    <div class=\"surat-perintah-section\">\r\n                        <div class=\"sp-header\">\r\n                            <h4>PEMERINTAH KABUPATEN GARUT - DINAS PENDIDIKAN<\/h4>\r\n                            <h3>SDN 2 SELAAWI<\/h3>\r\n                            <p>Kampung Kadunenggang, Kec. Talegong, Kab. Garut, Prov. Jawa Barat | NPSN: 20226706 <\/p>\r\n                            <div class=\"sp-title-box\">SURAT PERINTAH PENGELUARAN DANA P2SP<\/div>\r\n                            <div class=\"sp-subtitle\">Nomor: SPPD\/<span id=\"resNoBuktiSP\">-<\/span>\/P2SP\/IX\/2026<\/div>\r\n                        <\/div>\r\n                        <div class=\"sp-body\">\r\n                            <p>Kepala Sekolah Dasar Negeri 1 Mekarwangi Kabupaten Garut, selaku Pengguna Anggaran Program Revitalisasi Sekolah, dengan ini memerintahkan Bendahara untuk membayarkan\/mengeluarkan sejumlah uang kepada penerima berdasarkan rincian berikut:<\/p>\r\n                            \r\n                            <table class=\"sp-table\">\r\n                                <tr>\r\n                                    <td width=\"28%\"><b>Diberikan Kepada<\/b><\/td>\r\n                                    <td width=\"2%\">:<\/td>\r\n                                    <td><b>Suparman<\/b> (Pihak Ketiga \/ Kepala Tukang)<\/td>\r\n                                <\/tr>\r\n                                <tr>\r\n                                    <td><b>Jumlah Nominal<\/b><\/td>\r\n                                    <td>:<\/td>\r\n                                    <td><b id=\"resNominalSPText\">-<\/b><\/td>\r\n                                <\/tr>\r\n                                <tr>\r\n                                    <td><b>Untuk Keperluan<\/b><\/td>\r\n                                    <td>:<\/td>\r\n                                    <td><span id=\"resUraianSpText\">-<\/span><\/td>\r\n                                <\/tr>\r\n                                <tr>\r\n                                    <td><b>Kode Rekening<\/b><\/td>\r\n                                    <td>:<\/td>\r\n                                    <td>5.1.02.04.01.0003 (Belanja Jasa Tenaga Kerja \/ Upah Harian)<\/td>\r\n                                <\/tr>\r\n                            <\/table>\r\n                            \r\n                            <p style=\"margin-top: 6px; font-size: 13px;\">Demikian Surat Perintah Pengeluaran Dana ini dibuat untuk dilaksanakan dengan penuh tanggung jawab sesuai ketentuan perundang-undangan yang berlaku.<\/p>\r\n                        <\/div>\r\n                        \r\n                        <div class=\"sp-sign-area-single\">\r\n                            <div class=\"sign-box-single\">\r\n                                <p>Talegong, <span id=\"resTanggalSP\">-<\/span><br>Kepala Sekolah,<\/p>\r\n                                <div class=\"space-sign\"><\/div>\r\n                                <p><b>Lilis Komariah, S.Pd.I<\/b><br>NIP. 197208042008012006<\/p>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n\r\n                    <!-- GARIS POTONG PEMBATAS -->\r\n                    <div class=\"section-separator\"><span>\u2702 - - - - - POTONG DI SINI UNTUK LAMPIRAN SPJ - - - - - \u2702<\/span><\/div>\r\n\r\n                    <!-- BAGIAN 2: KWITANSI PEMBAYARAN & BUKTI KAS -->\r\n                    <div class=\"kwitansi-section\">\r\n                        <div class=\"kwitansi-header\">\r\n                            <div>\r\n                                <h2 style=\"margin:0; font-size: 15px; font-weight:bold; color:#0b5124;\">KWITANSI PEMBAYARAN<\/h2>\r\n                                <p style=\"margin:2px 0 0 0; font-size: 11px;\">Sumber Dana: <b>Program Revitalisasi Sekolah (P2SP)<\/b><\/p>\r\n                            <\/div>\r\n                            <div style=\"text-align: right;\">\r\n                                <span class=\"badge-bosp\">BUKTI KAS: <span id=\"resNoBukti\">-<\/span><\/span>\r\n                            <\/div>\r\n                        <\/div>\r\n                        \r\n                        <div class=\"kwitansi-body\">\r\n                            <table class=\"sp-table\" style=\"margin: 0;\">\r\n                                <tr>\r\n                                    <td width=\"28%\"><b>Sudah Terima Dari<\/b><\/td>\r\n                                    <td width=\"2%\">:<\/td>\r\n                                    <td>Bendahara Program Revitalisasi SDN 2 SELAAWI<\/td>\r\n                                <\/tr>\r\n                                <tr>\r\n                                    <td><b>Jumlah Uang<\/b><\/td>\r\n                                    <td>:<\/td>\r\n                                    <td><span class=\"nominal-highlight\" id=\"resNominal\">-<\/span><\/td>\r\n                                <\/tr>\r\n                                <tr>\r\n                                    <td><b>Terbilang<\/b><\/td>\r\n                                    <td>:<\/td>\r\n                                    <td><span class=\"terbilang-text\" id=\"resTerbilang\">-<\/span><\/td>\r\n                                <\/tr>\r\n                                <tr>\r\n                                    <td><b>Untuk Pembayaran<\/b><\/td>\r\n                                    <td>:<\/td>\r\n                                    <td><b id=\"resUraianKwitansi\">-<\/b><\/td>\r\n                                <\/tr>\r\n                            <\/table>\r\n                        <\/div>\r\n\r\n                        <div class=\"kwitansi-footer\">\r\n                            <div class=\"meta-date-right\">Talegong, <span id=\"resTanggal\">7 September 2026<\/span><\/div>\r\n                            <div class=\"signature-section-3col\">\r\n                                <div class=\"sign-box\">\r\n                                    <p>Menyetujui,<br>Kepala Sekolah<\/p>\r\n                                    <div class=\"space-sign-top\"><\/div>\r\n                                    <p><b>Lilis Komariah, S.Pd.I<\/b><br>NIP. 197208042008012006<\/p>\r\n                                <\/div>\r\n                                <div class=\"sign-box\">\r\n                                    <p>Lunas Bayar,<br>Bendahara<\/p>\r\n                                    <div class=\"space-sign-top\"><\/div>\r\n                                    <p><b>Eti Maryati, S.Pd.SD<\/b><br>NIP. 198303012014101001<\/p>\r\n                                <\/div>\r\n                                <div class=\"sign-box\">\r\n                                    <p>Penerima Dana,<br>Pihak Penerima \/ Rekanan<\/p>\r\n                                    <div class=\"space-sign-top\"><\/div>\r\n                                    <p><b>Suparman<\/b><br><span>Kepala Tukang<\/span><\/p>\r\n                                <\/div>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n\r\n                    <!-- TOMBOL AKSI CETAK -->\r\n                    <div class=\"action-print no-print\" style=\"margin-top:15px; display:flex; gap:10px; justify-content:center; flex-wrap: wrap;\">\r\n                        <button onclick=\"window.print()\" class=\"btn-action btn-print\" style=\"flex: 1; min-width: 140px; padding: 10px; background: #0b5124; color: white; border: none; border-radius: 6px; font-weight: bold; cursor: pointer;\">\ud83d\udda8\ufe0f Cetak PDF \/ Print<\/button>\r\n                        <button onclick=\"kirimWhatsApp()\" class=\"btn-action btn-wa\" style=\"flex: 1; min-width: 140px; background:#25d366; border:none; padding:10px; border-radius:8px; color:white; font-weight:600; cursor:pointer;\">\ud83d\udcac Kirim WhatsApp<\/button>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <!-- TAB 2: KELOLA MASTER PEKERJA -->\r\n        <div id=\"masterTab\" class=\"tab-content\" style=\"display:none;\">\r\n            <div class=\"verif-container\" style=\"background:#fff; padding:15px; border-radius:12px; border:1px solid #e2e8f0;\">\r\n                <h4 style=\"margin-top:0; color:#0b5124; font-size: 15px;\">+ Tambah Calon Pekerja Baru<\/h4>\r\n                <form id=\"workerForm\" onsubmit=\"submitWorker(event)\" class=\"verif-form\" style=\"margin-bottom:20px;\">\r\n                    <div class=\"form-group\" style=\"margin-bottom:10px;\">\r\n                        <label style=\"font-weight:600; font-size:12.5px;\">NIK (16 Digit)<\/label>\r\n                        <input type=\"text\" id=\"nik\" placeholder=\"Nomor KTP pekerja...\" required pattern=\"[0-9]{16}\" style=\"width:100%; padding:10px; border:1px solid #cbd5e1; border-radius:6px; font-size: 13px;\">\r\n                    <\/div>\r\n                    <div class=\"form-group\" style=\"margin-bottom:10px;\">\r\n                        <label style=\"font-weight:600; font-size:12.5px;\">Nama Lengkap<\/label>\r\n                        <input type=\"text\" id=\"nama\" placeholder=\"Sesuai KTP...\" required style=\"width:100%; padding:10px; border:1px solid #cbd5e1; border-radius:6px; font-size: 13px;\">\r\n                    <\/div>\r\n                    <div class=\"form-group\" style=\"margin-bottom:10px;\">\r\n                        <label style=\"font-weight:600; font-size:12.5px;\">Peran \/ Posisi<\/label>\r\n                        <select id=\"peran\" required style=\"width:100%; padding:10px; border:1px solid #cbd5e1; border-radius:6px; font-size: 13px;\">\r\n                            <option value=\"\">-- Pilih Peran --<\/option>\r\n                            <option value=\"Tukang\">Tukang (Rp 140.000 \/ hari)<\/option>\r\n                            <option value=\"Laden\">Laden \/ Pembantu (Rp 110.000 \/ hari)<\/option>\r\n                        <\/select>\r\n                    <\/div>\r\n                    <div class=\"form-group\" style=\"margin-bottom:15px;\">\r\n                        <label style=\"font-weight:600; font-size:12.5px;\">Upload Foto KTP Asli<\/label>\r\n                        <input type=\"file\" id=\"ktpFile\" accept=\"image\/*\" required style=\"width:100%; font-size: 12px;\">\r\n                    <\/div>\r\n                    <button type=\"submit\" id=\"btnSubmit\" class=\"btn-lock\" style=\"background:#0b5124; color:white; border:none; width:100%; padding:12px; font-weight:bold; border-radius:6px; cursor:pointer; font-size: 13.5px;\">\ud83d\udd12 Kunci & Daftarkan Pekerja<\/button>\r\n                <\/form>\r\n                <div id=\"loadingMsg\" style=\"display:none; text-align:center; font-weight:bold; color:#0b5124; margin-bottom:15px; font-size: 13px;\">\u23f3 Menyimpan data ke server...<\/div>\r\n                <div id=\"responseMsg\" style=\"display:none; margin-bottom:15px; padding:10px; border-radius:6px; text-align:center; font-weight:bold; font-size: 13px;\"><\/div>\r\n\r\n                <h4 style=\"color:#1e293b; margin-bottom:10px; font-size: 15px;\">\ud83d\udccb Daftar Pekerja Aktif di Database<\/h4>\r\n                <div id=\"activeWorkersList\" style=\"border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden;\">\r\n                    <p style=\"padding:15px; text-align:center; color:#64748b; margin:0; font-size: 13px;\">Memuat data pekerja...<\/p>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <!-- MODAL KAMERA FOTO BERSAMA -->\r\n        <div id=\"cameraModal\" class=\"camera-modal no-print\" style=\"display:none;\">\r\n            <div class=\"camera-box\">\r\n                <h4 style=\"font-size: 15px; margin-top:0;\">Bukti Foto Bersama Di Lokasi<\/h4>\r\n                <p style=\"font-size:11.5px; color:#64748b; margin-bottom:10px;\">Pastikan semua wajah pekerja terlihat jelas dalam satu frame.<\/p>\r\n                <video id=\"videoElement\" autoplay playsinline width=\"100%\" style=\"border-radius:8px; background:#000; max-height:240px; object-fit: cover;\"><\/video>\r\n                <canvas id=\"canvasElement\" style=\"display:none;\"><\/canvas>\r\n                <div class=\"camera-actions\">\r\n                    <button type=\"button\" class=\"btn-snap\" onclick=\"captureAndSubmitGroup()\">\u2705 Selesai & Kirim<\/button>\r\n                    <button type=\"button\" class=\"btn-close\" onclick=\"closeCamera()\">Batal<\/button>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <!-- KARTU INFORMASI PROFESIONAL & REKAP KEHADIRAN -->\r\n    <div id=\"customModalOverlay\" class=\"custom-modal-overlay no-print\" style=\"display: none;\">\r\n        <div class=\"custom-modal-card\" id=\"customModalCardInner\">\r\n            <div id=\"modalIcon\" class=\"modal-icon-container\">\u2139\ufe0f<\/div>\r\n            <h3 id=\"modalTitle\">Informasi Sistem<\/h3>\r\n            <div id=\"modalMessage\">Pesan sistem...<\/div>\r\n            <div class=\"modal-btn-container\" id=\"modalBtnContainer\">\r\n                <button type=\"button\" id=\"modalOkBtn\" class=\"modal-btn-ok\" onclick=\"closeCustomModal()\">Mengerti<\/button>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\r\n\r\n<style>\r\n\/* CSS Styling *\/\r\n.security-gate-container { width: 100%; max-width: 380px; margin: 50px auto; padding: 15px; box-sizing: border-box; }\r\n.security-card { background: #ffffff; padding: 30px 20px; border-radius: 16px; box-shadow: 0 10px 35px rgba(0,0,0,0.08); border: 1px solid #e2e8f0; text-align: center; font-family: 'Segoe UI', Tahoma, sans-serif; }\r\n.sec-brand-badge { background: #f1f5f9; color: #475569; display: inline-block; padding: 4px 10px; border-radius: 20px; font-size: 10px; font-weight: 700; margin-bottom: 15px; letter-spacing: 0.5px; }\r\n.sec-logo-icon { font-size: 32px; background: #e6f4ea; width: 60px; height: 60px; line-height: 60px; border-radius: 50%; margin: 0 auto 12px auto; }\r\n.security-card h3 { margin: 0 0 5px 0; color: #0b5124; font-size: 18px; font-weight: 700; }\r\n.security-card p { margin: 0 0 20px 0; font-size: 12.5px; color: #64748b; line-height: 1.4; }\r\n.sec-form-box { margin-bottom: 10px; }\r\n.pin-input-field { width: 100%; padding: 14px; font-size: 20px; text-align: center; letter-spacing: 10px; border: 1.5px solid #cbd5e1; border-radius: 10px; box-sizing: border-box; background: #f8fafc; margin-bottom: 12px; outline: none; }\r\n.pin-input-field:focus { border-color: #0b5124; background: #fff; }\r\n.btn-unlock { width: 100%; background: #0b5124; color: white; border: none; padding: 13px; font-size: 14px; font-weight: bold; border-radius: 10px; cursor: pointer; transition: background 0.2s; }\r\n.btn-unlock:hover { background: #083d1c; }\r\n.sec-footer-note { font-size: 11px; color: #94a3b8; line-height: 1.3; margin-top: 12px; }\r\n\r\n.fin-dashboard-wrapper { width: 100%; max-width: 600px; margin: 0 auto; font-family: 'Segoe UI', Tahoma, sans-serif; color: #2c3e50; padding: 5px; box-sizing: border-box; }\r\n.fin-topbar { background: linear-gradient(135deg, #0b5124 0%, #136a32 100%); color: white; padding: 14px 16px; border-radius: 10px; display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; }\r\n.fin-brand { display: flex; align-items: center; gap: 10px; }\r\n.fin-logo-icon-app { font-size: 22px; background: rgba(255,255,255,0.15); padding: 6px 10px; border-radius: 8px; }\r\n.fin-brand h2 { margin: 0; font-size: 14.5px; font-weight: 700; }\r\n.fin-brand p { margin: 2px 0 0 0; font-size: 10.5px; color: #d1e7dd; }\r\n.fin-badge-org { background: rgba(255,255,255,0.2); padding: 4px 8px; border-radius: 20px; font-size: 9.5px; font-weight: 600; }\r\n.nav-tabs-bar { display: flex; gap: 8px; margin-bottom: 15px; flex-wrap: wrap; }\r\n.tab-btn { flex: 1; min-width: 120px; padding: 10px; border: 1.5px solid #0b5124; background: white; color: #0b5124; font-weight: bold; border-radius: 8px; cursor: pointer; font-size: 12.5px; transition: all 0.2s; }\r\n.tab-btn.active { background: #0b5124; color: white; }\r\n.fin-search-card { background: #ffffff; padding: 15px; border-radius: 10px; box-shadow: 0 3px 12px rgba(0,0,0,0.05); border: 1px solid #e2e8f0; }\r\n.worker-checkbox-item { display: flex; align-items: center; gap: 10px; padding: 8px; background: white; border: 1px solid #e2e8f0; border-radius: 6px; margin-bottom: 6px; font-size: 13px; }\r\n.camera-modal { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.75); z-index: 9999; display: flex; align-items: center; justify-content: center; padding: 15px; box-sizing: border-box; }\r\n.camera-box { background: white; padding: 15px; border-radius: 12px; width: 100%; max-width: 380px; text-align: center; }\r\n.camera-actions { display: flex; gap: 10px; margin-top: 12px; }\r\n.btn-snap { flex: 1; background: #0b5124; color: white; border: none; padding: 10px; border-radius: 6px; font-weight: bold; cursor: pointer; font-size: 13px; }\r\n.btn-close { background: #dc2626; color: white; border: none; padding: 10px; border-radius: 6px; font-weight: bold; cursor: pointer; font-size: 13px; }\r\n.worker-row-item { display: flex; justify-content: space-between; align-items: center; padding: 10px 12px; border-bottom: 1px solid #e2e8f0; background: white; font-size: 12.5px; }\r\n.btn-del { background: #fee2e2; color: #dc2626; border: 1px solid #fecaca; padding: 5px 8px; border-radius: 5px; font-weight: 600; cursor: pointer; font-size: 11px; }\r\n\r\n\/* STYLING KARTU INFORMASI & EFEK ANIMASI TRANSISI HALUS *\/\r\n.custom-modal-overlay {\r\n    position: fixed;\r\n    top: 0; left: 0; width: 100%; height: 100%;\r\n    background: rgba(15, 23, 42, 0.7);\r\n    backdrop-filter: blur(6px);\r\n    z-index: 99999;\r\n    display: flex; align-items: center; justify-content: center;\r\n    padding: 15px; box-sizing: border-box;\r\n    opacity: 0; animation: fadeInOverlay 0.3s ease forwards;\r\n}\r\n@keyframes fadeInOverlay {\r\n    to { opacity: 1; }\r\n}\r\n.custom-modal-card {\r\n    background: #ffffff; width: 100%; max-width: 420px;\r\n    padding: 25px 20px; border-radius: 18px; text-align: center;\r\n    box-shadow: 0 25px 50px rgba(0, 0, 0, 0.3);\r\n    border: 1px solid #e2e8f0;\r\n    transform: translateY(30px) scale(0.9); opacity: 0;\r\n    animation: slideUpModal 0.4s cubic-bezier(0.16, 1, 0.3, 1) forwards;\r\n}\r\n@keyframes slideUpModal {\r\n    to { transform: translateY(0) scale(1); opacity: 1; }\r\n}\r\n.modal-icon-container { font-size: 42px; margin-bottom: 8px; animation: bounceIcon 1.2s infinite alternate ease-in-out; }\r\n@keyframes bounceIcon {\r\n    from { transform: translateY(0); }\r\n    to { transform: translateY(-8px); }\r\n}\r\n.custom-modal-card h3 { margin: 0 0 8px 0; font-size: 19px; font-weight: 700; color: #0b5124; }\r\n.custom-modal-card div#modalMessage { margin: 0 0 20px 0; font-size: 13.5px; color: #475569; line-height: 1.5; text-align: left; }\r\n.modal-btn-container { display: flex; gap: 10px; justify-content: center; }\r\n.modal-btn-ok { background: #0b5124; color: white; border: none; width: 100%; padding: 12px; font-size: 14px; font-weight: 600; border-radius: 10px; cursor: pointer; box-shadow: 0 4px 12px rgba(11, 81, 36, 0.2); transition: background 0.2s, transform 0.1s; }\r\n.modal-btn-ok:hover { background: #083d1c; transform: translateY(-1px); }\r\n\r\n\/* OPTIMASI UKURAN A4, FONT RESMI & RUANG TANDA TANGAN LUAS (GAYA PDF BOSP) *\/\r\n.kwitansi-container-outer { width: 100%; overflow-x: auto; padding-top: 10px; }\r\n.kwitansi-card-a4 { background: #ffffff; border: 1.5px solid #1e293b; border-radius: 6px; width: 210mm; height: 297mm; margin: 0 auto; box-sizing: border-box; padding: 12mm 16mm; position: relative; box-shadow: 0 8px 24px rgba(0,0,0,0.1); font-family: 'Times New Roman', Times, serif; color: #111; display: flex; flex-direction: column; justify-content: space-between; }\r\n.surat-perintah-section, .kwitansi-section { position: relative; z-index: 1; }\r\n\r\n.sp-header { text-align: center; border-bottom: 2px solid #111; padding-bottom: 6px; margin-bottom: 10px; }\r\n.sp-header h4 { margin: 0; font-size: 12px; color: #333; letter-spacing: 0.5px; font-weight: bold; }\r\n.sp-header h3 { margin: 2px 0; font-size: 16px; font-weight: bold; color: #111; }\r\n.sp-header p { margin: 0; font-size: 11px; color: #444; font-family: 'Segoe UI', Tahoma, sans-serif; }\r\n.sp-title-box { margin-top: 6px; font-size: 13.5px; font-weight: bold; text-transform: uppercase; text-decoration: underline; color: #0b5124; }\r\n.sp-subtitle { font-size: 12px; font-weight: bold; color: #222; margin-top: 2px; }\r\n\r\n.sp-body { font-size: 14px; line-height: 1.45; color: #111; }\r\n.sp-table { width: 100%; margin: 8px 0; font-size: 14px; border-collapse: collapse; }\r\n.sp-table td { padding: 4px 0; vertical-align: top; }\r\n\r\n.sp-sign-area-single { display: flex; justify-content: flex-end; text-align: center; margin-top: 8px; font-size: 13.5px; }\r\n.sign-box-single { width: 240px; color: #111; }\r\n.space-sign { height: 50px; }\r\n\r\n.section-separator { border-top: 1.5px dashed #444; margin: 10px 0; position: relative; text-align: center; z-index: 1; }\r\n.section-separator span { position: absolute; top: -10px; left: 50%; transform: translateX(-50%); background: #ffffff; padding: 0 8px; font-size: 10px; color: #444; font-weight: bold; }\r\n\r\n.kwitansi-header { display: flex; justify-content: space-between; align-items: center; border-bottom: 1.5px solid #111; padding-bottom: 6px; margin-bottom: 8px; }\r\n.badge-bosp { background: #0b5124; color: #ffffff; padding: 4px 10px; font-size: 11px; font-weight: bold; border-radius: 4px; display: inline-block; }\r\n\r\n.kwitansi-body { display: flex; flex-direction: column; gap: 6px; font-size: 14px; }\r\n.nominal-highlight { font-size: 15px; font-weight: bold; color: #0b5124; background: rgba(230, 244, 234, 0.8); padding: 2px 6px; border: 1px dashed #0b5124; display: inline-block; border-radius: 4px; }\r\n.terbilang-text { font-style: italic; font-weight: bold; background: rgba(241, 243, 244, 0.8); padding: 2px 6px; border-radius: 4px; color: #111; }\r\n\r\n.kwitansi-footer { margin-top: 8px; display: flex; flex-direction: column; gap: 6px; font-size: 13.5px; }\r\n.meta-date-right { text-align: right; color: #111; font-size: 13.5px; padding-right: 15px; }\r\n.signature-section-3col { display: flex; justify-content: space-between; text-align: center; padding: 0 5px; align-items: flex-end; }\r\n.sign-box { width: 180px; color: #111; font-size: 13px; display: flex; flex-direction: column; justify-content: space-between; height: 140px; }\r\n.space-sign-top { height: 50px; }\r\n\r\n@media print {\r\n    body { background: white; }\r\n    .no-print { display: none !important; }\r\n    .kwitansi-card-a4 { border: none; box-shadow: none; width: 100%; height: 100%; padding: 0; }\r\n    .kwitansi-container-outer { overflow: visible; }\r\n}\r\n<\/style>\r\n\r\n<script>\r\nvar webAppUrl = 'https:\/\/script.google.com\/macros\/s\/AKfycbzl6fZ3P4juZmpkNz4KlXd-LXb2hMZ1MkADdBldwndnhkVVCuAH1eTtqibQvgmiDfR_\/exec';\r\nvar DEFAULT_VERIFIER_PIN = '2026';\r\nvar SUPER_ADMIN_PIN = '1983';\r\nvar mediaStream = null;\r\nvar activeData = null;\r\n\r\nwindow.onload = function() {\r\n    checkGateUIState();\r\n};\r\n\r\nfunction showCustomModal(title, message, type = 'info', callback = null) {\r\n    var modalOverlay = document.getElementById('customModalOverlay');\r\n    document.getElementById('modalTitle').innerText = title;\r\n    document.getElementById('modalMessage').innerHTML = message;\r\n    var modalIcon = document.getElementById('modalIcon');\r\n    var modalOkBtn = document.getElementById('modalOkBtn');\r\n    var btnContainer = document.getElementById('modalBtnContainer');\r\n\r\n    btnContainer.innerHTML = '<button type=\"button\" id=\"modalOkBtn\" class=\"modal-btn-ok\" onclick=\"closeCustomModal()\">Mengerti<\/button>';\r\n    modalOkBtn = document.getElementById('modalOkBtn');\r\n\r\n    if (type === 'success') {\r\n        modalIcon.innerText = \"\ud83c\udf89\";\r\n        modalOkBtn.style.background = \"#0b5124\";\r\n    } else if (type === 'error') {\r\n        modalIcon.innerText = \"\u26a0\ufe0f\";\r\n        modalOkBtn.style.background = \"#dc2626\";\r\n    } else {\r\n        modalIcon.innerText = \"\u2139\ufe0f\";\r\n        modalOkBtn.style.background = \"#0b5124\";\r\n    }\r\n\r\n    window.customModalCallback = callback;\r\n    modalOverlay.style.display = 'flex';\r\n}\r\n\r\nfunction closeCustomModal() {\r\n    var modalOverlay = document.getElementById('customModalOverlay');\r\n    if (modalOverlay) modalOverlay.style.display = 'none';\r\n    if (typeof window.customModalCallback === 'function') {\r\n        var cb = window.customModalCallback;\r\n        window.customModalCallback = null;\r\n        cb();\r\n    }\r\n}\r\n\r\nfunction showCustomConfirm(title, message, onYes) {\r\n    var modalOverlay = document.getElementById('customModalOverlay');\r\n    document.getElementById('modalTitle').innerText = title;\r\n    document.getElementById('modalMessage').innerText = message;\r\n    document.getElementById('modalIcon').innerText = \"\u2753\";\r\n    \r\n    var btnContainer = document.getElementById('modalBtnContainer');\r\n    btnContainer.innerHTML = `\r\n        <button type=\"button\" id=\"modalNoBtn\" style=\"flex:1; background:#64748b; color:white; border:none; padding:12px; border-radius:10px; font-weight:600; cursor:pointer;\">Batal<\/button>\r\n        <button type=\"button\" id=\"modalYesBtn\" style=\"flex:1; background:#dc2626; color:white; border:none; padding:12px; border-radius:10px; font-weight:600; cursor:pointer;\">Ya, Hapus<\/button>\r\n    `;\r\n    \r\n    document.getElementById('modalNoBtn').onclick = function() {\r\n        document.getElementById('customModalOverlay').style.display = 'none';\r\n    };\r\n    \r\n    document.getElementById('modalYesBtn').onclick = function() {\r\n        document.getElementById('customModalOverlay').style.display = 'none';\r\n        if (typeof onYes === 'function') onYes();\r\n    };\r\n\r\n    modalOverlay.style.display = 'flex';\r\n}\r\n\r\nfunction cekJamAbsensi() {\r\n    var now = new Date();\r\n    var jam = now.getHours();\r\n    var menit = now.getMinutes();\r\n    var totalMenit = jam * 60 + menit;\r\n    \r\n    var batasMulaiTutup = 8 * 60;        \r\n    var batasSelesaiTutup = 15 * 60 + 15; \r\n    \r\n    var btnKamera = document.getElementById('btnBukaKamera');\r\n    var banner = document.getElementById('statusAbsenBanner');\r\n    \r\n    if (!btnKamera || !banner) return;\r\n    \r\n    if (totalMenit >= batasMulaiTutup && totalMenit <= batasSelesaiTutup) {\r\n        btnKamera.disabled = true;\r\n        btnKamera.style.background = \"#94a3b8\";\r\n        btnKamera.style.cursor = \"not-allowed\";\r\n        banner.style.display = \"block\";\r\n        banner.style.background = \"#fef2f2\";\r\n        banner.style.color = \"#dc2626\";\r\n        banner.innerHTML = \"\ud83d\udd12 Absensi <b>DITUTUP<\/b> (Jam Operasional: 08.00 - 15.15 WIB). Absen hanya dibuka di luar jam tersebut.\";\r\n    } else {\r\n        btnKamera.disabled = false;\r\n        btnKamera.style.background = \"#25d366\";\r\n        btnKamera.style.cursor = \"pointer\";\r\n        banner.style.display = \"block\";\r\n        banner.style.background = \"#e6f4ea\";\r\n        banner.style.color = \"#0b5124\";\r\n        banner.innerHTML = \"\u2705 Absensi hari ini <b>DIBUKA<\/b>.\";\r\n    }\r\n}\r\n\r\nfunction checkGateUIState() {\r\n    if (localStorage.getItem('verifikator_logged') === 'true') {\r\n        unlockAppInterface(localStorage.getItem('user_role') === 'admin');\r\n        return;\r\n    }\r\n    \r\n    var savedVerifierPin = localStorage.getItem('verifier_custom_pin');\r\n    var titleEl = document.getElementById('secCardTitle');\r\n    var descEl = document.getElementById('secCardDesc');\r\n    \r\n    if (!savedVerifierPin) {\r\n        titleEl.innerText = \"Verifikasi Kehadiran\";\r\n        descEl.innerText = \"Gunakan PIN Default 2026 untuk masuk pertama kali, lalu ubah PIN Anda. Jika lupa, hubungi Super Admin.\";\r\n    } else {\r\n        titleEl.innerText = \"Verifikasi Kehadiran\";\r\n        descEl.innerText = \"Masukkan 4 digit PIN Anda untuk membuka akses sistem.\";\r\n    }\r\n}\r\n\r\nfunction verifyPinCode() {\r\n    var enteredPin = document.getElementById('pinInput').value.trim();\r\n    var errBox = document.getElementById('pinErrorMsg');\r\n    var savedVerifierPin = localStorage.getItem('verifier_custom_pin');\r\n    \r\n    if (enteredPin.length !== 4) {\r\n        errBox.innerText = \"\u274c Masukkan tepat 4 digit PIN.\";\r\n        errBox.style.display = 'block';\r\n        return;\r\n    }\r\n    \r\n    if (enteredPin === SUPER_ADMIN_PIN) {\r\n        localStorage.setItem('verifikator_logged', 'true');\r\n        localStorage.setItem('user_role', 'admin');\r\n        unlockAppInterface(true);\r\n    } else if (!savedVerifierPin) {\r\n        if (enteredPin === DEFAULT_VERIFIER_PIN) {\r\n            var newPin = prompt(\"PIN Default diterima (2026).\\n\\nSilakan masukkan 4 DIGIT PIN BARU pilihan Anda untuk mengamankan perangkat ini:\");\r\n            if (newPin && newPin.length === 4 && !isNaN(newPin)) {\r\n                localStorage.setItem('verifier_custom_pin', newPin);\r\n                localStorage.setItem('verifikator_logged', 'true');\r\n                localStorage.setItem('user_role', 'verifier');\r\n                showCustomModal(\"Sukses\", \"\u2705 PIN baru berhasil disimpan dan dikunci permanen di perangkat ini.\", \"success\", function() {\r\n                    unlockAppInterface(false);\r\n                });\r\n            } else {\r\n                showCustomModal(\"Perhatian\", \"\u26a0\ufe0f Pembuatan PIN dibatalkan atau format salah. Silakan coba lagi.\", \"error\");\r\n                document.getElementById('pinInput').value = '';\r\n            }\r\n        } else {\r\n            errBox.innerText = \"\u274c PIN Default Salah (Gunakan 2026).\";\r\n            errBox.style.display = 'block';\r\n            document.getElementById('pinInput').value = '';\r\n        }\r\n    } else {\r\n        if (enteredPin === savedVerifierPin) {\r\n            localStorage.setItem('verifikator_logged', 'true');\r\n            localStorage.setItem('user_role', 'verifier');\r\n            unlockAppInterface(false);\r\n        } else {\r\n            errBox.innerText = \"\u274c PIN Akses Salah. Silakan coba lagi.\";\r\n            errBox.style.display = 'block';\r\n            document.getElementById('pinInput').value = '';\r\n        }\r\n    }\r\n}\r\n\r\nfunction showResetSection() {\r\n    document.getElementById('pinFormBox').style.display = 'none';\r\n    document.getElementById('resetFormBox').style.display = 'block';\r\n    document.getElementById('secCardTitle').innerText = \"Reset PIN Perangkat\";\r\n    document.getElementById('secCardDesc').innerText = \"Masukkan PIN Super Admin untuk mereset PIN verifikator.\";\r\n}\r\n\r\nfunction hideResetSection() {\r\n    document.getElementById('resetFormBox').style.display = 'none';\r\n    document.getElementById('pinFormBox').style.display = 'block';\r\n    checkGateUIState();\r\n}\r\n\r\nfunction executeResetPin() {\r\n    var adminPin = document.getElementById('superAdminPinInput').value.trim();\r\n    var resetErr = document.getElementById('resetErrorMsg');\r\n    \r\n    if (adminPin === SUPER_ADMIN_PIN) {\r\n        localStorage.removeItem('verifier_custom_pin');\r\n        localStorage.removeItem('verifikator_logged');\r\n        localStorage.removeItem('user_role');\r\n        showCustomModal(\"Reset Berhasil\", \"\u2705 Perangkat berhasil di-reset oleh Super Admin. Silakan login kembali.\", \"success\", function() {\r\n            document.getElementById('superAdminPinInput').value = '';\r\n            hideResetSection();\r\n            location.reload();\r\n        });\r\n    } else {\r\n        resetErr.style.display = 'block';\r\n        document.getElementById('superAdminPinInput').value = '';\r\n    }\r\n}\r\n\r\nfunction openGuideModal() {\r\n    document.getElementById('guideModal').style.display = 'flex';\r\n}\r\n\r\nfunction closeGuideModal() {\r\n    document.getElementById('guideModal').style.display = 'none';\r\n}\r\n\r\nfunction unlockAppInterface(isAdmin) {\r\n    document.getElementById('securityGateModal').style.display = 'none';\r\n    document.getElementById('mainAppContent').style.display = 'block';\r\n    \r\n    var badge = document.getElementById('userRoleBadge');\r\n    var financeTabBtn = document.getElementById('tabFinanceBtn');\r\n    \r\n    if (isAdmin) {\r\n        badge.innerText = \"SUPER ADMIN\";\r\n        badge.style.background = \"#ca8a04\";\r\n        financeTabBtn.style.display = 'block';\r\n        loadAttendanceDatesDropdown();\r\n    } else {\r\n        badge.innerText = \"VERIFIKATOR\";\r\n        badge.style.background = \"rgba(255,255,255,0.2)\";\r\n        financeTabBtn.style.display = 'none';\r\n    }\r\n    \r\n    var months = [\"Januari\", \"Februari\", \"Maret\", \"April\", \"Mei\", \"Juni\", \"Juli\", \"Agustus\", \"September\", \"Oktober\", \"November\", \"Desember\"];\r\n    var now = new Date();\r\n    var realtimeDate = now.getDate() + \" \" + months[now.getMonth()] + \" \" + now.getFullYear();\r\n    document.getElementById('realtimeDateBadge').innerText = \"\ud83d\udcc5 \" + realtimeDate;\r\n\r\n    loadWorkersList();\r\n    cekJamAbsensi();\r\n    setInterval(cekJamAbsensi, 60000);\r\n}\r\n\r\nfunction lockAppAgain() {\r\n    localStorage.removeItem('verifikator_logged');\r\n    localStorage.removeItem('user_role');\r\n    document.getElementById('mainAppContent').style.display = 'none';\r\n    document.getElementById('securityGateModal').style.display = 'block';\r\n    document.getElementById('pinInput').value = '';\r\n    document.getElementById('pinErrorMsg').style.display = 'none';\r\n    checkGateUIState();\r\n}\r\n\r\nfunction switchTab(tabId) {\r\n    document.getElementById('absenTab').style.display = (tabId === 'absenTab') ? 'block' : 'none';\r\n    document.getElementById('masterTab').style.display = (tabId === 'masterTab') ? 'block' : 'none';\r\n    var finTab = document.getElementById('financeTab');\r\n    if(finTab) finTab.style.display = (tabId === 'financeTab') ? 'block' : 'none';\r\n    \r\n    var buttons = document.querySelectorAll('.tab-btn');\r\n    buttons.forEach(function(btn) { btn.classList.remove('active'); });\r\n    event.currentTarget.classList.add('active');\r\n}\r\n\r\nfunction loadWorkersList() {\r\n    fetch(webAppUrl + '?action=get_workers')\r\n        .then(res => res.json())\r\n        .then(res => {\r\n            var container = document.getElementById('checkboxWorkerList');\r\n            var masterContainer = document.getElementById('activeWorkersList');\r\n            \r\n            if (res.status === 'success' && res.data.length > 0) {\r\n                var htmlAbsen = '<p style=\"margin-top:0; font-weight:600; font-size:12px; color:#475569;\">Ceklis Pekerja yang Hadir Hari Ini:<\/p>';\r\n                var htmlMaster = '';\r\n                \r\n                res.data.forEach(function(w, idx) {\r\n                    htmlAbsen += '<div class=\"worker-checkbox-item\">' +\r\n                                '<input type=\"checkbox\" id=\"worker_' + idx + '\" value=\"' + w.nama + '\" data-peran=\"' + w.peran + '\" data-tarif=\"' + w.tarif + '\" style=\"width:18px; height:18px; cursor:pointer;\">' +\r\n                                '<label for=\"worker_' + idx + '\" style=\"cursor:pointer; flex:1;\"><b>' + w.nama + '<\/b> <span style=\"color:#64748b; font-size:11.5px;\">(' + w.peran + ')<\/span><\/label>' +\r\n                                '<\/div>';\r\n                                \r\n                    htmlMaster += '<div class=\"worker-row-item\">' +\r\n                                    '<div><b>' + w.nama + '<\/b><br><span style=\"color:#64748b; font-size:11px;\">' + w.peran + ' \u2022 NIK: ' + w.nik + '<\/span><\/div>' +\r\n                                    '<button type=\"button\" class=\"btn-del\" onclick=\"deleteWorker(\\'' + w.nik + '\\', \\'' + w.nama + '\\')\">\ud83d\uddd1\ufe0f Hapus<\/button>' +\r\n                                  '<\/div>';\r\n                });\r\n                container.innerHTML = htmlAbsen;\r\n                masterContainer.innerHTML = htmlMaster;\r\n            } else {\r\n                container.innerHTML = '<p style=\"color:red; text-align:center; font-size:12.5px;\">Belum ada pekerja terdaftar. Silakan daftarkan di tab Kelola Pekerja.<\/p>';\r\n                masterContainer.innerHTML = '<p style=\"padding:15px; text-align:center; color:#64748b; margin:0; font-size:12.5px;\">Belum ada pekerja di database.<\/p>';\r\n            }\r\n        });\r\n}\r\n\r\nfunction formatCleanDate(rawDateStr) {\r\n    if (!rawDateStr) return \"7 September 2026\";\r\n    var str = String(rawDateStr).trim();\r\n    if (str.indexOf(\"GMT\") !== -1 || str.indexOf(\"00:00:00\") !== -1 || str.indexOf(\"T\") !== -1) {\r\n        var dObj = new Date(str);\r\n        if (!isNaN(dObj.getTime())) {\r\n            var bulanIndo = [\"Januari\", \"Februari\", \"Maret\", \"April\", \"Mei\", \"Juni\", \"Juli\", \"Agustus\", \"September\", \"Oktober\", \"November\", \"Desember\"];\r\n            return dObj.getDate() + \" \" + bulanIndo[dObj.getMonth()] + \" \" + dObj.getFullYear();\r\n        }\r\n    }\r\n    var parts = str.split(\" (\");\r\n    return parts[0].trim();\r\n}\r\n\r\nfunction loadAttendanceDatesDropdown() {\r\n    fetch(webAppUrl + '?action=get_all_attendance_dates')\r\n        .then(res => res.json())\r\n        .then(res => {\r\n            var dropdown = document.getElementById('rekapTanggalDropdown');\r\n            if (res.status === 'success' && res.data.length > 0) {\r\n                var html = '<option value=\"\">-- Pilih Tanggal Absensi --<\/option>';\r\n                res.data.forEach(function(item) {\r\n                    var rawTgl = item.tgl || item.tanggal || \"7 September 2026\";\r\n                    var cleanTgl = formatCleanDate(rawTgl);\r\n                    var buktiText = item.bukti || \"SPPU\";\r\n                    html += '<option value=\"' + item.row + '\">' + cleanTgl + ' (' + buktiText + ')<\/option>';\r\n                });\r\n                dropdown.innerHTML = html;\r\n            } else {\r\n                dropdown.innerHTML = '<option value=\"\">-- Belum ada data absensi di database --<\/option>';\r\n            }\r\n        })\r\n        .catch(err => {\r\n            var dropdown = document.getElementById('rekapTanggalDropdown');\r\n            dropdown.innerHTML = '<option value=\"\">-- Gagal memuat tanggal --<\/option>';\r\n        });\r\n}\r\n\r\nfunction openGroupCamera() {\r\n    var now = new Date();\r\n    var totalMenit = now.getHours() * 60 + now.getMinutes();\r\n    \r\n    if (totalMenit >= (8 * 60) && totalMenit <= (15 * 60 + 15)) {\r\n        showCustomModal(\"Absensi Ditutup\", \"Mohon maaf, absensi ditutup pukul 08.00 hingga 15.15 WIB.\", \"error\");\r\n        return;\r\n    }\r\n\r\n    var checkboxes = document.querySelectorAll('#checkboxWorkerList input[type=\"checkbox\"]:checked');\r\n    if (checkboxes.length === 0) {\r\n        showCustomModal(\"Perhatian\", \"Silakan ceklis minimal 1 pekerja yang hadir terlebih dahulu!\", \"error\");\r\n        return;\r\n    }\r\n    \r\n    document.getElementById('cameraModal').style.display = 'flex';\r\n    navigator.mediaDevices.getUserMedia({ video: { facingMode: \"environment\" } })\r\n        .then(stream => {\r\n            mediaStream = stream;\r\n            document.getElementById('videoElement').srcObject = stream;\r\n        })\r\n        .catch(err => {\r\n            showCustomModal(\"Akses Kamera Ditolak\", \"Tidak dapat mengakses kamera: \" + err, \"error\");\r\n            closeCamera();\r\n        });\r\n}\r\n\r\nfunction closeCamera() {\r\n    if (mediaStream) {\r\n        mediaStream.getTracks().forEach(track => track.stop());\r\n    }\r\n    document.getElementById('cameraModal').style.display = 'none';\r\n}\r\n\r\nfunction captureAndSubmitGroup() {\r\n    var checkboxes = document.querySelectorAll('#checkboxWorkerList input[type=\"checkbox\"]:checked');\r\n    var hadirList = [];\r\n    var totalUpah = 0;\r\n    \r\n    checkboxes.forEach(function(cb) {\r\n        var tarif = Number(cb.getAttribute('data-tarif'));\r\n        hadirList.push({ nama: cb.value, peran: cb.getAttribute('data-peran'), tarif: tarif });\r\n        totalUpah += tarif;\r\n    });\r\n    \r\n    var video = document.getElementById('videoElement');\r\n    var canvas = document.getElementById('canvasElement');\r\n    canvas.width = video.videoWidth;\r\n    canvas.height = video.videoHeight;\r\n    var ctx = canvas.getContext('2d');\r\n    ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\r\n    \r\n    var base64Data = canvas.toDataURL('image\/jpeg', 0.8).split(',')[1];\r\n    \r\n    var payload = {\r\n        action: \"submit_group_attendance\",\r\n        hadir_list: hadirList,\r\n        total_upah: totalUpah,\r\n        foto_base64: base64Data,\r\n        foto_mime: \"image\/jpeg\"\r\n    };\r\n    \r\n    closeCamera();\r\n    showCustomModal(\"Menyimpan\", \"Sedang mengunggah absensi kelompok & foto bersama ke server database...\", \"info\");\r\n    \r\n    fetch(webAppUrl, { method: 'POST', body: JSON.stringify(payload) })\r\n    .then(res => res.json())\r\n    .then(res => {\r\n        if(res.status === 'success') {\r\n            var listHtml = '<div style=\"background: #f8fafc; padding: 10px; border-radius: 8px; border: 1px solid #e2e8f0; margin: 10px 0; max-height: 140px; overflow-y: auto;\">';\r\n            hadirList.forEach(function(p, i) {\r\n                listHtml += '<div style=\"font-size: 13px; padding: 3px 0; border-bottom: 1px dashed #cbd5e1;\"><b>' + (i+1) + '. ' + p.nama + '<\/b> <span style=\"color: #64748b; font-size: 11.5px;\">(' + p.peran + ')<\/span><\/div>';\r\n            });\r\n            listHtml += '<\/div>';\r\n\r\n            var dayIndex = new Date().getDay();\r\n            var motivationalQuotes = [\r\n                \"\u2600\ufe0f <b>Semangat Minggu Berkah!<\/b> Walau hari libur, dedikasi membangun fondasi masa depan <b>SDN 2 SELAAWI<\/b> tetap luar biasa. Tetap jaga kesehatan!\",\r\n                \"\ud83d\ude80 <b>Semangat Senin Penuh Energi!<\/b> Awali minggu ini dengan niat lurus dan kerja keras membangun fasilitas terbaik untuk anak-anak bangsa di <b>SDN 2 SELAAWI<\/b>!\",\r\n                \"\ud83d\udd25 <b>Selasa Produktif!<\/b> Terus pertahankan ritme kerja yang solid dan ketelitian tinggi. Setiap adukan semen adalah investasi kebaikan!\",\r\n                \"\u26a1 <b>Rabu Penuh Berkah!<\/b> Pertengahan minggu tetap gaspol! Kekompakan tim Tukang dan Laden adalah kunci kesuksesan proyek ini.\",\r\n                \"\ud83c\udfaf <b>Kamis Mantap!<\/b> Selangkah lebih dekat menuju tuntasnya renovasi sekolah tercinta. Pertahankan kualitas dan keselamatan kerja!\",\r\n                \"\ud83c\udf1f <b>Jumat Barokah!<\/b> Hari mulia penuh berkah, mari selesaikan pekerjaan dengan tuntas, jujur, dan penuh rasa tanggung jawab. Luar biasa tim Mekarwangi!\",\r\n                \"\ud83c\udfc6 <b>Sabtu Ceria & Produktif!<\/b> Tutup pekan ini dengan pencapaian yang membanggakan. Kerja keras kalian adalah kebanggaan kita semua!\"\r\n            ];\r\n            var quoteHariIni = motivationalQuotes[dayIndex];\r\n\r\n            var motivasiText = '<div style=\"background: #f0fdf4; border-left: 4px solid #0b5124; padding: 10px; border-radius: 6px; font-size: 12.5px; color: #166534;\">' +\r\n                               quoteHariIni +\r\n                               '<\/div>';\r\n\r\n            var pesanRekap = '<p style=\"margin: 0 0 6px 0; font-weight: bold; color: #0b5124;\">\u2705 Absensi Berhasil Disimpan ke Server!<\/p>' +\r\n                           '<p style=\"margin: 0 0 6px 0; font-size: 12.5px; color: #475569;\">Total <b>' + hadirList.length + ' orang pekerja<\/b> tercatat hadir hari ini:<\/p>' +\r\n                           listHtml + motivasiText;\r\n\r\n            showCustomModal(\"Rekap Kehadiran Hari Ini\", pesanRekap, \"success\", function() {\r\n                location.reload();\r\n            });\r\n        } else {\r\n            showCustomModal(\"Gagal\", \"\u274c Terjadi kesalahan: \" + res.message, \"error\");\r\n        }\r\n    })\r\n    .catch(err => {\r\n        showCustomModal(\"Kesalahan Koneksi\", \"\u274c Gagal terhubung ke server: \" + err, \"error\");\r\n    });\r\n}\r\n\r\nfunction submitWorker(event) {\r\n    event.preventDefault();\r\n    var nik = document.getElementById('nik').value.trim();\r\n    var nama = document.getElementById('nama').value.trim();\r\n    var peran = document.getElementById('peran').value.trim();\r\n    var fileInput = document.getElementById('ktpFile');\r\n    \r\n    if (!fileInput.files[0]) {\r\n        showCustomModal(\"Perhatian\", \"Upload foto KTP diperlukan!\", \"error\");\r\n        return;\r\n    }\r\n    \r\n    var file = fileInput.files[0];\r\n    var reader = new FileReader();\r\n    \r\n    document.getElementById('loadingMsg').style.display = 'block';\r\n    document.getElementById('btnSubmit').disabled = true;\r\n    \r\n    reader.onload = function () {\r\n        var payload = {\r\n            action: \"register_worker\",\r\n            nik: nik,\r\n            nama: nama,\r\n            peran: peran,\r\n            ktp_base64: reader.result.split(',')[1],\r\n            ktp_filename: file.name,\r\n            ktp_mime: file.type\r\n        };\r\n        \r\n        fetch(webAppUrl, { method: 'POST', body: JSON.stringify(payload) })\r\n        .then(res => res.json())\r\n        .then(res => {\r\n            document.getElementById('loadingMsg').style.display = 'none';\r\n            document.getElementById('btnSubmit').disabled = false;\r\n            var msg = document.getElementById('responseMsg');\r\n            msg.style.display = 'block';\r\n            \r\n            if (res.status === 'success') {\r\n                msg.style.background = '#e6f4ea'; msg.style.color = '#0b5124';\r\n                msg.innerText = '\u2705 ' + res.message;\r\n                document.getElementById('workerForm').reset();\r\n                loadWorkersList();\r\n            } else {\r\n                msg.style.background = '#fef2f2'; msg.style.color = '#dc2626';\r\n                msg.innerText = '\u274c ' + res.message;\r\n            }\r\n        });\r\n    };\r\n    reader.readAsDataURL(file);\r\n}\r\n\r\nfunction deleteWorker(nik, nama) {\r\n    showCustomConfirm(\"Hapus Pekerja\", 'Apakah Anda yakin ingin menghapus pekerja \"' + nama + '\" dari database?', function() {\r\n        fetch(webAppUrl, {\r\n            method: 'POST',\r\n            body: JSON.stringify({ action: \"delete_worker\", nik: nik })\r\n        })\r\n        .then(res => res.json())\r\n        .then(res => {\r\n            if (res.status === 'success') {\r\n                showCustomModal(\"Berhasil\", \"\u2705 Pekerja berhasil dihapus.\", \"success\", function() {\r\n                    loadWorkersList();\r\n                });\r\n            } else {\r\n                showCustomModal(\"Gagal\", \"\u274c Gagal: \" + res.message, \"error\");\r\n            }\r\n        });\r\n    });\r\n}\r\n\r\nfunction loadKwitansiRekap() {\r\n    var rowIndex = document.getElementById('rekapTanggalDropdown').value.trim();\r\n    if (!rowIndex) {\r\n        showCustomModal(\"Perhatian\", \"Silakan pilih tanggal absensi dari dropdown terlebih dahulu!\", \"error\");\r\n        return;\r\n    }\r\n    \r\n    fetch(webAppUrl + '?action=get_attendance_by_row&row=' + encodeURIComponent(rowIndex))\r\n        .then(res => res.json())\r\n        .then(res => {\r\n            if (res.status === 'success') {\r\n                activeData = res.data;\r\n                var cleanDateStr = formatCleanDate(activeData.tanggal);\r\n                renderKwitansiDoc(activeData, cleanDateStr);\r\n            } else {\r\n                showCustomModal(\"Tidak Ditemukan\", \"\u26a0\ufe0f Data absensi tidak ditemukan pada baris tersebut.\", \"error\");\r\n                document.getElementById('kwitansiCard').style.display = 'none';\r\n            }\r\n        })\r\n        .catch(err => {\r\n            showCustomModal(\"Kesalahan Koneksi\", \"\u274c Gagal terhubung ke database server: \" + err, \"error\");\r\n        });\r\n}\r\n\r\nfunction renderKwitansiDoc(d, tgl) {\r\n    var nominalFmt = 'Rp ' + Number(d.total_upah).toLocaleString('id-ID');\r\n    \r\n    var finalCleanDate = tgl;\r\n    if (!finalCleanDate || finalCleanDate.indexOf('T') !== -1 || finalCleanDate.indexOf('GMT') !== -1) {\r\n        var dObj = new Date(d.tanggal);\r\n        if (!isNaN(dObj.getTime())) {\r\n            var bulanIndo = [\"Januari\", \"Februari\", \"Maret\", \"April\", \"Mei\", \"Juni\", \"Juli\", \"Agustus\", \"September\", \"Oktober\", \"November\", \"Desember\"];\r\n            finalCleanDate = dObj.getDate() + \" \" + bulanIndo[dObj.getMonth()] + \" \" + dObj.getFullYear();\r\n        } else {\r\n            finalCleanDate = \"7 September 2026\";\r\n        }\r\n    } else {\r\n        finalCleanDate = formatCleanDate(finalCleanDate);\r\n    }\r\n\r\n    var countTukang = 0;\r\n    var countLaden = 0;\r\n    if (d.rincian_pekerja && d.rincian_pekerja.length > 0) {\r\n        d.rincian_pekerja.forEach(function(p) {\r\n            var peranLower = (p.peran || \"\").toLowerCase();\r\n            if (peranLower.includes('tukang')) {\r\n                countTukang++;\r\n            } else if (peranLower.includes('laden') || peranLower.includes('pembantu')) {\r\n                countLaden++;\r\n            }\r\n        });\r\n    }\r\n    \r\n    var rincianDetail = 'Uang Harian Upah Pekerja: ';\r\n    var detailArr = [];\r\n    if (countTukang > 0) detailArr.push(countTukang + ' Tukang');\r\n    if (countLaden > 0) detailArr.push(countLaden + ' Laden');\r\n    \r\n    if (detailArr.length > 0) {\r\n        rincianDetail += detailArr.join(' dan ') + ' Hadir (Tgl: ' + finalCleanDate + ')';\r\n    } else {\r\n        rincianDetail += d.rincian_pekerja.length + ' Orang Hadir (Tgl: ' + finalCleanDate + ')';\r\n    }\r\n    \r\n    document.getElementById('resNoBukti').innerText = d.no_bukti;\r\n    document.getElementById('resNoBuktiSP').innerText = d.no_bukti;\r\n    document.getElementById('resNominal').innerText = nominalFmt;\r\n    document.getElementById('resNominalSPText').innerText = nominalFmt + ' (' + d.terbilang + ')';\r\n    document.getElementById('resTerbilang').innerText = d.terbilang;\r\n    \r\n    document.getElementById('resUraianKwitansi').innerText = rincianDetail;\r\n    document.getElementById('resUraianSpText').innerText = rincianDetail;\r\n    \r\n    document.getElementById('resTanggal').innerText = finalCleanDate;\r\n    document.getElementById('resTanggalSP').innerText = finalCleanDate;\r\n    \r\n    document.getElementById('kwitansiCard').style.display = 'block';\r\n}\r\n\r\nfunction kirimWhatsApp() {\r\n    if (!activeData) return;\r\n    var d = activeData;\r\n    var tgl = formatCleanDate(activeData.tanggal);\r\n    \r\n    var countTukang = 0;\r\n    var countLaden = 0;\r\n    d.rincian_pekerja.forEach(function(p) {\r\n        var peranLower = (p.peran || \"\").toLowerCase();\r\n        if (peranLower.includes('tukang')) countTukang++;\r\n        else if (peranLower.includes('laden') || peranLower.includes('pembantu')) countLaden++;\r\n    });\r\n    var detailStr = countTukang + ' Tukang dan ' + countLaden + ' Laden';\r\n\r\n    var pesan = \"*APP. UPAH PEGAWAI - REVITALISASI SDN 2 SELAAWI*\\n\\n\" +\r\n                \"\ud83d\udcc4 *No. Bukti:* \" + d.no_bukti + \"\\n\" +\r\n                \"\ud83d\udcc5 *Tanggal:* \" + tgl + \"\\n\" +\r\n                \"\ud83d\udc77 *Penerima (Kepala Tukang):* Suparman\\n\" +\r\n                \"\ud83d\udcdd *Rincian:* Pembayaran Upah Harian (\" + detailStr + \")\\n\" +\r\n                \"\ud83d\udcb0 *Jumlah Nominal:* \" + 'Rp ' + Number(d.total_upah).toLocaleString('id-ID') + \"\\n\" +\r\n                \"\ud83d\udde3\ufe0f *\" + d.terbilang + \"*\\n\\n\" +\r\n                \"_Program Revitalisasi Bangunan SDN 2 SELAAWI T.A. 2026._\";\r\n                \r\n    window.open(\"https:\/\/api.whatsapp.com\/send?text=\" + encodeURIComponent(pesan), '_blank');\r\n}\r\n<\/script>\r\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>SDN 2 SELAAWI \u2022 T.A. 2026 \ud83d\udd10 Verifikasi Kehadiran Gunakan PIN Default 2026 untuk login pertama, lalu ubah PIN Anda. Jika lupa, hubungi Super Admin. Masuk ke Sistem \u274c PIN Akses Salah. Silakan coba lagi. Lupa PIN Verifikator? (Hubungi Super Admin) \ud83d\udee1\ufe0f Panel Reset Super Admin Reset PIN Perangkat \u274c PIN Super Admin Salah! \u00ab [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-9","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/sipadutalbar.com\/sdn2selaawi\/wp-json\/wp\/v2\/pages\/9","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sipadutalbar.com\/sdn2selaawi\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sipadutalbar.com\/sdn2selaawi\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sipadutalbar.com\/sdn2selaawi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sipadutalbar.com\/sdn2selaawi\/wp-json\/wp\/v2\/comments?post=9"}],"version-history":[{"count":121,"href":"https:\/\/sipadutalbar.com\/sdn2selaawi\/wp-json\/wp\/v2\/pages\/9\/revisions"}],"predecessor-version":[{"id":248,"href":"https:\/\/sipadutalbar.com\/sdn2selaawi\/wp-json\/wp\/v2\/pages\/9\/revisions\/248"}],"wp:attachment":[{"href":"https:\/\/sipadutalbar.com\/sdn2selaawi\/wp-json\/wp\/v2\/media?parent=9"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}