@import url('https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&family=IBM+Plex+Mono:wght@400;500&family=Noto+Naskh+Arabic:wght@400;500;700&display=swap');

  :root{
    /* Skema warna Salam Setara (2026-09-09, diminta user): warna utama
       putih, dua warna aksen brand #EB2677 (pink/magenta) dan #113BAD
       (navy blue) -- --accent dipakai untuk tombol utama/link/status aktif,
       --accent-2 untuk aksen sekunder (judul section dashboard, separuh
       logo brand di index.html). */
    --bg:#fbfeff; --panel:#f3f5f7; --panel-2:#faf7fa; --border:#e7e3e6;
    --text:#1e1c19; --text-dim:#6b665c; --text-faint:#9a9488;
    --accent:#EB2677; --accent-ink:#ffffff; --accent-soft:#fbe3ee;
    --accent-2:#113BAD; --accent-2-ink:#ffffff; --accent-2-soft:#e3e8f7;
    /* --accent-3 (Ronde 48, 2026-09-26) -- oranye/peach diambil dari logo
       Simpul Setara (elemen ke-3 di logo, di luar --accent pink & --accent-2
       navy blue yang sudah ada) -- dipakai KHUSUS gradient panel kiri
       halaman login (.gate-left) supaya warnanya sesuai logo asli, TIDAK
       dipakai di tempat lain di app ini. */
    --accent-3:#F2A65C;
    --amber:#b9791b; --amber-soft:#f6ecd9;
    --success:#1e7a4c; --success-soft:#e2f3e8;
    --warning:#b9791b; --warning-soft:#f6ecd9;
    --critical:#b3372c; --critical-soft:#fbeae7;
    --info:#2a5f96; --info-soft:#e8f0f9;
    --neutral:#6b665c; --neutral-soft:#eeece6;
    --shadow: 0 1px 2px rgba(30,28,25,.06), 0 8px 24px -12px rgba(30,28,25,.15);
    --radius: 10px;
    --font-display: 'Plus Jakarta Sans', system-ui, sans-serif;
    --font-body: 'Plus Jakarta Sans', system-ui, sans-serif;
    --font-mono: 'IBM Plex Mono', ui-monospace, monospace;
  }
  *{box-sizing:border-box;}
  html,body{margin:0;padding:0;background:var(--bg);color:var(--text);font-family:var(--font-body);font-size:14px;line-height:1.5;}
  h1,h2,h3{font-family:var(--font-display);font-weight:600;margin:0 0 4px;}
  a{color:var(--accent);}
  button{font-family:inherit;}
  input,select,textarea{font-family:inherit;font-size:14px;color:var(--text);background:var(--panel);border:1px solid var(--border);border-radius:7px;padding:8px 10px;width:100%;}
  input:focus,select:focus,textarea:focus{outline:2px solid var(--accent);outline-offset:-1px;}
  textarea{resize:vertical;min-height:60px;}
  label{font-size:12.5px;color:var(--text-dim);font-weight:500;display:block;margin-bottom:4px;}

  .btn{border:1px solid var(--border);background:var(--panel);color:var(--text);border-radius:8px;padding:9px 14px;font-size:13.5px;font-weight:500;cursor:pointer;transition:background .12s,transform .12s,box-shadow .12s;}
  .btn:hover{background:var(--panel-2);transform:translateY(-1px);box-shadow:0 3px 8px rgba(30,28,25,.08);}
  .btn:disabled{opacity:.45;cursor:not-allowed;transform:none;box-shadow:none;}
  .btn-primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink);}
  /* Perbaikan (2026-09-09): sebelumnya hover tombol primary "ketimpa" jadi
     warna --panel-2 (nyaris putih) oleh aturan .btn:hover generik di atas --
     spesifisitas CSS-nya sama-sama 2, jadi cuma filter brightness yang
     kepasang, background-nya balik pucat. Sekarang background aksen
     ditegaskan ulang di sini (menang karena dideklarasikan belakangan). */
  .btn-primary:hover{background:var(--accent);border-color:var(--accent);filter:brightness(1.08);transform:translateY(-1px);box-shadow:0 4px 12px rgba(235,38,119,.28);}
  /* Tombol "Tandai Selesai" di modal Edit Tugas Visual (2026-09-03, ronde 10) */
  .btn-success{background:var(--success);border-color:var(--success);color:#fff;}
  .btn-success:hover{background:var(--success);border-color:var(--success);filter:brightness(1.08);transform:translateY(-1px);box-shadow:0 4px 12px rgba(30,122,76,.28);}
  .btn-ghost{background:transparent;}
  .btn-danger{color:var(--critical);}
  .btn-block{width:100%;text-align:left;}
  .btn-sm{padding:6px 10px;font-size:12.5px;}

  /* ---------- Gate ---------- */
  /* Ronde 48 (2026-09-26, diminta user: "buat jadi dua kolom gitu seperti
     contoh yg hayaa") -- gate DIROMBAK TOTAL dari "2 kartu melayang di
     tengah layar" (lama) jadi 2 KOLOM PENUH TINGGI LAYAR: .gate-left
     (panel warna brand, gradient biru->oranye->pink diambil dari logo
     Simpul Setara lewat --accent-2/--accent-3/--accent yang sudah ada)
     + .gate-right (panel putih polos berisi kartu form login, mirip
     kartu lama tapi TANPA logo/brand duplikat di dalamnya karena brand
     sudah tampil besar di .gate-left). Di layar sempit (<900px)
     .gate-left disembunyikan, .gate-right jadi full width -- form login
     TETAP jalan normal, cuma panel brand yang hilang. */
  .gate{position:fixed;inset:0;display:flex;z-index:50;background:var(--bg);}
  .gate-left{flex:1 1 46%;max-width:640px;min-width:0;background:linear-gradient(160deg, var(--accent-2) 0%, var(--accent-3) 48%, var(--accent) 88%);color:#fff;display:flex;align-items:center;padding:56px;position:relative;overflow:hidden;}
  .gate-left::after{content:'';position:absolute;inset:0;background:radial-gradient(circle at 88% 6%, rgba(255,255,255,.18), transparent 45%),radial-gradient(circle at 6% 96%, rgba(0,0,0,.14), transparent 50%);pointer-events:none;}
  .gate-left-inner{position:relative;z-index:1;max-width:420px;}
  .gate-logo-img{width:60px;height:auto;display:block;margin-bottom:22px;filter:drop-shadow(0 6px 16px rgba(0,0,0,.18));}
  .gate-left-brand{font-family:var(--font-display);font-size:27px;font-weight:700;line-height:1.2;}
  .gate-left-tagline{font-family:var(--font-display);font-size:16px;font-weight:600;opacity:.92;margin-bottom:16px;}
  .gate-left-desc{font-size:13px;line-height:1.65;opacity:.88;margin-bottom:30px;max-width:360px;}
  .gate-right{flex:1 1 54%;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px;overflow-y:auto;}
  .gate-card{margin:auto 0;width:100%;max-width:380px;background:var(--panel);border:1px solid var(--border);border-radius:16px;padding:32px 28px 28px;box-shadow:0 2px 8px rgba(30,28,25,.06);position:relative;}
  /* Footer halaman login (Ronde 97) -- nempel di bawah .gate-right, kartu
     form tetap di tengah (margin:auto di .gate-card). */
  .gate-footer{flex-shrink:0;padding-top:16px;font-size:11.5px;color:var(--text-dim);text-align:center;}
  .gate-card-title{font-family:var(--font-display);font-size:20px;font-weight:700;margin-bottom:4px;}
  .gate-sub{color:var(--text-dim);font-size:12.5px;margin-bottom:22px;}
  .gate-label{margin-top:14px;font-size:12px;font-weight:600;color:var(--text-dim);display:block;margin-bottom:5px;}
  .gate-input{margin-bottom:0;min-height:41px;border-radius:8px;transition:border-color .12s,box-shadow .12s;}
  .gate-input:focus{outline:none;border-color:var(--accent-2);box-shadow:0 0 0 3px var(--accent-2-soft);}
  .password-wrap{position:relative;}
  .password-wrap .gate-input{padding-right:64px;}
  .password-toggle{position:absolute;right:8px;top:50%;transform:translateY(-50%);border:0;background:transparent;color:var(--accent-2);font:600 11.5px var(--font-body);cursor:pointer;padding:5px;}
  .password-toggle:hover{text-decoration:underline;}
  .gate-error{min-height:18px;margin-top:8px;color:var(--critical);font-size:12px;}
  .gate-go{width:100%;margin-top:14px;padding:11px 14px;font-size:14px;border-radius:9px;}
  /* Ronde 48 -- kutipan sekarang STATIS (1x tampil, tidak auto-ganti) dan
     ditaruh DI DALAM .gate-left (bg gradient warna brand), jadi restyle
     ke teks TERANG (bukan lagi teks gelap di atas panel putih seperti
     desain lama). .gate-quote-inner TIDAK PERLU animasi fade lagi (dulu
     dipakai transisi antar kutipan yg berganti-ganti), tapi class `show`
     TETAP dipertahankan (dipasang langsung di HTML & tidak pernah
     dilepas lagi oleh app.js) supaya tidak perlu ubah app.js sama sekali. */
  .gate-quote-panel{max-width:400px;border-top:1px solid rgba(255,255,255,.28);padding-top:20px;}
  .gate-quote-inner{opacity:1;}
  .gate-quote-arabic{font-family:'Noto Naskh Arabic', serif;direction:rtl;text-align:right;font-size:21px;line-height:1.9;color:#fff;margin-bottom:12px;}
  .gate-quote-arabic:empty{display:none;}
  .gate-quote-translation{font-size:13.5px;line-height:1.7;color:rgba(255,255,255,.92);margin-bottom:6px;}
  .gate-quote-reference{font-size:11.5px;font-weight:600;color:rgba(255,255,255,.72);}
  @media (max-width: 900px){ .gate-left{display:none;} .gate-right{width:100%;} }
  /* Teks Arab di form "Kelola Quotes" (field arabicText, opsional) -- lihat
     f.rtl di fieldInputHtml() (app.js). Textarea lain TIDAK terpengaruh. */
  textarea.field-arabic{font-family:'Noto Naskh Arabic', serif;font-size:16px;line-height:1.9;}

  /* ---------- App shell ---------- */
  .app{display:flex;min-height:100vh;}
  .sidebar{width:220px;flex:none;background:var(--panel);border-right:1px solid var(--border);display:flex;flex-direction:column;padding:18px 14px;gap:6px;position:sticky;top:0;height:100vh;}
  .brand{font-family:var(--font-display);font-size:17px;font-weight:600;margin-bottom:2px;}
  .brand span.brand-c1{color:var(--accent-2);}
  .brand span.brand-c2{color:var(--accent);}
  .role-badge{font-size:11.5px;color:var(--text-dim);margin-bottom:14px;}
  .side-nav{display:flex;flex-direction:column;gap:3px;flex:1;overflow-y:auto;}
  .side-item{border:none;background:transparent;text-align:left;padding:8px 10px;border-radius:7px;font-size:13px;cursor:pointer;color:var(--text);position:relative;display:flex;align-items:center;justify-content:space-between;gap:8px;}
  .side-item-label{flex:1;min-width:0;}
  .side-badge{flex:none;min-width:18px;height:18px;padding:0 6px;border-radius:9px;background:#e4dfe5;color:var(--text-dim);font-size:10.5px;font-weight:700;display:flex;align-items:center;justify-content:center;line-height:1;}
  .side-item:hover{background:var(--panel-2);}
  .side-item.active{background:var(--accent-soft);color:var(--accent);font-weight:600;}
  .side-item.active::before{content:'';position:absolute;left:-4px;top:16%;bottom:16%;width:3px;border-radius:3px;background:var(--accent);}
  .side-section-label{font-size:10.5px;text-transform:uppercase;letter-spacing:.04em;color:var(--text-faint);padding:10px 10px 2px;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
  .side-item-sub{padding-left:20px;font-size:12.5px;}
  /* Ikon sidebar monokrom (2026-09-25, diminta user -- ganti emoji
     berwarna) -- flex:none supaya tidak ikut menyusut/melar mengikuti
     .side-item-label yang flex:1, stroke ikut warna currentColor (otomatis
     berubah jadi warna --accent waktu .side-item.active, sama seperti
     teksnya, tanpa aturan tambahan). */
  .side-item-icon{flex:none;width:18px;height:18px;}
  .side-item-sub .side-item-icon{width:16px;height:16px;}
  /* Grup "Superadmin" (2026-09-25) -- label section + garis pemisah di atas
     supaya kelihatan jelas ini area terpisah dari nav biasa, bukan cuma
     .side-section-label polos seperti nama campaign. */
  .side-section-label-admin{display:flex;align-items:center;gap:6px;margin-top:14px;padding-top:12px;border-top:1px solid var(--border);}
  .side-section-label-admin svg{flex:none;width:14px;height:14px;}
  /* Dropdown "Superadmin" (2026-09-25, ronde 36, diminta user: "buat jadi
     dropdown") -- label section di atas sekarang tombol (data-action=
     "toggle-superadmin"), chevron ini menandakan status buka/tutup, ikut
     berputar 180° pas terbuka (state.superadminNavOpen, lihat
     renderSideNav() di app.js). margin-left:auto dorong dia ke ujung kanan
     tombol walau .side-item-label di tengah sudah flex:1. */
  .side-item-chevron{margin-left:auto;transition:transform .15s ease;}
  .side-item-chevron.open{transform:rotate(180deg);}
  .side-foot{display:flex;flex-direction:column;gap:6px;padding-top:10px;border-top:1px solid var(--border);}
  .side-foot-new-campaign{background:linear-gradient(135deg, var(--accent), var(--accent-2));color:#fff;border:none;font-weight:600;display:flex;align-items:center;justify-content:center;gap:6px;box-shadow:0 3px 10px rgba(235,38,119,.25);margin-bottom:2px;}
  .side-foot-new-campaign:hover{background:linear-gradient(135deg, var(--accent), var(--accent-2));color:#fff;filter:brightness(1.06);transform:translateY(-1px);box-shadow:0 5px 14px rgba(235,38,119,.32);}
  .side-foot-new-campaign.active{filter:brightness(0.94);}
  .sync-note{font-size:10.5px;color:var(--text-faint);text-align:center;font-family:var(--font-mono);}

  /* Pencarian cepat sidebar (Ronde 50, 2026-09-26, diminta user: "buat kolom
     untuk pencarian... yg di cari itu link campaign atau aurum atau
     partner") -- kotak input + daftar hasil melayang tepat di bawahnya.
     `position:relative` di wrapper supaya `.sidebar-search-results` (absolute)
     mengambang pas di bawah input, tidak mendorong konten nav di bawahnya. */
  .sidebar-search{position:relative;margin-bottom:12px;}
  .sidebar-search-input{font-size:12.5px;padding:7px 9px;min-height:34px;margin-bottom:0;}
  .sidebar-search-results{position:absolute;top:100%;left:0;right:0;margin-top:4px;background:var(--panel);border:1px solid var(--border);border-radius:8px;box-shadow:var(--shadow);max-height:280px;overflow-y:auto;z-index:10;}
  .sidebar-search-result{padding:8px 10px;cursor:pointer;border-bottom:1px solid var(--border);}
  .sidebar-search-result:last-child{border-bottom:none;}
  .sidebar-search-result:hover{background:var(--panel-2);}
  .sidebar-search-result-title{font-size:12.5px;font-weight:600;color:var(--text);}
  .sidebar-search-result-sub{font-size:11px;color:var(--text-dim);margin-top:1px;}
  .sidebar-search-empty{padding:10px;font-size:12px;color:var(--text-faint);}

  main{flex:1;padding:26px 30px;max-width:1300px;overflow-x:hidden;}

  /* Topbar + drawer sidebar buat HP (Ronde 49, 2026-09-26, diminta user:
     "pastikan ini juga responsif diakses melalui HP") -- sebelumnya
     .sidebar lebar TETAP 220px di layar seberapa pun sempitnya, jadi di HP
     (<880px) konten utama kegencet jadi kurang dari separuh lebar layar.
     Sekarang di bawah 880px: .mobile-topbar (tombol hamburger) muncul,
     .sidebar disembunyikan default lalu dibuka sbg drawer dari kiri lewat
     class .is-open (lihat openMobileSidebar()/closeMobileSidebar(), app.js).
     Di atas 880px (desktop/tablet lanskap) elemen2 baru ini semua
     display:none / tidak berefek -- tampilan lama TIDAK berubah sama
     sekali. */
  .mobile-topbar{display:none;align-items:center;gap:14px;padding:12px 14px;background:var(--panel);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:40;}
  .mobile-menu-btn{border:none;background:transparent;padding:6px;margin:-6px;border-radius:8px;color:var(--text);cursor:pointer;display:flex;flex:none;}
  .mobile-menu-btn:hover{background:var(--panel-2);}
  .mobile-topbar-brand{font-family:var(--font-display);font-size:15.5px;font-weight:600;}
  .sidebar-backdrop{display:none;position:fixed;inset:0;background:rgba(20,18,15,.42);z-index:55;}
  .sidebar-close-btn{display:none;}
  @media (max-width: 880px){
    .mobile-topbar{display:flex;}
    body.yayasan-mode .mobile-topbar{display:none;}
    .app{display:block;}
    .sidebar{position:fixed;top:0;left:0;width:260px;max-width:82vw;height:100vh;z-index:60;transform:translateX(-100%);transition:transform .22s ease;box-shadow:0 0 30px rgba(20,18,15,.22);}
    .sidebar.is-open{transform:translateX(0);}
    .sidebar-close-btn{display:flex;align-items:center;justify-content:center;position:absolute;top:12px;right:12px;width:28px;height:28px;border:none;background:var(--panel-2);border-radius:8px;color:var(--text-dim);cursor:pointer;font-size:13px;}
    .sidebar-backdrop.show{display:block;}
    main{padding:16px 14px;max-width:100%;}
    /* Baris tombol/filter header Home & grid "Data Master" read-only (yg
       sebelumnya lebar/nowrap tetap, aman di desktop tapi kepotong di HP
       sempit) -- dilonggarkan supaya boleh turun baris / menyusut penuh,
       BUKAN redesign, cuma jaga2 supaya tidak ada yang kepotong di layar
       sempit. */
    .home-actions{flex-wrap:wrap;}
    .master-ro-groups{width:100%;}
  }

  /* ---------- Campaign picker (home) ---------- */
  .home-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:18px;flex-wrap:wrap;gap:10px;}
  .home-actions{display:flex;align-items:center;gap:8px;flex-wrap:nowrap;}
  /* Jarak antar grup & baris campaign dipersempit (2026-09-26, diminta
     user: "ruang jarak antar list campaign masih terlalu berjarak
     tingginya, coba perdekat lagi") -- month-group 26px->16px,
     .campaign-list td 6px->4px (lihat juga aturan .btn/.chip khusus di
     dalam .campaign-list td di bawah, biar tombol Aksi ikut menyusut). */
  .month-group{margin-bottom:16px;}
  .month-title{font-family:var(--font-display);font-size:17px;margin-bottom:8px;padding-bottom:6px;border-bottom:1px solid var(--border);}
  /* Judul grup collapsible (2026-09-26, diminta user: "kalau udah banyak
     gak perlu sampai scrolldown kebawah") -- dipakai Home (per bulan) &
     Rekap Semua Supply (per PIC), lihat groupTitleHtml() di app.js. Waktu
     dirender sbg <button> (bukan <div>, cuma kalau toggleable), reset
     tampilan bawaan tombol browser (background/border/padding) supaya
     kelihatan identik dgn versi <div> lama, ditambah layout flex utk
     chevron+jumlah campaign di kanan. Compound selector button.month-title
     sengaja dipakai (bukan cuma .month-title) supaya specificity-nya
     menang atas gaya bawaan <button> milik browser.
  */
  button.month-title{display:flex;align-items:center;gap:8px;width:100%;background:none;border:none;border-bottom:1px solid var(--border);cursor:pointer;color:var(--text);font:inherit;font-family:var(--font-display);font-size:17px;text-align:left;padding:0 0 6px;}
  button.month-title:hover .month-title-label{color:var(--accent);}
  .month-title-label{flex:none;}
  .month-count{margin-left:auto;font-size:12px;font-weight:500;color:var(--text-faint);font-family:var(--font-body,inherit);}
  .month-chevron{flex-shrink:0;color:var(--text-faint);transition:transform .15s ease;}
  .month-chevron.open{transform:rotate(180deg);}
  .campaign-list-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:10px;background:var(--panel);box-shadow:var(--shadow);}
  .campaign-list{width:100%;min-width:1000px;border-collapse:collapse;table-layout:fixed;}
  .campaign-list th{padding:6px 10px;background:var(--panel-2);border-bottom:1px solid var(--border);color:var(--text-dim);font-size:11px;font-weight:600;text-align:left;letter-spacing:.02em;}
  .campaign-list th:nth-child(1){width:21%;}
  .campaign-list th:nth-child(2){width:19%;}
  .campaign-list th:nth-child(3){width:24%;}
  .campaign-list th:nth-child(4){width:10%;}
  .campaign-list th.col-tick{width:7%;text-align:center;}
  .campaign-list th.col-aksi{width:52px;}
  .campaign-list td.col-aksi{white-space:nowrap;overflow:visible;text-overflow:clip;}
  /* Filter "Pilih Bulan" di header Home (2026-09-10, diminta user: dropdown
     TUNGGAL di samping tombol Import Excel/+ Campaign Baru, BUKAN dropdown
     per-baris di tabel -- lihat wireGlobalActions()/renderHome() utk
     logikanya). Murni filter tampilan, tidak menyentuh data apa pun. */
  .home-month-filter{padding:9px 14px;border:1px solid var(--border);border-radius:8px;background:var(--panel);color:var(--text);font-size:13.5px;font-weight:500;}
  .campaign-list td{padding:4px 10px;border-bottom:1px solid var(--border);color:var(--text-dim);font-size:12px;line-height:1.25;vertical-align:middle;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
  /* Tombol Aksi (End/Hapus) & chip status di dalam tabel campaign dibikin
     lebih mungil (2026-09-26) -- .btn/.chip biasa (dipakai di tempat lain
     jg) sengaja TIDAK diubah globalnya, scoped ke ".campaign-list td" saja
     supaya baris tabel Home/Rekap Semua Supply lebih rapat tanpa mengubah
     tampilan tombol/chip di halaman lain. */
  .campaign-list td .btn{padding:3px 8px;font-size:11.5px;}
  .campaign-list td .chip{padding:1px 8px;}
  .campaign-list-row:last-child td{border-bottom:0;}
  .campaign-list-row{cursor:pointer;transition:background .12s;}
  .campaign-list-row:hover,.campaign-list-row:focus{background:var(--accent-soft);outline:none;}
  .campaign-list-link{display:block;color:var(--accent);font-family:var(--font-mono);font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-decoration:none;}
  .campaign-list-link:hover{text-decoration:underline;}
  .list-primary{color:var(--text);font-weight:600;}
  .list-empty{color:var(--text-faint);}
  .empty-note{color:var(--text-faint);font-size:13px;padding:30px 0;text-align:center;}

  /* ---------- Campaign detail ---------- */
  .crumb{display:inline-flex;align-items:center;font-size:12.5px;font-weight:600;color:var(--text-dim);cursor:pointer;margin-bottom:12px;padding:5px 12px;border:1px solid var(--border);border-radius:999px;background:var(--panel);user-select:none;}
  .crumb:hover{color:var(--accent);border-color:var(--accent);background:var(--accent-soft);}
  .detail-page{}
  .detail-main{min-width:0;}
  .meta-strip{display:flex;flex-wrap:wrap;gap:18px;background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:14px 18px;margin-bottom:16px;box-shadow:var(--shadow);}
  .meta-item .mi-label{font-size:10.5px;text-transform:uppercase;letter-spacing:.04em;color:var(--text-faint);}
  .meta-item .mi-value{font-size:13.5px;font-weight:600;margin-top:1px;}
  .meta-item .mi-value.mono{font-family:var(--font-mono);font-weight:500;}

  .detail-grid{display:grid;grid-template-columns:340px 1fr;gap:22px;align-items:start;}
  @media (max-width: 880px){ .detail-grid{grid-template-columns:1fr;} }
  .detail-grid-single{grid-template-columns:1fr;}
  .konten-running-block{border:1px solid var(--success);background:var(--success-soft);border-radius:var(--radius);padding:14px 16px;margin:14px 0;box-shadow:var(--shadow);}
  .konten-running-head{display:flex;align-items:flex-start;gap:10px;margin-bottom:10px;}
  .konten-running-badge{flex:0 0 auto;width:26px;height:26px;border-radius:50%;background:var(--success);color:#fff;display:flex;align-items:center;justify-content:center;font-size:13px;}
  .konten-running-block h4{margin:0 0 3px;color:var(--success);font-size:14px;}
  .konten-running-sub{font-size:12.5px;color:var(--text-dim);}
  .konten-running-btn{display:inline-flex;align-items:center;gap:7px;background:var(--success);border-color:var(--success);color:#fff;font-weight:600;}
  .konten-running-btn:hover{filter:brightness(1.1);transform:translateY(-1px);box-shadow:0 4px 12px rgba(30,122,76,.28);}
  .konten-running-readonly{font-size:12.5px;font-weight:600;color:var(--success);background:#fff;border:1px dashed var(--success);border-radius:7px;padding:8px 10px;display:inline-block;}
  .form-panel{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:16px;position:sticky;top:20px;box-shadow:var(--shadow);}
  .form-panel h3{font-size:14.5px;margin-bottom:12px;}
  /* Panel berdiri sendiri (Data Master, Konten recap, Campaign Baru) tidak
     punya "kolom sebelah" untuk di-scroll lewat, jadi tidak perlu sticky —
     kalau sticky, panel ikut menempel di atas layar saat form-nya panjang. */
  .form-panel-solo{max-width:none;position:static;}
  /* Grid Data Master/Konten recap/Campaign Baru dirapatkan 2026-09-03: kolom
     min-width diturunkan (200px->150px) supaya lebih banyak kolom muat per
     baris (makin sedikit baris = makin sedikit perlu di-scroll), dan label
     + value tiap field-item dirapatkan (lihat 2 aturan baru di bawah). */
  .form-panel-solo .field-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px 16px;align-items:start;}
  .form-panel-solo .field-item label{margin-bottom:2px;}
  .form-panel-solo .ro-value{padding:3px 0;}
  /* panel-head sekarang bisa punya 3 anak (h3, .master-flags-row, tombol
     aksi) — flex-wrap dinyalakan supaya di layar sempit baris flag pindah
     ke bawah judul, bukan memaksa satu baris jadi kepenuhan. */
  .panel-head{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px 14px;margin-bottom:12px;}
  .panel-head h3{margin-bottom:0;}
  .panel-head-actions{display:flex;align-items:center;gap:8px;}
  .field-grid{display:flex;flex-direction:column;gap:10px;}
  .field-help{font-size:11px;color:var(--text-faint);margin-top:2px;}
  .field-item{display:flex;flex-direction:column;}
  .field-item-checkbox{flex-direction:row;align-items:center;gap:8px;}
  /* Pseudo-field 'section' + blok Rincian Salset otomatis (ronde 12,
     2026-09-03) -- lihat fieldInputHtml()/renderPencairanSalsetBox() di
     app.js, dipakai di modal Edit Tugas Pencairan Utama. */
  .field-section-header{font-size:11.5px;font-weight:700;color:var(--text-dim);text-transform:uppercase;letter-spacing:.03em;margin-top:8px;padding-top:10px;border-top:1px dashed var(--border);}
  .salset-box{background:var(--panel-2);border:1px solid var(--border);border-radius:8px;padding:10px 12px;margin-top:6px;}
  .salset-box h4{font-size:12px;margin-bottom:6px;color:var(--text-dim);}
  .salset-row{display:flex;justify-content:space-between;gap:10px;padding:3px 0;border-bottom:1px dashed var(--border);font-size:12.5px;}
  .salset-row:last-child{border-bottom:0;}
  .salset-row-label{color:var(--text-faint);}
  .salset-row-total{font-weight:700;}
  .salset-row-total .salset-row-label{color:var(--text-dim);}
  .field-item-checkbox .field-help{margin-top:0;}
  /* Tim Approval (2026-09-04) -- catatan revisi dari Supply, ditampilkan
     di kotak Status Approval Konten (renderKontenApprovalStatus). */
  .approval-feedback{margin-top:6px;font-size:12.5px;color:var(--text-dim);font-style:italic;}
  .approval-feedback-done{color:var(--success);font-style:normal;font-weight:600;}
  .field-checkbox{width:16px;height:16px;accent-color:var(--accent);cursor:pointer;}
  /* Baris flag ringkas (Assign Region/Pencairan/Subsidi Mitra/Kabar Terbaru),
     dipindah ke panel-head 2026-09-03 (ronde 2 rapikan) — lihat
     renderMasterFlagsHtml()/renderMasterTab() di app.js. Bukan lagi bagian
     dari field-grid sama sekali. */
  .master-flags-row{display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px;}
  .flag-chip{display:inline-block;padding:3px 10px;border-radius:20px;font-size:11px;font-weight:600;white-space:nowrap;background:var(--neutral-soft);color:var(--text-faint);}
  .flag-chip.on{background:var(--success-soft);color:var(--success);}
  /* Kotak field gabungan (ronde 2 rapikan, 2026-09-03) — beberapa nilai yang
     berkaitan (mis. Status/Link/Ready Date Consent Letter) ditaruh dalam 1
     "kolom" grid saja, lihat fieldGroupHtml() di app.js. Border tipis +
     background sedikit beda supaya terlihat sebagai 1 kesatuan, bukan
     nyampur dengan field-item biasa di sekelilingnya. */
  /* Layout Data Master read-only dipisah 2 region independen (ronde 5,
     2026-09-03) -- lihat komentar renderMasterReadOnlyFields() di app.js
     untuk alasan lengkapnya (CSS Grid menyamakan tinggi 1 baris kalau
     kotak gabungan + field pendek dicampur di 1 grid yang sama). */
  .master-ro-layout{display:flex;gap:16px;align-items:flex-start;flex-wrap:wrap;}
  /* 2026-09-03 ronde 6: .master-ro-groups jadi grid 2 kolom (dulu 1 kolom
     ditumpuk 3 baris) -- "Input & Progress" melebar 2 kolom
     (.field-item-group-wide, lihat fieldGroupHtml() di app.js), "Consent
     Letter"/"Nominal Campaign" bersebelahan di baris bawahnya, sesuai
     permintaan user ("nominal campaign geser kolomnya di samping consent
     letter, jadi dua baris"). */
  .master-ro-groups{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;width:340px;flex-shrink:0;align-items:start;}
  .master-ro-groups .field-item-group-wide{grid-column:1/-1;}
  .master-ro-fields{flex:1;min-width:240px;}
  /* Ronde 30 (2026-09-25, diminta Supply -- "ada area kosong di samping
     kolom Nominal Campaign") -- dulu region ini pakai grid auto-fill biasa
     (aturan .form-panel-solo .field-grid di atas), yang wrap jadi
     SEDIKIT baris lebar (mis. 5 kolom x 3 baris utk 12 field) -- jauh
     lebih pendek dari 2 kotak bertumpuk di .master-ro-groups sebelahnya,
     jadi nyisa banyak ruang kosong. CSS multi-column (BUKAN grid) dipakai
     di sini SENGAJA: browser otomatis MENYEIMBANGKAN total tinggi antar
     kolom (column-fill:balance, default browser), tanpa memaksakan tinggi
     antar ITEM supaya SAMA seperti grid row -- itu justru masalah yang
     sudah dihindari sejak ronde 5 dengan memisah region ini dari
     .master-ro-groups (lihat komentar renderMasterReadOnlyFields() di
     app.js), jadi solusi ini tidak membuka lagi masalah lama itu.
     break-inside:avoid-column supaya label+value 1 field tidak kepotong
     pindah kolom di tengah. */
  .master-ro-fields.field-grid{display:block;columns:3 190px;column-gap:16px;}
  .master-ro-fields.field-grid .field-item{break-inside:avoid-column;margin-bottom:10px;}
  .field-item-group{background:var(--panel-2);border:1px solid var(--border);border-radius:8px;padding:8px 10px;}
  .field-group-body{display:flex;flex-direction:column;gap:6px;margin-top:2px;}
  .fg-row{display:flex;flex-direction:column;gap:1px;font-size:12.5px;}
  .fg-label{color:var(--text-faint);font-size:11px;}
  .fg-value{text-align:left;word-break:break-word;}
  .link-chip{display:inline-block;padding:2px 8px;border-radius:12px;background:var(--accent-soft,rgba(99,102,241,.12));color:var(--accent,#6366f1);font-size:11.5px;font-weight:600;white-space:nowrap;text-decoration:none;}
  .link-chip:hover{text-decoration:underline;}

  .checklist-group{display:flex;flex-wrap:wrap;gap:6px 14px;padding:2px 0;}
  .checklist-item{display:flex;align-items:center;gap:6px;font-size:13px;cursor:pointer;}
  .checklist-item input{width:15px;height:15px;accent-color:var(--accent);cursor:pointer;}
  .field-item-checklist .field-help{margin-top:2px;}
  /* Jumlah per jenis subtask (2026-09-28, diminta user: bisa >1 subtask
     sejenis dalam 1 request, mis. 2x CC) -- input angka kecil di samping
     tiap item checklist, cuma aktif kalau item-nya dicentang (wiring di
     openModal(), app.js). Spesifisitas 2-class sengaja dipakai supaya
     menang di atas ".checklist-item input" generik (yang menyasar checkbox)
     tanpa perlu !important. */
  .checklist-item .checklist-qty-input{width:44px;height:auto;padding:2px 4px;font-size:12px;text-align:center;cursor:text;accent-color:initial;}
  .checklist-qty-input:disabled{opacity:.35;cursor:not-allowed;}
  .ro-value{font-size:13px;padding:6px 0;border-bottom:1px dashed var(--border);word-break:break-word;}
  .mono{font-family:var(--font-mono);}
  .form-actions{display:flex;gap:8px;margin-top:14px;}

  .request-block{margin-bottom:16px;padding-bottom:14px;border-bottom:1px dashed var(--border);}
  .cl-warning-note{margin-top:10px;font-size:12px;color:var(--warning);background:var(--warning-soft);border:1px solid var(--warning);border-radius:8px;padding:8px 10px;}
  .cl-lock-note{font-size:11.5px;color:var(--warning);background:var(--warning-soft);border-radius:6px;padding:5px 8px;margin:4px 0 2px;}
  .request-block h4{font-size:12px;text-transform:uppercase;letter-spacing:.03em;color:var(--text-dim);margin:0 0 8px;}
  .request-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:8px 8px;align-items:start;}
  /* Ronde 30 (2026-09-25) -- tiap tombol Kirim Request sekarang dibungkus
     .request-btn-wrap (tombol + 1 baris keterangan kecil di bawahnya:
     sudah/belum direquest, atau kenapa terkunci). Lihat renderRequestBlock(). */
  .request-btn-wrap{display:flex;flex-direction:column;gap:4px;}
  .request-btn.is-locked{opacity:.55;cursor:not-allowed;}
  .request-btn.is-locked:hover{border-color:var(--border);background:var(--panel-2);transform:none;}
  .req-status-note{font-size:11px;color:var(--text-faint);padding:0 2px;}
  .req-status-note.req-status-done{color:var(--success);}
  /* Blok "Data dari Master (referensi)" + judul "Tugas Tim Konten" di tab
     Konten (2026-09-03, ronde 7) -- reuse gaya heading kecil .request-block
     h4 supaya konsisten, dipisah garis putus-putus dari bagian tugas
     Konten sendiri. Lihat renderKontenMasterContext()/renderKontenTab(). */
  .konten-context-block{margin-bottom:16px;padding-bottom:14px;border-bottom:1px dashed var(--border);}
  .konten-context-block h4, .konten-task-heading{font-size:12px;text-transform:uppercase;letter-spacing:.03em;color:var(--text-dim);margin:0 0 8px;}
  /* "Draft CL Otomatis" (2026-09-26, Ronde 41) -- catatan kecil di atas
     tombol "Buat Draft CL", dipakai modal "Kerjakan Consent Letter" (kolom
     2, lihat .cl-support-columns di bawah) + panel "Kelola Template CL"
     (renderManageClTemplate(), TIDAK ikut dipengaruhi perubahan apa pun di
     bawah ini). */
  .cl-draft-note{font-size:12px;color:var(--text-dim);margin-bottom:10px;line-height:1.5;}

  /* Layout 3 kolom modal "Kerjakan Consent Letter" (Ronde 44, 2026-09-26,
     diminta user: "besarin lagi, terus bagi jadi 3 kolom") -- lihat
     openEditSupportTaskModal() (app.js) utk struktur HTML lengkapnya.
     Kolom 1 (Data dari Supply) + 2 (Draft Otomatis+No Surat) lebar sama,
     kolom 3 (Detail Pengerjaan, isinya 2 field sebaris tiap sub-grup) sedikit
     lebih lebar (fr 1.3) supaya field urlnya tidak terlalu sempit. Turun
     jadi 1 kolom bertumpuk di layar sempit (tablet potrait/HP) -- modal ini
     memang didesain utk layar lebar (opts.xwide, lihat .modal-box-xwide),
     jadi ambang batasnya sengaja lebih tinggi (900px) drpd @media lain di
     file ini (640px) yang biasanya cuma perlu ganti modal biasa. */
  .cl-support-columns{display:grid;grid-template-columns:1fr 1fr 1.3fr;gap:0 22px;margin-bottom:14px;}
  .cl-support-col{padding-left:18px;border-left:1px dashed var(--border);min-width:0;}
  .cl-support-col:first-child{padding-left:0;border-left:none;}
  .cl-support-col h4{font-size:12px;text-transform:uppercase;letter-spacing:.03em;color:var(--text-dim);margin:0 0 10px;}
  .cl-support-col .field-item{margin-bottom:10px;}
  .cl-support-col .field-item:last-child{margin-bottom:0;}
  .cl-support-col-gap{margin-top:14px;}
  /* Sub-grup "Draft CL" / "CL Final Update" di kolom 3 -- dipisah garis
     putus-putus tipis supaya ke-2 tahap kerja (kirim ke partner vs upload
     final) tetap kebaca jelas walau sekarang berdekatan dlm 1 kolom. */
  .cl-support-subgroup{margin-bottom:14px;padding-bottom:14px;border-bottom:1px dashed var(--border);}
  .cl-support-subgroup:last-child{margin-bottom:0;padding-bottom:0;border-bottom:none;}
  .cl-support-subgroup-title{font-size:11px;font-weight:700;color:var(--text-faint);text-transform:uppercase;letter-spacing:.02em;margin-bottom:8px;}
  /* Caption timestamp kecil (Ronde 44) -- lihat tsCaptionHtml() (app.js). */
  .field-ts-caption{font-size:11px;color:var(--text-faint);margin-top:-2px;margin-bottom:8px;}
  .field-ts-caption:last-child{margin-bottom:0;}
  /* Catatan Permintaan (textarea generik) -- SENGAJA di luar 3 kolom, lihat
     komentar di openEditSupportTaskModal(). */
  .cl-support-catatan{padding-top:14px;border-top:1px dashed var(--border);}
  @media (max-width: 900px){
    .cl-support-columns{grid-template-columns:1fr;gap:18px 0;}
    .cl-support-col{padding-left:0;padding-top:14px;border-left:none;border-top:1px dashed var(--border);}
    .cl-support-col:first-child{padding-top:0;border-top:none;}
  }
  .request-btn{display:flex;align-items:center;gap:9px;border:1px solid var(--border);background:var(--panel-2);border-radius:10px;padding:10px 12px;cursor:pointer;font-size:12.5px;font-weight:600;text-align:left;color:var(--text);transition:border-color .12s,background .12s,transform .1s;}
  .request-btn:hover{border-color:var(--amber);background:var(--amber-soft);transform:translateY(-1px);}
  .request-btn-icon{flex-shrink:0;width:26px;height:26px;display:flex;align-items:center;justify-content:center;background:var(--panel);border-radius:8px;font-size:14px;}

  .table-wrap{background:var(--panel);border:1px solid var(--border);border-radius:10px;overflow:hidden;box-shadow:var(--shadow);}
  .table-wrap .tw-head{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-bottom:1px solid var(--border);}
  .tw-head h3{font-size:13.5px;}
  table{width:100%;border-collapse:collapse;font-size:12.5px;}
  th,td{padding:9px 12px;text-align:left;border-bottom:1px solid var(--border);white-space:nowrap;}
  th{background:var(--panel-2);color:var(--text-dim);font-weight:600;font-size:11px;text-transform:uppercase;letter-spacing:.03em;position:sticky;top:0;}
  tbody tr{cursor:pointer;}
  tbody tr:hover{background:var(--panel-2);}
  tbody tr.editing-row{background:var(--accent-soft);}
  td.wrap{white-space:normal;max-width:260px;}
  .table-scroll{overflow-x:auto;}
  .cell-muted{color:var(--text-faint);}

  .chip{display:inline-block;padding:2px 9px;border-radius:20px;font-size:11px;font-weight:600;white-space:nowrap;}
  .chip::before{content:'';display:inline-block;width:6px;height:6px;border-radius:50%;background:currentColor;margin-right:5px;vertical-align:middle;opacity:.85;}
  .chip.success{background:var(--success-soft);color:var(--success);}
  .chip.warning{background:var(--warning-soft);color:var(--warning);}
  .chip.critical{background:var(--critical-soft);color:var(--critical);}
  .chip.info{background:var(--info-soft);color:var(--info);}
  .chip.accent{background:var(--accent-soft);color:var(--accent);}
  .chip.neutral{background:var(--neutral-soft);color:var(--neutral);}

  /* ---------- Kanban Tugas Visual (ronde 9) ---------- */
  .kanban-board{display:flex;gap:14px;overflow-x:auto;padding-bottom:6px;align-items:flex-start;}
  .kanban-col{flex:none;width:300px;background:var(--panel-2);border:1px solid var(--border);border-radius:10px;display:flex;flex-direction:column;max-height:calc(100vh - 140px);}
  .kanban-col-head{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;font-size:12.5px;font-weight:600;color:var(--text-dim);border-bottom:1px solid var(--border);position:sticky;top:0;background:var(--panel-2);border-radius:10px 10px 0 0;}
  .kanban-count{background:var(--panel);border:1px solid var(--border);border-radius:20px;padding:1px 8px;font-size:11px;color:var(--text-dim);}
  .kanban-col-body{padding:10px;display:flex;flex-direction:column;gap:10px;overflow-y:auto;}
  .kanban-empty{color:var(--text-faint);font-size:12.5px;padding:8px 2px;}
  .kanban-card{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:10px 12px;cursor:pointer;transition:box-shadow .12s,border-color .12s;box-shadow:var(--shadow);}
  .kanban-card:hover{border-color:var(--accent);}

  /* ---------- Ringkasan Tim Lain di Data Master (Ronde 29, 2026-09-25) ----------
     Grid kartu ringkas per tim, reuse .kanban-card apa adanya (kartu, hover,
     shadow semua sama) -- cuma layout grid + isi dalamnya yang baru, supaya
     tetap satu bahasa visual dengan kanban card lain di app ini. */
  .team-summary-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:12px;margin-top:6px;}
  .team-summary-card{display:flex;flex-direction:column;gap:2px;}
  .tsc-title{display:flex;align-items:center;gap:6px;}
  .tsc-empty{color:var(--text-faint);font-size:12px;font-style:italic;padding:2px 0;}
  .tsc-hint{font-size:11px;color:var(--text-faint);text-align:right;margin-top:6px;}
  .team-summary-card:hover .tsc-hint{color:var(--accent);font-weight:600;}

  .request-approval-list{display:flex;flex-direction:column;gap:10px;max-width:480px;}
  .request-approval-card{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:12px 14px;cursor:pointer;transition:border-color .12s,background .12s,transform .1s;box-shadow:var(--shadow);}
  .request-approval-card:hover{border-color:var(--amber);background:var(--amber-soft);transform:translateY(-1px);}
  .request-approval-card.is-revisi{border-color:var(--critical);}
  .request-approval-card.is-revisi:hover{border-color:var(--critical);background:var(--critical-soft);}
  .request-approval-card.is-static{cursor:default;}
  .request-approval-card.is-static:hover{transform:none;}
  .request-approval-cta{margin-top:8px;font-size:12px;font-weight:700;color:var(--amber);}
  .kanban-card-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:6px;}
  .kanban-field{display:flex;justify-content:space-between;gap:8px;padding:3px 0;border-bottom:1px dashed var(--border);font-size:12px;}
  .kanban-field:last-of-type{border-bottom:0;}
  .kanban-field-label{color:var(--text-faint);flex:none;}
  .kanban-field-value{color:var(--text-dim);text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:62%;}
  .kanban-card-actions{display:flex;gap:6px;margin-top:9px;flex-wrap:wrap;}
  .kanban-card-actions .btn{flex:1;}
  @media (max-width: 720px){ .kanban-col{width:82vw;} }

  /* Kanban Tugas Visual dipadatkan (2026-09-10, ronde 7, diminta user:
     "terlalu besar, diperkecil, tapi jangan terlalu kecil") -- scoped ke
     .kanban-board-compact (cuma dipasang di renderVisualTasks()) supaya papan
     kanban lain (Pencairan Utama, Review Approval, dst, style sama) tidak
     ikut berubah karena tidak diminta. */
  .kanban-board-compact{gap:10px;}
  /* Ronde 45 (2026-09-26, diminta user): kolom 260px kena kepotong -- chip
     status seperti "Terkirim ke Partner" nembus keluar kartu. Dilebarkan +
     card-head dikasih flex-wrap supaya judul panjang & chip tidak pernah
     saling menimpa lagi, seberapa pun panjang teksnya. */
  .kanban-board-compact .kanban-col{width:300px;max-height:calc(100vh - 150px);}
  .kanban-board-compact .kanban-col-head{padding:7px 10px;font-size:11.5px;}
  .kanban-board-compact .kanban-col-body{padding:7px;gap:7px;}
  .kanban-board-compact .kanban-card{padding:7px 9px;border-radius:8px;}
  .kanban-board-compact .kanban-card-head{margin-bottom:4px;gap:6px;flex-wrap:wrap;}
  .kanban-board-compact .kanban-card-head .list-primary{font-size:12.5px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1 1 auto;}
  .kanban-board-compact .kanban-card-head .chip{padding:1px 7px;font-size:10px;flex:none;}
  .kanban-board-compact .kanban-field{padding:2px 0;font-size:11px;}
  .kanban-board-compact .kanban-card-actions{margin-top:6px;gap:4px;}
  .kanban-board-compact .kanban-card-actions .btn{font-size:11px;padding:5px 6px;}
  @media (max-width: 720px){ .kanban-board-compact .kanban-col{width:78vw;} }

  /* Kartu kanban Tugas Visual disederhanakan drastis (2026-09-10, ronde 8,
     diminta user lewat mockup: cuma judul + badge Subtask Type, TANPA status
     chip/baris field/tombol) -- lihat renderVisualTaskCard() di app.js. */
  .visual-task-wrap{overflow-x:auto;background:var(--panel);border:1px solid var(--border);border-radius:10px;box-shadow:var(--shadow);}
  .visual-task-table{width:100%;border-collapse:collapse;font-size:12.5px;}
  .visual-task-table th{text-align:left;padding:10px 12px;font-size:11.5px;font-weight:700;color:var(--text-faint);border-bottom:1px solid var(--border);white-space:nowrap;}
  .visual-task-table td{padding:10px 12px;border-bottom:1px solid var(--border);vertical-align:top;}
  .visual-task-table tr:last-child td{border-bottom:none;}
  .visual-task-link-cell{font-weight:700;white-space:nowrap;}
  .visual-task-row{cursor:pointer;transition:background .12s;}
  .visual-task-row:hover{background:var(--panel-2);}
  .visual-task-count-cell{white-space:nowrap;font-size:11.5px;font-weight:600;color:var(--text-faint);}
  .visual-task-masuk-cell{white-space:nowrap;font-size:11.5px;color:var(--text-faint);}
  .visual-modal-topbar-side{display:flex;justify-content:flex-end;margin-bottom:14px;}
  .visual-modal-checklist-heading{font-size:12.5px;font-weight:700;color:var(--text-faint);margin:16px 0 8px;}
  .visual-modal-checklist{display:flex;flex-direction:column;gap:4px;}
  .visual-checklist-row{display:flex;align-items:center;gap:10px;padding:7px 8px;border-radius:8px;background:var(--panel-2);border:1px solid var(--border);}
  .visual-checklist-row.is-done{opacity:.65;}
  .visual-checklist-box{flex:none;width:20px;font-size:16px;line-height:1;cursor:pointer;color:var(--text-faint);}
  .visual-checklist-box.is-done{cursor:default;color:var(--success);}
  .visual-checklist-label{flex:1;font-size:12.5px;font-weight:600;color:var(--text);cursor:pointer;}
  .visual-checklist-label:hover{text-decoration:underline;color:var(--accent);}
  .kanban-card.kanban-card-mini{display:flex;align-items:center;justify-content:space-between;gap:10px;}
  .kanban-card-mini-title{font-size:12.5px;font-weight:600;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
  .kanban-card-mini-badge{flex:none;border-radius:6px;padding:2px 8px;font-size:11px;font-weight:600;}
  .kanban-card-mini-badge.success{background:var(--success-soft);color:var(--success);}
  .kanban-card-mini-badge.warning{background:var(--warning-soft);color:var(--warning);}
  .kanban-card-mini-badge.critical{background:var(--critical-soft);color:var(--critical);}
  .kanban-card-mini-badge.info{background:var(--info-soft);color:var(--info);}
  .kanban-card-mini-badge.accent{background:var(--accent-soft);color:var(--accent);}
  .kanban-card-mini-badge.neutral{background:var(--neutral-soft);color:var(--neutral);}

  /* ---------- Tugas Pencairan Utama, flat list (ronde 11) ---------- */
  .pencairan-task-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px;}
  .overdue-pencairan-card{border-left:4px solid var(--warning);}
  .overdue-pencairan-note{font-size:12px;color:var(--warning);margin-top:6px;}

  /* ---------- Dashboard ---------- */
  .dash-search{max-width:320px;margin-bottom:14px;}
  .stat-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px;margin-bottom:18px;}
  .stat-card{background:var(--panel);border:1px solid var(--border);border-top:3px solid var(--accent);border-radius:10px;padding:12px 14px;box-shadow:var(--shadow);transition:transform .12s,box-shadow .12s;}
  .stat-card:hover{transform:translateY(-2px);box-shadow:0 4px 10px rgba(30,28,25,.10),0 16px 32px -16px rgba(30,28,25,.22);}
  /* Aksen gantian pink/navy per kartu dalam 1 baris (2026-09-09) -- murni
     visual, tidak butuh perubahan JS karena diatur lewat urutan anak. */
  .stat-row .stat-card:nth-child(even){border-top-color:var(--accent-2);}
  .stat-card .sc-label{font-size:11px;color:var(--text-faint);text-transform:uppercase;letter-spacing:.03em;}
  .stat-card .sc-value{font-family:var(--font-mono);font-size:19px;font-weight:600;margin-top:2px;}
  .stat-card-critical{border-color:var(--critical);background:var(--critical-soft);}
  .stat-card-critical .sc-value{color:var(--critical);}
  .stat-row .stat-card.stat-card-critical{border-top-color:var(--critical);}
  .dash-section{margin:24px 0 10px;color:var(--accent-2);}
  .dash-subhead{font-size:12px;font-weight:600;color:var(--text-dim);text-transform:uppercase;letter-spacing:.03em;margin:16px 0 8px;}

  /* ---------- "Semua hal bisa diklik" di Dashboard (2026-09-26, item 3) ----------
     Kartu statistik & angka rekap yang sekarang bisa diklik utk buka daftar
     campaign terkait (lihat statCard()/clmCell()/openCampaignListModal() di
     app.js) dikasih penanda visual jelas: cursor pointer + label kecil
     "klik utk detail" yang muncul pas di-hover, supaya user tahu ini
     BEDA dari kartu statis biasa tanpa perlu coba klik dulu. */
  .stat-card-clickable{cursor:pointer;position:relative;}
  .stat-card-clickable::after{content:'Klik utk detail →';position:absolute;right:14px;bottom:8px;font-size:9.5px;color:var(--accent);opacity:0;transition:opacity .12s;}
  .stat-card-clickable:hover::after{opacity:1;}
  .stat-card-clickable:hover{border-color:var(--accent);}
  .clm-link{color:var(--accent-2);cursor:pointer;text-decoration:underline;text-decoration-style:dotted;text-underline-offset:2px;}
  .clm-link:hover{color:var(--accent);text-decoration-style:solid;}

  /* Modal "Daftar Campaign" generik -- openCampaignListModal() di app.js. */
  .clm-body{max-height:56vh;overflow-y:auto;display:flex;flex-direction:column;gap:8px;margin:12px 0;padding-right:2px;}
  .clm-row{display:flex;align-items:center;justify-content:space-between;gap:10px;background:var(--panel-2);border:1px solid var(--border);border-radius:9px;padding:9px 12px;cursor:pointer;transition:border-color .12s,background .12s;}
  .clm-row:hover{border-color:var(--accent);background:var(--accent-soft);}
  .clm-row-main{display:flex;flex-direction:column;gap:2px;min-width:0;}
  .clm-row-sub{font-size:11.5px;color:var(--text-faint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}

  /* Task Macet/CL Macet/Seharusnya Pencairan (2026-09-26, item 5, diminta
     user: "jangan dibuat tampil semuanya, buat dropdown saja atau buat pop
     up") -- <details>/<summary> native, default tertutup. Summary distyle
     supaya terlihat jelas sebagai tombol yang bisa diklik (bukan teks biasa),
     dengan sedikit border/background biar tidak polos. */
  .dash-collapsible{margin:4px 0 16px;}
  .dash-collapsible summary{cursor:pointer;list-style:none;font-size:13px;font-weight:600;color:var(--accent-2);background:var(--panel-2);border:1px solid var(--border);border-radius:9px;padding:9px 14px;user-select:none;}
  .dash-collapsible summary::-webkit-details-marker{display:none;}
  .dash-collapsible summary::before{content:'▸ ';display:inline-block;transition:transform .12s;}
  .dash-collapsible[open] summary::before{transform:rotate(90deg);}
  .dash-collapsible[open] summary{border-radius:9px 9px 0 0;border-bottom:0;}
  .dash-collapsible .table-wrap{margin-top:0;border-top:0;border-top-left-radius:0;border-top-right-radius:0;}
  .dash-collapsible summary:hover{border-color:var(--accent);}

  /* Panel "Atur Akses Menu" (2026-09-26, item 1) -- renderMenuPermissions(). */
  .menuperm-role{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:14px 16px;margin-bottom:14px;box-shadow:var(--shadow);}
  .menuperm-role h4{margin:0 0 10px;color:var(--accent-2);}
  .menuperm-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px 16px;}
  .menuperm-item{display:flex;align-items:center;gap:8px;font-size:13px;cursor:pointer;padding:4px 0;}
  .menuperm-item input{width:16px;height:16px;cursor:pointer;flex:none;}
  /* Modal pemetaan kolom import Excel (2026-09-07) */
  .import-map-list{max-height:50vh;overflow-y:auto;display:flex;flex-direction:column;gap:8px;margin:12px 0;padding-right:4px;}
  .import-map-row{display:flex;align-items:center;gap:12px;}
  .import-map-row label{flex:0 0 190px;font-size:13px;color:var(--text-dim);}
  .import-map-row select, .import-map-row input{flex:1;min-width:0;}
  /* Modal Pratinjau Import (ronde 10, 2026-09-10, diminta user: "kasih
     pilihan baris ini mau di import atau tidak") -- toolbar Pilih
     Semua/Batal Semua + tabel baris dgn checkbox per baris. */
  .import-preview-toolbar{display:flex;align-items:center;gap:8px;margin:10px 0;}
  .import-preview-count{margin-left:auto;font-size:12px;color:var(--text-dim);}
  .import-preview-list{max-height:45vh;overflow-y:auto;overflow-x:auto;border:1px solid var(--border);border-radius:10px;margin-bottom:14px;}
  .import-preview-table{width:100%;border-collapse:collapse;font-size:12.5px;}
  .import-preview-table th{position:sticky;top:0;background:var(--panel-2);padding:7px 8px;text-align:left;font-size:11px;color:var(--text-dim);font-weight:600;border-bottom:1px solid var(--border);}
  .import-preview-table td{padding:6px 8px;border-bottom:1px solid var(--border);color:var(--text-dim);vertical-align:middle;}
  .import-preview-table tr:last-child td{border-bottom:none;}
  .import-preview-cell-link{max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
  .req-mark{color:var(--critical);}

  /* ---------- Modal ---------- */
  .modal-overlay{position:fixed;inset:0;background:rgba(20,18,16,.45);display:none;align-items:center;justify-content:center;z-index:80;padding:20px;}
  .modal-overlay.open{display:flex;}
  .modal-box{background:var(--panel);border-radius:12px;width:100%;max-width:460px;max-height:88vh;overflow-y:auto;padding:22px;box-shadow:var(--shadow);}
  .modal-box.modal-box-wide{max-width:700px;}
  /* modal-box-xwide (Ronde 44, 2026-09-26, redesign popup "Kerjakan Consent
     Letter", diminta user: "besarin lagi") -- EXTRA lebar drpd
     modal-box-wide, dipakai modal dgn layout custom sepenuhnya (bukan
     field-grid 2 kolom otomatis) -- lihat opts.xwide di openModal()
     (app.js) + .cl-support-columns di bawah. */
  .modal-box.modal-box-xwide{max-width:980px;}
  .field-grid.field-grid-2col{display:grid;grid-template-columns:1fr 1fr;gap:4px 18px;}
  /* Field yang butuh selebar 2 kolom (textarea, checklist, pemisah section)
     dilebarkan lewat grid-column, sisanya (select/input biasa) natural 1
     kolom -- lihat field-item-wide di fieldInputHtml() (app.js). */
  .field-grid-2col .field-item-wide,
  .field-grid-2col .field-item-checklist,
  .field-grid-2col .field-section-header{grid-column:1/-1;}
  @media (max-width: 640px){
    .modal-box.modal-box-wide{max-width:94vw;}
    .modal-box.modal-box-xwide{max-width:96vw;}
    .field-grid.field-grid-2col{grid-template-columns:1fr;}
  }
  .modal-box h3{font-size:16px;margin-bottom:2px;}
  .modal-sub{font-size:12.5px;color:var(--text-dim);margin-bottom:14px;}
  .modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:16px;}
  /* opts.hideActions (ronde 10) -- dipakai openEditVisualTaskModal() yang
     pindahkan tombol aksi ke topbar atas, jadi modal-actions bawaan di
     bawah (Batal+submit) disembunyikan supaya tidak dobel. */
  .modal-hide-actions .modal-actions{display:none;}
  /* Topbar tombol aksi di ATAS modal (ronde 10, 2026-09-10, diminta user
     "mulai dikerjakannya diletak dibagian atasnya") -- dipakai
     openEditVisualTaskModal(), disisipkan lewat extraHtml sebelum field-grid. */
  .visual-modal-topbar{display:flex;gap:8px;margin-bottom:14px;}
  .visual-modal-topbar .btn{flex:1;}
  .visual-modal-topbar #visualTopCancelBtn{flex:none;padding-left:18px;padding-right:18px;}
  /* Info read-only label+value SEBARIS, bukan bertumpuk ke bawah (ronde 10,
     2026-09-10, diminta user "ubah ke samping saja") -- dipakai
     openEditVisualTaskModal() lewat class tambahan di field-grid, TIDAK
     memengaruhi field-grid/.ro-value di tempat lain (Data Master, tab
     Konten, dst -- itu semua tetap layout lama). Textarea (Catatan
     Permintaan, field-item-wide) dikecualikan -- tetap label-diatas-value
     supaya teks panjang tidak sempit. */
  .visual-info-compact .field-item{display:flex;flex-direction:row;align-items:center;justify-content:space-between;gap:10px;padding:6px 0;border-bottom:1px dashed var(--border);}
  .visual-info-compact .field-item label{margin:0;flex:none;font-size:11.5px;color:var(--text-dim);font-weight:600;}
  .visual-info-compact .field-item .ro-value{flex:1;min-width:0;text-align:right;padding:0;border-bottom:none;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
  .visual-info-compact .field-item.field-item-wide{flex-direction:column;align-items:stretch;}
  .visual-info-compact .field-item.field-item-wide .ro-value{text-align:left;white-space:normal;overflow:visible;text-overflow:clip;}

  /* ---------- Toast ---------- */
  .toast{position:fixed;bottom:22px;left:50%;transform:translateX(-50%) translateY(20px);background:var(--text);color:var(--bg);padding:10px 18px;border-radius:8px;font-size:13px;opacity:0;pointer-events:none;transition:opacity .2s, transform .2s;z-index:100;}
  .toast.show{opacity:1;transform:translateX(-50%) translateY(0);}

  .loading-note{color:var(--text-faint);font-size:12.5px;padding:20px 0;}

  /* ---------- Tampilan Yayasan (tanpa login, ?yl=<token>) ---------- */
  /* (2026-09-25, diminta user) -- sidebar SPA biasa disembunyikan total di
     mode ini (lihat enterYayasanView() di app.js), diganti header sendiri
     di dalam #main (.yayasan-header) supaya halaman ini tidak terlihat
     seperti dashboard internal yang "kurang lengkap", tapi tampilan
     tersendiri yang memang dibuat khusus untuk partner. */
  body.yayasan-mode .sidebar{display:none;}
  .yayasan-header{padding-bottom:16px;margin-bottom:16px;border-bottom:1px solid var(--border);}
  .yayasan-partner-name{font-family:var(--font-display);font-size:20px;font-weight:700;margin:4px 0 6px;}
  /* 2 tab "Daftar Campaign"/"Approval" (2026-09-25, ronde 37, diminta user:
     tampilan yayasan disederhanakan jadi list + tab Approval terpisah,
     bukan lagi drill-down ke Data Master lengkap) -- reuse class .btn/
     .btn-primary/.btn-ghost yang sudah ada, tidak perlu style tombol baru. */
  .yayasan-tabs{display:flex;gap:8px;margin-bottom:16px;}

  /* Subtab "Tugas Consent Letter" (2026-09-26, koreksi user atas Ronde 41) --
     dipakai renderSupportTasksHome() buat tombol "Semua Tugas CL"/"CL Belum
     Balik". Pola sama dengan .yayasan-tabs di atas, cuma nama class generik
     karena dipakai halaman lain juga kalau perlu nanti. */
  .subtab-row{display:flex;gap:8px;margin-bottom:16px;flex-wrap:wrap;}

  /* ---------- Riwayat Perubahan (Superadmin, 2026-09-25) ---------- */
  /* Awalnya cuma judul tanggal polos + bullet list bawaan browser. Ronde 40
     (2026-09-26, diminta user: "UI/UX-nya terlalu biasa dan simpel... coba
     dibuat lebih bagus") -- dirombak jadi tampilan timeline vertikal:
     garis+dot gradient accent di kiri per tanggal, tiap grup jadi kartu
     (border+shadow, konsisten .table-wrap dkk), badge "Terbaru" utk grup
     paling atas, badge jumlah pembaruan, bullet custom ikon centang
     pengganti bullet bawaan. */
  .changelog-search{max-width:420px;margin-bottom:20px;}
  /* Ronde 47 (2026-09-26, diminta user: "dibuat kolom kolom aja pertanggal,
     nanti pas diklik baru muncul pop up detailnya") -- ganti timeline
     (semua poin langsung tampil, panjang ke bawah) jadi GRID kartu ringkas
     per tanggal; poin lengkapnya baru muncul di modal popup begitu
     kartunya diklik (lihat openChangelogDetail() di app.js). .changelog-items
     dipakai ulang di DALAM modal popup itu (bukan lagi di halaman utama). */
  .changelog-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:12px;}
  .changelog-tile{position:relative;background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px 18px;text-align:left;cursor:pointer;font:inherit;color:inherit;transition:border-color .12s ease, transform .12s ease;}
  .changelog-tile:hover{border-color:var(--accent);transform:translateY(-1px);}
  .changelog-tile-latest{border-color:var(--accent);box-shadow:0 1px 2px rgba(235,38,119,.08), 0 8px 24px -14px rgba(235,38,119,.35);}
  .changelog-tile-date{font-family:var(--font-display);font-size:14.5px;font-weight:700;margin-bottom:4px;padding-right:56px;}
  .changelog-tile-count{font-size:11.5px;color:var(--text-faint);font-weight:500;}
  .changelog-badge-latest{position:absolute;top:14px;right:14px;background:var(--accent);color:var(--accent-ink);font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.03em;padding:2.5px 9px;border-radius:999px;}
  .changelog-items{list-style:none;margin:0;padding:0;}
  .changelog-items li{display:flex;align-items:flex-start;gap:8px;padding:7px 0;line-height:1.5;color:var(--text);}
  .changelog-items li:not(:last-child){border-bottom:1px dashed var(--border);}
  .changelog-item-icon{flex:none;margin-top:2px;color:var(--success);}
  .changelog-empty{padding:22px 4px;}

  /* ---------- Banner "Login as" (2026-09-25) ---------- */
  /* #impersonationBar sendiri SENGAJA tidak diberi `display` di sini --
     supaya atribut `hidden` bawaan browser (display:none) tetap berlaku
     tanpa perlu diadu specificity-nya; layout flex dipasang di div
     `.impersonation-bar-inner` di DALAMNYA (lihat renderImpersonationBar()
     di app.js), sama pola dgn .gate-quote-panel/.side-foot-new-campaign. */
  .impersonation-bar{background:var(--accent-2);color:var(--accent-2-ink);}
  .impersonation-bar-inner{display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap;padding:8px 16px;font-size:12.5px;}
  .impersonation-bar-inner svg{flex:none;}
  .impersonation-bar-inner .btn{flex:none;background:#fff;color:var(--accent-2);border:none;font-weight:600;}
  .impersonation-bar-inner .btn:hover{filter:brightness(0.96);}

  /* ---------- Dashboard Pencairan interaktif (Ronde 72, 2026-10-12) ----------
     Warna grafik mengikuti entitas (Utama biru, Tambahan magenta, Konsol kuning);
     trio ini lolos validate_palette (light, all-pairs). Situs ini light-only. */
  .pcd-filters{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin:0 0 14px;}
  .pcd-flabel{margin:0;font-size:12px;color:var(--text-dim);font-weight:600;}
  .pcd-select{width:auto;min-width:170px;}
  .pcd-fnote{font-size:11.5px;color:var(--text-faint);}
  .pcd-legend{display:flex;gap:6px;flex-wrap:wrap;}
  .pcd-leg{display:inline-flex;align-items:center;gap:7px;border:1px solid var(--border);background:var(--panel);color:var(--text);border-radius:999px;padding:5px 12px;font-size:12.5px;font-weight:500;cursor:pointer;transition:opacity .12s,background .12s;}
  .pcd-leg:hover{background:var(--panel-2);}
  .pcd-leg.off{opacity:.45;}
  .pcd-leg.off .pcd-sw{background:var(--border) !important;}
  .pcd-sw{display:inline-block;width:10px;height:10px;border-radius:3px;flex:none;}
  .pcd-hero{display:grid;grid-template-columns:minmax(240px,1fr) 1.6fr;gap:12px;margin-bottom:16px;}
  .pcd-hero-full{font-size:12.5px;color:var(--text-dim);}
  .pcd-hero-main{all:unset;box-sizing:border-box;cursor:pointer;background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:16px 20px;display:flex;flex-direction:column;justify-content:center;gap:4px;box-shadow:var(--shadow);transition:transform .12s,border-color .12s;}
  .pcd-hero-main:hover,.pcd-hero-main:focus-visible{transform:translateY(-2px);border-color:var(--accent);}
  .pcd-hero-val{font-size:48px;line-height:1.1;font-weight:700;letter-spacing:-.02em;color:var(--text);}
  .pcd-hero-hint{font-size:11px;color:var(--text-faint);}
  .pcd-tiles{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;}
  .pcd-tile{all:unset;box-sizing:border-box;background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:12px 14px;display:flex;flex-direction:column;gap:3px;box-shadow:var(--shadow);}
  button.pcd-tile{cursor:pointer;transition:transform .12s,border-color .12s,opacity .12s;}
  button.pcd-tile:hover,button.pcd-tile:focus-visible{transform:translateY(-2px);border-color:var(--accent);}
  .pcd-tile.off{opacity:.5;}
  .pcd-tile-label{font-size:11px;color:var(--text-faint);text-transform:uppercase;letter-spacing:.03em;display:flex;align-items:center;gap:6px;}
  .pcd-tile-val{font-size:19px;font-weight:600;color:var(--text);}
  .pcd-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;}
  .pcd-card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:14px 16px 16px;box-shadow:var(--shadow);min-width:0;}
  .pcd-wide{grid-column:1 / -1;}
  .pcd-card-head{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;margin-bottom:10px;}
  .pcd-card-head h3{margin:0;font-size:15px;}
  .pcd-sub{font-size:11.5px;color:var(--text-faint);}
  .pcd-svg{width:100%;height:auto;display:block;overflow:visible;}
  .pcd-gl{stroke:var(--border);stroke-width:1;}
  .pcd-axis{fill:var(--text-faint);font-size:11px;font-family:var(--font-body);}
  .pcd-peak{fill:var(--text);font-size:11.5px;font-weight:600;font-family:var(--font-body);}
  .pcd-hit{fill:transparent;cursor:pointer;outline:none;}
  .pcd-hit:hover,.pcd-hit:focus-visible{fill:rgba(17,59,173,.06);}
  .pcd-seg{pointer-events:all;cursor:pointer;transition:opacity .12s;}
  .pcd-chart:hover .pcd-seg{opacity:.85;}
  .pcd-chart .pcd-seg:hover{opacity:1;}
  .pcd-stack{display:flex;gap:2px;height:30px;margin:6px 0 14px;}
  .pcd-stack-seg{all:unset;box-sizing:border-box;cursor:pointer;min-width:6px;border-radius:4px;transition:filter .12s;}
  .pcd-stack-seg:hover,.pcd-stack-seg:focus-visible{filter:brightness(1.12);outline:2px solid var(--text);outline-offset:1px;}
  .pcd-comp-rows{display:flex;flex-direction:column;gap:2px;}
  .pcd-comp-row{all:unset;box-sizing:border-box;cursor:pointer;display:grid;grid-template-columns:14px 1fr auto 56px;gap:8px;align-items:center;padding:6px 8px;border-radius:7px;}
  .pcd-comp-row:hover,.pcd-comp-row:focus-visible{background:var(--panel-2);}
  .pcd-comp-val{font-weight:600;}
  .pcd-comp-pct{text-align:right;color:var(--text-dim);}
  .pcd-hrow{all:unset;box-sizing:border-box;cursor:pointer;display:grid;grid-template-columns:minmax(90px,170px) 1fr 38px;gap:10px;align-items:center;padding:4px 6px;border-radius:7px;width:100%;}
  .pcd-hrow:hover,.pcd-hrow:focus-visible{background:var(--panel-2);}
  .pcd-hrow[disabled]{cursor:default;opacity:.55;}
  .pcd-hrow[disabled]:hover{background:transparent;}
  .pcd-hlabel{font-size:12.5px;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
  .pcd-htrack{display:flex;gap:2px;height:14px;align-items:center;}
  .pcd-hbar,.pcd-mseg{display:block;height:14px;border-radius:0 4px 4px 0;min-width:2px;}
  .pcd-mseg:first-child{border-radius:0;}
  .pcd-hval{text-align:right;font-weight:600;font-size:12.5px;}
  .pcd-hval-wide{min-width:58px;}
  .pcd-mrow{grid-template-columns:minmax(110px,190px) 1fr 64px;}
  .pcd-stage-cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:18px 28px;}
  .pcd-stage-title{font-size:12px;font-weight:600;color:var(--text-dim);text-transform:uppercase;letter-spacing:.03em;margin-bottom:6px;display:flex;align-items:center;gap:7px;}
  .pcd-tip{position:fixed;z-index:9999;display:none;pointer-events:none;background:#1e1c19;color:#fff;border-radius:8px;padding:8px 10px;font-size:12px;box-shadow:0 8px 24px rgba(0,0,0,.25);max-width:280px;}
  .pcd-tip-title{font-weight:600;margin-bottom:4px;}
  .pcd-tip-row{display:flex;align-items:center;gap:6px;line-height:1.55;}
  .pcd-tip-key{width:12px;height:3px;border-radius:2px;flex:none;}
  .pcd-tip-label{color:#cfcac0;}
  @media (max-width:820px){
    .pcd-hero{grid-template-columns:1fr;}
    .pcd-grid{grid-template-columns:minmax(0,1fr);}
    .pcd-tiles{grid-template-columns:repeat(2,minmax(0,1fr));}
    .pcd-hero-val{font-size:36px;}
    .pcd-hrow{grid-template-columns:minmax(80px,120px) 1fr 34px;}
  }

  /* ===== Dashboard Manajemen interaktif (2026-10-12, Ronde 73) ===== */
  .mgd-rows{display:flex;flex-direction:column;gap:3px;}
  .mgd-prow{grid-template-columns:minmax(90px,130px) 1fr 92px;}
  .mgd-pct{font-weight:400;color:var(--text-faint);font-size:11.5px;margin-left:2px;}
  .mgd-row{display:grid;grid-template-columns:minmax(90px,150px) 1fr 44px;gap:10px;align-items:center;padding:3px 6px;border-radius:7px;}
  .mgd-row:hover{background:var(--panel-2);}
  .mgd-name{all:unset;box-sizing:border-box;cursor:pointer;font-size:12.5px;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
  .mgd-name:hover,.mgd-name:focus-visible{text-decoration:underline;}
  .mgd-track{position:relative;display:flex;gap:2px;height:20px;align-items:center;}
  .mgd-seg{all:unset;box-sizing:border-box;cursor:pointer;height:20px;min-width:3px;display:flex;align-items:center;justify-content:center;color:#fff;font-size:11px;font-weight:600;transition:filter .12s;}
  .mgd-seg:first-child{border-radius:0 0 0 0;}
  .mgd-seg:last-of-type{border-radius:0 4px 4px 0;}
  .mgd-seg:hover,.mgd-seg:focus-visible{filter:brightness(1.12);outline:2px solid var(--text);outline-offset:1px;}
  .mgd-thr{position:absolute;top:-3px;bottom:-3px;width:0;border-left:2px dashed var(--text-dim);pointer-events:none;}
  .mgd-thr-key{display:inline-block;width:0;height:12px;border-left:2px dashed var(--text-dim);}
  .mgd-legend{display:flex;flex-wrap:wrap;gap:4px 14px;margin:2px 0 8px;font-size:12px;color:var(--text-dim);}
  .mgd-key{display:inline-flex;align-items:center;gap:6px;}
  .mgd-chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px;}
  .mgd-seg-toggle{display:inline-flex;border:1px solid var(--border);border-radius:999px;overflow:hidden;margin:0 0 8px;}
  .mgd-seg-toggle button{all:unset;box-sizing:border-box;cursor:pointer;padding:5px 12px;font-size:12px;color:var(--text-dim);}
  .mgd-seg-toggle button[aria-pressed="true"]{background:var(--accent);color:#fff;}
  .mgd-seg-toggle button:focus-visible{outline:2px solid var(--text);outline-offset:-2px;}
  @media (max-width:820px){
    .mgd-prow{grid-template-columns:minmax(70px,100px) 1fr 80px;}
    .mgd-row{grid-template-columns:minmax(70px,100px) 1fr 38px;}
  }

  /* ===== Menu Akun (Ronde 75, 2026-10-13) ===== */
  .account-info{display:flex;flex-direction:column;gap:4px;margin:4px 0 2px;font-size:13px;}
  .account-info .cell-muted{display:inline-block;min-width:48px;}

  /* ===== Banner gagal sinkron (Ronde 75, 2026-10-13) ===== */
  .sync-banner{position:fixed;top:10px;left:50%;transform:translateX(-50%);z-index:9000;max-width:min(720px,calc(100vw - 24px));display:flex;align-items:center;gap:12px;background:#fff4e5;border:1px solid #f0b35a;color:#6b3f00;border-radius:10px;padding:9px 12px;box-shadow:0 8px 24px rgba(0,0,0,.15);font-size:12.5px;}
  .sync-banner[hidden]{display:none;}
  .sync-banner-text{flex:1;min-width:0;overflow-wrap:anywhere;}

/* Ronde 76 (2026-10-13) -- Lengkapi Consent Letter dari Master Sheet */
.legacy-fill-box{border:1px solid var(--border);border-radius:10px;padding:12px 14px;margin:12px 0;background:var(--panel-2);}
.legacy-fill-box h4{margin:0 0 4px;font-size:14px;}
.legacy-fill-box .import-preview-list{max-height:30vh;background:var(--panel,#fff);margin-top:8px;}
.legacy-fill-box .modal-actions{margin-top:0;}

/* Ronde 77 (2026-10-13) -- Tab Support: riwayat berupa kartu per entri */
.sup-wrap{display:flex;flex-direction:column;gap:14px;max-width:980px;}
.sup-list-head{display:flex;align-items:baseline;gap:10px;margin-top:4px;}
.sup-list-head h3{font-size:15px;margin:0;}
.sup-count{font-size:12px;color:var(--text-faint);}
.sup-card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:14px 16px;box-shadow:var(--shadow);}
.sup-card-editing{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft);}
.sup-card-head{display:flex;align-items:center;flex-wrap:wrap;gap:10px;margin-bottom:10px;}
.sup-meta{font-size:12px;color:var(--text-dim);margin-right:auto;}
.sup-actions{display:flex;gap:6px;}
.sup-note{background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:8px 10px;margin-bottom:12px;font-size:13px;line-height:1.5;white-space:pre-wrap;word-break:break-word;}
.sup-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:12px 18px;}
.sup-item{min-width:0;}
.sup-label{font-size:11px;font-weight:600;color:var(--text-faint);text-transform:uppercase;letter-spacing:.03em;margin-bottom:2px;}
.sup-value{font-size:13.5px;color:var(--text);word-break:break-word;}
.sup-sub-title{font-size:12px;font-weight:600;color:var(--text-dim);margin:14px 0 8px;padding-top:10px;border-top:1px dashed var(--border);}
.sup-details{margin-top:12px;border-top:1px dashed var(--border);padding-top:8px;}
.sup-details summary,.sup-add summary{cursor:pointer;font-size:12.5px;font-weight:600;color:var(--accent-2);padding:4px 0;}
.sup-details .sup-grid{margin-top:8px;}
.sup-add{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:8px 14px;}
.sup-add[open] summary{margin-bottom:8px;}
.sup-form{position:static;box-shadow:none;border:none;padding:0;background:transparent;}
.sup-wrap > .sup-form{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:16px;box-shadow:var(--shadow);}
.sup-form .field-section-header{margin-top:6px;}

/* Ronde 79 (2026-10-13) -- perapian kartu angka & modal daftar */
.stat-card{min-width:0;}
.stat-card .sc-value{overflow-wrap:anywhere;line-height:1.25;}
.stat-card .sc-sub{display:block;font-family:var(--font-body);font-size:12px;font-weight:500;margin-top:2px;}
.stat-row.stat-row-wide{grid-template-columns:repeat(auto-fit,minmax(230px,1fr));}
.stat-row.stat-row-wide .stat-card .sc-value{font-size:17px;}
/* Isi modal berdaftar (.clm-body) = flex kolom + overflow:auto. Tanpa ini .table-wrap (overflow:hidden)
   ikut menyusut mengikuti tinggi kotak sehingga barisnya terpotong dan tidak bisa di-scroll. */
.clm-body > .table-wrap{flex:0 0 auto;}

/* Ronde 80 — filter fleksibel Arsip Pencairan + daftar temuan */
.arsip-filters{margin:10px 0 8px;}
.arsip-filters .af-row{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:12px;}
.af-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:10px 14px;}
.af-field{display:flex;flex-direction:column;gap:4px;min-width:0;}
.af-field > span{font-size:11px;font-weight:600;color:var(--text-dim);text-transform:uppercase;letter-spacing:.03em;}
.af-input{width:100%;max-width:none;min-width:0;box-sizing:border-box;margin:0;}
.af-actions{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:10px;}
.arsip-temuan{margin:4px 0 18px;}

/* Ronde 82 — Daftar Campaign (Supply/Manajemen): pilihan tampilan + cari */
.home-toolbar{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin:0 0 14px;}
.home-toolbar .dash-search{margin:0;flex:1 1 260px;max-width:340px;}
.home-seg{display:inline-flex;gap:6px;}

/* Ronde 83 — sidebar: lencana lembut, grup menu (accordion), bagian bawah ringkas */
.side-badge.urgent{background:var(--critical);color:#fff;}
.side-item.active .side-badge:not(.urgent){background:#fff;color:var(--accent);}
.role-badge{margin-bottom:10px;}
.side-groups{margin-top:8px;padding-top:8px;border-top:1px solid var(--border);display:flex;flex-direction:column;gap:2px;}
.side-group-head{font-weight:600;font-size:12.5px;color:var(--text-dim);}
.side-group-head .side-item-icon{width:16px;height:16px;}
.side-group-head:hover{color:var(--text);}
.side-group-head.open{color:var(--text);background:var(--panel-2);}
.side-group-body{margin:2px 0 6px 17px;padding-left:5px;border-left:1px solid var(--border);display:flex;flex-direction:column;gap:2px;}
.side-group-body .side-item-sub{padding-left:10px;}
.side-group-body .side-item.active::before{left:-6px;}
.side-item-sub .side-item-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.side-foot{gap:8px;}
.side-tools{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;}
.side-tool{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;padding:7px 2px 6px;border:1px solid var(--border);background:transparent;border-radius:8px;cursor:pointer;color:var(--text-dim);font-size:10.5px;font-family:inherit;line-height:1.1;}
.side-tool:hover{background:var(--panel-2);color:var(--text);}
.side-tool-exit:hover{color:var(--critical);border-color:var(--critical);}
.side-tool svg{flex:none;}
.side-group-body{margin-left:12px;}
.side-group-body .side-item-icon{display:none;}
.side-group-body .side-item-sub{padding-left:12px;}
.side-foot-new-campaign[hidden]{display:none;}

/* Ronde 84 — Daftar Campaign minimalis: pil link, menu ⋯, toolbar rapi */
.campaign-list th{background:transparent;text-transform:none;font-weight:600;color:var(--text-faint);padding:10px 12px;font-size:11.5px;}
.campaign-list td{padding:9px 12px;}
.campaign-list-wrap{box-shadow:none;}
.list-sub{font-size:11.5px;color:var(--text-faint);font-weight:400;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:1px;}
.link-pills{display:flex;gap:3px;flex-wrap:nowrap;}
.link-pill{display:inline-block;padding:1px 8px;border:1px solid var(--border);border-radius:999px;font-size:11px;font-weight:500;color:var(--text-dim);background:transparent;text-decoration:none;line-height:1.5;}
a.link-pill:hover{border-color:var(--accent);color:var(--accent);}
.link-pill.off{color:var(--text-faint);opacity:.45;border-style:dashed;}
.row-menu-btn{border:none;background:transparent;color:var(--text-faint);font-size:18px;line-height:1;padding:2px 8px;border-radius:6px;cursor:pointer;}
.row-menu-btn:hover{background:var(--panel-2);color:var(--text);}
.row-menu-pop{position:fixed;z-index:2000;min-width:170px;background:var(--panel);border:1px solid var(--border);border-radius:10px;box-shadow:0 8px 24px rgba(0,0,0,.14);padding:4px;display:flex;flex-direction:column;}
.row-menu-item{border:none;background:transparent;text-align:left;padding:8px 12px;font-size:13px;color:var(--text);border-radius:6px;cursor:pointer;}
.row-menu-item:hover{background:var(--panel-2);}
.row-menu-item.danger{color:var(--critical);}
.home-actions .btn{white-space:nowrap;}
.home-seg .seg-btn{border:1px solid var(--border);background:transparent;color:var(--text-dim);padding:6px 14px;border-radius:8px;font-size:13px;cursor:pointer;}
.home-seg .seg-btn.on{background:var(--accent-soft);color:var(--accent);border-color:var(--accent);font-weight:600;}
.home-toolbar select{padding:7px 12px;border:1px solid var(--border);border-radius:8px;background:var(--panel);color:var(--text);font-size:13px;}
@media (min-width:881px){.home-new-btn{display:none;}}

/* Ronde 84 — Data Master minimalis */
.line-icon{flex:none;vertical-align:-3px;}
.btn-icon-text{display:inline-flex;align-items:center;gap:6px;}
.master-flags-row{display:flex;flex-wrap:wrap;align-items:center;gap:4px 18px;width:100%;order:3;margin-top:-2px;}
.mflag{display:inline-flex;align-items:baseline;gap:6px;font-size:12px;}
.mflag-k{color:var(--text-faint);}
.mflag-v{font-weight:600;color:var(--text-dim);}
.mflag-v.on{color:var(--success);}
.mflag-v.off{color:var(--text-faint);font-weight:500;}
.form-panel-solo{box-shadow:none;}
.request-block{border-bottom:1px solid var(--border);padding-bottom:18px;margin-bottom:20px;}
.request-block h4,.dash-subhead{font-size:11.5px;font-weight:600;text-transform:none;letter-spacing:0;color:var(--text-faint);margin:0 0 10px;}
.dash-subhead{margin:26px 0 10px;}
.request-btn{background:transparent;padding:8px 12px;border-radius:8px;font-weight:500;gap:8px;}
.request-btn:hover{border-color:var(--accent);background:var(--accent-soft);transform:none;}
.request-btn-icon{width:auto;height:auto;background:none;border-radius:0;font-size:inherit;color:var(--text-faint);}
.request-btn:hover .request-btn-icon{color:var(--accent);}
.request-row{grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:10px 10px;}
.req-status-note.req-status-done{color:var(--text-faint);}
.field-item-group{background:transparent;border:none;border-top:1px solid var(--border);border-radius:0;padding:10px 0 0;}
.field-item-group > label{font-weight:600;color:var(--text);}
.master-ro-groups{width:380px;gap:16px 22px;}
.master-ro-layout{gap:32px;}
.master-ro-fields.field-grid{column-gap:28px;}
.master-ro-fields.field-grid .field-item{margin-bottom:12px;}
.team-summary-grid{gap:10px;}
.team-summary-card{box-shadow:none;background:transparent;border:1px solid var(--border);}
.team-summary-card:hover{border-color:var(--accent);background:var(--accent-soft);}
.tsc-title{font-weight:600;}
.tsc-title .line-icon{color:var(--text-faint);}
.tsc-hint{display:none;}
.tsc-empty{font-style:normal;}
.kanban-field{border-bottom:1px solid transparent;}

/* Ronde 84 — tab tim: kartu riwayat & judul bagian lebih tenang */
.entry-cards-wrap{display:flex;flex-direction:column;gap:12px;max-width:980px;}
.entry-card-title{font-weight:600;font-size:14px;color:var(--text);}
.sup-card{box-shadow:none;}
.sup-label{text-transform:none;letter-spacing:0;font-weight:500;}
.konten-context-block h4,.cl-support-col h4{font-size:11.5px;font-weight:600;text-transform:none;letter-spacing:0;color:var(--text-faint);}
.table-wrap{box-shadow:none;}
.campaign-list-wrap{box-shadow:none;}
.konten-context-block h4,.konten-task-heading,.cl-support-col h4{font-size:11.5px;font-weight:600;text-transform:none;letter-spacing:0;color:var(--text-faint);margin:0 0 10px;}
.form-panel .table-wrap{margin-top:22px;}
.table-wrap th{text-transform:none;letter-spacing:0;font-weight:600;color:var(--text-faint);}
.konten-context-block{border-bottom:1px solid var(--border);margin-bottom:20px;padding-bottom:18px;}

/* Ronde 85 — Daftar Campaign: baris 1 garis, aksen status, lebih lega & tidak monoton */
.campaign-list-wrap{border:none;background:transparent;border-radius:0;overflow-x:auto;}
.campaign-list{border-collapse:separate;border-spacing:0 3px;}
.campaign-list th{padding:4px 12px 6px;border-bottom:none;font-size:11px;font-weight:600;color:var(--text-faint);}
.campaign-list td{padding:7px 12px;border-bottom:none;background:var(--panel);}
.campaign-list td:first-child{border-radius:8px 0 0 8px;box-shadow:inset 3px 0 0 var(--neutral);}
.campaign-list td:last-child{border-radius:0 8px 8px 0;}
.campaign-list-row.row-tone-success td:first-child{box-shadow:inset 3px 0 0 var(--success);}
.campaign-list-row.row-tone-warning td:first-child{box-shadow:inset 3px 0 0 var(--warning);}
.campaign-list-row.row-tone-critical td:first-child{box-shadow:inset 3px 0 0 var(--critical);}
.campaign-list-row.row-tone-info td:first-child{box-shadow:inset 3px 0 0 var(--info);}
.campaign-list-row.row-tone-accent td:first-child{box-shadow:inset 3px 0 0 var(--accent);}
.campaign-list-row:hover td,.campaign-list-row:focus td{background:var(--accent-soft);}
.campaign-list-row:last-child td{border-bottom:none;}
.cell-partner{color:var(--text-dim);}
.list-primary{font-weight:600;}
.campaign-list td .chip{background:transparent;padding:0;font-weight:600;}
.campaign-list-row .link-pill{border-color:transparent;background:var(--panel-2);}
.campaign-list-row .link-pill.off{background:transparent;border:1px dashed var(--border);}
.home-toolbar select,.home-toolbar .home-month-filter{width:auto;max-width:220px;min-width:150px;flex:0 0 auto;}

/* Ronde 85 — Data Master 3 kolom kelompok */
.master-3col{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;align-items:start;}
.master-3col.master-2col{grid-template-columns:repeat(2,minmax(0,1fr));}
@media (max-width:1100px){.master-3col{grid-template-columns:repeat(2,minmax(0,1fr));}}
@media (max-width:720px){.master-3col,.master-3col.master-2col{grid-template-columns:1fr;}}
.mcard{background:var(--panel-2);border-radius:12px;padding:12px 16px 8px;min-width:0;}
.mcard-title{margin:0 0 4px;font-size:13px;font-weight:700;color:var(--text);}
.msub{margin:10px 0 0;font-size:11px;font-weight:600;color:var(--accent);letter-spacing:.02em;}
.mrow{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:6px 0;border-bottom:1px solid var(--border);font-size:12.5px;min-height:20px;}
.mrow:last-child{border-bottom:none;}
.mrow-k{color:var(--text-faint);flex:none;}
.mrow-v{min-width:0;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text);}
.mrow-v .link-chip{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block;vertical-align:middle;}
.tsl{display:flex;flex-direction:column;}
.tsl-row{display:grid;grid-template-columns:1fr auto;grid-template-areas:"name chip" "detail detail";gap:1px 10px;padding:8px 8px;margin:0 -8px;border-bottom:1px solid var(--border);border-radius:8px;cursor:pointer;}
.tsl-row:last-child{border-bottom:none;}
.tsl-row:hover,.tsl-row:focus{background:var(--accent-soft);outline:none;}
.tsl-name{grid-area:name;display:flex;align-items:center;gap:8px;font-weight:600;font-size:13px;}
.tsl-name .line-icon{color:var(--text-faint);}
.tsl-chip{grid-area:chip;justify-self:end;}
.tsl-detail{grid-area:detail;font-size:11.5px;color:var(--text-faint);padding-left:23px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.panel-head{margin-bottom:8px;}
.form-panel-solo .request-block{margin-bottom:14px;padding-bottom:12px;}
.form-panel-solo .request-btn-wrap{gap:2px;}
.form-panel-solo .req-status-note{font-size:10.5px;}
.form-panel-solo .request-btn{padding:6px 10px;font-size:12px;}

/* Ronde 86 — kotak centang kecil, judul campaign utuh */
.campaign-list td:nth-child(1),.campaign-list td:nth-child(2){white-space:normal;overflow-wrap:anywhere;text-overflow:clip;line-height:1.3;}
.campaign-list td.col-tick{text-align:center;}
.tick{display:inline-flex;align-items:center;justify-content:center;width:17px;height:17px;border-radius:5px;border:1.5px solid var(--border);color:transparent;vertical-align:middle;box-sizing:border-box;}
.tick-ok{background:var(--success);border-color:var(--success);color:#fff;}
.tick-prog{background:var(--warning-soft);border-color:var(--warning);color:var(--warning);}
.tick-no{background:transparent;}
.tick-legend{margin-left:auto;display:inline-flex;align-items:center;gap:6px;font-size:11.5px;color:var(--text-faint);}
.tick-legend .tick{width:14px;height:14px;border-radius:4px;margin-left:6px;}
.tick-legend .tick:first-child{margin-left:0;}
.tick-no{border-color:var(--text-faint);opacity:.45;}

/* Ronde 86 — status Data Master berikon + menu Kirim Request */
.master-flags-row{gap:8px;margin-top:2px;}
.flagc{display:inline-flex;align-items:center;gap:7px;padding:4px 11px 4px 8px;border-radius:999px;font-size:12px;line-height:1.3;border:1px solid transparent;}
.flagc .tick{width:15px;height:15px;border-radius:4px;opacity:1;}
.flagc-k{font-weight:600;}
.flagc-v{font-weight:500;opacity:.85;}
.flagc-ok{background:var(--success-soft);color:var(--success);}
.flagc-prog{background:var(--warning-soft);color:var(--warning);}
.flagc-no{background:transparent;border:1px dashed var(--border);color:var(--text-faint);}
.flagc-no .tick{border-color:var(--text-faint);opacity:.5;}
.req-menu-pop{min-width:300px;}
.row-menu-item.req-item{display:flex;flex-direction:column;align-items:flex-start;gap:1px;padding:8px 12px;}
.req-item-main{display:flex;align-items:center;gap:8px;font-weight:600;font-size:13px;}
.req-item-main .line-icon{color:var(--text-faint);}
.req-item-note{font-size:11px;color:var(--text-faint);padding-left:23px;}
.row-menu-item.is-locked{opacity:.55;cursor:not-allowed;}
.row-menu-item.is-locked:hover{background:transparent;}

/* Ronde 86 — tab Riwayat Pencairan ringkas */
.stat-row-compact{grid-template-columns:repeat(6,minmax(0,1fr));gap:8px;margin-bottom:12px;}
.stat-row-compact .stat-card{border:1px solid var(--border);border-top:1px solid var(--border);box-shadow:none;padding:8px 12px;}
.stat-row-compact .stat-card:hover{transform:none;box-shadow:none;}
.stat-row-compact .sc-label{font-size:10.5px;text-transform:none;letter-spacing:0;}
.stat-row-compact .sc-value{font-size:14px;}
.pc-3col{margin-bottom:14px;}
.pcs-row{display:grid;grid-template-columns:auto 1fr;grid-template-areas:"name chip" "act act";align-items:center;gap:4px 10px;padding:8px 0;border-bottom:1px solid var(--border);}
.pcs-row:last-child{border-bottom:none;}
.pcs-name{grid-area:name;font-weight:600;font-size:13px;}
.pcs-chip{grid-area:chip;justify-self:end;}
.pcs-action{grid-area:act;font-size:12px;}
.chk{display:flex;flex-wrap:wrap;align-items:center;gap:2px 8px;padding:6px 0;border-bottom:1px solid var(--border);font-size:12.5px;}
.chk:last-child{border-bottom:none;}
.chk .tick{flex:none;}
.chk-l{flex:1 1 auto;min-width:0;}
.chk-d{flex:0 0 100%;padding-left:25px;font-size:11.5px;color:var(--text-faint);}
.kb-meta{font-size:11.5px;color:var(--text-faint);margin:6px 0 2px;}
.kb-actions{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0 6px;}
@media (max-width:1100px){.stat-row-compact{grid-template-columns:repeat(3,minmax(0,1fr));}}
.mstack{display:flex;flex-direction:column;gap:14px;min-width:0;}
.stat-row .stat-row-compact .stat-card,.stat-row-compact .stat-card:nth-child(even){border-top-color:var(--border);}

/* Ronde 87 — tombol request langsung terlihat (1 baris pil) */
.req-bar{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:2px 0 14px;padding:8px 12px;background:var(--accent-soft);border-radius:12px;}
.req-bar-label{font-size:12.5px;font-weight:700;color:var(--accent);margin-right:4px;}
.req-chip{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border:1px solid var(--accent);border-radius:999px;background:var(--panel);color:var(--accent);font-size:12.5px;font-weight:600;cursor:pointer;transition:background .12s,color .12s;}
.req-chip .line-icon{color:currentColor;}
.req-chip:hover{background:var(--accent);color:#fff;}
.req-chip:hover .tick-ok{background:#fff;border-color:#fff;color:var(--success);}
.req-chip .tick{width:14px;height:14px;border-radius:4px;}
.req-chip.is-locked{border-color:var(--border);color:var(--text-faint);cursor:not-allowed;background:transparent;}
.req-chip.is-locked:hover{background:transparent;color:var(--text-faint);}
.req-chip-flag{font-size:10.5px;font-weight:500;}

/* Ronde 88 — Data Master 4 kolom lebih rapat + kolom Kirim Request */
.master-3col.master-n4{grid-template-columns:1.15fr 1fr .95fr 1fr;gap:10px;}
.master-3col.master-n3{grid-template-columns:1.15fr 1fr .95fr;gap:10px;}
.master-3col.master-n2{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;}
@media (max-width:1180px){.master-3col.master-n4,.master-3col.master-n3{grid-template-columns:repeat(2,minmax(0,1fr));}}
@media (max-width:720px){.master-3col.master-n4,.master-3col.master-n3,.master-3col.master-n2{grid-template-columns:1fr;}}
.master-3col .mcard{padding:9px 12px 4px;border-radius:10px;}
.master-3col .mcard-title{font-size:12.5px;margin-bottom:2px;}
.master-3col .mrow{padding:3.5px 0;font-size:11.5px;gap:8px;min-height:0;}
.master-3col .msub{margin-top:7px;font-size:10.5px;}
.master-3col .mrow .chip{font-size:10.5px;padding:1px 7px;}
.master-3col .mrow .link-chip{font-size:10.5px;padding:1px 7px;}
.master-3col .tsl-row{padding:5px 6px;margin:0 -6px;}
.master-3col .tsl-name{font-size:12px;gap:6px;}
.master-3col .tsl-detail{font-size:10.5px;padding-left:21px;}
.master-3col .tsl-chip .chip{font-size:10.5px;padding:1px 7px;}
.rq-item{display:flex;flex-direction:column;gap:2px;padding:5px 0;border-bottom:1px solid var(--border);}
.rq-item:last-child{border-bottom:none;}
.rq-item .req-chip{width:100%;justify-content:flex-start;padding:6px 10px;font-size:12px;}
.rq-item .req-chip .tick{margin-left:auto;}
.rq-note{font-size:10.5px;color:var(--text-faint);padding:0 4px;}
.rq-note.rq-sent{color:var(--success);}
.rq-note.rq-lock{color:var(--warning);}
.mcard-req{background:var(--accent-soft);}
.mcard-req .mcard-title{color:var(--accent);}
.mcard-req .rq-item{border-bottom-color:rgba(0,0,0,.06);}

/* Ronde 89 — daftar tugas berbentuk list (Consent Letter, Approval, Pencairan) */
.campaign-list.task-list{min-width:760px;}
.campaign-list.task-list th:nth-child(n){width:auto;}
.campaign-list.task-list th.col-aksi{width:44px;}
.campaign-list.task-list th:nth-child(1){width:17%;}
.campaign-list.task-list th:nth-child(2){width:20%;}
.campaign-list.task-list .num,.campaign-list.task-list th.num{text-align:right;font-variant-numeric:tabular-nums;}
.campaign-list.task-list td.task-note{white-space:normal;overflow-wrap:anywhere;text-overflow:clip;color:var(--text-dim);line-height:1.35;}
.campaign-list.task-list td.task-act{text-align:right;white-space:nowrap;overflow:visible;}
.campaign-list.task-list td .chip.critical{background:var(--critical-soft);padding:1px 8px;}
.row-go{color:var(--text-faint);font-size:18px;line-height:1;}
.campaign-list-row:hover .row-go{color:var(--accent);}
.task-count{font-size:12px;color:var(--text-faint);}
.task-count-r{margin-left:auto;}
.campaign-list.task-list td:nth-child(n){background:var(--panel);}
.campaign-list.task-list .campaign-list-row:hover td{background:var(--accent-soft);}

.campaign-list.task-list.task-approval{min-width:900px;}
.campaign-list.task-list.task-approval th:nth-child(1){width:14%;}
.campaign-list.task-list.task-approval th:nth-child(2){width:15%;}
.campaign-list.task-list.task-approval th:nth-child(3){width:26%;}
.campaign-list.task-list.task-approval th:nth-child(4){width:27%;}
.campaign-list.task-list.task-approval th:nth-child(5){width:11%;}
.campaign-list.task-list.task-approval-m th:nth-child(3){width:11%;}
.campaign-list.task-list.task-approval-m th:nth-child(4){width:24%;}
.campaign-list.task-list.task-approval-m th:nth-child(5){width:24%;}
.campaign-list.task-list.task-approval-m th:nth-child(6){width:9%;}
.home-toolbar{margin-bottom:8px;}

/* ===== Ronde 90 — halaman Pencairan (Rekap Dana Konsol, Arsip, Dashboard) lebih bersih ===== */
.pcx-lead{margin:-6px 0 14px;font-size:12.5px;color:var(--text-faint);line-height:1.5;}
.pcx-lead details{display:inline;}
.pcx-lead summary{display:inline;cursor:pointer;color:var(--accent);font-weight:600;list-style:none;}
.pcx-lead summary::-webkit-details-marker{display:none;}
.pcx-lead details[open] summary{display:block;margin-top:6px;}
.pcx-lead .pcx-about{display:block;margin-top:6px;padding:10px 14px;background:var(--panel-2);border-radius:10px;color:var(--text-dim);}
.pcx-kpi{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px;margin:0 0 14px;}
.pcx-k{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:8px 12px;min-width:0;}
.pcx-k-l{font-size:11px;color:var(--text-faint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.pcx-k-v{font-size:15px;font-weight:700;color:var(--text);margin-top:1px;font-variant-numeric:tabular-nums;white-space:nowrap;}
.pcx-k-s{font-size:11px;color:var(--text-faint);margin-top:1px;}
.pcx-2col{display:grid;grid-template-columns:minmax(260px,340px) minmax(0,1fr);gap:14px;align-items:start;}
@media (max-width:1000px){.pcx-2col{grid-template-columns:1fr;}}
.pcx-card{background:var(--panel-2);border-radius:12px;padding:12px 14px;min-width:0;}
.pcx-card-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-bottom:8px;}
.pcx-card-title{margin:0;font-size:13px;font-weight:700;color:var(--text);}
.pcx-card-note{margin:0 0 8px;font-size:11.5px;color:var(--text-faint);line-height:1.45;}
.pcx-akad{padding:8px 10px;margin:0 -10px;border-radius:9px;cursor:pointer;}
.pcx-akad:hover,.pcx-akad:focus{background:var(--accent-soft);outline:none;}
.pcx-akad.on{background:var(--accent-soft);box-shadow:inset 3px 0 0 var(--accent);}
.pcx-akad-top{display:flex;justify-content:space-between;gap:10px;font-size:12.5px;}
.pcx-akad-name{font-weight:600;color:var(--text);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.pcx-akad-top strong{font-variant-numeric:tabular-nums;white-space:nowrap;}
.pcx-akad-bar{height:5px;border-radius:3px;background:var(--border);margin:6px 0 4px;overflow:hidden;}
.pcx-akad-bar span{display:block;height:100%;background:var(--accent);border-radius:3px;}
.pcx-akad-sub{font-size:11px;color:var(--text-faint);}
.pcx-total{display:flex;justify-content:space-between;gap:10px;padding:9px 0 2px;margin-top:4px;border-top:1px solid var(--border);font-size:12.5px;}
.pcx-bar{display:flex;gap:8px;flex-wrap:wrap;align-items:center;}
.pcx-bar .dash-search{margin:0;flex:1 1 200px;max-width:300px;}
.pcx-bar select{width:auto;max-width:210px;min-width:130px;flex:0 0 auto;padding:7px 12px;border:1px solid var(--border);border-radius:8px;background:var(--panel);color:var(--text);font-size:13px;}
.pcx-sum{margin:8px 0 6px;font-size:12px;color:var(--text-faint);}
.pcx-sum strong{color:var(--text);}
.pcx-wrap{overflow-x:auto;}
.pcx-table{width:100%;border-collapse:separate;border-spacing:0 3px;table-layout:fixed;min-width:640px;}
.pcx-table th{padding:4px 10px 5px;font-size:11px;font-weight:600;color:var(--text-faint);text-align:left;white-space:nowrap;}
.pcx-table td{padding:7px 10px;background:var(--panel);font-size:12.5px;color:var(--text-dim);vertical-align:middle;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.3;}
.pcx-table td:first-child{border-radius:8px 0 0 8px;box-shadow:inset 3px 0 0 var(--neutral);}
.pcx-table td:last-child{border-radius:0 8px 8px 0;}
.pcx-table .num,.pcx-table th.num{text-align:right;font-variant-numeric:tabular-nums;}
.pcx-row.tone-success td:first-child{box-shadow:inset 3px 0 0 var(--success);}
.pcx-row.tone-warning td:first-child{box-shadow:inset 3px 0 0 var(--warning);}
.pcx-row.tone-critical td:first-child{box-shadow:inset 3px 0 0 var(--critical);}
.pcx-row.tone-info td:first-child{box-shadow:inset 3px 0 0 var(--info);}
.pcx-row.tone-accent td:first-child{box-shadow:inset 3px 0 0 var(--accent);}
.pcx-row[data-action]{cursor:pointer;}
.pcx-row[data-action]:hover td,.pcx-row[data-action]:focus td{background:var(--accent-soft);outline:none;}
.pcx-table td .chip{background:transparent;padding:0;font-weight:600;}
.pcx-table td strong{color:var(--text);}
.pcx-p{color:var(--text);font-weight:600;}
.pcx-s{display:block;font-size:11px;color:var(--text-faint);overflow:hidden;text-overflow:ellipsis;}
.pcx-s a{color:var(--accent);}
.pcx-more{display:flex;justify-content:center;margin:8px 0 2px;}
.pcx-alert{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:0 0 14px;padding:9px 14px;background:var(--warning-soft);border-radius:10px;font-size:12.5px;color:var(--text);box-shadow:inset 3px 0 0 var(--warning);}
.pcx-alert-t{flex:1 1 300px;min-width:0;}
.pcx-alert-a{display:flex;gap:8px;flex-wrap:wrap;}
.pcx-ok{margin:0 0 14px;font-size:12px;color:var(--text-faint);}
.pcx-ok::before{content:'';display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--success);margin-right:7px;vertical-align:middle;}
.pcx-temuan-list{margin:-6px 0 14px;}
.pcx-filters{margin:0 0 4px;}
.pcx-adv{margin:10px 0 2px;padding:12px 14px;background:var(--panel-2);border-radius:10px;}
.pcx-adv[hidden]{display:none;}
.pcx-adv .af-actions{margin-top:10px;}
.pcx-btn-badge{display:inline-block;min-width:16px;padding:0 5px;margin-left:5px;border-radius:9px;background:var(--accent);color:#fff;font-size:10.5px;line-height:16px;text-align:center;}
.pcx-sec{margin:22px 0 10px;font-size:14px;font-weight:700;color:var(--text);}
.pcx-sec small{font-weight:400;font-size:12px;color:var(--text-faint);margin-left:8px;}
.pcx-3col{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;align-items:start;}
@media (max-width:1100px){.pcx-3col{grid-template-columns:repeat(2,minmax(0,1fr));}}
@media (max-width:720px){.pcx-3col{grid-template-columns:1fr;}}
.pcx-3col .mcard{padding:10px 14px 6px;}
.pcx-3col .mrow{font-size:12.5px;padding:6px 0;}
.pcx-3col .mrow-v strong{font-variant-numeric:tabular-nums;}
.pcx-3col .mrow-click{cursor:pointer;margin:0 -8px;padding-left:8px;padding-right:8px;border-radius:7px;}
.pcx-3col .mrow-click:hover{background:var(--accent-soft);}
.pcx-3col .mrow-click .mrow-v::after{content:' ›';color:var(--text-faint);}
.pcx-3col .msub{margin:10px 0 2px;font-size:11px;font-weight:600;color:var(--text-faint);}
.pcx-lead details{display:block;margin-top:4px;}
.pcx-lead summary{display:inline-block;}
.pcx-lead .pcx-about{margin-top:6px;}
.pcx-k[data-action]{cursor:pointer;}
.pcx-k[data-action]:hover,.pcx-k[data-action]:focus{background:var(--accent-soft);outline:none;}
.pcx-table td.wrap{white-space:normal;overflow-wrap:anywhere;}
.pcx-bar .btn{white-space:nowrap;}
.pcx-btn-badge[hidden]{display:none;}
.pcx-table a{text-decoration:none;color:var(--accent);}
.pcx-table a:hover{text-decoration:underline;}
.pcx-table a.pcx-p{color:var(--text);}
.pcx-table td.wrap a{white-space:nowrap;}
.pcx-s{white-space:nowrap;}
.pcx-tks{display:inline-flex;align-items:center;}
.pcx-tks > span{width:50px;display:inline-flex;justify-content:center;}
.pcx-tks-h > span{font-size:10px;font-weight:600;color:var(--text-faint);text-transform:none;letter-spacing:0;}
.pcx-table th.tkh{padding-left:6px;padding-right:6px;}
.pcx-table td:nth-child(4){padding-left:6px;padding-right:6px;}
.tick.tick-n{font-size:10.5px;font-weight:700;line-height:1;}
.tsl-extra{grid-column:1 / -1;display:flex;flex-direction:column;gap:1px;margin:3px 0 0 23px;padding-left:8px;border-left:2px solid var(--border);}
.tsl-amt{display:flex;justify-content:space-between;gap:8px;font-size:11px;color:var(--text-dim);}
.master-3col .tsl-amt{font-size:10.5px;}
.tsl-amt-k em{font-style:normal;color:var(--text-faint);}
.tsl-amt-v{font-variant-numeric:tabular-nums;color:var(--text);font-weight:600;white-space:nowrap;}
/* Ronde 90e: tanpa aksen warna di daftar Pencairan (semua baris netral) */
.pcx-table .pcx-row td:first-child{box-shadow:none;}
.pcx-table td .chip.neutral{color:var(--text-dim);}
.pcx-table a{color:var(--text-dim);text-decoration:underline;text-decoration-color:var(--border);text-underline-offset:2px;}
.pcx-table a:hover{color:var(--text);text-decoration-color:currentColor;}
.pcx-table a.pcx-p{text-decoration:none;color:var(--text);}
.pcx-s a{color:var(--text-dim);}

/* ============ Ronde 91: tampilan Dashboard baru (Manajemen / Supply / Support / Pencairan) ============ */
.dbx-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap;margin:0 0 16px;}
.dbx-head h2{margin:0;font-size:22px;font-weight:700;letter-spacing:-.01em;}
.dbx-sub{margin-top:2px;font-size:13px;color:var(--text-faint);}
.dbx-head-r{display:flex;gap:8px;align-items:center;}
.dbx-sec{margin:26px 0 10px;font-size:14px;font-weight:700;color:var(--text);}
.dbx-sec small{font-weight:400;font-size:12px;color:var(--text-faint);margin-left:8px;}
.dbx-attn .dbx-sec{margin-top:4px;}
/* KPI strip lebih lega dari .pcx-kpi biasa */
.dbx-kpi{grid-template-columns:repeat(auto-fit,minmax(170px,1fr));margin-bottom:16px;}
.dbx-kpi .pcx-k{padding:12px 16px;background:var(--panel-2);border:0;border-radius:12px;}
.dbx-kpi .pcx-k-l{font-size:12px;}
.dbx-kpi .pcx-k-v{font-size:22px;margin-top:3px;letter-spacing:-.01em;}
.dbx-kpi .pcx-k-s{font-size:11.5px;}
/* Perlu perhatian */
.dbx-alist{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:8px;}
.dbx-arow{display:flex;align-items:center;gap:12px;background:var(--panel-2);border-radius:12px;padding:11px 14px;cursor:pointer;min-width:0;transition:background .12s;}
.dbx-arow:hover,.dbx-arow:focus{background:var(--accent-soft);outline:none;}
.dbx-an{flex:none;min-width:34px;text-align:center;font-size:19px;font-weight:700;color:var(--accent);font-variant-numeric:tabular-nums;}
.dbx-at{display:flex;flex-direction:column;min-width:0;flex:1;}
.dbx-at b{font-size:13px;font-weight:600;color:var(--text);}
.dbx-at small{font-size:11.5px;color:var(--text-faint);line-height:1.35;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.dbx-ago{flex:none;color:var(--text-faint);font-size:18px;}
.dbx-ok{background:var(--panel-2);border-radius:12px;padding:12px 16px;font-size:13px;color:var(--text-dim);}
.dbx-attn{margin-bottom:18px;}
/* Kartu & batang */
.dbx-2col{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin-bottom:14px;align-items:start;}
@media (max-width:1000px){.dbx-2col{grid-template-columns:minmax(0,1fr);}}
.dbx-card{background:var(--panel-2);border-radius:12px;padding:14px 16px 12px;min-width:0;}
.dbx-card-h h3{margin:0;font-size:14px;font-weight:700;color:var(--text);}
.dbx-card-note{margin:2px 0 10px;font-size:11.5px;color:var(--text-faint);line-height:1.45;}
.dbx-bars{display:flex;flex-direction:column;gap:2px;}
.dbx-brow{display:grid;grid-template-columns:minmax(80px,150px) minmax(60px,1fr) 34px auto;gap:10px;align-items:center;padding:6px 8px;margin:0 -8px;border-radius:8px;font-size:12.5px;}
.dbx-brow.click{cursor:pointer;}
.dbx-brow.click:hover,.dbx-brow.click:focus{background:var(--accent-soft);outline:none;}
.dbx-bl{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text);}
.dbx-brow.zero .dbx-bl,.dbx-brow.zero .dbx-bn{color:var(--text-faint);}
.dbx-bt{height:8px;border-radius:4px;background:var(--border);overflow:hidden;}
.dbx-bf{display:block;height:100%;background:var(--accent-2);border-radius:4px;opacity:.85;}
.dbx-bn{text-align:right;font-weight:700;font-variant-numeric:tabular-nums;}
.dbx-bs{font-size:11.5px;color:var(--text-faint);white-space:nowrap;min-width:34px;text-align:right;}
.dbx-bars-wide .dbx-brow{grid-template-columns:minmax(80px,170px) minmax(60px,1fr) 34px;row-gap:0;}
.dbx-bars-wide .dbx-bs{grid-column:1 / -1;text-align:left;margin-top:-3px;padding-bottom:2px;min-width:0;}
.dbx-bsm{font-size:11px;}
.dbx-more{margin-top:6px;}
.dbx-more summary{cursor:pointer;font-size:12px;font-weight:600;color:var(--accent);list-style:none;padding:6px 0;}
.dbx-more summary::-webkit-details-marker{display:none;}
.dbx-prog{margin:0 0 6px;}
.dbx-prog-t{display:flex;justify-content:space-between;font-size:11.5px;color:var(--text-faint);margin-bottom:4px;}
.dbx-prog-t strong{color:var(--text);font-variant-numeric:tabular-nums;}
.dbx-prog-b{height:6px;border-radius:3px;background:var(--border);overflow:hidden;}
.dbx-prog-b span{display:block;height:100%;background:var(--accent-2);border-radius:3px;opacity:.85;}
.dbx-teams{grid-template-columns:repeat(4,minmax(0,1fr));}
@media (max-width:1300px){.dbx-teams{grid-template-columns:repeat(2,minmax(0,1fr));}}
@media (max-width:720px){.dbx-teams{grid-template-columns:1fr;}.dbx-alist{grid-template-columns:1fr;}}
/* Grafik Manajemen & Pencairan: kartu lembut, tanpa kotak bergaris/bayangan */
.pcd-card{background:var(--panel-2);border:0;box-shadow:none;border-radius:12px;padding:14px 16px 14px;}
.pcd-card-head h3{font-size:14px;font-weight:700;}
.pcd-filters{margin:0 0 12px;}
.pcd-select{background:var(--panel);}
.dash-section{color:var(--text);font-size:14px;}
.dash-collapsible summary{color:var(--text);background:var(--panel-2);border:0;}
.dash-collapsible[open] summary{border-radius:9px 9px 0 0;}
/* Kartu angka (stat-card) di seluruh aplikasi: tenang, satu warna */
.stat-card,.stat-card:hover{border-top:1px solid var(--border);box-shadow:none;transform:none;}
.stat-row .stat-card:nth-child(even){border-top-color:var(--border);}
.stat-card .sc-value{font-family:var(--font-body);font-variant-numeric:tabular-nums;font-weight:700;}
.stat-card-clickable:hover{border-color:var(--accent);background:var(--accent-soft);}
/* Hero Dashboard Pencairan: satu kartu, bukan 7 kotak */
.pcd-hero{background:var(--panel-2);border-radius:12px;padding:6px;gap:0;}
.pcd-hero-main,.pcd-tile{background:transparent;border:0;box-shadow:none;border-radius:10px;}
.pcd-hero-main{padding:14px 18px;}
.pcd-hero-val{font-size:38px;}
button.pcd-hero-main:hover,button.pcd-hero-main:focus-visible,button.pcd-tile:hover,button.pcd-tile:focus-visible{transform:none;background:var(--accent-soft);}
.pcd-tiles{gap:0;border-left:1px solid var(--border);}
.pcd-tile{padding:10px 16px;}
.pcd-tile-val{font-size:17px;font-weight:700;font-variant-numeric:tabular-nums;}
.pcd-tile-label{text-transform:none;letter-spacing:0;font-size:11.5px;}
@media (max-width:1000px){.pcd-tiles{border-left:0;border-top:1px solid var(--border);}}
@media (max-width:720px){.dbx-kpi{grid-template-columns:1fr;}.dbx-kpi .pcx-k-v{font-size:20px;}}
/* Ronde 91b: garis warna di tepi kiri baris daftar dihapus (tanpa warna status) */
.campaign-list td:first-child,.campaign-list-row[class*="row-tone-"] td:first-child,
.pcx-table td:first-child,.pcx-row[class*="tone-"] td:first-child{box-shadow:none;}

/* ============ Ronde 92: tampilan popup (modal) baru ============ */
.modal-overlay{background:rgba(20,18,16,.42);backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);}
.modal-box{background:#fff;border:0;border-radius:16px;max-width:520px;padding:0;box-shadow:0 24px 60px -12px rgba(20,18,16,.38);--mpad:26px;}
.modal-box > *{margin-left:var(--mpad);margin-right:var(--mpad);}
.modal-box > :first-child{margin-top:22px;}
.modal-box > :last-child{margin-bottom:22px;}
.modal-box.modal-box-wide{max-width:780px;}
/* header menempel di atas */
.modal-box > .modal-head{position:sticky;top:0;z-index:3;margin:0 0 18px;padding:20px var(--mpad) 14px;background:#fff;border-bottom:1px solid var(--border);border-radius:16px 16px 0 0;}
.modal-box h3{font-size:17px;font-weight:700;letter-spacing:-.01em;}
.modal-head h3{margin:0;}
.modal-box .modal-sub{font-size:12.5px;color:var(--text-faint);line-height:1.45;}
.modal-head .modal-sub{margin:3px 0 0;}
.modal-box > h3{margin-bottom:2px;}
.modal-box > .modal-sub{margin-bottom:14px;}
/* tombol aksi menempel di bawah */
.modal-box .modal-actions{position:sticky;bottom:0;z-index:3;margin:20px 0 0;padding:14px var(--mpad);background:#fff;border-top:1px solid var(--border);border-radius:0 0 16px 16px;gap:10px;}
.modal-box .modal-actions .btn{padding:9px 18px;border-radius:9px;font-size:13.5px;}
.modal-box .btn-success{background:var(--panel);border-color:var(--border);color:var(--text);}
.modal-box .btn-success:hover{background:var(--panel-2);border-color:var(--text-faint);filter:none;box-shadow:none;transform:none;}
/* isi & field */
.modal-box .modal-pre{margin-bottom:16px;}
.modal-box > form.modal-form{margin:0;}
.modal-box > form:not(.modal-form) .modal-actions{margin-left:calc(var(--mpad) * -1);margin-right:calc(var(--mpad) * -1);}
.modal-box .modal-body{padding:0 var(--mpad);}
.modal-box > .modal-pre{margin-top:0;}
.modal-box .field-grid{gap:16px;}
.modal-box .field-grid.field-grid-2col{gap:16px 20px;}
.modal-box label{font-size:12px;font-weight:600;color:var(--text-dim);margin-bottom:6px;}
.modal-box input:not([type=checkbox]):not([type=radio]),.modal-box select,.modal-box textarea{background:var(--panel);border:1px solid transparent;border-radius:9px;padding:10px 12px;font-size:13.5px;}
.modal-box input:not([type=checkbox]):not([type=radio]):hover,.modal-box select:hover,.modal-box textarea:hover{border-color:var(--border);}
.modal-box input:not([type=checkbox]):not([type=radio]):focus,.modal-box select:focus,.modal-box textarea:focus{background:#fff;border-color:var(--accent);outline:3px solid var(--accent-soft);outline-offset:0;}
.modal-box textarea{min-height:84px;line-height:1.5;}
.modal-box .field-help{font-size:11.5px;margin-top:5px;line-height:1.4;}
.modal-box .field-section-header{margin-top:4px;padding-top:14px;border-top:1px solid var(--border);color:var(--text);font-size:12px;}
.modal-box .req-mark{color:var(--accent);}
.modal-box .checklist-group{gap:8px 18px;}
/* info referensi (read-only): kartu lembut 2 kolom, bukan daftar panjang bergaris putus */
.modal-box .konten-context-block{background:var(--panel);border:0;border-radius:12px;padding:14px 16px;margin:0 0 16px;}
.modal-box .konten-context-block h4{font-size:11.5px;font-weight:700;letter-spacing:.03em;color:var(--text-faint);margin:0 0 10px;}
.modal-box .konten-context-block .field-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 20px;}
.modal-box .konten-context-block .field-item-wide{grid-column:1 / -1;}
.modal-box .konten-context-block label{font-size:11px;font-weight:500;color:var(--text-faint);margin-bottom:2px;}
.modal-box .ro-value{font-size:13px;font-weight:600;padding:0;border-bottom:0;color:var(--text);}
.modal-box .konten-context-block .field-item-wide .ro-value{font-weight:500;line-height:1.5;}
.modal-box .link-chip{background:#fff;border:1px solid var(--border);color:var(--accent-2);font-weight:600;padding:2px 10px;}
.modal-box .salset-box{background:var(--panel);border:0;border-radius:12px;padding:12px 16px;}
.modal-box .salset-row{border-bottom:1px solid var(--border);padding:5px 0;}
.modal-box .cl-lock-note{background:var(--panel);color:var(--text-dim);border-radius:8px;padding:8px 10px;}
.modal-box .cl-support-col{border-left-color:var(--border);}
.modal-box .cl-support-col h4,.modal-box .cl-support-subgroup-title{color:var(--text-faint);font-size:11.5px;}
.modal-box .visual-modal-topbar{margin-bottom:0;}
/* modal daftar campaign */
.modal-box .clm-body{max-height:none;overflow:visible;margin:4px 0 0;gap:2px;}
.modal-box .clm-row{background:transparent;border:0;border-radius:10px;padding:10px 12px;}
.modal-box .clm-row:hover{background:var(--accent-soft);}
.modal-box .clm-row + .clm-row{box-shadow:0 -1px 0 var(--border);}
.modal-box .clm-row:hover + .clm-row{box-shadow:none;}
.modal-box .clm-row .list-primary{font-size:13.5px;}
@media (max-width:640px){
  .modal-overlay{padding:10px;}
  .modal-box{max-height:92vh;}
  .modal-box{--mpad:18px;}
  .modal-box > .modal-head{padding:16px var(--mpad) 12px;}
  .modal-box .modal-actions{padding:12px var(--mpad);}
  .modal-box .konten-context-block .field-grid{grid-template-columns:1fr;}
}

.modal-box > .modal-actions{margin-left:0;margin-right:0;margin-bottom:0;}
.modal-box > .modal-head{margin-left:0;margin-right:0;}
.modal-box > .modal-head + *{margin-top:0;}
.modal-box > form:last-child{margin-bottom:0;}
.modal-box > form:not(.modal-form):last-child{margin-bottom:0;}
.modal-box > .modal-actions:last-child{margin-bottom:0;}
.modal-box > .clm-body{margin-left:14px;margin-right:14px;}
.modal-box .konten-context-block .field-grid.visual-info-compact{display:flex;flex-direction:column;gap:0;}
.modal-box .visual-info-compact .field-item{border-bottom:1px solid var(--border);padding:7px 0;}
.modal-box .visual-info-compact .field-item:last-child{border-bottom:0;}
.modal-box .visual-info-compact .field-item label{font-size:11.5px;font-weight:500;color:var(--text-faint);margin:0;}
.modal-box .visual-info-compact .ro-value{text-align:right;}
.modal-box .visual-modal-topbar{margin-bottom:14px;}

/* ===== Ronde 93: status netral, link tenang, panel request & Tugas Visual bersih ===== */
.chip,.chip.success,.chip.warning,.chip.info,.chip.accent,.chip.neutral{background:transparent;color:var(--text-dim);padding:2px 4px;font-weight:500;}
.chip::before{opacity:1;}
.chip.success::before{background:var(--success);}
.chip.warning::before{background:var(--warning);}
.chip.info::before{background:var(--info);}
.chip.accent::before{background:#a9aab3;}
.chip.neutral::before{background:#c3c6cc;}
.chip.critical{background:var(--critical-soft);color:var(--critical);padding:2px 9px;font-weight:600;}
.chip.critical::before{background:var(--critical);}
.kanban-card-mini-badge,.kanban-card-mini-badge.success,.kanban-card-mini-badge.warning,.kanban-card-mini-badge.info,.kanban-card-mini-badge.accent,.kanban-card-mini-badge.neutral{background:transparent;color:var(--text-dim);font-weight:500;padding:2px 0;}
.kanban-card-mini-badge.critical{background:var(--critical-soft);color:var(--critical);padding:2px 8px;font-weight:600;}
.flag-chip{background:transparent;color:var(--text-dim);font-weight:500;padding:3px 4px;}

/* link: tidak pink di area konten */
main a:not(.btn):not(.side-item),.modal-box a:not(.btn){color:var(--text);text-decoration:underline;text-decoration-color:var(--border);text-underline-offset:3px;}
main a:not(.btn):not(.side-item):hover,.modal-box a:not(.btn):hover{text-decoration-color:var(--text-dim);}
.link-chip,.modal-box .link-chip{background:transparent;border:0;color:var(--text);font-weight:500;padding:0;border-radius:0;text-decoration:underline;text-decoration-color:var(--border);text-underline-offset:3px;}
.link-chip:hover,.modal-box .link-chip:hover{text-decoration:underline;text-decoration-color:var(--text-dim);}

/* ceklis netral */
/* warna ceklis dipertahankan (hijau = selesai, kuning = berjalan) supaya tidak kaku */
.rq-note.rq-lock{color:var(--text-faint);}

/* Data Master: panel Kirim Request */
.mcard-req{background:var(--panel);}
.mcard-req .mcard-title{color:var(--text);}
.mcard-req .rq-item{border-bottom-color:var(--border);}
.msub,.master-3col .msub,.pcx-3col .msub{color:var(--text-faint);font-weight:600;text-transform:none;}
.req-chip{border:1px solid var(--border);background:transparent;color:var(--text);font-weight:500;border-radius:8px;}
.req-chip:hover{background:var(--panel-2);color:var(--text);border-color:var(--text-faint);}
.req-chip.is-locked{border-color:var(--border);color:var(--text-faint);}
.request-btn:hover,.request-approval-card:hover{border-color:var(--text-faint);background:var(--panel-2);transform:none;}
.request-approval-card.is-revisi:hover{background:var(--panel-2);}
.request-approval-cta{color:var(--text-dim);font-weight:600;}

/* Tugas Visual: daftar lembut seperti Daftar Campaign */
.visual-task-wrap{background:transparent;border:0;box-shadow:none;border-radius:0;}
.visual-task-table th{font-weight:600;border-bottom:1px solid var(--border);}
.visual-task-table td{border-bottom:1px solid var(--border);padding:12px;}
.visual-task-link-cell,.visual-task-link-cell a{font-weight:600;color:var(--text);}
.visual-task-row:hover{background:var(--panel-2);}

/* empty state & toast */
.empty-note{color:var(--text-faint);}
.toast{background:var(--text);font-weight:500;}
.gate-left{background:linear-gradient(165deg,#0f2f8f 0%,#13286f 60%,#2d2060 100%);}
.gate-left::after{background:radial-gradient(circle at 88% 6%,rgba(255,255,255,.08),transparent 45%);}
@media (max-width:720px){.home-actions{flex-wrap:wrap;}}

/* Ronde 93b: tombol Kirim Request dibedakan warna lembut per tim (bukan pink penuh) */
.req-chip.rq-t-konten{background:#eaf0fb;border-color:#c9d7f2;color:#1f3f8f;}
.req-chip.rq-t-support{background:#e8f4ee;border-color:#c6e2d3;color:#1f6a45;}
.req-chip.rq-t-pencairanUtama{background:#fbf2e0;border-color:#efdcb2;color:#8a5a0a;}
.req-chip.rq-t-pencairanTambahan{background:#f0ebf8;border-color:#d9cdee;color:#533a8f;}
.req-chip.rq-t-kabarTerbaru{background:#e6f3f5;border-color:#bfdfe4;color:#1b6470;}
.req-chip.rq-t-konten:hover{background:#dce7f9;border-color:#a9bfe8;color:#1f3f8f;}
.req-chip.rq-t-support:hover{background:#d8ede2;border-color:#a8d3bb;color:#1f6a45;}
.req-chip.rq-t-pencairanUtama:hover{background:#f7e8c8;border-color:#e3c98a;color:#8a5a0a;}
.req-chip.rq-t-pencairanTambahan:hover{background:#e5dcf3;border-color:#c5b4e4;color:#533a8f;}
.req-chip.rq-t-kabarTerbaru:hover{background:#d6ebee;border-color:#9fcfd7;color:#1b6470;}
.req-chip.is-locked,.req-chip.is-locked:hover{background:transparent;border-color:var(--border);color:var(--text-faint);}

/* ===== Ronde 94: tab Konten lebih ringkas ===== */
.konten-panel .panel-head{align-items:flex-start;margin-bottom:10px;}
.konten-panel .panel-head h3{font-size:17px;}
.konten-sub{font-size:12.5px;color:var(--text-faint);margin-top:2px;}
.konten-statusline{display:flex;align-items:center;flex-wrap:wrap;gap:6px 12px;padding:9px 12px;background:var(--panel);border-radius:9px;margin-bottom:14px;font-size:12.5px;}
.ksl-label{font-weight:600;color:var(--text-dim);}
.ksl-note{color:var(--text-faint);font-size:12px;}
.konten-statusline .approval-feedback{flex-basis:100%;margin-top:0;font-style:normal;color:var(--text-dim);}
.konten-panel .request-block{border-bottom:0;padding-bottom:0;margin-bottom:14px;}
.konten-panel .request-block h4{margin-bottom:6px;}
.konten-section{margin-bottom:18px;}
.konten-section>h4,.konten-section>h4.konten-task-heading{font-size:12px;text-transform:none;letter-spacing:0;color:var(--text-faint);font-weight:600;margin:0 0 8px;}
.konten-muted{font-size:12.5px;color:var(--text-faint);padding:4px 0;}
.konten-kv.field-grid-2col{gap:0 28px;}
.konten-kv .field-item,.konten-ref-grid .field-item{flex-direction:row;align-items:baseline;justify-content:space-between;gap:12px;padding:7px 0;border-bottom:1px solid var(--border);}
.konten-kv .field-item label,.konten-ref-grid .field-item label{margin:0;flex:none;font-size:12px;font-weight:500;color:var(--text-faint);}
.konten-kv .ro-value,.konten-ref-grid .ro-value{flex:1;min-width:0;text-align:right;padding:0;border-bottom:0;font-size:13px;overflow-wrap:anywhere;}
.konten-kv .field-item-wide{flex-direction:column;align-items:stretch;}
.konten-kv .field-item-wide .ro-value{text-align:left;}
.form-panel-solo .konten-ref-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:0 28px;}
.konten-more{margin-top:10px;}
.konten-more summary{cursor:pointer;list-style:none;font-size:12.5px;color:var(--text-dim);font-weight:600;padding:4px 0;}
.konten-more summary::-webkit-details-marker{display:none;}
.konten-more summary::before{content:'+ ';color:var(--text-faint);}
.konten-more[open] summary::before{content:'\2212 ';}
.konten-more .field-grid{margin-top:8px;}
@media (max-width:720px){.form-panel-solo .konten-ref-grid{grid-template-columns:1fr;}}

/* ===== Ronde 94b: tab Konten lebih kecil, rapi, dan tiap bagian punya warna lembut sendiri ===== */
.konten-panel .panel-head h3{font-size:15px;}
.konten-sub{font-size:11.5px;}
.konten-statusline{background:#f6f4ee;border:1px solid #ebe6d8;padding:7px 12px;font-size:12px;}
.konten-statusline .ksl-label{color:#6b5d3a;}
.konten-section{border-radius:12px;padding:12px 16px 14px;margin-bottom:12px;}
.konten-section>h4,.konten-section>h4.konten-task-heading{font-size:11.5px;font-weight:700;margin:0 0 10px;letter-spacing:.01em;}
.konten-section.ks-task{background:#eef3fc;border:1px solid #dbe5f6;}
.konten-section.ks-task>h4{color:#2a4a9a;}
.konten-section.ks-ref{background:#f1f5f2;border:1px solid #e0e9e3;}
.konten-section.ks-ref>h4{color:#3d6b52;}
.konten-panel .request-block h4{color:var(--text-faint);}
.konten-kv.field-grid-2col,.konten-ref-grid,.form-panel-solo .konten-ref-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px 20px;}
.konten-more .field-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px 20px;}
.konten-kv .field-item,.konten-ref-grid .field-item,.konten-more .field-item{display:block;padding:0;border:0;}
.konten-kv .field-item label,.konten-ref-grid .field-item label,.konten-more .field-item label{display:block;margin:0 0 1px;font-size:10.5px;font-weight:600;color:var(--text-faint);letter-spacing:.02em;}
.konten-kv .ro-value,.konten-ref-grid .ro-value,.konten-more .ro-value{text-align:left;padding:0;border:0;font-size:12.5px;line-height:1.4;overflow-wrap:anywhere;}
.konten-kv .field-item-wide{grid-column:1/-1;}
.konten-kv .field-item-wide .ro-value{background:rgba(255,255,255,.75);border-radius:8px;padding:7px 10px;font-size:12.5px;}
.konten-more summary{font-size:12px;color:#3d6b52;}
.konten-more summary::before{color:#3d6b52;}
@media (max-width:900px){.konten-kv.field-grid-2col,.konten-ref-grid,.form-panel-solo .konten-ref-grid,.konten-more .field-grid{grid-template-columns:repeat(2,minmax(0,1fr));}}

/* Ronde 94c: Tugas Tim Konten dan Referensi Master berdampingan */
.konten-duo{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:12px;align-items:start;margin-bottom:12px;}
.konten-duo .konten-section{margin-bottom:0;}
.konten-duo .konten-kv.field-grid-2col,.konten-duo .konten-ref-grid,.konten-duo .form-panel-solo .konten-ref-grid,.konten-duo .konten-more .field-grid{grid-template-columns:repeat(2,minmax(0,1fr));}
.konten-duo .ks-task .field-grid{grid-template-columns:repeat(2,minmax(0,1fr));}
@media (max-width:1000px){.konten-duo{grid-template-columns:1fr;}}

/* ===== Ronde 95: Riwayat Perubahan = daftar per tanggal dengan label jenis ===== */
.cl-toolbar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px 16px;margin-bottom:16px;}
.cl-toolbar .changelog-search{margin:0;max-width:340px;flex:1 1 240px;}
.cl-filters{display:flex;flex-wrap:wrap;gap:6px;}
.cl-filter{border:1px solid var(--border);background:transparent;color:var(--text-dim);border-radius:999px;padding:5px 12px;font-size:12.5px;font-weight:500;cursor:pointer;}
.cl-filter:hover{background:var(--panel);}
.cl-filter.active{background:var(--text);border-color:var(--text);color:var(--bg);}
.cl-filter-n{opacity:.6;font-size:11.5px;margin-left:2px;}
.cl-list{display:flex;flex-direction:column;gap:10px;max-width:920px;}
.cl-group{background:var(--panel);border-radius:12px;}
.cl-group>summary{display:flex;align-items:center;flex-wrap:wrap;gap:4px 12px;padding:12px 16px;cursor:pointer;list-style:none;}
.cl-group>summary::-webkit-details-marker{display:none;}
.cl-group>summary::before{content:'+';color:var(--text-faint);font-weight:600;width:10px;}
.cl-group[open]>summary::before{content:'\2212';}
.cl-date{font-weight:700;font-size:14px;}
.cl-latest{font-size:10.5px;font-weight:600;color:var(--text-dim);border:1px solid var(--border);border-radius:999px;padding:1px 8px;}
.cl-sum{margin-left:auto;font-size:12px;color:var(--text-faint);}
.cl-items{padding:0 16px 8px 38px;}
.cl-item{border-top:1px solid var(--border);}
.cl-item>summary,.cl-item-plain{display:flex;align-items:baseline;gap:10px;padding:9px 0;cursor:pointer;list-style:none;font-size:13px;}
.cl-item-plain{cursor:default;}
.cl-item>summary::-webkit-details-marker{display:none;}
.cl-item>summary:hover .cl-title{text-decoration:underline;text-decoration-color:var(--border);text-underline-offset:3px;}
.cl-title{flex:1;min-width:0;line-height:1.45;}
.cl-item>summary .cl-title{font-weight:600;}
.cl-item>summary::after{content:'\203A';color:var(--text-faint);font-size:16px;transform:rotate(0);transition:transform .12s;}
.cl-item[open]>summary::after{transform:rotate(90deg);}
.cl-detail{padding:0 0 12px 98px;font-size:12.5px;line-height:1.6;color:var(--text-dim);}
.cl-tag{flex:none;width:76px;text-align:center;font-size:10.5px;font-weight:600;border-radius:6px;padding:2px 0;}
.cl-tag-fitur{background:#eaf0fb;color:#1f3f8f;}
.cl-tag-perbaikan{background:#fbf2e0;color:#8a5a0a;}
.cl-tag-tampilan{background:#f0ebf8;color:#533a8f;}
@media (max-width:720px){.cl-items{padding-left:16px;}.cl-detail{padding-left:0;}.cl-sum{margin-left:0;flex-basis:100%;}}

/* Ronde 95b: Riwayat Perubahan lebih padat (2 kolom, baris rapat) supaya tidak panjang ke bawah */
.cl-list{max-width:none;gap:8px;}
.cl-group>summary{padding:9px 14px;}
.cl-items{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 28px;padding:0 14px 6px 34px;}
.cl-item>summary,.cl-item-plain{padding:6px 0;gap:8px;font-size:12.5px;}
.cl-tag{width:64px;font-size:10px;padding:1px 0;}
.cl-item[open]{grid-column:1/-1;}
.cl-detail{padding:0 0 10px 72px;}
@media (max-width:1000px){.cl-items{grid-template-columns:1fr;}}
@media (max-width:720px){.cl-items{padding-left:14px;}.cl-detail{padding-left:0;}}

/* Ronde 100 — form "Campaign Baru" dikelompokkan jadi kartu bernomor
   (gaya sama dengan .mcard Data Master). Lihat renderNewCampaignForm(). */
.ncf-head{margin-bottom:18px;}
.ncf-head h2{margin-bottom:4px;}
.ncf-sub{font-size:13px;color:var(--text-dim);margin:0;}
.ncf-req{color:var(--accent);font-weight:700;}
.ncf{max-width:1180px;}
.ncf-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;align-items:stretch;}
.ncf-card{background:var(--panel-2);border:1px solid var(--border);border-radius:12px;padding:18px 20px 20px;min-width:0;}
.ncf-card-head{display:flex;align-items:flex-start;gap:12px;margin-bottom:16px;}
.ncf-num{flex:none;width:26px;height:26px;border-radius:50%;background:var(--accent-2-soft);color:var(--accent-2);font-size:12.5px;font-weight:700;display:inline-flex;align-items:center;justify-content:center;}
.ncf-title{font-size:14.5px;font-weight:700;margin:2px 0 2px;color:var(--text);}
.ncf-desc{font-size:12px;color:var(--text-faint);margin:0;}
.ncf-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px 16px;align-items:start;}
.ncf-fields .ncf-wide{grid-column:1/-1;}
.ncf-fields label{font-weight:600;color:var(--text-dim);margin-bottom:5px;}
.ncf-fields input:not([type="checkbox"]),.ncf-fields select{background:#fff;min-height:40px;border-radius:8px;}
.ncf-fields input:focus,.ncf-fields select:focus{outline:none;border-color:var(--accent-2);box-shadow:0 0 0 3px var(--accent-2-soft);}
.ncf-fields .field-help{font-size:11.5px;margin-top:4px;}
.ncf-fields .field-item-checkbox{align-self:end;min-height:40px;padding:0 12px;background:#fff;border:1px solid var(--border);border-radius:8px;justify-content:space-between;}
.ncf-fields .field-item-checkbox label{margin:0;}
.ncf-fields .field-item-checkbox input{width:18px;height:18px;accent-color:var(--accent-2);}
.ncf-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:18px;padding-top:16px;border-top:1px solid var(--border);}
.ncf-actions .btn{min-width:120px;justify-content:center;}
@media (max-width: 1000px){ .ncf-grid{grid-template-columns:minmax(0,1fr);} }
@media (max-width: 520px){
  .ncf-fields{grid-template-columns:minmax(0,1fr);}
  .ncf-card{padding:16px;}
  .ncf-actions .btn{flex:1;min-width:0;}
}

/* Ronde 101 — popup "Request ke Tim Visual" (Tim Konten): 2 kolom, jenis
   subtask jadi kotak pilihan ringkas, kotak jumlah cuma muncul kalau jenis
   itu dicentang (input dinonaktifkan oleh openModal() saat tidak dicentang). */
.modal-req-visual .modal-head{margin-bottom:16px;}
.modal-req-visual .field-grid.field-grid-2col{gap:14px 20px;align-items:start;}
.modal-req-visual .field-help{font-size:11px;margin-top:4px;color:var(--text-faint);}
.modal-req-visual .checklist-group{display:grid;grid-template-columns:repeat(auto-fill,minmax(132px,1fr));gap:8px;padding:0;}
.modal-req-visual .checklist-item{justify-content:flex-start;gap:8px;min-width:0;min-height:38px;padding:5px 6px 5px 10px;border:1px solid var(--border);border-radius:9px;background:var(--panel);font-size:12.5px;font-weight:600;color:var(--text-dim);transition:border-color .12s,background .12s;}
.modal-req-visual .checklist-item:hover{border-color:var(--text-faint);}
.modal-req-visual .checklist-item:has(input[type="checkbox"]:checked){border-color:var(--accent-2);background:var(--accent-2-soft);color:var(--accent-2);}
.modal-req-visual .checklist-item input[type="checkbox"]{accent-color:var(--accent-2);flex:none;}
.modal-box.modal-req-visual .checklist-item input.checklist-qty-input{width:40px;height:28px;flex:none;-moz-appearance:textfield;appearance:textfield;padding:0 4px;margin-left:auto;border-radius:6px;background:#fff;border:1px solid var(--accent-2);font-size:12.5px;font-weight:600;color:var(--accent-2);text-align:center;outline:0;}
.modal-box.modal-req-visual .checklist-item input.checklist-qty-input::-webkit-inner-spin-button,.modal-box.modal-req-visual .checklist-item input.checklist-qty-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0;}
.modal-box.modal-req-visual .checklist-item input.checklist-qty-input:focus{outline:2px solid var(--accent-2-soft);}
.modal-box.modal-req-visual .checklist-item input.checklist-qty-input:disabled{display:none;}
.modal-req-visual .field-inline-row{display:flex;gap:8px;align-items:stretch;}
.modal-req-visual .field-inline-row input{flex:1;min-width:0;}
.modal-req-visual .field-inline-row .btn{flex:none;white-space:nowrap;border-radius:9px;}
.modal-req-visual textarea{min-height:64px;}
@media (max-width: 640px){
  .modal-req-visual .checklist-group{grid-template-columns:repeat(2,minmax(0,1fr));}
}

/* Ronde 102 — Home akun Konten = "Tugas Masuk" (lihat renderKontenTasksHome()). */
.ktask-sub{font-size:13px;color:var(--text-dim);margin:-6px 0 16px;}
.ktask-sub a{color:var(--accent-2);font-weight:600;}
.ktask-partner{font-size:12px;color:var(--text-faint);margin-top:2px;}
.ktask-age{display:inline-block;font-size:11.5px;color:var(--text-faint);margin-top:2px;}
.ktask-age.late{color:var(--critical);font-weight:600;}
.ktask-note-cell{max-width:320px;}
.ktask-note{font-size:12.5px;color:var(--text-dim);line-height:1.45;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;white-space:normal;}
.ktask-list td{vertical-align:top;}
.ktask-action{text-align:right;white-space:nowrap;}
@media (max-width: 720px){
  .ktask-list thead{display:none;}
  .ktask-list, .ktask-list tbody, .ktask-list tr, .ktask-list td{display:block;width:100%;}
  .campaign-list.ktask-list{min-width:0;table-layout:auto;}
  .ktask-list tr{padding:12px 14px;margin-bottom:10px;border-radius:12px;background:var(--panel);}
  .campaign-list.ktask-list td{padding:3px 0;border:0;max-width:none;background:transparent;white-space:normal;overflow:visible;border-radius:0;}
  .ktask-list td[data-label="Diminta"], .ktask-list td[data-label="Dari"], .ktask-list td[data-label="Priority"]{display:inline-block;width:auto;margin-right:14px;font-size:12.5px;}
  .ktask-list td[data-label="Diminta"] div{display:inline;}
  .ktask-list td[data-label="Diminta"] .ktask-age{margin-left:6px;}
  .ktask-list td[data-label="Dari"]::before{content:"dari ";color:var(--text-faint);}
  .ktask-list .ktask-note-cell:has(.cell-muted){display:none;}
  .ktask-list .ktask-action{text-align:left;padding-top:8px;}
  .ktask-list .ktask-action .btn{width:100%;justify-content:center;}
}

/* Ronde 103 — penanda PIC kosong/tidak dikenal (Daftar Campaign Supply/Manajemen). */
.pic-flag{display:inline-block;margin-left:8px;padding:1px 7px;border-radius:999px;background:var(--warning-soft);color:var(--warning);font-size:10.5px;font-weight:700;vertical-align:1px;cursor:help;}
.pic-issue-bar{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:nowrap;margin:0 0 14px;padding:10px 14px;border-radius:10px;background:var(--warning-soft);color:var(--text);font-size:12.5px;line-height:1.45;}
.pic-issue-bar strong{color:var(--warning);}
.pic-issue-bar .btn{flex:none;background:#fff;}
.pic-issue-bar > span{flex:1 1 auto;min-width:0;}
@media (max-width: 720px){ .pic-issue-bar{flex-wrap:wrap;} }

/* Ronde 104 — tab Request Approval (Konten): 3 bagian berupa daftar (lihat renderRequestApprovalRecap()). */
.ra-sec{margin-bottom:26px;}
.ra-sec-head{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap;margin-bottom:8px;}
.ra-sec-head h3{font-size:14.5px;font-weight:700;margin:0;display:flex;align-items:center;gap:8px;}
.ra-sec-head p{font-size:12.5px;color:var(--text-faint);margin:0;}
.ra-count{display:inline-flex;align-items:center;justify-content:center;min-width:22px;height:20px;padding:0 6px;border-radius:999px;background:var(--panel);color:var(--text-dim);font-size:11.5px;font-weight:700;}
.ra-revisi .ra-count{background:var(--critical-soft);color:var(--critical);}
.ra-siap .ra-count{background:var(--accent-2-soft);color:var(--accent-2);}
.ra-menunggu .ra-count{background:var(--warning-soft);color:var(--warning);}
.ra-empty{font-size:12.5px;color:var(--text-faint);padding:10px 12px;border:1px dashed var(--border);border-radius:10px;}
.ra-menunggu .campaign-list-row td{color:var(--text-faint);}
.ra-list .ktask-action .btn + .btn{margin-left:6px;}
@media (max-width: 720px){
  .ktask-list td.ktask-inline{display:inline-block;width:auto;margin-right:14px;font-size:12.5px;}
  .ktask-list td.ktask-inline div{display:inline;}
  .ktask-list td.ktask-inline .ktask-age{margin-left:6px;}
  .ra-list .ktask-action .btn{width:auto;flex:1;}
  .ra-list .ktask-action{display:flex !important;gap:6px;}
}
.ra-list th:nth-child(1){width:22%;}
.ra-list th:nth-child(2){width:13%;}
.ra-list th:nth-child(3){width:auto;}
.ra-list th:nth-child(4){width:13%;}
.ra-list th:nth-child(5){width:27%;}
.ra-list .ktask-action{white-space:nowrap;}
.ktask-list td.ktask-inline .ktask-partner{display:block;}
.ra-list td{white-space:normal;}

/* Ronde 105b — baris filter Tugas Visual & Revisi (lihat visualFilterBarHtml()). */
.visual-filter-bar{margin-bottom:12px;}
.visual-filter-bar .dash-search{flex:1 1 320px;min-width:200px;max-width:440px;}
.visual-filter-count{margin-left:auto;font-size:12px;color:var(--text-faint);white-space:nowrap;}
@media (max-width: 720px){ .visual-filter-bar .dash-search{flex:1 1 100%;max-width:none;} .visual-filter-bar select{flex:1 1 40%;} .visual-filter-count{margin-left:0;} }

/* Ronde 107 — Log Aktivitas (Manajemen), lihat renderActivityLog(). */
.act-daynav{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:14px;}
.act-date{width:auto;padding:6px 10px;font-size:13px;}
.act-daytitle{font-size:15px;font-weight:700;margin:0 0 10px;color:var(--text);}
.act-today-tag{font-size:11px;font-weight:600;color:var(--accent-2);background:var(--accent-2-soft);padding:2px 8px;border-radius:999px;margin-left:6px;vertical-align:2px;}
.act-summary{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-bottom:12px;}
.act-total{font-size:12.5px;color:var(--text-dim);margin-right:6px;}
.act-person{border:1px solid var(--border);background:var(--panel);border-radius:999px;padding:3px 10px;font-size:12px;color:var(--text);cursor:pointer;font-family:inherit;}
.act-person span{color:var(--text-faint);font-weight:600;margin-left:2px;}
.act-person:hover{border-color:var(--text-faint);}
.act-person.on{background:var(--accent-2-soft);border-color:var(--accent-2);color:var(--accent-2);}
.act-person.on span{color:var(--accent-2);}
.act-list th:nth-child(1){width:8%;}
.act-list th:nth-child(2){width:20%;}
.act-list th:nth-child(3){width:auto;}
.act-list th:nth-child(4){width:24%;}
.act-list td{white-space:normal;}
.act-time{font-variant-numeric:tabular-nums;color:var(--text-dim);}
.act-as{font-size:11px;color:var(--warning);margin-top:2px;}
.act-camp{color:var(--accent-2);cursor:pointer;font-weight:600;}
.act-camp:hover{text-decoration:underline;}
.act-row.act-k-akun td:nth-child(3){color:var(--text-faint);}

/* Ronde 109 — filter judul kolom ala Excel (Tugas CL Support, lihat openClColFilter()) + kolom Tgl Input CL. */
.colf-th{white-space:nowrap;}
.colf-th > span{vertical-align:middle;}
.colf-btn{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;margin-left:4px;padding:0;border:1px solid transparent;border-radius:6px;background:transparent;color:var(--text-faint);cursor:pointer;vertical-align:middle;}
.colf-btn:hover{border-color:var(--border);background:#fff;color:var(--text);}
.colf-btn.on{color:var(--accent-2);background:var(--accent-2-soft);border-color:var(--accent-2);}
.colf-pop{position:fixed;z-index:120;width:250px;max-width:calc(100vw - 16px);background:#fff;border:1px solid var(--border);border-radius:12px;box-shadow:0 16px 40px -12px rgba(20,18,16,.35);padding:10px;}
.colf-pop-title{font-size:12px;font-weight:700;color:var(--text);margin:0 2px 8px;}
.colf-search{width:100%;padding:6px 9px;font-size:12.5px;border-radius:8px;margin-bottom:6px;}
.colf-list{max-height:230px;overflow-y:auto;border-top:1px solid var(--border);border-bottom:1px solid var(--border);padding:4px 0;margin:2px 0 8px;}
.colf-item{display:flex;align-items:center;gap:8px;padding:5px 4px;font-size:12.5px;color:var(--text);cursor:pointer;border-radius:6px;margin:0;}
.colf-item:hover{background:var(--panel);}
.colf-item input{width:15px;height:15px;accent-color:var(--accent-2);flex:none;margin:0;}
.colf-item span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.colf-item em{font-style:normal;font-size:11px;color:var(--text-faint);}
.colf-all{font-weight:600;}
.colf-actions{display:flex;justify-content:flex-end;gap:6px;}
.colf-chip{font-size:11.5px;font-weight:600;color:var(--accent-2);background:var(--accent-2-soft);padding:3px 9px;border-radius:999px;white-space:nowrap;}
.colf-hint{font-size:11.5px;color:var(--text-faint);}
.cl-input-date{white-space:nowrap;color:var(--text-dim);font-variant-numeric:tabular-nums;}

/* Ronde 110 — Sinkron dari Sheet lama (lihat startLegacySync()). */
.legacy-sync-note{display:flex;align-items:center;gap:6px;flex-wrap:wrap;font-size:12px;color:var(--text-dim);margin:-6px 0 12px;}
.legacy-sync-dot{width:8px;height:8px;border-radius:50%;background:var(--success);flex:none;}
.legacy-sync-dot.none{background:var(--text-faint);}
.legacy-sync-sum{color:var(--text-faint);}
.konten-context-block .legacy-sync-note{margin:4px 0;}
.legacy-sa-email{font-family:var(--font-mono);font-size:12.5px;background:#fff;border:1px dashed var(--border);border-radius:8px;padding:8px 10px;margin-top:8px;word-break:break-all;user-select:all;}
.legacy-sum-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:8px;margin-top:12px;margin-bottom:12px;}
.legacy-sum-grid > div{background:var(--panel);border-radius:10px;padding:10px 12px;display:flex;flex-direction:column;}
.legacy-sum-grid b{font-size:20px;font-variant-numeric:tabular-nums;}
.legacy-sum-grid span{font-size:11.5px;color:var(--text-dim);}
.legacy-sum-list{margin-top:8px;margin-bottom:8px;font-size:12.5px;}
.legacy-sum-list summary{cursor:pointer;font-weight:600;padding:4px 0;}
.legacy-sum-list ul{margin:6px 0 0;padding-left:18px;max-height:240px;overflow-y:auto;line-height:1.6;}

/* Ronde 112 — "Lihat semua mitra" di Dashboard Pencairan (lihat openPcdMitraAllModal()). */
.pcd-mitra-more{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap;margin-top:8px;}
.pcd-all-search{display:flex;align-items:center;gap:10px;margin-bottom:10px;}
.pcd-all-search .dash-search{margin:0;flex:1 1 260px;max-width:360px;}

/* Ronde 113 — Perbandingan Utama vs Konsol (lihat renderPcBanding()). */
.pcb-list th:nth-child(1){width:22%;}
.pcb-list th:nth-child(2),.pcb-list th:nth-child(3),.pcb-list th:nth-child(4),.pcb-list th:nth-child(5){width:11%;}
.pcb-list th:nth-child(7){width:12%;}
.pcb-list td{white-space:normal;}
.pcb-num{font-variant-numeric:tabular-nums;white-space:nowrap !important;}
.pcb-bar{display:block;height:7px;border-radius:4px;min-width:2px;}
.pcb-bar-u{background:#2a78d6;}
.pcb-bar-k{background:#eda100;}
.pcb-hi{color:#b06d06;font-weight:600;}
.pcb-lo{color:var(--accent-2);font-weight:600;}
.pcb-only{color:var(--accent);}
.pcb-legend{display:flex;gap:16px;font-size:11.5px;color:var(--text-dim);margin-top:10px;}
.pcb-legend i{display:inline-block;width:12px;height:7px;border-radius:3px;margin-right:6px;vertical-align:1px;}
.pcb-num .ktask-partner{white-space:normal;}
.pcb-unknown{font-size:11.5px;color:var(--text-dim);white-space:normal;}

/* Ronde 114 — Perbandingan Utama vs Konsol dirombak: grafik batang dua arah (lihat renderPcBanding()). */
.pcb-pills{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 12px;}
.pcb-pill{border:1px solid var(--border);background:var(--panel);border-radius:999px;padding:5px 12px;font-size:12.5px;font-weight:600;color:var(--text-dim);cursor:pointer;font-family:inherit;}
.pcb-pill span{font-weight:700;color:var(--text-faint);margin-left:4px;font-variant-numeric:tabular-nums;}
.pcb-pill:hover{border-color:var(--text-faint);color:var(--text);}
.pcb-pill.on{background:var(--text);border-color:var(--text);color:#fff;}
.pcb-pill.on span{color:rgba(255,255,255,.75);}
.pcb-toolbar .pcb-viewseg{margin-left:4px;}
.pcb-chart{background:#fff;border:1px solid var(--border);border-radius:12px;padding:6px 0;}
.pcb-chart-head,.pcb-row{display:grid;grid-template-columns:minmax(150px,1.1fr) minmax(0,1fr) minmax(0,1fr) 92px;align-items:center;column-gap:0;}
.pcb-chart-head{padding:6px 16px 8px;border-bottom:1px solid var(--border);font-size:11px;font-weight:600;color:var(--text-faint);text-transform:uppercase;letter-spacing:.03em;}
.pcb-h-left{text-align:right;padding-right:10px;color:#2a78d6;}
.pcb-h-right{padding-left:10px;color:#b07800;}
.pcb-h-tag{text-align:right;}
.pcb-row{padding:7px 16px;cursor:pointer;border-bottom:1px solid var(--panel);}
.pcb-row:last-child{border-bottom:0;}
.pcb-row:hover,.pcb-row:focus{background:var(--panel-2);outline:none;}
.pcb-name{display:flex;flex-direction:column;min-width:0;padding-right:12px;}
.pcb-name .list-primary{font-size:12.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.pcb-name .ktask-partner{font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:0;}
.pcb-side{display:flex;align-items:center;gap:6px;height:22px;min-width:0;}
.pcb-left{justify-content:flex-end;border-right:2px solid var(--text-faint);padding-right:0;}
.pcb-right{justify-content:flex-start;}
.pcb-left .pcb-bar{border-radius:5px 0 0 5px;}
.pcb-right .pcb-bar{border-radius:0 5px 5px 0;}
.pcb-bar{display:block;height:14px;flex:none;max-width:calc(100% - 52px);}
.pcb-side .pcb-bar{min-width:0;}
.pcb-val{font-size:11.5px;font-weight:600;color:var(--text-dim);font-variant-numeric:tabular-nums;white-space:nowrap;}
.pcb-tagcell{text-align:right;}
.pcb-tag{display:inline-block;padding:2px 9px;border-radius:999px;font-size:11.5px;font-weight:700;white-space:nowrap;font-variant-numeric:tabular-nums;}
.pcb-t-hi{background:#fdf0d5;color:#9a6200;}
.pcb-t-lo{background:var(--accent-2-soft);color:var(--accent-2);}
.pcb-t-only{background:var(--accent-soft);color:var(--accent);}
.pcb-t-none{background:var(--panel);color:var(--text-faint);}
.pcb-more{display:flex;align-items:center;gap:10px;margin-top:10px;}
.pcb-list th:nth-child(6){width:9%;}
@media (max-width: 720px){
  .pcb-chart-head{display:none;}
  .pcb-row{grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto;grid-template-areas:"name name tag" "left right right";row-gap:4px;padding:10px 12px;}
  .pcb-name{grid-area:name;}
  .pcb-tagcell{grid-area:tag;}
  .pcb-left{grid-area:left;}
  .pcb-right{grid-area:right;}
}
.pcb-right .pcb-clip{background-image:repeating-linear-gradient(-45deg,transparent 0 5px,rgba(255,255,255,.7) 5px 7px);background-position:right;background-size:16px 100%;background-repeat:no-repeat;}
.pcb-left .pcb-clip{background-image:repeating-linear-gradient(45deg,transparent 0 5px,rgba(255,255,255,.7) 5px 7px);background-position:left;background-size:16px 100%;background-repeat:no-repeat;}
.pcb-legend i.pcb-clip{background-image:repeating-linear-gradient(-45deg,transparent 0 3px,rgba(255,255,255,.8) 3px 5px);}

/* Ronde 115 — sort kolom tabel umum (lihat tsortWire()). */
th.tsort-th{cursor:pointer;user-select:none;}
th.tsort-th:hover{color:var(--text);}
th.tsort-th::after{content:'';display:inline-block;width:0;height:0;margin-left:5px;vertical-align:2px;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid currentColor;opacity:0;transition:opacity .12s;}
th.tsort-th:hover::after{opacity:.35;}
th.tsort-asc::after{border-top:0;border-bottom:4px solid currentColor;opacity:1 !important;}
th.tsort-desc::after{opacity:1 !important;}
th.tsort-asc,th.tsort-desc{color:var(--accent-2) !important;}
.konten-context-block .field-inline-row{display:flex;gap:8px;align-items:stretch;}
.konten-context-block .field-inline-row input{flex:1;min-width:0;}
.konten-context-block .field-inline-row .btn{flex:none;white-space:nowrap;}

/* Ronde 118 (2026-10-19) — Data Master 2 kolom (Alur & Request + Detail), Riwayat Pencairan diringkas */
.master-flow-layout{display:grid;grid-template-columns:minmax(0,1.45fr) minmax(0,1fr);gap:14px;align-items:start;}
.master-flow-layout.master-flow-solo{grid-template-columns:minmax(0,640px);}
@media (max-width:980px){.master-flow-layout{grid-template-columns:1fr;}}
.mcard-flow,.mcard-detail{padding:14px 18px 10px;}
.mcard-detail .mrow{font-size:13px;}
.flow{display:flex;flex-direction:column;margin-top:4px;}
.flow-row{display:grid;grid-template-columns:minmax(0,1fr) auto 112px;grid-template-areas:"name chip act" "detail detail act";gap:2px 12px;align-items:center;padding:10px 10px;margin:0 -10px;border-bottom:1px solid var(--border);border-radius:10px;cursor:pointer;}
.flow-row:last-child{border-bottom:none;}
.flow-row:hover,.flow-row:focus{background:var(--accent-soft);outline:none;}
.flow-name{grid-area:name;display:flex;align-items:center;gap:9px;font-weight:600;font-size:13.5px;min-width:0;}
.flow-name .line-icon{color:var(--text-faint);flex:none;}
.flow-chip{grid-area:chip;justify-self:end;}
.flow-act{grid-area:act;justify-self:end;text-align:right;}
.flow-detail{grid-area:detail;font-size:12px;color:var(--text-faint);padding-left:24px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.flow-req{min-width:96px;justify-content:center;}
.flow-lock{display:inline-block;font-size:11.5px;color:var(--text-faint);border:1px dashed var(--border);border-radius:8px;padding:4px 10px;}
.flow-hint{font-size:11px;color:var(--text-faint);margin:8px 0 2px;}
@media (max-width:560px){.flow-row{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"name chip" "detail detail" "act act";}.flow-act{justify-self:start;padding-left:24px;margin-top:4px;}.flow-detail{white-space:normal;}}
.pcr-kpi .sc-note{font-size:11.5px;color:var(--text-faint);margin-top:2px;}
.pcr-layout{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(0,1fr);gap:14px;align-items:start;margin:14px 0 18px;}
@media (max-width:980px){.pcr-layout{grid-template-columns:1fr;}}
.mcard-pcr,.mcard-kb{padding:14px 18px 12px;}
.pcr-sec{padding:10px 0;border-bottom:1px solid var(--border);}
.pcr-sec:last-of-type{border-bottom:none;}
.pcr-sec-head{display:flex;justify-content:space-between;align-items:center;gap:10px;}
.pcr-sec-name{font-weight:600;font-size:13.5px;}
.pcr-sec-body{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:2px 16px;margin-top:6px;}
@media (max-width:640px){.pcr-sec-body{grid-template-columns:1fr;}}
.pcr-sec .pcs-action{margin-top:8px;}
.pcr-hint{margin-top:10px;font-size:12px;color:var(--text-faint);background:var(--panel);border-radius:8px;padding:8px 10px;}
.stat-row.pcr-kpi{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));}
@media (max-width:720px){.stat-row.pcr-kpi{grid-template-columns:repeat(2,minmax(0,1fr));}}
.flow-detail{white-space:normal;}
.table-wrap .tw-head .cell-muted{font-size:12px;text-align:right;}

/* Ronde 119 (2026-10-19) — warna: Hafidh "warnanya sama semua, coba mainkan di warna".
   --c = warna tahap (FLOW_COLORS di app.js). Status chip di Data Master & Riwayat Pencairan kembali berwarna
   (aturan Ronde 93 "status netral" tetap berlaku di halaman lain). */
.meta-strip-color{position:relative;overflow:hidden;background:linear-gradient(120deg,#fff 0%,#fff6fa 55%,#eef2fd 100%);border:1px solid #f0dbe6;}
.meta-strip-color::before{content:'';position:absolute;left:0;top:0;right:0;height:3px;background:linear-gradient(90deg,var(--accent),var(--accent-3),var(--accent-2));}
.meta-strip-color .mi-label{color:#a07a8d;}
main a.mi-camp-link{display:inline-flex;align-items:center;gap:4px;font-family:var(--font-mono);font-weight:600;color:var(--accent);text-decoration:none;background:var(--accent-soft);padding:2px 10px;border-radius:8px;transition:background .12s,color .12s;}
main a.mi-camp-link:hover{background:var(--accent);color:#fff;}

.dm-color .chip{padding:2px 9px;border-radius:20px;font-weight:600;}
.dm-color .chip::before{display:none;}
.dm-color .chip.success{background:var(--success-soft);color:var(--success);}
.dm-color .chip.warning{background:var(--warning-soft);color:var(--warning);}
.dm-color .chip.info{background:var(--info-soft);color:var(--info);}
.dm-color .chip.accent{background:var(--accent-soft);color:var(--accent);}
.dm-color .chip.neutral{background:var(--neutral-soft);color:var(--neutral);}

.dm-color .mcard{background:#fff;border:1px solid var(--border);box-shadow:0 1px 2px rgba(30,28,25,.04);}
.dm-color .mcard-title{font-size:14px;}
.dm-color .msub{display:inline-block;margin-top:12px;padding:2px 8px;border-radius:6px;background:var(--accent-soft);color:var(--accent);}
.dm-color .mcard-detail .msub:nth-of-type(2){background:var(--accent-2-soft);color:var(--accent-2);}
.dm-color .mcard-detail .msub:nth-of-type(3){background:#e4f4f4;color:#0e8f8f;}

.flow-progress{margin:6px 0 10px;}
.flow-progress-text{font-size:12px;color:var(--text-dim);margin-bottom:6px;}
.flow-progress-text strong{color:var(--success);font-size:14px;}
.flow-segs{display:grid;grid-template-columns:repeat(8,1fr);gap:4px;}
.flow-seg{height:7px;border-radius:4px;background:var(--neutral-soft);}
.flow-seg-done{background:var(--c);}
.flow-seg-prog{background:linear-gradient(90deg,var(--c) 50%,color-mix(in srgb,var(--c) 22%,#fff) 50%);}
.flow-seg-lock{background:repeating-linear-gradient(45deg,#e7e3e6 0 4px,#f6f4f5 4px 8px);}

.flow-row{border-left:3px solid transparent;padding-left:12px;margin-left:-12px;}
.flow-row.flow-st-done{border-left-color:var(--c);}
.flow-row.flow-st-prog{border-left-color:color-mix(in srgb,var(--c) 55%,#fff);}
.flow-row:hover,.flow-row:focus{background:color-mix(in srgb,var(--c) 7%,#fff);}
.flow-ico{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:8px;flex:none;background:color-mix(in srgb,var(--c) 13%,#fff);}
.flow-name .flow-ico .line-icon{color:var(--c);}
.flow-st-todo .flow-ico,.flow-st-lock .flow-ico{filter:grayscale(.6);opacity:.7;}
.flow-st-todo .flow-name > span:last-child,.flow-st-lock .flow-name > span:last-child{color:var(--text-dim);}
.flow-detail{padding-left:37px;}
.btn.flow-req{background:color-mix(in srgb,var(--c) 12%,#fff);color:var(--c);border:1px solid color-mix(in srgb,var(--c) 30%,#fff);font-weight:600;}
.btn.flow-req:hover{background:var(--c);color:#fff;border-color:var(--c);}
.flow-lock{color:#8a8f98;background:#f6f4f5;}
@media (max-width:560px){.flow-act{padding-left:37px;}}

main a.dlink{display:inline-flex;align-items:center;gap:4px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--accent-2);font-weight:600;text-decoration:none;background:var(--accent-2-soft);padding:2px 9px;border-radius:7px;font-size:12px;}
main a.dlink:hover{background:var(--accent-2);color:#fff;}

.pcr-page .stat-card{border-top:3px solid var(--c);background:linear-gradient(180deg,color-mix(in srgb,var(--c) 7%,#fff),#fff 70%);}
.pcr-page .stat-card .sc-value{color:var(--c);}
.pcr-page .stat-card .sc-label{color:color-mix(in srgb,var(--c) 70%,#555);font-weight:600;}
.pcr-sec{border-left:3px solid var(--c);padding-left:12px;margin:8px 0;border-bottom:none;background:color-mix(in srgb,var(--c) 4%,#fff);border-radius:0 10px 10px 0;padding:10px 12px;}
.pcr-sec-name{color:var(--c);}
.pcr-jenis{display:inline-block;padding:2px 9px;border-radius:20px;font-size:11px;font-weight:600;}
.pcr-jenis-utama{background:#e2f3e8;color:#1e7a4c;}
.pcr-jenis-tambahan{background:#e4effb;color:#2a7bd5;}
.pcr-jenis-konsol{background:#f6ecd9;color:#b9791b;}
.pcr-arsip{font-size:10.5px;color:var(--text-faint);border:1px dashed var(--border);border-radius:6px;padding:1px 6px;}
.mcard-kb{border-top:3px solid #0e8f8f;}

/* Ronde 120 (2026-10-19) — Alur & Kirim Request dipisah; tahap belum dimulai tidak lagi pudar;
   warna Pencairan Utama/Kabar Terbaru/Tambahan dipertegas (lihat FLOW_COLORS). */
.mstack-col{display:flex;flex-direction:column;gap:14px;min-width:0;}
.flow-st-todo .flow-ico,.flow-st-lock .flow-ico{filter:none;opacity:1;}
.flow-st-todo .flow-name > span:last-child,.flow-st-lock .flow-name > span:last-child{color:var(--text);}
.flow-row.flow-st-todo{border-left-color:color-mix(in srgb,var(--c) 22%,#fff);}
.flow-st-todo .flow-detail{color:#b0aab3;font-style:italic;}
.mcard-rq{padding:14px 16px 12px;}
.rqt-list{display:flex;flex-direction:column;gap:8px;margin-top:8px;}
.rqt{display:flex;align-items:center;gap:10px;padding:9px 10px 9px 12px;border-radius:12px;border:1px solid color-mix(in srgb,var(--c) 28%,#fff);background:color-mix(in srgb,var(--c) 7%,#fff);border-left:4px solid var(--c);}
.rqt-ico{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:9px;flex:none;background:var(--c);}
.rqt-ico .line-icon{color:#fff;}
.rqt-text{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px;}
.rqt-name{font-weight:700;font-size:13px;color:color-mix(in srgb,var(--c) 80%,#111);}
.rqt-note{font-size:11.5px;color:var(--text-dim);}
.rqt-sent .rqt-note{color:var(--success);}
.btn.rqt-btn{flex:none;background:var(--c);color:#fff;border:1px solid var(--c);font-weight:600;min-width:92px;justify-content:center;}
.btn.rqt-btn:hover{filter:brightness(.92);}
.btn.rqt-btn.rqt-again{background:#fff;color:var(--c);}
.btn.rqt-btn.rqt-again:hover{background:var(--c);color:#fff;filter:none;}
.rqt-locked{background:#f6f5f6;border-color:var(--border);border-left-color:#c9c4cb;}
.rqt-locked .rqt-ico{background:#c9c4cb;}
.rqt-locked .rqt-name{color:var(--text-dim);}
.rqt-locked .rqt-note{color:var(--text-faint);}
.rqt-lock{flex:none;font-size:11.5px;color:#8a8f98;border:1px dashed #c9c4cb;border-radius:8px;padding:4px 10px;}
.mcard-flow .flow-row{grid-template-columns:minmax(0,1fr) auto auto;}
.mcard-flow .flow-act:empty{display:none;}
.flow-ico{background:color-mix(in srgb,var(--c) 18%,#fff);}
.flow-row.flow-st-todo{border-left-color:color-mix(in srgb,var(--c) 40%,#fff);}

/* Ronde 121 — Kirim Request jadi satu baris tombol di atas (tidak dobel dengan Alur) */
.rqbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin:0 0 14px;padding:12px 16px;background:#fff;border:1px solid var(--border);border-radius:12px;}
.rqbar-label{font-weight:700;font-size:13.5px;margin-right:4px;}
.rqbar-btns{display:flex;flex-wrap:wrap;gap:8px;}
.rqb{display:inline-flex;align-items:center;gap:7px;padding:7px 14px;border-radius:999px;border:1px solid var(--c);background:var(--c);color:#fff;font-size:12.5px;font-weight:600;cursor:pointer;font-family:inherit;transition:filter .12s,transform .12s;}
.rqb .line-icon{color:#fff;}
.rqb:hover{filter:brightness(.92);transform:translateY(-1px);}
.rqb.rqb-locked{background:#f1eff1;border-color:#e2dee2;color:#a29ca5;cursor:not-allowed;transform:none;filter:none;}
.rqb.rqb-locked .line-icon{color:#b5afb8;}
.rqbar-locks{flex-basis:100%;font-size:11.5px;color:var(--text-faint);}

/* Ronde 122 — Status Tim + Kirim Request 2 kolom ringkas, Detail Campaign selebar halaman di bawah */
.master-top2{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:14px;align-items:start;margin-bottom:14px;}
@media (max-width:900px){.master-top2{grid-template-columns:1fr;}}
.mcard-compact{padding:12px 14px 8px;}
.mcard-compact .flow-progress{margin:4px 0 6px;}
.mcard-compact .flow-segs .flow-seg{height:5px;}
.mcard-compact .flow-row{padding:6px 8px 6px 10px;margin-left:-10px;margin-right:-8px;}
.mcard-compact .flow-ico{width:22px;height:22px;border-radius:6px;}
.mcard-compact .flow-ico .line-icon{width:13px;height:13px;}
.mcard-compact .flow-name{font-size:12.5px;gap:8px;}
.mcard-compact .flow-detail{font-size:11px;padding-left:30px;}
.mcard-compact .chip{font-size:10.5px;padding:1px 8px;}
.mcard-compact .rqt-list{gap:6px;margin-top:6px;}
.mcard-compact .rqt{padding:6px 8px 6px 10px;gap:8px;border-radius:10px;border-left-width:3px;}
.mcard-compact .rqt-ico{width:24px;height:24px;border-radius:7px;}
.mcard-compact .rqt-ico .line-icon{width:13px;height:13px;}
.mcard-compact .rqt-name{font-size:12.5px;}
.mcard-compact .rqt-note{font-size:11px;}
.mcard-compact .btn.rqt-btn{min-width:0;padding:4px 10px;font-size:11.5px;}
.mcard-compact .rqt-lock{font-size:10.5px;padding:3px 8px;}
.mdet-grid{display:block;}
.master-detail-wide .mdet-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0 22px;}
@media (max-width:900px){.master-detail-wide .mdet-grid{grid-template-columns:1fr;}}
.master-detail-wide .mcard-detail .mrow{font-size:12.5px;}
.dm-color .mdet-sec:nth-child(2) .msub{background:var(--accent-2-soft);color:var(--accent-2);}
.dm-color .mdet-sec:nth-child(3) .msub{background:#e4f4f4;color:#0e8f8f;}

/* Ronde 123 — Data Master muat tanpa scroll: baris Status Tim & Kirim Request 1 baris, judul + progres sebaris */
.mcard-compact{position:relative;padding:10px 14px 6px;}
.mcard-compact .mcard-title{margin:0 0 6px;font-size:13.5px;}
.mcard-compact .flow-progress{position:absolute;top:10px;right:14px;margin:0;display:flex;align-items:center;gap:8px;width:46%;}
.mcard-compact .flow-progress-text{margin:0;white-space:nowrap;font-size:11px;}
.mcard-compact .flow-progress-text strong{font-size:12px;}
.mcard-compact .flow-segs{flex:1;gap:3px;}
.mcard-compact .flow-segs .flow-seg{height:5px;}
.mcard-compact .flow{margin-top:0;}
.mcard-compact .flow-row{grid-template-columns:auto minmax(0,1fr) auto;grid-template-areas:"name detail chip";gap:0 10px;padding:5px 8px 5px 10px;border-radius:8px;}
.mcard-compact .flow-detail{padding-left:0;font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.mcard-compact .flow-name{font-size:12.5px;white-space:nowrap;}
.mcard-compact .flow-ico{width:20px;height:20px;}
.mcard-compact .flow-ico .line-icon{width:12px;height:12px;}
.mcard-compact .flow-act:empty{display:none;}
.mcard-compact .rqt-list{gap:4px;margin-top:0;}
.mcard-compact .rqt{padding:4px 6px 4px 8px;}
.mcard-compact .rqt-ico{width:20px;height:20px;border-radius:6px;}
.mcard-compact .rqt-ico .line-icon{width:12px;height:12px;}
.mcard-compact .rqt-text{flex-direction:row;align-items:baseline;gap:8px;}
.mcard-compact .rqt-name{white-space:nowrap;}
.mcard-compact .rqt-note{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;}
.mcard-compact .btn.rqt-btn{padding:3px 10px;font-size:11px;}
.mcard-compact .rqt-lock{padding:2px 8px;}
.master-top2{gap:12px;margin-bottom:12px;}
.master-detail-wide .mcard-detail{padding:10px 16px 6px;}
.master-detail-wide .mcard-detail .mcard-title{margin-bottom:0;font-size:13.5px;}
.master-detail-wide .mcard-detail .mrow{padding:4px 0;font-size:12px;min-height:0;}
.master-detail-wide .msub{margin-top:8px;font-size:10.5px;}
.form-panel-solo.dm-color{padding-top:14px;padding-bottom:14px;}
@media (max-width:900px){.mcard-compact .flow-progress{position:static;width:auto;margin:0 0 6px;}.mcard-compact .flow-row{grid-template-columns:auto minmax(0,1fr) auto;}}
/* Ronde 124 — CL sekali request: label "Sudah" berwarna tahapnya */
.rqt-lock.rqt-once{border-style:solid;border-color:color-mix(in srgb,var(--c) 35%,#fff);color:var(--c);background:#fff;font-weight:600;}

/* ===== Ronde 125 (2026-10-19) — gaya Data Master diterapkan ke halaman lain =====
   Hafidh: suka penerapannya "tetap terlihat simpel", TIDAK suka banyak warna mencolok; kalau ada pembeda,
   pakai warna yang hampir mirip. Jadi: hanya keluarga warna brand (merah muda + biru) dalam nada lembut,
   kartu putih berbingkai tipis, label status pil pastel, kepala tabel bernada brand sangat muda. */
:root{ --tint-pink:#fdf3f7; --tint-blue:#f1f4fd; --line-soft:#ece6ea; }

/* Kartu: putih + bingkai tipis + bayangan halus (dulu abu-merah muda polos) */
.mcard,.pcx-card,.dbx-card,.pcd-card,.pcd-hero,.dbx-arow,.dbx-ok,.kanban-col{background:#fff;border:1px solid var(--line-soft);box-shadow:0 1px 2px rgba(30,28,25,.04);}
.pcx-k,.dbx-kpi .pcx-k{background:linear-gradient(180deg,var(--tint-blue),#fff 75%);border:1px solid var(--line-soft);}
.pcx-k-v{color:var(--accent-2);}
.dbx-arow:hover{background:var(--tint-pink);}

/* Judul bagian dashboard: garis kecil brand di kiri */
.dbx-sec{display:flex;align-items:baseline;gap:8px;}
.dbx-sec::before{content:'';align-self:center;width:4px;height:14px;border-radius:3px;background:linear-gradient(180deg,var(--accent),var(--accent-2));flex:none;}

/* Judul halaman: garis bawah gradasi tipis */
.home-head h2{position:relative;padding-bottom:6px;}
.home-head h2::after{content:'';position:absolute;left:0;bottom:0;width:36px;height:3px;border-radius:3px;background:linear-gradient(90deg,var(--accent),var(--accent-2));}

/* Label status: pil pastel lembut (menggantikan titik abu-abu Ronde 93) — warna senada, tidak mencolok */
.chip,.campaign-list td .chip,.pcx-table td .chip{padding:2px 9px;border-radius:20px;font-weight:600;}
.chip::before{display:none;}
.chip.success,.campaign-list td .chip.success,.pcx-table td .chip.success{background:#e6f3ec;color:#2f7a55;}
.chip.warning,.campaign-list td .chip.warning,.pcx-table td .chip.warning{background:#f7efe0;color:#9a6a1f;}
.chip.info,.campaign-list td .chip.info,.pcx-table td .chip.info{background:var(--tint-blue);color:#3a55a8;}
.chip.accent,.campaign-list td .chip.accent,.pcx-table td .chip.accent{background:var(--tint-pink);color:#b43a6d;}
.chip.neutral,.campaign-list td .chip.neutral,.pcx-table td .chip.neutral{background:#f1eff1;color:#7a7480;}
.chip.critical,.campaign-list td .chip.critical,.pcx-table td .chip.critical{background:#fbecef;color:#b3374f;}

/* Tabel: kepala bernada merah muda sangat muda, baris putih, hover biru sangat muda */
.campaign-list th,table th{background:var(--tint-pink);color:#8a6a7c;}
.campaign-list-row td{background:#fff;}
.campaign-list-row:hover td{background:var(--tint-blue);}
.table-wrap{background:#fff;border-color:var(--line-soft);}

/* Kolom PIC di Daftar Campaign */
.cell-pic{white-space:nowrap;}
.pic-line{display:flex;align-items:baseline;gap:6px;font-size:12px;line-height:1.35;}
.pic-lbl{font-size:10px;color:var(--text-faint);min-width:38px;}

/* Grafik Perbandingan Utama vs Konsol ikut palet baru */
.pcb-bar-u{background:#2f4fb5;}
.pcb-bar-k{background:#e07aa4;}
.pcb-h-left{color:#2f4fb5;}
/* Ronde 125: lebar kolom Daftar Campaign setelah kolom PIC ditambah */
.campaign-list th.col-camp{width:18%;}
.campaign-list th.col-partner{width:16%;}
.campaign-list th.col-pic{width:11%;}
.campaign-list th.col-link{width:23%;}
.campaign-list th.col-status{width:10%;}
.campaign-list th.col-tick{width:6.5%;}

/* Ronde 126 (2026-10-19, Hafidh: Data Master "masih keramean"; Status Tim dua kolom masing-masing 4, Kirim
   Request kecil tapi jangan kekecilan). Warna hanya di ikon & tombol; latar/garis warna per baris dibuang. */
.master-top2{grid-template-columns:minmax(0,1.8fr) minmax(0,1fr);}
.mcard-compact .flow{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:repeat(4,auto);grid-auto-flow:column;column-gap:22px;}
.mcard-compact .flow-row{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"name chip" "detail detail";gap:1px 8px;padding:7px 4px;margin:0;border-left:0;border-radius:0;border-bottom:1px solid var(--line-soft,#ece6ea);}
.mcard-compact .flow-row:nth-child(4n){border-bottom:0;}
.mcard-compact .flow-row.flow-st-done,.mcard-compact .flow-row.flow-st-prog,.mcard-compact .flow-row.flow-st-todo{border-left:0;}
.mcard-compact .flow-row:hover,.mcard-compact .flow-row:focus{background:var(--tint-blue,#f1f4fd);border-radius:8px;}
.mcard-compact .flow-detail{padding-left:28px;white-space:nowrap;}
.mcard-compact .flow-st-todo .flow-detail{font-style:normal;color:var(--text-faint);}
.mcard-compact .rqt-list{gap:0;}
.mcard-compact .rqt{background:transparent;border:0;border-bottom:1px solid var(--line-soft,#ece6ea);border-radius:0;padding:6px 2px;}
.mcard-compact .rqt:last-child{border-bottom:0;}
.mcard-compact .rqt-text{flex-direction:column;align-items:flex-start;gap:0;}
.mcard-compact .rqt-name{color:var(--text);font-weight:600;}
.mcard-compact .rqt-note{color:var(--text-faint);}
.mcard-compact .rqt-sent .rqt-note{color:var(--text-faint);}
.mcard-compact .rqt-ico{width:22px;height:22px;background:color-mix(in srgb,var(--c) 15%,#fff);}
.mcard-compact .rqt-ico .line-icon{color:var(--c);}
.mcard-compact .rqt-locked .rqt-ico{background:#f1eff1;}
.mcard-compact .rqt-locked .rqt-ico .line-icon{color:#b5afb8;}
.mcard-compact .rqt-locked{background:transparent;}
@media (max-width:640px){.mcard-compact .flow{grid-template-columns:1fr;grid-auto-flow:row;grid-template-rows:none;}.mcard-compact .flow-row:nth-child(4n){border-bottom:1px solid var(--line-soft,#ece6ea);}}
.mcard-compact .rqt-text{align-items:stretch;overflow:hidden;}
.mcard-compact .rqt-note{display:block;max-width:100%;}
@media (max-width:900px){.master-top2{grid-template-columns:1fr;}}

/* Ronde 127 — blok gabungan "Pencairan & Kabar Terbaru" di Status Tim + halaman gabungan yang ringkas */
.mcard-compact .flow-group{grid-column:2;grid-row:1 / span 4;align-self:stretch;border:1px solid var(--line-soft,#ece6ea);border-radius:12px;padding:8px 12px 4px;cursor:pointer;background:#fff;}
.mcard-compact .flow-group:hover,.mcard-compact .flow-group:focus{background:var(--tint-blue,#f1f4fd);outline:none;}
.flow-group-head{display:flex;justify-content:space-between;align-items:center;font-size:12.5px;font-weight:700;margin-bottom:2px;}
.flow-group-go{font-size:11.5px;font-weight:600;color:var(--accent-2);}
.flow-sub{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"name chip" "detail detail";gap:0 8px;padding:5px 0;border-bottom:1px dashed var(--line-soft,#ece6ea);}
.flow-sub:last-child{border-bottom:0;}
.flow-sub .flow-name{font-size:12px;font-weight:600;}
.flow-sub .flow-act{display:none;}
.flow-sub .flow-detail{padding-left:28px;font-size:11px;}
@media (max-width:640px){.mcard-compact .flow-group{grid-column:auto;grid-row:auto;}}
.pcr-jenis-kabar{background:#fdeee3;color:#c4561b;}
.pcr-fold{margin:14px 0 0;border:1px solid var(--line-soft,#ece6ea);border-radius:12px;background:#fff;}
.pcr-fold > summary{cursor:pointer;list-style:none;padding:10px 14px;font-size:13px;font-weight:600;color:var(--accent-2);}
.pcr-fold > summary::-webkit-details-marker{display:none;}
.pcr-fold > summary::before{content:'▸';display:inline-block;margin-right:8px;transition:transform .15s;}
.pcr-fold[open] > summary::before{transform:rotate(90deg);}
.pcr-fold .pcr-layout{margin:0;padding:0 14px 14px;}
.pcr-page .table-wrap{margin-top:4px;}

/* ===== Ronde 128 (2026-10-19) — perbaikan UI/UX Data Master & Pencairan & Kabar (brief Senior Product Designer) =====
   Prinsip: latar abu-abu sangat muda, kartu putih, satu bahasa warna status (hijau selesai, amber menunggu,
   biru proses, merah masalah, abu-abu belum), pink hanya untuk tindakan utama & menu aktif, spacing 4/8 px,
   radius 10–12 px, teks sekunder lolos kontras WCAG AA. */
:root{ --bg:#f6f7f9; --text-faint:#6e6873; --text-dim:#5b5560; --line:#e6e3e7;
  --ok:#1f7a4d; --ok-bg:#e7f4ec; --wait:#8a5a00; --wait-bg:#fbf0d9; --proc:#2b54a6; --proc-bg:#e8eefb;
  --bad:#b4233c; --bad-bg:#fbe9ec; --off:#5f5a64; --off-bg:#efedf0; }
body{background:var(--bg);}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;}

/* Tombol: primary / secondary / tertiary / disabled + fokus keyboard */
.btn-secondary{background:#fff;border-color:#d9d4da;color:var(--text);}
.btn-secondary:hover{background:#f6f4f7;}
.btn-tertiary{background:transparent;border-color:transparent;color:var(--accent-2);font-weight:600;padding-left:6px;padding-right:6px;}
.btn-tertiary:hover{background:var(--proc-bg);}
.btn-link{background:none;border:0;padding:2px 0;color:var(--accent-2);font-size:11.5px;font-weight:600;cursor:pointer;text-decoration:underline;text-underline-offset:2px;font-family:inherit;}
.btn-danger-ghost{background:transparent;border-color:transparent;color:var(--bad);}
.btn-danger-ghost:hover{background:var(--bad-bg);}
.btn:disabled,.btn[aria-disabled="true"]{opacity:.5;cursor:not-allowed;transform:none;}
.btn:focus-visible,.btn-link:focus-visible,.seg-btn:focus-visible,[role="button"]:focus-visible,a:focus-visible,select:focus-visible,input:focus-visible{outline:2px solid var(--accent-2);outline-offset:2px;}

/* Badge status seragam */
.st{display:inline-flex;align-items:center;padding:2px 8px;border-radius:999px;font-size:11.5px;font-weight:600;line-height:1.5;white-space:nowrap;}
.st-ok{background:var(--ok-bg);color:var(--ok);}
.st-wait{background:var(--wait-bg);color:var(--wait);}
.st-proc{background:var(--proc-bg);color:var(--proc);}
.st-bad{background:var(--bad-bg);color:var(--bad);}
.st-off{background:var(--off-bg);color:var(--off);}

/* Panel bertingkat diratakan: halaman campaign = kartu putih langsung di atas latar */
.form-panel-solo.dm-color{background:transparent;border:0;box-shadow:none;padding:0;}
.form-panel-solo.dm-color > .panel-head{margin:0 0 12px;}
.dm-color .mcard{background:#fff;border:1px solid var(--line);box-shadow:none;border-radius:12px;padding:16px;}
.dm-color .mcard-title{font-size:14px;font-weight:700;margin:0 0 8px;}
.dm-color .msub{background:none !important;color:var(--text-faint) !important;padding:0;margin-top:12px;font-size:11px;text-transform:uppercase;letter-spacing:.04em;}

/* Header campaign */
.camp-head{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1.2fr) auto;gap:16px 28px;align-items:center;background:#fff;border:1px solid var(--line);border-radius:12px;padding:16px 20px;margin-bottom:16px;}
.ch-kicker{font-size:11px;font-weight:600;color:var(--text-faint);text-transform:uppercase;letter-spacing:.05em;}
.ch-title{margin:2px 0 4px;font-size:22px;font-weight:700;line-height:1.2;color:var(--text);display:flex;align-items:center;gap:8px;flex-wrap:wrap;word-break:break-word;}
main a.ch-link{font-size:12.5px;color:var(--accent-2);text-decoration:none;word-break:break-all;}
main a.ch-link:hover{text-decoration:underline;}
.ch-meta{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 20px;}
.ch-k{font-size:11px;color:var(--text-faint);}
.ch-v{font-size:13px;font-weight:600;color:var(--text);margin-top:1px;}
.ch-money{display:flex;gap:24px;padding-left:24px;border-left:1px solid var(--line);}
.ch-n{font-size:18px;font-weight:700;font-variant-numeric:tabular-nums;white-space:nowrap;margin-top:1px;}
.ch-s{font-size:11.5px;color:var(--text-faint);}
@media (max-width:1100px){.camp-head{grid-template-columns:1fr 1fr;}.ch-money{grid-column:1 / -1;border-left:0;padding-left:0;border-top:1px solid var(--line);padding-top:12px;}}
@media (max-width:640px){.camp-head{grid-template-columns:1fr;padding:14px 16px;}.ch-title{font-size:19px;}.ch-money{gap:20px;}}

/* Perlu Tindakan */
.na-card{margin-bottom:12px;}
.na-count{display:inline-block;min-width:20px;padding:0 6px;border-radius:999px;background:var(--accent);color:#fff;font-size:11px;text-align:center;margin-left:6px;vertical-align:middle;}
.na-item{display:flex;align-items:center;gap:12px;padding:10px 0;border-top:1px solid var(--line);}
.na-item:first-of-type{border-top:0;}
.na-dot{width:8px;height:8px;border-radius:50%;flex:none;background:var(--off);}
.na-wait .na-dot{background:#d99a1e;} .na-proc .na-dot{background:var(--proc);} .na-bad .na-dot{background:var(--bad);}
.na-text{flex:1;min-width:0;}
.na-title{font-size:13.5px;font-weight:600;}
.na-desc{font-size:12px;color:var(--text-faint);margin-top:2px;}
.na-empty{display:flex;align-items:center;gap:10px;font-size:13px;color:var(--text-dim);}

/* Progres pekerjaan tim */
.master-top2{grid-template-columns:minmax(0,1.6fr) minmax(0,1fr);gap:12px;margin-bottom:12px;}
.master-top2.master-top-solo{grid-template-columns:1fr;}
@media (max-width:900px){.master-top2{grid-template-columns:1fr;}}
.wp-sum{display:flex;align-items:center;gap:12px;font-size:12.5px;color:var(--text-dim);margin-bottom:8px;}
.wp-sum strong{color:var(--text);}
.wp-bar{flex:1;max-width:220px;height:6px;border-radius:6px;background:var(--off-bg);overflow:hidden;}
.wp-bar > span{display:block;height:100%;background:var(--ok);border-radius:6px;}
.wp-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 20px;}
@media (max-width:640px){.wp-grid{grid-template-columns:1fr;}}
.wp-row{display:flex;align-items:center;gap:10px;padding:9px 6px;border-bottom:1px solid var(--line);cursor:pointer;border-radius:8px;min-width:0;}
.wp-row:hover{background:#f7f6f8;}
.wp-ico{display:inline-flex;width:26px;height:26px;border-radius:8px;align-items:center;justify-content:center;background:#f2f0f3;flex:none;}
.wp-ico .line-icon{color:var(--text-dim);}
.wp-main{flex:1;min-width:0;display:flex;flex-direction:column;}
.wp-title{font-size:13px;font-weight:600;}
.wp-detail{font-size:11.5px;color:var(--text-faint);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.wp-hint{font-size:11.5px;color:var(--text-faint);margin-top:8px;}

/* Kirim Request */
.dm-color .mcard-rq{padding:16px;}
.dm-color .rqt-list{display:flex;flex-direction:column;gap:0;margin:0;}
.dm-color .rqt{display:flex;align-items:center;gap:10px;padding:9px 0;border:0;border-top:1px solid var(--line);border-radius:0;background:none;}
.dm-color .rqt:first-child{border-top:0;}
.dm-color .rqt-ico{width:26px;height:26px;border-radius:8px;background:#f2f0f3;}
.dm-color .rqt-ico .line-icon{color:var(--text-dim);}
.dm-color .rqt-text{flex:1;min-width:0;display:flex;flex-direction:column;align-items:stretch;}
.dm-color .rqt-name{font-size:13px;font-weight:600;color:var(--text);white-space:normal;}
.dm-color .rqt-note{font-size:11.5px;color:var(--text-faint);white-space:normal;}
.rqt-lockwhy{font-size:11.5px;color:var(--wait);margin-top:2px;}
.dm-color .btn.rqt-btn{flex:none;padding:5px 10px;font-size:12px;min-width:0;}
.dm-color .btn-primary.rqt-btn{background:var(--accent);border-color:var(--accent);color:#fff;}
.rqt-state{flex:none;font-size:11.5px;font-weight:600;color:var(--off);background:var(--off-bg);padding:3px 9px;border-radius:999px;}
.dm-color .rqt-locked .rqt-name{color:var(--text-dim);}

/* Ringkasan Pencairan & Kabar (Data Master) */
.pcs-card{margin-bottom:12px;}
.pcs-head{display:flex;justify-content:space-between;align-items:center;}
.pcs-head .mcard-title{margin:0;}
.pcs-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:0;margin-top:8px;}
.pcs-tile{padding:4px 16px;border-left:1px solid var(--line);min-width:0;}
.pcs-tile:first-child{border-left:0;padding-left:0;}
.pcs-t{font-size:12px;color:var(--text-dim);display:flex;align-items:center;gap:6px;flex-wrap:wrap;}
.pcs-v{font-size:17px;font-weight:700;font-variant-numeric:tabular-nums;margin-top:4px;white-space:nowrap;}
.pcs-n{font-size:11.5px;color:var(--text-faint);margin-top:2px;}
@media (max-width:900px){.pcs-grid{grid-template-columns:repeat(2,minmax(0,1fr));row-gap:12px;}.pcs-tile:nth-child(3){border-left:0;padding-left:0;}}

/* Detail campaign */
.dm-color .mrow{font-size:12.5px;}
.dm-color .mrow-k{color:var(--text-faint);}
.mrow-wrap{white-space:normal !important;text-align:right;overflow-wrap:anywhere;}
.dm-color main a.dlink,main .dm-color a.dlink{background:none;color:var(--accent-2);padding:0;font-weight:600;}
main .dm-color a.dlink:hover{text-decoration:underline;background:none;color:var(--accent-2);}

/* Halaman Pencairan & Kabar */
.pcr-page .stat-row.pcr-kpi .stat-card{background:#fff;border:1px solid var(--line);border-top:1px solid var(--line);box-shadow:none;border-radius:12px;padding:12px 14px;}
.pcr-page .stat-card .sc-label{color:var(--text-dim);font-weight:600;font-size:12px;text-transform:none;}
.pcr-page .stat-card .sc-value{color:var(--text);font-family:inherit;font-size:18px;font-weight:700;font-variant-numeric:tabular-nums;}
.pcr-page .stat-card .sc-note{color:var(--text-faint);}
.pcr-hist{background:#fff;border:1px solid var(--line);border-radius:12px;margin-top:12px;overflow:hidden;}
.pcr-hist-head{display:flex;flex-wrap:wrap;gap:10px;align-items:center;justify-content:space-between;}
.pcr-tools{display:flex;flex-wrap:wrap;gap:8px;align-items:center;}
.seg{display:inline-flex;border:1px solid var(--line);border-radius:10px;padding:2px;background:#f7f6f8;}
.seg-btn{border:0;background:none;padding:5px 10px;border-radius:8px;font-size:12.5px;font-weight:600;color:var(--text-dim);cursor:pointer;font-family:inherit;}
.seg-btn.is-on{background:#fff;color:var(--text);box-shadow:0 1px 2px rgba(0,0,0,.08);}
.seg-n{font-weight:500;color:var(--text-faint);margin-left:2px;}
.pcr-status,.pcr-q{border:1px solid var(--line);border-radius:8px;padding:6px 10px;font-size:12.5px;background:#fff;font-family:inherit;}
.pcr-q{min-width:220px;}
.pcr-scroll{max-height:560px;overflow:auto;}
.pcr-table{width:100%;border-collapse:collapse;min-width:860px;}
.pcr-table thead th{position:sticky;top:0;z-index:1;background:#faf9fb;color:var(--text-dim);font-size:11.5px;font-weight:600;text-align:left;padding:8px 10px;border-bottom:1px solid var(--line);}
.pcr-table td{padding:9px 10px;border-bottom:1px solid var(--line);font-size:12.5px;vertical-align:top;}
.pcr-table tr:last-child td{border-bottom:0;}
.pcr-table .num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap;}
.pcr-table tr.pcr-click{cursor:pointer;}
.pcr-table tr.pcr-click:hover td{background:#f7f9fe;}
.pcr-f-pc .c-kb,.pcr-f-kb .c-pc{display:none;}
.pcr-kind{display:inline-flex;align-items:center;gap:6px;font-weight:600;white-space:nowrap;}
.pcr-kind .line-icon{color:var(--text-faint);}
.pcr-page .pcr-arsip{font-size:10.5px;color:var(--text-faint);border:1px solid var(--line);border-radius:6px;padding:0 5px;background:#fff;font-weight:500;}
.pcr-sub{font-size:11px;color:var(--text-faint);margin-top:2px;font-weight:400;}
.pcr-note{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;max-width:320px;}
.pcr-table td.dt{white-space:nowrap;}
.dt-d{display:block;} .dt-t{display:block;font-size:11px;color:var(--text-faint);}
.pcr-act{text-align:right;white-space:nowrap;}
.pcr-empty{padding:24px;text-align:center;color:var(--text-faint);font-size:13px;}
.pcr-foot{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 14px;border-top:1px solid var(--line);font-size:12px;color:var(--text-faint);}
.pcr-legend{padding:0 14px 12px;font-size:11.5px;color:var(--text-faint);}
.pcr-detail .mrow{align-items:flex-start;}
.pcr-detail-note{white-space:pre-wrap;font-size:13px;line-height:1.5;padding:6px 0 4px;}
.pcr-fold{border-color:var(--line);}
.pcr-page .pcr-sec{background:#faf9fb;border-left:3px solid var(--line);}
.pcr-page .pcr-sec-name{color:var(--text);}
@media (max-width:640px){.pcr-q{min-width:0;flex:1;}.pcr-tools{width:100%;}}

/* Sidebar: navigasi campaign dibedakan dari navigasi global */
.side-campaign{margin:10px 0 6px;padding:8px 6px 6px;border:1px solid var(--line);border-radius:12px;background:#fff;}
.side-campaign-k{font-size:10.5px;font-weight:600;color:var(--text-faint);text-transform:uppercase;letter-spacing:.05em;padding:0 6px;}
.side-campaign-name{font-size:12.5px;font-weight:700;color:var(--text);padding:1px 6px 6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.dm-color .btn-secondary.rqt-btn{background:#fff;color:var(--text);border:1px solid #d9d4da;filter:none;}
.dm-color .btn-secondary.rqt-btn:hover{background:#f6f4f7;}
.dm-color .btn-primary.rqt-btn:hover{filter:brightness(.95);}
.pcr-tools .pcr-status,.pcr-tools .pcr-q{width:auto;margin:0;}
.pcr-hist-head h3{margin:0;}
.pcr-note-cell .btn-link{display:block;margin-top:2px;}
@media (max-width:640px){.pcr-tools .pcr-q{flex:1 1 100%;width:100%;}.pcr-tools .seg{flex-wrap:wrap;}}

/* Ronde 129 — tombol request di samping status (Progres) dan di kotak ringkasan Pencairan & Kabar */
.wp-side{display:flex;flex-direction:column;align-items:flex-end;gap:4px;flex:none;}
.wp-row{align-items:flex-start;}
.rqc{display:flex;flex-direction:column;align-items:flex-end;gap:2px;}
.rqc .btn.rqt-btn{padding:4px 10px;font-size:12px;}
.rqc-note{font-size:11px;color:var(--text-faint);white-space:nowrap;}
.rqc-why{font-size:11px;color:var(--wait);max-width:240px;text-align:right;}
.pcs-tile .rqc{align-items:flex-start;margin-top:8px;}
.pcs-tile .rqc-why{text-align:left;max-width:none;}
.dm-color .btn-secondary.rqt-btn{background:#fff;color:var(--text);border:1px solid #d9d4da;}
.dm-color .btn-primary.rqt-btn{background:var(--accent);border-color:var(--accent);color:#fff;}

/* Ronde 130 (2026-10-19, Hafidh: "di bagian judul, tetap bagus berwarna") -- header campaign kembali
   bergradasi lembut merah muda -> biru + garis brand di atas (seperti Ronde 119), susunan Ronde 128 tetap. */
.camp-head{position:relative;overflow:hidden;background:linear-gradient(120deg,#ffffff 0%,#fff3f8 50%,#edf1fd 100%);border-color:#f0dbe6;}
.camp-head::before{content:'';position:absolute;left:0;top:0;right:0;height:4px;background:linear-gradient(90deg,var(--accent),var(--accent-3),var(--accent-2));}
.camp-head .ch-kicker{color:var(--accent);}
.camp-head .ch-title{color:#1e1c19;}
.camp-head .ch-money{border-left-color:#ecd9e4;}
.camp-head .ch-n{color:var(--accent-2);}
@media (max-width:1100px){.camp-head .ch-money{border-top-color:#ecd9e4;}}

/* Ronde 132 — Riwayat Pencairan & Kabar jadi daftar ringkas (tanpa tabel lebar / geser samping) */
.pcr-scroll{max-height:none;overflow:visible;}
.pcr-list{list-style:none;margin:0;padding:0;}
.pcr-item{display:grid;grid-template-columns:104px 30px minmax(0,1fr) auto 14px;align-items:center;gap:0 12px;padding:11px 16px;border-top:1px solid var(--line);cursor:pointer;}
.pcr-item:first-child{border-top:0;}
.pcr-item:hover,.pcr-item:focus-visible{background:#f7f8fd;outline:none;}
.pcr-when{display:flex;flex-direction:column;line-height:1.25;}
.pcr-d{font-size:12.5px;font-weight:600;color:var(--text);white-space:nowrap;}
.pcr-t{font-size:11px;color:var(--text-faint);}
.pcr-ico{display:inline-flex;width:30px;height:30px;border-radius:9px;align-items:center;justify-content:center;background:#f2f0f3;}
.pcr-ico .line-icon{color:var(--text-dim);}
.pcr-body{min-width:0;display:flex;flex-direction:column;gap:2px;}
.pcr-line1{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.pcr-title{font-size:13.5px;font-weight:600;}
.pcr-line2{font-size:12px;color:var(--text-faint);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.pcr-amt{font-size:14px;font-weight:700;font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap;display:flex;flex-direction:column;align-items:flex-end;}
.pcr-amt .pcr-sub{font-weight:400;}
.pcr-go{color:var(--text-faint);font-size:18px;line-height:1;}
.pcr-item .pcr-sub{margin:0;}
@media (max-width:640px){
  .pcr-item{grid-template-columns:30px minmax(0,1fr) auto;grid-template-areas:"ico body amt" "ico when when";row-gap:4px;padding:10px 12px;}
  .pcr-ico{grid-area:ico;align-self:start;} .pcr-body{grid-area:body;} .pcr-amt{grid-area:amt;} .pcr-go{display:none;}
  .pcr-when{grid-area:when;flex-direction:row;gap:6px;}
}

/* Ronde 133 — periode Dashboard Pencairan: rentang bulan bebas */
.pcd-range{display:inline-flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:12.5px;color:var(--text-dim);}
.pcd-select.pcd-select-sm{min-width:140px;}

/* Ronde 135 — pengecualian Dashboard Pencairan & rasio GDV per campaign */
.pcx-ex-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.4fr);gap:20px;margin-top:10px;}
@media (max-width:760px){.pcx-ex-grid{grid-template-columns:1fr;}}
.pcx-ex-grid h4{margin:0 0 8px;font-size:13px;}
.pcx-ex-grid .dash-search{width:100%;margin-bottom:8px;}
.pcx-ex-list{max-height:360px;overflow:auto;border:1px solid var(--line,#e6e3e7);border-radius:10px;padding:4px 0;}
.pcx-check{display:grid;grid-template-columns:18px minmax(0,1fr);column-gap:8px;padding:7px 12px;cursor:pointer;font-size:13px;align-items:start;}
.pcx-check:hover{background:#f7f6f8;}
.pcx-check input{margin-top:3px;width:auto;}
.pcx-check .cell-muted{grid-column:2;font-size:11.5px;}
.pcx-check-n{font-weight:600;overflow-wrap:anywhere;}
.pcx-check.is-dim{opacity:.6;}
.pcd-ex-btn{white-space:nowrap;}
.pcd-view-seg{margin-top:6px;margin-bottom:12px;align-self:flex-start;width:max-content;}
.pcd-ratio-sum{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-top:0;margin-bottom:10px;}
.pcd-ratio-sum > div{border:1px solid var(--line,#e6e3e7);border-radius:10px;padding:10px 12px;background:#fff;}
.pcd-ratio-sum span{display:block;font-size:11.5px;color:var(--text-faint);}
.pcd-ratio-sum strong{font-size:16px;font-variant-numeric:tabular-nums;}

/* Ronde 136 — Tipe Campaign (Personal/Komunal) di tab Per campaign */
.pcd-tipe-bar{display:flex;flex-wrap:wrap;align-items:center;gap:8px 16px;margin-bottom:10px;}
.pcd-tipe-sum{display:flex;flex-wrap:wrap;gap:6px 16px;font-size:12px;color:var(--text-dim);font-variant-numeric:tabular-nums;}
.pcd-tipe-sum strong{color:var(--text);margin-right:4px;}
.pcd-tipe-hint{flex-basis:100%;font-size:11.5px;color:var(--text-faint);}
.pcd-tipe-sel{border:1px solid #d9d4da;border-radius:8px;padding:4px 8px;font-size:12.5px;background:#fff;width:auto;min-width:104px;font-family:inherit;}
.pcd-tipe-sel.is-empty{color:var(--text-faint);border-style:dashed;}
.pcd-tipe-td{white-space:nowrap;}
.modal-box select.pcd-tipe-sel{height:auto;padding:4px 8px;background:#fff;font-size:12.5px;}
.modal-box select.pcd-tipe-sel.is-empty{border:1px dashed #cfc8d1;color:var(--text-faint);}

/* Ronde 137 — Perbarui GDV massal & Sinkron Semua Sheet */
.kbb-scopes{display:flex;flex-direction:column;gap:8px;margin:12px 0 6px;font-size:13.5px;}
.kbb-scopes label{display:flex;align-items:center;gap:8px;cursor:pointer;}
.kbb-scopes input{width:auto;}
.kbb-est{font-size:12px;}
.kbb-bar{height:8px;border-radius:8px;background:#efedf0;overflow:hidden;margin:14px 0 6px;}
.kbb-bar span{display:block;height:100%;background:var(--accent-2);border-radius:8px;transition:width .3s;}
.kbb-fail{max-height:220px;overflow:auto;font-size:12.5px;border:1px solid var(--line,#e6e3e7);border-radius:10px;padding:8px 12px;}

/* Ronde 139 — Riwayat dikelompokkan per jenis; perbaikan filter (display:grid menimpa atribut hidden) */
.pcr-item[hidden],.pcr-group[hidden]{display:none !important;}
.pcr-group{list-style:none;border-top:1px solid var(--line,#e6e3e7);}
.pcr-group:first-child{border-top:0;}
.pcr-g-head{display:flex;align-items:center;gap:10px;padding:10px 16px;background:color-mix(in srgb,var(--gc) 7%,#fff);border-left:4px solid var(--gc);}
.pcr-g-dot{width:10px;height:10px;border-radius:3px;background:var(--gc);flex:none;}
.pcr-g-name{font-weight:700;font-size:13.5px;color:color-mix(in srgb,var(--gc) 75%,#111);}
.pcr-g-info{font-size:12px;color:var(--text-faint);}
.pcr-g-total{margin-left:auto;font-weight:700;font-size:14px;font-variant-numeric:tabular-nums;color:color-mix(in srgb,var(--gc) 75%,#111);}
.pcr-g-list{list-style:none;margin:0;padding:0;}
.pcr-g-list .pcr-item{border-left:4px solid color-mix(in srgb,var(--gc) 25%,#fff);}
.pcr-g-utama{--gc:#2f4fb5;} .pcr-g-tambahan{--gc:#5b7be0;} .pcr-g-konsol{--gc:#c4527f;} .pcr-g-kabar{--gc:#d9822b;}
.pcr-group .pcr-item .pcr-title{font-weight:600;}

/* ---------- Ronde 140: Arsip Pencairan (periode, kartu jenis, filter ringkas, tabel jenis+nominal) ---------- */
.arx-per{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 12px;}
.arx-per-l{font-size:12.5px;font-weight:700;color:var(--text);}
.arx-per-n{font-size:11.5px;}
.arx-cards{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin:0 0 10px;}
.arx-card{--gc:#113BAD;display:flex;flex-direction:column;align-items:flex-start;gap:2px;text-align:left;font-family:inherit;cursor:pointer;
  background:color-mix(in srgb,var(--gc) 5%,#fff);border:1px solid color-mix(in srgb,var(--gc) 18%,#fff);border-left:4px solid color-mix(in srgb,var(--gc) 55%,#fff);
  border-radius:10px;padding:9px 12px;min-width:0;transition:background .12s,border-color .12s;}
.arx-card:hover{background:color-mix(in srgb,var(--gc) 10%,#fff);}
.arx-card.is-on{background:color-mix(in srgb,var(--gc) 13%,#fff);border-color:var(--gc);border-left-color:var(--gc);box-shadow:0 1px 3px rgba(0,0,0,.06);}
.arx-c-l{font-size:11.5px;font-weight:700;color:var(--gc);}
.arx-c-v{font-size:16px;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;}
.arx-c-s{font-size:11px;color:var(--text-faint);}
.arx-c-all{--gc:#5b5560;} .arx-c-utama{--gc:#2f4fb5;} .arx-c-tambahan{--gc:#5b7be0;} .arx-c-konsol{--gc:#c4527f;}
.arx-note{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 12px;font-size:12px;color:var(--text-dim);}
.arx-note-dot{width:7px;height:7px;border-radius:50%;background:var(--warning);flex:0 0 auto;}
.arx-filters .pcx-bar .dash-search{max-width:320px;}
.arx-filters .seg{flex:0 0 auto;}
.arx-pills{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin:8px 0 0;}
.arx-pills:empty{display:none;}
.arx-pill{display:inline-flex;align-items:center;gap:4px;padding:3px 4px 3px 10px;border-radius:20px;background:var(--accent-soft,#eef1fb);color:var(--text);font-size:12px;}
.arx-pill button{border:0;background:none;cursor:pointer;font-size:14px;line-height:1;color:var(--text-dim);padding:0 5px;border-radius:50%;}
.arx-pill button:hover{background:rgba(0,0,0,.06);color:var(--text);}
.arx-sum{font-size:12.5px;color:var(--text);margin:12px 0 8px;}
.arx-table .num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap;}
.arx-row{cursor:pointer;}
.arx-row:hover td{background:#fafbfd;}
.arx-j{--gc:#5b5560;display:inline-block;padding:2px 9px;border-radius:20px;font-size:11px;font-weight:700;color:var(--gc);background:color-mix(in srgb,var(--gc) 10%,#fff);}
.arx-j-utama{--gc:#2f4fb5;} .arx-j-tambahan{--gc:#5b7be0;} .arx-j-konsol{--gc:#c4527f;}
@media (max-width:760px){.arx-cards{grid-template-columns:repeat(2,minmax(0,1fr));}.arx-per-n{display:none;}}
/* Ronde 140c: kolom centang Utama/Tambahan/Konsol terpisah (bisa diurutkan masing-masing) */
.arx-table th.arx-tk,.arx-table td.arx-tk{text-align:center;padding-left:2px;padding-right:2px;}
.arx-table th.arx-tk{font-size:10.5px;}

/* ---------- Ronde 141: tinjau data dobel Arsip Pencairan ---------- */
.arx-note-dup .arx-note-dot{background:#d9577f;}
.dup-top{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;margin-top:4px;margin-bottom:8px;font-size:12.5px;}
.dup-top #dupCount{color:var(--text-dim);}
.dup-body{max-height:56vh;overflow:auto;padding-right:4px;}
.dup-sec{margin:0 0 14px;}
.dup-sec-h{font-size:13px;margin:6px 0 2px;}
.dup-g{border:1px solid var(--line-soft,#eee);border-radius:10px;padding:8px 10px;margin:8px 0;background:#fff;}
.dup-g-h{font-size:12.5px;margin:0 0 6px;}
.dup-t{width:100%;border-collapse:collapse;font-size:12px;}
.dup-t th{font-size:10.5px;text-align:left;color:var(--text-faint);font-weight:600;padding:3px 6px;background:transparent;}
.dup-t td{padding:5px 6px;border-top:1px solid var(--line-soft,#f0f0f0);vertical-align:top;}
.dup-t .pcx-s{display:block;}
.dup-keep td{background:#f3f8f4;}
.dup-drop td{background:#fdf3f6;}
.dup-drop.is-off td{background:#fff;color:var(--text-faint);}
.dup-tag{display:inline-block;padding:1px 8px;border-radius:20px;background:#e2f3e8;color:#1e7a4c;font-size:11px;font-weight:700;}
.dup-chk{display:inline-flex;align-items:center;gap:5px;font-weight:600;color:#b03a63;white-space:nowrap;cursor:pointer;}
.dup-top label{display:inline-flex;align-items:center;gap:6px;margin:0;font-weight:600;cursor:pointer;}
.dup-top input[type=checkbox],.dup-chk input[type=checkbox]{width:auto;margin:0;}
.dup-t th{position:static;top:auto;}

/* ---------- Ronde 143: Superadmin > Sinkron & Data ---------- */
.dh-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin:0 0 14px;}
.dh-card{background:#fff;border:1px solid var(--line-soft,#eee);border-radius:12px;padding:14px 16px;min-width:0;}
.dh-card h3{font-size:13.5px;margin:0 0 6px;color:var(--text);}
.dh-card .dh-h3b{margin-top:14px;}
.dh-wide{margin:0 0 14px;}
.dh-row{display:flex;align-items:center;gap:12px;padding:10px 0;border-top:1px solid var(--line-soft,#f0f0f0);}
.dh-card h3 + .dh-row{border-top:0;}
.dh-row-main{flex:1 1 auto;min-width:0;}
.dh-row-t{font-weight:700;font-size:13px;}
.dh-row-d{font-size:12px;color:var(--text-dim);margin-top:1px;}
.dh-row .legacy-sync-note{margin:4px 0 0;}
.dh-row-a{flex:0 0 auto;}
.dh-row-a .btn{white-space:nowrap;}
.dh-warn{color:#b03a63;font-weight:700;}
.arx-j-kabar{--gc:#d9822b;}
@media (max-width:900px){.dh-grid{grid-template-columns:1fr;}}
/* Ronde 144: Rekap per Campaign -- angka besar tidak dipotong */
.pcc-table{font-size:12.5px;}
.pcc-table td.num,.pcc-table td:nth-child(8){overflow:visible;text-overflow:clip;white-space:nowrap;}
.pcc-table th{white-space:nowrap;}
/* Ronde 144b: kotak centang per jenis di Rekap per Campaign */
.pcc-tk{white-space:nowrap;}
.pcc-tk .tick{display:inline-flex;}
.pcc-tk-a{display:block;font-size:10.5px;color:var(--text-faint);margin-top:2px;font-variant-numeric:tabular-nums;}
/* Ronde 145: pilihan tampilan Per pencairan / Per campaign */
.pcl-mode{display:flex;align-items:center;gap:10px;margin:2px 0 12px;}
.pcl-mode-l{font-size:12.5px;font-weight:700;color:var(--text);}
.pcl-mode .seg-btn{padding:6px 14px;font-size:13px;}

/* ---------- Ronde 148: popup Kerjakan Consent Letter (penanda tahap + 3 langkah) ---------- */
.clw-steps{display:flex;align-items:center;flex-wrap:wrap;gap:4px;padding:8px 10px;margin:0 0 6px;background:#f7f6f8;border-radius:12px;}
.clw-st{border:1px solid transparent;background:none;font-family:inherit;font-size:12.5px;font-weight:600;color:var(--text-faint);padding:5px 10px;border-radius:20px;cursor:pointer;}
.clw-st:hover{background:#fff;color:var(--text);}
.clw-st.is-done{color:#1e7a4c;}
.clw-st.is-done::before{content:'✓ ';}
.clw-st.is-on{background:#fff;color:var(--accent-2,#113BAD);border-color:color-mix(in srgb,var(--accent-2,#113BAD) 35%,#fff);box-shadow:0 1px 2px rgba(0,0,0,.06);}
.clw-sep{color:var(--text-faint);font-size:13px;}
.clw-side{margin-left:auto;display:inline-flex;gap:4px;}
.clw-st-alt{font-weight:500;font-size:12px;}
.clw-st-alt.is-on{color:#b03a63;border-color:#f0c9d6;}
.clw-cancel-note{font-size:12px;color:#b03a63;margin:0 0 8px;}
.clw-layout{display:grid;grid-template-columns:minmax(0,300px) minmax(0,1fr);gap:16px;margin-top:10px;}
.clw-ctx .konten-context-block{margin:0;}
.clw-main{display:flex;flex-direction:column;gap:10px;min-width:0;}
.clw-step{border:1px solid var(--line-soft,#eee);border-radius:12px;padding:12px 14px;background:#fff;}
.clw-step.is-active{border-color:color-mix(in srgb,var(--accent-2,#113BAD) 40%,#fff);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent-2,#113BAD) 8%,transparent);}
.clw-step.is-done{background:#fafcfb;}
.clw-step-h{display:flex;align-items:center;gap:8px;font-weight:700;font-size:13.5px;margin:0 0 6px;}
.clw-num{width:22px;height:22px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:12px;background:#eef1f8;color:var(--accent-2,#113BAD);}
.clw-step.is-done .clw-num{background:#e2f3e8;color:#1e7a4c;font-size:0;}
.clw-step.is-done .clw-num::after{content:'✓';font-size:12px;}
.clw-help{font-size:12px;color:var(--text-dim);margin:0 0 8px;line-height:1.45;}
.clw-done-line{font-size:12.5px;display:flex;flex-wrap:wrap;align-items:center;gap:8px;}
.clw-regen{margin-top:6px;}
.clw-more{margin-top:8px;font-size:12px;}
.clw-more summary{cursor:pointer;color:var(--text-dim);}
.clw-more .field-item{margin-top:6px;}
.clw-grid2{display:grid;grid-template-columns:minmax(0,1fr) 170px;gap:10px;}
.clw-step .field-item{margin:0;}
.clw-act{display:flex;align-items:center;flex-wrap:wrap;gap:10px;margin-top:10px;}
.clw-ts{font-size:11.5px;color:var(--text-faint);}
@media (max-width:820px){.clw-layout{grid-template-columns:1fr;}.clw-grid2{grid-template-columns:1fr;}.clw-side{margin-left:0;}}
/* tombol Simpan di popup CL dibuat sekunder supaya aksi utama langkah aktif (Buat Draft / CL Selesai) yang menonjol */
.modal-clw .modal-actions .btn-primary{background:#fff;color:var(--text);border:1px solid var(--line,#e3e0e6);box-shadow:none;}
.modal-clw .modal-actions .btn-primary:hover{background:#f7f6f8;}
@media (max-width:820px){.clw-ctx{order:2;}}
.yl-zero{color:#b03a63 !important;}

/* ---------- Ronde 150: link yayasan -- Pencairan & LPJ ---------- */
.yl-badge{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:#d9577f;color:#fff;font-size:11px;font-weight:700;margin-left:4px;}
.ylp-sum{font-size:13px;margin:14px 0 10px;}
.ylp-warn{color:#b03a63;font-weight:700;}
.ylp-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(420px,1fr));gap:12px;}
.ylp-card{background:#fff;border:1px solid var(--line-soft,#eee);border-radius:12px;padding:12px 14px;min-width:0;}
.ylp-head{font-weight:700;font-size:13.5px;margin:0 0 8px;}
.ylp-t{width:100%;border-collapse:collapse;font-size:12.5px;}
.ylp-t th{font-size:10.5px;text-align:left;color:var(--text-faint);font-weight:600;padding:3px 6px;background:transparent;position:static;}
.ylp-t td{padding:5px 6px;border-top:1px solid var(--line-soft,#f0f0f0);}
.ylp-t .num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap;}
.ylp-lpj{margin-top:10px;padding-top:10px;border-top:1px dashed var(--line,#e3e0e6);}
.ylp-lpj-h{display:flex;align-items:center;flex-wrap:wrap;gap:6px;font-size:12.5px;}
.ylp-note{font-size:12px;color:#b03a63;margin-top:4px;}
.ylp-note-soft{color:var(--text-dim);}
.ylp-form{display:flex;gap:8px;margin-top:8px;}
.ylp-form .dash-search{flex:1 1 auto;margin:0;min-width:0;}
.ylp-tamb{margin-top:10px;font-size:12px;}
@media (max-width:640px){.ylp-list{grid-template-columns:1fr;}.ylp-form{flex-direction:column;}}
/* Ronde 151: link yayasan -- pencairan di daftar campaign + popup per campaign, LPJ per pencairan */
.yl-row{cursor:pointer;}
.yl-row:hover td{background:#fafbfd;}
.yl-table .num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap;}
.btn.yl-locked{background:#f1f0f3;color:var(--text-faint);border:1px dashed #d8d4dc;box-shadow:none;cursor:not-allowed;}
.btn.yl-locked:hover{background:#ecebef;}
.ylp-items{list-style:none;margin:0;padding:0;border:1px solid var(--line-soft,#eee);border-radius:12px;overflow:hidden;}
.ylp-item{padding:10px 14px;border-top:1px solid var(--line-soft,#f0f0f0);background:#fff;}
.ylp-item:first-child{border-top:0;}
.ylp-item-main{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:13px;}
.ylp-date{min-width:92px;color:var(--text-dim);}
.ylp-nom{margin-left:auto;font-weight:700;font-variant-numeric:tabular-nums;}
.ylp-lpj-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:8px;font-size:12px;}
.ylp-lpj-l{font-weight:700;color:var(--text-dim);}
.ylp-tamb-box{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:12px;padding:10px 14px;background:#f7f6f8;border-radius:12px;font-size:12.5px;}
.modal-ylp .ylp-form{margin-top:6px;}
.modal-box > .ylp-items{margin-left:var(--mpad);margin-right:var(--mpad);}
.yl-table td{vertical-align:middle;}
.yl-table th:last-child,.yl-table td:last-child{white-space:nowrap;}

/* ---------- Ronde 152: link yayasan -- header kartu + tabel campaign baru ---------- */
.ylh{position:relative;padding:18px 22px;margin:0 0 16px;border-radius:16px;background:linear-gradient(120deg,color-mix(in srgb,#EB2677 8%,#fff),color-mix(in srgb,#113BAD 8%,#fff));border:1px solid var(--line-soft,#eee);overflow:hidden;}
.ylh::before{content:'';position:absolute;left:0;top:0;bottom:0;width:4px;background:linear-gradient(#EB2677,#113BAD);}
.ylh-name{font-family:var(--font-display);font-size:22px;font-weight:700;margin:6px 0 2px;color:var(--text);}
.ylh-sub{font-size:13px;color:var(--text-dim);}
.ylh-kpi{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin-top:14px;}
.ylh-k{background:rgba(255,255,255,.75);border:1px solid rgba(17,59,173,.08);border-radius:12px;padding:9px 12px;min-width:0;}
.ylh-k span{display:block;font-size:11.5px;color:var(--text-faint);}
.ylh-k strong{display:block;font-size:17px;color:#113BAD;font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.ylh-k.is-warn strong{color:#b03a63;}
.yl-tools{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:4px 0 6px;}
.yl-tools .dash-search{flex:0 1 280px;margin:0;}
.yl-hint{font-size:12px;color:var(--text-faint);margin:0 0 8px;}
.yl-camp{font-weight:700;}
.yl-links{font-size:11.5px;margin-top:3px;color:var(--text-faint);}
.yl-links a{color:var(--accent-2,#113BAD);text-decoration:none;}
.yl-bar{height:4px;border-radius:3px;background:#eef1f8;margin:5px 0 2px auto;width:90px;overflow:hidden;}
.yl-bar span{display:block;height:100%;background:linear-gradient(90deg,#7b95e3,#113BAD);border-radius:3px;}
.yl-table td{padding-top:11px;padding-bottom:11px;}
@media (max-width:760px){.ylh-kpi{grid-template-columns:repeat(2,minmax(0,1fr));}.yl-tools .dash-search{flex:1 1 100%;}}
@media (max-width:640px){
  .yl-table thead{display:none;}
  .yl-table,.yl-table tbody,.yl-table tr,.yl-table td{display:block;width:100%;}
  .yl-table tr{border:1px solid var(--line-soft,#eee);border-radius:12px;margin:0 0 10px;padding:6px 12px;background:#fff;}
  .yl-table td{border:0 !important;padding:5px 0 !important;text-align:left !important;display:flex;justify-content:space-between;align-items:center;gap:10px;}
  .yl-table td:first-child{display:block;padding-bottom:8px !important;border-bottom:1px dashed var(--line,#e3e0e6) !important;}
  .yl-table td[data-label]::before{content:attr(data-label);font-size:11.5px;color:var(--text-faint);flex:0 0 auto;}
  .yl-table td.num{flex-wrap:wrap;}
  .yl-table td.num .pcx-s,.yl-table td.num .yl-bar{display:none;}
  .table-wrap:has(.yl-table){border:0;background:transparent;box-shadow:none;}
}
/* Ronde 153: link yayasan -- rekap per bulan + Consent Letter di popup */
.ylr-cell{display:flex;flex-direction:column;align-items:flex-end;gap:4px;}
.ylr-bar{width:110px;height:5px;border-radius:3px;background:#f1eff3;overflow:hidden;}
.ylr-bar span{display:block;height:100%;border-radius:3px;}
.ylr-bar-c span{background:linear-gradient(90deg,#f3a3c4,#EB2677);}
.ylr-bar-p span{background:linear-gradient(90deg,#7b95e3,#113BAD);}
.ylr-total td{background:#faf9fb;border-top:2px solid var(--line,#e3e0e6);}
.ylp-sec-h{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.03em;color:var(--text-dim);margin-top:12px;margin-bottom:6px;}
.ylp-cl{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;padding:10px 14px;border:1px solid var(--line-soft,#eee);border-radius:12px;background:#fff;font-size:12.5px;}
.ylp-cl-btns{display:flex;gap:8px;flex-wrap:wrap;}
@media (max-width:640px){.ylr-table td.num .ylr-bar{display:none;}}
.ylp-cl-btns a.btn{text-decoration:none;}

/* ---------- Ronde 154: Link Yayasan otomatis per partner + halaman partner selebar layar ---------- */
body.yayasan-mode main{max-width:none;padding:26px 36px;}
body.yayasan-mode .ylh,body.yayasan-mode .table-wrap{width:100%;}
.yld-acts{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end;}
.yld-acts a.btn{text-decoration:none;}
.yld-table .num{text-align:right;}
@media (max-width:760px){body.yayasan-mode main{padding:16px 14px;}}

/* ---------- Ronde 159: panel Database (persiapan pindah ke MySQL) ---------- */
.db-status{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:10px;font-size:12.5px;}
.db-tabs{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px;font-size:11.5px;color:var(--text-dim);}
.db-tabs span{background:#f5f4f7;border-radius:8px;padding:2px 8px;}
.db-log{max-height:40vh;overflow:auto;font-size:12px;margin-top:8px;line-height:1.7;}
.db-backup{margin-top:10px;font-size:12.5px;}
