/* لیست انتشار — تنها شیوه‌نامهٔ این صفحه (۱٫۶۴٫۰).
   تا ۱٫۶۳٫۰ پایهٔ صفحه (۴۵۵ خط) داخلِ <style> در member-view.php بود و با هر
   صفحه از نو فرستاده می‌شد؛ حالا یک فایل است، با نسخهٔ DMR_VERSION تازه می‌شود و
   مرورگر نگهش می‌دارد. بخشِ اول همان پایهٔ قدیمی است، بی‌تغییر؛ بخشِ دوم اجزایی است
   که در ۱٫۶۲٫۰ و ۱٫۶۳٫۰ از پنل مدیریت آمدند (پیشوندِ dmr-). */

/* =====================================================================
   بخشِ ۱ — پایهٔ صفحه (از member-view.php)
   ===================================================================== */

  /* ---- رنگ‌ها ----
     ⚠ سه رنگِ برند در هر دو تم یکی‌اند و عوض نمی‌شوند؛ فقط سطح‌ها و متن جابه‌جا
     می‌شوند. یعنی عوض کردنِ تم هیچ‌وقت هویتِ محصول را عوض نمی‌کند.
     ⚠ تیره پیش‌فرض است چون خواسته شد، ولی کلیدِ تغییر هست و انتخاب می‌ماند —
     یک تغییرِ بصریِ بزرگ بدون راهِ برگشت، ریسکِ بی‌دلیلی است. */
  :root {
    --dark:#06061c; --blue:#3e68ff; --pink:#ef3e63; --ok:#1faa5f;
    --page:#0f0f22; --card:#17172e; --text:#e9eaf5; --muted:#9296b5;
    --line:#272743; --radius:16px; --shadow:0 1px 2px rgba(0,0,0,.25);
    --tint:.20;
    /* ⚠ ۱٫۶۶٫۰ («پویش ظاهر» روی میزبان، سند §۱۰ خط ۳۳): رنگِ برند برای «پر کردن» است، نه
       برای «متن». آبیِ #3e68ff روی کارتِ تیره ۳٫۸۶ و روی تهِ رنگیِ خودش ۳٫۱ می‌داد. متن‌ها
       (پیوند، نشان، پیام) حالا از این دو جوهر می‌خوانند که در هر تم جدا تنظیم شده‌اند؛
       سه رنگِ برند همان می‌مانند. هر تغییرِ این دو، همهٔ نشان‌ها و پیوندها را عوض می‌کند. */
    --blue-ink:#7f9cff; --pink-ink:#ff8aa1;
  }
  :root[data-theme="light"] {
    --page:#f4f5fa; --card:#fff; --text:#131327; --muted:#5c5f78;
    --line:#e7e8f2; --shadow:0 1px 2px rgba(6,6,28,.04);
    --tint:.12;
    --blue-ink:#2747c9; --pink-ink:#b81d40;
  }
  * { box-sizing:border-box; }
  body {
    margin:0; background:var(--page); color:var(--text);
    font-family:var(--dmr-font, Tahoma, sans-serif); line-height:1.9; font-size:14px;
  }
  a { color:var(--blue-ink); text-decoration:none; }

  /* ---- پوسته‌ی دسکتاپ: نوار کنارِ ثابت + محتوای پهن ---- */
  .shell { display:flex; min-height:100vh; }

  .side {
    width:248px; flex:0 0 248px; background:var(--dark); color:#fff;
    display:flex; flex-direction:column; position:sticky; top:0; height:100vh;
  }
  .brand { display:flex; align-items:center; gap:11px; padding:22px 20px 18px; }
  .brand .mark {
    width:34px; height:34px; border-radius:9px; background:var(--blue);
    display:flex; align-items:center; justify-content:center; flex:0 0 34px;
  }
  .brand .mark i { width:12px; height:12px; background:#fff; border-radius:3px; display:block; }
  .brand .name { font-size:15px; font-weight:700; }

  .side nav { padding:6px 12px; display:flex; flex-direction:column; gap:2px; }
  .side nav a {
    display:flex; align-items:center; gap:10px; padding:10px 12px; border-radius:9px;
    color:#c7cae0; font-size:14px; min-height:40px;
  }
  .side nav a:hover { background:rgba(255,255,255,.05); color:#fff; }
  .side nav a.on { background:rgba(62,104,255,.16); color:#7f9cff; font-weight:700; }
  .side nav .ic { font-size:16px; line-height:1; width:20px; text-align:center; }
  .side nav .count {
    margin-inline-start:auto; background:var(--pink); color:var(--dark); font-style:normal;
    font-size:12px; font-weight:700; padding:1px 8px; border-radius:99px;
  }

  .side .who {
    margin-top:auto; padding:16px 20px; border-top:1px solid rgba(255,255,255,.08);
    font-size:12.5px; color:#a9adc9;
  }
  .side .who b { display:block; color:#fff; font-size:13.5px; font-weight:600; }
  .side .who a { color:#a9adc9; font-size:12.5px; }
  .h-ver { font-size:12px; color:var(--muted); }
  /* ⚠ ۱٫۶۶٫۰: دکمهٔ تم و «خروج از حساب» ۷۴×۲۰ بودند (کفِ هدفِ لمسی ۲۴، سند §۱۰ خط ۳۴) */
  .theme-btn {
    display:block; margin:2px 0; padding:4px 0; min-height:28px; border:0; background:none; cursor:pointer;
    color:#a9adc9; font-family:inherit; font-size:12.5px; text-align:start;
  }
  .side .who > a { display:inline-block; padding:4px 0; min-height:28px; }
  .theme-btn:hover { color:#fff; }

  .main { flex:1 1 auto; min-width:0; display:flex; flex-direction:column; }

  .bar {
    background:var(--card); border-bottom:1px solid var(--line);
    padding:16px 32px; display:flex; align-items:center; justify-content:space-between; gap:16px;
  }
  .bar h1 { font-size:18px; margin:0; font-weight:700; }
  .bar .sub { font-size:12.5px; color:var(--muted); margin-top:2px; }
  .h-side { display:flex; align-items:center; gap:10px; flex:0 0 auto; }
  .h-side form.flush { margin:0; }

  /* ⚠ همهٔ تب‌ها تمام‌عرض: سقفِ ۱۰۸۰ پیکسل برداشته شد. روی نمایشگر پهن، جدولِ
     پنج‌ستونی و رشتهٔ گفت‌وگو در یک ستونِ باریک می‌افتادند و نصفِ صفحه خالی
     می‌ماند. */
  .wrap { padding:26px 32px 40px; max-width:none; width:100%; }

  .card {
    background:var(--card); border:1px solid var(--line); border-radius:var(--radius);
    padding:18px 20px; margin-bottom:16px;
    /* ⚠ سایهٔ بسیار ملایم، نه بیشتر: کارت باید از پس‌زمینه جدا شود بدون اینکه
       صفحه شلوغ به‌نظر برسد. سایهٔ سنگین روی یک صفحهٔ پر از کارت، خستگی می‌آورد. */
    box-shadow:var(--shadow);
  }
  .card h2 {
    font-size:15px; margin:0 0 12px; display:flex; align-items:center; gap:9px;
  }
  /* نشانِ کوچکِ کنارِ سرتیتر — فقط رنگِ برند، بدون تصویر و بدون فونتِ نشانه */
  .card h2::before {
    content:''; width:4px; height:16px; border-radius:99px;
    background:var(--blue); flex:0 0 4px;
  }

  /* ---- کاشی‌های آمار ----
     ⚠ عدد بزرگ و برچسبِ کوچک زیرش: کسی که صفحه را باز می‌کند باید در یک نگاه
        وضعیت را بگیرد، نه اینکه جمله بخواند. */
  .tiles { display:grid; grid-template-columns:repeat(auto-fit, minmax(150px, 1fr)); gap:12px; margin-bottom:16px; }
  .tile {
    background:var(--card); border:1px solid var(--line); border-radius:14px;
    padding:15px 16px; box-shadow:var(--shadow);
  }
  .tile .n { font-size:26px; font-weight:700; line-height:1.3; }
  .tile .l { font-size:12.5px; color:var(--muted); }
  .tile.accent .n { color:var(--blue); }
  .tile.warn .n   { color:var(--pink); }
  /* ⚠ رنگ تنها نشانه نیست: یک نوارِ بالای کاشی هم می‌آید تا کسی که تفاوتِ رنگ
     را نمی‌بیند هم تفکیک را بگیرد. */
  .tile.accent { border-top:3px solid var(--blue); }
  .tile.warn   { border-top:3px solid var(--pink); }

  /* دو ستون روی نمایشگر پهن */
  .cols { display:grid; grid-template-columns:1fr 1fr; gap:16px; align-items:start; }
  @media (max-width: 1000px) { .cols { grid-template-columns:1fr; } }

  /* ⚠ ۱٫۶۶٫۰: می‌شکند — سطرِ عنوانِ صفحهٔ محصول (نام + نامِ داخلی + دو نشان) در ۳۷۵ پیکسل
     ۲۶ پیکسل بیرون می‌زد. روی پهنای کافی هیچ فرقی نمی‌کند. */
  .row { display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:12px; }
  .muted { color:var(--muted); font-size:13px; }
  .mono { font-family:var(--dmr-mono, monospace); direction:ltr; display:inline-block; }

  .pill { font-size:12px; font-weight:700; padding:3px 10px; border-radius:99px; white-space:nowrap; }
  /* ⚠ شفافیتِ پس‌زمینه از یک متغیر می‌آید: همان ۱۲٪ که روی سفید ملایم است، روی
     تمِ تیره تقریباً نادیدنی می‌شود و نشان‌ها محو می‌شوند. */
  .pill.free { background:rgba(62,104,255,var(--tint)); color:var(--blue-ink); }
  .pill.busy { background:rgba(239,62,99,var(--tint)); color:var(--pink-ink); }
  .pill.gray { background:rgba(146,150,181,var(--tint)); color:var(--text); }
  /* ⚠ همان صورتیِ هشدارِ برند، و نه یک رنگِ چهارم (نشانِ «عوض شد، نسخه نه»). */
  .pill.warn { background:rgba(239,62,99,var(--tint)); color:var(--pink-ink); }

  /* ⚠ دکمه‌ها روی دسکتاپ به اندازه‌ی محتوایشان‌اند، نه تمام‌عرض؛ ولی ارتفاع
     ۳۸ پیکسل نگه داشته می‌شود تا هدف کلیک ریز نشود. */
  .btn {
    display:inline-flex; align-items:center; justify-content:center; gap:8px;
    min-height:38px; padding:0 16px; border:0; border-radius:9px;
    background:var(--blue); color:#fff; font-family:inherit; font-size:14px;
    font-weight:600; cursor:pointer;
  }
  .btn:hover { filter:brightness(1.08); }
  .btn.ghost { background:transparent; color:var(--text); border:1px solid var(--line); }
  .btn.ghost:hover { background:var(--page); filter:none; }
  /* ⚠ ۱٫۶۶٫۰: متنِ سفید روی صورتیِ برند ۳٫۷۹ بود؛ متنِ تیره روی همان صورتی ۵٫۱ */
  .btn.danger { background:var(--pink); color:var(--dark); }
  .btn.wide { width:100%; }

  /* ردیفِ دکمه‌ها: هر فرم یک عنصر است، پس چیدنشان کنار هم کارِ ظرف است */
  .actions { display:flex; flex-wrap:wrap; gap:10px; align-items:center; }

  .notice { padding:12px 14px; border-radius:12px; font-size:13.5px; margin-bottom:12px; }
  .notice.ok  { background:rgba(62,104,255,var(--tint)); color:var(--blue-ink); }
  .notice.err { background:rgba(239,62,99,var(--tint)); color:var(--pink-ink); }

  label { display:block; font-weight:600; font-size:13.5px; margin-bottom:5px; }
  input[type=text], input[type=password], input[type=file], textarea {
    width:100%; max-width:440px; padding:9px 12px; border:1px solid var(--line);
    border-radius:9px; background:var(--page); font-family:inherit; font-size:14px;
    color:var(--text);
  }
  input:focus, textarea:focus { outline:2px solid var(--blue); outline-offset:1px; }
  input[type=text].ltr { direction:ltr; font-family:var(--dmr-mono, monospace); }
  textarea { min-height:74px; resize:vertical; }
  .field { margin-bottom:14px; }
  .check { display:flex; align-items:center; gap:9px; font-weight:500; }
  .check input { width:17px; height:17px; }

  .item {
    display:flex; align-items:center; justify-content:space-between; gap:14px;
    padding:12px 0; border-top:1px solid var(--line);
  }
  .item:first-of-type { border-top:0; }
  .item .name { font-weight:600; }
  .item:hover { background:rgba(62,104,255,.05); }

  /* ---- شرح تغییرات در تاریخچه ----
     ⚠ ستونِ اطلاعات باید بتواند کوچک‌تر از محتوایش شود، وگرنه یک شرحِ بلند
     کفِ عرضِ ردیف را بالا می‌برد. */
  .item-main { min-width:0; }
  /* متنِ شرح چندخطی نوشته می‌شود و باید چندخطی هم بماند */
  .chlog { white-space:pre-wrap; overflow-wrap:anywhere; margin-top:4px; }
  .chlog-box > summary {
    cursor:pointer; list-style:none; margin-top:4px;
    white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
  }
  .chlog-box > summary::-webkit-details-marker { display:none; }
  .chlog-box > summary:hover { color:var(--blue-ink); }
  .chlog-box > summary:focus-visible { outline:2px solid var(--blue); outline-offset:2px; }
  .chlog-box[open] > summary { white-space:normal; color:var(--blue-ink); }
  .chlog-more { font-size:12px; }

  /* ---- جدول افزونه‌ها ----
     ⚠ ظرفِ اسکرول‌دار دورِ جدول: بدون این، کلِ صفحه به‌جای خودِ جدول افقی می‌لغزد.
     ⚠ fixed تا عرض‌های colgroup واقعاً رعایت شوند (کلاس‌های dmr-col-* پایین‌تر).
     حسابِ عرض‌ها (۱٫۶۵٫۰، دکمه‌های آیکونی): شش جایِ ۳۴ = ۲۰۴ + پنج فاصلهٔ ۶ +
     ۲۸ بالشتک = ۲۶۲ ⇒ ستونِ عملیات ۲۶۴؛ کفِ جدول ۱۲۵۲ (پیش از آن ۵۰۰ و ۱۴۸۸). */
  .tbl-wrap { overflow-x:auto; }
  .ptbl { width:100%; min-width:1252px; border-collapse:collapse; font-size:13.5px;
          table-layout:fixed; }
  .ptbl th, .ptbl td { padding:12px 14px; text-align:start; vertical-align:middle;
                       border-top:1px solid var(--line); white-space:nowrap; }
  .ptbl thead th { border-top:0; font-weight:700; font-size:12.5px; color:var(--muted); }
  .ptbl tbody tr:hover { background:rgba(62,104,255,.05); }
  /* نام می‌تواند بلند باشد و باید بشکند، نه اینکه ستون را پهن کند */
  .ptbl .col-name { white-space:normal; overflow-wrap:anywhere; font-weight:600; }
  /* ۱٫۶۶٫۰: نامِ داخلِ افزونه زیرِ نامِ ثبت‌شده — کم‌رنگ و ریز، چون نامِ اصلی همان بالایی است */
  .ptbl .col-hname { font-weight:400; font-size:12.5px; color:var(--muted); margin-top:2px; }
  .ptbl .col-pick { text-align:center; }
  .ptbl .col-pick input { width:17px; height:17px; }
  .ptbl .col-ops { white-space:nowrap; }
  /* ۲٫۱۲٫۰ (بدهیِ ۹۱): جدولِ ۱۲۵۲ پیکسلی در کارتِ ۶۵۰ پیکسلی (پهنای ۹۶۲) ستونِ «عملیات» را کاملاً پشتِ
     لغزشِ افقی می‌برد. ستونِ عملیات به لبهٔ inline-end ظرف می‌چسبد و همیشه دیده می‌شود؛ ته‌رنگِ کارت
     زیرش تا ستون‌های لغزنده از زیرش پیدا نباشند، و ردیفِ hover همان ته را روی خودش هم می‌گیرد. */
  .ptbl th.col-ops, .ptbl td.col-ops { position:sticky; inset-inline-end:0; z-index:1;
                                       background:var(--card); box-shadow:inset 1px 0 0 var(--line); }
  .ptbl tbody tr:hover td.col-ops { background:linear-gradient(rgba(62,104,255,.05), rgba(62,104,255,.05)), var(--card); }

  /* ---- ستون عملیات: جای ثابت برای هر عمل ----
     ⚠ بدون عرضِ ثابت، دکمهٔ دوم و سوم در هر ردیف از جای دیگری شروع می‌شوند. */
  .ops { display:flex; align-items:center; gap:6px; }
  .ops .slot { flex:0 0 auto; display:block; }
  .ops .slot form { margin:0; }
  .ops .btn { width:100%; justify-content:center; }
  /* ۱٫۶۵٫۰: همهٔ جاها یک‌اندازه‌اند، چون همه آیکون‌اند */
  .ops .slot { width:34px; }
  /* ⚠ جای خالی همان ارتفاعِ دکمه را می‌گیرد تا ردیف کوتاه‌تر نشود */
  .slot-empty { display:block; height:32px; }

  .btn:disabled { opacity:.45; cursor:not-allowed; }
  /* ⚠ دکمه‌های ریزِ داخلِ جدول، ولی نه آن‌قدر ریز که روی لمس بد بخورند */
  .btn.sm { min-height:30px; padding:0 11px; font-size:12.5px; }
  .bulkbar { display:flex; align-items:center; gap:12px; flex-wrap:wrap; margin-bottom:12px; }
  .ptbl .col-when { color:var(--muted); font-size:12.5px; }

  /* سرستونِ مرتب‌شونده: پیوندِ واقعی، پس بدون جاوااسکریپت هم کار می‌کند */
  .ptbl th a { color:var(--muted); text-decoration:none; display:inline-flex;
               align-items:center; gap:5px; }
  .ptbl th a:hover { color:var(--blue-ink); }
  .ptbl th[aria-sort] a { color:var(--blue-ink); }
  .sort-mark { font-size:12px; }

  /* ---- جدول‌های خواندنی (دستورالعمل، ایرادها، تاریخچهٔ کار) ----
     ⚠ کلاسِ خودش و نه ptbl: کفِ ۱۴۸۸ آن جدول اینجا بی‌دلیل اسکرولِ افقی می‌ساخت. */
  .dtbl { width:100%; min-width:760px; border-collapse:collapse; font-size:13.5px; }
  .dtbl th, .dtbl td {
    padding:11px 14px; text-align:start; vertical-align:top;
    border-top:1px solid var(--line);
  }
  .dtbl thead th { border-top:0; font-weight:700; font-size:12.5px; color:var(--muted); }
  .dtbl tbody tr:hover { background:rgba(62,104,255,.05); }
  .dtbl .col-path { overflow-wrap:anywhere; }
  .dtbl .col-when { color:var(--muted); font-size:12.5px; margin-top:4px; }

  /* ---- زبانهٔ «خط لولهٔ لایسنس» (۲٫۱۶٫۰، از پنل؛ list/pipeline.php) ----
     ⚠ همان .dtbl با کفِ عرضِ خودش؛ سرستون‌ها پیوندِ مرتب‌سازی‌اند، پس بی جاوااسکریپت هم کار می‌کنند. */
  .pvtbl { min-width:820px; }
  .pvtbl th a { color:var(--muted); text-decoration:none; display:inline-flex; align-items:center;
                gap:5px; min-height:24px; }
  .pvtbl th a:hover, .pvtbl th[aria-sort] a { color:var(--blue-ink); }
  .pvtbl th a:focus-visible { outline:2px solid var(--blue); outline-offset:2px; border-radius:4px; }
  .pvtbl td { overflow-wrap:anywhere; }
  .pv-why { font-size:12px; margin-top:4px; }
  /* ردیفِ پالایش = همان .dmr-filter (بخشِ ۲ پایین‌تر)، تا یک جزء دو خانه نداشته باشد */
  .pv-count { font-size:12px; margin-inline-start:auto; }

  /* راهنمای زیرِ عنوان */
  .hint { font-size:12.5px; color:var(--muted); line-height:1.8; }

  /* ---- نمایشگر باریک: نوار کنار به بالا می‌آید، چیزی پنهان نمی‌شود ---- */
  @media (max-width: 860px) {
    .shell { display:block; }
    .side { width:auto; flex:none; height:auto; position:static; }
    .side nav { flex-direction:row; flex-wrap:wrap; padding:0 12px 12px; }
    .side nav a { flex:1 1 auto; justify-content:center; }
    .side .who { margin-top:0; }
    .bar, .wrap { padding-inline:16px; }
  }

  /* ⚠ به‌جای style درون‌خطی: فاصله‌ها کلاس دارند */
  .mt6  { margin-top:6px; }
  .mt12 { margin-top:12px; }
  .rule { border:0; border-top:1px solid var(--line); margin:22px 0; }
  .mt14 { margin-top:14px; }
  .mb6  { margin-bottom:6px; }
  .flush { margin:0; }
  .mb-md { margin-bottom:14px; }
  .mt-sm { margin-top:8px; }

  /* ---- صفحه‌ی ورود (و صفحهٔ رمزِ موقت): کارتِ وسطِ صفحه ---- */
  .login-page { display:flex; align-items:center; justify-content:center;
                min-height:100vh; padding:24px; }
  .login-box { width:100%; max-width:420px; }
  .login-head { background:var(--dark); color:#fff; border-radius:16px 16px 0 0; padding:22px 26px; }
  .login-head h1 { margin:0; font-size:18px; }
  .login-head p { margin:4px 0 0; font-size:12.5px; color:#a9adc9; }
  .login-body { background:var(--card); border:1px solid var(--line); border-top:0;
                border-radius:0 0 16px 16px; padding:24px 26px; }
  .login-body input { max-width:none; }

  .empty { text-align:center; padding:28px 12px; color:var(--muted); }

  /* ---- گفت‌وگو: ستونِ رشته‌ها + پنلِ پیام ---- */
  .chat-wrap {
    display:grid; grid-template-columns:288px 1fr; gap:16px;
    align-items:stretch; height:calc(100vh - 190px); min-height:420px;
  }
  @media (max-width: 900px) { .chat-wrap { grid-template-columns:1fr; height:auto; } }

  .thread-col { overflow-y:auto; margin-bottom:0; }
  .thread-main { display:flex; flex-direction:column; min-width:0; padding:0; overflow:hidden; margin-bottom:0; }

  .thread-head {
    display:flex; align-items:center; gap:10px; flex:none;
    padding:14px 16px; border-bottom:1px solid var(--line);
  }
  .thread-head .nm b { display:block; font-size:14.5px; }
  .thread-head .nm span { display:block; font-size:12.5px; color:var(--muted); }

  /* ردیفِ یک گفت‌وگو در ستونِ کنار */
  .thread {
    display:flex; align-items:center; gap:10px; padding:8px 9px; border-radius:10px;
    color:var(--text); border:1px solid transparent; margin-bottom:2px;
  }
  a.thread:hover { background:rgba(62,104,255,.08); }
  .thread.on { background:rgba(62,104,255,var(--tint)); border-color:var(--blue); }
  .thread .nm { min-width:0; flex:1; }
  .thread .nm b { display:block; font-size:13.5px; font-weight:600;
                  white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  .thread .nm span { display:block; font-size:12px; color:var(--muted);
                     white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  .badge {
    background:var(--pink); color:var(--dark); font-style:normal; font-size:12px; font-weight:700;
    padding:1px 8px; border-radius:99px; flex:none;
  }

  .chat { display:flex; flex-direction:column; gap:10px; flex:1 1 auto; min-height:0;
          overflow-y:auto; padding:16px; }
  .thread-main .chat-form { margin:0; padding:14px 16px; border-top:1px solid var(--line); flex:none; }

  /* ⚠ حبابِ پیام، نه ردیفِ تمام‌عرض؛ پیامِ خودِ آدم سمتِ چپ، بقیه سمتِ راست. */
  .msg {
    border:1px solid var(--line); border-radius:14px; padding:9px 13px;
    background:var(--card); max-width:72%; align-self:flex-start;
  }
  .msg.mine { align-self:flex-end; border-color:var(--blue); background:rgba(62,104,255,var(--tint)); }
  .msg.mine .msg-head { flex-direction:row-reverse; }

  /* ---- نمایش مستند ---- */
  .doc-view {
    max-height:420px; overflow-y:auto; padding:14px 16px;
    background:var(--page); border:1px solid var(--line); border-radius:12px;
    font-size:13.5px; line-height:2;
  }
  .doc-view h2, .doc-view h3, .doc-view h4, .doc-view h5 { margin:14px 0 6px; font-size:14px; }
  .doc-view p { margin:0 0 8px; }
  .doc-view ul { margin:0 0 8px; padding-inline-start:20px; }
  .doc-view blockquote {
    margin:0 0 8px; padding:6px 12px;
    border-inline-start:3px solid var(--blue); background:rgba(62,104,255,.06);
  }
  .doc-view code { font-family:var(--dmr-mono, monospace); font-size:12.5px; }
  .doc-code {
    background:var(--dark); color:#e9eaf5; padding:10px 12px; border-radius:8px;
    overflow-x:auto; font-family:var(--dmr-mono, monospace); font-size:12.5px;
    white-space:pre; margin:0 0 8px;
  }

  /* ---- نقلِ‌قولِ پاسخ (نوارِ رنگی در ابتدای خط، منطقی) ---- */
  .quote {
    border-inline-start:3px solid var(--blue); background:rgba(62,104,255,.07);
    border-radius:8px; padding:6px 10px; margin-bottom:6px; font-size:12.5px;
  }
  .quote b { display:block; font-size:12px; }
  .quote span { color:var(--muted); }
  .reply-bar { display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin-bottom:10px; }
  .reply-bar b { display:inline; }
  .reply-bar a { margin-inline-start:auto; font-size:12px; }

  .msg-foot { margin-top:4px; display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
  .msg-foot a { font-size:12px; color:var(--muted); }
  .msg-foot a:hover, .msg-foot a:focus { color:var(--blue-ink); }

  /* ---- نشانِ خوانده‌شدن (عنوانِ متنی هم دارد؛ رنگ تنها نشانه نیست) ---- */
  .ticks { font-size:12px; color:var(--muted); letter-spacing:-2px; }
  .ticks.seen { color:var(--blue-ink); }
  .readers { display:inline-flex; align-items:center; gap:3px; }
  .ava.xs, .ava.xs img, .ava.xs .ph { width:18px; height:18px; flex-basis:18px; font-size:9px; }
  @media (max-width: 620px) { .msg { max-width:88%; } }

  /* ---- ستونِ افراد ---- */
  .people { display:flex; flex-direction:column; gap:2px; overflow-y:auto; }
  .person { display:flex; align-items:center; gap:10px; padding:8px 9px; border-radius:10px; }
  .person:hover { background:var(--page); }
  .person .nm { min-width:0; }
  .person .nm b { display:block; font-size:13.5px; font-weight:600; }
  .person .nm span { display:block; font-size:12px; color:var(--muted); }

  /* ---- تصویر و نشانِ حضور ---- */
  .ava { position:relative; flex:0 0 34px; width:34px; height:34px; }
  .ava img { width:34px; height:34px; border-radius:50%; object-fit:cover; display:block; }
  .ava .ph {
    width:34px; height:34px; border-radius:50%; background:var(--blue); color:#fff;
    display:flex; align-items:center; justify-content:center; font-weight:700; font-size:14px;
  }
  .ava.sm, .ava.sm img, .ava.sm .ph { width:26px; height:26px; flex-basis:26px; font-size:12px; }
  /* ⚠ نقطهٔ حضور حلقهٔ سفید دارد تا روی هر تصویری دیده شود */
  .dot {
    position:absolute; inset-inline-end:-1px; bottom:-1px; width:11px; height:11px;
    border-radius:50%; border:2px solid var(--card); background:var(--muted);
  }
  .dot.on { background:#1faa5f; }
  .msg.mine { border-color:var(--blue); background:rgba(62,104,255,.06); }
  .msg-head { display:flex; gap:10px; align-items:baseline; font-size:13px; margin-bottom:4px; }
  .msg-body { font-size:14px; line-height:1.7; }
  .chat-form { margin-top:14px; display:flex; flex-direction:column; gap:6px; align-items:flex-start; }
  .chat-form textarea { width:100%; }
  .gate { background:var(--page); border-radius:12px; padding:12px 14px;
          white-space:pre-line; font-size:13px; margin-bottom:12px; }
  .foot { text-align:center; font-size:12px; color:var(--muted); padding:18px 12px 8px; }

  /* ۱٫۶۴٫۰: جایگزینِ دو style درون‌خطیِ تبِ حساب و گفت‌وگو */
  .row.dmr-row-start { justify-content:flex-start; gap:14px; }
  .row.dmr-row-start.dmr-gap-10 { gap:10px; }

/* =====================================================================
   بخشِ ۲ — اجزایی که از پنل مدیریت آمدند (۱٫۶۲٫۰ و ۱٫۶۳٫۰)
   ===================================================================== */

/* ---- ورودی‌هایی که پایه نداشت ---- */
.wrap select,
.wrap input[type=number],
.wrap input[type=email],
.wrap input[type=search] {
  width: 100%; padding: 10px 12px; border-radius: 10px; font: inherit;
  background: var(--page); color: var(--text); border: 1px solid var(--line);
}
.wrap select:focus,
.wrap input[type=number]:focus,
.wrap input[type=search]:focus { outline: 2px solid var(--blue); outline-offset: 1px; }

/* ---- نشانِ «فقط مدیر» روی کارت‌ها ----
   تا مدیر بداند این کارت را عضوِ عادی نمی‌بیند، و عکسِ صفحه برای آموزش گمراه‌کننده نشود. */
.dmr-admin-tag {
  display: inline-block; margin-inline-start: 8px; padding: 0 9px; border-radius: 99px;
  font-size: 12px; font-weight: 700; line-height: 20px; vertical-align: middle;
  background: rgba(62, 104, 255, var(--tint)); color: var(--blue-ink);
}

.notice.warn {
  border-color: rgba(239, 167, 62, .55);
  background: rgba(239, 167, 62, var(--tint));
}

/* ---- فرمِ تعریفِ محصول: دو ستون روی نمایشگرِ پهن ---- */
.dmr-form-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 4px 18px; }
.dmr-form-grid .dmr-span { grid-column: 1 / -1; }
.dmr-form-grid .field { min-width: 0; }
@media (max-width: 900px) { .dmr-form-grid { grid-template-columns: minmax(0, 1fr); } }
/* ۲٫۲۱٫۰: عنوانِ فیلدی که کنترلِ ورودی ندارد (همان شکلِ label، بی‌آنکه label بی‌هدف باشد) + مقدارهای قدیمیِ فقط‌خواندنی */
.dmr-form-grid .dmr-lbl { display: block; font-weight: 600; font-size: 13.5px; margin-bottom: 5px; }
.dmr-legacy { display: grid; grid-template-columns: max-content minmax(0, 1fr); gap: 4px 14px; margin: 6px 0 0; }
.dmr-legacy .dmr-legacy-k { font-weight: 500; }
.dmr-legacy .dmr-legacy-v { margin: 0; overflow-wrap: anywhere; min-width: 0; }
@media (max-width: 600px) { .dmr-legacy { grid-template-columns: minmax(0, 1fr); } .dmr-legacy .dmr-legacy-v { margin-bottom: 6px; } }

.dmr-check-line { display: flex; align-items: flex-start; gap: 8px; font-weight: 400; }
.dmr-check-line input { margin-top: 6px; }

/* ---- جزئیات تاشو: گزارشِ دروازه و فایل‌های تغییرکرده ---- */
.dmr-details { margin-top: 8px; border-top: 1px dashed var(--line); padding-top: 6px; }
.dmr-details > summary { cursor: pointer; color: var(--muted); font-size: 13px; }
.dmr-details > summary:focus-visible { outline: 2px solid var(--blue); outline-offset: 2px; }
.dmr-line { display: flex; align-items: baseline; gap: 8px; padding: 3px 0; font-size: 13px; flex-wrap: wrap; }
.dmr-line .mono { overflow-wrap: anywhere; }

/* ---- نمایشِ تفاوتِ یک فایل ---- */
.dmr-diff {
  direction: ltr; text-align: left; font-family: ui-monospace, Menlo, Consolas, monospace;
  font-size: 12.5px; line-height: 1.6; border: 1px solid var(--line); border-radius: 10px;
  overflow-x: auto; background: var(--page);
}
.dmr-diff .dl { display: grid; grid-template-columns: 3.5em 3.5em 1.5em 1fr; white-space: pre; }
.dmr-diff .ln { color: var(--muted); text-align: right; padding: 0 6px; user-select: none; }
.dmr-diff .sg { text-align: center; color: var(--muted); }
.dmr-diff .tx { padding-inline-end: 12px; }
.dmr-diff .add { background: rgba(31, 170, 95, .16); }
.dmr-diff .del { background: rgba(239, 62, 99, .16); }
.dmr-diff .gap { color: var(--muted); background: rgba(127, 127, 160, .08); }

/* ---- ردیف‌های نسخه، رویداد و کار ---- */
.dmr-rel { padding: 12px 0; border-top: 1px solid var(--line); }
.dmr-rel:first-of-type { border-top: 0; }
.dmr-rel-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.dmr-rel-head .mono { font-weight: 700; }
.dmr-rel-dl { margin-inline-start: auto; display: flex; gap: 6px; flex-wrap: wrap; }
.dmr-lic-form { display: flex; gap: 6px; align-items: center; flex-wrap: wrap; margin-top: 6px; }
.dmr-lic-form input[type=file] { max-width: 15rem; }
/* ۲٫۱۱٫۰ (بدهی‌های ۷۶ و ۶۳): خطِ وضعیتِ لایسنس‌دار + بارگذاریِ دستی، بسته زیرِ «راهِ جایگزین» و فقط برای مدیر */
.dmr-lic-status { line-height: 1.9; }
.dmr-lic-alt { margin-top: 10px; }
.dmr-lic-alt > summary { cursor: pointer; color: var(--muted); font-size: 13px; }
.dmr-lic-alt > summary:focus-visible { outline: 2px solid var(--blue); outline-offset: 2px; }
.dmr-lic-alt[open] > summary { margin-bottom: 10px; }

.dmr-log { display: grid; grid-template-columns: minmax(0, 220px) minmax(0, 1fr); gap: 4px 16px;
           padding: 9px 0; border-top: 1px solid var(--line); }
.dmr-log:first-of-type { border-top: 0; }
.dmr-pre { white-space: pre-line; overflow-wrap: anywhere; }
@media (max-width: 700px) { .dmr-log { grid-template-columns: minmax(0, 1fr); } }

/* ---- کارتِ خطرناک (حذف) ---- */
.dmr-danger { border: 1px solid rgba(239, 62, 99, .45); }

/* ---- ردیفِ فیلتر (فهرست‌ها، ایرادها، تاریخچهٔ کار) ---- */
.dmr-filter { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; margin-bottom: 12px; }
.dmr-filter input[type=search] { flex: 1 1 220px; width: auto; }
.dmr-filter select { width: auto; flex: 0 0 auto; }

/* ---- جدولِ فهرستِ محصول (۱٫۶۳٫۰) ----
   عرضِ ستون‌ها از colgroup می‌آید (جدول table-layout:fixed است): انتخاب ۴۶ = تیک
   ۱۷ + بالشتکِ ۲۸ · نسخه ۱۰۰ · چهار ستونِ میانی هر کدام ۱۵۵ · عملیات ۲۶۴ (۱٫۶۵٫۰). */
.dmr-col-pick { width: 46px; }
.dmr-col-ver  { width: 100px; }
.dmr-col-mid  { width: 155px; }
.dmr-col-ops  { width: 264px; }

/* ---- دکمهٔ آیکونی با راهنمای کوچک (۱٫۶۵٫۰) ----
   ⚠ راهنما با :focus-visible هم باز می‌شود، نه فقط :hover — کاربرِ صفحه‌کلید هم باید
   بفهمد دکمه چه می‌کند. نامِ واقعی برای صفحه‌خوان aria-label است؛ data-tip فقط نمایش.
   ⚠ هدفِ لمسی ۳۲×۳۲، بالای کفِ ۲۴ (+A11Y؛ سند §۱۰ خط ۳۴). */
.dmr-ib { position: relative; width: 32px; height: 32px; padding: 0; display: inline-flex;
          align-items: center; justify-content: center; }
.dmr-ib svg { flex: 0 0 auto; }
.dmr-ib::after {
  /* ⚠ به لبهٔ inline-end دکمه چسبیده و رو به درون باز می‌شود، نه وسط‌چین: ستونِ عملیات
     آخرین ستونِ جدول است و راهنمای وسط‌چینِ دکمهٔ آخر را ظرفِ اسکرول‌دار می‌بُرید
     (دیده‌شده در مرورگر، ۱٫۶۵٫۰). */
  content: attr(data-tip); position: absolute; inset-block-end: calc(100% + 6px);
  inset-inline-end: 0;
  background: var(--text); color: var(--page); font-size: 12px; font-weight: 600;
  line-height: 1.5; padding: 4px 8px; border-radius: 6px; white-space: nowrap;
  pointer-events: none; opacity: 0; visibility: hidden; transition: opacity .12s; z-index: 30;
}
.dmr-ib:hover::after, .dmr-ib:focus-visible::after { opacity: 1; visibility: visible; }
.dmr-ib:focus-visible { outline: 2px solid var(--blue); outline-offset: 2px; }
.dmr-ib-count {
  position: absolute; inset-block-start: -6px; inset-inline-end: -6px; min-width: 17px; height: 17px;
  padding: 0 4px; border-radius: 99px; background: var(--pink); color: var(--dark);
  font-size: 12px; font-weight: 700; line-height: 17px; text-align: center;
}

/* ---- «اصلاحات» — کارت و مدال (۱٫۶۵٫۰) ---- */
.dmr-fixes-lead { margin: 6px 0 12px; }
.dmr-fix-list { list-style: none; margin: 0 0 14px; padding: 0; display: grid; gap: 10px; }
.dmr-fix { border: 1px solid var(--line); border-radius: 10px; padding: 10px 12px; }
.dmr-fix-head { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 10px; margin-bottom: 6px; }
.dmr-fix-id { color: var(--muted); }
.dmr-fix-tools { margin-top: 8px; }
.dmr-fix-tools > summary { cursor: pointer; color: var(--muted); font-size: 13px; }
.dmr-fix-tools > summary:focus-visible { outline: 2px solid var(--blue); outline-offset: 2px; }
.dmr-fix-form { display: grid; gap: 8px; margin-top: 8px; }
.dmr-fix-form textarea { width: 100%; min-height: 72px; resize: vertical; }
.dmr-fix-form .btn { justify-self: start; }
.dmr-fix-new { border-top: 1px solid var(--line); padding-top: 12px; }
.danger-text { color: var(--pink-ink); }

/* مدال: یک <dialog> برای کلِ صفحه؛ محتوایش همان تکهٔ کارتِ صفحهٔ محصول است */
.dmr-modal { width: min(640px, calc(100vw - 32px)); max-height: calc(100vh - 48px); padding: 0;
             border: 1px solid var(--line); border-radius: 14px; background: var(--card); color: var(--text);
             direction: rtl; text-align: start; }
.dmr-modal::backdrop { background: rgba(6, 6, 28, .55); }
.dmr-modal-head { display: flex; align-items: center; justify-content: space-between; gap: 10px;
                  padding: 14px 16px; border-bottom: 1px solid var(--line); }
.dmr-modal-head h2 { margin: 0; font-size: 16px; }
.dmr-modal-body { padding: 14px 16px 18px; overflow-y: auto; max-height: calc(100vh - 130px); }

/* حالت‌ها با شمارش — همان الگوی «همه (۱۲) | در قفل (۳)» */
.dmr-views { display: flex; flex-wrap: wrap; gap: 4px 14px; margin: 4px 0 10px; font-size: 13.5px; }
.dmr-views a { color: var(--muted); padding: 2px 0; border-bottom: 2px solid transparent; }
.dmr-views a:hover { color: var(--text); }
.dmr-views a.on { color: var(--text); font-weight: 700; border-bottom-color: var(--blue); }
.dmr-views a:focus-visible { outline: 2px solid var(--blue); outline-offset: 2px; }
.dmr-views .n { font-weight: 400; color: var(--muted); }

.dmr-pager { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap;
             gap: 8px; margin-top: 12px; }
.dmr-pager nav { display: flex; gap: 4px; flex-wrap: wrap; align-items: center; }

/* ---- «کارهای من» (۲٫۳٫۰، list/tasks.php) ---- */
.dmr-task-form { display: grid; gap: 4px; }
.dmr-task-form .btn { justify-self: start; }
.dmr-task-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 0 12px; }
.dmr-task-grid .field { min-width: 0; }
.dmr-task-grid select, .dmr-task-grid input[type=text] { width: 100%; max-width: none; }
.dmr-task-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; }
.dmr-task { border: 1px solid var(--line); border-radius: 10px; padding: 10px 12px; min-width: 0; }
.dmr-task-focus { border-color: var(--blue); }
.dmr-task-head { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; }
.dmr-task-title { overflow-wrap: anywhere; }
.dmr-task-meta { display: flex; flex-wrap: wrap; gap: 2px 14px; margin-top: 4px; }
.dmr-task-body, .dmr-task-delivery { margin-top: 6px; }
.dmr-task-ops { margin-top: 8px; }
.dmr-task-move { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.dmr-task-log { margin: 6px 0 0; padding-inline-start: 18px; font-size: 13px; display: grid; gap: 3px; }
.dmr-task-confirm { width: 8rem; max-width: 8rem; }

/* ---- فقط برای صفحه‌خوان ---- */
.dmr-sr { position: absolute; inset-inline-start: 0; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); }
