/* ==========================================================================
   Pondok Permai — sistem desain
   Satu berkas, tanpa framework. Token dulu, komponen menyusul.
   ========================================================================== */

:root{
  /* ------------------------------------------------------------------
     Brand diturunkan dari logo PT Sumber Baru Land (#E62129 merah,
     hitam, putih). Pondok Permai tidak punya logo sendiri, sehingga
     identitas visual situs mengikuti induknya.
     ------------------------------------------------------------------ */
  --brand:#C41722;        /* merah logo digelapkan -> teks putih lolos AA 6.01:1 */
  --brand-pure:#E62129;   /* merah logo persis - untuk bidang & aksen, bukan alas teks kecil */
  --brand-d:#8E101A;      /* hover / bidang gelap */
  --brand-tint:#FDF2F2;   /* latar lembut bernuansa brand */

  /* Netral bertumpu pada hitam logo, bukan abu kehijauan */
  --ink:#141414;
  --body:#4A4A4A;
  --mute:#6E6E6E;         /* digelapkan dari #77817C: 4.03:1 -> 5.10:1 */
  --line:#E5E2E1;
  --surface:#FFFFFF;
  --sand:#F7F4F2;
  --mint:#FAF7F6;         /* nama dipertahankan demi kompatibilitas kelas .sec-mint */

  /* Aksen hangat, hanya untuk bintang rating - bukan teks kecil */
  --accent:#C08A2E;

  /* Status unit - teks warna solid ini juga dipakai di atas latar pastel
     badge, bukan cuma latar putih/solid. Merah TIDAK dipakai untuk status
     agar tidak bentrok dengan warna brand. */
  --ok:#1B7A4B;           /* 5.34:1 di atas putih, 4.71:1 di atas pastelnya sendiri */
  --warn:#8A5F00;         /* diperbaiki dari #B37A00: 3.68:1 -> 5.65:1; 5.05:1 di atas pastelnya sendiri */

  /* Skala tipografi - tujuh tingkat, aturan tetap:
     - Deskripsi/paragraf inti (hero lead, prose, jawaban FAQ, kutipan
       testimoni) SELALU --fs-body (16px), tanpa kecuali.
     - Teks sekunder di dalam kartu/footer/nav/tombol/input SELALU --fs-sm.
     - Keterangan/disclosure/disclaimer SELALU --fs-xs - lebih kecil dari
       deskripsi (13px < 16px).
     - Label mikro (eyebrow, badge, unit spesifikasi, label statistik)
       SELALU --fs-2xs, angka terkecil di skala ini.
     - Judul kartu/subseksi (h3) SATU ukuran di semua tempat - sebelumnya
       terpecah jadi 1.16rem/1rem/.95rem tergantung komponen. */
  --fs-hero:clamp(2rem,4.4vw,3.15rem);
  --fs-h2:clamp(1.55rem,2.9vw,2.2rem);
  --fs-h3:1.125rem;
  --fs-body:1rem;
  --fs-sm:.875rem;
  --fs-xs:.8125rem;
  --fs-2xs:.75rem;
  --fs-stat:1.4rem;      /* angka statistik besar (trust bar & blok verifikasi) */
  /* Subheading DI DALAM artikel prosa (mis. "Tahap 1: Pilih Unit") berbeda
     peran dari h2 tingkat section halaman (mis. "Pilihan Unit") walau
     sama-sama tag <h2> - clamp responsif tidak perlu karena .prose sudah
     dibatasi 70ch, jadi ukuran tetap saja. */
  --fs-prose-h2:1.5rem;
  --fs-prose-h3:1.25rem;

  /* Spasi kelipatan 4 */
  --sp-1:.25rem; --sp-2:.5rem;  --sp-3:.75rem; --sp-4:1rem;
  --sp-5:1.25rem; --sp-6:1.5rem; --sp-8:2rem;   --sp-12:3rem;  --sp-16:4rem; --sp-20:5rem;

  --r:14px;
  --r-sm:10px;
  --r-pill:999px;
  --shadow:0 1px 2px rgba(20,20,20,.04),0 8px 24px rgba(20,20,20,.06);
  --wrap:1180px;

  --font:"Inter",system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  /* Serif miring meniru tagline logo "Solusi Properti Berkualitas" */
  --font-tagline:Georgia,"Times New Roman",serif;
}

*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body{
  margin:0;background:var(--surface);color:var(--body);
  font-family:var(--font);font-size:var(--fs-body);line-height:1.65;
  -webkit-font-smoothing:antialiased;
}
img{max-width:100%;height:auto;display:block}
a{color:inherit;text-decoration:none}
button{font:inherit;cursor:pointer}
h1,h2,h3,h4{color:var(--ink);margin:0;line-height:1.18;letter-spacing:-.018em;font-weight:700}
h1{font-size:var(--fs-hero)}
h2{font-size:var(--fs-h2)}
h3{font-size:var(--fs-h3)}
p{margin:0}

/* Fokus terlihat — syarat aksesibilitas */
:focus-visible{outline:3px solid var(--brand-l);outline-offset:2px;border-radius:4px}

.skip-link{position:absolute;left:-9999px}
.skip-link:focus{left:var(--sp-4);top:var(--sp-4);z-index:999;background:var(--brand);
  color:#fff;padding:var(--sp-3) var(--sp-4);border-radius:var(--r-sm)}

.wrap{max-width:var(--wrap);margin:0 auto;padding:0 var(--sp-6)}
.sec{padding:var(--sp-20) 0}
.sec-sand{background:var(--sand)}
.sec-mint{background:var(--mint)}
.sec-dark{background:var(--ink);color:rgba(255,255,255,.82)}
.sec-dark h2,.sec-dark h3,.sec-dark h4{color:#fff}

/* Pola eyebrow + heading dari referensi */
.eyebrow{
  font-size:var(--fs-2xs);font-weight:800;letter-spacing:.13em;text-transform:uppercase;
  color:var(--brand);margin:0 0 var(--sp-2);
}
.shead{max-width:680px;margin-bottom:var(--sp-12)}
.shead p{color:var(--mute);margin-top:var(--sp-3)}
.shead-split{display:grid;grid-template-columns:1fr 1.4fr;gap:var(--sp-8);align-items:end;margin-bottom:var(--sp-12)}
.shead-split p{color:var(--mute)}

.ic{flex:none;vertical-align:middle}

/* ---------- Tombol ---------- */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:var(--sp-2);
  padding:.78rem 1.3rem;border-radius:var(--r-sm);font-size:var(--fs-sm);font-weight:700;
  border:1.5px solid transparent;line-height:1.2;transition:background .16s,border-color .16s,color .16s;
}
.btn-wa{background:var(--brand);color:#fff}
.btn-wa:hover{background:var(--brand-d)}
.btn-ghost{border-color:var(--line);color:var(--ink);background:var(--surface)}
.btn-ghost:hover{border-color:var(--brand);color:var(--brand)}
.btn-light{background:#fff;color:var(--brand)}
.btn-light:hover{background:var(--sand)}
.btn-outline{border-color:rgba(255,255,255,.5);color:#fff}
.btn-outline:hover{background:rgba(255,255,255,.12)}
.btn-block{width:100%}
.btn[aria-disabled="true"]{opacity:.45;pointer-events:none}
.btn-sm{padding:.55rem .9rem;font-size:var(--fs-xs)}

.link-arrow{display:inline-flex;align-items:center;gap:var(--sp-2);color:var(--brand);font-weight:700;font-size:var(--fs-sm)}
.link-arrow:hover{gap:var(--sp-3)}

/* ---------- Header ---------- */
.hdr{position:sticky;top:0;z-index:50;background:rgba(255,255,255,.97);
  backdrop-filter:blur(10px);border-bottom:1px solid var(--line)}
.hdr-in{display:flex;align-items:center;gap:var(--sp-6);padding:var(--sp-3) var(--sp-6);
  max-width:var(--wrap);margin:0 auto}
.brand{display:flex;align-items:center;gap:var(--sp-3);flex:none}
.brand-mk{width:40px;height:40px;border-radius:var(--r-sm);background:var(--brand-pure);color:#fff;
  display:grid;place-items:center;flex:none}
.brand-mk svg{width:22px;height:22px}

/* Lockup co-brand: logo induk + pembatas + nama Pondok Permai.
   Pembatas inilah yang menandakan DUA entitas dalam hubungan, bukan satu
   entitas - sehingga logo induk terbaca sebagai kredensial, bukan identitas situs. */
.brand.has-cobrand{gap:var(--sp-4)}
/* Tinggi dikunci, lebar mengikuti rasio asli - aman untuk logo persegi
   maupun lockup horizontal. max-width menjaga logo lebar tidak mendorong nav. */
.cobrand-logo{height:40px;width:auto;max-width:170px;object-fit:contain;flex:none;display:block}
.brand.has-cobrand .brand-tx{padding-left:var(--sp-4);border-left:1px solid var(--line)}
/* Tagline serif miring, meniru "Solusi Properti Berkualitas" pada logo induk */
.tagline{font-family:var(--font-tagline);font-style:italic;color:var(--mute)}
/* Eyebrow di atas bidang gelap: merah brand terlalu redup, pakai putih redup */
.eyebrow-on-dark{color:rgba(255,255,255,.72)}
.ftr-name{color:#fff}
.brand-tx b{display:block;font-size:var(--fs-body);color:var(--ink);font-weight:800;letter-spacing:-.02em;line-height:1.2}
.brand-tx span{display:block;font-size:var(--fs-2xs);color:var(--mute);letter-spacing:.01em}
.nav{margin-left:auto}
.nav ul{display:flex;gap:var(--sp-6);list-style:none;margin:0;padding:0;font-size:var(--fs-sm);font-weight:600}
.nav a{color:var(--body)}
.nav a:hover,.nav .current-menu-item > a{color:var(--brand)}
.hdr .btn{flex:none}
.burger{display:none;margin-left:auto;border:1px solid var(--line);background:#fff;
  border-radius:var(--r-sm);padding:.5rem .6rem;color:var(--ink)}

/* ---------- Hero ---------- */
.hero{position:relative;color:#fff;background:var(--ink)}
.hero-bg{position:absolute;inset:0;overflow:hidden}
.hero-bg img{width:100%;height:100%;object-fit:cover}
.hero-bg::after{content:"";position:absolute;inset:0;
  background:linear-gradient(100deg,rgba(18,14,14,.94) 0%,rgba(18,14,14,.80) 48%,rgba(18,14,14,.45) 100%)}
.hero-in{position:relative;max-width:var(--wrap);margin:0 auto;padding:var(--sp-20) var(--sp-6) var(--sp-16)}
/* 22ch diverifikasi langsung di browser terhadap headline saat ini - pada
   18ch, kata "Investasi" terdampar sendirian di barisnya sendiri karena
   tidak muat digabung ke kiri maupun kanan. */
.hero h1{color:#fff;max-width:22ch}
.hero .lead{color:rgba(255,255,255,.9);font-size:var(--fs-body);margin-top:var(--sp-4);max-width:54ch}
.hero .cta{display:flex;gap:var(--sp-3);flex-wrap:wrap;margin-top:var(--sp-8)}
.hero .note{margin-top:var(--sp-4);font-size:var(--fs-xs);color:rgba(255,255,255,.68)}

/* Strip statistik — pola dari referensi. Angka besar (--fs-stat) dan label
   (--fs-2xs) dipakai sama persis di .vstat pada blok verifikasi - pola
   4-statistik yang sama muncul dua kali di homepage, sebelumnya beda ukuran
   (1.5rem vs 1.3rem) tanpa alasan. */
.trust{position:relative;border-top:1px solid rgba(255,255,255,.16);
  display:grid;grid-template-columns:repeat(4,1fr);max-width:var(--wrap);margin:0 auto}
.trust div{padding:var(--sp-6);border-right:1px solid rgba(255,255,255,.14)}
.trust div:last-child{border-right:0}
.trust b{display:block;font-size:var(--fs-stat);color:#fff;font-weight:800;letter-spacing:-.02em}
.trust span{font-size:var(--fs-2xs);color:rgba(255,255,255,.72)}

/* ---------- Kartu proyek ---------- */
.filters{display:flex;gap:var(--sp-2);flex-wrap:wrap;margin-bottom:var(--sp-8)}
/* Padding dinaikkan dari .45rem/.95rem (tinggi 38px) - diverifikasi
   langsung: .7rem/1rem menghasilkan 46px, dekat standar 44-48px, tanpa
   memicu overflow horizontal di 320px sekalipun. */
.chip{border:1.5px solid var(--line);background:var(--surface);color:var(--body);
  border-radius:var(--r-pill);padding:.7rem 1rem;font-size:var(--fs-xs);font-weight:600}
.chip:hover{border-color:var(--brand)}
.chip[aria-pressed="true"]{background:var(--brand);border-color:var(--brand);color:#fff}

.pgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-6)}
.pcard{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);
  overflow:hidden;display:flex;flex-direction:column;transition:box-shadow .18s,transform .18s}
.pcard:hover{box-shadow:var(--shadow);transform:translateY(-2px)}
.pcard[hidden]{display:none}
.pcard-media{position:relative;aspect-ratio:4/3;background:var(--mint)}
.pcard-media img{width:100%;height:100%;object-fit:cover}
/* Pill lembut: latar pastel + teks berwarna + titik kecil di depan, bukan
   bidang jenuh + teks putih. box-shadow tipis dipertahankan sebagai jangkar
   kontras karena badge duduk di atas foto sembarang warna, bukan latar putih
   polos seperti pada referensi aslinya. */
.badge{position:absolute;top:var(--sp-3);left:var(--sp-3);font-size:var(--fs-2xs);font-weight:700;
  padding:.3rem .7rem .3rem .55rem;border-radius:var(--r-pill);letter-spacing:.01em;
  display:inline-flex;align-items:center;gap:.4rem;box-shadow:0 1px 3px rgba(20,20,20,.14)}
.badge::before{content:"";width:6px;height:6px;border-radius:50%;flex:none}
/* Teks berwarna diverifikasi lolos AA (4.5:1+) di atas latar pastelnya masing-masing.
   Abu is-off dipakai lebih gelap (#6C6C6C, bukan --off) karena latar pastelnya jauh
   lebih terang dari putih penuh yang jadi acuan --off - --off sendiri (4.54:1 di atas
   putih) hanya mencapai 3.95:1 di sini, gagal AA. */
.badge.is-ok{background:#E3F5EC;color:var(--ok)}
.badge.is-ok::before{background:var(--ok)}
.badge.is-warn{background:#FDF1DC;color:var(--warn)}
.badge.is-warn::before{background:var(--warn)}
.badge.is-off{background:#EFEFEF;color:#6C6C6C}
.badge.is-off::before{background:#6C6C6C}
/* Pra-launching: biru netral, sengaja bukan merah brand (dikhususkan untuk CTA)
   maupun hijau/amber (dipakai status ketersediaan). 5.91:1 di atas pastelnya. */
.badge.is-soon{background:#E9EFF7;color:#2B5C96}
.badge.is-soon::before{background:#2B5C96}
.pcard-body{padding:var(--sp-6);display:flex;flex-direction:column;flex:1}
/* Abu lebih muda dari --mute (5.1:1) tapi masih lolos AA - #767676 adalah
   batas paling terang yang masih 4.5:1+ untuk label uppercase bold 12px ini. */
.pcard-body .eyebrow{color:#767676;margin-bottom:var(--sp-1)}
.pcard h3 a:hover{color:var(--brand)}
.price{margin-top:var(--sp-2);font-size:var(--fs-sm);color:var(--mute)}
/* Hitam pekat, bukan merah brand - merah dipakai eksklusif untuk tombol CTA
   di kartu yang sama supaya sinyal "klik ini" tidak encer, dan menghindari
   konotasi merah (rugi/turun) pada angka harga. */
.price b{font-size:1.18rem;color:var(--ink);font-weight:800;letter-spacing:-.02em}
.blurb{font-size:var(--fs-sm);color:var(--mute);margin-top:var(--sp-3);flex:1}

/* Baris spesifikasi — menjawab pertanyaan pembeli sejak di kartu */
.specs{display:grid;grid-template-columns:repeat(4,1fr);list-style:none;margin:var(--sp-4) 0;
  padding:var(--sp-3) 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.specs li{text-align:center;border-right:1px solid var(--line)}
.specs li:last-child{border-right:0}
.specs span{display:block;font-size:var(--fs-2xs);color:var(--mute);text-transform:uppercase;
  letter-spacing:.07em;font-weight:700}
.specs b{font-size:var(--fs-sm);color:var(--ink)}
.pcard-cta{display:grid;grid-template-columns:1fr auto;gap:var(--sp-2)}

/* ---------- Kartu fitur / USP ---------- */
.fgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--sp-6)}
.fcard{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:var(--sp-6)}
.fcard .fico{width:44px;height:44px;border-radius:var(--r-sm);background:var(--mint);color:var(--brand);
  display:grid;place-items:center;margin-bottom:var(--sp-4)}
.fcard h3{margin-bottom:var(--sp-2)}
.fcard p{font-size:var(--fs-sm);color:var(--mute)}

/* ---------- Blok verifikasi developer ---------- */
.verify{display:grid;grid-template-columns:1.1fr 1fr;gap:var(--sp-12);align-items:start}
.verify .lead{color:rgba(255,255,255,.84);margin-top:var(--sp-4);max-width:56ch}
.vstat{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-4);margin-top:var(--sp-8)}
.vstat div{background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.14);
  border-radius:var(--r-sm);padding:var(--sp-4)}
.vstat b{display:block;color:#fff;font-size:var(--fs-stat);font-weight:800;letter-spacing:-.02em}
.vstat span{font-size:var(--fs-2xs);color:rgba(255,255,255,.7)}
/* Logo induk di blok verifikasi: alas putih agar logo merah-hitam tetap
   terbaca di atas bidang gelap. Ukuran sengaja tidak dominan - ia kredensial,
   bukan judul. */
.dev-logo{display:inline-block;background:#fff;border-radius:var(--r-sm);
  padding:var(--sp-3) var(--sp-4);margin:0 0 var(--sp-4)}
.dev-logo img,.dev-logo-img{height:48px;width:auto;max-width:200px;object-fit:contain;display:block}

.vcard{background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.16);
  border-radius:var(--r);padding:var(--sp-6)}
.vcard h3{margin-bottom:var(--sp-4)}
.vrow{display:flex;gap:var(--sp-3);padding:var(--sp-3) 0;border-bottom:1px solid rgba(255,255,255,.12);
  font-size:var(--fs-sm)}
.vrow:last-of-type{border-bottom:0}
.vrow .k{color:rgba(255,255,255,.6);flex:none;width:92px}
.vrow .v{color:#fff}
.vlinks{display:flex;gap:var(--sp-2);flex-wrap:wrap;margin-top:var(--sp-4)}
.vlinks a{display:inline-flex;align-items:center;gap:var(--sp-2);background:rgba(255,255,255,.1);
  border:1px solid rgba(255,255,255,.2);border-radius:var(--r-pill);padding:.4rem .85rem;
  font-size:var(--fs-xs);font-weight:600;color:#fff}
.vlinks a:hover{background:rgba(255,255,255,.18)}
.vnote{margin-top:var(--sp-4);font-size:var(--fs-xs);color:rgba(255,255,255,.6);line-height:1.55}

/* ---------- Langkah pembelian ---------- */
.steps{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(5,1fr);gap:var(--sp-4)}
.step{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:var(--sp-6)}
.step-n{display:grid;place-items:center;width:32px;height:32px;border-radius:50%;
  background:var(--brand);color:#fff;font-weight:800;font-size:var(--fs-xs);margin-bottom:var(--sp-3)}
.step h3{margin-bottom:var(--sp-1)}
.step p{font-size:var(--fs-sm);color:var(--mute)}

/* ---------- Simulasi KPR ---------- */
.kpr{display:grid;grid-template-columns:1.1fr 1fr;gap:var(--sp-8);background:var(--surface);
  border:1px solid var(--line);border-radius:var(--r);padding:var(--sp-8)}
.field{margin-bottom:var(--sp-4)}
.field label{display:block;font-size:var(--fs-xs);font-weight:700;color:var(--ink);margin-bottom:var(--sp-2)}
.field input,.field select{width:100%;padding:.7rem .85rem;border:1.5px solid var(--line);
  border-radius:var(--r-sm);font:inherit;font-size:var(--fs-body);background:#fff;color:var(--ink)}
.field input:focus,.field select:focus{border-color:var(--brand);outline:none}
.kpr-out{background:var(--mint);border-radius:var(--r-sm);padding:var(--sp-6);
  display:flex;flex-direction:column;justify-content:center}
.kpr-out .lbl{font-size:var(--fs-xs);color:var(--mute);font-weight:600}
.kpr-out .big{font-size:2rem;font-weight:800;color:var(--brand);letter-spacing:-.03em;margin:var(--sp-1) 0}
.kpr-out .sub{font-size:var(--fs-xs);color:var(--mute)}
.kpr-out .btn{margin-top:var(--sp-4)}
.kpr-note{font-size:var(--fs-xs);color:var(--mute);margin-top:var(--sp-4)}

/* ---------- Testimoni ---------- */
.tgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-6)}
.tcard{margin:0;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:var(--sp-6)}
.stars{color:var(--accent);display:flex;gap:2px;margin-bottom:var(--sp-3)}
.tcard blockquote{margin:0 0 var(--sp-4);font-size:var(--fs-body);color:var(--body)}
.tcard figcaption{display:flex;align-items:center;gap:var(--sp-3);
  border-top:1px solid var(--line);padding-top:var(--sp-4)}
.tav{width:40px;height:40px;border-radius:50%;background:var(--brand);color:#fff;
  display:grid;place-items:center;font-size:var(--fs-sm);font-weight:800;flex:none;overflow:hidden}
.tav img{width:100%;height:100%;object-fit:cover}
.tcard figcaption b{display:block;font-size:var(--fs-sm);color:var(--ink)}
.tcard figcaption span{font-size:var(--fs-2xs);color:var(--mute)}
.tcard figcaption a{color:var(--brand);font-weight:700}

/* ---------- FAQ dua kolom (pola referensi) ---------- */
.faq-wrap{display:grid;grid-template-columns:.8fr 1.4fr;gap:var(--sp-12);align-items:start}
.faq{border:1px solid var(--line);border-radius:var(--r-sm);margin-bottom:var(--sp-2);background:var(--surface)}
.faq summary{padding:var(--sp-4) var(--sp-6);font-weight:700;font-size:var(--fs-body);color:var(--ink);
  list-style:none;display:flex;justify-content:space-between;gap:var(--sp-4);align-items:center}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"+";font-size:1.25rem;color:var(--brand);font-weight:700;flex:none}
.faq[open] summary::after{content:"\2212"}
.faq-a{padding:0 var(--sp-6) var(--sp-4);font-size:var(--fs-body);color:var(--mute)}

/* ---------- Breadcrumb ---------- */
.crumb{font-size:var(--fs-xs);color:var(--mute);padding:var(--sp-4) 0}
.crumb a:hover{color:var(--brand)}
.crumb span{margin:0 var(--sp-2)}

/* ---------- Halaman proyek ---------- */
.phero{position:relative;color:#fff;background:var(--ink)}
.phero .hero-bg::after{background:linear-gradient(180deg,rgba(18,14,14,.55) 0%,rgba(18,14,14,.93) 100%)}
.phero-in{position:relative;max-width:var(--wrap);margin:0 auto;padding:var(--sp-16) var(--sp-6) var(--sp-12)}
.phero h1{color:#fff;margin-top:var(--sp-2)}
.phero .meta{display:flex;gap:var(--sp-6);flex-wrap:wrap;margin-top:var(--sp-4);
  color:rgba(255,255,255,.85);font-size:var(--fs-sm)}
.phero .meta span{display:inline-flex;align-items:center;gap:var(--sp-2)}
.phero .price-lg{margin-top:var(--sp-6);font-size:1.9rem;font-weight:800;color:#fff;letter-spacing:-.03em}
/* Logo/simbol milik unit - identitas per proyek, bukan logo Pondok Permai
   (Pondok Permai tidak punya logo tersendiri). Latar putih agar logo
   berwarna apa pun tetap terbaca di atas foto. */
.unit-logo{display:inline-flex;align-items:center;justify-content:center;
  background:#fff;border-radius:var(--r-sm);padding:var(--sp-3) var(--sp-4);
  margin:var(--sp-4) 0 var(--sp-2);max-width:220px}
.unit-logo img{max-height:56px;width:auto;display:block}
.phero .price-lg small{display:block;font-size:var(--fs-xs);font-weight:600;color:rgba(255,255,255,.7);
  letter-spacing:0}

/* align-items:start membuat tiap grid item menyusut seukuran isinya. Akibatnya
   <aside> setinggi kartunya sendiri dan position:sticky di dalamnya TIDAK punya
   ruang gerak sama sekali - terukur 0 piksel, sementara kolom kiri 1396 piksel.
   Kolom kanan diregangkan agar sticky benar-benar bekerja. */
.player{display:grid;grid-template-columns:1.5fr 1fr;gap:var(--sp-12);align-items:start}
.player > aside{align-self:stretch}
.spec-table{width:100%;border-collapse:collapse;font-size:var(--fs-sm)}
.spec-table th,.spec-table td{text-align:left;padding:var(--sp-3) 0;border-bottom:1px solid var(--line)}
.spec-table th{color:var(--mute);font-weight:600;width:45%}
.spec-table td{color:var(--ink);font-weight:600}

.aside-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);
  position:sticky;top:88px;
  /* Bila kartu lebih tinggi dari layar, ia akan macet dan bagian bawahnya
     tak pernah terlihat. Batasi lalu izinkan bergulir di dalam kartu.
     overflow-x HARUS eksplisit hidden: dengan overflow-y:auto saja, browser
     otomatis mengonversi overflow-x visible menjadi auto (aturan CSS
     overflow), yang membuat foto tepi-ke-tepi terklip miring sebelah -
     nempel di kiri, ada celah di kanan. */
  max-height:calc(100vh - 108px);overflow-x:hidden;overflow-y:auto}
/* Foto berada langsung di dalam .aside-card TANPA padding, supaya rata
   tepi-ke-tepi secara alami memakai width:100% - bukan trik margin negatif
   yang rawan bentrok dengan overflow di atas. Konten lain (tombol, dst)
   dibungkus .aside-card-body yang punya padding sendiri. */
.aside-card-body{padding:var(--sp-6)}

.aside-card .btn{margin-bottom:var(--sp-2)}

.flist{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-3)}
.flist li{display:flex;gap:var(--sp-3);font-size:var(--fs-sm);align-items:flex-start}
.flist .ic{color:var(--ok);margin-top:3px}

.nearby{list-style:none;margin:0;padding:0}
.nearby li{display:flex;justify-content:space-between;gap:var(--sp-4);padding:var(--sp-3) 0;
  border-bottom:1px solid var(--line);font-size:var(--fs-sm)}
.nearby li:last-child{border-bottom:0}
.nearby b{color:var(--brand);font-weight:700}

.gallery{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-4)}
.gallery img{border-radius:var(--r-sm);aspect-ratio:4/3;object-fit:cover;width:100%}
.map-embed{border-radius:var(--r);overflow:hidden;border:1px solid var(--line)}
.map-embed iframe{width:100%;height:380px;border:0;display:block}

/* ---------- CTA band & footer ---------- */
.cta-band{background:var(--brand);color:#fff;padding:var(--sp-16) 0;text-align:center}
.cta-band h2{color:#fff}
.cta-band p{color:rgba(255,255,255,.86);margin:var(--sp-3) auto 0;max-width:54ch}
.cta-band .btn{margin-top:var(--sp-6)}

/* Varian dengan form: dua kolom, teks kiri rata kiri agar tidak bersaing
   dengan kartu form di kanan. Varian tombol tunggal di atas tidak tersentuh. */
.cta-band.has-form{text-align:left}
.cta-band.has-form .wrap{display:grid;grid-template-columns:1fr .9fr;
  gap:var(--sp-12);align-items:center}
.cta-band.has-form .cta-teks p{margin-left:0;margin-right:0}

/* Kartu form. Selektor sengaja disertai .cta-band agar menang atas
   .cta-band p yang mewarnai teks jadi putih - di dalam kartu putih ini
   teksnya harus gelap. */
.fsurvei{background:var(--surface);border-radius:var(--r);padding:var(--sp-6);
  box-shadow:0 18px 44px rgba(20,20,20,.22);color:var(--body)}
.cta-band .fsurvei p{margin:0;max-width:none}
.fsurvei .field{margin-bottom:var(--sp-3)}
.fsurvei .btn{margin-top:var(--sp-2)}
.cta-band .fsurvei .fsurvei-nota{color:var(--mute);font-size:var(--fs-2xs);
  margin-top:var(--sp-3);text-align:center;line-height:1.5}

.ftr{background:var(--ink);color:rgba(255,255,255,.6);padding:var(--sp-16) 0 0;font-size:var(--fs-sm)}
.fgrid-ftr{display:grid;grid-template-columns:1.6fr 1fr 1fr 1.2fr;gap:var(--sp-8);padding-bottom:var(--sp-12)}
.ftr h4{color:#fff;font-size:var(--fs-sm);margin:0 0 var(--sp-4);font-weight:700}
.ftr ul{list-style:none;margin:0;padding:0}
.ftr li{margin-bottom:var(--sp-2)}
.ftr a:hover{color:#fff}
.ftr .brand-tx b{color:#fff}
.ftr .brand-tx span{color:rgba(255,255,255,.55)}
/* Identitas badan hukum di footer.
   Sebelumnya berupa kotak berlatar yang membungkus kotak putih logo - tiga lapis
   bersarang di dalam footer gelap, membuat kolom pertama terasa berat dan sesak
   dibanding kolom lain yang berupa daftar terbuka. Sekarang cukup garis pemisah. */
.legal-id{margin-top:var(--sp-5);padding-top:var(--sp-5);
  border-top:1px solid rgba(255,255,255,.14);font-size:var(--fs-xs);line-height:1.7}
.legal-id b{color:#fff;display:block;margin-bottom:var(--sp-2);font-size:var(--fs-xs)}

/* Logo induk di footer memakai lockup yang sama dengan header */
.ftr .brand.has-cobrand .brand-tx{border-left-color:rgba(255,255,255,.2)}
.ftr .cobrand-logo{height:34px;background:#fff;border-radius:6px;padding:6px 8px}

/* Profil foto penuh - dipakai seragam di semua kartu sidebar (halaman
   proyek, Tahap Pembelian, Tentang Kami, Kontak). Fotonya sendiri sudah
   memuat nama dan nama perusahaan (lihat contoh pondokpermai.com), jadi
   tidak perlu keterangan teks terpisah lagi. width:100% dari .aside-card
   yang tanpa padding - sudut atas ikut membulat lewat clipping
   overflow:hidden pada kartu, bukan border-radius di foto sendiri. */
.agent-photo-full{display:block;width:100%;aspect-ratio:4/5;object-fit:cover;
  object-position:center 15%;background:var(--sand)}
.disclosure{border-top:1px solid rgba(255,255,255,.1);padding:var(--sp-6) 0;
  font-size:var(--fs-xs);color:rgba(255,255,255,.55);line-height:1.65}
.fbot{border-top:1px solid rgba(255,255,255,.1);padding:var(--sp-4) 0;font-size:var(--fs-xs);
  display:flex;justify-content:space-between;gap:var(--sp-4);flex-wrap:wrap}

/* ---------- Bar CTA lengket ---------- */
.mbar{display:none;position:fixed;bottom:0;left:0;right:0;z-index:60;background:#fff;
  border-top:1px solid var(--line);padding:var(--sp-3) var(--sp-4);gap:var(--sp-2);
  box-shadow:0 -4px 18px rgba(0,0,0,.08)}
.mbar .btn{flex:1}

/*
 * Di desktop, kartu sticky hanya menemani sekitar 22% guliran halaman - ia
 * lepas begitu section spesifikasi berakhir, lalu CTA hilang sampai pita CTA
 * di bawah. Mobile justru lebih baik karena bar ini selalu tampil. Celah itu
 * ditutup dengan memunculkan bar versi ringkas di pojok, hanya ketika kartu
 * sticky sudah keluar layar - sehingga tidak pernah ada dua CTA bersamaan.
 */
@media (min-width:721px){
  body.cta-lepas .mbar{
    display:flex;left:auto;right:var(--sp-6);bottom:var(--sp-6);width:auto;
    border:1px solid var(--line);border-radius:var(--r);padding:var(--sp-3);
    box-shadow:0 10px 34px rgba(20,20,20,.18);
    animation:pp-naik .22s ease-out}
  body.cta-lepas .mbar .btn{flex:none}
}
@keyframes pp-naik{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}

/* ---------- Artikel ---------- */
.agrid{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-6)}
.acard{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);overflow:hidden}
.acard img{aspect-ratio:16/10;object-fit:cover;width:100%}
.acard-body{padding:var(--sp-6)}
.acard time{font-size:var(--fs-2xs);color:var(--mute)}
.acard h3{margin:var(--sp-2) 0}
.acard p{font-size:var(--fs-sm)}
.prose{max-width:70ch;font-size:var(--fs-body)}
/* Halaman artikel tunggal tidak punya sidebar, jadi tidak perlu berbagi
   ruang dengan elemen lain - tapi lebar penuh .wrap (1180px, ~130 karakter
   per baris) terlalu lebar untuk nyaman dibaca. 650px dipilih karena masuk
   rentang ideal tipografi (45-75 karakter/baris, diukur ~74 di sini),
   sekaligus lebih lega dari 70ch bawaan .prose (~604px), dan diposisikan
   center supaya terasa "boxed". Diverifikasi langsung di browser sebelum
   memilih angka ini (diuji 600-750px). */
.artikel-full{max-width:650px;margin-inline:auto}
.artikel-full .prose{max-width:none}
.artikel-full+.card{max-width:650px;margin-inline:auto}
.single-post .crumb{max-width:650px;margin-inline:auto}

/* Byline penulis (E-E-A-T) - foto kecil, beda dari .agent-photo-full
   (kartu identitas penuh di sidebar) karena konteksnya inline di antara
   judul dan isi artikel. */
.artikel-author{display:flex;align-items:center;gap:var(--sp-3);
  padding:var(--sp-4) 0;margin:var(--sp-4) 0 var(--sp-6);
  border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.artikel-author img{width:52px;height:52px;border-radius:50%;object-fit:cover;
  object-position:center 15%;flex:none;background:var(--sand)}
.artikel-author b{display:block;color:var(--ink);font-size:var(--fs-sm)}
.artikel-author .artikel-author-peran{display:block;font-size:var(--fs-xs);color:var(--mute)}
.artikel-author .artikel-author-verifikasi{margin-left:auto;font-size:var(--fs-xs);
  color:var(--brand);font-weight:600;flex:none;white-space:nowrap}
.prose h2{font-size:var(--fs-prose-h2);margin:var(--sp-12) 0 var(--sp-4)}
.prose h3{font-size:var(--fs-prose-h3);margin:var(--sp-8) 0 var(--sp-3)}
.prose p,.prose ul,.prose ol{margin-bottom:var(--sp-4)}
.prose img{border-radius:var(--r-sm);margin:var(--sp-6) 0}
.prose a{color:var(--brand);font-weight:600;text-decoration:underline}
.pager{display:flex;gap:var(--sp-2);justify-content:center;margin-top:var(--sp-12)}
.pager .page-numbers{border:1px solid var(--line);border-radius:var(--r-sm);
  padding:.5rem .85rem;font-size:var(--fs-sm);font-weight:600}
.pager .current{background:var(--brand);border-color:var(--brand);color:#fff}

/* ---------- Utilitas ---------- */
.center{text-align:center}
.mt-4{margin-top:var(--sp-4)}
.mt-8{margin-top:var(--sp-8)}
.mb-8{margin-bottom:var(--sp-8)}
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-8)}
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:var(--sp-6)}
.muted{color:var(--mute)}
.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}

/* ---------- Responsif ---------- */
@media (max-width:1000px){
  .pgrid,.tgrid,.agrid,.gallery{grid-template-columns:repeat(2,1fr)}
  .fgrid{grid-template-columns:repeat(2,1fr)}
  .steps{grid-template-columns:repeat(3,1fr)}
  .verify,.player,.faq-wrap,.shead-split{grid-template-columns:1fr;gap:var(--sp-8)}
  .cta-band.has-form .wrap{grid-template-columns:1fr;gap:var(--sp-8)}
  .fgrid-ftr{grid-template-columns:1fr 1fr}
  .aside-card{position:static}
}

/* Nav teks tidak muat berdampingan dengan lockup co-brand + tombol CTA di
   bawah ~950px: header meluber sampai 100px dan memicu scroll horizontal di
   SELURUH halaman. Nav dilipat ke burger lebih awal, tetapi tombol WhatsApp
   sengaja DIPERTAHANKAN sampai 720px, karena bar CTA bawah baru muncul di
   sana - kalau keduanya disembunyikan bersamaan, rentang tablet kehilangan
   CTA sama sekali. */
@media (max-width:950px){
  .nav{display:none}
  .burger{display:block}
  .hdr.is-open .nav{display:block;position:absolute;top:100%;left:0;right:0;background:#fff;
    border-bottom:1px solid var(--line);padding:0 var(--sp-4)}
  .hdr.is-open .nav ul{flex-direction:column;gap:0}
  /* Tanpa padding, tinggi target sentuh cuma 19px (murni tinggi baris teks) -
     terlalu kecil untuk menu navigasi utama yang sering disentuh. Diverifikasi
     langsung: dengan padding blok penuh, tingginya jadi 50px. */
  .hdr.is-open .nav a{display:block;padding:.85rem 0}
  .hdr.is-open .nav li:not(:first-child) a{border-top:1px solid var(--line)}
}

@media (max-width:720px){
  :root{--sp-20:3rem;--sp-16:2.5rem}
  .wrap,.hdr-in,.hero-in,.phero-in{padding-left:var(--sp-4);padding-right:var(--sp-4)}
  .hdr .btn-wa{display:none}
  .cobrand-logo{height:30px}
  .brand.has-cobrand{gap:var(--sp-3)}
  .brand.has-cobrand .brand-tx{padding-left:var(--sp-3)}
  .brand-tx b{font-size:var(--fs-sm)}
  /* Tanpa batas lebar, tagline satu baris menolak membungkus dan mendorong
     header (lockup + tombol burger) melebihi lebar layar - diverifikasi
     langsung: pada 320px, tanpa ini header meluber 39px dan memicu scroll
     horizontal SELURUH halaman (termasuk mbar, yang lebarnya ikut terhitung
     dari viewport yang sudah membengkak). 165px diuji aman sampai 320px. */
  .tagline{max-width:165px}
  .trust{grid-template-columns:1fr 1fr}
  .trust div{border-right:0;border-bottom:1px solid rgba(255,255,255,.14);padding:var(--sp-4)}
  .pgrid,.tgrid,.agrid,.fgrid,.steps,.fgrid-ftr,.flist,.gallery{grid-template-columns:1fr}
  .grid-2,.vstat{grid-template-columns:1fr}
  .kpr{grid-template-columns:1fr;padding:var(--sp-6)}
  .mbar{display:flex}
  /* 70px mengasumsikan tombol satu baris. Teks "Chat WhatsApp" membungkus
     jadi 2 baris di layar sempit, membuat mbar sebenarnya 85px - footer
     jadi tertutup 16px di ujung scroll. Diberi margin aman, bukan pas-pasan
     mengikuti tinggi saat ini persis. */
  body{padding-bottom:100px}
  .aside-card{position:static}
  /* Baris foto+nama+jabatan+link tanpa wrap memaksa kolom teks menyempit
     jadi 165px di layar sempit (peran jadi 4 baris, terasa sesak) karena
     link verifikasi ikut berbagi baris yang sama. Turunkan link verifikasi
     ke barisnya sendiri, beri kolom teks lebar tetap (200px) supaya bebas
     tumbuh mengisi sisa ruang di samping foto, bukan ikut menyempit. */
  .artikel-author{flex-wrap:wrap}
  .artikel-author>div{flex:1 1 200px;min-width:0}
  .artikel-author .artikel-author-verifikasi{flex-basis:100%;margin-left:64px;margin-top:var(--sp-2)}
}

/* ---------- Cetak ---------- */
/* ---------- Reveal halus saat section mendekati layar ----------
   Sengaja minimal: cuma judul section (.shead/.shead-split), bukan tiap
   kartu satu-satu - staggered reveal per elemen terasa seperti landing
   page "dijual", berlawanan dengan kesan tenang-terpercaya yang dibangun
   situs ini. Sekali jalan per elemen, bukan berulang tiap scroll.
   Fallback aman: tanpa JS, .reveal-siap tidak pernah tertambah ke <html>,
   sehingga elemen tidak pernah disembunyikan sama sekali. Kecepatan
   transisi otomatis mengikuti preferensi gerak lewat aturan
   prefers-reduced-motion di bawah - tidak perlu override terpisah. */
.reveal-siap .reveal{opacity:0;transform:translateY(10px);
  transition:opacity .2s ease-out,transform .2s ease-out}
.reveal-siap .reveal.reveal-tampil{opacity:1;transform:none}

@media print{
  .hdr,.mbar,.cta-band,.ftr,.filters{display:none}
  body{padding-bottom:0}
}

/* ---------- Hormati preferensi gerak ---------- */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms !important;transition-duration:.01ms !important;
    scroll-behavior:auto !important}
}
