/* ==========================================================================
   IBS Shop 2026 — katalog dan halaman produk

   Dunia yang sama dengan beranda dan halaman perusahaan: bidang polistirena,
   tinta grafit, satu biru assay sebagai status, bingkai rambut 2px, Archivo
   untuk teks dan Spline Sans Mono untuk angka, kode, dan label data.

   Markup WooCommerce tidak diubah sama sekali — semua di bawah ini bekerja di
   atas kelas yang memang sudah dikeluarkan WooCommerce dan tema. Kalau file ini
   hilang, katalognya kembali seperti semula tanpa sisa.

   Dilingkupi .ibs-shop26 pada <body>, jadi rute lain tidak terpengaruh.
   ========================================================================== */

.ibs-shop26 {
	--ground:      var(--ds-ground,     #f1f4f7);
	--frame:       var(--ds-frame,      #ffffff);
	--hairline:    var(--ds-hairline,   #d5dce4);
	--ink:         var(--ds-ink,        #10192a);
	--ink-2:       var(--ds-ink-2,      #46536a);
	--ink-3:       var(--ds-ink-3,      #5c6980);
	--assay:       var(--ds-assay,      #0b4fd1);
	--assay-deep:  var(--ds-assay-deep, #072f7d);
	--assay-wash:  var(--ds-assay-wash, #e4ecfb);

	--r:      2px;
	--rule:   1px solid var(--hairline);
	--ease:   cubic-bezier(0.16, 1, 0.3, 1);
	--sans:   'Archivo', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', sans-serif;
	--mono:   'Spline Sans Mono', ui-monospace, SFMono-Regular, Menlo, monospace;
}

/* --------------------------------------------------------------------------
   Spanduk judul tema.

   Ia menuliskan "Product & Solution" — bahasa Inggris, di tengah, di atas slab
   biru setinggi 113px yang tidak membawa apa pun selain kata itu. Masthead
   katalog menggantikannya, membawa jumlah produk dan jalan bertanya.
   Dua alamat, karena spanduk itu diangkat keluar dari header oleh JavaScript
   di tengah jalan — alasan lengkapnya ada di ibs-pages-2026/style.css.
   -------------------------------------------------------------------------- */
.ibs-shop26 .ibs-banner-host,
.ibs-shop26 .ibs-page-banner,
.ibs-shop26 .sc_layouts_title,
.ibs-shop26 .top_panel .elementor-top-section:has(.sc_layouts_title) {
	display: none;
}

.ibs-shop26 .page_content_wrap { background: var(--ground); }

/* Tema menyembunyikan .list_products_header karena isinya cuma judul arsip
   WooCommerce yang mengulang spanduk. Judul itu kini tidak dicetak sama sekali
   (lihat ibs-shop-2026.php), dan pembungkusnya jadi tempat masthead ini
   berdiri — satu-satunya hook sebelum loop yang tidak mendarat di dalam sesuatu
   yang display:none. */
/* Dua kelas body, bukan satu: aturan tema berbunyi `.woocommerce
   .list_products_header { display: none }` — kekhususan yang sama dengan
   `.ibs-shop26 .list_products_header`, dan berkasnya dimuat belakangan, jadi
   seri dimenangkan tema. Menambahkan kelas body kedua memutus seri itu tanpa
   perlu !important. */
.ibs-shop26.woocommerce .list_products_header,
.ibs-shop26.woocommerce-page .list_products_header { display: block; }
.ibs-shop26.woocommerce .woocommerce-products-header,
.ibs-shop26.woocommerce-page .woocommerce-products-header { display: none; }

/* --------------------------------------------------------------------------
   Masthead katalog
   -------------------------------------------------------------------------- */
.ibs-cat26 {
	padding: clamp(28px, 4vw, 52px) 0 clamp(24px, 3vw, 36px);
	border-bottom: 1px solid var(--ink);
	margin-bottom: clamp(24px, 3vw, 40px);
}

.ibs-cat26__crumb {
	font-family: var(--mono);
	font-size: 0.6875rem;
	letter-spacing: 0.02em;
	text-transform: uppercase;
	color: var(--ink-3);
	display: flex;
	gap: 8px;
	align-items: center;
	flex-wrap: wrap;
	margin-bottom: 22px;
}
.ibs-shop26 .ibs-cat26__crumb a {
	color: var(--ink-3);
	text-decoration: none;
	border-bottom: 1px solid transparent;
	display: inline-flex;
	align-items: center;
	min-height: 24px;
}
.ibs-shop26 .ibs-cat26__crumb a:hover { color: var(--assay); border-bottom-color: currentColor; }
.ibs-cat26__crumb [aria-current="page"] { color: var(--ink); }

.ibs-cat26__row {
	display: grid;
	grid-template-columns: minmax(0, 7fr) minmax(0, 5fr);
	gap: clamp(24px, 4vw, 64px);
	align-items: end;
}

.ibs-shop26 .ibs-cat26__h1 {
	font-family: var(--sans);
	font-size: clamp(1.875rem, 3vw, 2.75rem);
	line-height: 1.08;
	letter-spacing: -0.03em;
	font-weight: 600;
	color: var(--ink);
	margin: 0 0 14px;
}
.ibs-cat26__lede {
	color: var(--ink-2);
	max-width: 56ch;
	margin: 0;
	line-height: 1.6;
}

/* Tiga fakta yang ditanyakan pembeli sebelum menelusuri: seberapa besar
   katalognya, dari berapa principal, dan bagaimana harganya bekerja — karena
   toko ini tidak menampilkan harga sama sekali dan itu perlu dijelaskan, bukan
   didiamkan. */
.ibs-cat26__facts {
	margin: 0;
	display: grid;
	gap: 0;
	border-top: var(--rule);
}
.ibs-cat26__facts > div {
	display: grid;
	grid-template-columns: minmax(96px, 0.8fr) minmax(0, 1.4fr);
	gap: 14px;
	padding: 10px 0;
	border-bottom: var(--rule);
}
.ibs-cat26__facts dt {
	margin: 0;
	font-family: var(--mono);
	font-size: 0.6875rem;
	letter-spacing: 0.02em;
	text-transform: uppercase;
	color: var(--ink-3);
	padding-top: 2px;
}
.ibs-cat26__facts dd {
	margin: 0;
	color: var(--ink);
	font-size: 0.9375rem;
}
.ibs-shop26 .ibs-cat26__facts a { color: var(--assay); text-decoration: none; border-bottom: 1px solid var(--hairline); }
.ibs-shop26 .ibs-cat26__facts a:hover { border-bottom-color: currentColor; }

/* --------------------------------------------------------------------------
   Bilah alat: jumlah hasil dan pengurutan.
   -------------------------------------------------------------------------- */
.ibs-shop26 .woocommerce-result-count {
	font-family: var(--mono);
	font-size: 0.75rem;
	letter-spacing: 0.02em;
	color: var(--ink-3);
	font-variant-numeric: tabular-nums;
	margin: 0;
}

.ibs-shop26 .woocommerce-ordering select.orderby,
.ibs-shop26 .woocommerce-ordering .select_container select {
	font-family: var(--sans);
	font-size: 0.9375rem;
	color: var(--ink);
	background-color: var(--frame);
	border: var(--rule);
	border-radius: var(--r);
	min-height: 46px;
	padding: 0 40px 0 14px;
	box-shadow: none;
}
/* Panah tema ikut warna tinta, bukan oranye bawaannya — selama <select>
   bawaannya memang yang terlihat. Begitu komponen sendiri terpasang, panah itu
   tertinggal mengambang di sebelah kanan tanpa kotak yang dimilikinya. */
.ibs-shop26 .woocommerce-ordering .select_container::after,
.ibs-shop26 .woocommerce-ordering .select_container::before { color: var(--ink-3) !important; }

.ibs-shop26 form.woocommerce-ordering:has(.ibs-sel) .select_container::after,
.ibs-shop26 form.woocommerce-ordering:has(.ibs-sel) .select_container::before { display: none !important; }

/* Panel harus bisa menutupi baris kartu di bawahnya.
   z-index panel tidak cukup: bilah alat ini duduk di dalam
   .lab_woocommerce_filters_button_wrap yang berposisi relative dengan z-index:1,
   dan itu membuat konteks penumpukan sendiri. Seluruh isinya — termasuk panel
   ber-z-index 60 — karenanya ikut dinilai sebagai "1" terhadap dunia luar, seri
   dengan .post_featured kartu yang juga 1. Seri di antara dua konteks dimenangkan
   yang belakangan di dokumen, yaitu kartunya: foto instrumen tergambar menembus
   daftar. Yang perlu naik adalah pembungkusnya, bukan panelnya. */
.ibs-shop26 .lab_woocommerce_filters_button_wrap { z-index: 50; }

/* Komponen pengurut. Kotaknya memakai ukuran dan bingkai yang sama dengan
   setiap kolom isian di situs ini, dan daftarnya — yang pada <select> bawaan
   digambar sistem operasi dan tidak bisa disentuh CSS — sekarang ikut dunia
   yang sama. Alasannya ada di ibs-shop-2026.php. */
.ibs-shop26 .ibs-sel { position: relative; display: inline-block; }

.ibs-shop26 .ibs-sel__btn {
	appearance: none;
	display: inline-flex;
	align-items: center;
	justify-content: space-between;
	gap: 14px;
	min-width: 232px;
	min-height: 46px;
	padding: 0 14px;
	background: var(--frame);
	border: var(--rule);
	border-radius: var(--r);
	color: var(--ink);
	font-family: var(--sans);
	font-size: 0.9375rem;
	font-weight: 500;
	text-align: left;
	cursor: pointer;
	/* Tema meng-uppercase setiap <button>. Label di sini adalah nilai yang
	   sedang dipilih — "Terbaru", bukan "TERBARU": ia menirukan tulisan di
	   dalam daftar, dan daftar itu tidak ditulis kapital. */
	text-transform: none;
	letter-spacing: -0.006em;
	transition: border-color 140ms var(--ease);
}
.ibs-shop26 .ibs-sel__btn:hover { border-color: var(--ink-3); }
.ibs-shop26 .ibs-sel__btn[aria-expanded="true"] { border-color: var(--assay); }

.ibs-shop26 .ibs-sel__caret {
	width: 18px;
	height: 18px;
	flex: 0 0 auto;
	color: var(--ink-3);
	transition: transform 160ms var(--ease);
}
.ibs-shop26 .ibs-sel__btn[aria-expanded="true"] .ibs-sel__caret { transform: rotate(180deg); }

.ibs-shop26 .ibs-sel__list {
	position: absolute;
	z-index: 60;
	inset-inline-start: 0;
	inset-block-start: calc(100% + 6px);
	min-width: 100%;
	margin: 0;
	padding: 4px;
	list-style: none;
	background: var(--frame);
	border: var(--rule);
	border-radius: var(--r);
	box-shadow: 0 8px 22px rgba(16, 25, 42, 0.12);
	max-height: 320px;
	overflow-y: auto;
}
.ibs-shop26 .ibs-sel__list[hidden] { display: none; }

.ibs-shop26 .ibs-sel__opt {
	padding: 10px 12px;
	border-radius: var(--r);
	font-size: 0.9375rem;
	line-height: 1.3;
	color: var(--ink-2);
	cursor: pointer;
	white-space: nowrap;
	min-height: 40px;
	display: flex;
	align-items: center;
}
.ibs-shop26 .ibs-sel__opt:hover,
.ibs-shop26 .ibs-sel__opt.is-active { background: var(--assay-wash); color: var(--ink); }
.ibs-shop26 .ibs-sel__opt[aria-selected="true"] { color: var(--assay); font-weight: 600; }

/* Select aslinya: tetap di dalam form dan tetap terkirim, hanya tidak terlihat
   dan tidak ikut urutan tab. display:none akan membuatnya berhenti ikut. */
.ibs-shop26 select.ibs-sel__native {
	position: absolute;
	width: 1px;
	height: 1px;
	padding: 0;
	margin: -1px;
	overflow: hidden;
	clip: rect(0 0 0 0);
	clip-path: inset(50%);
	white-space: nowrap;
	border: 0;
	min-height: 0;
}

/* --------------------------------------------------------------------------
   Kartu produk.

   Yang diperbaiki, dan alasannya:
   - Dua belas tombol biru penuh di satu layar membuat dinding warna, dan tidak
     satu pun yang jadi tindakan utama. Tombolnya turun jadi tautan tenang;
     yang bisa diklik tetap seluruh kartu.
   - Kotak gambar dikunci rasionya, jadi dua belas kartu berhenti bergoyang
     tingginya mengikuti foto masing-masing.
   - Foto produk di sini dipotret di atas putih; bidang kartunya dibuat putih
     juga supaya tidak ada kotak abu-abu di belakang objek yang mengambang.
   -------------------------------------------------------------------------- */
/* SATU bingkai per kartu.
 *
 * Sebelum ini ada tiga, bersarang: <li> mendapat bingkai dari berkas ini,
 * .post_item mendapat bingkai lagi dari aturan kartu umum di
 * ibs-design-system, dan kotak gambar menambah garis ketiga di bawahnya. Tiga
 * persegi dengan tiga jarak berbeda, di dalam satu kartu.
 *
 * Pembagiannya sekarang tegas: <li> adalah sel tata letak — ia hanya membawa
 * jarak antar kartu (padding kanan-bawahnya milik tema, dan itu memang
 * selokannya) — sedangkan .post_item adalah kartunya, dan hanya ia yang
 * berbingkai. */
/* Prefiks html.ibs-ds dipakai supaya kekhususannya melewati aturan kartu di
   ibs-design-system, yang berbunyi `html.ibs-ds .woocommerce ul.products
   li.product` — (0,4,3). Versi tanpa prefiks di sini hanya (0,3,2) dan kalah,
   sehingga bingkai luarnya tetap tergambar dan kartunya tetap bertumpuk dua. */
html.ibs-ds .ibs-shop26.woocommerce ul.products li.product,
html.ibs-ds .ibs-shop26.woocommerce-page ul.products li.product,
.ibs-shop26 ul.products li.product {
	background: transparent;
	border: 0;
	border-radius: 0;
	box-shadow: none;
	overflow: visible;
}

.ibs-shop26 ul.products li.product .post_item {
	background: var(--frame);
	border: var(--rule);
	border-radius: var(--r);
	box-shadow: none;
	padding: 0;
	overflow: hidden;
	transition: border-color 160ms var(--ease), box-shadow 160ms var(--ease);
}

/* Hover: hanya tepinya yang menyala.
   Tema mengangkat .post_item tiga piksel dan melemparkan bayangan 40px di
   bawahnya — kartu dalam melayang, bingkai luar diam di tempatnya, dan yang
   terlihat adalah dua kotak yang lepas satu sama lain. Kekhususan di sini
   (0,4,2) melewati aturan tema (0,3,2), jadi tidak perlu !important. */
.ibs-shop26 ul.products li.product .post_item:hover {
	transform: none;
	border-color: var(--assay);
	box-shadow: 0 2px 8px rgba(11, 79, 209, 0.10);
}

/* Watermark logo dipotong dari tampilan, bukan dari berkasnya.
 *
 * Setiap foto produk membawa logo IBS yang dipanggang ke dalam gambar, di pita
 * putih di atas objeknya. Di kartu, logo itu tampil lebih besar daripada alat
 * yang dijual — dan ia diulang dua belas kali dalam satu layar, di situs yang
 * logonya sudah ada di kepala halaman.
 *
 * Diukur, bukan dikira-kira. 98 berkas dari sembilan halaman katalog: semuanya
 * 470x588 (aslinya 2501x2501), dan pita logo selalu berakhir di 12,8%–15,3%
 * tinggi gambar. Isi produk yang paling dekat ke atas mulai di 22,3%.
 * Potongannya 18,5%, dipilih tepat di tengah antara piksel logo terakhir
 * (15,4% pada berkas kategori beranda) dan piksel produk pertama (22,3%).
 * Angka pertama yang dipakai adalah 17% — benar secara hitungan, tapi hanya
 * menyisakan 1,6 poin di atas logo, dan satu berkas yang logonya sedikit lebih
 * rendah akan menyisakan sisiknya di tepi atas.
 *
 * Caranya: gambar diberi tinggi 120,5% ( = 100 / 83 ) di dalam kotak
 * overflow:hidden dan ditambatkan ke bawah. Yang 17% teratas menjulur keluar
 * kotak dan terpotong; sisanya membesar mengisi ruang yang ditinggalkannya,
 * jadi produknya justru tampil lebih besar daripada sebelumnya.
 *
 * Berkas di server tidak disentuh sama sekali. Logonya tetap ada di sana —
 * tetap terunduh, tetap ikut kalau gambarnya dipakai ulang di tempat lain, dan
 * tetap muncul di lightbox halaman produk.
 */
/* Rasio kotaknya dibiarkan 1/1 seperti yang sudah ditetapkan
   ibs-mobile-optimization.php — itu berlaku di situs langsung juga, dan tidak
   ada alasan membuat dua rasio berbeda untuk gambar yang sama.
   Kelas .ibs-shop26 dipasangkan dengan .woocommerce karena aturan yang dilawan
   ditulis sebagai `.woocommerce ul.products li.product .post_featured img`
   dengan !important: kekhususannya harus dilampaui, bukan disamai. */
.ibs-shop26.woocommerce ul.products li.product .post_featured,
.ibs-shop26.woocommerce-page ul.products li.product .post_featured {
	position: relative;
	margin: 0;
	padding: 18px;
	overflow: hidden;
	background: #fff;
	border-bottom: var(--rule);
}
/* Kotak kliping harus persis persegi, dan itu tidak gratis: tema menetapkan
   tinggi sendiri pada <a> ini, sehingga `inset: 18px` menyisakan kotak 128x163,
   bukan 128x128. Kotak yang lebih tinggi membuat gambar dihitung lebih besar,
   dan kelebihannya keluar ke samping — terukur 29px, 9% di tiap sisi. Itu bukan
   ruang kosong: produk terlebar di katalog ini membentang dari 2,8% sampai
   94,5% lebar gambar, jadi potongan 9% memakan alatnya.
   Keempat sisinya dinyatakan satu-satu supaya tidak ada yang tersisa untuk
   diisi tema. */
.ibs-shop26.woocommerce ul.products li.product .post_featured > a,
.ibs-shop26.woocommerce-page ul.products li.product .post_featured > a {
	position: absolute !important;
	inset-block-start: 18px !important;
	inset-block-end: 18px !important;
	inset-inline-start: 18px !important;
	inset-inline-end: 18px !important;
	width: auto !important;
	height: auto !important;
	/* Kotak kliping sekaligus yang menengahkan. Lihat catatan di aturan gambar
	   di bawah: penengahan lewat transform tidak selamat di sini. */
	display: flex;
	align-items: flex-end;
	justify-content: center;
	overflow: hidden;
}
/* Tanpa object-fit, dengan sengaja.
 *
 * Percobaan pertama memakai object-fit:contain di dalam kotak yang ditinggikan
 * 120,5%. Itu tidak memotong apa pun: contain menyesuaikan gambar ke sisi yang
 * paling sempit — di sini lebarnya — sehingga tambahan tinggi tadi berubah jadi
 * ruang kosong di atas gambar, bukan zoom. Logonya tetap utuh di tempatnya.
 *
 * Cara di bawah bekerja pada gambarnya sendiri: tingginya dipatok 120,5% tinggi
 * kotak dengan lebar mengikuti rasio aslinya, lalu ditambatkan ke sisi bawah.
 * Yang menjulur ke atas — persis 17% tinggi gambar — jatuh di luar kotak dan
 * dipotong. Sisanya, 83% bagian bawah, mengisi kotak sepenuhnya. */
/* Penengahan TIDAK memakai transform, dan itu inti perbaikan ini.
 *
 * Versi sebelumnya menengahkan gambar dengan left:50% + translateX(-50%).
 * Begitu tetikus masuk, aturan hover tema menimpa properti transform dengan
 * scale() saja — translate-nya ikut hilang bersamanya, dan gambarnya melompat
 * setengah lebar ke kanan. Yang terlihat: produk minggir keluar bingkai,
 * bukan membesar.
 *
 * Sekarang kotak pembungkusnya yang menengahkan (flex: rata bawah, rata
 * tengah), jadi properti transform bebas sepenuhnya untuk gerak. Siapa pun
 * yang menulis transform di sini — kami atau tema — tidak bisa lagi merusak
 * posisinya. */
.ibs-shop26.woocommerce ul.products li.product .post_featured img,
.ibs-shop26.woocommerce-page ul.products li.product .post_featured img {
	position: static !important;
	flex: 0 0 auto;
	width: auto !important;
	max-width: none !important;
	height: 122.7% !important;   /* 100 / (100 - 18,5) */
	padding: 0 !important;
	border-radius: 0;
	background: #fff;
	/* Membesar dari alasnya, bukan dari titik tengahnya: sumbu gambar ini ada
	   di bawah — 18,5% bagian atasnya sudah dipotong — jadi zoom dari tengah
	   akan mendorong produk keluar lewat sisi bawah. */
	transform-origin: 50% 100%;
	transition: transform 420ms var(--ease);
	will-change: transform;
}

.ibs-shop26 ul.products li.product .post_item:hover .post_featured img,
.ibs-shop26 ul.products li.product:hover .post_featured img {
	transform: scale(1.06);
}
/* Produk tanpa foto memakai placeholder WooCommerce, dan placeholder itu tidak
   berlogo — memotongnya hanya akan memakan gambarnya sendiri. */
.ibs-shop26.woocommerce ul.products li.product .post_featured img[src*="woocommerce-placeholder"],
.ibs-shop26.woocommerce-page ul.products li.product .post_featured img[src*="woocommerce-placeholder"] {
	height: 100% !important;
}

/* Lapisan gelap dan tombol wishlist yang muncul di atas foto saat disentuh.
   Daftar keinginan tidak punya arti pada katalog yang tidak menerima pesanan —
   yang ditunggu di ujung sana adalah permintaan penawaran, bukan keranjang. */
.ibs-shop26 ul.products li.product .mask,
.ibs-shop26 ul.products li.product .icons,
.ibs-shop26 ul.products li.product .tinv-wraper,
.ibs-shop26 ul.products li.product .tinvwl_add_to_wishlist_button { display: none !important; }

.ibs-shop26 ul.products li.product .post_details,
.ibs-shop26 ul.products li.product .post_header { padding: 16px 18px 18px; }

.ibs-shop26 ul.products li.product .post_meta,
.ibs-shop26 ul.products li.product .post_categories,
.ibs-shop26 ul.products li.product .brand {
	font-family: var(--mono);
	font-size: 0.6875rem;
	letter-spacing: 0.04em;
	text-transform: uppercase;
	color: var(--ink-3);
	margin: 0 0 8px;
}

.ibs-shop26 ul.products li.product .woocommerce-loop-product__title,
.ibs-shop26 ul.products li.product .post_title,
.ibs-shop26 ul.products li.product h2 {
	font-family: var(--sans);
	font-size: 0.9375rem;
	line-height: 1.35;
	letter-spacing: -0.01em;
	font-weight: 600;
	color: var(--ink);
	margin: 0 0 14px;
}
/* Judul instrumen di pasar ini panjang-panjang — "Instrument Automated Liquid
   Handling Workstation" terpotong jadi dua kata pada dua baris. Tiga baris
   memuat hampir semuanya utuh, dan tinggi kartunya tetap sama karena kotak
   gambarnya yang mengunci rasio. */
.ibs-shop26 ul.products li.product .woocommerce-loop-product__title,
.ibs-shop26 ul.products li.product .post_title {
	-webkit-line-clamp: 3 !important;
	line-clamp: 3 !important;
	min-height: 3.9em;
}

.ibs-shop26 ul.products li.product a:hover .woocommerce-loop-product__title,
.ibs-shop26 ul.products li.product .post_title a:hover { color: var(--assay); }

/* Tombol "Lihat Detail" jadi tautan. Tetap tombol pada ukuran sentuh — 24px
   tinggi minimum, sesuai WCAG 2.2 — tapi berhenti bersaing dengan sebelas
   tetangganya. */
.ibs-shop26 ul.products li.product .button,
.ibs-shop26 ul.products li.product a.button,
.ibs-shop26 ul.products li.product .sc_button {
	background: transparent !important;
	color: var(--assay) !important;
	border: 0 !important;
	border-radius: 0 !important;
	padding: 0 !important;
	min-height: 24px;
	display: inline-flex;
	align-items: center;
	font-family: var(--sans);
	font-size: 0.875rem !important;
	font-weight: 500;
	letter-spacing: 0;
	text-transform: none !important;
	box-shadow: none !important;
	border-bottom: 1px solid transparent !important;
}
/* Kartu ini disusun dengan flexbox, dan item flex meregang selebar barisnya.
   Tautan yang meregang membawa garis bawahnya ikut meregang: satu setrip biru
   selebar kartu menggantung di bawah "Lihat Detail" begitu tetikus masuk.
   Lebarnya dikembalikan ke lebar tulisannya sendiri. */
.ibs-shop26.woocommerce ul.products li.product .button,
.ibs-shop26.woocommerce-page ul.products li.product .button,
.ibs-shop26 ul.products li.product a.button {
	align-self: flex-start;
	width: fit-content !important;
	max-width: 100%;
	flex: 0 0 auto;
}

.ibs-shop26 ul.products li.product .button::after {
	content: ' \2192';
	white-space: pre;
}
.ibs-shop26 ul.products li.product .button:hover { border-bottom-color: currentColor !important; }

/* --------------------------------------------------------------------------
   Rail filter kategori.

   Keadaan "sedang dipilih" di sini diwarnai oranye bawaan tema — satu-satunya
   hue lain di seluruh halaman, dan ia menandai keadaan yang paling sering
   terlihat. Dikembalikan ke assay, sama seperti setiap penanda status lain di
   situs ini.
   -------------------------------------------------------------------------- */
.ibs-shop26 .widget_woocommerce_search .sc_form_field_title_caption,
.ibs-shop26 .widget .widget_title,
.ibs-shop26 .widget h2,
.ibs-shop26 .widget h5 {
	font-family: var(--sans);
	font-size: 1rem;
	font-weight: 600;
	letter-spacing: -0.012em;
	color: var(--ink);
}

.ibs-shop26 .trx_addons_woocommerce_search a,
.ibs-shop26 .widget_product_categories a,
.ibs-shop26 .widget_categories a {
	color: var(--ink-2);
	text-decoration: none;
	transition: color 140ms var(--ease);
}
.ibs-shop26 .trx_addons_woocommerce_search a:hover,
.ibs-shop26 .widget_product_categories a:hover,
.ibs-shop26 .widget_categories a:hover { color: var(--assay); }

/* Keadaan terpilih ada pada .sc_form_field_item_checked, dan warnanya duduk di
   <span> di dalam labelnya — bukan pada <a>. Ditulis ke <a> saja, aturan ini
   tidak pernah kena: merah #e74c3c tetap berdiri di rail. */
.ibs-shop26 .sc_form_field_item_checked > .sc_form_field_item_label,
.ibs-shop26 .sc_form_field_item_checked .sc_form_field_item_text,
.ibs-shop26 .sc_form_field_item_checked > a,
.ibs-shop26 .trx_addons_woocommerce_search li.current > a,
.ibs-shop26 .trx_addons_woocommerce_search li.active > a,
.ibs-shop26 .widget_product_categories .current-cat > a {
	color: var(--assay) !important;
	font-weight: 600;
}

/* Rail dibaca sebagai indeks berangka, bukan daftar butir.
 *
 * Tiap baris: nama bidang di kiri, jumlah produk di kanan dengan angka mono
 * tabular supaya digitnya berbaris lurus ke bawah dan besar-kecilnya terbaca
 * tanpa dibaca satu-satu. Garis rambut memisahkan baris; barisnya sendiri jadi
 * bidang yang bisa diklik penuh, bukan hanya tulisannya. */
.ibs-shop26 .sc_form_field_items { margin: 0; }

.ibs-shop26 .sc_form_field_item {
	display: block;
	border-bottom: var(--rule);
}
.ibs-shop26 .sc_form_field_item:last-child { border-bottom: 0; }

.ibs-shop26 .sc_form_field_item_label {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 12px;
	padding: 9px 0;
	cursor: pointer;
	min-height: 40px;
	box-sizing: border-box;
}

.ibs-shop26 .sc_form_field_item_text {
	font-family: var(--sans);
	font-size: 0.9375rem;
	line-height: 1.35;
	color: var(--ink-2);
	transition: color 140ms var(--ease);
}
.ibs-shop26 .sc_form_field_item_label:hover .sc_form_field_item_text { color: var(--assay); }

.ibs-shop26 .ibs-count {
	font-family: var(--mono);
	font-variant-numeric: tabular-nums;
	font-feature-settings: 'tnum' 1;
	font-size: 0.75rem;
	color: var(--ink-3);
	flex: 0 0 auto;
	transition: color 140ms var(--ease);
}
.ibs-shop26 .sc_form_field_item_label:hover .ibs-count { color: var(--assay); }

/* Baris yang sedang berlaku: satu sumur terisi di tepinya — penanda yang sama
   dengan yang dipakai rekam jejak dan rantai layanan di halaman lain. */
.ibs-shop26 .sc_form_field_item_checked > .sc_form_field_item_label {
	position: relative;
	padding-inline-start: 16px;
}
.ibs-shop26 .sc_form_field_item_checked > .sc_form_field_item_label::before {
	content: '';
	position: absolute;
	inset-inline-start: 0;
	inset-block-start: 50%;
	width: 7px;
	height: 7px;
	border-radius: 50%;
	background: var(--assay);
	transform: translateY(-50%);
}
.ibs-shop26 .sc_form_field_item_checked .ibs-count { color: var(--assay); }

/* Judul rail: caption dan tombol lipatnya berdiri di dua ujung, bukan menempel
   jadi "Saring menurut kategori—". */
.ibs-shop26 .sc_form_field_title {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 12px;
	padding-bottom: 10px;
	border-bottom: 1px solid var(--ink);
	margin-bottom: 4px;
	cursor: pointer;
}
/* Judulnya punya TIGA anak: caption, tanda lipat, dan sebuah wadah "item
   terpilih" yang di sini selalu kosong. Dengan space-between, yang kosong itu
   merebut ujung kanan dan tanda lipatnya terdorong ke tengah — menempel persis
   di belakang tulisan, jadi "Saring menurut kategori—". Wadah kosongnya
   disembunyikan, dan tanda lipat yang mengambil ujung kanan. */
.ibs-shop26 .sc_form_field_selected_items:empty { display: none; }
.ibs-shop26 .sc_form_field_arrow {
	flex: 0 0 auto;
	margin-inline-start: auto;
	color: var(--ink-3);
	line-height: 1;
}

/* Blok kedua (Principal) diberi jarak dari blok kategori di atasnya. */
.ibs-shop26 .sc_form_field + .sc_form_field { margin-top: clamp(24px, 3vw, 36px); }

/* Rail ikut menggulung bersama katalog, lalu berhenti — daftar filter yang
   tergulir keluar layar memaksa pembaca naik lagi setiap kali mau berpindah
   bidang. Hanya di layar yang memang punya tinggi untuk itu. */
@media (min-width: 1025px) {
	.ibs-shop26 .widget_woocommerce_search {
		position: sticky;
		top: 96px;
	}
}

/* "Hapus filter" adalah tindakan merusak-ringan: ia membuang pekerjaan yang
   sudah dilakukan pembaca. Ia tidak perlu warna, cukup keterbacaan. */
.ibs-shop26 .trx_addons_woocommerce_search_clear_all {
	font-family: var(--mono);
	font-size: 0.6875rem;
	letter-spacing: 0.02em;
	text-transform: uppercase;
	color: var(--ink-3) !important;
}
.ibs-shop26 .trx_addons_woocommerce_search_clear_all:hover { color: var(--ink) !important; }

/* --------------------------------------------------------------------------
   Paginasi
   -------------------------------------------------------------------------- */
/* <ul> pembungkusnya sendiri berkelas .page-numbers — sama persis dengan tiap
   tombol di dalamnya. Aturan yang ditulis ke .page-numbers saja ikut membingkai
   seluruh deretnya: satu kotak panjang mengelilingi angka-angka, yang tidak
   pernah dimaksudkan ada. Yang dibicarakan di bawah hanya anak langsung <li>. */
.ibs-shop26 .woocommerce-pagination ul.page-numbers,
.ibs-shop26 .page_navi {
	border: 0;
	background: transparent;
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	padding: 0;
	margin: clamp(24px, 3vw, 40px) 0 0;
	list-style: none;
}
.ibs-shop26 .woocommerce-pagination li {
	border: 0;
	margin: 0;
	padding: 0;
	list-style: none;
}
.ibs-shop26 .woocommerce-pagination li > .page-numbers,
.ibs-shop26 .page_navi > .page-numbers {
	font-family: var(--mono);
	font-variant-numeric: tabular-nums;
	font-size: 0.875rem;
	color: var(--ink-2);
	border: var(--rule);
	border-radius: var(--r);
	/* Kotak seragam untuk semuanya — angka, elipsis, dan panah. Tema memberi
	   padding yang berbeda-beda per jenis, dan hasilnya deret yang tingginya
	   tidak rata: 52px di sebelah 61px. Ukurannya dinyatakan sekali di sini,
	   dan 46px tetap di atas ambang target sentuh 44px. */
	box-sizing: border-box;
	padding: 0;
	width: 46px;
	height: 46px;
	min-width: 46px;
	margin: 0;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	background: var(--frame);
	text-decoration: none;
}
/* Halaman yang sedang dibuka digambar tema sebagai lingkaran penuh sementara
   tetangganya kotak 2px. Radius di dunia ini terkunci: lingkaran hanya untuk
   sumur pelat, segala yang persegi tetap 2px. */
/* Halaman yang sedang dibuka adalah <span>, bukan <a>, dan tema memberinya
   padding sendiri — 40px tinggi di antara tetangga 46px. Kotaknya dinyatakan
   ulang di sini. */
.ibs-shop26 .woocommerce-pagination li > .page-numbers.current,
.ibs-shop26 .page_navi > .page-numbers.current {
	background: var(--assay);
	border-color: var(--assay);
	color: #fff;
	border-radius: var(--r) !important;
	box-sizing: border-box;
	padding: 0;
	width: 46px;
	height: 46px;
}
.ibs-shop26 .woocommerce-pagination li > .page-numbers:hover:not(.current),
.ibs-shop26 .page_navi > .page-numbers:hover:not(.current) {
	border-color: var(--assay);
	color: var(--assay);
}
/* Elipsis bukan tombol — ia tidak bisa diklik, jadi ia tidak berbingkai. */
.ibs-shop26 .woocommerce-pagination li > .page-numbers.dots {
	border-color: transparent;
	background: transparent;
	color: var(--ink-3);
	/* Tema memberi elipsis padding sendiri, dan ia jadi 61px di antara tetangga
	   52px — satu kotak yang lebih tinggi dari deretnya. */
}

/* --------------------------------------------------------------------------
   Penutup katalog
   -------------------------------------------------------------------------- */
.ibs-cat26__close {
	margin-top: clamp(40px, 5vw, 72px);
	padding: clamp(28px, 3.5vw, 44px);
	background: var(--assay-deep);
	border-radius: var(--r);
	display: grid;
	grid-template-columns: minmax(0, 7fr) minmax(0, 5fr);
	gap: clamp(24px, 3vw, 48px);
	align-items: center;
}
.ibs-shop26 .ibs-cat26__close h2 {
	font-family: var(--sans);
	font-size: clamp(1.25rem, 2vw, 1.75rem);
	line-height: 1.16;
	letter-spacing: -0.022em;
	font-weight: 600;
	color: #fff;
	margin: 0 0 12px;
}
.ibs-cat26__close p {
	color: rgba(255, 255, 255, 0.80);
	margin: 0;
	max-width: 52ch;
	line-height: 1.6;
}
.ibs-cat26__close-actions { display: flex; flex-wrap: wrap; gap: 12px; }

.ibs-shop26 .ibs-shop26-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-height: 48px;
	padding: 0 22px;
	border-radius: var(--r);
	border: 1px solid transparent;
	font-family: var(--sans);
	font-size: 0.9375rem;
	font-weight: 500;
	text-decoration: none;
	white-space: nowrap;
	transition: background-color 160ms var(--ease), border-color 160ms var(--ease), color 160ms var(--ease);
}
.ibs-shop26 .ibs-shop26-btn--primary { background: #fff; color: var(--assay-deep); }
.ibs-shop26 .ibs-shop26-btn--primary:hover { background: var(--assay-wash); color: var(--assay-deep); }
.ibs-shop26 .ibs-shop26-btn--ghost { background: transparent; color: #fff; border-color: rgba(255, 255, 255, 0.42); }
.ibs-shop26 .ibs-shop26-btn--ghost:hover { border-color: #fff; color: #fff; }

/* ==========================================================================
   Halaman produk
   ========================================================================== */

/* Judul produk, dan remah roti di atasnya. */
.ibs-shop26 .product_title {
	font-family: var(--sans);
	font-size: clamp(1.5rem, 2.4vw, 2.125rem);
	line-height: 1.12;
	letter-spacing: -0.026em;
	font-weight: 600;
	color: var(--ink);
	margin: 0 0 20px;
}
.ibs-shop26 .woocommerce-breadcrumb {
	font-family: var(--mono);
	font-size: 0.6875rem;
	letter-spacing: 0.02em;
	text-transform: uppercase;
	color: var(--ink-3);
	margin: 0 0 18px;
}
.ibs-shop26 .woocommerce-breadcrumb a { color: var(--ink-3); text-decoration: none; }
.ibs-shop26 .woocommerce-breadcrumb a:hover { color: var(--assay); }

/* Harga kosong. Mode katalog tidak mencetak harga, tapi elemennya tetap
   dikeluarkan dan menyisakan jarak yang tidak dijelaskan apa pun. */
.ibs-shop26 .summary > .price:empty { display: none; }

/* Blok bantuan bawaan tema, dengan nomor telepon yang tidak dipakai bagian
   lain situs ini. Alasannya ada di ibs-shop-2026.php. */
.ibs-shop26 .single_product_custom_text_after_add_to_cart { display: none; }

/* Galeri halaman produk: TIDAK dipotong. Dicoba, lalu dibatalkan.
 *
 * clip-path memang menghilangkan logonya, dan tata letaknya tidak bergerak
 * satu piksel pun — persis seperti yang dijanjikan. Masalahnya justru itu: ia
 * menyembunyikan piksel tanpa mengambil kembali ruangnya. Yang tersisa pita
 * kosong setinggi 87px di puncak kotak galeri, dan produknya terdorong ke
 * sudut bawah-kanan, berdampingan dengan kolom thumbnail yang duduk di kiri
 * atas. Logonya hilang, kompoisisinya rusak — pertukaran yang salah.
 *
 * Memotong sekaligus memperbesar seperti di kartu katalog bukan pilihan di
 * sini: galerinya dijalankan flexslider, yang menulis lebar tiap slide sebagai
 * gaya inline dan menghitung ulang saat berpindah gambar. Membesarkan lewat
 * transform lolos dari perhitungan itu, tapi ia juga melebarkan gambar ~11% ke
 * tiap sisi — dan produk terlebar di katalog ini membentang sampai 94,5% lebar
 * gambar, jadi sisi-sisinya akan termakan.
 *
 * Jadi di halaman ini logonya dibiarkan. Satu gambar besar dengan logo kecil di
 * atasnya terbaca sebagai penanda merek; dua belas kartu yang mengulanginya di
 * satu layar tidak — dan di sanalah potongan itu dikerjakan.
 *
 * Perbaikan yang sebenarnya tetap sama: ekspor ulang berkasnya tanpa watermark,
 * dan seluruh siasat ini bisa dibuang.
 */

.ibs-shop26 .woocommerce-product-gallery img { border-radius: var(--r); background: #fff; }
.ibs-shop26 .woocommerce-product-gallery { border: var(--rule); border-radius: var(--r); background: #fff; padding: 12px; }

/* Tindakan utama halaman ini. Sudah ada dari ibs-shop-ux.php; di sini ia
   dibawa ke ukuran dan warna yang sama dengan tombol di seluruh situs. */
.ibs-shop26 .ibs-product-actions { display: flex; flex-wrap: wrap; gap: 12px; margin: 26px 0 0; }
.ibs-shop26 .ibs-product-cta {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-height: 48px;
	padding: 0 24px;
	border-radius: var(--r);
	border: 1px solid transparent;
	font-family: var(--sans);
	font-size: 0.9375rem;
	font-weight: 500;
	text-decoration: none;
	transition: background-color 160ms var(--ease), border-color 160ms var(--ease), color 160ms var(--ease);
}
.ibs-shop26 .ibs-product-cta--primary { background: var(--assay); color: #fff; }
.ibs-shop26 .ibs-product-cta--primary:hover { background: var(--assay-deep); color: #fff; }
.ibs-shop26 .ibs-product-cta--secondary { background: transparent; color: var(--ink); border-color: var(--hairline); }
.ibs-shop26 .ibs-product-cta--secondary:hover { border-color: var(--ink); color: var(--ink); }

/* Blok bantuan pengganti: empat baris data, disusun seperti daftar spesifikasi
   dan bukan seperti kalimat, karena yang dicari pembaca di sini adalah satu
   nomor — bukan sebuah paragraf. */
.ibs-help26 { margin-top: 28px; border-top: var(--rule); padding-top: 20px; }
.ibs-help26__lead { color: var(--ink-2); margin: 0 0 14px; font-size: 0.9375rem; }
.ibs-help26__list { list-style: none; margin: 0; padding: 0; }
.ibs-help26__list li {
	display: grid;
	grid-template-columns: minmax(92px, 0.7fr) minmax(0, 2fr);
	gap: 14px;
	padding: 8px 0;
	border-bottom: var(--rule);
}
.ibs-help26__list li:last-child { border-bottom: 0; }
.ibs-help26__list li > span:first-child {
	font-family: var(--mono);
	font-size: 0.6875rem;
	letter-spacing: 0.02em;
	text-transform: uppercase;
	color: var(--ink-3);
	padding-top: 3px;
}
/* justify-self memaksa tautan ini selebar tulisannya sendiri.
   Tanpa itu ia adalah item grid yang meregang selebar kolom, dan garis bawahnya
   ikut meregang — satu setrip yang menyeberangi baris dan bertabrakan dengan
   garis pemisah barisnya. Persis kejadian yang sama dengan tautan di footer. */
.ibs-shop26 .ibs-help26__list a {
	font-family: var(--mono);
	font-variant-numeric: tabular-nums;
	color: var(--ink);
	text-decoration: none;
	border-bottom: 1px solid var(--hairline);
	display: inline-flex;
	align-items: center;
	justify-self: start;
	width: fit-content;
	max-width: 100%;
	min-height: 24px;
}
.ibs-shop26 .ibs-help26__list a:hover { color: var(--assay); border-bottom-color: currentColor; }
.ibs-help26__hours { color: var(--ink-2); font-size: 0.9375rem; }

/* Akordeon deskripsi/spesifikasi, dan tabel atributnya. */
.ibs-shop26 .woocommerce-tabs .panel,
.ibs-shop26 .wc-tab { color: var(--ink-2); }
.ibs-shop26 .shop_attributes {
	width: 100%;
	border-collapse: collapse;
	font-size: 0.9375rem;
}
.ibs-shop26 .shop_attributes th,
.ibs-shop26 .shop_attributes td {
	text-align: left;
	padding: 14px 20px 14px 0;
	border-bottom: var(--rule);
	background: transparent;
	vertical-align: top;
}
.ibs-shop26 .shop_attributes th {
	font-family: var(--mono);
	font-size: 0.6875rem;
	letter-spacing: 0.04em;
	text-transform: uppercase;
	font-weight: 400;
	color: var(--ink-3);
	width: 26%;
	min-width: 150px;
}
.ibs-shop26 .shop_attributes td { color: var(--ink); }
.ibs-shop26 .shop_attributes td p { margin: 0; }

/* --------------------------------------------------------------------------
   Bilah lengket di ponsel
   -------------------------------------------------------------------------- */
.ibs-sticky26 {
	position: fixed;
	inset-inline: 0;
	inset-block-end: 0;
	z-index: 9990;
	display: none;
	align-items: center;
	gap: 14px;
	padding: 10px clamp(16px, 4vw, 20px);
	padding-bottom: calc(10px + env(safe-area-inset-bottom, 0px));
	background: var(--frame);
	border-top: var(--rule);
	box-shadow: 0 -2px 12px rgba(16, 25, 42, 0.10);
}
.ibs-sticky26[hidden] { display: none !important; }
.ibs-sticky26__name {
	flex: 1 1 auto;
	min-width: 0;
	font-size: 0.8125rem;
	line-height: 1.3;
	color: var(--ink-2);
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}
.ibs-shop26 .ibs-sticky26__cta {
	flex: 0 0 auto;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-height: 44px;
	padding: 0 18px;
	border-radius: var(--r);
	background: var(--assay);
	color: #fff;
	font-size: 0.875rem;
	font-weight: 500;
	text-decoration: none;
	white-space: nowrap;
}

@media (max-width: 782px) {
	.ibs-sticky26:not([hidden]) { display: flex; }
	/* Gelembung WhatsApp mengambang tepat di tempat bilah ini berdiri. */
	.ibs-shop26--single .ibs-sticky26:not([hidden]) ~ * .ibs-wa-float,
	.ibs-shop26--single .ibs-wa-float { bottom: 84px; }
}

/* --------------------------------------------------------------------------
   Responsif
   -------------------------------------------------------------------------- */
@media (max-width: 1024px) {
	.ibs-cat26__row { grid-template-columns: 1fr; align-items: start; }
	.ibs-cat26__facts { max-width: 560px; }
	.ibs-cat26__close { grid-template-columns: 1fr; }
}

@media (max-width: 600px) {
	.ibs-cat26 { padding-top: 20px; }
	.ibs-cat26__facts > div { grid-template-columns: 1fr; gap: 2px; }
	.ibs-cat26__facts dt { padding-top: 0; }
	.ibs-cat26__close-actions .ibs-shop26-btn { flex: 1 1 auto; }
	.ibs-shop26 ul.products li.product .post_featured img { padding: 12px; }
}

/* --------------------------------------------------------------------------
   Gerak
   -------------------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
	.ibs-shop26 ul.products li.product .post_featured img,
	.ibs-shop26 .ibs-product-cta,
	.ibs-shop26 .ibs-shop26-btn { transition-duration: 1ms; }
	.ibs-shop26 ul.products li.product:hover .post_featured img { transform: none; }
}

/* --------------------------------------------------------------------------
   Mode gelap.

   Foto produk dipotret di atas latar putih dan tidak bisa diubah, jadi kotak
   gambarnya tetap putih di kedua mode — memaksanya gelap hanya menghasilkan
   objek putih mengambang di kotak gelap. Yang berubah hanya bingkai dan tinta
   di sekelilingnya.
   -------------------------------------------------------------------------- */
html[data-theme="dark"] .ibs-shop26 .ibs-product-cta--primary { color: var(--ds-ground); }
html[data-theme="dark"] .ibs-shop26 .ibs-product-cta--primary:hover {
	background: var(--assay);
	color: var(--ds-ground);
	filter: brightness(1.12);
}
html[data-theme="dark"] .ibs-shop26 .woocommerce-pagination li > .page-numbers.current,
html[data-theme="dark"] .ibs-shop26 .page_navi > .page-numbers.current { color: var(--ds-ground); }
html[data-theme="dark"] .ibs-shop26 .ibs-sticky26__cta { color: var(--ds-ground); }

@media (prefers-color-scheme: dark) {
	html.ibs-ds:not([data-theme="light"]) .ibs-shop26 .ibs-product-cta--primary { color: var(--ds-ground); }
	html.ibs-ds:not([data-theme="light"]) .ibs-shop26 .ibs-product-cta--primary:hover {
		background: var(--assay);
		color: var(--ds-ground);
		filter: brightness(1.12);
	}
	html.ibs-ds:not([data-theme="light"]) .ibs-shop26 .woocommerce-pagination li > .page-numbers.current,
	html.ibs-ds:not([data-theme="light"]) .ibs-shop26 .page_navi > .page-numbers.current { color: var(--ds-ground); }
	html.ibs-ds:not([data-theme="light"]) .ibs-shop26 .ibs-sticky26__cta { color: var(--ds-ground); }
}
