diff --git a/assets/global/localization.js b/assets/global/localization.js
index 82d1ca7..dfcc686 100644
--- a/assets/global/localization.js
+++ b/assets/global/localization.js
@@ -569,6 +569,46 @@ const translations = {
kontrib_guideline_3: "Sertakan fakta dan data yang akurat dan dapat diverifikasi.",
kontrib_guideline_4: "Hindari plagiarisme. Karya harus orisinal.",
kontrib_guideline_5: "Tim redaksi berhak menyunting konten untuk keperluan editorial.",
+
+ // --- Group C4A: Staf Pendukung & SOP ---
+ grp_c4a_hero_tag: "LAYANAN AKADEMIK \u2022 INFORMATIKA UNTAN",
+ grp_c4a_hero_title: "Staf Pendukung & Standar Operasional Prosedur (SOP)",
+ grp_c4a_hero_desc: "Halaman ini menampilkan informasi petugas layanan akademik serta prosedur administrasi mahasiswa Program Studi Informatika UNTAN.",
+ grp_c4a_stat_staf: "Staf Aktif",
+ grp_c4a_stat_sop: "Jenis SOP",
+ grp_c4a_staff_tag: "Tim Kami",
+ grp_c4a_staff_title: "Staf Pendukung",
+ grp_c4a_staff_subtitle: "Staf yang siap melayani kebutuhan akademik dan operasional laboratorium di Prodi Informatika UNTAN.",
+ grp_c4a_sop_tag: "Prosedur Resmi",
+ grp_c4a_sop_title: "Standar Operasional Prosedur (SOP)",
+ grp_c4a_sop_subtitle: "Standar Operasional Prosedur untuk berbagai kebutuhan administrasi akademik mahasiswa. Gunakan pencarian atau filter untuk menemukan SOP yang Anda butuhkan.",
+ grp_c4a_sop_search_placeholder: "Cari SOP berdasarkan judul...",
+ grp_c4a_sop_chip_semua: "Semua",
+ grp_c4a_sop_chip_akademik: "Akademik",
+ grp_c4a_sop_chip_praktikum: "Praktikum",
+ grp_c4a_sop_empty_title: "SOP tidak ditemukan",
+ grp_c4a_sop_empty_desc: "Coba kata kunci lain atau reset filter pencarian.",
+ grp_c4a_sop_reset_btn: "Reset Pencarian",
+ grp_c4a_faq_tag: "Pertanyaan Umum",
+ grp_c4a_faq_title: "Pertanyaan yang Sering Diajukan",
+ grp_c4a_faq_subtitle: "Temukan jawaban cepat atas pertanyaan umum mahasiswa seputar layanan akademik prodi.",
+ grp_c4a_empty_staff: "Data staf pendukung tidak tersedia saat ini.",
+ grp_c4a_empty_sop: "Data SOP tidak tersedia saat ini.",
+ grp_c4a_empty_faq: "Data FAQ tidak tersedia saat ini.",
+ grp_c4a_label_location: "Lokasi",
+ grp_c4a_label_service_hours: "Jam Layanan",
+ grp_c4a_label_wa_contact: "Kontak WhatsApp",
+ grp_c4a_label_tasks: "Tugas & Tanggung Jawab",
+ grp_c4a_label_send_wa: "Kirim Pesan WA",
+ grp_c4a_label_steps: "Langkah",
+ grp_c4a_label_view_detail: "Lihat Detail",
+ grp_c4a_label_responsible_staff: "Staf Bertanggung Jawab (Bersifat Opsional)",
+ grp_c4a_label_additional_info: "Informasi Tambahan (Bersifat Opsional):",
+ grp_c4a_label_purpose: "Tujuan",
+ grp_c4a_label_requirements: "Persyaratan",
+ grp_c4a_label_procedure: "Alur Prosedur",
+ grp_c4a_sop_showing_all: "Menampilkan {total} SOP",
+ grp_c4a_sop_showing_filtered: "Menampilkan {shown} dari {total} SOP",
},
en: {
@@ -1135,6 +1175,46 @@ const translations = {
kontrib_guideline_3: "Include accurate and verifiable facts and data.",
kontrib_guideline_4: "Avoid plagiarism. Work must be original.",
kontrib_guideline_5: "The editorial team reserves the right to edit content for editorial purposes.",
+
+ // --- Group C4A: Supporting Staff & SOP ---
+ grp_c4a_hero_tag: "ACADEMIC SERVICES \u2022 INFORMATICS UNTAN",
+ grp_c4a_hero_title: "Supporting Staff & Standard Operating Procedures (SOP)",
+ grp_c4a_hero_desc: "This page presents information about academic service officers and administrative procedures for students of the Informatics Study Program at UNTAN.",
+ grp_c4a_stat_staf: "Active Staff",
+ grp_c4a_stat_sop: "SOP Types",
+ grp_c4a_staff_tag: "Our Team",
+ grp_c4a_staff_title: "Supporting Staff",
+ grp_c4a_staff_subtitle: "Staff ready to serve academic and laboratory operational needs at the Informatics Study Program, UNTAN.",
+ grp_c4a_sop_tag: "Official Procedures",
+ grp_c4a_sop_title: "Standard Operating Procedures (SOP)",
+ grp_c4a_sop_subtitle: "Standard Operating Procedures for various student academic administration needs. Use search or filter to find the SOP you need.",
+ grp_c4a_sop_search_placeholder: "Search SOP by title...",
+ grp_c4a_sop_chip_semua: "All",
+ grp_c4a_sop_chip_akademik: "Academic",
+ grp_c4a_sop_chip_praktikum: "Practicum",
+ grp_c4a_sop_empty_title: "No SOP found",
+ grp_c4a_sop_empty_desc: "Try another keyword or reset the search filter.",
+ grp_c4a_sop_reset_btn: "Reset Search",
+ grp_c4a_faq_tag: "Frequently Asked",
+ grp_c4a_faq_title: "Frequently Asked Questions",
+ grp_c4a_faq_subtitle: "Find quick answers to common student questions about the study program's academic services.",
+ grp_c4a_empty_staff: "Staff data is currently unavailable.",
+ grp_c4a_empty_sop: "SOP data is currently unavailable.",
+ grp_c4a_empty_faq: "FAQ data is currently unavailable.",
+ grp_c4a_label_location: "Location",
+ grp_c4a_label_service_hours: "Service Hours",
+ grp_c4a_label_wa_contact: "WhatsApp Contact",
+ grp_c4a_label_tasks: "Tasks & Responsibilities",
+ grp_c4a_label_send_wa: "Send WA Message",
+ grp_c4a_label_steps: "Steps",
+ grp_c4a_label_view_detail: "View Details",
+ grp_c4a_label_responsible_staff: "Responsible Staff (Optional)",
+ grp_c4a_label_additional_info: "Additional Information (Optional):",
+ grp_c4a_label_purpose: "Purpose",
+ grp_c4a_label_requirements: "Requirements",
+ grp_c4a_label_procedure: "Procedure Flow",
+ grp_c4a_sop_showing_all: "Showing {total} SOP",
+ grp_c4a_sop_showing_filtered: "Showing {shown} of {total} SOP",
}
};
diff --git a/groups/C4A/assets/images/staff-female.png b/groups/C4A/assets/images/staff-female.png
new file mode 100644
index 0000000..11b08da
Binary files /dev/null and b/groups/C4A/assets/images/staff-female.png differ
diff --git a/groups/C4A/assets/images/staff-male.png b/groups/C4A/assets/images/staff-male.png
new file mode 100644
index 0000000..bb57ea3
Binary files /dev/null and b/groups/C4A/assets/images/staff-male.png differ
diff --git a/groups/C4A/data/data-faq.json b/groups/C4A/data/data-faq.json
new file mode 100644
index 0000000..61f70e1
--- /dev/null
+++ b/groups/C4A/data/data-faq.json
@@ -0,0 +1,52 @@
+[
+ {
+ "id": 1,
+ "question": "Apa saja syarat administratif agar saya bisa mengikuti perkuliahan?",
+ "answer": "Syarat untuk mengikuti perkuliahan adalah mahasiswa telah melakukan pembayaran UKT, mengisi KRS, dan terdaftar di kelas Edlink."
+ },
+ {
+ "id": 2,
+ "question": "Berapa persentase kehadiran minimal agar bisa mengikuti Ujian Akhir Semester (UAS)?",
+ "answer": "Mahasiswa wajib memenuhi minimal 75% kehadiran dari total pertemuan perkuliahan. Mahasiswa yang tidak memenuhi syarat kehadiran ini tidak diperkenankan mengikuti UAS."
+ },
+ {
+ "id": 3,
+ "question": "Apakah pengisian evaluasi perkuliahan itu wajib?",
+ "answer": "Ya, karena pengisian evaluasi perkuliahan dapat menjadi salah satu syarat untuk mengakses hasil studi sesuai dengan kebijakan yang berlaku. Hasil ini sangat penting untuk perbaikan dan pengembangan kualitas pembelajaran prodi ke depannya."
+ },
+ {
+ "id": 4,
+ "question": "Berapa minimal SKS dan IPK untuk bisa mendaftar Kerja Praktik (KP)?",
+ "answer": "Untuk mendaftar KP, mahasiswa harus sudah lulus minimal 100 SKS dan memiliki Indeks Prestasi Kumulatif (IPK) âĨ 2,00."
+ },
+ {
+ "id": 5,
+ "question": "Apakah ada syarat kelulusan mata kuliah tertentu sebelum saya bisa mengajukan Kerja Praktik (KP)?",
+ "answer": "Ya, selain memenuhi syarat minimal SKS dan IPK, mahasiswa juga diwajibkan telah lulus mata kuliah Penulisan Proposal Tugas Akhir dengan nilai minimal C. Selain itu, mahasiswa juga harus menyerahkan berkas pendukung pengajuan KP seperti KTM, riwayat studi, transkrip nilai, dan surat permohonan."
+ },
+ {
+ "id": 6,
+ "question": "Apa kualifikasi yang dibutuhkan untuk Pembimbing Lapangan di instansi tempat KP?",
+ "answer": "Pembimbing Lapangan dari tempat pelaksanaan KP diwajibkan memiliki kualifikasi pendidikan minimal S1 atau D4."
+ },
+ {
+ "id": 7,
+ "question": "Bolehkah saya mengambil mata kuliah Kerja Praktik (KP) bersamaan dengan Tugas Akhir?",
+ "answer": "Boleh. Mata Kuliah Kerja Praktik (KP) dapat diambil secara bersamaan dengan Tugas Akhir 1 (TA1) dan Tugas Akhir 2 (TA2) dalam satu semester yang sama."
+ },
+ {
+ "id": 8,
+ "question": "Apa saja syarat akademik utama sebelum mengajukan judul Tugas Akhir (Skripsi)?",
+ "answer": "Syarat utamanya adalah mahasiswa harus telah lulus minimal 120 SKS, memiliki IPK minimal 2,00, telah lulus mata kuliah Penulisan Proposal Tugas Akhir dengan nilai minimal C, serta telah mendaftarkan mata kuliah skripsi pada KRS."
+ },
+ {
+ "id": 9,
+ "question": "Siapa yang berhak mendaftar menjadi Asisten Praktikum (Aslab)?",
+ "answer": "Rekrutmen terbuka bagi mahasiswa aktif Program Studi Informatika UNTAN yang telah lulus mata kuliah terkait (dengan nilai minimal sesuai ketentuan Dosen Pengampu) dan berkomitmen mengikuti seluruh jadwal praktikum selama semester berjalan."
+ },
+ {
+ "id": 10,
+ "question": "Bagaimana prosedur meminjam Laboratorium Komputer untuk keperluan kegiatan kampus?",
+ "answer": "Peminjam (dosen atau mahasiswa) harus mengajukan surat permohonan peminjaman kepada staf laboratorium pengelola dan menyampaikan jadwal penggunaannya. Penggunaan lab juga harus didampingi oleh dosen atau asisten praktikum yang bertanggung jawab."
+ }
+]
\ No newline at end of file
diff --git a/groups/C4A/data/data-sop.json b/groups/C4A/data/data-sop.json
new file mode 100644
index 0000000..5c912b4
--- /dev/null
+++ b/groups/C4A/data/data-sop.json
@@ -0,0 +1,197 @@
+[
+ {
+ "tab_id": "kuliah",
+ "tab_number": 1,
+ "category": "akademik",
+ "icon": "fa-chalkboard-teacher",
+ "title": "SOP Pelaksanaan Kuliah",
+ "description": "Mengatur tata cara dan tahapan pelaksanaan perkuliahan mulai dari persiapan hingga evaluasi pembelajaran.",
+ "purpose": "SOP ini bertujuan untuk menjelaskan tata cara pelaksanaan perkuliahan bagi mahasiswa Program Studi Informatika Universitas Tanjungpura.",
+ "requirements": [
+ "Mahasiswa telah melakukan pembayaran UKT",
+ "Mahasiswa telah mengisi KRS",
+ "Mahasiswa terdaftar di kelas Edlink",
+ "Mahasiswa wajib mengikuti perkuliahan dan menyelesaikan tugas tepat waktu",
+ "Mahasiswa wajib mengisi daftar hadir dan memberikan alasan resmi jika tidak hadir",
+ "Mahasiswa memenuhi minimal 70% kehadiran untuk mengikuti UAS"
+ ],
+ "procedures": [
+ "Dosen memasuki ruang perkuliahan sesuai jadwal yang telah ditetapkan",
+ "Dosen mengabsensi mahasiswa dengan mencantumkan keterangan hadir, izin, atau tidak hadir",
+ "Pada pertemuan pertama, dosen membuat kontrak perkuliahan secara tertulis bersama mahasiswa",
+ "Dosen menjelaskan materi perkuliahan sesuai RPS yang telah diserahkan ke program studi",
+ "Mahasiswa mendiskusikan, mencatat, dan mengkritisi materi perkuliahan",
+ "Dosen menyimpulkan materi perkuliahan dan memberikan penugasan"
+ ],
+ "additional_info": "Mahasiswa yang tidak memenuhi persyaratan kehadiran minimal tidak diperkenankan mengikuti Ujian Akhir Semester (UAS) sesuai ketentuan akademik yang berlaku."
+ },
+ {
+ "tab_id": "ujian",
+ "tab_number": 2,
+ "category": "akademik",
+ "icon": "fa-file-signature",
+ "title": "SOP Pelaksanaan Ujian (UTS & UAS)",
+ "description": "Mengatur pedoman pelaksanaan Ujian Tengah Semester (UTS) dan Ujian Akhir Semester (UAS) mulai dari penentuan kriteria evaluasi, pelaksanaan, hingga perekapan nilai.",
+ "purpose": "SOP ini bertujuan untuk memastikan kelancaran proses evaluasi pembelajaran mahasiswa melalui UTS dan UAS agar berjalan tertib, terukur, dan sesuai dengan instruksi dosen pengampu mata kuliah.",
+ "requirements": [
+ "Mahasiswa terdaftar aktif pada mata kuliah yang sedang berjalan pada semester tersebut",
+ "Persentase kehadiran perkuliahan mahasiswa tidak kurang dari 75%"
+ ],
+ "procedures": [
+ "Dosen pengampu menentukan kriteria UTS dan UAS",
+ "Mahasiswa mengikuti UTS atau UAS sesuai instruksi dosen pengampu, dan wajib melakukan presensi",
+ "Mahasiswa mengumpulkan hasil UTS atau UAS sesuai rentang waktu yang diberikan",
+ "Dosen menilai dan merekap pengerjaan UTS atau UAS mahasiswa"
+ ],
+ "additional_info": "Segala bentuk kecurangan saat ujian, maupun tindakan plagiarisme dalam pengerjaan UTS/UAS, dapat mengakibatkan pembatalan nilai atau pemberian sanksi."
+ },
+ {
+ "tab_id": "evaluasi",
+ "tab_number": 3,
+ "category": "akademik",
+ "icon": "fa-chart-line",
+ "title": "SOP Pelaksanaan Evaluasi Pengembangan Perkuliahan",
+ "description": "Mengatur tata cara pelaksanaan evaluasi perkuliahan oleh mahasiswa sebagai sarana umpan balik untuk meningkatkan kualitas proses belajar mengajar.",
+ "purpose": "SOP ini bertujuan memberikan pedoman pelaksanaan evaluasi perkuliahan guna mendukung peningkatan mutu pembelajaran di Program Studi Informatika Universitas Tanjungpura.",
+ "requirements": [
+ "Mahasiswa terdaftar aktif pada semester berjalan",
+ "Telah mengikuti kegiatan perkuliahan pada mata kuliah yang dievaluasi",
+ "Tersedia akses ke sistem evaluasi perkuliahan"
+ ],
+ "procedures": [
+ "Program Studi membuka periode evaluasi perkuliahan",
+ "Mahasiswa mengakses satu untan dan mengisi kuesioner evaluasi perkuliahan",
+ "Sistem merekap hasil evaluasi yang telah diisi mahasiswa",
+ "Program Studi meninjau hasil evaluasi sebagai bahan pengembangan perkuliahan"
+ ],
+ "additional_info": "Hasil evaluasi digunakan sebagai dasar perbaikan dan pengembangan kualitas pembelajaran pada semester berikutnya. Pengisian evaluasi perkuliahan dapat menjadi salah satu syarat untuk mengakses hasil studi sesuai kebijakan yang berlaku."
+ },
+ {
+ "tab_id": "kp",
+ "tab_number": 4,
+ "category": "akademik",
+ "icon": "fa-briefcase",
+ "title": "SOP Kerja Praktik",
+ "description": "Panduan resmi pelaksanaan Kerja Praktek (KP) mulai dari tata cara pendaftaran, pelaksanaan, hingga seminar Kerja Praktek (KP).",
+ "purpose": "SOP ini bertujuan memberikan pedoman kepada seluruh pihak terkait dalam pelaksanaan Kerja Praktek serta meningkatkan efisiensi dan efektivitas pelaksanaannya di Program Studi Informatika Fakultas Teknik Universitas Tanjungpura.",
+ "requirements": [
+ "Telah lulus minimal 100 SKS",
+ "Memiliki IPK minimal 2,00",
+ "Telah lulus mata kuliah Penulisan Proposal Tugas Akhir dengan nilai minimal C",
+ "Menyerahkan berkas pendukung pengajuan KP (KTM, riwayat studi, transkrip, dan surat permohonan)",
+ "Pembimbing Lapangan dari tempat KP memiliki kualifikasi pendidikan minimal S1/D4"
+ ],
+ "procedures": [
+ "Mahasiswa mengusulkan topik, draf proposal, dan menyerahkan berkas KP",
+ "Staf Administrasi memverifikasi kelengkapan berkas",
+ "Ketua Prodi menerbitkan surat pengantar KP",
+ "Mahasiswa melaksanakan KP dan mengikuti bimbingan",
+ "Pembimbing Lapangan memberikan penilaian KP",
+ "Mahasiswa mengajukan seminar dan Prodi menerbitkan undangan",
+ "Mahasiswa melaksanakan seminar KP",
+ "Mahasiswa melakukan revisi laporan akhir KP"
+ ],
+ "staff_responsible": [
+ "đ¤ Staf Administrasi Informatika"
+ ],
+ "additional_info": "Mata Kuliah Kerja Praktik (KP) dapat diambil bersamaan dengan Tugas Akhir 1 (TA1) dan Tugas Akhir 2 (TA2) dalam semester yang sama."
+ },
+ {
+ "tab_id": "ta",
+ "tab_number": 5,
+ "category": "akademik",
+ "icon": "fa-graduation-cap",
+ "title": "SOP Tugas Akhir/Skripsi",
+ "description": "Mengatur tata cara pelaksanaan skripsi mulai dari pengajuan judul hingga ujian dan penyelesaian skripsi mahasiswa.",
+ "purpose": "SOP ini bertujuan untuk memberikan pedoman kepada mahasiswa dan dosen dalam pelaksanaan skripsi agar proses penyusunan skripsi berjalan tertib, terarah, dan sesuai ketentuan akademik.",
+ "requirements": [
+ "Telah lulus minimal 120 SKS",
+ "Memiliki IPK minimal 2,00",
+ "Telah lulus mata kuliah Penulisan Proposal Tugas Akhir dengan nilai minimal C",
+ "Telah mendaftarkan mata kuliah skripsi pada KRS",
+ "Telah menyiapkan judul dan proposal skripsi",
+ "Memiliki dosen pembimbing skripsi",
+ "Melengkapi berkas persyaratan"
+ ],
+ "procedures": [
+ "Mahasiswa mengajukan judul dan proposal skripsi",
+ "Program studi menetapkan dosen pembimbing skripsi",
+ "Mahasiswa melakukan bimbingan dan penyusunan skripsi",
+ "Mahasiswa mengajukan seminar atau sidang skripsi",
+ "Tim penguji dan pembimbing melaksanakan seminar skripsi",
+ "Mahasiswa melakukan revisi skripsi",
+ "Mahasiswa menyerahkan skripsi final"
+ ],
+ "staff_responsible": [
+ "đ¤ Staf Administrasi Informatika"
+ ],
+ "additional_info": "Mahasiswa diberi waktu maksimal 2 semester untuk menyelesaikan Tugas Akhir. Perpanjangan dapat dilakukan dengan persetujuan tertulis dari Kaprodi dan Pembimbing."
+ },
+ {
+ "tab_id": "praktikum",
+ "tab_number": 6,
+ "category": "praktikum",
+ "icon": "fa-flask",
+ "title": "SOP Praktikum Mata Kuliah",
+ "description": "Mengatur tata cara pelaksanaan praktikum mata kuliah agar kegiatan praktikum berjalan tertib, aman, dan sesuai ketentuan pembelajaran.",
+ "purpose": "SOP ini bertujuan untuk menjelaskan tata cara pelaksanaan perkuliahan yang memiliki komponen praktikum pada semester berjalan.",
+ "requirements": [
+ "Terdaftar sebagai peserta mata kuliah yang memiliki komponen praktikum pada semester berjalan",
+ "Mahasiswa membawa perlengkapan praktikum yang diperlukan"
+ ],
+ "procedures": [
+ "Dosen mata kuliah menuntaskan pembahasan materi yang menjadi dasar praktikum",
+ "Mahasiswa mengisi daftar hadir dan menerima penjelasan prosedur praktikum",
+ "Mahasiswa melaksanakan praktikum sesuai modul di bawah pengawasan dosen atau asisten praktikum",
+ "Mahasiswa menyusun dan mengumpulkan laporan praktikum sesuai tenggat waktu",
+ "Dosen atau asisten melakukan penilaian laporan dan hasil praktikum sebagai komponen nilai akhir"
+ ],
+ "additional_info": "Mahasiswa wajib mengikuti seluruh ketentuan praktikum dan menjaga ketertiban serta keamanan selama kegiatan praktikum berlangsung."
+ },
+ {
+ "tab_id": "rekrut_asprak",
+ "tab_number": 7,
+ "category": "praktikum",
+ "icon": "fa-user-plus",
+ "title": "SOP Perekrutan Asisten Praktikum",
+ "description": "Prosedur perekrutan Asisten Praktikum (Aslab) mulai dari pendataan kebutuhan mata kuliah, proses seleksi, hingga pengumuman kelulusan.",
+ "purpose": "SOP ini bertujuan sebagai panduan baku untuk menyelenggarakan rekrutmen Asisten Praktikum secara transparan, guna menyaring mahasiswa Informatika UNTAN yang kompeten dan berkomitmen sesuai kualifikasi mata kuliah.",
+ "requirements": [
+ "Mahasiswa aktif Program Studi Informatika UNTAN",
+ "Lulus mata kuliah terkait dengan nilai minimal ketentuan Dosen Pengampu",
+ "Berkomitmen mengikuti seluruh jadwal dan kontrak praktikum selama semester berjalan"
+ ],
+ "procedures": [
+ "Dosen mendata kebutuhan kuota dan kualifikasi Asisten Praktikum",
+ "Dosen mengumumkan pembukaan rekrutmen asisten praktikum",
+ "Mahasiswa mendaftarkan diri sesuai persyaratan yang diberikan",
+ "Dosen melakukan seleksi wawancara kepada calon asisten praktikum",
+ "Dosen mengumumkan calon yang diterima berdasarkan hasil seleksi"
+ ],
+ "additional_info": "Keputusan hasil seleksi bersifat final dan ditetapkan oleh dosen pengampu mata kuliah. Asisten Praktikum yang terpilih wajib mematuhi seluruh ketentuan yang berlaku selama menjalankan tugas sebagai Asisten Praktikum."
+ },
+ {
+ "tab_id": "labkom",
+ "tab_number": 8,
+ "category": "praktikum",
+ "icon": "fa-desktop",
+ "title": "SOP Peminjaman Laboratorium Komputer",
+ "description": "Mengatur tata cara peminjaman dan penggunaan laboratorium komputer untuk mendukung kegiatan praktikum dan pembelajaran.",
+ "purpose": "SOP ini bertujuan menjelaskan tata cara peminjaman lab komputer dan memastikan peminjaman mendukung kelancaran proses belajar mengajar di Program Studi Informatika Universitas Tanjungpura.",
+ "requirements": [
+ "Melampirkan surat permohonan peminjaman laboratorium",
+ "Terdapat dosen atau asisten praktikum yang bertanggung jawab",
+ "Pengguna menaati tata tertib dan ketentuan penggunaan perangkat laboratorium"
+ ],
+ "procedures": [
+ "Dosen atau mahasiswa mengajukan surat permohonan peminjaman laboratorium kepada pengelola",
+ "Pengguna menyampaikan jadwal penggunaan laboratorium",
+ "Pengelola menyusun jadwal penggunaan laboratorium",
+ "Laboratorium digunakan sesuai jadwal dan ketentuan yang berlaku"
+ ],
+ "staff_responsible": [
+ "đ¤ Staf Laboratorium Informatika"
+ ],
+ "additional_info": "Pengguna laboratorium wajib menjaga kebersihan, keamanan, dan kondisi perangkat laboratorium selama kegiatan berlangsung."
+ }
+]
\ No newline at end of file
diff --git a/groups/C4A/data/data-staff.json b/groups/C4A/data/data-staff.json
new file mode 100644
index 0000000..be7f7fa
--- /dev/null
+++ b/groups/C4A/data/data-staff.json
@@ -0,0 +1,43 @@
+[
+ {
+ "id": 1,
+ "name": "Tuning Rahayu, S.Hut.",
+ "role": "Staf Administrasi Informatika",
+ "image": "assets/images/staff-female.png",
+ "location": "Ruang Administrasi Prodi Informatika",
+ "contact_consent": true,
+ "phone": "6282350250892",
+ "schedule": [
+ {
+ "day": "Senin â Jumat",
+ "time": "07.30â16.00 WIB",
+ "break": "istirahat 12.00â13.00 WIB"
+ }
+ ],
+ "tasks": [
+ "Administrasi mahasiswa",
+ "Informasi berkas akademik"
+ ]
+ },
+ {
+ "id": 2,
+ "name": "Mahyus Safutra, A.Md.",
+ "role": "Staf Laboratorium Informatika",
+ "image": "assets/images/staff-male.png",
+ "location": "Laboratorium Informatika",
+ "contact_consent": true,
+ "phone": "895338672533",
+ "schedule": [
+ {
+ "day": "Senin â Jumat",
+ "time": "07.30â16.00 WIB",
+ "break": "istirahat 12.00â13.00 WIB"
+ }
+ ],
+ "tasks": [
+ "Pengelolaan laboratorium",
+ "Dukungan praktikum",
+ "Peminjaman ruangan dan alat"
+ ]
+ }
+]
\ No newline at end of file
diff --git a/groups/C4A/index.html b/groups/C4A/index.html
index 01a6da5..e6f10bd 100644
--- a/groups/C4A/index.html
+++ b/groups/C4A/index.html
@@ -1,5 +1,6 @@
-īģŋ
+
+
Gunakan paragraf, list, tabel, gambar, dan elemen konten lainnya.
+
+
+
+
LAYANAN AKADEMIK • INFORMATIKA UNTAN
+
+
+ Staf Pendukung &
+ Standar Operasional Prosedur (SOP)
+
+
Halaman ini menampilkan informasi petugas
+ layanan akademik serta
+ prosedur administrasi
+ mahasiswa
+ Program Studi Informatika UNTAN.
+
+
+
0
+
Staf Aktif
+
+
+
+
0
+
Jenis SOP
+
+
+
+
+
+
+
+
+
Tim
+ Kami
+
Staf Pendukung
+
Staf yang siap melayani kebutuhan
+ akademik dan operasional
+ laboratorium di Prodi Informatika UNTAN.
+
+
+
+
+
+
+
+
+
+
Prosedur
+ Resmi
+
Standar Operasional Prosedur (SOP)
+
Standar Operasional Prosedur untuk
+ berbagai kebutuhan administrasi
+ akademik mahasiswa. Gunakan pencarian atau filter untuk menemukan SOP yang Anda butuhkan.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
SOP tidak ditemukan
+
Coba kata kunci lain atau reset
+ filter pencarian.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Pertanyaan Umum
+
Pertanyaan yang Sering Diajukan
+
Temukan jawaban cepat atas pertanyaan umum mahasiswa
+ seputar layanan akademik prodi.
+
+
+
+
+
+
+
+
+
+
@@ -1215,8 +1346,8 @@
-
+
@@ -1312,27 +1443,28 @@
})();
-
+
-
+
+
\ No newline at end of file
diff --git a/groups/C4A/js/data.js b/groups/C4A/js/data.js
new file mode 100644
index 0000000..beb1b65
--- /dev/null
+++ b/groups/C4A/js/data.js
@@ -0,0 +1,56 @@
+/**
+ * Berisi fungsi-fungsi untuk mengambil data (Data Fetching).
+ */
+
+/**
+ * Mengambil data staf pendukung dari berkas JSON.
+ * @returns {Promise>} Daftar objek data staf
+ */
+export async function getStaffData() {
+ try {
+ const response = await fetch('data/data-staff.json');
+ if (!response.ok) {
+ throw new Error('Network response was not ok');
+ }
+ return await response.json();
+ } catch (error) {
+ console.error('Gagal memuat data staf:', error);
+ return [];
+ }
+}
+
+/**
+ * Mengambil data SOP dari berkas JSON.
+ * @returns {Promise>} Daftar objek data SOP
+ */
+export async function getSopData() {
+ try {
+ const response = await fetch('data/data-sop.json');
+ if (!response.ok) {
+ throw new Error('Network response was not ok');
+ }
+ return await response.json();
+ } catch (error) {
+ console.error('Gagal memuat data SOP:', error);
+ return [];
+ }
+}
+
+/**
+ * Mengambil data FAQ dari berkas JSON.
+ * @returns {Promise>} Daftar objek data FAQ
+ */
+export async function getFaqData() {
+ try {
+ const response = await fetch('data/data-faq.json');
+ if (!response.ok) {
+ throw new Error('Network response was not ok');
+ }
+ return await response.json();
+ } catch (error) {
+ console.error('Gagal memuat data FAQ:', error);
+ return [];
+ }
+}
+
+
diff --git a/groups/C4A/js/main.js b/groups/C4A/js/main.js
new file mode 100644
index 0000000..56a0743
--- /dev/null
+++ b/groups/C4A/js/main.js
@@ -0,0 +1,71 @@
+/**
+ * Main Entry Point Kelompok C4A.
+ * Menghubungkan pengambilan data dengan rendering UI dan interaksi halaman.
+ */
+
+import { getStaffData, getSopData, getFaqData } from './data.js';
+import {
+ renderStaffCards,
+ renderSopCards,
+ renderFaqSection,
+ initSopInteraction,
+ initAnimations,
+ initFaq,
+ applySopFilter
+} from './ui.js';
+
+// Cache data secara global untuk mendukung rendering UI
+let cachedStaffData = [];
+let cachedSopData = [];
+let cachedFaqData = [];
+
+/**
+ * Menginisialisasi aplikasi dengan mengambil seluruh data secara pararel,
+ * merender konten awal, serta mendaftarkan event listener interaksi UI.
+ * @returns {Promise}
+ */
+async function initApp() {
+ try {
+ const [staffData, sopData, faqData] = await Promise.all([
+ getStaffData(),
+ getSopData(),
+ getFaqData()
+ ]);
+
+ cachedStaffData = staffData || [];
+ cachedSopData = sopData || [];
+ cachedFaqData = faqData || [];
+
+ renderStaffCards(cachedStaffData);
+ renderSopCards(cachedSopData);
+ renderFaqSection(cachedFaqData);
+
+ initSopInteraction();
+ initFaq();
+
+ // Memberikan sedikit waktu tunda (jeda) agar rendering DOM selesai sebelum memulai animasi.
+ setTimeout(() => {
+ initAnimations();
+ }, 100);
+ } catch (error) {
+ console.error('Terjadi kesalahan saat menginisialisasi aplikasi C4A:', error);
+ }
+}
+
+// Re-render UI saat bahasa berubah (data tetap sama, hanya label UI yang berganti via t())
+document.addEventListener('languageChanged', () => {
+ renderStaffCards(cachedStaffData);
+ renderSopCards(cachedSopData);
+ renderFaqSection(cachedFaqData);
+ initFaq();
+ applySopFilter();
+
+ // Re-inisialisasi observer agar elemen .reveal yang baru di-render mendapat class .visible
+ setTimeout(() => {
+ initAnimations();
+ }, 100);
+});
+
+// Jalankan inisialisasi aplikasi saat DOM siap
+document.addEventListener('DOMContentLoaded', initApp);
+
diff --git a/groups/C4A/js/ui.js b/groups/C4A/js/ui.js
new file mode 100644
index 0000000..7dbca5d
--- /dev/null
+++ b/groups/C4A/js/ui.js
@@ -0,0 +1,639 @@
+// --- Helper Fungsi ---
+
+/**
+ * Helper untuk menerjemahkan string berdasarkan key dari localization.js.
+ * Menggunakan fallback jika key tidak ditemukan atau localization.js tidak aktif.
+ */
+function t(key, fallback) {
+ if (window.t) {
+ const val = window.t(key);
+ if (val !== key) return val;
+ }
+ return fallback;
+}
+
+/**
+ * Normalisasi nomor telepon ke format standard e.g. 628...
+ * @param {string} phone - Nomor telepon mentah
+ * @returns {string} Nomor telepon ternormalisasi
+ */
+function normalizePhone(phone) {
+ let digits = String(phone || '').replace(/\D/g, '');
+ if (digits.startsWith('0')) {
+ digits = `62${digits.slice(1)}`;
+ } else if (digits.startsWith('8')) {
+ digits = `62${digits}`;
+ }
+ return digits;
+}
+
+/**
+ * Format nomor telepon untuk tampilan UI
+ * @param {string} phone - Nomor telepon mentah
+ * @returns {string} Nomor telepon terformat (e.g. +62 8xx-xxxx-xxxx)
+ */
+function formatPhoneForDisplay(phone) {
+ const norm = normalizePhone(phone);
+ if (!norm) return '-';
+ return `+${norm.slice(0, 2)} ${norm.slice(2, 5)}-${norm.slice(5, 9)}-${norm.slice(9)}`;
+}
+
+/**
+ * Memvalidasi apakah nomor telepon valid untuk digunakan di WhatsApp.
+ * @param {string} phone - Nomor telepon mentah
+ * @returns {boolean} True jika nomor valid (seluler Indonesia 10-15 digit)
+ */
+function isValidWhatsAppNumber(phone) {
+ const norm = normalizePhone(phone);
+ return norm.startsWith('628') && norm.length >= 10 && norm.length <= 15;
+}
+
+/**
+ * Enkripsi nomor telepon menggunakan Base64 untuk keamanan kontak.
+ * @param {string} phone - Nomor telepon ternormalisasi
+ * @returns {string} Nomor telepon terenkripsi Base64
+ */
+function encodePhone(phone) {
+ return btoa(normalizePhone(phone));
+}
+
+/**
+ * Dekripsi nomor telepon dari Base64.
+ * @param {string} encoded - Nomor telepon terenkripsi Base64
+ * @returns {string} Nomor telepon terdekripsi
+ */
+function decodePhone(encoded) {
+ try {
+ return atob(encoded);
+ } catch (error) {
+ console.error('Gagal mendekripsi nomor telepon:', error);
+ return '';
+ }
+}
+
+/**
+ * Merender daftar staf pendukung ke dalam container HTML.
+ * @param {Array