*{box-sizing:border-box;margin:0;padding:0}
body{font-family:system-ui,sans-serif;background:#f5f4f0;color:#1a1a18;height:100vh;display:flex;flex-direction:column;overflow:hidden}

/* ── Topbar ── */
.topbar{display:flex;align-items:center;justify-content:space-between;padding:11px 20px;border-bottom:1px solid #e0dfd8;background:#fff;flex-shrink:0}
.topbar-left{display:flex;align-items:center;gap:12px}
.logo{width:34px;height:34px;border-radius:8px;background:#1a5276;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.title-main{font-size:15px;font-weight:600;color:#1a1a18}
.title-sub{font-size:11px;color:#888}
.topbar-right{display:flex;align-items:center;gap:8px}
.badge{font-size:11px;padding:3px 10px;border-radius:20px;font-weight:500}
.badge-blue{background:#E6F1FB;color:#185FA5}
.badge-green{background:#EAF3DE;color:#3B6D11}
.date-label{font-size:12px;color:#888}

/* ── Layout ── */
.main{display:flex;flex:1;overflow:hidden}

/* ── Sidebar ── */
.sidebar{width:192px;flex-shrink:0;border-right:1px solid #e0dfd8;padding:12px 0;background:#faf9f6;overflow-y:auto}
.nav-section{font-size:10px;font-weight:600;color:#aaa;letter-spacing:.08em;padding:0 16px;margin:12px 0 5px;text-transform:uppercase}
.nav-item{display:flex;align-items:center;gap:9px;padding:7px 16px;font-size:12px;color:#666;cursor:pointer;border-left:2px solid transparent;transition:all .1s}
.nav-item:hover{background:#f0efe8}
.nav-item.active{color:#0F6E56;background:#E1F5EE;border-left-color:#1D9E75;font-weight:500}
.nav-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0;display:inline-block}
.nav-dot.green{background:#1D9E75}
.nav-dot.amber{background:#BA7517}
.nav-dot.blue{background:#185FA5}
.nav-dot.coral{background:#D85A30}
.nav-dot.purple{background:#534AB7}
.nav-dot.gray{background:#B4B2A9}

/* ── Content ── */
.content{flex:1;overflow-y:auto;padding:18px;background:#f5f4f0}
.section-title{font-size:11px;font-weight:600;color:#888;margin-bottom:9px;text-transform:uppercase;letter-spacing:.06em}

/* ── KPI ── */
.kpi-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:9px;margin-bottom:16px}
.kpi-card{background:#fff;border:1px solid #e8e7e0;border-radius:12px;padding:13px 15px}
.kpi-label{font-size:11px;color:#888;margin-bottom:5px}
.kpi-value{font-size:22px;font-weight:600;color:#1a1a18;line-height:1.1}
.kpi-sub{font-size:10px;margin-top:4px;color:#888}
.kpi-sub.up{color:#3B6D11}
.kpi-sub.down{color:#A32D2D}
.kpi-bar{height:3px;border-radius:2px;margin-top:8px;background:#e8e7e0}
.kpi-bar-fill{height:100%;border-radius:2px;transition:width .6s ease}

/* ── Cards ── */
.row2{display:grid;grid-template-columns:1.6fr 1fr;gap:11px;margin-bottom:14px}
.row3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:11px}
.card{background:#fff;border:1px solid #e8e7e0;border-radius:12px;padding:15px}
.card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.card-title{font-size:13px;font-weight:500;color:#1a1a18}
.filter-btn{font-size:11px;color:#666;background:#f5f4f0;border:1px solid #e0dfd8;padding:3px 9px;border-radius:20px;cursor:pointer}

/* ── Progress bars ── */
.prog-list{display:flex;flex-direction:column;gap:9px}
.prog-item{display:flex;flex-direction:column;gap:3px}
.prog-top{display:flex;justify-content:space-between}
.prog-name{font-size:12px;color:#1a1a18}
.prog-pct{font-size:12px;font-weight:500}
.prog-track{height:5px;border-radius:3px;background:#f0efe8}
.prog-fill{height:100%;border-radius:3px;transition:width .6s ease}
.prog-loading{font-size:12px;color:#888;padding:8px 0}

/* ── Legend donut ── */
.legend{display:flex;flex-direction:column;gap:7px}
.leg-item{display:flex;align-items:center;gap:8px;font-size:12px;color:#666}
.leg-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}
.leg-val{margin-left:auto;font-weight:500;font-size:12px;color:#1a1a18}

/* ── Tables ── */
.mini-tbl{width:100%;border-collapse:collapse;font-size:11px}
.mini-tbl th{text-align:left;font-size:10px;font-weight:600;color:#888;padding:3px 0 6px;border-bottom:1px solid #e8e7e0;text-transform:uppercase}
.mini-tbl td{padding:6px 0;border-bottom:1px solid #f0efe8;color:#1a1a18;vertical-align:middle}
.mini-tbl tr:last-child td{border-bottom:none}
.status-pill{font-size:10px;padding:2px 7px;border-radius:20px;font-weight:500;white-space:nowrap}
.sp-green{background:#EAF3DE;color:#3B6D11}
.sp-amber{background:#FAEEDA;color:#854F0B}
.sp-red{background:#FCEBEB;color:#A32D2D}
.sp-blue{background:#E6F1FB;color:#185FA5}
.mini-bar-wrap{display:flex;align-items:center;gap:5px}
.mini-bar-bg{flex:1;height:4px;border-radius:2px;background:#f0efe8}
.mini-bar-fill{height:100%;border-radius:2px}

/* ── Avatar OPD ── */
.avatar-row{display:flex;flex-direction:column;gap:7px}
.avatar-item{display:flex;align-items:center;gap:8px}
.avatar{width:26px;height:26px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:10px;font-weight:600;flex-shrink:0}
.av-teal{background:#9FE1CB;color:#085041}
.av-blue{background:#B5D4F4;color:#0C447C}
.av-amber{background:#FAC775;color:#633806}
.av-coral{background:#F5C4B3;color:#712B13}
.av-green{background:#C0DD97;color:#27500A}
.av-name{font-size:11px;font-weight:500;color:#1a1a18}
.av-role{font-size:10px;color:#888}
.av-status{margin-left:auto}

/* ── Error / Empty ── */
.api-error{font-size:11px;color:#A32D2D;background:#FCEBEB;padding:8px 10px;border-radius:8px}

/* ── Page routing ── */
.page-content{display:flex;flex:1;flex-direction:column;overflow-y:auto;padding:18px;background:#f5f4f0}
.page-content.hidden{display:none!important}

/* ── Peta layout ── */
#page-peta{padding:0;overflow:hidden}
.peta-layout{display:flex;flex:1;overflow:hidden}
.peta-panel{width:220px;flex-shrink:0;overflow-y:auto;padding:16px 12px;border-right:1px solid #e0dfd8;background:#faf9f6}
.peta-map-wrap{flex:1;position:relative;min-height:0}
#map{position:absolute;inset:0}

/* ── Kecamatan list ── */
.kec-list{display:flex;flex-direction:column;gap:2px}
.kec-item{display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:8px;cursor:pointer;transition:background .1s}
.kec-item:hover{background:#f0efe8}
.kec-item-active{background:#E1F5EE}
.kec-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}
.kec-info{min-width:0}
.kec-name{font-size:12px;font-weight:500;color:#1a1a18;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kec-sub{font-size:10px;color:#888;margin-top:1px}

/* ── Map info panel ── */
.map-info{position:absolute;top:12px;right:12px;z-index:800;background:#fff;border:1px solid #e8e7e0;border-radius:12px;padding:12px 14px;min-width:180px;box-shadow:0 2px 8px rgba(0,0,0,.1)}
.map-info.hidden{display:none}
.map-info-name{font-size:13px;font-weight:600;color:#1a1a18;margin-bottom:8px}
.info-row{display:flex;justify-content:space-between;align-items:center;font-size:11px;color:#888;margin-bottom:4px}
.info-row strong{color:#1a1a18;font-weight:600}
.map-error{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:12px;color:#A32D2D}
