/* ============================================================
   Nexode · AdminLTE 3 — COMPONENT OVERRIDES (core)
   ------------------------------------------------------------
   Capa 2 de 3. Reskin de los componentes nativos de AdminLTE 3 /
   Bootstrap 4 SIN tocar tu HTML. Carga DESPUÉS de adminlte.min.css.

   Orden recomendado en <head>:
     1. adminlte.min.css        (AdminLTE original)
     2. nexode-tokens.css       (capa 1)
     3. nexode-adminlte.css     (este archivo)
     4. nexode-plugins.css      (capa 3 — DataTables, Select2, charts…)
============================================================ */

/* ── Base ──────────────────────────────────────────────────── */
html, body, .wrapper {
  font-family: var(--font-display);
  background-color: var(--bg);
  color: var(--ink);
  -webkit-font-smoothing: antialiased;
}
body { font-size: 14px; letter-spacing: -0.005em; }
a { color: var(--accent-ink); }
a:hover { color: var(--accent); }
.text-muted, .text-secondary { color: var(--ink-3) !important; }
::selection { background: var(--accent-tint); color: var(--ink); }
b, strong { font-weight: 600; }
hr { border-top-color: var(--line); }
code { color: var(--accent-ink); font-family: var(--font-mono); }

/* Tipografía de datos — cifras tabulares en tablas y KPIs */
.table td, .table th,
.small-box .inner h3, .info-box-number,
.num, [class*="num"] {
  font-variant-numeric: tabular-nums lining-nums;
  font-feature-settings: "tnum" 1, "lnum" 1;
}

/* ── Fondo ambiental (glows muy sutiles tras todo) ─────────── */
.content-wrapper { background-color: var(--bg); position: relative; }
.content-wrapper::before {
  content: ""; position: fixed; inset: 0; pointer-events: none; z-index: 0;
  background:
    radial-gradient(620px 620px at 16% -8%, var(--amb-1), transparent 70%),
    radial-gradient(560px 560px at 92% 110%, var(--amb-2), transparent 70%);
}
.content-wrapper > * { position: relative; z-index: 1; }

/* ════════════════════════════════════════════════════════════
   SIDEBAR
   ════════════════════════════════════════════════════════════ */
.main-sidebar,
.main-sidebar .sidebar,
.sidebar-dark-primary,
.sidebar-light-primary {
  background: var(--surface-glass) !important;
  backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(14px);
  border-right: 1px solid var(--hair);
  box-shadow: var(--shadow-md);
}

/* Marca */
.brand-link {
  border-bottom: 1px solid var(--hair) !important;
  color: var(--ink) !important;
  font-weight: 550; letter-spacing: -0.01em;
  background: transparent !important;
}
.brand-link .brand-image {
  background: #fff; border-radius: 9px; padding: 3px;
  box-shadow: 0 4px 14px -4px var(--accent-glow);
  opacity: 1; margin-left: .8rem;
}
.brand-link:hover { color: var(--accent) !important; }

/* Items de navegación */
.nav-sidebar .nav-header {
  font-family: var(--font-mono); font-size: 9px; text-transform: uppercase;
  letter-spacing: 0.1em; color: var(--ink-3); padding: 14px 1rem 6px;
}
.nav-sidebar .nav-header::before { content: "// "; opacity: .7; }

.nav-sidebar .nav-link {
  color: var(--ink-2) !important;
  border-radius: var(--r-ctrl);
  margin: 1px 8px; padding: 9px 11px;
  border: 1px solid transparent;
  transition: all var(--t-fast) var(--ease);
  position: relative;
}
.nav-sidebar .nav-link p { font-size: 13.5px; }
.nav-sidebar .nav-link .nav-icon {
  color: var(--ink-3) !important; font-size: 15px;
  transition: color var(--t-fast) var(--ease);
}
.nav-sidebar > .nav-item > .nav-link:hover {
  background: var(--fill-soft) !important;
  color: var(--ink) !important;
}

/* Item activo — fondo tinte + barra de acento a la izquierda (estilo Nexode) */
.nav-sidebar .nav-link.active,
.nav-sidebar .nav-item > .nav-link.active {
  background: var(--fill-hover) !important;
  color: var(--ink) !important;
  border: 1px solid var(--line-2);
  box-shadow: var(--shadow-xs);
}
.nav-sidebar .nav-link.active .nav-icon { color: var(--accent) !important; }
.nav-sidebar .nav-item > .nav-link.active::before {
  content: ""; position: absolute; left: -8px; top: 50%; transform: translateY(-50%);
  width: 3px; height: 18px; border-radius: 3px;
  background: var(--accent); box-shadow: 0 0 8px var(--accent-glow);
}
/* Submenús (treeview) */
.nav-treeview .nav-link { font-size: 12.5px; color: var(--ink-3) !important; }
.nav-treeview .nav-link.active { background: var(--accent-soft) !important; color: var(--accent-ink) !important; }
.nav-treeview .nav-link:hover { background: var(--fill-soft) !important; color: var(--ink) !important; }

/* Badges dentro del sidebar */
.nav-sidebar .nav-link .badge {
  font-family: var(--font-mono); font-weight: 500; font-size: 10px;
  background: var(--accent-soft) !important; color: var(--accent-ink) !important;
}
.nav-sidebar .nav-link.active .badge { background: var(--accent-tint) !important; }

/* Usuario en panel lateral */
.sidebar .user-panel { border-bottom: 1px solid var(--hair) !important; }
.sidebar .user-panel .info a { color: var(--ink) !important; }

/* ════════════════════════════════════════════════════════════
   NAVBAR (topbar)
   ════════════════════════════════════════════════════════════ */
.main-header.navbar,
.navbar-white, .navbar-light, .navbar-dark {
  background: var(--surface-glass) !important;
  backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(14px);
  border-bottom: 1px solid var(--hair) !important;
  box-shadow: none;
}
.main-header .nav-link { color: var(--ink-2) !important; border-radius: 8px; }
.main-header .nav-link:hover { color: var(--ink) !important; background: var(--fill-soft); }
.navbar-nav .nav-link .fa, .navbar-nav .nav-link .fas, .navbar-nav .nav-link .far { font-size: 15px; }
.navbar-badge {
  font-family: var(--font-mono); font-size: 9px; font-weight: 600;
  background: var(--accent) !important; color: var(--on-accent) !important;
  box-shadow: 0 0 8px var(--accent-glow);
}
.main-header .navbar-search-block .form-control { background: var(--bg-2); }

/* ════════════════════════════════════════════════════════════
   CONTENT HEADER · BREADCRUMB
   ════════════════════════════════════════════════════════════ */
.content-header h1 { font-size: 26px; font-weight: 450; letter-spacing: -0.025em; color: var(--ink); margin: 0; }
.breadcrumb { background: transparent; }
.breadcrumb, .breadcrumb-item, .breadcrumb-item a {
  font-family: var(--font-mono); font-size: 11px; text-transform: uppercase;
  letter-spacing: 0.06em; color: var(--ink-3);
}
.breadcrumb-item.active { color: var(--ink); }
.breadcrumb-item + .breadcrumb-item::before { content: "/"; color: var(--ink-3); }

/* ════════════════════════════════════════════════════════════
   CARDS
   ════════════════════════════════════════════════════════════ */
.card {
  background: var(--bg-2);
  background-image: var(--surface-sheen);
  border: 1px solid var(--line);
  border-radius: var(--r-card);
  box-shadow: var(--shadow-sm);
  transition: transform var(--t-base) var(--ease), box-shadow var(--t-base) var(--ease), border-color var(--t-base) var(--ease);
}
.card:hover { box-shadow: var(--shadow-md); }
.card-header {
  background: transparent;
  border-bottom: 1px solid var(--line);
  padding: 16px 20px;
}
.card-title { font-size: 14px; font-weight: 550; letter-spacing: -0.01em; color: var(--ink); }
.card-body { color: var(--ink-2); padding: 20px; }
.card-footer { background: var(--fill-soft); border-top: 1px solid var(--line); }
.card-tools .btn-tool { color: var(--ink-3); }
.card-tools .btn-tool:hover { color: var(--ink); }
/* Tarjeta con acento superior (card-primary / card-outline) */
.card.card-primary:not(.card-outline) > .card-header { background: var(--accent); color: var(--on-accent); }
.card.card-primary.card-outline { border-top: 3px solid var(--accent); }
.card.card-outline { border-top: 3px solid var(--accent); }
.card.card-success.card-outline { border-top-color: var(--ok); }
.card.card-warning.card-outline { border-top-color: var(--warn); }
.card.card-danger.card-outline  { border-top-color: var(--err); }
.card.card-info.card-outline    { border-top-color: var(--info); }

/* ════════════════════════════════════════════════════════════
   SMALL-BOX  (las tarjetas KPI grandes de AdminLTE)
   Reskin: superficie Nexode + franja de acento, en vez de bloque
   de color plano. Conserva las clases bg-* originales como tinte.
   ════════════════════════════════════════════════════════════ */
.small-box {
  background: var(--bg-2) !important;
  background-image: var(--surface-sheen) !important;
  border: 1px solid var(--line);
  border-radius: var(--r-card);
  box-shadow: var(--shadow-sm);
  color: var(--ink) !important;
  overflow: hidden; position: relative;
}
.small-box::after {
  content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 3px;
  background: var(--sb-color, var(--accent));
}
.small-box > .inner { padding: 16px 20px; }
.small-box h3 { color: var(--ink) !important; font-weight: 500; font-size: 30px; letter-spacing: -0.02em; }
.small-box p  { color: var(--ink-2) !important; font-size: 13px; }
.small-box .icon { color: var(--sb-color, var(--accent)) !important; opacity: .9; top: 8px; }
.small-box .icon > i, .small-box .icon svg { font-size: 56px; }
.small-box .small-box-footer {
  background: var(--fill-soft); color: var(--ink-3) !important;
  font-family: var(--font-mono); font-size: 11px; text-transform: uppercase; letter-spacing: 0.06em;
  border-top: 1px solid var(--line);
}
.small-box .small-box-footer:hover { color: var(--accent-ink) !important; background: var(--fill-hover); }
/* Mapeo de la clase de color → variable de franja/icono */
.small-box.bg-primary, .small-box.bg-info     { --sb-color: var(--accent); }
.small-box.bg-success                          { --sb-color: var(--ok); }
.small-box.bg-warning                          { --sb-color: var(--warn); }
.small-box.bg-danger                           { --sb-color: var(--err); }
.small-box.bg-secondary, .small-box.bg-gray    { --sb-color: var(--ink-40); }

/* ════════════════════════════════════════════════════════════
   INFO-BOX
   ════════════════════════════════════════════════════════════ */
.info-box {
  background: var(--bg-2);
  background-image: var(--surface-sheen);
  border: 1px solid var(--line);
  border-radius: var(--r-card);
  box-shadow: var(--shadow-sm);
  color: var(--ink);
}
.info-box .info-box-text { color: var(--ink-3); font-size: 12px; }
.info-box .info-box-number { color: var(--ink); font-weight: 500; }
.info-box .info-box-icon {
  border-radius: var(--r-ctrl);
  background: var(--accent-soft) !important; color: var(--accent) !important;
  font-size: 26px;
}
.info-box .info-box-icon.bg-primary, .info-box .info-box-icon.bg-info { background: var(--accent-soft) !important; color: var(--accent) !important; }
.info-box .info-box-icon.bg-success { background: var(--ok-bg) !important; color: var(--ok) !important; }
.info-box .info-box-icon.bg-warning { background: var(--warn-bg) !important; color: var(--warn) !important; }
.info-box .info-box-icon.bg-danger  { background: var(--err-bg) !important;  color: var(--err) !important; }
.info-box .progress { background: var(--ink-10); }
.info-box .progress-bar { background: var(--accent); }

/* ════════════════════════════════════════════════════════════
   BOTONES
   ════════════════════════════════════════════════════════════ */
.btn {
  border-radius: var(--r-ctrl);
  font-weight: 500; font-size: 13.5px; letter-spacing: -0.005em;
  padding: 8px 16px;
  transition: transform var(--t-fast) var(--ease), box-shadow var(--t-fast) var(--ease), background var(--t-fast) var(--ease);
}
.btn:hover { transform: translateY(-1px); }
.btn:active { transform: translateY(0); }
.btn-sm { border-radius: var(--r-chip); padding: 4px 10px; font-size: 12px; }
.btn-lg { padding: 12px 22px; font-size: 15px; }

.btn-primary {
  background: var(--accent); border-color: var(--accent); color: var(--on-accent);
  box-shadow: var(--shadow-glow);
}
.btn-primary:hover, .btn-primary:focus {
  background: color-mix(in oklch, var(--accent), white 8%);
  border-color: var(--accent); color: var(--on-accent);
  box-shadow: 0 6px 22px -4px var(--accent-glow);
}
.btn-primary:active, .btn-primary:not(:disabled):not(.disabled):active {
  background: color-mix(in oklch, var(--accent), black 8%); border-color: var(--accent); color: var(--on-accent);
}
.btn-outline-primary { color: var(--accent-ink); border-color: var(--line-2); background: transparent; }
.btn-outline-primary:hover { background: var(--accent-soft); color: var(--accent-ink); border-color: var(--accent); }

.btn-secondary, .btn-default {
  background: var(--fill-soft); border: 1px solid var(--line-2); color: var(--ink);
}
.btn-secondary:hover, .btn-default:hover { background: var(--fill-hover); color: var(--ink); border-color: var(--line-2); }
.btn-default { background: var(--bg-2); }

.btn-success { background: var(--ok); border-color: var(--ok); color: #fff; }
.btn-danger  { background: var(--err); border-color: var(--err); color: #fff; }
.btn-warning { background: var(--warn); border-color: var(--warn); color: #1a1206; }
.btn-info    { background: var(--info); border-color: var(--info); color: #fff; }
.btn-link    { color: var(--accent-ink); }

.btn-tool { color: var(--ink-3); }
.btn-tool:hover { color: var(--ink); }

/* ════════════════════════════════════════════════════════════
   FORMULARIOS
   ════════════════════════════════════════════════════════════ */
.form-control, .custom-select, .custom-file-label, textarea.form-control {
  background: var(--bg-soft);
  border: 1px solid var(--line-2);
  border-radius: var(--r-ctrl);
  color: var(--ink);
  font-size: 13.5px;
  transition: border-color var(--t-fast) var(--ease), box-shadow var(--t-fast) var(--ease);
}
.form-control::placeholder { color: var(--ink-3); }
.form-control:focus, .custom-select:focus {
  background: var(--bg-soft);
  border-color: var(--accent);
  box-shadow: 0 0 0 3px var(--accent-soft);
  color: var(--ink);
}
.form-control:disabled, .form-control[readonly] { background: var(--ink-10); color: var(--ink-3); }
label, .col-form-label { color: var(--ink-2); font-weight: 500; font-size: 13px; }
.form-text { color: var(--ink-3); }
.input-group-text {
  background: var(--bg-3); border: 1px solid var(--line-2); color: var(--ink-2);
  border-radius: var(--r-ctrl);
}
.custom-control-input:checked ~ .custom-control-label::before { background: var(--accent); border-color: var(--accent); }
.custom-control-label::before { background: var(--bg-soft); border-color: var(--line-2); }
.custom-switch .custom-control-label::after { background: var(--ink-3); }
.custom-control-input:checked ~ .custom-control-label::after { background: var(--on-accent); }
.form-control-feedback, .invalid-feedback { color: var(--err); }
.was-validated .form-control:invalid, .form-control.is-invalid { border-color: var(--err); }
.was-validated .form-control:valid, .form-control.is-valid { border-color: var(--ok); }

/* ════════════════════════════════════════════════════════════
   TABLAS
   ════════════════════════════════════════════════════════════ */
.table { color: var(--ink-2); }
.table thead th {
  font-family: var(--font-mono); font-size: 11px; font-weight: 500;
  text-transform: uppercase; letter-spacing: 0.06em; color: var(--ink-3);
  background: var(--fill-soft);
  border-bottom: 1px solid var(--line-2) !important;
  border-top: none; padding: 11px 14px;
}
.table td, .table th { border-top: 1px solid var(--line); padding: 11px 14px; vertical-align: middle; }
.table td { color: var(--ink); font-size: 13.5px; }
.table-hover tbody tr { transition: background var(--t-fast) var(--ease); }
.table-hover tbody tr:hover { background: var(--fill-soft); }
.table-bordered, .table-bordered td, .table-bordered th { border-color: var(--line); }
.table-striped tbody tr:nth-of-type(odd) { background: var(--fill-soft); }
.table .thead-dark th, .table .thead-light th { background: var(--bg-3); color: var(--ink-2); border-color: var(--line-2); }

/* ════════════════════════════════════════════════════════════
   BADGES
   ════════════════════════════════════════════════════════════ */
.badge {
  font-family: var(--font-mono); font-weight: 500; font-size: 10.5px;
  letter-spacing: 0.04em; border-radius: var(--r-chip);
  padding: 4px 8px;
}
.badge-primary   { background: var(--accent-soft); color: var(--accent-ink); }
.badge-secondary { background: var(--fill-hover); color: var(--ink-2); }
.badge-success { background: var(--ok-bg);   color: var(--ok); }
.badge-warning { background: var(--warn-bg); color: var(--warn); }
.badge-danger  { background: var(--err-bg);  color: var(--err); }
.badge-info    { background: var(--info-bg); color: var(--info); }
.badge-pill { border-radius: var(--r-pill); }

/* ════════════════════════════════════════════════════════════
   TABS / PILLS
   ════════════════════════════════════════════════════════════ */
.nav-tabs { border-bottom: 1px solid var(--line); }
.nav-tabs .nav-link { color: var(--ink-3); border: none; border-bottom: 2px solid transparent; border-radius: 0; font-size: 13.5px; }
.nav-tabs .nav-link:hover { color: var(--ink); border-bottom-color: var(--line-2); }
.nav-tabs .nav-link.active { color: var(--accent-ink); background: transparent; border-bottom: 2px solid var(--accent); }
.card-primary.card-tabs .nav-item .nav-link.active { color: var(--accent-ink); }
.nav-pills .nav-link { color: var(--ink-2); border-radius: var(--r-ctrl); }
.nav-pills .nav-link.active { background: var(--accent); color: var(--on-accent); }

/* ════════════════════════════════════════════════════════════
   MODALES · DROPDOWN · POPOVER · TOOLTIP
   ════════════════════════════════════════════════════════════ */
.modal-content {
  background: var(--bg-2); border: 1px solid var(--line-2);
  border-radius: var(--r-card); box-shadow: var(--shadow-lg); color: var(--ink);
}
.modal-header { border-bottom: 1px solid var(--line); }
.modal-footer { border-top: 1px solid var(--line); }
.modal-title { font-weight: 550; letter-spacing: -0.01em; }
.modal-backdrop { background: #05070c; }
.modal-backdrop.show { opacity: .62; }
.close { color: var(--ink-2); text-shadow: none; opacity: .8; }
.close:hover { color: var(--ink); }

.dropdown-menu {
  background: var(--bg-2); border: 1px solid var(--line-2);
  border-radius: var(--r-card); box-shadow: var(--shadow-lg); padding: 6px;
}
.dropdown-item { color: var(--ink-2); border-radius: var(--r-chip); padding: 8px 12px; font-size: 13px; }
.dropdown-item:hover, .dropdown-item:focus { background: var(--fill-soft); color: var(--ink); }
.dropdown-item.active, .dropdown-item:active { background: var(--accent-soft); color: var(--accent-ink); }
.dropdown-divider { border-top: 1px solid var(--line); }
.dropdown-header { font-family: var(--font-mono); font-size: 10px; text-transform: uppercase; letter-spacing: 0.08em; color: var(--ink-3); }

.popover { background: var(--bg-2); border: 1px solid var(--line-2); border-radius: var(--r-card); box-shadow: var(--shadow-lg); }
.popover-header { background: var(--fill-soft); border-bottom: 1px solid var(--line); color: var(--ink); }
.popover-body { color: var(--ink-2); }
.tooltip-inner { background: var(--bg-3); color: var(--ink); border: 1px solid var(--line-2); font-size: 12px; border-radius: var(--r-chip); }
.tooltip .arrow::before { display: none; }

/* ════════════════════════════════════════════════════════════
   ALERTS · CALLOUTS · PROGRESS
   ════════════════════════════════════════════════════════════ */
.alert { border-radius: var(--r-ctrl); border: 1px solid transparent; font-size: 13.5px; }
.alert-primary { background: var(--accent-soft); color: var(--accent-ink); border-color: var(--accent-tint); }
.alert-success { background: var(--ok-bg);   color: var(--ok);   border-color: var(--ok-bg); }
.alert-warning { background: var(--warn-bg); color: var(--warn); border-color: var(--warn-bg); }
.alert-danger  { background: var(--err-bg);  color: var(--err);  border-color: var(--err-bg); }
.alert-info    { background: var(--info-bg); color: var(--info); border-color: var(--info-bg); }

.callout {
  background: var(--bg-2); border-radius: var(--r-ctrl);
  border-left: 4px solid var(--accent); box-shadow: var(--shadow-xs);
  color: var(--ink-2);
}
.callout.callout-success { border-left-color: var(--ok); }
.callout.callout-warning { border-left-color: var(--warn); }
.callout.callout-danger  { border-left-color: var(--err); }
.callout.callout-info    { border-left-color: var(--info); }

.progress { background: var(--ink-10); border-radius: var(--r-pill); height: 8px; }
.progress-bar { background: var(--accent); }
.progress-bar.bg-success { background: var(--ok) !important; }
.progress-bar.bg-warning { background: var(--warn) !important; }
.progress-bar.bg-danger  { background: var(--err) !important; }

/* ════════════════════════════════════════════════════════════
   PAGINACIÓN · FOOTER · MISC
   ════════════════════════════════════════════════════════════ */
.page-link { background: var(--bg-2); border: 1px solid var(--line); color: var(--ink-2); }
.page-link:hover { background: var(--fill-soft); color: var(--ink); }
.page-item.active .page-link { background: var(--accent); border-color: var(--accent); color: var(--on-accent); }
.page-item.disabled .page-link { background: var(--bg-2); color: var(--ink-40); }

.main-footer {
  background: var(--surface-glass); border-top: 1px solid var(--hair);
  color: var(--ink-3); font-size: 12.5px;
}
.main-footer a { color: var(--accent-ink); }

/* Utilidades de color Bootstrap mapeadas al acento de la app */
.text-primary { color: var(--accent-ink) !important; }
.bg-primary   { background-color: var(--accent) !important; color: var(--on-accent) !important; }
.border-primary { border-color: var(--accent) !important; }
.text-success { color: var(--ok) !important; }
.text-danger  { color: var(--err) !important; }
.text-warning { color: var(--warn) !important; }
.text-info    { color: var(--info) !important; }

/* Editorial italic (Fraunces) — para destacar una palabra */
.it { font-family: var(--font-serif); font-style: italic; font-weight: 350; color: var(--accent-2); }
.eyebrow {
  font-family: var(--font-mono); font-size: 11px; font-weight: 500;
  letter-spacing: var(--tracking-eye); text-transform: uppercase; color: var(--ink-3);
}

/* Scrollbars */
* { scrollbar-width: thin; scrollbar-color: var(--ink-20) transparent; }
::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-thumb { background: var(--ink-20); border-radius: 8px; border: 3px solid transparent; background-clip: content-box; }
::-webkit-scrollbar-thumb:hover { background: var(--ink-40); background-clip: content-box; }

/* Preloader */
.preloader { background: var(--bg) !important; }
