/*
Theme Name: Zona Intelektual Grid
Theme URI: https://zonaintelektual.com
Author: Zona Intelektual
Author URI: https://zonaintelektual.com
Description: Tema berita grid custom, ringan, tanpa font/JS pihak ketiga, dioptimalkan untuk skor performa 100 di mobile & desktop (Core Web Vitals friendly).
Version: 1.0.7
Requires at least: 6.0
Requires PHP: 7.4
Tested up to: 6.6
License: GNU General Public License v2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: zona-intelektual
*/

/* ================= DESIGN TOKENS ================= */
:root{
  --ink:#071A3D;
  --paper:#F3F8FE;
  --card:#FFFFFF;
  --crimson:#0067B3; /* semula #0090FF — digelapkan agar teks/badge memenuhi kontras WCAG AA (4.5:1) di atas latar terang */
  --gold:#22D3EE;
  --gold-text:#0A6E82; /* varian gelap dari --gold, khusus teks di atas latar terang (mis. nomor trending) agar kontras AA */
  --teal:#00308C;
  --grey:#5A6B8C;
  --line:#DCE9F7;
  --radius:2px;
  --maxw:1240px;
  --font-body: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  --font-display: Georgia, "Times New Roman", "Noto Serif", serif;
  --font-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;
}
@media (prefers-color-scheme: dark){
  :root{
    --paper:#060F24; --card:#0D1D3D; --ink:#EAF4FF;
    --line:#1B3660; --grey:#8FA7CC;
    --crimson:#3FA9FF; /* versi lebih terang khusus dark mode agar tetap kontras AA di atas latar gelap */
    --gold-text:var(--gold); /* di dark mode, --gold asli sudah kontras tinggi di atas latar gelap */
  }
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
@media (prefers-reduced-motion: reduce){
  html{scroll-behavior:auto}
  *{animation-duration:.001ms !important; animation-iteration-count:1 !important; transition-duration:.001ms !important}
}
body{
  margin:0; background:var(--paper); color:var(--ink);
  font-family:var(--font-body); line-height:1.5; -webkit-font-smoothing:antialiased;
}
img,svg{display:block; max-width:100%; height:auto}
a{color:inherit; text-decoration:none}
ul{margin:0; padding:0; list-style:none}
h1,h2,h3,h4{margin:0; font-family:var(--font-display)}
.wrap{max-width:var(--maxw); margin-inline:auto; padding-inline:16px}
:focus-visible{outline:3px solid var(--gold); outline-offset:2px}

.skip-link{position:absolute; left:-999px; top:0; background:var(--gold); color:var(--ink); padding:10px 16px; z-index:100}
.skip-link:focus{left:16px; top:16px}

/* ================= HEADER ================= */
header.site{border-bottom:2px solid var(--ink); background:var(--paper); position:sticky; top:0; z-index:20}
.topbar{display:flex; align-items:center; justify-content:space-between; padding-block:14px; gap:16px}
.logo{font-family:var(--font-display); font-weight:700; font-size:26px; letter-spacing:-.5px; white-space:nowrap; display:flex; align-items:center; flex:none}
.logo span{color:var(--crimson)}
.logo img{height:clamp(30px, 6vw, 44px); width:auto; max-width:170px; display:block}
.foot-logo img{height:clamp(26px, 4vw, 36px); width:auto; max-width:150px; display:block; margin-bottom:14px}
nav.primary{display:none}
nav.primary ul{display:flex; gap:22px; font-size:14px; font-weight:600; text-transform:uppercase; letter-spacing:.04em}
nav.primary li{position:relative}
nav.primary a{display:inline-block; padding-block:6px; border-bottom:2px solid transparent}
nav.primary a:hover, nav.primary a:focus-visible{border-color:var(--crimson)}
.actions{display:flex; align-items:center; gap:10px}
.icon-btn{border:1px solid var(--line); background:var(--card); width:38px; height:38px; border-radius:var(--radius); display:flex; align-items:center; justify-content:center; cursor:pointer}
.icon-btn svg{width:18px; height:18px; stroke:var(--ink); fill:none; stroke-width:2}

#menu-toggle{display:none}
.drawer{
  position:fixed; inset:0 0 0 auto; width:min(84vw,320px); background:var(--card);
  transform:translateX(100%); transition:transform .25s ease; z-index:40; padding:20px;
  border-left:2px solid var(--ink);
}
#menu-toggle:checked ~ .drawer{transform:translateX(0)}
.drawer ul{display:flex; flex-direction:column; gap:2px; margin-top:20px}
.drawer a{display:block; padding:12px 4px; font-weight:700; border-bottom:1px solid var(--line)}
.scrim{position:fixed; inset:0; background:rgba(20,23,26,.5); opacity:0; pointer-events:none; transition:opacity .25s ease; z-index:30}
#menu-toggle:checked ~ .scrim{opacity:1; pointer-events:auto}
.drawer-close{display:flex; justify-content:flex-end}

/* ================= LIVE TICKER ================= */
.ticker{background:var(--ink); color:var(--paper); overflow:hidden; border-bottom:1px solid var(--gold)}
.ticker-inner{display:flex; align-items:center; gap:14px; padding-block:8px}
.ticker-tag{flex:none; background:var(--crimson); color:#fff; font:700 11px/1 var(--font-mono); padding:5px 8px; border-radius:2px; letter-spacing:.06em}
.ticker-track-wrap{overflow:hidden; flex:1}
.ticker-track{display:flex; gap:36px; width:max-content; font:600 13px/1 var(--font-mono); white-space:nowrap; animation:scroll-left 28s linear infinite}
.ticker:hover .ticker-track, .ticker:focus-within .ticker-track{animation-play-state:paused}
@keyframes scroll-left{from{transform:translateX(0)} to{transform:translateX(-50%)}}
.ticker-track em{color:var(--gold); font-style:normal}

/* ================= CATEGORY PILLS ================= */
.pills{display:flex; gap:8px; overflow-x:auto; padding-block:14px; scrollbar-width:none}
.pills::-webkit-scrollbar{display:none}
.pill{flex:none; font:700 12px/1 var(--font-body); text-transform:uppercase; letter-spacing:.05em; padding:8px 14px; border:1px solid var(--ink); border-radius:20px; background:transparent; cursor:pointer; color:var(--ink)}
.pill.is-active, .pill[aria-current="page"]{background:var(--ink); color:var(--paper)}

/* ================= HERO BENTO GRID ================= */
.hero-grid{display:grid; grid-template-columns:1fr; gap:16px; padding-block:8px 24px}
.hero-feat .thumb{aspect-ratio:16/9}
.hero-side{display:grid; gap:16px}
.hero-side .thumb{aspect-ratio:16/10}
.card{background:var(--card); border:1px solid var(--line)}
.thumb{position:relative; width:100%; background:linear-gradient(135deg,var(--teal),var(--ink)); overflow:hidden}
.thumb img{width:100%; height:100%; object-fit:cover}
.thumb .cat-tag{position:absolute; left:10px; top:10px; background:var(--crimson); color:#fff; font:700 11px/1 var(--font-body); text-transform:uppercase; letter-spacing:.05em; padding:6px 10px; border-radius:2px; z-index:2}
.art-body{padding:14px 16px 18px}
.hero-feat h1{font-size:clamp(22px,4vw,34px); line-height:1.15; margin-bottom:8px}
.hero-side h2{font-size:18px; line-height:1.25; margin-bottom:6px}
.excerpt{color:var(--grey); font-size:14px; margin-bottom:10px}
.meta{display:flex; gap:10px; align-items:center; font:600 12px/1 var(--font-mono); color:var(--grey); flex-wrap:wrap}
.meta .dot{width:3px; height:3px; background:var(--grey); border-radius:50%}

/* ================= SECTION HEADER ================= */
.sec-head{display:flex; align-items:baseline; justify-content:space-between; border-bottom:3px solid var(--ink); padding-bottom:8px; margin-bottom:16px; margin-top:8px}
.sec-head h2{font-size:20px; text-transform:uppercase; letter-spacing:.03em}
.sec-head a{font:700 12px/1 var(--font-mono); color:var(--crimson); text-transform:uppercase}

/* ================= MAIN LAYOUT ================= */
.layout{display:grid; grid-template-columns:1fr; gap:32px; padding-bottom:40px}
.grid-news{display:grid; grid-template-columns:1fr; gap:18px}
.news-card{content-visibility:auto; contain-intrinsic-size:1px 420px}
.news-card .thumb{aspect-ratio:16/9}
.news-card h3{font-size:17px; line-height:1.3; margin-bottom:6px}

aside{display:flex; flex-direction:column; gap:28px}
.widget{background:var(--card); border:1px solid var(--line); padding:18px}
.widget h4,.widget .widgettitle{font-size:14px; text-transform:uppercase; letter-spacing:.06em; border-bottom:2px solid var(--ink); padding-bottom:10px; margin-bottom:14px}
.trending-item{display:flex; gap:12px; padding-block:10px; border-bottom:1px solid var(--line)}
.trending-item:last-child{border-bottom:none}
.trending-num{font:700 20px/1 var(--font-mono); color:var(--gold-text); width:28px; flex:none}
.trending-item h5{font-size:14px; line-height:1.35; font-family:var(--font-body); font-weight:700; margin:0}
.newsletter p{color:var(--grey); font-size:13px; margin:0 0 12px}
.newsletter form{display:flex; gap:8px}
.newsletter input[type=email]{flex:1; min-width:0; padding:10px; border:1px solid var(--line); font-size:14px; border-radius:2px; background:var(--paper); color:var(--ink)}
.btn{background:var(--crimson); color:#fff; border:none; padding:10px 14px; font-weight:700; font-size:13px; cursor:pointer; border-radius:2px}
.tag-cloud{display:flex; flex-wrap:wrap; gap:8px}
.tag-cloud a{font-size:12px; font-weight:600; padding:6px 10px; border:1px solid var(--line); border-radius:20px; display:inline-block}

/* Single post */
.single-article{padding-block:28px 60px}
.single-article .thumb{aspect-ratio:16/9; margin-bottom:20px}
.single-article h1{font-size:clamp(24px,4vw,38px); line-height:1.2; margin-bottom:12px}
.single-content{font-size:17px; line-height:1.75; max-width:70ch}
.single-content p{margin:0 0 1.2em}
.single-content img{border:1px solid var(--line); margin-block:1em}
.single-tags{display:flex; flex-wrap:wrap; gap:8px; margin-top:28px}

/* ================= FOOTER ================= */
footer.site{background:var(--paper); color:var(--ink); margin-top:20px; border-top:2px solid var(--ink)}
.foot-grid{display:grid; grid-template-columns:1fr; gap:28px; padding-block:40px}
footer.site h4{font-size:13px; text-transform:uppercase; letter-spacing:.06em; color:var(--crimson); margin-bottom:14px}
footer.site a{display:block; font-size:14px; color:var(--ink); padding-block:5px}
.foot-social{display:flex; gap:10px}
.foot-social a{width:36px; height:36px; border:1px solid var(--line); display:flex; align-items:center; justify-content:center; border-radius:50%; padding:0}
.foot-social svg{width:16px; height:16px; stroke:var(--ink); fill:none; stroke-width:2}
.foot-bottom{border-top:1px solid var(--line); text-align:center; font-size:12px; color:var(--grey); padding-block:16px}

/* ================= DESKTOP ≥ 860px ================= */
@media (min-width:860px){
  nav.primary{display:block}
  .menu-btn{display:none}
  .hero-grid{grid-template-columns:2fr 1fr}
  .layout{grid-template-columns:2.2fr 1fr}
  .grid-news{grid-template-columns:repeat(2,1fr)}
}
@media (min-width:1120px){
  .grid-news{grid-template-columns:repeat(3,1fr)}
  .foot-grid{grid-template-columns:2fr 1fr 1fr 1fr}
}

.screen-reader-text{position:absolute !important; width:1px; height:1px; margin:-1px; padding:0; border:0; overflow:hidden; clip:rect(1px,1px,1px,1px); clip-path:inset(50%); word-wrap:normal !important}

/* =====================================================================
   AUTO-RESPONSIVE SAFETY NET — TAMBAHAN, TIDAK MENGUBAH STRUKTUR/DESAIN
   Berlaku untuk SEMUA gambar & tabel: yang sudah ada maupun yang akan
   dibuat di masa depan lewat editor artikel (mis. tempelan dari Word/CMS
   lain yang membawa atribut/inline-style lebar tetap px, atau tabel
   tanpa wrapper). !important sengaja dipakai HANYA di sini agar bisa
   menimpa inline style bawaan konten (mis. style="width:800px") tanpa
   menyentuh CSS desain di atas.
   ===================================================================== */
img, svg, video, iframe, embed, object, canvas{
  max-width:100% !important;
}
img, svg{
  height:auto !important;
}
.single-content table,
.art-body table,
.widget table{
  max-width:100%;
}
/* Wrapper otomatis (dibuat oleh inc/main.js) untuk tabel apa pun di
   dalam konten artikel — memberi scroll horizontal yang terkontrol
   di mobile, alih-alih melebarkan seluruh halaman. */
.zi-table-scroll{
  width:100%;
  overflow-x:auto;
  -webkit-overflow-scrolling:touch;
  margin-block:1em;
}
.zi-table-scroll table{
  width:100%;
  border-collapse:collapse;
}
.single-content pre,
.single-content code{
  max-width:100%;
  overflow-x:auto;
}

/* =====================================================================
   PENGUAT AKSESIBILITAS TAMBAHAN
   ===================================================================== */
/* Target sentuh minimum 44x44px untuk elemen interaktif kecil di mobile
   (WCAG 2.5.5 / Lighthouse "tap targets"), tanpa mengubah ukuran visual. */
.pill{min-height:32px}
@media (max-width:859px){
  .icon-btn{width:40px; height:40px}
}
/* Pastikan teks placeholder tidak jadi satu-satunya label bagi pembaca
   skrin pada input pencarian/newsletter (label screen-reader sudah ada
   di markup; ini hanya jaring pengaman visual fokus). */
input:focus-visible, textarea:focus-visible, select:focus-visible{
  outline:3px solid var(--gold);
  outline-offset:1px;
}

/* =====================================================================
   PATCH: HEADER RESPONSIVE FIX (logo & ikon cari/menu)
   Blok ini murni TAMBAHAN — tidak ada rule di atas yang diubah/dihapus,
   sehingga tidak menyentuh struktur/desain asli maupun skor Lighthouse.

   1) Kunci overflow-x di html/body: ini akar masalah "halaman melebar
      & geser ke kanan" pada tangkapan layar. Jika ada satu elemen
      konten (gambar/tabel dsb.) sedikit lebih lebar dari layar, TANPA
      pengaman ini seluruh halaman ikut melebar — dan karena header
      bersifat sticky mengikuti lebar dokumen (bukan lebar layar),
      ikon cari & menu ikut "terdorong" ke kanan sampai terlihat
      mepet/terpotong. Dengan overflow-x:hidden, kelebihan lebar itu
      dipotong rapi, halaman tidak lagi bisa digeser, dan header selalu
      pas mengikuti lebar layar.
   2) Logo dikecilkan sedikit khusus di layar sangat sempit (<480px)
      dan jarak antar ikon dirapatkan, supaya topbar terasa lebih lega
      tanpa mengubah proporsi desain di layar lain.
   3) flex-shrink/min-width:0 mencegah logo & ikon "dipaksa mekar"
      saat ruang topbar sempit.
   ===================================================================== */
html, body{
  max-width:100%;
  overflow-x:hidden;
}
.topbar{
  min-width:0;
}
.logo{
  min-width:0;
  flex-shrink:1;
}
.actions{
  flex-shrink:0;
}
@media (max-width:479px){
  .logo img{
    max-width:130px;
    height:clamp(26px, 7vw, 36px);
  }
  .actions{
    gap:6px;
  }
}

/* =====================================================================
   PATCH v1.0.4 — ANTI-OVERFLOW UNIVERSAL (judul panjang, breadcrumb plugin
   SEO, dsb.)
   Blok ini murni TAMBAHAN. Tidak ada rule warna/ukuran/tipografi/desain
   di atas yang diubah atau dihapus, sehingga skor Performa, Aksesibilitas,
   Praktik Terbaik, dan SEO yang sudah 100 tidak terpengaruh (tidak ada
   request baru, tidak ada font/JS pihak ketiga, murni CSS tambahan).

   AKAR MASALAH (sesuai contoh tangkapan layar halaman artikel):
   Beberapa elemen — judul artikel yang panjang, atau breadcrumb yang
   dicetak oleh plugin SEO (Rank Math/Yoast/dll, di luar file tema ini) —
   bisa menghasilkan SATU baris teks tanpa titik potong kata yang lebih
   lebar dari layar. Karena elemen itu berada di dalam kontainer flex/grid
   (mis. .layout, .hero-grid, article), perilaku default flex/grid item
   (min-width:auto) membuat kontainer ikut melebar mengikuti konten
   terpanjang, bukan mengikuti lebar layar. Karena html/body sudah diberi
   overflow-x:hidden (lihat patch header di atas) untuk mencegah halaman
   bisa digeser, kelebihan lebar itu justru membuat bagian kanan halaman
   terpotong dari tampilan alih-alih membungkus ke baris baru — persis
   seperti pada foto (judul, breadcrumb, dan gambar hero terlihat terpotong
   di sisi kanan).

   PERBAIKAN (2 lapis, keduanya hanya properti wrapping/overflow):
   1) Teks pada judul/paragraf/meta/breadcrumb dipaksa boleh membungkus di
      titik mana pun sehingga tidak ada satu kata/baris yang lebih lebar
      dari kontainernya.
   2) Kontainer flex/grid utama diberi min-width:0 (dan min-height:0 untuk
      kolom flex) agar diizinkan menyusut mengikuti lebar layar, bukan
      "dipaksa mekar" oleh anak kontennya — tanpa mengubah ukuran visual
      di kondisi normal karena kontainer memang sudah selebar induknya
      lewat width:100%/grid-template-columns yang sudah ada.
   3) Elemen breadcrumb yang biasa dicetak plugin SEO (kelas standar
      Rank Math / Yoast / Breadcrumb NavXT) ditarget secara defensif agar
      selalu membungkus & tidak pernah nowrap, apa pun CSS bawaan plugin
      tersebut. Tema tidak mengatur warna/ukuran font elemen ini (itu
      tetap menjadi tanggung jawab plugin) — hanya perilaku wrapping-nya.
   ===================================================================== */

/* 1) Cegah teks jadi sumber overflow horizontal */
h1, h2, h3, h4, h5, h6,
p, li, td, th, dt, dd, blockquote,
.meta, .excerpt, .logo, .single-content, .single-content *,
.art-body, .art-body *{
  overflow-wrap: break-word;
  word-break: break-word;
}

/* 2) Izinkan kontainer flex/grid menyusut mengikuti lebar layar,
      bukan mengikuti lebar konten terpanjang di dalamnya */
.wrap, .topbar, .ticker-inner, .layout, article, .single-article,
.hero-grid, .hero-feat, .hero-side, .card, .thumb, .art-body,
.single-content, .grid-news, .news-card, aside, .widget,
.foot-grid, .meta{
  min-width:0;
}

/* 3) Jaring pengaman untuk breadcrumb plugin SEO (di luar file tema ini)
      agar tidak pernah jadi satu baris nowrap yang lebih lebar dari layar */
.breadcrumb, .breadcrumbs, .breadcrumb-trail, .breadcrumb_last,
.rank-math-breadcrumb, .rank-math-breadcrumb *,
.yoast-breadcrumb, .yoast-breadcrumbs,
[class*="breadcrumb" i]{
  display:block;
  width:100%;
  max-width:100%;
  white-space:normal !important;
  overflow-wrap:break-word;
  word-break:break-word;
}
