/* ==========================================================================
   Halaman katalog. Kartu raket dan kerangka umum ada di public.css —
   di sini hanya yang khusus halaman ini.
   ========================================================================== */

.cat-head {
    padding-block: var(--s-7) var(--s-5);
}

.cat-head h1 {
    margin: 0;
    font-size: var(--fs-h2);
    font-weight: 800;
    letter-spacing: -0.03em;
}

.cat-head p {
    margin: var(--s-3) 0 0;
    max-width: 60ch;
    font-size: var(--fs-small);
    color: var(--ink-muted);
}

/* --- Tab cabang ---
   Tautan biasa, bukan penyaring: tiap cabang punya alamatnya sendiri. */

/* Lebih rapat dari halaman lain — katalog punya kolom filter plus grid
   tiga kolom, jadi ruang mendatarnya lebih terpakai. Tetap ada jarak
   supaya di layar sempit isinya tidak menempel ke tepi.  */
.cat-wrap {
    padding-inline: var(--s-3);
}

.cat-tabs {
    display: flex;
    gap: var(--s-2);
    flex-wrap: wrap;
}

.cat-tabs a {
    padding: var(--s-2) var(--s-5);
    border: 1px solid var(--line);
    border-radius: var(--r-pill);
    font-size: var(--fs-small);
    font-weight: 500;
    color: var(--ink-muted);
    text-decoration: none;
    transition: border-color var(--dur) var(--ease), color var(--dur) var(--ease);
}

.cat-tabs a:hover {
    border-color: var(--ink-faint);
    color: var(--ink);
}

.cat-tabs a[aria-current="page"] {
    background: var(--ink);
    border-color: var(--ink);
    color: var(--bg);
}

/* --- Dua kolom --- */
.cat-cols {
    display: grid;
    grid-template-columns: 15rem 1fr;
    gap: var(--s-6);
    align-items: start;
    padding-block: var(--s-6) var(--s-9);
}

/* --- Saringan ---
   <details>, bukan panel dengan JavaScript: tidak ada keadaan yang bisa
   tertinggal saat ukuran layar berubah. View membukanya lewat atribut
   `open` kalau ada penyaring yang sedang aktif, karena <details> selalu
   menutup lagi setiap halaman dimuat ulang. */
.cat-filters {
    position: sticky;
    top: 5.5rem;
    padding: var(--s-4);
    border-radius: var(--r-md);
    background: var(--green);
    color: var(--bg);

    /* Panel yang lebih tinggi dari layar tidak bisa dilihat seluruhnya
       karena posisinya menempel — bagian bawahnya, termasuk tombol
       Terapkan, terpotong dan tidak bisa dijangkau. */
    max-height: calc(100vh - 11rem);

    /* scroll, bukan auto: scrollbar selalu terlihat sehingga panel yang
       terpotong punya penanda. Dengan auto, di macOS batangnya baru
       muncul saat digulir — dan orang yang tidak menggulir tidak tahu
       ada bagian yang belum terlihat. */
    overflow-y: scroll;

    scrollbar-width: auto;
    scrollbar-color: color-mix(in srgb, var(--bg) 45%, transparent) transparent;
}


.cat-filters::-webkit-scrollbar {
    width: 10px;
}

.cat-filters::-webkit-scrollbar-track {
    background: transparent;
}

.cat-filters::-webkit-scrollbar-thumb {
    border-radius: var(--r-pill);
    background: color-mix(in srgb, var(--bg) 40%, transparent);
    border: 3px solid transparent;
    background-clip: content-box;
}

.cat-filters::-webkit-scrollbar-thumb:hover {
    background: color-mix(in srgb, var(--bg) 60%, transparent);
    background-clip: content-box;
}

.cat-filters summary {
    display: flex;
    align-items: center;
    gap: var(--s-3);
    padding-bottom: var(--s-4);
    border-bottom: 1px solid color-mix(in srgb, var(--bg) 20%, transparent);
    cursor: pointer;
    list-style: none;
    font-weight: 700;
    letter-spacing: -0.01em;
}

.cat-filters summary::-webkit-details-marker {
    display: none;
}

.cat-filters summary::after {
    content: "+";
    margin-left: auto;
    font-weight: 400;
    color: color-mix(in srgb, var(--bg) 65%, transparent);
}

.cat-filters[open] summary::after {
    content: "–";
}

.cat-filters__clear {
    position: relative;
    z-index: 1;
    margin-left: auto;
    margin-right: var(--s-3);
    padding: 0.15rem 0.6rem;
    border-radius: var(--r-pill);
    background: color-mix(in srgb, var(--bg) 16%, transparent);
    font-size: var(--fs-label);
    font-weight: 600;
    text-transform: none;
    letter-spacing: 0;
    color: var(--bg);
    text-decoration: none;
}

.cat-filters__clear:hover {
    background: color-mix(in srgb, var(--bg) 28%, transparent);
}

.cat-filters__form {
    display: grid;
}

/* Tiap kelompok dipisah garis, bukan jarak — di atas satu blok warna,
   garis lebih terbaca sebagai pemisah daripada ruang kosong. */
.fgroup {
    display: grid;
    gap: var(--s-2);
    padding-block: var(--s-4);
    border-bottom: 1px solid color-mix(in srgb, var(--bg) 15%, transparent);
}

/* Daftar merek tumbuh mengikuti stok — dibatasi tingginya supaya panel
   saringan tidak memanjang melewati layar dan kelompok di bawahnya
   terdorong hilang dari pandangan. */
.fgroup__scroll {
    display: grid;
    gap: var(--s-3);
    max-height: 13rem;
    overflow-y: scroll;
    scrollbar-width: auto;
    scrollbar-color: color-mix(in srgb, var(--bg) 45%, transparent) transparent;
}

.fgroup__scroll::-webkit-scrollbar {
    width: 8px;
}

.fgroup__scroll::-webkit-scrollbar-track {
    background: transparent;
}

.fgroup__scroll::-webkit-scrollbar-thumb {
    border-radius: var(--r-pill);
    background: color-mix(in srgb, var(--bg) 40%, transparent);
    border: 2px solid transparent;
    background-clip: content-box;
}

.fgroup:last-of-type {
    border-bottom: 0;
    padding-bottom: 0;
}

.fgroup label,
.fgroup__label {
    margin: 0;
    font-size: 0.9375rem;
    font-weight: 700;
    text-transform: none;
    letter-spacing: -0.01em;
    color: var(--bg);
}

.fgroup input[type="search"],
.fgroup input[type="number"] {
    margin: 0;
    padding: var(--s-3) var(--s-4);
    font-size: var(--fs-small);
    color: var(--bg);
    background: color-mix(in srgb, var(--bg) 10%, transparent);
    border: 1px solid color-mix(in srgb, var(--bg) 22%, transparent);
    border-radius: var(--r-sm);
    appearance: none;
}

.fgroup input:focus {
    outline: none;
    border-color: color-mix(in srgb, var(--bg) 55%, transparent);
    background: color-mix(in srgb, var(--bg) 16%, transparent);
}

.fgroup input::placeholder {
    color: color-mix(in srgb, var(--bg) 55%, transparent);
}

.fgroup input:hover {
    border-color: color-mix(in srgb, var(--bg) 50%, transparent);
}

/* Baris pilihan. Label di dalamnya bukan judul kelompok, jadi tebalnya
   dikembalikan ke biasa. */
.ck {
    display: flex;
    align-items: center;
    gap: var(--s-3);
    cursor: pointer;
}

.fgroup .ck {
    font-size: var(--fs-small);
    font-weight: 400;
    color: color-mix(in srgb, var(--bg) 82%, transparent);
}

.fgroup .ck:hover {
    color: var(--bg);
}

.ck input {
    width: auto;
    margin: 0;
    accent-color: var(--bg);
}

.cat-filters__form .btn {
    justify-content: center;
    margin-top: var(--s-4);
    padding-block: var(--s-2);
    font-size: var(--fs-small);
    min-height: 0;
}

/* --- Bar atas daftar --- */
.cat-bar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--s-4);
    flex-wrap: wrap;
    margin-bottom: var(--s-5);
}

.cat-bar__count {
    margin: 0;
    font-size: var(--fs-small);
    color: var(--ink-muted);
}

.cat-sort {
    display: flex;
    align-items: center;
    gap: var(--s-3);
}

.cat-sort label {
    margin: 0;
    font-size: var(--fs-label);
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: var(--tr-label);
    color: var(--ink-muted);
    white-space: nowrap;
}

.cat-sort select {
    margin: 0;
    width: auto;
    padding-block: var(--s-2);
    font-size: var(--fs-small);
}

/* --- Grid ---
   Tiga kolom, kartunya lebih besar dari halaman depan: di sini orang
   sedang memilih, bukan melihat sekilas. PER_PAGE habis dibagi tiga
   supaya baris terakhir tidak menggantung. */
.cards--catalog {
    grid-template-columns: repeat(3, 1fr);
}


/* Kartu di katalog diam. Orang sedang membandingkan belasan raket sambil
   menggulir — keterangannya harus terbaca sekaligus, bukan satu per satu
   saat disorot. Efek buka-tutup tetap dipakai di halaman depan, tempat
   kartunya cuma empat dan berfungsi sebagai cuplikan. */
.cards--catalog .card {
    height: auto;
}

.cards--catalog .card-photo {
    aspect-ratio: 1 / 1;
}

.cards--catalog .card:hover .card-photo {
    aspect-ratio: 1 / 1;
}

.cards--catalog .card-reveal {
    grid-template-rows: 1fr;
    opacity: 1;
}

/* Angkat sedikit saat disorot — cukup untuk menandakan kartunya bisa
   diklik, tanpa mengubah bentuk apa pun. */
.cards--catalog .card {
    transition: transform 0.2s ease, box-shadow 0.2s ease;
}

.cards--catalog .card:hover {
    transform: translateY(-3px);
}

/* --- Halaman --- */
.pager {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: var(--s-5);
    margin-top: var(--s-7);
    padding-top: var(--s-6);
    border-top: 1px solid var(--line);
    font-size: var(--fs-small);
}

.pager span {
    color: var(--ink-muted);
}

.pager a {
    font-weight: 500;
    color: var(--clay);
    text-decoration: none;
}

.pager a:hover {
    text-decoration: underline;
}

/* Panah naik-turun bawaan peramban punya latar putih yang tidak bisa
   diwarnai. Disembunyikan saja — angkanya diketik, bukan dinaikkan
   satu-satu. */
.fgroup input[type="number"]::-webkit-inner-spin-button,
.fgroup input[type="number"]::-webkit-outer-spin-button {
    appearance: none;
    margin: 0;
}

.fgroup input[type="number"] {
    -moz-appearance: textfield;
}


@media (min-width: 901px) {

    /* Panel selalu terbuka di layar lebar — ruangnya ada, dan menutup
       filter di kolomnya sendiri tidak ada gunanya. Judulnya tetap
       tampil, cuma tidak bisa diklik. */
    .cat-filters>summary {
        pointer-events: none;
    }

    /* Kecuali tautan hapus — dia harus tetap bisa ditekan. */
    .cat-filters>summary .cat-filters__clear {
        pointer-events: auto;
    }

    .cat-filters>summary::after {
        display: none;
    }
}

@media (max-width: 900px) {
    .cat-cols {
        grid-template-columns: 1fr;
        gap: var(--s-5);
    }

    /* Di layar kecil saringan berhenti menempel — panelnya menutupi
       daftar kalau tetap sticky. Batas tinggi ikut dilepas: halamannya
       sudah bisa digulir, jadi panel yang punya gulirannya sendiri cuma
       menambah lapisan. */
    .cat-filters {
        position: static;
        max-height: none;
        overflow-y: visible;
    }

    .cards--catalog {
        grid-template-columns: repeat(2, 1fr);
    }
}

@media (max-width: 560px) {
    .cards--catalog {
        grid-template-columns: 1fr;
    }
}