/* ==========================================================================
   AIRO-C — Artificial Intelligence & Robotic Club, Jurusan Fisika Unila
   Tema: TEMA UMUM GELAP + ISI PUTIH.
   Latar halaman gelap (arang), setiap blok isi (kartu/panel) berlatar PUTIH
   dengan tulisan hitam. Aksen: biru tua (navy), hijau sage, terracotta, amber.
   Tanpa neon, tanpa gradasi dekoratif, tanpa efek kaca.

   Cara kerja warna teks: <body> menetapkan variabel untuk kondisi DI ATAS
   LATAR GELAP (--txt, --head, --line-ctx dst.), lalu setiap permukaan putih
   menimpa variabel itu jadi versi gelap (lihat "konteks permukaan" di bawah).
   Jadi utilitas .muted / .small / h2 dsb. otomatis terbaca di dua latar.
   ========================================================================== */

:root {
  /* =====================================================================
     TEMA FRESH: latar halaman putih–biru muda, kartu putih, tulisan hitam.
     ===================================================================== */

  /* latar halaman: kombinasi putih + biru muda */
  --bg: #e9f2fd;
  --bg-2: #eaf2fb;
  --chrome: #ffffff;            /* topbar putih */
  --surface: #ffffff;           /* kartu utama: putih bersih */
  --surface-2: #eaf2fb;         /* bidang kedua: biru muda */
  --surface-3: #d9e8f7;         /* biru muda lebih tua (jalur progress) */

  /* garis */
  --line: #d9e6f5;
  --line-2: #bfd3e8;
  --pine-line: #c6dcd0;

  /* teks utama (di atas putih / biru muda) */
  --ink: #14202b;
  --ink-soft: #3c4a58;
  --muted: #566672;

  /* aksen */
  --pine: #2f6b53;
  --pine-dark: #255743;
  --pine-soft: #e8f1ec;
  --sage: #4f7040;
  --sage-soft: #edf3e6;
  --clay: #a15c3a;
  --clay-text: #8f4f30;   /* clay yang cukup gelap di atas clay-soft */
  --clay-soft: #f7ece4;
  --amber: #8a6314;
  --amber-soft: #f8f1dd;
  --ok: #3d6b4a;
  --ok-soft: #eaf2ec;
  --bad: #97402f;
  --bad-soft: #f9ebe7;

  /* teks & garis "di atas latar halaman" (kini latar terang -> teks gelap) */
  --on: #1b2836;
  --on-soft: #42566a;
  --on-muted: #5d6f81;
  --on-head: #101d2a;
  --on-line: #d8e4f1;
  --link-on: #276049;            /* tautan di latar terang */
  --eb-on: #46703f;              /* label eyebrow di latar terang */

  --r: 12px;
  --r-sm: 8px;
  --shadow: 0 2px 4px rgba(32, 74, 116, .07), 0 14px 32px rgba(32, 74, 116, .13);
  --shadow-soft: 0 1px 2px rgba(32, 74, 116, .07), 0 6px 18px rgba(32, 74, 116, .08);
  --serif: Georgia, "Iowan Old Style", "Palatino Linotype", "Times New Roman", serif;
}

* { box-sizing: border-box; }
html { scroll-behavior: smooth; }

body {
  margin: 0;
  background: var(--bg);
  color: var(--on);
  font-family: Inter, "Segoe UI", system-ui, -apple-system, sans-serif;
  font-size: 15.5px;
  line-height: 1.7;
  -webkit-font-smoothing: antialiased;
  min-height: 100vh;
  display: flex;
  flex-direction: column;

  /* konteks bawaan: DI ATAS LATAR GELAP */
  --txt: var(--on);
  --txt-soft: var(--on-soft);
  --txt-muted: var(--on-muted);
  --head: var(--on-head);
  --line-ctx: var(--on-line);
  --link: var(--link-on);
  --eb: var(--eb-on);
}

/* ---------- konteks permukaan putih ----------
   Selain mengganti variabel teks, elemen permukaan juga menetapkan `color`
   langsung supaya elemen yang tidak diatur khusus (td, th, span, label di
   dalam tabel/tombol) tetap ikut jadi gelap — bukan mewarisi warna latar gelap. */
.card, .page-banner, .hero-in, .empty, .table-wrap,
.ck, .berkas, .area-tile, .notice-box, .alert, .hero-stat, .slot,
.progress-box, .date-chip, .thumb-tile, .foto-hero, .ilustrasi-tile {
  --txt: var(--ink);
  --txt-soft: var(--ink-soft);
  --txt-muted: var(--muted);
  --head: var(--ink);
  --line-ctx: var(--line);
  --link: var(--pine);
  --eb: var(--sage);
  color: var(--ink);
}

a { color: var(--link); text-decoration: none; }
a:hover { color: var(--link); text-decoration: underline; text-underline-offset: 2px; }

h1, h2, h3, h4 { font-family: var(--serif); font-weight: 700; line-height: 1.3; margin: 0 0 .5em; color: var(--head); }
h1 { font-size: 2rem; }
h2 { font-size: 1.42rem; }
h3 { font-size: 1.1rem; }
p, li, dd, dt { color: var(--txt); }
p { margin: 0 0 1em; }
img { max-width: 100%; display: block; }
code, kbd, .mono { font-family: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace; font-size: .9em; }

.muted { color: var(--txt-muted); }
.small { font-size: .87rem; }
.tiny { font-size: .78rem; color: var(--txt-muted); }
.center { text-align: center; }
.nowrap { white-space: nowrap; }
.mt-0 { margin-top: 0; }
.mb-0 { margin-bottom: 0; }
.hr { height: 1px; background: var(--line-ctx); border: 0; margin: 22px 0; }
.lead { color: var(--txt-soft); font-size: 1.02rem; }

.bgfx {
  position: fixed; inset: 0; z-index: -1;
  background:
    radial-gradient(880px 480px at 8% -10%, #ffffff 0%, rgba(255, 255, 255, 0) 58%),
    radial-gradient(760px 440px at 92% 2%, #e4f0fd 0%, rgba(228, 240, 253, 0) 62%),
    linear-gradient(168deg, #f4faff 0%, #e6f0fc 48%, #ddeaf9 100%);
}
.bgfx .glow, .bgfx .grid { display: none; }

/* ---------- layout ---------- */
.wrap { width: 100%; max-width: 1120px; margin: 0 auto; padding: 0 22px; }
.page { flex: 1 0 auto; padding: 30px 0 64px; }

/* ---------- chrome atas (gelap) ---------- */
.topbar {
  position: sticky; top: 0; z-index: 40;
  background: var(--chrome);
  border-bottom: 1px solid var(--line-2);
  box-shadow: 0 1px 0 rgba(32, 74, 116, .04), 0 6px 18px rgba(32, 74, 116, .05);
}
.topbar-in { max-width: 1120px; margin: 0 auto; padding: 14px 22px; display: flex; align-items: center; gap: 18px; }
.brand { display: flex; align-items: center; gap: 11px; color: var(--on-head); }
.brand:hover { color: #fff; text-decoration: none; }
.logo {
  width: 38px; height: 38px; flex: 0 0 38px; border-radius: 9px;
  display: grid; place-items: center; font-family: var(--serif); font-weight: 700; font-size: .9rem;
  color: #fff; background: var(--pine);
}
.brand-txt { display: flex; flex-direction: column; line-height: 1.2; }
.brand-txt strong { font-family: var(--serif); font-size: 1.05rem; }
.brand-txt small { color: var(--on-muted); font-size: .74rem; }

.nav { display: flex; align-items: center; gap: 2px; margin-left: auto; }
.nav a { color: var(--on-soft); font-size: .91rem; font-weight: 500; padding: 7px 12px; border-radius: var(--r-sm); }
.nav a:hover { color: var(--pine); background: var(--surface-2); text-decoration: none; }
.nav a.on { color: var(--pine); background: var(--pine-soft); font-weight: 600; }

.nav-actions { display: flex; align-items: center; gap: 10px; }
.cart-link {
  position: relative; display: grid; place-items: center; width: 38px; height: 38px;
  border-radius: var(--r-sm); border: 1px solid var(--line-2); color: var(--on-soft); background: var(--surface);
}
.cart-link:hover { border-color: var(--pine); color: var(--pine); background: var(--pine-soft); }
.cart-badge {
  position: absolute; top: -7px; right: -7px; min-width: 19px; height: 19px; border-radius: 999px;
  background: var(--clay); color: #fff; font-size: .7rem; font-weight: 700;
  display: grid; place-items: center; padding: 0 5px;
}
.nav-toggle { display: none; }
.topbar .btn { background: transparent; border-color: var(--line-2); color: var(--ink); }
.topbar .btn:hover { background: var(--surface-2); border-color: var(--pine); color: var(--pine); }
.topbar .btn-primary { background: var(--pine); border-color: var(--pine); color: #fff; }
.topbar .btn-primary:hover { background: var(--pine-dark); border-color: var(--pine-dark); color: #fff; }

/* ---------- tombol ---------- */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  padding: 10px 17px; border-radius: var(--r-sm);
  border: 1px solid var(--line-2); background: var(--surface);
  color: var(--ink); font: inherit; font-weight: 600; font-size: .92rem;
  cursor: pointer; transition: background .15s, border-color .15s, color .15s; text-align: center;
}
.btn:hover { border-color: var(--pine); color: var(--pine); background: var(--pine-soft); text-decoration: none; }
.btn-primary { background: var(--pine); border-color: var(--pine); color: #fff; }
.btn-primary:hover { background: var(--pine-dark); border-color: var(--pine-dark); color: #fff; }
.btn-ghost { background: transparent; color: var(--txt); border-color: var(--line-ctx); }
.btn-ghost:hover { background: var(--surface-2); border-color: var(--pine); color: var(--pine); }
.btn-sm { padding: 7px 13px; font-size: .85rem; }
.btn-danger { border-color: #e2c6c1; color: var(--bad); background: var(--surface); }
.btn-danger:hover { border-color: var(--bad); color: var(--bad); background: var(--bad-soft); }
.btn-block { width: 100%; }
.btn[disabled] { opacity: .55; cursor: not-allowed; }

/* ---------- kartu & grid ---------- */
.card {
  background: var(--surface); color: var(--txt);
  border: 1px solid var(--line); border-radius: var(--r);
  box-shadow: var(--shadow-soft); padding: 22px;
}
.card.tight { padding: 16px; }
.card-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; margin-bottom: 16px; }
.card-head h3 { margin: 0; }

.grid { display: grid; gap: 20px; }
.grid-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.grid-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.grid-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.grid-auto { grid-template-columns: repeat(auto-fill, minmax(255px, 1fr)); }
.split { display: grid; grid-template-columns: 1.6fr 1fr; gap: 26px; align-items: start; }

.section { margin-top: 46px; }
.section-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 18px; margin-bottom: 20px; flex-wrap: wrap; }
.section-head h2 { margin: 0; color: var(--head); }
.section-head .sec-sub { color: var(--txt-soft); max-width: 64ch; margin: 6px 0 0; font-size: .95rem; }
.eyebrow { display: block; font-family: Inter, system-ui, sans-serif; font-size: .76rem; letter-spacing: .06em; text-transform: uppercase; color: var(--eb); font-weight: 700; margin-bottom: 8px; }

/* ---------- kepala halaman (di atas latar gelap) ---------- */
.page-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 18px; flex-wrap: wrap; margin-bottom: 24px; }
.page-head h1 { margin: 0 0 4px; font-size: 1.7rem; color: var(--head); }
.page-head .sub { color: var(--txt-soft); max-width: 74ch; margin: 0; }

/* banner: kartu putih berisi judul + ilustrasi / gambar unggahan pengurus */
.page-banner {
  display: grid; grid-template-columns: 1.5fr .85fr; gap: 26px; align-items: center;
  padding: 26px 30px; margin-bottom: 28px;
  background: var(--surface); border: 1px solid var(--line); border-radius: var(--r); box-shadow: var(--shadow-soft);
}
.page-banner h1 { margin: 0 0 6px; }
.page-banner .sub { color: var(--txt-soft); margin: 0; max-width: 62ch; }
.page-banner-aksi { margin-top: 20px; display: flex; gap: 12px; flex-wrap: wrap; }
.page-banner-art { justify-self: end; width: 100%; max-width: 330px; }
.ilustrasi-banner { width: 100%; height: auto; display: block; border-radius: 12px; background: var(--surface-2); }
.banner-img { width: 100%; height: 178px; object-fit: cover; border-radius: 12px; border: 1px solid var(--line); }
.banner-img-note { margin: 8px 0 0; text-align: right; }

/* ---------- hero beranda ---------- */
.hero { padding: 4px 0 0; }
.hero-in {
  display: grid; grid-template-columns: 1.25fr .95fr; gap: 32px; align-items: center;
  padding: 34px; border-radius: var(--r); background: var(--surface);
  border: 1px solid var(--line); box-shadow: var(--shadow);
}
.hero h1 { font-size: 2.2rem; margin-bottom: .45em; }
.hero h1 span { border-bottom: 3px solid #cfdccf; }
.hero .lead { color: var(--txt-soft); font-size: 1.03rem; max-width: 56ch; }
.hero-actions { display: flex; gap: 12px; flex-wrap: wrap; margin-top: 24px; }
.hero-panel { display: grid; gap: 12px; }
.hero-art { background: var(--surface-2); border: 1px solid var(--line); border-radius: var(--r); padding: 8px; }
.hero-art .ilustrasi-banner { background: transparent; }
.hero-img { width: 100%; height: 230px; object-fit: cover; border-radius: var(--r); border: 1px solid var(--line); }
.hero-note { font-size: .88rem; color: var(--txt-muted); margin: 0; }
.hero-stat { display: flex; align-items: center; gap: 14px; padding: 14px 16px; border-radius: var(--r); background: var(--surface-2); border: 1px solid var(--line); }
.hero-stat b { font-family: var(--serif); font-size: 1.45rem; color: var(--pine); line-height: 1.1; }
.hero-stat span { display: block; color: var(--txt-muted); font-size: .84rem; }
.hero-stat .ic { font-size: 1.35rem; }

/* KPI di atas latar gelap (bukan di dalam kartu) */
/* Counter di beranda: diberi jarak dari hero supaya tidak menempel. */
.kpi-row { margin-top: 44px; }
.kpi-row .card { padding: 16px 18px; }

@media (max-width: 640px) {
  .kpi-row { margin-top: 30px; }
}
.kpi { display: flex; align-items: center; gap: 15px; }
.kpi .ic { width: 44px; height: 44px; flex: 0 0 44px; border-radius: var(--r-sm); display: grid; place-items: center; font-size: 1.2rem; background: var(--surface-2); border: 1px solid var(--line); color: var(--acc, var(--pine)); }
.kpi b { display: block; font-family: var(--serif); font-size: 1.5rem; line-height: 1.1; color: var(--pine); }
.kpi span { color: var(--txt-muted); font-size: .84rem; }

/* ---------- badge, chip, pill ---------- */
.badge {
  display: inline-block; padding: 3px 10px; border-radius: 999px; font-size: .76rem; font-weight: 600;
  border: 1px solid var(--pine-line); color: var(--pine); background: var(--pine-soft);
}
.badge-ok { color: var(--ok); background: var(--ok-soft); border-color: #cfe0d2; }
.badge-warn { color: var(--amber); background: var(--amber-soft); border-color: #eadcb8; }
.badge-info { color: var(--pine); background: var(--pine-soft); border-color: var(--pine-line); }
.badge-bad { color: var(--bad); background: var(--bad-soft); border-color: #e6cbc6; }
.badge-muted { color: var(--muted); background: var(--surface-2); border-color: var(--line); }
.chip { display: inline-flex; align-items: center; gap: 6px; padding: 4px 11px; border-radius: 999px; font-size: .8rem; background: var(--sage-soft); border: 1px solid #cfe0d4; color: var(--sage); }

/* ---------- tabel ---------- */
.table-wrap { overflow-x: auto; border-radius: var(--r); border: 1px solid var(--line); background: var(--surface); }
table.table { width: 100%; border-collapse: collapse; min-width: 640px; font-size: .9rem; }
table.table th, table.table td { padding: 12px 14px; text-align: left; border-bottom: 1px solid var(--line); vertical-align: middle; }
table.table th { background: var(--surface-2); color: var(--ink-soft); font-size: .78rem; letter-spacing: .04em; text-transform: uppercase; font-weight: 700; }
table.table tr:last-child td { border-bottom: 0; }
table.table td.num, table.table th.num { text-align: right; font-variant-numeric: tabular-nums; }

/* ---------- form ---------- */
.field { margin-bottom: 16px; }
.field > label { display: block; font-size: .85rem; font-weight: 600; color: var(--txt-soft); margin-bottom: 7px; }
.field .help { color: var(--txt-muted); font-size: .8rem; margin-top: 6px; }
input[type=text], input[type=password], input[type=email], input[type=number], input[type=tel],
input[type=search], input[type=url], input[type=date], input[type=file], select, textarea {
  width: 100%; padding: 10px 12px; background: var(--surface); color: var(--ink);
  border: 1px solid var(--line-2); border-radius: var(--r-sm); font: inherit; font-size: .93rem;
  transition: border-color .15s, box-shadow .15s;
}
input:focus, select:focus, textarea:focus { outline: 0; border-color: var(--pine); box-shadow: 0 0 0 3px rgba(47, 107, 83, .16); }
textarea { min-height: 130px; resize: vertical; line-height: 1.65; }
select { appearance: none; background-image: linear-gradient(45deg, transparent 50%, var(--muted) 50%), linear-gradient(135deg, var(--muted) 50%, transparent 50%); background-position: calc(100% - 18px) 50%, calc(100% - 13px) 50%; background-size: 5px 5px, 5px 5px; background-repeat: no-repeat; }
input[type=file] { padding: 9px; }
.form-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 4px 20px; }
.form-grid .full { grid-column: 1 / -1; }
.check { display: flex; align-items: center; gap: 9px; font-size: .9rem; color: var(--txt); }
.check input { width: auto; }

/* ---------- alert (kartu tipis berwarna muda) ---------- */
.alert { padding: 12px 16px; border-radius: var(--r-sm); margin-bottom: 18px; font-size: .9rem; border: 1px solid var(--pine-line); background: var(--pine-soft); color: #23513f; }
.alert-ok { background: var(--ok-soft); border-color: #cfe0d2; color: #2f5540; }
.alert-warn { background: var(--amber-soft); border-color: #eadcb8; color: #6f4d16; }
.alert-bad { background: var(--bad-soft); border-color: #e6cbc6; color: #863a30; }
.alert-info { background: var(--pine-soft); border-color: var(--pine-line); color: #23513f; }

/* ---------- anggota ---------- */
.member { display: flex; align-items: center; gap: 15px; }
.avatar { width: 46px; height: 46px; flex: 0 0 46px; border-radius: 50%; display: grid; place-items: center; font-family: var(--serif); font-weight: 700; font-size: 1rem; color: #fff; background: var(--pine); overflow: hidden; }
.avatar.lg { width: 60px; height: 60px; flex-basis: 60px; font-size: 1.25rem; }
.avatar img { width: 100%; height: 100%; object-fit: cover; }
.member-meta { min-width: 0; }
.member-meta strong { display: block; font-weight: 600; }
.member-meta small { color: var(--txt-muted); font-size: .83rem; }
.group-head { display: flex; align-items: center; gap: 14px; margin: 34px 0 18px; }
.group-head h3 { margin: 0; font-size: 1.1rem; }
.group-head .line { flex: 1; height: 1px; background: var(--line-ctx); }
.card .group-head { margin: 26px 0 14px; }
.card .group-head .line { background: var(--line); }

/* ---------- prestasi ---------- */
.prestasi-card { display: block; color: inherit; }
.prestasi-card:hover { text-decoration: none; border-color: var(--pine); }
.award { display: flex; gap: 16px; align-items: flex-start; }
.award h3 { margin: 0 0 4px; }
.award .meta { color: var(--txt-muted); font-size: .85rem; }
.award .tags { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 12px; }
.medal { width: 50px; height: 50px; flex: 0 0 50px; border-radius: 50%; display: grid; place-items: center; font-size: 1.4rem; background: var(--surface-2); border: 1px solid var(--line-2); }
.award-photo { width: 104px; height: 78px; flex: 0 0 104px; border-radius: 10px; overflow: hidden; background: var(--surface-2); border: 1px solid var(--line); display: grid; place-items: center; }
.award-photo img { width: 100%; height: 100%; object-fit: cover; }
.award-photo.wide { width: 100%; height: 168px; flex: none; }
.award-photo.square { width: 96px; height: 96px; flex: 0 0 96px; }
.foto-hero { width: 100%; height: 330px; border-radius: var(--r-sm); border: 1px solid var(--line); background: var(--surface-2); display: grid; place-items: center; overflow: hidden; }
.foto-hero img { width: 100%; height: 100%; object-fit: cover; }

/* ---------- agenda & folder lomba ---------- */
.agenda-card { display: flex; flex-direction: column; gap: 14px; }
.agenda-top { display: flex; gap: 16px; align-items: flex-start; }
.date-chip {
  flex: 0 0 74px; width: 74px; text-align: center; border-radius: var(--r-sm);
  border: 1px solid var(--line-2); background: var(--surface-2); padding: 8px 4px;
}
.date-chip b { display: block; font-family: var(--serif); font-size: 1.5rem; line-height: 1; color: var(--pine); }
.date-chip span { display: block; font-size: .74rem; text-transform: uppercase; letter-spacing: .06em; color: var(--txt-muted); margin-top: 4px; }
.date-chip i { display: block; font-style: normal; font-size: .72rem; color: var(--clay); margin-top: 6px; font-weight: 600; }
.agenda-main { min-width: 0; flex: 1; }
.agenda-main h3 { margin: 0 0 6px; }
.agenda-meta { display: flex; gap: 8px; flex-wrap: wrap; color: var(--txt-muted); font-size: .85rem; margin-bottom: 10px; }
.agenda-tags { display: flex; gap: 8px; flex-wrap: wrap; }

.progress { position: relative; height: 9px; min-width: 110px; border-radius: 999px; background: var(--surface-3); border: 1px solid var(--line); overflow: hidden; }
.progress > span { display: block; height: 100%; background: var(--clay); transition: width .3s; }
.progress.separuh > span { background: var(--amber); }
.progress.penuh > span { background: var(--sage); }
.progress-line { display: flex; align-items: center; gap: 12px; }
.progress-line .progress { flex: 1; }
.progress-line .num { font-size: .84rem; color: var(--txt-soft); font-variant-numeric: tabular-nums; white-space: nowrap; }

.progress-box { border: 1px solid var(--line); background: var(--surface-2); border-radius: var(--r-sm); padding: 14px 16px; }
.progress-big { display: flex; align-items: center; gap: 16px; }
.progress-big .pct { font-family: var(--serif); font-size: 2.1rem; line-height: 1; color: var(--pine); font-variant-numeric: tabular-nums; }
.progress-counts { display: flex; gap: 18px; flex-wrap: wrap; margin-top: 12px; }
.progress-counts div { font-size: .84rem; color: var(--txt-soft); }
.progress-counts b { display: block; font-family: var(--serif); font-size: 1.15rem; color: var(--ink); }

.kat-row { display: grid; grid-template-columns: 1fr 130px 68px; gap: 12px; align-items: center; padding: 10px 0; border-bottom: 1px solid var(--line-ctx); }
.kat-row:last-child { border-bottom: 0; }
.kat-row .kat-nama { font-size: .92rem; color: var(--txt); }
.kat-row .kat-angka { text-align: right; font-size: .84rem; color: var(--txt-muted); font-variant-numeric: tabular-nums; }

.anchor-nav { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 18px; }
.anchor-nav a { font-size: .82rem; padding: 5px 11px; border-radius: 999px; border: 1px solid var(--line-2); color: var(--txt-soft); }
.anchor-nav a:hover { border-color: var(--pine); color: var(--pine); text-decoration: none; }

.checklist { display: grid; gap: 10px; }
.ck { display: flex; gap: 13px; align-items: flex-start; padding: 12px 14px; background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-sm); }
.ck-ic { width: 22px; height: 22px; flex: 0 0 22px; margin-top: 2px; border-radius: 6px; border: 1.5px solid var(--line-2); display: grid; place-items: center; font-size: .72rem; color: var(--muted); background: var(--surface); }
.ck.selesai { background: var(--ok-soft); border-color: #cfe0d2; }
.ck.selesai .ck-ic { background: var(--sage); border-color: var(--sage); color: #fff; }
.ck.jalan { background: var(--amber-soft); border-color: #eadcb8; }
.ck.jalan .ck-ic { background: #fff; border-color: var(--amber); color: var(--amber); }
.ck-txt { min-width: 0; flex: 1; }
.ck-txt strong { display: block; font-weight: 600; }
.ck.selesai .ck-txt strong { color: var(--ink-soft); }
.ck-txt small { color: var(--txt-muted); }
.ck-kanan { display: flex; flex-direction: column; align-items: flex-end; gap: 6px; }
.ck-kat { font-size: .74rem; letter-spacing: .05em; text-transform: uppercase; color: var(--txt-muted); }

.berkas-list { display: grid; gap: 12px; }
.berkas { display: flex; align-items: center; gap: 15px; padding: 14px 16px; background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-sm); }
.berkas-txt { min-width: 0; flex: 1; }
.berkas-txt strong { display: block; }
.berkas-txt small { color: var(--txt-muted); }

.timeline { position: relative; padding-left: 22px; border-left: 1px solid var(--line-ctx); }
.tl-item { position: relative; margin-bottom: 18px; }
.tl-item::before { content: ''; position: absolute; left: -28px; top: 22px; width: 9px; height: 9px; border-radius: 50%; background: var(--sage); border: 2px solid var(--bg); }
.tl-date { font-size: .82rem; color: var(--eb); letter-spacing: .02em; font-weight: 600; }
.tl-body { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; }
.tl-body h3 { margin: 6px 0 6px; }

/* ---------- produk ---------- */
.prod { display: flex; flex-direction: column; overflow: hidden; padding: 0; }
.thumb-tile { display: grid; place-items: center; background: var(--surface-2); color: var(--acc, var(--pine)); }
.prod .thumb-tile { height: 165px; border-bottom: 1px solid var(--line); }
.prod-img { height: 170px; background: var(--surface-2); display: grid; place-items: center; border-bottom: 1px solid var(--line); overflow: hidden; }
.prod-img img { width: 100%; height: 100%; object-fit: cover; }
.prod-body { padding: 18px; display: flex; flex-direction: column; gap: 10px; flex: 1; }
.prod-body h3 { margin: 0; font-size: 1.02rem; }
.prod-kat { font-size: .74rem; letter-spacing: .06em; text-transform: uppercase; color: var(--clay); font-weight: 700; }
.price { font-size: 1.1rem; font-weight: 700; color: var(--txt); font-variant-numeric: tabular-nums; }
.prod-foot { margin-top: auto; display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.stok { font-size: .79rem; color: var(--txt-muted); }

/* ---------- artikel / materi ---------- */
.yt { position: relative; border-radius: var(--r-sm); overflow: hidden; border: 1px solid var(--line); aspect-ratio: 16 / 9; background: #000; }
.yt iframe { width: 100%; height: 100%; border: 0; display: block; }
.prose { color: var(--txt-soft); max-width: 72ch; }
.prose h3, .prose h4 { margin-top: 1.6em; color: var(--head); }
.prose ul { padding-left: 20px; }
.prose li { margin-bottom: 6px; color: var(--txt-soft); }
.prose ul.ol { list-style: decimal; }
.artikel-card h3 { margin-bottom: 6px; }
.artikel-card .ringkas { color: var(--txt-soft); font-size: .92rem; }
.materi-thumb { height: 128px; border-radius: var(--r-sm); border: 1px solid var(--line); margin-bottom: 14px; }
.play-badge { display: inline-flex; align-items: center; gap: 7px; font-size: .81rem; color: var(--clay); }

/* ---------- panel: toolbars ---------- */
.toolbar { display: flex; gap: 12px; flex-wrap: wrap; align-items: center; margin-bottom: 20px; }
.toolbar.card { padding: 14px 16px; }
.toolbar form { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; margin: 0; }
.toolbar input[type=search], .toolbar select { width: auto; min-width: 190px; }

.empty { padding: 40px 22px; text-align: center; color: var(--txt-muted); border: 1px dashed var(--line-2); border-radius: var(--r); background: var(--surface-2); }
.empty .big { font-size: 2rem; display: block; margin-bottom: 8px; opacity: .7; }

/* ---------- keranjang / checkout ---------- */
.cart-row { display: flex; align-items: center; gap: 16px; padding: 16px 0; border-bottom: 1px solid var(--line); }
.cart-row:last-child { border-bottom: 0; }
.qty { display: flex; align-items: center; gap: 8px; }
.qty input { width: 74px; text-align: center; }
.summary dl { display: flex; justify-content: space-between; gap: 12px; margin: 0 0 10px; }
.summary dt { color: var(--txt-soft); font-size: .9rem; }
.summary dd { margin: 0; font-variant-numeric: tabular-nums; }
.summary .total { border-top: 1px solid var(--line-2); padding-top: 14px; margin-top: 14px; }
.summary .total dt, .summary .total dd { font-size: 1.05rem; color: var(--ink); font-weight: 700; }

.login-shell { max-width: 440px; margin: 30px auto 0; }
.notice-box { padding: 14px 16px; border-radius: var(--r-sm); border: 1px solid var(--line-2); background: var(--surface-2); font-size: .88rem; color: var(--txt-soft); }

/* ---------- ilustrasi ---------- */
.ilustrasi { display: block; flex: 0 0 auto; }
.acc-pine { color: var(--pine); --acc: var(--pine); --acc-soft: var(--pine-soft); }
.acc-sage { color: var(--sage); --acc: var(--sage); --acc-soft: var(--sage-soft); }
.acc-clay { color: var(--clay); --acc: var(--clay); --acc-soft: var(--clay-soft); }
.acc-amber { color: var(--amber); --acc: var(--amber); --acc-soft: var(--amber-soft); }
.acc-ink { color: var(--ink-soft); --acc: var(--ink-soft); --acc-soft: var(--surface-2); }
.ilustrasi-tile { width: 58px; height: 58px; flex: 0 0 58px; border-radius: 12px; display: grid; place-items: center; background: var(--acc-soft); border: 1px solid var(--line); color: var(--acc); }
.ilustrasi-tile.sm { width: 44px; height: 44px; flex-basis: 44px; border-radius: 10px; }
.ilustrasi-tile.lg { width: 72px; height: 72px; flex-basis: 72px; border-radius: 14px; }

.area-tile { display: flex; align-items: center; gap: 16px; padding: 16px; background: var(--surface); border: 1px solid var(--line); border-radius: var(--r); }
.area-tile h3 { margin: 0 0 2px; font-size: 1rem; }
.area-tile p { margin: 0; font-size: .87rem; color: var(--txt-muted); }
.area-ic { color: var(--acc); }

/* ---------- galeri slot gambar (panel) ---------- */
.slot-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 20px; }
.slot { display: flex; flex-direction: column; gap: 12px; padding: 18px; background: var(--surface); border: 1px solid var(--line); border-radius: var(--r); }
.slot-preview { height: 132px; border-radius: var(--r-sm); border: 1px solid var(--line); background: var(--surface-2); display: grid; place-items: center; overflow: hidden; color: var(--pine); }
.slot-preview img { width: 100%; height: 100%; object-fit: cover; }
.slot h3 { margin: 0; font-size: 1rem; }
.slot p { margin: 0; font-size: .85rem; color: var(--txt-muted); }

/* ---------- footer (gelap) ---------- */
.foot { border-top: 1px solid var(--line-2); background: var(--surface-2); padding: 42px 0 22px; margin-top: 34px; color: var(--on); }
.foot-in { display: grid; grid-template-columns: 1.6fr 1fr 1fr; gap: 28px; }
.foot-col h4 { font-family: Inter, system-ui, sans-serif; font-size: .78rem; letter-spacing: .06em; text-transform: uppercase; color: var(--on-head); margin-bottom: 12px; }
.foot-col a { display: block; color: var(--on-soft); font-size: .9rem; padding: 3px 0; }
.foot-col a:hover { color: var(--pine); }
.foot-col p { color: var(--on-muted); font-size: .88rem; max-width: 42ch; }
.brand-foot { margin-bottom: 12px; }
.foot-bottom { display: flex; justify-content: space-between; gap: 14px; flex-wrap: wrap; margin-top: 30px; padding-top: 18px; border-top: 1px solid var(--on-line); color: var(--on-muted); font-size: .83rem; }

/* ---------- responsif ---------- */
@media (max-width: 960px) {
  .hero-in, .split, .foot-in, .page-banner { grid-template-columns: 1fr; }
  .page-banner-art { justify-self: start; max-width: 100%; }
  .grid-4, .grid-3 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .nav {
    position: absolute; top: 100%; left: 0; right: 0; flex-direction: column; align-items: stretch;
    gap: 2px; padding: 12px 16px 18px; background: var(--chrome); border-bottom: 1px solid var(--on-line); display: none;
  }
  .nav.open { display: flex; }
  .nav a { border-radius: var(--r-sm); padding: 11px 14px; }
  .nav-toggle { display: grid; gap: 4px; margin-left: auto; padding: 10px; background: var(--surface); border: 1px solid var(--line-2); border-radius: var(--r-sm); cursor: pointer; }
  .nav-toggle span { display: block; width: 18px; height: 2px; background: var(--on); }
  .topbar-in { position: relative; }
  .nav-actions { margin-left: 0; }
}
@media (max-width: 640px) {
  body { font-size: 15px; }
  h1 { font-size: 1.62rem; }
  .hero h1 { font-size: 1.75rem; }
  .grid-4, .grid-3, .grid-2, .form-grid { grid-template-columns: 1fr; }
  .hero-in { padding: 22px; }
  .page-banner { padding: 20px; }
  .card { padding: 18px; }
  .cart-row { flex-wrap: wrap; }
  .page { padding-top: 20px; }
  .kat-row { grid-template-columns: 1fr 84px 52px; gap: 8px; }
}

/* ==========================================================================
   Panel: tata letak dua kolom — judul & menu di kiri, isi tab di kanan
   ========================================================================== */

.panel-shell {
  display: grid;
  grid-template-columns: 252px minmax(0, 1fr);
  gap: 30px;
  align-items: start;
}

.panel-side {
  min-width: 0;
  position: sticky;
  top: 86px;
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--r);
  box-shadow: var(--shadow-soft);
  padding: 18px 16px;
}
.panel-side h1 { font-size: 1.42rem; margin: 0 0 6px; }
.panel-side .sub { color: var(--txt-muted); font-size: .87rem; margin: 0 0 14px; }
.panel-side .eyebrow { margin-bottom: 6px; }

/* Blok identitas: setelah masuk, judul panel = nama orang yang login */
.panel-id { display: flex; align-items: center; gap: 12px; margin-bottom: 12px; }
.panel-id .avatar.lg { width: 52px; height: 52px; flex-basis: 52px; font-size: 1.2rem; }
.panel-id-txt { min-width: 0; display: flex; flex-direction: column; line-height: 1.2; }
.panel-id-txt .eyebrow { margin-bottom: 2px; }
.panel-id-txt h1 {
  font-size: 1.28rem; margin: 0; line-height: 1.2;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.panel-id-txt small { font-size: .76rem; color: var(--txt-muted); margin-top: 2px; }
.panel-profil-link { display: inline-block; font-size: .78rem; margin-bottom: 14px; }

/* Nama tab yang sedang dibuka (tetap di kolom kiri) */
.panel-tab-judul {
  font-family: var(--serif); font-weight: 700; font-size: 1.02rem; color: var(--txt);
  margin: 0 0 4px; padding-top: 12px; border-top: 1px solid var(--line-ctx);
}

.panel-nav { display: grid; gap: 2px; }

/* label kelompok menu (Dashboard / Akademik / Toko / Setting / Akun) */
.panel-nav-grup {
  display: block; margin: 12px 0 4px; padding: 0 11px;
  font-size: .7rem; letter-spacing: .08em; text-transform: uppercase;
  font-weight: 700; color: var(--txt-muted);
}
.panel-nav > .panel-nav-grup:first-child { margin-top: 0; }
.panel-nav a {
  display: flex; align-items: center; gap: 10px;
  padding: 9px 11px; border-radius: var(--r-sm);
  color: var(--txt-soft); font-size: .89rem; font-weight: 600;
  border: 1px solid transparent;
}
.panel-nav a:hover { background: var(--surface-2); border-color: var(--line); color: var(--pine); text-decoration: none; }
.panel-nav a .ilustrasi { opacity: .85; }
.panel-nav a.on {
  background: var(--pine-soft); border-color: var(--pine-line); color: var(--pine);
}
.panel-nav a.on .ilustrasi { opacity: 1; }

.panel-keluar { margin-top: 14px; width: 100%; }

.panel-main { min-width: 0; }
/* di dalam kolom kanan, bagian atas tidak perlu jarak besar lagi */
.panel-main > .section-head:first-child { margin-top: 0; }
/* Daftar/tabel memakai lebar kolom penuh; form pengelolaan turun ke bawahnya
   supaya tabel (min-width 640px) tidak perlu di-scroll mendatar. */
.panel-main .split { grid-template-columns: minmax(0, 1fr); gap: 22px; }
.panel-main .split > aside { max-width: 620px; }

@media (max-width: 960px) {
  /* Satu kolom: menu menumpuk di atas isi. min-width:0 wajib supaya daftar menu
     tidak memaksa kolom jadi selebar seluruh menu. */
  .panel-shell { grid-template-columns: minmax(0, 1fr); gap: 20px; }
  .panel-side { position: static; min-width: 0; }
  .panel-side h1 { font-size: 1.3rem; }
  .panel-keluar { width: auto; }

  /* Kategori menu di kolom kiri jadi accordion (bukan flyout) di layar sempit. */
  .panel-side .pnav-isi {
    position: static; min-width: 0; margin: 4px 0 4px 10px;
    display: none; border: 0; border-left: 1px solid var(--line); border-radius: 0; box-shadow: none; padding: 0 0 0 8px;
  }
  .panel-side .pnav-grup.terbuka > .pnav-isi { display: block; }
  .panel-side .pnav-grup:hover > .pnav-isi { display: none; }
  .panel-side .pnav-grup.terbuka:hover > .pnav-isi { display: block; }
  .panel-side .pnav-caret { transform: rotate(90deg); }
  .panel-side .pnav-grup.terbuka .pnav-caret { transform: rotate(-90deg); }
}

/* ==========================================================================
   Pengaturan (panel) & komponen baru
   ========================================================================== */

.form-catatan {
  padding: 12px 16px; margin-bottom: 20px; font-size: .88rem;
  background: var(--surface-2); border: 1px solid var(--line); border-radius: var(--r-sm);
  color: var(--txt-soft);
}

/* navigasi bagian di dalam halaman (anchor), bukan tab halaman */
.tabs { display: flex; gap: 6px; flex-wrap: wrap; margin: 0 0 22px; }
.tabs a {
  padding: 7px 14px; border-radius: 999px; font-size: .85rem; font-weight: 600;
  color: var(--txt-soft); background: var(--surface); border: 1px solid var(--line-2);
}
.tabs a:hover { color: var(--pine); border-color: var(--pine); text-decoration: none; }
.tabs a.on { color: #fff; background: var(--pine); border-color: var(--pine); }

.form-grid .field.full { grid-column: 1 / -1; }

/* ---------- QRIS ---------- */
.qris-box {
  display: grid; grid-template-columns: auto 1fr; gap: 20px; align-items: start;
  padding: 16px; border: 1px solid var(--line); border-radius: var(--r-sm); background: var(--surface-2);
}
.qris-gambar {
  width: 190px; height: 190px; border-radius: 10px; overflow: hidden;
  background: #fff; border: 1px solid var(--line-2);
  display: grid; place-items: center; padding: 8px;
}
.qris-gambar img { width: 100%; height: 100%; object-fit: contain; }
.qris-info dl { display: flex; gap: 10px; margin: 0 0 6px; font-size: .88rem; }
.qris-info dt { color: var(--txt-muted); min-width: 96px; }
.qris-info dd { margin: 0; font-weight: 600; }
.qris-kosong { color: var(--txt-muted); font-size: .85rem; text-align: center; padding: 20px; }

.metode-pilih { display: grid; gap: 12px; }
.metode-opsi {
  display: flex; gap: 12px; align-items: flex-start; padding: 14px;
  border: 1px solid var(--line-2); border-radius: var(--r-sm); background: var(--surface);
  cursor: pointer;
}
.metode-opsi input { width: auto; margin-top: 3px; }
.metode-opsi:hover { border-color: var(--pine); }
.metode-opsi.terpilih { border-color: var(--pine); background: var(--pine-soft); }
.metode-opsi strong { display: block; }
.metode-opsi small { color: var(--txt-muted); }

@media (max-width: 640px) {
  .qris-box { grid-template-columns: 1fr; }
  .qris-gambar { width: 100%; max-width: 260px; height: auto; aspect-ratio: 1 / 1; }
}

/* ---------- foto anggota (diperbesar) ---------- */
.avatar.big {
  width: 92px; height: 92px; flex: 0 0 92px;
  font-size: 2rem; border-radius: 20px;
  box-shadow: 0 6px 16px rgba(32, 74, 116, .14);
}
.member:has(.avatar.big) { gap: 18px; align-items: center; }
@media (max-width: 640px) {
  .avatar.big { width: 76px; height: 76px; flex-basis: 76px; font-size: 1.6rem; border-radius: 16px; }
}

/* blok instruksi per metode pembayaran (ditampilkan oleh JS tanpa submit) */
.metode-blok { display: none; }
.metode-blok.aktif { display: block; }

/* ==========================================================================
   Pojok kanan atas: nama akun + dropdown menu panel
   ========================================================================== */

.akun-menu { position: relative; }

.akun-toggle {
  display: flex; align-items: center; gap: 9px;
  padding: 5px 12px 5px 6px;
  background: var(--surface); border: 1px solid var(--line-2); border-radius: 999px;
  font: inherit; font-size: .88rem; font-weight: 600; color: var(--ink);
  cursor: pointer; max-width: 230px;
}
.akun-toggle:hover { border-color: var(--pine); color: var(--pine); background: var(--pine-soft); }
.akun-toggle .avatar.sm { width: 28px; height: 28px; flex: 0 0 28px; font-size: .78rem; }
.akun-nama { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.akun-caret { flex: 0 0 auto; opacity: .7; transition: transform .18s; }
.akun-menu.terbuka .akun-caret { transform: rotate(180deg); }
.akun-menu.terbuka .akun-toggle { border-color: var(--pine); background: var(--pine-soft); color: var(--pine); }

.akun-dropdown {
  position: absolute; top: calc(100% + 10px); right: 0; z-index: 60;
  width: 268px; max-height: min(78vh, 640px); overflow-y: auto;
  background: var(--surface); border: 1px solid var(--line);
  border-radius: var(--r); box-shadow: var(--shadow);
  padding: 12px;
}
.akun-dropdown[hidden] { display: none; }

.akun-head {
  display: flex; align-items: center; gap: 11px;
  padding: 10px 11px; margin-bottom: 10px;
  background: var(--surface-2); border: 1px solid var(--line); border-radius: var(--r-sm);
}
.akun-head .avatar { width: 40px; height: 40px; flex: 0 0 40px; font-size: .95rem; }
.akun-head-txt { min-width: 0; display: flex; flex-direction: column; line-height: 1.25; }
.akun-head-txt strong { font-size: .9rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.akun-head-txt small { font-size: .75rem; color: var(--muted); }

.akun-group {
  display: block; padding: 8px 11px 4px;
  font-size: .72rem; letter-spacing: .06em; text-transform: uppercase;
  color: var(--muted); font-weight: 700;
}

/* item menu di dalam dropdown (memakai markup .panel-nav yang sama) */
.akun-dropdown .panel-nav { display: grid; gap: 2px; }
.akun-dropdown .panel-nav-grup {
  margin: 12px 0 4px; padding: 0 10px;
  font-size: .68rem; letter-spacing: .07em;
}
.akun-dropdown .panel-nav a {
  display: flex; align-items: center; gap: 10px;
  padding: 8px 10px; border-radius: var(--r-sm);
  color: var(--ink-soft); font-size: .87rem; font-weight: 600; border: 1px solid transparent;
}
.akun-dropdown .panel-nav a:hover { background: var(--surface-2); border-color: var(--line); color: var(--pine); text-decoration: none; }
.akun-dropdown .panel-nav a.on { background: var(--pine-soft); border-color: var(--pine-line); color: var(--pine); }

.akun-item {
  display: flex; align-items: center; gap: 10px;
  padding: 8px 10px; border-radius: var(--r-sm);
  color: var(--ink-soft); font-size: .87rem; font-weight: 600;
  border: 1px solid transparent;
}
.akun-item:hover { background: var(--surface-2); border-color: var(--line); color: var(--pine); text-decoration: none; }
.akun-pemisah { display: block; height: 1px; margin: 10px 6px 6px; background: var(--line); }
.akun-item-keluar { color: var(--bad); }
.akun-item-keluar:hover { background: var(--bad-soft); border-color: #e6cbc6; color: var(--bad); }

@media (max-width: 960px) {
  .akun-nama { max-width: 88px; }
}
/* Layar sempit: tombol akun jadi bulat (foto saja) supaya baris atas tidak meluber */
@media (max-width: 720px) {
  .akun-nama { display: none; }
  .akun-toggle { padding: 5px; gap: 0; }
  .akun-caret { display: none; }
  .brand-txt small { display: none; }
}
@media (max-width: 640px) {
  .akun-dropdown { width: min(290px, calc(100vw - 32px)); }
}

/* ==========================================================================
   Akun pembeli & materi berbayar
   ========================================================================== */

.pesanan-baris {
  display: flex; align-items: center; gap: 14px; flex-wrap: wrap;
  padding: 14px 0; border-bottom: 1px solid var(--line);
}
.pesanan-baris:last-of-type { border-bottom: 0; }

/* kotak pengunci isi materi berbayar */
.konten-kunci {
  margin-top: 26px; padding: 26px 22px; text-align: center;
  border: 1px dashed var(--line-2); border-radius: var(--r);
  background: var(--surface-2);
}
.konten-kunci .ilustrasi { margin: 0 auto 12px; }
.konten-kunci h3 { margin: 0 0 8px; }
.konten-kunci .btn { margin: 6px 4px 0; }

/* pratinjau yang diburamkan halus di ujung potongan (isyarat terkunci) */
.prose + .konten-kunci { position: relative; }

/* label harga di kartu materi */
.artikel-card .badge-warn { font-weight: 700; }

/* ==========================================================================
   Dropdown "Masuk" (2 sub tab) & pop up kredensial akun
   ========================================================================== */

.masuk-menu .masuk-toggle { display: inline-flex; align-items: center; gap: 7px; }
.masuk-dropdown { width: 284px; }

.masuk-opsi {
  display: flex; align-items: center; gap: 12px;
  padding: 11px 11px; border-radius: var(--r-sm);
  border: 1px solid transparent; color: var(--ink);
}
.masuk-opsi:hover { background: var(--surface-2); border-color: var(--line); color: var(--pine); text-decoration: none; }
.masuk-opsi strong { display: block; font-size: .92rem; }
.masuk-opsi small { display: block; color: var(--muted); font-size: .78rem; }

/* ---------- modal pop up ---------- */
.modal-lapisan {
  position: fixed; inset: 0; z-index: 90;
  background: rgba(12, 30, 50, .42);
  display: grid; place-items: center; padding: 22px;
  overflow-y: auto;
}
.modal {
  position: relative; width: 100%; max-width: 470px;
  background: var(--surface); border: 1px solid var(--line);
  border-radius: var(--r); box-shadow: var(--shadow);
  padding: 28px 26px 24px;
}
.modal h2 { margin: 0 0 10px; font-size: 1.28rem; }
.modal-ikon {
  width: 62px; height: 62px; border-radius: 16px; margin-bottom: 16px;
  display: grid; place-items: center;
  background: var(--pine-soft); border: 1px solid var(--pine-line); color: var(--pine);
}
.modal-tutup {
  position: absolute; top: 10px; right: 14px;
  font-size: 1.6rem; line-height: 1; color: var(--muted);
  text-decoration: none; padding: 4px 6px; border-radius: 8px;
}
.modal-tutup:hover { background: var(--surface-2); color: var(--ink); text-decoration: none; }
.modal-aksi { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 20px; }

.kredensial {
  display: grid; gap: 10px; margin: 16px 0 12px;
  padding: 14px 16px; border-radius: var(--r-sm);
  background: var(--surface-2); border: 1px dashed var(--pine-line);
}
.kredensial div { display: flex; align-items: center; justify-content: space-between; gap: 14px; flex-wrap: wrap; }
.kredensial span { font-size: .8rem; color: var(--muted); }
.kredensial strong { font-size: .98rem; color: var(--ink); word-break: break-all; }

/* ==========================================================================
   Bagian dashboard panel yang bisa dilipat (drop menu)
   ========================================================================== */

.psec-toolbar { display: flex; gap: 8px; flex-wrap: wrap; justify-content: flex-end; margin-bottom: 14px; }

.psec {
  background: var(--surface); border: 1px solid var(--line); border-radius: var(--r);
  box-shadow: var(--shadow-soft); margin-bottom: 14px; overflow: hidden;
}
.psec[open] { box-shadow: var(--shadow-soft); }

.psec-head {
  display: flex; align-items: center; gap: 12px;
  padding: 15px 18px; cursor: pointer; list-style: none;
  font-family: var(--serif); font-weight: 700; font-size: 1.05rem; color: var(--head);
}
.psec-head::-webkit-details-marker { display: none; }
.psec-head::marker { content: ''; }
.psec-head:hover { background: var(--surface-2); color: var(--pine); }

.psec-ikon {
  width: 38px; height: 38px; flex: 0 0 38px; border-radius: 10px;
  display: grid; place-items: center;
  background: var(--pine-soft); border: 1px solid var(--pine-line); color: var(--pine);
}
.psec-judul { flex: 1; min-width: 0; }
.psec-meta { font-family: Inter, system-ui, sans-serif; font-weight: 500; font-size: .8rem; color: var(--txt-muted); }
.psec-caret { flex: 0 0 auto; opacity: .65; transition: transform .2s; }
.psec[open] .psec-caret { transform: rotate(180deg); }

.psec-body { padding: 4px 18px 20px; border-top: 1px solid var(--line); }

/* isi bagian: jarak atas tidak perlu besar karena sudah ada garis pemisah */
.psec-body > .section-head:first-child { margin-top: 14px; }
.psec-body > .grid:first-child, .psec-body > .table-wrap:first-child { margin-top: 14px; }

/* di dalam bagian yang dilipat, kartu statistik tidak perlu bayangan ganda */
.psec-body .grid .card { box-shadow: none; }

@media (max-width: 640px) {
  .psec-meta { display: none; }
  .psec-head { padding: 13px 14px; font-size: .98rem; }
  .psec-body { padding: 4px 14px 16px; }
}

/* ==========================================================================
   Kategori menu kolom kiri panel: dropdown saat di-hover (ringkas)
   ========================================================================== */

.panel-nav-hover { display: grid; gap: 3px; }

.pnav-grup { position: relative; }

.pnav-trigger {
  width: 100%; display: flex; align-items: center; gap: 8px;
  padding: 9px 11px; border-radius: var(--r-sm); border: 1px solid transparent;
  background: transparent; font: inherit; text-align: left; cursor: pointer;
  color: var(--txt-soft);
}
.pnav-trigger:hover { background: var(--surface-2); border-color: var(--line); color: var(--pine); }
.pnav-grup.aktif > .pnav-trigger { background: var(--pine-soft); border-color: var(--pine-line); color: var(--pine); }
.pnav-grup.terbuka > .pnav-trigger { background: var(--surface-2); border-color: var(--line); color: var(--pine); }

.pnav-nama-ket { font-size: .89rem; font-weight: 700; }
.pnav-aktif-nama { font-size: .78rem; color: var(--txt-muted); font-weight: 500; }
.pnav-caret { margin-left: auto; flex: 0 0 auto; opacity: .6; transition: transform .18s; }
.pnav-grup.terbuka > .pnav-trigger .pnav-caret { transform: rotate(90deg); }

.pnav-isi {
  position: absolute; top: -6px; left: calc(100% - 4px); z-index: 70;
  min-width: 216px; display: none; padding: 8px;
  background: var(--surface); border: 1px solid var(--line);
  border-radius: var(--r); box-shadow: var(--shadow);
  /* jaga-jaga untuk layar pendek: dropdown tidak terpotong di luar layar */
  max-height: min(70vh, 560px); overflow-y: auto;
}
/* terbuka saat di-hover, saat fokus keyboard di dalamnya, atau saat diklik */
.pnav-grup:hover > .pnav-isi,
.pnav-grup:focus-within > .pnav-isi,
.pnav-grup.terbuka > .pnav-isi { display: block; }

.pnav-isi a {
  display: flex; align-items: center; gap: 10px;
  padding: 8px 10px; border-radius: var(--r-sm); border: 1px solid transparent;
  color: var(--ink-soft); font-size: .87rem; font-weight: 600;
}
.pnav-isi a:hover { background: var(--surface-2); border-color: var(--line); color: var(--pine); text-decoration: none; }
.pnav-isi a.on { background: var(--pine-soft); border-color: var(--pine-line); color: var(--pine); }

/* sedikit isyarat visual bahwa kategorinya bisa dibuka */
.panel-nav-hover .pnav-grup.aktif > .pnav-trigger::after {
  content: ''; position: absolute; left: 0; top: 8px; bottom: 8px; width: 3px;
  border-radius: 0 3px 3px 0; background: var(--pine);
}

/* form kecil untuk memasukkan kode pesanan (hubungkan pesanan lama) */
.form-inline-kode { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; margin-top: 12px; }
.form-inline-kode input[type=text] { flex: 1 1 220px; max-width: 320px; }

/* ==========================================================================
   Karusel (sorotan beranda & tampilan prestasi)
   ========================================================================== */

.karusel-sect { margin-top: 46px; }
.karusel-sect.polos { margin-top: 0; }

.karusel { position: relative; }
.karusel-track {
  display: flex; gap: 18px; margin: 0; padding: 4px 2px 14px;
  list-style: none; overflow-x: auto; overflow-y: hidden;
  scroll-snap-type: x mandatory; scroll-behavior: smooth;
  scrollbar-width: none;
}
.karusel-track::-webkit-scrollbar { display: none; }
.karusel-track:focus-visible { outline: 2px solid var(--pine); outline-offset: 4px; border-radius: var(--r); }

.karusel-slide { flex: 0 0 100%; scroll-snap-align: center; }
/* Di layar lebar, jumlah kartu per tampilan mengikuti data-per (1–3). */
@media (min-width: 900px) {
  .karusel[data-per="1"] .karusel-slide { flex: 0 0 100%; }
  .karusel[data-per="2"] .karusel-slide { flex: 0 0 calc((100% - 18px) / 2); }
  .karusel[data-per="3"] .karusel-slide,
  .karusel:not([data-per]) .karusel-slide { flex: 0 0 calc((100% - 36px) / 3); }
}

.krs-kartu {
  height: 100%; display: flex; flex-direction: column;
  background: var(--surface); border: 1px solid var(--line); border-radius: var(--r);
  box-shadow: var(--shadow-soft); overflow: hidden;
}
.krs-media { height: 168px; background: var(--surface-2); display: grid; place-items: center; color: var(--acc, var(--pine)); overflow: hidden; }
.krs-media img { width: 100%; height: 100%; object-fit: cover; }
.krs-txt { padding: 18px; display: flex; flex-direction: column; gap: 8px; flex: 1; }
.krs-label {
  align-self: flex-start; font-size: .72rem; font-weight: 700; letter-spacing: .06em; text-transform: uppercase;
  color: var(--clay-text); background: var(--clay-soft); border: 1px solid #eddbd2; border-radius: 999px; padding: 3px 10px;
}
.krs-txt h3 { margin: 0; font-size: 1.08rem; }
.krs-teks { margin: 0; color: var(--txt-soft); font-size: .92rem; }
.krs-meta { margin: 0; color: var(--txt-muted); font-size: .82rem; }
.krs-txt .btn { margin-top: auto; align-self: flex-start; }

.krs-nav {
  position: absolute; top: calc(50% - 22px); z-index: 3;
  width: 40px; height: 40px; border-radius: 50%;
  display: grid; place-items: center; cursor: pointer;
  background: var(--surface); color: var(--ink);
  border: 1px solid var(--line-2); box-shadow: var(--shadow-soft);
}
.krs-nav:hover { border-color: var(--pine); color: var(--pine); background: var(--pine-soft); }
.krs-prev { left: -8px; }
.krs-next { right: -8px; }
.krs-nav[disabled] { opacity: .35; cursor: default; }

.krs-bawah { display: flex; align-items: center; gap: 14px; justify-content: center; margin-top: 6px; }
.krs-dots { display: flex; gap: 7px; flex-wrap: wrap; justify-content: center; }
.krs-dot {
  width: 9px; height: 9px; padding: 0; border-radius: 50%; cursor: pointer;
  background: var(--line-2); border: 0;
}
.krs-dot.on { background: var(--pine); transform: scale(1.25); }
.krs-jeda {
  font: inherit; font-size: .78rem; font-weight: 600; cursor: pointer;
  color: var(--txt-muted); background: transparent; border: 1px solid var(--line-2);
  border-radius: 999px; padding: 4px 12px;
}
.krs-jeda:hover { color: var(--pine); border-color: var(--pine); }
.krs-jeda[hidden] { display: none; }

/* karusel prestasi: kartu-kartunya memakai gaya kartu prestasi yang sudah ada */
.karusel .prestasi-card { height: 100%; }
.karusel-kartu-isi { display: flex; flex-direction: column; gap: 12px; height: 100%; }

@media (max-width: 640px) {
  .krs-nav { display: none; } /* di HP cukup di-swipe */
  .krs-media { height: 150px; }
}

/* ==========================================================================
   Pop up pengumuman (Tampilan Pembeli)
   ========================================================================== */

.popup-lapisan[hidden] { display: none; }
.popup-lapisan { animation: popupLatar .22s ease-out; }
.popup-modal {
  max-width: 520px; padding: 0; overflow: hidden;
  animation: popupMuncul .28s cubic-bezier(.2, .9, .3, 1.1);
}
@keyframes popupLatar { from { opacity: 0; } to { opacity: 1; } }
@keyframes popupMuncul { from { opacity: 0; transform: translateY(14px) scale(.97); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) {
  .popup-lapisan, .popup-modal { animation: none; }
}

.popup-gambar { height: 190px; overflow: hidden; background: var(--surface-2); border-bottom: 1px solid var(--line); }
.popup-gambar img { width: 100%; height: 100%; object-fit: cover; }
.popup-ilustrasi { display: grid; place-items: center; }
.popup-ilustrasi .ilustrasi-banner { width: 100%; height: 100%; border-radius: 0; background: transparent; }

.popup-isi { padding: 22px 24px 24px; }
.popup-isi h2 { margin: 6px 0 10px; font-size: 1.35rem; }
.popup-isi .modal-aksi { margin-top: 18px; }
.popup-modal .modal-tutup { top: 8px; right: 10px; background: rgba(255, 255, 255, .82); }

@media (max-width: 640px) {
  .popup-gambar { height: 150px; }
  .popup-isi { padding: 18px 18px 20px; }
}

/* ==========================================================================
   Panel tab di atas halaman (mis. pengelolaan folder lomba)
   ========================================================================== */

.tabs-panel {
  background: var(--surface); border: 1px solid var(--line); border-radius: var(--r);
  box-shadow: var(--shadow-soft); margin-bottom: 24px; overflow: hidden;
}

.tabs-panel-bar {
  display: flex; gap: 4px; flex-wrap: wrap;
  padding: 10px 12px; background: var(--surface-2); border-bottom: 1px solid var(--line);
}
.tab-btn {
  display: inline-flex; align-items: center; gap: 9px;
  padding: 9px 15px; border-radius: var(--r-sm);
  border: 1px solid transparent; background: transparent;
  font: inherit; font-size: .89rem; font-weight: 600; color: var(--txt-soft);
  cursor: pointer;
}
.tab-btn:hover { background: var(--surface); border-color: var(--line); color: var(--pine); }
.tab-btn.on {
  background: var(--surface); border-color: var(--pine-line); color: var(--pine);
  box-shadow: 0 1px 2px rgba(32, 74, 116, .08);
}
.tab-btn .ilustrasi { opacity: .8; }
.tab-btn.on .ilustrasi { opacity: 1; }

.tabs-panel-isi { padding: 20px 20px 22px; }
.tab-panel { display: block; }
.tab-panel + .tab-panel { margin-top: 20px; padding-top: 20px; border-top: 1px dashed var(--line-2); }
/* saat JS aktif: hanya panel terpilih yang tampil, pemisahnya tidak perlu */
.tabs-panel.js .tab-panel { display: none; }
.tabs-panel.js .tab-panel.on { display: block; }
.tabs-panel.js .tab-panel + .tab-panel { margin-top: 0; padding-top: 0; border-top: 0; }

.tab-panel-judul { margin: 0 0 6px; font-size: 1.06rem; }
.tab-panel .muted.small { margin-bottom: 16px; }

@media (max-width: 640px) {
  .tabs-panel-bar { gap: 2px; padding: 8px; }
  .tab-btn { padding: 8px 11px; font-size: .84rem; }
  .tab-btn > span { max-width: 150px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .tabs-panel-isi { padding: 16px 14px 18px; }
}

/* ---------- logo dari Pengaturan (pojok kiri atas & footer) ----------
   Tinggi gambar memakai satuan px eksplisit (bukan `height: 100%`): dengan
   persentase, gambar berukuran besar tidak mengikuti kotaknya dan meluber
   (pernah terjadi: gambar 3500x3500 dirender 180x180 di dalam kotak 40px). */
.logo-gambar {
  /* flex-basis bawaan .logo (38px) membuat kotak tidak mengikuti lebar gambar
     yang sebenarnya; pakai auto supaya kotak pas dengan logonya (tanpa meluber). */
  flex: 0 0 auto;
  width: auto; min-width: 0; height: var(--logo-tinggi, 40px);
  background: transparent; box-shadow: none; padding: 0;
}
.logo-gambar img {
  height: var(--logo-tinggi, 40px); width: auto; max-width: 180px;
  object-fit: contain; display: block;
}
.logo-gambar.bundar { width: var(--logo-tinggi, 40px); border-radius: 50%; overflow: hidden; }
.logo-gambar.bundar img { width: var(--logo-tinggi, 40px); height: var(--logo-tinggi, 40px); object-fit: cover; }

/* ---------- logo di HEADER (pojok kiri atas) ----------
   Tinggi tetap 45px dengan rasio aspek dipertahankan, TANPA mengubah tinggi
   navbar: kontribusi logo ke baris flex dijaga tetap sama seperti semula
   (40px di desktop, 36px di HP) lewat margin negatif, sehingga tinggi topbar,
   posisi menu, dan elemen lain persis tidak berubah. */
.topbar .logo-gambar {
  --logo-header: 45px;
  --logo-kontribusi: 40px; /* tinggi yang diberikan ke navbar (tidak diubah) */
  height: var(--logo-header);
  min-width: 0;
  margin-top: calc((var(--logo-kontribusi) - var(--logo-header)) / 2);
  margin-bottom: calc((var(--logo-kontribusi) - var(--logo-header)) / 2);
}
.topbar .logo-gambar img {
  height: var(--logo-header);
  width: auto; max-width: 180px;
}
.topbar .logo-gambar.bundar { width: var(--logo-header); }
.topbar .logo-gambar.bundar img { width: var(--logo-header); height: var(--logo-header); }

@media (max-width: 640px) {
  .logo-gambar { height: calc(var(--logo-tinggi, 40px) * .9); }
  .logo-gambar img { height: calc(var(--logo-tinggi, 40px) * .9); max-width: 132px; }
  .logo-gambar.bundar, .logo-gambar.bundar img { width: calc(var(--logo-tinggi, 40px) * .9); height: calc(var(--logo-tinggi, 40px) * .9); }

  /* di HP kontribusi logo ke navbar semula 36px (= 40px * 0.9) */
  .topbar .logo-gambar { --logo-kontribusi: 36px; }
  .topbar .logo-gambar,
  .topbar .logo-gambar img { height: var(--logo-header); }
  .topbar .logo-gambar { width: auto; }
  .topbar .logo-gambar img { width: auto; max-width: 132px; }
  .topbar .logo-gambar.bundar,
  .topbar .logo-gambar.bundar img { width: var(--logo-header); height: var(--logo-header); }
}
