/* ============================================================
   storefront.css — shared visual system buat semua halaman
   storefront (homepage, folder, video detail). --accent di-set
   inline per-halaman (dari branding warna aksen tiap user) - jadi
   nilai --accent di :root ini cuma FALLBACK kalau user belum atur
   warna aksen sendiri.
   Redesign (lihat referensi yang dikasih user): palet dasar pindah
   dari dark-blue ke dark-VIOLET (bg/surface/border), biar match
   "rasa" referensi - --accent tetap terpisah & tetap ikut warna
   custom tiap user, bukan di-hardcode ngikut palet dasar ini.
============================================================ */
:root[data-theme="Dark"] {
  color-scheme: dark;
  --bg: 222 47% 6%;
  --bg-elevated: 222 40% 9%;
  --surface: 222 32% 11%;
  --surface-2: 222 28% 15%;
  --text: 210 20% 98%;
  --text-2: 215 15% 65%;
  --text-3: 215 12% 45%;
  /* PENTING: HARUS putih (0 0% 100%), bukan warna tersendiri - semua
     titik pemakaian (.thumb, .page-link, dst) manggil border ini
     lewat alpha rendah (hsl(var(--border) / 0.08) dkk), teknik yang
     cuma jalan kalau basenya putih polos. Kalau --border sendiri
     udah punya lightness rendah/medium, dikaliin alpha kecil lagi
     hasilnya nyaris nggak keliatan (border ilang). Sama kayak
     --border di :root default di bawah - SENGAJA putih polos juga. */
  --border: 0 0% 100%;
  --accent: 199 89% 58%;
  --accent-muted: 199 35% 18%;
}
:root[data-theme="Light"] {
  color-scheme: light;
  --bg: 0 0% 100%;
  --bg-elevated: 220 20% 97%;
  --surface: 210 20% 98%;
  --surface-2: 214 20% 94%;
  --text: 222 47% 11%;
  --text-2: 215 16% 40%;
  --text-3: 215 12% 55%;
  /* Kebalikan dari tema dark - background-nya terang, jadi border
     butuh HITAM polos (bukan abu-abu/putih) biar teknik alpha-rendah
     yang sama tetep keliatan (lihat komentar di blok "dark" di atas). */
  --border: 0 0% 0%;
  --accent: 258 90% 60%;
  --accent-muted: 258 45% 92%;
}
:root {
  color-scheme: dark;
  /* Konvensi variable HSL-triplet (H S% L%, TANPA di-bungkus hsl()
     di sini) - dipakai lewat hsl(var(--x)) di tiap titik pemakaian,
     dan hsl(var(--x) / A) buat varian transparan (GANTI color-mix()/
     rgba() yang dipakai sebelumnya - lebih ringkas, dukungan browser
     lebih luas). --border SEKARANG cuma 1 variable (dulu ada
     --border-2 terpisah) - dua level "seberapa keliatan" border-nya
     dibedain lewat ALPHA beda di titik pemakaian (/ 0.08 vs / 0.16),
     bukan 2 variable warna yang isinya sama-sama putih.
     --accent FALLBACK doang kalau user belum atur warna aksen sendiri
     (di-override inline per-halaman dari accent_color di database,
     lihat DomainResolver::getSiteBranding()).
     --accent-muted - versi accent yang di-redupin/gelapin, dipakai
     buat state "idle" tombol search (.search-btn) sebelum di-hover -
     nilainya beda sendiri per tema (bukan turunan otomatis dari
     --accent), soalnya butuh kontras yang beda arah tiap tema (di
     tema light misalnya harus TERANG - lavender pucat - bukan gelap,
     soalnya --text di tema itu gelap, kebalikan dari default/dark). */
  --accent: 258 90% 66%;
  --accent-muted: 258 26.09% 19.48%;
  --bg: 260 87% 9%;
  --bg-elevated: 256 51% 15%;
  --surface: 254 49% 17%;
  --surface-2: 254 48% 20%;
  --border: 0 0% 100%;
  --text: 253 47% 96%;
  --text-2: 210 20% 98%;
  --text-3: 254 16% 51%;
  --radius: 14px;
  --radius-sm: 9px;
  --shadow: 0 8px 30px rgba(0, 0, 0, 0.35);
  /* Inter Variable, self-host dari jsDelivr/Fontsource (lihat
     fonts.css) - stack fallback abis itu ngikutin pola situs modern
     kelas Tailwind/Vercel ("ui-sans-serif, system-ui" duluan
     dibanding font generik OS-spesifik), biar tetap konsisten rasanya
     walau Inter lagi belum sempat ke-load (font-display:swap). */
  --font: "Inter Variable", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
}
* { box-sizing: border-box; }
/* Reset dasar level-html (bukan cuma cosmetic) - lihat penjelasan
   masing-masing:
   - -webkit-text-size-adjust: cegah Mobile Safari otomatis
     membesarkan ukuran teks sendiri pas rotate/zoom, biar layout
     nggak "loncat" tak terduga di iOS.
   - tab-size (+ prefix -moz-/-o- buat browser lama): karakter tab
     literal (kalau ada di teks/JSON-LD) dirender lebar 4 kolom,
     bukan default 8 yang kelebaran.
   - font-feature-settings/font-variation-settings: "normal" eksplisit
     - baseline yang bersih, nyegah font-feature nyangkut kebawa dari
       elemen lain (mis. <input>/<button> yang punya default browser
       sendiri-sendiri).
   - -webkit-tap-highlight-color: transparent: ilangin kotak abu-abu
     yang muncul sekilas di Android Chrome/Safari iOS pas tap
     link/tombol - detail kecil yang bikin web kerasa lebih "app-like"
     & rapi, bukan kerasa web biasa.
   Pola ini sama persis dipakai default reset Tailwind CSS - biar
   "rasa" teknis situsnya setara platform modern kelas atas. */
html {
  scroll-behavior: smooth;
  -webkit-text-size-adjust: 100%;
  -moz-tab-size: 4;
  -o-tab-size: 4;
  tab-size: 4;
  -webkit-tap-highlight-color: transparent;
}
body {
  margin: 0;
  /* hsl(var(--bg)) - --bg default = 260 87% 9%, konversi presisi dari
     #10032a, jadi tampilan default TETEP identik, tapi sekarang ikut
     ganti pas data-theme="dark"/"light" aktif di <html>. */
  background: hsl(var(--bg));
  /* background-image:
    radial-gradient(1200px 500px at 15% -10%, hsl(var(--accent) / 0.14), transparent),
    radial-gradient(900px 400px at 100% 0%, hsl(var(--accent) / 0.08), transparent); */
  background-attachment: fixed;
  color: hsl(var(--text));
  font-family: var(--font);
  font-feature-settings: normal;
  font-variation-settings: normal;
  line-height: 1.5;
  -webkit-font-smoothing: antialiased;
}
a { color: inherit; text-decoration: none; }
img { max-width: 100%; display: block; }
.wrap {
    width: 100%;
    margin-right: auto;
    margin-left: auto;
    padding-right: .7rem;
    padding-left: .7rem
}
@media (min-width: 640px) {
    .wrap {
        max-width:640px;
        padding-right: 2rem;
        padding-left: 2rem
    }
}
@media (min-width: 768px) {
    .wrap {
        max-width:768px
    }
}
@media (min-width: 1024px) {
    .wrap {
        max-width:1024px;
        padding-right: 4rem;
        padding-left: 4rem
    }
}
@media (min-width: 1280px) {
    .wrap {
        max-width:1280px;
        padding-right: 5rem;
        padding-left: 5rem
    }
}
@media (min-width: 1536px) {
    .wrap {
        max-width:1536px;
        padding-right: 6rem;
        padding-left: 6rem
    }
}
.-mb-2 {
    margin-bottom: -.5rem
}
.-mb-3 {
    margin-bottom: -.75rem
}
.-mr-0\.5 {
    margin-right: -.125rem
}
.mb-1 {
    margin-bottom: .25rem
}
.mb-2 {
    margin-bottom: .5rem
}
.mb-4 {
    margin-bottom: 1rem
}
.mb-6 {
    margin-bottom: 1.5rem
}
.mb-8 {
    margin-bottom: 2rem
}
.ml-1\.5 {
    margin-left: .375rem
}
.mr-1\.5 {
    margin-right: .375rem
}
.mr-4 {
    margin-right: 1rem
}
.mt-1 {
    margin-top: .25rem
}
.mt-2 {
    margin-top: .5rem
}
.mt-3 {
    margin-top: .75rem
}
.mt-4 {
    margin-top: 1rem
}
.mt-5 {
    margin-top: 1.25rem
}
.mt-6 {
    margin-top: 1.5rem
}
.mt-8 {
    margin-top: 2rem
}
/* ============================================================
   HEADER
============================================================ */
/* SENGAJA cuma baris logo/nav/hamburger yang sticky - search bar +
   ad slot ada di .site-header-search-row TERPISAH (lihat
   site-header.php), BUKAN sticky, ikut scroll normal bareng konten. */
.site-header {
  position: sticky;
  top: 0;
  z-index: 40;
  /* Background-nya SEKARANG dari class utility from-black/to-black\/0/
     bg-gradient-to-b (ditaruh di site-header.php, lihat blok "TAILWIND
     GRADIENT UTILITIES" di bawah) - bukan solid rgba() lagi kayak
     sebelumnya. */
  /* backdrop-filter: blur(14px) saturate(140%); */
  -webkit-backdrop-filter: blur(14px) saturate(140%);
  /* border-bottom: 1px solid hsl(var(--border) / 0.08); */
}
/* ============================================================
   TAILWIND GRADIENT UTILITIES — cuma 3 class ini yang dipakai
   (from-black, to-black/0, bg-gradient-to-b), disalin exact dari
   output Tailwind buat header (linear-gradient hitam solid di atas
   -> transparan di bawah). --tw-gradient-from-position/
   --tw-gradient-to-position di-@property-in dengan initial-value
   0%/100% (persis default preflight Tailwind v3.3+) - tanpa ini,
   var(--tw-gradient-to-position) yang belum pernah di-set bakal
   dianggap invalid dan bikin --tw-gradient-to gagal ke-resolve sama
   sekali. Didukung semua browser evergreen sekarang.

   NAMA class-nya masih "from-black"/"to-black/0" (classname di HTML
   site-header.php nggak diubah, biar nggak perlu update markup), TAPI
   isinya SEKARANG dari hsl(var(--bg)) - BUKAN hitam solid #000 lagi.
   Alasannya: scrim header ini nongol di ATAS konten yang di-scroll,
   jadi solid HITAM cuma cocok buat tema dark. Di tema Light (bg
   putih), scrim hitam solid bakal jadi bar hitam ganjil nempel di
   atas halaman putih - pakai hsl(var(--bg)) bikin scrim-nya otomatis
   ngikut warna background tiap tema (putih->transparent di Light,
   gelap->transparent di Dark/Default). */
@property --tw-gradient-from-position {
  syntax: "<length-percentage>";
  inherits: false;
  initial-value: 0%;
}
@property --tw-gradient-to-position {
  syntax: "<length-percentage>";
  inherits: false;
  initial-value: 100%;
}
.to-black\/0 {
  --tw-gradient-to: hsl(var(--bg) / 0) var(--tw-gradient-to-position);
}
.from-black {
  --tw-gradient-from: hsl(var(--bg)) var(--tw-gradient-from-position);
  --tw-gradient-to: hsl(var(--bg) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
}
.bg-gradient-to-b {
  background-image: linear-gradient(to bottom, var(--tw-gradient-stops));
}
.site-header-top {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
}
.brand {
  display: flex;
  align-items: center;
  gap: 8px;
  min-width: 0;
}
.brand img {
  height: 36px;
  width: 36px;
  border-radius: 9px;
  object-fit: cover;
  flex-shrink: 0;
  background: hsl(var(--surface-2));
}
.brand-fallback {
  height: 36px;
  width: 36px;
  border-radius: 9px;
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  font-weight: 800;
  font-size: 15px;
  color: #fff;
  background: linear-gradient(135deg, hsl(var(--accent)), color-mix(in srgb, hsl(var(--accent)) 60%, #7c3aed));
}
.brand-text {
  min-width: 0;
}
.brand-text h1 {
  margin: 0;
  font-size: 17px;
  font-weight: 800;
  letter-spacing: -0.01em;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.brand-text .tagline {
  margin: 1px 0 0;
  font-size: 12px;
  color: hsl(var(--text-2) / .7);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 40vw;
}
/* ============================================================
   NAV — link teks polos (bukan pill), Home dulu baru kategori
   pilihan user (urutan dari menu_order, lihat getMenuFolders()).
   Desktop: horizontal di sebelah logo. Mobile: disembunyiin di
   belakang tombol hamburger, dibuka jadi dropdown lewat JS
   (storefront.js, toggle class "open").
============================================================ */
.sitenav {
  margin-left: auto;
}
.sitenav-list {
  display: flex;
  align-items: center;
  gap: 22px;
  flex-wrap: wrap;
  list-style: none;
  margin: 0;
  padding: 0;
}
.navlink {
  font-size: 14px;
  font-weight: 600;
  color: hsl(var(--text-2) / .7);
  padding: 4px 0;
  border-bottom: 2px solid transparent;
  transition: 0.15s;
  white-space: nowrap;
}
.navlink:hover { color: hsl(var(--text)); }
.navlink.active { color: hsl(var(--accent)); }
/* Polos (garis doang, TANPA kotak/border/bg di belakangnya) -
   matching referensi yang hamburger-nya minimal, bukan chip
   button. */
.hamburger {
  display: none;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  gap: 5px;
  width: 34px;
  height: 34px;
  padding: 0;
  margin-left: auto;
  background: none;
  border: none;
  cursor: pointer;
  flex-shrink: 0;
}
.hamburger span {
  display: block;
  height: 2px;
  width: 20px;
  background: hsl(var(--text));
  border-radius: 2px;
  transition: 0.2s;
}
.hamburger[aria-expanded="true"] span:nth-child(1) { transform: translateY(6px) rotate(45deg); }
.hamburger[aria-expanded="true"] span:nth-child(2) { opacity: 0; }
.hamburger[aria-expanded="true"] span:nth-child(3) { transform: translateY(-6px) rotate(-45deg); }
/* ============================================================
   SEARCH BAR — BUKAN lagi 2 kotak terpisah (input+tombol dengan gap
   & border sendiri-sendiri). Sekarang 1 KONTAINER BORDERED tunggal
   (.search-form itu sendiri) berisi ikon + input BORDERLESS yang
   nyatu sama kontainernya, dan tombol "Cari" DOCKED nempel di
   pinggir kanan (inset dikit dari border luar, bukan nempel rapat
   ke tepi) - persis pola referensi (nested pill-in-pill), bukan
   "input pill" + "tombol pill" yang kepisah renggang kayak versi
   sebelumnya.
   .site-header-search-row ada di LUAR <header> (lihat
   site-header.php) - background-nya nerusin gradient body biasa
   (BUKAN sticky), makanya nggak perlu background sendiri di sini.
============================================================ */
.site-header-search-row { padding: 20px 0 18px; }
.search-form {
  display: flex;
  align-items: center;
  gap: 8px;
  /*max-width: 480px;*/
  margin: 0 auto 0 0;
  padding: 4px 4px 4px 16px;
  border-radius: 0.5rem;
  border: 1px solid hsl(var(--accent) / 26%);
  background-color: hsl(var(--bg) / var(--tw-bg-opacity, 1));
  transition: border-color 0.15s;
}
.search-form:focus-within { border-color: hsl(var(--accent)); }
.search-icon { flex-shrink: 0; color: hsl(var(--text-3)); }
.search-input {
  flex: 1;
  min-width: 0;
  padding: 9px 4px;
  border: none;
  background: transparent;
  color: hsl(var(--text));
  font-size: 13.5px;
  font-family: var(--font);
}
.search-input:focus { outline: none; }
.search-input::placeholder { color: hsl(var(--text-3)); }
.search-btn {
  flex-shrink: 0;
  padding: 9px 18px;
  border-radius: 0.5rem;
  border: none;
  background: hsl(var(--accent-muted));
  color: hsl(var(--text));
  font-size: 13.5px;
  font-weight: 700;
  font-family: var(--font);
  cursor: pointer;
  transition: 0.15s;
}
.search-btn:hover { background: hsl(var(--accent)); color: #fff; }
/* ============================================================
   AD SLOT — placeholder kosong, cuma kekutup kalau nanti diisi
   (belum ada sistem iklan) - collapse total kalau kosong biar
   nggak nyisain kotak kosong di layout.
============================================================ */
.ad-slot { margin-bottom: 14px; }
.ad-slot:empty { display: none; margin: 0; }
/* ============================================================
   PAGE HERO — H1 + subtitle di atas grid video (homepage,
   kategori, hasil search).
============================================================ */
.page-hero { padding: 4px 0 18px; }
.page-heading {
  margin: 0;
  font-size: 22px;
  font-weight: 800;
  letter-spacing: -0.01em;
  color: hsl(var(--text));
}
.page-subtitle {
  margin: 6px 0 0;
  font-size: 13.5px;
  color: hsl(var(--text-2) / .7);
}
/* ============================================================
   BREADCRUMB
============================================================ */
.breadcrumb {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 12.5px;
  color: hsl(var(--text-3));
  padding: 16px 0 0;
  flex-wrap: wrap;
}
.breadcrumb a { color: hsl(var(--text-2) / .7); }
.breadcrumb a:hover { color: hsl(var(--accent)); }
.breadcrumb .sep { opacity: 0.5; }
.breadcrumb .current { color: hsl(var(--text)); font-weight: 600; }
/* ============================================================
   MAIN / SECTION HEADINGS
============================================================ */
main { padding: 22px 0 60px; }
.section-title {
  font-size: 15px;
  font-weight: 800;
  margin: 0 0 14px;
  color: hsl(var(--text));
  display: flex;
  align-items: baseline;
  gap: 8px;
}
.section-title .sub {
  font-size: 12px;
  font-weight: 500;
  color: hsl(var(--text-3));
}
/* ============================================================
   VIDEO GRID / CARD
============================================================ */
.grid {
  display: grid;
  gap: 14px;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  row-gap: 1.5rem;
}
.card {
  display: block;
  border-radius: var(--radius-sm);
  overflow: hidden;
  transition: transform 0.18s ease;
}
.card:hover { transform: translateY(-3px); }
.thumb {
  position: relative;
  width: 100%;
  aspect-ratio: 16 / 9;
  background: hsl(var(--surface));
  border-radius: var(--radius-sm);
  overflow: hidden;
  border: 1px solid hsl(var(--border) / 0.08);
}
.card:hover .thumb { border-color: hsl(var(--border) / 0.16); box-shadow: var(--shadow); }
.thumb img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform 0.35s ease; }
.card:hover .thumb img { transform: scale(1.04); }
.thumb-placeholder {
  width: 100%;
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  color: hsl(var(--text-3));
}
/* .duration & .like-btn/.card-like-icon SENGAJA tetep pakai
   rgba(0,0,0,..)/warna hardcode - dua-duanya scrim/badge yang
   nongol DI ATAS thumbnail video (bukan di atas background
   halaman), jadi scrim hitam translucent tetep kontras & kebaca di
   atas thumbnail APAPUN, di tema APAPUN - nggak perlu (malah lebih
   aman KALAU tetep) ngikut palet tema. */
.duration {
  position: absolute;
  bottom: 4px;
  right: 4px;
  background: rgb(0 0 0 / 50%);
  color: #fff;
  font-size: 11px;
  font-weight: 600;
  padding: 2px 6px;
  border-radius: .25rem;
  letter-spacing: 0.02em;
}
.like-btn {
  position: absolute;
  bottom: 4px;
  left: 4px;
  z-index: 2;
  display: flex;
  align-items: center;
  gap: 4px;
  background: rgba(0, 0, 0, 0.62);
  color: #d7deea;
  font-size: 11px;
  font-weight: 600;
  padding: 4px 8px;
  border-radius: 999px;
  cursor: pointer;
  user-select: none;
  transition: 0.15s;
}
.like-btn:hover { background: rgba(0, 0, 0, 0.82); }
.like-btn.liked { color: #fff; background: hsl(var(--accent)); }
/* Ganti .like-btn di renderVideoCard() (sekarang di-comment out di
   functions.php) - badge ikon statis (bukan tombol, nggak ada
   hitungan/klik lagi), posisi disamain kayak .like-btn (pojok
   kiri-bawah thumb). */
.card-like-icon {
  position: absolute;
  bottom: 4px;
  left: 4px;
  z-index: 2;
  display: flex;
  align-items: center;
  justify-content: center;
  background: rgba(0, 0, 0, 0.62);
  color: #d7deea;
  padding: 5px;
  border-radius: 999px;
  svg{
      width: 0.9rem;
      height: 0.9rem;
      color: red;
  }
}
.card-body { padding: 10px 2px 0; }
.title {
  margin-left: .125rem;
  margin-right: .125rem;
  text-align: center;
  font-size: .875rem;
  font-weight: 400;
  line-height: 1.2;
  color: hsl(var(--text-2) / .7);
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.card:hover .title { color: hsl(var(--accent)); }
.meta { font-size: 12px; color: hsl(var(--text-3)); margin-top: 4px; }
.empty {
  color: hsl(var(--text-2) / .7);
  padding: 60px 20px;
  text-align: center;
  border: 1px dashed hsl(var(--border) / 0.16);
  border-radius: var(--radius);
  font-size: 14px;
}
/* ============================================================
   PAGINATION — 2 varian dirender bareng dari renderPagination()
   (public/inc/functions.php), ditoggle lewat CSS (bukan JS):
   .pagination-desktop  bernomor + ellipsis ("1 2 3 ... 404 405
                         Next >") - dipakai di layar >640px.
   .pagination-mobile   Prev / dropdown lompat halaman ("N / total")
                         / Next - lebih ringkas dibanding numbered
                         list buat situs dengan ratusan halaman,
                         dipakai di layar <=640px (lihat breakpoint
                         RESPONSIVE di bawah).
============================================================ */
.pagination {
  display: flex;
  align-items: center;
  justify-content: center;
  flex-wrap: wrap;
  gap: 6px;
  margin-top: 30px;
}
.pagination-mobile { display: none; }
.page-link {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 36px;
  height: 36px;
  padding: 0 10px;
  border-radius: var(--radius-sm);
  font-size: 13px;
  font-weight: 600;
  border: 1px solid hsl(var(--border) / 0.08);
  background: hsl(var(--surface));
  color: hsl(var(--text-2) / .7);
}
.page-link:hover { color: hsl(var(--text)); border-color: hsl(var(--border) / 0.16); }
/* Active = border 2px warna aksen (bukan fill solid) - biar nomor
   halaman aktif kekontras jelas tapi nggak "berat" kayak tombol
   solid, matching referensi desain user.
   color SEKARANG hsl(var(--text)) - BUKAN #fff lagi. Background-nya
   var(--surface), yang di tema Light nyaris putih juga - kalau text
   dipaksa putih, teksnya bakal INVISIBLE (putih di atas putih). */
.page-link.active {
  color: hsl(var(--text));
  background: hsl(var(--surface));
  border: 2px solid hsl(var(--accent));
}
.page-link.prev, .page-link.next { padding: 0 14px; }
.page-link.disabled { opacity: 0.35; pointer-events: none; }
.page-ellipsis {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 20px;
  color: hsl(var(--text-3));
  font-size: 13px;
}
/* Dropdown lompat halaman (mobile) - <select> dibungkus <form GET>
   biar tetap jalan tanpa JS (submit manual lewat tombol <noscript>),
   storefront.js nambahin auto-submit onchange buat yang JS-nya
   nyala (progressive enhancement, bukan satu-satunya jalan). */
.page-jump {
  display: flex;
  align-items: center;
  gap: 6px;
}
.page-jump-select {
  height: 36px;
  padding: 0 8px;
  border-radius: var(--radius-sm);
  border: 1px solid hsl(var(--border) / 0.16);
  background: hsl(var(--surface));
  color: hsl(var(--text));
  font-size: 13px;
  font-weight: 700;
  font-family: var(--font);
}
.page-jump-select:focus { outline: none; border-color: hsl(var(--accent)); }
.page-jump-total {
  font-size: 13px;
  color: hsl(var(--text-3));
  white-space: nowrap;
}
.page-jump-go {
  height: 36px;
  padding: 0 12px;
  border-radius: var(--radius-sm);
  border: 1px solid hsl(var(--border) / 0.16);
  background: hsl(var(--surface-2));
  color: hsl(var(--text));
  font-size: 13px;
  font-weight: 700;
  cursor: pointer;
}
/* ============================================================
   VIDEO DETAIL PAGE
============================================================ */
.player-wrap {
  position: relative;
  width: 100%;
  aspect-ratio: 16 / 9;
  background: #000;
  border-radius: var(--radius);
  overflow: hidden;
  border: 1px solid hsl(var(--border) / 0.08);
  box-shadow: var(--shadow);
}
.player-wrap iframe {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  border: 0;
}
.video-head {
  margin-top: 18px;
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 16px;
  flex-wrap: wrap;
}
.video-head h1 {
  font-size: 21px;
  font-weight: 800;
  margin: 0;
  line-height: 1.35;
  letter-spacing: -0.01em;
}
.video-stats {
  margin-top: 6px;
  font-size: 13px;
  color: hsl(var(--text-2) / .7);
}
.like-cta {
  flex-shrink: 0;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 10px 18px;
  border-radius: 999px;
  font-size: 13.5px;
  font-weight: 700;
  background: hsl(var(--surface));
  border: 1px solid hsl(var(--border) / 0.16);
  color: hsl(var(--text));
  cursor: pointer;
  transition: 0.15s;
}
.like-cta:hover { border-color: hsl(var(--accent)); }
.like-cta.liked { background: hsl(var(--accent)); border-color: transparent; color: #fff; }
/* Wrapper - video bisa punya >1 category sekarang (lihat
   migration-5-video-categories.sql), jadi tag-nya dirender bareng
   dalam 1 baris yang bisa wrap. */
.video-category-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 14px;
}
.video-folder-tag {
  display: inline-flex;
  font-size: 12.5px;
  font-weight: 600;
  color: hsl(var(--text-2) / .7);
  background: hsl(var(--surface));
  border: 1px solid hsl(var(--border) / 0.08);
  padding: 6px 12px;
  border-radius: 999px;
}
.video-folder-tag:hover { color: hsl(var(--accent)); border-color: hsl(var(--accent)); }
.suggested {
  margin-top: 44px;
  padding-top: 30px;
  border-top: 1px solid hsl(var(--border) / 0.08);
}
/* ============================================================
   FOOTER — deskripsi situs + daftar link kategori + copyright,
   pola dari desain referensi (footer 2-kolom + garis bawah).
============================================================ */
.site-footer {
  border-top: 1px solid hsl(var(--border) / 0.08);
  padding: 34px 0 30px;
  margin-top: 30px;
}
.footer-about { max-width: 640px; }
.footer-brand { font-size: 16px; font-weight: 800; color: hsl(var(--text)); }
.footer-desc {
  margin: 8px 0 0;
  font-size: 13px;
  line-height: 1.7;
  color: hsl(var(--text-2) / .7);
}
.footer-categories { margin-top: 26px; }
.footer-heading {
  font-size: 12px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: hsl(var(--text-3));
  margin-bottom: 10px;
}
.footer-catlist {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  gap: 8px 18px;
}
.footer-catlist li { font-size: 13px; }
.footer-catlist a { color: hsl(var(--text-2) / .7); }
.footer-catlist a:hover { color: hsl(var(--accent)); }
.footer-bottom {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  flex-wrap: wrap;
  font-size: 12.5px;
  color: hsl(var(--text-3));
  margin-top: 26px;
  padding-top: 20px;
  border-top: 1px solid hsl(var(--border) / 0.08);
}
.footer-powered a { color: hsl(var(--text-2) / .7); font-weight: 600; }
.footer-powered a:hover { color: hsl(var(--accent)); }
/* ============================================================
   TOAST
============================================================ */
.toast {
  position: fixed;
  bottom: 20px;
  right: 20px;
  left: auto;
  z-index: 999;
  padding: 12px 20px;
  border-radius: 10px;
  font-size: 13px;
  font-weight: 600;
  background: hsl(var(--surface-2));
  border: 1px solid hsl(var(--border) / 0.16);
  color: hsl(var(--text));
  box-shadow: var(--shadow);
  animation: toastUp 0.25s ease;
  max-width: min(320px, calc(100vw - 40px));
}
@keyframes toastUp {
  from { transform: translateY(12px); opacity: 0; }
  to { transform: translateY(0); opacity: 1; }
}
/* ============================================================
   RESPONSIVE
============================================================ */
/* Desktop default: grid 4 kolom (bukan auto-fill bebas), biar
   konsisten sama referensi desktop (4 video per baris). */
@media (min-width: 1024px) {
  .grid { grid-template-columns: repeat(4, 1fr); }
}
@media (max-width: 640px) {
  .wrap { padding: 0 14px; }
  .grid {grid-template-columns: repeat(2, 1fr);gap: 10px;row-gap: 1.5rem;}
  .brand img, .brand-fallback { height: 32px; width: 32px; }
  .brand-text h1 { font-size: 15px; }
  .video-head h1 { font-size: 18px; }
  .like-cta { padding: 8px 14px; font-size: 13px; }
  /* Nav disembunyiin di belakang hamburger - dibuka jadi dropdown
     full-width di bawah top bar pas class "open" ke-toggle JS. Kontainer
     ul.sitenav-list dibikin kartu bulat (bg surface + border + radius),
     item ul>li>a full-width TANPA border-bottom per-item (beda dari
     desktop yang pakai underline aktif) - persis pola referensi
     KingBokep: list rapi dalam 1 card, "Home"/item aktif lebih terang,
     yang lain --text-2 muted, semua warnanya TETAP dari variable yang
     sama kayak desktop, cuma elemen & tata letaknya yang diganti. */
  .site-header-top { flex-wrap: wrap; }
  .hamburger { display: flex; }
  .sitenav {
    display: none;
    width: 100%;
    order: 3;
    margin: 10px 0 4px;
  }
  .sitenav.open { display: block; }
  .sitenav-list {
    flex-direction: column;
    align-items: stretch;
    gap: 0;
    background: hsl(var(--surface));
    border: 1px solid hsl(var(--border) / 0.08);
    border-radius: var(--radius);
    padding: 6px;
  }
  .navlink {
    display: block;
    width: 100%;
    padding: 11px 10px;
    border-radius: var(--radius-sm);
    border-bottom: none;
    text-align: left;
  }
  .navlink.active { border-bottom: none; font-weight: 700; }
  .navlink:last-child { border-bottom: none; }
  .search-form { max-width: none; }
  .page-heading { font-size: 19px; }
  /* Pagination bernomor diganti versi ringkas (Prev / dropdown /
     Next) di layar kecil - lihat blok PAGINATION di atas. */
  .pagination-desktop { display: none; }
  .pagination-mobile { display: flex; justify-content: space-between; gap: 8px; }
}
.mm-cc-header {
  padding-top: .75rem;
  padding-bottom: .75rem;
  justify-content: space-between;
}
.mm-main-wrap {
  padding-top: 0px;
}