
/* ══════════════════════════════════════════════════════════════════
   ZIGMA DESIGN SYSTEM — Tokens (نشستِ ۲۰۲۶/۰۸/۲۱، بعد از تأییدِ Preview
   در ui-preview/dashboard.html و ui-preview/components.html).
   فازِ اول: پوستهٔ دائمی (هدر/سایدبار) + دکمهٔ عمومی + ماژولِ داشبورد.
   بقیهٔ ماژول‌ها (فروش/انبار/حساب‌ها/...) عمداً دست‌نخورده مانده‌اند —
   هرکدام باید جدا Preview و تأیید شوند، طبقِ روالِ توافق‌شده.
   ══════════════════════════════════════════════════════════════════ */
:root{
  --bg:            #F7F8FA;
  --surface:       #FFFFFF;
  --surface-2:     #FBFBFC;
  --border:        #E4E7EC;
  --border-strong: #D0D5DD;
  --text-primary:  #101828;
  --text-secondary:#475467;
  --text-muted:    #667085;
  --text-faint:    #98A2B3;

  --primary:        #1B7A4D;
  --primary-hover:  #146239;
  --primary-active: #0F4E2E;
  --primary-subtle: #E8F5EC;
  --primary-border: #BFE3CC;

  --danger:        #C0342D;
  --danger-subtle: #FBEAE9;
  --warning:        #A15C0A;
  --warning-subtle: #FDF2E3;
  --info:        #2E5AAC;
  --info-subtle: #EAF1FC;
  --teal:        #0D7A63;
  --teal-subtle: #E7F5F1;
  --violet:        #5B3FBA;
  --violet-subtle: #EFEAFB;
  --orange:        #B5530A;
  --orange-subtle: #FBEBDD;

  --r-sm: 6px;
  --r-md: 10px;
  --r-full: 999px;
  --shadow-card: 0 1px 2px rgba(16,24,40,.04), 0 1px 3px rgba(16,24,40,.06);
  --shadow-pop: 0 4px 6px rgba(16,24,40,.05), 0 12px 24px rgba(16,24,40,.10);

  --font-ui: 'Vazirmatn', 'Segoe UI', Tahoma, Arial, sans-serif;
}
*,*::before,*::after{box-sizing:border-box;}
html,body{margin:0;padding:0;height:100%;overflow:hidden;}
body{font-family:var(--font-ui);background:var(--bg);color:var(--text-primary);font-size:13px;}
a{text-decoration:none;color:inherit;}
button{font-family:inherit;}
input,select,textarea{font-family:inherit;}
:focus-visible{outline:2px solid var(--primary);outline-offset:2px;}
.hdr{height:48px;background:var(--surface);border-bottom:1px solid var(--border);display:flex;align-items:center;padding:0 14px;gap:12px;position:sticky;top:0;z-index:60;}
.hdr-logo{font-size:14px;font-weight:800;color:var(--text-primary);display:flex;align-items:center;gap:5px;white-space:nowrap;}
.logo-badge{width:22px;height:22px;background:var(--primary);border-radius:var(--r-sm);display:flex;align-items:center;justify-content:center;}
.hdr-search{flex:1;max-width:280px;position:relative;}
.hdr-search input{width:100%;padding:6px 32px 6px 12px;border:1px solid var(--border);border-radius:var(--r-sm);font-size:12px;background:var(--bg);outline:none;}
.hdr-search input:focus{border-color:var(--primary-border);background:var(--surface);}
.hdr-search-ico{position:absolute;right:10px;top:50%;transform:translateY(-50%);color:var(--text-faint);pointer-events:none;}
.hdr-right{margin-right:auto;display:flex;align-items:center;gap:4px;}
.hdr-username{font-size:12px;color:var(--text-secondary);margin-left:4px;}
.hdr-ico{width:32px;height:32px;border-radius:50%;border:none;background:transparent;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--text-muted);position:relative;}
.hdr-ico:hover{background:var(--surface-2);}
/* ── نشانگرِ «کارهای ناهمگامِ سپیدار» کنارِ زنگوله (درخواستِ کاربر، ۲۴ شهریور ۱۴۰۵) ──────────
   خاموش: خاکستریِ کم‌رنگ و کاملاً بی‌صدا — نباید با زنگوله رقابت کند.
   روشن: قرمزِ پُر + هالهٔ تپنده + شمارنده. کاربر گفت «جوری باشد که وقتی روشن می‌شود قشنگ جلبِ
   توجه کند» — پس سه نشانهٔ هم‌زمان دارد (رنگ، حرکت، عدد) تا از گوشهٔ چشم هم دیده شود. */
.hdr-sync-ico{opacity:.42;transition:opacity .2s,color .2s,background .2s;}
.hdr-sync-ico:hover{opacity:.75;}
.hdr-sync-ico.on{opacity:1;color:#fff;background:var(--danger);box-shadow:0 0 0 0 rgba(220,38,38,.55);animation:hdrSyncPulse 1.8s ease-out infinite;}
.hdr-sync-ico.on:hover{background:#b91c1c;}
.hdr-sync-ico.on svg{animation:hdrSyncSpinNudge 1.8s ease-in-out infinite;}
.hdr-sync-badge{position:absolute;top:-3px;left:-3px;min-width:16px;height:16px;padding:0 3px;border-radius:8px;background:var(--warning,#d97706);color:#fff;font-size:10px;font-weight:700;line-height:16px;text-align:center;font-family:inherit;box-shadow:0 0 0 2px var(--surface,#fff);}
/* حالتِ «در حالِ تلاش» — تا نتیجه برنگردد، کاربر بداند کلیکش گرفته شده */
.hdr-sync-ico.busy{opacity:1;color:#fff;background:var(--text-muted);animation:none;pointer-events:none;}
.hdr-sync-ico.busy svg{animation:hdrSyncSpin .9s linear infinite;}
@keyframes hdrSyncPulse{0%{box-shadow:0 0 0 0 rgba(220,38,38,.55);}70%{box-shadow:0 0 0 9px rgba(220,38,38,0);}100%{box-shadow:0 0 0 0 rgba(220,38,38,0);}}
@keyframes hdrSyncSpin{to{transform:rotate(360deg);}}
@keyframes hdrSyncSpinNudge{0%,62%{transform:rotate(0);}80%{transform:rotate(-28deg);}100%{transform:rotate(0);}}
/* احترام به تنظیمِ «کاهشِ حرکت» سیستمِ کاربر — رنگ و شمارنده به‌تنهایی هم جلبِ توجه می‌کنند */
@media (prefers-reduced-motion:reduce){
  .hdr-sync-ico.on,.hdr-sync-ico.on svg,.hdr-sync-ico.busy svg{animation:none;}
  .hdr-sync-ico.on{box-shadow:0 0 0 3px rgba(220,38,38,.35);}
}
.hdr-av{width:32px;height:32px;border-radius:50%;background:var(--primary);color:white;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;cursor:pointer;}
.atabs{background:white;border-bottom:1px solid #e5e7eb;display:flex;align-items:center;padding:0 14px;overflow-x:auto;scrollbar-width:none;}
.atabs::-webkit-scrollbar{display:none;}
.atab{padding:10px 12px;font-size:12.5px;border:none;background:transparent;cursor:pointer;color:#6b7280;white-space:nowrap;border-bottom:2px solid transparent;transition:all .15s;}
.atab:hover{color:#374151;}
.atab.active{color:#16a34a;border-bottom-color:#22c55e;font-weight:600;}
.layout{display:flex;height:calc(100vh - 86px);overflow:hidden;}
.sidebar{order:1;width:186px;min-width:186px;background:var(--surface);border-left:1px solid var(--border);display:flex;flex-direction:column;overflow-y:auto;padding:6px 0;scrollbar-width:none;}
.main{order:2;}
.sidebar::-webkit-scrollbar{display:none;}
.snav{display:flex;align-items:center;gap:9px;padding:9px 14px;font-size:12.5px;color:var(--text-secondary);cursor:pointer;border-right:3px solid transparent;transition:background .12s;user-select:none;}
.snav:hover{background:var(--surface-2);color:var(--text-primary);}
.snav.active{background:var(--primary-subtle);color:var(--primary-active);font-weight:600;border-right-color:var(--primary);}
.snav svg{flex-shrink:0;opacity:.7;}
.snav.active svg{opacity:1;}
.sdiv{height:1px;background:var(--border);margin:4px 10px;}
.ssp{flex:1;}
.main{flex:1;overflow-y:auto;padding:20px;scrollbar-width:thin;}
.psec{display:none;}
.psec.active{display:block;}
.ph{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:18px;flex-wrap:wrap;gap:10px;}
.ph-ttl h1{margin:0 0 3px;font-size:19px;font-weight:800;color:var(--text-primary);letter-spacing:-.2px;}
.ph-ttl p{margin:0;font-size:12.5px;color:var(--text-muted);}
.btn-g{background:var(--primary);color:white;border:none;padding:8px 16px;border-radius:var(--r-sm);font-size:13px;cursor:pointer;font-weight:600;display:inline-flex;align-items:center;gap:5px;transition:background .12s;}
.btn-g:hover{background:var(--primary-hover);}
.btn-out{background:var(--surface);color:var(--text-secondary);border:1px solid var(--border);padding:7px 13px;border-radius:var(--r-sm);font-size:12px;cursor:pointer;display:inline-flex;align-items:center;gap:5px;transition:background .12s,border-color .12s,color .12s;}
.btn-out:hover{background:var(--surface-2);border-color:var(--border-strong);color:var(--text-primary);}
.btn-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap;}
.kpi-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:20px;}
.kpi-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md);padding:14px;display:flex;align-items:center;gap:12px;box-shadow:var(--shadow-card);}
.kpi-ico{width:44px;height:44px;border-radius:var(--r-sm);display:flex;align-items:center;justify-content:center;font-size:20px;flex-shrink:0;}
.kpi-val{font-size:21px;font-weight:700;color:var(--text-primary);line-height:1.1;}
.kpi-lbl{font-size:10.5px;color:var(--text-muted);margin-top:2px;}
.ch-row{display:grid;gap:12px;margin-bottom:14px;}
.cr3{grid-template-columns:2fr 1fr 1fr;}
.cr3b{grid-template-columns:1fr 1fr 1fr;}
.ch-card{background:white;border:1px solid #e5e7eb;border-radius:12px;padding:14px;}
.ch-ttl{font-size:12px;font-weight:600;color:#374151;margin-bottom:10px;}
.ch-wrap{position:relative;height:148px;}
.rep-toolbar{display:flex;gap:8px;margin-bottom:10px;flex-wrap:wrap;align-items:center;}
.fil-sel{padding:7px 10px;border:1px solid var(--border);border-radius:var(--r-sm);font-size:12px;background:var(--surface);color:var(--text-secondary);cursor:pointer;outline:none;}
.fil-inp{padding:7px 32px 7px 12px;border:1px solid var(--border);border-radius:var(--r-sm);font-size:12px;outline:none;min-width:200px;}
.fil-inp:focus{border-color:var(--primary);}
.fil-inp-wrap{position:relative;}
.fil-inp-ico{position:absolute;right:9px;top:50%;transform:translateY(-50%);color:var(--text-faint);pointer-events:none;}
.alpha-bar{display:flex;gap:2px;flex-wrap:wrap;background:white;border:1px solid #e5e7eb;border-radius:8px;padding:5px 8px;margin-bottom:12px;}
.abtn{padding:4px 6px;font-size:11.5px;border:none;background:transparent;cursor:pointer;border-radius:5px;color:#374151;}
.abtn:hover{background:#f3f4f6;}
.abtn.active{background:#22c55e;color:white;font-weight:600;}
.rep-grp-hdr{display:flex;align-items:center;gap:10px;padding:7px 12px;background:#f0fdf4;border:1px solid #bbf7d0;border-radius:8px;margin-bottom:2px;font-size:12px;color:#15803d;font-weight:600;}
.rep-grp-av{width:26px;height:26px;border-radius:50%;background:#22c55e;color:white;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;flex-shrink:0;}
.rep-row{display:flex;align-items:center;gap:10px;padding:10px 12px;background:white;border:1px solid #f3f4f6;border-radius:8px;margin-bottom:3px;transition:box-shadow .15s;}
.rep-row:hover{box-shadow:0 1px 5px rgba(0,0,0,.07);}
.rep-av{width:36px;height:36px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:700;color:white;flex-shrink:0;}
.rep-info{min-width:130px;}
.rep-nm{font-weight:600;color:#111827;font-size:13px;}
.rep-ph{font-size:11px;color:#9ca3af;direction:ltr;margin-top:1px;}
.rep-fld{flex:1;font-size:12px;color:#6b7280;}
.rep-acts{display:flex;gap:3px;flex-shrink:0;}
.rep-abt{width:28px;height:28px;border-radius:6px;border:none;background:transparent;cursor:pointer;color:#9ca3af;display:flex;align-items:center;justify-content:center;}
.rep-abt:hover{background:#f3f4f6;color:#374151;}
.dg-toolbar{display:flex;gap:8px;margin-bottom:12px;flex-wrap:wrap;align-items:center;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md);padding:10px 14px;box-shadow:var(--shadow-card);}
.dg-search-wrap{position:relative;flex:1;min-width:180px;}
.dg-search{width:100%;padding:7px 32px 7px 12px;border:1px solid var(--border);border-radius:var(--r-sm);font-size:12px;outline:none;background:var(--bg);}
.dg-search:focus{border-color:var(--primary-border);background:var(--surface);}
.dg-search-ico{position:absolute;right:10px;top:50%;transform:translateY(-50%);color:var(--text-faint);pointer-events:none;}
.dg-search-clear{position:absolute;left:6px;top:50%;transform:translateY(-50%);width:18px;height:18px;border-radius:50%;display:none;align-items:center;justify-content:center;color:var(--text-faint);cursor:pointer;font-size:15px;line-height:1;user-select:none;}
.dg-search-clear:hover{background:var(--border);color:var(--text-secondary);}
.dg-search-wrap.has-value .dg-search-clear{display:flex;}
.dg-search-wrap.has-value .dg-search{padding-left:26px;}
.dg-fil{padding:7px 10px;border:1px solid var(--border);border-radius:var(--r-sm);font-size:12px;background:var(--surface);color:var(--text-secondary);cursor:pointer;outline:none;min-width:110px;}
.dg-fil:focus{border-color:var(--primary-border);}
/* ── فیلترِ فعال (درخواستِ کاربر، ۲۴ شهریور ۱۴۰۵) ────────────────────────────────────────
   «وقتی در ماژول موجودی هر کدام از فیلترها فعال است و روی جدول اعمال می‌شود، رنگ آن فیلتر را
   به این زرد تغییر بده تا کاربر متوجه شود کدام فیلتر فعال است.»
   زردِ «خورشیدی» دقیقاً همان کدی است که کاربر فرستاد: #FCCC59.
   متن عمداً قهوه‌ای‌تیره است نه خاکستری — رویِ این زرد، خاکستریِ --text-secondary نسبتِ
   کنتراستِ کافی ندارد و متنِ فیلتر سخت‌خوان می‌شد. */
:root{--filter-on:#FCCC59;--filter-on-border:#d9a72b;--filter-on-text:#4a3600;}
.fil-on{background:var(--filter-on) !important;border-color:var(--filter-on-border) !important;color:var(--filter-on-text) !important;font-weight:700;}
.fil-on::placeholder{color:#7a5c12;}
/* جعبهٔ جست‌وجو آیکونِ ذره‌بین و دکمهٔ ✕ را بیرونِ خودِ input دارد؛ بدونِ این، آن دو رویِ
   کادرِ زرد با رنگِ کم‌رنگِ قبلی می‌ماندند و ناخوانا می‌شدند.
   دو خانوادهٔ نوارِ ابزار در برنامه هست: `dg-*` (فروش/موجودی/حواله/شکایات) و `fil-*`
   (مالی و چک) — هر دو باید پوشش داده شوند. */
.dg-search-wrap.fil-on-wrap .dg-search-ico,.dg-search-wrap.fil-on-wrap .dg-search-clear,
.fil-inp-wrap.fil-on-wrap .fil-inp-ico{color:var(--filter-on-text);}
/* چندانتخابی‌ها (سایز/انبار) فهرستِ بازند: خودِ کادر زرد می‌شود و ردیف‌های انتخاب‌شده پررنگ‌تر. */
select[multiple].fil-on option:checked{background:var(--filter-on-border) !important;color:#2c2000 !important;font-weight:700;}
.dg-count-txt{font-size:11.5px;color:var(--text-faint);margin-right:auto;white-space:nowrap;}
.dg-wrap{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md);overflow-x:auto;scrollbar-width:thin;box-shadow:var(--shadow-card);}
.dg-wrap::-webkit-scrollbar{height:5px;}
.dg-wrap::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px;}
.dg-tbl{width:100%;border-collapse:collapse;min-width:1060px;}
.dg-thead th{position:sticky;top:0;z-index:5;background:var(--surface);border-bottom:1px solid var(--border);text-align:right;padding:10px 13px;font-size:11px;color:var(--text-muted);font-weight:700;white-space:nowrap;user-select:none;}
.dg-thead th.sortable{cursor:pointer;transition:background .12s,color .12s;}
.dg-thead th.sortable:hover{background:var(--primary-subtle);color:var(--primary-active);}
.dg-thead th.sort-asc .dg-sort-ico::after{content:'↑';color:var(--primary);margin-right:3px;}
.dg-thead th.sort-desc .dg-sort-ico::after{content:'↓';color:var(--primary);margin-right:3px;}
.dg-sort-ico{display:inline-block;opacity:.5;font-size:10px;}
.dg-thead th.sort-asc .dg-sort-ico,.dg-thead th.sort-desc .dg-sort-ico{opacity:1;}
.dg-tbl tbody tr{transition:background .08s;cursor:pointer;}
.dg-tbl tbody tr:hover td{background:var(--primary-subtle);}
.dg-tbl td{padding:10px 13px;border-top:1px solid var(--border);font-size:12.5px;color:var(--text-secondary);vertical-align:middle;}
.dg-tbl tbody tr:nth-child(even) td{background:var(--surface-2);}
.dg-tbl tbody tr:nth-child(even):hover td{background:var(--primary-subtle);}
.dg-thead th.dg-pin,.dg-tbl td.dg-pin{position:sticky;left:0;z-index:4;box-shadow:-2px 0 6px rgba(0,0,0,.05);}
.dg-thead th.dg-pin{background:var(--surface);z-index:6;}
.dg-tbl td.dg-pin{background:var(--surface);}
.dg-tbl tbody tr:nth-child(even) td.dg-pin{background:var(--surface-2);}

/* ── بلوکِ «یک پیش‌فاکتور کلی» در جدولِ فروش (۲۱ شهریور ۱۴۰۵) ─────────────────────
   درخواستِ کاربر: دو پیش‌فاکتوری که از یک سندِ کلی آمده‌اند باید در یک نگاه به‌هم مرتبط دیده
   شوند. سه لایه با هم کار می‌کنند: هم‌رنگیِ پس‌زمینه، ریلِ عمودیِ بنفش در دو لبهٔ جدول، و
   کادرِ بالا/پایین که بلوک را می‌بندد.

   رنگ عمداً همان بنفشِ نشانِ ⛓ است (--violet) تا چشم بدونِ توضیح ربطشان را بگیرد. پس‌زمینه
   هم عمداً کم‌رنگ‌تر از نشان است تا متنِ ردیف خوانا بماند و جدول شلوغ نشود.

   جدول RTL است: td:first-child لبهٔ *راست* است و td:last-child لبهٔ چپ. */
.dg-tbl tbody tr.gp-linked td,
.dg-tbl tbody tr.gp-linked:nth-child(even) td{background:var(--violet-subtle);}
.dg-tbl tbody tr.gp-linked:hover td,
.dg-tbl tbody tr.gp-linked:nth-child(even):hover td{background:#E4DCF7;}
.dg-tbl tbody tr.gp-linked td:first-child{border-right:3px solid var(--violet);}
.dg-tbl tbody tr.gp-linked td:last-child{border-left:3px solid var(--violet);}
.dg-tbl tbody tr.gp-first td{border-top:2px solid var(--violet);}
.dg-tbl tbody tr.gp-last td{border-bottom:2px solid var(--violet);}
.dg-tbl tbody tr.gp-first td:first-child{border-top-right-radius:9px;}
.dg-tbl tbody tr.gp-first td:last-child{border-top-left-radius:9px;}
.dg-tbl tbody tr.gp-last td:first-child{border-bottom-right-radius:9px;}
.dg-tbl tbody tr.gp-last td:last-child{border-bottom-left-radius:9px;}
/* ستونِ چسبیدهٔ راست (dg-pin) پس‌زمینهٔ خودش را دارد و باید با بلوک هم‌رنگ بماند، وگرنه یک
   نوارِ سفید وسطِ کادر می‌افتد. */
.dg-tbl tbody tr.gp-linked td.dg-pin,
.dg-tbl tbody tr.gp-linked:nth-child(even) td.dg-pin{background:var(--violet-subtle);}
.dg-tbl tbody tr.gp-linked:hover td.dg-pin{background:#E4DCF7;}
/* نمایندگان/مشتریان: عنوان صفحه + نوارِ فیلتر ثابت بمانند، فقط ردیف‌های جدول در فضای باقی‌ماندهٔ زیر آن‌ها اسکرول شوند (سرصفحهٔ ستون‌های جدول از قبل sticky بود، اینجا فقط .dg-wrap صاحبِ اسکرولِ داخلیِ خودش می‌شود). */
#s-reps.psec.active{display:flex;flex-direction:column;height:100%;}
#s-reps .dg-wrap{flex:1;min-height:0;overflow-y:auto;}
/* همان الگوی نمایندگان/مشتریان برای بقیهٔ ماژول‌های لیستی: بخش عنوان/فیلتر/تب فیکس، فقط ردیف‌های جدول اسکرول. */
#s-production.psec.active{display:flex;flex-direction:column;height:100%;}
#s-production .prod-tbl-wrap{flex:1;min-height:0;overflow-y:auto;}
#s-complaints.psec.active{display:flex;flex-direction:column;height:100%;}
#s-complaints .dg-wrap{flex:1;min-height:0;overflow-y:auto;}
#s-sales.psec.active{display:flex;flex-direction:column;height:100%;}
#s-sales .dg-wrap{flex:1;min-height:0;overflow-y:auto;}
#s-inventory.psec.active{display:flex;flex-direction:column;height:100%;}
#s-inventory .dg-wrap{flex:1;min-height:0;overflow-y:auto;}
#s-finance.psec.active{display:flex;flex-direction:column;height:100%;}
#s-finance .fin-tbl-wrap{flex:1;min-height:0;overflow-y:auto;}
#s-transfers.psec.active{display:flex;flex-direction:column;height:100%;}
#s-transfers .dg-wrap{flex:1;min-height:0;overflow-y:auto;}
#s-accounts.psec.active{display:flex;flex-direction:column;height:100%;}
#s-accounts .dg-wrap{flex:1;min-height:0;overflow-y:auto;}
#s-contracts.psec.active{display:flex;flex-direction:column;height:100%;}
#s-contracts .dg-wrap{flex:1;min-height:0;overflow-y:auto;}
#s-tasks.psec.active{display:flex;flex-direction:column;height:100%;}
#s-tasks .task-v2-wrap{flex:1;min-height:0;overflow:auto;}
#s-notes.psec.active{display:flex;flex-direction:column;height:100%;}
#s-notes .dg-wrap{flex:1;min-height:0;overflow-y:auto;}
#s-docs.psec.active{display:flex;flex-direction:column;height:100%;}
#s-docs .dg-wrap{flex:1;min-height:0;overflow-y:auto;}
.dg-tbl tbody tr:hover td.dg-pin{background:var(--primary-subtle);}
.dg-nm-cell{display:flex;align-items:center;gap:9px;}
.dg-av{width:34px;height:34px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;color:white;flex-shrink:0;}
.dg-nm{font-weight:600;color:var(--text-primary);font-size:13px;cursor:pointer;line-height:1.3;}
.dg-nm:hover{color:var(--primary-active);}
.dg-ph{font-size:11px;color:var(--text-faint);direction:ltr;margin-top:2px;}
.dg-code{font-size:11px;font-weight:700;color:var(--text-secondary);background:var(--bg);padding:2px 7px;border-radius:var(--r-sm);font-family:'Courier New',monospace;white-space:nowrap;}
.dg-contract-end-overdue{color:var(--danger);font-weight:700;}
.dg-sts{display:inline-flex;align-items:center;gap:5px;padding:3px 10px;border-radius:var(--r-full);font-size:11px;font-weight:600;white-space:nowrap;}
.dg-sts-dot{width:6px;height:6px;border-radius:50%;flex-shrink:0;}
.dg-sts-active{background:var(--primary-subtle);color:var(--primary-active);}
.dg-sts-active .dg-sts-dot{background:var(--primary);}
.dg-sts-suspend{background:var(--warning-subtle);color:var(--warning);}
.dg-sts-suspend .dg-sts-dot{background:var(--warning);}
.dg-sts-inactive{background:var(--danger-subtle);color:var(--danger);}
.dg-sts-inactive .dg-sts-dot{background:var(--danger);}
.dg-sts-default{background:var(--bg);color:var(--text-muted);}
.dg-sts-default .dg-sts-dot{background:var(--text-faint);}
.dg-ctr-y{display:inline-flex;align-items:center;padding:2px 9px;border-radius:var(--r-full);font-size:11px;font-weight:600;background:var(--primary-subtle);color:var(--primary-active);}
.dg-ctr-n{display:inline-flex;align-items:center;padding:2px 9px;border-radius:var(--r-full);font-size:11px;font-weight:600;background:var(--bg);color:var(--text-faint);}
.dg-brand{display:inline-flex;align-items:center;padding:2px 7px;border-radius:var(--r-sm);font-size:10.5px;font-weight:600;background:var(--info-subtle);color:var(--info);margin:1px 2px;}
.dg-acts{display:flex;gap:3px;align-items:center;}
.dg-abt{width:28px;height:28px;border-radius:var(--r-sm);border:none;background:transparent;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .1s;}
.dg-abt.view{color:var(--text-faint);}.dg-abt.view:hover{background:var(--primary-subtle);color:var(--primary-active);}
.dg-abt.edit{color:var(--text-faint);}.dg-abt.edit:hover{background:var(--info-subtle);color:var(--info);}
.dg-abt.del{color:var(--text-faint);}.dg-abt.del:hover{background:var(--danger-subtle);color:var(--danger);}
.prod-produce-btn{display:inline-flex;align-items:center;gap:4px;border:1px solid var(--border-strong);background:var(--surface-2);color:var(--text-secondary);border-radius:6px;cursor:pointer;padding:5px 12px;font-size:11px;font-weight:600;white-space:nowrap;transition:all .15s;box-shadow:0 1px 2px rgba(0,0,0,.05);}
.prod-produce-btn:hover{background:var(--surface-2);border-color:var(--border-strong);color:var(--text-primary);box-shadow:0 2px 4px rgba(0,0,0,.08);}
.dg-empty-row td{text-align:center;padding:60px 20px;color:var(--text-faint);font-size:13px;}
.tstabs{display:flex;gap:3px;margin-bottom:12px;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md);padding:4px;box-shadow:var(--shadow-card);}
.tstab{padding:7px 14px;font-size:12.5px;border:none;background:transparent;cursor:pointer;color:var(--text-muted);border-radius:var(--r-sm);transition:all .12s;display:flex;align-items:center;gap:5px;}
.tstab:hover{background:var(--surface-2);color:var(--text-secondary);}
.tstab.active{background:var(--primary);color:#fff;font-weight:600;}
.tcnt{background:rgba(16,24,40,.06);border-radius:var(--r-full);padding:1px 7px;font-size:10.5px;}
.tstab.active .tcnt{background:rgba(255,255,255,.25);}
.task-fbar{display:flex;gap:7px;margin-bottom:12px;align-items:center;flex-wrap:wrap;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md);padding:8px 12px;box-shadow:var(--shadow-card);}
.tf-clear{font-size:12px;color:var(--text-muted);cursor:pointer;display:flex;align-items:center;gap:4px;white-space:nowrap;}
.tf-clear:hover{color:var(--text-primary);}
.task-tbl-wrap{background:white;border:1px solid #e5e7eb;border-radius:12px;overflow:hidden;}
.task-tbl{width:100%;border-collapse:collapse;}
.task-tbl th{text-align:right;padding:10px 14px;font-size:11px;color:#6b7280;background:#f9fafb;font-weight:600;border-bottom:1px solid #e5e7eb;}
.task-tbl td{padding:10px 14px;border-top:1px solid #f9fafb;vertical-align:middle;}
.task-tbl tr:hover td{background:#fafafa;}
.t-ttl{font-weight:600;color:#111827;font-size:13px;}
.t-type{font-size:11px;color:#9ca3af;margin-top:1px;}
.pri-badge{display:inline-flex;align-items:center;padding:2px 9px;border-radius:20px;font-size:11px;font-weight:600;}
.pri-h{background:#fee2e2;color:#b91c1c;}
.pri-m{background:#fef3c7;color:#92400e;}
.pri-l{background:#dbeafe;color:#1e40af;}
.sts-ico{width:24px;height:24px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:12px;}
.sts-p{background:#fef9c3;color:#854d0e;}
.sts-d{background:#dcfce7;color:#15803d;}
.sts-o{background:#fee2e2;color:#b91c1c;}
.cal-hdr{display:flex;align-items:center;gap:8px;margin-bottom:14px;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md);padding:10px 14px;box-shadow:var(--shadow-card);}
.cal-nav{width:30px;height:30px;border-radius:var(--r-sm);border:1px solid var(--border);background:var(--surface);cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--text-muted);}
.cal-nav:hover{background:var(--surface-2);}
.cal-today{padding:5px 12px;border:1px solid var(--border);border-radius:var(--r-sm);font-size:12px;background:var(--surface);cursor:pointer;color:var(--text-secondary);}
.cal-today:hover{background:var(--surface-2);}
.cal-mtitle{font-size:15px;font-weight:700;color:var(--text-primary);flex:1;text-align:center;}
.cal-vtog{display:flex;background:var(--surface-2);border-radius:var(--r-sm);padding:2px;gap:2px;}
.cal-vbtn{padding:5px 11px;border:none;background:transparent;border-radius:var(--r-sm);font-size:12px;cursor:pointer;color:var(--text-muted);}
.cal-vbtn.active{background:var(--surface);color:var(--primary-active);font-weight:600;box-shadow:var(--shadow-card);}
.cal-layout{display:grid;grid-template-columns:1fr 210px;gap:12px;}.cal-week-scroll{overflow-y:auto;max-height:calc(100vh - 200px);}
.cal-main{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md);overflow:hidden;box-shadow:var(--shadow-card);}
.cal-dnames{display:grid;grid-template-columns:repeat(7,1fr);background:var(--surface-2);border-bottom:1px solid var(--border);}
.cal-dname{text-align:center;padding:10px 4px;font-size:11.5px;font-weight:600;color:var(--text-muted);}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:1px;background:var(--border);}
.cal-cell{background:var(--surface);min-height:88px;padding:5px;}
.cal-cell.tc{background:var(--primary-subtle);}
.cal-cell.ec{background:var(--surface-2);min-height:88px;}
.cal-n{font-size:12px;font-weight:600;color:var(--text-secondary);margin-bottom:3px;display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;}
.cal-n.tn{background:var(--primary);color:#fff;border-radius:50%;}
.cal-ep{padding:2px 5px;border-radius:4px;font-size:10px;margin-bottom:2px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;cursor:pointer;display:block;}
.ep-call{background:var(--info-subtle);color:var(--info);}
.ep-meet{background:var(--primary-subtle);color:var(--primary-active);}
.ep-note{background:var(--warning-subtle);color:var(--warning);}
.ep-follow{background:var(--violet-subtle);color:var(--violet);}
.ep-other{background:var(--surface-2);color:var(--text-muted);}
.cal-side{display:flex;flex-direction:column;gap:10px;}
.cal-mini{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md);padding:12px;box-shadow:var(--shadow-card);}
.cal-mini-hd{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;}
.cal-mini-title{font-size:12px;font-weight:600;color:var(--text-primary);}
.cal-mini-nav{width:22px;height:22px;border-radius:5px;border:1px solid var(--border);background:var(--surface);cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--text-muted);font-size:10px;}
.mini-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:1px;}
.mini-dn{text-align:center;font-size:9px;color:var(--text-faint);padding:2px;}
.mini-d{text-align:center;font-size:11px;padding:3px 2px;border-radius:4px;cursor:pointer;line-height:1.4;}
.mini-d:hover{background:var(--surface-2);}
.mini-d.nt{background:var(--primary);color:#fff;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;}
.mini-d.om{color:var(--border-strong);}
.cal-filt{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md);padding:12px;box-shadow:var(--shadow-card);}
.cal-filt-ttl{font-size:12px;font-weight:600;color:var(--text-primary);margin-bottom:10px;}
.cf-item{display:flex;align-items:center;justify-content:space-between;padding:5px 0;font-size:12px;color:var(--text-secondary);}
.cf-left{display:flex;align-items:center;gap:7px;}
.cf-dot{width:12px;height:12px;border-radius:3px;flex-shrink:0;}
.cf-ck{width:14px;height:14px;accent-color:var(--primary);cursor:pointer;}
.tbl-card{background:white;border:1px solid #e5e7eb;border-radius:12px;overflow:hidden;}
.tbl-hdr{padding:12px 16px;border-bottom:1px solid #f3f4f6;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px;}
.tbl-hdr h2{margin:0;font-size:14px;font-weight:600;}
table{width:100%;border-collapse:collapse;}
th{text-align:right;padding:10px 14px;font-size:11.5px;color:#6b7280;background:#f9fafb;font-weight:600;border-bottom:1px solid #e5e7eb;}
td{padding:11px 14px;border-top:1px solid #f9fafb;font-size:12.5px;color:#374151;}
tr:hover td{background:#fafafa;}
.bdg{display:inline-flex;align-items:center;padding:2px 9px;border-radius:20px;font-size:11px;font-weight:600;}
.bdg-g{background:#dcfce7;color:#15803d;}
.bdg-r{background:#fee2e2;color:#b91c1c;}
.bdg-y{background:#fef9c3;color:#854d0e;}
.bdg-b{background:#dbeafe;color:#1d4ed8;}
.bdg-gray{background:#f3f4f6;color:#6b7280;}
/* 🔴 رفعِ باگ (نشستِ ۲۰۲۶/۰۸/۱۵): وقتی ارتفاعِ کادرِ داخلی از ارتفاعِ صفحه بیشتر شود (صفحه‌نمایشِ
   کوتاه)، بدونِ overflow روی خودِ overlay، وسط‌چینیِ flex (align-items:center) بخشی از بالای کادر
   را خارج از دیدِ کاربر می‌کِشد و هیچ راهی برای رسیدن به آن نیست — نه با اسکرول کادر (چون محتوای
   خودِ کادر جا می‌شود، این خودِ overlay است که کوچک‌تر از کادر شده) نه با اسکرولِ صفحه (چون overlay
   ثابت/fixed است). با overflow-y:auto روی خودِ overlay، اگر کادر جا نشود، خودِ overlay اسکرول
   می‌شود تا تمامِ کادر در دسترس بماند.*/
.m-ov{position:fixed;inset:0;background:rgba(16,24,40,.5);z-index:100;display:flex;align-items:center;justify-content:center;padding:16px;overflow-y:auto;overscroll-behavior:contain;}
/* 🔴 رفعِ باگ (نشستِ ۲۰۲۶/۰۸/۱۵ — گزارشِ کاربر: «وقتی اسکرول می‌خواهم بکنم بیام پایین یهو
   می‌پرد بیرون»، در مودالِ «گروه مشتری جدید»): این کادر داخل یک overlay ثابت (`.m-ov`) است که
   خودش scroll ندارد. بدونِ overscroll-behavior، وقتی اسکرولِ داخلیِ همین کادر به ته می‌رسد،
   مرورگر طبقِ رفتارِ پیش‌فرضِ scroll-chaining ادامهٔ اسکرول را به صفحهٔ پشتِ overlay منتقل می‌کند —
   و چون overlay ثابت (fixed) است ولی خودِ صفحهٔ پشتش عوض می‌شود، حسِ «پریدنِ ناگهانیِ مودال» ایجاد
   می‌شود. contain این زنجیره را همان‌جا متوقف می‌کند.*/
.m-bx{background:var(--surface);border-radius:var(--r-md);width:100%;max-width:500px;padding:22px;max-height:90vh;overflow-y:auto;overscroll-behavior:contain;box-shadow:var(--shadow-pop);}
.m-bx h3{margin:0 0 16px;font-size:15px;font-weight:700;}
.m-f2{display:grid;grid-template-columns:1fr 1fr;gap:10px;}
.m-f2 .full{grid-column:span 2;}
.m-foot{display:flex;justify-content:flex-end;gap:8px;margin-top:16px;}
.inp{padding:8px 12px;border:1px solid var(--border);border-radius:var(--r-sm);font-size:13px;outline:none;width:100%;color:var(--text-primary);background:var(--surface);}
.inp:focus{border-color:var(--primary-border);box-shadow:0 0 0 3px var(--primary-subtle);}
/* دکمهٔ چشمِ کنارِ رمز عبور (درخواستِ کاربر، نشستِ ۲۰۲۶/۰۸/۲۸). پوشش به‌صورت inline-block است
   تا در چیدمانِ گریدِ فرم‌ها دقیقاً جای خودِ فیلد را بگیرد و عرضش را تغییر ندهد. */
.pw-wrap{position:relative;display:block;}
.pw-eye{position:absolute;top:50%;transform:translateY(-50%);display:flex;align-items:center;justify-content:center;
  width:26px;height:26px;padding:0;border:0;background:none;cursor:pointer;color:var(--text-faint);border-radius:6px;}
.pw-eye:hover{color:var(--text-secondary);background:var(--surface-2);}
.pw-eye:focus-visible{outline:2px solid var(--primary-border);outline-offset:1px;}
/* ── جدول ردیف‌های کالای پیش‌فاکتور — چیدمان جدولیِ استاندارد فاکتور (ستون‌بندی/راست‌چین بودن متن،
   چپ‌چین بودن اعداد، سطر پررنگ سرستون، فاصلهٔ کافی) به‌جای کارت‌های شلوغِ قبلی. ── */
.si-table{width:100%;border-collapse:collapse;table-layout:fixed;}
/* ستونِ «برند» ردیف‌های کالا فقط در ماژولِ «پیش فاکتور (مشتریان)» معنا دارد (۲۰ شهریور ۱۴۰۵).
   در ماژولِ فروش پنهان می‌ماند، پس همان مودال با همان ردیف‌ها برایِ هر دو کار می‌کند. */
#sale-modal:not(.sale-group-mode) .si-brand-col{display:none;}
/* 🔵 درخواستِ کاربر (۳ مهر ۱۴۰۵): «فقط در ماژولِ پیش فاکتور (مشتریان) تخفیفِ سطری حذف شود و
   تخفیفِ کلی بماند» — برعکسِ ستونِ برندِ بالا. ماژولِ فروش دست‌نخورده می‌ماند. */
#sale-modal.sale-group-mode .si-disc-col{display:none;}
.si-table thead th{background:var(--bg);color:var(--text-muted);font-weight:700;font-size:11px;text-align:center;padding:9px 6px;border-bottom:1px solid var(--border);white-space:nowrap;}
.si-table thead th:first-child{text-align:right;padding-right:10px;}
.si-table tbody tr{border-bottom:1px solid var(--border);transition:background .1s;}
.si-table tbody tr:hover{background:var(--surface-2);}
.si-table td{padding:6px 5px;vertical-align:middle;}
.si-table td:first-child{padding-right:10px;}
.si-cell-inp,.si-cell-sel{width:100%;border:1px solid transparent;background:transparent;padding:7px 7px;font-size:12.5px;border-radius:var(--r-sm);outline:none;font-family:inherit;text-align:center;}
.si-cell-inp:focus,.si-cell-sel:focus{border-color:var(--primary-border);background:var(--surface);box-shadow:0 0 0 3px var(--primary-subtle);}
.si-cell-inp.si-name-inp{text-align:right;font-weight:600;color:var(--text-primary);}
/* فیلدِ ناقصِ ردیفِ کالا — پس از تلاشِ ناموفقِ ذخیره علامت می‌خورد و با اولین تایپ پاک
   می‌شود (رجوع به _saleMarkItemErrors / _saleClearItemErrors). */
.si-cell-inp.si-invalid,.si-cell-sel.si-invalid{border-color:var(--danger);background:var(--danger-subtle);box-shadow:0 0 0 2px var(--danger-subtle);}
.si-cell-inp.si-invalid::placeholder{color:var(--danger);}
/* 🔴 درخواستِ کاربر (نشستِ ۲۰۲۶/۰۸/۲۷): کادرِ «جستجوی شرح کالا…» فقط هنگامِ تعریفِ ردیفِ تازه
   لازم است؛ رویِ ردیفی که کالایش قبلاً انتخاب شده فقط شلوغی است و بالایِ شرحِ واقعی می‌نشیند.
   عمداً CSS است نه JS: هیچ سیم‌کشی‌ای لازم ندارد و زنده واکنش می‌دهد — به‌محضِ خالی‌شدنِ کدِ
   کالا کادر برمی‌گردد. :placeholder-shown یعنی ورودی خالی است (چه کاربر تایپ کرده باشد چه
   مقدارش را JS گذاشته باشد). اگر مرورگری :has را نشناسد، رفتار دقیقاً همان قبل می‌شود. */
.sale-item-row:has(.si-code:not(:placeholder-shown)) .si-desc-inp{display:none;}
.si-cell-inp.si-code-inp{text-align:right;font-size:11px;color:var(--text-faint);padding-top:2px;padding-bottom:2px;}
/* 🔴 گزارشِ کاربر (نشستِ ۲۰۲۶/۰۸/۲۸، با تصویر): در «ردیف‌های کالا»ی پیش‌فاکتور، سایزِ
   120x120 ناقص دیده می‌شد — رقمِ اولش بیرونِ کادر می‌افتاد. ستونش ۶٪ بود و در عرضِ واقعیِ
   جدول به ۴۸px فضای متن می‌رسید، درحالی‌که این متن ۶۲px لازم دارد؛ چون ورودی است، به‌جای
   شکستنِ خط، متن را می‌بُرید. ستون به عرضِ ثابت تبدیل شد (مثلِ ستونِ «ردیف») و padding این
   خانه هم کم شد تا حتی سایزهای بلندتر (مثلِ 1200x600) هم جا شوند. */
.si-cell-inp.si-size{padding-left:3px;padding-right:3px;}
.si-linetotal-cell{font-weight:700;color:var(--text-primary);text-align:left;direction:ltr;white-space:nowrap;font-size:12.5px;padding-left:8px;}
.si-remove-btn{border:none;background:none;color:var(--danger);cursor:pointer;font-size:16px;padding:5px 7px;border-radius:var(--r-sm);line-height:1;}
.si-remove-btn:hover{background:var(--danger-subtle);}
/* position:fixed (نه absolute) عمداً — چون این دراپ‌داون داخل ظرف «overflow-x:auto» جدول ردیف‌های
   کالاست، و طبق مشخصات CSS، وقتی overflow-x چیزی غیر از visible باشد، overflow-y هم به‌صورت خودکار
   (نه فقط ظاهری) auto/کلیپ‌شونده می‌شود — یعنی یک absolute معمولی که با top:100% از پایین سطر
   بیرون می‌زند، توسط همان ظرف قطع/مخفی می‌شد. با fixed، این دراپ‌داون از overflow ظرف فرار می‌کند و
   مختصاتش هر بار در _saleItemSearch از روی getBoundingClientRect همان لحظه محاسبه می‌شود. */
.si-drop{display:none;position:fixed;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md);box-shadow:var(--shadow-pop);z-index:2000;max-height:220px;overflow-y:auto;text-align:right;}
/* جمع‌بندی مالی — یک کارت جداگانه با ردیف‌های برچسب/مقدار، شبیه بخش «جمع کل / تخفیف / مالیات و
   عوارض / مبلغ پرداختی» پیش‌فاکتور سپیدار؛ سطر آخر (مبلغ نهایی) با تاکید بصری بیشتر جدا می‌شود. */
.si-totals-card{max-width:360px;margin-inline-start:auto;background:var(--bg);border:1px solid var(--border);border-radius:var(--r-md);padding:4px 16px;}
.si-totals-row{display:flex;justify-content:space-between;align-items:center;padding:9px 0;font-size:12.5px;color:var(--text-secondary);border-bottom:1px solid var(--border);}
.si-totals-row:last-child{border-bottom:none;}
.si-totals-row input{width:130px;text-align:left;direction:ltr;border:1px solid var(--border);border-radius:var(--r-sm);padding:5px 8px;font-size:12.5px;background:var(--surface);}
.si-totals-row input[readonly]{background:var(--surface-2);color:var(--text-muted);border-color:transparent;}
.si-totals-row.si-grandtotal{padding-top:12px;margin-top:2px;border-top:1px solid var(--border-strong);}
.si-totals-row.si-grandtotal span{font-weight:700;font-size:13.5px;color:var(--text-primary);}
.si-totals-row.si-grandtotal input{font-weight:700;font-size:14px;color:var(--primary-active);border-color:var(--primary-border);background:var(--primary-subtle);width:150px;}
.empty{text-align:center;padding:60px 20px;color:#9ca3af;}
.empty .ei{font-size:44px;display:block;margin-bottom:12px;}
.empty p{font-size:14px;margin:0;}
.av-0{background:#22c55e;}.av-1{background:#3b82f6;}.av-2{background:#f59e0b;}
.av-3{background:#8b5cf6;}.av-4{background:#ef4444;}.av-5{background:#06b6d4;}
.av-6{background:#ec4899;}.av-7{background:#10b981;}
.ch-badge{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:20px;font-size:11px;font-weight:600;}
.ch-inst{background:#ede9fe;color:#5b21b6;}
.ch-web{background:#dbeafe;color:#1d4ed8;}
.ch-ref{background:#dcfce7;color:#15803d;}
.ch-tel{background:#fef9c3;color:#854d0e;}
.ch-other{background:#f3f4f6;color:#6b7280;}
.lst-badge{display:inline-flex;align-items:center;padding:2px 9px;border-radius:20px;font-size:11px;font-weight:600;}
.lst-new{background:#dbeafe;color:#1d4ed8;}
.lst-contact{background:#fef9c3;color:#854d0e;}
.lst-qualified{background:#ede9fe;color:#5b21b6;}
.lst-won{background:#dcfce7;color:#15803d;}
.lst-lost{background:#fee2e2;color:#b91c1c;}
.lst-waiting{background:#f3f4f6;color:#6b7280;}
.kb-wrap{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;align-items:start;}
.kb-col{border-radius:12px;padding:10px;min-height:200px;}
.kb-col-new{background:#eff6ff;}
.kb-col-inprogress{background:#fffbeb;}
.kb-col-reviewed{background:#f5f3ff;}
.kb-col-closed{background:#f0fdf4;}
.kb-col-hdr{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;padding:0 2px;}
.kb-col-ttl{font-size:12.5px;font-weight:700;display:flex;align-items:center;gap:6px;}
.kb-col-cnt{font-size:11px;font-weight:600;padding:1px 8px;border-radius:10px;}
.kb-new-cnt{background:#bfdbfe;color:#1d4ed8;}
.kb-ip-cnt{background:#fde68a;color:#92400e;}
.kb-rv-cnt{background:#ddd6fe;color:#4c1d95;}
.kb-cl-cnt{background:#bbf7d0;color:#15803d;}
.kb-card{background:white;border-radius:10px;padding:11px 12px;margin-bottom:8px;box-shadow:0 1px 3px rgba(0,0,0,.07);cursor:pointer;transition:box-shadow .15s;border:1px solid transparent;}
.kb-card:hover{box-shadow:0 3px 10px rgba(0,0,0,.11);}
.kb-card-top{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:6px;}
.kb-card-ttl{font-weight:600;font-size:12.5px;color:#111827;line-height:1.3;}
.kb-card-num{font-size:10px;color:#9ca3af;margin-top:2px;}
.kb-pri{display:inline-flex;align-items:center;padding:1px 7px;border-radius:10px;font-size:10.5px;font-weight:600;}
.kb-pri-urgent{background:#fce7f3;color:#9d174d;}
.kb-pri-normal{background:#f3f4f6;color:#6b7280;}
.kb-pri-low{background:#dcfce7;color:#15803d;}
.kb-card-info{font-size:11px;color:#9ca3af;margin-bottom:6px;}
.kb-card-foot{display:flex;align-items:center;justify-content:space-between;margin-top:8px;padding-top:7px;border-top:1px solid #f3f4f6;}
.kb-av-pair{display:flex;align-items:center;gap:5px;font-size:11px;color:#6b7280;}
.kb-av{width:20px;height:20px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:9px;font-weight:700;color:white;flex-shrink:0;}
.kb-card-btns{display:flex;gap:3px;}
.kb-btn{width:24px;height:24px;border-radius:5px;border:none;background:transparent;cursor:pointer;color:#9ca3af;display:flex;align-items:center;justify-content:center;font-size:12px;}
.kb-btn:hover{background:#f3f4f6;color:#374151;}
.kb-add-btn{width:100%;border:1.5px dashed #d1d5db;border-radius:8px;background:transparent;padding:8px;font-size:12px;color:#9ca3af;cursor:pointer;margin-top:4px;}
.kb-add-btn:hover{border-color:#86efac;color:#15803d;background:#f0fdf4;}
.m-bx-lg{max-width:640px;}
.cust-type-tabs{display:flex;gap:4px;flex-wrap:wrap;background:white;border:1px solid #e5e7eb;border-radius:10px;padding:5px 8px;margin-bottom:10px;}
.ctype-btn{padding:5px 12px;font-size:12px;border:none;border-radius:7px;background:transparent;cursor:pointer;color:#6b7280;transition:all .12s;}
.ctype-btn:hover{background:#f3f4f6;color:#374151;}
.ctype-btn.active{background:#22c55e;color:white;font-weight:600;}
.cust-row{display:flex;align-items:center;gap:10px;padding:10px 12px;background:white;border:1px solid #f3f4f6;border-radius:8px;margin-bottom:3px;transition:box-shadow .15s;}
.cust-row:hover{box-shadow:0 1px 5px rgba(0,0,0,.07);}
.cust-av{width:36px;height:36px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:700;color:white;flex-shrink:0;}
.cust-info{min-width:160px;}
.cust-nm{font-weight:600;color:#111827;font-size:13px;}
.cust-role{font-size:11px;color:#9ca3af;margin-top:1px;}
.cust-fld{flex:1;font-size:12px;color:#6b7280;min-width:80px;}
.cust-acts{display:flex;gap:3px;flex-shrink:0;}
.cust-abt{width:28px;height:28px;border-radius:6px;border:none;background:transparent;cursor:pointer;color:#9ca3af;display:flex;align-items:center;justify-content:center;}
.cust-abt:hover{background:#f3f4f6;color:#374151;}
.cust-grp-hdr{display:flex;align-items:center;gap:10px;padding:7px 12px;background:#f0fdf4;border:1px solid #bbf7d0;border-radius:8px;margin-bottom:2px;font-size:12px;color:#15803d;font-weight:600;}
.cust-grp-av{width:26px;height:26px;border-radius:50%;background:#22c55e;color:white;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;flex-shrink:0;}
.role-badge{display:inline-flex;align-items:center;padding:2px 8px;border-radius:20px;font-size:11px;font-weight:600;}
.role-arch{background:#ede9fe;color:#5b21b6;}
.role-contr{background:#dbeafe;color:#1d4ed8;}
.role-mfr{background:#fef9c3;color:#854d0e;}
.role-end{background:#f3f4f6;color:#6b7280;}
.role-other{background:#f3f4f6;color:#6b7280;}
.cust-stat-on{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:600;color:#15803d;}
.cust-stat-off{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:600;color:#9ca3af;}
.rd-layout{display:flex;gap:14px;align-items:flex-start;}
.rd-sidebar{width:262px;min-width:262px;flex-shrink:0;display:flex;flex-direction:column;gap:10px;}
.rd-main{flex:1;min-width:0;display:flex;flex-direction:column;}
.rd-hero{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:14px;display:flex;align-items:center;gap:12px;}
.rd-av{width:52px;height:52px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:20px;font-weight:700;color:white;flex-shrink:0;}
.rd-hero-info{flex:1;min-width:0;}
.rd-hero-name{font-size:14px;font-weight:700;color:var(--text-primary);margin:0 0 2px;}
.rd-hero-sub{font-size:11px;color:var(--text-muted);margin-bottom:5px;}
.rd-hero-badges{display:flex;gap:4px;flex-wrap:wrap;}
.rd-kpis{display:grid;grid-template-columns:1fr 1fr;gap:8px;}
.rd-kpi{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:10px 12px;}
.rd-kpi-val{font-size:17px;font-weight:700;color:var(--text-primary);line-height:1.1;}
.rd-kpi-lbl{font-size:10px;color:var(--text-faint);margin-top:2px;}
.rd-panel{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:12px;}
.rd-panel-hdr{display:flex;justify-content:space-between;align-items:center;margin-bottom:9px;}
.rd-panel-ttl{font-size:12px;font-weight:600;color:var(--text-secondary);}
.rd-panel-edit{padding:3px 9px;border:1px solid var(--border);border-radius:6px;font-size:11px;background:var(--surface);cursor:pointer;color:var(--text-muted);}
.rd-panel-edit:hover{background:var(--surface-2);}
.rd-info-row{display:flex;gap:6px;margin-bottom:6px;font-size:11.5px;}
.rd-info-lbl{color:var(--text-faint);flex-shrink:0;width:76px;}
.rd-info-val{color:var(--text-secondary);font-weight:500;word-break:break-word;}
.rd-tl-item{display:flex;gap:8px;padding:6px 0;border-top:1px solid var(--surface-2);}
.rd-tl-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;margin-top:4px;}
.rd-tl-desc{font-size:11px;color:var(--text-secondary);line-height:1.4;}
.rd-tl-meta{font-size:10px;color:var(--text-faint);}
.rd-local-tabs{border-radius:10px 10px 0 0;border:1px solid var(--border);border-bottom:none;background:var(--surface);flex-shrink:0;}
.rd-local-tabs+.rd-pane{border-radius:0 0 12px 12px;border-top:none;}
.rd-pane{padding:14px;display:none;background:var(--surface);border:1px solid var(--border);border-radius:12px;}
.rd-pane.active{display:flex;flex-direction:column;}
.rd-chat{min-height:280px;max-height:480px;overflow-y:auto;display:flex;flex-direction:column;gap:6px;margin-bottom:10px;padding:8px 4px;scrollbar-width:thin;background:var(--primary-subtle);border-radius:10px;}
.rd-msg{display:flex;align-items:flex-end;gap:6px;}
.rd-msg.sent{flex-direction:row-reverse;}
.rd-bubble{max-width:74%;padding:9px 13px;border-radius:16px;word-break:break-word;}
.rd-msg.sent .rd-bubble{background:var(--primary);color:white;border-bottom-right-radius:4px;}
.rd-msg.recv .rd-bubble{background:var(--surface);color:var(--text-primary);border:1px solid var(--border);border-bottom-left-radius:4px;}
.rd-bubble-sender{font-size:10px;font-weight:700;margin-bottom:3px;}
.rd-msg.sent .rd-bubble-sender{color:rgba(255,255,255,.8);}
.rd-msg.recv .rd-bubble-sender{color:var(--primary-active);}
.rd-bubble-body{font-size:12.5px;line-height:1.55;margin-bottom:5px;}
.rd-bubble-meta{display:flex;align-items:center;gap:5px;justify-content:flex-end;}
.rd-bubble-type-tag{font-size:9.5px;padding:1px 7px;border-radius:10px;font-weight:600;}
.rd-msg.sent .rd-bubble-type-tag{background:rgba(255,255,255,.25);color:white;}
.rd-msg.recv .rd-bubble-type-tag{background:var(--primary-subtle);color:var(--primary-active);border:1px solid var(--primary-border);}
.rd-bubble-ts{font-size:9.5px;white-space:nowrap;opacity:.7;}
.rd-input-wrap{background:var(--surface-2);border:1px solid var(--border);border-radius:10px;padding:10px 12px;flex-shrink:0;}
.rd-note-inp{width:100%;padding:7px 11px;border:1px solid var(--border);border-radius:7px;font-size:12.5px;resize:none;outline:none;line-height:1.5;margin-bottom:7px;background:var(--surface);}
.rd-note-inp:focus{border-color:var(--primary-border);}
.rd-qtags{display:flex;gap:4px;flex-wrap:wrap;margin-bottom:7px;}
.rd-qtag{padding:3px 9px;border:1px solid var(--border);border-radius:20px;font-size:10.5px;background:var(--surface);cursor:pointer;color:var(--text-secondary);}
.rd-qtag:hover{border-color:var(--primary);color:var(--primary-active);background:var(--primary-subtle);}
.rd-send-row{display:flex;justify-content:space-between;align-items:center;}
.rd-send-btn{padding:6px 16px;background:var(--primary);color:white;border:none;border-radius:8px;font-size:12.5px;font-weight:600;cursor:pointer;display:flex;align-items:center;gap:5px;}
.rd-send-btn:hover{background:var(--primary-active);}
.rd-send-hint{font-size:10px;color:var(--text-faint);}
.rd-tbl-wrap{background:var(--surface);border:1px solid var(--border);border-radius:10px;overflow:hidden;}
.rd-sub-tbl{width:100%;border-collapse:collapse;}
.rd-sub-tbl th{text-align:right;padding:9px 12px;font-size:11px;color:var(--text-muted);background:var(--surface-2);font-weight:600;border-bottom:1px solid var(--border);}
.rd-sub-tbl td{padding:9px 12px;border-top:1px solid var(--surface-2);font-size:12px;color:var(--text-secondary);vertical-align:middle;}
.rd-sub-tbl tr:hover td{background:var(--surface-2);}
.rd-empty{text-align:center;padding:48px 20px;color:var(--text-faint);font-size:13px;}
.mem-tbl-wrap{background:var(--surface);border:1px solid var(--border);border-radius:12px;overflow:hidden;}
.mem-tbl{width:100%;border-collapse:collapse;}
.mem-tbl th{text-align:right;padding:10px 14px;font-size:11px;color:var(--text-muted);background:var(--surface-2);font-weight:600;border-bottom:1px solid var(--border);}
.mem-tbl td{padding:11px 14px;border-top:1px solid var(--surface-2);font-size:12.5px;color:var(--text-secondary);vertical-align:middle;}
.mem-tbl tr:hover td{background:var(--surface-2);}
.mem-av{width:34px;height:34px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:700;color:white;}
.role-badge-mem{display:inline-flex;align-items:center;padding:2px 9px;border-radius:20px;font-size:11px;font-weight:600;}
.role-ceo{background:#f3e8ff;color:#6b21a8;}
.role-sales-mgr{background:#dbeafe;color:#1d4ed8;}
.role-sales-exp{background:#dcfce7;color:#15803d;}
.role-accounting{background:#fef3c7;color:#92400e;}
.role-other-mem{background:#f3f4f6;color:#6b7280;}
.m-bx-rep{max-width:520px;}
.rep-id-inp{font-family:monospace;background:#f0fdf4;color:#15803d;font-weight:700;letter-spacing:.5px;border-color:#bbf7d0;}
.acc-toggle{display:flex;align-items:center;justify-content:space-between;width:100%;padding:10px 14px;margin-top:10px;border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface-2);cursor:pointer;font-size:12.5px;font-weight:700;color:var(--text-primary);}
.acc-toggle:hover{border-color:var(--border-strong);}
.acc-body{display:none;border:1px solid var(--border);border-top:none;border-radius:0 0 var(--r-md) var(--r-md);padding:14px 14px 8px;margin-top:-4px;background:var(--surface);}
.acc-body.open{display:block;}
.acc-sec{margin-bottom:12px;}
.acc-sec-ttl{font-size:10.5px;font-weight:700;color:var(--text-faint);letter-spacing:.6px;margin:0 0 8px;padding-bottom:5px;border-bottom:1px solid var(--border);}
.inp-lbl{font-size:11.5px;font-weight:600;color:#374151;display:block;margin-bottom:3px;}
.inp-wrap{margin-bottom:8px;}
.m-f2-acc{display:grid;grid-template-columns:1fr 1fr;gap:8px;}
.m-f2-acc .full{grid-column:span 2;}
.disc-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px;background:white;border:1px solid #e5e7eb;border-radius:8px;padding:8px;}
.disc-lbl{font-size:10px;color:#9ca3af;margin-bottom:2px;}
.disc-inp{padding:6px 9px;border:1px solid #e5e7eb;border-radius:6px;font-size:12px;width:100%;outline:none;}
.disc-inp:focus{border-color:#86efac;}
@media(max-width:900px){
  .kpi-grid{grid-template-columns:repeat(2,1fr);}
  .cr3,.cr3b{grid-template-columns:1fr;}
  .cal-layout{grid-template-columns:1fr;}
  .sidebar{width:52px;min-width:52px;}
  .snav span:last-child{display:none;}
}
/* ── مودال ارتقاءیافته نماینده ── */
.rm-lbl{font-size:11.5px;font-weight:600;color:var(--text-secondary);display:block;margin-bottom:4px;}
.rm-inp{padding:8px 11px;border:1px solid var(--border);border-radius:var(--r-sm);font-size:13px;outline:none;width:100%;font-family:inherit;background:var(--surface);color:var(--text-primary);}
.rm-inp:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-subtle);}
.rm-inp:focus{border-color:var(--primary-border);}
.rm-sec-ttl{font-size:10.5px;font-weight:700;color:var(--text-faint);letter-spacing:.7px;margin:0 0 12px;padding-bottom:6px;border-bottom:1px solid var(--border);}
.rm-file-item{display:flex;align-items:center;gap:6px;font-size:11.5px;background:var(--surface);border:1px solid var(--border);border-radius:6px;padding:5px 9px;}
.rm-file-item a{color:var(--info);text-decoration:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;}
.rm-file-sf{font-size:10px;color:var(--text-faint);white-space:nowrap;}



/* ── Sales Module ───────────────────────────────────────────── */
/* ۴ کارت: دو کارتِ «ارسال کامل» (۲۷ شهریور) و کارتِ «مبلغ فاکتور شده»
   (۸ مهر، منتقل‌شده به ماژولِ فاکتورهای فروش) به درخواستِ کاربر برداشته شدند.
   اگر این عدد با تعدادِ واقعیِ کارت‌ها نخواند، کارت‌ها کشیده و ستونِ خالی درست می‌شود. */
.sale-kpi-row{display:grid;grid-template-columns:repeat(6,1fr);gap:9px;margin-bottom:18px;}
/* تک‌کارتِ ماژولِ فاکتورهای فروش — عرضِ طبیعی، نه کشیده در کلِ سطر. */
.si-kpi-row{display:grid;grid-template-columns:minmax(220px,260px);gap:9px;margin-bottom:18px;}
.sale-kpi{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md);padding:12px 10px;display:flex;align-items:center;gap:10px;box-shadow:var(--shadow-card);}
.sale-kpi-ico{width:36px;height:36px;border-radius:var(--r-sm);display:flex;align-items:center;justify-content:center;font-size:17px;flex-shrink:0;}
.sale-kpi-num{font-size:17px;font-weight:700;color:var(--text-primary);line-height:1.1;}
.sale-kpi-lbl{font-size:10px;color:var(--text-muted);margin-top:2px;}
.sale-kpi-accent{border-right:3px solid var(--primary);}
/* status badges */
.sale-sts{display:inline-flex;align-items:center;padding:3px 9px;border-radius:var(--r-full);font-size:10.5px;font-weight:600;white-space:nowrap;}
.sale-sts-pro{background:var(--info-subtle);color:var(--info);}
.sale-sts-conf{background:var(--primary-subtle);color:var(--primary-active);}
.sale-sts-inv{background:var(--violet-subtle);color:var(--violet);}
.sale-sts-cancel{background:var(--danger-subtle);color:var(--danger);}
.sale-sts-ship{background:var(--teal-subtle);color:var(--teal);}
/* shipping badges */
.sale-ship{display:inline-flex;align-items:center;padding:2px 8px;border-radius:var(--r-full);font-size:10.5px;font-weight:600;white-space:nowrap;}
.sale-ship-wait{background:var(--warning-subtle);color:var(--warning);}
.sale-ship-part{background:var(--warning-subtle);color:var(--warning);}
.sale-ship-full{background:var(--primary-subtle);color:var(--primary-active);}
/* «—» یعنی حواله خروج هنوز تعیین تکلیف نشده: بی‌رنگ، تا با حالت‌های واقعی اشتباه نشود.
   «خاتمه یافته» همان رنگِ نشانِ وضعیتِ سند را می‌گیرد (.sale-sts-cancel) تا دو ستون یک حرف بزنند. */
.sale-ship-none{background:transparent;color:var(--text-faint);font-weight:500;}
.sale-ship-ended{background:var(--danger-subtle);color:var(--danger);}

/* ── Complaints Module ──────────────────────────────────────── */
/* status badges */
.cmp-sts{display:inline-flex;align-items:center;gap:4px;padding:3px 9px;border-radius:var(--r-full);font-size:10.5px;font-weight:600;white-space:nowrap;}
.cmp-sts-new{background:var(--info-subtle);color:var(--info);}
.cmp-sts-review{background:var(--warning-subtle);color:var(--warning);}
.cmp-sts-approved{background:var(--violet-subtle);color:var(--violet);}
.cmp-sts-rejected{background:var(--danger-subtle);color:var(--danger);}
.cmp-sts-factory{background:var(--orange-subtle);color:var(--orange);}
.cmp-sts-acct{background:var(--teal-subtle);color:var(--teal);}
.cmp-sts-closed{background:var(--primary-subtle);color:var(--primary-active);}
/* expert opinion */
.cmp-exp-pos{background:var(--primary-subtle);color:var(--primary-active);border-radius:var(--r-sm);padding:2px 8px;font-size:11px;font-weight:600;}
.cmp-exp-neg{background:var(--danger-subtle);color:var(--danger);border-radius:var(--r-sm);padding:2px 8px;font-size:11px;font-weight:600;}
.cmp-exp-wait{background:var(--surface-2);color:var(--text-muted);border-radius:var(--r-sm);padding:2px 8px;font-size:11px;font-weight:600;}
/* yes/no */
.cmp-yes{background:var(--primary-subtle);color:var(--primary-active);border-radius:var(--r-sm);padding:2px 8px;font-size:11px;font-weight:600;}
.cmp-no{background:var(--surface-2);color:var(--text-faint);border-radius:var(--r-sm);padding:2px 8px;font-size:11px;font-weight:600;}
/* defect chips */
.cmp-defect-chip{display:inline-flex;align-items:center;padding:2px 8px;border-radius:var(--r-full);font-size:10.5px;font-weight:600;background:var(--orange-subtle);color:var(--orange);margin:1px 2px;}
/* section header in modal */
.cmp-sec-hdr{font-size:11px;font-weight:700;color:var(--text-secondary);letter-spacing:.6px;padding:8px 0 6px;border-bottom:2px solid var(--primary-subtle);margin-bottom:12px;}
/* defect checkboxes */
.cmp-defect-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin-bottom:8px;}
.cmp-chk-lbl{display:flex;align-items:center;gap:7px;padding:7px 10px;border:1px solid var(--border);border-radius:var(--r-sm);font-size:12px;cursor:pointer;transition:background .1s;user-select:none;}
.cmp-chk-lbl:hover{background:var(--primary-subtle);border-color:var(--primary-border);}
.cmp-chk-lbl input[type=checkbox]{accent-color:var(--primary);width:14px;height:14px;flex-shrink:0;}
/* image thumbnails */
.cmp-img-thumb{display:inline-flex;align-items:center;gap:5px;padding:5px 10px;background:var(--surface-2);border-radius:var(--r-sm);font-size:11px;color:var(--text-secondary);}
.cmp-img-thumb a{color:var(--info);text-decoration:none;font-size:11px;}
.cmp-img-thumb button{background:none;border:none;cursor:pointer;color:var(--text-faint);font-size:14px;padding:0 0 0 3px;line-height:1;}
.cmp-img-thumb button:hover{color:var(--danger);}
.cmp-lvl-low{background:var(--primary-subtle);color:var(--primary-active);border-radius:var(--r-full);padding:2px 8px;font-size:10px;font-weight:600;}
.cmp-lvl-mid{background:var(--warning-subtle);color:var(--warning);border-radius:var(--r-full);padding:2px 8px;font-size:10px;font-weight:600;}
.cmp-lvl-high{background:var(--danger-subtle);color:var(--danger);border-radius:var(--r-full);padding:2px 8px;font-size:10px;font-weight:600;}
.cmp-lvl-crit{background:var(--danger);color:#fff;border-radius:var(--r-full);padding:2px 8px;font-size:10px;font-weight:600;}
.cmp-cat-btn{padding:6px 12px;border:1px solid var(--border);border-radius:var(--r-sm);background:var(--surface);font-family:inherit;font-size:12px;cursor:pointer;color:var(--text-secondary);}
.cmp-cat-btn.active{background:var(--primary-subtle);border-color:var(--primary-border);color:var(--primary-active);font-weight:600;}
.cmp-qa-act{display:inline-flex;align-items:center;gap:3px;padding:2px 8px;border:1px dashed var(--border-strong);border-radius:var(--r-sm);font-size:10.5px;color:var(--text-muted);cursor:pointer;background:none;font-family:inherit;}
.cmp-qa-act:hover{border-color:var(--violet);color:var(--violet);}

/* -- Docs Module ---- */
.doc-type-badge{display:inline-flex;align-items:center;padding:2px 9px;border-radius:20px;font-size:11px;font-weight:600;}
.doc-type-contract{background:var(--primary-subtle);color:var(--primary-active);}
.doc-type-cheque{background:var(--info-subtle);color:var(--info);}
.doc-type-receipt{background:var(--warning-subtle);color:var(--warning);}
.doc-type-proforma{background:var(--orange-subtle);color:var(--orange);}
.doc-type-image{background:var(--violet-subtle);color:var(--violet);}
.doc-type-letter{background:var(--teal-subtle);color:var(--teal);}
.doc-type-complaint{background:var(--danger-subtle);color:var(--danger);}
.doc-type-other{background:var(--surface-2);color:var(--text-muted);}

/* ── Finance Module ─────────────────────────────────────────── */
/* کاشی‌های KPI ِ مالی (۲۹ شهریور ۱۴۰۵) به درخواستِ کاربر حذف شدند — قواعدشان هم با آن‌ها رفت. */
.fin-toolbar{display:flex;gap:8px;margin-bottom:12px;flex-wrap:wrap;align-items:center;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md);padding:10px 14px;}
.fin-tbl-wrap{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md);overflow-x:auto;box-shadow:var(--shadow-card);}
/* درخواستِ کاربر (نشستِ ۲۰۲۶/۰۸/۲۹): «عرضِ همهٔ ستون‌ها متناسب باشد که همه جا شوند.»
   با افزودنِ ستونِ «برند» تعداد به ۱۵ رسید. سه تغییر با هم لازم بود:
   ۱) فاصلهٔ داخلیِ خانه‌ها از ۱۲px به ۷px — در ۱۵ ستون یعنی ۱۵۰px صرفه‌جویی،
   ۲) min-width واقع‌بینانه‌تر تا رویِ نمایشگرِ کوچک به‌جای فشرده‌شدن، اسکرول شود
      (پوششِ جدول از قبل overflow-x:auto داشت ولی min-width قدیمی اجازه نمی‌داد کار کند)،
   ۳) ستونِ «نماینده» تنها ستونِ کشسان است و بقیه عرضِ ثابت دارند (رجوع به 40-finance.html) —
      پیش از این هیچ ستونی عرض نداشت و نامِ طرف‌حساب در ۶ خط می‌شکست. */
.fin-tbl{width:100%;border-collapse:collapse;min-width:1180px;}
/* عمداً table-layout:fixed نیست: با fixed، مقدارِ min-width رویِ ستونِ «نماینده» نادیده گرفته
   می‌شود و آن ستون به چند ده پیکسل می‌رسد (زنده دیده شد: ۳۸px و ردیفِ ۵۶۵ پیکسلی). با چیدمانِ
   خودکار، عرض‌های اعلام‌شده در 40-finance.html «ترجیح» می‌شوند و نماینده بقیهٔ فضا را می‌گیرد. */
.fin-tbl td,.fin-tbl thead th{padding-left:7px;padding-right:7px;}
/* نامِ طرف‌حساب می‌شکند (تنها ستونِ کشسان)، ولی بقیه در یک خط می‌مانند تا ردیف کوتاه بماند. */
.fin-tbl td{word-break:break-word;}
.fin-tbl thead th{position:sticky;top:0;z-index:4;background:var(--surface);border-bottom:1px solid var(--border);text-align:right;padding:9px 12px;font-size:11.5px;color:var(--text-muted);font-weight:700;white-space:nowrap;}
.fin-tbl tbody tr{transition:background .08s;cursor:pointer;}
.fin-tbl tbody tr:hover td{background:var(--primary-subtle);}
.fin-tbl tbody tr.tr-bounced td{background:var(--warning-subtle);}
.fin-tbl tbody tr.tr-bounced:hover td{background:#FBE7C8;}
.fin-tbl td{padding:9px 12px;border-top:1px solid var(--border);font-size:12.5px;color:var(--text-secondary);vertical-align:middle;}
/* expandable sub-row */
.fin-sub-row{display:none;background:var(--warning-subtle);}
.fin-sub-row.open{display:table-row;}
.fin-sub-cell{padding:12px 16px 14px 16px;border-top:1px dashed var(--warning);}
.fin-sub-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px;margin-bottom:10px;}
.fin-sub-inp{padding:6px 10px;border:1px solid var(--border);border-radius:var(--r-sm);font-size:12px;width:100%;outline:none;}
.fin-sub-inp:focus{border-color:var(--warning);}
.fin-sub-save{padding:6px 16px;background:var(--warning);color:#fff;border:none;border-radius:var(--r-sm);font-size:12px;font-weight:600;cursor:pointer;font-family:inherit;}
.fin-sub-save:hover{filter:brightness(0.88);}
/* payType badge */
.ptbadge-cash{background:var(--primary-subtle);color:var(--primary-active);border-radius:var(--r-sm);padding:2px 8px;font-size:11px;font-weight:600;}
.ptbadge-chq{background:var(--info-subtle);color:var(--info);border-radius:var(--r-sm);padding:2px 8px;font-size:11px;font-weight:600;}
/* status badge */
.stbadge{display:inline-flex;align-items:center;gap:4px;padding:2px 9px;border-radius:var(--r-full);font-size:11px;font-weight:600;}
.stbadge-reg{background:var(--surface-2);color:var(--text-secondary);}
.stbadge-flow{background:var(--info-subtle);color:var(--info);}
.stbadge-coll{background:var(--primary-subtle);color:var(--primary-active);}
.stbadge-bnc{background:var(--danger-subtle);color:var(--danger);}
.stbadge-ret{background:var(--warning-subtle);color:var(--warning);}
/* modal rep search */
.rep-srch-wrap{position:relative;}
.rep-srch-drop{position:absolute;top:100%;right:0;left:0;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-sm);box-shadow:var(--shadow-pop);z-index:500;max-height:180px;overflow-y:auto;display:none;}
.rep-srch-drop.open{display:block;}
.rep-srch-item{padding:8px 12px;font-size:12.5px;cursor:pointer;transition:background .1s;}
.rep-srch-item:hover{background:var(--primary-subtle);}
/* bounced sub-section in modal */
.bnc-section{background:var(--warning-subtle);border:1px solid var(--warning);border-radius:var(--r-md);padding:14px;margin-top:10px;display:none;}
.bnc-section.open{display:block;}


/* ── Tasks Redesign ── */
.task-v2-wrap{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md);overflow:hidden;}
.task-v2-tbl{width:100%;border-collapse:collapse;min-width:1100px;}
.task-v2-tbl thead th{position:sticky;top:0;z-index:4;background:var(--surface);border-bottom:1px solid var(--border);text-align:right;padding:10px 13px;font-size:11.5px;color:var(--text-muted);font-weight:700;white-space:nowrap;}
.task-v2-tbl tbody tr{cursor:pointer;transition:background .08s;}
.task-v2-tbl tbody tr:hover td{background:var(--primary-subtle);}
.task-v2-tbl td{padding:11px 13px;border-top:1px solid var(--border);font-size:12.5px;color:var(--text-secondary);vertical-align:middle;}
.task-v2-tbl tbody tr:nth-child(even) td{background:var(--surface-2);}
.task-v2-tbl tbody tr:nth-child(even):hover td{background:var(--primary-subtle);}
.tv2-sts{display:inline-flex;align-items:center;gap:5px;padding:3px 10px;border-radius:var(--r-full);font-size:11px;font-weight:600;}
.tv2-sts-pending{background:var(--info-subtle);color:var(--info);}
.tv2-sts-done{background:var(--primary-subtle);color:var(--primary-active);}
.tv2-sts-declined{background:var(--danger-subtle);color:var(--danger);}
.tv2-type{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:var(--r-sm);font-size:10.5px;font-weight:600;background:var(--surface-2);color:var(--text-muted);}
.tv2-pri-h{background:var(--danger-subtle);color:var(--danger);}
.tv2-pri-m{background:var(--warning-subtle);color:var(--warning);}
.tv2-pri-l{background:var(--primary-subtle);color:var(--primary-active);}
.tv2-watcher{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:var(--violet-subtle);color:var(--violet);font-size:10px;font-weight:700;border:2px solid var(--surface);margin-right:-5px;}
.tv2-act{width:28px;height:28px;border-radius:var(--r-sm);border:none;background:transparent;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;color:var(--text-faint);}
.tv2-act:hover{background:var(--surface-2);color:var(--text-secondary);}
.tv2-act.done:hover{background:var(--primary-subtle);color:var(--primary-active);}
.tv2-act.edit:hover{background:var(--info-subtle);color:var(--info);}
.tv2-act.del:hover{background:var(--danger-subtle);color:var(--danger);}
/* task modal v2 */
.tm2-ov{position:fixed;inset:0;background:rgba(16,24,40,.5);z-index:900;display:flex;align-items:center;justify-content:center;padding:16px;overflow-y:auto;overscroll-behavior:contain;}
.tm2-bx{background:var(--surface);border-radius:var(--r-md);width:100%;max-width:620px;padding:28px;max-height:90vh;overflow-y:auto;overscroll-behavior:contain;box-shadow:var(--shadow-pop);}
.tm2-hd{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px;}
.tm2-title{font-size:16px;font-weight:700;color:var(--text-primary);}
.tm2-close{background:none;border:none;font-size:22px;cursor:pointer;color:var(--text-faint);line-height:1;}
.tm2-lbl{font-size:11.5px;font-weight:600;color:var(--text-secondary);display:block;margin-bottom:4px;}
.tm2-sec{font-size:10.5px;font-weight:700;color:var(--text-faint);letter-spacing:.6px;margin:14px 0 10px;padding-bottom:6px;border-bottom:1px solid var(--border);}
.tm2-watcher-chip{display:inline-flex;align-items:center;gap:4px;padding:3px 10px;border-radius:var(--r-full);font-size:11.5px;background:var(--info-subtle);color:var(--info);margin:2px;}
.tm2-watcher-chip button{background:none;border:none;cursor:pointer;font-size:13px;color:var(--info);padding:0 0 0 3px;line-height:1;}
.tm2-watcher-drop{position:absolute;top:100%;right:0;left:0;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md);box-shadow:var(--shadow-pop);z-index:500;max-height:160px;overflow-y:auto;display:none;}
.tm2-watcher-drop.open{display:block;}
.tm2-watcher-item{padding:7px 12px;font-size:12.5px;cursor:pointer;}
.tm2-watcher-item:hover{background:var(--surface-2);}
/* decline modal */
.decline-ov{position:fixed;inset:0;background:rgba(0,0,0,.4);z-index:1000;display:flex;align-items:center;justify-content:center;}
.decline-bx{background:white;border-radius:14px;padding:24px;max-width:380px;width:90%;box-shadow:0 12px 40px rgba(0,0,0,.15);}


/* ══════════════════════════════════════════
   ماژول سفارشات تولید
   ══════════════════════════════════════════ */
.prod-kpi-row{display:grid;gap:10px;margin-bottom:18px;}  /* تعدادِ ستون را کلاسِ همراه تعیین می‌کند */
/* ── نوارِ آمارِ سفارشات تولید (۱۵ شهریور ۱۴۰۵) ─────────────────────────────────
   کاربر خواست به‌جای چهار کارتِ عددیِ خشک، آمار جمله‌وار خوانده شود: «۲۰ طرح تولید
   شده — ۴۸٬۳۷۵ م²، درجه۱ ۷۴٪ · درجه C ۲۶٪». پس کارت از «عددِ درشت + برچسبِ ریز»
   به «جملهٔ کوتاه + خطِ متراژ» تبدیل شد؛ عدد همچنان درشت است ولی داخلِ جمله. */
.prod-stat-row{grid-template-columns:repeat(3,1fr);margin-bottom:9px;}
.prod-stat{background:var(--surface);border:1px solid var(--border);border-radius:12px;
  padding:13px 14px;display:flex;align-items:flex-start;gap:11px;min-width:0;}
.prod-stat-ico{width:38px;height:38px;border-radius:10px;display:flex;align-items:center;
  justify-content:center;font-size:18px;flex-shrink:0;}
.prod-stat-body{flex:1;min-width:0;}
.prod-stat-hd{font-size:13px;font-weight:600;color:var(--text-secondary);line-height:1.5;}
.prod-stat-hd b{font-size:21px;font-weight:800;color:var(--text-primary);margin-left:3px;}
.prod-stat-sub{font-size:11.5px;color:var(--text-muted);margin-top:2px;line-height:1.6;}
.prod-stat-sub b{font-weight:700;color:var(--text-primary);}
.prod-stat-bar{height:5px;border-radius:3px;overflow:hidden;margin-top:8px;background:var(--surface-2);}
.prod-stat-bar span{display:inline-block;height:100%;vertical-align:top;}
.prod-stat-note{font-size:10.5px;margin-top:6px;line-height:1.5;}
/* خطِ چسب: زیرِ آمارِ کاشی، با یک جداکنندهٔ نازک — چون کیلوگرم و متر مربع هرگز جمع نمی‌شوند
   (درخواستِ کاربر: «چسب رو باید جدا کنی»). وقتی هیچ سفارشِ چسبی نباشد اصلاً دیده نمی‌شود. */
.prod-stat-glue{font-size:11px;margin-top:7px;padding-top:6px;border-top:1px dashed var(--border);
  color:var(--violet);line-height:1.6;}
.prod-stat-glue b{font-weight:700;}
.prod-stat-foot{font-size:11.5px;color:var(--text-faint);margin:0 0 18px;padding:0 3px;}
.prod-tabs{display:flex;gap:3px;margin-bottom:14px;background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:4px;}
.prod-tab{padding:7px 16px;font-size:12.5px;border:none;background:transparent;cursor:pointer;color:var(--text-muted);border-radius:7px;transition:all .12s;display:flex;align-items:center;gap:5px;}
.prod-tab:hover{background:var(--surface-2);color:var(--text-secondary);}
.prod-tab.active{background:var(--warning);color:white;font-weight:600;}
.prod-tab-cnt{background:rgba(0,0,0,.1);border-radius:10px;padding:1px 7px;font-size:10.5px;}
.prod-tab.active .prod-tab-cnt{background:rgba(255,255,255,.3);}
.prod-toolbar{display:flex;gap:8px;margin-bottom:12px;flex-wrap:wrap;align-items:center;background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:10px 14px;}
.prod-tbl-wrap{background:var(--surface);border:1px solid var(--border);border-radius:12px;overflow-x:auto;}
.prod-tbl{width:100%;border-collapse:collapse;min-width:1080px;}
.prod-tbl thead th{position:sticky;top:0;z-index:4;background:var(--surface-2);border-bottom:2px solid var(--border);text-align:right;padding:10px 12px;font-size:11.5px;color:var(--text-muted);font-weight:700;white-space:nowrap;}
.prod-tbl tbody tr{cursor:pointer;transition:background .08s;}
.prod-tbl tbody tr:hover td{background:var(--warning-subtle);}
.prod-tbl td{padding:10px 12px;border-top:1px solid var(--surface-2);font-size:12.5px;color:var(--text-secondary);vertical-align:middle;}
.prod-tbl tbody tr:nth-child(even) td{background:var(--surface-2);}
.prod-tbl tbody tr:nth-child(even):hover td{background:var(--warning-subtle);}
.prod-tbl tbody tr.row-selected td{background:var(--warning-subtle) !important;}
.prod-chk-col{width:36px;text-align:center;}
.prod-sts{display:inline-flex;align-items:center;gap:4px;padding:3px 9px;border-radius:20px;font-size:10.5px;font-weight:600;white-space:nowrap;}
.prod-sts-pending{background:var(--info-subtle);color:var(--info);}
.prod-sts-sent{background:var(--warning-subtle);color:var(--warning);}
.prod-sts-producing{background:var(--violet-subtle);color:var(--violet);}
.prod-sts-done{background:var(--primary-subtle);color:var(--primary-active);}
.prod-sts-archived{background:var(--surface-2);color:var(--text-muted);}
.prod-sts-cancelled{background:var(--danger-subtle);color:var(--danger);}
.prod-sts-clickable{cursor:pointer;}
.prod-grade-1{background:var(--primary-subtle);color:var(--primary-active);padding:2px 9px;border-radius:12px;font-size:10.5px;font-weight:700;}
.prod-grade-c{background:var(--info-subtle);color:var(--info);padding:2px 9px;border-radius:12px;font-size:10.5px;font-weight:700;}
.prod-img-thumb{width:42px;height:42px;border-radius:8px;object-fit:cover;border:1px solid var(--border);cursor:pointer;display:block;}
.prod-img-none{width:42px;height:42px;border-radius:8px;background:var(--surface-2);display:flex;align-items:center;justify-content:center;color:var(--border);font-size:16px;}
.prod-send-bar{display:none;background:linear-gradient(135deg,var(--warning),var(--warning));border-radius:10px;padding:12px 18px;margin-bottom:14px;align-items:center;gap:12px;color:white;}
.prod-send-bar.visible{display:flex;}
.prod-send-bar-txt{flex:1;font-size:13px;font-weight:600;}
.prod-send-bar-btn{padding:8px 18px;background:var(--surface);color:var(--warning);border:none;border-radius:8px;font-size:12.5px;font-weight:700;cursor:pointer;font-family:inherit;}
.prod-send-bar-btn:hover{background:var(--warning-subtle);}
.prod-clear-sel{padding:6px 14px;background:rgba(255,255,255,.2);color:white;border:1px solid rgba(255,255,255,.4);border-radius:8px;font-size:12px;cursor:pointer;font-family:inherit;}
.prod-clear-sel:hover{background:rgba(255,255,255,.35);}
.factory-ov{position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:200;display:flex;align-items:center;justify-content:center;padding:16px;overflow-y:auto;overscroll-behavior:contain;}
.factory-bx{background:var(--surface);border-radius:16px;width:100%;max-width:800px;max-height:92vh;overflow-y:auto;overscroll-behavior:contain;padding:28px;box-shadow:0 24px 60px rgba(0,0,0,.2);}
.factory-letter{font-family:Tahoma,sans-serif;direction:rtl;background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:28px 32px;margin-top:16px;line-height:1.8;}
.factory-letter-hd{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:22px;padding-bottom:14px;border-bottom:2px solid var(--text-primary);}
.factory-letter-logo{font-size:16px;font-weight:800;color:var(--text-primary);}
.factory-letter-meta{text-align:left;font-size:11.5px;color:var(--text-muted);line-height:1.7;}
.factory-letter-title{font-size:14px;font-weight:700;color:var(--text-primary);text-align:center;margin-bottom:18px;}
.factory-letter-intro{font-size:12.5px;color:var(--text-secondary);margin-bottom:18px;line-height:1.9;}
.factory-letter-tbl{width:100%;border-collapse:collapse;margin-bottom:20px;}
.factory-letter-tbl th{background:var(--text-primary);color:white;padding:9px 12px;font-size:12px;font-weight:700;text-align:center;border:1px solid var(--text-secondary);}
.factory-letter-tbl td{padding:9px 12px;font-size:12px;text-align:center;border:1px solid var(--border);}
.factory-letter-tbl tr:nth-child(even) td{background:var(--surface-2);}
.factory-letter-foot{font-size:12px;color:var(--text-secondary);margin-top:18px;padding-top:14px;border-top:1px dashed var(--border);line-height:1.8;}
.factory-letter-sig{margin-top:40px;display:flex;justify-content:space-between;font-size:12px;color:var(--text-secondary);}
.factory-print-btn{padding:9px 22px;background:var(--text-primary);color:white;border:none;border-radius:8px;font-size:13px;font-weight:600;cursor:pointer;font-family:inherit;}
.factory-print-btn:hover{background:#0A1220;}
@media print{.factory-ov{position:static;background:none;padding:0;}.factory-bx{box-shadow:none;max-height:none;border-radius:0;}.factory-print-actions{display:none !important;}.factory-letter{border:none;}}
.prod-img-preview-wrap{width:100%;height:140px;border:2px dashed var(--border);border-radius:10px;display:flex;align-items:center;justify-content:center;background:var(--surface-2);cursor:pointer;overflow:hidden;position:relative;transition:border-color .15s;}
.prod-img-preview-wrap:hover{border-color:var(--warning);}
.prod-img-preview-wrap img{width:100%;height:100%;object-fit:cover;}
.prod-img-preview-empty{color:var(--text-faint);font-size:12px;display:flex;flex-direction:column;align-items:center;gap:6px;}
.prod-size-tag{display:inline-flex;align-items:center;padding:3px 10px;border-radius:8px;font-size:11.5px;font-weight:700;background:var(--surface-2);color:var(--text-secondary);font-family:'Courier New',monospace;}
.prod-sec-hdr{font-size:10.5px;font-weight:700;color:var(--text-faint);letter-spacing:.7px;margin:14px 0 10px;padding-bottom:6px;border-bottom:2px solid var(--warning-subtle);}
.prod-archived-row td{opacity:.55;}
.prod-extra-area-wrap{display:flex;align-items:center;gap:6px;}
.prod-note-tag{display:inline-flex;padding:2px 8px;border-radius:5px;font-size:10.5px;background:var(--warning-subtle);color:var(--warning);max-width:180px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}

/* ════ داشبورد V2 ══════════════════════════════════════════════════ */
#s-dashboard{background:var(--bg);margin:-20px;padding:22px 24px 30px;min-height:calc(100vh - 86px);color:var(--text-primary);}
.db-welcome-bar{display:flex;justify-content:space-between;align-items:center;margin-bottom:22px;flex-wrap:wrap;gap:10px;background:linear-gradient(135deg,#181b3a,#2b2e6e 55%,#4b2d94);border-radius:18px;padding:20px 26px;box-shadow:0 8px 24px rgba(20,20,70,.22);}
.db-welcome-left h1{margin:0 0 3px;font-size:19px;font-weight:800;color:#fff;letter-spacing:-.3px;}
.db-welcome-left p{margin:0;font-size:12px;color:#c9cbe8;}
.db-welcome-right{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.db-date-badge{font-size:11.5px;color:#7db4ff;background:rgba(0,115,234,.18);padding:5px 13px;border-radius:20px;border:1px solid rgba(0,115,234,.4);}
.db-updated{font-size:10.5px;color:#9a9dc9;}
.db-bottom-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:14px;}
.db-panel{background:#ffffff;border:1px solid #e6e9f5;border-radius:14px;overflow:hidden;}
.db-panel-hdr{padding:13px 16px;border-bottom:1px solid #eef0f9;display:flex;align-items:center;justify-content:space-between;}
.db-panel-ttl{font-size:13px;font-weight:700;color:#1a1f36;display:flex;align-items:center;gap:6px;}
.db-panel-link{font-size:11px;color:#0073ea;cursor:pointer;}.db-panel-link:hover{color:#0060c2;}
.db-panel-body{max-height:260px;overflow-y:auto;scrollbar-width:thin;scrollbar-color:#dfe3f5 transparent;}
.db-tl-item{display:flex;align-items:flex-start;gap:10px;padding:10px 16px;border-bottom:1px solid #eef0f9;transition:background .12s;}
.db-tl-item:last-child{border-bottom:none;}.db-tl-item:hover{background:#f4f6fd;}
.db-tl-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;margin-top:4px;}
.db-tl-ttl{font-size:12.5px;font-weight:600;color:#1a1f36;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.db-tl-meta{font-size:11px;color:#8b8fb0;margin-top:2px;display:flex;gap:7px;flex-wrap:wrap;}
.db-tl-badge{font-size:10px;padding:1px 7px;border-radius:20px;font-weight:600;background:#fef0d9;color:#a3620a;white-space:nowrap;}
.db-tl-rep{font-size:10.5px;font-weight:700;color:#7a3bb8;white-space:nowrap;}
.db-alert-item{display:flex;align-items:center;gap:10px;padding:10px 16px;border-bottom:1px solid var(--border);transition:background .12s;}
.db-alert-item:last-child{border-bottom:none;}.db-alert-item:hover{background:var(--surface-2);}
.db-alert-ico{width:34px;height:34px;border-radius:var(--r-sm);display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:16px;}
.db-alert-ico.ared{background:var(--danger-subtle);color:var(--danger);}.db-alert-ico.aamber{background:var(--warning-subtle);color:var(--warning);}
.db-alert-info{flex:1;min-width:0;}
.db-alert-nm{font-size:12.5px;font-weight:600;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.db-alert-sub{font-size:11px;color:var(--text-muted);margin-top:2px;}
.db-alert-badge{font-size:10.5px;padding:2px 9px;border-radius:var(--r-full);font-weight:700;flex-shrink:0;white-space:nowrap;}
.db-alert-badge.ared{background:var(--danger-subtle);color:var(--danger);}.db-alert-badge.aamber{background:var(--warning-subtle);color:var(--warning);}
.db-empty{padding:28px;text-align:center;color:var(--text-faint);font-size:12px;}
.db-pulse-dot{width:7px;height:7px;border-radius:50%;background:var(--danger);display:inline-block;margin-left:6px;animation:dbPulse 1.6s infinite;}
@keyframes dbPulse{0%,100%{opacity:1;}50%{opacity:.25;}}
.db-mention-card{border-right:3px solid #0073ea;}
.db-mention-item{display:flex;align-items:flex-start;gap:10px;padding:10px 16px;border-bottom:1px solid #eef0f9;}
.db-mention-item:last-child{border-bottom:none;}
.db-mention-badge{font-size:10px;padding:2px 8px;border-radius:20px;font-weight:700;white-space:nowrap;flex-shrink:0;}
.db-mention-badge.task{background:#fef0d9;color:#a3620a;}.db-mention-badge.mtg{background:#d9e9fd;color:#0060c2;}
.db-complaint-badge{font-size:10px;padding:2px 8px;border-radius:20px;font-weight:700;white-space:nowrap;background:var(--danger-subtle);color:var(--danger);}
@media(max-width:900px){.db-bottom-grid{grid-template-columns:1fr;}.db-mid-grid{grid-template-columns:1fr!important;}}

/* ── داشبورد ریدیزاین (بر اساس مرجع تصویری) ───────────────────── */
.db-welcome-bar2{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:20px;flex-wrap:wrap;gap:14px;}
.db-welcome-bar2 h1{margin:0 0 4px;font-size:20px;font-weight:800;color:var(--text-primary);}
.db-welcome-bar2 p{margin:0;font-size:12.5px;color:var(--text-muted);}
.db-welcome-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.db-kpi-row{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:18px;}
/* ⚠️ کارت‌ها حالا عددِ ۱۲رقمیِ ریالی و نمودارِ ۱۲ماهه دارند و زیرِ ~۴۹۰px خوانا نیستند؛
   بدونِ این دو قاعده، 1fr به‌خاطر min-width:auto کوتاه نمی‌آمد و کلِ ردیف از صفحه می‌زد بیرون. */
@media(max-width:1600px){.db-kpi-row{grid-template-columns:repeat(2,1fr);}}
@media(max-width:620px){.db-kpi-row{grid-template-columns:1fr;}}
.db-kpi-card2{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md);padding:16px 18px 10px;box-shadow:var(--shadow-card);min-width:0;}
.db-kpi-top2{display:flex;align-items:flex-start;justify-content:space-between;gap:8px;}
.db-kpi-lbl2{font-size:12px;color:var(--text-muted);margin-bottom:6px;}
.db-kpi-val2{font-size:clamp(15px,1.3vw,21px);font-weight:800;color:var(--text-primary);line-height:1.15;white-space:nowrap;font-variant-numeric:tabular-nums;}
.db-kpi-ico2{width:38px;height:38px;border-radius:var(--r-sm);display:flex;align-items:center;justify-content:center;flex-shrink:0;}
.db-kpi-ico2.c-teal{background:var(--teal-subtle);color:var(--teal);}
.db-kpi-ico2.c-blue{background:var(--info-subtle);color:var(--info);}
.db-kpi-ico2.c-amber{background:var(--warning-subtle);color:var(--warning);}
.db-kpi-ico2.c-green{background:var(--primary-subtle);color:var(--primary-active);}
/* خطِ راهنمای رنگیِ زیرِ عددِ کارت — «● زیگما ۱۲۳ · ● نوین‌پلاس ۴۵۶».
   جایِ نوارِ درصدِ قدیمی (db-kpi-trend2) را گرفت: کاربر تفکیک خواست، نه درصدِ تغییر. */
.db-kpi-legend{display:flex;flex-wrap:wrap;gap:4px 12px;margin-top:8px;font-size:11px;min-height:16px;}
.db-kpi-leg{display:inline-flex;align-items:center;gap:4px;white-space:nowrap;}
.db-kpi-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;display:inline-block;}
.db-kpi-leg-n{color:var(--text-muted);}
.db-kpi-leg-v{color:var(--text-primary);font-weight:700;font-variant-numeric:tabular-nums;}
/* بلندتر از نوارِ ریزِ قبلی (۳۴px): حالا ۱۲ میله با برچسبِ ماه دارد، نه یک خطِ تزئینی. */
.db-kpi-spark2{height:74px;margin-top:8px;margin-inline:-4px;}
.db-card2{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md);overflow:hidden;box-shadow:var(--shadow-card);display:flex;flex-direction:column;}
.db-card2-hdr{padding:14px 18px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;gap:10px;flex-shrink:0;}
.db-card2-ttl{font-size:13.5px;font-weight:700;color:var(--text-primary);display:flex;align-items:center;gap:7px;}
.db-card2-link{font-size:11.5px;color:var(--primary);cursor:pointer;white-space:nowrap;font-weight:600;}
.db-card2-link:hover{color:var(--primary-hover);}
/* پنجره‌های هم‌ردیف باید هم‌قد باشند (نه یکی جمع، یکی به‌اندازهٔ عکس ضمیمه بلند) — به‌جای
   align-items:start قبلی، حالا هر دو کارت این ردیف با کشش پیش‌فرض گرید هم‌ارتفاع می‌شوند؛ ارتفاع
   واقعی هرکدام هم با سقف ~۶ ردیف روی ناحیهٔ قابل‌اسکرول داخلش (پایین‌تر) محدود شده، وگرنه خودِ
   کشش هیچ سقفی نداشت و باز هم بلندترین کارت کل ردیف را می‌کشید. */
.db-row2{display:grid;grid-template-columns:2fr 1fr;gap:14px;margin-bottom:14px;}
@media(max-width:1000px){.db-row2{grid-template-columns:1fr;}}
.db-row3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px;margin-bottom:14px;}
@media(max-width:1000px){.db-row3{grid-template-columns:1fr;}}
.db-tasks-tabs{display:flex;gap:4px;padding:10px 14px 0;flex-shrink:0;}
.db-tasks-tab{font-size:12px;font-weight:600;color:var(--text-muted);background:var(--bg);border:none;border-radius:var(--r-sm) var(--r-sm) 0 0;padding:8px 14px;cursor:pointer;font-family:inherit;}
.db-tasks-tab.active{color:var(--primary-active);background:var(--primary-subtle);}
/* سقف ~۶ ردیف (هر ردیف جدول ~۴۰px) — بیشتر از این با اسکرول داخلی همین جدول دیده می‌شود، نه با
   بلندشدن کل کارت. flex:1 هم باعث می‌شود وقتی ردیف کنارش (فعالیت‌های امروز) کارت را کشیده، این
   ناحیه هم تا همان ارتفاع پر شود، نه این‌که فقط بالای کارت بچسبد و پایینش خالی بماند. */
.db-tasks-tbl-wrap{overflow:auto;max-height:240px;flex:1;min-height:0;}
.db-tasks-tbl{width:100%;border-collapse:collapse;font-size:12.5px;}
.db-tasks-tbl th{text-align:right;font-size:11px;color:var(--text-muted);font-weight:600;padding:10px 12px;border-bottom:1px solid var(--border);white-space:nowrap;}
.db-tasks-tbl td{padding:10px 12px;border-bottom:1px solid var(--border);white-space:nowrap;color:var(--text-primary);}
.db-tasks-tbl tr:last-child td{border-bottom:none;}
.db-tasks-tbl tbody tr{cursor:pointer;}
.db-tasks-tbl tbody tr:hover{background:var(--surface-2);}
.db-pri-badge{font-size:10.5px;font-weight:700;padding:2px 10px;border-radius:var(--r-full);white-space:nowrap;}
.db-pri-badge.high{background:var(--danger-subtle);color:var(--danger);}
.db-pri-badge.medium{background:var(--warning-subtle);color:var(--warning);}
.db-pri-badge.low{background:var(--primary-subtle);color:var(--primary-active);}
.db-sts-badge2{font-size:10.5px;font-weight:700;padding:2px 10px;border-radius:var(--r-full);white-space:nowrap;}
.db-sts-badge2.done{background:var(--bg);color:var(--text-secondary);}
.db-sts-badge2.doing{background:var(--warning-subtle);color:var(--warning);}
.db-sts-badge2.pending{background:var(--bg);color:var(--text-muted);}
.db-sts-badge2.overdue{background:var(--danger-subtle);color:var(--danger);}
.db-tasks-progress-wrap{padding:12px 18px 16px;flex-shrink:0;}
.db-tasks-progress-lbl{font-size:11.5px;color:var(--text-muted);margin-bottom:6px;}
.db-tasks-progress-bar{height:6px;background:var(--bg);border-radius:var(--r-full);overflow:hidden;}
.db-tasks-progress-fill{height:100%;background:var(--primary);border-radius:var(--r-full);}
/* سقف ~۶ ردیف (هر آیتم فعالیت امروز ~۵۰px با آیکون گرد) — رجوع به توضیح db-tasks-tbl-wrap بالا */
.db-today-list{padding:6px 0;overflow-y:auto;max-height:300px;flex:1;min-height:0;}
.db-today-item{display:flex;align-items:flex-start;gap:10px;padding:10px 18px;position:relative;}
.db-today-item:not(:last-child)::before{content:'';position:absolute;right:29px;top:34px;bottom:-2px;width:1px;background:var(--border);}
.db-today-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0;margin-top:4px;z-index:1;border:2px solid var(--surface);box-shadow:0 0 0 1px var(--border);}
.db-today-ico{width:30px;height:30px;border-radius:var(--r-sm);flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:13px;}
.db-today-time{font-size:11px;color:var(--text-muted);font-weight:700;min-width:38px;text-align:left;flex-shrink:0;}
.db-today-ttl{font-size:12.5px;font-weight:600;color:var(--text-primary);}
.db-today-sub{font-size:11px;color:var(--text-muted);margin-top:1px;}
.db-tbl2{width:100%;border-collapse:collapse;font-size:12px;}
.db-tbl2 th{text-align:right;font-size:10.5px;color:var(--text-muted);font-weight:600;padding:9px 14px;border-bottom:1px solid var(--border);white-space:nowrap;}
.db-tbl2 td{padding:9px 14px;border-bottom:1px solid var(--border);white-space:nowrap;color:var(--text-primary);font-size:12px;}
.db-tbl2 tr:last-child td{border-bottom:none;}
.db-tbl2 tbody tr{cursor:pointer;}
.db-tbl2 tbody tr:hover{background:var(--surface-2);}
.db-dot-badge{display:inline-flex;align-items:center;gap:5px;font-size:10.5px;font-weight:700;padding:2px 10px;border-radius:var(--r-full);white-space:nowrap;}
.db-dot-badge .dot{width:6px;height:6px;border-radius:50%;}
.db-dot-badge.red{background:var(--danger-subtle);color:var(--danger);}.db-dot-badge.red .dot{background:var(--danger);}
.db-dot-badge.amber{background:var(--warning-subtle);color:var(--warning);}.db-dot-badge.amber .dot{background:var(--warning);}
.db-dot-badge.green{background:var(--primary-subtle);color:var(--primary-active);}.db-dot-badge.green .dot{background:var(--primary);}
.db-dot-badge.blue{background:var(--info-subtle);color:var(--info);}.db-dot-badge.blue .dot{background:var(--info);}
.db-dot-badge.gray{background:var(--bg);color:var(--text-muted);}.db-dot-badge.gray .dot{background:var(--text-faint);}
/* سقف ~۶ ردیف (هر آیتم db-alert-item ~۵۵px) — همین کلاس برای alerts/bounced/complaints/advance و
   (با افزودن دستی همین کلاس در HTML) برای admin-alerts/transfers/production هم استفاده می‌شود، تا
   هر ۹ پنجرهٔ لیستی داشبورد یک قاعدهٔ ارتفاع یکسان داشته باشند. */
.db-list2{padding:4px 0;overflow-y:auto;max-height:330px;flex:1;min-height:0;}
.db-list2-item{display:flex;align-items:center;gap:10px;padding:9px 18px;border-bottom:1px solid #f5f6fb;}
.db-list2-item:last-child{border-bottom:none;}
.db-list2-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0;}
@keyframes slideInRight{from{transform:translateX(100%);}to{transform:translateX(0);}}
@keyframes ss-spin{to{transform:rotate(360deg);}}
/* جست‌وجوی سراسری هدر — ردیف پیداشده در جدول مقصد را چند ثانیه پررنگ می‌کند تا چشم کاربر رویش بیفتد */
@keyframes gsFlash{0%,100%{background-color:transparent;}20%,60%{background-color:#fef3c7;}}
.gs-flash{animation:gsFlash 2s ease-in-out;}

/* فهرستِ انتخابِ ورودِ طرف‌حساب از سپیدار — «در CRM نیست» باید در نگاهِ اول پیدا باشد.
   خطِ آبیِ لبهٔ راست + زمینهٔ آبیِ کم‌رنگ، و در مقابل ردیفِ «از قبل موجود» عمداً کم‌رنگ می‌شود
   تا چشم رویِ کارِ باقی‌مانده بیفتد، نه رویِ چیزی که قبلاً وارد شده.
   حالتِ سومِ «حذف‌شده» (قرمز): طرف‌حسابی که قبلاً کنار گذاشته شده. عمداً **کم‌رنگ یا قفل نیست** —
   تیک‌زدنش تنها راهِ برگرداندنِ آن است (درخواستِ کاربر ۲۰۲۶/۰۸/۲۷)، پس باید دعوت‌کننده به کلیک
   بماند، نه غیرفعال به‌نظر برسد. */
.ss-pick-row td{border-bottom:1px solid var(--border);}
.ss-pick-row.ss-pick-new td{background:var(--info-subtle);}
.ss-pick-row.ss-pick-new td:first-child{box-shadow:inset -3px 0 0 var(--info);}
.ss-pick-row.ss-pick-new:hover td{background:#DCE8FA;}
.ss-pick-row.ss-pick-have td{background:var(--surface-2);color:var(--text-muted);}
.ss-pick-row.ss-pick-have:hover td{background:var(--bg);}
.ss-pick-row.ss-pick-off td{background:var(--danger-subtle);}
.ss-pick-row.ss-pick-off td:first-child{box-shadow:inset -3px 0 0 var(--danger);}
.ss-pick-row.ss-pick-off:hover td{background:#F7DEDC;}
.ss-pick-off-tag{background:var(--danger-subtle);color:var(--danger);border:1px solid #EFC4C1;border-radius:10px;padding:1px 7px;font-size:10px;margin-left:4px;font-weight:700;}
.ss-pick-new-tag{background:var(--info-subtle);color:var(--info);border:1px solid #C7DAF6;border-radius:10px;padding:1px 7px;font-size:10px;margin-left:4px;font-weight:700;}
