/* ============================================================================
   modern.css — global "modern overlay" loaded AFTER the existing theme CSS.
   Goal: bring a 2025-era, mobile-first feel across the whole product without
   touching every individual view.  Works in light + dark mode (we follow
   .dark-theme already set on <html>) and reshapes the layout for tablets,
   phones and the Capacitor hybrid app (.capacitor-app is set at boot by
   modern.js).

   Conventions:
     - All design tokens live as CSS custom properties under :root / .dark-theme
       so any view can read them with var(--…).
     - We only override common building blocks (.card, .btn, .form-control,
       .sidebar, .navbar, .modal …).  Existing custom styles in individual
       views keep working.
     - Touch targets ≥ 44px on mobile (Apple HIG / Material guidance).
     - iOS safe-area insets handled with env(safe-area-inset-*).
     - Bottom nav is rendered by mobile_bottom_nav.php and only visible
       below 992px.
   ============================================================================ */

/* ── Design tokens ─────────────────────────────────────────────────────── */
:root {
  /* Surface scale */
  --app-bg:           #f8fafc;
  --app-surface:      #ffffff;
  --app-surface-2:    #f1f5f9;
  --app-surface-3:    #e2e8f0;
  --app-border:       #e5e7eb;
  --app-border-soft:  #f1f5f9;
  --app-overlay:      rgba(15, 23, 42, .45);

  /* Text scale */
  --app-text:         #0f172a;
  --app-text-2:       #1f2937;
  --app-muted:        #64748b;
  --app-muted-2:      #94a3b8;

  /* Brand / state colours */
  --app-accent:       #2563eb;       /* blue-600 */
  --app-accent-soft:  #dbeafe;       /* blue-100 */
  --app-accent-2:     #1d4ed8;
  --app-success:      #16a34a;
  --app-warning:      #d97706;
  --app-danger:       #dc2626;

  /* Spacing scale */
  --space-1: 4px;
  --space-2: 8px;
  --space-3: 12px;
  --space-4: 16px;
  --space-5: 24px;
  --space-6: 32px;
  --space-7: 48px;

  /* Radii */
  --r-xs: 6px;
  --r-sm: 8px;
  --r-md: 12px;
  --r-lg: 16px;
  --r-pill: 999px;

  /* Shadows */
  --sh-1: 0 1px 2px rgba(15, 23, 42, .04), 0 1px 1px rgba(15, 23, 42, .02);
  --sh-2: 0 4px 14px rgba(15, 23, 42, .08);
  --sh-3: 0 16px 40px rgba(15, 23, 42, .14);

  /* Type */
  --font-sans: "Inter", "Roboto", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
  --font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;

  /* Header / sidebar dimensions */
  --header-h: 60px;
  --sidebar-w: 240px;
  --sidebar-collapsed-w: 72px;
  --bottom-nav-h: 64px;

  /* Motion */
  --ease: cubic-bezier(.2, .8, .2, 1);
  --t-fast: 140ms;
  --t-med:  220ms;

  /* iOS safe areas */
  --safe-top:    env(safe-area-inset-top, 0px);
  --safe-bottom: env(safe-area-inset-bottom, 0px);
  --safe-left:   env(safe-area-inset-left, 0px);
  --safe-right:  env(safe-area-inset-right, 0px);
}

html.dark-theme,
[data-bs-theme="dark"],
.dark-theme {
  --app-bg:           #0b1220;       /* very dark slate */
  --app-surface:      #111827;       /* slate-900 */
  --app-surface-2:    #1f2937;       /* slate-800 */
  --app-surface-3:    #374151;       /* slate-700 */
  --app-border:       #1f2937;
  --app-border-soft:  #1a2330;
  --app-overlay:      rgba(0, 0, 0, .55);

  --app-text:         #f3f4f6;
  --app-text-2:       #e5e7eb;
  --app-muted:        #9ca3af;
  --app-muted-2:      #6b7280;

  --app-accent:       #3b82f6;
  --app-accent-soft:  #1e293b;
  --app-accent-2:     #60a5fa;

  --sh-1: 0 1px 2px rgba(0, 0, 0, .25);
  --sh-2: 0 4px 14px rgba(0, 0, 0, .35);
  --sh-3: 0 16px 40px rgba(0, 0, 0, .55);
}

/* ── Base typography & body ────────────────────────────────────────────── */
html, body {
  font-family: var(--font-sans);
  background: var(--app-bg) !important;
  color: var(--app-text);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
  font-feature-settings: "cv02", "cv11";
}
body {
  /* Stop iOS bounce inside the hybrid app */
  overscroll-behavior-y: contain;
  padding-top:    var(--safe-top);
  padding-left:   var(--safe-left);
  padding-right:  var(--safe-right);
}
h1, h2, h3, h4, h5, h6 { color: var(--app-text); font-weight: 700; letter-spacing: -0.01em; }
a { color: var(--app-accent); text-decoration: none; }
a:hover { color: var(--app-accent-2); text-decoration: none; }
hr { border-color: var(--app-border); }

/* Selection */
::selection { background: rgba(59, 130, 246, .35); color: inherit; }

/* Scrollbar — subtle, modern */
*::-webkit-scrollbar { width: 10px; height: 10px; }
*::-webkit-scrollbar-thumb { background: var(--app-surface-3); border-radius: var(--r-pill); }
*::-webkit-scrollbar-thumb:hover { background: var(--app-muted); }
*::-webkit-scrollbar-track { background: transparent; }

/* ── Cards ─────────────────────────────────────────────────────────────── */
.card {
  background: var(--app-surface) !important;
  color: var(--app-text);
  border: 1px solid var(--app-border) !important;
  border-radius: var(--r-md) !important;
  box-shadow: var(--sh-1) !important;
  transition: box-shadow var(--t-med) var(--ease), transform var(--t-med) var(--ease);
}
.card:hover { box-shadow: var(--sh-2) !important; }
.card .card-body { color: var(--app-text); }
.card .card-title { font-weight: 700; }
.card .card-header,
.card .card-footer {
  background: transparent !important;
  border-color: var(--app-border) !important;
  color: var(--app-text);
}

/* ── Buttons ───────────────────────────────────────────────────────────── */
.btn {
  border-radius: var(--r-sm);
  font-weight: 600;
  letter-spacing: 0;
  padding: 0.5rem 1rem;
  min-height: 38px;
  border-width: 1px;
  transition: background var(--t-fast) var(--ease), color var(--t-fast) var(--ease),
              transform var(--t-fast) var(--ease), box-shadow var(--t-fast) var(--ease);
}
.btn:active { transform: translateY(1px); }
.btn-sm  { min-height: 32px; padding: .35rem .65rem; }
.btn-lg  { min-height: 48px; padding: .75rem 1.25rem; font-size: 1.05rem; }
.btn-primary, .btn-success, .btn-danger, .btn-warning, .btn-info {
  border: 0; box-shadow: var(--sh-1);
}
.btn-primary { background: var(--app-accent) !important; color: #fff !important; }
.btn-primary:hover { background: var(--app-accent-2) !important; box-shadow: var(--sh-2); }
.btn-outline-primary {
  border-color: var(--app-accent) !important;
  color: var(--app-accent) !important;
  background: transparent !important;
}
.btn-outline-primary:hover {
  background: var(--app-accent-soft) !important;
  color: var(--app-accent) !important;
}
.btn-outline-secondary {
  border-color: var(--app-border) !important;
  color: var(--app-text) !important;
  background: transparent !important;
}
.btn-outline-secondary:hover {
  background: var(--app-surface-2) !important;
  color: var(--app-text) !important;
}
.btn-light, .btn-secondary {
  background: var(--app-surface-2) !important;
  color: var(--app-text) !important;
  border: 1px solid var(--app-border) !important;
}
.btn i.bx { vertical-align: -2px; }

/* ── Form controls ─────────────────────────────────────────────────────── */
.form-control, .form-select {
  background: var(--app-surface) !important;
  color: var(--app-text) !important;
  border: 1px solid var(--app-border) !important;
  border-radius: var(--r-sm) !important;
  min-height: 42px;
  font-size: .95rem;
  box-shadow: none;
}
.form-control:focus, .form-select:focus {
  border-color: var(--app-accent) !important;
  box-shadow: 0 0 0 3px var(--app-accent-soft) !important;
}
.form-control::placeholder { color: var(--app-muted-2); }
.form-check-input {
  background-color: var(--app-surface);
  border-color: var(--app-border-soft);
  width: 1.15rem; height: 1.15rem;
}
.form-check-input:checked {
  background-color: var(--app-accent);
  border-color: var(--app-accent);
}
.form-switch .form-check-input { width: 2.4rem; height: 1.25rem; }

/* ── Tables ────────────────────────────────────────────────────────────── */
.table {
  --bs-table-bg: transparent;
  color: var(--app-text);
}
.table > thead { color: var(--app-muted); font-weight: 600; font-size: .78rem;
  text-transform: uppercase; letter-spacing: .04em; }
.table > thead > tr > th { border-bottom: 1px solid var(--app-border); }
.table > tbody > tr > td { border-color: var(--app-border-soft); padding: .85rem .75rem; }
.table-hover > tbody > tr:hover { background: var(--app-surface-2); }

/* ── Badges ────────────────────────────────────────────────────────────── */
.badge {
  font-weight: 600;
  letter-spacing: .02em;
  padding: .35em .65em;
  border-radius: var(--r-sm);
}

/* ── Modal ─────────────────────────────────────────────────────────────── */
.modal-content {
  background: var(--app-surface) !important;
  color: var(--app-text);
  border-radius: var(--r-md) !important;
  border: 1px solid var(--app-border) !important;
  box-shadow: var(--sh-3) !important;
}
.modal-header { border-bottom: 1px solid var(--app-border); }
.modal-footer { border-top: 1px solid var(--app-border); }
.modal-backdrop.show { opacity: .55; }

/* ── Alerts ────────────────────────────────────────────────────────────── */
.alert {
  border-radius: var(--r-md);
  border: 1px solid var(--app-border);
  background: var(--app-surface);
  color: var(--app-text);
}
.alert-success { background: rgba(22,163,74,.10); border-color: rgba(22,163,74,.30); color: #16a34a; }
.alert-danger  { background: rgba(220,38,38,.10); border-color: rgba(220,38,38,.30); color: #dc2626; }
.alert-warning { background: rgba(217,119,6,.10); border-color: rgba(217,119,6,.30); color: #d97706; }
.alert-info    { background: rgba(59,130,246,.10); border-color: rgba(59,130,246,.30); color: var(--app-accent-2); }

/* ── Page wrapper ──────────────────────────────────────────────────────── */
.wrapper        { background: var(--app-bg); min-height: 100vh; }
.page-wrapper   { background: var(--app-bg); }
.page-content   { padding: clamp(16px, 3vw, 28px); padding-bottom: calc(var(--bottom-nav-h) + var(--safe-bottom) + 24px); }
.form-body      { padding: 0; }

/* ── Sidebar ───────────────────────────────────────────────────────────── */
.sidebar-wrapper {
  background: var(--app-surface) !important;
  border-right: 1px solid var(--app-border);
  width: var(--sidebar-w) !important;
  box-shadow: none !important;
}
.sidebar-wrapper .sidebar-header {
  background: transparent !important;
  border-bottom: 1px solid var(--app-border);
  padding: 14px 16px;
}
.sidebar-wrapper .metismenu li a,
.sidebar-wrapper .metismenu li > a {
  color: var(--app-text-2) !important;
  font-weight: 500;
  font-size: .92rem;
  padding: 10px 14px;
  margin: 2px 8px;
  border-radius: var(--r-sm);
  display: flex;
  align-items: center;
  gap: 12px;
  transition: background var(--t-fast) var(--ease), color var(--t-fast) var(--ease);
}
.sidebar-wrapper .metismenu li a:hover {
  background: var(--app-surface-2) !important;
  color: var(--app-text) !important;
}
.sidebar-wrapper .metismenu li.mm-active > a,
.sidebar-wrapper .metismenu li > a.active,
.sidebar-wrapper .metismenu li > a[aria-expanded="true"] {
  background: var(--app-accent) !important;
  color: #fff !important;
  font-weight: 600;
  box-shadow: var(--sh-1);
}
.sidebar-wrapper .metismenu li.mm-active > a i,
.sidebar-wrapper .metismenu li > a.active i { color: #fff !important; }
.sidebar-wrapper .metismenu .parent-icon i { font-size: 1.1rem; color: var(--app-muted); }
.sidebar-wrapper .metismenu .menu-title { font-weight: inherit; }
.sidebar-wrapper .metismenu ul { background: transparent !important; }
.sidebar-wrapper .metismenu ul li a { padding-left: 38px; font-size: .88rem; }

/* ── Header / topbar ───────────────────────────────────────────────────── */
.top-header .navbar {
  background: rgba(255, 255, 255, .85) !important;
  backdrop-filter: saturate(180%) blur(12px);
  -webkit-backdrop-filter: saturate(180%) blur(12px);
  border-bottom: 1px solid var(--app-border);
  height: var(--header-h);
}
.dark-theme .top-header .navbar { background: rgba(17, 24, 39, .80) !important; }
.top-header .mobile-toggle-menu  { color: var(--app-text); }
.top-header .nav-link            { color: var(--app-text); }

/* ── Dropdowns ─────────────────────────────────────────────────────────── */
.dropdown-menu {
  background: var(--app-surface);
  border: 1px solid var(--app-border);
  border-radius: var(--r-md);
  box-shadow: var(--sh-3);
  padding: 6px;
}
.dropdown-item {
  color: var(--app-text);
  border-radius: var(--r-sm);
  padding: 8px 12px;
}
.dropdown-item:hover { background: var(--app-surface-2); color: var(--app-text); }

/* ── Breadcrumbs ───────────────────────────────────────────────────────── */
.page-breadcrumb { padding: 0 0 16px 0; }
.breadcrumb-title { font-weight: 700; }
.breadcrumb-item, .breadcrumb-item a { color: var(--app-muted); }
.breadcrumb-item.active { color: var(--app-text); }

/* ── Pills / nav-tabs ──────────────────────────────────────────────────── */
.nav-tabs {
  border-bottom: 1px solid var(--app-border);
  gap: 4px;
}
.nav-tabs .nav-link {
  color: var(--app-muted);
  border: 0;
  border-bottom: 2px solid transparent;
  border-radius: 0;
  padding: 10px 14px;
  background: transparent !important;
}
.nav-tabs .nav-link:hover { color: var(--app-text); }
.nav-tabs .nav-link.active {
  color: var(--app-accent);
  border-bottom-color: var(--app-accent);
  background: transparent !important;
}

/* ── Spinners / loaders ────────────────────────────────────────────────── */
.pace .pace-progress { background: var(--app-accent) !important; }

/* ── Mobile / responsive ───────────────────────────────────────────────── */
@media (max-width: 991px) {
  /* Hide the desktop sidebar; surface it via the new off-canvas drawer */
  .sidebar-wrapper {
    position: fixed;
    top: 0; left: 0;
    height: 100dvh;
    transform: translateX(-100%);
    transition: transform var(--t-med) var(--ease);
    z-index: 1050;
    padding-top: var(--safe-top);
  }
  body.sidebar-open .sidebar-wrapper { transform: translateX(0); }
  body.sidebar-open::after {
    content: "";
    position: fixed; inset: 0;
    background: var(--app-overlay);
    z-index: 1049;
  }
  .page-wrapper { margin-left: 0 !important; }
  .top-header   { left: 0 !important; }

  /* Reserve room for the bottom nav */
  .page-content {
    padding-bottom: calc(var(--bottom-nav-h) + var(--safe-bottom) + 28px);
  }

  /* Bigger touch targets on phones */
  .btn        { min-height: 44px; padding: .65rem 1rem; }
  .btn-sm     { min-height: 36px; padding: .45rem .75rem; }
  .form-control, .form-select { min-height: 46px; font-size: 1rem; }
  .dropdown-item { padding: 12px 14px; }

  /* Make Bootstrap tables horizontally scrollable on phones */
  .table-responsive-mobile { overflow-x: auto; }
}

/* ── Bottom nav (rendered only on small viewports) ─────────────────────── */
.app-bottom-nav {
  display: none;
}
@media (max-width: 991px) {
  .app-bottom-nav {
    display: flex;
    position: fixed;
    left: 0; right: 0; bottom: 0;
    height: calc(var(--bottom-nav-h) + var(--safe-bottom));
    padding-bottom: var(--safe-bottom);
    background: var(--app-surface);
    border-top: 1px solid var(--app-border);
    z-index: 1040;
    justify-content: space-around;
    align-items: stretch;
    backdrop-filter: saturate(180%) blur(12px);
    -webkit-backdrop-filter: saturate(180%) blur(12px);
  }
  .app-bottom-nav a {
    flex: 1;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 2px;
    color: var(--app-muted);
    font-size: .68rem;
    font-weight: 600;
    letter-spacing: .03em;
    text-transform: uppercase;
    text-decoration: none;
    position: relative;
    min-height: 56px;
  }
  .app-bottom-nav a i {
    font-size: 1.45rem;
    line-height: 1;
  }
  .app-bottom-nav a.active {
    color: var(--app-accent);
  }
  .app-bottom-nav a.active::before {
    content: "";
    position: absolute;
    top: 0; left: 22%; right: 22%;
    height: 3px;
    background: var(--app-accent);
    border-radius: 0 0 var(--r-pill) var(--r-pill);
  }
}

/* ── Hybrid app (Capacitor) — extra polish ─────────────────────────────── */
body.capacitor-app {
  /* Disable text selection cursor and pull-to-refresh, but keep inputs editable. */
  -webkit-touch-callout: none;
  -webkit-user-select: none;
  user-select: none;
}
body.capacitor-app input,
body.capacitor-app textarea,
body.capacitor-app [contenteditable="true"] { -webkit-user-select: text; user-select: text; }

/* When running in the app, the OS provides its own back gesture — push the
   top-header content below the system status bar. */
body.capacitor-app .top-header .navbar {
  padding-top: var(--safe-top);
  height: calc(var(--header-h) + var(--safe-top));
}

/* In the hybrid app, the bottom-nav sits flush above the OS home indicator */
body.capacitor-app .app-bottom-nav { box-shadow: 0 -6px 24px rgba(0, 0, 0, .25); }

/* Larger tap targets in the app */
body.capacitor-app .btn          { min-height: 46px; }
body.capacitor-app .form-control { min-height: 48px; }

/* Smooth-scroll on iOS */
body, html { -webkit-overflow-scrolling: touch; scroll-behavior: smooth; }

/* ── Auth shell (sign-in, 2FA, password reset) ─────────────────────────── */
/* Premium, focused, dark-by-default — sized 420px on desktop, full-width
   on mobile.  The legacy login HTML wraps the form in cards & row/col
   utilities; we suppress those defaults via more specific selectors. */
body.bg-login {
  /* Override the legacy white background that ships with the template. */
  background: var(--app-bg) !important;
  color: var(--app-text);
}
body.bg-login .wrapper { background: transparent; min-height: 100dvh; }
.auth-shell {
  min-height: 100dvh;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: clamp(20px, 6vw, 56px) clamp(16px, 5vw, 32px);
  background:
    radial-gradient(1200px 600px at 50% -10%, rgba(59, 130, 246, .18), transparent 60%),
    radial-gradient(800px 500px at 100% 100%, rgba(37, 99, 235, .10), transparent 55%),
    var(--app-bg);
  color: var(--app-text);
}
.auth-card {
  width: 100%;
  max-width: 420px;
  background: var(--app-surface);
  border: 1px solid var(--app-border);
  border-radius: var(--r-lg);
  box-shadow: var(--sh-3), 0 0 0 1px rgba(255, 255, 255, .02) inset;
  padding: clamp(24px, 4vw, 40px);
  backdrop-filter: blur(20px);
  -webkit-backdrop-filter: blur(20px);
  animation: authIn .5s var(--ease) both;
}
@keyframes authIn {
  from { opacity: 0; transform: translateY(8px) scale(.985); }
  to   { opacity: 1; transform: translateY(0)   scale(1); }
}
.auth-brand { text-align: center; margin-bottom: 28px; }
.auth-logo  { width: 168px; max-width: 60%; height: auto; display: inline-block; filter: drop-shadow(0 4px 16px rgba(0, 0, 0, .35)); }
.auth-tagline {
  margin-top: 10px;
  font-size: .8rem;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--app-muted);
  font-weight: 600;
}
.auth-form .form-label {
  font-size: .78rem;
  font-weight: 600;
  letter-spacing: .04em;
  text-transform: uppercase;
  color: var(--app-muted);
  margin-bottom: 6px;
}
.auth-form .form-control {
  background: var(--app-surface-2);
  border: 1px solid var(--app-border);
  color: var(--app-text);
  min-height: 50px;
  font-size: 1rem;
  padding: 12px 14px;
  border-radius: var(--r-sm);
}
.auth-form .form-control:focus {
  background: var(--app-surface);
  border-color: var(--app-accent);
  box-shadow: 0 0 0 4px rgba(59, 130, 246, .22);
  color: var(--app-text);
}
.auth-form .input-group.auth-password { box-shadow: none; }
.auth-form .input-group.auth-password .form-control { border-right: 0; }
.auth-form .input-group.auth-password .input-group-text {
  background: var(--app-surface-2);
  border: 1px solid var(--app-border);
  border-left: 0;
  color: var(--app-muted);
  border-radius: 0 var(--r-sm) var(--r-sm) 0;
  min-width: 48px;
  justify-content: center;
}
.auth-form .input-group.auth-password .input-group-text:hover { color: var(--app-text); }
.auth-form .btn-primary {
  min-height: 52px;
  font-size: 1.02rem;
  font-weight: 600;
  letter-spacing: .01em;
  background: linear-gradient(180deg, var(--app-accent), var(--app-accent-2)) !important;
  border: 0 !important;
  box-shadow: 0 8px 24px rgba(37, 99, 235, .35) !important;
  border-radius: var(--r-sm) !important;
}
.auth-form .btn-primary:hover {
  filter: brightness(1.08);
  box-shadow: 0 10px 28px rgba(37, 99, 235, .45) !important;
}
.auth-form .btn-primary:active { transform: translateY(1px); }
.auth-foot {
  margin-top: 22px;
  color: var(--app-muted);
  font-size: .87rem;
}
.auth-foot a { color: var(--app-accent-2); font-weight: 600; }
.auth-footer {
  margin-top: 28px;
  color: var(--app-muted-2);
}
.auth-footer a { color: var(--app-muted); }

/* Suppress the legacy Bootstrap row/col scaffolding leftover in
   login_login.php when its parent wrapper still passes through. */
.section-authentication-signin { display: contents; }
.section-authentication-signin .container-fluid,
.section-authentication-signin .row,
.section-authentication-signin .col,
.section-authentication-signin .card,
.section-authentication-signin .card-body,
.section-authentication-signin .form-body {
  background: transparent !important;
  border: 0 !important;
  box-shadow: none !important;
  padding: 0 !important;
  margin: 0 !important;
  width: auto;
  max-width: none;
}

@media (max-width: 480px) {
  .auth-card { padding: 22px 18px; border-radius: var(--r-md); }
  .auth-logo { width: 144px; }
}

/* ── Utility helpers (opt-in) ──────────────────────────────────────────── */
.surface     { background: var(--app-surface); border-radius: var(--r-md); border: 1px solid var(--app-border); }
.surface-2   { background: var(--app-surface-2); border-radius: var(--r-md); }
.text-muted-2{ color: var(--app-muted-2) !important; }
.shadow-soft { box-shadow: var(--sh-1); }
.shadow-pop  { box-shadow: var(--sh-2); }
.r-md        { border-radius: var(--r-md); }
.r-lg        { border-radius: var(--r-lg); }
.stack       { display: flex; flex-direction: column; gap: var(--space-3); }
.row-gap     { row-gap: var(--space-4); }
