{"id":1333,"date":"2017-09-18T04:38:25","date_gmt":"2017-09-17T21:38:25","guid":{"rendered":"https:\/\/dpb-lppm-unipa.com\/?p=1333"},"modified":"2026-09-03T09:08:07","modified_gmt":"2026-09-03T02:08:07","slug":"diseminasi-hasil-monitoring-survei-sosial-masyarakat-dan-survei-ekologi-di-wilayah-taman-nasional-teluk-cenderawasih-kepada-pemerintah-kabupaten-teluk-wondama","status":"publish","type":"post","link":"https:\/\/science4conservation.com\/en\/diseminasi-hasil-monitoring-survei-sosial-masyarakat-dan-survei-ekologi-di-wilayah-taman-nasional-teluk-cenderawasih-kepada-pemerintah-kabupaten-teluk-wondama\/","title":{"rendered":"Diseminasi Hasil Monitoring Survei Sosial Masyarakat dan Survei Ekologi di Wilayah Taman Nasional Teluk Cenderawasih Kepada Pemerintah Kabupaten Teluk Wondama"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"1333\" class=\"elementor elementor-1333\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-10ac68a2 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"10ac68a2\" 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-66 elementor-top-column elementor-element elementor-element-6beb4348\" data-id=\"6beb4348\" 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-4d5bdaf2 elementor-widget elementor-widget-heading\" data-id=\"4d5bdaf2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<p class=\"elementor-heading-title elementor-size-default\">Diseminasi Hasil Monitoring Survei Sosial Masyarakat dan Survei Ekologi di Wilayah Taman Nasional Teluk Cenderawasih Kepada Pemerintah Kabupaten Teluk Wondama<\/p>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5e679a8e elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"5e679a8e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-1a22ae42 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"1a22ae42\" 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-50 elementor-inner-column elementor-element elementor-element-14343dc\" data-id=\"14343dc\" 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-10ef23af elementor-widget elementor-widget-text-editor\" data-id=\"10ef23af\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Penulis<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-67fda5f1 elementor-widget elementor-widget-text-editor\" data-id=\"67fda5f1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>E. Ria Matulessy<\/p>\t\t\t\t\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<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-7837bb18\" data-id=\"7837bb18\" 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-56a56c74 elementor-widget elementor-widget-text-editor\" data-id=\"56a56c74\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Tanggal<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2ad9c586 elementor-widget elementor-widget-text-editor\" data-id=\"2ad9c586\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>18 September 2017<\/p>\t\t\t\t\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 class=\"elementor-element elementor-element-2999f504 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"2999f504\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5a9588f5 elementor-widget elementor-widget-text-editor\" data-id=\"5a9588f5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Kawasan Konservasi Perairan (KKP) di wilayah Bentang Laut Kepala Burung (BLKB) Papua, dalam pengelolaannya tidak hanya ditujukan bagi pelestarian sumber daya perairan tetapi juga untuk peningkatan kesejahteraan masyarakat yang hidup bergantung pada sumber daya perairan di sekitarnya. Dalam upaya untuk memberikan sumbangan pemikiran terhadap keterbatasan pengetahuan mengenai dampak KKP terhadap kondisi baik sumberdaya hayati maupun kesejahteraan masyarakat, Universitas Papua (UNIPA) mendata dampak KKP terhadap masyarakat yang bermukim di daerah BLKB, Papua. Keragaman data ini juga dikaji di antara domain dan kelompok sosial. Dalam melakukan monitoring sosial masyarakat ini , UNIPA didukung olehWWF-Indonesia, Conservation International Indonesia (CII), The Nature Conservancy (TNC) Indonesia, dan WWF-US. Monitoring ini dilakukan pada enam lokasi yang merupakan wilayah kerja ke-tiga LSM tersebut, dimana salah satunya adalah wilayah Taman Nasional Teluk Cenderawasih (TNTC).<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3a8ac3a0 elementor-widget elementor-widget-text-editor\" data-id=\"3a8ac3a0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Diseminasi hasil survei kepada Pemerintah Kabupaten Teluk Wondama dilaksanakan pada hari Senin, 18 September 2017. Diseminasi hasil survei dimulai dengan pemaparan hasil survei oleh tim UNIPA dan dilanjutkan pemaparan hasil survei ekologi oleh tim WWF Kabupaten Teluk Wondama. Kegiatan dilanjutkan dengan diskusi yang berlangsung sekitar dua jam dan diakhiri foto bersama dengan Pemerintah Kabupaten Wondama.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5c46a441 elementor-widget elementor-widget-text-editor\" data-id=\"5c46a441\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Kegiatan ini dihadiri oleh 23 orang yang merupakan perwakilan dari beberapa instansi, antara lain Bappeda, Dinas Sosial, Dinas Pertanian dan Tanaman Pangan, Dinas Perikanan, Dinas Kesehatan, dan Dinas Lingkungan Hidup.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-19387473 elementor-widget elementor-widget-text-editor\" data-id=\"19387473\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Taman Nasional Teluk Cenderawasih dengan luas sebesar 1.4 juta hektar menjadi tempat bagi lebih dari 500 spesies karang dan 950 spesies ikan karang, yang diantaranya merupakan spesies endemik. Kondisi bentik di TNTC relatif baik dengan tutupan karang keras yang cukup tinggi. Rata-rata tutupan karang keras di TNTC lebih tinggi dari pada tutupan karang keras di BLKB, meskipun pecahan karang di TNTC tetap tinggi. Biomass ikan di TNTC cukup bervariasi, yaitu bio- mass ikan botana dan kakatua meningkat pada tahun 2016 juga ikan kakap yang cenderung ada kenaikan meskipun tetap stabil, sedangkan biomass ikan kerapu dan kompele menurun sejak tahun 2011.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b93cd7e elementor-widget elementor-widget-text-editor\" data-id=\"b93cd7e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Berdasarkan pemaparan oleh tim WWF dan diskusi bersama, dapat disimpulkan ukuran ikan menurun atau ukuran ikan menjadi yang lebih kecil disebabkan oleh tingginya kegiatan penangkapan ikan. Ukuran ikan yang lebih kecil tersebut, mengakibatkan tidak terjadinya pemijahan ikan sehingga biomass ikan tidak bertambah.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-516b8203 elementor-widget elementor-widget-text-editor\" data-id=\"516b8203\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Kegiatan monitoring di wilayah TNTC tidak hanya terfokus pada aspek ekologi tetapi juga mencakup aspek sosial ekonomi atau kesejahteraan sosial. Indikator yang digunakan untuk mengukur kesejahteraan sosial adalah ekonomi, kesehatan, pemberdayaan politik, pendidikan, dan budaya. Secara umum bidang ekonomi, kesehatan, dan pendidikan mengalami peningkatan sedangkan pemberdayaan politik dan budaya mengalami penurunan. Penurunan nilai budaya menunjukkan berkurangnya keterikatan emosi masyarakat terhadap lingkungan perairan laut sehingga berdampak juga bagi ekologi.<\/p>\t\t\t\t\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<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-578ca5f5\" data-id=\"578ca5f5\" 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-176bfb7a elementor-widget elementor-widget-text-editor\" data-id=\"176bfb7a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Bagikan Tulisan<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1cb5efdc e-grid-align-left elementor-shape-rounded elementor-grid-0 elementor-widget elementor-widget-social-icons\" data-id=\"1cb5efdc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"social-icons.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-social-icons-wrapper elementor-grid\" role=\"list\">\n\t\t\t\t\t\t\t<span class=\"elementor-grid-item\" role=\"listitem\">\n\t\t\t\t\t<a class=\"elementor-icon elementor-social-icon elementor-social-icon-whatsapp elementor-repeater-item-d96de8e\" href=\"https:\/\/wa.me\/?text=https:\/\/science4conservation.com\/diseminasi-hasil-monitoring-survei-sosial-masyarakat-dan-survei-ekologi-di-wilayah-taman-nasional-teluk-cenderawasih-kepada-pemerintah-kabupaten-teluk-wondama\" target=\"_blank\">\n\t\t\t\t\t\t<span class=\"elementor-screen-only\">Whatsapp<\/span>\n\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fab fa-whatsapp\"><\/i>\t\t\t\t\t<\/a>\n\t\t\t\t<\/span>\n\t\t\t\t\t\t\t<span class=\"elementor-grid-item\" role=\"listitem\">\n\t\t\t\t\t<a class=\"elementor-icon elementor-social-icon elementor-social-icon-x-twitter elementor-repeater-item-ab3fffd\" href=\"https:\/\/twitter.com\/intent\/tweet?url=https:\/\/science4conservation.com\/diseminasi-hasil-monitoring-survei-sosial-masyarakat-dan-survei-ekologi-di-wilayah-taman-nasional-teluk-cenderawasih-kepada-pemerintah-kabupaten-teluk-wondama\" target=\"_blank\">\n\t\t\t\t\t\t<span class=\"elementor-screen-only\">X-twitter<\/span>\n\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fab fa-x-twitter\"><\/i>\t\t\t\t\t<\/a>\n\t\t\t\t<\/span>\n\t\t\t\t\t\t\t<span class=\"elementor-grid-item\" role=\"listitem\">\n\t\t\t\t\t<a class=\"elementor-icon elementor-social-icon elementor-social-icon-facebook elementor-repeater-item-45a9bfd\" href=\"http:\/\/www.facebook.com\/sharer.php?u=https:\/\/science4conservation.com\/diseminasi-hasil-monitoring-survei-sosial-masyarakat-dan-survei-ekologi-di-wilayah-taman-nasional-teluk-cenderawasih-kepada-pemerintah-kabupaten-teluk-wondama\" target=\"_blank\">\n\t\t\t\t\t\t<span class=\"elementor-screen-only\">Facebook<\/span>\n\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fab fa-facebook\"><\/i>\t\t\t\t\t<\/a>\n\t\t\t\t<\/span>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2c65ac29 elementor-alert-info elementor-widget elementor-widget-alert\" data-id=\"2c65ac29\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"alert.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-alert\" role=\"alert\">\n\n\t\t\t\t\t\t<span class=\"elementor-alert-title\">Ikuti Survei<\/span>\n\t\t\t\n\t\t\t\t\t\t<span class=\"elementor-alert-description\">Bantu kami meningkatkan kualitas informasi hasil monitoring sosial dan ekologi di BLKB-Papua.<\/span>\n\t\t\t\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-771bb36f elementor-align-justify elementor-widget elementor-widget-button\" data-id=\"771bb36f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/docs.google.com\/forms\/d\/e\/1FAIpQLScbuXYsL0qM_0SQG0MxRTT1xNXh2re1wi8SWMsOSFVEKu2R7A\/viewform\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Isi Survei<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-37368800 elementor-widget elementor-widget-text-editor\" data-id=\"37368800\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Berita Terkait<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-707e1612 elementor-align-start elementor-icon-list--layout-traditional elementor-list-item-link-full_width elementor-widget elementor-widget-icon-list\" data-id=\"707e1612\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-list.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<ul class=\"elementor-icon-list-items\">\n\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/science4conservation.com\/meilani-menghadapi-tantangan-menemukan-makna\/\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"far fa-newspaper\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Meilani: Menghadapi Tantangan, Menemukan Makna<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/science4conservation.com\/jackson-menjaga-penyu-di-pantai-wembrak\/\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"far fa-newspaper\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Jackson: Menjaga Penyu di Pantai Wembrak<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/science4conservation.com\/melani-kalahkan-gugup-mengajar-dengan-hati-di-kampung-penyu\/\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"far fa-newspaper\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Melani: Kalahkan Gugup, Mengajar dengan Hati di Kampung Penyu<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<\/ul>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-745ee537 elementor-widget elementor-widget-text-editor\" data-id=\"745ee537\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Video Kami<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-48b71ba5 elementor-widget elementor-widget-video\" data-id=\"48b71ba5\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;youtube_url&quot;:&quot;https:\\\/\\\/www.youtube.com\\\/watch?v=yHCJX7I-NYk&amp;t=1s&quot;,&quot;video_type&quot;:&quot;youtube&quot;,&quot;controls&quot;:&quot;yes&quot;}\" data-widget_type=\"video.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-wrapper elementor-open-inline\">\n\t\t\t<div class=\"elementor-video\"><\/div>\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-39b15f61 elementor-align-justify elementor-widget elementor-widget-button\" data-id=\"39b15f61\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/www.youtube.com\/c\/S4CBLKB\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fab fa-youtube\"><\/i>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Subscribe<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8560465 elementor-widget elementor-widget-text-editor\" data-id=\"8560465\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Kategori Lainnya<\/p>\t\t\t\t\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<section class=\"elementor-section elementor-top-section elementor-element elementor-element-17f90e8b elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"17f90e8b\" 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-2c299902\" data-id=\"2c299902\" 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-5dcea3f7 elementor-widget elementor-widget-text-editor\" data-id=\"5dcea3f7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Berita Lainnya<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7bb87849 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"7bb87849\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-741a1dd5 elementor-widget elementor-widget-html\" data-id=\"741a1dd5\" 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<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\r\n\r\n<link\r\n    href=\"https:\/\/fonts.googleapis.com\/css2?family=DM+Sans:wght@400;500;600&family=Poppins:wght@500;600;700&display=swap\"\r\n    rel=\"stylesheet\"\r\n>\r\n\r\n<div class=\"custom-news-section\" id=\"customNewsSlider\">\r\n\r\n    <button\r\n        class=\"custom-news-nav custom-news-prev is-hidden\"\r\n        type=\"button\"\r\n        aria-label=\"Berita sebelumnya\"\r\n    >\r\n        &#10094;\r\n    <\/button>\r\n\r\n    <div class=\"custom-news-track\">\r\n\r\n        <div class=\"custom-news-skeleton initial-skeleton\">\r\n            <div class=\"skeleton-image skeleton-animation\"><\/div>\r\n\r\n            <div class=\"skeleton-content\">\r\n                <div class=\"skeleton-date skeleton-animation\"><\/div>\r\n                <div class=\"skeleton-category skeleton-animation\"><\/div>\r\n                <div class=\"skeleton-title skeleton-animation\"><\/div>\r\n                <div class=\"skeleton-title skeleton-title-short skeleton-animation\"><\/div>\r\n                <div class=\"skeleton-text skeleton-animation\"><\/div>\r\n                <div class=\"skeleton-text skeleton-animation\"><\/div>\r\n                <div class=\"skeleton-text skeleton-text-short skeleton-animation\"><\/div>\r\n                <div class=\"skeleton-button skeleton-animation\"><\/div>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"custom-news-skeleton initial-skeleton\">\r\n            <div class=\"skeleton-image skeleton-animation\"><\/div>\r\n\r\n            <div class=\"skeleton-content\">\r\n                <div class=\"skeleton-date skeleton-animation\"><\/div>\r\n                <div class=\"skeleton-category skeleton-animation\"><\/div>\r\n                <div class=\"skeleton-title skeleton-animation\"><\/div>\r\n                <div class=\"skeleton-title skeleton-title-short skeleton-animation\"><\/div>\r\n                <div class=\"skeleton-text skeleton-animation\"><\/div>\r\n                <div class=\"skeleton-text skeleton-animation\"><\/div>\r\n                <div class=\"skeleton-text skeleton-text-short skeleton-animation\"><\/div>\r\n                <div class=\"skeleton-button skeleton-animation\"><\/div>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"custom-news-skeleton initial-skeleton\">\r\n            <div class=\"skeleton-image skeleton-animation\"><\/div>\r\n\r\n            <div class=\"skeleton-content\">\r\n                <div class=\"skeleton-date skeleton-animation\"><\/div>\r\n                <div class=\"skeleton-category skeleton-animation\"><\/div>\r\n                <div class=\"skeleton-title skeleton-animation\"><\/div>\r\n                <div class=\"skeleton-title skeleton-title-short skeleton-animation\"><\/div>\r\n                <div class=\"skeleton-text skeleton-animation\"><\/div>\r\n                <div class=\"skeleton-text skeleton-animation\"><\/div>\r\n                <div class=\"skeleton-text skeleton-text-short skeleton-animation\"><\/div>\r\n                <div class=\"skeleton-button skeleton-animation\"><\/div>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"custom-news-skeleton initial-skeleton\">\r\n            <div class=\"skeleton-image skeleton-animation\"><\/div>\r\n\r\n            <div class=\"skeleton-content\">\r\n                <div class=\"skeleton-date skeleton-animation\"><\/div>\r\n                <div class=\"skeleton-category skeleton-animation\"><\/div>\r\n                <div class=\"skeleton-title skeleton-animation\"><\/div>\r\n                <div class=\"skeleton-title skeleton-title-short skeleton-animation\"><\/div>\r\n                <div class=\"skeleton-text skeleton-animation\"><\/div>\r\n                <div class=\"skeleton-text skeleton-animation\"><\/div>\r\n                <div class=\"skeleton-text skeleton-text-short skeleton-animation\"><\/div>\r\n                <div class=\"skeleton-button skeleton-animation\"><\/div>\r\n            <\/div>\r\n        <\/div>\r\n\r\n    <\/div>\r\n\r\n    <button\r\n        class=\"custom-news-nav custom-news-next is-hidden\"\r\n        type=\"button\"\r\n        aria-label=\"Berita berikutnya\"\r\n    >\r\n        &#10095;\r\n    <\/button>\r\n\r\n    <div\r\n        class=\"custom-news-pagination\"\r\n        aria-label=\"Navigasi halaman berita\"\r\n    ><\/div>\r\n\r\n<\/div>\r\n\r\n<style>\r\n\r\n.custom-news-section {\r\n    --primary: #6B7280;\r\n    --primary-dark: #1E73BE;\r\n    --primary-soft: rgba(107, 114, 128, 0.12);\r\n    --title-color: #2D2D2D;\r\n    --text-color: #8A8A8A;\r\n\r\n    position: relative;\r\n    width: 100%;\r\n    box-sizing: border-box;\r\n    padding: 20px 5px 15px;\r\n}\r\n\r\n.custom-news-track {\r\n    display: flex;\r\n    align-items: stretch;\r\n    gap: 24px;\r\n    width: 100%;\r\n    overflow-x: auto;\r\n    overflow-y: hidden;\r\n    scroll-behavior: smooth;\r\n    scroll-snap-type: x mandatory;\r\n    scrollbar-width: none;\r\n    padding: 10px 5px 25px;\r\n    box-sizing: border-box;\r\n    touch-action: pan-x;\r\n}\r\n\r\n.custom-news-track::-webkit-scrollbar {\r\n    display: none;\r\n}\r\n\r\n.custom-news-card {\r\n    flex: 0 0 calc((100% - 72px - 90px) \/ 4);\r\n    min-width: 0;\r\n    background: #FFFFFF;\r\n    border-radius: 20px;\r\n    overflow: hidden;\r\n    display: flex;\r\n    flex-direction: column;\r\n    scroll-snap-align: start;\r\n\r\n    box-shadow:\r\n        0 8px 30px rgba(15, 23, 42, 0.08);\r\n\r\n    transition:\r\n        transform 0.25s ease,\r\n        box-shadow 0.25s ease;\r\n}\r\n\r\n.custom-news-card:hover {\r\n    transform: translateY(-5px);\r\n\r\n    box-shadow:\r\n        0 15px 38px rgba(15, 23, 42, 0.13);\r\n}\r\n\r\n.custom-news-card.news-card-enter {\r\n    animation:\r\n        newsCardEnter\r\n        0.55s\r\n        ease\r\n        both;\r\n}\r\n\r\n@keyframes newsCardEnter {\r\n\r\n    0% {\r\n        opacity: 0;\r\n        transform: translateY(15px);\r\n    }\r\n\r\n    100% {\r\n        opacity: 1;\r\n        transform: translateY(0);\r\n    }\r\n\r\n}\r\n\r\n.custom-news-image {\r\n    display: block;\r\n    width: 100%;\r\n    aspect-ratio: 1080 \/ 780;\r\n    background: #E5E7EB;\r\n    overflow: hidden;\r\n    flex-shrink: 0;\r\n}\r\n\r\n.custom-news-image img {\r\n    display: block;\r\n    width: 100%;\r\n    height: 100%;\r\n    object-fit: cover;\r\n\r\n    transition:\r\n        transform 0.4s ease;\r\n}\r\n\r\n.custom-news-card:hover .custom-news-image img {\r\n    transform: scale(1.04);\r\n}\r\n\r\n.custom-news-placeholder {\r\n    width: 100%;\r\n    height: 100%;\r\n\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n\r\n    background:\r\n        linear-gradient(\r\n            135deg,\r\n            #9CA3AF,\r\n            #6B7280\r\n        );\r\n\r\n    color: #FFFFFF;\r\n    font-family: 'Poppins', sans-serif;\r\n    font-size: 18px;\r\n    font-weight: 600;\r\n}\r\n\r\n.custom-news-content {\r\n    flex: 1;\r\n    display: flex;\r\n    flex-direction: column;\r\n    padding: 22px 21px;\r\n    box-sizing: border-box;\r\n}\r\n\r\n.custom-news-date {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 8px;\r\n    margin-bottom: 12px;\r\n    color: var(--text-color);\r\n    font-family: 'DM Sans', sans-serif;\r\n    font-size: 14px;\r\n    line-height: 1.4;\r\n    font-weight: 500;\r\n}\r\n\r\n.custom-news-date svg {\r\n    width: 18px;\r\n    height: 18px;\r\n    min-width: 18px;\r\n    color: #9CA3AF;\r\n}\r\n\r\n.custom-news-category {\r\n    display: block;\r\n    align-self: flex-start;\r\n    width: fit-content;\r\n    max-width: 100%;\r\n    padding: 6px 11px;\r\n    margin-bottom: 12px;\r\n    box-sizing: border-box;\r\n    border-radius: 999px;\r\n    background: #E5E7EB;\r\n    color: #4B5563;\r\n    font-family: 'DM Sans', sans-serif;\r\n    font-size: 11px;\r\n    line-height: 1.3;\r\n    font-weight: 600;\r\n    overflow: hidden;\r\n    cursor: default;\r\n}\r\n\r\n.custom-news-category-text {\r\n    display: block;\r\n    width: max-content;\r\n    white-space: nowrap;\r\n    transform: translateX(0);\r\n}\r\n\r\n.custom-news-category.has-overflow:hover\r\n.custom-news-category-text {\r\n    animation:\r\n        categoryMarquee\r\n        var(--marquee-duration, 5s)\r\n        linear\r\n        infinite\r\n        alternate;\r\n}\r\n\r\n@keyframes categoryMarquee {\r\n\r\n    0% {\r\n        transform: translateX(0);\r\n    }\r\n\r\n    100% {\r\n        transform:\r\n            translateX(\r\n                calc(\r\n                    0px -\r\n                    var(--marquee-distance)\r\n                )\r\n            );\r\n    }\r\n\r\n}\r\n\r\n.custom-news-title {\r\n    margin: 0 0 11px;\r\n    font-family: 'Poppins', sans-serif;\r\n    font-size: 20px;\r\n    line-height: 1.35;\r\n    font-weight: 600;\r\n\r\n    display: -webkit-box;\r\n    -webkit-box-orient: vertical;\r\n    -webkit-line-clamp: 2;\r\n\r\n    overflow: hidden;\r\n}\r\n\r\n.custom-news-title a {\r\n    color: var(--title-color);\r\n    font-family: 'Poppins', sans-serif;\r\n    font-size: inherit;\r\n    line-height: inherit;\r\n    font-weight: inherit;\r\n    text-decoration: none;\r\n\r\n    transition:\r\n        color 0.2s ease;\r\n}\r\n\r\n.custom-news-title a:hover {\r\n    color: #1E73BE;\r\n}\r\n\r\n.custom-news-excerpt {\r\n    margin-bottom: 20px;\r\n    color: var(--text-color);\r\n    font-family: 'DM Sans', sans-serif;\r\n    font-size: 14px;\r\n    line-height: 1.65;\r\n    font-weight: 400;\r\n\r\n    display: -webkit-box;\r\n    -webkit-box-orient: vertical;\r\n    -webkit-line-clamp: 3;\r\n\r\n    overflow: hidden;\r\n}\r\n\r\n.custom-news-button-area {\r\n    margin-top: auto;\r\n}\r\n\r\n.custom-news-button {\r\n    display: inline-flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    gap: 10px;\r\n    padding: 11px 21px;\r\n    background: #FFFFFF;\r\n    border-radius: 999px;\r\n    color: #4B5563 !important;\r\n    text-decoration: none !important;\r\n    font-family: 'Poppins', sans-serif;\r\n    font-size: 14px;\r\n    line-height: 1.4;\r\n    font-weight: 600;\r\n\r\n    transition:\r\n        background 0.2s ease,\r\n        transform 0.2s ease;\r\n}\r\n\r\n.custom-news-button:hover {\r\n    background: #1E73BE;\r\n    color: #FFFFFF !important;\r\n    transform: translateY(-2px);\r\n}\r\n\r\n.custom-news-button-arrow {\r\n    font-family: 'Poppins', sans-serif;\r\n    font-size: 18px;\r\n    line-height: 1;\r\n\r\n    transition:\r\n        transform 0.2s ease;\r\n}\r\n\r\n.custom-news-button:hover\r\n.custom-news-button-arrow {\r\n    transform: translateX(4px);\r\n}\r\n\r\n.custom-news-nav {\r\n    position: absolute;\r\n    top: 47%;\r\n    z-index: 20;\r\n    width: 56px;\r\n    height: 56px;\r\n    padding: 0;\r\n\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n\r\n    transform: translateY(-50%);\r\n\r\n    border: none;\r\n    outline: none;\r\n    border-radius: 50%;\r\n    background: #FFFFFF;\r\n    color: #6B7280;\r\n    font-size: 24px;\r\n    line-height: 1;\r\n    cursor: pointer;\r\n\r\n    box-shadow:\r\n        0 10px 28px rgba(15, 23, 42, 0.14);\r\n\r\n    transition:\r\n        background 0.2s ease,\r\n        color 0.2s ease;\r\n}\r\n\r\n.custom-news-nav:hover {\r\n    background: #1E73BE;\r\n    color: #FFFFFF;\r\n}\r\n\r\n.custom-news-prev {\r\n    left: -28px;\r\n}\r\n\r\n.custom-news-next {\r\n    right: -28px;\r\n}\r\n\r\n.custom-news-nav.is-hidden {\r\n    display: none !important;\r\n}\r\n\r\n.custom-news-pagination {\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    flex-wrap: wrap;\r\n    gap: 8px;\r\n    min-height: 18px;\r\n    margin-top: 2px;\r\n}\r\n\r\n.custom-news-dot {\r\n    width: 8px;\r\n    height: 8px;\r\n    padding: 0;\r\n    border: none;\r\n    border-radius: 999px;\r\n\r\n    background:\r\n        rgba(107, 114, 128, 0.25);\r\n\r\n    cursor: pointer;\r\n\r\n    transition:\r\n        width 0.25s ease,\r\n        background 0.25s ease;\r\n}\r\n\r\n.custom-news-dot:hover {\r\n    background:\r\n        rgba(30, 115, 190, 0.6);\r\n}\r\n\r\n.custom-news-dot.is-active {\r\n    width: 24px;\r\n    background: #6B7280;\r\n}\r\n\r\n.custom-news-skeleton {\r\n    flex: 0 0 calc((100% - 72px - 90px) \/ 4);\r\n    min-width: 0;\r\n    background: #FFFFFF;\r\n    border-radius: 20px;\r\n    overflow: hidden;\r\n    scroll-snap-align: start;\r\n\r\n    box-shadow:\r\n        0 8px 30px rgba(15, 23, 42, 0.06);\r\n}\r\n\r\n.skeleton-image {\r\n    width: 100%;\r\n    aspect-ratio: 1080 \/ 780;\r\n}\r\n\r\n.skeleton-content {\r\n    padding: 22px 21px;\r\n}\r\n\r\n.skeleton-date {\r\n    width: 42%;\r\n    height: 13px;\r\n    margin-bottom: 15px;\r\n    border-radius: 20px;\r\n}\r\n\r\n.skeleton-category {\r\n    width: 58%;\r\n    height: 22px;\r\n    margin-bottom: 14px;\r\n    border-radius: 999px;\r\n}\r\n\r\n.skeleton-title {\r\n    width: 95%;\r\n    height: 17px;\r\n    margin-bottom: 9px;\r\n    border-radius: 20px;\r\n}\r\n\r\n.skeleton-title-short {\r\n    width: 67%;\r\n    margin-bottom: 20px;\r\n}\r\n\r\n.skeleton-text {\r\n    width: 100%;\r\n    height: 10px;\r\n    margin-bottom: 9px;\r\n    border-radius: 20px;\r\n}\r\n\r\n.skeleton-text-short {\r\n    width: 70%;\r\n    margin-bottom: 24px;\r\n}\r\n\r\n.skeleton-button {\r\n    width: 155px;\r\n    max-width: 85%;\r\n    height: 42px;\r\n    border-radius: 999px;\r\n}\r\n\r\n.skeleton-animation {\r\n    position: relative;\r\n    overflow: hidden;\r\n    background: #E5E7EB;\r\n}\r\n\r\n.skeleton-animation::after {\r\n    content: '';\r\n    position: absolute;\r\n    top: 0;\r\n    left: -160%;\r\n    width: 140%;\r\n    height: 100%;\r\n\r\n    background:\r\n        linear-gradient(\r\n            90deg,\r\n            rgba(255, 255, 255, 0),\r\n            rgba(255, 255, 255, 0.85),\r\n            rgba(107, 114, 128, 0.12),\r\n            rgba(255, 255, 255, 0.85),\r\n            rgba(255, 255, 255, 0)\r\n        );\r\n\r\n    animation:\r\n        newsShimmer\r\n        1.25s\r\n        infinite;\r\n}\r\n\r\n@keyframes newsShimmer {\r\n\r\n    0% {\r\n        left: -160%;\r\n    }\r\n\r\n    100% {\r\n        left: 160%;\r\n    }\r\n\r\n}\r\n\r\n.custom-news-error {\r\n    width: 100%;\r\n    padding: 50px 20px;\r\n    box-sizing: border-box;\r\n    text-align: center;\r\n    color: var(--text-color);\r\n    font-family: 'DM Sans', sans-serif;\r\n    font-size: 14px;\r\n}\r\n\r\n@media (max-width: 1024px) {\r\n\r\n    .custom-news-card {\r\n        flex:\r\n            0 0 calc((100% - 24px - 70px) \/ 2);\r\n    }\r\n\r\n    .custom-news-skeleton {\r\n        flex:\r\n            0 0 calc((100% - 24px - 70px) \/ 2);\r\n    }\r\n\r\n    .custom-news-prev {\r\n        left: 8px;\r\n    }\r\n\r\n    .custom-news-next {\r\n        right: 8px;\r\n    }\r\n\r\n}\r\n\r\n@media (max-width: 767px) {\r\n\r\n    .custom-news-section {\r\n        padding: 5px 0 12px;\r\n    }\r\n\r\n    .custom-news-track {\r\n        gap: 16px;\r\n        padding: 10px 16px 18px;\r\n    }\r\n\r\n    .custom-news-card {\r\n        flex: 0 0 82%;\r\n        border-radius: 17px;\r\n    }\r\n\r\n    .custom-news-skeleton {\r\n        flex: 0 0 82%;\r\n        border-radius: 17px;\r\n    }\r\n\r\n    .custom-news-content {\r\n        padding: 19px 18px 20px;\r\n    }\r\n\r\n    .skeleton-content {\r\n        padding: 19px 18px 20px;\r\n    }\r\n\r\n    .custom-news-title {\r\n        font-size: 18px;\r\n    }\r\n\r\n    .custom-news-nav {\r\n        display: none !important;\r\n    }\r\n\r\n    .custom-news-pagination {\r\n        padding: 0 16px;\r\n    }\r\n\r\n}\r\n\r\n@media (prefers-reduced-motion: reduce) {\r\n\r\n    .custom-news-track {\r\n        scroll-behavior: auto;\r\n    }\r\n\r\n    .skeleton-animation::after {\r\n        animation: none;\r\n    }\r\n\r\n    .custom-news-card.news-card-enter {\r\n        animation: none;\r\n    }\r\n\r\n    .custom-news-category.has-overflow:hover\r\n    .custom-news-category-text {\r\n        animation: none;\r\n        transform: translateX(0);\r\n    }\r\n\r\n}\r\n\r\n<\/style>\r\n\r\n\r\n<script>\r\n\r\n(function () {\r\n\r\n    const CATEGORY_NAMES = [\r\n\r\n        'Hubungan Publik Kehidupan Sosial Masyarakat',\r\n\r\n        'Hubungan Publik Pemerintah Daerah Kabupaten',\r\n\r\n        'Konservasi Penyu Belimbing Diseminasi',\r\n\r\n        'Konservasi Penyu Belimbing Inisiasi Konservasi Penyu di Papua New Guinea',\r\n\r\n        'Konservasi Penyu Belimbing Monitoring',\r\n\r\n        'Konservasi Penyu Belimbing Training',\r\n\r\n\r\n        'Monitoring Ekologi Diseminasi',\r\n\r\n        'Monitoring Ekologi EKKP3K',\r\n\r\n        'Monitoring Ekologi Reef Health Monitoring',\r\n\r\n        'Monitoring Ekologi Training',\r\n\r\n        'Monitoring Sosial Diseminasi',\r\n\r\n        'Monitoring Sosial EKKP3K',\r\n\r\n        'Monitoring Sosial Survei',\r\n\r\n        'Monitoring Sosial Training',\r\n\r\n        'Outreach - Conservation Goes to School',\r\n\r\n        'Outreach - Inovasi Kegiatan Penjangkauan Masyarakat',\r\n\r\n        'Outreach - Nonton Bareng Film Konservasi',\r\n\r\n        'Pemberdayaan Masyarakat Kesehatan',\r\n\r\n        'Pemberdayaan Masyarakat Pendidikan',\r\n\r\n        'Pemberdayaan Masyarakat Peningkatan Ekonomi Masyarakat',\r\n\r\n        'The Consumer Survey - Survei'\r\n\r\n    ];\r\n\r\n\r\n    const POSTS_PER_REQUEST =\r\n        4;\r\n\r\n\r\n    const slider =\r\n        document.getElementById(\r\n            'customNewsSlider'\r\n        );\r\n\r\n\r\n    if (!slider) {\r\n        return;\r\n    }\r\n\r\n\r\n    const track =\r\n        slider.querySelector(\r\n            '.custom-news-track'\r\n        );\r\n\r\n\r\n    const prevButton =\r\n        slider.querySelector(\r\n            '.custom-news-prev'\r\n        );\r\n\r\n\r\n    const nextButton =\r\n        slider.querySelector(\r\n            '.custom-news-next'\r\n        );\r\n\r\n\r\n    const pagination =\r\n        slider.querySelector(\r\n            '.custom-news-pagination'\r\n        );\r\n\r\n\r\n    const apiLink =\r\n        document.querySelector(\r\n            'link[rel=\"https:\/\/api.w.org\/\"]'\r\n        );\r\n\r\n\r\n    let apiRoot;\r\n\r\n\r\n    if (\r\n        apiLink &&\r\n        apiLink.href\r\n    ) {\r\n\r\n        if (\r\n            apiLink.href.endsWith('\/')\r\n        ) {\r\n\r\n            apiRoot =\r\n                apiLink.href.slice(\r\n                    0,\r\n                    -1\r\n                );\r\n\r\n        } else {\r\n\r\n            apiRoot =\r\n                apiLink.href;\r\n\r\n        }\r\n\r\n    } else {\r\n\r\n        apiRoot =\r\n            window.location.origin +\r\n            '\/wp-json';\r\n\r\n    }\r\n\r\n\r\n    const wpAPI =\r\n        apiRoot +\r\n        '\/wp\/v2';\r\n\r\n\r\n    let categoryIDs =\r\n        [];\r\n\r\n\r\n    let categoryMap =\r\n        {};\r\n\r\n\r\n    let currentPage =\r\n        1;\r\n\r\n\r\n    let totalPages =\r\n        1;\r\n\r\n\r\n    let loading =\r\n        false;\r\n\r\n\r\n    let autoLoadTimer;\r\n\r\n\r\n    function stripHTML(\r\n        html\r\n    ) {\r\n\r\n        const element =\r\n            document.createElement(\r\n                'div'\r\n            );\r\n\r\n\r\n        element.innerHTML =\r\n            html || '';\r\n\r\n\r\n        return (\r\n            element.textContent ||\r\n            element.innerText ||\r\n            ''\r\n        ).trim();\r\n\r\n    }\r\n\r\n\r\n    function escapeHTML(\r\n        text\r\n    ) {\r\n\r\n        const element =\r\n            document.createElement(\r\n                'div'\r\n            );\r\n\r\n\r\n        element.textContent =\r\n            text || '';\r\n\r\n\r\n        return element.innerHTML;\r\n\r\n    }\r\n\r\n\r\n    function truncateText(\r\n        text,\r\n        max\r\n    ) {\r\n\r\n        if (!text) {\r\n\r\n            return '';\r\n\r\n        }\r\n\r\n\r\n        if (\r\n            text.length <= max\r\n        ) {\r\n\r\n            return text;\r\n\r\n        }\r\n\r\n\r\n        let result =\r\n            text.substring(\r\n                0,\r\n                max\r\n            );\r\n\r\n\r\n        const lastSpace =\r\n            result.lastIndexOf(\r\n                ' '\r\n            );\r\n\r\n\r\n        if (\r\n            lastSpace > 0\r\n        ) {\r\n\r\n            result =\r\n                result.substring(\r\n                    0,\r\n                    lastSpace\r\n                );\r\n\r\n        }\r\n\r\n\r\n        return (\r\n            result.trim() +\r\n            '...'\r\n        );\r\n\r\n    }\r\n\r\n\r\n    function formatDate(\r\n        dateString\r\n    ) {\r\n\r\n        const date =\r\n            new Date(\r\n                dateString\r\n            );\r\n\r\n\r\n        const months = [\r\n            'Jan',\r\n            'Feb',\r\n            'Mar',\r\n            'Apr',\r\n            'Mei',\r\n            'Jun',\r\n            'Jul',\r\n            'Agu',\r\n            'Sep',\r\n            'Okt',\r\n            'Nov',\r\n            'Des'\r\n        ];\r\n\r\n\r\n        return (\r\n            String(\r\n                date.getDate()\r\n            ).padStart(\r\n                2,\r\n                '0'\r\n            )\r\n            +\r\n            ' '\r\n            +\r\n            months[\r\n                date.getMonth()\r\n            ]\r\n            +\r\n            ' '\r\n            +\r\n            date.getFullYear()\r\n        );\r\n\r\n    }\r\n\r\n\r\n    function normalizeText(\r\n        text\r\n    ) {\r\n\r\n        let result =\r\n            stripHTML(\r\n                text || ''\r\n            )\r\n            .trim()\r\n            .toLowerCase();\r\n\r\n\r\n        const charactersToRemove = [\r\n            '.',\r\n            ',',\r\n            ':',\r\n            ';',\r\n            '!',\r\n            '?',\r\n            '\"',\r\n            \"'\",\r\n            '(',\r\n            ')',\r\n            '[',\r\n            ']',\r\n            '{',\r\n            '}',\r\n            '-',\r\n            '\u2013',\r\n            '\u2014'\r\n        ];\r\n\r\n\r\n        charactersToRemove.forEach(\r\n            function (\r\n                character\r\n            ) {\r\n\r\n                result =\r\n                    result\r\n                        .split(\r\n                            character\r\n                        )\r\n                        .join(\r\n                            ' '\r\n                        );\r\n\r\n            }\r\n        );\r\n\r\n\r\n        while (\r\n            result.includes(\r\n                '  '\r\n            )\r\n        ) {\r\n\r\n            result =\r\n                result.replace(\r\n                    '  ',\r\n                    ' '\r\n                );\r\n\r\n        }\r\n\r\n\r\n        return result.trim();\r\n\r\n    }\r\n\r\n\r\n    function getSmartExcerpt(\r\n        post\r\n    ) {\r\n\r\n        const fallbackExcerpt =\r\n            truncateText(\r\n                stripHTML(\r\n                    post.excerpt &&\r\n                    post.excerpt.rendered\r\n                        ? post.excerpt.rendered\r\n                        : ''\r\n                ),\r\n                150\r\n            );\r\n\r\n\r\n        if (\r\n            !post.content ||\r\n            !post.content.rendered\r\n        ) {\r\n\r\n            return fallbackExcerpt;\r\n\r\n        }\r\n\r\n\r\n        const postTitle =\r\n            normalizeText(\r\n                post.title &&\r\n                post.title.rendered\r\n                    ? post.title.rendered\r\n                    : ''\r\n            );\r\n\r\n\r\n        const container =\r\n            document.createElement(\r\n                'div'\r\n            );\r\n\r\n\r\n        container.innerHTML =\r\n            post.content.rendered;\r\n\r\n\r\n        const paragraphs =\r\n            Array.from(\r\n                container.querySelectorAll(\r\n                    'p'\r\n                )\r\n            );\r\n\r\n\r\n        const ignoredStarts = [\r\n\r\n            'seri cerita jejak penjaga bentang laut',\r\n\r\n            'cerita lapangan dari para pendamping',\r\n\r\n            'dalam seri',\r\n\r\n            'penulis',\r\n\r\n            'tanggal',\r\n\r\n            'oleh',\r\n\r\n            'bagikan tulisan',\r\n\r\n            'baca juga',\r\n\r\n            'share this',\r\n\r\n            'image'\r\n\r\n        ];\r\n\r\n\r\n        for (\r\n            let i = 0;\r\n            i < paragraphs.length;\r\n            i++\r\n        ) {\r\n\r\n            const text =\r\n                stripHTML(\r\n                    paragraphs[\r\n                        i\r\n                    ].innerHTML\r\n                ).trim();\r\n\r\n\r\n            if (\r\n                !text ||\r\n                text.length < 45\r\n            ) {\r\n\r\n                continue;\r\n\r\n            }\r\n\r\n\r\n            const normalizedText =\r\n                normalizeText(\r\n                    text\r\n                );\r\n\r\n\r\n            if (\r\n                !normalizedText\r\n            ) {\r\n\r\n                continue;\r\n\r\n            }\r\n\r\n\r\n            if (\r\n                postTitle &&\r\n                normalizedText ===\r\n                postTitle\r\n            ) {\r\n\r\n                continue;\r\n\r\n            }\r\n\r\n\r\n            if (\r\n                postTitle &&\r\n                normalizedText.length > 25 &&\r\n                postTitle.includes(\r\n                    normalizedText\r\n                )\r\n            ) {\r\n\r\n                continue;\r\n\r\n            }\r\n\r\n\r\n            if (\r\n                postTitle &&\r\n                normalizedText.includes(\r\n                    postTitle\r\n                ) &&\r\n                normalizedText.length <\r\n                postTitle.length + 60\r\n            ) {\r\n\r\n                continue;\r\n\r\n            }\r\n\r\n\r\n            let ignored =\r\n                false;\r\n\r\n\r\n            for (\r\n                let j = 0;\r\n                j < ignoredStarts.length;\r\n                j++\r\n            ) {\r\n\r\n                if (\r\n                    normalizedText.startsWith(\r\n                        ignoredStarts[\r\n                            j\r\n                        ]\r\n                    )\r\n                ) {\r\n\r\n                    ignored =\r\n                        true;\r\n\r\n                    break;\r\n\r\n                }\r\n\r\n            }\r\n\r\n\r\n            if (\r\n                ignored\r\n            ) {\r\n\r\n                continue;\r\n\r\n            }\r\n\r\n\r\n            return truncateText(\r\n                text,\r\n                150\r\n            );\r\n\r\n        }\r\n\r\n\r\n        return fallbackExcerpt;\r\n\r\n    }\r\n\r\n\r\n    function getFeaturedImage(\r\n        post\r\n    ) {\r\n\r\n        try {\r\n\r\n            const media =\r\n                post._embedded[\r\n                    'wp:featuredmedia'\r\n                ][0];\r\n\r\n\r\n            const sizes =\r\n                media.media_details &&\r\n                media.media_details.sizes\r\n                    ? media.media_details.sizes\r\n                    : {};\r\n\r\n\r\n            if (\r\n                sizes.medium_large\r\n            ) {\r\n\r\n                return (\r\n                    sizes.medium_large\r\n                        .source_url\r\n                );\r\n\r\n            }\r\n\r\n\r\n            if (\r\n                sizes.medium\r\n            ) {\r\n\r\n                return (\r\n                    sizes.medium\r\n                        .source_url\r\n                );\r\n\r\n            }\r\n\r\n\r\n            if (\r\n                sizes.large\r\n            ) {\r\n\r\n                return (\r\n                    sizes.large\r\n                        .source_url\r\n                );\r\n\r\n            }\r\n\r\n\r\n            return (\r\n                media.source_url ||\r\n                ''\r\n            );\r\n\r\n\r\n        } catch (\r\n            error\r\n        ) {\r\n\r\n            return '';\r\n\r\n        }\r\n\r\n    }\r\n\r\n\r\n    function createCategoryHash() {\r\n\r\n        const text =\r\n            CATEGORY_NAMES\r\n                .map(\r\n                    function (\r\n                        name\r\n                    ) {\r\n\r\n                        return name\r\n                            .trim()\r\n                            .toLowerCase();\r\n\r\n                    }\r\n                )\r\n                .join(\r\n                    '|'\r\n                );\r\n\r\n\r\n        let hash =\r\n            0;\r\n\r\n\r\n        for (\r\n            let i = 0;\r\n            i < text.length;\r\n            i++\r\n        ) {\r\n\r\n            hash =\r\n                (\r\n                    hash * 31 +\r\n                    text.charCodeAt(\r\n                        i\r\n                    )\r\n                ) >>> 0;\r\n\r\n        }\r\n\r\n\r\n        return String(\r\n            hash\r\n        );\r\n\r\n    }\r\n\r\n\r\n    async function getCategoryIDs() {\r\n\r\n        const cacheKey =\r\n            'wp_news_multi_categories_' +\r\n            createCategoryHash();\r\n\r\n\r\n        const cached =\r\n            localStorage.getItem(\r\n                cacheKey\r\n            );\r\n\r\n\r\n        if (\r\n            cached\r\n        ) {\r\n\r\n            try {\r\n\r\n                const parsed =\r\n                    JSON.parse(\r\n                        cached\r\n                    );\r\n\r\n\r\n                if (\r\n                    parsed.ids &&\r\n                    parsed.map\r\n                ) {\r\n\r\n                    categoryIDs =\r\n                        parsed.ids;\r\n\r\n\r\n                    categoryMap =\r\n                        parsed.map;\r\n\r\n\r\n                    return categoryIDs;\r\n\r\n                }\r\n\r\n            } catch (\r\n                error\r\n            ) {\r\n\r\n                localStorage.removeItem(\r\n                    cacheKey\r\n                );\r\n\r\n            }\r\n\r\n        }\r\n\r\n\r\n        let page =\r\n            1;\r\n\r\n\r\n        let categoryTotalPages =\r\n            1;\r\n\r\n\r\n        let allCategories =\r\n            [];\r\n\r\n\r\n        do {\r\n\r\n            const url =\r\n                wpAPI +\r\n                '\/categories' +\r\n                '?per_page=100' +\r\n                '&page=' +\r\n                page +\r\n                '&_fields=id,name,slug';\r\n\r\n\r\n            const response =\r\n                await fetch(\r\n                    url\r\n                );\r\n\r\n\r\n            if (\r\n                !response.ok\r\n            ) {\r\n\r\n                throw new Error(\r\n                    'Kategori tidak dapat dimuat'\r\n                );\r\n\r\n            }\r\n\r\n\r\n            const categories =\r\n                await response.json();\r\n\r\n\r\n            allCategories =\r\n                allCategories.concat(\r\n                    categories\r\n                );\r\n\r\n\r\n            categoryTotalPages =\r\n                Number(\r\n                    response.headers.get(\r\n                        'X-WP-TotalPages'\r\n                    ) || 1\r\n                );\r\n\r\n\r\n            page++;\r\n\r\n\r\n        } while (\r\n            page <=\r\n            categoryTotalPages\r\n        );\r\n\r\n\r\n        const wantedNames =\r\n            CATEGORY_NAMES.map(\r\n                function (\r\n                    name\r\n                ) {\r\n\r\n                    return name\r\n                        .trim()\r\n                        .toLowerCase();\r\n\r\n                }\r\n            );\r\n\r\n\r\n        const selectedCategories =\r\n            allCategories.filter(\r\n                function (\r\n                    category\r\n                ) {\r\n\r\n                    return wantedNames.includes(\r\n                        category.name\r\n                            .trim()\r\n                            .toLowerCase()\r\n                    );\r\n\r\n                }\r\n            );\r\n\r\n\r\n        categoryIDs =\r\n            selectedCategories.map(\r\n                function (\r\n                    category\r\n                ) {\r\n\r\n                    return category.id;\r\n\r\n                }\r\n            );\r\n\r\n\r\n        categoryMap =\r\n            {};\r\n\r\n\r\n        selectedCategories.forEach(\r\n            function (\r\n                category\r\n            ) {\r\n\r\n                categoryMap[\r\n                    category.id\r\n                ] =\r\n                    category.name;\r\n\r\n            }\r\n        );\r\n\r\n\r\n        localStorage.setItem(\r\n            cacheKey,\r\n            JSON.stringify(\r\n                {\r\n                    ids:\r\n                        categoryIDs,\r\n\r\n                    map:\r\n                        categoryMap\r\n                }\r\n            )\r\n        );\r\n\r\n\r\n        return categoryIDs;\r\n\r\n    }\r\n\r\n\r\n    function getPostCategory(\r\n        post\r\n    ) {\r\n\r\n        if (\r\n            !post.categories ||\r\n            !post.categories.length\r\n        ) {\r\n\r\n            return 'Berita';\r\n\r\n        }\r\n\r\n\r\n        for (\r\n            let i = 0;\r\n            i < post.categories.length;\r\n            i++\r\n        ) {\r\n\r\n            const categoryID =\r\n                post.categories[\r\n                    i\r\n                ];\r\n\r\n\r\n            if (\r\n                categoryMap[\r\n                    categoryID\r\n                ]\r\n            ) {\r\n\r\n                return categoryMap[\r\n                    categoryID\r\n                ];\r\n\r\n            }\r\n\r\n        }\r\n\r\n\r\n        return 'Berita';\r\n\r\n    }\r\n\r\n\r\n    async function fetchPosts(\r\n        page\r\n    ) {\r\n\r\n        const categoryQuery =\r\n            categoryIDs\r\n                .map(\r\n                    function (\r\n                        id\r\n                    ) {\r\n\r\n                        return (\r\n                            'categories[]=' +\r\n                            id\r\n                        );\r\n\r\n                    }\r\n                )\r\n                .join(\r\n                    '&'\r\n                );\r\n\r\n\r\n        const url =\r\n            wpAPI +\r\n            '\/posts' +\r\n            '?per_page=' +\r\n            POSTS_PER_REQUEST +\r\n            '&page=' +\r\n            page +\r\n            '&' +\r\n            categoryQuery +\r\n            '&orderby=date' +\r\n            '&order=desc' +\r\n            '&_embed=wp:featuredmedia';\r\n\r\n\r\n        const response =\r\n            await fetch(\r\n                url\r\n            );\r\n\r\n\r\n        if (\r\n            !response.ok\r\n        ) {\r\n\r\n            throw new Error(\r\n                'Berita tidak dapat dimuat'\r\n            );\r\n\r\n        }\r\n\r\n\r\n        totalPages =\r\n            Number(\r\n                response.headers.get(\r\n                    'X-WP-TotalPages'\r\n                ) || 1\r\n            );\r\n\r\n\r\n        return (\r\n            await response.json()\r\n        );\r\n\r\n    }\r\n\r\n\r\n    function createCard(\r\n        post\r\n    ) {\r\n\r\n        const title =\r\n            stripHTML(\r\n                post.title &&\r\n                post.title.rendered\r\n                    ? post.title.rendered\r\n                    : ''\r\n            );\r\n\r\n\r\n        const excerpt =\r\n            getSmartExcerpt(\r\n                post\r\n            );\r\n\r\n\r\n        const image =\r\n            getFeaturedImage(\r\n                post\r\n            );\r\n\r\n\r\n        const categoryName =\r\n            getPostCategory(\r\n                post\r\n            );\r\n\r\n\r\n        const card =\r\n            document.createElement(\r\n                'article'\r\n            );\r\n\r\n\r\n        card.className =\r\n            'custom-news-card news-card-enter';\r\n\r\n\r\n        card.innerHTML = `\r\n\r\n            <a\r\n                href=\"${post.link}\"\r\n                class=\"custom-news-image\"\r\n                aria-label=\"${escapeHTML(title)}\"\r\n            >\r\n\r\n                ${\r\n                    image\r\n\r\n                    ? `\r\n                        <img\r\n                            src=\"${image}\"\r\n                            alt=\"${escapeHTML(title)}\"\r\n                            loading=\"lazy\"\r\n                            decoding=\"async\"\r\n                        >\r\n                    `\r\n\r\n                    : `\r\n                        <div class=\"custom-news-placeholder\">\r\n                            Berita\r\n                        <\/div>\r\n                    `\r\n                }\r\n\r\n            <\/a>\r\n\r\n\r\n            <div class=\"custom-news-content\">\r\n\r\n\r\n                <div class=\"custom-news-date\">\r\n\r\n                    <svg\r\n                        viewBox=\"0 0 24 24\"\r\n                        fill=\"none\"\r\n                        stroke=\"currentColor\"\r\n                        stroke-width=\"1.8\"\r\n                        stroke-linecap=\"round\"\r\n                        stroke-linejoin=\"round\"\r\n                    >\r\n\r\n                        <rect\r\n                            x=\"3\"\r\n                            y=\"5\"\r\n                            width=\"18\"\r\n                            height=\"16\"\r\n                            rx=\"2\"\r\n                        ><\/rect>\r\n\r\n                        <line\r\n                            x1=\"16\"\r\n                            y1=\"3\"\r\n                            x2=\"16\"\r\n                            y2=\"7\"\r\n                        ><\/line>\r\n\r\n                        <line\r\n                            x1=\"8\"\r\n                            y1=\"3\"\r\n                            x2=\"8\"\r\n                            y2=\"7\"\r\n                        ><\/line>\r\n\r\n                        <line\r\n                            x1=\"3\"\r\n                            y1=\"11\"\r\n                            x2=\"21\"\r\n                            y2=\"11\"\r\n                        ><\/line>\r\n\r\n                    <\/svg>\r\n\r\n\r\n                    <span>\r\n                        ${formatDate(post.date)}\r\n                    <\/span>\r\n\r\n                <\/div>\r\n\r\n\r\n                <div\r\n                    class=\"custom-news-category\"\r\n                    title=\"${escapeHTML(categoryName)}\"\r\n                >\r\n\r\n                    <span class=\"custom-news-category-text\">\r\n                        ${escapeHTML(categoryName)}\r\n                    <\/span>\r\n\r\n                <\/div>\r\n\r\n\r\n                <h3 class=\"custom-news-title\">\r\n\r\n                    <a\r\n                        href=\"${post.link}\"\r\n                        title=\"${escapeHTML(title)}\"\r\n                    >\r\n                        ${escapeHTML(title)}\r\n                    <\/a>\r\n\r\n                <\/h3>\r\n\r\n\r\n                ${\r\n                    excerpt\r\n\r\n                    ? `\r\n                        <div class=\"custom-news-excerpt\">\r\n                            ${escapeHTML(excerpt)}\r\n                        <\/div>\r\n                    `\r\n\r\n                    : ''\r\n                }\r\n\r\n\r\n                <div class=\"custom-news-button-area\">\r\n\r\n                    <a\r\n                        href=\"${post.link}\"\r\n                        class=\"custom-news-button\"\r\n                    >\r\n\r\n                        <span>\r\n                            Baca Selengkapnya\r\n                        <\/span>\r\n\r\n                        <span class=\"custom-news-button-arrow\">\r\n                            \u2192\r\n                        <\/span>\r\n\r\n                    <\/a>\r\n\r\n                <\/div>\r\n\r\n\r\n            <\/div>\r\n\r\n        `;\r\n\r\n\r\n        card.addEventListener(\r\n            'animationend',\r\n            function () {\r\n\r\n                card.classList.remove(\r\n                    'news-card-enter'\r\n                );\r\n\r\n            },\r\n            {\r\n                once: true\r\n            }\r\n        );\r\n\r\n\r\n        return card;\r\n\r\n    }\r\n\r\n\r\n    function createSkeleton() {\r\n\r\n        const skeleton =\r\n            document.createElement(\r\n                'div'\r\n            );\r\n\r\n\r\n        skeleton.className =\r\n            'custom-news-skeleton loading-next-skeleton';\r\n\r\n\r\n        skeleton.innerHTML = `\r\n\r\n            <div\r\n                class=\"skeleton-image skeleton-animation\"\r\n            ><\/div>\r\n\r\n            <div class=\"skeleton-content\">\r\n\r\n                <div\r\n                    class=\"skeleton-date skeleton-animation\"\r\n                ><\/div>\r\n\r\n                <div\r\n                    class=\"skeleton-category skeleton-animation\"\r\n                ><\/div>\r\n\r\n                <div\r\n                    class=\"skeleton-title skeleton-animation\"\r\n                ><\/div>\r\n\r\n                <div\r\n                    class=\"skeleton-title skeleton-title-short skeleton-animation\"\r\n                ><\/div>\r\n\r\n                <div\r\n                    class=\"skeleton-text skeleton-animation\"\r\n                ><\/div>\r\n\r\n                <div\r\n                    class=\"skeleton-text skeleton-animation\"\r\n                ><\/div>\r\n\r\n                <div\r\n                    class=\"skeleton-text skeleton-text-short skeleton-animation\"\r\n                ><\/div>\r\n\r\n                <div\r\n                    class=\"skeleton-button skeleton-animation\"\r\n                ><\/div>\r\n\r\n            <\/div>\r\n\r\n        `;\r\n\r\n\r\n        return skeleton;\r\n\r\n    }\r\n\r\n\r\n    function updateCategoryMarquee() {\r\n\r\n        const badges =\r\n            track.querySelectorAll(\r\n                '.custom-news-category'\r\n            );\r\n\r\n\r\n        badges.forEach(\r\n            function (\r\n                badge\r\n            ) {\r\n\r\n                const text =\r\n                    badge.querySelector(\r\n                        '.custom-news-category-text'\r\n                    );\r\n\r\n\r\n                if (\r\n                    !text\r\n                ) {\r\n\r\n                    return;\r\n\r\n                }\r\n\r\n\r\n                badge.classList.remove(\r\n                    'has-overflow'\r\n                );\r\n\r\n\r\n                badge.style.removeProperty(\r\n                    '--marquee-distance'\r\n                );\r\n\r\n\r\n                badge.style.removeProperty(\r\n                    '--marquee-duration'\r\n                );\r\n\r\n\r\n                const style =\r\n                    window.getComputedStyle(\r\n                        badge\r\n                    );\r\n\r\n\r\n                const paddingLeft =\r\n                    parseFloat(\r\n                        style.paddingLeft\r\n                    ) || 0;\r\n\r\n\r\n                const paddingRight =\r\n                    parseFloat(\r\n                        style.paddingRight\r\n                    ) || 0;\r\n\r\n\r\n                const availableWidth =\r\n                    badge.clientWidth -\r\n                    paddingLeft -\r\n                    paddingRight;\r\n\r\n\r\n                const textWidth =\r\n                    text.scrollWidth;\r\n\r\n\r\n                const overflowDistance =\r\n                    textWidth -\r\n                    availableWidth;\r\n\r\n\r\n                if (\r\n                    overflowDistance > 4\r\n                ) {\r\n\r\n                    badge.classList.add(\r\n                        'has-overflow'\r\n                    );\r\n\r\n\r\n                    badge.style.setProperty(\r\n                        '--marquee-distance',\r\n                        overflowDistance +\r\n                        'px'\r\n                    );\r\n\r\n\r\n                    const duration =\r\n                        Math.max(\r\n                            3.5,\r\n                            overflowDistance \/ 22\r\n                        );\r\n\r\n\r\n                    badge.style.setProperty(\r\n                        '--marquee-duration',\r\n                        duration +\r\n                        's'\r\n                    );\r\n\r\n                }\r\n\r\n            }\r\n        );\r\n\r\n    }\r\n\r\n\r\n    function renderFirstPosts(\r\n        posts\r\n    ) {\r\n\r\n        track.innerHTML =\r\n            '';\r\n\r\n\r\n        const fragment =\r\n            document.createDocumentFragment();\r\n\r\n\r\n        posts.forEach(\r\n            function (\r\n                post\r\n            ) {\r\n\r\n                fragment.appendChild(\r\n                    createCard(\r\n                        post\r\n                    )\r\n                );\r\n\r\n            }\r\n        );\r\n\r\n\r\n        track.appendChild(\r\n            fragment\r\n        );\r\n\r\n\r\n        setTimeout(\r\n            function () {\r\n\r\n                updateCategoryMarquee();\r\n\r\n            },\r\n            100\r\n        );\r\n\r\n    }\r\n\r\n\r\n    function addNextSkeletons() {\r\n\r\n        const existing =\r\n            track.querySelectorAll(\r\n                '.loading-next-skeleton'\r\n            );\r\n\r\n\r\n        if (\r\n            existing.length\r\n        ) {\r\n\r\n            return;\r\n\r\n        }\r\n\r\n\r\n        const fragment =\r\n            document.createDocumentFragment();\r\n\r\n\r\n        for (\r\n            let i = 0;\r\n            i < POSTS_PER_REQUEST;\r\n            i++\r\n        ) {\r\n\r\n            fragment.appendChild(\r\n                createSkeleton()\r\n            );\r\n\r\n        }\r\n\r\n\r\n        track.appendChild(\r\n            fragment\r\n        );\r\n\r\n    }\r\n\r\n\r\n    function replaceSkeletons(\r\n        posts\r\n    ) {\r\n\r\n        const skeletons =\r\n            Array.from(\r\n                track.querySelectorAll(\r\n                    '.loading-next-skeleton'\r\n                )\r\n            );\r\n\r\n\r\n        posts.forEach(\r\n            function (\r\n                post,\r\n                index\r\n            ) {\r\n\r\n                const card =\r\n                    createCard(\r\n                        post\r\n                    );\r\n\r\n\r\n                if (\r\n                    skeletons[\r\n                        index\r\n                    ]\r\n                ) {\r\n\r\n                    skeletons[\r\n                        index\r\n                    ].replaceWith(\r\n                        card\r\n                    );\r\n\r\n                } else {\r\n\r\n                    track.appendChild(\r\n                        card\r\n                    );\r\n\r\n                }\r\n\r\n            }\r\n        );\r\n\r\n\r\n        skeletons.forEach(\r\n            function (\r\n                skeleton,\r\n                index\r\n            ) {\r\n\r\n                if (\r\n                    index >=\r\n                    posts.length\r\n                ) {\r\n\r\n                    skeleton.remove();\r\n\r\n                }\r\n\r\n            }\r\n        );\r\n\r\n\r\n        setTimeout(\r\n            function () {\r\n\r\n                updateCategoryMarquee();\r\n\r\n            },\r\n            100\r\n        );\r\n\r\n    }\r\n\r\n\r\n    function removeLoadingSkeletons() {\r\n\r\n        const skeletons =\r\n            track.querySelectorAll(\r\n                '.loading-next-skeleton'\r\n            );\r\n\r\n\r\n        skeletons.forEach(\r\n            function (\r\n                skeleton\r\n            ) {\r\n\r\n                skeleton.remove();\r\n\r\n            }\r\n        );\r\n\r\n    }\r\n\r\n\r\n    function cardsPerSlide() {\r\n\r\n        if (\r\n            window.innerWidth <=\r\n            767\r\n        ) {\r\n\r\n            return 1;\r\n\r\n        }\r\n\r\n\r\n        if (\r\n            window.innerWidth <=\r\n            1024\r\n        ) {\r\n\r\n            return 2;\r\n\r\n        }\r\n\r\n\r\n        return 4;\r\n\r\n    }\r\n\r\n\r\n    function getCards() {\r\n\r\n        return Array.from(\r\n            track.querySelectorAll(\r\n                '.custom-news-card'\r\n            )\r\n        );\r\n\r\n    }\r\n\r\n\r\n    function getScrollAmount() {\r\n\r\n        const card =\r\n            track.querySelector(\r\n                '.custom-news-card'\r\n            );\r\n\r\n\r\n        if (\r\n            !card\r\n        ) {\r\n\r\n            return track.clientWidth;\r\n\r\n        }\r\n\r\n\r\n        const gap =\r\n            parseFloat(\r\n                window\r\n                    .getComputedStyle(\r\n                        track\r\n                    )\r\n                    .gap\r\n            ) || 0;\r\n\r\n\r\n        const width =\r\n            card\r\n                .getBoundingClientRect()\r\n                .width;\r\n\r\n\r\n        return (\r\n            (width + gap) *\r\n            cardsPerSlide()\r\n        );\r\n\r\n    }\r\n\r\n\r\n    function hasMorePosts() {\r\n\r\n        return (\r\n            currentPage <=\r\n            totalPages\r\n        );\r\n\r\n    }\r\n\r\n\r\n    function getCurrentVisualPage() {\r\n\r\n        const amount =\r\n            getScrollAmount();\r\n\r\n\r\n        if (\r\n            !amount\r\n        ) {\r\n\r\n            return 0;\r\n\r\n        }\r\n\r\n\r\n        return Math.round(\r\n            track.scrollLeft \/\r\n            amount\r\n        );\r\n\r\n    }\r\n\r\n\r\n    function updatePagination() {\r\n\r\n        const cards =\r\n            getCards();\r\n\r\n\r\n        if (\r\n            !cards.length\r\n        ) {\r\n\r\n            pagination.innerHTML =\r\n                '';\r\n\r\n            return;\r\n\r\n        }\r\n\r\n\r\n        const totalVisualPages =\r\n            Math.ceil(\r\n                cards.length \/\r\n                cardsPerSlide()\r\n            );\r\n\r\n\r\n        const activePage =\r\n            Math.min(\r\n                getCurrentVisualPage(),\r\n                totalVisualPages - 1\r\n            );\r\n\r\n\r\n        pagination.innerHTML =\r\n            '';\r\n\r\n\r\n        for (\r\n            let i = 0;\r\n            i < totalVisualPages;\r\n            i++\r\n        ) {\r\n\r\n            const dot =\r\n                document.createElement(\r\n                    'button'\r\n                );\r\n\r\n\r\n            dot.type =\r\n                'button';\r\n\r\n\r\n            dot.className =\r\n                'custom-news-dot';\r\n\r\n\r\n            dot.setAttribute(\r\n                'aria-label',\r\n                'Buka bagian berita ' +\r\n                (i + 1)\r\n            );\r\n\r\n\r\n            if (\r\n                i ===\r\n                activePage\r\n            ) {\r\n\r\n                dot.classList.add(\r\n                    'is-active'\r\n                );\r\n\r\n            }\r\n\r\n\r\n            dot.addEventListener(\r\n                'click',\r\n                function () {\r\n\r\n                    track.scrollTo({\r\n\r\n                        left:\r\n                            getScrollAmount() *\r\n                            i,\r\n\r\n                        behavior:\r\n                            'smooth'\r\n\r\n                    });\r\n\r\n                }\r\n            );\r\n\r\n\r\n            pagination.appendChild(\r\n                dot\r\n            );\r\n\r\n        }\r\n\r\n    }\r\n\r\n\r\n    function updateActiveDot() {\r\n\r\n        const dots =\r\n            pagination.querySelectorAll(\r\n                '.custom-news-dot'\r\n            );\r\n\r\n\r\n        if (\r\n            !dots.length\r\n        ) {\r\n\r\n            return;\r\n\r\n        }\r\n\r\n\r\n        const activePage =\r\n            getCurrentVisualPage();\r\n\r\n\r\n        dots.forEach(\r\n            function (\r\n                dot,\r\n                index\r\n            ) {\r\n\r\n                dot.classList.toggle(\r\n                    'is-active',\r\n                    index === activePage\r\n                );\r\n\r\n            }\r\n        );\r\n\r\n    }\r\n\r\n\r\n    function updateNavigation() {\r\n\r\n        if (\r\n            window.innerWidth <=\r\n            767\r\n        ) {\r\n\r\n            prevButton.classList.add(\r\n                'is-hidden'\r\n            );\r\n\r\n\r\n            nextButton.classList.add(\r\n                'is-hidden'\r\n            );\r\n\r\n\r\n            return;\r\n\r\n        }\r\n\r\n\r\n        const maxScroll =\r\n            Math.max(\r\n                0,\r\n                track.scrollWidth -\r\n                track.clientWidth\r\n            );\r\n\r\n\r\n        const atStart =\r\n            track.scrollLeft <=\r\n            8;\r\n\r\n\r\n        const atEnd =\r\n            track.scrollLeft >=\r\n            maxScroll - 8;\r\n\r\n\r\n        prevButton.classList.toggle(\r\n            'is-hidden',\r\n            atStart\r\n        );\r\n\r\n\r\n        nextButton.classList.toggle(\r\n            'is-hidden',\r\n            atEnd &&\r\n            !hasMorePosts() &&\r\n            !loading\r\n        );\r\n\r\n    }\r\n\r\n\r\n    async function loadNextPosts(\r\n        autoMove\r\n    ) {\r\n\r\n        if (\r\n            loading ||\r\n            !hasMorePosts()\r\n        ) {\r\n\r\n            return false;\r\n\r\n        }\r\n\r\n\r\n        loading =\r\n            true;\r\n\r\n\r\n        addNextSkeletons();\r\n\r\n\r\n        updateNavigation();\r\n\r\n\r\n        if (\r\n            autoMove\r\n        ) {\r\n\r\n            setTimeout(\r\n                function () {\r\n\r\n                    track.scrollBy({\r\n\r\n                        left:\r\n                            getScrollAmount(),\r\n\r\n                        behavior:\r\n                            'smooth'\r\n\r\n                    });\r\n\r\n                },\r\n                30\r\n            );\r\n\r\n        }\r\n\r\n\r\n        try {\r\n\r\n            const posts =\r\n                await fetchPosts(\r\n                    currentPage\r\n                );\r\n\r\n\r\n            replaceSkeletons(\r\n                posts\r\n            );\r\n\r\n\r\n            currentPage++;\r\n\r\n\r\n            setTimeout(\r\n                function () {\r\n\r\n                    updateNavigation();\r\n\r\n                    updatePagination();\r\n\r\n                    updateActiveDot();\r\n\r\n                    updateCategoryMarquee();\r\n\r\n                },\r\n                250\r\n            );\r\n\r\n\r\n            return true;\r\n\r\n\r\n        } catch (\r\n            error\r\n        ) {\r\n\r\n            console.error(\r\n                'News Slider:',\r\n                error\r\n            );\r\n\r\n\r\n            removeLoadingSkeletons();\r\n\r\n\r\n            updateNavigation();\r\n\r\n\r\n            return false;\r\n\r\n\r\n        } finally {\r\n\r\n            loading =\r\n                false;\r\n\r\n\r\n            setTimeout(\r\n                updateNavigation,\r\n                50\r\n            );\r\n\r\n        }\r\n\r\n    }\r\n\r\n\r\n    nextButton.addEventListener(\r\n        'click',\r\n        async function () {\r\n\r\n            if (\r\n                loading\r\n            ) {\r\n\r\n                return;\r\n\r\n            }\r\n\r\n\r\n            const maxScroll =\r\n                Math.max(\r\n                    0,\r\n                    track.scrollWidth -\r\n                    track.clientWidth\r\n                );\r\n\r\n\r\n            const atEnd =\r\n                track.scrollLeft >=\r\n                maxScroll - 8;\r\n\r\n\r\n            if (\r\n                !atEnd\r\n            ) {\r\n\r\n                track.scrollBy({\r\n\r\n                    left:\r\n                        getScrollAmount(),\r\n\r\n                    behavior:\r\n                        'smooth'\r\n\r\n                });\r\n\r\n\r\n                return;\r\n\r\n            }\r\n\r\n\r\n            if (\r\n                hasMorePosts()\r\n            ) {\r\n\r\n                await loadNextPosts(\r\n                    true\r\n                );\r\n\r\n            }\r\n\r\n        }\r\n    );\r\n\r\n\r\n    prevButton.addEventListener(\r\n        'click',\r\n        function () {\r\n\r\n            if (\r\n                loading\r\n            ) {\r\n\r\n                return;\r\n\r\n            }\r\n\r\n\r\n            track.scrollBy({\r\n\r\n                left:\r\n                    -getScrollAmount(),\r\n\r\n                behavior:\r\n                    'smooth'\r\n\r\n            });\r\n\r\n        }\r\n    );\r\n\r\n\r\n    track.addEventListener(\r\n        'scroll',\r\n        function () {\r\n\r\n            window.requestAnimationFrame(\r\n                function () {\r\n\r\n                    updateNavigation();\r\n\r\n                    updateActiveDot();\r\n\r\n                }\r\n            );\r\n\r\n\r\n            clearTimeout(\r\n                autoLoadTimer\r\n            );\r\n\r\n\r\n            autoLoadTimer =\r\n                setTimeout(\r\n                    function () {\r\n\r\n                        if (\r\n                            loading ||\r\n                            !hasMorePosts()\r\n                        ) {\r\n\r\n                            return;\r\n\r\n                        }\r\n\r\n\r\n                        const remaining =\r\n                            track.scrollWidth -\r\n                            track.clientWidth -\r\n                            track.scrollLeft;\r\n\r\n\r\n                        const triggerDistance =\r\n                            getScrollAmount() *\r\n                            0.75;\r\n\r\n\r\n                        if (\r\n                            remaining <=\r\n                            triggerDistance\r\n                        ) {\r\n\r\n                            loadNextPosts(\r\n                                false\r\n                            );\r\n\r\n                        }\r\n\r\n                    },\r\n                    150\r\n                );\r\n\r\n        },\r\n        {\r\n            passive: true\r\n        }\r\n    );\r\n\r\n\r\n    let resizeTimer;\r\n\r\n\r\n    window.addEventListener(\r\n        'resize',\r\n        function () {\r\n\r\n            clearTimeout(\r\n                resizeTimer\r\n            );\r\n\r\n\r\n            resizeTimer =\r\n                setTimeout(\r\n                    function () {\r\n\r\n                        updateNavigation();\r\n\r\n                        updatePagination();\r\n\r\n                        updateActiveDot();\r\n\r\n                        updateCategoryMarquee();\r\n\r\n                    },\r\n                    150\r\n                );\r\n\r\n        }\r\n    );\r\n\r\n\r\n    if (\r\n        document.fonts &&\r\n        document.fonts.ready\r\n    ) {\r\n\r\n        document.fonts.ready.then(\r\n            function () {\r\n\r\n                updateCategoryMarquee();\r\n\r\n            }\r\n        );\r\n\r\n    }\r\n\r\n\r\n    async function start() {\r\n\r\n        try {\r\n\r\n            await getCategoryIDs();\r\n\r\n\r\n            if (\r\n                !categoryIDs.length\r\n            ) {\r\n\r\n                track.innerHTML =\r\n                    '<div class=\"custom-news-error\">Kategori berita tidak ditemukan.<\/div>';\r\n\r\n\r\n                prevButton.classList.add(\r\n                    'is-hidden'\r\n                );\r\n\r\n\r\n                nextButton.classList.add(\r\n                    'is-hidden'\r\n                );\r\n\r\n\r\n                return;\r\n\r\n            }\r\n\r\n\r\n            const firstPosts =\r\n                await fetchPosts(\r\n                    1\r\n                );\r\n\r\n\r\n            renderFirstPosts(\r\n                firstPosts\r\n            );\r\n\r\n\r\n            currentPage =\r\n                2;\r\n\r\n\r\n            updateNavigation();\r\n\r\n            updatePagination();\r\n\r\n\r\n            setTimeout(\r\n                function () {\r\n\r\n                    updateCategoryMarquee();\r\n\r\n                },\r\n                150\r\n            );\r\n\r\n\r\n            if (\r\n                hasMorePosts()\r\n            ) {\r\n\r\n                setTimeout(\r\n                    function () {\r\n\r\n                        loadNextPosts(\r\n                            false\r\n                        );\r\n\r\n                    },\r\n                    250\r\n                );\r\n\r\n            }\r\n\r\n\r\n        } catch (\r\n            error\r\n        ) {\r\n\r\n            console.error(\r\n                'News Slider:',\r\n                error\r\n            );\r\n\r\n\r\n            track.innerHTML =\r\n                '<div class=\"custom-news-error\">Berita tidak dapat dimuat.<\/div>';\r\n\r\n\r\n            prevButton.classList.add(\r\n                'is-hidden'\r\n            );\r\n\r\n\r\n            nextButton.classList.add(\r\n                'is-hidden'\r\n            );\r\n\r\n        }\r\n\r\n    }\r\n\r\n\r\n    start();\r\n\r\n\r\n})();\r\n\r\n<\/script>\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>Diseminasi Hasil Monitoring Survei Sosial Masyarakat dan Survei Ekologi di Wilayah Taman Nasional Teluk Cenderawasih Kepada Pemerintah Kabupaten Teluk Wondama Penulis E. Ria Matulessy Tanggal 18 September 2017 Kawasan Konservasi Perairan (KKP) di wilayah Bentang Laut Kepala Burung (BLKB) Papua, dalam pengelolaannya tidak hanya ditujukan bagi pelestarian sumber daya perairan tetapi juga untuk peningkatan kesejahteraan [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":3977,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_themeisle_gutenberg_block_has_review":false,"footnotes":""},"categories":[67],"tags":[],"class_list":["post-1333","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-monitoring-sosial-diseminasi"],"_links":{"self":[{"href":"https:\/\/science4conservation.com\/en\/wp-json\/wp\/v2\/posts\/1333","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/science4conservation.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/science4conservation.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/science4conservation.com\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/science4conservation.com\/en\/wp-json\/wp\/v2\/comments?post=1333"}],"version-history":[{"count":8,"href":"https:\/\/science4conservation.com\/en\/wp-json\/wp\/v2\/posts\/1333\/revisions"}],"predecessor-version":[{"id":24132,"href":"https:\/\/science4conservation.com\/en\/wp-json\/wp\/v2\/posts\/1333\/revisions\/24132"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/science4conservation.com\/en\/wp-json\/wp\/v2\/media\/3977"}],"wp:attachment":[{"href":"https:\/\/science4conservation.com\/en\/wp-json\/wp\/v2\/media?parent=1333"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/science4conservation.com\/en\/wp-json\/wp\/v2\/categories?post=1333"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/science4conservation.com\/en\/wp-json\/wp\/v2\/tags?post=1333"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}