/*
Theme Name: Astra Child — emuedu
Template: astra
Author: emuedu
Description: قالب فرزند Astra برای emu-edu.ir — هدر و فوتر بومی، فارسی، فونت Vazirmatn.
Version: 2.0.3
Text Domain: astra-child
*/

/* >>> ds-tokens — تولیدشده توسط scripts/tokens.py — دستی ویرایش نکن */
:root {
	--ds-color-primary-deep:    #060e24;
	--ds-color-primary-dark:    #091e47;
	--ds-color-primary:         #0d2b5e;
	--ds-color-primary-light:   #163872;
	--ds-color-accent:          #c9a84c;
	--ds-color-accent-light:    #e2c87a;
	--ds-color-accent-soft:     #f5f0e6;
	--ds-color-accent-soft-dk:  #ede5d4;
	--ds-color-text:            #2d3748;
	--ds-color-text-soft:       #374151;
	--ds-color-muted:           #4a5568;
	--ds-color-faint:           #6b7280;
	--ds-color-ghost:           #9ca3af;
	--ds-color-surface:         #FFFFFF;
	--ds-color-surface-soft:    #f8f7f4;
	--ds-color-surface-tint:    #fbfaf8;
	--ds-color-on-primary:      #FFFFFF;
	--ds-color-border:          #e0d8cc;
	--ds-color-border-strong:   #d1c9b8;
	--ds-color-on-primary-line: rgba(255, 255, 255, 0.14);
	--ds-color-on-primary-fill: rgba(255, 255, 255, 0.10);
	--ds-color-on-primary-dim:  rgba(255, 255, 255, 0.72);
	--ds-color-danger:          #B32D2E;
	--ds-color-danger-soft:     #FDF0F0;
	--ds-color-danger-border:   #F0C0C0;
	--ds-color-success:         #2E7D32;
	--ds-color-success-soft:    #EEF5EE;
	--ds-color-success-border:  #BCD9BC;
	--ds-space-1:               4px;
	--ds-space-2:               8px;
	--ds-space-3:               12px;
	--ds-space-4:               16px;
	--ds-space-5:               24px;
	--ds-space-6:               32px;
	--ds-space-7:               48px;
	--ds-space-8:               64px;
	--ds-space-9:               80px;
	--ds-radius-xs:             4px;
	--ds-radius-sm:             6px;
	--ds-radius-md:             8px;
	--ds-radius-lg:             12px;
	--ds-radius-xl:             16px;
	--ds-radius-2xl:            24px;
	--ds-radius-pill:           999px;
	--ds-motion-fast:           150ms;
	--ds-motion-base:           250ms;
	--ds-motion-slow:           500ms;
	--ds-ease:                  cubic-bezier(0.4, 0, 0.2, 1);
	--ds-ratio-media:           16 / 10;
	--ds-ratio-video:           16 / 9;
	--ds-shadow-sm:             0 1px 2px rgba(6, 14, 36, 0.06);
	--ds-shadow-md:             0 2px 10px rgba(6, 14, 36, 0.08);
	--ds-shadow-lg:             0 12px 32px rgba(6, 14, 36, 0.14);
	--ds-shadow-xl:             0 24px 56px rgba(6, 14, 36, 0.20);
	--ds-shadow-logo:           drop-shadow(0 2px 4px rgba(6, 14, 36, 0.25));
	--ds-font-body:             'Tajawal', system-ui, -apple-system, 'Segoe UI', Tahoma, sans-serif;
	--ds-font-latin:            -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
	--ds-leading-tight:         1.3;
	--ds-leading-normal:        1.7;
	--ds-leading-loose:         1.95;
	--ds-text-xs:               0.8125rem;
	--ds-text-sm:               0.9375rem;
	--ds-text-body:             clamp(1rem, 0.95rem + 0.22vw, 1.0625rem);
	--ds-text-lead:             clamp(1.0625rem, 1rem + 0.3vw, 1.1875rem);
	--ds-text-h4:               clamp(1.125rem, 1.05rem + 0.35vw, 1.3125rem);
	--ds-text-h3:               clamp(1.25rem, 1.1rem + 0.65vw, 1.5rem);
	--ds-text-h2:               clamp(1.5rem, 1.28rem + 0.95vw, 2rem);
	--ds-text-h1:               clamp(1.8125rem, 1.5rem + 1.35vw, 2.5rem);
	--ds-text-ui-xs:            0.6875rem;
	--ds-text-ui-sm:            0.75rem;
	--ds-text-ui:               0.875rem;
	--ds-text-ui-lg:            1rem;
	--ds-max-width:             1240px;
	--ds-width-content:         1152px;
	--ds-width-form:            720px;
	--ds-tap-min:               44px;

	/* نام‌های قدیمی — تا CSS موجودِ قالب نشکند. */
	--emu-blue:  var(--ds-color-primary);
	--emu-gold:  var(--ds-color-accent);
	--emu-cream: var(--ds-color-accent-soft);
	--emu-ink:   var(--ds-color-primary-dark);
	--emu-paper: var(--ds-color-on-primary);
	--emu-text:  var(--ds-color-text);
	--emu-max:   var(--ds-max-width);
}
/* <<< ds-tokens */

/* ============================================================
   ۱ب. لایه‌ی توکنِ این سایت — فقط فونت
   ============================================================
   بلوکِ بالا تولیدیِ `scripts/tokens.py` است و **دستی ویرایش نمی‌شود**؛
   `design-system/tokens.css` پایه مشترکِ هر دو سایت است و فورک نمی‌شود.
   تنها تفاوتِ دیزاین‌سیستمِ فارسی با عربی فونت است، پس همان یک توکن
   اینجا — بعد از بلوکِ تولیدی، در همان `:root` — بازتعریف می‌شود.

   چرا بازتعریف و نه ویرایشِ منبع: Tajawal عربی است و «گ چ پ ژ» ندارد،
   شکلِ «ی» و «ک»اش هم فارسی نیست. عکسش هم صادق است — عوض‌کردنِ منبع،
   سایتِ عربی را می‌شکند. یک منبع، یک استثنای مستند.

   اگر روزی توکنِ دومی هم فرق کرد، همین‌جا اضافه شود — نه در فایلِ پایه. */
:root {
	--ds-font-body: 'Vazirmatn', system-ui, -apple-system, 'Segoe UI', Tahoma, sans-serif;
}

/* ============================================================
   ۱. فونت
   ============================================================ */
/* Vazirmatn — فونتِ فارسی، مجوز OFL، میزبانیِ خودمان در `assets/fonts/`.

   چرا نه گوگل‌فونتس مستقیم: دامنه‌ی سوم یعنی یک DNS + TLS اضافه پیش از
   اولین پیکسلِ متن — و برای کاربرِ داخلِ ایران `fonts.gstatic.com` اصلاً
   ممکن است بالا نیاید. میزبانیِ خودی اینجا شرطِ کارکرد است نه بهینه‌سازی.

   چرا سه فایل و نه شش: برخلافِ Tajawalِ سایتِ عربی، Vazirmatn روی
   گوگل‌فونتس **متغیر** است — یک فایل کلِ محورِ ۱۰۰ تا ۹۰۰ را می‌دهد.
   پس به‌جای ۳ وزن × ۲ زیرمجموعه، ۱ فایل × ۳ زیرمجموعه داریم:
   عربی/فارسی (۴۶KB) · لاتین (۳۴KB) · لاتینِ گسترده (۲۱KB). هر کدام
   `unicode-range` خودش را دارد و مرورگر فقط لازم‌ها را می‌گیرد.

   ✅ نتیجه‌ی جانبیِ متغیربودن: ترفندِ `font-weight: 500 600`ِ سایتِ عربی
   اینجا **لازم نیست**. Tajawal وزنِ ۶۰۰ نداشت و باید دستی جعل می‌شد؛
   Vazirmatn هر وزنی را واقعاً دارد.

   ⚠️ زیرمجموعه‌ی «لاتینِ گسترده» عمداً نگه داشته شده: «ğ» و «ş» — یعنی
   Doğu Akdeniz و Gazimağusa — آنجا هستند نه در لاتینِ پایه. حذفش یعنی
   نامِ ترکیِ دانشگاه با فونتِ پشتیبان رندر شود.

   مسیرها نسبی‌اند، پس قالب هر جا نصب شود کار می‌کند. */

/* ---- فارسی/عربی — همین یکی پیش‌بارگذاری می‌شود (LCP) ---- */
@font-face {
  font-family: 'Vazirmatn';
  src: url('assets/fonts/vazirmatn-var-arabic.woff2') format('woff2');
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0600-06FF, U+0750-077F, U+0870-088E, U+0890-0891, U+0897-08E1, U+08E3-08FF, U+200C-200E, U+2010-2011, U+204F, U+2E41, U+FB50-FDFF, U+FE70-FE74, U+FE76-FEFC, U+102E0-102FB, U+10E60-10E7E, U+10EC2-10EC4, U+10EFC-10EFF, U+1EE00-1EE03, U+1EE05-1EE1F, U+1EE21-1EE22, U+1EE24, U+1EE27, U+1EE29-1EE32, U+1EE34-1EE37, U+1EE39, U+1EE3B, U+1EE42, U+1EE47, U+1EE49, U+1EE4B, U+1EE4D-1EE4F, U+1EE51-1EE52, U+1EE54, U+1EE57, U+1EE59, U+1EE5B, U+1EE5D, U+1EE5F, U+1EE61-1EE62, U+1EE64, U+1EE67-1EE6A, U+1EE6C-1EE72, U+1EE74-1EE77, U+1EE79-1EE7C, U+1EE7E, U+1EE80-1EE89, U+1EE8B-1EE9B, U+1EEA1-1EEA3, U+1EEA5-1EEA9, U+1EEAB-1EEBB, U+1EEF0-1EEF1;
}

/* ---- لاتینِ پایه — «EMU»، عدد، نشانی ---- */
@font-face {
  font-family: 'Vazirmatn';
  src: url('assets/fonts/vazirmatn-var-latin.woff2') format('woff2');
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* ---- لاتینِ گسترده — «ğ» و «ş» ترکی ---- */
@font-face {
  font-family: 'Vazirmatn';
  src: url('assets/fonts/vazirmatn-var-latin-ext.woff2') format('woff2');
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

body, h1, h2, h3, h4, h5, h6, p, span, a, li, button, input, select, textarea {
  font-family: var(--ds-font-body);
}

/* ============================================================
   ۳. هدر سایت و ناوبری
   ============================================================

   جاوااسکریپت: **صفر**. سه حالتِ تعاملی، هر سه با CSS:

     ۱. منوی موبایل  → چک‌باکسِ `#emu-nav-toggle` که پیش از هدر نشسته
     ۲. زیرمنو        → دسکتاپ `:hover`/`:focus-within` · موبایل چک‌باکسِ هر آیتم
     ۳. جستجو         → چک‌باکسِ `#emu-search-toggle`

   ⚠️ هر سه چک‌باکس **بیرونِ** هدر و ناوبری‌اند. `~` فقط رو به جلو نگاه
   می‌کند؛ چک‌باکسِ داخلِ هدر نمی‌تواند `nav`ِ بعدش را باز کند.

   نقطه‌ی شکستِ ناوبری ۱۰۲۴px است نه ۹۲۱pxِ آسترا: منو هفت آیتمِ سطح‌یک
   دارد و دوتاشان («التقديم والتسجيل»، «الحياة في قبرص») بلندند. زیر
   ۱۰۲۴ در یک ردیف جا نمی‌شوند و می‌شکنند.
   ============================================================ */

.emu-nav__check,
.emu-search__check,
.emu-nav__subcheck {
  position: absolute;
  width: 1px;
  height: 1px;
  opacity: 0;
  pointer-events: none;
}

.emu-header {
  position: relative;
  background: var(--ds-color-primary);
}

/* خطِ طلاییِ زیر هدر — محو در دو سر، پس لبه‌ی صفحه را نمی‌بُرد. */
.emu-header__goldline {
  position: absolute;
  inset-block-end: 0;
  inset-inline: 0;
  height: 3px;
  background: linear-gradient(to right, transparent, var(--ds-color-accent), transparent);
  opacity: .7;
}

.emu-header__bar {
  max-width: var(--ds-max-width);
  margin: 0 auto;
  padding: var(--ds-space-4);
  display: flex;
  /* لوگو سمت چپ، اکشن‌ها سمت راست — در RTL این کار را `row-reverse` می‌کند. */
  flex-direction: row-reverse;
  align-items: center;
  justify-content: space-between;
  gap: var(--ds-space-3);
}

@media (min-width: 640px)  { .emu-header__bar { padding: var(--ds-space-5); } }
@media (min-width: 1024px) { .emu-header__bar { padding-inline: var(--ds-space-6); } }

.emu-header__brand {
  display: flex;
  align-items: center;
  gap: var(--ds-space-2);
  text-decoration: none;
  flex-shrink: 0;
  min-width: 0;
  /* نشانه‌ی برند لاتین‌خوان است: لوگو اول (چپ)، بعد متن. بدون این،
     RTLِ صفحه متن را چپِ لوگو می‌اندازد و قفلِ برند وارونه می‌شود. */
  direction: ltr;
}

.emu-header__logo {
  display: block;
  width: 44px;
  height: 44px;
  object-fit: contain;
  filter: var(--ds-shadow-logo);
}

/* نشانه‌ی لاتینِ برند — روی موبایل جا ندارد و عنوانِ عربی مهم‌تر است. */
.emu-header__en { display: none; }

@media (min-width: 640px) {
  .emu-header__brand { gap: var(--ds-space-3); }
  .emu-header__logo  { width: 64px; height: 64px; }
  .emu-header__en {
    display: block;
    font-family: var(--ds-font-latin);
    font-size: var(--ds-text-sm);
    font-weight: 700;
    line-height: var(--ds-leading-tight);
    color: var(--ds-color-on-primary);
    margin: 0;
    direction: ltr;
    text-align: left;
    white-space: nowrap;
  }
}

.emu-header__title-wrap {
  flex: 1;
  display: flex;
  justify-content: center;
  min-width: 0;
  text-align: center;
}

/* نام سایت — عمداً H1 نیست. H1 مال محتوای هر صفحه است. */
.emu-header__title {
  font-size: var(--ds-text-ui-lg);
  font-weight: 700;
  letter-spacing: .025em;
  line-height: var(--ds-leading-tight);
  color: var(--ds-color-on-primary);
  margin: 0;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.emu-header__title-line {
  display: block;
  height: 2px;
  width: 64px;
  margin: var(--ds-space-1) auto 0;
  border-radius: var(--ds-radius-pill);
  background: linear-gradient(to right, transparent, var(--ds-color-accent), transparent);
}

@media (min-width: 640px) {
  .emu-header__title { font-size: var(--ds-text-h3); }
  .emu-header__title-line { width: 96px; margin-top: var(--ds-space-2); }
}
@media (min-width: 1024px) {
  .emu-header__title { font-size: var(--ds-text-h2); }
}

/* ---- اکشن‌های هدر: جستجو و تبدیل ---- */
.emu-header__actions { display: none; }

@media (min-width: 1024px) {
  .emu-header__actions {
    display: flex;
    align-items: center;
    gap: var(--ds-space-3);
    flex-shrink: 0;
  }
}

.emu-header__search-btn {
  width: 36px;
  height: 36px;
  border-radius: var(--ds-radius-pill);
  border: 1px solid var(--ds-color-on-primary-line);
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  color: var(--ds-color-on-primary-dim);
  transition: color var(--ds-motion-fast) var(--ds-ease),
              border-color var(--ds-motion-fast) var(--ds-ease);
}
.emu-header__search-btn:hover { color: var(--ds-color-accent); border-color: var(--ds-color-accent); }
.emu-header__search-btn svg { width: 16px; height: 16px; }

.emu-header__apply {
  padding: var(--ds-space-2) var(--ds-space-5);
  border-radius: var(--ds-radius-md);
  font-size: var(--ds-text-ui);
  font-weight: 700;
  text-decoration: none;
  white-space: nowrap;
  background: linear-gradient(135deg, var(--ds-color-accent), var(--ds-color-accent-light));
  color: var(--ds-color-primary-dark);
  transition: transform var(--ds-motion-fast) var(--ds-ease),
              filter var(--ds-motion-fast) var(--ds-ease);
}
.emu-header__apply:hover,
.emu-header__apply:focus-visible { transform: translateY(-2px); filter: brightness(1.05); }

/* ---- نوارِ جستجو ----
   بسته است تا وقتی چک‌باکس تیک بخورد. روی موبایل با بازشدنِ خودِ منو
   هم باز می‌شود، چون دکمه‌ی ذره‌بین آنجا دیده نمی‌شود. */
.emu-header__searchbar {
  display: none;
  max-width: var(--ds-max-width);
  margin: 0 auto;
  padding: 0 var(--ds-space-4) var(--ds-space-4);
}
.emu-search__check:checked ~ .emu-header .emu-header__searchbar { display: block; }

@media (max-width: 1023px) {
  .emu-nav__check:checked ~ .emu-header .emu-header__searchbar { display: block; }
}

.emu-search {
  display: flex;
  align-items: center;
  gap: var(--ds-space-2);
  background: var(--ds-color-surface);
  border: 1px solid var(--ds-color-border);
  border-radius: var(--ds-radius-lg);
  padding-inline: var(--ds-space-3);
  transition: border-color var(--ds-motion-fast) var(--ds-ease);
}
.emu-search:focus-within { border-color: var(--ds-color-accent); }

.emu-search__field {
  flex: 1;
  min-width: 0;
  border: 0;
  outline: 0;
  background: none;
  /* ⚠️ مقیاسِ کروم اینجا ممنوع است: ورودیِ زیر ۱۶px باعث می‌شود سافاریِ
     موبایل هنگام فوکوس صفحه را زوم کند و کاربر از هدر بیرون بیفتد. */
  font-size: var(--ds-text-body);
  color: var(--ds-color-text);
  padding-block: var(--ds-space-3);
}
.emu-search__field::placeholder { color: var(--ds-color-ghost); }

.emu-search__submit {
  flex: none;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  border: 0;
  border-radius: var(--ds-radius-sm);
  background: none;
  cursor: pointer;
  color: var(--ds-color-muted);
  transition: color var(--ds-motion-fast) var(--ds-ease);
}
.emu-search__submit:hover { color: var(--ds-color-primary); }
.emu-search__submit svg { width: 18px; height: 18px; }

/* ---- همبرگر ---- */
.emu-burger {
  width: var(--ds-tap-min);
  height: var(--ds-tap-min);
  display: flex;
  flex-direction: column;
  gap: 6px;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  cursor: pointer;
}
@media (min-width: 1024px) { .emu-burger { display: none; } }

.emu-burger span {
  width: 20px;
  height: 2px;
  background: var(--ds-color-on-primary);
  transition: transform var(--ds-motion-base) var(--ds-ease),
              opacity var(--ds-motion-base) var(--ds-ease);
}
.emu-nav__check:checked ~ .emu-header .emu-burger span:nth-child(1) { transform: translateY(8px) rotate(45deg); }
.emu-nav__check:checked ~ .emu-header .emu-burger span:nth-child(2) { opacity: 0; }
.emu-nav__check:checked ~ .emu-header .emu-burger span:nth-child(3) { transform: translateY(-8px) rotate(-45deg); }

/* ============================================================
   نوار ناوبری (کرم)
   ============================================================ */
.emu-nav {
  position: relative;
  z-index: 40;
  background: var(--ds-color-accent-soft);
  border-bottom: 1px solid var(--ds-color-accent-soft-dk);
  box-shadow: var(--ds-shadow-sm);
}

.emu-nav__inner {
  max-width: var(--ds-max-width);
  margin: 0 auto;
  padding-inline: var(--ds-space-4);
}
@media (min-width: 1024px) { .emu-nav__inner { padding-inline: var(--ds-space-6); } }

.emu-nav ul { list-style: none; margin: 0; padding: 0; }
.emu-nav li { position: relative; }

.emu-nav a {
  display: block;
  text-decoration: none;
  color: var(--ds-color-text);
  font-size: var(--ds-text-ui);
  font-weight: 500;
  transition: color var(--ds-motion-fast) var(--ds-ease),
              background-color var(--ds-motion-fast) var(--ds-ease);
}

/* ---- موبایل (مبنا) ---- */
.emu-nav__panel {
  display: block;
  max-height: 0;
  opacity: 0;
  visibility: hidden;
  overflow: hidden;
  /* ⚠️ `grid-template-rows: 0fr→1fr` اینجا آزموده شد و **باز نشد** —
     با transition ارتفاع در ۰ قفل می‌ماند (کروم ۱۴۸). `max-height` در
     همه‌ی مرورگرها کار می‌کند و بدترین حالتش «انیمیشن ندارد» است نه
     «منو باز نمی‌شود». `200vh` از هر منویی بلندتر است. */
  transition: max-height var(--ds-motion-base) var(--ds-ease),
              opacity var(--ds-motion-fast) var(--ds-ease),
              visibility var(--ds-motion-base);
}
.emu-nav__check:checked ~ .emu-nav .emu-nav__panel {
  max-height: 200vh;
  opacity: 1;
  visibility: visible;
}

.emu-nav__menu > li { border-bottom: 1px solid var(--ds-color-accent-soft-dk); }

/* آیتمِ سطح‌یک روی موبایل: لینک + دکمه‌ی بازکردنِ زیرمنو در یک ردیف،
   و خودِ زیرمنو تمام‌عرض در ردیفِ بعد. */
.emu-nav__menu > li {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
}
.emu-nav__menu > li > a {
  flex: 1;
  min-width: 0;
  padding: var(--ds-space-3) var(--ds-space-4);
  min-height: var(--ds-tap-min);
  display: flex;
  align-items: center;
  color: var(--ds-color-primary);
}

.emu-nav__subtoggle {
  flex: none;
  width: var(--ds-tap-min);
  height: var(--ds-tap-min);
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
}
/* فلش با CSS ساخته می‌شود نه با SVG درون‌خطی — هفت SVG تکراری در هر
   صفحه‌ی سایت، برای شکلی که دو خط CSS است. */
.emu-nav__subtoggle::before {
  content: "";
  width: .5em;
  height: .5em;
  border: solid var(--ds-color-accent);
  border-width: 0 2px 2px 0;
  transform: translateY(-2px) rotate(45deg);
  transition: transform var(--ds-motion-fast) var(--ds-ease);
}
.emu-nav__subcheck:checked ~ .emu-nav__subtoggle::before {
  transform: translateY(2px) rotate(-135deg);
}

.emu-nav .sub-menu {
  flex-basis: 100%;
  max-height: 0;
  overflow: hidden;
  background: var(--ds-color-surface);
  transition: max-height var(--ds-motion-base) var(--ds-ease);
}
.emu-nav__subcheck:checked ~ .sub-menu { max-height: 100vh; }

.emu-nav .sub-menu a {
  padding: var(--ds-space-3) var(--ds-space-6);
  color: var(--ds-color-muted);
  border-bottom: 1px solid var(--ds-color-accent-soft);
}
.emu-nav .sub-menu li:last-child > a { border-bottom: 0; }

.emu-nav a:hover,
.emu-nav a:focus-visible { color: var(--ds-color-primary); background-color: var(--ds-color-accent-soft-dk); }

/* صفحه‌ی جاری — تنها آیتمی که پُر می‌شود. آیتمِ تبدیل عمداً پُرشدگیِ
   ثابت ندارد: هر آیتمی که همیشه پُر باشد، معنای «انتخاب‌شده» را از
   حالتِ جاری می‌گیرد. تأکیدش فقط وزن است. */
.emu-nav .current-menu-item > a,
.emu-nav .current-menu-ancestor > a { color: var(--ds-color-primary); font-weight: 700; }
.emu-nav .emu-nav-cta > a { font-weight: 700; }

/* دکمه‌های انتهای پنلِ موبایل */
.emu-nav__actions {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--ds-space-3);
  padding: var(--ds-space-4) 0;
}
.emu-nav__action {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: var(--ds-tap-min);
  padding: var(--ds-space-3);
  border-radius: var(--ds-radius-lg);
  font-size: var(--ds-text-ui-sm);
  font-weight: 700;
  text-align: center;
  text-decoration: none;
  transition: transform var(--ds-motion-fast) var(--ds-ease);
}
.emu-nav__action:active { transform: scale(.96); }
.emu-nav__action--gold {
  background: linear-gradient(135deg, var(--ds-color-accent), var(--ds-color-accent-light));
  color: var(--ds-color-primary-dark);
}
.emu-nav__action--line {
  color: var(--ds-color-primary);
  border: 1.5px solid var(--ds-color-border-strong);
  font-weight: 500;
}

/* ---- دسکتاپ ---- */
@media (min-width: 1024px) {

  /* پنل روی دسکتاپ نباید جعبه بسازد، وگرنه max-height صفرش می‌کند. */
  .emu-nav__panel {
    display: contents;
    max-height: none;
    opacity: 1;
    visibility: visible;
    overflow: visible;
  }

  .emu-nav__actions,
  .emu-nav__subtoggle { display: none; }

  .emu-nav__menu {
    display: flex;
    align-items: stretch;
    justify-content: center;
    flex-wrap: wrap;
  }
  .emu-nav__menu > li { border-bottom: 0; display: block; }

  .emu-nav__menu > li > a {
    display: flex;
    align-items: center;
    gap: var(--ds-space-2);
    padding: var(--ds-space-4) var(--ds-space-5);
    color: var(--ds-color-text);
    min-height: 0;
  }
  .emu-nav__menu > li > a:hover,
  .emu-nav__menu > li > a:focus-visible { background-color: transparent; }

  /* زیرِ آیتمِ فعال یک خطِ طلایی می‌آید — جای پُرشدنِ کاملِ پس‌زمینه. */
  .emu-nav__menu > li > a::before {
    content: "";
    position: absolute;
    inset-block-end: 0;
    inset-inline: var(--ds-space-4);
    height: 3px;
    border-radius: var(--ds-radius-xs) var(--ds-radius-xs) 0 0;
    background: var(--ds-color-accent);
    opacity: 0;
    transition: opacity var(--ds-motion-fast) var(--ds-ease);
  }
  .emu-nav__menu > li:hover > a::before,
  .emu-nav__menu > li:focus-within > a::before,
  .emu-nav__menu > .current-menu-item > a::before,
  .emu-nav__menu > .current-menu-ancestor > a::before { opacity: 1; }

  /* نشانگر زیرمنو */
  .emu-nav__menu > .menu-item-has-children > a::after {
    content: "";
    width: .4em;
    height: .4em;
    border: solid var(--ds-color-accent);
    border-width: 0 2px 2px 0;
    transform: translateY(-2px) rotate(45deg);
    transition: transform var(--ds-motion-fast) var(--ds-ease);
  }
  .emu-nav__menu > .menu-item-has-children:hover > a::after,
  .emu-nav__menu > .menu-item-has-children:focus-within > a::after {
    transform: translateY(2px) rotate(-135deg);
  }

  /* زیرمنو — بدون جاوااسکریپت */
  .emu-nav .sub-menu {
    position: absolute;
    top: 100%;
    inset-inline-start: 0;
    min-width: 220px;
    max-height: none;
    overflow: visible;
    z-index: 50;
    border: 1px solid var(--ds-color-accent-soft-dk);
    border-radius: 0 0 var(--ds-radius-md) var(--ds-radius-md);
    box-shadow: var(--ds-shadow-lg);
    opacity: 0;
    visibility: hidden;
    transition: opacity var(--ds-motion-fast) var(--ds-ease),
                visibility var(--ds-motion-fast);
  }
  /* نوارِ گرادیانِ بالای زیرمنو */
  .emu-nav .sub-menu::before {
    content: "";
    display: block;
    height: 3px;
    background: linear-gradient(to left, var(--ds-color-accent), var(--ds-color-primary));
  }
  .emu-nav__menu > li:hover > .sub-menu,
  .emu-nav__menu > li:focus-within > .sub-menu { opacity: 1; visibility: visible; }

  .emu-nav .sub-menu a {
    white-space: nowrap;
    padding: var(--ds-space-3) var(--ds-space-5);
    border-bottom: 1px solid var(--ds-color-accent-soft-dk);
    transition: background-color var(--ds-motion-fast) var(--ds-ease),
                color var(--ds-motion-fast) var(--ds-ease),
                padding-inline-start var(--ds-motion-fast) var(--ds-ease);
  }
  .emu-nav .sub-menu a:hover,
  .emu-nav .sub-menu a:focus-visible {
    background-color: var(--ds-color-accent-soft);
    color: var(--ds-color-primary);
    padding-inline-start: var(--ds-space-6);
  }

  /* زیرمنوی آیتم انتهایی به سمت داخل باز شود، نه بیرون از صفحه */
  .emu-nav__menu > li:last-child > .sub-menu { inset-inline-start: auto; inset-inline-end: 0; }
}

/* هر انیمیشنی باید بتواند خاموش شود — کاربرانی که «حرکت کمتر» را روشن
   کرده‌اند اغلب دلیل پزشکی دارند (سرگیجه، میگرن). */
@media (prefers-reduced-motion: reduce) {
  .emu-nav__panel,
  .emu-nav .sub-menu,
  .emu-nav a,
  .emu-nav__subtoggle::before,
  .emu-burger span,
  .emu-header__apply,
  .emu-header__search-btn { transition: none; }
}
/* ============================================================
   ۴. عنوان صفحه (H1 اختصاصی هر صفحه)
   ============================================================ */
.emu-page-title {
  font-size: clamp(1.6rem, 1.1rem + 1.6vw, 2.3rem);
  font-weight: 700;
  color: var(--emu-blue);
  line-height: 1.35;
  margin: 0 0 .7em;
}

/* ============================================================
   ۴ب. بردکرامب
   ============================================================
   نشانه‌گذاری را Rank Math می‌سازد و ما فقط رنگ و فاصله می‌دهیم:

       <nav class="rank-math-breadcrumb"><p>
         <a>الرئيسية</a><span class="separator"> » </span><span class="last">…</span>
       </p></nav>

   جداکننده در RTL خودش آینه می‌شود (» به شکل « دیده می‌شود) و رو به
   جهتِ خواندن می‌ماند — پس در تنظیمات Rank Math همان `&raquo;` است.

   موبایل-اول: هیچ چیزی جلوی شکستنِ سطر گرفته نشده. مسیرِ چهارسطحیِ
   صفحه‌ی رشته روی ۳۷۵ حتماً دو سطر می‌شود و باید بشود — `nowrap` یعنی
   لغزشِ افقیِ کلِ صفحه. */

/* فاصله‌ی بالا لازم است: `.ast-container` پدینگِ عمودی ندارد، پس بردکرامب
   بدونِ آن دقیقاً به نوارِ کرمیِ منو می‌چسبد (اندازه‌گیری‌شده: ۰px). فقط
   روی همین عنصر است — صفحه‌ای که بردکرامب ندارد دست‌نخورده می‌ماند. */
.rank-math-breadcrumb {
  margin-block: var(--ds-space-4) var(--ds-space-5);
  color: var(--ds-color-muted);
}

.rank-math-breadcrumb p {
  margin: 0;
  font-size: var(--ds-text-sm);
  line-height: var(--ds-leading-normal);
}

.rank-math-breadcrumb a {
  color: var(--ds-color-primary);
  text-decoration: none;
  /* پدینگِ عمودی هدفِ لمسی را بزرگ‌تر می‌کند بدون اینکه سطر را باز کند. */
  padding-block: var(--ds-space-1);
  transition: color var(--ds-motion-fast) var(--ds-ease);
}

.rank-math-breadcrumb a:hover,
.rank-math-breadcrumb a:focus-visible {
  color: var(--ds-color-primary-dark);
  text-decoration: underline;
}

/* صفحه‌ی جاری لینک نیست — رنگش هم نباید وعده‌ی کلیک بدهد. */
.rank-math-breadcrumb .last { color: var(--ds-color-muted); }

.rank-math-breadcrumb .separator { color: var(--ds-color-border); }

@media (prefers-reduced-motion: reduce) {
  .rank-math-breadcrumb a { transition: none; }
}

/* ============================================================
   ۵. فوتر سایت
   ============================================================
   جاوااسکریپت: صفر. موبایل-اول — یک ستون مبنا، ستون‌ها فقط با
   `min-width` اضافه می‌شوند. چهار ستون شد چون شاخه‌ی نهادی از منوی بالا
   به اینجا آمد (تصمیم ۰۱۶).
   ============================================================ */

.emu-footer {
  background: linear-gradient(160deg,
              var(--ds-color-primary-dark) 0%,
              var(--ds-color-primary) 60%,
              var(--ds-color-primary-light) 100%);
  color: var(--ds-color-on-primary);
}

.emu-footer__goldline {
  display: block;
  height: 3px;
  background: linear-gradient(to right, transparent, var(--ds-color-accent), transparent);
  opacity: .7;
}

.emu-footer__inner {
  max-width: var(--ds-width-content);
  margin: 0 auto;
  padding: var(--ds-space-8) var(--ds-space-5) var(--ds-space-6);
}
@media (min-width: 1024px) { .emu-footer__inner { padding-inline: var(--ds-space-6); } }

/* ⚠️ روی موبایل هم **راست‌چین** است، نه وسط‌چین. طرح همین را می‌گوید و
   دلیلش هم درست است: ستونِ لینک‌ها وسط‌چین، لبه‌ی خواندنیِ ثابت ندارد و
   چشم برای هر سطر از نو دنبالِ شروع می‌گردد. */
.emu-footer__grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--ds-space-6);
  text-align: start;
}
@media (min-width: 600px) {
  .emu-footer__grid { grid-template-columns: 1fr 1fr; }
}
@media (min-width: 1024px) {
  /* ستونِ معرفی پهن‌تر می‌ماند چون پاراگراف دارد؛ ستون‌های لینک باریک‌ترند. */
  .emu-footer__grid { grid-template-columns: 1.5fr 1fr 1fr 1.2fr; gap: var(--ds-space-7); }
}

/* ---- ستون معرفی ---- */
.emu-footer__brand {
  display: flex;
  align-items: center;
  gap: var(--ds-space-3);
  margin-bottom: var(--ds-space-5);
}

.emu-footer__logo {
  width: 56px;
  height: 56px;
  flex: none;
  object-fit: contain;
  filter: var(--ds-shadow-logo);
}

.emu-footer__about {
  font-size: var(--ds-text-ui);
  line-height: var(--ds-leading-normal);
  color: var(--ds-color-on-primary-dim);
  margin: 0 0 var(--ds-space-5);
}

/* ---- تیترِ ستون: میله‌ی طلاییِ کوچک به‌جای خطِ زیرین ---- */
.emu-footer h3 {
  display: flex;
  align-items: center;
  gap: var(--ds-space-2);
  font-size: var(--ds-text-ui-lg);
  font-weight: 700;
  line-height: var(--ds-leading-tight);
  color: var(--ds-color-on-primary);
  margin: 0 0 var(--ds-space-5);
}

.emu-footer h3::before {
  content: "";
  flex: none;
  width: 4px;
  height: 1em;
  border-radius: var(--ds-radius-pill);
  background: var(--ds-color-accent);
}
/* در ستونِ معرفی، میله کنارِ لوگو تکراری است. */
.emu-footer__brand h3 { margin: 0; }
.emu-footer__brand h3::before { display: none; }

/* ---- فهرست لینک‌ها ---- */
.emu-footer ul { list-style: none; margin: 0; padding: 0; }
.emu-footer__links li { margin-bottom: var(--ds-space-3); }

.emu-footer__links a {
  display: flex;
  align-items: center;
  gap: var(--ds-space-2);
  font-size: var(--ds-text-ui);
  color: var(--ds-color-on-primary-dim);
  text-decoration: none;
  transition: color var(--ds-motion-fast) var(--ds-ease);
}

.emu-footer__links a:hover,
.emu-footer__links a:focus-visible { color: var(--ds-color-accent); }

.emu-footer__arrow {
  width: 12px;
  height: 12px;
  flex: none;
  color: var(--ds-color-accent);
  opacity: .45;
  transition: opacity var(--ds-motion-fast) var(--ds-ease);
}
.emu-footer__links a:hover .emu-footer__arrow,
.emu-footer__links a:focus-visible .emu-footer__arrow { opacity: 1; }

/* ---- ستون آدرس ---- */
.emu-footer__addr {
  display: flex;
  gap: var(--ds-space-3);
  align-items: flex-start;
  text-align: start;
  margin-bottom: var(--ds-space-4);
}
.emu-footer__addr--center { align-items: center; }

.emu-footer__addr-ic {
  flex: none;
  width: 32px;
  height: 32px;
  border-radius: var(--ds-radius-md);
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--ds-color-accent);
  background: var(--ds-color-on-primary-fill);
  border: 1px solid var(--ds-color-on-primary-line);
}
.emu-footer__addr-ic svg { width: 16px; height: 16px; }

.emu-footer__addr p { margin: 0; }
.emu-footer__addr b {
  display: block;
  font-size: var(--ds-text-ui);
  font-weight: 700;
  color: var(--ds-color-on-primary);
  margin-bottom: var(--ds-space-1);
}
.emu-footer__addr small {
  display: block;
  font-size: var(--ds-text-ui-sm);
  line-height: var(--ds-leading-normal);
  color: var(--ds-color-on-primary-dim);
}

.emu-footer__cta {
  /* `box-sizing` عمداً اینجا تکرار شده: این تنها عنصرِ ما با `width: 100%`
     و پدینگِ افقی است. اگر روزی ریستِ قالبِ مادر عوض شود، پدینگ به عرض
     اضافه می‌شود و دکمه از ستون بیرون می‌زند — روی موبایل یعنی لغزشِ افقی. */
  box-sizing: border-box;
  width: 100%;
  margin-block-start: var(--ds-space-4);
  text-align: center;
}

.emu-footer__site {
  font-size: var(--ds-text-ui);
  font-weight: 500;
  color: var(--ds-color-accent);
  text-decoration: none;
}
.emu-footer__site:hover,
.emu-footer__site:focus-visible { color: var(--ds-color-accent-light); }

/* جعبه‌ی نقشه — تصویری بار نمی‌کند؛ فقط دری به نقشه‌ی گوگل. */
.emu-footer__map {
  height: 110px;
  border-radius: var(--ds-radius-lg);
  border: 1px solid var(--ds-color-on-primary-line);
  background: var(--ds-color-on-primary-fill);
  display: flex;
  align-items: center;
  justify-content: center;
}

.emu-footer__map a {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--ds-space-2);
  font-size: var(--ds-text-ui-sm);
  color: color-mix(in srgb, var(--ds-color-on-primary) 45%, transparent);
  text-decoration: none;
  transition: color var(--ds-motion-fast) var(--ds-ease);
}
.emu-footer__map a:hover,
.emu-footer__map a:focus-visible { color: var(--ds-color-accent); }
.emu-footer__map svg { width: 24px; height: 24px; color: color-mix(in srgb, var(--ds-color-accent) 60%, transparent); }

/* ---- شبکه‌های اجتماعی ----
   هدف لمسی روی موبایل باید ۴۴px بماند، پس قرصِ متن‌دار است نه آیکنِ تنها. */
/* ---- شبکه‌های اجتماعی: ردیفِ آیکنِ گِرد ----
   ⚠️ هدفِ لمس ۴۴px است نه ۳۶pxِ طرح: WCAG 2.5.5 و همان قاعده‌ی
   موبایل-اولِ این سایت. قرصِ متن‌دارِ قبلی جایش را به آیکنِ تنها داد،
   پس `aria-label` تنها چیزی است که صفحه‌خوان می‌شنود — و هست. */
.emu-footer__social {
  display: flex;
  flex-wrap: wrap;
  gap: var(--ds-space-2);
}

.emu-footer__social-link {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: var(--ds-tap-min);
  height: var(--ds-tap-min);
  color: var(--ds-color-on-primary-dim);
  text-decoration: none;
  background: var(--ds-color-on-primary-fill);
  border: 1px solid var(--ds-color-on-primary-line);
  border-radius: var(--ds-radius-pill);
  transition: color var(--ds-motion-fast) var(--ds-ease),
              background-color var(--ds-motion-fast) var(--ds-ease),
              border-color var(--ds-motion-fast) var(--ds-ease),
              transform var(--ds-motion-fast) var(--ds-ease);
}

a.emu-footer__social-link:hover,
a.emu-footer__social-link:focus-visible {
  color: var(--ds-color-accent);
  background: color-mix(in srgb, var(--ds-color-accent) 20%, transparent);
  border-color: color-mix(in srgb, var(--ds-color-accent) 50%, transparent);
  transform: scale(1.1);
}

/* حسابی که هنوز باز نشده — دیده می‌شود ولی نه کلیک‌پذیر، نه وعده‌دهنده. */
.emu-footer__social-link--soon {
  cursor: default;
  opacity: .45;
}

.emu-footer__social-link svg { width: 18px; height: 18px; flex: none; }

/* ---- نوار پایین ----
   طرح: کپی‌رایت در یک سو و دو لینکِ حقوقی در سوی دیگر؛ روی موبایل
   ستونی و وسط‌چین. */
.emu-footer__bottom {
  margin-top: var(--ds-space-7);
  padding-top: var(--ds-space-5);
  border-top: 1px solid var(--ds-color-on-primary-line);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: space-between;
  gap: var(--ds-space-3);
  text-align: center;
  font-size: var(--ds-text-ui-sm);
  color: var(--ds-color-on-primary-dim);
}

@media (min-width: 640px) { .emu-footer__bottom { flex-direction: row; } }

.emu-footer__copy { margin: 0; }

.emu-footer__legal {
  display: flex;
  gap: var(--ds-space-4);
}

/* ⚠️ `<a>`ِ بی‌`href` نه رنگِ لینک می‌گیرد نه اشاره‌گر — هر دو صریح
   لازم‌اند تا تا روزِ اتصالِ صفحه‌ها هم مثل طرح دیده شود. */
.emu-footer__legal a {
  color: var(--ds-color-on-primary-dim);
  text-decoration: none;
  transition: color var(--ds-motion-fast) var(--ds-ease);
}

.emu-footer__legal a:hover,
.emu-footer__legal a:focus-visible { color: var(--ds-color-accent); }

@media (prefers-reduced-motion: reduce) {
  .emu-footer__legal a { transition: none; }
}

@media (prefers-reduced-motion: reduce) {
  .emu-footer__links a,
  .emu-footer__arrow,
  .emu-footer__social-link { transition: none; }
}
/* ============================================================
   ۶. CTA صفحه پذیرش
   ============================================================ */
.emu-cta {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--ds-space-2);
  min-height: var(--ds-tap-min);
  padding: var(--ds-space-3) var(--ds-space-6);
  border-radius: var(--ds-radius-lg);
  font-size: var(--ds-text-ui-lg);
  font-weight: 700;
  text-decoration: none;
  background: linear-gradient(135deg, var(--ds-color-accent), var(--ds-color-accent-light));
  color: var(--ds-color-primary-dark);
  transition: transform var(--ds-motion-fast) var(--ds-ease),
              filter var(--ds-motion-fast) var(--ds-ease);
}
.emu-cta:hover,
.emu-cta:focus-visible {
  color: var(--ds-color-primary-dark);
  filter: brightness(1.05);
  transform: translateY(-2px);
}
.emu-cta:active { transform: scale(.97); }

@media (prefers-reduced-motion: reduce) {
  .emu-cta { transition: none; }
}

/* دسترس‌پذیری: پرش به محتوا */
.emu-skip {
  position: absolute;
  width: 1px; height: 1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  clip-path: inset(50%);
  white-space: nowrap;
}
.emu-skip:focus {
  position: fixed;
  top: 10px; inset-inline-start: 10px;
  width: auto; height: auto;
  clip: auto; clip-path: none;
  background: var(--emu-gold); color: var(--emu-blue);
  padding: 10px 18px; z-index: 999; font-weight: 700;
}

/* ============================================================
   ۷. استایل‌های محتوایی موجود (حفظ‌شده از نسخه قبل)
   ============================================================ */
.mylist li { list-style: none; position: relative; padding: 3px 0 2px 25px; }
.mylist li::before {
  content: ""; position: absolute; right: -30px; top: 7px;
  border: solid 10px var(--emu-blue); border-radius: 8px;
}
.mylist li::after {
  content: ""; position: absolute; right: -22px; top: 11px;
  width: 3px; height: 10px;
  border: solid #fff; border-width: 0 2px 2px 0;
  transform: rotate(45deg);
}

/* ============================================================
   ۸. گالری — بلوک `wp:gallery` هسته
   ============================================================
   ── چرا از شورت‌کد `[gallery]` کوچ کردیم ──
   ۱. شورت‌کد کلاسیک **لایت‌باکسِ بومی وردپرس را نمی‌گیرد**؛ فقط بلوک
      تصویر می‌گیرد (`lightbox.enabled` → Interactivity API).
   ۲. آسترا در `galleries.min.css` هنوز چیدمانِ float قدیمی را استایل
      می‌کند: `.gallery-columns-3 .gallery-item { max-width: 33.33% }`.
      ما شبکه‌ی grid ساخته بودیم، پس هر آیتم ستون خودش را داشت و آن
      ۳۳٪ روی *ستون* حساب می‌شد ⇒ تصاویر ۱۲۴px آب می‌رفتند. ← همان
      باگی که دیده شد.
   ۳. بلوک گالری در گوتنبرگ قابل ویرایش است؛ شورت‌کد جعبه‌ی سیاه بود.

   ── چرا اینجا کد کمی هست ──
   عرضِ ستون‌ها را عمداً به خود هسته سپرده‌ایم:
   `.columns-3` زیر `@media (min-width: 600px)` تعریف شده، پس روی موبایل
   خودبه‌خود به دو ستون برمی‌گردد. ما فقط نسبت تصویر، گردی و فاصله را
   می‌دهیم — بدون جنگِ specificity با `:not(#individual-image)` هسته. */
.wp-block-gallery.emu-gallery {
  --wp--style--unstable-gallery-gap: var(--ds-space-3);
  gap: var(--ds-space-3);
  margin-block-end: var(--ds-space-5);
}

.wp-block-gallery.emu-gallery figure.wp-block-image {
  aspect-ratio: var(--ds-ratio-media);   /* کاشی‌ها هم‌اندازه — شبکه ناهموار نشود */
  border-radius: var(--ds-radius-md);
  overflow: hidden;
  background: var(--ds-color-surface-soft);   /* جای تصویر قبل از لود */
}

/* نشانه‌ی «قابل بزرگ‌شدن» — بدون آن کاربر نمی‌داند تصویر کلیک‌پذیر است. */
.wp-block-gallery.emu-gallery figure.wp-block-image img {
  transition: transform var(--ds-motion-base) var(--ds-ease);
}

@media (hover: hover) {
  .wp-block-gallery.emu-gallery figure.wp-block-image:hover img { transform: scale(1.04); }
}

@media (prefers-reduced-motion: reduce) {
  .wp-block-gallery.emu-gallery figure.wp-block-image img { transition: none; }
  .wp-block-gallery.emu-gallery figure.wp-block-image:hover img { transform: none; }
}

/* دکمه‌ی بزرگ‌نماییِ لایت‌باکسِ هسته — آسترا رنگش را ست نمی‌کند. */
.wp-block-gallery.emu-gallery .lightbox-trigger {
  border-radius: var(--ds-radius-sm);
}

/* ---- بخشِ آلبوم ----
   ⚠️ هیچ جاوااسکریپتِ تازه‌ای ندارد. بزرگ‌نمایی همان **لایت‌باکسِ بومیِ
   بلوکِ تصویرِ هسته** است (`lightbox.enabled`) که از قبل روی این صفحه بار
   می‌شود؛ چیدمان هم گریدِ CSS است. طرحِ استاتیک اینجا لایت‌باکسِ `:target`
   داشت — عمداً نیامد، چون معادلِ دستیِ چیزی است که هسته دارد (قاعده‌ی ۱۲).

   تصاویر تازه نیستند: همان شش عکسی‌اند که تا امروز داخلِ پنلِ «وسائل
   الراحة» پنهان بودند و حالا بخشِ خودشان را دارند. */
/* پدینگِ افقی‌اش را قاعده‌ی «تمام‌عرض» بالاتر می‌دهد؛ اینجا فقط عمودی. */
.wp-block-group.emu-album {
  margin-block: 0;
  padding-block: var(--ds-space-8);
}

.emu-album .emu-album__desc {
  max-width: 320px;
  margin-block: 0 var(--ds-space-6);
  color: var(--ds-color-muted);
  font-size: var(--ds-text-ui);
  line-height: var(--ds-leading-normal);
}

/* ---- سرِ آلبوم: تیتر در یک سو، توضیح در سوی دیگر ----
   در طرح `.emu-album__head` یک ردیفِ فلکس است: کیکر و تیتر در ابتدا،
   پاراگرافِ توضیح در انتها و هم‌ترازِ بالا. مارکاپِ ما تخت است (بلوک‌های
   بومیِ گوتنبرگ، قاعده‌ی ۱۲) پس همان ردیف را با گرید می‌سازیم بی‌آنکه
   `wp:group`ِ اضافه‌ای در محتوا بنشیند.

   `> *` عمداً اول می‌آید: هر بلوکِ تازه‌ای که فردا اینجا اضافه شود
   خودبه‌خود تمام‌عرض و زیرِ سر می‌افتد، نه در ستونِ توضیح. */
@media (min-width: 782px) {
  .wp-block-group.emu-album {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    column-gap: var(--ds-space-6);
    align-items: start;
  }

  .emu-album > * { grid-column: 1 / -1; }
  .emu-album > .emu-kicker { grid-column: 1; grid-row: 1; }
  .emu-album > .emu-h2-start { grid-column: 1; grid-row: 2; }

  .emu-album > .emu-album__desc {
    grid-column: 2;
    grid-row: 1 / span 2;
    margin-block: 0;
  }
}

.emu-album .wp-block-gallery.has-nested-images {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: var(--ds-space-3);
  margin-block-end: 0;
}

/* ⚠️ هسته عرضِ هر کاشی را این‌طور می‌نویسد:
       `.wp-block-gallery.has-nested-images
        figure.wp-block-image:not(#individual-image) { width: calc(33.33% - …) }`
   یعنی ویژگیِ (1,3,1) — آن `#individual-image` عمداً آنجاست تا کسی به‌سادگی
   نبَردش. داخلِ گرید، آن ۳۳٪ روی **خانه‌ی گرید** حساب می‌شود نه ردیف، و
   تصاویر آب می‌روند (همان باگی که در بخشِ بالا هم ثبت شده). تنها راهِ
   بی‌`!important`، تکرارِ همان ترفند با یک کلاسِ بیشتر است. */
.emu-album .wp-block-gallery.has-nested-images figure.wp-block-image:not(#individual-image) {
  width: auto;
  margin: 0;
}

.emu-album .wp-block-gallery.has-nested-images > figure.wp-block-image:first-child {
  grid-column: span 2;
}

@media (min-width: 782px) {
  .emu-album .wp-block-gallery.has-nested-images { grid-template-columns: repeat(3, 1fr); }

  /* کاشیِ شاخص دو ستون و دو ردیف می‌گیرد، پس نسبتِ تصویرِ ثابت را
     کنار می‌گذارد و خودِ خانه‌ی گرید ارتفاعش را می‌دهد. */
  /* ⚠️ `span 1` است نه `span 2`. در طرح کاشیِ شاخص **یک ستون** می‌گیرد و
     دو ردیف بلند است، و چهار کاشیِ دیگر دو ستونِ باقی‌مانده را در دو
     ردیف پر می‌کنند — یعنی شبکه‌ی طرح دقیقاً پنج عکس دارد. با `span 2`
     فقط دو خانه کنارِ شاخص می‌ماند و بقیه به ردیفِ سومِ ناهم‌اندازه
     می‌ریختند. ارتفاعِ ردیف‌ها را همان `aspect-ratio`ِ کاشی‌های کوچک
     می‌دهد، پس عددِ خامی لازم نیست. */
  .emu-album .wp-block-gallery.has-nested-images > figure.wp-block-image:first-child {
    grid-column: span 1;
    grid-row: span 2;
    aspect-ratio: auto;
  }
}

/* پدافند: اگر روزی گالریِ کلاسیک `[gallery]` جایی برگردد، دیگر
   زیر قاعده‌ی float آسترا آب نرود. */
.gallery .gallery-item { max-width: none; padding: 0; }


/* ============================================================
   ۹. بلوک‌های بومیِ صفحه اصلی — جایگزین ویجت‌های المنتور
   ============================================================
   چرا اینجا و نه در افزونه: این‌ها نشانه‌گذاری **هسته‌ی وردپرس** را
   استایل می‌کنند (`wp:details`، `wp:table`، `wp:buttons`) نه خروجی هیچ
   شورت‌کدی. افزونه‌ی lite-blocks فایل CSS‌اش را فقط وقتی صف می‌کند که
   شورت‌کدش رندر شده باشد؛ پس اگر این‌ها آنجا بودند، صفحه‌ی بدون شورت‌کد
   بی‌استایل می‌ماند. همان دلیلِ بخش ۸ (گالری).

   قاعده‌ی دیزاین‌سیستم: هیچ مقدار خامی اینجا نیست — همه از `:root`
   بالای همین فایل که `tokens.py sync` تولیدش می‌کند. */

/* ---- تمام‌عرض کردنِ یک بخش ----
   ویدیوی بالای صفحه و بخشِ مشاوره باید از لبه تا لبه‌ی صفحه بروند، ولی
   داخلِ `.entry-content`ِ محدودشده‌ی آسترا نشسته‌اند.

   `calc(50% - 50vw)` قرینه است، پس در RTL و LTR یکسان عمل می‌کند: نصفِ
   عرضِ ظرف منهای نصفِ عرضِ دید. چون `.ast-container` وسط‌چین است، نتیجه
   دقیقاً لبه‌ی صفحه می‌شود.

   ⚠️ `100vw` عرضِ نوارِ پیمایش را هم می‌شمارد. روی ویندوز با نوارِ کلاسیک
   یعنی ~۱۵px سرریز و لغزشِ افقیِ کلِ صفحه. `overflow-x: clip` روی ریشه
   جلویش را می‌گیرد — عمداً `hidden` نیست، چون `hidden` هر `position: sticky`
   داخلِ صفحه را هم می‌کُشد. */
html { overflow-x: clip; }

/* ⚠️ سلکتور عمداً سه‌کلاسه است. آسترا این را می‌نویسد:
       `.entry-content[data-ast-blocks-layout] > *
        { max-width: …; margin-left: auto; margin-right: auto }`
   یعنی ویژگیِ (0,2,0) روی **هر** فرزندِ مستقیمِ محتوا. اولین تلاشِ ما
   `.emu-hero-video` تنها بود (0,1,0) و **بی‌صدا باخت**: قاعده در فایل بود،
   سلکتور هم می‌خورد، ولی ویدیو ۱۲۰۰px ماند نه ۱۲۸۰px. همان تله‌ی تصویر
   شاخص، این بار روی ویدیو. بردن با ویژگی، نه با `!important`. */
.entry-content[data-ast-blocks-layout] > .emu-hero-video,
.entry-content[data-ast-blocks-layout] > .emu-consult {
  width: 100vw;
  max-width: 100vw;
  margin-inline: calc(50% - 50vw);
  border-radius: 0;
}

/* ---- نوارِ تمام‌عرضِ بخش ----
   طرح همه‌ی صفحه را یک رنگ نمی‌کند: بومِ گرم زمینه‌ی کلی است و دو بخش
   (رسوم و رشته‌های پرتقاضا) روی نوارِ **سفید** می‌نشینند تا از هم جدا
   دیده شوند. بدونِ این، کارت‌های سفیدِ آکاردئون در بوم گم می‌شدند. */
.entry-content[data-ast-blocks-layout] > .emu-band {
  width: 100vw;
  max-width: 100vw;
  margin-inline: calc(50% - 50vw);
  /* ⚠️ حاشیه‌ی عمودی **صفر** است و باید بماند. در طرح، بخش‌ها به هم
     می‌چسبند و فاصله‌شان را فقط از پدینگِ خودشان می‌گیرند. حاشیه‌ی
     ۸۰pxِ قبلی روی پدینگِ ۶۴px سوار می‌شد و بینِ دو بخش ۱۴۴px فاصله
     می‌ماند — دو برابرِ طرح. */
  margin-block: 0;
  padding: var(--ds-space-8) var(--ds-space-4);
}

.emu-band > * {
  max-width: var(--ds-width-content);
  margin-inline: auto;
}

/* ---- آلبوم و مقالات: تمام‌عرض، مثلِ بقیه‌ی بخش‌ها ----
   این دو بخش تنها بخش‌هایی بودند که تمام‌عرض نمی‌شدند: داخلِ ظرفِ ۱۲۰۰
   پیکسلیِ آسترا می‌ماندند و پدینگِ ۲۰pxِ خودِ ظرف هم رویشان سوار می‌شد.
   روی ۳۷۵ یعنی محتوایشان ۳۰۳px بود در حالی که نوارها ۳۴۳px داشتند.

   ⚠️ ستونِ ۱۱۵۲ را عمداً با `padding-inline: max(...)` می‌سازیم، نه با
   `> * { max-width; margin-inline: auto }`ِ نوارها. هر دو بخش از ۷۸۲
   به بعد **گرید**اند (سرِ بخش یک ردیف، محتوا ردیفِ بعد) و گذاشتنِ
   max-width روی فرزندها ستون‌ها را خراب می‌کرد. این‌طور فرزندها اصلاً
   دست نمی‌خورند. */
.entry-content[data-ast-blocks-layout] > .emu-album,
.entry-content[data-ast-blocks-layout] > .emu-articles {
  width: 100vw;
  max-width: 100vw;
  margin-inline: calc(50% - 50vw);
  /* ⚠️ `100vw` است نه `100%`. درصد در `padding` روی **بلوکِ در بر گیرنده**
     حساب می‌شود، یعنی `.entry-content`ِ ۱۲۰۰پیکسلی — نه روی خودِ این
     عنصر که ۱۰۰vw شده. با `100%` پدینگ ۲۴px درآمد و ستون ۱۲۳۲ ماند
     به‌جای ۱۱۵۲؛ سنجه گرفتش. */
  padding-inline: max(var(--ds-space-4), (100vw - var(--ds-width-content)) / 2);
}


.emu-band--white { background: var(--ds-color-surface); }

/* ⚠️ تفاوتِ عمدی با سایتِ عربی — نوارِ خالی دیده نشود.
   بلوکِ `lite-blocks/programs-rail` وقتی هیچ‌کدام از رشته‌هایش صفحه‌ی
   منتشرشده نداشته باشند **رشته‌ی خالی** برمی‌گرداند
   (`class-lb-programs-rail.php` → `if ( empty( $cards ) ) return '';`).
   emu-edu.ir هنوز صفحه‌ی `emu_program` ندارد، پس نوارِ سفیدِ ریل امروز
   یک نوارِ سفیدِ ۱۲۸ پیکسلیِ خالی می‌شد.

   بلوک با هر پنج رشته‌اش سرِ جایش در محتوا می‌ماند — روزی که صفحه‌های
   فارسیِ رشته‌ها منتشر شوند ریل **خودبه‌خود** روشن می‌شود و این قاعده
   خودبه‌خود بی‌اثر. یعنی ترتیبِ بخش‌ها با طرح یکی می‌ماند و بازگشتش
   صفر کار دارد. → projects/emuedu/BACKLOG.md

   ⚠️ `:empty` اینجا **کار نمی‌کند** و سنجیده شد: گوتنبرگ گروه را با
   خطوطِ خالی می‌بندد، پس `<div>` یک گره‌ی متنیِ فاصله دارد و
   `:empty` — که گره‌ی متنی را هم می‌شمارد — رد می‌شود. نتیجه‌اش یک
   نوارِ سفیدِ ۳۷۵×۱۲۸ بود که هیچ خطایی نمی‌داد.
   `:not(:has(*))` فقط فرزندِ **عنصری** را می‌بیند و فاصله را نادیده
   می‌گیرد؛ همان چیزی که می‌خواهیم. */
.entry-content[data-ast-blocks-layout] > .emu-band:not(:has(*)) { display: none; }

/* ---- سرِ بخش: کیکر + تیترِ وسط‌چین + خطِ طلایی ---- */
/* ⚠️ `margin-inline: auto` لازم است، نه فقط `text-align: center`.
   `.emu-band > *` جعبه را وسط می‌آورد ولی `margin: 0 0 …`ِ اینجا (0,2,0)
   بر آن (0,1,0) می‌چربید و جعبه‌ی ۱۱۵۲پیکسلیِ کیکر به لبه‌ی ابتدای
   نوارِ ۱۲۴۸پیکسلی می‌چسبید — متن ۴۸px از تیترِ زیرش دورتر می‌افتاد.
   حالتِ `--start` پایین‌تر دوباره صفرش می‌کند. */
.entry-content .emu-kicker {
  display: block;
  margin: 0 auto var(--ds-space-2);
  text-align: center;
  color: var(--ds-color-accent);
  font-size: var(--ds-text-ui-sm);
  font-weight: 700;
  letter-spacing: .1em;
}

.entry-content .emu-h2-center {
  margin-block: 0 var(--ds-space-7);
  max-width: 672px;
  margin-inline: auto;
  text-align: center;
}

.entry-content .emu-h2-center::after {
  content: "";
  display: block;
  height: 2px;
  width: 80px;
  margin: var(--ds-space-4) auto 0;
  border-radius: var(--ds-radius-pill);
  background: linear-gradient(to right, transparent, var(--ds-color-accent), transparent);
}

/* ---- سرِ بخش، حالتِ ابتدایی (نه وسط‌چین) ---- */
.entry-content .emu-kicker--start { text-align: start; margin-inline: 0; }

.entry-content .emu-h2-start {
  margin-block: 0 var(--ds-space-7);
  text-align: start;
}

.entry-content .emu-h2-start::after {
  content: "";
  display: block;
  height: 2px;
  width: 64px;
  margin-block-start: var(--ds-space-3);
  border-radius: var(--ds-radius-pill);
  background: linear-gradient(to left, var(--ds-color-accent), transparent);
}

/* مثلِ آلبوم — افقی از قاعده‌ی «تمام‌عرض» می‌آید. */
.wp-block-group.emu-articles {
  margin-block: 0;
  padding-block: var(--ds-space-8);
}

/* ---- «عرض الكل» کنارِ تیترِ مقالات ----
   در طرح یک لینکِ متنی با فلش است که با **پایینِ** بلوکِ تیتر هم‌تراز
   می‌شود (`align-items: flex-end`). مارکاپِ ما تخت است، پس همان ردیف را
   با گرید می‌سازیم — دقیقاً مثل سرِ آلبوم.

   ⚠️ فعلاً `<p>` است نه `<a>`: سایت صفحه‌ی آرشیوِ نوشته‌ها ندارد
   (`page_for_posts = 0`). لینکِ بی‌مقصد بدتر از متنِ بی‌لینک است؛ به‌محضِ
   ساخته‌شدنِ آرشیو همین پاراگراف `<a>` می‌شود و CSS دست نمی‌خورد. */
.emu-articles .emu-articles__all {
  display: inline-flex;
  align-items: center;
  gap: var(--ds-space-2);
  margin-block: 0 var(--ds-space-7);
  font-size: var(--ds-text-ui);
  font-weight: 500;
  color: var(--ds-color-primary);
  white-space: nowrap;
}

.emu-articles .emu-articles__all::after {
  content: "";
  width: .45em;
  height: .45em;
  border: solid currentColor;
  border-width: 0 0 2px 2px;
  transform: rotate(45deg);
}

@media (min-width: 782px) {
  .wp-block-group.emu-articles {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    column-gap: var(--ds-space-6);
    align-items: start;
  }

  .emu-articles > * { grid-column: 1 / -1; }
  .emu-articles > .emu-kicker { grid-column: 1; grid-row: 1; }
  .emu-articles > .emu-h2-start { grid-column: 1; grid-row: 2; }

  /* حاشیه‌ی پایینش عمداً همان `--ds-space-7`ِ تیتر است تا لبه‌ی پایینش
     دقیقاً روی خطِ طلاییِ زیرِ تیتر بیفتد — همان هم‌ترازیِ طرح. */
  .emu-articles > .emu-articles__all {
    grid-column: 2;
    grid-row: 2;
    align-self: end;
  }
}

/* ---- ویدیوی بالای صفحه ----
   جایگزین ویجت `video` المنتور. نسبت تصویر از قبل رزرو می‌شود تا صفحه
   موقع لود ویدیو نپرد (CLS).

   ⚠️ `poster` دیگر تزئینی نیست — **عنصر LCP همین است**. تا وقتی ۳٫۴ مگابایت
   ویدیو برسد، چیزی جز پرده‌ی سرمه‌ای دیده نمی‌شد. پوستر webp ۱۲۹ کیلوبایتی
   با `fetchpriority="high"` جایش را می‌گیرد. */
.emu-hero-video {
  position: relative;
  aspect-ratio: var(--ds-ratio-video);
  max-height: 90vh;
  overflow: hidden;
  background: var(--ds-color-primary-dark);
  margin-block-end: var(--ds-space-7);
}

.emu-hero-video video {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

/* پرده — بالا کمی تیره تا هدر روی ویدیو ننشیند، پایین به رنگِ صفحه محو
   می‌شود تا مرزِ ویدیو و متن خط نکشد. */
.emu-hero-video__overlay {
  position: absolute;
  inset: 0;
  pointer-events: none;
  background: linear-gradient(to bottom,
              color-mix(in srgb, var(--ds-color-primary-dark) 18%, transparent) 0%,
              transparent 30%,
              transparent 58%,
              var(--ds-color-surface-soft) 100%);
}

.emu-hero-video__goldline {
  position: absolute;
  inset-block-start: 0;
  inset-inline: 0;
  height: 2px;
  pointer-events: none;
  background: linear-gradient(to right, transparent, var(--ds-color-accent), transparent);
  opacity: .4;
}

/* ⚠️ این دکمه دسترس‌پذیری است، نه تزئین. WCAG 2.2.2 برای هر حرکتِ خودکارِ
   بیش از پنج ثانیه راهی برای توقف می‌خواهد؛ ویدیو ۳۱ ثانیه است و تا امروز
   هیچ راهی نداشت. دکمه‌ی بی‌صدا حذف شد چون این فایل اصلاً باندِ صدا ندارد. */
/* ⚠️ `inset-inline-end` است نه `start`. ظرف RTL است، پس `start` دکمه‌ها را
   سمتِ **راست** می‌برد در حالی که در طرح گوشه‌ی **چپِ** پایین می‌نشینند.
   `display: flex` هم لازم است: دو دکمه‌اند (کتم صدا و توقف) و بی آن روی
   هم می‌افتند. */
.emu-hero-video__controls {
  position: absolute;
  inset-block-end: var(--ds-space-5);
  inset-inline-end: var(--ds-space-5);
  display: flex;
  gap: var(--ds-space-2);
}

.emu-hero-video__btn {
  /* ⚠️ آسترا روی هر `<button>` پدینگِ `20px 40px` می‌نشاند. با
     `box-sizing: border-box` عرضِ ۴۴px را به ۸۲px می‌بُرد — سنجه گرفتش،
     نه چشم. صفرکردنِ صریحِ پدینگ تنها راهِ بی‌`!important`. */
  padding: 0;
  border-width: 1px;
  width: var(--ds-tap-min);
  height: var(--ds-tap-min);
  border-radius: var(--ds-radius-pill);
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  color: var(--ds-color-on-primary);
  background: color-mix(in srgb, var(--ds-color-primary) 60%, transparent);
  border: 1px solid color-mix(in srgb, var(--ds-color-accent) 40%, transparent);
  backdrop-filter: blur(4px);
  transition: transform var(--ds-motion-fast) var(--ds-ease),
              border-color var(--ds-motion-fast) var(--ds-ease);
}
/* دکمه تا وقتی جاوااسکریپت نیامده `hidden` است؛ `display: flex`ِ بالا
   قاعده‌ی پیش‌فرضِ مرورگر را می‌بَرد، پس صریح خاموشش می‌کنیم. */
.emu-hero-video__btn[hidden] { display: none; }

.emu-hero-video__btn:hover,
.emu-hero-video__btn:focus-visible { transform: scale(1.08); border-color: var(--ds-color-accent); }
/* آسترا `svg` را `width: auto` می‌کند؛ سلکتورِ دوکلاسه پس می‌گیردش.
   ⚠️ `display: block` **اینجا نیست** و نباید برگردد. این قاعده (0,3,0)
   بود و قاعده‌های حالتِ زیرش (0,2,0) را می‌بُرد، پس هر دو آیکن با هم
   دیده می‌شدند و دکمه‌ی ۴۴پیکسلی یک قرصِ کشیده با مثلث و دو خط می‌شد.
   نمایش را فقط قاعده‌های حالت تعیین می‌کنند. */
.emu-hero-video .emu-hero-video__btn svg { width: 18px; height: 18px; }

/* ⚠️ `fill` فقط روی دکمه‌ی توقف. آیکن‌های صدا `fill="none"` و
   `stroke="currentColor"` درون‌خطی دارند و `fill: currentColor`ِ عام
   بلندگو را یک لکه‌ی توپُر می‌کرد — صفتِ درون‌خطی از CSS ضعیف‌تر است. */
.emu-hero-video .emu-hero-video__btn--play svg { fill: currentColor; }
.emu-hero-video__btn .icon-main { display: block; }
.emu-hero-video__btn .icon-alt { display: none; }
.emu-hero-video__btn[aria-pressed="true"] .icon-main { display: none; }
.emu-hero-video__btn[aria-pressed="true"] .icon-alt  { display: block; }

@media (max-width: 767px) { .emu-hero-video { aspect-ratio: var(--ds-ratio-media); } }

@media (prefers-reduced-motion: reduce) {
  .emu-hero-video__btn { transition: none; }
}

/* ---- حلقه‌ی نورِ گردانِ دکمه‌های طلایی ----
   نوارِ باریکِ نوری که دورِ دکمه می‌چرخد. کلِ کارش یک زاویه‌ی متحرک است.

   `@property` اینجا **لازم** است: زاویه‌ی `conic-gradient` بدونِ ثبت‌شدن
   انیمیت نمی‌شود. مرورگری که نداردش، حلقه را ساکن نشان می‌دهد — نه
   خراب. `mask-composite` وسطِ دکمه را می‌بُرد تا فقط قابش نور بگیرد. */
@property --emu-beam { syntax: '<angle>'; initial-value: 0deg; inherits: false; }

/* ⚠️ دکمه‌ی کارتِ CTA بلوکِ بومیِ `wp:button` است و کلاسِ گوتنبرگ روی
   **پوشش** می‌نشیند نه روی `<a>` (تله‌ی ۱۸). پس نمی‌شود `cta-beam` را
   رویش گذاشت و سلکتورش اینجا کنارِ خودِ کلاس می‌آید. */
.cta-beam,
.emu-cta-card .wp-block-button > .wp-block-button__link { position: relative; }

.cta-beam::before,
.emu-cta-card .wp-block-button > .wp-block-button__link::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  padding: 2px;
  pointer-events: none;
  background: conic-gradient(from var(--emu-beam),
              transparent 0%, transparent 70%,
              color-mix(in srgb, var(--ds-color-accent-light) 55%, transparent) 80%,
              var(--ds-color-surface) 88%, var(--ds-color-surface) 92%,
              color-mix(in srgb, var(--ds-color-accent-light) 55%, transparent) 97%,
              transparent 100%);
  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  -webkit-mask-composite: xor;
          mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
          mask-composite: exclude;
  animation: emu-beam-spin 3.2s linear infinite;
}

@keyframes emu-beam-spin { to { --emu-beam: 360deg; } }

@media (prefers-reduced-motion: reduce) {
  .cta-beam::before,
  .emu-cta-card .wp-block-button > .wp-block-button__link::before { animation: none; }
}

/* ---- کاشی‌های آمار ----
   عددها از **پاراگرافِ خودِ همین صفحه** می‌آیند، نه از حافظه: ۱۶٬۰۰۰ طالب،
   ۱۰۰ دولة، ۲۸۶ برنامج، ۱۹۷۹. اگر پاراگراف عوض شد، این‌ها هم باید عوض
   شوند — دو جا یک عدد، و این تنها استثنای پذیرفته‌شده است چون کاشی بدون
   عدد معنا ندارد. */
/* ⚠️ `padding: 0` و سلکتورِ سه‌کلاسه هر دو لازم‌اند. آسترا این را روی
   **هر** گروهِ فرزندِ مستقیمِ محتوا می‌نویسد:
       `.entry-content > .wp-block-group { padding: var(--wp--custom--ast-default-block-*-padding) }`
   که روی این سایت ۱۰۰px بالا و ۱۰۰px پایین است. بقیه‌ی بخش‌ها پدینگِ
   خودشان را صریح می‌دهند و از زیرش درمی‌روند؛ کاشی‌های آمار نمی‌دادند و
   بینِ پاراگراف و کاشی ۱۶۴px و بینِ کاشی و کارتِ CTA ۱۴۸px می‌ماند —
   در طرح هر دو ۴۸px است. سلکتورِ آسترا (0,2,0) با `.wp-block-group.emu-stats`
   گره می‌خورد و بردنش به ترتیبِ فایل‌ها وابسته می‌شد. */
.entry-content .wp-block-group.emu-stats {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--ds-space-4);
  padding: 0;
  margin-block: var(--ds-space-7);
}
/* ⚠️ سلکتور **باید** همان سه‌کلاسه‌ی بالا باشد. مدیا‌کوئری هیچ ویژگی‌ای
   اضافه نمی‌کند: قاعده‌ی پایه (0,3,0) بود و این یکی (0,2,0)، پس روی
   دسکتاپ هم `1fr 1fr` برنده می‌ماند و کاشی‌ها ۲×۲ می‌افتادند —
   اندازه‌گیری روی ۱۲۸۰: `592px 592px`. این باگ وقتی زاده شد که برای
   شکستِ پدینگِ آسترا ویژگیِ قاعده‌ی پایه را بالا بردم و این یکی جا ماند. */
@media (min-width: 640px) {
  .entry-content .wp-block-group.emu-stats { grid-template-columns: repeat(4, 1fr); }
}

.emu-stats .emu-stat {
  padding: var(--ds-space-5);
  text-align: center;
  background: var(--ds-color-surface);
  border: 1px solid var(--ds-color-accent-soft-dk);
  border-radius: var(--ds-radius-xl);
  box-shadow: var(--ds-shadow-sm);
}

/* ⚠️ هسته `:where(.is-layout-flow) > :where(*+*) { margin-block-start: 24px }`
   می‌نویسد. داخلِ گرید این یعنی کاشی‌های دوم تا چهارم ۲۴px پایین‌تر و
   ۲۴px کوتاه‌تر از کاشیِ اول بیفتند — اندازه‌گیری: ۱۳۳px در برابر ۱۰۹px.
   هم خودِ کاشی‌ها صفر می‌شوند، هم پاراگراف‌های درونشان. */
.wp-block-group.emu-stats > *,
.wp-block-group.emu-stats .emu-stat > * { margin-block: 0; }

.wp-block-group.emu-stats .emu-stat__num {
  /* عدد لاتین است و باید LTR بماند، وگرنه `+16,000` وارونه دیده می‌شود. */
  font-family: var(--ds-font-latin);
  direction: ltr;
  font-size: var(--ds-text-h3);
  font-weight: 700;
  line-height: var(--ds-leading-tight);
  color: var(--ds-color-primary);
  margin: 0 0 var(--ds-space-1);
}

.wp-block-group.emu-stats .emu-stat__label {
  font-size: var(--ds-text-ui-sm);
  color: var(--ds-color-faint);
  margin: 0;
}

/* ---- تصویر شاخص ----
   آسترا برای تصویر شاخص کلاس `ast-article-image-container--wide` می‌سازد و
   رویش `width: 1440px` با `margin-inline: -120px` می‌نشاند. روی دیدِ ۱۲۸۰
   یعنی **۸۰px سرریز از هر طرف** — صفحه افقی می‌لغزید. سنجه‌ی
   `scripts/ui-probe.js` گرفتش، نه چشم.

   تصویر به همان شبکه‌ای برمی‌گردد که بقیه‌ی سایت دارد (تصمیم ۰۱۰: هر ۲۸
   آدرس یک عرض). ضمناً فایلِ `large` آسترا ۱۰۲۴px است؛ کشیدنش تا ۱۴۴۰ فقط
   نرمش می‌کرد. */
/* قاعده‌ی آسترا این است — سه کلاس، بدون `!important`:
     `.ast-no-sidebar .site-content .ast-article-image-container--wide
      { margin-left:-120px; margin-right:-120px; max-width:unset; width:unset }`
   اولین تلاشِ ما دوکلاسه بود و **بی‌صدا باخت**؛ قاعده در استایل‌شیت بود،
   سلکتور هم می‌خورد، ولی ویژگی کم داشت. چهار کلاس یعنی بردن با ویژگی —
   نه با `!important` که تله‌ی بعدی را می‌سازد. */
.ast-no-sidebar .site-content
  .ast-single-post-featured-section.ast-article-image-container--wide {
  width: 100%;
  max-width: var(--emu-max);
  margin-inline: auto;
}

.ast-single-post-featured-section img {
  width: 100%;
  height: auto;
  border-radius: var(--ds-radius-lg);
}

/* ---- نوارِ فراخوان (CTA) — ۲۶ صفحه‌ی سایت ----
   ⚠️ این کلاس **مالِ صفحه‌ی خانه نیست**؛ روی ۲۶ صفحه‌ی دیگر هم هست
   (هاب‌های کلیه، الرسوم، السكن، من نحن، …). کارتِ عکس‌دارِ صفحه‌ی خانه
   کلاسِ جداگانه‌ی `emu-cta-card` دارد.
   یک بار همین دو تا قاطی شدند و ۲۶ صفحه نوارِ فراخوانشان به فلکسِ
   افقیِ سرمه‌ای تبدیل شد — بی‌هیچ خطایی. */
.wp-block-group.emu-cta-band {
  background: var(--ds-color-accent-soft);
  border: 1px solid var(--ds-color-accent-soft-dk);
  border-radius: var(--ds-radius-xl);
  padding: var(--ds-space-6);
  margin-block: var(--ds-space-7);
}

.entry-content .emu-cta-band h2 {
  margin: 0 0 var(--ds-space-3);
  color: var(--ds-color-primary-dark);
  font-size: var(--ds-text-h3);
  line-height: var(--ds-leading-tight);
}

.emu-cta-band p { margin: 0 0 var(--ds-space-4); color: var(--ds-color-text); }
.emu-cta-band > :last-child { margin-block-end: 0; }

/* دکمه‌ی این نوار مقصدِ اصلیِ آن صفحه است — پس پُر، نه خطی. */
.emu-cta-band .wp-block-button > .wp-block-button__link,
.emu-cta-band .wp-block-button > .wp-block-button__link:hover,
.emu-cta-band .wp-block-button > .wp-block-button__link:focus-visible {
  background: linear-gradient(135deg, var(--ds-color-accent), var(--ds-color-accent-light));
  border-color: transparent;
  color: var(--ds-color-primary-dark);
}

@media (max-width: 600px) {
  .wp-block-group.emu-cta-band { padding: var(--ds-space-5); }
}

/* ---- کارتِ فراخوان (CTA) ----
   ⚠️ عمداً `wp:html` نشد. طرح این کارت هفت `<div>`ِ تزئینی داشت؛ همه‌شان
   اینجا `::before`/`::after` شدند و محتوا در بلوک‌های بومیِ گوتنبرگ ماند
   (تصویر، تیتر، پاراگراف، فهرست، دکمه). یعنی ویراستار می‌تواند متن را
   عوض کند بدون اینکه به HTML دست بزند — قاعده‌ی ۱۲.

   چیدمان: موبایل یک ستون (عکس بالا)، از ۶۴۰ به بعد دو ستون. */
.wp-block-group.emu-cta-card {
  position: relative;
  display: flex;
  flex-direction: column;
  overflow: hidden;
  border: 0;
  border-radius: var(--ds-radius-2xl);
  padding: 0;
  margin-block: var(--ds-space-7) var(--ds-space-8);
  background: linear-gradient(135deg,
              var(--ds-color-primary-dark) 0%,
              var(--ds-color-primary) 60%,
              var(--ds-color-primary-light) 100%);
  /* ⚠️ سایه عمداً برداشته شد (۳۰ اوت، خواستِ کاربر) — روی هر دو سایت.
     `--ds-shadow-xl` اینجا بود و کارت را از بومِ صفحه جدا می‌کرد؛
     حالا فقط گرادیانِ خودش مرزش را می‌سازد. */
}

@media (min-width: 640px) {
  /* ⚠️ `row` است نه `row-reverse`: ظرف RTL است، پس فرزندِ اول (عکس) خودش
     سمتِ راست می‌نشیند و بدنه سمتِ چپ — دقیقاً مثل طرح. `row-reverse`
     جایشان را عوض می‌کرد و ماسکِ محوشدگی از سمتِ غلط می‌خورد. */
  .wp-block-group.emu-cta-card { flex-direction: row; align-items: stretch; }
}

/* عکس — نسبت ثابت دارد تا هیچ‌وقت صفحه نپرد (CLS صفر). */
/* ---- محوشدنِ لبه‌ی عکس: **یک تعریف، دو مصرف‌کننده** ----
   ⚠️ این متغیر عمداً اینجاست و نباید دوباره دو تکه شود. هم `<img>` و هم
   لایه‌ی رنگِ `::after` باید **دقیقاً** با یک ماسک محو شوند. تا امروز
   فقط عکس ماسک داشت و لایه‌ی رنگ نداشت — نتیجه‌اش خطِ تیره‌ی لبه بود:
   درست جایی که عکس کاملاً محو شده، لایه‌ی رنگ به بیشینه‌اش می‌رسید و
   روی **پس‌زمینه‌ی کارت** می‌نشست، بعد سرِ مرزِ جعبه ناگهان قطع می‌شد.
   یعنی نواری تیره‌تر از عکس و تیره‌تر از کارت، با یک پله در دو طرف —
   همان چیزی که مثلِ سایه دیده می‌شد و انگار کارت روی عکس سوار است. */
.emu-cta-card .emu-cta-card__media {
  --emu-cta-fade: linear-gradient(to bottom, #000 84%, transparent 100%);
  position: relative;
  flex: none;
  margin: 0;
  aspect-ratio: 2 / 3;
  overflow: hidden;
}

@media (min-width: 640px) {
  .emu-cta-card .emu-cta-card__media {
    /* جهت فیزیکی است نه منطقی. عکس سمتِ راست است، پس لبه‌ی چپش (رو به
       متن) باید محو شود: `to right` یعنی شفاف در چپ، پُر در راست. */
    --emu-cta-fade: linear-gradient(to right, transparent 0%, rgba(0,0,0,.4) 7%, rgba(0,0,0,.85) 17%, #000 30%);
    width: 40%;
    aspect-ratio: auto;
  }
}

.emu-cta-card .emu-cta-card__media img,
.emu-cta-card .emu-cta-card__media::after {
  -webkit-mask-image: var(--emu-cta-fade);
          mask-image: var(--emu-cta-fade);
}

.emu-cta-card .emu-cta-card__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  filter: brightness(.9);
}

/* لایه‌ی رنگ روی عکس — عکس را به پالتِ کارت می‌بَرد.
   ⚠️ روی موبایل عکس **پرتره** است (۲:۳) و قبلاً این لایه از همان بالا
   شروع می‌شد (۱۲٪) و تا ۵۵٪ می‌رفت — یعنی سرتاسرِ عکس، از جمله صورت،
   زیرِ پرده‌ی سرمه‌ای می‌رفت. کارِ این لایه **پلِ بصری** بینِ عکس و
   کارت است، نه پوشاندنِ عکس؛ پس تا ۵۸٪ کاملاً شفاف می‌ماند و فقط
   یک‌سومِ پایین وارد سرمه‌ای می‌شود. روی دسکتاپ عکس افقی است و در کنارِ
   متن می‌نشیند — آنجا قاعده‌ی خودش را دارد و دست نخورد. */
.emu-cta-card .emu-cta-card__media::after {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  background: linear-gradient(to bottom,
              transparent 0%,
              transparent 58%,
              color-mix(in srgb, var(--ds-color-primary-dark) 20%, transparent) 80%,
              color-mix(in srgb, var(--ds-color-primary-dark) 55%, transparent) 100%);
}
@media (min-width: 640px) {
  /* ⚠️ همان ایرادِ موبایل، ولی چرخیده: لایه‌ی رنگ ۹۰٪ سرمه‌ای را از لبه‌ی
     چپ شروع می‌کرد — جایی که عکس اصلاً دیده نمی‌شود — و تا ۱۰۰٪ عرض
     ۱۲٪ پرده روی **کلِ** عکس می‌کشید. حالا ماسکِ مشترک لبه را حل می‌کند
     و خودِ گرادیان فقط در نوارِ محوشدگی رنگ می‌گذارد: از ۴۵٪ به بعد عکس
     تقریباً بی‌پرده است. کارِ این لایه پیوند دادنِ عکس به پالتِ کارت است،
     نه مات کردنش. */
  .emu-cta-card .emu-cta-card__media::after {
    background: linear-gradient(to right,
                color-mix(in srgb, var(--ds-color-primary) 85%, transparent) 0%,
                color-mix(in srgb, var(--ds-color-primary) 34%, transparent) 20%,
                color-mix(in srgb, var(--ds-color-primary-dark) 6%, transparent) 45%,
                transparent 100%);
  }
}

/* ---- نشانِ «في أقل من ٣ أيام» ----
   ⚠️ خواهرِ عکس است نه فرزندش: بلوکِ `wp:image` هسته جایی برای فرزندِ
   اضافه ندارد و بردنش داخلِ HTML خام یعنی خروج از ویرایشگر (قاعده‌ی ۱۲).
   پس نسبت به کلِ کارت جای‌گذاری می‌شود و `inset-inline-start` در RTL
   می‌بردش روی نیمه‌ی راست — همان‌جا که عکس است.

   زیر ۶۴۰px پنهان است چون کارت آنجا ستونی می‌شود و عکس بالای متن
   می‌رود؛ نشان روی متن می‌افتاد. */
.emu-cta-card .emu-cta-card__badge {
  display: none;
  position: absolute;
  inset-block-end: var(--ds-space-5);
  inset-inline-start: var(--ds-space-5);
  z-index: 1;
  align-items: center;
  gap: var(--ds-space-2);
  margin: 0;
  padding: var(--ds-space-2) var(--ds-space-3);
  border-radius: var(--ds-radius-lg);
  font-size: var(--ds-text-ui-sm);
  font-weight: 700;
  line-height: var(--ds-leading-tight);
  color: var(--ds-color-accent-light);
  background: color-mix(in srgb, var(--ds-color-accent) 18%, transparent);
  border: 1px solid color-mix(in srgb, var(--ds-color-accent) 40%, transparent);
  backdrop-filter: blur(4px);
}

@media (min-width: 640px) { .emu-cta-card .emu-cta-card__badge { display: flex; } }

/* آیکنِ تیکِ داخلِ دایره. رنگ سخت‌کد است چون `currentColor` در
   `background-image` کار نمی‌کند — و اینجا همیشه طلاییِ روشن است. */
.emu-cta-card .emu-cta-card__badge::before {
  content: "";
  flex: none;
  width: 16px;
  height: 16px;
  background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%23e2c87a" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 12l2 2 4-4"/><circle cx="12" cy="12" r="9"/></svg>');
  background-repeat: no-repeat;
  background-size: contain;
}

.emu-cta-card .emu-cta-card__body {
  flex: 1;
  display: flex;
  flex-direction: column;
  justify-content: center;
  padding: var(--ds-space-6);
}
@media (min-width: 640px) { .emu-cta-card .emu-cta-card__body { padding: var(--ds-space-7); } }

/* خطِ طلاییِ کوتاه بالای تیتر */
.emu-cta-card .emu-cta-card__body::before {
  content: "";
  height: 2px;
  width: 64px;
  margin-block-end: var(--ds-space-5);
  border-radius: var(--ds-radius-pill);
  background: linear-gradient(to left, transparent, var(--ds-color-accent));
}

.emu-pill {
  display: inline-flex;
  align-items: center;
  gap: var(--ds-space-2);
  align-self: flex-start;
  padding: var(--ds-space-1) var(--ds-space-3);
  margin: 0 0 var(--ds-space-5);
  border-radius: var(--ds-radius-pill);
  font-size: var(--ds-text-ui-sm);
  font-weight: 700;
  color: var(--ds-color-accent-light);
  background: color-mix(in srgb, var(--ds-color-accent) 15%, transparent);
  border: 1px solid color-mix(in srgb, var(--ds-color-accent) 28%, transparent);
}
.emu-pill::before {
  content: "";
  width: 6px;
  height: 6px;
  border-radius: var(--ds-radius-pill);
  background: var(--ds-color-accent);
  animation: emu-pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;
}
@keyframes emu-pulse { 50% { opacity: .4; } }

/* ⚠️ `.entry-content` عمداً در سلکتور است. بخش ۱۰ همین فایل
   `h2, .entry-content h2 { color: var(--ds-color-primary-dark) }` را
   می‌نویسد — ویژگیِ (0,1,1) و **بعد از** اینجا. `.emu-cta-card h2` هم
   (0,1,1) است، پس در تساوی می‌بازد و تیتر سرمه‌ای روی سرمه‌ای می‌شد.
   سنجه گرفتش: `color: rgb(9, 30, 71)` روی زمینه‌ی `rgb(13, 43, 94)`. */
.entry-content .emu-cta-card h2 {
  margin: 0 0 var(--ds-space-4);
  color: var(--ds-color-on-primary);
  font-size: var(--ds-text-h3);
  line-height: var(--ds-leading-tight);
}

.emu-cta-card p {
  margin: 0 0 var(--ds-space-5);
  font-size: var(--ds-text-ui);
  line-height: var(--ds-leading-loose);
  color: var(--ds-color-on-primary-dim);
}

/* سه بولت — روی موبایل پنهان‌اند: کارت آنجا باریک است و پاراگرافِ بالا
   همین سه نکته را می‌گوید. تکرار در فضای تنگ، فقط دکمه را پایین می‌راند. */
.emu-cta-card .emu-cta-card__bullets {
  display: none;
  list-style: none;
  margin: 0 0 var(--ds-space-5);
  padding: 0;
}
@media (min-width: 640px) { .emu-cta-card .emu-cta-card__bullets { display: block; } }

.emu-cta-card .emu-cta-card__bullets li {
  display: flex;
  align-items: center;
  gap: var(--ds-space-2);
  margin-block-end: var(--ds-space-2);
  font-size: var(--ds-text-ui-sm);
  color: var(--ds-color-on-primary-dim);
}
.emu-cta-card .emu-cta-card__bullets li::before {
  content: "";
  flex: none;
  width: 6px;
  height: 6px;
  border-radius: var(--ds-radius-pill);
  background: var(--ds-color-accent);
}

.emu-cta-card .wp-block-buttons { margin: 0; }

/* دکمه‌ی این کارت همیشه طلاییِ پُر است — تنها مقصدِ صفحه‌ی خانه که به
   آپلودِ مدرک می‌رسد، و نباید هم‌وزنِ دکمه‌های خطیِ آکاردئون دیده شود. */
.emu-cta-card .wp-block-button > .wp-block-button__link,
.emu-cta-card .wp-block-button > .wp-block-button__link:hover,
.emu-cta-card .wp-block-button > .wp-block-button__link:focus-visible {
  background: linear-gradient(135deg, var(--ds-color-accent), var(--ds-color-accent-light));
  /* ⚠️ بوردر **حذف** می‌شود، نه شفاف. `::before`ِ حلقه‌ی نور با `inset: 0`
     نسبت به **جعبه‌ی پدینگ** جای می‌گیرد — یعنی داخلِ بوردر. با بوردرِ
     ۱٫۵pxِ شفاف، حلقه ۱٫۵px تو می‌رفت و نور «داخلِ دکمه» دیده می‌شد.
     دکمه‌های هدر و فوتر این مشکل را نداشتند چون اصلاً بوردر ندارند. */
  border: 0;
  color: var(--ds-color-primary-dark);
  box-shadow: 0 6px 24px color-mix(in srgb, var(--ds-color-accent) 35%, transparent);
}

@media (prefers-reduced-motion: reduce) {
  .emu-pill::before { animation: none; }
}

/* ---- ردیف دکمه: بلوک `wp:buttons` هسته ----
   این بلوک تا امروز **هیچ قاعده‌ای از ما نداشت** و نتیجه‌اش روی موبایل دو
   دکمه با دو عرض (۲۸۵px و ۲۷۰٫۵px) و دو ارتفاع (۷۱٫۷px و ۴۸٫۹px) بود: هر
   دکمه به اندازه‌ی متنِ خودش کش می‌آمد و اولی چون بلندتر بود دو خطی می‌شد.
   یک ردیف دکمه باید یک واحدِ بصری باشد، نه دو مستطیلِ بی‌ربط. */
.wp-block-buttons.is-layout-flex {
  gap: var(--ds-space-3);
  align-items: stretch;              /* هم‌ارتفاع، حتی وقتی یکی دو خطی شد */
}

/* روی موبایل دو دکمه هرگز کنار هم جا نمی‌شوند؛ ستونیِ تمام‌عرض تنها
   چیدمانی است که هر دو را هم‌عرض و هم‌وزن نگه می‌دارد. */
@media (max-width: 767px) {
  .wp-block-buttons.is-layout-flex { flex-direction: column; }
  .wp-block-buttons.is-layout-flex > .wp-block-button { width: 100%; }
  .wp-block-buttons.is-layout-flex > .wp-block-button > .wp-block-button__link {
    width: 100%;
  }
}

/* ---- دکمه‌ی بومی ----
   ⚠️ سلکتور عمداً **کلاس‌مستقل** است: هر `wp:button`ی که هر کسی هر جای سایت
   بگذارد این قواعد را می‌گیرد، حتی اگر یادش برود کلاس بزند. قبلاً پایه روی
   `.emu-btn` بود و نتیجه‌اش این شد که سه صفحه (۹۹، ۱۰۱، ۱۰۵۹) دکمه‌های
   بی‌کلاس و `is-style-outline` داشتند که **هیچ قاعده‌ای از ما نمی‌گرفتند**:
   نه `min-height: 44px`، نه پس‌گرفتنِ فونت ۲۲٫۹pxِ آسترا. یعنی همان تله‌ی
   ۲۲ دوباره، در سکوت. قرارداد نباید به یادِ نویسنده تکیه کند.
   `.emu-btn` هنوز کار می‌کند و برای خوانایی در محتوا نگه داشته می‌شود.

   کلاس روی **wrapper** بلوک می‌نشیند (`<!-- wp:button {"className":"emu-btn"} -->`)
   نه روی <a> — وگرنه گوتنبرگ بلوک را نامعتبر اعلام می‌کند (تله‌ی ۱۸).
   `--ds-tap-min` تضمین WCAG 2.5.5 است. */
.wp-block-button > .wp-block-button__link {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--ds-space-2);
  min-height: var(--ds-tap-min);
  /* آسترا با CSS درون‌خطی `1.42857rem` (≈۲۲٫۹px) روی دکمه می‌نشیند در حالی
     که بدنه ۱۶px است. مقیاسِ ما باید صریحاً پس بگیردش — وگرنه دکمه از H3
     هم بزرگ‌تر می‌شود. لینت ما فقط فایل‌های خودمان را می‌گردد، پس این را
     هیچ تستی نمی‌گرفت؛ فقط اندازه‌گیریِ صفحه‌ی زنده گرفتش. */
  font-size: var(--ds-text-ui-lg);
  line-height: var(--ds-leading-normal);
  text-align: center;
  padding: var(--ds-space-3) var(--ds-space-5);
  /* پوسته‌ی تازه: دکمه‌ی پایه **خطی** است نه پُر. دلیلش سلسله‌مراتب است —
     هر پنل آکاردئون دو دکمه دارد و اگر هر دو پُر باشند، هیچ‌کدام مقصدِ
     اصلی به نظر نمی‌رسد. پُرشدگیِ طلایی مالِ `emu-btn-accent` است و بس. */
  background: transparent;
  color: var(--ds-color-primary);
  border: 1.5px solid color-mix(in srgb, var(--ds-color-primary) 22%, transparent);
  border-radius: var(--ds-radius-lg);
  font-weight: 700;
  text-decoration: none;
  transition: transform var(--ds-motion-fast) var(--ds-ease),
              border-color var(--ds-motion-fast) var(--ds-ease),
              background-color var(--ds-motion-fast) var(--ds-ease);
}

.wp-block-button > .wp-block-button__link:hover,
.wp-block-button > .wp-block-button__link:focus-visible {
  background: var(--ds-color-accent-soft);
  border-color: var(--ds-color-primary);
  color: var(--ds-color-primary);
  transform: translateY(-2px);
}
.wp-block-button > .wp-block-button__link:active { transform: scale(.97); }

/* ثانویه — طلایی. `is-style-outline` هسته هم اینجا نگاشته می‌شود تا اگر
   کسی از پنل گوتنبرگ سبکِ خطی را انتخاب کرد، به‌جای ظاهرِ بیگانه ظاهرِ
   ثانویه‌ی خودمان را بگیرد. */
.emu-btn-accent > .wp-block-button__link,
.emu-btn-accent > .wp-block-button__link:hover,
.emu-btn-accent > .wp-block-button__link:focus-visible,
.wp-block-button.is-style-outline > .wp-block-button__link,
.wp-block-button.is-style-outline > .wp-block-button__link:hover,
.wp-block-button.is-style-outline > .wp-block-button__link:focus-visible {
  background: linear-gradient(135deg, var(--ds-color-accent), var(--ds-color-accent-light));
  border-color: transparent;
  color: var(--ds-color-primary-dark);
  box-shadow: 0 4px 16px color-mix(in srgb, var(--ds-color-accent) 30%, transparent);
}

@media (prefers-reduced-motion: reduce) {
  .wp-block-button > .wp-block-button__link { transition: none; }
}

/* ---- دکمه‌ی «عرض المزيد من الصور» زیرِ آلبوم ----
   بلوکِ بومیِ `wp:buttons` است، پس همه‌ی قواعدِ سیستمِ دکمه را از قبل
   می‌گیرد و اینجا فقط پوسته‌ی سرمه‌ایِ طرح و نشانِ شمارش رویش می‌نشیند.
   ⚠️ کلاسِ `wp:button` روی **پوشش** می‌نشیند نه روی `<a>` (تله‌ی ۱۸).

   ⚠️ جایش در فایل عمدی است: **بعد از** سیستمِ دکمه. سلکتورِ پایه
   (`.wp-block-button > .wp-block-button__link`) هم (0,2,0) است و
   `.emu-album__more > .wp-block-button__link` هم — گره‌ی ویژگی را ترتیبِ
   فایل باز می‌کند. وقتی این قواعد بالاتر در فایل بودند، دکمه خطی و با
   گوشه‌ی ۱۲px می‌ماند به‌جای قرصِ پُرِ سرمه‌ای.

   ⚠️ آدرسش هنوز خالی است — صفحه‌ی گالری ساخته نشده. `wp:button` بدونِ
   `url` اصلاً `href` نمی‌نویسد، پس این یک لینکِ شکسته نیست: متنی است که
   به‌محضِ ساخته‌شدنِ صفحه با یک ویرایش لینک می‌شود. */
.wp-block-buttons.emu-album__more-wrap {
  justify-content: center;
  margin-block-start: var(--ds-space-6);
}

.emu-album__more > .wp-block-button__link,
.emu-album__more > .wp-block-button__link:hover,
.emu-album__more > .wp-block-button__link:focus-visible {
  border-radius: var(--ds-radius-pill);
  border-color: transparent;
  background: linear-gradient(135deg, var(--ds-color-primary), var(--ds-color-primary-light));
  color: var(--ds-color-on-primary);
  font-size: var(--ds-text-ui);
  padding-inline: var(--ds-space-7);
}

/* فلش با CSS نه SVG — همان الگوی دکمه‌ی ارسالِ فرم و ریلِ رشته‌ها. */
.emu-album__more > .wp-block-button__link::after {
  content: "";
  width: .45em;
  height: .45em;
  border: solid currentColor;
  border-width: 0 0 2px 2px;
  transform: rotate(45deg);
}

.emu-album__count {
  padding: var(--ds-space-1) var(--ds-space-2);
  border-radius: var(--ds-radius-pill);
  font-size: var(--ds-text-ui-sm);
  background: color-mix(in srgb, var(--ds-color-accent) 30%, transparent);
  color: var(--ds-color-accent-light);
}


/* ---- آکاردئون: بلوک `wp:details` هسته ----
   جایگزین `nested-accordion` المنتور پرو. <details>/<summary> بومی است:
   بدون جاوااسکریپت باز و بسته می‌شود، صفحه‌خوان وضعیت باز/بسته را خودش
   اعلام می‌کند، و Ctrl+F مرورگر محتوای بسته را هم پیدا می‌کند. */
.wp-block-group.emu-accordion { padding: 0; }

.emu-accordion .wp-block-details {
  border: 2px solid var(--ds-color-accent-soft-dk);
  border-radius: var(--ds-radius-xl);
  background: var(--ds-color-surface);
  box-shadow: var(--ds-shadow-sm);
  margin-block-end: var(--ds-space-4);
  overflow: hidden;
  transition: border-color var(--ds-motion-base) var(--ds-ease),
              box-shadow var(--ds-motion-base) var(--ds-ease);
}

.emu-accordion .wp-block-details[open] {
  border-color: color-mix(in srgb, var(--ds-color-accent) 55%, transparent);
  box-shadow: var(--ds-shadow-lg);
}

/* سرِ آکاردئون: عکس + پرده‌ی سرمه‌ای، مثلِ طرح.
   ⚠️ این یادداشت قبلاً می‌گفت عکس‌ها «عمداً نیامدند» چون پنج درخواستِ
   شبکه‌ی اضافی‌اند. کاربر (۳۰ اوت) عکس‌ها را داد و انتخاب عوض شد — با
   AVIF هر پنج‌تا روی هم **۸۶ کیلوبایت**اند، یعنی همان استدلالِ وزن دیگر
   برقرار نیست. عکس‌ها زیرِ خطِ افق‌اند و پرده‌ی سرمه‌ای رویشان تضمین
   می‌کند متن همیشه خوانا بماند.

   ترتیبِ لایه‌ها مهم است: لایه‌ی **اول** رویِ همه می‌نشیند، پس گرادیان
   اول می‌آید و عکس دوم. اگر `--emu-fee-bg` تعریف نشده باشد (ردیفی که
   عکس نگرفته) `none` می‌شود و فقط پرده می‌ماند — همان ظاهرِ قبلی، بدونِ
   هیچ خرابی.

   ⚠️ آدرس‌ها اینجا سخت‌کدند و نگهبانشان `scripts/asset-check.py` است که
   پیش‌پرواز اجرا می‌کند؛ اگر رسانه‌ای دوباره آپلود یا حذف شود، پیش از
   استقرار داد می‌زند. بدونِ آن، خرابی بی‌صدا بود: پس‌زمینه‌ی خالی، بی خطا.

   ⚠️ اعدادِ پرده از **مرجعِ زنده** آمده‌اند نه از حافظه، و یک بار
   اشتباه آمدند: نسخه‌ی داخلِ ریپو کهنه بود و پرده‌ی غلیظ‌ترِ قدیمی را
   داشت. جهتش هم برعکسِ حدس است — **کم‌رنگ در ابتدا، غلیظ در انتها**.
   پیش از دست‌زدن به این عددها `design-system/reference/` را دوباره
   هم‌گام کن (روشش در RESKIN.md).

   ساده‌سازیِ آگاهانه: طرح هنگامِ باز شدن عکس را ۱٫۰۴ بزرگ می‌کند
   (`transform` روی `<img>`). اینجا عکس **پس‌زمینه** است نه عنصر، پس آن
   بزرگ‌نمایی نیامد؛ تغییرِ چگالیِ پرده و خطِ طلایی که معنادارترند آمدند. */
.emu-accordion .wp-block-details > summary {
  display: flex;
  align-items: center;
  gap: var(--ds-space-4);
  min-height: 140px;
  padding: var(--ds-space-5);
  /* ⚠️ تکیه‌گاهِ سرمه‌ای زیرِ همه‌چیز — بدونِ آن، اگر عکس لود نشود (AVIF
     روی سافاریِ زیر ۱۶٫۴، یا شبکه‌ی ضعیف) پرده‌ی نیمه‌شفافِ زیر روی
     **سفیدِ خودِ پنل** می‌نشیند و متنِ سفید ناخوانا می‌شود. با این، بدترین
     حالت همان کارتِ سرمه‌ایِ قبلی است: عکس نیست ولی کارایی سرِ جایش است —
     همان قاعده‌ای که کارت‌های ریلِ رشته‌ها هم دارند.
     عمداً روی **همه‌ی** ردیف‌هاست نه فقط ردیف‌های عکس‌دار: ردیفی که روزی
     بی‌عکس اضافه شود هم باید خوانا بماند. */
  background-color: var(--ds-color-primary);
  background-image: linear-gradient(100deg,
              color-mix(in srgb, var(--ds-color-primary-dark) 30%, transparent) 0%,
              color-mix(in srgb, var(--ds-color-primary) 48%, transparent) 55%,
              color-mix(in srgb, var(--ds-color-primary-dark) 74%, transparent) 100%),
              var(--emu-fee-bg, none);
  background-size: cover, cover;
  background-position: center, center;
  background-repeat: no-repeat, no-repeat;
  color: var(--ds-color-on-primary);
  font-size: var(--ds-text-h4);
  font-weight: 700;
  line-height: var(--ds-leading-tight);
  cursor: pointer;
  list-style: none;
  transition: color var(--ds-motion-base) var(--ds-ease);
}
@media (min-width: 640px) { .emu-accordion .wp-block-details > summary { padding-inline: var(--ds-space-6); } }

/* حالتِ باز: پرده غلیظ‌تر می‌شود تا متنِ بازشده از پس‌زمینه جدا بماند —
   عددها از طرح. */
.emu-accordion .wp-block-details[open] > summary {
  color: var(--ds-color-accent-light);
  background-image: linear-gradient(100deg,
              color-mix(in srgb, var(--ds-color-primary) 45%, transparent) 0%,
              color-mix(in srgb, var(--ds-color-primary) 60%, transparent) 55%,
              color-mix(in srgb, var(--ds-color-primary-dark) 85%, transparent) 100%),
              var(--emu-fee-bg, none);
}

/* ⚠️ خطِ طلاییِ زیرِ سر اینجا **ساخته نمی‌شود** و نباید ساخته شود:
   از قبل پایین‌تر با `box-shadow: inset 0 -3px 0` روی خودِ `[open] > summary`
   هست. یک بار همین را دوباره با `::after` نوشتم و `::after` از قبل مالِ
   **قرصِ فلش** بود — نتیجه‌اش این شد که فلش روی سرِ بسته `opacity: 0`
   گرفت و نامرئی شد، بی هیچ خطا. پیش از برداشتنِ یک شبه‌عنصر، `grep`
   بزن ببین گرفته است یا نه.

   عکسِ پس‌زمینه‌ی هر ردیف. کلاسِ ردیف از محتوا می‌آید (`emu-fee--*`)،
   دقیقاً همان کلاسی که آیکنش را هم تعیین می‌کند. */
.emu-accordion .emu-fee--programs > summary { --emu-fee-bg: url("https://emu-edu.ir/wp-content/uploads/2026/08/%D8%B3%D8%A7%D9%84%D9%86-%D8%B3%D8%AE%D9%86%D8%B1%D8%A7%D9%86%DB%8C-%D8%AF%D8%A7%D9%86%D8%B4%DA%AF%D8%A7%D9%87.avif"); }
.emu-accordion .emu-fee--housing > summary { --emu-fee-bg: url("https://emu-edu.ir/wp-content/uploads/2026/08/%D8%AE%D9%88%D8%A7%D8%A8%DA%AF%D8%A7%D9%87-%D8%AF%D8%A7%D9%86%D8%B4%D8%AC%D9%88%DB%8C%DB%8C-%D9%87%D9%86%DA%AF%D8%A7%D9%85-%D8%BA%D8%B1%D9%88%D8%A8.avif"); }
.emu-accordion .emu-fee--comfort > summary { --emu-fee-bg: url("https://emu-edu.ir/wp-content/uploads/2026/08/%D8%A7%D9%85%DA%A9%D8%A7%D9%86%D8%A7%D8%AA-%D9%BE%D8%B1%D8%AF%DB%8C%D8%B3-%D8%AF%D8%A7%D9%86%D8%B4%DA%AF%D8%A7%D9%87.avif"); }
.emu-accordion .emu-fee--accredit > summary { --emu-fee-bg: url("https://emu-edu.ir/wp-content/uploads/2026/08/%D8%AC%D8%B4%D9%86-%D9%81%D8%A7%D8%B1%D8%BA-%D8%A7%D9%84%D8%AA%D8%AD%D8%B5%DB%8C%D9%84%DB%8C-%D8%AF%D8%A7%D9%86%D8%B4%DA%AF%D8%A7%D9%87.avif"); }
.emu-accordion .emu-fee--english > summary { --emu-fee-bg: url("https://emu-edu.ir/wp-content/uploads/2026/08/%D8%B3%D8%A7%D9%84%D9%86-%D8%A2%D8%B2%D9%85%D9%88%D9%86-%D8%B2%D8%A8%D8%A7%D9%86-%D8%A7%D9%86%DA%AF%D9%84%DB%8C%D8%B3%DB%8C.avif"); }


.emu-accordion .wp-block-details > summary::-webkit-details-marker { display: none; }

/* ---- جعبه‌ی آیکنِ ابتدای سر ----
   ⚠️ آیکن **در CSS** است نه در محتوا، چون بلوکِ `wp:details` هسته جایی
   برای مارکاپِ اضافه در `<summary>` ندارد و ساختنِ بلوکِ خودمان برای
   آکاردئون یعنی نقضِ قاعده‌ی ۱۲. پس هر ردیف یک کلاس می‌گیرد
   (`emu-fee--programs`، `--housing`، …) و آیکنش را از همین‌جا می‌خواند.
   ردیفی که کلاس نگیرد، جعبه‌ی خالی می‌گیرد نه آیکنِ غلط.

   رنگِ SVG سخت‌کد است چون `currentColor` در `background-image` کار
   نمی‌کند؛ همیشه سفیدِ روی سرمه‌ای است، پس ثابت می‌ماند. */
.emu-accordion .wp-block-details > summary::before {
  content: "";
  flex: none;
  width: 48px;
  height: 48px;
  border-radius: var(--ds-radius-lg);
  background-color: var(--ds-color-on-primary-fill);
  background-image: var(--emu-fee-icon, none);
  background-repeat: no-repeat;
  background-position: center;
  background-size: 22px 22px;
  border: 1px solid var(--ds-color-on-primary-line);
  transition: background-color var(--ds-motion-base) var(--ds-ease),
              border-color var(--ds-motion-base) var(--ds-ease);
}

.emu-accordion .wp-block-details[open] > summary::before {
  background-color: color-mix(in srgb, var(--ds-color-accent) 25%, transparent);
  border-color: color-mix(in srgb, var(--ds-color-accent) 50%, transparent);
}

/* پنج آیکنِ بخشِ «الرسوم والسكن والخدمات». */
.emu-fee--programs { --emu-fee-icon: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%23ffffff" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5"/></svg>'); }
.emu-fee--housing  { --emu-fee-icon: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%23ffffff" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M3 9l9-7 9 7v11a2 2 0 01-2 2H5a2 2 0 01-2-2z"/><polyline points="9 22 9 12 15 12 15 22"/></svg>'); }
.emu-fee--comfort  { --emu-fee-icon: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%23ffffff" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M12 8v4l3 3"/></svg>'); }
.emu-fee--accredit { --emu-fee-icon: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%23ffffff" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M9 11l3 3L22 4"/><path d="M21 12v7a2 2 0 01-2 2H5a2 2 0 01-2-2V5a2 2 0 012-2h11"/></svg>'); }
.emu-fee--english  { --emu-fee-icon: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%23ffffff" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><rect x="4" y="4" width="16" height="16" rx="2"/><path d="M9 9h6M9 13h4"/></svg>'); }

/* ---- قرصِ فلش در انتهای سر ----
   ⚠️ `margin-inline-start: auto` تنها چیزی است که این را به لبه‌ی دیگر
   می‌بَرد. نسخه‌ی قبلی فلش را `position: absolute` کرده بود و روی متنِ
   عنوان می‌افتاد — روی سرِ اول حرفِ اولِ «البرامج» را می‌بُرید. */
.emu-accordion .wp-block-details > summary::after {
  content: "";
  flex: none;
  margin-inline-start: auto;
  width: 36px;
  height: 36px;
  border-radius: var(--ds-radius-pill);
  background-color: var(--ds-color-on-primary-fill);
  background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%23ffffff" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M6 9l6 6 6-6"/></svg>');
  background-repeat: no-repeat;
  background-position: center;
  background-size: 18px 18px;
  border: 1px solid var(--ds-color-on-primary-line);
  transition: transform var(--ds-motion-base) var(--ds-ease),
              background-color var(--ds-motion-base) var(--ds-ease),
              border-color var(--ds-motion-base) var(--ds-ease);
}

.emu-accordion .wp-block-details[open] > summary::after {
  transform: rotate(180deg);
  background-color: color-mix(in srgb, var(--ds-color-accent) 25%, transparent);
  border-color: color-mix(in srgb, var(--ds-color-accent) 45%, transparent);
}

/* خطِ طلاییِ پایینِ سر — فقط وقتی باز است. */
.emu-accordion .wp-block-details[open] > summary {
  box-shadow: inset 0 -3px 0 0 var(--ds-color-accent);
}

.emu-accordion .wp-block-details > summary:focus-visible {
  outline: 3px solid var(--ds-color-accent);
  outline-offset: -3px;
}

.emu-accordion .emu-details-body {
  padding: var(--ds-space-5);
  border-top: 1px solid var(--ds-color-accent-soft-dk);
}
@media (min-width: 640px) { .emu-accordion .emu-details-body { padding-inline: var(--ds-space-6); } }

@media (prefers-reduced-motion: reduce) {
  .emu-accordion .wp-block-details,
  .emu-accordion .wp-block-details > summary,
  .emu-accordion .wp-block-details > summary::before,
  .emu-accordion .wp-block-details > summary::after { transition: none; }
}
.emu-accordion .emu-details-body > :last-child { margin-block-end: 0; }

.emu-accordion .emu-details-body p {
  line-height: var(--ds-leading-loose);
  color: var(--ds-color-text);
}

/* ---- جدول: بلوک `wp:table` هسته ----
   جدول‌های شهریه و سکن قبلاً داخل ویجت HTML المنتور با CSS خودشان
   بودند (سه نسخه‌ی متفاوت از یک جدول). حالا یک نسخه. */
.emu-table.wp-block-table {
  margin-block-end: var(--ds-space-5);
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}

.emu-table table {
  width: 100%;
  border-collapse: collapse;
}

/* `min-width` فقط برای جدول‌هایی که واقعاً پهن‌اند — یعنی **ستون سوم دارند**.
   قبلاً بی‌قید روی همه می‌نشست و نتیجه‌اش این بود که یک جدولِ دوستونیِ
   «مرفق / تفاصيل» هم روی موبایل افقی می‌لغزید و ستون دومش بریده می‌شد،
   در حالی که راحت در ۳۳۵px جا می‌شد.

   شمارش با `:has()` انجام می‌شود نه با کلاسِ دستی: کلاس را نویسنده‌ی
   صفحه‌ی بعدی فراموش می‌کند، ستونِ سوم را نه. */
.emu-table:has(thead th:nth-child(3)) table { min-width: 640px; }

.emu-table th,
.emu-table td {
  border: 1px solid var(--ds-color-border);
  padding: var(--ds-space-3) var(--ds-space-2);
  text-align: center;
  vertical-align: middle;
}

.emu-table thead th {
  background: var(--ds-color-primary);
  color: var(--ds-color-on-primary);
  font-weight: 700;
  line-height: var(--ds-leading-normal);
}

.emu-table tbody td:first-child {
  text-align: start;
  background: var(--ds-color-surface-soft);
  font-weight: 600;
}

.emu-table tbody tr:nth-child(even) td { background: var(--ds-color-surface-tint); }
.emu-table tbody tr:nth-child(even) td:first-child { background: var(--ds-color-surface-soft); }

/* ردیف عنوانِ گروه (نام هر خوابگاه). با `colspan` شناخته می‌شود نه با
   کلاس: اسکیمای بلوک جدولِ هسته برای <tr> هیچ صفتی نگه نمی‌دارد، پس
   `class` روی <tr> بلوک را در ویرایشگر «نامعتبر» می‌کرد. */
/* تخصص عمداً برابرِ قاعده‌ی ردیف زوج است و بعد از آن می‌آید تا با
   ترتیب برنده شود — نه با `!important` (تله‌ی Astra در UI.md). */
.emu-table tbody td[colspan],
.emu-table tbody td[colspan]:first-child {
  background: var(--ds-color-accent-soft);
  color: var(--ds-color-primary-dark);
  font-weight: 700;
  text-align: start;
}


/* ---- ریز-اشاره‌ی زیر جدول و لیست امکانات ---- */
.emu-note {
  color: var(--ds-color-muted);
  margin-block-end: var(--ds-space-3);
}

.emu-facilities {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--ds-space-2) var(--ds-space-5);
  margin: 0 0 var(--ds-space-5);
  padding: 0;
  list-style: none;
}

/* همان تله‌ی `.entry-content ul` آسترا (شرحش در lite-blocks.css): قاعده‌ی
   ۰٬۲٬۰ی آسترا `padding: 0`ِ بالا را می‌برد و ستونِ راستِ شبکه ۲۰px تو
   می‌رود. اینجا به‌جای بالابردنِ ویژگیِ خودِ قاعده، فقط همان یک ویژگی را
   پس می‌گیریم تا اگر روزی این لیست بیرونِ محتوا رفت، چیزی نشکند. */
.entry-content .emu-facilities { padding-inline: 0; }

.emu-facilities li {
  position: relative;
  padding-inline-start: var(--ds-space-5);
  line-height: var(--ds-leading-normal);
  color: var(--ds-color-text);
}

.emu-facilities li::before {
  content: "";
  position: absolute;
  inset-inline-start: 0;
  top: 0.55em;
  width: var(--ds-space-2);
  height: var(--ds-space-2);
  border-radius: var(--ds-radius-pill);
  background: var(--ds-color-accent);
}

@media (max-width: 600px) { .emu-facilities { grid-template-columns: 1fr; } }

/* ---- بخش فرم مشاوره ----
   تمام‌عرض و سرمه‌ای (قاعده‌ی `calc(50% - 50vw)` بالای همین بخش). فرم
   خودش از افزونه‌ی `lite-forms` می‌آید و **افزونه دست نمی‌خورد**: پوسته‌ی
   سرمه‌ای فقط اینجا و فقط داخلِ `.emu-consult` روی آن می‌نشیند. اگر جای
   دیگری همان فرم روی زمینه‌ی سفید بیاید، ظاهرِ عادیِ خودش را دارد. */
.wp-block-group.emu-consult {
  position: relative;
  overflow: hidden;
  padding: var(--ds-space-9) var(--ds-space-4);
  /* ⚠️ حاشیه‌ی پایین صفر است و باید صفر بماند: این آخرین بخشِ صفحه است و
     باید به فوتر بچسبد. یک فاصله‌ی سفیدِ نازک بینِ دو ناحیه‌ی سرمه‌ای،
     هر دو را شکسته نشان می‌دهد. */
  margin-block: 0;
  scroll-margin-top: var(--ds-space-7);
  background: linear-gradient(160deg,
              var(--ds-color-primary-dark) 0%,
              var(--ds-color-primary) 50%,
              var(--ds-color-primary-light) 100%);
}

/* ⚠️ آسترا روی `.content-area` حاشیه‌ی پایینِ ۶۰px می‌گذارد و بینِ این
   بخشِ سرمه‌ای و فوتر یک نوارِ کرمیِ نازک می‌ماند — اندازه‌گیری‌شده، نه
   حدس. فقط روی صفحه‌ای که این بخش را دارد صفر می‌شود، تا بقیه‌ی صفحات
   فاصله‌ی همیشگی‌شان را نگه دارند. */
/* سلکتور عمداً پیچیده است. آسترا این را می‌نویسد:
       `.ast-plain-container.ast-no-sidebar #primary { margin-bottom: 60px }`
   یعنی ویژگیِ (1,2,0). `.emu-has-flush-end .content-area` (0,2,0) بود و
   بی‌صدا باخت — فاصله سرِ جایش ماند. `body` + `[class]` ما را به (1,2,1)
   می‌بَرد، و برخلافِ افزودنِ `.ast-plain-container` به نامِ کلاس‌های
   قالبِ مادر گره نمی‌خورد. */
body.emu-has-flush-end[class] #primary { margin-block-end: 0; }

/* ⚠️ قرینه‌ی همان تله در **بالای** صفحه. همان قاعده‌ی آسترا
   (`.ast-plain-container.ast-no-sidebar #primary`) ۶۰px حاشیه‌ی **بالا**
   هم می‌گذارد، و روی صفحه‌ی خانه یک نوارِ کرمی بینِ ناوبری و ویدیو
   می‌ماند — در طرح، ویدیو مستقیم زیرِ ناوبری می‌نشیند. سنجه: ناوبری
   تا ۱۶۹ و ویدیو از ۲۲۹ شروع می‌شد. ویژگی هم دقیقاً مثل قاعده‌ی بالا. */
body.emu-has-flush-start[class] #primary { margin-block-start: 0; }

/* خطِ طلاییِ بالای بخش */
.wp-block-group.emu-consult::before {
  content: "";
  position: absolute;
  inset-block-start: 0;
  inset-inline: 0;
  height: 3px;
  background: linear-gradient(to right, transparent, var(--ds-color-accent), transparent);
  opacity: .7;
}

/* ⚠️ هر قاعده‌ای که پایین‌تر برای این فرزندها **شورت‌هندِ `margin`**
   بنویسد، همین `auto` را صفر می‌کند و بخش راست‌چین می‌ماند. یک بار
   همین شد: تیتر و پاراگراف و قرص چسبیدند به لبه‌ی راست در حالی که فرم
   وسط بود. پس از اینجا به بعد فقط `margin-block` نوشته می‌شود. */
.emu-consult > * {
  max-width: var(--ds-width-form);
  margin-inline: auto;
}

/* همان تله‌ی بالا — تیتر روی سرمه‌ای باید سفید بماند. */
/* قرصِ «استشارة مجانية» بالای تیتر — وسط‌چین. */
/* ⚠️ `margin-inline: auto` جعبه‌ی **سطری** را وسط نمی‌آورد و `.emu-pill`
   پیش‌فرض `inline-flex` است. `display: flex` + `width: fit-content`
   بلوکی‌اش می‌کند بی‌آنکه اندازه‌اش عوض شود. */
/* ⚠️ رنگ و اندازه هم اینجا صریح‌اند و باید بمانند. `.emu-consult > p`
   (0,2,0) و `.wp-block-group.emu-consult > p` (0,2,1) هر دو بر `.emu-pill`
   (0,1,0) می‌چربیدند، پس قرص سفیدِ ۱۷px می‌شد در حالی که در طرح طلاییِ
   ۱۴px است. آن دو قاعده حالا `:not(.emu-pill)` دارند و این‌ها پدافندِ
   دوم‌اند. وزن ۵۰۰ و پدینگِ بازتر هم از خودِ طرح می‌آید
   (`.emu-consult__badge .emu-pill`). */
.emu-consult .emu-pill {
  display: flex;
  width: fit-content;
  margin-inline: auto;
  margin-block: 0 var(--ds-space-5);
  padding: var(--ds-space-2) var(--ds-space-4);
  font-size: var(--ds-text-ui);
  font-weight: 500;
  color: var(--ds-color-accent-light);
}

.entry-content .emu-consult h2 {
  margin-block: 0 var(--ds-space-3);
  margin-inline: auto;
  color: var(--ds-color-on-primary);
  text-align: center;
}

/* سطر دومِ تیتر طلایی است — همان تأکیدِ دو-رنگیِ طرح. */
.emu-consult .emu-gold { color: var(--ds-color-accent); }

.emu-consult > p:not(.emu-pill) {
  margin-block: 0 var(--ds-space-6);
  margin-inline: auto;
  color: var(--ds-color-on-primary-dim);
  font-size: var(--ds-text-ui);
  text-align: center;
}
.emu-consult > p a { color: var(--ds-color-accent-light); }

/* ---- پوسته‌ی سرمه‌ای روی فرمِ lite-forms ----
   ⚠️ هیچ‌کدام از این قواعد نباید به افزونه منتقل شود: افزونه عام است و
   روی زمینه‌ی سفید هم استفاده می‌شود. اینجا فقط «فرمِ داخلِ بخشِ سرمه‌ای»
   هدف است. */
.emu-consult .lf-form {
  max-width: var(--ds-width-form);
  margin-inline: auto;
  padding: var(--ds-space-5);
  border-radius: var(--ds-radius-xl);
  background: color-mix(in srgb, var(--ds-color-on-primary) 6%, transparent);
  border: 1px solid var(--ds-color-on-primary-line);
}
@media (min-width: 640px) { .emu-consult .lf-form { padding: var(--ds-space-6); } }

.emu-consult .lf-form label,
.emu-consult .lf-label { color: var(--ds-color-on-primary-dim); }
.emu-consult .lf-required { color: var(--ds-color-accent); }
.emu-consult .lf-help { color: color-mix(in srgb, var(--ds-color-on-primary) 40%, transparent); }

.emu-consult .lf-form input,
.emu-consult .lf-form select,
.emu-consult .lf-form textarea {
  color: var(--ds-color-on-primary);
  background: color-mix(in srgb, var(--ds-color-on-primary) 8%, transparent);
  border: 1px solid var(--ds-color-on-primary-line);
  border-radius: var(--ds-radius-lg);
}
.emu-consult .lf-form input::placeholder,
.emu-consult .lf-form textarea::placeholder { color: color-mix(in srgb, var(--ds-color-on-primary) 35%, transparent); }

.emu-consult .lf-form input:focus,
.emu-consult .lf-form select:focus,
.emu-consult .lf-form textarea:focus {
  border-color: color-mix(in srgb, var(--ds-color-accent) 50%, transparent);
  box-shadow: 0 0 0 2px color-mix(in srgb, var(--ds-color-accent) 30%, transparent);
  outline: none;
}

/* منوی بازشوندهٔ `<select>` را سیستم‌عامل می‌کشد، نه ما — گزینه‌ها باید
   زمینه‌ی خودشان را داشته باشند وگرنه سفید روی سفید می‌شوند. */
.emu-consult .lf-form select option,
.emu-consult .lf-form select optgroup { background: var(--ds-color-primary); color: var(--ds-color-on-primary); }

.emu-consult .lf-form .lf-submit {
  width: 100%;
  min-height: var(--ds-tap-min);
  border: 0;
  border-radius: var(--ds-radius-lg);
  font-size: var(--ds-text-ui-lg);
  font-weight: 700;
  background: linear-gradient(135deg, var(--ds-color-accent), var(--ds-color-accent-light));
  color: var(--ds-color-primary-dark);
}

/* آیکنِ واتساپ داخلِ فیلدِ تلفن — مثل طرح.
   ⚠️ رنگ سخت‌کد است چون `currentColor` در `background-image` کار نمی‌کند؛
   سبزِ واتساپ هم رنگِ برندِ آن سرویس است نه رنگِ ما، پس توکن نمی‌گیرد. */
.emu-consult .lf-type-tel .lf-input {
  padding-inline-end: var(--ds-space-7);
  background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%2325d366"><path d="M17.5 14.4c-.3-.2-1.8-.9-2-1-.3-.1-.5-.2-.7.1-.2.3-.7 1-.9 1.2-.2.2-.3.2-.6.1-1.7-.9-2.9-1.6-4-3.6-.3-.5.3-.5.8-1.5.1-.2 0-.4 0-.5s-.7-1.6-.9-2.2c-.2-.6-.5-.5-.7-.5h-.6c-.2 0-.5.1-.8.4-.3.3-1 1-1 2.5s1.1 2.9 1.2 3.1c.2.2 2.1 3.2 5.1 4.4 1.9.8 2.6.9 3.5.8.6-.1 1.8-.7 2-1.5.3-.7.3-1.4.2-1.5-.1-.2-.3-.2-.6-.3z"/><path d="M12 2a10 10 0 00-8.6 15L2 22l5.2-1.4A10 10 0 1012 2zm0 18.2a8.2 8.2 0 01-4.2-1.2l-.3-.2-3.1.8.8-3-.2-.3A8.2 8.2 0 1112 20.2z" opacity=".55"/></svg>');
  background-repeat: no-repeat;
  /* ⚠️ `right` است نه `left`، و کلمه‌ی فیزیکی هم عمدی است. خودِ ورودی
     `direction: ltr` دارد (شماره‌ی تلفن نباید وارونه دیده شود)، پس
     `padding-inline-end`ِ بالا یعنی پدینگِ **راست**. آیکن که سمتِ چپ
     می‌نشست، درست روی جایی می‌افتاد که متن از آن شروع می‌شود و با
     placeholder روی هم می‌رفت — همان تصادمی که در طرح نیست. */
  background-position: right var(--ds-space-4) center;
  background-size: 20px 20px;
  /* ⚠️ ورودی `direction: ltr` دارد، پس `start`ِ پیش‌فرض یعنی **چپ** و
     شماره تا آن سرِ فیلد از آیکن دور می‌افتاد. `end` در همین ورودیِ LTR
     یعنی راست — کنارِ آیکن، همان‌جا که طرح گذاشته. */
  text-align: end;
}

/* فلشِ دکمه‌ی ارسال — با CSS، نه SVG. */
.emu-consult .lf-submit .lf-submit-text {
  display: inline-flex;
  align-items: center;
  gap: var(--ds-space-2);
}
.emu-consult .lf-submit .lf-submit-text::after {
  content: "";
  width: .45em;
  height: .45em;
  border: solid currentColor;
  border-width: 0 0 2px 2px;
  transform: rotate(45deg);
}

.emu-consult .lf-privacy {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--ds-space-2);
  margin-block-start: var(--ds-space-4);
  font-size: var(--ds-text-ui-sm);
  text-align: center;
  color: color-mix(in srgb, var(--ds-color-on-primary) 40%, transparent);
}

/* سپرِ کنارِ جمله‌ی حریمِ خصوصی. */
.emu-consult .lf-privacy::before {
  content: "";
  flex: none;
  width: 14px;
  height: 14px;
  background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%23c9a84c" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg>');
  background-repeat: no-repeat;
  background-size: contain;
}

/* پیام‌های موفقیت و خطای فرم هم باید روی سرمه‌ای خوانده شوند. */
.emu-consult .lf-note,
.emu-consult .lf-error,
.emu-consult .lf-success { color: var(--ds-color-on-primary); }

@media (max-width: 600px) {
  .emu-accordion .emu-details-body { padding: var(--ds-space-4); }
  .emu-accordion .wp-block-details > summary { padding: var(--ds-space-4); }
}

/* ============================================================
   ۱۰. مقیاس تایپوگرافی — بازپس‌گیری از سفارشی‌ساز Astra
   ============================================================
   ── مسئله‌ای که حل می‌کند ──
   سفارشی‌ساز Astra این سه چیز را ست کرده بود و هیچ‌کس در تیم کنترلش نداشت:

       html { font-size: 87.5% }                    → ریشه ۱۴px روی دسکتاپ
       html { font-size: 79.8% } @media ≤921px      → ریشه ۱۲٫۸px روی موبایل
       h2   { font-size · 3.42857rem }              → ۴۸px دسکتاپ · ۴۳٫۸px موبایل

   نتیجه‌ی اندازه‌گیری‌شده روی موبایل ۳۷۵px:
       body ۱۲٫۸px · جدول ۱۲٫۱px · H3 ۱۴٫۳px · H1 ۲۰٫۴px · H2 ۴۳٫۸px
   یعنی **H1 نصفِ H2 بود** و سلسله‌مراتب روی هر صفحه‌ی سایت وارونه.

   ── چرا با `html:root` ──
   Astra قاعده‌اش را با انتخابگر `html` (تخصص 0,0,1) و **درون‌خطی در
   `<head>`** چاپ می‌کند، پس فایل قالب از راه ترتیب نمی‌تواند ببردش.
   `html:root` تخصص (0,1,1) دارد و مستقل از ترتیب برنده است.
   (همان تله‌ی ۱۳ در TECH.md، این بار روی ریشه.)

   ریشه به ۱۶px برمی‌گردد. یعنی هر `rem` در سه فایل CSS ما دوباره همان
   چیزی می‌شود که نویسنده‌اش فکر می‌کرد — `0.9rem` دیگر ۱۱٫۵px نیست، ۱۴٫۴px است. */

html:root { font-size: 100%; }

/* زمینه‌ی صفحه — بومِ گرم به‌جای سفیدِ خام. کارت‌ها (کاشیِ آمار، پنلِ
   آکاردئون، کارتِ مقاله) سفیدند و روی این بوم از هم جدا دیده می‌شوند؛
   روی سفیدِ خام همه در هم می‌رفتند. سراسری است، چون پالت سراسری است. */
/* ⚠️ سلکتور `body[class]` است نه `body`. آسترا زمینه را با
   `.ast-plain-container { background-color: var(--ast-global-color-5) }`
   می‌نویسد — ویژگیِ (0,1,0) روی همان عنصر. `body`ِ تنها (0,0,1) است و
   بی‌صدا می‌بازد. `[class]` یک پله بالا می‌بَرد و از ترتیبِ فایل‌ها هم
   مستقل می‌ماند. (همان تله‌ی ۱۳ در TECH.md، این بار روی زمینه.) */
body[class] { background-color: var(--ds-color-surface-soft); }

body,
button,
input,
select,
textarea,
.ast-button {
  font-size: var(--ds-text-body);
  line-height: var(--ds-leading-normal);
}

/* تیترها. انتخابگر عمداً `.entry-content` را هم دارد چون Astra با
   `.entry-content :where(h2)` می‌نویسد و `:where` تخصص صفر می‌دهد —
   ولی قاعده‌ی دوم Astra (`h2, .entry-content :where(h2)`) از سفارشی‌ساز
   تخصص عنصری دارد. با کلاس می‌شکنیمش. */
h1, .entry-content h1, .emu-page-title,
h2, .entry-content h2,
h3, .entry-content h3,
h4, .entry-content h4 {
  line-height: var(--ds-leading-tight);
  color: var(--ds-color-primary-dark);
}

h1, .entry-content h1, .emu-page-title { font-size: var(--ds-text-h1); }
h2, .entry-content h2               { font-size: var(--ds-text-h2); }
h3, .entry-content h3               { font-size: var(--ds-text-h3); }
h4, .entry-content h4               { font-size: var(--ds-text-h4); }

/* ریتم عمودی: تیتر باید به متنِ **زیرِ** خودش بچسبد و از متنِ بالایی
   فاصله بگیرد. بدون این، خواننده نمی‌فهمد تیتر مالِ کدام بخش است. */
.entry-content h2,
.entry-content h3,
.entry-content h4 {
  margin-block-start: var(--ds-space-7);
  margin-block-end: var(--ds-space-3);
}

.entry-content h2:first-child,
.entry-content h3:first-child,
.entry-content h4:first-child { margin-block-start: 0; }

.entry-content p,
.entry-content ul,
.entry-content ol {
  line-height: var(--ds-leading-loose);
  margin-block-end: var(--ds-space-4);
}

/* پاراگرافِ اولِ صفحه کمی بزرگ‌تر — چشم را وارد متن می‌کند. */
.entry-content > p:first-child { font-size: var(--ds-text-lead); }

/* جدول‌ها هم از مقیاس پیروی کنند، نه از عددِ دلبخواهی. */
.emu-table table { font-size: var(--ds-text-sm); }
.emu-note { font-size: var(--ds-text-sm); }

.emu-accordion .wp-block-details > summary { font-size: var(--ds-text-h4); }
.emu-facilities li { font-size: var(--ds-text-body); }
.emu-cta-band p,
.wp-block-group.emu-consult > p:not(.emu-pill) { font-size: var(--ds-text-body); }
