/* ===================================================================
   سامانهٔ حسابداری پروژه‌ها — استایل سراسری (RTL، موبایل‌محور)
   فونت: Vazirmatn (محلی) با fallback به IRANSans/Shabnam/Tahoma/Arial
   =================================================================== */
@font-face{font-family:'Vazirmatn';font-style:normal;font-weight:400;font-display:swap;
  src:url('../fonts/Vazirmatn-Regular.woff2') format('woff2')}
@font-face{font-family:'Vazirmatn';font-style:normal;font-weight:500;font-display:swap;
  src:url('../fonts/Vazirmatn-Medium.woff2') format('woff2')}
@font-face{font-family:'Vazirmatn';font-style:normal;font-weight:700;font-display:swap;
  src:url('../fonts/Vazirmatn-Bold.woff2') format('woff2')}
@font-face{font-family:'Vazirmatn';font-style:normal;font-weight:800;font-display:swap;
  src:url('../fonts/Vazirmatn-Black.woff2') format('woff2')}

:root{
  --navy:#1f3864; --navy2:#2e5496; --gold:#c9a227; --gold-soft:#fff4d6;
  --green:#2e7d32; --green-soft:#e6f4ea; --red:#c0392b; --red-soft:#fdecea;
  --yellow:#f1c40f; --yellow-soft:#fff6da; --blue:#1d6fb8; --blue-soft:#e8f1fb;
  --gray:#f3f6fb; --line:#e4e9f2; --txt:#1e2a3a; --muted:#64748b;
  --font:'Vazirmatn','IRANSans','Shabnam',Tahoma,Arial,sans-serif;
  --shadow:0 1px 3px rgba(16,38,76,.06),0 1px 2px rgba(16,38,76,.04);
  --shadow-lg:0 10px 30px rgba(16,38,76,.12);
  --sidebar-w:250px; --sidebar-w-rail:66px;
}
*{box-sizing:border-box}
/* سرریز افقی فقط روی html بسته می‌شود و به viewport منتقل می‌گردد.
   اگر روی body هم بسته شود، body خودش «کادر اسکرول» می‌شود و آن‌وقت هیچ
   position:sticky ای (نوار بالای صفحه و سرستون جدول‌ها) دیگر نمی‌چسبد. */
html{-webkit-text-size-adjust:100%;overflow-x:hidden}
html,body{max-width:100%}
body{margin:0;font-family:var(--font);background:var(--gray);color:var(--txt);direction:rtl;
  font-size:14px;line-height:1.7;-webkit-font-smoothing:antialiased}
a{color:var(--navy2);text-decoration:none}
a:hover{text-decoration:underline}
.num{direction:ltr;text-align:right;font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1;unicode-bidi:plaintext}
.muted{color:var(--muted)} .small{font-size:12.5px}

/* ---------- Layout ---------- */
.app{display:flex;min-height:100vh}
.sidebar{width:var(--sidebar-w);background:linear-gradient(180deg,#1a2f57,#1f3864);color:#dce6f7;
  position:fixed;top:0;right:0;bottom:0;overflow-y:auto;overflow-x:hidden;z-index:1000;padding-bottom:30px;
  transition:transform .25s ease,width .2s ease}
.sidebar .brand{padding:16px;font-weight:700;font-size:15px;color:#fff;display:flex;gap:9px;align-items:center;
  border-bottom:1px solid rgba(255,255,255,.12);position:sticky;top:0;background:#1a2f57;z-index:2}
.sidebar .brand .logo{width:32px;height:32px;border-radius:9px;background:var(--gold);color:#1f3864;
  display:flex;align-items:center;justify-content:center;font-weight:800;font-size:17px;overflow:hidden;flex:none}
.sidebar .brand .logo img{width:100%;height:100%;object-fit:contain;display:block}
.sidebar .brand.is-wide{justify-content:center;padding:14px 16px}
.sidebar .brand .logo.is-wide{width:100%;max-width:186px;height:auto;border-radius:12px;
  background:rgba(255,255,255,.95);padding:9px 12px}
.sidebar .brand .logo.is-wide img{width:100%;height:auto}
.menu{list-style:none;margin:8px 0;padding:0}
.menu > li > a,
.menu .nav-sub a{display:flex;align-items:center;gap:11px;padding:11px 16px;color:#cdd9ef;font-size:14px;
  border-right:3px solid transparent;transition:background .15s}
.menu > li > a i,
.menu .nav-sub a i{font-size:17px;width:20px;text-align:center;flex:none}
.menu > li > a:hover,
.menu .nav-sub a:hover{background:rgba(255,255,255,.07);text-decoration:none;color:#fff}
.menu > li > a.active,
.menu .nav-sub a.active{background:rgba(201,162,39,.18);border-right-color:var(--gold);color:#fff;font-weight:700}
.menu .sep{font-size:11px;color:#8aa0c6;padding:14px 16px 5px;letter-spacing:.4px;font-weight:700}

/* سرفصل‌های تاشو */
.menu .nav-group{margin:1px 0}
.menu .nav-group-toggle{
  display:flex;align-items:center;gap:11px;width:100%;box-sizing:border-box;
  padding:12px 16px;margin:0;background:transparent;border:0;border-right:3px solid transparent;
  color:#fff;font-size:16px;font-weight:800;cursor:pointer;text-align:right;
  font-family:inherit;line-height:1.35;letter-spacing:.2px;
  transition:background .15s,color .15s
}
.menu .nav-group-toggle > .bi:first-child{font-size:19px;width:22px;text-align:center;flex:none}
.menu .nav-group-toggle:hover{background:rgba(255,255,255,.07);color:#fff}
.menu .nav-group.open > .nav-group-toggle,
.menu .nav-group.has-active > .nav-group-toggle{
  color:#fff;background:rgba(201,162,39,.12);border-right-color:var(--gold)
}
.menu .nav-chev{margin-right:auto;font-size:12px;opacity:.65;transition:transform .2s ease;flex:none}
.menu .nav-group.open > .nav-group-toggle .nav-chev{transform:rotate(180deg);opacity:1}
.menu .nav-sub{
  list-style:none;margin:0;padding:0 0 4px;display:none;
  background:rgba(0,0,0,.14);border-right:3px solid rgba(201,162,39,.15)
}
.menu .nav-group.open > .nav-sub{display:block}
.menu .nav-sub a{padding:9px 16px 9px 14px;padding-right:42px;font-size:13.5px;color:#b8c8e4}
.menu .nav-sub a i{font-size:15px;opacity:.9}
/* پانویس کوتاه زیر عنوان یک آیتم منو */
.menu .nav-note{display:block;font-size:10.5px;font-weight:400;color:#8fa5c8;margin-top:2px;line-height:1.5}
.menu a.active .nav-note{color:#d9c48a}
.content{margin-right:var(--sidebar-w);flex:1;display:flex;flex-direction:column;min-width:0;
  transition:margin-right .2s ease}
.backdrop{display:none;position:fixed;inset:0;background:rgba(13,25,48,.5);z-index:900}
.backdrop.show{display:block}

/* ---------- سایدبار جمع‌شونده ----------
   فقط روی دسکتاپ معنا دارد: آنجا سایدبار همیشه سر جایش است و جمع‌کردنش
   فضای کار را باز می‌کند. روی موبایل سایدبار از قبل کشویی است، پس این
   قوانین اصلاً وارد نمی‌شوند و چیزی برای خنثی‌کردن نمی‌ماند. */
@media(min-width:861px){
  /* ---------- سایدبار جمع‌شونده (دسکتاپ) ----------
     جمع‌شده = ریل آیکونی: مسیرها سر جایشان می‌مانند و فقط متن می‌رود، پس فضای
     کار بازتر می‌شود بدون اینکه ناوبری از دست برود. وضعیت در localStorage
     می‌ماند و پیش از رسم صفحه اعمال می‌شود تا پرش نداشته باشد. */
  html.nav-collapsed .sidebar{width:var(--sidebar-w-rail)}
  html.nav-collapsed .content{margin-right:var(--sidebar-w-rail)}

  /* متن‌ها می‌روند، آیکون‌ها وسط می‌نشینند */
  html.nav-collapsed .sidebar .menu > li > a > span,
  html.nav-collapsed .sidebar .nav-group-toggle > span,
  html.nav-collapsed .sidebar .nav-chev,
  html.nav-collapsed .sidebar .menu .sep{display:none}
  html.nav-collapsed .sidebar .menu > li > a,
  html.nav-collapsed .sidebar .nav-group-toggle{justify-content:center;padding-right:0;padding-left:0;gap:0}

  /* زیرمنوها در حالت ریل جا نمی‌شوند؛ با کلیک روی سرفصل، سایدبار باز می‌شود */
  html.nav-collapsed .sidebar .nav-sub{display:none!important}

  /* نشانگر مسیر فعال در ریل هم باید دیده شود */
  html.nav-collapsed .sidebar .menu > li > a.active{border-right-color:var(--gold)}

  /* لوگوی عریض جای خود را به نشان کوچک می‌دهد */
  html.nav-collapsed .sidebar .brand{padding:14px 0;justify-content:center}
  html.nav-collapsed .sidebar .brand .logo.is-wide{width:40px;max-width:40px;height:40px;
    border-radius:10px;padding:5px}
  html.nav-collapsed .sidebar .brand .logo.is-wide img{height:100%;object-fit:contain}
}

/* دکمهٔ جمع/باز — روی دسکتاپ آیکونش تغییر می‌کند تا کارش پیدا باشد */
.hamburger .bi-list{display:inline-block}
.hamburger .bi-layout-sidebar-inset{display:none}
@media(min-width:861px){
  .hamburger .bi-list{display:none}
  .hamburger .bi-layout-sidebar-inset{display:inline-block}
}


/* ---------- Topbar ---------- */
.topbar{background:#fff;border-bottom:1px solid var(--line);padding:10px 18px;display:flex;
  align-items:center;justify-content:space-between;gap:10px;position:sticky;top:0;z-index:30;box-shadow:var(--shadow)}
.topbar .title{font-weight:700;color:var(--navy);font-size:16px;display:flex;align-items:center;gap:10px;min-width:0}
.topbar .title .t-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hamburger{display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--line);background:#fff;border-radius:9px;
  width:40px;height:40px;font-size:20px;color:var(--navy);cursor:pointer;flex:none}
.topbar .user{display:flex;align-items:center;gap:10px;font-size:13px;color:var(--muted)}
.topbar .user .uname{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:120px}
.topbar .user .role{background:var(--navy);color:#fff;border-radius:20px;padding:3px 12px;font-size:12px;white-space:nowrap}
.main{padding:20px;flex:1}
@media(max-width:860px){.main{padding:14px}}

/* ---------- KPI cards ---------- */
.kpis{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:13px;margin-bottom:18px}
.kpi{background:#fff;border:1px solid var(--line);border-radius:14px;padding:14px 16px;
  box-shadow:var(--shadow);border-top:3px solid var(--navy)}
.kpi .label{font-size:12.5px;color:var(--muted);margin-bottom:7px;display:flex;align-items:center;gap:6px}
.kpi .value{font-size:21px;font-weight:800;color:var(--navy);direction:ltr;text-align:right;
  font-variant-numeric:tabular-nums;unicode-bidi:plaintext;line-height:1.2}
.kpi .sub{font-size:11px;color:var(--muted);margin-top:4px}
.kpi.gold{border-top-color:var(--gold)} .kpi.gold .value{color:#9c6500}
.kpi.green{border-top-color:var(--green)} .kpi.green .value{color:var(--green)}
.kpi.red{border-top-color:var(--red)} .kpi.red .value{color:var(--red)}
.kpi.blue{border-top-color:var(--blue)} .kpi.blue .value{color:var(--blue)}
.kpi.gray{border-top-color:#94a3b8} .kpi.gray .value{color:#475569}

/* ---------- Card ---------- */
.card{background:#fff;border:1px solid var(--line);border-radius:14px;margin-bottom:18px;box-shadow:var(--shadow)}
.card .head{padding:13px 16px;border-bottom:1px solid var(--line);font-weight:700;color:var(--navy);
  display:flex;justify-content:flex-start;align-items:center;gap:8px;flex-wrap:wrap;direction:rtl;text-align:right}
/* عنوان اول (سمت راست) و آیکن بعد از آن — هم برای حالت ساده و هم داخل span */
.card .head > i, .card .head > span > i{order:2;flex:0 0 auto;margin:0}
.card .head > span{display:inline-flex;align-items:center;gap:6px;flex:0 1 auto}
.card .head .head-title{flex:0 1 auto}
/* اقدام‌ها/دکمه‌ها در لبهٔ مقابل (چپ) باقی می‌مانند */
.card .head > .toolbar, .card .head > a, .card .head > form{margin-inline-start:auto}
.card .body{padding:16px}
.grid2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;align-items:stretch}
.grid2>.card{min-width:0;margin-bottom:0;display:flex;flex-direction:column}
.grid2>.card>.body{flex:1}
.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
@media(max-width:1100px){.grid3{grid-template-columns:1fr 1fr}}
@media(max-width:820px){.grid2,.grid3{grid-template-columns:1fr}}

/* ---------- Alert / warning banner ---------- */
.alert{display:flex;gap:10px;align-items:flex-start;padding:13px 16px;border-radius:12px;margin-bottom:16px;font-size:13.5px}
.alert i{font-size:20px;flex:none;margin-top:1px}
.alert-warn{background:var(--yellow-soft);color:#8a6d00;border:1px solid #f3e0a6}
.alert-info{background:var(--blue-soft);color:#114e86;border:1px solid #bfdcf5}
.alert-danger{background:var(--red-soft);color:var(--red);border:1px solid #f3c6c1}
.alert .a-act{margin-right:auto}

/* ---------- Table ---------- */
.table-wrap{width:100%;max-width:100%;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch}
table.tbl{width:100%;border-collapse:collapse;font-size:13px}
table.tbl th{background:var(--navy);color:#fff;padding:10px 14px;text-align:right;font-weight:600;white-space:nowrap}
/* جداکنندهٔ کم‌رنگ بین عنوان ستون‌ها تا عنوان‌های کوتاه به هم نچسبند */
table.tbl thead th + th{border-right:1px solid rgba(255,255,255,.16)}
/* سرتیتر جدول دومِ فهرست‌های دو بخشی (مثلاً «پروژه‌های اتمام موجودی») */
.split-head{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;
  margin:22px 0 10px;padding:9px 13px;border-radius:10px;
  background:#f4f6f9;border-right:4px solid var(--navy);font-weight:700;color:#1f3864}
.split-head .muted{font-weight:400}
/* نوار عنوان بخش داخل یک جدول (گزارش کامل پروژه‌های در راه) */
table.tbl tr.sec-band td{background:#f4f6f9;border-right:4px solid var(--navy);
  color:#1f3864;padding:8px 12px;font-size:.95rem}
table.tbl td{padding:9px 10px;border-bottom:1px solid var(--line);white-space:nowrap;vertical-align:middle}
/* ستون شرح متنی (مثل «وضعیت محموله») — متن کامل در چند سطر دیده می‌شود */
/* وسط‌چین کردن یک ستون خاص جدول (مثل «شرح کالا» در بودجه سفارش) */
table.tbl th.ctr,table.tbl td.ctr{text-align:center}
table.tbl td.cell-wrap{white-space:normal;min-width:300px;max-width:430px;line-height:1.75;text-align:justify}
table.tbl tbody tr:nth-child(even) td{background:#fafbfe}
table.tbl tbody tr:hover td{background:#eef3fb}
table.tbl tfoot td{background:#eef3fb;font-weight:700}

/* هدر آبی جدول هنگام اسکرول عمودی می‌چسبد (نه fixed دائمی) */
.card > .body.table-sticky{padding-top:0;padding-bottom:0}
.table-wrap.table-sticky{
  overflow:auto;
  /* کادر جدول تا پایین صفحه کشیده می‌شود تا سرتیتر چسبانش نزدیک بالای صفحه بنشیند */
  max-height:calc(100vh - var(--head-top,61px) - 24px);
  -webkit-overflow-scrolling:touch
}
.table-wrap.table-sticky table.tbl{
  border-collapse:separate;
  border-spacing:0
}
.table-wrap.table-sticky table.tbl thead th{
  position:sticky;
  top:0;
  z-index:3;
  background:var(--navy);
  box-shadow:0 1px 0 rgba(0,0,0,.08)
}
/* ستون اول (کد پروژه) هنگام اسکرول افقی می‌چسبد — در RTL سمت راست */
.table-wrap.table-sticky table.tbl .sticky-col{
  position:sticky;
  right:0;
  z-index:2
}
.table-wrap.table-sticky table.tbl thead th.sticky-col{
  z-index:4;
  box-shadow:-3px 1px 6px -2px rgba(0,0,0,.18)
}
.table-wrap.table-sticky table.tbl tbody td.sticky-col{
  background:#fff;
  box-shadow:-3px 0 6px -2px rgba(16,38,76,.14)
}
.table-wrap.table-sticky table.tbl tbody tr:nth-child(even) td.sticky-col{background:#fafbfe}
.table-wrap.table-sticky table.tbl tbody tr:hover td.sticky-col{background:#eef3fb}
.table-wrap.table-sticky table.tbl tfoot td.sticky-col{
  background:#eef3fb;
  z-index:4;
  box-shadow:-3px 0 6px -2px rgba(16,38,76,.14)
}
/* ردیف‌های جمع، پایین کادر می‌مانند و فقط فهرست بینشان اسکرول می‌شود.
   فاصلهٔ هر ردیف از کف (--foot-bottom) را app.js از روی ارتفاع ردیف‌های
   پایین‌ترش حساب می‌کند تا چند ردیف جمع روی هم نیفتند. */
.table-wrap.table-sticky table.tbl tfoot td{
  position:sticky;
  bottom:var(--foot-bottom,0px);
  z-index:3
}
.table-wrap.table-sticky table.tbl tfoot tr:first-child td{border-top:2px solid #cbd6e6}
/* سرستون جدول با اسکرول عمودی صفحه بالا می‌ماند (زیر نوار بالای صفحه).
   فقط برای جدول‌های باریکی که نیازی به اسکرول افقی ندارند؛ چون سرستون چسبان
   با کادرِ اسکرول افقی جمع نمی‌شود. */
.table-wrap.head-sticky{overflow:visible}
.table-wrap.head-sticky table.tbl,
.table-wrap.head-sticky table.fxplan{border-collapse:separate;border-spacing:0}
.table-wrap.head-sticky table.tbl thead th,
.table-wrap.head-sticky table.fxplan thead th{
  position:sticky;
  top:var(--head-top,61px);
  z-index:6;
  box-shadow:0 1px 0 rgba(0,0,0,.10)
}
.table-wrap.head-sticky table.tbl td{border-bottom:1px solid var(--line)}
/* بدون اسکرول افقی، متن بلند باید بشکند تا از کادر بیرون نزند */
.table-wrap.head-sticky table.tbl td{white-space:normal}
@media(max-width:760px){
  /* روی موبایل جدول دوباره افقی اسکرول می‌شود و چسبیدن سرستون معنا ندارد */
  .table-wrap.head-sticky{overflow-x:auto;overflow-y:hidden}
  .table-wrap.head-sticky table.tbl thead th,
  .table-wrap.head-sticky table.fxplan thead th{position:static}
}

.miss{background:var(--red-soft)!important;color:var(--red);font-weight:600}

/* ردیف پروژه‌های بازمانده از دورهٔ مالی قبل (انتهای فهرست پروژه‌ها) */
.tbl tbody tr.row-carry>td{background:var(--gold-soft);border-top:1px solid #e8c78a}
.tbl tbody tr.row-carry:hover>td{background:#fdeec2}


/* ---------- Badges ---------- */
.badge{display:inline-block;border-radius:20px;padding:3px 11px;font-size:11.5px;font-weight:700;white-space:nowrap}
.badge-high{background:var(--red-soft);color:var(--red)}
.badge-medium{background:var(--yellow-soft);color:#9c6500}
.badge-low{background:#eef0f3;color:#5b6b7e}
.badge-ok,.badge-done{background:var(--green-soft);color:var(--green)}
.badge-open{background:var(--yellow-soft);color:#9c6500}
.badge-line{background:#fff;border:1px solid;padding:2px 10px}
.badge-line-warn{border-color:#f0b3ab;background:var(--red-soft);color:var(--red)}
.badge-line-ok{border-color:#a8d5b1;background:var(--green-soft);color:var(--green)}
.badge-line-soon{border-color:#e8c78a;background:var(--yellow-soft);color:#9c6500}
.badge-line-none{border-color:#d7dce3;background:#f4f6f9;color:#5b6b7e}

/* کادر «تاریخ خروج انبار» هنگام صدور فاکتور از پیش‌فاکتور */
.pf-dialog{border:0;border-radius:14px;padding:0;max-width:430px;width:calc(100% - 28px);
  box-shadow:0 18px 50px rgba(16,24,40,.22);direction:rtl}
.pf-dialog::backdrop{background:rgba(16,24,40,.45)}
.pf-dialog form{padding:20px 22px;text-align:right}
.pf-dialog h3{margin:0 0 10px;font-size:1.02rem;font-weight:800;color:#1f3864}
.pf-dialog p{margin:0 0 14px;font-size:.86rem;line-height:2;color:#5b6b7e}
.pf-dialog label{display:block;margin-bottom:6px;font-size:.84rem;font-weight:700}
.pf-dialog input{width:100%;padding:9px 12px;border:1px solid #d9d9d9;border-radius:9px;
  font-family:inherit;font-size:1rem;text-align:center;letter-spacing:.5px}
.pf-dialog input:focus{outline:0;border-color:#9bb8e0;box-shadow:0 0 0 3px rgba(155,184,224,.28)}
.pf-dialog-actions{display:flex;gap:8px;justify-content:flex-start;margin-top:16px}
.pf-dialog-hint{margin:-6px 0 14px!important;padding:8px 11px;border-radius:9px;background:var(--blue-soft);color:#1f3864;font-size:.82rem!important}

/* ---------- Buttons ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:none;border-radius:10px;
  padding:9px 15px;font-size:13.5px;cursor:pointer;font-family:inherit;font-weight:500;transition:filter .15s;line-height:1.4}
.btn:hover{filter:brightness(.95);text-decoration:none}
.btn i{font-size:15px}
.btn-primary{background:var(--navy);color:#fff} .btn-primary:hover{color:#fff}
.btn-gold{background:var(--gold);color:#3a2e00} .btn-gold:hover{color:#3a2e00}
.btn-soft{background:#eef1f7;color:var(--navy)}
.btn-danger{background:var(--red);color:#fff} .btn-danger:hover{color:#fff}
.btn-ghost{background:#fff;border:1px solid var(--line);color:var(--navy)}
.btn-sm{padding:6px 11px;font-size:12.5px}
.btn-block{width:100%}
.toolbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap}

/* ---------- دکمهٔ صورت‌حساب سرویس (نوار بالا، فقط مدیر سیستم) ----------
   مبلغ روی خودِ دکمه می‌نشیند تا بدهی بدون باز کردن صفحه دیده شود. */
.billbtn{display:inline-flex;align-items:center;gap:7px;border-radius:10px;
  padding:5px 6px 5px 11px;font-size:12.5px;font-weight:500;line-height:1.4;
  border:1px solid transparent;white-space:nowrap;transition:filter .15s,box-shadow .15s}
.billbtn:hover{text-decoration:none;filter:brightness(.97)}
.billbtn i{font-size:15px}
.billbtn-amt{border-radius:7px;padding:2px 8px;font-size:12.5px;font-weight:700;
  font-variant-numeric:tabular-nums;direction:ltr}

/* بدهی باز — تنها حالتی که باید نگاه را بگیرد */
.billbtn.is-due{background:var(--gold-soft);border-color:#e9d493;color:#6b5200}
.billbtn.is-due .billbtn-amt{background:var(--gold);color:#3a2e00}
.billbtn.is-due:hover{box-shadow:0 0 0 3px rgba(201,162,39,.16)}

/* تسویه‌شده — هست، ولی سر و صدا نمی‌کند */
.billbtn.is-clear{background:var(--green-soft);border-color:#c3e6cd;color:var(--green)}
.billbtn.is-clear .billbtn-amt.is-ok{background:var(--green);color:#fff;padding:2px 6px}

/* مبلغ خوانده نشد (سرویس پرداخت بالا نیست) — فقط یک راه ورود ساده */
.billbtn.is-unknown{background:#eef1f7;color:var(--navy)}

@media(max-width:560px){
  /* روی موبایل نوار بالا جا کم می‌آورد: متن می‌رود، مبلغ می‌ماند */
  .billbtn-txt{display:none}
  .billbtn{padding:5px 7px 5px 8px}
}


/* ---------- Forms ---------- */
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:15px}
.field label{display:block;font-size:13px;color:#334155;margin-bottom:6px;font-weight:500}
.field input,.field select,.field textarea{width:100%;padding:10px 12px;border:1px solid var(--line);
  border-radius:10px;font-family:inherit;font-size:14px;background:#fff;min-height:44px;color:var(--txt)}
.field textarea{min-height:64px}
.field input:focus,.field select:focus,.field textarea:focus{outline:none;border-color:var(--navy2);
  box-shadow:0 0 0 3px rgba(46,84,150,.12)}
.field.req label::after{content:' *';color:var(--red);font-weight:700}
.field .help{font-size:11.5px;color:var(--muted);margin-top:5px;line-height:1.6}
.field .err{color:var(--red);font-size:12px;margin-top:5px;font-weight:500}
.field input.is-invalid,.field select.is-invalid,.field textarea.is-invalid{border-color:var(--red);background:#fff8f7}
.field.focus-target{background:var(--gold-soft);border-radius:12px;padding:10px;margin:-10px;border:1px dashed var(--gold)}
.full{grid-column:1/-1}
.form-actions{display:flex;gap:10px;margin-top:18px;flex-wrap:wrap}

/* ---------- Flash ---------- */
.flash{padding:12px 16px;border-radius:11px;margin-bottom:14px;font-size:13.5px;display:flex;align-items:center;gap:9px;font-weight:500}
.flash i{font-size:18px}
.flash.success{background:var(--green-soft);color:var(--green)}
.flash.error{background:var(--red-soft);color:var(--red)}

/* ---------- Filters ---------- */
.filters{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:14px}
.filters input,.filters select{padding:9px 11px;border:1px solid var(--line);border-radius:10px;
  font-family:inherit;font-size:13px;min-height:42px;background:#fff;flex:0 1 auto}
.filters input[type=text]{min-width:160px;flex:1 1 200px}

/* ---------- Filter chips ---------- */
.chips{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:14px}
.chip{display:inline-flex;align-items:center;gap:6px;padding:7px 14px;border-radius:30px;border:1px solid var(--line);
  background:#fff;color:var(--navy);font-size:13px;font-weight:500;cursor:pointer;white-space:nowrap}
.chip:hover{background:#eef3fb;text-decoration:none}
.chip.active{background:var(--navy);color:#fff;border-color:var(--navy)}
.chip.high.active{background:var(--red);border-color:var(--red)}
.chip .c-count{background:rgba(0,0,0,.08);border-radius:20px;padding:0 7px;font-size:11px}
.chip.active .c-count{background:rgba(255,255,255,.22)}

/* ---------- Empty state ---------- */
.empty{text-align:center;padding:36px 16px;color:var(--muted)}
.empty i{font-size:44px;color:#c2cede;display:block;margin-bottom:10px}
.empty .t{font-weight:700;color:#475569;margin-bottom:4px}

/* ---------- Pagination ---------- */
.pager{display:flex;gap:6px;justify-content:center;margin-top:16px;flex-wrap:wrap}
.pager a,.pager span{padding:8px 13px;border:1px solid var(--line);border-radius:9px;font-size:13px;
  background:#fff;min-width:40px;text-align:center}
.pager .cur{background:var(--navy);color:#fff;border-color:var(--navy);font-weight:700}

/* ---------- Login ---------- */
body.login-page{background:#070d18;overflow-x:hidden;color:#e8eef8}
.login-wrap{position:relative;min-height:100vh;min-height:100dvh;display:flex;align-items:center;
  justify-content:space-between;gap:clamp(24px,5vw,64px);padding:32px clamp(18px,5vw,64px);isolation:isolate}
.login-bg{position:absolute;inset:0;z-index:0;background:#070d18 center/cover no-repeat;
  background-image:url('../img/login-bg.png');filter:saturate(.92) brightness(.78)}
.login-scrim{position:absolute;inset:0;z-index:1;pointer-events:none;
  background:
    linear-gradient(105deg,rgba(6,12,24,.72) 0%,rgba(8,16,32,.48) 36%,rgba(10,18,36,.55) 62%,rgba(7,13,24,.78) 100%),
    radial-gradient(90% 70% at 72% 45%,rgba(46,84,150,.16),transparent 58%)}
.login-panel{position:relative;z-index:2;width:100%;max-width:420px;flex:0 1 420px;animation:login-rise .55s ease both}
.login-hero{position:relative;z-index:2;flex:1 1 420px;max-width:560px;padding:8px 4px;
  animation:login-rise .7s ease .08s both}
@keyframes login-rise{from{opacity:0;transform:translateY(16px) scale(.985)}to{opacity:1;transform:none}}
.login-hero-kicker{display:inline-flex;align-items:center;gap:8px;margin:0 0 14px;padding:5px 12px;
  border-radius:999px;font-size:12px;font-weight:700;letter-spacing:.04em;color:#f0d78a;
  background:rgba(201,162,39,.12);border:1px solid rgba(201,162,39,.28)}
.login-hero-title{margin:0 0 10px;font-size:clamp(28px,3.4vw,40px);line-height:1.35;font-weight:800;
  color:#fff;letter-spacing:-.02em;text-shadow:0 10px 30px rgba(0,0,0,.35)}
.login-hero-lead{margin:0 0 16px;font-size:clamp(16px,1.6vw,19px);font-weight:700;line-height:1.7;
  background:linear-gradient(90deg,#f6e7a8,#c9a227 40%,#7dd3fc);
  -webkit-background-clip:text;background-clip:text;color:transparent}
.login-hero-desc{margin:0 0 22px;max-width:34em;font-size:14.5px;line-height:2;color:rgba(210,222,240,.86)}
.login-hero-list{list-style:none;margin:0;padding:0;display:grid;gap:10px}
.login-hero-list li{position:relative;padding:11px 14px 11px 14px;padding-right:42px;
  border-radius:14px;font-size:13.5px;font-weight:600;line-height:1.7;color:#eef3fb;
  background:rgba(8,16,32,.45);border:1px solid rgba(148,174,214,.14);
  -webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.05)}
.login-hero-list li::before{content:"";position:absolute;right:14px;top:50%;width:16px;height:16px;
  transform:translateY(-50%);border-radius:50%;
  background:radial-gradient(circle at 35% 30%,#f6e7a8,#c9a227 55%,#8a6d12);
  box-shadow:0 0 0 3px rgba(201,162,39,.18),0 0 12px rgba(125,211,252,.2)}
.login-hero-list li::after{content:"";position:absolute;right:18px;top:50%;width:5px;height:8px;
  border:solid #1a1400;border-width:0 2px 2px 0;transform:translateY(-58%) rotate(45deg)}
.login-box{background:rgba(12,22,40,.72);border:1px solid rgba(148,174,214,.18);border-radius:24px;
  padding:30px 28px 28px;width:100%;
  box-shadow:0 24px 60px rgba(0,0,0,.45),inset 0 1px 0 rgba(255,255,255,.08);
  -webkit-backdrop-filter:blur(22px) saturate(1.35);backdrop-filter:blur(22px) saturate(1.35)}
.login-brand{display:flex;align-items:center;gap:12px;margin-bottom:18px}
.login-box .blogo{width:56px;height:56px;border-radius:16px;background:rgba(0,0,0,.35);
  border:1px solid rgba(201,162,39,.28);display:flex;align-items:center;justify-content:center;
  overflow:hidden;flex:none;box-shadow:0 8px 22px rgba(0,0,0,.35),0 0 18px rgba(56,189,248,.12);
  padding:4px}
.login-box .blogo img{width:100%;height:100%;object-fit:contain;display:block}
.login-brand-text{display:flex;flex-direction:column;gap:3px;min-width:0}
.login-brand-name{font-weight:800;font-size:19px;color:#fff;letter-spacing:.03em;line-height:1.2}
.login-brand-tag{font-size:12px;color:rgba(196,210,232,.72);line-height:1.5}
.login-brand.is-wide{flex-direction:column;align-items:center;text-align:center;gap:12px}
.login-box .blogo.is-wide{width:auto;height:auto;max-width:238px;padding:14px 20px;border-radius:18px;
  background:rgba(255,255,255,.95);border-color:rgba(255,255,255,.55)}
.login-box .blogo.is-wide img{width:100%;height:auto;object-fit:contain}
.login-brand.is-wide .login-brand-tag{font-size:12.5px;color:rgba(206,219,238,.8)}
.login-divider{height:1px;margin:0 0 18px;background:linear-gradient(90deg,transparent,rgba(201,162,39,.55),rgba(148,174,214,.2),transparent)}
.login-box h1{font-size:22px;color:#f4f7fc;margin:0 0 6px;font-weight:800;letter-spacing:-.01em}
.login-box .sub{color:rgba(186,201,224,.78);font-size:13.5px;margin:0 0 20px;line-height:1.7}
.login-box .field{margin-bottom:14px}
.login-box .field label{color:rgba(220,230,245,.9);font-weight:600}
.login-box .field input{background:rgba(6,12,24,.55);border:1px solid rgba(148,174,214,.22);color:#f1f5fb;
  transition:border-color .15s,box-shadow .15s,background .15s}
.login-box .field input::placeholder{color:rgba(148,174,214,.45)}
.login-box .field input:focus{background:rgba(8,16,32,.78);border-color:rgba(201,162,39,.65);
  box-shadow:0 0 0 4px rgba(201,162,39,.16);color:#fff}
.login-box .flash{margin-bottom:14px}
.login-box .flash.error{background:rgba(192,57,43,.22);color:#ffc9c3;border:1px solid rgba(255,140,130,.25)}
.login-submit{width:100%;justify-content:center;min-height:48px;font-size:15px;font-weight:700;color:#1a1400;
  border-radius:12px;margin-top:8px;background:linear-gradient(135deg,#e2c35a,var(--gold) 45%,#a8861a);
  box-shadow:0 12px 28px rgba(201,162,39,.28),inset 0 1px 0 rgba(255,255,255,.35);
  transition:transform .15s,filter .15s,box-shadow .15s}
.login-submit:hover{filter:brightness(1.06);transform:translateY(-1px);color:#1a1400;
  box-shadow:0 16px 32px rgba(201,162,39,.36),inset 0 1px 0 rgba(255,255,255,.4)}
.login-submit:active{transform:none}
.hint{background:var(--gold-soft);border-radius:11px;padding:11px 13px;font-size:12px;color:#7a5c00;margin-top:16px;line-height:2}
@media(max-width:980px){
  .login-wrap{justify-content:center;flex-direction:column;padding:24px 16px;gap:28px}
  .login-bg{filter:saturate(.9) brightness(.65)}
  .login-scrim{background:
    linear-gradient(180deg,rgba(6,12,24,.72) 0%,rgba(7,13,24,.82) 100%),
    radial-gradient(80% 60% at 50% 30%,rgba(46,84,150,.2),transparent 65%)}
  .login-panel,.login-hero{max-width:480px;width:100%}
  .login-hero{padding:0}
  .login-hero-title{font-size:26px}
  .login-box{background:rgba(10,18,34,.82);padding:26px 20px 22px}
  .login-box h1{font-size:20px}
  .login-brand-tag{font-size:11.5px}
}
@media(max-width:560px){
  .login-hero-list li{font-size:13px;padding:10px 12px 10px 12px;padding-right:40px}
}
@media(prefers-reduced-motion:reduce){
  .login-panel,.login-hero{animation:none}
  .login-submit{transition:none}
  .login-submit:hover{transform:none}
}

.chart-box{position:relative;height:300px}
@media(max-width:820px){.chart-box{height:260px}}

/* ====================================================================
   موبایل: سایدبار کشویی، کارت‌نما برای جدول‌ها، تک‌ستونی
   ==================================================================== */
@media(max-width:860px){
  .sidebar{transform:translateX(100%);box-shadow:var(--shadow-lg)}
  .sidebar.open{transform:translateX(0)}
  .content{margin-right:0}
  .hamburger{display:inline-flex;align-items:center;justify-content:center;position:relative;z-index:1}
  .kpis{grid-template-columns:1fr 1fr;gap:11px}
  .kpi .value{font-size:18px}
  .form-grid{grid-template-columns:1fr}
  .form-actions .btn{flex:1 1 auto}
  /* نوار بالا روی موبایل جا کم می‌آورد و دکمهٔ منو زیر نشانِ سمتِ کاربر
     می‌رفت. اولویت با دکمهٔ منوست: نام و سمت کاربر و عنوان صفحه می‌روند
     (عنوان صفحه در سرتیتر همان کارت هم هست)، دکمهٔ منو هرگز جمع نمی‌شود. */
  .topbar{padding:10px 12px;gap:8px}
  .topbar .user .uname,
  .topbar .user .role,
  .topbar .title .t-text{display:none}
  .topbar .title{flex:0 0 auto;min-width:auto}
  .topbar .user{flex:1 1 auto;min-width:0;justify-content:flex-end;flex-wrap:wrap;row-gap:6px}
  .topbar .user .btn{flex:none}
}
@media(max-width:430px){
  .kpis{grid-template-columns:1fr}
}

/* کارت‌نمای جدول روی موبایل (فقط جدول‌های دارای کلاس .cards) */
@media(max-width:760px){
  table.tbl.cards,table.tbl.cards tbody,table.tbl.cards tr,table.tbl.cards td{display:block;width:100%}
  table.tbl.cards thead{display:none}
  table.tbl.cards tr{background:#fff;border:1px solid var(--line);border-radius:13px;
    margin-bottom:12px;padding:6px 4px;box-shadow:var(--shadow)}
  table.tbl.cards tbody tr:nth-child(even) td{background:transparent}
  table.tbl.cards tbody tr:hover td{background:transparent}
  table.tbl.cards td{border:none;border-bottom:1px dashed #eef0f5;padding:8px 14px;white-space:normal;
    display:flex;justify-content:space-between;gap:12px;align-items:center;text-align:left}
  table.tbl.cards td:last-child{border-bottom:none}
  table.tbl.cards td::before{content:attr(data-label);font-weight:700;color:var(--muted);
    font-size:12px;text-align:right;flex:none}
  table.tbl.cards td.cell-actions{justify-content:flex-start;flex-wrap:wrap}
  table.tbl.cards td.cell-actions::before{width:100%;margin-bottom:4px}
  table.tbl.cards td.cell-actions .btn{flex:1 1 auto}
  /* ردیف جمع هم روی موبایل یک کارت معمولی است، نه نوار چسبیده به کف کادر */
  table.tbl.cards tfoot{display:block;width:100%}
  table.tbl.cards tfoot td{bottom:auto}
  /* خانه‌های خالی (مثل ستون عملیات در ردیف جمع) کارت را شلوغ می‌کنند */
  table.tbl.cards td:empty{display:none}
  /* جدول‌هایی که روی موبایل کارت می‌شوند: نه ارتفاع محدود، نه چسبیدن.
     ارتفاع درون‌خطی را app.js می‌گذارد؛ اینجا با !important خنثی می‌شود وگرنه
     کارت‌ها از کادرِ کوتاه بیرون می‌زنند و روی هم می‌افتند. */
  .table-wrap.table-sticky-cards{overflow:visible;max-height:none!important;height:auto!important}
  .table-wrap.table-sticky-cards table.tbl thead th,
  .table-wrap.table-sticky-cards table.tbl .sticky-col,
  .table-wrap.table-sticky-cards table.tbl tfoot td{position:static;box-shadow:none}
  /* سایهٔ «ستون چسبان» داخل کارت یک خط بی‌معنی می‌سازد */
  .table-wrap.table-sticky-cards table.tbl thead th.sticky-col,
  .table-wrap.table-sticky-cards table.tbl tbody td.sticky-col,
  .table-wrap.table-sticky-cards table.tbl tfoot td.sticky-col{background:transparent;box-shadow:none}
  .filters input[type=text]{flex:1 1 100%}
  .filters select{flex:1 1 calc(50% - 4px)}
}

/* ---------- Print ---------- */
@media print{
  .sidebar,.topbar,.backdrop,.no-print,.btn,.hamburger{display:none!important}
  .content{margin:0}
  body{background:#fff;color:#000;font-size:12px}
  .card{box-shadow:none;border:none}
  table.tbl th{background:#1f3864!important;-webkit-print-color-adjust:exact;print-color-adjust:exact}
  table.tbl,tr,td,th{page-break-inside:avoid}
  /* در چاپ، کادر اسکرول‌دار نباید جدول را ببُرد */
  .table-wrap.table-sticky{max-height:none!important;overflow:visible!important}
  .table-wrap.table-sticky table.tbl thead th,
  .table-wrap.table-sticky table.tbl tfoot td{position:static!important}
  @page{size:A4;margin:14mm}
}

/* ============================================================
   انتخاب‌گر هوشمند (Smart Select)
   ============================================================ */
.ss-control{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;
  min-height:44px;padding:8px 12px;border:1px solid var(--line);border-radius:10px;background:#fff;
  font-family:inherit;font-size:14px;cursor:pointer;color:var(--txt);text-align:right}
.ss-control:hover{border-color:var(--navy2)}
.ss-control.empty .ss-val{color:#9aa6b6}
.ss-control .ss-texts{display:flex;flex-direction:column;align-items:flex-start;min-width:0;gap:1px;flex:1}
.ss-control .ss-val{font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.ss-control .ss-sub{font-size:11px;color:var(--muted)}
.ss-control .ss-caret{color:var(--muted);flex:none}
.ss-ctrl-clear{display:inline-flex;align-items:center;justify-content:center;flex:none;
  width:28px;height:28px;border-radius:50%;color:var(--muted);cursor:pointer}
.ss-ctrl-clear:hover{background:#eef1f7;color:var(--red)}
.ss-ctrl-clear[hidden]{display:none!important}
.ss-ctrl-clear i{font-size:16px;pointer-events:none}
.is-invalid + .ss-control{border-color:var(--red);background:#fff8f7}

.ss-overlay{display:none;position:fixed;inset:0;z-index:2000;background:rgba(13,25,48,.45)}
.ss-overlay.open{display:block}
.ss-panel{background:#fff;display:flex;flex-direction:column;overflow:hidden;
  box-shadow:var(--shadow-lg);border:1px solid var(--line)}
.ss-panel.ss-drop{border-radius:12px;max-height:min(60vh, calc(100vh - 16px))}
.ss-panel.ss-sheet{position:fixed;left:0;right:0;bottom:0;border-radius:18px 18px 0 0;max-height:90vh;
  animation:ssUp .22s ease}
@keyframes ssUp{from{transform:translateY(100%)}to{transform:translateY(0)}}
.ss-head{display:flex;align-items:center;justify-content:space-between;padding:13px 16px;
  border-bottom:1px solid var(--line);flex:none;background:#fff}
.ss-title{font-weight:700;color:var(--navy);font-size:15px}
.ss-x{border:none;background:none;font-size:26px;line-height:1;color:var(--muted);cursor:pointer;padding:0 4px}
.ss-searchbar{display:flex;align-items:center;gap:8px;padding:10px 14px;border-bottom:1px solid var(--line);
  flex:none;background:#fff;color:var(--muted)}
.ss-search{flex:1;border:1px solid var(--line);border-radius:10px;padding:9px 11px;font-family:inherit;
  font-size:14px;min-height:42px}
.ss-search:focus{outline:none;border-color:var(--navy2)}
.ss-list{overflow-y:auto;-webkit-overflow-scrolling:touch;padding:6px;flex:1;min-height:0}
.ss-panel.ss-sheet .ss-list{max-height:64vh}
.ss-opt{display:flex;align-items:center;gap:10px;width:100%;min-height:46px;padding:9px 12px;
  border:none;background:none;border-radius:10px;cursor:pointer;font-family:inherit;font-size:14px;
  text-align:right;color:var(--txt)}
.ss-opt:hover{background:#eef3fb}
.ss-opt.active{background:var(--blue-soft)}
.ss-opt-clear{color:var(--muted);border-bottom:1px dashed var(--line);border-radius:0 0 10px 10px;margin-bottom:4px}
.ss-opt-clear:hover{background:#fff5f4;color:var(--red)}
.ss-opt-clear-ico{font-size:16px;color:inherit}
.ss-opt-main{font-weight:500}
.ss-opt-sub{font-size:11.5px;color:var(--muted);margin-right:auto}
.ss-opt-tick{color:var(--green);font-size:18px}
.ss-empty{text-align:center;color:var(--muted);padding:30px 10px}
.ss-empty i{font-size:38px;color:#c2cede;display:block;margin-bottom:8px}
.ss-actions{display:flex;gap:8px;padding:11px 14px;border-top:1px solid var(--line);
  flex:none;background:#fff}
.ss-actions .btn{flex:1}

/* نوار تخفیف و خالص فروش */
.sales-discount-card .body{padding:12px 16px}
.sales-discount-bar{display:flex;align-items:flex-end;gap:12px;flex-wrap:wrap;
  padding:12px 14px;background:linear-gradient(180deg,#f7f9fc,#eef3fb);border:1px solid var(--line);border-radius:12px}
.sales-discount-bar .sdb-item{flex:1 1 140px;min-width:120px}
.sales-discount-bar .sdb-label{font-size:12px;color:var(--muted);margin-bottom:6px}
.sales-discount-bar .sdb-value{font-size:18px;font-weight:800;color:var(--navy);padding:8px 0}
.sales-discount-bar .sdb-op{flex:0 0 auto;font-size:22px;font-weight:700;color:var(--muted);
  padding-bottom:18px;line-height:1}
.sales-discount-bar .sdb-input .field,
.sales-discount-bar .sdb-net .field{margin:0}
.sales-discount-bar .sdb-net input{background:#e8f6ee;border-color:#b7e0c4;font-weight:700;color:var(--green)}
.sales-discount-bar .sdb-input input{border-color:#c9d6ea}
@media(max-width:860px){
  .sales-discount-bar{flex-direction:column;align-items:stretch}
  .sales-discount-bar .sdb-op{padding:0;text-align:center}
}

/* نوار محاسبهٔ خودکار (سهم ارزی شرکای پروژه) */
.calc-bar{display:flex;align-items:flex-end;gap:12px;flex-wrap:wrap;padding:12px 14px;
  background:linear-gradient(180deg,#f7f9fc,#eef3fb);border:1px solid var(--line);border-radius:12px}
.calc-bar .cb-item{flex:1 1 150px;min-width:130px}
.calc-bar .cb-label{font-size:12px;color:var(--muted);margin-bottom:6px}
.calc-bar .cb-value{font-size:18px;font-weight:800;color:var(--navy)}
.calc-bar .cb-sub{font-size:12px;color:var(--muted);margin-top:4px}
.calc-bar .cb-op{flex:0 0 auto;font-size:22px;font-weight:700;color:var(--muted);padding-bottom:22px;line-height:1}
.calc-bar .cb-net .cb-value{color:var(--green)}
.calc-shares{display:flex;gap:12px;flex-wrap:wrap;margin-top:12px}
.calc-shares .cb-item{flex:1 1 200px;min-width:160px;padding:10px 12px;border:1px solid var(--line);
  border-radius:10px;background:#fff}
@media(max-width:860px){
  .calc-bar{flex-direction:column;align-items:stretch}
  .calc-bar .cb-op{padding:0;text-align:center}
}

/* نوار ذخیره/انصراف چسبان در موبایل */
@media(max-width:860px){
  .sticky-actions{position:sticky;bottom:0;background:rgba(255,255,255,.96);backdrop-filter:blur(4px);
    margin:0 -14px -14px;padding:12px 14px;border-top:1px solid var(--line);z-index:20}
  .sticky-actions .btn{flex:1 1 auto}
}

/* ---------- Project workspace ---------- */
.proj-head{background:linear-gradient(135deg,#1f3864,#2e5496);color:#fff;border-radius:16px;padding:18px 20px;margin-bottom:16px;box-shadow:var(--shadow)}
.proj-head .pcode{font-size:20px;font-weight:800;direction:ltr;text-align:right;unicode-bidi:plaintext}
.proj-head .pmeta{display:flex;flex-wrap:wrap;gap:8px 18px;margin-top:8px;font-size:13px;color:#cfe0f7}
.proj-head .pmeta b{color:#fff}
.proj-head .pactions{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}
.proj-mini{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
.proj-mini .m{background:rgba(255,255,255,.12);border-radius:10px;padding:7px 12px;font-size:12.5px}
.proj-mini .m b{font-size:15px;display:block;direction:ltr;text-align:right;unicode-bidi:plaintext}
.tabs{display:flex;gap:6px;overflow-x:auto;-webkit-overflow-scrolling:touch;border-bottom:2px solid var(--line);
  margin-bottom:16px;padding-bottom:0}
.tabs a{padding:10px 15px;font-size:13.5px;font-weight:600;color:var(--muted);white-space:nowrap;
  border-bottom:3px solid transparent;border-radius:8px 8px 0 0}
.tabs a:hover{background:#eef3fb;text-decoration:none}
.tabs a.active{color:var(--navy);border-bottom-color:var(--gold);background:#fff}
.sec-title{font-weight:700;color:var(--navy);margin:0 0 10px;display:flex;align-items:center;gap:7px}
.sum-table td{padding:8px 10px}
@media(max-width:860px){.proj-head .pactions .btn{flex:1 1 auto}}

/* ---------- Grouped missing-data (collapsible) ---------- */
.iss-group{border:1px solid var(--line);border-radius:12px;margin-bottom:10px;overflow:hidden}
.iss-group summary{display:flex;align-items:center;gap:10px;padding:12px 14px;cursor:pointer;background:#fafbfe;list-style:none;font-size:14px}
.iss-group summary::-webkit-details-marker{display:none}
.iss-group summary .c-count{margin-right:auto;color:var(--muted);font-size:12.5px}
.iss-group .ig-caret{transition:transform .2s;color:var(--muted)}
.iss-group[open] .ig-caret{transform:rotate(180deg)}
.ig-body{padding:4px 14px 10px}
.ig-row{display:flex;gap:12px;align-items:center;justify-content:space-between;padding:10px 0;border-top:1px dashed #eef0f5;flex-wrap:wrap}

/* ---------- Worksheet (Sheet2-style) ---------- */
.ws-meta{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:10px}
.ws-meta>div{background:#f7f9fc;border:1px solid var(--line);border-radius:10px;padding:9px 12px}
.ws-meta span{display:block;font-size:11.5px;color:var(--muted);margin-bottom:3px}
.ws-meta b{font-size:14px;direction:ltr;text-align:right;unicode-bidi:plaintext}
table.tbl tfoot tr td{background:#eef3fb;font-weight:700}

/* ============================================================
   واکنش‌گرایی بخش «هزینه‌های فروش» و «جدول هزینه کل» (grid2)
   ============================================================ */
/* جدول خلاصه: برچسب راست (RTL)، مبلغ چپ (LTR) و بدون شکستن */
.sum-table td:first-child{text-align:right}
.sum-table td:last-child{text-align:left;direction:ltr;white-space:nowrap;font-variant-numeric:tabular-nums;unicode-bidi:plaintext}
/* در جدول‌های کنار هم، ستون متن می‌شکند ولی مبلغ نه */
.grid2 .tbl td{white-space:normal}
.grid2 .tbl td.num,.grid2 .tbl .num{white-space:nowrap}

@media(max-width:820px){
  .grid2{grid-template-columns:1fr;gap:12px}
  .grid2 .card{width:100%;max-width:100%;overflow:hidden}
  .grid2 .card .body{padding:12px}
  /* «جدول هزینه کل» → فهرست خلاصه: برچسب راست، مبلغ چپ، روی یک خط */
  .sum-table{min-width:0!important}
  .sum-table thead{display:none}
  .sum-table tbody,.sum-table tfoot{display:block;width:100%}
  .sum-table tr{display:flex;justify-content:space-between;align-items:center;gap:12px;
    border-bottom:1px solid var(--line);padding:2px 0}
  .sum-table td{display:block;border:none;padding:10px 6px;white-space:normal}
  .sum-table td:first-child{flex:1;text-align:right;color:var(--txt)}
  .sum-table td:last-child{flex:none;text-align:left;direction:ltr;white-space:nowrap;font-weight:600}
  .sum-table tfoot tr{background:#eef3fb;border-radius:10px;border:none;margin-top:6px}
  /* «هزینه‌های فروش» جدول کوچک: ستون شرح می‌شکند، مبلغ خوانا می‌ماند */
  .grid2 .tbl{min-width:0;width:100%}
}

/* ============================================================
   داشبورد مدیریتی مالی
   ============================================================ */
.dash-hero{background:linear-gradient(120deg,#1a2f57,#2e5496);color:#fff;border-radius:18px;
  padding:22px 24px;margin-bottom:18px;display:flex;justify-content:space-between;align-items:flex-start;
  gap:16px;flex-wrap:wrap;box-shadow:var(--shadow);-webkit-print-color-adjust:exact;print-color-adjust:exact}
.dash-hero h1{font-size:22px;font-weight:800;margin:0 0 4px}
.dash-hero p{margin:0;color:#cfe0f7;font-size:13.5px}
.dash-hero .dh-meta{display:flex;gap:18px;flex-wrap:wrap;margin-top:10px;font-size:12.5px;color:#bcd0ef}
.dash-hero .dh-actions{display:flex;gap:8px;flex-wrap:wrap}

.dash-filters{padding:0}
.dash-filters>summary{padding:13px 16px;font-weight:700;color:var(--navy);cursor:pointer;
  display:flex;align-items:center;gap:8px;list-style:none}
.dash-filters>summary::-webkit-details-marker{display:none}
.dash-filters[open]>summary{border-bottom:1px solid var(--line)}
.dash-filters .filters{margin-bottom:0}

/* KPI grid */
.dash-sec{display:flex;align-items:center;gap:8px;font-weight:800;color:var(--navy);font-size:15px;margin:2px 0 10px}
.dash-sec i{color:var(--gold)}
.dash-kpis{display:grid;grid-template-columns:repeat(auto-fill,minmax(215px,1fr));gap:14px;margin-bottom:18px}
.dash-kpi{display:block;background:#fff;border:1px solid var(--line);border-radius:16px;padding:16px;
  box-shadow:var(--shadow);position:relative;overflow:hidden;border-top:3px solid var(--navy);
  transition:transform .12s,box-shadow .12s}
.dash-kpi:hover{transform:translateY(-2px);box-shadow:0 8px 22px rgba(16,38,76,.12);text-decoration:none}
.dash-kpi .dk-top{display:flex;align-items:center;gap:8px;color:var(--muted);font-size:12.5px;margin-bottom:8px}
.dash-kpi .dk-icon{width:30px;height:30px;border-radius:9px;display:flex;align-items:center;justify-content:center;
  background:#eef3fb;color:var(--navy);flex:none;font-size:16px}
.dash-kpi .dk-title{font-weight:600;color:#475569}
.dash-kpi .dk-value{font-size:22px;font-weight:800;color:var(--navy);direction:rtl;line-height:1.25}
.dash-kpi .dk-unit{font-size:12px;font-weight:600;color:var(--muted)}
.dash-kpi .dk-desc{font-size:11.5px;color:var(--muted);margin-top:6px;line-height:1.6}
.dash-kpi.gold{border-top-color:var(--gold)} .dash-kpi.gold .dk-value{color:#9c6500} .dash-kpi.gold .dk-icon{background:var(--gold-soft);color:#9c6500}
.dash-kpi.green{border-top-color:var(--green)} .dash-kpi.green .dk-value{color:var(--green)} .dash-kpi.green .dk-icon{background:var(--green-soft);color:var(--green)}
.dash-kpi.red{border-top-color:var(--red)} .dash-kpi.red .dk-value{color:var(--red)} .dash-kpi.red .dk-icon{background:var(--red-soft);color:var(--red)}
.dash-kpi.blue{border-top-color:var(--blue)} .dash-kpi.blue .dk-value{color:var(--blue)} .dash-kpi.blue .dk-icon{background:var(--blue-soft);color:var(--blue)}
.dash-kpi.gray{border-top-color:#94a3b8} .dash-kpi.gray .dk-value{color:#475569}
/* کارت‌های نتیجه (سود و حاشیهٔ سود): کادر رنگی دور کارت برای تشخیص سریع */
.dash-kpi.is-key{border-width:2px;border-top-width:4px;box-shadow:0 6px 18px rgba(16,38,76,.10)}
.dash-kpi.is-key .dk-title{color:#334155;font-weight:700}
.dash-kpi.is-key .dk-value{font-size:24px}
.dash-kpi.is-key.gold{border-color:var(--gold);background:linear-gradient(180deg,var(--gold-soft),#fff 62%)}
.dash-kpi.is-key.green{border-color:var(--green);background:linear-gradient(180deg,var(--green-soft),#fff 62%)}
.dash-kpi.is-key.red{border-color:var(--red);background:linear-gradient(180deg,var(--red-soft),#fff 62%)}
.dash-kpi.is-key.blue{border-color:var(--blue);background:linear-gradient(180deg,var(--blue-soft),#fff 62%)}

/* کادر «دریافتی از طرف حساب فروش» — ارقام بلند نباید از خانهٔ خود بیرون بزنند */
.sr-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:14px 20px}
.sr-stats>div{min-width:0}
.sr-stats .sr-label{color:var(--muted);font-size:12.5px;line-height:1.7;margin-bottom:2px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sr-stats .sr-num{font-size:17px;font-weight:700;line-height:1.4;white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis}
@media(max-width:560px){
  .sr-stats{grid-template-columns:1fr 1fr;gap:12px}
  .sr-stats .sr-num{font-size:15px}
}
@media(max-width:400px){ .sr-stats{grid-template-columns:1fr} }

/* Insights */
/* ردیف محاسبه‌شدهٔ سهم پترو روان کاران در فهرست شرکای پروژه */
.tbl tr.is-company{background:var(--gold-soft)}
.tbl tr.is-company td{font-weight:600}

.insight-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}
.insight-list li{display:flex;gap:10px;align-items:flex-start;font-size:13.5px;line-height:1.8}
.insight-list li i{color:var(--gold);font-size:17px;flex:none;margin-top:2px}

/* Readiness + DQ */
.dq-badges{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:14px}
.rb{display:inline-flex;align-items:center;gap:7px;padding:8px 14px;border-radius:30px;font-size:13px;font-weight:700}
.rb-ok{background:var(--green-soft);color:var(--green)} .rb-warn{background:var(--yellow-soft);color:#9c6500} .rb-no{background:var(--red-soft);color:var(--red)}
.dq-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.dqc{display:flex;flex-direction:column;align-items:center;gap:2px;padding:12px 8px;border:1px solid var(--line);
  border-radius:12px;background:#fafbfe;text-align:center}
.dqc:hover{background:#eef3fb;text-decoration:none}
.dqc b{font-size:20px;font-weight:800;color:var(--navy)}
.dqc span{font-size:11.5px;color:var(--muted)}
.dqc.red b{color:var(--red)} .dqc.green b{color:var(--green)}

/* Action plan */
.action-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}
.action-item{border:1px solid var(--line);border-radius:12px;padding:13px;background:#fafbfe;display:flex;flex-direction:column;gap:7px}
.action-item .ai-head{display:flex;align-items:center;gap:8px}
.action-item .ai-head b{font-size:13.5px;color:var(--navy)}
.action-item .btn{align-self:flex-start}

/* ردیف‌های کارت داشبورد: سطر هزینه‌ها ۷ ستون، سطر سود و حاشیه ۶ ستون (فقط در نمایش عریض) */
.dash-kpis.is-tight{margin-bottom:14px}
@media(min-width:1200px){
  .dash-kpis.cols-7{grid-template-columns:repeat(7,1fr)}
  .dash-kpis.cols-6{grid-template-columns:repeat(6,1fr)}
}

@media(max-width:820px){
  .dash-hero{padding:18px}
  .dash-hero h1{font-size:18px}
  .dq-grid{grid-template-columns:repeat(2,1fr)}
}
@media(max-width:430px){
  .dash-kpis{grid-template-columns:1fr 1fr}
  .dash-kpi .dk-value{font-size:18px}
}
@media print{
  .dash-hero{background:#1a2f57!important}
  .dash-filters{display:none!important}
  .dash-kpis{grid-template-columns:repeat(4,1fr)}
  .dash-kpis.cols-7{grid-template-columns:repeat(7,1fr)}
  .dash-kpis.cols-6{grid-template-columns:repeat(6,1fr)}
  .grid2{grid-template-columns:1fr 1fr}
}

/* ---------- چک‌ها (دریافتی از فروش / پرداختی) ---------- */
.chk-kpis{display:grid;grid-template-columns:repeat(auto-fill,minmax(215px,1fr));gap:13px;margin-bottom:18px}
.chk-kpi{display:block;background:#fff;border:1px solid var(--line);border-radius:16px;padding:14px 16px;
  box-shadow:var(--shadow);border-top:3px solid var(--navy);transition:transform .12s,box-shadow .12s,border-color .12s}
.chk-kpi:hover{transform:translateY(-2px);box-shadow:0 8px 22px rgba(16,38,76,.12);text-decoration:none}
.chk-kpi-top{display:flex;align-items:center;gap:8px;margin-bottom:9px}
.chk-kpi-title{font-weight:600;color:#475569;font-size:12.5px;flex:1 1 auto}
.chk-kpi-icon{width:30px;height:30px;border-radius:9px;display:flex;align-items:center;justify-content:center;
  background:#eef3fb;color:var(--navy);flex:none;font-size:16px}
.chk-kpi-amount{font-size:20px;font-weight:800;color:var(--navy);direction:rtl;line-height:1.3}
.chk-kpi-count{font-size:11.5px;color:var(--muted);margin-top:5px}
.chk-kpi.purple{border-top-color:#6d5bd0} .chk-kpi.purple .chk-kpi-amount{color:#5b49b8}
.chk-kpi.purple .chk-kpi-icon{background:#efecfc;color:#5b49b8}
.chk-kpi.red{border-top-color:var(--red)} .chk-kpi.red .chk-kpi-amount{color:var(--red)}
.chk-kpi.red .chk-kpi-icon{background:var(--red-soft);color:var(--red)}
.chk-kpi.orange{border-top-color:#e08e0b} .chk-kpi.orange .chk-kpi-amount{color:#9c6500}
.chk-kpi.orange .chk-kpi-icon{background:var(--gold-soft);color:#9c6500}
.chk-kpi.blue{border-top-color:var(--blue)} .chk-kpi.blue .chk-kpi-amount{color:var(--blue)}
.chk-kpi.blue .chk-kpi-icon{background:var(--blue-soft);color:var(--blue)}
.chk-kpi.green{border-top-color:var(--green)} .chk-kpi.green .chk-kpi-amount{color:var(--green)}
.chk-kpi.green .chk-kpi-icon{background:var(--green-soft);color:var(--green)}
.chk-kpi.dark{border-top-color:#334155} .chk-kpi.dark .chk-kpi-amount{color:#334155}
.chk-kpi.dark .chk-kpi-icon{background:#eef1f6;color:#334155}
.chk-kpi.active{box-shadow:0 0 0 2px var(--navy2),var(--shadow);border-color:transparent}

/* کارت «سررسید چک‌ها»: همهٔ بازه‌های سررسید به ترتیب، و جمع کل زیر آن‌ها */
.chk-kpi-pair{grid-column:span 3}
.chk-kpi-line{display:flex;align-items:baseline;justify-content:space-between;gap:10px;
  padding:8px 11px;margin-top:8px;border:1px solid var(--line);border-radius:11px;background:#fcfdff;
  transition:background .12s,box-shadow .12s}
.chk-kpi-line:hover{background:#f2f6fd;text-decoration:none}
.chk-kpi-line.active{box-shadow:0 0 0 2px var(--navy2);border-color:transparent}
.chk-kpi-line-t{font-size:12.5px;font-weight:600;color:#475569}
.chk-kpi-line-v{font-size:17px;font-weight:800;direction:rtl;white-space:nowrap}
.chk-kpi-line-v em{font-style:normal;font-size:11.5px;font-weight:600;color:var(--muted);margin-right:7px}
.chk-kpi-line.l-7 .chk-kpi-line-v{color:#9c6500}
.chk-kpi-line.l-30 .chk-kpi-line-v{color:var(--blue)}
.chk-kpi-line.l-far .chk-kpi-line-v{color:#5b6b82}
.chk-kpi-line.l-over{background:var(--red-soft);border-color:#f0cfcb}
.chk-kpi-line.l-over .chk-kpi-line-v{color:var(--red)}
.chk-kpi-line.l-today .chk-kpi-line-v{color:#334155}
.chk-kpi-line.l-nodue .chk-kpi-line-v{color:#9c6500}
.chk-kpi-line.l-total{background:var(--navy,#16324f);border-color:transparent;margin-top:10px}
.chk-kpi-line.l-total:hover{background:#1d4066}
.chk-kpi-line.l-total .chk-kpi-line-t{color:#fff;font-weight:800}
.chk-kpi-line.l-total .chk-kpi-line-v{color:#fff}
.chk-kpi-line.l-total .chk-kpi-line-v em{color:#cbd8e6}
@media(max-width:520px){
  .chk-kpi-line{flex-direction:column;align-items:flex-start;gap:2px}
  .chk-kpi-line-v{font-size:15px}
}

/* نوار فیلتر */
.chk-filter-card{margin-bottom:16px}
.chk-filters{display:flex;flex-direction:column;gap:12px}
.chk-f-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:12px;align-items:end}
.chk-f-row .field{margin:0}
.chk-amt{min-width:230px}
.chk-amt-pair{display:flex;gap:8px}
.chk-amt-pair input{min-width:0}
.chk-f-actions{display:flex;gap:9px;flex-wrap:wrap;align-items:flex-end;
  border-top:1px dashed var(--line);padding-top:12px}
.chk-f-actions .field{margin:0}
.chk-issue{margin-inline-start:auto}

/* ردیف‌ها و نشان وضعیت */
.chk-row-overdue td{background:var(--red-soft)}
.chk-badge-open{background:#eef1f6;color:#475569}
.chk-badge-overdue{background:var(--red-soft);color:var(--red)}
.chk-badge-today{background:#e7eaf2;color:#1f3864}
.chk-badge-soon{background:var(--gold-soft);color:#9c6500}
.chk-badge-month{background:var(--blue-soft);color:var(--blue)}
.chk-badge-paid{background:var(--green-soft);color:var(--green)}
.chk-badge-returned{background:var(--red-soft);color:var(--red)}
.chk-badge-nodue{background:var(--yellow-soft);color:#9c6500}
.chk-badge-cancelled{background:#eef0f3;color:#5b6b7e}

@media(max-width:820px){
  .chk-f-actions .field{flex:1 1 100%}
  .chk-issue{margin-inline-start:0;flex:1 1 100%;justify-content:center}
}
@media(max-width:430px){
  .chk-kpis{grid-template-columns:1fr 1fr;gap:10px}
  .chk-kpi{padding:12px}
  .chk-kpi-amount{font-size:17px}
  .chk-amt-pair{flex-direction:column}
}
/* کارت سررسید در عرض کم، تمام پهنا می‌گیرد تا سطرهایش خرد نشوند */
@media(max-width:900px){ .chk-kpi-pair{grid-column:1/-1} }

/* داشبورد: کارت «کل موجودی نقد و کالا» و هم‌قطارانش، زیر نوار فیلترها.
   ردیف شبکه‌ای است: یک کارت تمام‌عرض می‌شود و با افزودن کارت دوم، دو کارت
   خودبه‌خود کنار هم می‌نشینند. */
.dash-cash-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(440px,1fr));
  gap:13px;align-items:stretch;margin:-4px 0 16px}
.dash-cashcard{display:block;width:100%;max-width:none;margin:0;padding:13px 15px;cursor:default}
.dash-cashcard:hover{transform:none}
.dash-kpi.dash-cashcard .dk-top{margin-bottom:5px}
.dash-kpi.dash-cashcard .dk-value{font-size:22px}
/* برچسب و رقم کنار هم می‌مانند تا فضای میانشان خالی نیفتد */
.dash-cashcard .chk-kpi-line{justify-content:flex-start;gap:10px;padding:5px 10px;margin-top:6px}
.dash-cashcard .chk-kpi-line-t{flex:0 0 auto;min-width:190px;white-space:nowrap}
.dash-cashcard .chk-kpi-line-v{font-size:15.5px}
.dash-cashcard .chk-kpi-line-v em{margin-right:6px}
.dash-cashcard .chk-kpi-line.l-total{margin-top:8px}
/* هر سرفصل با زیرمجموعه‌اش یک بلوک: خط باریک دورش و حاشور کم‌رنگِ یک‌درمیان،
   تا چشم فوری بفهمد کدام زیرنویس زیر کدام سرفصل است */
.dash-cash-grp{border:1px solid #e3ebf5;border-radius:12px;padding:3px 4px 5px;margin-top:7px;
  background:rgba(255,255,255,.72)}
.dash-cash-grp.is-alt{background:rgba(31,56,100,.045);border-color:#dbe4f0}
.dash-cash-grp .chk-kpi-line{margin-top:0;border-color:transparent;background:transparent}
.dash-cash-grp .chk-kpi-line:hover{background:rgba(31,56,100,.06)}
/* سرفصل‌های اصلی کارت پررنگ‌اند */
.dash-cashcard .chk-kpi-line-t{font-weight:800;color:#1f3864;font-size:13px}
/* زیرنویس ریز: مانده هر بانک و معادل ریالی هر محموله */
.dash-cash-sub{display:flex;flex-wrap:wrap;gap:2px 14px;margin:2px 11px 0;padding-top:4px;
  border-top:1px dashed #dbe4f0;font-size:11.5px;color:var(--muted);line-height:1.75}
.dash-cash-sub b{font-weight:700;color:#5b6b82}
.dash-cash-sub .num{color:#334155;font-weight:700}
/* کارت دوم ردیف: «برنامه بودجه - مصارف».
   ستونی چیده می‌شود تا هم‌قدِ کارت موجودی بماند: جدول ارتفاع اضافه را می‌گیرد،
   ردیف‌هایش از هم باز می‌شوند و سطر «جمع کل» ته کادر می‌نشیند. */
.dash-usescard{display:flex;flex-direction:column}
.dash-usescard .dk-value{color:#9c6500}
.dash-uses-tbl{width:100%;height:100%;flex:1 1 auto;border-collapse:separate;border-spacing:0;margin-top:7px;
  border:1px solid #ece0c4;border-radius:12px;overflow:hidden;background:rgba(255,255,255,.72)}
.dash-uses-tbl th{background:rgba(224,142,11,.10);color:#7a5200;font-weight:800;font-size:11.5px;
  padding:8px 10px;text-align:right;white-space:nowrap}
.dash-uses-tbl th:not(:first-child),.dash-uses-tbl td:not(:first-child){text-align:left}
.dash-uses-tbl td{padding:10px;font-size:12px;color:#334155;border-top:1px solid #f1e6d2;line-height:1.9}
.dash-uses-tbl tbody tr:nth-child(even) td{background:rgba(224,142,11,.045)}
.dash-uses-tbl td:first-child{font-weight:700;color:#1f3864}
.dash-uses-tbl td.num{font-weight:800;direction:rtl;white-space:nowrap}
.dash-usescard .chk-kpi-line.l-total{background:#7a5200}
.dash-usescard .chk-kpi-line.l-total:hover{background:#9c6500}

@media(max-width:560px){
  .dash-cash-row{grid-template-columns:1fr}
  .dash-kpi.dash-cashcard .dk-value{font-size:19px}
  .dash-cashcard .chk-kpi-line-t{min-width:0}
}

/* کارت حساب موجودی: سرِ هر انبار و جمع همان انبار داخل جدول محموله‌ها */
.tbl tr.ci-wh-head td{background:#eef3fb;color:var(--navy);font-size:13px;padding:8px 12px}
.tbl tr.ci-wh-sum td{background:#f7f9fc;border-top:1px solid var(--line)}

/* داشبورد: سه کارت هم‌ردیف (سررسید چک دریافتی/پرداختی و مانده مطالبات فروش) */
.dash-due-row{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:13px;margin-bottom:18px}
.dash-due-row .chk-kpi-pair{grid-column:auto;margin:0}
.chk-kpi-sm{padding:12px 13px}
.chk-kpi-sm .chk-kpi-title{font-size:12px}
.chk-kpi-sm .chk-kpi-icon{width:26px;height:26px;font-size:14px;border-radius:8px}
.chk-kpi-sm .chk-kpi-line{padding:5px 9px;margin-top:5px;border-radius:9px}
.chk-kpi-sm .chk-kpi-line-t{font-size:11.5px}
.chk-kpi-sm .chk-kpi-line-v{font-size:13.5px}
.chk-kpi-sm .chk-kpi-line-v em{font-size:10.5px;margin-right:5px}
.chk-kpi-sm .chk-kpi-line.l-total{margin-top:7px}
@media(max-width:1100px){ .dash-due-row{grid-template-columns:1fr 1fr} }
@media(max-width:760px){ .dash-due-row{grid-template-columns:1fr} }

/* کشویی قابل افزودن (محل تامین ارز و مشابه آن) */
.combo{display:block}
.combo .combo-new{margin-top:8px}
.combo .combo-new[hidden]{display:none}

/* ===== برآورد منابع و مصارف ارزی (پروژه‌های در راه) ===== */
.fxplan{border-collapse:separate;border-spacing:0;width:100%;max-width:820px;
  border:1px solid var(--line);border-radius:14px;overflow:hidden;background:#fff}
.fxplan thead th{background:var(--navy,#16324f);color:#fff;font-weight:600;font-size:13px;
  padding:11px 14px;text-align:right;white-space:nowrap}
.fxplan thead th.num,.fxplan td.num{text-align:left;font-variant-numeric:tabular-nums}
.fxplan td{padding:10px 14px;border-top:1px solid #eef1f6;font-size:13.5px}
.fxplan tbody tr:hover td{background:#fafbfe}
.fxplan .fx-sec td{background:#f4f6fa;font-weight:700;color:#475569;font-size:12.5px;padding:7px 14px}
.fxplan .fx-sec.in td{background:#eaf6ee;color:#1b6b3a}
.fxplan .fx-sec.out td{background:#fdf1e6;color:#9a5b12}
.fxplan tr.in td:first-child{box-shadow:inset -4px 0 0 0 #2e9e5b}
.fxplan tr.out td:first-child{box-shadow:inset -4px 0 0 0 #e08a2e}
.fxplan tr.sum-in td{background:#dff2e5;font-weight:800;color:#14532d}
.fxplan tr.sum-out td{background:#fbe6d0;font-weight:800;color:#7c3d0a}
.fxplan tr.net td{background:var(--navy,#16324f);color:#fff;font-weight:800;font-size:14px}
.fxplan tr.net td small{color:#cbd8e6;font-weight:600}
.fxplan .fx-unit{font-size:11px;color:#94a3b8;font-weight:500}
.fxplan tr.net .fx-unit{color:#b9c8d9}
@media(max-width:640px){.fxplan td,.fxplan thead th{padding:8px 9px;font-size:12.5px}}
/* چیدمان دوستونه: برآورد منابع ارزی + ترکیب سرمایهٔ ارزی */
.fxplan-grid{display:flex;gap:14px;align-items:flex-start;flex-wrap:wrap;margin-bottom:14px}
.fxplan-grid>.card{flex:1 1 520px;min-width:0;margin-bottom:0}
.fxplan-grid>.card:last-child{flex:1 1 360px}
.fxplan-grid .fxplan{max-width:none}
.fxcap tr.sum-in td:first-child{box-shadow:none}

/* شکست ردیف در چیدمان کارت‌های خلاصه */
.dash-kpis .dash-break{grid-column:1/-1;height:0;margin:0;padding:0;border:0}
/* گزارش تعهدات سفارش: کارت نرخ ارز، هم‌قد کارت‌های حساب همان ردیف */
.ob-ratecard .ob-rateform{display:flex;gap:7px;align-items:center;margin:2px 0 0}
.ob-ratecard .ob-rateform input{flex:1 1 auto;min-width:0;max-width:none;font-weight:800;
  font-size:17px;direction:ltr;text-align:center;color:#9c6500;padding:6px 8px}
.ob-ratecard .ob-rateform .btn{flex:none;padding:7px 10px}

/* ===== تامین مالی (ریالی) ===== */
.rf-fund-line{display:flex;flex-wrap:wrap;gap:18px;font-size:14px;margin-bottom:8px}
.rf-fund-line b{font-variant-numeric:tabular-nums}
.rf-cost-box{background:#f5f8ff;border:1px solid var(--line);border-radius:12px;padding:10px 14px;font-size:14px}
.rf-cost-box b{font-size:16px;color:#10264c}
.rf-settle{display:inline-block;position:relative}
.rf-settle>summary{list-style:none;cursor:pointer}
.rf-settle>summary::-webkit-details-marker{display:none}
.rf-settle-form{position:absolute;z-index:30;top:calc(100% + 6px);left:0;min-width:240px;background:#fff;
  border:1px solid var(--line);border-radius:12px;padding:12px;box-shadow:0 10px 28px rgba(16,38,76,.16);text-align:right}
.rf-settle-form label{display:block;font-size:12px;color:#5b6b82;margin:6px 0 3px}
.rf-settle-form input,.rf-settle-form select{width:100%;padding:6px 8px;border:1px solid var(--line);border-radius:8px;font:inherit}
.rf-settle-form button{margin-top:10px;width:100%}
tr.rf-hl>td{background:#eefaf0}
@media(max-width:900px){.rf-settle-form{position:static;min-width:0;box-shadow:none;margin-top:8px}}
/* پروندهٔ فقره: کارت‌های خلاصه + فرم‌های زیرمجموعه */
.rf-stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px;margin-top:12px}
.rf-stat{background:#f7f9fc;border:1px solid var(--line);border-radius:12px;padding:10px 14px}
.rf-stat span{display:block;font-size:12px;color:#5b6b82;margin-bottom:4px}
.rf-stat b{font-size:16px;color:#10264c;font-variant-numeric:tabular-nums}
.rf-stat i{display:block;font-style:normal;font-size:11.5px;color:#7b8aa0;margin-top:3px}
.rf-stat.warn{background:#fdf6ec;border-color:#f0d9b5}
.rf-stat.ok{background:#f0f9f2;border-color:#cbe6d3}
.rf-subform{margin-top:16px;border-top:1px dashed var(--line);padding-top:14px}
.rf-subform-title{font-weight:700;color:#10264c;margin-bottom:10px;font-size:14px}

/* ── جدول‌های خلاصهٔ «برنامه بودجه سفارش کالا» ────────────────────────────
   دو ستون هم‌تراز: نوار سرمه‌ای هر جدول با نوار روبه‌رویی و ردیف «جمع کل»
   هر جدول با جمع روبه‌رویی یک خط می‌شود، و ردیف‌های نارنجی هر دو ستون
   در آخرین سطر شبکه کنار هم می‌نشینند. */
.ob-summary .ob-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px 16px;align-items:stretch}
.ob-summary .ob-cell{min-width:0}
.ob-summary .ob-cell > .table-wrap{height:100%}
/* جدول ارتفاع کامل سلول را می‌گیرد تا ردیف «جمع کل» به کف بچسبد و با جدول
   روبه‌رویی یک خط شود (مرورگر فضای اضافه را بین ردیف‌ها پخش می‌کند) */
.ob-summary .ob-cell table.tbl{height:100%}
/* سرستون‌ها می‌شکنند تا جدول خلاصه نوار پیمایش افقی نگیرد */
.ob-summary table.tbl th{white-space:normal;line-height:1.6}
.ob-summary table.tbl td{padding:8px 10px}
.ob-summary .ob-band th{background:var(--navy);color:#fff;text-align:center;font-weight:700;font-size:13.5px}
.ob-summary .ob-sum td{background:#fbe5d6 !important;font-weight:700}
.ob-summary .ob-total th{white-space:normal}
/* کلید انتخاب مرحلهٔ سفارش، کنار کلید «خروجی اکسل» در سربرگ کارت */
.ob-summary .ob-stage{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;color:var(--muted)}
.ob-summary .ob-stage select{padding:6px 10px;border:1px solid var(--line);border-radius:9px;
  font-family:inherit;font-size:12.5px;background:#fff;min-height:32px;color:var(--txt);cursor:pointer}
.ob-summary .ob-stage select:focus{outline:none;border-color:var(--navy2);box-shadow:0 0 0 3px rgba(46,84,150,.12)}
@media (max-width:1100px){
  .ob-summary .ob-grid{display:block}
  .ob-summary .ob-cell{margin-bottom:12px}
  .ob-summary .ob-cell > .table-wrap,
  .ob-summary .ob-cell table.tbl{height:auto}
}
