/* =====================================================================
   RESPONSIF — dimuat TERAKHIR di semua halaman (menimpa aturan lama).
   Tujuan: rapi di PC & HP/APK, tidak ada ruang kosong, tidak ada elemen bertumpuk,
   tidak ada halaman yang melebar melewati layar.
   ===================================================================== */

/* ---------- Dasar (semua ukuran) ---------- */
html{-webkit-text-size-adjust:100%;text-size-adjust:100%;-webkit-tap-highlight-color:transparent}
body{overflow-x:hidden}
img,svg,video{max-width:100%}
.main,.main>*,.card,.panel{min-width:0}
.rt-wrap,.gridwrap,.mx-wrap{-webkit-overflow-scrolling:touch}
.hamburger,.nav-overlay{display:none}

/* ---------- PC: kartu mengisi tinggi baris (tanpa ruang putih kosong) ---------- */
@media(min-width:901px){
  .row2>.card,.grid2>.card,.grid3>.card,.grid21>.card,.sar-mid>.card,.sar-bot>.card,.rk-mid>.card,.rk-bot>.card,.wkp-grid>.card,.pd-grid>.card{display:flex;flex-direction:column}
  .row2>.card>.chart-box,.grid2>.card>.chart-box,.grid3>.card>.chart-box,.grid21>.card>.chart-box,.sar-mid>.card>.chart-box,.rk-mid>.card>.chart-box{flex:1 1 auto;min-height:200px;height:auto}
  .chart-box>svg{position:absolute;inset:0;width:100%;height:100%}
  .row2>.card>.donut-wrap,.grid2>.card>.donut-wrap,.grid3>.card>.donut-wrap{flex:1 1 auto;align-items:center}
  .row2>.card>.donut-wrap .donut{margin-top:0}
  .donut-list{max-height:none}
  .live li.live-i{display:flex;grid-template-columns:none}
  .live-i>div:nth-child(2){flex:1;min-width:0}
  .grid2>.card>.hbox,.grid2>.card>.an-list,.grid2>.card>.live{flex:1 1 auto}
  .hbox{max-height:340px}
}
/* PC sempit / tablet landscape */
@media(min-width:901px) and (max-width:1250px){
  .app{grid-template-columns:190px 1fr}
  .brand{width:128px}
  .side-art{width:190px}
  .db-status{display:none}
}

/* ---------- Tablet & HP (<= 900px) ---------- */
@media(max-width:900px){
  html,body{height:auto;min-height:100%}
  body{font-size:14px;overflow-x:hidden;-webkit-overflow-scrolling:touch}

  /* kerangka: satu kolom, tinggi mengikuti isi */
  .app{display:block;height:auto;min-height:100vh;min-height:100dvh}

  /* header tetap di atas, satu baris */
  .topbar{position:sticky;top:0;z-index:40;display:flex;flex-wrap:nowrap;align-items:center;gap:8px;height:auto;min-height:58px;
    padding:max(8px,env(safe-area-inset-top)) 12px 8px 8px;border-bottom:1px solid var(--line);box-shadow:0 2px 10px rgba(8,52,110,.06)}
  .hamburger{display:inline-flex;align-items:center;justify-content:center;flex:none;width:40px;height:40px;border:0;border-radius:10px;background:var(--blue-100);color:var(--blue-600);padding:0}
  .hamburger svg{width:22px;height:22px;stroke:currentColor;stroke-width:2.2;fill:none;stroke-linecap:round}
  .brand{width:auto;flex:none;height:auto;padding:0}
  .brand .logo-slot{width:52px;height:28px}
  .title-block{flex:1 1 auto;min-width:0;padding-left:10px;margin-left:0;border-left:1px solid var(--line)}
  .title-block h1{font-size:15px;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .title-block p{font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:1px}
  .top-right{flex:none;margin-left:0;gap:2px}
  .db-status,.auto-refresh,.user-meta,.user-btn>svg.i{display:none!important}
  .icon-btn{padding:8px}
  .user-btn{padding:2px}
  .avatar{width:34px;height:34px}
  .menu{right:0;min-width:150px;position:fixed;top:60px;right:12px}

  /* menu samping -> laci geser */
  .sidebar{position:fixed;z-index:60;top:0;left:0;bottom:0;width:min(290px,84vw);height:100vh;height:100dvh;
    flex-direction:column;overflow-y:auto;overflow-x:hidden;padding:max(12px,env(safe-area-inset-top)) 10px 0;
    transform:translateX(-102%);visibility:hidden;transition:transform .26s ease,visibility 0s linear .26s;box-shadow:none}
  body.nav-open .sidebar{transform:none;visibility:visible;transition:transform .26s ease;box-shadow:8px 0 30px rgba(2,20,50,.45)}
  .nav{display:block}
  .nav a{white-space:normal;margin:0 0 4px;padding:12px;font-size:14.5px}
  .side-art{display:block;position:relative;left:auto;bottom:auto;width:calc(100% + 20px);margin:10px -10px 0;opacity:.9}
  .side-foot{display:block;margin-top:auto;padding:14px 6px calc(14px + env(safe-area-inset-bottom))}
  .nav-overlay{position:fixed;inset:0;z-index:50;background:rgba(2,16,40,.55);opacity:0;pointer-events:none;transition:opacity .26s ease;display:block}
  body.nav-open .nav-overlay{opacity:1;pointer-events:auto}
  body.nav-open{overflow:hidden}

  /* konten */
  .main{overflow:visible;padding:12px 12px calc(20px + env(safe-area-inset-bottom));scroll-behavior:auto}
  .page-head{display:grid;grid-template-columns:auto 1fr;align-items:center;column-gap:10px;row-gap:8px;margin-bottom:6px}
  .ph-icon svg.i{width:34px;height:34px}
  .page-head h2{font-size:20px;line-height:1.2}
  .page-head p{font-size:12px;line-height:1.35}
  .page-head .tag{grid-column:1/-1;margin:0;width:100%;text-align:center;padding:8px 12px;font-size:12.5px;border-radius:9px}
  .src-line{margin:0 0 10px;font-size:11px;line-height:1.5;overflow-wrap:anywhere}

  /* KPI: 2 kolom, kartu tersusun vertikal; kartu ganjil terakhir melebar penuh */
  .kpis,.kpis.k3,.kpis.k5,.kpis.k6{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-bottom:10px}
  .kpis>:last-child:nth-child(odd){grid-column:1/-1}
  .kpi,.k6 .kpi{flex-direction:column;gap:8px;padding:12px}
  .k-ico,.k6 .k-ico{width:42px;height:42px;margin:0}
  .k-ico svg.i,.k6 .k-ico svg.i{width:22px;height:22px}
  .kpi .k-label,.k6 .k-label{margin-top:0;font-size:12px;white-space:normal;overflow:visible;text-overflow:clip;line-height:1.3}
  .kpi .k-value,.kpis .k-value,.k6 .k-value{font-size:24px}
  .k-delta{flex-wrap:wrap}
  .kpi .tag-sm{position:static;align-self:flex-start;margin-bottom:-2px}
  .spark{width:70px}

  /* semua grid -> satu kolom */
  .row2,.row3,.grid2,.grid3,.grid21,.wil-top,.wil-bot,.sar-mid,.sar-bot,.rk-mid,.rk-bot,.wkp-grid,.pd-grid,.analysis-grid,.dc-grid{grid-template-columns:minmax(0,1fr)!important;gap:10px;margin-bottom:10px}
  .wkp-grid>*,.pd-grid>*{grid-column:1!important;grid-row:auto!important}
  .sarana{grid-template-columns:1fr 1fr}
  .col{gap:10px}
  .panel,.wil-top .panel{padding:12px}
  .p-head{flex-wrap:wrap;gap:8px 10px}
  .p-head h3,.rk-mid .p-head h3,.wil-bot .p-head h3,.wkp-grid .p-head h3{font-size:14px;white-space:normal;overflow:visible;line-height:1.3;flex:1;min-width:0}
  .p-head .tag-sm{margin-left:auto}
  .legend,.rk-mid .legend{margin-left:0;flex-basis:100%;gap:6px 14px;font-size:11px;flex-wrap:wrap}
  .lg-row{justify-content:flex-start;margin:0 0 6px}

  /* grafik */
  .chart-box,.rk-mid .chart-box,.sar-mid .chart-box,.wkp-grid .chart-box,.pd-cb{height:210px}
  .chart-box.tall{height:240px}
  .donut-wrap,.rk-donut,.wil-bot .donut-wrap,.sar-mid .donut-wrap{flex-direction:column;align-items:center;height:auto;min-height:0;gap:12px}
  .donut,.rk-donut .donut,.wil-bot .donut,.sar-mid .donut{width:180px;height:180px;margin:0}
  .donut-list,.rk-list{width:100%;flex:none;max-height:none}
  .donut-list li{padding:9px 0;flex-wrap:wrap}
  .donut-list li span{white-space:normal}
  .rk-list li{grid-template-columns:12px 1fr auto auto}

  /* batang & daftar */
  .hb{grid-template-columns:minmax(70px,120px) 1fr auto;gap:8px}
  .hbox{max-height:none}
  .brow{grid-template-columns:100px 1fr}
  .bax{margin-left:108px}
  .live li{grid-template-columns:42px 1fr auto}
  .live li.live-i{display:flex;gap:10px}
  .live-i>div:nth-child(2){flex:1;min-width:0}
  .live .d small{white-space:normal}
  .rc{padding:10px}
  .rc-ico{width:38px;height:38px}
  .a-card{min-height:0}
  .note{flex-wrap:wrap}

  /* filter */
  .filter,.fbar,.f-compact{display:grid;grid-template-columns:1fr 1fr;gap:10px;padding:12px;align-items:end}
  .filter>.f-ico,.f-pin>.f-ico{display:none}
  .filter>*{min-width:0}
  .range,.range-btn,.f-compact .range-btn,#selTgl{width:100%;min-width:0}
  .range,.f-pin,.fbar .fnote,.f-actions,.fbar>.btn{grid-column:1/-1}
  .f-pin{display:block}
  .sel select,.f-compact .sel select,.fbar .sel select,.fbar .sel input,.f-pin .sel.wide select,.sel.wide select,.t-filters .sel select{width:100%;min-width:0;height:40px;font-size:13px}
  .fbar .sel input[type=search]{min-width:0}
  .range-btn{height:40px;font-size:12.5px}
  .range-pop{width:min(298px,calc(100vw - 32px))}
  .f-actions{display:flex;margin:0;gap:8px;flex-wrap:wrap}
  .f-actions .btn,.f-compact .btn{flex:1 1 130px;justify-content:center;height:40px}
  .fbar .btn,.t-filters .btn{margin-left:0;justify-content:center;height:40px}
  .t-filters{display:grid;grid-template-columns:1fr 1fr;gap:10px;align-items:end}
  .t-filters>*{min-width:0}
  .t-filters>.btn,.t-filters>.t-search{grid-column:1/-1}
  .t-bar{flex-wrap:wrap}
  .t-search{margin-left:0;width:100%}
  .t-search input{width:100%;height:40px}
  .btn.sm{margin-left:0}
  .seg{margin-left:0}
  .tabs{display:flex;overflow-x:auto;flex-wrap:nowrap;gap:6px;padding-bottom:2px;margin-left:-2px;scrollbar-width:none}
  .tabs::-webkit-scrollbar{display:none}
  .tabs button{flex:none}

  /* tabel: gulir ke samping DI DALAM kartu, bukan melebarkan halaman */
  .rt-wrap,.gridwrap,.mx-wrap,.kai-tbl{max-width:100%;overflow:auto}
  .rt{font-size:12px}
  .pager{justify-content:center;gap:8px}
  .pager .pgi{width:100%;text-align:center;order:3;color:var(--muted);font-size:11.5px}
  .pager .pg{flex-wrap:wrap;justify-content:center}
  .pager select{height:34px}
  .pager button{min-width:34px;height:34px}

  /* peta */
  .map-box,.gm-box,.wil-top .map-box,.wil-top .gm-box{height:min(300px,62vw);min-height:240px}
  .map-legend{gap:8px 12px}
  .pt-card{width:min(230px,calc(100% - 20px))}
  .rt-wrap{max-height:340px}

  /* halaman data & umum */
  .dc-drop{padding:16px}
  .dc-actions .btn{flex:1 1 140px;justify-content:center}
  .note-box{font-size:12px}
  .toast{max-width:calc(100vw - 24px);text-align:center}
}

/* ---------- HP kecil (<= 420px) ---------- */
@media(max-width:420px){
  .main{padding:10px 10px calc(18px + env(safe-area-inset-bottom))}
  .title-block h1{font-size:14px}
  .brand .logo-slot{width:46px}
  .kpis .k-value,.kpi .k-value,.k6 .k-value{font-size:22px}
  .kpi,.k6 .kpi{padding:10px}
  .page-head h2{font-size:19px}
  .filter,.fbar,.f-compact,.t-filters{grid-template-columns:1fr}
  .sarana{grid-template-columns:1fr}
  .donut,.rk-donut .donut,.wil-bot .donut,.sar-mid .donut{width:164px;height:164px}
}

/* ---------- Layar sangat sempit (<= 340px) ---------- */
@media(max-width:340px){
  .kpis,.kpis.k3,.kpis.k5,.kpis.k6{grid-template-columns:1fr}
  .title-block p{display:none}
}

/* ================= LOGIN ================= */
@media(max-width:900px){
  .login-page{min-height:100vh;min-height:100dvh;display:block;background:#07224f;position:relative;isolation:isolate}
  /* wallpaper selalu menutup layar penuh & tidak ikut tergulung/terpotong */
  .login-page::before{content:"";position:fixed;inset:0;z-index:-1;background:#07224f url("../assets/wallpaper-omc.jpg") center/cover no-repeat}
  .login-side{min-height:100vh;min-height:100dvh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:18px;
    padding:max(24px,env(safe-area-inset-top)) 16px max(24px,env(safe-area-inset-bottom));background:transparent}
  .mobile-logo{display:block;width:min(240px,66%);height:auto;filter:drop-shadow(0 4px 14px rgba(2,12,34,.45))}
  .login-card{padding:24px 20px;border-radius:18px;max-width:420px}
  .input-wrap input{font-size:16px} /* cegah zoom otomatis di HP */
}
@media(max-width:900px) and (max-height:620px){
  .login-side{justify-content:flex-start}
  .mobile-logo{width:150px}
}
/* login PC: tinggi penuh, tanpa ruang kosong */
@media(min-width:901px){
  .login-page{min-height:100vh}
  .login-hero{min-height:100vh}
}

/* ================= SPLASH (saat aplikasi dibuka) ================= */
#omcSplash{position:fixed;inset:0;z-index:9999;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:28px;background:#fff;
  transition:opacity .45s ease,visibility 0s linear .45s}
#omcSplash.hide{opacity:0;visibility:hidden;pointer-events:none}
#omcSplash img{width:min(300px,64vw);height:auto;animation:omcPop .7s ease both}
#omcSplash .bar{width:min(180px,46vw);height:4px;border-radius:4px;background:#e4eef9;overflow:hidden}
#omcSplash .bar i{display:block;height:100%;width:40%;border-radius:4px;background:linear-gradient(90deg,#f59a23,#0a3d8f);animation:omcBar 1.1s ease-in-out infinite}
@keyframes omcPop{from{opacity:0;transform:scale(.92)}to{opacity:1;transform:none}}
@keyframes omcBar{0%{margin-left:-40%}100%{margin-left:100%}}
@media(prefers-reduced-motion:reduce){#omcSplash img,#omcSplash .bar i{animation:none}}

/* ---- penyempurnaan HP ---- */
@media(max-width:900px){
  .title-block h1{font-size:clamp(12px,3.5vw,15px)}
  .title-block p{font-size:clamp(10px,2.8vw,11px)}
  #bellBtn{display:none}
  .p-head .gps-badge{flex-basis:100%;margin-left:0}
  .p-head .seg{flex-basis:100%}
  .chart-box svg text{font-size:9px}
}
