/* ============================================================================
   SOFTLINE UI — Sistema de diseño unificado de Intra Line
   ----------------------------------------------------------------------------
   Tokens de marca (--sl-*) + componentes (.sl-*).
   Doc: _devel/design-system.md
   Coexiste con Bootstrap 3 (Nice Admin) y PREDOMINA sobre él.
   Cargar SIEMPRE después del bundle de Bootstrap/Nice Admin.

   ESCALA / ACCESIBILIDAD
   ----------------------------------------------------------------------------
   Los tamaños de los componentes se expresan en REM, de modo que toda la UI
   escala proporcionalmente (con reflow correcto, sin transform borroso) desde
   un único mando: el font-size raíz. La preferencia por usuario
   (usuarios_preferencias.up_ui_scale) se pinta como <html data-ui-scale="...">.
   'normal' ya parte de un tamaño cómodo (112.5% del navegador), y grande/mayor
   escalan desde ahí (ideal para baja visión; convive con Ctrl/+/- del navegador).
   Los % son relativos al tamaño del navegador, así respetan su config base.
   Como este archivo solo se carga en pantallas migradas, la escala solo afecta
   a esas pantallas (piloto actual: clientes_fichas).
   ============================================================================ */

html[data-ui-scale="normal"] { font-size: 112.5%; }  /* ~18px base (nuevo baseline) */
html[data-ui-scale="grande"] { font-size: 125%;   }  /* ~20px base */
html[data-ui-scale="mayor"]  { font-size: 137.5%; }  /* ~22px base */

/* ——— 1. Design tokens —————————————————————————————————————————————————— */
:root {
  /* Marca: azul */
  --sl-blue:        #034D96;
  --sl-blue-600:    #023C77;
  --sl-blue-100:    #E6EEF7;
  --sl-blue-050:    #F3F7FB;

  /* Marca: rosa (acento) */
  --sl-pink:        #E33678;
  --sl-pink-600:    #C21F5F;
  --sl-pink-050:    #FDEEF4;

  /* Marca: púrpura (focus/realce) */
  --sl-purple:      #80388D;

  /* Superficies */
  --sl-bg-page:     #FFFFFF;   /* fondo de página blanco; las cajas se definen por borde */
  --sl-bg-card:     #FFFFFF;
  --sl-bg-soft:     #FAFBFC;   /* zonas internas (cabeceras de panel/tabla): casi blanco */

  /* Bordes */
  --sl-border:      #E2E7EE;
  --sl-border-2:    #CFD6DE;

  /* Texto (fg-3 oscurecido a #6B7685 para cumplir contraste WCAG AA) */
  --sl-fg-1:        #034D96;
  --sl-fg-2:        #4A5B6F;
  --sl-fg-3:        #6B7685;

  /* Sombras */
  --sl-shadow-sm:   0 1px 2px rgba(3,77,150,.06);
  --sl-shadow-md:   0 4px 14px rgba(3,77,150,.08);
  --sl-shadow-card: 0 1px 2px rgba(3,77,150,.06), 0 4px 12px rgba(3,77,150,.04);

  /* Foco accesible */
  /* old foco --sl-focus:       0 0 0 3px rgba(128,56,141,.35);*/
  --sl-focus: 0 0 0 3px rgb(227 54 120 / 35%);

  /* Radios (en px: son cosméticos, no necesitan escalar) */
  /*
  --sl-radius-sm:   4px;
  --sl-radius-md:   8px;
  --sl-radius-lg:   12px;
  */
  --sl-radius-xxs: 6px;
  --sl-radius-sm:  8px;
  --sl-radius-md:  8px;
  --sl-radius-lg:   8px;
  --sl-radius-pill: 999px;

  /* Espaciado (escala 4px, en rem para que escale con la interfaz) */
  --sl-space-1: .25rem;
  --sl-space-2: .5rem;
  --sl-space-3: .75rem;
  --sl-space-4: 1rem;
  --sl-space-5: 1.5rem;

  /* Tipografía */
  --sl-font: 'Montserrat', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;

  /* Estados semánticos */
  --sl-state-progress: #ffa630;
  --sl-state-neutral:  #a8a8a8;
  --sl-state-done:     #5cb063;
  --sl-state-review:   #FF5C8D;
  --sl-state-urgent:   #FF5566;
}

/* ——— 2. Contenedor de página ——————————————————————————————————————————— */
/* Fondo de página blanco. El tema legacy pinta body { background:#eee }; como
   este CSS solo se carga en pantallas migradas, lo blanqueamos solo ahí (gana
   por orden de carga, sin !important). Las cajas se definen por su borde gris. */
body { background: var(--sl-bg-page); }

#sl-app {
  font-family: var(--sl-font);
  -webkit-font-smoothing: antialiased;
  color: var(--sl-fg-2);
  background: var(--sl-bg-page);
  min-height: 100%;
  /* Base para el texto legacy suelto que hereda (Bootstrap/Nice Admin lo dejaba en ~15px
     fijos, sin ligar a la escala). En rem para que ahora SÍ escale con data-ui-scale. */
  font-size: .875rem;
  /* Montserrat 400 + antialiasing se veía fino/desvaído; 500 (medium) mejora la legibilidad. */
  font-weight: 500;
}
/*.fa, .fa-brands, .fa-duotone, .fa-light, .fa-regular, .fa-solid, .fa-thin, .fab, .fad, .fal, .far, .fas, .fat {
  line-height: 0 !important;
}*/

/* ——— 3. Tipografía ————————————————————————————————————————————————————— */
.sl-title {
  font-size: 1.0625rem; font-weight: 700; color: var(--sl-blue);
  letter-spacing: -0.01em; margin: 0; line-height: 1.2;
}
.sl-title--sm { font-size: .8rem; font-weight: 600; color: var(--sl-blue); }

.sl-eyebrow {
  font-size: .6875rem; font-weight: 800; letter-spacing: .12em;
  text-transform: uppercase; color: var(--sl-pink); margin: 0 0 .25rem;
}
.sl-label {
  font-size: .5625rem; font-weight: 800; letter-spacing: .12em;
  text-transform: uppercase; color: var(--sl-fg-3); margin: 0;
}
.sl-meta-label {
  font-size: .5625rem; font-weight: 700; letter-spacing: .09em;
  text-transform: uppercase; color: var(--sl-fg-3); line-height: 1.2;
}
.sl-meta-value { font-size: .75rem; font-weight: 700; color: var(--sl-blue); line-height: 1.3; }
.sl-meta-value--pink { color: var(--sl-pink); }

.sl-text { font-size: .8125rem; font-weight: 400; color: var(--sl-fg-2); line-height: 1.45; }
.sl-text--muted { font-size: .6875rem; font-weight: 500; color: var(--sl-fg-3); }

/* ——— 4. Botones ———————————————————————————————————————————————————————— */
.sl-btn, #sl-app tr.footable-filtering .input-group .btn {
  display: inline-flex; align-items: center; justify-content: center; gap: .375rem;
  height: 1.75rem; padding: 0 .75rem;
  font-family: var(--sl-font); font-size: .75rem; font-weight: 600; line-height: 1;
  color: var(--sl-fg-2);
  background: #fff; border: 1px solid var(--sl-border);
  border-radius: var(--sl-radius-sm);
  cursor: pointer; white-space: nowrap; text-decoration: none;
  transition: background .15s, color .15s, border-color .15s, box-shadow .15s, transform .1s;
}
.sl-btn:hover, #sl-app tr.footable-filtering .input-group .btn:hover { transform: translateY(-1px); text-decoration: none; }
.sl-btn:focus, #sl-app tr.footable-filtering .input-group .btn:focus { outline: none; box-shadow: var(--sl-focus); }
.sl-btn:active, #sl-app tr.footable-filtering .input-group .btn:active { transform: translateY(0); }
.sl-btn[disabled],
#sl-app tr.footable-filtering .input-group .btn[disabled],
.sl-btn.is-disabled,
#sl-app tr.footable-filtering .input-group .btn.is-disabled { opacity: .5; cursor: not-allowed; transform: none; }
#sl-app tr.footable-filtering .input-group .input-group-addon, #sl-app tr.footable-filtering .input-group .input-group-btn {
  width: auto;
  display: flex;
  gap: 5px;
}
.sl-btn--primary, #sl-app tr.footable-filtering .input-group .btn-primary { background: var(--sl-blue); border-color: var(--sl-blue); color: #fff; }
.sl-btn--primary:hover, #sl-app tr.footable-filtering .input-group .btn-primary:hover { background-color: var(--sl-blue-600) !important; border-color: var(--sl-blue-600); color: #fff; }

#sl-app tr.footable-filtering .input-group .input-group-btn .btn.btn-default { position: relative !important; }

.sl-btn--pink { background: var(--sl-pink); border-color: var(--sl-pink); color: #fff; }
.sl-btn--pink:hover { background: var(--sl-pink-600); border-color: var(--sl-pink-600); color: #fff; }

.sl-btn--ghost { background: transparent; color: var(--sl-fg-2); }
.sl-btn--ghost:hover { background: var(--sl-blue); border-color: var(--sl-blue); color: #fff; }

.sl-btn--danger { background: transparent; border-color: var(--sl-border); color: var(--sl-fg-3); }
.sl-btn--danger:hover { background: var(--sl-pink-050); border-color: var(--sl-pink); color: var(--sl-pink); }

.sl-btn--pill { border-radius: var(--sl-radius-pill); }
.sl-btn--xs { height: 1.3rem; padding: .3rem; }
.sl-btn--xxs { height: 1rem; padding: .3rem; border-radius: var(--sl-radius-xxs); }
.sl-btn--icon, #sl-app tr.footable-filtering .input-group .btn { width: 1.75rem; padding: 0; }
.sl-btn--icon.sl-btn--xs { width: 1.3rem; }
.sl-btn--icon.sl-btn--xxs { width: 1rem; }
.sl-btn--icon i, .sl-btn--icon.sl-btn--xs i {
  line-height: 0 !important;
}
.sl-btn--icon.sl-btn--xxs i {
  font-size: .60rem;
}

/* Chip de filtro/toggle */
.sl-chip {
  display: inline-flex; align-items: center; gap: .3125rem;
  font-size: .6875rem; font-weight: 600; line-height: 1.4;
  color: var(--sl-fg-2); background: transparent;
  border: 1px solid var(--sl-border); border-radius: var(--sl-radius-pill);
  padding: .1875rem .625rem; cursor: pointer;
  transition: background .15s, color .15s, border-color .15s, transform .1s;
}
.sl-chip:hover  { transform: translateY(-3px); }
.sl-chip:focus  { outline: none; box-shadow: none; }
.sl-chip.is-active { color: #fff; background: var(--sl-blue); border-color: var(--sl-blue); }
.sl-chip[style*="--sl-chip-color"]           { border-color: var(--sl-chip-color); }
.sl-chip[style*="--sl-chip-color"].is-active { background: var(--sl-chip-color); border-color: var(--sl-chip-color); color: #fff; }

/* ——— 5. Píldoras, badges y etiquetas ——————————————————————————————————— */
.sl-pill {
  display: inline-flex; align-items: center;
  font-size: .625rem; font-weight: 400; letter-spacing: .06em; text-transform: uppercase;
  color: #fff; border: 1px solid transparent; border-radius: var(--sl-radius-pill);
  padding: .4375rem .375rem; line-height: 1; white-space: nowrap;
}
.sl-pill--status { background: var(--sl-pill-color, var(--sl-blue)); }

.sl-badge-urgent {
  display: inline-flex; align-items: center;
  font-size: .625rem; font-weight: 400; letter-spacing: .06em; text-transform: uppercase;
  color: #fff; background: var(--sl-state-urgent); border: 1px solid var(--sl-state-urgent);
  border-radius: var(--sl-radius-pill); padding: .4375rem .375rem; line-height: 1; white-space: nowrap;
}

.sl-tag {
  display: inline-flex; align-items: center; gap: .25rem;
  font-size: .5625rem; font-weight: 700; color: var(--sl-blue); background: var(--sl-blue-100);
  border-radius: var(--sl-radius-pill); padding: .1875rem .5rem;
  white-space: nowrap; max-width: 8.75rem; overflow: hidden; text-overflow: ellipsis;
}

.sl-pill--outline {
  display: inline-flex; align-items: center;
  font-size: .625rem; font-weight: 400; letter-spacing: .06em; text-transform: uppercase;
  color: var(--sl-state-done); background: transparent;
  border: 1px solid var(--sl-state-done); border-radius: var(--sl-radius-pill);
  padding: .4375rem .375rem; line-height: 1; white-space: nowrap;
}

/* Badge numérico genérico (contador): círculo rosa reutilizable en cualquier parte de
   la UI (tabs, listados, menús...) para marcar recuentos — mismo estilo exacto que el
   badge del header (.megaheader ul.top-menu-avisos ... .badge: círculo, anillo blanco,
   sombra), pero como clase de uso general en vez de acoplada a ese selector concreto. */
.sl-badge-count {
  display: inline-flex; align-items: center; justify-content: center;
  width: 17px; height: 17px; padding: 0;
  border-radius: 50%;
  background: var(--sl-pink); color: #fff;
  font-size: 9px; font-weight: 700; line-height: 1;
  border: 2px solid #fff;
  box-shadow: 0 1px 2px rgba(0,0,0,.25);
  vertical-align: middle;
}

/* ——— 6. Tarjetas ——————————————————————————————————————————————————————— */
.sl-card {
  position: relative;
  background: var(--sl-bg-card);
  border: 1px solid var(--sl-border);
  border-radius: var(--sl-radius-lg);
  margin-bottom: .4375rem;
  cursor: pointer;
  transition: border-color .15s, transform .1s;
}
.sl-card:hover { border-color: var(--sl-border-2); transform: translateY(-1px); }
.sl-card--accent { border-top: 2px solid var(--sl-card-accent, var(--sl-blue)); }
.sl-card--urgent { border: 3px solid #edb7c4; }

.sl-card__body { padding: .75rem; }

.sl-card__title {
  display: inline-block;
  font-size: .8125rem; font-weight: 700; color: var(--sl-blue);
  line-height: 1.35; word-break: break-word; margin-bottom: .25rem; text-decoration: none;
}
.sl-card__title:hover { color: var(--sl-pink); text-decoration: none; }

.sl-card-meta {
  display: flex; gap: .5rem; flex-wrap: wrap;
  margin-top: .375rem; padding-top: .375rem; border-top: 1px solid var(--sl-border);
}
.sl-meta-block { display: flex; flex-direction: column; min-width: 0; }
.sl-meta-sep { width: 1px; background: var(--sl-border); align-self: stretch; margin: .125rem 0; }

.sl-card__action {
  position: absolute; top: .3125rem; right: .3125rem;
  width: 1.25rem; height: 1.25rem; padding: 0;
  display: flex; align-items: center; justify-content: center;
  border-radius: var(--sl-radius-sm); font-size: .625rem; line-height: 1;
  background: transparent; border: 1px solid transparent; color: var(--sl-fg-3);
  opacity: 0; cursor: pointer;
  transition: opacity .15s, background .15s, color .15s;
}
.sl-card:hover .sl-card__action { opacity: 1; }
.sl-card__action:hover { background: var(--sl-pink-050); border-color: var(--sl-pink); color: var(--sl-pink); }

/* ——— 6b. Cabecera de sección ——————————————————————————————————————————— */
.sl-page-header {
  display: flex; align-items: center; gap: .625rem;
  margin: 0 0 1rem; padding: 0 0 .625rem;
  border-bottom: 1px solid var(--sl-border);
  font-size: 1.125rem; font-weight: 700; color: var(--sl-blue);
  letter-spacing: .01em; line-height: 1.2;
}
.sl-page-header > i:first-child {
  display: inline-flex; align-items: center; justify-content: center;
  width: 1.875rem; height: 1.875rem; flex-shrink: 0;
  font-size: .875rem; color: var(--sl-blue);
  background: var(--sl-blue-100); border-radius: var(--sl-radius-md);
}
.sl-page-header--pink > i:first-child { color: var(--sl-pink); background: var(--sl-pink-050); }

/* ——— 6c. Panel estático (contenedor con cabecera) ——————————————————————— */
.sl-panel {
  background: var(--sl-bg-card); border: 1px solid var(--sl-border);
  border-radius: var(--sl-radius-md); box-shadow: var(--sl-shadow-sm);
  margin-bottom: 1rem; overflow: hidden;
}
.sl-panel__header {
  padding: .625rem .875rem; border-bottom: 1px solid var(--sl-border);
  background: var(--sl-bg-soft);
  font-size: .8125rem; font-weight: 700; color: var(--sl-blue); letter-spacing: .01em;
}
.sl-panel__body { padding: .875rem; }

/* ——— 6d. Tabla ————————————————————————————————————————————————————————— */
.sl-table {
  width: 100%; border-collapse: separate; border-spacing: 0; font-size: .75rem;
  border: 1px solid var(--sl-border); border-radius: var(--sl-radius-md); overflow: hidden;
}
.sl-table thead th {   /* mismo look que .sl-panel__header: fondo + línea fina */
  font-size: .8125rem; font-weight: 700; color: var(--sl-blue);
  background: var(--sl-bg-soft);
  border-bottom: 1px solid var(--sl-border); padding: .625rem .875rem; text-align: left;
}
.sl-table tbody td {
  padding: .5rem .625rem; border-bottom: 1px solid var(--sl-border);
  color: var(--sl-fg-2); vertical-align: middle;
}
.sl-table tbody tr:last-child td { border-bottom: none; }
.sl-table tbody tr:hover td { background: var(--sl-blue-050); }

/* Contador de resultados */
.sl-count { font-size: .75rem; font-weight: 500; color: var(--sl-fg-3); }
.sl-count strong { color: var(--sl-blue); font-weight: 700; }

/* ——— 6e. Grid de tarjetas ——————————————————————————————————————————————
   Genérico y reutilizable para cualquier listado de tarjetas (clientes,
   asuntos, etc). Cada columna se ajusta con minmax() (sin ancho fijo), pero
   todas las tarjetas de una misma fila comparten alto y ancho porque
   comparten pista de grid (align-items:stretch es el valor por defecto de
   los items de grid). */
.sl-cards-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(13.75rem, 1fr));
  gap: 1rem;
  padding: .25rem .125rem .5rem;
}

/* ——— 6f. Tarjeta de cliente (variante de .sl-card) ————————————————————— */
.sl-card--client {
  display: flex; flex-direction: column;
  margin-bottom: 0; /* el gap del grid ya gestiona el espaciado */
}
.sl-card__media {
  height: 4.375rem;
  background: var(--sl-bg-soft);
  display: flex; align-items: center; justify-content: center;
  border-bottom: 1px solid var(--sl-border);
  padding: .75rem .875rem;
  border-radius: var(--sl-radius-card) var(--sl-radius-card) 0 0;
}
.sl-card__media-img { max-height: 3.25rem; max-width: 11.875rem; object-fit: contain; }
/* Fallback de texto, oculto por defecto hasta que la imagen falle al cargar (ver onerror en el <img>) */
.sl-card__media-text {
  display: none;
  font-weight: 500; color: #7a8a99; letter-spacing: .04em;
  text-align: center; line-height: 1.25; word-break: break-word;
  font-size: .9375rem; /* nombre corto */
}
.sl-card__media-text--md { font-size: .8125rem; } /* nombre medio (13–18 caracteres) */
.sl-card__media-text--sm { font-size: .6875rem; } /* nombre largo (>18 caracteres) */

.sl-card__body--flex {
  padding: .625rem .75rem .5rem;
  flex: 1;
  display: flex; flex-direction: column; justify-content: space-between;
}
.sl-card__name { font-size: .75rem; font-weight: 600; color: #333; line-height: 1.3; margin-bottom: .375rem; }
.sl-clamp-2 { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }

.sl-card__footer {
  display: flex; align-items: center; justify-content: space-between;
  padding: .5rem .75rem;
  border-top: 1px solid #f0f0f0;
}

/* Fila de píldoras informativas dentro de una tarjeta (genérica) */
.sl-pill-row { display: flex; gap: .3125rem; flex-wrap: wrap; font-size: .6875rem; color: #888; }

/* Botón-píldora reutilizable con variantes de color */
.sl-pill-btn {
  display: inline-flex; align-items: center;
  border: 1px solid transparent; border-radius: .625rem;
  padding: .125rem .625rem; font-size: .625rem;
  cursor: pointer; transition: background .15s;
}
.sl-pill-btn i { margin-right: .1875rem; }
.sl-pill-btn--info { background: #e8eef3; color: #5a7a8a; }
.sl-pill-btn--info:hover { background: #d0dce5; }
.sl-pill-btn--info.sl-pill-btn--bordered { border-color: #1980B6; }
.sl-pill-btn--muted { background: #f5e8e8; color: #a05a5a; }
.sl-pill-btn--muted:hover { background: #ebd4d4; }

/* ——— 6g. Popover flotante (genérico, posicionado por JS via top/left/width) ——— */
.sl-popover {
  display: none; position: fixed; z-index: 9999;
  background: #fff; border: 1px solid #e5e9ee; border-radius: var(--sl-radius-md);
  box-shadow: 0 4px 18px rgba(0,0,0,.15);
  padding: .625rem 0;
}
.sl-popover__title {
  padding: .25rem .875rem .5rem;
  font-size: .625rem; font-weight: 600; text-transform: uppercase; letter-spacing: .06em;
  color: #aaa; border-bottom: 1px solid #f0f0f0; margin-bottom: .25rem;
}
.sl-popover-item { display: flex; align-items: center; gap: .5rem; padding: .375rem .875rem; }
.sl-popover-item__avatar {
  width: 1.75rem; height: 1.75rem; border-radius: 50%; flex-shrink: 0;
  background: #e8eef3; display: flex; align-items: center; justify-content: center;
}
.sl-popover-item__avatar i { font-size: .6875rem; color: #7a9ab0; }
.sl-popover-item__info { min-width: 0; overflow: hidden; }
.sl-popover-item__name { font-size: .6875rem; font-weight: 600; color: #333; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sl-popover-item__userid { font-size: .625rem; color: #888; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sl-popover-item__email { font-size: .625rem; color: #aaa; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

/* ——— 7. Formularios ———————————————————————————————————————————————————— */
.sl-input, .sl-select {
  height: 1.75rem; padding: 0 .5rem;
  font-family: var(--sl-font); font-size: .75rem; color: var(--sl-fg-2);
  background: #fff; border: 1px solid var(--sl-border); border-radius: var(--sl-radius-sm);
  transition: border-color .15s, box-shadow .15s;
}
.sl-input:focus, .sl-select:focus { outline: none; border-color: var(--sl-blue); box-shadow: var(--sl-focus); }
.sl-input::placeholder { color: var(--sl-fg-3); }
.sl-select { min-width: 11.25rem; }

.sl-input--on-dark {
  background: rgba(255,255,255,.12); border: 1px solid rgba(255,255,255,.2);
  border-radius: var(--sl-radius-pill); color: #fff;
}
.sl-input--on-dark::placeholder { color: rgba(255,255,255,.85); }
.sl-input--on-dark:focus { background: rgba(255,255,255,.18); border-color: rgba(255,255,255,.4); box-shadow: none; }

/* Formulario en línea (input + botón en una fila) */
.sl-form-inline { display: flex; align-items: center; gap: .5rem; flex-wrap: wrap; margin: 0; }
.sl-form-inline .sl-input { min-width: 13.75rem; }

/* ——— 8. Barras: topbar, toolbar y dropdowns ———————————————————————————— */
/* Cabecera tipo "barra de pantalla" (estilo kanban): título + acciones a lo ancho. */
.sl-topbar {
  display: flex; align-items: center; gap: .625rem; flex-wrap: wrap;
  background: #fff;
  padding: 1rem;
  border-bottom: 1px solid var(--sl-border);
}
.sl-topbar .sl-title { flex: 1 1 auto; min-width: 0; display: flex; align-items: center; gap: .5rem; }
/* Icono del título: chip cuadrado redondeado con fondo azul e icono blanco */
.sl-topbar .sl-title > i:first-child {
  flex: 0 0 auto;
  display: inline-flex; align-items: center; justify-content: center;
  width: 1.85rem; height: 1.85rem;
  background: var(--sl-blue-100); color: var(--sl-blue);
  border-radius: var(--sl-radius-sm);
  font-size: .9375rem; line-height: 1;
}
.sl-topbar .sl-title small { font-size: .75rem; font-weight: 400; color: var(--sl-fg-3); }   /* contador / subtítulo / aclaración */

.sl-toolbar {
  display: flex; align-items: center; gap: .5rem; flex-wrap: wrap;
  background: #fff; border-bottom: 1px solid var(--sl-border); padding: .5rem 1rem;
}
.sl-toolbar__sep { color: var(--sl-border-2); margin: 0 .125rem; }
.sl-toolbar__summary { margin-left: auto; color: var(--sl-fg-3); font-size: .6875rem; font-weight: 500; }

.sl-menu {
  min-width: 6.25rem; font-size: .75rem;
  border-radius: var(--sl-radius-md); box-shadow: var(--sl-shadow-md); border: 1px solid var(--sl-border);
}
.sl-menu > li > a { display: flex; align-items: center; gap: .3125rem; padding: .3125rem 1.25rem; }
.sl-menu .text-danger { color: var(--sl-pink); }

/* ——— 9. Estados semánticos (puente data-estado) ———————————————————————— */
[data-estado="1"] { --sl-state: var(--sl-blue); }
[data-estado="2"] { --sl-state: #1E6BB8; }
[data-estado="3"] { --sl-state: var(--sl-state-progress); }
[data-estado="4"],
[data-estado="5"],
[data-estado="6"] { --sl-state: var(--sl-state-neutral); }
[data-estado="7"] { --sl-state: var(--sl-state-done); }
[data-estado="8"] { --sl-state: var(--sl-state-review); }

.sl-pill--status[data-estado] { background: var(--sl-state); }
.sl-card--accent[data-estado] { border-top-color: var(--sl-state); }

/* ——— 10. Superficie oscura (hero / sidebar de marca) ——————————————————— */
.sl-surface-dark {
  background: linear-gradient(135deg, var(--sl-blue), #022E5B);
  color: #fff; position: relative; overflow: hidden;
}
.sl-surface-dark .sl-eyebrow { color: rgba(255,255,255,.6); }
.sl-surface-dark__halo {
  position: absolute; top: -20px; right: -20px; width: 100px; height: 100px;
  border-radius: 50%; background: rgba(227,54,120,.4); filter: blur(30px); pointer-events: none;
}
.sl-surface-dark .sl-btn {
  border-color: rgba(255,255,255,.3); color: rgba(255,255,255,.85); background: rgba(255,255,255,.1);
}
.sl-surface-dark .sl-btn:hover { background: rgba(255,255,255,.2); color: #fff; }

/* ——— 11. Utilidades ———————————————————————————————————————————————————— */
.sl-progress { height: .25rem; background: #EEF1F5; border-radius: var(--sl-radius-pill); overflow: hidden; }
.sl-progress__fill { height: 100%; width: 0; border-radius: var(--sl-radius-pill);
  background: var(--sl-progress-color, var(--sl-blue)); transition: width .35s ease; }

.sl-scroll { overflow-y: auto; }
.sl-scroll::-webkit-scrollbar { width: 6px; background: transparent; }
.sl-scroll::-webkit-scrollbar-thumb { background: var(--sl-border-2); border-radius: 3px; }

.sl-shadow-sm { box-shadow: var(--sl-shadow-sm); }
.sl-shadow-md { box-shadow: var(--sl-shadow-md); }
.sl-radius-md { border-radius: var(--sl-radius-md); }
.sl-radius-pill { border-radius: var(--sl-radius-pill); }

.sl-mt-1 { margin-top: var(--sl-space-1); } .sl-mt-2 { margin-top: var(--sl-space-2); }
.sl-p-2  { padding: var(--sl-space-2); }     .sl-p-3  { padding: var(--sl-space-3); }
.sl-gap-2 { gap: var(--sl-space-2); }        .sl-gap-3 { gap: var(--sl-space-3); }
.sl-margin-lr-15 { margin: 15px; }

.sl-focusable:focus { outline: none; box-shadow: var(--sl-focus); }

.sl-shake { animation: sl-shake 1.8s infinite; }
@keyframes sl-shake {
  0%,100% { transform: translate(1px,1px) rotate(0); }
  25% { transform: translate(-2px,-1px) rotate(-1deg); }
  50% { transform: translate(2px,2px) rotate(1deg); }
  75% { transform: translate(-1px,1px) rotate(0); }
}

/* ——— 12. Capa de compatibilidad Bootstrap 3 (scopeada a #sl-app) ————————
   Mapea los componentes heredados de Nice Admin a los tokens de marca SOLO
   dentro de #sl-app, para unificar pantallas con markup Bootstrap sin tocarlo.
   No afecta a ninguna pantalla que no envuelva su contenido en #sl-app.        */

/* Botones */
#sl-app .btn {
  border-radius: var(--sl-radius-sm); font-weight: 600; box-shadow: none; font-size: .6875rem;
  transition: background .15s, color .15s, border-color .15s, transform .1s;
}
#sl-app .btn:hover { transform: translateY(-1px); }
#sl-app .btn:focus { box-shadow: var(--sl-focus); }
#sl-app .btn-primary { background: var(--sl-blue); border-color: var(--sl-blue); color: #fff; }
#sl-app .btn-primary:hover, #sl-app .btn-primary:focus { background: var(--sl-blue-600); border-color: var(--sl-blue-600); color: #fff; }
#sl-app .btn-danger { background: var(--sl-pink); border-color: var(--sl-pink); color: #fff; }
#sl-app .btn-danger:hover, #sl-app .btn-danger:focus { background: var(--sl-pink-600); border-color: var(--sl-pink-600); color: #fff; }

/* Botones AGRUPADOS (.btn-group / .btn-group-vertical): el radio global de #sl-app .btn
   rompía el aspecto "unido" (cada botón salía redondeado y suelto). Restauramos el reset
   de Bootstrap: solo los extremos llevan radio, los interiores van a 0 y se solapan. */
#sl-app .btn-group > .btn,
#sl-app .btn-group-vertical > .btn { border-radius: 0; }
#sl-app .btn-group > .btn:hover { transform: none; }   /* no "saltar" fuera del grupo */

/* Horizontal: primero a la izquierda, último a la derecha */
#sl-app .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
  border-top-left-radius: var(--sl-radius-sm); border-bottom-left-radius: var(--sl-radius-sm);
}
#sl-app .btn-group > .btn:last-child:not(:first-child),
#sl-app .btn-group > .dropdown-toggle:not(:first-child) {
  border-top-right-radius: var(--sl-radius-sm); border-bottom-right-radius: var(--sl-radius-sm);
}
#sl-app .btn-group > .btn:only-child { border-radius: var(--sl-radius-sm); }

/* Vertical: primero arriba, último abajo */
#sl-app .btn-group-vertical > .btn:first-child:not(:last-child) {
  border-top-left-radius: var(--sl-radius-sm); border-top-right-radius: var(--sl-radius-sm);
}
#sl-app .btn-group-vertical > .btn:last-child:not(:first-child) {
  border-bottom-left-radius: var(--sl-radius-sm); border-bottom-right-radius: var(--sl-radius-sm);
}

/* Inputs */
#sl-app .form-control {
  border-radius: var(--sl-radius-sm); border-color: var(--sl-border);
  box-shadow: none; color: var(--sl-fg-2); font-size: .75rem;
}
#sl-app .form-control:focus { border-color: var(--sl-blue); box-shadow: var(--sl-focus); }
/* Labels de filtros legacy (sin cabecera): estaban en 11px fijos (style.css con !important).
   Subimos a rem para que se lean y escalen; !important para batir esa regla legacy. */
#sl-app .label-filtros-sin-cabecera { font-size: .6875rem !important; color: var(--sl-fg-3); }

/* Paneles */
#sl-app .panel {
  border: 1px solid var(--sl-border); border-radius: var(--sl-radius-md);
  box-shadow: var(--sl-shadow-sm);
}
#sl-app .panel-heading {
  background: var(--sl-bg-soft); border-bottom: 1px solid var(--sl-border);
  color: var(--sl-blue); font-weight: 700;
  box-shadow: none;
  padding: 5px 15px;
  padding-top: 10px;
  border-color: var(--sl-border);
  display: flex;
  align-items: center;
  gap: .5rem;
}
#sl-app .panel-heading i {
  border: none;
  font-size: inherit;
}
#sl-app div.panel-body {
  box-shadow: none;
}

/* Badges / labels */
#sl-app .label-primary { background: var(--sl-blue); border-radius: var(--sl-radius-pill); font-weight: 600; }

/* Alerts */
#sl-app .alert { border-radius: var(--sl-radius-md); }

/* Cabeceras de página heredadas */
#sl-app .page-header { border-bottom-color: var(--sl-border); }

/* Nombre de cliente: unificar tipografía venga en <label> (con logo) o en
   <div> de texto plano (sin logo). El helper get_cliente_logo_html_td() usa
   ambos caminos, por eso sin esto el peso de letra difiere entre clientes. */
#sl-app .clientes_logos,
#sl-app .clientes_logos label {
  font-family: var(--sl-font);
  font-size: .6875rem; font-weight: 600; color: var(--sl-fg-2);
  margin: 0;
}

/* Tablas legacy (.table.webapp / border-round-th) → look del sistema en
   pantallas migradas: cabecera tipo panel (fondo + línea fina), filas con
   separador fino y hover suave. Se respetan los fondos de fila inline
   (zebra / prioridad), que son semánticos. */
#sl-app .table.webapp {
  border: 1px solid var(--sl-border); border-radius: var(--sl-radius-md);
}
#sl-app .table.webapp th,
#sl-app .table.webapp.border-round-th th {
  color: var(--sl-blue); background: var(--sl-bg-soft);
  border: 0; border-bottom: 1px solid var(--sl-border);
  border-radius: 0; font-weight: 700; font-size: .8125rem;
  /* banda de cabecera; lateral igual que el td (.3rem) para no ensanchar columnas */
  padding: .5rem .3rem !important;
  vertical-align: middle;
  text-align: left;
}
#sl-app .table.webapp th, #sl-app .table.webapp.border-round-th .footable-filtering th:first-child {
  padding: 15px !important;
}
#sl-app tr.footable-filtering th form.form-inline {
  margin-bottom: 0px !important;
  display: flex;
  align-items: center;
  gap: 10px;
}
#sl-app tr.footable-filtering .input-group input,
#sl-app tr.footable-filtering .input-group-btn button {
  height: 1.75rem;
}
#sl-app tr.footable-filtering .input-group {
  display: flex;
  gap: 5px;
}
#sl-app tr.footable-filtering .input-group .btn-primary > * {
  line-height: 0 !important;
  font-size: .75rem;
}
#sl-app .table.webapp td {
  border-top: 0; border-bottom: 1px solid var(--sl-border); color: var(--sl-fg-2);
  /* aire vertical en las celdas sin romper columnas con width en px (poco padding lateral) */
  padding: .45rem .3rem !important;
  font-size: .75rem;   /* antes heredaba ~12px fijos del tema legacy */
  /* Montserrat a peso 400 + antialiasing se veía fino/desvaído en celdas pequeñas:
     500 (medium) mejora mucho la legibilidad sin engordar la tabla. */
  font-weight: 600;
}
#sl-app .table.webapp tbody tr:last-child td { border-bottom: 0; }
#sl-app .table-tr-hover > tbody > tr:hover { background-color: var(--sl-blue-050) !important; }

/* Paginador de FooTable (módulo "paging"): re-tokeniza el <ul class="pagination">
   estándar de Bootstrap 3 que genera la librería. */
#sl-app .pagination > li > a,
#sl-app .pagination > li > span {
  border-color: var(--sl-border);
  color: var(--sl-fg-2);
  font-size: .75rem;
  font-weight: 600;
}
#sl-app .pagination > li > a:hover,
#sl-app .pagination > li > a:focus {
  background: var(--sl-blue-050);
  border-color: var(--sl-border-2);
  color: var(--sl-blue);
}
#sl-app .pagination > li.active > a,
#sl-app .pagination > li.active > span,
#sl-app .pagination > li.active > a:hover {
  background: var(--sl-blue);
  border-color: var(--sl-blue);
  color: #fff;
}
#sl-app .pagination > li.disabled > a,
#sl-app .pagination > li.disabled > span { color: var(--sl-fg-3); }

/* Iconos .asunto-marcas-clientes (👁 / creado-por-cliente): son position:absolute SIN offsets.
   Con el scroll interno del shell (#sl-app/.wrapper) su bloque contenedor quedaba FUERA del
   scroll, así que al hacer scroll del listado los iconos se quedaban flotando fuera de sitio.
   Posicionamos su celda contenedora para que el anclaje sea local y acompañen a la fila. */
#sl-app td:has(> .asunto-marcas-clientes) { position: relative; }

/* Cabecera del asunto (modules/asunto.cabecera.tpl): el título no trae color
   propio y heredaba el gris-azulado de #sl-app (--sl-fg-2) que, con su
   opacity:.7 inline, quedaba lavado ("gris raro"). Color de marca + opacidad
   plena (!important bate el opacity inline). */
#sl-app .asunto_cabecera > div:first-child {
  color: var(--sl-blue);
  opacity: 1 !important;
}

/* Labels flotantes .label-header-sup (cabeceras de campo tipo "HORAS TOTALES"):
   son position:absolute con offset fijo pensado para UNA línea. Montserrat es
   más ancha que la fuente legacy, así que algunos labels envolvían a 2 líneas
   y la segunda se solapaba con el valor de abajo. nowrap restaura la línea
   única (intención original del patrón). */
#sl-app .label-header-sup { white-space: nowrap; }

/* ——— 14. Chrome legacy: barra superior + menú lateral —————————————————————
   La barra (header.megaheader) y el menú (#sidebar) son layout GLOBAL, fuera de
   #sl-app. Se tokenizan aquí por sus selectores propios. Como este CSS solo se
   carga en pantallas migradas, el restyle SOLO afecta a esas pantallas; el resto
   de la app conserva su aspecto. Sin tocar el markup de barra.tpl / menu.tpl.    */

/* --- Barra superior (ya es .white-bg) --- */
.header.megaheader.white-bg {
  background: #fff;
  border-bottom: 1px solid var(--sl-border);
  box-shadow: var(--sl-shadow-sm);
}
.megaheader .btn {
  border-radius: var(--sl-radius-sm); font-weight: 600; box-shadow: none;
  transition: background .15s, color .15s, border-color .15s, transform .1s;
}
.megaheader .btn:hover { transform: translateY(-1px); }
.megaheader .btn-primary { background: var(--sl-blue); border-color: var(--sl-blue); }
/* Hover de los botones del header: invierte a fondo blanco con icono/texto azul (mismo azul del botón normal) */
.megaheader .btn-primary:hover, .megaheader .btn-primary:focus,
.megaheader ul.top-menu-avisos a.avisos-citas:hover, .megaheader ul.top-menu-avisos a.avisos-citas:focus {
  background: #fff; color: var(--sl-blue); border-color: var(--sl-blue);
}
.megaheader .btn-primary:hover i, .megaheader .btn-primary:hover .fa,
.megaheader .btn-primary:focus i, .megaheader .btn-primary:focus .fa,
.megaheader ul.top-menu-avisos a.avisos-citas:hover i, .megaheader ul.top-menu-avisos a.avisos-citas:hover .fa,
.megaheader ul.top-menu-avisos a.avisos-citas:focus i, .megaheader ul.top-menu-avisos a.avisos-citas:focus .fa {
  color: var(--sl-blue);
}
/* Badge de notificación de los botones del header: círculo rosa con anillo blanco,
   asomando por la esquina (en vez del azul clavado que se confundía con el botón).
   El círculo/anillo/sombra/color en sí los aporta la clase genérica .sl-badge-count
   (aplicada en el HTML junto a .badge); aquí solo queda lo específico de este
   contexto: sacarlo de flujo y clavarlo en la esquina del botón. */
.megaheader ul.top-menu-avisos a.avisos-citas { position: relative; overflow: visible; }
.megaheader ul.top-menu-avisos a.avisos-citas .badge {
  position: absolute; top: -5px; right: -5px; left: auto;
}
.megaheader ul.top-menu-avisos a.avisos-citas .badge > small {
  top: 0; font-size: inherit; font-weight: 700;
}
/* En hover (botón blanco) el anillo blanco se mimetiza: usar azul para separarlo */
.megaheader ul.top-menu-avisos a.avisos-citas:hover .badge,
.megaheader ul.top-menu-avisos a.avisos-citas:focus .badge {
  border-color: var(--sl-blue);
}
.megaheader .form-control { border-radius: var(--sl-radius-sm); border-color: var(--sl-border); box-shadow: none; }
.megaheader .form-control:focus { border-color: var(--sl-blue); box-shadow: var(--sl-focus); }
.megaheader .fecha-calendar {
  background: var(--sl-blue-050); background-image: none;
  color: var(--sl-blue); font-weight: 600; font-size: .8125rem;
  border: 1px solid var(--sl-border); border-radius: var(--sl-radius-sm);
  padding: 5px 10px;
}
.megaheader a:hover .fecha-calendar { background: var(--sl-blue-100); }

/* --- Menú lateral ---
   El sidebar NO lleva la clase .white-bg (su fondo legacy es #1a2732 oscuro), así
   que forzamos el look claro del sistema de forma incondicional y consistente. */
#sidebar.nav-collapse { background: #fff; border-right: 1px solid var(--sl-border); }
ul.sidebar-menu li a {
  background: #fff;
  color: var(--sl-fg-2);
  /* !important para batir la regla legacy (font-size:14px!important; font-weight:bold!important) */
  font-weight: 600 !important; font-size: .8125rem !important;
  border-right: none; border-bottom: 1px solid var(--sl-border);
}
ul.sidebar-menu li a span { font-weight: 600 !important; font-size: .8125rem !important; }
ul.sidebar-menu li a i.fofipol { color: var(--sl-blue); }
ul.sidebar-menu li.active a,
ul.sidebar-menu li a:hover,
ul.sidebar-menu li a:focus { background: var(--sl-blue); color: #fff !important; }
ul.sidebar-menu li.active a i.fofipol,
ul.sidebar-menu li a:hover i.fofipol,
ul.sidebar-menu li a:focus i.fofipol { color: #fff; }   /* contraste sobre azul */
/* Submenús */
ul.sidebar-menu li ul.sub li { background: #fff; }
ul.sidebar-menu li ul.sub li a { background: #fff; color: var(--sl-fg-2) !important; font-size: .8125rem !important; font-weight: 600 !important; }
ul.sidebar-menu li ul.sub li a:hover,
ul.sidebar-menu li ul.sub li.active a { background: var(--sl-blue); color: #fff !important; }
/* Contadores del menú vertical: el legacy small.alerta-small los pintaba como un círculo
   flotado y desplazado hacia abajo (top:12px). Aquí los normalizamos a píldora compacta,
   igual estilo que el badge del menú horizontal (.site-menu-badge). */
ul.sidebar-menu .alerta-small {
  float: none; position: static; top: auto; right: auto;
  display: inline-flex; align-items: center; justify-content: center;
  width: auto; min-width: 18px; height: 18px; padding: 0 6px;
  border: 0; border-radius: 9px;
  background: #e74c3c; color: #fff;
  font-size: 11px; font-weight: 700; line-height: 1;
  margin-left: 6px; vertical-align: middle;
}
/* En ítem activo/hover (fondo azul) el badge sigue legible (rojo sobre azul, texto blanco) */
ul.sidebar-menu li a:hover .alerta-small,
ul.sidebar-menu li.active > a .alerta-small { color: #fff; }

/* ——— 15. Diálogos (modales) y tooltips: chrome global FUERA de #sl-app ————
   Las modales de bootstrap-dialog y los tooltips de Bootstrap se inyectan al
   final del <body>, FUERA de #sl-app, así que no se les puede aplicar el ancla
   de especificidad del sistema: se tokenizan por sus selectores propios.
   Como softline-ui.css se carga DESPUÉS del bundle de Nice Admin y de
   bootstrap-dialog-theme.css, estas reglas ganan por orden de cascada (mismo
   peso de especificidad) salvo donde el legacy usa !important (cabecera).
   El CSS se carga en todas las pantallas, por lo que el restyle es global. */

/* --- Contenedor de la modal --- */
.bootstrap-dialog .modal-content,
.modal-dialog .modal-content {
  font-family: var(--sl-font);
  border: 1px solid var(--sl-border);
  border-radius: var(--sl-radius-lg);
  box-shadow: var(--sl-shadow-md);
  overflow: hidden;   /* recorta cabecera/footer a las esquinas redondeadas */
}

/* --- Cabecera: barra azul de marca --- */
/* !important para batir el legacy `div.bootstrap-dialog.type-primary .modal-header
   { background:#01209F !important }`. Solo afecta a la cabecera por defecto/primary;
   las modales semánticas (type-danger/success/warning del bundle) conservan su color. */
.bootstrap-dialog .modal-header,
.modal-dialog .modal-header,
div.bootstrap-dialog.type-primary .modal-header {
  background: var(--sl-blue) !important;
  border: 0;
  border-top-left-radius: var(--sl-radius-lg);
  border-top-right-radius: var(--sl-radius-lg);
  text-shadow: none;
  padding: .625rem 1rem;
}
.bootstrap-dialog .bootstrap-dialog-title,
.modal-dialog .modal-header .bootstrap-dialog-title {
  font-family: var(--sl-font);
  font-size: .9375rem; font-weight: 700;
  color: #fff; top: 0;
}
/* Botón de cierre: × rosa de marca sobre la barra azul (sin text-shadow legacy).
   Se replica el prefijo `div` del legacy para igualar especificidad (0,0,2,2 /
   0,0,3,3) y ganar por orden de carga; sin él, el `color:#E0007A` legacy vence. */
div.bootstrap-dialog-close-button button.close,
div.modal-dialog div.modal-header button.close {
  margin-top: 0;
  color: var(--sl-pink);
  opacity: 1;
  text-shadow: none;
  font-size: 1.625rem; font-weight: 400; line-height: 1;
  transition: color .15s, transform .1s;
}
.bootstrap-dialog .modal-header button.close:hover,
.bootstrap-dialog .modal-header button.close:focus,
.modal-dialog .modal-header button.close:hover,
.modal-dialog .modal-header button.close:focus {
  color: #FF7AAA !important;   /* rosa más claro al pasar; !important bate el legacy `color:red!important` */
  transform: scale(1.1);
}

/* --- Cuerpo --- */
.bootstrap-dialog .modal-body,
.modal-dialog .modal-body {
  font-family: var(--sl-font);
  color: var(--sl-fg-2);
  background: #fff;   /* shorthand: neutraliza las sombras-gradiente de scroll del legacy */
}
.bootstrap-dialog .modal-body .form-control,
.modal-dialog .modal-body .form-control {
  border-radius: var(--sl-radius-sm); border-color: var(--sl-border);
  box-shadow: none; color: var(--sl-fg-2); font-size: .75rem;
}
.bootstrap-dialog .modal-body .form-control:focus,
.modal-dialog .modal-body .form-control:focus {
  border-color: var(--sl-blue); box-shadow: var(--sl-focus);
}

/* --- Pie: fondo suave + hairline (sin bordes negros / sombras / text-shadow legacy) --- */
.bootstrap-dialog .modal-footer,
.modal-dialog .modal-footer {
  background: var(--sl-bg-soft);
  border: 0;
  border-top: 1px solid var(--sl-border);
  border-bottom-left-radius: var(--sl-radius-lg);
  border-bottom-right-radius: var(--sl-radius-lg);
  box-shadow: none;
  text-shadow: none;
  padding: .625rem 1rem;
}
/* Botones del pie: la capa de compat de #sl-app no llega aquí, así que se
   re-tokenizan explícitamente (matando el degradado de .btn-default). */
.bootstrap-dialog .modal-footer .btn,
.modal-dialog .modal-footer .btn {
  border-radius: var(--sl-radius-sm);
  font-weight: 600; font-size: .75rem;
  box-shadow: none; background-image: none;
  transition: background .15s, color .15s, border-color .15s, transform .1s;
}
.bootstrap-dialog .modal-footer .btn:hover,
.modal-dialog .modal-footer .btn:hover { transform: translateY(-1px); }
.bootstrap-dialog .modal-footer .btn:focus,
.modal-dialog .modal-footer .btn:focus { box-shadow: var(--sl-focus); outline: none; }

.bootstrap-dialog .modal-footer .btn-primary,
.modal-dialog .modal-footer .btn-primary {
  background: var(--sl-blue); border-color: var(--sl-blue); color: #fff;
}
.bootstrap-dialog .modal-footer .btn-primary:hover,
.bootstrap-dialog .modal-footer .btn-primary:focus,
.modal-dialog .modal-footer .btn-primary:hover,
.modal-dialog .modal-footer .btn-primary:focus {
  background: var(--sl-blue-600); border-color: var(--sl-blue-600); color: #fff;
}
.bootstrap-dialog .modal-footer .btn-default,
.modal-dialog .modal-footer .btn-default {
  background: #fff; background-image: none;
  border-color: var(--sl-border); color: var(--sl-fg-2);
}
.bootstrap-dialog .modal-footer .btn-default:hover,
.bootstrap-dialog .modal-footer .btn-default:focus,
.modal-dialog .modal-footer .btn-default:hover,
.modal-dialog .modal-footer .btn-default:focus {
  background: var(--sl-blue-050); border-color: var(--sl-border-2); color: var(--sl-blue);
}

/* --- Tooltips: azul de marca (en vez del #007aff iOS del bundle Nice Admin) ---
   Se igualan los selectores del bundle (misma especificidad) y ganan por orden
   de carga. NO se tocan .danger-tooltip / .success-tooltip (mayor especificidad
   en style.css): conservan su color semántico (rojo / verde). */
.tooltip { font-family: var(--sl-font); }
.tooltip.in { opacity: 1; filter: alpha(opacity=100); }
.tooltip-inner {
  background-color: var(--sl-blue);
  color: #fff;
  font-size: .6875rem; font-weight: 500;
  padding: .25rem .5rem;
  border-radius: var(--sl-radius-sm);
  box-shadow: var(--sl-shadow-md);
}
.tooltip.top .tooltip-arrow,
.tooltip.top-left .tooltip-arrow,
.tooltip.top-right .tooltip-arrow   { border-top-color: var(--sl-blue); }
.tooltip.right .tooltip-arrow       { border-right-color: var(--sl-blue); }
.tooltip.left .tooltip-arrow        { border-left-color: var(--sl-blue); }
.tooltip.bottom .tooltip-arrow,
.tooltip.bottom-left .tooltip-arrow,
.tooltip.bottom-right .tooltip-arrow { border-bottom-color: var(--sl-blue); }

/* POPOVERS JS PANTALLA ASUNTOS */
.popover-title {
  background-color: var(--sl-blue);
  color: #ffffff;
}

.popover-content {
  font-size: 14px;
  font-weight: normal;
  padding: 2px 5px;
}
/* FIN POPOVERS JS PANTALLA ASUNTOS */

/* ETIQUETAS EN LISTADO ASUNTOS */
#list-table .etiqueta-lista {
  border: 1px solid;
  border-radius: 50%;
  height: 20px;
  padding-top: 2px;
  padding-left: 0;
  display: flex;
  justify-content: center;
  align-items: center;
}
/* FIN ETIQUETAS EN LISTADO ASUNTOS */

/* ETIQUETA EN ENCARGO */
.etiqueta-encargo {
  border: 1px solid;
  border-radius: 50%;
  width: fit-content;
  height: 22px;
  display: flex;
  align-items: center;
  align-content: center;
  justify-content: center;
}
/* FIN ETIQUETA EN ENCARGO */

/* ============================================================================
   ASUNTO.TPL — CABECERA E INFO (rediseño "divulgación progresiva")
   ----------------------------------------------------------------------------
   Piezas nuevas para el rediseño de smarty/templates/asunto.tpl (cabecera) y
   modules/asunto.info.tpl (ficha de datos). Sustituyen a .label-header-sup /
   .info.no-editable / los badges sueltos SOLO en las zonas rediseñadas; el
   resto de la app sigue usando los patrones legacy hasta que se migren.
   ============================================================================ */

/* ——— Desbordamiento de valores dentro de .sl-fcell (filtros-grid.css) ————
   .span-u-etiq / .span-usu-fecha-etiq (etiqueta de usuario y "usuario+fecha")
   llevan white-space:nowrap global (style.css) pensado para listados anchos.
   Dentro de una celda .sl-fcell de ancho fijo (avatar+nombre largo, o
   avatar+nombre+fecha en "Creado por") ese nowrap se salía de la celda en
   vez de partir línea. Se permite el wrap SOLO dentro de .sl-fcell. */
.sl-filtros-grid .sl-fcell { overflow: visible; }
.sl-filtros-grid .sl-fcell .span-u-etiq,
.sl-filtros-grid .sl-fcell .span-usu-fecha-etiq {
  white-space: normal !important;
  display: inline-flex; align-items: center; flex-wrap: wrap; gap: .2rem;
  justify-content: center; max-width: 100%;
}
.sl-filtros-grid .sl-fcell .sl-meta-value { max-width: 100%; overflow-wrap: break-word; }

/* ——— Modificador columna: avatar (NxN) encima del nombre ——————————————————
   modules/usuario.etiqueta.tpl añade esta clase cuando se usa el parámetro
   force_width_img_user=N (ancho/alto en px del avatar), para celdas
   .sl-fcell donde interesa un layout vertical (avatar grande + nombre
   debajo) en vez de la fila avatar+nombre por defecto (.span-u-etiq
   de arriba). */
.span-u-etiq--column,
.sl-filtros-grid .sl-fcell .span-u-etiq.span-u-etiq--column {
  display: inline-flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: .35rem;
  white-space: normal;
  text-align: center;
}

/* Modificadores de .sl-meta-value para el estado semántico del DATO (no de
   la acción): valor de alerta (ej. "NADIE" asignado) / valor vacío-placeholder. */
.sl-meta-value--warn  { color: var(--sl-state-urgent); }
.sl-meta-value--muted { color: var(--sl-fg-3); font-weight: 500; font-style: italic; }

/* ——— Checklist de estado (Sí/No en línea) ————————————————————————————————
   Sustituye a los 7 bloques sueltos "Contactado/Visitado/D.Captados/
   Presu. preparado/revisado/enviado/Venta" del flujo comercial
   (asunto.info.tpl) por una fila compacta de chips — misma información,
   una sola línea de lectura en vez de 7 cajas con label flotante propio. */
.sl-check-row { display: flex; flex-wrap: wrap; gap: .4rem; }
.sl-check {
  display: inline-flex; align-items: center; gap: .3rem;
  font-size: .6875rem; font-weight: 600; line-height: 1;
  padding: .3rem .6rem; border-radius: var(--sl-radius-pill);
  border: 1px solid var(--sl-border); background: #fff; color: var(--sl-fg-3);
  white-space: nowrap;
}
.sl-check::before { font-weight: 800; }
.sl-check--yes { background: var(--sl-blue-050); border-color: var(--sl-blue-100); color: var(--sl-blue); }
.sl-check--yes::before { content: "✓"; }
.sl-check--no::before { content: "–"; color: var(--sl-fg-3); }

/* ——— Disclosure / sección plegable ("Más detalles", "Ver más campos") ———
   Progressive disclosure genérico y reutilizable. El JS SOLO alterna
   aria-expanded en el trigger y data-open en el panel: toda la animación
   (altura + rotación del chevron) vive aquí, cero JS de estilos.
   .sl-disclosure__badge avisa de contenido importante (alertas de cliente,
   reclamaciones pendientes...) aunque el panel esté colapsado, para no
   esconder por diseño un estado que requiere atención. */
.sl-disclosure__trigger {
  display: inline-flex; align-items: center; gap: .4rem;
  font-size: .6875rem; font-weight: 700; color: var(--sl-blue);
  background: var(--sl-blue-050); border: 1px dashed var(--sl-border-2);
  padding: .3rem .75rem;
  cursor: pointer; user-select: none; transition: background .15s, border-color .15s;
}
.sl-disclosure__trigger:hover { background: var(--sl-blue-100); }
.sl-disclosure__trigger:focus { outline: none; box-shadow: var(--sl-focus); }
.sl-disclosure__chevron { display: inline-flex; transition: transform .15s; }
.sl-disclosure__trigger[aria-expanded="true"] .sl-disclosure__chevron { transform: rotate(180deg); }
.sl-disclosure__badge {
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 1.125rem; height: 1.125rem; padding: 0 .3rem;
  background: var(--sl-pink); color: #fff; font-size: .625rem; font-weight: 800;
  border-radius: var(--sl-radius-pill); line-height: 1;
}
.sl-disclosure__panel { overflow: hidden; max-height: 0; transition: max-height .2s ease; }
.sl-disclosure__panel[data-open="true"] { max-height: 60rem; }
.sl-disclosure__panel-inner { padding-top: .75rem; }

/* ——— Etiqueta de departamento (icon tag) ————————————————————————————————
   Sustituye a .etiqueta/.etiqueta-content (position:absolute, apiladas a
   +35px unas de otras, fuera del flujo normal) por chips en línea dentro
   del flujo del documento. El color sigue viniendo inline por etiqueta
   (--sl-icon-tag-color), igual que hoy viene el background inline. */
.sl-icon-tag {
  display: inline-flex; align-items: center; justify-content: center;
  width: 1.5rem; height: 1.5rem; border-radius: var(--sl-radius-sm);
  background: var(--sl-icon-tag-color, var(--sl-blue)); color: #fff; font-size: .75rem;
  flex-shrink: 0;
}

/* ——— Favorito dentro del menú "más" de la cabecera ——————————————————————
   #asunto_favorito (ver style.css) es un sprite de 28 fotogramas pensado
   para flotar sobre la cabecera (100x100px, position:absolute, top/right
   fijos). Al vivir ahora dentro de un <li> del dropdown "más", se re-encaja
   en el flujo normal y se reduce con transform (la imagen y el JS que anima
   background-position NO se tocan, solo su tamaño en pantalla). */
.sl-menu {
  right: 0 !important;
  left: auto;
  opacity: 1;
}
.sl-menu-fav-wrap { display: inline-block; width: 1.5rem; height: 1.5rem; overflow: hidden; vertical-align: middle; }
.sl-menu #asunto_favorito { position: static; top: auto; right: auto; transform: scale(.24); transform-origin: 0 0; }

/* ============================================================================
   FIN ASUNTO.TPL — CABECERA E INFO
   ============================================================================ */

/* ============================================================================
   ASUNTO.ENCARGO.PANEL.INFO.TPL — panel de encargo (rediseño en línea con la
   cabecera/ficha del asunto: mismas cajas .sl-panel, mismo .sl-filtros-grid).
   ============================================================================ */

/* ——— Estado del encargo: de grupo de botones "pegados" a chips sueltos ———
   #eebar es un .btn-group de Bootstrap (radios como botones, sin tocar su
   lógica/JS). La capa de compatibilidad de #sl-app fuerza el look "unido"
   típico de btn-group (radio 0 en los botones interiores); aquí lo anulamos
   solo dentro de #eebar para que cada estado sea una píldora independiente. */
#sl-app #eebar.btn-group { display: flex; flex-wrap: wrap; gap: .35rem; }
#sl-app #eebar.btn-group > .btn {
  border-radius: var(--sl-radius-pill) !important;
  border: 1px solid var(--sl-border-2);
  background: #fff; color: var(--sl-fg-3); font-weight: 700;
}
#sl-app #eebar.btn-group > .btn.active {
  background: var(--sl-blue); border-color: var(--sl-blue); color: #fff;
}

/* ============================================================================
   FIN ASUNTO.ENCARGO.PANEL.INFO.TPL
   ============================================================================ */

/* ============================================================================
   EDICIÓN INLINE POR CAMPO (lápiz) — sustituye a los diálogos de "Editar
   asunto"/"Editar encargo" campo a campo. El JS (inline_edit_*) solo hace
   show/hide de .sl-inline-edit__display / .sl-inline-edit__input; el
   guardado real es un POST mínimo (solo el campo tocado) al mismo endpoint
   que ya usan los selects/checkboxes (asunto/autosave/<id>/<tipo>).
   Cubre inputs de texto/fecha/número, <select> simples (dpto, tipo
   facturación, representante) y <select multiple> (Departamentos y Rptes.
   asignados del asunto, que son muchos-a-muchos).
   ============================================================================ */
.sl-inline-edit { display: inline-flex; align-items: center; gap: .35rem; flex-wrap: wrap; }
.sl-inline-edit__pencil {
  font-size: .625rem; color: var(--sl-fg-3); cursor: pointer;
  opacity: .5; transition: opacity .15s, color .15s;
}
.sl-fcell:hover .sl-inline-edit__pencil { opacity: 1; }
.sl-inline-edit__pencil:hover { color: var(--sl-blue); }

/* El valor editable se pinta en azul (como un link) para que se note de un
   vistazo qué se puede tocar sin pasar por el diálogo grande; el estado
   vacío/"—" se queda en el gris apagado de siempre, no en azul. */
.sl-inline-edit__display { color: var(--sl-blue); font-weight: 600; cursor: pointer; }
.sl-inline-edit__display.sl-meta-value--muted,
.sl-inline-edit__display.sl-meta-value--warn { color: inherit; font-weight: inherit; }

.sl-inline-edit__input {
  height: 1.5rem !important; padding: 0 .35rem !important; font-size: .75rem !important;
  max-width: 8rem;
}
select.sl-inline-edit__input { max-width: 11rem; }
select.sl-inline-edit__input[multiple] {
  height: auto !important; min-height: 4.5rem; padding: .2rem !important; max-width: 14rem;
}

/* El wrapper que envuelve un <select class="select2"> (Representante
   asignado del encargo) necesita alto automático — select2 dibuja su propio
   contenedor visual al lado del <select> nativo, y la regla de arriba
   (1.5rem fijo) lo recorta. */
.sl-inline-edit__input:has(select.select2) { height: auto !important; padding: 0 !important; }

/* Botón "Cambio Rápido de Representante" y su lista de miembros del dpto.:
   viven FUERA del editor (como el lápiz), así que están siempre visibles y
   no dependen de haber pulsado el lápiz para usarse. */
.inline-quick-assign-list { max-width: 16rem; margin-top: .3rem; }
.inline-quick-assign-list .btn { margin: 1px; }

/* ============================================================================
   FIN EDICIÓN INLINE POR CAMPO
   ============================================================================ */
