{"id":2947,"date":"2026-10-03T15:32:33","date_gmt":"2026-10-03T08:32:33","guid":{"rendered":"https:\/\/synbioid.com\/?page_id=2947"},"modified":"2026-10-03T20:58:19","modified_gmt":"2026-10-03T13:58:19","slug":"tools-petambak","status":"publish","type":"page","link":"https:\/\/synbioid.com\/en\/tools-petambak\/","title":{"rendered":"Farm Tools"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"2947\" class=\"elementor elementor-2947\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-78eb6ed e-flex e-con-boxed e-con e-parent\" data-id=\"78eb6ed\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1c5254e elementor-widget elementor-widget-html\" data-id=\"1c5254e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!--\nSYNBIO \u2014 TOOLS PETAMBAK (17 TOOLS)\nCARA PASANG: salin seluruh isi file ke satu widget HTML Elementor.\nPANDUAN EDIT:\nA. CSS: warna, ukuran, layout, dan animasi.\nB. HTML: judul, pengantar, dan struktur halaman.\nC. JAVASCRIPT: daftar tools, kolom input, perhitungan, dan ekspor CSV.\nWARNA: cari --navy, --red, --arrow-bg, --arrow-hover.\nUKURAN: cari --arrow-size, --list-width, --panel-top.\nLINK: cari const CONFIG dan ganti consultUrl.\nNAMA DAN KETERANGAN: cari const tools, lalu edit title dan desc.\nRUMUS: ubah calc hanya jika formula memang perlu diubah.\nPanah mengikuti latar tombol saat biasa; merah dengan ikon putih saat hover.\nLATAR SAMPAI ATAS: cari HALAMAN SAMPAI ATAS di CSS dan fitToolsPageTop di JavaScript.\n-->\n<style>\n\/* 1. WARNA, UKURAN, DAN TAMPILAN *\/\n#synbio-tools {\n  --navy:#203e73;\n  --arrow-size:34px;\n  --arrow-icon-size:14px;\n  --arrow-bg:transparent; \/* Transparan: mengikuti latar tombol saat biasa. *\/\n  --arrow-hover:#ed294b; \/* Lingkaran merah sesuai contoh, hanya saat hover\/fokus. *\/\n  --list-width:300px;\n  --panel-top:110px; \/* Posisi panel kalkulator di bawah header mengambang. *\/\n  --red:#e82d4b;\n  --ink:#53647b;\n  box-sizing:border-box;\n  width:100vw;\n  max-width:none;\n  margin-left:calc(50% - 50vw);\n  color:var(--ink);\n  background:radial-gradient(ellipse at 95% 5%,#dfeaf9,transparent 32%),radial-gradient(ellipse at 0 40%,#e7edf8,transparent 30%),#f6f8fb;\n  font:16px\/1.65 -apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;\n  padding:64px 5% 80px;\n  overflow:hidden\n}\n#synbio-tools * {\n  box-sizing:border-box\n}\n#synbio-tools h1,#synbio-tools h2,#synbio-tools h3,#synbio-tools p {\n  margin:0\n}\n#synbio-tools h1,#synbio-tools h2,#synbio-tools h3 {\n  color:var(--navy);\n  font-weight:500;\n  letter-spacing:-.045em;\n  line-height:1.12\n}\n#synbio-tools h1 {\n  font-size:clamp(36px,5vw,65px);\n  max-width:750px\n}\n#synbio-tools h2 {\n  font-size:30px\n}\n#synbio-tools h3 {\n  font-size:24px\n}\n#synbio-tools a {\n  color:var(--navy);\n  text-decoration:none\n}\n#synbio-tools button,#synbio-tools input,#synbio-tools select {\n  font:inherit\n}\n#synbio-tools button {\n  cursor:pointer\n}\n#synbio-tools .wrap {\n  max-width:1260px;\n  margin:auto\n}\n#synbio-tools .eyebrow {\n  font-size:11px;\n  text-transform:uppercase;\n  letter-spacing:.19em;\n  color:#7b8da7;\n  font-weight:650;\n  display:block;\n  margin-bottom:20px\n}\n#synbio-tools .intro {\n  max-width:600px;\n  margin:24px 0 30px\n}\n#synbio-tools .glass {\n  border:1px solid white;\n  background:#ffffff85;\n  box-shadow:0 14px 45px #203e7306,inset 0 1px 0 white;\n  backdrop-filter:blur(24px);\n  border-radius:24px\n}\n#synbio-tools .hero {\n  display:grid;\n  grid-template-columns:1.6fr 1fr;\n  gap:40px;\n  align-items:center;\n  margin-bottom:48px\n}\n#synbio-tools .hero-side {\n  padding:32px\n}\n#synbio-tools .hero-side strong {\n  color:var(--navy);\n  font-size:44px;\n  font-weight:500;\n  display:block\n}\n#synbio-tools .hero-side p {\n  font-size:14px\n}\n#synbio-tools .button {\n  display:inline-flex;\n  align-items:center;\n  justify-content:space-between;\n  gap:20px;\n  border:1px solid #fff;\n  background:#ffffff85;\n  border-radius:28px;\n  padding:10px 10px 10px 20px;\n  font-size:14px;\n  color:var(--navy);\n  transition:transform .3s\n}\n#synbio-tools .button:hover {\n  transform:translateY(-2px)\n}\n#synbio-tools .toolbar {\n  display:flex;\n  flex-wrap:wrap;\n  gap:8px;\n  margin:22px 0\n}\n#synbio-tools .chip {\n  border:1px solid #203e7317;\n  background:transparent;\n  color:var(--navy);\n  padding:9px 16px;\n  border-radius:30px;\n  font-size:13px\n}\n#synbio-tools .chip[aria-pressed=true] {\n  background:var(--navy);\n  color:white\n}\n#synbio-tools .search {\n  width:100%;\n  border:1px solid #203e7320;\n  border-radius:16px;\n  padding:13px 16px;\n  background:#fff9;\n  color:var(--navy)\n}\n#synbio-tools .grid {\n  display:grid;\n  grid-template-columns:repeat(3,1fr);\n  gap:18px\n}\n#synbio-tools .card {\n  padding:26px;\n  display:flex;\n  flex-direction:column;\n  min-height:245px;\n  transition:transform .35s,box-shadow .35s;\n  text-align:left;\n  color:var(--ink)\n}\n#synbio-tools .card:hover {\n  transform:translateY(-5px);\n  box-shadow:0 20px 45px #203e7310\n}\n#synbio-tools .card p {\n  font-size:14px;\n  margin:16px 0 20px\n}\n#synbio-tools .card-foot {\n  display:flex;\n  align-items:center;\n  justify-content:space-between;\n  margin-top:auto;\n  font-size:13px;\n  color:var(--navy)\n}\n#synbio-tools .number {\n  color:#9babc2;\n  font-size:12px;\n  letter-spacing:.1em;\n  margin-bottom:18px\n}\n#synbio-tools .workspace {\n  margin-top:36px;\n  padding:32px;\n  scroll-margin-top:100px\n}\n#synbio-tools .workspace[hidden],#synbio-tools .card[hidden] {\n  display:none\n}\n#synbio-tools .workspace-head {\n  display:flex;\n  justify-content:space-between;\n  gap:20px;\n  margin-bottom:25px\n}\n#synbio-tools .form-result {\n  display:grid;\n  grid-template-columns:1.2fr 1fr;\n  gap:32px\n}\n#synbio-tools .fields {\n  display:grid;\n  grid-template-columns:1fr 1fr;\n  gap:16px\n}\n#synbio-tools label {\n  display:block;\n  font-size:13px;\n  color:var(--navy)\n}\n#synbio-tools input,#synbio-tools select {\n  display:block;\n  width:100%;\n  margin-top:6px;\n  padding:11px 12px;\n  border:1px solid #203e7320;\n  border-radius:12px;\n  background:#fffb;\n  color:var(--navy);\n  min-width:0\n}\n#synbio-tools input:focus,#synbio-tools select:focus {\n  outline:2px solid #203e7360;\n  outline-offset:2px\n}\n#synbio-tools :focus-visible {\n  outline:2px solid var(--red);\n  outline-offset:4px\n}\n#synbio-tools .results {\n  background:#edf3fb;\n  border-radius:20px;\n  padding:26px\n}\n#synbio-tools .result-value {\n  font-size:clamp(28px,3vw,42px);\n  font-weight:500;\n  color:var(--navy);\n  line-height:1.2;\n  margin:10px 0 20px;\n  overflow-wrap:anywhere\n}\n#synbio-tools .metric {\n  border-top:1px solid #203e7317;\n  padding:10px 0;\n  display:flex;\n  justify-content:space-between;\n  gap:20px;\n  font-size:14px\n}\n#synbio-tools .note {\n  font-size:12px;\n  margin-top:18px;\n  line-height:1.6\n}\n#synbio-tools .actions {\n  display:flex;\n  gap:10px;\n  flex-wrap:wrap;\n  margin-top:22px\n}\n#synbio-tools .error {\n  color:#b51f3a;\n  font-size:14px\n}\n#synbio-tools .bottom {\n  padding:32px;\n  margin-top:36px;\n  display:flex;\n  justify-content:space-between;\n  align-items:center;\n  gap:30px\n}\n#synbio-tools .bottom p {\n  max-width:620px;\n  font-size:14px;\n  margin-top:12px\n}\n#synbio-tools table {\n  width:100%;\n  border-collapse:collapse;\n  font-size:12px;\n  white-space:nowrap\n}\n#synbio-tools td,#synbio-tools th {\n  padding:10px;\n  text-align:left;\n  border-bottom:1px solid #203e7317\n}\n#synbio-tools .table-wrap {\n  overflow:auto;\n  margin-top:22px\n}\n#synbio-tools .reveal {\n  animation:synbioToolsIn .65s both\n}\n@keyframes synbioToolsIn {\n  from {\n    opacity:0;\n    transform:translateY(15px)\n  }\n  to {\n    opacity:1;\n    transform:translateY(0)\n  }\n}\n@media(max-width:900px) {\n  #synbio-tools .grid {\n    grid-template-columns:1fr 1fr\n  }\n  #synbio-tools .hero {\n    grid-template-columns:1fr\n  }\n  #synbio-tools .hero-side {\n    display:none\n  }\n}\n@media(max-width:600px) {\n  #synbio-tools {\n    padding:40px 5% 50px\n  }\n  #synbio-tools .grid {\n    grid-template-columns:1fr\n  }\n  #synbio-tools .card {\n    min-height:210px;\n    padding:24px\n  }\n  #synbio-tools .form-result {\n    grid-template-columns:1fr\n  }\n  #synbio-tools .workspace {\n    padding:22px\n  }\n  #synbio-tools .fields {\n    grid-template-columns:1fr\n  }\n  #synbio-tools .bottom {\n    flex-direction:column;\n    align-items:flex-start;\n    padding:24px\n  }\n}\n@media(prefers-reduced-motion:reduce) {\n  #synbio-tools *,#synbio-tools .reveal {\n    animation:none!important;\n    transition:none!important;\n    scroll-behavior:auto!important\n  }\n}\n\/* DAFTAR VERTIKAL + POPUP DI SEBELAHNYA.\nUbah 340px untuk mengatur lebar daftar tools pada desktop. *\/\n#synbio-tools [hidden] {\n  display:none!important\n}\n#synbio-tools .tools-layout {\n  display:grid;\n  grid-template-columns:340px minmax(0,1fr);\n  gap:26px;\n  align-items:start;\n  margin-top:24px\n}\n#synbio-tools .grid {\n  grid-template-columns:1fr;\n  gap:10px\n}\n#synbio-tools .card {\n  min-height:0;\n  padding:20px 22px;\n  border-radius:20px\n}\n#synbio-tools .card h3 {\n  font-size:21px\n}\n#synbio-tools .card p {\n  margin:9px 0 14px;\n  font-size:13px\n}\n#synbio-tools .card .number {\n  margin-bottom:10px;\n  font-size:10px\n}\n#synbio-tools .card:hover {\n  transform:translateX(4px)\n}\n#synbio-tools .card[aria-expanded=true] {\n  border-color:#203e7350;\n  background:#ffffffdc;\n  box-shadow:0 12px 35px #203e7310\n}\n#synbio-tools .panel-slot {\n  position:sticky;\n  top:var(--panel-top);\n  min-width:0\n}\n#synbio-tools .panel-placeholder {\n  padding:48px 36px;\n  text-align:center;\n  min-height:430px;\n  display:flex;\n  flex-direction:column;\n  align-items:center;\n  justify-content:center\n}\n#synbio-tools .panel-placeholder .hint-icon {\n  font-size:32px;\n  color:var(--navy);\n  width:72px;\n  height:72px;\n  border:1px solid #fff;\n  border-radius:50%;\n  display:grid;\n  place-items:center;\n  margin-bottom:26px\n}\n#synbio-tools .panel-placeholder p {\n  font-size:14px;\n  max-width:330px;\n  margin:16px 0 0\n}\n#synbio-tools .workspace {\n  margin:0;\n  padding:28px;\n  max-height:calc(100dvh - 140px);\n  overflow:auto;\n  overscroll-behavior:contain;\n  background:#f8fbfff2;\n  box-shadow:0 18px 55px #203e7312;\n  animation:synbioToolsPanel .4s both\n}\n#synbio-tools .workspace-head h2 {\n  font-size:27px\n}\n#synbio-tools .workspace-head .eyebrow {\n  margin-bottom:12px\n}\n#synbio-tools .close {\n  flex-shrink:0;\n  align-self:flex-start\n}\n#synbio-tools .form-result {\n  grid-template-columns:1fr;\n  gap:24px\n}\n#synbio-tools .results {\n  padding:22px\n}\n#synbio-tools .backdrop {\n  display:none\n}\n@keyframes synbioToolsPanel {\n  from {\n    opacity:0;\n    transform:translateX(14px)\n  }\n  to {\n    opacity:1;\n    transform:translateX(0)\n  }\n}\n@media(max-width:1000px) and (min-width:761px) {\n  #synbio-tools .tools-layout {\n    grid-template-columns:290px minmax(0,1fr);\n    gap:18px\n  }\n  #synbio-tools .fields {\n    grid-template-columns:1fr\n  }\n  #synbio-tools .workspace {\n    padding:22px\n  }\n}\n@media(max-width:760px) {\n  #synbio-tools .tools-layout {\n    grid-template-columns:1fr;\n    margin-top:18px\n  }\n  #synbio-tools .panel-slot {\n    position:static\n  }\n  #synbio-tools .panel-placeholder {\n    display:none\n  }\n  #synbio-tools .card {\n    min-height:0;\n    padding:20px\n  }\n  #synbio-tools .workspace {\n    position:fixed;\n    inset:20px 12px auto;\n    width:auto;\n    max-height:calc(100dvh - 40px);\n    margin:0;\n    padding:22px;\n    z-index:100001;\n    border-radius:24px;\n    box-shadow:0 24px 80px #0b234b40;\n    animation:synbioToolsIn .3s both\n  }\n  #synbio-tools .backdrop.is-open {\n    display:block;\n    position:fixed;\n    inset:0;\n    background:#152b4c65;\n    backdrop-filter:blur(5px);\n    z-index:100000\n  }\n  #synbio-tools.modal-open {\n    overflow:visible\n  }\n  #synbio-tools .workspace-head h2 {\n    font-size:24px\n  }\n  #synbio-tools .workspace-head {\n    gap:10px\n  }\n  #synbio-tools .fields {\n    grid-template-columns:1fr\n  }\n}\n\/* LIST TOOLS: nama dan keterangan singkat; tinggi bebas mengikuti isi. *\/\n#synbio-tools .tools-layout {\n  grid-template-columns:var(--list-width) minmax(0,1fr);\n  align-items:start\n}\n#synbio-tools .tools-sidebar {\n  position:sticky;\n  top:var(--panel-top)\n}\n#synbio-tools .grid {\n  gap:6px;\n  overflow-y:visible;\n  max-height:none;\n  padding:2px 6px 2px 2px;\n  scrollbar-width:thin;\n  scrollbar-color:#b8c8dd transparent;\n  overscroll-behavior:contain\n}\n#synbio-tools .card {\n  padding:12px 16px;\n  min-height:0;\n  flex-direction:row;\n  align-items:center;\n  justify-content:space-between;\n  gap:12px;\n  border-radius:14px;\n  animation:none\n}\n#synbio-tools .card h3 {\n  font-size:16px;\n  line-height:1.3;\n  letter-spacing:-.025em\n}\n#synbio-tools .card:hover {\n  transform:none;\n  background:#ffffffc9\n}\n#synbio-tools .workspace {\n  height:auto;\n  min-height:0\n}\n#synbio-tools .panel-placeholder {\n  min-height:0;\n  padding:32px\n}\n#synbio-tools .tool-description {\n  font-size:14px;\n  margin:0 0 22px;\n  max-width:650px\n}\n#synbio-tools .list-hint {\n  font-size:11px;\n  color:#8191a9;\n  margin-top:8px\n}\n@media(max-width:1000px) and (min-width:761px) {\n  #synbio-tools .tools-layout {\n    grid-template-columns:250px minmax(0,1fr)\n  }\n}\n@media(max-width:760px) {\n  #synbio-tools .tools-layout {\n    grid-template-columns:1fr\n  }\n  #synbio-tools .tools-sidebar {\n    position:static\n  }\n  #synbio-tools .grid {\n    max-height:none;\n    overflow:visible;\n    padding:0\n  }\n  #synbio-tools .card {\n    padding:14px 18px\n  }\n  #synbio-tools .list-hint {\n    display:none\n  }\n}\n\/* PANAH SERAGAM: SVG menjaga posisi ikon tepat di tengah.\nUkuran lingkaran dan ikon diatur di bagian WARNA & UKURAN di atas. *\/\n#synbio-tools .arrow {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--arrow-size);\n  height: var(--arrow-size);\n  min-width: var(--arrow-size);\n  flex: 0 0 var(--arrow-size);\n  padding: 0;\n  border: 0;\n  border-radius: 50%;\n  background: var(--arrow-bg);\n  color: var(--navy);\n  line-height: 0;\n  transition: background .3s ease-in-out, color .3s ease-in-out;\n}\n#synbio-tools .arrow svg {\n  display: block;\n  width: var(--arrow-icon-size);\n  height: var(--arrow-icon-size);\n  fill: none;\n  stroke: currentColor;\n  stroke-width: 1.8;\n  stroke-linecap: round;\n  stroke-linejoin: round;\n}\n#synbio-tools .button:hover .arrow,\n#synbio-tools .button:focus-visible .arrow,\n#synbio-tools .card:hover .arrow,\n#synbio-tools .card:focus-visible .arrow {\n  background: var(--arrow-hover);\n  color: #fff;\n}\n\/* KETERANGAN TIAP TOOL: ubah teks desc pada const tools di bawah. *\/\n#synbio-tools .tool-copy {\n  display: block;\n  min-width: 0;\n}\n#synbio-tools .tool-summary {\n  display: block;\n  color: var(--ink);\n  font-size: 12px;\n  line-height: 1.55;\n  margin-top: 6px;\n}\n#synbio-tools .card {\n  padding: 15px 16px;\n  align-items: center;\n}\n#synbio-tools .button {\n  gap: 16px;\n  padding: 10px 10px 10px 20px;\n  border-radius: 24px;\n}\n\n\/* HALAMAN SAMPAI ATAS \u2014 sama seperti hero Synbio.\n   Hanya aktif pada halaman yang berisi tools ini.\n   Hapus spacer header; latar ditarik sampai atas.\n   Isi tetap diberi ruang di bawah header supaya tidak tertutup. *\/\nbody.synbio-tools-page #sg-header-spacer {\n  display: none !important;\n  height: 0 !important;\n}\nbody.synbio-tools-page {\n  background: #f6f8fb;\n}\n#synbio-tools {\n  margin-top: calc(-1 * var(--synbio-tools-top-gap, 0px));\n  padding-top: calc(64px + var(--synbio-tools-header-overlap, 0px));\n}\n@media (max-width:600px) {\n  #synbio-tools {\n    padding-top: calc(40px + var(--synbio-tools-header-overlap, 0px));\n  }\n}\n<\/style>\n<!-- BAGIAN B \u2014 HTML: judul, pengantar, tombol, dan tempat kalkulator. -->\n<section id=\"synbio-tools\" aria-label=\"Tools Petambak Synbio\">\n<div class=\"wrap\">\n<div class=\"hero reveal\">\n<div>\n<span class=\"eyebrow\">Synbio \/ Tools Petambak<\/span>\n<h1>Hitung lebih mudah.<br>Kelola lebih terarah.<\/h1>\n<p class=\"intro\">Dari volume air hingga evaluasi panen, gunakan data tambak Anda untuk membantu perencanaan dan pencatatan sehari-hari.<\/p>\n<a href=\"#synbio-tools-list\" class=\"button\">Pilih tools <span class=\"arrow\" aria-hidden=\"true\">\n<svg viewBox=\"0 0 24 24\" focusable=\"false\">\n<path d=\"m9 5 7 7-7 7\"\/>\n<\/svg>\n<\/span>\n<\/a>\n<\/div>\n<div class=\"hero-side glass\">\n<span class=\"eyebrow\">Science sustains balance<\/span>\n<strong>17 tools<\/strong>\n<p>Perhitungan praktis dalam satu tempat.<br>Tanpa registrasi. Bisa digunakan di ponsel.<\/p>\n<\/div>\n<\/div>\n<div id=\"synbio-tools-list\">\n<h2>Apa yang ingin Anda hitung?<\/h2>\n<div class=\"toolbar\" aria-label=\"Kategori tools\">\n<\/div>\n<input class=\"search\" type=\"search\" aria-label=\"Cari tools\" placeholder=\"Cari volume, pakan, dosis, panen\u2026\">\n<div class=\"tools-layout\">\n<div class=\"tools-sidebar\">\n<div class=\"grid\">\n<\/div>\n\n<p class=\"empty\" hidden>Tidak ada tools yang cocok dengan pencarian ini.<\/p>\n<\/div>\n<div class=\"panel-slot\">\n<div class=\"panel-placeholder glass\">\n<span class=\"hint-icon\" aria-hidden=\"true\">\u2197<\/span>\n<span class=\"eyebrow\">Tools Petambak<\/span>\n<h3>Pilih tools di sebelah kiri.<\/h3>\n<p>Kalkulator akan muncul di sini. Isi data tambak Anda, lalu lihat hasil perhitungannya.<\/p>\n<\/div>\n<div class=\"backdrop\" aria-hidden=\"true\">\n<\/div>\n<div id=\"synbio-calculator-panel\" class=\"workspace glass\" hidden tabindex=\"-1\" aria-labelledby=\"synbio-tool-title\">\n<div class=\"workspace-head\">\n<div>\n<span class=\"eyebrow category\">\n<\/span>\n<h2 id=\"synbio-tool-title\" class=\"tool-title\">\n<\/h2>\n<\/div>\n<button class=\"button close\" aria-label=\"Tutup kalkulator\">Tutup <span class=\"arrow\" aria-hidden=\"true\">\n<svg viewBox=\"0 0 24 24\" focusable=\"false\">\n<path d=\"m6 6 12 12M18 6 6 18\"\/>\n<\/svg>\n<\/span>\n<\/button>\n<\/div>\n<p class=\"tool-description\">\n<\/p>\n<div class=\"form-result\">\n<form novalidate>\n<div class=\"fields\">\n<\/div>\n<div class=\"actions\">\n<button type=\"submit\" class=\"button\">Hitung <span class=\"arrow\" aria-hidden=\"true\">\n<svg viewBox=\"0 0 24 24\" focusable=\"false\">\n<path d=\"m9 5 7 7-7 7\"\/>\n<\/svg>\n<\/span>\n<\/button>\n<button type=\"reset\" class=\"button\">Reset<\/button>\n<\/div>\n<\/form>\n<div class=\"results\" aria-live=\"polite\">\n<span class=\"eyebrow\">Hasil perhitungan<\/span>\n<div class=\"output\">Isi data, lalu pilih Hitung.<\/div>\n<div class=\"actions\">\n<button class=\"button download\" hidden>Unduh hasil CSV <span class=\"arrow\" aria-hidden=\"true\">\n<svg viewBox=\"0 0 24 24\" focusable=\"false\">\n<path d=\"M12 4v16m-6-6 6 6 6-6\"\/>\n<\/svg>\n<\/span>\n<\/button>\n<\/div>\n<\/div>\n<\/div>\n<p class=\"note formula\">\n<\/p>\n<p class=\"note guidance\">\n<\/p>\n<div class=\"log-section\" hidden>\n<div class=\"actions\">\n<button class=\"button export-log\">Unduh catatan CSV <span class=\"arrow\" aria-hidden=\"true\">\n<svg viewBox=\"0 0 24 24\" focusable=\"false\">\n<path d=\"M12 4v16m-6-6 6 6 6-6\"\/>\n<\/svg>\n<\/span>\n<\/button>\n<button class=\"button clear-log\">Hapus semua catatan<\/button>\n<\/div>\n<p class=\"note log-status\">\n<\/p>\n<div class=\"table-wrap\">\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"bottom glass\">\n<div>\n<h3>Lengkapi angka dengan pengamatan.<\/h3>\n<p>Hasil kalkulator mengikuti data yang Anda masukkan. Gunakan sampling, pengamatan nafsu makan, dan catatan tambak untuk mengevaluasi hasilnya.<\/p>\n<\/div>\n<a class=\"button consult\" href=\"\/kontak\/\">Konsultasi Synbio <span class=\"arrow\" aria-hidden=\"true\">\n<svg viewBox=\"0 0 24 24\" focusable=\"false\">\n<path d=\"m9 5 7 7-7 7\"\/>\n<\/svg>\n<\/span>\n<\/a>\n<\/div>\n<details class=\"note\">\n<summary>Rumus dan rujukan<\/summary>\n<p>Rumus tersedia di setiap kalkulator. Rujukan biomassa, ransum pakan dan FCR: <a href=\"https:\/\/www.fao.org\/fishery\/static\/FAO_Training\/FAO_Training\/General\/x6709e\/x6709e10.htm\" target=\"_blank\" rel=\"noopener\">FAO \u2014 Feeding management<\/a> dan <a href=\"https:\/\/www.fao.org\/fishery\/static\/FAO_Training\/FAO_Training\/General\/x6709e\/x6709e16.htm\" target=\"_blank\" rel=\"noopener\">FAO \u2014 Stock management<\/a>.<\/p>\n<\/details>\n<\/div>\n<\/section>\n<script>\n(()=>{\n  'use strict';\n  const root=document.getElementById('synbio-tools');\n  if(!root||root.dataset.ready)return;\n  root.dataset.ready='true';\n\n  \/\/ LATAR SAMPAI ATAS: mengikuti cara hero, tanpa mengubah posisi header.\n  \/\/ Ukur celah Elementor dan ruang header secara otomatis saat resize\/load.\n  document.body.classList.add('synbio-tools-page');\n  const headerSelector = '#sg-header, header, .elementor-location-header, [data-elementor-type=\"header\"], #masthead, .hfe-site-header';\n  let topFitFrame = 0;\n  function fitToolsPageTop() {\n    cancelAnimationFrame(topFitFrame);\n    topFitFrame = requestAnimationFrame(() => {\n      if (!root.isConnected) return;\n      const adminBar = document.getElementById('wpadminbar');\n      const adminHeight = adminBar ? adminBar.getBoundingClientRect().height : 0;\n      const previousGap = parseFloat(root.style.getPropertyValue('--synbio-tools-top-gap')) || 0;\n      const originalTop = root.getBoundingClientRect().top + window.scrollY + previousGap;\n      const gap = Math.max(0, originalTop - adminHeight);\n      root.style.setProperty('--synbio-tools-top-gap', gap + 'px');\n      const pageTop = originalTop - gap;\n      let headerBottom = pageTop;\n      for (const header of document.querySelectorAll(headerSelector)) {\n        if (root.contains(header) || header.contains(root)) continue;\n        const bar = header.id === 'sg-header' ? header.querySelector('.sg-bar') : null;\n        const rect = (bar || header).getBoundingClientRect();\n        if (!rect.height || getComputedStyle(header).display === 'none') continue;\n        const fixed = getComputedStyle(header).position === 'fixed';\n        const bottom = rect.bottom + (fixed ? 0 : window.scrollY);\n        if (rect.top < window.innerHeight \/ 2 && bottom > pageTop && bottom < window.innerHeight * .6) {\n          headerBottom = Math.max(headerBottom, bottom);\n        }\n      }\n      root.style.setProperty('--synbio-tools-header-overlap', Math.max(0, headerBottom - pageTop) + 'px');\n    });\n  }\n  fitToolsPageTop();\n  window.addEventListener('resize', fitToolsPageTop, {passive:true});\n  window.addEventListener('load', fitToolsPageTop, {once:true});\n  if (window.visualViewport) window.visualViewport.addEventListener('resize', fitToolsPageTop, {passive:true});\n  if ('ResizeObserver' in window) {\n    const topHeaderObserver = new ResizeObserver(fitToolsPageTop);\n    document.querySelectorAll(headerSelector).forEach(el => topHeaderObserver.observe(el));\n  }\n  if (document.fonts) document.fonts.ready.then(fitToolsPageTop);\n  setTimeout(fitToolsPageTop, 350);\n  setTimeout(fitToolsPageTop, 1200);\n\n  \/\/ EDIT LINK KONSULTASI DI SINI sesuai slug halaman WordPress Anda.\n  \/\/ 3. PENGATURAN LINK \u2014 ganti alamat konsultasi di sini.\n  const CONFIG = {\n    consultUrl: '\/kontak\/'\n  }\n  ;\n  root.querySelector('.consult').href=CONFIG.consultUrl;\n  const n=(key,\n  label,\n  value=undefined,\n  max=undefined,\n  min=0)=>({\n    key,\n    label,\n    value,\n    max,\n    min\n  }\n  );\n  const s=(key,\n  label,\n  options)=>({\n    key,\n    label,\n    options\n  }\n  );\n  const fmt=(v,\n  d=2)=>new Intl.NumberFormat('id-ID',\n  {\n    maximumFractionDigits:d\n  }\n  ).format(v);\n  \/\/ DATA DOSIS SYNBIO \u2014 edit hanya tabel ini untuk memperbarui produk.\n  \/\/ Sumber: halaman cara penggunaan resmi synbioid.com, diperiksa 3 Oktober 2026.\n  \/\/ mode: pond = tebar kolam; feed = campuran pakan.\n  \/\/ min\/max: pond dalam ppm (= gram produk per m\u00b3 air), feed dalam g\/kg pakan.\n  \/\/ Dosis rentang ditampilkan sebagai minimum\u2013maksimum, tidak dipilih otomatis.\n  \/\/ Acuan kg\/ha pada halaman produk setara ppm hanya saat tinggi air 1 meter.\n  \/\/ Kalkulator memakai volume aktual (luas \u00d7 tinggi air), bukan asumsi tinggi 1 m.\n  \/\/ Satu produk dengan dua aplikasi dibuat dua pilihan, seperti Lactozyme.\n  const synbioProducts = [\n    {id:'actifast', name:'Actifast', mode:'pond', min:0.1, max:0.2, frequency:'1\u20132 kali per minggu', slug:'probiotik-pengontrol-alga-tambak-actifast'},\n    {id:'bacizyme', name:'Bacizyme', mode:'pond', min:0.1, max:0.2, frequency:'1\u20132 kali per minggu', slug:'bacizyme'},\n    {id:'biopure', name:'Biopure', mode:'pond', min:0.1, max:0.2, frequency:'1\u20132 kali per minggu', slug:'biopure'},\n    {id:'c-shield', name:'C-shield', mode:'feed', min:3, max:5, frequency:'Setiap hari', slug:'c-shield'},\n    {id:'catalise', name:'cataliSe', mode:'pond', min:3, max:5, frequency:'Setiap 3 hari', slug:'catalise'},\n    {id:'flocuzyme', name:'Flocuzyme', mode:'pond', min:1, max:2, frequency:'2 kali per minggu', slug:'flocuzyme'},\n    {id:'herbamix', name:'Herbamix', mode:'feed', min:10, max:10, frequency:'Setiap 2 hari', slug:'herbamix'},\n    {id:'hydrozyme', name:'Hydrozyme', mode:'pond', min:1, max:1, frequency:'Setiap 3 hari', slug:'hydrozyme'},\n    {id:'lactozyme-pond', name:'Lactozyme', mode:'pond', min:0.1, max:0.2, frequency:'1\u20132 kali per minggu', slug:'lactozyme'},\n    {id:'lactozyme-feed', name:'Lactozyme', mode:'feed', min:5, max:5, frequency:'Pagi dan sore', slug:'lactozyme'},\n    {id:'nitrogo', name:'Nitrogo', mode:'pond', min:0.1, max:0.2, frequency:'1\u20132 kali per minggu', slug:'nitrogo'},\n    {id:'nutrizyme', name:'Nutrizyme', mode:'feed', min:10, max:10, frequency:'Setiap 2 hari', slug:'nutrizyme'},\n    {id:'optimasr', name:'OptimaSR', mode:'feed', min:2, max:2, frequency:'Setiap hari', slug:'optimasr'},\n    {id:'rodonix', name:'Rodonix', mode:'pond', min:0.1, max:0.2, frequency:'1\u20132 kali per minggu', slug:'rodonix'},\n    {id:'tiozen', name:'Tiozen', mode:'pond', min:0.1, max:0.2, frequency:'1\u20132 kali per minggu', slug:'tiozen'}\n  ];\n  const productLabel = p => p.name + ' \u2014 ' + (p.mode==='pond'?'tebar kolam':'campuran pakan');\n  function doseProduct(id) {\n    const p=synbioProducts.find(p=>p.id===id);\n    if(!p)throw Error('Pilih produk Synbio.');\n    return p;\n  }\n  function calculateSynbioDose(x) {\n    const p=doseProduct(x.product);\n    const base=p.mode==='pond'?x.area*x.depth:x.feed;\n    if(!Number.isFinite(base)||base<=0)throw Error('Isi jumlah yang lebih besar dari nol.');\n    const rows=p.min===p.max?\n      [['Kebutuhan per aplikasi',base*p.min,'g'], ['Dalam kilogram',base*p.min\/1000,'kg']]:\n      [['Kebutuhan minimum per aplikasi',base*p.min,'g'], ['Kebutuhan maksimum per aplikasi',base*p.max,'g'],\n       ['Minimum dalam kilogram',base*p.min\/1000,'kg'], ['Maksimum dalam kilogram',base*p.max\/1000,'kg']];\n    rows.push([p.mode==='pond'?'Volume air':'Jumlah pakan',base,p.mode==='pond'?'m\u00b3':'kg']);\n    return rows;\n  }\n  \/\/ 4. DAFTAR TOOLS \u2014 satu objek untuk satu kalkulator.\n  \/\/ title = nama di list; cat = kategori; desc = penjelasan.\n  \/\/ fields = kolom input; formula = teks rumus; note = petunjuk.\n  \/\/ calc = fungsi hitung. Ubah nama\/petunjuk tanpa mengubah calc.\n  \/\/ n('kode', 'label', nilaiAwal, nilaiMaksimum, nilaiMinimum) = input angka.\n  \/\/ s('kode', 'label', [['nilai', 'teks pilihan']]) = dropdown.\n  \/\/ Urutan objek di bawah menentukan urutan list tools.\n  const tools=[ {\n    id:'volume',\n    title:'Volume kolam',\n    cat:'Air & aplikasi',\n    desc:'Hitung luas dan volume air untuk kolam persegi atau bundar.',\n    fields:[s('shape',\n    'Bentuk kolam',\n    [['rect',\n    'Persegi \/ persegi panjang'],\n    ['circle',\n    'Bundar']]),\n    n('length',\n    'Panjang (m)'),\n    n('width',\n    'Lebar (m)'),\n    n('diameter',\n    'Diameter (m)'),\n    n('depth',\n    'Kedalaman air rata-rata (m)')],\n    formula:'Persegi: luas = panjang \u00d7 lebar. Bundar: luas = \u03c0 \u00d7 (diameter \u00f7 2)\u00b2. Volume = luas \u00d7 kedalaman air.',\n    note:'Gunakan kedalaman air, bukan tinggi dinding kolam. Bentuk tidak beraturan memerlukan estimasi luas yang diukur terpisah.',\n    calc:x=>{\n      const area=x.shape==='circle'?Math.PI*(x.diameter\/2)**2:x.length*x.width;\n      return [['Volume air',\n      area*x.depth,\n      'm\u00b3'],\n      ['Luas permukaan',\n      area,\n      'm\u00b2'],\n      ['Volume dalam liter',\n      area*x.depth*1000,\n      'L']]\n    }\n  }\n  ,\n  {\n    id:'dose',\n    title:'Dosis produk Synbio',\n    cat:'Air & aplikasi',\n    desc:'Pilih produk, lalu hitung kebutuhan untuk kolam atau campuran pakan.',\n    fields:[s('product', 'Produk Synbio', [['','Pilih produk Synbio'], ...synbioProducts.map(p=>[p.id,productLabel(p)])]),\n      n('area', 'Luas kolam (m\u00b2)', undefined, undefined, 0.000001),\n      n('depth', 'Tinggi air rata-rata (m)', undefined, undefined, 0.000001),\n      n('feed', 'Jumlah pakan yang dicampur (kg)', undefined, undefined, 0.000001)],\n    formula:'Pilih produk untuk melihat rumus dan dosisnya.',\n    note:'Kebutuhan dihitung untuk satu aplikasi.',\n    calc:calculateSynbioDose\n  }\n  ,\n  {\n    id:'biomass',\n    title:'Estimasi biomassa',\n    cat:'Pakan & populasi',\n    desc:'Perkirakan populasi hidup dan total berat dari hasil sampling.',\n    fields:[n('stock',\n    'Jumlah tebar awal (ekor)'),\n    n('sr',\n    'Estimasi survival rate (%)',\n    undefined,\n    100),\n    n('abw',\n    'Berat rata-rata \/ ABW (g per ekor)')],\n    formula:'Populasi hidup = tebar \u00d7 SR \u00f7 100. Biomassa = populasi hidup \u00d7 ABW \u00f7 1.000.',\n    note:'SR selama pemeliharaan merupakan estimasi. Sesuaikan jumlah dasar jika sudah ada panen parsial atau penambahan populasi.',\n    calc:x=>[['Estimasi biomassa',\n    x.stock*x.sr\/100*x.abw\/1000,\n    'kg'],\n    ['Estimasi populasi hidup',\n    x.stock*x.sr\/100,\n    'ekor'],\n    ['Size berdasarkan ABW',\n    x.abw>0?1000\/x.abw:0,\n    'ekor\/kg']]\n  }\n  ,\n  {\n    id:'feed',\n    title:'Pakan harian',\n    cat:'Pakan & populasi',\n    desc:'Hitung total pakan dan pembagian rata per sesi pemberian.',\n    fields:[n('biomass',\n    'Biomassa saat ini (kg)'),\n    n('rate',\n    'Feeding rate (% biomassa \/ hari)',\n    undefined,\n    100),\n    n('sessions',\n    'Jumlah sesi per hari',\n    undefined,\n    24,\n    1)],\n    formula:'Pakan harian = biomassa \u00d7 feeding rate \u00f7 100. Pakan per sesi = pakan harian \u00f7 jumlah sesi.',\n    note:'Feeding rate diisi sesuai program pakan Anda. Pembagian per sesi pada tools ini sama rata; sesuaikan dengan anco, nafsu makan, fase pertumbuhan, dan kondisi air.',\n    calc:x=>{\n      if(!Number.isInteger(x.sessions))throw Error('Jumlah sesi harus berupa bilangan bulat.');\n      return [['Total pakan harian',\n      x.biomass*x.rate\/100,\n      'kg\/hari'],\n      ['Pakan per sesi (rata)',\n      x.biomass*x.rate\/100\/x.sessions,\n      'kg']]\n    }\n  }\n  ,\n  {\n    id:'fcr',\n    title:'Evaluasi FCR',\n    cat:'Evaluasi & panen',\n    desc:'Bandingkan pakan kumulatif dengan pertambahan biomassa.',\n    fields:[n('feed',\n    'Total pakan periode ini (kg)'),\n    n('start',\n    'Biomassa awal periode (kg)'),\n    n('end',\n    'Biomassa akhir tersisa (kg)'),\n    n('partial',\n    'Total panen selama periode (kg)',\n    0)],\n    formula:'Pertambahan biomassa = biomassa akhir tersisa + seluruh panen selama periode \u2212 biomassa awal. FCR = total pakan \u00f7 pertambahan biomassa.',\n    note:'Gunakan periode yang sama untuk seluruh data, tanpa tebar tambahan. Tools ini memakai pertambahan biomassa bersih dan tidak menambahkan bobot mortalitas.',\n    calc:x=>{\n      let gain=x.end+x.partial-x.start;\n      if(gain<=0)throw Error('Pertambahan biomassa harus lebih dari nol untuk menghitung FCR.');\n      return [['FCR',\n      x.feed\/gain,\n      ''],\n      ['Pertambahan biomassa bersih',\n      gain,\n      'kg']]\n    }\n  }\n  ,\n  {\n    id:'sr',\n    title:'Survival rate (SR)',\n    cat:'Evaluasi & panen',\n    desc:'Estimasi persentase populasi hidup dari biomassa dan ABW.',\n    fields:[n('stock', 'Jumlah tebar awal (ekor)', undefined, undefined, 1),\n      n('biomass', 'Biomassa (kg)'),\n      n('abw', 'ABW \/ berat rata-rata (g\/ekor)', undefined, undefined, 0.000001)],\n    formula:'SR = (biomassa \u00d7 1.000 \u00f7 ABW) \u00f7 jumlah tebar \u00d7 100%.',\n    note:'Biomassa dalam kg dikonversi ke gram sebelum dibagi ABW. Hasil merupakan estimasi berdasarkan biomassa dan sampling. Untuk SR satu siklus, gunakan total biomassa panen dan ABW rata-rata tertimbang berdasarkan jumlah ekor; untuk populasi tersisa, gunakan biomassa serta ABW saat ini. Berlaku tanpa tebar tambahan.',\n    \/\/ Biomassa (kg) \u00d7 1.000 \/ ABW (g\/ekor) = estimasi populasi (ekor).\n    \/\/ SR = estimasi populasi \/ jumlah tebar \u00d7 100, bukan kebalikannya.\n    calc:x=>{\n      if(x.stock<=0||x.abw<=0)throw Error('Jumlah tebar dan ABW harus lebih besar dari nol.');\n      const population=x.biomass*1000\/x.abw;\n      if(population>x.stock)throw Error('Estimasi SR melebihi 100%. Periksa biomassa, ABW, dan jumlah tebar.');\n      return [['Survival rate', population\/x.stock*100, '%'],\n        ['Estimasi populasi hidup', population, 'ekor']];\n    }\n  }\n  ,\n  {\n    id:'density',\n    title:'Kepadatan tebar',\n    cat:'Pakan & populasi',\n    desc:'Konversi target kepadatan menjadi jumlah benih yang ditebar.',\n    fields:[n('base',\n    'Luas \/ volume kolam',\n    undefined,\n    undefined,\n    0.000001),\n    s('basis',\n    'Dasar kepadatan',\n    [['m\u00b2',\n    'Luas (m\u00b2)'],\n    ['m\u00b3',\n    'Volume (m\u00b3)']]),\n    n('density',\n    'Target kepadatan (ekor per satuan)')],\n    formula:'Jumlah tebar = luas atau volume \u00d7 target kepadatan.',\n    note:'Target kepadatan diisi pengguna sesuai spesies dan kapasitas sistem budidaya. Hasil bukan penilaian kelayakan kepadatan.',\n    calc:x=>[['Rencana jumlah tebar',\n    Math.floor(x.base*x.density),\n    'ekor'],\n    ['Target kepadatan',\n    x.density,\n    'ekor\/'+x.basis]]\n  }\n  ,\n  {\n    id:'exchange',\n    title:'Pergantian air',\n    cat:'Air & aplikasi',\n    desc:'Hitung volume pergantian dan estimasi waktu pompa.',\n    fields:[n('volume',\n    'Volume air kolam (m\u00b3)'),\n    n('percent',\n    'Persentase air diganti (%)',\n    undefined,\n    100),\n    n('flow',\n    'Debit pompa aktual (m\u00b3\/jam)',\n    undefined,\n    undefined,\n    0.000001)],\n    formula:'Volume diganti = volume kolam \u00d7 persentase \u00f7 100. Waktu pompa = volume diganti \u00f7 debit aktual.',\n    note:'Estimasi untuk pengurasan lalu pengisian dengan volume yang sama. Pertukaran dengan aliran masuk dan keluar bersamaan memerlukan perhitungan pencampuran berbeda. Gunakan debit aktual di lapangan.',\n    calc:x=>[['Volume pergantian',\n    x.volume*x.percent\/100,\n    'm\u00b3'],\n    ['Estimasi waktu pompa',\n    x.volume*x.percent\/100\/x.flow,\n    'jam'],\n    ['Estimasi dalam menit',\n    x.volume*x.percent\/100\/x.flow*60,\n    'menit']]\n  }\n  ,\n  {\n    id:'harvest',\n    title:'Simulasi panen',\n    cat:'Evaluasi & panen',\n    desc:'Perkirakan berat, penjualan, dan selisih terhadap biaya input.',\n    fields:[n('stock',\n    'Tebar awal (ekor)'),\n    n('sr',\n    'Target SR (%)',\n    undefined,\n    100),\n    n('abw',\n    'Target berat rata-rata (g)'),\n    n('price',\n    'Harga jual (Rp\/kg)'),\n    n('cost',\n    'Total biaya siklus (Rp)')],\n    formula:'Berat panen = tebar \u00d7 SR \u00f7 100 \u00d7 ABW \u00f7 1.000. Penjualan = berat panen \u00d7 harga. Selisih = penjualan \u2212 biaya input.',\n    note:'Simulasi satu kali panen tanpa panen parsial. Masukkan seluruh biaya siklus untuk estimasi yang lebih lengkap; hasil tidak menjamin pendapatan atau laba.',\n    calc:x=>{\n      const kg=x.stock*x.sr\/100*x.abw\/1000;\n      return [['Estimasi berat panen',\n      kg,\n      'kg'],\n      ['Estimasi penjualan',\n      kg*x.price,\n      'Rp'],\n      ['Selisih penjualan \u2212 biaya',\n      kg*x.price-x.cost,\n      'Rp'],\n      ['Harga impas',\n      kg>0?x.cost\/kg:0,\n      'Rp\/kg']]\n    }\n  }\n  ,\n  {\n    id:'sampling',\n    title:'Sampling ABW & size',\n    cat:'Pakan & populasi',\n    desc:'Hitung berat rata-rata dan size dari bobot total sampel.',\n    fields:[n('weight',\n    'Berat seluruh sampel (g)',\n    undefined,\n    undefined,\n    0.000001),\n    n('count',\n    'Jumlah sampel (ekor)',\n    undefined,\n    undefined,\n    1)],\n    formula:'ABW = bobot total sampel \u00f7 jumlah sampel. Size = 1.000 \u00f7 ABW.',\n    note:'Gunakan sampel yang mewakili populasi dan timbang tanpa air atau wadah. Jumlah sampel harus berupa bilangan bulat.',\n    calc:x=>{\n      if(!Number.isInteger(x.count))throw Error('Jumlah sampel harus bilangan bulat.');\n      return [['Berat rata-rata \/ ABW',\n      x.weight\/x.count,\n      'g\/ekor'],\n      ['Size',\n      1000*x.count\/x.weight,\n      'ekor\/kg']]\n    }\n  }\n  ,\n  {\n    id:'growth',\n    title:'Pertumbuhan harian (ADG)',\n    cat:'Evaluasi & panen',\n    desc:'Bandingkan dua hasil sampling untuk menghitung perubahan berat per hari.',\n    fields:[n('start',\n    'ABW sampling awal (g)',\n    undefined,\n    undefined,\n    0.000001),\n    n('end',\n    'ABW sampling akhir (g)',\n    undefined,\n    undefined,\n    0.000001),\n    n('days',\n    'Jarak waktu sampling (hari)',\n    undefined,\n    undefined,\n    1)],\n    formula:'ADG = (ABW akhir \u2212 ABW awal) \u00f7 jarak hari sampling.',\n    note:'Gunakan hasil sampling yang mewakili populasi. Nilai negatif berarti rata-rata bobot sampel akhir lebih kecil; evaluasi keterwakilan sampel dan kondisi budidaya.',\n    calc:x=>[['Pertumbuhan rata-rata harian',\n    (x.end-x.start)\/x.days,\n    'g\/hari'],\n    ['Perubahan ABW',\n    x.end-x.start,\n    'g'] ]\n  }\n  ,\n  {\n    id:'size',\n    title:'Konversi size \u2194 berat',\n    cat:'Pakan & populasi',\n    desc:'Konversi size ekor per kilogram menjadi berat rata-rata, atau sebaliknya.',\n    fields:[s('mode',\n    'Konversi',\n    [['size',\n    'Size \u2192 berat rata-rata'],\n    ['weight',\n    'Berat rata-rata \u2192 size']]),\n    n('value',\n    'Nilai size (ekor\/kg) \/ berat (g)',\n    undefined,\n    undefined,\n    0.000001)],\n    formula:'Berat rata-rata (g) = 1.000 \u00f7 size (ekor\/kg). Size = 1.000 \u00f7 berat rata-rata (g).',\n    note:'Masukkan nilai sesuai mode yang dipilih. Hasil merupakan nilai rata-rata, bukan distribusi ukuran hasil panen.',\n    calc:x=>[[x.mode==='size'?'Berat rata-rata':'Size',\n    1000\/x.value,\n    x.mode==='size'?'g\/ekor':'ekor\/kg']]\n  }\n  ,\n  {\n    id:'feedstock',\n    title:'Ketahanan stok pakan',\n    cat:'Pakan & populasi',\n    desc:'Perkirakan berapa hari stok pakan dapat memenuhi pemakaian saat ini.',\n    fields:[n('stock',\n    'Stok pakan tersedia (kg)'),\n    n('daily',\n    'Kebutuhan pakan per hari (kg)',\n    undefined,\n    undefined,\n    0.000001),\n    n('days',\n    'Periode rencana (hari)',\n    undefined,\n    undefined,\n    1)],\n    formula:'Ketahanan stok = stok \u00f7 kebutuhan harian. Tambahan pakan = maksimum(0, kebutuhan harian \u00d7 periode \u2212 stok).',\n    note:'Asumsi kebutuhan harian tetap. Perbarui perhitungan jika biomassa atau feeding rate berubah. Perhitungan belum memasukkan stok pengaman atau waktu pengiriman.',\n    calc:x=>[['Estimasi ketahanan stok',\n    x.stock\/x.daily,\n    'hari'],\n    ['Kebutuhan selama periode',\n    x.daily*x.days,\n    'kg'],\n    ['Tambahan stok dibutuhkan',\n    Math.max(0,\n    x.daily*x.days-x.stock),\n    'kg']]\n  }\n  ,\n  {\n    id:'feedcost',\n    title:'Biaya pakan',\n    cat:'Evaluasi & panen',\n    desc:'Hitung biaya pakan per hari, periode, dan kilogram pertambahan biomassa.',\n    fields:[n('daily',\n    'Pakan per hari (kg)'),\n    n('price',\n    'Harga pakan (Rp\/kg)'),\n    n('days',\n    'Periode (hari)',\n    undefined,\n    undefined,\n    1),\n    n('fcr',\n    'FCR yang digunakan',\n    undefined,\n    undefined,\n    0.000001)],\n    formula:'Biaya harian = pakan harian \u00d7 harga. Biaya periode = biaya harian \u00d7 hari. Biaya pakan per kg pertambahan biomassa = FCR \u00d7 harga pakan.',\n    note:'Biaya ini hanya komponen pakan. FCR diisi dari evaluasi atau target Anda; kebutuhan pakan harian diasumsikan tetap selama periode.',\n    calc:x=>[['Biaya pakan harian',\n    x.daily*x.price,\n    'Rp'],\n    ['Biaya pakan periode',\n    x.daily*x.price*x.days,\n    'Rp'],\n    ['Biaya pakan per kg pertambahan',\n    x.fcr*x.price,\n    'Rp\/kg']]\n  }\n  ,\n  {\n    id:'dilution',\n    title:'Pengenceran larutan',\n    cat:'Air & aplikasi',\n    desc:'Hitung volume larutan stok dan air untuk mencapai konsentrasi akhir.',\n    fields:[n('stock',\n    'Konsentrasi larutan stok',\n    undefined,\n    undefined,\n    0.000001),\n    n('target',\n    'Konsentrasi akhir yang diinginkan'),\n    s('unit',\n    'Satuan konsentrasi (keduanya sama)',\n    [['%',\n    '%'],\n    ['mg\/L',\n    'mg\/L'],\n    ['g\/L',\n    'g\/L']]),\n    n('volume',\n    'Volume akhir larutan (L)',\n    undefined,\n    undefined,\n    0.000001)],\n    formula:'Volume stok = konsentrasi akhir \u00f7 konsentrasi stok \u00d7 volume akhir. Air ditambahkan hingga mencapai volume akhir.',\n    note:'Gunakan satuan dan basis konsentrasi yang sama untuk stok dan target, dengan volume yang diasumsikan aditif. Hasil tidak menetapkan konsentrasi aplikasi di tambak; ikuti label dan kompatibilitas bahan.',\n    calc:x=>{\n      if(x.target>x.stock)throw Error('Konsentrasi akhir tidak boleh melebihi konsentrasi stok.');\n      if(x.unit==='%'&&x.stock>100)throw Error('Konsentrasi persen tidak boleh lebih dari 100.');\n      const v=x.target\/x.stock*x.volume;\n      return [['Larutan stok dibutuhkan',\n      v,\n      'L'],\n      ['Perkiraan air pengencer',\n      x.volume-v,\n      'L'],\n      ['Volume akhir',\n      x.volume,\n      'L']]\n    }\n  }\n  ,\n  {\n    id:'feedplan',\n    title:'Pakan menuju target biomassa',\n    cat:'Evaluasi & panen',\n    desc:'Simulasikan pakan untuk pertambahan biomassa bersih yang ditargetkan.',\n    fields:[n('current',\n    'Biomassa saat ini (kg)'),\n    n('target',\n    'Target biomassa akhir (kg)'),\n    n('fcr',\n    'Target FCR',\n    undefined,\n    undefined,\n    0.000001)],\n    formula:'Pakan diperkirakan = (target biomassa akhir \u2212 biomassa saat ini) \u00d7 target FCR.',\n    note:'Asumsi tanpa panen parsial atau tebar tambahan. Ini estimasi total pakan untuk pertambahan biomassa bersih, bukan jadwal pakan harian atau jaminan capaian.',\n    calc:x=>{\n      if(x.target<=x.current)throw Error('Target biomassa harus lebih besar dari biomassa saat ini.');\n      return [['Estimasi pakan tambahan',\n      (x.target-x.current)*x.fcr,\n      'kg'],\n      ['Target pertambahan biomassa',\n      x.target-x.current,\n      'kg']]\n    }\n  }\n  ,\n  {\n    id:'log',\n    title:'Catatan kualitas air',\n    cat:'Pencatatan',\n    desc:'Catat hasil pengukuran harian dan unduh untuk evaluasi.',\n    fields:[{\n      key:'date',\n      label:'Tanggal',\n      type:'date'\n    }\n    ,\n    {\n      key:'pond',\n      label:'Nama \/ kode kolam',\n      type:'text'\n    }\n    ,\n    n('ph',\n    'pH',\n    undefined,\n    14),\n    n('temp',\n    'Suhu (\u00b0C)',\n    undefined,\n    60),\n    n('do',\n    'DO (mg\/L)'),\n    n('sal',\n    'Salinitas (ppt)')],\n    formula:'Catatan menyimpan hasil pengukuran Anda, tanpa menentukan status baik atau buruk.',\n    note:'Tersimpan hanya pada browser dan perangkat ini, bukan akun atau server Synbio. Menghapus data browser dapat menghapus catatan. Unduh CSV untuk cadangan.',\n    calc:()=>[]\n  }\n  ];\n  \/\/ 5. MESIN KALKULATOR \u2014 pengisian form, validasi, popup, dan ekspor.\n  \/\/ Bagian ini tidak perlu diedit untuk mengganti nama tools atau warna.\n  const $=q=>root.querySelector(q),\n  grid=$('.grid'),\n  workspace=$('.workspace'),\n  form=$('form');\n  let active=null,\n  lastRows=null,\n  filter='Semua',\n  lastTrigger=null,\n  bodyOverflow=null;\n  const mobile=matchMedia('(max-width:760px)');\n  const esc=t=>String(t).replace(\/[&<>\"']\/g,\n  c=>({\n    '&':'&amp;',\n    '<':'&lt;',\n    '>':'&gt;',\n    '\"':'&quot;',\n    \"'\":'&#39;'\n  }\n  [c]));\n  ['Semua',\n  ...new Set(tools.map(t=>t.cat))].forEach(cat=>{\n    let b=document.createElement('button');\n    b.className='chip';\n    b.textContent=cat;\n    b.setAttribute('aria-pressed',\n    cat===filter);\n    b.onclick=()=>{\n      filter=cat;\n      root.querySelectorAll('.chip').forEach(c=>c.setAttribute('aria-pressed',\n      c===b));\n      renderCards()\n    }\n    ;\n    $('.toolbar').append(b)\n  }\n  );\n  function renderCards(){\n    let query=$('.search').value.toLowerCase();\n    grid.innerHTML='';\n    tools.forEach((t,\n    i)=>{\n      if((filter!=='Semua'&&t.cat!==filter)||!(t.title+' '+t.desc).toLowerCase().includes(query))return;\n      let b=document.createElement('button');\n      b.className='card glass reveal';\n      b.dataset.tool=t.id;\n      b.setAttribute('aria-controls',\n      'synbio-calculator-panel');\n      b.setAttribute('aria-expanded',\n      !workspace.hidden&&active?.id===t.id?'true':'false');\n      b.title=t.desc;\n      b.innerHTML=`<span class=\"tool-copy\"><h3>${esc(t.title)}<\/h3><span class=\"tool-summary\">${esc(t.desc)}<\/span><\/span><span class=\"arrow\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" focusable=\"false\"><path d=\"m9 5 7 7-7 7\"\/><\/svg><\/span>`;\n      b.onclick=()=>{\n        lastTrigger=b;\n        open(t)\n      }\n      ;\n      grid.append(b)\n    }\n    );\n    $('.empty').hidden=grid.children.length>0\n  }\n  $('.search').oninput=renderCards;\n  renderCards();\n  \/\/ Tinggi daftar dibiarkan mengikuti isi. Panel kalkulator tidak diperpanjang.\n  function open(t){\n    active=t;\n    lastRows=null;\n    workspace.hidden=false;\n    $('.panel-placeholder').hidden=true;\n    root.querySelectorAll('.card').forEach(b=>b.setAttribute('aria-expanded',\n    b.dataset.tool===t.id?'true':'false'));\n    syncModal();\n    $('.tool-title').textContent=t.title;\n    $('.category').textContent=t.cat;\n    $('.tool-description').textContent=t.desc;\n    $('.formula').textContent='Rumus: '+t.formula;\n    $('.guidance').textContent=t.note;\n    $('.fields').innerHTML=t.fields.map(f=>`<label data-field=\"${f.key}\">${esc(f.label)}${f.options?`<select name=\"${f.key}\">${\n      f.options.map(([v,\n      l])=>`<option value=\"${esc(v)}\">${esc(l)}<\/option>`).join('')\n    }\n    <\/select>`:`<input name=\"${f.key}\" type=\"${f.type||'number'}\" ${\n      f.type?'':'step=\"any\" min=\"'+f.min+'\" '+(f.max!==undefined?'max=\"'+f.max+'\"':'')\n    }\n    ${\n      f.value!==undefined?'value=\"'+f.value+'\"':''\n    }\n    required>`}<\/label>`).join('');\n    if(t.id==='log')form.elements.namedItem('date').value=localDate();\n    $('.log-section').hidden=t.id!=='log';\n    $('button[type=submit]').innerHTML=t.id==='log'?'Simpan catatan <span class=\"arrow\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" focusable=\"false\"><path d=\"m9 5 7 7-7 7\"\/><\/svg><\/span>':'Hitung <span class=\"arrow\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" focusable=\"false\"><path d=\"m9 5 7 7-7 7\"\/><\/svg><\/span>';\n    $('.output').textContent=t.id==='log'?'Isi hasil pengukuran, lalu simpan catatan.':'Isi data, lalu pilih Hitung.';\n    $('.download').hidden=true;\n    toggleShape();\n    toggleDose();\n    if(t.id==='log')renderLog();\n    workspace.scrollTop=0;\n    workspace.style.animation='none';\n    void workspace.offsetWidth;\n    workspace.style.animation='';\n    if(!mobile.matches){\n      const bounds=workspace.getBoundingClientRect();\n      if(bounds.top<0||bounds.top>innerHeight-120)workspace.scrollIntoView({\n        behavior:matchMedia('(prefers-reduced-motion: reduce)').matches?'auto':'smooth',\n        block:'start'\n      }\n      )\n    }\n    workspace.focus({\n      preventScroll:true\n    }\n    );\n  }\n  \/\/ FORM DOSIS \u2014 tampilkan hanya input yang sesuai aplikasi produk.\n  \/\/ Input tersembunyi dinonaktifkan agar tidak ikut validasi\/perhitungan.\n  function toggleDose() {\n    if(active?.id!=='dose')return;\n    const p=synbioProducts.find(p=>p.id===form.elements.namedItem('product').value);\n    for(const key of ['area','depth','feed']) {\n      const visible=!!p && (key==='feed'?p.mode==='feed':p.mode==='pond');\n      form.elements.namedItem(key).disabled=!visible;\n      root.querySelector('[data-field=\"'+key+'\"]').hidden=!visible;\n    }\n    if(!p) {\n      $('.formula').textContent='Pilih produk untuk melihat rumus dan dosisnya.';\n      $('.guidance').textContent='Isi luas dan tinggi air untuk tebar kolam, atau jumlah pakan untuk campuran pakan.';\n      return;\n    }\n    const rate=fmt(p.min)+(p.min!==p.max?'\u2013'+fmt(p.max):'');\n    $('.formula').textContent=p.mode==='pond'?\n      'Rumus: luas kolam \u00d7 tinggi air \u00d7 dosis '+rate+' ppm = kebutuhan produk (gram).':\n      'Rumus: jumlah pakan \u00d7 dosis '+rate+' g\/kg = kebutuhan produk (gram).';\n    $('.guidance').innerHTML=esc(p.frequency+'. Kebutuhan untuk satu aplikasi. '+\n      (p.mode==='pond'?'Gunakan tinggi air, bukan tinggi dinding kolam. ':'')+\n      'Ikuti petunjuk label kemasan.')+' <a href=\"https:\/\/synbioid.com\/product\/'+esc(p.slug)+'\/\" target=\"_blank\" rel=\"noopener noreferrer\">Petunjuk produk<\/a>';\n  }\n  function toggleShape(){\n    if(active?.id!=='volume')return;\n    let circle=form.elements.namedItem('shape').value==='circle';\n    ['length',\n    'width',\n    'diameter'].forEach(key=>{\n      let hidden=key==='diameter'?!circle:circle;\n      form.elements.namedItem(key).disabled=hidden;\n      root.querySelector('[data-field=\"'+key+'\"]').hidden=hidden\n    }\n    )\n  }\n  form.addEventListener('change',\n  ()=>{toggleShape();toggleDose();});\n  form.addEventListener('input',\n  ()=>{\n    lastRows=null;\n    $('.download').hidden=true;\n    $('.output').textContent='Data berubah. Pilih '+(active.id==='log'?'Simpan catatan.':'Hitung untuk memperbarui hasil.');\n    $('.output').textContent=$('.output').textContent.replace('Donn\u00e9es',\n    'Data')\n  }\n  );\n  form.onreset=()=>setTimeout(()=>{\n    toggleShape();\n    toggleDose();\n    lastRows=null;\n    $('.download').hidden=true;\n    $('.output').textContent='Isi data, lalu pilih '+(active.id==='log'?'Simpan catatan.':'Hitung.');\n    if(active.id==='log')form.elements.namedItem('date').value=localDate()\n  }\n  ,\n  0);\n  form.onsubmit=e=>{\n    e.preventDefault();\n    try{\n      let x={\n      }\n      ;\n      for(const f of active.fields){\n        \/\/ namedItem membaca kolom berdasarkan nama; aman untuk nama seperti length.\n        const el=form.elements.namedItem(f.key);\n        if(!el || typeof el.value!=='string')throw Error('Input '+f.label+' tidak tersedia. Buka ulang kalkulator.');\n        if(el.disabled)continue;\n        if(!el.value.trim())throw Error('Lengkapi '+f.label.toLowerCase()+'.');\n        if(f.options||f.type){\n          x[f.key]=el.value.trim();\n          continue\n        }\n        const v=Number(el.value);\n        if(!Number.isFinite(v)||v<f.min||(f.max!==undefined&&v>f.max))throw Error(f.label+' harus '+(f.max!==undefined?'berada antara '+f.min+' dan '+f.max: 'minimal '+f.min)+'.');\n        x[f.key]=v\n      }\n      if(active.id==='log'){\n        saveLog(x);\n        return\n      }\n      const rows=active.calc(x);\n      if(rows.some(r=>!Number.isFinite(r[1])))throw Error('Hasil terlalu besar. Periksa angka input.');\n      lastRows=[['Tools',\n      active.title],\n      ...active.fields.filter(f=>!form.elements.namedItem(f.key).disabled).map(f=>[f.label,\n      active.id==='dose'&&f.key==='product'?productLabel(doseProduct(x.product)):x[f.key]]),\n      ...rows.map(r=>[r[0],\n      r[1],\n      r[2]])];\n      $('.output').innerHTML=`<span>${esc(rows[0][0])}<\/span><div class=\"result-value\">${fmt(rows[0][1])} ${esc(rows[0][2])}<\/div>`+rows.slice(1).map(r=>`<div class=\"metric\"><span>${esc(r[0])}<\/span><strong>${fmt(r[1])} ${esc(r[2])}<\/strong><\/div>`).join('');\n      if(active.id==='dose') {\n        const p=doseProduct(x.product);\n        if(p.min!==p.max) {\n          const low=rows[0][1], high=rows[1][1];\n          $('.output').innerHTML='<span>Kebutuhan per aplikasi<\/span><div class=\"result-value\">'+fmt(low)+'\u2013'+fmt(high)+' g<\/div>'+\n            '<div class=\"metric\"><span>Dalam kilogram<\/span><strong>'+fmt(low\/1000,4)+'\u2013'+fmt(high\/1000,4)+' kg<\/strong><\/div>'+\n            '<div class=\"metric\"><span>'+esc(rows.at(-1)[0])+'<\/span><strong>'+fmt(rows.at(-1)[1])+' '+esc(rows.at(-1)[2])+'<\/strong><\/div>';\n        }\n      }\n      $('.download').hidden=false\n    }\n    catch(err){\n      lastRows=null;\n      $('.download').hidden=true;\n      $('.output').innerHTML='<p class=\"error\">'+esc(err.message)+'<\/p>'\n    }\n  }\n  ;\n  \/\/ Tutup popup dengan tombol, klik latar, atau Escape. Tab tetap di dalam popup mobile.\n  function syncModal(){\n    const modal=mobile.matches&&!workspace.hidden;\n    root.classList.toggle('modal-open',\n    modal);\n    $('.backdrop').classList.toggle('is-open',\n    modal);\n    if(modal){\n      workspace.setAttribute('role',\n      'dialog');\n      workspace.setAttribute('aria-modal',\n      'true');\n      if(bodyOverflow===null){\n        bodyOverflow=document.body.style.overflow;\n        document.body.style.overflow='hidden'\n      }\n    }\n    else{\n      workspace.setAttribute('role',\n      'region');\n      workspace.removeAttribute('aria-modal');\n      if(bodyOverflow!==null){\n        document.body.style.overflow=bodyOverflow;\n        bodyOverflow=null\n      }\n    }\n  }\n  function closePanel(){\n    workspace.hidden=true;\n    $('.panel-placeholder').hidden=false;\n    root.querySelectorAll('.card').forEach(b=>b.setAttribute('aria-expanded',\n    'false'));\n    syncModal();\n    const trigger=lastTrigger?.isConnected?lastTrigger:grid.querySelector('button');\n    trigger?.focus({\n      preventScroll:true\n    }\n    );\n  }\n  $('.close').onclick=closePanel;\n  $('.backdrop').onclick=closePanel;\n  mobile.addEventListener('change',\n  syncModal);\n  root.addEventListener('keydown',\n  e=>{\n    if(workspace.hidden)return;\n    if(e.key==='Escape'){\n      e.preventDefault();\n      closePanel();\n      return\n    }\n    if(e.key==='Tab'&&mobile.matches){\n      const elements=[...workspace.querySelectorAll('button,a,input,select,[tabindex]')].filter(el=>!el.disabled&&el.getClientRects().length&&el.tabIndex>=0);\n      const first=elements[0],\n      last=elements[elements.length-1];\n      if(e.shiftKey&&(document.activeElement===first||document.activeElement===workspace)){\n        e.preventDefault();\n        last?.focus()\n      }\n      else if(!e.shiftKey&&(document.activeElement===last||document.activeElement===workspace)){\n        e.preventDefault();\n        first?.focus()\n      }\n    }\n  }\n  );\n  function csvCell(v){\n    let str=String(v??'');\n    if(\/^[=+@\\t\\r]\/.test(str)||(\/^\\s*-\/.test(str)&&!Number.isFinite(Number(str))))str=\"'\"+str;\n    return '\"'+str.replace(\/\"\/g,\n    '\"\"')+'\"'\n  }\n  function download(rows,\n  name){\n    const b=new Blob(['\\uFEFF'+rows.map(row=>row.map(csvCell).join(',')).join('\\r\\n')],\n    {\n      type:'text\/csv;charset=utf-8'\n    }\n    );\n    let a=document.createElement('a');\n    a.href=URL.createObjectURL(b);\n    a.download=name;\n    a.click();\n    setTimeout(()=>URL.revokeObjectURL(a.href),\n    1000)\n  }\n  $('.download').onclick=()=>{\n    if(lastRows)download(lastRows,\n    'Synbio-'+active.id+'.csv')\n  }\n  ;\n  function localDate(){\n    const d=new Date();\n    return d.getFullYear()+'-'+String(d.getMonth()+1).padStart(2,\n    '0')+'-'+String(d.getDate()).padStart(2,\n    '0')\n  }\n  \/\/ 6. PENYIMPANAN CATATAN KUALITAS AIR DI BROWSER\n  const storageKey='synbio-water-log-v1';\n  let logs=[];\n  try{\n    const stored=JSON.parse(localStorage.getItem(storageKey)||'[]');\n    if(Array.isArray(stored))logs=stored.filter(r=>r&&typeof r==='object'&&['date',\n    'pond',\n    'ph',\n    'temp',\n    'do',\n    'sal'].every(k=>k in r))\n  }\n  catch(e){\n  }\n  function persist(){\n    try{\n      localStorage.setItem(storageKey,\n      JSON.stringify(logs));\n      $('.log-status').textContent='Catatan tersimpan di browser ini.'\n    }\n    catch(e){\n      $('.log-status').textContent='Penyimpanan browser tidak tersedia. Unduh CSV sebelum menutup halaman.'\n    }\n  }\n  function saveLog(x){\n    logs.push(x);\n    persist();\n    renderLog();\n    $('.output').textContent='Catatan berhasil ditambahkan. Total '+logs.length+' catatan.'\n  }\n  function renderLog(){\n    const headers=['Tanggal',\n    'Kolam',\n    'pH',\n    'Suhu \u00b0C',\n    'DO mg\/L',\n    'Salinitas ppt'];\n    $('.table-wrap').innerHTML=logs.length?'<table><thead><tr>'+headers.map(h=>'<th>'+h+'<\/th>').join('')+'<\/tr><\/thead><tbody>'+logs.slice().reverse().map(r=>'<tr>'+['date',\n    'pond',\n    'ph',\n    'temp',\n    'do',\n    'sal'].map(k=>'<td>'+esc(r[k])+'<\/td>').join('')+'<\/tr>').join('')+'<\/tbody><\/table>':'<p class=\"note\">Belum ada catatan.<\/p>'\n  }\n  $('.export-log').onclick=()=>{\n    if(!logs.length){\n      $('.log-status').textContent='Belum ada catatan untuk diunduh.';\n      return\n    }\n    download([['Tanggal',\n    'Kolam',\n    'pH',\n    'Suhu \u00b0C',\n    'DO mg\/L',\n    'Salinitas ppt'],\n    ...logs.map(r=>['date',\n    'pond',\n    'ph',\n    'temp',\n    'do',\n    'sal'].map(k=>r[k]))],\n    'Synbio-Catatan-Kualitas-Air.csv')\n  }\n  ;\n  $('.clear-log').onclick=()=>{\n    if(!logs.length)return;\n    if(confirm('Hapus semua catatan kualitas air pada browser ini? Unduh CSV terlebih dahulu jika diperlukan.')){\n      logs=[];\n      persist();\n      renderLog();\n      $('.output').textContent='Semua catatan telah dihapus.'\n    }\n  }\n  ;\n}\n)();\n<\/script>\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","protected":false},"excerpt":{"rendered":"<p>Synbio \/ Tools Petambak Hitung lebih mudah.Kelola lebih terarah. Dari volume air hingga evaluasi panen, gunakan data tambak Anda untuk membantu perencanaan dan pencatatan sehari-hari. Pilih tools Science sustains balance 17 tools Perhitungan praktis dalam satu tempat.Tanpa registrasi. Bisa digunakan di ponsel. Apa yang ingin Anda hitung? Tidak ada tools yang cocok dengan pencarian ini. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_yoast_wpseo_focuskw":"","_yoast_wpseo_title":"","_yoast_wpseo_metadesc":"","site-sidebar-layout":"no-sidebar","site-content-layout":"page-builder","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":"","rank_math_title":"","rank_math_description":"","rank_math_focus_keyword":"","_aioseop_title":"","_aioseop_description":""},"class_list":["post-2947","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Tools Petambak - Synbio<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/synbioid.com\/en\/tools-petambak\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tools Petambak - Synbio\" \/>\n<meta property=\"og:description\" content=\"Synbio \/ Tools Petambak Hitung lebih mudah.Kelola lebih terarah. Dari volume air hingga evaluasi panen, gunakan data tambak Anda untuk membantu perencanaan dan pencatatan sehari-hari. Pilih tools Science sustains balance 17 tools Perhitungan praktis dalam satu tempat.Tanpa registrasi. Bisa digunakan di ponsel. Apa yang ingin Anda hitung? Tidak ada tools yang cocok dengan pencarian ini. [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/synbioid.com\/en\/tools-petambak\/\" \/>\n<meta property=\"og:site_name\" content=\"Synbio\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-03T13:58:19+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"22 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/synbioid.com\\\/tools-petambak\\\/\",\"url\":\"https:\\\/\\\/synbioid.com\\\/tools-petambak\\\/\",\"name\":\"Tools Petambak - Synbio\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/synbioid.com\\\/#website\"},\"datePublished\":\"2026-10-03T08:32:33+00:00\",\"dateModified\":\"2026-10-03T13:58:19+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/synbioid.com\\\/tools-petambak\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/synbioid.com\\\/tools-petambak\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/synbioid.com\\\/tools-petambak\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Beranda\",\"item\":\"https:\\\/\\\/synbioid.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tools Petambak\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/synbioid.com\\\/#website\",\"url\":\"https:\\\/\\\/synbioid.com\\\/\",\"name\":\"Synbio\",\"description\":\"Science Sustains Balance\",\"publisher\":{\"@id\":\"https:\\\/\\\/synbioid.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/synbioid.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/synbioid.com\\\/#organization\",\"name\":\"Synbio\",\"url\":\"https:\\\/\\\/synbioid.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/synbioid.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/synbioid.com\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/cropped-cropped-Synbio-Logo-01-2.png\",\"contentUrl\":\"https:\\\/\\\/synbioid.com\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/cropped-cropped-Synbio-Logo-01-2.png\",\"width\":1877,\"height\":624,\"caption\":\"Synbio\"},\"image\":{\"@id\":\"https:\\\/\\\/synbioid.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Tools Petambak - Synbio","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/synbioid.com\/en\/tools-petambak\/","og_locale":"en_US","og_type":"article","og_title":"Tools Petambak - Synbio","og_description":"Synbio \/ Tools Petambak Hitung lebih mudah.Kelola lebih terarah. Dari volume air hingga evaluasi panen, gunakan data tambak Anda untuk membantu perencanaan dan pencatatan sehari-hari. Pilih tools Science sustains balance 17 tools Perhitungan praktis dalam satu tempat.Tanpa registrasi. Bisa digunakan di ponsel. Apa yang ingin Anda hitung? Tidak ada tools yang cocok dengan pencarian ini. [&hellip;]","og_url":"https:\/\/synbioid.com\/en\/tools-petambak\/","og_site_name":"Synbio","article_modified_time":"2026-10-03T13:58:19+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"22 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/synbioid.com\/tools-petambak\/","url":"https:\/\/synbioid.com\/tools-petambak\/","name":"Tools Petambak - Synbio","isPartOf":{"@id":"https:\/\/synbioid.com\/#website"},"datePublished":"2026-10-03T08:32:33+00:00","dateModified":"2026-10-03T13:58:19+00:00","breadcrumb":{"@id":"https:\/\/synbioid.com\/tools-petambak\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/synbioid.com\/tools-petambak\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/synbioid.com\/tools-petambak\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Beranda","item":"https:\/\/synbioid.com\/"},{"@type":"ListItem","position":2,"name":"Tools Petambak"}]},{"@type":"WebSite","@id":"https:\/\/synbioid.com\/#website","url":"https:\/\/synbioid.com\/","name":"Synbio","description":"Science Sustains Balance","publisher":{"@id":"https:\/\/synbioid.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/synbioid.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/synbioid.com\/#organization","name":"Synbio","url":"https:\/\/synbioid.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/synbioid.com\/#\/schema\/logo\/image\/","url":"https:\/\/synbioid.com\/wp-content\/uploads\/2025\/11\/cropped-cropped-Synbio-Logo-01-2.png","contentUrl":"https:\/\/synbioid.com\/wp-content\/uploads\/2025\/11\/cropped-cropped-Synbio-Logo-01-2.png","width":1877,"height":624,"caption":"Synbio"},"image":{"@id":"https:\/\/synbioid.com\/#\/schema\/logo\/image\/"}}]}},"_hostinger_reach_plugin_has_subscription_block":false,"_hostinger_reach_plugin_is_elementor":false,"_links":{"self":[{"href":"https:\/\/synbioid.com\/en\/wp-json\/wp\/v2\/pages\/2947","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/synbioid.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/synbioid.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/synbioid.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/synbioid.com\/en\/wp-json\/wp\/v2\/comments?post=2947"}],"version-history":[{"count":17,"href":"https:\/\/synbioid.com\/en\/wp-json\/wp\/v2\/pages\/2947\/revisions"}],"predecessor-version":[{"id":3021,"href":"https:\/\/synbioid.com\/en\/wp-json\/wp\/v2\/pages\/2947\/revisions\/3021"}],"wp:attachment":[{"href":"https:\/\/synbioid.com\/en\/wp-json\/wp\/v2\/media?parent=2947"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}