/* ==========================================================================
   Panel Setelan — font, warna, jarak & mode baca
   Dikontrol lewat data-attribute di <html>, dibaca ulang oleh var CSS di bawah.
   ========================================================================== */

:root {
  /* default font pilihan */
  --f-answer: var(--display);   /* font "Contoh arti kata" / jawaban */
  --f-kanji: var(--serif);      /* font huruf Jepang di soal & jawaban */
  --f-furigana-size: 0.5em;

  /* default warna elemen yang bisa diganti */
  --c-kanji: var(--ink);
  --c-answer: var(--hanko);
  --c-furigana: var(--ink-soft);

  /* jarak & rapat baris */
  --card-gap-x: 32px;
  --card-gap-y: 34px;
  --card-line-h: 1.65;
}

/* ---------- Font jawaban / label ---------- */
html[data-f-answer="poppins"]     { --f-answer: "Poppins", var(--sans); }
html[data-f-answer="lora"]        { --f-answer: "Lora", var(--serif); }
html[data-f-answer="mudah-baca"]  { --f-answer: "Atkinson Hyperlegible", var(--sans); }
html[data-f-answer="lucu"]        { --f-answer: "Baloo 2", var(--display); }

/* ---------- Gaya huruf Jepang (kanji & furigana) ---------- */
html[data-f-kanji="mincho"] { --f-kanji: "Noto Serif JP", serif; }
html[data-f-kanji="gothic"] { --f-kanji: "Zen Maru Gothic", sans-serif; }
html[data-f-kanji="lucu"]   { --f-kanji: "Baloo 2", "Zen Maru Gothic", sans-serif; }

/* ---------- Jarak kartu ---------- */
html[data-card-gap="rapat"] { --card-gap-x: 20px; --card-gap-y: 20px; }
html[data-card-gap="normal"] { --card-gap-x: 32px; --card-gap-y: 34px; }
html[data-card-gap="lebar"] { --card-gap-x: 44px; --card-gap-y: 46px; }
html[data-card-gap="luas"]  { --card-gap-x: 56px; --card-gap-y: 58px; }

/* ---------- Spasi baris ---------- */
html[data-line-gap="rapat"]        { --card-line-h: 1.4; }
html[data-line-gap="normal"]       { --card-line-h: 1.65; }
html[data-line-gap="lega"]         { --card-line-h: 1.9; }
html[data-line-gap="sangat-lega"]  { --card-line-h: 2.2; }

/* ---------- Ukuran teks soal ---------- */
html[data-q-text-size="kecil"]        { --q-text-size: 1.2rem; }
html[data-q-text-size="normal"]       { --q-text-size: 1.5rem; }
html[data-q-text-size="besar"]        { --q-text-size: 1.8rem; }
html[data-q-text-size="sangat-besar"] { --q-text-size: 2.2rem; }

/* ---------- Terapkan ke elemen kartu ---------- */
.face .q-text {
  font-family: var(--f-kanji);
  color: var(--c-kanji);
  line-height: var(--card-line-h);
  padding: 0 var(--card-gap-x);
  font-size: var(--q-text-size);
}

.face {
  padding-top: var(--card-gap-y);
  padding-bottom: var(--card-gap-y);
}

.face.back .answer-word {
  font-family: var(--f-answer);
  background: none;
  -webkit-text-fill-color: initial;
  color: var(--c-answer);
}

/* Furigana: warna dikontrol panel setelan (--c-furigana), font ikut --f-kanji.
   `!important` dipakai supaya swatch warna tetap menang atas gradient/-webkit-text-fill-color di elemen jawaban. */
rt, .furigana {
  font-family: var(--f-kanji);
  color: var(--c-furigana) !important;
  -webkit-text-fill-color: var(--c-furigana) !important;
  background: none !important;
  font-weight: 400;
}

/* ==========================================================================
   DARK MODE SAFETY OVERRIDE
   Swatch warna user (kanji / arti / furigana) di panel setelan disimpan
   sebagai warna terang untuk light mode. Di dark mode, warna gelap seperti
   #16232F atau #1565C0 di atas background gelap = teks tidak terbaca.
   Solusinya: settings.js mem-push --c-*-light dan --c-*-dark. CSS di sini
   memilih varian yang sesuai theme, sehingga swatch tetap dihormati di light
   mode dan otomatis dicerahkan di dark mode. */
:root {
  --c-kanji: var(--c-kanji-light, #16232F);
  --c-answer: var(--c-answer-light, #1565C0);
  --c-furigana: var(--c-furigana-light, #4A5C6B);
}
:root[data-theme="dark"] {
  --c-kanji: var(--c-kanji-dark, #F1F5F9);
  --c-answer: var(--c-answer-dark, #7DD3FC);
  --c-furigana: var(--c-furigana-dark, rgba(226, 232, 240, 0.78));
}

/* Elemen teks jawaban / kanji / furigana tetap ikut swatch, tapi
   di dark mode swatch dilarang menang jika lebih gelap dari background. */
:root[data-theme="dark"] .face .q-text { color: var(--c-kanji); }
:root[data-theme="dark"] .face.back .answer-word {
  color: var(--c-answer);
  -webkit-text-fill-color: var(--c-answer);
  background: none;
}
:root[data-theme="dark"] rt,
:root[data-theme="dark"] .furigana {
  color: var(--c-furigana) !important;
  -webkit-text-fill-color: var(--c-furigana) !important;
}

/* Kartu di dark mode: pastikan surface tidak putih & bordernya kelihatan */
:root[data-theme="dark"] .face {
  background: #182530;
  border-color: rgba(125, 211, 252, 0.22);
  box-shadow: 0 22px 56px rgba(0,0,0,0.55), 0 2px 8px rgba(0,0,0,0.35);
}
:root[data-theme="dark"] .q-opt {
  background: rgba(30, 41, 55, 0.85);
  border-color: rgba(125, 211, 252, 0.20);
  color: var(--c-kanji);
}
:root[data-theme="dark"] .q-opt:hover:not(.is-correct):not(.is-wrong):not(.is-disabled) {
  background: rgba(45, 58, 76, 0.95);
  border-color: #7DD3FC;
}
:root[data-theme="dark"] .q-opt-text { color: var(--c-kanji); }

/* Warm Paper: di dark mode, background hangat gelap tetap butuh teks terang.
   Sebelumnya swatch --c-kanji user tetap menang -> hitam di atas coklat gelap. */
html[data-warm-paper="on"][data-theme="dark"] .face {
  background: #2A2116 !important;
  color: #EBDDC2;
  border-color: rgba(235, 221, 194, 0.18);
}
html[data-warm-paper="on"][data-theme="dark"] .face .q-text,
html[data-warm-paper="on"][data-theme="dark"] .face .q-opt-text,
html[data-warm-paper="on"][data-theme="dark"] .face.back .answer-explanation {
  color: #F5E9CE !important;
}
html[data-warm-paper="on"][data-theme="dark"] .face.back .answer-word {
  color: #FFD180 !important;
  -webkit-text-fill-color: #FFD180 !important;
}
html[data-warm-paper="on"][data-theme="dark"] rt,
html[data-warm-paper="on"][data-theme="dark"] .furigana {
  color: rgba(245, 233, 206, 0.72) !important;
  -webkit-text-fill-color: rgba(245, 233, 206, 0.72) !important;
}
html[data-warm-paper="on"][data-theme="dark"] .q-opt {
  background: rgba(59, 47, 34, 0.85);
  border-color: rgba(235, 221, 194, 0.20);
}

/* Warm paper di LIGHT mode: teks juga harus tetap gelap di atas kertas krem */
html[data-warm-paper="on"]:not([data-theme="dark"]) .face .q-text,
html[data-warm-paper="on"]:not([data-theme="dark"]) .face .q-opt-text {
  color: #3B2F22 !important;
}
html[data-warm-paper="on"]:not([data-theme="dark"]) rt,
html[data-warm-paper="on"]:not([data-theme="dark"]) .furigana {
  color: rgba(59, 47, 34, 0.68) !important;
  -webkit-text-fill-color: rgba(59, 47, 34, 0.68) !important;
}
html[data-warm-paper="on"]:not([data-theme="dark"]) .q-opt {
  background: rgba(251, 243, 227, 0.6);
  border-color: rgba(93, 64, 55, 0.25);
}

/* ---------- Mode Fokus ---------- */
html[data-focus="on"] .topbar,
html[data-focus="on"] .controls,
html[data-focus="on"] .card-nav .nav-btn {
  opacity: 0.25;
  transition: opacity .2s ease;
}
html[data-focus="on"] .topbar:hover,
html[data-focus="on"] .controls:hover,
html[data-focus="on"] .card-nav .nav-btn:hover {
  opacity: 1;
}

/* ---------- Kertas Hangat (warm paper overlay) ---------- */
html[data-warm-paper="on"] .face {
  background: #FBF3E3 !important;
  color: #3B2F22;
}
html[data-warm-paper="on"][data-theme="dark"] .face {
  background: #2A2116 !important;
  color: #EBDDC2;
}

/* ---------- Layar penuh kartu ---------- */
html[data-fullscreen-card="on"] .stage { padding: 6px 0 24px; }
html[data-fullscreen-card="on"] .card-scene { max-width: 100%; }
html[data-fullscreen-card="on"] .face { min-height: 70vh; }

/* ==========================================================================
   Tombol trigger + panel setelan itu sendiri
   ========================================================================== */

.settings-toggle {
  width: 36px;
  height: 36px;
  border-radius: 50%;
  border: 1px solid var(--line);
  background: var(--surface-solid);
  color: var(--ink);
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 1rem;
  transition: all .15s ease;
}
.settings-toggle:hover { border-color: var(--gold); transform: translateY(-1px); }

.settings-overlay {
  position: fixed;
  inset: 0;
  z-index: 90;
  background: rgba(10, 16, 22, 0.35);
  backdrop-filter: blur(2px);
  display: none;
}
.settings-overlay.open { display: block; }

.settings-panel {
  position: fixed;
  top: 0;
  right: 0;
  z-index: 91;
  width: min(360px, 92vw);
  height: 100%;
  overflow-y: auto;
  background: var(--surface-solid);
  border-left: 1px solid var(--line);
  box-shadow: -18px 0 44px var(--shadow);
  padding: 22px 20px 60px;
  transform: translateX(100%);
  transition: transform .28s cubic-bezier(.2,.8,.2,1);
}
.settings-panel.open { transform: translateX(0); }

.settings-panel h2 {
  font-family: var(--display);
  font-size: 1.1rem;
  margin: 0 0 18px;
  display: flex;
  align-items: center;
  justify-content: space-between;
}

.settings-panel .close-settings {
  border: none;
  background: none;
  font-size: 1.2rem;
  cursor: pointer;
  color: var(--ink-soft);
  line-height: 1;
}

.settings-group {
  margin-bottom: 22px;
}

.settings-group .group-label {
  font-family: var(--mono);
  font-size: 0.72rem;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--ink-soft);
  margin: 0 0 10px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  cursor: pointer;
}

.settings-group.collapsible .group-body { display: none; }
.settings-group.collapsible.expanded .group-body { display: block; }
.settings-group .group-label .chev { transition: transform .15s ease; font-size: 0.65rem; }
.settings-group.collapsible.expanded .group-label .chev { transform: rotate(180deg); }

.opt-btn {
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: space-between;
  text-align: left;
  font-family: var(--sans);
  font-weight: 600;
  font-size: 0.95rem;
  padding: 12px 16px;
  margin-bottom: 8px;
  border-radius: 12px;
  border: 1px solid var(--line);
  background: var(--surface-solid);
  color: var(--ink);
  cursor: pointer;
  transition: all .15s ease;
}
.opt-btn:hover { border-color: var(--gold); }
.opt-btn .opt-tag {
  font-family: var(--mono);
  font-size: 0.68rem;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--ink-soft);
}
.opt-btn.active {
  background: var(--hanko);
  color: #fff;
  border-color: var(--hanko);
}
.opt-btn.active .opt-tag { color: rgba(255,255,255,0.75); }
.opt-btn.active .opt-check { display: inline-flex; }
.opt-check {
  display: none;
  width: 18px;
  height: 18px;
  border-radius: 50%;
  background: rgba(255,255,255,0.2);
  align-items: center;
  justify-content: center;
  font-size: 0.7rem;
}

.pill-row {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.pill-btn {
  font-family: var(--sans);
  font-weight: 600;
  font-size: 0.84rem;
  padding: 8px 16px;
  border-radius: 20px;
  border: 1px solid var(--line);
  background: var(--surface-solid);
  color: var(--ink);
  cursor: pointer;
  transition: all .15s ease;
}
.pill-btn:hover { border-color: var(--gold); }
.pill-btn.active { background: var(--hanko); border-color: var(--hanko); color: #fff; }

.swatch-row {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
}

.swatch-btn {
  width: 34px;
  height: 34px;
  border-radius: 50%;
  border: 2px solid transparent;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  color: #fff;
  font-size: 0.75rem;
  transition: transform .15s ease;
}
.swatch-btn:hover { transform: scale(1.08); }
.swatch-btn.active {
  border-color: var(--hanko);
  box-shadow: 0 0 0 2px var(--surface-solid), 0 0 0 4px var(--hanko);
}

.toggle-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  font-family: var(--sans);
  font-weight: 600;
  font-size: 0.9rem;
  padding: 10px 14px;
  border: 1px solid var(--line);
  border-radius: 12px;
  margin-bottom: 8px;
}

.switch {
  position: relative;
  width: 40px;
  height: 22px;
  flex-shrink: 0;
}
.switch input { opacity: 0; width: 0; height: 0; }
.switch .track {
  position: absolute;
  inset: 0;
  background: var(--line);
  border-radius: 20px;
  transition: background .15s ease;
  cursor: pointer;
}
.switch .track::before {
  content: "";
  position: absolute;
  width: 16px;
  height: 16px;
  left: 3px;
  top: 3px;
  background: #fff;
  border-radius: 50%;
  transition: transform .15s ease;
}
.switch input:checked + .track { background: var(--hanko); }
.switch input:checked + .track::before { transform: translateX(18px); }

@media (max-width: 480px) {
  .settings-panel { width: 100vw; }
}
