* { margin: 0; padding: 0; box-sizing: border-box; }

/* ---------- tema warna ----------
   Semua warna "jenama" (bg gelap + accent) dipusatkan sini jadi custom
   property, supaya tema baru = satu blok [data-theme="xxx"] je, xperlu
   cari-ganti hex serata fail. Admin pilih tema (content.theme), index.html
   set atribut data-theme kat <html> ikut nilai tu. "-rgb" (triplet nombor
   tanpa rgba()) sedia utk box-shadow/gradient yg perlukan alpha (rgba()
   xleh terima terus custom property utk 1 channel je).

   Warna "urgent" (amaran azan/iqamah — kuning/amber) & dark-text kekal
   SAMA semua tema sengaja — amber ni isyarat "waktu dah masuk" yg
   universal, xdikaitkan dgn jenama masjid, so xperlu berubah ikut tema. */
:root {
  --c-bg-0: #020a08;      --c-bg-0-rgb: 2, 10, 8;
  --c-bg-1: #041310;
  --c-bg-2: #0a2620;
  --c-bg-3: #0c2019;
  --c-bg-4: #1a4638;
  --c-bg-5: #123c30;
  --c-panel-radial-rgb: 12, 36, 29;
  --c-shadow-deep-rgb: 9, 74, 58;

  --c-accent-1: #1D9E75;      --c-accent-1-rgb: 29, 158, 117;
  --c-accent-2: #0F6E56;      --c-accent-2-rgb: 15, 110, 86;
  --c-accent-3: #5DCAA5;      --c-accent-3-rgb: 93, 202, 165;
  --c-accent-tint: #E1F5EE;
  --c-accent-dark-text: #04342C; /* teks gelap atas pill terang accent-3 (cth waktu solat akan datang) */

  --c-urgent: #FAC775;        --c-urgent-rgb: 250, 199, 117;
  --c-urgent-text: #04342C;
  --c-urgent-bg-1: #4a3418;
  --c-urgent-bg-2: #1f1207;

  /* ---------- gaya fon ----------
     Sama prinsip macam tema warna — peranan (bukan nama fon terus)
     dipusatkan sini. Gaya baru = 1 blok [data-font="xxx"] + 1 <option>
     admin + 1 value dlm ALLOWED_FONT_PACKS (content.js). --font-arabic
     kekal 'Amiri' semua gaya sengaja — fon Naskh yg memang direka khas
     utk teks Quran, bukan soal citarasa jenama macam heading/body. */
  --font-heading: 'Plus Jakarta Sans', sans-serif;
  --font-body: 'Jost', sans-serif;
  --font-numeric: 'Orbitron', sans-serif;
  --font-arabic: 'Amiri', serif;
  /* bayang nombor — "none" xsah sbg 1 item dlm senarai text-shadow
     bersama, so guna shadow lutsinar (bukan kosong) sbg lalai supaya
     selamat digabung dgn var() kat elemen yg dah ada shadow sendiri
     (cth glow countdown-card). */
  --font-numeric-shadow: 0 0 0 transparent;
}

[data-font="elegant"] {
  --font-heading: 'Playfair Display', serif;
  --font-body: 'Inter', sans-serif;
  --font-numeric: 'Space Grotesk', sans-serif;
}

[data-font="unified"] {
  --font-heading: 'Inter', sans-serif;
  --font-body: 'Inter', sans-serif;
  --font-numeric: 'Space Grotesk', sans-serif;
}

[data-font="premium"] {
  /* Satu keluarga fon je (Manrope) utk tajuk+teks+nombor — hierarki
     dibina ikut BERAT (weight) je, bukan tukar fon, pendekatan
     "minimalist premium" produk moden (Linear/Stripe/Vercel style).
     Sentuhan "3D" letak kat nombor je (jam/waktu solat/countdown) —
     bayang berlapis lembut (rim cahaya atas + shadow lembut bawah)
     bagi kesan sedikit terangkat/depth, BUKAN neon/glow/bevel tebal. */
  --font-heading: 'Manrope', sans-serif;
  --font-body: 'Manrope', sans-serif;
  --font-numeric: 'Manrope', sans-serif;
  --font-numeric-shadow:
    0 1px 0 rgba(255, 255, 255, 0.18),
    0 3px 6px rgba(0, 0, 0, 0.35),
    0 8px 18px rgba(0, 0, 0, 0.25);
}

[data-theme="maroon"] {
  --c-bg-0: #0a0203;      --c-bg-0-rgb: 10, 2, 3;
  --c-bg-1: #170406;
  --c-bg-2: #2b0a0e;
  --c-bg-3: #230a0d;
  --c-bg-4: #4a131a;
  --c-bg-5: #3a0f16;
  --c-panel-radial-rgb: 42, 12, 17;
  --c-shadow-deep-rgb: 74, 12, 22;

  --c-accent-1: #B5324B;      --c-accent-1-rgb: 181, 50, 75;
  --c-accent-2: #7A1F30;      --c-accent-2-rgb: 122, 31, 48;
  --c-accent-3: #E8899C;      --c-accent-3-rgb: 232, 137, 156;
  --c-accent-tint: #FBE4E8;
  --c-accent-dark-text: #3D0F1A;
}

html, body {
  width: 100%;
  height: 100%;
  overflow: hidden;
  background: var(--c-bg-0);
  font-family: var(--font-body);
}

.app {
  position: relative;
  width: 100vw;
  height: 100vh;
  display: grid;
  grid-template-rows: auto 1fr auto;
  gap: 1.2vh;
  padding: 1.6vh 1.6vw;
  background: linear-gradient(135deg, var(--c-bg-2) 0%, var(--c-bg-1) 55%, var(--c-bg-0) 100%);
}

/* ---------- top bar ---------- */

.topbar {
  display: flex;
  align-items: center;
  gap: 1.6vw;
  background: rgba(255,255,255,0.06);
  border: 0.5px solid rgba(255,255,255,0.1);
  border-radius: 14px;
  padding: 1.6vh 1.6vw;
}

.brand { display: flex; align-items: center; gap: 1vw; flex-shrink: 0; }

.hidden { display: none !important; }

.preview-banner {
  position: fixed;
  top: 0; left: 0; right: 0;
  z-index: 100;
  background: var(--c-urgent);
  color: var(--c-urgent-text);
  text-align: center;
  font-weight: 700;
  font-size: clamp(12px, 1.6vh, 20px);
  padding: 0.8vh 1vw;
}

.logo-badge {
  width: 5vh; height: 5vh; min-width: 40px; min-height: 40px;
  border-radius: 10px;
  background: linear-gradient(135deg, var(--c-accent-1), var(--c-accent-2));
  display: flex; align-items: center; justify-content: center;
  overflow: hidden;
}
.logo-badge svg { width: 55%; height: 55%; }
.logo-badge img { width: 100%; height: 100%; object-fit: cover; }

.logo-badge.has-image {
  background: none;
  border-radius: 0;
  overflow: visible;
}
.logo-badge.has-image img { width: 100%; height: 100%; object-fit: contain; }

.masjid-name { font-family: var(--font-heading); color: #fff; font-size: clamp(20px, 3vh, 48px); font-weight: 700; white-space: nowrap; }
.masjid-loc { color: rgba(255,255,255,0.5); font-size: clamp(12px, 1.6vh, 24px); font-weight: 500; }

.quote {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 0.2vh;
  transition: opacity 0.4s ease;
}
.quote .quote-ar {
  font-family: var(--font-arabic);
  font-weight: 700;
  color: #fff;
  font-size: clamp(15px, 2.0vh, 30px);
  max-width: 100%;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  text-shadow: 0 2px 10px rgba(0, 0, 0, 0.4);
}
.quote .quote-ms {
  font-style: italic;
  font-weight: 500;
  color: rgba(var(--c-urgent-rgb), 0.6);
  font-size: clamp(9px, 1vh, 15px);
  max-width: 100%;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.clock-block { display: flex; align-items: center; gap: 1.3vw; flex-shrink: 0; }

.clock {
  font-family: var(--font-numeric);
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  color: var(--c-accent-3);
  text-shadow: var(--font-numeric-shadow);
  font-size: clamp(26px, 4.6vh, 64px);
  letter-spacing: 0.01em;
  display: flex;
  align-items: baseline;
  gap: 0.35vw;
}
.clock .ampm { font-family: var(--font-body); font-size: 0.36em; color: rgba(255,255,255,0.55); font-weight: 600; }

.date-block {
  text-align: right;
  border-left: 0.5px solid rgba(255,255,255,0.14);
  padding-left: 1.1vw;
  color: rgba(255,255,255,0.6);
}
.date-block div:first-child { font-size: clamp(12px, 1.8vh, 26px); font-weight: 600; }
.date-block div:last-child { font-size: clamp(10px, 1.5vh, 22px); color: rgba(255,255,255,0.45); margin-top: 2px; }

/* ---------- middle ---------- */

.middle {
  display: grid;
  grid-template-columns: 1fr clamp(260px, 19vw, 360px);
  gap: 1.2vw;
  min-height: 0;
}

.poster {
  position: relative;
  border-radius: 14px;
  overflow: hidden;
  background: linear-gradient(160deg, var(--c-bg-4) 0%, var(--c-bg-3) 100%);
}

.poster-photo {
  display: none;
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.poster .badge {
  position: absolute;
  top: 1.6vh; left: 1.6vw;
  background: rgba(var(--c-accent-1-rgb), 0.32);
  border-radius: 6px;
  padding: 0.7vh 1.1vw;
  font-size: clamp(12px, 1.5vh, 20px);
  color: var(--c-accent-tint);
  font-weight: 600;
  letter-spacing: 0.04em;
}

.poster-overlay {
  position: absolute;
  left: 0; right: 0; bottom: 0;
  /* padding-bottom naik drpd 2.6vh — dots skrg posisi tetap absolute
     kat bawah .poster (bukan lagi dlm aliran overlay ni), so kena
     reserve ruang sendiri di sini spy caption/subtitle xbertindih dots. */
  padding: 10vh 2vw 5.5vh;
  background: linear-gradient(to top, rgba(var(--c-bg-0-rgb), 0.94) 15%, rgba(var(--c-bg-0-rgb), 0.5) 65%, transparent);
  transition: opacity 0.4s ease;
}

.poster-overlay h2 { font-family: var(--font-heading); color: #fff; font-size: clamp(30px, 6vh, 92px); font-weight: 700; line-height: 1.2; }
.poster-overlay p { color: rgba(255,255,255,0.75); font-size: clamp(16px, 2.6vh, 38px); font-weight: 500; margin-top: 1vh; }

/* gambar admin upload — poster-photo isi latar, overlay ni cuma bekalkan
   gradient nipis kat bawah supaya dots kekal jelas dibaca. Caption (p)
   papar cuma kalau admin isi satu — kalau kosong, xnampak apa-apa pun. */
.poster-overlay.type-photo {
  background: linear-gradient(to top, rgba(var(--c-bg-0-rgb), 0.8) 0%, transparent 35%);
}
.poster-overlay.type-photo h2 {
  display: none;
}
.poster-overlay.type-photo p {
  font-size: clamp(14px, 2vh, 28px);
}

/* ayat/hadith harian — kandungan reflektif, bukan caption gambar, so
   center penuh dlm kotak poster (bukan melekat bawah macam pengumuman
   biasa) dgn sikit hiasan minimalist (garis kecil pemisah). Fon lagi
   kecil drpd tajuk pengumuman sebab teks lagi panjang — elak overflow. */
.poster-overlay.type-quran,
.poster-overlay.type-hadith,
.poster-overlay.type-ceramah,
.poster-overlay.type-panduan,
.poster-overlay.type-occasion,
.poster-overlay.type-account {
  top: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
  padding: 4vh 5vw;
  background: radial-gradient(ellipse at center, rgba(var(--c-panel-radial-rgb), 0.7) 0%, rgba(var(--c-bg-0-rgb), 0.92) 100%);
}
.poster-overlay.type-quran h2,
.poster-overlay.type-hadith h2,
.poster-overlay.type-ceramah h2,
.poster-overlay.type-panduan h2,
.poster-overlay.type-occasion h2,
.poster-overlay.type-account h2 {
  font-size: clamp(20px, 3.2vh, 46px);
  line-height: 1.5;
  text-shadow: 0 4px 18px rgba(0, 0, 0, 0.45);
}
.poster-overlay.type-quran h2 {
  font-family: var(--font-arabic);
  line-height: 1.8;
}
.poster-overlay.type-quran h2::after,
.poster-overlay.type-hadith h2::after,
.poster-overlay.type-ceramah h2::after,
.poster-overlay.type-panduan h2::after,
.poster-overlay.type-occasion h2::after {
  content: "";
  display: block;
  width: 64px;
  height: 3px;
  margin: 2vh auto 0;
  border-radius: 2px;
  background: linear-gradient(90deg, transparent, rgba(var(--c-accent-3-rgb), 0.9), transparent);
  box-shadow: 0 0 12px rgba(var(--c-accent-3-rgb), 0.5);
}
/* QR sumbangan — object-fit:contain & saiz tetap (BUKAN cover macam
   gambar galeri) — QR kena kekal tepat/tak dipotong supaya boleh diimbas. */
.poster-qr {
  display: none;
  width: clamp(160px, 22vh, 280px);
  height: clamp(160px, 22vh, 280px);
  object-fit: contain;
  background: #fff;
  border-radius: 14px;
  padding: 14px;
  margin: 0 auto 2.4vh;
  box-shadow: 0 10px 28px rgba(0, 0, 0, 0.35);
}
.poster-overlay.type-account .poster-qr {
  display: block;
}

/* countdown "bento grid" — satu card satu tarikh penting Hijrah, card
   plaing dekat (hero) lagi besar. Layout beza drpd slaid lain (bukan
   satu blok teks center), so h2/p disembunyikan, guna grid tersendiri. */
.countdown-grid { display: none; }
.poster-overlay.type-countdown {
  top: 0;
  display: flex;
  flex-direction: column;
  padding: 3vh 3vw;
  background: radial-gradient(ellipse at center, rgba(var(--c-bg-0-rgb), 0.55) 0%, rgba(var(--c-bg-0-rgb), 0.8) 100%);
}
.poster-overlay.type-countdown h2,
.poster-overlay.type-countdown p {
  display: none;
}
.poster-overlay.type-countdown .countdown-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-auto-rows: 1fr;
  grid-auto-flow: dense;
  gap: 1.2vh 1vw;
  flex: 1;
  min-height: 0;
}
.countdown-card {
  background: linear-gradient(155deg, rgba(255, 255, 255, 0.08), rgba(255, 255, 255, 0.02));
  border: 1px solid rgba(255, 255, 255, 0.12);
  border-radius: 14px;
  box-shadow: 0 8px 20px rgba(0, 0, 0, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.07);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
  padding: 1vh 0.6vw;
  min-width: 0;
}
.countdown-card.hero {
  grid-column: span 2;
  grid-row: span 2;
  background: linear-gradient(155deg, rgba(var(--c-accent-3-rgb), 0.4), rgba(var(--c-accent-2-rgb), 0.3));
  border: 1px solid rgba(var(--c-accent-3-rgb), 0.55);
  box-shadow: 0 14px 34px rgba(var(--c-shadow-deep-rgb), 0.45), inset 0 1px 0 rgba(255, 255, 255, 0.14);
}
.countdown-card .cc-title {
  font-family: var(--font-heading);
  font-weight: 700;
  color: #fff;
  font-size: clamp(10px, 1.3vh, 18px);
  letter-spacing: 0.02em;
  text-shadow: 0 2px 8px rgba(0, 0, 0, 0.35);
}
.countdown-card.hero .cc-title {
  font-size: clamp(16px, 2.2vh, 30px);
}
.countdown-card .cc-days {
  font-family: var(--font-numeric);
  font-weight: 700;
  color: var(--c-accent-3);
  font-size: clamp(16px, 2.2vh, 32px);
  margin-top: 0.5vh;
  text-shadow: 0 0 18px rgba(var(--c-accent-3-rgb), 0.45), var(--font-numeric-shadow);
}
.countdown-card.hero .cc-days {
  font-size: clamp(28px, 4vh, 56px);
  text-shadow: 0 0 26px rgba(var(--c-accent-3-rgb), 0.6), var(--font-numeric-shadow);
}
.countdown-card .cc-days-label {
  font-size: clamp(8px, 0.95vh, 13px);
  color: rgba(255, 255, 255, 0.5);
  margin-top: 0.2vh;
}

/* Dots letak satu tempat TETAP di bawah poster (position:absolute
   relative kat .poster, bukan ikut aliran teks dlm poster-overlay) —
   dulu dots "ikut" panjang teks (tajuk/caption 1 baris vs 2 baris
   tolak kedudukan dots naik-turun), skrg sentiasa sama tempat tak kira
   slaid jenis apa/panjang teks macam mana. */
.dots {
  position: absolute;
  left: 0; right: 0; bottom: 2.4vh;
  display: flex;
  justify-content: center;
  gap: 7px;
  z-index: 5;
}
.dots span { width: 20px; height: 5px; border-radius: 3px; background: rgba(255,255,255,0.25); cursor: pointer; }
.dots span.active { width: 34px; background: var(--c-accent-3); }

.prayer-panel {
  background: rgba(255,255,255,0.05);
  border: 0.5px solid rgba(255,255,255,0.09);
  border-radius: 14px;
  display: flex;
  flex-direction: column;
  overflow: hidden;
}

.countdown-block {
  background: linear-gradient(135deg, var(--c-accent-1), var(--c-accent-2));
  padding: 2.8vh 1vw;
  text-align: center;
  flex-shrink: 0;
}
.countdown-block .label { font-size: clamp(12px, 1.7vh, 24px); color: rgba(255,255,255,0.8); font-weight: 600; letter-spacing: 0.06em; }
.countdown-block .next-name { font-size: clamp(20px, 2.8vh, 40px); color: #fff; font-weight: 700; margin: 0.4vh 0; }
.countdown-block .next-time {
  font-family: var(--font-numeric);
  font-size: clamp(24px, 4vh, 58px);
  color: #fff;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  text-shadow: var(--font-numeric-shadow);
}

.prayer-list {
  list-style: none;
  flex: 1;
  display: flex;
  flex-direction: column;
  padding: 0.4vh 1.2vw;
}

.prayer-list li {
  flex: 1;
  display: grid;
  grid-template-columns: 1fr auto;
  align-items: center;
  padding: 0 0.4vw;
  border-top: 1px solid rgba(255,255,255,0.09);
}
.prayer-list li:first-child { border-top: none; }

.prayer-list .p-name { font-size: clamp(17px, 3.6vh, 46px); font-weight: 600; color: rgba(255,255,255,0.68); }

.prayer-list .p-time {
  font-family: var(--font-numeric);
  font-size: clamp(15px, 2.9vh, 36px);
  color: rgba(255,255,255,0.85);
  font-weight: 600;
  font-variant-numeric: tabular-nums;
  text-shadow: var(--font-numeric-shadow);
  width: clamp(72px, 8.5vw, 130px);
  text-align: right;
  justify-self: end;
}
.prayer-list li.info .p-name { color: rgba(255,255,255,0.38); font-weight: 500; }
.prayer-list li.info .p-time { color: rgba(255,255,255,0.55); font-weight: 600; }

.prayer-list li.upcoming {
  margin: 0.4vh 0;
  padding: 0 1vw;
  border-radius: 12px;
  border-top-color: transparent;
  background: linear-gradient(135deg, rgba(var(--c-accent-3-rgb), 0.22), rgba(var(--c-accent-2-rgb), 0.28));
  box-shadow: inset 0 0 0 1px rgba(var(--c-accent-3-rgb), 0.35);
}
.prayer-list li.upcoming + li { border-top-color: transparent; }
.prayer-list li.upcoming .p-name { color: var(--c-accent-tint); font-weight: 700; }
.prayer-list li.upcoming .p-time {
  width: auto;
  color: var(--c-accent-dark-text);
  background: var(--c-accent-3);
  border-radius: 999px;
  padding: 0.4vh 0.9vw;
  text-align: center;
}

/* ---------- ticker ---------- */

.ticker {
  background: linear-gradient(90deg, var(--c-accent-2), var(--c-accent-1));
  border-radius: 10px;
  padding: 1.3vh 0;
  overflow: hidden;
  white-space: nowrap;
}

.ticker-track {
  display: inline-block;
  padding-left: 100%;
  color: var(--c-accent-tint);
  font-size: clamp(16px, 2.8vh, 40px);
  font-weight: 600;
  animation: ticker-scroll 28s linear infinite;
}

@keyframes ticker-scroll {
  from { transform: translateX(0); }
  to { transform: translateX(-100%); }
}

/* ---------- prayer state overlay ---------- */

.prayer-overlay {
  position: fixed;
  inset: 0;
  z-index: 50;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 2.2vh;
  background: radial-gradient(circle at 50% 42%, var(--c-bg-5) 0%, var(--c-bg-1) 72%);
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.5s ease;
}
.prayer-overlay.active { opacity: 1; pointer-events: auto; }

.prayer-overlay-name {
  font-family: var(--font-body);
  font-size: clamp(48px, 11vh, 160px);
  font-weight: 700;
  color: var(--c-accent-3);
  letter-spacing: 0.02em;
}

.prayer-overlay-message {
  font-size: clamp(18px, 3.4vh, 46px);
  font-weight: 600;
  color: #fff;
  text-align: center;
  padding: 0 4vw;
}

.prayer-overlay-countdown {
  font-family: var(--font-numeric);
  font-size: clamp(26px, 5.4vh, 74px);
  font-weight: 700;
  text-shadow: var(--font-numeric-shadow);
  color: #fff;
}

.prayer-overlay.urgent {
  background: radial-gradient(circle at 50% 42%, var(--c-urgent-bg-1) 0%, var(--c-urgent-bg-2) 72%);
}
.prayer-overlay.urgent .prayer-overlay-name { color: var(--c-urgent); }
