/*
  App shell — sidebar, topbar, page frame.
  Class names (navbar-vertical, page-wrapper, page-body, container-xl)
  are kept because existing page markup and JS (export-utils.js,
  clean-sidebar.js) already depend on them; only their appearance
  changes here.
*/

body {
  background: var(--salut-paper);
}

/* ---- Page frame mechanics ----
   Bootstrap alone has no fixed-sidebar-with-offset-content behavior;
   Tabler's CSS used to supply it. Reimplemented here so dropping
   Tabler doesn't collapse the layout. */
:root {
  --salut-sidebar-w: 15.5rem;
}
.page {
  min-height: 100vh;
}
@media (min-width: 992px) {
  .navbar-vertical {
    position: fixed;
    top: 0;
    left: 0;
    bottom: 0;
    z-index: 1035;
    overflow-y: auto;
  }
  .page-wrapper {
    margin-left: var(--salut-sidebar-w);
  }
}
@media (max-width: 991.98px) {
  .navbar-vertical {
    position: fixed;
    top: 0;
    left: 0;
    bottom: 0;
    z-index: 1045;
    overflow-y: auto;
    transform: translateX(-100%);
    transition: transform var(--salut-motion) var(--salut-motion-ease);
  }
  .navbar-vertical.sidebar-open {
    transform: translateX(0);
  }
  .sidebar-backdrop {
    display: none;
    position: fixed;
    inset: 0;
    background: rgba(33, 31, 26, 0.4);
    z-index: 1040;
  }
  .sidebar-backdrop.show {
    display: block;
  }
}

/* ---- Sidebar: section list read as ledger tab dividers ---- */
.navbar-vertical {
  width: var(--salut-sidebar-w);
  background: var(--salut-paper);
  border-right: 1px solid var(--salut-line);
  box-shadow: none;
}
.navbar-vertical .navbar-brand {
  border-bottom: 1px solid var(--salut-line) !important;
}
/* Our own transform-based slide (.sidebar-open) drives visibility, not
   Bootstrap's breakpoint-collapse plugin: force the inner nav to stay
   rendered at every width. */
.navbar-vertical .navbar-collapse {
  display: block !important;
  flex-basis: auto;
}
/* Bootstrap's navbar-expand-lg switches .navbar-nav to flex-direction:row
   at the lg breakpoint (for a horizontal top navbar). This sidebar is a
   vertical nav wearing that class only for its collapse/toggle behavior,
   so force the column direction back at every width. */
.navbar-vertical .navbar-nav,
.navbar-vertical .nav {
  flex-direction: column;
}
.navbar-vertical ul {
  list-style: none;
  margin: 0;
  padding: 0;
}
.navbar-vertical .nav-item {
  width: 100%;
}
.navbar-vertical .nav-link {
  display: flex;
  align-items: center;
  gap: var(--salut-space-2);
}
.sidebar-category-header {
  display: block;
  padding: var(--salut-space-4) var(--salut-space-4) var(--salut-space-1);
  font-size: 0.6875rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--salut-ink-faint);
}
.navbar-vertical .nav-link {
  color: var(--salut-ink-text);
  font-size: var(--salut-text-base);
  font-weight: 500;
  border-left: 3px solid transparent;
  border-radius: 0;
  padding: 0.55rem var(--salut-space-4) 0.55rem calc(var(--salut-space-4) - 3px);
}
.navbar-vertical .nav-item.active > .nav-link,
.navbar-vertical .nav-link.active {
  color: var(--salut-ink);
  font-weight: 600;
  border-left-color: var(--salut-ink);
  background: var(--salut-ink-soft);
}
.navbar-vertical .nav-link:hover {
  background: var(--salut-paper-band);
}
.navbar-vertical .nav-link-icon .icon {
  color: var(--salut-ink-faint);
}
.navbar-vertical .nav-item.active .nav-link-icon .icon,
.navbar-vertical .nav-link.active .icon {
  color: var(--salut-ink);
}
.navbar-vertical .nav.nav-sm .nav-link {
  padding-left: calc(var(--salut-space-4) + 1.6rem);
  font-size: var(--salut-text-sm);
  font-weight: 500;
  color: var(--salut-ink-muted);
}
.navbar-vertical .nav.nav-sm .nav-link.active {
  color: var(--salut-ink);
  background: transparent;
  border-left-color: var(--salut-line-strong);
}
.navbar-vertical .dropdown-toggle::after {
  margin-left: auto;
}

/* ---- Topbar ---- */
.navbar:not(.navbar-vertical) {
  height: 3.5rem;
  background: var(--salut-paper);
  border-bottom: 1px solid var(--salut-line);
  box-shadow: none;
}
.salut-search {
  position: relative;
  width: 22rem;
  max-width: 40vw;
}
.salut-search input {
  padding-right: 3.25rem;
}
.salut-search kbd {
  position: absolute;
  right: var(--salut-space-2);
  top: 50%;
  transform: translateY(-50%);
  font-size: 0.6875rem;
  background: var(--salut-paper-band);
  border: 1px solid var(--salut-line-strong);
  color: var(--salut-ink-muted);
  padding: 1px 5px;
  border-radius: var(--salut-radius-sm);
  pointer-events: none;
}
.salut-user-avatar {
  width: 2.125rem;
  height: 2.125rem;
  background: var(--salut-ink);
  color: #fff;
  font-weight: 600;
  font-size: 0.8125rem;
}

/* ---- Page frame ---- */
.page-body {
  padding-top: var(--salut-space-5);
  padding-bottom: var(--salut-space-6);
}

/* Shared toast container (assets/js/toast-notification.js) is
   position-fixed top-0, which sits under the sticky topbar. */
.toast-container.top-0 {
  top: calc(3.5rem + var(--salut-space-3)) !important;
}

/* Receipts and printed documents render on their own, shell hidden. */
@media print {
  .navbar-vertical,
  .navbar:not(.navbar-vertical),
  .sidebar-backdrop {
    display: none !important;
  }
  .page-wrapper {
    margin: 0 !important;
  }
}
