{"id":3512,"date":"2026-01-07T18:49:09","date_gmt":"2026-01-07T23:49:09","guid":{"rendered":"https:\/\/bpsjembrana.online\/jelita\/?page_id=3512"},"modified":"2026-01-19T18:32:14","modified_gmt":"2026-01-19T23:32:14","slug":"sop","status":"publish","type":"page","link":"https:\/\/bpsjembrana.online\/jelita\/sop\/","title":{"rendered":"SOP"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"3512\" class=\"elementor elementor-3512\">\n\t\t\t\t<div class=\"elementor-element elementor-element-507a889 e-flex e-con-boxed e-con e-parent\" data-id=\"507a889\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-22a6f64 e-n-tabs-mobile elementor-widget elementor-widget-n-tabs\" data-id=\"22a6f64\" data-element_type=\"widget\" data-settings=\"{&quot;horizontal_scroll&quot;:&quot;disable&quot;}\" data-widget_type=\"nested-tabs.default\">\n\t\t\t\t\t\t\t<div class=\"e-n-tabs\" data-widget-number=\"36335460\" aria-label=\"Tabs. Open items with Enter or Space, close with Escape and navigate using the Arrow keys.\">\n\t\t\t<div class=\"e-n-tabs-heading\" role=\"tablist\">\n\t\t\t\t\t<button id=\"e-n-tab-title-363354601\" data-tab-title-id=\"e-n-tab-title-363354601\" class=\"e-n-tab-title\" aria-selected=\"true\" data-tab-index=\"1\" role=\"tab\" tabindex=\"0\" aria-controls=\"e-n-tab-content-363354601\" style=\"--n-tabs-title-order: 1;\">\n\t\t\t\t\t\t<span class=\"e-n-tab-title-text\">\n\t\t\t\tTeknis dan Administrasi\t\t\t<\/span>\n\t\t<\/button>\n\t\t\t\t<button id=\"e-n-tab-title-363354602\" data-tab-title-id=\"e-n-tab-title-363354602\" class=\"e-n-tab-title\" aria-selected=\"false\" data-tab-index=\"2\" role=\"tab\" tabindex=\"-1\" aria-controls=\"e-n-tab-content-363354602\" style=\"--n-tabs-title-order: 2;\">\n\t\t\t\t\t\t<span class=\"e-n-tab-title-text\">\n\t\t\t\tInovasi\t\t\t<\/span>\n\t\t<\/button>\n\t\t\t\t\t<\/div>\n\t\t\t<div class=\"e-n-tabs-content\">\n\t\t\t\t<div id=\"e-n-tab-content-363354601\" role=\"tabpanel\" aria-labelledby=\"e-n-tab-title-363354601\" data-tab-index=\"1\" style=\"--n-tabs-title-order: 1;\" class=\"e-active elementor-element elementor-element-fc3a2f1 e-con-full e-flex e-con e-child\" data-id=\"fc3a2f1\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b6541ca elementor-widget elementor-widget-heading\" data-id=\"b6541ca\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">SOP Dokumen Teknis dan Administrasi<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bb6cb95 elementor-align-center elementor-widget elementor-widget-button\" data-id=\"bb6cb95\" data-element_type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/drive.google.com\/drive\/folders\/1O1k8p-QFTfhWlYQzHCQdKrtydYbbgsIw?usp=sharing\" target=\"_blank\">\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<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-file-upload\" viewBox=\"0 0 384 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm65.18 216.01H224v80c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-80H94.82c-14.28 0-21.41-17.29-11.27-27.36l96.42-95.7c6.65-6.61 17.39-6.61 24.04 0l96.42 95.7c10.15 10.07 3.03 27.36-11.25 27.36zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Upload Dokumen<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-2d802ef e-flex e-con-boxed e-con e-child\" data-id=\"2d802ef\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-36d4739 elementor-widget elementor-widget-html\" data-id=\"36d4739\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html>\r\n<head>\r\n<meta charset=\"UTF-8\">\r\n<style>\r\n  body {\r\n    font-family: Poppins, sans-serif;\r\n  }\r\n\r\n\/* ===== Search box ===== *\/\r\n.search-box {\r\n  margin: 10px 0;\r\n  padding: 6px 8px;\r\n  width: 200px;\r\n  max-width: 90%;\r\n  border: 1px solid #ccc;\r\n  border-radius: 3px;\r\n  color: #000;           \/* teks yang diketik jadi hitam *\/\r\n}\r\n\r\n\/* placeholder *\/\r\n.search-box::placeholder {\r\n  color: #344660;\r\n  opacity: 1;\r\n}\r\n.search-box,\r\n.search-box:focus,\r\n.search-box:active {\r\n  color: #000 !important;                 \/* teks hitam *\/\r\n  -webkit-text-fill-color: #000 !important; \/* FIX teks transparan di Chrome *\/\r\n  background-color: #fff !important;\r\n}\r\n\r\n\r\n  \/* ===== Sort Button ===== *\/\r\n  .sort-btn {\r\n    margin-bottom: 10px;\r\n    padding: 6px 12px;\r\n    background-color: #344660;\r\n    color: #f9f0df;\r\n    border: none;\r\n    border-radius: 3px;\r\n    cursor: pointer;\r\n    transition: background-color 0.2s, transform 0.2s;\r\n  }\r\n  .sort-btn:hover {\r\n    background-color: #C95D43;\r\n    transform: translateY(-2px);\r\n  }\r\n\r\n  \/* ===== Grid container ===== *\/\r\n  #fileGridSOP_TA {\r\n    display: grid;\r\n    grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));\r\n    gap: 15px;\r\n    margin-top: 10px;\r\n  }\r\n\r\n  \/* ===== Card styling ===== *\/\r\n  .file-card {\r\n    background-color: #ffffff;\r\n    border: 1px solid #ddd;\r\n    border-radius: 5px;\r\n    padding: 8px;\r\n    text-align: center;\r\n    display: flex;\r\n    flex-direction: column;\r\n    justify-content: space-between;\r\n    transition: transform 0.2s, box-shadow 0.2s;\r\n  }\r\n\r\n  .file-card:nth-child(even) {\r\n    background-color: #fdf6f0;\r\n  }\r\n\r\n  .file-card:hover {\r\n    transform: translateY(-5px);\r\n    box-shadow: 0 4px 15px rgba(0,0,0,0.2);\r\n  }\r\n\r\n  .file-card img {\r\n    width: 100%;\r\n    height: 120px;\r\n    object-fit: contain;\r\n    cursor: pointer;\r\n    border: 1px solid #ccc;\r\n    border-radius: 3px;\r\n    margin-bottom: 8px;\r\n    transition: transform 0.2s;\r\n  }\r\n\r\n  .file-card img:hover {\r\n    transform: scale(1.05);\r\n  }\r\n\r\n  .file-name {\r\n    white-space: nowrap;\r\n    overflow: hidden;\r\n    text-overflow: ellipsis;\r\n    font-size: 10px;\r\n    margin-bottom: 6px;\r\n    color: #344660;\r\n    transition: color 0.2s;\r\n  }\r\n\r\n  .file-card:hover .file-name {\r\n    color: #C95D43;\r\n  }\r\n\r\n  .file-card a.btn {\r\n    padding: 6px 12px;\r\n    font-size:12px;\r\n    text-decoration: none;\r\n    border-radius: 3px;\r\n    color: #fff;\r\n    background-color: #344660;\r\n    transition: background-color 0.2s;\r\n  }\r\n\r\n  .file-card a.btn:hover {\r\n    background-color: #C95D43;\r\n  }\r\n\r\n  \/* ===== Pagination ===== *\/\r\n  .pagination {\r\n    display: flex;\r\n    justify-content: center;\r\n    gap: 6px;\r\n    margin-top: 15px;\r\n  }\r\n  .pagination button {\r\n    padding: 8px 12px;\r\n    border: none;\r\n    background-color: #344660;\r\n    color: #f9f0df;\r\n    cursor: pointer;\r\n    border-radius: 3px;\r\n  }\r\n  .pagination button:disabled {\r\n    background-color: #ccc;\r\n    cursor: not-allowed;\r\n  }\r\n\r\n  \/* ===== Modal Preview ===== *\/\r\n  .modal {\r\n    display: none;\r\n    position: fixed;\r\n    z-index: 999;\r\n    left: 0; top: 0;\r\n    width: 100%; height: 100%;\r\n    background: rgba(0,0,0,0.6);\r\n  }\r\n  .modal-content {\r\n    background: #fff;\r\n    margin: 50px auto;\r\n    padding: 20px 10px 10px 10px;\r\n    border-radius: 5px;\r\n    width: 80%;\r\n    max-width: 800px;\r\n    position: relative;\r\n    box-sizing: border-box;\r\n  }\r\n  .modal iframe {\r\n    width: 100%;\r\n    height: 500px;\r\n    border: none;\r\n    margin-top: 5px;\r\n  }\r\n  .close-btn {\r\n    font-size: 14px;\r\n    background-color: #C95D43;\r\n    color: #fff;\r\n    border: none;\r\n    padding: 4px 8px;\r\n    border-radius: 3px;\r\n    cursor: pointer;\r\n    position: absolute;\r\n    top: 10px;\r\n    right: 10px;\r\n    z-index: 9999;\r\n  }\r\n  #previewModal a.btn {\r\n    font-size: 12px;\r\n    background-color: #344660; \r\n    color: #fff;\r\n    padding: 6px 12px;\r\n    border-radius: 3px;\r\n    text-decoration: none;\r\n    transition: background-color 0.2s;\r\n  }\r\n  #previewModal a.btn:hover {\r\n    background-color: #C95D43;\r\n  }\r\n<\/style>\r\n<\/head>\r\n<body>\r\n\r\n  <!-- \ud83d\udd39 Search -->\r\n  <input type=\"text\" class=\"search-box\" placeholder=\"Cari Dokumen..\" onkeyup=\"searchGridSOP_TA(this.value)\"> \r\n\r\n  <!-- \ud83d\udd39 Sort Button Modern -->\r\n  <button class=\"sort-btn\" onclick=\"sortGridSOP_TA()\">Urutkan A-Z \/ Z-A<\/button>\r\n\r\n  <!-- \ud83d\udd39 Grid container -->\r\n  <div id=\"fileGridSOP_TA\"><\/div>\r\n\r\n  <!-- \ud83d\udd39 Pagination -->\r\n  <div class=\"pagination\">\r\n    <button onclick=\"prevPageSOP_TA()\" id=\"prevBtnSOP_TA\">Prev<\/button>\r\n    <span id=\"pageInfoSOP_TA\"><\/span>\r\n    <button onclick=\"nextPageSOP_TA()\" id=\"nextBtnSOP_TA\">Next<\/button>\r\n  <\/div>\r\n\r\n  <!-- ===== Modal Preview ===== -->\r\n  <div class=\"modal\" id=\"previewModal\">\r\n    <div class=\"modal-content\">\r\n      <button class=\"close-btn\" onclick=\"closeModal()\">X<\/button>\r\n      <iframe id=\"previewFrame\"><\/iframe>\r\n      <a id=\"downloadLink\" class=\"btn\" href=\"#\" target=\"_blank\">Download<\/a>\r\n    <\/div>\r\n  <\/div>\r\n\r\n<script>\r\n  const apiKey = \"AIzaSyB26Kiy9vYp7d1Z0Z6mllbUaC4rY0pjcKg\";\r\n  const folderIdSOP_TA = \"1so_wCaaXPsY6u8u8dTqgxOhKD4XG__zT\";\r\n\r\n  let filesSOP_TA = [];\r\n  let currentPageSOP_TA = 1;\r\n  const rowsPerPageSOP_TA = 12;\r\n  let sortAscSOP_TA = true;\r\n\r\n  function loadFilesSOP_TA(folderId) {\r\n    fetch(`https:\/\/www.googleapis.com\/drive\/v3\/files?q='${folderId}'+in+parents&key=${apiKey}&fields=files(id,name,thumbnailLink,mimeType)&pageSize=1000`)\r\n      .then(res => res.json())\r\n      .then(data => {\r\n        filesSOP_TA = data.files || [];\r\n        renderGridSOP_TA();\r\n      })\r\n      .catch(err => console.error(err));\r\n  }\r\n\r\n  function renderGridSOP_TA() {\r\n    const container = document.getElementById(\"fileGridSOP_TA\");\r\n    container.innerHTML = '';\r\n    let start = (currentPageSOP_TA - 1) * rowsPerPageSOP_TA;\r\n    let end = start + rowsPerPageSOP_TA;\r\n    let paginated = filesSOP_TA.slice(start, end);\r\n\r\n    paginated.forEach(file => {\r\n      let thumb = file.thumbnailLink || (file.mimeType.startsWith('image\/') ? \r\n                  `https:\/\/drive.google.com\/thumbnail?id=${file.id}&sz=w180-h120` : \r\n                  'https:\/\/via.placeholder.com\/180x120?text=Preview');\r\n\r\n      let card = document.createElement('div');\r\n      card.className = 'file-card';\r\n      card.innerHTML = `\r\n        <img decoding=\"async\" src=\"${thumb}\" onclick=\"openPreview('${file.id}')\">\r\n        <div class=\"file-name\" title=\"${file.name}\">${file.name}<\/div>\r\n        <a class=\"btn\" href=\"https:\/\/drive.google.com\/uc?export=download&id=${file.id}\">Download<\/a>\r\n      `;\r\n      container.appendChild(card);\r\n    });\r\n\r\n    document.getElementById(\"pageInfoSOP_TA\").innerText =\r\n      `Halaman ${currentPageSOP_TA} dari ${Math.ceil(filesSOP_TA.length \/ rowsPerPageSOP_TA)}`;\r\n    document.getElementById(\"prevBtnSOP_TA\").disabled = currentPageSOP_TA === 1;\r\n    document.getElementById(\"nextBtnSOP_TA\").disabled = currentPageSOP_TA === Math.ceil(filesSOP_TA.length \/ rowsPerPageSOP_TA);\r\n  }\r\n\r\n  function prevPageSOP_TA() {\r\n    if (currentPageSOP_TA > 1) { currentPageSOP_TA--; renderGridSOP_TA(); }\r\n  }\r\n  function nextPageSOP_TA() {\r\n    if (currentPageSOP_TA < Math.ceil(filesSOP_TA.length \/ rowsPerPageSOP_TA)) { currentPageSOP_TA++; renderGridSOP_TA(); }\r\n  }\r\n\r\n  function searchGridSOP_TA(val) {\r\n    let filter = val.toLowerCase();\r\n    let filtered = filesSOP_TA.filter(f => f.name.toLowerCase().includes(filter));\r\n    const container = document.getElementById(\"fileGridSOP_TA\");\r\n    container.innerHTML = '';\r\n    filtered.forEach(file => {\r\n      let thumb = file.thumbnailLink || (file.mimeType.startsWith('image\/') ? \r\n                  `https:\/\/drive.google.com\/thumbnail?id=${file.id}&sz=w180-h120` : \r\n                  'https:\/\/via.placeholder.com\/180x120?text=Preview');\r\n\r\n      let card = document.createElement('div');\r\n      card.className = 'file-card';\r\n      card.innerHTML = `\r\n        <img decoding=\"async\" src=\"${thumb}\" onclick=\"openPreview('${file.id}')\">\r\n        <div class=\"file-name\" title=\"${file.name}\">${file.name}<\/div>\r\n        <a class=\"btn\" href=\"https:\/\/drive.google.com\/uc?export=download&id=${file.id}\">Download<\/a>\r\n      `;\r\n      container.appendChild(card);\r\n    });\r\n    document.getElementById(\"pageInfoSOP_TA\").innerText = `Ditemukan ${filtered.length} dokumen`;\r\n    document.getElementById(\"prevBtnSOP_TA\").disabled = true;\r\n    document.getElementById(\"nextBtnSOP_TA\").disabled = true;\r\n  }\r\n\r\n  function sortGridSOP_TA() {\r\n    filesSOP_TA.sort((a,b) => sortAscSOP_TA ? a.name.localeCompare(b.name) : b.name.localeCompare(a.name));\r\n    sortAscSOP_TA = !sortAscSOP_TA;\r\n    currentPageSOP_TA = 1;\r\n    renderGridSOP_TA();\r\n  }\r\n\r\n  \/\/ ===== Modal Functions =====\r\n  function openPreview(fileId) {\r\n    document.getElementById(\"previewFrame\").src = `https:\/\/drive.google.com\/file\/d\/${fileId}\/preview`;\r\n    document.getElementById(\"downloadLink\").href = `https:\/\/drive.google.com\/uc?export=download&id=${fileId}`;\r\n    document.getElementById(\"previewModal\").style.display = \"block\";\r\n  }\r\n  function closeModal() {\r\n    document.getElementById(\"previewModal\").style.display = \"none\";\r\n    document.getElementById(\"previewFrame\").src = \"\";\r\n  }\r\n  window.onclick = function(event) {\r\n    if (event.target === document.getElementById(\"previewModal\")) { closeModal(); }\r\n  }\r\n\r\n  \/\/ \ud83d\udd39 load awal\r\n  loadFilesSOP_TA(folderIdSOP_TA);\r\n<\/script>\r\n<\/body>\r\n<\/html>\r\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div id=\"e-n-tab-content-363354602\" role=\"tabpanel\" aria-labelledby=\"e-n-tab-title-363354602\" data-tab-index=\"2\" style=\"--n-tabs-title-order: 2;\" class=\" elementor-element elementor-element-45b52f3 e-con-full e-flex e-con e-child\" data-id=\"45b52f3\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0f4f7f7 elementor-widget elementor-widget-heading\" data-id=\"0f4f7f7\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">SOP Dokumen Inovasi<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-48dc720 elementor-align-center elementor-widget elementor-widget-button\" data-id=\"48dc720\" data-element_type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/drive.google.com\/drive\/folders\/1EHuoK8NMjZ5jv9yeypp4Yy95DJlVdA4s?usp=sharing\" target=\"_blank\">\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<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-file-upload\" viewBox=\"0 0 384 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm65.18 216.01H224v80c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-80H94.82c-14.28 0-21.41-17.29-11.27-27.36l96.42-95.7c6.65-6.61 17.39-6.61 24.04 0l96.42 95.7c10.15 10.07 3.03 27.36-11.25 27.36zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Upload Dokumen<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-5a66038 e-flex e-con-boxed e-con e-child\" data-id=\"5a66038\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-63cda65 elementor-widget elementor-widget-html\" data-id=\"63cda65\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html>\r\n<head>\r\n<meta charset=\"UTF-8\">\r\n<style>\r\n  body {\r\n    font-family: Poppins, sans-serif;\r\n  }\r\n\r\n  \/* ===== Search box ===== *\/\r\n  .search-box {\r\n    margin: 10px 0;\r\n    padding: 6px 8px;\r\n    width: 200px;        \/* Lebar dikurangi *\/\r\n    max-width: 90%;      \/* Maksimal 90% di layar kecil *\/\r\n    border: 1px solid #ccc;\r\n    border-radius: 3px;\r\n    color: #000;\r\n  }\r\n  .search-box::placeholder {\r\n    color: #000 !important;\r\n    opacity: 1;\r\n  }\r\n\r\n  \/* ===== Sort Button ===== *\/\r\n  .sort-btn {\r\n    margin-bottom: 10px;\r\n    padding: 6px 12px;\r\n    background-color: #344660;\r\n    color: #f9f0df;\r\n    border: none;\r\n    border-radius: 3px;\r\n    cursor: pointer;\r\n    transition: background-color 0.2s, transform 0.2s;\r\n  }\r\n  .sort-btn:hover {\r\n    background-color: #C95D43;\r\n    transform: translateY(-2px);\r\n  }\r\n\r\n  \/* ===== Grid container ===== *\/\r\n  #fileGridSOP_Inovasi {\r\n    display: grid;\r\n    grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));\r\n    gap: 15px;\r\n    margin-top: 10px;\r\n  }\r\n\r\n  \/* ===== Card styling ===== *\/\r\n  .file-card {\r\n    background-color: #ffffff;\r\n    border: 1px solid #ddd;\r\n    border-radius: 5px;\r\n    padding: 8px;\r\n    text-align: center;\r\n    display: flex;\r\n    flex-direction: column;\r\n    justify-content: space-between;\r\n    transition: transform 0.2s, box-shadow 0.2s;\r\n  }\r\n\r\n  .file-card:nth-child(even) {\r\n    background-color: #fdf6f0;\r\n  }\r\n\r\n  .file-card:hover {\r\n    transform: translateY(-5px);\r\n    box-shadow: 0 4px 15px rgba(0,0,0,0.2);\r\n  }\r\n\r\n  .file-card img {\r\n    width: 100%;\r\n    height: 120px;\r\n    object-fit: contain;\r\n    cursor: pointer;\r\n    border: 1px solid #ccc;\r\n    border-radius: 3px;\r\n    margin-bottom: 8px;\r\n    transition: transform 0.2s;\r\n  }\r\n\r\n  .file-card img:hover {\r\n    transform: scale(1.05);\r\n  }\r\n\r\n  .file-name {\r\n    white-space: nowrap;\r\n    overflow: hidden;\r\n    text-overflow: ellipsis;\r\n    font-size: 10px;\r\n    margin-bottom: 6px;\r\n    color: #344660;\r\n    transition: color 0.2s;\r\n  }\r\n\r\n  .file-card:hover .file-name {\r\n    color: #C95D43;\r\n  }\r\n\r\n  .file-card a.btn {\r\n    padding: 6px 12px;\r\n    font-size:12px;\r\n    text-decoration: none;\r\n    border-radius: 3px;\r\n    color: #fff;\r\n    background-color: #344660;\r\n    transition: background-color 0.2s;\r\n  }\r\n\r\n  .file-card a.btn:hover {\r\n    background-color: #C95D43;\r\n  }\r\n\r\n  \/* ===== Pagination ===== *\/\r\n  .pagination {\r\n    display: flex;\r\n    justify-content: center;\r\n    gap: 6px;\r\n    margin-top: 15px;\r\n  }\r\n  .pagination button {\r\n    padding: 8px 12px;\r\n    border: none;\r\n    background-color: #344660;\r\n    color: #f9f0df;\r\n    cursor: pointer;\r\n    border-radius: 3px;\r\n  }\r\n  .pagination button:disabled {\r\n    background-color: #ccc;\r\n    cursor: not-allowed;\r\n  }\r\n\r\n  \/* ===== Modal Preview ===== *\/\r\n  .modal {\r\n    display: none;\r\n    position: fixed;\r\n    z-index: 999;\r\n    left: 0; top: 0;\r\n    width: 100%; height: 100%;\r\n    background: rgba(0,0,0,0.6);\r\n  }\r\n  .modal-content {\r\n    background: #fff;\r\n    margin: 50px auto;\r\n    padding: 20px 10px 10px 10px;\r\n    border-radius: 5px;\r\n    width: 80%;\r\n    max-width: 800px;\r\n    position: relative;\r\n    box-sizing: border-box;\r\n  }\r\n  .modal iframe {\r\n    width: 100%;\r\n    height: 500px;\r\n    border: none;\r\n    margin-top: 5px;\r\n  }\r\n  .close-btn {\r\n    font-size: 14px;\r\n    background-color: #C95D43;\r\n    color: #fff;\r\n    border: none;\r\n    padding: 4px 8px;\r\n    border-radius: 3px;\r\n    cursor: pointer;\r\n    position: absolute;\r\n    top: 10px;\r\n    right: 10px;\r\n    z-index: 9999;\r\n  }\r\n  #previewModal a.btn {\r\n    font-size: 12px;\r\n    background-color: #344660; \r\n    color: #fff;\r\n    padding: 6px 12px;\r\n    border-radius: 3px;\r\n    text-decoration: none;\r\n    transition: background-color 0.2s;\r\n  }\r\n  #previewModal a.btn:hover {\r\n    background-color: #C95D43;\r\n  }\r\n<\/style>\r\n<\/head>\r\n<body>\r\n\r\n  <!-- \ud83d\udd39 Search -->\r\n  <input type=\"text\" class=\"search-box\" placeholder=\"Cari Dokumen..\" onkeyup=\"searchGridSOP_Inovasi(this.value)\"> \r\n\r\n  <!-- \ud83d\udd39 Sort Button Modern -->\r\n  <button class=\"sort-btn\" onclick=\"sortGridSOP_Inovasi()\">Urutkan A-Z \/ Z-A<\/button>\r\n\r\n  <!-- \ud83d\udd39 Grid container -->\r\n  <div id=\"fileGridSOP_Inovasi\"><\/div>\r\n\r\n  <!-- \ud83d\udd39 Pagination -->\r\n  <div class=\"pagination\">\r\n    <button onclick=\"prevPageSOP_Inovasi()\" id=\"prevBtnSOP_Inovasi\">Prev<\/button>\r\n    <span id=\"pageInfoSOP_Inovasi\"><\/span>\r\n    <button onclick=\"nextPageSOP_Inovasi()\" id=\"nextBtnSOP_Inovasi\">Next<\/button>\r\n  <\/div>\r\n\r\n  <!-- ===== Modal Preview ===== -->\r\n  <div class=\"modal\" id=\"previewModal\">\r\n    <div class=\"modal-content\">\r\n      <button class=\"close-btn\" onclick=\"closeModal()\">X<\/button>\r\n      <iframe id=\"previewFrame\"><\/iframe>\r\n      <a id=\"downloadLink\" class=\"btn\" href=\"#\" target=\"_blank\">Download<\/a>\r\n    <\/div>\r\n  <\/div>\r\n\r\n<script>\r\n  const folderIdSOP_Inovasi = \"1EHuoK8NMjZ5jv9yeypp4Yy95DJlVdA4s\";\r\n\r\n  let filesSOP_Inovasi = [];\r\n  let currentPageSOP_Inovasi = 1;\r\n  const rowsPerPageSOP_Inovasi = 12;\r\n  let sortAscSOP_Inovasi = true;\r\n\r\n  function loadFilesSOP_Inovasi(folderId) {\r\n    fetch(`https:\/\/www.googleapis.com\/drive\/v3\/files?q='${folderId}'+in+parents&key=${apiKey}&fields=files(id,name,thumbnailLink,mimeType)&pageSize=1000`)\r\n      .then(res => res.json())\r\n      .then(data => {\r\n        filesSOP_Inovasi = data.files || [];\r\n        renderGridSOP_Inovasi();\r\n      })\r\n      .catch(err => console.error(err));\r\n  }\r\n\r\n  function renderGridSOP_Inovasi() {\r\n    const container = document.getElementById(\"fileGridSOP_Inovasi\");\r\n    container.innerHTML = '';\r\n    let start = (currentPageSOP_Inovasi - 1) * rowsPerPageSOP_Inovasi;\r\n    let end = start + rowsPerPageSOP_Inovasi;\r\n    let paginated = filesSOP_Inovasi.slice(start, end);\r\n\r\n    paginated.forEach(file => {\r\n      let thumb = file.thumbnailLink || (file.mimeType.startsWith('image\/') ? \r\n                  `https:\/\/drive.google.com\/thumbnail?id=${file.id}&sz=w180-h120` : \r\n                  'https:\/\/via.placeholder.com\/180x120?text=Preview');\r\n\r\n      let card = document.createElement('div');\r\n      card.className = 'file-card';\r\n      card.innerHTML = `\r\n        <img decoding=\"async\" src=\"${thumb}\" onclick=\"openPreview('${file.id}')\">\r\n        <div class=\"file-name\" title=\"${file.name}\">${file.name}<\/div>\r\n        <a class=\"btn\" href=\"https:\/\/drive.google.com\/uc?export=download&id=${file.id}\">Download<\/a>\r\n      `;\r\n      container.appendChild(card);\r\n    });\r\n\r\n    document.getElementById(\"pageInfoSOP_Inovasi\").innerText =\r\n      `Halaman ${currentPageSOP_Inovasi} dari ${Math.ceil(filesSOP_Inovasi.length \/ rowsPerPageSOP_Inovasi)}`;\r\n    document.getElementById(\"prevBtnSOP_Inovasi\").disabled = currentPageSOP_Inovasi === 1;\r\n    document.getElementById(\"nextBtnSOP_Inovasi\").disabled = currentPageSOP_Inovasi === Math.ceil(filesSOP_Inovasi.length \/ rowsPerPageSOP_Inovasi);\r\n  }\r\n\r\n  function prevPageSOP_Inovasi() {\r\n    if (currentPageSOP_Inovasi > 1) { currentPageSOP_Inovasi--; renderGridSOP_Inovasi(); }\r\n  }\r\n  function nextPageSOP_Inovasi() {\r\n    if (currentPageSOP_Inovasi < Math.ceil(filesSOP_Inovasi.length \/ rowsPerPageSOP_Inovasi)) { currentPageSOP_Inovasi++; renderGridSOP_Inovasi(); }\r\n  }\r\n\r\n  function searchGridSOP_Inovasi(val) {\r\n    let filter = val.toLowerCase();\r\n    let filtered = filesSOP_Inovasi.filter(f => f.name.toLowerCase().includes(filter));\r\n    const container = document.getElementById(\"fileGridSOP_Inovasi\");\r\n    container.innerHTML = '';\r\n    filtered.forEach(file => {\r\n      let thumb = file.thumbnailLink || (file.mimeType.startsWith('image\/') ? \r\n                  `https:\/\/drive.google.com\/thumbnail?id=${file.id}&sz=w180-h120` : \r\n                  'https:\/\/via.placeholder.com\/180x120?text=Preview');\r\n\r\n      let card = document.createElement('div');\r\n      card.className = 'file-card';\r\n      card.innerHTML = `\r\n        <img decoding=\"async\" src=\"${thumb}\" onclick=\"openPreview('${file.id}')\">\r\n        <div class=\"file-name\" title=\"${file.name}\">${file.name}<\/div>\r\n        <a class=\"btn\" href=\"https:\/\/drive.google.com\/uc?export=download&id=${file.id}\">Download<\/a>\r\n      `;\r\n      container.appendChild(card);\r\n    });\r\n    document.getElementById(\"pageInfoSOP_Inovasi\").innerText = `Ditemukan ${filtered.length} dokumen`;\r\n    document.getElementById(\"prevBtnSOP_Inovasi\").disabled = true;\r\n    document.getElementById(\"nextBtnSOP_Inovasi\").disabled = true;\r\n  }\r\n\r\n  function sortGridSOP_Inovasi() {\r\n    filesSOP_Inovasi.sort((a,b) => sortAscSOP_Inovasi ? a.name.localeCompare(b.name) : b.name.localeCompare(a.name));\r\n    sortAscSOP_Inovasi = !sortAscSOP_Inovasi;\r\n    currentPageSOP_Inovasi = 1;\r\n    renderGridSOP_Inovasi();\r\n  }\r\n\r\n  \/\/ ===== Modal Functions =====\r\n  function openPreview(fileId) {\r\n    document.getElementById(\"previewFrame\").src = `https:\/\/drive.google.com\/file\/d\/${fileId}\/preview`;\r\n    document.getElementById(\"downloadLink\").href = `https:\/\/drive.google.com\/uc?export=download&id=${fileId}`;\r\n    document.getElementById(\"previewModal\").style.display = \"block\";\r\n  }\r\n  function closeModal() {\r\n    document.getElementById(\"previewModal\").style.display = \"none\";\r\n    document.getElementById(\"previewFrame\").src = \"\";\r\n  }\r\n  window.onclick = function(event) {\r\n    if (event.target === document.getElementById(\"previewModal\")) { closeModal(); }\r\n  }\r\n\r\n  \/\/ \ud83d\udd39 load awal\r\n  loadFilesSOP_Inovasi(folderIdSOP_Inovasi);\r\n<\/script>\r\n<\/body>\r\n<\/html>\r\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Teknis dan Administrasi Inovasi SOP Dokumen Teknis dan Administrasi Upload Dokumen Urutkan A-Z \/ Z-A Prev Next X Download SOP Dokumen Inovasi Upload Dokumen Urutkan A-Z \/ Z-A Prev Next X Download SOP Dokumen Teknis dan Administrasi Upload Dokumen Urutkan A-Z \/ Z-A Prev Next X Download SOP Dokumen Inovasi Upload Dokumen Urutkan A-Z \/ [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_themeisle_gutenberg_block_has_review":false,"footnotes":""},"class_list":["post-3512","page","type-page","status-publish","hentry"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/bpsjembrana.online\/jelita\/wp-json\/wp\/v2\/pages\/3512","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bpsjembrana.online\/jelita\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bpsjembrana.online\/jelita\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bpsjembrana.online\/jelita\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bpsjembrana.online\/jelita\/wp-json\/wp\/v2\/comments?post=3512"}],"version-history":[{"count":22,"href":"https:\/\/bpsjembrana.online\/jelita\/wp-json\/wp\/v2\/pages\/3512\/revisions"}],"predecessor-version":[{"id":3979,"href":"https:\/\/bpsjembrana.online\/jelita\/wp-json\/wp\/v2\/pages\/3512\/revisions\/3979"}],"wp:attachment":[{"href":"https:\/\/bpsjembrana.online\/jelita\/wp-json\/wp\/v2\/media?parent=3512"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}