/* layout.css — overrides sobre AdminLTE 3 con tokens SOLUFLEX.
   Navbar, sidebar, brand, content wrapper, footer, responsive. */

/* ====== Reset de wrappers de AdminLTE 3 ====== */
body.portal-app {
  font-family: var(--font-family-base);
  background: var(--color-bg);
  color: var(--color-text);
}

.portal-app .wrapper {
  min-height: 100vh;
}

.portal-app .preloader {
  display: none; /* usa .portal-preloader en su lugar */
}

/* ====== Navbar superior ====== */
.portal-app .main-header {
  background: var(--color-surface);
  border-bottom: 1px solid var(--color-border);
  box-shadow: var(--shadow-sm);
  height: var(--layout-navbar-height);
  padding: 0 var(--space-4);
}
.portal-app .main-header .nav-link,
.portal-app .main-header .navbar-nav .nav-link {
  color: var(--color-text-muted);
  font-weight: var(--font-weight-medium);
  height: var(--layout-navbar-height);
  display: inline-flex;
  align-items: center;
  padding: 0 var(--space-3);
  transition: background var(--transition-fast), color var(--transition-fast);
}
.portal-app .main-header .nav-link:hover {
  color: var(--color-text);
  background: var(--color-surface-2);
  text-decoration: none;
}
.portal-app .main-header .nav-link.active {
  color: var(--color-primary-700);
}
.portal-app .main-header .nav-link i {
  font-size: 1rem;
  margin-right: var(--space-2);
}
.portal-app .main-header .navbar-brand {
  font-weight: var(--font-weight-semibold);
  color: var(--color-text);
}

/* Acciones de la navbar derecha: toggle de tema, divisor, logout.
   Se centra verticalmente con el título de página y se respira con gaps. */
.portal-app .main-header .portal-navbar__actions {
  align-items: center;
  gap: var(--space-1);
}
.portal-app .main-header .portal-navbar__item {
  display: inline-flex;
  align-items: center;
}
.portal-app .main-header .portal-navbar__divider {
  width: 1px;
  height: 22px;
  background: var(--color-border);
  margin: 0 var(--space-2);
}
.portal-app .main-header .portal-navbar__logout {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  padding: 0 var(--space-3);
  height: 36px;
  border-radius: var(--radius-md);
  border: 1px solid var(--color-border);
  color: var(--color-text-muted);
  background: transparent;
  margin-left: var(--space-1);
  transition: background var(--transition-fast), color var(--transition-fast), border-color var(--transition-fast);
}
.portal-app .main-header .portal-navbar__logout:hover {
  background: var(--color-danger-bg);
  color: var(--color-danger);
  border-color: var(--color-danger);
  text-decoration: none;
}
.portal-app .main-header .portal-navbar__logout i {
  margin: 0;
  font-size: 0.9rem;
}

/* ====== Sidebar ====== */
.portal-app .main-sidebar {
  background: var(--color-surface);
  border-right: 1px solid var(--color-border);
  width: var(--layout-sidebar-width);
  padding-top: 0;
  transition: width var(--transition-base);
}
.portal-app .main-sidebar .brand-link {
  display: flex;
  align-items: center;
  justify-content: center;
  height: var(--layout-navbar-height);
  padding: var(--space-3);
  border-bottom: 1px solid var(--color-border);
  background: var(--color-surface);
}
.portal-app .main-sidebar .brand-link img {
  max-height: 38px;
  width: auto;
  object-fit: contain;
}

/* Sidebar menu */
.portal-app .sidebar {
  padding: var(--space-3) 0;
}
.portal-app .nav-sidebar .nav-item > .nav-link {
  color: var(--color-text-muted);
  border-radius: var(--radius-md);
  margin: 2px var(--space-3);
  padding: var(--space-2) var(--space-3);
  display: flex;
  align-items: center;
  gap: var(--space-3);
  font-weight: var(--font-weight-medium);
  transition: background var(--transition-fast), color var(--transition-fast);
}
.portal-app .nav-sidebar .nav-item > .nav-link:hover {
  background: var(--color-surface-2);
  color: var(--color-text);
  text-decoration: none;
}
.portal-app .nav-sidebar .nav-item > .nav-link.active {
  background: var(--color-primary-50);
  color: var(--color-primary-700);
}
:root[data-bs-theme="dark"] .portal-app .nav-sidebar .nav-item > .nav-link.active {
  background: var(--color-primary-900);
  color: var(--color-primary-100);
}
.portal-app .nav-sidebar .nav-icon {
  width: 18px;
  text-align: center;
  font-size: 1rem;
  color: var(--color-text-subtle);
  flex-shrink: 0;
}
.portal-app .nav-sidebar .nav-item > .nav-link.active .nav-icon {
  color: var(--color-primary-600);
}
.portal-app .nav-sidebar .nav-treeview {
  list-style: none;
  padding-left: var(--space-7);
  margin: 2px 0;
}
.portal-app .nav-sidebar .nav-treeview .nav-link {
  font-size: var(--font-size-sm);
  padding: var(--space-1) var(--space-3);
  color: var(--color-text-muted);
  border-radius: var(--radius-sm);
  margin: 0 var(--space-3);
}
.portal-app .nav-sidebar .nav-treeview .nav-link.active {
  color: var(--color-primary-700);
  font-weight: var(--font-weight-semibold);
}
.portal-app .nav-sidebar .nav-treeview .nav-link:hover {
  background: var(--color-surface-2);
  color: var(--color-text);
}

/* Cabeceras de grupo (ESCRITORIO, SUBIR XML…) */
.portal-app .nav-sidebar .nav-header {
  color: var(--color-text-subtle);
  font-size: var(--font-size-xs);
  font-weight: var(--font-weight-semibold);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  padding: var(--space-4) var(--space-5) var(--space-1);
  margin: 0;
}

/* ====== Content wrapper ====== */
.portal-app .content-wrapper {
  background: var(--color-bg);
  margin-left: var(--layout-sidebar-width);
  min-height: calc(100vh - var(--layout-navbar-height));
  width: auto;
}
.portal-app .content-header {
  padding: var(--space-5) var(--space-5) 0;
}
.portal-app .content-header h1 {
  font-size: var(--font-size-2xl);
  margin: 0;
}
/* El content usa el 100% del espacio (full width) en pantallas chicas y grandes.
   Las cards/forms internos definen su propio max-width cuando lo necesitan. */
.portal-app .content {
  padding: var(--space-5);
  width: 100%;
}

/* ====== Footer global ====== */
.portal-app .main-footer {
  background: var(--color-surface);
  border-top: 1px solid var(--color-border);
  color: var(--color-text-muted);
  padding: var(--space-4) var(--space-5);
  font-size: var(--font-size-xs);
  margin-left: var(--layout-sidebar-width);
}
.portal-app .main-footer strong {
  color: var(--color-text);
}

/* ====== Sidebar colapsado (sidebar-mini + sidebar-collapse) ====== */
body.sidebar-mini.sidebar-collapse .main-sidebar {
  width: var(--layout-sidebar-collapsed-width);
}
body.sidebar-mini.sidebar-collapse .content-wrapper,
body.sidebar-mini.sidebar-collapse .main-footer {
  margin-left: var(--layout-sidebar-collapsed-width);
}
body.sidebar-mini.sidebar-collapse .nav-sidebar .nav-link p,
body.sidebar-mini.sidebar-collapse .nav-sidebar .nav-header,
body.sidebar-mini.sidebar-collapse .nav-sidebar .nav-treeview {
  display: none;
}
body.sidebar-mini.sidebar-collapse .nav-sidebar .nav-link {
  justify-content: center;
  padding: var(--space-3);
}
body.sidebar-mini.sidebar-collapse .nav-sidebar .nav-icon {
  margin: 0;
}

/* ====== Responsive: colapsa sidebar bajo md ====== */
@media (max-width: 991.98px) {
  .portal-app .main-sidebar {
    transform: translateX(-100%);
    position: fixed;
    top: 0;
    height: 100vh;
    z-index: 1040;
    transition: transform var(--transition-base);
  }
  body.sidebar-open .main-sidebar {
    transform: translateX(0);
  }
  .portal-app .content-wrapper,
  .portal-app .main-footer {
    margin-left: 0;
  }
  .portal-app .content,
  .portal-app .content-header {
    padding: var(--space-3);
  }
  @media (min-width: 576px) {
    .portal-app .content,
    .portal-app .content-header {
      padding: var(--space-4);
    }
  }
}

/* Quitar elevación dura de AdminLTE en sidebar (sustituir por border) */
.portal-app .main-sidebar.sidebar-dark-primary {
  background: var(--color-surface);
}

/* Backdrop móvil */
.portal-app .sidebar-backdrop {
  position: fixed;
  inset: 0;
  background: hsl(0 0% 0% / 0.40);
  z-index: 1030;
  opacity: 0;
  visibility: hidden;
  transition: opacity var(--transition-base), visibility var(--transition-base);
}
@media (max-width: 991.98px) {
  body.sidebar-open .sidebar-backdrop {
    opacity: 1;
    visibility: visible;
  }
}
