/* ================================================================
   KAYANAC DESIGN SYSTEM  ·  v1  ·  design-system.css
   ----------------------------------------------------------------
   هوية موحّدة: أحمر (هوية) + كحلي (هيكل) + رمادي دافئ (محتوى).
   خلفية بيضا. الوضع: Light فقط حالياً — مُهيّأ للـ Dark مستقبلاً.

   طريقة التطبيق (opt-in آمن):
     1) ضع الكلاس  ks-scope  على <body> في الصفحة المطلوبة فقط:
          <script>document.body.classList.add('ks-scope')</script>
        (يفعّل سكين الحقول و select2 والجداول على هذه الصفحة فقط)
     2) استخدم مكوّنات  .ks-*  في الماركب.
   باقي النظام لا يتأثر إطلاقاً (كل شيء إمّا متغيّر، إمّا بادئة ks-،
   إمّا مقيّد داخل body.ks-scope).

   الوضع الليلي مستقبلاً = بلوك واحد فقط، دون لمس أي مكوّن:
     :root[data-theme="dark"]{ --bg:#1a1717; --ink:#f2efed; --surface:#232020; ... }
   لا تضف @media(prefers-color-scheme:dark) قبل أن يصبح النظام جاهزاً.
   ================================================================ */

:root{
  /* ---- Brand (من شعار كيانك) ---- */
  --ks-brand:#ed1c24;
  --ks-brand-strong:#c1121f;
  --ks-brand-deep:#791c24;
  --ks-brand-soft:#fdecec;
  --ks-brand-grad:linear-gradient(120deg,#791c24 0%,#c1121f 48%,#ed1c24 100%);

  /* ---- Navy chrome (الهيكل: سايدبار/توبار/فوتر) ---- */
  --ks-navy:#1b2233;
  --ks-navy-2:#232c40;
  --ks-navy-3:#2a344c;
  --ks-navy-line:#2f3a56;
  --ks-navy-ink:#eef1f8;
  --ks-navy-muted:#98a2bd;

  /* ---- Neutrals (رمادي دافئ) — الخلفية بيضا ---- */
  --ks-bg:#ffffff;
  --ks-surface:#ffffff;
  --ks-surface-2:#f7f6f5;   /* لمسة خفيفة: حقول ورؤوس جداول */
  --ks-ink:#2d2d2d;
  --ks-ink-2:#514d49;
  --ks-muted:#6f6a66;
  --ks-faint:#a5a09b;
  --ks-line:#e8e4e1;
  --ks-line-2:#f1eeeb;

  /* ---- Semantic ---- */
  --ks-ok:#16a34a;      --ks-ok-soft:#e6f6ec;
  --ks-warn:#d97706;    --ks-warn-soft:#fdf1dd;
  --ks-danger:#dc2626;  --ks-danger-soft:#fdeaea;
  --ks-info:#2563eb;    --ks-info-soft:#e8effd;

  /* ---- Elevation ---- */
  --ks-shadow-sm:0 1px 2px rgba(40,30,28,.06),0 1px 3px rgba(40,30,28,.05);
  --ks-shadow:0 2px 6px rgba(40,30,28,.06),0 10px 26px rgba(40,30,28,.08);
  --ks-shadow-lg:0 14px 44px rgba(40,30,28,.16);
  --ks-ring:0 0 0 3px rgba(237,28,36,.18);
  --ks-ring-navy:0 0 0 3px rgba(27,34,51,.18);

  /* ---- Shape ---- */
  --ks-r:14px; --ks-r-sm:10px; --ks-r-xs:8px; --ks-r-pill:999px;

  /* ---- Spacing scale (4px) ---- */
  --ks-1:4px; --ks-2:8px; --ks-3:12px; --ks-4:16px; --ks-5:20px; --ks-6:24px; --ks-8:32px;

  /* ---- Type ---- */
  --ks-font:"Tajawal","Cairo",system-ui,"Segoe UI",Tahoma,sans-serif;
  --ks-mono:ui-monospace,"Cascadia Code","SF Mono",Menlo,monospace;

  /* ---- Motion / z ---- */
  --ks-t:.16s cubic-bezier(.4,0,.2,1);
  --ks-z-side:1030; --ks-z-top:1020; --ks-z-modal:1060; --ks-z-toast:1080;
}

/* ================================================================
   BASE (مقيّد على الصفحات المفعّلة فقط)
   ================================================================ */
body.ks-scope{ background:var(--ks-bg); }
.ks-scope .ks-num,
.ks-num{ font-variant-numeric:tabular-nums; font-feature-settings:"tnum"; }
.ks-mono{ font-family:var(--ks-mono); font-variant-numeric:tabular-nums; }

/* حاوية الصفحة */
.ks-page{ padding:var(--ks-5); }
@media(max-width:768px){ .ks-page{ padding:var(--ks-4) var(--ks-3); } }

/* ================================================================
   PAGE HEADER + BREADCRUMB
   ================================================================ */
.ks-crumbs{ display:flex; align-items:center; gap:6px; flex-wrap:wrap;
  font-size:12.5px; color:var(--ks-muted); font-weight:600; margin-bottom:var(--ks-3); }
.ks-crumbs a{ color:var(--ks-muted); text-decoration:none; transition:color var(--ks-t); }
.ks-crumbs a:hover{ color:var(--ks-brand); }
.ks-crumbs .sep{ color:var(--ks-faint); }
.ks-crumbs .cur{ color:var(--ks-ink); font-weight:700; }

/* كسوة breadcrumb الخاص بـ Bootstrap داخل الصفحات المفعّلة */
body.ks-scope .breadcrumb{ background:transparent; padding:0; margin-bottom:10px; font-size:12.5px; font-weight:600; }
body.ks-scope .breadcrumb-item a{ color:var(--ks-muted); text-decoration:none; transition:color var(--ks-t); }
body.ks-scope .breadcrumb-item a:hover{ color:var(--ks-brand); }
body.ks-scope .breadcrumb-item.active{ color:var(--ks-ink); font-weight:700; }

.ks-page-head{ display:flex; align-items:flex-start; gap:var(--ks-4); flex-wrap:wrap; margin-bottom:var(--ks-5); }
.ks-page-head .ks-ph-ic{ width:52px; height:52px; border-radius:var(--ks-r-sm); flex:none;
  display:grid; place-items:center; color:#fff; font-size:22px; background:var(--ks-brand-grad);
  box-shadow:0 6px 16px rgba(237,28,36,.28); }
.ks-page-head h1{ font-size:22px; font-weight:800; letter-spacing:-.01em; margin:0; color:var(--ks-ink); }
.ks-page-head p{ color:var(--ks-muted); font-size:13px; margin:3px 0 0; max-width:60ch; }
.ks-page-head .ks-ph-actions{ margin-inline-start:auto; display:flex; gap:var(--ks-2); flex-wrap:wrap; }

/* ================================================================
   CARD / PANEL / SECTION
   ================================================================ */
.ks-card{ background:var(--ks-surface); border:1px solid var(--ks-line);
  border-radius:var(--ks-r); box-shadow:var(--ks-shadow-sm); }
.ks-card--flat{ box-shadow:none; }
.ks-card__head{ display:flex; align-items:center; gap:var(--ks-3);
  padding:var(--ks-4) var(--ks-5); border-bottom:1px solid var(--ks-line-2); }
.ks-card__head h3{ font-size:15px; font-weight:800; margin:0; color:var(--ks-ink); }
.ks-card__head .sub{ font-size:12px; color:var(--ks-faint); font-weight:500; }
.ks-card__head .actions{ margin-inline-start:auto; display:flex; gap:var(--ks-2); }
.ks-card__body{ padding:var(--ks-5); }

/* عنوان قسم داخلي بشريط أحمر */
.ks-section-title{ display:flex; align-items:center; gap:var(--ks-2);
  font-size:14px; font-weight:800; color:var(--ks-ink); margin:0 0 var(--ks-4);
  padding-inline-start:var(--ks-3); border-inline-start:3px solid var(--ks-brand);
  line-height:1.3; }
.ks-section-title i,.ks-section-title .ico{ color:var(--ks-brand); font-size:15px; }
.ks-section-title .sub{ font-size:12px; font-weight:500; color:var(--ks-faint); margin-inline-start:auto; }

/* بانر رأس (بديل invoice-header القديم) */
.ks-banner{ position:relative; overflow:hidden; border-radius:var(--ks-r);
  background:var(--ks-brand-grad); color:#fff; padding:var(--ks-6);
  box-shadow:0 10px 30px rgba(121,28,36,.25); display:flex; align-items:center; gap:var(--ks-4); }
.ks-banner::after{ content:""; position:absolute; inset-inline-start:-40px; bottom:-70px;
  width:200px; height:200px; border-radius:50%; background:rgba(255,255,255,.08); }
.ks-banner .ks-banner-ic{ width:56px; height:56px; border-radius:16px; flex:none; position:relative;
  display:grid; place-items:center; font-size:26px; background:rgba(255,255,255,.16);
  border:1px solid rgba(255,255,255,.22); }
.ks-banner h1{ font-size:22px; font-weight:800; margin:0; position:relative; }
.ks-banner p{ margin:3px 0 0; opacity:.9; font-size:13px; position:relative; }

/* ================================================================
   BUTTONS
   ================================================================ */
.ks-btn{ display:inline-flex; align-items:center; justify-content:center; gap:var(--ks-2);
  border:1px solid transparent; border-radius:var(--ks-r-xs); padding:9px 16px;
  font-family:inherit; font-weight:700; font-size:13.5px; line-height:1; cursor:pointer;
  transition:background var(--ks-t),border-color var(--ks-t),color var(--ks-t),box-shadow var(--ks-t),transform var(--ks-t);
  white-space:nowrap; text-decoration:none; }
.ks-btn:active{ transform:translateY(1px); }
.ks-btn:focus-visible{ outline:none; box-shadow:var(--ks-ring); }
.ks-btn i,.ks-btn svg{ font-size:15px; }
.ks-btn svg{ width:16px; height:16px; }

.ks-btn--primary{ background:var(--ks-brand); color:#fff; box-shadow:0 4px 12px rgba(237,28,36,.24); }
.ks-btn--primary:hover{ background:var(--ks-brand-strong); color:#fff; }
.ks-btn--soft{ background:var(--ks-brand-soft); color:var(--ks-brand-strong); }
.ks-btn--soft:hover{ background:var(--ks-brand); color:#fff; }
.ks-btn--ghost{ background:var(--ks-surface); border-color:var(--ks-line); color:var(--ks-ink); }
.ks-btn--ghost:hover{ border-color:var(--ks-brand); color:var(--ks-brand); background:var(--ks-brand-soft); }
.ks-btn--ok{ background:var(--ks-ok); color:#fff; }
.ks-btn--ok:hover{ filter:brightness(.94); color:#fff; }
.ks-btn--ok-soft{ background:var(--ks-ok-soft); color:var(--ks-ok); }
.ks-btn--danger{ background:var(--ks-danger); color:#fff; }
.ks-btn--danger:hover{ filter:brightness(.94); color:#fff; }
.ks-btn--danger-soft{ background:var(--ks-danger-soft); color:var(--ks-danger); }
.ks-btn--danger-soft:hover{ background:var(--ks-danger); color:#fff; }
.ks-btn--navy{ background:var(--ks-navy); color:#fff; }
.ks-btn--navy:hover{ background:var(--ks-navy-2); color:#fff; }
.ks-btn--warn{ background:var(--ks-warn); color:#fff; }
.ks-btn--warn:hover{ filter:brightness(.94); color:#fff; }
.ks-btn--warn-soft{ background:var(--ks-warn-soft); color:var(--ks-warn); }
.ks-btn--warn-soft:hover{ background:var(--ks-warn); color:#fff; }
.ks-btn--info{ background:var(--ks-info); color:#fff; }
.ks-btn--info:hover{ filter:brightness(.94); color:#fff; }
.ks-btn--info-soft{ background:var(--ks-info-soft); color:var(--ks-info); }
.ks-btn--info-soft:hover{ background:var(--ks-info); color:#fff; }

.ks-btn--lg{ padding:12px 22px; font-size:14.5px; }
.ks-btn--sm{ padding:7px 12px; font-size:12.5px; }
.ks-btn--block{ width:100%; }
.ks-btn--icon{ padding:0; width:36px; height:36px; }
.ks-btn:disabled,.ks-btn.is-disabled{ opacity:.55; cursor:not-allowed; }

/* زر أيقونة صغير محايد (تعديل/حذف داخل الجداول) */
.ks-icon-btn{ width:32px; height:32px; border-radius:var(--ks-r-xs); border:1px solid var(--ks-line);
  background:var(--ks-surface); display:inline-grid; place-items:center; color:var(--ks-muted);
  cursor:pointer; transition:all var(--ks-t); }
.ks-icon-btn:hover{ border-color:var(--ks-brand); color:var(--ks-brand); background:var(--ks-brand-soft); }
.ks-icon-btn--danger:hover{ border-color:var(--ks-danger); color:var(--ks-danger); background:var(--ks-danger-soft); }

/* ================================================================
   FORM FIELDS
   ----------------------------------------------------------------
   نُقدّم مكوّن .ks-field الجديد، ونُعيد كسوة عناصر Bootstrap
   الموجودة (.form-control/.form-select/textarea) داخل body.ks-scope
   حتى تتبنّى الشكل الجديد دون تغيير الماركب.
   ================================================================ */
.ks-field{ display:block; margin-bottom:var(--ks-3); }
.ks-field > label,.ks-label{ display:block; font-size:12.5px; font-weight:700;
  color:var(--ks-ink); margin-bottom:6px; }
.ks-field .req,.ks-label .req{ color:var(--ks-danger); margin-inline-start:2px; }
.ks-field .ks-hint{ font-size:11.5px; color:var(--ks-faint); margin-top:5px; }

.ks-control,
body.ks-scope .form-control,
body.ks-scope .form-select,
body.ks-scope textarea.form-control{
  width:100%; border:1px solid var(--ks-line); background-color:var(--ks-surface-2);
  color:var(--ks-ink); border-radius:var(--ks-r-xs); padding:9px 12px;
  font-family:inherit; font-size:13.5px; line-height:1.5; outline:none;
  transition:border-color var(--ks-t),background var(--ks-t),box-shadow var(--ks-t); }
.ks-control::placeholder,
body.ks-scope .form-control::placeholder{ color:var(--ks-faint); }
.ks-control:focus,
body.ks-scope .form-control:focus,
body.ks-scope .form-select:focus,
body.ks-scope textarea.form-control:focus{
  border-color:var(--ks-brand); background-color:var(--ks-surface); box-shadow:var(--ks-ring); }
body.ks-scope .form-control:disabled,
body.ks-scope .form-select:disabled,
body.ks-scope .form-control[readonly]{ background-color:var(--ks-line-2); color:var(--ks-muted); cursor:not-allowed; }
/* داخل input-group: يجب أن يتمدّد الإنبت كـ flex لا أن يأخذ 100% (وإلا تلتفّ العناصر) */
body.ks-scope .input-group > .form-control,
body.ks-scope .input-group > .form-select{ width:1%; flex:1 1 auto; }

/* سهم للـ select الأصلي (native) */
body.ks-scope select.form-select,
.ks-control.ks-select{
  appearance:none; -webkit-appearance:none; cursor:pointer;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%236f6a66' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
  background-repeat:no-repeat; background-position:left 12px center; padding-left:36px; padding-right:12px; }

/* checkbox / radio */
.ks-check{ display:inline-flex; align-items:center; gap:var(--ks-2); cursor:pointer; font-size:13px; font-weight:600; color:var(--ks-ink); }
body.ks-scope .form-check-input:checked,
.ks-check input:checked{ background-color:var(--ks-brand); border-color:var(--ks-brand); }
body.ks-scope .form-check-input:focus,
.ks-check input:focus{ box-shadow:var(--ks-ring); border-color:var(--ks-brand); }

/* toggle switch — keep the switch and its label on one inline row in BOTH
   directions. The bundled Bootstrap is the LTR build, so .form-check-input
   floats left with a negative margin; inside an RTL page that floats the
   switch away and wraps the label underneath it. Flex layout is
   direction-agnostic and drops the float that caused the wrap. */
body.ks-scope .form-check.form-switch{
  display:flex; align-items:center; gap:10px; padding-inline-start:0; }
body.ks-scope .form-check.form-switch .form-check-input{
  float:none; margin:0; flex-shrink:0; cursor:pointer; }
body.ks-scope .form-check.form-switch .form-check-label{ margin:0; cursor:pointer; }

/* حالات تحقق (JS يبدّلها) */
body.ks-scope .border-success{ border-color:var(--ks-ok)!important; box-shadow:0 0 0 3px var(--ks-ok-soft)!important; }
body.ks-scope .border-danger{ border-color:var(--ks-danger)!important; box-shadow:0 0 0 3px var(--ks-danger-soft)!important; }

/* ================================================================
   SELECT2 SKIN (v4.x)  — مقيّد على body.ks-scope
   يُحسّن شكل select2 السيئ الحالي دون لمس أي JS.
   ================================================================ */
body.ks-scope .select2-container--default .select2-selection--single{
  height:40px; border:1px solid var(--ks-line); background:var(--ks-surface-2);
  border-radius:var(--ks-r-xs); display:flex; align-items:center; padding:0 12px;
  transition:border-color var(--ks-t),box-shadow var(--ks-t),background var(--ks-t); }
body.ks-scope .select2-container--default:not(.select2-container--disabled):not(.select2-container--open) .select2-selection--single:hover{
  border-color:var(--ks-faint); background:var(--ks-surface); }
body.ks-scope .select2-container--default .select2-selection--single .select2-selection__rendered{
  color:var(--ks-ink); line-height:38px; padding:0; font-size:13.5px; font-weight:600; }
body.ks-scope .select2-container--default .select2-selection--single .select2-selection__placeholder{
  color:var(--ks-faint); font-weight:500; }
body.ks-scope .select2-container--default .select2-selection--single .select2-selection__arrow{
  height:100%; top:0; inset-inline-start:auto; inset-inline-end:10px; }
body.ks-scope .select2-container--default .select2-selection--single .select2-selection__arrow b{
  border-color:var(--ks-muted) transparent transparent; }
body.ks-scope .select2-container--default.select2-container--open .select2-selection__arrow b{
  border-color:transparent transparent var(--ks-brand); }
body.ks-scope .select2-container--default.select2-container--open .select2-selection--single,
body.ks-scope .select2-container--default.select2-container--focus .select2-selection--single{
  border-color:var(--ks-brand); background:var(--ks-surface); box-shadow:var(--ks-ring); }
body.ks-scope .select2-container--default .select2-selection--single .select2-selection__clear{
  color:var(--ks-faint); font-weight:400; font-size:17px; line-height:1; margin-inline-start:6px; }
body.ks-scope .select2-container--default .select2-selection--single .select2-selection__clear:hover{ color:var(--ks-danger); }

/* multiple */
body.ks-scope .select2-container--default .select2-selection--multiple{
  min-height:40px; border:1px solid var(--ks-line); background:var(--ks-surface-2); border-radius:var(--ks-r-xs); }
body.ks-scope .select2-container--default .select2-selection--multiple .select2-selection__choice{
  background:var(--ks-brand-soft); border:1px solid transparent; color:var(--ks-brand-strong);
  border-radius:var(--ks-r-xs); padding:2px 8px; font-size:12px; font-weight:700; }

/* dropdown (يُلحق بالـ body — لذلك يُقيّد بـ body.ks-scope) */
body.ks-scope .select2-dropdown,
body.ks-scope.select2-dropdown{ border:1px solid var(--ks-line); border-radius:var(--ks-r-sm);
  box-shadow:var(--ks-shadow); background:var(--ks-surface); overflow:hidden; }
body.ks-scope .select2-search--dropdown{ padding:8px; }
body.ks-scope .select2-search--dropdown .select2-search__field{
  border:1px solid var(--ks-line); border-radius:var(--ks-r-xs); padding:8px 10px;
  background:var(--ks-surface-2); color:var(--ks-ink); font-family:inherit; font-size:13px; outline:none; }
body.ks-scope .select2-search--dropdown .select2-search__field:focus{
  border-color:var(--ks-brand); box-shadow:var(--ks-ring); background:var(--ks-surface); }
body.ks-scope .select2-results > .select2-results__options{ padding:5px; }
body.ks-scope .select2-results__option{ padding:9px 11px; margin:1px 0; border-radius:var(--ks-r-xs);
  font-size:13px; color:var(--ks-ink); transition:background var(--ks-t),color var(--ks-t); }
body.ks-scope .select2-results__option--highlighted[aria-selected],
body.ks-scope .select2-container--default .select2-results__option--highlighted[aria-selected]{
  background:var(--ks-brand-soft); color:var(--ks-brand-strong); }
body.ks-scope .select2-container--default .select2-results__option[aria-selected=true]{
  background:var(--ks-brand); color:#fff; }
body.ks-scope .select2-results__message{ color:var(--ks-muted); padding:10px 12px; font-size:13px; }
body.ks-scope .select2-results__option .select2-results__group{ color:var(--ks-faint); font-weight:700; font-size:12px; }

/* حاوية الحقل اللي القايمة بتترسم جوّها (`dropdownParent`).
   🔴 ليه لازم `position:relative` مش أي حاجة تانية — من كود select2 4.0.8:
       var p = this.$dropdownParent;
       if ("static" === p.css("position")) p = p.offsetParent();
       var h = p.offset(); d.top -= h.top; d.left -= h.left;
   `jQuery.offsetParent()` بيمشي على `position` بس، لكن المتصفح بيعتبر أي أب فيه
   `transform`/`filter`/`backdrop-filter`/`perspective` حاوية حتى لو `static`. لما
   الاتنين يختلفوا بتتطرح إزاحة عنصر غير اللي المتصفح بيحسب منه ⇒ القايمة تتزاح
   بمقدار إزاحة الأب المتحوَّل. خلّي الحاوية `relative` فالاتنين يتطابقوا.

   🔴 وليه هنا مش جوّه `<style>` في `x-ks.select2-init`: الكلاس ده بتضيفه كمان شاشات
   بتهيّئ select2 بنفسها (صفوف بتتولد بعد التحميل) وماعندهاش الوسم — فكانت بتاخد
   الكلاس بلا ستايل والعطل يرجع صامت. الستايل المشترك مكانه هنا. */
body.ks-scope .ks-s2-host{ position:relative; }
body.ks-scope .ks-s2-host > .select2-container{ width:100% !important; }
body.ks-scope .ks-s2-host .select2-dropdown{ width:100% !important; z-index:1060; }

/* ================================================================
   TABLE
   ================================================================ */
.ks-table-wrap{ overflow-x:auto; border:1px solid var(--ks-line); border-radius:var(--ks-r-sm); }
.ks-table{ width:100%; border-collapse:collapse; font-size:13px; }
.ks-table thead th{ background:var(--ks-surface-2); color:var(--ks-muted); font-weight:700;
  text-align:start; padding:11px 14px; border-bottom:1px solid var(--ks-line); font-size:12px;
  white-space:nowrap; position:sticky; top:0; z-index:1; }
.ks-table tbody td{ padding:10px 14px; border-bottom:1px solid var(--ks-line-2); color:var(--ks-ink); vertical-align:middle; }
.ks-table tbody tr{ transition:background var(--ks-t); }
.ks-table tbody tr:hover{ background:var(--ks-brand-soft); }
.ks-table tbody tr:last-child td{ border-bottom:none; }
.ks-table tfoot td{ background:var(--ks-surface-2); font-weight:800; border-top:2px solid var(--ks-line); padding:11px 14px; }
.ks-table .ks-num,.ks-table td.num{ font-variant-numeric:tabular-nums; font-family:var(--ks-mono); }

/* ================================================================
   PAGINATION  (مكوّن + كسوة DataTables داخل body.ks-scope)
   ================================================================ */
.ks-pager{ display:flex; gap:6px; align-items:center; flex-wrap:wrap; }
.ks-pager a,.ks-pager button,.ks-pager span{ min-width:34px; height:34px; padding:0 11px;
  display:inline-flex; align-items:center; justify-content:center; border:1px solid var(--ks-line);
  border-radius:var(--ks-r-xs); color:var(--ks-muted); font-weight:700; font-size:13px; cursor:pointer;
  background:var(--ks-surface); transition:all var(--ks-t); text-decoration:none; }
.ks-pager a:hover{ border-color:var(--ks-brand); color:var(--ks-brand); background:var(--ks-brand-soft); }
.ks-pager .active,.ks-pager .current{ background:var(--ks-brand); border-color:var(--ks-brand); color:#fff;
  box-shadow:0 4px 10px rgba(237,28,36,.28); }
.ks-pager .disabled{ opacity:.45; pointer-events:none; }

/* DataTables paginate (للصفحات المفعّلة) */
body.ks-scope .dataTables_wrapper .dataTables_paginate .paginate_button{
  border:1px solid var(--ks-line)!important; border-radius:var(--ks-r-xs)!important;
  background:var(--ks-surface)!important; color:var(--ks-muted)!important; padding:6px 12px!important;
  margin:0 2px!important; transition:all var(--ks-t); }
body.ks-scope .dataTables_wrapper .dataTables_paginate .paginate_button:hover{
  border-color:var(--ks-brand)!important; color:var(--ks-brand)!important;
  background:var(--ks-brand-soft)!important; }
body.ks-scope .dataTables_wrapper .dataTables_paginate .paginate_button.current,
body.ks-scope .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{
  background:var(--ks-brand)!important; border-color:var(--ks-brand)!important; color:#fff!important; }
body.ks-scope .dataTables_wrapper .dataTables_length select,
body.ks-scope .dataTables_wrapper .dataTables_filter input{
  border:1px solid var(--ks-line); border-radius:var(--ks-r-xs); padding:6px 10px; outline:none; }
body.ks-scope .dataTables_wrapper .dataTables_filter input:focus{ border-color:var(--ks-brand); box-shadow:var(--ks-ring); }

/* ---- كسوة جدول DataTables كامل (نفس مظهر ثيم Tabulator) ----
   يخلّي أي DataTable على صفحة .ks-scope يبان عصري: رأس هادي بلا فواصل رأسية،
   صفوف واسعة بـhover وردي خفيف، بلا zebra، أسهم ترتيب بلون البراند. */
body.ks-scope .dataTables_wrapper{ color:var(--ks-ink); }
body.ks-scope .dataTables_wrapper .dataTables_info,
body.ks-scope .dataTables_wrapper .dataTables_length,
body.ks-scope .dataTables_wrapper .dataTables_length label,
body.ks-scope .dataTables_wrapper .dataTables_filter label{ color:var(--ks-muted); font-weight:600; font-size:13px; }
body.ks-scope table.dataTable{ border-collapse:collapse!important; width:100%!important;
  background:var(--ks-surface); color:var(--ks-ink); border:none; margin:0!important; }
/* رأس الجدول */
body.ks-scope table.dataTable thead th,
body.ks-scope table.dataTable thead td{
  background:var(--ks-surface); color:var(--ks-muted)!important; font-weight:700; font-size:12.5px;
  padding:13px 12px!important; text-align:center; white-space:nowrap;
  border:none!important; border-bottom:1px solid var(--ks-line)!important; }
/* خلايا */
body.ks-scope table.dataTable tbody td{
  padding:12px 12px!important; font-size:13.5px; color:var(--ks-ink); vertical-align:middle;
  text-align:center; border:none!important; border-bottom:1px solid #f1efec!important; }
/* بلا zebra + hover وردي خفيف */
body.ks-scope table.dataTable tbody tr{ background:var(--ks-surface)!important; }
body.ks-scope table.dataTable tbody tr:hover td{ background:var(--ks-brand-soft)!important; }
body.ks-scope table.dataTable.stripe tbody tr.odd td,
body.ks-scope table.dataTable.display tbody tr.odd td{ background:transparent!important; }
/* أسهم الترتيب: خافتة، وبلون البراند لما تكون فعّالة */
body.ks-scope table.dataTable thead .sorting::before,
body.ks-scope table.dataTable thead .sorting::after,
body.ks-scope table.dataTable thead .sorting_asc::before,
body.ks-scope table.dataTable thead .sorting_asc::after,
body.ks-scope table.dataTable thead .sorting_desc::before,
body.ks-scope table.dataTable thead .sorting_desc::after{ opacity:.35; color:var(--ks-muted); }
body.ks-scope table.dataTable thead .sorting_asc::before,
body.ks-scope table.dataTable thead .sorting_desc::after{ opacity:1; color:var(--ks-brand); }
/* شيل بوردر Bootstrap-bordered لو الجدول لابسه */
body.ks-scope table.dataTable.table-bordered th,
body.ks-scope table.dataTable.table-bordered td{ border-inline:none!important; }

/* ================================================================
   PILLS / BADGES
   ================================================================ */
/* white-space:nowrap مقصود — الـ pill غالبًا جوّه خلية جدول، ومن غيره النص
   بيتلف أو يتقصّ (زي «مقفلة بالكامل» اللي كانت بتبان «مقفلة بالكاد»). */
.ks-pill{ display:inline-flex; align-items:center; gap:5px; padding:3px 11px;
  border-radius:var(--ks-r-pill); font-size:11.5px; font-weight:700; line-height:1.5;
  white-space:nowrap; }
.ks-pill::before{ content:""; width:6px; height:6px; border-radius:50%; background:currentColor; }
.ks-pill--dot-none::before{ display:none; }
.ks-pill--ok{ background:var(--ks-ok-soft); color:var(--ks-ok); }
.ks-pill--warn{ background:var(--ks-warn-soft); color:var(--ks-warn); }
.ks-pill--danger{ background:var(--ks-danger-soft); color:var(--ks-danger); }
.ks-pill--info{ background:var(--ks-info-soft); color:var(--ks-info); }
.ks-pill--brand{ background:var(--ks-brand-soft); color:var(--ks-brand-strong); }
.ks-pill--muted{ background:var(--ks-line-2); color:var(--ks-muted); }

.ks-tag{ display:inline-block; background:var(--ks-surface-2); border:1px solid var(--ks-line);
  border-radius:var(--ks-r-xs); padding:2px 9px; font-size:11.5px; font-weight:600; color:var(--ks-muted); }

/* ================================================================
   KPI / STAT
   ================================================================ */
.ks-kpi{ background:var(--ks-surface); border:1px solid var(--ks-line); border-radius:var(--ks-r);
  padding:16px 17px; box-shadow:var(--ks-shadow-sm); transition:transform var(--ks-t),box-shadow var(--ks-t); }
.ks-kpi:hover{ transform:translateY(-3px); box-shadow:var(--ks-shadow); }
.ks-kpi .ks-kpi-ic{ width:40px; height:40px; border-radius:11px; display:grid; place-items:center; margin-bottom:11px; font-size:19px; }
.ks-kpi .ks-kpi-v{ font-size:25px; font-weight:800; letter-spacing:-.01em; font-variant-numeric:tabular-nums; color:var(--ks-ink); }
.ks-kpi .ks-kpi-l{ color:var(--ks-muted); font-size:12.5px; font-weight:600; margin-top:1px; }
.ks-i-brand{ background:var(--ks-brand-soft); color:var(--ks-brand); }
.ks-i-ok{ background:var(--ks-ok-soft); color:var(--ks-ok); }
.ks-i-warn{ background:var(--ks-warn-soft); color:var(--ks-warn); }
.ks-i-info{ background:var(--ks-info-soft); color:var(--ks-info); }

/* ================================================================
   NOTE / ALERT INLINE
   ================================================================ */
.ks-note{ display:flex; gap:11px; align-items:flex-start; border:1px solid var(--ks-line);
  border-radius:var(--ks-r-sm); padding:12px 14px; font-size:13px; line-height:1.7; color:var(--ks-ink); background:var(--ks-surface-2); }
.ks-note .ks-note-k{ flex:none; }
.ks-note--ok{ background:var(--ks-ok-soft); border-color:transparent; }
.ks-note--warn{ background:var(--ks-warn-soft); border-color:transparent; }
.ks-note--danger{ background:var(--ks-danger-soft); border-color:transparent; }
.ks-note--info{ background:var(--ks-info-soft); border-color:transparent; }
.ks-note + .ks-note{ margin-top:var(--ks-2); }
.ks-note-list{ margin:6px 0 0; padding-inline-start:18px; font-size:12.5px; }
.ks-note-list li{ margin-top:2px; }

/* ================================================================
   TOTALS SUMMARY CHIPS
   ================================================================ */
.ks-totchips{ display:flex; flex-wrap:wrap; gap:var(--ks-3); }
.ks-totchip{ flex:1; min-width:150px; background:var(--ks-surface); border:1px solid var(--ks-line);
  border-radius:var(--ks-r-sm); padding:13px 15px; }
.ks-totchip .l{ font-size:11.5px; color:var(--ks-muted); font-weight:600; }
.ks-totchip .v{ font-size:19px; font-weight:800; margin-top:3px; font-variant-numeric:tabular-nums; color:var(--ks-ink); }
.ks-totchip--brand{ background:var(--ks-brand-grad); border-color:transparent; color:#fff; }
.ks-totchip--brand .l{ color:rgba(255,255,255,.85); }
.ks-totchip--brand .v{ color:#fff; }

/* ================================================================
   NAVY CHROME (سايدبار/توبار/فوتر) — للاستخدام في تخطيط الداشبورد
   ================================================================ */
.ks-sidebar{ background:var(--ks-navy); color:var(--ks-navy-ink); display:flex; flex-direction:column; }
.ks-sidebar .ks-brand{ display:flex; align-items:center; gap:10px; padding:16px 16px 12px; }
.ks-sidebar .ks-brand img{ height:34px; width:auto; }
.ks-nav-group > .ks-nav-h{ font-size:10px; font-weight:700; color:var(--ks-navy-muted);
  text-transform:uppercase; letter-spacing:.09em; padding:14px 16px 6px; }
.ks-nav-item{ display:flex; align-items:center; gap:11px; padding:9px 14px; margin:1px 8px;
  border-radius:var(--ks-r-xs); color:#c3cadd; font-weight:600; font-size:13.5px; text-decoration:none;
  position:relative; transition:background var(--ks-t),color var(--ks-t); }
.ks-nav-item .ks-nav-ic{ width:18px; text-align:center; opacity:.85; flex:none; }
.ks-nav-item:hover{ background:var(--ks-navy-2); color:#fff; }
.ks-nav-item.active{ background:linear-gradient(90deg,rgba(237,28,36,.20),rgba(237,28,36,.04)); color:#fff; }
.ks-nav-item.active .ks-nav-ic{ opacity:1; color:var(--ks-brand); }
.ks-nav-item.active::before{ content:""; position:absolute; inset-inline-start:0; top:7px; bottom:7px;
  width:3px; border-radius:3px; background:var(--ks-brand); }
.ks-nav-item .ks-nav-badge{ margin-inline-start:auto; background:var(--ks-brand); color:#fff;
  font-size:10px; font-weight:700; padding:1px 7px; border-radius:var(--ks-r-pill); }

.ks-topbar{ background:var(--ks-navy); color:#fff; display:flex; align-items:center; gap:14px;
  padding:12px 20px; border-bottom:1px solid var(--ks-navy-line); }
.ks-topbar .ks-tb-crumbs{ font-size:12.5px; color:var(--ks-navy-muted); font-weight:600; }
.ks-topbar .ks-tb-crumbs b{ color:#fff; }
.ks-topbar .spacer{ flex:1; }
.ks-topbar .ks-avatar{ width:34px; height:34px; border-radius:50%; background:var(--ks-brand-grad);
  display:grid; place-items:center; color:#fff; font-weight:700; }

.ks-footer{ background:var(--ks-navy); color:var(--ks-navy-muted); font-size:11.5px;
  padding:12px 20px; text-align:center; border-top:1px solid var(--ks-navy-line); }
.ks-footer b{ color:#fff; }

/* ================================================================
   GRID + UTILITIES (خفيفة، بادئة ks-)
   ================================================================ */
.ks-grid{ display:grid; gap:var(--ks-4); }
.ks-cols-2{ grid-template-columns:repeat(2,1fr); }
.ks-cols-3{ grid-template-columns:repeat(3,1fr); }
.ks-cols-4{ grid-template-columns:repeat(4,1fr); }
@media(max-width:1100px){ .ks-cols-4{ grid-template-columns:repeat(2,1fr); } .ks-cols-3{ grid-template-columns:repeat(2,1fr); } }
@media(max-width:640px){ .ks-cols-2,.ks-cols-3,.ks-cols-4{ grid-template-columns:1fr; } }

.ks-flex{ display:flex; } .ks-ac{ align-items:center; } .ks-jb{ justify-content:space-between; }
.ks-wrap{ flex-wrap:wrap; } .ks-gap{ gap:var(--ks-3); } .ks-gap-sm{ gap:var(--ks-2); }
.ks-mt{ margin-top:var(--ks-4); } .ks-mt-sm{ margin-top:var(--ks-2); } .ks-mb{ margin-bottom:var(--ks-4); }
.ks-muted{ color:var(--ks-muted); } .ks-faint{ color:var(--ks-faint); } .ks-brand-c{ color:var(--ks-brand); }
.ks-b{ font-weight:700; } .ks-sm{ font-size:12px; }
.ks-start{ text-align:start; } .ks-end{ text-align:end; } .ks-center{ text-align:center; }
.ks-divider{ height:1px; background:var(--ks-line); margin:var(--ks-4) 0; border:0; }
/* فقرة نص طويل (وصف أعمال / ملاحظات / شروط دفع) — بتحافظ على أسطر المستخدم */
.ks-prose{ margin:0; font-size:14px; line-height:1.9; color:var(--ks-ink);
  white-space:pre-line; overflow-wrap:anywhere; }

/* علامة المطلوب (*) موحّدة */
.req,.ks-scope .req{ color:var(--ks-danger); font-weight:700; margin-inline-start:2px; }

/* width utilities — بديل inline width للأبعاد المتكررة */
.ks-w-50{width:50px!important} .ks-w-60{width:60px!important} .ks-w-70{width:70px!important}
.ks-w-80{width:80px!important} .ks-w-90{width:90px!important} .ks-w-100{width:100px!important}
.ks-w-120{width:120px!important} .ks-w-130{width:130px!important} .ks-w-150{width:150px!important} .ks-w-180{width:180px!important}

/* شريط أزرار الحفظ الثابت أسفل الفورم (يفضل ظاهر أثناء التمرير) */
.ks-actionbar{ position:sticky; bottom:0; z-index:20;
  /* 🔴 كان `rgba(255,255,255,.94)` ثابت — شريط أبيض في نص صفحة غامقة. والشفافية مقصودة
     (بيبان اللي تحته وهو بيتمرّر)، فالمتغيّر ده بيحمل اللون **بشفافيته** ويتقلب مع الوضع. */
  background:var(--ks-surface-a, rgba(255,255,255,.94)); backdrop-filter:blur(6px);
  border-top:1px solid var(--ks-line);
  margin:0 -16px -16px; padding:14px 16px; }

/* ================================================================
   FORM PRIMITIVES  (مضافة لسويب إدارة المشاريع — عامّة لكل الموديولات)
   ----------------------------------------------------------------
   الصفحات القديمة كانت بتكتب .form-group/.invalid-feedback/.custom-switch
   بستايل محلي مختلف في كل صفحة وبألوان بره الهوية. دي البدائل الموحّدة.
   ================================================================ */

/* عمود يمتد على عرض الشبكة كلها جوّه .ks-grid */
.ks-span-all{ grid-column:1/-1; }

/* رسالة خطأ تحت الحقل (بديل .invalid-feedback البوتستراب) */
.ks-err{ display:flex; align-items:center; gap:6px; margin-top:5px;
  font-size:11.5px; font-weight:600; color:var(--ks-danger); }
.ks-err svg{ width:14px; height:14px; flex:none; }
/* الحقل نفسه لما يبقى غلط — بيشتغل مع .is-invalid اللي الجافاسكربت القديم بيحطها */
body.ks-scope .form-control.is-invalid,
body.ks-scope .form-select.is-invalid,
body.ks-scope textarea.form-control.is-invalid,
.ks-control.is-invalid{ border-color:var(--ks-danger); box-shadow:0 0 0 3px var(--ks-danger-soft); }

/* ==================== SWITCH (مفتاح تشغيل/إيقاف) ====================
   مستقل عن نسخة البوتستراب المحمّلة (المشروع بيحمّل 4 و 5 مع بعض)،
   وخصائصه منطقية عشان يشتغل RTL و LTR. */
.ks-switch{ display:flex; align-items:center; gap:var(--ks-3); cursor:pointer;
  border:1px solid var(--ks-line); background:var(--ks-surface-2);
  border-radius:var(--ks-r-sm); padding:12px 14px; transition:border-color var(--ks-t),background var(--ks-t); }
.ks-switch:hover{ border-color:var(--ks-brand); background:var(--ks-brand-soft); }
.ks-switch > input[type=checkbox]{ position:absolute; opacity:0; width:0; height:0; }
.ks-switch__track{ flex:none; position:relative; width:46px; height:26px; border-radius:var(--ks-r-pill);
  background:var(--ks-faint); transition:background var(--ks-t); }
.ks-switch__track::before{ content:""; position:absolute; top:3px; inset-inline-start:3px;
  width:20px; height:20px; border-radius:50%; background:#fff; box-shadow:var(--ks-shadow-sm);
  transition:inset-inline-start var(--ks-t); pointer-events:none; }
.ks-switch > input:checked + .ks-switch__track{ background:var(--ks-ok); }
/* 🔴 الحركة بـinset-inline-start مش translateX — عشان تشتغل صح في الاتجاهين
   من غير قاعدة [dir=rtl] منفصلة. */
.ks-switch > input:checked + .ks-switch__track::before{ inset-inline-start:23px; }
.ks-switch > input:focus-visible + .ks-switch__track{ box-shadow:var(--ks-ring); }
.ks-switch > input:disabled + .ks-switch__track{ opacity:.5; }
.ks-switch__txt{ display:block; font-size:13px; font-weight:700; color:var(--ks-ink); }
.ks-switch__sub{ display:block; font-size:11.5px; font-weight:500; color:var(--ks-muted); margin-top:2px; }

/* ==================== DOC CARDS (شبكة بطاقات مستندات) ====================
   بديل شبكات الكروت اللي كل شاشة كانت بتنسّقها بشكل مختلف
   (حصر الكميات · المقايسات · العقود …). */
.ks-cardgrid{ display:grid; gap:var(--ks-4);
  grid-template-columns:repeat(auto-fill,minmax(290px,1fr)); }
.ks-doccard{ display:flex; flex-direction:column; background:var(--ks-surface);
  border:1px solid var(--ks-line); border-radius:var(--ks-r); overflow:hidden;
  box-shadow:var(--ks-shadow-sm); transition:box-shadow var(--ks-t),transform var(--ks-t); }
.ks-doccard:hover{ box-shadow:var(--ks-shadow); transform:translateY(-2px); }
.ks-doccard__hd{ padding:12px 14px; background:var(--ks-surface-2);
  border-bottom:1px solid var(--ks-line); display:flex; flex-direction:column; gap:6px; }
.ks-doccard__row{ display:flex; align-items:center; gap:var(--ks-2); justify-content:space-between; }
.ks-doccard__no{ font-family:var(--ks-mono); font-size:13px; font-weight:800; color:var(--ks-ink); }
.ks-doccard__bd{ padding:14px; display:flex; flex-direction:column; gap:6px; flex:1; }
.ks-doccard__title{ font-size:14px; font-weight:800; color:var(--ks-ink); margin:0 0 2px; }
.ks-doccard__meta{ display:flex; align-items:center; gap:6px; font-size:12px; color:var(--ks-muted); }
.ks-doccard__meta svg{ width:14px; height:14px; flex:none; }
.ks-doccard__amount{ margin-top:auto; text-align:center; padding:10px;
  background:var(--ks-brand-soft); color:var(--ks-brand-strong); border-radius:var(--ks-r-sm);
  font-size:17px; font-weight:800; font-variant-numeric:tabular-nums; }
.ks-doccard__ft{ display:flex; gap:6px; padding:0 14px 14px; flex-wrap:wrap; }

/* ==================== RADIO CARDS (اختيار من مجموعة بلاطات) ====================
   بديل مجموعات الراديو اللي كل صفحة كانت بتنسّقها بشكل مختلف. */
.ks-radios{ display:grid; gap:var(--ks-2); grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); }
.ks-radio{ position:relative; display:block; margin:0; }
.ks-radio > input{ position:absolute; opacity:0; width:0; height:0; }
.ks-radio > span{ display:flex; flex-direction:column; align-items:center; gap:3px; text-align:center;
  border:1px solid var(--ks-line); border-radius:var(--ks-r-sm); padding:12px 10px; cursor:pointer;
  background:var(--ks-surface-2); height:100%;
  transition:border-color var(--ks-t),background var(--ks-t),box-shadow var(--ks-t); }
.ks-radio:hover > span{ border-color:var(--ks-brand); }
.ks-radio > input:checked + span{ border-color:var(--ks-brand); background:var(--ks-brand-soft);
  box-shadow:inset 0 0 0 1px var(--ks-brand); }
.ks-radio > input:focus-visible + span{ box-shadow:var(--ks-ring); }
.ks-radio > input:disabled + span{ opacity:.55; cursor:not-allowed; }
.ks-radio svg{ color:var(--ks-muted); }
.ks-radio > input:checked + span svg{ color:var(--ks-brand); }
.ks-radio__t{ font-size:13px; font-weight:700; color:var(--ks-ink); }
.ks-radio__s{ font-size:11px; color:var(--ks-muted); }
.ks-radio > input:checked + span .ks-radio__t{ color:var(--ks-brand-strong); }

/* بلاطة قسم اختياري بيتفتح بمفتاح (زي «تسجيل إضافي/خصم») */
.ks-optbox{ border:1px solid var(--ks-line); border-radius:var(--ks-r-sm);
  background:var(--ks-surface); overflow:hidden; }
.ks-optbox__hd{ padding:12px 14px; background:var(--ks-surface-2); border-bottom:1px solid var(--ks-line); }
.ks-optbox__bd{ padding:14px; }

/* ==================== CHOICE CARDS (كروت اختيار) ====================
   كارت اختيار واحد من مجموعة (نوع مستخلص / نوع دفع / طريقة تسعير…).
   كان كل شاشة بتعمل نسخة محلية منه بألوان مكتوبة بالإيد.
   `.active` هوك جافاسكربت — الشاشات بتحطّه وتشيله بنفسها. */
.ks-choice-grid{ display:grid; grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); gap:12px; }
.ks-choice{ display:grid; gap:4px; padding:14px; cursor:pointer; text-align:start;
  border:1px solid var(--ks-line); border-radius:var(--ks-r-sm); background:var(--ks-surface);
  transition:border-color var(--ks-t),background var(--ks-t),box-shadow var(--ks-t); }
.ks-choice:hover{ border-color:var(--ks-brand); background:var(--ks-brand-soft); }
.ks-choice.active{ border-color:var(--ks-brand); background:var(--ks-brand-soft); box-shadow:var(--ks-ring); }
.ks-choice__ic{ color:var(--ks-muted); }
.ks-choice.active .ks-choice__ic{ color:var(--ks-brand); }
.ks-choice__t{ font-size:13.5px; font-weight:800; color:var(--ks-ink); }
.ks-choice.active .ks-choice__t{ color:var(--ks-brand-strong); }
.ks-choice__d{ font-size:11.5px; color:var(--ks-muted); line-height:1.6; }

/* ==================== PROGRESS (شريط نسبة إنجاز) ====================
   بيتكرّر في المشاريع والخطط وتقارير الإنجاز. العرض بيتحط inline
   (style="width:NN%") — ده مش لون، فمسموح بقاعدة ٧. */
.ks-progress-wrap{ display:flex; align-items:center; gap:var(--ks-2); min-width:90px; }
.ks-progress{ flex:1; height:8px; min-width:56px; border-radius:var(--ks-r-pill);
  background:var(--ks-line-2); overflow:hidden; }
.ks-progress__fill{ display:block; height:100%; border-radius:inherit;
  background:var(--ks-brand); transition:width var(--ks-t); }
.ks-progress--ok   .ks-progress__fill{ background:var(--ks-ok); }
.ks-progress--warn .ks-progress__fill{ background:var(--ks-warn); }
.ks-progress--info .ks-progress__fill{ background:var(--ks-info); }
.ks-progress--danger .ks-progress__fill{ background:var(--ks-danger); }
.ks-progress__val{ flex:none; font-size:11.5px; font-weight:700; color:var(--ks-muted);
  font-variant-numeric:tabular-nums; }

/* ==================== DEFINITION LIST (شاشات العرض/التفاصيل) ==================== */
.ks-dl{ display:grid; gap:var(--ks-3) var(--ks-5);
  grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); }
.ks-dl__i{ min-width:0; }
.ks-dl__k{ display:block; font-size:11.5px; font-weight:700; color:var(--ks-muted); margin-bottom:3px; }
.ks-dl__v{ display:block; font-size:13.5px; font-weight:600; color:var(--ks-ink);
  word-break:break-word; line-height:1.7; }
.ks-dl__v.ks-num{ font-family:var(--ks-mono); }
.ks-dl__i--wide{ grid-column:1/-1; }

/* ==================== TABS (تبويبات داخل الصفحة) ==================== */
.ks-tabs{ display:flex; gap:4px; flex-wrap:wrap; border-bottom:1px solid var(--ks-line);
  margin-bottom:var(--ks-5); }
.ks-tab{ display:inline-flex; align-items:center; gap:7px; padding:10px 16px; cursor:pointer;
  border:0; background:none; font-family:inherit; font-size:13.5px; font-weight:700;
  color:var(--ks-muted); border-bottom:2px solid transparent; margin-bottom:-1px;
  transition:color var(--ks-t),border-color var(--ks-t); text-decoration:none; }
.ks-tab:hover{ color:var(--ks-brand); }
.ks-tab.active,.ks-tab[aria-selected=true]{ color:var(--ks-brand); border-bottom-color:var(--ks-brand); }
.ks-tab svg{ width:16px; height:16px; }

/* ==================== شريط أدوات الصفوف داخل الجداول ==================== */
.ks-rowacts{ display:flex; align-items:center; gap:6px; justify-content:center; flex-wrap:nowrap; }
.ks-rowacts form{ display:inline-block; margin:0; }

@media (max-width:767.98px){
  .ks-dl{ grid-template-columns:1fr; }
  .ks-actionbar{ margin-inline:-14px; padding-inline:14px; }
  .ks-actionbar .ks-btn{ flex:1 1 auto; }
}

@media(prefers-reduced-motion:reduce){ .ks-scope *{ transition:none!important; } }

/* ==================== PAGE HEADER (بانر رأس الصفحة الأحمر) ==================== */
.ks-page-header{
  display:flex; align-items:center; justify-content:space-between; gap:16px; flex-wrap:wrap;
  background:var(--ks-brand-grad, linear-gradient(120deg,#ed1c24,#791c24));
  color:#fff; border-radius:var(--ks-r, 14px); padding:20px 24px; margin-bottom:18px;
  position:relative; overflow:hidden; box-shadow:0 10px 30px rgba(121,28,36,.22);
}
.ks-page-header::before{ content:""; position:absolute; top:-55%; inset-inline-end:-4%;
  width:300px; height:300px; background:rgba(255,255,255,.10); border-radius:50%; pointer-events:none; }
.ks-page-header > *{ position:relative; z-index:1; }
.ks-page-header__main{ display:flex; align-items:center; gap:16px; min-width:0; }
.ks-page-header__ic{ width:54px; height:54px; border-radius:14px; background:rgba(255,255,255,.16);
  display:inline-flex; align-items:center; justify-content:center; color:#fff; flex:0 0 auto; }
.ks-page-header__ic svg{ width:26px; height:26px; }
.ks-page-header__txt h1{ margin:0; font-size:23px; font-weight:800; letter-spacing:-.01em; text-wrap:balance; }
.ks-page-header__txt p{ margin:3px 0 0; font-size:13.5px; opacity:.85; }
.ks-page-header__actions{ display:flex; align-items:center; gap:10px; flex-wrap:wrap; }
/* أزرار داخل البانر الأحمر: شفافة بيضا + زر رئيسي أبيض مصمت */
.ks-page-header .ks-hbtn{ display:inline-flex; align-items:center; gap:7px; cursor:pointer;
  background:rgba(255,255,255,.16); color:#fff; border:1px solid rgba(255,255,255,.34);
  border-radius:var(--ks-r-xs,9px); padding:9px 15px; font-size:14px; font-weight:600;
  text-decoration:none; transition:background .15s,transform .1s; }
.ks-page-header .ks-hbtn:hover{ background:rgba(255,255,255,.28); color:#fff; }
.ks-page-header .ks-hbtn:active{ transform:translateY(1px); }
.ks-page-header .ks-hbtn svg{ width:17px; height:17px; }
/* dark-ok: الزرار ده قاعد **فوق** شريط الهيدر الأحمر، فتباينه مع الأحمر مش مع الصفحة —
   تغميقه بيخلّيه غير مقروء في الوضعين. */
.ks-page-header .ks-hbtn--solid{ background:var(--ks-surface); color:var(--ks-brand,#ed1c24); border-color:#fff; }
.ks-page-header .ks-hbtn--solid:hover{ background:var(--ks-surface-2); color:var(--ks-brand-strong,#c1121f); }
/* dark-ok: زرار حذف فوق البانر الأحمر — أبيض مصمت بنص أحمر غامق عشان يفضل مقروء
   في الوضعين، مش أحمر على أحمر. */
.ks-page-header .ks-hbtn--danger{ background:rgba(255,255,255,.16); color:#fff;
  border-color:rgba(255,255,255,.55); font-weight:700; }
.ks-page-header .ks-hbtn--danger:hover{ background:#fff; color:var(--ks-danger,#dc2626); border-color:#fff; }

/* ==================== STAT CARDS (كروت الإحصائيات) ==================== */
.ks-stats-grid{ display:grid; grid-template-columns:repeat(auto-fit,minmax(210px,1fr)); gap:14px; margin-bottom:18px; }
.ks-stat{ background:var(--ks-surface); border:1px solid var(--ks-line,#e8e4e1); border-radius:var(--ks-r-md, 12px);
  padding:15px 17px; box-shadow:var(--ks-shadow, 0 1px 3px rgba(20,20,30,.06)); position:relative; overflow:hidden; }
.ks-stat::before{ content:""; position:absolute; inset-inline-start:0; top:0; bottom:0; width:4px; background:var(--tone,#ed1c24); }
.ks-stat__top{ display:flex; align-items:center; justify-content:space-between; gap:8px; }
.ks-stat__label{ font-size:13px; color:var(--ks-muted,#6b7280); font-weight:600; }
.ks-stat__ic{ width:38px; height:38px; border-radius:10px; display:inline-flex; align-items:center; justify-content:center;
  background:var(--tone-soft,#fdecec); color:var(--tone,#ed1c24); flex:0 0 auto; }
.ks-stat__ic svg{ width:20px; height:20px; }
.ks-stat__value{ font-size:25px; font-weight:800; color:var(--ks-ink,#2d2d2d); margin-top:9px;
  font-variant-numeric:tabular-nums; letter-spacing:-.02em; line-height:1.1; }
.ks-stat__sub{ font-size:12px; color:var(--ks-muted,#6b7280); margin-top:3px; }
.ks-stat--brand{ --tone:#ed1c24; --tone-soft:#fdecec; }
.ks-stat--ok{    --tone:#16a34a; --tone-soft:#e9f7ef; }
.ks-stat--warn{  --tone:#d97706; --tone-soft:#fdf3e7; }
.ks-stat--info{  --tone:#2563eb; --tone-soft:#eaf1fe; }
.ks-stat--muted{ --tone:#6b7280; --tone-soft:#f1f2f4; }
.ks-stat--danger{ --tone:#dc2626; --tone-soft:#fdeaea; }  /* = --ks-danger / --ks-danger-soft */

/* ==================== EMPTY STATE (حالة فاضية) ==================== */
.ks-empty{ text-align:center; padding:44px 20px; }
.ks-empty__ic{ width:76px; height:76px; margin:0 auto var(--ks-4); border-radius:50%;
  display:grid; place-items:center; background:var(--ks-brand-soft); color:var(--ks-brand); }
.ks-empty__ic svg{ width:34px; height:34px; }
.ks-empty__title{ font-size:16px; font-weight:800; color:var(--ks-ink); margin:0 0 6px; }
.ks-empty__text{ font-size:13px; color:var(--ks-muted); margin:0 auto; max-width:420px; line-height:1.7; }
.ks-empty__actions{ margin-top:var(--ks-5); display:flex; justify-content:center; gap:var(--ks-2); flex-wrap:wrap; }

/* ==================== FILTER BAR (شريط الفلاتر) ==================== */
.ks-filterbar{ background:var(--ks-surface); border:1px solid var(--ks-line,#e8e4e1); border-radius:var(--ks-r-md,12px);
  padding:16px 18px; box-shadow:var(--ks-shadow,0 1px 3px rgba(20,20,30,.06)); margin-bottom:18px; }
.ks-filterbar__head{ display:flex; align-items:center; gap:8px; font-weight:700; font-size:14px;
  color:var(--ks-ink,#2d2d2d); margin-bottom:14px; }
.ks-filterbar__head svg{ color:var(--ks-brand,#ed1c24); }
.ks-filterbar__grid{ display:grid; grid-template-columns:repeat(auto-fit,minmax(180px,1fr)); gap:12px; align-items:end; }
.ks-ff{ display:flex; flex-direction:column; gap:6px; min-width:0; }
.ks-ff__label{ font-size:12.5px; font-weight:600; color:var(--ks-muted,#6b7280); }
.ks-filterbar .form-control, .ks-filterbar .form-select,
.ks-ff > input, .ks-ff > select, .ks-ff .select2-container .select2-selection{
  width:100% !important; min-height:40px; height:40px; padding:0 12px; font-size:13.5px; color:var(--ks-ink,#2d2d2d);
  background:var(--ks-surface); border:1px solid var(--ks-line,#e8e4e1); border-radius:var(--ks-r-xs,9px);
  transition:border-color .15s, box-shadow .15s; outline:none; box-shadow:none; }
.ks-filterbar .form-control:focus, .ks-filterbar .form-select:focus,
.ks-ff > input:focus, .ks-ff > select:focus{
  border-color:var(--ks-brand,#ed1c24); box-shadow:0 0 0 3px var(--ks-brand-soft,#fdecec); }
/* 🔴 `min-width:0` لازم هنا زي `.ks-ff` بالظبط — وهي كانت ناقصة.
   ده عنصر جريد جوّه `repeat(auto-fit,minmax(180px,1fr))`، و`min-width:auto`
   الافتراضي بيمنعه ينكمش تحت عرض محتواه ⇒ الترَك بيتمدّ على قد أعرض زرار،
   والصف كله يفيض عن الكارت وأطرافه تتقص. بان على «معايير التسوية» في
   `StockValuation/create` (٨ حقول + زرار «تحميل كل الأصناف»).
   و`flex-wrap` عشان الأزرار تنزل سطر تحت بدل ما تتقص جوّه الترَك. */
.ks-filterbar__actions{ display:flex; align-items:flex-end; gap:8px; min-width:0; flex-wrap:wrap; }
.ks-filterbar__actions .ks-btn{ height:40px; }

/* ==================== TOOLBAR فوق الجدول (عنوان + بحث + تصدير) ==================== */
.ks-toolbar{ display:flex; align-items:center; justify-content:space-between; gap:12px; flex-wrap:wrap; margin-bottom:12px; }
.ks-toolbar__title{ display:flex; align-items:center; gap:8px; font-weight:700; font-size:15px; color:var(--ks-ink,#2d2d2d); }
.ks-toolbar__title svg{ color:var(--ks-brand,#ed1c24); }
.ks-toolbar__tools{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.ks-searchbox{ position:relative; display:inline-flex; align-items:center; }
.ks-searchbox svg{ position:absolute; inset-inline-start:11px; color:var(--ks-muted,#6b7280); pointer-events:none; }
.ks-searchbox input{ height:40px; padding-inline-start:34px; padding-inline-end:14px; min-width:240px;
  border:1px solid var(--ks-line,#e8e4e1); border-radius:var(--ks-r-xs,9px); font-size:13.5px; background:var(--ks-surface); outline:none; }
.ks-searchbox input:focus{ border-color:var(--ks-brand,#ed1c24); box-shadow:0 0 0 3px var(--ks-brand-soft,#fdecec); }

/* ==================== MODAL (reusable · يدعم المكوّن والمودالز القديمة) ==================== */
.ks-modal .modal-content{ border:none; border-radius:16px; overflow:hidden; box-shadow:0 24px 60px rgba(20,20,30,.28); }
.ks-modal__header,
.ks-modal .modal-header{ display:flex; align-items:center; justify-content:space-between; gap:12px;
  padding:15px 20px !important; background:var(--ks-brand-grad, linear-gradient(120deg,#ed1c24,#791c24)) !important;
  color:#fff !important; border:none !important; }
.ks-modal__header h3, .ks-modal .modal-header .modal-title,
.ks-modal .modal-header h3, .ks-modal .modal-header h4,
.ks-modal .modal-header h5, .ks-modal .modal-header h6{
  margin:0; font-size:16px; font-weight:800; display:flex; align-items:center; gap:9px; color:#fff; }
.ks-modal__header svg, .ks-modal .modal-header svg, .ks-modal .modal-header i{ color:#fff; flex:0 0 auto; }
.ks-modal__close{ width:32px; height:32px; border:none; border-radius:9px; background:rgba(255,255,255,.16);
  color:#fff; display:inline-flex; align-items:center; justify-content:center; cursor:pointer; transition:background .15s; flex:0 0 auto; }
.ks-modal__close:hover{ background:rgba(255,255,255,.3); }
/* زر الإغلاق: Bootstrap 5 (btn-close) و Bootstrap 4 (.close) */
.ks-modal .modal-header .btn-close{ filter:brightness(0) invert(1); opacity:.9; box-shadow:none; }
.ks-modal .modal-header .close,
.ks-modal .modal-header .close span{ color:#fff; opacity:.9; text-shadow:none; font-weight:700; }
.ks-modal .modal-header .close:hover{ opacity:1; color:#fff; }
.ks-modal__body, .ks-modal .modal-body{ padding:20px; color:var(--ks-ink,#2d2d2d); }
.ks-modal__footer, .ks-modal .modal-footer{ padding:13px 20px !important; border-top:1px solid var(--ks-line,#e8e4e1) !important;
  display:flex; justify-content:flex-end; gap:10px; background:var(--ks-surface); margin:0; }

/* ==================== BULK ACTION BUTTONS (اعتماد/إذن جماعي) ==================== */
.bulk-approve-btn, .bulk-permit-btn{
  display:none; align-items:center; gap:8px; border:none; cursor:pointer;
  padding:10px 18px; border-radius:var(--ks-r-xs,9px); font-size:14px; font-weight:700; color:#fff;
  box-shadow:0 4px 12px rgba(0,0,0,.12); transition:transform .1s, box-shadow .15s, filter .15s; }
.bulk-approve-btn{ background:linear-gradient(135deg,#16a34a,#12833d); }
.bulk-permit-btn{ background:linear-gradient(135deg,#2563eb,#1d4ed8); }
.bulk-approve-btn.show, .bulk-permit-btn.show{ display:inline-flex; }
.bulk-approve-btn:hover, .bulk-permit-btn:hover{ filter:brightness(1.06); box-shadow:0 6px 16px rgba(0,0,0,.18); }
.bulk-approve-btn:active, .bulk-permit-btn:active{ transform:translateY(1px); }

/* ================================================================
   MOBILE POLISH  ·  responsive overrides (phones + tablets)
   ----------------------------------------------------------------
   RTL-safe: <body> has no dir — كل القواعد بخصائص منطقية.
   لا تلمس تخطيط الديسكتوب: كل شيء داخل @media للجوال/التابلت فقط.
   ================================================================ */

/* ---------- Tablets (≤ 991.98px): تكثيف الأعمدة والحشوات ---------- */
@media (max-width: 991.98px){
  /* كروت الإحصائيات: عمودان على التابلت */
  .ks-stats-grid{ grid-template-columns:repeat(2,1fr); }
  /* الفلاتر: صفوف أضيق حتى لا تتمدد الحقول أكثر من اللازم */
  .ks-filterbar__grid{ grid-template-columns:repeat(auto-fit,minmax(160px,1fr)); }
  /* بانر رأس الصفحة: حشوة أقل قليلاً */
  .ks-page-header{ padding:18px 20px; }
  .ks-page-head{ gap:var(--ks-3); }
}

/* ---------- Phones (≤ 767.98px) ---------- */
@media (max-width: 767.98px){

  /* حاوية الصفحة: حشوة جانبية مريحة + منع تمرير أفقي */
  .ks-page{ padding:var(--ks-4) var(--ks-3); max-width:100%; overflow-x:hidden; }

  /* breadcrumb: يلتفّ ولا يتجاوز العرض */
  .ks-crumbs,
  body.ks-scope .breadcrumb{ font-size:12px; max-width:100%; }

  /* ===== PAGE HEADER (البانر الأحمر) — يكدّس العنوان فوق الأزرار ===== */
  .ks-page-header{
    flex-direction:column; align-items:stretch; gap:14px;
    padding:16px; margin-bottom:14px; border-radius:var(--ks-r-sm,10px);
    max-width:100%;
  }
  .ks-page-header__main{ gap:12px; }
  .ks-page-header__ic{ width:42px; height:42px; border-radius:11px; }
  .ks-page-header__ic svg{ width:21px; height:21px; }
  .ks-page-header__txt{ min-width:0; }
  .ks-page-header__txt h1{ font-size:19px; overflow-wrap:anywhere; }
  .ks-page-header__txt p{ font-size:12.5px; }
  /* الأزرار: تلتفّ وتملأ العرض وتصبح قابلة للنقر */
  .ks-page-header__actions{ width:100%; gap:8px; }
  .ks-page-header .ks-hbtn{
    flex:1 1 auto; justify-content:center; min-height:42px;
    padding:10px 14px; font-size:13.5px;
  }

  /* نفس المنطق لبانر ks-page-head القديم */
  .ks-page-head{ margin-bottom:var(--ks-4); }
  .ks-page-head .ks-ph-ic{ width:44px; height:44px; font-size:19px; }
  .ks-page-head h1{ font-size:19px; }
  .ks-page-head .ks-ph-actions{ margin-inline-start:0; width:100%; }
  .ks-page-head .ks-ph-actions > *{ flex:1 1 auto; }

  /* بانر ks-banner */
  .ks-banner{ padding:var(--ks-4); gap:var(--ks-3); }
  .ks-banner .ks-banner-ic{ width:46px; height:46px; font-size:22px; }
  .ks-banner h1{ font-size:19px; }

  /* ===== STAT CARDS — عمود واحد مع حشوة مريحة ===== */
  .ks-stats-grid{ grid-template-columns:1fr; gap:12px; margin-bottom:14px; }
  .ks-stat{ padding:15px 16px; }
  .ks-stat__value{ font-size:23px; }

  /* ===== FILTER BAR — كل الحقول بعرض كامل ===== */
  .ks-filterbar{ padding:14px; margin-bottom:14px; }
  .ks-filterbar__grid{ grid-template-columns:1fr; gap:12px; }
  .ks-filterbar__actions{ flex-wrap:wrap; }
  .ks-filterbar__actions .ks-btn{ flex:1 1 auto; min-height:42px; }
  /* حقول الفلاتر: ارتفاع مريح للمس */
  .ks-filterbar .form-control, .ks-filterbar .form-select,
  .ks-ff > input, .ks-ff > select, .ks-ff .select2-container .select2-selection{
    min-height:44px; height:44px; font-size:14px;
  }

  /* ===== TOOLBAR + SEARCHBOX — يكدّس ويملأ العرض ===== */
  .ks-toolbar{ flex-direction:column; align-items:stretch; gap:10px; }
  .ks-toolbar__tools{ width:100%; }
  .ks-searchbox{ display:flex; width:100%; }
  .ks-searchbox input{ width:100%; min-width:0; height:44px; }

  /* ===== BUTTONS — حجم لمس كافٍ + التفاف الصفوف ===== */
  .ks-btn{ min-height:42px; }
  .ks-btn--sm{ min-height:38px; }
  /* صفوف أزرار الكارد تلتفّ بدل الفيض */
  .ks-card__head{ flex-wrap:wrap; }
  .ks-card__head .actions{ margin-inline-start:0; width:100%; flex-wrap:wrap; }
  .ks-card__head .actions > *{ flex:1 1 auto; }

  /* أزرار الإجراء الجماعي: بعرض كامل عند الظهور */
  .bulk-approve-btn.show, .bulk-permit-btn.show{ width:100%; justify-content:center; min-height:44px; }

  /* ===== MODAL — شبه كامل العرض بهوامش صغيرة + جسم قابل للتمرير ===== */
  .modal-dialog{ margin:10px auto; max-width:calc(100% - 20px); }
  .ks-modal .modal-content{ border-radius:12px; }
  .ks-modal .modal-body,
  .ks-modal__body{ max-height:70vh; overflow-y:auto; padding:16px; }
  .ks-modal .modal-header,
  .ks-modal__header{ padding:13px 16px !important; flex-wrap:wrap; }
  /* الفوتر: الأزرار تلتفّ وتملأ العرض */
  .ks-modal .modal-footer,
  .ks-modal__footer{ padding:12px 16px !important; flex-wrap:wrap; justify-content:stretch; }
  .ks-modal .modal-footer > .ks-btn,
  .ks-modal .modal-footer > .btn,
  .ks-modal__footer > .ks-btn,
  .ks-modal__footer > .btn{ flex:1 1 auto; min-height:44px; }

  /* الكارد + القسم: منع الفيض الأفقي + حشوة أخف */
  .ks-card__body{ padding:var(--ks-4); }
  .ks-card, .ks-section{ max-width:100%; }

  /* شريط الحفظ الثابت أسفل الفورم: أزرار قابلة للنقر */
  .ks-actionbar{ display:flex; flex-wrap:wrap; gap:8px; }
  .ks-actionbar > .ks-btn{ flex:1 1 auto; min-height:44px; }

  /* ===== FLOATING HELP FAB — يبقى ظاهراً وبعيداً عن الفوتر ===== */
  .floating-help{
    position:fixed;
    inset-inline-end:16px; inset-inline-start:auto;
    bottom:calc(16px + env(safe-area-inset-bottom, 0px));
    width:52px; height:52px;
    z-index:var(--ks-z-toast, 1080);
  }
  .floating-help svg, .floating-help i{ font-size:22px; }
}

/* ---------- Global safety: منع أي تمرير أفقي على الجوال ---------- */
@media (max-width: 767.98px){
  .ks-totchips{ gap:var(--ks-2); }
  .ks-totchip{ min-width:0; flex:1 1 140px; }
  /* الجداول تبقى قابلة للتمرير داخل غلافها فقط */
  .ks-table-wrap{ max-width:100%; }
}

/* ============================================================
   ks.barcode — الماسح الضوئي (reusable): أنماط عامة حتى يشتغل
   الكومبوننت على أي صفحة ks-scope، لا في فاتورة المبيعات فقط.
   حواف المجموعة تُدار بخصائص منطقية فتنعكس تلقائيًا مع اللغة.
   ============================================================ */
body.ks-scope .barcode-scanner-section{
  background:var(--ks-surface-2);
  border:1px solid var(--ks-line);
  border-inline-start:3px solid var(--ks-brand);
  border-radius:var(--ks-r-sm);
  padding:16px 18px;
}
body.ks-scope .barcode-scanner-section .input-group{
  box-shadow:var(--ks-shadow-sm);
  border-radius:var(--ks-r-xs);
}
body.ks-scope .barcode-scanner-section .input-group-text.barcode-ic{
  background:var(--ks-brand);
  color:#fff;
  border:none;
  padding:0 16px;
  font-size:1.1rem;
}
body.ks-scope .barcode-scanner-input{
  font-size:1.05rem !important;
  padding:12px 14px !important;
  background:var(--ks-surface) !important;
  border-color:var(--ks-line) !important;
}
body.ks-scope .barcode-scanner-input:focus{
  border-color:var(--ks-brand) !important;
  box-shadow:var(--ks-ring) !important;
}
body.ks-scope .barcode-search{
  background:var(--ks-brand-soft);
  border:1px solid transparent;
  color:var(--ks-brand-strong);
  font-weight:700;
  padding:0 22px !important;
  transition:all var(--ks-t);
}
body.ks-scope .barcode-search:hover,
body.ks-scope .barcode-search:focus{
  background:var(--ks-brand);
  color:#fff;
  box-shadow:0 4px 12px rgba(237,28,36,.22);
}
/* حواف المجموعة بخصائص منطقية: تنعكس مع اتجاه اللغة دون [dir].
   !important لتجاوز قواعد Bootstrap للـ input-group (فيزيائية، أعلى تخصيصًا). */
body.ks-scope .barcode-scanner-section .input-group > .barcode-ic{
  border-start-start-radius:var(--ks-r-xs) !important;
  border-end-start-radius:var(--ks-r-xs) !important;
  border-start-end-radius:0 !important;
  border-end-end-radius:0 !important;
}
body.ks-scope .barcode-scanner-section .input-group > .barcode-scanner-input{
  border-radius:0 !important;
}
body.ks-scope .barcode-scanner-section .input-group > .barcode-search{
  border-start-end-radius:var(--ks-r-xs) !important;
  border-end-end-radius:var(--ks-r-xs) !important;
  border-start-start-radius:0 !important;
  border-end-start-radius:0 !important;
}

/* ============================================================
   ks.installments — خطة الدفعات/الأقساط (reusable)
   ============================================================ */
body.ks-scope .ks-installments{
  background:var(--ks-surface-2);
  border:1px solid var(--ks-line);
  border-inline-start:3px solid var(--ks-brand);
  border-radius:var(--ks-r-sm);
  padding:var(--ks-4);
  margin-top:var(--ks-2);
}
body.ks-scope .ks-installments__head{
  display:flex; align-items:center; gap:var(--ks-2);
  font-size:14px; font-weight:800; color:var(--ks-ink); margin-bottom:var(--ks-3);
}
body.ks-scope .ks-installments__head svg,
body.ks-scope .ks-installments__head i{ color:var(--ks-brand); }
body.ks-scope .ks-installments__controls .form-label{
  font-size:12px; font-weight:700; color:var(--ks-ink-2); margin-bottom:4px;
}
body.ks-scope .ks-installments__table{ margin-top:var(--ks-3); max-height:240px; overflow-y:auto; }
body.ks-scope .ks-installments-tbl thead th{
  background:var(--ks-surface); color:var(--ks-muted); font-weight:700; font-size:12.5px;
  border-bottom:1px solid var(--ks-line); text-align:start; white-space:nowrap;
}
body.ks-scope .ks-installments-tbl tbody td{
  font-size:13px; color:var(--ks-ink); vertical-align:middle;
}
body.ks-scope .ks-installments-tbl tbody:empty::after{
  content:none;
}

/* ══════════════════════════════════════════════════════════════
   ks-subtabs — تابات فرعية بالعرض (تُستخدم جوّه تاب في صفحة إعدادات)
   غير مربوطة بـ ks-scope عشان تشتغل في الصفحات القديمة اللي لسه متحوّلتش.
   ══════════════════════════════════════════════════════════════ */
.ks-subtabs{
  display:flex; flex-wrap:wrap; gap:var(--ks-2);
  border-bottom:1px solid var(--ks-line);
  margin-bottom:var(--ks-5);
  padding-inline-start:0; list-style:none;
}
.ks-subtabs .nav-link{
  display:flex; align-items:center; gap:var(--ks-2);
  padding:var(--ks-3) var(--ks-4);
  color:var(--ks-muted);
  font-family:var(--ks-font); font-size:.9rem; font-weight:500;
  border:0; border-bottom:2px solid transparent;
  border-radius:var(--ks-r-xs) var(--ks-r-xs) 0 0;
  margin-bottom:-1px;
  transition:all var(--ks-t);
}
.ks-subtabs .nav-link:hover{ color:var(--ks-ink); background:var(--ks-surface-2); }
.ks-subtabs .nav-link.active{
  color:var(--ks-brand); background:transparent;
  border-bottom-color:var(--ks-brand);
}
.ks-subtabs .nav-link:focus-visible{ outline:0; box-shadow:var(--ks-ring); }
.ks-subtabs .nav-link i{ font-size:.95rem; }

@media (max-width:767.98px){
  .ks-subtabs{ flex-wrap:nowrap; overflow-x:auto; }
  .ks-subtabs .nav-link{ white-space:nowrap; padding:var(--ks-2) var(--ks-3); }
}

/* ================================================================
   الشجرة الهرمية  ·  <x-ks.tree>
   ----------------------------------------------------------------
   بتترندر باستدعاء ذاتي فبتشيل أي عمق. الإزاحة منطقية
   (padding-inline-start) عشان تنعكس صح في العربي والإنجليزي —
   مفيش padding-left/right فيزيائي هنا.
   ================================================================ */
.ks-tree{ list-style:none; margin:0; padding:0; }
.ks-tree--child{ padding-inline-start:var(--ks-5); position:relative; }
.ks-tree--child::before{
  content:""; position:absolute; inset-block:0; inset-inline-start:calc(var(--ks-3));
  border-inline-start:1px dashed var(--ks-line-2);
}
.ks-tree__item{ margin:2px 0; }
.ks-tree__row{
  display:flex; align-items:center; gap:var(--ks-2);
  padding:var(--ks-2) var(--ks-3);
  border:1px solid var(--ks-line); border-radius:8px; background:#fff;
  transition:border-color .15s, box-shadow .15s;
}
.ks-tree__row:hover{ border-color:var(--ks-brand); box-shadow:var(--ks-shadow-sm); }
.ks-tree__item.is-active > .ks-tree__row{ border-color:var(--ks-brand); background:var(--ks-brand-soft); }
.ks-tree__icon{ display:inline-flex; color:var(--ks-brand); flex:0 0 auto; }
.ks-tree__label{ flex:1 1 auto; min-width:0; font-weight:600; color:var(--ks-ink); }
.ks-tree__sub{ display:block; font-weight:400; font-size:12px; color:var(--ks-muted); }
.ks-tree__badge{
  flex:0 0 auto; font-size:12px; font-weight:600;
  padding:1px 9px; border-radius:999px; white-space:nowrap;
}
.ks-tree__badge--muted{ background:var(--ks-faint); color:var(--ks-ink-2); }
.ks-tree__badge--info { background:var(--ks-info-soft);  color:var(--ks-info); }
.ks-tree__badge--ok   { background:var(--ks-ok-soft);    color:var(--ks-ok); }
.ks-tree__badge--warn { background:var(--ks-warn-soft);  color:var(--ks-warn); }
.ks-tree__badge--brand{ background:var(--ks-brand-soft); color:var(--ks-brand-deep); }
.ks-tree__actions{ flex:0 0 auto; display:flex; gap:4px; }
.ks-tree__empty{
  display:flex; align-items:center; gap:var(--ks-2);
  padding:var(--ks-5); color:var(--ks-muted);
  border:1px dashed var(--ks-line-2); border-radius:10px; background:var(--ks-bg);
}
@media (max-width:575.98px){
  .ks-tree--child{ padding-inline-start:var(--ks-4); }
  .ks-tree__sub{ display:none; }
}

/* ================================================================
   خريطة توافر الوحدات  ·  <x-ks.unit-grid>
   ----------------------------------------------------------------
   ألوان الحالة دلالية ومتقيّدة بالبراند: الأحمر للمباع (نهائي)،
   الأخضر للمتاح، الكهرماني للمحجوز. مفيش أزرق/بنفسجي.
   ================================================================ */
.ks-ugrid{ display:flex; flex-direction:column; gap:var(--ks-5); }
.ks-ugrid__group{ border:1px solid var(--ks-line); border-radius:10px; overflow:hidden; background:#fff; }
.ks-ugrid__group-title{
  display:flex; align-items:center; gap:var(--ks-2);
  padding:var(--ks-2) var(--ks-3);
  background:var(--ks-faint); border-bottom:1px solid var(--ks-line);
  font-weight:700; color:var(--ks-ink);
}
.ks-ugrid__row{
  display:flex; align-items:flex-start; gap:var(--ks-3);
  padding:var(--ks-2) var(--ks-3); border-bottom:1px dashed var(--ks-line-2);
}
.ks-ugrid__row:last-child{ border-bottom:0; }
.ks-ugrid__row-label{
  flex:0 0 110px; min-width:0; padding-top:6px;
  font-size:13px; font-weight:600; color:var(--ks-ink-2);
}
.ks-ugrid__cells{ flex:1 1 auto; min-width:0; display:flex; flex-wrap:wrap; gap:6px; }
.ks-ugrid__none{ color:var(--ks-muted); font-size:13px; padding:6px 0; }

.ks-ucell{
  display:inline-flex; flex-direction:column; align-items:center; justify-content:center;
  min-width:74px; padding:6px 8px; border-radius:8px;
  border:1px solid transparent; text-decoration:none; line-height:1.25;
  transition:transform .1s, box-shadow .15s;
}
a.ks-ucell:hover{ transform:translateY(-1px); box-shadow:var(--ks-shadow-sm); text-decoration:none; }
.ks-ucell__code{ font-weight:700; font-size:13px; }
.ks-ucell__meta{ font-size:11px; opacity:.85; }

.ks-ucell--available  { background:var(--ks-ok-soft);    color:var(--ks-ok);         border-color:var(--ks-ok); }
.ks-ucell--reserved   { background:var(--ks-warn-soft);  color:var(--ks-warn);       border-color:var(--ks-warn); }
.ks-ucell--contracted { background:var(--ks-info-soft);  color:var(--ks-info);       border-color:var(--ks-info); }
.ks-ucell--sold       { background:var(--ks-brand-soft); color:var(--ks-brand-deep); border-color:var(--ks-brand); }
.ks-ucell--handed_over{ background:var(--ks-brand-deep); color:#fff;                 border-color:var(--ks-brand-deep); }
.ks-ucell--cancelled,
.ks-ucell--blocked    { background:var(--ks-faint);      color:var(--ks-muted);      border-color:var(--ks-line-2); }

.ks-ulegend{ display:flex; flex-wrap:wrap; gap:var(--ks-3); margin-bottom:var(--ks-3); }
.ks-ulegend__item{ display:inline-flex; align-items:center; gap:6px; font-size:13px; color:var(--ks-ink-2); }
.ks-ulegend__dot{ width:12px; height:12px; border-radius:3px; border:1px solid transparent; }

@media (max-width:575.98px){
  .ks-ugrid__row{ flex-direction:column; gap:4px; }
  .ks-ugrid__row-label{ flex:0 0 auto; padding-top:0; }
  .ks-ucell{ min-width:64px; }
}
