/* ============================================================================
   THEME — Sistem Manajemen Perumahan (PT Cantika Maharani)
   ============================================================================
   SUMBER NILAI: designsystemperumahanbaruv2.html, bagian :root.
   Angka di bawah disalin PERSIS dari berkas itu, bukan diketik ulang dari
   ingatan. Kalau suatu saat berkas desain diperbarui, yang diubah HANYA blok
   :root di sini — tidak ada satu pun hex yang boleh ditulis di file PHP.

   CATATAN JUJUR SOAL SELISIH KECIL
   Sebelumnya biru di sini #2173A5 dan krem #E6D6C6, hasil ukur piksel logo.
   Berkas desain memakai #1E71A3 dan #E6CFB4. Selisihnya di bawah ambang yang
   bisa dibedakan mata (deltaE < 2), tapi yang dipakai sekarang angka BERKAS
   DESAIN — supaya cuma ada satu sumber kebenaran. Kalau dua sumber dibiarkan
   hidup berdampingan, enam bulan lagi tidak ada yang tahu mana yang benar.

   CARA PASANG: dimuat di includes/layout.php SEBELUM assets/style.css.
   Urutan ini DISENGAJA. File ini DASAR, bukan penimpa — gaya halaman lama
   tetap menang sehingga tidak ada tata letak yang bergeser, sementara token
   warna langsung tersedia di semua halaman.

   ATURAN: dilarang menulis hex langsung di file PHP. Selalu var(--...).
   Penjaga:  php tests/step_css_brand.php
   ============================================================================ */

/* Blok :root sudah PINDAH ke assets/tokens.css.
   Alasannya ada di kepala berkas itu: theme.css cuma dimuat oleh layout.php,
   sementara token warna dibutuhkan juga oleh 54 halaman yang berdiri sendiri.
   Jangan menaruh :root di sini lagi — dua tempat berarti dua nilai berbeda
   yang cepat atau lambat berselisih. */

/* ===== DASAR (sengaja minimal — tidak memakai selector elemen agar tidak
   menimpa gaya halaman yang sudah ada) ===== */
.app-body{
  font-family:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  -webkit-font-smoothing:antialiased;
}

/* ===== ANGKA UANG — wajib untuk kolom rupiah.
   Bukan estetika: rata kanan + digit sejajar mengurangi salah baca angka. ===== */
.num{text-align:right;font-variant-numeric:tabular-nums;font-weight:600;color:var(--ink-900);}
.num--pos{color:var(--success);} .num--neg{color:var(--danger);}

/* ===== TOMBOL (self-contained, aman dipakai sendiri atau bersama .btn lama) ===== */
.btn--primary,.btn--accent,.btn--secondary,.btn--danger,.btn--ghost{
  display:inline-flex;align-items:center;justify-content:center;gap:6px;
  font-family:inherit;font-size:14px;font-weight:600;line-height:1;
  padding:9px 16px;border-radius:var(--r-sm);border:1px solid transparent;
  cursor:pointer;text-decoration:none;transition:.15s;
}
.btn--primary{background:var(--blue-600);color:#fff;}
.btn--primary:hover{background:var(--blue-700);}
.btn--accent{background:var(--orange);color:#fff;}
.btn--accent:hover{background:var(--orange-700);}
.btn--secondary{background:#fff;color:var(--ink-700);border-color:var(--line);}
.btn--secondary:hover{background:var(--bg);}
.btn--danger{background:var(--danger);color:#fff;}
.btn--ghost{background:transparent;color:var(--blue-600);}
.btn--ghost:hover{background:var(--blue-050);}
.btn--primary:disabled,.btn--accent:disabled,.btn--secondary:disabled{opacity:.5;cursor:not-allowed;}

/* ===== BADGE STATUS — satu warna satu makna ===== */
.badge--lunas,.badge--belum,.badge--menunggu,.badge--sebagian,.badge--darurat,.badge--ditolak{
  display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:600;
  padding:3px 10px;border-radius:999px;line-height:1.4;
}
.badge--lunas::before,.badge--belum::before,.badge--menunggu::before,
.badge--sebagian::before,.badge--darurat::before,.badge--ditolak::before{
  content:'';width:6px;height:6px;border-radius:50%;background:currentColor;
}
.badge--lunas{background:var(--success-bg);color:#15803D;}
.badge--belum{background:var(--danger-bg);color:var(--danger);}
.badge--menunggu{background:var(--warning-bg);color:var(--warning);}
.badge--sebagian{background:var(--indigo-bg);color:var(--indigo);}
.badge--darurat{background:var(--orange-050);color:var(--orange-700);}
.badge--ditolak{background:#F1F1EF;color:var(--ink-500);}

/* ===== FORM (hanya modifier baru; .field bawaan aplikasi tidak disentuh) ===== */
.field--err input,.field--err select,.field--err textarea{border-color:var(--danger) !important;}
.field--err input:focus{box-shadow:0 0 0 3px rgba(220,38,38,.15);}
.field__msg{font-size:12px;color:var(--danger);margin-top:5px;}
.field__hint{font-size:12px;color:var(--ink-500);margin-top:5px;}

/* ===== KARTU KPI & PANEL (nama baru, tidak bertabrakan) ===== */
.kpi-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:var(--s-4);}
.kpi{position:relative;overflow:hidden;background:#fff;border:1px solid var(--line);
  border-radius:var(--r-md);padding:var(--s-4);}
.kpi::before{content:'';position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--blue-600);}
.kpi--accent::before{background:var(--orange);}
.kpi__lbl{font-size:13px;color:var(--ink-500);font-weight:500;}
.kpi__val{font-size:26px;font-weight:700;color:var(--ink-900);margin-top:6px;
  font-variant-numeric:tabular-nums;letter-spacing:-.01em;}
.kpi__val--pos{color:var(--success);} .kpi__val--neg{color:var(--danger);}
.kpi__foot{font-size:12px;color:var(--ink-500);margin-top:4px;}

.panel--ds{background:#fff;border:1px solid var(--line);border-radius:var(--r-lg);
  padding:var(--s-6);box-shadow:var(--shadow-sm);}
.panel__ttl{font-size:15px;font-weight:600;color:var(--ink-900);margin:0 0 2px;}
.panel__cap{font-size:12px;color:var(--ink-500);margin:0 0 var(--s-3);}

/* ===== ALERT (modifier baru) ===== */
.alert--info,.alert--warn,.alert--danger,.alert--success{
  display:flex;gap:10px;padding:12px 14px;border-radius:var(--r-md);font-size:14px;border:1px solid;
}
.alert--info{background:var(--blue-050);border-color:var(--blue-100);color:#0F4C74;}
.alert--warn{background:var(--warning-bg);border-color:#FBD88F;color:#92400E;}
.alert--danger{background:var(--danger-bg);border-color:#FECACA;color:#991B1B;}
.alert--success{background:var(--success-bg);border-color:#BDE8CD;color:#15803D;}

/* ===== PROGRESS & BAR ===== */
.progress{height:10px;background:var(--beige);border-radius:99px;overflow:hidden;}
.progress__fill{height:100%;background:var(--blue-600);border-radius:99px;}
.progress__fill--done{background:var(--success);}
.hbar__track{height:9px;background:var(--beige-050);border-radius:99px;overflow:hidden;}
.hbar__fill{height:100%;border-radius:99px;background:var(--orange);}

/* ============================================================================
   LAPISAN GLASS — hanya aksen: login, topbar, sidebar, kartu KPI, panel chart.
   JANGAN dipakai pada tabel data padat, form entri panjang, dan halaman cetak.
   Maksimal ±8 elemen glass per layar; jangan menumpuk glass di atas glass.
   ============================================================================ */
.stage{position:relative;overflow:hidden;
  background:linear-gradient(150deg,#E8F0F5 0%,#F3ECE1 60%,#F6EFE6 100%);}
.stage > *{position:relative;z-index:2;}
.blob{position:absolute;border-radius:50%;filter:blur(64px);pointer-events:none;z-index:0;}
.blob--1{width:300px;height:300px;background:var(--blue-600);opacity:.45;top:-80px;left:-60px;}
.blob--2{width:260px;height:260px;background:var(--orange);opacity:.36;bottom:-90px;right:-40px;}
.blob--3{width:240px;height:240px;background:var(--beige);opacity:.55;top:38%;left:46%;}

.glass{background:rgba(255,255,255,.42);
  backdrop-filter:blur(20px) saturate(165%);-webkit-backdrop-filter:blur(20px) saturate(165%);
  border:1px solid rgba(255,255,255,.55);border-radius:var(--r-lg);
  box-shadow:0 8px 30px rgba(24,50,74,.10), inset 0 1px 0 rgba(255,255,255,.6);}
.glass--solid{background:rgba(255,255,255,.78);
  backdrop-filter:blur(14px) saturate(150%);-webkit-backdrop-filter:blur(14px) saturate(150%);
  border:1px solid rgba(255,255,255,.6);border-radius:var(--r-lg);
  box-shadow:0 6px 22px rgba(24,50,74,.08);}
.glass--dark{background:rgba(19,45,68,.55);
  backdrop-filter:blur(24px) saturate(150%);-webkit-backdrop-filter:blur(24px) saturate(150%);
  border:1px solid rgba(255,255,255,.14);box-shadow:inset 0 1px 0 rgba(255,255,255,.14);
  color:var(--navy-text);}

/* Hemat GPU di layar kecil */
@media (max-width:820px){ .blob{filter:blur(45px);opacity:.3;} }

/* Hormati preferensi aksesibilitas — fallback solid, bukan rusak */
@media (prefers-reduced-transparency:reduce){
  .glass,.glass--solid{background:var(--white);backdrop-filter:none;-webkit-backdrop-filter:none;}
  .glass--dark{background:var(--navy);backdrop-filter:none;-webkit-backdrop-filter:none;}
}
@media (prefers-reduced-motion:reduce){
  .btn--primary,.btn--accent,.btn--secondary,.btn--danger,.btn--ghost{transition:none;}
}

/* Sidebar off-canvas di HP — supervisor lapangan memakai HP */
@media (max-width:860px){
  .sidebar{position:fixed;inset:0 auto 0 0;transform:translateX(-100%);transition:.2s;z-index:50;}
  .sidebar.is-open{transform:none;}
}

/* ============================================================================
   CETAK — JANGAN DIHAPUS. Aplikasi mencetak berkas KPR ke 10 format bank;
   tema gelap/glass merusak hasil cetak.
   ============================================================================ */
@media print{
  .sidebar,.topbar,.top-navbar-lux,.no-print,.blob,
  .btn--primary,.btn--accent,.btn--secondary,.btn--danger,.btn--ghost{display:none !important;}
  .stage{background:#fff !important;}
  .glass,.glass--solid,.glass--dark{
    background:#fff !important;color:#000 !important;
    backdrop-filter:none !important;-webkit-backdrop-filter:none !important;
    box-shadow:none !important;border:1px solid #ccc !important;}
  .panel--ds,.kpi{border:1px solid #ccc !important;box-shadow:none !important;}
  body{background:#fff !important;}
}
