:root {
  --primary:#1B3F72; --primary-mid:#2A5BA8; --primary-light:#C8DEFF; --primary-dark:#122b52;
  --accent:#E8A020; --success:#0A7B3E; --danger:#C0392B; --warning:#CC7700;
  --muted:#475569; --border:#D0DCEF; --surface:#F0F4FA; --white:#fff; --text:#1a2340;
  --card-bg:#fff; --input-bg:#fafcff;
  --sidebar-w:240px;
  --it-bg:#ddeeff; --it-c:#1B3F72; --fu-bg:#d4edda; --fu-c:#155724;
  --el-bg:#fde8d8; --el-c:#7B2D00; --sp-bg:#fff8e1; --sp-c:#7A5200;
  --kt-bg:#f3e6ff; --kt-c:#4A0E8A; --vo-bg:#d4f0ec; --vo-c:#004D44;
  --ss-bg:#fde8e8; --ss-c:#7B0000; --fi-bg:#ede0db; --fi-c:#3E1F0A;
  --radius:10px; --shadow:0 2px 12px rgba(27,63,114,.10);
  --bottom-nav-h:62px;
  /* Design-system text tokens — WCAG AAA on white */
  --text-primary:#0f172a;      /* Headings, big numbers (14.9:1) */
  --text-secondary:#1e293b;    /* Body copy, main labels (13.5:1) */
  --text-tertiary:#334155;     /* Meta, timestamps, sub-labels (10.0:1) */
  --text-quaternary:#475569;   /* Rarely-used muted — minimum allowed (7.5:1) */
}

/* ═══════════════ DESIGN-SYSTEM DEFAULTS (Light mode only) ═══════════════
   Strong contrast everywhere by default — scoped so sidebar/hero/drawer
   (which carry their own explicit light-on-dark colors) are NOT affected.
   Targets: page content, forms, tables, metadata text. */
body { color: var(--text-secondary); }
/* Form labels must NEVER be faded — and only outside white-text containers */
.fg label, .form-label, form label:not(.login-input label):not(.check):not(.radio) {
    color: var(--text-primary); font-weight: 700;
}
/* Placeholders still muted but readable */
input::placeholder, textarea::placeholder {
    color:#64748b!important; opacity:1!important;
}
/* .bi-en default: dark on white — sidebar/hero override this with their own rules */
.bi-en:not(.sidebar *):not(.drawer-panel *):not(.mh-wrap *):not(.bottom-nav *),
.bi-en-side:not(.sidebar *):not(.drawer-panel *):not(.mh-wrap *):not(.bottom-nav *) {
    color: var(--text-secondary); font-weight: 700;
}
/* Table header + cell defaults — cards sitting on white bg */
.table-wrap table th, .table-responsive table th, table.table th {
    color: var(--text-primary); font-weight: 700;
}
.table-wrap table td, .table-responsive table td, table.table td {
    color: var(--text-secondary);
}
/* Badges have background fills — force dark text so they're always readable */
.badge { font-weight: 700; }
/* Generic .muted + .text-muted helpers: floor at --text-tertiary */
.muted, .text-muted, .small-meta { color: var(--text-tertiary); }
*{box-sizing:border-box;margin:0;padding:0;}
html{overflow-x:hidden;}
/* GLOBAL CONTRAST FLOOR — screens only (print keeps its own lighter grays).
   Catches inline styles with low-contrast hex colors scattered across
   show pages + components. Targets the 5 most common offenders. */
@media screen {
    [style*="color:#94a3b8"]:not(.print-safe),
    [style*="color: #94a3b8"]:not(.print-safe),
    [style*="color:#9ca3af"]:not(.print-safe),
    [style*="color: #9ca3af"]:not(.print-safe),
    [style*="color:#6b7a99"]:not(.print-safe),
    [style*="color: #6b7a99"]:not(.print-safe),
    [style*="color:#8899aa"]:not(.print-safe),
    [style*="color: #8899aa"]:not(.print-safe),
    [style*="color:#cbd5e1"]:not(.print-safe):not(.sidebar *):not(.drawer-panel *),
    [style*="color: #cbd5e1"]:not(.print-safe):not(.sidebar *):not(.drawer-panel *) {
        color: #334155 !important;
    }
    body.dark-mode [style*="color:#94a3b8"]:not(.print-safe),
    body.dark-mode [style*="color:#9ca3af"]:not(.print-safe),
    body.dark-mode [style*="color:#6b7a99"]:not(.print-safe),
    body.dark-mode [style*="color:#8899aa"]:not(.print-safe) {
        color: #cbd5e1 !important;
    }
}

/* Bilingual: English text below Arabic in smaller muted font (JS-generated) */
/* English sub-labels — DESKTOP + MOBILE readable contrast.
   Used below Arabic labels in tables, stat cards, section titles, hero subtitles.
   Target: WCAG AAA (7:1 ratio on white + dark backgrounds). */
.bi-en{display:block;font-size:0.85em;font-weight:700;color:#1e293b;line-height:1.4;margin-top:2px;letter-spacing:0.2px;opacity:1;}
body.dark-mode .bi-en{color:#f1f5f9;}
/* When .bi-en is INLINE (inside h2/button/span with margin-right), keep it visible */
span.bi-en,.badge .bi-en{display:inline;font-size:0.82em;color:#334155;font-weight:700;margin:0 6px 0 0;}
body.dark-mode span.bi-en,body.dark-mode .badge .bi-en{color:#e2e8f0;}

/* Bilingual side-by-side: Arabic right, English left */
/* Bilingual side-by-side: Arabic right (start), English left (end) in RTL */
.bi-label{display:flex;justify-content:space-between;align-items:baseline;gap:8px;width:100%;direction:rtl;}
.bi-ar{font-weight:700;color:inherit;flex:1;}
.bi-en-side{font-size:0.85em;color:#334155;font-weight:700;direction:ltr;text-align:left;white-space:nowrap;flex-shrink:0;letter-spacing:0.15px;}
body.dark-mode .bi-en-side{color:#e2e8f0;}
/* Wrap on small screens: Arabic on top, English below */
@media(max-width:600px){
  .bi-label{flex-direction:column;gap:2px;}
  .bi-en-side{font-size:0.75em;white-space:normal;}
}
body{font-family:'IBM Plex Sans Arabic',Arial,sans-serif;background:var(--surface);color:var(--text);min-height:100vh;min-height:-webkit-fill-available;font-size:14px;overflow-x:hidden;-webkit-text-size-adjust:100%;touch-action:manipulation;}
html[dir="ltr"] body{font-family:'Segoe UI',-apple-system,BlinkMacSystemFont,Arial,sans-serif;}
html[dir="ltr"] .sidebar{right:auto;left:0;border-right:none;border-left:1px solid var(--border);}
html[dir="ltr"] .main-area{margin-right:0;margin-left:var(--sidebar-w);}
html[dir="ltr"] .nav-item.active{border-right:none;border-left:3px solid var(--accent);}

/* ═══════════════ LOGIN ═══════════════ */
#login-screen{position:fixed;inset:0;background:linear-gradient(145deg,#0a1628 0%,#1B3F72 55%,#2A5BA8 100%);display:flex;align-items:flex-start;justify-content:center;z-index:9999;overflow-y:auto;padding:20px 0;}
#login-screen::before{content:'';position:absolute;width:600px;height:600px;border-radius:50%;background:rgba(42,91,168,.15);top:-200px;left:-200px;pointer-events:none;z-index:0;}
#login-screen::after{content:'';position:absolute;width:400px;height:400px;border-radius:50%;background:rgba(232,160,32,.08);bottom:-100px;right:-100px;pointer-events:none;z-index:0;}
#login-screen.hidden{display:none;}
.login-card{background:rgba(255,255,255,.97);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border-radius:24px;padding:36px 32px 28px;width:min(420px,94vw);box-shadow:0 40px 100px rgba(0,0,0,.5),0 0 0 1px rgba(255,255,255,.1);text-align:center;position:relative;z-index:10;max-height:calc(100vh - env(safe-area-inset-top) - env(safe-area-inset-bottom) - 20px);overflow-y:auto;-webkit-overflow-scrolling:touch;}
.login-logo-wrap{width:76px;height:76px;background:linear-gradient(135deg,#1B3F72,#2A5BA8);border-radius:22px;display:flex;align-items:center;justify-content:center;margin:0 auto 14px;font-size:36px;box-shadow:0 12px 32px rgba(27,63,114,.4);}
.login-org{font-size:10px;font-weight:800;color:var(--primary);letter-spacing:2px;text-transform:uppercase;margin-bottom:6px;}
.login-title{font-size:22px;font-weight:800;color:var(--text);margin-bottom:2px;line-height:1.35;}
.login-title-en{font-size:12.5px;font-weight:600;color:#64748b;letter-spacing:0.7px;margin-bottom:14px;line-height:1.3;font-family:'Segoe UI',Arial,sans-serif;}
.login-subtitle{font-size:12px;color:var(--muted);margin-bottom:28px;}
.login-field{position:relative;margin-bottom:14px;text-align:right;}
.login-field-icon{position:absolute;right:14px;top:50%;transform:translateY(-50%);font-size:16px;pointer-events:none;}
.login-input{width:100%;border:1.5px solid var(--border);border-radius:12px;padding:12px 42px 12px 14px;font-size:14px;font-family:inherit;color:var(--text);background:#f8faff;transition:all .2s;text-align:right;}
.login-input:focus{outline:none;border-color:var(--primary-mid);background:#fff;box-shadow:0 0 0 4px rgba(42,91,168,.1);}
.login-btn{width:100%;background:linear-gradient(135deg,#1B3F72,#2A5BA8);color:#fff;border:none;border-radius:12px;padding:14px;font-size:15px;font-family:inherit;font-weight:700;cursor:pointer;transition:all .2s;margin-top:4px;box-shadow:0 6px 20px rgba(27,63,114,.35);}
.login-btn:hover{transform:translateY(-1px);box-shadow:0 10px 28px rgba(27,63,114,.45);}
.login-btn:active{transform:translateY(0);}
.login-btn:disabled{opacity:.7;cursor:not-allowed;transform:none;}
.login-error{color:var(--danger);font-size:12px;margin-top:10px;min-height:16px;font-weight:500;}
.login-roles{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:20px;}
.login-role-box{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:10px 12px;text-align:right;}
.login-role-box .role-icon{font-size:18px;margin-bottom:4px;}
.login-role-box .role-name{font-size:11px;font-weight:700;color:var(--primary);}
.login-role-box .role-desc{font-size:10px;color:var(--muted);margin-top:2px;line-height:1.4;}
.login-ver{font-size:10px;color:#bbb;margin-top:16px;}

/* ═══════════════ MODULE SELECTOR ═══════════════ */
#module-selector{position:fixed;inset:0;background:linear-gradient(145deg,#0f2444,#1B3F72 60%,#2A5BA8);display:none;align-items:center;justify-content:center;flex-direction:column;z-index:8000;padding:24px;}
#module-selector.show{display:flex;}
.ms-header{text-align:center;margin-bottom:40px;}
.ms-header h1{color:#fff;font-size:22px;font-weight:700;margin-bottom:6px;}
.ms-header p{color:rgba(255,255,255,.6);font-size:13px;}
.ms-cards{display:flex;gap:20px;flex-wrap:wrap;justify-content:center;}
.ms-card{background:rgba(255,255,255,.09);border:2px solid rgba(255,255,255,.18);border-radius:22px;padding:32px 36px;cursor:pointer;text-align:center;transition:.25s;min-width:180px;backdrop-filter:blur(16px);}
.ms-card:hover{background:rgba(255,255,255,.18);border-color:rgba(255,255,255,.5);transform:translateY(-5px);box-shadow:0 20px 50px rgba(0,0,0,.25);}
.ms-card:active{transform:translateY(-2px);}
.ms-card .icon{font-size:52px;margin-bottom:14px;display:block;}
.ms-card .label{color:#fff;font-size:18px;font-weight:700;margin-bottom:6px;}
.ms-card .sub{color:rgba(255,255,255,.6);font-size:12px;}
.ms-card .sub.loaded{color:#7fff9e;font-weight:600;}
.ms-logout{margin-top:32px;background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.2);color:rgba(255,255,255,.7);border-radius:8px;padding:8px 20px;font-family:inherit;font-size:13px;cursor:pointer;transition:.2s;}
.ms-logout:hover{background:rgba(255,255,255,.2);}

/* ═══════════════ APP SHELL ═══════════════ */
.app-shell{display:flex;min-height:100vh;min-height:-webkit-fill-available;}

/* SIDEBAR — strong contrast across all text for desktop + drawer reuse */
.sidebar{width:var(--sidebar-w);background:linear-gradient(180deg,#0f1e36 0%,#1a2b47 100%);display:flex;flex-direction:column;flex-shrink:0;position:fixed;top:0;right:0;height:100vh;height:-webkit-fill-available;z-index:100;transition:.3s;overflow-y:auto;-webkit-overflow-scrolling:touch;}
.sidebar-logo{padding:20px 20px 18px;border-bottom:1px solid rgba(255,255,255,.15);background:linear-gradient(135deg,rgba(251,191,36,0.12) 0%,transparent 60%);}
.sidebar-logo .org{font-size:11px;font-weight:900;color:#fde047;letter-spacing:1.3px;text-transform:uppercase;margin-bottom:8px;text-shadow:0 1px 2px rgba(0,0,0,0.35);}
.sidebar-logo .title{color:#ffffff;font-size:15.5px;font-weight:900;line-height:1.4;text-shadow:0 1px 3px rgba(0,0,0,0.5);letter-spacing:0.2px;margin-bottom:2px;}
.sidebar-logo .title-en{color:rgba(255,255,255,0.78);font-size:11px;font-weight:600;line-height:1.3;letter-spacing:0.6px;text-shadow:0 1px 2px rgba(0,0,0,0.4);font-family:'Segoe UI',Arial,sans-serif;margin-bottom:10px;}
.sidebar-logo .module-badge{display:inline-flex;align-items:center;gap:4px;background:linear-gradient(135deg,#fbbf24,#d97706);color:#0f1e36;font-size:11px;font-weight:900;padding:4px 12px;border-radius:12px;margin-top:10px;box-shadow:0 4px 12px rgba(251,191,36,0.5);letter-spacing:0.3px;}
.sidebar-nav{flex:1;padding:12px 0;overflow-y:auto;}
.nav-item{display:flex;align-items:center;gap:10px;padding:11px 16px;margin:3px 10px;color:#f1f5f9;font-size:13px;font-weight:700;cursor:pointer;transition:all .18s;border-right:3px solid transparent;border-radius:8px;line-height:1.4;position:relative;letter-spacing:0.1px;}
.nav-item:hover{color:#ffffff;background:rgba(255,255,255,.12);transform:translateX(-2px);}
html[dir="ltr"] .nav-item:hover{transform:translateX(2px);}
.nav-item.active{color:#ffffff;background:linear-gradient(90deg,rgba(251,191,36,0.3) 0%,rgba(251,191,36,0.1) 100%);border-right-color:#fbbf24;font-weight:900;box-shadow:0 4px 12px rgba(0,0,0,0.2);}
/* Nav-item `<a>` inherits — ensure links inside don't lose the color */
.nav-item a{color:inherit!important;text-decoration:none;display:flex;align-items:center;gap:10px;width:100%;}
/* Ensure both Arabic AND English (.bi-en) labels inside nav items render
   white on the dark navy sidebar — covers desktop sidebar AND mobile
   drawer (the drawer reuses .sidebar-nav inside .mobile-drawer). */
.nav-item,
.nav-item a,
.sidebar .nav-item,
.sidebar .nav-item a,
.mobile-drawer .nav-item,
.mobile-drawer .nav-item a,
.mobile-drawer .sidebar-nav .nav-item,
.mobile-drawer .sidebar-nav .nav-item a{color:#fff!important;}
.nav-item .bi-en,
.sidebar .bi-en,
.sidebar span.bi-en,
.sidebar .bi-en-side,
.mobile-drawer .bi-en,
.mobile-drawer span.bi-en,
.mobile-drawer .bi-en-side,
.mobile-drawer .nav-item .bi-en,
.mobile-drawer .sidebar-nav .bi-en,
.mobile-drawer .sidebar-nav span.bi-en,
.mobile-drawer .sidebar-nav .bi-en-side{color:rgba(255,255,255,0.92)!important;font-weight:600!important;}
.nav-item.active .bi-en,.mobile-drawer .nav-item.active .bi-en{color:#fff!important;font-weight:700!important;}
.nav-item .nav-icon{font-size:16px;width:22px;text-align:center;flex-shrink:0;}
.nav-section{padding:14px 20px 6px;font-size:11px;font-weight:900;color:#fde047;letter-spacing:1.4px;text-transform:uppercase;text-shadow:0 1px 2px rgba(0,0,0,0.35);}
/* Smart-Dashboard CTA at the top of the sidebar — single hub replacing the
   removed module-switcher pills. Visually heavier than a regular nav-item
   so it reads as the primary entry point. */
/* Dashboard CTA — !important on color + text-decoration to defeat any
   stray `a {color/underline}` defaults coming from earlier sidebar rules
   (the legacy .nav-item a chain ships with !important itself). */
a.sidebar-dashboard-cta,a.sidebar-dashboard-cta:visited,a.sidebar-dashboard-cta:hover,a.sidebar-dashboard-cta:active{display:flex !important;align-items:center;gap:12px;margin:14px 12px 18px;padding:14px 16px;background:linear-gradient(135deg,#fbbf24 0%,#f59e0b 60%,#d97706 100%) !important;color:#1e3a5f !important;border-radius:12px;text-decoration:none !important;font-weight:800;box-shadow:0 6px 16px rgba(245,158,11,0.35);position:relative;transition:transform .2s,box-shadow .2s;}
a.sidebar-dashboard-cta:hover{transform:translateY(-2px);box-shadow:0 10px 22px rgba(245,158,11,0.45);}
a.sidebar-dashboard-cta.active{box-shadow:0 0 0 3px rgba(255,255,255,0.5),0 6px 16px rgba(245,158,11,0.5);}
a.sidebar-dashboard-cta .sdcta-icon{font-size:24px;line-height:1;}
a.sidebar-dashboard-cta .sdcta-text{flex:1;line-height:1.25;}
a.sidebar-dashboard-cta .sdcta-title{font-size:14px;font-weight:900;color:#1e3a5f !important;text-decoration:none !important;}
a.sidebar-dashboard-cta .sdcta-sub{font-size:10px;font-weight:600;color:rgba(30,58,95,0.7) !important;margin-top:1px;text-decoration:none !important;}
a.sidebar-dashboard-cta .sdcta-badge{background:linear-gradient(135deg,#dc2626,#991b1b) !important;color:#fff !important;font-size:11px;font-weight:800;min-width:22px;height:22px;border-radius:11px;padding:0 7px;display:inline-flex;align-items:center;justify-content:center;box-shadow:0 2px 6px rgba(220,38,38,0.5);}

/* My Tasks panel — sidebar widget showing top 5 actionable items.
   Items auto-clear from the list on signing/approving via JS poll. */
.sidebar-tasks{margin:6px 12px 14px;background:rgba(255,255,255,0.06);border:1px solid rgba(255,255,255,0.12);border-radius:10px;overflow:hidden;}
.sidebar-tasks.is-empty{display:none;}
/* Header is a button — full-width, looks like a section heading,
   click toggles .is-collapsed on the panel. */
button.stp-head{display:flex;align-items:center;gap:8px;width:100%;padding:9px 12px;background:rgba(0,0,0,0.18);border:0;border-bottom:1px solid rgba(255,255,255,0.08);font-size:12px;font-weight:800;color:#fbbf24;cursor:pointer;font-family:inherit;text-align:start;transition:background 0.15s;}
button.stp-head:hover{background:rgba(0,0,0,0.28);}
.sidebar-tasks .stp-icon{font-size:14px;}
.sidebar-tasks .stp-title{flex:1;letter-spacing:0.4px;}
.sidebar-tasks .stp-count{background:#dc2626;color:#fff;font-size:11px;font-weight:800;min-width:22px;height:20px;border-radius:10px;padding:0 7px;display:inline-flex;align-items:center;justify-content:center;}
.sidebar-tasks .stp-chevron{font-size:11px;color:rgba(255,255,255,0.7);transition:transform 0.2s ease;margin-inline-start:2px;}
.sidebar-tasks.is-collapsed .stp-chevron{transform:rotate(-90deg);}
.sidebar-tasks.is-collapsed button.stp-head{border-bottom-color:transparent;}
.sidebar-tasks .stp-list{padding:4px 0;max-height:600px;overflow:hidden;transition:max-height 0.25s ease,padding 0.25s ease;}
.sidebar-tasks.is-collapsed .stp-list{max-height:0;padding:0;}
.sidebar-tasks.is-collapsed .stp-more{display:none;}
/* Cover every link state explicitly — without :visited/:link overrides the
   browser's default visited-link colour (purple/maroon) wins on items the
   user has clicked before, which is exactly what made the panel show
   maroon-on-navy in the first reported screenshot. */
.sidebar-tasks a.stp-item,
.sidebar-tasks a.stp-item:link,
.sidebar-tasks a.stp-item:visited,
.sidebar-tasks a.stp-item:active{display:flex;align-items:center;gap:9px;padding:8px 12px;color:#fff !important;text-decoration:none !important;border-inline-start:3px solid transparent;transition:background 0.15s,border-color 0.15s;}
.sidebar-tasks a.stp-item:hover{background:rgba(255,255,255,0.08);border-inline-start-color:#fbbf24;color:#fff !important;}
.sidebar-tasks a.stp-item.is-critical{border-inline-start-color:#dc2626;}
.sidebar-tasks .stp-item-icon{font-size:15px;flex-shrink:0;}
.sidebar-tasks .stp-item-body{flex:1;min-width:0;}
.sidebar-tasks a.stp-item .stp-item-num{font-size:11.5px;font-weight:700;color:#fff !important;font-family:monospace;letter-spacing:0.3px;line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.sidebar-tasks a.stp-item .stp-item-meta{font-size:10px;color:rgba(255,255,255,0.78) !important;margin-top:1px;line-height:1.3;}
.sidebar-tasks a.stp-item .stp-item-days{color:rgba(255,255,255,0.78) !important;}
.sidebar-tasks a.stp-item .stp-item-days.critical{color:#fca5a5 !important;font-weight:700;}
.sidebar-tasks a.stp-more,
.sidebar-tasks a.stp-more:link,
.sidebar-tasks a.stp-more:visited{display:block;padding:7px 12px;font-size:10.5px;color:#fbbf24 !important;text-decoration:none !important;text-align:center;font-weight:700;border-top:1px solid rgba(255,255,255,0.08);background:rgba(0,0,0,0.12);}
.sidebar-tasks a.stp-more:hover{background:rgba(0,0,0,0.22);color:#fcd34d !important;}

/* ──────────────────────────────────────────────────────────────────
   Dark-surface text guarantee — sweep
   Every link/text inside containers with a dark navy/gradient background
   must render in white regardless of :visited or inherited colour. White
   backgrounds keep their existing colours — these selectors target only
   the dark surfaces by class, not by descendant of .light-* etc.
   ────────────────────────────────────────────────────────────────── */
.sidebar-nav a,
.sidebar-nav a:link,
.sidebar-nav a:visited,
.mobile-drawer .sidebar-nav a,
.mobile-drawer .sidebar-nav a:link,
.mobile-drawer .sidebar-nav a:visited{color:#fff;}
/* Yellow CTA pills (dashboard / module switcher) keep their navy text. */
a.sidebar-dashboard-cta,a.sidebar-dashboard-cta:link,a.sidebar-dashboard-cta:visited,
a.drawer-dashboard-cta,a.drawer-dashboard-cta:link,a.drawer-dashboard-cta:visited{color:#1e3a5f !important;}

/* Mobile drawer dashboard CTA — same role, full-width pill at the top of
   the drawer. Adds an arrow + larger tap target for thumb-reach. */
a.drawer-dashboard-cta,a.drawer-dashboard-cta:visited,a.drawer-dashboard-cta:hover,a.drawer-dashboard-cta:active{display:flex !important;align-items:center;gap:14px;margin:12px;padding:16px 18px;background:linear-gradient(135deg,#fbbf24 0%,#f59e0b 60%,#d97706 100%) !important;color:#1e3a5f !important;border-radius:14px;text-decoration:none !important;font-weight:800;box-shadow:0 8px 20px rgba(245,158,11,0.35);position:relative;min-height:64px;}
a.drawer-dashboard-cta .ddcta-icon{font-size:28px;line-height:1;}
a.drawer-dashboard-cta .ddcta-text{flex:1;line-height:1.3;}
a.drawer-dashboard-cta .ddcta-title{font-size:16px;font-weight:900;color:#1e3a5f !important;text-decoration:none !important;}
a.drawer-dashboard-cta .ddcta-sub{font-size:12px;font-weight:600;color:rgba(30,58,95,0.7) !important;margin-top:2px;text-decoration:none !important;}
a.drawer-dashboard-cta .ddcta-badge{background:linear-gradient(135deg,#dc2626,#991b1b) !important;color:#fff !important;font-size:13px;font-weight:800;min-width:28px;height:28px;border-radius:14px;padding:0 9px;display:inline-flex;align-items:center;justify-content:center;box-shadow:0 2px 6px rgba(220,38,38,0.5);}
a.drawer-dashboard-cta .ddcta-arrow{font-size:18px;color:#1e3a5f !important;opacity:0.6;}

/* Pending-action badge on nav items — fed by PendingActionsService::countsByModule */
.nav-pending-badge{margin-inline-start:auto;background:linear-gradient(135deg,#dc2626,#b91c1c);color:#fff;font-size:11px;font-weight:800;min-width:22px;height:20px;border-radius:10px;padding:0 7px;display:inline-flex;align-items:center;justify-content:center;line-height:1;box-shadow:0 2px 6px rgba(220,38,38,0.5);animation:navBadgePulse 2.4s ease-in-out infinite;}
.nav-pending-badge.warn{background:linear-gradient(135deg,#f59e0b,#d97706);box-shadow:0 2px 6px rgba(245,158,11,0.5);animation:none;}
@keyframes navBadgePulse{0%,100%{transform:scale(1);}50%{transform:scale(1.08);}}
/* Module switcher badge — small dot for the bottom row of module pills */
.msb-pending-dot{position:absolute;top:-4px;inset-inline-end:-4px;background:#dc2626;color:#fff;font-size:10px;font-weight:800;min-width:18px;height:18px;border-radius:9px;padding:0 5px;display:inline-flex;align-items:center;justify-content:center;border:2px solid #1e3a5f;box-shadow:0 1px 4px rgba(0,0,0,0.3);}
/* Mobile bottom-nav per-item pending badge — positioned at top-end of the icon */
.bn-pending-badge{position:absolute;top:4px;inset-inline-end:14px;background:linear-gradient(135deg,#dc2626,#b91c1c);color:#fff;font-size:9px;font-weight:800;min-width:16px;height:16px;border-radius:8px;padding:0 4px;display:inline-flex;align-items:center;justify-content:center;border:2px solid #fff;box-shadow:0 2px 4px rgba(220,38,38,0.4);line-height:1;animation:navBadgePulse 2.4s ease-in-out infinite;}
/* Collapsible nav groups — for long sidebars (e.g. Procurement) */
.nav-group{margin:4px 0;}
.nav-group-head{display:flex;align-items:center;gap:8px;padding:10px 20px;cursor:pointer;color:#fde047;font-size:11px;font-weight:900;letter-spacing:1.2px;text-transform:uppercase;text-shadow:0 1px 2px rgba(0,0,0,0.35);user-select:none;transition:background 0.15s;border-radius:6px;margin:0 8px;}
.nav-group-head:hover{background:rgba(255,255,255,0.06);}
.nav-group-head .grp-icon{font-size:14px;}
.nav-group-head .grp-title{flex:1;}
.nav-group-head .grp-arrow{font-size:12px;opacity:0.7;transition:transform 0.2s;}
.nav-group.collapsed .grp-arrow{transform:rotate(-90deg);}
.nav-group-body{padding-right:4px;overflow:hidden;max-height:1200px;opacity:1;transition:max-height 0.28s cubic-bezier(0.4,0,0.2,1),opacity 0.2s;}
.nav-group.collapsed .nav-group-body{max-height:0;opacity:0;pointer-events:none;}
html[dir="ltr"] .nav-group-body{padding-left:4px;padding-right:0;}
.sidebar-footer{padding:16px 20px;border-top:1px solid rgba(255,255,255,.1);}

/* Module switcher pills */
.module-switcher{display:grid;gap:6px;margin-bottom:12px;padding:8px;background:rgba(0,0,0,0.3);border:1px solid rgba(255,255,255,0.1);border-radius:12px;}
.module-switch-btn{text-decoration:none;text-align:center;padding:10px 6px;border-radius:8px;font-size:11px;font-weight:800;transition:all .18s;background:rgba(255,255,255,0.1);color:#ffffff;border:1px solid rgba(255,255,255,0.15);display:flex;flex-direction:column;align-items:center;gap:3px;}
.module-switch-btn:hover{background:rgba(255,255,255,0.2);color:#fff;transform:translateY(-1px);border-color:rgba(255,255,255,0.3);}
.module-switch-btn.active{background:linear-gradient(135deg,var(--msb-bg1,#f59e0b) 0%,var(--msb-bg2,#d97706) 100%);color:#fff;border-color:rgba(255,255,255,0.35);box-shadow:0 6px 16px rgba(0,0,0,0.35),inset 0 1px 0 rgba(255,255,255,0.25);transform:translateY(-1px);}
.module-switch-btn .msb-icon{font-size:20px;line-height:1;}
.module-switch-btn .msb-label{margin-top:3px;line-height:1.2;text-shadow:0 1px 2px rgba(0,0,0,0.4);}
.module-switch-btn.active .msb-label{font-weight:900;}
.sidebar-user{font-size:11px;color:rgba(255,255,255,.82);margin-bottom:10px;word-break:break-all;font-weight:500;}
.sidebar-user strong{color:#fff;display:block;font-size:12.5px;font-weight:700;margin-top:4px;}
.sidebar-actions{display:flex;gap:8px;}
.sidebar-btn{flex:1;background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.25);color:#ffffff;border-radius:8px;padding:8px 10px;font-family:inherit;font-size:12px;font-weight:700;cursor:pointer;transition:.2s;text-align:center;}
.sidebar-btn:hover{background:rgba(255,255,255,.22);border-color:rgba(255,255,255,.4);}
.sidebar-btn.switch{background:rgba(232,160,32,.2);border-color:rgba(232,160,32,.4);color:var(--accent);}

/* MAIN CONTENT */
/* min-width:0 lets the main column shrink instead of forcing the whole shell
   wider than the viewport — the canonical flexbox overflow fix. Applied here
   (shared layout) so EVERY page reflows like a desktop app (Outlook-style)
   when the window is resized / zoomed, with content scrolling inside its own
   containers rather than breaking the page. */
.main-area{margin-right:var(--sidebar-w);flex:1;min-width:0;display:flex;flex-direction:column;min-height:100vh;}
.topbar{background:#fff;padding:10px 20px;display:flex;align-items:center;justify-content:flex-start;gap:10px;border-bottom:1px solid var(--border);box-shadow:0 1px 4px rgba(27,63,114,.06);position:sticky;top:0;z-index:50;overflow:hidden;max-width:100%;}
.topbar-title{font-size:15px;font-weight:700;color:var(--primary);white-space:nowrap;flex-shrink:0;}
/* Controls hug the far (inline-end) edge; never wrap (overflow:hidden on the
   topbar would clip a wrapped second row) — the flexible search shrinks first. */
.topbar-right{display:flex;align-items:center;gap:8px;flex-shrink:0;flex-wrap:nowrap;margin-inline-start:auto;}
/* GLOBAL SEARCH */
.global-search-wrap{flex:1 1 auto;min-width:0;max-width:560px;position:relative;}
#global-search{width:100%;border:1.5px solid var(--border);border-radius:10px;padding:8px 14px;font-size:13px;font-family:inherit;background:var(--surface);transition:.2s;color:var(--text);}
#global-search:focus{outline:none;border-color:var(--primary-mid);background:#fff;box-shadow:0 0 0 3px rgba(42,91,168,.1);}
/* position:fixed (not absolute) so the dropdown escapes the topbar's
   overflow:hidden clip — otherwise results render but are clipped to the
   topbar box and the search looks dead. top/left/width set in JS from the
   input's bounding rect (same pattern as the App-Rail user-menu popover). */
.gs-results{position:fixed;background:#fff;border:1px solid var(--border);border-radius:10px;box-shadow:0 8px 32px rgba(27,63,114,.18);z-index:1500;max-height:380px;overflow-y:auto;display:none;padding:4px;}
.gs-results.open{display:block;}
.search-result-item{display:flex;align-items:center;gap:10px;padding:10px 12px;text-decoration:none;color:var(--text);border-radius:8px;transition:background .15s;border-bottom:1px solid #f0f4fa;}
.search-result-item:last-child{border-bottom:none;}
.search-result-item:hover{background:#f0f4fa;}
.search-result-item .code-cell{flex-shrink:0;font-family:monospace;font-size:11px;background:#e8f0fe;color:#1B3F72;padding:3px 8px;border-radius:6px;font-weight:700;}
.search-result-item>span:nth-child(2){flex:1;font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.search-result-item .badge{flex-shrink:0;font-size:10px;}
.search-empty{padding:20px;text-align:center;color:var(--muted);font-size:13px;}
/* Global search — grouped results */
.gs-group-head{padding:8px 12px 4px;font-size:11px;font-weight:800;color:#475569;text-transform:uppercase;letter-spacing:0.6px;display:flex;align-items:center;gap:6px;background:#f8fafc;border-radius:6px;margin:6px 4px 2px;}
.gs-group-head .gs-group-count{margin-inline-start:auto;background:#e2e8f0;color:#475569;font-size:10px;padding:1px 7px;border-radius:8px;font-weight:700;}
.gs-row{display:flex;align-items:center;gap:10px;padding:9px 12px;text-decoration:none;color:#0f172a;border-radius:7px;transition:background 0.12s;cursor:pointer;}
.gs-row:hover,.gs-row.active{background:#eff6ff;}
.gs-row .gs-row-main{flex:1;min-width:0;}
.gs-row .gs-row-title{font-size:13px;font-weight:600;color:#0f172a;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.gs-row .gs-row-sub{font-size:11px;color:#64748b;margin-top:1px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.gs-row .gs-row-badge{flex-shrink:0;font-size:10px;font-weight:700;color:#475569;background:#f1f5f9;padding:2px 8px;border-radius:8px;border:1px solid #e2e8f0;}
.gs-footer{padding:8px 12px;font-size:11px;color:#94a3b8;text-align:center;border-top:1px solid #f0f4fa;}
.gs-footer kbd{background:#f1f5f9;border:1px solid #cbd5e1;border-radius:4px;padding:1px 5px;font-size:10px;font-family:monospace;color:#475569;}
.gs-item{display:flex;align-items:center;gap:10px;padding:10px 14px;cursor:pointer;border-bottom:1px solid #f0f4fa;transition:.15s;}
.gs-item:last-child{border-bottom:none;}
.gs-item:hover{background:var(--primary-light);}
.gs-code{font-family:monospace;font-size:10px;background:#eef3fb;padding:2px 7px;border-radius:4px;color:var(--primary);border:1px solid #c8d8ec;white-space:nowrap;}
.gs-name{font-size:13px;font-weight:600;color:var(--text);flex:1;}
.gs-meta{font-size:11px;color:var(--muted);white-space:nowrap;}
.gs-empty{padding:20px;text-align:center;color:var(--muted);font-size:13px;}
/* SAVE NOTIFICATION */
.save-notif{font-size:11px;padding:4px 10px;border-radius:20px;font-weight:600;opacity:0;transition:opacity .3s;pointer-events:none;}
.save-notif.saved{background:#d4edda;color:#155724;opacity:1;}
.save-notif.saving{background:#fff3cd;color:#856404;opacity:1;}
.sync-dot{width:8px;height:8px;border-radius:50%;display:inline-block;}
.sync-ok{background:#4CAF50;} .sync-busy{background:#FF9800;animation:pulse .8s infinite;} .sync-err{background:#f44336;}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.3}}
#last-save{font-size:11px;color:var(--muted);}
.topbar-menu-btn{display:none;background:none;border:none;font-size:20px;cursor:pointer;color:var(--primary);padding:4px;}

/* PAGES */
.content-wrap{padding:22px 24px;flex:1;}
.page{display:none;} .page.active{display:block;}

/* BOTTOM NAV (mobile only) */
.bottom-nav{display:none;position:fixed;bottom:0;left:0;right:0;background:#fff;border-top:1px solid var(--border);height:calc(var(--bottom-nav-h) + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);z-index:100;box-shadow:0 -2px 12px rgba(0,0,0,.1);}
.bottom-nav-inner{display:flex;height:100%;}
.bn-item{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;cursor:pointer;color:#475569;font-size:11px;font-weight:700;transition:.15s;border:none;background:none;font-family:inherit;padding:4px 0;position:relative;min-height:44px;-webkit-tap-highlight-color:transparent;letter-spacing:0.1px;}
.bn-item .bn-icon{font-size:21px;line-height:1;transition:.15s;}
.bn-item.active{color:var(--primary);font-weight:800;}
.bn-item.active::after{content:'';position:absolute;top:0;left:50%;transform:translateX(-50%);width:24px;height:3px;background:var(--primary);border-radius:0 0 4px 4px;}
.bn-item.active .bn-icon{transform:scale(1.15);}
.bn-add{background:linear-gradient(135deg,#1B3F72,#2A5BA8);color:#fff!important;border-radius:50%;width:50px;height:50px;margin-top:-14px;box-shadow:0 6px 20px rgba(27,63,114,.5);flex-direction:column;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:.2s;}
.bn-add:active{transform:scale(.95);}
.bn-add .bn-icon{font-size:22px;}

/* MOBILE DRAWER */
.mobile-drawer{position:fixed;inset:0;z-index:200;display:none;}
.mobile-drawer.open{display:block;}
.drawer-backdrop{position:absolute;inset:0;background:rgba(0,0,0,.55);backdrop-filter:blur(2px);}
.drawer-panel{position:absolute;top:0;right:0;width:min(320px,90vw);height:100%;background:linear-gradient(180deg,#0f1e36 0%,#1a2b47 50%,#0f1e36 100%);display:flex;flex-direction:column;padding-top:max(16px,env(safe-area-inset-top));padding-bottom:env(safe-area-inset-bottom);overflow-y:auto;-webkit-overflow-scrolling:touch;box-shadow:-10px 0 40px rgba(0,0,0,0.4);}
html[dir="ltr"] .drawer-panel{right:auto;left:0;box-shadow:10px 0 40px rgba(0,0,0,0.4);}
.drawer-header{padding:8px 20px 16px;border-bottom:1px solid rgba(255,255,255,.1);margin-bottom:8px;}
.drawer-header .title{color:#fff;font-size:14px;font-weight:700;}
.drawer-close{position:absolute;top:14px;left:14px;background:rgba(255,255,255,.12);border:none;color:#fff;width:34px;height:34px;border-radius:50%;font-size:16px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:2;}
.drawer-close:active{background:rgba(255,255,255,.22);}
/* Drawer user header */
.drawer-user{display:flex;align-items:center;gap:12px;padding:18px 20px 16px;margin-top:8px;border-bottom:1px solid rgba(255,255,255,.08);}
.drawer-user-avatar{width:46px;height:46px;border-radius:50%;background:linear-gradient(135deg,var(--accent),#c87d10);color:#fff;font-size:20px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0;box-shadow:0 4px 12px rgba(0,0,0,.25);}
.drawer-user-info{flex:1;min-width:0;}
.drawer-user-name{color:#fff;font-size:14px;font-weight:700;margin-bottom:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.drawer-user-role{font-size:11px;}
/* Drawer quick actions */
.drawer-quick{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:14px 16px 4px;}
.drawer-quick-btn{display:flex;align-items:center;gap:8px;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.12);color:#fff;padding:10px 12px;border-radius:10px;font-size:12px;font-family:inherit;cursor:pointer;transition:.15s;text-decoration:none;text-align:right;min-height:44px;}
.drawer-quick-btn:hover,.drawer-quick-btn:active{background:rgba(255,255,255,.18);border-color:rgba(255,255,255,.25);}
.drawer-quick-btn .dq-icon{font-size:16px;flex-shrink:0;}
.drawer-quick-btn .dq-label{font-weight:600;font-size:11px;line-height:1.3;word-break:break-word;}
.drawer-divider{height:1px;background:rgba(255,255,255,.1);margin:10px 16px;}
/* Drawer footer */
.drawer-footer{margin-top:auto;padding:14px 16px;padding-bottom:max(14px,env(safe-area-inset-bottom));border-top:1px solid rgba(255,255,255,.1);}
.drawer-logout-btn{width:100%;display:flex;align-items:center;justify-content:center;gap:8px;background:rgba(192,57,43,.2);border:1.5px solid rgba(192,57,43,.5);color:#ff8b80;padding:13px 16px;border-radius:12px;font-size:14px;font-weight:700;font-family:inherit;cursor:pointer;transition:.15s;min-height:48px;}
.drawer-logout-btn:hover,.drawer-logout-btn:active{background:rgba(192,57,43,.35);color:#fff;}
/* Drawer module switcher — prominent at top of mobile drawer */
.drawer-module-switcher{padding:14px 16px 6px;}
.drawer-module-switcher .dms-label{font-size:11px;font-weight:800;color:#fbbf24;letter-spacing:1px;margin-bottom:8px;}
.drawer-module-switcher .dms-grid{display:grid;gap:8px;padding:8px;background:rgba(0,0,0,0.28);border:1px solid rgba(255,255,255,0.1);border-radius:14px;}
.drawer-module-switcher .dms-btn{text-decoration:none;text-align:center;padding:14px 6px;border-radius:10px;background:rgba(255,255,255,0.07);color:#f1f5f9;border:1px solid rgba(255,255,255,0.08);transition:all .18s;display:flex;flex-direction:column;align-items:center;gap:5px;min-height:70px;justify-content:center;font-weight:700;font-size:11px;}
.drawer-module-switcher .dms-btn:active{transform:scale(0.96);}
.drawer-module-switcher .dms-btn.active{background:linear-gradient(135deg,var(--dms-bg1,#f59e0b) 0%,var(--dms-bg2,#d97706) 100%);color:#fff;border-color:rgba(255,255,255,0.25);box-shadow:0 8px 20px rgba(0,0,0,0.35),inset 0 1px 0 rgba(255,255,255,0.2);}
.drawer-module-switcher .dms-icon{font-size:24px;line-height:1;}
.drawer-module-switcher .dms-name{font-weight:800;}
.drawer-module-switcher .dms-btn.active .dms-name{letter-spacing:0.3px;}

/* Drawer nav items: bigger on mobile + HIGH contrast for readability */
.mobile-drawer .sidebar-nav{padding:8px 0 20px;}
.mobile-drawer .sidebar-nav .nav-item{min-height:50px;padding:13px 16px;margin:3px 12px;font-size:15px;font-weight:700;color:#f1f5f9;border-radius:10px;letter-spacing:0.2px;}
.mobile-drawer .sidebar-nav .nav-item:active{background:rgba(245,158,11,0.18);transform:scale(0.98);}
.mobile-drawer .sidebar-nav .nav-item.active{color:#fff;font-weight:800;}
.mobile-drawer .sidebar-nav .nav-item .bi-en{color:rgba(255,255,255,0.65);font-weight:500;font-size:11px;}
.mobile-drawer .sidebar-nav .nav-icon{font-size:20px;width:26px;}
.mobile-drawer .sidebar-nav .nav-section{font-size:11px;font-weight:800;padding:16px 20px 6px;color:#fbbf24;letter-spacing:1.5px;}
.mobile-drawer .sidebar-logo{background:linear-gradient(135deg,rgba(245,158,11,0.12) 0%,transparent 60%);}
.mobile-drawer .sidebar-logo .org{color:#fbbf24;font-weight:800;}
.mobile-drawer .sidebar-logo .title{color:#fff;font-weight:800;text-shadow:0 1px 2px rgba(0,0,0,0.4);}
/* Mobile module switcher — bigger touch targets + richer visuals */
.mobile-drawer .sidebar-footer{padding:14px 14px;padding-bottom:max(14px,env(safe-area-inset-bottom));background:linear-gradient(180deg,transparent 0%,rgba(0,0,0,0.2) 100%);border-top:1px solid rgba(255,255,255,.08);}
/* Module switcher — bigger on mobile */
.mobile-drawer .module-switcher{padding:8px;gap:6px;}
.mobile-drawer .module-switch-btn{padding:12px 6px;font-size:11px;}
.mobile-drawer .module-switch-btn .msb-icon{font-size:22px;}

/* ═══════════════ COMPONENTS ═══════════════ */
.stats{display:grid;grid-template-columns:repeat(auto-fill,minmax(100px,1fr));gap:8px;margin-bottom:20px;overflow:hidden;}
.stat{background:#fff;border-radius:10px;padding:12px;border:1px solid var(--border);box-shadow:0 2px 8px rgba(27,63,114,.08);position:relative;overflow:hidden;transition:.2s;}
.stat::before{content:'';position:absolute;top:0;right:0;width:4px;height:100%;background:var(--primary);border-radius:0 12px 12px 0;}
.stat:hover{box-shadow:0 4px 16px rgba(27,63,114,.15);transform:translateY(-1px);}
.stat-label{font-size:10px;color:var(--muted);margin-bottom:6px;font-weight:600;letter-spacing:.2px;line-height:1.3;word-break:break-word;}
.stat-value{font-size:22px;font-weight:700;color:var(--primary);line-height:1;}
.stat-value.green{color:var(--success);}
.stat-value.orange{color:var(--warning);}
.stat-value.accent{color:var(--accent);}
.stat-sub{font-size:10px;color:var(--muted);margin-top:4px;}

.card{background:#fff;border-radius:var(--radius);border:1px solid var(--border);padding:20px;margin-bottom:20px;box-shadow:var(--shadow);}
.card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;padding-bottom:10px;border-bottom:2px solid var(--primary-light);flex-wrap:wrap;gap:8px;}
.card-header h3{font-size:14px;font-weight:700;color:var(--primary);}

.btn{border:none;border-radius:8px;padding:8px 14px;font-size:12px;font-family:inherit;cursor:pointer;font-weight:600;transition:.15s;display:inline-flex;align-items:center;gap:5px;white-space:nowrap;}
.btn-primary{background:var(--primary);color:#fff;} .btn-primary:hover{background:var(--primary-dark);}
.btn-success{background:var(--success);color:#fff;} .btn-success:hover{background:#075c2e;}
.btn-danger{background:var(--danger);color:#fff;font-size:11px;padding:5px 10px;border-radius:6px;}
.btn-warning{background:var(--warning);color:#fff;}
.btn-accent{background:var(--accent);color:#fff;} .btn-accent:hover{background:#c87d10;}
.btn-edit{background:var(--primary-light);color:var(--primary);font-size:11px;padding:5px 10px;border-radius:5px;border:none;cursor:pointer;font-weight:600;}
.btn-print{background:#f0f4ff;color:var(--primary-mid);font-size:11px;padding:5px 10px;border-radius:5px;border:1px solid var(--primary-light);cursor:pointer;font-weight:600;}
.btn-transfer{background:#fff3cd;color:#7a4a00;font-size:11px;padding:5px 10px;border-radius:5px;border:1px solid #f0d080;cursor:pointer;font-weight:600;}
.btn-sm{font-size:12px;padding:6px 14px;}
.btn-outline{background:transparent;border:1.5px solid var(--border);color:var(--text);}
.btn-outline:hover{border-color:var(--primary);color:var(--primary);}

.actions-row{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:16px;max-width:100%;}
.actions-row input,.actions-row select{border:1px solid var(--border);border-radius:8px;padding:7px 10px;font-size:13px;font-family:inherit;background:#fff;box-shadow:var(--shadow);-webkit-appearance:none;max-width:100%;}
.actions-row input{flex:1;min-width:120px;}
.actions-row select{min-width:0;max-width:160px;text-overflow:ellipsis;overflow:hidden;}

/* TABLE */
.table-wrap{overflow-x:auto;border-radius:var(--radius);border:1px solid var(--border);box-shadow:var(--shadow);max-width:100%;}
table{width:100%;border-collapse:collapse;font-size:11px;table-layout:auto;}
/* Universal text-overflow safety net — stops a long unbroken Arabic/English
   string in ANY table cell from blowing up the column widths. Applied to
   every td/th by default; individual cells override with a more permissive
   rule when needed. Keeps PR / RFQ / CBA / PO / GRN / Invoice / Payment
   tables well-contained when users paste long strings without spaces. */
table td, table th {
    word-break: break-word;
    overflow-wrap: anywhere;
}

/* Print rules extracted to /css/print.css (loaded via media="print"). */
thead th{background:var(--primary);color:#fff;padding:8px 6px;text-align:right;font-size:10px;font-weight:600;white-space:nowrap;}
/* Bilingual labels (.bi-en, .bi-en-side, span.bi-en) inside dark table
   headers were inheriting their default dark colour (#1e293b) — illegible
   on the navy background. Force white inside any thead/th regardless of
   the descendant element. */
thead th,
thead th *,
thead th .bi-en,
thead th .bi-en-side,
thead th span.bi-en,
table thead th .bi-ar,
table thead th strong,
table thead th small{color:#fff !important;}

/* ════════════════════════════════════════════════════════════════════
   DARK SURFACE TEXT SWEEP — every dark-background container in the app
   forces its descendant text (Arabic body, English .bi-en sub-labels,
   strong/small/spans) to white. Light-bg surfaces are NOT touched —
   their text colours remain whatever the design intended. The list is
   deliberately enumerated rather than wildcard so future light-bg
   widgets that use the same generic class names don't collateral.
   ════════════════════════════════════════════════════════════════════ */
.sidebar, .sidebar *,
.drawer-panel, .drawer-panel *,
.mobile-drawer .sidebar-nav, .mobile-drawer .sidebar-nav *,
.modern-hero, .modern-hero *,
.mh-wrap, .mh-wrap *,
/* .bottom-nav was here but the bottom-nav has a WHITE background — forcing
   color:#fff !important made every label invisible. The bottom-nav has its
   own colour rules at .bn-item{color:#475569} / .bn-item.active{color:var(--primary)}
   so it doesn't need the dark-surface sweep. (Removed 2026-05-11) */
.notif-head, .notif-head *,
.notif-section-head, .notif-section-head *,
.tb-bar, .tb-bar *,
.ws-card-head, .ws-card-head *,
/* NOTE: .proc-chain-step.done + .current were removed from this list —
   their backgrounds are LIGHT (mint green / cream amber) and the
   original design uses dark green / dark amber text on them. White-on-
   light made the active step's "بانتظار..." labels disappear into the
   yellow background. */
/* Solid-coloured action buttons — navy/green/red/orange/gold backgrounds
   from the design tokens. Their declared `color:#fff` doesn't reach the
   .bi-en sub-label children (which carry their own opaque colour), so
   the bilingual English text used to render near-black on a coloured
   button. Scope to `.btn` so .btn-outline / .btn-edit (light pills with
   coloured text) aren't affected. */
.btn.btn-primary, .btn.btn-primary *,
.btn.btn-success, .btn.btn-success *,
.btn.btn-danger, .btn.btn-danger *,
.btn.btn-warning, .btn.btn-warning *,
.btn.btn-accent, .btn.btn-accent *,
.btn-new-request, .btn-new-request *{color:#fff !important;}

/* Bilingual sub-labels (.bi-en) carry their own opaque colour — restate
   white under every dark surface so they don't fall back to #1e293b. */
.sidebar .bi-en, .sidebar .bi-en-side, .sidebar span.bi-en,
.drawer-panel .bi-en, .drawer-panel .bi-en-side, .drawer-panel span.bi-en,
.mobile-drawer .bi-en, .mobile-drawer .bi-en-side, .mobile-drawer span.bi-en,
.modern-hero .bi-en, .modern-hero .bi-en-side, .modern-hero span.bi-en,
.mh-wrap .bi-en, .mh-wrap .bi-en-side, .mh-wrap span.bi-en,
/* .bottom-nav .bi-en row removed — see comment above the main sweep block. */
.notif-head .bi-en, .notif-head .bi-en-side,
.tb-bar .bi-en, .tb-bar .bi-en-side,
.ws-card-head .bi-en, .ws-card-head .bi-en-side, .ws-card-head span.bi-en,
.btn.btn-primary .bi-en, .btn.btn-primary .bi-en-side, .btn.btn-primary span.bi-en,
.btn.btn-success .bi-en, .btn.btn-success .bi-en-side, .btn.btn-success span.bi-en,
.btn.btn-danger  .bi-en, .btn.btn-danger  .bi-en-side, .btn.btn-danger  span.bi-en,
.btn.btn-warning .bi-en, .btn.btn-warning .bi-en-side, .btn.btn-warning span.bi-en,
.btn.btn-accent  .bi-en, .btn.btn-accent  .bi-en-side, .btn.btn-accent  span.bi-en{color:rgba(255,255,255,0.95) !important;}

/* Carve-outs: yellow / amber gradient pills on dark surfaces are NOT
   "dark backgrounds" — they're light pills sitting on a dark parent.
   Their navy text must survive the sweep. Same for any .stp-count or
   red dot indicators that need to read white-on-red. */
a.sidebar-dashboard-cta, a.sidebar-dashboard-cta *,
a.drawer-dashboard-cta, a.drawer-dashboard-cta *,
.sidebar-dashboard-cta .sdcta-title, .sidebar-dashboard-cta .sdcta-sub,
.drawer-dashboard-cta .ddcta-title, .drawer-dashboard-cta .ddcta-sub{color:#1e3a5f !important;}
.sidebar-tasks .stp-count, .sidebar-dashboard-cta .sdcta-badge,
.drawer-dashboard-cta .ddcta-badge, .notif-section-head .nsh-count{color:#fff !important;}
/* Hero pills are white-bg light pills sitting on the colourful hero — their
   dark text must survive the sweep. Active state uses navy on gold. */
.mh-wrap a.mh-pill, .mh-wrap a.mh-pill:visited, .mh-wrap a.mh-pill:hover{color:#0f172a !important;}
.mh-wrap a.mh-pill.is-active, .mh-wrap a.mh-pill.is-active:visited, .mh-wrap a.mh-pill.is-active:hover{color:#1e3a5f !important;}
/* Light-pastel action buttons (green "download signed" / "call-off" chips using
   the #ecfdf5 mint token with #047857 dark-green text) placed inside the hero
   action row: the dark-surface sweep above forces their text white → invisible
   on the mint background. Restore their intended dark-green text so they read
   on EVERY hero page (agreements / contracts / PO / CBA) — current and future.
   Attribute selector matches the inline style, so no per-button class needed.
   Specificity (0,2,1) beats the `.mh-wrap *` sweep (0,1,0). Same idea as the
   .mh-pill carve-out above. Body-level mint buttons aren't inside .mh-wrap, so
   they're untouched (they read fine on white already). */
.mh-wrap a[style*="#ecfdf5"], .mh-wrap a[style*="#ecfdf5"] *,
.mh-wrap button[style*="#ecfdf5"], .mh-wrap button[style*="#ecfdf5"] *,
.modern-hero a[style*="#ecfdf5"], .modern-hero a[style*="#ecfdf5"] *,
.modern-hero button[style*="#ecfdf5"], .modern-hero button[style*="#ecfdf5"] *{color:#047857 !important;}
tbody tr:nth-child(even){background:#f7f9fd;}
tbody tr:hover{background:var(--primary-light);}
tbody td{padding:7px 6px;border-bottom:1px solid #e6edf7;vertical-align:middle;font-size:11px;max-width:160px;overflow:hidden;text-overflow:ellipsis;}
.empty-row td{text-align:center;padding:40px;color:var(--muted);font-size:14px;}

/* MOBILE ASSET CARDS */
.asset-cards-mobile{display:none;gap:10px;flex-direction:column;}
.asset-card-m{background:#fff;border-radius:14px;border:1px solid var(--border);padding:14px;box-shadow:0 2px 10px rgba(27,63,114,.08);transition:.15s;}
.asset-card-m:active{transform:scale(.99);}
.acm-top{display:flex;align-items:flex-start;gap:10px;margin-bottom:8px;}
.acm-name{font-size:14px;font-weight:700;color:var(--text);margin-bottom:4px;line-height:1.3;}
.acm-meta{display:flex;gap:8px;flex-wrap:wrap;font-size:11px;color:var(--muted);margin-bottom:10px;}
.acm-meta span{display:flex;align-items:center;gap:3px;background:var(--surface);padding:3px 8px;border-radius:20px;}
.acm-actions{display:flex;gap:6px;flex-wrap:wrap;}

.badge{font-size:10.5px;padding:3px 10px;border-radius:20px;font-weight:700;white-space:nowrap;display:inline-block;}
.b-it{background:var(--it-bg);color:var(--it-c);}
.b-fu{background:var(--fu-bg);color:var(--fu-c);}
.b-el{background:var(--el-bg);color:var(--el-c);}
.b-sp{background:var(--sp-bg);color:var(--sp-c);}
.b-kt{background:var(--kt-bg);color:var(--kt-c);}
.b-vo{background:var(--vo-bg);color:var(--vo-c);}
.b-ss{background:var(--ss-bg);color:var(--ss-c);}
.b-fi{background:var(--fi-bg);color:var(--fi-c);}
.b-active{background:#d4edda;color:#155724;}
.b-inactive{background:#e2e3e5;color:#383d41;}
.b-maintenance{background:#fff3cd;color:#856404;}
.b-disposed{background:#f8d7da;color:#721c24;}
.b-donated{background:#e8f5e9;color:#2e7d32;}
.code-cell{font-family:monospace;font-size:11px;background:#eef3fb;padding:3px 8px;border-radius:4px;border:1px solid #c8d8ec;color:var(--primary);white-space:nowrap;}
.type-indicator{display:inline-flex;align-items:center;gap:4px;font-size:10px;padding:2px 8px;border-radius:20px;font-weight:700;}
.type-capital{background:#f3e6ff;color:#5A0A8A;}
.type-noncap{background:#e8f5e9;color:#1b5e20;}
.depr-bar{width:60px;height:5px;background:#e0e8f5;border-radius:3px;overflow:hidden;display:inline-block;vertical-align:middle;margin-right:4px;}
.depr-fill{height:100%;border-radius:3px;}
.depr-good{background:var(--success);} .depr-mid{background:var(--accent);} .depr-low{background:var(--danger);}

/* MODAL */
.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:500;display:none;align-items:center;justify-content:center;padding:16px;padding-top:max(16px,env(safe-area-inset-top));padding-bottom:max(16px,env(safe-area-inset-bottom));-webkit-overflow-scrolling:touch;}
.modal-overlay.open{display:flex;}
.modal{background:#fff;border-radius:14px;padding:28px;width:min(720px,100%);max-height:90vh;overflow-y:auto;box-shadow:0 20px 60px rgba(0,0,0,.25);}
.modal h2{font-size:16px;font-weight:700;color:var(--primary);margin-bottom:20px;padding-bottom:12px;border-bottom:2px solid var(--primary-light);}
.modal-footer{display:flex;gap:10px;justify-content:flex-end;margin-top:20px;padding-top:14px;border-top:1px solid var(--border);flex-wrap:wrap;}
.pw-modal{background:#fff;border-radius:14px;padding:32px;width:min(360px,100%);box-shadow:0 20px 60px rgba(0,0,0,.25);text-align:center;}
.pw-modal h3{font-size:16px;font-weight:700;color:var(--primary);margin-bottom:6px;}
.pw-modal p{font-size:12px;color:var(--muted);margin-bottom:20px;}
.pw-input{width:100%;border:2px solid var(--border);border-radius:8px;padding:12px;font-size:18px;text-align:center;letter-spacing:4px;font-family:monospace;transition:border .2s;}
.pw-input:focus{outline:none;border-color:var(--primary-mid);}
.pw-input.error{border-color:var(--danger);animation:shake .3s;}
.pw-error{font-size:12px;color:var(--danger);margin-top:8px;min-height:16px;}
@keyframes shake{0%,100%{transform:translateX(0)}25%{transform:translateX(-6px)}75%{transform:translateX(6px)}}

/* FORM */
.form-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:12px;margin-bottom:14px;}
.form-section-title{grid-column:1/-1;font-size:12px;font-weight:700;color:var(--primary);background:var(--primary-light);padding:6px 10px;border-radius:6px;margin-top:4px;}
.fg{display:flex;flex-direction:column;gap:4px;}
.fg label{font-size:11px;color:var(--muted);font-weight:600;}
.fg input,.fg select,.fg textarea{border:1px solid var(--border);border-radius:8px;padding:9px 11px;font-size:13px;font-family:inherit;color:var(--text);background:#fafcff;transition:border .2s;}
.fg input:focus,.fg select:focus,.fg textarea:focus{outline:none;border-color:var(--primary-mid);box-shadow:0 0 0 3px rgba(42,91,168,.08);}
.fg textarea{resize:vertical;min-height:58px;}
.fg .hint{font-size:10px;color:var(--muted);margin-top:2px;}

/* ALERT */
.alert{padding:10px 14px;border-radius:8px;font-size:12px;margin-bottom:12px;}
.alert-info{background:#e8f0ff;border:1px solid #a8c0f0;color:var(--primary);}
.alert-warning{background:#fff8e6;border:1px solid #f0d080;color:#7a4a00;}
.alert-success{background:#e8f8ee;border:1px solid #80d0a0;color:var(--success);}
.alert-danger{background:#fde8e8;border:1px solid #f0a0a0;color:#7b0000;}

/* DASHBOARD */
.dash-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px;margin-bottom:20px;}
.dash-card{background:#fff;border-radius:var(--radius);border:1px solid var(--border);padding:20px;box-shadow:var(--shadow);}
.dash-card h4{font-size:11px;color:var(--muted);margin-bottom:14px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;border-bottom:1px solid var(--border);padding-bottom:8px;}
.bar-row{display:flex;align-items:center;gap:8px;margin-bottom:9px;}
.bar-label{width:120px;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:11px;}
.bar-track{flex:1;height:7px;background:#e8f0fa;border-radius:4px;overflow:hidden;}
.bar-fill{height:100%;border-radius:4px;transition:width .6s;}
.bar-count{width:28px;text-align:left;font-weight:700;color:var(--primary);font-size:11px;}
.big-num{font-size:36px;font-weight:700;color:var(--primary);line-height:1;}
.sub-num{font-size:12px;color:var(--muted);margin-top:4px;}

/* LOCATION CARDS */
.location-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px;margin-bottom:20px;}
.loc-card{background:#fff;border-radius:var(--radius);border:1px solid var(--border);padding:18px;box-shadow:var(--shadow);}

/* INVENTORY REMINDER BANNER */
.inv-banner{background:linear-gradient(135deg,#fff8e6,#fff3cd);border:1px solid #f0d080;border-radius:var(--radius);padding:14px 18px;margin-bottom:20px;display:flex;align-items:center;gap:12px;}
.inv-banner .inv-icon{font-size:28px;}
.inv-banner h4{font-size:13px;font-weight:700;color:#7a4a00;margin-bottom:3px;}
.inv-banner p{font-size:12px;color:#5a3000;}
.inv-banner .inv-count{font-size:22px;font-weight:700;color:var(--warning);min-width:40px;text-align:center;}

/* ═══ DARK MODE ═══ */
body.dark-mode {
  --primary:#4A90D9; --primary-mid:#5BA8F0; --primary-light:#1a2d4a; --primary-dark:#2A5BA8;
  --accent:#F0B030; --success:#2ecc71; --danger:#e74c3c; --warning:#f39c12;
  --muted:#8899bb; --border:#2a3a55; --surface:#111827; --white:#1e293b; --text:#e2e8f0;
  --card-bg:#1e293b; --input-bg:#1a2540;
}
body.dark-mode .stat,body.dark-mode .card,body.dark-mode .topbar,body.dark-mode .modal,
body.dark-mode .approval-card,body.dark-mode .rpt-card,body.dark-mode .field-asset-card,
body.dark-mode .asset-card-m,body.dark-mode .wh-item-card,body.dark-mode .loc-card,
body.dark-mode .dash-card,body.dark-mode .field-summary{background:var(--card-bg)!important;border-color:var(--border)!important;color:var(--text)!important;}
body.dark-mode .fg input,body.dark-mode .fg select,body.dark-mode .fg textarea,
body.dark-mode .actions-row input,body.dark-mode .actions-row select,
body.dark-mode #global-search,body.dark-mode .field-search-input{background:var(--input-bg)!important;border-color:var(--border)!important;color:var(--text)!important;}
body.dark-mode tbody tr:nth-child(even){background:#1a2540;}
body.dark-mode tbody tr:hover{background:#1e2d4a;}
body.dark-mode tbody td{border-color:var(--border);}
body.dark-mode .code-cell{background:#1a2d4a;border-color:#2a3a55;color:#7ab3f0;}
body.dark-mode .gs-results{background:#1e293b;border-color:var(--border);}
body.dark-mode .gs-item{border-color:#2a3a55;}
body.dark-mode .gs-item:hover{background:#1a2d4a;}
body.dark-mode .login-card{background:rgba(20,30,55,.97);}
body.dark-mode .login-input{background:#1a2540;color:#e2e8f0;border-color:#2a3a55;}
body.dark-mode .bottom-nav{background:#1e293b;border-color:#2a3a55;}
body.dark-mode .bn-item{color:#6b82a8;}
body.dark-mode .bn-item.active{color:#4A90D9;}
body.dark-mode #toast{background:#2a3a55;}
body.dark-mode .import-drop{background:#1a2540;border-color:#2a3a55;}
body.dark-mode .alert-info{background:#1a2d4a;border-color:#2a4a7a;color:#7ab3f0;}

/* ═══ IMPROVED MOBILE STYLES ═══ */
/* Prevent iOS input zoom */
@media(max-width:768px){
  input,select,textarea{font-size:16px!important;}
  .fg input,.fg select,.fg textarea{font-size:15px!important;}

  /* Minimum touch targets — prevents tiny buttons from being unusable on mobile.
     Overrides inline padding:2px/3px/4px bodges in show pages. */
  .btn,.btn-sm,.btn-outline,.btn-primary,.btn-danger,.btn-success,.btn-warning,
  .actions-row button,.actions-row a,.header-actions a,.header-actions button{
    min-height:38px; padding-top:8px!important; padding-bottom:8px!important;
    padding-inline-start:12px!important; padding-inline-end:12px!important;
    font-size:13px!important;
  }
  .btn .bn-icon,.btn > span{vertical-align:middle;}
  /* But keep bn-add floating button as it is (specific size) */
  .bn-add{min-height:50px;padding:0!important;}
  /* And nav items in sidebar shouldn't be forced */
  .nav-item{min-height:auto;}

  /* Narrow inputs — override max-width on mobile so nothing stays cramped */
  .form-control[style*="max-width:120px"],
  .form-control[style*="max-width:100px"],
  .form-control[style*="max-width:80px"],
  .form-control-sm[style*="max-width:120px"],
  .form-control-sm[style*="max-width:100px"]{max-width:100%!important;}

  /* MOBILE READABILITY OVERRIDES
     Force stronger contrast on all labels, English sub-labels, muted text,
     and secondary UI text. Anything below #555 on white is hard to read on
     bright phone screens outdoors. */
  .bi-en,span.bi-en,.bi-en-side{color:#1e293b!important;font-weight:700!important;font-size:0.85em!important;}
  body.dark-mode .bi-en,body.dark-mode span.bi-en,body.dark-mode .bi-en-side{color:#e2e8f0!important;}
  /* Table cells + form hints + small meta text — never lighter than #475569 */
  td,th,label,.fg label,.form-label{color:#1e293b;}
  .stat-label,.mk-label,.mk-sub,.proc-info-box{color:#334155;}
  .bar-label{color:#1e293b!important;font-weight:600;}
  /* Muted overrides: where --muted is too light on small screens */
  [style*="color:var(--muted)"],.text-muted,.muted{color:#475569!important;}
  /* Bottom nav labels — bolder so they're readable under the icons */
  .bn-item{color:#334155;font-weight:700;}
  .bn-item.active{color:var(--primary);font-weight:800;}
  /* English inside proc-section-title — right next to Arabic, must match weight */
  .proc-section-title .bi-en{color:#334155!important;font-weight:700!important;}
  /* Better scroll performance */
  .content-wrap{overflow-y:auto;-webkit-overflow-scrolling:touch;}
  /* Larger touch targets */
  .btn{min-height:44px;}
  .nav-item{min-height:48px;}
  .field-btn{min-height:52px!important;}
  /* Better modal on iOS */
  .modal{padding-bottom:max(20px,env(safe-area-inset-bottom));}
  /* Pull-to-refresh friendly */
  /* removed overscroll-behavior-y:contain — was blocking scroll on mobile */
  /* Better card shadows on mobile */
  .asset-card-m{box-shadow:0 2px 12px rgba(27,63,114,.12);}
  /* Backup button compact */
  .sidebar-btn.backup{background:rgba(10,123,62,.2);border-color:rgba(10,123,62,.4);color:#4ade80;font-size:10px;}
}
/* Smooth page transitions */
.page.active{animation:fadeIn .2s ease;}
@keyframes fadeIn{from{opacity:.6;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}

/* ═══ MAINTENANCE NOTIFICATION BADGE ═══ */
.maint-badge{background:var(--danger);color:#fff;font-size:9px;font-weight:700;
  padding:1px 6px;border-radius:20px;margin-right:auto;display:inline-block;}
.maint-banner{background:linear-gradient(135deg,#fde8e8,#ffd5d5);border:1px solid #f0a0a0;
  border-radius:var(--radius);padding:12px 16px;margin-bottom:14px;
  display:flex;align-items:center;gap:12px;cursor:pointer;transition:.2s;}
.maint-banner:hover{box-shadow:0 4px 16px rgba(192,57,43,.2);}
.dark-mode-btn{position:relative;width:46px;height:24px;background:var(--primary-light);
  border:1.5px solid var(--border);border-radius:12px;cursor:pointer;
  transition:.3s;flex-shrink:0;display:flex;align-items:center;padding:2px;}
.dark-mode-btn::after{content:'';width:18px;height:18px;border-radius:50%;
  background:var(--primary);transition:.3s;display:block;}
body.dark-mode .dark-mode-btn{background:#2a3a55;}
body.dark-mode .dark-mode-btn::after{transform:translateX(-22px);background:#4A90D9;}

/* Print rules for assets labels/reports/handover extracted to /css/print.css */
#print-labels-area,#print-report-area,#print-handover-area{display:none;}
.labels-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:14px;padding:16px;}
.asset-label{border:2px solid #1B3F72;border-radius:8px;padding:12px;background:#fff;display:flex;flex-direction:column;align-items:center;gap:5px;font-family:'IBM Plex Sans Arabic',Arial;}
.label-org{font-size:8px;font-weight:700;color:#1B3F72;letter-spacing:1px;text-transform:uppercase;}
.label-code{font-size:19px;font-weight:700;color:#1B3F72;font-family:monospace;letter-spacing:2px;}
.label-project{font-size:10px;color:#555;text-align:center;}
.label-divider{width:100%;height:1px;background:#D0DCEF;}

/* HISTORY */
.history-entry{display:flex;gap:12px;padding:10px 0;border-bottom:1px solid #edf2fb;}
.history-entry:last-child{border-bottom:none;}
.h-dot{width:10px;height:10px;border-radius:50%;margin-top:4px;flex-shrink:0;}
.h-dot-status{background:var(--warning);} .h-dot-location{background:var(--primary-mid);}
.h-dot-owner{background:var(--success);} .h-dot-edit{background:var(--muted);}
.h-dot-create{background:var(--accent);} .h-dot-transfer{background:#9C27B0;}
.h-body{flex:1;}
.h-type{font-size:11px;font-weight:700;color:var(--primary);margin-bottom:3px;}
.h-detail{font-size:11px;color:var(--text);}
.h-date{font-size:10px;color:var(--muted);margin-top:2px;}
.h-user{font-size:10px;color:var(--primary-mid);font-weight:600;}

/* PENDING BADGE */
.nav-pending-badge{background:var(--danger);color:#fff;font-size:10px;font-weight:700;padding:1px 7px;border-radius:20px;margin-right:auto;min-width:20px;text-align:center;}
/* APPROVAL TABS */
.approval-tab{border:1.5px solid var(--border);background:#fff;border-radius:8px;padding:7px 16px;font-size:12px;font-family:inherit;cursor:pointer;font-weight:600;color:var(--muted);transition:.15s;}
.approval-tab.active{background:var(--primary);color:#fff;border-color:var(--primary);}
.approval-tab:hover:not(.active){border-color:var(--primary-mid);color:var(--primary);}
.tab-count{background:var(--danger);color:#fff;font-size:10px;font-weight:700;padding:1px 6px;border-radius:10px;margin-right:4px;}
/* APPROVAL CARD */
.approval-card{background:#fff;border:1px solid var(--border);border-radius:var(--radius);padding:16px;margin-bottom:12px;box-shadow:var(--shadow);}
.approval-card.pending{border-right:4px solid var(--warning);}
.approval-card.approved{border-right:4px solid var(--success);}
.approval-card.rejected{border-right:4px solid var(--danger);}
.approval-card-header{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;margin-bottom:10px;flex-wrap:wrap;}
.approval-card-title{font-size:14px;font-weight:700;color:var(--text);}
.approval-card-meta{font-size:11px;color:var(--muted);margin-top:3px;}
.approval-status{font-size:11px;font-weight:700;padding:4px 12px;border-radius:20px;white-space:nowrap;}
.status-pending{background:#fff8e6;color:#7a4a00;}
.status-approved{background:#d4edda;color:#155724;}
.status-rejected{background:#fde8e8;color:#721c24;}
.approval-card-body{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:8px;margin-bottom:12px;}
.approval-info-item{font-size:11px;color:var(--muted);}
.approval-info-item strong{display:block;font-size:12px;color:var(--text);}
.approval-actions{display:flex;gap:8px;flex-wrap:wrap;}
/* DASHBOARD PENDING ALERT */
.pending-alert{background:linear-gradient(135deg,#fff8e6,#fff3cd);border:2px solid #f0a030;border-radius:var(--radius);padding:16px 20px;margin-bottom:20px;display:flex;align-items:center;gap:16px;cursor:pointer;transition:.2s;}
.pending-alert:hover{border-color:var(--warning);box-shadow:0 4px 16px rgba(204,119,0,.2);}
.pending-alert-num{font-size:36px;font-weight:700;color:var(--warning);min-width:48px;text-align:center;line-height:1;}
.pending-alert-text h4{font-size:13px;font-weight:700;color:#7a4a00;margin-bottom:4px;}
.pending-alert-text p{font-size:12px;color:#5a3000;}
/* ROLE PILLS */
.role-pill{font-size:11px;font-weight:700;padding:4px 12px;border-radius:20px;}
.role-admin{background:#f3e6ff;color:#5A0A8A;}
.role-supervisor{background:#e8f0ff;color:#1B3F72;}
.role-warehouse{background:#d4edda;color:#155724;}
.role-user{background:#e2e3e5;color:#383d41;}
/* OWNERSHIP BADGES */
.own-ipv{background:#d4edda;color:#155724;font-size:10px;font-weight:700;padding:2px 9px;border-radius:20px;white-space:nowrap;}
.own-donor{background:#e8f0ff;color:#1B3F72;font-size:10px;font-weight:700;padding:2px 9px;border-radius:20px;white-space:nowrap;}
/* DONATION RECEIPT DOC */
.donation-doc{background:#fff;max-width:720px;margin:0 auto;padding:40px;font-family:'IBM Plex Sans Arabic',Arial,sans-serif;direction:rtl;}
.donation-header{display:flex;justify-content:space-between;align-items:center;border-bottom:3px solid #1B3F72;padding-bottom:14px;margin-bottom:20px;}
.donation-doc-meta{font-size:11px;color:#6B7A99;text-align:left;}
.donation-section-title{font-size:12px;font-weight:700;color:#1B3F72;background:#f0f4fa;padding:6px 12px;border-radius:6px;margin:14px 0 10px;}
.donation-assets-table{width:100%;border-collapse:collapse;font-size:11pt;margin-bottom:16px;}
.donation-assets-table th{background:#1B3F72;color:#fff;padding:8px 10px;text-align:right;font-size:10pt;}
.donation-assets-table td{border:1px solid #ddd;padding:7px 10px;}
.donation-assets-table tr:nth-child(even) td{background:#f7f9fd;}
.donation-assets-table .total-row td{background:#e8f0ff;font-weight:700;color:#1B3F72;}
.donation-sig-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:20px;}
.donation-sig-box{border:1px solid #ccc;border-radius:8px;padding:16px;text-align:center;}
.donation-sig-box .sig-role{font-size:11px;font-weight:700;color:#1B3F72;background:#e8f0ff;padding:4px 10px;border-radius:4px;margin-bottom:12px;}
.donation-sig-box .sig-name{font-size:13px;font-weight:700;margin-bottom:4px;}
.donation-sig-box .sig-org{font-size:11px;color:#6B7A99;margin-bottom:16px;}
.donation-sig-box .sig-line{border-bottom:1px dashed #999;height:40px;margin:0 10px 8px;}
/* OWNERSHIP MODAL */
.ownership-form{display:flex;flex-direction:column;gap:12px;}
/* REPORT CARDS */
.rpt-card{background:#fff;border:1px solid var(--border);border-radius:var(--radius);padding:20px;box-shadow:var(--shadow);transition:.2s;}
.rpt-card:hover{box-shadow:0 6px 24px rgba(27,63,114,.15);transform:translateY(-2px);}
.rpt-card-icon{width:52px;height:52px;border-radius:14px;display:flex;align-items:center;justify-content:center;font-size:26px;margin-bottom:12px;}
.rpt-card-title{font-size:14px;font-weight:700;color:var(--primary);margin-bottom:6px;}
.rpt-card-desc{font-size:12px;color:var(--muted);margin-bottom:14px;line-height:1.5;}
.rpt-card-actions{display:flex;gap:8px;flex-wrap:wrap;}
/* ASSET PHOTO */
.asset-photo-wrap{position:relative;width:60px;height:60px;flex-shrink:0;}
.asset-photo{width:60px;height:60px;border-radius:10px;object-fit:cover;border:2px solid var(--border);}
.asset-photo-placeholder{width:60px;height:60px;border-radius:10px;border:2px dashed var(--border);display:flex;align-items:center;justify-content:center;font-size:22px;background:var(--surface);cursor:pointer;}
.asset-photo-placeholder:hover{border-color:var(--primary-mid);background:var(--primary-light);}
/* PASSWORD CHANGE MODAL */
.pw-change-field{margin-bottom:12px;}
.pw-change-field label{display:block;font-size:11px;color:var(--muted);font-weight:600;margin-bottom:4px;}
.pw-change-field input{width:100%;border:1.5px solid var(--border);border-radius:8px;padding:10px 12px;font-size:14px;font-family:inherit;transition:border .2s;}
.pw-change-field input:focus{outline:none;border-color:var(--primary-mid);box-shadow:0 0 0 3px rgba(42,91,168,.1);}
/* USER MANAGEMENT */
.user-table{width:100%;border-collapse:collapse;font-size:13px;}
.user-table thead th{background:var(--primary);color:#fff;padding:10px 14px;text-align:right;font-size:11px;font-weight:700;}
.user-table tbody td{padding:11px 14px;border-bottom:1px solid var(--border);vertical-align:middle;}
.user-table tbody tr:hover{background:var(--surface);}
.role-pill{display:inline-flex;align-items:center;gap:5px;padding:4px 12px;border-radius:20px;font-size:11px;font-weight:700;cursor:pointer;border:2px solid transparent;transition:.15s;}
.role-pill:hover{opacity:.85;}
.role-admin{background:#fff3cd;color:#7a4a00;border-color:#f0d080;}
.role-supervisor{background:#d4edda;color:#155724;border-color:#a8d5b5;}
.role-warehouse{background:#d4f0ec;color:#004D44;border-color:#80c8c0;}
.role-user{background:#e2e3e5;color:#383d41;border-color:#c0c2c5;}
.role-select{border:1.5px solid var(--border);border-radius:8px;padding:6px 10px;font-size:12px;font-family:inherit;background:#fafcff;cursor:pointer;transition:.2s;}
.role-select:focus{outline:none;border-color:var(--primary-mid);}
.user-avatar{width:36px;height:36px;border-radius:50%;background:linear-gradient(135deg,var(--primary),var(--primary-mid));display:flex;align-items:center;justify-content:center;color:#fff;font-size:14px;font-weight:700;flex-shrink:0;}
.invite-box{background:var(--surface);border:1.5px dashed var(--border);border-radius:var(--radius);padding:20px;margin-top:20px;}
.invite-box h4{font-size:13px;font-weight:700;color:var(--primary);margin-bottom:12px;}
/* DISPOSAL */
.disposal-reason{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:14px;}
.reason-card{border:2px solid var(--border);border-radius:8px;padding:12px;cursor:pointer;text-align:center;transition:.2s;}
.reason-card:hover,.reason-card.selected{border-color:var(--primary-mid);background:var(--primary-light);}
.reason-card .icon{font-size:22px;margin-bottom:6px;}
.reason-card .label{font-size:11px;font-weight:700;color:var(--primary);}

/* IMPORT */
.import-drop{border:2px dashed var(--border);border-radius:10px;padding:36px;text-align:center;cursor:pointer;transition:.2s;background:#fafcff;}
.import-drop:hover,.import-drop.drag{border-color:var(--primary-mid);background:var(--primary-light);}
.import-preview{margin-top:14px;overflow-x:auto;border-radius:8px;border:1px solid var(--border);max-height:260px;overflow-y:auto;}
.import-preview table{min-width:500px;font-size:11px;}
.col-map{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px;margin:14px 0;}
.col-map-item{display:flex;flex-direction:column;gap:4px;}
.col-map-item label{font-size:11px;color:var(--muted);font-weight:600;}
.col-map-item select{border:1px solid var(--border);border-radius:6px;padding:6px 8px;font-size:12px;font-family:inherit;background:#fafcff;}

/* WAREHOUSE */
.wh-item-card{background:#fff;border-radius:var(--radius);border:1px solid var(--border);padding:16px;box-shadow:var(--shadow);display:flex;align-items:center;gap:14px;}
.wh-item-icon{width:44px;height:44px;border-radius:10px;background:var(--primary-light);display:flex;align-items:center;justify-content:center;font-size:22px;flex-shrink:0;}
.wh-item-info{flex:1;}
.wh-item-name{font-size:14px;font-weight:700;color:var(--text);margin-bottom:4px;}
.wh-item-meta{font-size:12px;color:var(--muted);}
.wh-stock{text-align:center;min-width:60px;}
.wh-stock-num{font-size:22px;font-weight:700;color:var(--primary);}
.wh-stock-num.low{color:var(--danger);}
.wh-stock-label{font-size:10px;color:var(--muted);}
.wh-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px;margin-bottom:20px;}
.wh-move-badge-in{background:#d4edda;color:#155724;} .wh-move-badge-out{background:#fde8e8;color:#7b0000;}

/* TRANSFER/HANDOVER */
.handover-doc{background:#fff;max-width:680px;margin:0 auto;padding:40px;font-family:'IBM Plex Sans Arabic',Arial;}
.handover-header{text-align:center;border-bottom:3px solid var(--primary);padding-bottom:16px;margin-bottom:20px;}
.handover-header .org{font-size:11px;font-weight:700;color:var(--primary);letter-spacing:1px;text-transform:uppercase;}
.handover-header .doc-title{font-size:20px;font-weight:700;color:var(--primary);margin-top:8px;}
.handover-header .doc-num{font-size:11px;color:var(--muted);margin-top:4px;}
.handover-table{width:100%;border-collapse:collapse;margin-bottom:16px;}
.handover-table td{border:1px solid #ccc;padding:8px 12px;font-size:12px;}
.handover-table td:first-child{background:#f5f8fd;font-weight:700;color:var(--primary);width:35%;}
.handover-sig{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:20px;}
.sig-box{border:1px solid #ccc;border-radius:8px;padding:16px;text-align:center;}
.sig-box .sig-title{font-size:12px;font-weight:700;color:var(--primary);margin-bottom:12px;}
.sig-box .sig-line{border-bottom:1px dashed #999;margin-bottom:8px;height:40px;}
.sig-box .sig-label{font-size:11px;color:var(--muted);}

/* ═══ FIELD MODE ═══ */
/* QR SCANNER */
#qr-video{border-radius:12px;}
.qr-found-flash{animation:qrflash .4s ease;}
@keyframes qrflash{0%{opacity:1}50%{opacity:.3}100%{opacity:1}}
.field-header{background:linear-gradient(135deg,#1B3F72,#2A5BA8);color:#fff;padding:16px 18px;display:flex;justify-content:space-between;align-items:center;border-radius:var(--radius) var(--radius) 0 0;margin-bottom:0;}
.field-header-title{font-size:16px;font-weight:700;}
.field-header-sub{font-size:11px;color:rgba(255,255,255,.7);margin-top:3px;}
.field-counter{font-size:22px;font-weight:700;color:#fff;text-align:right;}
.field-progress-bar{height:5px;background:rgba(27,63,114,.15);margin-bottom:16px;border-radius:0;}
.field-progress-fill{height:100%;background:linear-gradient(90deg,var(--success),#4CAF50);border-radius:0;transition:width .4s;}
.field-search-wrap{display:flex;gap:8px;margin-bottom:14px;}
.field-search-input{flex:1;border:2px solid var(--border);border-radius:12px;padding:13px 16px;font-size:15px;font-family:inherit;color:var(--text);background:#fff;transition:.2s;}
.field-search-input:focus{outline:none;border-color:var(--primary-mid);box-shadow:0 0 0 4px rgba(42,91,168,.1);}
.field-qr-btn{background:var(--primary);color:#fff;border:none;border-radius:12px;padding:0 18px;font-size:22px;cursor:pointer;}
.field-results{display:flex;flex-direction:column;gap:10px;}
/* Field asset card */
.field-asset-card{background:#fff;border-radius:14px;border:2px solid var(--border);padding:14px 16px;transition:.2s;box-shadow:var(--shadow);}
.field-asset-card.checked-ok{border-color:var(--success);background:#f0fdf4;}
.field-asset-card.checked-maint{border-color:var(--warning);background:#fffbeb;}
.field-asset-card.checked-dispose{border-color:var(--danger);background:#fef2f2;}
.field-asset-top{display:flex;align-items:center;gap:10px;margin-bottom:10px;}
.field-asset-photo{width:48px;height:48px;border-radius:10px;object-fit:cover;border:1px solid var(--border);flex-shrink:0;}
.field-asset-photo-placeholder{width:48px;height:48px;border-radius:10px;background:var(--primary-light);display:flex;align-items:center;justify-content:center;font-size:22px;flex-shrink:0;}
.field-asset-info{flex:1;}
.field-asset-name{font-size:14px;font-weight:700;color:var(--text);line-height:1.3;}
.field-asset-meta{font-size:11px;color:var(--muted);margin-top:3px;}
.field-check-status{font-size:20px;flex-shrink:0;}
/* Action buttons */
.field-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:10px;}
.field-btn-donate{border-color:#7C3AED;color:#7C3AED;}
.field-btn-donate:hover,.field-btn-donate.active{background:#7C3AED;color:#fff;}
.field-btn{border:2px solid;border-radius:10px;padding:10px 6px;font-size:12px;font-family:inherit;font-weight:700;cursor:pointer;text-align:center;transition:.15s;background:#fff;}
.field-btn-ok{border-color:var(--success);color:var(--success);}
.field-btn-ok:hover,.field-btn-ok.active{background:var(--success);color:#fff;}
.field-btn-maint{border-color:var(--warning);color:var(--warning);}
.field-btn-maint:hover,.field-btn-maint.active{background:var(--warning);color:#fff;}
.field-btn-dispose{border-color:var(--danger);color:var(--danger);}
.field-btn-dispose:hover,.field-btn-dispose.active{background:var(--danger);color:#fff;}
/* Field note input */
.field-note-wrap{margin-top:8px;display:flex;gap:6px;}
.field-note-input{flex:1;border:1px solid var(--border);border-radius:8px;padding:7px 10px;font-size:12px;font-family:inherit;color:var(--text);}
.field-note-input:focus{outline:none;border-color:var(--primary-mid);}
.field-photo-btn{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:7px 10px;font-size:14px;cursor:pointer;}
/* Summary */
.field-summary{background:#fff;border-radius:var(--radius);border:1px solid var(--border);padding:20px;margin-top:16px;}
.field-summary h4{font-size:14px;font-weight:700;color:var(--primary);margin-bottom:14px;}
.field-summary-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;}
.field-sum-item{text-align:center;border-radius:10px;padding:16px 8px;font-size:13px;font-weight:600;}
.field-sum-item div:first-child{font-size:28px;font-weight:700;margin-bottom:4px;}
.field-sum-item.green{background:#d4edda;color:#155724;}
.field-sum-item.orange{background:#fff3cd;color:#856404;}
.field-sum-item.red{background:#f8d7da;color:#721c24;}
/* Field region chips */
.field-region-chip{border:2px solid var(--border);background:#fff;border-radius:22px;padding:7px 14px;font-size:12px;font-family:inherit;font-weight:600;cursor:pointer;color:var(--muted);transition:.15s;white-space:nowrap;display:flex;align-items:center;gap:5px;}
.field-region-chip:hover{border-color:var(--primary-mid);color:var(--primary);}
.field-region-chip.active{background:var(--primary);color:#fff;border-color:var(--primary);}
.field-region-chip .chip-count{background:rgba(255,255,255,.25);border-radius:10px;padding:1px 7px;font-size:10px;}
.field-region-chip:not(.active) .chip-count{background:var(--surface);color:var(--muted);}
/* Field mode bottom nav button */
.field-mode-btn{background:linear-gradient(135deg,#0A7B3E,#1a9e54)!important;box-shadow:0 6px 20px rgba(10,123,62,.45)!important;}

/* TOAST */
#toast{position:fixed;bottom:80px;left:50%;transform:translateX(-50%);background:#1a2340;color:#fff;padding:10px 24px;border-radius:10px;font-size:13px;opacity:0;transition:opacity .3s;pointer-events:none;z-index:9000;box-shadow:0 4px 20px rgba(0,0,0,.3);text-align:center;}
#toast.show{opacity:1;}

/* ═══════════════ RESPONSIVE ═══════════════ */
@media(max-width:900px){
  :root{--sidebar-w:200px;}
}
@media(max-width:768px){
  .sidebar{display:none;}
  .main-area{margin-right:0;margin-left:0;padding-bottom:calc(var(--bottom-nav-h) + env(safe-area-inset-bottom) + 16px);}
  .main-area{-webkit-overflow-scrolling:touch;}
  .bottom-nav{display:flex;}
  .topbar-menu-btn{display:flex;}
  .topbar-title{display:none;}
  /* Hide desktop-only items in topbar */
  .tb-desktop-only{display:none!important;}
  /* Topbar layout: tighter on mobile */
  .topbar{padding:8px 12px;gap:8px;}
  .topbar-right{gap:6px;}
  .global-search-wrap{max-width:100%;flex:1;min-width:0;}
  #global-search{padding:9px 12px;font-size:14px;}
  .content-wrap{padding:12px;}
  .modal{padding:16px;}
  .modal-overlay{padding:0;align-items:flex-end;padding-bottom:env(safe-area-inset-bottom);}
  .modal{border-radius:18px 18px 0 0;max-height:94vh;width:100%;}
  .form-grid{grid-template-columns:1fr;}
  /* Legacy pages: hide desktop table only when a .asset-cards-mobile
     alternative is in the same .table-wrap. Pages using .table-responsive
     keep their table with horizontal scroll so they remain usable. */
  .table-wrap table{display:none;}
  .table-wrap{border:none;box-shadow:none;overflow:visible;}
  .asset-cards-mobile{display:flex;}
  .stats{grid-template-columns:repeat(2,1fr);gap:10px;}
  .stat{padding:14px 12px;}
  .stat-value{font-size:22px;}
  .stat-label{font-size:10px;}
  .dash-grid{grid-template-columns:1fr;gap:12px;}
  .location-grid{grid-template-columns:1fr;}
  .disposal-reason{grid-template-columns:1fr;}
  .handover-sig{grid-template-columns:1fr;}
  #toast{bottom:calc(var(--bottom-nav-h) + 16px);}
  .actions-row{flex-wrap:wrap;gap:8px;}
  .actions-row input,.actions-row select{min-width:0;width:100%;}
  /* Better mobile cards */
  .asset-card-m{border-radius:12px;}
  .wh-item-card{flex-wrap:wrap;}
  /* Card headers stack on mobile */
  .card{padding:14px;}
  .card-header{flex-direction:column;align-items:flex-start;gap:10px;}
  .card-header h3{font-size:13px;}
  /* Buttons full-width-friendly when wrapping */
  .btn{padding:10px 14px;}
  /* Notif dropdown: align safely on mobile (RTL aware) */
  #notif-dropdown{left:auto!important;right:0!important;width:min(320px,calc(100vw - 24px))!important;}
  html[dir="ltr"] #notif-dropdown{right:auto!important;left:0!important;}
}
@media(max-width:480px){
  .topbar{padding:8px 10px;gap:6px;}
  .topbar-menu-btn{font-size:22px;padding:6px;}
  .stats{grid-template-columns:1fr 1fr;gap:8px;}
  .stat{padding:12px 10px;}
  .stat-value{font-size:20px;}
  .ms-cards{flex-direction:column;}
  .ms-card{width:100%;max-width:300px;}
  .content-wrap{padding:10px;}
  /* Drawer quick actions: 2 columns stay readable */
  .drawer-quick{grid-template-columns:1fr 1fr;gap:6px;padding:12px 12px 4px;}
  .drawer-quick-btn{padding:9px 10px;font-size:11.5px;}
  /* Modals should never exceed the viewport on a phone */
  .u-modal-dialog,
  dialog[open]{
    max-width:calc(100vw - 20px) !important;
    min-width:auto !important;
    width:calc(100vw - 20px);
    box-sizing:border-box;
  }
  /* Stack multi-column form grids into a single column for thumb-typing */
  .form-grid{grid-template-columns:1fr !important;gap:10px;}
  /* Full-width buttons in modal actions so they're easy to tap */
  .u-modal-actions,
  dialog[open] .btn{width:100%;}
}
@media(max-width:360px){
  .stats{grid-template-columns:1fr;}
  .topbar-right{gap:4px;}
}
/* Horizontal-scroll hint on wide tables — gentle gradient on right edge */
@media(max-width:768px){
  .table-responsive{
    position:relative;
    -webkit-overflow-scrolling:touch;
  }
  .table-responsive::after{
    content:'';
    position:absolute;top:0;right:0;bottom:0;width:20px;
    background:linear-gradient(to left,rgba(0,0,0,.08),transparent);
    pointer-events:none;
  }
}

/* Procurement + Warehouse module classes (.proc-* / .wh-* + .page-header,
   .form-control, .table-responsive, .status-badge.status-*) extracted to
   /css/procurement.css. Kept loaded sitewide via app.blade.php. */

/* ──────────────────────────────────────────────────────────
   Prominent "New Request" button — two-line label, bilingual
   ────────────────────────────────────────────────────────── */
.btn-new-request {
  display: inline-flex; align-items: center; gap: 12px;
  padding: 10px 20px;
  background: linear-gradient(135deg, var(--primary, #1B3F72) 0%, var(--accent, #2A5BA8) 100%);
  color: #fff; text-decoration: none;
  border: 0; border-radius: 10px;
  box-shadow: 0 4px 12px rgba(27,63,114,0.25);
  font-family: inherit;
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}
.btn-new-request:hover {
  transform: translateY(-2px);
  box-shadow: 0 6px 18px rgba(27,63,114,0.35);
  color: #fff;
}
.btn-new-request .btn-icon {
  font-size: 22px; line-height: 1;
  background: rgba(255,255,255,0.2);
  border-radius: 50%;
  width: 36px; height: 36px;
  display: flex; align-items: center; justify-content: center;
}
.btn-new-request .btn-label {
  display: flex; flex-direction: column; line-height: 1.2;
}
.btn-new-request .btn-label strong { font-size: 15px; font-weight: 700; }
.btn-new-request .btn-label small { font-size: 11px; color: rgba(255,255,255,0.95); font-weight: 600; }

/* ═══════════════════════════════════════════════════════
   ASSETS MODULE — Modern UI Refresh (2026-04-19)
   ═══════════════════════════════════════════════════════ */

/* ── Toast Notifications ── */
#toast-container{position:fixed;top:70px;left:50%;transform:translateX(-50%);z-index:9999;display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none;}
.toast{background:#fff;border:1px solid var(--border);border-right:4px solid var(--primary);border-radius:10px;padding:12px 18px;font-size:13px;font-weight:600;box-shadow:0 8px 24px rgba(27,63,114,.18);min-width:220px;max-width:92vw;pointer-events:auto;transition:opacity .3s,transform .3s;animation:toast-in .25s ease-out;}
.toast-success{border-right-color:var(--success);color:#065f46;background:#f0fdf4;}
.toast-error{border-right-color:var(--danger);color:#991b1b;background:#fef2f2;}
.toast-info{border-right-color:var(--primary-mid);color:var(--primary);background:#eff6ff;}
.toast-warning{border-right-color:var(--warning);color:#7a4a00;background:#fff8e1;}
@keyframes toast-in{from{opacity:0;transform:translateY(-10px);}to{opacity:1;transform:translateY(0);}}

/* ── Breadcrumbs ── */
.breadcrumb{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--muted);margin-bottom:8px;flex-wrap:wrap;}
.breadcrumb a{color:var(--primary-mid);text-decoration:none;font-weight:600;}
.breadcrumb a:hover{text-decoration:underline;}
.breadcrumb-sep{color:var(--border);}
.breadcrumb .current{color:var(--text);font-weight:700;}

/* ── Asset Detail Page — Tabs ── */
.asset-show-tabs{display:flex;gap:4px;background:#fff;border:1px solid var(--border);border-radius:var(--radius);padding:4px;margin-bottom:14px;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;}
.asset-show-tabs::-webkit-scrollbar{display:none;}
.asset-tab{flex:1;min-width:max-content;padding:10px 16px;border-radius:8px;font-size:13px;font-weight:700;color:var(--muted);cursor:pointer;border:none;background:transparent;font-family:inherit;transition:.15s;white-space:nowrap;display:flex;align-items:center;gap:6px;justify-content:center;}
.asset-tab:hover{background:var(--surface);color:var(--text);}
.asset-tab.active{background:var(--primary);color:#fff;box-shadow:0 2px 8px rgba(27,63,114,.2);}
.asset-tab-content{display:none;}
.asset-tab-content.active{display:block;animation:tab-fade .2s ease-out;}
@keyframes tab-fade{from{opacity:0;transform:translateY(4px);}to{opacity:1;transform:translateY(0);}}

/* ── Info Grid (for read-only detail display) ── */
.info-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px;}
.info-cell{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:10px 12px;}
.info-cell-label{font-size:11px;color:var(--muted);font-weight:600;margin-bottom:3px;display:flex;align-items:center;gap:4px;}
.info-cell-value{font-size:14px;color:var(--text);font-weight:700;word-break:break-word;}
.info-cell-value.muted{color:var(--muted);font-weight:500;}
.info-cell.wide{grid-column:1/-1;}

/* ── Asset Hero Card (top of show page) ── */
.asset-hero{background:linear-gradient(135deg,var(--primary) 0%,var(--primary-mid) 100%);color:#fff;border-radius:var(--radius);padding:16px 20px;margin-bottom:14px;display:flex;align-items:center;gap:14px;flex-wrap:wrap;box-shadow:var(--shadow);}
.asset-hero-photo{width:72px;height:72px;border-radius:12px;object-fit:cover;border:2px solid rgba(255,255,255,.3);flex-shrink:0;background:rgba(255,255,255,.1);display:flex;align-items:center;justify-content:center;font-size:32px;}
.asset-hero-info{flex:1;min-width:200px;}
.asset-hero-code{display:inline-block;background:rgba(255,255,255,.2);padding:3px 10px;border-radius:6px;font-size:12px;font-weight:700;font-family:'Courier New',monospace;margin-bottom:4px;}
.asset-hero-name{font-size:18px;font-weight:700;margin-bottom:2px;}
.asset-hero-sub{font-size:12px;color:rgba(255,255,255,0.95);font-weight:500;display:flex;gap:10px;flex-wrap:wrap;}
.asset-hero-actions{display:flex;gap:6px;flex-wrap:wrap;}
.asset-hero-actions .btn{background:rgba(255,255,255,.18);color:#fff;border:1px solid rgba(255,255,255,.3);}
.asset-hero-actions .btn:hover{background:rgba(255,255,255,.28);}

/* ── Filter Chips (active filters row) ── */
.filter-chips-row{display:flex;flex-wrap:wrap;gap:6px;align-items:center;}
.filter-chip{display:inline-flex;align-items:center;gap:6px;background:#fff;border:1px solid var(--primary-light);color:var(--primary);padding:5px 4px 5px 12px;border-radius:16px;font-size:12px;font-weight:600;}
.filter-chip .chip-remove{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;background:var(--primary-light);color:var(--primary);text-decoration:none;font-weight:700;font-size:13px;line-height:1;transition:.15s;}
.filter-chip .chip-remove:hover{background:var(--danger);color:#fff;}
.filter-chips-clear{background:transparent;border:1px dashed var(--danger);color:var(--danger);padding:4px 10px;border-radius:16px;font-size:11px;font-weight:600;font-family:inherit;cursor:pointer;text-decoration:none;display:inline-block;}
.filter-chips-clear:hover{background:var(--danger);color:#fff;}

/* ── Bulk Action Bar (enhanced) ── */
.bulk-action-bar{position:sticky;top:60px;z-index:50;background:linear-gradient(135deg,var(--primary) 0%,var(--primary-mid) 100%);color:#fff;padding:10px 16px;border-radius:var(--radius);margin-bottom:12px;display:none;align-items:center;gap:10px;flex-wrap:wrap;box-shadow:0 6px 20px rgba(27,63,114,.3);}
.bulk-action-bar.show{display:flex;}
.bulk-action-bar .bulk-count{background:var(--accent);color:#1a2340;padding:3px 10px;border-radius:12px;font-weight:700;font-size:12px;}
.bulk-action-bar select,.bulk-action-bar input{padding:6px 10px;border-radius:6px;border:none;font-family:inherit;font-size:12px;background:#fff;color:var(--text);}
.bulk-action-bar .btn{font-size:12px;padding:6px 14px;}

/* ── Empty States (consistent across pages) ── */
.empty-state{text-align:center;padding:40px 20px;color:var(--muted);background:#fff;border:2px dashed var(--border);border-radius:var(--radius);margin:12px 0;}
.empty-state-icon{font-size:42px;margin-bottom:10px;opacity:.5;}
.empty-state-title{font-size:15px;font-weight:700;color:var(--text);margin-bottom:4px;}
.empty-state-desc{font-size:12px;color:var(--muted);margin-bottom:12px;}
.empty-state .btn{margin-top:4px;}

/* ── Enhanced Asset Card (mobile) ── */
.asset-card-m.enhanced{padding:14px;cursor:pointer;}
.asset-card-m.enhanced:hover{box-shadow:0 4px 16px rgba(27,63,114,.15);border-color:var(--primary-light);}
.asset-card-m .acm-code-row{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;gap:8px;}
.asset-card-m .acm-body{display:flex;gap:12px;align-items:flex-start;}
.asset-card-m .acm-photo{width:56px;height:56px;border-radius:10px;object-fit:cover;border:1px solid var(--border);flex-shrink:0;background:var(--surface);display:flex;align-items:center;justify-content:center;font-size:24px;}
.asset-card-m .acm-details{flex:1;min-width:0;}
.asset-card-m .acm-name{font-size:14px;font-weight:700;color:var(--text);margin-bottom:4px;line-height:1.3;}
.asset-card-m .acm-meta{display:flex;flex-wrap:wrap;gap:6px;font-size:11px;color:var(--muted);margin-top:4px;}
.asset-card-m .acm-meta span{display:inline-flex;align-items:center;gap:3px;}
.asset-card-m .acm-actions{display:flex;gap:6px;flex-wrap:wrap;margin-top:10px;padding-top:10px;border-top:1px solid var(--border);}

/* ── Timeline (history + audit) ── */
.timeline{position:relative;padding:10px 0;}
.timeline::before{content:'';position:absolute;right:18px;top:10px;bottom:10px;width:2px;background:var(--primary-light);}
.timeline-item{position:relative;padding:8px 48px 8px 0;margin-bottom:8px;}
.timeline-item .tl-dot{position:absolute;right:10px;top:14px;width:18px;height:18px;border-radius:50%;background:#fff;border:3px solid var(--primary-mid);z-index:1;}
.timeline-item.create .tl-dot{border-color:var(--success);}
.timeline-item.edit .tl-dot{border-color:var(--primary-mid);}
.timeline-item.transfer .tl-dot{border-color:var(--accent);}
.timeline-item.status .tl-dot{border-color:var(--warning);}
.timeline-item.location .tl-dot{border-color:#7C3AED;}
.timeline-item .tl-body{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:10px 12px;}
.timeline-item .tl-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px;gap:8px;flex-wrap:wrap;}
.timeline-item .tl-type{font-size:11px;font-weight:700;color:var(--primary);text-transform:uppercase;letter-spacing:.5px;}
.timeline-item .tl-time{font-size:11px;color:var(--muted);}
.timeline-item .tl-detail{font-size:13px;color:var(--text);}
.timeline-item .tl-change{font-size:12px;color:var(--muted);margin-top:4px;}
.timeline-item .tl-change .arrow{color:var(--accent);font-weight:700;margin:0 4px;}
.timeline-item .tl-user{font-size:11px;color:var(--muted);margin-top:4px;}

/* ── Attachment Card ── */
.attachment-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:10px;}
.attachment-card{background:#fff;border:1px solid var(--border);border-radius:10px;padding:12px;display:flex;gap:10px;align-items:center;transition:.15s;}
.attachment-card:hover{border-color:var(--primary-light);box-shadow:0 4px 12px rgba(27,63,114,.08);}
.attachment-card .att-icon{width:40px;height:40px;border-radius:8px;background:var(--primary-light);color:var(--primary);display:flex;align-items:center;justify-content:center;font-size:20px;flex-shrink:0;}
.attachment-card .att-info{flex:1;min-width:0;}
.attachment-card .att-title{font-size:13px;font-weight:700;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.attachment-card .att-meta{font-size:11px;color:var(--muted);margin-top:2px;}
.attachment-card .att-actions{display:flex;gap:4px;flex-shrink:0;}

/* ── Reason Cards (disposal modal etc.) ── */
.reason-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:8px;margin:10px 0;}
.reason-card{background:var(--surface);border:2px solid var(--border);border-radius:var(--radius);padding:12px 10px;text-align:center;cursor:pointer;transition:.15s;font-family:inherit;font-size:12px;}
.reason-card:hover{border-color:var(--primary-mid);background:#fff;}
.reason-card.selected{border-color:var(--primary);background:var(--primary-light);}
.reason-card .rc-icon{font-size:24px;display:block;margin-bottom:4px;}
.reason-card .rc-label{font-weight:700;color:var(--text);}

/* ── Modern Form Field ── */
.mf-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px;}
.mf-grid.two-col{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));}
.mf{display:flex;flex-direction:column;gap:4px;}
.mf label{font-size:12px;font-weight:700;color:var(--text);display:flex;align-items:center;gap:4px;}
.mf label .required-star{color:var(--danger);}
.mf-hint{font-size:11px;color:var(--muted);margin-top:2px;}
.mf-section{background:#fff;border:1px solid var(--border);border-radius:var(--radius);padding:14px;margin-bottom:12px;box-shadow:var(--shadow);}
.mf-section-title{font-size:13px;font-weight:700;color:var(--primary);margin-bottom:12px;padding-bottom:8px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:6px;}

/* Mobile tweaks for new components */
@media(max-width:600px){
  .asset-show-tabs{padding:3px;gap:2px;}
  .asset-tab{padding:8px 10px;font-size:12px;}
  .asset-hero{padding:14px;gap:10px;}
  .asset-hero-photo{width:56px;height:56px;font-size:26px;}
  .asset-hero-name{font-size:16px;}
  .info-grid{grid-template-columns:1fr 1fr;gap:8px;}
  .info-cell{padding:8px 10px;}
  .info-cell-value{font-size:13px;}
  .attachment-list{grid-template-columns:1fr;}
  .reason-grid{grid-template-columns:repeat(2,1fr);}
  #toast-container{top:60px;left:8px;right:8px;transform:none;}
  .toast{min-width:0;width:100%;}
  .bulk-action-bar{top:0;border-radius:0;}
}

/* ─── PR item description cells: dual-language stacked editor ────────
   Two textareas (AR required + EN optional) inside a single grid cell,
   each wrapped in its own bordered card with a coloured flag tag so
   the user can never confuse which language they're typing. */
.pr-desc-block{
  border:1.5px solid var(--border);
  border-radius:8px;
  padding:0;
  margin-bottom:8px;
  background:#fff;
  overflow:hidden;
  transition:border-color .15s ease, box-shadow .15s ease;
}
.pr-desc-block:last-child{margin-bottom:0;}
.pr-desc-block:focus-within{border-color:var(--primary-mid); box-shadow:0 0 0 3px rgba(42,91,168,0.12);}
.pr-desc-tag{
  display:flex;
  align-items:center;
  gap:6px;
  padding:5px 10px;
  font-size:11px;
  font-weight:700;
  letter-spacing:0.3px;
  border-bottom:1px solid var(--border);
  user-select:none;
}
.pr-desc-tag-flag{font-size:14px;line-height:1;}
.pr-desc-tag-ar{background:linear-gradient(90deg,#eaf2ff,#f5f9ff);color:var(--primary-dark);}
.pr-desc-tag-en{background:linear-gradient(90deg,#fff7e6,#fffbf0);color:#92400e;}
.pr-desc-block.pr-desc-ar{border-color:#bcd2f0;}
.pr-desc-block.pr-desc-en{border-color:#e8c885;}
.pr-desc-block.pr-desc-ar:focus-within{border-color:var(--primary);}
.pr-desc-block.pr-desc-en:focus-within{border-color:#d97706;}
.pr-desc-req{
  margin-inline-start:auto;
  background:#dc2626;color:#fff;
  font-size:10px;font-weight:800;
  padding:2px 7px;border-radius:4px;
  letter-spacing:0;
}
.pr-desc-opt{
  margin-inline-start:auto;
  background:#94a3b8;color:#fff;
  font-size:10px;font-weight:700;
  padding:2px 7px;border-radius:4px;
  letter-spacing:0;
}
.pr-desc-free{
  background:rgba(15,23,42,0.06);
  color:var(--muted);
  font-size:10px;font-weight:600;
  padding:2px 7px;border-radius:4px;
  letter-spacing:0;
}
.pr-desc-block textarea{
  border:0!important;
  border-radius:0!important;
  width:100%;
  resize:vertical;
  min-height:46px;
  padding:8px 10px;
  font-size:13px;
  background:transparent;
  outline:none;
}
.pr-desc-block textarea:focus{box-shadow:none!important;}
.pr-desc-block .pr-desc-ta{font-family:'Noto Sans Arabic',Arial,sans-serif;direction:rtl;text-align:right;}
.pr-desc-block .pr-desc-ta-en{font-family:'Segoe UI','Helvetica Neue',Arial,sans-serif;direction:ltr;text-align:left;color:#1e293b;}
.pr-desc-block .pr-desc-ta-en::placeholder{color:#94a3b8;font-style:italic;}
.pr-desc-block .pr-desc-ta::placeholder{color:#94a3b8;}

/* Department picker — visible dropdown + free-text input working in tandem.
   The select copies its choice into the text on change; the text input is
   the actual form-submitted field, so users can also type freely. */
.dept-picker{display:flex;gap:8px;flex-wrap:wrap;}
.dept-picker .dept-picker-select{flex:1 1 200px;min-width:180px;background:linear-gradient(180deg,#f5f9ff,#ffffff);}
.dept-picker .dept-picker-text{flex:1 1 220px;min-width:200px;}
@media (max-width:520px){
  .dept-picker{flex-direction:column;}
  .dept-picker .dept-picker-select,
  .dept-picker .dept-picker-text{flex:1 1 auto;}
}

/* ═════════════════════════════════════════════════════════════════════════
   IPV — Universal mobile overflow safety net (2026-05-13)
   ═════════════════════════════════════════════════════════════════════════

   Problem: pre-existing protections were scoped to body.ds-page, leaving
   non-DS pages (Zoho inline-sign, legacy views, modals) to burst when
   any inline-styled descendant exceeded the viewport width. PR show
   itself still broke on some phones because:
     • inline-styled min-width:200px flex items don't shrink below their
       declared floor when wrapping is blocked
     • bare <table> elements without .table-responsive wrappers extend
       beyond viewport when content is long
     • absolute-positioned decorations on hero banners
     • long unbroken URLs / monospace badges / file paths

   Strategy: catch these classes of overflow at the framework level so we
   never have to patch a specific page again.

   Why overflow-x:clip over hidden:
     • `clip` truly clips — creates NO scroll context, so JS can't
       accidentally scrollIntoView() to a hidden offset
     • Wider support since 2022 (Chrome 90+, Firefox 81+, Safari 16+)
     • Fallback to `hidden` for older Safari — both rules cascade
   ═════════════════════════════════════════════════════════════════════════ */

@media (max-width: 768px) {
    /* Page-level: belt-and-suspenders clamp.
       html/body already have overflow-x:hidden globally (line 50, 96) —
       this re-asserts with !important + max-width to win any cascade
       fight from inline styles or per-page <style> blocks. */
    html, body {
        max-width: 100vw !important;
        overflow-x: hidden !important;
        overflow-x: clip !important;   /* progressive enhancement */
        position: relative;             /* ensure containment for fixed children */
    }
    /* Main content area: re-clamp so any sticky/fixed descendant doesn't
       escape via its containing-block resolution. */
    main, #main-area, .main-content {
        max-width: 100vw !important;
        overflow-x: hidden;
        overflow-x: clip;
    }

    /* ─── THE CANONICAL FIX for flex/grid overflow ─────────────────────
       Every flex/grid child has an implicit `min-width: auto` (based on
       content's intrinsic size) which prevents the child from shrinking
       below its content width. This is what causes flex containers with
       `flex-wrap: wrap` to STILL not wrap when children are too wide —
       the children refuse to shrink, so the parent overflows.
       Setting min-width:0 explicitly defeats the implicit auto, letting
       flex containers shrink + wrap properly.
       (Skip a small set of elements that NEED their content's intrinsic
        width: native form controls + the topbar/sidebar/drawer chrome.) */
    body *:not(input):not(select):not(textarea):not(button):not(.topbar):not(.sidebar):not(.drawer-panel):not(.bottom-nav):not(.modal-overlay):not(.proc-chain-step):not(.proc-chain) {
        min-width: 0;
    }

    /* Cap inline-styled min-width on common offenders */
    [style*="min-width:200px"], [style*="min-width: 200px"],
    [style*="min-width:220px"], [style*="min-width: 220px"],
    [style*="min-width:240px"], [style*="min-width: 240px"],
    [style*="min-width:280px"], [style*="min-width: 280px"],
    [style*="min-width:300px"], [style*="min-width: 300px"],
    [style*="min-width:360px"], [style*="min-width: 360px"] {
        min-width: 0 !important;
        max-width: 100%;
    }

    /* ─── Action toolbars: switch from wrap to scroll-within ──────────
       Common pattern across the app: a flex row of action buttons. When
       buttons are bilingual (Arabic + English) with `white-space:nowrap`,
       the row's intrinsic width far exceeds 375px. `flex-wrap:wrap` was
       SUPPOSED to handle this but doesn't on every render path (sticky
       parents, transformed parents, transforms can break wrap calc).
       Solution: turn the toolbar into a horizontal scroller. Buttons
       stay in one row, the user swipes within the toolbar to reach the
       rightmost action — page itself NEVER overflows. */
    .page-header,
    [class*='-actions-wrap'],
    [class*='actionbar'],
    .ds-pr-actions-wrap,
    .ds-pr-actions {
        max-width: 100% !important;
        overflow-x: auto !important;
        -webkit-overflow-scrolling: touch;
        scrollbar-width: thin;
    }
    /* Inside the scrollable toolbar, force children to NOT wrap so the
       scroll behavior is predictable. Wrapping was producing weird
       half-stacked rows on certain widths. */
    .page-header .header-actions,
    .ds-pr-actions,
    [class*='actionbar'] > * {
        flex-wrap: nowrap !important;
        flex-shrink: 0;
    }
    /* Children of toolbars never shrink either (they keep their content
       width but live inside the scrollable parent). */
    .page-header .header-actions > *,
    .ds-pr-actions > *,
    [class*='actionbar'] > * > * {
        flex-shrink: 0 !important;
    }
    /* Hide horizontal scrollbar on iOS/Android (still scrollable by touch) */
    .page-header::-webkit-scrollbar,
    .ds-pr-actions-wrap::-webkit-scrollbar,
    .ds-pr-actions::-webkit-scrollbar {
        height: 0;
        background: transparent;
    }

    /* Hero cards / sections / modal bodies — clamp box-sizing */
    .proc-section, .ds-card, .modern-hero,
    .modal-overlay .modal, .modal,
    [class*='-hero'], section.proc-section,
    .pr-prereview-grid {
        max-width: 100% !important;
        box-sizing: border-box;
    }

    /* Bare tables outside .table-responsive / .table-wrap */
    main table:not(.table-responsive table):not(.table-wrap table):not(.bid-grid),
    .main-content table:not(.table-responsive table):not(.table-wrap table):not(.bid-grid) {
        max-width: 100%;
    }

    /* Long text: break gracefully */
    p, li, blockquote, dt, dd, td, th, label, h1, h2, h3, h4, h5, h6 {
        overflow-wrap: anywhere;
        word-break: break-word;
    }

    /* Pre/code/kbd: scroll within, never burst */
    pre, code, kbd, samp {
        max-width: 100%;
        overflow-x: auto;
        word-break: normal;
    }

    /* Iframes (Zoho sign, print previews) */
    iframe {
        max-width: 100%;
    }
}

/* ═════════════════════════════════════════════════════════════════════════
   Nuclear fallback — added by JS (app.js#detectAndClampMobileOverflow) when
   the static safety net above fails to contain a rogue element. JS walks
   the DOM, logs the offender to console for later fix, then adds this
   class to body. Every direct descendant of main/section/proc-section
   gets clamped to viewport width. Skipped: elements that legitimately
   scroll (table-responsive, proc-chain, action toolbars) so swipe still
   works inside them.
   ═════════════════════════════════════════════════════════════════════════ */
@media (max-width: 768px) {
    body.ipv-mobile-overflow-clamp main *,
    body.ipv-mobile-overflow-clamp #main-area *,
    body.ipv-mobile-overflow-clamp .main-content * {
        max-width: 100vw !important;
        box-sizing: border-box;
    }
    body.ipv-mobile-overflow-clamp main .table-responsive,
    body.ipv-mobile-overflow-clamp main .table-wrap,
    body.ipv-mobile-overflow-clamp main .proc-chain,
    body.ipv-mobile-overflow-clamp main .page-header,
    body.ipv-mobile-overflow-clamp main .ds-pr-actions-wrap,
    body.ipv-mobile-overflow-clamp main .ds-pr-actions,
    body.ipv-mobile-overflow-clamp main [class*='actionbar'] {
        max-width: 100% !important;
        overflow-x: auto !important;
    }
}

/* DS Design System v2 (.ds-* + body.ds-page + JetBrains Mono import)
   extracted to /css/ds.css 2026-05-07 (Architectural #4: per-module split). */
