/* ================================================================
   گنجینهٔ صوتی — استایل تکمیلی
   ----------------------------------------------------------------
   اینجا سه دسته چیز نوشته می‌شود:

   ۱. اجزایی که Tailwind برایشان کلاسی ندارد: نوار پیشرفت، قلاب
      پخش‌کننده، بریدن متن در دو خط.

   ۲. ابزارهایی که در بیلد فعلی app.css ساخته نشده‌اند. بیلد
      ۱۴۰۵/۰۶/۲۰ است و هر کلاسی که بعد از آن در قالب‌ها آمده باشد
      قاعده‌ای ندارد.

   ۳. کلاس‌هایی که از آرایهٔ PHP می‌آیند و Tailwind با JIT **حتی با
      بیلد مجدد هم** آن‌ها را پیدا نمی‌کند.

   هیچ رنگ خامی نوشته نشده؛ همه از توکن‌های قالب می‌آیند.
   ================================================================ */

/* ================================================================
   پخش‌کنندهٔ پایدار
   ----------------------------------------------------------------
   روی دسکتاپ چسبان است تا وقتی کاربر فهرست را می‌پیماید، کنترل
   پخش از دست نرود. سرستون سایت z-50 است، پس این پایین‌تر می‌نشیند.
   روی موبایل چسبان نیست: ارتفاعش نصف صفحه را می‌گرفت.
   ================================================================ */
@media (min-width: 1024px) {
  .jj-audio-scope .jj-audio-player {
    position: sticky;
    top: 4.5rem;
    z-index: 20;
  }
}

/* ================================================================
   نوار پیشرفت
   ================================================================ */
.jj-audio-bar {
  position: relative;
  touch-action: none;
}

.jj-audio-bar-track {
  position: relative;
  display: block;
  width: 100%;
  height: .375rem;
  border-radius: 9999px;
  background-color: rgb(var(--c-ink-3) / .18);
  overflow: visible;
}

.jj-audio-bar-fill {
  position: absolute;
  inset-block: 0;
  inset-inline-start: 0;
  width: 0;
  border-radius: 9999px;
  background-color: rgb(var(--c-primary));
  transition: width .15s linear;
}

.jj-audio-bar-knob {
  position: absolute;
  top: 50%;
  inset-inline-start: 0;
  width: .875rem;
  height: .875rem;
  margin-top: -.4375rem;
  margin-inline-start: -.4375rem;
  border-radius: 9999px;
  background-color: rgb(var(--c-surface));
  border: 2px solid rgb(var(--c-primary));
  box-shadow: 0 1px 3px rgb(0 0 0 / .18);
  transition: inset-inline-start .15s linear;
}

.jj-audio-bar:focus-visible {
  outline: 2px solid rgb(var(--c-primary));
  outline-offset: 2px;
}

/* بدون جاوااسکریپت، نوار نباید تعاملی به نظر برسد. */
.jj-audio-bar:not([data-ready]) {
  cursor: default;
}

/* ================================================================
   نوار کوچک «ادامهٔ شنیدن»
   ================================================================ */
.jj-audio-mini-bar {
  display: block;
  width: 100%;
  height: .25rem;
  border-radius: 9999px;
  background-color: rgb(var(--c-ink-3) / .18);
  overflow: hidden;
}

.jj-audio-mini-fill {
  display: block;
  height: 100%;
  border-radius: 9999px;
  background-color: rgb(var(--c-primary));
}

/* ================================================================
   بریدن متن
   ----------------------------------------------------------------
   به‌جای line-clamp تیلویند نوشته شده چون آن ابزار در بیلد فعلی
   نیست و اضافه‌کردنش نیاز به بیلد مجدد داشت.
   ================================================================ */
.jj-clamp-1,
.jj-clamp-2 {
  display: -webkit-box;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.jj-clamp-1 { -webkit-line-clamp: 1; }
.jj-clamp-2 { -webkit-line-clamp: 2; }

/* ================================================================
   نوار افقی تراشه‌ها
   ================================================================ */
.jj-scroll-x {
  scrollbar-width: none;
  -ms-overflow-style: none;
}

.jj-scroll-x::-webkit-scrollbar {
  display: none;
}

/* ================================================================
   اعداد
   ----------------------------------------------------------------
   زمان‌ها با عرض ثابت، وگرنه هر ثانیه که عدد عوض می‌شود طول نوار
   می‌لرزد.
   ================================================================ */
.jj-audio-scope .jj-num {
  font-variant-numeric: tabular-nums;
  letter-spacing: .01em;
}

/* ================================================================
   صفحه‌بندی
   ----------------------------------------------------------------
   خروجی paginate_links هیچ کلاس تیلویندی ندارد، پس اینجا شکل
   می‌گیرد.
   ================================================================ */
.jj-audio-pager {
  display: flex;
  flex-wrap: wrap;
  gap: .5rem;
  justify-content: center;
}

.jj-audio-pager .page-numbers {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 2.5rem;
  height: 2.5rem;
  padding-inline: .75rem;
  border-radius: 9999px;
  border: 1px solid rgb(var(--c-ink-3) / .25);
  color: rgb(var(--c-ink-2));
  font-weight: 600;
  text-decoration: none;
  transition: color .2s, border-color .2s, background-color .2s;
}

.jj-audio-pager .page-numbers:hover {
  color: rgb(var(--c-primary));
  border-color: rgb(var(--c-primary));
}

.jj-audio-pager .page-numbers.current {
  background-color: rgb(var(--c-primary));
  border-color: rgb(var(--c-primary));
  color: rgb(var(--c-on-primary));
}

.jj-audio-pager .page-numbers.dots {
  border-color: transparent;
}

/* ================================================================
   متن بلند
   ----------------------------------------------------------------
   متن پیاده‌شدهٔ سخنرانی می‌تواند هزاران کلمه باشد؛ بدون این،
   پاراگراف‌ها به هم می‌چسبند.
   ================================================================ */
.jj-prose > * + * {
  margin-top: 1em;
}

.jj-prose p {
  line-height: 2;
  text-align: justify;
}

.jj-prose h2,
.jj-prose h3 {
  font-weight: 700;
  color: rgb(var(--c-ink));
  margin-top: 1.6em;
}

.jj-prose a {
  color: rgb(var(--c-primary));
  text-decoration: underline;
}

/* ================================================================
   ابزارهای غایب از بیلد فعلی
   ----------------------------------------------------------------
   هر کدام با ابزار بررسی کلاس تأیید شده که در app.css نیست.
   ================================================================ */
.jj-audio-scope .p-12 { padding: 3rem; }

/* هم‌خانوادهٔ shadow-xs ولی یک پله ملایم‌تر. */
.jj-audio-scope .shadow-2xs {
  box-shadow: 0 1px 1px 0 rgb(0 0 0 / .04);
}

/*
 * خانوادهٔ font-* در این بیلد فقط `font-family: inherit` است و
 * نقش تزئینی دارد؛ ولی برای هم‌خوانی با بقیهٔ توکن‌ها تعریف
 * می‌شود.
 */
.jj-audio-scope .font-display-hero { font-family: inherit; }

/*
 * واریانت‌های md: که در بیلد فعلی ساخته نشده‌اند.
 *
 * مقدارها عیناً از قاعدهٔ پایهٔ همان توکن در app.css برداشته شده‌اند
 * تا اگر روزی بیلد تازه گرفته شد، تفاوتی پیش نیاید. UI v6 خودش هم
 * این دو کلاس را به کار می‌برد، پس بدون این‌ها عنوان صفحه روی
 * دسکتاپ در اندازهٔ موبایل می‌ماند.
 */
@media (min-width: 768px) {
  .jj-audio-scope .md\:text-display-hero {
    font-size: clamp(2.25rem, 4.5vw, 3.5rem);
    line-height: 1.22;
    font-weight: 800;
    letter-spacing: -.02em;
  }

  .jj-audio-scope .md\:text-headline-lg {
    font-size: clamp(1.5rem, 2.6vw, 2rem);
    line-height: 1.35;
    font-weight: 700;
    letter-spacing: -.012em;
  }
}

/* ================================================================
   دسترس‌پذیری و کاهش حرکت
   ================================================================ */
@media (prefers-reduced-motion: reduce) {
  .jj-audio-bar-fill,
  .jj-audio-bar-knob {
    transition: none;
  }
}

/* ================================================================
   چاپ
   ----------------------------------------------------------------
   کسی که این صفحه را چاپ می‌کند، فهرست و متن می‌خواهد نه دکمهٔ
   پخش.
   ================================================================ */
@media print {
  .jj-audio-scope .jj-audio-player,
  .jj-audio-scope .jj-audio-play,
  .jj-audio-scope .jj-audio-pager,
  .jj-audio-scope aside {
    display: none;
  }

  .jj-audio-scope .jj-clamp-2 {
    display: block;
    overflow: visible;
  }
}
