/*
Theme Name: Tejarat Bartar Academy
Theme URI: https://tejaratbartar.com
Author: Tejarat Bartar
Description: قالب اختصاصی آکادمی تجارت برتر (در حال مهاجرت از HTML سفارشی به وردپرس)
Version: 0.49.0
Text Domain: tejaratbartar
*/

/* Extracted from tejaratbartar1_v363.html - 12 style blocks, 283898 chars */

/*
 * قدمِ ۲۴۹ — self-host فونتِ وزیرمتن (Vazirmatn)
 * ---------------------------------------------------------------------
 * زمینه: تا این قدم، 'Vazirmatn' در همه‌جایِ سایت (body، مودال‌ها، دکمه‌ها و...)
 * فقط به‌عنوانِ نامِ font-family نوشته می‌شد بدونِ هیچ @font-face ای — یعنی
 * فونت فقط رویِ سیستم‌هایی که از قبل Vazirmatn نصب داشتند درست دیده می‌شد و
 * برایِ اکثرِ بازدیدکننده‌ها (ویندوز/مک بدونِ نصبِ دستی) به sans-serif پیش‌فرضِ
 * سیستم سقوط می‌کرد. این بلوک با یک فایلِ فونتِ Variable تکی (تمامِ وزن‌هایِ
 * ۱۰۰ تا ۹۰۰ در یک woff2، دقیقاً پوششِ همان بازه‌ای که در سراسرِ style.css/
 * header.php استفاده شده: 400/500/600/700/800/900) هم حجم را کم می‌کند (یک
 * فایل ~109KB به‌جایِ ۹ فایلِ جدا) و هم دیگر به CDN خارجی وابسته نیست.
 * فایل از پکیجِ رسمیِ npm (vazirmatn، همان انتشارِ رسمیِ rastikerdar/vazirmatn،
 * لایسنسِ SIL OFL 1.1 — متنِ کامل در assets/fonts/vazirmatn/OFL.txt) گرفته شده.
 * پریلودِ مرتبط در header.php (تگِ <head>، قبل از wp_head) اضافه شده تا فونت
 * زودتر از رندرِ اول درخواست شود (کاهشِ FOUT/CLS).
 */
@font-face{
  font-family:'Vazirmatn';
  src:url('assets/fonts/vazirmatn/Vazirmatn[wght].woff2') format('woff2 supports variations'),
      url('assets/fonts/vazirmatn/Vazirmatn[wght].woff2') format('woff2-variations');
  font-weight:100 900;
  font-style:normal;
  font-display:swap;
}

/* ===== Block 1 ===== */
:root{ --border:#e5e7eb; --text-secondary:#6b7280; }

/* نشستِ جدید — قدمِ ۲۷۶: توستِ سراسریِ سبک، مستقل از ویجتِ مسنجر (که #tbMessengerRoot
   .toast تنها وقتی پنلش باز است دیده می‌شود). برایِ پیام‌هایِ کوتاهِ سایتِ اصلی (مثلِ
   «گفتگویِ قبلیِ شما وصل شد» بعدِ ورود) — رجوع به tbShowSimpleToast در student-panel.js. */
.tb-simple-toast{
  position:fixed; top:18px; left:50%; transform:translateX(-50%) translateY(-120px);
  background:#12303f; color:#fff; padding:10px 20px; border-radius:20px;
  font-family:'Vazirmatn',sans-serif; font-size:0.85rem; z-index:2147483000;
  box-shadow:0 4px 18px rgba(0,0,0,0.22); max-width:90%; text-align:center;
  transition:transform 0.4s cubic-bezier(0.34,1.56,0.64,1); pointer-events:none;
}
.tb-simple-toast.show{ transform:translateX(-50%) translateY(0); }

body{ margin:0; padding:16px; background:#f3f4f6; font-family:'Vazirmatn',sans-serif; }
html{scrollbar-width:auto;scrollbar-color:#1789C2 #e7ebf0;}
/* v198: قفل اسکرول افقی سراسری — جلوگیری از باگ رایج موبایل/تبلت که هر عنصرِ کمی بیرون‌زده
   (به‌خاطر نبودِ box-sizing:border-box روی برخی المان‌های قدیمی) کل صفحه را قابل‌اسکرول‌افقی
   می‌کند. این قانون فقط overflow را می‌بُرد و چیزی را جابه‌جا نمی‌کند، پس ریسک بهم‌ریختن
   چیدمانِ فعلی صفر است. */
/* v209: قبلاً overflow-x:hidden روی «هم» html و هم body ست می‌شد. طبق مشخصاتِ CSS، وقتی overflow-x
   غیرِvisible باشد و overflow-y صریحاً ست نشده باشد، overflow-y به‌صورتِ خودکار auto محاسبه می‌شود؛
   یعنی خودِ body هم (علاوه بر html) یک «جعبه‌ی اسکرولِ» مستقلِ خودش را تشکیل می‌داد. چون اسکرولِ
   واقعیِ صفحه هميشه روی html انجام می‌شود (document.scrollingElement === HTML) و اسکرولِ داخلیِ
   خودِ body هیچ‌وقت حرکت نمی‌کرد، هر عنصرِ position:sticky داخلِ body (نوارِ چسبانِ جدولِ دوره‌ها،
   نوارِ جستجو/صفحه‌بندی و…) نسبت به همان جعبه‌ی ساکنِ body محاسبه می‌شد و عملاً هیچ‌وقت «نمی‌چسبید»
   — دقیقاً همان چیزی که به‌صورتِ «سرتیترِ جدول در وسطِ اسکرول دوتایی/معلق می‌شود» گزارش شد (چون
   کپیِ fixed هدر بر اساسِ موقعیتِ نوارِ چسبانِ اشتباه محاسبه می‌شد). راه‌حل: overflow-x:hidden فقط
   روی html بماند؛ body دیگر overflow مستقلی نمی‌گیرد و html به‌عنوانِ تنها ظرفِ اسکرول باقی می‌ماند. */
html{max-width:100%;overflow-x:hidden;}
body{max-width:100%;}
@media (max-width:768px){
  /* v198: جلوگیری از زوم خودکارِ سافاری آیفون هنگام فوکوس روی اینپوت/سلکت با فونتِ زیرِ ۱۶px
     — فقط در موبایل/تبلت فعال است تا چیدمانِ دسکتاپ دست‌نخورده بماند. */
  input:not([type="checkbox"]):not([type="radio"]),select,textarea{font-size:16px!important;}
}
html::-webkit-scrollbar{width:15px;height:15px;}
html::-webkit-scrollbar-track{background:#e7ebf0;}
html::-webkit-scrollbar-thumb{background:#1789C2;border-radius:8px;border:3px solid #e7ebf0;}
html::-webkit-scrollbar-thumb:hover{background:#0b6fa8;}

/* ============ نوار قیمت چرخان ============ */
.tk-item{display:inline-flex;align-items:center;gap:5px;padding:0 14px;border-left:1px solid #1a3a5c;font-size:11.5px;font-family:'Consolas','Courier New',monospace;cursor:default;}
.tk-name{color:#7ab8e8;font-weight:600;font-size:11px;}
.tk-price{color:#fff;font-weight:700;}
.tk-up{color:#26d47c;font-size:10px;}
.tk-dn{color:#ff5b5b;font-size:10px;}
.tk-flag{font-size:13px;}

/* ===== Block 2 ===== */
.tb-drop{display:none;position:absolute;top:100%;background:#fff;color:#222;border-radius:8px;box-shadow:0 10px 24px rgba(0,0,0,.18);padding:8px 6px;min-width:190px;z-index:400;text-align:right;border:0.5px solid #eee;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:2px 6px;}
/* قدمِ ۲۱۷ (بازطراحیِ دراپ‌داون‌های خدمات/ابزار — گریدِ تطبیقی + پالایشِ ظاهری):
   سکتورهایِ پرآیتم (فارکس/بورس/کریپتو در خدمات، حسابداری/بیمه در ابزار) عرضِ ثابتی
   می‌گیرند تا گریدِ auto-fill بالا واقعاً چندستونه شود؛ این فقط برایِ موسِ واقعی
   (هاورِ دسکتاپ) است — در حالتِ لمسی/موبایل، عرض توسطِ positionDropForMobile
   (بدونِ دست‌زدن به آن تابع) بر اساسِ عرضِ صفحه محاسبه می‌شود و همان‌جا هم گریدِ
   auto-fill به‌طورِ خودکار برایِ آن عرض ستون‌بندی می‌کند. سکتورهایِ کم‌آیتم عمداً
   در این لیست نیستند تا عرضِ طبیعی/تک‌ستونه‌شان (بر اساسِ min-width بالا) حفظ شود. */
@media (hover:hover) and (pointer:fine){
.tb-drop[data-sector="forex"],
.tb-drop[data-sector="bourse"],
.tb-drop[data-sector="crypto"],
.tb-drop[data-sector="accounting"],
.tb-drop[data-sector="insurance"]{width:340px;}
}
/* سرتیترِ کوچکِ سکتور بالایِ هر پنل — از خودِ HTML (data-sector-label) خونده می‌شه،
   نه هاردکد در CSS، تا اگه فردا سکتورِ جدید اضافه شد فقط همون attribute کافیه. */
.tb-drop[data-sector-label]::before{
  content:attr(data-sector-label);
  display:block;grid-column:1/-1;
  font-size:10.5px;font-weight:800;color:#8a94a6;
  padding:2px 10px 6px;margin-bottom:4px;
  border-bottom:1px solid #f0f0f0;letter-spacing:.2px;
}
/* جداکننده‌هایِ ازپیش‌موجود (حالا با کلاس، بدونِ تغییرِ ظاهریِ خودشون) باید در چیدمانِ
   گریدِ جدید کلِ عرض رو بگیرن، وگرنه فقط یک ستون رو نصف می‌کنن. */
.tb-drop-sep{grid-column:1/-1;}
/* v205: بازکردنِ منو با :hover فقط برای دستگاه‌های واقعاً دارای موس فعال است. روی لمسی/موبایل،
   :hover با تپ می‌تواند «چسبیده» بماند (مخصوصاً سافاری iOS) و باعث می‌شد منو با چیدمانِ پیش‌فرضِ
   دسکتاپ (position:absolute، بدون محاسبه‌ی JS برای موبایل) نمایش داده شود و کاملاً به‌هم‌ریخته
   به‌نظر برسد — حتی وقتی به‌ظاهر بسته شده بود. روی لمسی، بازشدنِ منو فقط با کلاسِ tb-force-open
   (که با تپ در جاوااسکریپت ست می‌شود و همراه با موقعیتِ صحیحِ محاسبه‌شده برای موبایل است) کنترل می‌شود. */
@media (hover:hover) and (pointer:fine){
/* اصلاحِ نشستِ جاری — رفعِ نقصِ گزارش‌شده («لیستِ زیرِ خدمات/ابزار موقعِ بازشدن پرش/لرزش دارد»):
   قاعده‌ی خامِ ".tb-navitem:hover .tb-drop{display:block}" که این‌جا قبلاً هم‌زمان با کلاسِ
   کنترل‌شده‌ی JS (چند خط پایین‌تر) فعال بود حذف شد. آن قاعده، هم‌زمان با رویدادِ mouseenter،
   زیرمنو را در همان لحظه‌ی اول با چیدمانِ پیش‌فرضِ CSS (position:absolute، هنوز داخلِ
   ظرفِ overflow-x:auto یِ tb-nav-items) نمایش می‌داد — یعنی یک فریمِ کامل قبل از این‌که
   تابعِ JS ی positionDropForMobile (چند خط پایین‌تر، صدا‌زده‌شده از همان mouseenter) موقعیتِ
   fixed را جایگزین کند. چون position:absolute برخلافِ fixed از overflowِ اجدادش خارج نمی‌شود،
   همان یک فریم باعثِ می‌شد اسکرول‌بارِ عمودیِ مخفیِ tb-nav-items لحظه‌ای ظاهر/جابه‌جا شود —
   دقیقاً همان «پرش» گزارش‌شده، و در چیدمان‌های نزدیک به نوارِ قیمتِ زیرِ منو (tb-ticker-bar)
   با فاصله‌ی کوچک‌ترِ عمودی این جابه‌جایی محسوس‌تر/شبیهِ لرزش به‌نظر می‌رسید. با حذفِ این قاعده،
   تنها مسیرِ نمایش همان کلاسِ کنترل‌شده‌ی زیر (tb-hover-open) می‌ماند که در همان callback ای
   ست می‌شود که موقعیتِ fixed را هم محاسبه می‌کند — یعنی نمایش و موقعیت‌دهی همیشه با هم، بدونِ
   فاصله‌ی زمانی، اتفاق می‌افتند. */
.tb-navitem.tb-hover-open .tb-drop.tb-active-sector{display:grid !important;}
}
.tb-navitem.tb-force-open .tb-drop.tb-active-sector{display:grid !important;}
/* ---- استایل سه‌بعدی/برجسته (emboss) برای آیتم‌های هر سه منوی کشویی: دوره‌های آموزشی، خدمات، ابزار معاملاتی ----
   رنگ پیش‌فرض: آبی کمرنگ‌تر از آبی آسمانی. هاور: آبی آسمانی کمرنگ. */
.tb-drop-item{
  padding:8px 16px;font-size:12px;white-space:nowrap;cursor:pointer;
  margin:3px 8px;border-radius:8px;background:#EEF7FF;color:#111;font-weight:700;
  box-shadow:0 1px 3px rgba(15,61,115,.14),inset 0 1px 0 rgba(255,255,255,.6);
  transition:background .15s ease,box-shadow .15s ease,color .15s ease,transform .08s ease;
}
.tb-drop-item:hover{background:#D2ECFF;box-shadow:0 3px 7px rgba(15,61,115,.2),inset 0 1px 0 rgba(255,255,255,.7);}
.tb-drop-item:active{transform:translateY(1px);}
/* قدمِ ۲۱۷: قبلاً فقط «تبدیل تاریخ» آیکون داشت و بقیه‌ی آیتم‌ها بی‌آیکون بودن — همین
   ناهماهنگیِ بصری ایجاد می‌کرد. حالا آیتم‌هایی که خودشون <i> ندارن یک نقطه‌ی کوچیکِ
   هم‌رنگِ متن می‌گیرن تا همه‌ی ردیف‌ها از نظرِ فاصله‌گذاری/شروع یکدست به‌نظر برسن. */
.tb-drop-item:not(:has(i))::before{
  content:"";display:inline-block;width:5px;height:5px;border-radius:50%;
  background:currentColor;opacity:.45;margin-left:7px;vertical-align:middle;
}

/* ---- منوی «خدمات» و «ابزار معاملاتی»: چون هر بازار زیرمنوی جدای خودش را دارد (فقط زیرمنوی
   بازار فعال نمایش داده می‌شود)، همه‌ی آیتم‌های داخل هر کدام رنگ همان بازار را می‌گیرند —
   نوشته همیشه مشکی و بولد می‌ماند، فقط پس‌زمینه رنگی می‌شود ---- */
.tb-drop[data-sector="forex"] .tb-drop-item{background:#E3F5FF;}
.tb-drop[data-sector="forex"] .tb-drop-item:hover{background:#CDEBFF;}
.tb-drop[data-sector="bourse"] .tb-drop-item{background:#E7F9EE;}
.tb-drop[data-sector="bourse"] .tb-drop-item:hover{background:#CFF3DC;}
.tb-drop[data-sector="crypto"] .tb-drop-item{background:#FFF1E3;}
.tb-drop[data-sector="crypto"] .tb-drop-item:hover{background:#FFE1C2;}

/* ---- منوی «دوره‌های آموزشی»: زیرشاخه‌ای که با کاشیِ فعال نوار بالای سایت مطابقت دارد
   (بازارهای مالی بین‌المللی/بورس اوراق بهادار/ارز دیجیتال/بازرگانی/حسابداری) رنگ همان کاشی را می‌گیرد؛
   بقیه‌ی آیتم‌ها (بازاریابی، کارآفرینی و ...) همیشه همان آبی کمرنگ پیش‌فرض می‌مانند —
   کلاس data-active-sector توسط تابع tbHeaderSyncCourseCat در اسکریپت پایین صفحه تنظیم می‌شود.
   نوشته همیشه مشکی/بولد می‌ماند؛ فقط آیکون سفید می‌شود تا روی پس‌زمینه‌ی توپر رنگی خوانا بماند. */
.tb-drop-item[data-active-sector="forex"]{background:#0EA5E9;box-shadow:0 3px 8px rgba(14,165,233,.35),inset 0 1px 0 rgba(255,255,255,.35);}
.tb-drop-item[data-active-sector="bourse"]{background:#22C55E;box-shadow:0 3px 8px rgba(34,197,94,.35),inset 0 1px 0 rgba(255,255,255,.35);}
.tb-drop-item[data-active-sector="crypto"]{background:#FB923C;box-shadow:0 3px 8px rgba(251,146,60,.35),inset 0 1px 0 rgba(255,255,255,.35);}
.tb-drop-item[data-active-sector="trade"]{background:#7C3AED;box-shadow:0 3px 8px rgba(124,58,237,.35),inset 0 1px 0 rgba(255,255,255,.35);}
.tb-drop-item[data-active-sector="accounting"]{background:#0D9488;box-shadow:0 3px 8px rgba(13,148,136,.35),inset 0 1px 0 rgba(255,255,255,.35);}
.tb-drop-item[data-active-sector="insurance"]{background:#E11D48;box-shadow:0 3px 8px rgba(225,29,72,.35),inset 0 1px 0 rgba(255,255,255,.35);}
.tb-drop-item[data-active-sector="marketing"]{background:#B45309;box-shadow:0 3px 8px rgba(180,83,9,.35),inset 0 1px 0 rgba(255,255,255,.35);}
.tb-drop-item[data-active-sector="entrepreneurship"]{background:#DB2777;box-shadow:0 3px 8px rgba(219,39,119,.35),inset 0 1px 0 rgba(255,255,255,.35);}
.tb-drop-item[data-active-sector="finance"]{background:#475569;box-shadow:0 3px 8px rgba(71,85,105,.35),inset 0 1px 0 rgba(255,255,255,.35);}
.tb-drop-item[data-active-sector="it"]{background:#0E7490;box-shadow:0 3px 8px rgba(14,116,144,.35),inset 0 1px 0 rgba(255,255,255,.35);}
.tb-drop-item[data-active-sector="admin"]{background:#4F46E5;box-shadow:0 3px 8px rgba(79,70,229,.35),inset 0 1px 0 rgba(255,255,255,.35);}
.tb-drop-item[data-active-sector="eduserv"]{background:#78350F;box-shadow:0 3px 8px rgba(120,53,15,.35),inset 0 1px 0 rgba(255,255,255,.35);}
.tb-drop-item[data-active-sector] i{color:#fff !important;}
.tb-drop-item[data-active-sector]:hover{filter:brightness(1.07);}

/* ---- زیرمنوی کشویی (flyout) «امور مالی و بازرگانی» — روی هاور همین آیتم باز می‌شود، به‌جای اینکه
   ۷ زیرشاخه‌اش به‌صورت فهرست تخت داخل منوی اصلی کشیده شوند و آن را طولانی کنند ---- */
.tb-drop-item-parent{position:relative;cursor:pointer;padding:20px 42px;margin:3px 6px;font-size:24px;}
.tb-flyout-caret{font-size:13px;font-weight:900;opacity:.55;margin-left:2px;flex-shrink:0;}
.tb-flyout-caret-label{display:none;}
.tb-flyout-caret-icon{display:inline-block;}
.tb-drop-flyout{display:none;position:absolute;top:-6px;right:100%;margin-right:0;background:#fff;border-radius:8px;box-shadow:0 10px 24px rgba(0,0,0,.2);padding:6px 0;min-width:190px;z-index:410;text-align:right;border:0.5px solid #eee;}
/* v205: هم‌الگو با رفعِ باگِ بالا — بازشدنِ زیرمنوی «امور مالی و بازرگانی» با هاور فقط روی موسِ
   واقعی. روی لمسی، این زیرمنو منحصراً با تپ روی فلشِ (‹) و منطقِ آکاردئونِ tbFlyoutMobileToggle
   باز/بسته می‌شود (پایین‌ترِ همین فایل)، تا با چیدمانِ عمودیِ ساده‌ی زیرِ آیتمِ والد باز شود، نه
   به‌صورتِ پنلِ کناریِ دوستونه‌ای که روی صفحه‌ی کوچکِ موبایل جا نمی‌شود. */
@media (hover:hover) and (pointer:fine){
.tb-drop-item-parent:hover .tb-drop-flyout{display:block;}
.tb-drop-item-parent:hover{background:#D2ECFF;}
}
/* small triangle indicator: shown only next to nav items that actually have a dropdown */
.tb-drop-caret{display:inline-block;width:0;height:0;border-left:4px solid transparent;border-right:4px solid transparent;border-top:5px solid currentColor;opacity:.85;flex-shrink:0;transition:transform .15s ease;}
@media (hover:hover) and (pointer:fine){
.tb-navitem:hover .tb-drop-caret{transform:rotate(180deg);}
}
.tb-navitem.tb-force-open .tb-drop-caret{transform:rotate(180deg);}

/* ---- Sector switcher: بازارهای مالی / بورس اوراق بهادار / ارزهای دیجیتال ---- */
#tb-root{--tb-theme:#0EA5E9;}
.tb-sector-switcher{background:#eef1f5;padding:16px 18px;display:flex;gap:12px;overflow-x:auto;-webkit-overflow-scrolling:touch;box-shadow:inset 0 -1px 0 #e2e6ec;scrollbar-width:none;}
.tb-sector-switcher::-webkit-scrollbar{display:none;}
.tb-sector-btn{padding:12px 24px;font-size:13px;font-weight:800;cursor:pointer;white-space:nowrap;border-radius:12px;border:2px solid transparent;background:#fff;box-shadow:0 2px 5px rgba(15,61,115,.1);transition:transform .15s ease,box-shadow .15s ease,background .2s ease,color .2s ease;}
.tb-sector-btn:hover{transform:translateY(-2px);}
.tb-sector-btn[data-sector="forex"]{color:#0EA5E9;border-color:#bfe7fb;}
.tb-sector-btn[data-sector="bourse"]{color:#15803D;border-color:#c3f0d4;}
.tb-sector-btn[data-sector="crypto"]{color:#EA7C1F;border-color:#fbdcb6;}
.tb-sector-btn[data-sector="forex"].active{background:linear-gradient(180deg,#38BDF8,#0EA5E9);border-color:#0EA5E9;color:#fff;box-shadow:0 7px 16px rgba(14,165,233,.4),inset 0 1px 0 rgba(255,255,255,.35);transform:translateY(-2px);}
.tb-sector-btn[data-sector="bourse"].active{background:linear-gradient(180deg,#22C55E,#15803D);border-color:#15803D;color:#fff;box-shadow:0 7px 16px rgba(21,128,61,.45),inset 0 1px 0 rgba(255,255,255,.35);transform:translateY(-2px);}
.tb-sector-btn[data-sector="crypto"].active{background:linear-gradient(180deg,#FDBA74,#FB923C);border-color:#FB923C;color:#fff;box-shadow:0 7px 16px rgba(251,146,60,.4),inset 0 1px 0 rgba(255,255,255,.35);transform:translateY(-2px);}
/* رشته‌ی جدید ۱ از ۷ (پروژه‌ی بازطراحی نوار به ۱۰ کاشی) — بازرگانی: بنفش، هم‌الگو با سه رشته‌ی قبلی */
.tb-sector-btn[data-sector="trade"]{color:#7C3AED;border-color:#ddd3fb;}
.tb-sector-btn[data-sector="trade"].active{background:linear-gradient(180deg,#A78BFA,#7C3AED);border-color:#7C3AED;color:#fff;box-shadow:0 7px 16px rgba(124,58,237,.4),inset 0 1px 0 rgba(255,255,255,.35);transform:translateY(-2px);}
.tb-sector-btn[data-sector="accounting"]{color:#0D9488;border-color:#bfe9e3;}
.tb-sector-btn[data-sector="accounting"].active{background:linear-gradient(180deg,#2DD4BF,#0D9488);border-color:#0D9488;color:#fff;box-shadow:0 7px 16px rgba(13,148,136,.4),inset 0 1px 0 rgba(255,255,255,.35);transform:translateY(-2px);}
/* رشته‌ی جدید ۳ از ۷ — بیمه: قرمزِ گلبهی، هم‌الگو با رشته‌های قبلی */
.tb-sector-btn[data-sector="insurance"]{color:#E11D48;border-color:#fbd0da;}
.tb-sector-btn[data-sector="insurance"].active{background:linear-gradient(180deg,#FB7185,#E11D48);border-color:#E11D48;color:#fff;box-shadow:0 7px 16px rgba(225,29,72,.4),inset 0 1px 0 rgba(255,255,255,.35);transform:translateY(-2px);}
/* رشته‌ی جدید ۴ از ۷ — بازاریابی: کهربایی/طلایی، هم‌الگو با رشته‌های قبلی */
.tb-sector-btn[data-sector="marketing"]{color:#B45309;border-color:#fbe2c4;}
.tb-sector-btn[data-sector="marketing"].active{background:linear-gradient(180deg,#F59E0B,#B45309);border-color:#B45309;color:#fff;box-shadow:0 7px 16px rgba(180,83,9,.4),inset 0 1px 0 rgba(255,255,255,.35);transform:translateY(-2px);}
.tb-sector-btn[data-sector="entrepreneurship"]{color:#DB2777;border-color:#fbcfe8;}
.tb-sector-btn[data-sector="entrepreneurship"].active{background:linear-gradient(180deg,#F472B6,#DB2777);border-color:#DB2777;color:#fff;box-shadow:0 7px 16px rgba(219,39,119,.4),inset 0 1px 0 rgba(255,255,255,.35);transform:translateY(-2px);}
.tb-sector-btn[data-sector="finance"]{color:#475569;border-color:#e2e8f0;}
.tb-sector-btn[data-sector="finance"].active{background:linear-gradient(180deg,#94A3B8,#475569);border-color:#475569;color:#fff;box-shadow:0 7px 16px rgba(71,85,105,.4),inset 0 1px 0 rgba(255,255,255,.35);transform:translateY(-2px);}
.tb-sector-btn[data-sector="it"]{color:#0E7490;border-color:#bae6f2;}
.tb-sector-btn[data-sector="it"].active{background:linear-gradient(180deg,#22D3EE,#0E7490);border-color:#0E7490;color:#fff;box-shadow:0 7px 16px rgba(14,116,144,.4),inset 0 1px 0 rgba(255,255,255,.35);transform:translateY(-2px);}
.tb-sector-btn[data-sector="admin"]{color:#4F46E5;border-color:#d9d7fb;}
.tb-sector-btn[data-sector="admin"].active{background:linear-gradient(180deg,#818CF8,#4F46E5);border-color:#4F46E5;color:#fff;box-shadow:0 7px 16px rgba(79,70,229,.4),inset 0 1px 0 rgba(255,255,255,.35);transform:translateY(-2px);}
.tb-sector-btn[data-sector="eduserv"]{color:#78350F;border-color:#f0d9be;}
.tb-sector-btn[data-sector="eduserv"].active{background:linear-gradient(180deg,#D97706,#78350F);border-color:#78350F;color:#fff;box-shadow:0 7px 16px rgba(120,53,15,.4),inset 0 1px 0 rgba(255,255,255,.35);transform:translateY(-2px);}
/* نسخهٔ کوچک‌شدهٔ دکمه‌های بازار برای نمایش داخل ردیف منو، کنار «ارتباط با ما» */
.tb-nav-sector-group{display:flex;align-items:center;gap:6px;padding:4px 10px;flex-shrink:0;margin-right:10px;margin-left:10px;background:rgba(255,255,255,.07);border-radius:14px;order:0;flex-basis:100%;}
.tb-nav-sector-group .tb-sector-btn{padding:3px 7px;font-size:10.5px;border-radius:7px;box-shadow:none;font-weight:700;}
.tb-nav-sector-group .tb-sector-btn:hover{transform:none;}
.tb-nav-sector-group .tb-sector-btn.active{transform:none;}
/* فاز جدید: نوار رنگیِ کوچکِ زیرِ نامِ «آکادمی تجارت برتر» — با هر تعویضِ رشته/کاشی به رنگِ همان
   رشته درمی‌آید (متغیرِ --tb-theme که از قبل در tbSetSector ست می‌شود، اینجا فقط مصرف می‌شود). */
.tb-sector-badge-strip{width:100%;height:8px;border-radius:4px;margin-top:4px;background:var(--tb-theme,#0EA5E9);transition:background-color .35s ease;box-shadow:0 1px 3px rgba(0,0,0,.25);}
/* ---- بلوک فشردهٔ لوگو/نام آکادمی داخل ردیف منو (سفید، قرمز، نستعلیق) + جداکنندهٔ مورب ---- */
.tb-nav-brand{display:flex;align-items:center;gap:7px;background:#fff;padding:6px 20px 6px 16px;flex-shrink:0;clip-path:polygon(14% 0,100% 0,100% 100%,0 100%);margin-left:-10px;z-index:2;}
.tb-nav-brand-logo{width:26px;height:26px;border-radius:7px;display:flex;align-items:center;justify-content:center;color:#C0282D;border:1.5px solid #C0282D;font-size:10.5px;font-weight:800;flex-shrink:0;font-family:Arial,Tahoma,sans-serif;}
.tb-nav-brand-title{font-family:'Noto Nastaliq Urdu','Vazirmatn',serif;color:#C0282D;font-weight:800;font-size:15.5px;white-space:nowrap;}
@media (max-width:620px){
  .tb-sector-switcher{padding:12px 10px;gap:8px;}
  .tb-sector-btn{padding:10px 16px;font-size:12px;}
}
/* راهنمای رنگی: این آیتم‌ها با تغییر بازار هم‌رنگ می‌شوند تا کاربر با کلیک روی بازار متوجه بشود همراهانش کدام‌اند؛
   v332: طبقِ درخواستِ صریحِ کاربر، «دوره آموزشی» و «مدرسه» هم به این گروه اضافه شدند (خطِ رنگی زیرشان
   هم نمایش داده می‌شود)، هرچند محتوای خودِ این دو صفحه هنوز بین همه‌ی بازارها مشترک است */
/* v263: طبقِ درخواستِ صریحِ کاربر — آیتمِ «خانه» در نوارِ بالا کمی بزرگ‌تر و بصری متفاوت از بقیه‌ی
   آیتم‌های منو نمایش داده می‌شود (پس‌زمینه‌ی نیمه‌شفاف + گردی‌ گوشه + فونتِ درشت‌تر/بولدتر، بدونِ
   نیازِ به تغییرِ HTML موبایل که کلاسِ tb-navitem-home را ندارد و دست‌نخورده می‌ماند). */
.tb-navitem-home:hover{background:rgba(255,255,255,.24)!important;}
.tb-theme-item{position:relative;}
.tb-theme-item::after{content:'';position:absolute;right:6px;left:6px;bottom:-1px;height:3px;border-radius:3px;background:var(--tb-theme);transition:background .2s ease;}
/* v263: در حالتِ «خانه» (هنوز هیچ بازاری انتخاب نشده) خطِ رنگیِ زیرِ گزینه‌های منو مخفی می‌شود */
#tb-root.tb-home-mode .tb-theme-item::after,
#tb-root.tb-home-ctx .tb-theme-item::after{display:none;}
.tb-theme-item i{color:#fff;transition:color .2s ease;}
/* v347: طبقِ درخواستِ صریحِ کاربر — نه فقط متن/خط زیر، بلکه خودِ دکمه (پس‌زمینه‌ی کامل) باید هم‌رنگِ
   کاشیِ بازارِ انتخاب‌شده شود، دقیقاً مثلِ ظاهرِ خودِ دکمه‌های کاشی (.tb-sector-btn.active) که وقتی
   فعال می‌شوند کاملاً پر از رنگ می‌شوند (مثلاً کاشیِ بورس سبز می‌شود، پس این آیتم‌ها هم باید کاملاً
   سبز شوند). «خانه» (کلاسِ جداگانه‌ی tb-navitem-home، نه tb-theme-item) و «ارتباط با ما» (بدونِ
   کلاسِ tb-theme-item) طبقِ درخواستِ صریح از این قانون مستثنا هستند و همیشه به رنگِ پیش‌فرضِ نوار
   (سرمه‌ای/شفاف) باقی می‌مانند. */
.tb-navitem.tb-theme-item{background:var(--tb-theme);color:#fff;box-shadow:0 2px 6px rgba(0,0,0,.25),inset 0 1px 0 rgba(255,255,255,.25);transition:background .2s ease;}
/* TB-NAV-DROP-FIX-v107-step197: قبلاً این قاعده از filter:brightness(1.12) برای روشن‌ترکردنِ
   رنگِ پس‌زمینه در حالتِ hover/force-open استفاده می‌کرد. طبقِ مشخصاتِ CSS (Filter Effects
   Level 1)، هر filter غیر از none روی یک عنصر، دقیقاً مثلِ transform، آن عنصر را به containing
   block برایِ فرزندانِ position:fixed اش تبدیل می‌کند. .tb-drop (زیرمنو) یک فرزندِ همین
   .tb-navitem است و موقعیتش را با JS (positionDropForMobile → getBoundingClientRect، نسبتِ
   ویوپورت) محاسبه می‌کند. به‌محضِ :hover، این filter رندر شده و containing block عوض می‌شد،
   زیرمنو به‌جایِ محلِ محاسبه‌شده به نقطه‌ای دیگر می‌پرید؛ چون آن نقطه‌ی جدید دیگر زیرِ نشانگرِ
   ماوس نبود، :hover بلافاصله از دست می‌رفت، filter برمی‌گشت به none، زیرمنو به محلِ درست
   برمی‌گشت (که دوباره زیرِ ماوس بود) و :hover دوباره فعال می‌شد — همین چرخه‌ی خیلی سریع
   (هر ~۶۶ میلی‌ثانیه، طبقِ فریم‌های ویدیوی حبیب) همان «لرزش»/چشمک‌زدنِ گزارش‌شده را می‌ساخت.
   این دقیقاً هم‌خانواده‌ی همان تله‌ای است که قدمِ ۱۹۶ رویِ #tb-sticky-zone.tb-pinned پیدا کرد؛
   نسخه‌ی امنِ الگو (بدونِ transform/filter) از قبل هم برایِ آیتم‌هایِ معمولیِ .tb-navitem در
   خطِ ۲۹۹/۳۰۱ همین فایل استفاده می‌شد (background را عوض می‌کند، نه filter را) — این‌جا فقط
   نسخه‌ی .tb-theme-item از همان الگوی امن پیروی نمی‌کرد. رفع: بجایِ filter، همان جلوه‌ی
   روشن‌ترشدن با یک لایه‌ی سفیدِ نیمه‌شفاف رویِ background (linear-gradient) ساخته شد — بدونِ
   ساختنِ هیچ containing block جدیدی. */
.tb-navitem.tb-theme-item:hover,
.tb-navitem.tb-theme-item.tb-force-open{background:linear-gradient(rgba(255,255,255,.16),rgba(255,255,255,.16)),var(--tb-theme);box-shadow:0 3px 9px rgba(0,0,0,.35),inset 0 1px 0 rgba(255,255,255,.3);}
.tb-navitem.tb-theme-item .tb-drop-caret{color:#fff;}
/* در حالتِ «خانه» (هیچ بازاری هنوز انتخاب نشده)، این آیتم‌ها به ظاهرِ خنثیِ پیش‌فرضِ نوار برمی‌گردند
   — دقیقاً هم‌الگو با قاعده‌ی موجودِ بالا برایِ ::after. سلکتورِ ترکیبی (نه فقط .tb-theme-item)
   عمداً استفاده شد تا از قوانینِ پایین‌ترِ .tb-navitem در همین فایل مطمئناً برتری داشته باشد
   (specificity بالاتر، نه وابسته به ترتیبِ تعریف). */
/* اصلاحِ نشستِ جاری — درخواستِ صریحِ مالکِ سایت: حالتِ قبلیِ «شفاف/بی‌سایه» روی خانه خیلی
   کم‌رنگ به‌نظر می‌رسید؛ اکنون دکمه‌های نوارِ خانه ظاهرِ «درخشان/برجسته/سه‌بعدی» می‌گیرند —
   گرادیانِ ملایمِ رنگِ برندِ خانه (#0F3D73) + هایلایتِ بالا + سایه‌ی بیرونی، هم‌الگو با
   دکمه‌های سکتوریِ .tb-sector-btn.active که از قبل همین جلوه را داشتند. */
#tb-root.tb-home-mode .tb-navitem.tb-theme-item,
#tb-root.tb-home-ctx .tb-navitem.tb-theme-item{background:linear-gradient(180deg,#2B6FB3,#0F3D73);box-shadow:0 4px 10px rgba(15,61,115,.35),inset 0 1px 0 rgba(255,255,255,.4),inset 0 -2px 3px rgba(0,0,0,.15);}
#tb-root.tb-home-mode .tb-navitem.tb-theme-item:hover,
#tb-root.tb-home-ctx .tb-navitem.tb-theme-item:hover{background:linear-gradient(180deg,#3B7FC4,#134680);box-shadow:0 6px 14px rgba(15,61,115,.45),inset 0 1px 0 rgba(255,255,255,.5),inset 0 -2px 3px rgba(0,0,0,.15);filter:none;}
.tb-sector-panel{display:none;}
.tb-sector-panel.tb-active-sector{display:grid;}

/* ---- Header: one compact row ---- */
.tb-header-row{padding:7px 16px;display:flex;align-items:center;justify-content:space-between;gap:14px;border-bottom:1px solid #eee;}
.tb-logo-block{display:flex;align-items:center;gap:6px;flex:0 0 auto;padding-left:6px;perspective:700px;}
.tb-logo-box{position:relative;width:73px;height:73px;border:2px dashed #bbb;border-radius:12px;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#999;background:#fafafa center/cover no-repeat;flex-shrink:0;overflow:hidden;transition:border-color .15s,background .15s;}
/* ---- حالت «لوگوی واقعی موجود»: تصویر ساکن، بدون کادر، با پس‌زمینه‌ی شیشه‌ای شفاف و افکت برجسته (drop-shadow) ---- */
.tb-logo-box.tb-logo-has-image{
  border:none;border-radius:14px;
  box-shadow:none;
  background:radial-gradient(circle at 50% 40%,rgba(255,255,255,.55),rgba(255,255,255,0) 70%);
  backdrop-filter:blur(2px);
  -webkit-backdrop-filter:blur(2px);
  filter:drop-shadow(0 2px 3px rgba(120,20,20,.35)) drop-shadow(0 5px 10px rgba(0,0,0,.18));
}
.tb-logo-box i{font-size:19px;}
.tb-logo-box span{font-size:8px;margin-top:2px;}
.tb-logo-upload-overlay{display:none;position:absolute;inset:0;background:rgba(15,61,115,.72);color:#fff;flex-direction:column;align-items:center;justify-content:center;gap:2px;font-size:8px;cursor:pointer;text-align:center;line-height:1.4;}
.tb-logo-upload-overlay i{font-size:14px;}
.tb-title-nastaliq{position:relative;font-family:'Noto Nastaliq Urdu','Vazirmatn',serif;font-size:22px;font-weight:700;color:#C0282D;line-height:1.35;white-space:nowrap;outline:none;border-radius:10px;padding:4px 10px;transition:box-shadow .15s;background:linear-gradient(180deg,rgba(255,255,255,.5),rgba(255,255,255,0) 60%);backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);}
.tb-title-nastaliq img{filter:drop-shadow(0 2px 3px rgba(120,20,20,.35)) drop-shadow(0 5px 10px rgba(0,0,0,.15));}
/* ---- Admin edit mode (demo toggle: controls who may change logo / academy name) ---- */
.tb-admin-toggle{display:flex;align-items:center;gap:6px;font-size:10px;color:#9aa7b5;cursor:pointer;user-select:none;padding:3px 9px 3px 3px;border:1px solid #eee;border-radius:999px;background:#fcfcfd;flex-shrink:0;}
/* قدمِ ۲۲۵ (طبقِ درخواستِ صریحِ حبیب) — «حالتِ مدیر (پیش‌نمایش)» هم در موبایل هم دسکتاپ از
   دیدِ همه‌ی بازدیدکنندگان پنهان شد. توجه (نکته‌ی امنیتی، فقط برایِ اطلاع): این چک‌باکس هیچ
   بررسیِ سمتِ سرور (current_user_can و مشابه) نداشت — یعنی تا همین الان هر بازدیدکننده‌ای
   (نه فقط مدیرِ واقعیِ سایت) می‌توانست آن را کلیک و امکاناتِ ویرایشِ لوگو/نام را باز کند؛
   حالا فقط از دیدِ عمومی مخفی است. اگر خودتان به‌عنوانِ مدیر بعداً نیاز به دسترسیِ سریع به
   همان حالت داشتید، باید راهِ ورودِ جداگانه‌ای (مثلاً محدود به کاربرِ واردشده‌ی وردپرس) برایش
   طراحی شود — این یک تصمیمِ جداگانه است، الان فقط پنهانش کردم، markup/JS اش پاک نشد. */
.tb-admin-toggle{ display: none !important; }.tb-admin-toggle input{width:26px;height:15px;appearance:none;background:#d8dee5;border-radius:999px;position:relative;cursor:pointer;transition:background .15s;flex-shrink:0;}
.tb-admin-toggle input::after{content:'';position:absolute;top:1.5px;right:1.5px;width:12px;height:12px;background:#fff;border-radius:50%;transition:right .15s;box-shadow:0 1px 2px rgba(0,0,0,.25);}
.tb-admin-toggle input:checked{background:#1789C2;}
.tb-admin-toggle input:checked::after{right:12.5px;}
#tb-root.tb-admin-on .tb-logo-box{border-style:solid;border-color:#1789C2;cursor:pointer;}
#tb-root.tb-admin-on .tb-logo-box:hover .tb-logo-upload-overlay{display:flex;}
#tb-root.tb-admin-on #tbAcademyTitle{cursor:text;outline:1px dashed transparent;display:inline!important;}
#tb-root.tb-admin-on #tbAcademyTitle:hover,#tb-root.tb-admin-on #tbAcademyTitle:focus{outline-color:#1789C2;box-shadow:0 0 0 4px rgba(23,137,194,.08);}
#tb-root.tb-admin-on #tbAcademyTitleImg{display:none!important;}
#tb-root.tb-admin-on .tb-title-edit-badge{display:flex;}
.tb-title-edit-badge{display:none;position:absolute;top:-8px;left:-10px;width:17px;height:17px;border-radius:50%;background:#1789C2;color:#fff;align-items:center;justify-content:center;font-size:9px;box-shadow:0 2px 5px rgba(0,0,0,.2);}
.tb-search-block{flex:1 1 auto;max-width:280px;}
.tb-search-wrap{position:relative;width:100%;}
.tb-search-input{width:100%;border-radius:999px;height:27px;font-family:inherit;font-size:11.5px;text-align:right;padding:0 12px 0 30px;border:1px solid #ddd;box-sizing:border-box;}
.tb-search-icon-btn{position:absolute;left:6px;top:50%;transform:translateY(-50%);width:20px;height:20px;border:none;background:transparent;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0;transition:opacity .15s;opacity:0;visibility:hidden;pointer-events:none;}
.tb-search-icon-btn.tb-search-has-text{opacity:1;visibility:visible;pointer-events:auto;}
.tb-search-icon-btn svg{width:16px;height:16px;display:block;}
.tb-search-icon-btn:hover{opacity:.7;}
.tb-meta-block{display:flex;flex-direction:column;gap:4px;align-items:flex-end;flex:0 0 auto;}
.tb-meta-social{display:flex;gap:8px;align-items:center;}
.tb-social-icon{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:7px;transition:transform .15s ease,box-shadow .15s ease;}
.tb-social-icon:hover{transform:translateY(-2px);box-shadow:0 4px 12px rgba(0,0,0,.2);}
.tb-social-icon svg{width:18px;height:18px;display:block;}
.tb-chat-logo-badge{width:26px;height:26px;border-radius:7px;overflow:hidden;display:flex;align-items:center;justify-content:center;flex-shrink:0;background:#fff;}
.tb-chat-logo-badge img{width:100%;height:100%;object-fit:cover;object-position:center;transform:scale(1.45);}
/* header brand-logo badge: bigger than the other social icons since it carries the real logo image */

.tb-meta-time{display:flex;align-items:center;gap:5px;border:1px solid #9dc3e8;background:#eaf6ff;border-radius:7px;padding:2px 8px;white-space:nowrap;}

/* ---- Nav bar (blue) ---- */
.tb-nav-row{background:#0F3D73;padding:6px 14px;display:flex;align-items:center;justify-content:flex-start;flex-wrap:wrap;gap:6px;}
/* v261: طبقِ درخواستِ صریحِ کاربر، ردیفِ اصلیِ منو (خانه + آیتم‌ها + ورود/ثبت‌نام) یک ردیفِ واحدِ
   بدونِ‌شکست است. «خانه» و «ورود/ثبت‌نام» دو سرِ ثابتِ این ردیف‌اند (flex-shrink:0)؛ فقط
   tb-nav-items (آیتم‌های میانی) در صورتِ کمبودِ عرض به‌صورتِ افقی اسکرول می‌شود — نه کلِ ردیف —
   تا بدونِ نیاز به اسکرول هم «خانه» هم دکمه‌های ورود/ثبت‌نام همیشه دیده شوند. */
.tb-nav-mainrow{display:flex;align-items:center;gap:6px;order:1;flex:1 1 100%;min-width:0;flex-wrap:nowrap;}
.tb-nav-mainrow>#tbNavHome{flex-shrink:0;}
/* v262: طبقِ درخواستِ صریحِ کاربر، چون tb-nav-items اسکرولِ افقیِ نامرئی گرفته (بدونِ اسکرول‌بارِ
   واقعی، طبقِ طراحیِ قبلی)، کاربر ممکن است متوجهِ قابلیتِ اسکرول نشود. یک نوارِ باریکِ قرمزِ
   راهنما (tb-nav-scroll-hint) درست زیرِ همین ناحیه اضافه شد که فقط وقتی محتوا واقعاً از عرضِ
   دیدِ ناحیه بیشتر است (اسکرول‌پذیر است) با جاوااسکریپت نمایش داده می‌شود؛ الگویِ راه‌راهِ
   متحرکِ آن به‌صورتِ بصری اشاره به «قابلیتِ کشیدن/اسکرول» دارد. */
.tb-nav-items-wrap{display:flex;flex-direction:column;flex:1 1 auto;min-width:0;}
.tb-nav-items{display:flex;gap:3px;font-size:10.5px;color:#eaf2fb;flex-wrap:nowrap;min-width:0;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;}
.tb-nav-items::-webkit-scrollbar{display:none;}
.tb-nav-items .tb-navitem{flex-shrink:0;}
.tb-nav-scroll-hint{display:none;height:3px;margin-top:2px;border-radius:2px;flex-shrink:0;
  background:repeating-linear-gradient(90deg,#C0282D 0 9px,rgba(192,40,45,.28) 9px 17px);
  background-size:28px 100%;animation:tbNavScrollHintMove 1.3s linear infinite;}
.tb-nav-scroll-hint.show{display:block;}
@keyframes tbNavScrollHintMove{from{background-position:0 0;}to{background-position:-28px 0;}}
.tb-navitem{display:flex!important;align-items:center;gap:4px;border-radius:8px;color:#fff;font-weight:700;
  background:linear-gradient(180deg,#1E5C99,#0C3260);
  box-shadow:0 2px 4px rgba(0,0,0,.35),inset 0 1px 0 rgba(255,255,255,.25),inset 0 -2px 3px rgba(0,0,0,.35);
  transition:transform .08s ease,box-shadow .15s ease,background .15s ease;
}
@media (hover:hover) and (pointer:fine){
.tb-navitem:hover{background:linear-gradient(180deg,#2B6FB3,#0F3D73);box-shadow:0 3px 7px rgba(0,0,0,.4),inset 0 1px 0 rgba(255,255,255,.3),inset 0 -2px 3px rgba(0,0,0,.3);}
}
.tb-navitem.tb-force-open{background:linear-gradient(180deg,#2B6FB3,#0F3D73);box-shadow:0 3px 7px rgba(0,0,0,.4),inset 0 1px 0 rgba(255,255,255,.3),inset 0 -2px 3px rgba(0,0,0,.3);}
/* توجه: عمداً بدون transform — transform روی این المنت یک stacking context جدید می‌سازد که
   زیرمنوی داخلی (.tb-drop, z-index:400) را در خودش حبس می‌کند؛ نتیجه: در لحظه‌ی mousedown روی
   یک آیتم زیرمنو، نوار قیمت چرخان (که بعداً در DOM می‌آید) رویش قرار می‌گیرد و کلیک گم می‌شود.
   همین باگ باعث «کار نکردن دکمه‌های خدمات/ابزار معاملاتی» در v156 بود. */
.tb-navitem:active{box-shadow:inset 0 2px 4px rgba(0,0,0,.4);}
/* برای مخفی‌کردنِ آیتم‌های نوار بر اساسِ بخش (مثلاً ابزار/تقویم برایِ فناوری اطلاعات): چون
   .tb-navitem خودش display:flex!important دارد، ست‌کردنِ style.display از جاوااسکریپت بی‌اثر
   است؛ به همین دلیل یک کلاسِ اختصاصیِ !important تعریف شده که با toggle آن (نه ست‌کردنِ مستقیمِ
   style.display) واقعاً مخفی می‌شود. */
.tb-nav-hidden{display:none!important;}
/* قدمِ ۲۱۶-ب (مینیمال/تطبیقی‌شدنِ دکمه‌های هدر): نسخه‌ی قبلی این بلوک فقط یک @media
   (min-width:1300px) بود — یعنی اندازه‌ی «خانه»/کاشی‌های منو/دکمه‌های ورود-ثبت‌نام تا ۱۲۹۹px
   کاملاً ثابت می‌ماند، بعد دقیقاً در ۱۳۰۰px با یک جهش ناگهانی بزرگ‌تر می‌شد — یعنی در کلِ بازه‌ی
   میانیِ خیلی رایج (لپ‌تاپ/تبلتِ عریض، ~۶۴۰ تا ۱۳۰۰px) دکمه‌ها با بازوبسته‌شدنِ پنجره هیچ تطبیقی
   نداشتند و صرفاً با همان اندازه‌ی ثابت در انتهای ردیف جمع می‌شدند. اینجا با clamp() هر ۵ مقدار
   (padding/font-size خانه + آیتم‌های ناوبری + دکمه‌های ورود/ثبت‌نام) به یک تابعِ خطیِ پیوسته‌ی
   برحسبِ vw تبدیل شده که در ~640px دقیقاً همان مقدارِ کوچکِ قبلی و در ۱۳۰۰px+ دقیقاً همان مقدارِ
   بزرگِ قبلی را می‌دهد — یعنی در دو سرِ بازه هیچ تفاوتِ ظاهری‌ای با قبل نیست، فقط وسطِ بازه حالا
   نرم/تطبیقی است، نه یک پرشِ ناگهانی. نکته‌ی جانبی: قانونِ قبلیِ `.tb-auth-btn` داخلِ همین
   @media (بدونِ !important) در ترتیبِ فایل قبل از قانونِ پایه‌ی `.tb-auth-btn` (چند خط پایین‌تر،
   خارج از هر @media) قرار داشت؛ چون هر دو تکِ-کلاس‌اند، طبقِ قاعده‌یِ cascade، قانونِ پایه که در
   فایل *بعد* می‌آمد همیشه برنده می‌شد — یعنی بزرگ‌شدنِ دکمه‌های ورود/ثبت‌نام در دسکتاپِ عریض عملاً
   هیچ‌وقت واقعاً اجرا نمی‌شد (باگِ نهفته‌ی از قبل). این‌جا با افزودنِ !important به این دو قانون هم
   (هم‌راستا با روشی که همین فایل از قبل برایِ #tbNavHome/.tb-navitem به‌کار برده) این مشکل هم
   رفع شد. */
.tb-nav-mainrow #tbNavHome{padding:clamp(6px,0.3vw + 4.1px,8px) clamp(12px,0.61vw + 8.1px,16px)!important;font-size:clamp(12.5px,0.23vw + 11.05px,14px)!important;}
.tb-nav-mainrow #tbNavHome i{font-size:clamp(16px,0.3vw + 14.1px,18px)!important;}
.tb-nav-items .tb-navitem{padding:clamp(4px,0.45vw + 1.1px,7px) clamp(5px,0.91vw - 0.8px,11px)!important;font-size:clamp(10.5px,0.23vw + 9.05px,12px)!important;}
.tb-auth-btn{padding:clamp(4px,0.45vw + 1.1px,7px) clamp(9px,0.91vw + 3.2px,15px)!important;font-size:clamp(10.5px,0.23vw + 9.05px,12px)!important;}
.tb-auth-btn i{font-size:clamp(14px,0.3vw + 12.1px,16px)!important;}

/* ---- Auth buttons (header): professional primary/secondary pair ---- */
.tb-auth-buttons{display:flex;align-items:center;gap:6px;flex-shrink:0;order:2;margin-inline-start:auto;}
.tb-auth-btn{display:flex;align-items:center;justify-content:center;gap:4px;font-size:10.5px;padding:4px 9px;border-radius:7px;cursor:pointer;font-family:inherit;font-weight:600;white-space:nowrap;transition:background .15s ease,box-shadow .15s ease,transform .1s ease,border-color .15s ease;}
.tb-auth-btn i{font-size:14px;}
.tb-auth-btn.tb-btn-ghost{background:linear-gradient(135deg,#4ADE80,#22C55E);border:1px solid #22C55E;color:#fff;font-weight:700;box-shadow:0 3px 10px rgba(34,197,94,.4);}
.tb-auth-btn.tb-btn-ghost:hover{box-shadow:0 5px 16px rgba(34,197,94,.55);transform:translateY(-1px);}
.tb-auth-btn.tb-btn-ghost:active{transform:translateY(0) scale(.98);}
.tb-auth-btn.tb-btn-cta{background:linear-gradient(135deg,#d93a3f,#C0282D);border:1px solid #C0282D;color:#fff;font-weight:700;box-shadow:0 3px 10px rgba(192,40,45,.4);}
.tb-auth-btn.tb-btn-cta:hover{box-shadow:0 5px 16px rgba(192,40,45,.55);transform:translateY(-1px);}
.tb-auth-btn.tb-btn-cta:active{transform:translateY(0) scale(.98);}

/* ---- Auth mobile merge (قدمِ جدید): در دسکتاپ این wrapper نامرئی است (کاملاً هم‌رفتار با
   قبل)؛ فقط زیرِ ۶۴۰px به یک دکمه‌ی واحدِ «کاربر» + دراپ‌داونِ ورود/ثبت‌نام تبدیل می‌شود. ---- */
.tb-auth-mobile-wrap{display:contents;}
.tb-auth-user-toggle{display:none;}
@media (max-width:640px){
  .tb-auth-mobile-wrap{
    display:block;position:relative;order:2;flex-shrink:0;margin-inline-start:auto;
  }
  .tb-auth-user-toggle{
    display:flex;align-items:center;justify-content:center;gap:4px;
    font-size:11px;font-weight:700;padding:6px 12px;border-radius:8px;
    cursor:pointer;font-family:inherit;color:#fff;white-space:nowrap;
    background:linear-gradient(135deg,#1789C2,#0F3D73);border:1px solid #0F3D73;
    box-shadow:0 3px 10px rgba(15,61,115,.35);
  }
  .tb-auth-user-toggle i{font-size:15px;}
  .tb-auth-mobile-wrap.tb-open .tb-auth-user-toggle{background:linear-gradient(135deg,#0F3D73,#0a2c54);}
  .tb-auth-mobile-wrap .tb-auth-buttons#tbAuthButtonsInline{
    display:none;position:absolute;z-index:60;top:calc(100% + 6px);left:0;
    flex-direction:column;align-items:stretch;gap:6px;
    background:#fff;border:1px solid #e3e8ee;border-radius:10px;
    padding:8px;min-width:132px;box-shadow:0 10px 26px rgba(15,61,115,.2);
  }
  .tb-auth-mobile-wrap.tb-open .tb-auth-buttons#tbAuthButtonsInline{display:flex;}
  .tb-auth-mobile-wrap .tb-auth-buttons#tbAuthButtonsInline .tb-auth-btn{width:100%;padding:8px 10px;font-size:11.5px;}
}

/* ---- Professional scrolling price ticker (bright, three engagement methods) ---- */
.tb-ticker-bar{background:linear-gradient(180deg,#f9fbfd,#eef3f9);padding:0;overflow:hidden;border-bottom:1px solid #dfe6f0;border-top:1px solid #ffffff;position:relative;height:36px;display:flex;align-items:center;}
.tb-ticker-track{display:inline-flex;align-items:center;white-space:nowrap;will-change:transform;}
.tb-ticker-bar:hover .tb-ticker-track{animation-play-state:paused;}
@keyframes tbMarquee{0%{transform:translateX(0);}100%{transform:translateX(-50%);}}
.tb-tick-item{display:inline-flex;align-items:center;gap:7px;padding:5px 15px;direction:ltr;border-radius:7px;transition:transform .15s ease,box-shadow .15s ease,filter .15s ease;}
.tb-tick-item:hover{transform:scale(1.08);box-shadow:0 3px 10px rgba(15,61,115,.16);filter:brightness(1.04);}
/* three market-group backgrounds, always visible, so the color change itself draws the eye as the ticker scrolls */
.tb-tick-group-crypto{background:#e3f1fd;}
.tb-tick-group-stock{background:#e5f8ec;}
.tb-tick-group-fin{background:#eceef1;}
/* method 1: color-coded category badge for instant visual scanning */
.tb-tick-cat{display:inline-flex;align-items:center;justify-content:center;width:19px;height:19px;border-radius:6px;flex-shrink:0;}
.tb-tick-cat i{font-size:11px;}
.tb-cat-stock{background:#e7f1fb;color:#1789C2;}
.tb-cat-crypto{background:#fdecd8;color:#e08a1e;}
.tb-cat-commodity{background:#fdf3d9;color:#b8860b;}
.tb-cat-forex{background:#e6f7f0;color:#0f9d63;}
.tb-tick-name{color:#425366;font-size:11px;font-weight:700;direction:rtl;}
.tb-tick-price{color:#0F1B2D;font-family:'Consolas','Courier New',monospace;font-size:11.5px;font-weight:700;border-radius:4px;transition:background-color .2s ease;}
.tb-tick-change{font-family:'Consolas','Courier New',monospace;font-size:11px;font-weight:800;border-radius:4px;padding:2px 6px;display:inline-flex;align-items:center;gap:2px;}
.tb-tick-change.up{color:#178a4c;background:rgba(34,197,94,.13);}
.tb-tick-change.down{color:#c0272d;background:rgba(239,68,68,.13);}
.tb-tick-sep{color:#c7d1de;font-size:10px;}
/* generic method: live pulse flash simulating a real-time price tick (all assets) */
.tb-tick-item.tb-flash .tb-tick-price{animation:tbTickFlash .9s ease;}
@keyframes tbTickFlash{0%{background-color:rgba(23,137,194,.28);}100%{background-color:transparent;}}
/* v279: تأییدِ بصریِ «جستجو انجام شد» — با هر بار اجرای جستجوی سراسری، متنِ خلاصه‌ی نتایج یک
   فلشِ آبیِ کوتاه می‌گیرد (دقیقاً هم‌الگو با تیک‌ِ قیمت بالا) تا حتی وقتی نتیجه صفر است، کاربر
   حسِ روشنی از انجام‌شدنِ عملیات داشته باشد. */
#tbSearchSummary.tb-search-flash{animation:tbSearchDoneFlash .9s ease;border-radius:6px;}
@keyframes tbSearchDoneFlash{0%{background-color:rgba(23,137,194,.22);}100%{background-color:transparent;}}

/* ---- Crypto-only: three distinct display methods, shown side-by-side in the ticker so the difference is obvious ---- */
/* crypto method 1: mini 24h sparkline chart next to the name */
.tb-tick-spark{width:28px;height:13px;flex-shrink:0;}
.tb-tick-spark path{fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;}
.tb-tick-spark.up path{stroke:#178a4c;}
.tb-tick-spark.down path{stroke:#c0272d;}
/* crypto method 2: permanent live radar-pulse dot (always "live", not just periodic) */
.tb-tick-live-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0;position:relative;}
.tb-tick-live-dot.up{background:#22c55e;}
.tb-tick-live-dot.down{background:#ef4444;}
.tb-tick-live-dot::after{content:'';position:absolute;inset:0;border-radius:50%;background:inherit;animation:tbLiveDotPulse 1.6s ease-out infinite;}
@keyframes tbLiveDotPulse{0%{opacity:.7;transform:scale(1);}100%{opacity:0;transform:scale(2.8);}}
/* crypto method 3: momentum-intensity bar under the item, length/color = strength of move */
.tb-tick-item.tb-tick-momentum{position:relative;padding-bottom:3px;}
.tb-tick-momentum-bar{position:absolute;bottom:-1px;right:8px;left:8px;height:2.5px;border-radius:3px;background:#e5e9ef;overflow:hidden;}
.tb-tick-momentum-bar i{display:block;height:100%;border-radius:3px;}
.tb-tick-momentum-bar i.up{background:linear-gradient(90deg,#86efac,#22c55e);}
.tb-tick-momentum-bar i.down{background:linear-gradient(90deg,#fca5a5,#ef4444);}
.tb-tick-method-tag{font-size:8.5px;font-weight:700;color:#98a4b0;background:#f2f4f7;border-radius:4px;padding:1px 5px;direction:rtl;flex-shrink:0;}

/* ---- Market session clock widget: separated 3D tiles with blue borders ---- */
.msw{width:100%;border-radius:10px;padding:1px;background:#dbe4ee;box-shadow:0 4px 16px rgba(20,40,70,0.10);}
.msw-inner{position:relative;width:100%;background:#fff;border-radius:9px;overflow:visible;direction:rtl;}
.msw-timeline{position:relative;height:18px;display:flex;flex-direction:row;background:#fff;border-bottom:1px solid #e3e7ec;border-radius:9px 9px 0 0;overflow:hidden;}
.msw-tick{position:relative;flex:1 0 0;}
.msw-tick::after{content:'';position:absolute;bottom:0;right:0;width:1.3px;height:3px;background:#111318;}
.msw-tick.hour::after{height:5px;}
.msw-tick.major::after{height:7px;}
.msw-tick-label{position:absolute;top:1px;right:-6.5px;font-size:6.8px;font-weight:700;color:#111318;white-space:nowrap;direction:ltr;}
.msw-tick-label.tb-edge-right{right:1px;}
.msw-tick-label.tb-edge-left{right:auto;left:1px;}
.msw-boxes{display:flex;gap:5px;padding:6px;background:#e7eff8;border-radius:0 0 9px 9px;}
.msw-box{position:relative;flex:1;display:flex;align-items:center;justify-content:center;gap:6px;min-height:34px;border:1.5px solid #9dc3e8;border-radius:8px;background:linear-gradient(180deg,#ffffff 0%,#eef5fc 100%);box-shadow:0 2px 5px rgba(20,40,70,0.12), inset 0 1px 0 rgba(255,255,255,0.9);transition:background .25s ease, transform .25s ease, box-shadow .25s ease, border-color .25s ease;cursor:default;transform-origin:center bottom;}
.msw-box:hover{transform:scale(1.18);z-index:30;box-shadow:0 8px 20px rgba(20,40,70,0.22), inset 0 1px 0 rgba(255,255,255,0.9);border-radius:8px;}
.msw-box.msw-open{border-color:#2e8fe0;background:linear-gradient(180deg,#eaf6ff 0%,#cfe9ff 100%);box-shadow:0 0 16px 4px rgba(46,143,224,0.45), inset 0 1px 0 rgba(255,255,255,0.9);}
.msw-box.msw-open:hover{box-shadow:0 0 20px 6px rgba(46,143,224,0.55), 0 8px 20px rgba(20,40,70,0.2), inset 0 1px 0 rgba(255,255,255,0.9);}
.msw-status-dot{position:absolute;top:5px;left:8px;width:7px;height:7px;border-radius:50%;background:#c7ccd3;}
.msw-status-dot.open{background:#2e8fe0;box-shadow:0 0 0 4px rgba(46,143,224,0.28);}
.msw-name{font-size:12px;font-weight:800;color:#1a2733;letter-spacing:.2px;}
.msw-clock{font-family:'Consolas','Courier New',monospace;font-size:14px;font-weight:800;color:#0b0e14;direction:ltr;transition:font-size .25s ease;}
.msw-box:hover .msw-clock{font-size:18px;}
.msw-countdown{display:none;position:absolute;inset:0;background:#fff;border-radius:7px;padding:4px 8px;font-size:11px;color:#33475b;white-space:normal;box-shadow:0 6px 16px rgba(20,40,70,0.18);z-index:40;text-align:center;line-height:1.5;align-items:center;justify-content:center;}
.msw-countdown b{color:#1a6fc0;}
.msw-countdown.tb-opens b{color:#b45309;}
.msw-box:hover .msw-countdown{display:flex;}
.msw-box:hover .msw-name{font-size:13px;}
.msw-bar-track{position:absolute;bottom:0;left:0;right:0;height:5px;background:rgba(0,0,0,0.06);border-radius:0 0 6px 6px;overflow:hidden;}
.msw-bar-fill{position:absolute;top:0;left:0;height:100%;width:0%;transition:width 1s linear, background 1s linear;}
.msw-marker{position:absolute;top:0;bottom:0;width:2px;background:#e5342c;box-shadow:0 0 6px rgba(229,52,44,0.5);z-index:50;pointer-events:none;transition:left 1s linear;}

/* ==================== Auth modal: ورود / ثبت‌نام ==================== */
/* قدمِ ۲۸۷ — رفعِ باگِ واقعی (گزارشِ حبیب): این مودال (ثبت‌نام/بروکر) با z-index:1000
   پایین‌تر از درویرِ موبایلِ tbmv2 (.tbmv2-drawer=9999 و .tbmv2-backdrop=9997) بود؛
   وقتی از داخلِ همان درویر باز می‌شد، زیرِ آن گم/غیرقابل‌کلیک می‌ماند. اکنون بالاتر از
   کلِ سیستمِ درویر (اما هنوز زیرِ z-index:99999 مودالِ زوم‌تصویرِ مدرسه، که یک استثنایِ
   تک‌منظوره است) قرار می‌گیرد؛ ریشه‌ی اصلیِ باگ (نبستنِ درویر هنگامِ بازشدنِ این مودال)
   هم جداگانه در register-modal.js رفع شد — این تغییرِ z-index یک لایه‌ی اطمینانِ اضافه است.*/
.tb-modal-overlay{display:none;position:fixed;inset:0;background:rgba(10,20,35,.55);backdrop-filter:blur(2px);z-index:10050;align-items:center;justify-content:center;padding:16px;}
.tb-modal-overlay.tb-open{display:flex;}
.tb-modal{position:relative;width:100%;max-width:380px;max-height:92vh;overflow-y:auto;background:#fff;border-radius:16px;padding:22px 22px 26px;box-shadow:0 20px 60px rgba(10,20,35,.35);direction:rtl;font-family:'Vazirmatn',sans-serif;animation:tbModalIn .22s ease;}
.tb-modal.tb-modal-wide{max-width:520px;}
@keyframes tbModalIn{from{opacity:0;transform:translateY(10px) scale(.98);}to{opacity:1;transform:translateY(0) scale(1);}}
/* قدمِ ۲۳۱ — طبقِ گزارشِ صریحِ حبیب («ضربدر پایین‌تر بیاد تا راحت کلیک بشه، کمی بزرگ‌تر»):
   top از ۱۴px به ۲۴px (پایین‌تر، دورتر از لبه‌ی بالایِ صفحه/نوارِ آدرسِ مرورگر که در
   موبایل به آن نزدیک بود) و اندازه از ۳۴px به ۴۲px افزایش یافت. دکمه از قبل (قدمِ ۲۲۹)
   هم با bind جاوااسکریپتِ اصلی و هم با onclick اینلاینِ مستقل فعال/کلیک‌پذیر بود؛ همان دو
   لایه دست‌نخورده ماند. */
.tb-modal-close{position:absolute;top:24px;left:20px;width:42px;height:42px;border-radius:50%;border:1px solid #C0282D;background:#C0282D;color:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:19px;transition:background .15s,transform .15s;z-index:20;box-shadow:0 3px 10px rgba(192,40,45,.45);}
.tb-modal-close:active{transform:scale(.92);}
.tb-modal-close:hover{background:#9c2024;}
#tbToast{position:fixed;bottom:100px;left:50%;transform:translateX(-50%) translateY(14px);background:#0F1B2D;color:#fff;padding:11px 20px;border-radius:11px;font-size:12.5px;font-family:'Vazirmatn',sans-serif;box-shadow:0 10px 28px rgba(0,0,0,.32);z-index:9500;opacity:0;pointer-events:none;transition:opacity .25s,transform .25s;max-width:300px;text-align:center;line-height:1.7;}
#tbToast.show{opacity:1;transform:translateX(-50%) translateY(0);}
/* نشانگر قفل روی آیتم‌های «خدمات» — یادآوری بصری که این بخش نیاز به ورود دارد */
.tb-svc-lock{font-size:10px;color:#1789C2;margin-left:6px;}
.tb-auth-head{display:flex;flex-direction:column;align-items:center;gap:12px;margin-bottom:18px;}
.tb-auth-logo{width:52px;height:52px;display:flex;align-items:center;justify-content:center;}
.tb-auth-logo img{width:100%;height:100%;object-fit:contain;filter:drop-shadow(0 2px 6px rgba(0,0,0,.25));}
.tb-auth-tabs{display:flex;background:#f2f4f7;border-radius:10px;padding:3px;width:100%;}
.tb-auth-tab{flex:1;border:none;background:transparent;padding:8px 0;font-size:13px;font-weight:700;color:#7a8794;border-radius:8px;cursor:pointer;font-family:inherit;transition:all .15s;}
.tb-auth-tab.active{background:#fff;color:#0F3D73;box-shadow:0 2px 6px rgba(15,61,115,.15);}
.tb-auth-panel{display:none;}
.tb-auth-panel.active{display:block;animation:tbPanelIn .2s ease;}
@keyframes tbPanelIn{from{opacity:0;transform:translateX(6px);}to{opacity:1;transform:translateX(0);}}
.tb-auth-subtitle{font-size:12px;color:#6b7684;line-height:1.9;margin-bottom:14px;text-align:center;}
.tb-method-switch{display:flex;gap:6px;margin-bottom:14px;}
.tb-method-btn{flex:1;border:1px solid #e3e7ec;background:linear-gradient(180deg,#ffffff,#f4f6f8);padding:9px 0;font-size:12px;border-radius:9px;cursor:pointer;color:#5b6b7c;font-family:inherit;font-weight:700;transition:all .15s;box-shadow:0 1px 0 rgba(255,255,255,.8) inset,0 2px 5px rgba(20,30,50,.08);}
.tb-method-btn:hover{transform:translateY(-1px);box-shadow:0 1px 0 rgba(255,255,255,.8) inset,0 4px 10px rgba(20,30,50,.12);}
.tb-method-btn:active{transform:translateY(1px);box-shadow:0 1px 2px rgba(20,30,50,.12) inset;}
.tb-method-btn.active{border-color:#1789C2;background:linear-gradient(180deg,#2AA5E8,#0F7FC2);color:#fff;box-shadow:0 1px 0 rgba(255,255,255,.35) inset,0 4px 12px rgba(15,127,194,.4);transform:translateY(-1px);}
.tb-btn-primary{width:100%;background:linear-gradient(180deg,#D6423D,#C0282D);color:#fff;border:none;padding:12px 0;font-size:13.5px;font-weight:800;border-radius:10px;cursor:pointer;font-family:inherit;transition:all .12s;box-shadow:0 1px 0 rgba(255,255,255,.25) inset,0 5px 14px rgba(192,40,45,.35);}
.tb-btn-primary:hover{background:linear-gradient(180deg,#E0524D,#A3201F);transform:translateY(-1px);box-shadow:0 1px 0 rgba(255,255,255,.25) inset,0 7px 18px rgba(192,40,45,.45);}
.tb-btn-primary:active{transform:translateY(1px);box-shadow:0 2px 6px rgba(192,40,45,.3) inset;}
.tb-field{margin-bottom:12px;}
.tb-field label{display:block;font-size:11.5px;font-weight:700;color:#33475b;margin-bottom:5px;}
.tb-optional{font-weight:400;color:#98a4b0;}
.tb-input-wrap{display:flex;align-items:center;gap:8px;border:1px solid #e3e7ec;border-radius:9px;padding:0 11px;background:#fafbfc;transition:border-color .15s,background .15s;}
.tb-input-wrap:focus-within{border-color:#1789C2;background:#fff;box-shadow:0 0 0 3px rgba(23,137,194,.12);}
.tb-input-wrap i:first-child{color:#9aa7b5;font-size:15px;}
.tb-input-wrap input{border:none;background:transparent;outline:none;flex:1;padding:9px 0;font-size:13px;font-family:'Vazirmatn',sans-serif;color:#1a2733;min-width:0;}
.tb-input-wrap input::placeholder{color:#b7c0cb;font-size:12px;}
/* v322: طبق درخواست کاربر، استایل سبزِ برجسته‌ی فرم ثبت‌نام حذف شد و فرم ثبت‌نام دقیقاً
   همان ظاهر استاندارد فرم ورود (کادر خاکستری ساده + آبی #1789C2 هنگام فوکوس) را می‌گیرد. */
.tb-pass-toggle{cursor:pointer;color:#9aa7b5;flex-shrink:0;display:flex;align-items:center;transition:color .15s;}
.tb-pass-toggle:hover{color:#1789C2;}
.tb-field.tb-error .tb-input-wrap{border-color:#e5342c;background:#fff6f6;}
.tb-field-error{font-size:10.5px;color:#e5342c;margin-top:4px;display:none;}
.tb-field.tb-error .tb-field-error{display:block;}
.tb-row-between{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;flex-wrap:wrap;gap:8px;}
.tb-checkbox{display:flex;align-items:center;gap:6px;font-size:11.5px;color:#5b6b7c;cursor:pointer;}
.tb-checkbox input{width:14px;height:14px;accent-color:#1789C2;cursor:pointer;flex-shrink:0;}
.tb-link-sm{font-size:11.5px;color:#1789C2;text-decoration:none;font-weight:600;}
.tb-link-sm:hover{text-decoration:underline;}
.tb-btn-primary:active{transform:scale(.98);}
.tb-btn-primary:disabled{background:#e3a5a5;cursor:not-allowed;}
.tb-divider{display:flex;align-items:center;gap:10px;margin:16px 0;color:#b7c0cb;font-size:11px;}
.tb-divider::before,.tb-divider::after{content:'';flex:1;height:1px;background:#eceff3;}
.tb-btn-social{width:100%;display:flex;align-items:center;justify-content:center;gap:8px;border:1px solid #e3e7ec;background:#fff;padding:9px 0;border-radius:9px;font-size:12.5px;font-weight:600;color:#33475b;cursor:pointer;font-family:inherit;transition:background .15s;}
.tb-btn-social:hover{background:#fafbfc;}
.tb-btn-social svg{width:17px;height:17px;}
.tb-switch-note{text-align:center;font-size:12px;color:#6b7684;margin-top:16px;}
.tb-switch-note a{color:#C0282D;font-weight:700;text-decoration:none;cursor:pointer;}
.tb-switch-note a:hover{text-decoration:underline;}
.tb-terms{align-items:flex-start;margin:8px 0 4px;line-height:1.7;}
.tb-interest-chip{display:flex;align-items:center;gap:5px;font-size:11.5px;background:#f5f6f7;border:1px solid #e2e5e9;border-radius:20px;padding:5px 12px;cursor:pointer;color:#425366;user-select:none;transition:background .15s,border-color .15s,color .15s;}
.tb-interest-chip input{margin:0;}
.tb-interest-chip:has(input:checked){background:#e7f1fb;border-color:#1789C2;color:#0F3D73;font-weight:700;}
.tb-terms input{margin-top:2px;}
.tb-terms a{color:#1789C2;text-decoration:none;font-weight:600;}
.tb-pass-meter{height:4px;border-radius:2px;background:#eceff3;margin-top:6px;overflow:hidden;}
.tb-pass-meter span{display:block;height:100%;width:0%;background:#e5342c;transition:width .2s ease,background .2s ease;}
.tb-pass-meter-label{font-size:10px;color:#98a4b0;margin-top:3px;}
.tb-otp-boxes{display:flex;gap:8px;justify-content:center;direction:ltr;margin:6px 0 4px;}
.tb-otp-boxes input{width:44px;height:52px;text-align:center;font-size:20px;font-weight:800;border:1.5px solid #e3e7ec;border-radius:10px;font-family:'Consolas','Courier New',monospace;color:#0F3D73;transition:border-color .15s;}
.tb-otp-boxes input:focus{outline:none;border-color:#1789C2;box-shadow:0 0 0 3px rgba(23,137,194,.12);}
.tb-otp-resend{text-align:center;font-size:11.5px;color:#8794a1;margin-top:14px;}
.tb-otp-resend b{color:#1a2733;direction:ltr;display:inline-block;}
.tb-otp-resend a{color:#C0282D;font-weight:700;text-decoration:none;cursor:pointer;}
.tb-success-box{text-align:center;padding:6px 0 20px;}
.tb-success-icon{font-size:52px;color:#22c55e;margin-bottom:10px;}
.tb-success-title{font-size:15px;font-weight:800;color:#1a2733;margin-bottom:6px;}
.tb-success-sub{font-size:12px;color:#6b7684;line-height:1.8;}
.tb-shake{animation:tbShake .35s ease;}
@keyframes tbShake{0%,100%{transform:translateX(0);}25%{transform:translateX(-5px);}75%{transform:translateX(5px);}}

/* ---- STICKY: فقط ردیف ساعت‌های بازار + ردیف منو + نوار قیمت فریز می‌مانند؛ هدر بالا (لوگو/جستجو) در اسکرول عادی جابه‌جا می‌شود ---- */
/* نشستِ ۱۸ آگوست (بازبینیِ درخواستِ قبلی): رفعِ گزارشِ تازه — «هدر در کاشیِ خانه نامیزان است».
   علت: تکنیکِ full-bleed زیر (۱۸ آگوست، نسخه‌ی قبلی) نوارِ منو/قیمت را همیشه ۱۰۰vw (لبه‌به‌لبه)
   می‌کرد، در حالی‌که ردیفِ بالای هدر (لوگو/جستجو، بیرونِ همین ناحیه) و بقیه‌ی محتوایِ سایت هنوز
   محدودِ همان کانتینرِ ثابتِ #tb-root (max-width:1320px) بودند — یعنی خودِ هدر دو عرضِ متفاوت
   (ردیفِ بالا محدود، ردیفِ نوار/قیمت تمام‌عرض) در کنارِ هم داشت و «پله»ای/نامیزان به نظر می‌رسید.
   طبقِ درخواستِ صریحِ کاربر («هدر هم‌اندازه‌ی عرضِ صفحه‌ی اصلیِ فیکس شود»)، اکنون این ناحیه هم
   دقیقاً همان عرضِ ثابتِ #tb-root (۱۳۲۰px، وسط‌چین) را می‌گیرد — چه در حالتِ عادی چه چسبان —
   نه full-bleed. */
#tb-sticky-zone{
  position:relative;
  background:#fff;
}
/* قدمِ ۱۹۶ — ریشه‌یِ واقعیِ چشمک‌زدنِ زیرمنو پیدا شد: transform:translateX(-50%) که این‌جا برای
   وسط‌چین‌کردنِ نوارِ چسبان استفاده می‌شد، طبقِ مشخصاتِ CSS (CSS Transforms Level 1، بخشِ
   Establishing a containing block) خودِ #tb-sticky-zone را به «containing block» برای تمامِ
   فرزندانِ position:fixed اش تبدیل می‌کرد — یعنی دقیقاً همان تله‌ای که در کامنتِ بالای
   .tb-navitem (خط ۳۰۲) از قبل درباره‌اش هشدار داده شده بود، این‌جا (در یک والدِ بالاتر، خودِ
   ناحیه‌ی چسبان) بدونِ توجه دوباره رخ داده بود. نتیجه: .tb-drop که با JS (positionDropForMobile)
   position:fixed می‌گرفت و top/left اش را با getBoundingClientRect (مختصاتِ واقعیِ ویوپورت)
   محاسبه می‌کرد، در حالتِ چسبان (tb-pinned، یعنی دقیقاً همان حالتی که کاربر در ویدیو روی صفحه‌ی
   «خدمات» با آن مواجه بود) دیگر نسبت به ویوپورت نمایش داده نمی‌شد، بلکه نسبت به جعبه‌ی این ناحیه
   ترنسفورم‌شده محاسبه می‌شد — یعنی مختصاتِ محاسبه‌شده و مختصاتِ واقعاً رندرشده با هم فرق داشتند و
   زیرمنو در نقطه‌ی نادرست/متغیر ظاهر می‌شد، دقیقاً همان لرزش/چشمک‌زدنِ گزارش‌شده.
   رفعِ ریشه‌ای: همان وسط‌چینیِ بصری (عرضِ ۱۰۰٪ تا سقفِ ۱۳۲۰px، وسط) بدونِ استفاده از transform —
   با left:0;right:0;margin-inline:auto — به دست می‌آید؛ این هیچ containing block جدیدی نمی‌سازد،
   پس position:fixed زیرمنو در هر دو حالتِ چسبان/غیرچسبان واقعاً نسبت به ویوپورت محاسبه می‌شود. */
#tb-sticky-zone.tb-pinned{
  position:fixed;
  top:0;
  left:0;
  right:0;
  width:100%;
  max-width:1320px;
  margin-left:auto;
  margin-right:auto;
  z-index:200;
  box-shadow:0 3px 16px rgba(15,61,115,.18);
}
#tb-sticky-spacer{display:block;height:0;}
#tbCalMsw{}

/* ---- Economic Calendar Page ---- */
#tbPageCalendar{display:none;}

/* ---- Page toolbar: بستن (×) و بازگشت — روی همه صفحات تمام‌عرضی که از خانه باز می‌شوند ---- */
.tb-page-toolbar{position:relative;z-index:2;display:flex;align-items:center;justify-content:flex-end;padding:8px 16px;background:rgba(255,255,255,.9);backdrop-filter:blur(3px);border-bottom:1px solid #eceff3;}
.tb-page-back-btn{display:flex;align-items:center;gap:6px;background:none;border:none;color:#0F3D73;font-size:12.5px;font-weight:700;cursor:pointer;font-family:inherit;padding:6px 10px;border-radius:8px;transition:background .15s;}
.tb-page-back-btn:hover{background:#eef2f7;}
.tb-page-back-btn i{font-size:15px;}
.tb-page-close-btn{width:30px;height:30px;border-radius:50%;border:1px solid #C0282D;background:#C0282D;color:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:14px;transition:background .15s,color .15s;flex-shrink:0;box-shadow:0 2px 8px rgba(192,40,45,.4);}
.tb-page-close-btn:hover{background:#9c2024;color:#fff;}
.tb-x-mark{font-size:19px;font-weight:700;line-height:1;color:#fff;font-family:Arial,Tahoma,sans-serif;transform:translateY(-1px);}
#tbPageCalendar.tb-active{display:block;}

.tb-cal-wrap{display:flex;flex-direction:column;gap:0;min-height:600px;}

/* ---- Interest Rate bar: now horizontal, sits above the calendar list ---- */
.tb-ir-sidebar{
  width:100%;
  box-sizing:border-box;
  flex-shrink:0;
  background:#e3f4fd;
  border:3px solid #c0282d;
  border-radius:8px;
  padding:10px 16px;
  font-size:11px;
  direction:rtl;
  display:flex;
  align-items:center;
  gap:14px;
  flex-wrap:nowrap;
  /* v229: رفعِ نهاییِ باگِ «فاصله‌ی خالی بینِ نوارِ ساعت‌های جهانی و نوارِ نرخِ بهره» — هم دسکتاپ
     هم موبایل. تلاشِ v227 (کامنتِ قبلی همین‌جا) ادعا می‌کرد این نوار را sticky کرده و top اش را
     با تابعِ JS به‌نامِ syncCalMswOffset هم‌گام با #tbCalMsw نگه می‌دارد — اما آن تابع هرگز نوشته
     نشد (فقط در همین کامنت اشاره شده بود، جایی در کدبیس صدا زده نمی‌شد). نتیجه: این نوار sticky
     بدونِ top بود (بی‌اثر طبقِ اسپکِ CSS) و #tbCalMsw هم sticky top:0 بود؛ ترکیبِ این دو، بسته به
     مرورگر/اسکرول، فاصله/هم‌پوشانیِ نامنظم ایجاد می‌کرد. راه‌حل: هر دو نوار (بالا، #tbCalMsw) به
     جریانِ عادیِ صفحه (بدونِ sticky) برگشتند — هم‌فلسفه با تصمیمِ قبلی دربابِ حذفِ هدرِ چسبانِ
     سراسری؛ دیگر نیازی به هم‌گام‌سازیِ JS نیست. */
}
.tb-ir-title{font-weight:800;color:#fff;font-size:10.5px;white-space:nowrap;background:linear-gradient(135deg,#c0282d,#e35257);border:1.5px solid #8f1d21;border-radius:8px;padding:4px 9px;margin-left:6px;flex-shrink:0;position:sticky;right:0;z-index:2;box-shadow:2px 0 8px rgba(192,40,45,.3);}
/* قدمِ ۲۹۴: موتورِ چرخانِ خودکارِ قدمِ ۲۹۰ حذف شد (طبقِ درخواستِ صریحِ حبیب). حالا نوار با
   ترنزیشنِ نرمِ CSS به هم‌گام‌سازیِ خودکار (با ساعتِ کشورها) جابه‌جا می‌شود، و کاربر هم
   می‌تواند با موس/انگشت آن را بکشد (cursor:grab). حینِ کشیدن (کلاسِ tb-ir-dragging) ترنزیشن
   موقتاً خاموش می‌شود تا حرکت با انگشت/موس کاملاً همراستا و بی‌تأخیر باشد. */
.tb-ir-mask{flex:1;min-width:0;overflow:hidden;cursor:grab;touch-action:none;}
.tb-ir-track{display:flex;align-items:center;gap:5px;white-space:nowrap;will-change:transform;transition:transform .9s cubic-bezier(.22,.8,.25,1);}
.tb-ir-track.tb-ir-dragging{transition:none;}
.tb-ir-track.tb-ir-no-anim{transition:none;}
.tb-ir-mask:active{cursor:grabbing;}
/* قدمِ ۳۲۱ — رفعِ گزارشِ صریحِ حبیب: برچسبِ «نرخ بهره» داخلِ همان ردیفِ افقی، عرضِ
   واقعیِ نوارِ قابلِ‌کشیدن را کم می‌کرد و باعث می‌شد عرضِ این ردیف با عرضِ ردیفِ ساعتِ
   جهانی (بالاترش، بدونِ چنین برچسبی) یکی نباشد — دقیقاً همان چیزی که تراز/هم‌مرکزیِ
   «ارز رو‌به‌رویِ ساعتِ کشورش» را در موبایل به‌هم می‌زد. در دسکتاپ مشکلی نبود (فضایِ
   کافی هست)، پس این تغییر فقط زیرِ ۶۴۰px موبایل اعمال می‌شود: ردیف از افقی (title+mask
   کنارِ‌هم) به عمودی (title بالا، مثل یک زیرعنوانِ کوچک؛ mask زیرش با عرضِ کامل) تغییر
   می‌کند. این‌طوری نوارِ نرخِ بهره دقیقاً هم‌عرضِ ردیفِ ساعتِ جهانی می‌شود و
   getBoundingClientRect در تابعِ syncToMarket بدونِ هیچ افستِ اضافه‌ای محاسبه می‌کند —
   منطقِ خودِ سینک/کلمپ/تایمرِ ۳۰ ثانیه‌ای دست‌نخورده ماند، فقط هندسه/عرضِ ظرف عوض شد. */
/* قدمِ ۳۲۲ (درخواستِ صریحِ حبیب): برچسبِ «نرخ بهره» فقط در موبایل کاملاً حذف شد
   (`display:none`) — در دسکتاپ دست‌نخورده ماند. چون این برچسب تنها عضوِ دیگرِ
   ردیف (کنارِ mask) بود، حذفش هیچ اثری رویِ محاسبه‌ی هم‌ترازیِ syncToMarket ندارد
   (آن تابع فقط رویِ خودِ mask/items کار می‌کند، نه title). */
@media (max-width:640px){
  .tb-ir-sidebar{flex-direction:column;align-items:stretch;gap:6px;padding:8px 10px;}
  .tb-ir-title{display:none;}
  .tb-ir-mask{width:100%;}
}
.tb-ir-items{display:flex;align-items:center;gap:5px;flex-wrap:nowrap;flex-shrink:0;flex-grow:1;justify-content:space-between;}
/* قدمِ ۲۹۷: رفعِ خالی‌ماندنِ انتهایِ نوار — items پیش‌تر فقط به‌اندازه‌ی محتوایِ خودش عرض
   می‌گرفت (نه flex-grow) و درونِ tb-ir-track (که خودش عرضِ کاملِ ماسک را دارد) در ابتدایِ
   ردیف می‌نشست و باقیِ ماسک خالی می‌ماند. flex-grow:1 باعث می‌شود items کلِ عرضِ ماسک را
   بگیرد؛ justify-content:space-between پیل‌ها را در همان عرض پخش می‌کند. وقتی تعدادِ
   پیل‌ها آن‌قدر زیاد باشد که عرضِ طبیعی‌شان از ماسک بیشتر شود (حالتِ overflow، مثلِ موبایل)،
   space-between به‌طورِ طبیعی بی‌اثر می‌شود (فضایِ اضافه‌ای برایِ پخش‌کردن وجود ندارد) و
   رفتارِ قبلی (نوارِ قابلِ‌درگ/هم‌گام با ساعتِ کشورها) دست‌نخورده می‌ماند.*/
/* قدمِ ۳۲۲ (درخواستِ صریحِ حبیب، گزینه‌یِ ب — «بشه همه ارزها را دید، محدودیت نباشه»):
   این override عمداً *بعدِ* قاعده‌یِ بی‌قیدوشرطِ بالا آمده (نه داخلِ همان بلاکِ مدیاکوئریِ
   بالاترِ صفحه) — چون در CSS وقتی دو انتخاب‌گرِ یکسان با هم‌ارزیِ خاص‌بودگی وجود دارند،
   ترتیبِ نوشتار در فایل تعیین‌کننده است، نه اینکه کدام داخلِ مدیاکوئری است؛ اگر این‌جا
   *قبل* از قاعده‌یِ بالا نوشته می‌شد، همان قاعده‌یِ بی‌قیدوشرط (که بعدش می‌آمد) رویِ آن
   برنده می‌شد و در موبایل هم بی‌اثر می‌ماند. flex-grow:1 + justify-content:space-between
   در حالتِ overflow واقعیِ موبایل (که محتوا نه جا می‌شود و نه قرار است پخش شود) یک
   لایه‌یِ اضافی/مبهم به محاسبه‌یِ عرضِ واقعیِ items در clampPos/minPos اضافه می‌کرد.
   اینجا در موبایل خنثی شدند: items فقط به‌اندازه‌یِ محتوایِ خودش عرض می‌گیرد و از همان
   ابتدا می‌چسبد؛ کمی padding هم اضافه شد تا پیلِ اول/آخر درست به لبه‌یِ overflow:hidden
   نچسبد و در دو سرِ درگ به‌طورِ کامل دیده شود. */
@media (max-width:640px){
  .tb-ir-items{flex-grow:0;justify-content:flex-start;padding:0 3px;}
}
.tb-ir-item{display:flex;align-items:center;gap:4px;padding:3px 6px;border:1.5px solid #9dc3e8;border-radius:999px;background:linear-gradient(180deg,#ffffff 0%,#eef5fc 100%);flex-shrink:0;white-space:nowrap;transition:background .25s ease,box-shadow .25s ease,border-color .25s ease;}
.tb-ir-item.ir-open{border-color:#2e8fe0;background:linear-gradient(180deg,#eaf6ff 0%,#cfe9ff 100%);box-shadow:0 0 10px 2px rgba(46,143,224,.4);}
.tb-ir-dot{width:6px;height:6px;border-radius:50%;background:#c7ccd3;flex-shrink:0;transition:background .25s ease,box-shadow .25s ease;}
.tb-ir-dot.open{background:#2e8fe0;box-shadow:0 0 0 3px rgba(46,143,224,.28);}
.tb-ir-cur{font-weight:800;color:#1a2733;font-size:9.5px;background:#e8eef7;border-radius:4px;padding:1px 4px;}
.tb-ir-rate{font-family:'Consolas','Courier New',monospace;font-size:10px;color:#0b9e5e;font-weight:700;}
.tb-ir-rate.high{color:#c0282d;}

/* ---- Calendar main area ---- */
.tb-cal-main{flex:1;padding:14px 16px;}
.tb-cal-header{display:flex;align-items:center;gap:10px;margin-bottom:12px;flex-wrap:wrap;justify-content:space-between;}

/* ---- قدم ۱۶۲: دکمه/جعبه‌ی کدِ امبدِ ویجتِ تقویمِ بورس ---- */
.tb-bcal-embed-btn{display:inline-flex;align-items:center;gap:6px;background:#fff;border:1px solid #cfd8e3;color:#1789C2;font-size:11.5px;font-weight:600;padding:6px 12px;border-radius:20px;cursor:pointer;white-space:nowrap;transition:background .15s,color .15s;}
.tb-bcal-embed-btn:hover{background:#1789C2;color:#fff;border-color:#1789C2;}
.tb-bcal-embed-box{width:100%;background:#f6f9fc;border:1px solid #d9e4ee;border-radius:10px;padding:12px 14px;margin:-4px 0 14px;}
.tb-bcal-embed-box p{margin:0 0 8px;font-size:11.5px;color:#3b4656;line-height:1.8;}
.tb-bcal-embed-box textarea{width:100%;min-height:70px;direction:ltr;font-family:'Consolas','Courier New',monospace;font-size:11px;color:#17324e;background:#fff;border:1px solid #cfd8e3;border-radius:8px;padding:8px;resize:vertical;}
.tb-cal-sector-notice{display:flex;align-items:center;gap:14px;background:#EEF6FC;border:1px solid #cfe4f2;border-radius:12px;padding:14px 16px;margin-bottom:16px;flex-wrap:wrap;}
.tb-cal-sector-notice>i{font-size:26px;color:#1789C2;flex:0 0 auto;}
.tb-cal-sector-notice>div{flex:1;min-width:200px;}
.tb-cal-sector-notice>div>b{display:block;font-size:12.5px;color:#0F3D73;margin-bottom:3px;}
.tb-cal-sector-notice>div>p{font-size:11.5px;color:#3b4656;margin:0;line-height:1.8;}
.tb-cal-sector-notice>a{flex:0 0 auto;display:inline-flex;align-items:center;gap:6px;background:#1789C2;color:#fff;font-size:12px;font-weight:700;padding:9px 16px;border-radius:8px;text-decoration:none;white-space:nowrap;}
.tb-cal-title{font-size:15px;font-weight:800;color:#0F3D73;flex:1;}
.tb-cal-filter{display:flex;gap:6px;flex-wrap:wrap;}
.tb-cal-filter-btn{border:1px solid #dde4ef;background:#fafbfc;color:#5b6b7c;font-size:11px;font-weight:700;padding:5px 12px;border-radius:999px;cursor:pointer;font-family:inherit;transition:all .15s;display:flex;align-items:center;gap:4px;}
.tb-cal-filter-btn.active{border-color:#1789C2;background:#eaf6ff;color:#0F3D73;}
.tb-cal-filter-btn .imp-dot{width:16px;height:16px;border-radius:50%;display:inline-block;}
/* قدمِ ۲۹۰ (طبقِ درخواستِ حبیب، آیتمِ ۶): ریشه‌ی باگِ «رنگ‌بندیِ اهمیت جلوی هر خبر
   غیرفعاله» پیدا شد — کلاس‌هایِ رنگیِ .imp-low/.imp-med/.imp-high فقط background-color
   می‌دادند، اما هیچ قاعده‌ی base‌ای برایِ اندازه/شکلِ خودِ نقطه (.imp-dot) بیرون از
   اسکوپِ «.tb-cal-filter-btn .imp-dot» وجود نداشت. نتیجه: نقطه‌ی داخلِ دکمه‌های فیلتر
   (بالا/چون اسکوپ‌شده) رنگی دیده می‌شد، ولی همین نقطه در سلولِ «اهمیت»ِ هر ردیفِ جدولِ
   رویدادها (`<td><span class="imp-dot imp-...">`, خطِ ~۱۶۵ در page-courses... در واقع
   page-calendar.php) بدونِ عرض/ارتفاع رندر می‌شد یعنی عملاً نامرئی بود — دقیقاً همان
   «فقط عنوان هستن» که حبیب گزارش داد. یک قاعده‌ی base مستقل از اسکوپ اضافه شد تا این
   نقطه هرجا که استفاده شود (چه در دکمه‌ی فیلتر، چه در سلولِ جدول) اندازه/شکلِ درست
   داشته باشد؛ اندازه‌ی داخلِ دکمه‌ی فیلتر هم‌چنان با قاعده‌ی اختصاصیِ خودش (که بعد از این
   می‌آید و override می‌کند) ۱۶px می‌ماند، بدونِ تغییر. */
.imp-dot{width:11px;height:11px;border-radius:50%;display:inline-block;flex-shrink:0;}
/* نشست ۲۴ — قدم ۹۹: نوار تبِ بخش‌های تقویم (فارکس/بورس)، هم‌الگو با tb-cal-filter-btn */
.tb-cal-sector-tab{border:1px solid #dde4ef;background:#fafbfc;color:#5b6b7c;font-size:12px;font-weight:700;padding:7px 16px;border-radius:999px;cursor:pointer;font-family:inherit;transition:all .15s;}
.tb-cal-sector-tab.active{border-color:#1789C2;background:#1789C2;color:#fff;}
.imp-low{background:#3db36b;}
.imp-med{background:#e0a82e;}
.imp-high{background:#c0282d;}
/* قدمِ ۳۵۰ (طبقِ گزارشِ حبیب): نمادِ اهمیتِ «بالا» در ردیفِ رویدادها، به‌جایِ نقطه‌ی
   هم‌شکل با متوسط/پایین، یک ستاره‌ی قرمزِ متمایز است تا در نگاهِ اول جدا دیده شود. */
.imp-star{color:#c0282d;font-size:15px;line-height:1;display:inline-block;flex-shrink:0;}
/* قدمِ ۵۰۲ (طبقِ درخواستِ صریحِ حبیب): اهمیتِ «متوسط» در ردیفِ رویدادها یک مثلثِ نارنجی است (نه نقطه).
   مثلثِ CSS خالص (بدونِ وابستگی به فونت)، هم‌اندازه با ستاره/نقطهٔ همسایه‌هایش. */
.imp-tri{width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:11px solid #f28c1b;display:inline-block;flex-shrink:0;vertical-align:middle;}
/* v228: دکمه‌ی «بازگشت» تازه‌اضافه‌شده داخلِ همان ردیفِ سرتیترِ تقویم می‌نشیند، نه با
   مارجینِ پیش‌فرضِ خودش (که برای حالتِ ستونیِ صفحه‌ی دوره‌ها نوشته شده بود) */
.tb-cal-header .tb-crs-back{margin-bottom:0;flex-shrink:0;}

/* v228: طبقِ درخواستِ صریحِ کاربر (اسکرین‌شاتِ سوم، حالتِ عمودیِ موبایل) — درجه‌های اهمیت
   (فیلترها) باید در همان یک ردیفِ کنارِ کلمه‌ی «تقویم اقتصادی» بمانند، نه در ردیفِ جداگانه‌ی
   زیرش؛ برای این‌که در عرضِ کمِ موبایل جا شوند، فونت/پدینگ/اندازه‌ی نقطه‌ها کوچک‌تر شدند و
   خودِ ردیفِ فیلتر (اگر باز هم جا نشد) به‌جای شکستن به خطِ بعد، به‌صورتِ افقی اسکرول می‌شود —
   دقیقاً هم‌الگو با نوارِ نرخِ بهره (`.tb-ir-sidebar`) که همین مشکل را قبلاً حل کرده بود. */
@media (max-width:640px){
  .tb-cal-header{flex-wrap:nowrap;gap:6px;margin-bottom:8px;}
  /* قدمِ ۲۱۴ — علتِ واقعیِ سرریزِ افقیِ کلِ صفحه (فقط در بورس): این قانون قبلاً
     `flex:0 0 auto` (عرضِ ثابتِ برابرِ محتوا، بدونِ امکانِ کوچک‌شدن) روی سرتیترِ
     تقویم می‌گذاشت. برایِ «تقویمِ اقتصادی»/«تقویمِ ارز دیجیتال» (کوتاه) مشکلی
     پیش نمی‌آمد، اما سرتیترِ بورس («تقویم بورس — مجامع، افزایش سرمایه و حق تقدم»)
     خیلی بلندتر است؛ همراه با دکمه‌یِ nowrap «دریافتِ کدِ امبد» در همان ردیف، عرضِ
     کلِ ردیف از عرضِ صفحه‌یِ موبایل بیشتر می‌شد و همینِ یک ردیف کلِ صفحه را به
     اسکرولِ افقی می‌انداخت (هدر/تیکر/فیلترهایِ زیرین هم به‌همراهش جابه‌جا می‌شدند،
     دقیقاً همان چیزی که در اسکرین‌شاتِ کاربر دیده می‌شد). حالا سرتیتر خودش
     می‌تواند کوچک شود (`flex:1 1 auto;min-width:0`) و اگر باز هم جا نشد به‌جایِ
     سرریز، با «...» بریده می‌شود؛ دکمه‌یِ امبد `flex-shrink:0` گرفت تا خودش هرگز
     فشرده/بریده نشود — فقط سرتیتر جا می‌دهد. */
  .tb-cal-title{font-size:11.5px;white-space:nowrap;flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;}
  .tb-cal-title i{font-size:13px;}
  .tb-bcal-embed-btn{flex-shrink:0;}
  .tb-cal-filter{flex-wrap:nowrap;flex:1 1 auto;justify-content:flex-end;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;padding-bottom:1px;}
  .tb-cal-filter::-webkit-scrollbar{display:none;}
  .tb-cal-filter-btn{font-size:9px;padding:4px 8px;white-space:nowrap;flex-shrink:0;gap:3px;}
  .tb-cal-filter-btn .imp-dot{width:11px;height:11px;}
}

/* v228: طبقِ درخواستِ صریحِ کاربر (اسکرین‌شاتِ اول و دوم، حالتِ افقیِ موبایل، هم بازارِ مالی
   هم بورسِ اوراق بهادار) — در ارتفاعِ کمِ افقی، اصلاً فضایی برای دیدنِ خودِ جدولِ رویدادها/
   اخبار باقی نمی‌ماند؛ پس علاوه بر پنهان‌شدنِ کاملِ هدرِ سایت (با tbCrsFullHideHeader)، نوارِ
   ساعت‌های جهانی، نوارِ نرخِ بهره، و ردیفِ فیلترهای اهمیت هم مخفی می‌شوند و فقط سرتیترِ «تقویم
   اقتصادی» (+ دکمه‌ی بازگشت) باقی می‌ماند — دقیقاً همان چیزی که کاربر خواسته: «به‌جز سرتیترِ
   تقویمِ اقتصادی مابقی مخفی شوند». */
@media (max-height:500px) and (orientation:landscape){
  #tbPageCalendar #tbCalMsw{display:none;}
  #tbPageCalendar #tbCalIrBar{display:none;}
  #tbPageCalendar .tb-cal-header{margin-bottom:6px;}
  #tbPageCalendar .tb-cal-filter{display:none;}
}

/* ---- Calendar table ---- */
.tb-cal-table{width:100%;border-collapse:collapse;font-size:12px;}
.tb-cal-tablewrap{overflow-x:auto;-webkit-overflow-scrolling:touch;}
@media (max-width:640px){
  /* v225: رفعِ باگِ «صفحه‌ی تقویمِ اقتصادی در موبایل کاملاً به‌هم‌ریخته» — جدول ۸ ستونِ عرضِ
     ثابت دارد (مجموعاً حداقلِ ~۴۰۰px، فقط برای ستون‌های ثابت، بدونِ احتسابِ متنِ ستونِ «رویداد»)
     که از عرضِ صفحه‌ی موبایل (معمولاً ~۳۶۰-۳۹۰px) بیشتر است. تا این‌جا هیچ پوششِ اسکرولِ افقی یا
     کوچک‌سازی نداشت، پس کلِ جدول از عرضِ صفحه سرریز می‌کرد و باعثِ اسکرولِ افقیِ کاملِ صفحه و
     به‌هم‌ریختگیِ عمومی می‌شد. راه‌حل، هم‌الگو با پوششِ اسکرولِ افقیِ جدولِ دوره‌ها
     (`.tb-crs-tablewrap`) که از قبل در پروژه همین مشکل را حل کرده: جدول داخلِ یک ظرفِ
     overflow-x:auto قرار گرفت تا فقط خودِ جدول (نه کلِ صفحه) در موبایل به‌صورتِ افقی اسکرول
     شود؛ ستون‌های عرضِ‌ثابت هم کمی جمع‌تر شدند تا ستونِ «رویداد» فضای بیشتری برای خواندن داشته
     باشد. */
  .tb-cal-table{font-size:11px;}
  .tb-cal-table th{padding:6px 6px;font-size:10px;white-space:nowrap;}
  .tb-cal-table td{padding:7px 6px;}
}
.tb-cal-table th{background:#0F3D73;color:#fff;padding:7px 10px;text-align:right;font-size:11.5px;font-weight:700;position:sticky;top:0;}
.tb-cal-table td{padding:8px 10px;border-bottom:1px solid #eef1f5;vertical-align:middle;}
.tb-cal-table tr:hover > td{background:#f4f8ff;}
/* قدمِ ۶۶۰ — سلول‌هایِ لاتین (عنوان/اعداد) در جدولِ RTL: جهتِ ایزوله تا علامتِ منفی و «|» جابه‌جا نشوند. */
.tb-cal-table td.tb-cal-ev{text-align:right;unicode-bidi:isolate;}
.tb-cal-table td.tb-cal-num{text-align:right;unicode-bidi:isolate;font-variant-numeric:tabular-nums;}
.tb-cal-event-row{cursor:pointer;}
/* row the user has clicked open to read: turned red so it's obvious they should click it again to close/return */
.tb-cal-event-row.tb-cal-open > td{background:#fde8e8!important;}
.tb-cal-event-row.tb-cal-open .tb-cal-time{color:#991b1b;}
.tb-cal-event-row.tb-cal-open .tb-expand-btn,
.tb-cal-event-row.tb-cal-open .tb-expand-btn i{color:#991b1b;}
.tb-cal-date-row td{background:#e8eef7;font-weight:800;font-size:11px;color:#33475b;padding:5px 10px;}
.tb-cal-date-row.tb-cal-today td{background:#dcedff;color:#0F3D73;}
.tb-cal-date-row.tb-cal-nextweek td{background:#f1ecfb;color:#4b3a86;}
.tb-cal-nextweek-badge{display:inline-flex;align-items:center;gap:4px;background:#7a4ca8;color:#fff;font-size:9.5px;font-weight:800;padding:2px 8px;border-radius:999px;margin-right:8px;}
.tb-cal-event-row.tb-cal-nextweek-row > td{background:#faf8ff;}
.tb-cal-today-badge{display:inline-flex;align-items:center;gap:4px;background:#1789C2;color:#fff;font-size:9.5px;font-weight:800;padding:2px 8px;border-radius:999px;margin-right:8px;}
.tb-cal-released-tag{font-size:9.5px;color:#8a94a1;font-weight:700;}
.tb-cal-event-row.tb-cal-next{background:#fff7e6;}
.tb-cal-event-row.tb-cal-next > td{background:#fff7e6;}
.tb-cal-next-badge{display:inline-flex;align-items:center;gap:4px;background:#c0282d;color:#fff;font-size:9px;font-weight:800;padding:2px 7px;border-radius:999px;animation:tbNextPulse 1.6s ease-in-out infinite;}
@keyframes tbNextPulse{0%,100%{box-shadow:0 0 0 0 rgba(192,40,45,.45);}50%{box-shadow:0 0 0 5px rgba(192,40,45,0);}}
.tb-cal-event-en{font-size:10px;color:#8a94a1;direction:ltr;text-align:right;font-weight:700;margin-top:2px;letter-spacing:.2px;}

/* time cell: bold + black so it's the first thing the eye catches in each row */
.tb-cal-time{font-family:'Consolas','Courier New',monospace;font-size:12.5px;color:#000;font-weight:800;direction:ltr;display:inline-block;}

/* importance badge */
.tb-imp{display:inline-flex;align-items:center;gap:3px;}
.tb-imp-dot{width:18px;height:18px;border-radius:50%;flex-shrink:0;}
.tb-imp-low .tb-imp-dot{background:#3db36b;}
.tb-imp-med .tb-imp-dot{background:#e0a82e;}
.tb-imp-high .tb-imp-dot{background:#c0282d;}

/* currency badge: bolder + more visible so currency stands out at a glance */
.tb-cur-badge{font-weight:900;font-size:12px;padding:3px 9px;border-radius:5px;background:#dceafb;border:1px solid #b9d7f5;color:#0F3D73;display:inline-block;letter-spacing:.3px;}

/* actual/forecast/previous cells: uniformly black + bold, with a small arrow carrying the better/worse signal */
.tb-val{font-family:'Consolas','Courier New',monospace;font-size:12px;font-weight:800;color:#000;}
.tb-val .tb-val-arrow{font-size:10px;margin-left:3px;}
.tb-val.better .tb-val-arrow{color:#0b9e5e;}
.tb-val.worse .tb-val-arrow{color:#c0282d;}

/* expandable row (slide-down interpretation) */
.tb-cal-detail-row{display:none;background:#f9fbff;}
.tb-cal-detail-row.open{display:table-row;}
/* قدمِ جدید — تفسیرِ کلیکیِ تقویمِ اقتصادی: دکمه‌ی بازشو + وضعیتِ قابل‌کلیکِ ردیف */
.tb-cal-row{cursor:pointer;}
.tb-cal-row:hover{background:#f5f9ff;}
/* قدمِ ۳۵۱ — خلاصه‌ی دوخطیِ همیشه‌-نمایانِ زیرِ عنوانِ رویداد، فقط برایِ اهمیتِ
   متوسط/پایین (نگاه کنید به تابعِ tb_forex_calendar_row_teaser در functions.php). */
.tb-cal-row-teaser{margin-top:3px;font-size:10.5px;font-weight:400;color:#8794a1;line-height:1.6;white-space:normal;}
.tb-cal-row-teaser-line{display:block;}
/* قدمِ ۳۰۹ — طبقِ درخواستِ صریحِ حبیب: تا پیش از این، بازشدنِ تفسیرِ خبر فقط با
   فلشِ ▾/▴ دکمه و آبیِ موقتیِ hover مشخص می‌شد که با دورشدنِ ماوس (یا در لمسِ
   گوشی) ناپدید می‌شد. اکنون کلاسِ .open روی خودِ ردیفِ خبر هم اضافه می‌شود
   (نگاه کنید به tbCalToggleDetail پایینِ همین فایل) و پس‌زمینه/نوارِ کناری/
   دکمه ثابت می‌ماند تا وقتی کاربر دوباره کلیک کند. */
.tb-cal-row.open{background:#f5f9ff;}
.tb-cal-row.open td:first-child{box-shadow:inset -4px 0 0 0 #1789C2;}
.tb-cal-toggle-btn.open{background:#1789C2;border-color:#1789C2;color:#fff;}
.tb-cal-toggle-btn{background:#eef2f7;color:#1789C2;border:1px solid #d5e2f5;border-radius:6px;width:24px;height:24px;line-height:1;font-size:13px;cursor:pointer;}
.tb-cal-toggle-btn:hover{background:#e1ecfa;}
.tb-cal-detail-cell{padding:12px 18px 14px!important;border-bottom:2px solid #ccd9ec!important;}
.tb-cal-detail-inner{background:#fff;border:1px solid #d5e2f5;border-radius:10px;padding:12px 16px;font-size:12.5px;line-height:2;color:#33475b;direction:rtl;font-weight:500;}
.tb-cal-detail-inner .signal{font-weight:800;padding:3px 10px;border-radius:5px;font-size:12px;display:inline-block;margin-top:6px;}
.signal-buy{background:#d4f7e4;color:#076d3c;}
.signal-sell{background:#fde8e8;color:#991b1b;}
.signal-wait{background:#fef3cd;color:#7a4c00;}

/* ==================== پنل کارتیِ تقویم بورس (بازطراحیِ طراحی/بازاریابی) ====================
   طبقِ سندِ استراتژیِ ثبت‌شده در حافظه‌ی پروژه: کارت‌هایِ سفید روی زمینه‌ی خاکستریِ خیلی روشن،
   نوارِ رنگیِ کناری بر اساسِ نوعِ رویداد، برچسبِ نوع + اهمیت، خلاصه‌ی تحلیلیِ چندخطی همیشه
   نمایان (نه پشتِ کلیک)، و افکتِ hover ملایم برایِ حسِ تعامل‌پذیریِ مدرن. */
.tb-bcal-filters{display:flex;flex-wrap:wrap;gap:14px;align-items:center;background:#fafbfc;border:1px solid #eef1f5;border-radius:12px;padding:10px 14px;margin-bottom:14px;}
.tb-bcal-filter-group{display:flex;flex-wrap:wrap;align-items:center;gap:6px;}
.tb-bcal-filter-label{font-size:11.5px;font-weight:800;color:#5b6b7c;margin-left:2px;}
.tb-bcal-filter-chip{border:1px solid #dde4ef;background:#fff;color:#5b6b7c;font-size:11.5px;font-weight:700;padding:5px 13px;border-radius:999px;cursor:pointer;font-family:inherit;transition:all .15s;}
.tb-bcal-filter-chip.active{border-color:#1789C2;background:#1789C2;color:#fff;}
.tb-bcal-filter-chip.tb-bcal-chip-high.active{border-color:#c0282d;background:#c0282d;}
.tb-bcal-filter-chip.tb-bcal-chip-medium.active{border-color:#e0a82e;background:#e0a82e;color:#3b2c00;}
.tb-bcal-filter-chip.tb-bcal-chip-low.active{border-color:#3db36b;background:#3db36b;}
.tb-bcal-no-match{text-align:center;padding:20px 14px;color:#8a94a1;font-size:12.5px;}
/* قدمِ ۲۱۲ — رفعِ نامتوازنیِ فیلترهایِ تقویمِ بورس در موبایل: قبلاً هر گروه با
   flex-wrap آزاد می‌چید، که چون تعدادِ چیپ‌ها فرد/نامساوی است (۱۰ تایِ نوع، ۳ تایِ
   اهمیت) ردیفِ آخر هر گروه یک چیپِ تنها و بی‌قرینه در سمتِ راست رها می‌کرد. حالا هر
   گروه در موبایل یک گرید با ستون‌هایِ مساوی است (نوع: ۲ ستون → ۵ ردیفِ کامل،
   اهمیت: ۳ ستون → دقیقاً یک ردیفِ کامل) تا همیشه متقارن باشد؛ box-sizing:border-box +
   width:100% هم تضمین می‌کند این بخش هرگز از عرضِ صفحه بیرون نزند. */
@media (max-width:640px){
  .tb-bcal-filters{flex-direction:column;align-items:stretch;gap:10px;padding:9px 11px;width:100%;box-sizing:border-box;}
  .tb-bcal-filter-group{display:grid;grid-template-columns:repeat(2,1fr);gap:6px;width:100%;box-sizing:border-box;}
  .tb-bcal-filter-group:last-child{grid-template-columns:repeat(3,1fr);}
  .tb-bcal-filter-label{grid-column:1/-1;margin:0 0 2px;}
  .tb-bcal-filter-chip{font-size:10.5px;padding:5px 6px;width:100%;box-sizing:border-box;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
}
@media (max-width:400px){
  .tb-bcal-filter-group{grid-template-columns:1fr 1fr;}
  .tb-bcal-filter-chip{font-size:10px;padding:5px 4px;}
}

.tb-bcal-list{display:flex;flex-direction:column;gap:12px;}
.tb-bcal-empty{text-align:center;padding:26px 14px;color:#666;background:#fafbfc;border:1px dashed #dde4ef;border-radius:12px;font-size:12.5px;}
.tb-bcal-empty-error{color:#b32d2e;background:#fdecea;border-color:#f3c8c5;}

.tb-bcal-card{
  background:#fff;
  border:1px solid #e9edf3;
  border-inline-start:4px solid #1789C2; /* رنگِ نوعِ رویداد با inline-style جایگزین می‌شود */
  border-radius:12px;
  padding:16px 18px;
  box-shadow:0 1px 3px rgba(15,61,115,.06);
  transition:transform .15s ease,box-shadow .15s ease;
}
.tb-bcal-card:hover{
  transform:translateY(-2px);
  box-shadow:0 8px 18px rgba(15,61,115,.12);
}

.tb-bcal-card-top{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:10px;flex-wrap:wrap;}
.tb-bcal-type-badge{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:800;padding:4px 11px;border-radius:999px;}
.tb-bcal-type-badge i{font-size:13px;}
.tb-bcal-date{display:inline-flex;align-items:center;gap:4px;font-size:11.5px;color:#8a94a1;font-weight:700;font-family:'Consolas','Courier New',monospace;}
.tb-bcal-date i{font-size:13px;}

.tb-bcal-title{margin:0 0 8px;font-size:15.5px;font-weight:800;line-height:1.9;color:#1A1A2E;}
.tb-bcal-title a{color:inherit;text-decoration:none;}
.tb-bcal-title a:hover{color:#1789C2;text-decoration:underline;}

.tb-bcal-meta-row{display:flex;align-items:center;gap:10px;margin-bottom:10px;flex-wrap:wrap;}
.tb-bcal-symbol{font-weight:900;font-size:12.5px;padding:3px 10px;border-radius:6px;background:#dceafb;border:1px solid #b9d7f5;color:#0F3D73;}
a.tb-bcal-symbol{text-decoration:none;cursor:pointer;transition:background .15s,border-color .15s;}
a.tb-bcal-symbol:hover{background:#c7ddf7;border-color:#8fb8e8;}
.tb-bcal-company{font-size:12.5px;font-weight:700;color:#5b6b7c;}

.tb-bcal-summary{margin:0 0 12px;font-size:13px;line-height:1.9;color:#5A5A6E;}

.tb-bcal-card-bottom{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;padding-top:10px;border-top:1px solid #f0f2f6;}
.tb-bcal-impact{font-size:12px;font-weight:800;padding:4px 10px;border-radius:7px;}
.tb-bcal-impact-high{background:#fdecea;color:#c0282d;}
.tb-bcal-impact-medium{background:#fff3e0;color:#e0a82e;}
.tb-bcal-impact-low{background:#e8f5e9;color:#3db36b;}

.tb-bcal-card-actions{display:flex;align-items:center;gap:14px;flex-wrap:wrap;}
.tb-bcal-edu-link{display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:800;color:#fff;background:linear-gradient(135deg,#c0282d,#e35257);padding:5px 13px;border-radius:8px;text-decoration:none;transition:filter .15s;}
.tb-bcal-edu-link:hover{filter:brightness(1.08);}
.tb-bcal-edu-link i{font-size:13px;}
.tb-bcal-more-btn{display:inline-flex;align-items:center;gap:5px;background:none;border:none;color:#1789C2;font-weight:700;font-size:12px;cursor:pointer;font-family:inherit;padding:2px 4px;}
.tb-bcal-more-btn:hover{color:#0F3D73;text-decoration:underline;}
.tb-bcal-more-btn i{font-size:13px;transition:transform .18s ease;}
.tb-bcal-more-btn.open i{transform:rotate(180deg);}

.tb-bcal-detail{display:none;margin-top:12px;}
.tb-bcal-detail.open{display:block;}

@media (max-width:640px){
  .tb-bcal-card{padding:13px 14px;}
  .tb-bcal-title{font-size:14px;}
  .tb-bcal-summary{font-size:12px;}
}

/* ---- Calendar detail: richer stats + previous-vs-actual comparison ---- */
.tb-cal-detail-stats{display:flex;gap:8px;flex-wrap:wrap;margin:8px 0 10px;}
.tb-cal-detail-stats .stat{background:#eef2f7;color:#33475b;font-weight:800;font-size:11px;padding:5px 11px;border-radius:7px;font-family:'Consolas','Courier New',monospace;}
.tb-cal-detail-stats .stat b{font-family:'Vazirmatn',sans-serif;font-weight:700;color:#8a94a1;margin-left:5px;}
.tb-cal-compare{display:flex;align-items:center;gap:6px;font-size:12px;font-weight:800;padding:7px 11px;border-radius:8px;margin-bottom:8px;}
.tb-cal-compare.up{background:#d4f7e4;color:#076d3c;}
.tb-cal-compare.down{background:#fde8e8;color:#991b1b;}
.tb-cal-compare.flat{background:#eef2f7;color:#5b6b7c;}
.tb-cal-compare.pending{background:#fef3cd;color:#7a4c00;}
.tb-cal-imp-note{font-size:11.5px;color:#5b6b7c;margin:0 0 8px;display:flex;align-items:center;gap:5px;}

/* expand toggle button */
.tb-expand-btn{cursor:pointer;background:none;border:none;color:#1789C2;font-size:13px;padding:0 4px;font-family:inherit;display:flex;align-items:center;gap:3px;}
.tb-expand-btn:hover{color:#0F3D73;}

/* ==================== Date Converter page (تبدیل تاریخ) ==================== */
#tbPageDateConv{position:relative;min-height:620px;}
/* رفعِ باگِ سرریزِ موبایل: tb-dc-bg اکنون فقط داخلِ همین wrapperِ position:relative
   محدود می‌شود (نه کلِ سند/هدر) — نگاهِ CSS_bug_fix بالایِ page-date-converter.php را ببینید. */
.tb-dc-page{position:relative;overflow:hidden;}
.tb-dc-bg{position:absolute;inset:0;background-size:cover;background-position:center;z-index:0;min-height:100%;}
.tb-dc-bg::after{content:'';position:absolute;inset:0;background:linear-gradient(180deg,rgba(255,255,255,.9),rgba(255,255,255,.95));}
.tb-dc-wrap{position:relative;z-index:1;padding:10px 18px 26px;max-width:980px;margin:0 auto;}
.tb-dc-hero{text-align:center;margin-bottom:8px;}
.tb-dc-hero h1{font-size:17px;color:#0F3D73;margin:0 0 3px;}
.tb-dc-hero p{font-size:11.5px;color:#8794a1;margin:0;}

/* today strip: compact, half the previous size */
.tb-dc-today-label{font-size:11px;font-weight:800;color:#33475b;text-align:center;margin-bottom:6px;}
.tb-dc-today-row{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:14px;}
.tb-dc-today-card{border-radius:8px;padding:7px 10px;text-align:center;color:#fff;position:relative;overflow:hidden;display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:6px;}
.tb-dc-today-card.jalali{background:linear-gradient(135deg,#0F3D73,#1789C2);}
.tb-dc-today-card.gregorian{background:linear-gradient(135deg,#0b9e5e,#3fc47f);}
.tb-dc-today-card.hijri{background:linear-gradient(135deg,#7a4ca8,#a778d4);}
.tb-dc-today-card .lbl{font-size:9.5px;opacity:.9;font-weight:800;}
.tb-dc-today-card .wd{font-size:9.5px;opacity:.9;font-weight:800;}
.tb-dc-today-card .dt{font-size:14px;font-weight:900;}
.tb-dc-today-card .sep{opacity:.6;font-size:10px;}

/* converter card */
.tb-dc-card{border:2px solid #1789C2;border-radius:16px;padding:18px;background:rgba(255,255,255,.95);box-shadow:0 10px 30px rgba(15,61,115,.18);backdrop-filter:blur(2px);position:relative;overflow:hidden;}
.tb-dc-card::before{content:'';position:absolute;top:0;right:0;left:0;height:5px;background:linear-gradient(90deg,#0F3D73,#1789C2,#3fc47f,#7a4ca8);}
.tb-dc-tabs{display:flex;justify-content:center;gap:8px;margin-bottom:14px;flex-wrap:wrap;margin-top:6px;}
.tb-dc-tab{border:1px solid #e3e7ec;background:#fff;color:#5b6b7c;font-size:12.5px;font-weight:700;padding:8px 20px;border-radius:999px;cursor:pointer;font-family:inherit;transition:all .18s ease;}
.tb-dc-tab.active{background:linear-gradient(135deg,#0F3D73,#1789C2);border-color:#0F3D73;color:#fff;box-shadow:0 4px 12px rgba(15,61,115,.28);}
.tb-dc-inputs{display:flex;align-items:center;justify-content:center;gap:10px;flex-wrap:wrap;margin-bottom:16px;}
.tb-dc-inputs select{border:2px solid #e3e7ec;border-radius:9px;padding:10px 14px;font-size:13px;font-family:'Vazirmatn',sans-serif;background:#fff;color:#1a2733;font-weight:700;cursor:pointer;transition:border-color .15s,box-shadow .15s;min-width:92px;}
.tb-dc-inputs select:focus{outline:none;box-shadow:0 0 0 3px rgba(23,137,194,.15);}
#tbDcDay{border-color:#1789C2;}
#tbDcMonth{border-color:#0b9e5e;}
#tbDcYear{border-color:#7a4ca8;}
.tb-dc-today-btn{background:#eef2f7;border:1px solid #dde4ef;color:#33475b;font-size:12px;font-weight:700;padding:9px 16px;border-radius:9px;cursor:pointer;font-family:inherit;display:flex;align-items:center;gap:5px;transition:all .15s;}
.tb-dc-today-btn:hover{background:#e0e9f5;}

.tb-dc-results{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}
.tb-dc-result-card{border-radius:13px;padding:16px 12px;text-align:center;border:2px solid transparent;background:#fff;box-shadow:0 3px 12px rgba(15,61,115,.07);transition:transform .2s ease,box-shadow .2s ease;animation:tbNewsFadeIn .3s ease;position:relative;}
.tb-dc-result-card:hover{transform:translateY(-2px);box-shadow:0 6px 18px rgba(15,61,115,.12);}
.tb-dc-result-card.source{border-color:#1789C2;}
.tb-dc-result-card .src-badge{position:absolute;top:-9px;left:50%;transform:translateX(-50%);background:#1789C2;color:#fff;font-size:9px;font-weight:800;padding:2px 10px;border-radius:999px;white-space:nowrap;}
.tb-dc-result-card i{font-size:19px;margin-bottom:6px;display:block;}
.tb-dc-result-card.jalali i{color:#1789C2;}
.tb-dc-result-card.gregorian i{color:#0b9e5e;}
.tb-dc-result-card.hijri i{color:#7a4ca8;}
.tb-dc-result-card .cal-name{font-size:10.5px;color:#98a4b0;font-weight:700;margin-bottom:6px;}
.tb-dc-result-card .wd-name{font-size:11px;color:#5b6b7c;margin-bottom:3px;}
.tb-dc-result-card .full-date{font-size:13.5px;font-weight:800;color:#000;line-height:1.7;}
.tb-dc-copy-btn{margin-top:8px;background:none;border:none;color:#98a4b0;font-size:11px;cursor:pointer;font-family:inherit;display:inline-flex;align-items:center;gap:3px;transition:color .15s;}
.tb-dc-copy-btn:hover{color:#1789C2;}
.tb-dc-copy-btn.copied{color:#0b9e5e;}
.tb-dc-note{text-align:center;font-size:10.5px;color:#98a4b0;margin-top:12px;}

@media (max-width:700px){
  .tb-dc-today-row{grid-template-columns:1fr;}
  .tb-dc-results{grid-template-columns:1fr;}
  .tb-dc-inputs select{min-width:80px;flex:1;}
}

/* ---- Responsive: tablet + mobile stacking, kept in sync with desktop ---- */
/* Nav row: stack nav-items above auth buttons before anything can collide, on both tablet and mobile */
@media (max-width:991px){
  /* v199: قبلاً با flex-direction:column دکمه‌های ورود/ثبت‌نام همیشه یک ردیفِ کاملاً جدا و
     تمام‌عرض می‌ساختند (خیلی بزرگ و اشغال‌کننده‌ی فضا). حالا جهت ردیف تغییر نمی‌کند؛ نوارِ
     رشته‌های بازار (tb-nav-sector-group) با flex-basis:100% همچنان خودش را در یک خط جدا
     می‌گیرد، اما آیتم‌های منو (nav-items) با flex:1 1 auto و min-width:0 جمع می‌شوند تا فضای
     لازم برای دکمه‌های کوچکِ ورود/ثبت‌نام (auth-buttons) در همان ردیف باز شود؛ آیتم‌های منو
     خودشان با wrap داخلی، در همان عرضِ باقی‌مانده به چند خط می‌شکنند. */
  .tb-nav-row{align-items:center;flex-wrap:wrap;}
  /* v222: طبقِ بازخوردِ کاربر، اسکرولِ افقیِ اجباریِ آیتم‌های منو باعث می‌شد دکمه‌ی «خانه»
     (اولین آیتم) از دیدِ اولیه بیرون بیفتد؛ راه‌حلِ آن‌موقع این بود که دکمه‌های ورود/ثبت‌نام
     عضوِ همان لیستِ nav-items شوند. v260: طبقِ درخواستِ صریحِ جدیدِ کاربر (پینِ دکمه‌ها به
     منتهی‌الیهِ سمتِ چپِ نوار)، این دکمه‌ها دوباره از این لیست بیرون آورده شدند (اکنون خواهرِ
     مستقیمِ tb-nav-items با margin-inline-start:auto)؛ چون nav-items اینجا min-width:0 دارد،
     خودش در عرض‌های کم به‌جای اینکه کلِ ردیف را مجبور به شکستنِ خط کند، آیتم‌های داخلی‌اش را
     می‌شکند و همان مشکلِ v222 (پنهان‌شدنِ دکمه‌ی خانه) دوباره رخ نمی‌دهد. */
  /* v261: دیگر wrap نمی‌شود؛ عرضِ کم با اسکرولِ افقیِ همین آیتم‌ها مدیریت می‌شود (نه شکستنِ خط) */
  .tb-nav-items{order:1;flex:1 1 auto;min-width:0;flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;}
  .tb-auth-btn{padding:5px 10px;font-size:10.5px;}
  /* ردیفِ ۱۲ دکمه‌ی بازار: به‌جای شکستنِ نامرتب به چند خط، به‌صورتِ افقی اسکرول می‌شود */
  .tb-nav-sector-group{overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;max-width:100%;flex-wrap:nowrap;margin-right:0;margin-left:0;}
  .tb-nav-sector-group::-webkit-scrollbar{display:none;}
  .tb-nav-sector-group .tb-sector-btn{flex-shrink:0;}
}
/* v210: روی موبایلِ افقی (landscape) عرضِ صفحه اغلب از ۹۹۱px بیشتر می‌شود (رزولوشنِ منطقی)، پس
   قانونِ بالا اجرا نمی‌شد و ردیفِ ۱۲ دکمه‌ی بازار به چند خط می‌شکست و به‌همراهِ بقیه‌ی هدر تقریباً
   کلِ ارتفاعِ کمِ صفحه‌ی افقی را می‌گرفت. این قانون فقط بر اساسِ «ارتفاعِ کم» (نه عرض) فعال می‌شود
   تا در همه‌ی موبایل‌های افقی، این ردیف تک‌خط و افقی‌اسکرول‌پذیر بماند.
   v223: باگِ گزارش‌شده توسط کاربر (اسکرین‌شاتِ مرورگرِ درون‌برنامه‌ای تلگرام، حالتِ عمودی): این
   قانون فقط با max-height:500px (بدونِ قیدِ orientation) نوشته شده بود. در بعضی مرورگرهای
   درون‌برنامه‌ای (مثلِ همینِ تلگرام)، نوارِ آدرس/ابزارهای بالای صفحه آن‌قدر ارتفاع می‌گیرد که
   window.innerHeight واقعی حتی در حالتِ کاملاً عمودیِ گوشی هم به زیرِ ۵۰۰px می‌رسد — پس این
   قانون (که فقط برای افقی/landscape طراحی شده بود) اشتباهاً در حالتِ عمودی هم فعال می‌شد و
   nav-items را nowrap+اسکرولِ افقی می‌کرد؛ نتیجه دقیقاً همان چیزی بود که کاربر دید: دکمه‌ی
   «خانه» (اولین آیتم) از دیدِ اولیه بیرون می‌افتاد و دکمه‌های ورود/ثبت‌نام (آخرین آیتم‌ها) هم در
   انتهای نوارِ اسکرول‌شونده پنهان می‌ماندند. راه‌حل: افزودنِ and (orientation:landscape) تا این
   قانون فقط وقتی عرض از ارتفاع بیشتر است (واقعاً افقی) فعال شود، نه هر باری که فقط ارتفاعِ
   گزارش‌شده به‌خاطرِ UI مرورگر کم باشد. */
@media (max-height:500px) and (orientation:landscape){
  .tb-nav-sector-group{overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;max-width:100%;flex-wrap:nowrap!important;}
  .tb-nav-sector-group::-webkit-scrollbar{display:none;}
  .tb-nav-sector-group .tb-sector-btn{flex-shrink:0;}
  .tb-nav-items{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;}
  .tb-nav-items::-webkit-scrollbar{display:none;}
}
@media (max-width:991px){
  /* دکمه‌ی بزرگ‌شده‌ی «امور مالی و بازرگانی»: در تبلت/موبایل کمی کوچک‌تر تا از عرضِ منو بیرون نزند،
     ولی هنوز بزرگ‌تر از حالتِ پایه برای راحتیِ لمس/هاور */
  .tb-drop-item-parent{padding:14px 28px;font-size:17px;flex-wrap:wrap;}
  /* v204: آیکون و فلش (‹) این آیتم با استایلِ inline همیشه ۲۶px بودند (مستقل از فونتِ ردیف)،
     به همین دلیل در موبایل خیلی بزرگ‌تر از بقیه‌ی آیتم‌های منو به‌نظر می‌رسیدند. این‌جا با
     !important (که روی استایلِ inline بدونِ !important برتری دارد) کوچک‌شان می‌کنیم. */
  .tb-drop-item-parent i{font-size:18px!important;}
  /* v209: فلشِ کوچکِ (‹) قبلی خیلی ضعیف/کوچک بود و لمسِ دقیق می‌خواست. حالا خودِ کادرِ لمس یک
     باکسِ رنگیِ مجزا و کشیده است (نه یک ناحیه‌ی نامرئیِ بزرگ‌ترِ اطرافِ یک آیکونِ کوچک) — با
     برچسبِ متنیِ «زیررشته‌ها» + فلش، رنگِ سرمه‌ای که هنگامِ باز بودن طلایی می‌شود. چون این باکس
     داخلِ همان ردیفِ آیتمِ والد است (نه با مارجینِ منفی بیرون‌زده)، نه با ردیف‌های بعدیِ منو
     (فناوری اطلاعات/امور اداری/خدمات آموزشی) تداخل دارد و نه لمسِ آن‌ها را سخت می‌کند. */
  .tb-drop-item-parent .tb-flyout-caret{
    display:inline-flex;align-items:center;gap:5px;
    font-size:14px;font-weight:700;
    background:#0F3D73;color:#fff;
    padding:11px 16px;border-radius:10px;
    box-shadow:0 2px 7px rgba(15,61,115,.4);
    transition:background .15s;
  }
  .tb-flyout-caret-label{display:inline-block;white-space:nowrap;}
  .tb-flyout-caret-icon{display:inline-block;font-size:17px;line-height:1;transition:transform .2s;}
  .tb-drop-item-parent.tb-flyout-mobile-open .tb-flyout-caret{background:#C9962C;}
  /* v204: زیرمنویِ کشویی (flyout) کنارِ آیتمِ والد: در عرض‌های باریک به‌جایِ بیرون‌زدن از صفحه،
     همان زیرِ آیتمِ والد به‌صورتِ عمودی باز می‌شود. قبلاً بازشدنش فقط به :hover وابسته بود که
     روی لمسی/موبایل معنای واقعی ندارد و عملاً کاربر هیچ‌وقت نمی‌توانست ۸ زیرشاخه‌ی داخلش
     (بازارهای مالی بین‌المللی/بورس/ارز دیجیتال/بازرگانی/حسابداری/بیمه/بازاریابی/کارآفرینی) را
     با تپ باز کند، و ضمناً همین رفتارِ نامشخص، همراه با آیکون/فلشِ بزرگ، ردیف را بزرگ و دسترسی
     به آیتم‌های زیرش (فناوری اطلاعات/امور اداری/خدمات آموزشی) را سخت می‌کرد. حالا در موبایل/تبلت
     با تپ روی فلش (‹) به‌صورت آکاردئون باز/بسته می‌شود (اسکریپتِ پایینِ صفحه) و پیش‌فرض بسته
     می‌ماند — بدون نیاز به هاور. */
  /* v207: بازطراحیِ زیرمنوی موبایل به نوارِ افقیِ قابل‌اسکرول، روبروی خودِ آیتمِ والد —
     قبلاً این زیرمنو به‌صورتِ یک ستونِ عمودیِ تمام‌عرض (۸ ردیف پشتِ‌سرِهم) باز می‌شد که هم
     ارتفاعِ زیادی می‌گرفت و هم چون اولین ردیفش («امور مالی و بازرگانی (همه)») دقیقاً هم‌شکل و
     هم‌رنگِ کادرِ آبیِ خودِ آیتمِ والد بود، به‌نظر می‌رسید همان کادر یک‌بارِ دیگر زیرِ خودش تکرار
     شده؛ ضمناً این ستونِ بلند، آیتم‌های بعدیِ همان منو («فناوری اطلاعات»/«امور اداری»/«امور
     آموزشی») را آن‌قدر به پایین هُل می‌داد که لمسشان عملاً غیرممکن می‌شد. حالا زیرمنو داخلِ یک
     قابِ خاکستریِ روشنِ مجزا (نه آبیِ هم‌رنگِ والد) و به‌صورتِ یک ردیفِ افقیِ کوتاه با اسکرولِ
     جانبی باز می‌شود — دقیقاً هم‌الگو با نوارِ رشته‌های بازار (tb-sector-switcher) که همین سایت
     در جاهای دیگر هم استفاده می‌کند — و ارتفاعِ اضافه‌شده به منو تقریباً ثابت و کم می‌ماند. */
  .tb-drop-flyout{
    position:static;box-shadow:none;border:none;
    margin:8px 0 2px;padding:8px 6px;min-width:0;width:100%;flex:1 1 100%;
    display:none;background:#F0F5FA;border-radius:10px;
    overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;
  }
  .tb-drop-flyout::-webkit-scrollbar{display:none;}
  .tb-drop-item-parent.tb-flyout-mobile-open .tb-drop-flyout{display:flex;flex-wrap:nowrap;gap:8px;}
  .tb-drop-flyout .tb-drop-item{white-space:nowrap;flex:0 0 auto;margin:0;font-size:11.5px;padding:9px 15px;}
  .tb-drop-item-parent.tb-flyout-mobile-open .tb-flyout-caret-icon{transform:rotate(-90deg);}
  /* والدِ «امور مالی و بازرگانی» وقتی بازِ اجباری/آکاردئون است، اجازه نمی‌دهد لمسِ نواحیِ خالیِ
     اطرافِ برچسب یا کارتِ خودِ منو با ناوبری/بستن اشتباه گرفته شود؛ کادرش هم کمی متمایزتر می‌شود
     تا حسِ «تکرارشدنِ کادرِ آبی» ایجاد نشود */
  .tb-drop-item-parent.tb-flyout-mobile-open{background:#D2ECFF;}
}
@media (max-width:620px){
  .tb-header-row{flex-wrap:wrap;justify-content:center;gap:8px;}
  .tb-logo-block{order:1;flex:1 1 100%;justify-content:center;padding-left:0;}
  .tb-search-block{order:2;flex:1 1 100%;max-width:340px;}
  .tb-meta-block{order:3;flex:1 1 100%;align-items:center;}
  /* قدمِ ۲۳۲ — طبقِ گزارشِ صریحِ حبیب («دکمه‌های شبکه‌های‌اجتماعی در هدر به‌هم چسبیده‌اند،
   با انگشت راحت لمس نمی‌شوند»): فاصله‌ی این آیکون‌ها (تلگرام/واتساپ/اینستاگرام/چتِ لایو)
   در موبایل تقریباً دو برابر شد (۸px → ۱۶px) تا خطایِ لمسِ تصادفیِ دکمه‌ی کناری کم شود؛
   دسکتاپ دست‌نخورده ماند (این قاعده فقط زیرِ ۶۲۰px فعال است، هم‌الگو با بقیه‌ی این بلوک). */
.tb-meta-social{justify-content:center;gap:16px;}
  /* منویِ کشویی (خدمات/ابزار/دوره آموزشی و ...): در موبایل به عرضِ صفحه محدود می‌شود تا از لبه‌ی
     راست/چپ بیرون نزند */
  .tb-drop{max-width:92vw;min-width:0;}
  .tb-drop-item-parent{padding:11px 20px;font-size:14px;}
  .tb-drop-item-parent i{font-size:16px!important;}
  .tb-drop-item-parent .tb-flyout-caret{font-size:12.5px;padding:9px 12px;}
  .tb-flyout-caret-icon{font-size:15px!important;}
}
@media (max-width:480px){
  .tb-title-nastaliq{font-size:18px;}
  .tb-logo-box{width:73px;height:73px;}
  .tb-tick-item{padding:5px 11px;}
  .tb-tick-name{font-size:10px;}
  .tb-tick-price,.tb-tick-change{font-size:10px;}
  .msw-clock{font-size:12px;}
  .msw-name{font-size:10.5px;}
  .msw-tick-label{display:none;}
  .msw-box:hover{transform:scale(1.1);}
  .tb-modal{padding:18px 16px 20px;border-radius:14px;}
  .tb-otp-boxes input{width:38px;height:46px;font-size:17px;}
  .tb-admin-toggle{font-size:9px;padding:2px 7px 2px 2px;}
  .tb-auth-buttons{gap:6px;}
  .tb-auth-btn{font-size:11px;padding:8px 6px;}
  .tb-news-grid{grid-template-columns:1fr;}
}

/* ==================== News page (BBC-style layout) ==================== */
.tb-page{display:none;}
.tb-page.tb-active{display:block;}

/* ==================== دوره‌های آموزشی (کاتالوگ رشته‌ها) ==================== */
.tb-crs-wrap{padding:10px 16px 40px;max-width:980px;margin:0 auto;}
.tb-crs-head{text-align:center;margin-bottom:10px;}
.tb-crs-head h1{font-size:17px;font-weight:800;color:#0F3D73;margin:0 0 6px;}
.tb-crs-head p{font-size:12px;color:#667;margin:0;}
.tb-crs-search{position:relative;margin:14px 0 12px;}
.tb-crs-search input{width:100%;box-sizing:border-box;padding:11px 40px 11px 14px;border:1px solid #dfe3ea;border-radius:10px;font-family:inherit;font-size:13px;background:#f8f9fb;}
.tb-crs-search input:focus{outline:none;border-color:#1789C2;background:#fff;}
.tb-crs-search i{position:absolute;right:14px;top:50%;transform:translateY(-50%);color:#9aa5b3;font-size:15px;}
.tb-crs-tabs{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px;}
.tb-crs-tab{border:1px solid #dfe3ea;background:#fff;color:#445;font-size:11.5px;font-weight:600;padding:7px 13px;border-radius:20px;cursor:pointer;font-family:inherit;transition:.15s;white-space:nowrap;}
.tb-crs-tab .cnt{opacity:.6;font-weight:400;margin-right:3px;}
.tb-crs-tab:hover{border-color:#1789C2;color:#1789C2;}
.tb-crs-tab.active{background:#0F3D73;border-color:#0F3D73;color:#fff;}
.tb-crs-tab.active .cnt{opacity:.85;}
.tb-crs-table thead th.tb-crs-sortable{cursor:pointer;user-select:none;transition:background .15s;}
.tb-crs-table thead th.tb-crs-sortable:hover{background:#144a8c;}
.tb-crs-table thead th.tb-crs-sortable .tb-sort-icon{font-size:11px;margin-right:11px;line-height:1;font-family:Arial,Tahoma,sans-serif;display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;background:#fff;color:#1789C2;box-shadow:0 1px 3px rgba(0,0,0,.3);opacity:.85;transition:opacity .15s,transform .15s;vertical-align:middle;}
.tb-crs-table thead th.tb-crs-sortable:hover .tb-sort-icon{opacity:1;transform:scale(1.08);}
.tb-crs-table thead th.tb-crs-sortable.active{background:#C9962C;}
.tb-crs-table thead th.tb-crs-sortable.active .tb-sort-icon{opacity:1;color:#1789C2;background:#fff8e8;}
table.tb-crs-table tbody tr.matched td:first-child{color:#1c2b3a;}
table.tb-crs-table tbody tr.tb-crs-open td:first-child{color:#1c2b3a;}
table.tb-crs-table tbody tr.tb-crs-open .tb-crs-open-badge{font-size:9px;color:#7a8494;font-weight:700;margin-right:6px;}
.tb-crs-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:10px;}
.tb-crs-card{position:relative;border:1px solid #e6e9ee;border-radius:12px;padding:13px 14px;background:#fff;transition:.15s;}
.tb-crs-card:hover{box-shadow:0 6px 18px rgba(15,61,115,.08);border-color:#c9d6e4;}
.tb-crs-card.matched{border-color:#C9962C;background:#fffdf7;}
.tb-crs-card .name{font-size:12.5px;font-weight:700;color:#1c2b3a;line-height:1.6;margin-bottom:8px;}
.tb-crs-card .meta{display:flex;flex-wrap:wrap;gap:5px;font-size:10px;color:#7a8494;}
.tb-crs-card .meta span{background:#f2f4f7;border-radius:6px;padding:3px 7px;}
.tb-crs-card .badge{position:absolute;top:-8px;left:10px;background:#C9962C;color:#fff;font-size:9.5px;font-weight:700;padding:2px 8px;border-radius:10px;}

/* ---- جدول دوره‌ها، شبیه ساختار جدول فعلی سایت (تصویر مرجع) ---- */
.tb-crs-tablewrap{border:1px solid #e6e9ee;border-radius:12px;overflow-x:auto;overflow-y:visible;background:#fff;}
/* v337: نوارِ رنگیِ راهنمای اسکرولِ افقی — طبقِ درخواستِ کاربر، چون جدولِ دوره‌ها روی موبایل عریض‌تر
   از صفحه است و overflow-x:auto دارد، بدونِ هیچ نشانه‌ی بصری کاربر متوجه نمی‌شد که باید جدول را به
   چپ/راست بکشد تا ستون‌های «ثبت‌نام» و «مطالب مرتبط» را ببیند. این نوار فقط زیرِ ۶۴۰px نمایش داده
   می‌شود (در دسکتاپ جدول کامل در عرضِ صفحه جا می‌شود و نیازی به راهنما نیست). */
.tb-crs-scroll-hint{display:none;}
@media (max-width:640px){
  .tb-crs-scroll-hint{
    display:flex;align-items:center;gap:6px;justify-content:center;
    background:linear-gradient(90deg,#1789C2,#0F3D73);color:#fff;
    font-size:11px;font-weight:700;padding:7px 10px;border-radius:9px;margin-bottom:8px;
  }
  .tb-crs-scroll-hint i{font-size:15px;flex-shrink:0;animation:tbCrsScrollHintMove 1.6s ease-in-out infinite;}
}
@keyframes tbCrsScrollHintMove{0%,100%{transform:translateX(0);}50%{transform:translateX(-4px);}}
/* گردیِ گوشه‌های بالای جدول را چون overflow-y دیگر hidden نیست (لازمِ چسبیدن درستِ هدر به کل
   صفحه، نه فقط به این ظرف)، مستقیماً روی خودِ هدر بازسازی می‌کنیم */
table.tb-crs-table thead tr:first-child th:first-child{border-top-right-radius:11px;}
table.tb-crs-table thead tr:first-child th:last-child{border-top-left-radius:11px;}
/* نکته‌ی مهم: border-collapse:collapse با position:sticky روی سلول‌های جدول در مرورگرها ناسازگار
   است (محدودیت شناخته‌شده‌ی CSS) — به همین علت هدر واقعاً «چسبان» نمی‌شد، به‌جایش با یک افستِ ثابت
   (برابر با مقدار top) نسبت به موقعیت طبیعی‌اش جابه‌جا می‌شد، even بدون اسکرول. به separate تغییر
   کرد تا چسبیدن واقعی کار کند؛ چون td/th این جدول فقط border-bottom دارند (نه border دور تا دور)،
   با border-spacing:0 خط دوتایی/نامرتب هم ایجاد نمی‌شود. */
table.tb-crs-table{width:100%;border-collapse:separate;border-spacing:0;min-width:640px;font-size:12px;}
table.tb-crs-table thead th{background:#0F3D73;color:#fff;font-size:11.5px;font-weight:700;padding:10px 12px;text-align:center;white-space:nowrap;}
table.tb-crs-table thead th:first-child{text-align:right;}
table.tb-crs-table tbody td{padding:10px 12px;border-bottom:1px solid #eef1f5;text-align:center;color:#33475b;vertical-align:middle;}
table.tb-crs-table tbody td:first-child{text-align:right;font-weight:700;color:#1c2b3a;}
table.tb-crs-table tbody tr:nth-child(even){background:#fbf6ec;}
table.tb-crs-table tbody tr:hover{background:#eaf4ff;}
table.tb-crs-table tbody tr.matched td:first-child{color:#1c2b3a;}
.tb-crs-table .tb-crs-enroll{background:#fff;border:1px solid #1789C2;color:#1789C2;font-size:11px;font-weight:700;padding:5px 14px;border-radius:6px;cursor:pointer;font-family:inherit;white-space:nowrap;transition:.15s;}
.tb-crs-table .tb-crs-enroll:hover{background:#1789C2;color:#fff;}
.tb-crs-table .tb-crs-related{color:#0F3D73;font-size:11.5px;font-weight:700;text-decoration:underline;cursor:pointer;white-space:nowrap;background:none;border:none;font-family:inherit;}

/* ============ صفحه‌ی اختصاصی دوره + فرم ثبت‌نام (فاز ۲+۳) ============ */
.tb-crsdet-wrap{max-width:980px;margin:0 auto;padding:18px 16px 50px;}
.tb-crsdet-breadcrumb{font-size:12px;color:#7a8794;margin-bottom:14px;}
.tb-crsdet-breadcrumb b{cursor:pointer;color:#0F3D73;}
.tb-crsdet-breadcrumb span{cursor:pointer;}
.tb-crsdet-poster{width:100%;aspect-ratio:16/9;max-height:230px;border-radius:12px;background:linear-gradient(135deg,#0F3D73,#1789C2);display:flex;flex-direction:column;gap:6px;align-items:center;justify-content:center;color:#cfe0f5;font-size:12px;margin-bottom:16px;border:3px solid #bfe3fb;box-shadow:0 0 0 5px rgba(135,206,250,.28);}
.tb-crsdet-grid{display:grid;grid-template-columns:1fr 300px;gap:22px;}
@media(max-width:760px){.tb-crsdet-grid{grid-template-columns:1fr;}}
.tb-crsdet-title{font-size:21px;margin:0 0 12px;color:#0F1B2D;}
.tb-crsdet-emptynote{background:#F5F7FA;border:1px dashed #cfd8e3;border-radius:10px;padding:11px 14px;font-size:11.5px;color:#7a8794;margin-bottom:18px;}
.tb-crsdet-teacher{display:flex;gap:14px;align-items:center;justify-content:space-between;background:#F3F6FA;border-radius:12px;padding:16px;}
.tb-crsdet-teacher-left{display:flex;gap:14px;align-items:center;}
.tb-crsdet-avatar{width:50px;height:50px;border-radius:50%;background:#0F3D73;color:#fff;display:flex;align-items:center;justify-content:center;font-weight:800;flex:none;font-size:14px;}
.tb-crsdet-teacher-name{font-weight:800;font-size:14px;color:#0F1B2D;}
.tb-crsdet-teacher-sub{font-size:11.5px;color:#7a8794;margin-top:2px;}
.tb-crsdet-follow{border:1.5px solid #0F3D73;background:#fff;color:#0F3D73;border-radius:8px;padding:8px 18px;font-family:inherit;font-size:12.5px;font-weight:700;cursor:pointer;}
.tb-crsdet-follow:hover{background:#0F3D73;color:#fff;}
.tb-crsdet-sidebar{background:#fff;border:1px solid #eee;border-radius:14px;padding:18px;align-self:start;position:sticky;top:16px;}
.tb-crsdet-sb-title{font-weight:800;font-size:13px;margin-bottom:8px;color:#0F1B2D;}
.tb-crsdet-sb-row{display:flex;justify-content:space-between;font-size:12.5px;padding:7px 0;border-bottom:1px dashed #e5e9ef;}
.tb-crsdet-sb-row:last-child{border-bottom:none;}
.tb-crsdet-sb-label{color:#7a8794;}
.tb-crsdet-enroll-btn{width:100%;margin-top:14px;border:none;border-radius:10px;padding:11px 0;font-family:inherit;font-weight:800;font-size:13.5px;cursor:pointer;background:#1C8A5A;color:#fff;transition:.15s;}
.tb-crsdet-enroll-btn:hover{background:#146B45;}
.tb-crsdet-enroll-btn:disabled,.tb-crsdet-enroll-btn.tb-already-reg{background:#c7ccd3;color:#6b7280;cursor:not-allowed;}
.tb-crsdet-enroll-btn:disabled:hover,.tb-crsdet-enroll-btn.tb-already-reg:hover{background:#c7ccd3;}
.tb-crsdet-already-warn{margin-top:10px;background:#FDECEC;border:1px solid #f3b9b9;color:#a6272c;border-radius:9px;padding:9px 12px;font-size:12px;font-weight:700;text-align:center;}

.tb-crsdet-step-badge{display:inline-block;background:#0F3D73;color:#fff;font-size:11px;font-weight:800;border-radius:6px;padding:3px 10px;margin-bottom:14px;}
.tb-crsdet-form-title{font-size:16px;font-weight:800;margin:0 0 4px;color:#0F1B2D;}
.tb-crsdet-form-sub{font-size:12.5px;color:#7a8794;margin-bottom:16px;}
.tb-crsdet-prefill-note{background:#F1FAF4;border:1px solid #BFE6CC;color:#146B45;border-radius:10px;padding:10px 14px;font-size:12px;margin-bottom:16px;}
.tb-crsdet-section-h{font-size:12.5px;font-weight:800;color:#0F3D73;margin:18px 0 10px;}
.tb-crsdet-section-h:first-of-type{margin-top:6px;}
#tbCrsRegView{max-width:640px;margin:0 auto;}
.tb-crsdet-fgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:10px 12px;}
@media(max-width:560px){.tb-crsdet-fgrid{grid-template-columns:1fr;}}
.tb-crsdet-field{display:flex;flex-direction:column;gap:5px;min-width:0;}
.tb-crsdet-field.full{grid-column:1/-1;}
.tb-crsdet-field label{font-size:11.5px;font-weight:700;color:#7a8794;}
.tb-crsdet-field input,.tb-crsdet-field select{border:1px solid #d7dde4;border-radius:8px;padding:7px 10px;font-family:inherit;font-size:12.5px;background:#fafbfc;transition:border-color .15s,background .15s,box-shadow .15s;box-sizing:border-box;width:100%;}
.tb-crsdet-field input:hover,.tb-crsdet-field select:hover{border-color:#b9c2cc;}
.tb-crsdet-field input:disabled{background:#F3F6FA;color:#8a94a6;border-color:#e5e9ef;}
.tb-crsdet-field input:focus,.tb-crsdet-field select:focus{outline:none;border-color:#1789C2;background:#fff;box-shadow:0 0 0 3px rgba(23,137,194,.12);}
.tb-crsdet-upload{border:1px dashed #cdd4dc;border-radius:8px;padding:8px 11px;font-size:12px;color:#7a8794;display:flex;justify-content:space-between;align-items:center;cursor:pointer;background:#fafbfc;transition:border-color .15s,background .15s;}
.tb-crsdet-upload:hover{border-color:#1789C2;background:#fff;}
.tb-crsdet-upload.uploaded{border-color:#1C8A5A;border-style:solid;color:#146B45;background:#F1FAF4;}
.tb-captcha-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;}
.tb-captcha-canvas{border:1px solid #d7dde4;border-radius:8px;cursor:pointer;background:#F3F6FA;flex:0 0 auto;transition:border-color .15s;}
.tb-captcha-canvas:hover{border-color:#1789C2;}
.tb-captcha-refresh-btn{border:1px solid #d7dde4;border-radius:8px;width:38px;height:44px;flex:0 0 auto;background:#fafbfc;color:#1789C2;font-size:18px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:.15s;line-height:1;}
.tb-captcha-refresh-btn:hover{background:#fff;border-color:#1789C2;}
.tb-captcha-input-wrap{flex:1 1 160px;min-width:140px;}
.tb-captcha-input-wrap input{width:100%;border:1px solid #d7dde4;border-radius:8px;padding:8px 11px;font-family:inherit;font-size:13px;background:#fafbfc;box-sizing:border-box;transition:border-color .15s,background .15s,box-shadow .15s;}
.tb-captcha-input-wrap input:hover{border-color:#b9c2cc;}
.tb-captcha-input-wrap input:focus{outline:none;border-color:#1789C2;background:#fff;box-shadow:0 0 0 3px rgba(23,137,194,.12);}
.tb-captcha-input-wrap input.tb-captcha-invalid{border-color:#a6272c;background:#FDECEC;}
.tb-crsdet-chk{display:flex;align-items:flex-start;gap:8px;font-size:12px;color:#333;margin-top:6px;}
.tb-crsdet-chk input{margin-top:3px;}
.tb-crsdet-err{background:#FDECEC;border:1px solid #f3b9b9;color:#a6272c;border-radius:9px;padding:10px 14px;font-size:12px;margin-top:14px;}
.tb-crsdet-actions{display:flex;gap:10px;margin-top:20px;}
.tb-crsdet-btn-navy{border:none;border-radius:10px;padding:11px 20px;font-family:inherit;font-weight:800;font-size:13.5px;cursor:pointer;background:#0F3D73;color:#fff;transition:.15s;}
.tb-crsdet-btn-navy:hover{background:#0A2A50;}
.tb-crsdet-btn-outline{border:1.5px solid #d5dbe3;border-radius:10px;padding:11px 20px;font-family:inherit;font-weight:700;font-size:13.5px;cursor:pointer;background:#fff;color:#5b6b7c;}
.tb-crsdet-btn-outline:hover{background:#f5f6f7;}
.tb-crsdet-done{text-align:center;padding:40px 10px;}
.tb-crsdet-done-icon{width:64px;height:64px;border-radius:50%;background:#1C8A5A;color:#fff;font-size:28px;display:flex;align-items:center;justify-content:center;margin:0 auto 16px;}
.tb-crsdet-done-title{font-size:16px;font-weight:800;margin-bottom:6px;color:#0F1B2D;}
.tb-crsdet-done-sub{font-size:13px;color:#7a8794;}

/* دکمه‌ی تست (فقط برای شما — شبیه‌سازی وضعیت کاربر، جایگزین دیتابیس واقعی) */
/* قدمِ ۲۳۰ — طبقِ گزارشِ صریحِ حبیب (اسکرین‌شات): این بجِ کمکیِ خودِ تیمِ توسعه هیچ قاعده‌ی
   مخفی‌کننده‌ای نداشت (برخلافِ .tb-admin-toggle که از قبل display:none!important دارد) —
   همیشه بالایِ هر صفحه دیده می‌شد. الان کاملاً مخفی است؛ اگر لازم شد دوباره برای تستِ داخلی
   دیده شود، کافی‌ست این خط حذف/کامنت شود. */
.tb-devprofile-toggle{display:none!important;align-items:center;gap:8px;font-size:10px;color:#8a6414;cursor:pointer;user-select:none;padding:4px 10px;border:1px solid #e0a82e;border-radius:999px;background:#fff7e6;flex-shrink:0;margin-right:8px;}
.tb-devprofile-toggle b{font-weight:800;}
@media (max-width:640px){.tb-devprofile-toggle{font-size:9px;padding:3px 8px;}}
.tb-crs-table .tb-crs-hours{white-space:nowrap;}
@media (max-width:640px){ table.tb-crs-table{font-size:11px;} }

/* ---- سطح اول: انتخاب رشته ---- */
/* v265: طبقِ درخواستِ کاربر، کارت‌های بزرگِ رشته (که قبلاً به‌صورتِ گرید چندردیفه بودند و فضای
   عمودیِ زیادی می‌گرفتند) به یک ردیفِ افقیِ فشرده و قابلِ اسکرول تبدیل شدند — تا سریع‌تر به
   لیستِ خودِ دوره‌ها برسیم. عرضِ هر کارت ثابت نیست (auto)، پس روی صفحه‌های عریض همه در یک ردیف
   جا می‌شوند و روی صفحه‌های باریک/موبایل با اسکرولِ افقی در دسترس می‌مانند. */
.tb-crs-hub{display:flex;flex-wrap:nowrap;overflow-x:auto;gap:8px;margin-top:10px;padding:2px 2px 10px;-webkit-overflow-scrolling:touch;scrollbar-width:thin;}
.tb-crs-hub::-webkit-scrollbar{height:6px;}
.tb-crs-hub::-webkit-scrollbar-thumb{background:#d3dae5;border-radius:4px;}
.tb-crs-hub-card{flex:0 0 auto;display:grid;grid-template-columns:auto 1fr;grid-template-rows:auto auto;align-items:center;column-gap:8px;border:1px solid #e6e9ee;border-radius:10px;padding:7px 14px;text-align:right;background:#fff;cursor:pointer;transition:.15s;white-space:nowrap;}
.tb-crs-hub-card:hover{border-color:#1789C2;box-shadow:0 4px 12px rgba(15,61,115,.14);}
.tb-crs-hub-card.tb-crs-hub-active{border-color:#1789C2;background:#eef7fc;box-shadow:0 4px 12px rgba(15,61,115,.14);}
.tb-crs-hub-card i{grid-row:1/3;font-size:18px;color:#1789C2;flex-shrink:0;}
.tb-crs-hub-name{grid-column:2;grid-row:1;font-size:12px;font-weight:800;color:#0F3D73;}
.tb-crs-hub-count{grid-column:2;grid-row:2;font-size:10px;color:#8a94a3;}
.tb-crs-hub-btn{display:none;}
@media (max-width:640px){
  .tb-crs-hub-card{padding:7px 11px;}
  .tb-crs-hub-name{font-size:11px;}
  .tb-crs-hub-count{font-size:9.5px;}
}

/* v298: طبقِ درخواستِ صریحِ مالک سایت — کارت‌های هابِ ۴ رشته (فقط در صفحهٔ «دوره‌های آموزشی»،
   نه در جاهای دیگری که همین کلاسِ .tb-crs-hub/.tb-crs-hub-card را دوباره‌استفاده می‌کنند، مثلِ
   هابِ انجمن #tbfHomeHub) حدود دو برابر بزرگ‌تر و وسط‌چین شدند. برای همین همه‌ی override ها
   با پیشوندِ #tbCrsHub اسکوپ شده‌اند تا هیچ‌جای دیگری تحتِ تأثیر قرار نگیرد. */
#tbCrsHub{flex-wrap:wrap;overflow-x:visible;justify-content:center;gap:22px;padding:14px 4px 26px;}
#tbCrsHub .tb-crs-hub-card{padding:22px 34px;border-radius:18px;min-width:230px;column-gap:16px;}
#tbCrsHub .tb-crs-hub-card i{font-size:34px;}
#tbCrsHub .tb-crs-hub-name{font-size:19px;}
#tbCrsHub .tb-crs-hub-count{font-size:14px;}
@media (max-width:640px){
  #tbCrsHub{gap:14px;padding:8px 2px 18px;}
  #tbCrsHub .tb-crs-hub-card{padding:16px 20px;min-width:150px;column-gap:10px;}
  #tbCrsHub .tb-crs-hub-card i{font-size:26px;}
  #tbCrsHub .tb-crs-hub-name{font-size:15px;}
  #tbCrsHub .tb-crs-hub-count{font-size:11px;}
}

/* این نشست — رفعِ ایرادِ گزارش‌شده («صفحه‌ی انجمن نامیزان است، آیتم‌ها باید بزرگ‌تر و شکیل‌تر
   باشند»): همان الگویِ اثبات‌شده‌ی بالا (#tbCrsHub) اکنون برای هابِ انجمن (#tbfHomeHub) هم
   پیاده شد — قبلاً این هاب عمداً از آن override مستثنا نگه داشته شده بود (کامنتِ بالا)، طبق
   همین گزارشِ تازه آن تصمیم بازبینی شد. رنگ/آیکونِ اختصاصیِ هر کارت از خودِ HTML/JS
   (page-forum.php، تابعِ tbfBuildHub) می‌آید؛ اینجا فقط اندازه/چیدمان اسکوپ شد. */
#tbfHomeHub{flex-wrap:wrap;overflow-x:visible;justify-content:center;gap:18px;padding:10px 4px 22px;}
#tbfHomeHub .tb-crs-hub-card{padding:20px 28px;border-radius:16px;min-width:200px;column-gap:14px;}
#tbfHomeHub .tb-crs-hub-card i{font-size:30px;}
#tbfHomeHub .tb-crs-hub-name{font-size:16.5px;}
#tbfHomeHub .tb-crs-hub-count{font-size:12.5px;}
@media (max-width:640px){
  #tbfHomeHub{gap:12px;padding:6px 2px 16px;}
  #tbfHomeHub .tb-crs-hub-card{padding:14px 18px;min-width:140px;column-gap:10px;}
  #tbfHomeHub .tb-crs-hub-card i{font-size:24px;}
  #tbfHomeHub .tb-crs-hub-name{font-size:13.5px;}
  #tbfHomeHub .tb-crs-hub-count{font-size:11px;}
}


/* بنرِ تبلیغاتیِ زیرِ ۴ کارتِ رشته — پرکردنِ فضای خالیِ زیرِ کاشی‌ها با معرفیِ کلیِ آکادمی +
   چند آمارِ کوتاه؛ فقط وقتی سطحِ اول (هابِ رشته‌ها) نمایش داده می‌شود دیده می‌شود، با بازشدنِ
   جزئیاتِ یک رشته پنهان می‌شود (دقیقاً هم‌زمان با خودِ #tbCrsHub). */
.tb-crs-hub-promo{margin-top:6px;border-radius:20px;padding:26px 30px;background:linear-gradient(135deg,#0F3D73,#1789C2);color:#fff;display:flex;align-items:center;gap:26px;box-shadow:0 10px 28px rgba(15,61,115,.22);}
.tb-crs-hub-promo-icon{flex-shrink:0;width:64px;height:64px;border-radius:16px;background:rgba(255,255,255,.16);display:flex;align-items:center;justify-content:center;font-size:30px;}
.tb-crs-hub-promo-text{flex:1 1 auto;min-width:200px;}
.tb-crs-hub-promo-text h3{margin:0 0 6px;font-size:17px;font-weight:800;}
.tb-crs-hub-promo-text p{margin:0;font-size:13px;line-height:1.9;color:#dfeaf7;}
.tb-crs-hub-promo-stats{display:flex;gap:22px;flex-shrink:0;}
.tb-crs-hub-promo-stat{text-align:center;min-width:64px;}
.tb-crs-hub-promo-stat b{display:block;font-size:20px;font-weight:800;}
.tb-crs-hub-promo-stat span{display:block;font-size:11px;color:#dfeaf7;margin-top:2px;}
@media (max-width:768px){
  .tb-crs-hub-promo{flex-wrap:wrap;padding:20px;gap:16px;}
  .tb-crs-hub-promo-stats{width:100%;justify-content:center;gap:18px;}
}

/* ---- سطح دوم: جزئیات یک رشته ---- */
.tb-crs-back{display:inline-flex;align-items:center;gap:6px;background:none;border:none;color:#0F3D73;font-size:12.5px;font-weight:700;cursor:pointer;font-family:inherit;padding:0;margin-bottom:10px;}
.tb-crs-back:hover{color:#1789C2;}
.tb-crs-back i{font-size:14px;}
.tb-crs-header-toggle{display:inline-flex;align-items:center;justify-content:center;background:none;border:1.5px solid #dde4ef;color:#0F3D73;border-radius:8px;width:26px;height:26px;cursor:pointer;font-family:inherit;padding:0;flex-shrink:0;transition:.15s;}
.tb-crs-header-toggle:hover{border-color:#1789C2;color:#1789C2;}
.tb-crs-header-toggle i{font-size:14px;transition:transform .2s ease;}
.tb-crs-header-toggle.tb-crs-header-open i{transform:rotate(180deg);}
.tb-crs-detail-head{font-size:15px;font-weight:800;color:#0F3D73;margin-bottom:8px;display:flex;align-items:center;gap:8px;}
.tb-crs-detail-head i{font-size:19px;color:#1789C2;}
/* قدمِ ۲۸۸ — ظرفِ مشترکِ «عنوانِ رشته + شمارنده»، هر دو در یک ردیف، وسط‌چین (نگاه کنید
   به کامنتِ بالایِ markupِ متناظر در page-courses.php). عنوان با ellipsis کوتاه می‌شود
   اگر جا کم بیاید؛ شمارنده هیچ‌وقت جمع نمی‌شود (flex-shrink:0) تا همیشه خوانا بماند. */
.tb-crs-title-row{display:flex;align-items:baseline;justify-content:center;gap:7px;flex:1;min-width:0;}
.tb-crs-title-row .tb-crs-detail-head{margin-bottom:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;}
.tb-crs-title-row .tb-crs-count{flex-shrink:0;}
.tb-crs-more{display:block;margin:18px auto 0;background:#0F3D73;color:#fff;border:none;padding:10px 26px;border-radius:8px;font-size:12.5px;font-weight:700;cursor:pointer;font-family:inherit;}
.tb-crs-more:hover{background:#0c2f59;}

/* ---- نوار چسبان بالای لیست دوره‌ها: بازگشت+عنوان+جستجو+شمارنده+صفحه‌بندی، درست زیر نوار منوی سایت می‌چسبد؛
   هدف: کاربر در وسط لیست بلند هم بدون برگشتن به بالای صفحه، جستجو/تعویض صفحه/بازگشت را در دسترس داشته باشد ---- */
.tb-crs-sticky-bar{position:sticky;top:0;z-index:130;background:#fff;padding-top:10px;padding-bottom:8px;transition:box-shadow .2s ease;}
.tb-crs-sticky-bar.tb-crs-stuck{box-shadow:0 4px 14px rgba(15,61,115,.14);border-bottom:1px solid #e6e9ee;}
.tb-crs-sticky-row1{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-bottom:8px;}
.tb-crs-sticky-row1 .tb-crs-back{margin-bottom:0;flex-shrink:0;}
.tb-crs-sticky-row1 .tb-crs-title-row{font-size:13.5px;}
.tb-crs-sticky-row2{display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap;margin-bottom:6px;}
.tb-crs-sticky-row2 .tb-crs-searchwrap{margin-bottom:0;}

/* ---- صفحه‌بندی: هم بالای جدول (تا کاربر بدون اسکرول به صفحه‌ی بعد برود) و هم پایین جدول ---- */
.tb-crs-pagination{display:flex;justify-content:center;}
.tb-crs-pagination-bottom{margin-top:16px;}
.tb-crs-pager{display:flex;align-items:center;gap:5px;flex-wrap:wrap;justify-content:center;}
.tb-crs-pg-btn{min-width:28px;height:28px;padding:0 7px;border:1.5px solid #dde4ef;background:#fff;color:#0F3D73;border-radius:7px;font-size:11.5px;font-weight:700;cursor:pointer;font-family:inherit;display:inline-flex;align-items:center;justify-content:center;transition:.15s;}
.tb-crs-pg-btn:hover:not(:disabled){border-color:#1789C2;color:#1789C2;}
.tb-crs-pg-btn.active{background:#0F3D73;border-color:#0F3D73;color:#fff;cursor:default;}
.tb-crs-pg-btn:disabled{opacity:.35;cursor:default;}
.tb-crs-pg-btn.tb-crs-pg-nav i{font-size:13px;}
.tb-crs-pg-dots{color:#8a94a3;font-size:12px;padding:0 2px;}
.tb-crs-pg-size{height:28px;padding:0 6px;border:1.5px solid #dde4ef;background:#fff;color:#0F3D73;border-radius:7px;font-size:11px;font-weight:700;cursor:pointer;font-family:inherit;margin-left:8px;}
.tb-crs-pg-size-label{font-size:10.5px;color:#8a94a3;margin-left:4px;white-space:nowrap;}
.tb-crs-pg-info{font-size:10.5px;color:#8a94a3;margin-right:8px;white-space:nowrap;}

/* ---- v161: هدر جدول دیگر position:sticky ندارد (بعد از دو تلاش قبلی که هر دو باگ شناخته‌شده‌ی
   CSS را برطرف کردند اما مشکل در مرورگر واقعی کاربر باز هم به همان شکل برگشت — یعنی sticky روی
   th در این مرورگر قابل‌اعتماد نیست)، بلکه در حالت عادی/ایستا در بالای جدول می‌ماند. به‌جایش یک
   «هدر کپی» با position:fixed (تابع tbCrsSyncTheadClone) دقیقاً روی مختصات واقعی جدول ساخته
   می‌شود — این روش به رفتار مبهم مرورگر در sticky-روی-th وابسته نیست. ---- */
/* v162: به‌جای موضع‌دهیِ تکی به هر سلول (که باعث بیرون‌زدگیِ لبه‌ی راست شد)، هدرِ کپی یک <table>ِ
   کاملِ کوچک با عرضِ ستون‌های ثابت (colgroup) داخلِ یک ظرفِ overflow:hidden با عرض/موقعیتِ دقیقاً
   برابرِ خودِ جدولِ اصلی است — پس از نظرِ ساختاری امکان ندارد از ظرفِ خودش بیرون بزند. */
#tbCrsTheadClone{position:fixed;z-index:120;overflow:hidden;}
.tb-crs-thead-clone-table{width:100%;table-layout:fixed;}

@media (max-width:640px){
  /* v214: نوار چسبانِ لیستِ دوره‌ها در موبایل (هم عمودی و هم افقی) فشرده می‌شود تا خودِ ردیف‌های
     جدول دیده شوند: صفحه‌بندیِ بالا حذف می‌شود (صفحه‌بندیِ پایینِ جدول همچنان هست)، متنِ دکمهٔ
     بازگشت فقط آیکن می‌ماند، و اندازه‌ها/فاصله‌ها کوچک‌تر می‌شوند. */
  .tb-crs-sticky-bar{padding-top:6px;padding-bottom:5px;}
  .tb-crs-sticky-row1{justify-content:space-between;margin-bottom:5px;}
  .tb-crs-back-txt{display:none;}
  /* v221: طبقِ درخواستِ کاربر، دکمه‌ی بازگشت باید همیشه واضح و قابل‌دیدن بماند (حتی اگر
     بقیه‌ی نوار به‌خاطرِ فضای کم فشرده شود) — پس‌زمینه‌ی توپر + سایه به‌جای فقط یک حاشیه‌ی
     نازک، و اندازه‌ی بزرگ‌تر برای لمسِ راحت‌تر با انگشت. */
  .tb-crs-back{padding:6px;border:1.5px solid #0F3D73;border-radius:8px;background:#0F3D73;color:#fff;box-shadow:0 2px 8px rgba(15,61,115,.35);}
  .tb-crs-back i{font-size:16px;}
  .tb-crs-back:hover{color:#fff;background:#1789C2;border-color:#1789C2;}
  .tb-crs-back i{font-size:15px;}
  .tb-crs-sticky-row1 .tb-crs-title-row{font-size:12.5px;gap:6px;}
  .tb-crs-sticky-row2{margin-bottom:0;gap:8px;}
  .tb-crs-search-inner{max-width:220px;}
  .tb-crs-search-input{max-width:220px;padding:6px 12px 6px 32px;font-size:11.5px;}
  .tb-crs-count{font-size:10px;white-space:nowrap;}
  #tbCrsPagerTop{display:none;}
  .tb-crs-pg-info{width:100%;text-align:center;margin-right:0;order:99;}
}
.tb-crs-empty{text-align:center;padding:40px 10px;color:#8a94a3;font-size:12.5px;}
.tb-crs-count{font-size:11px;color:#8a94a3;margin-bottom:8px;}
.tb-crs-searchwrap{display:flex;justify-content:center;margin-bottom:10px;}
.tb-crs-search-inner{position:relative;width:100%;max-width:340px;}
.tb-crs-search-input{width:100%;max-width:340px;border:1.5px solid #dde4ef;border-radius:22px;padding:8px 16px 8px 40px;font-size:12.5px;font-family:'Vazirmatn',sans-serif;direction:rtl;outline:none;transition:border-color .15s;box-sizing:border-box;}
.tb-crs-search-input:focus{border-color:#1789C2;}
.tb-crs-search-icon-btn{position:absolute;left:10px;top:50%;transform:translateY(-50%);width:22px;height:22px;border:none;background:transparent;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0;transition:opacity .15s;opacity:1;}
.tb-crs-search-icon-btn svg{width:16px;height:16px;display:block;}
.tb-crs-search-icon-btn:hover{opacity:.7;}
/* v213: در حالتِ افقی/ارتفاعِ‌کمِ موبایل، نوارِ چسبانِ صفحه‌ی «دوره‌ها» (بازگشت+عنوان، جستجو+تعداد،
   صفحه‌بندی — سه ردیف با پدینگ/مارجینِ معمولی) به‌تنهایی تقریباً کلِ ارتفاعِ کمِ صفحه را می‌گرفت،
   طوری‌که با اسکرول هم عملاً هیچ ردیفی از جدولِ دوره‌ها دیده نمی‌شد. این‌جا (بعد از قوانینِ پایه‌ی
   بالا، تا در نبردِ specificity برنده باشد) هر سه ردیف را فشرده می‌کنیم تا فضای واقعی برای دیدنِ
   خودِ لیستِ دوره‌ها آزاد شود. */
/* v216: طبق درخواستِ صریحِ کاربر، این حالتِ فشرده (که قبلاً فقط مخصوصِ افقی/کم‌ارتفاع بود) حالا در
   حالتِ عمودیِ موبایل هم فعال است — چون کاربر می‌خواهد سرچ + عنوانِ رشته در یک ردیف و با فونتِ
   کوچک‌تر باشد، نه فقط در افقی. */
@media (max-height:500px), (max-width:640px){
  .tb-crs-sticky-bar{padding-top:4px;padding-bottom:3px;}
  .tb-crs-back{font-size:11px;}
  .tb-crs-back i{font-size:12px;}
  .tb-crs-back-txt{display:none;}
  .tb-crs-header-toggle{width:20px;height:20px;}
  .tb-crs-header-toggle i{font-size:11px;}
  #tbCrsPagerTop{display:none;}
  .tb-crs-sticky-row2{margin-bottom:0;gap:6px;justify-content:flex-start;}
  .tb-crs-search-inner{max-width:150px;}
  .tb-crs-search-input{max-width:150px;padding:5px 12px 5px 30px;font-size:11px;}
  .tb-crs-search-icon-btn{width:18px;height:18px;}
  .tb-crs-search-icon-btn i{font-size:12.5px;}
  .tb-crs-title-row{font-size:11px;gap:5px;}
  /* قدمِ ۲۸۸ — این رشته‌ی «margin-right:auto» قبلاً برایِ جداکردنِ شمارنده از جستجو
     داخلِ همان ردیفِ row2 بود (زمانی که شمارنده آنجا زندگی می‌کرد)؛ حالا شمارنده به
     row1/.tb-crs-title-row منتقل شده، پس این حاشیه‌ی خودکار اگر بمانَد باعث می‌شود
     عنوان و شمارنده دوباره از هم فاصله بگیرند — دقیقاً برعکسِ چیزی که این قدم قرار
     است رفع کند. حذف شد. */
  .tb-crs-count{font-size:10px;white-space:nowrap;}
  /* شمارنده‌های صفحه: در یک ردیف بمانند (بدون شکستن به چند خط)، کوچک‌تر، و در صورتِ کمبودِ جا
     به‌جای شکستن به خط بعد، همان یک ردیف به‌صورتِ افقی اسکرول شود */
  .tb-crs-pagination{margin-bottom:0;}
  .tb-crs-pagination-bottom{justify-content:flex-start;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;padding-bottom:2px;}
  .tb-crs-pagination-bottom::-webkit-scrollbar{display:none;}
  .tb-crs-pager{gap:3px;flex-wrap:nowrap;}
  .tb-crs-pg-btn{min-width:22px;height:22px;padding:0 5px;font-size:10px;flex-shrink:0;}
  .tb-crs-pg-size,.tb-crs-pg-size-label,.tb-crs-pg-info{font-size:9.5px;}
  .tb-crs-pg-size{height:22px;flex-shrink:0;}
  .tb-crs-pg-size-label{flex-shrink:0;}
  /* v216: قانونِ قدیمیِ بلوکِ max-width:640 که این متن را تمام‌عرض/تک‌خط می‌کرد اینجا خنثی می‌شود
     تا «صفحه X از Y» هم داخلِ همان یک ردیفِ صفحه‌بندی بماند، نه زیرِ آن */
  .tb-crs-pg-info{width:auto;text-align:right;margin-right:6px;order:0;flex-shrink:0;}
}
.tb-news-wrap{padding:22px 18px 34px;}
.tb-news-breadcrumb{font-size:12px;color:#8794a1;margin-bottom:16px;}
.tb-news-breadcrumb b{color:#0F3D73;cursor:pointer;}
.tb-news-featured{display:grid;grid-template-columns:1fr 1fr;gap:24px;align-items:stretch;margin-bottom:32px;padding-bottom:28px;border-bottom:2px solid #eef1f5;}
.tb-news-featured-img{border-radius:12px;background-size:cover;background-position:center;min-height:270px;order:1;border:3px solid #bfe3fb;box-shadow:0 0 0 5px rgba(135,206,250,.28);position:relative;overflow:hidden;}
.tb-news-featured-text{display:flex;flex-direction:column;justify-content:center;order:2;}
.tb-news-tag{display:inline-flex;align-items:center;gap:4px;background:#C0282D;color:#fff;font-size:11px;font-weight:700;padding:4px 11px;border-radius:5px;margin-bottom:13px;width:fit-content;}
.tb-news-featured-text h2{font-size:21px;line-height:1.65;margin:0 0 12px;color:#111827;}
.tb-news-featured-text p{font-size:13.5px;line-height:2;color:#5b6b7c;margin:0 0 14px;}
.tb-news-meta{display:flex;align-items:center;flex-wrap:wrap;gap:12px;font-size:11.5px;color:#98a4b0;}
.tb-news-meta span{display:flex;align-items:center;gap:4px;}
.tb-news-section-title{font-size:15px;font-weight:800;color:#0F3D73;margin:0 0 16px;padding-right:10px;border-right:4px solid #C0282D;}
.tb-news-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:20px;margin-bottom:26px;}
.tb-news-card{cursor:pointer;transition:transform .15s ease;position:relative;}
.tb-news-card:hover{transform:translateY(-3px);}
.tb-news-card:hover h3{color:#C0282D;}
.tb-news-featured{position:relative;}
/* admin-only: انتخاب بخش (بازار مالی/بورس/کریپتو) مربوط به هر خبر — فقط در حالت ادمین دیده می‌شود */
.tb-news-sector-select{display:none;position:absolute;top:10px;right:10px;z-index:3;font-size:10.5px;font-weight:700;padding:4px 8px;border-radius:7px;border:1.5px solid #1789C2;background:#fff;color:#0F3D73;cursor:pointer;font-family:inherit;}
#tb-root.tb-admin-on .tb-news-sector-select{display:block;}
.tb-news-featured .tb-news-sector-select{top:14px;right:14px;}
.tb-news-sector-tag{display:inline-flex;align-items:center;font-size:9.5px;font-weight:800;padding:2px 8px;border-radius:5px;margin-bottom:6px;color:#fff;}
.tb-news-sector-tag.forex{background:#0EA5E9;}
.tb-news-sector-tag.bourse{background:#16A34A;}
.tb-news-sector-tag.crypto{background:#EA7C1F;}
.tb-news-empty-msg{grid-column:1/-1;text-align:center;padding:30px 10px;color:#8794a1;font-size:13px;}
.tb-news-card-img{width:100%;aspect-ratio:16/10;border-radius:9px;background-size:cover;background-position:center;margin-bottom:9px;border:2.5px solid #bfe3fb;box-shadow:0 0 0 4px rgba(135,206,250,.22);position:relative;overflow:hidden;}
.tb-news-card h3{font-size:12.5px;line-height:1.75;margin:0 0 6px;color:#1a2733;font-weight:700;transition:color .15s;}
/* قدمِ ۳۵۹ — رفعِ درخواستِ صریحِ حبیب: تمامِ خبرها (نه فقط ۱۱ تای ویژه) باید
   حداقلِ دو خط توضیحاتِ ساده داشته باشند؛ بدونِ اشغالِ فضایِ اضافیِ کارت،
   دقیقاً همان دو خط با line-clamp نمایش داده می‌شود و ادامه‌اش قطع می‌گردد. */
.tb-news-card-excerpt{font-size:11px;line-height:1.7;color:#5b6b7c;margin:0 0 6px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.tb-news-card time{font-size:10.5px;color:#98a4b0;}
/* admin-only: upload a picture directly into any news image frame */
.tb-news-img-upload{display:none;position:absolute;inset:0;background:rgba(15,61,115,.72);color:#fff;flex-direction:column;align-items:center;justify-content:center;gap:4px;font-size:10.5px;text-align:center;line-height:1.5;}
.tb-news-img-upload i{font-size:18px;}
/* قدمِ ۳۱۶ (رفعِ D1، طبقِ گزارشِ صریحِ حبیب): لوگویِ تجارت‌برتر، با اندازه و جایگاهِ
   یکسان، در گوشه‌ی بالا-چپِ *همه‌ی* تصاویرِ خبر (هم عکسِ ویژه، هم کارت‌های کوچک) —
   یک‌بار در سطحِ کلاسِ مشترکِ .tb-news-img تعریف شد تا هر خبرِ هر کاشی/سکتوری خودکار
   همین لوگو را بگیرد، بدونِ نیاز به تکرار در هر بلوکِ HTML. */
.tb-news-img::after{content:'';position:absolute;top:8px;left:8px;width:34px;height:34px;background-image:url('assets/images/header-img-1.png');background-size:contain;background-repeat:no-repeat;background-position:center;filter:drop-shadow(0 1px 3px rgba(0,0,0,.45));pointer-events:none;z-index:2;}
/* قدمِ ۳۶۳ — بلوکِ مشترکِ رسانه (عکسِ واقعیِ Featured Image یا کاشیِ جایگزینِ اورجینال + دکمه‌ی پخشِ ویدیو) */
.tb-card-media-photo{width:100%;height:100%;object-fit:cover;display:block;position:absolute;inset:0;}
.tb-card-fallback{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#0F3D73,#17325C 55%,#1789C2);}
.tb-card-fallback i{font-size:38px;color:rgba(255,255,255,.55);}
.tb-card-video-play{position:absolute;bottom:8px;right:8px;z-index:3;width:30px;height:30px;border-radius:50%;border:none;background:rgba(15,61,115,.85);color:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:13px;box-shadow:0 2px 8px -2px rgba(0,0,0,.45);}
.tb-card-video-play:hover{background:#1789C2;}
.tb-card-video-frame{position:absolute;inset:0;width:100%;height:100%;z-index:1;display:none;background:#000;}
.tb-card-media.tb-card-video-open .tb-card-video-frame{display:block;}
.tb-card-media.tb-card-video-open .tb-card-media-photo,.tb-card-media.tb-card-video-open .tb-card-fallback{display:none;}
.tb-news-card-img::after{width:24px;height:24px;top:6px;left:6px;}
#tb-root.tb-admin-on .tb-news-img{cursor:pointer;border-color:#1789C2;}
#tb-root.tb-admin-on .tb-news-img:hover .tb-news-img-upload{display:flex;}
/* قدمِ ۴۷۴ — بخشِ اخبارِ زندهِ خودکار (اولین سکتور: کریپتو) */
.tb-news-live-section{margin:12px 0 22px;padding:16px 18px;background:#F7FAFC;border:1px solid #E2E8F0;border-radius:12px;}
.tb-news-live-head{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin-bottom:10px;}
.tb-news-live-head h2{font-size:15px;font-weight:800;color:#0F3D73;margin:0;display:flex;align-items:center;gap:8px;}
.tb-news-live-badge{background:#EA7C1F;color:#fff;font-size:10px;font-weight:700;padding:2px 8px;border-radius:20px;}
.tb-news-live-note{font-size:11px;color:#64748B;}
.tb-news-live-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px;}
.tb-news-live-item{display:flex;gap:12px;padding:10px 12px;background:#fff;border:1px solid #E2E8F0;border-radius:9px;align-items:flex-start;}
.tb-news-live-thumb{flex:0 0 64px;width:64px;height:64px;border-radius:8px;overflow:hidden;background:#EEF2F7;display:flex;align-items:center;justify-content:center;}
.tb-news-live-thumb img{width:100%;height:100%;object-fit:cover;display:block;}
.tb-news-live-thumb-fallback{padding:10px;background:#F7FAFC;}
.tb-news-live-thumb-fallback img{width:100%;height:100%;object-fit:contain;}
.tb-news-live-body{flex:1;min-width:0;}
/* قدمِ ۴۷۹ — تیترِ خبرِ زنده: بولدتر + بزرگ‌تر + قرمز (طبقِ درخواستِ Habib) */
.tb-news-live-item a{font-size:15px;font-weight:800;color:#C0392B;text-decoration:none;line-height:1.7;}
.tb-news-live-item a:hover{text-decoration:underline;}
/* قدمِ ۴۷۹ — متنِ خلاصه‌یِ ترجمه‌شده‌یِ زیرِ تیتر: مشکی، فونتِ معمولی، خوانا */
.tb-news-live-excerpt{margin:6px 0 0;font-size:13px;font-weight:400;color:#1A1A1A;line-height:1.9;}
.tb-news-live-meta{display:flex;gap:10px;margin-top:6px;font-size:11px;color:#64748B;}
.tb-news-live-source{font-weight:700;color:#EA7C1F;}
@media (max-width:767px){
  .tb-news-live-section{padding:12px 14px;}
  .tb-news-live-head{flex-direction:column;align-items:flex-start;gap:4px;}
  .tb-news-live-thumb{flex-basis:52px;width:52px;height:52px;}
}
.tb-news-archive-wrap{text-align:center;margin-top:8px;}
.tb-news-archive-btn{background:linear-gradient(135deg,#0F3D73,#1789C2);color:#fff;border:none;padding:11px 36px;border-radius:9px;font-size:13px;font-weight:700;cursor:pointer;font-family:inherit;box-shadow:0 4px 14px rgba(15,61,115,.3);transition:box-shadow .15s ease,transform .1s ease,opacity .15s ease;}
.tb-news-archive-btn:hover{box-shadow:0 6px 18px rgba(15,61,115,.42);transform:translateY(-1px);}
.tb-news-archive-btn:active{transform:translateY(0) scale(.98);}
.tb-news-archive-btn:disabled{opacity:.55;cursor:default;box-shadow:none;transform:none;}
.tb-news-fadein{animation:tbNewsFadeIn .35s ease;}
@keyframes tbNewsFadeIn{from{opacity:0;transform:translateY(8px);}to{opacity:1;transform:translateY(0);}}
@media (max-width:900px){
  .tb-news-featured{grid-template-columns:1fr;}
  .tb-news-featured-img{order:1;min-height:200px;}
  .tb-news-featured-text{order:2;}
  .tb-news-grid{grid-template-columns:repeat(2,1fr);}
}

/* ==================== Contact-Us hub page (درباره ما / اطلاعات تماس / تیکت / همکاری / سلب مسئولیت / گالری) ==================== */
.tb-contact-wrap{padding:22px 18px 38px;}
.tb-contact-hero{text-align:center;margin-bottom:22px;}
.tb-contact-hero h1{font-size:19px;color:#0F3D73;margin:0 0 6px;}
.tb-contact-hero p{font-size:12.5px;color:#8794a1;margin:0;}
.tb-contact-tabs{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin-bottom:28px;}
.tb-contact-tab{border:1px solid #e3e7ec;background:#fafbfc;color:#5b6b7c;font-size:12.5px;font-weight:700;padding:8px 18px;border-radius:999px;cursor:pointer;font-family:inherit;transition:all .15s ease;}
.tb-contact-tab.active{background:linear-gradient(135deg,#0F3D73,#1789C2);border-color:#0F3D73;color:#fff;box-shadow:0 4px 12px rgba(15,61,115,.28);}
.tb-contact-panel{display:none;max-width:900px;margin:0 auto;animation:tbNewsFadeIn .3s ease;}
.tb-contact-panel.active{display:block;}
/* ==================== Trading Tools page ==================== */
.tb-tools-wrap{padding:22px 18px 40px;max-width:1080px;margin:0 auto;}
.tb-tools-breadcrumb{font-size:12px;color:#8794a1;margin-bottom:16px;}
.tb-tools-breadcrumb b{color:#0F3D73;cursor:pointer;}
.tb-tools-hero{text-align:center;margin-bottom:14px;}
.tb-tools-hero h1{font-size:19px;color:#0F3D73;margin:0 0 6px;}
.tb-tools-hero p{font-size:12.5px;color:#8794a1;margin:0;}
/* قدمِ ۳۶۷ — رفعِ درخواستِ حبیب: عنوان/زیرعنوانِ همین بلوکِ عمومی داخلِ نمایِ «مدرسه»
   (financeschool) با عنوان/زیرعنوانِ کارتِ آبی‌رنگِ tb-school-hero تکراری بود؛ حالا با
   کلاسِ tb-tools-hero-hidden (که با جاوااسکریپتِ tbSyncGenericHeroVisibility فقط برایِ
   نمایِ مدرسه/آزمون‌هایِ داخلِ مدرسه اضافه می‌شود) مخفی می‌گردد — بدونِ تغییر در بقیه‌ی
   نماها (بروکر، تقویم، ابزارها و...) که همچنان این تیتر را دارند. */
.tb-tools-hero.tb-tools-hero-hidden{display:none;}
.tb-tools-breadcrumb.tb-tools-hero-hidden{display:none;}
/* قدمِ ۳۶۷ — درخواستِ حبیب: متنِ راهنماییِ ابتدایِ هر نما (اولین پاراگراف داخلِ tb-svc-body،
   الگویِ یکسانی که در سراسرِ سایت برایِ توضیحِ هر آزمون/بخش استفاده شده) همیشه وسط‌چین باشد،
   نه راست‌چین/چپ‌چین — این یک قانونِ سراسری است و روی همه‌ی ۸۸ نمایِ خدمات/مدرسه/آزمون اثر می‌گذارد. */
.tb-svc-body>p:first-child{text-align:center;}
/* ==================== نتایج جستجوی کل سایت ==================== */
.tb-search-cat-badge{display:inline-flex;align-items:center;gap:4px;font-size:10px;font-weight:800;padding:3px 10px;border-radius:20px;}
.tb-search-cat-badge.course{background:#eaf6ff;color:#1789C2;}
.tb-search-cat-badge.service{background:#f2ecfb;color:#7C3AED;}
.tb-search-cat-badge.tool{background:#eafaf0;color:#16A34A;}
.tb-search-cat-badge.page{background:#fdf2e3;color:#C2760C;}
.tb-search-cat-badge.news{background:#fdf2e3;color:#C2760C;}
.tb-search-cat-badge.forum{background:#f2ecfb;color:#7C3AED;}
.tb-search-results-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:13px;margin-top:18px;}
.tb-search-result-card{display:flex;align-items:flex-start;gap:13px;border:1.5px solid #eef1f5;border-radius:14px;padding:16px;background:#fff;cursor:pointer;transition:transform .15s,box-shadow .15s,border-color .15s;text-align:right;}
.tb-search-result-card:hover{transform:translateY(-2px);box-shadow:0 8px 20px rgba(15,61,115,.09);border-color:#bfe3fb;}
.tb-search-result-icon{width:42px;height:42px;border-radius:11px;background:#eef2f7;display:flex;align-items:center;justify-content:center;color:#1789C2;font-size:19px;flex-shrink:0;}
.tb-search-result-info{flex:1;min-width:0;}
.tb-search-result-info h4{font-size:13px;color:#0F1B2D;margin:0 0 5px;}
.tb-search-result-info p{font-size:11px;color:#7a8494;margin:0 0 8px;line-height:1.8;}
.tb-search-related-badge{font-size:9.5px;color:#7a8494;font-weight:700;}
.tb-search-empty{text-align:center;padding:50px 20px;color:#8794a1;}
.tb-search-empty i{font-size:42px;color:#cfd8e2;margin-bottom:14px;display:block;}
.tb-search-query-hl{color:#1789C2;}
@media (max-width:760px){ .tb-search-results-grid{grid-template-columns:1fr;} }
/* v303: نوارِ مرورِ الفبایی (سرچِ سراسریِ هدر + صفحه‌ی دوره‌ها) */
.tb-alpha-bar{display:flex;flex-wrap:wrap;gap:6px;margin:14px 0 6px;}
.tb-alpha-btn{min-width:28px;height:28px;padding:0 8px;border-radius:8px;border:1.5px solid #eef1f5;background:#fff;color:#4a5568;font-family:'Vazirmatn',sans-serif;font-size:12px;font-weight:700;cursor:pointer;transition:border-color .15s,background .15s,color .15s;}
.tb-alpha-btn:hover{border-color:#bfe3fb;color:#1789C2;}
.tb-alpha-btn.active{background:#1789C2;border-color:#1789C2;color:#fff;}
/* v303: کشوی پیشنهادهای زنده‌ی سرچِ هدر (autocomplete) — همان لحظه‌ی تایپ، قبل از زدنِ اینتر */
.tb-search-suggest{position:absolute;top:calc(100% + 6px);right:0;left:0;background:#fff;border:1px solid #e3e8ef;border-radius:12px;box-shadow:0 12px 28px rgba(15,61,115,.14);z-index:60;max-height:340px;overflow-y:auto;display:none;}
.tb-search-suggest.tb-open{display:block;}
.tb-search-suggest-item{display:flex;align-items:center;gap:9px;padding:9px 12px;cursor:pointer;text-align:right;border-bottom:1px solid #f2f4f7;}
.tb-search-suggest-item:last-child{border-bottom:none;}
.tb-search-suggest-item:hover,.tb-search-suggest-item.tb-hl{background:#f5faff;}
.tb-search-suggest-item i{color:#1789C2;font-size:15px;flex-shrink:0;}
.tb-search-suggest-title{font-size:11.5px;color:#0F1B2D;font-weight:600;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.tb-search-suggest-cat{font-size:9.5px;color:#9aa5b3;flex-shrink:0;}
.tb-search-suggest-empty{padding:14px;text-align:center;font-size:11.5px;color:#9aa5b3;}
.tb-crs-alpha-wrap{padding:0 4px;}
.tb-crs-alpha-wrap .tb-alpha-bar{margin:8px 0 10px;}
/* قدمِ ۲۸۹ (آیتمِ ۴، طبقِ درخواستِ حبیب): دکمه‌ی «مرور الفبایی» و نوارِ حروفِ زیرش
   باید کاملاً از دیدِ کاربر مخفی باشند (نه آیکون، نه متن) — بدونِ حذفِ خودِ
   markup/JS (تابع‌هایِ tbCrsToggleAlpha/tbCrsAlphaClick دست‌نخورده باقی مانده‌اند،
   صرفاً دیگر از UI قابلِ فراخوانی نیستند). ترتیبِ الفباییِ پیش‌فرضِ جدول از قبل هم
   مستقلاً توسطِ خودِ WP_Query (orderby=>'title', order=>'ASC' در بالایِ فایل) تأمین
   می‌شود و با این تغییر دست‌نخورده باقی می‌ماند. */
.tb-crs-alpha-wrap{display:none !important;}
/* v307: طبقِ درخواستِ کاربر، مرورِ الفبایی باید به‌عنوانِ یک قابلیتِ اضافه (در کنارِ سرچِ سینونیمی)
   باقی بماند، اما خودِ ردیفِ حروف دیگر همیشه نمایش داده نشود و فضا اشغال نکند — پس به یک دکمه‌ی
   کوچکِ باز/بسته‌شو کنارِ کادرِ جستجو منتقل شد؛ ردیفِ حروف فقط با کلیکِ روی این دکمه باز می‌شود. */
.tb-alpha-toggle-btn{display:inline-flex;align-items:center;justify-content:center;gap:5px;border:1.5px solid #dde4ef;color:#0F3D73;border-radius:8px;height:30px;padding:0 10px;background:#fff;cursor:pointer;font-family:'Vazirmatn',sans-serif;font-size:11.5px;font-weight:700;flex-shrink:0;transition:.15s;white-space:nowrap;}
.tb-alpha-toggle-btn i{font-size:14px;}
.tb-alpha-toggle-btn:hover{border-color:#1789C2;color:#1789C2;}
.tb-alpha-toggle-btn.active{background:#1789C2;border-color:#1789C2;color:#fff;}
.tb-alpha-bar-wrap.tb-collapsed{display:none;}
.tb-crs-searchwrap{gap:8px;align-items:center;}
@media (max-width:480px){ .tb-alpha-toggle-btn{height:26px;padding:0 8px;font-size:10.5px;} .tb-alpha-toggle-btn i{font-size:12.5px;} }
.tb-tools-section-title{font-size:15px;font-weight:800;color:#0F3D73;margin:16px 0 14px;padding-right:10px;border-right:4px solid #C0282D;}
.tb-svc-body{font-size:12.5px;line-height:2.05;color:#3b4656;}
/* نمای عمومیِ «مدرسه‌ی این بخش به‌زودی» (schoolsoon، page-services.php) — آیکونِ خنثیِ مدور روی پس‌زمینه‌ی روشن، وسط‌چین */
.tb-svc-schoolsoon{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:56px 20px;text-align:center;}
.tb-svc-schoolsoon .tb-school-hero-icon{width:52px;height:52px;border-radius:14px;background:#eef3f9;color:#0F3D73;font-size:24px;}
.tb-svc-body h3{font-size:14px;color:#0F3D73;margin:22px 0 10px;font-weight:800;}
.tb-svc-body h4{font-size:12.5px;color:#C0282D;margin:16px 0 8px;font-weight:700;}
/* قدمِ ۳۷۹ — هم‌الگو با رفعِ Justify متنِ درسِ مدرسه: متنِ صفحاتِ خدمات/تحلیل هم در کلِ
   سایت (همه‌ی ۱۱ سکتور، چون این کلاس مشترک است) هم‌تراز و مرتب شد. پاراگرافِ اولِ هر
   نما (تعریف‌شده در بالای فایل، خطِ tb-svc-body>p:first-child) هنوز به‌عمد وسط‌چین
   می‌ماند چون آن قانون اختصاصی‌تر است و همیشه بر این قانونِ عمومی اولویت دارد. */
.tb-svc-body p{margin:0 0 12px;text-align:justify;text-justify:inter-word;}
.tb-svc-body ul,.tb-svc-body ol{margin:8px 0 14px;padding-right:20px;}
.tb-svc-body li{margin-bottom:6px;}
.tb-svc-body table{width:100%;border-collapse:collapse;margin:10px 0 18px;font-size:11.5px;}
.tb-svc-body th,.tb-svc-body td{border:1px solid #e7ebf0;padding:7px 10px;text-align:right;}
.tb-svc-body th{background:#f5f8fb;color:#0F3D73;}
.tb-svc-note{background:#FFF8E6;border-right:4px solid #E8A33D;padding:10px 14px;border-radius:6px;font-size:11.5px;color:#7a5b1e;margin:14px 0;line-height:1.9;}
.tb-svc-note.tb-svc-band{background:#F0F7F4;border-right:4px solid #1E9E6B;color:#1c4536;text-align:right;}
.tb-svc-note.tb-svc-band b{display:block;font-size:13px;margin-bottom:4px;color:#136b47;}
.tb-svc-note.tb-svc-band p{margin:0;}
.tb-svc-warn{background:#FDEFEF;border-right:4px solid #C0282D;padding:10px 14px;border-radius:6px;font-size:11.5px;color:#8a2b2b;margin:14px 0;line-height:1.9;}
/* ---- گرید کارت مؤسسات/کارگزاری‌های همکار: نسخه‌ی گسترده با فیلدهای بیشتر (شهر، تلفن، مجوز) — کارت‌بروکر پایه حفظ شده، فقط بلوک اطلاعات بلندتر شده ---- */
.tb-broker-facts b{color:#3b4656;}
.tb-broker-card .tb-broker-badge{display:inline-block;font-size:10px;font-weight:700;background:#E8F7F4;color:#0D9488;border-radius:6px;padding:3px 8px;margin-bottom:10px;}
.tb-svc-steps{counter-reset:svcstep;list-style:none;padding-right:0;margin:12px 0 18px;}
.tb-svc-steps li{counter-increment:svcstep;position:relative;padding-right:34px;margin-bottom:14px;}
.tb-svc-steps li::before{content:counter(svcstep);position:absolute;right:0;top:0;width:24px;height:24px;background:#0F3D73;color:#fff;border-radius:50%;font-size:11px;font-weight:800;display:flex;align-items:center;justify-content:center;}
.tb-svc-quiz-card{background:#fff;border:1.5px solid #e3e8ee;border-radius:18px;padding:24px 26px;box-shadow:0 6px 22px rgba(15,61,115,.08);margin:14px 0 18px;}
.tb-svc-quiz-q{border:1.5px solid #e7ebf0;border-radius:14px;padding:20px 22px;margin-bottom:10px;display:none;background:#fafbfc;}
.tb-svc-quiz-q.tb-quiz-active{display:block;animation:tbQuizFadeIn .25s ease;background:#fff;border-color:#cfe0ee;box-shadow:0 3px 12px rgba(15,61,115,.06);}
@keyframes tbQuizFadeIn{from{opacity:0;transform:translateY(6px);}to{opacity:1;transform:translateY(0);}}
.tb-svc-quiz-q b{display:block;font-size:15px;line-height:1.95;color:#0F1B2D;margin-bottom:16px;font-weight:700;}
.tb-svc-quiz-opts{display:flex;flex-direction:column;gap:9px;}
.tb-svc-quiz-opts label{display:flex;align-items:center;gap:10px;font-size:14px;color:#3b4656;cursor:pointer;padding:12px 16px;border-radius:11px;border:1.5px solid #eef1f5;transition:border-color .15s,background .15s,color .15s;}
.tb-svc-quiz-opts label:hover{border-color:#1789C2;background:#f5faff;}
.tb-svc-quiz-opts label:has(input:checked){border-color:#0EA5E9;background:#eaf6ff;color:#0F3D73;font-weight:700;}
.tb-svc-quiz-opts label input[type="radio"]{width:18px;height:18px;accent-color:#0EA5E9;flex-shrink:0;cursor:pointer;}
.tb-svc-quiz-back{display:inline-flex;align-items:center;gap:5px;font-size:13px;color:#5b6b7c;cursor:pointer;margin-bottom:16px;background:#f2f5f8;border:1.5px solid #e7ebf0;font-family:inherit;padding:8px 16px;border-radius:9px;font-weight:600;transition:border-color .15s,color .15s;}
.tb-svc-quiz-back:hover{color:#1789C2;border-color:#1789C2;}
/* دکمه‌ی ثابت «بازگشت به فهرست تست‌ها» — در سربرگ مشترک صفحه خدمات قرار دارد (نه داخل کارت آزمون)،
   پس در تمام حالت‌های هر تست (معرفی/سؤالات/نتیجه) نمایش داده می‌شود و هرگز با منطق مخفی‌سازی سؤال/نتیجه پنهان نمی‌شود */
.tb-svc-back-catalog-btn{display:inline-flex;align-items:center;gap:5px;font-size:12.5px;color:#0F3D73;cursor:pointer;margin-bottom:14px;background:#eef4fb;border:1.5px solid #cfe0f2;font-family:inherit;padding:7px 15px;border-radius:9px;font-weight:700;transition:border-color .15s,color .15s,background .15s;}
.tb-svc-back-catalog-btn:hover{background:#dceafb;border-color:#1789C2;color:#1789C2;}
.tb-svc-quiz-result{display:none;background:#EEF6FC;border:1.5px solid #cfe4f2;border-radius:14px;padding:20px 22px;margin-top:18px;font-size:14px;line-height:2;}
.tb-svc-quiz-review{margin-top:20px;border-top:1px dashed #cfe4f2;padding-top:16px;}
.tb-svc-quiz-review-title{font-size:14px;font-weight:800;color:#0F3D73;margin-bottom:12px;}
.tb-svc-quiz-review-item{display:flex;align-items:flex-start;gap:10px;padding:12px 14px;border-radius:10px;margin-bottom:8px;background:#fff;border:1px solid #e7ebf0;font-size:13.5px;line-height:1.9;}
.tb-svc-quiz-review-item i{font-size:16px;margin-top:1px;flex-shrink:0;}
.tb-svc-quiz-review-item.ok i{color:#22C55E;}
.tb-svc-quiz-review-item.bad i{color:#C0282D;}
.tb-svc-quiz-review-item.skip i{color:#9aa5b1;}
.tb-svc-quiz-review-item b{display:block;color:#0F1B2D;font-weight:700;margin-bottom:3px;font-size:14px;}
.tb-svc-quiz-review-item span{color:#7a8494;}
.tb-svc-quiz-retake{margin-top:16px;background:#fff;color:#0F3D73;border:1.5px solid #0F3D73;padding:11px 22px;border-radius:9px;font-size:13.5px;font-weight:700;cursor:pointer;font-family:inherit;}
.tb-svc-quiz-retake:hover{background:#0F3D73;color:#fff;}
.tb-svc-video-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:16px;margin:14px 0;}
@media (max-width:640px){
  .tb-svc-video-grid{grid-template-columns:1fr;}
  .tb-svc-quiz-card{padding:14px 12px;}
  /* v337: طبقِ گزارشِ کاربر (اسکرین‌شاتِ موبایل) — گزینه‌ی چهارمِ هر سؤالِ آزمونِ لیکرت (کاملاً
     موافقم) پایینِ صفحه جا می‌ماند و کاربر باید برای هر سؤال جداگانه اسکرول کند. فاصله‌ها/فونت‌های
     کارتِ سؤال روی موبایل جمع‌تر شدند تا متنِ سؤال + هر ۴ گزینه در یک نمای عادی جا شوند. */
  .tb-svc-quiz-meta{margin-bottom:10px;padding-bottom:10px;font-size:12.5px;}
  .tb-svc-quiz-progress-wrap{height:9px;margin-bottom:5px;}
  .tb-svc-quiz-progress-pct{margin-bottom:10px;font-size:11px;}
  .tb-svc-quiz-q{padding:13px 14px;margin-bottom:0;}
  .tb-svc-quiz-q b{font-size:13.5px;line-height:1.7;margin-bottom:11px;}
  .tb-svc-quiz-opts{gap:6px;}
  .tb-svc-quiz-opts label{padding:9px 12px;font-size:12.5px;gap:8px;}
  .tb-svc-quiz-opts label input[type="radio"]{width:16px;height:16px;}
}

/* ---- کارت‌های معرفی بروکر ---- */
.tb-broker-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:16px;margin:14px 0 20px;}
@media (max-width:700px){ .tb-broker-grid{grid-template-columns:1fr;} }
.tb-broker-card{border:1px solid #e7ebf0;border-radius:14px;padding:18px;background:#fff;box-shadow:0 3px 10px rgba(15,61,115,.06);}
.tb-broker-card h4{font-size:14.5px;color:#0F1B2D;margin:0 0 10px;font-weight:800;}
.tb-broker-logo{height:46px;display:flex;align-items:center;margin-bottom:12px;font-size:19px;font-weight:800;letter-spacing:.3px;}
.tb-broker-facts{font-size:11.5px;color:#5b6b7c;line-height:2;margin-bottom:14px;}
.tb-broker-facts b{color:#0F1B2D;font-weight:700;}
.tb-broker-btns{display:flex;gap:8px;}
.tb-broker-btn{flex:1;text-align:center;padding:9px 10px;border-radius:8px;font-size:11.5px;font-weight:700;cursor:pointer;text-decoration:none;display:block;}
.tb-broker-btn.site{background:#eef2f7;color:#0F3D73;}
.tb-broker-btn.review{background:#0F3D73;color:#fff;}
.tb-broker-card{position:relative;}
.tb-admin-card-del{display:none;position:absolute;top:10px;left:10px;width:24px;height:24px;border-radius:50%;background:#C0282D;color:#fff;align-items:center;justify-content:center;cursor:pointer;font-size:13px;z-index:3;border:none;}
#tb-root.tb-admin-on .tb-admin-card-del{display:flex;}
.tb-admin-add-card{display:none;align-items:center;justify-content:center;gap:6px;border:1.5px dashed #b9c6d4;border-radius:14px;color:#5b6b7c;font-size:12px;font-weight:700;cursor:pointer;background:#fafbfc;min-height:120px;}
#tb-root.tb-admin-on .tb-admin-add-card{display:flex;}
.tb-broker-review-content{max-width:100%;}
.tb-broker-review-head{display:flex;align-items:center;gap:12px;margin-bottom:14px;}
.tb-broker-review-logo{font-weight:800;font-size:17px;}
.tb-broker-review-stars{color:#1789C2;font-size:13px;letter-spacing:2px;}
.tb-broker-review-facts{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px;font-size:10.5px;color:#556;}
.tb-broker-review-facts span{background:#f2f4f7;border-radius:6px;padding:4px 9px;}
.tb-broker-review-content h4{font-size:12.5px;color:#0F3D73;margin:14px 0 8px;font-weight:800;}
.tb-broker-review-content ul{margin:0 0 6px;padding-right:18px;font-size:11.5px;line-height:1.95;color:#3b4656;}
.tb-broker-review-content ul.cons li{color:#7a3535;}
.tb-broker-review-content p{font-size:11.5px;line-height:1.95;color:#3b4656;margin:0 0 4px;}
.tb-broker-review-cta{display:block;text-align:center;background:#0F3D73;color:#fff;padding:11px 0;border-radius:8px;font-size:12.5px;font-weight:800;text-decoration:none;margin-top:16px;}
.tb-broker-review-cta:hover{background:#0c2f59;}
.tb-broker-review-disclaimer{font-size:10px;color:#9aa5b1;text-align:center;margin-top:8px;}

/* ---- تایمر و نوار پیشرفت آزمون‌های روان‌شناسی ---- */
.tb-svc-quiz-meta{display:flex;align-items:center;justify-content:space-between;font-size:14px;font-weight:600;color:#3b4656;margin-bottom:14px;padding-bottom:14px;border-bottom:1px dashed #e3e8ee;}
.tb-svc-quiz-meta span:first-child b{color:#0F3D73;font-size:16px;font-weight:800;}
.tb-svc-quiz-timer{display:inline-flex;align-items:center;gap:6px;font-family:'Courier New',monospace;font-weight:800;font-size:15px;color:#fff;background:#0F3D73;padding:7px 16px;border-radius:20px;direction:ltr;unicode-bidi:isolate;letter-spacing:.5px;}
.tb-svc-quiz-timer.tb-quiz-timer-warn{background:#C0282D;animation:tbQuizTimerPulse 1s ease infinite;}
.tb-svc-quiz-timer.tb-quiz-timer-paused{background:#8794a1;animation:none;}
@keyframes tbQuizTimerPulse{0%,100%{opacity:1;}50%{opacity:.65;}}
.tb-svc-quiz-conclude-wrap{background:#EEF6FC;border:1.5px dashed #9dc8e6;border-radius:14px;padding:26px 22px;text-align:center;margin-top:6px;}
.tb-svc-quiz-conclude-wrap p{font-size:14px;color:#3b4656;margin:0 0 16px;line-height:1.9;}
.tb-svc-quiz-conclude-btn{background:linear-gradient(135deg,#0F3D73,#1789C2);color:#fff;border:none;padding:13px 30px;border-radius:10px;font-size:14.5px;font-weight:800;cursor:pointer;font-family:inherit;display:inline-flex;align-items:center;gap:8px;box-shadow:0 6px 18px rgba(15,61,115,.25);transition:transform .15s,box-shadow .15s;}
.tb-svc-quiz-conclude-btn:hover{transform:translateY(-2px);box-shadow:0 8px 22px rgba(15,61,115,.32);}
.tb-svc-quiz-elapsed{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:#0F3D73;background:#eef2f7;padding:7px 16px;border-radius:20px;margin-bottom:16px;font-weight:700;}
.tb-svc-quiz-elapsed b{font-family:'Courier New',monospace;direction:ltr;unicode-bidi:isolate;}
.tb-svc-quiz-progress-wrap{position:relative;height:12px;border-radius:8px;background:#eef1f5;overflow:hidden;margin-bottom:8px;box-shadow:inset 0 1px 3px rgba(15,61,115,.08);}
.tb-svc-quiz-progress-bar{height:100%;width:0%;border-radius:8px;background:linear-gradient(90deg,#38BDF8,#0EA5E9);transition:width .35s cubic-bezier(.4,0,.2,1),background .3s ease;box-shadow:0 0 8px rgba(14,165,233,.45);}
.tb-svc-quiz-progress-pct{display:block;font-size:12.5px;color:#8794a1;margin-bottom:18px;font-weight:600;}

/* ---- پیشنهاد کتاب و فیلم مرتبط، انتهای نتیجه آزمون ---- */
.tb-svc-quiz-recos{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;margin-top:16px;}
@media (max-width:640px){ .tb-svc-quiz-recos{grid-template-columns:1fr;} }
.tb-svc-quiz-reco{background:#fff;border:1px solid #dfe8ef;border-radius:10px;padding:12px 14px;display:flex;gap:10px;align-items:flex-start;cursor:pointer;transition:transform .15s,box-shadow .15s;}
.tb-svc-quiz-reco:hover{transform:translateY(-2px);box-shadow:0 6px 14px rgba(15,61,115,.1);}
.tb-svc-quiz-reco i{font-size:20px;color:#0EA5E9;margin-top:2px;}
.tb-svc-quiz-reco b{display:block;font-size:13px;color:#0F1B2D;margin-bottom:3px;}
.tb-svc-quiz-reco span{font-size:12px;color:#7a8494;line-height:1.7;}
.tb-svc-video-card{border:1px solid #e7ebf0;border-radius:12px;overflow:hidden;position:relative;}
.tb-svc-video-thumb{height:150px;background:linear-gradient(135deg,#0F3D73,#1789C2);display:flex;align-items:center;justify-content:center;color:#fff;font-size:34px;}
.tb-svc-video-info{padding:12px 14px;}
.tb-svc-video-info b{display:block;font-size:12px;color:#0F1B2D;margin-bottom:5px;}
.tb-svc-video-info p{font-size:11px;color:#7a8494;margin:0;line-height:1.8;}
/* ==================== آموزش بازارهای مالی (منابع آموزشی ساختارمند) ==================== */
.tb-edu-cat-title{font-size:14px;font-weight:800;color:#0F3D73;margin:24px 0 12px;padding-right:10px;border-right:4px solid #1789C2;display:flex;align-items:center;gap:7px;}
.tb-edu-cat-title:first-of-type{margin-top:4px;}
.tb-edu-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:13px;}
.tb-edu-card{border:1.5px solid #e7ebf0;border-radius:13px;padding:15px;background:#fff;position:relative;transition:transform .15s,box-shadow .15s,border-color .15s;}
.tb-edu-card:hover{transform:translateY(-2px);box-shadow:0 6px 16px rgba(15,61,115,.08);border-color:#bfe3fb;}
.tb-edu-card-type{display:inline-flex;align-items:center;gap:4px;font-size:10px;font-weight:800;padding:3px 9px;border-radius:20px;margin-bottom:10px;}
.tb-edu-card-type.article{background:#eaf6ff;color:#1789C2;}
.tb-edu-card-type.video{background:#fdeeee;color:#C0282D;}
.tb-edu-card-type.pdf{background:#f2ecfb;color:#7C3AED;}
.tb-edu-card-type.webinar{background:#eafaf0;color:#16A34A;}
.tb-edu-card b{display:block;font-size:12.5px;color:#0F1B2D;margin-bottom:6px;line-height:1.7;}
.tb-edu-card p{font-size:11px;color:#7a8494;margin:0;line-height:1.8;}
@media (max-width:760px){ .tb-edu-grid{grid-template-columns:1fr;} }
@media (min-width:761px) and (max-width:1000px){ .tb-edu-grid{grid-template-columns:repeat(2,1fr);} }
/* ==================== تحلیل بازارهای مالی — کارت ویدیویی روی کارت خبر/تحلیل ==================== */
.tb-analysis-video-toggle{position:absolute;top:8px;left:8px;z-index:3;background:rgba(15,61,115,.85);color:#fff;border:none;border-radius:20px;padding:5px 11px;font-size:10px;font-weight:700;cursor:pointer;display:none;align-items:center;gap:4px;font-family:inherit;}
#tb-root.tb-admin-on .tb-analysis-video-toggle{display:inline-flex;}
.tb-analysis-video-frame{position:absolute;inset:0;width:100%;height:100%;border:0;z-index:2;}

/* ==================== مدرسه بازارهای مالی (v326 — بازطراحی مدرن) — هیرو گرادیانی با رینگ پیشرفت دایره‌ای،
   پلکان افقی سطوح، سایدبار کارتی با حالت hover/active، انیمیشن تعویض درس، و کارت جشن پایان سطح.
   الگوی پایه (پلکانی/سطح‌بندی‌شده) از v325 حفظ شده؛ فقط چیدمان بصری مدرن شده — منطق sector-aware دست‌نخورده است. ==================== */
/* قدمِ ۳۶۸ — رفعِ درخواستِ صریحِ حبیب («چرا تیتر سمتِ راست است؟»): پیش از این
   justify-content:space-between بلاکِ عنوان را به یک گوشه (راست) و حلقه‌ی پیشرفت را به
   گوشه‌ی دیگر می‌راند؛ حالا عنوان/زیرعنوان با justify-content:center واقعاً وسطِ جعبه‌اند
   و حلقه‌ی پیشرفت به‌جای اشغالِ کنارِ عنوان، با position:absolute به گوشه منتقل شده — بدونِ
   به‌هم‌ریختنِ لِیاوتِ مرکزی. */
.tb-school-hero{position:relative;overflow:hidden;background:linear-gradient(135deg,#0f3d73 0%,#1789C2 100%);border-radius:12px;padding:14px 44px;margin-bottom:10px;display:flex;align-items:center;justify-content:center;color:#fff;box-shadow:0 6px 18px -12px rgba(15,61,115,.5);}
.tb-school-hero::before{content:'';position:absolute;inset:0;background:radial-gradient(circle at 85% -10%,rgba(255,255,255,.16),transparent 55%);pointer-events:none;}
.tb-school-hero-info{position:relative;z-index:1;display:flex;align-items:center;gap:10px;justify-content:center;text-align:center;}
.tb-school-hero-icon{width:30px;height:30px;border-radius:9px;background:rgba(255,255,255,.16);display:flex;align-items:center;justify-content:center;font-size:15px;flex-shrink:0;}
.tb-school-hero-title{font-size:13px;font-weight:800;margin:0 0 2px;text-align:center;}
.tb-school-hero-sub{font-size:10px;opacity:.85;margin:0;text-align:center;}
.tb-school-hero-ring{position:absolute;z-index:2;top:50%;left:10px;transform:translateY(-50%);width:34px;height:34px;flex-shrink:0;}
@media (max-width:520px){.tb-school-hero{padding:14px 40px 14px 40px;}.tb-school-hero-info{flex-direction:column;gap:6px;}}
.tb-school-hero-ring svg{width:100%;height:100%;transform:rotate(-90deg);}
.tb-school-ring-track{fill:none;stroke:rgba(255,255,255,.22);stroke-width:6;}
.tb-school-ring-fill{fill:none;stroke:#fff;stroke-width:6;stroke-linecap:round;stroke-dasharray:213.63;stroke-dashoffset:213.63;transition:stroke-dashoffset .5s ease;}
.tb-school-ring-pct{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:9.5px;font-weight:800;}

/* v328: بازطراحی «مدرسه بازارهای مالی» — منوی دوره‌ها به‌جای پلکانِ ساختگی، یک دورهٔ واقعی از کاتالوگ. */
/* v329→v330: طبقِ بازخوردِ کاربر (اسکرین‌شات)، نسخه‌ی v329 (دراپ‌داون/باتم‌شیت) هنوز به‌اندازه‌ی کافی
   «هیچ فضایی اشغال نمی‌کند» نبود و جهتِ بازشدنش هم دقیقاً همان کشوی راست‌به‌چپِ درخواستی نبود. این
   نسخه با یک off-canvas واقعی جایگزین شد: پنلِ دوره‌ها همیشه position:fixed و کاملاً بیرون از
   جریانِ سند است (نه grid دوستونه‌ی قبلی) — نه در حالتِ بسته و نه در حالتِ باز، هیچ فضایی از محتوای
   اصلی نمی‌گیرد؛ چون هر دو حالت روی محتوا شناور (overlay) است. با کلیک/لمسِ دکمه از لبه‌ی راستِ
   صفحه با اسلایدِ نرم به چپ باز می‌شود (transform:translateX)، با یک بک‌دراپِ نیمه‌شفاف پشتش. */
/* ==================== قدمِ ۳۷۰ — رفعِ درخواستِ صریحِ حبیب: «لیستِ دوره‌ها» دیگر یک
   کشویِ شناور با پردهٔ تیره‌ی تمام‌صفحه نیست (که هم در گوشی هم در دسکتاپ غیراستاندارد
   بود و گاه خودش زودتر از موعد بسته می‌شد). اکنون یک آکاردئونِ درون‌خطی‌ست — دقیقاً
   هم‌الگو با بقیه‌ی آکاردئون‌هایِ همین صفحه (.tb-school-extra-quizzes/.tb-school-course):
   سرِ بخش (همان دکمه‌ی picker-btn) کلیک‌پذیر است و بدنه با انیمیشنِ max-height باز/جمع
   می‌شود — بدونِ position:fixed، بدونِ پرده، و بدونِ بسته‌شدنِ خودکار با کلیکِ بیرون. ==================== */
.tb-school-wrap{display:flex;flex-direction:column;gap:10px;}
.tb-school-picker{width:100%;background:#f7fafd;border:1px solid #eef1f5;border-radius:14px;padding:14px 16px;transition:border-color .2s ease,background .2s ease;}
.tb-school-picker.open{border-color:#c9dcee;background:#eef5fb;}
.tb-school-picker-btn{width:100%;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:0;background:none;border:none;font-size:12.5px;font-weight:800;color:#0f3d73;cursor:pointer;text-align:right;font-family:inherit;transition:transform .18s cubic-bezier(.4,0,.2,1),opacity .18s ease;}
.tb-school-picker-btn:active{transform:scale(.98);opacity:.85;}
.tb-school-picker-btn i.ti-list-details{color:#1789C2;font-size:15px;flex-shrink:0;}
.tb-school-picker-label{white-space:nowrap;flex:1;text-align:right;}
.tb-school-picker-caret{flex-shrink:0;font-size:13px;color:#9aa4b2;transition:transform .25s ease;}
.tb-school-picker.open .tb-school-picker-caret{transform:rotate(180deg);color:#1789C2;}
.tb-school-backdrop{display:none;}
.tb-school-sidebar{
  display:flex;flex-direction:column;gap:8px;
  max-height:0;overflow:hidden;opacity:0;
  transition:max-height .32s ease,opacity .22s ease,margin-top .28s ease;
  margin-top:0;
}
.tb-school-picker.open .tb-school-sidebar{max-height:6000px;opacity:1;margin-top:14px;}
.tb-school-drawer-head{display:none;}
.tb-school-sidebar-list{display:flex;flex-direction:column;gap:8px;}
.tb-school-sidebar .tb-crs-pager{padding:6px 2px 2px;}
.tb-school-course{border-radius:12px;overflow:hidden;background:#fff;border:1px solid #eef1f5;box-shadow:0 2px 8px -6px rgba(15,32,58,.1);transition:box-shadow .2s ease,border-color .2s ease;}
.tb-school-course:hover{box-shadow:0 6px 18px -10px rgba(15,61,115,.28);border-color:#dbe6f3;}
.tb-school-course.open{border-color:#1789C2;box-shadow:0 6px 18px -8px rgba(23,137,194,.28);}
.tb-school-course-head{display:flex;align-items:center;gap:9px;padding:12px 13px;font-size:12.5px;font-weight:700;color:#1f2d3d;cursor:pointer;background:#fff;transition:background .2s cubic-bezier(.4,0,.2,1),transform .18s cubic-bezier(.4,0,.2,1);}
.tb-school-course-head:hover{background:#f7fafd;}
.tb-school-course-head:active{transform:scale(.99);}
.tb-school-course-num{flex-shrink:0;width:22px;height:22px;border-radius:50%;background:#eef2f7;color:#7a8794;font-size:10.5px;font-weight:800;display:flex;align-items:center;justify-content:center;}
.tb-school-course.open .tb-school-course-num{background:#1789C2;color:#fff;}
.tb-school-course-ic{flex-shrink:0;font-size:16px;color:#1789C2;}
.tb-school-course-title{flex:1;line-height:1.6;}
.tb-school-course-caret{flex-shrink:0;font-size:14px;color:#9aa4b2;transition:transform .25s ease;}
.tb-school-course.open .tb-school-course-caret{transform:rotate(180deg);color:#1789C2;}
.tb-school-course-body{max-height:0;overflow:hidden;transition:max-height .28s ease,padding .28s ease;padding:0 13px;}
.tb-school-course.open .tb-school-course-body{max-height:120px;padding:0 13px 12px;}
.tb-school-course-meta{display:flex;flex-wrap:wrap;gap:8px;font-size:10.5px;color:#7a8794;margin-bottom:8px;}
.tb-school-course-meta span{display:inline-flex;align-items:center;gap:4px;}
.tb-school-course-badge{display:inline-flex;align-items:center;gap:4px;font-size:10px;font-weight:700;background:#fdf3e2;color:#a8720e;border-radius:12px;padding:3px 9px;}
.tb-school-course-badge.started{background:#e7f3fb;color:#0f3d73;}
.tb-school-content{background:#fff;border:1px solid var(--border);border-radius:12px;padding:26px 28px;min-height:380px;box-shadow:0 2px 10px -6px rgba(15,32,58,.08);display:flex;flex-direction:column;}
.tb-school-placeholder{margin:auto;text-align:center;color:#9aa4b2;display:flex;flex-direction:column;align-items:center;gap:10px;padding:40px 10px;}
.tb-school-placeholder i{font-size:34px;color:#c4cbd4;}
.tb-school-placeholder p{font-size:12.5px;max-width:280px;line-height:1.9;}
.tb-school-course-fade{animation:tbSchoolFadeIn .35s ease;}
@keyframes tbSchoolFadeIn{from{opacity:0;transform:translateY(8px);}to{opacity:1;transform:translateY(0);}}
/* قدمِ ۵۷۷ — درخواستِ صریحِ حبیب (با اسکرین‌شاتِ کادرکشیده‌شده): جعبه‌ی عنوان/ساعتِ دوره
   باید وسط‌چین باشد، نه با چیدمانِ پیش‌فرضِ راست‌چین/کشیده‌شده در کنارِ دکمه‌ی بازگشت.
   این جعبه در stage==='lessons' (لیستِ درس‌هایِ یک سرفصلِ انتخاب‌شده) هنوز نمایش داده
   می‌شود (بر خلافِ stage==='levels'/'lesson' که در قدمِ ۵۷۵ جمع می‌شوند) چون تنها جایی
   است که نامِ دوره/سرفصلِ جاری را برایِ کاربر نگه می‌دارد. */
.tb-school-lesson-meta{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:14px;font-size:12px;color:#8a97a6;margin-bottom:20px;text-align:center;}
.tb-school-lesson-meta span{display:inline-flex;align-items:center;gap:5px;}
.tb-school-lesson-title{font-size:18px;font-weight:800;color:#12203a;margin:0 0 8px;text-align:center;}
/* قدمِ ۵۷۲ — رفعِ درخواستِ صریحِ حبیب: «کلی مطالبِ جانبی بالایِ صفحه در موبایل فضا اشغال
   کرده». وقتی کاربر داخلِ یک درس است (tb-school-headbox-collapsed از tbSchoolSetStage)،
   جعبه‌ی عنوان/ساعت/پیش‌نیازِ دوره با انیمیشنِ نرم جمع می‌شود تا متنِ خودِ درس زودتر و با
   فضایِ بیشتر دیده شود؛ با خروج از درس دوباره باز می‌شود. */
.tb-school-course-headbox{max-height:160px;opacity:1;overflow:hidden;transition:max-height .28s ease,opacity .22s ease,margin .22s ease;}
.tb-school-course-headbox.tb-school-headbox-collapsed{max-height:0;opacity:0;margin:0;pointer-events:none;}
/* قدمِ ۵۷۴ — رفعِ درخواستِ صریحِ حبیب: دکمه‌ی «بازگشت به دوره‌ها» و تیترِ دوره هر کدام
   ردیفِ جداگانه‌ای می‌گرفتند (فاصله‌ی خالیِ عمودیِ اضافه بالایِ صفحه). حالا هر دو در یک
   ردیفِ فلکسِ واحد‌اند: دکمه ثابت می‌ماند (flex:none)، جعبه‌ی عنوان فضایِ باقی‌مانده را
   می‌گیرد (flex:1) — تا فضایِ بیشتری برایِ متنِ درس/لیستِ سرفصل‌ها زیرِ آن باز شود. */
.tb-school-course-toprow{display:flex;align-items:flex-start;gap:12px;}
.tb-school-course-toprow .tb-school-back-courses{margin-bottom:0;flex:none;}
.tb-school-course-toprow .tb-school-course-headbox{flex:1;min-width:0;}
@media (max-width:600px){
  .tb-school-lesson-title{font-size:16px;margin:0 0 6px;}
  .tb-school-lesson-meta{gap:10px;margin-bottom:14px;font-size:11.5px;}
  .tb-school-course-toprow{gap:8px;}
  /* قدمِ ۵۷۸ — درخواستِ صریحِ حبیب: دکمه‌ی «بازگشت به …» فقط در موبایل حذف شود؛
     در دسکتاپ دست‌نخورده می‌ماند (این قانون فقط زیرِ همین مرزِ ۶۰۰px است). هر دو
     نمونهٔ این دکمه (چه داخلِ tb-school-course-toprow، چه در حالتِ قفل‌شدهٔ دوره) را
     می‌گیرد چون هر دو کلاسِ .tb-school-back-courses را دارند. */
  .tb-school-back-courses{display:none!important;}
}
/* قدمِ ۳۷۱ — رفعِ درخواستِ صریحِ حبیب: با انتخابِ یک دوره از «لیستِ دوره‌ها»، بقیه‌ی
   دوره‌های دیگر کاملاً از دید پنهان می‌شوند (نه فقط جمع/بسته) تا فقط همان یک دورهٔ
   انتخاب‌شده روی صفحه بماند؛ کلاسِ has-active توسطِ tbSchoolRenderSidebar تنظیم می‌شود. */
/* قدمِ ۳۷۳ — رفعِ درخواستِ صریحِ حبیب: «نباید چیدمانِ دو-ستونی شود». چیدمانِ دوستونیِ
   قدمِ ۳۷۲ (بالا) کاملاً برداشته شد. رفتارِ درستِ خواسته‌شده در همه‌ی سایزها (نه فقط
   موبایل) یکسان است: لیستِ کاملِ دوره‌ها نمایش داده می‌شود؛ با انتخابِ یک دوره، بقیه‌ی
   دوره‌ها به‌جایِ ناپدیدشدنِ آنی (display:none)، با یک انیمیشنِ نرمِ جمع‌شدن + محوشدن +
   کمی جابه‌جاییِ افقی به سمتِ راست از دید خارج می‌شوند (نه اینکه از DOM حذف شوند) —
   دقیقاً هم‌الگو با بقیه‌ی آکاردئون‌هایِ صفحه که با max-height انیمیت می‌شوند، نه
   display. با زدنِ دکمه‌ی «بازگشت به دوره‌ها» (پایین‌تر، tb-school-back-courses)
   همان دوره‌های پنهان‌شده با همان انیمیشن دوباره نرم ظاهر می‌شوند. */
.tb-school-course{
  border-radius:12px;overflow:hidden;background:#fff;border:1px solid #eef1f5;
  box-shadow:0 2px 8px -6px rgba(15,32,58,.1);
  max-height:240px;opacity:1;transform:translateX(0);
  transition:box-shadow .2s ease,border-color .2s ease,
    max-height .4s cubic-bezier(.4,0,.2,1),opacity .32s ease,
    transform .36s cubic-bezier(.4,0,.2,1),margin .32s ease;
}
.tb-school-sidebar-list.has-active .tb-school-course:not(.open){
  max-height:0;opacity:0;transform:translateX(14px);margin:0;border-width:0;
  box-shadow:none;pointer-events:none;
}
.tb-school-coming{position:relative;background:linear-gradient(135deg,#f4f8fc,#eaf2fa);border:1px dashed #b9d3e8;border-radius:14px;padding:22px 20px;text-align:center;margin-top:auto;}
.tb-school-coming i{font-size:26px;color:#1789C2;margin-bottom:8px;display:block;}
.tb-school-coming b{display:block;font-size:13.5px;color:#0f3d73;margin-bottom:6px;}
.tb-school-coming p{font-size:12px;color:#4c6180;margin:0;line-height:1.9;}
/* قدمِ ۵۵۸ — کارتِ قفلِ گیتِ دسترسی (مدرسه/مبانیِ آموزشی/تقویم)، هم‌الگو با tb-school-coming */
.tb-gate-locked{position:relative;background:linear-gradient(135deg,#fdf5f0,#fbeae0);border:1px dashed #e3b48c;border-radius:14px;padding:22px 20px;text-align:center;margin-top:12px;}
.tb-gate-locked i{font-size:26px;color:#c2661a;margin-bottom:8px;display:block;}
.tb-gate-locked b{display:block;font-size:13.5px;color:#7a3d0f;margin-bottom:6px;}
.tb-gate-locked p{font-size:12px;color:#7a5a44;margin:0 0 12px;line-height:1.9;}
.tb-gate-locked .tb-school-lv-nav-btn{display:inline-flex;}
/* قدمِ ۵۶۳ — هشدارِ درون‌خطیِ قرمز برایِ بخشِ «تحلیل» (بازارهایِ مالی/بورس/ارزِ دیجیتال):
   برخلافِ tb-gate-locked که کلِ محتوا را جایگزین می‌کند، این کلاس محتوایِ اصلی را دست‌نخورده
   نگه می‌دارد و فقط یک نوارِ هشدارِ قرمز بالایِ لیست، هنگامِ تلاش برایِ بازکردنِ یک آیتم، نشان می‌دهد. */
.tb-gate-warn-inline{display:none;position:relative;background:#fdecea;border:1px solid #f5b5ae;border-right:4px solid #d32f2f;border-radius:10px;padding:14px 16px;margin-bottom:14px;align-items:center;gap:10px;flex-wrap:wrap;}
.tb-gate-warn-inline.show{display:flex;}
.tb-gate-warn-inline i{font-size:20px;color:#d32f2f;flex-shrink:0;}
.tb-gate-warn-inline span{font-size:12.5px;color:#8a1c14;line-height:1.8;flex:1;min-width:180px;}
.tb-gate-warn-inline button{background:#d32f2f;color:#fff;border:0;border-radius:8px;padding:8px 14px;font-size:12px;cursor:pointer;white-space:nowrap;}
.tb-gate-warn-inline button:hover{background:#b8281f;}
/* قدمِ ۵۶۴ — مودالِ «جزئیاتِ کاملِ تحلیل»، برایِ کاربرِ دارایِ دسترسی */
.tb-analysis-modal{display:none;position:fixed;inset:0;background:rgba(15,25,40,.55);z-index:9999;align-items:center;justify-content:center;padding:16px;}
.tb-analysis-modal.show{display:flex;}
.tb-analysis-modal-box{background:#fff;border-radius:16px;max-width:640px;width:100%;max-height:88vh;overflow-y:auto;position:relative;box-shadow:0 20px 50px rgba(0,0,0,.25);}
.tb-analysis-modal-close{position:absolute;top:10px;left:10px;width:32px;height:32px;border-radius:50%;border:0;background:#fff;box-shadow:0 2px 8px rgba(0,0,0,.15);font-size:20px;line-height:1;cursor:pointer;color:#333;z-index:2;}
.tb-analysis-modal-close:hover{background:#f2f2f2;}
.tb-analysis-modal-img{width:100%;height:220px;background-size:cover;background-position:center;border-radius:16px 16px 0 0;background-color:#0F3D73;}
.tb-analysis-modal-content{padding:20px 22px 24px;}
.tb-analysis-modal-title{font-size:16px;margin:0 0 6px;color:#1a2a3a;}
.tb-analysis-modal-time{display:block;font-size:11.5px;color:#8a97a5;margin-bottom:14px;}
.tb-analysis-modal-body{font-size:13px;line-height:2.1;color:#3a4655;}
.tb-analysis-modal-soon{display:flex;align-items:center;gap:8px;background:#f5f7fa;border-radius:10px;padding:14px;color:#6b7683;font-size:12.5px;}
.tb-analysis-modal-soon i{font-size:18px;color:#9aa5b1;}
/* قدمِ ۵۶۵ — رابطِ ادمین برایِ نوشتن/ذخیره‌یِ متنِ کاملِ تحلیل، داخلِ همان مودال.
   فقط وقتی توکنِ ادمین در مرورگر باشد نمایش داده می‌شود (نگاه کنید به JS). */
.tb-analysis-modal-edit-wrap{margin-top:16px;border-top:1px dashed #e3e8ee;padding-top:14px;}
.tb-analysis-modal-edit-btn{display:inline-flex;align-items:center;gap:6px;background:#eef4fa;color:#1789C2;border:1px solid #cfe3f2;border-radius:10px;padding:7px 14px;font-size:12px;font-weight:700;cursor:pointer;}
.tb-analysis-modal-edit-btn:hover{background:#e2eefa;}
.tb-analysis-modal-edit-box{margin-top:10px;}
.tb-analysis-modal-edit-textarea{width:100%;box-sizing:border-box;border:1px solid #d8dee5;border-radius:10px;padding:10px 12px;font-family:inherit;font-size:13px;line-height:1.9;resize:vertical;min-height:160px;}
.tb-analysis-modal-edit-actions{display:flex;align-items:center;gap:10px;margin-top:8px;}
.tb-analysis-modal-edit-status{font-size:11.5px;color:#6b7683;}

/* ==================== مدرسه بازارهای مالی (v335) — محتوای واقعیِ سطح‌بندی‌شده (الگوی بی‌بی‌پیپس) داخل
   هر دوره‌ی مدرسه. برخلافِ سطح‌بندیِ سراسریِ v325 (که برای کل «بخش» بود)، این ساختار داخلِ پنلِ محتوای
   یک دورهٔ خاص (مثلاً «تحلیلگر بازارهای مالی بین‌المللی») تو‌در‌تو می‌شود؛ منطق sector-aware و لیست
   دوره‌های v328 دست‌نخورده می‌ماند — فقط برای دوره‌هایی که در window.TB_SCHOOL_LESSONS محتوا دارند،
   به‌جای جعبه‌ی «به‌زودی»، همین پلکانِ سطح/درس نمایش داده می‌شود. ==================== */
.tb-school-lv-wrap{margin-top:22px;border-top:1px solid #eef1f5;padding-top:18px;}
/* قدمِ ۳۶۸ — رفعِ درخواستِ حبیب: پلکانِ سطوح دیگر اسکرولِ افقی/فشرده نیست (که در گوشی باعثِ
   له‌شدن/تداخلِ دکمه‌ها می‌شد)؛ حالا مثلِ یک شبکه‌ی مرتب می‌شکند (flex-wrap) و با کوچک‌ترشدنِ
   خودِ دکمه‌ها (بالاتر) در هر عرضی جا می‌شود، هم در گوشی هم در دسکتاپ. */
.tb-school-lv-stepper{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px;}
/* ==================== قدمِ ۳۶۶ — رفعِ درخواستِ صریحِ حبیب: پلکانِ سطوح شلوغ/گیج‌کننده بود
   (دایره‌های عدد + برچسبِ جدا زیرشان، چند حالتِ رنگیِ نزدیک‌به‌هم). بازطراحی شد: هر سطح یک
   دکمه‌ی مستطیلیِ یکپارچه است؛ فقط سطحِ «انتخاب‌شده» توپرِ آبی است و همه‌ی سطوحِ دیگر (چه
   تمام‌شده چه نشده) یک‌دست خاکستری/کم‌رنگ و غیرفعال به‌نظر می‌رسند تا در هر لحظه، دقیقاً یک
   سطح در کانونِ توجه باشد. سطحِ تمام‌شده (که انتخاب نیست) فقط یک تیکِ کوچکِ آبی در گوشه دارد. */
/* قدمِ ۳۶۸ — رفعِ درخواستِ صریحِ حبیب: قالبِ دکمه‌های سطح کوچک‌تر شد (min-width/padding کمتر)
   و به‌جایِ حاشیه‌ی تقریباً نامرئیِ قبلی، هر حالت حاشیه‌ی رنگیِ مشخصِ خودش را دارد؛ تیکِ گوشه‌ی
   سطحِ تمام‌شده هم حذف شد (نگاه کنید به بالایِ همین فایل، تابعِ tbSchoolLvRenderStepper). */
.tb-school-lv-step{flex:0 1 auto;min-width:50px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;cursor:pointer;text-align:center;padding:7px 10px;border-radius:9px;background:#f2f4f7;border:1.5px solid #d7dfe7;color:#7a8794;font-family:inherit;transition:background .15s,border-color .15s,color .15s,transform .15s;position:relative;}
.tb-school-lv-step:hover{background:#e8edf3;border-color:#c3ccd6;}
.tb-school-lv-step-dot{font-size:13px;font-weight:900;line-height:1;}
.tb-school-lv-step-label{font-size:9px;font-weight:700;line-height:1.35;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;}
.tb-school-lv-step.current{background:linear-gradient(135deg,#0f3d73,#1789C2);border-color:#0a2d54;color:#fff;box-shadow:0 3px 10px -2px rgba(15,61,115,.45);transform:translateY(-1px);}
.tb-school-lv-step.current .tb-school-lv-step-label{color:#fff;}
.tb-school-lv-step.current:hover{background:linear-gradient(135deg,#0f3d73,#1789C2);}
.tb-school-lv-step.done:not(.current){background:#eef1f5;border-color:#b9d3e8;color:#7091b3;}
.tb-school-lv-step.locked{cursor:not-allowed;background:#f7f8fa;border-color:#edf0f3;color:#c3ccd6;}
.tb-school-lv-step.locked:hover{background:#f7f8fa;}
.tb-school-lv-step.shake{animation:tbSchoolLvShake .4s;}
@keyframes tbSchoolLvShake{10%,90%{transform:translateX(-1px);}20%,80%{transform:translateX(2px);}30%,50%,70%{transform:translateX(-4px);}40%,60%{transform:translateX(4px);}}
.tb-school-lv-lessons-row{margin-bottom:20px;}
.tb-school-lv-lessons-head{display:flex;align-items:center;gap:6px;font-size:11.5px;font-weight:800;color:#0f3d73;margin-bottom:12px;}
.tb-school-lv-lessons-head i{font-size:14px;color:#1789C2;}
.tb-school-lv-lessons-chips{display:flex;flex-wrap:wrap;gap:8px;}
.tb-school-lv-chip{display:inline-flex;align-items:center;gap:7px;font-family:inherit;font-size:11.5px;font-weight:600;color:#4c5c70;background:#fff;padding:8px 12px;border-radius:999px;cursor:pointer;border:1px solid #e7ebf0;transition:background .15s,border-color .15s,color .15s;}
.tb-school-lv-chip:hover{background:#f7fafd;}
.tb-school-lv-chip.current{background:#0f3d73;border-color:#0f3d73;color:#fff;}
.tb-school-lv-chip.current .tb-school-lv-check{color:#fff;}
.tb-school-lv-chip.current .tb-school-lv-chip-num{background:rgba(255,255,255,.22);color:#fff;}
.tb-school-lv-chip.done:not(.current) .tb-school-lv-check{color:#1789C2;}
.tb-school-lv-chip-num{width:16px;height:16px;border-radius:50%;background:#eef2f7;color:#7a8794;font-size:9px;font-weight:800;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;}
.tb-school-lv-check{font-size:14px;color:#c4cbd4;flex-shrink:0;}
/* ==================== قدمِ ۲۱۱ — رفعِ باگِ گزارش‌شده (حبیب): لیستِ سرفصل‌ها (که پیش‌تر همیشه
   به‌صورتِ ردیفِ chipهایِ باز/تمام‌قد زیرِ پلکان نمایش داده می‌شد و در موبایل، به‌خاطرِ طولِ
   متنِ فارسیِ عنوانِ درس‌ها، هر chip عملاً کلِ عرضِ صفحه را می‌گرفت و به یک ستونِ عمودیِ
   بلند تبدیل می‌شد) حالا به یک کشویِ سمتِ‌راست تبدیل شده — دقیقاً هم‌الگو با کشویِ
   «لیستِ دوره‌ها»یِ بالاترِ همین صفحه (.tb-school-picker/.tb-school-sidebar) — تا دیدِ
   کاربر را اشغال نکند و با یک دکمه‌ی کوچک از کنار همیشه در دسترس بماند. */
/* قدمِ ۳۶۸ — رفعِ درخواستِ صریحِ حبیب: دکمه‌ی کوچکِ «شمارشگر» و کشوی شناور حذف شدند؛
   سرفصل‌های سطح حالا یک آکاردئونِ درون‌خطی‌اند (سرِ آکاردئون + بدنه‌ی جمع/بازشونده)،
   هم‌الگو با آکاردئونِ «لیستِ دوره‌ها»یِ همین صفحه (.tb-school-course)، و با انتخابِ هر
   سطح به‌صورتِ پیش‌فرض باز است. */
.tb-school-lv-syl-head{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 13px;background:#f7fafd;border:1.5px solid #e7ebf0;border-radius:12px;cursor:pointer;font-size:12px;font-weight:800;color:#0f3d73;transition:background .15s,border-color .15s;}
.tb-school-lv-syl-head:hover{background:#eef5fb;}
.tb-school-lv-syl-head span{display:flex;align-items:center;gap:6px;}
.tb-school-lv-syl-head i.ti-list-details{color:#1789C2;font-size:14px;}
.tb-school-lv-syl-caret{flex-shrink:0;font-size:12px;color:#9aa4b2;transition:transform .25s ease;}
.tb-school-lv-syllabus.open .tb-school-lv-syl-head{border-color:#c9dcee;background:#eef5fb;border-bottom-left-radius:0;border-bottom-right-radius:0;}
.tb-school-lv-syllabus.open .tb-school-lv-syl-caret{transform:rotate(180deg);color:#1789C2;}
.tb-school-lv-syl-body{max-height:0;overflow:hidden;transition:max-height .3s ease;border:1.5px solid transparent;border-top:none;border-radius:0 0 12px 12px;}
.tb-school-lv-syllabus.open .tb-school-lv-syl-body{max-height:2400px;border-color:#c9dcee;padding:10px;}
.tb-school-lv-syl-list{display:flex;flex-direction:column;gap:8px;}
.tb-school-lv-syl-row{display:flex;align-items:center;gap:10px;width:100%;font-family:inherit;font-size:12px;font-weight:600;color:#3a4a5c;background:#f7fafd;padding:10px 12px;border-radius:12px;cursor:pointer;border:1px solid #eef1f5;transition:background .15s,border-color .15s,color .15s;text-align:right;}
.tb-school-lv-syl-row:hover{background:#eef5fb;}
.tb-school-lv-syl-row.current{background:#0f3d73;border-color:#0f3d73;color:#fff;}
.tb-school-lv-syl-row.current .tb-school-lv-syl-num{background:rgba(255,255,255,.22);color:#fff;}
.tb-school-lv-syl-row .ti-circle-check-filled{color:#1789C2;}
.tb-school-lv-syl-row.current .ti-circle-check-filled{color:#fff;}
.tb-school-lv-syl-row .ti-circle{color:#c4cbd4;}
.tb-school-lv-syl-num{width:18px;height:18px;flex-shrink:0;border-radius:50%;background:#eef2f7;color:#7a8794;font-size:9.5px;font-weight:800;display:inline-flex;align-items:center;justify-content:center;}
@media (max-width:640px){.tb-school-lv-syl-row{font-size:11px;padding:9px 11px;}}

/* قدمِ ۳۷۴ — آکاردئونِ «سرفصل‌های دوره» (levels-row): مرحله‌ی جاافتاده‌ای که در قدمِ
   ۳۷۱ حذف شد و جایگزینی نداشت. دقیقاً هم‌الگو با .tb-school-lv-syl-* بالا (که خودش
   هم‌الگو با .tb-school-course است)، فقط با پیشوندِ متفاوت تا با آکاردئونِ درس‌ها قاطی
   نشود — چون این دو اکنون دو آکاردئونِ پشتِ‌سرهمِ مستقل‌اند (سرفصل‌ها → درس‌ها). */
.tb-school-lv-levels-row{margin-bottom:14px;}
/* قدمِ ۵۷۵ — درخواستِ صریحِ حبیب: متنِ «سرفصل‌های این دوره» وسطِ جعبه باشد، نه
   چسبیده به یک گوشه (justify-content:space-between قبلی). فلشِ بازشو با
   position:absolute در گوشه نگه داشته می‌شود تا با متنِ وسط‌چین تداخل نکند. */
.tb-school-lv-pick-head{display:flex;align-items:center;justify-content:center;position:relative;gap:8px;padding:10px 34px;background:#f7fafd;border:1.5px solid #e7ebf0;border-radius:12px;cursor:pointer;font-size:12px;font-weight:800;color:#0f3d73;transition:background .15s,border-color .15s;text-align:center;}
.tb-school-lv-pick-head:hover{background:#eef5fb;}
.tb-school-lv-pick-head span{display:flex;align-items:center;gap:6px;}
.tb-school-lv-pick-head i.ti-list-details{color:#1789C2;font-size:14px;}
.tb-school-lv-pick-caret{position:absolute;left:13px;top:50%;transform:translateY(-50%);flex-shrink:0;font-size:12px;color:#9aa4b2;transition:transform .25s ease;}
.tb-school-lv-levels.open .tb-school-lv-pick-head{border-color:#c9dcee;background:#eef5fb;border-bottom-left-radius:0;border-bottom-right-radius:0;}
.tb-school-lv-levels.open .tb-school-lv-pick-caret{transform:translateY(-50%) rotate(180deg);color:#1789C2;}
.tb-school-lv-pick-body{max-height:0;overflow:hidden;transition:max-height .35s cubic-bezier(.4,0,.2,1);border:1.5px solid transparent;border-top:none;border-radius:0 0 12px 12px;}
.tb-school-lv-levels.open .tb-school-lv-pick-body{max-height:2400px;border-color:#c9dcee;padding:10px;}
.tb-school-lv-pick-list{display:flex;flex-direction:column;gap:8px;}
.tb-school-lv-pick-row{display:flex;align-items:center;gap:10px;width:100%;font-family:inherit;font-size:12px;font-weight:600;color:#3a4a5c;background:#f7fafd;padding:10px 12px;border-radius:12px;cursor:pointer;border:1px solid #eef1f5;transition:background .15s cubic-bezier(.4,0,.2,1),border-color .15s,color .15s,transform .15s cubic-bezier(.4,0,.2,1);text-align:right;}
.tb-school-lv-pick-row:hover{background:#eef5fb;}
.tb-school-lv-pick-row:active{transform:scale(.99);}
.tb-school-lv-pick-row.current{background:#0f3d73;border-color:#0f3d73;color:#fff;}
.tb-school-lv-pick-row.current .tb-school-lv-pick-num{background:rgba(255,255,255,.22);color:#fff;}
.tb-school-lv-pick-row.locked{opacity:.5;cursor:not-allowed;}
.tb-school-lv-pick-num{flex-shrink:0;width:22px;height:22px;border-radius:50%;background:#eef2f7;color:#7a8794;font-size:10.5px;font-weight:800;display:flex;align-items:center;justify-content:center;}
@media (max-width:640px){.tb-school-lv-pick-row{font-size:11px;padding:9px 11px;}}

/* ==================== قدمِ ۳۷۵ — «ناوبریِ پله‌ایِ لغزان» (درخواستِ صریحِ حبیب) ====================
   کلِ بخشِ مدرسه حالا مثلِ یک اپلیکیشنِ موبایل کار می‌کند: در هر لحظه فقط یک «پله» روی
   صفحه است (لیستِ دوره‌ها ← لیستِ سرفصل‌ها ← لیستِ درس‌ها ← محتوایِ درس)، پله‌ی قبلی با
   یک انیمیشنِ نرم به سمتِ راست می‌لغزد و محو می‌شود و پله‌ی بعدی از سمتِ راست وارد
   می‌شود. کلاس‌ها را فقط JS (tbSchoolSetStage/tbSchoolStepToggle در page-services.php)
   می‌گذارد و برمی‌دارد. چون پله‌ی خارج‌شده از DOM حذف نمی‌شود (فقط جمع/محو می‌شود)،
   بازگشت به آن بدونِ ساختِ دوباره و بدونِ پرش انجام می‌شود.
   نکته‌ی مهم: max-height پایه فقط برایِ پنل‌هایِ «لیستی» (که ارتفاعِ کراندار دارند) داده
   شده؛ پنلِ محتوایِ درس عمداً max-height پایه ندارد تا درس‌هایِ بلند هرگز بریده نشوند. */
.tb-school-step{
  transform:translateX(0);opacity:1;
  transition:transform .42s cubic-bezier(.22,.61,.36,1),opacity .3s ease,
    max-height .42s cubic-bezier(.22,.61,.36,1),margin .3s ease,
    padding .3s ease,border-width .3s ease;
}
.tb-school-step.tb-step-out{
  transform:translateX(112%);opacity:0;max-height:0!important;
  margin-top:0!important;margin-bottom:0!important;
  padding-top:0!important;padding-bottom:0!important;
  border-width:0!important;overflow:hidden!important;pointer-events:none;
}
.tb-school-step.tb-step-in{animation:tbSchoolSlideInRight .45s cubic-bezier(.22,.61,.36,1) both;}
@keyframes tbSchoolSlideInRight{from{opacity:0;transform:translateX(72px);}to{opacity:1;transform:translateX(0);}}
#tbSchoolHero.tb-school-step{max-height:340px;}
#tbSchoolPicker.tb-school-step{max-height:6000px;}
.tb-school-lv-levels.tb-school-step,.tb-school-lv-syllabus.tb-school-step{max-height:3200px;}
@media (prefers-reduced-motion:reduce){
  .tb-school-step{transition:opacity .2s ease;}
  .tb-school-step.tb-step-in{animation:none;}
}
/* قدمِ ۳۷۵ — حذفِ فضایِ اضافیِ بالا/پایینِ پنلِ محتوا: min-height ثابتِ ۳۸۰ پیکسل باعث
   می‌شد حتی وقتی فقط یک لیستِ کوتاه روی صفحه است، یک جعبه‌ی سفیدِ بلند و خالی دیده شود
   (همان چیزی که در عکسِ علامت‌گذاری‌شده مشخص بود). حالا جعبه دقیقاً به اندازه‌ی
   محتوایش است. */
.tb-school-content{min-height:0;padding:18px 20px;}
@media (max-width:640px){.tb-school-content{padding:14px 13px;}}
.tb-school-lv-wrap{margin-top:14px;padding-top:12px;}
.tb-school-content .tb-school-back-courses{margin-bottom:10px;}
.tb-school-lv-content{min-width:0;}
.tb-school-lv-lesson-fade{animation:tbSchoolFadeIn .3s ease;}
/* قدمِ ۳۷۱ — رفعِ درخواستِ صریحِ حبیب: ردیفِ بالای درس (زمانِ مطالعه + دکمه‌ی آزمون)،
   دکمه‌ی آزمون در سمتِ‌چپ (پایانِ فلکسِ RTL) و زمانِ مطالعه در سمتِ‌راست می‌نشیند. */
.tb-school-lv-lesson-topbar{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-bottom:10px;}
.tb-school-lv-lesson-topbar .tb-school-lv-lesson-meta{margin-bottom:0;}
.tb-school-lv-lesson-meta{display:flex;align-items:center;gap:6px;font-size:11px;color:#8a97a6;margin-bottom:10px;}
.tb-school-lv-lesson-meta i{font-size:13px;}
.tb-school-lv-lesson-title{font-size:19px;font-weight:900;color:#0f3d73;margin:0 0 14px;line-height:1.5;}
/* قدمِ ۵۷۲ — جمع‌ترشدنِ تاپ‌بار/عنوانِ درس در موبایل، هم‌راستا با جمع‌شدنِ جعبه‌ی عنوانِ
   دوره (بالاتر) — تا فاصله‌ی خالیِ پیش از متنِ اصلیِ درس کمتر شود. */
@media (max-width:600px){
  .tb-school-lv-lesson-topbar{margin-bottom:6px;}
  .tb-school-lv-lesson-title{font-size:16px;margin:0 0 8px;}
}
/* قدمِ ۳۷۱ — رفعِ درخواستِ صریحِ حبیب: دکمه فقط «آزمون» است (بدونِ نامِ سطح) و آیکونش
   یک ستاره‌ی زردِ توپر شد (به‌جایِ آیکونِ برق/آبیِ قبلی). */
.tb-school-lv-quiz-quicklink{display:inline-flex;align-items:center;gap:6px;font-family:inherit;font-size:11px;font-weight:700;color:#0f3d73;background:#eef5fb;border:1.5px solid #c9dcee;border-radius:999px;padding:6px 14px;cursor:pointer;margin:0;flex-shrink:0;transition:background .15s,border-color .15s;}
.tb-school-lv-quiz-quicklink:hover{background:#dcecf9;border-color:#1789C2;}
.tb-school-lv-quiz-quicklink i{font-size:14px;color:#f5b400;}
.tb-school-lv-lesson-body{font-size:12.5px;line-height:2.1;color:#374559;}
/* قدمِ ۳۵۷ — حالتِ خالیِ پیش از انتخابِ سطح (جایگزینِ بازشدنِ خودکارِ درس) */
.tb-school-lv-placeholder{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:40px 16px;color:#8a97a6;font-size:13px;font-weight:600;text-align:center;}
.tb-school-lv-placeholder i{font-size:30px;color:#c3ccd6;}
.tb-school-lv-lesson-body h4{font-size:13px;font-weight:800;color:#0f3d73;margin:16px 0 8px;}
/* قدمِ ۳۷۹ — طبقِ درخواستِ صریحِ حبیب (اسکرین‌شات: خطوطِ متنِ درس لبه‌ی چپشان ناهم‌تراز و
   نامرتب دیده می‌شد، به‌خصوص در گوشی؛ خواسته: «مثلِ روزنامه/مقاله‌ی رسمی» در کلِ سایت):
   متنِ محتوایِ آموزشی Justify شد — هم لبه‌ی راست و هم لبه‌ی چپِ هر خط (به‌جز خطِ آخرِ هر
   پاراگراف که طبقِ استانداردِ RTL خودکار سمتِ راست می‌ماند) صاف و هم‌تراز می‌شود؛
   text-justify:inter-word پخشِ فاصله‌ی بینِ کلماتِ فارسی را یکدست‌تر می‌کند. بدونِ
   مدیاکوئری، چون خواسته‌ی کاربر کلِ سایت بود، نه فقط گوشی. */
.tb-school-lv-lesson-body p{margin:0 0 10px;text-align:justify;text-justify:inter-word;}
.tb-school-lv-lesson-body ul{margin:0 0 10px;padding-inline-start:20px;display:flex;flex-direction:column;gap:6px;}
.tb-school-lv-lesson-body b{color:#12203a;}
.tb-school-lv-lesson-body img.tb-school-lv-zoomable{cursor:zoom-in;transition:filter .15s;}
.tb-school-lv-lesson-body img.tb-school-lv-zoomable:hover{filter:brightness(.96);}
.tb-school-lv-img-zoom-overlay{position:fixed;inset:0;background:rgba(12,18,28,.82);display:flex;align-items:center;justify-content:center;z-index:99999;padding:24px;cursor:zoom-out;animation:tbSchoolFadeIn .18s ease;}
.tb-school-lv-img-zoom-overlay img{max-width:96vw;max-height:92vh;width:auto;height:auto;border-radius:12px;box-shadow:0 10px 40px rgba(0,0,0,.45);cursor:zoom-out;}
.tb-school-lv-example{background:#f4f8fc;border-inline-start:3px solid #1789C2;border-radius:8px;padding:10px 12px;margin:12px 0;font-size:12px;color:#374559;line-height:1.9;}
.tb-school-lv-nav-row{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-top:18px;padding-top:16px;border-top:1px solid #eef1f5;}
.tb-school-lv-nav-btn{display:inline-flex;align-items:center;gap:6px;font-family:inherit;font-size:11.5px;font-weight:700;padding:9px 14px;border-radius:999px;border:none;cursor:pointer;background:linear-gradient(135deg,#0f3d73,#1789C2);color:#fff;transition:filter .18s cubic-bezier(.4,0,.2,1),transform .18s cubic-bezier(.4,0,.2,1);}
.tb-school-lv-nav-btn i{font-size:13px;}
.tb-school-lv-nav-btn:hover{filter:brightness(1.06);}
.tb-school-lv-nav-btn:active:not(:disabled){transform:scale(.96);}
.tb-school-lv-nav-btn.secondary{background:#f2f5f9;color:#4c5c70;}
.tb-school-lv-nav-btn:disabled{opacity:.5;cursor:not-allowed;}
/* قدمِ ۳۷۲ — دکمه‌ی «بازگشت به دوره‌ها»: فقط در گوشی/تبلت معنا دارد (جایی که پنلِ
   دوره‌ها بعد از انتخاب یک دوره جمع می‌شود)؛ در دسکتاپ ستونِ کناری همیشه کاملاً
   دیده می‌شود (نگاه کنید به media query پایینِ همین فایل)، پس این دکمه اضافی و
   گمراه‌کننده خواهد بود و آنجا مخفی می‌ماند. */
.tb-school-back-courses{margin-bottom:16px;}
.tb-school-lv-end{margin-top:18px;background:linear-gradient(135deg,#f4f8fc,#eaf2fa);border:1px dashed #b9d3e8;border-radius:14px;padding:20px;text-align:center;}
.tb-school-lv-end i.tb-school-lv-end-ic{font-size:26px;color:#1789C2;display:block;margin-bottom:8px;}
.tb-school-lv-end b{display:block;font-size:13px;color:#0f3d73;margin-bottom:6px;}
.tb-school-lv-end p{font-size:11.5px;color:#4c6180;margin:0 0 12px;line-height:1.8;}
@media (max-width:640px){.tb-school-lv-chip{font-size:10.5px;padding:7px 10px;}}

/* ==================== قدمِ ۲۰۴ — میزبانِ آزمون داخلِ «مدرسه» + ردیفِ «آزمون‌های تکمیلی».
   دکمه‌ها از کلاسِ آماده‌ی .tb-school-lv-nav-btn استفاده می‌کنند، فقط چیدمانِ اطراف‌شان اینجاست. ==================== */
.tb-school-quiz-host{margin-top:18px;border-top:1px solid #eef1f5;padding-top:18px;}
/* قدمِ ۳۶۵ — رفعِ گزارشِ حبیب: «بازگشت به درس‌ها» با کلاسِ secondary خاکستری/کم‌رنگ بود؛
   حالا رنگیِ برند (گرادیانِ آبی، هم‌الگو با سایرِ دکمه‌هایِ اصلیِ سایت) و کمی بزرگ‌تر است. */
.tb-school-quiz-back{margin-bottom:14px;background:linear-gradient(135deg,#0f3d73,#1789C2)!important;color:#fff!important;padding:10px 16px!important;box-shadow:0 2px 8px rgba(15,61,115,.25);}
.tb-school-quiz-back:hover{filter:brightness(1.08);}
.tb-school-extra-quizzes{margin-top:18px;background:#f7fafd;border:1px solid #eef1f5;border-radius:14px;padding:16px 18px;}
/* قدمِ ۳۶۸ — رفعِ درخواستِ حبیب: این بخش‌ها حالا آکاردئونی‌اند؛ سرِ بخش قابلِ کلیک است و
   ردیفِ دکمه‌ها (بدنه‌ی آکاردئون) با max-height جمع/باز می‌شود. */
.tb-school-extra-title{display:flex;align-items:center;justify-content:space-between;gap:6px;font-size:11.5px;font-weight:800;color:#0f3d73;margin:0;cursor:pointer;}
.tb-school-extra-title span{display:flex;align-items:center;gap:6px;}
.tb-school-extra-title i{font-size:14px;color:#1789C2;}
.tb-school-extra-caret{transition:transform .25s ease;font-size:12px;color:#9aa4b2!important;}
.tb-school-extra-quizzes.open .tb-school-extra-caret{transform:rotate(180deg);color:#1789C2!important;}
.tb-school-extra-row{display:flex;flex-wrap:wrap;gap:12px;max-height:0;overflow:hidden;opacity:0;transition:max-height .28s ease,opacity .2s ease,margin-top .28s ease;margin-top:0;}
.tb-school-extra-quizzes.open .tb-school-extra-row{max-height:600px;opacity:1;margin-top:12px;}
/* قدمِ ۳۶۶ — رفعِ درخواستِ حبیب: دکمه‌های «آزمونِ سریع» (هم ردیفِ ثابتِ پایین، هم ردیفِ
   «دسترسی سریع به آزمونِ هر سطح» زیرِ پلکان) اکنون به‌جایِ قرصِ کاملاً گرد، شکلِ ذوزنقه
   دارند تا از سایرِ دکمه‌های گردِ صفحه (نوبرِ درس/بازگشت و…) به‌وضوح متمایز باشند. پدینگِ
   افقیِ اضافه‌شده مانعِ بریده‌شدنِ آیکون/متن در گوشه‌های اریب می‌شود. */
/* قدمِ ۳۶۸ — رفعِ درخواستِ حبیب: کادرِ ذوزنقه‌ایِ آزمون‌ها کوچک‌تر شد (پدینگِ کمتر) و حاشیه‌ی
   رنگی گرفت تا شکلش واضح‌تر دیده شود. */
.tb-school-extra-row .tb-school-lv-nav-btn{border-radius:0;clip-path:polygon(14px 0,calc(100% - 14px) 0,100% 100%,0 100%);padding:8px 18px;border:1.5px solid rgba(255,255,255,.55);}
.tb-school-extra-row .tb-school-lv-nav-btn.secondary{background:#eef1f5;border-color:#b9d3e8;}
@media (max-width:640px){.tb-school-extra-row{flex-direction:column;align-items:stretch;}.tb-school-extra-row .tb-school-lv-nav-btn{justify-content:center;clip-path:polygon(10px 0,calc(100% - 10px) 0,100% 100%,0 100%);padding:8px 14px;}}

/* ==================== تب‌های محتوایی قابل‌کلیک (مبانی آموزشی و تحلیل هر بازار) ====================
   یک کامپوننت عمومی/قابل‌استفاده در هر بخش: فقط یک تب هم‌زمان نمایش داده می‌شود.
   ساختار: .tb-content-tabs > (.tb-content-tab-btns > چند .tb-content-tab-btn) + چند .tb-content-tab-pane
   قدمِ ۳۵۲ — طبقِ درخواستِ صریحِ حبیب: قالبِ کارت‌مانندِ v301 که قبلاً فقط مخصوصِ
   #tbAccTabs («خدمات حسابداری») بود، حالا به‌عنوانِ سبکِ پیش‌فرضِ همینِ کلاسِ عمومی
   تعمیم داده شد تا هر ۱۶ گروهِ تبِ سایت (مبانیِ آموزشیِ هر بازار، تحلیلِ تکنیکال/بنیادی،
   تبِ آزمونِ هر سکتور و...) یکدست شوند — نه فقط حسابداری. رنگِ فعال از
   var(--tb-theme) خوانده می‌شود که همان متغیرِ سراسریِ رنگِ سکتورِ جاری‌ست (در
   header.php رویِ #tb-root ست می‌شود)، پس هر سکتور خودکار با رنگِ خودش نمایش
   داده می‌شود، نه یک رنگِ ثابت. */
.tb-content-tab-btns{display:flex;flex-wrap:nowrap;flex-direction:row;gap:8px;background:#F7F9FB;border:1px solid #EAEEF2;border-radius:14px;padding:8px;margin-bottom:22px;overflow-x:auto;-webkit-overflow-scrolling:touch;}
.tb-content-tab-btn{flex:1 1 0;white-space:nowrap;justify-content:center;text-align:center;display:inline-flex;align-items:center;gap:6px;font-family:inherit;background:#fff;border:1.5px solid #E7EBF0;border-bottom:1.5px solid #E7EBF0;border-radius:10px;margin-bottom:0;padding:11px 10px;font-size:12.5px;font-weight:700;color:#5b6875;cursor:pointer;box-shadow:0 1px 2px rgba(16,24,40,.03);transition:color .15s,border-color .15s,background .15s;}
.tb-content-tab-btn i{font-size:15px;color:var(--tb-theme,#1789C2);}
.tb-content-tab-btn:hover{color:var(--tb-theme,#1789C2);border-color:var(--tb-theme,#1789C2);}
.tb-content-tab-btn.active{background:var(--tb-theme,#1789C2);border-color:var(--tb-theme,#1789C2);color:#fff;}
.tb-content-tab-btn.active i{color:#fff;}
.tb-content-tab-pane{display:none;}
.tb-content-tab-pane.active{display:block;}
@media (max-width:900px){ .tb-content-tab-btn{flex:0 0 auto;padding:10px 14px;} }
@media (max-width:640px){ .tb-content-tab-btn{font-size:11.5px;padding:9px 4px 10px;} .tb-content-tab-btn i{font-size:13px;} }
@media (max-width:480px){ .tb-content-tab-btn{font-size:12px;padding:9px 12px;} }

/* ==================== موتور جدید Quiz2 — مدل ۲۰سؤال/۵گزینه (A تا E) طبق سند رسمی pptx ==================== */
.tb-quiz2-card{background:#fff;}
.tb-quiz2-meta{display:flex;align-items:center;justify-content:space-between;font-size:13px;font-weight:700;color:#3b4656;margin-bottom:14px;padding-bottom:14px;border-bottom:1px dashed #e3e8ee;flex-wrap:wrap;gap:8px;}
.tb-quiz2-meta b{color:#0F3D73;font-size:15px;font-weight:800;}
.tb-quiz2-time-badge{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;color:#0F3D73;background:#eef2f7;padding:6px 14px;border-radius:20px;font-weight:700;}
.tb-quiz2-progress-wrap{position:relative;height:12px;border-radius:8px;background:#eef1f5;overflow:hidden;margin-bottom:8px;box-shadow:inset 0 1px 3px rgba(15,61,115,.08);}
.tb-quiz2-progress-bar{height:100%;width:0%;border-radius:8px;background:linear-gradient(90deg,#38BDF8,#0EA5E9);transition:width .35s cubic-bezier(.4,0,.2,1);box-shadow:0 0 8px rgba(14,165,233,.45);}
.tb-quiz2-progress-pct{display:block;font-size:12.5px;color:#8794a1;margin-bottom:18px;font-weight:600;}
.tb-quiz2-back{display:inline-flex;align-items:center;gap:4px;background:none;border:none;color:#1789C2;font-size:12.5px;font-weight:700;cursor:pointer;font-family:inherit;padding:0 0 14px;}
.tb-quiz2-back:disabled{opacity:.35;cursor:default;}
.tb-quiz2-qnum{font-size:11.5px;color:#8794a1;font-weight:700;margin-bottom:6px;}
.tb-quiz2-qtext{font-size:14.5px;font-weight:800;color:#0F1B2D;margin-bottom:16px;line-height:1.9;}
.tb-quiz2-opts{display:flex;flex-direction:column;gap:10px;}
.tb-quiz2-opt{display:flex;align-items:center;gap:12px;border:1.5px solid #e3e8ee;border-radius:12px;padding:12px 14px;cursor:pointer;transition:border-color .15s,background .15s,transform .1s;font-size:13px;color:#3b4656;background:#fff;}
.tb-quiz2-opt:hover{border-color:#1789C2;background:#f7fbfe;transform:translateX(-2px);}
.tb-quiz2-opt-letter{flex:0 0 30px;height:30px;border-radius:50%;background:#eef2f7;color:#0F3D73;display:flex;align-items:center;justify-content:center;font-weight:800;font-size:13px;font-family:'Courier New',monospace;}
.tb-quiz2-result{display:none;}
.tb-quiz2-score-circle{width:100px;height:100px;border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#fff;margin:0 auto 14px;}
.tb-quiz2-score-circle b{font-size:24px;font-weight:800;line-height:1;}
.tb-quiz2-score-circle span{font-size:10px;font-weight:600;opacity:.9;}
.tb-quiz2-persona{text-align:center;font-size:17px;font-weight:800;color:#0F1B2D;margin-bottom:4px;}
.tb-quiz2-persona-range{text-align:center;font-size:11.5px;color:#8794a1;margin-bottom:18px;}
.tb-quiz2-traits{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:16px;}
@media (max-width:640px){ .tb-quiz2-traits{grid-template-columns:1fr;} }
.tb-quiz2-trait-box{border-radius:10px;padding:12px 14px;}
.tb-quiz2-trait-box.good{background:#EFFBF3;border:1px solid #bfe8cd;}
.tb-quiz2-trait-box.weak{background:#FDF3EE;border:1px solid #f3d3bf;}
.tb-quiz2-trait-box b{display:block;font-size:12px;margin-bottom:6px;}
.tb-quiz2-trait-box.good b{color:#1c7a44;}
.tb-quiz2-trait-box.weak b{color:#b5541f;}
.tb-quiz2-trait-box ul{margin:0;padding-right:18px;font-size:11.5px;color:#3b4656;line-height:1.8;}
.tb-quiz2-articles{margin-top:6px;}
.tb-quiz2-articles>b{display:block;font-size:12px;color:#0F3D73;margin-bottom:8px;}
.tb-quiz2-article-item{display:flex;align-items:center;gap:8px;border:1px solid #dfe8ef;border-radius:9px;padding:10px 12px;font-size:12px;color:#3b4656;margin-bottom:8px;cursor:pointer;transition:border-color .15s;}
.tb-quiz2-article-item:hover{border-color:#1789C2;}
.tb-quiz2-article-item i{color:#0EA5E9;font-size:16px;}
.tb-quiz2-restart{display:inline-flex;align-items:center;gap:6px;background:#eef2f7;color:#0F3D73;border:none;padding:9px 18px;border-radius:8px;font-size:12px;font-weight:700;cursor:pointer;font-family:inherit;margin-top:14px;}

/* ==================== موتور عمومی Quiz4 — آزمون دانشی چهارگزینه‌ای (پاسخ درست/غلط) ==================== */
.tb-quiz4-card{background:#fff;}
/* قدمِ ۳۶۵ — رفعِ درخواستِ حبیب: بالایِ هر آزمون (چه Quiz4، چه Quiz2) مشخص شود این آزمونِ
   کدام درس/سطح است — عنوان از همان REST (data.title) که قبلاً فقط در صفحه‌ی نتیجه نشان داده
   می‌شد، اکنون با جاوااسکریپتِ services-quiz.js بالایِ کارتِ آزمون هم تزریق می‌شود؛ چون این
   منطق مرکزی است (نه تکرار در هر بلوکِ PHP)، برایِ هر ۳۷+ آزمونِ این دو موتور در کلِ سایت
   یکسان اعمال می‌شود. */
.tb-quiz4-top-title{display:flex;align-items:center;gap:8px;background:linear-gradient(135deg,#0f3d73,#1789C2);color:#fff;font-size:13px;font-weight:800;padding:11px 16px;border-radius:10px;margin:-2px 0 16px;}
.tb-quiz4-top-title i{font-size:16px;flex-shrink:0;}
.tb-quiz4-meta{display:flex;align-items:center;justify-content:space-between;font-size:13px;font-weight:700;color:#3b4656;margin-bottom:14px;padding-bottom:14px;border-bottom:1px dashed #e3e8ee;flex-wrap:wrap;gap:8px;}
.tb-quiz4-meta b{color:#0F3D73;font-size:15px;font-weight:800;}
.tb-quiz4-time-badge{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;color:#0F3D73;background:#eef2f7;padding:6px 14px;border-radius:20px;font-weight:700;}
.tb-quiz4-progress-wrap{position:relative;height:12px;border-radius:8px;background:#eef1f5;overflow:hidden;margin-bottom:8px;box-shadow:inset 0 1px 3px rgba(15,61,115,.08);}
.tb-quiz4-progress-bar{height:100%;width:0%;border-radius:8px;background:linear-gradient(90deg,#38BDF8,#0EA5E9);transition:width .35s cubic-bezier(.4,0,.2,1);box-shadow:0 0 8px rgba(14,165,233,.45);}
.tb-quiz4-progress-pct{display:block;font-size:12.5px;color:#8794a1;margin-bottom:18px;font-weight:600;}
.tb-quiz4-back{display:inline-flex;align-items:center;gap:4px;background:none;border:none;color:#1789C2;font-size:12.5px;font-weight:700;cursor:pointer;font-family:inherit;padding:0 0 14px;}
.tb-quiz4-back:disabled{opacity:.35;cursor:default;}
.tb-quiz4-qnum{font-size:11.5px;color:#8794a1;font-weight:700;margin-bottom:6px;}
.tb-quiz4-qtext{font-size:14.5px;font-weight:800;color:#0F1B2D;margin-bottom:16px;line-height:1.9;}
.tb-quiz4-opts{display:flex;flex-direction:column;gap:10px;}
.tb-quiz4-opt{display:flex;align-items:center;gap:12px;border:1.5px solid #e3e8ee;border-radius:12px;padding:12px 14px;cursor:pointer;transition:border-color .15s,background .15s,transform .1s;font-size:13px;color:#3b4656;background:#fff;}
.tb-quiz4-opt:hover{border-color:#1789C2;background:#f7fbfe;transform:translateX(-2px);}
.tb-quiz4-opt.correct{border-color:#1E9E6B;background:#EFFBF3;color:#1c7a44;font-weight:700;}
.tb-quiz4-opt.wrong{border-color:#DC2626;background:#FDF0EE;color:#b3261e;font-weight:700;}
.tb-quiz4-opt-letter{flex:0 0 30px;height:30px;border-radius:50%;background:#eef2f7;color:#0F3D73;display:flex;align-items:center;justify-content:center;font-weight:800;font-size:13px;font-family:'Courier New',monospace;}
.tb-quiz4-opt.correct .tb-quiz4-opt-letter{background:#1E9E6B;color:#fff;}
.tb-quiz4-opt.wrong .tb-quiz4-opt-letter{background:#DC2626;color:#fff;}
.tb-quiz4-explain{display:flex;align-items:flex-start;gap:8px;border-radius:10px;padding:12px 14px;font-size:12px;line-height:1.9;margin-top:12px;}
.tb-quiz4-explain.ok{background:#EFFBF3;border:1px solid #bfe8cd;color:#1c7a44;}
.tb-quiz4-explain.no{background:#FDF0EE;border:1px solid #f3c3bf;color:#b3261e;}
.tb-quiz4-explain i{font-size:16px;margin-top:1px;}
.tb-quiz4-next{display:inline-flex;align-items:center;gap:6px;background:#0F3D73;color:#fff;border:none;padding:10px 20px;border-radius:8px;font-size:12.5px;font-weight:700;cursor:pointer;font-family:inherit;margin-top:14px;}
.tb-quiz4-result{display:none;}
.tb-quiz4-result-title{text-align:center;font-size:14.5px;font-weight:800;color:#0F3D73;margin-bottom:10px;line-height:1.8;}
.tb-quiz4-score-circle{width:100px;height:100px;border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#fff;margin:0 auto 10px;}
.tb-quiz4-score-circle b{font-size:24px;font-weight:800;line-height:1;}
.tb-quiz4-score-circle span{font-size:10px;font-weight:600;opacity:.9;}
.tb-quiz4-pct-label{text-align:center;font-size:14px;font-weight:700;color:#0F1B2D;margin-bottom:18px;}
.tb-quiz4-review{display:flex;flex-direction:column;gap:10px;margin-bottom:8px;}
.tb-quiz4-review-item{border-radius:10px;padding:12px 14px;font-size:11.5px;line-height:1.9;}
.tb-quiz4-review-item.ok{background:#EFFBF3;border:1px solid #bfe8cd;}
.tb-quiz4-review-item.no{background:#FDF0EE;border:1px solid #f3c3bf;}
.tb-quiz4-review-q{display:flex;align-items:flex-start;gap:6px;font-weight:700;color:#0F1B2D;margin-bottom:4px;}
.tb-quiz4-review-item.ok .tb-quiz4-review-q i{color:#1E9E6B;}
.tb-quiz4-review-item.no .tb-quiz4-review-q i{color:#DC2626;}
.tb-quiz4-review-ans{color:#3b4656;padding-right:22px;}
.tb-quiz4-restart{display:inline-flex;align-items:center;gap:6px;background:#eef2f7;color:#0F3D73;border:none;padding:9px 18px;border-radius:8px;font-size:12px;font-weight:700;cursor:pointer;font-family:inherit;margin-top:14px;}
/* v337: ردیفِ اکشن‌های پایانِ آزمون — دکمه‌ی «بازگشت به دوره‌های آموزشی» کنارِ «شروع مجدد آزمون» */
.tb-quiz4-result-actions{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-top:14px;}
.tb-quiz4-result-actions .tb-quiz4-restart{margin-top:0;}
.tb-quiz4-back-courses{margin:0;background:#0F3D73;color:#fff;padding:9px 18px;border-radius:8px;}
.tb-quiz4-back-courses:hover{background:#0d3563;}
@media (max-width:480px){ .tb-quiz4-result-actions{flex-direction:column;align-items:stretch;} .tb-quiz4-result-actions button{justify-content:center;} }

/* ==================== کاتالوگ تست‌های روان‌شناسی ==================== */
.tb-psy-catalog-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:14px;margin:16px 0;}
.tb-psy-catalog-card{border:1.5px solid #eef1f5;border-radius:14px;padding:16px;background:#fff;transition:transform .15s,box-shadow .15s,border-color .15s;cursor:pointer;position:relative;}
.tb-psy-catalog-card:hover{transform:translateY(-2px);box-shadow:0 8px 20px rgba(15,61,115,.1);border-color:#c8ddf0;}
.tb-psy-catalog-card .tb-psy-cat-icon{width:38px;height:38px;border-radius:10px;background:linear-gradient(135deg,#0F3D73,#1789C2);display:flex;align-items:center;justify-content:center;color:#fff;font-size:17px;margin-bottom:10px;}
.tb-psy-catalog-card h4{font-size:12.8px;color:#0F1B2D;margin:0 0 6px;}
.tb-psy-catalog-card p{font-size:11px;color:#7a8494;line-height:1.8;margin:0 0 10px;}
.tb-psy-cat-badge{font-size:9.5px;font-weight:800;padding:3px 10px;border-radius:999px;display:inline-block;}
.tb-psy-cat-badge.active{background:#e7f8ee;color:#16A34A;}
.tb-psy-cat-badge.soon{background:#fff3cd;color:#8a6d1f;}
.tb-psy-catalog-card.soon{cursor:default;opacity:.72;}
.tb-psy-catalog-card.soon:hover{transform:none;box-shadow:none;border-color:#eef1f5;}
.tb-svc-subsector{display:none;}
.tb-svc-subsector.tb-active-sector{display:block;}
@media(max-width:640px){ .tb-psy-catalog-grid{grid-template-columns:1fr 1fr;} }
@media(max-width:420px){ .tb-psy-catalog-grid{grid-template-columns:1fr;} }
@keyframes tbLiveBlink{0%,100%{opacity:1;}50%{opacity:.25;}}
.tb-tools-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px;}
.tb-tool-card{border:2px solid #eef1f5;border-radius:14px;background:#fff;overflow:hidden;transition:border-color .15s,box-shadow .15s;}
.tb-tool-card.open{border-color:#1789C2;box-shadow:0 8px 24px rgba(15,61,115,.12);}
.tb-tool-head{display:flex;align-items:center;gap:10px;padding:14px 16px;cursor:pointer;user-select:none;}
.tb-tool-head i{font-size:19px;color:#1789C2;flex-shrink:0;}
.tb-tool-head b{font-size:13px;color:#1a2733;flex:1;}
.tb-tool-head .car{font-size:14px;color:#98a4b0;transition:transform .2s;}
.tb-tool-card.open .tb-tool-head .car{transform:rotate(180deg);}
.tb-tool-body{display:none;padding:0 16px 18px;}
.tb-tool-card.open .tb-tool-body{display:block;animation:tbNewsFadeIn .25s ease;}
.tb-tool-row{display:flex;align-items:center;gap:8px;margin-bottom:9px;flex-wrap:wrap;}
.tb-tool-row label{font-size:11px;color:#5b6b7c;min-width:90px;}
.tb-tool-row input,.tb-tool-row select{flex:1;min-width:90px;border:1.5px solid #e3e7ec;border-radius:8px;padding:7px 10px;font-size:12px;font-family:inherit;color:#1a2733;}
.tb-tool-row input:focus,.tb-tool-row select:focus{outline:none;border-color:#1789C2;}
.tb-tool-btn{background:linear-gradient(135deg,#0F3D73,#1789C2);color:#fff;border:none;padding:8px 20px;border-radius:8px;font-size:12px;font-weight:700;cursor:pointer;font-family:inherit;margin-top:4px;}
.tb-tool-result{margin-top:10px;background:#f4f8fc;border:1px dashed #b8d8ef;border-radius:9px;padding:10px 12px;font-size:12px;color:#0F3D73;font-weight:700;line-height:2;display:none;}
.tb-tool-result.show{display:block;animation:tbNewsFadeIn .2s ease;}
.tb-sessions-clock{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;}
.tb-session-box{border-radius:10px;padding:10px 6px;text-align:center;background:#f7f9fb;border:2px solid #eef1f5;}
.tb-session-box.live{border-color:#0b9e5e;background:#eafbf2;}
.tb-session-box .sname{font-size:10.5px;font-weight:800;color:#33475b;}
.tb-session-box .sstate{font-size:9.5px;margin-top:4px;font-weight:700;color:#98a4b0;}
.tb-session-box.live .sstate{color:#0b9e5e;}
.tb-platform-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:16px;}
.tb-platform-card{display:flex;align-items:center;gap:14px;border-radius:14px;padding:18px;background:linear-gradient(135deg,#0F3D73,#123a63);color:#fff;box-shadow:0 8px 24px rgba(15,61,115,.22);}
.tb-platform-card .plogo{width:52px;height:52px;border-radius:12px;background:#fff;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-weight:900;color:#0F3D73;font-size:15px;}
.tb-platform-card .pinfo{flex:1;}
.tb-platform-card .pinfo b{font-size:13.5px;display:block;margin-bottom:3px;}
.tb-platform-card .pinfo span{font-size:10.5px;opacity:.85;}
.tb-platform-btn{background:#fff;color:#0F3D73;border:none;padding:8px 16px;border-radius:8px;font-size:11.5px;font-weight:800;cursor:pointer;font-family:inherit;white-space:nowrap;text-decoration:none;display:inline-flex;align-items:center;gap:5px;}
.tb-sites-intro{font-size:11.5px;color:#8794a1;margin:-6px 0 18px;line-height:1.9;}
.tb-sites-cat{margin-bottom:26px;}
.tb-sites-cat-title{font-size:13px;font-weight:800;color:#0F3D73;margin:0 0 12px;display:flex;align-items:center;gap:7px;}
.tb-sites-cat-title i{font-size:16px;color:#C0282D;}
.tb-sites-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}
.tb-site-card{border:1.5px solid #eef1f5;border-radius:12px;padding:14px 16px;background:#fff;display:flex;flex-direction:column;gap:8px;transition:transform .15s,box-shadow .15s,border-color .15s;}
.tb-site-card:hover{transform:translateY(-2px);box-shadow:0 6px 18px rgba(15,61,115,.1);border-color:#c8ddf0;}
.tb-site-top{display:flex;align-items:center;gap:10px;}
.tb-site-icon{width:36px;height:36px;border-radius:10px;background:linear-gradient(135deg,#0F3D73,#1789C2);color:#fff;display:flex;align-items:center;justify-content:center;font-size:17px;flex-shrink:0;}
.tb-site-name-wrap{flex:1;min-width:0;}
.tb-site-name{font-size:13px;color:#1a2733;font-weight:800;display:block;}
.tb-site-domain{font-size:10px;color:#98a4b0;font-family:'Consolas','Courier New',monospace;direction:ltr;display:block;text-align:right;}
.tb-site-desc{font-size:11px;color:#5b6b7c;line-height:1.9;margin:0;flex:1;}
.tb-site-link{align-self:flex-start;font-size:10.5px;font-weight:800;color:#1789C2;text-decoration:none;display:inline-flex;align-items:center;gap:4px;}
.tb-site-link:hover{color:#0F3D73;text-decoration:underline;}
.tb-site-link i{font-size:12px;}
.tb-sites-subsection-title{font-size:12px;font-weight:800;color:#5b6b7c;margin:18px 0 10px;padding-right:8px;border-right:3px solid #1789C2;display:flex;align-items:center;gap:6px;}
.tb-sites-subsection-title i{font-size:14px;color:#1789C2;}
@media(max-width:760px){
  .tb-tools-grid{grid-template-columns:1fr;}
  .tb-sessions-clock{grid-template-columns:repeat(2,1fr);}
  .tb-platform-grid{grid-template-columns:1fr;}
  .tb-sites-grid{grid-template-columns:1fr;}
}
@media(min-width:761px) and (max-width:980px){
  .tb-sites-grid{grid-template-columns:repeat(2,1fr);}
}
/* editable-by-admin text blocks, mirroring the academy-title editing pattern */
.tb-editable{position:relative;}
#tb-root.tb-admin-on .tb-editable{cursor:text;outline:1px dashed transparent;border-radius:6px;}
#tb-root.tb-admin-on .tb-editable:hover,#tb-root.tb-admin-on .tb-editable:focus{outline-color:#1789C2;box-shadow:0 0 0 4px rgba(23,137,194,.08);}

/* درباره ما */
.tb-about-grid{display:grid;grid-template-columns:1fr 1.15fr;gap:26px;align-items:center;}
.tb-about-img{border-radius:14px;background-size:cover;background-position:center;min-height:230px;border:3px solid #bfe3fb;box-shadow:0 0 0 5px rgba(135,206,250,.25);position:relative;overflow:hidden;}
.tb-about-text h2{font-size:17px;color:#111827;margin:0 0 10px;}
.tb-about-text p{font-size:13px;line-height:2.1;color:#5b6b7c;margin:0 0 10px;}

/* اطلاعات تماس */
.tb-info-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:16px;}
.tb-info-card{border:1px solid #eceff3;border-radius:12px;padding:18px 14px;text-align:center;background:#fafbfc;transition:box-shadow .15s ease,transform .15s ease;}
.tb-info-card:hover{box-shadow:0 6px 18px rgba(15,61,115,.1);transform:translateY(-2px);}
.tb-info-card i{font-size:24px;color:#1789C2;margin-bottom:8px;display:block;}
.tb-info-card b{display:block;font-size:12.5px;color:#33475b;margin-bottom:5px;}
.tb-info-card span{font-size:12px;color:#6b7684;direction:ltr;display:block;}
.tb-info-map{margin-top:22px;border-radius:12px;overflow:hidden;border:1px solid #eceff3;min-height:180px;background:linear-gradient(135deg,#eaf6ff,#f3f7fb);display:flex;align-items:center;justify-content:center;color:#8fa3b8;font-size:12px;gap:6px;}

/* فرم‌های تیکت و همکاری */
.tb-form-card{border:1px solid #eceff3;border-radius:14px;padding:24px;background:#fafbfc;}
.tb-form-row{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:14px;}
.tb-form-field{display:flex;flex-direction:column;gap:6px;}
.tb-form-field label{font-size:11.5px;font-weight:700;color:#33475b;}
.tb-form-field input,.tb-form-field select,.tb-form-field textarea{border:1px solid #e3e7ec;border-radius:9px;padding:9px 12px;font-size:12.5px;font-family:'Vazirmatn',sans-serif;background:#fff;color:#1a2733;transition:border-color .15s;resize:vertical;}
.tb-form-field input:focus,.tb-form-field select:focus,.tb-form-field textarea:focus{outline:none;border-color:#1789C2;box-shadow:0 0 0 3px rgba(23,137,194,.12);}
.tb-form-submit{width:100%;background:linear-gradient(135deg,#d93a3f,#C0282D);color:#fff;border:none;padding:11px 0;font-size:13.5px;font-weight:700;border-radius:9px;cursor:pointer;font-family:inherit;box-shadow:0 4px 12px rgba(192,40,45,.3);transition:box-shadow .15s ease,transform .1s ease;}
.tb-form-submit:hover{box-shadow:0 6px 16px rgba(192,40,45,.42);transform:translateY(-1px);}
.tb-form-note{font-size:11px;color:#98a4b0;text-align:center;margin-top:10px;}
.tb-form-success{display:none;text-align:center;padding:26px 0;}
.tb-form-success.tb-show{display:block;}
.tb-form-success i{font-size:44px;color:#22c55e;margin-bottom:8px;display:block;}
.tb-form-success b{display:block;font-size:14px;color:#1a2733;margin-bottom:4px;}
.tb-form-success span{font-size:12px;color:#6b7684;}
@media (max-width:620px){.tb-form-row{grid-template-columns:1fr;}}

/* سلب مسئولیت */
.tb-disclaimer-box{border:1px solid #eceff3;border-radius:14px;padding:22px;background:#fafbfc;}
.tb-disclaimer-box h2{font-size:15px;color:#C0282D;margin:0 0 12px;}
.tb-disclaimer-box p{font-size:12.5px;line-height:2.1;color:#5b6b7c;margin:0 0 10px;}

/* گالری */
.tb-gallery-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;}
.tb-gallery-item{aspect-ratio:1/1;border-radius:10px;background-size:cover;background-position:center;border:2.5px solid #bfe3fb;box-shadow:0 0 0 4px rgba(135,206,250,.22);position:relative;overflow:hidden;}
@media (max-width:700px){.tb-gallery-grid{grid-template-columns:repeat(2,1fr);}}
@media (max-width:900px){.tb-about-grid{grid-template-columns:1fr;}}

/* ===== قاب جامع تقویم اختصاصی بورس/کریپتو (جایگزین جدول فارکس برای این دو بازار) ===== */
.tb-cal2-panel{padding:2px 2px 6px;}
.tb-cal2-head{display:flex;align-items:center;gap:10px;margin-bottom:14px;padding-bottom:14px;border-bottom:1px solid #eceff3;}
.tb-cal2-head i{font-size:22px;}
.tb-cal2-head b{font-size:15.5px;color:#1a2733;display:block;}
.tb-cal2-head span{font-size:12px;color:#6b7684;display:block;margin-top:2px;}
/* v229: دکمه‌ی بازگشتِ تازه‌اضافه‌شده داخلِ همین ردیف — با مارجینِ صفر (نه مارجینِ پیش‌فرضِ
   ستونیِ .tb-crs-back) و اندازه‌ی آیکونِ هم‌سایز با نمونه‌ی فارکس (نه ۲۲px، طبقِ قانونِ عمومیِ
   بالاتر که رویِ هر i داخلِ .tb-cal2-head اثر می‌گذاشت) */
.tb-cal2-head .tb-crs-back{margin-bottom:0;flex-shrink:0;}
.tb-cal2-head .tb-cal2-back i{font-size:14px;}
.tb-cal2-sec{margin-bottom:18px;border-radius:12px;overflow:hidden;border:1px solid #eceff3;}
.tb-cal2-sec-title{display:flex;align-items:center;gap:8px;padding:9px 14px;font-size:13px;font-weight:700;color:#fff;}
.tb-cal2-sec-title i{font-size:15px;}
.tb-cal2-sec-body{padding:4px 0;background:#fff;}
.tb-cal2-item{display:flex;align-items:flex-start;gap:10px;padding:10px 14px;border-bottom:1px solid #f3f5f8;}
.tb-cal2-item:last-child{border-bottom:none;}
.tb-cal2-item-date{flex:0 0 auto;min-width:64px;text-align:center;background:#f7f9fc;border-radius:8px;padding:5px 6px;font-size:10.5px;font-weight:700;color:#3b4a5a;line-height:1.5;}
.tb-cal2-item-body{flex:1;min-width:0;}
.tb-cal2-item-body b{display:block;font-size:12.5px;color:#1a2733;margin-bottom:3px;}
.tb-cal2-item-body p{margin:0;font-size:11.5px;color:#6b7684;line-height:1.85;}
.tb-cal2-item-src{flex:0 0 auto;font-size:10px;color:#1789C2;background:#eaf6ff;border-radius:7px;padding:4px 8px;text-decoration:none;white-space:nowrap;display:flex;align-items:center;gap:3px;}
.tb-cal2-item-src:hover{background:#d8eefd;}
.tb-cal2-item{cursor:pointer;}
.tb-cal2-expand-btn{flex:0 0 auto;background:none;border:none;color:#1789C2;font-size:13px;padding:0 2px;cursor:pointer;display:flex;align-items:center;}
.tb-cal2-item.tb-cal2-open .tb-cal2-expand-btn,
.tb-cal2-item.tb-cal2-open .tb-cal2-expand-btn i{color:#991b1b;}
.tb-cal2-item.tb-cal2-open{background:#fdf7f7;}
.tb-cal2-detail{display:none;background:#f9fbff;border-bottom:1px solid #f3f5f8;}
.tb-cal2-detail.open{display:block;}
.tb-cal2-detail-inner{padding:10px 14px 14px 44px;font-size:11.5px;line-height:2;color:#4b5967;}
.tb-cal2-sources{display:flex;flex-wrap:wrap;gap:8px;margin-top:6px;}
.tb-cal2-src-chip{display:flex;align-items:center;gap:6px;background:#f7f9fc;border:1px solid #eceff3;border-radius:9px;padding:6px 10px;font-size:11px;color:#3b4a5a;text-decoration:none;}
.tb-cal2-src-chip:hover{background:#eef2f7;}
.tb-cal2-src-chip i{font-size:13px;color:#1789C2;}
.tb-cal2-foot-title{font-size:12px;color:#3b4a5a;font-weight:700;margin:16px 0 8px;}
/* v269: طبقِ درخواستِ صریحِ کاربر — قبلاً در موبایل، چهار عنصرِ هر ردیفِ تقویم (تاریخ/عنوان‌وتوضیح/
   لینکِ منبع/دکمه‌ی بازشوِ جزئیات) همه در یک ردیفِ افقی کنارِ هم می‌نشستند؛ چون سه‌تای دیگر عرضِ
   ثابت داشتند، ستونِ متن (عنوان+توضیح) به یک باریکه‌ی خیلی کم‌عرض (کمتر از ۱۰۰px) فشرده می‌شد و
   همین باعث می‌شد متنِ کوتاه هم در چند خط بشکند، در وسطِ آن باریکه جمع به‌نظر برسد، و ارتفاعِ کلِ
   صفحه (با ده‌ها رویداد) به‌شدت زیاد شود. راه‌حل: با «order»، ابتدا یک ردیفِ بالا فقط شاملِ
   تاریخ+لینکِ منبع+دکمه‌ی جزئیات ساخته می‌شود (این سه کوچک‌اند و راحت در یک ردیف جا می‌شوند)،
   بعد متنِ عنوان/توضیح با flex-basis:100% به ردیفِ بعدی رانده می‌شود و کلِ عرضِ صفحه را می‌گیرد. */
@media (max-width:640px){
  .tb-cal2-item{flex-wrap:wrap;row-gap:6px;}
  .tb-cal2-item-date{order:1;}
  .tb-cal2-item-src{order:2;margin-right:auto;}
  .tb-cal2-expand-btn{order:3;}
  .tb-cal2-item-body{order:4;flex:1 1 100%;width:100%;}
}

/* ===== Block 3 ===== */
/* ===================================================================
   فاز ۳ — سبک آبی‌آسمانی سه‌بعدی برجسته، مخصوصِ داخلِ سه پنل داخلی
   (دانشجو، استاد، مدیر) که همگی زیرِ #tbPageStudentPanel هستند.
   ⚠️ اصلاحِ نشست جاری: پیش‌تر این بلوک با سلکتورهای عمومی (بدون‌محدوده)
   روی کل سایت هم می‌نشست و رنگ‌بندی دکمه‌های اصلی سایت (ورود/ثبت‌نام،
   دکمه‌های سه‌بخش بازار، ابزارها، خدمات، چت پشتیبانی و ...) را به همین
   آبی‌آسمانی تغییر می‌داد. طبق خواسته‌ی صریح کاربر، هر سلکتور اینجا با
   پیشوند «#tbPageStudentPanel » محدود شد تا فقط داخل پنل‌ها اثر کند و
   رنگ‌بندی اصلی سایت (که در جای دیگری تعریف شده) دست‌نخورده بماند.
   همچنین کلاس‌هایی که اصلاً داخل پنل استفاده نمی‌شوند (فقط در صفحات
   عمومی سایت یا ویجت چت پشتیبانی) از فهرست سلکتورها حذف شدند.
   =================================================================== */
:root{
  --sb1:#eef8ff; --sb2:#d3edfe; --sb3:#a7defd; --sb4:#63c7fb;
  --sb5:#22aaef; --sb6:#0f8fd9; --sb7:#0c6ea8; --sb8:#0a5581;
  --sbg1:#e7faf1; --sbg5:#22b573; --sbg7:#0d7a4c;
  --sbr1:#fdeceb; --sbr5:#e5504a; --sbr7:#a52f28;
}

/* ---------- ۱) دکمه‌های اصلی داخل پنل‌ها: برجسته، آبی‌آسمانی، سایه‌ی سه‌بعدی ---------- */
#tbPageStudentPanel .btn,#tbPageStudentPanel .btn-primary,
#tbPageStudentPanel .btn-outline,#tbPageStudentPanel .btn-danger,
#tbPageStudentPanel .tb-stu-btn{
  border:2px solid var(--sb7) !important;
  border-radius:12px !important;
  background:linear-gradient(180deg,var(--sb3) 0%,var(--sb5) 52%,var(--sb6) 100%) !important;
  color:#fff !important;
  box-shadow:0 3px 0 var(--sb8), 0 6px 14px rgba(10,85,129,.35),
             inset 0 1px 0 rgba(255,255,255,.65), inset 0 -8px 10px rgba(6,50,75,.18) !important;
  text-shadow:0 1px 1px rgba(4,40,60,.35);
  transition:transform .12s ease, box-shadow .12s ease, filter .12s ease !important;
}
#tbPageStudentPanel .btn:hover,#tbPageStudentPanel .btn-primary:hover,
#tbPageStudentPanel .btn-outline:hover,
#tbPageStudentPanel .tb-stu-btn:hover{
  filter:brightness(1.07);
  transform:translateY(-2px);
  box-shadow:0 5px 0 var(--sb8), 0 10px 20px rgba(10,85,129,.42),
             inset 0 1px 0 rgba(255,255,255,.75), inset 0 -8px 10px rgba(6,50,75,.16) !important;
}
#tbPageStudentPanel .btn:active,#tbPageStudentPanel .btn-primary:active,
#tbPageStudentPanel .btn-outline:active,
#tbPageStudentPanel .tb-stu-btn:active{
  transform:translateY(1px);
  box-shadow:0 1px 0 var(--sb8), 0 3px 8px rgba(10,85,129,.3),
             inset 0 1px 0 rgba(255,255,255,.5), inset 0 -4px 8px rgba(6,50,75,.2) !important;
}

/* دکمه‌ی کوچک/خیلی‌کوچک — همان افکت با اندازه‌ی خودشان */
#tbPageStudentPanel .tb-stu-btn-sm,#tbPageStudentPanel .tb-stu-btn-xs,#tbPageStudentPanel .btn-sm{box-shadow:inherit;}

/* حالت‌های رنگی معنایی (سبز=تأیید / قرمز=رد و خطر) با همان افکت برجسته اما رنگ خودشان */
#tbPageStudentPanel .tb-stu-btn-green,#tbPageStudentPanel .btn-primary.confirm-green{
  background:linear-gradient(180deg,#6fe3ac 0%,var(--sbg5) 55%,#0e9a5f 100%) !important;
  border-color:var(--sbg7) !important;
  box-shadow:0 3px 0 var(--sbg7), 0 6px 14px rgba(13,122,76,.35),
             inset 0 1px 0 rgba(255,255,255,.6), inset 0 -8px 10px rgba(6,60,38,.18) !important;
}
#tbPageStudentPanel .tb-stu-btn-red-outline,#tbPageStudentPanel .btn-danger,#tbPageStudentPanel .tb-admin-card-del{
  background:linear-gradient(180deg,#f5847e 0%,var(--sbr5) 55%,#c23a34 100%) !important;
  border-color:var(--sbr7) !important;
  color:#fff !important;
  box-shadow:0 3px 0 var(--sbr7), 0 6px 14px rgba(165,47,40,.35),
             inset 0 1px 0 rgba(255,255,255,.6), inset 0 -8px 10px rgba(80,20,16,.18) !important;
}
#tbPageStudentPanel .tb-admin-card-del{border-width:2px !important;box-shadow:0 2px 0 var(--sbr7),0 4px 10px rgba(165,47,40,.4),inset 0 1px 0 rgba(255,255,255,.6) !important;}
#tbPageStudentPanel .tb-admin-card-del:hover{filter:brightness(1.08);}

/* ---------- ۲) تب‌های اکسلی حضورغیاب داخل پنل استاد/ادمین (سگمنت با برجستگی سه‌بعدی) ---------- */
#tbPageStudentPanel .tb-sheet-tab{
  border-radius:10px 10px 0 0 !important;
  border:1.5px solid var(--sb3) !important;
  border-bottom:none !important;
  background:linear-gradient(180deg,var(--sb1),var(--sb2)) !important;
  color:var(--sb7) !important;
  box-shadow:inset 0 1px 0 #fff, inset 0 -3px 6px rgba(10,85,129,.06) !important;
}
#tbPageStudentPanel .tb-sheet-tab.active{
  background:linear-gradient(180deg,var(--sb5),var(--sb7)) !important;
  color:#fff !important;
  border-color:var(--sb8) !important;
  box-shadow:0 -2px 10px rgba(10,85,129,.3), inset 0 1px 0 rgba(255,255,255,.5) !important;
  text-shadow:0 1px 1px rgba(4,40,60,.3);
}

/* ---------- ۳) کارت‌ها و کادرهای داخل پنل: پس‌زمینه‌ی روشن‌تر آبی‌آسمانی + حاشیه‌ی پررنگ‌تر + سایه‌ی برجسته ---------- */
#tbPageStudentPanel .card,#tbAdmFollowupSectionBody .card,#tbAdmFollowupSectionBody .stat-card,
#tbPageStudentPanel .stat-card,#tbPageStudentPanel .tb-adm-dpbox,
#tbPageStudentPanel .tb-stu-card,#tbPageStudentPanel .tb-stu-fin-course-card,
#tbPageStudentPanel .tb-stu-fin-sumbox,#tbAdmFollowupSectionBody .tl-card{
  background:linear-gradient(165deg,#ffffff 0%,var(--sb2) 100%) !important;
  border:2.5px solid var(--sb6) !important;
  box-shadow:0 1px 0 rgba(255,255,255,.9) inset, 0 10px 26px rgba(10,85,129,.22) !important;
}

/* ---------- ۴) کارت‌های مالی دانشجو: آکاردئون کشویی بر اساس نام دوره + نوار رنگی وضعیت ---------- */
#tbPageStudentPanel .tb-stu-fin-course-card{padding:0 !important;overflow:hidden;margin-bottom:14px !important;}
#tbPageStudentPanel .tb-stu-fin-course-card[data-fin="settled"]{border-color:var(--sbg5) !important;border-right:7px solid var(--sbg5) !important;}
#tbPageStudentPanel .tb-stu-fin-course-card[data-fin="partial"]{border-color:#e8a13a !important;border-right:7px solid #e8a13a !important;}
#tbPageStudentPanel .tb-stu-fin-course-card[data-fin="unpaid"]{border-color:var(--sbr5) !important;border-right:7px solid var(--sbr5) !important;}
#tbPageStudentPanel .tb-stu-fin-card-head{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:14px 16px;cursor:pointer;user-select:none;
  background:linear-gradient(180deg,#fff,var(--sb1));
  transition:background .15s;
}
#tbPageStudentPanel .tb-stu-fin-card-head:hover{background:linear-gradient(180deg,var(--sb1),var(--sb2));}
#tbPageStudentPanel .tb-stu-fin-card-head-main{display:flex;align-items:center;gap:10px;font-size:13.5px;flex-wrap:wrap;}
#tbPageStudentPanel .tb-stu-fin-card-head-side{display:flex;align-items:center;gap:12px;flex-shrink:0;}
#tbPageStudentPanel .tb-stu-fin-chev{font-size:11px;color:var(--sb7);transition:transform .2s;display:inline-block;}
#tbPageStudentPanel .tb-stu-fin-card-body{padding:14px 16px 16px;border-top:1.5px dashed var(--sb3);background:#fff;}
#tbPageStudentPanel .tb-stu-fin-card-body.tb-stu-hidden{display:none !important;}
#tbPageStudentPanel .tb-stu-fin-sumbox{border:2px solid var(--sb4) !important;box-shadow:0 4px 12px rgba(10,85,129,.12) !important;}

/* هدر داخل کادر مدارک ادمین کمی پررنگ‌تر دیده شود */
#tbPageStudentPanel .tb-adm-dpbox h4{color:var(--sb7) !important;}

/* کارت‌های هشدار/تأیید قرمز — همان برجستگی ولی با حفظ معنای هشدار (قرمز) */
#tbAdmFollowupSectionBody .alarm-card{
  background:linear-gradient(165deg,rgba(229,80,74,.12),#fff) !important;
  border:2px solid var(--sbr5) !important;
  box-shadow:0 8px 20px rgba(165,47,40,.18) !important;
}
#tbAdmFollowupSectionBody .confirm-box{
  background:linear-gradient(165deg,rgba(229,80,74,.14),#fff) !important;
  border:2px solid var(--sbr5) !important;
}

/* پنل جزئیات دانشجو در پنل ادمین — لبه و سایه‌ی قوی‌تر بدون سنگین‌شدن کل پنل */
#tbPageStudentPanel .tb-adm-detail-pane{
  box-shadow:0 6px 22px rgba(10,85,129,.14) !important;
  border-right:3px solid var(--sb5) !important;
}

/* ===== Block 4 ===== */
/* ===================================================================
   فاز ۵ — لایه‌ی «شیک‌تر و برجسته‌تر»: پس‌زمینه‌ی محیطی نرم، هایلایت
   نورانی پشت کارت‌ها/سرتیترها، سایدبار و ناوبری سه‌بعدی‌تر، جدول‌ها و
   جعبه‌های آماری با درخشش ملایم. کاملاً محدود به #tbPageStudentPanel
   (هر سه پنل: دانشجو/استاد/ادمین) — بدون هیچ اثری روی سایت اصلی.
   =================================================================== */

/* ---------- پس‌زمینه‌ی محیطی نرم پشت کل محتوای پنل ---------- */
#tbPageStudentPanel .tb-stu-wrap{
  position:relative;
  background:
    radial-gradient(560px 320px at 8% 0%, rgba(99,199,251,.16), transparent 65%),
    radial-gradient(620px 360px at 100% 10%, rgba(34,170,239,.13), transparent 60%),
    radial-gradient(500px 300px at 50% 100%, rgba(15,143,217,.08), transparent 65%),
    #f4f9fd;
  border-radius:18px;
}

/* ---------- سایدبار: کارت شیشه‌ای سه‌بعدی با درخشش لبه ---------- */
#tbPageStudentPanel .tb-stu-side{
  background:linear-gradient(175deg,#ffffff 0%,var(--sb1) 100%) !important;
  border:2px solid var(--sb3) !important;
  border-radius:16px !important;
  box-shadow:0 1px 0 rgba(255,255,255,.9) inset, 0 14px 34px rgba(10,85,129,.16) !important;
}
#tbPageStudentPanel .tb-stu-profile{border-bottom:none !important;border-inline-end:1.5px dashed var(--sb3) !important;}
#tbPageStudentPanel .tb-stu-avatar{
  background:linear-gradient(145deg,var(--sb4),var(--sb7)) !important;
  box-shadow:0 0 0 4px #fff, 0 0 0 7px var(--sb2), 0 8px 18px rgba(10,85,129,.35) !important;
}
#tbPageStudentPanel .tb-stu-name{color:var(--sb8) !important;}

/* دکمه‌های ناوبری سایدبار: عمق سه‌بعدی + درخشش پشتِ حالت فعال (فقط آیتم‌های مستقیم، نه آیتم‌های داخل زیرمنوی کشویی) */
#tbPageStudentPanel .tb-stu-side>.tb-stu-nav-item{
  border:1.5px solid var(--sb2) !important;
  box-shadow:0 1px 3px rgba(10,85,129,.08) !important;
  transition:transform .15s ease, box-shadow .15s ease, background .2s ease !important;
}
#tbPageStudentPanel .tb-stu-side>.tb-stu-nav-item:hover{
  background:linear-gradient(135deg,var(--sb1),var(--sb2)) !important;
  border-color:var(--sb4) !important;
  box-shadow:0 4px 10px rgba(10,85,129,.14) !important;
}
#tbPageStudentPanel .tb-stu-side>.tb-stu-nav-item.active{
  background:linear-gradient(135deg,var(--sb4),var(--sb7)) !important;
  border-color:var(--sb8) !important;
  box-shadow:0 1px 3px rgba(10,85,129,.08) !important;
}
#tbPageStudentPanel .tb-stu-nav-drop .tb-stu-nav-item{
  border:none !important;
  box-shadow:none !important;
  transform:none !important;
  border-radius:0 !important;
}
#tbPageStudentPanel .tb-stu-nav-drop .tb-stu-nav-item:hover{
  background:#EAF7FE !important;
  box-shadow:none !important;
}
#tbPageStudentPanel .tb-stu-nav-drop .tb-stu-nav-item.active{
  background:#0F8FD9 !important;
  color:#fff;
  border-radius:6px !important;
  margin:0 6px;
  box-shadow:none !important;
  transform:none !important;
}

/* ---------- سرتیتر بخش‌ها: نوار تاکیدی + درخشش ملایم پشت متن ---------- */
#tbPageStudentPanel .tb-stu-section-title{
  position:relative;
  padding-right:14px;
  border-right:4px solid var(--sb5);
  letter-spacing:.2px;
}
#tbPageStudentPanel .tb-stu-section-title::before{
  content:"";
  position:absolute;right:-9px;top:2px;
  width:9px;height:9px;border-radius:50%;
  background:var(--sb5);
  box-shadow:0 0 0 4px rgba(34,170,239,.18), 0 0 10px rgba(34,170,239,.55);
}

/* ---------- کارت‌های اصلی: درخشش نوری پشت گوشه‌ی بالا (highlight پشت کارت) ---------- */
#tbPageStudentPanel .card,#tbPageStudentPanel .stat-card,#tbPageStudentPanel .tb-adm-dpbox,
#tbPageStudentPanel .tb-stu-card,#tbPageStudentPanel .tb-stu-fin-course-card,
#tbPageStudentPanel .tb-stu-fin-sumbox{
  position:relative;
  border-radius:16px !important;
  overflow:hidden;
}
#tbPageStudentPanel .card::before,#tbPageStudentPanel .tb-stu-card::before{
  content:"";
  position:absolute;top:-40%;left:-20%;
  width:60%;height:90%;
  background:radial-gradient(circle, rgba(99,199,251,.28), transparent 70%);
  pointer-events:none;
  z-index:0;
}
#tbPageStudentPanel .card>*,#tbPageStudentPanel .tb-stu-card>*{position:relative;z-index:1;}
#tbPageStudentPanel .card:hover,#tbPageStudentPanel .stat-card:hover,#tbPageStudentPanel .tb-stu-card:hover{
  box-shadow:0 1px 0 rgba(255,255,255,.9) inset, 0 16px 34px rgba(10,85,129,.28) !important;
  transform:translateY(-2px);
  transition:transform .18s ease, box-shadow .18s ease;
}

/* ---------- جعبه‌های آماری بالای صفحات (خلاصه‌ها) ---------- */
#tbPageStudentPanel .stat-card{
  border-top:3px solid var(--sb5) !important;
}

/* ---------- جدول‌های پنل: سرستون گرادیانی به‌جای رنگ تخت ---------- */
#tbPageStudentPanel .tb-adm-table th,#tbPageStudentPanel .tb-stu-grade-table th{
  background:linear-gradient(180deg,var(--sb5),var(--sb7)) !important;
  text-shadow:0 1px 1px rgba(4,40,60,.25);
}
#tbPageStudentPanel .tb-adm-table tr:hover{background:var(--sb1) !important;}
#tbPageStudentPanel .tb-excel-table th{background:linear-gradient(180deg,var(--sb5),var(--sb7)) !important;}

/* ---------- آیتم‌های آزمون/تکالیف: کمی برجسته‌تر با هاور نرم ---------- */
#tbPageStudentPanel .tb-stu-quiz-item{
  border:1.5px solid var(--sb2) !important;
  box-shadow:0 2px 8px rgba(10,85,129,.08) !important;
  transition:box-shadow .15s ease, transform .15s ease;
}
#tbPageStudentPanel .tb-stu-quiz-item:hover{
  box-shadow:0 6px 16px rgba(10,85,129,.16) !important;
  transform:translateY(-1px);
}

/* ---------- درخور دسکتاپ/موبایل: کاهش شدت افکت روی صفحات کوچک ---------- */
@media (max-width:640px){
  #tbPageStudentPanel .card::before,#tbPageStudentPanel .tb-stu-card::before{display:none;}
}

/* ---------- قدمِ ۱۴۰ (ادامه) — پولیشِ باکسِ پروفایل/آواتار — سراسریِ هر ۵ نمای پنل
   (دانشجو/استاد/ادمین/ناظر/ویرایشگر همه از همین کلاس‌های مشترک استفاده می‌کنند،
   پس این یک تغییر با اثرِ همه‌جایی است) ---------- */
#tbPageStudentPanel .tb-stu-profile{
  background:linear-gradient(135deg,var(--sb1),#ffffff) !important;
  border-radius:14px !important;
  border-inline-end:none !important;
  padding:10px 12px !important;
  box-shadow:0 1px 0 #fff inset, 0 4px 12px rgba(10,85,129,.10);
  margin-bottom:4px !important;
}
#tbPageStudentPanel .tb-stu-avatar{
  background:linear-gradient(150deg,var(--sb5),var(--sb8)) !important;
  box-shadow:0 0 0 3px #fff, 0 0 0 4.5px var(--sb3), 0 4px 10px rgba(10,85,129,.30) !important;
}
#tbPageStudentPanel .tb-stu-name{font-size:13px !important;}

/* ---------- قدمِ ۱۴۰ (ادامه) — پولیشِ فیلدهایِ فقط‌خواندنیِ «اطلاعات شخصی» — به‌جایِ
   خاکستریِ مسطحِ پیش‌فرضِ input:disabled، ظاهرِ نرم‌تر و هم‌رنگ با پالتِ سایت ---------- */
#tbPageStudentPanel .tb-stu-ffield label{
  display:flex;align-items:center;gap:5px;color:var(--sb8) !important;
}
#tbPageStudentPanel .tb-stu-ffield input:disabled{
  background:var(--sb1) !important;
  border-color:var(--sb2) !important;
  color:#3a4a5c !important;
  font-weight:700;
}

/* ---------- قدمِ ۱۴۰ (تکمیل) — پولیشِ اختصاصیِ نمایِ ادمین/استاد: کاشی‌هایِ
   دسترسیِ سریعِ داشبورد (.tb-adm-dashtile) — این کلاس بینِ داشبوردِ ادمین (۵ کاشی) و
   داشبوردِ استاد (۵ کاشی) کاملاً مشترک است، پس یک پولیش هر دو نما را هم‌زمان پوشش
   می‌دهد. آیکونِ داخلِ هر کاشی همیشه اولین فرزند است (بدونِ کلاسِ اختصاصی)، پس با
   `:first-child` هدف‌گیری شد تا نیازی به تغییرِ ده‌ها خطِ HTML نباشد. ---------- */
#tbPageStudentPanel .tb-adm-dashtile{
  background:linear-gradient(160deg,#ffffff,var(--sb1)) !important;
  border:1.5px solid var(--sb2) !important;
  border-top:3px solid var(--sb5) !important;
  box-shadow:0 1px 0 #fff inset, 0 4px 12px rgba(10,85,129,.08);
}
#tbPageStudentPanel .tb-adm-dashtile:hover{
  border-color:var(--sb5) !important;
  box-shadow:0 1px 0 #fff inset, 0 12px 26px rgba(10,85,129,.20) !important;
}
#tbPageStudentPanel .tb-adm-dashtile > div:first-child{
  width:42px;height:42px;border-radius:12px;
  background:linear-gradient(150deg,var(--sb2),var(--sb4));
  display:flex;align-items:center;justify-content:center;
  box-shadow:0 2px 6px rgba(10,85,129,.14);
}

/* ---------- قدمِ ۱۴۰ (تکمیل) — درخششِ نرمِ فوکوس روی ورودی‌ها/انتخاب‌گرهایِ نمایِ
   ادمین/استاد (جستجو، فیلترها، فیلدهایِ متایِ کلاسِ زنده و...) — این فیلدها با
   استایلِ inline پراکنده‌اند، پس به‌جایِ ویرایشِ تک‌تکِ خط‌ها، یک قانونِ سراسریِ
   `:focus` روی تگ اضافه شد؛ رنگ/ابعادِ خودِ فیلدها دست‌نخورده می‌ماند. ---------- */
#tbPageStudentPanel input:focus,#tbPageStudentPanel select:focus,#tbPageStudentPanel textarea:focus{
  outline:none !important;
  border-color:var(--sb5) !important;
  box-shadow:0 0 0 3px var(--sb2) !important;
}

/* ===== Block 5 ===== */
/* ==================== مسنجر شناور — استایل ادغام‌شده و هم‌رنگ با سایت (جایگزین رنگ‌بندی سبز اصلی مسنجر با پالت آبی/سرمه‌ای سایت) ==================== */

        #tbMessengerRoot{
            --bg-primary: #eef8ff;
            --bg-secondary: #eef8ff;
            --bg-tertiary: #f7fbff;
            --bg-chat: #e4f4fb;
            --bg-input: #ffffff;
            --accent: #1789C2;
            --accent-dark: #0F3D73;
            --accent-light: #63c7fb;
            --accent-glow: rgba(15,61,115,0.2);
            --sent-bubble: #d3edfe;
            --received-bubble: #ffffff;
            --text-primary: #12303f;
            --text-secondary: #4d6675;
            --text-muted: #94a8b2;
            --border-color: #a7defd;
            --border-light: #eef8ff;
            --danger: #e53935;
            --warning: #1789C2;
            --success: #22c55e;
            --online: #22c55e;
            --away: #1789C2;
            --offline: #bbb;
            --tick-sent: #94a8b2;
            --tick-read: #1789c2;
            --rolebar-h: 48px;
        }
        /* ===== حالتِ تاریکِ مسنجر (دستهٔ ۲) =====
           فقط با بازنویسیِ همان متغیرهای CSS بالا — چون تمامِ استایل‌های مسنجر از قبل از این
           متغیرها استفاده می‌کنند، نیازی به تغییرِ هیچ قاعدهٔ دیگری نیست. کلاسِ dark روی خودِ
           #tbMessengerRoot با جاوااسکریپت اضافه/حذف می‌شود و در localStorage ذخیره می‌ماند. */
        #tbMessengerRoot.dark{
            --bg-primary: #101923;
            --bg-secondary: #101923;
            --bg-tertiary: #17222d;
            --bg-chat: #0b131b;
            --bg-input: #1c2833;
            --accent: #2196d6;
            --accent-dark: #0c3a63;
            --accent-light: #63c7fb;
            --accent-glow: rgba(33,150,214,0.28);
            --sent-bubble: #164263;
            --received-bubble: #1c2833;
            --text-primary: #e8f1f7;
            --text-secondary: #a9bdc9;
            --text-muted: #6f8593;
            --border-color: #26343f;
            --border-light: #1c2833;
        }
        #tbMessengerRoot *{margin:0;padding:0;box-sizing:border-box;font-family:'Vazirmatn',Tahoma,'Segoe UI',system-ui,sans-serif;}
        #tbMessengerRoot ::-webkit-scrollbar{width:5px;}
        #tbMessengerRoot ::-webkit-scrollbar-track{background:transparent;}
        #tbMessengerRoot ::-webkit-scrollbar-thumb{background:rgba(0,0,0,0.1);border-radius:10px;}

        #tbMessengerRoot .chat-container{display:flex;height:100vh;position:relative;}

        /* ===== نوار نقش ===== */
        #tbMessengerRoot .role-bar{
            position:absolute;top:0;left:0;right:0;z-index:30;
            background:var(--bg-tertiary);border-bottom:2px solid var(--accent);
            padding:8px 16px;display:flex;align-items:center;justify-content:space-between;
        }
        #tbMessengerRoot .role-bar-right{display:flex;align-items:center;gap:10px;}
        #tbMessengerRoot .role-bar-right label{font-size:0.78rem;color:var(--text-secondary);font-weight:600;}
        #tbMessengerRoot .role-toggle{display:flex;gap:3px;background:var(--bg-primary);border-radius:10px;padding:3px;box-shadow:inset 0 1px 3px rgba(0,0,0,0.06);}
        #tbMessengerRoot .role-btn{
            padding:5px 14px;border-radius:8px;border:none;font-size:0.75rem;
            font-weight:600;cursor:pointer;transition:all 0.25s;
            background:transparent;color:var(--text-secondary);font-family:'Vazirmatn',sans-serif;
        }
        #tbMessengerRoot .role-btn.active{background:linear-gradient(135deg,var(--accent-light),var(--accent) 55%,var(--accent-dark));color:#fff;box-shadow:0 2px 8px var(--accent-glow);}
        #tbMessengerRoot .role-btn:hover:not(.active){background:rgba(23,137,194,0.1);}
        #tbMessengerRoot .role-toggle-group{display:flex;gap:3px;transition:all 0.25s;}
        #tbMessengerRoot .role-expand-btn{
            display:flex;align-items:center;gap:4px;padding:5px 12px;border-radius:20px;
            border:1px dashed var(--border-color);background:transparent;color:var(--text-muted);
            font-size:0.7rem;font-weight:600;cursor:pointer;transition:all 0.2s;font-family:'Vazirmatn',sans-serif;
        }
        #tbMessengerRoot .role-expand-btn:hover{border-color:var(--accent);color:var(--accent-dark);background:rgba(23,137,194,0.06);}
        #tbMessengerRoot .security-badge{
            display:flex;align-items:center;gap:5px;font-size:0.72rem;
            color:var(--success);background:rgba(34,197,94,0.08);
            padding:4px 12px;border-radius:20px;box-shadow:inset 0 0 0 1px rgba(34,197,94,0.15);
        }
        #tbMessengerRoot .security-badge i{font-size:0.7rem;}

        /* ===== سایدبار ===== */
        #tbMessengerRoot .sidebar{
            width:370px;min-width:370px;background:var(--bg-secondary);
            border-left:1px solid var(--border-color);
            display:flex;flex-direction:column;z-index:10;padding-top:var(--rolebar-h);min-height:0;
        }
        #tbMessengerRoot .sidebar-header{padding:12px 16px;background:var(--bg-tertiary);border-bottom:1px solid var(--border-color);box-shadow:0 2px 6px rgba(18,48,63,0.03);position:relative;z-index:2;}
        #tbMessengerRoot .sidebar-header h1{font-size:1.1rem;font-weight:800;color:var(--accent-dark);display:flex;align-items:center;gap:8px;}
        #tbMessengerRoot .sidebar-header h1 i{font-size:1rem;}
        #tbMessengerRoot .tb-msgr-self-name{color:var(--success);font-size:0.72rem;font-weight:700;}
        #tbMessengerRoot .sidebar-actions{display:flex;gap:3px;}
        #tbMessengerRoot .sidebar-actions .header-btn{font-size:0.9rem;}

        #tbMessengerRoot .search-box{margin:8px 12px;position:relative;}
        #tbMessengerRoot .search-box input{
            width:100%;padding:9px 36px 9px 12px;background:var(--bg-input);
            border:1px solid var(--border-color);border-radius:20px;
            color:var(--text-primary);font-size:0.84rem;outline:none;
            transition:all 0.3s;font-family:'Vazirmatn',sans-serif;
        }
        #tbMessengerRoot .search-box input::placeholder{color:var(--text-muted);}
        #tbMessengerRoot .search-box input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-glow);}

        #tbMessengerRoot .filter-tabs{
            display:flex;gap:3px;margin:0 12px 10px;padding:3px;overflow-x:auto;
            background:var(--bg-primary);border-radius:12px;box-shadow:inset 0 1px 3px rgba(0,0,0,0.06);
        }
        #tbMessengerRoot .filter-tab{
            padding:5px 13px;border-radius:9px;font-size:0.73rem;font-weight:600;
            cursor:pointer;border:none;background:transparent;color:var(--text-secondary);
            transition:all 0.25s;white-space:nowrap;font-family:'Vazirmatn',sans-serif;flex:1;
        }
        #tbMessengerRoot .filter-tab.active{background:linear-gradient(135deg,var(--accent-light),var(--accent) 55%,var(--accent-dark));color:#fff;box-shadow:0 2px 8px var(--accent-glow);}
        #tbMessengerRoot .filter-tab:hover:not(.active){background:rgba(23,137,194,0.1);color:var(--accent-dark);}

        #tbMessengerRoot .contacts-list{flex:1;overflow-y:auto;overflow-x:hidden;padding:2px 5px;min-height:0;overscroll-behavior:contain;}

        /* ===== پوشه‌های ادمین (گروه‌بندی بر اساس استاد) ===== */
        #tbMessengerRoot .folder-group{margin-bottom:3px;}
        #tbMessengerRoot .folder-header{
            display:flex;align-items:center;gap:9px;padding:9px 10px;border-radius:12px;
            cursor:pointer;transition:all 0.2s;background:rgba(23,137,194,0.05);
        }
        #tbMessengerRoot .folder-header:hover{background:rgba(23,137,194,0.1);}
        #tbMessengerRoot .folder-header .folder-icon{font-size:1rem;flex-shrink:0;}
        #tbMessengerRoot .folder-header .folder-name{flex:1;font-weight:700;font-size:0.85rem;color:var(--accent-dark);}
        #tbMessengerRoot .folder-header .folder-count{
            background:var(--accent);color:#fff;font-size:0.65rem;font-weight:700;
            border-radius:10px;padding:1px 8px;flex-shrink:0;
        }
        #tbMessengerRoot .folder-header .folder-chevron{font-size:0.7rem;color:var(--text-muted);transition:transform 0.2s;flex-shrink:0;}
        #tbMessengerRoot .folder-group.open .folder-chevron{transform:rotate(180deg);}
        #tbMessengerRoot .folder-body{display:none;padding-right:8px;border-right:2px dashed var(--border-color);margin-right:19px;}
        #tbMessengerRoot .folder-group.open .folder-body{display:block;}

        /* ===== سنجاق‌کردن مکالمه ===== */
        #tbMessengerRoot .contact-item.pinned{background:rgba(23,137,194,0.05);}
        #tbMessengerRoot .pin-mark{font-size:0.7rem;color:var(--accent-dark);margin-left:3px;flex-shrink:0;}

        /* ===== دکمه‌ی بارگذاری پیام‌های قدیمی‌تر ===== */
        #tbMessengerRoot .load-older-wrap{display:flex;justify-content:center;padding:4px 0 10px;}
        #tbMessengerRoot .load-older-btn{
            border:1px solid var(--border-color);background:var(--bg-input);color:var(--accent-dark);
            font-size:0.72rem;font-weight:600;padding:6px 16px;border-radius:16px;cursor:pointer;
            display:flex;align-items:center;gap:6px;transition:all 0.2s;font-family:'Vazirmatn',sans-serif;
        }
        #tbMessengerRoot .load-older-btn:hover{background:rgba(23,137,194,0.08);}

        /* ===== آیکن‌های درون‌خطی (بدون وابستگی به فونت خارجی) ===== */
        #tbMessengerRoot .ic{display:inline-block;line-height:1;font-style:normal;}

        /* ===== دایرکتوری دانشجویان (نمای استاد) ===== */
        #tbMessengerRoot .directory-item{
            display:flex;align-items:center;gap:11px;padding:10px 6px;border-bottom:1px solid var(--border-light);
        }
        #tbMessengerRoot .directory-item img{width:42px;height:42px;border-radius:50%;object-fit:cover;flex-shrink:0;}
        #tbMessengerRoot .directory-info{flex:1;min-width:0;}
        #tbMessengerRoot .directory-info .di-name{font-weight:600;font-size:0.86rem;color:var(--text-primary);}
        #tbMessengerRoot .directory-info .di-course{font-size:0.73rem;color:var(--text-secondary);}
        #tbMessengerRoot .directory-chat-btn{
            border:none;background:linear-gradient(135deg,var(--accent-light),var(--accent) 55%,var(--accent-dark));color:#fff;font-size:0.72rem;font-weight:600;
            padding:6px 13px;border-radius:14px;cursor:pointer;flex-shrink:0;transition:all 0.2s;font-family:'Vazirmatn',sans-serif;box-shadow:0 2px 6px var(--accent-glow);
        }
        #tbMessengerRoot .directory-chat-btn:hover{transform:translateY(-1px);box-shadow:0 4px 10px var(--accent-glow);}
        #tbMessengerRoot .directory-chat-btn.has-chat{background:transparent;color:var(--accent-dark);border:1px solid var(--accent);}

        #tbMessengerRoot .contact-item{
            display:flex;align-items:center;padding:9px 10px;border-radius:12px;
            cursor:pointer;transition:all 0.2s;margin-bottom:2px;
        }
        #tbMessengerRoot .contact-item:hover{background:rgba(23,137,194,0.07);transform:translateX(-1px);}
        #tbMessengerRoot .contact-item.active{background:rgba(23,137,194,0.14);box-shadow:inset 0 0 0 1px rgba(23,137,194,0.18);}
        #tbMessengerRoot .contact-item.banned-item{opacity:0.55;pointer-events:none;}

        #tbMessengerRoot .contact-avatar{position:relative;margin-left:11px;flex-shrink:0;}
        #tbMessengerRoot .contact-avatar img{width:48px;height:48px;border-radius:50%;object-fit:cover;}
        #tbMessengerRoot .avatar-status{position:absolute;bottom:1px;left:1px;width:12px;height:12px;border-radius:50%;border:2.5px solid var(--bg-secondary);}
        #tbMessengerRoot .avatar-status.online{background:var(--online);}
        #tbMessengerRoot .avatar-status.away{background:var(--away);}
        #tbMessengerRoot .avatar-status.offline{background:var(--offline);}

        #tbMessengerRoot .contact-info{flex:1;min-width:0;}
        #tbMessengerRoot .contact-name-row{display:flex;align-items:center;justify-content:space-between;margin-bottom:2px;}
        #tbMessengerRoot .contact-name{font-weight:600;font-size:0.87rem;color:var(--text-primary);display:flex;align-items:center;gap:5px;}
        #tbMessengerRoot .role-badge{font-size:0.55rem;padding:1px 5px;border-radius:5px;font-weight:700;}
        #tbMessengerRoot .role-badge.teacher{background:rgba(23,137,194,0.13);color:#1789C2;}
        #tbMessengerRoot .role-badge.support{background:rgba(23,137,194,0.13);color:var(--accent-dark);}
        #tbMessengerRoot .role-badge.student{background:rgba(34,197,94,0.12);color:#1789C2;}
        #tbMessengerRoot .banned-tag{font-size:0.55rem;padding:1px 5px;border-radius:5px;font-weight:700;background:rgba(229,57,53,0.12);color:var(--danger);}
        #tbMessengerRoot .contact-time{font-size:0.66rem;color:var(--text-muted);flex-shrink:0;}
        #tbMessengerRoot .contact-preview{display:flex;align-items:center;justify-content:space-between;}
        #tbMessengerRoot .contact-last-msg{font-size:0.77rem;color:var(--text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:200px;}
        /* نشستِ جدید — طبقِ درخواستِ صریحِ حبیب: قاعده‌یِ جیمیل روی فهرستِ مخاطبینِ مسنجر —
           خوانده‌نشده پررنگ (نامِ سیاه‌ترِ ضخیم + متنِ پیشِ‌نمایشِ تیره)، خوانده‌شده هم‌چنان
           کم‌رنگ (رنگ‌هایِ پیش‌فرضِ بالا). فقط رویِ همین دو عنصر، بدونِ تغییرِ اندازه/چیدمان. */
        #tbMessengerRoot .contact-item.has-unread .contact-name{font-weight:800;}
        #tbMessengerRoot .contact-item.has-unread .contact-last-msg{color:var(--text-primary);font-weight:700;}
        /* نشستِ جدید — قدمِ ۲۶۱: طبقِ درخواستِ صریحِ حبیب، رنگِ این badge (تعدادِ پیامِ
           نخوانده‌یِ هر مخاطب در فهرستِ گفتگوها) به سبز تغییر کرد — هم‌الگو با رفتارِ
           واتساپ. badgeِ رویِ آیکونِ شناورِ مسنجر (tb-msgr-launcher .tb-msgr-badge)
           عمداً قرمز باقی ماند، چون نقشِ متفاوتی دارد (جلبِ توجهِ اولیه، نه شمارشِ
           مخاطب‌به‌مخاطب) و در همان نسخه‌ی قبل هم قرمز بوده. */
        #tbMessengerRoot .unread-badge{min-width:19px;height:19px;border-radius:50%;background:linear-gradient(135deg,#34d071,var(--success));color:#fff;font-size:0.65rem;font-weight:700;display:flex;align-items:center;justify-content:center;padding:0 5px;flex-shrink:0;box-shadow:0 2px 5px rgba(34,197,94,0.35);}

        /* ===== پنل چت ===== */
        #tbMessengerRoot .chat-panel{flex:1;display:flex;flex-direction:column;background:var(--bg-chat);position:relative;padding-top:var(--rolebar-h);min-height:0;min-width:0;}
        #tbMessengerRoot .chat-bg{position:absolute;inset:0;top:var(--rolebar-h);opacity:0.3;pointer-events:none;
            background-image:radial-gradient(circle at 25% 35%,rgba(23,137,194,0.12) 0.5px,transparent 0.5px),radial-gradient(circle at 70% 65%,rgba(23,137,194,0.08) 0.5px,transparent 0.5px);
            background-size:38px 38px,52px 52px;}

        #tbMessengerRoot .chat-header{
            padding:9px 16px;background:var(--bg-tertiary);border-bottom:1px solid var(--border-color);
            display:flex;align-items:center;justify-content:space-between;z-index:5;
        }
        #tbMessengerRoot .chat-header-right{display:flex;align-items:center;gap:11px;}
        #tbMessengerRoot .chat-header-avatar img{width:38px;height:38px;border-radius:50%;object-fit:cover;}
        #tbMessengerRoot .chat-header-info h3{font-weight:700;font-size:0.9rem;color:var(--text-primary);}
        #tbMessengerRoot .chat-header-info h3.tb-msgr-student-name{color:var(--success) !important;}
        #tbMessengerRoot .chat-header-status{font-size:0.73rem;color:var(--text-secondary);display:flex;align-items:center;gap:4px;}
        #tbMessengerRoot .status-dot{width:7px;height:7px;border-radius:50%;display:inline-block;}
        #tbMessengerRoot .status-dot.online{background:var(--online);}
        #tbMessengerRoot .status-dot.offline{background:var(--offline);}
        /* نشستِ جدید — طبقِ درخواستِ حبیب: همان نقطه‌یِ آنلاین/آفلاین، این‌بار رویِ گوشه‌یِ
           آواتار در خودِ فهرستِ مخاطبین (contact-avatar از قبل position:relative دارد). */
        #tbMessengerRoot .avatar-status-dot{position:absolute;bottom:0;left:0;width:11px;height:11px;border-radius:50%;border:2px solid var(--panel-bg,#fff);box-sizing:content-box;}
        #tbMessengerRoot .avatar-status-dot.online{background:var(--online);}
        #tbMessengerRoot .avatar-status-dot.offline{background:var(--offline);}
        /* قدمِ ۲۷۴ — نشانگرِ «در حال نوشتن...» در chat-header-status (رجوع به msgrHandlePusherTyping) */
        #tbMessengerRoot .msgr-typing-label{color:var(--accent);font-style:italic;}
        #tbMessengerRoot .chat-header-left{display:flex;gap:2px;}

        #tbMessengerRoot .header-btn{
            width:36px;height:36px;border-radius:50%;border:none;background:transparent;
            color:var(--text-secondary);cursor:pointer;display:flex;align-items:center;
            justify-content:center;font-size:0.95rem;transition:all 0.2s;
        }
        #tbMessengerRoot .header-btn:hover{background:rgba(23,137,194,0.1);color:var(--accent-dark);transform:translateY(-1px);}
        #tbMessengerRoot .header-btn.admin-only{color:var(--accent-dark);font-weight:700;}

        /* ===== پیام‌ها ===== */
        #tbMessengerRoot .messages-area{flex:1;overflow-y:auto;overflow-x:hidden;padding:14px 16px;position:relative;z-index:1;display:flex;flex-direction:column;gap:2px;min-height:0;overscroll-behavior:contain;}
        #tbMessengerRoot .msg-group{display:flex;flex-direction:column;gap:2px;margin-bottom:4px;}
        #tbMessengerRoot .msg-group.sent{align-items:flex-start;}
        #tbMessengerRoot .msg-group.received{align-items:flex-end;}

        #tbMessengerRoot .message-bubble{
            max-width:68%;padding:6px 10px;border-radius:16px;position:relative;
            font-size:0.88rem;line-height:1.75;cursor:default;transition:filter 0.15s;word-wrap:break-word;
        }
        #tbMessengerRoot .message-bubble:hover{filter:brightness(0.96);}
        #tbMessengerRoot .msg-group.sent .message-bubble{background:var(--sent-bubble);border-bottom-right-radius:5px;color:var(--text-primary);}
        #tbMessengerRoot .msg-group.sent .message-bubble:first-child{border-top-right-radius:5px;}
        #tbMessengerRoot .msg-group.received .message-bubble{background:var(--received-bubble);border-bottom-left-radius:5px;color:var(--text-primary);}
        #tbMessengerRoot .msg-group.received .message-bubble:first-child{border-top-left-radius:5px;}

        /* واکنشِ پیام (این نشست) — نوارِ کوچکِ بج‌مانند زیرِ حباب، هم‌سو با جهتِ حباب */
        #tbMessengerRoot .msg-reactions{display:flex;gap:3px;flex-wrap:wrap;margin-top:2px;}
        #tbMessengerRoot .msg-reaction-badge{
            font-size:0.72rem;background:var(--received-bubble);border:1px solid rgba(0,0,0,0.06);
            border-radius:10px;padding:1px 7px;cursor:pointer;user-select:none;transition:filter 0.15s;
        }
        #tbMessengerRoot .msg-reaction-badge:hover{filter:brightness(0.94);}
        #tbMessengerRoot .msg-reaction-badge.mine{background:var(--primary-color,#1789c2);color:#fff;border-color:transparent;}

        #tbMessengerRoot .msg-meta{display:flex;align-items:center;gap:3px;justify-content:flex-end;margin-top:1px;}
        #tbMessengerRoot .msg-time{font-size:0.63rem;color:var(--text-muted);}
        /* قدمِ ۲۶۶ — رسیدِ خواندنِ آبی: تیکِ خاکستری = ارسال‌شده، تیکِ آبی = خوانده‌شده
           (هم‌الگو با واتساپ)؛ فقط رویِ حبابِ پیام‌هایِ خودِ کاربر رندر می‌شود. */
        #tbMessengerRoot .msg-ticks{font-size:0.72rem;letter-spacing:-2px;margin-right:3px;color:var(--text-muted);}
        /* قدمِ ۲۷۴ (طبقِ درخواستِ صریحِ حبیب) — رنگِ آبیِ تیکِ خوانده‌شده و رنگِ سبزِ اعلان‌ها
           به‌اندازه‌ی کافی به‌هم نزدیک بودند که در نگاهِ اول به چشم نیاید؛ بدونِ تغییرِ رنگ،
           فقط ضخامتِ خودِ نماد با text-stroke دو برابر شد (علاوه‌بر font-weight/سایزِ بیشتر)
           تا تیکِ آبی واضح‌تر از تیکِ خاکستریِ معمولی دیده شود. */
        #tbMessengerRoot .msg-ticks-read{color:var(--accent);letter-spacing:-1px;font-weight:900;font-size:0.82rem;-webkit-text-stroke:0.45px var(--accent);text-stroke:0.45px var(--accent);}
        #tbMessengerRoot .msg-edited-label{font-size:0.63rem;color:var(--text-muted);margin-inline-start:4px;font-style:italic;}
        #tbMessengerRoot .msg-forward-label{font-size:0.68rem;color:var(--accent-dark);margin-bottom:3px;font-style:italic;display:flex;align-items:center;gap:3px;}
        #tbMessengerRoot .msg-status{font-size:0.68rem;}
        #tbMessengerRoot .msg-status.tick-sent{color:var(--tick-sent);}
        #tbMessengerRoot .msg-status.tick-read{color:var(--tick-read);}
        #tbMessengerRoot .msg-deleted{font-size:0.78rem;font-style:italic;color:var(--text-muted);border:1px dashed var(--border-color);border-radius:10px;padding:6px 10px;background:transparent;}

        #tbMessengerRoot .monitor-banner{
            padding:8px 16px;background:rgba(23,137,194,0.08);border-bottom:1px solid rgba(23,137,194,0.2);
            font-size:0.78rem;color:#0F3D73;display:flex;align-items:center;gap:8px;z-index:5;
        }
        #tbMessengerRoot .blocked-banner{
            padding:8px 16px;background:rgba(229,57,53,0.08);border-bottom:1px solid rgba(229,57,53,0.2);
            font-size:0.78rem;color:var(--danger);display:flex;align-items:center;gap:8px;z-index:5;
        }
        #tbMessengerRoot .attach-preview{
            display:none;align-items:center;gap:8px;background:var(--bg-input);border:1px solid var(--border-color);
            border-radius:12px;padding:6px 10px;margin-bottom:7px;font-size:0.78rem;color:var(--text-secondary);
        }
        #tbMessengerRoot .attach-preview.show{display:flex;}
        #tbMessengerRoot .attach-preview img{width:32px;height:32px;object-fit:cover;border-radius:6px;}
        #tbMessengerRoot .attach-preview .ap-remove{margin-right:auto;background:none;border:none;color:var(--text-muted);cursor:pointer;}
        #tbMessengerRoot .attach-preview .ap-remove:hover{color:var(--danger);}
        #tbMessengerRoot .msg-file-link{display:flex;align-items:center;gap:6px;color:var(--accent-dark);text-decoration:none;font-size:0.82rem;margin-bottom:4px;}
        #tbMessengerRoot .msg-file-link img{width:120px;border-radius:8px;display:block;margin-bottom:3px;}

        #tbMessengerRoot .reply-preview{
            background:rgba(23,137,194,0.08);border-right:2.5px solid var(--accent);
            padding:4px 8px;border-radius:6px;margin-bottom:4px;font-size:0.76rem;
        }
        #tbMessengerRoot .reply-preview .reply-name{color:var(--accent-dark);font-weight:600;font-size:0.68rem;}
        #tbMessengerRoot .reply-preview .reply-text{color:var(--text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:240px;}

        #tbMessengerRoot .date-separator{text-align:center;margin:10px 0;}
        #tbMessengerRoot .date-separator span{background:rgba(255,255,255,0.7);padding:3px 12px;border-radius:16px;font-size:0.7rem;color:var(--text-muted);}

        #tbMessengerRoot .typing-indicator{
            display:none;align-items:center;gap:5px;padding:10px 14px;
            background:var(--received-bubble);border-radius:16px;border-bottom-left-radius:5px;
            max-width:100px;margin-bottom:5px;align-self:flex-end;
        }
        #tbMessengerRoot .typing-indicator.show{display:flex;}
        #tbMessengerRoot .typing-dots{display:flex;gap:4px;}
        #tbMessengerRoot .typing-dots span{width:7px;height:7px;border-radius:50%;background:var(--text-muted);animation:tbMsgr_typingBounce 1.4s infinite ease-in-out;}
        #tbMessengerRoot .typing-dots span:nth-child(2){animation-delay:0.2s;}
        #tbMessengerRoot .typing-dots span:nth-child(3){animation-delay:0.4s;}
        @keyframes tbMsgr_typingBounce{0%,60%,100%{transform:translateY(0);opacity:0.4;}30%{transform:translateY(-6px);opacity:1;}}

        /* ===== ورودی ===== */
        #tbMessengerRoot .chat-input-area{padding:8px 12px;background:var(--bg-tertiary);border-top:1px solid var(--border-color);z-index:5;position:relative;}
        #tbMessengerRoot .emoji-panel{
            display:none;position:absolute;bottom:60px;right:12px;width:320px;
            background:var(--bg-input);border:1px solid var(--border-color);border-radius:14px;
            padding:10px;z-index:50;box-shadow:0 4px 18px rgba(0,0,0,0.08);animation:tbMsgr_emojiUp 0.25s ease;
        }
        #tbMessengerRoot .emoji-panel.show{display:block;}
        @keyframes tbMsgr_emojiUp{from{opacity:0;transform:translateY(8px);}to{opacity:1;transform:translateY(0);}}
        #tbMessengerRoot .emoji-categories{display:flex;gap:3px;margin-bottom:7px;padding-bottom:7px;border-bottom:1px solid var(--border-light);overflow-x:auto;}
        #tbMessengerRoot .emoji-cat-btn{padding:4px 6px;border:none;background:transparent;border-radius:8px;cursor:pointer;font-size:1.05rem;transition:all 0.2s;flex-shrink:0;}
        #tbMessengerRoot .emoji-cat-btn:hover, #tbMessengerRoot .emoji-cat-btn.active{background:rgba(23,137,194,0.1);}
        #tbMessengerRoot .emoji-grid{display:grid;grid-template-columns:repeat(8,1fr);gap:1px;max-height:180px;overflow-y:auto;overscroll-behavior:contain;}
        #tbMessengerRoot .emoji-item{padding:4px;border:none;background:transparent;border-radius:8px;cursor:pointer;font-size:1.2rem;transition:all 0.15s;text-align:center;}
        #tbMessengerRoot .emoji-item:hover{background:rgba(23,137,194,0.1);transform:scale(1.2);}

        /* ===== پاسخ‌هایِ آماده (آیتمِ ۵ از طرحِ بهینه‌سازیِ مسنجر، فقط ادمین) ===== */
        #tbMessengerRoot .canned-list{max-height:220px;overflow-y:auto;overscroll-behavior:contain;margin-bottom:8px;}
        #tbMessengerRoot .canned-item{display:flex;align-items:center;gap:4px;margin-bottom:4px;}
        #tbMessengerRoot .canned-item-text{
            flex:1;text-align:right;padding:8px 10px;border:1px solid var(--border-light);background:var(--bg-tertiary);
            border-radius:10px;cursor:pointer;font-size:0.78rem;color:var(--text-primary);transition:all 0.15s;
            font-family:'Vazirmatn',sans-serif;line-height:1.5;
        }
        #tbMessengerRoot .canned-item-text:hover{background:rgba(23,137,194,0.08);border-color:var(--accent);}
        #tbMessengerRoot .canned-item-del{flex-shrink:0;width:30px;height:30px;border:none;background:transparent;color:var(--text-muted);cursor:pointer;border-radius:8px;transition:all 0.15s;}
        #tbMessengerRoot .canned-item-del:hover{background:rgba(220,53,69,0.1);color:var(--danger);}
        #tbMessengerRoot .canned-add-row{display:flex;gap:5px;border-top:1px solid var(--border-light);padding-top:8px;}
        #tbMessengerRoot #cannedNewText{
            flex:1;border:1px solid var(--border-light);border-radius:10px;padding:7px 10px;font-size:0.78rem;
            background:var(--bg-primary);color:var(--text-primary);font-family:'Vazirmatn',sans-serif;
        }
        #tbMessengerRoot .canned-add-btn{
            width:34px;height:34px;flex-shrink:0;border:none;border-radius:10px;background:var(--accent);color:#fff;
            cursor:pointer;font-size:1rem;display:flex;align-items:center;justify-content:center;transition:all 0.15s;
        }
        #tbMessengerRoot .canned-add-btn:hover{background:var(--accent-dark);}

        #tbMessengerRoot .reply-bar{
            display:none;align-items:center;padding:7px 11px;background:var(--bg-input);
            border-radius:12px;margin-bottom:7px;border-right:2.5px solid var(--accent);
            gap:9px;animation:tbMsgr_slideDown 0.2s ease;
        }
        #tbMessengerRoot .reply-bar.show{display:flex;}
        @keyframes tbMsgr_slideDown{from{opacity:0;transform:translateY(-6px);}to{opacity:1;transform:translateY(0);}}
        #tbMessengerRoot .reply-bar-content{flex:1;min-width:0;}
        #tbMessengerRoot .reply-bar-name{font-size:0.7rem;color:var(--accent-dark);font-weight:600;}
        #tbMessengerRoot .reply-bar-text{font-size:0.76rem;color:var(--text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
        #tbMessengerRoot .reply-bar-close{background:none;border:none;color:var(--text-muted);cursor:pointer;font-size:0.85rem;padding:3px;transition:color 0.2s;}
        #tbMessengerRoot .reply-bar-close:hover{color:var(--danger);}
        #tbMessengerRoot .msg-reply-quote{background:rgba(0,0,0,0.12);border-inline-start:3px solid var(--accent-dark);border-radius:6px;padding:4px 8px;margin-bottom:4px;font-size:0.74rem;}
        #tbMessengerRoot .msg-reply-quote-name{font-weight:600;color:var(--accent-dark);}
        #tbMessengerRoot .msg-reply-quote-text{color:var(--text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
        #tbMessengerRoot .msg-reply-deleted{color:var(--text-muted);font-style:italic;}

        #tbMessengerRoot .input-row{display:flex;align-items:flex-end;gap:5px;}
        #tbMessengerRoot .input-actions{display:flex;gap:1px;align-items:center;}
        #tbMessengerRoot .input-btn{
            width:38px;height:38px;border-radius:50%;border:none;background:transparent;
            color:var(--text-muted);cursor:pointer;display:flex;align-items:center;justify-content:center;
            font-size:1rem;transition:all 0.2s;flex-shrink:0;
        }
        #tbMessengerRoot .input-btn:hover{background:rgba(23,137,194,0.08);color:var(--accent-dark);}
        #tbMessengerRoot .msg-input-wrapper{flex:1;position:relative;}
        #tbMessengerRoot .msg-input{
            width:100%;padding:9px 14px;background:var(--bg-input);border:none;border-radius:20px;
            color:var(--text-primary);font-size:0.86rem;outline:none;resize:none;max-height:110px;
            min-height:40px;line-height:1.6;transition:all 0.3s;font-family:'Vazirmatn',sans-serif;
            box-shadow:0 1px 3px rgba(0,0,0,0.05);
        }
        #tbMessengerRoot .msg-input::placeholder{color:var(--text-muted);}
        #tbMessengerRoot .msg-input:focus{box-shadow:0 0 0 2px var(--accent-glow),0 1px 3px rgba(0,0,0,0.05);}
        #tbMessengerRoot .msg-input:disabled{opacity:0.5;cursor:not-allowed;}
        #tbMessengerRoot .send-btn{
            width:40px;height:40px;border-radius:50%;border:none;background:var(--accent);
            color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;
            font-size:0.95rem;transition:all 0.25s;flex-shrink:0;
        }
        #tbMessengerRoot .send-btn:hover{background:var(--accent-dark);transform:scale(1.05);box-shadow:0 3px 12px var(--accent-glow);}
        #tbMessengerRoot .send-btn:active{transform:scale(0.95);}
        #tbMessengerRoot .send-btn:disabled{opacity:0.4;cursor:not-allowed;transform:none;box-shadow:none;}
        #tbMessengerRoot .send-btn.has-text{background:var(--accent);}

        /* ===== دکمه میکروفون و ضبط پیام صوتی ===== */
        #tbMessengerRoot .input-btn.mic-btn.recording{color:#fff;background:var(--danger);animation:tbMsgr_micPulse 1.2s infinite;}
        @keyframes tbMsgr_micPulse{0%{box-shadow:0 0 0 0 rgba(229,57,53,0.45);}70%{box-shadow:0 0 0 9px rgba(229,57,53,0);}100%{box-shadow:0 0 0 0 rgba(229,57,53,0);}}
        #tbMessengerRoot .voice-record-bar{
            display:none;align-items:center;gap:9px;padding:9px 14px;background:var(--bg-input);
            border-radius:24px;box-shadow:0 1px 3px rgba(0,0,0,0.05);animation:tbMsgr_slideDown 0.2s ease;
        }
        #tbMessengerRoot .voice-record-bar.show{display:flex;}
        #tbMessengerRoot .vr-cancel{background:none;border:none;color:var(--text-muted);cursor:pointer;font-size:1rem;padding:4px;flex-shrink:0;transition:color 0.2s;}
        #tbMessengerRoot .vr-cancel:hover{color:var(--danger);}
        #tbMessengerRoot .vr-dot{width:10px;height:10px;border-radius:50%;background:var(--danger);flex-shrink:0;animation:tbMsgr_recDot 1s infinite;}
        @keyframes tbMsgr_recDot{0%,100%{opacity:1;}50%{opacity:0.25;}}
        #tbMessengerRoot .vr-timer{font-size:0.82rem;color:var(--text-primary);font-weight:700;font-variant-numeric:tabular-nums;flex-shrink:0;}
        #tbMessengerRoot .vr-hint{flex:1;font-size:0.78rem;color:var(--text-muted);}
        #tbMessengerRoot .vr-stop{
            width:38px;height:38px;border-radius:50%;border:none;background:var(--accent);color:#fff;
            cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:0.95rem;flex-shrink:0;transition:all 0.2s;
        }
        #tbMessengerRoot .vr-stop:hover{background:var(--accent-dark);transform:scale(1.05);}

        /* ===== حباب پیام صوتی ===== */
        #tbMessengerRoot .voice-msg{display:flex;align-items:center;gap:8px;min-width:190px;padding:2px 2px 2px 0;}
        #tbMessengerRoot .voice-play-btn{
            width:32px;height:32px;border-radius:50%;border:none;background:var(--accent);color:#fff;
            cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:0.8rem;flex-shrink:0;transition:all 0.15s;
        }
        #tbMessengerRoot .voice-play-btn:hover{background:var(--accent-dark);}
        #tbMessengerRoot .voice-wave{position:relative;flex:1;height:26px;}
        #tbMessengerRoot .voice-wave-bars{display:flex;align-items:center;gap:2px;height:100%;position:absolute;top:0;right:0;left:0;}
        #tbMessengerRoot .voice-wave-bars span{width:2.5px;border-radius:2px;flex-shrink:0;}
        #tbMessengerRoot .voice-wave-bg span{background:var(--text-muted);opacity:0.4;}
        #tbMessengerRoot .voice-wave-fg{overflow:hidden;width:0%;}
        #tbMessengerRoot .voice-wave-fg span{background:var(--accent);opacity:1;}
        #tbMessengerRoot .voice-duration{font-size:0.68rem;color:var(--text-muted);flex-shrink:0;font-variant-numeric:tabular-nums;}
        #tbMessengerRoot .sound-toggle-btn.muted{color:var(--text-muted);opacity:0.6;}

        /* ===== کانتکست منو ===== */
        #tbMessengerRoot .context-menu{
            display:none;position:fixed;background:var(--bg-input);border:1px solid var(--border-color);
            border-radius:14px;padding:4px;z-index:100;box-shadow:0 4px 18px rgba(0,0,0,0.1);min-width:170px;animation:tbMsgr_ctxIn 0.15s ease;
        }
        #tbMessengerRoot .context-menu.show{display:block;}
        @keyframes tbMsgr_ctxIn{from{opacity:0;transform:scale(0.95);}to{opacity:1;transform:scale(1);}}
        #tbMessengerRoot .ctx-item{
            display:flex;align-items:center;gap:9px;padding:8px 12px;border-radius:10px;cursor:pointer;
            font-size:0.81rem;color:var(--text-primary);transition:all 0.15s;border:none;background:none;
            width:100%;text-align:right;font-family:'Vazirmatn',sans-serif;
        }
        #tbMessengerRoot .ctx-item:hover{background:rgba(23,137,194,0.08);}
        #tbMessengerRoot .ctx-item.danger{color:var(--danger);}
        #tbMessengerRoot .ctx-item .ic{width:16px;text-align:center;font-size:0.85rem;}
        #tbMessengerRoot .ctx-divider{height:1px;background:var(--border-light);margin:3px 8px;}

        /* ===== دستهٔ ۲: نوارِ واکنشِ سریع بالای منوی زمینه ===== */
        #tbMessengerRoot .ctx-reaction-row{display:flex;gap:2px;padding:4px 6px 6px;justify-content:space-between;}
        #tbMessengerRoot .ctx-reaction-btn{background:none;border:none;font-size:1.15rem;cursor:pointer;padding:4px 5px;
            border-radius:8px;transition:transform 0.15s,background 0.15s;line-height:1;}
        #tbMessengerRoot .ctx-reaction-btn:hover{background:rgba(23,137,194,0.1);transform:scale(1.25);}

        /* ===== دستهٔ ۲: نشان‌دادنِ واکنشِ ثبت‌شده روی حباب پیام ===== */
        #tbMessengerRoot .msg-reaction{
            position:absolute;bottom:-11px;background:var(--bg-input);border:1px solid var(--border-color);
            border-radius:11px;font-size:0.75rem;padding:1px 6px;box-shadow:0 1px 4px rgba(0,0,0,0.12);
            cursor:pointer;line-height:1.5;
        }
        #tbMessengerRoot .msg-group.sent .msg-reaction{left:10px;}
        #tbMessengerRoot .msg-group.received .msg-reaction{right:10px;}
        #tbMessengerRoot .message-bubble{position:relative;}

        /* ===== دستهٔ ۲: برچسبِ «ویرایش شد» ===== */
        #tbMessengerRoot .msg-edited-tag{font-size:0.68rem;color:var(--text-muted);margin-left:4px;}

        /* ===== دستهٔ ۲: نوارِ جستجوی داخلِ همان گفتگو ===== */
        #tbMessengerRoot .chat-search-bar{
            display:none;align-items:center;gap:8px;padding:9px 14px;background:var(--bg-tertiary);
            border-bottom:1px solid var(--border-color);flex-shrink:0;
        }
        #tbMessengerRoot .chat-search-bar.show{display:flex;}
        #tbMessengerRoot .chat-search-bar input{
            flex:1;border:none;background:var(--bg-input);border-radius:10px;padding:7px 12px;
            font-size:0.82rem;color:var(--text-primary);font-family:'Vazirmatn',sans-serif;outline:none;
        }
        #tbMessengerRoot .chat-search-count{font-size:0.72rem;color:var(--text-muted);white-space:nowrap;min-width:38px;text-align:center;}
        #tbMessengerRoot .chat-search-bar .header-btn{width:26px;height:26px;font-size:0.75rem;}
        #tbMessengerRoot .msg-search-hit{outline:2px solid var(--warning);outline-offset:1px;}
        #tbMessengerRoot .msg-search-hit.current{outline-color:var(--danger);}
        #tbMessengerRoot mark.tb-search-mark{background:var(--warning);color:#fff;border-radius:2px;padding:0 1px;}

        /* ===== دستهٔ ۲: فهرستِ گفتگوها برای فوروارد پیام ===== */
        #tbMessengerRoot .fwd-list{max-height:44vh;overflow-y:auto;overscroll-behavior:contain;padding:6px;}
        #tbMessengerRoot .fwd-item{
            display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:12px;cursor:pointer;
            transition:background 0.15s;
        }
        #tbMessengerRoot .fwd-item:hover{background:rgba(23,137,194,0.08);}
        #tbMessengerRoot .fwd-item-name{font-size:0.85rem;color:var(--text-primary);font-weight:700;}
        #tbMessengerRoot .fwd-item-sub{font-size:0.72rem;color:var(--text-muted);}
        #tbMessengerRoot .msg-fwd-tag{font-size:0.7rem;color:var(--text-muted);display:flex;align-items:center;gap:3px;margin-bottom:2px;}

        /* ===== مودال مدیریت ===== */
        #tbMessengerRoot .modal-overlay{
            display:none;position:fixed;inset:0;background:rgba(0,0,0,0.25);z-index:200;
            align-items:center;justify-content:center;backdrop-filter:blur(3px);
        }
        #tbMessengerRoot .modal-overlay.show{display:flex;}
        #tbMessengerRoot .modal-panel{
            background:var(--bg-secondary);border-radius:18px;width:90%;max-width:560px;
            max-height:80vh;overflow:hidden;box-shadow:0 8px 40px rgba(0,0,0,0.12);animation:tbMsgr_modalIn 0.3s ease;
        }
        @keyframes tbMsgr_modalIn{from{opacity:0;transform:scale(0.95) translateY(10px);}to{opacity:1;transform:scale(1) translateY(0);}}
        #tbMessengerRoot .modal-header{
            padding:16px 20px;background:var(--bg-tertiary);border-bottom:1px solid var(--border-color);
            display:flex;align-items:center;justify-content:space-between;
        }
        #tbMessengerRoot .modal-header h3{font-size:1rem;font-weight:800;color:var(--accent-dark);}
        #tbMessengerRoot .modal-close{background:none;border:none;color:var(--text-muted);cursor:pointer;font-size:1.1rem;padding:4px;transition:color 0.2s;}
        #tbMessengerRoot .modal-close:hover{color:var(--danger);}
        #tbMessengerRoot .modal-tabs{display:flex;border-bottom:1px solid var(--border-color);}
        #tbMessengerRoot .modal-tab{
            flex:1;padding:11px;text-align:center;font-size:0.82rem;font-weight:600;
            cursor:pointer;border:none;background:none;color:var(--text-secondary);
            transition:all 0.2s;font-family:'Vazirmatn',sans-serif;border-bottom:2px solid transparent;
        }
        #tbMessengerRoot .modal-tab.active{color:var(--accent-dark);border-bottom-color:var(--accent);background:rgba(23,137,194,0.05);}
        #tbMessengerRoot .modal-tab:hover:not(.active){background:rgba(23,137,194,0.03);}
        #tbMessengerRoot .modal-body{padding:0;max-height:50vh;overflow-y:auto;overscroll-behavior:contain;}

        #tbMessengerRoot .admin-user-item{
            display:flex;align-items:center;padding:12px 18px;border-bottom:1px solid var(--border-light);
            transition:background 0.15s;
        }
        #tbMessengerRoot .admin-user-item:hover{background:rgba(23,137,194,0.04);}
        #tbMessengerRoot .admin-user-item img{width:40px;height:40px;border-radius:50%;object-fit:cover;margin-left:12px;}
        #tbMessengerRoot .admin-user-info{flex:1;}
        #tbMessengerRoot .admin-user-info .au-name{font-weight:600;font-size:0.85rem;}
        #tbMessengerRoot .admin-user-info .au-role{font-size:0.72rem;color:var(--text-muted);}
        #tbMessengerRoot .admin-user-info .au-status{font-size:0.68rem;margin-top:1px;}
        #tbMessengerRoot .au-status.banned{color:var(--danger);}
        #tbMessengerRoot .au-status.active{color:var(--success);}
        #tbMessengerRoot .admin-actions{display:flex;gap:4px;}
        #tbMessengerRoot .admin-act-btn{
            padding:5px 10px;border-radius:8px;border:none;font-size:0.72rem;font-weight:600;
            cursor:pointer;transition:all 0.2s;font-family:'Vazirmatn',sans-serif;
        }
        #tbMessengerRoot .admin-act-btn.ban{background:rgba(23,137,194,0.1);color:#1789C2;}
        #tbMessengerRoot .admin-act-btn.ban:hover{background:rgba(245,158,11,0.2);}
        #tbMessengerRoot .admin-act-btn.unban{background:rgba(34,197,94,0.1);color:#1789C2;}
        #tbMessengerRoot .admin-act-btn.unban:hover{background:rgba(34,197,94,0.2);}
        #tbMessengerRoot .admin-act-btn.delete{background:rgba(229,57,53,0.1);color:var(--danger);}
        #tbMessengerRoot .admin-act-btn.delete:hover{background:rgba(229,57,53,0.2);}

        #tbMessengerRoot .log-item{padding:10px 18px;border-bottom:1px solid var(--border-light);font-size:0.78rem;}
        #tbMessengerRoot .log-item .log-time{font-size:0.68rem;color:var(--text-muted);margin-bottom:2px;}
        #tbMessengerRoot .log-item .log-text{color:var(--text-secondary);line-height:1.6;}
        #tbMessengerRoot .log-item .log-text .ic{margin-left:5px;}

        /* ===== خوش‌آمدگویی ===== */
        #tbMessengerRoot .welcome-screen{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:40px;z-index:1;}
        #tbMessengerRoot .welcome-icon{
            width:85px;height:85px;border-radius:50%;background:rgba(23,137,194,0.1);
            display:flex;align-items:center;justify-content:center;font-size:2rem;color:var(--accent-dark);
            margin-bottom:18px;animation:tbMsgr_wp 3s ease-in-out infinite;
        }
        @keyframes tbMsgr_wp{0%,100%{box-shadow:0 0 0 0 rgba(23,137,194,0.15);}50%{box-shadow:0 0 0 14px rgba(23,137,194,0);}}
        #tbMessengerRoot .welcome-screen h2{font-size:1.3rem;font-weight:800;margin-bottom:6px;}
        #tbMessengerRoot .welcome-screen p{color:var(--text-secondary);font-size:0.86rem;max-width:330px;line-height:1.8;}

        /* ===== فرم ورودی کاربر عمومی پیش از چت با پشتیبانی ===== */
        #tbMessengerRoot .pg-card{
            width:100%;max-width:300px;margin-top:20px;background:var(--bg-input);
            border:1px solid var(--border-light);border-radius:20px;padding:22px 20px;
            box-shadow:0 10px 30px rgba(18,48,63,0.08);text-align:right;
        }
        #tbMessengerRoot .pg-field{position:relative;margin-bottom:10px;}
        #tbMessengerRoot .pg-field:last-of-type{margin-bottom:0;}
        #tbMessengerRoot .pg-field .pg-ic{
            position:absolute;right:13px;top:50%;transform:translateY(-50%);
            font-size:0.85rem;color:var(--text-muted);pointer-events:none;transition:color 0.25s;
        }
        #tbMessengerRoot .pg-field:focus-within .pg-ic{color:var(--accent);}
        #tbMessengerRoot .pg-input{
            width:100%;padding:11px 38px 11px 14px;border:1px solid var(--border-color);border-radius:12px;
            background:var(--bg-tertiary);color:var(--text-primary);font-size:0.86rem;outline:none;
            font-family:'Vazirmatn',sans-serif;transition:all 0.25s;
        }
        #tbMessengerRoot .pg-input:focus{border-color:var(--accent);background:var(--bg-input);box-shadow:0 0 0 3px var(--accent-glow);}
        #tbMessengerRoot .pg-submit-btn{
            width:100%;padding:12px;border:none;border-radius:12px;
            background:linear-gradient(135deg,var(--accent-light),var(--accent) 55%,var(--accent-dark));color:#fff;
            font-size:0.88rem;font-weight:700;cursor:pointer;font-family:'Vazirmatn',sans-serif;
            display:flex;align-items:center;justify-content:center;gap:7px;
            transition:all 0.25s;margin-top:12px;box-shadow:0 4px 14px var(--accent-glow);
        }
        #tbMessengerRoot .pg-submit-btn:hover{transform:translateY(-1px);box-shadow:0 6px 18px var(--accent-glow);}
        #tbMessengerRoot .pg-submit-btn:active{transform:translateY(0);}
        #tbMessengerRoot .pg-note{font-size:0.7rem;color:var(--text-muted);text-align:center;margin-top:12px;line-height:1.7;}
        /* قدمِ ۲۶۶ — نشانگرِ زمانِ پاسخ‌دهی، بالایِ فرمِ ورودِ مهمان */
        #tbMessengerRoot .pg-response-time{display:flex;align-items:center;justify-content:center;gap:6px;font-size:0.75rem;color:var(--accent);background:color-mix(in srgb, var(--accent) 10%, transparent);border-radius:10px;padding:8px 12px;margin:4px 0 14px;}
        #tbMessengerRoot .welcome-features{display:grid;grid-template-columns:repeat(3,1fr);gap:11px;margin-top:26px;}
        #tbMessengerRoot .wf-item{background:rgba(255,255,255,0.6);border-radius:14px;padding:16px 12px;text-align:center;transition:all 0.3s;}
        #tbMessengerRoot .wf-item:hover{transform:translateY(-2px);box-shadow:0 4px 12px rgba(0,0,0,0.05);}
        #tbMessengerRoot .wf-item i{font-size:1.2rem;color:var(--accent-dark);margin-bottom:7px;}
        #tbMessengerRoot .wf-item span{display:block;font-size:0.73rem;color:var(--text-secondary);}

        /* ===== توست ===== */
        #tbMessengerRoot .toast{
            position:absolute;top:56px;left:50%;transform:translateX(-50%) translateY(-100px);
            background:var(--text-primary);color:#fff;padding:10px 20px;border-radius:20px;
            font-size:0.82rem;z-index:300;box-shadow:0 4px 18px rgba(0,0,0,0.15);
            display:flex;align-items:center;gap:9px;transition:transform 0.4s cubic-bezier(0.34,1.56,0.64,1);
            max-width:90%;
        }
        #tbMessengerRoot .toast.show{transform:translateX(-50%) translateY(0);}
        #tbMessengerRoot .toast .ic{font-size:1rem;}

        @keyframes tbMsgr_msgIn{from{opacity:0;transform:translateY(8px) scale(0.98);}to{opacity:1;transform:translateY(0) scale(1);}}
        #tbMessengerRoot .msg-animate{animation:tbMsgr_msgIn 0.25s cubic-bezier(0.34,1.56,0.64,1);}

        /* ===== هشدار امنیتی ===== */
        #tbMessengerRoot .security-alert{
            display:none;padding:8px 14px;background:rgba(229,57,53,0.08);
            border-bottom:1px solid rgba(229,57,53,0.15);font-size:0.78rem;
            color:var(--danger);align-items:center;gap:8px;z-index:5;
        }
        #tbMessengerRoot .security-alert.show{display:flex;}
        #tbMessengerRoot .security-alert i{font-size:0.9rem;}

        /* ===== ریسپانسیو ===== */
        @media(max-width:768px){
            #tbMessengerRoot .sidebar{width:100%;min-width:100%;position:absolute;inset:0;z-index:20;transition:transform 0.35s cubic-bezier(0.4,0,0.2,1);padding-top:var(--rolebar-h);}
            #tbMessengerRoot .sidebar.hidden-mobile{transform:translateX(100%);}
            #tbMessengerRoot .chat-panel{position:absolute;inset:0;z-index:15;padding-top:var(--rolebar-h);}
            #tbMessengerRoot .mobile-back{display:flex!important;}
            #tbMessengerRoot .welcome-features{grid-template-columns:1fr;max-width:200px;}
            #tbMessengerRoot .message-bubble{max-width:82%;}
            #tbMessengerRoot .role-bar{padding:6px 10px;}
            #tbMessengerRoot .role-btn{padding:4px 10px;font-size:0.68rem;}
        }
        #tbMessengerRoot .mobile-back{display:none;}

        /* ==================================================================
           ویجت شناور مسنجر — این بخش، لایه‌ی نصب مسنجر روی سایت اصلی است.
           در دسکتاپ: حباب گوشه‌ی صفحه + پنجره‌ی محدود (نه تمام‌صفحه).
           در موبایل: با تپ روی حباب، تمام‌صفحه باز می‌شود با دکمه‌ی بازگشت به سایت.
           ================================================================== */
        /* v35: طبقِ بازخوردِ صریحِ کاربر، پسِ‌زمینه‌ی قرمزِ توپرِ v34 خودِ لوگو را می‌پوشاند و
           زیبایی‌اش را از بین می‌برد — کاملاً حذف شد. حالا دکمه شیشه‌ای/بلور (glassmorphism)
           است: پسِ‌زمینه تقریباً شفاف با بلورِ پشتِ آن (backdrop-filter)، یک های‌لایتِ نوریِ
           مورب برایِ حسِ سه‌بعدی/شیشه‌ای، و لوگویِ خودِ کاربر (که خودش از قبل قرمزِ فلزی/
           سه‌بعدی/براق طراحی شده) تقریباً کاملِ فضایِ دکمه را می‌گیرد تا با بزرگ‌ترین وضوحِ
           ممکن دیده شود — خودِ لوگو زیبایی‌اش را نشان می‌دهد، نه یک پسِ‌زمینه‌ی رنگی. */
        #tbMessengerRoot .tb-msgr-launcher{
            position:fixed;right:16px;bottom:16px;width:70px;height:70px;border-radius:50%;
            background:linear-gradient(145deg,rgba(255,255,255,.16),rgba(255,255,255,.04));
            backdrop-filter:blur(10px) saturate(160%);-webkit-backdrop-filter:blur(10px) saturate(160%);
            border:1px solid rgba(255,255,255,.35);overflow:hidden;
            color:#fff;cursor:pointer;z-index:9998;
            box-shadow:0 10px 28px rgba(0,0,0,.35),inset 0 1px 1px rgba(255,255,255,.55),inset 0 -8px 14px rgba(0,0,0,.12);
            font-size:1.5rem;padding:0;
            display:flex;align-items:center;justify-content:center;
            transition:transform 0.25s ease,box-shadow 0.25s ease;
        }
        /* های‌لایتِ نوریِ بالایِ شیشه — حسِ حبابِ شیشه‌ای/سه‌بعدی؛ overflow:hidden رویِ خودِ
           دکمه این را به‌صورتِ دایره‌ای می‌برد، نیازی به border-radius جدا ندارد. */
        #tbMessengerRoot .tb-msgr-launcher::before{
            content:'';position:absolute;top:6%;left:14%;width:60%;height:38%;border-radius:50%;
            background:linear-gradient(180deg,rgba(255,255,255,.55),rgba(255,255,255,0));
            filter:blur(1px);pointer-events:none;
        }
        #tbMessengerRoot .tb-msgr-launcher:hover{transform:scale(1.08);box-shadow:0 14px 32px rgba(0,0,0,.42),inset 0 1px 1px rgba(255,255,255,.6),inset 0 -8px 14px rgba(0,0,0,.14);}
        #tbMessengerRoot .tb-msgr-launcher.hidden{display:none;}
        #tbMessengerRoot .tb-msgr-launcher .ic{display:flex;align-items:center;justify-content:center;width:92%;height:92%;}
        #tbMessengerRoot .tb-msgr-launcher .ic img{width:100%;height:auto;}
        #tbMessengerRoot .tb-msgr-launcher .tb-msgr-badge{
            position:absolute;top:-2px;right:-2px;background:var(--danger);color:#fff;
            font-size:0.65rem;font-weight:700;min-width:18px;height:18px;border-radius:9px;
            display:flex;align-items:center;justify-content:center;padding:0 4px;
            box-shadow:0 2px 6px rgba(0,0,0,.35);border:2px solid #fff;
        }

        #tbMessengerRoot .tb-msgr-panel{
            display:none;position:fixed;right:0;bottom:0;width:380px;height:600px;max-height:82vh;
            border-radius:18px;overflow:hidden;box-shadow:0 12px 48px rgba(0,0,0,0.22);z-index:9999;
            flex-direction:column;background:var(--bg-primary);
            /* ریشه‌یِ باگِ «متنِ تُست بالایِ پنل دیده می‌شود»: .toast (فرزندِ مستقیمِ همین پنل)
               حالتِ پیش‌فرضش transform:translateY(-100px) است (یعنی از دیدِ کاربر مخفی، بالایِ
               پنل). طبقِ استانداردِ CSS، overflow:hidden + border-radius روی همین پنل باید آن را
               کاملاً ببرد — ولی چون .toast خودش transform+transition دارد، مرورگر (Chrome/Edge)
               آن را یک لایه‌ی جداگانه‌ی GPU می‌سازد که گاهی ماسکِ گردِ overflow:hidden رویِ همان
               لایه درست اعمال نمی‌شود (یک باگِ شناخته‌شده‌ی رندرینگِ کرومیوم، هم‌خانواده با
               بادِ ۱۹۷/۲۱۴/۲۱۵ همین پروژه: «جدِ transform‌دار، containing block/کلیپِ فرزند را
               بی‌سروصدا عوض می‌کند»). رفع: با دادنِ transform به خودِ پنل (لایه‌ی کلیپ‌کننده)،
               مرورگر مجبور می‌شود ماسکِ گردِ آن را رویِ همان لایه‌ی کامپوزیت‌شده هم درست اعمال کند. */
            transform:translateZ(0);
            -webkit-transform:translateZ(0);
        }
        #tbMessengerRoot .tb-msgr-panel.open{display:flex;}

        #tbMessengerRoot .tb-msgr-topbar{
            display:flex;align-items:center;justify-content:space-between;
            background:var(--accent-dark);color:#fff;padding:10px 14px;flex-shrink:0;z-index:40;
        }
        #tbMessengerRoot .tb-msgr-topbar .tb-msgr-title{font-size:0.9rem;font-weight:700;display:flex;align-items:center;gap:6px;}
        #tbMessengerRoot .tb-msgr-topbar button{background:rgba(255,255,255,0.15);border:none;color:#fff;width:28px;height:28px;
            border-radius:50%;cursor:pointer;font-size:0.85rem;display:flex;align-items:center;justify-content:center;}
        #tbMessengerRoot .tb-msgr-topbar button:hover{background:rgba(255,255,255,0.28);}

        /* نوار نقش، فقط ابزار تست این دموست (در جاسازی نهایی حذف/جایگزین سشن واقعی می‌شود).
           باید روکشِ مطلق روی chat-container بماند (طراحی اصلی)، فقط چون حالا chat-container
           زیرِ نوار عنوانِ پنل (topbar) قرار گرفته، نیازی به تغییر top نیست: چون از بالای
           همان ناحیه‌ی خودش (chat-container) شروع می‌شود، نه بالای کل پنل. */
        #tbMessengerRoot .tb-msgr-panel .chat-container{flex:1;min-height:0;height:auto;}

        /* نکته‌ی مهم: media query «max-width:768px» بر اساس عرضِ واقعیِ مرورگر است، نه عرضِ این
           پنجره‌ی ۳۸۰ پیکسلی؛ روی دسکتاپ با مرورگر پهن، آن قانون فعال نمی‌شود، و بدون این بخش،
           سایدبار (min-width:370px) تقریباً کل عرضِ پنل را می‌گیرد و ناحیه‌ی چت عملاً پنهان می‌شود.
           پس رفتارِ «تک‌ستونی/مثل موبایل» را همیشه و مستقل از عرضِ مرورگر، فقط بر اساس اینکه المان
           داخل پنل شناور است، اعمال می‌کنیم. */
        #tbMessengerRoot .tb-msgr-panel .sidebar{
            width:100%;min-width:100%;position:absolute;inset:0;z-index:20;
            transition:transform 0.35s cubic-bezier(0.4,0,0.2,1);
        }
        #tbMessengerRoot .tb-msgr-panel .sidebar.hidden-mobile{transform:translateX(100%);}
        #tbMessengerRoot .tb-msgr-panel .chat-panel{position:absolute;inset:0;z-index:15;}
        #tbMessengerRoot .tb-msgr-panel .mobile-back{display:flex;}
        #tbMessengerRoot .tb-msgr-panel .message-bubble{max-width:82%;}

        @media(max-width:768px){
            #tbMessengerRoot .tb-msgr-panel{
                left:0;right:0;top:0;bottom:0;width:100%;height:100%;max-height:none;border-radius:0;
            }
            /* v221: طبقِ درخواستِ کاربر، حبابِ شناورِ مسنجر در نسخه‌ی موبایل به گوشه‌ی چپِ پایین
               منتقل شد (به‌جایِ راست) — با گوشیِ راست‌چین بودنِ اکثرِ عناصرِ رابطِ کاربری (RTL) تداخل
               ندارد چون این فقط یک دکمه‌ی گردِ شناور است، نه المانی که جهتِ متن داشته باشد؛ ارتفاعِ
               «پایین» از قبل توسطِ قانونِ سراسریِ bottom:calc(var(--tb-fbar-h)...) (بالاترِ همین فایل)
               همیشه بالایِ نوارِ فوتر نگه داشته می‌شود، اینجا فقط سمت (چپ/راست) عوض می‌شود. */
            #tbMessengerRoot .tb-msgr-launcher{left:16px;right:auto;}
        }
        /* وقتی مسنجر از داخل پنل دانشجو/استاد/ادمین (با دکمه‌ی «باز کردن پیام‌رسان») باز می‌شود،
           نقش کاربر از همان پنل مشخص است؛ پس نیازی به نوار انتخاب نقش نیست و حذف می‌شود — طبق
           درخواست کاربر «فقط همین مسنجر کافی است». این کلاس فقط توسط tbOpenFloatingMessenger
           اضافه می‌شود، نه در حالت تست عمومی/مستقل مسنجر (دسکتاپ و موبایل، مستقل از عرض مرورگر). */
        #tbMessengerRoot .tb-msgr-panel.tb-msgr-embedded .role-bar{display:none!important;}

        /* نوار نقش داخل پنجره‌ی شناور (عرض ثابت ۳۸۰px) خیلی تنگ‌تر از حالت تمام‌صفحه است؛
           این قانون فقط وقتی فعال است که نوار نقش داخل پنل شناور باشد (مستقل از عرض مرورگر)،
           برخلاف media query عمومی که بر اساس عرض مرورگر است نه عرض پنل. اجازه‌ی شکستن به
           چند خط داده می‌شود (به‌جای فشرده/همپوشان‌شدن) و متن‌های غیرضروری (برچسب «ورود به
           عنوان:» و متن نشان امنیت) مخفی می‌شوند تا فقط آیکن باقی بماند و شکیل‌تر به‌نظر برسد. */
        #tbMessengerRoot .tb-msgr-panel .role-bar{flex-wrap:wrap;row-gap:6px;padding:7px 10px;}
        #tbMessengerRoot .tb-msgr-panel .role-bar-right{flex-wrap:wrap;row-gap:6px;gap:6px;}
        #tbMessengerRoot .tb-msgr-panel .role-bar-right label{display:none;}
        #tbMessengerRoot .tb-msgr-panel .role-btn{padding:4px 9px;font-size:0.68rem;}
        #tbMessengerRoot .tb-msgr-panel .security-badge{padding:4px 8px;}
        #tbMessengerRoot .tb-msgr-panel .security-badge .sb-text{display:none;}
        #tbMessengerRoot .tb-msgr-panel .role-expand-btn{padding:4px 9px;font-size:0.65rem;}

/* ===== Block 6 ===== */
.tb-home-market-card{transition:transform .15s ease,box-shadow .15s ease,border-color .15s ease;}
.tb-home-market-card:hover{transform:translateY(-2px);box-shadow:0 6px 18px rgba(23,137,194,.16);border-color:#1789C2;}
.tb-home-market-card:active{transform:translateY(0);}

/* ===== Block 7 ===== */
.tb-home-card{border:0.5px solid var(--border);border-radius:12px;padding:12px;text-align:center;cursor:pointer;transition:transform .15s ease,box-shadow .15s ease,border-color .15s ease;}
.tb-home-card:hover{transform:translateY(-2px);box-shadow:0 4px 14px rgba(23,137,194,.14);border-color:#1789C2;}
.tb-home-card:active{transform:translateY(0);}

/* ===== Block 8 ===== */
.tb-stu-wrap{padding:10px 16px 24px;max-width:960px;margin:0 auto;box-sizing:border-box;}
.tb-stu-breadcrumb{font-size:12px;color:#7a8494;margin:6px 0 4px;}
.tb-stu-breadcrumb b{cursor:pointer;color:#0F8FD9;}
.tb-stu-card{background:#fff;border:1px solid #e7ebf0;border-radius:16px;padding:16px;box-shadow:0 2px 10px rgba(15,30,60,.04);}
.tb-adm-dashtile{flex:1;min-width:200px;background:#F3F6FA;border:1.5px solid #e7ebf0;border-radius:12px;padding:12px;cursor:pointer;transition:.15s ease;}
.tb-adm-dashtile:hover{border-color:#1789C2;transform:translateY(-2px);box-shadow:0 6px 16px rgba(15,61,115,.08);}
@media (max-width:480px){ .tb-adm-dashtile{flex:1 1 100%!important;min-width:0!important;} }
.tb-stu-layout{display:block;}
@media (max-width:480px){ #tbStuDashStats>div{flex:1 1 100%!important;min-width:0!important;} }
.tb-stu-side{background:#fff;border:1px solid #e7ebf0;border-radius:14px;padding:16px 16px;margin-bottom:14px;display:flex;align-items:center;flex-wrap:wrap;gap:8px;position:sticky;top:0;z-index:60;box-shadow:0 2px 8px rgba(15,30,60,.05);}
@media (max-width:900px){
  .tb-stu-side{padding:10px 12px;margin-bottom:8px;gap:6px;}
  .tb-stu-card{padding:12px;}
  #tbStuAdminView .tb-adm-stulist-filters{margin-bottom:8px;padding:8px 10px;}
}
.tb-stu-nav-group{position:relative;}
.tb-stu-nav-group-label{display:flex;align-items:center;gap:6px;padding:8px 13px;border-radius:9px;font-size:12px;font-weight:700;color:#3d5a73;cursor:pointer;border:1.5px solid #e3f2fb;background:#fff;transition:.15s ease;white-space:nowrap;}
.tb-stu-nav-group-label:hover{background:#EAF7FE;border-color:#bfe6fb;}
.tb-stu-nav-group.open .tb-stu-nav-group-label,.tb-stu-nav-group.has-active .tb-stu-nav-group-label{background:linear-gradient(135deg,#29B6F6,#0F8FD9);color:#fff;border-color:#29B6F6;box-shadow:0 3px 10px rgba(41,182,246,.3);}
.tb-stu-nav-caret{display:inline-block;width:0;height:0;border-left:4px solid transparent;border-right:4px solid transparent;border-top:5px solid currentColor;opacity:.85;transition:transform .15s ease;}
.tb-stu-nav-group:hover .tb-stu-nav-caret,.tb-stu-nav-group.open .tb-stu-nav-caret{transform:rotate(180deg);}
.tb-stu-nav-drop{display:none;position:absolute;top:100%;right:0;margin-top:6px;background:#fff;color:#222;border-radius:10px;box-shadow:0 10px 24px rgba(0,0,0,.18);padding:6px 0;min-width:215px;z-index:400;text-align:right;border:1px solid #eee;}
.tb-stu-nav-group:hover .tb-stu-nav-drop,.tb-stu-nav-group.open .tb-stu-nav-drop{display:block;}
.tb-stu-nav-drop .tb-stu-nav-item{margin-bottom:0;border:none;border-radius:0;padding:9px 16px;background:transparent;box-shadow:none!important;}
.tb-stu-nav-drop .tb-stu-nav-item:hover{background:#EAF7FE;transform:none;}
.tb-stu-nav-drop .tb-stu-nav-item.active{background:#0F8FD9;color:#fff;border-radius:6px;margin:0 6px;box-shadow:none!important;}
.tb-adm-table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:auto;scrollbar-color:#1789C2 #e7ebf0;}
.tb-adm-table-scroll::-webkit-scrollbar{height:15px;}
.tb-adm-table-scroll::-webkit-scrollbar-track{background:#e7ebf0;border-radius:8px;}
.tb-adm-table-scroll::-webkit-scrollbar-thumb{background:#1789C2;border-radius:8px;border:3px solid #e7ebf0;}
.tb-adm-table-scroll::-webkit-scrollbar-thumb:hover{background:#0b6fa8;}
@media (max-width:900px){ .tb-adm-dpgrid{grid-template-columns:1fr;} }
.tb-adm-course-chips{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px;}
.tb-adm-course-chip{display:flex;align-items:center;gap:7px;background:#F3F6FA;border:1.5px solid #e7ebf0;border-radius:999px;padding:8px 14px;font-size:12px;font-weight:700;color:#1B2430;cursor:pointer;transition:.15s ease;}
.tb-adm-course-chip:hover{border-color:#1789C2;}
.tb-adm-course-chip.active{background:#0F8FD9;border-color:#0F8FD9;color:#fff;}
.tb-adm-course-chip .tb-adm-chip-dot{width:8px;height:8px;border-radius:50%;background:#c7cfd8;flex-shrink:0;}
.tb-adm-course-chip .tb-adm-chip-dot.on{background:#1CA35A;}
.tb-adm-course-chip.active .tb-adm-chip-dot{background:#fff;}
/* قدمِ ۲۵۵ — علامتِ کلاسِ واقعاً زنده (استاد چک‌این کرده) در تبِ ادمین */
.tb-adm-course-chip-live{border-color:#e0554a;box-shadow:0 0 0 1px rgba(224,85,74,.15) inset;}
.tb-adm-course-chip-live.active{background:#e0554a;border-color:#e0554a;}
.tb-adm-course-detail{margin-bottom:18px;}
.tb-adm-course-detail-empty{font-size:12px;color:#7a8494;background:#F7FAFD;border:1.5px dashed #c9d3dd;border-radius:12px;padding:18px;text-align:center;}
.tb-stu-profile{display:flex;flex-direction:row;align-items:center;gap:9px;text-align:right;padding:0 12px 0 0;border-bottom:none;border-inline-end:1px solid #e7ebf0;margin-bottom:0;flex-shrink:0;}
.tb-stu-avatar{width:38px;height:38px;border-radius:50%;background:#0F8FD9;color:#fff;display:flex;align-items:center;justify-content:center;font-weight:800;font-size:13px;margin-bottom:0;flex-shrink:0;}
.tb-stu-name{font-weight:800;font-size:12.5px;color:#0F1B2D;line-height:1.3;}
.tb-stu-sid{font-size:10px;color:#7a8494;}
.tb-stu-nav-item{display:flex;align-items:center;gap:6px;padding:8px 13px;border-radius:9px;font-size:12px;font-weight:700;color:#3d5a73;cursor:pointer;margin-bottom:0;border:1.5px solid #e3f2fb;background:#fff;transition:.15s ease;white-space:nowrap;}
.tb-stu-nav-item:hover{background:#EAF7FE;border-color:#bfe6fb;transform:translateY(-1px);}
.tb-stu-nav-item.active{background:linear-gradient(135deg,#29B6F6,#0F8FD9);color:#fff;border-color:#29B6F6;box-shadow:0 3px 10px rgba(41,182,246,.35);}
.tb-stu-section-title{font-size:15px;font-weight:800;margin:0 0 12px;color:#0F1B2D;}
.tb-stu-tag{display:inline-block;font-size:11px;font-weight:800;border-radius:20px;padding:4px 12px;}
.tb-stu-tag-active{background:#E8F6EE;color:#146B45;}
.tb-stu-tag-pending{background:#FFF3DE;color:#B8862B;}
.tb-stu-tag-done{background:#EAF1FB;color:#0F8FD9;}
.tb-stu-tag-cancelled{background:#FCEBEA;color:#C0392B;}
.tb-stu-tag-withdrawn{background:#F0EAFB;color:#5B3FA0;}
.tb-stu-tag-neutral{background:#EEF1F4;color:#20242B;}
.tb-stu-tag-neutral .tb-stu-tag-check{color:#111111;font-weight:900;margin-left:4px;}
.tb-stu-course-row{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px;padding:14px;border:1px solid #e7ebf0;border-radius:12px;margin-bottom:10px;}
.tb-stu-accordion-item{border:1.5px solid #d9ecfb;border-radius:14px;margin-bottom:12px;overflow:hidden;background:#fff;box-shadow:0 2px 8px rgba(41,182,246,.06);}
.tb-stu-accordion-head{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:14px 16px;cursor:pointer;background:linear-gradient(180deg,#EAF7FE,#F5FBFF);transition:background .15s ease;}
.tb-stu-accordion-head:hover{background:linear-gradient(180deg,#DEF2FD,#EEF9FF);}
.tb-stu-accordion-chev{color:#29B6F6;font-size:12px;font-weight:800;}
.tb-stu-accordion-body{padding:14px 16px;border-top:1px solid #eaf3fa;}
.tb-stu-accordion-body.tb-stu-hidden{display:none;}
.tb-stu-course-infocard{background:#F7FAFD;border:1px solid #e7ebf0;border-radius:12px;padding:12px;margin-top:8px;}
.tb-stu-status-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px;}
.tb-stu-status-row .tb-stu-tag{font-size:13px;font-weight:800;padding:5px 14px;}
.tb-stu-tag-cancel-inline{display:inline-block;font-size:13px;font-weight:800;border-radius:20px;padding:5px 14px;background:#FCEBEA;color:#B0392B;cursor:pointer;border:none;font-family:inherit;}
.tb-stu-tag-cancel-inline:hover{background:#f8dcda;}
.tb-stu-live-badge{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:800;background:#EAF7FE;color:#0F3D73;border-radius:20px;padding:3px 10px;}
.tb-stu-course-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap;justify-content:flex-end;margin-top:8px;}
.tb-stu-btn-cancel-simple{background:none;border:none;color:#B0392B;font-family:inherit;font-size:10.5px;font-weight:500;cursor:pointer;padding:3px 4px;text-decoration:underline;text-underline-offset:2px;opacity:.85;}
.tb-stu-btn-cancel-simple:hover{opacity:1;color:#8a1f1f;}
.tb-stu-fin-summary{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:16px;}
.tb-stu-fin-sumbox{flex:1;min-width:130px;background:#F3F6FA;border:1px solid #e7ebf0;border-radius:10px;padding:12px 14px;text-align:center;}
.tb-stu-fin-ledger-box{margin-top:14px;padding-top:14px;border-top:1.5px dashed #e7ebf0;}
.tb-adm-infogrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:10px;}
.tb-adm-infoitem{background:#F7FAFD;border:1px solid #e7ebf0;border-radius:10px;padding:8px 12px;}
.tb-adm-infoitem .l{font-size:11px;color:#7a8494;margin-bottom:3px;}
.tb-adm-infoitem .v{font-size:12.5px;font-weight:700;color:#0F1B2D;word-break:break-word;}
.tb-tch-exam-meta{background:#F7FAFD;border:1px solid #e7ebf0;border-radius:12px;padding:14px;margin-bottom:4px;}
.tb-tch-exam-qcard{border:1.5px solid #dfe4ea;border-radius:12px;padding:14px;margin-top:12px;background:#fff;}
.tb-tch-exam-qhead{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;padding-bottom:8px;border-bottom:1px dashed #e7ebf0;}
.tb-tch-exam-qhead .qnum{font-size:12px;font-weight:800;color:#0F3D73;background:#EAF7FE;border-radius:20px;padding:3px 12px;}
.tb-tch-exam-opt{display:flex;align-items:center;gap:8px;margin-bottom:6px;}
.tb-tch-exam-opt .oletter{font-size:11px;font-weight:800;color:#7a8494;width:16px;flex-shrink:0;text-align:center;}
.tb-tch-exam-footer{display:flex;gap:8px;margin-top:16px;padding-top:14px;border-top:1.5px dashed #e7ebf0;flex-wrap:wrap;}
.tb-stu-fin-sumbox .n{font-size:17px;font-weight:800;color:#0F8FD9;}
.tb-stu-fin-sumbox .l{font-size:11px;color:#7a8494;margin-top:2px;}
.tb-stu-fin-course-card{border:1px solid #e7ebf0;border-radius:12px;padding:14px;margin-bottom:10px;}
.tb-stu-doc-row{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px;padding:14px;border:1px solid #e7ebf0;border-radius:12px;margin-bottom:10px;}
.tb-stu-doc-row .cmeta{margin-top:3px;}
.tb-stu-doc-note{background:#F5F7FA;border:1px dashed #cfd8e3;border-radius:10px;padding:11px 14px;font-size:11.5px;color:#7a8494;margin-bottom:16px;}
.tb-stu-course-row .cname{font-weight:800;font-size:13.5px;color:#0F1B2D;}
.tb-stu-course-row .cmeta{font-size:11.5px;color:#7a8494;margin-top:4px;}
.tb-stu-btn-xs{padding:4px 10px;font-size:10px;border-radius:7px;}
.tb-pg-btn{border:1px solid #d7dde5;border-radius:6px;background:#fff;color:#4a5568;font-size:10.5px;font-weight:600;padding:3px 9px;cursor:pointer;font-family:inherit;}
.tb-pg-btn:hover{background:#f3f6fa;border-color:#c3ccd6;}
.tb-pg-btn:disabled{opacity:.4;cursor:default;}
.tb-stu-btn{border:none;border-radius:9px;padding:9px 16px;font-family:inherit;font-weight:800;font-size:12.5px;cursor:pointer;}
.tb-stu-btn-green{background:#1C8A5A;color:#fff;}
.tb-stu-btn-navy{background:#0F8FD9;color:#fff;}
.tb-stu-btn-sky{background:linear-gradient(135deg,#29B6F6,#0F8FD9);color:#fff;box-shadow:0 2px 8px rgba(41,182,246,.3);}
.tb-stu-btn-sky:hover{background:linear-gradient(135deg,#20A5E3,#0d7fc2);}
.tb-stu-btn-outline{background:#fff;border:1.5px solid #0F8FD9;color:#0F8FD9;}
.tb-stu-btn-red-outline{background:#fff;border:1.5px solid #C0392B;color:#C0392B;}
.tb-stu-btn-sm{padding:6px 12px;font-size:11.5px;}
.tb-stu-fgrid{display:grid;grid-template-columns:1fr 1fr;gap:14px;}
@media (max-width:560px){ .tb-stu-fgrid{grid-template-columns:1fr;} }
.tb-tch-live-fgrid{display:grid;grid-template-columns:1.4fr 1.4fr .8fr .8fr 1fr;gap:10px;}
@media (max-width:900px){ .tb-tch-live-fgrid{grid-template-columns:1fr 1fr;} }
@media (max-width:560px){ .tb-tch-live-fgrid{grid-template-columns:1fr;} }
.tb-stu-ffield{display:flex;flex-direction:column;gap:6px;}
.tb-stu-ffield label{font-size:12px;font-weight:700;color:#7a8494;}
.tb-stu-ffield input{border:1.5px solid #e7ebf0;border-radius:9px;padding:9px 12px;font-family:inherit;font-size:13px;}
.tb-stu-ffield input:disabled{background:#F3F6FA;color:#7c8697;}
.tb-stu-finrow{display:flex;justify-content:space-between;padding:12px 0;border-bottom:1px dashed #e7ebf0;font-size:13px;}
.tb-stu-finrow:last-child{border-bottom:none;}
.tb-stu-fintotal{display:flex;justify-content:space-between;font-weight:800;font-size:14px;margin-top:8px;padding-top:12px;border-top:2px solid #e7ebf0;}
.tb-stu-quiz-item{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px;padding:14px;border:1px solid #e7ebf0;border-radius:12px;margin-bottom:10px;}
.tb-stu-quiz-card.clickable{cursor:pointer;transition:border-color .2s ease,box-shadow .2s ease;}
.tb-stu-quiz-card.clickable:hover{border-color:#0F8FD9;box-shadow:0 3px 10px rgba(15,143,217,.15);}
.tb-stu-quiz-subinfo{font-size:10.5px;color:#94a1b0;margin-top:3px;}
.tb-stu-quiz-modal{background:#F3F6FA;border-radius:12px;padding:20px;margin-top:14px;}
.tb-stu-quiz-progress-wrap{margin-bottom:4px;}
.tb-stu-quiz-progress-bar{width:100%;height:8px;background:#e3ecf3;border-radius:6px;overflow:hidden;}
.tb-stu-quiz-progress-fill{height:100%;background:linear-gradient(90deg,#29B6F6,#0F8FD9);border-radius:6px;transition:width .3s ease;}
.tb-stu-quiz-meta-row{display:flex;justify-content:space-between;align-items:center;margin-top:8px;font-size:11.5px;color:#5c7284;font-weight:700;}
.tb-stu-quiz-meta-row span[id^="tbStuQuizTimer_"]{font-family:'Courier New',monospace;}
.tb-stu-quiz-timer-warn{color:#C0392B!important;animation:tbStuQuizTimerPulse 1s ease infinite;}
@keyframes tbStuQuizTimerPulse{0%,100%{opacity:1;}50%{opacity:.55;}}
.tb-stu-quiz-opt{display:block;width:100%;text-align:right;border:1.5px solid #e7ebf0;border-radius:9px;padding:10px 14px;margin-bottom:8px;background:#fff;font-family:inherit;font-size:13px;cursor:pointer;}
.tb-stu-quiz-opt:hover{border-color:#0F8FD9;}
.tb-stu-quiz-opt.correct{border-color:#1C8A5A;background:#F1FAF4;color:#146B45;font-weight:700;}
.tb-stu-quiz-opt.wrong{border-color:#C0392B;background:#FCEBEA;color:#C0392B;font-weight:700;}
.tb-stu-quiz-opt:disabled{cursor:default;opacity:.85;}
.tb-stu-grade-table{width:100%;border-collapse:collapse;font-size:13px;}
.tb-stu-grade-table th{background:#0F8FD9;color:#fff;padding:10px 12px;font-size:12px;text-align:right;}
.tb-stu-grade-table td{padding:10px 12px;border-bottom:1px solid #e7ebf0;}
.tb-stu-grade-num{font-weight:800;color:#0F8FD9;}
.tb-stu-hidden{display:none !important;}
.tb-adm-table{width:100%;border-collapse:collapse;font-size:13px;border:1px solid #d7dee6;}
.tb-adm-table th{background:#0F8FD9;color:#fff;padding:10px 12px;font-size:12px;text-align:right;border:1px solid #0b7ec2;}
.tb-adm-table th.tb-adm-sortable{cursor:pointer;user-select:none;white-space:nowrap;}
.tb-adm-table th.tb-adm-sortable:hover{background:#0b6fa8;}
.tb-adm-sort-tri{display:inline-block;margin-right:5px;font-size:9px;opacity:.6;}
.tb-adm-sort-tri.active{opacity:1;}
.tb-adm-table td{padding:10px 12px;border:1px solid #e7ebf0;vertical-align:middle;}
.tb-adm-table tr:hover{background:#FAFBFD;cursor:pointer;}
.tb-adm-table tr.tb-adm-row-selected{background:#EAF7FE !important;box-shadow:inset 3px 0 0 #159BE0;}
.tb-adm-detail{margin-top:18px;border-top:2px dashed #e7ebf0;padding-top:18px;}

/* --- پنل جزئیات دانشجو در پنل ادمین: قبلاً یک کشوی (Drawer) روی کل صفحه بود؛
   حالا طبق درخواست کاربر (چیدمان اکسل) به‌صورت یک ستون ثابتِ کنار لیست، در همان صفحه --- */
.tb-adm-detail-pane{flex:1 1 0;min-width:0;background:#fff;border:1.5px solid #e7ebf0;border-radius:12px;overflow:hidden;align-self:flex-start;}
.tb-adm-detail-empty{padding:70px 20px;text-align:center;color:#9aa5b1;font-size:12.5px;line-height:2;}
.tb-adm-drawer-head{flex:0 0 auto;padding:14px 18px;border-bottom:1px solid #e7ebf0;display:flex;align-items:center;justify-content:space-between;gap:10px;background:#F7FAFD;}
.tb-adm-drawer-close{width:32px;height:32px;border-radius:50%;border:1px solid #dfe4ea;background:#fff;font-size:16px;color:#556;cursor:pointer;display:flex;align-items:center;justify-content:center;flex:0 0 auto;}
.tb-adm-drawer-close:hover{background:#f3f5f7;}
.tb-adm-drawer-body{padding:16px 18px 24px;max-height:78vh;overflow-y:auto;}
.tb-chat-badge{display:inline-block;width:8px;height:8px;border-radius:50%;background:#e5484d;margin-right:2px;vertical-align:middle;}
.tb-msg-row{margin-bottom:12px;}
.tb-msg-bubble{display:inline-block;border-radius:14px;padding:8px 13px;font-size:12.5px;max-width:82%;line-height:1.65;}
.tb-msg-mine .tb-msg-bubble{background:linear-gradient(135deg,#159BE0,#0F3D73);color:#fff;border-bottom-left-radius:4px;}
.tb-msg-theirs .tb-msg-bubble{background:#fff;color:#0f2942;border:1px solid #d7edfa;border-bottom-right-radius:4px;}
.tb-msg-meta{font-size:10px;color:#9aa5b1;margin-bottom:3px;display:flex;gap:5px;align-items:center;}
.tb-msg-status{font-size:10px;color:#9aa5b1;}
.tb-msg-status.read{color:#29B6F6;font-weight:700;}
.tb-msg-img{max-width:180px;border-radius:8px;margin-top:6px;display:block;cursor:pointer;}
.tb-msg-file-chip{display:inline-flex;align-items:center;gap:5px;margin-top:6px;font-size:11px;border-radius:8px;padding:5px 8px;text-decoration:none;}
.tb-msg-mine .tb-msg-file-chip{background:rgba(255,255,255,.18);color:#fff;}
.tb-msg-theirs .tb-msg-file-chip{background:#EAF7FE;color:#0F3D73;}
.tb-msg-composer{position:relative;display:flex;gap:8px;align-items:flex-end;}
.tb-msg-textarea{flex:1;border:1.5px solid #cfe8f9;border-radius:12px;padding:9px 12px;font-family:inherit;font-size:12.5px;resize:none;max-height:110px;overflow-y:auto;line-height:1.5;}
.tb-emoji-panel{display:none;position:absolute;bottom:44px;right:0;background:#fff;border:1px solid #d9ecfb;border-radius:10px;padding:8px;box-shadow:0 6px 18px rgba(15,30,60,.14);grid-template-columns:repeat(7,1fr);gap:4px;z-index:20;width:230px;}
.tb-emoji-panel.show{display:grid;}
.tb-emoji-panel span{cursor:pointer;font-size:17px;text-align:center;border-radius:6px;padding:3px;}
.tb-emoji-panel span:hover{background:#EAF7FE;}
.tb-msg-attach-preview{display:flex;align-items:center;gap:7px;font-size:10.5px;color:#0F8FD9;margin-top:6px;}
.tb-msg-attach-preview img{width:34px;height:34px;object-fit:cover;border-radius:6px;}
.tb-msg-attach-preview .rm{cursor:pointer;color:#C0392B;font-weight:800;padding:0 4px;}

/* --- چیدمان فیلتر + لیست فشرده‌ی جست‌وجوی دانشجو --- */
.tb-adm-stulist-cols{display:flex;gap:16px;align-items:flex-start;}
.tb-adm-stulist-filters{display:flex;flex-direction:row;flex-wrap:wrap;gap:12px;margin-bottom:14px;padding:12px 14px;background:#F7FAFD;border:1px solid #e7ebf0;border-radius:12px;}
.tb-adm-stulist-main{flex:0 0 240px;max-width:240px;min-width:0;}
.tb-adm-stulist-filters>div{flex:1 1 200px;}
.tb-adm-stulist-filters label{display:block;font-size:11.5px;color:#7a8494;margin-bottom:4px;}
.tb-adm-stulist-filters select{width:100%;border:1.5px solid #dfe4ea;border-radius:9px;padding:8px 10px;font-family:inherit;font-size:12.5px;box-sizing:border-box;}
@media (max-width:980px){ .tb-adm-stulist-cols{flex-direction:column;} .tb-adm-stulist-main{flex:1 1 auto;max-width:none;width:100%;} }
@media (max-width:760px){ .tb-adm-stulist-filters{flex-direction:column;} }

.tb-adm-dpgrid{display:grid;grid-template-columns:1fr 1fr;gap:20px;}
@media (max-width:760px){ .tb-adm-dpgrid{grid-template-columns:1fr;} }
.tb-adm-dpbox{border:1px solid #e7ebf0;border-radius:12px;padding:14px;}
.tb-adm-dpbox h4{margin:0 0 10px;font-size:13px;color:#0F8FD9;}
.tb-adm-dprow{display:flex;justify-content:space-between;font-size:12.5px;padding:5px 0;}
.tb-adm-actions{display:flex;gap:8px;margin-top:14px;flex-wrap:wrap;}
.tb-excel-table{font-size:11.5px;}
.tb-excel-table th,.tb-excel-table td{padding:7px 8px;white-space:nowrap;text-align:center;}
.tb-excel-table td:nth-child(4){text-align:right;font-weight:700;}
.tb-excel-table td:nth-child(2){text-align:right;}
#tbAdmFinanceTable th:nth-child(2),#tbAdmFinanceTable th:nth-child(4){text-align:right;}
.tb-excel-table .tb-excel-clickable{cursor:pointer;text-decoration:underline dotted;}
/* تب‌های پایین صفحه به سبک شیت‌های اکسل — برای جدول حضور و غیاب جلسه‌به‌جلسه‌ی پنل استاد */
.tb-sheet-tabs{display:flex;gap:4px;margin-top:-1px;padding:7px 8px 0;background:#eef1f5;border:1px solid #cfd6e0;border-top:none;border-radius:0 0 8px 8px;overflow-x:auto;-webkit-overflow-scrolling:touch;}
.tb-sheet-tab{flex:0 0 auto;padding:6px 16px;font-size:11px;font-weight:700;border:1px solid #cfd6e0;border-bottom:none;border-radius:6px 6px 0 0;background:#e2e6ec;color:#5a6472;cursor:pointer;white-space:nowrap;}
#tbAdmDpTabs.tb-sheet-tabs{flex-wrap:nowrap;}
#tbAdmDpTabs .tb-sheet-tab{flex:1 1 0;text-align:center;padding:6px 6px;}
.tb-sheet-tab:hover{background:#d7dce3;}
.tb-sheet-tab.active{background:#fff;color:#0F8FD9;border-color:#0F8FD9;box-shadow:0 -2px 0 #0F8FD9 inset;}
.tb-tch-quiz-course{border:1px solid #e7ebf0;border-radius:10px;padding:10px 14px;cursor:pointer;display:flex;justify-content:space-between;align-items:center;font-size:12.5px;font-weight:700;}
.tb-tch-quiz-course:hover{background:#F7FAFD;}
.tb-tch-quiz-body{border:1px dashed #dfe4ea;border-radius:10px;padding:14px;margin-top:-4px;}

/* ===== Block 9 ===== */
/* ===== استایل namespace-شده‌ی ماژول «مرکز پیگیری داخلی ادمین‌ها» — همه‌ی سلکتورها زیر
   #tbAdmFollowupSectionBody محصور شده‌اند تا با استایل‌های عمومی فایل تداخل نکنند ===== */

#tbAdmFollowupSectionBody{
  /* پالت آبی آسمانی روشن، هماهنگ با تم اصلی سایت تجارت برتر */
  --bg:#F5FBFF; --bg-alt:#EAF7FE; --surface:#ffffff; --surface-2:#F3F9FE;
  --border:#e1ecf5; --border-light:#bfe3f7; --text:#0F1B2D; --text-dim:#5b6b7d; --text-faint:#93a1b0;
  --emerald:#0F8FD9; --emerald-light:#38B6F1; --emerald-dark:#0B6FAE; --emerald-glow:rgba(15,143,217,.28);
  --danger:#ef4444; --danger-glow:rgba(239,68,68,.5); --warning:#f59e0b; --muted-low:#8ea3b5;
  --radius:14px; --radius-sm:9px;
}
#tbAdmFollowupSectionBody *{box-sizing:border-box;}
#tbAdmFollowupSectionBody{
  background:
    radial-gradient(1100px 620px at 85% -10%, rgba(15,143,217,.10), transparent 60%),
    radial-gradient(900px 500px at -10% 110%, rgba(15,143,217,.06), transparent 55%),
    var(--bg);
  color:var(--text); font-family:'Vazirmatn',sans-serif; direction:rtl;
}
#tbAdmFollowupSectionBody ::selection{background:var(--emerald-glow);}
#tbAdmFollowupSectionBody button{font-family:inherit;cursor:pointer;}
#tbAdmFollowupSectionBody input, #tbAdmFollowupSectionBody select, #tbAdmFollowupSectionBody textarea{font-family:inherit;}
#tbAdmFollowupSectionBody a{color:inherit;}

/* ---------- Layout (نسخه‌ی جاسازی‌شده: نوار تب افقی به‌جای سایدبار تمام‌صفحه) ---------- */
#tbAdmFollowupSectionBody #fwpShell{display:flex;flex-direction:column;min-height:0;}
#tbAdmFollowupSectionBody #fwpHeader{
  display:flex; align-items:center; flex-wrap:wrap; gap:14px;
  background:linear-gradient(180deg,var(--surface),var(--bg-alt));
  border:1px solid var(--border); border-radius:var(--radius); padding:12px 16px; margin-bottom:16px;
}
#tbAdmFollowupSectionBody .sb-brand{display:flex;align-items:center;gap:10px;padding-left:14px;border-left:1px solid var(--border);}
#tbAdmFollowupSectionBody .sb-brand-mark{width:38px;height:38px;border-radius:11px;background:linear-gradient(180deg,var(--emerald-light),var(--emerald) 55%,var(--emerald-dark));display:flex;align-items:center;justify-content:center;font-size:18px;font-weight:800;color:#fff;box-shadow:0 1px 0 rgba(255,255,255,.5) inset, 0 6px 18px rgba(15,143,217,.28);flex:0 0 auto;}
#tbAdmFollowupSectionBody .sb-brand-text b{display:block;font-size:13.5px;font-weight:800;color:var(--text);}
#tbAdmFollowupSectionBody .sb-brand-text span{display:block;font-size:10.5px;color:var(--text-dim);margin-top:1px;}

#tbAdmFollowupSectionBody .sb-clock{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-sm);padding:8px 14px;text-align:center;flex:0 0 auto;}
#tbAdmFollowupSectionBody .sb-clock .sc-time{font-size:16px;font-weight:800;color:var(--emerald-dark);letter-spacing:1px;font-variant-numeric:tabular-nums;}
#tbAdmFollowupSectionBody .sb-clock .sc-date{font-size:10.5px;color:var(--text-dim);margin-top:2px;}

#tbAdmFollowupSectionBody .sb-nav{display:flex;flex-wrap:wrap;gap:6px;flex:1;}
#tbAdmFollowupSectionBody .sb-item{display:flex;align-items:center;gap:8px;padding:8px 13px;border-radius:9px;color:var(--text-dim);font-size:12px;font-weight:700;border:1px solid transparent;position:relative;transition:.15s;cursor:pointer;}
#tbAdmFollowupSectionBody .sb-item:hover{background:rgba(15,143,217,.08);color:var(--text);}
#tbAdmFollowupSectionBody .sb-item.active{background:linear-gradient(180deg,var(--emerald-light),var(--emerald));border-color:var(--emerald-dark);color:#fff;box-shadow:0 1px 0 rgba(255,255,255,.4) inset, 0 3px 8px rgba(15,143,217,.3);}
#tbAdmFollowupSectionBody .sb-item .sbi-ico{width:16px;text-align:center;font-size:13px;}
#tbAdmFollowupSectionBody .sb-badge{margin-right:2px;background:var(--danger);color:#fff;font-size:10px;font-weight:800;padding:2px 7px;border-radius:20px;box-shadow:0 0 0 0 var(--danger-glow);animation:fwpBadgePulse 1.8s infinite;}
#tbAdmFollowupSectionBody .sb-badge.hidden{display:none;}
@keyframes fwpBadgePulse{0%{box-shadow:0 0 0 0 var(--danger-glow);}70%{box-shadow:0 0 0 7px rgba(239,68,68,0);}100%{box-shadow:0 0 0 0 rgba(239,68,68,0);}}

#tbAdmFollowupSectionBody #fwpMain{flex:1;min-width:0;padding:0;}

/* ---------- Alarm banner ---------- */
#tbAdmFollowupSectionBody #alarmBanner{
  display:none; margin-bottom:18px; border-radius:var(--radius-sm); padding:12px 16px;
  align-items:center; gap:12px; color:#fff; font-weight:800; font-size:12.5px;
  background:linear-gradient(120deg,#7f1d1d,#ef4444,#7f1d1d); background-size:220% 220%;
  animation:fwpBannerFlow 3.5s ease infinite; box-shadow:0 8px 26px rgba(239,68,68,.35); cursor:pointer;
  border:1px solid rgba(255,255,255,.15);
}
#tbAdmFollowupSectionBody #alarmBanner.show{display:flex;}
@keyframes fwpBannerFlow{0%{background-position:0% 50%;}50%{background-position:100% 50%;}100%{background-position:0% 50%;}}
#tbAdmFollowupSectionBody .ab-dot{width:10px;height:10px;border-radius:50%;background:#fff;animation:fwpDotPulse 1s infinite;flex:0 0 auto;}
@keyframes fwpDotPulse{0%,100%{opacity:1;transform:scale(1);}50%{opacity:.4;transform:scale(.7);}}

/* ---------- Section switching ---------- */
#tbAdmFollowupSectionBody .tb-sec{display:none;}
#tbAdmFollowupSectionBody .tb-sec.active{display:block;animation:fwpFadeIn .25s ease;}
@keyframes fwpFadeIn{from{opacity:0;transform:translateY(6px);}to{opacity:1;transform:translateY(0);}}

#tbAdmFollowupSectionBody .sec-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:18px;flex-wrap:wrap;gap:10px;}
#tbAdmFollowupSectionBody .sec-head h2{margin:0;font-size:17px;font-weight:800;}
#tbAdmFollowupSectionBody .sec-head p{margin:2px 0 0;font-size:11.5px;color:var(--text-dim);}

/* ---------- Cards ---------- */
#tbAdmFollowupSectionBody .card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:16px;box-shadow:0 1px 0 #fff inset, 0 6px 16px rgba(15,143,217,.06);}

/* Dashboard stat cards */
#tbAdmFollowupSectionBody .stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:18px;}
@media (max-width:980px){.stat-grid{grid-template-columns:repeat(2,1fr);}}
#tbAdmFollowupSectionBody .stat-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:16px;position:relative;overflow:hidden;box-shadow:0 1px 0 #fff inset, 0 6px 16px rgba(15,143,217,.06);}
#tbAdmFollowupSectionBody .stat-card::before{content:'';position:absolute;inset:0;background:radial-gradient(120px 80px at 90% 0%,var(--emerald-glow),transparent 70%);opacity:.5;}
#tbAdmFollowupSectionBody .stat-card .sc-ico{font-size:20px;margin-bottom:8px;opacity:.85;}
#tbAdmFollowupSectionBody .stat-card .sc-num{font-size:26px;font-weight:800;color:var(--emerald-dark);font-variant-numeric:tabular-nums;}
#tbAdmFollowupSectionBody .stat-card .sc-label{font-size:11.5px;color:var(--text-dim);margin-top:3px;font-weight:700;}
#tbAdmFollowupSectionBody .stat-card.danger .sc-num{color:#b91c1c;}
#tbAdmFollowupSectionBody .stat-card.danger::before{background:radial-gradient(120px 80px at 90% 0%,var(--danger-glow),transparent 70%);}

#tbAdmFollowupSectionBody .dash-grid{display:grid;grid-template-columns:1.1fr .9fr;gap:16px;}
@media (max-width:980px){.dash-grid{grid-template-columns:1fr;}}
#tbAdmFollowupSectionBody .card h3{margin:0 0 14px;font-size:13px;font-weight:800;color:var(--text);display:flex;align-items:center;gap:8px;}

/* CSS priority bar chart */
#tbAdmFollowupSectionBody .pbar-row{display:flex;align-items:center;gap:10px;margin-bottom:12px;}
#tbAdmFollowupSectionBody .pbar-label{width:52px;flex:0 0 auto;font-size:11px;color:var(--text-dim);font-weight:700;}
#tbAdmFollowupSectionBody .pbar-track{flex:1;background:var(--surface-2);border-radius:20px;height:11px;overflow:hidden;border:1px solid var(--border);}
#tbAdmFollowupSectionBody .pbar-fill{height:100%;border-radius:20px;width:0%;transition:width 1s cubic-bezier(.2,.8,.2,1);}
#tbAdmFollowupSectionBody .pbar-count{width:22px;flex:0 0 auto;text-align:left;font-size:11px;font-weight:800;color:var(--text);}

#tbAdmFollowupSectionBody .latest-list{display:flex;flex-direction:column;gap:8px;margin-top:4px;}
#tbAdmFollowupSectionBody .latest-item{display:flex;align-items:center;gap:10px;padding:9px 10px;border:1px solid var(--border);border-radius:10px;background:var(--surface-2);cursor:pointer;transition:.15s;}
#tbAdmFollowupSectionBody .latest-item:hover{border-color:var(--border-light);transform:translateX(-2px);}
#tbAdmFollowupSectionBody .li-dot{width:8px;height:8px;border-radius:50%;flex:0 0 auto;}
#tbAdmFollowupSectionBody .li-body{flex:1;min-width:0;}
#tbAdmFollowupSectionBody .li-title{font-size:12px;font-weight:700;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
#tbAdmFollowupSectionBody .li-meta{font-size:10px;color:var(--text-faint);margin-top:2px;}

/* ---------- Forms ---------- */
#tbAdmFollowupSectionBody .form-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;}
@media (max-width:760px){.form-grid{grid-template-columns:1fr;}}
#tbAdmFollowupSectionBody .f-field{display:flex;flex-direction:column;gap:6px;}
#tbAdmFollowupSectionBody .f-field.full{grid-column:1/-1;}
#tbAdmFollowupSectionBody .f-field label{font-size:11.5px;font-weight:700;color:var(--text-dim);}
#tbAdmFollowupSectionBody .f-field input, #tbAdmFollowupSectionBody .f-field select, #tbAdmFollowupSectionBody .f-field textarea{
  background:var(--surface-2);border:1.5px solid var(--border);border-radius:9px;padding:9px 11px;
  color:var(--text);font-size:12.5px;outline:none;transition:.15s;
}
#tbAdmFollowupSectionBody .f-field input:focus, #tbAdmFollowupSectionBody .f-field select:focus, #tbAdmFollowupSectionBody .f-field textarea:focus{border-color:var(--emerald);box-shadow:0 0 0 3px var(--emerald-glow);}
#tbAdmFollowupSectionBody .f-field textarea{resize:vertical;min-height:90px;}
#tbAdmFollowupSectionBody .f-check{display:flex;align-items:center;gap:9px;background:rgba(239,68,68,.08);border:1.5px dashed var(--danger);border-radius:10px;padding:11px 13px;}
#tbAdmFollowupSectionBody .f-check input{width:17px;height:17px;accent-color:var(--danger);}
#tbAdmFollowupSectionBody .f-check label{font-size:12px;font-weight:800;color:#b91c1c;}
#tbAdmFollowupSectionBody .f-readonly{background:var(--surface);color:var(--text-dim);}

#tbAdmFollowupSectionBody .btn{border:none;border-radius:10px;padding:10px 18px;font-size:12.5px;font-weight:800;display:inline-flex;align-items:center;gap:7px;transition:.12s;}
#tbAdmFollowupSectionBody .btn-primary{
  background:linear-gradient(180deg,var(--emerald-light),var(--emerald) 55%,var(--emerald-dark));
  color:#ffffff;
  box-shadow:0 1px 0 rgba(255,255,255,.55) inset, 0 -2px 4px rgba(0,0,0,.15) inset, 0 6px 14px rgba(15,143,217,.38);
  border:1px solid var(--emerald-dark);
}
#tbAdmFollowupSectionBody .btn-primary:hover{filter:brightness(1.06);transform:translateY(-1px);}
#tbAdmFollowupSectionBody .btn-primary:active{transform:translateY(1px);box-shadow:0 1px 0 rgba(255,255,255,.35) inset, 0 2px 4px rgba(0,0,0,.18) inset, 0 3px 8px rgba(15,143,217,.3);}
#tbAdmFollowupSectionBody .btn-outline{background:linear-gradient(180deg,#ffffff,var(--surface-2));border:1.5px solid var(--border-light);color:var(--text);box-shadow:0 1px 0 rgba(255,255,255,.6) inset, 0 2px 6px rgba(15,143,217,.08);}
#tbAdmFollowupSectionBody .btn-outline:hover{border-color:var(--emerald);color:var(--emerald-dark);}
#tbAdmFollowupSectionBody .btn-danger{background:linear-gradient(180deg,#fee2e2,rgba(239,68,68,.15));border:1.5px solid var(--danger);color:#b91c1c;box-shadow:0 1px 0 rgba(255,255,255,.6) inset;}
#tbAdmFollowupSectionBody .btn-danger:hover{background:rgba(239,68,68,.22);}
#tbAdmFollowupSectionBody .btn-sm{padding:6px 12px;font-size:11px;}
#tbAdmFollowupSectionBody .form-actions{display:flex;gap:10px;margin-top:16px;}

/* ---------- Table ---------- */
#tbAdmFollowupSectionBody .tools-row{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:14px;align-items:center;}
#tbAdmFollowupSectionBody .tools-row input[type=search]{flex:1;min-width:180px;}
#tbAdmFollowupSectionBody .tools-row select, #tbAdmFollowupSectionBody .tools-row input{background:var(--surface-2);border:1.5px solid var(--border);border-radius:9px;padding:8px 11px;color:var(--text);font-size:12px;}
#tbAdmFollowupSectionBody .table-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:var(--radius);}
#tbAdmFollowupSectionBody table{width:100%;border-collapse:collapse;font-size:12px;min-width:760px;}
#tbAdmFollowupSectionBody thead th{background:var(--surface-2);color:var(--text-dim);padding:10px 12px;text-align:right;font-size:11px;font-weight:800;cursor:pointer;user-select:none;white-space:nowrap;border-bottom:1px solid var(--border);}
#tbAdmFollowupSectionBody thead th:hover{color:var(--emerald-dark);}
#tbAdmFollowupSectionBody thead th .sort-ind{opacity:.5;margin-right:4px;font-size:9px;}
#tbAdmFollowupSectionBody tbody td{padding:10px 12px;border-bottom:1px solid var(--border);color:var(--text);vertical-align:middle;}
#tbAdmFollowupSectionBody tbody tr{cursor:pointer;transition:.12s;}
#tbAdmFollowupSectionBody tbody tr:hover{background:rgba(15,143,217,.06);}
#tbAdmFollowupSectionBody tbody tr:last-child td{border-bottom:none;}
#tbAdmFollowupSectionBody .tag{display:inline-block;font-size:10.5px;font-weight:800;padding:3px 10px;border-radius:20px;white-space:nowrap;}
#tbAdmFollowupSectionBody .tag-urgent{background:rgba(239,68,68,.15);color:#b91c1c;border:1px solid rgba(239,68,68,.4);}
#tbAdmFollowupSectionBody .tag-high{background:rgba(245,158,11,.18);color:#92400e;border:1px solid rgba(245,158,11,.4);}
#tbAdmFollowupSectionBody .tag-mid{background:rgba(15,143,217,.14);color:#0B6FAE;border:1px solid rgba(15,143,217,.35);}
#tbAdmFollowupSectionBody .tag-low{background:rgba(84,115,101,.2);color:#1f2937;border:1px solid var(--border-light);}
#tbAdmFollowupSectionBody .tag-open{background:rgba(245,158,11,.16);color:#92400e;border:1px solid rgba(245,158,11,.4);}
#tbAdmFollowupSectionBody .tag-progress{background:rgba(15,143,217,.14);color:#0B6FAE;border:1px solid rgba(15,143,217,.35);}
#tbAdmFollowupSectionBody .tag-done{background:rgba(84,115,101,.2);color:#1f2937;border:1px solid var(--border-light);}
#tbAdmFollowupSectionBody .urg-dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--danger);margin-left:6px;animation:fwpDotPulse 1.1s infinite;box-shadow:0 0 6px var(--danger);}
#tbAdmFollowupSectionBody .empty-row td{text-align:center;color:var(--text-faint);padding:26px;}

/* ---------- Timeline ---------- */
#tbAdmFollowupSectionBody .timeline{position:relative;padding-right:22px;}
#tbAdmFollowupSectionBody .timeline::before{content:'';position:absolute;right:6px;top:4px;bottom:4px;width:2px;background:linear-gradient(180deg,var(--border-light),var(--border));}
#tbAdmFollowupSectionBody .tl-item{position:relative;padding-bottom:20px;}
#tbAdmFollowupSectionBody .tl-dot{position:absolute;right:-22px;top:2px;width:13px;height:13px;border-radius:50%;border:3px solid var(--bg);box-shadow:0 0 0 1px var(--border-light);}
#tbAdmFollowupSectionBody .tl-card{background:var(--surface);border:1px solid var(--border);border-radius:11px;padding:11px 13px;}
#tbAdmFollowupSectionBody .tl-top{display:flex;justify-content:space-between;gap:10px;align-items:center;margin-bottom:4px;}
#tbAdmFollowupSectionBody .tl-title{font-size:12.5px;font-weight:800;}
#tbAdmFollowupSectionBody .tl-time{font-size:10.5px;color:var(--text-faint);white-space:nowrap;}
#tbAdmFollowupSectionBody .tl-desc{font-size:11px;color:var(--text-dim);line-height:1.7;}

/* ---------- Alarm center ---------- */
#tbAdmFollowupSectionBody .alarm-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px;}
#tbAdmFollowupSectionBody .alarm-card{background:linear-gradient(160deg,rgba(239,68,68,.08),var(--surface));border:1.5px solid var(--danger);border-radius:var(--radius);padding:15px;position:relative;animation:fwpBorderBlink 1.6s infinite;}
@keyframes fwpBorderBlink{0%,100%{box-shadow:0 0 0 0 rgba(239,68,68,.45);}50%{box-shadow:0 0 0 6px rgba(239,68,68,0);}}
#tbAdmFollowupSectionBody .alarm-card h4{margin:0 0 6px;font-size:13px;font-weight:800;color:#b91c1c;}
#tbAdmFollowupSectionBody .alarm-card .ac-meta{font-size:10.5px;color:var(--text-dim);margin-bottom:8px;}
#tbAdmFollowupSectionBody .alarm-card p{font-size:11.5px;color:var(--text-dim);line-height:1.7;margin:0 0 12px;}
#tbAdmFollowupSectionBody .alarm-empty{grid-column:1/-1;text-align:center;color:var(--text-faint);padding:40px 0;font-size:12.5px;}

/* ---------- Modal ---------- */
#tbAdmFollowupSectionBody #fwpModalOverlay{display:none;position:fixed;inset:0;background:rgba(10,22,36,.55);backdrop-filter:blur(2px);z-index:200;align-items:center;justify-content:center;padding:16px;}
#tbAdmFollowupSectionBody #fwpModalOverlay.show{display:flex;}
#tbAdmFollowupSectionBody .modal{background:var(--surface);border:1px solid var(--border-light);border-radius:16px;padding:22px;width:100%;max-width:480px;box-shadow:0 20px 60px rgba(0,0,0,.5);}
#tbAdmFollowupSectionBody .modal h3{margin:0 0 4px;font-size:15px;font-weight:800;}
#tbAdmFollowupSectionBody .modal .m-sub{font-size:11px;color:var(--text-faint);margin-bottom:16px;}
#tbAdmFollowupSectionBody .m-row{display:flex;justify-content:space-between;padding:7px 0;border-bottom:1px solid var(--border);font-size:12px;}
#tbAdmFollowupSectionBody .m-row span:first-child{color:var(--text-dim);}
#tbAdmFollowupSectionBody .m-row span:last-child{font-weight:700;}
#tbAdmFollowupSectionBody .m-desc{background:var(--surface-2);border:1px solid var(--border);border-radius:10px;padding:11px;font-size:12px;line-height:1.8;margin:12px 0;color:var(--text-dim);}
#tbAdmFollowupSectionBody .confirm-box{background:rgba(239,68,68,.1);border:1px solid var(--danger);border-radius:10px;padding:12px;margin-top:12px;font-size:11.5px;}
#tbAdmFollowupSectionBody .confirm-box p{margin:0 0 10px;color:#b91c1c;font-weight:700;}

/* ---------- misc ---------- */
#tbAdmFollowupSectionBody .hint{font-size:11px;color:var(--text-faint);margin-top:10px;}
@media (max-width:900px){
#tbAdmFollowupSectionBody #fwpHeader{flex-direction:column;align-items:stretch;}
#tbAdmFollowupSectionBody .sb-brand{border-left:none;border-bottom:1px solid var(--border);padding:0 0 10px;}
#tbAdmFollowupSectionBody .sb-nav{overflow-x:auto;flex-wrap:nowrap;}
#tbAdmFollowupSectionBody .stat-grid{grid-template-columns:1fr 1fr;}
}
@media print{
#tbAdmFollowupSectionBody #fwpHeader, #tbAdmFollowupSectionBody #alarmBanner, #tbAdmFollowupSectionBody .no-print{display:none!important;}
#tbAdmFollowupSectionBody #fwpMain{padding:0;}
  #tbAdmFollowupSectionBody{background:#fff;color:#000;}
#tbAdmFollowupSectionBody .tb-sec{display:none!important;}
#tbAdmFollowupSectionBody #fwpPrintArea{display:block!important;}
}
#tbAdmFollowupSectionBody #fwpPrintArea{display:none;}

/* ===== Block 10 ===== */
.tbf-tp{transition:opacity .15s;}
.tbf-tp.hide{display:none;}
.tbf-tp .tbf-authorline b{font-weight:800;color:#0F1B2D;}
/* v273: نامِ انجمنِ هر موضوع، وقتی همه‌ی انجمن‌ها با هم نمایش داده می‌شوند (حالتِ «خانه»)، قابلِ
   کلیک است و کاربر را مستقیم وارد همان انجمنِ اختصاصی می‌کند. */
.tbf-forumtag{cursor:pointer;color:#1789C2 !important;text-decoration:underline;text-decoration-style:dotted;text-underline-offset:2px;}
.tbf-forumtag:hover{color:#0f6a99 !important;}
.tbf-vt{cursor:pointer;color:#9aa7b5;}
.tbf-vt.up.active{color:#178a4c;}
.tbf-vt.down.active{color:#c0272d;}
.tbf-best{cursor:pointer;font-size:10.5px;padding:3px 9px;border-radius:6px;border:1px solid #ddd;background:#f5f6f7;color:#425366;}
.tbf-best.marked{background:#e5f8ec;color:#178a4c;border-color:#178a4c;}
.tbf-newform{display:none;padding:12px 14px;background:#f5f6f7;border-radius:10px;margin-bottom:10px;}
.tbf-newform.open{display:block;}

/* ---- v271: سایدبارِ سوییچِ انجمن‌ها به‌طور کامل حذف شد (طبق درخواستِ صریحِ کاربر) — هر
   کاشی/بازار فقط و فقط انجمنِ خودش را نشان می‌دهد و امکانِ پرش به انجمنِ بازارهای دیگر از این
   صفحه وجود ندارد؛ فقط در حالتِ «خانه» همه‌ی انجمن‌ها با هم نمایش داده می‌شوند. به همین دلیل
   چیدمانِ دوستونه (سایدبار + لیست) به یک ستونِ ساده تبدیل شد و فضای خالیِ ناشی از ستونِ حذف‌شده
   از بین رفت. ---- */
.tb-forum-grid{display:block;}

/* ===== Block 11 ===== */
/* ==== قدمِ ۲۰۷: فوتر به‌صورتِ یک زبانه‌ی وسطِ پایینِ صفحه + پنلِ کشوییِ واحد ====
   طبقِ درخواستِ صریحِ کاربر: این رفتار حالا در دسکتاپ و موبایل/تبلت **یکسان** است (برخلافِ
   v219/v287 که دسکتاپ را همیشه‌باز نگه می‌داشتند). حالتِ پیش‌فرض: فقط یک زبانه‌ی کوچک
   (.tb-footer-tab) وسطِ پایینِ صفحه دیده می‌شود؛ کلِ فوتر (#tb-footer) به‌صورتِ position:fixed
   با transform:translateY(100%) از دیدِ کاربر و از جریانِ صفحه بیرون است، پس هیچ فضایی اشغال
   نمی‌کند. با کلیک روی زبانه، کلاسِ tb-footer-panel-open به فوتر اضافه می‌شود و کلِ فوتر یک‌جا
   (همه‌ی ۴ ستون + خطِ کپی‌رایت) با انیمیشنِ کشویی از پایین روی محتوایِ صفحه overlay می‌شود؛
   پردهٔ نیمه‌شفاف (.tb-footer-backdrop) هم پشتِ آن باز می‌شود و با کلیک رویش، یا دکمهٔ ضربدرِ
   داخلِ پنل، دوباره بسته می‌شود. */
#tb-footer .tb-footer-acc-head{display:flex;align-items:center;justify-content:space-between;border-radius:8px;padding:5px 8px;margin:-5px -8px 0;}
#tb-footer .tb-footer-acc-body{overflow:hidden;}
/* کارت هر ستون فوتر — برای نظم و زیبایی بیشتر، در هر اندازه‌ی صفحه */
.tb-footer-grid>div{background:rgba(255,255,255,.035);border:1px solid rgba(255,255,255,.06);border-radius:14px;padding:10px 12px;}

/* زبانه‌ی وسطِ پایینِ صفحه — حالتِ پیش‌فرض/بسته، در همه‌ی اندازه‌های صفحه یکسان */
.tb-footer-tab{
  display:flex;align-items:center;gap:6px;
  position:fixed;left:50%;bottom:0;transform:translateX(-50%);z-index:9999;
  background:#0b2a52;color:#cfe0f0;border:1px solid rgba(255,255,255,.14);border-bottom:none;
  border-radius:14px 14px 0 0;box-shadow:0 -4px 16px rgba(0,0,0,.35);
  padding:8px 18px calc(7px + env(safe-area-inset-bottom));
  font-family:'Vazirmatn',sans-serif;font-size:12px;font-weight:700;cursor:pointer;
  -webkit-tap-highlight-color:transparent;transition:transform .2s ease,opacity .2s ease;
}
.tb-footer-tab:hover{color:#fff;background:#0d3363;}
.tb-footer-tab i{font-size:14px;color:#7aadcf;}
.tb-footer-tab.tb-footer-tab-hidden{transform:translateX(-50%) translateY(100%);opacity:0;pointer-events:none;}
/* قدمِ ۳۶۸ — رفعِ گزارشِ حبیب (اسکرین‌شات: زبانه‌ی «ارتباط با ما» پشتِ مسنجرِ بازشده هنوز
   دیده می‌شد): tbToggleMessenger در assets/js/messenger.js از قبل tbFooterTab را با کلاسِ
   tb-footer-tab-hidden مخفی می‌کند، اما این یک لایه‌ی ایمنیِ مستقیماً CSS اضافه می‌کند —
   مستقل از این‌که مسنجر از چه مسیری (لانچرِ شناور، آیکونِ هدر، صفحه‌ی مستقلِ
   /messenger-app/…) باز شده — تا وقتی #tbMsgrPanel کلاسِ open را دارد، زبانه‌ی فوتر در
   همه‌ی حالت‌ها (دسکتاپ و گوشی) قطعاً پنهان بماند. */
body:has(#tbMsgrPanel.open) .tb-footer-tab{transform:translateX(-50%) translateY(100%)!important;opacity:0!important;pointer-events:none!important;}
/* قدمِ ۲۹۲ (طبقِ درخواستِ صریحِ حبیب — «دکمه‌ی فوتر در گوشی وقتی صفحه‌ی ثبت‌نام باز
   می‌شود مخفی بشه»): کلاسِ جداگانه (نه همان tb-footer-tab-hidden که خودِ پنلِ فوتر
   موقعِ بازشدنِ خودش استفاده می‌کند) تا دو منطقِ مستقلِ مخفی‌کردن با هم تداخل نکنند؛
   فقط موبایل/تبلت (هم‌الگو با بقیه‌ی breakpointهایِ tbmv2 در همین فایل)، چون دسکتاپ
   درخواست نشده بود. */
@media (max-width:991px){
  .tb-footer-tab.tb-footer-tab-hidden-register{transform:translateX(-50%) translateY(100%);opacity:0;pointer-events:none;}
}
/* قدمِ ۳۷۶ — رفعِ درخواستِ صریحِ حبیب: زبانه‌ی شناورِ «ارتباط با ما» فقط در گوشی/تبلت
   (هم‌الگو با breakpointِ بالا) و فقط در صفحاتی که پرچمِ PHP را ست نمی‌کنند (یعنی هر
   صفحه‌ای غیر از خانه و صفحه‌ی اصلیِ هر کاشی) مخفی می‌شود؛ کلاسِ زیر مستقیماً سمتِ‌سرور
   رندر می‌شود (نه با JS)، پس هیچ فلشِ لحظه‌ای/دیده‌شدنِ آنی‌ای هم پیش از اجرایِ اسکریپت
   ندارد. در دسکتاپ عمداً دست‌نخورده می‌ماند. */
@media (max-width:991px){
  .tb-footer-tab.tb-footer-tab-hide-mobile-page{display:none;}
}
/* قدمِ ۳۷۸ — رفعِ گزارشِ حبیب (اسکرین‌شات: انتهایِ درویرِ همبرگرِ موبایل که بازش می‌کنیم،
   زبانه‌ی شناورِ «ارتباط با ما» رویِ آیتمِ «ارتباط با ما»یِ خودِ همان منو افتاده بود — حتی
   در خانه/صفحه‌ی اصلیِ کاشی‌ها که طبقِ قدمِ ۳۷۶ باید نشان داده شود). هم‌الگو با قدمِ ۳۶۸
   (مسنجر): با :has() مستقیماً چک می‌شود که آیا درویرِ همبرگر (#tbmv2Drawer) بازه؛ اگر باز
   باشد، زبانه‌ی فوتر صرفِ‌نظر از این‌که این صفحه اصلاً چه صفحه‌ای است کاملاً پنهان می‌شود —
   چون خودِ درویر از قبل یک آیتمِ «ارتباط با ما»یِ مستقل در پایینش دارد و نشان‌دادنِ هر دو
   با هم گیج‌کننده/روی‌همافتاده بود. درویرِ tbmv2 فقط مخصوصِ موبایل/تبلت است، پس نیازی به
   مدیاکوئری‌یِ جداگانه نیست. */
body:has(#tbmv2Drawer.tbmv2-open) .tb-footer-tab{transform:translateX(-50%) translateY(100%)!important;opacity:0!important;pointer-events:none!important;}

/* پردهٔ نیمه‌شفاف پشتِ پنلِ باز */
.tb-footer-backdrop{
  position:fixed;inset:0;background:rgba(4,14,28,.55);z-index:9997;
  opacity:0;pointer-events:none;transition:opacity .2s ease;
}
.tb-footer-backdrop.tb-backdrop-open{opacity:1;pointer-events:auto;}

/* دکمهٔ ضربدرِ بستنِ پنل، بالا-چپِ خودِ فوتر */
.tb-footer-panel-close{
  position:absolute;top:12px;left:14px;z-index:2;
  width:30px;height:30px;border-radius:50%;border:0;
  background:rgba(255,255,255,.1);color:#e8f0fb;font-size:16px;
  display:flex;align-items:center;justify-content:center;cursor:pointer;
}
.tb-footer-panel-close:hover{background:rgba(255,255,255,.18);}

/* خودِ پنلِ فوتر — پیش‌فرض بیرونِ صفحه (پنهان)، جدا از جریانِ عادیِ صفحه پس فضایی اشغال نمی‌کند */
#tb-footer.tb-footer-panel{
  position:fixed;left:0;right:0;bottom:0;z-index:9998;
  max-height:85vh;overflow-y:auto;-webkit-overflow-scrolling:touch;
  border-radius:18px 18px 0 0;
  box-shadow:0 -10px 34px rgba(0,0,0,.5);
  transform:translateY(100%);
  transition:transform .28s ease;
  padding-bottom:env(safe-area-inset-bottom);
}
#tb-footer.tb-footer-panel.tb-footer-panel-open{transform:translateY(0);}

/* داخلِ پنلِ باز، چیدمانِ ستون‌ها: دسکتاپ/تبلتِ بزرگ ۴ستونه، موبایل/تبلتِ کوچک تک‌ستونه */
@media (max-width:1024px){
  #tb-footer .tb-footer-grid{grid-template-columns:1fr!important;}
}

/* v34 (بازنویسی‌شده در قدمِ ۲۰۷): رفعِ باگِ «حبابِ مسنجر زیرِ زبانه‌ی ثابتِ فوتر فرومی‌رود».
   قبلاً این تنظیم فقط مخصوصِ موبایل بود چون فقط موبایل نوارِ ثابتِ پایین داشت؛ حالا که زبانه‌ی
   فوتر در همه‌ی اندازه‌های صفحه (دسکتاپ هم) ثابت و دیده می‌شود، این قانون هم دیگر داخلِ
   مدیاکوئریِ مخصوصِ موبایل نیست و همیشه اعمال می‌شود. --tb-fbar-h توسطِ tbSyncFooterBarHeight
   (در footer.php) هم‌گام نگه داشته می‌شود: وقتی زبانه دیده می‌شود مقدارِ واقعیِ ارتفاعش، و وقتی
   پنل باز/زبانه مخفی است صفر. */
#tbMessengerRoot .tb-msgr-launcher{bottom:calc(var(--tb-fbar-h, 16px) + 10px)!important;}

/* v220: قابلیت «کلیک برای بزرگ‌شدنِ تمام‌عرضِ نقشه» به‌طور کامل حذف شد — چون در عمل نقشه را
   خالی نشان می‌داد و بخشی از آن پایین‌تر از صفحه‌ی دید می‌رفت (نیاز به اسکرول). ستون «موقعیت
   مکانی» حالا دقیقاً مثل ۳ ستون دیگر رفتار می‌کند: همیشه با ارتفاع ثابت و کامل قابل‌مشاهده است،
   بدون هیچ دکمه یا حالت اضافه. */

/* ===== Block 12 ===== */
/* v245: طبقِ درخواستِ کاربر، تمامِ دکمه‌های «بازگشت» در کلِ سایت هم‌رنگ شدند —
   پس‌زمینه‌ی قرمز، آیکون/نوشته‌ی مشکی. این بلاک به‌عمد آخرین <style> صفحه است تا در
   نبردِ specificity/ترتیب با قوانینِ قبلی (از جمله نسخه‌های موبایل و حالتِ hover) برنده باشد؛
   با این حال !important هم اضافه شده چون بعضی از این کلاس‌ها (مثلاً header-btn.mobile-back)
   داخلِ سلکتورهای id-دار تعریف شده بودند که specificity بالاتری دارند. */
.tb-page-back-btn,
.tb-crs-back,
.tb-svc-quiz-back,
.tb-svc-back-catalog-btn,
.tb-quiz2-back,
.tb-quiz4-back,
.header-btn.mobile-back,
#tbCrsRegBack,
#tbCrsDoneBack,
#tbOtpBackLink,
#tbStuQuizListBackBtn,
[data-panel="forgot"] .tb-switch-note a{
  background:#C0282D !important;
  border-color:#C0282D !important;
  color:#000 !important;
}
.tb-page-back-btn i,.tb-crs-back i,.tb-svc-quiz-back i,.tb-svc-back-catalog-btn i,
.tb-quiz2-back i,.tb-quiz4-back i,.header-btn.mobile-back .ic,
#tbCrsRegBack i,#tbCrsDoneBack i,#tbOtpBackLink i,#tbStuQuizListBackBtn,
[data-panel="forgot"] .tb-switch-note a i{
  color:#000 !important;
}
/* v269: طبقِ درخواستِ صریحِ کاربر — دکمه‌ی «بازگشت» داخلِ هدرِ چتِ پیام‌رسان (فلشِ کوچک داخلِ
   دایره‌ی قرمزِ بزرگ) اصلاح شد: خودِ دایره کوچک‌تر و آیکونِ فلش داخلش بزرگ‌تر شد تا هم واضح‌تر
   دیده شود هم اندازه‌اش با بقیه‌ی دکمه‌های هدر (که ۳۶×۳۶ بودند) نامتناسب/گنده به‌نظر نرسد.
   !important چون این قانون باید بر قانونِ عمومیِ #tbMessengerRoot .header-btn (خط ۲۰۶۶) که
   width/height/font-size را ست می‌کند غالب شود. */
#tbMessengerRoot .header-btn.mobile-back{
  width:26px !important;height:26px !important;
}
#tbMessengerRoot .header-btn.mobile-back .ic{
  font-size:1.35rem !important;font-weight:800;
}
[data-panel="forgot"] .tb-switch-note a,#tbOtpBackLink{
  display:inline-flex;align-items:center;gap:4px;padding:4px 10px;border-radius:6px;
}
.tb-page-back-btn:hover,.tb-crs-back:hover,.tb-svc-quiz-back:hover,.tb-svc-back-catalog-btn:hover,
.tb-quiz2-back:hover,.tb-quiz4-back:hover,.header-btn.mobile-back:hover,
#tbCrsRegBack:hover,#tbCrsDoneBack:hover,#tbOtpBackLink:hover,#tbStuQuizListBackBtn:hover,
[data-panel="forgot"] .tb-switch-note a:hover{
  background:#9c2024 !important;
  border-color:#9c2024 !important;
  color:#000 !important;
}
.tb-quiz2-back:disabled,.tb-quiz4-back:disabled{
  background:#C0282D !important;
  opacity:.4 !important;
  color:#000 !important;
}

/* v246: طبقِ درخواستِ صریحِ کاربر — یکسان‌سازیِ کاملِ دکمه‌ی «بازگشت» در همه‌ی زیرصفحاتِ
   تقویم (فارکس/بورس/کریپتو/بازرگانی) روی موبایل: یک دکمه‌ی دایره‌ایِ توپرِ قرمز با یک دایره‌ی
   کوچک‌ترِ مشکی درستِ وسطش (۵۰٪ قطرِ دایره‌ی بیرونی) تا هر دو رنگ به‌وضوح دیده شوند؛ آیکون
   سفید روی دایره‌ی مشکی قرار می‌گیرد تا خوانا بماند. */
@media (max-width:640px), (max-height:500px){
  /* رفعِ نشتیِ استایل: در پنل‌های ساخته‌شده با جاوااسکریپت (بورس/کریپتو/بازرگانی)، قانونِ
     عمومیِ `.tb-cal2-head span{display:block}` (که فقط برای زیرنویسِ عنوان نوشته شده بود)
     به‌اشتباه روی همان اسپنِ متنِ «بازگشت» هم اثر می‌گذاشت و آن را دوباره نمایان می‌کرد — دقیقاً
     همان علتِ ناهماهنگیِ فارکس در برابر بورس/کریپتو/بازرگانی. این‌جا با سلکتورِ دقیق‌تر همان
     اسپن، دوباره مخفی می‌شود تا هر چهار زیرصفحه یکسان شوند. */
  .tb-cal2-head .tb-crs-back-txt,
  .tb-crs-back-txt{display:none !important;}

  .tb-crs-back{
    position:relative !important;
    width:34px !important;
    height:34px !important;
    padding:0 !important;
    display:inline-flex !important;
    align-items:center !important;
    justify-content:center !important;
    border-radius:50% !important;
    border:none !important;
    box-shadow:none !important;
  }
  .tb-crs-back::before{
    content:'';
    position:absolute;
    top:50%;left:50%;
    transform:translate(-50%,-50%);
    width:50%;
    height:50%;
    background:#000;
    border-radius:50%;
    z-index:0;
  }
  .tb-crs-back i{
    position:relative;
    z-index:1;
    color:#fff !important;
    font-size:14px !important;
  }
}

/* v333: طبقِ درخواستِ صریحِ کاربر — دکمه‌ی «بازگشت» دیگر دایره‌ی توپرِ قرمز (با دایره‌ی مشکیِ کوچکِ
   کم‌رنگ وسطش که عملاً دیده نمی‌شد) نیست؛ به‌جایش فقط یک فلشِ مشکیِ ضخیم و کاملاً واضح، بدون هیچ
   پس‌زمینه/حاشیه/سایه‌ای. این بلاک عمداً آخرین قانونِ CSS صفحه است تا روی تمامِ لایه‌های قبلی
   (رنگِ قرمزِ v245، دایره‌ی مخصوصِ موبایلِ v246) غالب شود. روی همان مجموعه‌ی سلکتورهایی اعمال
   می‌شود که v245 قبلاً «تمامِ دکمه‌های بازگشتِ کلِ سایت» تعریف کرده بود، یعنی همه‌ی صفحاتی که این
   دکمه در آن‌ها ساخته شده. */
.tb-page-back-btn,
.tb-crs-back,
.tb-svc-quiz-back,
.tb-svc-back-catalog-btn,
.tb-quiz2-back,
.tb-quiz4-back,
.header-btn.mobile-back,
#tbCrsRegBack,
#tbCrsDoneBack,
#tbOtpBackLink,
#tbStuQuizListBackBtn,
[data-panel="forgot"] .tb-switch-note a{
  background:none !important;
  border:none !important;
  box-shadow:none !important;
  color:#000 !important;
}
.tb-page-back-btn i,.tb-crs-back i,.tb-svc-quiz-back i,.tb-svc-back-catalog-btn i,
.tb-quiz2-back i,.tb-quiz4-back i,.header-btn.mobile-back .ic,
#tbCrsRegBack i,#tbCrsDoneBack i,#tbOtpBackLink i,#tbStuQuizListBackBtn,
[data-panel="forgot"] .tb-switch-note a i{
  color:#000 !important;
  font-weight:900 !important;
  -webkit-text-stroke:.6px #000;
  text-shadow:0 0 .3px #000,0 0 .3px #000,0 0 .3px #000;
}
.tb-page-back-btn:hover,.tb-crs-back:hover,.tb-svc-quiz-back:hover,.tb-svc-back-catalog-btn:hover,
.tb-quiz2-back:hover,.tb-quiz4-back:hover,.header-btn.mobile-back:hover,
#tbCrsRegBack:hover,#tbCrsDoneBack:hover,#tbOtpBackLink:hover,#tbStuQuizListBackBtn:hover,
[data-panel="forgot"] .tb-switch-note a:hover{
  background:rgba(0,0,0,.07) !important;
  border:none !important;
  color:#000 !important;
}
.tb-quiz2-back:disabled,.tb-quiz4-back:disabled{
  background:none !important;
  opacity:.35 !important;
  color:#000 !important;
}
@media (max-width:640px), (max-height:500px){
  /* دکمه‌ی موبایلِ صفحه‌ی دوره‌ها/تقویم: بدونِ دایره یا نقطه‌ی مشکی، فقط فلشِ بزرگِ ضخیمِ مشکی
     وسطِ همان جعبه‌ی ۳۴×۳۴ (برای حفظِ اندازه‌ی راحتِ لمس با انگشت). */
  .tb-crs-back{
    background:none !important;
    border:none !important;
    box-shadow:none !important;
  }
  .tb-crs-back::before{content:none !important;}
  .tb-crs-back i{
    color:#000 !important;
    font-size:20px !important;
    font-weight:900 !important;
    -webkit-text-stroke:.7px #000;
    text-shadow:0 0 .3px #000,0 0 .3px #000,0 0 .3px #000;
  }
}

/* ================================================================
   قدمِ ۳۷۰ — یادداشتِ این بلوک از نشست‌هایِ قبلی دیگر درست نیست: «کشوی fixed»یِ
   tb-school-sidebar که اینجا توضیح داده شده بود، در همین قدم به‌طورِ کامل حذف و
   با یک آکاردئونِ درون‌خطی (بدونِ position:fixed، بدونِ پرده‌ی تیره، بدونِ
   بسته‌شدنِ خودکار با کلیکِ بیرون) جایگزین شد — نگاه کنید به style.css، بخشِ
   .tb-school-picker/.tb-school-sidebar (نزدیکِ خطِ ۱۹۴۶) و page-services.php،
   تابع‌هایِ tbSchoolOpenDrawer/CloseDrawer/ToggleDrawer. این بلوک فقط برایِ
   حفظِ تاریخچه نگه داشته شده؛ هیچ قانونِ CSSیِ فعالی ندارد. */

/* ================================================================
   نشستِ جدید — تنظیمِ ظریفِ Cross-document View Transitions (متاتگ در
   header.php). بدونِ این بلوک، مرورگر از کراس‌فیدِ پیش‌فرضِ خودش (۰.۲۵ ثانیه)
   استفاده می‌کند که خودش قابلِ‌قبول است؛ این بلوک فقط زمان‌بندی را کمی نرم‌تر و
   هماهنگ با برندِ سایت می‌کند. کاملاً اختیاری و بی‌خطر — اگر مرورگر
   View Transitions را پشتیبانی نکند، این قوانین اصلاً اعمال نمی‌شوند (هیچ اثری
   روی چیدمان/عملکردِ بقیه‌ی سایت ندارند). */
@media (prefers-reduced-motion: no-preference) {
  ::view-transition-old(root),
  ::view-transition-new(root){
    animation-duration:.22s;
    animation-timing-function:cubic-bezier(.4,0,.2,1);
  }
}
/* کاربرانی که در تنظیماتِ سیستم‌شان «کاهشِ حرکت» را فعال کرده‌اند، اصلاً افکت
   نمی‌بینند — دسترسی‌پذیری، طبقِ استانداردِ خودِ مشخصاتِ View Transitions. */
@media (prefers-reduced-motion: reduce) {
  ::view-transition-group(*),
  ::view-transition-old(*),
  ::view-transition-new(*){
    animation:none !important;
  }
}

/* ==========================================================================
   رفعِ نقصِ کیفیتِ گرافیکیِ ایموجی/نمادها (سراسریِ سایت) — این نشست
   ------------------------------------------------------------------------
   ریشه‌ی واقعیِ افتِ کیفیت: در نشستِ قبل کتابخانه‌ی Twemoji فقط برایِ مسنجر
   enqueue و صدا زده شده بود (assets/js/messenger.js → msgrApplyTwemoji،
   کلاسِ خروجی msgr-emoji)، ولی هیچ‌کجایِ style.css قانونی برایِ سایزِ آن
   کلاس نبود — یعنی تصویرِ SVGِ جایگزین‌شده بدونِ width/height صریح، با
   سایزِ پیش‌فرضِ مرورگر (معمولاً ۳۰۰×۱۵۰px) رندر می‌شد: دقیقاً همان چیزی که
   کاربر «کیفیتِ پایین/بهم‌ریخته» می‌بیند. جدا از این، بقیه‌ی صفحاتِ سایت
   (داشبورد، پنلِ دانشجو، دوره‌ها، ابزارها، تقویم، انجمن و غیره) اصلاً از
   Twemoji استفاده نمی‌کردند و هنوز با فونتِ ایموجیِ خودِ سیستم‌عامل/مرورگرِ
   کاربر رندر می‌شدند (ناهماهنگ بینِ ویندوز/اندروید/آیفون، گاهی جعبه‌یِ خالی).
   این نشست یک اسکریپتِ سراسری (assets/js/emoji-render.js) اضافه کرد که
   کلِ document.body را در هر صفحه با همان Twemoji رندر می‌کند (کلاسِ خروجیِ
   tb-emoji-img)، به‌همراهِ MutationObserver برایِ محتوایِ داینامیک. این بلوک
   سایزِ درستِ هر دو کلاسِ خروجی (msgr-emoji قدیمی + tb-emoji-img تازه) را
   تعیین می‌کند تا تصویرِ برداریِ Twemoji دقیقاً هم‌اندازه‌یِ فونتِ اطرافش و
   هم‌ترازِ عمودیِ درست نمایش داده شود — استانداردِ خودِ مستنداتِ Twemoji. */
.tb-emoji-img,
.msgr-emoji,
img.emoji {
  height: 1.2em;
  width: 1.2em;
  min-width: 1.2em;
  margin: 0 .05em 0 .1em;
  vertical-align: -0.2em;
  display: inline-block;
  background: none;
  border: none;
  box-shadow: none;
}
/* المان‌هایِ بزرگ‌ترِ آیکونی (کارت‌ها/تیترها/دکمه‌هایِ درشت) که ایموجیِ
   داخل‌شان باید بزرگ‌تر دیده شود — با یک کلاسِ کمکیِ اختیاری قابلِ‌استفاده. */
.tb-emoji-lg .tb-emoji-img,
.tb-emoji-lg .msgr-emoji {
  height: 1.6em;
  width: 1.6em;
}

/* =============================================================================
 * قدمِ ۱۶۴ — Opt-in خلاصهٔ هفتگیِ ایمیلی (صفحهٔ تقویمِ اقتصادی)
 * کارتِ شناور، پایینِ صفحه، سمتِ راست (هم‌جهت با RTL) — تنها در بازدیدِ بارِ اول.
 * =============================================================================
 */
.tb-digest-optin {
  position: fixed;
  bottom: -400px;
  right: 20px;
  left: auto;
  width: 340px;
  max-width: calc(100% - 40px);
  z-index: 900;
  opacity: 0;
  transition: bottom .35s ease, opacity .35s ease;
  direction: rtl;
  font-family: 'Vazirmatn', Tahoma, sans-serif;
}
.tb-digest-optin.tb-digest-open {
  bottom: 20px;
  opacity: 1;
}
.tb-digest-card {
  position: relative;
  background: #fff;
  border-radius: 14px;
  box-shadow: 0 12px 32px rgba(0,0,0,.22);
  border: 1px solid #eaeef1;
  padding: 18px 18px 16px;
}
.tb-digest-close {
  position: absolute;
  top: 8px;
  left: 10px;
  background: none;
  border: none;
  font-size: 20px;
  line-height: 1;
  color: #9aa3ab;
  cursor: pointer;
  padding: 4px;
}
.tb-digest-close:hover { color: #555; }
.tb-digest-icon {
  font-size: 26px;
  color: #1789C2;
  margin-bottom: 6px;
}
.tb-digest-title {
  font-weight: 700;
  font-size: 15px;
  color: #1a2733;
  margin-bottom: 6px;
}
.tb-digest-desc {
  font-size: 12.5px;
  line-height: 1.9;
  color: #5b6670;
  margin-bottom: 12px;
}
.tb-digest-form {
  display: flex;
  gap: 6px;
  margin-bottom: 8px;
}
.tb-digest-input {
  flex: 1;
  min-width: 0;
  padding: 9px 10px;
  border: 1px solid #d7dde2;
  border-radius: 8px;
  font-size: 13px;
  font-family: inherit;
  direction: ltr;
  text-align: right;
}
.tb-digest-input:focus {
  outline: none;
  border-color: #1789C2;
  box-shadow: 0 0 0 2px rgba(23,137,194,.15);
}
.tb-digest-btn-accept {
  background: #1789C2;
  color: #fff;
  border: none;
  border-radius: 8px;
  padding: 9px 14px;
  font-size: 12.5px;
  font-weight: 600;
  font-family: inherit;
  white-space: nowrap;
  cursor: pointer;
  transition: background .15s ease;
}
.tb-digest-btn-accept:hover:not(:disabled) { background: #136c9c; }
.tb-digest-btn-accept:disabled { opacity: .7; cursor: default; }
.tb-digest-btn-decline {
  display: block;
  width: 100%;
  background: none;
  border: none;
  color: #8b95a0;
  font-size: 11.5px;
  font-family: inherit;
  cursor: pointer;
  padding: 4px;
  text-decoration: underline;
}
.tb-digest-btn-decline:hover { color: #5b6670; }
.tb-digest-msg {
  font-size: 13px;
  padding: 8px 4px;
  text-align: center;
  border-radius: 8px;
}
.tb-digest-msg-ok {
  color: #157a4f;
  background: #e9f9f1;
}
.tb-digest-msg-error {
  color: #b32d2e;
  background: #fdecec;
}
@media (max-width: 480px) {
  .tb-digest-optin { right: 10px; width: calc(100% - 20px); }
}

/* ============================================================
   tbmv2 — درویرِ موبایلِ آزمایشی/پیش‌نمایش (مرحله‌ی ۱، قدمِ ۲۱۹)
   کاملاً ایزوله (پیشوندِ tbmv2-)، فقط زیرِ html.tbmv2-on + زیرِ
   ۹۹۱px فعال می‌شود. هیچ کلاس/استایلِ موجودی تغییر نکرده.
   ============================================================ */
/* v221: طبقِ درخواستِ کاربر، این دکمه دیگر یک حبابِ شناورِ مجزا/بی‌ربط به هدر نیست —
   حالا داخلِ ردیفِ متادیتایِ هدر (کنارِ ساعت/تاریخ/شبکه‌های اجتماعی) می‌نشیند، همراهِ
   دکمه‌ی «کاربر» تازه‌اضافه‌شده، هر دو در یک کانتینر (tbmv2-header-actions). */
/* v225 (طبقِ درخواستِ صریحِ حبیب): همبرگر/کاربر دیگر داخلِ کانتینرِ مجزایِ
   tbmv2-header-actions نیستند — حالا مستقیم داخلِ خودِ .tb-meta-social (کنارِ آیکون‌های
   شبکه‌های اجتماعی) نشسته‌اند، پس هرکدام باید مستقلاً همان قاعده‌ی «فقط زیرِ ۹۹۱px و فقط با
   tbmv2-on» را داشته باشد — دقیقاً هم‌معنی با قاعده‌ی قبلیِ مشترک، فقط رویِ دو سلکتورِ جدا. */
.tbmv2-toggle, .tbmv2-user-wrap{ display: none; }
html.tbmv2-on .tbmv2-toggle{ display: flex; }
html.tbmv2-on .tbmv2-user-wrap{ display: block; }
@media (min-width: 992px){ .tbmv2-toggle, .tbmv2-user-wrap{ display: none !important; } }
/* قدمِ ۲۲۶ — موردِ ۲: ظاهرِ ساده (بدونِ رنگ/پس‌زمینه/دایره)، سایزِ دو برابر (۳۲→۶۴px). */
.tbmv2-toggle, .tbmv2-user-btn{
  width: 64px; height: 64px; border-radius: 0; display:flex; align-items: center; justify-content: center;
  background: transparent; color: #151a23; border: none; box-shadow: none;
  font-size: 30px; cursor: pointer; text-decoration:none; flex:none;
}
/* v229 — نوارِ مستقلِ قدمِ ۲۲۶ (tbmv2-top-actions) کاملاً حذف شد؛ همبرگر/ساعت/کاربر حالا
   داخلِ #tbHeaderRow، کنارِ هم، در یک ردیف (tb-meta-time-row) می‌نشینند — چون pin() دیگر
   در موبایل #tbHeaderRow را مخفی نمی‌کند (نگاه کنید به تابعِ pin در header.php)، دیگر نیازی
   به یک نوارِ تکراریِ بیرون از هدر نیست. */
.tb-meta-time-row{ display: flex; align-items: center; gap: 6px; }
/* قدمِ ۲۳۳ — طبقِ گزارشِ صریحِ حبیب: در حالتِ خانه/موبایل، این ردیف باید کلِ عرضِ نوارِ
   متادیتا را بگیرد تا همبرگر واقعاً به لبه‌ی راست و کاربر به لبه‌ی چپ برسند (به‌جایِ چسبیدن
   به هم وسطِ صفحه) — ساعت/تاریخ به‌طورِ طبیعی بینِ آن دو، وسط، قرار می‌گیرد. */
/* قدمِ ۲۹۶ (طبقِ درخواستِ صریحِ حبیب، موردِ ۴): این قانون قبلاً max-width:991px بود —
   یعنی هم رویِ حالتِ کاملاً پیچیده‌شده/عمودیِ ≤۶۲۰px (جایی که .tb-meta-block واقعاً
   flex:1 1 100% می‌شود و این width:100% معنا دارد) اجرا می‌شد، هم رویِ بازه‌ی ۶۲۱-۹۹۱px
   (موبایلِ افقی/تبلتِ کوچک) — جایی که .tb-header-row اصلاً wrap نمی‌شود و .tb-meta-block
   هنوز flex:0 0 auto (اندازه‌اش را از رویِ محتوا می‌گیرد) است. اجرایِ width:100% رویِ
   .tb-meta-time-row داخلِ یک والدِ auto-sized دقیقاً همان ریشه‌ی باگِ گزارش‌شده بود:
   «همبرگر وسطِ صفحه می‌افتد» — چون ردیف به‌جایِ اندازه‌ی طبیعیِ محتوایش، به یک عرضِ
   نامشخص/بزرگ‌تر کش می‌آمد. این قانون حالا فقط رویِ همان بازه‌ای می‌ماند که واقعاً برایش
   طراحی شده بود (٬≤۶۲۰px، هم‌مرزِ دقیقِ جایی که تب-هدر-رو wrap می‌شود). رفعِ خودِ باگِ
   بازه‌ی ۶۲۱-۹۹۱px (لندسکیپ) پایین‌تر همین فایل آمده. */
@media (max-width: 620px){
  html.tbmv2-on #tb-root.tb-home-mode .tb-meta-time-row{
    width: 100%; justify-content: space-between; gap: 12px;
  }
}
/* قدمِ ۲۹۹ (طبقِ اصلاحِ صریحِ حبیب روی قدمِ ۲۹۶): راه‌حلِ قدمِ ۲۹۶ (بیرون‌کشیدنِ همبرگر از
   ردیفِ ساعت/کاربر و نشاندنش زیرِ لوگو با position:absolute) اشتباه بود — حبیب صراحتاً گفت
   همبرگر باید هم‌چنان کنارِ ساعت/کاربر، در همان یک ردیف بماند (کاربر=چپ، ساعت=وسط،
   همبرگر=راست، هرسه هم‌راستا)، نه زیرِ لوگو. ریشه‌یِ واقعیِ باگِ اصلی («همبرگر وسطِ صفحه
   می‌افتد») این بود که width:100% رویِ .tb-meta-time-row داخلِ والدی (.tb-meta-block) با
   flex:0 0 auto (اندازه‌اش را از محتوا می‌گیرد، نه از عرضِ صفحه) معنایِ مبهم/نامعتبر دارد.
   راه‌حلِ درست: خودِ والد (.tb-meta-block) هم در همین بازه flex:1 1 auto بگیرد (بزرگ‌شدن تا
   فضایِ باقی‌مانده‌ی کنارِ لوگو را پر کند — دقیقاً هم‌مسیر با کاری که در پرتره با
   flex:1 1 100% انجام می‌شود، اما بدونِ wrap کردن، چون اینجا هنوز باید کنارِ لوگو بماند نه
   زیرش) — با این کار width:100% رویِ فرزند به‌درستی تعریف می‌شود و justify-content:space-between
   سه فرزند (همبرگر/ساعت/کاربر) را در همان عرضِ مشخص و واقعی پخش می‌کند. */
@media (min-width: 621px) and (max-width: 991px) and (orientation: landscape){
  html.tbmv2-on #tb-root.tb-home-mode .tb-meta-block{
    flex: 1 1 auto;
  }
  html.tbmv2-on #tb-root.tb-home-mode .tb-meta-time-row{
    width: 100%;
    justify-content: space-between;
  }
}

/* موردِ ۱: نوارِ عنوانِ صفحه — بالاترین المانِ داخلِ tb-root، فقط موبایل + tbmv2-on.
   قدمِ ۲۳۰ — طبقِ توضیحِ صریحِ حبیب: این نوار حالا تنها محلِ نمایشِ «نامِ صفحه + همبرگرِ
   سمتِ راست» است؛ چیزِ دیگری (بجِ تست/حالتِ مدیر/...) اجازه‌ی نشستن در همین نوار را ندارد. */
.tbmv2-page-title-bar{ display: none; }
/* قدمِ ۲۹۱ (طبقِ گزارشِ صریحِ حبیب — «کلمه‌ی تقویم اقتصادی بالای صفحه را وسط بگذار»): چیدمانِ
   قبلی flex+order، عنوان را در فضایِ باقی‌مانده (کنارِ دو دکمه، نه بینِ آن‌ها) می‌نشاند، پس
   با هر عرضِ صفحه دقیقاً وسط نمی‌افتاد. با گرید سه‌ستونیِ ثابت (۴۰px/۱fr/۴۰px) عنوان همیشه
   دقیقاً وسطِ نوار می‌نشیند، صرف‌نظر از عرض/جهت — چون دو دکمه هم‌اندازه (۴۰px) دو طرفش‌اند.
   عوارضِ جانبی: دکمه‌ی همبرگر که قبلاً وسط بود، حالا کنارِ دکمه‌ی بازگشت (سمتِ چپ) نشسته —
   عملکردش کاملاً دست‌نخورده، فقط موقعیتش عوض شده تا جایِ وسط برایِ عنوان آزاد شود. */
/* قدمِ ۲۹۸ (طبقِ گزارشِ مجددِ حبیب — موردِ ۶: «کلمه‌ی تقویم اقتصادی باید در راستایِ همبرگر
   باشد»): چیدمانِ گریدِ سه‌ستونیِ قدمِ ۲۹۱ عنوان را کاملاً مستقل از دو دکمه، وسطِ نوار
   می‌نشاند — دقیقاً همان چیزی که الان دوباره به‌عنوانِ ایراد گزارش شده (عنوان از همبرگر
   فاصله دارد). ترتیبِ DOM از قبل هم‌ان‌ترتیبی‌ست که لازم است (بازگشت، همبرگر، عنوان)، پس
   با flex ساده (بدونِ grid-column/order دستی) و بدونِ تغییرِ HTML، عنوان بلافاصله کنارِ
   همبرگر می‌نشیند و باقیِ فضا را به‌سمتِ لبه‌ی مقابل پر می‌کند. */
html.tbmv2-on .tbmv2-page-title-bar{
  display: flex; align-items: center; gap: 8px;
  background: #fff; border-bottom: 1px solid #eceff3; padding: 6px 10px;
  font-size: 13.5px; font-weight: 800; color: #0d1b2e;
}
.tbmv2-page-title-text{ flex: 1 1 auto; text-align: right; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tbmv2-toggle.tbmv2-toggle-inbar{ flex-shrink: 0; }
.tbmv2-page-title-back{ flex-shrink: 0; }
@media (min-width: 992px){ .tbmv2-page-title-bar{ display: none !important; } }
/* همبرگرِ داخلِ همین نوار، کوچک‌تر از حالتِ قبلیِ ۶۴px (که برایِ ردیفِ ساعت/تاریخ طراحی شده
   بود) — اندازه‌ای متناسب با ارتفاعِ نوارِ باریکِ عنوان. */
.tbmv2-toggle.tbmv2-toggle-inbar{ width: 40px; height: 40px; font-size: 22px; flex-shrink: 0; }
/* قدمِ ۲۳۶ — دکمهٔ «بازگشت به صفحهٔ قبل»: هم‌الگو/هم‌اندازه با همبرگرِ همین نوار.
   آیکون یک فلشِ نیم‌دایره‌ای است (ti-arrow-back-up)، با scaleX(-1) آینه شده تا نوکِ
   فلش به‌جایِ چپ، به سمتِ راست نمایش داده شود — طبقِ درخواستِ صریحِ حبیب. */
.tbmv2-page-title-back{ width: 40px; height: 40px; flex-shrink: 0; border: none; background: transparent; display: flex; align-items: center; justify-content: center; border-radius: 8px; cursor: pointer; color: #0d1b2e; padding: 0; }
.tbmv2-page-title-back:active{ background: #f0f3f7; }
.tbmv2-page-title-back-ic{ font-size: 22px; display: inline-block; transform: scaleX(-1); }
/* قدمِ ۲۳۱ — طبقِ گزارشِ صریحِ حبیب («در همه‌ی صفحات فقط خودِ صفحه؛ لوگو/نام/شبکه‌های
   اجتماعی فقط در صفحه‌ی خانه و فوتر»): در حالتِ موبایلِ tbmv2-on، کلِ بلوکِ لوگو/عنوانِ
   آکادمی/شبکه‌های‌اجتماعی/ساعت (#tbHeaderRow) در همه‌ی صفحات به‌جز خانه کاملاً مخفی می‌شود —
   تنها چیزی که می‌ماند همین نوارِ باریکِ بالا (عنوانِ صفحه + همبرگر) است. در صفحه‌ی خانه
   برعکس: #tbHeaderRow کامل می‌ماند، اما همین نوارِ باریک (چون در این صفحه دیگر رندر نمی‌شود
   — نگاه کنید به header.php) با این قاعده صرفاً برایِ اطمینان مخفی نگه داشته می‌شود. */
@media (max-width: 991px){
  html.tbmv2-on #tb-root:not(.tb-home-mode) .tb-header-row{ display: none !important; }
  html.tbmv2-on #tb-root.tb-home-mode .tbmv2-page-title-bar{ display: none !important; }
}
/* قدمِ ۲۳۱ (تاریخچه) — جفتِ همبرگر+کاربرِ مخصوصِ صفحه‌ی خانه، هم‌اندازه/قرینه شدند.
   قدمِ ۲۳۳ — طبقِ گزارشِ صریحِ حبیب («این دو پرکلیک‌ترین دکمه‌ی صفحه‌اند، ۱۰٪ بزرگ‌تر و
   نزدیکِ لبه‌های کناری»): wrapperِ .tbmv2-home-actions حذف شد (چیدمان حالا با
   justify-content:space-between رویِ خودِ .tb-meta-time-row انجام می‌شود — نگاه کنید به
   بالاتر). سایز از ۶۴px به ۷۰px (۱۰٪+) رسید، برایِ هر دو دکمه. */
.tbmv2-toggle.tbmv2-toggle-home,
.tbmv2-user-wrap .tbmv2-user-btn{ width: 70px; height: 70px; font-size: 33px; }
/* قدمِ ۲۲۴ — دکمه‌ی «کاربر» اکنون داخلِ یک wrapperِ نسبی است تا پنلِ ورود/ثبت‌نامِ
   زیرش (tbmv2-user-panel) نسبت به همین دکمه جایگذاری شود، هم‌الگو با
   tb-auth-mobile-wrap یِ موجود در نوارِ دسکتاپ. */
.tbmv2-user-wrap{ position: relative; }
/* v229 — طبقِ گزارشِ صریحِ حبیب («دو گزینه ورود/ثبت‌نام بی‌نظم روی صفحه می‌افتند»): عرضِ دو
   دکمه اکنون برابر و کاملِ عرضِ پنل است (قبلاً هرکدام به‌اندازه‌ی متنِ خودشان عرض داشتند،
   پس کنارِ هم نامنظم/چپ‌چین به‌نظر می‌رسیدند)؛ پنل هم عرضِ ثابتِ بزرگ‌تر گرفت تا هر دو دکمه
   جا شوند بدونِ فشرده‌شدنِ متن. */
/* قدمِ ۲۳۰ — بازطراحیِ حرفه‌ای‌ترِ پنل: عرضِ بیشتر، سربرگِ کوچک، بجِ آیکونِ رنگی، جداکننده،
   انیمیشنِ ورودِ نرم (هم‌الگو با tbModalIn مودالِ ثبت‌نام). */
.tbmv2-user-panel{
  display: none; position: absolute; top: calc(100% + 10px); left: 0; width: 216px;
  background: #fff; border: 1px solid #e9ecf1; border-radius: 14px; box-shadow: 0 12px 32px rgba(15,32,60,.18);
  padding: 8px; flex-direction: column; z-index: 10000; overflow: hidden;
}
.tbmv2-user-wrap.tbmv2-user-open .tbmv2-user-panel{ display: flex; animation: tbmv2UserPanelIn .18s ease; }
@keyframes tbmv2UserPanelIn{ from{ opacity: 0; transform: translateY(-6px) scale(.97); } to{ opacity: 1; transform: translateY(0) scale(1); } }
.tbmv2-user-panel-head{
  font-size: 10.5px; font-weight: 800; color: #98a3b3; padding: 4px 8px 8px; letter-spacing: .2px;
}
.tbmv2-user-panel-sep{ height: 1px; background: #eef1f5; margin: 5px 2px; flex-shrink: 0; }
.tbmv2-user-panel-btn{
  display: flex; align-items: center; gap: 10px; border: none; border-radius: 10px; padding: 8px;
  font-family: inherit; cursor: pointer; white-space: nowrap; text-align: right; direction: rtl;
  width: 100%; box-sizing: border-box; justify-content: flex-start; background: transparent;
  transition: background .15s ease;
}
.tbmv2-user-panel-ic{
  display: flex; align-items: center; justify-content: center; flex-shrink: 0;
  width: 34px; height: 34px; border-radius: 10px; font-size: 16px;
}
.tbmv2-user-panel-txt{ display: flex; flex-direction: column; gap: 1px; align-items: flex-start; }
.tbmv2-user-panel-txt small{ font-size: 10px; font-weight: 600; opacity: .68; }
.tbmv2-user-panel-ghost{ color: #0F3D73; }
.tbmv2-user-panel-ghost:hover, .tbmv2-user-panel-ghost:active{ background: #f0f4f8; }
.tbmv2-user-panel-ghost .tbmv2-user-panel-ic{ background: #e7eef8; color: #0F3D73; }
.tbmv2-user-panel-ghost .tbmv2-user-panel-txt{ font-size: 12.5px; font-weight: 800; }
.tbmv2-user-panel-cta{ color: #0d1b2e; }
.tbmv2-user-panel-cta:hover, .tbmv2-user-panel-cta:active{ background: #fdeeee; }
.tbmv2-user-panel-cta .tbmv2-user-panel-ic{ background: #C0282D; color: #fff; }
.tbmv2-user-panel-cta .tbmv2-user-panel-txt{ font-size: 12.5px; font-weight: 800; color: #C0282D; }
.tbmv2-user-panel-cta .tbmv2-user-panel-txt small{ color: #0d1b2e; }
.tbmv2-backdrop{
  display: none; position: fixed; inset: 0; background: rgba(10,14,20,.55); z-index: 9997;
  opacity: 0; transition: opacity .25s ease;
}
html.tbmv2-on .tbmv2-backdrop.tbmv2-open{ display: block; opacity: 1; }
.tbmv2-drawer{
  position: fixed; top: 0; bottom: 0; right: 0; width: 82%; max-width: 340px; z-index: 9999;
  background: #f2f4f7; transform: translateX(100%); transition: transform .3s cubic-bezier(.16,1,.3,1);
  overflow-y: auto; box-shadow: -8px 0 30px rgba(0,0,0,.25); direction: rtl;
}
html.tbmv2-on .tbmv2-drawer.tbmv2-open{ transform: translateX(0); }
@media (min-width: 992px){ .tbmv2-drawer, .tbmv2-backdrop{ display: none !important; } }
/* قدمِ ۲۲۵ (طبقِ درخواستِ صریحِ حبیب — پسِ‌گیریِ کاملِ «هدرِ چسبان»یِ قدمِ ۲۲۴): حبیب گزارش
   داد هدرِ چسبان باعث شد صفحه‌یِ سایت مثلِ زیرِ یک «پل» بالا/پایین برود و فضایِ صفحات را
   بگیرد. تصمیم: ایده‌ی هدرِ چسبان کاملاً کنار گذاشته شد — .tb-header-row به رفتارِ عادیِ
   قبلی (بدونِ position:sticky) برگشت، و offsetِ #tb-sticky-zone.tb-pinned هم به همان
   top:0 یِ اصلیِ خودش (تعریف‌شده در قاعده‌ی اصلی‌اش، بالاتر در همین فایل) برگشت — یعنی
   نوارِ چرخانِ قیمت (تیکر) دقیقاً همان رفتارِ قدیمی/تأییدشده‌ی خودش را دارد، طبقِ تأکیدِ
   صریحِ «نوارِ چرخان تغییر نکنه». درویر/بک‌دراپ همچنان از زیرِ ارتفاعِ هدر شروع می‌شوند
   (این بخش drop نشد چون به «چسبان‌بودن» ربطی ندارد، فقط محلِ visualِ بازشدنِ درویر است). */
@media (max-width: 991px){
  /* v229 — طبقِ درخواستِ صریحِ حبیب: درویر باید از بالاترین نقطه‌ی هدرِ صفحه باز شود، نه از
     زیرِ نوارِ چرخان/هدر (تلاشِ قبلیِ قدمِ ۲۲۶، که بالاتر در .tbmv2-drawer پایه top:0 هم
     همین بود، اما این قاعده‌ی موبایل آن را override کرده و به ارتفاعِ محاسبه‌شده‌یِ JS
     می‌فرستاد). اسکریپتِ اندازه‌گیریِ --tb-drawer-top/--tb-header-h در header.php حذف شد؛
     این دو خط دیگر آن متغیرها را مصرف نمی‌کنند و درویر/بک‌دراپ همیشه از top:0 (که در
     قاعده‌ی پایه‌یِ .tbmv2-drawer/.tbmv2-backdrop تعریف شده) باز می‌شوند. */
  /* قدمِ ۲۲۵ — طبقِ لیستِ کاملِ درخواست‌هایِ حبیب: این عناصر فقط از دیدِ موبایل پنهان
     می‌شوند (بدونِ حذفِ markup، پس دسکتاپ صفر تغییر می‌کند و چیزی در DOM از دست نمی‌رود):
     نوارِ منو+کاشی‌هایِ سکتور (که pin شدنِ #tb-sticky-zone فقط برایِ همین بخش بود؛ خودِ
     تیکر که همسایه‌اش داخلِ همان #tb-sticky-zone است دست‌نخورده و نمایان می‌ماند)، نوارِ
     جست‌وجو، و خطِ رنگیِ زیرِ نامِ آکادمی. */
  html.tbmv2-on .tb-nav-row{ display: none; }
  html.tbmv2-on .tb-search-block{ display: none; }
  html.tbmv2-on .tb-sector-badge-strip{ display: none; }
  /* قدمِ ۲۲۵ — «حالتِ مدیر (پیش‌نمایش)» طبقِ درخواستِ حبیب هم در موبایل هم دسکتاپ پنهان
     شد (قاعده‌ی جداگانه‌ی سراسری پایین‌تر در همین فایل، بدونِ گیت‌شدن به tbmv2-on/۹۹۱px،
     چون باید هر دو نسخه را بگیرد). */
  /* قدمِ ۲۲۵ — سایزِ لوگو/کلمه‌ی «آکادمی تجارت برتر» ≈۳۰٪ کوچک‌تر (فقط عرض/ارتفاعِ نمایشی؛
     خودِ فایلِ تصویر دست‌نخورده می‌ماند، پس افتِ کیفیت رخ نمی‌دهد). */
  html.tbmv2-on .tb-logo-box{ width: 51px; height: 51px; }
  html.tbmv2-on #tbAcademyTitleImg{ height: 48px !important; }
}
/* قدمِ ۲۲۴ (طبقِ درخواستِ صریحِ حبیب): رنگِ سربرگِ درویر قبلاً گرادیانِ نیوی‌ای بود که با
   هدرِ واقعیِ سایت (سفید، #tb-root{background:#fff}) هیچ هم‌خوانی نداشت — دقیقاً همان
   ناهماهنگیِ گزارش‌شده. اکنون سفید، هم‌رنگِ خودِ #tb-header-row، با یک خطِ جداکننده‌ی
   ظریف به‌جایِ سایه‌ی تیره؛ رنگِ متن/آیکون‌ها هم متناسب با زمینه‌ی روشن تیره شدند. */
.tbmv2-drawer-head{ background: #fff; color: #0d1b2e; padding: 18px 16px 14px; border-bottom: 1px solid #eceff3; }
.tbmv2-drawer-head-top{ display: flex; align-items: center; justify-content: space-between; }
.tbmv2-drawer-brand{ display: flex; align-items: center; gap: 8px; font-weight: 700; font-size: 15px; color: #0d1b2e; text-decoration: none; }
/* v229 — لوگویِ واقعی (به‌جایِ بجِ متنیِ TB قدیمی)، اندازه‌ی کوچک همان‌طور که خواسته شد */
.tbmv2-drawer-logo-img{ width: 28px; height: 28px; object-fit: contain; flex-shrink: 0; }
.tbmv2-drawer-close{ background: #f0f4f8; border: none; color: #0d1b2e; width: 30px; height: 30px; border-radius: 50%; font-size: 15px; cursor: pointer; }
.tbmv2-drawer-user{ display: flex; align-items: center; gap: 9px; margin-top: 14px; background: #f5f7fa; border-radius: 12px; padding: 9px 11px; text-decoration: none; cursor: pointer; }
.tbmv2-drawer-user-avatar{ width: 34px; height: 34px; border-radius: 50%; background: #1789C2; color:#fff; display: flex; align-items: center; justify-content: center; font-weight: 700; font-size: 14px; flex: none; }
.tbmv2-drawer-user-name{ font-size: 12.5px; font-weight: 600; color: #0d1b2e; }
.tbmv2-drawer-body{ padding: 10px 12px 90px; }
.tbmv2-section-label{ font-size: 11.5px; font-weight: 700; color: #9498a1; margin: 14px 4px 8px; }
.tbmv2-section-label:first-child{ margin-top: 4px; }
.tbmv2-tile{
  display: flex; align-items: center; gap: 10px; width: 100%; background: #fff; border: 1px solid #e6e8ec;
  border-radius: 12px; padding: 12px 13px; margin-bottom: 8px; font-family: inherit; font-size: 13.5px;
  font-weight: 600; color: #151a23; text-decoration: none;
}
.tbmv2-tile .tbmv2-ic{ font-size: 17px; flex: none; }

/* v221 (مرحله‌ی ۲) — آکاردئونِ ۱۱ کاشیِ «همه‌ی حوزه‌ها». باکسِ بیرونی فقط برایِ
   گروه‌بندیِ سربرگ+زیرمنو است (بدونِ marginِ خودش، چون خودِ سربرگ کلاسِ tbmv2-tile
   را دارد و marginِ پایینِ خودش را از همان‌جا می‌گیرد). */
.tbmv2-sector-acc{ margin-bottom: 8px; }
.tbmv2-sector-acc .tbmv2-tile{ margin-bottom: 0; width: 100%; border: 1px solid #e6e8ec; cursor: pointer; }
.tbmv2-sector-head{ justify-content: flex-start; }
.tbmv2-sector-head span:nth-child(2){ flex: 1; text-align: right; }
.tbmv2-sector-chev{ font-size: 13px; color: #9498a1; transition: transform .25s ease; flex: none; }
.tbmv2-sector-acc.tbmv2-acc-open .tbmv2-tile{ border-bottom-left-radius: 0; border-bottom-right-radius: 0; border-color: #1789C2; }
.tbmv2-sector-acc.tbmv2-acc-open .tbmv2-sector-chev{ transform: rotate(180deg); color: #1789C2; }
/* max-height (نه display:none) برای انیمیشنِ نرمِ باز/بسته‌شدن؛ عددِ ۴۰۰px برایِ ۷ آیتمِ
   حداکثری (حالتِ سکتورهایی مثلِ فارکس/بورس با همه‌ی caps فعال) کافی است. */
.tbmv2-subpanel{
  max-height: 0; overflow: hidden; border: 1px solid #e6e8ec; border-top: none;
  border-bottom-left-radius: 12px; border-bottom-right-radius: 12px; background: #fafbfc;
  transition: max-height .3s ease;
}
.tbmv2-sector-acc.tbmv2-acc-open .tbmv2-subpanel{ max-height: 420px; border-color: #1789C2; }
.tbmv2-subtile{
  display: flex; align-items: center; gap: 9px; padding: 10px 14px; font-size: 12.5px; font-weight: 600;
  color: #3c4450; text-decoration: none; border-top: 1px solid #eef0f3;
}
.tbmv2-subtile:first-child{ border-top: none; }
.tbmv2-subtile i{ font-size: 14px; color: #1789C2; flex: none; }
/* قدمِ ۲۲۶ — موردِ ۶: علامتِ فلش برایِ «مدرسه/خدمات/ابزار» — فقط نشانه‌ی «محتوایِ بیشتر
   در یک صفحه‌ی مستقل» است؛ خودِ لینک از قبل مستقیم ناوبری می‌کند (بدونِ بازشدنِ زیرمنویِ
   درجا، برخلافِ آکاردئونِ ۱۱ کاشیِ سکتور) — پس هیچ رفتارِ کلیکِ جدیدی لازم نیست. */
.tbmv2-subtile-has-more span{ flex: 1; }
.tbmv2-subtile-chev{ font-size: 13px !important; color: #9498a1 !important; }

.tbmv2-final{ margin-top: 14px; border-top: 1px solid #e6e8ec; padding-top: 10px; }
.tbmv2-final-item{
  display: flex; align-items: center; gap: 10px; width: 100%; background: transparent; border: none;
  padding: 11px 8px; font-family: inherit; font-size: 13px; font-weight: 600; color: #1789C2;
  text-decoration: none; cursor: pointer; text-align: right;
}

/* ===== قدمِ ۲۴۴ — اصلاحِ چیدمانِ فرمِ ورودِ کاربرِ عمومی (publicGateScreen):
   فضایِ خالیِ بالا/پنهان‌شدنِ پایینِ فرم، راست‌چین‌کردنِ یکدستِ placeholderها،
   جدا‌کردنِ ستاره‌یِ الزامیِ فیلدِ «شماره تماس» به‌عنوانِ نشانه‌یِ مستقل در چپ،
   و هم‌ردیف‌کردنِ «نام» و «نام‌خانوادگی» ===== */

/* هر دو فیلدِ نام/نام‌خانوادگی در یک ردیف، کنارِ هم */
#tbMessengerRoot #publicGateScreen .pg-row{display:flex;gap:8px;margin-bottom:10px;}
#tbMessengerRoot #publicGateScreen .pg-row .pg-field{flex:1;min-width:0;margin-bottom:0;}

/* راست‌چین‌کردنِ یکدستِ متنِ داخلِ همه‌یِ فیلدها، مستقل از نوعِ input (رفعِ رفتارِ
   نامتقارنِ فیلدِ tel/email که باعثِ جابه‌جاییِ محلِ ستاره می‌شد) */
#tbMessengerRoot #publicGateScreen .pg-input{direction:rtl;text-align:right;}

/* ستاره‌یِ الزامیِ فیلدِ «شماره تماس» به‌صورتِ نشانه‌یِ مستقل در سمتِ چپِ کادر
   (متقارن با آیکون که در سمتِ راست است)، متنِ placeholder فقط برچسبِ ساده است */
#tbMessengerRoot #publicGateScreen .pg-field{position:relative;}
#tbMessengerRoot #publicGateScreen .pg-required{
    position:absolute;left:13px;top:50%;transform:translateY(-50%);
    color:var(--danger);font-size:0.9rem;font-weight:700;pointer-events:none;
}
#tbMessengerRoot #publicGateScreen input#pgPhone.pg-input{padding-left:26px;}

/* جمع‌وجورکردنِ چیدمانِ عمودی: بدونِ فضایِ خالیِ بزرگِ بالا، بدونِ پنهان‌شدنِ
   پایینِ فرم — آیکونِ قفل کوچک‌تر و جمع‌تر، شروعِ چیدمان از بالا به‌جایِ
   وسط‌چین‌کردن، و اسکرولِ داخلی به‌عنوانِ تضمین برایِ صفحه‌هایِ کوچک */
#tbMessengerRoot #publicGateScreen{
    justify-content:flex-start;overflow-y:auto;padding:18px 22px 16px;
}
#tbMessengerRoot #publicGateScreen .welcome-icon{
    width:50px;height:50px;font-size:1.25rem;margin-bottom:8px;
}
#tbMessengerRoot #publicGateScreen h2{margin-bottom:4px;}
#tbMessengerRoot #publicGateScreen p{margin-bottom:0;}
#tbMessengerRoot #publicGateScreen .pg-card{margin-top:14px;padding:18px 16px;}

/* ==================== قدمِ ۳۴۳ — محتوایِ ویدیویی فریلنسرها + صفحه‌ی «فیلم‌های آموزشی» ==================== */
/* Embedِ ریسپانسیوِ ویدیو (آپارات/یوتیوب) — نسبتِ تصویرِ ۱۶:۹ با تکنیکِ پدینگِ کلاسیک */
.tb-video-embed-wrap{position:relative;width:100%;padding-top:56.25%;background:#0b1622;border-radius:12px;overflow:hidden;}
.tb-video-embed-wrap iframe{position:absolute;inset:0;width:100%;height:100%;border:0;}
.tb-video-embed-fallback{display:flex;align-items:center;justify-content:center;gap:6px;width:100%;min-height:160px;background:linear-gradient(135deg,#0F3D73,#17325C 55%,#1789C2);color:#fff;border-radius:12px;text-decoration:none;font-weight:700;font-size:13px;transition:opacity .15s ease;}
.tb-video-embed-fallback:hover{opacity:.88;}

/* فرمِ ثبتِ ویدیو در پنلِ فریلنسر */
#tbEdVideoFields{border-top:1px dashed #dfe4ea;margin-top:4px;padding-top:10px;}

/* صفحه‌ی عمومیِ «فیلم‌های آموزشی» */
.tb-rv-wrap{max-width:1180px;margin:0 auto;padding:18px 14px 40px;}
.tb-rv-title{font-size:17px;font-weight:800;color:#0F3D73;margin:0 0 6px;}
.tb-rv-breadcrumb{font-size:12px;color:#7a8494;margin-bottom:14px;}
.tb-rv-breadcrumb a{color:#7a8494;text-decoration:underline;}
.tb-rv-filterbar{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:18px;}
.tb-rv-filter-chip{display:inline-block;padding:6px 14px;border-radius:999px;border:1.5px solid #dfe4ea;color:#3a4553;font-size:12.5px;font-weight:600;text-decoration:none;transition:all .15s ease;}
.tb-rv-filter-chip:hover{border-color:#1789C2;color:#1789C2;}
.tb-rv-filter-chip.active{background:#0F3D73;border-color:#0F3D73;color:#fff;}
.tb-rv-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:18px;}
.tb-rv-card{background:#fff;border:1px solid #eef1f5;border-radius:14px;overflow:hidden;box-shadow:0 1px 3px rgba(15,61,115,.06);display:flex;flex-direction:column;}
.tb-rv-card-body{padding:12px 14px 16px;}
.tb-rv-card-platform{display:inline-block;font-size:10.5px;font-weight:700;color:#1789C2;background:#eaf6fc;border-radius:6px;padding:2px 8px;margin-bottom:8px;}
.tb-rv-card-title{font-size:13.5px;font-weight:800;color:#0F3D73;margin:0 0 6px;line-height:1.6;}
.tb-rv-card-desc{font-size:12px;color:#5b6472;margin:0 0 10px;line-height:1.7;}
.tb-rv-card-course-link{display:inline-block;font-size:11.5px;font-weight:700;color:#1F7A3D;text-decoration:none;border-top:1px dashed #eef1f5;padding-top:8px;width:100%;}
.tb-rv-card-course-link:hover{text-decoration:underline;}
@media (max-width:600px){
  .tb-rv-grid{grid-template-columns:1fr;}
}

/* قدمِ ۴۸۰ — لیستِ «اخبارِ اخیر» و صفحهٔ آرشیوِ اخبارِ زنده */
a.tb-news-archive-btn{display:inline-block;text-decoration:none;}
.tb-news-recent-section{margin-top:22px;}
.tb-news-recent-badge{background:#64748B;}
.tb-news-recent-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px;}
.tb-news-recent-item{padding:9px 12px;background:#fff;border:1px solid #E2E8F0;border-radius:9px;}
.tb-news-recent-item a{font-size:13.5px;font-weight:700;color:#0F3D73;text-decoration:none;line-height:1.8;}
.tb-news-recent-item a:hover{text-decoration:underline;}
.tb-news-recent-chip{background:#EAF3FB;color:#1789C2;font-weight:700;padding:1px 8px;border-radius:20px;}
.tb-news-archive-filter{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-end;margin:12px 0;padding:12px;background:#fafbfc;border:1px solid #E2E8F0;border-radius:10px;}
.tb-news-archive-filter label{display:flex;flex-direction:column;gap:4px;font-size:12px;color:#475569;}
.tb-news-archive-filter select,.tb-news-archive-filter input[type=date]{padding:7px 9px;border:1px solid #CBD5E1;border-radius:8px;font-family:inherit;font-size:13px;background:#fff;}
.tb-news-archive-filter-btn{padding:9px 22px;}
.tb-news-archive-pager{display:flex;flex-wrap:wrap;gap:6px;justify-content:center;margin:16px 0;}
.tb-news-archive-pager .page-numbers{padding:6px 12px;border:1px solid #CBD5E1;border-radius:8px;text-decoration:none;color:#0F3D73;font-size:13px;}
.tb-news-archive-pager .page-numbers.current{background:#0F3D73;color:#fff;border-color:#0F3D73;}


/* قدمِ ۴۸۴ — اخبارِ زنده هم‌ساختارِ اخبارِ سایت (خبرِ اصلی + کارت‌ها) و صفحهٔ داخلیِ خبر */
.tb-live-featured{margin-bottom:22px;padding-bottom:20px;}
.tb-live-featured h2 a,.tb-live-card{color:inherit;text-decoration:none;}
.tb-live-featured h2 a:hover{color:#C0282D;}
.tb-live-media-link{display:block;order:1;}
.tb-live-media-link .tb-news-featured-img{height:100%;}
.tb-live-card{display:block;}
.tb-live-grid{margin-bottom:6px;}
.tb-live-article{max-width:820px;margin:8px auto 30px;}
.tb-live-article-title{font-size:24px;line-height:1.7;color:#111827;margin:6px 0 10px;}
/* قدمِ ۵۱۸ — عکسِ صفحهٔ داخلیِ خبر یک‌سوم کوچک‌تر (ارتفاع ۳۰۰←۲۰۰، عرض ≈۶۷٪) تا موضوعِ خبر به چشم بیاید. */
.tb-live-article-img{min-height:200px;width:67%;max-width:100%;margin:16px 0 18px;order:0;}
/* قدمِ ۴۸۸ — بدونِ عکسِ واقعی (فقط گرادیان+آیکون): ارتفاعِ کوچک‌تر تا کلِ صفحه را اشغال نکند. */
.tb-live-article-img--noimg{min-height:110px;}
.tb-live-article-img--noimg .tb-card-fallback i{font-size:28px;}
.tb-live-article-body{font-size:15px;line-height:2.1;color:#334155;margin:0 0 20px;}
.tb-live-article-src{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px;padding:14px 16px;background:#F7FAFC;border:1px solid #E2E8F0;border-radius:10px;font-size:13px;color:#5b6b7c;}
@media (max-width:720px){.tb-live-article-title{font-size:19px;}.tb-live-article-img{min-height:134px;width:100%;}}

.tb-live-article-diag{font-size:11px;color:#98a4b0;margin:-8px 0 16px;direction:rtl;}

/* قدمِ ۴۸۶ — «ادامهٔ خبر»، خلاصهٔ چندخطیِ کارت، پاراگراف‌هایِ مقاله، اخبارِ مرتبط */
.tb-live-more{display:inline-block;margin:2px 0 10px;font-size:12px;font-weight:700;color:#1789C2;text-decoration:none;}
.tb-live-more:hover{color:#C0282D;}
.tb-live-card .tb-news-card-excerpt{-webkit-line-clamp:4;}
.tb-live-featured .tb-news-featured-text p{margin-bottom:6px;}
.tb-live-article-lead{font-weight:700;color:#1a2733;font-size:16px;}
.tb-live-article-credit{font-size:11.5px;color:#98a4b0;margin:6px 0 24px;}
/* قدمِ ۵۱۸ — آدرسِ منبع: کوچک، گوشهٔ پایین */
.tb-live-article-srcurl{font-size:10.5px;color:#a3aeb9;margin:-16px 0 22px;text-align:left;direction:ltr;}
.tb-live-article-srcurl a{color:inherit;text-decoration:none;}
.tb-live-article-srcurl a:hover{text-decoration:underline;}
.tb-live-official-badge{display:inline-flex;align-items:center;background:#E7F6EC;color:#1E7D3C;font-size:10.5px;font-weight:700;padding:2px 8px;border-radius:5px;margin-right:6px;}
.tb-live-explainer{max-width:820px;margin:0 auto 26px;padding:18px 20px;background:#F7FAFC;border:1px solid #E2E8F0;border-radius:12px;}
.tb-live-explainer-badge{display:inline-flex;align-items:center;background:#0F3D73;color:#fff;font-size:11px;font-weight:700;padding:4px 11px;border-radius:5px;margin-bottom:10px;width:fit-content;}
.tb-live-explainer h2{font-size:16px;color:#111827;margin:2px 0 10px;}
.tb-live-explainer p{font-size:14px;line-height:2;color:#334155;margin:0 0 8px;}
.tb-live-explainer-note{font-size:11px;color:#98a4b0;margin:8px 0 0;}
.tb-live-related{max-width:820px;margin:0 auto 34px;padding-top:16px;border-top:2px solid #eef1f5;}
.tb-live-related h2{font-size:15px;color:#0F3D73;margin:0 0 10px;}
.tb-live-related ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:9px;}
.tb-live-related a{color:#1a2733;text-decoration:none;font-size:13.5px;line-height:1.8;font-weight:600;}
.tb-live-related a:hover{color:#C0282D;}
.tb-live-related time{display:block;font-size:11px;color:#98a4b0;}

/* ==================== قدمِ ۴۸۹ — صفحهٔ اخبارِ یکپارچه (چیدمانِ استانداردِ خبری) ====================
   کلاس‌هایِ tb-nw-* اختصاصیِ صفحهٔ اخبار است؛ عمداً از tb-news-* (که خدمات/تحلیل‌ها هم استفاده می‌کنند) جدا شد. */
.tb-nw{max-width:1180px;margin:0 auto;}
.tb-nw-head{display:flex;align-items:flex-end;justify-content:space-between;gap:14px;flex-wrap:wrap;margin:4px 0 22px;padding-bottom:14px;border-bottom:3px solid #0F3D73;}
.tb-nw-crumbs{display:flex;align-items:center;flex-wrap:wrap;gap:6px;font-size:12px;color:#8794a1;margin-bottom:8px;}
.tb-nw-crumbs a{color:#0F3D73;text-decoration:none;font-weight:700;}
.tb-nw-crumbs a:hover{color:#C0282D;}
.tb-nw-head h1{font-size:28px;line-height:1.5;font-weight:800;color:#0F3D73;margin:0 0 4px;}
.tb-nw-sub{font-size:13px;color:#64748B;margin:0;line-height:1.8;}
.tb-nw-archive-link{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-weight:700;color:#0F3D73;text-decoration:none;padding:8px 16px;border:1.5px solid #bfe3fb;border-radius:999px;background:#f4faff;white-space:nowrap;}
.tb-nw-archive-link:hover{background:#0F3D73;color:#fff;border-color:#0F3D73;}

.tb-nw-lead{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);gap:26px;align-items:center;margin-bottom:30px;padding-bottom:28px;border-bottom:1px solid #e6ebf1;}
.tb-nw-lead.tb-nw-noimg{grid-template-columns:1fr;}
.tb-nw-lead .tb-nw-imgbox{border-radius:12px;}
.tb-nw-lead-text{display:flex;flex-direction:column;align-items:flex-start;min-width:0;}
.tb-nw-tag{display:inline-flex;align-items:center;background:#C0282D;color:#fff;font-size:11px;font-weight:700;padding:4px 12px;border-radius:5px;margin-bottom:12px;}
.tb-nw-lead h2{font-size:24px;line-height:1.75;font-weight:800;color:#111827;margin:0 0 12px;}
.tb-nw-lead h2 a,.tb-nw-card h3 a,.tb-nw-row h3 a{color:inherit;text-decoration:none;}
.tb-nw-lead h2 a:hover,.tb-nw-card h3 a:hover,.tb-nw-row h3 a:hover{color:#C0282D;}
.tb-nw-lead p{font-size:14.5px;line-height:2.05;color:#4b5b6b;margin:0 0 10px;display:-webkit-box;-webkit-line-clamp:5;-webkit-box-orient:vertical;overflow:hidden;}
.tb-nw-more{font-size:12.5px;font-weight:700;color:#1789C2;text-decoration:none;margin:0 0 12px;}
.tb-nw-more:hover{color:#C0282D;}

.tb-nw-imgbox{display:block;position:relative;overflow:hidden;aspect-ratio:16/10;border-radius:10px;background:#e8eef5;}
.tb-nw-imgbox img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;}
.tb-nw-media{display:block;text-decoration:none;}
.tb-nw-card .tb-nw-imgbox::after,.tb-nw-row .tb-nw-imgbox::after{width:22px;height:22px;top:6px;left:6px;}

.tb-nw-section{margin:0 0 30px;}
.tb-nw-section-title{font-size:17px;font-weight:800;color:#0F3D73;margin:0 0 16px;padding-right:10px;border-right:4px solid #C0282D;line-height:1.4;}
/* قدمِ ۵۲۳ — ستون‌هایِ ثابت (۴ تا) به‌جایِ auto-fit: با auto-fit وقتی فقط ۱ یا ۲ کارتِ عکس‌دار بود ستون‌هایِ خالی جمع می‌شد
   و همان یک کارت کلِ عرضِ صفحه را می‌گرفت (عکسِ غول‌پیکر).
   قدمِ ۵۲۴ — repeat(4,…) ثابت خودش یک باگِ تازه ساخت: وقتی فقط ۱-۲ کارت بود (مثلِ «امور اداری»)، همان کارت‌ها
   در یک شبکهٔ همیشه-۴-ستونه بسیار کوچک به‌نظر می‌رسیدند (ریاضیِ ۱fr: عرضِ هر ستون = عرضِ کانتینر/۴، فارغ از
   تعدادِ کارتِ واقعی). اکنون تعدادِ ستون‌ها با متغیرِ CSSِ --tb-nwc (از PHP، تعدادِ واقعیِ کارت‌ها) محدود به
   min(تعداد,۴) می‌شود و عرضِ هر ستون به‌جایِ «1fr»یِ کشسان یک سقفِ ثابتِ پیکسلی دارد؛ یعنی با ۱ کارت هم اندازه‌اش
   دقیقاً هم‌اندازهٔ یک کارتِ صفحهٔ «فناوری اطلاعات» می‌ماند (نه غول‌پیکر، نه کوچک)، و با ۵ تا ۸ کارت (سقفِ جدیدِ
   قدمِ ۵۲۴) به‌طورِ خودکار به ردیفِ دوم می‌رود. */
.tb-nw-cards{display:grid;grid-template-columns:repeat(min(var(--tb-nwc,4),4),minmax(0,278px));justify-content:start;gap:22px;padding-bottom:26px;border-bottom:1px solid #e6ebf1;}
.tb-nw-card{display:flex;flex-direction:column;min-width:0;}
.tb-nw-card .tb-nw-media{margin-bottom:10px;}
.tb-nw-card h3{font-size:14.5px;line-height:1.85;font-weight:800;color:#1a2733;margin:0 0 6px;}
.tb-nw-excerpt{font-size:12.5px;line-height:1.95;color:#5b6b7c;margin:0 0 8px;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;}

.tb-nw-list{list-style:none;margin:0;padding:0;}
.tb-nw-row{display:grid;grid-template-columns:150px minmax(0,1fr);gap:18px;align-items:start;padding:16px 0;border-bottom:1px solid #eef1f5;}
.tb-nw-row.tb-nw-noimg{grid-template-columns:1fr;}
.tb-nw-row h3{font-size:15px;line-height:1.85;font-weight:800;color:#1a2733;margin:0 0 4px;}
.tb-nw-row-body{min-width:0;}

.tb-nw-meta{display:flex;align-items:center;flex-wrap:wrap;gap:6px 12px;font-size:11.5px;color:#98a4b0;}
.tb-nw-chip{background:#EAF3FB;color:#1789C2;font-weight:700;padding:1px 9px;border-radius:999px;}
.tb-nw-source{font-weight:700;color:#EA7C1F;}
.tb-nw-date{color:#98a4b0;}

.tb-nw-empty{text-align:center;padding:46px 12px;color:#64748B;font-size:14px;line-height:2;}
.tb-nw-empty i{font-size:42px;color:#b6c2cf;display:block;margin-bottom:8px;}
.tb-nw-admin-diag{font-size:11px;color:#98a4b0;text-align:center;margin:10px 0 0;direction:rtl;}

@media (max-width:900px){
  .tb-nw-head h1{font-size:23px;}
  .tb-nw-lead{grid-template-columns:1fr;gap:16px;}
  .tb-nw-lead h2{font-size:20px;}
  .tb-nw-cards{grid-template-columns:repeat(min(var(--tb-nwc,2),2),minmax(0,340px));justify-content:start;gap:18px;}
  .tb-nw-row{grid-template-columns:118px minmax(0,1fr);gap:14px;}
}
@media (max-width:520px){
  .tb-nw-cards{grid-template-columns:1fr;}
  .tb-nw-row{grid-template-columns:96px minmax(0,1fr);gap:12px;}
  .tb-nw-row h3{font-size:13.5px;}
  .tb-nw-row .tb-nw-excerpt{display:none;}
  .tb-nw-archive-link{padding:6px 12px;}
}

/* قدمِ ۵۸۶ — صفحه‌ی تک‌مقاله (single-tb_article.php): تایپوگرافیِ بدنه + هدر مقاله.
   بدونِ این بلوک، محتوایِ خامِ ویرایشگر (h2/h3/p/ul/strong) هیچ استایلی نداشت — همان
   ریشه‌ی به‌هم‌ریختگیِ گزارش‌شده. */
.tb-article-single{max-width:var(--tb-w,820px);margin:0 auto;padding-bottom:120px;} /* فاصله‌ی کافی تا مسنجرِ شناور (70px + حاشیه) روی متن نیفتد */
.tb-article-topmeta{margin-bottom:10px;}
.tb-article-title{font-size:26px;line-height:1.6;font-weight:800;color:#0F3D73;margin:0 0 14px;}
.tb-article-lead{font-size:15.5px;line-height:2;color:#4b5b6b;margin:0 0 18px;}
.tb-article-media{border-radius:14px;overflow:hidden;margin:0 auto 26px;position:relative;aspect-ratio:16/9;max-height:420px;width:50%;}
@media (max-width:640px){.tb-article-media{width:100%;}} /* موبایل: تصویرِ نصف‌شده روی صفحه‌ی کوچیک بیش‌ازحد جمع می‌شه، عرضِ کامل حفظ می‌شه */
.tb-article-media img{width:100%;height:100%;display:block;object-fit:cover;object-position:center;}
.tb-article-media-fallback{aspect-ratio:16/8;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#0F3D73,#17325C 55%,#1789C2);}
.tb-article-media-fallback i{font-size:52px;color:rgba(255,255,255,.55);}

.tb-article-body{font-size:var(--tb-fs,15.5px);line-height:var(--tb-lh,2.15);color:#334155;padding-bottom:30px;border-bottom:1px solid #e6ebf1;margin-bottom:26px;}
.tb-article-body h2{font-size:19px;font-weight:800;color:#0F3D73;margin:var(--tb-h2,30px) 0 12px;padding-right:11px;border-right:3px solid #1789C2;}
.tb-article-body h3{font-size:16.5px;font-weight:800;color:#12203a;margin:22px 0 10px;}
.tb-article-body p{margin:0 0 var(--tb-pg,14px);text-align:justify;text-justify:inter-word;text-indent:var(--tb-ind,0);}
.tb-article-body ul,.tb-article-body ol{margin:0 0 14px;padding-inline-start:22px;display:flex;flex-direction:column;gap:8px;}
.tb-article-body li{line-height:2;}
.tb-article-body strong,.tb-article-body b{color:#12203a;font-weight:800;}
.tb-article-body em{color:#1789C2;font-style:normal;}
.tb-article-body img{max-width:100%;height:auto;border-radius:10px;display:block;margin:16px 0;}
.tb-article-body blockquote{margin:16px 0;padding:12px 16px;background:#f4f7fb;border-right:3px solid #1789C2;border-radius:0 8px 8px 0;color:#4b5b6b;}
.tb-article-body table{width:100%;border-collapse:collapse;margin:16px 0;font-size:13.5px;}
.tb-article-body th,.tb-article-body td{border:1px solid #e6ebf1;padding:8px 10px;text-align:right;}
.tb-article-body th{background:#f4f7fb;color:#0F3D73;}

.tb-article-related-title{font-size:17px;font-weight:800;color:#0F3D73;margin:0 0 16px;}

@media (max-width:640px){
  .tb-article-title{font-size:21px;}
  .tb-article-body{font-size:14.5px;}
  .tb-article-body h2{font-size:16.5px;}
  .tb-article-body h3{font-size:15px;}
}

/* قدمِ ۴۹۳ — بخشِ «توضیحِ خبر» در صفحهٔ داخلیِ خبر */
.tb-live-article-h2{font-size:17px;line-height:1.7;color:#0F3D73;margin:22px 0 10px;padding-right:10px;border-right:3px solid #1789C2;}
.tb-live-article-ctx{font-weight:400;font-size:15px;line-height:2.1;color:#334155;}

/* =====================================================================
 * قدمِ ۵۴۹ — «بی‌روح بودنِ» دکمه‌ها/تب‌هایِ حالتِ غیرفعال (مثل «فیلمِ مستند»):
 * تب‌ها، چیپ‌ها و دکمه‌هایِ toggleِ سفیدِ بی‌رنگ، رنگِ تمِ همان بخش (--tb-theme)
 * گرفتند؛ حالتِ فعال هم گرادیان+سایه. همه در همین یک بلوک تا برگرداندنش آسان باشد.
 * هر خط اول یک مقدارِ ثابتِ سازگار می‌گذارد و بعد نسخهٔ color-mix (مرورگرهایِ قدیمی‌تر
 * همان مقدارِ ثابت را می‌گیرند).
 * ===================================================================== */
.tb-content-tab-btns{background:#F1F8FD;background:color-mix(in srgb,var(--tb-theme,#1789C2) 7%,#fff);border-color:#CFE8F8;border-color:color-mix(in srgb,var(--tb-theme,#1789C2) 22%,#fff);box-shadow:0 2px 8px rgba(15,61,115,.06);}
.tb-content-tab-btn,
.tb-alpha-btn,
.tb-alpha-toggle-btn,
.tb-bcal-filter-chip,
.tb-crs-pg-btn,
.tb-crs-tab,
.tb-dc-tab,
.tb-stu-nav-item{
  background:linear-gradient(180deg,#F7FBFE 0%,#E3F2FC 100%);
  background:linear-gradient(180deg,color-mix(in srgb,var(--tb-theme,#1789C2) 4%,#fff) 0%,color-mix(in srgb,var(--tb-theme,#1789C2) 15%,#fff) 100%);
  border-color:#B5DAF1;
  border-color:color-mix(in srgb,var(--tb-theme,#1789C2) 38%,#fff);
  color:#0F3D73;
  box-shadow:0 1px 3px rgba(15,61,115,.10);
}
.tb-content-tab-btn:hover:not(.active),
.tb-alpha-btn:hover:not(.active),
.tb-alpha-toggle-btn:hover:not(.active),
.tb-bcal-filter-chip:hover:not(.active),
.tb-crs-pg-btn:hover:not(:disabled):not(.active),
.tb-crs-tab:hover:not(.active),
.tb-dc-tab:hover:not(.active),
.tb-stu-nav-item:hover:not(.active){
  background:#D6ECFA;
  background:color-mix(in srgb,var(--tb-theme,#1789C2) 22%,#fff);
  border-color:var(--tb-theme,#1789C2);
  color:#0F3D73;
  transform:translateY(-1px);
  box-shadow:0 4px 10px rgba(15,61,115,.16);
}
.tb-content-tab-btn.active{
  background:linear-gradient(135deg,#1789C2,#0F5F94);
  background:linear-gradient(135deg,var(--tb-theme,#1789C2),color-mix(in srgb,var(--tb-theme,#1789C2) 70%,#0F3D73));
  border-color:var(--tb-theme,#1789C2);color:#fff;transform:none;
  box-shadow:0 5px 14px rgba(15,61,115,.28);
}
.tb-alpha-btn.active,.tb-alpha-toggle-btn.active,.tb-crs-pg-btn.active,.tb-crs-tab.active{
  color:#fff;transform:none;box-shadow:0 4px 12px rgba(15,61,115,.28);
}
.tb-bcal-filter-chip.active{color:#fff;transform:none;box-shadow:0 3px 9px rgba(15,61,115,.22);}
.tb-bcal-filter-chip.tb-bcal-chip-medium.active{color:#3b2c00;}
.tb-crs-pg-btn:disabled{background:#F3F5F8;border-color:#E3E7EC;box-shadow:none;transform:none;}
/* کارتِ ویدیو: لبهٔ رنگیِ بالا + سایه تا در صفحهٔ سفید گم نشود */
.tb-svc-video-card{border:1px solid #CFE8F8;border-top:3px solid var(--tb-theme,#1789C2);box-shadow:0 4px 14px rgba(15,61,115,.10);background:#fff;transition:box-shadow .18s,transform .18s;}
.tb-svc-video-card:hover{box-shadow:0 8px 22px rgba(15,61,115,.18);transform:translateY(-2px);}
.tb-svc-video-info{background:linear-gradient(180deg,#fff,#F4FAFE);}

/* قدمِ ۵۵۱ — پوسترِ خودکارِ برندشدهٔ صفحهٔ دوره + نمایشِ «تصویرِ شاخص» در صورتِ وجود */
.tb-crsdet-poster--img{padding:0;overflow:hidden;background:#0F3D73;}
.tb-crsdet-poster--img img{width:100%;height:100%;object-fit:cover;display:block;}
.tb-crsdet-poster--auto{position:relative;overflow:hidden;color:#fff;text-align:center;padding:18px 22px;gap:8px;
  background:linear-gradient(135deg,#0F3D73,#1789C2);
  background:linear-gradient(135deg,var(--pc1,#0F3D73),var(--pc2,#1789C2));}
.tb-crsdet-poster--auto .tb-cp-deco{position:absolute;border-radius:50%;pointer-events:none;background:rgba(255,255,255,.10);}
.tb-cp-d1{width:56%;aspect-ratio:1;top:-30%;right:var(--dx,15%);}
.tb-cp-d2{width:34%;aspect-ratio:1;bottom:-22%;left:var(--dy,20%);background:rgba(255,255,255,.08);}
.tb-cp-d3{width:16%;aspect-ratio:1;top:var(--dy,30%);left:6%;background:rgba(255,255,255,.14);}
.tb-crsdet-poster--auto>*{position:relative;z-index:1;}
.tb-crsdet-poster--auto .tb-cp-deco{position:absolute;z-index:0;}
.tb-cp-icon{font-size:34px;color:#fff;background:rgba(255,255,255,.18);border:1.5px solid rgba(255,255,255,.35);width:58px;height:58px;border-radius:16px;display:flex;align-items:center;justify-content:center;box-shadow:0 6px 16px rgba(0,0,0,.18);}
.tb-cp-market{font-size:11.5px;font-weight:700;background:rgba(255,255,255,.2);border-radius:999px;padding:3px 12px;color:#fff;}
.tb-cp-title{font-size:clamp(15px,2.6vw,24px);line-height:1.7;font-weight:800;color:#fff;max-width:92%;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;text-shadow:0 2px 8px rgba(0,0,0,.25);}
.tb-cp-brand{font-size:11px;font-weight:700;letter-spacing:.2px;color:rgba(255,255,255,.85);border-top:1px solid rgba(255,255,255,.28);padding-top:6px;margin-top:2px;}
@media (max-width:520px){.tb-cp-icon{width:44px;height:44px;font-size:24px;border-radius:12px;}.tb-crsdet-poster--auto{padding:12px 14px;gap:5px;}}

/* قدمِ ۶۳۵ — «مدرسه» دو مرحله‌ای باز نشود: قالبِ خالیِ HTMLِ سرور تا اجرایِ tbSchoolInit پنهان می‌ماند
   (visibility → چیدمان جابه‌جا نمی‌شود). کلاسِ tb-sch-ready را خودِ tbSchoolInit می‌گذارد.
   اگر جاوااسکریپت اصلاً اجرا نشد، بعد از ۷ ثانیه خودبه‌خود آشکار می‌شود. */
[data-svc-view="financeschool"] > .tb-svc-body:not(.tb-sch-ready){visibility:hidden;animation:tbSchReveal 0s linear 7s forwards;}
@keyframes tbSchReveal{to{visibility:visible;}}

/* قدمِ ۶۳۵ — اولین نمایشِ مدرسه بدونِ انیمیشن (کلاسِ tb-sch-instant را HTML دارد و tbSchoolInit بعد از رندر برمی‌دارد) */
[data-svc-view="financeschool"] > .tb-svc-body.tb-sch-instant .tb-school-step,
[data-svc-view="financeschool"] > .tb-svc-body.tb-sch-instant .tb-school-sidebar,
[data-svc-view="financeschool"] > .tb-svc-body.tb-sch-instant .tb-school-picker-caret{transition:none!important;animation:none!important;}

/* قدمِ ۶۳۶ — رفعِ «صفحه‌ی خالیِ خدمات» هنگامِ ورود به مدرسه: تیترِ عمومیِ «خدمات» از همان رندرِ سرور مخفی است
   (کلاسِ tb-tools-hero-hidden) و تا آماده‌شدنِ مدرسه یک نشانگرِ بارگذاری دیده می‌شود. */
.tb-sch-viewwrap{position:relative;}
.tb-sch-loading{position:absolute;top:60px;left:0;right:0;display:flex;flex-direction:column;align-items:center;gap:12px;font-size:13px;color:#5b6b80;z-index:2;pointer-events:none;animation:tbSchLoadHide 0s linear 7s forwards;}
.tb-sch-viewwrap:has(> .tb-svc-body.tb-sch-ready) > .tb-sch-loading{display:none;}
.tb-sch-spin{width:34px;height:34px;border:3px solid #d6e4f0;border-top-color:#1789C2;border-radius:50%;animation:tbSchSpin .8s linear infinite;}
@keyframes tbSchSpin{to{transform:rotate(360deg);}}
@keyframes tbSchLoadHide{to{opacity:0;visibility:hidden;}}

/* قدمِ ۶۳۷ — تک‌خبر هم‌قالبِ تک‌مقاله + جزئیاتِ استودیو */
.tb-article-figure{margin:0 0 26px;}
.tb-article-figure .tb-article-media{margin-bottom:8px;}
.tb-article-figcap{font-size:11.5px;color:#7a8494;text-align:center;line-height:1.9;}
.tb-article-readtime{font-size:12px;color:#6b7a8c;display:inline-flex;align-items:center;gap:4px;}
.tb-chip-kind{background:#fff4e5;color:#9a5b00;}
.tb-src-box{font-size:12.5px;color:#5b6b7c;background:#F7FAFC;border:1px solid #E2E8F0;border-radius:10px;padding:10px 14px;margin:0 0 26px;}
.tb-src-lbl{font-weight:800;color:#12203a;margin-left:6px;}
.tb-src-box a{color:#1789C2;text-decoration:none;}

/* قدمِ ۶۴۰ — جدول و هایلایتِ ادیتورِ ورد-مانند در صفحهٔ تک‌خبر/تک‌مقاله */
.tb-article-body table{border-collapse:collapse;width:100%;margin:16px 0;display:block;overflow-x:auto;}
.tb-article-body th,.tb-article-body td{border:1px solid #cbd5e1;padding:8px 12px;vertical-align:top;line-height:1.9;}
.tb-article-body th{background:#f1f5f9;font-weight:800;}
.tb-article-body sub,.tb-article-body sup{line-height:0;}

/* ===== قدمِ ۶۴۸ — «عدسیِ تریدر» (معنایِ خبر برایِ معامله‌گر) ===== */
.tb-lens{margin:10px 0 4px;}
.tb-lens-row{display:flex;flex-wrap:wrap;align-items:center;gap:6px;}
.tb-lens-imp{font-size:11.5px;font-weight:800;padding:2px 10px;border-radius:999px;border:1px solid transparent;white-space:nowrap;}
.tb-lens-imp::before{content:"";display:inline-block;width:7px;height:7px;border-radius:50%;margin-inline-end:6px;background:currentColor;}
.tb-lens-imp--high{background:#FDECEC;color:#B42318;border-color:#F5C2C0;}
.tb-lens-imp--medium{background:#FFF4E0;color:#B54708;border-color:#F8D9A6;}
.tb-lens-imp--low{background:#F1F3F5;color:#5B6572;border-color:#DDE1E6;}
.tb-lens-cat{font-size:12px;font-weight:700;color:#0F3D62;}
.tb-lens-asset{font-size:11px;font-weight:700;color:#1789C2;background:#EAF3FB;border-radius:6px;padding:1px 7px;font-family:Consolas,Menlo,monospace;letter-spacing:.2px;}
.tb-lens-line{margin:6px 0 0;font-size:13px;line-height:1.85;color:#2B3A4A;}
.tb-lens-line b{color:#0F3D62;}
.tb-lens-full{margin:22px 0;padding:16px 18px;border:1px solid #D6E6F2;border-inline-start:4px solid #1789C2;background:#F6FAFD;border-radius:12px;}
.tb-lens-h{margin:0 0 10px;font-size:17px;color:#0F3D62;}
.tb-lens-meaning{margin:12px 0 10px;font-size:15px;line-height:2;color:#1F2D3D;}
.tb-lens-scen{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:10px 0;}
.tb-lens-scen>div{display:flex;flex-direction:column;gap:4px;padding:10px 12px;border-radius:10px;background:#fff;border:1px solid #E3EAF0;font-size:13.5px;line-height:1.9;}
.tb-lens-scen b{font-size:13px;color:#0F3D62;}
.tb-lens-scen-a,.tb-lens-scen-b{border-top:3px solid #1789C2 !important;}
.tb-lens-assets{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:10px 0;}
.tb-lens-lbl{font-size:12.5px;font-weight:800;color:#0F3D62;margin-inline-end:4px;}
.tb-lens-watch ul{margin:6px 0 0;padding-inline-start:20px;font-size:13.5px;line-height:2;color:#2B3A4A;}
.tb-lens-note{margin:12px 0 0;font-size:11.5px;line-height:1.8;color:#6b7280;}
@media (max-width:640px){.tb-lens-scen{grid-template-columns:1fr;}.tb-lens-full{padding:14px;}}

/* ===== قدمِ ۶۴۹ — «بریفِ بنیادی» در تبِ تحلیل فاندامنتال ===== */
.tb-fb{margin:0 0 26px;padding:18px;border:1px solid #D6E6F2;border-radius:14px;background:#F6FAFD;}
.tb-fb-h{margin:0 0 4px;font-size:19px;color:#0F3D62;display:flex;align-items:center;gap:8px;}
.tb-fb-sub{margin:0 0 14px;font-size:13px;line-height:1.9;color:#5b6b7c;}
.tb-fb-h2{margin:18px 0 10px;font-size:15px;color:#0F3D62;}
.tb-fb-team-h{margin:8px 0 12px;}
.tb-fb-empty{margin:6px 0 0;font-size:13.5px;color:#5b6b7c;}
.tb-fb-glance{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;}
.tb-fb-glance>div{background:#fff;border:1px solid #E3EAF0;border-radius:10px;padding:10px 12px;text-align:center;display:flex;flex-direction:column;gap:2px;}
.tb-fb-glance b{font-size:22px;color:#1789C2;line-height:1.2;}
.tb-fb-glance span{font-size:12px;color:#5b6b7c;}
.tb-fb-assets{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:10px;}
.tb-fb-asset{background:#fff;border:1px solid #E3EAF0;border-radius:10px;padding:10px 12px;}
.tb-fb-asset[data-level="high"]{border-top:3px solid #B42318;}
.tb-fb-asset[data-level="medium"]{border-top:3px solid #B54708;}
.tb-fb-asset[data-level="low"]{border-top:3px solid #DDE1E6;}
.tb-fb-asset-top{display:flex;justify-content:space-between;align-items:center;gap:6px;}
.tb-fb-asset-cats{font-size:12px;color:#0F3D62;font-weight:700;margin:6px 0;}
.tb-fb-asset ul,.tb-fb-news ul{margin:4px 0 0;padding-inline-start:18px;font-size:13px;line-height:1.9;color:#2B3A4A;}
.tb-fb-asset a,.tb-fb-news a{color:#0F3D62;text-decoration:none;font-weight:700;}
.tb-fb-asset a:hover,.tb-fb-news a:hover{color:#1789C2;}
.tb-fb-meta{color:#7a8494;font-size:11.5px;}
.tb-fb-themes{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:12px;}
.tb-fb-theme{background:#fff;border:1px solid #E3EAF0;border-radius:12px;padding:14px 16px;}
.tb-fb-meaning{margin:10px 0;font-size:14px;line-height:2;color:#1F2D3D;}
.tb-fb-news{margin-top:10px;padding-top:8px;border-top:1px dashed #DDE6EE;}
@media (max-width:640px){.tb-fb{padding:14px;}.tb-fb-glance{grid-template-columns:1fr 1fr 1fr;gap:6px;}.tb-fb-glance b{font-size:18px;}.tb-fb-themes{grid-template-columns:1fr;}}

/* قدمِ ۶۵۰ — رویدادهایِ ستاره‌دار + تب‌هایِ تحلیل با ساختارِ صفحهٔ اخبار */
.tb-fxa{direction:rtl}
.tb-fxa .tb-fx-hero{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;min-height:150px;border-radius:12px;color:#fff;text-align:center;padding:18px 12px;background:radial-gradient(circle at 20% 15%,#1f6fb8 0,#0F3D73 55%,#0a2747 100%);overflow:hidden}
.tb-fxa .tb-fx-hero-big{min-height:290px}
.tb-fxa .tb-fx-hero-plain{background:linear-gradient(135deg,#0F3D73,#1789C2)}
.tb-fxa .tb-fx-star{position:absolute;top:10px;right:14px;color:#f7c948;letter-spacing:3px;font-size:14px}
.tb-fxa .tb-fx-hero-ico{font-size:40px;opacity:.95}
.tb-fxa .tb-fx-hero-big .tb-fx-hero-ico{font-size:64px}
.tb-fxa .tb-fx-hero-cur{font-size:12px;letter-spacing:2px;opacity:.85}
.tb-fxa .tb-fx-hero-name{font-size:26px;line-height:1.3}
.tb-fxa .tb-fx-hero-big .tb-fx-hero-name{font-size:40px}
.tb-fxa .tb-fx-hero-time{font-size:13px;opacity:.92}
.tb-fxa .tb-fx-count{font-size:13px;font-weight:700;color:#f7c948;min-height:18px}
.tb-fxa .tb-fx-tag{background:#C0282D;color:#fff}
.tb-fxa .tb-fx-live .tb-fx-tag{background:#d97706}
.tb-fxa .tb-fx-assets{display:flex;flex-wrap:wrap;gap:6px;list-style:none;margin:4px 0 10px;padding:0}
.tb-fxa .tb-fx-assets li{background:#eef4fb;color:#0F3D62;border-radius:999px;padding:3px 10px;font-size:12px}
.tb-fxa .tb-fx-note{font-size:12px;color:#7a8897;margin:6px 0 0}
.tb-fxa .tb-fx-h{margin:22px 0 12px;font-size:17px;color:#0F3D62}
.tb-fx-guide .tb-fx-guide-hero{margin:0 0 22px}
.tb-fx-guide .tb-fx-sec{background:#fff;border:1px solid #e6ebf1;border-radius:12px;padding:16px 20px;margin:0 0 14px}
.tb-fx-guide .tb-fx-sec h3{margin:0 0 8px;font-size:16px;color:#0F3D62}
.tb-fx-guide .tb-fx-sec p,.tb-fx-guide .tb-fx-sec li{font-size:14.5px;line-height:2.1;color:#3b4a5a;margin:0 0 6px}
.tb-fx-guide .tb-fx-sec ul{margin:0;padding-right:20px}
.tb-fx-guide .tb-fx-hot{border-right:4px solid #0EA155}
.tb-fx-guide .tb-fx-cool{border-right:4px solid #C0282D}
.tb-fx-guide .tb-fx-disclaimer{font-size:12.5px;line-height:2;color:#7a5a16;background:#fff8e6;border:1px solid #f2dc9b;border-radius:10px;padding:10px 14px}
.tb-fxa .tb-fx-static{position:relative;cursor:pointer}
.tb-fxa .tb-fx-static .tb-admin-card-del{z-index:3}

/* قدمِ ۶۵۱ — کارتِ تحلیلِ تکنیکال */
.tb-tc-pane{direction:rtl}
.tb-tc-path{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;list-style:none;margin:0 0 16px;padding:0}
.tb-tc-path li{background:#eef4fb;border-radius:10px;padding:10px 12px;font-size:12.5px;color:#3b4a5a;line-height:1.8}
.tb-tc-path b{display:block;color:#0F3D62;font-size:14px}
.tb-tc-filter{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 14px}
.tb-tc-filter button{border:1px solid #cfd9e4;background:#fff;color:#0F3D62;border-radius:999px;padding:5px 14px;font-size:12.5px;cursor:pointer}
.tb-tc-filter button.on{background:#0F3D73;color:#fff;border-color:#0F3D73}
.tb-tc-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(270px,1fr));gap:14px}
.tb-tc-card{background:#fff;border:1px solid #e1e8f0;border-radius:14px;overflow:hidden}
.tb-tc-card .tb-tc-link{display:block;padding:14px 16px;color:inherit;text-decoration:none}
.tb-tc-card:hover{border-color:#1789C2;box-shadow:0 4px 16px rgba(15,61,115,.10)}
.tb-tc-lead{margin:0 0 16px;border-width:2px;border-color:#b9d6ee}
.tb-tc-lead .tb-tc-driver{font-size:15px}
.tb-tc-top{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:0 0 8px}
.tb-tc-pair{font-size:20px;font-weight:800;color:#0F3D62;direction:ltr;unicode-bidi:isolate}
.tb-tc-bias{border-radius:999px;padding:3px 12px;font-size:12px;font-weight:700;color:#fff}
.tb-tc-bull{background:#0EA155}.tb-tc-bear{background:#C0282D}.tb-tc-neutral{background:#7a8897}
.tb-tc-meta{display:flex;flex-wrap:wrap;gap:10px;font-size:12px;color:#5b6b7c;margin:0 0 8px}
.tb-tc-driver{font-size:13.5px;line-height:2;color:#3b4a5a;margin:0 0 10px}
.tb-tc-plan{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:0 0 10px}
.tb-tc-plan div{background:#f6f9fc;border-radius:8px;padding:7px 9px}
.tb-tc-plan dt{font-size:11px;color:#7a8897;margin:0 0 2px}
.tb-tc-plan dd{font-size:12.5px;font-weight:700;color:#0F3D62;margin:0;line-height:1.6;overflow-wrap:anywhere}
.tb-tc-foot{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:12px;color:#7a8897}
.tb-tc-more{color:#1789C2;font-weight:700}
.tb-tc-expired{opacity:.72}
.tb-tc-tpl{border-style:dashed}
.tb-tc-empty{text-align:center;padding:38px 16px;background:#f6f9fc;border-radius:14px;color:#5b6b7c}
.tb-tc-empty i{font-size:42px;color:#1789C2}
.tb-tc-empty p{margin:8px 0 0;font-size:15px}.tb-tc-empty .tb-tc-empty-sub{font-size:12.5px}
.tb-tc-archive{margin:20px 0 0}
.tb-tc-archive summary{cursor:pointer;font-weight:700;color:#0F3D62;margin:0 0 12px}
.tb-tc-admin-link{font-size:12.5px;margin:16px 0 0}
.tb-tc-detail h1 .tb-tc-bias{font-size:13px;vertical-align:middle;margin-right:8px}
.tb-tc-note{border-radius:10px;padding:10px 14px;font-size:13px;line-height:2;margin:0 0 14px}
.tb-tc-note-warn{background:#fff8e6;border:1px solid #f2dc9b;color:#7a5a16}
.tb-tc-chart{margin:0 0 18px}.tb-tc-chart img{display:block;max-width:100%;height:auto;border-radius:12px;border:1px solid #e1e8f0}
.tb-tc-sec{background:#fff;border:1px solid #e6ebf1;border-radius:12px;padding:16px 20px;margin:0 0 14px}
.tb-tc-sec h3{margin:0 0 8px;font-size:16px;color:#0F3D62}
.tb-tc-sec p{font-size:14.5px;line-height:2.1;color:#3b4a5a;margin:0 0 6px}
.tb-tc-step{border-right:4px solid #1789C2}
.tb-tc-ev{font-size:13px}
.tb-tc-tablewrap{overflow-x:auto;margin:0 0 10px}
.tb-tc-table{width:100%;border-collapse:collapse;font-size:13.5px}
.tb-tc-table th,.tb-tc-table td{border-bottom:1px solid #edf1f5;padding:8px 10px;text-align:right;vertical-align:top;line-height:1.9}
.tb-tc-table thead th{background:#f6f9fc;color:#0F3D62}
.tb-tc-planT th{width:34%;color:#0F3D62;background:#f6f9fc}
.tb-tc-lv-support td:first-child{color:#0EA155;font-weight:700}.tb-tc-lv-resistance td:first-child{color:#C0282D;font-weight:700}.tb-tc-lv-golden td:first-child{color:#b7791f;font-weight:700}
.tb-tc-tools{display:flex;flex-wrap:wrap;gap:6px;list-style:none;margin:0;padding:0}
.tb-tc-tools li{background:#eef4fb;color:#0F3D62;border-radius:999px;padding:3px 11px;font-size:12px}
.tb-tc-scen{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.tb-tc-sc-a{border-right:4px solid #0EA155}.tb-tc-sc-b{border-right:4px solid #C0282D}
.tb-tc-lesson{background:#f3faf6}.tb-tc-risk{background:#fff8f6}
@media(max-width:700px){.tb-tc-path,.tb-tc-scen{grid-template-columns:1fr}.tb-tc-plan{grid-template-columns:1fr}.tb-tc-grid{grid-template-columns:1fr}}

/* ===== قدمِ ۶۵۶ — اعتبار و انقضایِ تحلیل، بنر، نتایج ===== */
.tb-tc-valid{border:1px solid #cfe6d8;background:#f3faf6;border-radius:12px;padding:12px 16px;margin:0 0 14px}
.tb-tc-valid-head{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin:0 0 8px}
.tb-tc-state{border-radius:999px;padding:3px 12px;font-size:12px;font-weight:800;color:#fff;background:#0EA155}
.tb-tc-count{font-size:13px;font-weight:700;color:#0F3D62}
.tb-tc-valid-dl{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:8px;margin:0 0 8px}
.tb-tc-valid-dl div{background:#fff;border-radius:8px;padding:7px 10px}
.tb-tc-valid-dl dt{font-size:11px;color:#7a8897;margin:0 0 2px}
.tb-tc-valid-dl dd{font-size:13px;font-weight:700;color:#0F3D62;margin:0;line-height:1.7}
.tb-tc-valid-rule,.tb-tc-valid-res{font-size:12px;line-height:1.9;color:#5b6b7c;margin:0 0 4px}
.tb-tc-banner{margin:8px 0 0;padding:9px 12px;border-radius:8px;background:#C0282D;color:#fff;font-size:13.5px;font-weight:800;line-height:1.8}
.tb-tc-banner[hidden]{display:none}
.tb-tc-mini{padding:8px 10px;margin:8px 0}
.tb-tc-mini .tb-tc-valid-head{margin:0 0 4px}
.tb-tc-mini-line{font-size:12px;color:#5b6b7c;margin:0;line-height:1.8}
.tb-tc-st-near{background:#fffbea;border-color:#f2dc9b}.tb-tc-st-near .tb-tc-state{background:#d99a00}
.tb-tc-st-expired,.tb-tc-st-final-loss,.tb-tc-st-final-void{background:#fdf1f1;border-color:#f0c4c4}
.tb-tc-st-expired .tb-tc-state,.tb-tc-st-final-loss .tb-tc-state{background:#C0282D}
.tb-tc-st-final-void .tb-tc-state{background:#7a8897}
.tb-tc-st-final-win{background:#eef7ff;border-color:#b9d6ee}.tb-tc-st-final-win .tb-tc-state{background:#1789C2}
.tb-tc-card.tb-tc-expired{opacity:.6;filter:grayscale(.6)}
.tb-tc-card.tb-tc-expired .tb-tc-plan,.tb-tc-card.tb-tc-expired .tb-tc-driver,.tb-tc-card.tb-tc-expired .tb-nw-excerpt{text-decoration:line-through;text-decoration-color:rgba(192,40,45,.45)}
.tb-tc-detail.tb-tc-expired .tb-tc-step,.tb-tc-detail.tb-tc-expired .tb-tc-scen{opacity:.65}
.tb-tc-track{font-size:12.5px;line-height:1.9;color:#0F3D62;background:#eef4fb;border-radius:10px;padding:8px 12px;margin:0 0 12px}

/* قدمِ ۶۶۱ — تحلیل بازار سهام/کریپتو هم‌ساختارِ تحلیل بازارهایِ مالی */
.tb-sa-steps{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:10px;list-style:none;margin:0 0 16px;padding:0}
.tb-sa-steps li{background:#eef4fb;border-radius:10px;padding:10px 12px;font-size:12.5px;color:#3b4a5a;line-height:1.8}
.tb-sa-steps b{display:block;color:#0F3D62;font-size:14px}
.tb-sa-pane .tb-fx-disclaimer{font-size:12.5px;line-height:2;color:#7a5a16;background:#fff8e6;border:1px solid #f2dc9b;border-radius:10px;padding:10px 14px;margin:18px 0 0}
.tb-sa-pane .tb-fb{margin-top:0}
@media(max-width:700px){.tb-sa-steps{grid-template-columns:1fr}}

/* قدمِ ۶۶۲ — راهنمایِ علمیِ بنیادیِ بورس و کریپتو */
.tb-fx-guide .tb-fx-theory{border-right:4px solid #1789C2;background:#f7fbff}
.tb-sg-card .tb-nw-excerpt{font-size:13px;line-height:1.9;color:#3b4a5a}

/* قدمِ ۶۶۳ — کارت‌هایِ تحلیلِ تکنیکالِ ارز دیجیتال (inc/crypto-tech-cards.php) */
.tb-cc-sum{background:#eef4fb;border-right:4px solid #1789C2;border-radius:10px;padding:12px 16px;margin:0 0 16px;font-size:13px;line-height:2;color:#3b4a5a}
.tb-cc-sum b{color:#0f3d63}
.tb-cc-sum p{margin:6px 0 0}
.tb-cc-body h4{font-size:15px;font-weight:800;color:#0f3d63;margin:18px 0 6px}
.tb-cc-body p{margin:0 0 8px}
.tb-cc-src{background:#fff8e6;border:1px solid #f2dc9b;border-radius:8px;padding:8px 12px;font-size:12.5px}
.tb-cc-note{font-size:12.5px;color:#6b7785}
.tb-cc-mtf{list-style:none;margin:0;padding:0}
.tb-cc-mtf li{padding:6px 0;border-bottom:1px dashed #e2e8f0}
.tb-cc-mtf li b{display:inline-block;min-width:34px;background:#0f3d63;color:#fff;border-radius:6px;padding:0 8px;margin-left:6px;text-align:center}
.tb-cc-tbl-wrap{overflow-x:auto;margin:0 0 8px}
.tb-cc-lv{width:100%;border-collapse:collapse;font-size:12.5px}
.tb-cc-lv th,.tb-cc-lv td{padding:6px 10px;border-bottom:1px solid #e2e8f0;text-align:right;line-height:1.8}
.tb-cc-lv th{background:#f3f6fa;color:#3b4a5a}
.tb-cc-lv-resistance td:first-child{color:#C0282D;font-weight:700}
.tb-cc-lv-support td:first-child{color:#0EA155;font-weight:700}
.tb-cc-lv-fib td:first-child{color:#B7791F;font-weight:700}
.tb-cc-chip{display:inline-block;background:#eef4fb;color:#0f3d63;border-radius:999px;padding:1px 10px;font-size:12px;margin:2px 0 2px 4px}
.tb-cc-plan{grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}
.tb-cc-lead h3{font-size:24px;line-height:1.75;font-weight:800;color:#111827;margin:0 0 12px}
