/* ==========================================================================
   Askari App Shell — Bootstrap 5 layout, replacing AdminLTE's layout engine.
   Reimplements the structural classes the app markup uses (.wrapper,
   .main-sidebar, .content-wrapper, .main-header, sidebar collapse + off-canvas)
   so AdminLTE 3 (Bootstrap-4-only) can be removed. Visuals come from
   askari-enterprise.css tokens; this file is pure layout/positioning.
   ========================================================================== */

:root {
  --ak-sidebar-w: 250px;
  --ak-sidebar-mini-w: 4rem;
  --ak-header-h: 57px;
}

html, body { height: 100%; }
body { margin: 0; overflow-x: hidden; }

.wrapper { position: relative; min-height: 100%; }

/* ---- Fixed top header ---- */
.main-header.navbar {
  position: fixed; top: 0; right: 0; left: var(--ak-sidebar-w);
  height: var(--ak-header-h); z-index: 1038;
  display: flex; align-items: center;
  transition: left .3s ease-in-out;
}

/* ---- Fixed sidebar ---- */
.main-sidebar {
  position: fixed; top: 0; left: 0; bottom: 0;
  width: var(--ak-sidebar-w); z-index: 1040;
  overflow-y: auto; overflow-x: hidden;
  transition: width .3s ease-in-out, transform .3s ease-in-out;
}
.main-sidebar .sidebar { padding-bottom: 24px; }
.brand-link {
  display: block; height: var(--ak-header-h); line-height: var(--ak-header-h);
  padding: 0 16px; white-space: nowrap; overflow: hidden;
}

/* ---- Content + footer offset by the sidebar ---- */
.content-wrapper,
.main-footer {
  margin-left: var(--ak-sidebar-w);
  transition: margin-left .3s ease-in-out;
}
.content-wrapper { min-height: calc(100vh - var(--ak-header-h)); padding-top: var(--ak-header-h); }
.main-footer { padding: 14px 20px; }

/* ---- Sidebar nav primitives (structure; colours from enterprise layer) ---- */
.nav-sidebar { list-style: none; margin: 0; padding: 0; }
.nav-sidebar .nav-item { list-style: none; }
.nav-sidebar .nav-link { display: flex; align-items: center; padding: 0.6rem 1rem; text-decoration: none; }
.nav-sidebar .nav-link p { margin: 0; flex: 1; min-width: 0; }
.nav-sidebar .nav-icon {
  width: 1.35rem; flex-shrink: 0; text-align: center; margin-right: 0.55rem;
  font-size: 1rem; line-height: 1;
}
.nav-sidebar .nav-header { padding: 0.75rem 1rem 0.25rem; }
.nav-sidebar .nav-link .right { margin-left: auto; transition: transform .3s; }

/* ---- Collapsed (icon-mini) state — toggled by the hamburger on desktop ---- */
@media (min-width: 992px) {
  body.sidebar-collapse .main-sidebar { width: var(--ak-sidebar-mini-w); }
  body.sidebar-collapse .main-sidebar:hover { width: var(--ak-sidebar-w); }
  body.sidebar-collapse .content-wrapper,
  body.sidebar-collapse .main-footer { margin-left: var(--ak-sidebar-mini-w); }
  body.sidebar-collapse .main-header.navbar { left: var(--ak-sidebar-mini-w); }
  body.sidebar-collapse .main-sidebar:not(:hover) .brand-text,
  body.sidebar-collapse .main-sidebar:not(:hover) .nav-sidebar .nav-link p,
  body.sidebar-collapse .main-sidebar:not(:hover) .nav-header { opacity: 0; visibility: hidden; }
}

/* ---- Mobile: off-canvas drawer ---- */
@media (max-width: 991.98px) {
  .main-header.navbar { left: 0; }
  .content-wrapper, .main-footer { margin-left: 0; }
  .main-sidebar { transform: translateX(calc(-1 * var(--ak-sidebar-w))); box-shadow: none; }
  body.sidebar-open .main-sidebar { transform: translateX(0); box-shadow: 0 0 40px rgba(0,0,0,0.5); }
  body.sidebar-open::after {
    content: ""; position: fixed; inset: 0; background: rgba(0,0,0,0.45); z-index: 1039;
  }
}

/* Content-header spacing (AdminLTE gave this) */
.content-header { padding: 14px 0.75rem 0; }
.content { padding: 0.5rem 0.75rem; }

/* Small-box (stat tile) structural bits AdminLTE provided */
.small-box { position: relative; display: block; border-radius: var(--ak-radius, 14px); margin-bottom: 20px; }
.small-box > .inner { padding: 10px; }
.small-box .icon { position: absolute; top: 10px; right: 15px; font-size: 70px; }
.small-box h3 { font-size: 2.2rem; font-weight: 700; margin: 0 0 10px; white-space: nowrap; }
.small-box p { font-size: 1rem; margin: 0; }
.small-box .small-box-footer { display: block; padding: 3px 0; text-align: center; text-decoration: none; }

/* Card tools alignment (AdminLTE .card-tools sat right in the header) */
.card-header { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 8px; }
.card-header > .card-title { margin: 0; }
.card-tools { margin-left: auto; }

/* ==========================================================================
   Bootstrap 4 -> 5 compatibility shim. Keeps legacy markup that the codemod
   doesn't rewrite (form-group, badge-*, input-group-append/prepend, form-inline)
   rendering correctly under BS5, so we don't have to hand-edit 170+ spots.
   Refactor markup opportunistically later; this shim can then shrink.
   ========================================================================== */

/* form-group: BS4 gave it a bottom margin; BS5 removed the class. */
.form-group { margin-bottom: 1rem; }

/* form-inline: removed in BS5; restore inline flex behaviour. */
.form-inline { display: flex; flex-flow: row wrap; align-items: center; }
.form-inline .form-control { display: inline-block; width: auto; vertical-align: middle; }

/* input-group append/prepend wrappers were removed in BS5 — make the leftover
   wrapper a flex passthrough so buttons/text still sit flush with the input. */
.input-group-append, .input-group-prepend { display: flex; }
.input-group-prepend { margin-right: -1px; }
.input-group-append { margin-left: -1px; }

/* Contextual badge colours (BS5 dropped .badge-*; map to tokens). */
.badge-primary   { background: var(--ak-brand) !important; color: #fff !important; }
.badge-secondary { background: var(--ak-bg-3) !important; color: var(--ak-text) !important; }
.badge-success   { background: var(--ak-success) !important; color: #fff !important; }
.badge-danger    { background: var(--ak-danger) !important; color: #fff !important; }
.badge-warning   { background: var(--ak-warning) !important; color: #111 !important; }
.badge-info      { background: var(--ak-info) !important; color: #fff !important; }
.badge-light     { background: var(--ak-bg-2) !important; color: var(--ak-text) !important; }
.badge-dark      { background: #111 !important; color: #fff !important; }

/* Legacy Switchery toggles (.psec-switch) rendered as native CSS switches. */
input.psec-switch {
  -webkit-appearance: none; appearance: none; cursor: pointer;
  width: 2.6em; height: 1.4em; border-radius: 1em; position: relative;
  background: var(--ak-bg-3); border: 1px solid var(--ak-border);
  vertical-align: middle; transition: background .15s var(--ak-ease, ease);
}
input.psec-switch::before {
  content: ""; position: absolute; top: 1px; left: 1px;
  width: calc(1.4em - 4px); height: calc(1.4em - 4px); border-radius: 50%;
  background: #fff; transition: transform .15s var(--ak-ease, ease);
}
input.psec-switch:checked { background: var(--ak-success); border-color: var(--ak-success); }
input.psec-switch:checked::before { transform: translateX(1.2em); }

/* Tom Select: match the enterprise dark inputs. */
.ts-control { background: var(--ak-bg-2) !important; border-color: var(--ak-border) !important; color: var(--ak-text) !important; border-radius: var(--ak-radius-sm, 9px) !important; min-height: 40px; }
.ts-dropdown { background: var(--ak-bg-1) !important; border-color: var(--ak-border-strong) !important; color: var(--ak-text) !important; }
.ts-dropdown .active { background: var(--ak-brand-2, #6D28D9) !important; color: #fff !important; }

/* BS5 .btn-close ships a dark SVG; invert it on dark themes so the × shows. */
html[data-ak-theme="dark"] .btn-close { filter: invert(1) grayscale(100%) brightness(200%); }

/* BS5 renamed some helpers the markup may still use. */
.text-muted { color: var(--ak-text-muted) !important; }
.btn-block { display: block; width: 100%; }
.btn-xs { padding: 0.15rem 0.4rem; font-size: 0.72rem; line-height: 1.4; }
.font-weight-bold { font-weight: 700 !important; }
.float-sm-right { float: right; }
