{"id":2523,"date":"2026-07-25T21:11:07","date_gmt":"2026-07-25T14:11:07","guid":{"rendered":"https:\/\/pandaigadai.com\/blog\/?page_id=2523"},"modified":"2026-07-25T21:11:08","modified_gmt":"2026-07-25T14:11:08","slug":"cs","status":"publish","type":"page","link":"https:\/\/pandaigadai.com\/blog\/cs\/","title":{"rendered":"Dashboard CS Tracker"},"content":{"rendered":"<!DOCTYPE html>\r\n<html lang=\"id\">\r\n<head>\r\n<meta charset=\"UTF-8\">\r\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\r\n<title>Dashboard Pertumbuhan Google Review \u2014 Pandai Gadai<\/title>\r\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\r\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\r\n<link rel=\"stylesheet\" href=\"https:\/\/fonts.googleapis.com\/css2?family=Rubik:wght@400;500;600;700;800;900&display=swap\">\r\n<style>\r\n\/* ---- Reset (scoped) ---- *\/\r\n#pg-page *, #pg-page *::before, #pg-page *::after{box-sizing:border-box;margin:0;padding:0}\r\nhtml,body{margin:0;padding:0;background:#f0f2f8}\r\n\r\n\/* ---- Design tokens ---- *\/\r\n#pg-page{\r\n  --radius:0.625rem;\r\n  --background:#ffffff;\r\n  --foreground:#021431;\r\n  --card:#ffffff;\r\n  --primary:#02439F;\r\n  --primary-deep:#011455;\r\n  --primary-bright:#0255CA;\r\n  --primary-foreground:#f8fafc;\r\n  --accent:#ffcd05;\r\n  --accent-foreground:#021431;\r\n  --secondary:#f3f5fb;\r\n  --muted:#f0f2f8;\r\n  --muted-foreground:#6b7280;\r\n  --destructive:#dc2626;\r\n  --success:#047857;\r\n  --border:#e2e6f0;\r\n  --footer-bg:#02439f;\r\n  --shadow-card:0 2px 8px -2px rgba(2,20,49,0.08);\r\n  --shadow-elegant:0 10px 30px -12px rgba(2,67,159,0.35);\r\n  --gradient-hero:linear-gradient(135deg,#011455,#0255CA);\r\n}\r\n\r\n\/* ---- Base ---- *\/\r\n#pg-page{font-family:\"Rubik\",system-ui,-apple-system,\"Segoe UI\",sans-serif;background:var(--muted);color:var(--foreground);line-height:1.6;-webkit-font-smoothing:antialiased}\r\n#pg-page h1,#pg-page h2,#pg-page h3,#pg-page h4{letter-spacing:-0.02em}\r\n#pg-page p{margin:0}\r\n#pg-page a{text-decoration:none;color:inherit}\r\n#pg-page img{display:block;max-width:100%}\r\n#pg-page ul{list-style:none}\r\n#pg-page .section-container{max-width:78rem;margin:0 auto;padding:0 1rem}\r\n\r\n\/* ---- Header (LOCKED) ---- *\/\r\n#pg-page .site-header{position:sticky;top:0;z-index:100;background:var(--background);border-bottom:1px solid var(--border)}\r\n#pg-page .header-inner{max-width:78rem;margin:0 auto;display:flex;height:5rem;align-items:center;justify-content:space-between;padding:0 1rem}\r\n#pg-page .header-nav{display:flex;align-items:center;gap:.75rem}\r\n#pg-page .btn-header{display:inline-flex;align-items:center;gap:.375rem;border-radius:calc(var(--radius) - 2px);background:var(--accent);padding:.5rem .875rem;font-size:.875rem;font-weight:700;color:var(--accent-foreground);box-shadow:0 1px 2px rgba(0,0,0,.05);transition:filter .15s}\r\n#pg-page .btn-header:hover{filter:brightness(.95)}\r\n\r\n\/* ---- Dashboard hero strip ---- *\/\r\n#pg-page .dash-hero{background:var(--gradient-hero);color:var(--primary-foreground);position:relative;overflow:hidden}\r\n#pg-page .dash-hero-overlay{position:absolute;inset:0;opacity:.3;background:radial-gradient(ellipse at top right,rgba(255,205,5,.35),transparent 60%);pointer-events:none}\r\n#pg-page .dash-hero-inner{position:relative;max-width:78rem;margin:0 auto;padding:2rem 1rem 2.25rem}\r\n#pg-page .dash-hero .eyebrow{display:inline-flex;align-items:center;gap:.4rem;font-size:.7rem;font-weight:800;text-transform:uppercase;letter-spacing:.08em;background:rgba(255,255,255,.15);padding:.3rem .7rem;border-radius:999px}\r\n#pg-page .dash-hero h1{font-size:1.6rem;font-weight:800;margin:.7rem 0 .25rem}\r\n#pg-page .dash-hero p{font-size:.9rem;color:rgba(255,255,255,.85)}\r\n@media(min-width:768px){#pg-page .dash-hero h1{font-size:2rem}}\r\n\r\n\/* ---- Main body ---- *\/\r\n#pg-page .dash-body{max-width:78rem;margin:0 auto;padding:1.25rem 1rem 2.5rem}\r\n\r\n\/* ---- Controls bar ---- *\/\r\n#pg-page .controls{display:flex;flex-wrap:wrap;gap:.6rem;align-items:center;background:var(--card);border:1px solid var(--border);border-radius:calc(var(--radius)+4px);padding:.75rem .9rem;box-shadow:var(--shadow-card);margin-bottom:1rem}\r\n#pg-page .ctl-label{font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--muted-foreground)}\r\n#pg-page .seg{display:inline-flex;border:1px solid var(--border);border-radius:calc(var(--radius) - 2px);overflow:hidden}\r\n#pg-page .seg button{padding:.4rem .85rem;border:none;background:var(--card);color:var(--foreground);font-family:inherit;font-size:.8125rem;font-weight:600;cursor:pointer;border-right:1px solid var(--border)}\r\n#pg-page .seg button:last-child{border-right:none}\r\n#pg-page .seg button.active{background:var(--primary);color:#fff}\r\n#pg-page select,#pg-page input[type=text],#pg-page input[type=date],#pg-page input[type=number]{font-family:inherit;padding:.42rem .55rem;border:1px solid var(--border);border-radius:calc(var(--radius) - 2px);font-size:.8125rem;color:var(--foreground);background:var(--card);outline:none}\r\n#pg-page select{cursor:pointer}\r\n#pg-page input[type=text]{cursor:text}\r\n#pg-page input:focus,#pg-page select:focus{border-color:var(--primary)}\r\n#pg-page .btn-accent{display:inline-flex;align-items:center;gap:.4rem;border-radius:calc(var(--radius) - 2px);background:var(--accent);padding:.5rem 1.1rem;font-family:inherit;font-size:.8125rem;font-weight:700;color:var(--accent-foreground);border:none;cursor:pointer;box-shadow:0 1px 2px rgba(0,0,0,.05);transition:filter .15s}\r\n#pg-page .btn-accent:hover{filter:brightness(.95)}\r\n#pg-page .btn-ghost{background:var(--secondary);color:var(--primary);border:1px solid var(--border);border-radius:calc(var(--radius) - 2px);padding:.5rem .9rem;font-family:inherit;font-size:.8125rem;font-weight:700;cursor:pointer}\r\n\r\n\/* ---- Tabs ---- *\/\r\n#pg-page .tabs{display:flex;gap:.2rem;border-bottom:2px solid var(--border);margin:.25rem 0 1.15rem;overflow-x:auto}\r\n#pg-page .tabs button{border:none;background:none;font-family:inherit;font-size:.9rem;font-weight:700;color:var(--muted-foreground);padding:.6rem .95rem;cursor:pointer;border-bottom:3px solid transparent;margin-bottom:-2px;display:inline-flex;align-items:center;gap:.4rem;white-space:nowrap}\r\n#pg-page .tabs button:hover{color:var(--foreground)}\r\n#pg-page .tabs button.active{color:var(--primary);border-bottom-color:var(--primary)}\r\n#pg-page .tabs button .cnt{font-size:.68rem;font-weight:800;background:var(--secondary);color:var(--primary);padding:.05rem .45rem;border-radius:999px}\r\n#pg-page .tabs button.warn .cnt{background:#fef2f2;color:var(--destructive)}\r\n\r\n\/* ---- Status ---- *\/\r\n#pg-page .status{font-size:.82rem;padding:.6rem .8rem;border-radius:calc(var(--radius) - 2px);margin-bottom:1rem;line-height:1.5}\r\n#pg-page .status.info{background:var(--secondary);color:var(--primary-deep);border:1px solid var(--border)}\r\n#pg-page .status.ok{background:#ecfdf5;color:var(--success);border:1px solid #a7f3d0}\r\n#pg-page .status.err{background:#fef2f2;color:var(--destructive);border:1px solid #fca5a5}\r\n\r\n\/* ---- Scorecards (Looker style) ---- *\/\r\n#pg-page .scorecards{display:grid;grid-template-columns:repeat(5,1fr);gap:.75rem;margin-bottom:1.25rem}\r\n#pg-page .sc{background:var(--card);border:1px solid var(--border);border-radius:calc(var(--radius)+4px);padding:.9rem 1rem;box-shadow:var(--shadow-card);border-top:3px solid var(--primary)}\r\n#pg-page .sc.accent{border-top-color:var(--accent)}\r\n#pg-page .sc.green{border-top-color:var(--success)}\r\n#pg-page .sc.amber{border-top-color:#f59e0b}\r\n#pg-page .sc.red{border-top-color:var(--destructive)}\r\n#pg-page .sc .lbl{font-size:.66rem;font-weight:800;text-transform:uppercase;letter-spacing:.05em;color:var(--muted-foreground)}\r\n#pg-page .sc .val{font-size:1.55rem;font-weight:800;color:var(--primary);line-height:1.1;margin-top:.3rem}\r\n#pg-page .sc.accent .val{color:var(--primary-deep)}\r\n#pg-page .sc.green .val{color:var(--success)}\r\n#pg-page .sc.amber .val{color:#b45309}\r\n#pg-page .sc.red .val{color:var(--destructive)}\r\n#pg-page .sc .sub{font-size:.7rem;color:var(--muted-foreground);margin-top:.2rem}\r\n@media(max-width:1000px){#pg-page .scorecards{grid-template-columns:repeat(2,1fr)}}\r\n@media(max-width:560px){#pg-page .scorecards{grid-template-columns:1fr 1fr}#pg-page .sc .val{font-size:1.35rem}}\r\n\r\n\/* ---- Card \/ panel ---- *\/\r\n#pg-page .panel{background:var(--card);border:1px solid var(--border);border-radius:calc(var(--radius)+4px);padding:1rem 1.15rem;box-shadow:var(--shadow-card);margin-bottom:1.25rem}\r\n#pg-page .panel-head{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-bottom:.9rem;flex-wrap:wrap}\r\n#pg-page .panel-title{font-size:1rem;font-weight:800;color:var(--foreground)}\r\n#pg-page .panel-sub{font-size:.72rem;color:var(--muted-foreground);font-weight:600}\r\n\r\n\/* ---- Table ---- *\/\r\n#pg-page .tbl-wrap{overflow:auto;max-height:min(66vh,620px);border-radius:calc(var(--radius) - 2px);border:1px solid var(--border)}\r\n#pg-page table{width:100%;border-collapse:collapse;font-size:.82rem}\r\n#pg-page thead th{position:sticky;top:0;z-index:4;background:var(--secondary);color:var(--primary-deep);font-size:.68rem;text-transform:uppercase;letter-spacing:.04em;font-weight:800;padding:.6rem .65rem;text-align:right;cursor:pointer;user-select:none;white-space:nowrap;border-bottom:2px solid var(--border)}\r\n#pg-page thead th.l,#pg-page tbody td.l{text-align:left}\r\n#pg-page thead th.sorted{color:var(--primary);background:#e8eefb}\r\n#pg-page tbody td{padding:.5rem .65rem;text-align:right;border-bottom:1px solid var(--border);white-space:nowrap;font-variant-numeric:tabular-nums}\r\n#pg-page tbody tr:hover{background:var(--secondary)}\r\n#pg-page td.branch{font-weight:700;color:var(--foreground)}\r\n#pg-page td.branch a{color:var(--foreground)} #pg-page td.branch a:hover{color:var(--primary)}\r\n#pg-page .rank{color:var(--muted-foreground);font-weight:700}\r\n#pg-page .medal{font-weight:800}\r\n#pg-page .bar-cell{position:relative}\r\n#pg-page .bar-fill{position:absolute;left:0;top:3px;bottom:3px;background:#e8eefb;border-radius:4px;z-index:0}\r\n#pg-page .bar-val{position:relative;z-index:1;font-weight:800}\r\n#pg-page .delta.up{color:var(--success);font-weight:800}\r\n#pg-page .delta.down{color:var(--destructive);font-weight:800}\r\n#pg-page .delta.flat{color:var(--muted-foreground)}\r\n#pg-page .muted{color:var(--muted-foreground)}\r\n\r\n\/* status badges *\/\r\n#pg-page .badge{display:inline-block;font-size:.66rem;font-weight:800;padding:.15rem .5rem;border-radius:999px;letter-spacing:.02em;text-transform:uppercase}\r\n#pg-page .badge.aktif{background:#ecfdf5;color:var(--success);border:1px solid #a7f3d0}\r\n#pg-page .badge.kurang{background:#fffbeb;color:#b45309;border:1px solid #fde68a}\r\n#pg-page .badge.pasif{background:#fef2f2;color:var(--destructive);border:1px solid #fca5a5}\r\n\r\n\/* days-ago color *\/\r\n#pg-page .ago{font-weight:700}\r\n#pg-page .ago.fresh{color:var(--success)}\r\n#pg-page .ago.warn{color:#b45309}\r\n#pg-page .ago.stale{color:var(--destructive)}\r\n\r\n\/* pivot sticky left column + heat *\/\r\n#pg-page table.pivot th.stick,#pg-page table.pivot td.stick{position:sticky;left:0;z-index:3;background:var(--card);text-align:left;box-shadow:1px 0 0 var(--border)}\r\n#pg-page table.pivot thead th.stick{z-index:6;background:var(--secondary)}\r\n#pg-page table.pivot td.heat{font-weight:700}\r\n#pg-page table.pivot td.zero{color:#c3c9d6}\r\n\r\n\/* banner *\/\r\n#pg-page .banner{display:flex;align-items:center;gap:1rem;background:linear-gradient(135deg,#fff,#fef2f2);border:1px solid #fca5a5;border-left:4px solid var(--destructive);border-radius:calc(var(--radius)+4px);padding:1rem 1.15rem;margin-bottom:1.15rem}\r\n#pg-page .banner .big{font-size:2.1rem;font-weight:800;color:var(--destructive);line-height:1;font-variant-numeric:tabular-nums}\r\n#pg-page .banner .txt{font-size:.86rem;color:var(--foreground)}\r\n#pg-page .banner.ok{background:linear-gradient(135deg,#fff,#ecfdf5);border-color:#a7f3d0;border-left-color:var(--success)}\r\n#pg-page .banner.ok .big{color:var(--success)}\r\n\r\n\/* apresiasi top list *\/\r\n#pg-page .toplist{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:repeat(5,auto);grid-auto-flow:column;gap:.1rem .9rem}\r\n@media(max-width:640px){#pg-page .toplist{grid-template-columns:1fr;grid-template-rows:none;grid-auto-flow:row}}\r\n#pg-page .toprow{display:flex;align-items:center;gap:.6rem;padding:.4rem .2rem;border-bottom:1px solid var(--border);font-size:.85rem}\r\n#pg-page .toprow .medal2{font-size:1rem;width:1.4rem;text-align:center;flex-shrink:0}\r\n#pg-page .toprow .nm{font-weight:700;flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\r\n#pg-page .toprow .n{font-weight:800;color:var(--success);flex-shrink:0}\r\n\r\n\/* ---- Charts ---- *\/\r\n#pg-page .chart-wrap{overflow-x:auto;position:relative}\r\n#pg-page svg{display:block;max-width:100%}\r\n#pg-page .line-tip{position:absolute;pointer-events:none;z-index:20;background:var(--foreground);color:#fff;font-size:.72rem;line-height:1.5;padding:.5rem .65rem;border-radius:8px;box-shadow:0 6px 18px -6px rgba(2,20,49,.5);white-space:nowrap;display:none;max-width:240px}\r\n#pg-page .line-tip .tt-h{font-weight:800;margin-bottom:.25rem;font-size:.72rem;color:var(--accent)}\r\n#pg-page .line-tip .tt-r{display:flex;align-items:center;gap:.4rem}\r\n#pg-page .line-tip .tt-sw{width:9px;height:9px;border-radius:2px;flex-shrink:0}\r\n#pg-page .line-tip .tt-v{margin-left:auto;font-weight:800;font-variant-numeric:tabular-nums}\r\n#pg-page .legend{display:flex;flex-wrap:wrap;gap:.45rem .9rem;margin-top:.6rem}\r\n#pg-page .lg{display:flex;align-items:center;gap:.35rem;font-size:.74rem;color:var(--foreground);cursor:pointer;user-select:none;font-weight:600}\r\n#pg-page .lg .sw{width:12px;height:12px;border-radius:3px;flex-shrink:0}\r\n#pg-page .lg.off{opacity:.35;text-decoration:line-through}\r\n#pg-page details{margin-bottom:1rem}\r\n#pg-page summary{cursor:pointer;font-size:.8rem;font-weight:700;color:var(--muted-foreground);padding:.3rem 0}\r\n#pg-page .hint{font-size:.72rem;color:var(--muted-foreground);margin-top:.5rem;line-height:1.55}\r\n\r\n\/* ---- Footer (LOCKED) ---- *\/\r\n#pg-page .site-footer{background:var(--footer-bg);color:#fff}\r\n#pg-page .footer-grid{display:grid;grid-template-columns:1fr;gap:2.5rem;max-width:78rem;margin:0 auto;padding:3rem 1rem}\r\n#pg-page .footer-bottom{border-top:1px solid rgba(255,255,255,.15)}\r\n#pg-page .footer-bottom-inner{display:flex;flex-direction:column-reverse;align-items:center;justify-content:space-between;gap:.75rem;max-width:78rem;margin:0 auto;padding:1.25rem 1rem;font-size:.75rem;color:rgba(255,255,255,.8)}\r\n#pg-page .social-link{display:inline-flex;height:2rem;width:2rem;align-items:center;justify-content:center;border-radius:9999px;background:rgba(255,255,255,.1);transition:background .15s,color .15s;color:#fff}\r\n#pg-page .social-link:hover{background:var(--accent);color:var(--accent-foreground)}\r\n#pg-page .footer-nav-link{color:rgba(255,255,255,.85);transition:color .15s}\r\n#pg-page .footer-nav-link:hover{color:var(--accent)}\r\n@media(min-width:640px){#pg-page .footer-bottom-inner{flex-direction:row}}\r\n@media(min-width:768px){#pg-page .footer-grid{grid-template-columns:5fr 3fr 4fr}}\r\n\r\n\/* ---- WordPress theme overrides (dark sections) ---- *\/\r\n#pg-page .dash-hero h1,#pg-page .dash-hero p,#pg-page .dash-hero .eyebrow{color:#fff!important}\r\n#pg-page .dash-hero p{color:rgba(255,255,255,.85)!important}\r\n#pg-page .site-footer h1,#pg-page .site-footer h2,#pg-page .site-footer h3,#pg-page .site-footer h4{color:#fff!important}\r\n#pg-page .site-footer p,#pg-page .site-footer a,#pg-page .site-footer li{color:rgba(255,255,255,.85)!important}\r\n#pg-page .footer-bottom-inner,#pg-page .footer-bottom-inner span{color:rgba(255,255,255,.8)!important}\r\n<\/style>\r\n<\/head>\r\n<body>\r\n<div id=\"pg-page\">\r\n\r\n<!-- ===================== HEADER (LOCKED) ===================== -->\r\n<div class=\"site-header\">\r\n  <div class=\"header-inner\">\r\n    <a href=\"https:\/\/pandaigadai.com\" style=\"display:flex;align-items:center\">\r\n      <img decoding=\"async\" src=\"https:\/\/pandaigadai.com\/blog\/wp-content\/uploads\/2026\/01\/cropped-panda-1.webp\" alt=\"Pandai Gadai\" style=\"height:3rem;width:auto\">\r\n    <\/a>\r\n    <nav class=\"header-nav\">\r\n      <a href=\"https:\/\/pandaigadai.com\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"btn-header\">pandaigadai.com<\/a>\r\n    <\/nav>\r\n  <\/div>\r\n<\/div>\r\n\r\n<!-- ===================== EXTRA STYLES (CS dashboard) ===================== -->\r\n<style>\r\n#pg-page .cs-legend{display:flex;flex-wrap:wrap;gap:.4rem .9rem;align-items:center;font-size:.72rem;color:var(--muted-foreground);font-weight:600}\r\n#pg-page .cs-legend .sw{display:inline-block;width:13px;height:13px;border-radius:3px;vertical-align:-2px;margin-right:.3rem;border:1px solid rgba(0,0,0,.06)}\r\n#pg-page table.pivot td.heat{cursor:default}\r\n#pg-page table.pivot td.metacol{text-align:left;color:var(--muted-foreground);font-weight:600;white-space:nowrap}\r\n#pg-page table.pivot td.totcol,#pg-page table.pivot th.totcol{background:#f7f9fe;font-weight:800;color:var(--primary-deep)}\r\n#pg-page .arow{background:linear-gradient(90deg,#eef2fb,#f7f9fe)!important}\r\n#pg-page .arow td{font-weight:800;color:var(--primary-deep);text-align:left;text-transform:uppercase;letter-spacing:.03em;font-size:.7rem}\r\n#pg-page .pill{display:inline-block;font-size:.66rem;font-weight:800;padding:.12rem .5rem;border-radius:999px;background:var(--secondary);color:var(--primary)}\r\n#pg-page .pill.warn{background:#fef2f2;color:var(--destructive)}\r\n#pg-page .seg.wrap{flex-wrap:wrap}\r\n#pg-page .filterbar{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center}\r\n#pg-page .filterbar .fx{display:flex;flex-direction:column;gap:.15rem}\r\n#pg-page .filterbar .fx label{font-size:.62rem;font-weight:800;text-transform:uppercase;letter-spacing:.04em;color:var(--muted-foreground)}\r\n#pg-page td.worst{font-weight:700}\r\n#pg-page .dot{display:inline-block;width:.55rem;height:.55rem;border-radius:50%;margin-right:.35rem;vertical-align:0}\r\n#pg-page .src-note{font-size:.72rem;color:var(--muted-foreground);line-height:1.55}\r\n#pg-page .empty{padding:2.5rem 1rem;text-align:center;color:var(--muted-foreground);font-size:.9rem}\r\n\/* rating \/ jenis split (small inline breakdown in table cells) *\/\r\n#pg-page .rsplit{font-size:.68rem;color:var(--muted-foreground);font-weight:700;white-space:nowrap}\r\n#pg-page .rsplit .r1{color:var(--destructive)}\r\n#pg-page .rsplit .r2{color:#b45309}\r\n\/* detail tabs: pivot dimensi \u00d7 bulan (sortable) *\/\r\n#pg-page table.pivot td.stick.nocat{color:var(--muted-foreground);font-style:italic;font-weight:600}\r\n#pg-page table.pivot tr.grp td{background:linear-gradient(90deg,#eef2fb,#f7f9fe);text-align:left;padding:.45rem .65rem;border-bottom:1px solid var(--border)}\r\n#pg-page table.pivot tr.grp .gnm{font-weight:800;color:var(--primary-deep);font-size:.82rem}\r\n#pg-page table.pivot tr.grp .gmeta{font-weight:600;color:var(--muted-foreground);font-size:.7rem}\r\n\/* baris TOTAL di paling atas tiap tabel *\/\r\n#pg-page tr.totrow td{background:#e3ecfb;font-weight:800;color:var(--primary-deep);border-bottom:2px solid var(--primary);border-top:1px solid var(--border)}\r\n#pg-page table.pivot tr.totrow td.stick{background:#e3ecfb}\r\n#pg-page tr.totrow td.totcol{background:#d6e3fa}\r\n#pg-page .pivot-scroll{overflow:auto;max-height:44vh;border:1px solid var(--border);border-radius:calc(var(--radius) - 2px)}\r\n\/* collapsible overall summary at top of detail tabs *\/\r\n#pg-page .det-overall{margin-bottom:.9rem;border:1px solid var(--border);border-radius:var(--radius);background:var(--secondary);padding:.4rem .7rem}\r\n#pg-page .det-overall summary{font-size:.82rem;font-weight:800;color:var(--primary-deep);padding:.25rem 0}\r\n#pg-page .det-overall-body{margin-top:.4rem;background:var(--card);border:1px solid var(--border);border-radius:calc(var(--radius) - 2px);padding:.3rem .6rem}\r\n\/* detail tabs: scroll container + empty note *\/\r\n#pg-page .det-list{max-height:min(72vh,700px);overflow:auto;border:1px solid var(--border);border-radius:calc(var(--radius) - 2px)}\r\n#pg-page .det-list .empty{border:none}\r\n#pg-page .dcard-none{font-size:.78rem;color:var(--muted-foreground);padding:.5rem .65rem}\r\n<\/style>\r\n\r\n<!-- ===================== HERO ===================== -->\r\n<div class=\"dash-hero\">\r\n  <div class=\"dash-hero-overlay\"><\/div>\r\n  <div class=\"dash-hero-inner\">\r\n    <span class=\"eyebrow\">\ud83d\udece\ufe0f CS Issue Tracker<\/span>\r\n    <h1>Ringkasan Isu Cabang \u2014 Pengaduan, Google Maps &amp; Perubahan Data<\/h1>\r\n    <p>Pantau tiap bulan cabang mana yang bermasalah di 3 hal: pengaduan, review Google Maps, dan perubahan data \u2014 lengkap dengan Area Manager penanggung jawabnya.<\/p>\r\n  <\/div>\r\n<\/div>\r\n\r\n<!-- ===================== CONTENT ===================== -->\r\n<div class=\"dash-body\">\r\n\r\n  <div id=\"status\" class=\"status info\">Siap. Klik <b>Muat \/ Refresh<\/b> untuk menarik data dari mirror Google Sheet.<\/div>\r\n\r\n  <!-- Controls (global) -->\r\n  <div class=\"controls\">\r\n    <button class=\"btn-accent\" onclick=\"CS.load()\">\u27f3 Muat \/ Refresh<\/button>\r\n    <div class=\"filterbar\" style=\"flex:1\">\r\n      <div class=\"fx\"><label>Dari bulan<\/label>\r\n        <select id=\"f-from\" onchange=\"CS.render()\"><option value=\"\">\u2014<\/option><\/select><\/div>\r\n      <div class=\"fx\"><label>Sampai bulan<\/label>\r\n        <select id=\"f-to\" onchange=\"CS.render()\"><option value=\"\">\u2014<\/option><\/select><\/div>\r\n      <div class=\"fx\"><label>Area<\/label>\r\n        <select id=\"f-area\" onchange=\"CS.onAreaChange()\"><option value=\"\">Semua area<\/option><\/select><\/div>\r\n      <div class=\"fx\"><label>Area Manager<\/label>\r\n        <select id=\"f-am\" onchange=\"CS.render()\"><option value=\"\">Semua AM<\/option><\/select><\/div>\r\n      <div class=\"fx\"><label>Cari cabang<\/label>\r\n        <input type=\"text\" id=\"f-search\" placeholder=\"ketik nama cabang\u2026\" oninput=\"CS.render()\" style=\"min-width:170px\"><\/div>\r\n      <div class=\"fx\"><label>Tampilkan<\/label>\r\n        <select id=\"f-only\" onchange=\"CS.render()\">\r\n          <option value=\"issues\" selected>Hanya cabang bermasalah<\/option>\r\n          <option value=\"all\">Semua cabang<\/option>\r\n        <\/select><\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <!-- ===================== TABS ===================== -->\r\n  <div class=\"tabs\" id=\"tabs\" style=\"display:none\">\r\n    <button data-tab=\"heatmap\" class=\"active\" onclick=\"CS.setTab('heatmap')\">\ud83d\udd25 Heatmap Bulanan<\/button>\r\n    <button data-tab=\"tabel\" onclick=\"CS.setTab('tabel')\">\ud83d\udccb Tabel Cabang<\/button>\r\n    <button data-tab=\"pengaduan\" onclick=\"CS.setTab('pengaduan')\">\ud83d\udce3 Pengaduan<\/button>\r\n    <button data-tab=\"gmaps\" onclick=\"CS.setTab('gmaps')\">\u2b50 Gmaps<\/button>\r\n    <button data-tab=\"perubahan\" onclick=\"CS.setTab('perubahan')\">\u270f\ufe0f Perubahan Data<\/button>\r\n    <button data-tab=\"am\" onclick=\"CS.setTab('am')\">\ud83d\udc64 Ringkasan AM<\/button>\r\n  <\/div>\r\n\r\n  <!-- ===================== SCORECARDS ===================== -->\r\n  <div class=\"scorecards\" id=\"scorecards\" style=\"display:none\">\r\n    <div class=\"sc red\"><div class=\"lbl\">Cabang bermasalah<\/div><div class=\"val\" id=\"k-issue\">\u2014<\/div><div class=\"sub\" id=\"k-issue-sub\">rentang terpilih<\/div><\/div>\r\n    <div class=\"sc\"><div class=\"lbl\">Pengaduan<\/div><div class=\"val\" id=\"k-peng\">\u2014<\/div><div class=\"sub\">total tiket<\/div><\/div>\r\n    <div class=\"sc amber\"><div class=\"lbl\">Google Maps<\/div><div class=\"val\" id=\"k-gmaps\">\u2014<\/div><div class=\"sub\">review masuk<\/div><\/div>\r\n    <div class=\"sc accent\"><div class=\"lbl\">Perubahan data<\/div><div class=\"val\" id=\"k-perub\">\u2014<\/div><div class=\"sub\" id=\"k-perub-sub\">total (semua waktu)<\/div><\/div>\r\n    <div class=\"sc green\"><div class=\"lbl\">Total cabang<\/div><div class=\"val\" id=\"k-branch\">\u2014<\/div><div class=\"sub\">di AM list<\/div><\/div>\r\n  <\/div>\r\n\r\n  <!-- ===================== TAB: HEATMAP ===================== -->\r\n  <section class=\"tabpane\" id=\"pane-heatmap\" style=\"display:none\">\r\n    <div class=\"panel\">\r\n      <div class=\"panel-head\">\r\n        <div>\r\n          <div class=\"panel-title\">\ud83d\udd25 Heatmap isu per cabang &times; bulan<\/div>\r\n          <div class=\"panel-sub\" id=\"heat-sub\">Makin merah = makin banyak isu di bulan itu<\/div>\r\n        <\/div>\r\n        <div style=\"display:flex;gap:.6rem;align-items:center;flex-wrap:wrap\">\r\n          <span class=\"ctl-label\">Metrik:<\/span>\r\n          <div class=\"seg wrap\" id=\"seg-metric\">\r\n            <button data-m=\"total\" class=\"active\" onclick=\"CS.setMetric('total')\">Total<\/button>\r\n            <button data-m=\"pengaduan\" onclick=\"CS.setMetric('pengaduan')\">Pengaduan<\/button>\r\n            <button data-m=\"gmaps\" onclick=\"CS.setMetric('gmaps')\">Gmaps<\/button>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"cs-legend\" id=\"heat-legend\" style=\"margin-bottom:.7rem\"><\/div>\r\n      <div class=\"tbl-wrap\">\r\n        <table class=\"pivot\" id=\"tbl-heat\"><thead><tr id=\"heat-head\"><\/tr><\/thead><tbody id=\"heat-body\"><\/tbody><\/table>\r\n      <\/div>\r\n      <div class=\"hint\"><b>Total isu (bln)<\/b> = jumlah seluruh kolom bulan yang tampil (sesuai metrik & rentang terpilih). Kolom <b>Perubahan data<\/b> = total semua waktu. <b>Klik judul kolom apa pun untuk mengurutkan<\/b> (default: Total isu terbanyak). Klik nama cabang untuk lihat di tab Tabel.<\/div>\r\n    <\/div>\r\n  <\/section>\r\n\r\n  <!-- ===================== TAB: TABEL ===================== -->\r\n  <section class=\"tabpane\" id=\"pane-tabel\" style=\"display:none\">\r\n    <div class=\"panel\">\r\n      <div class=\"panel-head\">\r\n        <div class=\"panel-title\" id=\"tabel-title\">\ud83d\udccb Ringkasan per cabang<\/div>\r\n        <div style=\"display:flex;gap:.4rem\">\r\n          <button class=\"btn-ghost\" onclick=\"CS.exportCSV()\">\u2b07 CSV<\/button>\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"tbl-wrap\">\r\n        <table id=\"tbl\"><thead><tr id=\"thead-row\"><\/tr><\/thead><tbody id=\"tbody\"><\/tbody><\/table>\r\n      <\/div>\r\n      <div class=\"hint\" id=\"tabel-hint\">Klik judul kolom untuk mengurutkan. Angka pengaduan &amp; gmaps mengikuti rentang bulan terpilih; perubahan data selalu total semua waktu. Kolom <b>Gmaps (\u26051\/\u26052)<\/b> memecah review bintang 1 vs bintang 2; kolom <b>Perubahan<\/b> menyimpan pecahan jenis koreksi (Nomor HP \/ NIK) di tooltip. Rincian kategori per cabang ada di tab <b>Pengaduan<\/b>, <b>Gmaps<\/b>, &amp; <b>Perubahan Data<\/b>.<\/div>\r\n    <\/div>\r\n  <\/section>\r\n\r\n  <!-- ===================== TAB: PENGADUAN (detail) ===================== -->\r\n  <section class=\"tabpane\" id=\"pane-pengaduan\" style=\"display:none\">\r\n    <div class=\"panel\">\r\n      <div class=\"panel-head\">\r\n        <div>\r\n          <div class=\"panel-title\">\ud83d\udce3 Detail Pengaduan per cabang<\/div>\r\n          <div class=\"panel-sub\">Kategori &times; kolom bulan per cabang. Ikut filter &amp; rentang terpilih. <b>Klik judul kolom (termasuk bulan) untuk urut.<\/b><\/div>\r\n        <\/div>\r\n      <\/div>\r\n      <details class=\"det-overall\" open>\r\n        <summary>\ud83d\udcca Ringkasan keseluruhan kategori (semua cabang lolos filter)<\/summary>\r\n        <div class=\"det-overall-body\" id=\"ov-peng-body\"><\/div>\r\n      <\/details>\r\n      <div id=\"det-peng\" class=\"det-list\"><\/div>\r\n    <\/div>\r\n  <\/section>\r\n\r\n  <!-- ===================== TAB: GMAPS (detail) ===================== -->\r\n  <section class=\"tabpane\" id=\"pane-gmaps\" style=\"display:none\">\r\n    <div class=\"panel\">\r\n      <div class=\"panel-head\">\r\n        <div>\r\n          <div class=\"panel-title\">\u2b50 Detail Google Maps per cabang<\/div>\r\n          <div class=\"panel-sub\">Kategori komplain &times; kolom bulan, plus pecahan rating <b class=\"rsplit\"><b class=\"r1\">\u26051<\/b>\/<b class=\"r2\">\u26052<\/b><\/b> per cabang. Ikut filter &amp; rentang terpilih. <b>Klik judul kolom untuk urut.<\/b><\/div>\r\n        <\/div>\r\n      <\/div>\r\n      <details class=\"det-overall\" open>\r\n        <summary>\ud83d\udcca Ringkasan keseluruhan kategori komplain Gmaps (semua cabang lolos filter)<\/summary>\r\n        <div class=\"det-overall-body\" id=\"ov-gmaps-body\"><\/div>\r\n      <\/details>\r\n      <div id=\"det-gmaps\" class=\"det-list\"><\/div>\r\n    <\/div>\r\n  <\/section>\r\n\r\n  <!-- ===================== TAB: PERUBAHAN (detail) ===================== -->\r\n  <section class=\"tabpane\" id=\"pane-perubahan\" style=\"display:none\">\r\n    <div class=\"panel\">\r\n      <div class=\"panel-head\">\r\n        <div>\r\n          <div class=\"panel-title\">\u270f\ufe0f Detail Perubahan Data per cabang<\/div>\r\n          <div class=\"panel-sub\">Breakdown &times; <b>kolom bulan<\/b> per cabang. Kolom <b>Total<\/b> = semua waktu (tidak terpengaruh rentang bulan); angka per bulan mengikuti tanggal di sumber. Nama petugas tidak ditampilkan. <b>Klik judul kolom untuk urut.<\/b><\/div>\r\n        <\/div>\r\n        <div style=\"display:flex;gap:.6rem;align-items:center;flex-wrap:wrap\">\r\n          <span class=\"ctl-label\">Breakdown:<\/span>\r\n          <div class=\"seg wrap\" id=\"seg-perub\">\r\n            <button data-pv=\"alasan\" class=\"active\" onclick=\"CS.setPerubView('alasan')\">Alasan<\/button>\r\n            <button data-pv=\"data\" onclick=\"CS.setPerubView('data')\">Jenis Data<\/button>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n      <details class=\"det-overall\" open>\r\n        <summary>\ud83d\udcca Ringkasan keseluruhan (semua cabang lolos filter)<\/summary>\r\n        <div class=\"det-overall-body\" id=\"ov-perub-body\"><\/div>\r\n      <\/details>\r\n      <div id=\"det-perub\" class=\"det-list\"><\/div>\r\n    <\/div>\r\n  <\/section>\r\n\r\n  <!-- ===================== TAB: AM ===================== -->\r\n  <section class=\"tabpane\" id=\"pane-am\" style=\"display:none\">\r\n    <div class=\"panel\">\r\n      <div class=\"panel-head\">\r\n        <div class=\"panel-title\">\ud83d\udc64 Ringkasan per Area Manager<\/div>\r\n        <div class=\"panel-sub\">Total isu semua cabang di bawah tiap AM (rentang terpilih)<\/div>\r\n      <\/div>\r\n      <div class=\"tbl-wrap\">\r\n        <table id=\"tbl-am\"><thead><tr id=\"amhead-row\"><\/tr><\/thead><tbody id=\"tbody-am\"><\/tbody><\/table>\r\n      <\/div>\r\n      <div class=\"hint\">Perubahan data = total semua waktu. Cabang tanpa AM di AM list dikelompokkan sebagai \u201c(Tanpa AM)\u201d.<\/div>\r\n    <\/div>\r\n\r\n    <div class=\"panel\">\r\n      <div class=\"panel-head\">\r\n        <div>\r\n          <div class=\"panel-title\">\ud83d\uddd3\ufe0f Kapan isu tiap AM terjadi<\/div>\r\n          <div class=\"panel-sub\">Sebaran bulan isu (pengaduan + gmaps) per Area Manager, mengikuti filter &amp; rentang bulan. Perubahan data tidak dipecah per bulan di sini. <b>Klik judul kolom untuk urut.<\/b><\/div>\r\n        <\/div>\r\n      <\/div>\r\n      <div id=\"am-months\" class=\"det-list\"><\/div>\r\n    <\/div>\r\n  <\/section>\r\n\r\n<\/div>\r\n<!-- ===================== FOOTER (LOCKED) ===================== -->\r\n<div class=\"site-footer\">\r\n  <div class=\"footer-grid\">\r\n    <div>\r\n      <img decoding=\"async\" src=\"https:\/\/pandaigadai.com\/blog\/wp-content\/uploads\/2026\/01\/cropped-panda-1.webp\" alt=\"Pandai Gadai\" style=\"height:3.5rem;width:auto\">\r\n      <p style=\"margin-top:1.25rem;font-size:.875rem;color:rgba(255,255,255,0.85)\">Berizin dan Diawasi Otoritas Jasa Keuangan<\/p>\r\n      <p style=\"margin-top:.5rem;font-size:.875rem;font-weight:600\">Nomor Izin: KEP-180\/PL.02\/2023<\/p>\r\n    <\/div>\r\n    <div>\r\n      <h3 style=\"font-size:1rem;font-weight:700\">Navigasi<\/h3>\r\n      <ul style=\"margin-top:1rem;display:flex;flex-direction:column;gap:.625rem;font-size:.875rem;color:rgba(255,255,255,0.85)\">\r\n        <li><a href=\"https:\/\/pandaigadai.com\/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"footer-nav-link\">pandaigadai.com<\/a><\/li>\r\n      <\/ul>\r\n    <\/div>\r\n    <div>\r\n      <h3 style=\"font-size:1rem;font-weight:700\">Layanan Pengaduan Kantor Pusat<\/h3>\r\n      <p style=\"margin-top:1rem;font-size:.875rem;color:rgba(255,255,255,0.85)\">\r\n        Telepon: <a href=\"tel:085715322146\" class=\"footer-nav-link\">0857-1532-2146<\/a><br>\r\n        Email: <a href=\"mailto:hello@pandaigadai.com\" class=\"footer-nav-link\">hello@pandaigadai.com<\/a>\r\n      <\/p>\r\n    <\/div>\r\n  <\/div>\r\n  <div class=\"footer-bottom\">\r\n    <div class=\"footer-bottom-inner\">\r\n      <span>&copy; Copyright PT Solusi Gadai Pintar 2026 All Rights Reserved<\/span>\r\n      <div style=\"display:flex;align-items:center;gap:.75rem\">\r\n        <a href=\"https:\/\/www.instagram.com\/pandaigadai\" target=\"_blank\" rel=\"noopener noreferrer\" aria-label=\"Instagram\" class=\"social-link\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"height:1rem;width:1rem\"><rect x=\"2\" y=\"2\" width=\"20\" height=\"20\" rx=\"5\" ry=\"5\"\/><path d=\"M16 11.37A4 4 0 1112.63 8 4 4 0 0116 11.37z\"\/><line x1=\"17.5\" y1=\"6.5\" x2=\"17.51\" y2=\"6.5\"\/><\/svg><\/a>\r\n        <a href=\"https:\/\/www.tiktok.com\/@pandaigadai.id\" target=\"_blank\" rel=\"noopener noreferrer\" aria-label=\"TikTok\" class=\"social-link\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" style=\"height:1rem;width:1rem\"><path d=\"M19.59 6.69a4.83 4.83 0 01-3.77-4.25V2h-3.45v13.67a2.89 2.89 0 01-5.2 1.74 2.89 2.89 0 012.31-4.64 2.93 2.93 0 01.88.13V9.4a6.84 6.84 0 00-1-.05A6.33 6.33 0 005.8 20.1a6.34 6.34 0 0010.86-4.43V8.92a8.16 8.16 0 004.77 1.52V7A4.86 4.86 0 0119.59 6.69z\"\/><\/svg><\/a>\r\n        <a href=\"https:\/\/www.facebook.com\/pandaigadai\" target=\"_blank\" rel=\"noopener noreferrer\" aria-label=\"Facebook\" class=\"social-link\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" style=\"height:1rem;width:1rem\"><path d=\"M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z\"\/><\/svg><\/a>\r\n        <a href=\"https:\/\/www.youtube.com\/@PandaiGadai\" target=\"_blank\" rel=\"noopener noreferrer\" aria-label=\"YouTube\" class=\"social-link\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" style=\"height:1rem;width:1rem\"><path d=\"M23.498 6.186a3.016 3.016 0 00-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 00.502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 002.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 002.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814z\"\/><\/svg><\/a>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<\/div><!-- \/pg-page -->\r\n<script>\r\n(function(){\r\n'use strict';\r\nvar $=function(id){return document.getElementById(id);};\r\nvar LS='cs_dash_pg_v1';\r\n\r\n\/* ---------- state ---------- *\/\r\nvar state={\r\n  tab:'heatmap', metric:'total', perubView:'alasan',\r\n  branches:{},           \/\/ key -> {name, area, am, inAM}\r\n  peng:[], gmaps:[], perub:[],   \/\/ records\r\n  months:[],             \/\/ sorted 'yyyy-mm'\r\n  loaded:false,\r\n  sortKey:'total', sortDir:-1,\r\n  amSortKey:'total', amSortDir:-1,\r\n  heatSortKey:'sum', heatSortDir:-1,\r\n  piv:{}                 \/\/ sort state per pivot tabel: id -> {k,dir}\r\n};\r\n\r\n\/* ---------- helpers ---------- *\/\r\nfunction nf(n){return isFinite(n)?Math.round(n).toLocaleString('id-ID'):'\u2014';}\r\nfunction esc(s){return String(s==null?'':s).replace(\/[&<>\"']\/g,function(c){return{'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'}[c];});}\r\nfunction pad2(n){n=parseInt(n,10);return (n<10?'0':'')+n;}\r\nfunction setStatus(m,c){var s=$('status');s.style.display='block';s.className='status '+(c||'info');s.innerHTML=m;}\r\n\r\n\/\/ join key across tabs: strip brand\/prefix\/punct, lowercase\r\nfunction matchKey(s){s=String(s||'').replace(\/^pandai gadai\\s*\/i,'').toLowerCase();\r\n s=s.replace(\/\\(.*?\\)\/g,'').replace(\/^-\\s*cabang\\s*\/,'').replace(\/\\bcabang\\b\/g,'').replace(\/^fl\\s+\/,'');\r\n return s.replace(\/[^a-z0-9]+\/g,' ').trim();}\r\n\r\n\/\/ tidy display name from a branch string\r\nfunction cleanBranch(s){s=String(s||'').trim();\r\n s=s.replace(\/^FL\\s+\/i,'');\r\n var dash=s.indexOf(' - '); if(dash>=0) s=s.slice(0,dash);\r\n s=s.replace(\/\\s{2,}\/g,' ').trim();\r\n return s;}\r\n\r\n\/* ---------- CSV parser (RFC-ish) ---------- *\/\r\nfunction parseCSV(text){var rows=[],row=[],cur='',i=0,q=false;while(i<text.length){var c=text[i];\r\n if(q){if(c==='\"'){if(text[i+1]==='\"'){cur+='\"';i++;}else q=false;}else cur+=c;}\r\n else{if(c==='\"')q=true;else if(c===','){row.push(cur);cur='';}else if(c==='\\n'){row.push(cur);rows.push(row);row=[];cur='';}else if(c==='\\r'){}else cur+=c;}\r\n i++;}\r\n if(cur.length||row.length){row.push(cur);rows.push(row);}return rows;}\r\n\r\nfunction normHdr(h){return String(h).trim().toLowerCase().replace(\/\\s+\/g,' ');}\r\nfunction finder(header){var norm=(header||[]).map(normHdr);\r\n return function(){for(var a=0;a<arguments.length;a++){var i=norm.indexOf(arguments[a]);if(i>=0)return i;}return -1;};}\r\n\r\n\/* ---------- month parsing ---------- *\/\r\nvar MONTHS={jan:1,januari:1,january:1,feb:2,februari:2,february:2,mar:3,maret:3,march:3,apr:4,april:4,\r\n mei:5,may:5,jun:6,juni:6,june:6,jul:7,juli:7,july:7,agu:8,agt:8,ags:8,agustus:8,aug:8,august:8,\r\n sep:9,sept:9,september:9,okt:10,oktober:10,oct:10,october:10,nov:11,november:11,des:12,desember:12,dec:12,december:12};\r\nvar MLBL=['','Jan','Feb','Mar','Apr','Mei','Jun','Jul','Agu','Sep','Okt','Nov','Des'];\r\nfunction monthKeyYM(y,m){y=parseInt(String(y).replace(\/[^0-9]\/g,''),10);\r\n var ms=String(m).trim().toLowerCase(), mm;\r\n if(\/^\\d+$\/.test(ms)) mm=parseInt(ms,10); else mm=MONTHS[ms]||MONTHS[ms.slice(0,3)]||0;\r\n if(!y||!mm||mm<1||mm>12)return null; return y+'-'+pad2(mm);}\r\nfunction monthKeyText(s){s=String(s||'').trim();if(!s)return null;\r\n var m=s.match(\/^(\\d{4})[-\\\/](\\d{1,2})\/); if(m)return monthKeyYM(m[1],m[2]);\r\n m=s.match(\/([A-Za-z]+)[\\s\\-]+(\\d{4})\/); if(m)return monthKeyYM(m[2],m[1]);       \/\/ \"May 2024\"\r\n m=s.match(\/(\\d{1,2})[\\s\\-]+([A-Za-z]+)[\\s\\-]+(\\d{4})\/); if(m)return monthKeyYM(m[3],m[2]);\r\n return null;}\r\nfunction monthKeyDate(s){s=String(s||'').trim();if(!s)return null;\r\n var k=monthKeyText(s); if(k)return k;\r\n var d=new Date(s); if(!isNaN(d))return d.getFullYear()+'-'+pad2(d.getMonth()+1);\r\n var m=s.match(\/(\\d{1,2})[\\\/\\-](\\d{1,2})[\\\/\\-](\\d{2,4})\/); \/\/ dd\/mm\/yyyy\r\n if(m){var y=m[3].length===2?('20'+m[3]):m[3];return monthKeyYM(y,m[2]);}\r\n return null;}\r\nfunction monthLabel(k){if(!k)return '\u2014';var p=k.split('-');return MLBL[parseInt(p[1],10)]+' '+p[0];}\r\n\r\n\/* ---------- fetch mirror tabs ---------- *\/\r\n\/\/ Sumber data di-hardcode (panel pengaturan dihapus). Catatan: ID tetap terlihat di\r\n\/\/ View Source \/ tab Network browser \u2014 proteksi sesungguhnya = mirror hanya berisi data\r\n\/\/ agregat (tanpa nama\/no HP) & di-share read-only.\r\nvar SHEET_ID='1BzUjCVTUhcl8bfTAts8zzLBXMwwEleG_lMAPnLkCTXc';\r\nvar TABS={peng:'pengaduan',gmaps:'gmaps',perub:'perubahan data',am:'AM list'};\r\nfunction cbucket(){return Math.floor(Date.now()\/300000);} \/\/ 5-min cache bucket\r\nfunction gvizUrl(sheetName){\r\n return 'https:\/\/docs.google.com\/spreadsheets\/d\/'+SHEET_ID+'\/gviz\/tq?tqx=out:csv&sheet='+encodeURIComponent(sheetName)+'&_cb='+cbucket();}\r\nfunction fetchTab(sheetName){return fetch(gvizUrl(sheetName),{credentials:'omit'}).then(function(r){\r\n if(!r.ok)throw new Error('HTTP '+r.status);return r.text().then(function(t){\r\n  if(new RegExp('<'+'html','i').test(t.slice(0,200)))throw new Error('html');\r\n  return parseCSV(t).filter(function(x){return x.length>1||(x.length===1&&x[0]!=='');});});});}\r\n\r\n\/* ---------- parse each tab ---------- *\/\r\nfunction parseAM(rows){var map={};if(!rows||rows.length<2)return map;\r\n var f=finder(rows[0]);\r\n var bi=f('branch','cabang','nama cabang','branch name'), mi=f('area manager name','area manager','am','manager','nama am'), ai=f('area','wilayah');\r\n if(bi<0){ai=0;mi=1;bi=2;} \/\/ positional fallback: Area | AM | Branch\r\n for(var r=1;r<rows.length;r++){var row=rows[r];if(!row)continue;\r\n  var b=cleanBranch(row[bi]||'');if(!b)continue;var k=matchKey(b);if(!k)continue;\r\n  if(!map[k])map[k]={name:b, area:(ai>=0?(row[ai]||''):'').trim(), am:(mi>=0?(row[mi]||''):'').trim(), inAM:true};}\r\n return map;}\r\n\r\nfunction parsePeng(rows){var out=[];if(!rows||rows.length<2)return out;\r\n var f=finder(rows[0]);\r\n var ci=f('cabang','lokasi cabang','branch','nama cabang'), yi=f('tahun','year'), mi=f('bulan','month'),\r\n     bti=f('bln thn','bulan tahun','periode','bulan-tahun'), di=f('tanggal pengaduan','tanggal','date'),\r\n     ki=f('kategori pengaduan','kategori'), fi=f('miss fl','missfl');\r\n if(ci<0)ci=0;\r\n for(var r=1;r<rows.length;r++){var row=rows[r];if(!row)continue;var b=cleanBranch(row[ci]||'');if(!b)continue;\r\n  var mk=null;\r\n  if(yi>=0&&mi>=0)mk=monthKeyYM(row[yi],row[mi]);\r\n  if(!mk&&bti>=0)mk=monthKeyText(row[bti]);\r\n  if(!mk&&di>=0)mk=monthKeyDate(row[di]);\r\n  var kat=(ki>=0?String(row[ki]||'').trim():'');\r\n  var missFL=fi>=0?(String(row[fi]||'').trim()!==''):false; \/\/ sel ada isinya = miss FL\r\n  out.push({key:matchKey(b),name:b,month:mk,kategori:kat,missFL:missFL});}\r\n return out;}\r\n\r\nfunction parseGmaps(rows){var out=[];if(!rows||rows.length<2)return out;\r\n var f=finder(rows[0]);\r\n var ci=f('cabang','lokasi cabang','branch','nama cabang'), di=f('tanggal','date','tanggal review'),\r\n     yi=f('tahun','year'), mi=f('bulan','month'),\r\n     ri=f('rating'), ki=f('kategori pengaduan','kategori');\r\n if(ci<0)ci=0;\r\n for(var r=1;r<rows.length;r++){var row=rows[r];if(!row)continue;var b=cleanBranch(row[ci]||'');if(!b)continue;\r\n  var mk=null;\r\n  if(di>=0)mk=monthKeyDate(row[di]);\r\n  if(!mk&&yi>=0&&mi>=0)mk=monthKeyYM(row[yi],row[mi]);\r\n  var rt=0; if(ri>=0){var rm=String(row[ri]||'').match(\/\\d+\/); if(rm)rt=parseInt(rm[0],10);} \/\/ \"Rating 1\" -> 1\r\n  var kat=(ki>=0?String(row[ki]||'').trim():'');\r\n  out.push({key:matchKey(b),name:b,month:mk,rating:rt,kategori:kat});}\r\n return out;}\r\n\r\nfunction parsePerub(rows){var out=[];if(!rows||rows.length<2)return out;\r\n var f=finder(rows[0]);\r\n var ci=f('cabang','cabang \/ keterangan','keterangan','lokasi cabang','branch','nama cabang','cabang\/keterangan'),\r\n     ai=f('fl miss input\/req perubahan','fl miss input \/ req perubahan','kesalahan input\/req perubahan','kesalahan input \/ req perubahan','jenis koreksi','jenis kesalahan','alasan','req perubahan','miss input'), \/\/ ALASAN: Kesalahan Input \/ Req Perubahan\r\n     pi=f('perubahan','jenis data','jenis perubahan','data perubahan','jenis','field'), \/\/ kolom I \"Perubahan\": Nomor HP \/ NIK \/ dll\r\n     di=f('tanggal','tanggal perubahan','tgl perubahan','date','tgl');\r\n if(ci<0)ci=rows[0].length-1; \/\/ fallback: last col\r\n for(var r=1;r<rows.length;r++){var row=rows[r];if(!row)continue;\r\n  var raw=(row[ci]||'').trim();\r\n  var alasan=(ai>=0?String(row[ai]||'').trim():''); \/\/ Kesalahan Input \/ Req Perubahan\r\n  var field=(pi>=0?String(row[pi]||'').trim():''); \/\/ Nomor HP \/ NIK \/ dll\r\n  var mk=(di>=0?monthKeyDate(row[di]):null);\r\n  var b=cleanBranch(raw), key=matchKey(b);\r\n  if(!key){ \/\/ cabang kosong \/ \"-\" (mis. req perubahan dari nasabah, tanpa cabang) \u2192 tetap dihitung\r\n    if(!alasan&&!field&&!mk)continue; \/\/ baris benar-benar kosong \u2192 lewati\r\n    key='(tanpa cabang)'; b='(Tanpa cabang)';\r\n  }\r\n  out.push({key:key,name:b,alasan:alasan,field:field,month:mk});}\r\n return out;}\r\n\r\n\/* ---------- load ---------- *\/\r\nfunction load(){\r\n setStatus('Memuat data dari mirror sheet\u2026','info'); savePrefs();\r\n var tP=TABS.peng, tG=TABS.gmaps, tD=TABS.perub, tA=TABS.am;\r\n var errs=[];\r\n Promise.all([\r\n   fetchTab(tA).then(parseAM).catch(function(){errs.push('AM list');return {};}),\r\n   fetchTab(tP).then(parsePeng).catch(function(){errs.push('pengaduan');return [];}),\r\n   fetchTab(tG).then(parseGmaps).catch(function(){errs.push('gmaps');return [];}),\r\n   fetchTab(tD).then(parsePerub).catch(function(){errs.push('perubahan data');return [];})\r\n ]).then(function(res){\r\n   state.branches=res[0]; state.peng=res[1]; state.gmaps=res[2]; state.perub=res[3];\r\n   \/\/ add branches found in data but missing from AM list\r\n   function ensure(rec){var k=rec.key;if(!k)return;if(!state.branches[k])state.branches[k]={name:rec.name,area:'',am:'',inAM:false};}\r\n   state.peng.forEach(ensure);state.gmaps.forEach(ensure);state.perub.forEach(ensure);\r\n   \/\/ months universe\r\n   var ms={};state.peng.concat(state.gmaps).forEach(function(r){if(r.month)ms[r.month]=1;});\r\n   state.months=Object.keys(ms).sort();\r\n   state.loaded=true;\r\n   buildFilters();\r\n   if(errs.length){setStatus('Sebagian tab gagal dimuat: <b>'+errs.join(', ')+'<\/b>. Cek nama tab &amp; sharing mirror sheet (Anyone with link \u2192 Viewer).','err');}\r\n   else{setStatus('Data termuat \u2713 \u2014 '+nf(Object.keys(state.branches).length)+' cabang, '+nf(state.peng.length)+' pengaduan, '+nf(state.gmaps.length)+' review gmaps, '+nf(state.perub.length)+' perubahan data. Rentang bulan: '+(state.months.length?monthLabel(state.months[0])+' \u2013 '+monthLabel(state.months[state.months.length-1]):'\u2014')+'.','ok');}\r\n   $('tabs').style.display='flex';$('scorecards').style.display='grid';\r\n   render();\r\n }).catch(function(e){setStatus('Gagal memuat mirror sheet. Pastikan ID benar &amp; sheet dibagikan <b>\u201cSiapa saja yang memiliki link \u2192 Pelihat\u201d<\/b>.','err');});\r\n}\r\n\r\n\/* ---------- filters UI ---------- *\/\r\nfunction fillSelect(el,opts,keep){var cur=keep?el.value:'';el.innerHTML='';opts.forEach(function(o){var op=document.createElement('option');op.value=o.v;op.textContent=o.t;el.appendChild(op);});if(keep)el.value=cur;}\r\nfunction buildFilters(){\r\n var mopts=[{v:'',t:'\u2014'}].concat(state.months.map(function(m){return{v:m,t:monthLabel(m)};}));\r\n fillSelect($('f-from'),mopts);fillSelect($('f-to'),mopts);\r\n if(state.months.length){$('f-from').value=state.months[0];$('f-to').value=state.months[state.months.length-1];}\r\n \/\/ areas\r\n var aset={};Object.keys(state.branches).forEach(function(k){var a=state.branches[k].area;if(a)aset[a]=1;});\r\n var aopts=[{v:'',t:'Semua area'}].concat(Object.keys(aset).sort().map(function(a){return{v:a,t:a};}));\r\n fillSelect($('f-area'),aopts);\r\n refreshAMOptions();\r\n}\r\nfunction refreshAMOptions(){\r\n var area=$('f-area').value, mset={};\r\n Object.keys(state.branches).forEach(function(k){var b=state.branches[k];if(area&&b.area!==area)return;if(b.am)mset[b.am]=1;});\r\n var mopts=[{v:'',t:'Semua AM'}].concat(Object.keys(mset).sort().map(function(m){return{v:m,t:m};}));\r\n fillSelect($('f-am'),mopts);\r\n}\r\nfunction onAreaChange(){refreshAMOptions();render();}\r\n\r\n\/* ---------- aggregation given filters ---------- *\/\r\nfunction inRange(m){if(!m)return false;var f=$('f-from').value,t=$('f-to').value;\r\n if(f&&m<f)return false; if(t&&m>t)return false; return true;}\r\nfunction aggregate(){\r\n var A={};\r\n function ini(k){if(!A[k]){var b=state.branches[k]||{name:k,area:'',am:'',inAM:false};\r\n   A[k]={key:k,name:b.name,area:b.area,am:b.am,inAM:b.inAM,peng:0,gmaps:0,perub:0,byMonth:{},\r\n     missFLCount:0,gmapsR1:0,gmapsR2:0,pengByKategori:{},gmapsByKategori:{},perubByAlasan:{},perubByData:{}};}return A[k];}\r\n \/\/ akumulasi kategori + kapan-nya (per bulan): map[cat]={n,months:{ym:count}}\r\n function bump(map,cat,month){var e=map[cat]||(map[cat]={n:0,months:{}});e.n++;if(month)e.months[month]=(e.months[month]||0)+1;}\r\n Object.keys(state.branches).forEach(ini);\r\n state.peng.forEach(function(r){if(!r.key)return;var o=ini(r.key);if(inRange(r.month)){o.peng++;(o.byMonth[r.month]=o.byMonth[r.month]||{peng:0,gmaps:0}).peng++;\r\n   if(r.missFL)o.missFLCount++;\r\n   bump(o.pengByKategori,r.kategori||'(Tanpa kategori)',r.month);}});\r\n state.gmaps.forEach(function(r){if(!r.key)return;var o=ini(r.key);if(inRange(r.month)){o.gmaps++;(o.byMonth[r.month]=o.byMonth[r.month]||{peng:0,gmaps:0}).gmaps++;\r\n   if(r.rating===1)o.gmapsR1++;else if(r.rating===2)o.gmapsR2++;\r\n   bump(o.gmapsByKategori,r.kategori||'(Tanpa kategori)',r.month);}});\r\n state.perub.forEach(function(r){if(!r.key)return;var o=ini(r.key);o.perub++; \/\/ count tetap total semua-waktu (konsisten scorecard\/tabel\/heatmap)\r\n   bump(o.perubByAlasan,r.alasan||'(Tanpa alasan)',r.month);\r\n   bump(o.perubByData,r.field||'(Tanpa jenis)',r.month);});\r\n Object.keys(A).forEach(function(k){A[k].total=A[k].peng+A[k].gmaps+A[k].perub;});\r\n return A;}\r\nfunction visibleMonths(){var f=$('f-from').value,t=$('f-to').value;\r\n return state.months.filter(function(m){return (!f||m>=f)&&(!t||m<=t);});}\r\nfunction passFilter(o){\r\n var area=$('f-area').value, am=$('f-am').value, q=($('f-search').value||'').trim().toLowerCase(), only=$('f-only').value;\r\n if(area&&o.area!==area)return false;\r\n if(am&&o.am!==am)return false;\r\n if(q&&o.name.toLowerCase().indexOf(q)<0)return false;\r\n if(only==='issues'&&o.total<=0)return false;\r\n return true;}\r\n\r\n\/* ---------- heat color ---------- *\/\r\nfunction heatColor(v,max){if(v<=0)return null;var r=max>0?v\/max:0;var a=0.14+0.80*Math.pow(r,0.7);\r\n return{bg:'rgba(220,38,38,'+a.toFixed(3)+')',fg:r>0.55?'#fff':'var(--foreground)'};}\r\n\r\n\/* ---------- renderers ---------- *\/\r\nfunction render(){if(!state.loaded)return;\r\n var A=aggregate();\r\n var rows=Object.keys(A).map(function(k){return A[k];}).filter(passFilter);\r\n renderScorecards(A,rows);\r\n if(state.tab==='heatmap')renderHeat(rows);\r\n else if(state.tab==='tabel')renderTable(rows);\r\n else if(state.tab==='pengaduan')renderDetail({cid:'det-peng',ovId:'ov-peng-body',rows:rows,srcField:'peng',mapField:'pengByKategori',metaFn:null,firstLabel:'Kategori',sortMain:'peng-main',sortOv:'peng-ov'});\r\n else if(state.tab==='gmaps')renderDetail({cid:'det-gmaps',ovId:'ov-gmaps-body',rows:rows,srcField:'gmaps',mapField:'gmapsByKategori',metaFn:gmapsMeta,firstLabel:'Kategori',sortMain:'gmaps-main',sortOv:'gmaps-ov'});\r\n else if(state.tab==='perubahan'){var pv=state.perubView==='data'?{mf:'perubByData',fl:'Jenis data'}:{mf:'perubByAlasan',fl:'Alasan koreksi'};\r\n   renderDetail({cid:'det-perub',ovId:'ov-perub-body',rows:rows,srcField:'perub',mapField:pv.mf,metaFn:null,firstLabel:pv.fl,sortMain:'perub-main-'+state.perubView,sortOv:'perub-ov-'+state.perubView});}\r\n else renderAM(rows);\r\n}\r\nfunction renderScorecards(A,rows){\r\n var peng=0,gmaps=0,perub=0,issue=0;\r\n rows.forEach(function(o){peng+=o.peng;gmaps+=o.gmaps;perub+=o.perub;if(o.total>0)issue++;});\r\n $('k-issue').textContent=nf(issue);\r\n $('k-issue-sub').textContent='dari '+nf(rows.length)+' cabang tampil';\r\n $('k-peng').textContent=nf(peng);$('k-gmaps').textContent=nf(gmaps);$('k-perub').textContent=nf(perub);\r\n $('k-branch').textContent=nf(Object.keys(state.branches).filter(function(k){return state.branches[k].inAM;}).length);\r\n var ps=$('k-perub-sub');if(ps)ps.textContent='total (semua waktu)'; \/\/ rincian ada di tab Perubahan Data\r\n}\r\n\r\nfunction metricVal(mm){ \/\/ mm = {peng,gmaps} or undefined\r\n if(!mm)return 0; if(state.metric==='pengaduan')return mm.peng; if(state.metric==='gmaps')return mm.gmaps; return mm.peng+mm.gmaps;}\r\nfunction monSumOf(o,months){var s=0;months.forEach(function(m){s+=metricVal(o.byMonth[m]);});return s;}\r\nfunction heatSortVal(o,key,months){\r\n if(key==='name')return (o.name||'').toLowerCase();\r\n if(key==='am')return (o.am||'').toLowerCase();\r\n if(key==='perub')return o.perub;\r\n if(key==='sum')return monSumOf(o,months);\r\n return metricVal(o.byMonth[key]); \/\/ key = 'yyyy-mm' kolom bulan\r\n}\r\nfunction renderHeat(rows){\r\n var months=visibleMonths();\r\n var max=0;rows.forEach(function(o){months.forEach(function(m){var v=metricVal(o.byMonth[m]);if(v>max)max=v;});});\r\n \/\/ sort (semua kolom bisa di-sort; default: Total isu bln tertinggi)\r\n var sk=state.heatSortKey,sd=state.heatSortDir,isStr=(sk==='name'||sk==='am');\r\n rows=rows.slice().sort(function(a,b){var va=heatSortVal(a,sk,months),vb=heatSortVal(b,sk,months);\r\n   if(isStr)return va<vb?-sd:va>vb?sd:0; return (va-vb)*sd;});\r\n \/\/ header (klik = sort)\r\n function hth(key,label,cls){var on=sk===key;\r\n   return '<th class=\"'+(cls||'')+(on?' sorted':'')+'\" onclick=\"CS.heatSort(\\''+key+'\\')\">'+label+(on?(sd<0?' \u25bc':' \u25b2'):'')+'<\/th>';}\r\n var h=hth('name','Cabang','stick l')+hth('am','AM','l');\r\n months.forEach(function(m){h+=hth(m,esc(monthLabel(m)),'');});\r\n h+=hth('sum','Total isu<br>(bln)','totcol')+hth('perub','Perub.<br>data','totcol');\r\n $('heat-head').innerHTML=h;\r\n \/\/ legend\r\n $('heat-legend').innerHTML='<span>Skala '+esc(state.metric==='total'?'pengaduan + gmaps':state.metric)+':<\/span>'+\r\n   '<span><span class=\"sw\" style=\"background:#eef2fb\"><\/span>0<\/span>'+\r\n   '<span><span class=\"sw\" style=\"background:rgba(220,38,38,0.22)\"><\/span>rendah<\/span>'+\r\n   '<span><span class=\"sw\" style=\"background:rgba(220,38,38,0.55)\"><\/span>sedang<\/span>'+\r\n   '<span><span class=\"sw\" style=\"background:rgba(220,38,38,0.92)\"><\/span>tinggi (maks '+nf(max)+')<\/span>';\r\n if(!rows.length){$('heat-body').innerHTML='<tr><td class=\"empty\" colspan=\"'+(months.length+4)+'\">Tidak ada cabang yang cocok dengan filter.<\/td><\/tr>';return;}\r\n \/\/ baris TOTAL per bulan (paling atas)\r\n var tMon={},tSum=0,tPerub=0;\r\n rows.forEach(function(o){var ms=0;months.forEach(function(m){var v=metricVal(o.byMonth[m]);tMon[m]=(tMon[m]||0)+v;ms+=v;});tSum+=ms;tPerub+=o.perub;});\r\n var trTot='<tr class=\"totrow\"><td class=\"stick l\">TOTAL<\/td><td class=\"metacol\"><\/td>';\r\n months.forEach(function(m){trTot+='<td>'+nf(tMon[m]||0)+'<\/td>';});\r\n trTot+='<td class=\"totcol\">'+nf(tSum)+'<\/td><td class=\"totcol\">'+nf(tPerub)+'<\/td><\/tr>';\r\n var html=trTot;\r\n rows.forEach(function(o){\r\n   var monSum=0;\r\n   var tds='<td class=\"stick l branch\"><a href=\"javascript:void(0)\" onclick=\"CS.focusBranch(\\''+esc(o.name).replace(\/'\/g,\"\\\\'\")+'\\')\">'+esc(o.name)+'<\/a>'+(o.inAM?'':' <span class=\"pill warn\">baru<\/span>')+'<\/td>'+\r\n     '<td class=\"metacol\">'+esc(o.am||'\u2014')+'<\/td>';\r\n   months.forEach(function(m){var v=metricVal(o.byMonth[m]);monSum+=v;var hc=heatColor(v,max);\r\n     if(hc)tds+='<td class=\"heat\" style=\"background:'+hc.bg+';color:'+hc.fg+'\">'+nf(v)+'<\/td>';\r\n     else tds+='<td class=\"zero\">\u00b7<\/td>';});\r\n   tds+='<td class=\"totcol\">'+nf(monSum)+'<\/td>';\r\n   tds+='<td class=\"totcol\">'+(o.perub>0?nf(o.perub):'<span class=\"zero\">\u00b7<\/span>')+'<\/td>';\r\n   html+='<tr>'+tds+'<\/tr>';\r\n });\r\n $('heat-body').innerHTML=html;\r\n $('heat-sub').textContent=months.length?('Metrik: '+(state.metric==='total'?'Pengaduan + Gmaps':state.metric[0].toUpperCase()+state.metric.slice(1))+' \u2022 '+rows.length+' cabang \u2022 '+months.length+' bulan'):'Tidak ada bulan dalam rentang';\r\n}\r\n\r\nvar COLS=[\r\n {k:'name',t:'Cabang',l:true},{k:'area',t:'Area',l:true},{k:'am',t:'AM',l:true},\r\n {k:'peng',t:'Pengaduan'},{k:'missFLCount',t:'Miss FL'},{k:'gmaps',t:'Gmaps (\u26051\/\u26052)'},{k:'perub',t:'Perubahan'},{k:'total',t:'Total'},{k:'worst',t:'Bulan terberat',l:true}];\r\nfunction worstMonth(o){var best=null,bv=-1;Object.keys(o.byMonth).forEach(function(m){var v=o.byMonth[m].peng+o.byMonth[m].gmaps;if(v>bv){bv=v;best=m;}});return best?{m:best,v:bv}:null;}\r\n\/\/ small inline breakdown helpers\r\nfunction mapStr(map){var ks=Object.keys(map||{});if(!ks.length)return '';\r\n return ks.sort().map(function(k){return k+': '+map[k].n;}).join(' \u00b7 ');}\r\nfunction gmapsCell(o){if(!o.gmaps)return '<span class=\"zero\">\u00b7<\/span>';\r\n return nf(o.gmaps)+' <span class=\"rsplit\">(<b class=\"r1\">\u26051\u00b7'+nf(o.gmapsR1)+'<\/b> \/ <b class=\"r2\">\u26052\u00b7'+nf(o.gmapsR2)+'<\/b>)<\/span>';}\r\nfunction perubCell(o){if(!o.perub)return '<span class=\"zero\">\u00b7<\/span>';\r\n var al=mapStr(o.perubByAlasan),dt=mapStr(o.perubByData);\r\n var tip=(al?'Alasan \u2014 '+al:'')+(al&&dt?'  |  ':'')+(dt?'Data \u2014 '+dt:'');\r\n return '<span'+(tip?' title=\"'+esc(tip)+'\"':'')+'>'+nf(o.perub)+'<\/span>'+(dt?' <span class=\"rsplit\">('+esc(dt)+')<\/span>':'');}\r\nfunction missFLCell(o){return o.missFLCount>0?'<span class=\"pill warn\">'+nf(o.missFLCount)+'<\/span>':'<span class=\"zero\">\u00b7<\/span>';}\r\nfunction renderTable(rows){\r\n var head='';COLS.forEach(function(c){head+='<th class=\"'+(c.l?'l':'')+(state.sortKey===c.k?' sorted':'')+'\" onclick=\"CS.sort(\\''+c.k+'\\')\">'+esc(c.t)+(state.sortKey===c.k?(state.sortDir<0?' \u25bc':' \u25b2'):'')+'<\/th>';});\r\n $('thead-row').innerHTML=head;\r\n rows=rows.slice().sort(function(a,b){var k=state.sortKey,va,vb;\r\n   if(k==='worst'){va=(worstMonth(a)||{v:0}).v;vb=(worstMonth(b)||{v:0}).v;}\r\n   else if(k==='name'||k==='area'||k==='am'){va=(a[k]||'').toLowerCase();vb=(b[k]||'').toLowerCase();return va<vb?-state.sortDir:va>vb?state.sortDir:0;}\r\n   else{va=a[k];vb=b[k];}\r\n   return (va-vb)*state.sortDir;});\r\n if(!rows.length){$('tbody').innerHTML='<tr><td class=\"empty\" colspan=\"9\">Tidak ada cabang yang cocok dengan filter.<\/td><\/tr>';$('tabel-title').textContent='\ud83d\udccb Ringkasan per cabang';state._tableRows=rows;return;}\r\n var maxT=Math.max.apply(null,rows.map(function(o){return o.total;}))||1;\r\n \/\/ baris TOTAL (paling atas)\r\n var T={peng:0,miss:0,gmaps:0,r1:0,r2:0,perub:0,total:0};\r\n rows.forEach(function(o){T.peng+=o.peng;T.miss+=o.missFLCount;T.gmaps+=o.gmaps;T.r1+=o.gmapsR1;T.r2+=o.gmapsR2;T.perub+=o.perub;T.total+=o.total;});\r\n var html='<tr class=\"totrow\"><td class=\"l\">TOTAL<\/td><td class=\"l\"><\/td><td class=\"l\"><\/td>'+\r\n   '<td>'+nf(T.peng)+'<\/td><td>'+nf(T.miss)+'<\/td>'+\r\n   '<td>'+nf(T.gmaps)+' <span class=\"rsplit\">(<b class=\"r1\">\u26051\u00b7'+nf(T.r1)+'<\/b> \/ <b class=\"r2\">\u26052\u00b7'+nf(T.r2)+'<\/b>)<\/span><\/td>'+\r\n   '<td>'+nf(T.perub)+'<\/td><td>'+nf(T.total)+'<\/td><td class=\"l\"><\/td><\/tr>';\r\n rows.forEach(function(o){var w=worstMonth(o);\r\n   html+='<tr>'+\r\n    '<td class=\"l branch\">'+esc(o.name)+(o.inAM?'':' <span class=\"pill warn\">baru<\/span>')+'<\/td>'+\r\n    '<td class=\"l muted\">'+esc(o.area||'\u2014')+'<\/td>'+\r\n    '<td class=\"l muted\">'+esc(o.am||'\u2014')+'<\/td>'+\r\n    '<td>'+(o.peng||'<span class=\"zero\">\u00b7<\/span>')+'<\/td>'+\r\n    '<td>'+missFLCell(o)+'<\/td>'+\r\n    '<td>'+gmapsCell(o)+'<\/td>'+\r\n    '<td>'+perubCell(o)+'<\/td>'+\r\n    '<td class=\"bar-cell\"><div class=\"bar-fill\" style=\"width:'+(o.total\/maxT*100).toFixed(1)+'%\"><\/div><span class=\"bar-val\">'+nf(o.total)+'<\/span><\/td>'+\r\n    '<td class=\"l worst\">'+(w?esc(monthLabel(w.m))+' <span class=\"muted\">('+w.v+')<\/span>':'<span class=\"muted\">\u2014<\/span>')+'<\/td>'+\r\n   '<\/tr>';});\r\n $('tbody').innerHTML=html;\r\n $('tabel-title').textContent='\ud83d\udccb Ringkasan per cabang ('+rows.length+')';\r\n state._tableRows=rows;\r\n}\r\n\r\n\/* ---------- detail tabs: pivot dimensi \u00d7 bulan (sortable) ---------- *\/\r\nfunction isNoCat(k){return \/^\\(\/.test(k);} \/\/ \"(Tanpa \u2026)\" \u2192 default taruh paling bawah\r\n\/\/ merge semua cabang \u2192 ringkasan keseluruhan\r\nfunction mergeCat(rows,mapField){var all={};(rows||[]).forEach(function(o){var m=o[mapField]||{};\r\n Object.keys(m).forEach(function(k){var e=all[k]||(all[k]={n:0,months:{}});e.n+=m[k].n;\r\n  Object.keys(m[k].months).forEach(function(mm){e.months[mm]=(e.months[mm]||0)+m[k].months[mm];});});});return all;}\r\nfunction gmapsMeta(o){return '<span class=\"rsplit\"><b class=\"r1\">\u26051\u00b7'+nf(o.gmapsR1)+'<\/b> <b class=\"r2\">\u26052\u00b7'+nf(o.gmapsR2)+'<\/b><\/span>';}\r\n\/\/ kolom bulan = gabungan semua bulan yang muncul di data (urut kronologis)\r\nfunction monthsInMaps(maps){var s={};maps.forEach(function(map){map=map||{};Object.keys(map).forEach(function(k){Object.keys(map[k].months).forEach(function(mm){s[mm]=1;});});});return Object.keys(s).sort();}\r\n\/\/ ---- sort state & builder per pivot table ----\r\nfunction pivState(id){return state.piv[id]||(state.piv[id]={k:'total',dir:-1});}\r\nfunction pivSort(id,col){var s=pivState(id);if(s.k===col)s.dir*=-1;else{s.k=col;s.dir=(col==='cat')?1:-1;}render();}\r\nfunction pivHeader(firstLabel,mcols,sortId){var s=pivState(sortId);\r\n function th(key,label,cls){var on=s.k===key;return '<th class=\"'+(cls||'')+(on?' sorted':'')+'\" onclick=\"CS.pivSort(\\''+sortId+'\\',\\''+key+'\\')\">'+label+(on?(s.dir<0?' \u25bc':' \u25b2'):'')+'<\/th>';}\r\n var h=th('cat',esc(firstLabel),'stick l')+th('total','Total','totcol');\r\n mcols.forEach(function(m){h+=th(m,esc(monthLabel(m)),'');});return '<tr>'+h+'<\/tr>';}\r\n\/\/ item = {label,total,months:{m:val},titles?:{m:str},isNo,cls}\r\nfunction catItems(map){return Object.keys(map||{}).map(function(k){return{label:k,total:map[k].n,months:map[k].months,isNo:isNoCat(k),cls:isNoCat(k)?'nocat':''};});}\r\nfunction pivCmp(a,b,k,dir){\r\n if(k==='total'&&a.isNo!==b.isNo)return a.isNo?1:-1; \/\/ no-answer selalu di bawah (mode default)\r\n if(k==='cat'){var la=a.label.toLowerCase(),lb=b.label.toLowerCase();return la<lb?-dir:la>lb?dir:0;}\r\n var va=(k==='total')?a.total:(a.months[k]||0),vb=(k==='total')?b.total:(b.months[k]||0);\r\n return (va-vb)*dir||(a.label<b.label?-1:1);}\r\nfunction pivCellRow(it,mcols){var tds='<td class=\"stick l'+(it.cls?(' '+it.cls):'')+'\" title=\"'+esc(it.label)+'\">'+esc(it.label)+'<\/td><td class=\"totcol\">'+nf(it.total)+'<\/td>';\r\n mcols.forEach(function(m){var v=it.months[m]||0;var t=(it.titles&&it.titles[m])?(' title=\"'+esc(it.titles[m])+'\"'):'';tds+=v?('<td'+t+'>'+nf(v)+'<\/td>'):'<td class=\"zero\">\u00b7<\/td>';});return tds;}\r\n\/\/ baris TOTAL: jumlah semua item per bulan + total\r\nfunction pivTotalRow(items,mcols,label){var tot=0,ms={};\r\n items.forEach(function(it){tot+=it.total;mcols.forEach(function(m){ms[m]=(ms[m]||0)+(it.months[m]||0);});});\r\n var tds='<td class=\"stick l\">'+esc(label||'TOTAL')+'<\/td><td class=\"totcol\">'+nf(tot)+'<\/td>';\r\n mcols.forEach(function(m){tds+='<td>'+nf(ms[m]||0)+'<\/td>';});\r\n return '<tr class=\"totrow\">'+tds+'<\/tr>';}\r\nfunction flatBody(items,mcols,sortId){var cspan=mcols.length+2;\r\n if(!items.length)return '<tr><td class=\"stick l\" colspan=\"'+cspan+'\"><span class=\"dcard-none\">\u2014 tanpa rincian \u2014<\/span><\/td><\/tr>';\r\n var s=pivState(sortId);var sorted=items.slice().sort(function(a,b){return pivCmp(a,b,s.k,s.dir);});\r\n return pivTotalRow(items,mcols)+sorted.map(function(it){return '<tr>'+pivCellRow(it,mcols)+'<\/tr>';}).join('');}\r\nfunction branchMonthTot(map,m){var s=0;Object.keys(map||{}).forEach(function(k){s+=map[k].months[m]||0;});return s;}\r\nfunction renderDetail(cfg){ \/\/ {cid,ovId,rows,srcField,mapField,metaFn,firstLabel,sortMain,sortOv}\r\n var el=$(cfg.cid);if(!el)return;\r\n var list=(cfg.rows||[]).filter(function(o){return o[cfg.srcField]>0;});\r\n var mcols=monthsInMaps(list.map(function(o){return o[cfg.mapField];}));\r\n var fl=cfg.firstLabel||'Kategori';\r\n var ov=$(cfg.ovId);\r\n if(ov) ov.innerHTML = list.length\r\n   ? '<div class=\"pivot-scroll\"><table class=\"pivot\"><thead>'+pivHeader(fl,mcols,cfg.sortOv)+'<\/thead><tbody>'+flatBody(catItems(mergeCat(list,cfg.mapField)),mcols,cfg.sortOv)+'<\/tbody><\/table><\/div>'\r\n   : '<div class=\"dcard-none\">\u2014<\/div>';\r\n if(!list.length){el.innerHTML='<div class=\"empty\">Tidak ada cabang dengan data pada filter ini.<\/div>';return;}\r\n \/\/ urut grup cabang sesuai kolom yang diklik\r\n var s=pivState(cfg.sortMain);\r\n var branches=list.slice().sort(function(a,b){\r\n   if(s.k==='cat'){var la=a.name.toLowerCase(),lb=b.name.toLowerCase();return la<lb?-s.dir:la>lb?s.dir:0;}\r\n   var va=(s.k==='total')?a[cfg.srcField]:branchMonthTot(a[cfg.mapField],s.k);\r\n   var vb=(s.k==='total')?b[cfg.srcField]:branchMonthTot(b[cfg.mapField],s.k);\r\n   return (va-vb)*s.dir||(a.name<b.name?-1:1);});\r\n var cspan=mcols.length+2;\r\n var body=pivTotalRow(catItems(mergeCat(list,cfg.mapField)),mcols); \/\/ grand total per bulan di paling atas\r\n branches.forEach(function(o){var meta=cfg.metaFn?cfg.metaFn(o):'';\r\n   body+='<tr class=\"grp\"><td colspan=\"'+cspan+'\"><span class=\"gnm\">'+esc(o.name)+(o.inAM?'':' <span class=\"pill warn\">baru<\/span>')+'<\/span> <span class=\"gmeta\">'+esc(o.am||'\u2014')+(o.area?' \u00b7 '+esc(o.area):'')+' \u00b7 total '+nf(o[cfg.srcField])+(meta?' \u00b7 '+meta:'')+'<\/span><\/td><\/tr>';\r\n   var items=catItems(o[cfg.mapField]).sort(function(a,b){return pivCmp(a,b,s.k,s.dir);});\r\n   if(!items.length)body+='<tr><td class=\"stick l\" colspan=\"'+cspan+'\"><span class=\"dcard-none\">\u2014 tanpa rincian \u2014<\/span><\/td><\/tr>';\r\n   else items.forEach(function(it){body+='<tr>'+pivCellRow(it,mcols)+'<\/tr>';});\r\n });\r\n el.innerHTML='<table class=\"pivot\"><thead>'+pivHeader(fl,mcols,cfg.sortMain)+'<\/thead><tbody>'+body+'<\/tbody><\/table>';\r\n}\r\n\r\nfunction renderAM(rows){\r\n var G={};rows.forEach(function(o){var am=o.am||'(Tanpa AM)';var g=G[am]||(G[am]={am:am,areas:{},nb:0,issue:0,peng:0,gmaps:0,perub:0,months:{}});\r\n   if(o.area)g.areas[o.area]=1;g.nb++;if(o.total>0)g.issue++;g.peng+=o.peng;g.gmaps+=o.gmaps;g.perub+=o.perub;\r\n   Object.keys(o.byMonth).forEach(function(m){var mm=g.months[m]||(g.months[m]={peng:0,gmaps:0});mm.peng+=o.byMonth[m].peng;mm.gmaps+=o.byMonth[m].gmaps;});});\r\n var list=Object.keys(G).map(function(k){var g=G[k];g.total=g.peng+g.gmaps+g.perub;g.areaStr=Object.keys(g.areas).sort().join(', ');return g;});\r\n var cols=[{k:'am',t:'Area Manager',l:true},{k:'areaStr',t:'Area',l:true},{k:'nb',t:'#Cabang'},{k:'issue',t:'#Bermasalah'},{k:'peng',t:'Pengaduan'},{k:'gmaps',t:'Gmaps'},{k:'perub',t:'Perubahan'},{k:'total',t:'Total'}];\r\n var head='';cols.forEach(function(c){head+='<th class=\"'+(c.l?'l':'')+(state.amSortKey===c.k?' sorted':'')+'\" onclick=\"CS.amSort(\\''+c.k+'\\')\">'+esc(c.t)+(state.amSortKey===c.k?(state.amSortDir<0?' \u25bc':' \u25b2'):'')+'<\/th>';});\r\n $('amhead-row').innerHTML=head;\r\n list.sort(function(a,b){var k=state.amSortKey,va,vb;if(k==='am'||k==='areaStr'){va=(a[k]||'').toLowerCase();vb=(b[k]||'').toLowerCase();return va<vb?-state.amSortDir:va>vb?state.amSortDir:0;}va=a[k];vb=b[k];return (va-vb)*state.amSortDir;});\r\n if(!list.length){$('tbody-am').innerHTML='<tr><td class=\"empty\" colspan=\"8\">Tidak ada data.<\/td><\/tr>';var e=$('am-months');if(e)e.innerHTML='<div class=\"dcard-none\">\u2014<\/div>';return;}\r\n var maxT=Math.max.apply(null,list.map(function(g){return g.total;}))||1;\r\n \/\/ baris TOTAL (paling atas)\r\n var T={nb:0,issue:0,peng:0,gmaps:0,perub:0,total:0};\r\n list.forEach(function(g){T.nb+=g.nb;T.issue+=g.issue;T.peng+=g.peng;T.gmaps+=g.gmaps;T.perub+=g.perub;T.total+=g.total;});\r\n var html='<tr class=\"totrow\"><td class=\"l\">TOTAL<\/td><td class=\"l\"><\/td><td>'+nf(T.nb)+'<\/td><td>'+nf(T.issue)+'<\/td><td>'+nf(T.peng)+'<\/td><td>'+nf(T.gmaps)+'<\/td><td>'+nf(T.perub)+'<\/td><td>'+nf(T.total)+'<\/td><\/tr>';\r\n list.forEach(function(g){html+='<tr>'+\r\n   '<td class=\"l branch\">'+esc(g.am)+'<\/td>'+\r\n   '<td class=\"l muted\">'+esc(g.areaStr||'\u2014')+'<\/td>'+\r\n   '<td>'+nf(g.nb)+'<\/td>'+\r\n   '<td>'+(g.issue?'<span class=\"delta down\">'+nf(g.issue)+'<\/span>':'<span class=\"zero\">\u00b7<\/span>')+'<\/td>'+\r\n   '<td>'+(g.peng||'<span class=\"zero\">\u00b7<\/span>')+'<\/td>'+\r\n   '<td>'+(g.gmaps||'<span class=\"zero\">\u00b7<\/span>')+'<\/td>'+\r\n   '<td>'+(g.perub||'<span class=\"zero\">\u00b7<\/span>')+'<\/td>'+\r\n   '<td class=\"bar-cell\"><div class=\"bar-fill\" style=\"width:'+(g.total\/maxT*100).toFixed(1)+'%\"><\/div><span class=\"bar-val\">'+nf(g.total)+'<\/span><\/td>'+\r\n  '<\/tr>';});\r\n $('tbody-am').innerHTML=html;\r\n renderAMMonths(list);\r\n}\r\n\/\/ section \"kapan isu tiap AM terjadi\" \u2014 pivot AM \u00d7 bulan (peng+gmaps), sortable\r\nfunction renderAMMonths(list){\r\n var el=$('am-months');if(!el)return;\r\n var arr=list.filter(function(g){return (g.peng+g.gmaps)>0;});\r\n if(!arr.length){el.innerHTML='<div class=\"dcard-none\">Belum ada isu berbasis bulan (pengaduan\/gmaps) pada filter ini.<\/div>';return;}\r\n var sset={};arr.forEach(function(g){Object.keys(g.months).forEach(function(m){var mm=g.months[m];if(mm.peng+mm.gmaps>0)sset[m]=1;});});\r\n var mcols=Object.keys(sset).sort();\r\n var items=arr.map(function(g){var months={},titles={};Object.keys(g.months).forEach(function(m){var mm=g.months[m],v=mm.peng+mm.gmaps;if(v>0){months[m]=v;titles[m]='Pengaduan '+nf(mm.peng)+' \u00b7 Gmaps '+nf(mm.gmaps);}});\r\n   return{label:g.am,total:g.peng+g.gmaps,months:months,titles:titles,isNo:false,cls:''};});\r\n el.innerHTML='<table class=\"pivot\"><thead>'+pivHeader('Area Manager',mcols,'am-mon')+'<\/thead><tbody>'+flatBody(items,mcols,'am-mon')+'<\/tbody><\/table>';\r\n}\r\n\r\n\/* ---------- interactions ---------- *\/\r\nfunction setTab(t){state.tab=t;savePrefs();\r\n ['heatmap','tabel','pengaduan','gmaps','perubahan','am'].forEach(function(x){$('pane-'+x).style.display=(x===t)?'block':'none';});\r\n var btns=document.querySelectorAll('#tabs button');for(var i=0;i<btns.length;i++)btns[i].className=(btns[i].getAttribute('data-tab')===t)?'active':'';\r\n render();}\r\nfunction setMetric(m){state.metric=m;var b=document.querySelectorAll('#seg-metric button');for(var i=0;i<b.length;i++)b[i].className=(b[i].getAttribute('data-m')===m)?'active':'';render();}\r\nfunction sort(k){if(state.sortKey===k)state.sortDir*=-1;else{state.sortKey=k;state.sortDir=(k==='name'||k==='area'||k==='am')?1:-1;}render();}\r\nfunction amSort(k){if(state.amSortKey===k)state.amSortDir*=-1;else{state.amSortKey=k;state.amSortDir=(k==='am'||k==='areaStr')?1:-1;}render();}\r\nfunction heatSort(k){if(state.heatSortKey===k)state.heatSortDir*=-1;else{state.heatSortKey=k;state.heatSortDir=(k==='name'||k==='am')?1:-1;}render();}\r\nfunction setPerubView(v){state.perubView=v;var b=document.querySelectorAll('#seg-perub button');for(var i=0;i<b.length;i++)b[i].className=(b[i].getAttribute('data-pv')===v)?'active':'';render();}\r\nfunction focusBranch(name){$('f-search').value=name;setTab('tabel');}\r\nfunction exportCSV(){var rows=state._tableRows||[];\r\n var head=['Cabang','Area','AM','Pengaduan','Miss FL','Gmaps','Gmaps \u26051','Gmaps \u26052','Perubahan data','Alasan koreksi','Jenis data','Total','Bulan terberat'];\r\n var lines=[head.join(',')];\r\n rows.forEach(function(o){var w=worstMonth(o);\r\n  function c(v){v=String(v==null?'':v);return \/[\",\\n]\/.test(v)?('\"'+v.replace(\/\"\/g,'\"\"')+'\"'):v;}\r\n  lines.push([c(o.name),c(o.area),c(o.am),o.peng,o.missFLCount,o.gmaps,o.gmapsR1,o.gmapsR2,o.perub,c(mapStr(o.perubByAlasan)),c(mapStr(o.perubByData)),o.total,c(w?monthLabel(w.m):'')].join(','));});\r\n var blob=new Blob(['\ufeff'+lines.join('\\r\\n')],{type:'text\/csv;charset=utf-8;'});\r\n var a=document.createElement('a');a.href=URL.createObjectURL(blob);a.download='ringkasan-cs-cabang.csv';document.body.appendChild(a);a.click();document.body.removeChild(a);}\r\n\r\n\/* ---------- prefs ---------- *\/\r\nfunction savePrefs(){try{localStorage.setItem(LS,JSON.stringify({tab:state.tab,metric:state.metric}));}catch(e){}}\r\nfunction loadPrefs(){try{var p=JSON.parse(localStorage.getItem(LS)||'{}');\r\n  if(p.tab)state.tab=p.tab;if(p.metric)state.metric=p.metric;}catch(e){}}\r\n\r\n\/* ---------- expose + init ---------- *\/\r\nwindow.CS={load:load,setTab:setTab,setMetric:setMetric,sort:sort,amSort:amSort,heatSort:heatSort,pivSort:pivSort,setPerubView:setPerubView,render:render,onAreaChange:onAreaChange,focusBranch:focusBranch,exportCSV:exportCSV};\r\nloadPrefs();\r\n\/\/ reflect restored tab\r\nsetTimeout(function(){var btns=document.querySelectorAll('#tabs button');for(var i=0;i<btns.length;i++)btns[i].className=(btns[i].getAttribute('data-tab')===state.tab)?'active':'';\r\n ['heatmap','tabel','pengaduan','gmaps','perubahan','am'].forEach(function(x){var p=$('pane-'+x);if(p)p.style.display=(x===state.tab)?'block':'none';});\r\n var b=document.querySelectorAll('#seg-metric button');for(var j=0;j<b.length;j++)b[j].className=(b[j].getAttribute('data-m')===state.metric)?'active':'';},0);\r\nload();\r\n})();\r\n<\/script>\r\n<\/body>\r\n<\/html>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"unboxed","site-sidebar-style":"unboxed","ast-global-header-display":"disabled","ast-banner-title-visibility":"disabled","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":"","footer-sml-layout":"disabled","ast-disable-related-posts":"disabled","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":"default","ast-page-background-enabled":"default","ast-page-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":"","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-4)","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-4)","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-4)","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":""},"class_list":["post-2523","page","type-page","status-publish","hentry"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"Janu Prasetya","author_link":"https:\/\/pandaigadai.com\/blog\/author\/janu\/"},"uagb_comment_info":0,"uagb_excerpt":null,"_links":{"self":[{"href":"https:\/\/pandaigadai.com\/blog\/wp-json\/wp\/v2\/pages\/2523","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pandaigadai.com\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/pandaigadai.com\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/pandaigadai.com\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/pandaigadai.com\/blog\/wp-json\/wp\/v2\/comments?post=2523"}],"version-history":[{"count":3,"href":"https:\/\/pandaigadai.com\/blog\/wp-json\/wp\/v2\/pages\/2523\/revisions"}],"predecessor-version":[{"id":2526,"href":"https:\/\/pandaigadai.com\/blog\/wp-json\/wp\/v2\/pages\/2523\/revisions\/2526"}],"wp:attachment":[{"href":"https:\/\/pandaigadai.com\/blog\/wp-json\/wp\/v2\/media?parent=2523"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}