/* =============================================================
   nalara studio — Stylesheet Utama
   Platform kelas belajar AI
   Desain: Geometric Modernism / Swiss Design
   ============================================================= */

/* --- 1. FONT IMPORT --- 
   Menggunakan Plus Jakarta Sans sebagai fallback utama
   yang sangat mirip Elm/Elms Sans. */
@import url('https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&display=swap');

/* --- 2. CSS CUSTOM PROPERTIES (VARIABLES) ---
   Semua token warna dan spacing didefinisikan di sini
   agar dark/light mode bisa di-switch hanya dengan mengubah
   class pada <body>. */
:root {
  /* ---- Palet Warna ---- */
  --color-primary:       #10162A;  /* Neural Dark */
  --color-accent:        #1B64F2;  /* Neural Blue */
  --color-muted:         #8397A8;  /* Neural Gray */
  --color-bg:            #FBF9F5;  /* Soft Cream (light mode) */
  --color-card:          #FFFFFF;  /* Card fill (light mode) */
  --color-border:        #E2E0DB;  /* Garis pembatas subtle */
  --color-text:          #10162A;  /* Teks utama (light mode) */
  --color-text-secondary:#5A6475;  /* Teks sekunder */
  --color-surface:       #F3F1EC;  /* Surface area lebih gelap */

  /* ---- Tipografi ---- */
  --font-family:         'Plus Jakarta Sans', system-ui, -apple-system, sans-serif;
  --font-weight-regular: 400;
  --font-weight-medium:  500;
  --font-weight-semibold:600;
  --font-weight-bold:    700;
  --font-weight-extrabold:800;

  /* ---- Spacing ---- */
  --space-xs:  4px;
  --space-sm:  8px;
  --space-md:  16px;
  --space-lg:  24px;
  --space-xl:  40px;
  --space-2xl: 64px;
  --space-3xl: 96px;
  --space-4xl: 128px;

  /* ---- Layout ---- */
  --max-width:     1200px;
  --header-height: 72px;

  /* ---- Transisi ---- */
  --ease-smooth: cubic-bezier(0.25, 0.46, 0.45, 0.94);
  --transition-fast: 0.2s var(--ease-smooth);
  --transition-med:  0.35s var(--ease-smooth);
}

/* --- 3. DARK MODE OVERRIDES ---
   Ketika <body> memiliki class .dark-theme,
   semua variabel warna di-override. */
body.dark-theme {
  --color-bg:            #10162A;
  --color-card:          #182038;
  --color-border:        #2A3552;
  --color-text:          #F9FAFC;
  --color-text-secondary:#A0AEC0;
  --color-surface:       #151D33;
  /* Variabel tambahan khusus SVG geometris di dark mode.
     Digunakan agar ornamen tetap terlihat jelas saat background gelap. */
  --color-geo-fg:        #F9FAFC;   /* Elemen gelap jadi terang */
  --color-geo-bg-inv:    #182038;   /* Invers background (untuk lingkaran di dalam kotak) */
}

/* --- 3b. LIGHT MODE GEO VARIABLES ---
   Variabel warna SVG geometris untuk mode terang (default).
     Didefinisikan di :root agar bersama variabel lainnya. */
:root {
  --color-geo-fg:        #10162A;   /* Elemen foreground gelap */
  --color-geo-bg-inv:    #FBF9F5;   /* Invers background (cream) */
}

/* --- 4. RESET & BASE STYLES ---
   Normalize dasar agar konsisten lintas browser. */
*,
*::before,
*::after {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

html {
  scroll-behavior: smooth;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

body {
  font-family: var(--font-family);
  font-weight: var(--font-weight-regular);
  font-size: 16px;
  line-height: 1.6;
  color: var(--color-text);
  background-color: var(--color-bg);
  /* Transisi halus saat ganti tema */
  transition: background-color var(--transition-med), color var(--transition-med);
  overflow-x: hidden;
}

/* Disable scroll ketika modal terbuka */
body.no-scroll {
  overflow: hidden;
}

a {
  color: inherit;
  text-decoration: none;
}

ul, ol {
  list-style: none;
}

img, svg {
  display: block;
  max-width: 100%;
}

/* --- 5. CUSTOM SCROLLBAR ---
   Scrollbar minimalis yang konsisten di Webkit. */
::-webkit-scrollbar {
  width: 6px;
}
::-webkit-scrollbar-track {
  background: transparent;
}
::-webkit-scrollbar-thumb {
  background: var(--color-muted);
  border-radius: 3px;
}
::-webkit-scrollbar-thumb:hover {
  background: var(--color-accent);
}

/* --- 6. HEADER / NAVIGASI ---
   Fixed di atas, backdrop blur, garis bawah tegas. */
.site-header {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  z-index: 1000;
  height: var(--header-height);
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0 var(--space-xl);
  /* Garis bawah tipis menggantikan shadow */
  border-bottom: 1px solid var(--color-border);
  background-color: var(--color-bg);
  transition: background-color var(--transition-med), border-color var(--transition-med);
}

/* Logo brand di kiri */
.brand {
  display: flex;
  align-items: center;
  gap: var(--space-sm);
}

/* Ikon geometris kecil di samping nama brand */
.brand-icon {
  width: 28px;
  height: 28px;
  flex-shrink: 0;
}

.brand-name {
  font-weight: var(--font-weight-extrabold);
  font-size: 1.125rem;
  letter-spacing: -0.02em;
  color: var(--color-text);
}

/* Navigasi kanan: link + toggle tema */
.header-right {
  display: flex;
  align-items: center;
  gap: var(--space-lg);
}

.nav-links {
  display: flex;
  align-items: center;
  gap: var(--space-md);
}

.nav-links a {
  font-weight: var(--font-weight-medium);
  font-size: 0.9rem;
  color: var(--color-text-secondary);
  transition: color var(--transition-fast);
  position: relative;
}

/* Underline aksen saat hover */
.nav-links a::after {
  content: '';
  position: absolute;
  bottom: -4px;
  left: 0;
  width: 0;
  height: 2px;
  background-color: var(--color-accent);
  transition: width var(--transition-fast);
}

.nav-links a:hover {
  color: var(--color-text);
}

.nav-links a:hover::after {
  width: 100%;
}

/* Tombol toggle dark/light mode */
.theme-toggle {
  background: none;
  border: 1px solid var(--color-border);
  border-radius: 50%;
  width: 40px;
  height: 40px;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  color: var(--color-text);
  transition: border-color var(--transition-fast), background-color var(--transition-fast);
}

.theme-toggle:hover {
  border-color: var(--color-accent);
  background-color: var(--color-surface);
}

.theme-toggle svg {
  width: 18px;
  height: 18px;
}

/* Sembunyikan ikon matahari di light mode, ikon bulan di dark mode */
body:not(.dark-theme) .icon-sun {
  display: none;
}
body.dark-theme .icon-moon {
  display: none;
}

/* --- 7. KONTEN UTAMA ---
   Padding atas agar tidak tertutup header fixed. */
main {
  padding-top: var(--header-height);
}

/* --- 8. HERO SECTION ---
   Layout 2 kolom asimetris. Kiri: teks. Kanan: SVG geometris.
   Terinspirasi dari layout Swiss Design yang tegas.

   CATATAN: Hero TIDAK menggunakan min-height: 100vh.
   Padding dikurangi agar hero compact dan pas di layar
   tanpa white space berlebih. */
.hero {
  /* Tidak ada min-height — ukuran mengikuti konten + padding */
  display: grid;
  grid-template-columns: 1fr 1fr;
  align-items: center;
  gap: var(--space-xl);
  /* Padding vertikal dikurangi dari 128px/96px → 64px/40px */
  padding: var(--space-3xl) var(--space-xl) var(--space-2xl);
  max-width: var(--max-width);
  margin: 0 auto;
}

.hero-text {
  max-width: 560px;
}

/* Label kecil di atas headline */
.hero-label {
  display: inline-block;
  font-weight: var(--font-weight-semibold);
  font-size: 0.75rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--color-accent);
  border: 1px solid var(--color-accent);
  padding: var(--space-xs) var(--space-sm);
  margin-bottom: var(--space-lg);
}

/* Headline utama — kontras berat sangat tinggi */
.hero-headline {
  font-weight: var(--font-weight-extrabold);
  font-size: clamp(2.4rem, 5vw, 3.6rem);
  line-height: 1.08;
  letter-spacing: -0.03em;
  color: var(--color-text);
  margin-bottom: var(--space-lg);
}

/* Kata aksen di dalam headline */
.hero-headline .accent {
  color: var(--color-accent);
}

/* Sub-headline */
.hero-sub {
  font-size: 1.05rem;
  font-weight: var(--font-weight-regular);
  color: var(--color-text-secondary);
  line-height: 1.7;
  max-width: 460px;
  margin-bottom: var(--space-xl);
}

/* Tombol CTA — flat, border tegas, bukan pill/kapsul */
.hero-cta {
  display: inline-flex;
  align-items: center;
  gap: var(--space-sm);
  font-family: var(--font-family);
  font-weight: var(--font-weight-semibold);
  font-size: 0.95rem;
  color: var(--color-bg);
  background-color: var(--color-accent);
  border: 2px solid var(--color-accent);
  padding: 14px 32px;
  cursor: pointer;
  transition: background-color var(--transition-fast), color var(--transition-fast), transform var(--transition-fast);
}

.hero-cta:hover {
  background-color: transparent;
  color: var(--color-accent);
  transform: translateY(-2px);
}

.hero-cta svg {
  width: 16px;
  height: 16px;
  transition: transform var(--transition-fast);
}

.hero-cta:hover svg {
  transform: translateX(4px);
}

/* --- 9. HERO SVG GEOMETRIS ---
   Komposisi seni geometris di kolom kanan.
   Terinspirasi dari Bauhaus / Swiss Design:
   catur, lingkaran aksen, segitiga, garis radial. */
.hero-visual {
  display: flex;
  align-items: center;
  justify-content: center;
  position: relative;
}

.hero-visual svg {
  width: 100%;
  max-width: 420px; /* Diperkecil dari 480 → 420 agar lebih proporsional */
  height: auto;
  /* Transisi warna halus saat ganti tema */
  transition: fill var(--transition-med), stroke var(--transition-med);
}

/* --- 9b. WARNA SVG GEOMETRIS YANG RESPONSIF TEMA ---
   Class-class ini mengontrol warna elemen SVG agar
   otomatis berubah saat dark/light mode di-toggle.

   PENJELASAN BUG SEBELUMNYA:
   Elemen SVG sebelumnya menggunakan warna hardcoded
   (misal fill="#10162A") sehingga di dark mode (background
   #10162A) elemen catur, garis, dan bentuk gelap menjadi
   tidak terlihat karena warnanya sama dengan latar.

   SOLUSI:
   Warna sekarang dikendalikan via CSS variables yang berubah
   sesuai tema, sehingga kontras selalu terjaga.

   .geo-fg     → elemen foreground utama (catur, segitiga, garis)
   .geo-grid   → garis grid tipis struktur
   .geo-bg-inv → elemen yang merupakan invers dari background */

/* Foreground: warna teks (gelap di light, terang di dark) */
.geo-art .geo-fg {
  fill: var(--color-geo-fg);
  stroke: var(--color-geo-fg);
}

/* Grid lines: warna border (subtle di kedua tema) */
.geo-art .geo-grid {
  stroke: var(--color-border);
}

/* Background inverse: untuk elemen di dalam kotak gelap.
   Di light mode = cream (di atas kotak gelap).
   Di dark mode = warna card gelap (di atas kotak terang). */
.geo-art .geo-bg-inv {
  fill: var(--color-geo-bg-inv);
}

/* --- 10. PEMBATAS SECTION ---
   Garis horizontal tegas menggantikan shadow/gradient. */
.section-divider {
  max-width: var(--max-width);
  margin: 0 auto;
  padding: 0 var(--space-xl);
  border: none;
  border-top: 1px solid var(--color-border);
}

/* --- 11. SECTION MATERI ---
   Grid kartu materi AI. */
.materi-section {
  padding: var(--space-4xl) var(--space-xl);
  max-width: var(--max-width);
  margin: 0 auto;
}

/* Header section: label + judul */
.section-header {
  margin-bottom: var(--space-3xl);
}

.section-label {
  display: inline-block;
  font-weight: var(--font-weight-semibold);
  font-size: 0.75rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--color-accent);
  border: 1px solid var(--color-accent);
  padding: var(--space-xs) var(--space-sm);
  margin-bottom: var(--space-md);
}

.section-title {
  font-weight: var(--font-weight-extrabold);
  font-size: clamp(1.8rem, 3.5vw, 2.6rem);
  line-height: 1.12;
  letter-spacing: -0.02em;
  color: var(--color-text);
}

/* --- 12. GRID KARTU MATERI ---
   3 kolom desktop, 2 tablet, 1 mobile.
   Layout dinamis: kartu pertama lebih besar (span 2 kolom)
   untuk memecah monoton grid 3-kolom kaku. */
.materi-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: var(--space-lg);
}

/* Kartu pertama dan keempat span 2 kolom — layout asimetris */
.materi-card:nth-child(1),
.materi-card:nth-child(4) {
  grid-column: span 2;
}

/* --- 13. KARTU MATERI INDIVIDUAL ---
   Desain flat, border tegas, bukan shadow.
   Hover: garis aksen biru muncul di sisi kiri. */
.materi-card {
  background-color: var(--color-card);
  border: 1px solid var(--color-border);
  border-left: 3px solid transparent;
  padding: var(--space-xl);
  cursor: pointer;
  transition: border-color var(--transition-fast), transform var(--transition-fast), background-color var(--transition-med);
  position: relative;
  display: flex;
  flex-direction: column;
  gap: var(--space-md);
}

.materi-card:hover {
  border-left-color: var(--color-accent);
  transform: translateY(-4px);
}

/* Layout horizontal untuk kartu span-2 */
.materi-card:nth-child(1),
.materi-card:nth-child(4) {
  flex-direction: row;
  align-items: flex-start;
  gap: var(--space-xl);
}

.materi-card:nth-child(1) .card-content,
.materi-card:nth-child(4) .card-content {
  flex: 1;
}

/* Badge nomor */
.card-badge {
  font-weight: var(--font-weight-extrabold);
  font-size: 0.8rem;
  color: var(--color-accent);
  letter-spacing: 0.02em;
  flex-shrink: 0;
}

/* Judul kartu */
.card-title {
  font-weight: var(--font-weight-bold);
  font-size: 1.1rem;
  line-height: 1.3;
  letter-spacing: -0.01em;
  color: var(--color-text);
}

/* Ringkasan singkat */
.card-desc {
  font-size: 0.9rem;
  color: var(--color-text-secondary);
  line-height: 1.6;
}

/* Indikator "Buka Materi" */
.card-action {
  font-weight: var(--font-weight-semibold);
  font-size: 0.82rem;
  color: var(--color-accent);
  display: inline-flex;
  align-items: center;
  gap: var(--space-xs);
  margin-top: auto;
  transition: gap var(--transition-fast);
}

.materi-card:hover .card-action {
  gap: var(--space-sm);
}

.card-action svg {
  width: 14px;
  height: 14px;
}

/* --- 14. MODAL FULL-SCREEN ---
   Jendela pop-up materi: fixed, fullscreen, z-index tertinggi.
   Hanya bisa ditutup lewat tombol Kembali. */
.modal-overlay {
  position: fixed;
  top: 0;
  left: 0;
  width: 100vw;
  height: 100vh;
  z-index: 9999;
  background-color: var(--color-bg);
  /* Default tersembunyi */
  opacity: 0;
  pointer-events: none;
  transition: opacity var(--transition-med);
  display: flex;
  flex-direction: column;
}

/* State aktif modal */
.modal-overlay.active {
  opacity: 1;
  pointer-events: auto;
}

/* Header modal */
.modal-header {
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: var(--space-lg) var(--space-xl);
  border-bottom: 1px solid var(--color-border);
  background-color: var(--color-bg);
  transition: background-color var(--transition-med), border-color var(--transition-med);
}

.modal-header-left {
  display: flex;
  align-items: center;
  gap: var(--space-md);
}

.modal-badge {
  font-weight: var(--font-weight-bold);
  font-size: 0.8rem;
  color: var(--color-accent);
  border: 1px solid var(--color-accent);
  padding: var(--space-xs) 10px;
}

.modal-title {
  font-weight: var(--font-weight-extrabold);
  font-size: 1.3rem;
  letter-spacing: -0.02em;
  color: var(--color-text);
}

/* Tombol kembali — SATU-SATUNYA cara menutup modal */
.modal-close {
  font-family: var(--font-family);
  font-weight: var(--font-weight-semibold);
  font-size: 0.9rem;
  color: var(--color-text);
  background: none;
  border: 1px solid var(--color-border);
  padding: 10px 20px;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  gap: var(--space-sm);
  transition: border-color var(--transition-fast), background-color var(--transition-fast);
}

.modal-close:hover {
  border-color: var(--color-accent);
  background-color: var(--color-surface);
}

.modal-close svg {
  width: 16px;
  height: 16px;
}

/* Body modal — area konten scrollable */
.modal-body {
  flex: 1;
  overflow-y: auto;
  padding: var(--space-3xl) var(--space-xl);
}

/* Kontainer teks modal */
.modal-content {
  max-width: 720px;
  margin: 0 auto;
}

/* Sub-judul dalam modal */
.modal-content h2 {
  font-weight: var(--font-weight-extrabold);
  font-size: 1.5rem;
  letter-spacing: -0.02em;
  color: var(--color-text);
  margin-top: var(--space-2xl);
  margin-bottom: var(--space-md);
  /* Garis dekoratif di atas sub-judul */
  padding-top: var(--space-md);
  border-top: 1px solid var(--color-border);
}

.modal-content h2:first-child {
  margin-top: 0;
  border-top: none;
  padding-top: 0;
}

.modal-content p {
  font-size: 0.95rem;
  line-height: 1.8;
  color: var(--color-text-secondary);
  margin-bottom: var(--space-md);
}

.modal-content ul {
  padding-left: var(--space-lg);
  margin-bottom: var(--space-md);
}

.modal-content ul li {
  font-size: 0.95rem;
  line-height: 1.8;
  color: var(--color-text-secondary);
  position: relative;
  padding-left: var(--space-md);
  margin-bottom: var(--space-sm);
}

/* Bullet custom: garis pendek aksen biru */
.modal-content ul li::before {
  content: '';
  position: absolute;
  left: 0;
  top: 12px;
  width: 6px;
  height: 6px;
  background-color: var(--color-accent);
}

/* --- 15. SECTION KONTAK ---
   Kartu kontak minimalis dan elegan. */
.kontak-section {
  padding: var(--space-4xl) var(--space-xl);
  max-width: var(--max-width);
  margin: 0 auto;
}

.kontak-card {
  background-color: var(--color-card);
  border: 1px solid var(--color-border);
  padding: var(--space-3xl);
  text-align: center;
  max-width: 640px;
  margin: 0 auto;
  transition: background-color var(--transition-med), border-color var(--transition-med);
}

.kontak-card .section-label {
  margin-bottom: var(--space-lg);
}

.kontak-title {
  font-weight: var(--font-weight-extrabold);
  font-size: clamp(1.4rem, 2.5vw, 1.8rem);
  line-height: 1.2;
  letter-spacing: -0.02em;
  color: var(--color-text);
  margin-bottom: var(--space-lg);
}

.kontak-desc {
  font-size: 0.95rem;
  color: var(--color-text-secondary);
  line-height: 1.7;
  margin-bottom: var(--space-xl);
}

/* Area email dan tombol salin */
.kontak-email-group {
  display: inline-flex;
  align-items: center;
  gap: var(--space-md);
}

.kontak-email {
  font-weight: var(--font-weight-semibold);
  font-size: 1rem;
  color: var(--color-accent);
  border-bottom: 1px solid var(--color-accent);
  padding-bottom: 2px;
  transition: color var(--transition-fast);
}

.kontak-email:hover {
  color: var(--color-text);
  border-bottom-color: var(--color-text);
}

.btn-copy {
  font-family: var(--font-family);
  font-weight: var(--font-weight-semibold);
  font-size: 0.82rem;
  color: var(--color-text);
  background: none;
  border: 1px solid var(--color-border);
  padding: 8px 16px;
  cursor: pointer;
  transition: border-color var(--transition-fast), background-color var(--transition-fast);
}

.btn-copy:hover {
  border-color: var(--color-accent);
  background-color: var(--color-surface);
}

.btn-copy.copied {
  border-color: var(--color-accent);
  color: var(--color-accent);
}

/* --- 16. FOOTER ---
   Latar Neural Dark, teks muted, simpel. */
.site-footer {
  background-color: #10162A;
  border-top: 1px solid #2A3552;
  padding: var(--space-xl);
  text-align: center;
}

.footer-text {
  font-size: 0.82rem;
  color: #8397A8;
  letter-spacing: 0.01em;
}

/* --- 17. RESPONSIVE — TABLET (max-width: 900px) ---
   Grid berubah jadi 2 kolom, hero tetap 2 kolom
   tapi dengan padding lebih kecil. */
@media (max-width: 900px) {
  .hero {
    grid-template-columns: 1fr 1fr;
    gap: var(--space-lg); /* Diperkecil dari xl → lg */
    padding: var(--space-2xl) var(--space-xl) var(--space-xl);
  }

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

  /* Di tablet, kartu span-2 tetap 2 kolom */
  .materi-card:nth-child(1),
  .materi-card:nth-child(4) {
    grid-column: span 2;
  }

  .hero-visual svg {
    max-width: 320px;
  }
}

/* --- 18. RESPONSIVE — MOBILE (max-width: 640px) ---
   Semua jadi 1 kolom, hero stack vertikal. */
@media (max-width: 640px) {
  :root {
    --space-xl:  24px;
    --space-2xl: 48px;
    --space-3xl: 64px;
    --space-4xl: 80px;
  }

  .site-header {
    padding: 0 var(--space-lg);
  }

  .brand-name {
    font-size: 1rem;
  }

  /* Di mobile, sembunyikan teks nav, tampilkan hanya jika perlu */
  .nav-links {
    gap: var(--space-sm);
  }

  .nav-links a {
    font-size: 0.82rem;
  }

  /* Hero di mobile: stack vertikal, compact.
     Padding dikurangi agar tidak terlalu panjang. */
  .hero {
    grid-template-columns: 1fr;
    gap: var(--space-lg); /* Diperkecil dari 2xl → lg */
    padding: var(--space-xl) var(--space-lg) var(--space-lg);
    min-height: auto;
  }

  .hero-visual {
    order: -1; /* SVG di atas di mobile */
  }

  .hero-visual svg {
    max-width: 220px; /* Diperkecil dari 280 → 220 */
  }

  .hero-headline {
    font-size: 1.75rem; /* Diperkecil dari 2rem agar lebih compact */
  }

  .materi-section,
  .kontak-section {
    padding: var(--space-2xl) var(--space-lg);
  }

  .materi-grid {
    grid-template-columns: 1fr;
  }

  /* Di mobile, semua kartu span penuh */
  .materi-card:nth-child(1),
  .materi-card:nth-child(4) {
    grid-column: span 1;
    flex-direction: column;
  }

  .kontak-card {
    padding: var(--space-xl);
  }

  .kontak-email-group {
    flex-direction: column;
    gap: var(--space-sm);
  }

  .modal-header {
    flex-direction: column;
    align-items: flex-start;
    gap: var(--space-md);
  }

  .modal-close {
    align-self: flex-end;
  }

  .modal-body {
    padding: var(--space-xl) var(--space-lg);
  }
}
