/* ===================================================================
   حسابنگر وب — پوسته (هم‌خانواده Pishro و ZanaWeb) و پایانه فروشگاهی.
   فقط توکن‌های Zana.Blazor (pishro.css)؛ رنگ ماژول‌ها هم توکن (--m-*) با نسخه تیره. روشن/تیره با data-theme (applyPreferences).
   =================================================================== */

:root {
    /* داشبورد (P2.17): فروش و خرید — جفت رنگ آزموده برای کوررنگی (dataviz validator) */
    --dash-sale: #2a78d6; --dash-buy: #eb6834;
    /* ورود و خروج انبار (D1) — جفت آزموده validator (CVD ΔE ۱۰٫۸) */
    --dash-in: #0f8c7e; --dash-out: #d9792b;
    --m-gl: #1F4E79; --m-trs: #1E7B34; --m-inv: #8A6400; --m-sal: #6A3FA0; --m-tax: #00796B; --m-txb: #5D4037;
    --m-ast: #455A64; --m-hr: #AD1457; --m-pay: #B85C00; --m-rev: #00838F; --m-bud: #8E5A2B; --m-prc: #1565C0;
    --m-cst: #6D4C41; --m-mfg: #7B5E00; --m-ctr: #3949AB; --m-rpt: #546E7A; --m-sys: #4F5B67;
    /* سهم رنگ ماژول در سربرگ رنگی (بقیه سرمه‌ای تیره تا متن سفید همیشه خوانا بماند) */
    --hero-a: 80%; --hero-b: 50%;
    /* متن روی طلایی و روی سربرگ رنگی (در هر دو پوسته ثابت) */
    --hn-on-accent: #1B1F24; --hn-on-hero: #FFFFFF; --hn-hero-dark: #0B1220;
}
@media (prefers-color-scheme: dark) {
    :root:not([data-theme="light"]) {
        --dash-sale: #3987e5; --dash-buy: #d95926;
        --dash-in: #2aa596; --dash-out: #d57a2e;
        --m-gl: #6FA8DC; --m-trs: #4CC26A; --m-inv: #E0B84F; --m-sal: #B39DDB; --m-tax: #4DB6AC; --m-txb: #BCAAA4;
        --m-ast: #90A4AE; --m-hr: #F48FB1; --m-pay: #FFB74D; --m-rev: #4DD0E1; --m-bud: #D7A97A; --m-prc: #64B5F6;
        --m-cst: #BCAAA4; --m-mfg: #D4B24C; --m-ctr: #9FA8DA; --m-rpt: #B0BEC5; --m-sys: #9AA5B1;
        --hero-a: 50%; --hero-b: 26%;
    }
}
:root[data-theme="dark"] {
    --dash-sale: #3987e5; --dash-buy: #d95926;
    --dash-in: #2aa596; --dash-out: #d57a2e;
    --m-gl: #6FA8DC; --m-trs: #4CC26A; --m-inv: #E0B84F; --m-sal: #B39DDB; --m-tax: #4DB6AC; --m-txb: #BCAAA4;
    --m-ast: #90A4AE; --m-hr: #F48FB1; --m-pay: #FFB74D; --m-rev: #4DD0E1; --m-bud: #D7A97A; --m-prc: #64B5F6;
    --m-cst: #BCAAA4; --m-mfg: #D4B24C; --m-ctr: #9FA8DA; --m-rpt: #B0BEC5; --m-sys: #9AA5B1;
    --hero-a: 50%; --hero-b: 26%;
}

html, body { height: 100%; margin: 0; background: var(--c-bg); color: var(--c-text); font-family: var(--font); font-size: var(--fs); }
#app { height: 100%; }
body { overflow: hidden; }

/* بارگذاری */
.boot { min-height: 100vh; display: grid; place-content: center; justify-items: center; gap: 10px; }
.boot__logo { width: 56px; height: 56px; border-radius: var(--radius); background: var(--c-header); color: var(--c-header-fg); display: grid; place-content: center; font-size: var(--fs-title); font-weight: 700; }
.boot__name { color: var(--c-muted); }
.boot__bar { width: 160px; height: 3px; background: var(--c-border); position: relative; overflow: hidden; border-radius: var(--radius); }
.boot__bar::after { content: ""; position: absolute; inset-block: 0; inset-inline-start: 0; width: 40%; background: var(--c-primary); animation: boot 1s ease-in-out infinite; }
@keyframes boot { from { transform: translateX(150%); } to { transform: translateX(-250%); } }

#blazor-error-ui { display: none; position: fixed; inset-inline: 0; bottom: 0; padding: 8px var(--pad-x); background: var(--c-warn-soft); color: var(--c-warn); z-index: 1000; }
#blazor-error-ui .dismiss { cursor: pointer; margin-inline-start: 12px; }

/* ورود */
.auth { height: 100%; display: grid; place-items: start center; padding: 16px; background: var(--c-bg); overflow: auto; box-sizing: border-box; }
.auth__card {
    margin-block: auto; width: min(400px, 100%); background: var(--c-surface); border: 1px solid var(--c-border); border-radius: 6px;
    box-shadow: 0 8px 28px var(--c-shadow); padding: 18px 20px; display: flex; flex-direction: column; gap: 10px; box-sizing: border-box;
}
.auth__brand { display: flex; align-items: center; gap: 10px; margin-bottom: 4px; }
.auth__logo {
    width: 36px; height: 36px; border-radius: 6px; display: grid; place-items: center; font-weight: 700; font-size: 18px;
    background: var(--c-accent); color: var(--hn-on-accent); flex: none;
}
.auth__title { font-size: var(--fs-title); font-weight: 700; }
.auth__grow { flex: 1; }
.auth__theme { border: 0; background: none; color: var(--c-muted); cursor: pointer; padding: 4px; border-radius: var(--radius); }
.auth__theme:hover { background: var(--c-hover); color: var(--c-text); }
.auth__notice { padding: 6px 10px; border-radius: var(--radius); background: var(--c-info-soft); color: var(--c-info); }
.auth__submit { width: 100%; justify-content: center; }
.auth__lang { display: flex; justify-content: center; margin-top: 4px; }
/* کپچا و IP صفحه ورود (P2.16) */
.auth__captcha { display: flex; align-items: center; gap: 6px; }
.auth__captcha img { border: 1px solid var(--c-border); border-radius: var(--radius); }
.auth__ip { text-align: center; }

/* مدیریت شرکت‌ها — صفحه مدیر سامانه /platform (P26) */
.plt__back { text-align: center; }
.plt__enroll { width: min(440px, 100%); }
.plt__qr { display: flex; justify-content: center; padding: 6px; background: #fff; border-radius: var(--radius); }
.plt__secret { font-family: ui-monospace, Consolas, monospace; text-align: center; letter-spacing: 1px; padding: 6px; border: 1px dashed var(--c-border); border-radius: var(--radius); user-select: all; }
.plt__row { display: flex; align-items: flex-end; gap: 8px; flex-wrap: wrap; }
.plt-home { height: 100%; display: flex; flex-direction: column; gap: 8px; padding: 10px 14px; background: var(--c-bg); box-sizing: border-box; overflow: auto; }
.plt__head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; padding-block-end: 8px; border-block-end: 1px solid var(--c-border); }
.plt__who { display: inline-flex; align-items: center; gap: 4px; }
.plt__addr { font-size: var(--fs-small); }
.plt__section { font-weight: 700; margin-block: 10px 4px; padding-block-end: 2px; border-block-end: 1px solid var(--c-border); }
.plt__rules { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 4px 12px; font-size: var(--fs-small); }
.plt__rule--ok { color: var(--c-in); }
.plt__rule--bad { color: var(--c-muted); }
.plt__facts { display: grid; grid-template-columns: max-content 1fr; gap: 4px 12px; margin-block: 10px; }
.plt__facts dt { color: var(--c-muted); }
.plt__facts dd { margin: 0; }
.plt__hosts { list-style: none; margin: 6px 0; padding: 0; }
.plt__hosts li { display: flex; align-items: center; gap: 6px; padding: 2px 0; border-block-end: 1px solid var(--c-border); }
.plt-job { border: 1px solid var(--c-border); border-radius: var(--radius); background: var(--c-surface); padding: 8px 10px; margin-block: 6px; }
.plt-job__head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-block-end: 6px; }
.plt-job__steps { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 4px; }
.plt-job__step { display: grid; grid-template-columns: 20px minmax(160px, max-content) 1fr; align-items: center; gap: 6px; }
.plt-job__dot { text-align: center; font-weight: 700; color: var(--c-muted); }
.plt-job__step--done .plt-job__dot { color: var(--c-in); }
.plt-job__step--failed .plt-job__dot, .plt-job__step--failed .plt-job__detail { color: var(--c-out); }
.plt-job__step--running .plt-job__title { font-weight: 700; }
.plt-job__step--skipped { opacity: .6; }
.plt-job__detail { grid-column: 3; }
.plt-job__bar { grid-column: 3; }

/* ---------- پوسته ---------- */
.shell { height: 100%; display: grid; grid-template-rows: 40px minmax(0, 1fr) 22px; min-width: 0; position: relative; }
.shell__main { position: relative; display: flex; flex-direction: column; min-width: 0; min-height: 0; }

/*
   ---------- چیدمان کم‌ارتفاع (درخواست کاربر: «فضای پرت بالا زیاد داریم») ----------
   ۱) نوار بالا (هدر) با باز بودن فرم جمع می‌شود: ردیفش در گرید پوسته صفر می‌شود و همان ۴۰px به
      فرم می‌رسد. خودِ `.p-hd` **در جریان گرید می‌ماند** (ردیف ۱، با ارتفاع ۴۰px که از ردیف صفر بیرون
      می‌زند) و با transform بالا می‌رود، پس ۶ پیکسل لبه‌اش بالای صفحه می‌ماند: موس که به لبه بالا
      می‌رسد نوار پایین می‌آید (بی هیچ JS) و تا وقتی موس یا فوکوس داخلش است باز می‌ماند.
      در حالت «قفل» (بی کلاس shell--slim) هیچ‌کدام از این قاعده‌ها اعمال نمی‌شود و چیدمان دقیقاً
      همان چیدمان همیشگی است.
*/
/*
   ردیف هر سه بخش پوسته صریح است: هدر، فضای کاری، نوار وضعیت. (اگر هدر از جریان گرید بیرون برود،
   چیدمان خودکار بقیه را یک ردیف بالا می‌کشد و نوار وضعیت وسط صفحه می‌نشیند — ایراد گزارش‌شده کاربر.)
*/
.shell > .p-hd { grid-row: 1; }
.shell > .shell__main { grid-row: 2; }
.shell > .p-sb { grid-row: 3; }
.shell--slim { grid-template-rows: 0 minmax(0, 1fr) 22px; }
.shell--slim > .p-hd {
    /* در جریان گرید می‌ماند (ردیف ۱ با ارتفاع صفر) و فقط از کادرش بیرون می‌زند، پس ردیف‌ها جابه‌جا نمی‌شوند */
    position: relative; align-self: start; height: 40px; z-index: 70;
    transform: translateY(-34px); transition: transform .16s ease;
}
.shell--slim > .p-hd::after {
    /* دستگیره باریک وسط لبه: جای موس را نشان می‌دهد */
    content: ""; position: absolute; inset-inline: 0; bottom: 0; height: 5px; margin-inline: auto; width: 56px;
    border-radius: 0 0 3px 3px; background: color-mix(in srgb, var(--c-header-fg) 45%, transparent); pointer-events: none;
}
.shell--slim > .p-hd:hover, .shell--slim > .p-hd:focus-within, .shell--slim > .p-hd--hold { transform: translateY(0); }
.shell--slim > .p-hd:hover::after, .shell--slim > .p-hd:focus-within::after, .shell--slim > .p-hd--hold::after { opacity: 0; }
@media (prefers-reduced-motion: reduce) {
    .shell--slim > .p-hd { transition: none; }
}

/*
   ۲) نوار **ماژول‌ها** (میز کار، فاکتور، مالی، انبار…) ستون عمودی کنار صفحه می‌شود
      (سمت شروع = راست در فارسی) به‌جای نوار افقی بالا؛ همه ماژول‌ها یک اندازه.
      فضای کاری از فلکس ستونی به گرید دو ستونی می‌رود: ستون ۱ نوار ماژول‌ها، ستون ۲ همه بقیه
      (میز کار و بخش هر ماژول) که مثل قبل روی هم می‌نشینند و فقط ماژول فعال دیده می‌شود.
      **مهم:** `display` بخش‌های پنهان دست نمی‌خورد، وگرنه قاعده کلاس بر `[hidden]` می‌چربد و همه
      ماژول‌ها با هم نشان داده می‌شوند (ایراد نسخه پیش، گزارش کاربر).
*/
/*
   نوار منوی ماژول (گزارش کاربر «منوهای بالایی با آیکن منوی آبشاری قاطی شده»):
   گزینه‌های منوی آبشاری اگر جا نشوند روی دکمه‌های کنارشان می‌افتادند، چون دکمه‌هایشان کوچک نمی‌شدند.
   اکنون عنوان‌ها کوچک می‌شوند و با سه‌نقطه بریده می‌شوند (overflow روی خودِ دکمه است، نه روی
   p-menubar__top، وگرنه بازشونده منو بریده می‌شد). دکمه حالت منو هم فقط آیکن می‌شود تا جا باز شود.
*/
.p-ws__menubar > .p-menubar { min-width: 0; }
.p-ws__menubar > .p-menubar > .p-menubar__top { min-width: 0; }
.p-ws__menubar > .p-menubar > .p-menubar__top > .p-menubar__btn {
    min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.p-ws__menubar > .p-ws__mname, .p-ws__menubar > .p-ws__q { flex: none; }
.p-ws__menubar > .p-ws__mode span { display: none; }

.shell--vtabs .p-ws { display: grid; grid-template-columns: 2.6rem minmax(0, 1fr); grid-template-rows: minmax(0, 1fr); }
.shell--vtabs .p-ws > * { grid-column: 2; grid-row: 1; min-width: 0; min-height: 0; }
.shell--vtabs .p-ws > [hidden] { display: none; }
/*
   نوار باریک و پاپ‌آپی (درخواست کاربر): در حالت عادی فقط نشان رنگی هر ماژول دیده می‌شود و
   جا نمی‌گیرد؛ موس که روی نوار می‌رود، باز می‌شود و **روی** صفحه می‌افتد (صفحه جابه‌جا نمی‌شود)
   و با رفتن موس دوباره جمع می‌شود. با قفل (دکمه روی خود نوار) همیشه باز می‌ماند و صفحه کنارش می‌نشیند.
*/
.shell--vtabs .p-ws__modules {
    grid-column: 1; grid-row: 1; flex-direction: column; align-items: stretch; gap: 2px; width: 2.6rem;
    padding: 4px; overflow-x: hidden; overflow-y: auto; border-bottom: 0;
    border-inline-end: 1px solid var(--c-border); z-index: 40; transition: width .14s ease;
}
.shell--vtabs .p-ws__modules:hover { width: 11.5rem; box-shadow: 0 6px 20px var(--c-shadow); }
.shell--vtabs .p-ws__mtab {
    height: 28px; top: 0; border: 1px solid transparent; border-radius: var(--radius); padding-inline: 7px 4px;
}
.shell--vtabs .p-ws__mtab--on { background: var(--c-surface); border-color: var(--c-border); box-shadow: none; }
/* نشان ماژول فعال روی لبه شروع (راست در فارسی، چپ در انگلیسی) */
.shell--vtabs .p-ws__mtab--on::before {
    content: ""; position: absolute; inset-block: 5px; inset-inline-start: 0; width: 2px; border-radius: 2px; background: var(--mc);
}
.shell--vtabs .p-ws__mtitle { flex: 1; max-width: none; }
/*
   جمع‌بودن: فقط نشان رنگی/آیکن ماژول — **فقط در حالت پاپ‌آپی** (:not(.shell--pinrail)).
   🔧 ایراد پیشین: قاعده‌های «قفل» (`.shell--pinrail …`، ویژگی ۰٬۳٬۰) از این قاعده‌ها (`:not(:hover)`، ویژگی ۰٬۴٬۰)
   ضعیف‌تر بودند، پس در حالت قفل همین که موس از نوار بیرون می‌رفت، نوار پهن می‌ماند ولی عنوان ماژول‌ها،
   دکمه بستن و کل منوی ماژول پنهان می‌شد. اکنون قاعده جمع‌بودن اصلاً به نوار قفل‌شده نمی‌خورد.
*/
.shell--vtabs:not(.shell--pinrail) .p-ws__modules:not(:hover) .p-ws__mtitle,
.shell--vtabs:not(.shell--pinrail) .p-ws__modules:not(:hover) .p-ws__x,
.shell--vtabs:not(.shell--pinrail) .p-ws__modules:not(:hover) .ws__pin span { display: none; }
.shell--vtabs:not(.shell--pinrail) .p-ws__modules:not(:hover) .p-ws__mtab { justify-content: center; padding-inline: 0; }
/* دکمه قفل روی خود نوار (بالای فهرست ماژول‌ها) */
.ws__pin {
    order: -1; display: flex; align-items: center; justify-content: center; gap: 6px; height: 26px; margin-bottom: 4px;
    border: 1px solid var(--c-border); border-radius: var(--radius); background: var(--c-surface); color: var(--c-muted);
    font: inherit; font-size: 12px; cursor: pointer; padding-inline: 4px; white-space: nowrap; overflow: hidden;
}
.ws__pin:hover { color: var(--c-primary); border-color: var(--c-primary); background: var(--c-hover); }
.ws__pin[aria-pressed="true"] { color: var(--c-primary); border-color: var(--c-primary); background: var(--c-select); }
.ws__pin .p-icon { width: 15px; height: 15px; flex: none; }
/*
   منوی ماژول داخل همان نوار (درخواست کاربر «منوی داخل ماژول هم به همین شیوه»): زیر فهرست
   ماژول‌ها می‌نشیند و با نوار باز/جمع می‌شود. نوار افقی منوی آبشاری در این حالت برداشته می‌شود،
   پس یک ردیف ۳۰ پیکسلی دیگر هم به فرم می‌رسد.
*/
.shell--menurail .p-ws__menubar { display: none; }
/*
   منوی درختی کناری Pishro هم در این حالت برداشته می‌شود: منو داخل همان نوار پاپ‌آپی است و
   دو فهرست تکراری (یکی ثابت ۲۲۰ پیکسلی) فضای کاری را می‌خورد — گزارش کاربر با عکس.
*/
.shell--menurail .p-ws__side { display: none; }
.shell--vtabs.shell--menurail .p-ws__modules:hover,
.shell--pinrail.shell--menurail .p-ws__modules { width: 13.5rem; }
.shell--pinrail.shell--menurail .p-ws { grid-template-columns: 13.5rem minmax(0, 1fr); }
.ws__menu { display: flex; flex-direction: column; margin-top: 6px; border-top: 1px solid var(--c-border); padding-top: 6px; }
.ws__menu-head { padding: 2px 8px 4px; color: var(--c-muted); font-size: 11px; font-weight: 700; white-space: nowrap; }
.ws__menu-group { padding: 4px 8px 2px; color: var(--mc, var(--c-primary)); font-size: 11px; font-weight: 700; white-space: nowrap; }
.ws__menu-sep { margin: 4px 8px; border: 0; border-top: 1px solid var(--c-border); }
.ws__menu-item {
    display: block; width: 100%; text-align: start; border: 0; background: none; color: var(--c-text); font: inherit;
    font-size: 12px; padding: 4px 8px; border-radius: var(--radius); cursor: pointer; white-space: nowrap;
    overflow: hidden; text-overflow: ellipsis;
}
.ws__menu-item { display: flex; align-items: center; gap: 6px; }
.ws__menu-item > span { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.ws__menu-item .p-icon { width: 13px; height: 13px; flex: none; color: var(--c-in); }
.ws__menu-item:disabled .p-icon { color: var(--c-muted); }
.ws__menu-item:hover:not(:disabled) { background: var(--c-hover); color: var(--c-primary); }
.ws__menu-item:disabled { color: var(--c-muted); cursor: default; }
/* نوار جمع (پاپ‌آپی، نه قفل): فقط فهرست ماژول‌ها دیده شود، منو پنهان بماند */
.shell--vtabs:not(.shell--pinrail) .p-ws__modules:not(:hover) .ws__menu { display: none; }
.shell--pinrail .p-ws__modules .ws__menu { display: flex; }

/* قفل‌شده: نوار همیشه باز و صفحه کنارش (بی افتادن روی صفحه) */
.shell--pinrail .p-ws { grid-template-columns: 11.5rem minmax(0, 1fr); }
.shell--pinrail .p-ws__modules { width: 11.5rem; }
.shell--pinrail .p-ws__modules:hover { box-shadow: none; }
/* قفل‌شده: عنوان‌ها همیشه پیدا باشند (قاعده «جمع‌بودن» فقط برای حالت پاپ‌آپی است) */
.shell--pinrail .p-ws__modules .p-ws__mtitle { display: block; }
.shell--pinrail .p-ws__modules .p-ws__x { display: grid; }
.shell--pinrail .p-ws__modules .ws__pin span { display: inline; }
.shell--pinrail .p-ws__modules .p-ws__mtab { justify-content: flex-start; padding-inline: 7px 4px; }
@media (max-width: 900px) {
    /* صفحه باریک: همان نوار افقی بالا (ستون کناری نصف صفحه را می‌خورد) */
    .shell--vtabs .p-ws, .shell--pinrail .p-ws { display: flex; flex-direction: column; }
    .shell--vtabs .p-ws > * { min-width: 0; }
    .shell--vtabs .p-ws__modules, .shell--pinrail .p-ws__modules {
        flex-direction: row; align-items: flex-end; width: auto; min-height: 30px; padding: 3px 6px 0;
        border-inline-end: 0; border-bottom: 1px solid var(--c-border); overflow-x: auto; overflow-y: hidden; box-shadow: none;
    }
    /* هم‌ویژگی قاعده‌های جمع‌بودن بالا (و پس از آن‌ها) تا در نوار افقی عنوان‌ها همیشه دیده شوند */
    .shell--vtabs:not(.shell--pinrail) .p-ws__modules:not(:hover) .p-ws__mtitle { display: block; }
    .shell--vtabs:not(.shell--pinrail) .p-ws__modules:not(:hover) .p-ws__mtab { justify-content: flex-start; padding-inline: 10px 4px; }
    .shell--pinrail .p-ws__modules .p-ws__mtab { padding-inline: 10px 4px; }
    /* دکمه قفل و منوی داخل نوار در نوار افقی نیستند (قاعده قفل بالا display:flex دارد، پس هم‌ویژگی و پس از آن) */
    .shell--vtabs .p-ws__modules .ws__pin, .shell--vtabs .p-ws__modules .ws__menu { display: none; }
    .shell--menurail .p-ws__menubar { display: flex; }
}
.shell__add {
    height: 24px; margin-bottom: 2px; margin-inline-start: 4px; border: 1px dashed var(--c-border); border-radius: var(--radius);
    background: transparent; color: var(--c-muted); cursor: pointer; padding-inline: 8px; white-space: nowrap; font-size: 12px;
}
.shell__add:hover { color: var(--c-primary); border-color: var(--c-primary); }

/* ---------- هدر: از Z3c قاب کتابخانه (.p-hd*، Zana.Blazor.Shell.ShellHeader) ---------- */

/* منوی کاربر، کنترل دکمه‌ای و نوار وضعیت از Z3c در کتابخانه‌اند (.p-pop، .p-seg، .p-sb) */

/* ---------- جستجوی Ctrl+K ---------- */

/* ---------- میز کار ---------- */
.desk { display: flex; flex-direction: column; gap: 10px; }
.desk__head { display: flex; align-items: baseline; gap: 12px; flex-wrap: wrap; border-bottom: 1px solid var(--c-border); padding-bottom: 6px; }
.desk__title { margin: 0; font-size: var(--fs-title); }
.desk__grid { display: grid; grid-template-columns: minmax(0, 1fr) 300px; gap: 14px; align-items: start; }
.desk__section { margin: 0 0 6px; font-size: 13px; color: var(--c-muted); font-weight: 500; }
aside .desk__section:not(:first-child) { margin-top: 12px; }
.desk__recent {
    display: flex; align-items: center; gap: 8px; width: 100%; border: 0; background: none; padding: 4px 2px; cursor: pointer;
    text-align: start; color: var(--c-text); border-radius: var(--radius);
}
.desk__recent:hover { background: var(--c-hover); }
.desk__recent-title { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.desk__dot { width: 8px; height: 8px; border-radius: 2px; background: var(--mc); flex: none; }
.desk__hint { margin-top: 8px; }
.desk__hero { margin-bottom: 2px; }
.desk__section2 { margin-top: 12px; }
.desk .p-mh__section { margin: 0 0 6px; }
.desk aside .card { border-radius: 10px; }
@media (max-width: 900px) { .desk__grid { grid-template-columns: 1fr; } }

/* ماژول‌های برنامه پایین میز کار (P17): فعال، خاموش، قابل خرید + تماس فروشنده */
.modcat { padding: 0; border-radius: 10px; overflow: hidden; }
.modcat__head {
    display: flex; align-items: center; gap: 8px; width: 100%; padding: 8px 12px; border: 0; background: transparent; color: var(--c-text);
    font: inherit; cursor: pointer; text-align: start;
}
.modcat__head:hover { background: var(--c-hover); }
.modcat__head:focus-visible { outline: 2px solid var(--c-focus); outline-offset: -2px; }
.modcat__head > .p-icon:first-child { width: 16px; height: 16px; color: var(--c-primary); }
.modcat__title { font-weight: 700; font-size: var(--fs); }
.modcat__sum { display: inline-flex; gap: 6px; flex-wrap: wrap; flex: 1; min-width: 0; }
.modcat__chev { width: 14px; height: 14px; color: var(--c-muted); }
.modcat__body { padding: 0 12px 12px; display: flex; flex-direction: column; gap: 10px; }
.modcat__note { margin: 0; }
.modcat__groups { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 10px 16px; align-items: start; }
.modcat__gtitle { display: flex; align-items: center; gap: 6px; margin: 0 0 4px; font-size: var(--fs); }
.modcat__gtitle > .p-icon { width: 14px; height: 14px; }
.modcat__group--active .modcat__gtitle > .p-icon { color: var(--c-in); }
.modcat__group--disabled .modcat__gtitle > .p-icon { color: var(--c-muted); }
.modcat__group--available .modcat__gtitle > .p-icon { color: var(--c-accent); }
.modcat__list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 2px; }
.modcat__item {
    display: flex; flex-direction: column; padding: 4px 8px; border-radius: var(--radius); border-inline-start: 3px solid var(--c-border);
    background: var(--c-surface-2);
}
.modcat__group--active .modcat__item { border-inline-start-color: var(--c-in); }
.modcat__group--available .modcat__item { border-inline-start-color: var(--c-accent); }
.modcat__name { font-weight: 600; font-size: var(--fs); }
.modcat__hint { color: var(--c-muted); font-size: var(--fs-small); line-height: 1.5; }
.modcat__cta {
    display: flex; gap: 8px; align-items: flex-start; padding: 8px 10px; border-radius: var(--radius);
    background: var(--c-info-soft); border: 1px solid color-mix(in srgb, var(--c-info) 35%, transparent);
}
.modcat__cta > .p-icon { width: 16px; height: 16px; color: var(--c-info); flex: none; margin-top: 2px; }
.modcat__cta-body { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.modcat__contact { display: flex; flex-wrap: wrap; gap: 4px 16px; }
.modcat__contact > span { display: inline-flex; align-items: center; gap: 4px; }
.modcat__contact .p-icon { width: 13px; height: 13px; color: var(--c-muted); }

/* کاشی‌ها (.p-tiles، .p-tile*) و خانه ماژول (.p-mh*) از Z3c در کتابخانه‌اند */

.card { border: 1px solid var(--c-border); border-radius: var(--radius); padding: 8px 12px; background: var(--c-surface); min-width: 0; }
.card__title { margin: 0 0 6px; font-size: 13px; }

/* P20.5 — نشان لایسنس سربرگ میز کار (دکمه باز/بستن نوار خلاصه لایسنس) */
.desk__licstat { border: 0; font: inherit; color: inherit; cursor: pointer; }
.desk__licstat b { display: inline-flex; align-items: center; gap: 4px; font-size: 15px; white-space: nowrap; }
.desk__licstat b .p-icon { width: 14px; height: 14px; }
.desk__licstat:hover, .desk__licstat:focus-visible { background: color-mix(in srgb, var(--hn-on-hero) 22%, transparent); }
.desk__licstat:focus-visible { outline: 2px solid var(--hn-on-hero); outline-offset: 2px; }
.desk__licstat[aria-pressed="true"] { box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--hn-on-hero) 45%, transparent); }
.desk__licstat--warn { box-shadow: inset 0 0 0 2px var(--c-warn); }

/* P20.5 — نوار یک‌خطی خلاصه لایسنس زیر سربرگ میز کار */
.licbar {
    display: flex; flex-wrap: wrap; align-items: center; gap: 4px 16px; padding: 6px 12px; margin-block: 8px 0;
    font-size: var(--fs-small); color: var(--c-text);
}
.licbar__head { display: inline-flex; align-items: center; gap: 6px; }
.licbar__head > .p-icon { width: 15px; height: 15px; color: var(--c-primary); }
.licbar__item { display: inline-flex; align-items: center; gap: 5px; color: var(--c-muted); white-space: nowrap; }
.licbar__item > span:not(.licbar__left) { color: var(--c-text); }
.licbar__item .p-icon { width: 13px; height: 13px; }
.licbar__left { color: var(--c-muted); }
.licbar__left::before { content: "·"; margin-inline-end: 5px; }
.licbar__left--warn { color: var(--c-warn); font-weight: 700; }
.licbar__gap { flex: 1; }
.licbar__close {
    display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; padding: 0; border: 0; border-radius: 6px;
    background: transparent; color: var(--c-muted); cursor: pointer;
}
.licbar__close:hover { background: var(--c-hover); color: var(--c-text); }
.licbar__close:focus-visible { outline: 2px solid var(--c-focus); }
.licbar__close .p-icon { width: 14px; height: 14px; }
@media print { .licbar, .desk__licstat { display: none; } }

/* محدوده کار در هدر */

/* فهرست شعبه / سال مالی */
.scope-list { width: 100%; }
.scope-list tr { cursor: pointer; }
.scope-list tr:hover { background: var(--c-hover); }
.scope-list tr:focus { outline: 2px solid var(--c-focus); outline-offset: -2px; background: var(--c-select); }
.scope-list__on { font-weight: 700; }
.scope-list__code { width: 70px; color: var(--c-muted); }
.scope-list__badges { display: flex; gap: 4px; justify-content: flex-end; }
.scope-list__mark { width: 24px; color: var(--c-in); }

.desk__quick { width: 100%; margin-bottom: 4px; }

/* پایانه در تب فضای کاری: تمام ارتفاع، بی فاصله اضافه */
.p-ws__page:has(> .pos) { padding: 0; display: flex; flex-direction: column; overflow: hidden; }

/* پایانه */
.pos { flex: 1; min-height: 0; height: 100%; box-sizing: border-box; display: grid; grid-template-columns: 1fr auto 300px; gap: 8px; padding: 8px; }
.pos__main { display: flex; flex-direction: column; gap: 8px; min-width: 0; min-height: 0; }

/* نوار ناوبری فاکتور (جدید، قبلی، بعدی، ابطال) — کوچک و نواری مثل پایانه ویندوز */
.pos__tools { display: flex; align-items: center; gap: 4px; flex-wrap: wrap; }
.pos__tool {
    display: inline-flex; align-items: center; gap: 4px; padding: 2px 8px; border: 1px solid var(--c-border); border-radius: var(--radius);
    background: var(--c-surface); color: var(--c-text); font: inherit; font-size: var(--fs-small); cursor: pointer; white-space: nowrap;
}
.pos__tool:hover:not(:disabled) { background: var(--c-hover); border-color: var(--c-primary); }
.pos__tool:disabled { color: var(--c-muted); cursor: default; }
.pos__tool .p-icon { width: 14px; height: 14px; }
.pos__tool--danger:hover:not(:disabled) { border-color: var(--c-out); color: var(--c-out); }
.pos__editing {
    display: inline-flex; align-items: center; gap: 6px; margin-inline-start: auto; padding: 2px 8px; border-radius: var(--radius);
    background: color-mix(in srgb, var(--c-primary) 10%, transparent); color: var(--c-primary); font-size: var(--fs-small);
}
.pos__editing .p-icon { width: 14px; height: 14px; }
.pos__editing--locked { background: color-mix(in srgb, var(--c-warn) 14%, transparent); color: var(--c-text); }

/*
   نوار میزهای صندوق (درخواست کاربر: چند فرم پایانه برای چند مشتری هم‌زمان):
   میز جاری پررنگ، تعداد قلم و نام مشتری هر میز روی خودش، «+» میز تازه و «×» بستن میز.
*/
.pos__slots { display: flex; align-items: center; gap: 4px; flex-wrap: wrap; }
.pos__slots-label { display: inline-flex; align-items: center; gap: 4px; color: var(--c-muted); font-size: var(--fs-small); }
.pos__slots-label .p-icon { width: 14px; height: 14px; }
.pos__slot {
    display: inline-flex; align-items: center; gap: 5px; min-width: 2.2rem; padding: 2px 8px; border: 1px solid var(--c-border);
    border-radius: 999px; background: var(--c-surface); color: var(--c-text); font: inherit; font-size: var(--fs-small);
    cursor: pointer; white-space: nowrap;
}
.pos__slot:hover { background: var(--c-hover); border-color: var(--c-primary); }
.pos__slot--on { background: var(--c-select); border-color: var(--c-primary); color: var(--c-primary); font-weight: 700; cursor: default; }
.pos__slot-count { padding: 0 5px; border-radius: 999px; background: var(--c-primary); color: var(--c-primary-fg); font-size: 11px; line-height: 16px; }
.pos__slot-cust { max-width: 9rem; overflow: hidden; text-overflow: ellipsis; color: var(--c-muted); }
.pos__slot--on .pos__slot-cust { color: inherit; }
.pos__slot--new { border-style: dashed; color: var(--c-muted); }
.pos__slot--new:hover { color: var(--c-primary); }
.pos__slot--close:hover { border-color: var(--c-out); color: var(--c-out); }
.pos__slot .p-icon { width: 13px; height: 13px; }

/* چیپ فاکتور مبنا (برگشتی‌ها) */
.pos__mabna {
    display: inline-flex; align-items: center; gap: 4px; padding: 2px 8px; border: 1px solid var(--c-border); border-radius: var(--radius);
    background: color-mix(in srgb, var(--c-accent) 10%, transparent); color: var(--c-text); font: inherit; font-size: var(--fs-small); cursor: pointer;
}
.pos__mabna:hover { border-color: var(--c-accent); }
.pos__mabna .p-icon { width: 14px; height: 14px; color: var(--c-accent); }
.pos__mabna--empty { background: color-mix(in srgb, var(--c-warn) 16%, transparent); }

/* پنجره فاکتور مبنا */
.mabna__search { display: flex; align-items: end; gap: 8px; }
.mabna__list, .mabna__lines { max-height: 46vh; overflow: auto; margin-top: 8px; }
.mabna__head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.mabna__foot { display: flex; align-items: center; gap: 8px; margin-top: 6px; }
.mabna__row--done { opacity: .6; }
.mabna__c-qty { width: 140px; }

/* نوار اسکن: تکست بارکد کوچک (مثل ویندوز)، مقدار، جستجوی کالا و وزن باسکول */
.pos__scan { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.pos__scan-box { position: relative; display: inline-flex; align-items: center; width: 230px; }
.pos__scan-icon { position: absolute; inset-inline-start: 6px; width: 14px; height: 14px; color: var(--c-muted); pointer-events: none; }
.pos__scan-input { width: 100%; padding-inline-start: 24px; }
.pos__qty { width: 90px; }
.pos__find { width: 260px; }
.pos__find-box { margin: 0; }
.pos__weight {
    display: inline-flex; align-items: center; gap: 6px; margin-inline-start: auto; padding: 3px 10px; border-radius: var(--radius);
    border: 1px solid var(--c-border); background: var(--c-surface); white-space: nowrap;
}
.pos__weight .p-icon { width: 16px; height: 16px; color: var(--c-muted); }
.pos__weight b { font-size: var(--fs-title); }
.pos__weight--stable { border-color: var(--c-in); }
.pos__lines { flex: 1; min-height: 0; }
.pos__c-row { width: 36px; text-align: center; }
.pos__c-num { text-align: end; }
/* موجودی کمتر از مقدار سبد (کالای خروجی) */
.pos__stock--short { color: var(--c-out); font-weight: 700; }
.pos__c-act { width: 36px; text-align: center; }
.pos__side { display: flex; flex-direction: column; gap: 8px; min-height: 0; overflow: auto; }
.pos__totals { background: var(--c-surface); border: 1px solid var(--c-border); border-radius: var(--radius); padding: 8px var(--pad-x); }
.pos__totals { display: grid; gap: 4px; }
.pos__total-row { display: flex; justify-content: space-between; }
.pos__payable { display: flex; justify-content: space-between; align-items: baseline; border-top: 1px solid var(--c-border); padding-top: 6px; font-size: calc(var(--fs-title) * 1.4); font-weight: 700; }
.pos__actions { display: grid; gap: 6px; }
.pos__actions .p-btn { justify-content: center; }
.pos__status { padding-inline: 4px; }
.pos__viewer { height: 75vh; }
.pos__status-error { display: block; color: var(--c-warn); }
.pos__setbar { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 14px; width: 100%; text-align: start; font: inherit; color: var(--c-text); background: var(--c-surface); border: 1px solid var(--c-border); border-radius: var(--radius); padding: 6px var(--pad-x); cursor: pointer; }
.pos__setbar:hover { background: var(--c-hover); }
.pos__setbar:focus-visible { outline: 2px solid var(--c-focus); outline-offset: 1px; }
.pos__setbar-kind { font-weight: 700; color: var(--c-primary); }
.pos__setbar-key { margin-inline-start: auto; }
.pos__last { display: flex; align-items: center; justify-content: space-between; gap: 6px; background: var(--c-in-soft); color: var(--c-in); border-radius: var(--radius); padding: 4px var(--pad-x); }
.pos__lines tr:focus { outline: 2px solid var(--c-focus); outline-offset: -2px; }

/* تنظیمات فاکتور */
.pos-pins { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 12px; margin-top: 8px; padding-top: 8px; border-top: 1px solid var(--c-border); }
.pos-pins .p-field { margin: 0; }

/* پنل پرداخت */
.trs__bon { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }

.pay__due { display: flex; justify-content: space-between; align-items: center; gap: 8px; font-size: calc(var(--fs-title) * 1.5); font-weight: 700; padding: 6px var(--pad-x); margin-bottom: 8px; background: var(--c-info-soft); color: var(--c-info); border-radius: var(--radius); }
.pay__due-actions { display: flex; gap: 4px; margin-inline-start: auto; font-size: var(--fs-body); font-weight: 400; }
.pay__pins { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; margin-bottom: 8px; padding: 6px var(--pad-x); border: 1px dashed var(--c-border); border-radius: var(--radius); }
.pay__note { margin-bottom: 8px; }

/*
   سه ستون ثابت (درخواست کاربر «سمت راست هم تراز باشن، تکست‌باکس‌ها یه اندازه، لیبل‌ها یه اندازه»):
   برچسب | کادر | دکمه‌ها. برچسب و کنترل هر فیلد با display:contents مستقیم خانه همین شبکه می‌شوند،
   پس همه برچسب‌ها یک عرض (ستون اول) و همه کادرها یک عرض (ستون دوم) دارند.
*/
.pay__grid { display: grid; grid-template-columns: 7.5rem minmax(0, 1fr) 13rem; gap: 6px 8px; align-items: center; }
.pay__grid > .pay__cell, .pay__grid .p-field { display: contents; }
.pay__grid .p-label { grid-column: 1; justify-self: start; align-self: center; white-space: normal; overflow-wrap: break-word; }
.pay__grid .p-control { grid-column: 2; }
.pay__btns { grid-column: 3; display: flex; gap: 4px; align-items: center; justify-content: flex-start; min-height: 1px; }
.pay__btns .p-btn { white-space: nowrap; }
.pay__balance { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-top: 10px; }
.pay__balance-cell { display: flex; justify-content: space-between; align-items: baseline; padding: 6px var(--pad-x); border: 1px solid var(--c-border); border-radius: var(--radius); font-weight: 700; }
.pay__balance-cell--warn { background: var(--c-warn-soft); color: var(--c-warn); }
.pay__balance-cell--ok { background: var(--c-in-soft); color: var(--c-in); }
.pay__options { display: flex; flex-wrap: wrap; gap: 4px 16px; margin-top: 10px; }
.pay__options .p-field { margin: 0; }
.pay__error { margin-top: 8px; padding: 6px var(--pad-x); background: var(--c-warn-soft); color: var(--c-warn); border-radius: var(--radius); white-space: pre-line; }
/* وضعیت ثبت زیر فشار کاری (انتظار قفل، تلاش دوباره، پرسش سرنوشت کلید ثبت) */
.pay__status { margin-top: 8px; padding: 6px var(--pad-x); background: var(--c-info-soft); color: var(--c-info); border-radius: var(--radius); }

/*
   پنل دریافت/پرداخت فرم فاکتور (P3.1j) — همان پنل پایانه (کلاس pay) به‌علاوه نوار جهت پول:
   دریافت سبز (ورود وجه)، پرداخت قرمز (خروج وجه)؛ رنگ‌ها فقط توکن (روشن و تیره).
*/
.p-dialog.invpay { width: min(760px, 100%); }
.invpay__dir {
    display: flex; align-items: center; flex-wrap: wrap; gap: 4px 8px; margin-bottom: 8px;
    padding: 5px var(--pad-x); border-radius: var(--radius); border: 1px solid currentColor;
}
.invpay__dir .p-icon { width: 16px; height: 16px; flex: none; }
.invpay__dir--in { background: var(--c-in-soft); color: var(--c-in); }
.invpay__dir--out { background: var(--c-out-soft); color: var(--c-out); }
.invpay__party { margin-inline-start: auto; font-weight: 700; color: var(--c-text); }
.invpay__keys { margin-top: 8px; }
/* وجه فاکتور در بخش جمع‌ها (فرم فاکتور): تراشه دریافتی سبز، پرداختی قرمز */
.inv__chip--in { border-color: var(--c-in); background: var(--c-in-soft); color: var(--c-in); }
.inv__chip--out { border-color: var(--c-out); background: var(--c-out-soft); color: var(--c-out); }


/* میز کار کالا (پنل انتخاب کالا) */
.pos__panel { width: 320px; display: flex; flex-direction: column; gap: 6px; min-height: 0; background: var(--c-surface); border: 1px solid var(--c-border); border-radius: var(--radius); padding: 6px; }
.pos__segs { display: flex; gap: 4px; }
.pos__seg { flex: 1; height: 28px; border: 1px solid var(--c-border); border-radius: var(--radius); background: var(--c-surface); color: var(--c-muted); font: inherit; cursor: pointer; }
.pos__seg--on { background: var(--c-primary); border-color: var(--c-primary); color: var(--c-primary-fg); font-weight: 700; }
.pos__seg-x { width: 28px; border: 1px solid var(--c-border); border-radius: var(--radius); background: var(--c-surface); color: var(--c-muted); cursor: pointer; }
.pos__seg-x:hover { color: var(--c-out); border-color: var(--c-out); }
.pos__panel-search { height: var(--field); }
.pos__panel-tabs { display: flex; flex-wrap: wrap; gap: 3px; }
.pos__panel-tab { border: 1px solid var(--c-border); border-radius: var(--radius); background: var(--c-surface-2); color: var(--c-text); font: inherit; font-size: var(--fs-small); padding: 2px 8px; cursor: pointer; }
.pos__panel-tab:hover { background: var(--c-hover); }
.pos__panel-tab--on { background: var(--c-select); border-color: var(--c-primary); font-weight: 700; }
.pos__panel-items { flex: 1; min-height: 0; overflow: auto; display: grid; grid-template-columns: repeat(var(--pos-cols, 3), 1fr); gap: 4px; align-content: start; }
.pos__kala {
    min-height: 54px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px; padding: 4px;
    border: 1px solid var(--c-border); border-radius: var(--radius); background: var(--c-surface); color: var(--c-text);
    font: inherit; font-weight: 700; font-size: var(--fs-small); text-align: center; cursor: pointer; overflow: hidden;
}
.pos__kala:hover:not(:disabled) { background: var(--c-hover); border-color: var(--c-primary); }
.pos__kala:focus-visible { outline: 2px solid var(--c-focus); outline-offset: 1px; }
.pos__kala:disabled { opacity: .6; cursor: default; }
.pos__kala--weighted { border-color: var(--c-accent); }
.pos__kala-scale { color: var(--c-accent); font-size: var(--fs-title); line-height: 1; }
.pos__panel-empty { padding: 8px; text-align: center; }
.pos__panel-cols { display: flex; align-items: center; gap: 4px; }
.pos__panel-col { width: 24px; height: 22px; border: 1px solid var(--c-border); border-radius: var(--radius); background: var(--c-surface); color: var(--c-muted); font: inherit; cursor: pointer; }
.pos__panel-col--on { background: var(--c-select); border-color: var(--c-primary); color: var(--c-text); font-weight: 700; }
.pos__recent { flex: 1; min-height: 0; overflow: auto; display: flex; flex-direction: column; gap: 4px; }
.pos__recent-card { display: flex; align-items: stretch; border: 1px solid var(--c-border); border-radius: var(--radius); background: var(--c-surface); overflow: hidden; }
.pos__recent-card:hover { background: var(--c-hover); }
.pos__recent-open { flex: 1; display: flex; align-items: center; gap: 8px; min-width: 0; padding: 6px var(--pad-x); border: 0; background: none; color: var(--c-text); font: inherit; cursor: pointer; }
.pos__recent-print { display: grid; place-items: center; width: 30px; border: 0; border-inline-start: 1px solid var(--c-border); background: none; color: var(--c-muted); cursor: pointer; }
.pos__recent-print:hover { color: var(--c-primary); background: var(--c-select); }
.pos__recent-print .p-icon { width: 15px; height: 15px; }
/* نشان ویرایش روی کارت فاکتور اخیر: روشن می‌کند کلیک = باز کردن فاکتور، نه چاپ */
.pos__recent-icon { width: 13px; height: 13px; color: var(--c-muted); flex: none; }
.pos__recent-open:hover .pos__recent-icon { color: var(--c-primary); }
.pos__recent-serial { font-weight: 700; color: var(--c-primary); }
.pos__recent-date { flex: 1; color: var(--c-muted); font-size: var(--fs-small); }
.pos__recent-amount { font-weight: 700; }



/* فرم ردیف فاکتور */
.p-dialog.line { width: min(880px, 100%); }
.line__item { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.line__item .p-field { flex: 1; min-width: 240px; margin: 0; }
.line__grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px 8px; margin-top: 8px; }
.line__grid > .p-field:last-child { grid-column: 2 / -1; }
.line__grid--extra > .p-field:last-child { grid-column: auto; }
/* راهنمای نرخ (آخرین نرخ همین طرف‌حساب، هشدار فروش زیر نرخ خرید) */
.line__hint { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-top: 6px; color: var(--c-muted); }
/* جمع‌های میانی ردیف: پس از تخفیف، مالیات و عوارض و انحصار، تبصره ۱۷ */
.line__sums { display: flex; gap: 16px; flex-wrap: wrap; margin-top: 8px; color: var(--c-muted); }
.line__sums b { color: var(--c-text); font-weight: 600; }
/* بخش «سایر موارد» (F8) */
.line__more { display: flex; align-items: center; gap: 6px; width: 100%; margin-top: 10px; padding: 6px 4px; border: 0;
    border-top: 1px solid var(--c-border); background: none; color: var(--c-label); font: inherit; font-weight: 600; cursor: pointer; text-align: start; }
.line__more:hover { color: var(--c-primary); }
.line__more:focus-visible { outline: 2px solid var(--c-focus); outline-offset: 2px; }
.line__more .p-icon { transition: transform .12s ease; }
.line__more--open .p-icon { transform: rotate(180deg); }
.line__more kbd { margin-inline-start: auto; color: var(--c-muted); font-weight: 400; }
.line__dot { width: 7px; height: 7px; border-radius: 50%; background: var(--c-primary); }
.line__extra { padding-bottom: 4px; }
.line__extra-head { margin-top: 8px; color: var(--c-muted); font-weight: 600; }
.line__total { display: flex; justify-content: space-between; align-items: baseline; margin-top: 10px; padding: 6px var(--pad-x); border-radius: var(--radius); background: var(--c-info-soft); color: var(--c-info); font-size: calc(var(--fs-title) * 1.2); font-weight: 700; }
@media (max-width: 700px) { .line__grid { grid-template-columns: 1fr 1fr; } .line__grid > .p-field:last-child { grid-column: 1 / -1; } }

/* پنجره تعریف میز کار کالا */
.p-dialog.pe { width: min(1150px, 100%); max-height: 88vh; }
/* دیالوگ‌های پهن فرم‌های فهرستی (جدول اقساط و صورت‌حساب بیمه) */
.p-dialog.inst-dlg { width: min(1000px, 100%); max-height: 88vh; }
.p-dialog.set { width: min(1150px, 100%); max-height: 88vh; }
/* دیالوگ سند خزانه (جدول ردیف‌ها) و دیالوگ تعریف بن */
.p-dialog.rcp { width: min(1100px, 100%); max-height: 88vh; }
/* دیالوگ فرم فاکتور کامل (جدول ردیف‌ها ده ستون دارد) */
.p-dialog.inv { width: min(1320px, 100%); max-height: 92vh; }
.p-dialog.bon { width: min(900px, 100%); max-height: 88vh; }

/*
   دیالوگ‌های بلند و نوار دکمه‌هایشان (گزارش کاربر: «فاکتور ثبت و اینا نداره»):
   پس‌زمینه مودال Zana.Blazor از بالا ۱۲vh فاصله می‌گذارد (`.p-backdrop { padding: 12vh … }`)، پس
   دیالوگ ۹۲vh ای ۱۰۴vh جا می‌خواست و نوار پایینش (ثبت، چاپ، انصراف) زیر لبه پایین صفحه می‌افتاد و
   چون پس‌زمینه fixed است، اسکرول هم نمی‌شد. برای این دیالوگ‌ها فاصله بالا و پایین کم و سقف ارتفاع
   دقیقاً اندازه صفحه می‌شود؛ بدنه خودش اسکرول دارد و دکمه‌ها همیشه دیده می‌شوند.
*/
.p-backdrop:has(> .p-dialog.inv),
.p-backdrop:has(> .p-dialog.set),
.p-backdrop:has(> .p-dialog.pe),
.p-backdrop:has(> .p-dialog.rcp),
.p-backdrop:has(> .p-dialog.bon),
.p-backdrop:has(> .p-dialog.inst-dlg),
.p-backdrop:has(> .p-dialog.vch),
.p-backdrop:has(> .p-dialog.pst) { padding-block: 2vh; }
.p-dialog.inv, .p-dialog.set, .p-dialog.pe, .p-dialog.rcp, .p-dialog.bon, .p-dialog.inst-dlg,
.p-dialog.vch, .p-dialog.pst { max-height: 96vh; }
.p-dialog.inv .p-dialog__body, .p-dialog.set .p-dialog__body, .p-dialog.pe .p-dialog__body,
.p-dialog.rcp .p-dialog__body, .p-dialog.bon .p-dialog__body, .p-dialog.inst-dlg .p-dialog__body,
.p-dialog.vch .p-dialog__body, .p-dialog.pst .p-dialog__body { min-height: 0; }

/*
   بخش‌های کارتی فرم فاکتور (درخواست کاربر: «یکم مرتب و روح‌دارش کن زیادی سرده»):
   هر دسته فیلد یک کارت با سربرگ رنگ ماژول فروش (--m-sal) و آیکن؛ جدول ردیف‌ها راه‌راه با سربرگ چسبان
   و صفحه‌بندی (Pager پیشرو). همه رنگ‌ها توکن‌اند، پس در پوسته روشن و تیره هر دو درست درمی‌آیند.
*/
.inv__form { display: flex; flex-direction: column; gap: 8px; min-height: 0; }
/*
   P3.2 چیدمان تب‌دار: هیچ بخشی در ستون فلکس کوچک‌تر از محتوایش نمی‌شود (پیش از این در دیالوگ تمام‌صفحه/اندازه دستی
   بخش‌ها فشرده و فیلدها نیمه‌بریده دیده می‌شدند)؛ فقط جدول اقلام کش می‌آید و خودش پیمایش می‌شود.
*/
.inv__form > * { flex: none; }
.inv__top {
    display: flex; flex-direction: column; gap: 6px; padding: 8px var(--pad-x);
    border: 1px solid var(--c-border); border-top: 3px solid var(--m-sal); border-radius: var(--radius); background: var(--c-surface);
}
.inv__top > .p-formgrid { margin: 0; }
.inv__tabs { margin: 0; }
.inv__tabs .rep__tab { display: inline-flex; align-items: center; gap: 6px; }
.inv__dot { color: var(--m-sal); font-size: 9px; line-height: 1; }
.inv__pane {
    display: flex; flex-direction: column; gap: 8px; padding: 8px var(--pad-x); min-height: 12rem;
    border: 1px solid var(--c-border); border-radius: var(--radius); background: var(--c-surface);
}
.inv__pane > .p-formgrid { margin: 0; }
.inv__form > .inv__pane--rows { flex: 1 1 auto; }
.inv__checks { display: flex; flex-wrap: wrap; gap: 6px 18px; }
/* نوار جمع همیشه پایین: تخفیف سر فاکتور، تراشه‌ها و قابل پرداخت در یک ردیف */
.inv__sumbar {
    display: flex; flex-wrap: wrap; align-items: center; gap: 6px 12px; padding: 6px var(--pad-x);
    border: 1px solid var(--c-border); border-radius: var(--radius); background: var(--c-surface);
}
.inv__disc { flex: 0 1 15rem; min-width: 11rem; }
.inv__disc .p-field { margin: 0; }
.inv__sumbar .inv__chips { flex: 1 1 auto; }
.inv__sumbar .inv__payable { flex: 0 0 auto; padding-block: 4px; }
/*
   هر بخش: عنوانش **عمودی کنار خودش** (درخواست کاربر: «هر کدام یک خط را گرفتن؛ می‌تونه سمت
   راستش به‌صورت عمودی نوشته شود») — پس هیچ بخشی یک خط کامل برای سربرگ نمی‌خورد.
*/
.inv__sec {
    display: grid; grid-template-columns: 1.75rem minmax(0, 1fr);
    border: 1px solid var(--c-border); border-radius: var(--radius); background: var(--c-surface); overflow: hidden;
}
/*
   نوار عنوان بخش فقط **آیکن** است (درخواست کاربر: «شرح مشخصات فاکتور را بردار که ارتفاع به اندازه
   مورد نیاز بشه؛ رنگش بمونه، داخلش یه آیکن مناسب با رنگ بنفش پررنگ»): متن عمودی ارتفاع بخش را
   به اندازه طول خودش کش می‌داد. عنوان کامل روی tooltip و aria-label می‌ماند.
*/
.inv__sec-head {
    grid-column: 1; margin: 0; display: flex; flex-direction: column; align-items: center; gap: 5px;
    padding: 7px 2px; color: var(--m-sal); background: color-mix(in srgb, var(--m-sal) 10%, var(--c-surface));
    border-inline-end: 1px solid color-mix(in srgb, var(--m-sal) 24%, var(--c-border));
}
.inv__sec-head .p-icon { width: 17px; height: 17px; flex: none; }
.inv__count {
    min-width: 18px; padding: 0 4px; border-radius: 999px; background: color-mix(in srgb, var(--m-sal) 16%, var(--c-surface));
    color: var(--m-sal); font-size: 11px; line-height: 16px; text-align: center; font-weight: 700;
}
.inv__grow { flex: 1; }
.inv__sec-body { grid-column: 2; padding: 7px var(--pad-x); display: flex; flex-direction: column; gap: 7px; min-width: 0; }
.inv__sec-body > .p-formgrid { margin: 0; }
/* بخش دو ستونی (ویزیتور و شرح | مشخصات چاپی مشتری) */
.inv__two { display: grid; grid-template-columns: 1fr 1fr; gap: 7px 16px; align-items: start; }
.inv__col { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.inv__col-head { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; color: var(--c-label); }
.inv__col-head .p-hint { font-weight: 400; }
@media (max-width: 1000px) { .inv__two { grid-template-columns: 1fr; } }
/* نوار دکمه‌های بالای جدول ردیف‌ها و نوار زیر آن (صفحه‌بندی + راهنمای کلیدها) */
.inv__rowbar { display: flex; gap: 6px 10px; flex-wrap: wrap; align-items: end; }
.inv__rowbar > .p-field { flex: 0 1 16rem; min-width: 9rem; margin: 0; }
.inv__rowbar .p-control { min-width: 0; }
.inv__rowfoot { display: flex; gap: 6px 10px; flex-wrap: wrap; align-items: center; }
.inv__rowfoot .p-pager { margin: 0; }
/* جدول ردیف‌ها: راه‌راه، سربرگ چسبان، ستون مبلغ کل پررنگ، جمع صفحه در tfoot */
.inv__rows { max-height: min(48vh, 32rem); }
.p-dialog--free .inv__rows, .p-dialog--max .inv__rows { max-height: none; flex: 1 1 auto; min-height: 8rem; }
.inv__pane--rows { min-height: 0; }
.inv__rows thead th { position: sticky; top: 0; z-index: 1; }
.inv__rows tbody tr:nth-child(even) { background: color-mix(in srgb, var(--c-surface-2) 70%, var(--c-surface)); }
.inv__rows tbody tr:nth-child(even):hover { background: var(--c-hover); }
.inv__c-amount { font-weight: 700; }
.inv__rows tfoot td { height: var(--row); padding-inline: 6px; border-top: 1px solid var(--c-border); background: var(--c-surface-2); color: var(--c-muted); white-space: nowrap; }
.inv__rows tfoot .inv__c-amount { color: var(--c-text); }
/* جمع‌ها: تراشه‌های خوانا + کادر «قابل پرداخت» */
.inv__sec--sum .inv__sec-body { gap: 8px; }
.inv__chips { display: flex; gap: 6px 8px; flex-wrap: wrap; }
.inv__chip { display: inline-flex; align-items: baseline; gap: 6px; padding: 3px 10px; border: 1px solid var(--c-border); border-radius: 999px; background: var(--c-surface-2); font-weight: 600; }
.inv__chip i { font-style: normal; font-weight: 400; color: var(--c-muted); }
.inv__payable {
    display: flex; justify-content: space-between; align-items: baseline; gap: 10px; padding: 6px var(--pad-x);
    border-radius: var(--radius); background: var(--c-info-soft); color: var(--c-info);
    font-size: calc(var(--fs-title) * 1.2); font-weight: 700;
}
/* گزینه‌های ثبت در نوار پایین دیالوگ، کنار دکمه ثبت (درخواست کاربر) */
.inv__foot-opts { display: flex; align-items: center; gap: 4px 14px; flex-wrap: wrap; margin-inline-end: auto; }
.inv__foot-opts .p-field { margin: 0; }
@media (max-width: 900px) { .inv__rows { max-height: none; } }

.pe .p-dialog__body { padding-bottom: 4px; }
.pe__grid { display: grid; grid-template-columns: 1fr 1.2fr 1.2fr; gap: 8px; min-height: 0; height: min(62vh, 520px); }
.pe__col { display: flex; flex-direction: column; gap: 6px; min-width: 0; min-height: 0; border: 1px solid var(--c-border); border-radius: var(--radius); padding: 6px; background: var(--c-surface); }
.pe__head { display: flex; align-items: center; gap: 6px; font-weight: 700; padding-inline: 2px; }
.pe__count { min-width: 20px; padding: 0 6px; border-radius: 999px; background: var(--c-surface-2); color: var(--c-muted); font-size: 11px; line-height: 17px; text-align: center; font-weight: 400; }
.pe__new { display: flex; gap: 4px; }
.pe__new .p-input { flex: 1; min-width: 0; }
.pe__bar { display: flex; align-items: center; gap: 6px; }
.pe__bar .p-field { margin: 0; }
.pe__grow { flex: 1; }
.pe__list { flex: 1; min-height: 0; overflow: auto; border: 1px solid var(--c-border); border-radius: var(--radius); }
.pe__list .p-table { width: 100%; }
.pe__list tr:focus { outline: 2px solid var(--c-focus); outline-offset: -2px; }
.pe__empty { padding: 10px; text-align: center; }
.pe__c-check { width: 28px; text-align: center; }
.pe__c-code { width: 70px; color: var(--c-muted); }
.pe__row-actions { width: 96px; white-space: nowrap; text-align: end; }
.pe__icon { width: 22px; height: 22px; border: 0; background: none; color: var(--c-muted); cursor: pointer; border-radius: var(--radius); padding: 0; }
.pe__icon:hover:not(:disabled) { background: var(--c-hover); color: var(--c-text); }
.pe__icon:disabled { opacity: .35; cursor: default; }
.pe__icon--danger:hover:not(:disabled) { color: var(--c-out); }
.pe__row--in { color: var(--c-muted); }
.pe__row--in .p-hint { color: var(--c-in); }
@media (max-width: 1000px) { .pe__grid { grid-template-columns: 1fr; height: auto; } }

@media (max-width: 1100px) {
  .pos { grid-template-columns: 1fr 300px; }
  .pos__panel { display: none; }
}
@media (max-width: 800px) {
  .pos { grid-template-columns: 1fr; overflow: auto; }
}

/* فرم دسترسی کاربران (نقش‌محور) */
.acc { display: grid; grid-template-columns: 240px 1fr 320px; gap: 8px; padding: 8px; height: 100%; box-sizing: border-box; min-height: 0; }
.acc__col { display: flex; flex-direction: column; gap: 6px; min-height: 0; min-width: 0; overflow: auto; background: var(--c-surface); border: 1px solid var(--c-border); border-radius: var(--radius); padding: 8px; }
.acc__col--wide { gap: 8px; }
.acc__head { display: flex; align-items: center; gap: 8px; }
.acc__head h3 { margin: 0; font-size: var(--fs-title); flex: 1; }
.acc__sub { margin: 4px 0 0; font-size: 13px; }
.acc__list { display: flex; flex-direction: column; gap: 4px; overflow: auto; min-height: 0; }
.acc__item { display: flex; align-items: center; gap: 6px; padding: 6px 8px; border: 1px solid var(--c-border); border-radius: var(--radius); background: var(--c-surface); color: var(--c-text); font: inherit; cursor: pointer; text-align: start; }
.acc__item:hover { background: var(--c-hover); }
.acc__item--on { border-color: var(--c-primary); background: var(--c-select); }
.acc__item-title { flex: 1; font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.acc__group { border: 1px solid var(--c-border); border-radius: var(--radius); padding: 6px 8px; }
.acc__ghead { display: flex; align-items: center; gap: 6px; margin-bottom: 4px; }
.acc__ghead b { flex: 1; }
.acc__perms { display: flex; flex-wrap: wrap; gap: 4px 12px; }
.acc__perm { display: inline-flex; align-items: center; gap: 5px; cursor: pointer; }
/* منوهای نقش به تفکیک بخش منوی اصلی: عنوان بخش کنار گزینه‌هایش */
.acc__msec { display: grid; grid-template-columns: 11rem 1fr; gap: 4px 10px; align-items: start; padding-block: 3px; border-top: 1px dashed var(--c-border); }
.acc__msec:first-of-type { border-top: 0; }
.acc__msec-title { color: var(--c-label); font-size: var(--fs-small); padding-top: 2px; }
@media (max-width: 640px) { .acc__msec { grid-template-columns: 1fr; } }
.acc__foot { display: flex; gap: 8px; margin-top: 8px; }
.acc__user { border: 1px solid var(--c-border); border-radius: var(--radius); padding: 6px 8px; }
.acc__user-head { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.acc__user-roles { display: flex; flex-wrap: wrap; gap: 4px 10px; margin-top: 4px; }
.p-ws__page:has(> .acc) { padding: 0; display: flex; flex-direction: column; overflow: hidden; }
@media (max-width: 1200px) { .acc { grid-template-columns: 1fr; overflow: auto; } }

/* محاسبه‌گر ترازو (F8): وزن × فی = مبلغ، و مبلغ ÷ فی = وزن معادل (درخواست کاربر) */
.scalc .line__item .p-field { min-width: 170px; }
.scalc .pay__balance-cell { font-size: calc(var(--fs-title) * 1.1); }

/* ماشین‌حساب (F9) */
.calc__box { outline: none; display: grid; gap: 8px; }
.calc__screen { border: 1px solid var(--c-border); border-radius: var(--radius); padding: 8px 10px; background: var(--c-surface-2); text-align: end; }
.calc__memo { min-height: 16px; color: var(--c-muted); font-size: var(--fs-small); }
.calc__value { font-size: calc(var(--fs-title) * 1.6); font-weight: 700; overflow: hidden; text-overflow: ellipsis; }
.calc__pad { display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px; }
.calc__key { padding: 10px 0; border: 1px solid var(--c-border); border-radius: var(--radius); background: var(--c-surface); color: var(--c-text); font: inherit; font-size: var(--fs-title); cursor: pointer; }
.calc__key:hover { background: var(--c-hover); }
.calc__key--op { color: var(--c-primary); font-weight: 700; }
.calc__key--clear { color: var(--c-out); }
.calc__key--eq { grid-column: span 2; background: var(--c-primary); color: var(--c-primary-fg); border-color: var(--c-primary); font-weight: 700; }
.calc__hint { margin-top: 6px; }

/* راهنما (F1) */

/*
   چیدمان خانه فرم‌های فهرستی (درخواست کاربر: پنل کناری برداشته شود):
   نوار ابزار بالا (جدید، ویرایش، حذف، تازه‌سازی) + نوار جستجو + فهرست تمام‌عرض؛
   خود فرم به‌صورت دیالوگ (Modal) باز می‌شود و حذف در ردیف است.
*/
.lst { display: flex; flex-direction: column; gap: 6px; padding: 8px; height: 100%; box-sizing: border-box; min-height: 0; }
.lst__bar { display: flex; gap: 8px 10px; flex-wrap: wrap; align-items: end; flex: none; }
/*
   فقط ورودی **مستقیم** نوار (جستجوی ساده) پهنا می‌گیرد. قاعده پیشین روی «.lst__bar .p-input» بود و
   چون .p-control فلکس ستونی است، flex-basis روی **ارتفاع** می‌نشست و کمبو و جستجو ۲۸rem بلند می‌شدند
   (گزارش کاربر: «کنترل‌ها زیادی بزرگ‌اند»).
*/
.lst__bar > .p-input { flex: 0 1 26rem; min-width: 12rem; }
.lst__bar .p-control { min-width: 0; }
/*
   فیلدهای نوار فیلتر (برچسب کنار کنترل): پیش‌تر هر فیلد در قاب ثابت ۱۷rem بود؛ برچسب بلند («جستجو (شماره، طرف‌حساب یا شرح)»)
   کنترل را باریک می‌کرد و متن یک‌خطی چک‌باکس روی راهنمای کنار می‌افتاد (گزارش کاربر ۱۴۰۵/۰۷/۲۹: «نوار بالا درهم شده»).
   اکنون: برچسب کامل + کنترل با پهنای ثابت؛ چک‌باکس به اندازه متنش؛ راهنما فضای مانده را می‌گیرد و می‌شکند.
*/
.lst__bar > .p-field, .trs__filter > .p-field { flex: 0 1 auto; min-width: 0; max-width: 100%; }
.lst__bar > .p-field > label, .trs__filter > .p-field > label { flex: none; white-space: nowrap; }
.lst__bar > .p-field > .p-control, .trs__filter > .p-field > .p-control { flex: 0 1 11rem; width: 11rem; min-width: 7rem; }
.lst__bar > .p-field:has(.p-check) > .p-control, .trs__filter > .p-field:has(.p-check) > .p-control { flex: none; width: auto; min-width: 0; }
.lst__bar > .p-field:has(.p-check), .trs__filter > .p-field:has(.p-check) { align-self: center; }
.lst__bar > .p-hint, .trs__filter > .p-hint { flex: 1 1 14rem; min-width: 0; align-self: center; }
.lst__table { flex: 1 1 auto; min-height: 8rem; overflow: auto; }
/* ستون متن بلند فهرست (اطلاعیه، متن پیام مشتری): یک خط با سه‌نقطه */
.lst__cut { max-width: 22rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* رسیدگی به پیام مشتری (بازخورد/شکایت) */
.fbk__rows { display: grid; grid-template-columns: auto 1fr; gap: 2px 10px; margin: 0 0 10px; }
.fbk__rows dt { color: var(--c-muted); }
.fbk__rows dd { margin: 0; font-weight: 500; }
.fbk__text { white-space: pre-line; border: 1px solid var(--c-border); border-radius: var(--radius); padding: 8px var(--pad-x); margin: 0 0 10px; }
.p-ws__page:has(> .lst) { padding: 0; display: flex; flex-direction: column; overflow: hidden; }

/* فرم تعریف صندوق‌های پایانه */
.trm { display: grid; grid-template-columns: 1fr 340px; gap: 8px; padding: 8px; height: 100%; box-sizing: border-box; min-height: 0; }
.trm__list, .trm__form { display: flex; flex-direction: column; gap: 6px; min-height: 0; min-width: 0; overflow: auto; background: var(--c-surface); border: 1px solid var(--c-border); border-radius: var(--radius); padding: 8px; }
.p-ws__page:has(> .trm) { padding: 0; display: flex; flex-direction: column; overflow: hidden; }
@media (max-width: 1000px) { .trm { grid-template-columns: 1fr; overflow: auto; } }

/* خزانه: دریافت و پرداخت */
.trs { display: grid; grid-template-columns: 1fr 420px; gap: 8px; padding: 8px; height: 100%; box-sizing: border-box; min-height: 0; }
.trs__list, .trs__form { display: flex; flex-direction: column; gap: 6px; min-height: 0; min-width: 0; overflow: auto; background: var(--c-surface); border: 1px solid var(--c-border); border-radius: var(--radius); padding: 8px; }
.trs__filter { display: flex; gap: 8px 10px; flex-wrap: wrap; align-items: end; flex: none; }
.trs__filter .p-control { min-width: 0; }
.trs__branches { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; }
.trs__table { flex: 1; min-height: 0; overflow: auto; }
.trs__sums { display: flex; gap: 16px; flex-wrap: wrap; font-weight: 500; }
.trs__line { display: flex; gap: 8px; flex-wrap: wrap; align-items: end; border: 1px dashed var(--c-border); border-radius: var(--radius); padding: 8px; }
.trs__total { display: flex; justify-content: space-between; align-items: center; font-weight: 700; border-top: 1px solid var(--c-border); padding-top: 6px; }
.trs__actions { display: flex; gap: 8px; flex-wrap: wrap; border-top: 1px solid var(--c-border); padding-top: 6px; }
.p-ws__page:has(> .trs) { padding: 0; display: flex; flex-direction: column; overflow: hidden; }
@media (max-width: 1200px) { .trs { grid-template-columns: 1fr; overflow: auto; } }

/* مشتری: فرم و فهرست */
.custs__search { display: flex; gap: 8px; flex-wrap: wrap; align-items: end; }
.custs__list { max-height: 60vh; overflow: auto; }
.custs__row--off { opacity: .65; }

/* خزانه فاکتور (پنجره پایانه) */
.itrs__list { max-height: 50vh; overflow: auto; }
.itrs__sums { display: flex; gap: 16px; flex-wrap: wrap; align-items: center; font-weight: 500; }

/* امور چک‌ها */
.chq__ops { display: flex; gap: 6px; flex-wrap: wrap; align-items: end; border-bottom: 1px solid var(--c-border); padding-bottom: 6px; }
.chq-hist__head { display: flex; gap: 14px; flex-wrap: wrap; background: var(--c-surface-2); border: 1px solid var(--c-border); border-radius: var(--radius); padding: 8px; }

/* ---------- گزارش‌های بیمه (P10.8) ---------- */
.rep { display: flex; flex-direction: column; gap: 8px; padding: 8px; min-height: 0; overflow: auto; }
.rep__tabs { display: flex; flex-wrap: wrap; gap: 3px; }
.rep__tab {
    height: 26px; padding-inline: 12px; border: 1px solid var(--c-border); background: var(--c-surface); color: var(--c-text);
    font: inherit; font-size: var(--fs-small); border-radius: 13px; cursor: pointer;
}
.rep__tab:hover { background: var(--c-hover); }
.rep__tab--on { background: var(--c-primary); border-color: var(--c-primary); color: var(--c-primary-fg); font-weight: 500; }
.rep__filter { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 6px 18px; }
.rep__sub { margin: 4px 0 0; font-size: var(--fs); color: var(--c-label); }
/* میله شکاف نقدینگی: فقط نمایشی، پهنا نسبت به بزرگ‌ترین شکاف همان گزارش */
.rep__bar { display: block; width: 120px; height: 8px; border-radius: 4px; background: var(--c-surface-2); overflow: hidden; }
.rep__bar-fill { display: block; height: 100%; border-radius: 4px; }
.rep__bar-fill--ok { background: var(--c-in); }
.rep__bar-fill--bad { background: var(--c-out); }
.rep__split { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: 8px 18px; align-items: start; }

/* ---------- سررسید چک و اقساط + تقویم (P4.6b) ---------- */
.due { display: flex; flex-direction: column; gap: 8px; padding: 8px; min-height: 0; overflow: auto; }
.due__row--late td { background: color-mix(in srgb, var(--c-out) 8%, transparent); }
.due__month { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.due__month b { font-size: var(--fs-title); }
/* تقویم شمسی: هفت ستون، هفته از شنبه (ستون اول) تا جمعه */
.due__cal { display: grid; grid-template-columns: repeat(7, 1fr); gap: 3px; }
.due__cal-head {
    background: var(--c-surface-2); border: 1px solid var(--c-border); border-radius: var(--radius);
    color: var(--c-label); font-size: var(--fs-small); text-align: center; padding: 3px 0;
}
.due__cal-cell {
    position: relative; min-height: 64px; display: flex; flex-direction: column; gap: 2px;
    background: var(--c-surface); border: 1px solid var(--c-border); border-radius: var(--radius); padding: 3px;
}
.due__cal-cell--out { background: var(--c-surface-2); color: var(--c-muted); }
.due__cal-cell--holiday .due__cal-day { color: var(--c-out); }
.due__cal-cell--today { border-color: var(--c-primary); box-shadow: 0 0 0 1px var(--c-primary); }
.due__cal-day { font-weight: 700; font-size: var(--fs-small); }
.due__cal-in { color: var(--c-in); font-size: var(--fs-small); }
.due__cal-out { color: var(--c-warn); font-size: var(--fs-small); }
.due__cal-late {
    position: absolute; inset-block-start: 2px; inset-inline-start: 3px; width: 14px; height: 14px;
    display: grid; place-content: center; border-radius: 50%; background: var(--c-out); color: #fff;
    font-size: 10px; font-weight: 700;
}
.due__avg { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; background: var(--c-surface-2); border: 1px solid var(--c-border); border-radius: var(--radius); padding: 6px var(--pad-x); }
.due__avg-out { background: var(--c-in-soft); color: var(--c-in); border-radius: var(--radius); padding: 2px 8px; }
.acc__report { max-height: 62vh; }
/* دیالوگ تب‌دار نقش (P2.10) */
.role__tabs { margin-bottom: 8px; padding-bottom: 6px; border-bottom: 1px solid var(--c-border); }
.role__tabs .rep__tab:disabled { opacity: .5; cursor: not-allowed; }
.role__count { display: inline-block; min-width: 1.6em; margin-inline-start: 4px; padding-inline: 5px; border-radius: 9px; background: var(--c-surface-2); color: var(--c-text); font-size: var(--fs-small); font-weight: 400; }
.rep__tab--on .role__count { background: var(--c-surface); }
.role__dirty { margin-inline-start: 4px; color: var(--c-warn); font-size: var(--fs-small); }
.role__pane { display: flex; flex-direction: column; gap: 8px; height: 60vh; min-height: 260px; overflow: auto; padding-inline-end: 2px; }
.role__hint { margin: 0; }
.role__bar { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; position: sticky; top: 0; z-index: 1; background: var(--c-surface); padding-block: 4px; }
.role__search { flex: 1 1 14rem; max-width: 22rem; }
.role__stat { color: var(--c-label); font-size: var(--fs-small); }
.role__kinds { display: flex; flex-wrap: wrap; gap: 3px; }
.role__group { border: 1px solid var(--c-border); border-radius: var(--radius); padding: 6px 8px; background: var(--c-surface); }
.role__ghead { display: flex; align-items: center; gap: 6px; margin-bottom: 6px; padding-bottom: 4px; border-bottom: 1px dashed var(--c-border); }
.role__ghead b { flex: 1; }
.role__grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(13rem, 1fr)); gap: 3px 8px; }
.role__grid--dense { grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr)); }
.role__item { display: flex; align-items: flex-start; gap: 6px; min-width: 0; padding: 3px 6px; border: 1px solid transparent; border-radius: var(--radius); cursor: pointer; }
.role__item input { margin-top: 3px; flex: none; }
/* عنوان کامل دیده شود (درخواست کاربر ۱۴۰۵/۰۷/۲۷: «عناوین کامل نمی‌آید») — شکستن سطر به‌جای «…» */
.role__item span:first-of-type { flex: 1; min-width: 0; white-space: normal; overflow-wrap: anywhere; line-height: 1.5; }
.role__item:hover { background: var(--c-hover); }
.role__item--on { background: var(--c-select); border-color: var(--c-border); }
.role__item:focus-within { outline: 2px solid var(--c-primary); outline-offset: -2px; }
.role__code { color: var(--c-label); font-size: var(--fs-small); }
.role__summary { display: grid; grid-template-columns: repeat(auto-fill, minmax(11rem, 1fr)); gap: 8px; margin-top: 8px; }
.role__card { display: flex; flex-direction: column; align-items: flex-start; gap: 4px; padding: 10px; border: 1px solid var(--c-border); border-radius: var(--radius); background: var(--c-surface); color: var(--c-text); font: inherit; cursor: pointer; text-align: start; }
.role__card:hover { background: var(--c-hover); border-color: var(--c-primary); }
.role__users { flex: 1; min-height: 0; }
.role__col-check { width: 4.5rem; text-align: center; }
.role__row--on td { background: var(--c-select); }


/* ---------- پیوند سندها، نمایشگر سند حسابداری و وضعیت حساب طرف‌حساب (۱۴۰۵/۰۷/۲۴) ---------- */
/* پیوند سند: دکمه کوچک هم‌قد برچسب با رنگ اصلی؛ کلیک یا Enter سند را روی همه پنجره‌ها باز می‌کند */
.doclink {
    display: inline-flex; align-items: center; gap: 4px; max-width: 100%;
    border: 1px solid var(--c-border); border-radius: var(--radius); background: var(--c-surface);
    color: var(--c-primary); font: inherit; font-size: var(--fs-small); line-height: 1.5;
    padding: 0 6px; cursor: pointer; white-space: nowrap;
}
.doclink:hover { background: var(--c-hover); border-color: var(--c-primary); }
.doclink:focus-visible { outline: 2px solid var(--c-focus); outline-offset: 1px; }
.doclink .p-icon { width: 12px; height: 12px; flex: none; }
.doclink__label { color: var(--c-label); }
.doclink__text { overflow: hidden; text-overflow: ellipsis; text-decoration: underline; text-underline-offset: 2px; }
.p-dialog__head .doclink { margin-inline-start: 4px; }

/* ستون چپ‌به‌راست (شماره مودیان) */
.lst__ltr { direction: ltr; unicode-bidi: isolate; text-align: start; font-variant-numeric: tabular-nums; white-space: nowrap; }

/* نمایشگر سند حسابداری */
.p-dialog.vch { width: min(1100px, 100%); }
.vch__head { display: flex; gap: 14px; flex-wrap: wrap; background: var(--c-surface-2); border: 1px solid var(--c-border); border-radius: var(--radius); padding: 8px; }
.vch__desc { flex: 1 1 100%; }
.vch__sources { display: flex; gap: 6px; flex-wrap: wrap; align-items: center; margin-block: 6px; }
.vch__rows { max-height: 60vh; overflow: auto; }
.vch__rows tfoot td { font-weight: 700; background: var(--c-surface-2); }
/* صدور سند و لیست اسناد (A1) */
.vch__head.p-hint { background: transparent; border: 0; padding-block: 0; }
.vche__papers { display: flex; align-items: flex-end; gap: 8px; flex-wrap: wrap; }
.vche__papers > .p-field { flex: 0 1 8rem; }
.vchl__chk { width: 2rem; text-align: center; }
.vchl__flags { white-space: nowrap; }
.vchl__flags .p-badge { margin-inline-end: 3px; }
.vchl__bad td { color: var(--c-out); }
.vchl__foot { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; padding: 6px var(--pad-x); border: 1px solid var(--c-border); border-radius: var(--radius); background: var(--c-surface-2); }
.vchf__preview { margin-top: 8px; text-align: center; }
.vchf__preview img { max-width: 100%; max-height: 55vh; border: 1px solid var(--c-border); border-radius: var(--radius); }
/* تب‌های ماه فهرست‌ها (mp_tabMonth) */

/* نوار آخرین وضعیت حساب طرف‌حساب (فرم فاکتور و خزانه) */
.pstat {
    display: flex; align-items: center; gap: 6px 14px; flex-wrap: wrap;
    background: var(--c-surface-2); border: 1px solid var(--c-border); border-radius: var(--radius);
    padding: 3px var(--pad-x); margin-block: 4px;
}
.pstat__item { display: inline-flex; align-items: baseline; gap: 4px; }
.pstat__item--total { font-weight: 700; }
.pstat__label { color: var(--c-label); font-size: var(--fs-small); }
.pstat__side { font-size: var(--fs-small); color: var(--c-muted); }
.pstat__side--debit { color: var(--c-out); }
.pstat__side--credit { color: var(--c-in); }

/* صورت‌حساب طرف‌حساب */
.p-dialog.pst { width: min(1150px, 100%); }
.pst__bar { display: flex; gap: 8px 14px; align-items: end; flex-wrap: wrap; }
.pst__moins { max-height: 26vh; overflow: auto; }
.pst__moins tfoot td { font-weight: 700; background: var(--c-surface-2); }
.pst__ledger { max-height: 40vh; overflow: auto; }
.pst__head { margin: 8px 0 4px; font-size: var(--fs-title); }

/* فاکتور مرتبط سند خزانه و پنجره انتخاب فاکتور */
.rcp__invoice { display: flex; align-items: center; gap: 6px 10px; flex-wrap: wrap; margin-block: 4px; }
.rcp__invoice-label { color: var(--c-label); font-size: var(--fs-small); }
.rcp__invoice-sum { display: inline-flex; align-items: baseline; gap: 4px; flex-wrap: wrap; color: var(--c-muted); font-size: var(--fs-small); }
.p-dialog.tinv { width: min(1000px, 100%); }
.tinv__list { max-height: 55vh; overflow: auto; }

/* ---------- گزارش‌های فروش و خرید (P7.1) ---------- */
.srep { gap: 6px; }
/* پالایه مشترک: شبکه خودکار تا در پهنای کم هم همه فیلترها دیده شوند */
.srep__filter { display: grid; grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr)); gap: 6px 10px; align-items: end; }
.srep__multi { min-width: 0; }
.scope__notice { align-self: center; max-inline-size: 42ch; color: var(--c-warn); cursor: help; }
.srep__kinds, .srep__groupby { display: flex; gap: 6px 12px; flex-wrap: wrap; align-items: center; padding-block: 2px; }
.srep__kind { border-radius: var(--radius); padding: 0 6px; }
.srep__kind--in { background: var(--c-in-soft); color: var(--c-in); }
.srep__kind--out { background: var(--c-out-soft); color: var(--c-out); }
.srep__cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr)); gap: 8px; }
.srep__two { display: grid; grid-template-columns: repeat(auto-fit, minmax(22rem, 1fr)); gap: 10px; }
.srep__table { max-height: 58vh; overflow: auto; }
/* میله سهم هر ردیف (نسبت به بزرگ‌ترین مقدار گزارش) */
.srep__bar { height: 8px; min-width: 2px; border-radius: var(--radius); background: var(--c-primary); }

/* ---------- لاگ کارکرد کاربران (P7.2) ---------- */
.alog { gap: 6px; }
/* ردیف ناموفق لاگ (۴۰۰ و بالاتر) کم‌رنگ قرمز تا در نگاه اول پیدا شود */
.alog__row--bad { background: var(--c-out-soft); }
.alog__bad { color: var(--c-out); }
/* ردیف کاربر: کلیک = ریز کار همان کاربر */
.alog__user { cursor: pointer; }
.alog__user:hover { background: var(--c-surface-2); }

/* ---------- گزارش‌های انبار (P7.3) ---------- */
.whrep { gap: 6px; }
/* ردیف «نقل از قبل» کاردکس: برجسته تا سر دفتر پیدا باشد */
.whrep__row--open { background: var(--c-surface-2); font-weight: 600; }
/* مانده منفی و زیر نقطه سفارش */
.whrep__row--bad { background: var(--c-out-soft); }
.whrep__row--warn { background: var(--c-warn-soft, var(--c-surface-2)); }
.whrep__bad { color: var(--c-out); }

/* ---------- گزارش‌های حسابداری (R6) ---------- */
/* جمع پای جدول تراز و دفاتر */
.acrep__table tfoot td { font-weight: 700; background: var(--c-surface-2); }
/* سطر شرح بلوک دفتر روزنامه («سند روز …») */
.acrep__caption td { font-style: italic; color: var(--c-label); background: var(--c-surface-2); }
/* سطر بستانکار دفتر روزنامه: تورفته مثل دفتر کاغذی */
.acrep__credit { padding-inline-start: 2.5em; }
/* ردیف ریزشدنی (دابل‌کلیک = یک پله پایین‌تر) */
.acrep__drill { cursor: pointer; }
/* سرفصل هر نوع ترازنامه‌ای و بخش سود و زیان */
.acrep__section td { font-weight: 700; background: var(--c-surface-2); }
/* ردیف انتخاب‌شده صورت‌حساب ویزیتور (معین/تفصیلی) */
.acrep__on td { background: var(--c-select); }
.acrep__mark { width: 2em; text-align: center; color: var(--c-primary); font-weight: 700; }

/* ---------- کدینگ حسابداری (B1): درخت گروه ← کل ← معین ---------- */
.coding__group td { font-weight: 700; background: var(--c-surface-2); }
.coding__kol .coding__title { padding-inline-start: 1.5em; font-weight: 600; }
.coding__moin .coding__title { padding-inline-start: 3em; }
.coding__group .coding__caret:empty { cursor: default; }
.coding__caret { display: inline-block; width: 1.2em; cursor: pointer; color: var(--c-label); }
.coding__code { white-space: nowrap; }
.coding__flags { display: flex; gap: 16px; flex-wrap: wrap; margin-top: 8px; }
/* تیک‌ها داخل FormGrid یک خانه برچسب (باریک) می‌گرفتند و متن‌شان روی هم می‌افتاد — کل عرض ستون کنترل را بگیرند */
.p-formgrid > .coding__flags { grid-column: 2 / -1; margin-top: 0; min-height: var(--field); align-items: center; }
.coding__flags .p-control { flex: 0 1 auto; inline-size: auto; }
/* نوع‌های سند مجاز انبار (B3): چند ستون */
.whs__kinds { display: grid; grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr)); gap: 2px 12px; }
/* کالاها (B4): پیش‌نمایش تصاویر و بارکد چندسطری */
.prd__images { display: flex; flex-wrap: wrap; gap: 8px; margin-block: 8px; }
.prd__images img { width: 96px; height: 96px; object-fit: contain; border: 1px solid var(--c-border); border-radius: var(--radius); background: var(--c-surface); }
.prd__dialog .p-table .p-input { width: 100%; }
.coding__usage { margin-top: 8px; padding: 6px 10px; border-radius: var(--radius); background: var(--c-surface-2); color: var(--c-label); }

/* ---------- گزارش‌ساز (R8): طراح دوستونه سطرها | اجزای محاسبه ---------- */
.repb__head { display: flex; gap: 12px; align-items: flex-end; margin-bottom: 8px; }
.repb__head > :first-child { flex: 1; min-width: 0; }
.repb__design { display: grid; grid-template-columns: minmax(0, 2fr) minmax(0, 3fr); gap: 12px; min-height: 18rem; }
.repb__pane { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.repb__bar { display: flex; align-items: center; gap: 6px; }
.repb__row { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); gap: 6px 10px; }
.repb__parts td { padding-block: 2px; }
.repb__paste summary { cursor: pointer; color: var(--c-label); }
@media (max-width: 760px) { .repb__design { grid-template-columns: 1fr; } }

/* ---------- گزارش‌های ساخته‌شده SQL (R8): فهرست | نتیجه پویا ---------- */
.sqlrep { display: grid; grid-template-columns: minmax(12rem, 1fr) minmax(0, 3fr); gap: 12px; align-items: start; }
.sqlrep__list, .sqlrep__result { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
@media (max-width: 760px) { .sqlrep { grid-template-columns: 1fr; } }

/* ---------- فرم شخص (CustomerDialog): تب‌ها، تیک‌ها و جدول نشانی‌ها ---------- */
.cust__tabs { margin-bottom: 8px; }
/* تب ویزیتور و مسیر شخص (P2.14) */
.cust__route { display: flex; align-items: flex-end; gap: 8px; }
.cust__route > :first-child { flex: 1; min-width: 0; }
.cust__flags { display: flex; flex-wrap: wrap; gap: 16px; margin-top: 8px; }
.cust__addr { display: grid; gap: 6px; }
.cust__addr .p-table td { padding: 2px 4px; }
.cust__addr .p-table td .p-field { margin: 0; }

/* فهرست اشخاص: ستون نشانی کوتاه شود تا جدول پهن نشود */
.ppl__addr { max-width: 220px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* درخت آدرس و مناطق (P2.18): تورفتگی هر سطح با متغیر --adt-depth */
.adt__node { display: inline-flex; align-items: center; gap: 4px; padding-inline-start: calc(var(--adt-depth, 0) * 1.4em); }
.adt__twist { display: inline-flex; align-items: center; justify-content: center; inline-size: 1.4em; block-size: 1.4em;
    border: 0; padding: 0; background: none; color: var(--c-muted); border-radius: var(--radius); cursor: pointer; }
.adt__twist:hover { background: var(--c-hover); color: var(--c-text); }
.adt__twist--leaf { cursor: default; }
.adt__title--hit { color: var(--c-primary); font-weight: 600; }
.adt__count { border: 0; background: none; padding: 0 4px; color: var(--c-primary); text-decoration: underline; cursor: pointer; font: inherit; }
.adt__tick { inline-size: 2.2em; }
.adt__people { max-block-size: 55vh; overflow: auto; }

/* ورود اشخاص از اکسل (P2.19) */
.pimp__opts { display: flex; flex-wrap: wrap; align-items: center; gap: 16px; margin-block: 6px; }
.pimp__bar { block-size: 6px; background: var(--c-surface-2); border-radius: var(--radius); overflow: hidden; margin-block: 8px; }
.pimp__bar > span { display: block; block-size: 100%; background: var(--c-primary); transition: inline-size .2s; }
.pimp__warn { color: var(--c-warn); }


/* ورود دومرحله‌ای (P2.15) */
.tfa__ok { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 6px; }
.tfa__steps { margin: 0 0 8px; padding-inline-start: 1.4em; display: grid; gap: 2px; }
.tfa__setup { display: flex; gap: 16px; align-items: center; flex-wrap: wrap; margin-bottom: 10px; }
/* زمینه QR در پوسته تیره هم سفید می‌ماند تا گوشی اسکنش کند (رنگ عمدی، نه توکن) */
.tfa__qr { padding: 8px; background: #fff; border: 1px solid var(--c-border); border-radius: var(--radius); line-height: 0; }
.tfa__manual { display: flex; flex-direction: column; gap: 6px; align-items: flex-start; min-width: 0; }
.tfa__key { font-size: 15px; letter-spacing: 1px; padding: 6px 8px; background: var(--c-surface-2); border: 1px solid var(--c-border); border-radius: var(--radius); overflow-wrap: anywhere; }
.tfa__form { display: flex; gap: 8px; align-items: flex-end; flex-wrap: wrap; }
.tfa__form > :first-child { flex: 0 1 14rem; }
/* تغییر رمز (P8.4e): فیلدها زیر هم */
.tfa__form--stack { flex-direction: column; align-items: stretch; }
.tfa__form--stack > :first-child { flex: none; }
/* تولید (P11.10): ردیف‌های محصول زیر هر رسید در قیمت‌گذاری */
.prd__sub td { color: var(--c-muted); font-size: var(--fs-small); border-top-style: dashed; }
.tfa__codes { display: grid; grid-template-columns: repeat(2, minmax(8rem, 1fr)); gap: 6px; margin: 6px 0 8px; }
.tfa__codes code { padding: 6px 8px; text-align: center; font-size: 14px; letter-spacing: 1px; background: var(--c-surface-2); border: 1px solid var(--c-border); border-radius: var(--radius); }

/* ---------- داشبورد میز کار (P2.17) ---------- */
.dash { display: flex; flex-direction: column; gap: 10px; margin-bottom: 14px; }
/* نوار پالایه (نامش با ستون نمودار .dash__bar یکی بود و پالایه‌ها ۱۴ پیکسل جمع می‌شدند — P2.17a) */
.dash__filters { display: flex; align-items: flex-end; gap: 10px; flex-wrap: wrap; }
.dash__filters .p-mh__section { margin: 0; flex: 1 1 auto; }
.dash__branches { min-width: 14rem; }
.dash__kpis { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 8px; }
.dash__kpi {
    display: flex; flex-direction: column; align-items: flex-start; gap: 2px; padding: 10px 12px; text-align: start; cursor: pointer;
    background: var(--c-surface); color: var(--c-text); font: inherit; border: 1px solid var(--c-border);
    border-inline-start: 4px solid var(--kc, var(--c-primary)); border-radius: var(--radius);
}
.dash__kpi:hover { background: var(--c-hover); }
.dash__kpi-title { color: var(--c-label); font-size: var(--fs-small); }
.dash__kpi-value { font-size: 18px; line-height: 1.3; font-variant-numeric: tabular-nums; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.dash__grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 380px), 1fr)); gap: 10px; align-items: start; }
.dash__card { background: var(--c-surface); border: 1px solid var(--c-border); border-radius: var(--radius); padding: 10px 12px; min-width: 0; }
.dash__card--wide { grid-column: 1 / -1; }
.dash__head { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }
.dash__head b { flex: 1; display: inline-flex; align-items: center; gap: 6px; }
.dash__legend { display: flex; gap: 12px; font-size: var(--fs-small); color: var(--c-label); }
.dash__legend span { display: inline-flex; align-items: center; gap: 4px; }
.dash__legend i { width: 10px; height: 10px; border-radius: 2px; display: inline-block; }
/* نمودار ستونی: یک محور، دو سری هم‌واحد (ریال)، شیار ۲px، سر گرد ۴px روی خط پایه */
.dash__chart { display: grid; grid-template-columns: auto 1fr; gap: 6px; align-items: stretch; }
.dash__axis { font-size: var(--fs-small); color: var(--c-muted); align-self: start; font-variant-numeric: tabular-nums; }
.dash__bars { display: flex; align-items: flex-end; gap: 4px; height: 160px; overflow-x: auto; border-bottom: 1px solid var(--c-border); padding-top: 4px; }
.dash__day { flex: 1 0 22px; max-width: 48px; display: flex; flex-direction: column; align-items: stretch; height: 100%; outline-offset: 2px; }
.dash__day:hover, .dash__day:focus-visible { background: var(--c-hover); border-radius: 4px; }
.dash__pair { flex: 1; display: flex; align-items: flex-end; justify-content: center; gap: 2px; min-height: 0; }
.dash__bar { width: 42%; max-width: 14px; min-height: 0; border-radius: 4px 4px 0 0; }
.dash__bar--sale { background: var(--dash-sale); }
.dash__bar--buy { background: var(--dash-buy); }
.dash__label { font-size: 10px; color: var(--c-muted); text-align: center; white-space: nowrap; overflow: hidden; }
.dash__top { margin: 0; padding: 0; list-style: none; display: grid; gap: 6px; counter-reset: dash; }
.dash__top li { display: grid; grid-template-columns: 1fr auto; gap: 2px 8px; counter-increment: dash; }
.dash__top-title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dash__top-title::before { content: counter(dash) ". "; color: var(--c-muted); }
.dash__share { grid-column: 1 / -1; height: 4px; background: var(--c-surface-2); border-radius: 2px; overflow: hidden; }
.dash__share i { display: block; height: 100%; background: var(--dash-sale); border-radius: 2px; }
.dash__share--buy i { background: var(--dash-buy); }
.dash__table td, .dash__table th { padding: 3px 6px; }
.dash__alerts { margin: 0; padding: 0; list-style: none; display: grid; gap: 4px; }
.dash__alert button {
    width: 100%; display: flex; align-items: center; gap: 8px; padding: 6px 8px; text-align: start; cursor: pointer;
    font: inherit; color: var(--c-text); background: var(--c-surface-2); border: 1px solid var(--c-border); border-radius: var(--radius);
}
.dash__alert button:hover { background: var(--c-hover); }
.dash__alert .p-icon { color: var(--c-in); flex: none; }
.dash__alert--hot button { background: var(--c-warn-soft); border-color: var(--c-warn); }
.dash__alert--hot .p-icon { color: var(--c-warn); }
.dash__row--late td { color: var(--c-out); }
.dash__bar--in { background: var(--dash-in); }
.dash__bar--out { background: var(--dash-out); }
/* روند ارزش موجودی (D1): یک سری، خط ۲ پیکسلی */
.dash__line { width: 100%; height: 110px; display: block; overflow: visible; border-bottom: 1px solid var(--c-border); }
.dash__line polyline { fill: none; stroke: var(--c-primary); stroke-width: 2; vector-effect: non-scaling-stroke; stroke-linejoin: round; }
.dash__line polygon { fill: var(--c-primary); opacity: .08; }
.dash__line circle { fill: var(--c-surface); stroke: var(--c-primary); stroke-width: 2; vector-effect: non-scaling-stroke; }
.dash__line rect { fill: transparent; }
.dash__line rect:hover + circle, .dash__line rect:focus + circle { fill: var(--c-primary); }
.dash__sub { margin: 10px 0 4px; font-size: var(--fs-small); color: var(--c-label); display: flex; align-items: center; gap: 8px; }
.dash__sub b { flex: 1; font-weight: 500; }
.dash__cover td, .dash__cover th { padding: 3px 6px; white-space: nowrap; }
.dash__scroll { max-width: 100%; overflow-x: auto; }
.dash__cover { width: 100%; }
.dash__cover td:first-child { white-space: normal; min-width: 6rem; max-width: 12rem; }
.dash__cover-title { display: block; overflow-wrap: anywhere; }
.dash__cover-unit { display: block; font-size: var(--fs-small); color: var(--c-muted); }
.dash__days { display: inline-block; min-width: 2.6rem; padding: 0 6px; border-radius: 9px; text-align: center; background: var(--c-surface-2); font-variant-numeric: tabular-nums; }
.dash__days--hot { background: var(--c-warn-soft); color: var(--c-warn); font-weight: 600; }
.dash__days--out { background: var(--c-out); color: var(--c-surface); font-weight: 600; }
@media (max-width: 640px) { .dash__bars { height: 120px; } .dash__line { height: 90px; } }

/* خزانه فاکتور (P3.2): جزئیات سند انتخابی زیر فهرست — ردیف‌ها، وضعیت چک‌ها، سند حسابداری و چاپ */
.itrs__detail { display: flex; flex-direction: column; gap: 6px; margin-top: 8px; padding: 8px; border: 1px solid var(--c-border); border-inline-start: 3px solid var(--m-trs); border-radius: var(--radius); background: var(--c-surface); }
.itrs__detail-head { display: flex; align-items: center; flex-wrap: wrap; gap: 6px 10px; }

/* ── لایسنس و ماژول‌ها (P11.1–P11.3) ── */
.lic__state { display: flex; align-items: flex-start; gap: 8px; margin: 8px 0; padding: 8px var(--pad-x); border-radius: var(--radius); }
.lic__state .p-icon { width: 18px; height: 18px; flex: none; margin-top: 2px; }
.lic__state--ok { background: var(--c-in-soft); color: var(--c-in); }
.lic__state--info { background: var(--c-info-soft); color: var(--c-info); }
.lic__state--bad { background: var(--c-out-soft); color: var(--c-out); }
.lic__install-code { display: flex; gap: 16px; flex-wrap: wrap; align-items: flex-start; }
.lic__code { display: flex; align-items: center; gap: 8px; }
.lic__code code { padding: 4px 8px; border: 1px solid var(--c-border); border-radius: var(--radius); background: var(--c-surface); user-select: all; }
.lic__info { display: grid; grid-template-columns: max-content 1fr; gap: 4px 16px; margin: 8px 0; }
.lic__info dt { color: var(--c-muted); }
.lic__info dd { margin: 0; }
.lic__locked { color: var(--c-muted); }
/* نوار هشدار لایسنس (فقط برای مدیر لایسنس) */
.shell__license { display: flex; align-items: center; gap: 8px; padding: 3px var(--pad-x); background: var(--c-warn-soft); color: var(--c-warn); border: 0; width: 100%; font: inherit; cursor: pointer; text-align: start; }
.shell__license .p-icon { width: 14px; height: 14px; flex: none; }
.shell__license:focus-visible { outline: 2px solid var(--c-focus); outline-offset: -2px; }
/* صنف (P11.4) */
.lic__biz { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 8px; margin: 8px 0; }
.lic__biz-item { display: flex; flex-direction: column; gap: 2px; padding: 8px var(--pad-x); border: 1px solid var(--c-border); border-radius: var(--radius);
    background: var(--c-surface); color: var(--c-text); font: inherit; text-align: start; cursor: pointer; }
.lic__biz-item:hover { border-color: var(--c-primary); background: var(--c-hover); }
.lic__biz-item:focus-visible { outline: 2px solid var(--c-focus); outline-offset: 1px; }
.lic__biz-item--on { border-color: var(--c-primary); background: var(--c-select); box-shadow: inset 0 0 0 1px var(--c-primary); }
.lic__biz-mods { color: var(--c-label); }
.lic__biz-win { color: var(--c-muted); }

/* ── رستوران (P11.6): میز کار، تعریف و فهرست سفارش‌ها ── */
.rst { display: flex; flex-direction: column; gap: 6px; padding: 8px; height: 100%; box-sizing: border-box; min-height: 0; }
.p-ws__page:has(> .rst) { padding: 0; display: flex; flex-direction: column; overflow: hidden; }
.rst__body { flex: 1 1 auto; min-height: 0; display: grid; grid-template-columns: minmax(220px, 1fr) minmax(360px, 1.6fr) minmax(240px, 1.1fr); gap: 8px; }
.rst__tables, .rst__order, .rst__menu { display: flex; flex-direction: column; gap: 6px; min-height: 0; min-width: 0; overflow: auto;
    background: var(--c-surface); border: 1px solid var(--c-border); border-radius: var(--radius); padding: 8px; }
.rst__tabs { display: flex; gap: 4px; overflow-x: auto; flex: none; }
.rst__tabs--wrap { flex-wrap: wrap; overflow: visible; }
.rst__tab { border: 1px solid var(--c-border); background: var(--c-surface-2); color: var(--c-text); border-radius: var(--radius); padding: 3px 10px;
    cursor: pointer; white-space: nowrap; display: inline-flex; align-items: center; gap: 6px; font: inherit; }
.rst__tab:hover { background: var(--c-hover); }
.rst__tab--on { background: var(--c-primary); color: var(--c-primary-fg); border-color: var(--c-primary); }
.rst__tab kbd { font-size: var(--fs-small); opacity: .7; }
.rst__count { min-width: 1.4em; padding: 0 5px; border-radius: 9px; background: var(--c-warn); color: var(--c-surface); font-size: var(--fs-small); text-align: center; }
.rst__grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(92px, 1fr)); gap: 6px; align-content: start; }
.rst__table { position: relative; min-height: 58px; border: 1px solid var(--c-border); border-radius: var(--radius); cursor: pointer; font: inherit;
    display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px; padding: 4px; color: var(--c-text); }
.rst__table:focus-visible { outline: 2px solid var(--c-focus); outline-offset: 1px; }
.rst__table:disabled { opacity: .45; cursor: not-allowed; }
.rst__table--s0 { background: var(--c-surface-2); }
.rst__table--s1 { background: var(--c-warn-soft); border-color: var(--c-warn); }
.rst__table--s2 { background: var(--c-info-soft); border-color: var(--c-info); }
.rst__table--s3 { background: var(--c-in-soft); border-color: var(--c-in); }
.rst__table--on { box-shadow: 0 0 0 2px var(--c-primary); }
.rst__table-title { font-weight: 600; }
.rst__table-sum { font-size: var(--fs-small); color: var(--c-muted); }
.rst__table .rst__count { position: absolute; inset-block-start: 3px; inset-inline-end: 3px; }
/* سفارش مشتری با QR میز (P11.6e): زنگوله روی میز درخواست‌دار، دکمه نوار، ردیف دیده‌نشده و تب تعریف */
.rst__table--guest { box-shadow: 0 0 0 2px var(--c-warn); animation: rst-guest 1.6s ease-in-out infinite; }
.rst__table--guest.rst__table--on { box-shadow: 0 0 0 2px var(--c-primary), 0 0 0 4px var(--c-warn); }
@keyframes rst-guest { 50% { box-shadow: 0 0 0 4px var(--c-warn-soft); } }
@media (prefers-reduced-motion: reduce) { .rst__table--guest { animation: none; } }
.rst__guest-dot { position: absolute; inset-block-start: 3px; inset-inline-start: 3px; display: inline-flex; align-items: center; gap: 2px;
    padding: 0 5px; border-radius: 9px; background: var(--c-warn); color: var(--c-surface); font-size: var(--fs-small); }
.rst__guest-dot .p-icon { width: 12px; height: 12px; }
.rst__row--guest td { background: var(--c-warn-soft); font-weight: 600; }
.rst__guest-acts { white-space: nowrap; width: auto; }
.rst__guest { display: grid; grid-template-columns: minmax(18rem, 26rem) 1fr; gap: 12px; align-items: start; min-height: 0; flex: 1 1 auto; overflow: auto; }
.rst__guest-form { display: flex; flex-direction: column; gap: 6px; background: var(--c-surface); border: 1px solid var(--c-border); border-radius: var(--radius); padding: 10px; }
.rst__guest-actions { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 4px; }
.rst__guest-links { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
@media (max-width: 900px) { .rst__guest { grid-template-columns: 1fr; } }
.rst__legend { display: flex; flex-wrap: wrap; gap: 4px 12px; font-size: var(--fs-small); color: var(--c-muted); }
.rst__legend span { display: inline-flex; align-items: center; gap: 4px; }
.rst__sw { display: inline-block; width: 12px; height: 12px; border-radius: 3px; border: 1px solid var(--c-border); min-height: 0; padding: 0; }
.rst__calls { border-top: 1px dashed var(--c-border); padding-top: 6px; display: flex; flex-direction: column; gap: 3px; }
.rst__call { display: grid; grid-template-columns: auto 1fr auto; gap: 6px; align-items: center; border: 1px solid var(--c-border); border-radius: var(--radius);
    background: var(--c-surface-2); padding: 3px 6px; font: inherit; color: var(--c-text); cursor: pointer; text-align: start; }
.rst__call:disabled { cursor: default; opacity: .7; }
.rst__families { display: flex; gap: 4px; flex-wrap: wrap; flex: none; }
.rst__head { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 12px; flex: none; }
.rst__who { display: inline-flex; align-items: center; gap: 4px; color: var(--c-muted); }
.rst__lines { flex: 1 1 auto; min-height: 6rem; overflow: auto; }
.rst__row--temp td { background: var(--c-warn-soft); }
.rst__state { display: inline-block; padding: 0 6px; border-radius: 9px; font-size: var(--fs-small); background: var(--c-surface-2); }
.rst__state--1 { background: var(--c-warn-soft); color: var(--c-warn); }
.rst__state--2 { background: var(--c-info-soft); color: var(--c-info); }
.rst__state--3 { background: var(--c-in-soft); color: var(--c-in); }
.rst__totals { display: flex; flex-wrap: wrap; align-items: end; justify-content: space-between; gap: 8px 16px; flex: none; }
.rst__discount { display: flex; gap: 8px; flex-wrap: wrap; }
.rst__discount > .p-field { flex: 0 1 11rem; }
.rst__payable { display: flex; flex-direction: column; align-items: end; font-size: var(--fs-title); font-weight: 700; }
.rst__payable > span { font-size: var(--fs-small); color: var(--c-muted); font-weight: 400; }
.rst__tiles { display: grid; grid-template-columns: repeat(auto-fill, minmax(118px, 1fr)); gap: 6px; align-content: start; }
.rst__tile { min-height: 56px; border: 1px solid var(--c-border); border-radius: var(--radius); background: var(--c-surface-2); color: var(--c-text);
    cursor: pointer; font: inherit; padding: 4px 6px; display: flex; flex-direction: column; justify-content: space-between; gap: 2px; text-align: start; }
.rst__tile:hover { background: var(--c-hover); border-color: var(--c-primary); }
.rst__tile:disabled { opacity: .5; cursor: not-allowed; }
.rst__tile--composite { border-style: dashed; border-color: var(--c-accent); }
.rst__tile-title { font-weight: 600; overflow-wrap: anywhere; }
.rst__tile-price { font-size: var(--fs-small); color: var(--c-muted); align-self: end; }
.rst__dot { display: inline-block; width: 7px; height: 7px; border-radius: 50%; background: var(--c-warn); }
.rst__chips { display: flex; flex-wrap: wrap; gap: 6px; flex: none; }
.rst__chip { display: inline-flex; align-items: center; border: 1px solid var(--c-border); border-radius: var(--radius); background: var(--c-surface-2);
    padding: 0; font: inherit; color: var(--c-text); cursor: pointer; }
button.rst__chip { padding: 3px 10px; gap: 6px; }
.rst__chip--on { border-color: var(--c-primary); box-shadow: 0 0 0 1px var(--c-primary); }
.rst__chip--off { opacity: .6; }
.rst__chip-btn, .rst__chip-act { border: 0; background: transparent; font: inherit; color: inherit; cursor: pointer; padding: 3px 6px; display: inline-flex; align-items: center; gap: 6px; }
.rst__chip-act { color: var(--c-muted); }
.rst__chip-act:hover { color: var(--c-text); }
.rst__row--dirty td { background: var(--c-warn-soft); }
.rst__price .p-field { min-width: 8rem; }
.rst__products-table { max-height: 60vh; overflow: auto; }
.rst__composite-body { display: grid; grid-template-columns: minmax(220px, 1fr) minmax(320px, 1.3fr); gap: 10px; }
.rst__composite-body .rst__menu { max-height: 60vh; }
.rst__line-title { font-size: var(--fs-title); }
.rst__orders { flex: 1 1 auto; min-height: 0; display: grid; grid-template-columns: minmax(0, 1.8fr) minmax(260px, 1fr); gap: 8px; }
.rst__detail { min-height: 0; overflow: auto; background: var(--c-surface); border: 1px solid var(--c-border); border-radius: var(--radius); padding: 8px; }
@media (max-width: 1100px) {
    .rst__body { grid-template-columns: 1fr 1fr; overflow: auto; }
    .rst__menu { grid-column: 1 / -1; }
    .rst__orders, .rst__composite-body { grid-template-columns: 1fr; }
}
@media (max-width: 700px) {
    .rst__body { grid-template-columns: 1fr; }
}

/* اپ گارسون (P11.6d): موبایل‌اول، دکمه‌های بزرگ لمسی */
.wtr { display: flex; flex-direction: column; min-height: 100dvh; background: var(--c-bg); }
.wtr__bar { position: sticky; top: 0; z-index: 2; display: flex; align-items: center; gap: 8px; padding: 8px 10px;
    background: var(--c-header); color: var(--c-header-fg); }
.wtr__title { font-size: var(--fs-title); }
.wtr__grow { flex: 1; }
.wtr__icon { min-width: 40px; min-height: 40px; border: 0; border-radius: var(--radius); background: transparent; color: inherit; cursor: pointer;
    display: inline-flex; align-items: center; justify-content: center; font: inherit; }
.wtr__icon:disabled { opacity: .4; }
.wtr__pad { padding: 6px 10px; }
.wtr__tables { grid-template-columns: repeat(auto-fill, minmax(96px, 1fr)); }
.wtr__tables .rst__table { min-height: 76px; }
.wtr__switch { display: flex; gap: 6px; }
.wtr__switch .rst__tab { flex: 1; justify-content: center; min-height: 40px; }
.wtr__tiles { grid-template-columns: repeat(auto-fill, minmax(130px, 1fr)); padding-bottom: 90px; }
.wtr__tiles .rst__tile { min-height: 72px; position: relative; }
.wtr__badge { position: absolute; inset-block-start: 4px; inset-inline-end: 4px; }
.wtr__lines { list-style: none; margin: 0; padding: 0 10px 90px; display: flex; flex-direction: column; gap: 6px; }
.wtr__line { display: grid; grid-template-columns: 1fr auto; grid-template-areas: "main qty" "main amount"; gap: 2px 8px; align-items: center;
    background: var(--c-surface); border: 1px solid var(--c-border); border-radius: var(--radius); padding: 6px; }
.wtr__line-main { grid-area: main; display: flex; flex-direction: column; align-items: start; gap: 3px; border: 0; background: transparent;
    color: var(--c-text); font: inherit; text-align: start; cursor: pointer; }
.wtr__qty { grid-area: qty; display: inline-flex; align-items: center; gap: 4px; }
.wtr__qty .wtr__icon { background: var(--c-surface-2); color: var(--c-text); border: 1px solid var(--c-border); }
.wtr__amount { grid-area: amount; justify-self: end; color: var(--c-muted); }
.wtr__foot { position: fixed; inset-inline: 0; bottom: 0; z-index: 2; display: flex; align-items: center; gap: 8px; padding: 8px 10px;
    background: var(--c-surface); border-top: 1px solid var(--c-border); box-shadow: 0 -2px 8px var(--c-shadow); }
.wtr__total { flex: 1; display: flex; flex-direction: column; font-weight: 700; font-size: var(--fs-title); }
.wtr__total > span { font-size: var(--fs-small); font-weight: 400; color: var(--c-muted); }
.wtr__qr { display: flex; flex-direction: column; align-items: center; gap: 8px; text-align: center; }

/* فرم ردیف فاکتور: F5/F6 فهرست کالا، F7/F9 کاردکس — ProductBrowseDialog و ProductKardexDialog */
.line__tools { display: flex; flex-wrap: wrap; gap: 4px; }
.pbr { display: grid; grid-template-columns: minmax(10rem, 1fr) minmax(10rem, 1fr) minmax(0, 3fr); gap: 8px; min-height: 22rem; max-height: 60vh; }
.pbr__col { display: flex; flex-direction: column; gap: 2px; overflow: auto; min-width: 0; border: 1px solid var(--c-border); border-radius: var(--radius); padding: 4px; }
.pbr__col--wide { padding: 0; }
.pbr__item { display: flex; gap: 6px; align-items: baseline; text-align: start; border: 0; border-radius: var(--radius); background: transparent;
    color: var(--c-text); font: inherit; padding: 4px 6px; cursor: pointer; }
.pbr__item:hover { background: var(--c-surface-2); }
.pbr__item:focus-visible { outline: 2px solid var(--c-focus); outline-offset: -2px; }
.pbr__item--on { background: var(--c-info-soft); font-weight: 600; }
.kdx__table { max-height: 55vh; overflow: auto; }
@media (max-width: 760px) { .pbr { grid-template-columns: 1fr; max-height: none; } }

/* ── پخش مویرگی (P11.8c): ویزیتورها، مسیرها، دیالوگ‌های تخصیص ── */
.dst__seg { display: inline-flex; gap: 4px; flex-wrap: wrap; align-self: flex-end; }
.dst__split { flex: 1 1 auto; min-height: 0; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.15fr); gap: 8px; }
.dst__pane { min-height: 0; display: flex; flex-direction: column; gap: 6px; }
.dst__pane > .lst__table { flex: 1 1 auto; min-height: 0; }
.dst__indent { display: inline-block; padding-inline-start: calc(var(--dst-depth, 0) * 1.1rem); }
.dst__leaf { font-weight: 600; }
.dst__branch { color: var(--c-muted); }
.dst__pick { max-height: 58vh; overflow: auto; }
.dst__row--on td { background: var(--c-info-soft); }
.dst__mono { font-family: var(--font-mono, monospace); font-size: var(--fs-small); }
.dst__perm-actions { display: flex; gap: 6px; margin-block-end: 6px; }
.dst__perms { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 8px; }
.dst__perm-group { border: 1px solid var(--c-border); border-radius: var(--radius); padding: 6px 10px; display: flex; flex-direction: column; gap: 2px; }
.dst__perm-group legend { color: var(--c-muted); font-size: var(--fs-small); padding-inline: 4px; }
.dst__legacy { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: 2px 12px; margin-block-end: 8px; }
@media (max-width: 1000px) { .dst__split { grid-template-columns: 1fr; } }
/* گزارش‌ها و نمودارهای پخش (P11.8d) */
.dst__report { flex: 1 1 auto; min-height: 0; overflow: auto; display: flex; flex-direction: column; gap: 10px; padding-block-end: 8px; }
/* فرزندان ستون پیمایش‌دار کوچک نشوند (کاشی‌های داشبورد پیش‌تر تا چند پیکسل جمع می‌شدند) */
.dst__report > * { flex-shrink: 0; }
.dst__rank { min-width: 0; display: flex; flex-direction: column; gap: 4px; }
.dst__rank .p-table-wrap { max-height: 22rem; overflow: auto; }
.dst__c-progress { width: 22%; min-width: 6rem; }
.dst__target { display: flex; flex-direction: column; gap: 4px; padding: 6px 10px; border: 1px solid var(--c-border); border-radius: var(--radius); }
.dst__details > summary { cursor: pointer; color: var(--c-muted); padding-block: 4px; }
.dst__details[open] > summary { color: inherit; }
.dst__row--loss td { color: var(--c-out); }
.dst__qr { align-items: center; }
/* نقشه‌های پخش (P11.8e) */
.dst__maps { display: grid; grid-template-columns: minmax(0, 1fr) minmax(16rem, 22rem); gap: 8px; block-size: max(26rem, calc(100vh - 16rem)); min-height: 0; }
.dst__map-main { min-height: 0; display: flex; flex-direction: column; }
.dst__map-main > .p-map { flex: 1 1 auto; }
.dst__map-side { min-height: 0; display: flex; flex-direction: column; gap: 6px; overflow: auto; }
.dst__side-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.dst__side-list { flex: 1 1 auto; min-height: 8rem; overflow: auto; }
.dst__side-title { display: flex; align-items: center; gap: 6px; }
.dst__track-kpis { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px; }
.dst__legend { display: inline-flex; align-items: center; gap: 4px; color: var(--c-muted); font-size: var(--fs-small); }
.dst__dot { inline-size: 10px; block-size: 10px; border-radius: 50%; background: var(--c-primary); }
.dst__dot--ok { background: var(--c-in); }
.dst__dot--warn { background: var(--c-warn); }
.dst__dot--muted { background: var(--c-muted); }
.dst__dot--info { background: var(--c-info); }
@media (max-width: 1000px) { .dst__maps { grid-template-columns: 1fr; block-size: auto; } .dst__map-main { block-size: 60vh; } }

/* ---------- نرخ فروش و شرایط فروش (P8.3) ---------- */
.prc__group { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-block: 4px; font-size: var(--fs-small); }
.prc__table .p-table td.prc__edit { background: var(--c-warn-soft); padding-block: 1px; }
.prc__table .p-table td.prc__edit .p-field { margin: 0; }
.prc__edit { min-inline-size: 7.5rem; }
.prc__pct { min-inline-size: 5rem; }
.prc__final { font-weight: 600; color: var(--c-in); }
.prc__checks { display: flex; flex-wrap: wrap; gap: 6px 18px; margin-block: 6px; }
.prc__printpick { display: flex; align-items: center; gap: 6px; margin-block-end: 6px; }
.prc__file { margin-block: 6px; }
.trm__calc { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 6px 14px; padding: 8px; border: 1px solid var(--c-border); border-radius: var(--radius); background: var(--c-surface); }
.trm__calc-result { font-weight: 600; }
.trm__share { display: inline-block; margin-inline-end: 12px; }
.prc__grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr)); gap: 6px 8px; margin-block: 8px; }

/* P13 بهینه‌سازی دیتابیس: ستون‌های INCLUDE بلند در چند خط بشکند تا جدول پهن نشود */
.dbt__inc {
    max-inline-size: 32ch;
    white-space: normal;
    overflow-wrap: anywhere;
}

/* پنل راهنمای F1 از گام Z3a در کتابخانه است (Zana.Blazor: .p-help)؛ این‌جا فقط دکمه راهنمای بالای فرم */
.shell__help { color: var(--c-info); }

/* ── میز کار دو تب و داشبوردهای مدیریتی (P20)، مغایرت‌های مالی با سیستم‌های فرعی (P6.6) — رنگ و اندازه فقط با توکن ── */
.desk__tabs { align-items: center; }
.desk__tabs .rep__tab { display: inline-flex; align-items: center; gap: 6px; }
.desk__tabs-gap { flex: 1 1 auto; }
.mdash { display: flex; flex-direction: column; gap: 10px; }
.mdash__filter { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 8px 14px; }
.mdash__branches { min-width: 14rem; }
.mdash__body { display: flex; flex-direction: column; gap: 10px; }
.mdash__grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 420px), 1fr)); gap: 10px; align-items: start; }
.mdash__card { background: var(--c-surface); border: 1px solid var(--c-border); border-radius: var(--radius); padding: 10px 12px; min-width: 0; }
.mdash__card--wide { grid-column: 1 / -1; }
.mdash__head { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; flex-wrap: wrap; }
.mdash__head b { flex: 1 1 auto; }
.mdash__tools { display: inline-flex; gap: 4px; }
.mdash__tool { display: inline-flex; align-items: center; gap: 4px; border: 1px solid var(--c-border); background: var(--c-surface); color: var(--c-label);
    border-radius: var(--radius); padding: 1px 6px; font-size: var(--fs-small); cursor: pointer; }
.mdash__tool:hover, .mdash__tool:focus-visible { background: var(--c-hover); color: var(--c-text); }
.mdash__tool[aria-pressed="true"] { border-color: var(--c-primary); color: var(--c-primary); }
.mdash__scroll { max-height: 360px; overflow: auto; }
.mdash__kpi:disabled { cursor: default; }
.mdash__chg { display: inline-flex; align-items: center; gap: 2px; font-size: var(--fs-small); font-variant-numeric: tabular-nums; }
.mdash__chg--good { color: var(--c-in); }
.mdash__chg--bad { color: var(--c-out); }
.mdash__recon { display: flex; flex-direction: column; gap: 6px; }
.mdash__recon-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 190px), 1fr)); gap: 8px; }
.mdash__rcard { display: flex; flex-direction: column; align-items: flex-start; gap: 2px; text-align: start; cursor: pointer; border-radius: var(--radius);
    border: 1px solid var(--c-border); border-inline-start: 4px solid var(--rc, var(--c-border)); background: var(--c-surface); color: var(--c-text); padding: 6px 10px; }
.mdash__rcard:hover, .mdash__rcard:focus-visible { background: var(--c-hover); }
.mdash__rcard b { color: var(--rc, var(--c-text)); }
.mdash__rcard--ok { --rc: var(--c-in); }
.mdash__rcard--warn { --rc: var(--c-warn); }
.mdash__rcard--bad { --rc: var(--c-out); }
.mdash__rcard--off { --rc: var(--c-border); cursor: default; color: var(--c-muted); }
.mdash__rcard--on { box-shadow: inset 0 0 0 1px var(--rc, var(--c-primary)); }
.mdash__rcard-title { font-size: var(--fs-small); color: var(--c-label); }
.recon__row--on { background: var(--c-select); }
.recon__ok { color: var(--c-in); display: flex; align-items: center; gap: 6px; }
.recon__note { display: flex; align-items: flex-start; gap: 6px; }

/* ── تراز روزانه / دوره‌ای (P23.1) — رنگ و اندازه فقط از توکن‌ها؛ ویژگی‌های منطقی (راست‌به‌چپ) ── */
.daily__block { display: flex; flex-direction: column; gap: 10px; }
.daily__block + .daily__block { border-block-start: 1px solid var(--c-border); padding-block-start: 10px; }
.daily__block--total { --mc: var(--c-primary); }
.daily__block-title { margin: 0; font-size: var(--fs); color: var(--mc, var(--c-label)); }
.daily__card:focus-visible, .dash__kpis:focus-visible { outline: 2px solid var(--c-primary); outline-offset: 2px; }
.daily__cols { display: grid; grid-template-columns: minmax(0, 3fr) minmax(0, 2fr); gap: 10px; align-items: start; }
@media (max-width: 900px) { .daily__cols { grid-template-columns: minmax(0, 1fr); } }
.daily__side { display: flex; flex-direction: column; gap: 8px; min-width: 0; }
.daily__facts { display: grid; grid-template-columns: max-content minmax(0, 1fr); gap: 2px 10px; margin: 0; align-items: center; }
.daily__facts dt { color: var(--c-label); font-size: var(--fs-small); }
.daily__facts dd { margin: 0; text-align: end; }
.daily__link { border: 0; background: none; padding: 2px 4px; border-radius: var(--radius); cursor: pointer; color: inherit; font: inherit; }
.daily__link:hover, .daily__link:focus-visible { background: var(--c-hover); }
.daily__val { display: inline-flex; flex-direction: column; align-items: flex-end; line-height: 1.25; font-variant-numeric: tabular-nums; }
.daily__prev { display: inline-flex; gap: 6px; align-items: center; color: var(--c-muted); font-size: var(--fs-small); }
.daily__sub td { color: var(--c-label); font-size: var(--fs-small); }
.daily__sub td:first-child { padding-inline-start: 18px; }
.daily__cards { margin-block-start: 8px; }
.daily__more { margin-block-start: 6px; }

/* ── گزارش‌های تحلیلی و مدیریتی (P20-R) — رنگ فقط از توکن‌ها ── */
.anl__late { color: var(--c-out); }
.anl__z { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; margin: 4px 0; }
.anl__cls { display: inline-block; min-width: 1.6em; text-align: center; border-radius: var(--radius); font-weight: 600; padding: 0 4px; }
.anl__cls--A { background: var(--c-in-soft); color: var(--c-in); }
.anl__cls--B { background: var(--c-warn-soft, var(--c-surface-2)); color: var(--c-warn); }
.anl__cls--C { background: var(--c-surface-2); color: var(--c-muted); }
.anl__heatwrap { overflow-x: auto; }
.anl__heat th[scope="row"] { white-space: nowrap; text-align: start; }
.anl__heat .anl__cell { background: color-mix(in srgb, var(--c-primary) calc(var(--anl-heat, 0) * 100%), transparent); min-width: 3.2em; }

/* ── صورت‌های مالی و گزارش‌های حسابرسی (ماژول finstatements) ─────────────────── */
.fin__head { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; margin: 4px 0; }
.fin__table td.fin__cap { padding-inline-start: calc(0.5em + var(--fin-level, 0) * 1.25em); }
.fin__lines td.fin__cap { padding-inline-start: calc(0.5em + var(--fin-level, 0) * 1em); }
.fin__row--bold td { font-weight: 700; }
.fin__row--header td { font-weight: 700; color: var(--c-label); background: var(--c-surface-2); }
.fin__row--detail td { color: var(--c-muted); font-size: var(--fs-small); }
.fin__row--review td:first-child { box-shadow: inset -3px 0 0 var(--c-warn); }
[dir="ltr"] .fin__row--review td:first-child { box-shadow: inset 3px 0 0 var(--c-warn); }
.fin__amt { cursor: pointer; font-variant-numeric: tabular-nums; }
.fin__amt:focus-visible { outline: 2px solid var(--c-focus); outline-offset: -2px; }
.fin__neg { color: var(--c-out); }
.fin__group { text-align: center; }
.fin__note { text-align: center; }
.fin__notelink { border: 0; background: none; color: var(--c-primary); cursor: pointer; text-decoration: underline; font: inherit; }
.fin__formula { font-family: ui-monospace, Consolas, monospace; }
.fin__val { display: flex; flex-direction: column; gap: 6px; margin-top: 8px; padding: 8px 10px; border: 1px solid var(--c-border); border-radius: var(--radius);
    background: var(--c-surface); }
.fin__val h3, .fin__val h4, .fin__preview h3 { margin: 4px 0; }
.fin__ok { color: var(--c-in); }
.fin__bad { color: var(--c-out); }
.fin__issues { margin: 0; padding-inline-start: 1.2em; display: flex; flex-direction: column; gap: 2px; }
.fin__design { display: grid; grid-template-columns: minmax(220px, 1fr) minmax(0, 3fr); gap: 10px; align-items: start; }
@media (max-width: 1100px) { .fin__design { grid-template-columns: 1fr; } }
.fin__pane { min-width: 0; display: flex; flex-direction: column; gap: 6px; }
.fin__list .p-table-wrap { max-height: 70vh; overflow: auto; }
.fin__lines { max-height: 40vh; overflow: auto; }
.fin__fields { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 200px), 1fr)); gap: 6px 10px; align-items: end; }
.fin__editor { border: 1px solid var(--c-border); border-radius: var(--radius); padding: 6px 10px; display: flex; flex-direction: column; gap: 6px; }
.fin__columns summary { cursor: pointer; color: var(--c-label); }
.fin__preview { display: flex; flex-direction: column; gap: 6px; }
.fin__map { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 10px; }
@media (max-width: 900px) { .fin__map { grid-template-columns: 1fr; } }
.fin__accounts { max-height: 50vh; overflow: auto; }
.fin__quick { display: flex; flex-wrap: wrap; gap: 4px; align-items: center; }
.fin__audit { display: grid; grid-template-columns: minmax(180px, 220px) minmax(0, 1fr); gap: 10px; align-items: start; }
@media (max-width: 900px) { .fin__audit { grid-template-columns: 1fr; } }
.fin__kinds { display: flex; flex-direction: column; gap: 2px; }
.fin__kind { text-align: start; border: 1px solid transparent; border-radius: var(--radius); background: none; color: var(--c-text); padding: 4px 8px; cursor: pointer; }
.fin__kind:hover, .fin__kind:focus-visible { background: var(--c-hover); }
.fin__kind--on { border-color: var(--c-primary); color: var(--c-primary); background: var(--c-select); }
.fin__auditbody { min-width: 0; display: flex; flex-direction: column; gap: 6px; }

/* ---------- P21: سال‌های مالی — سال‌ها کنار هم ---------- */
.ycmp th, .ycmp td { white-space: nowrap; }
.ycmp__chg { font-weight: 600; font-variant-numeric: tabular-nums; }
.ycmp__chg--up { color: var(--c-in); }
.ycmp__chg--down { color: var(--c-out); }
.ycmp__cell { border: 0; background: none; font: inherit; color: inherit; cursor: pointer; padding: 0 2px; border-radius: 3px; font-variant-numeric: tabular-nums; }
.ycmp__cell:hover { background: var(--c-select); color: var(--c-primary); }
.ycmp__cell:focus-visible { outline: 2px solid var(--c-focus); }

/* P5.4 — جابه‌جایی بین انبارها و کارتابل دریافت */
.whtr__count { display: inline-flex; align-items: center; justify-content: center; min-inline-size: 1.4em; margin-inline-start: 6px; padding-inline: 4px;
    border-radius: 999px; background: var(--c-out); color: var(--c-accent-fg); font-size: var(--fs-small); font-weight: 700; }
.whtr__cards { margin-block: 8px; }
.whtr__card { all: unset; box-sizing: border-box; cursor: pointer; display: flex; flex-direction: column; gap: 2px; padding: 8px 12px;
    border: 1px solid var(--c-border); border-radius: var(--radius); background: var(--c-surface); }
.whtr__card:hover, .whtr__card:focus-visible { border-color: var(--c-accent); outline: none; }
.whtr__card--on { border-color: var(--c-accent); box-shadow: inset 0 0 0 1px var(--c-accent); background: var(--c-select); }
.whtr__dir { vertical-align: middle; }
.whtr__dir--out { color: var(--c-warn); }
.whtr__dir--in { color: var(--c-in); }
.whtr__head { display: flex; flex-wrap: wrap; gap: 6px 18px; margin-block: 6px 10px; }
.p-table tr.whtr__row--short td { background: var(--c-out-soft); }
.p-table tr.whtr__row--over td { background: var(--c-info-soft); }
