/* =====================================================================
   Kopdit Obormas — Komponen Formulir (reusable)
   Dipakai bersama css/styles.css + css/page.css + css/berita.css.

   Lapis gaya untuk SEMUA form publik v1.0 — Aspirasi Anggota (FR-28),
   Registrasi Anggota (§25.1), Permohonan Pinjaman (FR-29). Markup form
   netral (tag <input>/<select>/<textarea> + .field) agar cocok dengan
   keluaran SilverStripe UserForms / Form API tanpa class per-elemen.

   Tata letak meminjam .article-layout (konten + sidebar 320px) dari
   css/berita.css agar konsisten dengan Berita, Tentang & Produk.
   ===================================================================== */

/* ---------------------------------------------------------------------
   1. KARTU FORM + PENGANTAR
   --------------------------------------------------------------------- */
.form-intro{margin:0 0 26px}
.form-intro p{font-size:15.5px;color:var(--ink-2);line-height:1.7;max-width:60ch}
.form-intro p + p{margin-top:12px}

.form-card{background:#fff;border:1px solid var(--line);border-radius:var(--r-xl);box-shadow:var(--shadow-sm);padding:30px 32px 32px}
.form-card .fc-head{display:flex;align-items:center;gap:14px;margin:0 0 6px}
.form-card .fc-head .fc-ic{flex-shrink:0;width:46px;height:46px;border-radius:13px;background:var(--gold-50);color:var(--gold-700);display:grid;place-items:center}
.form-card .fc-head .fc-ic svg{width:24px;height:24px}
.form-card .fc-head h2{font-size:20px;line-height:1.2;margin:0}
.form-card .fc-head p{font-size:13px;color:var(--slate);margin:2px 0 0}
.form-card > .fc-sub{font-size:13.5px;color:var(--slate);margin:0 0 24px;padding-bottom:20px;border-bottom:1px solid var(--line)}

/* ---------------------------------------------------------------------
   2. FIELD
   --------------------------------------------------------------------- */
.field{margin:0 0 20px}
.field:last-of-type{margin-bottom:0}
.field > label{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;font-family:"Sora",sans-serif;font-size:14px;font-weight:600;color:var(--ink);margin:0 0 8px}
.field > label .req{color:#C0341D;font-weight:700}
.field > label .opt{font-family:"Inter",sans-serif;font-size:12px;font-weight:500;color:var(--slate);background:var(--soft);border:1px solid var(--line);border-radius:999px;padding:1px 9px}

/* baris dua kolom (mis. Nomor Anggota + Kontak) */
.field-row{display:grid;grid-template-columns:1fr 1fr;gap:18px}
.field-row > .field{margin-bottom:20px}

/* kontrol input */
.field input[type=text],
.field input[type=email],
.field input[type=tel],
.field input[type=number],
.field input[type=date],
.field select,
.field textarea{
  width:100%;font-family:"Inter",sans-serif;font-size:15px;color:var(--ink);
  background:#fff;border:1.5px solid var(--line);border-radius:11px;
  padding:13px 15px;line-height:1.5;transition:border-color .2s,box-shadow .2s,background .2s;
  -webkit-appearance:none;appearance:none;
}
.field textarea{min-height:148px;resize:vertical}
.field input::placeholder,.field textarea::placeholder{color:#9AA4AF}
.field input:hover,.field select:hover,.field textarea:hover{border-color:#CBD3DB}
.field input:focus,.field select:focus,.field textarea:focus{
  outline:none;border-color:var(--gold);background:#fff;
  box-shadow:0 0 0 4px rgba(245,180,0,.18);
}

/* date: pastikan ikon date-picker tetap tampil & klik membuka kalender */
.field input[type=date]{cursor:pointer}
.field input[type=date]::-webkit-calendar-picker-indicator{cursor:pointer;opacity:.65;transition:opacity .2s}
.field input[type=date]:hover::-webkit-calendar-picker-indicator{opacity:1}

/* select: panah kustom */
.field .select-wrap{position:relative}
.field .select-wrap::after{
  content:"";position:absolute;right:16px;top:50%;width:10px;height:10px;
  margin-top:-7px;border-right:2px solid var(--slate);border-bottom:2px solid var(--slate);
  transform:rotate(45deg);pointer-events:none;transition:border-color .2s;
}
.field .select-wrap:hover::after{border-color:var(--gold-700)}
.field select{padding-right:42px;cursor:pointer}

/* teks bantuan & penghitung karakter */
.field .hint{display:block;font-size:12.5px;color:var(--slate);margin-top:7px;line-height:1.5}
.field .count{float:right;font-size:12px;color:var(--slate);font-variant-numeric:tabular-nums}

/* keadaan error (divalidasi server/SilverStripe) */
.field.is-error input,.field.is-error select,.field.is-error textarea{border-color:#C0341D;background:#FEF6F4}
.field.is-error input:focus,.field.is-error textarea:focus{box-shadow:0 0 0 4px rgba(192,52,29,.15)}
.field .error-msg{display:none;align-items:center;gap:7px;font-size:12.5px;font-weight:600;color:#C0341D;margin-top:7px}
.field.is-error .error-msg{display:flex}
.field .error-msg svg{width:15px;height:15px;flex-shrink:0}

/* ---------------------------------------------------------------------
   3. PERSETUJUAN (consent) + ANTI-SPAM (BR-07 / NFR)
   --------------------------------------------------------------------- */
.form-consent{display:flex;align-items:flex-start;gap:12px;margin:24px 0 0;padding:16px 18px;background:var(--soft);border:1px solid var(--line);border-radius:var(--r-lg)}
.form-consent input[type=checkbox]{flex-shrink:0;width:20px;height:20px;margin-top:1px;accent-color:var(--gold-700);cursor:pointer}
.form-consent label{font-size:13px;color:var(--ink-2);line-height:1.6;cursor:pointer}
.form-consent a{color:var(--gold-700);font-weight:600;text-decoration:underline;text-underline-offset:2px}

.form-captcha{margin:18px 0 0;display:flex;align-items:center;gap:11px;font-size:12.5px;color:var(--slate)}
.form-captcha svg{width:18px;height:18px;color:var(--gold-700);flex-shrink:0}

/* ---------------------------------------------------------------------
   4. AKSI (tombol)
   --------------------------------------------------------------------- */
.form-actions{display:flex;gap:12px;flex-wrap:wrap;margin:26px 0 0;padding-top:24px;border-top:1px solid var(--line)}
.form-actions .btn-gold{padding-inline:30px}
.form-actions .btn svg{width:17px;height:17px}

/* ---------------------------------------------------------------------
   5. KEADAAN SUKSES (ditampilkan setelah submit — SilverStripe success)
   --------------------------------------------------------------------- */
.form-success{display:flex;align-items:flex-start;gap:16px;padding:24px 26px;background:linear-gradient(135deg,var(--gold-50),#fff);border:1px solid var(--gold);border-radius:var(--r-xl);box-shadow:var(--shadow-sm)}
.form-success .fs-ic{flex-shrink:0;width:46px;height:46px;border-radius:50%;background:var(--gold);color:var(--ink);display:grid;place-items:center}
.form-success .fs-ic svg{width:26px;height:26px}
.form-success h3{font-size:19px;margin:0 0 5px}
.form-success p{font-size:14px;color:var(--ink-2);line-height:1.6;margin:0}

/* ---------------------------------------------------------------------
   6. SIDEBAR — langkah & info (gaya selaras .side-card / .side-help)
   --------------------------------------------------------------------- */
.flow-steps{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px;counter-reset:step}
.flow-steps li{position:relative;display:flex;gap:13px;padding:4px 0 18px;counter-increment:step}
.flow-steps li:last-child{padding-bottom:0}
.flow-steps li::before{content:counter(step);flex-shrink:0;width:30px;height:30px;border-radius:50%;background:var(--gold-50);color:var(--gold-700);font-family:"Sora",sans-serif;font-weight:700;font-size:13px;display:grid;place-items:center;z-index:1}
.flow-steps li:not(:last-child)::after{content:"";position:absolute;left:14px;top:32px;bottom:2px;width:2px;background:var(--line)}
.flow-steps li .fs-txt b{display:block;font-family:"Sora",sans-serif;font-size:14px;color:var(--ink);margin-bottom:2px}
.flow-steps li .fs-txt span{font-size:13px;color:var(--slate);line-height:1.55}

/* kartu bantuan/kontak ringkas — selaras dgn .side-help di css/produk.css
   (didefinisikan di sini agar halaman form mandiri tanpa memuat produk.css) */
.side-help p.lead-help{font-size:13.5px;color:var(--slate);line-height:1.6;margin-bottom:14px}
.side-help .help-row{display:flex;align-items:center;gap:11px;padding:9px 0;font-size:13.5px;color:var(--ink);font-weight:600}
.side-help .help-row svg{flex-shrink:0;width:18px;height:18px;color:var(--gold-700)}

/* ---------------------------------------------------------------------
   7. PENGELOMPOKAN SEKSI (form panjang multi-bagian — mis. Registrasi §25.1)
      Memecah form panjang menjadi bagian bernomor agar mudah dipindai.
   --------------------------------------------------------------------- */
.form-section{margin:0 0 8px;padding:26px 0 4px;border-top:1px solid var(--line)}
/* fc-sub sudah memberi garis pemisah; section pertama (tepat setelahnya)
   tidak perlu garis atas lagi. :first-of-type tidak dipakai karena div
   pertama dalam form adalah .fc-head, bukan .form-section. */
.fc-sub + .form-section{padding-top:6px;border-top:0}
.form-section > .fs-head{display:flex;align-items:center;gap:13px;margin:0 0 20px}
.form-section > .fs-head .fs-num{flex-shrink:0;width:34px;height:34px;border-radius:50%;background:var(--gold-50);color:var(--gold-700);font-family:"Sora",sans-serif;font-weight:700;font-size:14px;display:grid;place-items:center}
.form-section > .fs-head h3{font-family:"Sora",sans-serif;font-size:17px;line-height:1.25;margin:0}
.form-section > .fs-head p{font-size:12.5px;color:var(--slate);margin:2px 0 0}

/* baris tiga kolom (mis. Kecamatan / Kelurahan / dsb.) */
.field-row.cols-3{grid-template-columns:1fr 1fr 1fr}

/* ---------------------------------------------------------------------
   8. GRUP RADIO (Jenis Kelamin, Status Keluarga)
   --------------------------------------------------------------------- */
.radio-group{display:flex;gap:12px;flex-wrap:wrap}
.radio-pill{position:relative;display:flex;align-items:center;gap:10px;flex:1 1 0;min-width:140px;padding:13px 16px;border:1.5px solid var(--line);border-radius:11px;cursor:pointer;font-size:15px;color:var(--ink);transition:border-color .2s,background .2s,box-shadow .2s}
.radio-pill input{position:absolute;opacity:0;width:0;height:0}
.radio-pill .dot{flex-shrink:0;width:20px;height:20px;border-radius:50%;border:2px solid #CBD3DB;display:grid;place-items:center;transition:border-color .2s}
.radio-pill .dot::after{content:"";width:10px;height:10px;border-radius:50%;background:var(--gold);transform:scale(0);transition:transform .18s}
.radio-pill:hover{border-color:#CBD3DB;background:var(--soft)}
.radio-pill:has(input:checked){border-color:var(--gold);background:var(--gold-50)}
.radio-pill:has(input:checked) .dot{border-color:var(--gold-700)}
.radio-pill:has(input:checked) .dot::after{transform:scale(1)}
.radio-pill:has(input:focus-visible){box-shadow:0 0 0 4px rgba(245,180,0,.18)}

/* ---------------------------------------------------------------------
   9. UNGGAH DOKUMEN (Foto KTP / Diri / KK) — file upload bergaya
      Markup: <label class="upload"><input type=file>…</label>
   --------------------------------------------------------------------- */
.upload-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
.upload{position:relative;display:flex;flex-direction:column;align-items:center;text-align:center;gap:9px;padding:24px 16px;border:1.5px dashed #CBD3DB;border-radius:14px;background:var(--soft);cursor:pointer;transition:border-color .2s,background .2s}
.upload input[type=file]{position:absolute;inset:0;opacity:0;cursor:pointer}
.upload:hover{border-color:var(--gold);background:var(--gold-50)}
.upload:has(input:focus-visible){border-color:var(--gold);box-shadow:0 0 0 4px rgba(245,180,0,.18)}
.upload .up-ic{width:42px;height:42px;border-radius:12px;background:#fff;border:1px solid var(--line);color:var(--gold-700);display:grid;place-items:center}
.upload .up-ic svg{width:22px;height:22px}
.upload .up-title{font-family:"Sora",sans-serif;font-weight:600;font-size:14px;color:var(--ink)}
.upload .up-meta{font-size:12px;color:var(--slate);line-height:1.5}
.upload .up-file{display:none;font-size:12.5px;font-weight:600;color:var(--gold-700);word-break:break-all}
.upload.has-file{border-style:solid;border-color:var(--gold);background:var(--gold-50)}
.upload.has-file .up-meta{display:none}
.upload.has-file .up-file{display:block}

/* ---------------------------------------------------------------------
   10. BANNER PREFILL — data terbawa dari Simulasi Pinjaman (FR-29)
       Tampil di atas form Permohonan Pinjaman saat dimasuki dari hasil
       simulasi (query: ?jenis&nominal&tenor). Disembunyikan bila akses
       langsung. Lihat js inline di permohonan-pinjaman.html.
   --------------------------------------------------------------------- */
.form-prefill{display:flex;align-items:flex-start;gap:13px;margin:0 0 24px;padding:15px 18px;background:var(--gold-50);border:1px solid var(--gold);border-radius:var(--r-lg)}
.form-prefill svg{flex-shrink:0;width:20px;height:20px;color:var(--gold-700);margin-top:1px}
.form-prefill p{font-size:13px;color:var(--ink-2);line-height:1.6;margin:0}
.form-prefill b{color:var(--ink)}

/* input nominal Rupiah dengan prefix "Rp" */
.amount-wrap{position:relative}
.amount-wrap .rp{position:absolute;left:15px;top:50%;transform:translateY(-50%);font-family:"Sora",sans-serif;font-weight:600;font-size:14px;color:var(--slate);pointer-events:none}
.amount-wrap input[type=text]{padding-left:42px;font-variant-numeric:tabular-nums}

/* ---------------------------------------------------------------------
   11. RESPONSIF
   --------------------------------------------------------------------- */
@media (max-width:760px){
  .upload-grid{grid-template-columns:1fr}
  .field-row.cols-3{grid-template-columns:1fr}
}
@media (max-width:600px){
  .form-card{padding:24px 20px 26px}
  .field-row{grid-template-columns:1fr;gap:0}
  .field-row.cols-3{gap:0}
  .form-actions{flex-direction:column}
  .form-actions .btn{width:100%;justify-content:center}
  .radio-group{flex-direction:column}
  .radio-pill{min-width:0}
}
