/* =============================================================================
   JPOWER — UTILITIES & KOMPONEN MODERN
   Dimuat setelah styles.css. Berisi:
   1. Utility jarak (pengganti inline style acak)
   2. Sistem gerak/animasi
   3. Command palette (⌘K)
   4. Alat interaktif (kalkulator oli & interval servis)
   ========================================================================== */

/* =========================================================================
   1. UTILITIES — pakai ini, jangan tulis style="margin-top:14px" lagi
   ====================================================================== */
.mt-1 { margin-top: var(--space-1); }
.mt-2 { margin-top: var(--space-2); }
.mt-3 { margin-top: var(--space-3); }
.mt-4 { margin-top: var(--space-4); }
.mt-5 { margin-top: var(--space-5); }
.mt-6 { margin-top: var(--space-6); }
.mt-7 { margin-top: var(--space-7); }
.mt-8 { margin-top: var(--space-8); }
.mt-auto { margin-top: auto; }
.mb-2 { margin-bottom: var(--space-2); }
.mb-3 { margin-bottom: var(--space-3); }
.mb-4 { margin-bottom: var(--space-4); }
.mb-6 { margin-bottom: var(--space-6); }
.mb-7 { margin-bottom: var(--space-7); }

.stack   { display: flex; flex-direction: column; gap: var(--space-4); }
.stack-2 { display: flex; flex-direction: column; gap: var(--space-2); }
.stack-6 { display: flex; flex-direction: column; gap: var(--space-6); }
.center  { text-align: center; }
.center-x { margin-inline: auto; }
.narrow  { max-width: 760px; }
.narrower { max-width: 620px; }
.flex-1  { flex: 1; }
.row-center { justify-content: center; }
.text-muted { color: var(--muted); }
.text-sm { font-size: var(--text-sm); }

/* Judul dengan aksen gradien — dipakai hemat, untuk kata kunci saja */
.grad {
  background: linear-gradient(100deg, var(--accent) 10%, var(--brand-500) 90%);
  -webkit-background-clip: text; background-clip: text; color: transparent;
}

/* =========================================================================
   2. GERAK / MOTION
   ====================================================================== */

/* Transisi antar halaman (View Transitions API) — didukung browser modern,
   browser lama tetap jalan normal tanpa efek. */
@view-transition { navigation: auto; }

::view-transition-old(root) { animation: vt-out .22s var(--ease-out) both; }
::view-transition-new(root) { animation: vt-in .32s var(--ease-out) both; }
@keyframes vt-out { to { opacity: 0; transform: translateY(-6px); } }
@keyframes vt-in { from { opacity: 0; transform: translateY(10px); } }

/* Header & logo tetap "diam" saat pindah halaman → terasa seperti aplikasi */
.site-header { view-transition-name: site-header; }
.wa-float { view-transition-name: wa-float; }

/* Reveal saat scroll, dengan penundaan bertahap (stagger).
   PENTING: hanya disembunyikan bila JavaScript aktif (class .js dipasang di
   <head>). Tanpa ini, kegagalan JS akan membuat konten hilang permanen. */
.js .reveal {
  opacity: 0;
  transform: translateY(18px);
  transition:
    opacity var(--dur-slow) var(--ease-out),
    transform var(--dur-slow) var(--ease-out);
  transition-delay: var(--reveal-delay, 0ms);
}
.js .reveal.in { opacity: 1; transform: none; }

/* Bar progres baca di bagian atas layar */
.scroll-progress {
  position: fixed; inset-inline: 0; top: 0; height: 3px; z-index: 200;
  background: linear-gradient(90deg, var(--accent), var(--brand-500));
  transform: scaleX(var(--progress, 0));
  transform-origin: 0 50%;
  pointer-events: none;
}

/* Tombol kembali ke atas */
.to-top {
  position: fixed; right: var(--space-5); bottom: calc(var(--space-5) + 74px);
  width: 46px; height: 46px; border-radius: 50%; z-index: 90;
  display: grid; place-items: center;
  background: var(--white); color: var(--brand-700);
  border: 1px solid var(--line); box-shadow: var(--shadow-md);
  opacity: 0; visibility: hidden; transform: translateY(10px);
  transition: opacity var(--dur), transform var(--dur), visibility var(--dur);
}
.to-top.show { opacity: 1; visibility: visible; transform: none; }
.to-top:hover { color: var(--accent-600); border-color: var(--accent); }

/* Kartu bereaksi halus mengikuti kursor */
.tilt { transition: transform var(--dur) var(--ease-out); transform-style: preserve-3d; }

/* Angka statistik yang menghitung naik */
.counter { font-variant-numeric: tabular-nums; }

/* =========================================================================
   3. COMMAND PALETTE (⌘K) — pencarian cepat ala aplikasi software
   ====================================================================== */
.search-trigger {
  display: inline-flex; align-items: center; gap: var(--space-2);
  padding: var(--space-2) var(--space-3);
  border: 1px solid var(--line); border-radius: var(--radius-pill);
  background: var(--surface); color: var(--muted);
  font-size: var(--text-sm); font-family: var(--font-sans);
  transition: border-color var(--dur-fast), color var(--dur-fast);
}
.search-trigger:hover { border-color: var(--brand-600); color: var(--ink); }
.search-trigger svg { width: 16px; height: 16px; }
.kbd {
  font-family: var(--font-mono); font-size: var(--text-xs);
  padding: 2px var(--space-2); border-radius: 6px;
  background: var(--white); border: 1px solid var(--line); color: var(--muted);
}
@media (max-width: 1180px) { .search-trigger .kbd { display: none; } }

.cmdk[hidden] { display: none; }
.cmdk {
  position: fixed; inset: 0; z-index: 300;
  display: grid; place-items: start center;
  padding: clamp(var(--space-7), 10vh, 120px) var(--space-4) var(--space-4);
  background: rgba(12, 6, 24, .55); backdrop-filter: blur(4px);
  animation: cmdk-fade var(--dur) var(--ease-out);
}
@keyframes cmdk-fade { from { opacity: 0; } }
.cmdk-box {
  width: min(600px, 100%); background: var(--white);
  border-radius: var(--radius-lg); box-shadow: var(--shadow-lg);
  overflow: hidden; animation: cmdk-pop var(--dur) var(--ease-out);
}
@keyframes cmdk-pop { from { opacity: 0; transform: translateY(-12px) scale(.98); } }
.cmdk-head { display: flex; align-items: center; gap: var(--space-3); padding: var(--space-4) var(--space-5); border-bottom: 1px solid var(--line); }
.cmdk-head svg { width: 20px; height: 20px; color: var(--muted); flex: none; }
.cmdk-input { flex: 1; border: 0; outline: 0; font: inherit; font-size: var(--text-lg); color: var(--ink); background: transparent; }
.cmdk-list { max-height: min(56vh, 420px); overflow-y: auto; padding: var(--space-2); }
.cmdk-group { font-size: var(--text-xs); text-transform: uppercase; letter-spacing: .1em; color: var(--muted); font-weight: 700; padding: var(--space-3) var(--space-3) var(--space-2); }
.cmdk-item {
  display: flex; align-items: center; gap: var(--space-3); width: 100%;
  padding: var(--space-3); border-radius: var(--radius-sm);
  text-align: left; background: transparent; border: 0; color: var(--ink);
}
.cmdk-item .ci-ic { width: 34px; height: 34px; border-radius: 9px; display: grid; place-items: center; background: var(--surface); color: var(--brand-700); flex: none; }
.cmdk-item .ci-ic svg { width: 18px; height: 18px; }
.cmdk-item .ci-title { font-family: var(--font-head); font-weight: 600; font-size: var(--text-base); }
.cmdk-item .ci-sub { font-size: var(--text-sm); color: var(--muted); }
.cmdk-item[aria-selected="true"] { background: var(--accent-050); }
.cmdk-item[aria-selected="true"] .ci-ic { background: var(--accent); color: #fff; }
.cmdk-empty { padding: var(--space-7) var(--space-4); text-align: center; color: var(--muted); }
.cmdk-foot { display: flex; gap: var(--space-4); padding: var(--space-3) var(--space-5); border-top: 1px solid var(--line); font-size: var(--text-xs); color: var(--muted); }
.cmdk-foot span { display: inline-flex; align-items: center; gap: var(--space-2); }

/* =========================================================================
   4. ALAT INTERAKTIF (kalkulator)
   ====================================================================== */
.tool {
  background: var(--white); border: 1px solid var(--line);
  border-radius: var(--radius-lg); box-shadow: var(--shadow-md);
  padding: clamp(var(--space-5), 3vw, var(--space-8));
}
.tool-grid { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-5); }
@media (max-width: 620px) { .tool-grid { grid-template-columns: 1fr; } }

/* Pilihan berbentuk kartu (pengganti dropdown biasa) */
.choice-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: var(--space-3); }
.choice {
  display: flex; flex-direction: column; align-items: flex-start; gap: var(--space-2);
  padding: var(--space-4); border-radius: var(--radius);
  border: 2px solid var(--line); background: var(--white); text-align: left;
  transition: border-color var(--dur-fast), background var(--dur-fast), transform var(--dur-fast);
}
.choice:hover { border-color: var(--brand-500); transform: translateY(-2px); }
.choice[aria-pressed="true"] { border-color: var(--accent); background: var(--accent-050); }
.choice .c-ic { width: 38px; height: 38px; border-radius: 10px; display: grid; place-items: center; background: var(--surface); color: var(--brand-700); }
.choice[aria-pressed="true"] .c-ic { background: var(--accent); color: #fff; }
.choice .c-ic svg { width: 20px; height: 20px; }
.choice strong { font-family: var(--font-head); font-size: var(--text-base); }
.choice span { font-size: var(--text-sm); color: var(--muted); }

/* Panel hasil kalkulasi */
.result {
  margin-top: var(--space-6); padding: var(--space-6);
  border-radius: var(--radius); color: #fff;
  background-image: linear-gradient(120deg, rgba(26, 14, 51, .94), rgba(10, 5, 20, .94)), url("../img/page-hero-bg.jpg");
  background-size: cover; background-position: center;
  animation: result-in var(--dur) var(--ease-out);
}
@keyframes result-in { from { opacity: 0; transform: translateY(8px); } }
.result[hidden] { display: none; }
.result h3 { color: #fff; margin-bottom: var(--space-2); }
.result .r-lead { color: #cbbde4; font-size: var(--text-sm); }
.result-row { display: flex; flex-wrap: wrap; gap: var(--space-6); margin: var(--space-5) 0; }
.result-stat .rs-num { font-family: var(--font-head); font-weight: 800; font-size: var(--text-2xl); color: var(--accent-400); line-height: 1.1; }
.result-stat .rs-lab { font-size: var(--text-xs); color: #b3a3d0; text-transform: uppercase; letter-spacing: .08em; }
.result .btn-row { margin-top: var(--space-5); }

/* Baris input angka + satuan */
.input-unit { position: relative; display: flex; align-items: center; }
.input-unit input { padding-right: 64px; }
.input-unit .unit { position: absolute; right: var(--space-4); font-size: var(--text-sm); color: var(--muted); pointer-events: none; }

/* Thumbnail artikel dengan foto asli */
.article-card .thumb.has-img { padding: 0; }
.article-card .thumb.has-img img { width: 100%; height: 100%; object-fit: cover; }
.article-card .thumb.has-img .glyph { display: none; }

/* Tombol salin (halaman kontak) */
.copy-btn {
  display: inline-grid; place-items: center; width: 34px; height: 34px; flex: none;
  border-radius: 9px; border: 1px solid var(--line); background: var(--white); color: var(--muted);
  transition: color var(--dur-fast), border-color var(--dur-fast), background var(--dur-fast);
}
.copy-btn:hover { color: var(--brand-700); border-color: var(--brand-500); }
.copy-btn.done { color: var(--wa-600); border-color: var(--wa); background: #eafaf0; }
.copy-btn svg { width: 16px; height: 16px; }

/* Label untuk sekelompok tombol pilihan (bukan satu kolom input) */
.field-label { font-family: var(--font-head); font-weight: 600; font-size: var(--text-sm); }

/* =========================================================================
   5. PERBAIKAN KONTRAS — "permukaan gelap"
   -------------------------------------------------------------------------
   Penyebab bug: elemen di dalam .section--dark mewarisi warna teks terang.
   Saat elemen itu punya latar PUTIH sendiri (kartu), teksnya jadi
   putih-di-atas-putih alias tak terlihat. Warna teks kini selalu ditegaskan,
   tidak pernah diwariskan.
   ====================================================================== */

/* Kartu putih di dalam section gelap → teks harus gelap */
.channel { color: var(--ink); }
.channel .ch-name { color: var(--ink); }
.channel .ch-sub { color: var(--muted); }
.section--dark .channel .ch-name { color: var(--ink); }
.section--dark .channel .ch-sub { color: var(--muted); }

/* Tombol garis-luar di atas permukaan GELAP (band CTA, panel hasil kalkulator,
   kartu peta) — sebelumnya memakai teks gelap sehingga tidak terbaca. */
.cta-band .btn--ghost,
.result .btn--ghost,
.map-placeholder .btn--ghost {
  --btn-fg: #fff;
  border-color: rgba(255, 255, 255, .38);
  background: rgba(255, 255, 255, .06);
}
.cta-band .btn--ghost:hover,
.result .btn--ghost:hover,
.map-placeholder .btn--ghost:hover {
  background: rgba(255, 255, 255, .16);
  border-color: rgba(255, 255, 255, .7);
}

/* Eyebrow: oranye terang kurang kontras untuk teks kecil di latar terang */
.eyebrow { color: #b8460f; }
.section--dark .eyebrow,
.cta-band .eyebrow,
.result .eyebrow { color: var(--accent-400); }

/* Thumbnail artikel: logo, bukan teks yang terpotong */
.article-card .thumb {
  display: grid; place-items: center; overflow: hidden; position: relative;
}
.article-card .thumb .thumb-logo {
  width: 46%; max-width: 150px; height: auto; opacity: .28;
  filter: saturate(0);
}
.article-card .thumb::after {
  content: ""; position: absolute; inset: 0;
  background: linear-gradient(115deg, transparent 40%, rgba(255,255,255,.10) 50%, transparent 60%);
}

/* =========================================================================
   6. ANIMASI — semua otomatis nonaktif bila pengguna memilih
      "kurangi animasi" di pengaturan perangkatnya.
   ====================================================================== */
@media (prefers-reduced-motion: no-preference) {

  /* --- Hero: isi masuk bertahap saat halaman dibuka --- */
  .hero-copy > * { animation: hero-in .7s var(--ease-out) both; }
  .hero-copy > *:nth-child(1) { animation-delay: .05s; }
  .hero-copy > *:nth-child(2) { animation-delay: .14s; }
  .hero-copy > *:nth-child(3) { animation-delay: .23s; }
  .hero-copy > *:nth-child(4) { animation-delay: .32s; }
  .hero-copy > *:nth-child(5) { animation-delay: .41s; }
  @keyframes hero-in { from { opacity: 0; transform: translateY(22px); } }

  /* Latar hero perlahan mendekat — memberi kesan hidup */
  .hero::before { animation: hero-zoom 18s ease-out both; }
  @keyframes hero-zoom { from { transform: scale(1.06); } to { transform: scale(1); } }

  /* --- Tombol: kilau menyapu saat disentuh kursor --- */
  .btn { position: relative; overflow: hidden; }
  .btn::after {
    content: ""; position: absolute; inset: 0;
    background: linear-gradient(110deg, transparent 30%, rgba(255,255,255,.35) 50%, transparent 70%);
    transform: translateX(-120%);
    transition: transform .6s var(--ease-out);
  }
  .btn:hover::after { transform: translateX(120%); }

  /* --- Menu: garis bawah bergeser --- */
  .nav-links > li > a { position: relative; }
  .nav-links > li > a::after {
    content: ""; position: absolute; left: 12px; right: 12px; bottom: 4px;
    height: 2px; border-radius: 2px; background: var(--accent);
    transform: scaleX(0); transform-origin: 0 50%;
    transition: transform var(--dur) var(--ease-out);
  }
  .nav-links > li > a:hover::after,
  .nav-links > li > a.active::after { transform: scaleX(1); }

  /* --- Kartu: naik halus + bayangan makin dalam --- */
  .card { transition: transform var(--dur) var(--ease-out), box-shadow var(--dur) var(--ease-out); }
  .card:hover { transform: translateY(-6px); box-shadow: var(--shadow-lg); }

  /* Foto produk membesar sedikit saat kartunya disentuh */
  .product-card .bottle-card img,
  .article-card .thumb img { transition: transform .55s var(--ease-out); }
  .product-card:hover .bottle-card img,
  .article-card:hover .thumb img { transform: scale(1.06); }

  /* --- Ikon fitur berdenyut halus saat disentuh --- */
  .feature .ic, .step .n, .choice .c-ic { transition: transform var(--dur) var(--ease-spring); }
  .feature:hover .ic, .choice:hover .c-ic { transform: scale(1.1) rotate(-4deg); }

  /* --- Judul bagian: garis aksen memanjang saat masuk layar --- */
  .eyebrow::before { transition: width .5s var(--ease-out) .1s; }
  .reveal .eyebrow::before, .section-head .eyebrow::before { width: 0; }
  .reveal.in .eyebrow::before, .in .eyebrow::before { width: 22px; }

  /* --- Tombol WhatsApp mengambang: berdenyut menarik perhatian --- */
  .wa-float::before {
    content: ""; position: absolute; inset: 0; border-radius: 50%;
    background: var(--wa); opacity: .55;
    animation: wa-pulse 2.6s var(--ease-out) infinite;
  }
  @keyframes wa-pulse {
    0%   { transform: scale(1); opacity: .5; }
    70%  { transform: scale(1.5); opacity: 0; }
    100% { transform: scale(1.5); opacity: 0; }
  }
  .wa-float svg { position: relative; }

  /* --- Baris tabel spesifikasi & FAQ menyala saat disentuh --- */
  .spec-table tr { transition: background var(--dur-fast); }
  .spec-table tr:hover { background: var(--accent-050); }
  .faq summary { transition: background var(--dur-fast); }
  .faq summary:hover { background: var(--surface); }

  /* --- Isi FAQ membuka dengan lembut --- */
  .faq details[open] .ans { animation: faq-open .32s var(--ease-out); }
  @keyframes faq-open { from { opacity: 0; transform: translateY(-6px); } }

  /* --- Pil & chip sedikit terangkat --- */
  .spec-chip, .pill { transition: transform var(--dur-fast); }
  .card:hover .spec-chip { transform: translateY(-1px); }
}

/* Kartu hasil kalkulator: angka masuk satu per satu */
.result-stat { animation: rs-in .45s var(--ease-out) both; }
.result-stat:nth-child(2) { animation-delay: .09s; }
.result-stat:nth-child(3) { animation-delay: .18s; }
@keyframes rs-in { from { opacity: 0; transform: translateY(10px); } }

/* Oranye aksen kurang kontras untuk teks KECIL di latar terang (rasio 4.04).
   Dipakai versi lebih gelap khusus teks kecil; oranye asli tetap untuk
   ikon, garis, dan tombol (yang tidak terikat aturan kontras teks). */
.nav-links a.active { color: #b8460f; }
.field label .req { color: #b8460f; }

/* =========================================================================
   7. PETA LOKASI — peta besar dengan kartu info mengambang
   ====================================================================== */
.map-wrap {
  position: relative;
  border-radius: var(--radius-lg);
  overflow: hidden;
  box-shadow: var(--shadow-lg);
  border: 1px solid var(--line);
  background: var(--surface-2);
}
.map-wrap .map-frame {
  width: 100%;
  height: clamp(380px, 52vh, 520px);
  border: 0;
  display: block;
  /* Peta Google cenderung terang; sedikit diselaraskan dengan nuansa brand */
  filter: saturate(.92) contrast(1.02);
}

/* Kartu info mengambang di atas peta (desktop) */
.map-card {
  position: absolute;
  top: var(--space-6);
  left: var(--space-6);
  width: min(360px, calc(100% - var(--space-6) * 2));
  padding: var(--space-6);
  border-radius: var(--radius);
  background: rgba(255, 255, 255, .96);
  backdrop-filter: blur(10px) saturate(1.2);
  box-shadow: var(--shadow-lg);
  border: 1px solid rgba(255, 255, 255, .8);
  animation: map-card-in .5s var(--ease-out) both;
}
@keyframes map-card-in { from { opacity: 0; transform: translateY(14px); } }

.map-badge {
  display: inline-flex; align-items: center; gap: var(--space-2);
  padding: var(--space-1) var(--space-3);
  border-radius: var(--radius-pill);
  background: var(--accent-050); color: #b8460f;
  font-family: var(--font-head); font-weight: 700;
  font-size: var(--text-xs); letter-spacing: .04em;
  margin-bottom: var(--space-3);
}
.map-badge svg { width: 14px; height: 14px; }

.map-card h3 { font-size: var(--text-lg); line-height: var(--leading-snug); margin-bottom: var(--space-2); }
.map-card-addr { color: var(--muted); font-size: var(--text-sm); line-height: var(--leading-normal); }

.map-meta { margin: var(--space-5) 0; display: grid; gap: var(--space-3); }
.map-meta > div { display: flex; align-items: baseline; justify-content: space-between; gap: var(--space-3); }
.map-meta dt {
  display: inline-flex; align-items: center; gap: var(--space-2);
  color: var(--muted); font-size: var(--text-sm); white-space: nowrap;
}
.map-meta dt svg { width: 15px; height: 15px; color: var(--accent-600); flex: none; }
.map-meta dd { font-family: var(--font-head); font-weight: 600; font-size: var(--text-sm); text-align: right; }

.map-actions { display: grid; gap: var(--space-2); }
.map-actions .btn { width: 100%; }
.map-link {
  display: inline-flex; align-items: center; gap: var(--space-2);
  margin-top: var(--space-4); font-size: var(--text-sm);
  font-family: var(--font-head); font-weight: 600; color: var(--brand-700);
}
.map-link svg { width: 15px; height: 15px; transition: transform var(--dur-fast); }
.map-link:hover { color: var(--accent-600); }
.map-link:hover svg { transform: translateX(3px); }

/* Layar kecil: kartu turun ke bawah peta agar peta tidak tertutup */
@media (max-width: 780px) {
  .map-wrap { border-radius: var(--radius); }
  .map-wrap .map-frame { height: 300px; }
  .map-card {
    position: static; width: auto; border-radius: 0;
    box-shadow: none; border: 0; border-top: 1px solid var(--line);
    background: var(--white); backdrop-filter: none;
  }
  .map-actions { grid-template-columns: 1fr 1fr; }
  .map-actions .btn { font-size: var(--text-sm); padding: var(--space-3) var(--space-4); }
}
@media (max-width: 420px) { .map-actions { grid-template-columns: 1fr; } }

/* =========================================================================
   8. SHOWCASE — bagian bergambar besar
   -------------------------------------------------------------------------
   Foto MENGISI PENUH bingkainya (object-fit: cover, tanpa padding), jadi
   tidak ada bingkai gelap / gap di sekelilingnya seperti pada media-panel.
   ====================================================================== */
.showcase {
  display: grid;
  grid-template-columns: 1.05fr 1fr;
  gap: clamp(var(--space-6), 4vw, var(--space-9));
  align-items: center;
}
.showcase.reverse .showcase-media { order: 2; }
@media (max-width: 880px) {
  .showcase, .showcase.reverse { grid-template-columns: 1fr; }
  .showcase.reverse .showcase-media { order: 0; }
}

.showcase-media {
  position: relative;
  margin: 0;
  border-radius: var(--radius-lg);
  overflow: hidden;
  aspect-ratio: 4 / 3;
  box-shadow: var(--shadow-lg);
  isolation: isolate;
}
/* Kunci perbaikan: MENGISI PENUH, tidak ada padding & tidak ada letterbox */
.showcase-media img {
  width: 100%; height: 100%;
  object-fit: cover;
  display: block;
  transform: scale(1.04);
  transition: transform 1.1s var(--ease-out);
}
.showcase-media.in img,
.showcase:hover .showcase-media img { transform: scale(1); }
.showcase:hover .showcase-media img { transform: scale(1.06); }

/* Gradasi tipis di bawah agar kartu label terbaca */
.showcase-media::after {
  content: ""; position: absolute; inset: auto 0 0 0; height: 46%;
  background: linear-gradient(180deg, transparent, rgba(8, 4, 18, .72));
  pointer-events: none;
}

/* Kartu label mengambang di atas foto */
.showcase-tag {
  position: absolute; left: var(--space-5); bottom: var(--space-5); z-index: 1;
  display: flex; align-items: center; gap: var(--space-3);
  padding: var(--space-3) var(--space-5) var(--space-3) var(--space-3);
  border-radius: var(--radius-pill);
  background: rgba(255, 255, 255, .94);
  backdrop-filter: blur(10px) saturate(1.3);
  box-shadow: var(--shadow-md);
  max-width: calc(100% - var(--space-8));
}
.showcase-tag .st-ic {
  width: 40px; height: 40px; flex: none; border-radius: 50%;
  display: grid; place-items: center;
  background: var(--accent); color: #fff;
}
.showcase-tag .st-ic svg { width: 21px; height: 21px; }
.showcase-tag strong { display: block; font-family: var(--font-head); font-size: var(--text-sm); line-height: 1.2; color: var(--ink); }
.showcase-tag span span { font-size: var(--text-xs); color: var(--muted); }

/* Angka pendukung di kolom teks */
.showcase-facts { display: flex; flex-wrap: wrap; gap: var(--space-7); margin-top: var(--space-6); }
.showcase-facts .sf-num { font-family: var(--font-head); font-weight: 800; font-size: var(--text-2xl); color: var(--brand-700); line-height: 1.1; }
.showcase-facts .sf-lab { font-size: var(--text-sm); color: var(--muted); }

@media (prefers-reduced-motion: no-preference) {
  .showcase-media { transition: box-shadow var(--dur) var(--ease-out); }
  .showcase:hover .showcase-media { box-shadow: 0 28px 64px rgba(90, 46, 148, .30); }
  .showcase-tag { animation: st-in .55s var(--ease-out) .25s both; }
  @keyframes st-in { from { opacity: 0; transform: translateY(14px); } }
}

/* Panel foto di dalam .split — MENGISI PENUH, tanpa bingkai gelap/gap */
.split-media.scene { margin: 0; aspect-ratio: 4 / 3; overflow: hidden; border-radius: var(--radius-lg); }
.split-media.scene img { width: 100%; height: 100%; object-fit: cover; display: block; }
@media (prefers-reduced-motion: no-preference) {
  .split-media.scene img { transition: transform .9s var(--ease-out); }
  .split:hover .split-media.scene img { transform: scale(1.05); }
}

/* =========================================================================
   9. PENYEMPURNAAN HERO — proporsi & detail
   ====================================================================== */
.hero h1 {
  font-size: clamp(2.5rem, 5.4vw, 4.05rem);
  line-height: 1.02;
  letter-spacing: -.038em;
  text-wrap: balance;
}
.hero .tagline-id {
  font-size: clamp(1.06rem, 1.4vw, 1.22rem);
  line-height: 1.62;
  max-width: 44ch;
  margin-top: var(--space-5);
}
.hero .btn-row { margin-top: var(--space-8); gap: var(--space-3); }
.hero .btn { padding: var(--space-4) var(--space-7); font-size: 1rem; }

/* Lencana atas: kaca buram tipis */
.hero-badge {
  background: rgba(255, 255, 255, .72);
  border: 1px solid rgba(255, 255, 255, .9);
  box-shadow: 0 2px 14px rgba(20, 12, 40, .10);
  backdrop-filter: blur(14px) saturate(1.5);
  padding: var(--space-2) var(--space-4);
}

/* Deretan angka: pemisah tipis, bukan garis penuh */
.hero-stats {
  gap: 0; margin-top: var(--space-8); padding-top: var(--space-6);
  border-top: 1px solid rgba(14, 23, 38, .12);
}
.hero-stat { padding-inline: var(--space-6); }
.hero-stat:first-child { padding-left: 0; }
.hero-stat + .hero-stat { border-left: 1px solid rgba(14, 23, 38, .12); }
.hero-stat .num { font-size: clamp(1.5rem, 2.1vw, 1.9rem); letter-spacing: -.02em; }
.hero-stat .lab { margin-top: 2px; }
@media (max-width: 560px) {
  .hero-stat { padding-inline: var(--space-4); }
  .hero-stat:first-child { padding-left: 0; }
}

@media (prefers-reduced-motion: no-preference) {
  /* Foto perlahan mendekat — memberi kesan hidup tanpa mengganggu */
  .hero-shot img { animation: hero-drift 22s var(--ease-out) both; }
  @keyframes hero-drift {
    from { transform: scale(1.07); }
    to   { transform: scale(1); }
  }
  /* Lapisan buram punya skala sendiri agar tepinya tetap tersembunyi */
  .hero-shot .hs-blur { animation: hero-drift-blur 22s var(--ease-out) both; }
  @keyframes hero-drift-blur {
    from { transform: scale(1.18); }
    to   { transform: scale(1.12); }
  }
}

/* =========================================================================
   12. MOBILE — penyempurnaan khusus layar HP
   -------------------------------------------------------------------------
   Blok ini SENGAJA diletakkan paling bawah supaya menang atas aturan
   sebelumnya tanpa perlu !important. Urutan: dari layar paling lebar
   ke paling sempit.
   ====================================================================== */

/* ---------- 12.1 Header ----------------------------------------------------
   Di HP ruangnya cuma ~375px. Prioritasnya: LOGO harus utuh & terbaca.
   Tombol WhatsApp di header disembunyikan karena sudah ada tombol WhatsApp
   melayang (.wa-float) di setiap halaman — jadi tidak ada CTA yang hilang. */
@media (max-width: 700px) {
  .nav { gap: var(--space-3); min-height: 64px; }

  /* Tombol cari jadi ikon saja: hemat ruang, area sentuh tetap 44px */
  .search-trigger {
    width: 44px; height: 44px; padding: 0; flex: none;
    justify-content: center; border-radius: var(--radius-pill);
  }
  .search-trigger span, .search-trigger .kbd { display: none; }

  /* WhatsApp di header ditiadakan — .wa-float sudah menanganinya */
  .nav-cta .btn--wa { display: none; }

  .nav-toggle { width: 44px; height: 44px; flex: none; }
  .nav-cta { gap: var(--space-2); }

  /* Panel menu menempel tepat di bawah header yang kini 64px */
  .nav-links { inset: 64px 0 auto 0; max-height: calc(100dvh - 64px); overflow-y: auto; }
}

/* Tombol aksi di dalam menu HP. Diperlukan karena di layar sempit tombol
   WhatsApp & Kontak disembunyikan dari header — tanpa ini halaman Kontak
   tidak bisa dijangkau sama sekali dari header. */
.nav-actions { display: none; }
@media (max-width: 1040px) {
  .nav-actions {
    display: grid; gap: var(--space-3);
    margin-top: var(--space-4); padding-top: var(--space-5);
    border-top: 1px solid var(--line);
  }
  /* Kembalikan bentuk tombol: aturan .nav-links a membuatnya kotak & bergaris */
  .nav-links .nav-actions a.btn {
    border-bottom: 0; border-radius: var(--radius-pill);
    padding: 13px 20px; font-size: .98rem; justify-content: center;
  }
  .nav-links .nav-actions a.btn--ghost { border: 1px solid var(--line); }
}

@media (max-width: 380px) {
  .brand-logo .logo-img { height: 30px; }
}

/* ---------- 12.2 Hero ------------------------------------------------------
   Masalah lama: teks abu-abu duduk di atas foto botol yang penuh warna,
   jadi hampir tidak terbaca. Solusi: selubung putih jauh lebih pekat di
   area teks, foto tetap mengintip di bagian bawah. */
@media (max-width: 900px) {
  .hero::before {
    background:
      linear-gradient(180deg,
        rgba(255,255,255,.97) 0%,
        rgba(255,255,255,.95) 55%,
        rgba(255,255,255,.90) 78%,
        rgba(255,255,255,.62) 92%,
        rgba(255,255,255,.35) 100%),
      radial-gradient(70% 40% at 50% 100%, rgba(90,46,148,.10), transparent 70%);
  }
  /* Blur menutup hampir seluruh tinggi: deretan angka di bagian bawah dulu
     duduk di atas foto TAJAM sehingga labelnya pudar dan sulit dibaca. */
  .hero-shot .hs-blur {
    -webkit-mask-image: linear-gradient(180deg, #000 0%, #000 86%, transparent 100%);
            mask-image: linear-gradient(180deg, #000 0%, #000 86%, transparent 100%);
  }
  .hero .tagline-id { color: var(--ink-soft); }
  /* Label statistik memakai abu-abu terang (--muted) yang kurang kuat di atas
     latar berfoto — di layar sedang dinaikkan ke tinta yang lebih pekat. */
  .hero-stat .lab { color: var(--ink-soft); }
}

/* Di HP dipakai pendekatan "kartu kaca": foto produk dibiarkan TAJAM di
   belakang, lalu seluruh teks diletakkan di atas panel kaca buram. Hasilnya
   foto tetap terlihat bagus DAN teks terbaca sempurna — bukan lagi teks
   abu-abu yang tenggelam di atas botol berwarna. */
@media (max-width: 620px) {
  .hero-shot .hs-blur { display: none; }
  .hero-shot img { object-position: 58% 50%; }
  .hero::before {
    background:
      linear-gradient(180deg, rgba(255,255,255,.52) 0%, rgba(255,255,255,.22) 42%,
                              rgba(255,255,255,.48) 100%),
      radial-gradient(85% 45% at 50% 0%, rgba(38,19,77,.20), transparent 72%);
  }

  .hero .container { padding-block: var(--space-6) var(--space-8); }
  .hero-copy {
    background: rgba(255,255,255,.90);
    -webkit-backdrop-filter: blur(20px) saturate(1.5);
            backdrop-filter: blur(20px) saturate(1.5);
    border: 1px solid rgba(255,255,255,.95);
    border-radius: var(--radius-lg);
    padding: var(--space-6) var(--space-5);
    box-shadow: 0 20px 50px rgba(20, 12, 40, .20);
  }

  /* Di atas kartu putih, lencana putih jadi tak terlihat -> pakai warna brand */
  .hero-badge {
    background: var(--accent-050);
    border-color: rgba(242, 101, 34, .28);
    color: var(--brand-900);
    backdrop-filter: none; box-shadow: none;
    font-size: var(--text-xs); line-height: var(--leading-snug);
    margin-bottom: var(--space-5); align-items: flex-start;
  }
  .hero-badge .dot { margin-top: 5px; flex: none; }
  .hero .tagline-id { margin-top: var(--space-4); }

  /* Tombol utama sejajar & selebar kartu — khas aplikasi, mudah ditekan */
  .hero .btn-row { display: grid; grid-template-columns: 1fr; gap: var(--space-3); margin-top: var(--space-6); }
  .hero .btn-row .btn { width: 100%; }
}

/* Deretan angka: 3 kolom rapi bersekat tipis — tidak lagi saling tabrak.
   Sebelumnya flex-wrap membuat baris kedua menempel tanpa jarak. */
@media (max-width: 620px) {
  .hero-stats {
    display: grid; grid-template-columns: repeat(3, 1fr);
    gap: 0; margin-top: var(--space-7); padding-top: var(--space-5);
  }
  .hero-stat { padding-inline: var(--space-3); min-width: 0; }
  .hero-stat:first-child { padding-left: 0; }
  .hero-stat + .hero-stat { border-left: 1px solid rgba(14, 23, 38, .14); }
  .hero-stat .num { font-size: 1.35rem; }
  .hero-stat .lab { font-size: .78rem; line-height: 1.32; overflow-wrap: anywhere; }
}

/* ---------- 12.3 Barisan chip "Kualitas & standar" -------------------------
   Dulu chip-nya membungkus (wrap) jadi terlihat acak. Di HP diubah jadi
   satu baris yang bisa digeser — rapi, dan mengundang untuk digeser. */
@media (max-width: 620px) {
  .trust {
    flex-wrap: nowrap; overflow-x: auto; gap: var(--space-2);
    padding-bottom: var(--space-2);
    scrollbar-width: none; -ms-overflow-style: none;
    /* memudar di tepi kanan = petunjuk halus bahwa masih ada lanjutannya */
    -webkit-mask-image: linear-gradient(90deg, #000 88%, transparent 100%);
            mask-image: linear-gradient(90deg, #000 88%, transparent 100%);
  }
  .trust::-webkit-scrollbar { display: none; }
  .trust .chip { flex: none; white-space: nowrap; }
}

/* ---------- 12.4 Area sentuh minimal 44px ----------------------------------
   Pedoman aksesibilitas: tautan/tombol di layar sentuh minimal 44x44px,
   kalau tidak jempol sering meleset. */
@media (max-width: 620px) {
  .price-dl, .link-arrow, .map-link {
    min-height: 44px; align-items: center;
  }
  .copy-btn { width: 44px; height: 44px; }
  .nav-links a { min-height: 46px; display: flex; align-items: center; }
  .submenu a { min-height: 42px; display: flex; align-items: center; }
  .btn { padding: 14px 22px; }
  .btn--lg { padding: 16px 26px; }
  /* Logo: area sentuh dinaikkan tanpa mengubah tinggi header */
  .brand-logo { padding-block: 5px; }
  /* Daftar tautan footer: sebelumnya 34px, terlalu rapat untuk jempol */
  .footer-col a { min-height: 44px; display: flex; align-items: center; padding-block: 0; }
  /* Remah jejak (breadcrumb) dilebarkan lewat padding agar tetap sebaris */
  .breadcrumb { flex-wrap: wrap; row-gap: 0; }
  .breadcrumb a { padding-block: 11px; }
}

/* ---------- 12.5 Teks kecil ------------------------------------------------
   .pill sebelumnya 11.5px — di HP terlalu kecil untuk dibaca nyaman. */
@media (max-width: 620px) {
  .pill { font-size: .8rem; padding: 5px 11px; }
  .footer-grid { gap: var(--space-7) var(--space-6); }
}

/* ---------- 12.6 Tombol WhatsApp melayang ----------------------------------
   Diberi jarak aman dari tepi bawah layar (area gestur iPhone). */
@media (max-width: 620px) {
  .wa-float { right: 16px; bottom: calc(16px + env(safe-area-inset-bottom, 0px)); }
}

/* Nomor pada kartu kontak: baris nomor dibuat lebih tegas daripada baris
   keterangan di bawahnya, supaya yang dicari mata lebih dulu adalah nomornya. */
.channel .ch-sub.ch-strong {
  color: var(--ink); font-family: var(--font-head); font-weight: 600;
  font-size: .9rem; letter-spacing: -.01em;
}
/* Nomor telepon TIDAK BOLEH terpotong di tengah — .ch-sub memakai
   overflow-wrap:anywhere (perlu untuk alamat email yang panjang), jadi baris
   nomor dikecualikan secara khusus. */
.channel .ch-sub.ch-strong { white-space: nowrap; overflow-wrap: normal; }

/* =========================================================================
   13. KARTU ADMIN (halaman Kontak)
   -------------------------------------------------------------------------
   Dua admin ditampilkan sebagai kartu utama: nomornya besar dan bisa
   ditekan untuk menelepon, dengan dua tombol — chat WhatsApp atau telepon.
   ====================================================================== */
.admin-card {
  display: flex; flex-direction: column; gap: var(--space-4);
  padding: var(--space-5); border-radius: var(--radius);
  background: var(--white); border: 1px solid var(--line);
  box-shadow: var(--shadow-sm);
  transition: transform var(--dur) var(--ease-out), box-shadow var(--dur) var(--ease-out), border-color var(--dur);
}
.admin-card:hover { transform: translateY(-3px); box-shadow: var(--shadow-md); border-color: #d4deec; }

.admin-top { display: flex; align-items: center; gap: var(--space-3); }
.admin-ic {
  width: 46px; height: 46px; border-radius: 12px; flex: none;
  display: grid; place-items: center;
  background: var(--surface); color: var(--wa);
}
.admin-ic svg { width: 26px; height: 26px; }
.admin-id { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1 1 auto; }
.admin-name { font-family: var(--font-head); font-weight: 700; line-height: 1.25; color: var(--ink); }
.admin-role { font-size: .84rem; color: var(--muted); line-height: 1.4; }

/* Nomor: jangan pernah terpotong di tengah */
.admin-num {
  font-family: var(--font-head); font-weight: 800; letter-spacing: -.02em;
  font-size: clamp(1.35rem, 2.2vw, 1.65rem); line-height: 1.1;
  color: var(--ink); white-space: nowrap;
  transition: color var(--dur-fast);
}
.admin-num:hover { color: var(--brand-700); }

.admin-actions { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-3); margin-top: auto; }
.admin-actions .btn { width: 100%; padding-inline: var(--space-3); }
@media (max-width: 480px) { .admin-actions { grid-template-columns: 1fr; } }

@media (prefers-reduced-motion: reduce) { .admin-card:hover { transform: none; } }
