/* ============================================================
   Website Sekolah — gaya khusus

   Kenapa CSS tulis-tangan, bukan utility Tailwind?
   css/tailwind.css di proyek ini adalah build yang SUDAH DI-PURGE terhadap
   markup situs aslinya. Kelas apa pun yang tidak dipakai markup lama —
   termasuk seluruh palet emerald/teal, grid-cols-4, snap-x, line-clamp —
   tidak ada di dalam file itu, dan memakainya akan diam-diam tidak berefek.
   Karena itu semua komponen khas sekolah didefinisikan di sini dengan nama
   berawalan "sch-", dan hanya utility Tailwind yang terbukti ada yang
   dipakai bersamanya untuk kerangka tata letak.

   Seluruh berkas ini juga aman terhadap CSP situs (style-src 'self').
   ============================================================ */

:root {
  /*   Palet Sekolah Islam Terpadu — prinsip 60 / 30 / 10:
       · 60%  latar netral (--sch-body-bg) + ruang kosong: mendominasi setiap
              halaman, jadi mata istirahat.
       · 30%  teal (--sch-accent / --sch-accent-dark): elemen STRUKTUR —
              header, footer, kartu/panel di mode terang. Tidak pernah untuk
              teks kecil atau ikon lepas.
       · 10%  emas (#fbbf24 / --sch-gold): AKSEN saja — tombol utama, state
              aktif, label meta kartu, garis bawah tautan penting. Emas TETAP
              emas di mode terang maupun gelap (tidak ikut dibalik tema).
     Dipakai lewat variabel, bukan utility Tailwind bernilai arbitrer seperti
     bg-[#0f766e] — utility semacam itu TIDAK ADA di build yang sudah di-purge
     dan akan diam-diam tidak berefek (itulah yang membuat bilah pengumuman
     sempat tampil putih-di-atas-putih). */
  --sch-accent:      #0f766e;   /* teal utama     */
  --sch-accent-dark: #115e59;   /* teal tua       */
  --sch-accent-mid:  #14b8a6;   /* teal terang    */
  --sch-accent-soft: #dcf0ec;   /* teal muda, pastel lembut (bukan cyan ngejreng) */
  --sch-gold:        #a16207;   /* aksen emas     */
  --sch-gold-soft:   #fef3c7;
  --sch-ink:         #102a2a;
  --sch-muted:       #526568;
  --sch-line:        rgba(16, 42, 42, .13);
  --sch-surface:     #f4f8f7;
  --sch-surface-deep: #e7f1ef;
  --sch-shadow:      0 8px 24px -20px rgba(15, 61, 58, .42);
  --sch-radius:      1rem;
  --sch-radius-lg:   1rem;
  /* Font display situs. Blok beranda ala-villa merujuk var(--sch-display);
     tanpa definisi ini ia jatuh ke font body dan heading beranda beda
     sendiri dari sisa situs yang hardcode "Mona Sans". */
  --sch-display: "Mona Sans", ui-sans-serif, system-ui, sans-serif;

  /* Token permukaan (latar body, kartu, panel) dipisah dari --sch-surface di
     atas (yang dipakai untuk latar isi ABU-ABU TERANG di dalam kartu, mis.
     kotak foto kosong) supaya bisa dibalik sendiri-sendiri di mode gelap
     tanpa saling menimpa. */
  --sch-body-bg:   #fbfdfc;
  --sch-card-bg:   #fff;
  --sch-header-bg: #fff;

  /* ── Sistem gerak: SATU keluarga easing + tangga durasi ────────
     Dipakai reveal scroll, buka/tutup menu & overlay, hover. Curve
     enter ("expo-out") sudah dipakai di banyak transisi kartu/tab —
     di sini diformalkan jadi token supaya seluruh situs bergerak
     dengan tangan yang sama, tidak kaku dan tidak tiba-tiba. */
  --sch-ease-out:    cubic-bezier(.16, 1, .3, 1);   /* elemen MASUK  */
  --sch-ease-in-out: cubic-bezier(.65, 0, .35, 1);  /* gerak A→B / tutup */
  --sch-dur-micro:   .16s;   /* hover, toggle, fokus  */
  --sch-dur-ui:      .42s;   /* menu, dropdown, accordion, toast */
  --sch-dur-reveal:  .7s;    /* reveal scroll section/heading */

  /* ── Tangga tipe: satu skala diskret, kontras jelas ────────────
     Acuan ritme situs induk iluztar: hero ≫ judul section ≫ intro ≫
     badan (± 3.2× / 2.1× / 1.25× / 1× dari badan). SEBELUMNYA judul
     section datang dari tiga clamp() berbeda (2.15 / 2.2 / 2.35rem)
     plus `sm:text-5xl` (3rem) — empat ukuran nyaris sama & tak
     teratur. Sekarang SEMUA judul section = --sch-fs-h2. Nilai
     diperkecil per breakpoint di blok "R102" di akhir berkas, jadi
     rasio antar tingkat tetap terbaca sampai ponsel. */
  --sch-fs-hero: 3.5rem;    /* .sch-hero__title                     */
  --sch-fs-h1:   3rem;      /* judul halaman (sch_page_intro) 48px  */
  --sch-fs-h2:   2.25rem;   /* judul section — SATU nilai (= 36px)  */
  --sch-fs-h3:   1.375rem;  /* judul kartu / sub-judul              */
  --sch-fs-lead: 1.25rem;   /* paragraf intro section/halaman       */
}

/* ── Mode gelap ───────────────────────────────────────────────
   Aktif lewat atribut data-theme="dark" di <html> (lihat js/theme.js).
   Cakupan: body, komponen berbasis kelas sch-* (kartu, panel, form, nav
   baru). Style inline per-halaman (mis. style="color:#525252" yang tersebar
   di banyak file *.php) BELUM ikut dibalik — itu perbaikan terpisah yang
   lebih besar, dicatat di todo.md, supaya mode gelap yang sungguhan
   berfungsi di sini tidak diam-diam dianggap "selesai 100%". */
:root[data-theme="dark"] {
  --sch-ink:          #eef5f4;
  --sch-muted:        #a9c0bd;
  --sch-line:         rgba(238, 245, 244, .14);
  --sch-surface:      #17302d;
  --sch-surface-deep: #0e211f;
  --sch-body-bg:      #0b1917;
  --sch-card-bg:      #102523;
  --sch-header-bg:    #102523;
  --sch-accent-soft:  #113a36;
  --sch-gold-soft:    #3a2c0c;
  --sch-shadow:       0 12px 28px -18px rgba(0, 0, 0, .6);
}

/* ── Mode gelap: menimpa kelas Tailwind ter-hardcode ──────────
   Temuan nyata dari screenshot user: mengubah variabel --sch-* saja TIDAK
   CUKUP, karena hampir semua judul/teks isi halaman memakai kelas Tailwind
   langsung (text-neutral-950/700/600/500, bg-white, dst.) yang nilainya
   TETAP sama persis di kedua mode — itu sebabnya logo, footer, dan judul di
   banyak halaman jadi nyaris tak terlihat (teks pucat di atas latar yang
   masih putih). css/tailwind.css adalah build ter-purge tanpa varian
   `dark:`, jadi satu-satunya cara menimpanya adalah selektor CSS biasa yang
   menang lewat spesifisitas `[data-theme="dark"] .kelas`, di sini —
   BUKAN menandai fitur ini "selesai" sebelum baris-baris ini ada. */
:root[data-theme="dark"] .bg-white       { background-color: var(--sch-card-bg) !important; }
:root[data-theme="dark"] .bg-neutral-50  { background-color: var(--sch-surface) !important; }
:root[data-theme="dark"] .text-neutral-950,
:root[data-theme="dark"] .text-neutral-900,
:root[data-theme="dark"] .text-neutral-800 { color: var(--sch-ink) !important; }
:root[data-theme="dark"] .text-neutral-700,
:root[data-theme="dark"] .text-neutral-600,
:root[data-theme="dark"] .text-neutral-500,
:root[data-theme="dark"] .text-neutral-400 { color: var(--sch-muted) !important; }
:root[data-theme="dark"] .border-neutral-950\/10,
:root[data-theme="dark"] .border-neutral-300,
:root[data-theme="dark"] .divide-neutral-950\/10 { border-color: var(--sch-line) !important; }
:root[data-theme="dark"] .hover\:bg-neutral-950\/10:hover,
:root[data-theme="dark"] .hover\:bg-neutral-100:hover { background-color: rgba(255, 255, 255, .08) !important; }
:root[data-theme="dark"] .hover\:bg-neutral-200:hover { background-color: var(--sch-surface) !important; }
:root[data-theme="dark"] .hover\:text-neutral-950:hover { color: var(--sch-ink) !important; }
/* CTA gelap "Ada pertanyaan?" (sch_contact_cta / sch_section_intro invert):
   tombolnya memakai .bg-white + text-neutral-950 dari markup situs induk.
   Di kedua mode dijadikan emas solid supaya jadi aksen 10% yang jelas dan
   tidak pernah putih-di-atas-putih saat hover di mode gelap. */
.contact-cta-panel a.bg-white,
.contact-cta-panel a.bg-white span { color: #102a2a !important; }
.contact-cta-panel a.bg-white { background-color: #fbbf24 !important; }
.contact-cta-panel a.bg-white:hover { background-color: #fcd34d !important; }
/* placeholder/focus-ring token juga hardcode di beberapa form; ring warna
   tetap dipakai teal aksen (sudah oke di kedua mode, tidak perlu ditimpa). */
:root[data-theme="dark"] ::placeholder { color: var(--sch-muted); opacity: .7; }

/* ── FALLBACK utility ter-purge ───────────────────────────────
   KOREKSI: `css/tailwind.css` SEBENARNYA memuat sebagian besar varian
   responsif dari markup situs induk — `sm:grid-cols-2/3`, `sm:flex`,
   `sm:text-2xl…6xl`, `sm:mt-24/32`, `sm:py-28`, `lg:grid-cols-3`,
   `lg:flex-row`, `lg:mt-40`, `lg:max-w-none`, dll. SEMUA ada. Yang
   GENUINELY hilang hanya kelas yang diperkenalkan markup sekolah baru dan
   tak pernah dipakai situs induk: `mt-20`, `sm:mt-28`, `sm:mt-16`. Itu
   ditambal di sini. (Situs induk iluztar mobile-first: base = 1 kolom,
   `sm:`/`lg:` menambah kolom ke atas — pola yang mestinya ditiru komponen
   `.sch-*` baru daripada "desktop dulu lalu di-`max-width`-collapse".) */
/* SKALA SPACING (dipakai konsisten desktop + mobile):
   - Ritme antar-section beranda ...... mt-20 (5rem)  → sm:mt-28 (7rem)
   - Jarak header → judul halaman ..... mt-12 (3rem)  → sm:mt-16 (4rem)
   - Sub-jarak DALAM section .......... mt-8  (2rem), sekali-sekali mt-12 (3rem)
   Utility Tailwind yang HILANG dari build ter-purge ditambal di sini. */
.mt-20 { margin-top: 5rem; }
.\[text-wrap\:balance\] { text-wrap: balance; }
@media (min-width: 640px) {
  .sm\:mt-16 { margin-top: 4rem; }
  .sm\:mt-28 { margin-top: 7rem; }
  .sm\:mt-32 { margin-top: 8rem; }
  .sm\:text-4xl { font-size: 2.25rem; line-height: 2.5rem; }
  .sm\:text-5xl { font-size: 3rem; line-height: 1; }
  .sm\:text-6xl { font-size: 3.75rem; line-height: 1; }
  .sm\:grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (min-width: 1024px) {
  .lg\:mt-40 { margin-top: 10rem; }
  .lg\:px-8 { padding-left: 2rem; padding-right: 2rem; }
  .lg\:max-w-none { max-width: none; }
  .lg\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
/* Layar sangat sempit: ritme antar-section dirapatkan proporsional supaya
   tidak ada "lubang" besar di antara section pada ponsel. */
@media (max-width: 480px) {
  .mt-20 { margin-top: 3.25rem; }
}

*, *::before, *::after { box-sizing: border-box; }
html { background: var(--sch-accent-dark); }
html [class*="mask-image"] { mask-image: none !important; }
body {
  background: var(--sch-body-bg);
  color: var(--sch-ink);
  text-rendering: optimizeLegibility;
  transition: background-color .2s ease, color .2s ease;
}
button, input, textarea, select { font: inherit; }
::selection { background: var(--sch-accent-soft); color: var(--sch-accent-dark); }
:focus-visible { outline: 2px solid var(--sch-accent-mid); outline-offset: 3px; }

/* ── Utility tema sekolah ─────────────────────────────────
   Menggantikan kelas Tailwind arbitrer yang tidak ada di build ter-purge.
   Ditulis tangan supaya benar-benar ada di CSS yang dikirim ke browser. */

.sch-bg-accent      { background-color: var(--sch-accent) !important; }
.sch-bg-accent-dark { background-color: var(--sch-accent-dark) !important; }
.sch-bg-soft        { background-color: var(--sch-accent-soft) !important; }
.sch-text-accent    { color: var(--sch-accent) !important; }
.sch-text-on-accent { color: #fff !important; }
.sch-stroke-accent  { stroke: var(--sch-accent) !important; }
.sch-stroke-white   { stroke: #fff !important; }
.sch-fill-accent    { fill: var(--sch-accent) !important; }
.sch-newsletter-submit { background: var(--sch-accent-dark); }
.sch-newsletter-submit:hover { background: var(--sch-accent); }

/* Logo: warna diterapkan lewat kelas ini, bukan utility arbitrer, sehingga
   lambang buku tidak pernah kehilangan garisnya dan jadi tak terlihat. */
.sch-logo        { color: var(--sch-ink); transition: color .3s ease; }
.sch-logo:hover  { color: var(--sch-accent); }
.sch-logo svg    { stroke: var(--sch-accent); }
.sch-logo--invert       { color: #fff; }
.sch-logo--invert:hover { color: var(--sch-accent-soft); }
.sch-logo--invert svg   { stroke: #fff; }

#loader .loader-bar,
#loader .loader-dots span { background-color: var(--sch-accent); }
.comment-like-btn.is-liked,
.comment-like-btn.is-liked .comment-like-icon { color: var(--sch-accent); }
.comment-like-btn.is-liked .comment-like-icon { fill: var(--sch-accent); stroke: var(--sch-accent); }

/* Bilah pengumuman sebelumnya (.sch-announce-bar, dengan jam + tombol
   ciutkan) sudah tidak dipakai — pengumuman sekarang tampil ringkas di
   tengah .sch-topbar (baris 1 header baru). Bilah demo tetap ada. */
.sch-demo-bar {
  position: relative;
  z-index: 71;
  display: flex;
  align-items: center;
  background: var(--sch-accent-dark);
  color: rgba(255, 255, 255, .9);
  font-size: .78rem;
  line-height: 1.35;
  text-align: center;
  justify-content: center;
  min-height: 2.25rem;
  padding: .5rem 1rem;
  margin: 0;
}

.sch-demo-bar strong { color: #fcd34d; }

/* Versi sebelumnya di sini (.sch-sticky-top, .sch-nav-capsule, .nav-panel,
   dan seluruh override "html #nav-panel ...") sudah tidak dipakai sejak
   header diganti total jadi struktur 4-baris (topbar/masthead/navbar/menu
   mobile) — lihat blok "Header 4-baris" di bagian bawah berkas ini. */
.sch-social-link {
  column-gap: 0 !important;
  white-space: nowrap;
}
.sch-social-link > svg {
  flex: 0 0 auto;
  margin-right: 1rem !important;
}

/* Badge akreditasi — dipakai di beranda, profil, dan footer. */
.sch-accred {
  display: inline-flex;
  align-items: center;
  gap: .5rem;
  padding: .4rem .9rem;
  border-radius: 999px;
  background: var(--sch-gold-soft);
  color: var(--sch-gold);
  font-size: .8125rem;
  font-weight: 700;
  letter-spacing: .02em;
  box-shadow: inset 0 0 0 1px rgba(180, 83, 9, .25);
}

.sch-accred__grade {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 1.35rem;
  height: 1.35rem;
  border-radius: 50%;
  background: var(--sch-gold);
  color: #fff;
  font-size: .8125rem;
  font-weight: 800;
}

/* ── Carousel beranda ─────────────────────────────────────── */

.sch-carousel {
  position: relative;
  overflow: hidden;
  border-radius: var(--sch-radius-lg);
  background: #102a2a;
  box-shadow: var(--sch-shadow);
  touch-action: pan-y;
}

.sch-carousel:focus-within { box-shadow: 0 0 0 3px rgba(20, 184, 166, .25), var(--sch-shadow); }
/* Testimoni: TIDAK ada cincin fokus sekeliling seluruh carousel (kontrolnya
   ada di bawah track, jadi kotak hijau besar itu mengganggu). Tombol
   prev/next tetap punya :focus-visible sendiri. */
.sch-carousel--testi:focus-within { box-shadow: none; }

.sch-carousel__track {
  display: flex;
  transition: transform .6s cubic-bezier(.4, 0, .2, 1);
  will-change: transform;
}

.sch-slide {
  position: relative;
  flex: 0 0 100%;
  min-width: 100%;
  aspect-ratio: 2.25 / 1;
  min-height: 360px;
  display: flex;
  align-items: flex-end;
  overflow: hidden;
}

@media (max-width: 640px) {
  .sch-slide { aspect-ratio: 4 / 3; min-height: 360px; }
}

.sch-slide__img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* Latar cadangan saat slide belum punya foto — gradasi teal bertekstur,
   bukan blok warna datar (blok datar setinggi layar terlihat "rusak"). */
.sch-slide__fallback {
  position: absolute;
  inset: 0;
  background:
    radial-gradient(115% 85% at 12% 0%, #12615a 0%, transparent 55%),
    radial-gradient(100% 80% at 100% 100%, rgba(161, 98, 7, .18) 0%, transparent 52%),
    linear-gradient(155deg, #0d413c 0%, #0f524b 48%, #0a302c 100%);
}

.sch-slide__scrim {
  position: absolute;
  inset: 0;
  background: rgba(2, 6, 23, .52);
}

.sch-slide__body {
  position: relative;
  padding: 2rem 1.5rem 4.75rem;
  max-width: 46rem;
  color: #fff;
}

@media (min-width: 768px) {
  .sch-slide__body { padding: 3rem 3.5rem 5rem; }
}

.sch-slide__title {
  font-family: "Mona Sans", ui-sans-serif, system-ui, sans-serif;
  font-size: clamp(1.6rem, 4.2vw, 3rem);
  font-weight: 600;
  line-height: 1.1;
  letter-spacing: -.02em;
  text-wrap: balance;
}

.sch-slide__sub {
  margin-top: .875rem;
  font-size: clamp(.95rem, 1.6vw, 1.15rem);
  line-height: 1.6;
  color: rgba(255, 255, 255, .82);
  max-width: 40rem;
}

.sch-slide__cta {
  display: inline-flex;
  align-items: center;
  gap: .5rem;
  margin-top: 1.5rem;
  padding: .7rem 1.4rem;
  border-radius: 999px;
  background: #fff;
  color: var(--sch-ink);
  font-size: .9rem;
  font-weight: 600;
  text-decoration: none;
  transition: background .2s ease, transform .2s ease;
}

.sch-slide__cta:hover { background: var(--sch-accent-soft); color: var(--sch-accent-dark); transform: translateY(-1px); }

/* Kontrol carousel */
.sch-carousel__btn {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  z-index: 2;
  width: 2.75rem;
  height: 2.75rem;
  display: flex;
  align-items: center;
  justify-content: center;
  border: none;
  border-radius: 50%;
  background: rgba(255, 255, 255, .18);
  color: #fff;
  cursor: pointer;
  backdrop-filter: blur(6px);
  transition: background .2s ease;
}

.sch-carousel__btn:hover  { background: rgba(255, 255, 255, .34); }
.sch-carousel__btn:focus-visible { outline: 2px solid #fff; outline-offset: 3px; }
.sch-carousel__btn--prev { left: .75rem; }
.sch-carousel__btn--next { right: .75rem; }

@media (min-width: 768px) {
  .sch-carousel__btn--prev { left: 1.5rem; }
  .sch-carousel__btn--next { right: 1.5rem; }
}

.sch-carousel__dots {
  position: absolute;
  left: 50%;
  bottom: 1.25rem;
  z-index: 2;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: .5rem;
  min-height: 2.5rem;
  padding: .55rem .8rem;
  border: 1px solid rgba(255, 255, 255, .24);
  border-radius: 999px;
  background: rgba(16, 42, 42, .58);
  backdrop-filter: blur(8px);
  transform: translateX(-50%);
}

.sch-carousel__dot {
  width: .625rem;
  height: .625rem;
  padding: 0;
  border: none;
  border-radius: 50%;
  background: #b8cfcc;
  cursor: pointer;
  transition: background .2s ease, width .25s ease;
}

.sch-carousel__dot[aria-current="true"] { background: var(--sch-accent); width: 1.75rem; border-radius: 999px; }
.sch-carousel__dot:focus-visible { outline: 2px solid #fff; outline-offset: 2px; }

@media (prefers-reduced-motion: reduce) {
  .sch-carousel__track { transition-duration: .001ms; }
  .sch-slide__cta      { transition: none; }
}

/* ── Kartu umum ───────────────────────────────────────────── */

/* auto-fit (bukan auto-fill) dipilih dengan sengaja: dengan auto-fill,
   kolom yang tidak terisi kartu tetap dicadangkan lebar penuhnya, sehingga
   3 kartu di grid yang muat 5 kolom akan tampil kecil dan mepet ke kiri
   dengan ruang kosong di kanan. auto-fit meruntuhkan kolom yang tidak
   terpakai dan membagi ulang ruangnya ke kartu yang ada (unit 1fr), jadi
   jumlah kartu berapa pun — 1, 3, atau 12 — selalu melebar rata mengisi
   satu baris penuh pada ukuran yang wajar, bukan terjebak pada jumlah
   kolom tetap yang ditulis untuk isi tertentu. */
.sch-grid {
  display: grid;
  gap: 1.25rem;
  /* auto-fill (bukan auto-fit) sengaja dipakai: auto-fit melebarkan kartu
     mengisi sisa baris ketika jumlah item sedikit (mis. kategori "Tenaga
     Kependidikan" yang cuma 3 orang), membuat ukurannya beda sendiri
     dibanding grup lain di halaman yang sama. auto-fill mempertahankan
     kolom kosong sehingga lebar kartu tetap konsisten di semua grup. */
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 15rem), 1fr));
  list-style: none;
  padding: 0;
  margin: 0;
}

.sch-grid--wide {
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 16rem), 1fr));
  gap: 1rem;
}

/* Berita terbaru di beranda selalu tampil sebagai 3 kartu — dipatok ke
   kolom tetap (seperti grid blog di situs utama iluztar) alih-alih auto-
   fill, supaya ketiganya rata kiri-kanan mengisi lebar penuh, bukan
   nyangkut di kiri dengan sisa kolom kosong di kanan. */
.sch-grid--news {
  grid-template-columns: repeat(1, 1fr);
  gap: 1.25rem 2rem;
}
@media (min-width: 640px) {
  .sch-grid--news { grid-template-columns: repeat(2, 1fr); }
}
@media (min-width: 1024px) {
  .sch-grid--news { grid-template-columns: repeat(3, 1fr); }
}

/* Program Unggulan: jumlah item tetap 6, jadi kolomnya dipatok (bukan
   auto-fill/auto-fit) supaya selalu membentuk 2 baris rapi (3 kolom) alih-
   alih baris terakhir yang cuma terisi sebagian pada lebar tertentu. */
.sch-grid--featured { grid-template-columns: repeat(1, 1fr); }
@media (min-width: 640px) {
  .sch-grid--featured { grid-template-columns: repeat(2, 1fr); }
}
@media (min-width: 1024px) {
  .sch-grid--featured { grid-template-columns: repeat(3, 1fr); }
}

/* Jenjang pendidikan (TKIT/SDIT/SMPIT): selalu tepat 3 item — auto-fill
   pada .sch-grid--wide membuat ketiganya kecil dan menggerombol di kiri
   dengan sisa kolom kosong di kanan, karena ruang 1fr ikut dibagi ke
   kolom-kolom kosong yang muat di lebar layar. Dipatok 3 kolom supaya
   ketiganya melebar penuh dan rata kiri-kanan. */
.sch-grid--program { grid-template-columns: repeat(1, 1fr); }
@media (min-width: 640px) {
  .sch-grid--program { grid-template-columns: repeat(3, 1fr); }
}

/* Grid beranda yang jumlah kolomnya ikut jumlah data (mis. fasilitas: 6 item
   → 3 kolom 2 baris). --sch-home-cols di-set inline dari index.php. */
.sch-grid--home { grid-template-columns: repeat(var(--sch-home-cols, 3), minmax(0, 1fr)); }
@media (max-width: 900px) { .sch-grid--home { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 560px) { .sch-grid--home { grid-template-columns: 1fr; } }

.sch-card {
  display: flex;
  flex-direction: column;
  height: 100%;
  border: 1px solid var(--sch-line);
  border-radius: var(--sch-radius-lg);
  background: var(--sch-card-bg);
  overflow: hidden;
  transition: border-color .2s ease, transform .2s ease, box-shadow .2s ease, background-color .2s ease;
}

.sch-card:hover {
  border-color: rgba(15, 118, 110, .35);
  transform: translateY(-2px);
  box-shadow: var(--sch-shadow);
}

.sch-card:focus-visible {
  outline: 3px solid rgba(20, 184, 166, .35);
  outline-offset: 3px;
}

.sch-card__media {
  position: relative;
  aspect-ratio: 4 / 3;
  background: var(--sch-surface);
  overflow: hidden;
}

/* Area gambar kosong (placeholder flat berwarna) MEMPERTAHANKAN rasio penuh
   kartu — dulu diciutkan jadi pita 5.25rem yang terlihat "terlalu kecil".
   Dengan rasio nyata, kartu tanpa foto tetap tampak seimbang dengan kartu
   berfoto di grid yang sama. */
.sch-card__media--empty {
  background: var(--sch-accent-soft);
}

.sch-card--news .sch-card__media {
  aspect-ratio: 3 / 2;
}
/* Kapsul kategori di atas gambar kartu berita — pil putih bersih, teks teal. */
.sch-card__tag {
  position: absolute;
  left: .75rem;
  top: .75rem;
  z-index: 2;
  padding: .3rem .7rem;
  border-radius: 999px;
  background: #fff;
  color: #0f3d3a;
  font-size: .7rem;
  font-weight: 700;
  letter-spacing: .03em;
  text-transform: uppercase;
  box-shadow: 0 6px 16px -6px rgba(15, 61, 58, .35);
}
/* Area tanpa foto tidak dibiarkan kosong melompong: satu ikon koran samar di
   tengah — konsisten dengan placeholder bericon di section lain, bukan garis
   dekoratif (yang dulu dibuang). */
.sch-card--news .sch-card__media--empty {
  display: grid;
  place-items: center;
}
.sch-card--news .sch-card__media--empty::after {
  content: "";
  width: 2.75rem;
  height: 2.75rem;
  opacity: .3;
  background: currentColor;
  color: var(--sch-accent);
  -webkit-mask: center / contain no-repeat url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 5h13v14H5a1 1 0 0 1-1-1V5Z'/%3E%3Cpath d='M17 8h2a1 1 0 0 1 1 1v9a1 1 0 0 1-1 1'/%3E%3Cpath d='M7 8h7M7 12h7M7 16h4'/%3E%3C/svg%3E");
          mask: center / contain no-repeat url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 5h13v14H5a1 1 0 0 1-1-1V5Z'/%3E%3Cpath d='M17 8h2a1 1 0 0 1 1 1v9a1 1 0 0 1-1 1'/%3E%3Cpath d='M7 8h7M7 12h7M7 16h4'/%3E%3C/svg%3E");
}

.sch-card--news .sch-card__body {
  padding: 1.125rem 1.25rem 1.25rem;
}

.sch-card--news .sch-card__title {
  margin-top: .375rem !important;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  overflow: hidden;
}

.sch-card--news .sch-card__meta {
  order: -1;
  margin-top: 0;
  font-size: .75rem;
  font-weight: 700;
  letter-spacing: .04em;
  text-transform: uppercase;
  color: var(--sch-accent);
}

/* Dua garis dekoratif yang dulu ada di sini (::after dengan border-top/
   border-bottom) dihapus atas permintaan user — dianggap tidak penting dan
   mengganggu, area kosong flat saja sudah cukup. */

.sch-card__media img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }

/* ── Perlakuan gambar konsisten seluruh situs ─────────────────
   Foto datang dari sumber berbeda-beda (warna, kontras, suhu). Dua lapis
   tipis menyeragamkan kesannya sehingga terasa satu palet:
   1) filter ringan pada tiap <img> — turunkan sedikit saturasi, naikkan
      kontras & sedikit peredupan;
   2) overlay gradien teal halus dari bawah pada WADAH yang benar-benar
      berisi <img> (bukan placeholder .sch-ph blok-warna).
   `:has()` memilih hanya wadah ber-<img>; browser tanpa dukungan cukup
   melewatkan overlay tanpa merusak apa pun. */
.sch-featured__media > img,
.sch-bestdeal__media img,
.sch-fac-card__media img,
.sch-card__media img,
.sch-person__photo img,
.sch-tile img,
.sch-detail-hero__media img,
.sch-slide__img,
.sch-map-facade__img,
.sch-closer__map img {
  filter: saturate(.92) contrast(1.04) brightness(.985);
}
.sch-featured__media:has(> img)::after,
.sch-bestdeal__media:has(img)::after,
.sch-fac-card__media:has(img)::after,
.sch-card__media:has(img)::after,
.sch-person__photo:has(img)::after,
.sch-tile:has(img)::after,
.sch-detail-hero__media:has(img)::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  pointer-events: none;
  background:
    linear-gradient(180deg, rgba(10, 40, 37, 0) 42%, rgba(9, 37, 34, .3) 100%),
    linear-gradient(0deg, rgba(15, 61, 58, .07), rgba(15, 61, 58, .07));
}
/* Elemen di dalam wadah media yang HARUS tetap di atas overlay. */
.sch-card__tag,
.sch-tile__caption,
.sch-tile__badge { z-index: 2; }

/* ── Poles gerak — R52 ───────────────────────────────────────
   Zoom halus pada foto di dalam kartu saat kartu di-hover (menyamai
   `.sch-tile` yang sudah begitu), plus umpan-balik "tekan" pada tombol.
   Semua dimatikan pada `prefers-reduced-motion`. */
.sch-featured__media > img,
.sch-bestdeal__media img,
.sch-fac-card__media img,
.sch-card__media img {
  transition: transform .55s cubic-bezier(.16, 1, .3, 1),
              filter .3s ease;
}
.sch-card--link:hover .sch-card__media img,
.sch-fac-card:hover .sch-fac-card__media img,
.sch-featured:hover .sch-featured__media > img,
.sch-bestdeal__panel:hover .sch-bestdeal__media img {
  transform: scale(1.045);
}
.sch-btn:active { transform: translateY(1px); }
@media (prefers-reduced-motion: reduce) {
  .sch-featured__media > img,
  .sch-bestdeal__media img,
  .sch-fac-card__media img,
  .sch-card__media img { transition: none; }
  .sch-card--link:hover .sch-card__media img,
  .sch-fac-card:hover .sch-fac-card__media img,
  .sch-featured:hover .sch-featured__media > img,
  .sch-bestdeal__panel:hover .sch-bestdeal__media img { transform: none; }
}

/* Kartu diberi ruang lebih lega — sebelumnya isi terasa berdempet. */
.sch-card__body  { padding: 1.4rem 1.3rem; display: flex; flex-direction: column; flex: 1; }
.sch-card__title { font-family: "Mona Sans", ui-sans-serif, system-ui, sans-serif; font-size: 1rem; font-weight: 700; color: var(--sch-ink); line-height: 1.4; }
.sch-card__meta  { margin-top: .55rem; font-size: .8125rem; line-height: 1.55; color: var(--sch-muted); }
.sch-card__meta + .sch-card__meta { margin-top: .3rem; }
.sch-card__text  { margin-top: .85rem; font-size: .84rem; line-height: 1.6; color: var(--sch-muted); display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden; }
.sch-card__foot  { margin-top: auto; padding-top: 1.1rem; }

/* Tidak ada lagi override kolom-tetap di lebar menengah: auto-fit di atas
   sudah menghitung ulang jumlah kolom pada lebar berapa pun secara alami,
   termasuk saat admin menambah/mengurangi jumlah kartu dari panel admin. */
/* Berita: di bawah lebar desktop (≤1023px) tampil sebagai SATU baris yang
   bisa digeser mendatar — tidak ada baris 2+1 yang timpang di layar sedang.
   `.sch-grid--wide` cukup sampai 640px. */
@media (max-width: 1023px) {
  .sch-grid--news {
    display: flex;
    gap: .875rem;
    margin-right: -1.5rem;
    padding: .25rem 1.5rem .75rem 0;
    overflow-x: auto;
    overscroll-behavior-x: contain;
    scroll-snap-type: x mandatory;
    scrollbar-width: none;
    touch-action: pan-x;
  }
  .sch-grid--news::-webkit-scrollbar { display: none; }
  .sch-grid--news > li {
    flex: 0 0 min(72vw, 22rem);
    scroll-snap-align: start;
  }
}
@media (max-width: 640px) {
  .sch-grid--wide {
    display: flex;
    gap: .875rem;
    margin-right: -1.5rem;
    padding: .25rem 1.5rem .75rem 0;
    overflow-x: auto;
    overscroll-behavior-x: contain;
    scroll-snap-type: x mandatory;
    scrollbar-width: none;
    touch-action: pan-x;
  }
  .sch-grid--wide::-webkit-scrollbar { display: none; }
  .sch-grid--wide > li {
    flex: 0 0 min(82vw, 19rem);
    scroll-snap-align: start;
  }
  .sch-grid--wide .sch-card__body { padding: 1.25rem 1.15rem; }
  .sch-grid--news > li { flex-basis: min(82vw, 19rem); }
}
@media (max-width: 420px) {
  .sch-grid--wide > li,
  .sch-grid--news > li { flex-basis: 84vw; }
}

/* Tombol "kembali ke atas" — kecil, sederet dengan tautan legal di kanan
   bilah bawah footer (lihat .sch-footer__bar-right). BUKAN position:fixed
   (tidak menutupi section lain) dan BUKAN di baris tersendiri. */
.sch-back-to-top {
  flex: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2rem;
  height: 2rem;
  border: 1px solid var(--sch-line);
  border-radius: 999px;
  background: var(--sch-surface);
  color: var(--sch-accent-dark);
  cursor: pointer;
  transition: background .2s ease, color .2s ease, border-color .2s ease;
}
.sch-back-to-top svg { width: .85rem; height: .85rem; }
.sch-back-to-top:hover {
  background: var(--sch-accent-dark);
  border-color: var(--sch-accent-dark);
  color: #fff;
}

/* ── Pil / badge ──────────────────────────────────────────── */

.sch-pill {
  display: inline-block;
  padding: .2rem .6rem;
  border-radius: 999px;
  font-size: .7rem;
  line-height: 1.25;
  font-weight: 600;
  letter-spacing: .04em;
  text-transform: uppercase;
  background: var(--sch-accent-soft);
  color: var(--sch-accent-dark);
}

/* Warna tetap (bukan var(--sch-muted)) dengan sengaja: pil ini punya latar
   opak sendiri (#f0f0ef) yang TIDAK ikut berubah di dalam kartu teal/putih
   (lihat blok pembalikan warna kartu di akhir berkas) — kalau memakai
   var(--sch-muted), teksnya ikut jadi putih di dalam kartu teal dan nyaris
   tak terbaca di atas latar abu-abu terangnya sendiri. */
.sch-pill--muted  { background: #f0f0ef; color: #57534e; }
.sch-pill--warn   { background: #fef3c7; color: #b45309; }
.sch-pill--danger { background: #fee2e2; color: #b91c1c; }
.sch-pill--info   { background: var(--sch-accent-soft); color: var(--sch-accent-dark); }

/* ── Tombol ───────────────────────────────────────────────── */

.sch-btn {
  display: inline-flex;
  align-items: center;
  gap: .5rem;
  padding: .65rem 1.25rem;
  border: 1px solid var(--sch-accent-dark);
  border-radius: 999px;
  background: var(--sch-accent-dark);
  color: #fff;
  font-size: .875rem;
  font-weight: 600;
  text-decoration: none;
  cursor: pointer;
  transition: background .2s ease, color .2s ease, border-color .2s ease, transform .2s ease, box-shadow .2s ease;
}

.sch-btn:hover { background: var(--sch-accent); border-color: var(--sch-accent); transform: translateY(-1px); }

.sch-btn--ghost { background: transparent; color: var(--sch-ink); border-color: var(--sch-line); }
.sch-btn--ghost:hover { background: var(--sch-accent-soft); color: var(--sch-accent-dark); border-color: var(--sch-accent); }
.sch-btn--sm { padding: .4rem .9rem; font-size: .8125rem; }

/* Variant untuk latar gelap (mis. blok "Portal sekolah" di panel navigasi). */
.sch-btn--ghost-invert { color: #fff; border-color: rgba(255, 255, 255, .2); }
.sch-btn--ghost-invert:hover { background: rgba(255, 255, 255, .1); color: #fff; border-color: rgba(255, 255, 255, .35); }

/* ── Filter tab ───────────────────────────────────────────── */

.sch-tabs { display: flex; flex-wrap: wrap; gap: .5rem; list-style: none; padding: 0; margin: 0; }

.sch-tab {
  display: inline-block;
  padding: .45rem 1rem;
  border: 1px solid var(--sch-line);
  border-radius: 999px;
  font-size: .875rem;
  color: var(--sch-muted);
  text-decoration: none;
  transition: background .15s ease, color .15s ease, border-color .15s ease;
}

.sch-tab:hover        { border-color: rgba(15, 118, 110, .35); color: var(--sch-accent-dark); background: var(--sch-surface); }
.sch-tab.is-active    { background: var(--sch-accent-dark); border-color: var(--sch-accent-dark); color: #fff; }

/* Baris tab sekunder (mis. saring jenjang di halaman Guru) — lebih kecil,
   sedikit jarak dari baris kategori di atasnya. */
.sch-tabs--sub { margin-top: .6rem; gap: .4rem; }
.sch-tabs--sub .sch-tab { padding: .32rem .8rem; font-size: .78rem; }

/* Chip jenjang pada kartu guru */
.sch-person__jenjang { display: flex; flex-wrap: wrap; gap: .3rem; margin: .35rem 0 0; }
.sch-person__jchip {
  display: inline-block;
  padding: .12rem .5rem;
  border-radius: 999px;
  background: var(--sch-accent-soft, #ecfdf5);
  color: var(--sch-accent-dark);
  font-size: .68rem;
  font-weight: 700;
  letter-spacing: .02em;
}

/* ── Guru & staf ──────────────────────────────────────────── */

.sch-person__photo {
  position: relative;
  aspect-ratio: 1 / 1;
  background: var(--sch-surface);
  overflow: hidden;
}

.sch-person__photo img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }

.sch-person__initials {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: "Mona Sans", ui-sans-serif, system-ui, sans-serif;
  font-size: 2.25rem;
  font-weight: 600;
  letter-spacing: .02em;
  color: var(--sch-accent);
  background: var(--sch-accent-soft);
}

.sch-grid--staff {
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 15rem), 1fr));
  gap: 1.25rem;
}
.sch-grid--staff .sch-card {
  min-width: 0;
}
.sch-grid--staff .sch-card--clickable {
  cursor: pointer;
}
.sch-grid--staff .sch-card--clickable:focus-visible {
  outline: 3px solid rgba(20, 184, 166, .4);
  outline-offset: 3px;
}
.sch-grid--staff .sch-person__photo {
  aspect-ratio: 4 / 3;
}
.sch-grid--staff .sch-card__body {
  min-height: 0;
  padding: 1rem;
}
.sch-grid--staff .sch-card__title {
  display: -webkit-box;
  overflow: hidden;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
}
.sch-grid--staff .sch-card__text {
  -webkit-line-clamp: 3;
}
.sch-grid--staff .sch-card__foot {
  padding-top: .75rem;
  font-size: .78rem;
}
.sch-grid--staff .sch-card__foot a {
  overflow-wrap: anywhere;
}
.sch-grid--staff .sch-card__title a {
  color: inherit;
  text-decoration: none;
}
.sch-grid--staff .sch-card__title a:hover {
  color: var(--sch-accent-mid);
}
.sch-person__profile-link {
  display: inline-flex;
  margin-bottom: .65rem;
  color: var(--sch-accent-mid);
  font-size: .78rem;
  font-weight: 800;
  text-decoration: none;
}
.sch-person__profile-link:hover {
  text-decoration: underline;
  text-underline-offset: 3px;
}

.sch-person__contact { margin-top: .75rem; display: flex; flex-direction: column; gap: .3rem; font-size: .8125rem; }
.sch-person__contact a,
.sch-person__contact span { color: var(--sch-muted); text-decoration: none; word-break: break-word; }
.sch-person__contact a:hover { color: var(--sch-accent); text-decoration: underline; }

/* ── Linimasa sejarah ─────────────────────────────────────── */

.sch-timeline { position: relative; list-style: none; margin: 0; padding: 0 0 0 2rem; }

.sch-timeline::before {
  content: "";
  position: absolute;
  left: .3125rem;
  top: .5rem;
  bottom: .5rem;
  width: 1px;
  background: var(--sch-line);
}

.sch-timeline > li { position: relative; padding-bottom: 2.25rem; }
.sch-timeline > li:last-child { padding-bottom: 0; }

.sch-timeline > li::before {
  content: "";
  position: absolute;
  left: -2rem;
  top: .45rem;
  width: .6875rem;
  height: .6875rem;
  border-radius: 50%;
  background: var(--sch-body-bg);
  border: 2px solid var(--sch-accent);
}

.sch-timeline__year  { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: .8125rem; font-weight: 600; color: var(--sch-accent); letter-spacing: .04em; }
.sch-timeline__title { margin-top: .25rem; font-family: "Mona Sans", ui-sans-serif, system-ui, sans-serif; font-size: 1.05rem; font-weight: 600; color: var(--sch-ink); }
/* Opsi (b) dari keputusan H3.2: linimasa tetap satu kolom rata kiri (bukan
   waterfall/zigzag) — perataan teks yang dibuat konsisten dengan .sch-prose
   sudah cukup rapi, dan zigzag butuh verifikasi visual yang tidak bisa
   dilakukan pada sesi ini (tidak ada alat screenshot/browser). */
.sch-timeline__text  { margin-top: .375rem; font-size: .9rem; line-height: 1.65; color: var(--sch-muted); text-align: justify; }

/* ── Galeri ───────────────────────────────────────────────── */

.sch-gallery {
  display: grid;
  gap: 1rem;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 14rem), 1fr));
  list-style: none;
  padding: 0;
  margin: 0;
}

.sch-tile {
  position: relative;
  display: block;
  width: 100%;
  padding: 0;
  border: none;
  border-radius: 1rem;
  overflow: hidden;
  aspect-ratio: 4 / 3;
  background: var(--sch-surface);
  cursor: pointer;
}

.sch-tile img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transition: transform .4s ease; }
.sch-tile:hover img { transform: scale(1.04); }
.sch-tile:focus-visible { outline: 2px solid var(--sch-accent); outline-offset: 3px; }

.sch-tile__label {
  position: absolute;
  left: 0; right: 0; bottom: 0;
  padding: 2.25rem .875rem .75rem;
  background: rgba(2, 6, 23, .72);
  color: #fff;
  font-size: .8125rem;
  font-weight: 600;
  text-align: left;
  line-height: 1.35;
}

/* Facade video: thumbnail YouTube + tombol play. Iframe baru dimuat setelah
   diklik — menghemat ±700 KB per video dan mencegah YouTube memasang cookie
   pada pengunjung yang tidak pernah memutar videonya. */
.sch-tile__play {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  pointer-events: none;
}

.sch-tile__play span {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 3.5rem;
  height: 3.5rem;
  border-radius: 50%;
  background: rgba(15, 23, 42, .72);
  color: #fff;
  transition: background .2s ease, transform .2s ease;
}

.sch-tile:hover .sch-tile__play span { background: var(--sch-accent); transform: scale(1.06); }

.sch-embed { position: relative; width: 100%; aspect-ratio: 16 / 9; }
.sch-embed iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }

/* Lightbox */
.sch-lightbox {
  position: fixed;
  inset: 0;
  z-index: 200;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 1.5rem;
  background: rgba(2, 6, 23, .92);
}

.sch-lightbox[hidden] { display: none; }
.sch-lightbox__img { max-width: 100%; max-height: 82vh; border-radius: .75rem; object-fit: contain; }
.sch-lightbox__cap { margin-top: .875rem; color: rgba(255, 255, 255, .8); font-size: .875rem; text-align: center; max-width: 44rem; }

.sch-lightbox__btn {
  position: absolute;
  width: 2.75rem;
  height: 2.75rem;
  display: flex;
  align-items: center;
  justify-content: center;
  border: none;
  border-radius: 50%;
  background: rgba(255, 255, 255, .14);
  color: #fff;
  cursor: pointer;
  transition: background .2s ease;
}

.sch-lightbox__btn:hover { background: rgba(255, 255, 255, .3); }
.sch-lightbox__btn--close { top: 1.25rem; right: 1.25rem; }
.sch-lightbox__btn--prev  { left: 1.25rem;  top: 50%; transform: translateY(-50%); }
.sch-lightbox__btn--next  { right: 1.25rem; top: 50%; transform: translateY(-50%); }

/* ── Pengumuman ───────────────────────────────────────────── */

.sch-notice {
  border: 1px solid var(--sch-line);
  border-radius: 1.25rem;
  padding: 1.375rem 1.5rem;
  background: var(--sch-card-bg);
  transition: border-color .2s ease, background-color .2s ease;
}

.sch-notice:hover      { border-color: rgba(15, 118, 110, .35); box-shadow: var(--sch-shadow); }
/* Kartu pengumuman di beranda yang menaut ke halaman detailnya. */
.sch-notice--link      { display: block; text-decoration: none; color: inherit; }
.sch-notice--link:hover { transform: translateY(-.15rem); }
.sch-notice--pinned    { border-color: var(--sch-accent); background: var(--sch-accent-soft); box-shadow: var(--sch-shadow); }
.sch-notice__head      { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem; }
.sch-notice__title     { margin-top: .625rem; font-family: "Mona Sans", ui-sans-serif, system-ui, sans-serif; font-size: 1.15rem; font-weight: 600; color: var(--sch-ink); line-height: 1.35; }
.sch-notice__body      { margin-top: .625rem; font-size: .9375rem; line-height: 1.7; color: var(--sch-muted); }
.sch-notice__body p + p{ margin-top: .75rem; }

/* ── Kalender agenda ──────────────────────────────────────── */

/* Kalender: GRID SEL TERANG di dalam bingkai .sch-panel yang hijau —
   selnya sendiri putih/netral (bukan ikut hijau), dengan nilai warna TETAP
   (bukan var(--sch-*) yang di dalam .sch-panel di-scope ulang jadi terang di
   atas hijau). Hari ini diberi aksen emas; acara diberi warna per kategori. */
.sch-cal {
  width: 100%;
  border-collapse: separate;
  border-spacing: 0;
  table-layout: fixed;
  background: #fff;
  border-radius: .75rem;
  overflow: hidden;
  border: 1px solid #e3e9e7;
}
.sch-cal th {
  padding: .625rem .25rem;
  font-size: .7rem;
  font-weight: 700;
  letter-spacing: .07em;
  text-transform: uppercase;
  color: #64756f;
  background: #f3f7f5;
  border-bottom: 1px solid #e3e9e7;
}
.sch-cal td { vertical-align: top; border-right: 1px solid #eef2f1; border-bottom: 1px solid #eef2f1; height: 6rem; padding: .375rem; background: #fff; }
.sch-cal td:last-child { border-right: 0; }
.sch-cal tr:last-child td { border-bottom: 0; }

@media (max-width: 640px) {
  .sch-cal td { height: 4.25rem; padding: .25rem; }
}

.sch-cal__num     { font-size: .8125rem; font-weight: 600; color: #16302d; }
.sch-cal__out     { background: #f7faf9; }
.sch-cal__out .sch-cal__num { color: #aebbb7; }
.sch-cal__today   { background: #fff7e6; box-shadow: inset 0 0 0 2px var(--sch-gold, #fbbf24); }
.sch-cal__today .sch-cal__num { color: #92400e; font-weight: 700; }

.sch-cal__ev {
  display: block;
  margin-top: .1875rem;
  padding: .15rem .35rem;
  border-radius: .3125rem;
  border-left: 3px solid var(--ev-color, #0f766e);
  background: var(--ev-bg, #e4f1ee);
  color: var(--ev-ink, #123f3a);
  font-size: .6875rem;
  font-weight: 600;
  line-height: 1.3;
  text-decoration: none;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
/* Warna per kategori acara (data-cat di <a class="sch-cal__ev">). */
.sch-cal__ev[data-cat="akademik"] { --ev-color:#1d4ed8; --ev-bg:#e6edfd; --ev-ink:#1e3a8a; }
.sch-cal__ev[data-cat="ppdb"]     { --ev-color:#be123c; --ev-bg:#fde7ec; --ev-ink:#9f1239; }
.sch-cal__ev[data-cat="rapat"]    { --ev-color:#7c3aed; --ev-bg:#f0e9fe; --ev-ink:#5b21b6; }
.sch-cal__ev[data-cat="kegiatan"] { --ev-color:#b45309; --ev-bg:#fdefdd; --ev-ink:#8a4308; }
.sch-cal__ev[data-cat="keislaman"],
.sch-cal__ev[data-cat="rutin"]    { --ev-color:#0f766e; --ev-bg:#e0f0ed; --ev-ink:#0f3d3a; }
.sch-cal__ev[data-cat="libur"]    { --ev-color:#dc2626; --ev-bg:#fde8e8; --ev-ink:#991b1b; }

.sch-cal__ev:hover { filter: brightness(.97); }
.sch-cal__more     { display: block; margin-top: .1875rem; font-size: .625rem; color: var(--sch-muted); }

.sch-cal__nav { display: flex; align-items: center; justify-content: space-between; gap: 1rem; margin-bottom: 1rem; }
.sch-cal__month { font-family: "Mona Sans", ui-sans-serif, system-ui, sans-serif; font-size: 1.25rem; font-weight: 600; color: var(--sch-ink); }

/* ── Daftar agenda ────────────────────────────────────────── */

.sch-events { list-style: none; margin: 0; padding: 0; }
.sch-events > li { display: flex; gap: 1rem; padding: 1.5rem 0; border-top: 1px solid var(--sch-line); }
.sch-events > li:first-child { border-top: none; padding-top: 0; }

.sch-events__date {
  flex: 0 0 3.75rem;
  text-align: center;
  border-radius: .75rem;
  background: var(--sch-surface);
  padding: .5rem .25rem;
  height: fit-content;
}

.sch-events__day   { display: block; font-family: "Mona Sans", ui-sans-serif, system-ui, sans-serif; font-size: 1.375rem; font-weight: 600; color: var(--sch-ink); line-height: 1.1; }
.sch-events__month { display: block; margin-top: .125rem; font-size: .6875rem; font-weight: 600; letter-spacing: .06em; text-transform: uppercase; color: var(--sch-muted); }
.sch-events__title { font-family: "Mona Sans", ui-sans-serif, system-ui, sans-serif; font-size: 1rem; font-weight: 600; color: var(--sch-ink); }
.sch-events__meta  { margin-top: .25rem; font-size: .8125rem; color: var(--sch-muted); }
.sch-events__text  { margin-top: .375rem; font-size: .875rem; line-height: 1.6; color: var(--sch-muted); }
/* Kedua kolom (Pengumuman | Agenda) sejajar: judul di atas, isi mengalir
   alami (TIDAK dipaksa 3 baris sama tinggi — itu yang dulu menyisakan slot
   kosong), lalu tombol didorong ke DASAR kolom (`margin-top:auto`) sehingga
   "Semua pengumuman" & "Kalender lengkap" berada di garis yang sama. */
.sch-home-info-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 20rem), 1fr));
  gap: 2.5rem;
}
.sch-home-info-column {
  display: grid;
  min-width: 0;
  align-content: start;
  row-gap: 1rem;
}
.sch-home-info-column > h3 { margin-bottom: .25rem; }
/* Kolom ini `display:grid`, jadi tombolnya perlu `justify-self:start` —
   `align-self` saja tidak mencegah tombol melebar penuh selebar kolom. */
.sch-home-info-column > .sch-btn { justify-self: start; align-self: start; margin-top: .5rem; }
.sch-home-info-column .sch-notice { margin: 0; }
.sch-agenda-item {
  display: flex;
  gap: 1rem;
  padding: 1rem 0;
  border-top: 1px solid var(--sch-line);
  color: inherit;
  text-decoration: none;
  /* Baris subgrid setinggi kartu pengumuman pasangannya; item agenda yang
     pendek dipusatkan vertikal, bukan menempel atas. */
  align-self: center;
}
.sch-home-info-column > .sch-agenda-item:first-of-type {
  border-top: 0;
}
/* Item agenda beranda yang menaut ke halaman Agenda. */
.sch-agenda-item--link { transition: transform .15s ease, background-color .15s ease; border-radius: .5rem; }
.sch-agenda-item--link:hover { transform: translateY(-.1rem); }
.sch-agenda-item--link:hover .sch-events__title { color: var(--sch-accent-dark); }

/* ≥768px: kedua kolom saling menyelaraskan baris demi baris lewat subgrid —
   pengumuman ke-N sebaris dengan agenda ke-N; judul & tombol pun sejajar. */
@media (min-width: 768px) {
  .sch-home-info-grid {
    grid-template-columns: 1fr 1fr;
    grid-template-rows: auto repeat(3, auto) auto;
  }
  .sch-home-info-column {
    grid-row: 1 / -1;
    grid-template-rows: subgrid;
  }
  .sch-home-info-column > .sch-btn { grid-row: -1; justify-self: start; margin-top: 0; }
}

/* ── Formulir ─────────────────────────────────────────────── */

.sch-field { margin-bottom: 1.125rem; }
.sch-label { display: block; margin-bottom: .375rem; font-size: .875rem; font-weight: 600; color: var(--sch-ink); }
.sch-label .req { color: #dc2626; }

/* Kotak isi form SENGAJA tidak ikut var(--sch-card-bg)/var(--sch-ink) —
   permintaan user: input harus tetap terang (putih/hijau pastel muda),
   TIDAK PERNAH gelap, supaya teks yang diketik selalu jelas terbaca
   terlepas dari mode terang/gelap atau warna kartu di sekelilingnya
   (kartu/panel kini bisa teal atau putih tergantung mode — kalau input
   ikut var(--sch-card-bg) yang sama, ia akan ikut gelap di mode terang
   default, persis masalah yang dilaporkan). */
.sch-input {
  display: block;
  width: 100%;
  padding: .75rem 1rem;
  border: 1px solid rgba(16, 42, 42, .16);
  border-radius: var(--sch-radius);
  background: #fff;
  font: inherit;
  font-size: .9375rem;
  color: #102a2a;
  transition: border-color .15s ease, box-shadow .15s ease;
}
:root[data-theme="dark"] .sch-input {
  background: #eaf7f3;
  border-color: rgba(16, 42, 42, .12);
  color: #102a2a;
}
.sch-input::placeholder { color: #8a9a98; opacity: 1; }

.sch-input:focus {
  outline: none;
  border-color: var(--sch-accent);
  box-shadow: 0 0 0 4px rgba(20, 184, 166, .18);
}

textarea.sch-input { min-height: 9rem; resize: vertical; }
.sch-hint { margin-top: .375rem; font-size: .8125rem; color: var(--sch-muted); }
.sch-row  { display: grid; gap: 1rem; grid-template-columns: repeat(auto-fit, minmax(min(100%, 14rem), 1fr)); }

/* Honeypot: harus tetap terlihat oleh bot yang membaca DOM, tapi tidak boleh
   terlihat/terjangkau manusia — termasuk pengguna pembaca layar, karena itu
   aria-hidden + tabindex="-1" di markup. Bukan display:none: sebagian bot
   memang melewatkan field yang tersembunyi dengan cara itu. */
.sch-hp { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }

.sch-alert { border-radius: 1rem; padding: 1rem 1.125rem; font-size: .9rem; line-height: 1.6; margin-bottom: 1.25rem; }
.sch-alert--ok   { background: #ecfdf5; color: #065f46; border: 1px solid rgba(5, 150, 105, .3); }
.sch-alert--err  { background: #fef2f2; color: #991b1b; border: 1px solid rgba(220, 38, 38, .3); }
.sch-alert ul    { margin: .5rem 0 0; padding-left: 1.25rem; list-style: disc; }

/* ── Panel & tata letak kecil ─────────────────────────────── */

.sch-panel   { border: 1px solid var(--sch-line); border-radius: var(--sch-radius-lg); padding: 1.5rem; background: var(--sch-card-bg); box-shadow: 0 8px 28px -26px rgba(15, 61, 58, .5); transition: background-color .2s ease; }
.sch-panel--soft { background: var(--sch-surface); border-color: transparent; box-shadow: none; }
/* ── Footer — pola clearwave ──────────────────────────────────
   Baris atas: kolom merek (logo + tagline + alamat + sosmed) di kiri,
   kolom-kolom navigasi di kanan. Lalu bilah bawah dengan garis pemisah:
   hak cipta + "Design by ILUZTAR" (kiri), tautan legal + tombol
   kembali-ke-atas (kanan). */
/* Ruang di bawah bilah terakhir — tanpa ini bilah menempel ke tepi bawah
   viewport dan terasa "terpotong". */
.sch-footer { padding-bottom: 3rem; }
.sch-footer__top {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1.5fr);
  gap: 3rem 2.5rem;
}
.sch-footer__brand { max-width: 25rem; }
.sch-footer__logo { display: inline-block; }
.sch-footer__tagline {
  margin-top: 1rem;
  color: var(--sch-muted);
  font-size: .9rem;
  line-height: 1.65;
}
.sch-footer__addr {
  margin-top: 1rem;
  color: var(--sch-muted);
  font-size: .85rem;
  line-height: 1.6;
}
.sch-footer__nav {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(8.5rem, 1fr));
  gap: 2rem 1.5rem;
}
.sch-footer__nav-title {
  font-family: var(--sch-display, inherit);
  font-size: .72rem;
  font-weight: 700;
  letter-spacing: .09em;
  text-transform: uppercase;
  color: var(--sch-muted);
}
.sch-footer__nav-col ul { list-style: none; margin: .9rem 0 0; padding: 0; }
.sch-footer__nav-col li + li { margin-top: .55rem; }
.sch-footer__nav-col a {
  color: var(--sch-ink);
  font-size: .875rem;
  text-decoration: none;
  transition: color .15s ease;
}
.sch-footer__nav-col a:hover { color: var(--sch-accent-dark); }
.sch-footer__bar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: .75rem 1.5rem;
  margin-top: 3rem;
  padding-top: 1.75rem;
  border-top: 1px solid var(--sch-line);
}
.sch-footer__copy { font-size: .8125rem; color: var(--sch-muted); }
.sch-footer__bar-right { display: flex; align-items: center; gap: 1.25rem; }
.sch-footer__legal { display: flex; flex-wrap: wrap; gap: .4rem 1.25rem; list-style: none; margin: 0; padding: 0; }
.sch-footer__legal a {
  font-size: .8125rem;
  color: var(--sch-muted);
  text-decoration: none;
  transition: color .15s ease;
}
.sch-footer__legal a:hover { color: var(--sch-accent-dark); }
:root[data-theme="dark"] .sch-footer__nav-col a { color: var(--sch-ink); }
/* Di bawah lebar desktop, blok merek dan kolom navigasi ditumpuk penuh-lebar.
   Pada 2-kolom yang sempit (~900px) baris sosmed horizontal meluber dan
   menindih tautan navigasi — stack menghilangkan tabrakan itu. */
@media (max-width: 1024px) {
  .sch-footer__top { grid-template-columns: 1fr; gap: 2.5rem; }
  .sch-footer__brand { max-width: none; }
  /* Beri sosmed izin membungkus di lebar menengah alih-alih meluber sebaris. */
  .sch-footer-social-row { flex-wrap: wrap; }
}
/* Mobile: SEMUANYA rata tengah pada satu poros — blok merek, sosmed, kolom
   nav (satu kolom tunggal, tiap seksi ditumpuk), dan bilah bawah. */
@media (max-width: 600px) {
  .sch-footer { text-align: center; padding-bottom: 2rem; }
  .sch-footer__top { gap: 2rem; }
  .sch-footer__bar { margin-top: 2rem; padding-top: 1.35rem; }
  .sch-footer__brand { text-align: center; }
  .sch-footer__logo { display: inline-flex; }
  .sch-footer__addr { max-width: 22rem; margin-inline: auto; }
  /* `.sch-footer` prefix menaikkan spesifisitas — aturan dasar
     .sch-footer-social-row{justify-content:flex-start} ada SETELAH blok ini
     di file, jadi tanpa prefix ia menang. */
  .sch-footer .sch-footer-social-row { justify-content: center; }

  /* SELALU 2 kolom di ponsel (jangan pernah kolom tunggal yang menjulang). */
  .sch-footer__nav { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; gap: 1.4rem 1rem; }
  .sch-footer__nav-col { display: flex; flex-direction: column; align-items: center; }
  .sch-footer__nav-title { text-align: center; }
  .sch-footer__nav-col ul { text-align: center; margin-top: .55rem; }
  .sch-footer__nav-col li + li { margin-top: .4rem; }

  .sch-footer__bar {
    flex-direction: column;
    align-items: center;
    text-align: center;
    gap: 1rem;
  }
  .sch-footer__bar-right { flex-direction: column; gap: .85rem; }
  .sch-footer__legal { justify-content: center; }
}
@media (max-width: 360px) {
  .sch-footer__nav { gap: 1.1rem .75rem; }
  .sch-footer__nav-col a { font-size: .82rem; }
}

.sch-footer-map__link {
  display: inline-flex;
  align-items: center;
  gap: .25rem;
  margin-left: .375rem;
  color: var(--sch-accent-dark);
  font-size: .8125rem;
  font-weight: 700;
  text-underline-offset: 3px;
  white-space: nowrap;
}
.sch-footer-social-row {
  display: flex;
  flex-wrap: nowrap;                 /* satu baris — permintaan user */
  justify-content: flex-start;
  gap: .5rem;
  list-style: none;
  margin: 1.25rem 0 0;
  padding: 0;
}
/* Layar sangat sempit: baru boleh membungkus supaya tidak meluber. */
@media (max-width: 400px) { .sch-footer-social-row { flex-wrap: wrap; } }
/* Ikon + label teks pada tiap tautan sosmed — orang tua lebih mudah
   mengenalinya daripada ikon polos. Bentuk chip bergaris supaya menonjol. */
.sch-footer-social-row a {
  display: inline-flex;
  align-items: center;
  gap: .4rem;
  padding: .5rem .8rem;
  border: 1px solid var(--sch-line);
  border-radius: 999px;
  color: var(--sch-muted);
  font-size: .8125rem;
  font-weight: 500;
  line-height: 1.15;
  white-space: nowrap;
  transition: color .15s ease, border-color .15s ease, background .15s ease;
}
.sch-footer-social-row a svg { width: 1.05rem; height: 1.05rem; flex: none; display: block; }
.sch-footer-social-row a:hover {
  color: var(--sch-accent-dark);
  border-color: var(--sch-accent-dark);
  background: var(--sch-surface);
}
:root[data-theme="dark"] .sch-footer-social-row a:hover { background: rgba(255, 255, 255, .06); }
/* "Desain oleh Iluztar" pada baris kredit — tautan ke situs resmi iluztar.com. */
.sch-footer-credit__by { color: inherit; font-weight: 600; text-decoration: none; }
.sch-footer-credit__by:hover { color: var(--sch-accent-dark); text-decoration: underline; text-underline-offset: 3px; }
:root[data-theme="dark"] .sch-footer-credit__by:hover { color: #5eead4; }
.sch-dl      { display: grid; gap: .875rem; }
.sch-dl > div{ display: flex; justify-content: space-between; gap: 1rem; font-size: .875rem; border-bottom: 1px solid var(--sch-line); padding-bottom: .875rem; }
.sch-dl > div:last-child { border-bottom: none; padding-bottom: 0; }
.sch-dl dt   { color: var(--sch-muted); }
.sch-dl dd   { margin: 0; font-weight: 600; color: var(--sch-ink); text-align: right; }

.sch-cap { margin: 0; font-size: .7rem; font-weight: 800; letter-spacing: .09em; text-transform: uppercase; color: var(--sch-muted); }
.sch-bullets { list-style: none; margin: 0; padding: 0; }
.sch-bullets li { position: relative; padding-left: 1.5rem; margin-top: .625rem; font-size: .9375rem; line-height: 1.65; color: var(--sch-muted); }
.sch-bullets li:first-child { margin-top: 0; }
.sch-bullets li::before {
  content: "";
  position: absolute;
  left: 0;
  top: .5625rem;
  width: .4375rem;
  height: .4375rem;
  border-radius: 50%;
  background: var(--sch-accent);
}

.sch-empty { padding: 2.5rem 1.5rem; text-align: center; color: var(--sch-muted); font-size: .9375rem; border: 1px dashed var(--sch-line); border-radius: var(--sch-radius-lg); background: var(--sch-surface); }

/* Rata KIRI-KANAN (justify) untuk blok deskripsi panjang — permintaan user.
   hyphens:auto + text-justify:inter-word menekan celah antar-kata lebar yang
   dulu bikin justify terkesan berantakan. */
.sch-prose p        { line-height: 1.8; color: var(--sch-muted); text-align: justify; text-justify: inter-word; hyphens: auto; }
.sch-prose p + p    { margin-top: 1.125rem; }
.sch-prose strong   { color: var(--sch-ink); font-weight: 600; }
.sch-prose, .sch-copy { text-align: justify; text-justify: inter-word; hyphens: auto; }

/* Kolom artikel terpusat dengan lebar-baca ideal — dipakai di berita/detail
   supaya teks tidak menempel kiri dengan ruang kosong besar di kanan. */
.sch-article { max-width: 44rem; margin-inline: auto; }
:root[data-theme="dark"] .sch-prose.prose-sch p,
.sch-prose.prose-sch p { text-align: justify; text-justify: inter-word; hyphens: auto; }

/* Daftar multi-kolom (mis. daftar mapel di kurikulum) — mengisi lebar
   panel alih-alih satu kolom sempit dengan ruang kosong besar di kanan. */
.sch-cols-2 { columns: 2; column-gap: 2.5rem; }
.sch-cols-3 { columns: 3; column-gap: 2.5rem; }
.sch-cols-2 > li, .sch-cols-3 > li { break-inside: avoid; }
@media (max-width: 900px) { .sch-cols-3 { columns: 2; } }
@media (max-width: 560px) { .sch-cols-2, .sch-cols-3 { columns: 1; } }
.sch-featured-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2.5rem;
  height: 2.5rem;
  border-radius: .7rem;
  background: var(--sch-accent-soft);
  color: var(--sch-accent-dark);
}
.sch-featured-icon svg { width: 1.35rem; height: 1.35rem; }
.sch-share { display: flex; align-items: center; flex-wrap: wrap; gap: .5rem; }
.sch-share__label { margin-right: .25rem; color: var(--sch-muted); font-size: .78rem; font-weight: 800; text-transform: uppercase; letter-spacing: .06em; }
.sch-share__link { display: inline-flex; align-items: center; min-height: 2.25rem; padding: .45rem .75rem; border: 1px solid var(--sch-line); border-radius: 999px; background: var(--sch-surface); color: var(--sch-ink); font-size: .78rem; font-weight: 700; text-decoration: none; cursor: pointer; }
.sch-share__link:hover { border-color: var(--sch-accent); color: var(--sch-accent-dark); }


/* Hover untuk tombol bertema aksen di header (search/kontak/WhatsApp).
   Pasangan .sch-bg-accent + kelas ini menggantikan hover warna studio yang
   mewarisi palet studio. */
.sch-btn-hover:hover { background-color: var(--sch-accent-dark) !important; }

/* ── Placeholder gambar flat ──────────────────────────────
   Dipakai di mana pun sebuah entri belum punya foto. Alih-alih kotak abu-abu
   kosong, ditampilkan bidang warna flat dengan ikon dan inisial — sehingga
   demo tetap enak dilihat tanpa satu pun foto asli diunggah. */

.sch-ph {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: .5rem;
  padding: 1rem;
  text-align: center;
  overflow: hidden;
}

.sch-ph svg {
  position: relative;
  z-index: 1;
  width: 30%;
  max-width: 5rem;
  min-width: 2.5rem;
  height: auto;
  color: rgba(255, 255, 255, .95);
}

.sch-ph__label {
  position: relative;
  z-index: 1;
  font-family: "Mona Sans", ui-sans-serif, system-ui, sans-serif;
  font-size: .72rem;
  font-weight: 700;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, .92);
  line-height: 1.3;
  max-width: 90%;
  overflow: hidden;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
}

/* Delapan warna dasar. Semuanya sudah diperiksa: teks putih di atasnya
   memenuhi rasio kontras WCAG AA (>= 4.5:1), jadi label placeholder tetap
   terbaca pada warna mana pun yang terpilih. */
.sch-ph--0 { background: #0f766e; }
.sch-ph--1 { background: #0e7490; }
.sch-ph--2 { background: #b45309; }
.sch-ph--3 { background: #1d4ed8; }
.sch-ph--4 { background: #7e22ce; }
.sch-ph--5 { background: #be123c; }
.sch-ph--6 { background: #0e7490; }
.sch-ph--7 { background: #4d7c0f; }

/* Varian tanpa wadah beraspek (mis. di dalam kartu daftar kecil) */
.sch-ph--static { position: relative; inset: auto; aspect-ratio: 4 / 3; border-radius: inherit; }

/* ============================================================
   Header 4-baris (usulan user, referensi .ref/e-commerce-landing-page-example)

   Struktur:
     1. .sch-topbar    — sosmed (kiri) · pengumuman (tengah) · tema+bahasa (kanan)
     2. .sch-masthead  — logo · kolom pencarian besar · menu masuk
     3. .sch-navbar    — navigasi dengan dropdown, sticky saat discroll
     4. carousel beranda (markup tetap di index.php, tidak berubah)

   Sengaja TIDAK meniru warna/font referensi (hitam-pink ala e-commerce) —
   hanya susunan tata letaknya. Warna tetap teal/emas sekolah lewat variabel
   --sch-* yang sudah ada, termasuk versi mode gelapnya.
   ============================================================ */

.sch-topbar {
  position: relative;
  /* Di ATAS .sch-masthead (z-index:50) supaya dropdown bahasa/tema yang
     turun dari baris ini tidak tertutup bilah logo di bawahnya. */
  z-index: 55;
  background: var(--sch-accent-dark);
  color: rgba(255, 255, 255, .92);
  font-size: .8125rem;
  border-bottom: 1px solid rgba(255, 255, 255, .1);
}
.sch-topbar__row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  min-height: 2.25rem;
  padding-top: .375rem;
  padding-bottom: .375rem;
}
.sch-topbar__social { display: flex; align-items: center; gap: 1.125rem; flex: 0 0 auto; }
.sch-topbar__social a {
  display: flex;
  color: rgba(255, 255, 255, .8);
  transition: color .15s ease;
}
.sch-topbar__social a:hover { color: #fff; }
.sch-topbar__announce {
  flex: 1 1 auto;
  min-width: 0;
  text-align: center;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.sch-prayer-times { color: rgba(255,255,255,.92); font-size: .72rem; font-weight: 700; letter-spacing: .01em; }
.sch-prayer-times__compact { display:none; }
.sch-prayer-modal[hidden] { display: none; }
.sch-prayer-modal { position: fixed; inset: 0; z-index: 100; display: flex; align-items: center; justify-content: center; padding: 1.25rem; background: rgba(2, 15, 14, .7); }
.sch-prayer-modal__panel { position: relative; width: min(100%, 26rem); padding: 2rem; border: 1px solid var(--sch-line); border-radius: var(--sch-radius-lg); background: var(--sch-card-bg); color: var(--sch-ink); box-shadow: 0 1.5rem 4rem rgba(0,0,0,.25); text-align: center; }
.sch-prayer-modal__close { position: absolute; top: .65rem; right: .8rem; width: 2rem; height: 2rem; border: 0; border-radius: 999px; background: transparent; color: var(--sch-muted); font-size: 1.5rem; cursor: pointer; }
.sch-prayer-modal__eyebrow { color: var(--sch-accent-mid); font-size: .75rem; font-weight: 800; letter-spacing: .08em; text-transform: uppercase; }
.sch-prayer-modal h2 { margin: .5rem 0 .25rem; color: var(--sch-ink); font-size: 1.45rem; }
.sch-prayer-modal__time { margin: 0 0 1rem; color: var(--sch-accent-mid); font-size: 2rem; font-weight: 800; }
.sch-prayer-modal__panel > p:not(.sch-prayer-modal__eyebrow):not(.sch-prayer-modal__time) { color: var(--sch-muted); line-height: 1.6; }
.sch-prayer-modal .sch-btn { margin-top: 1rem; }
.sch-topbar__announce a { color: inherit; text-decoration: underline; text-underline-offset: 2px; }
.sch-topbar__actions { display: flex; align-items: center; gap: .25rem; flex: 0 0 auto; }

/* Pengalih bahasa (EN/ID). Ditulis eksplisit di sini — JANGAN bergantung
   pada utility Tailwind di markup (`relative`, `absolute`, `z-20`, `top-full`)
   karena css/tailwind.css sudah di-purge dan sebagian kelas itu tidak ada,
   sehingga dropdown-nya sempat tak berposisi / tak bisa diklik. */
/* Toggle bahasa kini SATU tautan langsung (?lang=…) — tidak ada lagi
   dropdown/JS. (Aturan .lang-dropdown lama dihapus.) */
.lang-switcher { position: relative; }
.lang-toggle-btn { cursor: pointer; text-decoration: none; }
.sch-topbar__iconbtn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 1.75rem;
  height: 1.75rem;
  border: none;
  border-radius: 999px;
  background: transparent;
  color: rgba(255, 255, 255, .85);
  cursor: pointer;
  transition: background-color .15s ease, color .15s ease;
}
.sch-topbar__iconbtn:hover { background: rgba(255, 255, 255, .14); color: #fff; }
.sch-topbar__iconbtn svg { width: 1.05rem; height: 1.05rem; }
/* Ikon bulan/matahari ditumpuk lewat CSS, ditukar dengan data-theme di <html>
   (bukan JS menulis ulang SVG) — lebih murah dan tidak bisa "kedip" salah
   ikon sebelum JS sempat jalan. */
.sch-theme-toggle .icon-moon { display: none; }
:root[data-theme="dark"] .sch-theme-toggle .icon-sun { display: none; }
:root[data-theme="dark"] .sch-theme-toggle .icon-moon { display: block; }
@media (max-width: 1023px) {
  .sch-topbar__social,
  .sch-topbar__actions { display: none; }
  .sch-topbar__row { justify-content: center; }
}
@media (max-width: 639px) {
  .sch-detail-hero { gap:1.25rem; }
  .sch-detail-hero__media { max-height:15rem; }
  .sch-prayer-times { font-size: .66rem; letter-spacing: 0; }
  .sch-prayer-times__full { display:none; }
  .sch-prayer-times__compact { display:inline; }
}

.sch-masthead {
  position: relative;
  z-index: 50;
  background: var(--sch-header-bg);
  padding: 1.375rem 0;
  border-bottom: 1px solid var(--sch-line);
  transition: background-color .2s ease;
}
/* Grid, bukan flex+order+margin-auto — pendekatan sebelumnya sudah dua kali
   menimbulkan bug nyata (tidak rata kanan, tidak di tengah) karena flex-grow
   + margin-left:auto sulit diprediksi begitu elemen tengah punya max-width.
   Grid 3-kolom (logo | cari | aksi) membuat kolom tengah punya lebar PASTI
   (sisa ruang di antara logo dan aksi), sehingga search benar-benar bisa
   di-tengahkan DI DALAM ruang itu lewat margin:auto pada elemennya sendiri. */
.sch-masthead__row {
  position: relative;              /* jangkar bilah pencarian mobile */
  display: grid;
  grid-template-columns: 1fr auto;
  grid-template-areas: "logo actions";   /* mobile: TANPA baris pencarian */
  align-items: center;
  gap: 1rem .875rem;
}
.sch-masthead__logo { grid-area: logo; min-width: 0; }
/* Nama sekolah di ponsel: sengaja dibiarkan MEMBUNGKUS penuh daripada dipotong
   elipsis — lihat blok "(a) Header: logo menyusut" di bagian akhir berkas ini
   (keputusan tetap: jangan klip nama sekolah). */
.sch-masthead__search { grid-area: search; position: relative; }
.sch-masthead__actions { grid-area: actions; display: flex; align-items: center; gap: .5rem; justify-self: end; }

/* Tombol pencarian — hanya muncul di layar sempit (menggantikan kolom). */
.sch-search-toggle {
  display: none;
  align-items: center;
  justify-content: center;
  width: 2.6rem;
  height: 2.6rem;
  border: 1px solid var(--sch-line);
  border-radius: 999px;
  background: transparent;
  color: var(--sch-ink);
  cursor: pointer;
  flex: none;
}
.sch-search-toggle svg { width: 1.1rem; height: 1.1rem; }
.sch-search-toggle[aria-expanded="true"] { background: var(--sch-accent); color: #fff; border-color: var(--sch-accent); }

@media (max-width: 767px) {
  .sch-search-toggle { display: inline-flex; }
  /* Baris header jadi non-positioned di mobile supaya bilah pencarian
     berjangkar ke KAPSUL (.sch-masthead) — lebarnya persis selebar header. */
  .sch-masthead__row { position: static; }
  /* .sch-header … meningkatkan spesifisitas agar menang atas aturan
     `.sch-masthead__search { max-width }` di bagian bawah stylesheet. */
  .sch-header .sch-masthead__search {
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    width: auto;
    margin: .55rem 0 0;
    max-width: none;
    z-index: 61;
    opacity: 0;
    visibility: hidden;
    transform: translateY(-.4rem);
    transition: opacity .18s ease, transform .18s ease, visibility .18s ease;
  }
  .sch-header.is-search-open .sch-masthead__search {
    opacity: 1;
    visibility: visible;
    transform: none;
  }
  /* Tombol pencarian bulat DI DALAM kolom dihapus di mobile — redundan
     dengan tombol toggle di header. Sisakan ruang kanan hanya untuk
     tombol "bersihkan" bawaan input[type=search]. */
  .sch-masthead__search .sch-search-field-btn { display: none; }
  .sch-masthead__search .sch-search-field {
    height: 3rem;
    padding-right: 1.1rem;
    box-shadow: 0 16px 44px -16px rgba(15, 61, 58, .5);
  }
}

@media (min-width: 768px) {
  .sch-masthead__row {
    grid-template-columns: auto minmax(0, 1fr) auto;
    grid-template-areas: "logo search actions";
  }
  .sch-masthead__search { max-width: 34rem; width: 100%; margin: 0 auto; }
}
.sch-search-field {
  display: block;
  width: 100%;
  height: 2.75rem;
  padding: 0 3rem 0 1.1rem;
  border: 1px solid var(--sch-line);
  border-radius: 999px;
  background: var(--sch-card-bg);
  color: var(--sch-ink);
  font: inherit;
  font-size: .9rem;
}
.sch-search-field:focus {
  outline: none;
  border-color: var(--sch-accent);
  box-shadow: 0 0 0 4px rgba(20, 184, 166, .18);
}
.sch-search-field-btn {
  position: absolute;
  top: 50%;
  right: .3rem;
  transform: translateY(-50%);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2.25rem;
  height: 2.25rem;
  border: none;
  border-radius: 999px;
  background: var(--sch-accent);
  color: #fff;
  cursor: pointer;
  transition: background-color .15s ease;
}
.sch-search-field-btn:hover { background: var(--sch-accent-dark); }
.sch-search-field-btn svg { width: 1.05rem; height: 1.05rem; }
.sch-search-results {
  position: absolute;
  z-index: 60;
  top: calc(100% + .5rem);
  left: 0;
  right: 0;
  overflow: hidden;
  border: 1px solid var(--sch-line);
  border-radius: 1rem;
  background: var(--sch-card-bg);
  box-shadow: 0 14px 30px -20px rgba(15, 61, 58, .45);
}
.sch-search-meta,
.sch-search-empty {
  margin: 0;
  padding: .85rem 1rem;
  color: var(--sch-muted);
  font-size: .8125rem;
}
.sch-search-results ul { max-height: 18rem; overflow-y: auto; margin: 0; padding: .35rem; list-style: none; }
.sch-search-result { display: flex; flex-direction: column; gap: .1rem; padding: .7rem .75rem; border-radius: .7rem; color: var(--sch-ink); text-decoration: none; }
.sch-search-result:hover { background: var(--sch-surface); }
.sch-search-result strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: .875rem; }
.sch-search-result span { color: var(--sch-muted); font-size: .72rem; }

/* Menu masuk (portal guru/siswa) — tombol + dropdown kecil, pola sama
   dengan .sch-dropdown navbar supaya perilakunya konsisten. */
.sch-portal-menu { position: relative; flex: 0 0 auto; }
.sch-portal-btn {
  display: inline-flex;
  align-items: center;
  height: 2.75rem;
  gap: .375rem;
  padding: 0 1.1rem;
  border: 1px solid var(--sch-line);
  border-radius: 999px;
  background: transparent;
  color: var(--sch-ink);
  font: inherit;
  font-size: .85rem;
  font-weight: 600;
  cursor: pointer;
  transition: border-color .15s ease, color .15s ease;
  white-space: nowrap;
}
.sch-portal-btn:hover { border-color: var(--sch-accent); color: var(--sch-accent-dark); }
.sch-portal-btn svg { width: 1.1rem; height: 1.1rem; }
/* Layar kecil: sembunyikan label "Masuk", sisakan ikon (tombol bundar). */
@media (max-width: 560px) {
  .sch-portal-btn { gap: 0; width: 2.6rem; height: 2.6rem; padding: 0; justify-content: center; }
  .sch-portal-btn > span { display: none; }
  /* Saat sudah login tombolnya ikon-orang + caret; di lingkaran 2.6rem
     keduanya berdesakan dan tampak seperti wajah rusak — sembunyikan caret,
     sisakan ikon orang saja (dropdown tetap terbuka saat diketuk). */
  .sch-portal-menu--auth .sch-portal-btn svg:last-child { display: none; }
}
.sch-hamburger-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2.6rem;
  height: 2.6rem;
  border: 1px solid var(--sch-line);
  border-radius: 999px;
  background: transparent;
  color: var(--sch-ink);
  cursor: pointer;
  flex: none;
}
.sch-hamburger-btn svg { width: 1.15rem; height: 1.15rem; }
/* Hamburger di bawah desktop; ≥1024px navigasi lewat bilah .sch-navbar —
   KECUALI saat header digulir (bilah nav memudar): burger muncul supaya
   navigasi bisa dibuka lagi lewat panel mobile tanpa scroll ke atas. */
@media (min-width: 1024px) {
  .sch-hamburger-btn { display: none; }
  .sch-header.is-scrolled .sch-hamburger-btn { display: inline-flex; }
}

/* ── Navbar sekunder (baris 3) — bilah tautan horizontal di bawah kapsul
   masthead, hanya DESKTOP (≥1024px). Di bawah itu: hamburger + off-canvas. */
.sch-navbar { display: none; }
@media (min-width: 1024px) {
  /* Bilah pendukung — COMPACT: lebar mengikuti isi (bukan selebar masthead),
     mengambang di tengah, padding & font lebih kecil. */
  .sch-navbar {
    display: block;
    width: max-content;
    max-width: calc(100% - 2.5rem);
    margin: .4rem auto 0;
    border-radius: 999px;
    background: var(--sch-accent-dark);
    /* Bayangan SAMA dengan kapsul masthead putih supaya kedua pil header
       terasa "mengambang" dengan kedalaman yang konsisten. */
    box-shadow: 0 16px 40px -16px rgba(15, 61, 58, .32), 0 2px 8px -4px rgba(15, 61, 58, .12);
    transition: margin .25s ease;
  }
  /* Padding di keempat sisi supaya pil hover/aktif tiap item punya jarak
     dari tepi kapsul teal — sama seperti tombol di kapsul header utama,
     tidak menempel batas. */
  .sch-navbar > div { max-width: none; padding: .32rem .8rem; }

  /* Saat digulir: bilah nav sekunder DISEMBUNYIKAN sepenuhnya (opacity +
     visibility, tak lagi dapat difokus) dan TIDAK kembali saat header
     di-hover. Ia muncul lagi HANYA saat tombol burger ditekan — js/nav.js
     menambah kelas `.nav-peek` pada `.sch-header` (di desktop burger tidak
     membuka panel penuh-layar, melainkan menampilkan bilah pil ini).
     `visibility` di-transisikan agar bilah tetap terlihat selama memudar,
     lalu hilang dari tab-order. TIDAK memakai `overflow`/`max-height` — itu
     memotong dropdown. */
  .sch-navbar {
    transition: opacity var(--sch-dur-ui) var(--sch-ease-out),
                transform var(--sch-dur-ui) var(--sch-ease-out),
                margin var(--sch-dur-ui) var(--sch-ease-out),
                visibility var(--sch-dur-ui) var(--sch-ease-out);
  }
  .sch-header.is-scrolled .sch-navbar {
    opacity: 0;
    visibility: hidden;
    margin-top: 0;
    transform: translateY(-.6rem);
    pointer-events: none;
  }
  /* Burger ditekan (desktop, tergulir) → bilah pil nav kembali tampil. */
  .sch-header.is-scrolled.nav-peek .sch-navbar {
    opacity: 1;
    visibility: visible;
    margin-top: .3rem;
    transform: none;
    pointer-events: auto;
  }
  /* Hover / fokus keyboard di header saat tergulir — ATAU nav pil sedang
     dibuka — memunculkan kembali topbar (banner jam salat + toggle bahasa)
     dengan transisi halus. */
  .sch-header.is-scrolled:hover .sch-topbar,
  .sch-header.is-scrolled:focus-within .sch-topbar,
  .sch-header.is-scrolled.nav-peek .sch-topbar {
    max-height: 5rem;
    opacity: 1;
  }
  /* Burger dalam keadaan aktif (pil nav terbuka). */
  .sch-header.nav-peek .sch-hamburger-btn {
    background: var(--sch-accent);
    color: #fff;
    border-color: var(--sch-accent);
  }
  /* SEMUA halaman, di puncak (belum digulir): bilah pil nav tampil otomatis
     → burger IKUT terlihat dan berwarna teal (aktif). Menekannya menambah
     .nav-collapsed yang menyembunyikan pil; menekan lagi memunculkannya. */
  .sch-header:not(.is-scrolled) .sch-hamburger-btn { display: inline-flex; }
  .sch-header:not(.is-scrolled):not(.nav-collapsed) .sch-hamburger-btn {
    background: var(--sch-accent);
    color: #fff;
    border-color: var(--sch-accent);
  }
  .sch-header:not(.is-scrolled).nav-collapsed .sch-navbar {
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    margin-top: 0;
    transform: translateY(-.5rem);
  }
}
@media (min-width: 1024px) and (prefers-reduced-motion: reduce) {
  .sch-navbar { transition: opacity .01ms; }
}

/* ── Header: kapsul mengambang, MENEMPEL (fixed) sepanjang halaman ────
   `.sch-header` = `position:fixed` di puncak viewport supaya kapsul
   `.sch-masthead` SELALU terlihat saat digulir (sticky tidak dapat
   diandalkan karena <body> ber-`overflow-x:hidden`). `.sch-topbar` bilah
   biasa di paling atas, menyusut hilang setelah digulir. `.sch-masthead`
   = kapsul LEBAR, mengambang (ada ruang kiri-kanan), sudut membulat,
   bayangan, latar buram — bukan kotak rata tepi.

   Konten di bawah header diberi jarak lewat .sch-main-offset (halaman
   non-beranda); beranda dibiarkan hero-nya menyelinap di bawah header
   yang mengambang. */
.sch-header {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  z-index: 65;
}

.sch-topbar {
  overflow: hidden;
  max-height: 5rem;
  transition: max-height .3s ease, opacity .25s ease;
}
.sch-header.is-scrolled .sch-topbar {
  max-height: 0;
  opacity: 0;
}

.sch-masthead {
  position: relative;
  z-index: 60;
  width: min(1360px, calc(100% - 2.5rem));
  max-width: 100%;
  margin: .7rem auto;
  padding: .5rem 1.4rem;
  border: 1px solid rgba(15, 61, 58, .10);
  border-radius: 999px;
  box-shadow: 0 16px 40px -16px rgba(15, 61, 58, .32), 0 2px 8px -4px rgba(15, 61, 58, .12);
  background: color-mix(in srgb, var(--sch-header-bg) 92%, transparent);
  -webkit-backdrop-filter: blur(14px) saturate(1.5);
          backdrop-filter: blur(14px) saturate(1.5);
  transition: padding .25s ease, box-shadow .25s ease, width .25s ease;
}
@media (min-width: 768px) { .sch-masthead__search { max-width: 40rem; } }
/* Beranda (belum digulir): kapsul header duduk sedikit lebih TURUN dari tepi
   atas supaya menyatu dengan carousel — tidak terkesan menggantung. Saat
   digulir, kembali rapat (aturan .is-scrolled di bawah menang). */
.sch-home .sch-header:not(.is-scrolled) .sch-masthead { margin-top: 1.9rem; }
.sch-home .sch-header:not(.is-scrolled) .sch-navbar { margin-top: .55rem; }
/* Setelah digulir: sedikit lebih rapat + bayangan lebih tegas. */
.sch-header.is-scrolled .sch-masthead {
  margin-top: .5rem;
  margin-bottom: .5rem;
  padding: .4rem 1.2rem;
  box-shadow: 0 18px 44px -14px rgba(15, 61, 58, .4), 0 2px 8px -4px rgba(15, 61, 58, .16);
}
@media (max-width: 767px) {
  .sch-masthead {
    width: calc(100% - 1.2rem);
    margin: .5rem auto;
    border-radius: 1.4rem;
    /* padding kanan dilonggarkan supaya burger tidak menempel tepi kapsul. */
    padding: .5rem 1.15rem;
  }
  .sch-masthead__actions { gap: .55rem; }
}
@media (prefers-reduced-motion: reduce) {
  .sch-topbar, .sch-masthead { transition: none; }
}

/* Jarak konten di bawah header fixed (halaman non-beranda). Nilai dari
   js/nav.js (tinggi header sebenarnya, diukur saat di puncak); cadangan
   ~7.5rem bila JS mati. */
.sch-main-offset { padding-top: var(--sch-header-h, 7.5rem); }
@media (max-width: 767px) {
  .sch-main-offset { padding-top: var(--sch-header-h, 8.5rem); }
}
.sch-navbar__list {
  display: flex;
  align-items: stretch;
  justify-content: center;   /* bilah compact: item rapat di tengah, bukan disebar */
  gap: .1rem;
  list-style: none;
  margin: 0;
  padding: 0;
}
.sch-navbar__item { position: relative; }
.sch-navbar__link {
  display: flex;
  align-items: center;
  gap: .4rem;
  padding: .62rem .8rem;
  border-radius: 999px;
  color: rgba(255, 255, 255, .92);
  font-size: .82rem;
  font-weight: 600;
  text-decoration: none;
  background: none;
  border: none;
  font: inherit;
  cursor: pointer;
  white-space: nowrap;
  transition: background-color .15s ease, color .15s ease;
}
/* Ikon kategori di depan label — TIDAK pernah berputar. */
.sch-navbar__icon { width: 1.05rem; height: 1.05rem; flex: none; opacity: .85; transform: none !important; }
/* Caret = svg terakhir yang BUKAN .sch-navbar__icon; hanya ini yang berputar. */
.sch-navbar__link > svg:last-child:not(.sch-navbar__icon) { width: .75rem; height: .75rem; flex: none; opacity: .6; margin-left: -.05rem; transition: transform .2s ease; }
.sch-navbar__item.is-open .sch-navbar__link > svg:last-child:not(.sch-navbar__icon) { transform: rotate(180deg); }
.sch-navbar__link:hover,
.sch-navbar__item.is-open > .sch-navbar__link { background: rgba(255, 255, 255, .12); color: #fff; }
.sch-navbar__link:hover .sch-navbar__icon,
.sch-navbar__item.is-open .sch-navbar__icon { opacity: 1; }
.sch-navbar__link[aria-current="page"] .sch-navbar__icon { opacity: 1; }
/* .sch-navbar tetap teal gelap TETAP di kedua mode (tidak ikut berubah
   lewat --sch-* yang bisa dibalik tema) — jadi warna tautan aktif memakai
   nilai tetap yang terbukti kontras di atas teal gelap, BUKAN
   --sch-gold-soft (variabel untuk LATAR lembut, bukan teks — di mode gelap
   nilainya jadi coklat tua yang nyaris tak terlihat, persis bug yang
   terlihat di screenshot user pada tautan "Beranda"). Sama seperti warna
   pada .sch-demo-bar strong untuk konsistensi aksen emas di kedua tempat. */
.sch-navbar__link[aria-current="page"] { color: #fcd34d; }
.sch-navbar__caret { width: .8rem; height: .8rem; flex: none; transition: transform .15s ease; }
.sch-navbar__item.is-open .sch-navbar__caret,
.sch-navbar__item:focus-within .sch-navbar__caret { transform: rotate(180deg); }
@media (hover: hover) and (pointer: fine) {
  .sch-navbar__item:hover .sch-navbar__caret { transform: rotate(180deg); }
}

.sch-dropdown {
  position: absolute;
  top: 100%;
  left: 0;
  z-index: 41;
  min-width: 14rem;
  margin-top: 0;
  padding: .5rem;
  border-radius: var(--sch-radius);
  /* Selalu terang + teks gelap tetap (bukan var(--sch-card-bg)/var(--sch-ink))
     — dropdown adalah menu popup, bukan "kartu" yang ikut dibalik warna
     terang/gelap. Sebelumnya di mode gelap latar & warna hover-nya
     (--sch-accent-soft/--sch-accent-dark) sama-sama jadi gelap, membuat
     tautan yang di-hover nyaris tak terbaca — persis bug pada screenshot
     dropdown "Akademik" milik user. */
  background: #fff;
  box-shadow: 0 12px 28px -16px rgba(0, 0, 0, .35), 0 0 0 1px rgba(16, 42, 42, .12);
  opacity: 0;
  visibility: hidden;
  transform: translateY(-4px);
  transition: opacity .15s ease, transform .15s ease, visibility .15s;
}
/* Visibilitas dropdown SEPENUHNYA lewat kelas .is-open — SATU sumber
   kebenaran. js/nav.js yang menambah/menghapusnya untuk hover, klik, DAN
   fokus keyboard, selalu menutup saudara lain lebih dulu. Karena tidak ada
   lagi aturan :hover / :focus-within CSS yang berdiri sendiri, mustahil ada
   dua dropdown terbuka bersamaan (bug "tampil ganda" yang dilaporkan). */
.sch-navbar__item.is-open > .sch-dropdown,
.sch-portal-menu.is-open > .sch-dropdown {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
}
/* Bilah nav sekunder: beri JARAK antara pil nav dan panel dropdown
   (jangan menempel). Jembatan tak-terlihat menutup celah itu supaya menu
   tidak keburu tertutup saat kursor melintasinya. */
.sch-navbar__item > .sch-dropdown { margin-top: .6rem; }
.sch-navbar__item.is-open > .sch-dropdown::before {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  top: -.75rem;
  height: .75rem;
}
.sch-dropdown a,
.sch-dropdown button.contact-open-btn {
  display: block;
  width: 100%;
  text-align: left;
  padding: .55rem .75rem;
  border: 0;
  background: transparent;
  border-radius: .6rem;
  color: #102a2a;
  font-family: inherit;
  font-size: .875rem;
  font-weight: 500;
  text-decoration: none;
  cursor: pointer;
  transition: background-color .12s ease, color .12s ease;
}
.sch-dropdown a:hover,
.sch-dropdown button.contact-open-btn:hover { background: #dcf0ec; color: var(--sch-accent-dark); }

/* ── Menu mobile (off-canvas, <1024px) ───────────────────── */

/* Menu mobile dibuka PENUH LAYAR (bukan drawer sebagian dari samping) atas
   permintaan langsung — dan pemicunya (tombol hamburger) tetap di ATAS
   halaman (baris 2), BUKAN bilah ikon di bawah layar seperti pola
   "mobile-bottom-navigation" pada referensi e-commerce. */
.sch-mobile-nav {
  position: fixed;
  inset: 0;
  /* Di atas FAB "Sunting halaman" (z-index 120) & pensil sunting (125) —
     tanpa ini keduanya menutupi menu + baris sosmed di kaki panel. */
  z-index: 130;
  background: rgba(8, 35, 32, .38);
  /* Buka/tutup HALUS: scrim memudar, panel meluncur naik sedikit. Pakai
     @starting-style + allow-discrete supaya bekerja walau dipicu lewat
     atribut [hidden] (display:none↔block) tanpa JS tambahan. Browser lama
     mengabaikannya → tampil seketika (perilaku sebelumnya). */
  transition: opacity var(--sch-dur-ui) var(--sch-ease-out),
              display var(--sch-dur-ui) allow-discrete;
}
.sch-mobile-nav[hidden] { display: none; opacity: 0; }
.sch-mobile-nav:not([hidden]) { opacity: 1; }
@starting-style { .sch-mobile-nav:not([hidden]) { opacity: 0; } }
.sch-mobile-nav__panel { transition: transform var(--sch-dur-ui) var(--sch-ease-out); }
@starting-style {
  .sch-mobile-nav:not([hidden]) .sch-mobile-nav__panel { transform: translateY(1.25rem); }
}
.sch-mobile-nav__submenu { transition: none; }
.sch-mobile-nav__group.is-open .sch-mobile-nav__submenu {
  animation: schSubIn var(--sch-dur-ui) var(--sch-ease-out);
}
@keyframes schSubIn { from { opacity: 0; transform: translateY(-6px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) {
  .sch-mobile-nav, .sch-mobile-nav__panel { transition-duration: .001ms; }
  .sch-mobile-nav__group.is-open .sch-mobile-nav__submenu { animation: none; }
}
/* Menu mobile PENUH LAYAR — mengisi seluruh viewport (bukan drawer sebagian
   dari samping). Hanya tampil di <1024px (di atas itu ada .sch-navbar). */
.sch-mobile-nav__panel {
  position: absolute;
  inset: 0;
  width: 100%;
  margin: 0;
  background: var(--sch-header-bg);
  overflow-y: auto;
  display: flex;
  flex-direction: column;
}
.sch-mobile-nav__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  min-height: 4.5rem;
  padding: .85rem 1.25rem;
  border-bottom: 1px solid var(--sch-line);
}
.sch-mobile-nav__close {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2.25rem;
  height: 2.25rem;
  border: none;
  border-radius: 999px;
  background: var(--sch-surface);
  color: var(--sch-ink);
  cursor: pointer;
}
.sch-mobile-nav__list { list-style: none; margin: 0; padding: .5rem .75rem; flex: 1 1 auto; }
/* Ikon di depan label item nav mobile. */
.sch-mobile-nav__ico { display: inline-flex; flex: none; color: var(--sch-accent-dark); }
.sch-mobile-nav__ico svg { width: 1.15rem; height: 1.15rem; }
.sch-mobile-nav__link, .sch-mobile-nav__toggle { gap: .7rem; }
.sch-mobile-nav__link > span:last-child,
.sch-mobile-nav__toggle > span:not(.sch-mobile-nav__ico) { flex: 1; }
.sch-mobile-nav__group + .sch-mobile-nav__group { border-top: 1px solid var(--sch-line); }
.sch-mobile-nav__link,
.sch-mobile-nav__toggle {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
  min-height: 3.5rem;
  padding: .9rem .75rem;
  border: none;
  background: none;
  font: inherit;
  font-size: .9375rem;
  font-weight: 600;
  color: var(--sch-ink);
  text-decoration: none;
  text-align: left;
  cursor: pointer;
  border-radius: .6rem;
}
.sch-mobile-nav__link:hover,
.sch-mobile-nav__toggle:hover { background: var(--sch-surface); }
/* Hanya CARET (svg anak langsung toggle) yang berputar — ikon kategori di
   dalam .sch-mobile-nav__ico TIDAK ikut. */
.sch-mobile-nav__toggle > svg { width: 1rem; height: 1rem; flex: none; transition: transform .2s ease; }
.sch-mobile-nav__group.is-open .sch-mobile-nav__toggle > svg { transform: rotate(180deg); }
.sch-mobile-nav__submenu { list-style: none; margin: 0 0 .5rem; padding: .25rem 0 .25rem .75rem; display: none; border-left: 2px solid var(--sch-line); }
.sch-mobile-nav__group.is-open .sch-mobile-nav__submenu { display: block; }
.sch-mobile-nav__submenu a,
.sch-mobile-nav__submenu button.contact-open-btn {
  display: block;
  width: 100%;
  text-align: left;
  padding: .625rem .75rem;
  border: 0;
  background: transparent;
  color: var(--sch-muted);
  font-family: inherit;
  font-size: .875rem;
  text-decoration: none;
  border-radius: .5rem;
  cursor: pointer;
}
.sch-mobile-nav__submenu a:hover,
.sch-mobile-nav__submenu button.contact-open-btn:hover { background: var(--sch-surface); color: var(--sch-accent-dark); }
.sch-mobile-nav__foot { padding: 1.25rem; border-top: 1px solid var(--sch-line); display: flex; flex-direction: column; gap: 1rem; }
.sch-mobile-nav__portals { display:flex; flex-wrap:wrap; gap:.5rem; }
.sch-mobile-nav__portals .sch-btn { flex:1 1 8rem; justify-content:center; min-height:2.75rem; }
/* Baris preferensi: bahasa (kiri) + ikon sosmed (kanan) sederet. Toggle
   tema — bila diaktifkan admin — turun ke barisnya sendiri (flex-basis 100%). */
.sch-mobile-nav__preferences { display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:.75rem 1rem; padding:.5rem 0; }
.sch-mobile-nav__preferences .lang-switcher { margin-left:-.5rem; }
.sch-mobile-nav__social { display:flex; align-items:center; gap:.35rem; margin-left:auto; }
.sch-mobile-nav__social a { display:flex; padding:.4rem; border-radius:999px; color:var(--sch-muted); }
.sch-mobile-nav__social a:hover { color:var(--sch-accent-dark); background:var(--sch-surface); }
.sch-mobile-nav__social svg { width:1.15rem; height:1.15rem; }
.sch-mobile-theme-toggle { flex-basis:100%; order:3; display:inline-flex; align-items:center; justify-content:flex-start; gap:.45rem; min-height:2.75rem; padding:.5rem .7rem; border:1px solid var(--sch-line); border-radius:999px; background:var(--sch-card-bg); color:var(--sch-ink); font:inherit; font-size:.8125rem; font-weight:700; cursor:pointer; }
.sch-mobile-theme-toggle svg { width:1rem; height:1rem; flex:none; }
.sch-mobile-theme-toggle .icon-moon,
.sch-mobile-theme-toggle .icon-sun { width:1.05rem; height:1.05rem; }
.sch-mobile-theme-toggle__arrow { opacity:.55; margin-left:auto; }

/* ============================================================
   Kartu/panel/notice terbalik dari komponen lain (permintaan langsung user
   setelah melihat screenshot): TERANG (teal) di mode terang, PUTIH di mode
   gelap — kebalikan dari .sch-input/.bg-white/dst. yang putih-di-terang,
   gelap-di-gelap seperti biasa.

   --sch-ink dan --sch-muted DI-SCOPE ULANG di sini (bukan cuma `background`)
   supaya SELURUH teks anak (.sch-card__title, .sch-panel h2, dst. — yang
   semuanya sudah memakai var(--sch-ink)/var(--sch-muted)) otomatis ikut
   berubah tanpa perlu menimpa satu per satu selector anak. Diletakkan di
   AKHIR berkas supaya menang urutan cascade atas definisi dasar
   .sch-card/.sch-panel/.sch-notice di atas (spesifisitas sama, urutan yang
   menentukan). */
.sch-card, .sch-panel, .sch-notice {
  --sch-ink: #fff;
  --sch-muted: rgba(255, 255, 255, .82);
  --sch-line: rgba(255, 255, 255, .18);
  background: var(--sch-accent-dark);
}
/* Mode gelap = KEBALIKAN mode terang: kartu/panel/notice jadi PUTIH dengan
   teks gelap (bukan hijau gelap). Latar halaman yang sudah gelap jadi 60%,
   kartu putih jadi 30% yang menonjol, emas tetap 10% aksen. */
:root[data-theme="dark"] .sch-card,
:root[data-theme="dark"] .sch-panel,
:root[data-theme="dark"] .sch-notice {
  --sch-ink: #102a2a;
  --sch-muted: #526568;
  --sch-line: rgba(16, 42, 42, .12);
  /* tint pil/pill di dalam kartu putih pakai mint pastel terang, bukan
     versi hijau-gelap dari :root[data-theme=dark] — kalau tidak,
     .sch-pill--info & .sch-profile-list jadi gelap-di-atas-gelap. */
  --sch-accent-soft: #dcf0ec;
  --sch-surface: #f4f8f7;
  background: #ffffff;
  border-color: rgba(16, 42, 42, .12);
}
/* Label kategori kartu berita (mis. "PRESTASI"): emas terang di atas kartu
   teal (mode terang), emas tua di atas kartu putih (mode gelap) — tetap
   aksen emas di kedua mode, hanya nadanya disesuaikan agar kontras. */
.sch-card--news .sch-card__meta { color: #fcd34d; }
:root[data-theme="dark"] .sch-card--news .sch-card__meta { color: #a16207; }
/* Pengumuman DISEMATKAN: sorotan lembut supaya lebih menonjol dari
   pengumuman biasa. Mode terang = mint pastel + teks gelap; mode gelap =
   kartu putih dengan bingkai emas (bukan hijau gelap). */
.sch-notice--pinned {
  --sch-ink: #102a2a;
  --sch-muted: #526568;
  background: var(--sch-accent-soft);
}
:root[data-theme="dark"] .sch-notice--pinned {
  --sch-ink: #102a2a;
  --sch-muted: #526568;
  background: #ffffff;
  border-color: var(--sch-gold);
}
/* Pil kategori pada pengumuman DISEMATKAN: latar pil bawaan
   (var(--sch-accent-soft) mint) menyatu tak terlihat di atas kartu mint
   (mode terang) / kartu putih (mode gelap) — di sini dijadikan pil teal
   solid + teks putih supaya "kapsul" kategorinya jelas terlihat di kedua
   mode (keluhan user: pil PPDB/AKADEMIK 2 item pertama "tidak ada"). */
.sch-notice--pinned .sch-pill {
  background: var(--sch-accent);
  color: #fff;
}

:root[data-theme="dark"] .sch-input,
:root[data-theme="dark"] select,
:root[data-theme="dark"] textarea,
:root[data-theme="dark"] input {
  color: var(--sch-ink);
  background: #102523;
  border-color: rgba(169, 192, 189, .25);
}
:root[data-theme="dark"] .sch-input:focus,
:root[data-theme="dark"] select:focus,
:root[data-theme="dark"] textarea:focus,
:root[data-theme="dark"] input:focus {
  border-color: var(--sch-accent-mid);
  box-shadow: 0 0 0 3px rgba(20, 184, 166, .2);
}
:root[data-theme="dark"] .sch-search-results {
  background: #152f2c;
  border-color: rgba(169, 192, 189, .22);
  box-shadow: 0 18px 36px -18px rgba(0, 0, 0, .8);
}
:root[data-theme="dark"] .sch-search-result:hover,
:root[data-theme="dark"] .sch-mobile-nav__link:hover,
:root[data-theme="dark"] .sch-mobile-nav__toggle:hover {
  background: rgba(255, 255, 255, .08);
}
:root[data-theme="dark"] .sch-footer-social-row a,
:root[data-theme="dark"] footer a {
  color: var(--sch-muted);
}
:root[data-theme="dark"] .sch-footer-social-row a:hover,
:root[data-theme="dark"] footer a:hover {
  color: #5eead4;
}
:root[data-theme="dark"] .sch-table th,
:root[data-theme="dark"] .sch-table td {
  border-color: rgba(169, 192, 189, .18);
}
/* .sch-dl dipakai di dalam panel (putih di mode gelap) — biarkan garisnya
   ikut var(--sch-line) yang di-scope kartu (gelap tipis, terlihat di putih). */
/* Kartu jadi putih di mode gelap, jadi pil "muted" TIDAK lagi ditimpa jadi
   hijau-abu terang (itu bikin teks pucat di atas kartu putih) — dibiarkan
   memakai gaya dasar #f0f0ef + teks #57534e, yang terbaca baik di atas
   kartu putih maupun latar halaman gelap. */

/* Akibat langsung dari pembalikan warna kartu di atas: sebagian besar
   judul/teks di dalam .sch-card/.sch-panel/.sch-notice ditulis pakai kelas
   Tailwind ter-hardcode (text-neutral-950, text-neutral-700, dst. — bukan
   var(--sch-ink)), yang nilainya SAMA di mode terang maupun gelap. Sekarang
   kartu itu sendiri gelap DI MODE TERANG juga (bukan cuma mode gelap), jadi
   judul gelap-di-atas-gelap itu pecah bahkan tanpa mode gelap dinyalakan.
   Override di bawah ini berlaku SELALU (bukan cuma di dalam
   [data-theme="dark"]) — descendant kartu memakai var(--sch-ink)/
   var(--sch-muted) yang di-scope ulang tepat di atas, mengikuti kartu
   induknya di kedua mode. Ini juga menutup temuan sisa "teks abu-abu
   gelap/hitam tidak terbaca di atas latar hijau gelap" dari inline
   style="color:#525252"/"color:#0a0a0a" yang sudah diperbaiki satu per
   satu di halaman terkait — aturan ini jaring pengaman untuk kelas
   Tailwind serupa yang mungkin masih terlewat. */
.sch-card .text-neutral-950, .sch-panel .text-neutral-950, .sch-notice .text-neutral-950,
.sch-card .text-neutral-900, .sch-panel .text-neutral-900, .sch-notice .text-neutral-900,
.sch-card .text-neutral-800, .sch-panel .text-neutral-800, .sch-notice .text-neutral-800 {
  color: var(--sch-ink) !important;
}
.sch-card .text-neutral-700, .sch-panel .text-neutral-700, .sch-notice .text-neutral-700,
.sch-card .text-neutral-600, .sch-panel .text-neutral-600, .sch-notice .text-neutral-600,
.sch-card .text-neutral-500, .sch-panel .text-neutral-500, .sch-notice .text-neutral-500,
.sch-card .text-neutral-400, .sch-panel .text-neutral-400, .sch-notice .text-neutral-400 {
  color: var(--sch-muted) !important;
}

/* Aksen emas untuk subjudul kartu (permintaan user): saat kartu berwarna
   teal (mode terang/default), subjudul memakai emas alih-alih putih/78%
   putih, supaya tidak semua teks pada kartu gelap itu putih polos — ada
   jenjang visual (judul putih tebal, subjudul emas, isi putih pudar).
   Di mode gelap kartu jadi putih (lihat pembalikan warna di atas), jadi
   dikembalikan ke abu-abu biasa — emas di atas putih kurang cocok. */
/* Emas hanya saat meta duduk di dalam kartu/panel/notice berwarna — di
   konteks lain (mis. .sch-profile-hero berlatar abu terang) emas kurang
   kontras, jadi biarkan var(--sch-muted). */
.sch-card .sch-card__meta,
.sch-panel .sch-card__meta,
.sch-notice .sch-card__meta { color: #fcd34d; }
:root[data-theme="dark"] .sch-card .sch-card__meta,
:root[data-theme="dark"] .sch-panel .sch-card__meta,
:root[data-theme="dark"] .sch-notice .sch-card__meta { color: #a16207; }

.sch-back-link { display: flex; width: max-content; max-width: 100%; margin-bottom: 1.4rem; color: var(--sch-accent-dark); font-size: .875rem; font-weight: 700; text-decoration: none; }
.sch-back-link:hover { color: var(--sch-accent); }
.sch-profile-hero { display: flex; align-items: center; gap: 1.5rem; padding: 2rem; border: 1px solid var(--sch-line); border-radius: var(--sch-radius-lg); background: var(--sch-surface); }
.sch-profile-hero .sch-person__photo { width: 8rem; height: 8rem; flex: none; }
.sch-profile-hero h1 { margin: .3rem 0; color: var(--sch-ink); font-size: clamp(1.65rem, 4vw, 2.5rem); }
.sch-profile-role { margin: 0; color: var(--sch-muted); font-size: 1rem; }
/* "Detail profil" (dl panjang) menempati kolom kanan penuh; tiga kartu
   pendek (Tentang / Kelas / Aktivitas) ditumpuk di kolom kiri. `align-items:
   start` supaya tiap kartu setinggi isinya — tidak ada kartu teal kosong
   yang melar mengikuti tinggi kartu tetangga. */
.sch-profile-grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  grid-template-areas:
    "about    details"
    "classes  details"
    "activity details";
  gap: 1.25rem;
  align-items: start;
}
.sch-profile-grid > :nth-child(1) { grid-area: about; }
.sch-profile-grid > :nth-child(2) { grid-area: details; }
.sch-profile-grid > :nth-child(3) { grid-area: classes; }
.sch-profile-grid > :nth-child(4) { grid-area: activity; }
.sch-profile-grid h2, .sch-profile-activity + h2 { margin: 0; color: var(--sch-ink); font-size: 1.1rem; }
.sch-profile-list, .sch-profile-activity { margin: 1rem 0 0; padding: 0; list-style: none; }
.sch-profile-list { display: flex; flex-wrap: wrap; gap: .5rem; }
/* Warna dipatok eksplisit: di dalam .sch-panel teal, `--sch-ink` jadi putih
   sehingga teks pil (mint muda) tak terbaca. Teal tua di atas mint selalu
   kontras — baik di panel teal (mode terang) maupun kartu putih (mode gelap). */
.sch-profile-list li { padding: .5rem .8rem; border-radius: .6rem; background: #dcf0ec; color: #0f3d3a; font-size: .875rem; font-weight: 700; line-height: 1.4; }
.sch-profile-details { display: grid; gap: .75rem; margin: 1rem 0 0; }
.sch-profile-details div { display: grid; grid-template-columns: minmax(6rem, .7fr) minmax(0, 1.3fr); gap: .75rem; padding-bottom: .75rem; border-bottom: 1px solid var(--sch-line); }
.sch-profile-details dt { color: var(--sch-muted); font-size: .78rem; font-weight: 700; }
.sch-profile-details dd { margin: 0; color: var(--sch-ink); font-size: .875rem; overflow-wrap: anywhere; }
.sch-profile-details a { color: var(--sch-accent-mid); }
.sch-profile-activity { display: grid; gap: 0; }
.sch-card--link { display:block; color:inherit; text-decoration:none; height:100%; transition:transform .2s ease, box-shadow .2s ease; }
.sch-card--link:hover { transform:translateY(-.2rem); box-shadow:0 1rem 2rem rgba(15,61,58,.12); }
/* Definisi tunggal .sch-eyebrow (dulu ada dua, nilainya bentrok — versi
   "villa-agency" di bawah menang; margin-bottom dari sini dipertahankan). */
.sch-eyebrow { font-family: var(--sch-display, inherit); color: var(--sch-accent-dark); font-size: .8125rem; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; margin-bottom: .5rem; }

/* Skip-to-content: tersembunyi di luar layar sampai difokuskan lewat Tab
   (aksesibilitas keyboard — panel nav penuh butuh banyak Tab untuk dilewati). */
.sch-skip-link {
  position:fixed; top:.75rem; left:.75rem; z-index:10000;
  transform:translateY(-160%);
  background:var(--sch-accent-dark); color:#fff;
  padding:.6rem 1rem; border-radius:.6rem; font-weight:700; font-size:.875rem;
  text-decoration:none; box-shadow:0 .5rem 1.5rem rgba(0,0,0,.25);
  transition:transform .18s ease;
}
.sch-skip-link:focus { transform:translateY(0); outline:2px solid #fff; outline-offset:2px; }

/* Breadcrumb halaman dalam. */
.sch-breadcrumb__list { display:flex; flex-wrap:wrap; align-items:center; gap:.4rem; margin:0; padding:0; list-style:none; font-size:.8125rem; }
.sch-breadcrumb__item { display:flex; align-items:center; gap:.4rem; color:var(--sch-muted); min-width:0; }
.sch-breadcrumb__item + .sch-breadcrumb__item::before { content:"/"; color:var(--sch-line); }
.sch-breadcrumb__item a { color:var(--sch-muted); text-decoration:none; }
.sch-breadcrumb__item a:hover { color:var(--sch-accent-dark); text-decoration:underline; }
/* Crumb terakhir (halaman sekarang): teks penuh, boleh turun baris —
   dipotong-ellipsis sebelumnya membuat judul panjang "terpotong". */
.sch-breadcrumb__item[aria-current="page"] { color:var(--sch-ink); font-weight:600; white-space:normal; }

.sch-print-row { display:flex; justify-content:flex-end; }

/* Cetak: buang kerangka situs & elemen interaktif, paksa warna terang,
   dan PASTIKAN seluruh isi tampil — reveal scroll dimatikan, akordeon &
   "Selengkapnya" dibuka, carousel diringkas ke slide pertama, warna latar
   (badge/pill/placeholder) tetap tercetak. */
@media print {
  /* Cetak warna latar & border (tanpa ini badge/pill/placeholder blank). */
  *, *::before, *::after {
    -webkit-print-color-adjust: exact !important;
    print-color-adjust: exact !important;
  }
  @page { margin: 1.4cm; }

  /* Kerangka + elemen yang hanya berguna di layar. */
  .sch-header, .sch-mobile-nav, .sch-skip-link, #loader,
  .sch-topbar, .sch-navbar, .sch-share, .sch-print-row, .sch-tabs,
  footer, .sch-footer, .sch-back-to-top, .sch-back-link, #sch-cursor,
  .sch-prayer-modal, #search-overlay, #contact-overlay, .sch-modal,
  .sch-edit-toggle, .sch-edit-pen, .sch-edit-toast,
  .sch-edit-labels-btn, .sch-labels-modal,
  .sch-hero__controls, .sch-hero__arrows, .sch-carousel__controls,
  .sch-carousel__btn, .sch-carousel__dots, .sch-marquee,
  .sch-readmore__toggle, .sch-faq__toggle, .sch-testi-actions,
  .sch-closer__form, .sch-map-facade, .sch-closer__map,
  form, button, .sch-btn, .sch-pagination, .sch-videobtn,
  [data-print], [data-testi-open] { display: none !important; }

  :root { --sch-body-bg:#fff; --sch-card-bg:#fff; --sch-ink:#0a0a0a; --sch-muted:#3a3a3a; --sch-line:#c8c8c8; }
  html, body { background:#fff !important; color:#0a0a0a !important; }
  main { padding-top: 0 !important; }
  main, .sch-main-offset { padding-top: 0 !important; margin-top: 0 !important; }

  /* Reveal scroll & animasi: paksa terlihat. */
  .fade-in, .fade-in-stagger, .fade-in-stagger .fade-in,
  [class*="fade-in"] {
    opacity: 1 !important;
    transform: none !important;
    visibility: visible !important;
  }

  /* "Selengkapnya": lepas pemangkasan, sembunyikan tombolnya (di atas). */
  .sch-readmore__body {
    -webkit-line-clamp: unset !important;
    max-height: none !important;
    overflow: visible !important;
    -webkit-mask-image: none !important;
            mask-image: none !important;
  }
  /* Akordeon <details>: buka semua isinya. */
  details > *:not(summary) { display: block !important; }
  .sch-acc__item .sch-acc__a { display: block !important; height: auto !important; animation: none !important; }
  .sch-acc__mark { display: none !important; }

  /* Carousel: cukup slide/kelompok pertama. */
  .sch-carousel__track { transform: none !important; display: block !important; }
  [data-carousel-slide]:not(:first-child) { display: none !important; }
  .sch-carousel__viewport { overflow: visible !important; }

  /* Kartu/panel: rata & tak terpotong antar-halaman. */
  .sch-notice, .sch-card, .sch-panel, .sch-fac-card, .sch-testi-card,
  .sch-bestdeal__info, .sch-featured__info {
    border: 1px solid #c8c8c8 !important;
    box-shadow: none !important;
    background: #fff !important;
    color: #0a0a0a !important;
    break-inside: avoid;
    page-break-inside: avoid;
  }
  .sch-notice__title, .sch-card__title, h1, h2, h3, h4 { color: #0a0a0a !important; }
  a { color: #0a0a0a !important; text-decoration: underline; }

  /* Gambar: tetap dalam batas kertas. */
  img, .sch-slide__img { max-width: 100% !important; height: auto !important; }
  .sch-featured__media, .sch-bestdeal__media, .sch-detail-hero__media { max-height: 8cm !important; }

  /* Grid section: tumpuk supaya muat lebar kertas. */
  .sch-featured, .sch-bestdeal__grid, .sch-closer, .sch-detail-cols,
  .sch-grid, .sch-fac-grid, .sch-grid--news {
    display: block !important;
  }
  .sch-grid > li, .sch-fac-grid > li, .sch-grid--news > li { margin-bottom: .5cm; }
}

/* ── Cetak halaman PENGUMUMAN — arsip resmi untuk orang tua ──────────
   Masalah lama: mencetak daftar hanya menghasilkan ringkasan 200 karakter
   ("banyak data hilang") dan tata letak layar yang tak pas di kertas.
   Di sini: kop cetak muncul, isi pengumuman ditampilkan LENGKAP, dan bagian
   yang tak relevan di kertas (breadcrumb, prev/next, "pengumuman lainnya",
   panel "ada pertanyaan") disembunyikan. */
.sch-print-head { display: none; }
.sch-notice__print-full { display: none; }
@media print {
  .sch-print-head {
    display: block !important;
    margin: 0 0 .8cm;
    padding-bottom: .35cm;
    border-bottom: 2px solid #0a0a0a;
  }
  .sch-print-head__brand { font-size: 13pt; font-weight: 700; color: #0a0a0a; }
  .sch-print-head__sub   { font-size: 9.5pt; color: #3a3a3a; margin-top: .1cm; }

  /* Daftar: tampilkan isi PENUH, sembunyikan ringkasan. */
  .sch-notice__body { display: none !important; }
  .sch-notice__print-full {
    display: block !important;
    margin-top: .35rem;
    font-size: 10.5pt;
    line-height: 1.5;
    color: #0a0a0a;
  }
  .sch-notice__print-full p { margin: 0 0 .45rem; }
  .sch-notice { padding: .55cm .6cm !important; margin-bottom: .5cm !important; }
  .sch-notice__head { gap: .4rem; }

  /* Halaman detail: hanya judul + meta + isi + rincian yang dicetak. */
  .sch-breadcrumb,
  .sch-detail-cols__aside .sch-panel:not(.sch-panel--soft),
  .sch-pn,
  .sch-detail-more { display: none !important; }

  .sch-detail-head h1 { font-size: 18pt; line-height: 1.2; margin: .1cm 0 .2cm; }
  .sch-detail-head .sch-eyebrow { font-size: 9.5pt; color: #3a3a3a; }
  .sch-detail-badges { margin-top: .15cm; }
  .sch-richtext { font-size: 11pt; line-height: 1.55; color: #0a0a0a; }
  .sch-richtext p { margin: 0 0 .5rem; }
  /* Panel "Rincian" — pastikan benar-benar terbaca di kertas (kotak, judul,
     dan setiap baris dt/dd hitam di atas putih). */
  .sch-detail-cols__aside .sch-panel--soft {
    margin-top: .6cm;
    padding: .5cm .55cm !important;
    background: #fff !important;
    border: 1px solid #c8c8c8 !important;
    box-shadow: none !important;
    break-inside: avoid;
    page-break-inside: avoid;
  }
  .sch-detail-cols__aside .sch-panel--soft h2 { font-size: 11pt !important; color: #0a0a0a !important; margin: 0 0 .25cm; }
  .sch-dl { display: block !important; margin-top: .2cm !important; }
  .sch-dl > div {
    display: flex !important;
    justify-content: space-between !important;
    gap: 1rem;
    font-size: 10pt !important;
    padding: .18cm 0 !important;
    border-bottom: 1px solid #d5d5d5 !important;
  }
  .sch-dl > div:last-child { border-bottom: 0 !important; }
  .sch-dl dt { color: #3a3a3a !important; }
  .sch-dl dd { color: #0a0a0a !important; font-weight: 600; text-align: right; margin: 0; }

  /* Tautan unduh lampiran → tampil sebagai teks biasa saat dicetak. */
  a.sch-btn[download] {
    display: inline !important;
    padding: 0 !important;
    border: 0 !important;
    background: none !important;
    font-weight: 600;
    color: #0a0a0a !important;
  }
  a.sch-btn[download] svg { display: none !important; }
  a.sch-btn[download]::before { content: "\2193  "; }

  /* Kaki situs & elemen mengambang tak pernah ikut ke kertas. */
  footer, .sch-footer, [class*="sch-footer"],
  #back-to-top, .sch-back-to-top, .sch-print-hide { display: none !important; }
  /* Latar teal <html> (untuk efek pantul-scroll di layar) tak boleh ikut
     tercetak sebagai blok warna di sisa halaman terakhir. */
  :root, html, body, main, .sch-main-offset,
  .sch-notice, .sch-notice--pinned {
    background: #fff !important;
    background-color: #fff !important;
    background-image: none !important;
  }
}
/* ── Halaman detail (prestasi, fasilitas) ─────────────────────
   Hero = gambar + ringkasan berdampingan, tinggi seimbang (stretch, bukan
   center yang bikin teks mengambang di sisa ruang). Gambar dibatasi rasio
   & tinggi maksimum supaya placeholder flat tidak jadi blok warna raksasa. */
.sch-detail-hero { display:grid; grid-template-columns:minmax(0,0.92fr) minmax(0,1.08fr); gap:clamp(1.5rem,4vw,3.5rem); align-items:stretch; }
.sch-detail-hero__media { position:relative; overflow:hidden; border-radius:var(--sch-radius-lg); background:var(--sch-surface); aspect-ratio:4/3; max-height:26rem; }
.sch-detail-hero__media > * { position:absolute; inset:0; width:100%; height:100%; object-fit:cover; }
.sch-detail-hero__body { min-width:0; display:flex; flex-direction:column; justify-content:center; }
.sch-detail-hero__body h1 { margin:.35rem 0 .85rem; color:var(--sch-ink); font-size:clamp(1.7rem,1rem + 2.4vw,2.5rem); line-height:1.15; }
.sch-detail-hero__body .sch-card__meta { margin-bottom:1.25rem; }
.sch-detail-hero__lead { color:var(--sch-muted); font-size:1.02rem; line-height:1.7; margin:.25rem 0 0; }
/* Sorotan hasil (mis. "Juara 1" / "Medali Perak") — aksen emas, jadi mata
   langsung tertuju ke capaian utamanya. */
.sch-detail-result { display:inline-flex; align-items:baseline; gap:.5rem; margin:.25rem 0 1rem; padding:.5rem .9rem; border-radius:.7rem; background:var(--sch-gold-soft); color:#7c4a03; font-weight:800; font-size:1.05rem; letter-spacing:.01em; }
.sch-detail-result span { font-size:.72rem; font-weight:700; text-transform:uppercase; letter-spacing:.08em; opacity:.75; }
.sch-richtext { color:var(--sch-muted); font-size:1.05rem; line-height:1.8; text-align:justify; text-justify:inter-word; hyphens:auto; }
.sch-richtext p + p { margin-top:1rem; }
.sch-detail-badges { display:flex; flex-wrap:wrap; gap:.4rem; margin:.25rem 0 1rem; }
/* Kepala halaman detail tanpa gambar (mis. pengumuman): hanya eyebrow +
   judul + badge, selebar kolom baca. */
.sch-detail-head { max-width:52rem; }
.sch-detail-head h1 { margin:.4rem 0 .85rem; color:var(--sch-ink); font-size:clamp(1.7rem,1rem + 2.4vw,2.4rem); line-height:1.15; text-wrap:balance; }
.sch-detail-cols { display:grid; gap:clamp(2rem,4vw,3rem); grid-template-columns:minmax(0,1.7fr) minmax(0,1fr); align-items:start; margin-top:clamp(2rem,5vw,3.5rem); }
/* Varian artikel berita: kolom badan lebih lebar (lebar-baca ideal ~50rem),
   sidebar tetap ~1fr. */
.sch-detail-cols--article { grid-template-columns:minmax(0,2.5fr) minmax(0,1fr); }
.sch-detail-cols--article .sch-prose { font-size:1.02rem; }
.sch-detail-cols__aside { min-width:0; display:grid; gap:1.25rem; position:sticky; top:5.5rem; }
.sch-detail-cols__main { min-width:0; }
@media (max-width:860px){
  .sch-detail-hero { grid-template-columns:1fr; }
  .sch-detail-hero__media { max-height:20rem; }
  .sch-detail-cols { grid-template-columns:1fr; }
  .sch-detail-cols__aside { position:static; }
}

/* ── Navigasi entri sebelumnya / berikutnya (sch_prevnext) ──── */
.sch-pn { display:grid; grid-template-columns:1fr 1fr; gap:1rem; }
.sch-pn__item {
  display:flex; align-items:center; gap:.9rem; min-width:0;
  padding:1rem 1.15rem;
  border:1px solid var(--sch-line); border-radius:var(--sch-radius);
  background:var(--sch-surface); color:var(--sch-ink);
  text-decoration:none;
  transition:border-color .18s ease, background-color .18s ease, transform .18s ease, box-shadow .18s ease;
}
.sch-pn__item--next { text-align:right; }
.sch-pn__item--next .sch-pn__text { align-items:flex-end; }
a.sch-pn__item:hover {
  border-color:var(--sch-accent); background:var(--sch-card-bg);
  transform:translateY(-2px); box-shadow:var(--sch-shadow);
}
.sch-pn__item.is-disabled { opacity:.4; }
.sch-pn__chip {
  flex:none; display:inline-flex; align-items:center; justify-content:center;
  width:2.25rem; height:2.25rem; border-radius:999px;
  background:var(--sch-accent-soft); color:var(--sch-accent-dark);
}
a.sch-pn__item:hover .sch-pn__chip { background:var(--sch-accent); color:#fff; }
.sch-pn__chip svg { width:1.1rem; height:1.1rem; }
.sch-pn__text { flex:1 1 auto; min-width:0; display:flex; flex-direction:column; gap:.15rem; }
.sch-pn__cap {
  font-size:.68rem; font-weight:800; letter-spacing:.09em; text-transform:uppercase;
  color:var(--sch-muted);
}
.sch-pn__title {
  font-size:.92rem; font-weight:700; color:var(--sch-ink); line-height:1.35;
  display:-webkit-box; -webkit-box-orient:vertical; -webkit-line-clamp:2; overflow:hidden;
}
@media (max-width:640px){
  .sch-pn { grid-template-columns:1fr; }
  .sch-pn__item--next { text-align:left; }
  .sch-pn__item--next .sch-pn__text { align-items:flex-start; }
}
.sch-contact-layout { display:grid; gap:2.5rem; grid-template-columns:minmax(0,1fr); align-items:stretch; }
.sch-contact-form { min-width:0; }
.sch-contact-sidebar { min-width:0; display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); gap:1.5rem; align-items:stretch; }
.sch-contact-sidebar > .sch-panel,
.sch-contact-map { min-width:0; min-height:18rem; }
.sch-contact-map { border-radius:var(--sch-radius-lg); overflow:hidden; border:1px solid var(--sch-line); }
.sch-contact-map iframe { width:100%; height:100%; min-height:18rem; border:0; display:block; }
/* Facade peta: placeholder ringan sampai diklik (lihat initMapFacade). */
/* Facade "Tampilkan peta": ikon di kiri, dua baris teks rapi di kanan
   (judul tebal + keterangan redup), semuanya dipusatkan vertikal. */
.sch-map-facade {
  display:grid;
  grid-template-columns:auto minmax(0,1fr);
  grid-template-rows:auto auto;
  column-gap:.85rem; row-gap:.15rem;
  align-content:center; justify-content:center;
  width:100%; height:100%; min-height:11rem; padding:1.5rem;
  border:0; cursor:pointer; font:inherit; text-align:left;
  background:
    radial-gradient(circle at 30% 30%, rgba(20,184,166,.18), transparent 60%),
    linear-gradient(135deg, var(--sch-surface), var(--sch-surface-deep));
  color:var(--sch-accent-dark); transition:background-color .2s ease;
}
.sch-map-facade:hover { background:linear-gradient(135deg, var(--sch-surface-deep), var(--sch-surface)); }
.sch-map-facade__icon  { grid-column:1; grid-row:1 / 3; align-self:center; width:2rem; height:2rem; }
.sch-map-facade__label { grid-column:2; grid-row:1; font-family:"Mona Sans", ui-sans-serif, system-ui, sans-serif; font-weight:700; font-size:.95rem; color:var(--sch-ink); }
.sch-map-facade__hint  { grid-column:2; grid-row:2; font-size:.78rem; line-height:1.45; color:var(--sch-muted); }
.sch-profile-activity li { padding: .9rem 0; border-top: 1px solid var(--sch-line); color: var(--sch-ink); }
.sch-profile-activity li:first-child { border-top: 0; padding-top: .25rem; }
.sch-profile-activity strong { font-size: .95rem; }

/* Daftar "Prestasi yang dibimbing" di profil guru. */
.sch-mentored { list-style: none; margin: 1rem 0 0; padding: 0; display: grid; gap: 0; }
.sch-mentored__item {
  display: grid;
  gap: .15rem;
  padding: .85rem 0;
  border-top: 1px solid var(--sch-line);
  color: var(--sch-ink);
  text-decoration: none;
  transition: padding-left .15s ease;
}
.sch-mentored li:first-child .sch-mentored__item { border-top: 0; padding-top: .2rem; }
.sch-mentored__item:hover { padding-left: .35rem; }
.sch-mentored__title { font-weight: 700; font-size: .95rem; }
.sch-mentored__item:hover .sch-mentored__title { color: var(--sch-accent-dark); }
.sch-mentored__who { font-size: .85rem; color: var(--sch-muted); }
.sch-mentored__meta { font-size: .78rem; color: var(--sch-muted); letter-spacing: .01em; }

/* Baris "Dibimbing: …" pada kartu prestasi. */
.sch-card__mentor { margin-top: .6rem; font-size: .8rem; color: var(--sch-muted); }
.sch-card__mentor svg { width: .85rem; height: .85rem; vertical-align: -.12em; margin-right: .2rem; }
@media (max-width: 640px) {
  .sch-profile-hero { align-items: flex-start; flex-direction: column; padding: 1.25rem; }
  .sch-profile-hero .sch-person__photo { width: 6rem; height: 6rem; }
  .sch-profile-grid { grid-template-columns: 1fr; }
  .sch-contact-sidebar { grid-template-columns:1fr; }
}

/* Emas ditetapkan sebagai AKSEN KONSISTEN di atas latar teal (permintaan
   user) — bukan cuma untuk .sch-card__meta di atas. Bug pemicu: `.sch-btn`
   solid memakai var(--sch-accent-dark) sebagai latar, warna yang SAMA
   PERSIS dengan latar .sch-panel/.sch-card/.sch-notice di mode terang
   (lihat pembalikan warna kartu) — tombol jadi menyatu tak terlihat dengan
   latarnya sendiri, hanya teksnya yang tampak mengambang. Diperbaiki
   dengan menimpa tombol solid jadi emas SETIAP KALI ia duduk di dalam
   kartu/panel/notice berwarna, dan tombol ghost mengikuti pola invert yang
   sudah ada (border/isi putih) dengan hover mengarah ke emas supaya kedua
   gaya tombol konsisten satu aksen. Di mode gelap kartu jadi putih, jadi
   tombol solid dikembalikan ke teal biasa — emas di atas putih polos
   kurang menonjol sebagai aksen dibanding di atas teal. */
.sch-card .sch-btn:not(.sch-btn--ghost),
.sch-panel .sch-btn:not(.sch-btn--ghost),
.sch-notice .sch-btn:not(.sch-btn--ghost) {
  background: #fbbf24;
  border-color: #fbbf24;
  color: #102a2a;
}
.sch-card .sch-btn:not(.sch-btn--ghost):hover,
.sch-panel .sch-btn:not(.sch-btn--ghost):hover,
.sch-notice .sch-btn:not(.sch-btn--ghost):hover {
  background: #fcd34d;
  border-color: #fcd34d;
}
/* Emas TETAP emas di mode gelap — kartu jadi putih di mode gelap, dan emas
   solid + teks tinta gelap justru kontras bagus di atas putih. Tidak ada
   lagi "kembali ke teal di mode gelap": aksen konsisten di kedua mode
   (permintaan user). */
:root[data-theme="dark"] .sch-card .sch-btn:not(.sch-btn--ghost),
:root[data-theme="dark"] .sch-panel .sch-btn:not(.sch-btn--ghost),
:root[data-theme="dark"] .sch-notice .sch-btn:not(.sch-btn--ghost) {
  background: #fbbf24;
  border-color: #fbbf24;
  color: #102a2a;
}
:root[data-theme="dark"] .sch-card .sch-btn:not(.sch-btn--ghost):hover,
:root[data-theme="dark"] .sch-panel .sch-btn:not(.sch-btn--ghost):hover,
:root[data-theme="dark"] .sch-notice .sch-btn:not(.sch-btn--ghost):hover {
  background: #fcd34d;
  border-color: #fcd34d;
}
/* Tombol ghost di dalam kartu teal (mode terang): bingkai & teks putih,
   hover mengarah ke emas — satu keluarga aksen dengan tombol solid. */
.sch-card .sch-btn--ghost, .sch-panel .sch-btn--ghost, .sch-notice .sch-btn--ghost {
  color: #fff;
  border-color: rgba(255, 255, 255, .35);
}
.sch-card .sch-btn--ghost:hover, .sch-panel .sch-btn--ghost:hover, .sch-notice .sch-btn--ghost:hover {
  background: rgba(251, 191, 36, .16);
  color: #fbbf24;
  border-color: #fbbf24;
}
/* Mode gelap: kartu putih → tombol ghost pakai tinta gelap + bingkai gelap
   tipis (bukan putih-di-atas-putih), hover mengarah ke emas. */
:root[data-theme="dark"] .sch-card .sch-btn--ghost,
:root[data-theme="dark"] .sch-panel .sch-btn--ghost,
:root[data-theme="dark"] .sch-notice .sch-btn--ghost {
  color: #102a2a;
  border-color: rgba(16, 42, 42, .22);
}
:root[data-theme="dark"] .sch-card .sch-btn--ghost:hover,
:root[data-theme="dark"] .sch-panel .sch-btn--ghost:hover,
:root[data-theme="dark"] .sch-notice .sch-btn--ghost:hover {
  background: rgba(161, 98, 7, .12);
  color: #a16207;
  border-color: #a16207;
}

/* ============================================================
   BERANDA — struktur ala "villa-agency" + elemen/animasi
   "clearwave". Grid & token warna situs dipertahankan.
   ============================================================ */

/* offset jangkar supaya heading tidak ketutup header sticky */
.sch-anchor { display: block; height: 0; scroll-margin-top: 6rem; }

/* ── 1. BANNER (pola ".main-banner" villa-agency) ───────────────
   Section latar-gambar (background-size:cover). TINGGINYA DITENTUKAN
   PADDING, bukan 100vh. Header situs adalah bilah normal DI ATAS section
   ini (tidak menumpuk/transparan). */
.sch-hero {
  position: relative;
  overflow: hidden;
  background: #0b332f;
  color: #fff;
  /* Saat pertama dibuka (scroll 0), banner mengisi tepat area di bawah
     header sampai tepi bawah viewport — header tetap bilah normal DI ATAS
     banner, tidak menumpuk. --sch-header-h diukur nyata oleh js/nav.js
     (offsetTop banner); 11.5rem = cadangan bila JS mati. Lantai 32rem
     supaya di layar pendek/landscape tetap proporsional. */
  /* Hero MULAI persis di bawah bilah waktu salat (.sch-topbar) — hanya
     setinggi topbar yang diberi jarak, BUKAN header penuh. Kapsul masthead
     + bilah navigasi mengambang DI ATAS hero (tidak mendorongnya turun).
     Tinggi = sisa viewport di bawah topbar (jadi BUKAN 100vh penuh).
     --sch-topbar-h diukur nyata oleh js/nav.js; 2.75rem cadangan. */
  margin-top: var(--sch-topbar-h, 2.75rem);
  min-height: max(28rem, calc(100svh - var(--sch-topbar-h, 2.75rem)));
  display: flex;
  /* Konten didorong ke bawah (bukan tengah) — sisi bawah banner terisi,
     lebih enak dilihat daripada blok teks melayang di tengah. */
  align-items: flex-end;
}
/* latar: gambar tunggal (via inline style) ATAU carousel foto */
.sch-hero__bg {
  position: absolute;
  inset: 0;
  z-index: 0;
  background-position: center;
  background-repeat: no-repeat;
  background-size: cover;
}
/* tanpa foto → gradasi teal (bentuk banner tetap sama seperti villa) */
.sch-hero--flat {
  background:
    radial-gradient(120% 90% at 15% 0%, #12615a 0%, transparent 55%),
    radial-gradient(110% 85% at 100% 100%, rgba(161, 98, 7, .16) 0%, transparent 52%),
    linear-gradient(155deg, #0d413c 0%, #0f524b 48%, #0a302c 100%);
}
/* scrim gelap supaya teks putih selalu terbaca di atas foto apa pun */
.sch-hero__scrim {
  position: absolute;
  inset: 0;
  z-index: 1;
  background: linear-gradient(90deg, rgba(4, 20, 18, .74) 0%, rgba(4, 20, 18, .5) 45%, rgba(4, 20, 18, .28) 100%);
}
.sch-hero--flat .sch-hero__scrim { background: rgba(4, 20, 18, .32); }

/* carousel sebagai latar: buang bingkai kartu, isi seluruh section */
.sch-carousel--hero {
  position: absolute;
  inset: 0;
  z-index: 0;
  border-radius: 0;
  box-shadow: none;
  background: #0b332f;
}
.sch-carousel--hero,
.sch-carousel--hero .sch-carousel__track,
.sch-carousel--hero .sch-slide { height: 100%; }
.sch-carousel--hero .sch-slide { aspect-ratio: auto; min-height: 0; }
.sch-carousel--hero .sch-slide__img { width: 100%; height: 100%; object-fit: cover; }
/* isi banner — sejajar kiri seperti villa, tinggi section datang dari sini */
.sch-hero__inner {
  position: relative;
  z-index: 2;
  width: 100%;
  /* konten menempel bawah (align-items:flex-end di .sch-hero); padding-bawah
     ini jarak dari tepi bawah viewport supaya teks tidak mepet. */
  padding: clamp(2.5rem, 6vw, 4rem) 0 clamp(4rem, 14vh, 8.5rem);
}
.sch-hero__content { max-width: 44rem; }

/* Kontrol carousel: dot (kiri) + panah (kanan) pada satu baris, di dalam
   .sch-hero__inner (z-index 2, DI ATAS scrim) supaya benar-benar bisa
   diklik — dulu di dalam .sch-carousel--hero (z-index 0) tertutup scrim.
   Selebar kotak konten .max-w-7xl, sejajar dengan teks & tombol. */
.sch-hero__controls {
  position: absolute;
  left: 50%;
  transform: translateX(-50%);
  bottom: clamp(1rem, 4vw, 1.75rem);
  width: min(80rem, 100%);
  padding: 0 1.5rem;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  pointer-events: none;
}
@media (min-width: 1024px) { .sch-hero__controls { padding: 0 2rem; } }

.sch-hero__controls .sch-carousel__dots {
  display: flex;
  align-items: center;
  gap: .45rem;
  margin: 0;
  padding: 0;
  min-height: 0;
  border: 0;
  background: none;
  -webkit-backdrop-filter: none;
          backdrop-filter: none;
  pointer-events: none;
}
.sch-hero__controls .sch-carousel__dot {
  pointer-events: auto;
  width: 6px;
  height: 6px;
  border: 0;
  background: rgba(255, 255, 255, .4);
  transition: width .25s ease, background .25s ease;
}
.sch-hero__controls .sch-carousel__dot[aria-current="true"] { width: 20px; background: #fff; }

.sch-hero__arrows {
  display: flex;
  gap: .5rem;
  pointer-events: none;
}
.sch-hero__arrow {
  pointer-events: auto;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2.75rem;
  height: 2.75rem;
  border: 1px solid rgba(255, 255, 255, .45);
  border-radius: 999px;
  color: #fff;
  background: rgba(8, 30, 27, .4);
  -webkit-backdrop-filter: blur(6px);
          backdrop-filter: blur(6px);
  cursor: pointer;
  transition: background .18s ease, border-color .18s ease, transform .18s ease;
}
.sch-hero__arrow svg { width: 1.25rem; height: 1.25rem; }
.sch-hero__arrow:hover { background: rgba(255, 255, 255, .22); border-color: rgba(255, 255, 255, .85); }
.sch-hero__arrow:active { transform: scale(.94); }
@media (max-width: 640px) {
  .sch-hero__arrow { width: 2.5rem; height: 2.5rem; }
}

.sch-hero__title {
  font-family: var(--sch-display, inherit);
  font-weight: 700;
  font-size: var(--sch-fs-hero);
  line-height: 1.12;
  letter-spacing: -.02em;
  color: #fff;
  text-wrap: balance;
}
.sch-hero__lead {
  margin-top: 1.15rem;
  font-size: 1.05rem;
  line-height: 1.65;
  color: rgba(255, 255, 255, .88);
  max-width: 34rem;
}
.sch-hero__actions {
  margin-top: 1.75rem;
  display: flex;
  flex-wrap: wrap;
  gap: .75rem;
}
.sch-btn--lg { padding: .8rem 1.5rem; font-size: .95rem; }
.sch-btn--ghost-light {
  background: rgba(255, 255, 255, .12);
  color: #fff;
  border: 1px solid rgba(255, 255, 255, .4);
}
.sch-btn--ghost-light:hover {
  background: rgba(255, 255, 255, .22);
  color: #fff;
  border-color: rgba(255, 255, 255, .7);
}
@media (max-width: 640px) {
  .sch-hero__scrim { background: rgba(4, 20, 18, .6); }
  .sch-hero__title { font-size: clamp(1.9rem, 8vw, 2.5rem); }
  .sch-hero__lead { font-size: .98rem; }
}
/* Ponsel sempit: dua tombol CTA hero lebih rapi selebar penuh, sejajar,
   daripada membungkus jadi dua baris yang tak rata. */
@media (max-width: 400px) {
  .sch-hero__actions { flex-direction: column; align-items: stretch; }
  .sch-hero__actions .sch-btn { width: 100%; justify-content: center; }
}

/* ── Video + data — .sch-videobtn (tombol facade video, dipakai) ──── */
.sch-videobtn {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: .9rem;
  width: 100%;
  aspect-ratio: 16 / 9;
  border: 0;
  border-radius: var(--sch-radius-lg);
  background: linear-gradient(150deg, var(--sch-accent-dark), var(--sch-accent));
  color: #fff;
  cursor: pointer;
  overflow: hidden;
  transition: transform .8s cubic-bezier(.16,1,.3,1), box-shadow .8s cubic-bezier(.16,1,.3,1);
  box-shadow: var(--sch-shadow);
}
.sch-videobtn:hover { transform: scale(1.012); box-shadow: 0 18px 44px -24px rgba(15,61,58,.55); }
.sch-videobtn--empty { cursor: default; opacity: .92; }
.sch-videobtn--empty:hover { transform: none; }
.sch-videobtn__play {
  width: 4rem;
  height: 4rem;
  display: grid;
  place-items: center;
  border-radius: 999px;
  background: rgba(255,255,255,.16);
  border: 1px solid rgba(255,255,255,.5);
}
.sch-videobtn__play svg { width: 1.75rem; height: 1.75rem; margin-left: .2rem; }
.sch-videobtn__label { font-weight: 600; font-size: .95rem; }

/* (.sch-mediastats / .sch-statgrid dari iterasi beranda lama dihapus — video
   kini memakai .sch-videowrap + .sch-statbar, lihat blok penyesuaian villa
   di bawah.) */

/* ── 5. Jenjang — lihat blok ".sch-bestdeal" (pola villa "Best Deal") di
   bawah, dekat penyesuaian layout villa. Kelas .sch-tabs__* lama dihapus. */
@keyframes schTabIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }

/* ── 7. Testimoni — CAROUSEL KELOMPOK ("beberapa testimoni dalam 1 kotak") ──
   Tiap slide = satu kotak berisi ~5 kartu bertata-letak masonry (CSS
   columns) yang tingginya bervariasi menurut panjang pesan. Navigasi
   panah/titik/geser + putar otomatis lewat .sch-carousel + initCarousel
   (js/school.js). */
.sch-testi-actions { display: flex; margin-bottom: 1.75rem; }

.sch-carousel--testi {
  background: transparent;
  border-radius: 0;
  box-shadow: none;
  overflow: hidden;
  touch-action: pan-y;
}
.sch-carousel--testi .sch-carousel__viewport {
  overflow: hidden;
  border-radius: var(--sch-radius-lg);
}
.sch-carousel--testi .sch-carousel__track {
  display: flex;
  align-items: stretch;
  transition: transform .6s cubic-bezier(.16, 1, .3, 1);
}
/* Tiap slide = grid rapi 3 kolom (bukan masonry `columns` yang tak rata).
   `.5rem` padding memberi ruang bayangan kartu di dalam area klip. */
.sch-carousel--testi .sch-testi-slide {
  flex: 0 0 100%;
  min-width: 100%;
  aspect-ratio: auto;
  min-height: 0;
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  align-items: stretch;
  align-content: start;
  gap: 1.25rem;
  padding: .5rem;
  overflow: hidden;
}
/* Layar sedang & kecil: satu kolom, ketiga kartu ditumpuk. Tidak ada baris
   2+1 yang timpang; navigasi antar-slide tetap lewat panah/titik. */
@media (max-width: 980px) {
  .sch-carousel--testi .sch-testi-slide { grid-template-columns: 1fr; gap: 1rem; }
}

/* Kartu: mengisi penuh tinggi sel grid supaya sebaris selalu sama tinggi. */
.sch-testi-card {
  display: flex;
  flex-direction: column;
  width: 100%;
  height: 100%;
  margin: 0;
  background: var(--sch-card-bg);
  border: 1px solid var(--sch-line);
  border-radius: var(--sch-radius-lg);
  padding: 1.5rem 1.6rem;
  box-shadow: 0 8px 28px -26px rgba(15, 61, 58, .5);
}
.sch-testi-card__stars { color: var(--sch-gold); letter-spacing: .15em; font-size: .85rem; }
.sch-testi-card__quote {
  margin: .7rem 0 1.25rem;
  font-style: italic;
  line-height: 1.7;
  color: var(--sch-ink);
  font-size: .92rem;
  /* Batasi tinggi kutipan agar kartu tidak melonjak karena satu pesan panjang. */
  display: -webkit-box;
  -webkit-line-clamp: 7;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
@media (max-width: 980px) {
  .sch-testi-card__quote { -webkit-line-clamp: 5; }
}
.sch-testi-card__by {
  margin-top: auto;
  display: flex;
  align-items: center;
  gap: .75rem;
}
.sch-testi-card__avatar {
  flex-shrink: 0;
  width: 2.5rem;
  height: 2.5rem;
  display: grid;
  place-items: center;
  border-radius: 999px;
  object-fit: cover;
  background: var(--sch-accent-soft);
  color: var(--sch-accent-dark);
  border: 2px solid color-mix(in srgb, var(--sch-accent) 24%, transparent);
  font-weight: 700;
  font-size: .8rem;
}
.sch-testi-card__name { display: block; font-weight: 600; font-size: .9rem; color: var(--sch-ink); }
.sch-testi-card__role { display: block; font-size: .78rem; color: var(--sch-muted); margin-top: 1px; }

/* Kontrol carousel di BAWAH track (panah + titik), bukan menumpuk kartu. */
.sch-carousel--testi .sch-carousel__controls {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 1rem;
  margin-top: 1.5rem;
}
.sch-carousel--testi .sch-carousel__btn {
  position: static;
  transform: none;
  width: 2.5rem;
  height: 2.5rem;
  background: var(--sch-card-bg);
  color: var(--sch-ink);
  border: 1px solid var(--sch-line);
  box-shadow: 0 8px 24px -20px rgba(15, 61, 58, .42);
  -webkit-backdrop-filter: none;
          backdrop-filter: none;
}
.sch-carousel--testi .sch-carousel__btn:hover {
  background: var(--sch-surface);
  border-color: var(--sch-accent);
  color: var(--sch-accent-dark);
}
.sch-carousel--testi .sch-carousel__btn svg { width: 1.1rem; height: 1.1rem; }
.sch-carousel--testi .sch-carousel__btn--next svg { transform: rotate(180deg); }
.sch-carousel--testi .sch-carousel__dots {
  position: static;
  transform: none;
  background: transparent;
  border: 0;
  padding: 0;
  min-height: 0;
  -webkit-backdrop-filter: none;
          backdrop-filter: none;
}
.sch-carousel--testi .sch-carousel__dot { background: var(--sch-line); }
.sch-carousel--testi .sch-carousel__dot[aria-current="true"] {
  background: var(--sch-accent);
  width: 1.75rem;
  border-radius: 999px;
}

/* Modal generik (dipakai formulir "Bagikan cerita") — pola sama dengan
   .sch-prayer-modal. */
.sch-modal[hidden] { display: none; }
.sch-modal {
  position: fixed;
  inset: 0;
  z-index: 120;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 1.25rem;
  overflow-y: auto;
  background: rgba(2, 15, 14, .7);
}
.sch-modal__panel {
  position: relative;
  width: min(100%, 34rem);
  margin: auto;
  padding: 2rem;
  border: 1px solid var(--sch-line);
  border-radius: var(--sch-radius-lg);
  background: var(--sch-card-bg);
  color: var(--sch-ink);
  box-shadow: 0 1.5rem 4rem rgba(0, 0, 0, .25);
}
.sch-modal__close {
  position: absolute;
  top: .65rem;
  right: .8rem;
  width: 2rem;
  height: 2rem;
  border: 0;
  border-radius: 999px;
  background: transparent;
  color: var(--sch-muted);
  font-size: 1.5rem;
  line-height: 1;
  cursor: pointer;
}
.sch-modal__close:hover { background: var(--sch-surface); color: var(--sch-ink); }

/* Kualitas hidup semua modal: backdrop blur + animasi masuk halus. */
.sch-modal { background: rgba(2, 15, 14, .78); -webkit-backdrop-filter: blur(3px); backdrop-filter: blur(3px); }
.sch-modal:not([hidden]) .sch-modal__panel { animation: sch-modal-in .22s cubic-bezier(.16, 1, .3, 1); }
@keyframes sch-modal-in { from { opacity: 0; transform: translateY(14px) scale(.985); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) { .sch-modal:not([hidden]) .sch-modal__panel { animation: none; } }

/* ── Modal login / daftar / lupa sandi: tampilan lebih matang ── */
#sch-login-modal .sch-modal__panel { width: min(100%, 27rem); padding: 2.4rem 1.75rem 1.75rem; overflow: hidden; }
#sch-login-modal .sch-modal__panel::before {
  content: ""; position: absolute; inset: 0 0 auto 0; height: 4px;
  background: linear-gradient(90deg, var(--sch-accent), var(--sch-gold));
}
/* Tombol tutup: lingkaran 2.25rem sejajar dengan judul "Masuk", inset tetap
   di pojok kanan-atas panel (blok umum di bawah membuatnya `float`+`sticky`
   yang bikin posisinya melompat). */
#sch-login-modal .sch-modal__close {
  position: absolute;
  top: .9rem;
  right: .9rem;
  float: none;
  display: grid;
  place-items: center;
  width: 2.25rem;
  height: 2.25rem;
  font-size: 1.35rem;
  padding: 0;
}
#sch-login-modal [data-login-view] > h2 { font-size: 1.4rem; letter-spacing: -.01em; }
#sch-login-modal [data-login-view] > p  { line-height: 1.55; }
#sch-login-modal .sch-field { margin-bottom: .9rem; }
#sch-login-modal .sch-input { padding: .8rem 1rem; font-size: .95rem; }
#sch-login-modal .sch-input:focus { box-shadow: 0 0 0 3px rgba(20, 184, 166, .16); }
#sch-login-modal form > .sch-btn {
  width: 100%; justify-content: center; padding: .8rem 1rem; margin-top: .4rem; font-size: .95rem;
}
#sch-login-modal .sch-closer__form-note {
  margin-top: 1rem; padding-top: .85rem; border-top: 1px solid var(--sch-line);
  display: flex; flex-wrap: wrap; justify-content: center; align-items: center;
  gap: .4rem 1rem; font-size: .82rem; text-align: center;
}
#sch-login-modal .sch-closer__form-note a { color: var(--sch-accent-dark); font-weight: 600; text-decoration: none; }
#sch-login-modal .sch-closer__form-note a:hover { text-decoration: underline; }
#sch-login-modal .sch-captcha {
  padding: .75rem; border: 1px solid var(--sch-line); border-radius: var(--sch-radius); background: var(--sch-surface);
}
#sch-login-modal .sch-captcha .sch-label { margin-bottom: .5rem; }
#sch-login-modal [data-login-view="done"] { padding-top: .5rem; }
#sch-login-modal [data-login-view="done"]::before {
  content: ""; display: block; width: 3rem; height: 3rem; margin: 0 auto 1rem;
  border-radius: 999px; background: var(--sch-accent-soft)
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%230f766e' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E")
    center / 1.4rem no-repeat;
}
/* Aksi di layar "Berhasil masuk": dua tombol utama DITUMPUK selebar penuh,
   lalu "Tutup" sebagai tautan teks halus di bawah — rapi, tidak berantakan. */
#sch-login-modal [data-login-choice]:not([hidden]) {
  display: flex;
  flex-direction: column;
  gap: .7rem;
  margin-top: 1.5rem;
}
#sch-login-modal [data-login-choice] .sch-btn {
  width: 100%;
  justify-content: center;
  margin: 0;
}
#sch-login-modal [data-login-done-close]:not([hidden]) {
  display: inline-flex;
  margin: 1.5rem auto 0;
  padding: .4rem .6rem;
  border: 0;
  min-height: 0;
  background: none;
  color: var(--sch-muted);
  font-weight: 600;
  font-size: .82rem;
  text-decoration: underline;
  text-underline-offset: 3px;
}
#sch-login-modal [data-login-done-close]:not([hidden]):hover { color: var(--sch-accent-dark); background: none; }
.sch-testi-form__err { margin: .25rem 0 1rem; color: #dc2626; font-size: .85rem; font-weight: 600; }
.sch-testi-form__err[hidden] { display: none; }

/* ── 9. Kontak penutup ─────────────────────────────────────── */
.sch-closer {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 2.5rem;
  padding: 2.5rem;
  border: 1px solid var(--sch-line);
  border-radius: var(--sch-radius-lg);
  background: var(--sch-surface);
}
/* Chip WhatsApp & email boleh sebaris bila muat (keduanya pendek);
   chip alamat (--static) selalu ambil baris penuh. */
.sch-closer__direct { margin-top: 1.75rem; display: flex; flex-wrap: wrap; gap: .6rem; }
.sch-closer__direct .sch-closer__chip--static { flex-basis: 100%; }
.sch-closer__chip {
  display: inline-flex;
  align-items: center;
  gap: .6rem;
  padding: .7rem 1rem;
  /* Kotak dengan sudut sedikit membulat — bukan pil penuh (buruk saat
     chip alamat jadi banyak baris). */
  border-radius: .75rem;
  border: 1px solid var(--sch-line);
  background: var(--sch-card-bg);
  color: var(--sch-ink);
  font-weight: 600;
  font-size: .875rem;
  text-decoration: none;
  transition: border-color .3s, color .3s, transform .3s;
  width: fit-content;
  max-width: 100%;
}
.sch-closer__chip svg { width: 1.15rem; height: 1.15rem; flex-shrink: 0; color: var(--sch-accent); }
.sch-closer__chip:hover { border-color: var(--sch-accent); color: var(--sch-accent-dark); transform: translateY(-1px); }
.sch-closer__chip span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.sch-closer__form {
  display: flex;
  flex-direction: column;
  gap: 1rem;
  background: var(--sch-card-bg);
  border: 1px solid var(--sch-line);
  border-radius: var(--sch-radius);
  padding: 1.75rem;
}
/* Di dalam form penutup jarak antar-field diatur oleh `gap` flex — buang
   margin-bottom bawaan `.sch-field` supaya tidak menumpuk jadi jarak ganda. */
.sch-closer__form .sch-field { margin-bottom: 0; }
/* Kolom "Pertanyaan Anda" memanjang mengisi tinggi sisa form supaya kolom
   kanan seimbang dengan kolom info kiri (jam layanan + peta) — tidak lagi
   pendek menggantung. Ada tinggi minimum kalau kolom kiri kebetulan pendek.
   (`.sch-closer{align-items:stretch}` di blok "9. Kontak" di bawah.) */
.sch-closer__form-msg { flex: 1; display: flex; flex-direction: column; }
.sch-closer__form-msg textarea {
  flex: 1;
  min-height: 12rem;
  resize: vertical;
}
/* Nama + Email sejajar di satu baris pada layar cukup lebar; menumpuk di bawahnya. */
.sch-closer__form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; }
@media (max-width: 560px) { .sch-closer__form-row { grid-template-columns: 1fr; } }
/* Tombol submit form kontak: lebar penuh TAPI teks tetap di tengah. */
.sch-closer__form .sch-btn { margin-top: .25rem; width: 100%; justify-content: center; text-align: center; }
.sch-closer__form-err { margin: .25rem 0 0; color: #dc2626; font-size: .85rem; font-weight: 600; }
.sch-closer__form-err[hidden] { display: none; }
.sch-closer__form-note { margin: .55rem 0 0; font-size: .78rem; line-height: 1.5; color: var(--sch-muted); }
.sch-closer-wa__preview {
  white-space: pre-wrap;
  word-break: break-word;
  margin: 0;
  background: var(--sch-surface);
  border: 1px solid var(--sch-line);
  border-radius: var(--sch-radius);
  padding: .9rem 1rem;
  font-family: inherit;
  font-size: .85rem;
  line-height: 1.6;
  color: var(--sch-ink);
  max-height: 15rem;
  overflow: auto;
}
.sch-closer-wa__actions { display: flex; flex-wrap: wrap; gap: .6rem; margin-top: 1rem; }
.sch-closer-wa__actions .sch-btn { display: inline-flex; align-items: center; gap: .4rem; }

/* CAPTCHA di modal daftar / lupa kata sandi */
.sch-captcha__row { display: flex; align-items: center; gap: .6rem; }
.sch-captcha__img {
  display: block;
  width: 168px;
  height: 56px;
  border: 1px solid var(--sch-line);
  border-radius: .6rem;
  background: #eef4f3;
}
.sch-captcha__refresh {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2.25rem;
  height: 2.25rem;
  border: 1px solid var(--sch-line);
  border-radius: 999px;
  background: var(--sch-card-bg);
  color: var(--sch-ink);
  cursor: pointer;
  flex: none;
}
.sch-captcha__refresh:hover { border-color: var(--sch-accent); color: var(--sch-accent-dark); }
/* Gambar CAPTCHA berlatar terang — di mode gelap dibalik supaya tidak jadi
   kotak putih menyilaukan di atas panel modal gelap. */
:root[data-theme="dark"] .sch-captcha__img { filter: invert(1) hue-rotate(180deg) brightness(.95); }
/* Di bawah lebar desktop, kolom info + form kontak ditumpuk — 2 kolom di
   lebar tablet (~900px) membuat form terlalu sempit: label "Nama lengkap *"
   pecah baris, field mungil, baris Nama+Email berimpit. */
@media (max-width: 1024px) {
  .sch-closer { grid-template-columns: 1fr; gap: 1.75rem; padding: 1.75rem; }
}
@media (max-width: 720px) {
  .sch-closer { padding: 1.5rem; }
  .sch-closer__form-row { grid-template-columns: 1fr; }
}

/* honeypot bersama kontak */
.sch-hp { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }

/* ============================================================
   BERANDA — penyesuaian layout agar lebih setia ke struktur
   "villa-agency": featured = split gambar/teks, video menonjol
   + baris angka, tab = kolom kiri + panel kanan berisi info
   table, kontak = form kiri + info & peta kanan.
   ============================================================ */

/* (.sch-eyebrow didefinisikan satu kali di dekat .sch-card--link.) */

/* ── 3. Keunggulan — pola villa "Featured" (3 kolom) ──────────
   Kiri: gambar + badge bulat menimpa pojok. Tengah: eyebrow + judul +
   paragraf + accordion keunggulan. Kanan: kartu fakta ringkas
   (pola ".info-table" villa), bergaya clearwave-clean. */
/* Pola villa "featured": gambar KIRI membentang penuh tinggi kolom kanan
   (judul+intro+akordeon di atas, strip fakta + tombol di bawah). Gambar
   yang span 2 baris otomatis setinggi konten kanan → tidak ada ruang
   kosong menggantung, tidak ada kolom ke-3 yang timpang. */
/* MOBILE-FIRST (pola situs induk iluztar): base = tumpuk 1 kolom
   (gambar → teks → strip fakta). Grid 2 kolom "gambar kiri membentang,
   teks + fakta kanan" hanya ditambahkan di ≥1025px. Membalik urutan ini
   dari "desktop dulu lalu di-collapse" menghilangkan seluruh kelas bug
   "lupa satu breakpoint → mobile rusak". */
.sch-featured {
  display: grid;
  grid-template-columns: 1fr;
  grid-template-areas: "media" "text" "aside";
  gap: 1.75rem;
  align-items: stretch;
}
.sch-featured__media { grid-area: media; }
.sch-featured__text  { grid-area: text; }
.sch-featured__aside { grid-area: aside; }
.sch-featured__media {
  position: relative;   /* WAJIB: menampung .sch-ph (position:absolute; inset:0) */
  aspect-ratio: 16 / 10;
  background: var(--sch-surface-deep);
  border-radius: var(--sch-radius-lg);
  overflow: hidden;
}
@media (min-width: 1025px) {
  /* KIRI = gambar (atas) + strip fakta 2×2 & tombol "Tentang sekolah" (bawah,
     di sebelah kanan strip) — mengisi ruang di bawah gambar, tak lagi
     menggantung sendiri. KANAN = judul + intro + akordeon (span 2 baris). */
  .sch-featured {
    grid-template-columns: minmax(0, 1fr) minmax(0, 1.08fr);
    grid-template-areas:
      "media text"
      "aside text";
    column-gap: 3rem;
    row-gap: 1.5rem;
    align-items: start;
  }
  .sch-featured__media {
    align-self: start;
    aspect-ratio: 4 / 3.1;   /* landscape, tak menggantung; tak meregang dgn akordeon */
    height: auto;
    max-height: none;
  }
}
.sch-featured__media > img,
.sch-featured__media > .sch-ph { border-radius: var(--sch-radius-lg); }
.sch-featured__media > img {
  width: 100%; height: 100%;
  object-fit: cover; display: block;
  box-shadow: var(--sch-shadow);
}
/* Kolom kanan baris 2: strip fakta lalu tombol "Tentang sekolah" di bawahnya. */
.sch-featured__aside {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 1.1rem;
}
.sch-featured__cta { align-self: flex-start; flex: none; }
.sch-featured__cta svg { width: 1.05rem; height: 1.05rem; flex: none; }

.sch-featured__title {
  margin-top: .75rem;
  font-size: var(--sch-fs-h2);
  font-weight: 700;   /* konsisten dengan judul section lain (sch_section_intro) */
  line-height: 1.2;
  color: var(--sch-ink);
  text-wrap: balance;
}
/* Kalimat singkat setelah judul (intro section) → rata tengah. Deskripsi
   PANJANG (.sch-bestdeal__desc, artikel, kutipan) tetap justify. */
/* Rata KIRI di desktop supaya sinkron dengan eyebrow + judul section ini
   yang juga rata kiri (kolom .sch-featured__text `align-items:flex-start`).
   Di ≤1024px blok "(e)" di bawah memusatkannya, mengikuti judul yang ikut
   ke tengah — jadi tetap konsisten di kedua sisi breakpoint. */
.sch-featured__intro { margin-top: 1rem; color: var(--sch-muted); line-height: 1.7; text-align: left; }

/* Accordion (native <details>) — clearwave-clean: strip bergaris tipis,
   tanda +/− sendiri, chevron bawaan disembunyikan. */
.sch-acc { margin-top: 1.5rem; border-top: 1px solid var(--sch-line); }
.sch-acc__item { border-bottom: 1px solid var(--sch-line); }
.sch-acc__q {
  display: flex;
  align-items: center;
  gap: .75rem;
  padding: 1rem .25rem;
  list-style: none;
  cursor: pointer;
  font-weight: 600;
  color: var(--sch-ink);
}
.sch-acc__q::-webkit-details-marker { display: none; }
.sch-acc__icon {
  flex: none;
  width: 2rem; height: 2rem;
  display: grid; place-items: center;
  border-radius: .6rem;
  background: var(--sch-accent-soft);
  color: var(--sch-accent-dark);
}
.sch-acc__icon svg { width: 1.05rem; height: 1.05rem; }
.sch-acc__q-text { flex: 1; }
/* Penanda: chevron yang berputar mulus (bukan +/− yang "meloncat"). */
.sch-acc__mark {
  flex: none;
  width: .58rem;
  height: .58rem;
  margin-right: .3rem;
  border-right: 2px solid var(--sch-accent-dark);
  border-bottom: 2px solid var(--sch-accent-dark);
  transform: rotate(45deg);
  transition: transform .3s cubic-bezier(.16, 1, .3, 1);
}
.sch-acc__item[open] .sch-acc__q { color: var(--sch-accent-dark); }
.sch-acc__item[open] .sch-acc__mark { transform: rotate(-135deg); }
/* Isi jawaban meluncur halus saat dibuka. */
.sch-acc__item[open] .sch-acc__a { animation: schAccIn .28s cubic-bezier(.16, 1, .3, 1); }
@keyframes schAccIn { from { opacity: 0; transform: translateY(-.35rem); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) {
  .sch-acc__mark { transition: none; }
  .sch-acc__item[open] .sch-acc__a { animation: none; }
}
.sch-acc__a {
  padding: 0 .25rem 1.1rem 3.5rem;
  color: var(--sch-muted);
  line-height: 1.6;
  font-size: .92rem;
}

/* Strip fakta — sel mengalir (auto-fit): 4 sebaris saat lebar, 2 saat sedang,
   1 saat sempit. Garis pemisah vertikal antar-sel. */
.sch-featured__info {
  align-self: stretch;
  border: 1px solid var(--sch-line);
  border-radius: var(--sch-radius-lg);
  background: var(--sch-card-bg);
  box-shadow: var(--sch-shadow);
  padding: 1.15rem .25rem;
}
/* Strip fakta = SATU kolom vertikal (baris ikon + nilai/label), di semua
   ukuran. Versi 2×2 / 1×4 lama membuat sel terlalu sempit sehingga nilai
   seperti "Akreditasi A" atau daftar jenjang membungkus di tengah frasa. */
.sch-featured__info ul {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: 1fr;
}
.sch-featured__info li {
  display: flex;
  align-items: center;
  gap: .75rem;
  padding: .7rem 1.15rem;
  border-bottom: 1px solid var(--sch-line);
}
.sch-featured__info li:last-child { border-bottom: 0; }
.sch-featured__fact-icon {
  flex: none;
  width: 2.5rem; height: 2.5rem;
  display: grid; place-items: center;
  border-radius: .7rem;
  background: var(--sch-accent-soft);
  color: var(--sch-accent-dark);
}
.sch-featured__fact-icon svg { width: 1.25rem; height: 1.25rem; }
.sch-featured__fact-body { display: flex; flex-direction: column; min-width: 0; }
.sch-featured__fact-value {
  font-family: var(--sch-display, inherit);
  font-size: 1.1rem;
  font-weight: 700;
  color: var(--sch-ink);
  line-height: 1.2;
  white-space: nowrap;      /* nilai selalu 1 baris; frasa panjang ada di label */
}
.sch-featured__fact-label {
  margin-top: .15rem;
  font-size: .8rem;
  color: var(--sch-muted);
  line-height: 1.35;
}
/* Saat sel membungkus (auto-fit), beri jarak antar-baris supaya tidak
   berdempet; garis kanan yang menggantung di ujung baris tak mengganggu. */
.sch-featured__info ul { row-gap: .35rem; }
/* Ponsel: satu kolom penuh per fakta. Di 2 kolom (~360–560px) nilai seperti
   "Akreditasi A" / "3 jenjang" terpaksa membungkus di tengah frasa. */
@media (max-width: 620px) {
  .sch-featured__info ul { grid-template-columns: 1fr; row-gap: 0; }
  .sch-featured__info li { border-right: 0; border-bottom: 1px solid var(--sch-line); padding: .85rem 1.4rem; }
  .sch-featured__info li:last-child { border-bottom: 0; }
  .sch-featured__fact-value { white-space: normal; }
}

@media (max-width: 720px) {
  .sch-acc__a { padding-left: .25rem; }
}

/* §2 "Yang membuat kami berbeda": pada desktop (≥1025px, saat section jadi
   2 kolom) akordeon ini TIDAK dilipat — semua jawaban tampil sekaligus,
   tanpa chevron & tanpa afordans klik (JS juga menyetel [open] tiap item
   untuk pembaca layar). Chevron + keadaan terlipat hanya di layar sempit. */
@media (min-width: 1025px) {
  .sch-acc--flat-lg .sch-acc__item > .sch-acc__a { display: block; animation: none; }
  .sch-acc--flat-lg .sch-acc__q { cursor: default; }
  .sch-acc--flat-lg .sch-acc__mark { display: none; }
  .sch-acc--flat-lg .sch-acc__item[open] .sch-acc__q { color: var(--sch-ink); }
}

/* DESKTOP §2 — strip fakta tetap SATU kolom vertikal (spec-sheet), tombol
   "Tentang sekolah" DI BAWAHNYA. Versi 2×2 lama meremas nilai jadi
   membungkus. */
@media (min-width: 1025px) {
  .sch-featured__aside { flex-direction: column; align-items: stretch; gap: 1rem; }
  .sch-featured__info { flex: none; }
  .sch-featured__cta { flex: none; align-self: flex-start; }
}

/* ── 4. Video menonjol + baris angka ──────────────────────── */
.sch-videowrap__frame {
  margin-top: 1.75rem;
  width: 100%;
  aspect-ratio: 16 / 9;
  border-radius: var(--sch-radius-lg);
  overflow: hidden;
  box-shadow: var(--sch-shadow);
}
.sch-videowrap__frame .sch-videobtn { height: 100%; border-radius: 0; }
.sch-statbar {
  margin-top: 2rem;
  display: grid;
  /* auto-fit, bukan repeat(4,...): jumlah angka dari getAllHomeStats() bebas
     untuk sebuah template — 3 atau 5 angka tidak boleh bikin baris pincang. */
  grid-template-columns: repeat(auto-fit, minmax(9rem, 1fr));
  gap: 1.25rem;
  padding: 1.75rem;
  border: 1px solid var(--sch-line);
  border-radius: var(--sch-radius-lg);
  background: var(--sch-surface);
  text-align: center;
}
.sch-statbar__num {
  font-family: var(--sch-display, inherit);
  font-weight: 700;
  font-size: clamp(1.6rem, 3.5vw, 2.2rem);
  line-height: 1;
  letter-spacing: -.02em;
  color: var(--sch-ink);
}
.sch-statbar__label { margin-top: .4rem; font-size: .82rem; color: var(--sch-muted); }
@media (max-width: 720px) {
  .sch-statbar { grid-template-columns: repeat(2, 1fr); gap: 1.25rem 1rem; padding: 1.25rem; }
}

/* ── 5. Jenjang — pola villa "Best Deal" ──────────────────────
   Header: eyebrow + judul (kiri) sebaris dengan tombol tab (kanan-atas).
   Tiap panel: 3 kolom — kartu info · gambar besar · nama + deskripsi + CTA. */
.sch-bestdeal__head {
  display: flex;
  flex-wrap: nowrap;            /* judul menyusut, tab tetap di sampingnya */
  align-items: flex-end;
  justify-content: space-between;
  gap: 1.25rem 2rem;
  margin-bottom: 2.5rem;
}
/* Tanpa max-width: judul section (mis. "Satu atap, dari usia dini hingga
   remaja") muat SATU baris di desktop; `flex:1 1 auto` + `min-width:0`
   sudah membatasinya ke ruang tersisa di samping tombol tab. */
.sch-bestdeal__headline { flex: 1 1 auto; min-width: 0; }
.sch-bestdeal__tabs { flex: 0 0 auto; }
/* Baru membungkus (tab pindah ke bawah, selebar penuh) di layar sempit. */
@media (max-width: 680px) {
  .sch-bestdeal__head { flex-wrap: wrap; }
  .sch-bestdeal__headline { max-width: none; }
  .sch-bestdeal__tabs { width: 100%; }
}
.sch-bestdeal__title {
  margin-top: .5rem;
  font-size: var(--sch-fs-h2);
  font-weight: 700;   /* konsisten dengan judul section lain */
  line-height: 1.15;
  color: var(--sch-ink);
  text-wrap: balance;
}
.sch-bestdeal__tabs { display: flex; flex-wrap: wrap; gap: .6rem; }
.sch-bestdeal__tab {
  appearance: none;
  border: 0;
  border-radius: var(--sch-radius);
  background: var(--sch-ink);
  color: #fff;
  font: inherit;
  font-size: .9rem;
  font-weight: 600;
  padding: .7rem 1.35rem;
  cursor: pointer;
  transition: background .25s ease, color .25s ease;
}
.sch-bestdeal__tab:hover { background: var(--sch-accent-dark); }
.sch-bestdeal__tab.is-active { background: var(--sch-accent); color: #fff; }

.sch-bestdeal__panel {
  animation: schTabIn .45s cubic-bezier(.16, 1, .3, 1);
}
.sch-bestdeal__panel[hidden] { display: none; }
@media (prefers-reduced-motion: reduce) { .sch-bestdeal__panel { animation: none; } }
/* 3 kolom: kartu info · gambar besar · nama + deskripsi + CTA. Grid ada di
   __grid (anak langsung dari __panel), BUKAN di __panel — __panel hanya
   pembungkus animasi/visibilitas. */
/* MOBILE-FIRST: base = 1 kolom (gambar → kartu info+tombol → nama/deskripsi).
   2 kolom di ≥769px, 3 kolom (info | gambar | teks) di ≥1025px. */
.sch-bestdeal__grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 1.5rem;
  align-items: start;
}
.sch-bestdeal__grid .sch-bestdeal__media { order: -1; }
@media (min-width: 769px) {
  .sch-bestdeal__grid { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 2rem; }
  .sch-bestdeal__grid .sch-bestdeal__media { grid-column: 1 / -1; }
}
/* DESKTOP DIROMBAK ke 2 kolom (3 kolom dulu = sempit & kacau). KIRI =
   gambar (atas) + kartu info-tabel & tombol (bawah). KANAN = nama +
   tagline + deskripsi, span 2 baris. */
@media (min-width: 1025px) {
  .sch-bestdeal__grid {
    grid-template-columns: minmax(0, 0.92fr) minmax(0, 1.08fr);
    grid-template-areas:
      "media body"
      "aside body";
    column-gap: 3rem;
    row-gap: 1.75rem;
    gap: 1.75rem 3rem;
    align-items: start;
  }
  .sch-bestdeal__grid .sch-bestdeal__media {
    grid-area: media; order: 0; grid-column: auto;
    aspect-ratio: 16 / 11; align-self: start;
  }
  .sch-bestdeal__grid .sch-bestdeal__aside { grid-area: aside; }
  .sch-bestdeal__grid .sch-bestdeal__body  { grid-area: body; }
}

/* Kolom kiri = kartu info + tombol. Tombol "Selengkapnya" berdiri DI LUAR
   kartu (di bawahnya), bukan di dalam bingkai tabel — permintaan user. */
.sch-bestdeal__aside {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 1.15rem;
}
/* Kartu info kiri — pola ".best-deal .info-table" villa: baris "label · nilai". */
.sch-bestdeal__info {
  align-self: stretch;
  border: 1px solid var(--sch-line);
  border-radius: var(--sch-radius-lg);
  background: var(--sch-card-bg);
  box-shadow: var(--sch-shadow);
  padding: 1.35rem 1.5rem;
}
.sch-bestdeal__info ul { list-style: none; margin: 0; padding: 0; width: 100%; }
.sch-bestdeal__aside .sch-bestdeal__cta { margin-top: 0; align-self: flex-start; }
.sch-bestdeal__info li {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 1rem;
  padding: .95rem 0;
  border-bottom: 1px solid var(--sch-line);
  font-size: .875rem;
  color: var(--sch-muted);
}
.sch-bestdeal__info li:first-child { padding-top: 0; }
.sch-bestdeal__info li:last-child { padding-bottom: 0; border-bottom: 0; }
.sch-bestdeal__info li span {
  font-size: 1.05rem;
  font-weight: 700;
  color: var(--sch-ink);
  text-align: right;
}

.sch-bestdeal__media {
  position: relative;   /* WAJIB: menampung .sch-ph (position:absolute; inset:0) */
  border-radius: var(--sch-radius-lg);
  overflow: hidden;
  aspect-ratio: 16 / 10;
  background: var(--sch-surface-deep);
  box-shadow: var(--sch-shadow);
}
.sch-bestdeal__media img { width: 100%; height: 100%; object-fit: cover; display: block; }

.sch-bestdeal__body { min-width: 0; }
.sch-bestdeal__name {
  font-family: var(--sch-display, inherit);
  font-weight: 700;
  font-size: 1.3rem;
  color: var(--sch-ink);
}
.sch-bestdeal__tagline { margin-top: .35rem; font-weight: 600; color: var(--sch-accent-dark); }
.sch-bestdeal__peminatan { margin-top: .6rem; font-size: .82rem; line-height: 1.5; color: var(--sch-muted); }
.sch-bestdeal__peminatan span { font-weight: 600; color: var(--sch-ink); }
/* Rata kiri — kolom deskripsi jenjang sempit; justify di sini bikin sungai
   spasi ("kurang rapi"). */
.sch-bestdeal__desc { margin-top: .85rem; line-height: 1.7; color: var(--sch-muted); font-size: .92rem; text-align: left; }
.sch-bestdeal__cta { margin-top: 1.5rem; }

/* "Selengkapnya" untuk deskripsi panjang — dipangkas ke N baris, tombol
   melepas pangkasan. JS (initReadMore) hanya menampilkan tombol bila teks
   BENAR-BENAR terpotong. Dipakai di §5 Jenjang; komponen umum, bisa dipakai
   di tempat lain. Tanpa JS: teks tampil penuh, tombol tetap tersembunyi. */
.sch-readmore__body {
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: var(--rm-lines, 4);
  overflow: hidden;
}
.sch-readmore.is-open .sch-readmore__body {
  -webkit-line-clamp: unset;
  overflow: visible;
}
.sch-readmore__toggle {
  margin-top: .55rem;
  display: inline-flex;
  align-items: center;
  gap: .3rem;
  padding: 0;
  border: 0;
  background: none;
  color: var(--sch-accent-dark);
  font-family: var(--sch-display, inherit);
  font-size: .85rem;
  font-weight: 700;
  cursor: pointer;
}
.sch-readmore__toggle:hover { text-decoration: underline; }
.sch-readmore__toggle svg { width: .85rem; height: .85rem; transition: transform .2s ease; }
.sch-readmore.is-open .sch-readmore__toggle svg { transform: rotate(180deg); }
.sch-readmore__toggle[hidden] { display: none; }
@media (max-width: 768px) { .sch-readmore { --rm-lines: 3; } }

/* Varian untuk isi multi-paragraf (.sch-prose): pangkas pakai max-height +
   pudar di tepi bawah, bukan line-clamp (yang tak akur dgn beberapa <p>). */
.sch-readmore--prose .sch-readmore__body {
  display: block;
  -webkit-line-clamp: unset;
  max-height: var(--rm-max, 24em);
  overflow: hidden;
  -webkit-mask-image: linear-gradient(180deg, #000 72%, transparent);
          mask-image: linear-gradient(180deg, #000 72%, transparent);
}
.sch-readmore--prose.is-open .sch-readmore__body {
  max-height: none;
  -webkit-mask-image: none;
          mask-image: none;
}
@media (max-width: 768px) { .sch-readmore--prose { --rm-max: 16em; } }

@media (max-width: 640px) {
  .sch-bestdeal__head { margin-bottom: 2rem; }
  .sch-bestdeal__tab { flex: 1 1 auto; text-align: center; }
}

/* ── 6. Fasilitas — kartu pola villa "Properties": kartu berbingkai
   dengan padding, gambar sudut membulat, pill jumlah, judul tebal, garis
   pemisah + baris aksi. Komponen sendiri (BUKAN .sch-card global yang
   dibalik warnanya antar mode). */
.sch-fac-grid {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(var(--sch-fac-cols, 3), minmax(0, 1fr));
  gap: 1.5rem;
}
@media (max-width: 900px) { .sch-fac-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
/* Layar kecil: satu baris yang bisa digeser mendatar (sama seperti .sch-grid--news). */
@media (max-width: 600px) {
  .sch-fac-grid {
    display: flex;
    grid-template-columns: none;
    gap: .875rem;
    margin-right: -1.5rem;
    padding: .25rem 1.5rem .75rem 0;
    overflow-x: auto;
    overscroll-behavior-x: contain;
    scroll-snap-type: x mandatory;
    scrollbar-width: none;
    touch-action: pan-x;
  }
  .sch-fac-grid::-webkit-scrollbar { display: none; }
  .sch-fac-grid > li {
    flex: 0 0 min(78vw, 17rem);
    scroll-snap-align: start;
  }
}
.sch-fac-card {
  display: flex;
  flex-direction: column;
  gap: .85rem;
  height: 100%;
  padding: 1.15rem;
  border: 1px solid var(--sch-line);
  border-radius: var(--sch-radius-lg);
  background: var(--sch-card-bg);
  color: inherit;
  text-decoration: none;
  box-shadow: var(--sch-shadow);
  transition: transform .2s ease, box-shadow .2s ease, border-color .2s ease;
}
.sch-fac-card:hover {
  transform: translateY(-.2rem);
  box-shadow: 0 1rem 2rem rgba(15, 61, 58, .12);
  border-color: var(--sch-accent);
}
.sch-fac-card:focus-visible { outline: 2px solid var(--sch-accent); outline-offset: 2px; }
.sch-fac-card__media {
  position: relative;   /* WAJIB: menampung .sch-ph (position:absolute; inset:0) */
  aspect-ratio: 16 / 11;
  border-radius: calc(var(--sch-radius-lg) - .35rem);
  overflow: hidden;
  background: var(--sch-surface-deep);
}
.sch-fac-card__media img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.sch-fac-card__tag {
  align-self: flex-start;
  padding: .3rem .7rem;
  border-radius: 999px;
  background: var(--sch-accent-soft);
  color: var(--sch-accent-dark);
  font-size: .78rem;
  font-weight: 600;
}
.sch-fac-card__title {
  font-family: var(--sch-display, inherit);
  font-weight: 700;
  font-size: 1rem;
  line-height: 1.3;
  color: var(--sch-ink);
}
.sch-fac-card__cta {
  margin-top: auto;
  padding-top: .85rem;
  border-top: 1px solid var(--sch-line);
  display: inline-flex;
  align-items: center;
  gap: .4rem;
  font-size: .82rem;
  font-weight: 600;
  color: var(--sch-accent-dark);
}
.sch-fac-card__cta svg { width: .9rem; height: .9rem; transition: transform .2s ease; }
.sch-fac-card:hover .sch-fac-card__cta svg { transform: translateX(.2rem); }

/* ── Marquee mitra (pola clearwave "trusted by"), tepat di bawah hero ── */
.sch-marquee {
  max-width: 80rem;             /* selaras dg .max-w-7xl kontainer lain */
  margin: 3rem auto 0;
  padding: 0 1.5rem 3rem;
  border-bottom: 1px solid var(--sch-line);   /* garis pembatas ala clearwave */
  text-align: center;
  overflow: hidden;      /* jaga-jaga: track sangat lebar tak boleh memicu scroll */
  isolation: isolate;
}
.sch-marquee__eyebrow {
  font-family: var(--sch-display, inherit);
  font-size: .72rem;
  font-weight: 700;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: var(--sch-muted);
}
.sch-marquee__viewport {
  margin-top: 1.5rem;
  overflow: hidden;
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent);
          mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent);
}
.sch-marquee__track {
  display: flex;
  align-items: center;
  width: max-content;
  animation: schMarquee 40s linear infinite;
}
.sch-marquee__track:hover { animation-play-state: paused; }
.sch-marquee__loop { display: contents; }
@keyframes schMarquee { to { transform: translateX(-50%); } }
.sch-marquee__item {
  position: relative;
  display: inline-flex;
  align-items: center;
  gap: .6rem;
  padding: 0 1.9rem;
  color: var(--sch-ink);
  text-decoration: none;
  white-space: nowrap;
}
.sch-marquee__item + .sch-marquee__item::before {
  content: "";
  position: absolute;
  left: 0;
  top: 50%;
  width: 4px;
  height: 4px;
  margin-top: -2px;
  border-radius: 999px;
  background: var(--sch-line);
}
.sch-marquee__chip {
  width: 1.9rem;
  height: 1.9rem;
  display: grid;
  place-items: center;
  border-radius: .55rem;
  background: var(--sch-accent-soft);
  color: var(--sch-accent-dark);
  font-family: var(--sch-display, inherit);
  font-size: .8rem;
  font-weight: 700;
}
.sch-marquee__name { font-size: .9rem; font-weight: 600; }
a.sch-marquee__item:hover .sch-marquee__name { color: var(--sch-accent-dark); }
/* Marquee tetap berjalan (dekoratif, gerak lambat & linier, bisa dijeda saat
   hover/fokus). Di prefers-reduced-motion cukup diperlambat drastis — bukan
   dihentikan — supaya tidak tampak "rusak"/menumpuk dua baris. */
@media (prefers-reduced-motion: reduce) {
  .sch-marquee__track { animation-duration: 140s; }
}
.sch-marquee__track:focus-within { animation-play-state: paused; }

/* ── FAQ (pola clearwave) — kolom kiri intro, kolom kanan accordion ── */
.sch-faq {
  display: grid;
  grid-template-columns: minmax(0, 0.85fr) minmax(0, 1.15fr);
  gap: 2.5rem 3rem;
  align-items: start;
}
.sch-faq__intro { position: sticky; top: 6rem; }
/* Judul FAQ konsisten dengan judul section lain (.sch-featured__title /
   .sch-bestdeal__title): font display bawaan situs, bobot 500, TANPA serif
   italik. Kata aksen cukup diberi warna teal. */
.sch-faq__title {
  margin-top: .5rem;
  font-size: var(--sch-fs-h2);
  font-weight: 700;   /* konsisten dengan judul section lain */
  line-height: 1.15;
  color: var(--sch-ink);
  text-wrap: balance;
}
.sch-faq__title em {
  font-style: normal;
  font-weight: 700;
  color: var(--sch-accent-dark);
}
.sch-faq__lead {
  margin-top: 1.1rem;
  max-width: 26rem;
  text-align: left;   /* ikut judul FAQ yang rata kiri di desktop; di ≤1024
                         blok mobile memusatkannya bersama judul */
  color: var(--sch-muted);
  line-height: 1.7;
}
.sch-faq__toggle {
  margin-top: 1.5rem;
  appearance: none;
  border: 0;
  background: none;
  padding: 0;
  font: inherit;
  font-weight: 700;
  font-size: .875rem;
  color: var(--sch-accent-dark);
  cursor: pointer;
}
.sch-faq__toggle::before { content: "+ "; }
.sch-faq__list { margin-top: 0; }
.sch-faq__list .sch-acc__a { padding-left: .25rem; }
@media (max-width: 860px) {
  .sch-faq { grid-template-columns: 1fr; gap: 1.75rem; }
  .sch-faq__intro { position: static; }
}

/* ── 9. Kontak: info & peta KIRI, form KANAN ──────────────────
   Urutan dibalik lewat `order` (permintaan user: baca info dulu di kiri,
   baru "kirim pesan" di kanan-bawah). Saat menumpuk di layar sempit,
   info tetap di atas, form di bawah. */
/* `stretch` supaya kartu form kanan sama tinggi dgn kolom info kiri; kolom
   "Pertanyaan Anda" yang menyerap selisih tingginya (lihat .sch-closer__form-msg). */
.sch-closer { align-items: stretch; }
/* Info kontak + jam + peta SELALU lebih dulu (order:1); form SELALU sesudah
   (order:2). Di layar sempit yang menumpuk: info di atas, form di bawah —
   pengunjung membaca jam & nomor layanan dulu, baru mengisi form. */
.sch-closer__side { order: 1; display: flex; flex-direction: column; gap: 1rem; }
.sch-closer__form { order: 2; }
.sch-closer__chip--static {
  cursor: default;
  align-items: flex-start;
  white-space: normal;
}
.sch-closer__chip--static span { white-space: normal; }

/* Kotak peta di kolom "Hubungi langsung": rasio tetap supaya FACADE
   (placeholder klik-untuk-muat) dan IFRAME peta yang menggantikannya
   berukuran PERSIS sama — dulu facade `min-height:18rem` jauh lebih besar
   dari peta yang muncul, jadi "malah over". */
.sch-closer__map {
  position: relative;
  width: 100%;
  margin-top: .25rem;
  aspect-ratio: 2 / 1;
  max-height: 12rem;
  border-radius: var(--sch-radius-lg);
  overflow: hidden;
  border: 1px solid var(--sch-line);
}
.sch-closer__map > * {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  border: 0;
  display: block;
}
/* `.sch-closer__map > *` di atas memaksa display:block — kembalikan ke grid
   di sini (aturan lebih spesifik + belakangan) supaya tata letak ikon-kiri /
   2-baris-teks berlaku juga di kontak penutup beranda, bukan cuma /kontak/. */
.sch-closer__map .sch-map-facade { min-height: 0; padding: 1rem 1.25rem; display: grid; }

/* Jam layanan per hari di kolom "Hubungi langsung" */
.sch-closer__hours {
  margin-top: .5rem;
  border: 1px solid var(--sch-line);
  border-radius: var(--sch-radius);
  background: var(--sch-card-bg);
  padding: 1rem 1.15rem;
}
.sch-closer__hours-title {
  font-family: var(--sch-display, inherit);
  font-size: .78rem;
  font-weight: 700;
  letter-spacing: .05em;
  text-transform: uppercase;
  color: var(--sch-accent-dark);
  margin-bottom: .35rem;
}
.sch-closer__hours dl { margin: 0; display: grid; gap: 0; }
.sch-closer__hours dl > div {
  display: flex;
  justify-content: space-between;
  gap: 1rem;
  padding: .45rem 0;
  border-top: 1px solid var(--sch-line);
  font-size: .875rem;
}
.sch-closer__hours dl > div:first-child { border-top: 0; }
.sch-closer__hours dt { color: var(--sch-muted); }
.sch-closer__hours dd { margin: 0; font-weight: 600; color: var(--sch-ink); }
.sch-closer__hours dd.is-closed { color: var(--sch-muted); font-weight: 500; }

/* ============================================================
   MODE SUNTING LANGSUNG (admin) — js/inline-edit.js
   Hanya dimuat & dirender untuk admin yang sedang masuk.
   ============================================================ */
/* Sudah masuk: tombol jadi ikon + caret saja (nama disembunyikan) — hemat
   ruang di kapsul header. Padding dirapatkan supaya bentuknya ringkas. */
.sch-portal-menu--auth .sch-portal-btn {
  border-color: var(--sch-accent);
  color: var(--sch-accent-dark);
  padding: 0 .7rem;
  gap: .15rem;
}
.sch-dropdown__label {
  display: block;
  padding: .55rem .75rem .35rem;
  font-size: .8rem;
  font-weight: 700;
  color: #102a2a;
  line-height: 1.35;
}
.sch-dropdown__role { font-weight: 600; font-size: .72rem; color: #6b7280; text-transform: uppercase; letter-spacing: .04em; }
.sch-dropdown__form { margin: 0; }
.sch-dropdown__form button {
  display: block; width: 100%; text-align: left;
  padding: .55rem .75rem; border: 0; background: transparent;
  border-radius: .6rem; color: #b91c1c; font: inherit; font-size: .875rem;
  font-weight: 500; cursor: pointer;
}
.sch-dropdown__form button:hover { background: #fef2f2; }

/* Tombol mengambang: aktif/nonaktif alat sunting.
   z-index tinggi (di atas header fixed z-65, kapsul, kartu, dsb.) tapi di
   bawah modal (130) & toast (140). */
.sch-edit-toggle {
  position: fixed;
  right: 1.1rem;
  bottom: 1.1rem;
  z-index: 120;
  display: inline-flex;
  align-items: center;
  gap: .5rem;
  padding: .7rem 1.1rem;
  border: 0;
  border-radius: 999px;
  background: var(--sch-accent-dark);
  color: #fff;
  font: 700 .85rem "Mona Sans", ui-sans-serif, system-ui, sans-serif;
  cursor: pointer;
  box-shadow: 0 14px 34px -12px rgba(15, 61, 58, .5);
}
.sch-edit-toggle:hover { background: var(--sch-accent); }
.sch-edit-toggle.is-on { background: #fbbf24; color: #102a2a; }
.sch-edit-toggle svg { flex: none; }
/* Saat menu mobile terbuka, sembunyikan FAB sunting + pensil supaya tidak
   menutupi navigasi & baris sosmed di kaki panel. */
body:has(#mobile-nav:not([hidden])) .sch-edit-toggle,
body:has(#mobile-nav:not([hidden])) .sch-edit-pen { display: none !important; }

/* Sorotan halus semua elemen yang bisa disunting saat alat aktif */
body.sch-edit-on [data-edit] {
  outline: 1px dashed rgba(251, 191, 36, .8);
  outline-offset: 3px;
  border-radius: 3px;
  transition: outline-color .15s ease, background-color .15s ease;
}
body.sch-edit-on [data-edit]:hover {
  outline: 2px dashed #fbbf24;
  background: rgba(251, 191, 36, .08);
}

/* Tombol sunting melayang (satu, mengikuti hover) — pil BESAR dengan ikon +
   teks supaya mudah ditemukan; label berubah sesuai jenis (teks / gambar). */
.sch-edit-pen {
  position: fixed;
  z-index: 125;
  display: inline-flex;
  align-items: center;
  gap: .4rem;
  height: 2.5rem;
  padding: 0 .95rem 0 .8rem;
  border: 2px solid #b45309;
  border-radius: 999px;
  background: #fbbf24;
  color: #3a2606;
  font: 700 .82rem/1 "Mona Sans", ui-sans-serif, system-ui, sans-serif;
  letter-spacing: .01em;
  cursor: pointer;
  box-shadow: 0 10px 26px -8px rgba(15, 61, 58, .55);
  white-space: nowrap;
}
.sch-edit-pen svg { flex: none; width: 1.05rem; height: 1.05rem; }
.sch-edit-pen:hover { background: #fcd34d; }
.sch-edit-pen[hidden] { display: none; }

/* Tombol "Ganti gambar" PERMANEN pada tiap media yang bisa disunting —
   tidak bergantung hover, jadi selalu kelihatan saat mode sunting aktif. */
.sch-edit-imgbtn {
  position: absolute;
  z-index: 40;
  right: .75rem;
  bottom: .75rem;
  display: inline-flex;
  align-items: center;
  gap: .4rem;
  padding: .5rem .8rem;
  border: 2px solid #b45309;
  border-radius: 999px;
  background: #fbbf24;
  color: #3a2606;
  font: 700 .78rem/1 "Mona Sans", ui-sans-serif, system-ui, sans-serif;
  cursor: pointer;
  box-shadow: 0 8px 22px -8px rgba(15, 61, 58, .6);
}
.sch-edit-imgbtn svg { flex: none; width: 1rem; height: 1rem; }
.sch-edit-imgbtn:hover { background: #fcd34d; }
/* Di hero/carousel: naikkan sedikit supaya tidak menutupi titik-titik dot. */
.sch-edit-imgbtn--slides { bottom: 3.75rem; }
body:not(.sch-edit-on) .sch-edit-imgbtn { display: none; }

/* Modal sunting */
.sch-edit-modal {
  position: fixed;
  inset: 0;
  z-index: 130;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 1.25rem;
  overflow-y: auto;
  background: rgba(2, 15, 14, .72);
}
.sch-edit-modal[hidden] { display: none; }
.sch-edit-modal__panel {
  position: relative;
  width: min(100%, 34rem);
  margin: auto;
  padding: 1.75rem;
  border-radius: var(--sch-radius-lg);
  background: var(--sch-card-bg);
  color: var(--sch-ink);
  box-shadow: 0 1.5rem 4rem rgba(0, 0, 0, .3);
}
.sch-edit-modal__close {
  position: absolute;
  top: .55rem;
  right: .7rem;
  width: 2rem;
  height: 2rem;
  border: 0;
  border-radius: 999px;
  background: transparent;
  color: var(--sch-muted);
  font-size: 1.5rem;
  line-height: 1;
  cursor: pointer;
}
.sch-edit-modal__close:hover { background: var(--sch-surface); color: var(--sch-ink); }
.sch-edit-modal__title {
  font-family: "Mona Sans", ui-sans-serif, system-ui, sans-serif;
  font-size: 1.15rem;
  font-weight: 700;
  color: var(--sch-ink);
  margin: 0 2rem .9rem 0;
}
.sch-edit-modal__body { display: flex; flex-direction: column; gap: .6rem; }
.sch-edit-modal__body textarea.sch-input { min-height: 6rem; }
.sch-edit-modal__hint { margin: 0; font-size: .8rem; color: var(--sch-muted); line-height: 1.45; }
.sch-edit-modal__rm { display: flex; align-items: center; gap: .5rem; font-size: .85rem; color: var(--sch-muted); }
.sch-edit-modal__foot { display: flex; justify-content: flex-end; gap: .6rem; margin-top: 1.25rem; }
.sch-edit-modal__foot .sch-btn[hidden] { display: none; }

.sch-edit-preview {
  border: 1px solid var(--sch-line);
  border-radius: var(--sch-radius);
  overflow: hidden;
  background: var(--sch-surface);
  aspect-ratio: 16 / 9;
}
.sch-edit-preview img { width: 100%; height: 100%; object-fit: cover; display: block; }

.sch-edit-slides__grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(6.5rem, 1fr));
  gap: .6rem;
  margin-bottom: .9rem;
}
.sch-edit-slides__cell {
  position: relative;
  aspect-ratio: 4 / 3;
  border: 1px solid var(--sch-line);
  border-radius: .6rem;
  overflow: hidden;
  background: var(--sch-surface);
}
.sch-edit-slides__cell img { width: 100%; height: 100%; object-fit: cover; display: block; }
.sch-edit-slides__noimg {
  display: grid;
  place-items: center;
  width: 100%;
  height: 100%;
  font-size: .7rem;
  color: var(--sch-muted);
}
.sch-edit-slides__del {
  position: absolute;
  top: .25rem;
  right: .25rem;
  width: 1.4rem;
  height: 1.4rem;
  border: 0;
  border-radius: 999px;
  background: rgba(185, 28, 28, .92);
  color: #fff;
  font-size: 1rem;
  line-height: 1;
  cursor: pointer;
}
.sch-edit-slides__add { display: flex; flex-direction: column; gap: .4rem; }

/* Toast pesan (galat/berhasil) */
.sch-edit-toast {
  position: fixed;
  left: 50%;
  bottom: 5rem;
  z-index: 140;
  transform: translateX(-50%) translateY(1rem);
  max-width: min(90vw, 30rem);
  padding: .7rem 1.1rem;
  border-radius: .8rem;
  background: #102a2a;
  color: #fff;
  font-size: .85rem;
  line-height: 1.4;
  box-shadow: 0 16px 40px -14px rgba(0, 0, 0, .5);
  opacity: 0;
  pointer-events: none;
  transition: opacity .2s ease, transform .2s ease;
}
.sch-edit-toast.is-on { opacity: 1; transform: translateX(-50%) translateY(0); }
.sch-edit-toast.is-err { background: #7f1d1d; }

/* ============================================================
   Panel "Label teks halaman ini" — pengganti modul admin Teks Situs.
   Tombol FAB kedua (di atas "Sunting halaman"), muncul hanya saat mode
   sunting aktif; modal daftar label sch_t() dwibahasa, simpan otomatis.
   ============================================================ */
.sch-edit-labels-btn {
  position: fixed;
  right: 1.1rem;
  bottom: 3.9rem;
  z-index: 120;
  display: none;
  align-items: center;
  gap: .45rem;
  padding: .55rem .95rem;
  border: 1px solid var(--sch-line);
  border-radius: 999px;
  background: var(--sch-card-bg, #fff);
  color: var(--sch-ink);
  font: 700 .8rem "Mona Sans", ui-sans-serif, system-ui, sans-serif;
  cursor: pointer;
  box-shadow: 0 12px 30px -14px rgba(15, 61, 58, .45);
}
body.sch-edit-on .sch-edit-labels-btn { display: inline-flex; }
.sch-edit-labels-btn:hover { border-color: var(--sch-accent); color: var(--sch-accent-dark); }
.sch-edit-labels-btn svg { flex: none; }
body:has(#mobile-nav:not([hidden])) .sch-edit-labels-btn { display: none !important; }

.sch-labels-modal {
  position: fixed;
  inset: 0;
  z-index: 200;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 1.5rem 1rem;
  background: rgba(2, 15, 14, .78);
  -webkit-backdrop-filter: blur(3px);
  backdrop-filter: blur(3px);
}
.sch-labels-modal[hidden] { display: none; }
.sch-labels-modal__panel {
  display: flex;
  flex-direction: column;
  width: min(100%, 42rem);
  max-height: min(88dvh, 46rem);
  background: var(--sch-bg, #fff);
  color: var(--sch-ink);
  border-radius: var(--sch-radius, 1rem);
  box-shadow: 0 30px 70px -20px rgba(0, 0, 0, .55);
  overflow: hidden;
}
.sch-labels-modal__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  padding: 1rem 1.15rem;
  border-bottom: 1px solid var(--sch-line);
}
.sch-labels-modal__title { margin: 0; font-size: 1.05rem; font-weight: 700; }
.sch-labels-modal__close {
  flex: none;
  width: 2rem; height: 2rem;
  border: 0; border-radius: 999px;
  background: transparent;
  color: var(--sch-muted);
  font-size: 1.4rem; line-height: 1;
  cursor: pointer;
}
.sch-labels-modal__close:hover { background: var(--sch-surface); color: var(--sch-ink); }
.sch-labels-modal__tools {
  display: flex;
  align-items: center;
  gap: .75rem;
  padding: .8rem 1.15rem;
  border-bottom: 1px solid var(--sch-line);
}
.sch-labels-modal__search { flex: 1 1 10rem; }
.sch-labels-modal__count { flex: none; font-size: .78rem; color: var(--sch-muted); white-space: nowrap; }
.sch-labels-modal__list {
  flex: 1;
  overflow-y: auto;
  padding: .6rem 1.15rem 1rem;
  display: flex;
  flex-direction: column;
  gap: .55rem;
}
.sch-labels-modal__empty { margin: 1.5rem 0; text-align: center; color: var(--sch-muted); font-size: .88rem; line-height: 1.5; }
.sch-labels-modal__foot { margin: 0; padding: .75rem 1.15rem; border-top: 1px solid var(--sch-line); font-size: .76rem; color: var(--sch-muted); line-height: 1.4; }

.sch-lbl-row {
  padding: .7rem .8rem;
  border: 1px solid var(--sch-line);
  border-radius: .7rem;
  background: var(--sch-surface, #f8fafa);
}
.sch-lbl-row[hidden] { display: none; }
.sch-lbl-row.is-custom { border-color: var(--sch-accent); background: var(--sch-accent-soft, #ecfdf5); }
.sch-lbl-row__def {
  margin: 0 0 .5rem;
  font-size: .82rem;
  font-weight: 600;
  color: var(--sch-ink);
  line-height: 1.35;
}
.sch-lbl-row__fields { display: flex; flex-wrap: wrap; gap: .5rem; }
.sch-lbl-field { flex: 1 1 14rem; display: flex; align-items: center; gap: .4rem; }
.sch-lbl-field__tag {
  flex: none;
  width: 1.6rem;
  font-size: .64rem;
  font-weight: 800;
  letter-spacing: .04em;
  color: var(--sch-muted);
}
.sch-lbl-field__inp { flex: 1; font-size: .85rem; padding: .4rem .55rem; }
.sch-lbl-row__actions { display: flex; align-items: center; gap: .6rem; margin-top: .5rem; }
.sch-lbl-row__tr {
  border: 1px solid var(--sch-line);
  border-radius: .5rem;
  padding: .32rem .6rem;
  background: var(--sch-bg, #fff);
  color: var(--sch-accent-dark);
  font: 600 .72rem "Mona Sans", ui-sans-serif, system-ui, sans-serif;
  cursor: pointer;
}
.sch-lbl-row__tr:hover:not(:disabled) { border-color: var(--sch-accent); background: var(--sch-accent-soft, #ecfdf5); }
.sch-lbl-row__tr:disabled { opacity: .6; cursor: progress; }
.sch-lbl-row__status {
  font-size: .72rem;
  font-weight: 600;
  color: var(--sch-accent-dark);
  opacity: 0;
  transition: opacity .15s ease;
}
.sch-lbl-row__status.is-on { opacity: 1; }
.sch-lbl-row__status.is-err { color: #b91c1c; }

@media (max-width: 640px) {
  .sch-labels-modal { padding: 0; }
  .sch-labels-modal__panel { width: 100%; max-height: 100dvh; border-radius: 0; }
  .sch-labels-modal__tools { flex-wrap: wrap; }
  .sch-lbl-field { flex-basis: 100%; }
}

/* ============================================================
   R58 — PENGERASAN LAYAR KECIL (≤600 / ≤420 / ≤360)
   Keluhan user: "sangat rusak di layar kecil". Blok terakhir →
   menang cascade. Semua aturan hanya merapatkan / menumpuk /
   mengaktifkan geser — tampilan desktop tidak tersentuh.
   ============================================================ */

@media (max-width: 1024px) {
  /* Kalender agenda: 7 kolom yang diperas jadi ~38px per sel bikin isi
     hancur. Beri lebar minimum → pembungkus overflow-x:auto benar-benar
     bisa digeser mendatar seperti kalender sungguhan. */
  .sch-cal { min-width: 32rem; }

  /* Modal: panel lebih lega, tak menempel tepi. Naikkan z-index di atas
     overlay menu mobile (130) — tombol "Masuk" ada di kaki menu itu. */
  .sch-modal { padding: .85rem; z-index: 140; }
  .sch-modal__panel { width: 100%; padding: 1.4rem 1.15rem; }

  /* Panel & kotak berpadding tebal → ramping. */
  .sch-panel { padding: 1.15rem; }

  /* Detail profil (dl): label DI ATAS nilai, bukan 2 kolom terhimpit. */
  .sch-profile-details div { grid-template-columns: 1fr; gap: .15rem; padding-bottom: .65rem; }

  /* Statbar angka: 2×2 di ponsel (acuan perkembangan-siswa) — bukan 1 kolom
     yang bikin section terlalu tinggi. 1 kolom hanya di layar sangat sempit. */
  .sch-statbar { gap: 1rem .75rem; }

  /* Judul besar tidak boleh meluber keluar viewport. */
  h1, h2,
  .sch-hero__title, .sch-featured__title, .sch-bestdeal__title, .sch-faq__title,
  .sch-detail-head h1, .sch-detail-hero__body h1, .sch-profile-hero h1 {
    overflow-wrap: anywhere;
  }

  /* Chip kontak: tumpuk penuh, teks boleh membungkus (bukan dipotong "…"). */
  .sch-closer__chip { width: 100%; }
  .sch-closer__chip span { white-space: normal; overflow: visible; text-overflow: clip; }

  /* Navigasi entri sebelum/berikut selalu satu kolom. */
  .sch-pn { grid-template-columns: 1fr; }
  .sch-pn__item--next,
  .sch-pn__item--next .sch-pn__text { text-align: left; align-items: flex-start; }

  /* Remah roti lebih ringkas. */
  .sch-breadcrumb__list { font-size: .74rem; gap: .3rem; }
}

@media (max-width: 420px) {
  /* Gutter kontainer diciutkan — 1.5rem×2 = 48px terlalu banyak di layar
     320–420px. Baris geser (news/fasilitas/wide) memakai bleed -1.5rem,
     jadi ikut disamakan supaya tidak memicu scroll horizontal body. */
  .px-6 { padding-left: 1.05rem; padding-right: 1.05rem; }
  .sch-grid--news, .sch-grid--wide, .sch-fac-grid { margin-right: -1.05rem; padding-right: 0; }
  /* Dot & panah carousel hero tetap sejajar dgn teks/tombol (yg kini 1.05rem). */
  .sch-hero__controls { padding-left: 1.05rem; padding-right: 1.05rem; }

  .sch-panel { padding: 1rem; }

  /* Tombol yang biasanya berdampingan → penuh & di tengah. */
  .sch-hero__actions .sch-btn,
  .sch-closer__form .sch-btn,
  .sch-detail-head .sch-btn { width: 100%; justify-content: center; text-align: center; }

  /* Tab jenjang: dua per baris, penuh. */
  .sch-bestdeal__tab { flex: 1 1 42%; text-align: center; }

  /* Kartu di baris-geser sedikit lebih lebar supaya isinya lega. */
  .sch-grid--news > li, .sch-grid--wide > li, .sch-fac-grid > li { flex-basis: 87vw; }
}

@media (max-width: 360px) {
  .px-6 { padding-left: .85rem; padding-right: .85rem; }
  .sch-grid--news, .sch-grid--wide, .sch-fac-grid { margin-right: -.85rem; }
  .sch-hero__controls { padding-left: .85rem; padding-right: .85rem; }
  .sch-hero__title { font-size: 1.6rem; }
  .sch-featured__title, .sch-bestdeal__title, .sch-faq__title,
  .sch-detail-head h1 { font-size: 1.4rem; }
  .sch-modal__panel { padding: 1.1rem .85rem; }
  .sch-btn--lg { padding: .75rem 1rem; font-size: .9rem; }
}

/* ============================================================
   R60 — KALIBRASI SKALA MOBILE
   Acuan: dev/perkembangan-siswa (portal guru + orang tua, desain
   mobile-first). Menyelaraskan hal-hal yang di sana sudah matang:
   base 16px pada field (anti zoom iOS), target sentuh 44px pada tombol,
   judul lebih kecil di ponsel, highlight ketuk dimatikan.
   Blok terakhir → menang cascade.
   ============================================================ */

/* Hilangkan kilatan abu saat elemen diketuk di Android/iOS. */
body { -webkit-tap-highlight-color: transparent; }

/* Target sentuh tombol minimal ~44px (acuan pakai min-height:44px eksplisit
   di semua tombol). `.sch-btn` sebelumnya hanya .65rem×2 padding ≈ 40px. */
.sch-btn { min-height: 2.75rem; }
.sch-btn--sm { min-height: 2.5rem; }

@media (max-width: 1024px) {
  /* Field form 16px → browser mobile TIDAK auto-zoom saat fokus. Acuan
     memaksa ini untuk input/select/textarea/button di ≤480; di sini juga
     mencakup .sch-input (yang basisnya .9375rem = 15px → memicu zoom). */
  .sch-input,
  input:not([type="checkbox"]):not([type="radio"]),
  select,
  textarea { font-size: 16px; }
  #sch-login-modal .sch-input { font-size: 16px; }

  /* Judul lebih kecil di ponsel — acuan `.panel-title` turun ke ~1.15rem.
     Judul section (sch_section_intro) dirender `<h2><span class="text-4xl
     ...sm:text-5xl">` dan judul halaman (sch_page_intro) `<h1><span
     class="text-5xl ...sm:text-6xl">` — varian sm: sudah ter-purge jadi
     ukuran itu berlaku SAMPAI mobile (2.25rem / 3rem = 36–48px, kegedean
     di layar ~360px). Ditarget lewat span-nya langsung. */
  main h1 > span.text-5xl,
  main h1 > span.font-display.text-5xl { font-size: 1.55rem; line-height: 1.2; }
  main h2 > span.text-4xl,
  main h2 > span.font-display.text-4xl { font-size: 1.35rem; line-height: 1.25; }
  .sch-featured__title, .sch-bestdeal__title, .sch-faq__title,
  .sch-detail-head h1, .sch-detail-hero__body h1, .sch-profile-hero h1,
  .sch-closer h2 { font-size: 1.35rem; line-height: 1.25; }
  .sch-eyebrow, .sch-marquee__eyebrow,
  main h1 > span.text-base, main h2 > span.mb-6.block { font-size: .74rem; }
  /* Paragraf intro section/halaman (`text-xl` = 1.25rem) sedikit diturunkan. */
  main h1 + div.text-xl, main h2 + div.text-xl,
  .sch-featured__intro, .sch-faq__lead { font-size: 1rem; line-height: 1.6; }
}

@media (max-width: 400px) {
  /* Gutter konten disamakan dgn acuan (≤480 → ~.9rem). */
  .px-6 { padding-left: .95rem; padding-right: .95rem; }
  .sch-grid--news, .sch-grid--wide, .sch-fac-grid { margin-right: -.95rem; }
  .sch-hero__controls { padding-left: .95rem; padding-right: .95rem; }
  /* Statbar TETAP 2×2 di ponsel (permintaan user: "4 data jadi 2 baris").
     Label panjang boleh membungkus 2 baris — masih terbaca. */
  .sch-statbar__label { font-size: .78rem; line-height: 1.3; }

  main h1 > span.text-5xl, main h1 > span.font-display.text-5xl { font-size: 1.4rem; }
  main h2 > span.text-4xl, main h2 > span.font-display.text-4xl { font-size: 1.25rem; }
  .sch-featured__title, .sch-bestdeal__title, .sch-faq__title,
  .sch-detail-head h1 { font-size: 1.22rem; }
}

/* ============================================================
   R64 — MOBILE: rata tengah + jarak lapang + perbaikan batch
   Feedback user berturut-turut: header burger meluber; chevron
   carousel harus di kanan; tombol section ("Tentang sekolah",
   "Halaman jenjang") di tengah; tab jenjang 3 sejajar + auto;
   jarak antar-section jangan terlalu rapat; "kebanyakan rata
   tengah ketika mobile". Blok terakhir → menang cascade.
   ============================================================ */

/* — (a) Header: logo menyusut supaya logo + 3 ikon aksi selalu muat
       dalam kapsul (tidak meluber di kanan). — */
@media (max-width: 1024px) {
  .sch-masthead__row { gap: .6rem .5rem; }
  .sch-masthead__logo { min-width: 0; }
  .sch-masthead__logo .sch-logo {
    font-size: .95rem !important;   /* menang atas inline style clamp() */
    gap: .4rem;
    min-width: 0;
  }
  .sch-masthead__logo .sch-logo svg { width: 1.5rem !important; height: 1.5rem !important; }
  /* Logo header SELALU satu baris (setelan admin "Nama pendek" menjaga agar
     muat). Kalau sangat mepet, potong elipsis — jangan membungkus dua baris. */
  .sch-masthead__logo { min-width: 0; }
  .sch-masthead__logo .sch-logo,
  .sch-masthead__logo .sch-logo > span { min-width: 0; white-space: nowrap; }
  .sch-masthead__logo .sch-logo > span { overflow: hidden; text-overflow: ellipsis; }
  .sch-masthead__actions { gap: .4rem; }
}
@media (max-width: 420px) {
  .sch-masthead__logo .sch-logo { font-size: .88rem !important; }
  .sch-masthead__logo .sch-logo svg { width: 1.35rem !important; height: 1.35rem !important; }
  .sch-search-toggle, .sch-hamburger-btn { width: 2.35rem; height: 2.35rem; }
  .sch-portal-btn { width: 2.35rem !important; height: 2.35rem !important; }
}

/* — (b) Panah prev/next hero DIHILANGKAN sepenuhnya (desktop + ponsel):
   auto-putar + titik (bisa diklik/ketuk) + geser di ponsel sudah cukup.
   Titik tetap rata kiri sejajar konten. — */
.sch-hero__arrows { display: none !important; }
.sch-hero__controls { justify-content: flex-start; }

/* — (c) Jarak antar-section beranda LEBIH LAPANG di ponsel. R58 dulu
       merapatkannya ke 3.25rem — terlalu penuh. — */
@media (max-width: 480px) {
  .mt-20 { margin-top: 4.25rem; }
}

/* — (d) §5 Jenjang: 3 tab SAMA LEBAR dalam satu baris (auto-rotasi lewat
       data-tabs-autoplay di js/school.js). — */
@media (max-width: 768px) {
  .sch-bestdeal__tabs { flex-wrap: nowrap; width: 100%; }
  .sch-bestdeal__tab { flex: 1 1 0; min-width: 0; text-align: center; }
}
@media (max-width: 380px) {
  .sch-bestdeal__tab { padding-left: .4rem; padding-right: .4rem; font-size: .78rem; }
}

/* — (e) Rata tengah di ponsel — TAPI HANYA judul / eyebrow / label pendek
       dan tombol berdiri-sendiri. Paragraf panjang → JUSTIFY. Akordeon,
       tabel info, strip fakta, isi kartu, field form → TETAP KIRI. — */
@media (max-width: 1024px) {
  /* judul & eyebrow → tengah */
  .sch-home main h2,
  .sch-featured__title, .sch-bestdeal__title, .sch-faq__title,
  .sch-bestdeal__name, .sch-bestdeal__tagline,
  .sch-closer h2 { text-align: center; }
  .sch-featured__text > .sch-eyebrow,
  .sch-bestdeal__headline > .sch-eyebrow,
  main h2 > span.mb-6, main h1 > span.text-base { text-align: center; display: block; }

  /* Paragraf INTRO section (pendek, 1–2 baris di bawah judul) → tengah,
     mengikuti judulnya. */
  .sch-featured__intro, .sch-faq__lead,
  main h2 + div.text-xl, main h1 + div.text-xl { text-align: center; }

  /* Kutipan testimoni (teks banyak, kolom cukup lebar) → JUSTIFY.
     Deskripsi jenjang TIDAK — kolomnya sempit, justify jadi sungai. */
  .sch-testi-card__quote {
    text-align: justify;
    text-justify: inter-word;
    hyphens: auto;
  }
  .sch-bestdeal__desc { text-align: left; }

  /* intro kontak: pendek → tengah */
  .sch-closer__form > p:first-of-type, .sch-closer__form > h2 + p { text-align: center; }

  /* tombol section berdiri-sendiri → tengah */
  .sch-featured__aside { align-items: center; }
  .sch-featured__cta,
  .sch-bestdeal__aside .sch-bestdeal__cta { align-self: center; }
  .sch-bestdeal__aside { align-items: center; }
  .sch-faq__intro { text-align: center; }
  .sch-faq__intro .sch-faq__toggle { margin-inline: auto; }
  .sch-fac-grid ~ div:last-child,
  .sch-grid--news ~ div:last-child { text-align: center; }

  /* EKSPLISIT KIRI: struktur yang tak boleh ikut ke-tengah/justify. */
  .sch-acc, .sch-acc__q, .sch-acc__q-text, .sch-acc__a,
  .sch-featured__info, .sch-featured__info li, .sch-featured__fact-body,
  .sch-bestdeal__info, .sch-bestdeal__info li,
  .sch-testi-card__by, .sch-testi-card__name, .sch-testi-card__role,
  .sch-card__body, .sch-fac-card__title, .sch-field, .sch-label { text-align: left; }
}

/* ============================================================
   R65 — SKALA KOMPAK PONSEL
   User: di layar kecil semuanya terlalu besar → sedikit yang
   terlihat sekali pandang, kebanyakan scroll. Rapatkan skala
   (font, padding, ritme) mendekati kepadatan layar sedang.
   Struktur tetap. Blok terakhir → menang cascade.
   ============================================================ */
@media (max-width: 1024px) {
  /* Ritme antar-section lebih rapat. */
  .mt-20 { margin-top: 3rem; }
  .mt-16 { margin-top: 2.4rem; }
  .mt-12 { margin-top: 2rem; }
  .mt-8  { margin-top: 1.5rem; }

  /* Hero mengisi SATU layar penuh di semua ukuran (seperti desktop) — aturan
     dasar `min-height: max(28rem, 100svh - topbar)` berlaku, tidak ditimpa di
     sini, supaya bagian "Bekerja sama dengan" (marquee) tidak mengintip di
     bawah lipatan. `align-items: flex-end` sudah dari aturan dasar. */
  /* padding-atas besar supaya judul tak tertutup kapsul masthead yang
     mengambang di atas hero; padding-bawah menyisakan ruang untuk titik
     carousel yang diposisikan absolut di dasar hero. */
  .sch-hero__inner { padding: clamp(6.5rem, 24vw, 8rem) 0 clamp(3.25rem, 11vw, 4rem); }
  .sch-hero__controls { bottom: 1rem; }
  .sch-hero__title { font-size: clamp(1.5rem, 7vw, 2rem); line-height: 1.15; }
  .sch-hero__lead  { font-size: .9rem; margin-top: .85rem; }
  .sch-hero__actions { margin-top: 1.25rem; gap: .6rem; }

  /* Judul & teks section lebih kecil. */
  .sch-home main h2,
  main h1 > span.text-5xl, main h1 > span.font-display.text-5xl { font-size: 1.35rem; line-height: 1.2; }
  main h2 > span.text-4xl, main h2 > span.font-display.text-4xl { font-size: 1.2rem; }
  .sch-featured__title, .sch-bestdeal__title, .sch-faq__title,
  .sch-detail-head h1, .sch-detail-hero__body h1, .sch-profile-hero h1,
  .sch-closer h2 { font-size: 1.2rem; line-height: 1.25; }
  .sch-eyebrow, .sch-marquee__eyebrow { font-size: .68rem; letter-spacing: .08em; }
  main h1 + div.text-xl, main h2 + div.text-xl,
  .sch-featured__intro, .sch-faq__lead, .sch-bestdeal__desc { font-size: .9rem; line-height: 1.55; }

  /* Kartu & panel: padding lebih tipis. */
  .sch-card__body { padding: .85rem .9rem; }
  .sch-panel { padding: 1rem; }
  .sch-fac-card { padding: .9rem; gap: .6rem; }
  .sch-testi-card { padding: 1rem 1.05rem; }
  .sch-closer__form { padding: 1.1rem; gap: .8rem; }
  .sch-bestdeal__info { padding: 1rem 1.1rem; }

  /* Akordeon lebih rapat. */
  .sch-acc__q { padding: .8rem .2rem; gap: .6rem; font-size: .92rem; }
  .sch-acc__icon { width: 1.75rem; height: 1.75rem; }
  .sch-acc__a { padding-bottom: .9rem; font-size: .875rem; }

  /* Strip fakta §2 & tabel info §5. */
  .sch-featured__info li { padding: .7rem 1.1rem; }
  .sch-featured__fact-value { font-size: 1rem; }
  .sch-featured__fact-icon { width: 2.1rem; height: 2.1rem; }
  .sch-bestdeal__info li { padding: .75rem 0; font-size: .85rem; }
  .sch-bestdeal__info li span { font-size: .95rem; }

  /* Statbar. */
  .sch-statbar { padding: 1rem; gap: .85rem .75rem; }
  .sch-statbar__num { font-size: 1.5rem; }
  .sch-statbar__label { font-size: .75rem; }

  /* Tombol lebih ringkas. */
  .sch-btn { padding: .55rem 1rem; font-size: .84rem; min-height: 2.5rem; }
  .sch-btn--lg { padding: .65rem 1.1rem; font-size: .88rem; }
  .sch-btn--sm { padding: .45rem .85rem; font-size: .8rem; min-height: 2.3rem; }

  /* Tombol "Bagikan cerita Anda" (§7) di tengah. */
  .sch-testi-actions { justify-content: center; margin-bottom: 1.25rem; }

  /* Gambar section lebih landscape (pendek). */
  .sch-featured__media, .sch-bestdeal__media { aspect-ratio: 16 / 9; }

  /* Marquee lebih rapat. */
  .sch-marquee { padding-bottom: 2rem; margin-top: 2rem; }
}
@media (max-width: 400px) {
  .mt-20 { margin-top: 2.5rem; }
  .sch-hero__title { font-size: 1.45rem; }
  .sch-home main h2 { font-size: 1.25rem; }
  .sch-card__body { padding: .75rem .8rem; }
}

/* — Footer sosmed: chip ikon + NAMA platform selama masih ada ruang
     (≥601px) supaya barisnya tidak terlihat kosong; baru di ponsel
     (≤600px) menyusut jadi 3 ikon bulat sejajar. — */
@media (max-width: 600px) {
  .sch-footer-social-row { flex-wrap: nowrap; justify-content: center; gap: .6rem; }
  .sch-footer-social-row__label { display: none; }
  .sch-footer-social-row a {
    width: 2.6rem; height: 2.6rem;
    padding: 0;
    justify-content: center;
    border-radius: 999px;
  }
  .sch-footer-social-row a svg { width: 1.2rem; height: 1.2rem; }
}

/* ============================================================
   R69 — Logika mobile BERANDA diterapkan ke SEMUA halaman
   User: "dengan semua logika di landing page, terapkan ke seluruh
   halaman agar optimal di mobile." Judul/eyebrow/intro pendek →
   tengah; body panjang (artikel, riwayat) → kiri + justify;
   struktur (tabel, dl, daftar) → kiri. Skala kompak R65 sudah
   pakai selector luas jadi berlaku otomatis.
   ============================================================ */
@media (max-width: 1024px) {
  /* Judul & eyebrow sch_section_intro / sch_page_intro (SEMUA halaman) →
     tengah. Ditarget lewat span ukuran spesifik supaya subjudul DI DALAM
     artikel (.sch-richtext / .sch-prose) tidak ikut. */
  main h1 > span.text-5xl,
  main h2 > span.text-4xl,
  main h1 > span.text-base,
  main h2 > span.mb-6,
  main h1 + div.text-xl,
  main h2 + div.text-xl { text-align: center; }

  /* Halaman detail: judul + blok teks hero (saat menumpuk) → tengah. */
  .sch-detail-head, .sch-detail-head h1,
  .sch-detail-hero__body, .sch-detail-hero__body h1 { text-align: center; }
  .sch-profile-hero, .sch-profile-hero > div,
  .sch-profile-hero h1, .sch-profile-role { text-align: center; }
  .sch-back-link { display: block; text-align: center; }

  /* Body PANJANG halaman dalam TETAP kiri; paragraf artikel/riwayat justify. */
  .sch-richtext, .sch-article, .sch-prose,
  .sch-richtext h2, .sch-richtext h3, .sch-richtext h4,
  .sch-prose h2, .sch-prose h3, .sch-prose h4,
  .sch-panel, .sch-panel h2, .sch-panel h3,
  .sch-profile-details, .sch-profile-details div, .sch-profile-details dt, .sch-profile-details dd,
  .sch-profile-list, .sch-profile-activity,
  .sch-timeline, .sch-timeline__text, .sch-bullets,
  .sch-mentored, .sch-mentored__item,
  .sch-pn__item, .sch-pn__text,
  .sch-dl, dl, dt, dd, td, th { text-align: left; }
  .sch-richtext p, .sch-prose p { text-align: justify; text-justify: inter-word; hyphens: auto; }

  /* Tombol / tautan aksi berdiri-sendiri di halaman dalam → tengah. */
  .sch-pagination { justify-content: center; }
}

/* ============================================================
   R71 — Rapikan: filter tag, print-row, carousel testimoni,
   tombol §8 di tengah (mobile). Blok terakhir → menang cascade.
   ============================================================ */

/* Baris "Cetak halaman ini": di tengah pada ponsel (dulu rata kanan). */
@media (max-width: 1024px) {
  .sch-print-row { justify-content: center; }
}

/* Tombol filter kategori (.sch-tabs) lebih rapi: baris yg membungkus
   dipusatkan + chip sedikit lebih rapat di ponsel. */
@media (max-width: 1024px) {
  .sch-tabs { justify-content: center; gap: .4rem; }
  .sch-tab { padding: .4rem .8rem; font-size: .8rem; }
}

/* §8 Kabar & Info: tombol "Semua …" / "Kalender lengkap" di tengah. */
@media (max-width: 1024px) {
  .sch-home-info-column > .sch-btn { justify-self: center; align-self: center; }
}

/* §7 Testimoni: hilangkan ruang kosong besar. Di ponsel 1 kartu per slide
   (tinggi kutipan sudah dibatasi -webkit-line-clamp:5), track rata-atas
   supaya slide pendek tidak "diregangkan" setinggi slide terpanjang. */
@media (max-width: 720px) {
  .sch-carousel--testi .sch-carousel__track { align-items: flex-start; }
  .sch-carousel--testi .sch-testi-slide { grid-template-columns: 1fr; align-content: start; }
  .sch-carousel--testi .sch-testi-slide .sch-testi-card:nth-child(n+2) { display: none; }
  .sch-carousel--testi .sch-carousel__viewport { overflow: hidden; }
}

/* ============================================================
   R80 — BUG NYATA + rombak lanjutan §2/§5 (feedback screenshot)
   1. Menu mobile terbuka → halaman masih bisa scroll.
   2. Modal testimoni ketutup header → tombol close tak terjangkau.
   3. §2: kartu fakta rata-tengah dgn gambar, tombol rata kiri.
   4. §5: sisi kanan terlalu kosong — sebar elemen.
   Blok terakhir → menang cascade.
   ============================================================ */

/* --- (1) Kunci scroll saat menu mobile / modal terbuka. Di sebagian
   perangkat elemen scroll adalah <html>, jadi overflow:hidden pada <body>
   saja tak cukup. Kelas `.sch-scroll-lock` disetel js/nav.js; `:has()`
   menutup kasus modal walau JS-nya hanya menyetel body. --- */
html.sch-scroll-lock,
html.sch-scroll-lock body,
html:has(.sch-modal:not([hidden])),
html:has(.sch-modal:not([hidden])) body,
html:has(.sch-mobile-nav:not([hidden])),
html:has(.sch-mobile-nav:not([hidden])) body {
  overflow: hidden !important;
  touch-action: none;
}
.sch-mobile-nav__panel { overscroll-behavior: contain; }

/* --- (2) Modal SELALU di atas segalanya + header disembunyikan selama
   modal terbuka; tombol close menempel di sudut viewport modal. --- */
.sch-modal { z-index: 200; }
body:has(.sch-modal:not([hidden])) .sch-header,
body:has(.sch-modal:not([hidden])) .sch-hamburger-btn,
body:has(.sch-modal:not([hidden])) .sch-edit-toggle,
body:has(.sch-modal:not([hidden])) .sch-edit-pen { visibility: hidden !important; }
/* Panel modal di TENGAH vertikal; kalau isinya tinggi (form daftar +
   captcha), panel-nya sendiri yang menggulir — bukan didorong ke atas. */
.sch-modal { align-items: center; }
.sch-modal__panel {
  margin-block: auto;
  max-height: calc(100dvh - 2.5rem);
  overflow-y: auto;
}
.sch-modal__close {
  position: sticky;
  top: .25rem;
  float: right;
  z-index: 3;
}
@media (max-width: 1024px) {
  .sch-modal { padding: 1rem .85rem; }
  .sch-modal__panel { max-height: calc(100dvh - 2rem); }
}

/* --- (3) §2 Keunggulan desktop: kartu fakta selebar gambar (rata tengah
   dengannya), tombol "Tentang sekolah" DI BAWAH kartu, rata kiri dengan
   judul section. --- */
@media (min-width: 1025px) {
  .sch-featured__aside {
    flex-direction: column;
    align-items: flex-start;
    gap: 1.1rem;
  }
  .sch-featured__info { flex: none; width: 100%; }
  .sch-featured__cta { align-self: flex-start; }
}

/* --- (4) §5 Jenjang desktop: gambar KIRI membentang penuh tinggi; KANAN =
   nama + tagline + deskripsi, lalu tabel info + tombol (mengisi sisi kanan
   yang tadinya kosong). --- */
@media (min-width: 1025px) {
  .sch-bestdeal__grid {
    grid-template-columns: minmax(0, 0.82fr) minmax(0, 1.18fr);
    grid-template-areas:
      "media body"
      "media aside";
    column-gap: 3rem;
    row-gap: 1.5rem;
    align-items: start;
  }
  .sch-bestdeal__grid .sch-bestdeal__media {
    grid-area: media;
    align-self: stretch;
    height: 100%;
    min-height: 22rem;
    max-height: 34rem;
    aspect-ratio: auto;
  }
  .sch-bestdeal__grid .sch-bestdeal__body  { grid-area: body; }
  .sch-bestdeal__grid .sch-bestdeal__aside { grid-area: aside; margin-top: .5rem; }
  .sch-bestdeal__aside .sch-bestdeal__info { align-self: stretch; }
}

/* ============================================================
   R82 — batch umpan balik user (publik)
   ============================================================ */

/* p8 — chip album galeri: pil bersih + hitungan sebagai badge kecil. */
.sch-tab__count {
  display: inline-block;
  min-width: 1.25rem;
  padding: 0 .35rem;
  margin-left: .1rem;
  border-radius: 999px;
  background: var(--sch-accent-soft, #e3f2f0);
  color: var(--sch-accent-dark, #0b5750);
  font-size: .72rem;
  font-weight: 700;
  text-align: center;
  line-height: 1.4;
}
:root[data-theme="dark"] .sch-tab__count { background: rgba(255,255,255,.14); color: #fff; }

/* p9 — tombol "Baca pengumuman" tak terlihat: kartu .sch-notice/.sch-card
   berlatar teal di mode terang, jadi ghost-button (teks gelap + garis abu)
   nyaris tak terbaca. Beri gaya invert (putih) di dalam kartu teal. */
:root:not([data-theme="dark"]) .sch-notice .sch-btn--ghost,
:root:not([data-theme="dark"]) .sch-card .sch-btn--ghost,
:root:not([data-theme="dark"]) .sch-panel .sch-btn--ghost {
  color: #fff;
  border-color: rgba(255, 255, 255, .45);
}
:root:not([data-theme="dark"]) .sch-notice .sch-btn--ghost:hover,
:root:not([data-theme="dark"]) .sch-card .sch-btn--ghost:hover,
:root:not([data-theme="dark"]) .sch-panel .sch-btn--ghost:hover {
  background: rgba(255, 255, 255, .14);
  color: #fff;
  border-color: rgba(255, 255, 255, .7);
}
/* Kartu pengumuman "disematkan" berlatar TERANG (bukan teal) — di sana
   tombolnya kembali bergaya gelap seperti bawaan. */
:root:not([data-theme="dark"]) .sch-notice--pinned .sch-btn--ghost {
  color: var(--sch-ink);
  border-color: var(--sch-line);
}
:root:not([data-theme="dark"]) .sch-notice--pinned .sch-btn--ghost:hover {
  background: var(--sch-accent-soft);
  color: var(--sch-accent-dark);
  border-color: var(--sch-accent);
}

/* p7 — jenjang & kurikulum: paragraf isi (banyak teks) → rata kiri-kanan. */
.sch-panel > p,
.sch-panel .sch-richtext p,
.sch-page-intro p {
  text-align: justify;
  text-justify: inter-word;
  hyphens: auto;
}

/* p2 — hero ponsel: teks & tombol sedikit lebih kecil supaya gambar carousel
   lebih menonjol; titik indikator diberi jarak dari tombol. */
@media (max-width: 640px) {
  .sch-hero__title { font-size: clamp(1.35rem, 6.5vw, 1.8rem); line-height: 1.18; }
  .sch-hero__lead  { font-size: .84rem; margin-top: .7rem; }
  .sch-hero__actions { margin-top: 1rem; gap: .55rem; }
  .sch-hero__actions .sch-btn { padding: .6rem 1rem; font-size: .82rem; }
  .sch-hero__inner { padding-bottom: clamp(3.75rem, 13vw, 4.5rem); }
  .sch-hero__controls { bottom: .75rem; }
}

/* p10 — kalender agenda publik di ponsel: paksa 7 kolom (Sen–Min) muat penuh
   tanpa gulir mendatar. Pembungkus `overflow-x:auto` shrink-to-fit ke lebar
   tabel (~512px) — di sini dikunci ke lebar induk supaya `width:100%` tabel
   benar-benar 100% viewport. */
@media (max-width: 640px) {
  .sch-cal { table-layout: fixed !important; width: 100% !important; min-width: 0 !important; }
  .sch-panel > div[style*="overflow-x"] { overflow-x: visible !important; width: 100%; }
  .sch-cal th { font-size: .58rem; padding: .3rem .06rem; letter-spacing: .02em; }
  .sch-cal td { height: 3rem; padding: .12rem; font-size: .68rem; }
  .sch-cal__num { font-size: .7rem; }
  .sch-cal__ev, .sch-cal td .sch-pill {
    font-size: .54rem; padding: 1px 2px;
    display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 100%;
  }
  .sch-cal__more { font-size: .52rem; }
}

/* ============================================================
   R82 pass 2 — umpan balik lanjutan user
   ============================================================ */

/* Footer: kolom navigasi (Sekolah/Akademik/Berita/Lainnya) TIDAK PENTING di
   ponsel — burger sudah menyediakan navigasi lengkap. Sembunyikan; sisakan
   brand + alamat + sosial + bilah hak cipta. */
@media (max-width: 700px) {
  .sch-footer__nav { display: none !important; }
}

/* Dropdown menu akun (admin) di bawah header — lebih lega & rapi. */
.sch-portal-menu--auth .sch-dropdown {
  min-width: 15rem;
  padding: .35rem;
}
/* Tombol akun ada di UJUNG KANAN header → panel HARUS berjangkar ke tepi
   kanan tombol (buka ke kiri-bawah), bukan `left:0` bawaan yang membuatnya
   meluber ke kanan lalu terpotong `overflow-x:hidden` (persis bug pada
   screenshot user). Beri jarak dari tombol + jembatan hover tak-terlihat. */
.sch-portal-menu--auth > .sch-dropdown {
  left: auto;
  right: 0;
  margin-top: .55rem;
  max-width: calc(100vw - 1.75rem);
  transform-origin: top right;
  transition: opacity var(--sch-dur-micro) var(--sch-ease-out),
              transform var(--sch-dur-micro) var(--sch-ease-out),
              visibility var(--sch-dur-micro);
}
.sch-portal-menu--auth:not(.is-open) > .sch-dropdown { transform: translateY(-6px) scale(.98); }
.sch-portal-menu--auth.is-open > .sch-dropdown::before {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  top: -.6rem;
  height: .6rem;
}
.sch-portal-menu--auth .sch-dropdown .sch-dropdown__label {
  display: block;
  padding: .6rem .7rem .55rem;
  margin-bottom: .25rem;
  border-bottom: 1px solid rgba(16, 42, 42, .1);
  line-height: 1.35;
}
.sch-portal-menu--auth .sch-dropdown a,
.sch-portal-menu--auth .sch-dropdown .sch-dropdown__form button {
  padding: .6rem .7rem;
  border-radius: .5rem;
  font-weight: 600;
}

/* ============================================================
   R102 — RITME ANTAR-SECTION + TANGGA TIPE
   Dua keluhan user, satu blok (paling akhir → menang cascade):

   (1) "ruang bernafas antar section seperti main page iluztar" —
       jarak antar-section beranda dulu mt-20/sm:mt-28 = 5rem/7rem
       (112px desktop, ~40px ponsel), jauh lebih rapat dari situs
       induk (mt-24 sm:mt-32 lg:mt-40 = 96/128/160px). "Compact"
       yang user minta = kepadatan DI DALAM satu section, BUKAN
       ritme antar-section. Dilonggarkan ke bawah supaya mendekati
       ritme iluztar; sub-jarak dalam section (mt-8) tetap.

   (2) "skala teks kurang dinamis, judul harus besar, di demo
       terkesan seragam" — judul section dulu datang dari 3 clamp()
       berbeda + sm:text-5xl (4 ukuran 34–48px, 2 bobot). Sekarang
       semua = --sch-fs-h2; token diperkecil per breakpoint di sini
       supaya rasio hero ≫ h2 ≫ intro ≫ badan tetap kelihatan
       sampai ponsel (bukan 25/20/18/16 yang mepet).
   ============================================================ */

/* — Ritme antar-section beranda (kelas dipakai HANYA di index.php) — */
.mt-20 { margin-top: 5.5rem; }
@media (min-width: 640px) { .sm\:mt-28 { margin-top: 9rem; } }
@media (max-width: 639px) { .mt-20 { margin-top: 5.5rem; } }
@media (max-width: 420px) { .mt-20 { margin-top: 4.75rem; } }

/* — Tangga tipe: satu nilai per tingkat, dikecilkan per breakpoint — */
@media (max-width: 1024px) {
  :root {
    --sch-fs-hero: 2.85rem;
    --sch-fs-h1:   2.5rem;
    --sch-fs-h2:   1.95rem;
    --sch-fs-h3:   1.3rem;
    --sch-fs-lead: 1.15rem;
  }
}
@media (max-width: 640px) {
  :root {
    --sch-fs-hero: 2.55rem;
    --sch-fs-h1:   2.15rem;
    --sch-fs-h2:   1.65rem;
    --sch-fs-h3:   1.2rem;
    --sch-fs-lead: 1.05rem;
  }
}
@media (max-width: 400px) {
  :root {
    --sch-fs-hero: 2.25rem;
    --sch-fs-h1:   1.95rem;
    --sch-fs-h2:   1.45rem;
  }
}

/* Semua judul section → --sch-fs-h2 (bobot 700). `!important` dipakai
   dengan sadar: ada ±6 blok @media R60/R64/R65/R69 di atas yang meng-
   hard-code font-size judul ini per breakpoint (warisan berlapis). Token
   di blok ini sudah menangani pengecilan responsif, jadi override lama
   itu harus kalah tanpa perlu dibongkar satu per satu. */
.sch-hero__title { font-size: var(--sch-fs-hero) !important; }
main h1 > span.text-5xl,
main h1 > span.font-display.text-5xl { font-size: var(--sch-fs-h1) !important; font-weight: 600; line-height: 1.12; }
main h2 > span.text-4xl,
main h2 > span.font-display.text-4xl { font-size: var(--sch-fs-h2) !important; font-weight: 700; line-height: 1.15; }
.sch-featured__title,
.sch-bestdeal__title,
.sch-faq__title { font-size: var(--sch-fs-h2) !important; font-weight: 700; }
main h1 + div.text-xl,
main h2 + div.text-xl,
.sch-featured__intro,
.sch-faq__lead { font-size: var(--sch-fs-lead) !important; line-height: 1.6; }

/* Judul yang lebih besar (token di atas) memicu bug lama: di ~681–900px
   `.sch-bestdeal__head` masih `flex-wrap: nowrap`, jadi kolom judul yang
   `min-width:0` diremas tab di sebelahnya, lalu `overflow-wrap: anywhere`
   (blok @media ≤1024) memecah judul jadi SATU HURUF per baris (teks
   vertikal). Perbaikan: pecah kata hanya bila satu kata utuh tak muat,
   dan biarkan header membungkus jauh lebih awal. */
.sch-hero__title,
.sch-featured__title,
.sch-bestdeal__title,
.sch-faq__title { overflow-wrap: break-word; word-break: normal; }
@media (max-width: 900px) {
  .sch-bestdeal__head { flex-wrap: wrap; }
  .sch-bestdeal__headline { max-width: none; }
  .sch-bestdeal__tabs { width: 100%; }
}

/* FAQ lead: rata KIRI + kotak flush kiri di desktop (sinkron dgn eyebrow +
   judul FAQ yang rata kiri). Di ≤1024px — saat judul FAQ ikut ke tengah —
   teks & kotak ikut center. */
.sch-faq__lead { margin-inline: 0; max-width: 28rem; text-wrap: pretty; }
@media (max-width: 1024px) {
  .sch-faq__lead { margin-inline: auto; }
}

/* ============================================================
   R103 — Halaman PPDB (/ppdb/)
   Jalur "calon siswa": status + CTA, jenjang, alur (reuse
   .sch-timeline), persyaratan (reuse .sch-cols-2), biaya (tabel),
   lalu kartu tautan jadwal/kontak. Komponen sedapat mungkin
   memakai .sch-panel / .sch-card / .sch-btn yang sudah ada.
   ============================================================ */
.sch-ppdb-status {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 1.25rem 2rem;
}
.sch-ppdb-status__info { min-width: 0; }
/* `.sch-panel` men-scope-ulang --sch-ink jadi putih (mode terang, panel
   teal) / gelap (mode gelap, panel putih), jadi eyebrow + badge + tahun
   cukup ikut --sch-ink — JANGAN pakai --sch-accent-dark (tak terlihat di
   panel teal). */
.sch-ppdb-status .sch-eyebrow { color: var(--sch-ink); opacity: .78; }
.sch-ppdb-status__year {
  margin: .15rem 0 .5rem;
  font-family: var(--sch-display, inherit);
  font-weight: 700;
  font-size: 1.9rem;
  line-height: 1.1;
  color: var(--sch-ink);
}
.sch-ppdb-status__badge {
  display: inline-flex;
  align-items: center;
  gap: .5rem;
  font-size: .9rem;
  font-weight: 600;
  color: var(--sch-ink);
}
.sch-ppdb-status__dot {
  width: .55rem;
  height: .55rem;
  border-radius: 999px;
  background: var(--sch-gold);
  box-shadow: 0 0 0 .28rem color-mix(in srgb, var(--sch-gold) 30%, transparent);
  flex: none;
}
.sch-ppdb-status__actions { display: flex; flex-wrap: wrap; gap: .6rem; }
@media (max-width: 560px) {
  .sch-ppdb-status__actions { width: 100%; }
  .sch-ppdb-status__actions .sch-btn { flex: 1 1 100%; justify-content: center; }
}

/* Jenjang recap — kartu ringkas, tidak perlu media. */
.sch-ppdb-levels { --sch-grid-min: 15rem; }
.sch-ppdb-levels .sch-card__body { padding: 1.1rem 1.15rem; }

/* Alur pendaftaran: nomor langkah dibuat menonjol di rel .sch-timeline. */
.sch-ppdb-steps .sch-timeline__year {
  font-family: var(--sch-display, inherit);
  font-size: 1rem;
  color: var(--sch-accent);
}
.sch-ppdb-steps .sch-timeline__title { font-size: 1.05rem; }

/* Desktop: bukan satu kolom rata kiri yang monoton (sisi kanan kosong),
   melainkan TANGGA "waterfall" — tiap langkah bergeser ke kanan, dari
   kiri-atas ke kanan-bawah, dengan konektor siku dari badge ke badge. */
@media (min-width: 900px) {
  .sch-ppdb-steps { padding-left: 0; --step-w: 24rem; container-type: inline-size; }
  .sch-ppdb-steps::before { display: none; }
  .sch-ppdb-steps > li {
    width: var(--step-w);
    max-width: 100%;
    /* offset proporsional: langkah 1 mepet kiri, langkah TERAKHIR mepet
       kanan (margin = sisa lebar), sisanya dibagi rata — otomatis skala
       dengan jumlah langkah (--n dari PHP). */
    margin-left: calc((100% - var(--step-w)) * var(--i, 0) / max(var(--n, 5) - 1, 1));
    padding: .1rem 0 2.75rem 3.5rem;
  }
  .sch-ppdb-steps > li:last-child { padding-bottom: 0; }
  .sch-ppdb-steps > li::before {
    left: 0;
    top: 0;
    width: 2.5rem;
    height: 2.5rem;
    background: var(--sch-accent);
    border: 0;
  }
  .sch-ppdb-steps .sch-timeline__year {
    position: absolute;
    left: 0;
    top: 0;
    width: 2.5rem;
    height: 2.5rem;
    display: grid;
    place-items: center;
    color: #fff;
    font-size: .82rem;
    font-weight: 700;
    z-index: 1;
  }
  /* Konektor siku: turun dari badge ini lalu belok kanan ke badge
     berikutnya. Lebar = jarak geser antar-langkah (pakai 100cqw = lebar
     .sch-ppdb-steps, jadi cocok berapa pun jumlah langkahnya). */
  .sch-ppdb-steps > li:not(:last-child)::after {
    content: "";
    position: absolute;
    left: 1.25rem;
    top: 2.5rem;
    width: calc((100cqw - var(--step-w)) / max(var(--n, 5) - 1, 1));
    height: calc(100% - 2.5rem);
    border-left: 2px solid var(--sch-accent-soft);
    border-bottom: 2px solid var(--sch-accent-soft);
    border-bottom-left-radius: .85rem;
  }
}

/* Persyaratan: daftar centang dua kolom. */
.sch-ppdb-reqs { list-style: none; margin: 0; padding: 0; }
.sch-ppdb-reqs li {
  display: flex;
  gap: .6rem;
  padding: .55rem 0;
  font-size: .95rem;
  line-height: 1.5;
  color: var(--sch-ink);
  break-inside: avoid;
  border-bottom: 1px solid var(--sch-line);
}
.sch-ppdb-reqs li svg {
  width: 1.15rem;
  height: 1.15rem;
  flex: none;
  margin-top: .1rem;
  color: var(--sch-accent);
}

/* Biaya: tabel dalam panel lembut, bisa digeser mendatar di ponsel. */
.sch-ppdb-fees-scroll { overflow-x: auto; -webkit-overflow-scrolling: touch; }
.sch-ppdb-fees {
  width: 100%;
  min-width: 26rem;
  border-collapse: collapse;
  font-size: .92rem;
}
.sch-ppdb-fees th,
.sch-ppdb-fees td {
  padding: .7rem .85rem;
  text-align: left;
  border-bottom: 1px solid var(--sch-line);
}
.sch-ppdb-fees thead th {
  font-size: .72rem;
  font-weight: 700;
  letter-spacing: .06em;
  text-transform: uppercase;
  color: var(--sch-muted);
}
.sch-ppdb-fees tbody th {
  font-weight: 700;
  color: var(--sch-ink);
}
.sch-ppdb-fees tbody td { color: var(--sch-muted); }
.sch-ppdb-fees tbody tr:last-child th,
.sch-ppdb-fees tbody tr:last-child td { border-bottom: 0; }
.sch-ppdb-fees-note {
  margin: 1rem 0 0;
  font-size: .85rem;
  line-height: 1.6;
  color: var(--sch-muted);
}

/* Kartu tautan jadwal / kontak. */
.sch-ppdb-links {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr));
  gap: 1rem;
}
/* Kartu tautan = kartu netral putih + teks gelap di KEDUA mode (sama
   seperti tampilan .sch-card mode gelap). Warna dipatok eksplisit supaya
   tidak ikut --sch-ink global yang jadi terang di mode gelap. */
.sch-ppdb-link {
  display: flex;
  flex-direction: column;
  gap: .3rem;
  padding: 1.15rem 1.2rem;
  border: 1px solid rgba(16, 42, 42, .14);
  border-radius: var(--sch-radius-lg);
  background: #fff;
  text-decoration: none;
  transition: border-color .15s ease, box-shadow .15s ease, transform .15s ease;
}
.sch-ppdb-link:hover {
  border-color: var(--sch-accent);
  box-shadow: 0 12px 30px -22px rgba(15, 61, 58, .55);
  transform: translateY(-2px);
}
.sch-ppdb-link__title { font-size: 1rem; font-weight: 700; color: #102a2a; }
.sch-ppdb-link__meta { font-size: .85rem; line-height: 1.55; color: #526568; }
@media (prefers-reduced-motion: reduce) {
  .sch-ppdb-link:hover { transform: none; }
}

/* ============================================================
   R104 — Hero layar sempit + tombol "Selengkapnya" jenjang
   Feedback user: (1) di ponsel teks hero rata kiri & menempel bawah
   sehingga area foto atas terasa kosong dan judul tampak kecil →
   pusatkan isi (H+V) & rapatkan padding atas; (2) tombol
   "Selengkapnya" jenjang tetap rata kiri padahal elemen lain di
   panel jenjang sudah rata tengah di ponsel.
   ============================================================ */
@media (max-width: 768px) {
  .sch-hero { align-items: center; }
  .sch-hero__inner { padding: clamp(3.5rem, 12vw, 6rem) 0 clamp(5rem, 16vw, 7rem); }
  .sch-hero__content { max-width: 32rem; margin-inline: auto; text-align: center; }
  .sch-hero__category { margin-inline: auto; }
  .sch-hero__lead { margin-inline: auto; max-width: 30rem; }
  .sch-hero__actions { justify-content: center; }
  /* Scrim: vignette BAWAH (bukan berat di kiri) — teks kini di tengah. */
  .sch-hero__scrim {
    background: linear-gradient(to top,
      rgba(4, 20, 18, .82) 0%, rgba(4, 20, 18, .45) 42%, rgba(4, 20, 18, .22) 100%);
  }
}

@media (max-width: 1024px) {
  .sch-bestdeal__body { display: flex; flex-direction: column; }
  .sch-bestdeal__body > .sch-bestdeal__cta { align-self: center; }
}

/* ── Formulir pendaftaran PPDB (/ppdb/daftar/) ──────────────
   Kartu putih polos (BUKAN .sch-panel yang teal), grid 2 kolom di
   desktop, kelompok bagian dengan jarak lega — mengikuti pola form
   halaman /kontak/. */
.sch-ppdb-form-wrap {
  max-width: 52rem;
  margin-inline: auto;
  background: #fff;
  border: 1px solid rgba(16, 42, 42, .12);
  border-radius: var(--sch-radius-lg);
  padding: clamp(1.25rem, 4vw, 2.25rem);
  box-shadow: 0 8px 28px -24px rgba(15, 61, 58, .5);
}
:root[data-theme="dark"] .sch-ppdb-form-wrap { background: #fff; color: #102a2a; }

.sch-ppdb-form__group {
  border: 0;
  padding: 0;
  margin: 0 0 2rem;
}
.sch-ppdb-form__group > legend {
  width: 100%;
  padding: 0 0 .65rem;
  margin-bottom: 1.1rem;
  border-bottom: 1px solid rgba(16, 42, 42, .12);
  font-family: var(--sch-display, inherit);
  font-size: .95rem;
  font-weight: 700;
  letter-spacing: .01em;
  text-transform: none;
  color: #102a2a;
}
.sch-ppdb-form__grid {
  display: grid;
  gap: 1.15rem 1.5rem;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 16rem), 1fr));
}
.sch-ppdb-form__grid .sch-field { margin-bottom: 0; }
.sch-ppdb-form .sch-label { color: #3a4a4a; font-weight: 600; }
.sch-ppdb-form .sch-input {
  background: #fff;
  border: 1px solid rgba(16, 42, 42, .18);
  color: #102a2a;
}
.sch-ppdb-form .sch-hint { color: #667; }
.sch-ppdb-form .sch-btn--lg { margin-top: .5rem; }

/* Baris pernyataan: kotak centang + teks sejajar. */
.sch-check {
  display: flex;
  gap: .65rem;
  align-items: flex-start;
  font-size: .92rem;
  line-height: 1.55;
  color: #3a4a4a;
}
.sch-check input { margin-top: .2rem; flex: none; width: 1.05rem; height: 1.05rem; accent-color: var(--sch-accent); }

/* Judul kartu / hero halaman dalam: SELALU tebal font display, sama
   seperti judul di beranda (dulu ikut font body, tampak tipis). */
.sch-profile-hero h1,
.sch-detail-hero__body h1,
.sch-detail-head h1 {
  font-family: var(--sch-display, inherit);
  font-weight: 700;
  letter-spacing: -.01em;
}

/* ── Bukti pendaftaran PPDB (/ppdb/daftar/ setelah sukses) ──────────
   Kartu putih tersusun rapi seperti dokumen; tombol "Cetak / Simpan PDF"
   memanggil window.print(), dan @media print menyisakan hanya bukti. */
.sch-ppdb-receipt {
  max-width: 48rem;
  margin-inline: auto;
  background: #fff;
  color: #102a2a;
  border: 1px solid rgba(16, 42, 42, .14);
  border-radius: var(--sch-radius-lg);
  padding: clamp(1.4rem, 4vw, 2.4rem);
  box-shadow: 0 10px 34px -24px rgba(15, 61, 58, .55);
}
.sch-rcp__head {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: .75rem 1.5rem;
  padding-bottom: 1rem;
  margin-bottom: 1.25rem;
  border-bottom: 2px solid var(--sch-accent);
}
.sch-rcp__school { margin: 0; font-family: var(--sch-display, inherit); font-weight: 700; font-size: 1.15rem; }
.sch-rcp__kind   { margin: .2rem 0 0; font-size: .85rem; color: #667; }
.sch-rcp__meta   { display: flex; flex-direction: column; gap: .2rem; font-size: .8rem; color: #445; text-align: right; }
.sch-rcp__group  { margin-top: 1.4rem; }
.sch-rcp__group h3 {
  margin: 0 0 .6rem;
  font-family: var(--sch-display, inherit);
  font-size: .82rem;
  font-weight: 700;
  letter-spacing: .04em;
  text-transform: uppercase;
  color: var(--sch-accent-dark);
}
.sch-rcp__group dl { margin: 0; }
.sch-rcp__row {
  display: grid;
  grid-template-columns: minmax(9rem, .8fr) minmax(0, 1.6fr);
  gap: .5rem 1rem;
  padding: .5rem 0;
  border-bottom: 1px solid rgba(16, 42, 42, .1);
}
.sch-rcp__row:last-child { border-bottom: 0; }
.sch-rcp__row dt { margin: 0; font-size: .82rem; color: #667; }
.sch-rcp__row dd { margin: 0; font-size: .9rem; font-weight: 600; color: #102a2a; }
.sch-rcp__files { margin: .2rem 0 0; padding-left: 1.1rem; font-size: .88rem; }
.sch-rcp__note {
  margin: 1.5rem 0 0;
  padding: .85rem 1rem;
  background: var(--sch-surface);
  border-radius: .7rem;
  font-size: .82rem;
  line-height: 1.6;
  color: #445;
}
.sch-rcp__actions { display: flex; flex-wrap: wrap; gap: .6rem; margin-top: 1.5rem; }
@media (max-width: 520px) {
  .sch-rcp__head { flex-direction: column; }
  .sch-rcp__meta { text-align: left; }
  .sch-rcp__row  { grid-template-columns: 1fr; gap: .1rem; }
  .sch-rcp__actions .sch-btn { flex: 1 1 100%; justify-content: center; }
}
@media print {
  /* Sembunyikan kerangka situs dengan display:none (BUKAN visibility:hidden +
     position:absolute — itu membuat bukti terpotong di 1 halaman). Bukti
     dibiarkan di alur normal supaya pecah halaman dengan benar. */
  .sch-header, .sch-topbar, .sch-masthead, .sch-navbar, .sch-mobile-nav,
  footer, .sch-footer, #sch-cursor, #loader, #site-search, #contact-overlay,
  .sch-edit-toggle, .sch-edit-pen, .sch-edit-labels-btn, .sch-edit-imgbtn,
  .sch-breadcrumb,
  main > .max-w-7xl:not(:has(#ppdb-receipt)),
  .sch-rcp__actions { display: none !important; }
  main, .sch-main-offset { margin: 0 !important; padding: 0 !important; }
  main > .max-w-7xl:has(#ppdb-receipt),
  main > .max-w-7xl:has(#ppdb-receipt) > * { max-width: none !important; margin: 0 !important; padding: 0 !important; }
  #ppdb-receipt {
    position: static !important;
    margin: 0 !important; border: 0 !important; box-shadow: none !important;
    padding: 0 !important; max-width: none !important; width: auto !important;
  }
  .sch-rcp__group { break-inside: avoid-page; margin-top: .9rem; }
  .sch-rcp__row   { break-inside: avoid; }
  :root, html, body { background: #fff !important; }
}

/* ── Judul panel/kartu = KAPSUL (mengikuti gaya kapsul kategori di kartu
   landing page) — chip mint + teks teal tua, selalu terbaca di atas panel
   teal (mode terang) maupun kartu putih (mode gelap), dan mudah dipindai.
   `!important` pada warna: aturan `.sch-panel .text-neutral-950` (0,2,0)
   lebih spesifik dan akan memutihkan teks chip kalau tidak dipaksa. */
.sch-panel > h2,
.sch-panel > h3,
.sch-panel > h2[class],
.sch-panel > h3[class],
.sch-profile-grid h2,
.sch-profile-grid h2[class],
.sch-detail-cols__aside .sch-panel h2 {
  display: inline-block;
  align-self: flex-start;
  width: auto;
  margin: 0 0 1.1rem;
  padding: .42rem .9rem;
  background: #dcf0ec !important;
  color: #0f3d3a !important;
  border: 0;
  border-radius: 999px;
  font-family: var(--sch-display, ui-sans-serif, system-ui, sans-serif);
  font-size: .8rem;
  font-weight: 700;
  letter-spacing: .035em;
  line-height: 1.3;
  text-transform: none;
}
@media print {
  .sch-panel > h2, .sch-panel > h3, .sch-profile-grid h2 { background: transparent !important; color: #0a0a0a !important; padding: 0 !important; }
}

/* Grid "showcase" — kartu lebih BESAR (mis. prestasi) supaya foto pemenang
   lebih terlihat: 2–3 kolom, media rasio lanskap 16:10. */
.sch-grid--showcase {
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 23rem), 1fr));
  gap: 1.5rem;
}
.sch-grid--showcase .sch-card__media { aspect-ratio: 16 / 10; }
.sch-grid--showcase .sch-card__body { padding: 1.5rem 1.5rem 1.6rem; }
@media (max-width: 520px) {
  .sch-grid--showcase .sch-card__media { aspect-ratio: 4 / 3; }
}
