/**
 * Shop restyle -- item 4 roadmap (2026-08-30). Lihat header komentar
 * includes/shop-restyle.php untuk penjelasan arsitektur lengkap.
 *
 * SEMUA selector di file ini di-scope lewat `body.zsd-halaman-shop` (body
 * class ditambah zsd_body_class_shop_restyle(), hanya di is_shop()/
 * is_product_taxonomy()) -- supaya tidak ada satu pun aturan yang bocor ke
 * Home/Journal/Cart/Checkout/Product Detail/dst (LOCKED bagian 29).
 *
 * Warna dipakai ULANG dari token global header-footer-restyle.css
 * (--zsd-hf-coklat dkk, dimuat sitewide) -- TIDAK didefinisikan ulang,
 * cuma di-alias ke nama --zsd-shop-* di bawah supaya lebih pendek dipakai
 * berkali-kali di file ini (dengan fallback hex kalau entah kenapa file itu
 * belum sempat load, defensif).
 */

/**
 * ===== PENGATURAN GLOBAL TOKO -- rollout ke Shop (2026-09-11) =====
 * Lanjutan Journal Customization Redesign, giliran ke-3 setelah Home & Cart &
 * Checkout. Preset (`zsd_ambil_global_visual_setting()`, includes/global-
 * visual-settings.php) SAMA yang dipakai Journal/Cart/Home -- CLASS di
 * <body> (`zsd-shop-palet-X`/`zsd-shop-aksen-X`/`zsd-shop-font-X`, lihat
 * zsd_body_class_shop_restyle() di includes/shop-restyle.php), BUKAN
 * attribute data-jr-* -- pola SAMA PERSIS kayak Cart & Checkout
 * (zsd_cart_restyle_body_class()), karena Shop halaman archive WooCommerce
 * native juga (body_class() cuma bisa nambah class, nggak bisa nambah
 * attribute data-* di <body>).
 *
 * Sebelumnya --zsd-shop-* alias ke token sitewide --zsd-hf-* (header-footer-
 * restyle.css, LIHAT komentar lama di atas var block ini yang sekarang
 * digantikan blok ini) -- SEKARANG dialihkan ke --zsd-jr-* (nilai default
 * disalin persis dari preset "klasik" assets/journal-publik.css, SUMBER
 * TUNGGAL kebenaran warna) supaya Shop ikut preset global yang seller atur,
 * lepas dari --zsd-hf-* (Header/Footer belum giliran rollout-nya -- di luar
 * scope round ini, TIDAK disentuh).
 *
 * --zsd-shop-coklat-gelap (shade hover, tidak ada padanan langsung di token
 * --zsd-jr-*) pakai color-mix() nurunin --zsd-jr-aksen, pola SAMA seperti
 * --zsd-home-brown-dark di assets/home-publik.css -- ketimbang nambah key
 * baru di preset registry bersama (journal.php) cuma buat 1 pemakaian di
 * sini.
 */
body.zsd-halaman-shop {
	--zsd-jr-bg: #fdfaf5;
	--zsd-jr-krem: #f2e8da;
	--zsd-jr-krem-muda: #f8f2e9;
	--zsd-jr-coklat: #6b5744;
	--zsd-jr-coklat-muda: #a9927a;
	--zsd-jr-teks: #2c2620;
	--zsd-jr-teks-muted: #8a7f6f;
	--zsd-jr-border: #e7dccb;
	--zsd-jr-aksen: var(--zsd-jr-coklat);
	--zsd-jr-font-heading: "Inter", -apple-system, "system-ui", "Segoe UI", Roboto, sans-serif;

	--zsd-shop-coklat: var(--zsd-jr-aksen);
	--zsd-shop-coklat-gelap: color-mix(in srgb, var(--zsd-jr-aksen) 78%, black);
	--zsd-shop-krem: var(--zsd-jr-krem);
	--zsd-shop-krem-lebih-muda: var(--zsd-jr-krem-muda);
	--zsd-shop-garis: var(--zsd-jr-border);
	--zsd-shop-teks: var(--zsd-jr-teks);
	--zsd-shop-teks-muted: var(--zsd-jr-teks-muted);
	--zsd-shop-radius: 15px;
	--zsd-shop-container-max: 1240px;
}

/* Heading pakai font pairing global -- BARU, Shop sebelumnya tidak punya
   rule font-family sama sekali (ikut default tema/browser). 1 rule generik
   (bukan per-selector) supaya semua judul section (Hero/Intro/nama produk)
   otomatis ikut kalau seller ganti preset font. */
body.zsd-halaman-shop h1,
body.zsd-halaman-shop h2,
body.zsd-halaman-shop h3 {
	font-family: var(--zsd-jr-font-heading);
}

/* ===== Preset Palet Dasar/Warna Aksen/Font Pairing -- REUSE persis dari
   .zsd-journal-listing/.zsd-journal-single (assets/journal-publik.css),
   diaktifkan lewat CLASS body (bukan attribute) di atas. "klasik"/
   "ikuti-palet"/"konsisten" SENGAJA tidak punya blok -- default = pakai
   nilai dasar di atas apa adanya. */
body.zsd-halaman-shop.zsd-shop-palet-terracotta-hangat {
	--zsd-jr-bg: #fdf8f3;
	--zsd-jr-krem: #f0e0d0;
	--zsd-jr-krem-muda: #f7ebdf;
	--zsd-jr-coklat: #8a4b32;
	--zsd-jr-coklat-muda: #c08b6f;
	--zsd-jr-teks: #2e2117;
	--zsd-jr-teks-muted: #9c8672;
	--zsd-jr-border: #e8d2bd;
}

body.zsd-halaman-shop.zsd-shop-palet-zaitun-alami {
	--zsd-jr-bg: #f9faf5;
	--zsd-jr-krem: #e8ecdc;
	--zsd-jr-krem-muda: #f1f4e9;
	--zsd-jr-coklat: #5b6b4a;
	--zsd-jr-coklat-muda: #93a17f;
	--zsd-jr-teks: #262b1f;
	--zsd-jr-teks-muted: #8b937d;
	--zsd-jr-border: #dde3cd;
}

body.zsd-halaman-shop.zsd-shop-palet-abu-batu-modern {
	--zsd-jr-bg: #f7f7f5;
	--zsd-jr-krem: #e9e7e2;
	--zsd-jr-krem-muda: #f2f1ed;
	--zsd-jr-coklat: #5c5850;
	--zsd-jr-coklat-muda: #948d80;
	--zsd-jr-teks: #262420;
	--zsd-jr-teks-muted: #928d84;
	--zsd-jr-border: #dedad2;
}

body.zsd-halaman-shop.zsd-shop-aksen-terracotta { --zsd-jr-aksen: #b3572f; }
body.zsd-halaman-shop.zsd-shop-aksen-hijau-sawo { --zsd-jr-aksen: #6b7a4f; }
body.zsd-halaman-shop.zsd-shop-aksen-biru-dusty { --zsd-jr-aksen: #4f7686; }
body.zsd-halaman-shop.zsd-shop-aksen-mustard    { --zsd-jr-aksen: #c08a2e; }

body.zsd-halaman-shop.zsd-shop-font-editorial-klasik {
	--zsd-jr-font-heading: "Playfair Display", Georgia, serif;
}

body.zsd-halaman-shop.zsd-shop-font-editorial-hangat {
	--zsd-jr-font-heading: "Fraunces", Georgia, serif;
}

body.zsd-halaman-shop .zsd-shop-container {
	max-width: var(--zsd-shop-container-max);
	margin: 0 auto;
	padding: 0 24px;
	box-sizing: border-box;
}

/* =====================================================================
 * SEMBUNYIKAN HERO LAMA BOTIGA (page-header abu-abu + 5-image gallery +
 * search lama) -- diganti Hero ZENOS baru di bawah. Beberapa selector
 * sekaligus (lapis pertahanan) karena file tema Botiga tidak bisa dibaca
 * langsung dari sini (tidak ada di repo) -- kalau setelah deploy ternyata
 * masih ada sisa gap/elemen, tinggal tambah 1 selector lagi di sini, tidak
 * perlu ubah pendekatan.
 * ===================================================================== */
body.zsd-halaman-shop .woocommerce-page-header,
body.zsd-halaman-shop header.woocommerce-page-header-style1,
body.zsd-halaman-shop .page-description,
body.zsd-halaman-shop .woocommerce-products-header {
	display: none !important;
	margin: 0 !important;
	padding: 0 !important;
	height: 0 !important;
	min-height: 0 !important;
	border: none !important;
}

/* =====================================================================
 * PROMOTIONAL HERO
 * ===================================================================== */
body.zsd-halaman-shop .container.content-wrapper {
	/* REVISI 2026-08-30 (round 4, fix dari Ferdian): Botiga taruh
	 * margin-top:65px di sini secara theme-wide (jarak default Header ->
	 * konten halaman biasa). Di halaman Shop kita mau Hero nempel PERSIS
	 * di bawah Header (LOCKED: no empty space/ghost container). Di-nolkan
	 * HANYA lewat scope body.zsd-halaman-shop -- halaman lain (Cart,
	 * Checkout, Product, Home, dll) tetap pakai margin-top bawaan Botiga,
	 * tidak diubah sama sekali.
	 * REVISI 2026-08-30 (round 4b, Ferdian nemuin lewat DevTools): ternyata
	 * ada rule Botiga LAIN yang lebih spesifik + pakai !important --
	 * `.post-type-archive-product .container.content-wrapper,
	 * .woocommerce-page .container.content-wrapper { margin-top: 65px
	 * !important; }` -- otomatis kalahin margin-top:0 kita yang polos
	 * (non-important selalu kalah dari !important, walau specificity kita
	 * sebenernya lebih tinggi). Dikasih !important juga di sini supaya
	 * menang, TETAP discope body.zsd-halaman-shop jadi Cart/Checkout/
	 * My Account (yang juga punya class .woocommerce-page) tidak ikut
	 * kesentuh. */
	margin-top: 0 !important;
}
body.zsd-halaman-shop .zsd-shop-hero {
	position: relative;
	width: 100vw;
	margin-left: calc(50% - 50vw);
	margin-right: calc(50% - 50vw);
	overflow: hidden;
	background: var(--zsd-shop-krem-lebih-muda);
}

body.zsd-halaman-shop .zsd-shop-hero-swiper {
	position: relative;
	overflow: hidden;
	height: 440px; /* dinaikkan dari 400px -> 440px (batas atas LOCKED range 380-440px), round 4: Ferdian coba 500px inline tapi itu melebihi spec, jadi dimentokkan ke batas atas yang masih LOCKED-compliant */
}

/* Mekanik dasar Swiper (Botiga TIDAK memuat CSS Swiper-nya sendiri di
 * halaman ini -- cuma JS-nya -- jadi mekanik layout inti ditulis manual di
 * sini, dipakai window.Swiper lewat shop-restyle.js). */
body.zsd-halaman-shop .zsd-shop-hero-swiper .swiper-wrapper {
	display: flex;
	height: 100%;
	box-sizing: border-box;
}
body.zsd-halaman-shop .zsd-shop-hero-swiper .swiper-slide {
	flex-shrink: 0;
	width: 100%;
	height: 100%;
	position: relative;
	box-sizing: border-box;
}

/* Fallback progressive-enhancement: SEBELUM JS siap, cuma slide pertama
 * yang tampil (bukan numpuk semua), arrow/indikator disembunyikan dulu --
 * shop-restyle.js nambah class `zsd-js-siap` begitu slider ke-inisialisasi. */
body.zsd-halaman-shop .zsd-shop-hero:not(.zsd-js-siap) .swiper-slide:not(:first-child) {
	display: none;
}
body.zsd-halaman-shop .zsd-shop-hero:not(.zsd-js-siap) .zsd-shop-hero-panah,
body.zsd-halaman-shop .zsd-shop-hero:not(.zsd-js-siap) .zsd-shop-hero-indikator {
	display: none;
}

body.zsd-halaman-shop .zsd-shop-hero-slide--image .zsd-shop-hero-gambar {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
}
/* =====================================================================
 * HERO IMAGE SAFETY -- round 3 "FINAL REFINEMENT": promotional artwork
 * (banner seller dengan teks/diskon/logo dekat tepi) TIDAK BOLEH dipaksa
 * crop (LOCKED: "FULL IMAGE VISIBILITY > forced edge-to-edge crop").
 * Slide dengan flag `aman_dipotong=false` (lihat
 * zsd_shop_hero_default_slides() di shop-restyle.php) dapat class
 * tambahan ".zsd-shop-hero-slide--contain" -- gambar TETAP utuh lewat
 * object-fit:contain (TIDAK PERNAH kepotong), dengan lapisan blur dari
 * gambar yang SAMA (pakai `background: inherit` dari inline
 * background-image yang di-set PHP) sebagai pengisi latar, supaya tetap
 * terasa penuh secara visual walau rasio Hero (~3.8:1 desktop, makin
 * lebar lagi di tablet/mobile) beda jauh dari rasio foto promosi
 * (~1.5-1.9:1 pada 3 gambar demo). Slide foto biasa TANPA flag ini
 * (default aman_dipotong=true) TETAP pakai object-fit:cover seperti
 * sebelumnya -- cover aman buat fotografi produk/lifestyle polos tanpa
 * teks penting dekat tepi.
 * ===================================================================== */
body.zsd-halaman-shop .zsd-shop-hero-slide--contain {
	background-size: cover;
	background-position: center;
}
body.zsd-halaman-shop .zsd-shop-hero-slide--contain::before {
	content: '';
	position: absolute;
	inset: 0;
	background: inherit;
	filter: blur(15px) brightness(0.83); /* nilai hasil tes devtools Ferdian, round 4 */
	transform: scale(1.15);
	z-index: 0;
}
body.zsd-halaman-shop .zsd-shop-hero-slide--contain .zsd-shop-hero-gambar {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: contain;
	z-index: 1;
}
body.zsd-halaman-shop .zsd-shop-hero-slide--contain .zsd-shop-hero-konten {
	z-index: 2;
}
body.zsd-halaman-shop .zsd-shop-hero-slide--background {
	display: flex;
	align-items: center;
}

/* =====================================================================
 * BARU 2026-09-09 -- "Tampilan Banner: Full Width" (permintaan Ferdian,
 * alternatif dari treatment "Contain + Background Blur" di atas).
 *
 * KOREKSI 2026-09-10 (round 2 -- laporan Ferdian: gambar tampil di
 * UKURAN ASLI/KECIL di tengah dengan ruang kosong krem/putih BESAR di
 * kiri-kanan, bukan melebar penuh). Root cause: implementasi awal pakai
 * `width:auto;height:auto` di <img> (ukuran natif gambar), dengan wadah
 * `height:auto;max-height:70vh` -- max-height/max-width HANYA membatasi
 * (mengecilkan kalau kelebihan), TIDAK PERNAH membesarkan gambar untuk
 * mengisi wadah. Untuk file gambar contoh yang resolusinya kecil
 * (mis. 1024x384), hasilnya gambar tampil natif kecil, jauh dari lebar
 * penuh layar.
 *
 * FIX: samakan mekanik dengan mode "Contain + Background Blur" yang
 * sudah terbukti benar di atas (".zsd-shop-hero-slide--contain") --
 * wadah diberi TINGGI TETAP (70vh, bukan max-height), gambar
 * di-absolute-position mengisi 100% lebar x 100% tinggi wadah dengan
 * `object-fit: contain`. object-fit:contain otomatis membesarkan ATAU
 * mengecilkan gambar supaya selalu mengisi area yang tersedia semaksimal
 * mungkin TANPA crop dan TANPA distorsi rasio -- kalau rasio gambar PAS
 * 8:3 (rekomendasi), gambar mengisi penuh wadah; kalau rasionya beda,
 * muncul letterbox putih polos di kiri-kanan/atas-bawah (warna solid,
 * bukan blur -- dipilih karena satu warna tidak mungkin cocok untuk
 * semua kombinasi warna gambar seller, per keputusan Owner). Karena
 * tinggi wadah sekarang TETAP (bukan auto), opsi Swiper `autoHeight`
 * tidak lagi diperlukan (lihat shop-restyle.js).
 * ===================================================================== */
body.zsd-halaman-shop .zsd-shop-hero--fullwidth .zsd-shop-hero-swiper {
	height: 70vh;
}
body.zsd-halaman-shop .zsd-shop-hero-slide--fullwidth {
	position: relative;
	overflow: hidden;
	background: #ffffff;
}
body.zsd-halaman-shop .zsd-shop-hero-slide--fullwidth .zsd-shop-hero-gambar {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: contain;
}
body.zsd-halaman-shop .zsd-shop-hero-slide--fullwidth .zsd-shop-hero-konten {
	position: absolute;
}
/* Wadah luar ".zsd-shop-hero" pakai background krem sebagai default
   (lihat rule dasar di atas) -- di mode Full Width kita samakan jadi
   putih juga supaya tidak ada strip krem "tertinggal" di tepi saat
   tinggi wadah luar sempat berbeda dari swiper sebelum JS selesai init. */
body.zsd-halaman-shop .zsd-shop-hero--fullwidth {
	background: #ffffff;
}
/* Tombol panah kiri/kanan: gaya default (lingkaran putih transparan)
   dirancang untuk latar foto/gradasi gelap -- di atas letterbox putih
   polos mode Full Width, lingkaran putih jadi nyaris tidak terlihat.
   Tambahkan border + shadow tipis supaya tombol tetap jelas di latar
   warna apapun (putih maupun foto). */
body.zsd-halaman-shop .zsd-shop-hero--fullwidth .zsd-shop-hero-panah {
	background: #fff;
	border: 1px solid rgba(43, 38, 34, 0.14);
	box-shadow: 0 2px 10px rgba(43, 38, 34, 0.14);
}
body.zsd-halaman-shop .zsd-shop-hero--fullwidth .zsd-shop-hero-panah:hover {
	background: #f7f4f0;
}


body.zsd-halaman-shop .zsd-shop-hero-konten {
	position: absolute;
	inset: 0;
	display: flex;
	align-items: flex-end;
	padding-bottom: 48px;
	box-sizing: border-box;
}
body.zsd-halaman-shop .zsd-shop-hero-slide--image .zsd-shop-hero-konten {
	background: linear-gradient(to top, rgba(20, 16, 12, 0.72), rgba(20, 16, 12, 0.15) 55%, rgba(20, 16, 12, 0) 80%);
	color: #fff;
}
/* Eksplisit (bukan cuma andalkan inherit dari .zsd-shop-hero-konten) --
 * ditemukan live 2026-08-30 ada aturan global tema Botiga yang lebih
 * spesifik menimpa warna heading jadi gelap lagi, bikin teks nyaris tidak
 * kebaca di atas foto. */
body.zsd-halaman-shop .zsd-shop-hero-slide--image .zsd-shop-hero-judul,
body.zsd-halaman-shop .zsd-shop-hero-slide--image .zsd-shop-hero-copy {
	color: #fff;
}
body.zsd-halaman-shop .zsd-shop-hero-slide--background .zsd-shop-hero-konten {
	align-items: center;
	padding-bottom: 0;
	color: var(--zsd-shop-teks);
}
body.zsd-halaman-shop .zsd-shop-hero-judul {
	font-size: 32px;
	line-height: 1.2;
	font-weight: 600;
	margin: 0 0 8px;
	max-width: 640px;
}
body.zsd-halaman-shop .zsd-shop-hero-copy {
	font-size: 15px;
	line-height: 1.5;
	margin: 0;
	max-width: 520px;
	opacity: 0.92;
}

body.zsd-halaman-shop .zsd-shop-hero-panah {
	position: absolute;
	top: 50%;
	transform: translateY(-50%);
	width: 44px;
	height: 44px;
	border-radius: 50%;
	border: none;
	background: rgba(255, 255, 255, 0.85);
	color: var(--zsd-shop-teks);
	display: flex;
	align-items: center;
	justify-content: center;
	cursor: pointer;
	z-index: 2;
	transition: background 0.2s ease;
}
body.zsd-halaman-shop .zsd-shop-hero-panah:hover {
	background: #fff;
}
body.zsd-halaman-shop .zsd-shop-hero-panah-kiri {
	left: 16px;
}
body.zsd-halaman-shop .zsd-shop-hero-panah-kanan {
	right: 16px;
}
body.zsd-halaman-shop .zsd-shop-hero-panah .zsd-shop-ikon {
	width: 20px;
	height: 20px;
}

body.zsd-halaman-shop .zsd-shop-hero-indikator {
	position: absolute;
	left: 50%;
	bottom: 18px;
	transform: translateX(-50%);
	z-index: 2;
}
body.zsd-halaman-shop .zsd-shop-hero-indikator-track {
	display: block;
	width: 64px;
	height: 3px;
	border-radius: 3px;
	background: rgba(255, 255, 255, 0.5);
	overflow: hidden;
}
body.zsd-halaman-shop .zsd-shop-hero-slide--background ~ .zsd-shop-hero-indikator .zsd-shop-hero-indikator-track,
body.zsd-halaman-shop .zsd-shop-hero-swiper:has(.zsd-shop-hero-slide--background.swiper-slide-active) .zsd-shop-hero-indikator-track {
	background: rgba(43, 38, 34, 0.18);
}
body.zsd-halaman-shop .zsd-shop-hero-indikator-thumb {
	display: block;
	height: 100%;
	width: 25%;
	border-radius: 3px;
	background: #fff;
	transform: translateX(0);
	transition: transform 0.3s ease, width 0.3s ease;
}

@media (prefers-reduced-motion: reduce) {
	body.zsd-halaman-shop .zsd-shop-hero-swiper .swiper-wrapper {
		transition-duration: 1ms !important;
	}
	body.zsd-halaman-shop .zsd-shop-hero-indikator-thumb {
		transition: none;
	}
}

/* =====================================================================
 * SHOP INTRO
 * ===================================================================== */
body.zsd-halaman-shop .zsd-shop-intro {
	padding: 56px 0 32px;
	text-align: center;
}
body.zsd-halaman-shop .zsd-shop-intro-eyebrow {
	font-size: 12px;
	font-weight: 700;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--zsd-shop-coklat);
	margin: 0 0 12px;
}
body.zsd-halaman-shop .zsd-shop-intro-judul {
	font-size: 30px;
	line-height: 1.3;
	font-weight: 600;
	color: var(--zsd-shop-teks);
	margin: 0 auto 12px;
	max-width: 720px;
}
body.zsd-halaman-shop .zsd-shop-intro-deskripsi {
	font-size: 15px;
	line-height: 1.6;
	color: var(--zsd-shop-teks-muted);
	margin: 0 auto;
	max-width: 560px;
}

/* =====================================================================
 * PRODUCT SEARCH
 * ===================================================================== */
body.zsd-halaman-shop .zsd-shop-search-wrap {
	padding: 0 0 32px;
}
body.zsd-halaman-shop .zsd-shop-search {
	display: flex;
	align-items: center;
	gap: 12px;
	max-width: 640px;
	margin: 0 auto;
	background: #fff;
	border: 1px solid var(--zsd-shop-garis);
	border-radius: var(--zsd-shop-radius);
	padding: 4px 6px 4px 20px;
	box-shadow: 0 1px 2px rgba(43, 38, 34, 0.04);
	transition: border-color 0.2s ease, box-shadow 0.2s ease;
	box-sizing: border-box;
}
body.zsd-halaman-shop .zsd-shop-search-icon {
	display: flex;
	color: var(--zsd-shop-teks-muted);
	flex-shrink: 0;
}
body.zsd-halaman-shop .zsd-shop-search-icon .zsd-shop-ikon {
	width: 18px;
	height: 18px;
}
body.zsd-halaman-shop .zsd-shop-search-input {
	flex: 1 1 auto;
	min-width: 0;
	border: none;
	outline: none;
	background: transparent;
	font-size: 14px;
	height: 44px;
	color: var(--zsd-shop-teks);
}
body.zsd-halaman-shop .zsd-shop-search-input::placeholder {
	color: var(--zsd-shop-teks-muted);
}
body.zsd-halaman-shop .zsd-shop-search-tombol {
	flex-shrink: 0;
	background: var(--zsd-shop-coklat);
	color: #fff;
	border: none;
	border-radius: calc(var(--zsd-shop-radius) - 4px);
	padding: 10px 20px;
	font-size: 13px;
	font-weight: 600;
	cursor: pointer;
	transition: background 0.2s ease;
}
body.zsd-halaman-shop .zsd-shop-search-tombol:hover {
	background: var(--zsd-shop-coklat-gelap);
}
body.zsd-halaman-shop .zsd-shop-search:focus-within {
	border-color: var(--zsd-shop-coklat);
	box-shadow: 0 0 0 3px rgba(107, 87, 68, 0.12);
}

/* =====================================================================
 * CATEGORY NAVIGATION -- horizontal scroll di container-nya sendiri saja
 * (bukan body) supaya tidak pernah menyebabkan page-level overflow.
 * ===================================================================== */
body.zsd-halaman-shop .zsd-shop-kategori-nav {
	border-bottom: 1px solid var(--zsd-shop-garis);
	padding: 0;
	margin-bottom: 40px;
}
body.zsd-halaman-shop .zsd-shop-kategori-nav-scroll {
	max-width: var(--zsd-shop-container-max);
	margin: 0 auto;
	padding: 0 24px;
	display: flex;
	gap: 8px;
	overflow-x: auto;
	-webkit-overflow-scrolling: touch;
	scrollbar-width: thin;
}
body.zsd-halaman-shop .zsd-shop-kategori-item {
	flex-shrink: 0;
	white-space: nowrap;
	padding: 16px 4px;
	margin-right: 20px;
	font-size: 14px;
	font-weight: 500;
	color: var(--zsd-shop-teks-muted);
	text-decoration: none;
	border-bottom: 2px solid transparent;
	transition: color 0.2s ease, border-color 0.2s ease;
}
body.zsd-halaman-shop .zsd-shop-kategori-item:hover {
	color: var(--zsd-shop-teks);
}
body.zsd-halaman-shop .zsd-shop-kategori-item.zsd-aktif {
	color: var(--zsd-shop-coklat);
	border-bottom-color: var(--zsd-shop-coklat);
	font-weight: 600;
}

/* =====================================================================
 * PRODUCT TOOLBAR (di dalam #primary, sejajar sama header sidebar Filter)
 * ===================================================================== */
body.zsd-halaman-shop .zsd-shop-toolbar {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 16px;
	padding-bottom: 20px;
	margin-bottom: 20px;
	border-bottom: 1px solid var(--zsd-shop-garis);
	flex-wrap: wrap;
}
body.zsd-halaman-shop .zsd-shop-toolbar-tombol-filter {
	display: none; /* dimunculkan lewat media query <=1024px, lihat bawah */
	align-items: center;
	gap: 8px;
	background: #fff;
	border: 1px solid var(--zsd-shop-garis);
	border-radius: var(--zsd-shop-radius);
	padding: 9px 16px;
	font-size: 13px;
	font-weight: 600;
	color: var(--zsd-shop-teks);
	cursor: pointer;
}
body.zsd-halaman-shop .zsd-shop-toolbar-tombol-filter .zsd-shop-ikon {
	width: 16px;
	height: 16px;
}
body.zsd-halaman-shop .zsd-shop-toolbar-native {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 16px;
	flex: 1 1 auto;
	flex-wrap: wrap;
}
body.zsd-halaman-shop .woocommerce-result-count {
	margin: 0;
	font-size: 13px;
	color: var(--zsd-shop-teks-muted);
}
body.zsd-halaman-shop .woocommerce-ordering {
	margin: 0;
}
body.zsd-halaman-shop .woocommerce-ordering select,
body.zsd-halaman-shop .botiga-sorting-right-inner select {
	border: 1px solid var(--zsd-shop-garis);
	border-radius: 10px;
	padding: 8px 32px 8px 14px;
	font-size: 13px;
	color: var(--zsd-shop-teks);
	background-color: #fff;
}

/* =====================================================================
 * SIDEBAR FILTER (#secondary) -- editorial, restrained (LOCKED bagian 10:
 * "tidak menjadi gray card besar, tidak seperti admin panel").
 * ===================================================================== */
body.zsd-halaman-shop #secondary.widget-area {
	background: transparent;
	border: none;
	box-shadow: none;
	padding: 0;
}
body.zsd-halaman-shop .zsd-shop-filter-header {
	display: flex;
	align-items: center;
	gap: 14px;
	padding-bottom: 16px;
	margin-bottom: 20px;
	border-bottom: 1px solid var(--zsd-shop-garis);
}
body.zsd-halaman-shop .zsd-shop-filter-header-judul {
	font-size: 13px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.08em;
	color: var(--zsd-shop-teks);
}
body.zsd-halaman-shop .zsd-shop-filter-reset {
	margin-left: auto;
	font-size: 12px;
	color: var(--zsd-shop-teks-muted);
	text-decoration: underline;
}
body.zsd-halaman-shop .zsd-shop-filter-reset:hover {
	color: var(--zsd-shop-coklat);
}
body.zsd-halaman-shop .zsd-shop-filter-tutup {
	display: none; /* cuma relevan waktu jadi drawer, lihat media query <=1024px */
	background: transparent;
	border: none;
	font-size: 22px;
	line-height: 1;
	color: var(--zsd-shop-teks-muted);
	cursor: pointer;
	padding: 4px;
}

body.zsd-halaman-shop #secondary .widget {
	background: transparent !important;
	border: none !important;
	box-shadow: none !important;
	padding: 0 0 26px !important;
	margin: 0 0 26px !important;
	border-bottom: 1px solid var(--zsd-shop-garis) !important;
}
body.zsd-halaman-shop #secondary .widget:last-child {
	border-bottom: none !important;
	padding-bottom: 0 !important;
	margin-bottom: 0 !important;
}
body.zsd-halaman-shop #secondary .widget-title,
body.zsd-halaman-shop #secondary .widgettitle {
	font-size: 12px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.06em;
	color: var(--zsd-shop-teks);
	margin: 0 0 14px;
}
body.zsd-halaman-shop #secondary select {
	width: 100%;
	border: 1px solid var(--zsd-shop-garis);
	border-radius: 10px;
	padding: 9px 12px;
	font-size: 13px;
	color: var(--zsd-shop-teks);
	background-color: #fff;
	box-sizing: border-box;
}
body.zsd-halaman-shop #secondary .select2-selection {
	border-radius: 10px !important;
	border-color: var(--zsd-shop-garis) !important;
	min-height: 40px !important;
}
body.zsd-halaman-shop #secondary .price_slider .ui-slider-range {
	background: var(--zsd-shop-coklat) !important;
}
body.zsd-halaman-shop #secondary .price_slider .ui-slider-handle {
	background: #fff !important;
	border: 2px solid var(--zsd-shop-coklat) !important;
	border-radius: 50% !important;
	width: 15px !important;
	height: 15px !important;
	top: -5px !important;
	outline: none;
}
body.zsd-halaman-shop #secondary .price_slider_amount .button,
body.zsd-halaman-shop #secondary .price_slider_amount button[type="submit"] {
	background: var(--zsd-shop-coklat) !important;
	color: #fff !important;
	border-radius: 15px !important;
	border: none !important;
	padding: 8px 18px !important;
	font-size: 12px !important;
	font-weight: 600;
}
body.zsd-halaman-shop #secondary .product_list_widget img {
	border-radius: 8px;
}
body.zsd-halaman-shop #secondary .product_list_widget .woocommerce-Price-amount {
	color: var(--zsd-shop-coklat-gelap);
}

/* =====================================================================
 * KATEGORI FILTER CONTROL -- round 3. Widget "Product Categories" bawaan
 * TERNYATA sudah di-enhance jadi select2 SECARA OTOMATIS oleh tema Botiga
 * sendiri (dikonfirmasi live lewat Claude in Chrome: elemen <select> aslinya
 * sudah punya class "select2-hidden-accessible" TANPA kita ubah apa pun) --
 * artinya kontrol yang benar-benar tampil ke user BUKAN dropdown native
 * browser (yang CSS-nya kebal), tapi DOM select2 (.select2-container /
 * .select2-dropdown) yang sepenuhnya bisa di-restyle CSS. Value/name/submit
 * behavior select aslinya SAMA SEKALI tidak disentuh -- ini murni restyle
 * presentation dari select2 yang sudah otomatis aktif, BUKAN filtering
 * engine baru.
 * CATATAN: `.select2-dropdown` di-append browser ke akhir <body> saat
 * dibuka (bukan di dalam #secondary), makanya di-scope langsung ke
 * `body.zsd-halaman-shop` (bukan lewat #secondary).
 * ===================================================================== */
body.zsd-halaman-shop .select2-container--default .select2-selection--single {
	border: 1px solid var(--zsd-shop-garis);
	border-radius: 10px;
	height: 42px;
	background: #fff;
}
body.zsd-halaman-shop .select2-container--default .select2-selection--single .select2-selection__rendered {
	line-height: 40px;
	padding-left: 12px;
	padding-right: 30px;
	font-size: 13px;
	color: var(--zsd-shop-teks);
}
body.zsd-halaman-shop .select2-container--default .select2-selection--single .select2-selection__arrow {
	height: 40px;
	right: 8px;
}
body.zsd-halaman-shop .select2-container--default.select2-container--open .select2-selection--single,
body.zsd-halaman-shop .select2-container--default .select2-selection--single:focus {
	border-color: var(--zsd-shop-coklat);
	outline: none;
	box-shadow: 0 0 0 3px rgba(107, 87, 68, 0.12);
}
body.zsd-halaman-shop .select2-dropdown {
	border: 1px solid var(--zsd-shop-garis);
	border-radius: 10px;
	overflow: hidden;
	box-shadow: 0 10px 24px rgba(43, 38, 34, 0.1);
}
body.zsd-halaman-shop .select2-search--dropdown {
	padding: 8px;
}
body.zsd-halaman-shop .select2-search--dropdown .select2-search__field {
	border: 1px solid var(--zsd-shop-garis);
	border-radius: 8px;
	padding: 6px 10px;
	font-size: 13px;
	outline: none;
}
body.zsd-halaman-shop .select2-results__options {
	max-height: 260px;
}
body.zsd-halaman-shop .select2-results__option {
	font-size: 13px;
	padding: 8px 12px;
	color: var(--zsd-shop-teks);
}
body.zsd-halaman-shop .select2-results__option--highlighted[aria-selected] {
	background: var(--zsd-shop-krem) !important;
	color: var(--zsd-shop-teks) !important;
}
body.zsd-halaman-shop .select2-results__option[aria-selected="true"] {
	background: var(--zsd-shop-krem-lebih-muda);
	color: var(--zsd-shop-coklat-gelap);
	font-weight: 600;
}
body.zsd-halaman-shop .select2-results__options::-webkit-scrollbar {
	width: 8px;
}
body.zsd-halaman-shop .select2-results__options::-webkit-scrollbar-thumb {
	background: var(--zsd-shop-garis);
	border-radius: 8px;
}

/* =====================================================================
 * SHOP CONTENT -- baris Filter Sidebar + Product Grid, kolom sesuai Filter
 * ON/OFF (LOCKED bagian 10/11/21). `.row.main-row` sudah flex bawaan
 * Botiga (dikonfirmasi live), cuma diatur ulang width/gap-nya di sini --
 * TIDAK diubah jadi display lain.
 * ===================================================================== */
body.zsd-halaman-shop .row.main-row {
	align-items: flex-start;
	gap: 48px;
	background: transparent !important;
	border-radius: 0 !important;
	padding: 0 !important;
}
/* Hero/Intro/Search/CategoryNav render INSIDE .row.main-row as flex children
 * alongside #primary/#secondary (confirmed live 2026-08-30 -- the
 * woocommerce_before_main_content hook fires after Botiga opens the row, not
 * before). Without an explicit full-row width, Intro + Search were narrow
 * enough to sit side-by-side on the same flex line (root cause of "search
 * floating beside the heading"). Forcing each of these four blocks onto its
 * own full-width line fixes both that and the vertical stacking order. Hero
 * itself doesn't need this (its width:100vw full-bleed rule already forces
 * it onto its own line). */
body.zsd-halaman-shop .row.main-row > .zsd-shop-intro,
body.zsd-halaman-shop .row.main-row > .zsd-shop-search-wrap,
body.zsd-halaman-shop .row.main-row > .zsd-shop-kategori-nav {
	flex: 1 1 100%;
	width: 100%;
	box-sizing: border-box;
}
body.zsd-halaman-shop #primary.site-main {
	width: auto;
	flex: 1 1 0%;
	min-width: 0;
}
body.zsd-halaman-shop ul.products {
	display: grid !important;
	grid-template-columns: repeat(3, 1fr) !important;
	gap: 32px 24px !important;
	width: 100% !important;
	float: none !important;
	margin: 0 !important;
	clear: both;
	align-items: start;
}
body.zsd-halaman-shop ul.products li.product {
	width: 100% !important;
	margin: 0 !important;
	padding: 0 !important;
	float: none !important;
}
body.zsd-halaman-shop ul.products li.product::before,
body.zsd-halaman-shop ul.products li.product::after {
	content: none !important;
}

/* Filter ON (default) -- sidebar 260px + grid 3 kolom desktop */
body.zsd-shop-filter-on #secondary.widget-area {
	flex: 0 0 260px;
	width: 260px;
}

/* Filter OFF -- sidebar disembunyikan (widget TETAP di-render server-side,
 * cuma visual disembunyikan -- widget logic tidak disentuh), grid full-width
 * 4 kolom. */
body.zsd-shop-filter-off #secondary.widget-area {
	display: none !important;
}
body.zsd-shop-filter-off #primary.site-main {
	width: 100% !important;
	flex: 1 1 100% !important;
}
body.zsd-shop-filter-off ul.products {
	grid-template-columns: repeat(4, 1fr) !important;
}

/* =====================================================================
 * PRODUCT CARD
 * ===================================================================== */
body.zsd-halaman-shop ul.products li.product .loop-image-wrap {
	position: relative;
	aspect-ratio: 1 / 1;
	overflow: hidden;
	border-radius: var(--zsd-shop-radius);
	background: var(--zsd-shop-krem-lebih-muda);
	margin: 0 0 14px;
	display: block;
}
body.zsd-halaman-shop ul.products li.product .loop-image-wrap a {
	display: block;
	width: 100%;
	height: 100%;
}
body.zsd-halaman-shop ul.products li.product .loop-image-wrap img {
	position: absolute;
	inset: 0;
	width: 100% !important;
	height: 100% !important;
	object-fit: cover;
	transition: transform 0.4s ease;
}
@media (hover: hover) and (pointer: fine) {
	body.zsd-halaman-shop ul.products li.product:hover .loop-image-wrap img {
		transform: scale(1.05);
	}
}
/* Quick-view overlay Botiga -- LOCKED bagian 16 melarang quick-view overlay
 * di hover, jadi disembunyikan (bukan dihapus dari DOM). PENTING: selector di
 * bawah SENGAJA dibatasi ke elemen <a>/<button> SAJA (bukan wildcard div) --
 * ditemukan lewat live debug 2026-08-30 bahwa .loop-image-wrap sendiri
 * (wrapper gambar produk) juga punya class "botiga-quick-view-button-layout2"
 * (nama MODE layout Botiga, bukan tombol quick-view itu sendiri), jadi
 * selector wildcard lama `[class*="quick-view-button"]` ikut mengenai WRAPPER
 * GAMBAR itu sendiri dan menyembunyikannya total (root cause bug "gambar
 * produk hilang"). Selector baru ini cuma menyasar tombol/link quick-view
 * yang BENERAN ada di dalam wrapper, tidak pernah kena wrapper-nya sendiri. */
body.zsd-halaman-shop ul.products li.product .loop-image-wrap a[class*="quick-view"],
body.zsd-halaman-shop ul.products li.product .loop-image-wrap button[class*="quick-view"] {
	display: none !important;
}

/* =====================================================================
 * PRODUCT CARD -- STATEFUL COMPONENT (round 3 correction, section H/L).
 * ROOT CAUSE ditemukan lewat live debug (Claude in Chrome, add-to-cart
 * beneran dites di staging): aturan round-2 di atas (".button,
 * a.add_to_cart_button{display:inline-flex!important}", dibuat buat
 * benerin bug "tombol uppercase pill") TERNYATA punya CSS specificity
 * lebih tinggi daripada aturan sembunyikan tombol asli di
 * shop-tombol-keranjang.css
 * (".add_to_cart_button.zsd-disembunyikan-krn-di-keranjang{display:none
 * !important}") -- akibatnya tombol "+ Keranjang" ASLI TETAP KELIHATAN
 * (numpuk horizontal sama tombol "Hapus dari Keranjang" di sampingnya,
 * plus link native "View cart" ikut nyempil di baris yang SAMA, meluber
 * keluar kartu ke kolom sebelah) begitu produk sudah masuk keranjang --
 * INI penyebab SEBENARNYA "mobile card kacau begitu ada produk di
 * keranjang", BUKAN soal margin/height (dikonfirmasi visual lewat
 * screenshot live SEBELUM fix ini ditulis, bukan cuma dugaan kode).
 * Fix: (1) selector override lebih spesifik supaya rule "sembunyikan"
 * menang lagi, (2) `.loop-button-wrap` dipaksa flex-column (lihat di
 * atas) supaya SEMUA kemungkinan child SELALU tersusun vertikal apa pun
 * display bawaan masing-masing, (3) 3 state (NOT IN CART / IN CART /
 * VIEW CART) di-restyle jadi hierarki tenang: badge "✓ Di Keranjang"
 * (primer, jelas) + "Hapus dari keranjang" (sekunder, teks kecil) +
 * "Lihat Keranjang →" (tersier, kontekstual) -- BUKAN 2-3 tombol besar
 * berjajar. TIDAK ADA logic add/remove/view-cart yang diubah -- shop-
 * tombol-keranjang.js & woo-cart-fix.js (keduanya PROTECTED) TIDAK
 * disentuh sama sekali, murni override CSS di scope Shop.
 * ===================================================================== */
body.zsd-halaman-shop ul.products li.product a.add_to_cart_button.zsd-disembunyikan-krn-di-keranjang {
	display: none !important;
}
body.zsd-halaman-shop ul.products li.product .zsd-tombol-hapus-shop[style*="display: none"] {
	display: none !important;
}
body.zsd-halaman-shop ul.products li.product .zsd-tombol-hapus-shop {
	display: flex !important;
	flex-direction: column;
	align-items: flex-start;
	gap: 5px;
	width: auto !important;
	max-width: 100%;
	box-sizing: border-box;
	background: none !important;
	border: none !important;
	border-radius: 0 !important;
	padding: 0 !important;
	text-align: left !important;
	text-transform: none !important;
	letter-spacing: normal !important;
	font-size: 12px !important;
	font-weight: 500 !important;
	color: var(--zsd-shop-teks-muted) !important;
	white-space: normal;
	overflow-wrap: break-word;
	cursor: pointer;
}
body.zsd-halaman-shop ul.products li.product .zsd-tombol-hapus-shop::before {
	content: '✓  Di Keranjang';
	display: inline-flex;
	align-items: center;
	width: fit-content;
	padding: 5px 12px;
	border-radius: 999px;
	background: rgba(15, 110, 86, 0.1);
	color: #0f6e56;
	font-size: 11px;
	font-weight: 700;
}
body.zsd-halaman-shop ul.products li.product .zsd-tombol-hapus-shop:hover {
	color: #c0392b !important;
	text-decoration: underline;
}
body.zsd-halaman-shop ul.products li.product .zsd-tombol-hapus-shop.zsd-sedang-proses {
	pointer-events: none;
}
body.zsd-halaman-shop ul.products li.product .zsd-tombol-hapus-shop.zsd-sedang-proses::before {
	opacity: 0.55;
}
body.zsd-halaman-shop ul.products li.product .added_to_cart.wc-forward {
	display: inline-flex !important;
	align-items: center;
	width: auto !important;
	max-width: 100%;
	margin: 0 !important;
	padding: 0 !important;
	background: none !important;
	border: none !important;
	border-radius: 0 !important;
	font-size: 12px !important;
	font-weight: 600;
	color: var(--zsd-shop-coklat-gelap);
	text-decoration: none;
	white-space: normal;
	overflow-wrap: break-word;
	box-sizing: border-box;
}
body.zsd-halaman-shop ul.products li.product .loop-button-wrap .wc-forward::before {
	content: none !important;
}
body.zsd-halaman-shop ul.products li.product .added_to_cart.wc-forward::after {
	content: '\2192';
	margin-left: 4px;
}
body.zsd-halaman-shop ul.products li.product .added_to_cart.wc-forward:hover {
	color: var(--zsd-shop-coklat);
	text-decoration: underline;
}
body.zsd-halaman-shop .zsd-kartu-kategori {
	display: block;
	font-size: 11px;
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: 0.04em;
	color: var(--zsd-shop-teks-muted);
	margin: 0 0 4px;
}
body.zsd-halaman-shop ul.products li.product .woocommerce-loop-product__title {
	font-size: 15px;
	font-weight: 600;
	color: var(--zsd-shop-teks);
	margin: 0 0 6px;
	line-height: 1.4;
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
	overflow: hidden;
	min-height: calc(1.4em * 2);
}
body.zsd-halaman-shop ul.products li.product .price {
	display: block;
	color: var(--zsd-shop-coklat-gelap);
	font-weight: 600;
	font-size: 14px;
	margin-bottom: 4px;
}
body.zsd-halaman-shop ul.products li.product .price del {
	color: var(--zsd-shop-teks-muted);
	opacity: 0.7;
	font-weight: 400;
	margin-right: 6px;
}
body.zsd-halaman-shop ul.products li.product .price ins {
	text-decoration: none;
}

/* BARU 2026-09-12 -- "Product Card" (TARGETED UPDATE dari Ferdian): toggle
 * Tampilkan Harga/Tampilkan Tombol, lihat zsd_shop_card_harga_tampil()/
 * zsd_shop_card_tombol_tampil() di includes/shop-restyle.php. Hide via CSS
 * (bukan hapus data) -- konsisten "OFF = hide, bukan delete". */
body.zsd-shop-harga-off ul.products li.product .price {
	display: none !important;
}
body.zsd-shop-tombol-off ul.products li.product .loop-button-wrap {
	display: none !important;
}

body.zsd-halaman-shop ul.products li.product .loop-button-wrap {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: 6px;
	margin-top: 10px;
	text-align: left;
	width: 100%;
	box-sizing: border-box;
}
/* REVISI 2026-08-31 (round 2) -- BENTUK disamakan PERSIS ke tombol
 * Feature Collection Home: radius 15px sudah sama, yang beda LEBAR --
 * FC width:100% (selebar kartu), bukan sempit/min-width kayak sebelumnya
 * (itu yang bikin kelihatan "pill" kecil). Warna solid TETAP tidak
 * diubah (Ferdian eksplisit: jangan hilangkan background). Cuma ganti
 * width -- class/atribut add_to_cart_button/ajax_add_to_cart/data-
 * product_id tidak disentuh, AJAX add-to-cart tetap jalan normal. */
body.zsd-halaman-shop ul.products li.product .button,
body.zsd-halaman-shop ul.products li.product a.add_to_cart_button {
	display: flex !important;
	align-items: center;
	justify-content: center;
	width: 100% !important;
	box-sizing: border-box;
	text-align: center;
	background: var(--zsd-shop-coklat) !important;
	color: #fff !important;
	border-radius: var(--zsd-shop-radius) !important;
	border: none !important;
	padding: 10px 16px !important;
	font-size: 13px !important;
	font-weight: 600;
	text-transform: none !important;
	line-height: 1.3;
	transition: background 0.2s ease;
}
body.zsd-halaman-shop ul.products li.product .button:hover,
body.zsd-halaman-shop ul.products li.product a.add_to_cart_button:hover {
	background: var(--zsd-shop-coklat-gelap) !important;
	color: #fff !important;
}
@media (hover: hover) and (pointer: fine) {
	body.zsd-halaman-shop ul.products li.product .button,
	body.zsd-halaman-shop ul.products li.product a.add_to_cart_button {
		transition: background 0.2s ease, transform 0.2s ease;
	}
}
/* Tombol "Hapus dari Keranjang" (shop-tombol-keranjang.css sudah styling
 * dasarnya sendiri) -- diselaraskan radius/warna ke sistem visual Shop baru
 * TANPA sentuh logic/selector JS-nya sama sekali. */
body.zsd-halaman-shop .zsd-tombol-hapus-shop {
	border-radius: var(--zsd-shop-radius);
}

/* =====================================================================
 * PAGINATION
 * ===================================================================== */
body.zsd-halaman-shop .woocommerce-pagination {
	margin: 48px 0 0;
}
body.zsd-halaman-shop .woocommerce-pagination ul.page-numbers,
body.zsd-halaman-shop .woocommerce-pagination {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 6px;
	list-style: none;
	padding: 0;
}
body.zsd-halaman-shop .woocommerce-pagination .page-numbers {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 36px;
	height: 36px;
	padding: 0 8px;
	border-radius: 10px;
	font-size: 13px;
	font-weight: 600;
	color: var(--zsd-shop-teks-muted);
	text-decoration: none;
	box-sizing: border-box;
}
body.zsd-halaman-shop .woocommerce-pagination a.page-numbers:hover {
	background: var(--zsd-shop-krem);
	color: var(--zsd-shop-teks);
}
body.zsd-halaman-shop .woocommerce-pagination .page-numbers.current {
	background: var(--zsd-shop-coklat);
	color: #fff;
}
body.zsd-halaman-shop .woocommerce-pagination .page-numbers.dots {
	color: var(--zsd-shop-teks-muted);
}
body.zsd-halaman-shop .woocommerce-pagination .page-numbers.next,
body.zsd-halaman-shop .woocommerce-pagination .page-numbers.prev {
	color: var(--zsd-shop-coklat);
	font-size: 16px;
}

/* =====================================================================
 * EMPTY STATE
 * ===================================================================== */
body.zsd-halaman-shop .zsd-shop-kosong {
	text-align: center;
	padding: 64px 20px;
}
body.zsd-halaman-shop .zsd-shop-kosong-judul {
	font-size: 20px;
	font-weight: 600;
	color: var(--zsd-shop-teks);
	margin: 0 0 8px;
}
body.zsd-halaman-shop .zsd-shop-kosong-deskripsi {
	font-size: 14px;
	color: var(--zsd-shop-teks-muted);
	margin: 0 0 24px;
	max-width: 420px;
	margin-left: auto;
	margin-right: auto;
}
body.zsd-halaman-shop .zsd-shop-kosong-tombol {
	display: inline-block;
	background: var(--zsd-shop-coklat);
	color: #fff;
	text-decoration: none;
	border-radius: var(--zsd-shop-radius);
	padding: 12px 24px;
	font-size: 14px;
	font-weight: 600;
}
body.zsd-halaman-shop .zsd-shop-kosong-tombol:hover {
	background: var(--zsd-shop-coklat-gelap);
	color: #fff;
}

/* =====================================================================
 * MOBILE FILTER DRAWER (<=1024px, lihat bagian breakpoint di bawah) --
 * backdrop-nya elemen baru yang ditambah shop-restyle.js.
 * ===================================================================== */
.zsd-shop-drawer-backdrop {
	position: fixed;
	inset: 0;
	background: rgba(20, 16, 12, 0.42);
	z-index: 9998;
	opacity: 0;
	pointer-events: none;
	transition: opacity 0.25s ease;
}
body.zsd-shop-drawer-terbuka .zsd-shop-drawer-backdrop {
	opacity: 1;
	pointer-events: auto;
}
@media (prefers-reduced-motion: reduce) {
	.zsd-shop-drawer-backdrop {
		transition: none;
	}
}

/* =====================================================================
 * ACCESSIBILITY -- focus-visible universal di dalam scope Shop.
 * ===================================================================== */
body.zsd-halaman-shop .zsd-shop-hero-panah:focus-visible,
body.zsd-halaman-shop .zsd-shop-search-tombol:focus-visible,
body.zsd-halaman-shop .zsd-shop-search-input:focus-visible,
body.zsd-halaman-shop .zsd-shop-kategori-item:focus-visible,
body.zsd-halaman-shop .zsd-shop-toolbar-tombol-filter:focus-visible,
body.zsd-halaman-shop .zsd-shop-filter-tutup:focus-visible,
body.zsd-halaman-shop .zsd-shop-kosong-tombol:focus-visible,
body.zsd-halaman-shop ul.products li.product a.add_to_cart_button:focus-visible,
body.zsd-halaman-shop .woocommerce-pagination .page-numbers:focus-visible {
	outline: 2px solid var(--zsd-shop-coklat);
	outline-offset: 2px;
}
body.zsd-halaman-shop .screen-reader-text {
	position: absolute;
	width: 1px;
	height: 1px;
	overflow: hidden;
	clip: rect(1px, 1px, 1px, 1px);
	white-space: nowrap;
}

/* =====================================================================
 * TABLET -- 641px sampai 1024px (breakpoint ZENOS sendiri, BUKAN andalkan
 * Botiga Customizer shop-columns-tablet-4).
 * ===================================================================== */
@media (max-width: 1024px) {
	body.zsd-halaman-shop .zsd-shop-hero-swiper {
		height: 330px; /* target visual tablet ~300-360px */
	}
	body.zsd-halaman-shop .zsd-shop-hero-judul {
		font-size: 26px;
	}

	body.zsd-halaman-shop .zsd-shop-toolbar-tombol-filter {
		display: inline-flex;
	}

	body.zsd-halaman-shop .row.main-row {
		flex-direction: column;
		gap: 0;
	}
	body.zsd-halaman-shop #primary.site-main {
		width: 100% !important;
		flex: 1 1 100% !important;
	}
	body.zsd-shop-filter-on ul.products,
	body.zsd-shop-filter-off ul.products {
		grid-template-columns: repeat(2, 1fr) !important;
		gap: 24px 16px !important;
	}

	/* Sidebar -> drawer ZENOS sendiri (presentation-only, filter logic
	 * TETAP widget native yang sama -- lihat catatan jujur di header PHP
	 * soal `.close-sidebar` Botiga yang sengaja TIDAK dipakai di sini). */
	body.zsd-shop-filter-on #secondary.widget-area {
		position: fixed;
		top: 0;
		right: 0;
		bottom: 0;
		width: min(360px, 88vw);
		max-width: 100%;
		height: 100vh;
		overflow-y: auto;
		background: var(--zsd-shop-krem-lebih-muda);
		z-index: 9999;
		transform: translateX(100%);
		transition: transform 0.3s ease;
		box-shadow: -8px 0 24px rgba(0, 0, 0, 0.14);
		padding: 24px 20px;
		box-sizing: border-box;
	}
	body.zsd-shop-drawer-terbuka #secondary.widget-area {
		transform: translateX(0);
	}
	body.zsd-shop-drawer-terbuka {
		overflow: hidden;
	}
	body.zsd-halaman-shop .zsd-shop-filter-tutup {
		display: block;
	}
	@media (prefers-reduced-motion: reduce) {
		body.zsd-shop-filter-on #secondary.widget-area {
			transition: none;
		}
	}
}

/* =====================================================================
 * MOBILE -- <=640px.
 * ===================================================================== */
@media (max-width: 640px) {
	body.zsd-halaman-shop .zsd-shop-container,
	body.zsd-halaman-shop .zsd-shop-kategori-nav-scroll {
		padding-left: 16px;
		padding-right: 16px;
	}
	body.zsd-halaman-shop .zsd-shop-hero-swiper {
		height: 250px; /* target visual mobile ~220-280px */
	}
	body.zsd-halaman-shop .zsd-shop-hero-judul {
		font-size: 20px;
	}
	body.zsd-halaman-shop .zsd-shop-hero-copy {
		font-size: 13px;
	}
	body.zsd-halaman-shop .zsd-shop-hero-konten {
		padding-bottom: 28px;
	}
	body.zsd-halaman-shop .zsd-shop-hero-panah {
		width: 40px;
		height: 40px;
	}

	body.zsd-halaman-shop .zsd-shop-intro {
		padding: 40px 0 24px;
	}
	body.zsd-halaman-shop .zsd-shop-intro-judul {
		font-size: 22px;
	}

	body.zsd-halaman-shop .zsd-shop-search {
		max-width: 100%;
	}

	body.zsd-halaman-shop ul.products {
		grid-template-columns: repeat(2, 1fr) !important;
		gap: 20px 14px !important;
	}

	body.zsd-halaman-shop .zsd-shop-toolbar {
		gap: 10px;
	}
	body.zsd-halaman-shop .zsd-shop-toolbar-native {
		gap: 10px;
	}

	body.zsd-halaman-shop #secondary.widget-area {
		width: 100% !important;
	}
}
