
/* MONTSERRAT, Y SÓLO CUATRO PESOS. Decisión de Ramiro sobre una
   recomendación de diseño: Light 300 para notas, Regular 400 para el cuerpo,
   SemiBold 600 para encabezados y títulos de sección, Bold 700 para el título
   de la pantalla y el número que importa.
   Extra Bold y Black quedan AFUERA a propósito: en una pantalla llena de
   datos el peso extremo compite con los números y cansa. Por eso no se piden
   acá: si no se descargan, no se pueden usar por accidente.
   Se decidió usarla también en los números, sabiendo que sus cifras no tienen
   ancho parejo —el 1 es más angosto que el 8— y las columnas quedan un poco
   corridas entre sí. Se le mostró a Ramiro con las tres opciones al lado y
   eligió ésta: prefiere cómo se ve. Si algún día molesta, se arregla con una
   línea: «font-variant-numeric: tabular-nums». */
@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;600;700&display=swap');

/* ══ CIFRAS DE ANCHO PAREJO EN TODO EL SISTEMA ═════════════════════
   Montserrat trae adentro una opción —«tnum»— que hace que todos los dígitos
   midan lo mismo. Sin ella el 1 es más angosto que el 8, y en una columna de
   números las cifras no caen una debajo de la otra: en un sistema hecho de
   tablas de ventas eso se nota en cada renglón.
   Se activa UNA sola vez, acá, y lo hereda todo: pantalla, modales, gráficos
   y la ventana de impresión. La letra sigue siendo la misma Montserrat;
   cambia sólo el ancho de las cifras. Se le mostraron a Ramiro las tres
   opciones al lado y eligió ésta. */
html, body, input, select, textarea, button, table {
  font-variant-numeric: tabular-nums;
  font-feature-settings: "tnum" 1;
}

:root {
  --accent-texto: #131824;
  --bg: #131824;
  --panel: #1b2233;
  --panel-2: #202940;
  /* Se declara con su valor y no con ella misma: nombrarse adentro arma un
     círculo y deja la variable inválida. Venía así de antes. */
  --border: #252d3f;
  --accent-amber: #f2c200;
  --accent-blue: #4f8ef7;
  --green: #4caf6d;
  --red: #e2574c;
  --text: #ffffff;
  /* Ver el comentario del tema de arriba: la tinta apagada del modo oscuro
     sube para que no se lea gris. */
  --text-muted: #ffffff;
  /* El velo del modo oscuro: aclara. En «.tcg-claro» se da vuelta. */
  --lavado: rgba(255,255,255,.03);
  --lavado-2: rgba(255,255,255,.06);
  --lavado-3: rgba(255,255,255,.10);
}
* { box-sizing: border-box; }

/* Estado "armado" del ConfirmButton — funciona en cualquier sección de la app,
   con colores fijos que no dependen de las variables de tema de cada módulo. */
.confirm-armado {
  background: var(--red, #e2574c) !important;
  border-color: #ee776c !important;
  color: #fff !important;
  animation: confirmPulso 0.9s ease-in-out infinite;
  width: auto !important;
  min-width: max-content !important;
  padding: 0 10px !important;
  white-space: nowrap;
  font-size: 12px !important;
  font-weight: 700;
  z-index: 5;
  position: relative;
}
@keyframes confirmPulso {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.6; }
}

/* ================= Seguimiento de Cartera ================= */
.sc-panel { padding-bottom: 24px; }
.sc-toolbar { display: flex; justify-content: space-between; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 10px; }
.sc-buscador {
  display: flex; align-items: center; gap: 6px; background: var(--panel-2);
  border: 1px solid var(--border); border-radius: 8px; padding: 6px 10px;
  color: var(--text); flex: 1 1 280px; max-width: 420px;
}
.sc-buscador input { background: transparent; border: none; color: var(--text); font-size: 13px; font-family: inherit; width: 100%; outline: none; }
.sc-toolbar-botones { display: flex; align-items: center; gap: 10px; }
.sc-save-status { font-size: 12px; color: var(--text); }
.sc-btn {
  display: inline-flex; align-items: center; gap: 6px; background: var(--panel-2);
  border: 1px solid var(--border); border-radius: 8px; color: var(--text);
  padding: 7px 12px; font-size: 12.5px; cursor: pointer; font-family: inherit;
}
.sc-btn:hover { border-color: var(--accent-blue); }
.sc-btn--sm { padding: 5px 10px; font-size: 12px; color: var(--text); }
.sc-import-error {
  background: color-mix(in srgb, var(--red) 12%, var(--panel)); border: 1px solid var(--red);
  color: var(--text); border-radius: 8px; padding: 8px 12px; font-size: 12px; margin-bottom: 10px;
}
.sc-table-wrap {
  background: var(--panel); border: 1px solid var(--border); border-radius: 14px; overflow: hidden;
  border-top: 3px solid var(--accent-blue);
  box-shadow: 0 -2px 18px -4px color-mix(in srgb, var(--accent-blue) 55%, transparent);
}
.sc-table-wrap--ambar { border-top-color: var(--accent-amber); box-shadow: 0 -2px 18px -4px color-mix(in srgb, var(--accent-amber) 55%, transparent); }
.sc-titulo { font-size: 30px; font-weight: 700; margin: 4px 0 14px; text-shadow: 0 0 16px color-mix(in srgb, var(--accent-blue) 40%, transparent); }
.sc-estado-pill {
  display: inline-block; padding: 3px 9px; border-radius: 999px; font-size: 12px; font-weight: 700;
  text-transform: uppercase; letter-spacing: 0.3px;
}
.sc-estado-pill--verde { background: color-mix(in srgb, var(--green) 22%, transparent); color: var(--text); }
.sc-estado-pill--amarillo { background: color-mix(in srgb, var(--accent-amber) 22%, transparent); color: var(--text); }
.sc-estado-pill--rojo { background: color-mix(in srgb, var(--red) 22%, transparent); color: var(--red); }
.sc-estado-pill--gris { background: color-mix(in srgb, var(--text-muted) 18%, transparent); color: var(--text); }

.sc-indicadores { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 12px; margin-bottom: 18px; }
.sc-indicador-card {
  background: var(--panel); border: 1px solid var(--border); border-radius: 12px; padding: 14px 16px;
  border-top: 3px solid var(--accent-blue); box-shadow: 0 -1px 12px -4px color-mix(in srgb, var(--accent-blue) 45%, transparent);
}
.sc-indicador-titulo { font-size: 12px; text-transform: uppercase; letter-spacing: 0.3px; color: var(--text); font-weight: 600; margin-bottom: 6px; }
.sc-indicador-valor { font-size: 26px; font-weight: 700; font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; color: var(--text); text-shadow: 0 0 12px color-mix(in srgb, var(--accent-blue) 35%, transparent); }
.sc-indicador-nota { font-size: 12px; color: var(--text); margin-top: 6px; }

/* ---- Pendientes (indicador con detalle clickeable) ---- */
.sc-pendientes-lista { display: flex; flex-direction: column; gap: 6px; margin-top: 6px; }
.sc-pendiente-fila {
  display: flex; align-items: center; gap: 10px; width: 100%; text-align: left;
  background: var(--panel-2); border: 1px solid var(--border); border-radius: 8px;
  padding: 7px 10px; cursor: pointer; font-family: inherit; transition: all 0.12s ease;
}
.sc-pendiente-fila:hover:not(:disabled) { border-color: var(--accent-amber); }
.sc-pendiente-fila:disabled { cursor: default; opacity: 0.5; }
.sc-pendiente-num {
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-weight: 700; font-size: 15px;
  color: var(--text); min-width: 22px; text-align: right;
}
.sc-pendiente-label { font-size: 12px; color: var(--text); }
.sc-pendientes-detalle-lista { display: flex; flex-direction: column; gap: 1px; max-height: 420px; overflow-y: auto; }
.sc-pendiente-detalle-fila {
  display: flex; align-items: center; gap: 12px; width: 100%; text-align: left;
  background: transparent; border: none; border-bottom: 1px solid var(--border);
  padding: 9px 4px; cursor: pointer; font-family: inherit; color: var(--text); transition: background 0.12s ease;
}
.sc-pendiente-detalle-fila:hover { background: var(--panel-2); }
.sc-pendiente-detalle-contrato { font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 12px; color: var(--text); min-width: 70px; }
.sc-pendiente-detalle-cliente { flex: 1; font-size: 12.5px; font-weight: 600; }
.sc-pendiente-detalle-vendedor { font-size: 12px; color: var(--text); min-width: 100px; }
.sc-pendiente-detalle-dias { font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 12px; color: var(--text); font-weight: 700; min-width: 60px; text-align: right; }
.sc-indicador-card--ranking { grid-column: span 1; }
.sc-ranking-bars { display: flex; flex-direction: column; gap: 8px; margin-top: 4px; }
.sc-ranking-bar-fila { display: grid; grid-template-columns: 90px 1fr 26px; align-items: center; gap: 8px; }
.sc-ranking-bar-label { font-size: 12px; color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.sc-ranking-bar-track { height: 8px; background: var(--panel-2); border-radius: 6px; overflow: hidden; }
.sc-ranking-bar-fill { height: 100%; background: linear-gradient(90deg, var(--accent-blue), var(--accent-amber)); border-radius: 6px; }
.sc-ranking-bar-num { font-size: 12px; font-weight: 700; color: var(--text); text-align: right; }
/* EL ENCABEZADO SE QUEDA ARRIBA (12/09/2026, Ramiro).
   El «sticky» del encabezado ya estaba, pero se pega al borde de ESTE
   contenedor: con un alto fijo de 560px, en una pantalla grande la tabla
   entraba entera, el que se desplazaba era el navegador y el encabezado se
   iba para arriba con todo lo demás.
   Con el alto atado a la pantalla el que se desplaza es siempre la tabla, y
   el encabezado no se mueve nunca. El 320 es lo que ocupan arriba el título,
   los indicadores y la barra de herramientas. */
.sc-table-scroll {
  overflow-x: auto; overflow-y: auto;
  max-height: calc(calc(100vh / var(--tcg-z, 1)) - 320px); min-height: 280px;
}
/* La barra de arrastre de arriba, pegada al tope del contenedor para que
   siga a la vista mientras se recorre la tabla, igual que el encabezado. */
.sc-scroll-arriba {
  overflow-x: auto; overflow-y: hidden; position: sticky; top: 0; z-index: 5;
  background: var(--panel, #161c2a); border-bottom: 1px solid var(--border, #252d3f);
  /* Sin alto fijo el contenedor colapsa y la barra queda invisible: adentro
     hay un solo píxel y la barra del navegador no siempre ocupa lugar. */
  height: 14px; min-height: 14px;
  scrollbar-width: thin; scrollbar-color: #4a5260 var(--panel, #1b2233);
}
.sc-scroll-arriba::-webkit-scrollbar { height: 12px; }
.sc-scroll-arriba::-webkit-scrollbar-track { background: var(--panel-2, #1b2027); }
.sc-scroll-arriba::-webkit-scrollbar-thumb { background: var(--panel, #4a5260); border-radius: 8px; }
.sc-scroll-arriba::-webkit-scrollbar-thumb:hover { background: var(--accent-amber); }
/* table-layout: fixed hace que el ancho elegido a mano se respete. Con el
   layout automático el navegador reparte el ancho según el contenido y
   arrastrar la columna no servía de nada. min-width: 100% para que igual
   ocupe todo el ancho disponible cuando hay pocas columnas. */
.sc-table { table-layout: fixed; width: auto; min-width: 100%; border-collapse: collapse; font-size: 12px; }
.sc-table thead th {
  position: sticky; top: 0; background: var(--panel-2); text-align: left; padding: 8px 10px;
  font-weight: 600; font-size: 13px; text-transform: uppercase; letter-spacing: 0.4px;
  color: var(--text); white-space: nowrap; border-bottom: 1px solid var(--border); z-index: 2;
  overflow: hidden; text-overflow: ellipsis;
}
.sc-table tbody td { padding: 4px 6px; border-bottom: 1px solid var(--border); border-right: 1px solid var(--border); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sc-table tbody tr:focus-within td { box-shadow: inset 0 1px 0 var(--accent-amber), inset 0 -1px 0 var(--accent-amber); }
.sc-table tbody tr:nth-child(even) td { background: color-mix(in srgb, var(--panel-2) 35%, transparent); }
.sc-table tbody tr:hover td { background: color-mix(in srgb, var(--accent-blue) 8%, var(--panel-2)); }
.sc-cant-col {
  position: sticky; left: 0; z-index: 1; background: var(--panel);
  box-shadow: 2px 0 0 var(--border); text-align: center; min-width: 0;
}
.sc-table tbody tr:hover .sc-cant-col { background: color-mix(in srgb, var(--accent-blue) 8%, var(--panel-2)); }
.sc-cant-click { cursor: pointer; }
.sc-cant-click:hover { color: var(--text); text-decoration: underline; }
.sc-num { font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; color: var(--text); }
.sc-cell-input {
  width: 100%; min-width: 0; background: var(--panel-2); border: 1px solid var(--border);
  border-radius: 6px; color: var(--text); font-size: 12px; font-family: inherit; padding: 5px 6px;
}
.sc-cell-input:hover { border-color: var(--faint, var(--border)); }
.sc-cell-input:focus { outline: none; border-color: var(--accent-blue); box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent-blue) 25%, transparent); }
.sc-cell-alerta { background: color-mix(in srgb, var(--red) 22%, var(--panel-2)) !important; border-color: var(--red) !important; color: var(--text) !important; }
.sc-fila-incompleta td { background: color-mix(in srgb, var(--red) 16%, var(--panel-2)) !important; }
/* Celda que sale de una fórmula: se ve apenas apagada. Si la pisás a mano
   queda con un punto ámbar a la izquierda; doble click y vuelve a la fórmula. */
/* Formatos condicionales con los mismos colores del Excel, atenuados para
   que se lean sobre el fondo oscuro del tablero. */
.sc-cf-vacia { background: color-mix(in srgb, #0070C0 32%, var(--panel-2)) !important; border-color: #0070C0 !important; }
.sc-cf-condato { background: color-mix(in srgb, #B7E1CD 26%, var(--panel-2)) !important; border-color: #6FBF9B !important; }
.sc-cf-alerta { background: color-mix(in srgb, #FF0000 26%, var(--panel-2)) !important; border-color: #FF0000 !important; }
.sc-cf-texto-rojo { background: color-mix(in srgb, #FF0000 26%, var(--panel-2)) !important; border-color: #FF0000 !important; font-weight: 700; }
.sc-cf-amarillo { background: color-mix(in srgb, #FFFF00 22%, var(--panel-2)) !important; border-color: #C9B200 !important; font-weight: 700; }
.sc-cell-calculada { color: var(--text); font-style: italic; }
.sc-cell-manual { border-left: 3px solid var(--accent-amber) !important; font-style: normal; }
.sc-formula-cell {
  color: var(--text); font-style: italic; font-size: 12px;
  background: color-mix(in srgb, var(--accent-blue) 5%, transparent);
}
/* REENC y ADJUDICADO: en el Excel están en rojo con negrita, no en verde. */
.sc-cell-destacada { background: color-mix(in srgb, #FF0000 24%, var(--panel-2)) !important; border-color: #FF0000 !important; font-weight: 700; }
select.sc-cell-input { cursor: pointer; min-width: 90px; }
.sc-vacio { padding: 40px 20px; text-align: center; color: var(--text); }
.sc-table-footer { padding: 10px 14px; font-size: 12px; color: var(--text); border-top: 1px solid var(--border); display: flex; justify-content: space-between; align-items: center; }
.sc-table-footer-left { display: flex; align-items: center; gap: 12px; }
.sc-btn-icon {
  background: transparent; border: none; color: var(--text); cursor: pointer;
  display: inline-flex; align-items: center; justify-content: center; padding: 4px; font-size: 14px;
}
.sc-btn-icon:hover { color: var(--red); }
.sc-btn--primary { background: var(--accent-blue); border-color: var(--accent-blue); color: #000; font-weight: 700; }
.sc-btn--peligro { border-color: rgba(226,87,76,.55); color: #ee776c; }
.sc-btn--peligro:hover { background: rgba(226,87,76,.12); }
.sc-libro-barra { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin: 0 0 12px; }
.sc-libro-ayuda { font-size: 12px; color: var(--text); }
.sc-libro-modal { max-width: 900px; width: 96%; }
.sc-libro-sub { font-size: 12.5px; color: var(--text); margin-bottom: 10px; }
.sc-libro-tabla { width: 100%; border-collapse: collapse; font-size: 12px; }
.sc-libro-tabla th { text-align: center; padding: 6px 8px; border-bottom: 1px solid var(--border); color: var(--text); font-weight: 600; }
.sc-libro-tabla td { padding: 5px 8px; border-bottom: 1px solid var(--border); }
.sc-libro-hoja { font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 12px; color: var(--text); }
.sc-libro-fila--ok td { color: var(--text); }
.sc-libro-fila--vacia td { color: var(--text); }
.sc-libro-fila--error td, .sc-libro-fila--sin-hoja td { color: var(--red); }
.sc-libro-fila--vaciar td { color: var(--text); }
.sc-libro-tilde {
  display: flex; align-items: flex-start; gap: 8px; margin-top: 10px; padding: 9px 11px;
  border: 1px solid var(--accent-amber); border-radius: 8px; font-size: 12px; line-height: 1.45;
  background: color-mix(in srgb, var(--accent-amber) 10%, transparent); cursor: pointer;
}
.sc-libro-tilde input { margin-top: 2px; flex: none; }
.sc-libro-resumen { margin-top: 12px; padding: 9px 11px; border: 1px solid var(--border); border-radius: 8px; font-size: 12.5px; }
.sc-btn--primario { background: var(--accent-amber); color: var(--accent-texto, #131824); border-color: var(--accent-amber); font-weight: 700; }
.sc-modal-overlay {
  position: fixed; inset: 0; background: rgba(0,0,0,0.6); z-index: 200;
  display: flex; align-items: center; justify-content: center; padding: 20px;
}
.sc-modal {
  background: var(--panel); border: 1px solid var(--border); border-radius: 14px;
  width: 100%; max-width: 720px; max-height: calc(85vh / var(--tcg-z, 1)); display: flex; flex-direction: column;
  box-shadow: 0 20px 60px rgba(0,0,0,0.5);
}
.sc-modal-header {
  display: flex; justify-content: space-between; align-items: center;
  padding: 16px 18px; border-bottom: 1px solid var(--border);
}
.sc-modal-header h3 { margin: 0; font-size: 15px; color: var(--text); }
.sc-modal-body {
  padding: 16px 18px; overflow-y: auto; display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 12px;
}
.sc-modal-campo { display: flex; flex-direction: column; gap: 4px; }
.sc-modal-campo label { font-size: 12px; text-transform: uppercase; letter-spacing: 0.3px; color: var(--text); }
.sc-modal-campo input, .sc-modal-campo select {
  background: var(--panel-2); border: 1px solid var(--border); border-radius: 6px;
  color: var(--text); padding: 7px 9px; font-size: 13px; font-family: inherit;
}
.sc-modal-campo input:focus, .sc-modal-campo select:focus { outline: none; border-color: var(--accent-blue); }
.sc-modal-footer {
  display: flex; justify-content: flex-end; gap: 10px; padding: 14px 18px; border-top: 1px solid var(--border);
}
.am-fondo {
  position: relative;
  background-image: var(--am-fondo-img);
  background-size: cover; background-position: center; background-repeat: no-repeat;
  border-radius: 16px; padding: 22px; margin: -6px; min-height: 400px;
  overflow: hidden;
}
.am-fondo::before {
  content: ""; position: absolute; inset: 0; z-index: 0;
  background: linear-gradient(160deg, rgba(10,18,38,0.55) 0%, rgba(13,24,48,0.4) 45%, rgba(10,18,38,0.6) 100%);
  pointer-events: none;
}
.am-fondo > * { position: relative; z-index: 1; }
.am-brecha-card {
  grid-column: 1 / -1; order: -1;
  background: linear-gradient(135deg, color-mix(in srgb, var(--accent-amber) 16%, var(--panel)), var(--panel));
  border: 1.5px solid var(--accent-amber); border-radius: 14px; padding: 16px 20px; margin-bottom: 4px;
  box-shadow: 0 0 26px -4px color-mix(in srgb, var(--accent-amber) 55%, transparent);
}
.am-brecha-titulo {
  font-size: 16px; font-weight: 700; color: var(--text); margin-bottom: 12px;
  text-shadow: 0 0 10px color-mix(in srgb, var(--accent-amber) 45%, transparent);
}
.am-brecha-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); gap: 10px; }
.am-brecha-fila {
  background: var(--panel-2); border-radius: 8px; padding: 9px 12px;
  display: flex; flex-direction: column; gap: 2px;
}
.am-brecha-marca { font-weight: 700; font-size: 13px; }
.am-brecha-detalle { font-size: 12px; color: var(--text); }
.am-brecha-valor { font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-weight: 700; font-size: 14px; }
.am-tabla-card {
  position: relative; display: flex; align-items: stretch; gap: 18px;
  background: color-mix(in srgb, var(--panel) 88%, transparent);
  border: 1px solid var(--border); border-radius: 14px; padding: 16px 18px; margin-bottom: 20px;
  backdrop-filter: blur(2px);
  box-shadow: 0 -2px 20px -4px color-mix(in srgb, var(--accent-blue) 40%, transparent);
}
.am-mapa-titulo-block {
  position: relative; flex: 0 0 170px; display: flex; flex-direction: column;
  align-items: center; justify-content: flex-start; padding: 4px 0; gap: 6px;
}
.am-mapa-rotulo-block { display: flex; flex-direction: column; align-items: center; }
.am-mapa-svg { width: 100%; height: auto; max-height: 220px; object-fit: contain; opacity: 0.92; }
.am-mapa-rotulo {
  font-family: inherit; font-weight: 700; font-size: 20px; letter-spacing: 1px; text-transform: uppercase;
  color: var(--text); text-align: center; text-shadow: 0 2px 6px rgba(0,0,0,0.8); line-height: 1.1;
}
.am-mapa-rotulo--top { margin-bottom: -6px; z-index: 1; }
.am-mapa-rotulo--bottom { z-index: 1; font-size: 17px; }
.am-tabla-cuerpo { flex: 1; min-width: 0; }
.am-tabla-header { position: relative; z-index: 1; display: flex; justify-content: flex-end; align-items: center; flex-wrap: wrap; gap: 10px; margin-bottom: 12px; }
.am-tabla-header-botones--full { width: 100%; justify-content: flex-end; }
.am-tabla-titulo {
  margin: 0; font-size: 26px; font-weight: 700; letter-spacing: 0.3px; text-transform: uppercase;
  color: var(--text);
  text-shadow: 0 0 18px color-mix(in srgb, var(--accent-amber) 55%, transparent), 0 0 4px rgba(0,0,0,0.6);
}
.am-tabla-header-botones { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.am-btn {
  background: var(--panel-2); border: 1px solid var(--border); color: var(--text);
  border-radius: 8px; padding: 6px 11px; font-size: 12px; cursor: pointer;
}
.am-btn:hover { border-color: var(--accent-blue); }
.am-btn--sm { padding: 6px 8px; }
.am-nuevo-inline { display: flex; align-items: center; gap: 5px; }
.am-nuevo-inline input {
  background: var(--panel-2); border: 1px solid var(--accent-blue); color: var(--text);
  border-radius: 6px; padding: 6px 8px; font-size: 13px; width: 90px;
}
.am-save-status { font-size: 12px; color: var(--text); min-width: 70px; }
.am-tabla-scroll { position: relative; z-index: 1; overflow-x: auto; }
.am-tabla { border-collapse: collapse; width: 100%; font-size: 12.5px; }
.am-tabla th {
  background: var(--panel-2); color: var(--text); padding: 8px 10px; text-align: center;
  font-size: 13px; text-transform: uppercase; border-bottom: 2px solid var(--border); position: relative;
}
.am-tabla td { padding: 4px 8px; text-align: center; border-bottom: 1px solid color-mix(in srgb, var(--border) 60%, transparent); }
.am-col-marca { text-align: left !important; font-weight: 700; min-width: 130px; }
.am-input {
  width: 64px; background: transparent; border: 1px solid transparent; color: inherit;
  text-align: center; border-radius: 6px; padding: 3px 4px; font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif;
}
.am-input:hover, .am-input:focus { border-color: color-mix(in srgb, var(--accent-blue) 60%, transparent); background: rgba(0,0,0,0.15); outline: none; }
.am-formula { font-weight: 700; color: var(--text); font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; }
.am-fila-otros td { color: var(--text); font-style: italic; }
.am-fila-total td { background: var(--panel-2); font-weight: 700; border-top: 2px solid var(--border); }
.am-mes-quitar { cursor: pointer; margin-left: 6px; opacity: 1; }
.am-mes-quitar:hover { opacity: 1; color: var(--red); }
.am-tabla-pie { position: relative; z-index: 1; display: flex; justify-content: flex-end; align-items: center; margin-top: 10px; }
.am-fuente { font-size: 12px; color: var(--text); font-style: italic; }
.am-indicadores-marca { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 12px; margin-top: 14px; }
.am-ind-card { background: var(--panel-2); border: 1px solid var(--border); border-radius: 10px; padding: 12px 14px; }
.am-ind-titulo { font-size: 12px; text-transform: uppercase; letter-spacing: 0.3px; color: var(--text); font-weight: 700; margin-bottom: 8px; }
.am-ind-nota { font-size: 12px; color: var(--text); }
.am-ind-lista { display: flex; flex-direction: column; gap: 5px; }
.am-ind-fila { display: flex; justify-content: space-between; align-items: center; font-size: 12px; }
.am-ind-pos { font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; color: var(--text); width: 24px; }
.am-ind-marca { flex: 1; font-weight: 600; }
.am-ind-valor, .am-ind-mov { font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-weight: 700; color: var(--text); }
.am-up { color: var(--text); }
.am-down { color: var(--red); }
.am-evolucion { display: flex; flex-direction: column; gap: 10px; }
.am-evolucion-fila { display: grid; grid-template-columns: 110px 1fr; align-items: center; gap: 10px; }
.am-evolucion-barras { display: flex; align-items: flex-end; gap: 4px; height: 46px; }
.am-evolucion-barra-wrap { flex: 1; height: 100%; display: flex; align-items: flex-end; background: color-mix(in srgb, var(--border) 40%, transparent); border-radius: 6px; }
.am-evolucion-barra { width: 100%; border-radius: 3px 3px 0 0; min-height: 2px; }


.sc-pestanas-fila { display: flex; align-items: flex-start; gap: 8px; }
.sc-pestanas-scroll { overflow-x: auto; margin-bottom: 18px; padding-bottom: 6px; flex: 1; }
.sc-config-btn {
  flex-shrink: 0; width: 34px; height: 34px; border-radius: 10px; border: 1px solid var(--border);
  background: var(--panel-2); color: var(--text); cursor: pointer; font-size: 15px;
}
.sc-config-btn:hover { border-color: var(--accent-blue); color: var(--text); }
.sc-config-panel {
  background: var(--panel); border: 1px solid var(--border); border-radius: 12px; padding: 14px 16px;
  margin-bottom: 16px; max-height: 260px; overflow-y: auto;
}
.sc-config-panel-titulo { font-size: 12px; text-transform: uppercase; color: var(--text); font-weight: 700; margin-bottom: 10px; letter-spacing: 0.3px; }
.sc-config-panel-lista { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 8px; }
.sc-config-item { display: flex; align-items: center; gap: 8px; font-size: 12.5px; color: var(--text); cursor: pointer; }
.sc-config-item-borrar {
  margin-left: auto; background: transparent; border: 1px solid var(--border); border-radius: 6px;
  width: 20px; height: 20px; display: flex; align-items: center; justify-content: center;
  color: var(--text); cursor: pointer; flex-shrink: 0;
}
.sc-config-item-borrar:hover { border-color: var(--red); color: var(--red); }
.sc-config-panel-nueva { display: flex; gap: 8px; margin-top: 14px; padding-top: 14px; border-top: 1px solid var(--border); }
.sc-config-panel-nueva input {
  flex: 1; background: var(--panel-2); border: 1px solid var(--border); border-radius: 8px;
  padding: 8px 12px; color: var(--text); font-size: 13px;
}
.sc-config-panel-nota { margin-top: 8px; font-size: 12px; color: var(--text); }
.ct-col-header { cursor: pointer; }
.ct-col-header:hover { text-decoration: underline dotted; }
.ct-col-borrar {
  background: transparent; border: none; color: var(--text); cursor: pointer; margin-left: 6px;
  vertical-align: middle; opacity: 1;
}
.ct-col-borrar:hover { opacity: 1; color: var(--red); }
.ct-col-tipo {
  background: transparent; border: none; color: var(--text); cursor: pointer; margin-left: 4px;
  vertical-align: middle; opacity: 1;
}
.ct-col-tipo:hover { opacity: 1; }
.ct-col-tipo.activo { opacity: 1; color: var(--text); }

/* ---- Informe de Ventas para Jorge: mismo estilo dark que el resto del proyecto ---- */
.ivj-panel { padding-bottom: 30px; }
.ivj-toolbar { display: flex; flex-wrap: wrap; gap: 10px 16px; margin-bottom: 18px; align-items: center; }
.ivj-toolbar-grupo { display: flex; gap: 8px; flex-wrap: wrap; }
.ivj-toolbar-grupo--acciones { margin-left: auto; }

.ivj-tab-btn {
  background: var(--panel-2); border: 1px solid var(--border); color: var(--text);
  border-radius: 8px; padding: 9px 18px; font-size: calc(var(--ivj-letra, 1) * 12.5px); font-weight: 600; cursor: pointer; transition: 0.15s;
}
.ivj-tab-btn:hover { border-color: var(--accent-amber); color: var(--text); }
.ivj-tab-btn.activo { background: var(--accent-amber); border-color: var(--accent-amber); color: #000; }
.ivj-stack { display: flex; flex-direction: column; gap: 32px; }
/* El envoltorio con filo FIRME, no tenue: pedido de Ramiro sobre la foto.
   Un borde de un píxel al 100% de opacidad casi no se ve contra el panel; con
   dos y un poco de contraste, la hoja se lee como una hoja. */
.ivj-reporte {
  background: var(--panel); color: var(--text); border-radius: 12px; padding: 20px 22px;
  border: 2px solid color-mix(in srgb, var(--text) 22%, var(--border));
}
.ivj-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 16px; border-bottom: 1px solid var(--border); padding-bottom: 12px; }
.ivj-header h1 {
  margin: 0; font-size: calc(var(--ivj-letra, 1) * 17px); font-weight: 700; letter-spacing: 0.3px; color: var(--text);
  display: flex; align-items: center; gap: 8px;
}
.ivj-header h1::before { content: ""; width: 4px; height: 18px; background: var(--accent-amber); border-radius: 2px; display: inline-block; }
.ivj-nombre-dealer { font-size: calc(var(--ivj-letra, 1) * 21px); font-weight: 700; letter-spacing: 0.4px; }
.ivj-mes-select {
  font-size: calc(var(--ivj-letra, 1) * 12.5px); font-weight: 600; padding: 7px 12px; border-radius: 8px;
  border: 1px solid var(--border); background: var(--panel-2); color: var(--text); cursor: pointer;
}
/* SIN DESPLAZAMIENTO INTERNO. Tenía «max-height: 560px» y su propio scroll
   vertical: con muchos vendedores la tabla se cortaba adentro del informe y
   la captura salía a la mitad. El informe se achica entero para entrar en la
   pantalla —ver el comentario del componente— así que la tabla no necesita
   cortarse sola. El desplazamiento horizontal queda como red por si alguna
   pantalla muy angosta pasa el piso de la escala. */
/* ── MODO PLANILLA (informe 2) ──────────────────────────────────────
   La misma información con la estética del papel: el vs. mes anterior en el
   encabezado, las localidades en tres columnas de celdas y el pie editable.
   Se accede con un botón del informe original, no desde el menú: es otra
   forma de mirar lo mismo, no otra pantalla. */
/* EL ENCABEZADO CON TODO ADENTRO: nombre, vs. mes anterior, y a la derecha
   los botones y la fecha. Se envuelve si la ventana es angosta, pero en un
   monitor normal entra en un solo renglón. */
.ivj-header { flex-wrap: wrap; gap: 10px; }
.ivj-header-acc { display: flex; align-items: center; gap: 8px; margin-left: auto; flex-wrap: wrap; }
.ivj-btn-modo { margin-left: 0; }
/* EL ZOOM A MANO. Chico y al lado de los otros botones: se usa una vez por
   monitor y después no se toca más. */
/* Los deslizadores del panel de ajustes: ámbar, como todo lo que se toca. */
.tcg-aj-rango { width: 100%; accent-color: var(--accent-amber, #f2c200); height: 30px; }

.ivj-zoom {
  display: inline-flex; align-items: center; gap: 2px; height: 34px;
  border: 1px solid var(--border, #2e3648); border-radius: 8px; overflow: hidden;
  background: var(--panel-2, #1e2637);
}
.ivj-zoom button {
  height: 100%; min-width: 26px; padding: 0 6px; border: 0; background: transparent;
  color: var(--text); font: inherit; font-size: 14px; cursor: pointer;
}
.ivj-zoom button:hover { background: rgba(255,255,255,.08); }
.ivj-zoom span {
  min-width: 46px; text-align: center; font-size: 12px; cursor: pointer;
  font-variant-numeric: tabular-nums; color: var(--text);
}
.ivj-zoom-auto { font-size: 10.5px !important; text-transform: uppercase; letter-spacing: .4px;
  color: var(--text) !important; border-left: 1px solid var(--border, #2e3648) !important; }
.ivj-zoom-auto--on { background: rgba(242,194,0,.18) !important; color: var(--text) !important; }

/* El panel de impresión. */
.ivj-imp {
  background: var(--panel-2, #1e2637); border: 1px solid var(--border, #2e3648);
  border-radius: 11px; padding: 13px 15px; margin-bottom: 14px;
}
.ivj-imp-cab { display: flex; align-items: baseline; gap: 9px; margin-bottom: 12px; flex-wrap: wrap; }
.ivj-imp-cab b { font-size: 13.5px; }
.ivj-imp-cab span { font-size: 11.5px; color: var(--text); flex: 1; min-width: 150px; }
.ivj-imp-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; }
.ivj-imp-grid .per-campo { display: flex; flex-direction: column; gap: 6px; }
.ivj-imp-grid .per-campo > span {
  font-size: 10px; text-transform: uppercase; letter-spacing: .4px; color: var(--text);
}
.ivj-imp-grid input[type="range"] { width: 100%; accent-color: var(--accent-amber, #f2c200); height: 34px; }
.ivj-vs-enc {
  display: inline-flex; flex-direction: column; margin-left: 14px;
  font-size: calc(var(--ivj-letra, 1) * 18px); font-weight: 700; line-height: 1.15; font-variant-numeric: tabular-nums;
}
.ivj-vs-enc small { font-size: calc(var(--ivj-letra, 1) * 10.5px); font-weight: 600; color: var(--text); }
.ivj-loc-grilla { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin-bottom: 14px; }
.ivj-loc-tabla { width: 100%; }
.ivj-loc-n { text-align: right; width: 74px; }
/* Nombre y cantidad de cada localidad, editables en la planilla. Se ven como
   texto y sólo se marcan al tocarlos: una grilla llena de recuadros deja de
   parecer un informe. */
.ivj-loc-in {
  width: 100%; background: transparent; border: 1px solid transparent; border-radius: 6px;
  color: var(--text); padding: 2px 6px; font: inherit; font-size: calc(var(--ivj-letra, 1) * 12.5px);
}
.ivj-loc-in--n { text-align: right; font-variant-numeric: tabular-nums; }
.ivj-loc-in:hover { border-color: var(--border, #2e3648); background: var(--panel-2, #1e2637); }
.ivj-loc-in:focus {
  outline: none; border-color: var(--accent-amber, #f2c200); background: var(--panel-2, #1e2637);
  box-shadow: 0 0 0 2px rgba(242,194,0,.16);
}
/* El pie de la planilla: los tres números que en el papel se escriben a mano. */
.ivj-pie-planilla {
  display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px;
  border: 1px solid var(--border); border-radius: 10px; padding: 12px 16px; margin-bottom: 10px;
}
.ivj-pie-planilla label { display: flex; align-items: center; gap: 10px; }
.ivj-pie-planilla span {
  font-size: calc(var(--ivj-letra, 1) * 11px); font-weight: 700; letter-spacing: .06em; text-transform: uppercase;
  color: var(--text); white-space: nowrap;
}
.ivj-pie-planilla input {
  flex: 1; min-width: 0; height: 38px; text-align: center;
  background: var(--panel-2); border: 1px solid var(--border); border-radius: 8px;
  color: var(--text); font-size: calc(var(--ivj-letra, 1) * 19px); font-weight: 700; font-family: inherit;
}
.ivj-tabla-scroll { overflow-x: auto; overflow-y: visible; margin-bottom: 22px; border: 1px solid var(--border); border-radius: 10px; }
.ivj-tabla { width: 100%; border-collapse: collapse; font-size: calc(var(--ivj-letra, 1) * 13.5px); white-space: nowrap; }
.ivj-tabla thead th {
  background: var(--panel-2); color: var(--text); font-weight: 700; text-transform: uppercase;
  padding: 8px 11px; border-bottom: 1px solid var(--border); border-right: 1px solid var(--border);
  font-size: calc(var(--ivj-letra, 1) * 13px); letter-spacing: 0.3px; text-align: center; vertical-align: middle;
  position: sticky; top: 0; z-index: 2;
}
.ivj-tabla tbody tr:focus-within td { box-shadow: inset 0 1px 0 var(--accent-amber), inset 0 -1px 0 var(--accent-amber); }
.ivj-tabla .ivj-th-sub th { background: var(--panel-2); font-size: calc(var(--ivj-letra, 1) * 12px); padding: 5px 9px; color: var(--text); font-weight: 700; position: sticky; top: 33px; z-index: 2; }
.ivj-th-center { text-align: center; }
.ivj-tabla tbody td { padding: 8px 11px; border-bottom: 1px solid var(--border); border-right: 1px solid var(--border); color: var(--text); }
.ivj-tabla tbody tr:hover td { background: var(--panel-2); }
.ivj-col-vendedor { font-weight: 600; text-align: left; color: var(--text); }
.ivj-num { text-align: center; font-variant-numeric: tabular-nums; font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: calc(var(--ivj-letra, 1) * 16px); font-weight: 600; }
/* Las columnas numéricas, de ancho fijo: sin esto la columna se angosta
   cuando todos los valores son 0 y se ensancha al aparecer un 13, y la tabla
   se reacomoda sola mientras uno carga. */
.ivj-tabla tbody td:not(.ivj-col-vendedor) { width: 56px; }
.ivj-col-destacada { color: var(--text); font-weight: 700; }
.ivj-fila-totales td { background: var(--panel-2); font-weight: 700; border-top: 2px solid var(--accent-amber); color: var(--text); }
.ivj-vacio { text-align: center; color: var(--text); padding: 16px; }
.ivj-indicadores { display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); gap: 9px; margin-bottom: 16px; }
.ivj-ind-card { background: var(--panel-2); border: 1px solid var(--border); border-radius: 8px; padding: 9px 11px; }
.ivj-ind-titulo {
  font-size: calc(var(--ivj-letra, 1) * 11.5px); font-weight: 700; color: #ffffff; text-transform: uppercase;
  letter-spacing: 0.3px; margin-bottom: 6px;
}
.ivj-ind-nota { font-size: calc(var(--ivj-letra, 1) * 10px); color: var(--text); margin-top: 4px; }
.ivj-ind-vacio { font-size: calc(var(--ivj-letra, 1) * 11px); color: var(--text); padding: 4px 0; }
.ivj-vs-valor { font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: calc(var(--ivj-letra, 1) * 17px); font-weight: 700; color: var(--text); }
.ivj-vs-up { color: var(--text); }
.ivj-vs-down { color: var(--red); }
.ivj-rank-list { display: flex; flex-direction: column; }
.ivj-rank-fila { display: flex; align-items: center; gap: 8px; padding: 4px 0; border-bottom: 1px solid var(--border); }
.ivj-rank-fila:last-child { border-bottom: none; }
.ivj-rank-pos { font-weight: 700; font-size: calc(var(--ivj-letra, 1) * 10.5px); color: var(--text); width: 14px; flex-shrink: 0; }
.ivj-rank-cuerpo { flex: 1; min-width: 0; }
.ivj-rank-nombre { font-size: calc(var(--ivj-letra, 1) * 11px); font-weight: 600; margin-bottom: 3px; color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ivj-rank-nombre--click {
  background: none; border: none; padding: 0; font-family: inherit; text-align: left; width: 100%;
  cursor: pointer; text-decoration: underline; text-decoration-color: transparent; transition: color 0.12s ease, text-decoration-color 0.12s ease;
}
.ivj-rank-nombre--click:hover { color: var(--text); text-decoration-color: var(--accent-amber); }
.ivj-rank-barra-track { height: 4px; background: var(--panel); border-radius: 6px; overflow: hidden; }
.ivj-rank-barra-fill { height: 100%; background: linear-gradient(90deg, var(--accent-amber), #c97e00); border-radius: 6px; }
.ivj-rank-valor { font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: calc(var(--ivj-letra, 1) * 10.5px); color: var(--text); flex-shrink: 0; }
.ivj-rank-pct { color: var(--text); opacity: 1; font-size: calc(var(--ivj-letra, 1) * 10.5px); }

/* EL PIE DEL REPORTE. Cierra el envoltorio y dice de qué casa y de qué mes es
   la hoja: se manda por correo y una hoja suelta tiene que poder identificarse
   sola. */
.ivj-pie {
  display: flex; align-items: center; gap: 6px; margin-top: 10px;
  padding: 7px 4px 0; border-top: 1px solid var(--border);
  font-size: calc(var(--ivj-letra, 1) * 11px); color: var(--text);
}
.ivj-pie-casa {
  font-weight: 700; color: var(--text, #ecf0f4);
  display: inline-flex; align-items: center; gap: 6px;
}
/* El punto de color de la casa, igual que en el resto del sistema. */
.ivj-pie-casa::before {
  content: ""; width: 7px; height: 7px; border-radius: 50%;
  background: var(--casa-punto, var(--accent-amber, #f2c200));
}
.ivj-pie-sep { opacity: 1; }
.ivj-pie-der { margin-left: auto; }
.ivj-planahorro { max-width: 340px; border: 1px solid var(--border); border-radius: 10px; overflow: hidden; }
.ivj-plan-titulo {
  background: var(--panel-2); color: var(--text); font-weight: 700; text-align: center; padding: 8px;
  font-size: calc(var(--ivj-letra, 1) * 12px); text-transform: uppercase; letter-spacing: 0.4px;
}
.ivj-plan-fila { display: flex; align-items: center; justify-content: space-between; padding: 9px 14px; border-top: 1px solid var(--border); }
/* ---- Liquidación de Comisiones ---- */
.lc-panel { padding-bottom: 30px; }
.lc-reporte { background: var(--panel); border: 1px solid var(--border); border-radius: 12px; padding: 20px 22px; }
.lc-unificada { max-width: 100%; }
.lc-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 16px; border-bottom: 1px solid var(--border); padding-bottom: 12px; flex-wrap: wrap; gap: 10px; }
.lc-header h1 { margin: 0; font-size: 17px; font-weight: 700; color: var(--text); }
.lc-nombre-dealer { font-size: 21px; font-weight: 700; }
.lc-header-acciones { display: flex; align-items: center; gap: 8px; }
.lc-mes-select { font-size: 12.5px; font-weight: 600; padding: 7px 12px; border-radius: 8px; border: 1px solid var(--border); background: var(--panel-2); color: var(--text); cursor: pointer; }
.lc-btn-pdf { border: 1px solid var(--accent-blue); color: var(--text); background: transparent; border-radius: 8px; padding: 8px 14px; font-size: 12.5px; font-weight: 700; cursor: pointer; }
.lc-btn-pdf:hover { background: color-mix(in srgb, var(--accent-blue) 15%, var(--panel-2)); }
.lc-btn-pdf--sm { padding: 5px 10px; font-size: 11px; }
.lc-unificada-nota { font-size: 12px; color: var(--text); margin: -8px 0 14px; }

.lc-section-titulo { font-size: 15px; font-weight: 700; color: #fff; margin: 20px 0 10px; text-transform: uppercase; letter-spacing: 0.3px; }

.lc-grid { display: grid; grid-template-columns: repeat(auto-fill, 290px); gap: 10px; align-items: stretch; justify-content: start; }
.lc-grid--resumen { grid-template-columns: 400px; }
.lc-card { background: var(--panel-2); border: 1px solid var(--border); border-radius: 10px; padding: 10px 12px; display: flex; flex-direction: column; gap: 8px; width: 290px; box-sizing: border-box; overflow: hidden; min-width: 0; }
.lc-grid--resumen .lc-card { width: 400px; }
.lc-card-nombre {
  background: transparent; border: none; padding: 0 0 6px; margin: 0; cursor: pointer; font: inherit;
  color: var(--text); font-weight: 700; font-size: 13.5px; text-align: center; text-decoration: underline;
  text-underline-offset: 3px; text-transform: uppercase; border-bottom: 1px solid var(--border); width: 100%;
}
.lc-card-nombre--fijo { cursor: default; color: var(--text); }
.lc-card-nombre:hover:not(.lc-card-nombre--fijo) { color: var(--text); }
.lc-card-nombre--tabla { border: none; padding: 0; text-align: left; text-transform: none; font-size: 12.5px; color: var(--text); }
.lc-card-nombre--tabla:hover { color: var(--text); }
.lc-card-bloque { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.lc-card-bloque-titulo {
  font-size: 10px; font-weight: 700; color: var(--text); text-transform: uppercase; letter-spacing: 0.3px;
  text-align: center; border-top: 1px solid var(--border); padding-top: 6px; margin-bottom: 3px;
}
.lc-card-fila { display: grid; grid-template-columns: 1fr 40px 70px; gap: 4px; font-size: 10.5px; color: var(--text); padding: 1.5px 0; align-items: center; min-width: 0; }
.lc-card-fila span:first-child { font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.lc-card-fila .lc-num { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.lc-card-fila--encabezado { padding-bottom: 3px; margin-bottom: 2px; border-bottom: 1px dashed var(--border); }
.lc-card-fila--encabezado span { color: var(--text); font-weight: 700; text-transform: uppercase; font-size: 10px; }
.lc-card-fila--marca span:first-child { font-weight: 600; }
.lc-card-divisor { border-top: 1px dashed var(--border); margin: 3px 0; }
.lc-card-divisor--acento { border-top: 2px solid var(--accent-amber); margin: 4px 0; }
.lc-card-fila--destacada {
  background: color-mix(in srgb, var(--accent-amber) 16%, transparent); border-radius: 6px; padding: 3px 0;
  font-weight: 700; color: var(--text); margin-top: 2px;
}
.lc-card-bloque--comisiones .lc-card-fila:last-child { margin-top: 3px; }
.lc-card-letras {
  font-size: 10px; font-style: italic; color: var(--text); line-height: 1.3;
  white-space: normal; word-break: break-word; padding: 1px 2px 2px;
}
.lc-card-letras--comision { color: var(--text); font-weight: 600; }
/* La tarjeta de CIERRE (resumen general) es más ancha, así que su columna
   de montos también tiene que serlo — si no, montos grandes (suman los 3
   concesionarios) se recortaban con "..." aunque hubiera lugar de sobra. */
.lc-grid--resumen .lc-card-fila { grid-template-columns: 1fr 55px 150px; font-size: 12px; }
.lc-grid--resumen .lc-card-fila .lc-num,
.lc-grid--resumen .lc-card-fila span:first-child { overflow: visible; text-overflow: clip; white-space: normal; }
.lc-grid--resumen .lc-card-letras { font-size: 10px; }


.lc-tabla-scroll { overflow-x: auto; }
.lc-tabla-anuladas, .lc-tabla-unificada { width: 100%; border-collapse: collapse; font-size: 12px; }
.lc-tabla-anuladas thead th, .lc-tabla-unificada thead th {
  background: var(--panel-2); color: var(--text); font-weight: 700; text-transform: uppercase; text-align: left;
  padding: 7px 9px; font-size: 10px; border-bottom: 1px solid var(--border);
}
.lc-tabla-anuladas tbody td, .lc-tabla-unificada tbody td { padding: 6px 9px; border-bottom: 1px solid var(--border); color: var(--text); }
.lc-tabla-unificada thead th, .lc-tabla-unificada tbody td { text-align: center; }
.lc-tabla-unificada tbody td:first-child { text-align: center; }
.lc-num { text-align: center; font-variant-numeric: tabular-nums; }
.lc-vacio { text-align: center; color: var(--text); padding: 16px; }
.lc-comision-destacada { color: var(--text); font-weight: 700; }
.lc-tabla-unificada--bloques .lc-sep-der { border-right: 2px solid var(--accent-amber); }
.lc-tabla-unificada--bloques .lc-col-destacada { background: color-mix(in srgb, var(--accent-amber) 14%, transparent); color: var(--text); font-weight: 700; }
.lc-com-cero { background: color-mix(in srgb, var(--red) 18%, transparent) !important; color: var(--red) !important; font-weight: 700; }
.lc-card-fila.lc-com-cero span { color: var(--red); }
.lc-tabla-unificada--bloques thead .ivj-th-sub th { font-size: 10.5px; color: var(--text); font-weight: 600; text-transform: none; padding-top: 2px; padding-bottom: 4px; }
.lc-fila-totales td { background: var(--panel-2); font-weight: 700; border-top: 2px solid var(--accent-amber); color: var(--text); }

.lc-extras { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin-top: 18px; }
.lc-extra-campo label { display: block; font-size: 11px; font-weight: 700; text-transform: uppercase; color: var(--text); margin-bottom: 5px; }
.lc-extra-campo textarea {
  width: 100%; background: var(--panel-2); border: 1px solid var(--border); border-radius: 8px; padding: 8px 10px;
  color: var(--text); font-family: inherit; font-size: 12px; resize: vertical;
}

.lc-modal-overlay { position: fixed; inset: 0; background: rgba(0,0,0,0.6); display: flex; align-items: center; justify-content: center; z-index: 1000; padding: 20px; }
.lc-modal { background: var(--panel); border: 1px solid var(--border); border-radius: 12px; max-width: 900px; width: 100%; max-height: calc(85vh / var(--tcg-z, 1)); display: flex; flex-direction: column; }
.lc-modal-header { display: flex; align-items: center; justify-content: space-between; padding: 14px 18px; border-bottom: 1px solid var(--border); }
.lc-modal-header h3 { margin: 0; font-size: 15px; color: var(--text); }
.lc-modal-header-acciones { display: flex; align-items: center; gap: 10px; }
.lc-modal-body { padding: 12px 18px 18px; overflow-y: auto; }
.lc-modal-tabla { width: 100%; border-collapse: collapse; font-size: 12px; }
.lc-modal-tabla thead th { text-align: left; padding: 6px 8px; color: var(--text); font-size: 10.5px; text-transform: uppercase; border-bottom: 1px solid var(--border); }
.lc-modal-tabla tbody td { padding: 6px 8px; border-bottom: 1px solid var(--border); color: var(--text); }
.lc-recibo-encabezado { display: flex; justify-content: space-between; font-size: 13px; color: var(--text); margin-bottom: 10px; padding-bottom: 8px; border-bottom: 1px solid var(--border); }
.lc-recibo-total td { font-weight: 700; font-size: 14px; color: var(--text); border-top: 2px solid var(--accent-amber); }

.lc-recibo-copia { padding: 18px 4px; }
.lc-recibo-copia--soloImpresion { display: none; }
.lc-recibo-marca { display: flex; align-items: center; justify-content: space-between; margin-bottom: 14px; }
.lc-recibo-marca-nombre { font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-weight: 700; font-size: 15px; color: var(--text); letter-spacing: 0.3px; }
.lc-recibo-copia-tag {
  font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.4px; color: var(--text);
  border: 1px solid var(--accent-amber); border-radius: 999px; padding: 3px 10px;
}
.lc-recibo-encabezado-label { font-size: 10.5px; color: var(--text); text-transform: uppercase; letter-spacing: 0.3px; margin-bottom: 3px; }
.lc-recibo-encabezado-valor { font-size: 14px; font-weight: 700; color: var(--text); }
.lc-modal-tabla--recibo thead th { text-align: center; }
.lc-recibo-firmas { display: flex; gap: 40px; margin-top: 40px; }
.lc-recibo-firma { flex: 1; text-align: center; padding-top: 8px; border-top: 1px solid var(--border); }
.lc-recibo-firma span { font-size: 10.5px; color: var(--text); }



@media print {
  /* Red de seguridad: en el tema oscuro casi todos los contenedores tienen
     fondo oscuro (var(--panel), var(--panel-2)) que nunca se sobreescribía
     acá, y por eso cualquier zona sin una tarjeta/tabla blanca encima (el
     .lc-panel que envuelve todo, el .lc-modal del recibo, espacios vacíos)
     salía negra al imprimir. Esta regla apaga TODOS los fondos por defecto;
     las reglas de abajo con !important y selector de clase (más específicas)
     siguen ganando y devuelven el blanco/gris donde corresponde. */
  * { background-color: transparent !important; }
  .back-btn, .breadcrumb, .header { display: none !important; }
  /* BUG encontrado: al sacarle el "position: fixed" al modal (para arreglar
     que se repitiera en cada hoja), el modal pasó a ser contenido normal de
     la página — y como el reporte de atrás (toolbar + tabla/tarjetas) sigue
     estando en el documento, también se imprimía junto con el recibo. Con
     ":has()" se detecta cuándo hay un modal abierto adentro de .lc-panel y
     se oculta TODO lo demás, dejando solo el recibo. */
  .lc-panel:has(.lc-modal-overlay) > *:not(.lc-modal-overlay) { display: none !important; }
  @page { size: A4 landscape; margin: 4mm; }
  html, body { height: auto !important; overflow: visible !important; background: #fff !important; }
  .app-shell, .lc-root, .lc-panel, .lc-modal, .lc-modal-overlay, .lc-modal-body { background: #fff !important; }
  .lc-panel { font-size: 7.5px !important; }
  .app-shell { height: auto !important; min-height: 0 !important; max-height: none !important; overflow: visible !important; zoom: 1 !important; padding: 0 !important; }
  .lc-header-acciones button, .lc-card-nombre { pointer-events: none; }
  .lc-btn-pdf, .lc-modal-header-acciones .rv-modal-cerrar { display: none !important; }
  .lc-reporte {
    background: #fff !important; color: #000 !important; border: none !important; box-shadow: none !important;
    height: auto !important; overflow: visible !important; padding: 3px 5px !important;
  }
  .lc-header { margin-bottom: 3px !important; padding-bottom: 2px !important; }
  .lc-header h1 { font-size: 12px !important; }
  .lc-nombre-dealer { font-size: 15px !important; }
  .lc-unificada-nota { margin: 6px 0 10px !important; font-size: 9px !important; }
  .lc-section-titulo { font-size: 9px !important; margin: 3px 0 2px !important; }
  .lc-header h1, .lc-section-titulo, .lc-card-nombre, .lc-card-linea, .lc-card-fila,
  .lc-tabla-anuladas tbody td, .lc-tabla-unificada tbody td, .lc-extra-campo label { color: #000 !important; }
  .lc-nombre-dealer { color: inherit !important; }
  .lc-card { background: #f7f7f7 !important; border: 1px solid #ccc !important; break-inside: avoid; }
  .lc-tabla-anuladas thead th, .lc-tabla-unificada thead th, .lc-fila-totales td { background: #eee !important; color: #000 !important; }
  .lc-tabla-anuladas, .lc-tabla-unificada { font-size: 8.5px !important; }
  .lc-tabla-scroll { overflow: visible !important; }
  .lc-header h1 { font-size: 16px !important; }
  .lc-nombre-dealer { font-size: 17px !important; }
  .lc-tabla-anuladas thead th, .lc-tabla-unificada thead th { padding: 2px 3px !important; font-size: 8px !important; }
  .lc-tabla-anuladas tbody td, .lc-tabla-unificada tbody td { padding: 1.5px 3px !important; }
  .lc-vacio { padding: 4px !important; font-size: 7px !important; }
  /* Resumen Unificado (tabla): tiene que entrar TODO en una sola hoja, sin
     que se corten columnas a la derecha. table-layout:fixed + width:100%
     obliga a la tabla a nunca superar el ancho de la hoja (antes, con
     table-layout:auto, la tabla podía ser más ancha que la hoja y todo lo
     que quedaba afuera del margen derecho se recortaba). Se elimina la
     paginación forzada cada 10 filas (esa regla era la causa de que
     apareciera una segunda hoja aunque todo hubiera entrado en una).
     OJO: acá el texto que no entra se recorta con "..." (ellipsis), NO baja
     de línea — permitir que baje de línea agranda cada fila (por los
     nombres largos) y eso es lo que terminaba empujando la tabla a 2-3
     hojas de nuevo. La columna Vendedor tiene ancho fijo más grande (ver
     el <th style={{width:78}}>) para que el nombre casi nunca se corte.
     Este bloque va DESPUÉS de las reglas compartidas de arriba a propósito,
     para ganarles por orden en los empates de especificidad (mismo criterio
     ya documentado en useTablaEditable/asg-tabla).
  */
  .lc-tabla-unificada--bloques { table-layout: fixed !important; width: 100% !important; }
  .lc-tabla-unificada--bloques th, .lc-tabla-unificada--bloques td {
    padding: 1.5px 2px !important; white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important;
  }
  .lc-tabla-unificada--bloques .lc-card-nombre--tabla,
  .lc-tabla-unificada--bloques tbody td:first-child { font-size: 9px !important; font-weight: 700 !important; }
  .lc-tabla-unificada--bloques, .lc-tabla-unificada--bloques thead th, .lc-tabla-unificada--bloques tbody td { font-size: 7px !important; }
  /* Ganar espacio para la derecha: las columnas 2ª-4ª (Jorge Giorgi/Vesubio/
     Ginza) son solo un número de una o dos cifras, no necesitan casi lugar;
     angostándolas se libera ancho para las columnas de plata del final
     (Facturación total y Comisión total a cobrar), que son las que más
     necesitan espacio para no recortarse. */
  .lc-tabla-unificada--bloques th:nth-child(2), .lc-tabla-unificada--bloques td:nth-child(2),
  .lc-tabla-unificada--bloques th:nth-child(3), .lc-tabla-unificada--bloques td:nth-child(3),
  .lc-tabla-unificada--bloques th:nth-child(4), .lc-tabla-unificada--bloques td:nth-child(4) { width: 20px !important; }
  .lc-tabla-unificada--bloques th:first-child, .lc-tabla-unificada--bloques td:first-child { width: 58px !important; }
  .lc-tabla-unificada--bloques th:last-child, .lc-tabla-unificada--bloques td:last-child,
  .lc-tabla-unificada--bloques th:nth-last-child(2), .lc-tabla-unificada--bloques td:nth-last-child(2) { width: 66px !important; }
  .lc-comision-destacada, .lc-card-comision-total, .lc-card-comision-total b, .lc-card-fila--destacada { color: #000 !important; }
  .lc-card-fila--destacada { background: #f5e6c8 !important; border-top: 1.5px solid #f2a900 !important; border-bottom: 1.5px solid #f2a900 !important; font-weight: 700 !important; -webkit-print-color-adjust: exact !important; print-color-adjust: exact !important; }
  .lc-extra-campo textarea { border: 1px solid #ccc !important; background: #fafafa !important; color: #000 !important; min-height: 16px !important; }
  .lc-extras { gap: 5px !important; margin-top: 5px !important; }
  .lc-extra-campo label { font-size: 8px !important; margin-bottom: 2px !important; }
  /* Unificado 2 (tarjetas): 8 vendedores por hoja (se bajó de 10 a 8 para
     que entren las leyendas en letras sin que nada se corte). El
     ":not(:last-child)" evita una hoja extra en blanco cuando la cantidad
     de vendedores es justo múltiplo de 8 — así el cierre general queda
     libre para compartir la última hoja con lo que sobre de vendedores,
     en vez de arrancar siempre una hoja nueva él solo. */
  .lc-grid { grid-template-columns: repeat(4, 1fr) !important; gap: 5px !important; }
  .lc-grid .lc-card { width: auto !important; }
  .lc-unificada .lc-grid > .lc-card:nth-child(8n):not(:last-child) { page-break-after: always !important; break-after: page !important; }
  .lc-grid--resumen { grid-template-columns: 240px !important; page-break-before: avoid !important; page-break-inside: avoid !important; break-inside: avoid !important; }
  /* Cada tarjeta se comprimió al máximo verticalmente (menos padding, menos
     separación entre filas, interlineado más ajustado) — antes, con más
     aire entre líneas, solo entraban 4 tarjetas (1 fila) por hoja en vez de
     las 8 (2 filas) que tienen que entrar. */
  .lc-card { width: 220px !important; padding: 5px 6px !important; font-size: 8px !important; gap: 2px !important; }
  .lc-card-nombre { font-size: 10px !important; padding-bottom: 2px !important; margin: 0 !important; }
  .lc-card-fila { font-size: 8px !important; line-height: 1.2 !important; padding: 0.5px 0 !important; grid-template-columns: 1fr 26px 62px !important; }
  .lc-card-bloque-titulo { font-size: 7px !important; padding-top: 2px !important; margin-bottom: 1px !important; }
  .lc-card-divisor { margin: 2px 0 !important; }
  .lc-card-letras { font-size: 6.3px !important; line-height: 1.15 !important; color: #000 !important; padding: 0 !important; margin: 0 !important; }
  .lc-card-letras--comision { color: #000 !important; }
  /* La tarjeta de cierre es más ancha que las demás y con más contenido —
     se comprime bastante más que antes para que tenga mejor chance real de
     entrar en lo que sobre de la última hoja de vendedores, en vez de
     arrancar siempre su propia hoja aparte. */
  .lc-grid--resumen .lc-card { width: 240px !important; }
  .lc-grid--resumen .lc-card-fila { font-size: 9px !important; line-height: 1.2 !important; grid-template-columns: 1fr 36px 130px !important; }
  .lc-grid--resumen .lc-card-fila .lc-num,
  .lc-grid--resumen .lc-card-fila span:first-child { white-space: normal !important; overflow: visible !important; text-overflow: clip !important; }
  .lc-grid--resumen .lc-card-letras { font-size: 7.5px !important; }
  /* El recibo de un vendedor (modal) se imprime solo, tapando el resto. */
  /* BUG encontrado: el modal usa "position: fixed" para verse bien en
     pantalla, pero en una hoja impresa un elemento "fixed" se repite en
     CADA página del PDF/impresión — por eso el recibo salía duplicado
     varias veces. En impresión el modal pasa a ser contenido normal
     (position: static), y se le saca el overflow/alto acotado para que el
     contenido fluya en una sola tirada en vez de recortarse en "pantallas"
     que después se repiten. */
  .lc-modal-overlay { position: static !important; inset: auto !important; background: #fff !important; padding: 0 !important; display: block !important; }
  .lc-modal { max-width: none !important; max-height: none !important; border: none !important; box-shadow: none !important; }
  .lc-modal-body { overflow: visible !important; max-height: none !important; }
  .lc-modal-header, .lc-modal-body { color: #000 !important; }
  .lc-modal-tabla thead th { background: #eee !important; color: #000 !important; }
  .lc-modal-tabla tbody td { color: #000 !important; }
  .lc-recibo .lc-modal-header { display: none !important; }
  .lc-recibo-copia--soloImpresion { display: block !important; }
  .lc-recibo-copia { border-bottom: 2px dashed #999 !important; padding-bottom: 16px !important; margin-bottom: 16px !important; break-inside: avoid; }
  .lc-recibo-copia:last-child { border-bottom: none !important; }
  .lc-recibo-marca-nombre, .lc-recibo-encabezado-valor { color: #000 !important; }
  .lc-recibo-copia-tag { color: #000 !important; border-color: #7a5200 !important; }
}

.ivj-plan-label { font-weight: 600; text-transform: uppercase; font-size: calc(var(--ivj-letra, 1) * 11px); color: var(--text); letter-spacing: 0.2px; }
.ivj-plan-input {
  width: 70px; text-align: center; font-weight: 700; font-size: calc(var(--ivj-letra, 1) * 13px); padding: 5px 6px;
  border: 1px solid var(--border); border-radius: 6px; background: var(--panel-2); color: var(--text);
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif;
}

/* Celdas editables: se ven como texto normal hasta que se tocan, para no
   parecer un formulario, pero avisan con un borde punteado al pasar el
   mouse que se pueden corregir a mano. */
/* EL NUMERO ES EL DATO. Estaba en 11,5px dentro de una celda que mide lo que
   mide el titulo de la columna («COROLLA CROSS», «LAND CRUISER»): sobraba
   lugar por todos lados y el numero no se leia. Se agranda a 16px, que entra
   sin ensanchar nada porque el ancho lo sigue mandando el encabezado.
   Y el ancho pasa a ser FIJO —36px— para que la columna no cambie de tamaño
   segun si adentro hay un 0 o un 13. Pedido de Ramiro. */
.ivj-celda {
  width: 100%; min-width: 36px; text-align: center; background: transparent; border: 1px solid transparent;
  border-radius: 6px; color: var(--text); font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: calc(var(--ivj-letra, 1) * 16px);
  padding: 2px 4px; font-weight: 600;
}
.ivj-celda:hover { border-color: var(--border); background: var(--panel-2); }
.ivj-celda:focus { outline: none; border-color: var(--accent-amber); background: var(--panel-2); }

/* Columna "Total Ventas" resaltada con un color suave, de punta a punta. */
.ivj-th-destacada { background: color-mix(in srgb, var(--accent-amber) 30%, var(--panel-2)) !important; }
.ivj-col-destacada { background: color-mix(in srgb, var(--accent-amber) 24%, transparent); }
.ivj-col-destacada .ivj-celda { color: var(--text); font-weight: 700; }
.ivj-fila-totales td.ivj-col-destacada { background: color-mix(in srgb, var(--accent-amber) 50%, var(--panel-2)) !important; }
.ivj-fila-totales td.ivj-col-destacada .ivj-celda { color: var(--text); font-weight: 700; font-size: calc(var(--ivj-letra, 1) * 19px); }

.ivj-tab-btn--pdf { border-color: var(--accent-blue); color: var(--text); }
.lc-zoom-control {
  display: flex; align-items: center; gap: 6px; background: var(--panel-2); border: 1px solid var(--border);
  border-radius: 8px; padding: 4px 8px; font-size: 12px; color: var(--text);
}
.lc-zoom-btn {
  width: 22px; height: 22px; border-radius: 6px; border: 1px solid var(--border); background: var(--panel);
  color: var(--text); font-size: 14px; line-height: 1; cursor: pointer; display: flex; align-items: center; justify-content: center;
}
.lc-zoom-btn:hover { border-color: var(--accent-amber); color: var(--text); }
.lc-zoom-valor { font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; min-width: 38px; text-align: center; color: var(--text); }
.lc-zoom-reset { font-size: 12px; }
@media print { .lc-zoom-control { display: none !important; } }
.ivj-tab-btn--pdf:hover { background: color-mix(in srgb, var(--accent-blue) 15%, var(--panel-2)); }
.ivj-tab-btn--rv { border-color: var(--green); color: var(--text); }
.ivj-tab-btn--rv:hover { background: color-mix(in srgb, var(--green) 15%, var(--panel-2)); }
.ivj-tab-btn--liq { border-color: var(--accent-amber); color: var(--text); }
.ivj-tab-btn--liq:hover { background: color-mix(in srgb, var(--accent-amber) 15%, var(--panel-2)); }





@media print {
  /* Misma red de seguridad que en Liquidación: apaga todos los fondos
     oscuros del tema por defecto; las reglas más abajo (con !important y
     selector de clase) siguen ganando y ponen el blanco/gris que corresponde
     en cada tarjeta, tabla, etc. Esto evita que la parte de la hoja sin
     contenido quede oscura. */
  * { background-color: transparent !important; }
  .back-btn, .breadcrumb, .header { display: none !important; }
  /* Márgenes estrechos y parejos en los cuatro lados, apaisada.
     El tamaño va en MILÍMETROS y no como «A4 landscape»: la palabra sola la
     pisa el «Diseño: Vertical» del cuadro de impresión y el contenido sale
     rotado sobre una hoja parada, que es lo que le pasaba a Ramiro al mandar
     el informe por correo. Con las medidas explícitas queda apaisada aunque
     el cuadro diga otra cosa.
     Es la última @page del archivo de Informes, así que es la que manda. */
  @page { size: 297mm 210mm; margin: 4mm; }
  html, body { height: auto !important; overflow: visible !important; background: #fff !important; }
  .app-shell, .ivj-panel, .ivj-stack { background: #fff !important; }
  .ivj-panel { font-size: calc(var(--ivj-letra, 1) * 13px) !important; }
  .app-shell { height: auto !important; min-height: 0 !important; max-height: none !important; overflow: visible !important; zoom: 1 !important; padding: 0 !important; }
  .ivj-toolbar { display: none; }
  .ivj-panel, .ivj-stack { height: auto !important; overflow: visible !important; }
  /* Un concesionario por hoja: el reporte no se parte y el que sigue arranca
     en hoja nueva. Es como estaba antes del 28/08 y volvió por pedido de
     Ramiro. */
  .ivj-reporte {
    background: #fff; color: #000; border: none; box-shadow: none;
    page-break-after: always; break-after: page;
    page-break-inside: avoid; break-inside: avoid;
    height: auto !important; overflow: visible !important; margin-bottom: 0 !important;
    padding: 3px 5px !important;
  }
  .ivj-reporte:last-child, .ivj-reporte:only-child { page-break-after: auto; break-after: auto; }
  /* El «zoom: .78» fijo se fue. Era un número a ojo que servía para un
     concesionario y no para otro: Ginza tiene ocho modelos y doce vendedores
     y con .78 seguía sin entrar, mientras que a los otros dos los achicaba de
     más. Ahora el factor se MIDE antes de imprimir, uno por concesionario
     (ivjAjustarAUnaHoja), igual que el «ajustar a una hoja» de Excel. */
  .ivj-tabla-scroll { overflow: visible !important; }
  .ivj-tabla-scroll, .ivj-indicadores, .ivj-ind-card, .ivj-planahorro,
  .ivj-rank-fila { page-break-inside: avoid !important; break-inside: avoid !important; }
  .ivj-stack { gap: 0 !important; }

  /* Encabezado grande, con banda de color detrás del nombre */
  .ivj-header {
    margin-bottom: 4px !important; padding: 3px 7px !important;
    border-bottom: 2px solid #111318 !important; align-items: baseline !important;
    background: #f2f2f2 !important; border-radius: 6px 6px 0 0 !important;
  }
  .ivj-header h1 { font-size: calc(var(--ivj-letra, 1) * 17px) !important; font-weight: 700 !important; }
  .ivj-nombre-dealer { font-size: calc(var(--ivj-letra, 1) * 24px) !important; font-weight: 700 !important; }
  .ivj-header h1::before { height: 14px !important; width: 5px !important; }
  .ivj-mes-select { font-size: calc(var(--ivj-letra, 1) * 12px) !important; padding: 2px 6px !important; border-radius: 5px !important; }

  /* Tabla principal: compacta pero legible, con cebrado */
  .ivj-tabla-scroll { margin-bottom: 3px !important; border: 1px solid #999 !important; border-radius: 6px !important; overflow: hidden !important; }
  .ivj-tabla { font-size: calc(var(--ivj-letra, 1) * 13px) !important; }
  .ivj-tabla thead th { padding: 3px 4px !important; font-size: calc(var(--ivj-letra, 1) * 11px) !important; font-weight: 700 !important; background: #d8d8d8 !important; }
  .ivj-tabla .ivj-th-sub th { padding: 2px 3px !important; font-size: calc(var(--ivj-letra, 1) * 10px) !important; font-weight: 700 !important; }
  .ivj-tabla tbody td { padding: 3px 4px !important; border-color: #ddd !important; font-size: calc(var(--ivj-letra, 1) * 13px) !important; }
  .ivj-tabla tbody tr:nth-child(even) td { background: #f6f6f6 !important; }
  .ivj-num { font-size: calc(var(--ivj-letra, 1) * 13px) !important; }
  .ivj-celda { font-size: calc(var(--ivj-letra, 1) * 13px) !important; font-weight: 600 !important; padding: 0 1px !important; min-width: 18px !important; }
  .ivj-col-vendedor { font-size: calc(var(--ivj-letra, 1) * 13px) !important; font-weight: 700 !important; }
  .ivj-fila-totales td { font-size: calc(var(--ivj-letra, 1) * 15px) !important; font-weight: 700 !important; border-top: 2px solid #111318 !important; background: #ececec !important; }
  .ivj-fila-totales td.ivj-col-destacada .ivj-celda { font-size: calc(var(--ivj-letra, 1) * 19px) !important; }

  /* Indicadores compactos, con borde de color y título destacado */
  .ivj-indicadores { gap: 4px !important; margin-bottom: 3px !important; grid-template-columns: repeat(3, 1fr) !important; }
  .ivj-ind-card { padding: 3px 5px !important; border: 1px solid #ccc !important; border-left: 3px solid var(--accent-amber, #f2c200) !important; border-radius: 5px !important; }
  .ivj-ind-titulo {
    font-size: calc(var(--ivj-letra, 1) * 8.5px) !important; margin-bottom: 2px !important; font-weight: 700 !important;
    background: #fff2d9 !important; padding: 1px 3px !important; border-radius: 3px !important; display: inline-block !important;
  }
  .ivj-ind-nota { font-size: calc(var(--ivj-letra, 1) * 6px) !important; margin-top: 1px !important; }
  .ivj-vs-valor { font-size: calc(var(--ivj-letra, 1) * 15px) !important; }
  .ivj-rank-fila { padding: 1px 0 1.5px !important; gap: 3px !important; border-bottom: 1px solid #ddd !important; align-items: flex-start !important; }
  .ivj-rank-pos { font-size: calc(var(--ivj-letra, 1) * 6.5px) !important; width: 10px !important; }
  .ivj-rank-nombre { font-size: calc(var(--ivj-letra, 1) * 7.5px) !important; margin-bottom: 2px !important; }
  .ivj-rank-barra-track { height: 2px !important; background: #e8e8e8 !important; margin-bottom: 1px !important; }
  .ivj-rank-barra-fill { -webkit-print-color-adjust: exact !important; print-color-adjust: exact !important; }
  .ivj-rank-valor { font-size: calc(var(--ivj-letra, 1) * 6.5px) !important; }

  /* Plan de ahorro compacto */
  .ivj-planahorro { max-width: 240px !important; border: 2px solid #111318 !important; border-radius: 8px !important; }
  .ivj-plan-titulo { padding: 3px !important; font-size: calc(var(--ivj-letra, 1) * 12px) !important; }
  .ivj-plan-fila { padding: 3px 8px !important; }
  .ivj-plan-label { font-size: calc(var(--ivj-letra, 1) * 11px) !important; }
  .ivj-plan-input { width: 54px !important; font-size: calc(var(--ivj-letra, 1) * 14px) !important; font-weight: 700 !important; padding: 2px 4px !important; border-radius: 5px !important; }

  .ivj-header h1, .ivj-col-vendedor, .ivj-celda, .ivj-plan-label { color: #000 !important; }
  .ivj-celda { border-color: transparent !important; background: transparent !important; }
  .ivj-tabla thead th, .ivj-ind-card, .ivj-fila-totales td, .ivj-planahorro, .ivj-plan-titulo { background: #eee !important; color: #000 !important; }
  .ivj-ind-titulo, .ivj-rank-nombre, .ivj-vs-valor, .ivj-rank-valor, .ivj-rank-pct, .ivj-ind-nota { color: #000 !important; }
  /* Resaltado bien vivo (dorado saturado), no apagado */
  .ivj-th-destacada, .ivj-col-destacada { background: #fbe37a !important; }
  .ivj-col-destacada .ivj-celda { color: #000 !important; font-weight: 700 !important; }
  .ivj-fila-totales td.ivj-col-destacada { background: var(--accent-amber, #f2c200) !important; }

  /* Los tres indicadores se achican y se les pone tope de alto: el espacio
     que liberan se lo lleva la tabla, que es lo que se mira en el celular.
     El ranking recorta lo que no entra en vez de estirar la tarjeta. */
  .ivj-ind-card { max-height: 118px !important; overflow: hidden !important; }
  .ivj-rank-list { overflow: hidden !important; }
}

/* ---- Asignación (Ginza / Toyota) ---- */
.asg-panel { padding-bottom: 30px; }
.asg-reporte { background: var(--panel); border: 1px solid var(--border); border-radius: 12px; padding: 20px 22px; }
.asg-header { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 10px; margin-bottom: 10px; border-bottom: 1px solid var(--border); padding-bottom: 12px; }
.asg-header h1 { margin: 0; font-size: 17px; font-weight: 700; color: var(--text); }
.asg-nombre-dealer { color: var(--text); font-weight: 700; }
.asg-header-acciones { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.asg-mes-select {
  background: var(--panel-2); border: 1px solid var(--border); border-radius: 8px; color: var(--text);
  padding: 7px 10px; font-size: 12.5px; font-family: inherit;
}
.asg-btn {
  display: inline-flex; align-items: center; gap: 6px; padding: 7px 12px; border-radius: 8px;
  border: 1px solid var(--border); background: var(--panel-2); color: var(--text); font-size: 12px;
  font-family: inherit; cursor: pointer; transition: 0.12s ease;
}
.asg-btn:hover { border-color: var(--accent-blue); color: var(--text); }
.asg-btn--sm { padding: 5px 10px; font-size: 12px; }
.asg-btn--agregar { margin-top: 10px; border-color: var(--accent-amber); color: var(--text); }
.asg-fila-botones-pie { display: flex; gap: 10px; flex-wrap: wrap; }
.asg-fila-botones-pie .asg-btn--agregar { margin-top: 10px; }
.asg-btn--nueva { border-color: var(--accent-amber); color: var(--text); font-weight: 700; }
.asg-btn--nueva:hover { background: color-mix(in srgb, var(--accent-amber) 15%, var(--panel-2)); }
.asg-modal-fondo {
  position: fixed; inset: 0; background: rgba(0,0,0,0.6); z-index: 100;
  display: flex; align-items: center; justify-content: center; padding: 16px;
}
.asg-modal {
  background: var(--panel); border: 1px solid var(--border); border-radius: 12px; padding: 18px 20px;
  max-width: 900px; width: 100%; max-height: calc(80vh / var(--tcg-z, 1)); display: flex; flex-direction: column; gap: 12px;
  box-shadow: 0 12px 40px rgba(0,0,0,0.5);
}
.asg-modal-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; border-bottom: 1px solid var(--border); padding-bottom: 10px; }
.asg-modal-titulo { font-size: 15px; font-weight: 700; color: var(--text); }
.asg-modal-sub { font-size: 12px; color: var(--text); margin-top: 3px; }
.asg-modal-tabla-scroll { overflow: auto; }
.asg-modal-tabla { border-collapse: collapse; width: 100%; font-size: 12px; }
.asg-modal-tabla thead th {
  background: var(--panel-2); color: var(--text); font-weight: 700; text-transform: uppercase; text-align: left;
  padding: 7px 8px; font-size: 13px; border-bottom: 1px solid var(--border); position: sticky; top: 0;
}
.asg-modal-tabla tbody td { padding: 5px 8px; border-bottom: 1px solid color-mix(in srgb, var(--border) 55%, transparent); color: var(--text); text-align: left; }
.asg-modal-tabla tbody td.asg-num { text-align: right; font-variant-numeric: tabular-nums; }
.asg-form-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); gap: 10px; overflow-y: auto; padding-right: 4px; flex: 1; min-height: 0; align-content: start; }
.asg-form-campo { display: flex; flex-direction: column; gap: 4px; font-size: 12px; color: var(--text); }
.asg-form-campo input {
  background: var(--panel-2); border: 1px solid var(--border); border-radius: 6px; color: var(--text);
  padding: 6px 8px; font-size: 13px; font-family: inherit;
}
.asg-form-campo input:focus { outline: none; border-color: var(--accent-amber); }
.asg-form-acciones { display: flex; align-items: center; justify-content: space-between; gap: 10px; flex-wrap: wrap; border-top: 1px solid var(--border); padding-top: 12px; }
.asg-btn--agregar:hover { background: color-mix(in srgb, var(--accent-amber) 15%, var(--panel-2)); }
.asg-btn-del { background: transparent; border: none; color: var(--text); cursor: pointer; padding: 4px; border-radius: 6px; }
.asg-btn-del:hover { color: var(--red); }
.asg-btn-del.confirm-armado { color: #fff; background: var(--red); }
.asg-save-status { font-size: 12px; color: var(--text); }
.asg-error { color: var(--red); font-size: 12.5px; margin: 6px 0; }
.asg-nota { font-size: 12px; color: var(--text); margin: 8px 0 14px; }

.asg-indicadores { position: relative; margin-bottom: 18px; overflow-x: auto; -webkit-overflow-scrolling: touch; }
.asg-ind-card {
  background: var(--panel-2); border: 1px solid var(--border); border-radius: 10px; padding: 14px 16px;
  box-sizing: border-box;
  display: flex; flex-direction: column; transition: opacity 0.12s ease, box-shadow 0.12s ease;
  box-shadow: 0 2px 10px rgba(0,0,0,0.25);
}
.asg-ind-cuerpo-scroll { overflow-y: auto; flex: 1; min-height: 0; }
.asg-ind-card--arrastrando { opacity: 0.55; box-shadow: 0 8px 24px rgba(0,0,0,0.4); }
.asg-ind-drag { color: var(--text); font-size: 16px; cursor: grab; padding: 2px 4px; }
.asg-ind-drag:active { cursor: grabbing; color: var(--text); }
.asg-ind-resize { position: absolute; touch-action: none; }
.asg-ind-resize--der { top: 8px; bottom: 20px; right: -3px; width: 8px; cursor: ew-resize; }
.asg-ind-resize--izq { top: 8px; bottom: 20px; left: -3px; width: 8px; cursor: ew-resize; }
.asg-ind-resize--abajo { left: 8px; right: 20px; bottom: -3px; height: 8px; cursor: ns-resize; }
.asg-ind-resize--arriba { left: 8px; right: 20px; top: -3px; height: 8px; cursor: ns-resize; }
.asg-ind-resize--der:hover, .asg-ind-resize--izq:hover { background: color-mix(in srgb, var(--accent-amber) 20%, transparent); }
.asg-ind-resize--abajo:hover, .asg-ind-resize--arriba:hover { background: color-mix(in srgb, var(--accent-amber) 20%, transparent); }
.asg-ind-resize--esquina {
  right: 2px; bottom: 2px; width: 18px; height: 18px; cursor: nwse-resize;
  display: flex; align-items: center; justify-content: center; font-size: 12px; color: var(--text);
  border-radius: 6px;
}
.asg-ind-resize--esquina:hover, .asg-ind-resize--esquina:active { color: var(--text); background: color-mix(in srgb, var(--accent-amber) 12%, transparent); }
.asg-ind-titulo { font-size: 13px; font-weight: 700; color: #fff; text-transform: uppercase; letter-spacing: 0.3px; margin-bottom: 10px; text-align: center; }
.asg-ind-vacio { font-size: 12px; color: var(--text); }
.asg-ind-clickable {
  background: none; border: none; padding: 0; width: 100%; text-align: left; cursor: pointer;
  display: block; font-family: inherit; border-radius: 8px; transition: background 0.12s ease;
}
.asg-ind-clickable:hover { background: color-mix(in srgb, var(--accent-amber) 8%, transparent); }
.asg-ind-valor-grande { font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 16px; font-weight: 700; color: var(--text); margin-bottom: 4px; }
.asg-ind-nota { font-size: 12px; color: var(--text); line-height: 1.4; }
.asg-ind-card .ivj-rank-nombre { font-size: 11px; }
.asg-ind-card .ivj-rank-valor { font-size: 10.5px; }
.asg-ind-card .ivj-rank-pct { font-size: 10.5px; }
.asg-ind-card .ivj-rank-pos { font-size: 10px; }
.asg-ind-fila-objetivo { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 8px; font-size: 12px; color: var(--text); }
.asg-objetivo-input { width: 130px; text-align: right; background: var(--panel); border: 1px solid var(--border); border-radius: 6px; color: var(--text); padding: 5px 8px; font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 12px; }
.asg-vs-valor { font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 15px; font-weight: 700; color: var(--text); }
.asg-vs-up { color: var(--text); }
.asg-vs-down { color: var(--text); }
.asg-tot-fila { display: flex; align-items: center; justify-content: space-between; padding: 4px 0; font-size: 12.5px; color: var(--text); border-bottom: 1px solid var(--border); }
.asg-tot-fila:last-child { border-bottom: none; }
.asg-tot-fila b { color: var(--text); font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; }
.asg-tot-fila--destacada { color: var(--text); }
.asg-tot-fila--destacada b { color: var(--text); }

.asg-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 10px; flex-wrap: wrap; margin-bottom: 12px; }
.asg-buscador { display: flex; align-items: center; gap: 8px; background: var(--panel-2); border: 1px solid var(--border); border-radius: 8px; padding: 7px 10px; flex: 1; min-width: 220px; color: var(--text); }
.asg-buscador input { border: none; background: transparent; color: var(--text); font-size: 13px; flex: 1; font-family: inherit; }
.asg-buscador input:focus { outline: none; }

.asg-tabla-scroll { overflow: auto; max-height: calc(62vh / var(--tcg-z, 1)); border: 1px solid var(--border); border-radius: 10px; -webkit-overflow-scrolling: touch; scrollbar-width: none; -ms-overflow-style: none; overscroll-behavior: contain; }
.asg-tabla-scroll--fija { max-height: calc(calc(100dvh / var(--tcg-z, 1)) - 260px); }
.asg-tablero-fijo-toggle { display: flex; align-items: center; gap: 6px; cursor: pointer; }
.asg-tablero-fijo-toggle input { accent-color: var(--accent-amber); cursor: pointer; }
.asg-btn--deshabilitado { opacity: 0.4; }
.asg-tabla-scroll::-webkit-scrollbar { display: none; }
/* Técnica robusta para que el encabezado quede SIEMPRE fijo (probamos
   position:sticky directo sobre <th> dentro de un <table> normal y seguía
   fallando en algunos casos): acá la tabla deja de ser un <table> real por
   dentro — thead/tbody pasan a ser bloques normales, y cada <tr> es su
   propia "tabla" de una sola fila (display:table). Así el sticky se aplica
   sobre el <thead>, que ahora es un bloque común, no una sección de tabla
   (que es justo lo que tiene bugs de sticky en varios navegadores). Los
   anchos de columna siguen alineados entre encabezado y filas porque cada
   celda ya tiene su ancho explícito (colWidths), compartido entre todas.
*/
.asg-tabla { border-collapse: separate; border-spacing: 0; font-size: 12px; width: 100%; display: block; }
.asg-tabla thead, .asg-tabla tbody { display: block; width: 100%; }
.asg-tabla tr { display: table; width: 100%; table-layout: fixed; }
.asg-tabla thead { position: sticky; top: 0; z-index: 3; }
.asg-tabla thead th {
  background: var(--panel-2); color: var(--text); font-weight: 700; text-transform: uppercase; text-align: left;
  padding: 8px 9px; font-size: 13px; border-bottom: 1px solid var(--border); border-right: 1px solid var(--border);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; display: table-cell;
}
.asg-tabla thead th:last-child { border-right: none; }
/* Barra de scroll horizontal flotante: sticky al fondo de la pantalla
   mientras la tabla está a la vista, siempre alcanzable sin tener que
   bajar hasta el final de la tabla para encontrarla. */
.asg-scroll-flotante {
  position: sticky; bottom: 0; overflow-x: auto; overflow-y: hidden; height: 14px;
  background: var(--panel-2); border: 1px solid var(--border); border-top: none; border-radius: 0 0 10px 10px;
  -webkit-overflow-scrolling: touch; z-index: 4;
}
.asg-resize-col {
  position: absolute; right: 0; top: 0; bottom: 0; width: 8px; cursor: col-resize; touch-action: none;
  border-right: 2px solid transparent;
}
.asg-resize-col:hover, .asg-resize-col:active { border-right-color: var(--accent-amber); }
.asg-resize-fila {
  display: inline-block; width: 18px; height: 14px; cursor: row-resize; touch-action: none;
  border-bottom: 2px dotted var(--text-muted); opacity: 1; vertical-align: middle;
}
.asg-resize-fila:hover, .asg-resize-fila:active { opacity: 1; border-bottom-color: var(--accent-amber); }
.asg-fila-acciones { display: flex; align-items: center; gap: 4px; }
.asg-tabla tbody td { padding: 4px 7px; border-bottom: 1px solid color-mix(in srgb, var(--border) 55%, transparent); border-right: 1px solid color-mix(in srgb, var(--border) 55%, transparent); color: var(--text); overflow: hidden; transition: box-shadow 0.12s ease; text-align: left; display: table-cell; }
.asg-tabla tbody td.asg-num { text-align: right; }
.asg-tabla tbody td:last-child { border-right: none; }
.asg-fila--activa td { box-shadow: inset 0 1px 0 var(--accent-amber), inset 0 -1px 0 var(--accent-amber); }
.asg-num { text-align: right; font-variant-numeric: tabular-nums; }
.asg-num-click { cursor: pointer; text-decoration: underline; text-decoration-color: transparent; transition: color 0.12s ease, text-decoration-color 0.12s ease; }
.asg-num-click:hover { color: var(--text); text-decoration-color: var(--accent-amber); }
.asg-checkbox { width: 16px; height: 16px; cursor: pointer; accent-color: var(--accent-amber); }
.asg-vacio { text-align: center; color: var(--text); padding: 22px; white-space: normal; }
.asg-col-venta { background: color-mix(in srgb, var(--accent-blue) 16%, transparent); }
.asg-col-venta .asg-cell-input, input.asg-col-venta { color: var(--text); font-weight: 700; }
.asg-col-saldo-pendiente { background: color-mix(in srgb, var(--red) 20%, transparent); }
.asg-col-saldo-pendiente .asg-cell-input, input.asg-col-saldo-pendiente { color: var(--red); font-weight: 700; }
.asg-col-saldo-cero { background: color-mix(in srgb, var(--green) 16%, transparent); }
.asg-col-saldo-cero .asg-cell-input, input.asg-col-saldo-cero { color: var(--text); font-weight: 700; }
/* Especificidad reforzada: la regla global "tr:nth-child(even) td" (más
   específica que una simple clase) le ganaba el color a estas 3 columnas en
   las filas pares, dando el efecto de resaltado "salteado". Estas versiones
   con .asg-tabla + tbody + td.clase pesan más y ganan siempre, en todas las
   filas por igual. El rojo de saldo pendiente además se hizo más intenso. */
.asg-tabla tbody td.asg-col-venta { background: color-mix(in srgb, var(--accent-blue) 24%, transparent) !important; }
.asg-tabla tbody td.asg-col-venta .asg-cell-input, .asg-tabla tbody input.asg-col-venta { color: var(--text); font-weight: 700; }
.asg-tabla tbody td.asg-col-saldo-pendiente { background: color-mix(in srgb, #ff3b30 42%, transparent) !important; }
.asg-tabla tbody td.asg-col-saldo-pendiente .asg-cell-input, .asg-tabla tbody input.asg-col-saldo-pendiente { color: #ffffff; font-weight: 700; }
.asg-tabla tbody td.asg-col-saldo-cero { background: color-mix(in srgb, var(--green) 26%, transparent) !important; }
.asg-tabla tbody td.asg-col-saldo-cero .asg-cell-input, .asg-tabla tbody input.asg-col-saldo-cero { color: var(--text); font-weight: 700; }
.asg-ind-titulo-fila { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 10px; }
.asg-ind-titulo--arrastrable { display: flex; align-items: center; gap: 5px; flex: 1; min-width: 0; }
.asg-ind-acciones-tarjeta { display: flex; align-items: center; gap: 6px; }
.asg-ind-btn-tam { padding: 3px 7px !important; font-size: 12px !important; line-height: 1; }
.asg-ind-titulo-fila .asg-ind-titulo { margin-bottom: 0; }
.asg-col-menu-wrap { position: relative; }
.asg-col-menu {
  position: absolute; top: calc(100% + 6px); right: 0; z-index: 20; min-width: 220px;
  background: var(--panel-2); border: 1px solid var(--border); border-radius: 10px;
  padding: 10px 12px; box-shadow: 0 8px 24px rgba(0,0,0,0.35);
}
.asg-col-menu-titulo { font-size: 12px; font-weight: 700; color: var(--text); text-transform: uppercase; margin-bottom: 8px; }
.asg-col-menu-item { display: flex; align-items: center; gap: 8px; font-size: 12.5px; color: var(--text); padding: 3px 0; cursor: pointer; }
.asg-col-menu-item-fila { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 3px 0; }
.asg-col-menu-item-fila > label { display: flex; align-items: center; gap: 8px; font-size: 12.5px; color: var(--text); cursor: pointer; flex: 1; min-width: 0; }
.asg-align-picker { display: flex; gap: 2px; flex-shrink: 0; }
.asg-align-btn {
  width: 20px; height: 20px; border-radius: 6px; border: 1px solid var(--border); background: var(--panel);
  color: var(--text); font-size: 12px; cursor: pointer; display: flex; align-items: center; justify-content: center;
}
.asg-align-btn:hover { border-color: var(--accent-amber); color: var(--text); }
.asg-align-btn--activo { background: var(--accent-amber); border-color: var(--accent-amber); color: #000; }
.asg-cell-input {
  width: 100%; min-width: 0; background: transparent; border: 1px solid transparent; border-radius: 6px;
  color: var(--text); font-family: inherit; font-size: 12px; padding: 4px 5px;
}
/* RVNumeroInput (columnas de monto) usa las clases rv-cell-input, pensadas
   para el árbol de Registro de Ventas que define --rv-* propias. Acá no
   existen esas variables, así que se pisan con las de siempre (--panel,
   --text, etc.) para que no quede sin estilo. */
.asg-panel .rv-cell-input {
  width: 100%; background: transparent; border: 1px solid transparent; border-radius: 6px;
  color: var(--text); font-size: 12px; font-family: inherit; padding: 4px 5px;
}
.asg-panel .rv-cell-input:hover { border-color: var(--border); background: var(--panel-2); }
.asg-panel .rv-cell-input:focus { outline: none; border-color: var(--accent-amber); background: var(--panel-2); }
.asg-panel .rv-cell-input--num { text-align: right; min-width: 0; }
.asg-cell-input:hover { border-color: var(--border); background: var(--panel-2); }
.asg-cell-input:focus { outline: none; border-color: var(--accent-amber); background: var(--panel-2); }
input.asg-objetivo-input:focus { outline: none; border-color: var(--accent-amber); }




/* ---------- Repuestos · Seguimiento de Objetivo ----------
   Todo prefijado con .rob-root para no pisar el CSS general de la app. */
.rob-root { padding-bottom: 30px; }
.rob-root .rob-cargando, .rob-root .rob-vacio { color: var(--text); font-size: 13px; padding: 18px 2px; }
.rob-root .rob-save { font-size: 12px; color: var(--text); }
.rob-root .rob-btn {
  display: inline-flex; align-items: center; gap: 6px; background: var(--panel-2);
  border: 1px solid var(--border); border-radius: 8px; color: var(--text);
  padding: 7px 12px; font-size: 12.5px; font-family: inherit; cursor: pointer;
}
.rob-root .rob-btn:hover { border-color: var(--accent-amber); }
.rob-root .rob-btn--sm { padding: 5px 9px; font-size: 12px; }

.rob-root .rob-bloque { background: var(--panel); border: 1px solid var(--border); border-radius: 12px; padding: 14px 16px; margin-bottom: 14px; }
.rob-root .rob-bloque-barra { display: flex; align-items: center; justify-content: space-between; gap: 10px; flex-wrap: wrap; }
.rob-root .rob-bloque-acciones { display: flex; align-items: center; gap: 8px; }
.rob-root .rob-bloque-titulo { font-size: 12px; font-weight: 700; color: #fff; text-transform: uppercase; letter-spacing: 0.4px; margin-bottom: 12px; }
.rob-root .rob-bloque-barra .rob-bloque-titulo { margin-bottom: 0; }
.rob-root .rob-grid-bloques { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 14px; }

.rob-root .rob-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 10px; }
.rob-root .rob-campo { display: flex; flex-direction: column; gap: 4px; }
.rob-root .rob-campo-label { font-size: 12px; color: var(--text); text-transform: uppercase; letter-spacing: 0.3px; }
.rob-root .rob-campo-input { width: 100%; }
.rob-root .rob-campo--calc { background: var(--panel-2); border: 1px solid var(--border); border-radius: 8px; padding: 6px 9px; }
.rob-root .rob-campo-valor { font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 13.5px; font-weight: 700; color: var(--text); }
.rob-root .rob-campo--ok .rob-campo-valor { color: var(--text); }
.rob-root .rob-campo--bajo .rob-campo-valor { color: var(--red); }

.rob-root .rob-tabla-scroll { overflow: auto; border: 1px solid var(--border); border-radius: 10px; }
.rob-root .rob-tabla { table-layout: fixed; width: auto; min-width: 100%; border-collapse: collapse; font-size: 12px; }
.rob-root .rob-tabla thead th {
  position: sticky; top: 0; background: var(--panel-2); text-align: left; padding: 8px 8px;
  font-size: 13px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.3px;
  color: var(--text); border-bottom: 1px solid var(--border); border-right: 1px solid var(--border);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; z-index: 2;
}
.rob-root .rob-tabla tbody td { padding: 3px 6px; border-bottom: 1px solid var(--border); border-right: 1px solid var(--border); overflow: hidden; }
.rob-root .rob-tabla tbody tr:hover td { background: color-mix(in srgb, var(--accent-amber) 5%, transparent); }
.rob-root .rob-dia { font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 12px; color: var(--text); padding-left: 4px; }
.rob-root .rob-tabla tfoot td, .rob-root .rob-total {
  position: sticky; bottom: 0; background: var(--panel-2); font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif;
  font-size: 13px; font-weight: 700; color: var(--text); padding: 7px 8px; border-top: 1px solid var(--border);
}
.rob-root .rob-tabla--escala td { padding: 6px 8px; font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; }
.rob-root .rob-fila--ok td { background: color-mix(in srgb, var(--green) 14%, transparent); color: var(--text); }
.rob-root .rob-nota { font-size: 12px; color: var(--text); margin: 10px 0 0; line-height: 1.5; }

.rob-root .rob-inds { display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: 10px; }
.rob-root .rob-ind {
  display: flex; flex-direction: column; gap: 3px; text-align: left; font-family: inherit;
  background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--border);
  border-radius: 10px; padding: 11px 13px; cursor: pointer; transition: border-color 0.12s ease;
}
.rob-root .rob-ind:hover { border-color: var(--accent-amber); }
.rob-root .rob-ind--ok { border-left-color: var(--green); }
.rob-root .rob-ind--medio { border-left-color: var(--accent-amber); }
.rob-root .rob-ind--bajo { border-left-color: var(--red); }
.rob-root .rob-ind-titulo { font-size: 12px; font-weight: 700; color: var(--text); text-transform: uppercase; letter-spacing: 0.3px; }
.rob-root .rob-ind-valor { font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 18px; font-weight: 700; color: var(--text); }
.rob-root .rob-ind-nota { font-size: 12px; color: var(--text); line-height: 1.45; }
.rob-root .rob-ind-extra { font-size: 12px; color: var(--text); line-height: 1.45; opacity: 1; }



.sc-pestanas { display: flex; gap: 8px; }
.sc-tab-btn {
  flex: 0 0 auto; min-width: 118px; max-width: 168px; padding: 9px 14px;
  border-radius: 12px; border: 1px solid var(--border); background: var(--panel-2);
  color: var(--text); font-size: 12px; font-weight: 600; line-height: 1.3;
  white-space: normal; text-align: center; cursor: pointer; font-family: inherit;
  transition: transform 0.12s ease, border-color 0.12s ease, color 0.12s ease, box-shadow 0.12s ease;
}
.sc-tab-btn:hover { border-color: var(--accent-blue); color: var(--text); transform: translateY(-1px); }
.sc-tab-btn.active {
  background: color-mix(in srgb, var(--accent-blue) 18%, var(--panel-2));
  border-color: var(--accent-blue); color: var(--text); font-weight: 700;
  box-shadow: 0 0 14px color-mix(in srgb, var(--accent-blue) 45%, transparent);
}
.sc-tab-btn.soon { opacity: 1; }
.sc-tab-btn.soon:hover { opacity: 0.75; transform: none; border-color: var(--border); }
.sc-tab-btn.soon.active { opacity: 1; }
.sc-tab-btn.destacada {
  border-color: var(--accent-amber); color: var(--text); font-weight: 700;
  box-shadow: 0 0 10px color-mix(in srgb, var(--accent-amber) 35%, transparent);
}
.sc-tab-btn.destacada:hover {
  border-color: var(--green); color: var(--text); transform: translateY(-2px);
  box-shadow: 0 0 14px color-mix(in srgb, var(--green) 55%, transparent);
}
.sc-tab-btn.destacada.active {
  background: color-mix(in srgb, var(--accent-amber) 22%, var(--panel-2));
  border-color: var(--accent-amber); color: var(--text);
  box-shadow: 0 0 16px color-mix(in srgb, var(--accent-amber) 55%, transparent);
}
.sc-total-btn {
  display: inline-flex; align-items: center; gap: 5px; padding: 3px 10px; border-radius: 999px;
  border: 1px solid var(--accent-amber); font-size: 12px; font-weight: 700; cursor: pointer;
  font-family: inherit; color: var(--text); flex: 0 0 auto; white-space: nowrap;
  background: color-mix(in srgb, var(--accent-amber) 16%, var(--panel-2));
  box-shadow: 0 0 10px color-mix(in srgb, var(--accent-amber) 35%, transparent);
  transition: all 0.12s ease;
}
.sc-total-btn:hover { box-shadow: 0 0 16px color-mix(in srgb, var(--accent-amber) 55%, transparent); }
.sc-anio-btns { display: flex; gap: 6px; align-items: center; }
.sc-anio-btn {
  padding: 7px 12px; border-radius: 20px; border: 1px solid var(--border); background: var(--panel-2);
  color: var(--text); font-size: 12px; font-weight: 600; cursor: pointer; font-family: inherit;
  transition: all 0.12s ease;
}
.sc-anio-btn:hover { border-color: var(--accent-amber); color: var(--text); }
.sc-anio-btn.active {
  background: color-mix(in srgb, var(--accent-amber) 20%, var(--panel-2));
  border-color: var(--accent-amber); color: var(--text); font-weight: 700;
  box-shadow: 0 0 12px color-mix(in srgb, var(--accent-amber) 45%, transparent);
}
.sc-periodo-select {
  background: var(--panel-2); border: 1px solid var(--border); border-radius: 8px;
  color: var(--text); font-size: 12px; font-family: inherit; padding: 7px 10px; cursor: pointer;
}
.sc-mes-btns-scroll { overflow-x: auto; flex: 1 1 100%; order: 5; }
.sc-mes-btns { display: flex; gap: 5px; padding-bottom: 2px; }
.sc-mes-btn {
  flex: 0 0 auto; padding: 3px 9px; border-radius: 999px; border: 1px solid var(--border);
  background: var(--panel-2); color: var(--text); font-size: 12px; font-weight: 600;
  cursor: pointer; font-family: inherit; white-space: nowrap; transition: all 0.12s ease;
}
.sc-mes-btn:hover { border-color: var(--accent-blue); color: var(--text); }
.sc-mes-btn.active {
  background: color-mix(in srgb, var(--accent-blue) 22%, var(--panel-2));
  border-color: var(--accent-blue); color: var(--text); font-weight: 700;
  box-shadow: 0 0 10px color-mix(in srgb, var(--accent-blue) 40%, transparent);
}

/* ---- Recorrido mensual (selector de período reutilizable) ---- */
.rec-wrap { margin-bottom: 14px; }
.rec-wrap--compacto { margin-bottom: 6px; display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
.rec-wrap--compacto .rec-controlrow { margin-bottom: 0; flex-shrink: 0; }
.rec-wrap--compacto .rec-route { padding: 4px 6px; flex: 1; min-width: 0; }
.rec-wrap--compacto .rec-route-dot { width: 8px; height: 8px; }
.asg-nota--compacta { font-size: 12px; margin: 2px 0 8px; }
.asg-nota--compacta span[title] { text-decoration: underline dotted; cursor: help; }
.sc-section-title {
  font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: 1px;
  color: var(--text); margin: 4px 0 12px; display: flex; align-items: center; gap: 10px;
}
.sc-section-title::after { content: ""; flex: 1; height: 1px; background: var(--border); }
.rec-controlrow { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; margin-bottom: 10px; }
.rec-seg { display: flex; flex-wrap: wrap; gap: 6px; background: var(--panel-2); padding: 4px; border-radius: 10px; border: 1px solid var(--border); }
.rec-seg button {
  border: none; background: transparent; color: var(--text); padding: 7px 13px;
  border-radius: 8px; font-size: 12px; font-weight: 600; cursor: pointer; font-family: inherit; transition: 0.15s;
}
.rec-seg button:hover { color: var(--text); }
.rec-seg button.active {
  background: color-mix(in srgb, var(--accent-amber) 22%, var(--panel-2));
  color: var(--text); box-shadow: 0 0 8px color-mix(in srgb, var(--accent-amber) 35%, transparent);
}
.rec-checklabel { display: flex; align-items: center; gap: 8px; font-size: 12.5px; color: var(--text); cursor: pointer; user-select: none; }
.rec-checklabel input { width: 15px; height: 15px; cursor: pointer; accent-color: var(--accent-amber); }
.rec-hint { font-size: 12px; color: var(--text); margin: 0 0 4px; }
.rec-route {
  display: flex; align-items: center; gap: 0; overflow-x: auto; padding: 16px 4px 20px; position: relative;
  scrollbar-width: thin; scrollbar-color: var(--accent-amber) var(--panel-2);
}
.rec-route::-webkit-scrollbar { height: 8px; }
.rec-route::-webkit-scrollbar-track { background: var(--panel-2); border-radius: 8px; }
.rec-route::-webkit-scrollbar-thumb { background: var(--accent-amber); border-radius: 8px; }
.rec-route::-webkit-scrollbar-thumb:hover { background: var(--accent-blue); }
.rec-route-stop { flex-shrink: 0; display: flex; flex-direction: column; align-items: center; gap: 8px; padding: 0 13px; cursor: pointer; }
.rec-route-dot { width: 13px; height: 13px; border-radius: 50%; background: var(--panel-2); border: 2px solid var(--border); transition: 0.15s; }
.rec-route-stop.active .rec-route-dot {
  background: var(--accent-amber); border-color: var(--accent-amber);
  box-shadow: 0 0 0 4px color-mix(in srgb, var(--accent-amber) 18%, transparent);
}
.rec-route-label { font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 12px; color: var(--text); white-space: nowrap; }
.rec-route-stop.active .rec-route-label { color: var(--text); font-weight: 600; }

.app-shell {
  background: var(--bg);
  color: var(--text);
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif;
  /* 100dvh y no 100%: con 100% el shell mide lo que mide el contenido y
     debajo queda asomando el fondo del navegador, más oscuro. Eso es lo
     que se veía como media hoja de otro color. */
  min-height: calc(100dvh / var(--tcg-z, 1));
  padding: 16px;
  border-radius: 14px;
  zoom: var(--ui-zoom, 1);
}
.loading-shell {
  display: flex; align-items: center; justify-content: center; gap: 10px;
  /* 300px dejaba el resto de la ventana sin pintar: mientras cargaba se veía
     el color partido al medio. Tiene que cubrir toda la pantalla. */
  min-height: calc(100dvh / var(--tcg-z, 1)); color: var(--text);
}
.loading-mark { width: 40px; height: auto; }
.spin { animation: spin 1s linear infinite; }
@keyframes spin { to { transform: rotate(360deg); } }

.header {
  display: flex; flex-wrap: wrap; justify-content: space-between;
  align-items: flex-end; gap: 12px; margin-bottom: 12px;
}
.brandline { display: flex; align-items: center; gap: 10px; }
.header-mark { width: 64px; height: auto; display: block; flex-shrink: 0; }
.eyebrow {
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 12px;
  letter-spacing: 0.12em; text-transform: uppercase; color: var(--text);
}
.brandline h1 {
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-weight: 600; font-size: 21px;
  margin: 2px 0 0;
}
.year-switch {
  display: flex; align-items: center; gap: 10px;
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 13.5px;
  background: var(--panel); border: 1px solid var(--border);
  border-radius: 8px; padding: 6px 10px;
}
.year-switch .vs { color: var(--text); font-size: 12px; }
.year-switch button {
  background: var(--panel-2); border: 1px solid var(--border); color: var(--text);
  border-radius: 6px; padding: 3px 5px; cursor: pointer; display: flex;
}

.back-btn {
  display: flex; align-items: center; gap: 4px; background: transparent; border: none;
  color: var(--text); font-size: 12.5px; font-weight: 600; cursor: pointer;
  padding: 6px 0; margin-bottom: 10px;
}
.back-btn:hover { color: var(--text); }

.portada {
  display: flex; justify-content: center; padding: 18px 8px 22px; text-align: center;
}
.portada-logo { display: flex; flex-direction: column; align-items: center; gap: 8px; }
.portada-mark { width: 190px; height: auto; display: block; filter: drop-shadow(0 4px 16px rgba(0,0,0,0.35)); }
.portada-brand h1 {
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-weight: 700; font-size: 30px; letter-spacing: 0.06em;
  margin: 4px 0 2px; color: var(--text);
}
.portada-tag {
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 12px; letter-spacing: 0.05em;
  color: var(--text); text-transform: uppercase;
}

.vista-cards { display: flex; flex-direction: column; gap: 10px; margin-bottom: 18px; }
.vista-card {
  position: relative; background: var(--panel); border: 2px solid var(--border); border-radius: 16px;
  padding: 16px; text-align: left; cursor: pointer; display: flex; flex-direction: column; gap: 12px;
}
.vista-card.active { border-color: var(--accent-blue);
  /* El halo seguía el color de la casa; estaba fijo en azul y en Ginza
     quedaba un resplandor azul alrededor de un borde rojo. */
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent-blue, #4f8ef7) 16%, transparent); }
.vista-card-badge {
  align-self: flex-start; font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 12px; font-weight: 700;
  letter-spacing: 0.05em; padding: 4px 10px; border-radius: 20px; background: var(--panel-2);
  color: var(--text); border: 1px solid var(--border);
}
.vista-card-badge.on { color: var(--text); border-color: var(--accent-amber); }
.vista-card-body { display: flex; align-items: center; gap: 14px; }
.vista-card-icon { color: var(--text); flex-shrink: 0; }
.vista-card-title {
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 19px; font-weight: 600; color: var(--text);
}
.vista-card-sub {
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 12px; color: var(--text); margin-top: 3px;
  text-transform: uppercase; letter-spacing: 0.02em;
}
.titulo-seccion-grande {
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 22px; font-weight: 700; color: var(--text);
  text-align: center; letter-spacing: 0.01em;
}
@media (min-width: 860px) {
  .titulo-seccion-grande { font-size: 34px; }
}

/* --- Pantalla de entrada en PC: mosaico de tarjetas (Opción A) --- */
@media (min-width: 860px) {
  .vista-cards--entrada {
    /* Tres por fila, fijas. Con "auto-fit" entraban cinco arriba y la sexta
       quedaba colgada sola en el renglón de abajo. */
    display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px;
    max-width: 760px; margin-left: auto; margin-right: auto;
  }
  .vista-cards--entrada .vista-card { align-items: center; text-align: center; gap: 6px; padding: 22px 18px; }
  /* Todas del mismo alto: "Administración de Usuarios" ocupa dos renglones y
     estiraba su tarjeta sola. Se fija el alto y el título se centra adentro,
     así el nombre largo no deforma la fila. */
  .vista-cards--entrada .vista-card { min-height: 132px; justify-content: center; }
  .vista-cards--entrada .vista-card-body { flex: 0 0 auto; justify-content: center; }
  .vista-cards--entrada.vista-cards--dealers .vista-card { min-height: 106px; }
  .vista-cards--entrada .vista-card-badge { align-self: center; }
  .vista-cards--entrada .vista-card-body { flex-direction: column; gap: 6px; }
  .vista-cards--entrada .vista-card-icon { margin-top: 6px; }
  .vista-cards--entrada .vista-card-title { margin-top: 4px; }
  .vista-cards--entrada.vista-cards--dealers { max-width: 700px; }
}

/* --- Selector de usuario de prueba (mientras no hay login real) --- */
.usuario-prueba-bar {
  /* Centrada sobre las tarjetas: iba pegada a la derecha y quedaba suelta,
     lejos del contenido con el que se relaciona. */
  display: flex; align-items: center; justify-content: center;
  flex-wrap: wrap; gap: 10px; margin: 0 0 20px;
}
.usuario-prueba-label {
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 12px; color: var(--text);
  text-transform: uppercase; letter-spacing: 0.04em;
}
.usuario-prueba-select {
  background: var(--panel); border: 1px solid var(--border); color: var(--text); border-radius: 999px;
  padding: 5px 10px; font-size: 12px; font-weight: 600; cursor: pointer;
}

/* --- Tarjetas de logo de concesionario (entrada a Gerencia de Sector) --- */
.vista-card--logo { align-items: center; }
.vista-card-logo-wrap { display: flex; align-items: center; justify-content: center; padding: 6px 0; }
.btn-volver-chico {
  background: transparent; border: 1px solid var(--border); color: var(--text); font-size: 12px;
  padding: 6px 12px; border-radius: 8px; cursor: pointer; margin-bottom: 12px;
}

/* --- Administración de Usuarios --- */
.admin-usuarios-btn-nuevo {
  background: var(--panel); border: 1px solid var(--accent-amber); color: var(--text); font-weight: 700;
  font-size: 13px; padding: 10px 16px; border-radius: 10px; cursor: pointer;
}
.admin-usuarios-editor { max-width: 640px; margin: 0 auto; }
.admin-usuarios-label {
  display: block; font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.03em;
  color: var(--text); margin: 22px 0 8px;
}
.admin-usuarios-input {
  width: 100%; background: var(--panel); border: 1px solid var(--border); border-radius: 10px;
  padding: 12px 14px; color: var(--text); font-size: 15px; box-sizing: border-box;
}
.admin-usuarios-chips { display: flex; flex-wrap: wrap; gap: 8px; }
.admin-usuarios-chip {
  background: var(--panel); border: 1px solid var(--border); color: var(--text); font-size: 12px;
  font-weight: 600; padding: 8px 14px; border-radius: 999px; cursor: pointer;
}
.admin-usuarios-chip:hover { border-color: var(--accent-amber); color: var(--text); }
.admin-usuarios-card-activa { border-color: var(--accent-amber) !important; }
.admin-usuarios-card-permiso { border-style: dashed; margin-bottom: 8px; }
.admin-usuarios-switch {
  width: 38px; height: 22px; border-radius: 999px; background: var(--panel-2); position: relative;
  flex-shrink: 0; transition: background .15s ease;
}
.admin-usuarios-switch.on { background: var(--accent-amber); }
.admin-usuarios-switch-dot {
  width: 16px; height: 16px; border-radius: 50%; background: var(--text-muted); position: absolute;
  top: 3px; left: 3px; transition: left .15s ease, background .15s ease;
}
.admin-usuarios-switch.on .admin-usuarios-switch-dot { left: 19px; background: var(--panel); }
.admin-usuarios-matriz-wrap {
  overflow-x: auto; background: var(--panel); border: 1px solid var(--border); border-radius: 14px; padding: 14px 10px;
}
.admin-usuarios-matriz { border-collapse: collapse; width: 100%; min-width: 380px; }
.admin-usuarios-logo-btn { background: transparent; border: none; cursor: pointer; padding: 4px; }
.admin-usuarios-td-area { font-size: 12.5px; font-weight: 600; padding: 7px 10px 7px 4px; cursor: pointer; white-space: nowrap; color: var(--text); }
.admin-usuarios-check {
  width: 22px; height: 22px; border-radius: 6px; border: 1.5px solid var(--border); background: transparent;
  cursor: pointer; display: flex; align-items: center; justify-content: center; padding: 0; color: var(--panel);
}
.admin-usuarios-check.on { background: var(--accent-amber); border-color: var(--accent-amber); }
.admin-usuarios-botones-final { display: flex; align-items: center; gap: 10px; margin-top: 32px; }
.admin-usuarios-btn-eliminar {
  background: transparent; border: 1px solid #5a2a2a; color: #ee776c; font-size: 12.5px; font-weight: 600;
  padding: 10px 14px; border-radius: 10px; cursor: pointer; display: flex; align-items: center; gap: 6px;
}
.admin-usuarios-btn-cancelar {
  background: transparent; border: 1px solid var(--border); color: var(--text); font-size: 13px;
  font-weight: 600; padding: 10px 18px; border-radius: 10px; cursor: pointer;
}
.admin-usuarios-btn-guardar {
  background: var(--accent-amber); border: none; color: #000; font-size: 13px; font-weight: 700;
  padding: 10px 22px; border-radius: 10px; cursor: pointer;
}

.tablero-switch { display: flex; gap: 6px; flex-wrap: wrap; margin-bottom: 14px; }
.tablero-btn {
  background: var(--panel); border: 1px solid var(--border); color: var(--text);
  padding: 7px 14px; border-radius: 8px; font-size: 12px; font-weight: 600; cursor: pointer;
  min-width: 84px; text-align: center; transition: all 0.12s ease;
}
.tablero-btn.active {
  background: var(--accent-amber); border-color: var(--accent-amber); color: #000;
  font-weight: 700; box-shadow: 0 0 0 3px rgba(232,163,61,0.18);
}
.tablero-btn.soon { opacity: 1; }
.tablero-btn.soon.active { opacity: 1; }

.panel-empty {
  background: var(--panel); border: 1px dashed var(--border); border-radius: 12px;
  padding: 28px 16px; text-align: center; color: var(--text);
}
.panel-empty p { margin: 4px 0; }
.panel-empty .muted { font-size: 12px; }

.tesoreria-panel { padding-bottom: 24px; }
.tesoreria-titulo-principal { font-size: 30px; font-weight: 700; margin: 4px 0 14px; }

.tesoreria-kpis { display: flex; gap: 14px; flex-wrap: wrap; margin-bottom: 16px; }
.tesoreria-bloque { margin-bottom: 24px; }
.tesoreria-kpis-fechas { display: flex; gap: 10px; flex-wrap: wrap; }
.tesoreria-kpis-fechas .tesoreria-kpi { flex: 1 1 0; min-width: 130px; }
.tesoreria-kpis-fechas .tesoreria-kpi-valor { font-size: 15px; }
.tesoreria-kpis-columna { display: flex; flex-direction: column; gap: 10px; flex: 1 1 320px; max-width: 340px; }
.tesoreria-kpis-columna .tesoreria-kpi { width: 100%; }
.tesoreria-kpi {
  flex: 1; min-width: 220px; display: flex; align-items: center; gap: 12px; min-width: 0;
  border-radius: 12px; padding: 14px 16px; border: 1px solid var(--tes-border, var(--border));
}
.tesoreria-kpi > div:last-child { min-width: 0; flex: 1; }
.tesoreria-kpi-icon {
  width: 38px; height: 38px; border-radius: 10px; display: flex; align-items: center;
  justify-content: center; flex-shrink: 0;
}
.tesoreria-kpi-label { font-size: 12px; text-transform: uppercase; letter-spacing: 0.04em; color: var(--text); }
.tesoreria-kpi-valor {
  font-size: 19px; font-weight: 700; font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; margin-top: 2px;
  text-shadow: 0 0 8px currentColor; overflow-wrap: anywhere; word-break: break-word;
}
.tesoreria-kpi--azul { background: color-mix(in srgb, var(--accent-blue) 12%, var(--tes-panel, var(--panel))); }
.tesoreria-kpi--azul .tesoreria-kpi-icon { background: color-mix(in srgb, var(--accent-blue) 25%, transparent); color: var(--text); box-shadow: 0 0 14px color-mix(in srgb, var(--accent-blue) 55%, transparent); }
.tesoreria-kpi--verde { background: color-mix(in srgb, var(--green) 12%, var(--tes-panel, var(--panel))); }
.tesoreria-kpi--verde .tesoreria-kpi-icon { background: color-mix(in srgb, var(--green) 25%, transparent); color: var(--text); box-shadow: 0 0 14px color-mix(in srgb, var(--green) 55%, transparent); }
.tesoreria-kpi--rojo { background: color-mix(in srgb, var(--red) 12%, var(--tes-panel, var(--panel))); }
.tesoreria-kpi--rojo .tesoreria-kpi-icon { background: color-mix(in srgb, var(--red) 25%, transparent); color: var(--red); box-shadow: 0 0 14px color-mix(in srgb, var(--red) 55%, transparent); }

.tesoreria-toolbar { display: flex; justify-content: space-between; flex-wrap: wrap; gap: 8px; margin-bottom: 14px; }
.tesoreria-toolbar-group { display: flex; gap: 6px; flex-wrap: wrap; }
.tesoreria-tema-btn {
  display: inline-flex; align-items: center; gap: 5px; background: var(--panel-2);
  border: 1px solid var(--border); border-radius: 8px;
  color: var(--text); padding: 5px 10px; font-size: 12px; cursor: pointer;
}
.tesoreria-tema-btn.active { color: var(--text); border-color: var(--accent-blue); background: var(--tes-panel-2, var(--panel-2)); }

.tesoreria-card {
  background: var(--tes-panel, var(--panel)); border: 1px solid var(--tes-border, var(--border)); border-radius: 12px;
  padding: 16px; margin-bottom: 20px; border-top: 3px solid var(--tes-border, var(--border));
}
.tesoreria-card--azul { border-top-color: var(--accent-blue); box-shadow: 0 -2px 18px -3px color-mix(in srgb, var(--accent-blue) 70%, transparent); }
.tesoreria-card--ambar { border-top-color: var(--accent-amber); box-shadow: 0 -2px 18px -3px color-mix(in srgb, var(--accent-amber) 70%, transparent); }
.tesoreria-card--verde { border-top-color: var(--green); box-shadow: 0 -2px 18px -3px color-mix(in srgb, var(--green) 70%, transparent); }
.tesoreria-card--rojo { border-top-color: var(--red); box-shadow: 0 -2px 18px -3px color-mix(in srgb, var(--red) 70%, transparent); }
.tesoreria-card-icono--verde { background: color-mix(in srgb, var(--green) 20%, transparent); color: var(--text); box-shadow: 0 0 12px color-mix(in srgb, var(--green) 55%, transparent); }
.tesoreria-card-icono--rojo { background: color-mix(in srgb, var(--red) 20%, transparent); color: var(--red); box-shadow: 0 0 12px color-mix(in srgb, var(--red) 55%, transparent); }
.tesoreria-card-head { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; flex-wrap: wrap; gap: 8px; }
.tesoreria-card-titulo { display: flex; align-items: center; gap: 10px; }
.tesoreria-card-titulo h2 {
  margin: 0; font-size: 17px; font-weight: 700; padding: 5px 12px; border-radius: 8px;
}
.tesoreria-card--azul .tesoreria-card-titulo h2 {
  color: var(--text); background: color-mix(in srgb, var(--accent-blue) 16%, transparent);
}
.tesoreria-card--ambar .tesoreria-card-titulo h2 {
  color: var(--text); background: color-mix(in srgb, var(--accent-amber) 16%, transparent);
}
.tesoreria-card-icono {
  width: 30px; height: 30px; border-radius: 8px; display: flex; align-items: center; justify-content: center; flex-shrink: 0;
}
.tesoreria-card-icono--azul { background: color-mix(in srgb, var(--accent-blue) 20%, transparent); color: var(--text); box-shadow: 0 0 12px color-mix(in srgb, var(--accent-blue) 55%, transparent); }
.tesoreria-card-icono--ambar { background: color-mix(in srgb, var(--accent-amber) 20%, transparent); color: var(--text); box-shadow: 0 0 12px color-mix(in srgb, var(--accent-amber) 55%, transparent); }
.tesoreria-card--caja { max-width: 480px; }


.tesoreria-card--indicadores { max-width: 340px; }
.tesoreria-indicador-bloque { margin-bottom: 16px; }
.tesoreria-indicador-bloque:last-child { margin-bottom: 0; }
.tesoreria-indicador-titulo {
  font-size: 12px; text-transform: uppercase; letter-spacing: 0.03em; color: var(--text);
  margin-bottom: 6px; font-weight: 600;
}
.tesoreria-indicador-valor {
  display: flex; align-items: center; gap: 6px; font-size: 18px; font-weight: 700;
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; text-shadow: 0 0 8px currentColor;
}
.tesoreria-indicador-vacio { font-size: 12px; color: var(--text); margin: 0; }
.tesoreria-semaforo { display: flex; flex-direction: column; gap: 6px; }
.tesoreria-semaforo-item { display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--text); }
.tesoreria-semaforo-dot { width: 10px; height: 10px; border-radius: 50%; flex-shrink: 0; }
.tesoreria-semaforo-dot.verde { background: var(--green); box-shadow: 0 0 8px color-mix(in srgb, var(--green) 70%, transparent); }
.tesoreria-semaforo-dot.rojo { background: var(--red); box-shadow: 0 0 8px color-mix(in srgb, var(--red) 70%, transparent); }
.tesoreria-monto-columna { font-size: 12px; font-weight: 700; font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; text-shadow: 0 0 6px currentColor; }
.tesoreria-fecha-columna { font-size: 12px; color: var(--text); }
.tesoreria-ranking { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 7px; }
.tesoreria-ranking li { display: flex; justify-content: space-between; gap: 10px; font-size: 12px; }
.tesoreria-ranking-label { color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

.tesoreria-buscador {
  display: flex; align-items: center; gap: 6px; background: var(--tes-panel-2, var(--panel-2));
  border: 1px solid var(--tes-border, var(--border)); border-radius: 8px; padding: 5px 9px;
  margin-bottom: 10px; color: var(--text); max-width: 260px;
}
.tesoreria-buscador input {
  background: transparent; border: none; color: var(--text); font-size: 13px; font-family: inherit;
  width: 100%; outline: none;
}

.tesoreria-tabla { width: 100%; border-collapse: collapse; font-size: 12px; }
.densidad-ultra .tesoreria-tabla { font-size: 12px; }
.densidad-ultra .tesoreria-tabla th, .densidad-ultra .tesoreria-tabla td { padding: 2px 4px; }
.densidad-ultra .tesoreria-tabla th { font-size: 13px; }
.densidad-ultra .tesoreria-tabla input { padding: 1px 3px; font-size: 13px; }
.densidad-compacta .tesoreria-tabla th, .densidad-compacta .tesoreria-tabla td { padding: 5px 7px; }
.densidad-comoda .tesoreria-tabla th, .densidad-comoda .tesoreria-tabla td { padding: 10px 12px; font-size: 13px; }
.tesoreria-tabla th, .tesoreria-tabla td { border: 1px solid var(--tes-border, var(--border)); }
.tesoreria-tabla th {
  color: var(--text); font-weight: 600; font-size: 13px; text-transform: uppercase;
  letter-spacing: 0.02em; background: var(--tes-head, var(--panel-2));
}
.tesoreria-card--azul .tesoreria-tabla th { background: color-mix(in srgb, var(--accent-blue) 12%, var(--tes-head, var(--panel-2))); }
.tesoreria-card--ambar .tesoreria-tabla th { background: color-mix(in srgb, var(--accent-amber) 12%, var(--tes-head, var(--panel-2))); }
.tesoreria-card--azul .tesoreria-tabla tbody td { background: color-mix(in srgb, var(--accent-blue) 5%, var(--tes-panel-2, var(--panel-2))); }
.tesoreria-card--ambar .tesoreria-tabla tbody td { background: color-mix(in srgb, var(--accent-amber) 5%, var(--tes-panel-2, var(--panel-2))); }
.tesoreria-card--azul .tesoreria-tabla tbody td:first-child {
  border-left: 2px solid var(--accent-blue);
  box-shadow: inset 4px 0 10px -4px color-mix(in srgb, var(--accent-blue) 70%, transparent);
}
.tesoreria-card--ambar .tesoreria-tabla tbody td:first-child {
  border-left: 2px solid var(--accent-amber);
  box-shadow: inset 4px 0 10px -4px color-mix(in srgb, var(--accent-amber) 70%, transparent);
}
.tesoreria-tabla tbody tr:nth-child(even) td { background: color-mix(in srgb, var(--tes-panel-2, var(--panel-2)) 35%, transparent); }
.tesoreria-tabla tbody tr:hover td { background: color-mix(in srgb, var(--accent-blue) 8%, var(--tes-panel-2, var(--panel-2))); }
.tesoreria-fila-total td { background: var(--tes-head, var(--panel-2)); border-top: 2px solid var(--tes-border, var(--border)); }
.tesoreria-tabla--posicion .tesoreria-col-fija {
  position: sticky; left: 0; z-index: 1;
  background: color-mix(in srgb, var(--accent-amber) 5%, var(--tes-panel-2, var(--panel-2)));
  border-left: 2px solid var(--accent-amber);
  box-shadow: inset 4px 0 10px -4px color-mix(in srgb, var(--accent-amber) 70%, transparent), 2px 0 0 var(--tes-border, var(--border));
}
.tesoreria-tabla--posicion tbody tr:hover .tesoreria-col-fija { background: color-mix(in srgb, var(--accent-blue) 8%, var(--tes-panel-2, var(--panel-2))); }
.tesoreria-tabla--posicion .tesoreria-fila-total .tesoreria-col-fija { background: var(--tes-head, var(--panel-2)); }
.tesoreria-tabla input {
  background: var(--tes-panel-2, var(--panel-2)); border: 1px solid var(--tes-border, var(--border)); border-radius: 6px;
  color: var(--text); padding: 3px 5px; font-size: 13px; font-family: inherit; transition: border-color 0.1s, box-shadow 0.1s;
}
.tesoreria-tabla input:focus { border-color: var(--accent-blue); outline: none; box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent-blue) 25%, transparent); }
.tesoreria-tabla td:focus-within { background: color-mix(in srgb, var(--accent-blue) 12%, transparent); }
.tesoreria-panel input[type="date"] {
  color-scheme: dark; background: var(--tes-panel-2, var(--panel-2)); border: 1px solid var(--tes-border, var(--border));
  border-radius: 6px; color: var(--text); padding: 3px 5px; font-size: 13px; font-family: inherit;
}
.tesoreria-btn-add {
  display: inline-flex; align-items: center; gap: 6px; background: var(--tes-panel-2, var(--panel-2));
  border: 1px solid var(--tes-border, var(--border)); border-radius: 8px; color: var(--text);
  padding: 6px 10px; font-size: 13px; cursor: pointer;
}
.tesoreria-btn-add:hover { border-color: var(--accent-blue); }
.tesoreria-btn-add--peligro { color: var(--red); }
.tesoreria-btn-add--peligro:hover { border-color: var(--red); }
.tesoreria-btn-icon {
  background: transparent; border: none; color: var(--text); cursor: pointer;
  display: inline-flex; align-items: center; padding: 4px;
}
.tesoreria-btn-icon:hover { color: var(--red); }
.tesoreria-save-status { margin-top: 10px; font-size: 12px; color: var(--text); }
.tesoreria-tabla-scroll { overflow-x: auto; max-height: 560px; overflow-y: auto; }
.tesoreria-tabla thead th { position: sticky; top: 0; background: var(--tes-panel-2, var(--panel-2)); z-index: 2; border-right: 1px solid var(--tes-border, var(--border)); }
.tesoreria-tabla thead th:last-child { border-right: none; }
.tesoreria-tabla tbody td { border-right: 1px solid var(--tes-border, var(--border)); }
.tesoreria-tabla tbody td:last-child { border-right: none; }
.tesoreria-tabla tbody tr:focus-within td { box-shadow: inset 0 1px 0 var(--accent-amber), inset 0 -1px 0 var(--accent-amber); }

/* ---- Historial de Tesorería (modal de solo lectura por fecha) ---- */
.tes-hist-modal { max-width: 720px; width: calc(92vw / var(--tcg-z, 1)); }
.tes-hist-buscador { display: flex; gap: 8px; align-items: center; margin-bottom: 14px; }
.tes-hist-buscador input[type="date"] {
  background: var(--panel-2); border: 1px solid var(--border); color: var(--text);
  border-radius: 8px; padding: 7px 10px; font-size: 13px;
}
.tes-hist-contenido { display: flex; flex-direction: column; gap: 22px; max-height: calc(60vh / var(--tcg-z, 1)); overflow-y: auto; }
.tes-hist-bloque h4 { margin: 0 0 8px; font-size: 12.5px; color: var(--text); font-weight: 700; text-transform: uppercase; letter-spacing: 0.3px; }

.dealer-switch { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 14px; }
.dealer-btn {
  display: flex; align-items: center; gap: 7px; justify-content: center;
  background: var(--panel); border: 2px solid var(--border); color: var(--text);
  padding: 9px 14px; border-radius: 10px; font-size: 12.5px; font-weight: 600; cursor: pointer;
  flex: 1 1 0; min-width: 140px; transition: all 0.12s ease;
}
.dealer-btn .brand-tag {
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 12px; color: var(--text);
  border-left: 1px solid var(--border); padding-left: 7px;
}
.dealer-btn.active {
  background: var(--panel-2); border-color: var(--accent-blue); color: var(--text);
  box-shadow: 0 0 0 3px rgba(79,142,247,0.18);
}
.dealer-btn.active .brand-tag { color: var(--text); }

.tabs { display: flex; gap: 6px; margin-bottom: 12px; flex-wrap: wrap; }
.tab {
  display: flex; align-items: center; gap: 6px; justify-content: center;
  background: var(--panel); border: 2px solid var(--border); color: var(--text);
  padding: 9px 14px; font-size: 12px; font-weight: 600; cursor: pointer;
  border-radius: 8px; flex: 1 1 0; min-width: 150px; text-align: center;
  transition: all 0.12s ease;
}
.tab.active {
  color: #000; background: var(--accent-amber); border-color: var(--accent-amber);
  font-weight: 700; box-shadow: 0 0 0 3px rgba(232,163,61,0.18);
}

.save-indicator {
  display: flex; align-items: center; gap: 5px; justify-content: flex-end;
  font-size: 12px; color: var(--text); height: 16px; margin-bottom: 6px;
}

.tcard-period {
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 12px; font-weight: 600;
  color: var(--text); margin-left: 8px; letter-spacing: 0;
  text-transform: none; vertical-align: middle;
}

tr.current-month td { background: rgba(232,163,61,0.10); }
tr.current-month td.mescol { color: var(--text); font-weight: 700; }
.current-dot {
  display: inline-block; width: 6px; height: 6px; border-radius: 50%;
  background: var(--accent-amber); margin-left: 5px; vertical-align: middle;
}

.tables-grid { display: grid; grid-template-columns: 1fr; gap: 14px; }
@media (min-width: 900px) {
  .tables-grid { grid-template-columns: 1fr 1fr; }
}

/* --- Tablero Comercial: todo junto, tablas bien compactas + indicador --- */
.tcg-seccion-comercial { margin-bottom: 30px; }
.tcg-seccion-comercial-header {
  display: flex; align-items: center; gap: 8px; font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 15px;
  font-weight: 700; color: var(--text); margin-bottom: 12px; padding-bottom: 8px; border-bottom: 1px solid var(--border);
}
.tcg-grid-tablas-compactas { display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px; }
@media (min-width: 700px) { .tcg-grid-tablas-compactas { grid-template-columns: repeat(3, 1fr); } }
@media (min-width: 1000px) { .tcg-grid-tablas-compactas { grid-template-columns: repeat(3, 1fr); } }
@media (min-width: 1500px) { .tcg-grid-tablas-compactas { grid-template-columns: repeat(4, 1fr); } }
@media (min-width: 1850px) { .tcg-grid-tablas-compactas { grid-template-columns: repeat(5, 1fr); } }

.tcg-mini-bloque { display: flex; flex-direction: column; min-width: 0; }
.tcard-compacto-wrap { min-width: 0; }
.tcard-compacto-wrap .tcard { padding: 7px; border-radius: 8px 8px 0 0; border-bottom: none; }
.tcard-compacto-wrap .tcard-title { font-size: 12px; margin-bottom: 5px; padding-bottom: 5px; line-height: 1.25; height: auto; overflow: visible; }
.tcard-compacto-wrap .tcard-period { display: none; }
.tcard-compacto-wrap table { min-width: 0; width: 100%; }
.tcard-compacto-wrap thead th { font-size: 13px; padding: 3px 3px; }
.tcard-compacto-wrap tbody td { font-size: 13px; padding: 3px 3px; }
.tcard-compacto-wrap td.mescol { font-size: 13px; }
.tcard-compacto-wrap td input { width: 42px; font-size: 13px; padding: 2px 3px; }
.tcard-compacto-wrap .tcard-scroll { overflow-x: visible; }

.tcg-mini-indicador {
  background: var(--panel-2); border: 1px solid var(--border); border-top: none; border-radius: 0 0 8px 8px;
  padding: 6px 6px; text-align: center;
}
.tcg-mini-ind-valor { font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 15px; font-weight: 700; color: var(--text); }
.tcg-mini-ind-fila { display: flex; justify-content: center; gap: 8px; font-size: 12px; font-weight: 700; margin-top: 2px; }

.tcard {
  background: var(--panel); border: 1px solid var(--border); border-radius: 12px;
  padding: 12px; overflow: hidden;
}
.tcard-title {
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 13px; font-weight: 600;
  letter-spacing: 0.02em; color: var(--text); margin-bottom: 8px;
  text-transform: uppercase; text-align: center;
  border-bottom: 1px solid var(--border); padding-bottom: 8px;
}
.tcard-scroll { overflow-x: auto; }

table { border-collapse: collapse; width: 100%; min-width: 320px; }
thead th {
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 13px; text-transform: uppercase;
  letter-spacing: 0.04em; color: var(--text); text-align: center; padding: 5px 6px;
  border-bottom: 1px solid var(--border); white-space: nowrap;
}
thead th.mescol, td.mescol { text-align: left; }
tbody td {
  padding: 4px 5px; text-align: center; font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif;
  font-size: 13px; border-bottom: 1px solid rgba(255,255,255,0.04); white-space: nowrap;
}
td.mescol { color: var(--text); font-size: 13px; }
tr.totales td { border-top: 1px solid var(--border); font-weight: 700; color: var(--text); }
tr.totales td.mescol { color: var(--text); }
tr:nth-child(even) td { background: rgba(255,255,255,0.015); }

td input {
  width: 56px; background: var(--panel-2); border: 1px solid var(--border); color: var(--text);
  border-radius: 6px; padding: 3px 4px; font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif;
  font-size: 13px; text-align: center;
}
td input:focus { outline: none; border-color: var(--accent-blue); }
td.calc { color: var(--text); }
td.calc.neg { color: var(--red); }
td.calc.pos { color: var(--text); }

.settings-btn {
  background: var(--panel); border: 1px solid var(--border); color: var(--text);
  border-radius: 8px; padding: 7px 9px; cursor: pointer; display: flex; align-items: center;
}
.settings-btn:hover { color: var(--text); }

.import-status {
  background: var(--panel-2); border: 1px solid var(--accent-amber); color: var(--text);
  border-radius: 8px; padding: 8px 10px; font-size: 12px; margin-bottom: 10px; text-align: center;
}

.share-text { font-size: 12.5px; color: var(--text); line-height: 1.5; margin: 0; }
.share-steps { font-size: 12.5px; color: var(--text); line-height: 1.6; margin: 6px 0; padding-left: 18px; }
.share-steps li { margin-bottom: 4px; }

.settings-panel {
  background: var(--panel); border: 1px solid var(--border); border-radius: 12px;
  padding: 14px; margin-bottom: 14px;
}
.settings-row {
  display: flex; flex-direction: column; gap: 8px; margin-bottom: 14px;
}
.settings-row:last-child { margin-bottom: 0; }
.settings-label {
  font-size: 12px; text-transform: uppercase; letter-spacing: 0.04em; color: var(--text);
}
.settings-options { display: flex; gap: 6px; flex-wrap: wrap; }
.settings-option {
  background: var(--panel-2); border: 1px solid var(--border); color: var(--text);
  border-radius: 8px; padding: 6px 11px; font-size: 12px; cursor: pointer;
}
.settings-option.active {
  background: var(--accent-amber); border-color: var(--accent-amber); color: #000; font-weight: 700;
}
.theme-swatch {
  display: inline-block; width: 10px; height: 10px; border-radius: 50%; margin-right: 6px;
}
.order-row {
  display: flex; align-items: center; justify-content: space-between; gap: 8px;
  background: var(--panel-2); border: 1px solid var(--border); border-radius: 8px;
  padding: 6px 10px; font-size: 12px;
}
.order-row-btns { display: flex; gap: 4px; }
.order-row-btns button {
  background: var(--panel); border: 1px solid var(--border); color: var(--text);
  border-radius: 6px; padding: 2px 5px; cursor: pointer; display: flex;
}

.tcard.custom { border-style: dashed; }
.tcard-title-row { display: flex; align-items: center; justify-content: center; gap: 6px; position: relative; }
.tcard-remove {
  position: absolute; right: 0; background: transparent; border: none; color: var(--text);
  cursor: pointer; font-size: 14px; line-height: 1; padding: 2px 4px;
}
.tcard-remove:hover { color: var(--red); }

.add-table-card {
  background: var(--panel); border: 1px dashed var(--border); border-radius: 12px;
  padding: 14px; display: flex; flex-direction: column; gap: 8px; align-items: stretch;
  justify-content: center; min-height: 90px;
}
.add-table-card input {
  background: var(--panel-2); border: 1px solid var(--border); color: var(--text);
  border-radius: 8px; padding: 7px 9px; font-size: 13px;
}
.add-table-card button {
  background: var(--accent-amber); color: #000; border: none; border-radius: 8px;
  padding: 7px; font-size: 12.5px; font-weight: 700; cursor: pointer;
}

/* ============================================================
   Buscador de Precios — un buscador de precios por marca (Toyota,
   Renault, Peugeot, y las que se sumen), con envío por WhatsApp y
   actualización subiendo el PDF de lista de precios del mes.
   Usa variables propias (--bp-*) en vez de las globales del tema, para
   poder alternar modo claro/oscuro DENTRO de esta pantalla sin afectar
   el resto de TCG (que siempre queda oscuro).
   ============================================================ */
.bp-cargando { display: flex; align-items: center; gap: 10px; padding: 40px; color: var(--text); font-size: 14px; }
.bp-panel {
  --bp-bg: var(--panel); --bp-bg2: var(--panel-2); --bp-text: var(--text); --bp-text-muted: var(--text-muted); --bp-border: var(--border);
  background: var(--bp-bg); border: 1px solid var(--bp-border); border-radius: 12px; padding: 20px 22px;
}
.bp-panel--claro {
  --bp-bg: #ffffff; --bp-bg2: #f4f3ef; --bp-text: #000000; --bp-text-muted: #000000; --bp-border: #e0ded6;
}
.bp-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; flex-wrap: wrap; margin-bottom: 10px; }
.bp-header h1 { margin: 0; font-size: 19px; font-weight: 700; color: var(--bp-text); }
.bp-header-acciones { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }
.bp-marca { color: var(--bp-color, var(--accent-amber)); }
.bp-sub { margin: 2px 0 0; font-size: 12.5px; color: var(--bp-text); }
.bp-btn-tema {
  width: 36px; height: 36px; border-radius: 8px; border: 1px solid var(--bp-border); background: var(--bp-bg2);
  font-size: 16px; cursor: pointer; display: flex; align-items: center; justify-content: center;
}
.bp-btn-actualizar {
  display: flex; align-items: center; gap: 6px; background: var(--bp-color, var(--accent-amber)); color: #fff;
  border: none; border-radius: 8px; padding: 9px 14px; font-size: 13px; font-weight: 700; cursor: pointer; flex-shrink: 0;
}
.bp-btn-actualizar:hover { filter: brightness(1.08); }
.bp-meta-banner { font-size: 12px; color: var(--bp-text); background: var(--bp-bg2); border-radius: 8px; padding: 8px 12px; margin-bottom: 14px; }
.bp-meta-banner b { color: var(--bp-text); }
.bp-buscador-wrap { position: relative; margin-bottom: 12px; }
.bp-buscador-icono { position: absolute; left: 12px; top: 50%; transform: translateY(-50%); color: var(--bp-text); }
.bp-buscador-input {
  width: 100%; box-sizing: border-box; background: var(--bp-bg2); border: 1px solid var(--bp-border); border-radius: 10px;
  color: var(--bp-text); font-size: 14px; padding: 12px 36px; font-family: inherit;
}
.bp-buscador-input:focus { outline: none; border-color: var(--bp-color, var(--accent-amber)); }
.bp-buscador-limpiar { position: absolute; right: 8px; top: 50%; transform: translateY(-50%); background: none; border: none; color: var(--bp-text); cursor: pointer; padding: 4px; }
.bp-chips { display: flex; gap: 8px; overflow-x: auto; padding-bottom: 4px; margin-bottom: 10px; -webkit-overflow-scrolling: touch; scrollbar-width: none; }
.bp-chips::-webkit-scrollbar { display: none; }
.bp-chip {
  flex: 0 0 auto; font-size: 12px; font-weight: 600; color: var(--bp-text); background: var(--bp-bg2);
  border: 1px solid var(--bp-border); padding: 6px 13px; border-radius: 20px; cursor: pointer; white-space: nowrap;
}
.bp-chip--activo { background: var(--bp-color, var(--accent-amber)); color: #fff; border-color: transparent; }
.bp-contador { font-size: 12px; color: var(--bp-text); margin-bottom: 10px; }
.bp-vacio { text-align: center; color: var(--bp-text); padding: 30px 16px; font-size: 13px; }
.bp-grilla { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 12px; }
.bp-card { background: var(--bp-bg2); border: 1px solid var(--bp-border); border-radius: 10px; padding: 14px 16px; }
.bp-card-top { display: flex; align-items: flex-start; justify-content: space-between; gap: 8px; margin-bottom: 8px; }
.bp-card-cat { font-size: 12px; font-weight: 700; text-transform: uppercase; color: var(--bp-color, var(--accent-amber)); letter-spacing: 0.3px; }
.bp-card-nombre { font-size: 14px; font-weight: 700; color: var(--bp-text); margin-top: 2px; }
.bp-card-detalle { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 4px; font-size: 12px; color: var(--bp-text); }
.bp-card-interno { font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; }
.bp-card-precios { display: flex; flex-direction: column; gap: 3px; margin-bottom: 12px; }
.bp-precio-fila { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; }
.bp-precio-label { font-size: 12px; color: var(--bp-text); }
.bp-precio-monto { font-size: 16px; font-weight: 700; color: var(--bp-text); font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; }
.bp-card-acciones { display: flex; gap: 8px; flex-wrap: wrap; }
.bp-btn-wsp, .bp-btn-copy {
  flex: 1; min-width: 120px; font-size: 12px; font-weight: 700; padding: 8px 10px; border-radius: 8px; cursor: pointer; border: none;
}
.bp-btn-wsp { background: #25D366; color: #000; }
.bp-btn-wsp:hover { filter: brightness(0.95); }
.bp-btn-copy { background: var(--bp-bg); border: 1px solid var(--bp-border); color: var(--bp-text); }
.bp-btn-copy:hover { border-color: var(--bp-color, var(--accent-amber)); color: var(--bp-color, var(--accent-amber)); }
.bp-modal-chico {
  background: var(--bp-bg); border: 1px solid var(--bp-border); border-radius: 12px; padding: 18px 20px;
  max-width: 480px; width: 100%; box-shadow: 0 12px 40px rgba(0,0,0,0.5); color: var(--bp-text);
}
.bp-modal-texto { font-size: 12.5px; color: var(--bp-text); margin: 8px 0 14px; }
.bp-modal-botones { display: flex; gap: 8px; flex-wrap: wrap; }
.bp-modal-botones--columna { flex-direction: column; }
.bp-modal-botones .asg-btn, .bp-modal-botones .asg-btn--nueva { flex: 1; justify-content: center; }
.bp-modal-cancelar { width: 100%; margin-top: 10px; background: none; border: none; color: var(--bp-text); font-size: 12px; cursor: pointer; padding: 6px; }
.bp-modal-actualizar { max-width: 720px; }
.bp-dropzone {
  border: 2px dashed var(--bp-border); border-radius: 10px; padding: 24px 16px; text-align: center; color: var(--bp-text);
  cursor: pointer; display: flex; flex-direction: column; align-items: center; gap: 8px; font-size: 13px; margin: 12px 0;
}
.bp-dropzone:hover, .bp-dropzone--activo { border-color: var(--bp-color, var(--accent-amber)); color: var(--bp-text); }
.bp-estado { font-size: 12.5px; border-radius: 8px; padding: 9px 12px; margin-bottom: 10px; }
.bp-estado--info { background: color-mix(in srgb, var(--accent-blue) 14%, transparent); color: var(--text); }
.bp-estado--ok { background: color-mix(in srgb, var(--green) 14%, transparent); color: var(--text); }
.bp-estado--warn { background: color-mix(in srgb, var(--accent-amber) 14%, transparent); color: var(--text); }
.bp-preview-scroll { max-height: 260px; overflow: auto; border: 1px solid var(--bp-border); border-radius: 8px; margin-bottom: 12px; }
.bp-preview-input {
  width: 100%; box-sizing: border-box; background: var(--bp-bg2); border: 1px solid transparent; border-radius: 6px;
  color: var(--bp-text); font-size: 12px; padding: 4px 6px; font-family: inherit;
}
.bp-preview-input:focus { outline: none; border-color: var(--accent-amber); }
.bp-modal-pie { border-top: 1px solid var(--bp-border); padding-top: 12px; margin-top: 4px; }


/* ================= AJUSTES DE ALTURA Y LECTURA =================
   Regla general del proyecto: donde hay tabla, el encabezado ocupa lo
   mínimo posible y la tabla arranca lo más arriba que se pueda.
   ================================================================ */

/* Recorrido mensual en una sola línea: el título, los botones, el
   checkbox y la ayuda van todos en el mismo renglón, y la línea de
   tiempo pasa a tener el punto y el mes uno al lado del otro en vez de
   uno arriba del otro (antes ocupaba el doble de alto). */
.rec-wrap { margin-bottom: 8px; }
.rec-titulo { font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.6px; color: var(--text); white-space: nowrap; }
.rec-controlrow { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 4px; }
.rec-seg { padding: 2px; gap: 3px; }
.rec-seg button { padding: 4px 9px !important; font-size: 12px !important; }
.rec-checklabel { font-size: 12px; gap: 6px; }
.rec-hint { font-size: 12px; margin: 0; opacity: 1; }
.rec-route { padding: 2px 2px; }
.rec-route-stop { flex-direction: row !important; align-items: center; gap: 5px !important; padding: 3px 8px !important; }
.rec-route-dot { width: 7px !important; height: 7px !important; }
.rec-route-label { font-size: 12px !important; }

/* Títulos de columna siempre centrados, en todas las tablas. */
.sc-table thead th, .asg-tabla thead th, .rob-tabla thead th,
.pat-tabla thead th, .rv-tabla thead th, .sd-tabla thead th { text-align: center !important; }

/* El encabezado deja de recortar: el texto se recorta dentro de su
   propia etiqueta y así la manija de arrastre queda siempre alcanzable. */
.sc-table thead th { overflow: visible; padding: 6px 8px; }
.sc-th-label { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* Manija de ancho de columna: antes eran 8px pegados al borde y costaba
   agarrarla. Ahora es una franja de 14px montada sobre la línea que
   separa las dos columnas, que es donde uno la busca. */
.asg-resize-col { width: 14px !important; right: -7px !important; z-index: 6; border-right: none !important; }
.asg-resize-col::after { content: ""; position: absolute; left: 6px; top: 3px; bottom: 3px; width: 2px; background: transparent; border-radius: 2px; }
.asg-resize-col:hover::after, .asg-resize-col:active::after { background: var(--accent-amber); }

/* Fechas sin cargar: no se muestra el "dd/mm/aaaa". Reaparece al pasar
   el mouse o al entrar en la celda, para poder escribir. */
.sc-fecha-vacia::-webkit-datetime-edit { color: transparent; }
.sc-fecha-vacia:hover::-webkit-datetime-edit, .sc-fecha-vacia:focus::-webkit-datetime-edit { color: var(--text); }
.sc-fecha-vacia::-webkit-calendar-picker-indicator { opacity: 0.35; }
.sc-fecha-vacia:hover::-webkit-calendar-picker-indicator { opacity: 1; }

/* La barra de scroll horizontal queda siempre a la vista: la tabla se
   acota al alto de la pantalla, así la barra aparece abajo de la tabla
   y no hay que bajar la página para encontrarla. Además se la deja
   gruesa y visible en vez de la barra fina que se autooculta. */
.sc-table-scroll { max-height: calc(calc(100dvh / var(--tcg-z, 1)) - 230px); min-height: 220px; }
.sc-table-scroll::-webkit-scrollbar { width: 12px; height: 14px; }
.sc-table-scroll::-webkit-scrollbar-track { background: var(--panel-2); border-radius: 8px; }
.sc-table-scroll::-webkit-scrollbar-thumb { background: color-mix(in srgb, var(--text-muted) 70%, transparent); border-radius: 8px; border: 3px solid var(--panel-2); }
.sc-table-scroll::-webkit-scrollbar-thumb:hover { background: var(--accent-amber); }
.sc-table-scroll { scrollbar-width: auto; scrollbar-color: color-mix(in srgb, var(--text-muted) 70%, transparent) var(--panel-2); }

/* Última columna (borrar fila / alto de fila): antes eran 40px para dos
   controles y se encimaban; ahora entran los dos, separados. */
.sc-acciones-col { width: 58px; }
.sc-acciones { display: flex; align-items: center; justify-content: center; gap: 6px; }

/* Se recorta el aire del encabezado de cada pestaña. */
.sc-section-title { margin: 2px 0 6px !important; font-size: 12px !important; }
.sc-toolbar { margin-bottom: 6px !important; }
.sc-panel > .sc-titulo-tablero { margin-bottom: 6px !important; }
.sc-titulo { font-size: 20px !important; margin: 0 0 6px !important; }
.sc-panel > .portada-logo { margin-top: 0 !important; gap: 2px !important; }
.sc-pestanas-scroll { margin-bottom: 6px !important; padding-bottom: 3px !important; }
.sc-tab-btn { padding: 6px 11px !important; min-width: 96px !important; font-size: 12px !important; }

/* --------- Correcciones sobre las tablas (van al final para ganar) --------- */
/* La manija de ancho queda ENTERA dentro de su propia columna. Si sobresale
   hacia la derecha, el encabezado vecino (que es sticky y crea su propio
   apilado) la tapa y el arrastre no engancha. */
.asg-resize-col { width: 16px !important; right: 0 !important; }
.asg-resize-col::after { left: 7px !important; }

/* Ninguna columna con dato adentro baja de 72px: con menos, el número queda
   cortado y no se lee (pasaba en la columna "N°", declarada en 44px). */

/* Columna de acciones: se entiende qué es cada cosa. */
.sc-acciones-col { width: 66px; }
.sc-acciones { display: flex; align-items: center; justify-content: center; gap: 8px; }
.sc-acciones .sc-btn-icon { font-size: 15px; line-height: 1; padding: 2px 5px; border-radius: 6px; border: 1px solid transparent; }
.sc-acciones .sc-btn-icon:hover { color: var(--red); border-color: var(--red); background: color-mix(in srgb, var(--red) 12%, transparent); }
.sc-acciones .asg-resize-fila { width: 16px; height: 12px; border-bottom: 3px double var(--text-muted); opacity: 1; }
.sc-acciones .asg-resize-fila:hover { opacity: 1; border-bottom-color: var(--accent-amber); }
.sc-table thead th.sc-acciones-col { font-size: 13px; letter-spacing: 0; }

/* La tabla de carga diaria tiene 3 columnas y sobraba mucho espacio a la
   derecha, así que los indicadores del mes van al costado en vez de abajo.
   En pantalla chica se apilan. */
.rob-root .rob-fila-dias { display: grid; grid-template-columns: minmax(0, 380px) minmax(0, 1fr); gap: 14px; align-items: stretch; }
.rob-root .rob-fila-dias > .rob-bloque { display: flex; flex-direction: column; }
.rob-root .rob-fila-dias > .rob-bloque > .rob-tabla-scroll { flex: 1; }
.rob-root .rob-col-der { height: 100%; }
/* El bloque de indicadores absorbe el espacio sobrante para que la columna
   derecha termine a la misma altura que la tabla de carga diaria. */
.rob-root .rob-col-der > .rob-bloque:nth-child(2) { flex: 1; display: flex; flex-direction: column; }
.rob-root .rob-col-der > .rob-bloque:nth-child(2) > .rob-inds { flex: 1; align-content: start; }
.rob-root .rob-col-der { display: flex; flex-direction: column; gap: 14px; min-width: 0; }
.rob-root .rob-col-der > .rob-bloque, .rob-root .rob-col-der > .rob-grid-bloques { margin-bottom: 0; }
.rob-root .rob-col-der .rob-grid-bloques { grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); }
.rob-root .rob-fila-dias > .rob-bloque { margin-bottom: 0; }
.rob-root .rob-fila-dias .rob-inds { grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); }


/* --------- Tabla de Seguimiento de Cartera: se copia la receta de la tabla
   de Detalle de Ventas (Registro de Ventas), que es la que funciona bien.
   Tres diferencias que había y rompían las cosas:
   1) width:auto + min-width:100% -> con table-layout:fixed el navegador
      reparte el ancho a su criterio y arrastrar una columna no se notaba.
      La de Detalle de Ventas usa width:100% y ahí sí manda el ancho puesto.
   2) La primera columna ("Cant.") era sticky. position:sticky sobre un <td>
      dentro de una tabla con border-collapse:collapse no funciona bien en
      Chrome y por eso quedaba en blanco. La de Detalle de Ventas no la fija.
   3) overflow:hidden en las celdas escondía el contenido en vez de dejarlo
      salir. Detalle de Ventas no lo usa.
   --------------------------------------------------------------------- */
.sc-table { table-layout: fixed !important; width: 100% !important; min-width: 0 !important; }
.sc-table tbody td { overflow: visible !important; text-overflow: clip !important; }
.sc-cant-col { position: static !important; box-shadow: none !important; z-index: auto !important; }
.sc-table thead th.sc-cant-col, .sc-table tbody td.sc-cant-col { background: color-mix(in srgb, var(--accent-blue) 10%, var(--panel-2)) !important; }
.sc-table tbody td.sc-cant-col { font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 13px; color: var(--text); }

/* --------- Indicadores de Asignación: grilla en vez de posición libre ------
   Antes cada tarjeta tenía coordenadas propias en píxeles: quedaba prolijo en
   una pantalla y desarmado en otra, con huecos y tarjetas encimadas. Ahora
   cada una ocupa un bloque de una grilla que se reacomoda sola: siempre
   alineadas entre sí y sin espacios muertos. */
.asg-indicadores {
  display: grid !important; position: static !important; height: auto !important;
  grid-template-columns: repeat(auto-fill, minmax(230px, 1fr));
  grid-auto-rows: 110px; gap: 12px; grid-auto-flow: row dense; overflow: visible;
}
.asg-ind-card {
  position: relative !important; left: auto !important; top: auto !important;
  width: auto !important; height: auto !important; min-height: 0; overflow: hidden;
  display: flex; flex-direction: column;
}
.asg-ind-card--arrastrando { outline: 2px dashed var(--accent-amber); outline-offset: -3px; }
.asg-ind-cuerpo-scroll { flex: 1; min-height: 0; overflow: auto; }
.asg-ind-medida {
  position: absolute; right: 8px; bottom: 6px; font-size: 12px; color: var(--text);
  opacity: 0; transition: opacity 0.15s ease; pointer-events: none; font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif;
}
.asg-ind-card:hover .asg-ind-medida { opacity: 0.75; }
/* Barras para ajustar el tamaño: una a la derecha, otra abajo, y la esquina. */
.asg-ind-resize { position: absolute; z-index: 3; background: transparent; }
.asg-ind-resize--der { top: 8px; bottom: 8px; right: 0; width: 10px; cursor: col-resize; border-right: 3px solid transparent; }
.asg-ind-resize--abajo { left: 8px; right: 8px; bottom: 0; height: 10px; cursor: row-resize; border-bottom: 3px solid transparent; }
.asg-ind-resize--esquina { right: 0; bottom: 0; width: 16px; height: 16px; cursor: nwse-resize; display: flex; align-items: flex-end; justify-content: flex-end; font-size: 12px; color: var(--text); opacity: 1; }
.asg-ind-card:hover .asg-ind-resize--der { border-right-color: color-mix(in srgb, var(--accent-amber) 55%, transparent); }
.asg-ind-card:hover .asg-ind-resize--abajo { border-bottom-color: color-mix(in srgb, var(--accent-amber) 55%, transparent); }
.asg-ind-resize--der:hover { border-right-color: var(--accent-amber) !important; }
.asg-ind-resize--abajo:hover { border-bottom-color: var(--accent-amber) !important; }
.asg-ind-card:hover .asg-ind-resize--esquina { opacity: 1; color: var(--text); }


/* Columna "Fila": el botón de borrar ahora es un tacho y el tirador de alto
   una flecha vertical. Antes eran una "×" y unas rayas que no se entendían. */
.sc-acciones .sc-btn-icon { font-size: 13px; }
.sc-acciones .asg-resize-fila {
  width: auto !important; height: auto !important; border: none !important;
  font-size: 12px; color: var(--text); opacity: 1; line-height: 1;
  display: inline-flex; align-items: center; cursor: row-resize; touch-action: none;
}
.sc-acciones .asg-resize-fila:hover { opacity: 1; color: var(--text); }

/* Cuando una fila se agranda a mano, el texto largo pasa a verse completo en
   varias líneas. Si no, el alto de más era espacio vacío y parecía que
   agrandar la fila no servía para nada. */
.sc-table tbody tr[style*="height"] td { white-space: normal; vertical-align: top; }
.sc-acciones .asg-resize-fila { cursor: ns-resize; padding: 0 3px; }

/* El botón de vaciar se distingue del resto: borra todo lo cargado. */
.rv-btn--peligro { border-color: color-mix(in srgb, #ff5d5d 55%, transparent) !important; color: #ff8a8a !important; }
.rv-btn--peligro:hover { background: color-mix(in srgb, #ff5d5d 14%, transparent) !important; border-color: #ff5d5d !important; }



/* Sin cambios de aspecto: la celda se ve igual que siempre hasta que se
   corrige un valor a mano, y ahí sí aparece el borde ámbar. */
.lc-aviso-menu { margin-top: 8px; font-size: 10.5px; line-height: 1.45; color: var(--text); border-top: 1px solid var(--border); padding-top: 8px; }

/* Lista de Usados: fechas sin el "dd/mm/aaaa" cuando están vacías. */
.lu-fecha { background: transparent; border: 1px solid var(--border, #2c2f36); border-radius: 6px; color: var(--text, #c7cbd3); font: inherit; font-size: 12px; padding: 3px 5px; }
.lu-fecha:focus { outline: none; border-color: var(--accent-amber); }
.lu-fecha--vacia::-webkit-datetime-edit { color: transparent; }
.lu-fecha--vacia:hover::-webkit-datetime-edit, .lu-fecha--vacia:focus::-webkit-datetime-edit { color: var(--text); }

/* Lista de Usados: indicadores arriba de la tabla. */
.lu-indicadores { display: grid; grid-template-columns: repeat(auto-fit, minmax(215px, 1fr)); gap: 10px; padding: 0 20px 14px; }
.lu-ind { display: flex; flex-direction: column; gap: 3px; background: var(--bg, #14181d); border: 1px solid var(--border, #2c2f36); border-left: 3px solid var(--border, #2c2f36); border-radius: 10px; padding: 11px 13px; min-width: 0; }
.lu-ind--alerta { border-left-color: #ff5d5d; }
.lu-ind-titulo { font-size: 12px; font-weight: 700; color: var(--text); text-transform: uppercase; letter-spacing: .3px; }
.lu-ind-valor { font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 19px; font-weight: 700; color: var(--text, #f0eee9); }
.lu-ind--alerta .lu-ind-valor { color: #ff5d5d; }
.lu-ind-nota { font-size: 12px; color: var(--text); line-height: 1.45; overflow-wrap: anywhere; }

/* Lista de Usados: barra de scroll también arriba de la tabla. */
.lu-tabla-zona { position: relative; }
.lu-scroll-arriba {
  overflow-x: auto; overflow-y: hidden; position: sticky; top: 0; z-index: 4;
  background: var(--panel, #161c2a); border-bottom: 1px solid var(--border, #252d3f);
  /* Sin alto fijo el contenedor colapsa a 2px y la barra queda invisible:
     el contenido interno mide 1px y la barra del navegador no siempre
     ocupa lugar. Con esto siempre se ve y se puede agarrar. */
  height: 14px; min-height: 14px;
  scrollbar-width: thin; scrollbar-color: #4a5260 var(--panel, #1b2233);
}
.lu-scroll-arriba::-webkit-scrollbar { height: 12px; }
.lu-scroll-arriba::-webkit-scrollbar-track { background: var(--panel-2, #1b2027); }
.lu-scroll-arriba::-webkit-scrollbar-thumb { background: var(--panel, #4a5260); border-radius: 8px; }
.lu-scroll-arriba::-webkit-scrollbar-thumb:hover { background: var(--accent-amber); }
.lu-tabla-scroll { overflow-x: auto; }
/* Con la barra de arriba visible, la de abajo sobra: dos barras que hacen
   lo mismo confunden. La tabla sigue desplazándose con rueda y gesto. */
.lu-tabla-scroll { scrollbar-width: none; }
.lu-tabla-scroll::-webkit-scrollbar { height: 0; }
.lu-tabla-scroll::-webkit-scrollbar { height: 12px; }
.lu-tabla-scroll::-webkit-scrollbar-track { background: var(--panel-2, #1b2027); }
.lu-tabla-scroll::-webkit-scrollbar-thumb { background: var(--panel, #4a5260); border-radius: 8px; }

/* Lista de Usados · pantalla de limpieza de dominios repetidos */
.lu-limpieza { padding: 0 20px 30px; }
.lu-limpieza-barra { display: flex; align-items: flex-start; justify-content: space-between; gap: 14px; flex-wrap: wrap; margin-bottom: 16px; }
.lu-limpieza-titulo { color: var(--text, #f0eee9); margin: 0 0 4px; font-size: 17px; }
.lu-limpieza-sub { color: var(--text); margin: 0; font-size: 12.5px; line-height: 1.5; max-width: 720px; }
.lu-limpieza-acciones { display: flex; gap: 8px; flex-wrap: wrap; }
.lu-btn { background: transparent; border: 1px solid var(--border, #2c2f36); color: var(--text, #c7cbd3); border-radius: 8px; padding: 7px 12px; font-size: 12.5px; cursor: pointer; font-family: inherit; }
.lu-btn:hover { border-color: var(--accent-amber); }
.lu-btn--peligro { border-color: #E0725F; color: #E0725F; }
.lu-btn--peligro:hover { background: color-mix(in srgb, #E0725F 14%, transparent); }
.lu-grupo { border: 1px solid var(--border, #2c2f36); border-radius: 12px; margin-bottom: 12px; overflow: hidden; }
.lu-grupo-cab { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; padding: 9px 12px; background: var(--panel-2, #1b2027); border-bottom: 1px solid var(--border, #2c2f36); }
.lu-grupo-dom { font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 14px; font-weight: 700; color: var(--text); }
.lu-grupo-meta { font-size: 12px; color: var(--text); }
.lu-grupo-scroll { overflow-x: auto; }
.lu-grupo-tabla { width: 100%; border-collapse: collapse; font-size: 12px; white-space: nowrap; }
.lu-grupo-tabla th { text-align: center; padding: 6px 8px; font-size: 13px; text-transform: uppercase; letter-spacing: .3px; color: var(--text); border-bottom: 1px solid var(--border, #2c2f36); }
.lu-grupo-tabla td { padding: 6px 8px; color: var(--text, #c7cbd3); border-bottom: 1px solid #24262C; text-align: center; }
.lu-fila-elegida td { background: color-mix(in srgb, #3ddc97 12%, transparent); }
.lu-celda-difiere { color: var(--text) !important; font-weight: 700; }
.lu-radio { display: inline-flex; align-items: center; gap: 5px; cursor: pointer; font-size: 12px; color: var(--text); }

.lu-aviso-dup { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap;
  margin: 0 20px 14px; padding: 10px 13px; border: 1px solid var(--accent-amber); border-radius: 10px;
  background: color-mix(in srgb, var(--accent-amber) 10%, transparent); color: var(--text, #c7cbd3); font-size: 12.5px; line-height: 1.5; }
.lu-aviso-dup b { color: var(--text); }

/* Usados · solapas de vista e informes */
.lu-solapas { display: flex; gap: 6px; flex-wrap: wrap; padding: 0 20px 12px; }
.lu-solapa { background: var(--bg, #14181d); border: 1px solid var(--border, #2c2f36); color: var(--text); border-radius: 8px; padding: 7px 12px; font-size: 12.5px; cursor: pointer; font-family: inherit; display: inline-flex; align-items: center; gap: 6px; }
.lu-solapa:hover { border-color: var(--accent-amber); color: var(--text, #c7cbd3); }
.lu-solapa--activa { background: color-mix(in srgb, var(--accent-amber) 16%, var(--bg, #14181d)); border-color: var(--accent-amber); color: var(--text, #f0eee9); font-weight: 700; }
.lu-solapa-n { font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 12px; opacity: 1; }

.lu-totales { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 12px; padding: 0 20px 14px; }
.lu-total-card { background: var(--bg, #14181d); border: 1px solid var(--border, #2c2f36); border-radius: 12px; padding: 12px 14px; min-width: 0; }
.lu-total-titulo { font-size: 12px; font-weight: 700; color: var(--text); text-transform: uppercase; letter-spacing: .4px; margin-bottom: 8px; }
.lu-total-tabla { width: 100%; border-collapse: collapse; font-size: 12px; }
.lu-total-tabla td { padding: 3px 4px; color: var(--text, #c7cbd3); border-bottom: 1px solid #24262C; }
.lu-total-tabla td:first-child { color: var(--text); }
.lu-total-anti { font-size: 12px; color: var(--text, #c7cbd3); margin-top: 8px; line-height: 1.5; }
.lu-total-nota { color: var(--text); }

.lu-informe { padding: 0 20px 30px; }
.lu-corte { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-bottom: 10px; }
.lu-corte-label { font-size: 12px; color: var(--text); text-transform: uppercase; letter-spacing: .3px; }
.lu-chip { background: transparent; border: 1px solid var(--border, #2c2f36); color: var(--text); border-radius: 20px; padding: 4px 11px; font-size: 12px; cursor: pointer; font-family: inherit; }
.lu-chip--activo { border-color: var(--accent-amber); color: var(--text); font-weight: 700; }
.lu-informe-scroll { overflow-x: auto; border: 1px solid var(--border, #2c2f36); border-radius: 10px; }
.lu-informe-tabla { width: 100%; border-collapse: collapse; font-size: 12px; white-space: nowrap; }
.lu-informe-tabla thead th { position: sticky; top: 0; background: var(--panel-2, #1b2027); text-align: center; padding: 7px 8px; font-size: 13px; font-weight: 700; text-transform: uppercase; letter-spacing: .3px; color: var(--text); border-bottom: 1px solid var(--border, #2c2f36); border-right: 1px solid #24262C; }
.lu-informe-tabla tbody td { padding: 6px 8px; color: var(--text, #c7cbd3); border-bottom: 1px solid #24262C; border-right: 1px solid #1e2026; }
.lu-informe-tabla tbody tr:hover td { background: color-mix(in srgb, var(--accent-amber) 6%, transparent); }
.lu-inf-num { text-align: right; font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; }
.lu-inf-cant { width: 46px; text-align: center; color: var(--text); font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; }
.lu-inf-click { cursor: pointer; }
.lu-inf-click:hover { color: var(--text); }
.lu-inf-viejo { color: #ff5d5d !important; font-weight: 700; }
.lu-inf-atrasada td:first-child { box-shadow: inset 3px 0 0 #ff5d5d; }
.lu-inf-vacio { text-align: center; color: var(--text); padding: 22px; }
.lu-informe-pie { font-size: 12px; color: var(--text); margin: 9px 0 0; line-height: 1.5; }

/* Peritaje */
.per-acc { display: inline-flex; gap: 4px; align-items: center; }
.per-btn { background: transparent; border: 1px solid var(--border, #2c2f36); color: var(--text); border-radius: 6px; padding: 3px 7px; font-size: 12px; cursor: pointer; font-family: inherit; }
.per-btn:hover { border-color: var(--accent-amber); color: var(--text, #c7cbd3); }
.per-btn--hecho { border-color: #3ddc97; color: var(--text); }
.per-dif { color: #ff5d5d; font-size: 12px; font-weight: 700; }
/* Calidad - Contacto Clientes y Encuestas como pantalla completa: entra en el
   tablero en vez de flotar encima de los indicadores (antes se superponían). */
/* Barra superior: concesionario + filtros del tema, todo junto. */
.cc-barra-sup { display: flex; align-items: stretch; gap: 18px; flex-wrap: wrap;
  padding: 12px 16px; border-bottom: 1px solid var(--border, #2c2f36); background: rgba(255,255,255,.015); }
.cc-barra-sup .cc-selector-dealer { padding: 0; border-bottom: 0; flex: 0 0 auto; }
.cc-filtros { display: flex; align-items: center; gap: 10px; flex: 1 1 340px; min-width: 260px; }
.cc-filtros .cc-select-tema { min-height: 40px; font-size: 13px; font-weight: 600; padding: 0 10px;
  border-radius: 8px; border: 1px solid var(--border, #2c2f36); background: var(--panel-2, #171c22); color: var(--text); min-width: 210px; }
.cc-filtros .cvn-buscar { flex: 1 1 auto; }
.cc-filtros .cvn-buscar input { min-height: 40px; width: 100%; box-sizing: border-box; }
.cc-filtros .res-toggle { white-space: nowrap; font-size: 12px; }
/* Solapas más grandes y con el activo bien marcado. */
.cc-modal .cc-solapas { gap: 8px; padding: 12px 16px 0; }
.cc-modal .cc-solapas .pre-accion { font-size: 13.5px; font-weight: 600; padding: 10px 20px; border-radius: 10px 10px 0 0;
  border-bottom: 2px solid transparent; }
.cc-modal .cc-solapas .pre-accion:hover { border-color: #3a3f47; border-bottom-color: transparent; color: var(--text); }
.cc-modal .cc-solapas .pre-accion--on { background: rgba(224,164,58,.12); border-color: rgba(224,164,58,.5);
  border-bottom-color: var(--accent-amber); color: var(--text); }

.cc-pantalla-wrap { width: 100%; }
.cc-pantalla { background: var(--bg, #14181d); border: 1px solid var(--border, #2c2f36); border-radius: 14px; width: 100%;
  min-height: calc(calc(100dvh / var(--tcg-z, 1)) - 210px); display: flex; flex-direction: column; overflow: hidden; }
.cc-selector-dealer { display: flex; align-items: stretch; gap: 10px; flex-wrap: wrap;
  padding: 12px 16px; border-bottom: 1px solid var(--border, #2c2f36); }
.cc-selector-tit { align-self: center; font-size: 12px; letter-spacing: .08em; text-transform: uppercase;
  color: var(--text); margin-right: 4px; }
.cc-selector-btn { display: flex; flex-direction: column; align-items: flex-start; gap: 2px; min-width: 168px;
  padding: 9px 14px; border-radius: 10px; border: 1px solid var(--border, #2c2f36); background: var(--panel-2, #171c22); cursor: pointer;
  text-align: left; transition: border-color .15s, background .15s; }
.cc-selector-btn b { font-size: 13px; color: var(--text); }
.cc-selector-btn span { font-size: 12px; color: var(--text); }
.cc-selector-btn:hover { border-color: var(--accent-amber); }
.cc-selector-btn--on { border-color: var(--accent-amber); background: rgba(224,164,58,.10); }
.cc-selector-btn--on b { color: var(--text); }

/* Modales de venta: más angostos y más altos (tirando a cuadrado), con las
   celdas más grandes para que se cargue cómodo. */
.vnv-modal { max-width: 976px; max-height: calc(96vh / var(--tcg-z, 1)); }
.vnv-modal .per-campo input, .vnv-modal .per-campo select { min-height: 34px; font-size: 13px; padding: 6px 9px; }
.vnv-modal .per-campo > span { font-size: 11px; }
/* Cliente: se ve de lejos si está cargado o si falta. */
.vnv-cliente { border-radius: 8px; padding: 4px; border: 1px solid transparent; background: rgba(224,164,58,.07); }
.vnv-cliente .per-campo > span { color: var(--text); }
.vnv-cliente--cargado { background: rgba(76,175,111,.10); border-color: rgba(76,175,111,.45); }
.vnv-cliente--cargado .per-campo > span { color: var(--text); }
.vnv-cliente--cargado .per-campo input, .vnv-cliente--cargado .per-campo select { font-weight: 700; }
/* El importe del usado: se muestra, no se pide. El número vive en la
   unidad —«Costo de compra» del modal de compra del usado en parte de
   pago— y acá se lee. Se dibuja como un dato, no como un campo, para que
   se note que no se escribe. */
/* El usado elegido se nombra entero: dominio, marca, modelo, versión y año.
   No entra con el cuerpo de letra del resto de los campos —un «AB 123 CD ·
   Toyota Corolla XEI Pack 2019» son casi cuarenta caracteres— así que acá
   se achica. Vale en el monitor, la tablet y el teléfono: es el mismo
   desplegable y el mismo texto. */
/* Con «!important» a propósito: hay tres reglas más específicas peleando
   por este mismo desplegable —una lo pone en 17px en el monitor y otra en
   16px en el teléfono— y ganarles por especificidad pedía cadenas de cuatro
   clases que después nadie entiende.
   Los tamaños salen de medir el caso peor —«AB 123 CD · Volkswagen Amarok
   Highline V6 Extreme 2021», 53 caracteres— contra el ancho real del
   desplegable: 13px entran en el monitor y la tablet, 11px en el teléfono. */
.vnv-usado-sel > select {
  font-size: 13px !important; letter-spacing: -.1px;
  text-overflow: ellipsis; padding-right: 26px;
}

/* El importe del usado: un renglón FIJO con la misma pinta que los demás
   campos —rótulo y caja—, se haya elegido un usado o no. No se escribe: el
   número se carga en la compra del usado, en «Costo de compra». Pero se ve
   siempre, porque es el que va al boleto.
   La caja imita al campo de al lado a propósito: si pareciera otra cosa,
   habría que explicarla, y una leyenda debajo de cada renglón es ruido.
   La tinta es la del texto, no la apagada: en gris no se leía. */
/* Sin «background» ni «border» propios: los toma de la misma regla que los
   campos de al lado. Ponérselos acá era lo que lo dejaba de otro color. */
.vnv-usado-importe > output {
  display: block; box-sizing: border-box; width: 100%;
  line-height: 21px;
  font-size: 13px; font-weight: 700;
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}

/* ---- Entrega: el selector de 0km / usados --------------------------- */
/* Va dentro de la cabecera, no flotando: un botón fijo en una esquina le
   roba el clic a lo que tenga debajo. */
.ent-lados {
  display: inline-flex; gap: 3px; padding: 3px; flex: 0 0 auto;
  background: var(--panel, #1b2233); border: 1px solid var(--border, #2b3348);
  border-radius: 999px;
}
.ent-lados button {
  border: 0; background: transparent; color: var(--text, #ecf0f4);
  border-radius: 999px; padding: 6px 16px; font: inherit; font-size: 12.5px; cursor: pointer;
}
.ent-lados button.on {
  background: var(--vnv-marca, #6c7684); color: var(--vnv-marca-txt, #fff); font-weight: 700;
}

/* ---- Programación de entregas ---------------------------------------- */
.prog-envoltura { margin-top: 6px; }
.prog-ayuda { font-size: 12px; color: var(--text); }
.prog-grupo { margin-top: 14px; }
.prog-grupo-tit {
  padding: 6px 10px; border-radius: 8px 8px 0 0;
  background: var(--vnv-marca, #6c7684); color: var(--vnv-marca-txt, #fff);
  font-size: 12px; font-weight: 700; letter-spacing: .8px; text-transform: uppercase;
}
.prog-grupo-tit span { opacity: 1; font-weight: 400; }
.prog-vacio {
  margin: 0; padding: 8px 10px; font-size: 12px; color: var(--text);
  border: 1px solid var(--border); border-top: 0; border-radius: 0 0 8px 8px;
}
.prog-tabla th, .prog-tabla td { white-space: nowrap; }
.prog-tabla .prog-n { text-align: right; }
.prog-tabla .prog-total-celda { font-weight: 700; color: var(--text); }
.prog-tabla tfoot td {
  border-top: 2px solid var(--border); font-weight: 700;
  background: var(--panel-2);
}

/* ---- Gestoría · el detalle de gastos antes de entregar --------------- */
.proc-gastos { display: grid; gap: 10px; margin-top: 10px; }
.proc-gastos-bloque {
  padding: 10px 12px; border: 1px solid var(--border); border-radius: 10px;
  background: var(--panel-2);
}
.proc-gastos-tit {
  margin: 6px 0 6px; font-size: 12px; font-weight: 700; letter-spacing: .6px;
  text-transform: uppercase; color: var(--text);
}
.proc-gasto-fila { display: flex; align-items: center; gap: 6px; margin-bottom: 5px; }
.proc-gasto-fila input {
  flex: 1 1 auto; min-width: 0; height: 30px; padding: 0 8px;
  background: var(--panel); border: 1px solid var(--border); border-radius: 8px;
  color: var(--text); font: inherit; font-size: 13px;
}
.proc-gasto-fila .pg-signo { color: var(--text); font-weight: 700; }
.proc-gasto-fila .pg-importe {
  flex: 0 0 130px; text-align: right;
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif;
}
.proc-gasto-fila .pg-x {
  flex: 0 0 26px; height: 30px; border: 1px solid var(--border); border-radius: 8px;
  background: transparent; color: var(--text); cursor: pointer; font-size: 14px;
}
.proc-gasto-fila .pg-x:hover { color: #e2574c; border-color: #e2574c; }
.proc-gastos-pie {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-top: 8px;
  padding-top: 8px; border-top: 1px solid var(--border);
}
.proc-gastos-pie .pg-total {
  margin-left: auto; font-size: 12.5px; color: var(--text);
}
.proc-gastos-pie .pg-total b {
  margin-left: 6px; font-size: 15px; color: var(--text);
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif;
}

/* ---- Gestoría · herramientas del listado ----------------------------
   Los dos botones al registro y el orden, en la misma franja que ya usa el
   buscador. En el teléfono se apilan solos porque envuelven. */
.proc-herramientas {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  margin: 6px 0 4px;
}
.proc-orden { display: flex; align-items: center; gap: 6px; margin-left: auto; }
.proc-orden > span {
  font-size: 12px; font-weight: 700; letter-spacing: .5px; text-transform: uppercase;
  color: var(--text);
}
.proc-orden select {
  height: 30px; padding: 0 8px; border-radius: 8px; font: inherit; font-size: 13px;
  background: var(--panel-2); border: 1px solid var(--border); color: var(--text);
}
/* El total por agente: el número que se mira para saber a quién reclamarle. */
.proc-total-agente {
  display: flex; flex-wrap: wrap; align-items: center; gap: 6px 14px;
  margin: 8px 0 2px; padding: 8px 10px;
  background: var(--panel-2); border: 1px solid var(--border); border-radius: 9px;
  font-size: 12px;
}
.proc-total-agente .pta-item b {
  font-weight: 700; letter-spacing: .3px; color: var(--text);
}
.proc-total-agente .pta-total {
  margin-left: auto; font-weight: 700;
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif;
}

/* El porcentaje de comisión se lee del mismo lado que el importe: los dos
   son números y se comparan por la derecha. Misma tipografía que la plata,
   por lo mismo. Vale en monitor y en teléfono. */
.vnv-pct input {
  text-align: right;
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif;
}


/* Usado en parte de pago: mismo ancho que el resto de las celdas. */
.vnv-usado select, .vnv-usado input { width: 100%; box-sizing: border-box; }
.vnv-usado { max-width: 100%; }
.per-overlay { position: fixed; inset: 0; background: rgba(0,0,0,.68); z-index: 9999; display: flex; align-items: center; justify-content: center; padding: 14px; }
/* 1156 y no 1080: dos centímetros más de ancho, pedido de Ramiro. */
.per-modal { background: var(--bg, #14181d); border: 1px solid var(--border, #2c2f36); border-radius: 14px; width: 100%; max-width: 1156px; max-height: calc(92vh / var(--tcg-z, 1)); display: flex; flex-direction: column; overflow: hidden; }
.per-cab { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; padding: 14px 16px; border-bottom: 1px solid var(--border, #2c2f36); }
.per-titulo { margin: 0; color: var(--text, #f0eee9); font-size: 16px; display: flex; align-items: baseline; gap: 9px; flex-wrap: wrap; }
.per-dom { font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; color: var(--text); font-size: 14px; }
.per-sub { margin: 3px 0 0; color: var(--text); font-size: 12px; line-height: 1.5; }
/* CINCO COLUMNAS FIJAS. Con «auto-fit» cada campo caía donde entraba y la
   fila se rearmaba sola al cambiar el ancho: nunca estaban dos veces en el
   mismo lugar. Maqueta aprobada por Ramiro (maqueta_peritaje.html). */
.per-datos { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 10px 12px; padding: 12px 16px; border-bottom: 1px solid var(--border, #2c2f36); }
/* Los nombres de cliente son largos: dos columnas. */
.per-campo--ancho { grid-column: span 2; }
/* EL AVISO, EN UN RENGLÓN. Antes era una tarjeta que ocupaba una celda de la
   grilla, rompía la fila y dejaba un hueco de tres columnas al costado. */
.per-aviso-fila {
  grid-column: 1 / -1; display: flex; align-items: center; gap: 10px;
  padding: 7px 11px; border-radius: 8px; font-size: 12px; min-height: 36px;
}
.per-aviso-fila--traba { background: rgba(255,93,93,.10); border: 1px solid rgba(255,93,93,.55); color: #ff8a8a; }
.per-aviso-fila--recompra { background: rgba(61,220,151,.10); border: 1px solid rgba(61,220,151,.45); color: var(--text); }
.per-aviso-ico { font-size: 14px; flex: none; }
.per-aviso-txt { flex: 1 1 auto; min-width: 0; color: var(--text, #ecf0f4); }
.per-aviso-fila .ret-tilde { flex: none; margin: 0; }
.per-campo { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.per-campo span { font-size: 12px; color: var(--text); text-transform: uppercase; letter-spacing: .3px; }
.per-campo input { background: var(--panel-2, #202940); border: 1px solid var(--border, #2c2f36); border-radius: 8px; color: var(--text, #c7cbd3); padding: 6px 8px; font-size: 13px; font-family: inherit; }
.per-campo input:focus { outline: none; border-color: var(--accent-amber); }
/* RENGLÓN FIJO, igual que la barra de atajos de más abajo. Con «wrap» las
   pastillas de colores se pasaban a un segundo renglón según el ancho y todo
   lo de abajo —secciones e ítems— subía y bajaba. Pedido de Ramiro. */
.per-resumen {
  display: flex; align-items: center; gap: 6px; flex-wrap: nowrap;
  height: 44px; padding: 0 16px; border-bottom: 1px solid var(--border, #2c2f36);
  overflow-x: auto; overflow-y: hidden; scrollbar-width: none;
}
.per-resumen::-webkit-scrollbar { display: none; }
.per-resumen > * { flex: 0 0 auto; white-space: nowrap; }
.per-pill { font-size: 12px; border: 1px solid var(--border, #2c2f36); border-radius: 20px; padding: 3px 10px; color: var(--text); }
.per-pill--ok { border-color: #3ddc97; color: var(--text); }
.per-pill--det { border-color: #f0b429; color: var(--text); }
.per-pill--rep { border-color: #ff8a4c; color: #ff8a4c; }
.per-pill--gra { border-color: #ff5d5d; color: #ff5d5d; }
.per-cuerpo { display: flex; min-height: 0; flex: 1; }
.per-secciones { display: flex; flex-direction: column; gap: 4px; padding: 0 12px 12px; border-right: 1px solid var(--border, #2c2f36); overflow-y: auto; min-width: 190px; }
.per-sec-btn { display: flex; align-items: center; justify-content: space-between; gap: 8px; background: transparent; border: 1px solid transparent; color: var(--text); border-radius: 8px; padding: 7px 10px; font-size: 12px; cursor: pointer; text-align: left; font-family: inherit; }
.per-sec-btn:hover { background: var(--panel-2, #1b2027); color: var(--text, #c7cbd3); }
.per-sec-btn--activa { background: color-mix(in srgb, var(--accent-amber) 14%, var(--bg, #14181d)); border-color: var(--accent-amber); color: var(--text, #f0eee9); font-weight: 700; }
.per-sec-n { font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 12px; opacity: 1; margin-left: auto; }
/* Sin colores por avance: se probó rojo/ámbar/verde y quedaba ruidoso.
   Letra blanca, y cada sección con su renglón marcado. */
.per-secciones .per-sec-btn {
  color: var(--text, #f0eee9); text-align: left; justify-content: flex-start;
  border-bottom: 1px solid var(--border, #2c2f36); border-radius: 0;
  padding: 9px 10px;
}
.per-secciones .per-sec-btn:last-child { border-bottom: none; }
.per-secciones .per-sec-btn:hover { background: rgba(255,255,255,.05); }
.per-secciones .per-sec-btn--activa { background: rgba(255,255,255,.07); font-weight: 700; }

/* Las tres columnas del peritaje, centradas. */
.per-tabla th, .per-tabla td { text-align: center; vertical-align: middle; }
.per-tabla .per-estados { justify-content: center; }
/* Menos en el editor de ítems, que es un listado y se lee a la izquierda. */
.per-ed-tabla th, .per-ed-tabla td { text-align: left; }
.per-ed-tabla .per-ed-acc { text-align: right; }

/* La lista de pendientes de peritaje se lee a la izquierda, y el renglón
   entero abre el peritaje. */
.per-tabla-lista th, .per-tabla-lista td { text-align: left; }
.per-sinper-wrap { max-height: 300px; }
.per-fila-abrir { cursor: pointer; }
.per-fila-abrir:hover td { background: rgba(255,255,255,.06); }
/* Sin relleno arriba: los dos renglones quietos —la ayuda y la barra— se
   pegan al borde del panel. Si hubiera relleno, quedarían flotando y por el
   hueco se verían pasar los ítems. */
.per-detalle { flex: 1; overflow: auto; padding: 0 16px 12px; min-width: 0; }
/* Alto fijo: la ayuda de cada sección tiene largos distintos y, al cambiar
   de sección, corría la barra de atajos y la tabla hacia abajo. Con un alto
   fijo, la lista de partes de la izquierda y los ítems de la derecha
   arrancan siempre en el mismo renglón. Pedido de Ramiro. */
/* LOS DOS BLOQUES, CON TÍTULO Y A LA MISMA ALTURA. Antes la columna de
   partes arrancaba pegada al borde y los ítems más abajo, después de una
   leyenda de largo variable: al cambiar de sección todo se corría. Ahora
   cada bloque tiene su título, del mismo alto y los dos quietos arriba, así
   la primera parte y el primer ítem quedan siempre en el mismo renglón.
   Pedido de Ramiro con captura. */
.per-bloque-tit {
  height: 42px; display: flex; align-items: center; flex: none;
  font-size: 12px; font-weight: 700; letter-spacing: .06em;
  text-transform: uppercase; color: var(--text);
  position: sticky; top: 0; z-index: 4; background: var(--panel, #1a2130);
}
/* En la columna de partes el título va solo y lleva su propia línea abajo. */
.per-secciones > .per-bloque-tit { border-bottom: 1px solid var(--border, #2c2f36); margin-bottom: 8px; }
/* EL TÍTULO Y LOS ATAJOS, EN UN RENGLÓN. Así los ítems arrancan a la misma
   altura que la primera parte de la izquierda en vez de un renglón más abajo.
   Todo el renglón queda quieto mientras la lista corre por debajo. */
.per-bloque-cab {
  display: flex; align-items: center; gap: 12px;
  position: sticky; top: 0; z-index: 4; background: var(--panel, #1a2130);
  border-bottom: 1px solid var(--border, #2c2f36); margin-bottom: 8px;
}
.per-bloque-cab > .per-bloque-tit { position: static; white-space: nowrap; }
.per-bloque-cab > .per-barra-fija { position: static; flex: 1 1 auto; min-width: 0; margin: 0; border: 0; background: none; }
.per-ayuda { margin: 0 0 8px; font-size: 12px; color: var(--text); line-height: 1.4; }
.per-tabla { width: 100%; border-collapse: collapse; font-size: 12px; }
.per-tabla th { text-align: left; font-size: 13px; text-transform: uppercase; letter-spacing: .3px; color: var(--text); padding: 5px 6px; border-bottom: 1px solid var(--border, #2c2f36); }
.per-tabla td { padding: 5px 6px; border-bottom: 1px solid #24262C; vertical-align: middle; }
.per-item { color: var(--text, #c7cbd3); white-space: nowrap; }
/* Los cinco estados en UN renglón. Con «flex-wrap: wrap» el quinto
   —«No tiene / falta»— caía abajo y cada fila ocupaba el doble de alto:
   la pantalla se leía como un bloque continuo sin principio ni fin.
   Ahora no envuelven y los botones se achican parejo si hace falta. */
.per-estados { display: flex; gap: 4px; flex-wrap: nowrap; align-items: center; }
.per-est {
  background: transparent; border: 1px solid var(--border, #2c2f36); color: var(--text);
  border-radius: 6px; padding: 3px 8px; font-size: 12px; cursor: pointer;
  font-family: inherit; white-space: nowrap; flex: 0 1 auto; min-width: 0;
  transition: border-color .12s, color .12s, background .12s;
}
.per-est:hover { border-color: #4a5260; color: var(--text, #c7cbd3); background: rgba(255,255,255,.04); }
.per-est--activo { font-weight: 700; background: rgba(255,255,255,.05); }

/* Los renglones se distinguen: raya más marcada, y el que está bajo el
   cursor se sombrea entero. Antes eran 57 ítems sin separación visible. */
.per-tabla tbody tr { border-bottom: 1px solid var(--border, #2c2f36); }
.per-tabla tbody tr:hover td { background: rgba(255,255,255,.045); }
.per-tabla tbody tr:hover .per-item { color: var(--text, #f0eee9); }
.per-tabla td { border-bottom: none; }
.per-tabla tbody tr:last-child { border-bottom: none; }
/* Una fila ya resuelta se atenúa: lo que queda por revisar salta a la vista. */
.per-tabla tbody tr.per-fila--lista .per-item { color: var(--text); }

/* La columna del estado no se comprime: es la que tiene que entrar entera. */
.per-tabla td:nth-child(2) { width: 1%; white-space: nowrap; }
/* En documentación son dos botones: se los deja anchos para que se toquen bien. */
.per-tabla--presencia .per-est { padding: 4px 18px; font-size: 12px; }

/* Marcar toda una sección de una: en un auto impecable son 57 clics para
   decir lo mismo. */
.per-todos {
  display: flex; align-items: center; gap: 6px; flex-wrap: wrap;
  padding: 8px 0 10px; border-bottom: 1px solid var(--border, #2c2f36); margin-bottom: 8px;
}
.per-todos .com-ayuda { margin: 0 4px 0 0; }
.per-todos-btn {
  border: 1.5px solid #3ddc97 !important; color: var(--text) !important;
  background: color-mix(in srgb, #3ddc97 12%, transparent) !important; font-weight: 700;
}
.per-todos-btn:hover:not(:disabled) { background: color-mix(in srgb, #3ddc97 22%, transparent) !important; }
.per-todos-btn:disabled { opacity: .35; }
.per-planilla-ver { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin: 10px 0 2px; }
.per-planilla-ver .com-ayuda { flex: 1 1 220px; }

/* ── Editor de ítems y calificaciones ───────────────────────────────── */
/* La fila de «marcar todos»: separada de la tabla, para no confundirla con
   los botones de un ítem. */
.per-todos {
  display: flex; align-items: center; gap: 6px; flex-wrap: wrap;
  padding: 7px 9px; margin-bottom: 8px; border-radius: 8px;
  background: rgba(255,255,255,.035); border: 1px dashed var(--border, #2c2f36);
}
.per-todos .com-ayuda { margin: 0 4px 0 0; }
.per-todos-btn { background: transparent !important; font-weight: 700; }
.per-todos-btn:disabled { opacity: .35; }

.per-sec-barra { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.per-sec-barra .per-ayuda { flex: 1 1 auto; margin: 0; }
.per-todos { display: flex; align-items: center; gap: 5px; flex: 0 0 auto; flex-wrap: wrap; }
.per-todos-btn { border-width: 1px; font-weight: 600; }
.per-todos-btn:hover { background: color-mix(in srgb, currentColor 16%, transparent); }
.per-btn-items { flex: 0 0 auto; white-space: nowrap; }
.per-ed-alta { display: flex; gap: 8px; align-items: center; margin-bottom: 10px; }
.per-ed-alta .per-obs { flex: 1 1 auto; }
.per-ed-tabla td { vertical-align: middle; }
.per-ed-acc { width: 1%; white-space: nowrap; text-align: right; }
.per-ed-propio {
  margin-left: 7px; padding: 1px 6px; border-radius: 999px; font-size: 12px;
  text-transform: uppercase; letter-spacing: .04em;
  border: 1px solid currentColor; opacity: 1;
}
.per-ed-escondidos { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 4px; }
.per-ed-tit { margin: 16px 0 4px; font-size: 13px; }
.per-ed-estados { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 8px; }
.per-obs, .per-vida { width: 100%; background: transparent; border: 1px solid var(--border, #2c2f36); border-radius: 6px; color: var(--text, #c7cbd3); padding: 4px 6px; font-size: 12px; font-family: inherit; }
.per-vida { width: 62px; text-align: right; }
.per-obs:focus, .per-vida:focus { outline: none; border-color: var(--accent-amber); }
.per-fotos { display: grid; grid-template-columns: repeat(auto-fill, minmax(130px, 1fr)); gap: 10px; }
.per-foto { border: 1px dashed var(--border, #2c2f36); border-radius: 10px; aspect-ratio: 4/3; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 5px; cursor: pointer; overflow: hidden; position: relative; }
.per-foto:hover { border-color: var(--accent-amber); }
.per-foto--cargada { border-style: solid; border-color: #3ddc97; }
.per-foto img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.per-foto-mas { font-size: 22px; color: #000; }
.per-foto-nombre { position: relative; z-index: 1; font-size: 12px; color: var(--text, #c7cbd3); background: rgba(0,0,0,.62); padding: 2px 6px; border-radius: 6px; text-align: center; }
.per-pie { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; padding: 12px 16px; border-top: 1px solid var(--border, #2c2f36); }
/* El pie del peritaje NO se desplaza con el contenido: Guardar tiene que
   estar siempre a la vista. El cuerpo tiene 57 ítems y una lista de fotos;
   al bajar, el pie se iba de la pantalla y parecía que no existía. */
/* El pie SIEMPRE a la vista, en los dos modales del peritaje.
   El «position: sticky» solo no alcanzaba: para que pegue, el que se
   desplaza tiene que ser el CUERPO, no el modal. Si el modal entero crece
   y se desplaza la página, el pie se va con él. Por eso el modal se fija en
   alto, el cuerpo se lleva el sobrante con «min-height: 0» —sin eso un hijo
   flex no se encoge nunca— y el pie queda afuera del área que se mueve. */
.per-modal-peritaje,
.per-modal.com-modal--angosto {
  display: flex; flex-direction: column; max-height: calc(92vh / var(--tcg-z, 1)); overflow: hidden;
}
.per-modal-peritaje > .per-cab,
.per-modal.com-modal--angosto > .per-cab { flex: 0 0 auto; }
.per-modal-peritaje > .per-cuerpo,
.per-modal-peritaje .per-cuerpo,
.per-modal.com-modal--angosto > .com-cuerpo {
  flex: 1 1 auto; min-height: 0; overflow: auto;
}
.per-modal-peritaje > .per-pie,
.per-modal-peritaje > .per-pie-avisos,
.per-modal.com-modal--angosto > .per-pie {
  flex: 0 0 auto;
  background: var(--panel, #1b2233);
  box-shadow: 0 -6px 14px rgba(0,0,0,.35);
}
/* Los botones nunca se encogen ni se van del ancho. */
.per-pie-acciones { flex: 0 0 auto; margin-left: auto; }
.per-pie-acciones .lu-btn { white-space: nowrap; }
/* Los avisos ocupan su propio renglón completo, debajo de todo. */
.per-pie-avisos { flex: 1 1 100%; display: flex; gap: 12px; flex-wrap: wrap; align-items: baseline; }
.per-obsgral { flex: 1; min-width: 200px; background: var(--panel-2, #202940); border: 1px solid var(--border, #2c2f36); border-radius: 8px; color: var(--text, #c7cbd3); padding: 7px 9px; font-size: 12.5px; font-family: inherit; }
.per-obsgral:focus { outline: none; border-color: var(--accent-amber); }
.per-pie-acciones { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.per-aviso { font-size: 12px; color: var(--text); }
.lu-btn--ok { border-color: #3ddc97; color: var(--text); }
.lu-btn--ok:hover { background: color-mix(in srgb, #3ddc97 14%, transparent); }
.per-comp { border: 1px solid var(--border, #2c2f36); border-radius: 10px; padding: 11px 13px; margin: 0 20px 14px; }
.per-comp--alerta { border-color: #ff5d5d; background: color-mix(in srgb, #ff5d5d 8%, transparent); }
/* Los colores iban escritos a mano y todos eran del tema OSCURO: #C7CBD3
   sobre la tarjeta blanca del tema claro da 1,63 de contraste y el mínimo es
   4,5. Es la pantalla que dice qué empeoró entre la cotización y el ingreso:
   si no se lee, no sirve. Ahora usa los tokens, que cada tema ya define. */
.per-comp-titulo { font-size: 12.5px; color: var(--text, #ecf0f4); font-weight: 700; margin-bottom: 8px; }
.per-comp-tabla { width: 100%; border-collapse: collapse; font-size: 12px; }
.per-comp-tabla th { text-align: left; color: var(--text); font-size: 13px; text-transform: uppercase; padding: 4px 6px; border-bottom: 1px solid var(--border, #2c2f36); }
.per-comp-tabla td { padding: 4px 6px; color: var(--text, #ecf0f4); border-bottom: 1px solid var(--border, #24262C); }
/* El rojo de «empeoró» también estaba pensado para fondo oscuro. Medidos:
   #ea6a60 da 5,09 sobre el panel oscuro y #b3261e da 6,54 sobre blanco. */
.per-comp-peor { color: #ea6a60; font-weight: 700; }
.mo-claro .per-comp-peor { color: #b3261e; }


.per-nota-valor { font-size: 12px; color: var(--text); max-width: 480px; line-height: 1.45; }

/* Usados · barra de acciones y modal de compra */
.lu-acciones { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; padding: 0 20px 12px; }
.lu-btn--accion { border-color: var(--accent-amber); color: var(--text); font-weight: 700; }
.lu-btn--accion:hover { background: color-mix(in srgb, var(--accent-amber) 14%, transparent); }
.lu-acciones-nota { font-size: 12px; color: var(--text); }
.com-modal { max-width: 900px; }
.com-cuerpo { overflow: auto; padding: 14px 16px; display: flex; flex-direction: column; gap: 12px; }
.com-origen { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.com-op { text-align: left; background: var(--panel-2, #202940); border: 1px solid var(--border, #2c2f36); border-radius: 10px; padding: 10px 12px; cursor: pointer; font-family: inherit; display: flex; flex-direction: column; gap: 3px; }
.com-op b { color: var(--text, #c7cbd3); font-size: 13px; }
.com-op span { color: var(--text); font-size: 12px; line-height: 1.4; }
.com-op--activa { border-color: var(--accent-amber); background: color-mix(in srgb, var(--accent-amber) 10%, var(--panel-2, #202940)); }
.com-op--activa b { color: var(--text); }
.com-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 10px; }
.com-ancho { width: 100%; }
.com-ayuda { font-size: 12px; color: var(--text); line-height: 1.4; }
.per-campo select { background: var(--panel-2, #202940); border: 1px solid var(--border, #2c2f36); border-radius: 8px; color: var(--text, #c7cbd3); padding: 6px 8px; font-size: 13px; font-family: inherit; }
.per-campo select:focus { outline: none; border-color: var(--accent-amber); }
.com-ingreso { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; border: 1px solid var(--border, #2c2f36); border-radius: 10px; padding: 10px 12px; }
.com-check { display: inline-flex; align-items: center; gap: 7px; color: var(--text, #c7cbd3); font-size: 12.5px; cursor: pointer; }
.com-nota { margin: 0; font-size: 12px; color: var(--text); line-height: 1.5; flex: 1; min-width: 220px; }
.com-nota b { color: var(--text, #c7cbd3); }
.com-aviso { border: 1px solid var(--accent-amber); background: color-mix(in srgb, var(--accent-amber) 10%, transparent); color: var(--text, #c7cbd3); border-radius: 8px; padding: 9px 11px; font-size: 12px; line-height: 1.5; }
.com-aviso--error { border-color: #ff5d5d; background: color-mix(in srgb, #ff5d5d 12%, transparent); }
.lu-btn:disabled { opacity: .4; cursor: not-allowed; }


/* Usados · modal de ingreso */
.lu-badge { display: inline-flex; align-items: center; justify-content: center; min-width: 18px; height: 18px; padding: 0 5px; margin-left: 6px; border-radius: 8px; background: var(--accent-amber); color: var(--bg, #14181d); font-size: 12px; font-weight: 700; }
.ing-lista { display: flex; flex-direction: column; gap: 6px; max-height: 340px; overflow: auto; }
.ing-item { display: grid; grid-template-columns: 92px 1fr; grid-template-rows: auto auto; gap: 2px 10px; text-align: left; background: var(--panel-2, #202940); border: 1px solid var(--border, #2c2f36); border-radius: 8px; padding: 8px 11px; cursor: pointer; font-family: inherit; }
.ing-item:hover { border-color: var(--accent-amber); }
.ing-dom { grid-row: span 2; align-self: center; font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 13px; font-weight: 700; color: var(--text); }
.ing-desc { color: var(--text, #c7cbd3); font-size: 12.5px; }
.ing-meta { color: var(--text); font-size: 12px; }
.ing-bloque { border: 1px solid var(--border, #2c2f36); border-radius: 10px; padding: 10px 12px; }
.ing-bloque-tit { font-size: 12px; font-weight: 700; color: var(--text, #c7cbd3); text-transform: uppercase; letter-spacing: .3px; margin-bottom: 8px; display: flex; gap: 8px; flex-wrap: wrap; align-items: baseline; }
.ing-bloque-nota { font-size: 12px; font-weight: 400; text-transform: none; letter-spacing: 0; color: var(--text); }
.ing-chips { display: flex; gap: 6px; flex-wrap: wrap; }
.ing-chip { background: transparent; border: 1px solid var(--border, #2c2f36); color: var(--text); border-radius: 20px; padding: 4px 11px; font-size: 12px; cursor: pointer; font-family: inherit; }
.ing-chip:hover { border-color: #4a5260; color: var(--text, #c7cbd3); }
.ing-chip--si { border-color: #3ddc97; color: var(--text); font-weight: 700; }
.com-aviso--neutro { border-color: var(--border, #2c2f36); background: transparent; color: var(--text); }

/* Usados · transferencia y bajas */
.gest-tramites { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 10px; }
.gest-tramite { border: 1px solid var(--border, #2c2f36); border-radius: 10px; padding: 10px 12px; display: flex; flex-direction: column; gap: 6px; }
.gest-tramite--hecho { border-color: #3ddc97; background: color-mix(in srgb, #3ddc97 7%, transparent); }
.gest-tramite-tit { display: flex; align-items: center; justify-content: space-between; gap: 8px; font-size: 12.5px; color: var(--text, #c7cbd3); font-weight: 700; }
.gest-tramite-est { font-size: 12px; text-transform: uppercase; letter-spacing: .3px; color: var(--text); }
.gest-tramite--hecho .gest-tramite-est { color: var(--text); }
.gest-tramite input { background: var(--panel-2, #202940); border: 1px solid var(--border, #2c2f36); border-radius: 8px; color: var(--text, #c7cbd3); padding: 6px 8px; font-size: 13px; font-family: inherit; }
.gest-tramite input:focus { outline: none; border-color: var(--accent-amber); }
.gest-limpiar { background: transparent; border: none; color: var(--text); font-size: 12px; cursor: pointer; text-align: left; padding: 0; font-family: inherit; }
.gest-limpiar:hover { color: #ff5d5d; }
.ing-item--gest .ing-item-meta { display: flex; gap: 4px; flex-wrap: wrap; }
.gest-falta { font-size: 12px; border: 1px solid #ff5d5d; color: #ff5d5d; border-radius: 20px; padding: 1px 7px; white-space: nowrap; }
.lu-inf-falta { color: #ff5d5d !important; }
.lu-inf-falta::after { content: "falta"; font-size: 12px; opacity: 1; }

.lu-guardado { font-size: 12px; color: var(--text); min-width: 74px; }

.per-btn--vender { border-color: var(--accent-amber); color: var(--text); }
.per-btn--vender:hover { background: color-mix(in srgb, var(--accent-amber) 15%, transparent); }

/* Compra y asignación de 0km */
.vn-checks { display: flex; gap: 16px; flex-wrap: wrap; margin: 10px 0 4px; }
.vn-check { display: flex; align-items: center; gap: 6px; font-size: 12px; color: var(--text, #c7cbd3); cursor: pointer; }
.vn-busca { margin-bottom: 10px; }
.vn-busca input[type=text], .vn-busca > input { width: 100%; }
.vn-criterios { display: flex; gap: 14px; margin-top: 6px; }
.vn-criterios label { font-size: 12px; color: var(--text); display: flex; align-items: center; gap: 5px; cursor: pointer; }
.vn-criterios label.active { color: var(--text); }
.vn-tabla-wrap { max-height: 260px; overflow: auto; border: 1px solid var(--border, #2c2f36); border-radius: 10px; }
.vn-tabla { width: 100%; border-collapse: collapse; font-size: 12px; }
.vn-tabla thead th { position: sticky; top: 0; background: var(--bg, #14181d); text-align: left; padding: 7px 9px;
  color: var(--text); font-size: 13px; text-transform: uppercase; letter-spacing: .5px; border-bottom: 1px solid var(--border, #2c2f36); }
.vn-tabla tbody td { padding: 6px 9px; border-bottom: 1px solid #22262d; color: var(--text, #c7cbd3); }
.vn-tabla tbody tr { cursor: pointer; }
.vn-tabla tbody tr:hover { background: var(--panel-2, #1b2027); }
.vn-tabla tbody tr.activa { background: color-mix(in srgb, var(--accent-amber) 16%, var(--bg, #14181d)); }
.vn-tabla tbody tr.activa td { color: var(--text, #f0eee9); }
.vn-mono { font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; }
.vn-estado { font-size: 12px; color: var(--text); }
.vn-vacio { padding: 20px 10px !important; text-align: center; color: var(--text); }
.vn-asig-datos { margin-top: 14px; border-top: 1px solid var(--border, #2c2f36); padding-top: 12px; }
.vn-asig-modal { max-width: 900px; }
.proc-solapas { display: flex; align-items: center; gap: 8px; margin-bottom: 12px; flex-wrap: wrap; }
.proc-solapas > button { background: transparent; border: 1px solid var(--border, #2c2f36); color: var(--text); border-radius: 8px;
  padding: 6px 12px; font-family: inherit; font-size: 12px; cursor: pointer; }
.proc-solapas > button.active { background: color-mix(in srgb, var(--accent-amber) 16%, transparent);
  border-color: var(--accent-amber); color: var(--text); font-weight: 700; }
.proc-buscar { flex: 1 1 160px; min-width: 130px; }
.proc-check-col { width: 34px; text-align: center; }
.proc-elegidas { display: flex; align-items: center; justify-content: space-between; gap: 10px;
  font-size: 12px; color: var(--text); font-weight: 700; margin-bottom: 10px; }
.proc-por-unidad { display: flex; flex-direction: column; gap: 10px; margin-top: 12px;
  max-height: 320px; overflow-y: auto; }
.proc-unidad-bloque { border: 1px solid var(--border, #2c2f36); border-radius: 10px; padding: 10px 12px; background: var(--bg, #14181d); }
.proc-unidad-tit { font-size: 12px; color: var(--text, #f0eee9); font-weight: 700; margin-bottom: 8px; }
.vn-bloque-titulo { display: flex; align-items: center; justify-content: space-between; gap: 10px;
  font-size: 12px; color: var(--text, #f0eee9); font-weight: 700; margin: 0 0 8px; }
.vn-bloque-titulo--sep { margin-top: 20px; padding-top: 16px; border-top: 1px solid var(--border, #2c2f36); }
.vn-ok { font-size: 12px; color: var(--text); margin: 0 0 4px; }
.vn-celda-carga { display: flex; gap: 6px; align-items: center; }
.vn-celda-carga input { width: 110px; }
.vn-resumen { display: flex; align-items: center; gap: 18px; flex-wrap: wrap; margin-bottom: 12px;
  background: var(--bg, #14181d); border: 1px solid var(--border, #2c2f36); border-radius: 10px; padding: 10px 14px; }
.vn-resumen > div { display: flex; flex-direction: column; }
.vn-resumen span { font-size: 12px; color: var(--text); text-transform: uppercase; letter-spacing: .5px; }
.vn-resumen b { font-size: 15px; color: var(--text, #f0eee9); }
.vn-rojo { color: #f17176; }
.vn-fila-vencida td { background: color-mix(in srgb, #e5484d 10%, transparent); }
.vn-pagada { font-size: 12px; color: var(--text); }
.com-ayuda--alerta { color: var(--text); }

/* Franjas horizontales de procesos (Nuevos / Usados) */
.mp-franjas { display: flex; flex-direction: column; gap: 6px; margin: 0 0 14px; }
.mp-franja { display: flex; align-items: center; gap: 10px; background: var(--bg, #14181d); border: 1px solid var(--border, #2c2f36);
  border-radius: 10px; padding: 6px 10px; min-width: 0; }
.mp-franja-tag { flex: 0 0 auto; font-size: 12px; font-weight: 700; letter-spacing: .6px; text-transform: uppercase;
  border-radius: 6px; padding: 4px 10px; cursor: default; }
.mp-franja--nuevos .mp-franja-tag { background: color-mix(in srgb, var(--accent-amber) 18%, var(--bg, #14181d)); color: var(--text); }
.mp-franja--usados .mp-franja-tag { background: color-mix(in srgb, #57B6AC 18%, var(--bg, #14181d)); color: var(--text); }
.mp-franja-items { flex: 1 1 auto; min-width: 0; display: flex; align-items: center; gap: 4px;
  overflow-x: auto; scrollbar-width: thin; scrollbar-color: var(--border, #2c2f36) transparent; padding-bottom: 2px; }
.mp-franja-items::-webkit-scrollbar { height: 6px; }
.mp-franja-items::-webkit-scrollbar-track { background: transparent; }
.mp-franja-items::-webkit-scrollbar-thumb { background: var(--border, #2c2f36); border-radius: 6px; }
.mp-franja-items:hover::-webkit-scrollbar-thumb { background: var(--panel, #3d4149); }
.mp-chip { flex: 0 0 auto; display: inline-flex; align-items: center; gap: 6px; background: transparent;
  border: 1px solid transparent; color: var(--text, #c7cbd3); border-radius: 8px; padding: 5px 9px; cursor: pointer;
  font-family: inherit; font-size: 12px; white-space: nowrap; }
.mp-chip:hover:not(:disabled) { background: var(--panel-2, #1b2027); border-color: var(--border, #2c2f36); }
.mp-chip:disabled { color: var(--text); cursor: default; }
.mp-chip--modal { color: var(--text, #f0eee9); }
.mp-chip--pantalla { color: var(--text); }
.mp-icono { font-size: 13px; line-height: 1; }
.mp-label { line-height: 1; }
.mp-pend { font-size: 12px; color: var(--text); border: 1px solid var(--border, #2c2f36); border-radius: 20px; padding: 1px 5px; }
.mp-aviso { position: fixed; left: 50%; transform: translateX(-50%); bottom: 22px; z-index: 200; background: var(--panel-2, #1b2027);
  border: 1px solid var(--accent-amber); color: var(--text, #f0eee9); border-radius: 10px; padding: 10px 16px; font-size: 12.5px;
  box-shadow: 0 8px 28px rgba(0,0,0,.5); max-width: calc(90vw / var(--tcg-z, 1)); }


/* Buscador multi-campo */
.bu-input { width: 100%; background: var(--panel-2, #202940); border: 1px solid var(--border, #2c2f36); border-radius: 8px; color: var(--text, #c7cbd3); padding: 9px 11px; font-size: 13px; font-family: inherit; }
.bu-input:focus { outline: none; border-color: var(--accent-amber); }
.bu-chips { display: flex; align-items: center; gap: 5px; flex-wrap: wrap; margin: 7px 0; }
.bu-chip { background: transparent; border: 1px solid var(--border, #2c2f36); color: var(--text); border-radius: 20px; padding: 3px 10px; font-size: 12px; cursor: pointer; font-family: inherit; }
.bu-chip--activo { border-color: var(--accent-amber); color: var(--text); font-weight: 700; }
.bu-ayuda { font-size: 12px; color: var(--text); margin-left: 4px; }
.bu-lista { max-height: 250px; overflow-y: auto; border: 1px solid var(--border, #2c2f36); border-radius: 8px; }
.bu-item { display: grid; grid-template-columns: 96px 1fr 190px; gap: 9px; width: 100%; text-align: left; background: transparent; border: none; border-bottom: 1px solid #24262C; color: var(--text, #c7cbd3); padding: 8px 10px; cursor: pointer; font-family: inherit; font-size: 12px; align-items: center; }
.bu-item--cursor { background: color-mix(in srgb, var(--accent-amber) 12%, transparent); }
.bu-dom { font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; color: var(--text); }
.bu-desc { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bu-meta { color: var(--text); display: flex; flex-direction: column; gap: 1px; overflow: hidden; }
.bu-donde { font-size: 12px; color: var(--text); }
.bu-vacio { color: var(--text); font-size: 12px; padding: 18px; text-align: center; margin: 0; }

/* Panel de estado de la unidad */
.pe { border: 1px solid var(--border, #2c2f36); border-radius: 10px; padding: 11px 12px; background: var(--panel-3, #12151a); font-size: 12px; overflow-y: auto; }
.pe--vacio { color: var(--text); text-align: center; padding: 24px 12px; }
.pe-cab { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; }
.pe-dom { font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 15px; font-weight: 700; color: var(--text); }
.pe-etapa { font-size: 12px; text-transform: uppercase; letter-spacing: .4px; color: var(--text, #c7cbd3); border: 1px solid var(--border, #2c2f36); border-radius: 20px; padding: 2px 8px; }
.pe-sub { color: var(--text); font-size: 12px; margin: 2px 0 10px; line-height: 1.4; }
.pe-bloque { border-top: 1px solid #24262C; padding-top: 7px; margin-top: 7px; }
.pe-tit { font-size: 12px; font-weight: 700; color: var(--text); text-transform: uppercase; letter-spacing: .4px; margin-bottom: 4px; }
.pe-fila { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; padding: 2px 0; }
.pe-k { color: var(--text); font-size: 12px; flex: 0 0 auto; }
.pe-v { color: var(--text, #c7cbd3); text-align: right; overflow-wrap: anywhere; }
.pe-v--ok { color: var(--text); }
.pe-v--alerta { color: #ff5d5d; }

.mod-split { display: grid; grid-template-columns: minmax(0, 1fr) 300px; gap: 14px; align-items: start; }
.mod-form { display: flex; flex-direction: column; gap: 12px; min-width: 0; }
.mod-split .pe { max-height: calc(52vh / var(--tcg-z, 1)); }


/* Estimación de Patentamientos · recorrido compacto y tabla más grande */
.pat-section-title { margin: 2px 0 6px !important; font-size: 12px !important; }
.pat-controlrow { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 4px; }
.pat-seg button { padding: 4px 9px !important; font-size: 12px !important; }
/* Los meses van en una sola línea: el punto y el nombre uno al lado del otro. */
.pat-route { padding: 2px 2px; }
.pat-route-stop { flex-direction: row !important; align-items: center; gap: 5px !important; padding: 3px 8px !important; }
.pat-route-dot { width: 7px !important; height: 7px !important; }
.pat-route-label { font-size: 12px !important; }

.pat-scroll-arriba { overflow-x: auto; overflow-y: hidden; position: sticky; top: 0; z-index: 5;
  background: var(--panel, #14181d); border-bottom: 1px solid var(--border, #2C2F36); }
.pat-scroll-arriba::-webkit-scrollbar { height: 12px; }
.pat-scroll-arriba::-webkit-scrollbar-track { background: var(--panel-2, #1b2027); }
.pat-scroll-arriba::-webkit-scrollbar-thumb { background: var(--panel, #4a5260); border-radius: 8px; }
.pat-scroll-arriba::-webkit-scrollbar-thumb:hover { background: var(--accent-amber); }
.pat-table-scroll::-webkit-scrollbar { height: 12px; }
.pat-table-scroll::-webkit-scrollbar-thumb { background: var(--panel, #4a5260); border-radius: 8px; }
/* Fijada, la tabla ocupa lo que queda de pantalla y la rueda no arrastra la página. */
.pat-table-scroll--fijo { max-height: calc(calc(100dvh / var(--tcg-z, 1)) - 300px) !important; overscroll-behavior: contain; }
.pat-btn { background: transparent; border: 1px solid var(--border, #2C2F36); color: var(--text, #C7CBD3);
  border-radius: 8px; padding: 5px 10px; font-size: 12px; cursor: pointer; font-family: inherit; }
.pat-btn:hover { border-color: var(--accent-amber); }

.pat-det-barra { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin-bottom: 10px; }
.pat-det-scroll { overflow: auto; max-height: calc(58vh / var(--tcg-z, 1)); border: 1px solid var(--border, #2C2F36); border-radius: 8px; }
.pat-det-tabla { width: 100%; border-collapse: collapse; font-size: 12px; white-space: nowrap; }
.pat-det-tabla th { position: sticky; top: 0; background: var(--panel-2, #1b2027); text-align: center; padding: 6px 8px; font-size: 13px;
  text-transform: uppercase; letter-spacing: .3px; color: var(--text); border-bottom: 1px solid var(--border, #2c2f36); }
.pat-det-tabla td { padding: 5px 8px; border-bottom: 1px solid #24262C; color: var(--text, #c7cbd3); }
.pat-det-tabla tbody tr { cursor: pointer; }
.pat-det-tabla tbody tr:hover td { background: color-mix(in srgb, var(--accent-amber) 9%, transparent); }
.pat-det-num { text-align: right; font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; }
.pat-modal { max-width: 900px !important; }

/* ============================================================
   GESTIÓN DE VENTAS — módulo de gestión (pantalla principal)
   Réplica de la organización del sistema clásico: menú arriba,
   accesos con ícono a la izquierda, área de trabajo al centro.
   Todo prefijado con .gv-root para no pisar el resto de la app.
   ============================================================ */
.gv-root {
  --gv-side-w: 150px;
  display: flex; flex-direction: column;
  border: 1px solid var(--border, #252d3f);
  border-radius: 10px; overflow: hidden;
  background: var(--panel, #1b2233);
  min-height: calc(calc(100dvh / var(--tcg-z, 1)) - 190px);
}

/* --- Barra de menú superior --- */
.gv-root .gv-menubar {
  display: flex; align-items: center; gap: 2px; flex-wrap: wrap;
  padding: 0 8px; min-height: 34px;
  background: var(--panel, #161c2a); border-bottom: 1px solid var(--border, #252d3f);
  position: relative; z-index: 30;
}
.gv-root .gv-menu-drop-flecha { font-size: 12px; opacity: 1; }

/* --- Chips de concesionario (vista unificada) --- */
.gv-root .gv-chips {
  display: flex; align-items: center; gap: 7px; flex-wrap: wrap;
  padding: 7px 10px; background: var(--panel, #191d23); border-bottom: 1px solid var(--border, #252d3f);
}
.gv-root .gv-chips-label { font-size: 12px; text-transform: uppercase; letter-spacing: .4px; color: var(--text); }
.gv-root .gv-chip {
  background: transparent; border: 1px solid var(--border, #252d3f); color: var(--text, #ecf0f4);
  font-family: inherit; font-size: 12px; padding: 4px 10px; border-radius: 999px; cursor: pointer;
}
.gv-root .gv-chip:hover { border-color: var(--accent-amber, #f2c200); }
.gv-root .gv-chip--on {
  border-color: var(--accent-amber, #f2c200);
  background: color-mix(in srgb, var(--accent-amber, #f2c200) 16%, transparent);
  color: var(--text);
}
.gv-root .gv-chip-marca { font-size: 12px; opacity: 1; margin-left: 4px; }

/* --- Cuerpo --- */
.gv-root .gv-body { display: flex; flex: 1; min-height: 0; }

/* --- Barra lateral --- */
.gv-root .gv-side {
  width: var(--gv-side-w); flex: 0 0 var(--gv-side-w);
  background: var(--panel, #191d23); border-right: 1px solid var(--border, #252d3f);
  display: flex; flex-direction: column; overflow-y: auto;
}

/* --- Área de trabajo --- */
.gv-root .gv-main { flex: 1; min-width: 0; padding: 14px; overflow: auto; }
.gv-root .gv-main--informe { padding: 0; overflow: hidden; display: flex; min-height: 0; }

.gv-root .gv-vacio { display: flex; flex-direction: column; align-items: center; text-align: center; padding: 26px 14px; }
.gv-root .gv-vacio-logo { height: 52px; width: auto; opacity: .5; margin-bottom: 12px; }
.gv-root .gv-vacio-titulo {
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 19px; letter-spacing: .5px;
  text-transform: uppercase; margin: 0 0 7px; color: var(--text, #ecf0f4);
}
.gv-root .gv-vacio-texto { font-size: 12.5px; color: var(--text); max-width: 520px; margin: 0 0 18px; line-height: 1.5; }
.gv-root .gv-vacio-guia {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));
  gap: 9px; width: 100%; max-width: 760px;
}
.gv-root .gv-vacio-guia-item {
  border: 1px solid var(--border, #252d3f); border-radius: 8px; background: var(--panel, #191d23);
  padding: 10px 12px; text-align: left; display: flex; flex-direction: column; gap: 4px;
}
.gv-root .gv-vacio-guia-item b { font-size: 12px; color: var(--text); text-transform: uppercase; letter-spacing: .4px; }
.gv-root .gv-vacio-guia-item span { font-size: 12px; color: var(--text); line-height: 1.45; }

.gv-root .gv-panel { border: 1px solid var(--border, #252d3f); border-radius: 10px; background: var(--panel, #191d23); overflow: hidden; }
.gv-root .gv-panel-head {
  display: flex; align-items: flex-start; gap: 10px;
  padding: 11px 13px; border-bottom: 1px solid var(--border, #252d3f); background: var(--panel, #1b2233);
}
.gv-root .gv-panel-head-txt { flex: 1; min-width: 0; }
.gv-root .gv-panel-origen { font-size: 12px; text-transform: uppercase; letter-spacing: .5px; color: var(--text); margin-bottom: 3px; }
.gv-root .gv-panel-titulo {
  display: flex; align-items: center; gap: 7px; margin: 0;
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 16px; letter-spacing: .4px; text-transform: uppercase; color: var(--text, #ecf0f4);
}
.gv-root .gv-panel-ico { color: var(--text); display: flex; }
.gv-root .gv-panel-cerrar {
  background: transparent; border: 1px solid var(--border, #252d3f); color: var(--text);
  border-radius: 8px; padding: 5px 7px; cursor: pointer; display: flex;
}
.gv-root .gv-panel-cerrar:hover { border-color: #ee776c; color: #ee776c; }
.gv-root .gv-panel-body { padding: 22px 14px 26px; }
.gv-root .gv-panel-pendiente { font-size: 12.5px; color: var(--text, #ecf0f4); margin: 0 0 7px; line-height: 1.5; }
.gv-root .gv-panel-pendiente--muted { color: var(--text); font-size: 12px; margin: 0; }



/* ------------------------------------------------------------------ */
/* GESTIÓN DE VENTAS — ajustes de estética.                            */
/* Van al final del bloque a propósito: reglas del mismo peso escritas  */
/* antes no pisan a las de arriba.                                      */
/* ------------------------------------------------------------------ */
.gv-root { --gv-side-w: 172px; }

/* Menú de arriba (Tablas / Informes / Salir): más grande y más marcado. */
.gv-root .gv-menubar { min-height: 46px; padding: 0 12px; gap: 4px; }

/* Concesionarios: botones grandes, no chips finitos. */
.gv-root .gv-chips { padding: 11px 12px; gap: 10px; }
.gv-root .gv-chips-label { font-size: 12px; letter-spacing: .6px; }
.gv-root .gv-chip {
  font-size: 14px; font-weight: 600; padding: 9px 20px; border-radius: 10px;
  display: inline-flex; align-items: center; gap: 8px; transition: background .15s, border-color .15s, transform .1s;
}
.gv-root .gv-chip:hover { background: var(--panel-2, #202940); transform: translateY(-1px); }
.gv-root .gv-chip-marca { font-size: 12px; opacity: 1; margin-left: 0; }
.gv-root .gv-chip--on { box-shadow: 0 0 0 1px var(--accent-amber, #f2c200) inset; }

/* Barra lateral: iconos y texto más grandes, y el acceso activo bien visible. */
.gv-root .gv-side-head { font-size: 13.5px; padding: 12px 12px; letter-spacing: .7px; }

/* Pantalla de inicio: sin cartelería, con el fondo del proyecto. */
.gv-root .gv-main { padding: 0; }
.gv-root .gv-panel { padding: 14px; }
.gv-root .gv-vacio {
  position: relative; justify-content: center; min-height: 100%; padding: 40px 20px;
  background:
    radial-gradient(120% 90% at 50% 0%, rgba(224,164,58,.07) 0%, transparent 58%),
    linear-gradient(180deg, var(--panel, #161c2a) 0%, #12161b 100%);
}
.gv-root .gv-vacio-fondo {
  position: absolute; inset: 0; pointer-events: none; opacity: 1;
  background-image:
    linear-gradient(rgba(255,255,255,.022) 1px, transparent 1px),
    linear-gradient(90deg, rgba(255,255,255,.022) 1px, transparent 1px);
  background-size: 46px 46px;
  mask-image: radial-gradient(75% 65% at 50% 45%, #000 0%, transparent 100%);
  -webkit-mask-image: radial-gradient(75% 65% at 50% 45%, #000 0%, transparent 100%);
}
.gv-root .gv-vacio-logo { position: relative; height: 92px; opacity: .8; margin-bottom: 18px; }
.gv-root .gv-vacio-titulo { position: relative; font-size: 30px; letter-spacing: 2.5px; margin: 0; color: var(--text); }


/* ---- Compras de 0km: lista + formulario ---- */
.cvn-modal { max-width: 1080px; width: calc(96vw / var(--tcg-z, 1)); }
.cvn-barra {
  display: flex; align-items: flex-end; gap: 8px; flex-wrap: wrap;
  padding: 10px 14px; border-bottom: 1px solid var(--border, #252d3f);
}
.cvn-buscar { display: flex; flex-direction: column; gap: 3px; flex: 1; min-width: 200px; }
.cvn-buscar span { font-size: 12px; text-transform: uppercase; letter-spacing: .4px; color: var(--text); }
.cvn-buscar input {
  background: var(--panel-2, #161c2a); border: 1px solid var(--border, #252d3f); border-radius: 8px;
  padding: 7px 9px; color: inherit; font-size: 13px; width: 100%;
}
.cvn-tabla-cont {
  overflow: auto; max-height: calc(calc(100dvh / var(--tcg-z, 1)) - 300px);
  overscroll-behavior: contain; scrollbar-width: auto;
}
.cvn-tabla-cont::-webkit-scrollbar { height: 14px; width: 14px; }
.cvn-tabla { width: 100%; border-collapse: collapse; font-size: 12.5px; }
.cvn-tabla th {
  position: sticky; top: 0; z-index: 2;
  background: var(--panel-2, #161c2a); text-align: center;
  padding: 7px 9px; font-size: 13px; text-transform: uppercase; letter-spacing: .4px;
  color: var(--text); border-bottom: 1px solid var(--border, #252d3f); white-space: nowrap;
}
.cvn-tabla td { padding: 7px 9px; border-bottom: 1px solid #21262e; white-space: nowrap; }
.cvn-tabla tbody tr { cursor: pointer; }
.cvn-tabla tbody tr:hover { background: color-mix(in srgb, var(--accent-amber, #f2c200) 8%, transparent); }
.cvn-fila--sel, .cvn-tabla tbody tr.cvn-fila--sel:hover {
  background: color-mix(in srgb, var(--accent-amber, #f2c200) 20%, transparent);
}
.cvn-interno { font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; }
.cvn-pendiente { color: var(--text); font-style: italic; font-family: inherit; }
.cvn-vacio { text-align: center; padding: 26px 10px; color: var(--text); font-style: italic; }
.cvn-pie {
  display: flex; justify-content: space-between; align-items: center; gap: 10px;
  padding: 8px 14px; border-top: 1px solid var(--border, #252d3f);
  font-size: 12px; color: var(--text);
}
.cvn-pie-nota { font-style: italic; }
.cvn-cat-elegir, .cvn-cat-alta { display: flex; gap: 5px; align-items: center; }
.cvn-cat-elegir select, .cvn-cat-alta input { flex: 1; min-width: 0; }
.per-campo--check { flex-direction: row; align-items: center; gap: 7px; }


/* ---- Venta de 0km ---- */
.vnv-modal { max-width: 1316px; width: calc(97vw / var(--tcg-z, 1)); }
.vnv-buscador {
  display: flex; gap: 14px; align-items: flex-end; flex-wrap: wrap;
  padding: 10px 14px; border-bottom: 1px solid var(--border, #252d3f);
}
.vnv-resultado-est { margin-left: auto; font-size: 10.5px; color: var(--text); }
.vnv-cuerpo {
  display: grid; grid-template-columns: 1fr 1fr 1.05fr; gap: 16px;
  padding: 14px; overflow: auto; max-height: calc(calc(100dvh / var(--tcg-z, 1)) - 300px); overscroll-behavior: contain;
}
.vnv-col { display: flex; flex-direction: column; gap: 8px; }
.vnv-fila2 { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.vnv-fila3 { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 8px; }
.per-campo--calc strong {
  background: var(--panel-2, #161c2a); border: 1px dashed var(--border, #252d3f); border-radius: 8px;
  padding: 7px 9px; font-size: 13px; color: var(--text);
}
.vnv-usado { border: 1px solid var(--border, #252d3f); border-radius: 8px; padding: 9px; display: flex; flex-direction: column; gap: 7px; }
.vnv-usado-cab { display: flex; justify-content: space-between; align-items: center; gap: 8px; }
.vnv-usado-cab span { font-size: 10px; text-transform: uppercase; letter-spacing: .4px; color: var(--text); }
.vnv-unidad {
  border: 1px solid var(--border, #252d3f); border-radius: 8px; padding: 11px;
  display: flex; flex-direction: column; gap: 7px;
  background: color-mix(in srgb, var(--panel-2, #161c2a) 60%, transparent);
  align-self: start;
}
.vnv-unidad-cab { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.vnv-dato { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.vnv-dato > span { font-size: 10.5px; text-transform: uppercase; letter-spacing: .4px; color: var(--text); }
.vnv-dato > strong { font-size: 12.5px; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.vnv-dato--edit input {
  background: var(--panel-2, #161c2a); border: 1px solid var(--accent-amber, #f2c200);
  border-radius: 6px; padding: 4px 7px; color: inherit; font-size: 12.5px;
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; width: 100%;
}
.vnv-nota { font-size: 10.5px; color: var(--text); line-height: 1.35; font-style: italic; }
.vnv-nota--alerta { color: var(--text); font-style: normal; }
.vnv-aviso { margin: 9px 14px 0; padding: 7px 10px; border-radius: 8px; font-size: 12px; }
.vnv-aviso--anulada { background: color-mix(in srgb, #d9534f 18%, transparent); border: 1px solid #d9534f; }
.vnv-pie { flex-wrap: wrap; gap: 7px; }
.vnv-fecha-inline { display: inline-flex; gap: 5px; align-items: center; }
.vnv-fecha-inline input {
  background: var(--panel-2, #161c2a); border: 1px solid var(--border, #252d3f);
  border-radius: 6px; padding: 5px 7px; color: inherit; font-size: 12px;
}


.vnv-usado-alta { display: flex; flex-direction: column; gap: 7px; }
.vnv-usado-alta-pie { display: flex; gap: 6px; justify-content: flex-end; }
.com-ayuda--alerta { color: var(--text); }

/* ---- Buscador por aproximacion ---- */
.bap { position: relative; flex: 1; min-width: 220px; }
.bap-input {
  width: 100%; background: var(--panel-2, #161c2a); border: 1px solid var(--border, #252d3f);
  border-radius: 8px; padding: 9px 11px; color: inherit; font-size: 13px;
}
.bap-input:focus { border-color: var(--accent-amber, #f2c200); outline: none; }
.bap-lista {
  position: absolute; top: calc(100% + 4px); left: 0; right: 0; z-index: 40;
  background: var(--panel, #12161b); border: 1px solid var(--border, #252d3f); border-radius: 8px;
  max-height: 300px; overflow: auto; box-shadow: 0 10px 26px rgba(0,0,0,.5);
}
.bap-item {
  display: flex; gap: 9px; align-items: center; width: 100%; text-align: left;
  background: none; border: none; border-bottom: 1px solid var(--panel-2, #21262e);
  padding: 8px 11px; color: inherit; font-size: 12.5px; cursor: pointer;
}
.bap-item:last-child { border-bottom: none; }
.bap-item:hover { background: color-mix(in srgb, var(--accent-amber, #f2c200) 14%, transparent); }
.bap-item strong { font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; min-width: 84px; flex-shrink: 0; }
.bap-item > span:not(.bap-donde):not(.vnv-resultado-est) {
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.bap-donde {
  margin-left: auto; flex-shrink: 0; font-size: 10.5px; text-transform: uppercase;
  letter-spacing: .4px; color: var(--text);
  border: 1px solid var(--border, #252d3f); border-radius: 999px; padding: 1px 7px;
}
.bap-vacio { padding: 14px 11px; text-align: center; color: var(--text); font-style: italic; font-size: 12px; }
.vnv-buscador { align-items: center; }

/* ---- Compactar Compras y Ventas de 0km ----
   Va al final del bloque de estilos para ganarle al CSS de arriba.
   Criterio: etiqueta al costado del campo (como el sistema original) en vez
   de arriba, y todo lo que no es dato ocupa lo mínimo. */
.cvn-modal .per-cab, .vnv-modal .per-cab { padding: 8px 12px; }
.cvn-modal .per-titulo, .vnv-modal .per-titulo { font-size: 15px; margin: 0; }
.cvn-modal .per-sub, .vnv-modal .per-sub { font-size: 12px; margin: 1px 0 0; }
.cvn-modal .per-pie, .vnv-modal .per-pie { padding: 7px 12px; }

.vnv-buscador { padding: 7px 12px; gap: 8px; }
.bap-input { padding: 6px 9px; font-size: 12.5px; }

.vnv-cuerpo { padding: 10px 12px; gap: 12px; }
.vnv-col { gap: 3px; }

/* Etiqueta a la izquierda, campo a la derecha */
.vnv-col .per-campo, .vnv-usado .per-campo {
  display: grid; grid-template-columns: 104px 1fr; align-items: center;
  gap: 7px; margin: 0;
}
.vnv-col .per-campo > span, .vnv-usado .per-campo > span {
  font-size: 10.5px; text-align: right; text-transform: none; letter-spacing: 0;
  line-height: 1.2; white-space: normal;
}
.vnv-col .per-campo > input,
.vnv-col .per-campo > select,
.vnv-usado .per-campo > input,
.vnv-usado > select {
  padding: 4px 7px; font-size: 12px; min-height: 0; height: auto;
}
.vnv-col .per-campo > small, .vnv-usado .per-campo > small { grid-column: 2; margin-top: -1px; }
.vnv-col .cvn-cat-elegir, .vnv-col .cvn-cat-alta, .vnv-usado .cvn-cat-elegir { gap: 4px; }
.vnv-col .cvn-cat-elegir select { padding: 4px 7px; font-size: 12px; }
.vnv-col .lu-btn--sm, .vnv-usado .lu-btn--sm { padding: 3px 7px; font-size: 11px; }
.per-campo--calc strong { padding: 4px 7px; font-size: 12.5px; }
.vnv-col .com-ayuda { font-size: 10.5px; line-height: 1.25; }

.vnv-fila2 { gap: 6px; }
.vnv-usado { padding: 7px; gap: 5px; }
.vnv-usado-cab span { font-size: 10.5px; }

/* Panel de la unidad */
.vnv-unidad { padding: 8px 9px; gap: 4px; }
.vnv-unidad-cab, .vnv-unidad .vnv-fila2, .vnv-unidad .vnv-fila3 { gap: 6px; }
.vnv-dato > span { font-size: 10.5px; }
.vnv-dato > strong { font-size: 11.5px; }
.vnv-dato--edit input { padding: 3px 6px; font-size: 11.5px; }
.vnv-nota { font-size: 10.5px; }
/* Apagado, pero legible. Al 55% el rótulo daba 2,90 de contraste en tema
   claro —el mínimo es 4,5— y el modal entero se veía velado: es la «letra
   que no se nota» del modo claro. Medido componiendo el color sobre el
   fondo: 0,75 es el primer valor que pasa, y sigue leyéndose como
   «todavía no elegiste la unidad». */
.vnv-cuerpo--vacio .vnv-col, .vnv-cuerpo--vacio .vnv-unidad { opacity: 1; }

/* Compras */
.cvn-barra { padding: 7px 12px; gap: 6px; }
.cvn-buscar span { font-size: 12px; }
.cvn-buscar input { padding: 5px 8px; font-size: 13px; }
.cvn-tabla th { padding: 5px 8px; font-size: 13px; }
.cvn-tabla td { padding: 5px 8px; font-size: 13px; }
.cvn-pie { padding: 6px 12px; font-size: 12px; }
.cvn-modal .com-cuerpo { padding: 10px 12px; }
.cvn-modal .com-grid, .com-modal .com-grid { gap: 7px 10px; }
.com-modal .per-campo { margin: 0; }
.com-modal .per-campo > span { font-size: 12px; }
.com-modal .per-campo > input, .com-modal .per-campo > select { padding: 5px 7px; font-size: 13px; }
.com-modal .vn-checks { gap: 12px; margin: 6px 0; }
.com-modal .com-ayuda { font-size: 12px; line-height: 1.25; }



/* Mes/año en un solo campo, para que no desborde sobre el panel de la derecha */
.vnv-mesanio { display: grid; grid-template-columns: 46px 8px 1fr; align-items: center; gap: 3px; min-width: 0; }
.vnv-mesanio > span { text-align: center; color: var(--text); font-size: 11px; }
.vnv-mesanio input { min-width: 0; width: 100%; padding: 4px 6px; font-size: 12px; }

/* El panel de datos existentes llega hasta abajo y no se cruza con la columna
   del medio: cada columna tiene su propio ancho mínimo y no se desborda. */
.vnv-unidad { align-self: stretch; }
.vnv-cuerpo { grid-template-columns: minmax(0,1fr) minmax(0,1fr) minmax(250px,.95fr); align-items: stretch; }
.vnv-col { min-width: 0; }
.vnv-col .per-campo > input, .vnv-col .per-campo > select,
.vnv-col .cvn-cat-elegir, .vnv-col .cvn-cat-elegir select { min-width: 0; max-width: 100%; }

/* Dos colores: lo que ya existe vs. lo que se carga.
   Mismo criterio que en el sistema de referencia. */
.pnl-existente {
  background: color-mix(in srgb, #4a90d9 12%, transparent);
  border: 1px solid color-mix(in srgb, #4a90d9 34%, transparent);
  border-radius: 8px;
}
.pnl-editable {
  background: color-mix(in srgb, var(--panel-2, #161c2a) 70%, transparent);
  border: 1px solid var(--border, #252d3f); border-radius: 8px;
}
/* Rótulo de los paneles de carga. Antes era un texto gris suelto, distinto
   del rótulo de sección del resto del módulo. Ahora es la misma banda con el
   color del concesionario, así todas las pantallas se leen igual. */
.pnl-titulo {
  display: inline-block; margin: 8px 9px 5px; padding: 3px 8px; border-radius: 6px;
  background: var(--vnv-marca, #6c7684); color: var(--vnv-marca-txt, #fff);
  font-size: 12px; font-weight: 700; letter-spacing: .5px; text-transform: uppercase;
}
/* El panel de una unidad que ya existía se distingue por el borde, no por el
   color del rótulo: si no, perdería el color del concesionario. */
.pnl-existente .pnl-titulo { color: var(--vnv-marca-txt, #fff); }

/* ---- Ingreso de stock / Reserva / Cambio de lugar ---- */
.ing-modal { max-width: 1080px; width: calc(96vw / var(--tcg-z, 1)); }
.ing-cuenta { font-size: 12px; color: var(--text); white-space: nowrap; }
.ing-tabla-cont {
  overflow: auto; max-height: calc(calc(100dvh / var(--tcg-z, 1)) - 430px); min-height: 120px;
  overscroll-behavior: contain; border-bottom: 1px solid var(--border, #252d3f);
}
.ing-tabla-cont::-webkit-scrollbar { height: 12px; width: 12px; }
.ing-detalle { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; padding: 10px 12px; }
.ing-pnl { padding: 0 0 8px; margin: 0 12px 10px; }
.ing-detalle .ing-pnl { margin: 0; }
.ing-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 6px 10px; padding: 6px 9px 0; }
.ing-grid--edit .per-campo {
  display: grid; grid-template-columns: 108px 1fr; align-items: center; gap: 7px; margin: 0;
}
.ing-grid--edit .per-campo > span { font-size: 12px; text-align: right; text-transform: none; letter-spacing: 0; }
.ing-grid--edit .per-campo > input, .ing-grid--edit .per-campo > select { padding: 4px 7px; font-size: 13px; }
.ing-grid--edit .per-campo > small { grid-column: 2; }
.ing-grid--edit .cvn-cat-elegir select { padding: 4px 7px; font-size: 13px; }
.res-barra { gap: 12px; }
.res-toggle { display: flex; align-items: center; gap: 6px; cursor: pointer; white-space: nowrap; font-size: 12px; }
.res-toggle input { width: 15px; height: 15px; accent-color: var(--accent-amber, #f2c200); }
.res-pie-datos { margin-top: 10px; }


/* ---- Segunda pasada de compactado: Ventas de 0km ----
   Objetivo: que entre en pantalla sin scroll y sirva también para el botón
   "nueva" del Registro de Ventas. */
.vnv-modal { max-width: 1156px; }
.vnv-modal .per-cab { padding: 6px 10px; }
.vnv-modal .per-titulo { font-size: 13.5px; }
.vnv-modal .per-sub { font-size: 10.5px; }
.vnv-modal .per-pie { padding: 6px 10px; gap: 6px; }
.vnv-buscador { padding: 5px 10px; }
.vnv-modal .bap-input { padding: 5px 8px; font-size: 12px; }

.vnv-cuerpo { padding: 8px 10px; gap: 9px; }
.vnv-col { gap: 2px; }
.vnv-col .per-campo, .vnv-usado .per-campo { grid-template-columns: 88px 1fr; gap: 5px; }
.vnv-col .per-campo > span, .vnv-usado .per-campo > span { font-size: 10.5px; }
.vnv-col .per-campo > input,
.vnv-col .per-campo > select,
.vnv-col .cvn-cat-elegir select,
.vnv-usado .per-campo > input,
.vnv-usado > select,
.vnv-mesanio input { padding: 3px 6px; font-size: 11.5px; }
.per-campo--calc strong { padding: 3px 6px; font-size: 12px; }
.vnv-col .com-ayuda { font-size: 10.5px; line-height: 1.2; }
.vnv-usado { padding: 6px; gap: 4px; }
.vnv-unidad { padding: 7px 8px; gap: 3px; }
.vnv-dato > span { font-size: 10px; }
.vnv-dato > strong { font-size: 11px; }
.vnv-modal .lu-btn { padding: 5px 10px; font-size: 11.5px; }
.vnv-modal .lu-btn--sm { padding: 2px 6px; font-size: 10.5px; }



/* Punto de estado en los accesos: verde = rehecho, rojo = modal viejo */

/* ---- Modo claro de los modales ----
   Solo dentro del modal marcado: el resto de TCG sigue oscuro. */
.mo-cab-btns { display: flex; gap: 6px; align-items: center; }
.mo-tema { padding: 4px 8px !important; font-size: 13px !important; line-height: 1; }

.mo-claro {
  --panel: #ffffff; --panel-2: #f2f4f7; --panel-3: #eaedf2; --text-muted: #000000;
  /* Faltaba «--text», y es la causa de que el buscador saliera velado en
     las tres casas. El tema claro pisaba «--panel» a blanco pero dejaba la
     tinta del tema oscuro (#ecf0f4, casi blanca): todo lo que se pinta con
     «background: var(--panel); color: var(--text)» —el campo de búsqueda,
     entre otros— quedaba blanco sobre blanco, 1,04 de contraste. Es el
     mismo #1f2937 que esta misma regla ya declara dos renglones abajo. */
  --text: #000000; --border: #d7dbe0;
  /* Mismo caso que «.ivj-claro»: sin «--bg» lo que se pinte con el fondo del
     tema sale oscuro adentro de un modal claro. */
  --bg: #ffffff;
  background: #ffffff; color: #000;
}
.mo-claro .per-cab, .mo-claro .per-pie,
.mo-claro .cvn-barra, .mo-claro .vnv-buscador,
.mo-claro .cvn-pie, .mo-claro .ing-tabla-cont { border-color: #d7dbe0; }
/* 23/09/2026 (Ramiro: «en modo claro no se ve el color del encabezado» en
   Ingreso y Entrega). Estos modales se pintan con «mo-claro», que aclaraba
   TODO, cabecera incluida. La banda vuelve a ser de la casa, con su tinta y
   su logo, igual que en el resto del sistema. */
.mo-claro > .per-cab, .mo-claro > .per-pie {
  background: var(--vnv-marca, var(--accent-blue)) !important;
  color: var(--vnv-marca-txt, #ffffff) !important;
  border-color: color-mix(in srgb, var(--vnv-marca-txt, #fff) 30%, transparent) !important;
}
/* ESTA ERA LA QUE FALTABA (24/09/2026, Ramiro). El modo claro de esta
   pantalla no es el tema general «tcg-claro» sino «mo-claro», el del propio
   modal, y esta regla no exceptuaba nada: le ponía a TODO lo que cuelga de la
   franja la tinta de la franja, con «!important». El desplegable del buscador
   vive adentro de la franja y es blanco, así que quedaba blanco sobre blanco.
   Arreglé dos veces las reglas de «tcg-claro» sin darme cuenta de que la que
   estaba pegando era ésta. Van las mismas excepciones que las otras tres: los
   campos y la lista del buscador tienen fondo propio y tinta propia. */
.mo-claro > .per-cab *:not(input):not(select):not(textarea):not(.bap-lista):not(.bap-lista *),
.mo-claro > .per-pie *:not(input):not(select):not(textarea) { color: var(--vnv-marca-txt, #ffffff) !important; }
.mo-claro > .per-cab .lu-btn, .mo-claro > .per-pie .lu-btn {
  background: transparent !important;
  border-color: color-mix(in srgb, var(--vnv-marca-txt, #fff) 55%, transparent) !important;
}
.mo-claro > .per-cab .lu-btn--accion, .mo-claro > .per-pie .lu-btn--accion {
  background: var(--vnv-marca-txt, #fff) !important;
  color: var(--vnv-marca-fuerte, var(--vnv-marca, #0b4f96)) !important;
  border-color: transparent !important;
}
.mo-claro > .per-cab input, .mo-claro > .per-cab select {
  background: rgba(255,255,255,.92) !important; color: #000 !important; border-color: transparent !important;
}
.mo-claro .per-titulo { color: #000; }
.mo-claro .per-sub, .mo-claro .com-ayuda, .mo-claro .vnv-nota,
.mo-claro .cvn-pie, .mo-claro .ing-cuenta, .mo-claro .pnl-titulo,
.mo-claro .vnv-dato > span, .mo-claro .cvn-tabla th { color: #000; }
.mo-claro .vnv-dato > strong, .mo-claro .cvn-tabla td { color: #000; }
.mo-claro input, .mo-claro select, .mo-claro textarea {
  background: #ffffff; color: #000; border-color: #cbd2d9;
}
.mo-claro input:disabled, .mo-claro select:disabled { background: #eef1f4; color: var(--text); }
.mo-claro .lu-btn { background: #f2f4f7; color: #000; border-color: #cbd2d9; }
.mo-claro .lu-btn:hover:not(:disabled) { background: #e6eaef; }
.mo-claro .lu-btn--accion { background: #f2c200; color: #000; border-color: #d0902f; }
.mo-claro .cvn-tabla th { background: #eef1f4; border-bottom-color: #d7dbe0; }
.mo-claro .cvn-tabla td { border-bottom-color: #e6e9ed; }
.mo-claro .cvn-tabla tbody tr:hover { background: #fdf3e2; }
.mo-claro .cvn-fila--sel, .mo-claro .cvn-tabla tbody tr.cvn-fila--sel:hover { background: #fbe6c2; }
.mo-claro .pnl-existente { background: #e8f0fb; border-color: #b8d0ee; }
.mo-claro .vnv-trio { background: #ffffff; border-color: #d9dee5; }
.mo-claro .vnv-trio input, .mo-claro .vnv-trio .vn-monto { color: #000; }
.mo-claro .pnl-existente .pnl-titulo { color: #000; }
.mo-claro .pnl-editable { background: #f7f8fa; border-color: #d7dbe0; }
.mo-claro .vnv-usado, .mo-claro .vnv-unidad { border-color: #d7dbe0; }
.mo-claro .per-campo--calc strong { background: #f2f4f7; border-color: #cbd2d9; color: var(--text); }
.mo-claro .bap-lista { background: #ffffff; border-color: #cbd2d9; box-shadow: 0 10px 26px rgba(0,0,0,.18); }
.mo-claro .bap-item { border-bottom-color: #e6e9ed; color: #000; }
.mo-claro .bap-item:hover { background: #fdf3e2; }
.mo-claro .bap-donde, .mo-claro .bap-vacio, .mo-claro .cvn-vacio, .mo-claro .cvn-pendiente { color: #000; }
.mo-claro .bap-donde { border-color: #cbd2d9; }
.mo-claro .vnv-nota--alerta, .mo-claro .com-ayuda--alerta { color: var(--text); }
.mo-claro .vnv-aviso--anulada { background: #fde8e7; border-color: #e8a09d; color: #000; }
.mo-claro .res-toggle { color: #000; }
.ing-grid--3 { grid-template-columns: 1fr 1fr 1fr; }


/* Marca R de unidad en reparación */
.rep-marca {
  display: inline-block; margin-left: 6px; font-family: inherit;
  background: #d9534f; color: #fff; font-size: 12px; font-weight: 700;
  width: 15px; height: 15px; line-height: 15px; text-align: center; border-radius: 6px;
}
.rep-grid { grid-template-columns: 1fr 1fr; }
.rep-obs { grid-column: 1 / -1; }


/* ---- Preentrega ---- */
.pre-acciones { display: flex; gap: 4px; }
.pre-accion {
  background: var(--panel-2, #161c2a); border: 1px solid var(--border, #252d3f); color: inherit;
  border-radius: 8px; padding: 5px 12px; font-size: 12px; cursor: pointer; white-space: nowrap;
}
.pre-accion--on { border-color: var(--accent-amber, #f2c200); color: var(--text); }
.ing-tabla-cont--chica { max-height: 190px; }
.pre-detalle { display: grid; grid-template-columns: 1fr 1.25fr; gap: 10px; padding: 10px 12px; overflow: auto; }
.pre-detalle .ing-pnl { margin: 0; }
.pre-cab-edit { display: flex; gap: 14px; align-items: center; padding: 6px 9px; flex-wrap: wrap; }
.pre-cab-edit .per-campo { display: grid; grid-template-columns: 44px 1fr; align-items: center; gap: 6px; margin: 0; }
.pre-cab-edit .per-campo > span { font-size: 12px; text-align: right; text-transform: none; letter-spacing: 0; }
.pre-cab-edit input[type=date] { padding: 4px 7px; font-size: 13px; }
.pre-listo-chk span { font-size: 12px; }
.pre-listo { color: var(--text); font-size: 12px; }
.pre-listas { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; padding: 0 9px 6px; }
.pre-lista { border: 1px solid var(--border, #252d3f); border-radius: 8px; overflow: hidden; }
.pre-lista-tit {
  font-size: 12px; text-transform: uppercase; letter-spacing: .4px; color: var(--text);
  padding: 5px 8px; border-bottom: 1px solid var(--border, #252d3f); background: var(--panel-2, #161c2a);
}
.pre-lista-cuerpo { max-height: 170px; overflow: auto; }
.pre-item {
  display: flex; align-items: center; gap: 6px; padding: 4px 8px;
  font-size: 12px; border-bottom: 1px solid #21262e; cursor: pointer;
}
.pre-item:last-child { border-bottom: none; }
.pre-item span { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pre-item input { width: 14px; height: 14px; accent-color: var(--accent-amber, #f2c200); }
.pre-item--si { color: var(--text); }
.pre-item--falta { color: #d9534f; }
.pre-mover {
  background: none; border: 1px solid var(--border, #252d3f); border-radius: 6px; color: inherit;
  cursor: pointer; padding: 0 6px; font-size: 12px; line-height: 18px;
}
.pre-mover:hover { border-color: var(--accent-amber, #f2c200); color: var(--text); }
.pre-alta-acc { padding: 0 9px 6px; }
.pre-alta-acc .per-campo { display: grid; grid-template-columns: 118px 1fr; align-items: center; gap: 7px; margin: 0; }
.pre-alta-acc .per-campo > span { font-size: 12px; text-align: right; text-transform: none; letter-spacing: 0; }
.pre-alta-acc .per-campo > small { grid-column: 2; }
.pre-obs { display: grid !important; grid-template-columns: 92px 1fr; align-items: center; gap: 7px; margin: 0 9px 8px !important; }
.pre-obs > span { font-size: 12px; text-align: right; text-transform: none; letter-spacing: 0; }
.pre-obs > input { padding: 4px 7px; font-size: 13px; }
.mo-claro .pre-accion { background: #f2f4f7; border-color: #cbd2d9; }
.mo-claro .pre-lista, .mo-claro .pre-item, .mo-claro .pre-lista-tit { border-color: #d7dbe0; }
.mo-claro .pre-lista-tit { background: #eef1f4; }
/* Pago de unidades */
.pag-buscar { flex: 1; min-width: 200px; }
.pag-buscar input {
  width: 100%; background: var(--panel-2, #161c2a); border: 1px solid var(--border, #252d3f);
  border-radius: 8px; padding: 5px 8px; color: inherit; font-size: 13px;
}
.pag-fecha { display: flex; align-items: center; gap: 6px; white-space: nowrap; }
.pag-fecha span { font-size: 12px; color: var(--text); }
.pag-fecha input {
  background: var(--panel-2, #161c2a); border: 1px solid var(--border, #252d3f);
  border-radius: 8px; padding: 4px 7px; color: inherit; font-size: 13px;
}


/* ---- Órdenes de accesorios ---- */
/* EL CATÁLOGO NECESITA MÁS ANCHO QUE UNA ORDEN (12/09/2026, Ramiro).
   El modal estaba pensado para una orden de trabajo —unas pocas columnas—
   y con 1080px alcanzaba. El catálogo tiene ocho columnas: accesorio, parte,
   modelos, tipo, precio, detalle, foto y el tilde de publicar, y las dos
   últimas quedaban cortadas afuera de la pantalla.
   Se le da el ancho de la pantalla con un margen, y tope: pasados los
   1600px la línea de texto se hace incómoda de leer. */
.acc-modal { max-width: 1080px; }
/* EL CATÁLOGO, ADENTRO DEL MODAL (13/09/2026, Ramiro).
   Se salía por abajo: la tabla de doscientos renglones empujaba el modal
   más allá de la pantalla y el bloque de «Agregar un accesorio» terminaba
   flotando encima de las filas. Se le da alto de pantalla al modal y el
   que se desplaza es el cuerpo, no el modal entero. */
.per-modal.acc-modal--catalogo { max-width: min(1600px, calc(calc(100vw / var(--tcg-z, 1)) - 48px)); width: 100%;
  height: calc(calc(100vh / var(--tcg-z, 1)) - 40px); max-height: calc(calc(100vh / var(--tcg-z, 1)) - 40px);
  display: flex; flex-direction: column; }
.per-modal.acc-modal--catalogo > .per-cab,
.per-modal.acc-modal--catalogo > .vnv-buscador { flex: 0 0 auto; }
.per-modal.acc-modal--catalogo > .com-cuerpo { flex: 1 1 auto; min-height: 0; overflow: auto; }
/* Y la tabla se desplaza adentro de su caja, con el encabezado pegado. */
.acc-cat .cjs-tabla-caja { max-height: calc(calc(100vh / var(--tcg-z, 1)) - 430px); overflow: auto; }
.acc-cat .cjs-tabla thead th { position: sticky; top: 0; z-index: 3;
  background: var(--panel-2, #1b2233); }
.acc-orden-cab {
  display: flex; justify-content: space-between; align-items: center; gap: 10px;
  padding: 7px 12px; border-bottom: 1px solid var(--border, #252d3f);
}
.acc-nro { font-size: 12.5px; color: var(--text); }
.acc-nro strong { font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 14px; color: var(--text); }
.acc-cerrada {
  margin-left: 9px; font-size: 12px; letter-spacing: .5px;
  border: 1px solid #4caf50; color: var(--text); border-radius: 999px; padding: 1px 8px;
}
.acc-cuerpo {
  display: grid; grid-template-columns: 1.15fr 1fr; gap: 10px; padding: 10px 12px;
  overflow: auto; max-height: calc(calc(100dvh / var(--tcg-z, 1)) - 250px); overscroll-behavior: contain;
}
.acc-col { display: flex; flex-direction: column; gap: 10px; }
.acc-cuerpo .ing-pnl { margin: 0; }
.acc-ancho { grid-column: 1 / -1; }
.acc-buscar-unidad { position: relative; padding: 6px 9px 9px; }
.acc-buscar-unidad input {
  width: 100%; background: var(--panel-2, #161c2a); border: 1px solid var(--border, #252d3f);
  border-radius: 8px; padding: 6px 9px; color: inherit; font-size: 13px;
}
.acc-lista-unidades { max-height: 220px; }
.acc-cambiar-unidad { margin: 4px 9px 8px; }
.acc-agregar { padding: 6px 9px 0; }
.acc-agregar .per-campo { display: grid; grid-template-columns: 72px 1fr; align-items: center; gap: 7px; margin: 0; }
.acc-agregar .per-campo > span { font-size: 12px; text-align: right; text-transform: none; letter-spacing: 0; }
.acc-items { padding: 6px 9px 9px; display: flex; flex-direction: column; gap: 4px; }
.acc-item { display: flex; align-items: center; gap: 6px; font-size: 12px; }
.acc-item-n {
  width: 18px; flex-shrink: 0; text-align: center; font-size: 12px;
  color: var(--text); border: 1px solid var(--border, #252d3f); border-radius: 6px;
}
.acc-item-nom { flex: 0 0 40%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.acc-item-obs {
  flex: 1; min-width: 0; background: var(--panel-2, #161c2a); border: 1px solid var(--border, #252d3f);
  border-radius: 6px; padding: 3px 7px; color: inherit; font-size: 12px;
}
.acc-pie { flex-wrap: wrap; }
.mo-claro .acc-item-n, .mo-claro .acc-item-obs { border-color: #d7dbe0; }


/* ---- Calidad - Contacto Clientes y Encuestas ---- */
.cc-modal { max-width: 1150px; }

/* Resultado del contacto en el listado, para verlo sin abrirlo. */
.cc-res { display: inline-block; font-size: 12px; font-weight: 700; padding: 2px 9px; border-radius: 999px;
  border: 1px solid transparent; white-space: nowrap; }
.cc-res--bien { color: var(--text); border-color: rgba(76,175,111,.5); background: rgba(76,175,111,.12); }
.cc-res--medio { color: var(--text); border-color: rgba(232,163,61,.5); background: rgba(232,163,61,.12); }
.cc-res--mal { color: #ee776c; border-color: rgba(226,87,76,.5); background: rgba(226,87,76,.12); }
.cc-res--vacio { color: var(--text); border-color: var(--border, #2c2f36); }
.cc-col-tema { font-size: 12px; color: var(--text); }
/* Buscador y "ver contactados": pegados a la lista que filtran. */
.cc-solapas { align-items: center; }
.cc-filtros-lista { display: flex; align-items: center; gap: 10px; margin-left: auto; padding-right: 16px;
  flex: 1 1 240px; min-width: 0; justify-content: flex-end; }
.cc-filtros-lista .res-toggle { white-space: nowrap; font-size: 12px; }
.cc-filtros-lista .cvn-buscar { flex: 0 1 320px; min-width: 0; }
.cc-filtros-lista .cvn-buscar input { width: 100%; min-width: 0; box-sizing: border-box; min-height: 34px; }


/* ------------------------------------------------------------------ */
/* Calidad - Contacto Clientes y Encuestas: correcciones de ancho.      */
/* Va después de .ing-modal y .cc-modal a propósito, porque son las que */
/* limitan el ancho: escrito antes, no las pisa.                        */
/* ------------------------------------------------------------------ */
/* Como pantalla ocupa TODO el ancho disponible: antes heredaba el tope
   de 1150px del modal y quedaba media pantalla vacía a la derecha. */
.cc-pantalla-wrap .cc-pantalla.cc-modal.ing-modal {
  max-width: none; width: 100%; margin: 0;
}
/* Los hijos de un flex no achican por debajo de su contenido salvo que
   se les diga: sin esto el buscador se salía de la barra. */
.cc-barra-sup { min-width: 0; }
.cc-barra-sup .cc-filtros { min-width: 0; }
.cc-barra-sup .cc-filtros .cvn-buscar { min-width: 0; flex: 1 1 160px; }
.cc-barra-sup .cc-filtros .cvn-buscar input { width: 100%; min-width: 0; box-sizing: border-box; }
.cc-barra-sup .cc-filtros .cc-select-tema { flex: 0 1 auto; max-width: 260px; }
/* La tabla también acompaña el ancho de la pantalla. */
.cc-pantalla .ing-tabla-cont { width: 100%; }
.cc-solapas { display: flex; gap: 4px; padding: 7px 12px 0; }
.cc-select-tema {
  background: var(--panel-2, #161c2a); border: 1px solid var(--border, #252d3f); color: inherit;
  border-radius: 8px; padding: 5px 9px; font-size: 12px; max-width: 260px;
}
.cc-tema-info {
  display: flex; gap: 10px; align-items: center; flex-wrap: wrap;
  padding: 5px 12px 7px; font-size: 12px; color: var(--text);
  border-bottom: 1px solid var(--border, #252d3f);
}
.cc-tipo {
  font-size: 12px; text-transform: uppercase; letter-spacing: .5px;
  border-radius: 999px; padding: 1px 8px; white-space: nowrap;
}
.cc-tipo--encuesta { border: 1px solid #4a90d9; color: var(--text); }
.cc-tipo--gestion { border: 1px solid var(--accent-amber, #f2c200); color: var(--text); }
.cc-metodo { margin-left: auto; }
.cc-cuerpo {
  display: grid; grid-template-columns: 1fr 1.2fr; gap: 10px; padding: 10px 12px;
  overflow: auto; max-height: calc(calc(100dvh / var(--tcg-z, 1)) - 260px); overscroll-behavior: contain;
}
.cc-cuerpo .ing-pnl { margin: 0; }
.cc-comunicar { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; padding: 6px 9px; }
.cc-wa { border-color: #25d366 !important; color: var(--text) !important; }
.cc-tel { display: grid !important; grid-template-columns: 62px 1fr; align-items: center; gap: 6px; margin: 0 !important; flex: 1; min-width: 150px; }
.cc-tel > span { font-size: 12px; text-align: right; text-transform: none; letter-spacing: 0; }
.cc-tel > input { padding: 4px 7px; font-size: 13px; }
.cc-preguntas { padding: 6px 9px; display: flex; flex-direction: column; gap: 9px; }
.cc-pregunta { border-bottom: 1px solid #21262e; padding-bottom: 8px; }
.cc-pregunta:last-child { border-bottom: none; }
.cc-pregunta--ppal .cc-pregunta-txt { color: var(--text); }
.cc-pregunta-txt { font-size: 12px; margin-bottom: 5px; display: flex; gap: 7px; align-items: center; }
.cc-badge {
  font-size: 12px; text-transform: uppercase; letter-spacing: .4px;
  border: 1px solid currentColor; border-radius: 999px; padding: 0 6px;
}
.cc-opciones { display: flex; flex-wrap: wrap; gap: 4px; }
.cc-op {
  background: var(--panel-2, #161c2a); border: 1px solid var(--border, #252d3f); color: inherit;
  border-radius: 6px; padding: 3px 9px; font-size: 12px; cursor: pointer; min-width: 30px;
}
.cc-op:hover { border-color: var(--accent-amber, #f2c200); }
.cc-op--on { background: var(--accent-amber, #f2c200); color: #000; border-color: var(--accent-amber, #f2c200); font-weight: 600; }
/* Indicadores */
.cc-indicadores {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 10px;
  padding: 12px; overflow: auto; max-height: calc(calc(100dvh / var(--tcg-z, 1)) - 230px);
}
.cc-ind-card { border: 1px solid var(--border, #252d3f); border-radius: 8px; padding: 11px; }
.cc-ind-cab { display: flex; justify-content: space-between; align-items: flex-start; gap: 10px; }
.cc-ind-nombre { font-size: 13px; font-weight: 600; }
.cc-ind-metodo { font-size: 12px; color: var(--text); margin-top: 2px; }
.cc-ind-valor { font-size: 26px; font-weight: 700; line-height: 1; white-space: nowrap; }
.cc-ind-valor--ok, .cc-ok { color: var(--text); }
.cc-ind-valor--medio, .cc-medio { color: var(--text); }
.cc-ind-valor--mal, .cc-mal { color: #d9534f; }
.cc-ind-detalle { font-size: 12px; color: var(--text); margin: 6px 0 8px; }
.cc-ind-preguntas { display: flex; flex-direction: column; gap: 3px; border-top: 1px solid #21262e; padding-top: 7px; }
.cc-ind-fila { display: flex; align-items: baseline; gap: 8px; font-size: 12px; }
.cc-ind-fila span { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cc-ind-fila strong { font-size: 12px; }
.cc-ind-fila small { font-size: 12px; color: var(--text); white-space: nowrap; }
/* Editor de temas */
.cc-editor { padding: 10px 12px; overflow: auto; max-height: calc(calc(100dvh / var(--tcg-z, 1)) - 250px); display: flex; flex-direction: column; gap: 7px; }
.cc-tema-card { border: 1px solid var(--border, #252d3f); border-radius: 8px; overflow: hidden; }
.cc-tema-head {
  display: flex; align-items: center; gap: 9px; width: 100%; text-align: left;
  background: var(--panel-2, #161c2a); border: none; color: inherit;
  padding: 8px 10px; cursor: pointer; font-size: 12.5px;
}
.cc-tema-nom { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cc-tema-meta { font-size: 12px; color: var(--text); white-space: nowrap; }
.cc-tema-body { padding: 9px; border-top: 1px solid var(--border, #252d3f); }
.cc-preg-editor { margin-top: 9px; border-top: 1px dashed var(--border, #252d3f); padding-top: 8px; display: flex; flex-direction: column; gap: 5px; }
.cc-preg-fila { display: flex; gap: 5px; align-items: center; }
.cc-preg-fila input {
  flex: 1; min-width: 0; background: var(--panel-2, #161c2a); border: 1px solid var(--border, #252d3f);
  border-radius: 6px; padding: 4px 7px; color: inherit; font-size: 13px;
}
.cc-preg-ppal {
  background: none; border: 1px solid var(--border, #252d3f); border-radius: 6px; color: var(--text);
  cursor: pointer; padding: 0 7px; font-size: 12px; line-height: 20px;
}
.cc-preg-ppal--on { color: var(--text); border-color: var(--accent-amber, #f2c200); }
.cc-tema-pie { margin-top: 9px; display: flex; justify-content: flex-end; }
.mo-claro .cc-tema-card, .mo-claro .cc-ind-card, .mo-claro .cc-op,
.mo-claro .cc-preg-fila input, .mo-claro .cc-select-tema { border-color: #d7dbe0; }
.mo-claro .cc-tema-head { background: #eef1f4; }


/* ---- Encuesta pública (lo que ve el cliente) ---- */
.enc-wrap {
  min-height: calc(100dvh / var(--tcg-z, 1)); display: flex; align-items: center; justify-content: center;
  padding: 18px 14px; background: var(--panel, #161c2a);
}
.enc-card {
  width: 100%; max-width: 560px; background: var(--panel, #161c2a); border: 1px solid var(--border, #252d3f);
  border-radius: 14px; padding: 20px 18px; color: var(--text, #e8eaed);
}
.enc-card--ok { text-align: center; padding: 40px 20px; }
.enc-tilde {
  width: 58px; height: 58px; line-height: 58px; margin: 0 auto 14px;
  border-radius: 50%; background: #4caf50; color: #fff; font-size: 30px;
}
.enc-cab { border-bottom: 1px solid var(--border, #252d3f); padding-bottom: 13px; margin-bottom: 15px; }
.enc-titulo { font-size: 19px; margin: 0 0 6px; line-height: 1.25; }
.enc-msg { font-size: 13.5px; line-height: 1.5; color: var(--text); margin: 0; }
.enc-conce { font-size: 12px; color: var(--text); margin: 7px 0 0; text-transform: uppercase; letter-spacing: .5px; }
.enc-preguntas { display: flex; flex-direction: column; gap: 17px; }
.enc-pregunta-txt { font-size: 14px; margin-bottom: 9px; display: flex; gap: 9px; align-items: flex-start; line-height: 1.35; }
.enc-n {
  flex-shrink: 0; width: 21px; height: 21px; line-height: 21px; text-align: center;
  border-radius: 50%; background: var(--border, #252d3f); font-size: 12px; color: var(--text);
}
.enc-opciones { display: flex; flex-wrap: wrap; gap: 6px; padding-left: 30px; }
.enc-op {
  background: var(--panel-2, #1e232a); border: 1px solid var(--border, #252d3f); color: var(--text, #e8eaed); border-radius: 8px;
  padding: 9px 14px; font-size: 14px; cursor: pointer; min-width: 44px; min-height: 42px;
}
.enc-op:active { transform: scale(.97); }
.enc-op--on { background: var(--accent-amber, #f2c200); color: #000; border-color: var(--accent-amber, #f2c200); font-weight: 600; }
.enc-texto {
  width: 100%; margin-left: 30px; max-width: calc(100% - 30px);
  background: var(--panel-2, #1e232a); border: 1px solid var(--border, #252d3f); border-radius: 8px;
  padding: 9px 11px; color: var(--text, #e8eaed); font-size: 13.5px; font-family: inherit; resize: vertical;
}
.enc-pie {
  margin-top: 20px; padding-top: 15px; border-top: 1px solid var(--border, #252d3f);
  display: flex; flex-direction: column; gap: 9px; align-items: stretch;
}
.enc-faltan { font-size: 12px; color: var(--text); text-align: center; }
.enc-enviar {
  background: var(--accent-amber, #f2c200); color: #000; border: none; border-radius: 10px;
  padding: 13px; font-size: 15px; font-weight: 600; cursor: pointer;
}
.enc-enviar:disabled { background: var(--border, #252d3f); color: #000; cursor: default; }

/* ---- Gerencia de Calidad ---- */
.gcal-root { padding: 14px 16px 30px; }
.gcal-cab { display: flex; justify-content: space-between; align-items: flex-start; gap: 12px; margin: 6px 0 14px; }
.gcal-titulo { font-size: 22px; margin: 0; }
.gcal-sub { font-size: 12px; color: var(--text); margin: 3px 0 0; }
.gcal-resumen {
  display: flex; gap: 10px; flex-wrap: wrap; align-items: center; margin-bottom: 14px;
}
.gcal-kpi {
  border: 1px solid var(--border, #252d3f); border-radius: 8px; padding: 9px 13px; min-width: 150px;
  display: flex; flex-direction: column; gap: 1px;
}
.gcal-kpi > span { font-size: 12px; text-transform: uppercase; letter-spacing: .5px; color: var(--text); }
.gcal-kpi > b { font-size: 21px; }
.gcal-kpi > small { font-size: 12px; color: var(--text); }
.gcal-toggle { margin-left: auto; }
.gcal-grid { padding: 0; max-height: none; }
.mo-claro.gcal-root { background: #fff; color: #000; }
.mo-claro .gcal-kpi { border-color: #d7dbe0; }
.cc-enviada { color: var(--text) !important; }

.cc-rescate { display: flex; gap: 5px; align-items: center; width: 100%; margin-top: 4px; }
.cc-rescate input {
  flex: 1; min-width: 0; background: var(--panel-2, #161c2a); border: 1px dashed var(--border, #252d3f);
  border-radius: 8px; padding: 4px 8px; color: inherit; font-size: 13px;
}
/* Sugerencias del padrón de localidades en la ficha de cliente. Va al final
   del bloque a propósito: insertado antes, lo pisan las reglas de .per-campo. */
.rv-loc-sug {
  position: absolute; top: 100%; left: 0; right: 0; z-index: 40;
  max-height: 190px; overflow-y: auto; margin-top: 2px;
  background: var(--panel-2, #161c2a); border: 1px solid var(--border, #252d3f);
  border-radius: 8px; box-shadow: 0 8px 22px rgba(0,0,0,.45);
}
.rv-loc-sug button {
  display: flex; flex-direction: column; align-items: flex-start; gap: 1px;
  width: 100%; padding: 6px 9px; background: none; border: 0;
  border-bottom: 1px solid #23282f; color: inherit; text-align: left; cursor: pointer;
}
.rv-loc-sug button:last-child { border-bottom: 0; }
.rv-loc-sug button:hover { background: var(--panel-3, #1e242c); }
.rv-loc-sug strong { font-size: 12px; font-weight: 600; }
.rv-loc-sug span { font-size: 10.5px; color: var(--text); }

/* ---------------------------------------------------------------
   Celdas editables (tabla ↔ modal) y motor de migración.
   Van al FINAL del bloque: reglas insertadas antes de otras de la
   misma especificidad quedan pisadas y no hacen nada.
---------------------------------------------------------------- */
.tb-celda {
  min-height: 24px; padding: 2px 5px; border-radius: 6px; cursor: pointer;
  display: flex; align-items: center; gap: 4px;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.tb-celda:hover { background: rgba(232,163,61,0.13); box-shadow: inset 0 0 0 1px rgba(232,163,61,0.4); }
.tb-celda--fija { cursor: default; }
.tb-celda--fija:hover { background: none; box-shadow: none; }
.tb-celda-vacia { color: var(--text); font-style: italic; }
.tb-celda--edit { padding: 0; background: none; box-shadow: none; }
.tb-celda--edit:hover { background: none; box-shadow: none; }
.tb-celda--edit input,
.tb-celda--edit select {
  width: 100%; min-width: 70px; padding: 2px 5px; font: inherit;
  color: inherit; background: var(--panel-2, #202940);
  border: 1px solid var(--accent-amber, #f2c200); border-radius: 6px;
}
.tb-celda--cat { display: flex; align-items: center; gap: 3px; }
.tb-celda-btn {
  flex: 0 0 auto; padding: 2px 6px; font: inherit; line-height: 1.1;
  color: inherit; background: var(--panel-2, #202940);
  border: 1px solid var(--border, #252d3f); border-radius: 6px; cursor: pointer;
}
.tb-celda-btn:hover { border-color: var(--accent-amber, #f2c200); }

.mig-badge {
  margin-left: 5px; padding: 0 4px; border-radius: 6px;
  font-size: 12px; font-weight: 700; letter-spacing: .04em;
  color: var(--bg, #131824); background: var(--accent-amber, #f2c200);
}

.cvn-tabla--edit td { padding: 2px 4px; vertical-align: middle; }
.cvn-tabla--edit th { text-align: center; }
.cvn-col-n { width: 62px; text-align: center; cursor: pointer; }
.cvn-col-abrir { width: 34px; text-align: center; }
.cvn-abrir {
  padding: 1px 5px; font: inherit; color: inherit; cursor: pointer;
  background: none; border: 1px solid var(--border, #252d3f); border-radius: 6px;
}
.cvn-abrir:hover { border-color: var(--accent-amber, #f2c200); }
.cvn-fila--mig td { background: rgba(232,163,61,0.05); }
.cvn-filtro-origen { display: flex; align-items: center; gap: 5px; font-size: 12px; }
.cvn-filtro-origen select {
  padding: 3px 6px; font: inherit; color: inherit;
  background: var(--panel-2, #202940); border: 1px solid var(--border, #252d3f); border-radius: 6px;
}

/* --- Motor de migración --- */
.mig-modal { width: min(1180px, calc(96vw / var(--tcg-z, 1))); }
.mig-pasos { display: flex; gap: 6px; padding: 0 14px 8px; flex-wrap: wrap; }
.mig-paso {
  padding: 5px 11px; font: inherit; font-size: 12px; cursor: pointer;
  color: var(--text); background: var(--panel-2, #202940);
  border: 1px solid var(--border, #252d3f); border-radius: 6px;
}
.mig-paso b { color: inherit; margin-right: 4px; }
.mig-paso--act { color: var(--text, #ecf0f4); border-color: var(--accent-amber, #f2c200); }
.mig-paso:disabled { opacity: .45; cursor: default; }
.mig-aviso { margin: 0 14px 8px; }
.mig-cuerpo { max-height: calc(calc(100dvh / var(--tcg-z, 1)) - 250px); overflow: auto; }
.mig-bloque { display: flex; flex-direction: column; gap: 14px; }
.mig-bloque-sub { display: flex; flex-direction: column; gap: 6px; }
.mig-bloque-sub > b { font-size: 12.5px; }
.mig-file {
  display: flex; flex-direction: column; gap: 6px; padding: 14px;
  border: 1px dashed var(--border, #252d3f); border-radius: 8px;
}
.mig-chips { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.mig-chips input {
  padding: 4px 8px; font: inherit; color: inherit;
  background: var(--panel-2, #202940); border: 1px solid var(--border, #252d3f); border-radius: 6px;
}
.mig-tabla-wrap { max-height: 340px; overflow: auto; border: 1px solid var(--border, #252d3f); border-radius: 8px; }
.mig-tabla { width: 100%; border-collapse: collapse; font-size: 12px; }
.mig-tabla th {
  position: sticky; top: 0; z-index: 1; text-align: left; padding: 6px 8px;
  background: var(--panel-2, #202940); border-bottom: 1px solid var(--border, #252d3f);
}
.mig-tabla td { padding: 4px 8px; border-bottom: 1px solid rgba(42,48,56,0.6); }
.mig-tabla select {
  width: 100%; padding: 3px 5px; font: inherit; color: inherit;
  background: var(--panel-2, #202940); border: 1px solid var(--border, #252d3f); border-radius: 6px;
}
.mig-fila--vo td { background: rgba(79,142,247,0.06); }
.mig-fila--pend td { background: rgba(226,87,76,0.08); }
.mig-resumen { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 8px; }
.mig-card {
  display: flex; flex-direction: column; gap: 2px; padding: 10px 12px;
  background: var(--panel-2, #202940); border: 1px solid var(--border, #252d3f); border-radius: 8px;
}
.mig-card b { font-size: 20px; line-height: 1.1; }
.mig-card span { font-size: 12px; color: var(--text); }
.mig-card--alerta { border-color: var(--red, #e2574c); }
.mig-cat { display: flex; flex-direction: column; gap: 4px; margin-top: 6px; }
.mig-cat-titulo { display: flex; align-items: baseline; gap: 8px; font-size: 12px; font-weight: 600; }
.mig-cat-cuenta { font-size: 12px; font-weight: 400; color: var(--text); }
.mig-tag { padding: 1px 6px; border-radius: 6px; font-size: 12px; }
.mig-tag--ok { color: var(--text); background: rgba(76,175,109,0.12); }
.mig-tag--duda { color: var(--text); background: rgba(232,163,61,0.12); }
.mig-tag--nuevo { color: var(--text); background: rgba(79,142,247,0.12); }
.mig-avisos { margin: 0; padding-left: 18px; font-size: 12px; display: flex; flex-direction: column; gap: 3px; }
.mig-avisos li.mig-aviso--abierto { color: var(--text); }
.mig-offsets { display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: 8px; }
.mig-pie { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; }


/* --- Tablas (ABM de catálogos) --- */
.abm-modal { width: min(1080px, calc(96vw / var(--tcg-z, 1))); }
.abm-tabs { display: flex; flex-wrap: wrap; gap: 5px; padding: 0 14px 8px; }
.abm-tab {
  display: inline-flex; align-items: center; gap: 5px;
  padding: 4px 10px; font: inherit; font-size: 12px; cursor: pointer;
  color: var(--text); background: var(--panel-2, #202940);
  border: 1px solid var(--border, #252d3f); border-radius: 6px;
}
.abm-tab--act { color: var(--text, #ecf0f4); border-color: var(--accent-amber, #f2c200); }
.abm-tab-n {
  min-width: 18px; padding: 0 4px; border-radius: 8px; text-align: center;
  font-size: 12px; background: rgba(255,255,255,0.07);
}
.abm-cuerpo { max-height: calc(calc(100dvh / var(--tcg-z, 1)) - 250px); overflow: auto; }
.abm-barra { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.abm-buscar {
  min-width: 190px; padding: 5px 9px; font: inherit; color: inherit;
  background: var(--panel-2, #202940); border: 1px solid var(--border, #252d3f); border-radius: 6px;
}
.abm-acciones { display: flex; align-items: center; gap: 5px; flex-wrap: wrap; }
.abm-acciones input {
  min-width: 150px; padding: 3px 6px; font: inherit; color: inherit;
  background: var(--panel-2, #202940);
  border: 1px solid var(--accent-amber, #f2c200); border-radius: 6px;
}
.abm-fila--modelo td { background: rgba(255,255,255,0.035); }
.abm-fijo {
  margin-left: 6px; padding: 0 5px; border-radius: 6px; font-size: 12px;
  color: var(--text); background: rgba(255,255,255,0.06);
}
.lu-inf-mig td { background: rgba(232,163,61,0.05); }


/* Solapa Modelos del ABM: aviso de versión compartida entre modelos y el
   total global al lado del uso de este modelo. Al final del bloque, como el
   resto de lo agregado después. */
.abm-nota { margin-left: 9px; font-weight: 400; }
.abm-asignar {
  background: var(--panel-3, #1e242c); border: 1px solid var(--border, #252d3f); border-radius: 8px;
  padding: 3px 6px; color: inherit; font-size: 12px;
}
.cvn-bloqueo { color: var(--text); }
/* EL SELLO. Es el renglón que dice si el navegador está mostrando la última
   publicación. Con un texto largo se salía del borde y se veía cortado, que
   es justo lo contrario de lo que tiene que hacer: dar confianza. Se recorta
   con puntos suspensivos y el texto entero queda en el cartelito. */
.tcg-version {
  font-size: 12px; color: var(--text); letter-spacing: .2px;
  padding: 2px 7px; border: 1px solid var(--border, #252d3f); border-radius: 20px;
  white-space: nowrap; max-width: min(calc(46vw / var(--tcg-z, 1)), 420px); overflow: hidden;
  text-overflow: ellipsis;
  /* Fondo y tinta propios, y del mismo par: el sello se dibuja encima de
     cualquier pantalla y no puede depender de lo que tenga debajo. */
  background: var(--panel, #1b2233); color: var(--text);
}
.abm-recuperar {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  padding: 7px 10px; margin-bottom: 8px;
  background: var(--panel-2, #161c2a); border: 1px solid var(--border, #262c35); border-radius: 8px;
}
.abm-sep { width: 1px; height: 16px; background: var(--border, #252d3f); }
.abm-tab-comp {
  margin-left: 4px; font-size: 12px; font-weight: 700; color: var(--text);
  border: 1px solid #2f4358; border-radius: 20px; padding: 0 4px;
}
.abm-bloqueado {
  font-size: 12px; color: var(--text); background: var(--panel-2, #3a3320); border-radius: 20px;
  padding: 2px 7px; white-space: nowrap;
}
.cat-disparador {
  display: flex; align-items: center; justify-content: space-between; gap: 6px; width: 100%;
  background: var(--panel-3, #1e242c); border: 1px solid var(--border, #252d3f); border-radius: 8px;
  padding: 5px 9px; color: inherit; font-size: 12.5px; text-align: left; cursor: pointer;
}
.cat-disparador:disabled { opacity: .5; cursor: default; }
.cat-placeholder { color: var(--text); }
.cat-flecha { font-size: 12px; color: var(--text); }
.cat-buscador {
  /* Arranca sobre la propia celda (no debajo): el campo de búsqueda tapa al
     campo original y la lista cae desde ahí. Así no se va al fondo de la
     pantalla ni tapa los campos de abajo. */
  position: absolute; top: -1px; left: -1px; right: -1px; z-index: 60;
  background: var(--panel-2, #161c2a); border: 1px solid #2f3742; border-radius: 8px;
  box-shadow: 0 10px 26px rgba(0,0,0,.5); overflow: hidden;
}
.cat-buscar {
  width: 100%; background: var(--panel-3, #1e242c); border: 0; border-bottom: 1px solid var(--border, #252d3f);
  padding: 7px 10px; color: inherit; font-size: 15.5px;
}
.cat-lista { max-height: 260px; overflow-y: auto; }
.cat-op {
  display: block; width: 100%; padding: 6px 10px; background: none; border: 0;
  border-bottom: 1px solid #23282f; color: inherit; text-align: left;
  font-size: 15px; cursor: pointer;
}
.cat-op:last-child { border-bottom: 0; }
.cat-op:hover { background: var(--panel-3, #1e242c); }
.cat-op--act { color: var(--text); font-weight: 600; }
.cat-vacio, .cat-mas { padding: 7px 10px; font-size: 13.5px; color: var(--text); }
.cat-mas { border-top: 1px solid #23282f; }
.cvn-cat { position: relative; }
.cvn-cat-elegir { position: relative; display: flex; gap: 5px; align-items: center; }
.cvn-cat-elegir .cat-disparador { flex: 1; min-width: 0; }
.tb-celda--cat { position: relative; }

/* ============================================================
   Ventas de 0km: legibilidad, dos colores y carga rápida.
   Va al final del bloque para ganarle a la compactación de arriba.
   Ámbar = lo que se carga acá. Azul = lo que ya existe y llega de compra,
   ingreso, asignación, gestoría y entrega.
   ============================================================ */
.vnv-modal { --vnv-carga: #f2c200; --vnv-existe: #5aa2e8; }

/* El cuerpo de 0km quedó en dos columnas: la ficha de la unidad va abajo de la
   primera, no en una tercera columna. Sin esto queda una columna vacía a la
   derecha, porque la grilla original tiene tres. */
.vnv-cuerpo--2col { grid-template-columns: minmax(0,1fr) minmax(0,1fr); align-items: stretch; }
.vnv-cuerpo--2col .vnv-col { display: flex; flex-direction: column; }
/* El emparejado de las columnas está definido UNA sola vez, más abajo.
   Acá había una regla que repartía el sobrante entre los campos de cada
   tarjeta: los separaba con huecos enormes en vez de dejarlos juntos. */

/* Encabezado: el bloque de consultas, separado de las acciones */
.vnv-consultas {
  display: flex; align-items: center; gap: 5px; flex-wrap: wrap;
  padding: 4px 8px 4px 10px; margin-right: 4px;
  border: 1px solid #2f3742; border-radius: 8px; background: rgba(255,255,255,.03);
}
.vnv-consultas-tit {
  font-size: 10.5px; font-weight: 700; text-transform: uppercase; letter-spacing: .1em;
  color: var(--text); margin-right: 2px;
}

/* Bloques del formulario */
.vnb {
  border: 1px solid #2c333d; border-left: 3px solid var(--vnv-carga);
  border-radius: 8px; background: rgba(255,255,255,.015); overflow: visible;
}
.vnb + .vnb, .vnv-col > .vnb + .vnv-unidad { margin-top: 9px; }
.vnb-cab {
  display: flex; align-items: center; justify-content: space-between; gap: 8px;
  padding: 6px 10px; border-radius: 9px 9px 0 0;
  background: rgba(255,255,255,.03);
  border-bottom: 1px solid color-mix(in srgb, var(--vnv-marca-luz, var(--vnv-marca, #6c7684)) 45%, transparent);
}
.vnb-cab h4 {
  margin: 0; font-size: 11.5px; font-weight: 700; text-transform: uppercase;
  letter-spacing: .07em; white-space: nowrap;
  color: var(--text);
}
.vnb-cab .vnb-nota { color: var(--text); }
.vnb-nota { font-size: 10px; color: var(--text); white-space: nowrap; }
.vnb-body { padding: 9px 10px; display: flex; flex-direction: column; gap: 7px; }

/* Etiquetas y celdas: legibles, en una sola línea */
.vnv-modal .vnb .per-campo,
.vnv-modal .vnv-usado .per-campo { grid-template-columns: 128px 1fr; gap: 9px; align-items: center; }
.vnv-modal .vnb .per-campo > span {
  font-size: 11.5px; font-weight: 600; color: var(--text);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.vnv-modal .vnb .per-campo > input,
.vnv-modal .vnb .per-campo > select,
/* «output» es el importe del usado y «.vnv-trio» los gastos de
   otorgamiento. No son «input», así que quedaban afuera de esta regla y
   tomaban otra superficie: se veían de un color distinto que los campos de
   al lado, en el monitor y en el teléfono. */
.vnv-modal .vnb .per-campo > output,
.vnv-modal .vnb .per-campo > .vnv-trio,
.vnv-modal .vnb .cat-disparador,
.vnv-modal .vnv-mesanio input {
  min-height: 31px; padding: 5px 9px; font-size: 13px; border-radius: 8px;
  background: var(--bg, #10151c); color: var(--text, #e9eef6); border: 1px solid #3b4450;
}
.vnv-modal .vnb .per-campo > input:hover:not(:disabled),
.vnv-modal .vnb .cat-disparador:hover:not(:disabled) { border-color: #57616f; }
.vnv-modal .vnb .per-campo > input:focus,
.vnv-modal .vnb .per-campo > select:focus,
.vnv-modal .vnb .cat-disparador:focus,
.vnv-modal .vnv-mesanio input:focus {
  outline: none; border-color: var(--vnv-carga);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--vnv-carga) 30%, transparent);
}
.vnv-modal .vnb .per-campo > input:disabled,
.vnv-modal .vnb .per-campo > select:disabled,
.vnv-modal .vnb .cat-disparador:disabled,
.vnv-modal .vnv-mesanio input:disabled {
  background: var(--panel-2, #171c23); color: var(--text); border-color: var(--border, #252d3f); opacity: 1;
}
.vnv-modal .vnb .com-ayuda { font-size: 10.5px; color: var(--text); }

/* Cliente resaltado */
.vnv-cliente { padding: 4px 6px; border-radius: 8px; border: 1.5px solid var(--vnv-carga); background: color-mix(in srgb, var(--vnv-carga) 9%, transparent); }
.vnv-cliente .per-campo > span { color: var(--text); font-weight: 700; }
.vnv-cliente--cargado { border-color: #4fbe86; background: color-mix(in srgb, #4fbe86 9%, transparent); }
.vnv-cliente--cargado .per-campo > span { color: var(--text); }

/* Neto */
.vnv-modal .per-campo--calc strong {
  font-size: 14px; font-weight: 700; padding: 5px 9px; min-height: 31px;
  display: flex; align-items: center; border-style: solid; border-radius: 8px;
  color: var(--text); border-color: color-mix(in srgb, var(--vnv-carga) 45%, transparent);
  background: color-mix(in srgb, var(--vnv-carga) 10%, transparent);
}

/* Buscador con los resultados en dos grupos */
.bap-rotulo {
  padding: 6px 9px 3px; font-size: 10.5px; font-weight: 700; text-transform: uppercase;
  letter-spacing: .1em; color: var(--text);
}
.bap-grupo--apagado { border-top: 1px solid #2c333d; margin-top: 4px; }
.bap-grupo--apagado .bap-rotulo { color: var(--text); }
.bap-grupo--apagado .bap-item { opacity: 1; }
.bap-grupo--apagado .bap-item:hover, .bap-grupo--apagado .bap-item--foco { opacity: 1; }
.bap-item--foco { background: color-mix(in srgb, var(--accent-amber, #f2c200) 16%, transparent); }

/* Lista de catálogo: opción resaltada, alta y bloqueo */
.cat-op--foco { background: color-mix(in srgb, var(--accent-amber, #f2c200) 18%, transparent); }
.cat-op--crear { color: var(--text); font-weight: 700; }
.cat-op--crear.cat-op--foco { background: var(--accent-amber, #f2c200); color: #000; }
.cat-pie {
  /* 22/09/2026 (Ramiro): todo lo que se lee adentro del buscador, tres
     puntos más grande. La ayuda del pie también: se leía con lupa. */
  padding: 5px 9px; font-size: 13px; color: var(--text);
  background: rgba(255,255,255,.03); border-top: 1px solid #2c333d;
}
.cat-pie--bloqueo { color: var(--text); font-style: italic; }
/* Borrar de la tabla, o la cantidad de veces que el valor está en uso */
.cat-op { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.cat-op-txt { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cat-borrar {
  flex-shrink: 0; width: 20px; height: 20px; line-height: 18px; text-align: center;
  border-radius: 6px; font-size: 14px; color: var(--text); opacity: 0; cursor: pointer;
}
.cat-op:hover .cat-borrar, .cat-op--foco .cat-borrar { opacity: 1; }
.cat-borrar:hover { background: #b5443a; color: #fff; }
.cat-usos {
  flex-shrink: 0; min-width: 20px; padding: 0 6px; border-radius: 999px;
  font-size: 12px; font-weight: 700; color: var(--text); border: 1px solid #3b4450;
}

/* Alta de cliente */
.vna-sub { margin: 12px 14px 0; font-size: 12px; color: var(--text); line-height: 1.45; }
.vna-body { padding: 12px 14px; display: flex; flex-direction: column; gap: 8px; overflow: visible; }
.vna-modal .per-campo { grid-template-columns: 118px 1fr; align-items: center; }
.vna-modal .per-campo > input {
  min-height: 31px; padding: 5px 9px; font-size: 13px; border-radius: 8px;
  background: var(--bg, #10151c); color: var(--text, #e9eef6); border: 1px solid #3b4450;
}
.vna-modal .per-campo > input:focus {
  outline: none; border-color: var(--accent-amber, #f2c200);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent-amber, #f2c200) 30%, transparent);
}
.vna-loc { position: relative; }
.vna-loc-lista {
  position: absolute; z-index: 30; top: 100%; left: 118px; right: 0; margin-top: 2px;
  background: var(--panel-3, #161b22); border: 1px solid var(--accent-amber, #f2c200); border-radius: 8px;
  max-height: 190px; overflow-y: auto;
}
.vna-loc-op {
  display: grid; grid-template-columns: 1fr auto 52px; gap: 8px; align-items: center;
  width: 100%; padding: 6px 9px; font-size: 12.5px; font-family: inherit; text-align: left;
  background: none; border: 0; border-bottom: 1px solid #2c333d; color: var(--text, #e9eef6); cursor: pointer;
}
.vna-loc-op:last-child { border-bottom: 0; }
.vna-loc-op:hover { background: color-mix(in srgb, var(--accent-amber, #f2c200) 16%, transparent); }
.vna-loc-op span { color: var(--text); font-size: 12px; }
.vna-loc-op em { color: var(--text); font-style: normal; font-size: 12px; text-align: right; }
.vna-pie-btns { display: flex; gap: 8px; }
.mo-claro .vna-modal .per-campo > input { background: #fff; color: #000; border-color: #a8b3c2; }
.mo-claro .vna-loc-lista { background: #fff; }
.mo-claro .vna-loc-op { color: #000; border-bottom-color: #e2e6ec; }
.mo-claro .cat-usos { border-color: #ccd3dc; color: #000; }

/* Panel de la unidad: azul, tamaño fijo, cierra abajo a la par */
.vnv-modal .vnv-unidad.pnl-existente {
  flex: 1; display: flex; flex-direction: column; padding: 0; overflow: hidden;
  background: color-mix(in srgb, var(--vnv-existe) 12%, transparent);
  border: 1px solid color-mix(in srgb, var(--vnv-existe) 45%, transparent);
  border-radius: 8px;
}
.vnp-cab {
  display: flex; align-items: center; justify-content: space-between; gap: 8px;
  padding: 7px 10px; font-size: 10px; font-weight: 700; text-transform: uppercase;
  letter-spacing: .09em; color: var(--text);
  background: color-mix(in srgb, var(--vnv-existe) 16%, transparent);
  border-bottom: 1px solid color-mix(in srgb, var(--vnv-existe) 35%, transparent);
}
.vnp-chip {
  padding: 1px 8px; border-radius: 999px; font-size: 10px; font-weight: 700;
  text-transform: none; letter-spacing: 0; border: 1px solid currentColor;
}
.vnp-hero {
  display: flex; align-items: center; gap: 10px; min-height: 54px; padding: 9px 10px;
  border-bottom: 1px solid color-mix(in srgb, var(--vnv-existe) 30%, transparent);
}
.vnp-interno {
  flex-shrink: 0; min-width: 62px; text-align: center; padding: 3px 9px;
  font-size: 16px; font-weight: 700; color: var(--text); border-radius: 8px;
  background: color-mix(in srgb, var(--vnv-existe) 18%, transparent);
}
.vnp-interno--vacio { color: var(--text); background: transparent; border: 1px dashed color-mix(in srgb, var(--vnv-existe) 40%, transparent); }
.vnp-interno-input {
  flex-shrink: 0; width: 86px; height: 32px; padding: 0 8px; text-align: center;
  font-size: 15px; font-weight: 700; font-family: inherit; color: var(--text);
  background: var(--bg, #10151c); border: 1.5px solid var(--vnv-carga); border-radius: 8px; outline: none;
}
.vnp-hero strong { display: block; font-size: 13px; line-height: 1.25; }
.vnp-hero p { margin: 2px 0 0; font-size: 11.5px; color: var(--text); }
.vnp-cuerpo { flex: 1; padding: 2px 10px 0; display: flex; flex-direction: column; }
.vnp-grupo { display: flex; flex-direction: column; }
.vnp-grupo + .vnp-grupo { margin-top: 7px; }
.vnp-grupo h5 {
  margin: 0 0 2px; padding: 6px 0 3px; font-size: 10.5px; font-weight: 700;
  text-transform: uppercase; letter-spacing: .1em;
  color: var(--text);
  border-bottom: 1.5px solid color-mix(in srgb, var(--vnv-existe) 42%, transparent);
}
.vnp-lista { margin: 0; padding: 2px 0; flex: 1; display: flex; flex-direction: column; }
.vnp-lista > div {
  flex: 1 1 auto; display: flex; justify-content: space-between; gap: 10px; align-items: center;
  min-height: 23px; padding: 3px 0;
  border-bottom: 1px dashed color-mix(in srgb, var(--vnv-existe) 28%, transparent);
}
.vnp-lista > div:last-child { border-bottom: none; }
.vnp-lista dt {
  font-size: 10px; font-weight: 600; color: var(--text);
  text-transform: uppercase; letter-spacing: .04em; white-space: nowrap;
}
.vnp-lista dd { margin: 0; font-size: 12px; text-align: right; }
.vnp-lista dd b { font-weight: 700; color: var(--text, #eff5fc); }
.vnp-sindato { color: var(--text); font-style: italic; font-size: 11.5px; }
.vnv-modal .vnv-unidad .vnv-nota { display: block; padding: 8px 10px 10px; font-size: 10.5px; color: var(--text); }

/* Pie: solo acciones de esta venta */
.vnv-pie-nota { margin-left: auto; font-size: 11px; color: var(--text); }

/* Listados y consulta */
.vnl-overlay { z-index: 10000; }
.vnl-modal, .vnd-modal { width: min(1080px, calc(95vw / var(--tcg-z, 1))); max-height: calc(88vh / var(--tcg-z, 1)); }
.vna-modal { width: min(560px, calc(95vw / var(--tcg-z, 1))); max-height: calc(88vh / var(--tcg-z, 1)); overflow: visible; }
.vnl-tipo {
  margin: 0 0 2px; font-size: 12px; text-transform: uppercase; letter-spacing: .6px;
  color: var(--text); font-weight: 700;
}
.vnl-barra { display: flex; align-items: center; gap: 10px; padding: 11px 14px 2px; flex-wrap: wrap; }
.vnl-buscar {
  flex: 1; min-width: 220px; height: 34px; padding: 0 10px; font-size: 13px; font-family: inherit;
  color: var(--text, #e9eef6); background: var(--bg, #10151c); border: 1px solid #3b4450; border-radius: 8px; outline: none;
}
.vnl-buscar:focus { border-color: var(--accent-amber, #f2c200); }
.vnl-cuenta { font-size: 12px; color: var(--text); white-space: nowrap; }
.vnl-tabla-cont { margin: 10px 14px; overflow: auto; border: 1px solid #2c333d; border-radius: 8px; min-height: 90px; }
.vnl-tabla { width: 100%; table-layout: auto; }
.vnl-tabla th { position: sticky; top: 0; z-index: 1; text-align: center; white-space: nowrap; }
.vnl-tabla td { white-space: nowrap; }
/* La columna de la versión absorbe el ancho sobrante para que la tabla llegue
   al borde del modal y no queden huecos a la derecha. */
.vnl-col-ancha { width: 100%; white-space: normal; }
.vnl-col-accion { width: 1%; text-align: center; }
.vnl-th-n, .vnl-td-n { width: 42px; text-align: center; color: var(--text); }
.vnl-th-num, .vnl-td-num { text-align: right; }
.vnl-tabla tfoot td { font-weight: 700; text-align: right; border-top: 1px solid #3a4250; }
.vnd-tabs { display: flex; border: 1px solid #3b4450; border-radius: 8px; overflow: hidden; }
.vnd-tab {
  padding: 0 13px; height: 34px; font-size: 12px; font-weight: 700; font-family: inherit;
  background: transparent; color: var(--text); border: 0; cursor: pointer;
}
.vnd-tab + .vnd-tab { border-left: 1px solid #3b4450; }
.vnd-tab--act { background: var(--accent-amber, #f2c200); color: #000; }
.vnd-campo { flex: 1; min-width: 230px; max-width: 400px; }
.vnd-campo .per-campo { grid-template-columns: 62px 1fr; align-items: center; }
.vnd-kpis { display: flex; gap: 9px; padding: 8px 14px 0; flex-wrap: wrap; }
.vnd-kpi { flex: 1; min-width: 140px; padding: 8px 11px; border-radius: 8px; border: 1px solid #2c333d; }
.vnd-kpi strong { display: block; font-size: 16px; font-weight: 700; }
.vnd-kpi span { font-size: 12px; color: var(--text); }

/* ---- Modo claro ---- */
.vnv-modal.mo-claro .vnb { border-color: #d9dee5; background: #fbfcfe; }
.vnv-modal.mo-claro .vnb-cab {
  background: var(--vnv-marca); border-bottom-color: var(--vnv-marca);
}
.vnv-modal.mo-claro .vnb-cab h4 { color: var(--vnv-marca-txt); }
.vnv-modal.mo-claro .vnb-cab .lu-btn { color: var(--vnv-marca-txt); }
.vnv-modal.mo-claro .vnb .per-campo > span { color: #000; }
.vnv-modal.mo-claro .vnb .per-campo > input,
.vnv-modal.mo-claro .vnb .per-campo > select,
/* «output» es el importe del usado y «.vnv-trio» los gastos de
   otorgamiento: no son «input», así que estas reglas no los tomaban y
   caían en otra superficie. Se veían de otro color que los campos de al
   lado, en el monitor y en el teléfono. */
.vnv-modal.mo-claro .vnb .per-campo > output,
.vnv-modal.mo-claro .vnb .per-campo > .vnv-trio,
.vnv-modal.mo-claro .vnb .cat-disparador,
.vnv-modal.mo-claro .vnv-mesanio input { background: #ffffff; color: #000; border-color: #a8b3c2; }
.vnv-modal.mo-claro .vnb .per-campo > input:disabled,
.vnv-modal.mo-claro .vnb .per-campo > select:disabled,
.vnv-modal.mo-claro .vnb .cat-disparador:disabled,
.vnv-modal.mo-claro .vnv-mesanio input:disabled { background: #eef1f5; color: var(--text); border-color: #ccd3dc; }
.vnv-modal.mo-claro .per-campo--calc strong { color: var(--text); border-color: #e0b674; background: #fdf4e4; }
.vnv-modal.mo-claro .vnv-consultas { border-color: #d9dee5; background: #f6f8fb; }
.vnv-modal.mo-claro .vnv-unidad.pnl-existente { background: #e9f1fc; border-color: #a9c9ee; }
.vnv-modal.mo-claro .vnp-cab { background: #d9e8fa; color: #000; }
.vnv-modal.mo-claro .vnp-grupo h5 { color: #000; }
.vnv-modal.mo-claro .vnp-lista dt { color: #000; }
.vnv-modal.mo-claro .vnp-lista dd b { color: #000; }
.vnv-modal.mo-claro .vnp-interno { color: #000; }
.vnv-modal.mo-claro .vnv-unidad .vnv-nota { color: #000; }
.mo-claro .vnl-buscar { background: #ffffff; color: #000; border-color: #a8b3c2; }
.mo-claro .vnl-tabla-cont { border-color: #d7dbe0; }
.mo-claro .vnd-kpi { border-color: #d7dbe0; background: #f6f8fa; }
.mo-claro .cat-pie { background: #f1f4f8; border-top-color: #d9dee5; color: #000; }



/* ============================================================
   Ventas de 0km: color de la marca y modo compacto.
   El color sale del concesionario elegido, y se usa de fondo en los títulos
   de los bloques para ubicarse de un vistazo en cuál se está cargando.
   ============================================================ */
.vnv-modal { --vnv-marca: #6c7684; --vnv-marca-luz: #96a1b3; --vnv-marca-txt: #ffffff; --vnv-marca-fuerte: #3c434f; }
.vnv-modal.vnv-marca--renault { --vnv-marca: #f2c200; --vnv-marca-luz: #f2c200; --vnv-marca-txt: #1d1a06; --vnv-marca-fuerte: #6b5500; }
.vnv-modal.vnv-marca--peugeot { --vnv-marca: #0b4f96; --vnv-marca-luz: #4f8ef7; --vnv-marca-txt: #ffffff; --vnv-marca-fuerte: #0b4f96; }
.vnv-modal.vnv-marca--toyota  { --vnv-marca: #cf2126; --vnv-marca-luz: #e2574c; --vnv-marca-txt: #ffffff; --vnv-marca-fuerte: #b3231a; }

.vnv-modal .vnb { border-left-color: var(--vnv-marca-luz, var(--vnv-marca)); }
/* Banda del color de la casa con la letra en contraste, igual que la ficha
   de la unidad. La vez anterior quedó ilegible porque el fondo iba con el
   color de la casa Y la letra también: ahora la letra usa --vnv-marca-txt,
   que es blanco o casi negro según la marca. */
.vnv-modal .vnb-cab {
  background: var(--vnv-marca);
  border-bottom: 1px solid var(--vnv-marca-luz, var(--vnv-marca));
  border-radius: 7px 7px 0 0;
}
.vnv-modal .vnb-cab h4 { color: var(--vnv-marca-txt); }
.vnv-modal .vnb-nota { color: var(--vnv-marca-txt); opacity: 1; }
.vnv-modal .vnb-cab .lu-btn {
  border-color: color-mix(in srgb, var(--vnv-marca-txt) 45%, transparent);
  color: var(--vnv-marca-txt);
}
.vnv-modal .vnb-cab .lu-btn:hover:not(:disabled) { background: color-mix(in srgb, var(--vnv-marca-txt) 18%, transparent); }
.vnv-modal .vnp-cab { background: var(--vnv-marca); color: var(--vnv-marca-txt); border-bottom-color: var(--vnv-marca); }
.vnv-modal .vnp-chip { color: var(--vnv-marca-txt); }
.vnv-modal .vnv-unidad.pnl-existente { border-color: color-mix(in srgb, var(--vnv-marca-luz, var(--vnv-marca)) 45%, transparent); }
.vnv-modal .vnp-grupo h5 { border-bottom-color: color-mix(in srgb, var(--vnv-marca-luz, var(--vnv-marca)) 40%, transparent); }
.vnv-modal .vnp-lista > div { border-bottom-color: color-mix(in srgb, var(--vnv-marca-luz, var(--vnv-marca)) 24%, transparent); }

/* ---- Modo compacto: entra todo de una, sin barra de scroll ---- */
.vnv-compacto .vnv-cuerpo--2col {
  max-height: none; overflow: hidden; padding: 8px 10px; gap: 10px;
}
/* Si en una pantalla muy baja algo no entrara, se puede seguir bajando con la
   rueda; lo que se saca es la barra, no el desplazamiento. */
.vnv-compacto .vnv-cuerpo--2col { overflow-y: auto; scrollbar-width: none; }
.vnv-compacto .vnv-cuerpo--2col::-webkit-scrollbar { width: 0; height: 0; }

.vnv-compacto .per-cab { padding: 8px 12px; }
.vnv-compacto .per-titulo { font-size: 15px; }
.vnv-compacto .vnv-buscador { padding: 6px 10px 4px; }
.vnv-compacto .vnb-body { padding: 6px 8px; gap: 4px; }
.vnv-compacto .vnb-cab { padding: 4px 8px; }
.vnv-compacto .vnb-cab h4 { font-size: 10.5px; letter-spacing: .07em; }
.vnv-compacto .vnb-nota { font-size: 10.5px; }
.vnv-compacto .vnb + .vnb, .vnv-compacto .vnv-col > .vnb + .vnv-unidad { margin-top: 6px; }
.vnv-compacto .vnb .per-campo { grid-template-columns: 112px 1fr; gap: 7px; }
.vnv-compacto .vnb .per-campo > span { font-size: 10.5px; }
.vnv-compacto .vnb .per-campo > input,
.vnv-compacto .vnb .per-campo > select,
.vnv-compacto .vnb .cat-disparador,
.vnv-compacto .vnv-mesanio input {
  min-height: 25px; padding: 3px 7px; font-size: 11.5px; border-radius: 6px;
}
.vnv-compacto .per-campo--calc strong { min-height: 25px; padding: 3px 7px; font-size: 12.5px; }
.vnv-compacto .vnb .com-ayuda { font-size: 10.5px; line-height: 1.25; }
.vnv-compacto .vnv-consultas { padding: 3px 6px 3px 8px; gap: 4px; }
.vnv-compacto .vnv-consultas-tit { font-size: 10px; }
.vnv-compacto .lu-btn--sm { padding: 2px 6px; font-size: 10px; }
.vnv-compacto .per-pie { padding: 7px 12px; }

.vnv-compacto .vnp-cab { padding: 4px 8px; font-size: 10.5px; }
.vnv-compacto .vnp-hero { min-height: 42px; padding: 6px 8px; gap: 8px; }
.vnv-compacto .vnp-interno { font-size: 14px; padding: 2px 8px; min-width: 54px; }
.vnv-compacto .vnp-interno-input { height: 26px; width: 76px; font-size: 13px; }
.vnv-compacto .vnp-hero strong { font-size: 11.5px; }
.vnv-compacto .vnp-hero p { font-size: 10px; }
.vnv-compacto .vnp-cuerpo { padding: 0 8px; }
.vnv-compacto .vnp-grupo + .vnp-grupo { margin-top: 4px; }
.vnv-compacto .vnp-grupo h5 { font-size: 10px; padding: 4px 0 2px; }
.vnv-compacto .vnp-lista > div { min-height: 19px; padding: 2px 0; }
.vnv-compacto .vnp-lista dt { font-size: 10.5px; }
.vnv-compacto .vnp-lista dd { font-size: 10.5px; }
.vnv-compacto .vnp-sindato { font-size: 10.5px; }
.vnv-compacto .vnv-unidad .vnv-nota { padding: 5px 8px 7px; font-size: 10.5px; }

/* En claro, los bloques y el panel se apoyan sobre blanco */
.vnv-modal.mo-claro .vnb { background: #ffffff; border-color: #dde3ea; }
.vnv-modal.mo-claro .vnb .per-campo > span { color: #000; }
.vnv-modal.mo-claro .vnv-unidad.pnl-existente { background: color-mix(in srgb, var(--vnv-marca) 8%, #ffffff); }
.vnv-modal.mo-claro .vnp-grupo h5 { color: var(--text); }
.vnv-modal.mo-claro .vnp-lista dt { color: var(--text); }
.vnv-modal.mo-claro .vnp-lista dd b { color: #000; }
.vnv-modal.mo-claro .vnv-cliente { background: color-mix(in srgb, #b87510 8%, #ffffff); }



/* ---- Buscadores: son la puerta de entrada, tienen que verse ---- */
.vnv-compacto .vnv-buscador { padding: 9px 12px 8px; }
.vnv-modal .bap-input,
.vnl-buscar,
.vnv-compacto .bap-input {
  height: 38px; padding: 0 13px; font-size: 14px; font-weight: 600;
  border-radius: 8px; border: 1.5px solid color-mix(in srgb, var(--vnv-marca-luz, var(--vnv-marca, #6c7684)) 55%, transparent);
  background: color-mix(in srgb, var(--vnv-marca, #6c7684) 7%, transparent);
}
.vnv-modal .bap-input::placeholder, .vnl-buscar::placeholder { font-size: 13px; opacity: .75; }
.vnv-modal .bap-input:hover, .vnl-buscar:hover { border-color: var(--vnv-marca-luz, var(--vnv-marca, #6c7684)); }
.vnv-modal .bap-input:focus, .vnl-buscar:focus {
  outline: none; border-color: var(--accent-amber, #f2c200);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent-amber, #f2c200) 26%, transparent);
}
.mo-claro .vnv-modal .bap-input, .mo-claro .vnl-buscar { background: #ffffff; }
.vnv-modal.mo-claro .bap-input { background: #ffffff; }
.vnl-barra .vnl-buscar { min-width: 260px; }

/* Elegir columnas del listado */
.vnl-columnas {
  display: flex; flex-wrap: wrap; align-items: center; gap: 10px;
  margin: 8px 14px 0; padding: 8px 10px;
  border: 1px solid #2c333d; border-radius: 8px; background: rgba(255,255,255,.03);
}
.vnl-col-chk { display: inline-flex; align-items: center; gap: 5px; font-size: 12px; cursor: pointer; }
.vnl-col-chk input { width: 14px; height: 14px; accent-color: var(--accent-amber, #f2c200); }
.vnl-col-chk--fija { opacity: 1; cursor: default; }
.vnl-col-nota { font-size: 12px; color: var(--text); font-style: italic; margin-left: auto; }
.mo-claro .vnl-columnas { background: #f6f8fb; border-color: #d9dee5; }

/* ---- Consulta de ventas: buscador grande, con la lista siempre a la vista ---- */
.vnd-barra { align-items: flex-start; gap: 12px; }
.vnd-busca { flex: 1; min-width: 260px; display: flex; flex-direction: column; gap: 6px; }
.vnd-buscar { width: 100%; height: 44px; font-size: 15px; padding: 0 14px; }
.vnd-sug {
  display: flex; flex-wrap: wrap; gap: 5px; max-height: 108px; overflow-y: auto;
  padding: 2px 0;
}
.vnd-sug-op {
  padding: 5px 11px; border-radius: 999px; font-size: 12px; font-family: inherit;
  background: transparent; color: var(--text, #c9d2e0); border: 1px solid #3b4450; cursor: pointer;
  white-space: nowrap; max-width: 100%; overflow: hidden; text-overflow: ellipsis;
}
.vnd-sug-op:hover, .vnd-sug-op--foco {
  border-color: var(--accent-amber, #f2c200); color: var(--text);
  background: color-mix(in srgb, var(--accent-amber, #f2c200) 14%, transparent);
}
.vnd-sug-vacio { font-size: 12px; color: var(--text); font-style: italic; padding: 4px 2px; }
.vnd-elegido {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  height: 44px; padding: 0 8px 0 14px; border-radius: 8px;
  border: 1.5px solid var(--accent-amber, #f2c200);
  background: color-mix(in srgb, var(--accent-amber, #f2c200) 12%, transparent);
}
.vnd-elegido span {
  font-size: 15px; font-weight: 700; color: var(--text);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.vnd-tabs { height: 44px; }
.vnd-tab { height: 42px; font-size: 13px; padding: 0 16px; }
.mo-claro .vnd-sug-op { color: #000; border-color: #ccd3dc; }
.mo-claro .vnd-buscar { background: #ffffff; }

/* Los buscadores de los listados, del mismo tamaño que este */
.vnl-buscar { height: 44px; font-size: 15px; padding: 0 14px; }
.vnv-modal .bap-input { height: 44px; font-size: 15px; padding: 0 14px; }
.vnv-modal .bap-input::placeholder, .vnl-buscar::placeholder { font-size: 13.5px; }

/* Aviso de ámbito de la solapa abierta en Tablas. Va al final del bloque a
   propósito: puesto antes, las reglas de .com-ayuda de arriba lo pisaban. */
.abm-modal .abm-ambito {
  padding: 6px 10px; margin: 0 0 8px;
  background: var(--panel-2, #161c2a); border: 1px solid var(--border, #262c35);
  border-left: 3px solid #2f4358; border-radius: 8px;
}
.abm-modal .abm-ambito .com-ayuda { font-size: 12px; line-height: 1.45; }
.abm-modal .abm-ambito b { color: inherit; }
/* rt · Tablas en listas (Marcas → Modelos → Versiones). Cada lista se
   elige tocando y abajo tiene las mismas acciones. */
.abm3 { display: flex; flex-direction: column; gap: 8px; }
.abm3-cols { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px;
  height: max(260px, calc(calc(100dvh / var(--tcg-z, 1)) - 480px)); }   /* xd: las solapas ocupan dos renglones */
.abm3-cols--una { grid-template-columns: minmax(0, 560px); }
.abm3-col { display: flex; flex-direction: column; min-height: 0;
  background: var(--panel-2, #161c2a); border: 1px solid var(--border, #252d3f); border-radius: 10px; overflow: hidden; }
.abm3-cab { display: flex; align-items: center; justify-content: space-between; gap: 8px;
  padding: 8px 11px; font-size: 13px; border-bottom: 1px solid var(--border, #252d3f); color: var(--text, #ecf0f4); }
.abm3-cab b { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.abm3-n { font-size: 12px; padding: 0 7px; border-radius: 10px; background: rgba(127,127,127,.16); }
.abm3-lista { flex: 1 1 auto; overflow: auto; padding: 4px; min-height: 0; }
.abm3-vacio { padding: 14px 10px; font-size: 12.5px; color: var(--text); }
.abm3-it { display: flex; align-items: center; justify-content: space-between; gap: 8px; width: 100%;
  padding: 7px 9px; margin: 0 0 2px; font: inherit; font-size: 13px; text-align: left; cursor: pointer;
  color: var(--text, #ecf0f4); background: transparent; border: 1px solid transparent; border-radius: 7px; }
.abm3-it:hover { background: rgba(127,127,127,.10); }
.abm3-it--sel { background: rgba(242,194,0,.14); border-color: var(--accent-amber, #f2c200); font-weight: 700; }
.abm3-it--rep .abm3-nom { color: var(--text); }
.abm3-it--pend .abm3-nom { font-style: italic; color: var(--text); }
.abm3-nom { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.abm3-sub { flex: 0 0 auto; font-size: 12px; font-weight: 400; color: var(--text); }
.abm3-rep { margin-left: 6px; padding: 0 6px; border-radius: 10px; font-size: 12px; font-weight: 700;
  color: #000; background: #e8a23d; vertical-align: 1px; }
.abm3-pie { flex: 0 0 auto; padding: 8px 10px; border-top: 1px solid var(--border, #252d3f);
  display: flex; flex-direction: column; gap: 6px; font-size: 12.5px; color: var(--text, #ecf0f4); }
.abm3-elegido { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.abm3-botones { display: flex; flex-wrap: wrap; gap: 5px; align-items: center; }
.abm3-botones .lu-btn { font-size: 12px; }
.abm3-editor { display: flex; flex-direction: column; gap: 6px; }
.abm3-ed-lbl { font-size: 12px; color: var(--text); }
.abm3-input { width: 100%; box-sizing: border-box; padding: 6px 9px; font: inherit; font-size: 13px; color: inherit;
  background: var(--panel-3, #1e242c); border: 1px solid var(--accent-amber, #f2c200); border-radius: 7px; }
.abm3-une { font-size: 12px; color: var(--text); }
.abm3-repetidos { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; padding: 8px 11px;
  font-size: 12.5px; color: var(--text, #ecf0f4);
  background: rgba(232,162,61,.10); border: 1px solid rgba(232,162,61,.55); border-radius: 9px; }
.abm3-rep-tx { flex: 1 1 260px; }
.abm3-ayuda { margin: 0; font-size: 12px; }
/* ══ rv · MODAL DE VENTAS «A» (08/10/2026, Ramiro eligió la A: «más prolijo»).
   Mismo orden y mismas tarjetas; menos aire entre renglones, títulos y
   buscador más finos y la tarjeta de Usado alineada con las demás. Con los
   renglones dobles y la unidad en dos columnas, la letra llega a ~13,7 px en
   un monitor de 1366 × 768 (antes 8,4). ══ */
.vnv-fijo .vnv-buscador { padding: 4px 8px !important; }
.vnv-fijo .vnvb-caja { padding: 2px 4px 2px 0 !important; }
.vnv-fijo .bap-input { height: 36px !important; font-size: 17px; }
.vnv-fijo .vnvb-pill { height: 32px !important; min-height: 0 !important; }
.vnv-fijo .vnvb-pill--doble > button { height: 30px !important; min-height: 0 !important; }
.vnv-fijo .per-cab { padding: 4px 10px !important; }
.vnv-fijo .vnb-cab { padding: 3px 12px !important; min-height: 0 !important; }
.vnv-fijo .vnb-cab h4 { font-size: 16px; }
.vnv-fijo .vnb-body { padding: 5px 12px 5px !important; gap: 3px !important; }
.vnv-fijo .vnb .per-campo { grid-template-rows: 28px !important; min-height: 0 !important; }
.vnv-fijo .vnb .per-campo > span:first-child { font-size: 17px; }
.vnv-fijo .vnb .per-campo input, .vnv-fijo .vnb .per-campo select, .vnv-fijo .vnb .per-campo output,
.vnv-fijo .vnb .cat-disparador, .vnv-fijo .vnb .vnv-usado-txt { height: 28px !important; min-height: 0 !important; padding-top: 0 !important; padding-bottom: 0 !important; font-size: 17px; }
.vnv-fijo .vnb .lu-btn--sm { height: 26px !important; min-height: 0 !important; padding-top: 0 !important; padding-bottom: 0 !important; }
.vnv-fijo .vnv-cargar-usado { height: 24px !important; padding: 0 10px !important; }
.vnv-fijo .vnv-cuerpo { gap: 6px !important; padding: 6px 8px !important; }
.vnv-fijo .per-pie { padding: 5px 12px !important; }
.vnv-fijo .per-pie .lu-btn, .vnv-fijo .per-pie button { min-height: 0 !important; height: 32px !important; padding-top: 0 !important; padding-bottom: 0 !important; }
/* La tarjeta de Usado tenía su título metido para adentro y más alto que los demás. */
.vnv-fijo .vnb.vnv-usado { padding: 0 !important; gap: 0 !important; }
.vnv-fijo .vnb.vnv-usado > .vnb-body { padding: 5px 12px !important; }
.vnv-fijo .vnv-cargar-usado { height: 22px !important; font-size: 11px; line-height: 1 !important; }
.vnv-fijo .vnv-usado > .vnb-cab { padding-top: 3px !important; padding-bottom: 3px !important; min-height: 0 !important; }
.vnv-fijo .vnv-usado .vnv-cargar-usado { min-height: 0 !important; height: 22px !important; padding: 0 8px !important; margin: 0 !important; }

/* ry: la ficha de la unidad en UNA columna, con 9 datos (Ramiro, 08/10). */
@media (min-width: 900px) {
.vnv-fijo .vnv-unidad .vnp-cab { padding: 3px 12px !important; min-height: 0 !important; }
.vnv-fijo .vnv-unidad .vnp-hero { padding: 3px 10px !important; }
.vnv-fijo .vnv-unidad .vnp-hero p { display: none !important; }
.vnv-fijo .vnv-unidad .vnp-cuerpo { padding: 0 12px 4px !important; overflow: hidden !important; }
.vnv-fijo .vnv-unidad .vnp-grupo > h5 { display: none !important; }
.vnv-fijo .vnv-unidad .vnp-lista > div { padding: 2px 0 !important; border-bottom: 1px dashed rgba(127,127,127,.25); }
.vnv-fijo .vnv-unidad .vnp-lista dt { font-size: 14px; }
.vnv-fijo .vnv-unidad .vnp-lista dd { font-size: 15px; }
}
/* Renglón doble: rótulo · caja · rótulo · caja. Los controles son hijos
   directos del renglón, así toman la misma caja que todos los demás, y la
   primera columna mide lo mismo que en los renglones simples: queda alineado. */
.vnv-fijo .vnb .per-campo.per-campo--par { grid-template-columns: min(182px, 40%) minmax(0, 1fr) auto minmax(0, 1fr) !important; }
.vnv-fijo[data-fuente-on="1"] .vnb .per-campo.per-campo--par { grid-template-columns: min(calc(182px * var(--vnv-f, 1)), 46%) minmax(0, 1fr) auto minmax(0, 1fr) !important; }
.vnv-fijo .vnb .per-campo--par > * { min-width: 0; }
.vnv-fijo .vnb .per-campo--par > .vnv-par-rot { font-size: 17px; font-weight: 600; text-transform: none; letter-spacing: normal; white-space: nowrap; padding: 0 2px; }
.vnv-fijo .vnb .per-campo--par > input { height: 28px !important; min-height: 0 !important; padding-top: 0 !important; padding-bottom: 0 !important; font-size: 17px; width: 100%; box-sizing: border-box; }
@media (max-width: 899px) {
  .vnv-fijo .vnb .per-campo.per-campo--par { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) !important; }
  .vnv-fijo .vnb .per-campo--par > span:first-child, .vnv-fijo .vnb .per-campo--par > .vnv-par-rot { grid-column: auto; }
}
/* rx · Cuentas corrientes */
.ctc-cuerpo .pvx-kpis { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.ctc-dos { display: grid; grid-template-columns: minmax(0, 1fr); gap: 10px; }
.ctc-dos > * { min-width: 0; }
.ctc-tabla td, .ctc-tabla th { white-space: nowrap; padding-left: 7px; padding-right: 7px; }
.ctc-bloque .ctc-tabla { width: 100%; }
.ctc-tabla { font-variant-numeric: tabular-nums; }
.ctc-tabla th { text-align: right; } .ctc-tabla th:first-child { text-align: left; }
.ctc-n { text-align: right; }
.ctc-p { text-align: right; color: var(--text); font-size: 12px; }
.ctc-p--mal { color: #ef8b8b !important; font-weight: 700; }
.mo-claro .ctc-p--mal { color: #b42323 !important; }
.ctc-total td { font-weight: 800; border-top: 2px solid currentColor; }
.ctc-aum { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 12px; margin-top: 8px; font-size: 12.5px; color: var(--text); }
.ctc-aum-m { display: inline-flex; align-items: center; gap: 4px; }
.ctc-aum .ctc-aum-in { width: 64px !important; min-width: 0; flex: 0 0 64px; text-align: right; padding: 2px 6px; height: 26px; box-sizing: border-box; }
.ctc-mes { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; }
.ctc-mes-sel { padding: 3px 8px; }
.ctc-cli { text-align: left; padding: 0; font-weight: 600; }
.ctc-wsp { padding: 2px 10px; }
.ctc-tabla-deu td:first-child { white-space: normal; min-width: 180px; }
.ctc-cli-sel { max-width: 360px; }
.ctc-mes-carga { max-width: 200px; }
@media (max-width: 900px) {
  .ctc-cuerpo .pvx-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .ctc-dos { grid-template-columns: 1fr; }
}
/* rv · Servicios conectados (Ginza) */
.sc-cuerpo .pvx-kpis { grid-template-columns: repeat(5, minmax(0, 1fr)); }
.sc-filtros { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 14px; margin: 8px 0; }
.sc-chips { display: flex; flex-wrap: wrap; align-items: center; gap: 5px; }
.sc-chips .mc-chip b { margin-left: 4px; font-weight: 800; }
.sc-buscar { flex: 1 1 260px; min-width: 0; max-width: 460px; }
.sc-fila { cursor: pointer; }
.sc-fila:hover td { background: rgba(127,127,127,.08); }
.sc-fila--sel td { background: rgba(242,194,0,.14) !important; }
.sc-fila--fuera td { opacity: 1; }
.sc-tabla-caja { overflow-x: auto; }
.sc-tabla td, .sc-tabla th { white-space: nowrap; }
.sc-tabla td:nth-child(3), .sc-tabla td:nth-child(4) { white-space: normal; min-width: 130px; }
.sc-tabla td, .sc-tabla th { padding-left: 7px; padding-right: 7px; }
.sc-tabla { font-size: 12.5px; }
.sc-tabla th { font-size: 13px; }
.sc-estado--gestion { background: rgba(232,162,61,.14); color: var(--text); }
.mo-claro .sc-estado--gestion { color: #000; }
.sc-mono { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 12px; }
.sc-estado { display: inline-block; padding: 1px 8px; border-radius: 10px; font-size: 12px; font-weight: 700; white-space: nowrap;
  background: rgba(127,127,127,.18); color: var(--text); }
.sc-estado--activo { background: rgba(80,180,120,.18); color: var(--text); }
.sc-estado--sin { background: rgba(239,107,107,.16); color: #ef8b8b; }
.sc-estado--fugado { background: rgba(232,162,61,.18); color: var(--text); }
.sc-estado--entregreventa { background: rgba(90,162,232,.18); color: var(--text); }
.mo-claro .sc-estado--activo { color: #000; }
.mo-claro .sc-estado--sin { color: #b42323; }
.mo-claro .sc-estado--fugado { color: #000; }
.mo-claro .sc-estado--entregreventa { color: #000; }
.sc-wsp-fila { padding: 2px 10px; }
.sc-ficha-grilla { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)) minmax(0, 2fr); gap: 8px; margin: 6px 0 8px; }
.sc-ficha .pvx-fila { justify-content: space-between; flex-wrap: wrap; }
.sc-msj { width: 100%; box-sizing: border-box; }
.sc-subir { display: inline-flex; align-items: center; cursor: pointer; }
.sc-previa { margin-top: 10px; }
.sc-tabla-ind td, .sc-tabla-ind th { text-align: right; }
.sc-tabla-ind td:first-child, .sc-tabla-ind th:first-child { text-align: left; }
@media (max-width: 900px) {
  .sc-cuerpo .pvx-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .sc-ficha-grilla { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
/* rt · Compañías de seguro */
.seg-cuerpo .pvx-kpis { grid-template-columns: repeat(6, minmax(0, 1fr)); }
.seg-filtro { flex-direction: row; align-items: center; gap: 6px; }
/* rx · bloque del filtro y «+ Nuevo siniestro» (va antes que .pvx-bloque y
   .pvx-campo en la hoja: por eso los selectores llevan .seg-cuerpo). */
.seg-cuerpo .seg-acciones { display: flex; align-items: center; gap: 12px; padding: 10px 14px;
  border: 1px solid color-mix(in srgb, var(--casa, #2f6fbf) 70%, transparent);
  background: color-mix(in srgb, var(--casa, #2f6fbf) 12%, var(--panel, #161c29)); }
.tcg-claro .seg-cuerpo .seg-acciones { background: color-mix(in srgb, var(--casa, #2f6fbf) 7%, #ffffff); }
.seg-cuerpo .seg-acciones .seg-filtro { flex-direction: row; align-items: center; gap: 8px; }
.seg-cuerpo .seg-acciones .seg-filtro span { font-size: 13px; font-weight: 700; color: var(--text, #e6eaf0); }
.tcg-claro .seg-cuerpo .seg-acciones .seg-filtro span { color: #000; }
.seg-cuerpo .seg-acciones .seg-filtro .pvx-in { height: 34px; min-width: 200px; }
.seg-cuerpo .seg-acciones .seg-nuevo { margin-left: auto; height: 34px; min-width: 170px; }
.seg-grilla { display: grid; grid-template-columns: repeat(auto-fill, minmax(170px, 1fr)); gap: 8px; margin: 6px 0 10px; }
.seg-grilla--veh { grid-template-columns: repeat(6, minmax(0, 1fr)); }
.seg-fila { cursor: pointer; }
.seg-fila:hover td { background: rgba(127,127,127,.08); }
.seg-fila--sel td { background: rgba(242,194,0,.14) !important; }
.seg-tabla-sin { max-height: 300px; overflow: auto; }
.seg-tabla-rep { max-height: calc(calc(100dvh / var(--tcg-z, 1)) - 380px); overflow: auto; }
.seg-hoy { color: var(--text); font-weight: 700; }
.seg-vencido { color: #ef6b6b; font-weight: 700; }
.seg-estado { display: inline-block; padding: 1px 8px; border-radius: 10px; font-size: 12px; font-weight: 700; white-space: nowrap; }
.seg-estado--pendiente { background: rgba(239,107,107,.16); color: #ef8b8b; }
.seg-estado--cotizando { background: rgba(232,162,61,.18); color: var(--text); }
.seg-estado--cotizada { background: rgba(80,180,120,.18); color: var(--text); }
.seg-estado--enviada { background: rgba(127,127,127,.18); color: var(--text); }
.mo-claro .seg-estado--pendiente { color: #b42323; }
.mo-claro .seg-estado--cotizando, .mo-claro .seg-hoy { color: #000; }
.mo-claro .seg-estado--cotizada { color: #000; }
.mo-claro .seg-vencido { color: #b42323; }
.seg-piezas { table-layout: fixed; width: 100%; }
.seg-piezas td { padding: 3px 4px; }
/* sa · 11 columnas: código, descripción, cant., público, margen, % desc., Orion, disponibilidad, origen, confirmada, quitar. */
.seg-piezas-viejo th:nth-child(1) { width: 122px; }
.seg-piezas-viejo th:nth-child(2) { width: auto; }
.seg-piezas-viejo th:nth-child(3) { width: 48px; }
.seg-piezas-viejo th:nth-child(4) { width: 104px; }
.seg-piezas-viejo th:nth-child(5) { width: 62px; }
.seg-piezas-viejo th:nth-child(6) { width: 54px; }
.seg-piezas-viejo th:nth-child(7) { width: 112px; }
.seg-piezas-viejo th:nth-child(8) { width: 124px; }
.seg-piezas-viejo th:nth-child(9) { width: 104px; }
.seg-piezas-viejo th:nth-child(10) { width: 84px; }
.seg-piezas-viejo th:nth-child(11) { width: 38px; }
.seg-piezas th { font-size: 13px; white-space: normal !important; line-height: 1.15; }
.seg-piezas td:nth-child(1) .pvx-in, .seg-piezas td:nth-child(2) .pvx-in { text-align: left; }
.seg-subir { display: inline-flex; align-items: center; }
.seg-piezas .pvx-in { width: 100%; box-sizing: border-box; min-width: 0; }
.seg-in-cod { min-width: 110px !important; }
.seg-in-n { max-width: 64px; text-align: center; }
.seg-in-plata { max-width: 120px; text-align: right; }
.seg-de-lista { border-color: rgba(80,180,120,.6) !important; }
.seg-de-dicc { border-color: rgba(90,162,232,.7) !important; }
/* rf: a confirmar, discontinuada, fecha de la consulta */
.seg-pieza--conf td { background: rgba(224,166,58,.13); }
.seg-confirmar { background: #e0a63a !important; border-color: #e0a63a !important; color: #000 !important; font-weight: 700; padding: 3px 10px !important; }
.seg-conf-ok { display: inline-flex; align-items: center; gap: 4px; font-size: 12px; opacity: 1; cursor: pointer; white-space: nowrap; }
.seg-conf-td { text-align: center; }
.seg-disp-fecha { display: block; font-size: 12px; opacity: 1; margin-top: 2px; white-space: nowrap; }
.seg-disc { color: #c0392b !important; font-weight: 700; }
.seg-viejo { margin: 6px 0; }
.crm-scroll-arriba { overflow-x: auto; overflow-y: hidden; height: 14px; margin: 4px 0 2px; }
.crm-env-emisor { font-size: 12.5px; font-weight: 700; padding: 3px 10px; border-radius: 99px; background: rgba(34,197,94,.14); color: var(--text); }
.crm-env-emisor--falta { background: rgba(224,166,58,.18); color: var(--text); }
.comu-emisor .pvx-campos { align-items: flex-end; }
.comu-emisor-ok { align-self: center; }
/* rg: fotos del perito, reemplazos, devoluciones */
.seg-fotos { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin: 6px 0 8px; }
.seg-fotos-tit { font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: .05em; }
.seg-foto { position: relative; display: inline-flex; }
.seg-foto-mini { position: relative; padding: 0; border: 1px solid rgba(127,127,127,.4); border-radius: 6px; overflow: hidden; width: 64px; height: 48px; background: #000; cursor: zoom-in; }
.seg-foto-mini img { width: 100%; height: 100%; object-fit: cover; display: block; }
.seg-foto-mini b { position: absolute; left: 3px; bottom: 2px; font-size: 12px; color: #fff; background: rgba(0,0,0,.55); border-radius: 4px; padding: 0 4px; }
.seg-foto-x { position: absolute; top: -6px; right: -6px; width: 18px; height: 18px; padding: 0 !important; border-radius: 50%; font-size: 12px; line-height: 1; }
.seg-fotos-agregar { cursor: pointer; }
.seg-foto-grande { cursor: zoom-out; display: flex; align-items: center; justify-content: center; }
.seg-foto-grande img { max-width: calc(92vw / var(--tcg-z, 1)); max-height: calc(90vh / var(--tcg-z, 1)); border-radius: 8px; box-shadow: 0 10px 40px rgba(0,0,0,.6); }
.seg-piezas td { white-space: normal !important; vertical-align: top; }
.seg-piezas td > .pvx-in, .seg-piezas td > select.pvx-in { display: block; }
.seg-piezas .seg-conf-ok input[type=checkbox] { width: 16px !important; height: 16px !important; min-width: 0 !important; margin: 0; }
.seg-piezas .seg-conf-td { vertical-align: middle; }
.seg-pz-foto { display: flex !important; }
.seg-in-equiv { margin-top: 3px; font-size: 12px !important; height: 24px !important; opacity: 1; }
.seg-precio-de { display: block; font-size: 12px; color: #000; margin-top: 2px; }
.seg-pz-foto { display: inline-flex; align-items: center; gap: 4px; margin-top: 3px; }
.seg-pz-mini { padding: 0; border: 1px solid rgba(127,127,127,.4); border-radius: 4px; overflow: hidden; width: 34px; height: 26px; cursor: zoom-in; background: #000; }
.seg-pz-mini img { width: 100%; height: 100%; object-fit: cover; display: block; }
.seg-pz-foto-sel { font: inherit; font-size: 12px; padding: 1px 4px; border-radius: 4px; border: 1px solid rgba(127,127,127,.4); background: transparent; color: inherit; }
.seg-devuelta { color: #c0392b; font-weight: 700; opacity: 1; }
.seg-devs { margin: 6px 0 10px; }
.seg-sug { display: block; margin-top: 3px; padding: 1px 8px; font: inherit; font-size: 12px; font-weight: 700; cursor: pointer;
  color: var(--text); background: rgba(90,162,232,.12); border: 1px solid rgba(90,162,232,.45); border-radius: 10px; text-align: left; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mo-claro .seg-sug { color: #000; }
.seg-pieza--falta td:first-child { box-shadow: inset 3px 0 0 #e8a23d; }
.seg-quitar { padding: 2px 8px; }
.seg-pegar-caja { margin: 8px 0; display: flex; flex-direction: column; gap: 6px; }
.seg-pegar-tx { width: 100%; box-sizing: border-box; font-family: inherit; }
.seg-totales { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 12px; margin: 10px 0; }
.seg-total { margin-left: auto; font-size: 15px; }
.seg-total b { font-size: 18px; margin-left: 6px; }
.seg-acciones { justify-content: flex-end; flex-wrap: wrap; }
.seg-acciones .pvx-nota { margin-right: auto; }
.seg-buscar { width: min(420px, 100%); margin: 6px 0; }
.seg-subir { cursor: pointer; }
@media (max-width: 900px) {
  .seg-cuerpo .pvx-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .seg-grilla--veh { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
.mo-claro .abm3-en-uso, .mo-claro .abm3-une, .mo-claro .abm3-it--rep .abm3-nom { color: #000; }
.mo-claro .abm3-en-uso { background: #fbefd2; }
@media (max-width: 760px) {
  .abm3-cols { grid-template-columns: 1fr; height: auto; }
  .abm3-lista { max-height: 260px; }
}
.mo-claro .abm-ambito { background: #f2f5f9; border-color: #d6dde6; border-left-color: #8fb6d8; }

/* Alta encadenada marca · modelo · versión */
.veh-alta {
  display: flex; align-items: flex-end; gap: 8px; flex-wrap: wrap;
  padding: 9px 10px; margin-bottom: 9px;
  background: var(--panel-2, #161c2a); border: 1px solid var(--border, #262c35); border-radius: 8px;
}
.veh-alta .per-campo { flex: 1 1 150px; min-width: 130px; margin: 0; }
.veh-alta .per-campo input { width: 100%; }
.veh-alta-ayuda { flex: 1 1 100%; }
.mo-claro .veh-alta { background: #f2f5f9; border-color: #d6dde6; }

/* Árbol de vehículos */
.abm-arbol .abm-fila--marca td {
  background: var(--panel-3, #1e242c); font-size: 13px; letter-spacing: .3px;
  border-top: 1px solid #2f3742;
}
.abm-arbol .abm-celda-modelo { padding-left: 18px; font-weight: 600; }
.abm-arbol .abm-fila--version td:nth-child(2) { padding-left: 36px; color: var(--text); }
.abm-arbol .abm-version-pend { color: var(--text); font-style: italic; }
.mo-claro .abm-arbol .abm-fila--marca td { background: #e8edf3; }

/* Separar modelo y versión */
.ord-check { display: flex; align-items: center; gap: 6px; font-size: 12px; white-space: nowrap; }
.ord-tabla .ord-input {
  width: 100%; min-width: 90px; background: var(--panel-3, #1e242c);
  border: 1px solid var(--border, #252d3f); border-radius: 6px; padding: 4px 7px;
  color: inherit; font-size: 12px; text-transform: uppercase;
}
.ord-tabla .ord-input--falta { border-color: #7a5a2a; background: var(--panel-2, #2a2418); }
.ord-tabla .ord-fila--duda td:first-child { border-left: 3px solid #e0c58a; }
.mo-claro .ord-tabla .ord-input { background: #ffffff; border-color: #ccd3dc; }
.mo-claro .ord-tabla .ord-input--falta { background: #fdf6e6; border-color: #d8b877; }
.ord-resultado {
  display: flex; align-items: flex-start; gap: 10px; justify-content: space-between;
  margin: 0 14px 8px; padding: 8px 11px; font-size: 12px; line-height: 1.5;
  background: rgba(111,191,138,0.10); border: 1px solid #2f5a41;
  border-left: 3px solid #6fbf8a; border-radius: 8px;
}
.ord-resultado--error { background: rgba(224,138,138,0.10); border-color: #5a2f2f; border-left-color: #e08a8a; }
.ord-resultado button { flex: none; }
.mo-claro .ord-resultado { background: #eef7f1; border-color: #cfe3d6; border-left-color: #4c9d70; }
.mo-claro .ord-resultado--error { background: #fdeeee; border-color: #e6cfcf; border-left-color: #c25b5b; }

/* Elegir 0km o usado antes de abrir el modal de venta */
.rvl-elegir { width: min(520px, calc(94vw / var(--tcg-z, 1))); }
.rvl-opciones { display: flex; gap: 12px; padding: 4px 14px 10px; }
.rvl-op {
  flex: 1; display: flex; flex-direction: column; gap: 4px; align-items: center;
  padding: 18px 12px; cursor: pointer; font: inherit; color: inherit;
  background: var(--panel-2, #161c2a); border: 1px solid var(--border, #252d3f); border-radius: 10px;
}
.rvl-op:hover:not(:disabled) { border-color: var(--amber, #e0a458); background: var(--panel-3, #1e242c); }
.rvl-op:disabled { opacity: .5; cursor: default; }
.rvl-op-tit { font-size: 17px; font-weight: 700; letter-spacing: .3px; }
.rvl-op-sub { font-size: 12px; color: var(--text); }
.rvl-nota { display: block; padding: 0 14px 14px; line-height: 1.5; }
.rvl-aviso { pointer-events: none; position: fixed; left: 50%; transform: translateX(-50%); top: 14px; z-index: 1200; }

/* Alta del usado retomado. Modal chico y de una sola columna: rótulo a la
   izquierda y campo a la derecha, como el sistema de referencia. Todo un punto
   más chico que el resto de la app: es una carga corta y de paso, no una
   pantalla donde uno se queda. */
/* 505px y no 392: Ramiro pidió tres centímetros más de ancho —unos 113px a
   96 puntos por pulgada— porque quedaba muy angosto. El «min» con 95vw se
   mantiene para que en el teléfono siga entrando. */
.ret-modal { width: min(505px, calc(95vw / var(--tcg-z, 1))); display: flex; flex-direction: column; font-size: 12px; }
/* El rótulo de sección con su botón a la derecha. */
.ret-seccion--conbtn { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
/* Los cuatro canales de compra en UN renglón: son excluyentes y verlos juntos
   deja claro que se elige uno. Con el modal más ancho ahora entran. */
.ret-canal .ret-tildes { flex-wrap: nowrap; }
.ret-canal .ret-tilde { min-width: 0; flex: 1 1 0; padding: 3px 6px; }
.ret-canal .ret-tilde span:last-child { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* El renglón del usado en parte de pago: dice qué auto tiene la venta —o que
   no tiene— y al lado el botón que abre el modal. Antes acá había un
   desplegable con los peritajes, que dejaba elegir un auto sin poder
   completarlo. */
/* Los peritajes sin tomar, a la vista al abrir el modal: son pocos y hay que
   ver si hay alguno sin tener que adivinar que se puede buscar. */
.ret-peritados { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; margin-bottom: 8px; }
.ret-peritados-tit { font-size: 12px; color: var(--text); width: 100%; }
.ret-peritados-mas { font-size: 12px; color: var(--text); }
/* Por qué falta cada peritaje. Un renglón por auto: se lee de arriba abajo. */
.ret-peritados-motivo { width: 100%; font-size: 12px; color: var(--text); }
.ret-peritados-motivo b { color: var(--text, #ecf0f4); font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; }

/* ── LAS VISTAS DE LA PANTALLA, EN EL ENCABEZADO ────────────────────
   OJO: esto no elige concesionario —eso lo hace el selector único del menú—.
   Son las vistas propias de una pantalla, como los dos unificados de la
   Liquidación. Va pegado al título porque dice de QUÉ se está mirando.
   La tinta sale de «--casa-tinta», que es la que el encabezado ya calculó
   para ir sobre la banda de la casa: en Jorge Giorgi el amarillo pide tinta
   oscura y en las otras dos, clara. Usar un color fijo acá es exactamente el
   error que dejaba los botones del buscador invisibles en dos casas. */
.enc-vistas { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-top: 6px; }
/* ── SIN HUECOS ENTRE EL ENRUTADOR, EL ENCABEZADO Y EL TRABAJO ──────
   Pedido de Ramiro: los botones van DENTRO del encabezado y no tiene que
   sobrar aire entre las tres bandas. El encabezado se pega arriba y abajo, y
   la barra de la pantalla —que antes flotaba con su propio margen— se apoya
   contra él. */
.tcg-lienzo .tcg-envoltura { margin: 0 0 8px; border-radius: 0 0 10px 10px; }
/* LA FRANJA QUE CIERRA LA CAJA ABAJO (23/09/2026). El encabezado de la
   pantalla queda pegado arriba y la caja terminaba en el aire: una línea del
   color de la casa la cierra. Va en el «::after» del lienzo y no en un
   elemento propio, porque el tablero tiene varios ternarios anidados y un div
   que los cruce no cierra donde abre. */
.tcg-lienzo-pad:has(> .tcg-envoltura)::after {
  content: ""; display: block; height: 4px; margin-top: -4px;
  border-radius: 0 0 10px 10px;
  background: var(--casa-activa, var(--accent-blue, #4f8ef7)); opacity: 1;
}
.tcg-lienzo .tcg-envoltura + .ivj-toolbar,
.tcg-lienzo .tcg-envoltura + .lc-panel > .ivj-toolbar { margin-top: 0; }
.lc-panel > .tcg-envoltura { margin-bottom: 8px; }
/* La barra de acciones de la pantalla pierde el margen de arriba: el aire lo
   pone el encabezado, una sola vez, y no cada bloque por su cuenta. */
.ivj-toolbar { margin-top: 0; }
.enc-vista {
  display: inline-flex; align-items: center; gap: 6px;
  height: 28px; padding: 0 11px; border-radius: 999px; cursor: pointer;
  font: inherit; font-size: 12px; font-weight: 600; white-space: nowrap;
  color: var(--casa-tinta, #ecf0f4);
  background: color-mix(in srgb, var(--casa-tinta, #ecf0f4) 10%, transparent);
  border: 1px solid color-mix(in srgb, var(--casa-tinta, #ecf0f4) 35%, transparent);
}
.enc-vista:hover { background: color-mix(in srgb, var(--casa-tinta, #ecf0f4) 20%, transparent); }
/* La elegida se rellena con la tinta y escribe con el color de la banda: es
   el mismo gesto de la pastilla encendida del buscador. */
.enc-vista--on {
  background: var(--casa-tinta, #ecf0f4);
  color: var(--casa, #14181d);
  border-color: var(--casa-tinta, #ecf0f4);
}
/* Sin punto de color: no son casas. */
.enc-vista-punto { width: 8px; height: 8px; border-radius: 50%; background: var(--casa-punto, currentColor); flex: none; }
.enc-vista--on .enc-vista-punto { box-shadow: 0 0 0 1px color-mix(in srgb, var(--casa, #14181d) 45%, transparent); }
/* «Unificado» no tiene punto: no es una casa, es la suma de las tres. */

/* «Sin peritar» en la columna «Cuándo» de la tabla de pendientes: ocupa el
   mismo lugar que la pastilla de momento de la tabla de arriba, pero apagado,
   porque no es un momento sino la falta de uno. */
.per-sin { color: var(--text); font-style: italic; }
/* La misma caja QUE LOS DEMÁS CAMPOS del modal, no una parecida. Antes usaba
   «--panel-2» y un filo distinto, así que en las tres casas se veía de otro
   color que «Importe usado», justo debajo. Ramiro lo reportó con foto. Ahora
   copia exactamente la superficie, el filo y el alto de «.per-campo > input».*/
.vnv-usado-txt {
  flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  display: block; min-height: 31px; padding: 5px 9px; line-height: 20px;
  background: var(--bg, #10151c); color: var(--text, #e9eef6);
  border: 1px solid #3b4450; border-radius: 8px; font-size: 13px;
}
.vnv-usado-txt:empty::before { content: "Sin usado"; color: var(--text); }
.ret-modal .per-titulo { font-size: 13.5px; }
.ret-cab { align-items: center; padding: 10px 12px 6px; }
.ret-quien {
  margin: 0 12px 7px; padding: 4px 8px; font-size: 12px; line-height: 1.4;
  color: var(--text); background: var(--panel-2, #161c2a);
  border-radius: 6px; border-left: 3px solid var(--vnv-marca-luz, var(--vnv-marca, #6c7684));
}
.ret-quien b { color: inherit; font-weight: 700; }
.ret-seccion {
  padding: 3px 8px; margin: 0 0 5px; border-radius: 6px;
  background: var(--vnv-marca, #6c7684); color: var(--vnv-marca-txt, #fff);
  font-size: 12px; font-weight: 700; letter-spacing: .5px; text-transform: uppercase;
}
.ret-body { padding: 0 12px; overflow: auto; max-height: calc(calc(100dvh / var(--tcg-z, 1)) - 320px); }
.ret-linea { display: flex; align-items: center; gap: 7px; margin-bottom: 4px; }
.ret-rot { flex: 0 0 104px; text-align: right; font-size: 12px; line-height: 1.2; color: var(--text); }
.ret-ctrl { flex: 1; min-width: 0; }
.ret-nota { display: block; margin-top: 2px; font-size: 12px; line-height: 1.3; }
/* Todos los controles del renglón, iguales. Van prefijados con .ret-modal
   porque si no, la regla .vnv-modal .per-campo input (34px) le gana a los
   desplegables y los inputs sueltos se quedan sin estilo y salen blancos. */
.ret-modal .ret-ctrl { display: block; }
.ret-modal .ret-ctrl .per-campo { display: block; width: 100%; margin: 0; }
.ret-modal .ret-ctrl .per-campo > span { display: none; }
.ret-modal .ret-ctrl input,
.ret-modal .ret-ctrl select,
.ret-modal .ret-ctrl .cat-disparador {
  box-sizing: border-box; width: 100%; min-width: 0;
  height: 27px; min-height: 27px; padding: 0 7px;
  font-size: 13px; font-family: inherit; line-height: 25px;
  background: var(--panel-2, #202940); border: 1px solid var(--border, #2c2f36); border-radius: 6px; color: var(--text, #c7cbd3);
}
.ret-modal .ret-ctrl input:focus,
.ret-modal .ret-ctrl .cat-disparador:focus { outline: none; border-color: var(--vnv-marca-luz, var(--vnv-marca, #6c7684)); }
.ret-modal .ret-ctrl .cvn-cat-elegir { display: flex; width: 100%; gap: 4px; align-items: center; }
.ret-modal .ret-ctrl .cvn-cat-elegir .cat-disparador { flex: 1 1 auto; }
.ret-modal .ret-ctrl .cvn-cat-alta { display: flex; width: 100%; gap: 4px; align-items: center; }
.ret-modal .ret-ctrl .lu-btn {
  flex: 0 0 27px; width: 27px; height: 27px; min-height: 27px;
  padding: 0; font-size: 13px; line-height: 25px; text-align: center;
}
/* El dominio es lo que identifica a un usado, así que se ve distinto al resto */
.ret-modal .ret-linea--dom .ret-rot { color: var(--text, #e6e9ee); font-weight: 700; }
.ret-modal .ret-linea--dom .ret-ctrl input {
  height: 33px; min-height: 33px; line-height: 31px;
  font-size: 14px; font-weight: 700; letter-spacing: 1.1px;
  text-align: center; border-color: var(--vnv-marca-luz, var(--vnv-marca, #6c7684));
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--vnv-marca, #6c7684) 30%, transparent);
}
.ret-marcas { padding: 7px 12px 0; }
.ret-tildes { display: flex; flex-wrap: wrap; gap: 5px; }
/* Los cuatro canales entran en un solo renglón: son excluyentes y verlos
   juntos es lo que deja claro que se elige uno. */
.ret-tildes--fila { flex-wrap: nowrap; }
.ret-tildes--fila .ret-tilde { min-width: 0; padding: 3px 6px; }
.ret-tildes--fila .ret-tilde span:last-child { overflow: hidden; text-overflow: ellipsis; }
.ret-canal { margin-top: 6px; }
.ret-canal-tit {
  display: block; margin-bottom: 3px; font-size: 12px; font-weight: 700;
  letter-spacing: .4px; text-transform: uppercase; color: var(--text);
}
.ret-tilde {
  display: inline-flex; align-items: center; gap: 5px; cursor: pointer;
  padding: 3px 8px; font: inherit; font-size: 12px; line-height: 1.5;
  /* «inherit» dejaba la letra a merced de lo que hubiera arriba: si el padre
     era una franja de color, el tilde se llevaba una tinta que no combinaba
     con su propio fondo. Ahora usa la del tema, igual que el fondo. */
  color: var(--text, #ecf0f4);
  white-space: nowrap;
  background: var(--panel-3, #1e242c); border: 1px solid var(--border, #252d3f); border-radius: 6px;
}
.ret-tilde:hover { border-color: var(--vnv-marca-luz, var(--vnv-marca, #6c7684)); }
.ret-tilde-caja {
  flex: none;
  display: inline-flex; align-items: center; justify-content: center;
  width: 13px; height: 13px; border-radius: 6px; font-size: 12px; font-weight: 700;
  border: 1px solid #3a424e; background: transparent;
}
.ret-tilde--on { border-color: var(--vnv-marca-luz, var(--vnv-marca, #6c7684)); }
.ret-tilde--on .ret-tilde-caja {
  background: var(--vnv-marca, #6c7684); color: var(--vnv-marca-txt, #fff); border-color: transparent;
}
.ret-pie { justify-content: flex-end; gap: 7px; padding: 9px 12px; }
.ret-pie .lu-btn { font-size: 12px; padding: 5px 11px; }
.mo-claro .ret-quien { background: #f2f5f9; }
.mo-claro .ret-tilde { background: #ffffff; border-color: #ccd3dc; }
.mo-claro .ret-tilde-caja { border-color: #ccd3dc; }

/* La pantalla de separar necesita más ancho y más alto que un modal común:
   son seis columnas y tres de ellas se editan. Sin anchos fijos, la columna
   del texto original se comía a las demás y los inputs se superponían. */
.ord-modal { width: min(1280px, calc(98vw / var(--tcg-z, 1))); }
.ord-tabla-wrap { max-height: calc(calc(100dvh / var(--tcg-z, 1)) - 330px); }
.ord-tabla { table-layout: fixed; font-size: 12px; }
.ord-tabla th, .ord-tabla td { padding: 5px 8px; vertical-align: top; word-break: break-word; }
.ord-tabla th:nth-child(1), .ord-tabla td:nth-child(1) { width: 24%; }
.ord-tabla th:nth-child(2), .ord-tabla td:nth-child(2) { width: 15%; }
.ord-tabla th:nth-child(3), .ord-tabla td:nth-child(3) { width: 20%; }
.ord-tabla th:nth-child(4), .ord-tabla td:nth-child(4) { width: 25%; }
.ord-tabla th:nth-child(5), .ord-tabla td:nth-child(5) { width: 6%; text-align: right; }
.ord-tabla th:nth-child(6), .ord-tabla td:nth-child(6) { width: 10%; }
.ord-tabla .ord-celda-texto { line-height: 1.5; }
.ord-tabla .ord-ok { color: var(--text); margin-right: 5px; font-weight: 700; }
.ord-tabla .ord-fila--ok td:first-child { border-left: 3px solid transparent; }
.ord-tabla small.com-ayuda { display: block; margin-top: 3px; line-height: 1.35; }

/* ── PRUEBA: procesos como panel fijo en el centro ──────────────────────────
   Dentro de .gv-panel-proceso, los overlays de las pantallas dejan de ser
   ventanas flotantes y pasan a llenar el espacio libre del área de trabajo.
   Para volver a las ventanas flotantes: borrar este bloque y la rama
   panelProceso del render de GestionVentasModulo. */
.gv-root .gv-panel-proceso { flex: 1; min-width: 0; min-height: 0; display: flex; position: relative; }
.gv-root .gv-panel-proceso > * { flex: 1; min-width: 0; min-height: 0; display: flex; }
.gv-root .gv-panel-proceso > .per-overlay {
  position: absolute; inset: 0; background: transparent; z-index: 1;
  /* El aire de arriba y abajo hace que el panel no toque los bordes. */
  padding: 8px 0 12px;
  /* «flex-start» y no «stretch»: estirado, el modal tomaba el alto de la
     pantalla aunque tuviera poco adentro, y quedaba un vacío largo entre las
     tarjetas y el pie. Ahora el modal mide lo que mide su contenido; si no
     entra, se desplaza por dentro contra el max-height.
     Es lo que hacía que la misma pantalla se viera distinta al 75% y al 100%
     de zoom: no cambiaba el modal, cambiaba cuánto sobraba. */
  display: flex; align-items: flex-start; justify-content: center;
  overflow: hidden;
}
.gv-root .gv-panel-proceso > .per-overlay > .per-modal {
  width: 100%; max-width: none; max-height: 100%;
  border: 0; border-radius: 0; box-shadow: none; background: transparent;
  /* Sin esto el modal no puede achicarse por debajo de su contenido: la
     tabla de gestoría lo empuja más ancho que el panel y se recorta. */
  min-width: 0;
  display: flex; flex-direction: column;
}
/* El panel tapa lo que hay atrás. Antes era transparente y sólo medía lo
   que medía su contenido, así que debajo asomaba el menú del módulo y la
   pantalla parecía cortada al medio. */
.gv-root .gv-panel-proceso > .per-overlay { background: var(--bg, #131824); }
/* La tabla se desplaza sola, sin arrastrar la barra de herramientas. Antes,
   al correrla a la derecha se iba también el «⚙ Columnas». */
/* Las OCHO clases de cuerpo, no dos: cobranzas usa .com-cuerpo y por eso
   su tabla desbordaba el modal y el overlay la recortaba al costado. */
.gv-root .gv-panel-proceso .per-modal > .per-cuerpo,
.gv-root .gv-panel-proceso .per-modal > .com-cuerpo,
.gv-root .gv-panel-proceso .per-modal > .vnp-cuerpo,
.gv-root .gv-panel-proceso .per-modal > .vnv-cuerpo,
.gv-root .gv-panel-proceso .per-modal > .acc-cuerpo,
.gv-root .gv-panel-proceso .per-modal > .cc-cuerpo,
.gv-root .gv-panel-proceso .per-modal > .mic-cuerpo,
.gv-root .gv-panel-proceso .per-modal > .abm-cuerpo { min-width: 0; overflow: auto; flex: 1; }
.gv-root .gv-panel-proceso .per-modal .per-cab,
.gv-root .gv-panel-proceso .per-modal .per-pie { flex: 0 0 auto; }
/* El cuerpo crece con lo que tiene adentro y se desplaza si no entra. */
.gv-root .gv-panel-proceso .vnv-cuerpo--2col { align-content: start; }
.gv-root .gv-panel-proceso > .per-overlay > .per-modal > .vnv-cuerpo {
  flex: 0 1 auto; min-height: 0; overflow-y: auto;
}
/* El aviso flotante sí se queda arriba de todo. */
.gv-root .gv-panel-proceso .mp-aviso { position: absolute; top: 10px; right: 10px; z-index: 20; }


/* ── PRUEBA: Gestión de Ventas a pantalla completa ─────────────────────────
   El módulo trae su propia barra con Salir, así que la franja de "Volver" de
   arriba sólo gastaba alto. Se oculta y el módulo arranca pegado al borde.
   Para volver atrás: borrar este bloque y el enGestionVentas de TCG. */
.back-btn--oculto { display: none; }
.app-shell--modulo { padding: 0 !important; max-width: none !important; height: calc(100dvh / var(--tcg-z, 1)); overflow: hidden; display: flex; flex-direction: column; }
.app-shell--modulo > .gv-root,
.app-shell--modulo .gv-root { flex: 1; min-height: 0; border: 0; border-radius: 0; }

/* Encabezado de las pantallas de ventas en una sola línea:
   título · buscador · consultas · modo · salir. */
.gv-root .gv-panel-proceso > .per-overlay > .per-modal > .per-cab { align-items: center; gap: 10px; padding: 7px 12px; flex-wrap: wrap; }
.gv-root .gv-panel-proceso > .per-overlay > .per-modal > .per-cab .per-titulo { font-size: 14px; white-space: nowrap; }
.gv-root .gv-panel-proceso > .per-overlay > .per-modal > .per-cab .vnv-buscador { flex: 1 1 260px; min-width: 200px; padding: 0; border: 0; }
.gv-root .gv-panel-proceso > .per-overlay > .per-modal > .per-cab .mo-cab-btns { flex-wrap: wrap; justify-content: flex-end; }

/* El scroll tiene que estar en el cuerpo, no en un alto calculado contra la
   ventana: dentro del panel el alto disponible lo manda el contenedor. */
.gv-root .gv-panel-proceso > .per-overlay > .per-modal { display: flex; flex-direction: column; }
.gv-root .gv-panel-proceso > .per-overlay > .per-modal > .per-cab,
.gv-root .gv-panel-proceso > .per-overlay > .per-modal > .vnv-buscador,
.gv-root .gv-panel-proceso > .per-overlay > .per-modal > .vnv-aviso,
.gv-root .gv-panel-proceso > .per-overlay > .per-modal > .per-pie,
.gv-root .gv-panel-proceso > .per-overlay > .per-modal > .vnv-pie { flex: 0 0 auto; }
.gv-root .gv-panel-proceso > .per-overlay > .per-modal > .vnv-cuerpo,
.gv-root .gv-panel-proceso > .per-overlay > .per-modal > .per-cuerpo {
  flex: 1 1 auto; min-height: 0; max-height: none; overflow: auto;
}
/* Los modales que se abren DESDE el panel (consultas, listados) vuelven a ser
   flotantes y por encima de todo. */
.gv-root .gv-panel-proceso .per-modal .per-overlay { position: fixed; inset: 0; z-index: 10050; background: rgba(0,0,0,.68); padding: 14px; align-items: center; justify-content: center; }
.gv-root .gv-panel-proceso .per-modal .per-overlay > .per-modal { width: 100%; max-width: 1080px; height: auto; max-height: calc(92vh / var(--tcg-z, 1)); border: 1px solid var(--border, #2c2f36); border-radius: 14px; background: var(--bg, #14181d); }

/* Botones de la pantalla abierta, dentro de la barra del módulo. */
.gv-root .gv-slot-barra { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.gv-root .gv-slot-barra .mo-cab-btns { gap: 5px; }
.gv-root .gv-slot-barra .vnv-consultas { display: flex; align-items: center; gap: 5px; flex-wrap: wrap; border: 0; padding: 0; margin: 0; }
.gv-root .gv-slot-barra .vnv-consultas-tit { font-size: 10.5px; text-transform: uppercase; letter-spacing: .5px; color: var(--text); }
.gv-root .gv-slot-barra .lu-btn { padding: 3px 8px; font-size: 12px; }
/* Con los botones arriba, el encabezado del panel queda: título + buscador. */
.gv-root .gv-panel-proceso > .per-overlay > .per-modal > .per-cab .per-titulo {
  font-size: 12px; letter-spacing: 1px; color: var(--text); white-space: nowrap;
}

/* ── Ajustes de la sesión: barra, pie, cliente y anchos ─────────────────── */

/* Barra del módulo en negro, no gris. */
.gv-root .gv-menubar { background: var(--bg, #131824); }

/* Cargar venta / Cancelar / Guardar cambios van a la derecha; la nota queda
   a la izquierda ocupando el espacio libre. */
.gv-root .gv-panel-proceso .vnv-pie { justify-content: flex-end; }
.gv-root .gv-panel-proceso .vnv-pie-nota { margin-left: 0; margin-right: auto; }

/* Cliente sin recuadro ni fondo: misma celda que Agente y Vendedor. */
.gv-root .gv-panel-proceso .vnv-cliente,
.gv-root .gv-panel-proceso .vnv-cliente--cargado {
  background: transparent; border-color: transparent; padding: 0; border-radius: 0;
}
.gv-root .gv-panel-proceso .vnv-cliente .per-campo > span,
.gv-root .gv-panel-proceso .vnv-cliente--cargado .per-campo > span { color: var(--text); }
.gv-root .gv-panel-proceso .vnv-cliente--cargado .per-campo input,
.gv-root .gv-panel-proceso .vnv-cliente--cargado .per-campo select { font-weight: 400; }

/* El panel de ventas no ocupa todo el ancho: se centra con un tope.
   El «margin: 0 auto» de acá era el que corría el modal a la derecha. Dentro
   de un contenedor flex, los márgenes automáticos se comen todo el espacio
   libre ANTES de que actúe justify-content, y como el escalado ya había
   achicado el bloque, el margen izquierdo se quedaba con casi 900px. El
   centrado lo hace el contenedor (justify-content: center) y el origen del
   escalado; el margen automático sobra y estorba. */
.gv-root .gv-panel-proceso > .per-overlay > .per-modal.vnv-modal {
  max-width: 1080px; margin: 0;
  border: 1px solid var(--border, #252d3f); border-radius: 10px;
}

/* La consulta de agente y cliente, un poco más grande. */
.gv-root .gv-panel-proceso .per-modal .per-overlay > .per-modal { max-width: 1260px; max-height: calc(94vh / var(--tcg-z, 1)); }

/* ── Navegación de informes en la barra superior (sin panel vertical) ────── */




/* ── Informes: navegación en una sola barra ─────────────────────────────── */

/* Secciones dentro de la barra del módulo, en el hueco que quedaba libre. */

/* Informes de la sección: una sola fila de pestañas, sin contadores. */
.inf-root .inf-informes { display: flex; flex-wrap: wrap; gap: 3px; }
.inf-root .inf-inf {
  display: flex; align-items: center; gap: 5px;
  background: var(--panel); border: 1px solid var(--border); border-radius: 6px;
  color: var(--text); font-family: inherit; font-size: 12px; padding: 4px 10px; cursor: pointer;
}
.inf-root .inf-inf:hover { border-color: var(--accent-blue); }
.inf-root .inf-inf--on {
  background: var(--panel-2); border-color: var(--accent-blue);
  color: var(--text); font-weight: 600;
}
/* Las etiquetas «falta» y «nuestro» pasan a ser un punto con tooltip. */

.inf-root .inf-cargando, .inf-root .inf-demo { margin-left: 6px; }

/* ── Buscador de ventas: mitad buscador, mitad consultas ────────────────── */
.gv-root .gv-panel-proceso .vnv-buscador { display: flex; align-items: center; gap: 8px; }
.gv-root .gv-panel-proceso .vnv-buscador > .mo-cab-btns { flex: 0 0 auto; }
.gv-root .gv-panel-proceso .vnv-buscador .vnv-consultas { border: 0; padding: 0; margin: 0; gap: 4px; }
.gv-root .gv-panel-proceso .vnv-buscador .vnv-consultas-tit { display: none; }

/* Coincidencias del buscador en columnas alineadas. */
.bap-item {
  display: grid !important;
  grid-template-columns: 92px minmax(0, 1fr) 128px 150px;
  align-items: center; gap: 10px; text-align: left;
}
.bap-item > strong { text-align: left; }
.bap-item > span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bap-item .vnv-resultado-est { text-align: center; }
.bap-donde { display: flex; flex-direction: column; align-items: flex-end; line-height: 1.15; }
.bap-donde b { font-weight: 600; font-size: 11.5px; color: var(--text, #ecf0f4); }
.bap-donde i { font-style: normal; font-size: 10.5px; text-transform: uppercase; letter-spacing: .4px; opacity: 1; }

/* Celda de catálogo: botón para salir y borrado con confirmación. */
.cat-cab { display: flex; align-items: stretch; border-bottom: 1px solid var(--border, #252d3f); }
.cat-cab .cat-buscar { flex: 1; border-bottom: 0; }
.cat-cerrar {
  flex: 0 0 auto; width: 30px; background: transparent; border: 0; border-left: 1px solid var(--border, #252d3f);
  color: var(--text); font-size: 13px; cursor: pointer;
}
.cat-cerrar:hover { background: var(--border, #252d3f); color: var(--text, #ecf0f4); }
.cat-borrar {
  flex: 0 0 auto; font-size: 12px; padding: 1px 6px; border-radius: 6px;
  border: 1px solid transparent; color: var(--text); white-space: nowrap; cursor: pointer;
}
.cat-borrar:hover { color: #ee776c; border-color: rgba(226,87,76,.45); }
.cat-borrar--confirmar {
  background: var(--red, #e2574c); border-color: #ee776c; color: #fff; font-weight: 600;
  animation: catParpadeo .7s ease-in-out infinite alternate;
}
@keyframes catParpadeo { from { opacity: 1; } to { opacity: .55; } }

/* Listados: clic en la fila y flechas para ordenar columnas. */
.vnl-fila { cursor: pointer; }
.vnl-fila:hover > td { background: rgba(79,142,247,.14); }
.vnl-col-chk { display: inline-flex; align-items: center; gap: 3px; }



/* ── Reordenar arrastrando (estilo solapas del navegador) ───────────────── */
.arr { cursor: grab; touch-action: none; transition: opacity .12s, transform .12s; }
.arr:active { cursor: grabbing; }
/* La que se está moviendo queda fantasma. */
.arr--tomada { opacity: .35 !important; }
/* Sobre la que va a caer: una línea de color marca dónde entra. */
.arr--encima { box-shadow: inset 3px 0 0 var(--accent-amber, #f2c200) !important; }
th.arr--encima, td.arr--encima { box-shadow: inset 3px 0 0 var(--accent-amber, #f2c200) !important; }
/* El agarre ⠿ de los chips de columnas. */
.vnl-col-agarre { color: var(--text); font-size: 12px; line-height: 1; letter-spacing: -1px; }
.vnl-col-chk { padding: 1px 4px; border-radius: 6px; }
.vnl-col-chk.arr--encima { box-shadow: inset 0 -2px 0 var(--accent-amber, #f2c200) !important; }
.vnl-col-chk label { display: inline-flex; align-items: center; gap: 3px; cursor: pointer; }
/* Los encabezados de tabla avisan que se pueden agarrar. */
.vnl-tabla thead th.arr:hover { background: rgba(232,163,61,.14) !important; }

/* ── Buscador y consultas: dos bloques enteros, uno al lado del otro ─────
   El buscador NO se corta: ocupa todo lo que sobra y el texto de adentro
   entra completo. Las consultas van en un solo bloque segmentado, del
   mismo alto. */
.gv-root .gv-panel-proceso .vnv-buscador { display: flex; align-items: center; gap: 10px; flex-wrap: nowrap; }
.gv-root .gv-panel-proceso .vnv-buscador > .bap { flex: 1 1 auto; min-width: 260px; }
.gv-root .gv-panel-proceso .vnv-buscador > .bap .bap-input { width: 100%; text-overflow: ellipsis; }

.gv-root .gv-panel-proceso .vnv-buscador .vnv-consultas {
  display: flex; align-items: stretch; gap: 0;
  border: 1px solid #3b4450; border-radius: 8px; overflow: hidden;
  flex: 0 0 auto; height: 44px;
}
.gv-root .gv-panel-proceso .vnv-buscador .vnv-consultas .lu-btn {
  display: inline-flex; align-items: center;
  height: 100%; padding: 0 14px; margin: 0;
  background: transparent; border: 0; border-radius: 0;
  color: var(--text); font-family: inherit; font-size: 12px; font-weight: 700; white-space: nowrap;
}
.gv-root .gv-panel-proceso .vnv-buscador .vnv-consultas .lu-btn + .lu-btn { border-left: 1px solid #3b4450; }
.gv-root .gv-panel-proceso .vnv-buscador .vnv-consultas .lu-btn:hover {
  background: var(--accent-amber, #f2c200); color: #000;
}
/* El botón de tema queda del mismo alto, pegado al grupo. */
.gv-root .gv-panel-proceso .vnv-buscador .mo-cab-btns { display: flex; align-items: stretch; gap: 6px; height: 44px; }
.gv-root .gv-panel-proceso .vnv-buscador .mo-cab-btns > .lu-btn,
.gv-root .gv-panel-proceso .vnv-buscador .mo-cab-btns > button:not(.vnv-consultas *) {
  height: 44px; display: inline-flex; align-items: center;
}



/* Encabezados de tabla arrastrables: el agarre no debe pisar la manija de
   resize, que vive en el borde derecho del <th>. */
th.arr { user-select: none; }
th.arr:hover { background: rgba(232,163,61,.12) !important; }
th.arr .asg-resize-col { touch-action: none; }
.asg-tabla th.arr--encima, .sc-tabla th.arr--encima, .pat-tabla th.arr--encima,
.rv-tabla th.arr--encima, table th.arr--encima { box-shadow: inset 3px 0 0 var(--accent-amber, #f2c200) !important; }
/* En el motor de informes el encabezado es un div, no un th. */
/* --- Informes: ancho y alineación de columnas --------------------------
   El tirador se monta sobre el separador, sobresaliendo 7px de cada lado
   para que sea agarrable sin apuntar al pixel. El encabezado tiene que
   quedar en overflow visible: si se recorta, el tirador desaparece; el
   texto se recorta en el span de adentro. */
.inf-root .inf-th { position: relative; overflow: visible; }
.inf-root .inf-th-tirador {
  position: absolute; top: 0; right: -7px; width: 14px; height: 100%;
  cursor: col-resize; z-index: 3; touch-action: none;
}
.inf-root .inf-th-tirador::after {
  content: ""; position: absolute; top: 15%; left: 6px; width: 2px; height: 70%;
  background: transparent; border-radius: 1px;
}
.inf-root .inf-th-tirador:hover::after { background: var(--accent-amber, #f2c200); }

/* Fila del panel de columnas: el tilde a la izquierda, la alineación a la
   derecha, para que la lista se lea como una columna de nombres. */
.inf-root .inf-col-fila {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
}
.inf-root .inf-col-fila .inf-col-chk { flex: 1 1 auto; min-width: 0; }
.inf-root .inf-alinea { display: flex; gap: 2px; flex: 0 0 auto; }
.inf-root .inf-alinea-b {
  background: transparent; border: 1px solid var(--border, #2c3340); color: var(--text);
  border-radius: 6px; padding: 0 5px; font-size: 12px; line-height: 18px; cursor: pointer;
}
.inf-root .inf-alinea-b:hover { color: var(--text); }
.inf-root .inf-alinea-b--on {
  background: var(--accent-amber, #f2c200); border-color: var(--accent-amber, #f2c200); color: #000;
}

/* Botón Excel de la barra de informes: mismo cuerpo que Imprimir, con el
   verde de planilla para distinguirlo de un vistazo. */
.inf-root .inf-btn--excel { border-color: #1f7a45; color: var(--text); }
.inf-root .inf-btn--excel:hover { background: var(--panel, #1f7a45); color: var(--text, #fff); }

.inf-root .inf-th.arr { cursor: grab; }
.inf-root .inf-th.arr--encima { box-shadow: inset 3px 0 0 var(--accent-amber, #f2c200) !important; }

/* ── Secciones con lista desplegable ────────────────────────────────────── */
/* El informe elegido se lee en el propio botón: no hace falta otra fila. */




/* ── Informes: solo lectura, con el acceso en el número de fila ─────────────
   La edición en línea se sacó a propósito: en una tabla de consulta con
   desplegables de catálogo era muy fácil cambiar un dato de otra fila sin
   darse cuenta. Para modificar se abre el legajo. */
.cvn-tabla--consulta td { padding: 4px 6px; vertical-align: middle; }
.cvn-tabla--consulta th { text-align: center; }
.cvn-tabla--consulta tbody tr:hover > td { background: rgba(79,142,247,.08); }
.cvn-sin { font-style: italic; color: var(--text); }

/* El número de fila es el botón para entrar: se ve como tal. */
.cvn-col-n--abrir, .lu-inf-abrir {
  cursor: pointer; position: relative; text-align: center;
  color: var(--text); font-weight: 700;
}
.cvn-col-n--abrir:hover, .lu-inf-abrir:hover {
  background: var(--accent-blue, #4f8ef7) !important; color: var(--casa-activa-tinta, #fff);
}
.cvn-n-abrir, .lu-n-icono { display: none; margin-left: 3px; font-size: 12px; }
.cvn-col-n--abrir:hover .cvn-n-num, .lu-inf-abrir:hover .lu-n-num { display: none; }
.cvn-col-n--abrir:hover .cvn-n-abrir, .lu-inf-abrir:hover .lu-n-icono { display: inline; font-size: 13px; }
/* Un borde a la izquierda avisa que esa columna es la puerta de entrada. */
.cvn-tabla--consulta tbody td.cvn-col-n--abrir { box-shadow: inset 3px 0 0 rgba(79,142,247,.55); }
.lu-informe-tabla tbody td.lu-inf-abrir { box-shadow: inset 3px 0 0 rgba(79,142,247,.55); }

/* ── Listados de consulta: la única puerta a la operación es el N° ───────
   Se sacó la edición de celdas de estas tablas (una marca se cambió sola de
   PEUGEOT a CHEVROLET al pasar por encima de un desplegable). Para modificar
   hay que abrir el legajo, que muestra el contexto completo. */
.cvn-tabla--consulta tbody td.cvn-col-n--abrir,
.lu-informe-tabla tbody td.lu-inf-abrir {
  box-shadow: inset 4px 0 0 var(--accent-blue, #4f8ef7) !important;
  background: rgba(79,142,247,.10) !important;
}
.cvn-col-n--abrir, .lu-inf-abrir { font-size: 12.5px; }
/* El resto de las celdas no invita a hacer clic. */
.cvn-tabla--consulta tbody td:not(.cvn-col-n--abrir):not(.cvn-col-abrir) { cursor: default; }

/* ── Buscador único: un solo recuadro con los botones adentro ──────────────
   Antes eran tres bloques cortados (campo · grupo de consultas · tema) y a la
   vista parecían tres cosas distintas. Ahora hay una sola cápsula: el campo
   ocupa lo que sobra y los botones son píldoras redondeadas apoyadas adentro,
   sin ninguna línea que parta el renglón. Va al final del bloque a propósito,
   para ganarle a las reglas de .bap-input y .vnv-consultas de más arriba. */
.vnv-buscador.vnvb-uni {
  display: flex; align-items: center; gap: 0; flex-wrap: nowrap;
  padding: 8px 12px;
  /* Sin la línea de abajo: la cápsula del buscador ya delimita el renglón,
     y la raya quedaba como un subrayado suelto de color. */
  border-bottom: 0;
}
.vnv-buscador.vnvb-uni > .vnvb-caja { flex: 1 1 auto; min-width: 0; }
/* La raya que quedaba debajo del buscador no era del buscador: era del
   contenedor que lo envuelve (.per-cab), que trae su propio borde inferior.
   Son dos elementos, uno adentro del otro; sacarla del de adentro no alcanzaba. */
.vnv-modal > .per-cab:has(> .vnv-buscador.vnvb-uni),
.gv-root .gv-panel-proceso .vnv-modal > .per-cab:has(.vnv-buscador.vnvb-uni) { border-bottom: 0; }

/* La cápsula: el único borde de todo el renglón. */
.vnvb-caja {
  position: relative;
  display: flex; align-items: center; gap: 8px;
  min-height: 46px; padding: 4px 5px 4px 0;
  border: 1.5px solid color-mix(in srgb, var(--vnv-marca-luz, var(--vnv-marca, #6c7684)) 55%, transparent);
  border-radius: 999px;
  background: color-mix(in srgb, var(--vnv-marca, #6c7684) 7%, transparent);
  transition: border-color .12s, box-shadow .12s;
}
.vnvb-caja:hover { border-color: var(--vnv-marca-luz, var(--vnv-marca, #6c7684)); }
/* El resaltado de foco es de la cápsula entera, no del campo solo. */
.vnvb-caja:focus-within {
  border-color: var(--vnv-marca-luz, var(--vnv-marca, #f2c200));
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--vnv-marca-luz, var(--vnv-marca, #f2c200)) 24%, transparent);
}

/* El campo pierde su propio marco: el marco ahora es la cápsula. */
.vnvb-caja > .bap { position: static; flex: 1 1 auto; min-width: 0; display: flex; align-items: center; }
.vnvb-caja .bap-input,
.vnv-modal .vnvb-caja .bap-input,
.vnv-compacto .vnvb-caja .bap-input {
  width: 100%; height: 38px; margin: 0; padding: 0 6px 0 16px;
  /* Fondo propio: antes era transparente y se comía el amarillo de la
     cápsula, así que el renglón entero parecía una sola mancha y no se
     veía dónde escribir. El aro y las píldoras no se tocan. */
  background: var(--panel, #1b2233);
  border: 0; border-radius: 999px; box-shadow: none;
  /* 23/09/2026 (Ramiro): dos puntos más grande. Es el campo que más se usa
     en el día y se leía chico. */
  font-size: 16.5px; font-weight: 600; color: inherit;
  text-overflow: ellipsis;
}
.vnvb-caja .bap-input:hover, .vnvb-caja .bap-input:focus {
  background: var(--panel, #1b2233); border: 0; box-shadow: none; outline: none;
}
/* Las coincidencias caen debajo de toda la cápsula, no debajo del campo. */
.vnvb-caja .bap-lista { top: calc(100% + 6px); left: 0; right: 0; }

/* Botones: píldoras sueltas apoyadas adentro del mismo renglón. */
.vnvb-acciones { display: flex; align-items: center; gap: 5px; flex: 0 0 auto; }
.vnvb-pill {
  display: inline-flex; align-items: center; justify-content: center;
  height: 32px; padding: 0 14px; margin: 0;
  background: color-mix(in srgb, var(--vnv-marca, #6c7684) 14%, transparent);
  border: 1px solid transparent; border-radius: 999px;
  color: var(--text); font-family: inherit; font-size: 12px; font-weight: 700;
  white-space: nowrap; cursor: pointer; transition: background .12s, color .12s;
}
.vnvb-pill:hover { background: color-mix(in srgb, var(--vnv-marca-luz, var(--vnv-marca, #f2c200)) 18%, transparent);
  color: var(--text); }
.vnvb-pill--soltar {
  background: color-mix(in srgb, var(--vnv-marca-luz, var(--vnv-marca, #f2c200)) 20%, transparent);
  color: var(--text);
}

/* El de cliente · agente es una sola píldora partida al medio. */
.vnvb-pill--doble { padding: 0; overflow: hidden; gap: 0; }
.vnvb-pill--doble:hover { background: color-mix(in srgb, var(--vnv-marca, #6c7684) 14%, transparent); }
.vnvb-pill--doble > button {
  height: 100%; padding: 0 13px; margin: 0;
  background: transparent; border: 0; border-radius: 0;
  color: inherit; font-family: inherit; font-size: 12px; font-weight: 700;
  white-space: nowrap; cursor: pointer;
}
.vnvb-pill--doble > button + button {
  border-left: 1px solid color-mix(in srgb, var(--vnv-marca-luz, var(--vnv-marca, #6c7684)) 45%, transparent);
}
.vnvb-pill--doble > button:hover { background: color-mix(in srgb, var(--vnv-marca-luz, var(--vnv-marca, #f2c200)) 18%, transparent);
  color: var(--text); }

/* El botón de tema entra como píldora redonda, al ras de la cápsula. */
.vnvb-acciones .mo-tema {
  width: 32px; height: 32px; padding: 0; margin: 0;
  display: inline-flex; align-items: center; justify-content: center;
  background: color-mix(in srgb, var(--vnv-marca, #6c7684) 14%, transparent);
  border: 1px solid transparent; border-radius: 999px; font-size: 13px; line-height: 1;
}
.vnvb-acciones .mo-tema:hover { background: var(--vnv-marca-luz, var(--vnv-marca, #f2c200)); }

/* Modo claro */
.mo-claro .vnvb-caja { background: #eef2f7; border-color: #ccd3dc; }
.mo-claro .vnvb-caja .bap-input,
.mo-claro .vnvb-caja .bap-input:hover,
.mo-claro .vnvb-caja .bap-input:focus { background: #ffffff; }
.mo-claro .vnvb-pill, .mo-claro .vnvb-acciones .mo-tema { background: #eef2f7; color: #000; }
.mo-claro .vnvb-pill--doble:hover { background: #eef2f7; }
.mo-claro .vnvb-pill--doble > button + button { border-left-color: #ccd3dc; }







/* ── Carga ágil: fecha en el buscador, ventana del usado y foco visible ──── */

/* La fecha de la venta baja debajo del estado, en la misma columna. */
.bap-item .vnv-resultado-est { display: flex; flex-direction: column; align-items: center; line-height: 1.2; }
.bap-fecha {
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 11px; font-weight: 600;
  color: var(--text, #ecf0f4); margin-top: 1px;
}
.bap-grupo--apagado .bap-fecha { color: var(--text); }

/* El alta del usado en parte de pago vuelve a ser una ventana chica.
   Se abre DESDE el panel de ventas, y la regla general de los modales
   anidados (.per-modal .per-overlay > .per-modal) la estiraba a 1080px. */
.gv-root .gv-panel-proceso .per-modal .per-overlay > .per-modal.ret-modal {
  height: auto; max-height: calc(92vh / var(--tcg-z, 1));
}


/* Con el teclado hay que ver en qué botón del pie está parado el foco, porque
   el primer Enter sólo llega al botón y el segundo es el que confirma. */
.vnv-pie .lu-btn:focus-visible,
.per-pie .lu-btn:focus-visible,
.ret-pie .lu-btn:focus-visible {
  outline: none;
  border-color: var(--accent-amber, #f2c200);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent-amber, #f2c200) 32%, transparent);
}
.vnv-pie .lu-btn--accion:focus-visible,
.per-pie .lu-btn--accion:focus-visible {
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--green, #4caf6d) 38%, transparent);
}


/* ── Aviso de guardado: una sola línea, abajo ──────────────────────────
   Antes ocupaba hasta el 90% del ancho y se ponía arriba a la derecha del panel,
   así que un texto largo ("0km cargado en Vesubio: 3008 GT PACK HDI interno
   133.") armaba un cartel enorme encima del formulario. Ahora es una franja de
   un renglón, centrada abajo, y lo que no entra se corta con puntos suspensivos.
   El texto completo queda en el title, por si hace falta leerlo entero. */
.mp-aviso {
  max-width: min(620px, calc(78vw / var(--tcg-z, 1)));
  padding: 7px 14px; font-size: 12px; line-height: 1.3;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
/* Dentro del panel de procesos vuelve abajo y al medio: arriba a la derecha
   tapaba las consultas del encabezado. */
.gv-root .gv-panel-proceso .mp-aviso {
  position: absolute; top: auto; right: auto;
  bottom: 12px; left: 50%; transform: translateX(-50%);
  z-index: 20; max-width: min(620px, 70%);
}


/* La opción resaltada muestra siempre su tacho, para que con el teclado se vea
   qué valor va a sacar Supr. */
.cat-op--foco .cat-borrar { opacity: 1; }
.cat-borrar--confirmar { color: #ee776c; font-weight: 700; }


/* Campo que no se elige: el concesionario en el que ya estás parado. Se ve como
   dato cargado, no como celda vacía que hay que completar. */
.com-fijo {
  display: block; padding: 6px 9px; border-radius: 8px;
  background: color-mix(in srgb, var(--accent-amber, #f2c200) 12%, transparent);
  border: 1px solid color-mix(in srgb, var(--accent-amber, #f2c200) 34%, transparent);
  color: var(--text, #ecf0f4); font-size: 12.5px; font-weight: 700;
}
.mo-claro .com-fijo { background: #fdf3e2; border-color: #e6c68a; color: #000; }

/* Renombre de columna en el propio encabezado (reemplaza al viejo prompt).
   Va al final del bloque a propósito: acá adentro las reglas que se insertan
   antes de otras de la misma especificidad quedan pisadas. */
.ct-col-input {
  width: 100%; min-width: 70px; box-sizing: border-box;
  padding: 2px 5px; margin: 0;
  background: var(--panel-2, #202940);
  border: 1px solid var(--accent-amber, #f2c200);
  border-radius: 6px;
  color: var(--text, #ecf0f4);
  font-size: inherit; font-weight: inherit; font-family: inherit;
  text-align: center;
  outline: none;
}
.ct-col-input::placeholder { color: var(--text); font-weight: 400; }

/* Agente de la operación en los resultados del buscador. Va al final del
   bloque para ganarle a la regla que estira los <span> del resultado. */
.bap-item .bap-agente {
  flex: 0 0 auto; overflow: visible; white-space: nowrap;
  font-size: 10.5px; font-weight: 700; text-transform: uppercase; letter-spacing: .4px;
  border-radius: 999px; padding: 2px 8px;
  background: color-mix(in srgb, var(--accent-amber, #f2c200) 16%, transparent);
  border: 1px solid color-mix(in srgb, var(--accent-amber, #f2c200) 42%, transparent);
  color: var(--text);
}
/* La venta directa no es un agente: se muestra en gris para que el ojo
   distinga de un vistazo lo que salió por reventa de lo que salió del salón. */
.bap-item .bap-agente--dir {
  background: transparent;
  border-color: var(--border, #252d3f);
  color: var(--text);
  font-weight: 600;
}
.mo-claro .bap-item .bap-agente--dir { border-color: #cbd2d9; color: #000; }

/* Cantidad de operaciones y facturación total en el recibo del vendedor.
   Se distinguen del TOTAL A COBRAR: son el contexto de la comisión, no la
   cifra que se cobra. */
.lc-recibo-subtotal td {
  font-weight: 700; font-size: 12px;
  color: var(--text, #ecf0f4);
  background: color-mix(in srgb, var(--panel-2, #202940) 70%, transparent);
  border-top: 1px solid var(--border, #252d3f);
}
.mo-claro .lc-recibo-subtotal td { color: #000; background: #f1f3f5; border-top-color: #d5dbe1; }





/* ---- Seguimiento de Cheques (Tesorería / Administración) ----
   Todas las reglas van prefijadas con .sch-root para ganarle en
   especificidad a los estilos globales de la app. */
.sch-root { padding: 4px 2px 24px; }
.sch-root .sch-header {
  display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between;
  gap: 14px; margin-bottom: 14px;
}
.sch-root .sch-titulo { margin: 0; font-size: 20px; font-weight: 700; letter-spacing: -0.2px; }
.sch-root .sch-sub { margin-top: 3px; font-size: 12px; color: var(--text); }
.sch-root .sch-acciones { display: flex; gap: 8px; flex-wrap: wrap; }
.sch-root .sch-btn {
  display: inline-flex; align-items: center; gap: 6px; cursor: pointer;
  background: var(--panel-2); border: 1px solid var(--border); color: var(--text);
  border-radius: 8px; padding: 7px 12px; font-size: 12px; font-weight: 600;
}
.sch-root .sch-btn:hover { border-color: var(--accent-amber); }
.sch-root .sch-btn:disabled { opacity: 0.55; cursor: default; }
.sch-root .sch-btn--fuerte { background: var(--accent-amber); border-color: var(--accent-amber); color: #000; }
.sch-root .sch-girando { animation: sch-giro 1s linear infinite; }
@keyframes sch-giro { to { transform: rotate(360deg); } }

.sch-root .sch-aviso {
  position: relative; margin-bottom: 12px; padding: 10px 34px 10px 12px;
  background: rgba(255, 193, 7, 0.10); border: 1px solid rgba(255, 193, 7, 0.35);
  border-radius: 8px; font-size: 12.5px; line-height: 1.5;
}
.sch-root .sch-aviso-x {
  position: absolute; top: 7px; right: 8px; background: none; border: none;
  color: var(--text); cursor: pointer; display: inline-flex; padding: 3px;
}

.sch-root .sch-tarjetas {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: 10px; margin-bottom: 16px;
}
.sch-root .sch-tarjeta {
  background: var(--panel-2); border: 1px solid var(--border);
  border-radius: 10px; padding: 12px 14px;
}
.sch-root .sch-tarjeta--mal { border-color: rgba(220, 38, 38, 0.45); }
.sch-root .sch-tarjeta--bien { border-color: rgba(16, 185, 129, 0.35); }
.sch-root .sch-tarjeta-valor { font-size: 25px; font-weight: 700; font-variant-numeric: tabular-nums; line-height: 1.1; }
.sch-root .sch-tarjeta-valor--chico { font-size: 17px; }
.sch-root .sch-tarjeta--mal .sch-tarjeta-valor { color: #F87171; }
.sch-root .sch-tarjeta--bien .sch-tarjeta-valor { color: var(--text); }
.sch-root .sch-tarjeta-label {
  margin-top: 3px; font-size: 12px; text-transform: uppercase;
  letter-spacing: 0.6px; color: var(--text); font-weight: 600;
}
.sch-root .sch-tarjeta-nota { margin-top: 2px; font-size: 12px; color: var(--text); opacity: 1; }

.sch-root .sch-solapas {
  display: flex; gap: 2px; border-bottom: 1px solid var(--border);
  margin-bottom: 14px; overflow-x: auto;
}
.sch-root .sch-solapa {
  background: none; border: none; border-bottom: 2px solid transparent;
  color: var(--text); cursor: pointer; font-size: 12px; font-weight: 600;
  padding: 8px 14px; white-space: nowrap; margin-bottom: -1px;
}
.sch-root .sch-solapa.activa { color: var(--text); border-bottom-color: var(--accent-amber); }
.sch-root .sch-badge {
  display: inline-block; margin-left: 6px; padding: 1px 6px; border-radius: 8px;
  background: var(--panel-2); border: 1px solid var(--border);
  font-size: 12px; font-variant-numeric: tabular-nums;
}

.sch-root .sch-barra { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin-bottom: 10px; }
.sch-root .sch-buscador {
  display: flex; align-items: center; gap: 6px; flex: 1 1 260px;
  background: var(--panel-2); border: 1px solid var(--border); border-radius: 8px;
  padding: 5px 10px; color: var(--text);
}
.sch-root .sch-buscador input {
  flex: 1; background: transparent; border: none; outline: none;
  color: var(--text); font-size: 13px;
}
.sch-root .sch-select {
  background: var(--panel-2); border: 1px solid var(--border); color: var(--text);
  border-radius: 8px; padding: 6px 10px; font-size: 12px;
}

.sch-root .sch-tabla-scroll {
  overflow-x: auto; overflow-y: auto; max-height: calc(calc(100dvh / var(--tcg-z, 1)) - 400px);
  border: 1px solid var(--border); border-radius: 8px;
}
.sch-root .sch-tabla { width: 100%; border-collapse: collapse; font-size: 12.5px; }
.sch-root .sch-tabla th {
  position: sticky; top: 0; z-index: 2; background: var(--panel-2);
  border-bottom: 1px solid var(--border); border-right: 1px solid var(--border);
  padding: 7px 8px; font-size: 13px; font-weight: 700; text-align: center;
  text-transform: uppercase; letter-spacing: 0.4px; color: var(--text); white-space: nowrap;
}
.sch-root .sch-tabla th:last-child { border-right: none; }
.sch-root .sch-tabla td {
  border-bottom: 1px solid var(--border); border-right: 1px solid var(--border);
  padding: 2px 4px; vertical-align: middle;
}
.sch-root .sch-tabla td:last-child { border-right: none; }
.sch-root .sch-tabla tbody tr:hover td { background: rgba(255, 255, 255, 0.025); }
.sch-root .sch-tabla tbody tr:focus-within td {
  box-shadow: inset 0 1px 0 var(--accent-amber), inset 0 -1px 0 var(--accent-amber);
}
.sch-root .sch-td-num { text-align: right; font-variant-numeric: tabular-nums; }
.sch-root .sch-td-acciones { text-align: center; }
.sch-root .sch-input {
  width: 100%; background: transparent; border: 1px solid transparent; color: var(--text);
  border-radius: 6px; padding: 4px 6px; font-size: 12.5px; font-family: inherit;
}
.sch-root .sch-input:hover { border-color: var(--border); }
.sch-root .sch-input:focus { outline: none; border-color: var(--accent-amber); background: var(--panel-2); }
.sch-root .sch-input--num { text-align: right; font-variant-numeric: tabular-nums; }
.sch-root .sch-input--fecha::-webkit-datetime-edit { color: transparent; }
.sch-root .sch-input--fecha:hover::-webkit-datetime-edit,
.sch-root .sch-input--fecha:focus::-webkit-datetime-edit { color: var(--text); }
.sch-root .sch-input--fecha:not(:placeholder-shown)::-webkit-datetime-edit { color: var(--text); }
.sch-root .sch-input--fecha[value]:not([value=""])::-webkit-datetime-edit { color: var(--text); }
.sch-root .sch-btn-icono {
  background: none; border: none; color: var(--text); cursor: pointer;
  display: inline-flex; align-items: center; padding: 4px; border-radius: 6px;
}
.sch-root .sch-btn-icono:hover { color: var(--red, #F87171); }
.sch-root .sch-pastilla {
  display: inline-block; width: 7px; height: 7px; border-radius: 50%;
  margin-right: 6px; vertical-align: middle;
}
.sch-root .sch-pie { margin-top: 8px; font-size: 12px; color: var(--text); }

.sch-root .sch-estado {
  display: inline-block; padding: 2px 7px; border-radius: 8px;
  font-size: 12px; font-weight: 700; white-space: nowrap;
}
.sch-root .sch-estado--bien { background: rgba(16, 185, 129, 0.14); color: var(--text); }
.sch-root .sch-estado--medio { background: rgba(255, 193, 7, 0.14); color: var(--text); }
.sch-root .sch-estado--mal { background: rgba(220, 38, 38, 0.16); color: #F87171; }
.sch-root .sch-estado--gris { background: var(--panel-2); color: var(--text); }

.sch-root .sch-vacio {
  padding: 34px 20px; text-align: center; font-size: 12.5px;
  color: var(--text); line-height: 1.6;
}
.sch-root .sch-sin-novedades {
  display: flex; align-items: center; gap: 14px; padding: 22px 20px;
  background: rgba(16, 185, 129, 0.08); border: 1px solid rgba(16, 185, 129, 0.3);
  border-radius: 10px; color: var(--text); font-size: 12.5px; line-height: 1.6;
}
.sch-root .sch-sin-novedades div div { color: var(--text); }

.sch-root .sch-alertas { display: flex; flex-direction: column; gap: 10px; }
.sch-root .sch-alerta {
  border: 1px solid rgba(255, 193, 7, 0.35); border-radius: 10px;
  overflow: hidden; background: var(--panel-2);
}
.sch-root .sch-alerta--critica { border-color: rgba(220, 38, 38, 0.5); }
.sch-root .sch-alerta-titulo {
  display: flex; align-items: center; gap: 6px; padding: 6px 12px;
  background: rgba(255, 193, 7, 0.12); color: var(--text);
  font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.5px;
}
.sch-root .sch-alerta--critica .sch-alerta-titulo { background: rgba(220, 38, 38, 0.14); color: #F87171; }
.sch-root .sch-alerta-cuerpo {
  display: flex; justify-content: space-between; align-items: flex-start;
  gap: 18px; padding: 12px 14px; flex-wrap: wrap;
}
.sch-root .sch-alerta-nombre { font-weight: 700; font-size: 13.5px; }
.sch-root .sch-alerta-cuit { font-size: 12px; color: var(--text); margin-bottom: 7px; }
.sch-root .sch-alerta-datos {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 2px 22px; font-size: 12px;
}
.sch-root .sch-dato span { color: var(--text); font-size: 12px; }
.sch-root .sch-alerta-importe { text-align: right; }
.sch-root .sch-importe { font-size: 18px; font-weight: 700; font-variant-numeric: tabular-nums; }
.sch-root .sch-importe--mal { color: #F87171; }
.sch-root .sch-alerta-label {
  font-size: 12px; text-transform: uppercase; letter-spacing: 0.5px; color: var(--text);
}

.sch-root .sch-consulta-caja {
  background: var(--panel-2); border: 1px solid var(--border);
  border-radius: 10px; padding: 14px; margin-bottom: 14px;
}
.sch-root .sch-consulta-caja label {
  display: block; margin-bottom: 7px; font-size: 12px; font-weight: 700;
  text-transform: uppercase; letter-spacing: 0.5px; color: var(--text);
}
.sch-root .sch-consulta-fila { display: flex; gap: 8px; flex-wrap: wrap; }
.sch-root .sch-input-grande {
  flex: 1 1 220px; background: var(--panel); border: 1px solid var(--border);
  color: var(--text); border-radius: 8px; padding: 8px 12px;
  font-size: 16px; letter-spacing: 1px; font-variant-numeric: tabular-nums;
}
.sch-root .sch-input-grande:focus { outline: none; border-color: var(--accent-amber); }
.sch-root .sch-error {
  margin-top: 9px; padding: 8px 11px; border-radius: 8px; font-size: 12px; line-height: 1.5;
  background: rgba(220, 38, 38, 0.10); border: 1px solid rgba(220, 38, 38, 0.35); color: #F87171;
}
.sch-root .sch-resultado {
  border: 1px solid var(--border); border-radius: 10px; overflow: hidden; background: var(--panel-2);
}
.sch-root .sch-resultado--mal { border-color: rgba(220, 38, 38, 0.45); }
.sch-root .sch-resultado--bien { border-color: rgba(16, 185, 129, 0.35); }
.sch-root .sch-resultado-cabecera {
  display: flex; justify-content: space-between; align-items: center;
  gap: 16px; padding: 13px 15px; flex-wrap: wrap;
}
.sch-root .sch-resultado-cuenta { text-align: right; }
.sch-root .sch-situacion {
  padding: 9px 15px; border-top: 1px solid var(--border);
  border-bottom: 1px solid var(--border); font-size: 12.5px;
}
.sch-root .sch-periodo { color: var(--text); font-size: 12px; }
.sch-root .sch-entidad { font-size: 12px; color: var(--text); }
.sch-root .sch-fuente {
  padding: 8px 15px; border-top: 1px solid var(--border);
  font-size: 12px; color: var(--text);
}




/* ---- Seguimiento de Cheques: ancho de columnas y menú ---- */
.sch-root .sch-tabla th { overflow: visible; position: sticky; }
.sch-root .sch-th-label {
  display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.sch-root .sch-resize {
  position: absolute; top: 0; right: -7px; width: 14px; height: 100%;
  cursor: col-resize; z-index: 3; touch-action: none;
}
.sch-root .sch-resize:hover { background: rgba(255, 193, 7, 0.35); }
.sch-root .sch-tabla th { position: sticky; }
.sch-root .sch-menu-col { position: relative; }
.sch-root .sch-menu-col-lista {
  position: absolute; top: calc(100% + 4px); left: 0; z-index: 20;
  background: var(--panel-2); border: 1px solid var(--border); border-radius: 8px;
  padding: 8px 10px; min-width: 190px; max-height: 320px; overflow-y: auto;
  box-shadow: 0 8px 24px rgba(0,0,0,0.45);
}
.sch-root .sch-menu-col-lista label {
  display: flex; align-items: center; gap: 7px; padding: 3px 0;
  font-size: 12px; cursor: pointer; white-space: nowrap;
}
.sch-root .sch-ok { color: var(--text); }
.sch-root .sch-mal { color: #F87171; }

/* ---- Seguimiento de Cheques: detalle de indicadores y avisos en rojo ---- */
.sch-root .sch-tarjeta {
  text-align: left; width: 100%; font: inherit; cursor: pointer;
  transition: border-color 0.12s, transform 0.08s;
}
.sch-root .sch-tarjeta:hover { border-color: var(--accent-amber); }
.sch-root .sch-tarjeta:active { transform: translateY(1px); }

.sch-root .sch-fila--mal td { background: rgba(220, 38, 38, 0.10) !important; }
.sch-root .sch-fila--mal td:first-child { box-shadow: inset 3px 0 0 #F87171; }
.sch-root .sch-fila--medio td { background: rgba(255, 193, 7, 0.07) !important; }
.sch-root .sch-fila--medio td:first-child { box-shadow: inset 3px 0 0 #FBBF24; }
.sch-root .sch-negativo { color: #F87171; font-weight: 600; }

.sch-root .sch-menu-col-titulo {
  font-size: 12px; color: var(--text); margin-bottom: 6px; line-height: 1.4;
  white-space: normal;
}
.sch-root .sch-menu-col-fila { display: flex; align-items: center; gap: 6px; padding: 2px 0; }
.sch-root .sch-menu-col-nombre {
  flex: 1; min-width: 0; background: transparent; border: 1px solid transparent;
  color: var(--text); border-radius: 6px; padding: 3px 5px; font-size: 12px; font-family: inherit;
}
.sch-root .sch-menu-col-nombre:hover { border-color: var(--border); }
.sch-root .sch-menu-col-nombre:focus {
  outline: none; border-color: var(--accent-amber); background: var(--panel);
}
.sch-root .sch-menu-col-fija { width: 21px; text-align: center; color: var(--text); }
.sch-root .sch-menu-col-agregar {
  display: flex; align-items: center; gap: 6px; width: 100%; margin-top: 7px;
  background: var(--panel); border: 1px dashed var(--border); color: var(--text);
  border-radius: 6px; padding: 5px 8px; font-size: 12px; cursor: pointer;
}
.sch-root .sch-menu-col-agregar:hover { border-color: var(--accent-amber); color: var(--text); }

/* El modal usa position:static al imprimir; la impresión real sale por
   ventana aparte, así que acá no hace falta ninguna regla @media print. */
.sch-root .sch-overlay {
  position: fixed; inset: 0; z-index: 60; background: rgba(0, 0, 0, 0.6);
  display: flex; align-items: center; justify-content: center; padding: 20px;
}
.sch-root .sch-modal {
  background: var(--panel); border: 1px solid var(--border); border-radius: 12px;
  width: min(1240px, calc(96vw / var(--tcg-z, 1))); max-height: calc(88vh / var(--tcg-z, 1)); display: flex; flex-direction: column;
  box-shadow: 0 18px 50px rgba(0, 0, 0, 0.55);
}
.sch-root .sch-modal-cab {
  display: flex; justify-content: space-between; align-items: flex-start;
  gap: 14px; padding: 14px 16px; border-bottom: 1px solid var(--border); flex-wrap: wrap;
}
.sch-root .sch-modal-cab h3 { margin: 0; font-size: 15.5px; }
.sch-root .sch-modal-nota { margin-top: 3px; font-size: 12px; color: var(--text); }
.sch-root .sch-modal-acciones { display: flex; gap: 7px; }
.sch-root .sch-modal-tabla { border: none; border-radius: 0; max-height: none; flex: 1; }
.sch-root .sch-modal-tabla tfoot td {
  position: sticky; bottom: 0; background: var(--panel-2);
  border-top: 1px solid var(--border); font-weight: 700;
}




/* rj · Seguimiento de cheques: acciones en un bloque, ventanas con la casa */
.sch-root .sch-header { border: 1px solid var(--border, rgba(127,127,127,.3)); border-radius: 12px; padding: 8px 12px; background: var(--panel-2, rgba(127,127,127,.06)); margin-bottom: 12px; }
.sch-root .sch-carpetas { margin: 6px 0 12px; }
.sch-root .sch-header { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.sch-header-tit { font-weight: 700; font-size: 13px; letter-spacing: .03em; margin-right: auto; }
.sch-root .sch-header .sch-acciones { margin-left: auto; }
.sch-root .sch-modal { overflow: hidden; }
.sch-root .sch-modal-cab { background: var(--casa, var(--panel-2)); color: var(--casa-tinta, inherit); align-items: center; border-bottom: 0; }
.sch-root .sch-modal-cab > div:not(.sch-modal-acciones) { margin-right: auto; }
.sch-root .sch-modal-cab h3, .sch-root .sch-modal-cab .sch-modal-nota { color: var(--casa-tinta, inherit) !important; }
.sch-root .sch-modal-cab .sch-modal-nota { opacity: 1; }
.sch-root .sch-modal-cab .sch-btn { background: transparent; color: var(--casa-tinta, inherit); border-color: var(--casa-tinta, var(--border)); }
.sch-root .sch-modal > .cip-pie { flex: none; border-radius: 0; }
/* ---- Seguimiento de Cheques: correcciones de color y detalle por fila ---- */

/* Los indicadores pasaron a ser botones y heredaban el negro del navegador. */
.sch-root .sch-tarjeta { color: var(--text); }
.sch-root .sch-tarjeta .sch-tarjeta-valor { color: var(--text); }
.sch-root .sch-tarjeta--mal .sch-tarjeta-valor { color: #F87171; }
.sch-root .sch-tarjeta--bien .sch-tarjeta-valor { color: var(--text); }

/* Los antecedentes también son un dato negativo: rojo, más suave que el
   rechazo propio para poder distinguirlos de un vistazo. */
.sch-root .sch-estado--medio { background: rgba(220, 38, 38, 0.12); color: #FCA5A5; }
.sch-root .sch-fila--medio td { background: rgba(220, 38, 38, 0.06) !important; }
.sch-root .sch-fila--medio td:first-child { box-shadow: inset 3px 0 0 #FCA5A5; }
.sch-root .sch-fila--mal td { background: rgba(220, 38, 38, 0.14) !important; }

/* Entrar a la línea */
.sch-root .sch-fila-abrir {
  background: transparent; border: 1px solid transparent; color: var(--text);
  border-radius: 6px; padding: 2px 6px; font: inherit; cursor: pointer;
  font-variant-numeric: tabular-nums; min-width: 30px;
}
.sch-root .sch-fila-abrir:hover {
  border-color: var(--accent-amber); color: var(--text); background: var(--panel-2);
}
.sch-root .sch-estado-btn {
  background: none; border: none; padding: 0; cursor: pointer; font: inherit;
}
.sch-root .sch-fila--clic { cursor: pointer; }
.sch-root .sch-fila--clic:hover td { filter: brightness(1.25); }
.sch-root .sch-este { color: #F87171; font-weight: 700; font-size: 12px; }

/* Tirador de ancho: antes era invisible y nadie lo encontraba. */
.sch-root .sch-resize::after {
  content: ""; position: absolute; top: 6px; bottom: 6px; left: 6px;
  width: 2px; background: var(--border); border-radius: 1px;
}
.sch-root .sch-resize:hover::after { background: var(--accent-amber); width: 3px; }
.sch-root .sch-th-mas {
  background: transparent; border: 1px dashed var(--border); color: var(--text);
  border-radius: 6px; padding: 2px 5px; cursor: pointer; display: inline-flex;
}
.sch-root .sch-th-mas:hover { border-color: var(--accent-amber); color: var(--text); }

/* Ficha del cheque dentro del detalle de fila */
.sch-root .sch-modal--fila { width: min(920px, calc(96vw / var(--tcg-z, 1))); }
.sch-root .sch-modal-cuerpo { padding: 14px 16px; overflow-y: auto; }
.sch-root .sch-modal-sub {
  margin: 16px 0 8px; font-size: 12px; text-transform: uppercase;
  letter-spacing: 0.5px; color: var(--text); font-weight: 700;
}
.sch-root .sch-modal-cuerpo > .sch-modal-sub:first-child { margin-top: 0; }
.sch-root .sch-ficha {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
  gap: 7px 20px;
}
.sch-root .sch-ficha-item {
  display: flex; justify-content: space-between; gap: 12px;
  border-bottom: 1px dotted var(--border); padding-bottom: 3px; font-size: 12.5px;
}
.sch-root .sch-ficha-item span { color: var(--text); font-size: 12px; }
.sch-root .sch-alerta--suelta { margin-bottom: 4px; }

/* ---- Seguimiento de Cheques: orden de columnas ---- */
.sch-root .sch-menu-col-mover { display: flex; flex-direction: column; gap: 1px; }
.sch-root .sch-menu-col-mover button {
  background: transparent; border: 1px solid transparent; color: var(--text);
  border-radius: 6px; cursor: pointer; font-size: 12px; line-height: 1;
  padding: 1px 3px; width: 18px;
}
.sch-root .sch-menu-col-mover button:hover:not(:disabled) {
  border-color: var(--accent-amber); color: var(--text);
}
.sch-root .sch-menu-col-mover button:disabled { opacity: 0.25; cursor: default; }
.sch-root .sch-menu-col-lista { min-width: 260px; }

/* ---- Seguimiento de Cheques: destinatarios del informe ---- */
.sch-root .sch-dest-dealers { display: flex; gap: 4px; flex-wrap: wrap; }
.sch-root .sch-chip {
  background: transparent; border: 1px solid var(--border); color: var(--text);
  border-radius: 20px; padding: 3px 9px; font-size: 12px; cursor: pointer; font-family: inherit;
}
.sch-root .sch-chip.activo { background: var(--panel-2); border-width: 2px; font-weight: 600; }
.sch-root .sch-chip:hover { color: var(--text); }
.sch-root .sch-dest-activo {
  display: flex; align-items: center; gap: 6px; font-size: 12px; cursor: pointer;
}
.sch-root .sch-nota-larga {
  font-size: 12px; color: var(--text); line-height: 1.6;
  background: var(--panel-2); border: 1px solid var(--border);
  border-radius: 8px; padding: 11px 13px;
}

/* ---- Modales de ventas: ajustes de prolijidad ---------------------
   Van al final para ganarle a las reglas de arriba. */

/* Coincidencias del buscador: la grilla fija de 4 columnas descuadraba
   cuando el render emitía 3 elementos (clientes) en vez de 4 (unidades).
   Ahora las columnas de la derecha solo ocupan lugar si existen. */
.bap-item {
  display: grid !important;
  grid-template-columns: 92px minmax(0, 1fr) auto auto;
  align-items: center; gap: 8px 12px; text-align: left;
  padding: 6px 11px;
}
.bap-item > strong { text-align: left; }
.bap-item > span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bap-item .bap-agente { min-width: 96px; text-align: left; }
.bap-item .vnv-resultado-est { min-width: 118px; text-align: left; }
/* La referencia queda pegada al borde derecho y en una sola línea:
   el valor y el campo separados por un punto, no apilados. */
.bap-donde {
  display: inline-flex; flex-direction: row; align-items: baseline; gap: 5px;
  margin-left: 0; justify-self: end; white-space: nowrap;
  border: 0; padding: 0; line-height: 1.2;
}
.bap-donde b { font-weight: 600; font-size: 11.5px; color: var(--text, #ecf0f4); }
.bap-donde i {
  font-style: normal; font-size: 10.5px; text-transform: uppercase;
  letter-spacing: .4px; opacity: 1;
}
.bap-donde i::before { content: "· "; }

/* Cabecera de la unidad: el interno editable en letra chica, para que no
   compita con el interno real cuando la unidad sí lo tiene. */
.vnp-interno-input--cargar {
  font-size: 12px !important; letter-spacing: .2px;
  padding: 4px 7px !important; max-width: 118px;
}
.vnp-interno-input--cargar::placeholder { font-size: 11px; opacity: .7; }

.vnv-cuerpo--2col .vnv-col { display: flex; flex-direction: column; gap: 10px; }
/* Un respiro antes de cerrar la tarjeta. */
.vnv-cuerpo--2col .vnb-body { padding-bottom: 10px; }

/* Modal de cliente nuevo: más angosto y con las celdas más cortas.
   Antes cada campo ocupaba todo el ancho aunque el dato fuera un CP. */
.vna-modal { width: min(430px, calc(95vw / var(--tcg-z, 1))); }
.vna-modal .per-campo { grid-template-columns: 104px minmax(0, 1fr); gap: 8px; }
.vna-modal .per-campo > input { max-width: 240px; }
.vna-modal .vna-sub { font-size: 12px; line-height: 1.45; }

/* ---- Altura de las tarjetas del modal de ventas -------------------
   La columna izquierda (Cliente · Fechas · Unidad) tiene que cortar a la
   misma altura que la derecha (Importes · Forma de pago · Financiación).
   Unidad es la que más crece porque lista todos los datos de la unidad,
   así que se le pone tope con desplazamiento propio, y Fechas se estira
   para ocupar lo que queda. */

/* Fechas: respira más entre campos y se estira si sobra lugar. */
.vnv-cuerpo--2col .vnv-col > .vnb.vnb--fechas { flex: 0 0 auto; }
.vnv-cuerpo--2col .vnv-col > .vnb.vnb--fechas > .vnb-body {
  padding-top: 12px; padding-bottom: 14px; gap: 10px;
}

/* Unidad: no empuja la columna. Si el detalle no entra, se desplaza adentro. */
.vnv-cuerpo--2col .vnv-col > .vnb.vnb--unidad {
  flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column;
}
.vnv-cuerpo--2col .vnv-col > .vnb.vnb--unidad .vnv-unidad {
  flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column;
}
.vnv-cuerpo--2col .vnv-col > .vnb.vnb--unidad .vnp-cuerpo {
  flex: 1 1 auto; min-height: 0; overflow-y: auto;
}
/* El panel de unidad va suelto en la columna, sin section que lo envuelva:
   se le da el mismo tratamiento apuntando al bloque directamente. */
.vnv-cuerpo--2col .vnv-col > .vnv-unidad {
  flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column;
}
.vnv-cuerpo--2col .vnv-col > .vnv-unidad .vnp-cuerpo {
  flex: 1 1 auto; min-height: 0; overflow-y: auto;
}
/* Datos de la unidad más compactos: son de consulta, no de carga. */
.vnv-cuerpo--2col .vnp-cuerpo .vnp-grupo-tit { margin-top: 8px; }
.vnv-cuerpo--2col .vnp-cuerpo dl > div { padding: 2px 0; }

/* ---- Tarjetas emparejadas por fila --------------------------------
   Cliente ↔ Importes · Fechas ↔ Forma de pago · Unidad ↔ Financiación.
   Las dos columnas eran contenedores separados, así que cada tarjeta
   empezaba donde terminaba la anterior de SU columna y los bloques nunca
   coincidían. Con display:contents las tarjetas pasan a ser hijas de la
   grilla y se les da fila explícita: ahí sí arrancan emparejadas. */
@media (min-width: 981px) {
  .vnv-cuerpo--2col {
    display: grid; grid-template-columns: 1fr 1fr; align-items: stretch;
    /* Las cinco filas se declaran a propósito: sin filas explícitas, un
       grid-row negativo apunta al principio en vez de al final y las
       tarjetas terminan encimadas. */
    grid-template-rows: repeat(5, auto);
  }
  .vnv-cuerpo--2col > .vnv-col { display: contents; }

  /* Columna izquierda: Cliente · Fechas · Unidad */
  .vnv-cuerpo--2col > .vnv-col:first-child > *:nth-child(1) { grid-column: 1; grid-row: 1; }
  .vnv-cuerpo--2col > .vnv-col:first-child > *:nth-child(2) { grid-column: 1; grid-row: 2; }
  /* La unidad arranca a la altura de Financiación y termina abajo de
     Datos adicionales: ocupa las tres últimas filas de una sola pieza. */
  .vnv-cuerpo--2col > .vnv-col:first-child > *:nth-child(3) {
    grid-column: 1; grid-row: 3 / -1; align-self: stretch; height: 100%;
  }

  /* Columna derecha: Importes · Forma de pago · Financiación · Usado · … */
  .vnv-cuerpo--2col > .vnv-col:last-child > *:nth-child(1) { grid-column: 2; grid-row: 1; }
  .vnv-cuerpo--2col > .vnv-col:last-child > *:nth-child(2) { grid-column: 2; grid-row: 2; }
  .vnv-cuerpo--2col > .vnv-col:last-child > *:nth-child(3) { grid-column: 2; grid-row: 3; }
  .vnv-cuerpo--2col > .vnv-col:last-child > *:nth-child(4) { grid-column: 2; grid-row: 4; }
  .vnv-cuerpo--2col > .vnv-col:last-child > *:nth-child(5) { grid-column: 2; grid-row: 5; }


}

/* La flecha pasó a ser su propio botón para que el clic en el campo no
   abra la lista. Se la monta DENTRO del recuadro del campo, así visualmente
   sigue siendo un solo control. */
.cvn-cat-elegir { position: relative; }
.cvn-cat-elegir > .cat-disparador { padding-right: 26px; }
.cat-flecha-btn {
  position: absolute; top: 1px; right: 1px; bottom: 1px; width: 24px;
  background: none; border: 0; padding: 0; cursor: pointer; border-radius: 0 6px 6px 0;
  display: inline-flex; align-items: center; justify-content: center;
}
.cat-flecha-btn:disabled { cursor: default; opacity: .5; }
.cat-flecha-btn:hover { background: rgba(255,255,255,.05); }
.cat-flecha-btn:hover .cat-flecha { color: var(--text, #ecf0f4); }

/* ---- Detalle de la unidad sin barra de desplazamiento -------------
   El contenido entra completo, así que la barra sólo ensuciaba. Se
   mantiene el desplazamiento por si en una pantalla chica no entra,
   pero sin barra a la vista. */
.vnv-cuerpo--2col .vnv-unidad .vnp-cuerpo {
  scrollbar-width: none;
  -ms-overflow-style: none;
}
.vnv-cuerpo--2col .vnv-unidad .vnp-cuerpo::-webkit-scrollbar { width: 0; height: 0; }

/* ---- Estética de las pantallas de trabajo -------------------------
   Estaba todo del mismo gris: los títulos de cada bloque no se
   distinguían del contenido. Se los pinta con el acento del
   concesionario, que ya cambia de color por marca. */
.gv-root .gv-panel-origen {
  color: var(--text); opacity: 1; font-weight: 700;
}
.gv-root .gv-panel-titulo { color: var(--text, #ecf0f4); }
.gv-root .gv-panel-ico { color: var(--text); }
.gv-root .gv-panel-head {
  border-bottom: 2px solid var(--accent-amber, #f2c200);
}

/* Títulos de sección dentro de cualquier pantalla de trabajo. */
.gv-root .gv-panel h3,
.gv-root .gv-panel h4,
.gv-root .gv-panel .vnb-cab h4,
.gv-root .gv-panel .per-titulo {
  color: var(--text);
}
/* Encabezados de tabla: el mismo acento, más apagado para no gritar. */
.gv-root .gv-panel thead th {
  color: var(--text);
  border-bottom: 1px solid color-mix(in srgb, var(--accent-amber, #f2c200) 45%, transparent);
  background: color-mix(in srgb, var(--accent-amber, #f2c200) 7%, var(--panel, #191d23));
}
/* Rótulos de grupo dentro de los paneles de consulta. */
.gv-root .gv-panel .vnp-grupo-tit,
.gv-root .gv-panel .cvn-grupo-tit {
  color: var(--text); opacity: 1;
}

/* ---- Logos del menú más grandes ---------------------------------- */
.gv-root .gv-chip { font-size: 12.5px; padding: 6px 13px; }
.gv-root .gv-chip-marca { font-size: 12px; opacity: 1; }
.gv-root .gv-chips-label { font-size: 12px; }
.gv-root .gv-vacio-logo { height: 120px; }
.admin-usuarios-logo-btn img { height: 30px !important; }

/* ---- Barra de herramientas de tablas ------------------------------
   Buscador, columnas, Excel y PDF. Se usa en todas las pantallas de
   trabajo de Gestión de Ventas. Va al final para ganarle en
   especificidad a las reglas de cada pantalla. */
/* La barra tiene que pasar desapercibida: es una herramienta, no el
   contenido. Sin fondo propio, sin línea divisoria, con los botones
   apenas insinuados hasta que se los toca. */
.bt-barra {
  display: flex; align-items: center; gap: 6px; flex-wrap: wrap;
  padding: 7px 12px 9px; background: none; border: 0;
}
.bt-buscador {
  display: flex; align-items: center; gap: 7px; flex: 1 1 190px; max-width: 320px;
  background: none; border: 0; border-bottom: 1px solid var(--border, #252d3f);
  border-radius: 0; padding: 4px 2px; color: var(--text);
  transition: border-color .15s;
}
.bt-buscador:focus-within { border-bottom-color: var(--accent-amber, #f2c200); }
.bt-buscador svg { opacity: .55; }
.bt-buscador input {
  flex: 1; min-width: 0; background: none; border: 0; outline: none;
  color: var(--text, #ecf0f4); font: inherit; font-size: 13px;
}
.bt-buscador input::placeholder { color: var(--text); opacity: .55; }

/* Botones de la barra: apenas texto hasta que se los toca. */
.bt-barra > .lu-btn, .bt-menu-wrap > .lu-btn {
  background: none; border: 1px solid transparent; color: var(--text);
  padding: 4px 9px; font-size: 13px; font-weight: 600; border-radius: 6px;
  display: inline-flex; align-items: center; gap: 5px;
}
.bt-barra > .lu-btn:hover, .bt-menu-wrap > .lu-btn:hover {
  color: var(--text, #ecf0f4);
  background: color-mix(in srgb, var(--accent-amber, #f2c200) 10%, transparent);
  border-color: transparent;
}
.bt-barra > .lu-btn svg, .bt-menu-wrap > .lu-btn svg { opacity: .8; }
.bt-cuenta {
  font-size: 12px; color: var(--text); opacity: 1;
  margin-left: auto; font-variant-numeric: tabular-nums;
}

.bt-menu-wrap { position: relative; }
.bt-menu {
  position: absolute; top: calc(100% + 5px); left: 0; z-index: 40;
  background: var(--panel-2, #191d23); border: 1px solid var(--border, #252d3f);
  border-radius: 8px; padding: 9px 11px; min-width: 285px;
  max-height: 340px; overflow-y: auto; box-shadow: 0 10px 28px rgba(0,0,0,.5);
}
.bt-menu-nota {
  font-size: 12px; color: var(--text);
  line-height: 1.45; margin-bottom: 7px; white-space: normal;
}
.bt-menu-fila { display: flex; align-items: center; gap: 6px; padding: 2px 0; }
.bt-mover { display: flex; flex-direction: column; gap: 1px; }
.bt-mover button {
  background: none; border: 1px solid transparent; color: var(--text);
  border-radius: 6px; cursor: pointer; font-size: 12px; line-height: 1;
  padding: 1px 3px; width: 18px;
}
.bt-mover button:hover:not(:disabled) {
  border-color: var(--accent-amber, #f2c200); color: var(--text, #ecf0f4);
}
.bt-mover button:disabled { opacity: .25; cursor: default; }
.bt-menu-nombre {
  flex: 1; min-width: 0; background: none; border: 1px solid transparent;
  color: var(--text, #ecf0f4); border-radius: 6px; padding: 3px 5px;
  font: inherit; font-size: 12px;
}
.bt-menu-nombre:hover { border-color: var(--border, #252d3f); }
.bt-menu-nombre:focus {
  outline: none; border-color: var(--accent-amber, #f2c200); background: var(--panel, #14181d);
}
.bt-ico {
  background: none; border: 0; color: var(--text); cursor: pointer;
  display: inline-flex; padding: 3px; border-radius: 6px; width: 21px; justify-content: center;
}
.bt-ico:hover { color: #f87171; }
.bt-ico--fija { cursor: default; }
.bt-menu-agregar {
  display: flex; align-items: center; gap: 6px; width: 100%; margin-top: 7px;
  background: var(--panel, #14181d); border: 1px dashed var(--border, #252d3f);
  color: var(--text); border-radius: 6px; padding: 5px 8px;
  font: inherit; font-size: 12px; cursor: pointer;
}
.bt-menu-agregar:hover { border-color: var(--accent-amber, #f2c200); color: var(--text, #ecf0f4); }
.bt-menu-reset {
  width: 100%; margin-top: 5px; background: none; border: 0;
  color: var(--text); font: inherit; font-size: 12px;
  cursor: pointer; padding: 4px; text-decoration: underline;
}
.bt-menu-reset:hover { color: var(--text, #ecf0f4); }

/* Encabezados con tirador de ancho. El th tiene que quedar overflow:visible
   o el recorte del texto tapa el tirador y el arrastre deja de andar. */
.bt-th-label { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bt-resize {
  position: absolute; top: 0; right: -7px; width: 14px; height: 100%;
  cursor: col-resize; z-index: 3; touch-action: none;
}
.bt-resize::after {
  content: ""; position: absolute; top: 6px; bottom: 6px; left: 6px;
  width: 2px; background: var(--border, #252d3f); border-radius: 1px;
}
.bt-resize:hover::after { background: var(--accent-amber, #f2c200); width: 3px; }

/* El número de fila abre la ficha de esa unidad. */
.bt-abrir {
  background: none; border: 1px solid transparent; color: var(--text);
  border-radius: 6px; padding: 2px 7px; font: inherit; cursor: pointer;
  font-variant-numeric: tabular-nums; min-width: 28px;
}
.bt-abrir:hover {
  border-color: var(--accent-amber, #f2c200); color: var(--text, #ecf0f4);
  background: var(--panel-2, #191d23);
}

/* Encabezados con el color del concesionario, como el resto del módulo. */
/* Encabezados: el acento se nota en la línea de abajo, no en un bloque de
   color. Así la tabla se lee y el color ubica sin gritar. */
.vnl-tabla thead th, .cvn-tabla thead th {
  position: relative; overflow: visible;
  color: var(--text);
  background: var(--panel, #191d23);
  border-bottom: 2px solid color-mix(in srgb, var(--accent-amber, #f2c200) 55%, transparent);
}

/* ---- Ajustes de tamaño pedidos ------------------------------------ */
/* Menú lateral de Gestión de Ventas: un poco más de aire. */
.gv-root { --gv-side-w: 218px; }

/* Logo dentro de los modales de trabajo. */
.per-modal .per-logo, .vnv-modal .vnv-logo, .mo-cab img { height: 34px; width: auto; }

/* El menú de columnas, más liviano. */
.bt-menu { border-radius: 10px; padding: 10px 12px; }
.bt-menu-fila { padding: 3px 0; }

/* ---- Tres estados en el menú lateral -------------------------------
   Verde: el modal está rehecho y revisado.
   Ámbar: abre, pero todavía con el modal viejo.
   Sin punto: no abre nada todavía.
   El ámbar no es un error: la pantalla funciona, sólo falta rehacerla. */


/* ---- Ficha de unidad dentro de un modal de proceso ---------------- */
.proc-ficha-overlay { z-index: 70; }
.proc-ficha { width: min(680px, calc(96vw / var(--tcg-z, 1))); max-height: calc(86vh / var(--tcg-z, 1)); display: flex; flex-direction: column; }
.proc-ficha-cuerpo {
  padding: 14px 16px; overflow-y: auto;
  display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 8px 20px;
}
.proc-ficha-item {
  display: flex; justify-content: space-between; gap: 12px;
  border-bottom: 1px dotted var(--border, #252d3f); padding-bottom: 4px; font-size: 12.5px;
}
.proc-ficha-item span { color: var(--text); font-size: 12px; }
/* Número de fila en los modales de proceso. */
.proc-n-col { width: 46px; text-align: center; }

/* ---- Ficha de usado: un solo ancho ---------------------------------
   La ficha se usa en dos lugares: suelta (compra de usado) y anidada
   dentro del modal de ventas (usado en parte de pago). El ancho se
   declara UNA sola vez para los dos, así no pueden quedar distintos.
   Los dos selectores van juntos a propósito: el segundo existe porque
   los modales anidados tienen una regla propia que los estira. */
.per-modal.ret-modal,
.gv-root .gv-panel-proceso > .per-overlay > .per-modal.ret-modal,
.gv-root .gv-panel-proceso .per-overlay > .per-modal.ret-modal,
.gv-root .gv-panel-proceso .per-modal .per-overlay > .per-modal.ret-modal {
  width: min(392px, calc(95vw / var(--tcg-z, 1))); max-width: 480px;
}
.ret-modal .ret-rot { flex: 0 0 104px; font-size: 12px; }

/* Todas las celdas del mismo ancho: con anchos distintos por tipo de dato
   la ficha se veía despareja y costaba seguir la columna. */
.ret-modal .ret-linea .ret-ctrl { max-width: none; }
.ret-modal .ret-linea .ret-ctrl input,
.ret-modal .ret-linea .ret-ctrl select { width: 100%; }

/* Las tildes y el canal de compra, en dos columnas para no estirar. */
/* Con el modal a 505px entran los tres de «Marcas» y los cuatro del canal en
   UN renglón. Antes eran dos columnas fijas porque el modal medía 392 y no
   daba el ancho. Es una GRILLA y no un flex: por eso el «flex-wrap: nowrap»
   escrito más arriba no hacía nada. */
.ret-modal .ret-tildes { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 3px 6px; }
.ret-modal .ret-canal .ret-tildes { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.ret-modal .ret-tildes .ret-tilde { min-width: 0; padding: 3px 6px; }
.ret-modal .ret-tildes .ret-tilde span:last-child { overflow: hidden; text-overflow: ellipsis; }
.ret-modal .ret-tilde { font-size: 12px; padding: 3px 5px; }

/* ---- Compra de 0km con el mismo formato de ficha que la de usados ---
   Antes eran dos columnas con el rótulo arriba de cada campo, así que el
   modal salía ancho y los rótulos se leían como títulos. Ahora es una
   sola columna con el rótulo a la izquierda, igual que la ficha del usado. */
/* Mismo criterio que la ficha de usado: la regla del panel de procesos
   estira a 100% cualquier modal, así que hay que nombrar los contextos.
   Éste va más ancho que la ficha de usado porque tiene el doble de campos
   y varias notas al pie de renglón que a 392px se cortaban. */
.per-modal.com-modal--ficha,
.per-modal.vnv-modal.com-modal--ficha,
.gv-root .gv-panel-proceso > .per-overlay > .per-modal.com-modal--ficha,
.gv-root .gv-panel-proceso .per-overlay > .per-modal.com-modal--ficha {
  width: min(470px, calc(95vw / var(--tcg-z, 1))); max-width: 480px;
}
.com-modal--ficha .com-grid { display: block; }

/* Cada campo es un renglón: rótulo a la izquierda, celda a la derecha.
   flex-direction: row es imprescindible, porque .per-campo trae column y
   sin cambiarlo el rótulo queda arriba y todo centrado.
   Vale igual para los campos simples y para los de catálogo, que usan la
   misma clase pero traen un contenedor propio adentro. */
.com-modal--ficha .per-campo {
  display: flex; flex-direction: row; align-items: center;
  gap: 7px; margin-bottom: 4px; flex-wrap: wrap;
}
.com-modal--ficha .per-campo > span {
  flex: 0 0 108px; text-align: right; font-size: 12px; line-height: 1.2;
  color: var(--text); text-transform: none; letter-spacing: 0;
}
/* Nada de desplazamiento horizontal: lo que no entra baja de renglón. */
.com-modal--ficha .com-cuerpo { overflow-x: hidden; }
.com-modal--ficha .com-grid { min-width: 0; }

/* Todas las celdas terminan en la misma línea vertical. Los campos de
   catálogo traen un botón "+" al costado, así que los demás reservan ese
   mismo espacio: si no, unos quedan más largos que otros. */
.com-modal--ficha .per-campo > input,
.com-modal--ficha .per-campo > select,
.com-modal--ficha .per-campo > .cvn-cat-elegir,
.com-modal--ficha .per-campo > .cvn-cat-alta,
.com-modal--ficha .per-campo > .vn-monto {
  flex: 1 1 auto; width: auto; min-width: 0; max-width: none;
  height: 27px; min-height: 27px; padding: 0 7px; font-size: 13px;
  box-sizing: border-box;
}
.com-modal--ficha .per-campo > input,
.com-modal--ficha .per-campo > select,
.com-modal--ficha .per-campo > .vn-monto,
.com-modal--ficha .per-campo > .com-fijo {
  margin-right: 31px;
}
/* El campo de catálogo trae adentro el botón y el "+": se reparten el
   mismo espacio que ocupa cualquier otra celda. */
.com-modal--ficha .per-campo > .cvn-cat-elegir,
.com-modal--ficha .per-campo > .cvn-cat-alta {
  display: flex; gap: 4px; align-items: center; padding: 0;
}
.com-modal--ficha .cvn-cat-elegir > .cat-disparador,
.com-modal--ficha .cvn-cat-alta > input {
  flex: 1 1 auto; min-width: 0; height: 27px; min-height: 27px;
  padding: 0 7px; font-size: 13px;
}
.com-modal--ficha .cvn-cat-elegir > .lu-btn,
.com-modal--ficha .cvn-cat-alta > .lu-btn {
  flex: 0 0 27px; width: 27px; height: 27px; min-height: 27px;
  padding: 0; font-size: 13px; line-height: 25px; text-align: center;
}
/* rp (Maxi, 07/10): «Agregar» lleva texto; a 27 px quedaba tapado por la ×. */
.com-modal--ficha .cvn-cat-alta > .lu-btn:not(:last-child) {
  flex: 0 0 auto; width: auto; padding: 0 10px; font-size: 12px;
}
/* Los textos de ayuda cuelgan debajo de la celda, alineados con ella, y
   bajan de renglón en vez de estirar el modal. */
.com-modal--ficha .com-ayuda {
  flex: 1 0 100%; margin-left: 115px; margin-top: 1px;
  font-size: 12px; line-height: 1.35;
  white-space: normal; overflow-wrap: anywhere;
}
/* El concesionario fijo se muestra como pastilla: mismo alto que una celda. */
.com-modal--ficha .per-campo > .com-fijo {
  display: inline-flex; align-items: center; height: 27px;
  padding: 0 10px; border-radius: 8px; font-size: 12px;
}
.com-modal--ficha .com-ancho { grid-column: auto; }
.com-modal--ficha .com-seccion { margin: 12px 0 5px; }
/* El pie con lo que falta cargar, sin pisar los botones. */
.com-modal--ficha .com-pie { flex-wrap: wrap; gap: 6px; }

/* ---- Compras de usados: lista y acciones -------------------------- */
.per-modal.com-lista, .per-modal.vnv-modal.com-lista { width: min(1156px, calc(96vw / var(--tcg-z, 1))); max-width: 1156px; }
.com-lista-btns { display: flex; gap: 7px; align-items: center; }
.com-lista-tabla { overflow: auto; flex: 1 1 auto; min-height: 0; }
.com-lista-acciones { display: flex; gap: 5px; justify-content: flex-end; white-space: nowrap; }
.com-lista .vnl-tabla { width: 100%; border-collapse: collapse; font-size: 12.5px; }

/* Selector de estado dentro de la barra de compras. */
.cvn-filtro-select {
  background: var(--panel-2, #191d23); border: 1px solid var(--border, #252d3f);
  color: var(--text, #ecf0f4); border-radius: 8px; padding: 5px 9px;
  font: inherit; font-size: 12px;
}

/* ---- Color en los títulos de TODOS los modales de trabajo ----------
   El bloque anterior apuntaba a .gv-panel, pero los modales se montan
   como overlay fuera de ese contenedor, así que nunca lo alcanzaban.
   Estas reglas van sobre .per-modal, que es lo que todos comparten. */
.per-modal .per-titulo { color: var(--text); }
/* Sin la línea gruesa de color: en el modal de ventas quedaba como un
   subrayado suelto justo debajo del buscador. Alcanza con la separación. */
.per-modal .per-cab { border-bottom: 1px solid var(--border, #2C2F36); }

/* Encabezados de tabla dentro de cualquier modal: el acento en la línea
   de abajo y un tono suave en el texto, sin bloque de color. */
.per-modal thead th {
  color: var(--text);
  border-bottom: 2px solid color-mix(in srgb, var(--vnv-marca-luz, var(--vnv-marca, var(--accent-amber, #f2c200))) 55%, transparent);
}
/* La tabla se dibuja aunque no haya filas: los encabezados dicen qué se va a
   cargar. Esconderla entera deja la pantalla muda. */
.per-modal .vn-vacio {
  text-align: center; padding: 22px 12px;
  color: var(--text); font-style: italic;
}
/* Rótulos de sección dentro de los modales.
   Ojo: .ret-seccion y .com-seccion tienen FONDO de color, así que su texto
   va en claro. Pintarlos con el acento los dejaba del mismo color que su
   propio fondo y no se leían. */
/* Sólo para los modales SIN banda de color. Antes decía «.per-modal .vnb-cab
   h4» a secas: misma especificidad que la regla del modal de ventas y, por
   estar más abajo en el archivo, le ganaba y pintaba la letra del mismo color
   que la banda. Por eso el título no se leía en ninguna tarjeta salvo la de
   la unidad, que usa otra clase. */
.per-modal:not(.vnv-modal) .vnb-cab h4 {
  color: var(--text);
}
.per-modal .per-grupo-tit { color: var(--text); }
.per-modal .ret-seccion,
.per-modal .com-seccion {
  color: var(--vnv-marca-txt, #fff);
}

/* Las secciones de la compra de 0km, con la misma barra que las de usados. */
.com-modal--ficha .com-seccion {
  padding: 3px 8px; border-radius: 6px;
  background: var(--vnv-marca, #6c7684); color: var(--vnv-marca-txt, #fff);
  font-size: 12px; font-weight: 700; letter-spacing: .5px; text-transform: uppercase;
}
/* Las solapas activas del modal también toman el acento. */
.per-modal .proc-tab.activa,
.per-modal .lu-tab.activa {
  color: var(--text);
  border-bottom-color: var(--accent-amber, #f2c200);
}

/* Buscador dentro de la ficha de compra. */
.ret-buscador { padding: 0 12px 8px; }
.ret-buscador .bap-caja { width: 100%; }
.ret-buscador input { width: 100%; font-size: 13px; }

/* ---- Barra de compras de usados ------------------------------------
   El buscador ocupaba todo el ancho y el botón quedaba pegado al borde
   derecho de la pantalla. Se le pone tope y el botón queda al lado. */
.com-lista .cvn-barra { justify-content: flex-start; }
.com-lista .cvn-buscar { flex: 0 1 340px; max-width: 340px; }
.com-lista .cvn-filtro-origen { margin-left: auto; }

/* ---- Lugar físico destacado en la entrega --------------------------
   Es el dato que decide a dónde sale la unidad, así que la celda se
   distingue del resto del renglón. */
.ing-destacado {
  border: 1px solid color-mix(in srgb, var(--accent-amber, #f2c200) 55%, transparent);
  background: color-mix(in srgb, var(--accent-amber, #f2c200) 7%, transparent);
  border-radius: 8px; padding: 6px 8px;
}
.ing-destacado .per-campo > span { color: var(--text); font-weight: 700; }
.ing-grid--2 { grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); }

/* El destacado también funciona sobre un campo suelto, no sólo envolviéndolo. */
.per-campo.ing-destacado > span { color: var(--text); font-weight: 700; }

/* ---- Resultados del buscador: mismo alineado en 0km y usados -------
   Cada pantalla emite distinta cantidad de datos por renglón, así que
   la grilla se arma sola en vez de tener columnas fijas. */
.bap-item {
  grid-template-columns: 92px minmax(0, 1fr) repeat(auto-fit, minmax(0, max-content));
}
.bap-donde i::before { content: ""; }
.bap-donde { opacity: 1; }

/* ---- Datos de la entrega: la tarjeta entera destacada ---------------
   Antes se marcaba sólo un campo. Lo que se está por confirmar es todo el
   bloque, así que el recuadro abarca los tres datos. */
.proc-destacado {
  /* Amarillo pleno, como la barra de acciones: es el bloque que se está por
     confirmar y tiene que saltar a la vista. Al 6% no se notaba nada. */
  border: 1px solid var(--accent-amber, #f2c200);
  background: var(--accent-amber, #f2c200);
  /* Fino a propósito: es una barra de acción, no un panel. */
  border-radius: 8px; padding: 8px 12px;
}
.proc-destacado .per-campo { gap: 2px; }
.proc-destacado .per-campo > span { font-size: 12px; letter-spacing: .3px; }
.proc-destacado input, .proc-destacado select { padding: 5px 9px; }
/* Sobre el amarillo el texto va OSCURO: el mismo amarillo sobre amarillo
   era ilegible. */
.proc-destacado .per-campo > span {
  color: var(--accent-texto, #131824); font-weight: 700;
}
/* La leyenda se saca de la franja: engordaba el bloque un renglón entero.
   La información pasa al globito del campo (atributo title), así sigue
   estando para quien la busque sin ocupar lugar. Fuera de la franja, la
   leyenda se sigue mostrando como siempre. */
.proc-destacado .com-ayuda { display: none; }
/* Los campos vuelven al fondo oscuro para que se distingan del relleno. */
.proc-destacado input, .proc-destacado select {
  background: var(--panel-2, #202940); color: var(--text, #ecf0f4);
  border: 1px solid color-mix(in srgb, var(--accent-texto, #131824) 30%, transparent);
}

/* Buscador arriba de la lista en los modales de proceso. */
.proc-buscador { padding: 8px 14px 0; }
.proc-buscador .bap-caja, .proc-buscador input { width: 100%; }

/* ---- Alta de cliente: opciones y bloque desplegable ---------------- */
.vna-opts { display: flex; gap: 5px; flex-wrap: wrap; }
.vna-op {
  display: inline-flex; align-items: center; gap: 5px; font: inherit; font-size: 12px;
  background: var(--panel-2, #161c2a); border: 1px solid var(--border, #252d3f);
  color: inherit; border-radius: 6px; padding: 3px 8px; cursor: pointer; min-height: 25px;
}
.vna-op--on { border-color: var(--accent-amber, #f2c200); color: var(--text); }
.vna-cj {
  width: 11px; height: 11px; border: 1px solid var(--muted, #5a626d); border-radius: 6px;
  display: inline-flex; align-items: center; justify-content: center; font-size: 12px; line-height: 1;
}
.vna-op--on .vna-cj {
  background: var(--accent-amber, #f2c200); border-color: var(--accent-amber, #f2c200);
  color: #000;
}
.vna-agregar {
  width: 100%; margin: 7px 0 3px; font: inherit; font-size: 12px; cursor: pointer;
  background: transparent; border: 1px dashed var(--accent-amber, #f2c200);
  color: var(--text); border-radius: 8px; padding: 7px;
}
.vna-bloque {
  border: 1px solid color-mix(in srgb, var(--accent-amber, #f2c200) 45%, transparent);
  background: color-mix(in srgb, var(--accent-amber, #f2c200) 6%, transparent);
  border-radius: 8px; padding: 8px 10px 4px; margin: 6px 0 3px;
}
.vna-bloque-cab {
  display: flex; justify-content: space-between; align-items: center; margin-bottom: 6px;
  font-size: 12px; text-transform: uppercase; letter-spacing: .5px;
  color: var(--text);
}
.vna-quitar { background: none; border: 0; color: var(--text); font: inherit; font-size: 12px; cursor: pointer; }
/* Sale desde el modal de ventas: angosto y con las celdas parejas. */
.per-modal.vna-modal { width: min(400px, calc(95vw / var(--tcg-z, 1))); max-width: 480px; }
.vna-modal .per-campo { display: flex; flex-direction: row; align-items: center; gap: 8px; margin-bottom: 4px; flex-wrap: wrap; }
.vna-modal .per-campo > span { flex: 0 0 104px; text-align: right; font-size: 12px; line-height: 1.25; }
.vna-modal .per-campo > input,
.vna-modal .per-campo > .vna-opts { flex: 1 1 auto; min-width: 0; height: 27px; min-height: 27px; font-size: 13px; }
.vna-modal .per-campo > .vna-opts { height: auto; }
.vna-modal .com-ayuda, .vna-modal .vna-loc-lista { flex: 1 0 100%; margin-left: 112px; }

/* ---- Gastos de otorgamiento: tres importes en una sola celda ------- */
/* El renglón de gastos de otorgamiento tiene cuatro importes adentro y
   quedaba con otro fondo que el resto de las celdas. Ahora es una celda
   como cualquier otra, con los cuatro campos adentro sin caja propia. */
.per-campo--trio { align-items: center; }

/* ---- Botón "+" de los catálogos -----------------------------------
   El campo y el botón viven en un flex, pero el botón no tenía ancho
   propio: al achicarse la columna el flex lo comprimía y quedaba montado
   sobre el borde del campo. Ahora tiene tamaño fijo y no se deja apretar.
   Va sin prefijo de pantalla a propósito: el mismo campo se usa en los dos
   modales de ventas y en las seis pantallas de proceso, y el problema es el
   mismo en todas. */
.cvn-cat-elegir, .cvn-cat-alta {
  display: flex; align-items: center; gap: 5px; min-width: 0;
}
.cvn-cat-elegir > .cat-disparador,
.cvn-cat-elegir > select,
.cvn-cat-alta > input {
  flex: 1 1 auto; min-width: 0;
}
.cvn-cat-elegir > .lu-btn,
.cvn-cat-alta > .lu-btn {
  flex: 0 0 auto; width: 26px; min-width: 26px; padding: 0;
  text-align: center; line-height: 24px;
}
/* El de "Agregar" sí lleva texto: ése no se achica a 26 px. */
.cvn-cat-alta > .lu-btn:not(:last-child) {
  width: auto; min-width: 0; padding: 3px 8px;
}
/* La ficha de usado tiene su propio alto de renglón: se respeta. */
.ret-modal .cvn-cat-elegir > .lu-btn,
.ret-modal .cvn-cat-alta > .lu-btn { height: 27px; line-height: 25px; }

/* ---- La flecha ▾ va dentro del campo, no sobre el botón "+" --------
   .cat-flecha-btn se posiciona con right:1px, pero su referencia es
   .cvn-cat-elegir, que contiene el campo Y el botón. Con botón, esa
   esquina derecha es la del botón: la flecha le quedaba encima.
   Se envuelve el campo en su propio contenedor relativo, así la flecha
   se ancla al borde derecho del campo y no al del conjunto. */
.cvn-cat-elegir { position: static; }
.cat-campo {
  position: relative; flex: 1 1 auto; min-width: 0; display: flex;
}
.cat-campo > .cat-disparador { flex: 1 1 auto; min-width: 0; }

/* ---- Gastos de otorgamiento: UNA celda con los cuatro importes -----
   Cada importe es un <input> con su propio recuadro, así que se veían
   cuatro celdas separadas. Ahora el recuadro lo dibuja el contenedor y
   los campos van sin borde ni fondo adentro: se lee como un solo control
   del mismo alto que los demás. */
.vnv-trio {
  display: flex; align-items: center; gap: 2px; min-width: 0; flex-wrap: nowrap;
  /* Mismo fondo, borde, radio y alto que cualquier campo del modal: la celda
     se veía de otro color porque usaba --panel-2, que es más claro. */
  background: var(--panel-2, #202940); border: 1px solid var(--border, #2c2f36);
  border-radius: 8px; padding: 0 7px; min-height: 30px; box-sizing: border-box;
}
.vnv-trio input, .vnv-trio .vn-monto {
  background: none !important; border: 0 !important; border-radius: 0 !important;
  height: 100%; min-height: 0; padding: 0 2px; box-shadow: none !important;
  flex: 1 1 0; min-width: 0; text-align: right; font-size: 11px; color: inherit;
}
.vnv-trio input:focus, .vnv-trio .vn-monto:focus {
  outline: none; background: rgba(255,255,255,.05) !important; border-radius: 3px !important;
}
/* El total va primero, más ancho y separado del desglose por una línea. */
.vnv-trio > input:first-child { flex: 1.5 1 0; font-weight: 600; font-size: 12px; }
.vnv-trio-par { flex: 0 0 auto; font-size: 11px; color: var(--text); }
.vnv-trio-p { flex: 0 0 auto; font-size: 10.5px; color: var(--text); white-space: nowrap; }
.per-campo--trio > .vnv-trio { width: 100%; }

/* ---- Boleto: las leyendas, todas juntas al pie ---------------------
   Estaban repartidas entre las secciones y hacían ruido. Van en una sola
   tarjeta antes de las firmas: arriba quedan sólo los datos. */
.bol .leyendas p { margin: 0 0 3px; font-size: .72em; line-height: 1.35; text-align: justify; }
.bol .leyendas p:last-of-type { margin-bottom: 5px; }
.bol .leyendas .final { border-top: 1px solid #c9ced4; padding-top: 4px; margin-top: 0; }
/* Un poco más de aire entre tarjetas: se leen como bloques separados. */
.bol .tarjeta { margin-bottom: 5px; }
.bol .eco-tarjeta { margin-top: 5px; }

/* Anchos de dato en el boleto: sp2 y sp3 completan la fila de cuatro. */
.bol .sp3 { grid-column: span 3; }

/* Condiciones generales: una cláusula por renglón, no un bloque corrido. */
.bol .leyendas .ley-tit {
  font-size: .78em; font-weight: 700; text-transform: uppercase; letter-spacing: .8px;
  color: var(--text); margin-bottom: 3px;
}
.bol .leyendas p {
  margin: 0 0 2px; font-size: .7em; line-height: 1.3; text-align: justify;
}
.bol .leyendas .ley-cierre { margin-top: 4px; padding-top: 3px; border-top: 1px solid #c9ced4; }

/* ---- Ficha de detalle por unidad (reserva, gastos, contactos) ----
   La ficha crece: además de los datos de la unidad lleva su tabla de
   renglones, con el total al pie y el botón de agregar al lado del
   contador, como el resto de las tablas del sistema. */
.proc-ficha--detalle { max-width: 1080px; width: calc(96vw / var(--tcg-z, 1)); }
.pd-bloque { padding: 10px 14px 4px; border-top: 1px solid var(--linea, #252d3f); }
.pd-cab { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; margin-bottom: 6px; }
.pd-cab h4 { margin: 0; font-size: 14px; }
.pd-tabla td { padding: 2px 4px; }
.pd-tabla input, .pd-tabla select { width: 100%; min-width: 90px; }
.pd-tabla .pd-num { text-align: right; font-variant-numeric: tabular-nums; }
.pd-tabla .pd-ancha { min-width: 220px; }
.pd-tabla .pd-acc { width: 44px; text-align: center; }
.proc-det-col { width: 118px; text-align: center; white-space: nowrap; }
/* Emparejar fotos con accesorios */
.acc-empa { display: grid; gap: 8px; margin-top: 8px; }
.acc-empa-fila { display: grid; grid-template-columns: 74px minmax(180px, 1fr) minmax(220px, 1.2fr) auto auto; gap: 10px; align-items: center;
  border: 1px solid var(--border, #2a3345); border-radius: 10px; padding: 8px 10px; }
.acc-empa-foto { width: 74px; height: 56px; object-fit: contain; background: var(--panel-2, #1c2432); border-radius: 8px; }
.tcg-claro .acc-empa-foto { background: #f4f6fa; }
.acc-empa-nom { font-size: 13px; font-weight: 600; color: var(--text, #e6eaf0); min-width: 0; }
.acc-empa-nom small { display: block; font-weight: 400; font-size: 12px; color: var(--text); }

.pd-tabla tfoot td { position: sticky; bottom: 0; font-weight: 700;
  background: var(--panel, #14181d); border-top: 2px solid var(--accent-amber, #f2c200); }
.pd-tabla tfoot .pd-total { text-align: right; font-variant-numeric: tabular-nums; }
/* El botón de agregar va junto al contador, al pie de la tabla. */
.pd-pie { display: flex; align-items: center; gap: 10px; padding: 6px 0 2px; }
.pd-pie .lu-btn { margin-left: auto; }

/* ---- Una sola tabla para todo el módulo -------------------------------
   0km usaba .cvn-tabla y usados .vn-tabla: dos aspectos para la misma cosa,
   con encabezados distintos, uno alineado a la izquierda y otro al centro,
   y sólo uno con el encabezado fijo. Acá quedan iguales, con el estándar
   aprobado: título centrado en el color del concesionario sobre fondo
   tenue, encabezado fijo al desplazar y ancho de columna arrastrable.
   Va al final para ganarle a las declaraciones de arriba. */
.vn-tabla, .cvn-tabla { width: 100%; border-collapse: collapse; font-size: 12px; }
.vn-tabla thead th, .cvn-tabla thead th {
  position: sticky; top: 0; z-index: 2;
  /* overflow visible o el tirador de ancho queda recortado y no se arrastra. */
  overflow: visible;
  /* Fondo sólido primero: si el navegador no entiende color-mix, el
     encabezado fijo quedaría transparente y las filas se verían pasar
     por debajo al desplazar. */
  background: var(--panel-2, #161c2a);
  background: color-mix(in srgb, var(--accent-amber, #f2c200) 7%, var(--panel-2, #161c2a));
  color: var(--text);
  text-align: center; padding: 6px 9px; font-size: 13px;
  text-transform: uppercase; letter-spacing: .5px; white-space: nowrap;
  border-bottom: 1px solid var(--border, #2c2f36);
}
.vn-tabla tbody td, .cvn-tabla tbody td {
  padding: 6px 9px; border-bottom: 1px solid #22262d; color: var(--text, #c7cbd3); white-space: nowrap;
}
.vn-tabla tbody tr, .cvn-tabla tbody tr { cursor: pointer; }
.vn-tabla tbody tr:hover, .cvn-tabla tbody tr:hover {
  background: color-mix(in srgb, var(--accent-amber, #f2c200) 8%, transparent);
}
.vn-tabla tbody tr.activa, .cvn-tabla tbody tr.cvn-fila--sel,
.vn-tabla tbody tr.activa:hover, .cvn-tabla tbody tr.cvn-fila--sel:hover {
  background: color-mix(in srgb, var(--accent-amber, #f2c200) 20%, transparent);
}
.vn-tabla tbody tr.activa td { color: var(--text, #f0eee9); }
/* Las dos variantes que van más apretadas conservan su relleno. */
.cvn-tabla--edit tbody td { padding: 2px 4px; vertical-align: middle; }
.cvn-tabla--consulta tbody td { padding: 4px 6px; vertical-align: middle; }
/* La columna del número y la de casillas no se pintan como dato. */
.vn-tabla .proc-n-col, .cvn-tabla .proc-n-col,
.vn-tabla .sel-col, .cvn-tabla .sel-col { text-align: center; }


/* El color de cada concesionario, para cualquier modal que lo pida. Estaba
   sólo dentro de .vnv-modal, así que otras pantallas no podían usarlo. */
.vnv-marca--renault { --vnv-marca: #f2c200; --vnv-marca-luz: #f2c200; --vnv-marca-txt: #1d1a06; --vnvb-sobre-marca: #1d1a06; }
.vnv-marca--peugeot { --vnv-marca: #0b4f96; --vnv-marca-luz: #4f8ef7; --vnv-marca-txt: #ffffff; --vnvb-sobre-marca: #ffffff; }
.vnv-marca--toyota  { --vnv-marca: #cf2126; --vnv-marca-luz: #e2574c; --vnv-marca-txt: #ffffff; --vnv-marca-fuerte: #b3231a; --vnvb-sobre-marca: #ffffff; }

/* ---- Logo del concesionario ----
   Sin recuadro: el logo ya viene recortado y en versión clara, así que se
   apoya directo sobre el fondo del sistema. Alto parejo para los tres, que
   tienen anchos distintos. */
.logo-dealer { flex: 0 0 auto; display: inline-flex; align-items: center; margin-right: 12px; }
.logo-dealer img { height: var(--logo-alto, 26px); width: auto; display: block; }


/* ---- Cuerpo de los modales ----
   Es una columna flexible, y por defecto los bloques de adentro se encogen
   cuando el contenido no entra: en vez de aparecer la barra, cada bloque se
   aplasta y se corta. Con esto conservan su alto y el cuerpo desplaza. */
.com-cuerpo > * { flex-shrink: 0; }

/* ---- Columna de casillas ----
   Angosta, centrada y del mismo ancho en todas las tablas, así la primera
   columna de datos arranca siempre en el mismo lugar. */
.sel-col { width: 34px; text-align: center; padding: 2px 4px !important; }
.sel-col input[type="checkbox"] { cursor: pointer; margin: 0; }

/* ---- Un solo aspecto para todos los campos ----------------------------
   Había tres a la vez en la misma pantalla: el input de formulario (fondo
   casi negro), el disparador de catálogo (gris más claro y 1px más bajo) y
   el buscador (otro gris, otro radio, otra letra). Se veían como tres
   sistemas distintos. Ahora los tres comparten fondo, borde, alto y foco.
   Va al final para ganarle a las reglas de arriba. */
.per-campo input, .per-campo select, .per-campo textarea,
.cat-disparador, .cvn-cat-alta input, .bap-input {
  box-sizing: border-box; min-height: 30px;
  background: var(--panel-2, #202940); border: 1px solid var(--border, #2c2f36); border-radius: 8px;
  color: var(--text, #c7cbd3); padding: 6px 9px; font-size: 13px; font-family: inherit;
}
.per-campo input:focus, .per-campo select:focus, .per-campo textarea:focus,
.cat-disparador:focus, .cvn-cat-alta input:focus, .bap-input:focus {
  outline: none; border-color: var(--accent-amber, #f2c200);
}
/* El botón de alta al costado, del mismo alto que el campo. */
.cvn-cat-elegir > .lu-btn { min-height: 30px; padding: 0 9px; flex: 0 0 auto; }
/* El buscador emergente arranca sobre la celda: mismo ancho y mismo borde. */
.cat-buscar { background: var(--panel-2, #202940); font-size: 15.5px; padding: 7px 9px; }

/* ---- Subastas ----
   Cada lote es una tarjeta con su nombre, su base y su mínimo arriba, las
   unidades adentro y el resultado al pie. La oferta ganadora se lee sola. */
.sub-lote { border: 1px solid var(--linea, #252d3f); border-radius: 10px; margin-bottom: 10px; overflow: hidden; }
.sub-lote-cab { display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  padding: 7px 10px; background: color-mix(in srgb, var(--accent-amber, #f2c200) 6%, transparent); }
.sub-lote-tit { flex: 1; min-width: 140px; background: transparent; border: 0;
  border-bottom: 1px dotted #5a626d; color: var(--text);
  font: inherit; font-size: 13px; font-weight: 700; padding: 2px 0; }
.per-campo.sub-mini { flex: 0 0 auto; }
.per-campo.sub-mini input { width: 130px; }
/* La tabla del lote va en su propio marco: si no entra a lo ancho se
   desplaza ella sola, sin llevarse puesto lo que está abajo. Antes, con el
   navegador al 100%, el selector para sumar autos quedaba fuera de vista. */
.sub-tabla-wrap { overflow-x: auto; }
.sub-tabla { margin: 0; min-width: 100%; }
.sub-tabla input, .sub-tabla select { width: 100%; min-width: 90px; }
/* Los dos selectores de unidades: uno arma un lote de varias, el otro
   subasta un auto por su cuenta. Van arriba, siempre a la vista. */
.sub-sumar, .sub-suelta { flex: 0 0 auto; max-width: 260px; font-size: 12px;
  text-transform: none; letter-spacing: 0; font-weight: 400; }
.sub-suelta { margin-left: auto; }
.sub-vacio { padding: 8px 10px; }
.sub-clave { letter-spacing: 2px; font-weight: 700; white-space: nowrap; }
.sub-clave .lu-btn { margin-left: 6px; letter-spacing: 0; font-weight: 400; padding: 1px 7px; }
tr.sub-gana td { background: color-mix(in srgb, #7fc78f 16%, transparent); font-weight: 700; }
.sub-resultado { display: flex; flex-wrap: wrap; gap: 8px 18px; align-items: center;
  padding: 8px 10px; border-top: 1px solid var(--linea, #252d3f); }
.sub-resultado > div { display: flex; flex-direction: column; }
.sub-resultado span { font-size: 12px; text-transform: uppercase; letter-spacing: .4px; color: var(--text); }
.sub-resultado b { font-size: 13px; font-variant-numeric: tabular-nums; }
.sub-si { color: var(--text); }
.sub-no { color: #cf7b7b; }
.sub-adjudicado { margin-left: auto; text-align: right; }
.sub-adjudicado b { color: var(--text); font-size: 14px; }
/* La celda de fotos: la miniatura abre la galería, y al lado los dos modos
   de conseguirlas —del peritaje o subidas a mano—. */
.sub-fotos-celda { white-space: nowrap; }
.sub-portada-btn { position: relative; background: none; border: 0; padding: 0; margin-right: 6px;
  cursor: pointer; vertical-align: middle; }
.sub-portada { width: 42px; height: 32px; object-fit: cover; border-radius: 6px; display: block; }
.sub-portada--vacia { display: flex; align-items: center; justify-content: center;
  border: 1px dashed var(--linea, #252d3f); color: var(--text); font-size: 14px; }
.sub-portada-btn span { position: absolute; right: -4px; bottom: -4px; background: var(--panel, #14181d);
  border: 1px solid var(--linea, #252d3f); border-radius: 10px; font-size: 12px; padding: 0 4px;
  color: var(--text); }
.sub-fotos-celda .lu-btn { padding: 2px 7px; font-size: 12px; margin-left: 3px; }
/* El modal tiene alto máximo y reparte: encabezado y pie fijos, las fotos
   con su propio scroll. Sin esto, con dos fotos ya se cortaba sin barra. */
.sub-galeria { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
  gap: 10px; padding: 12px 14px; overflow-y: auto; flex: 1 1 auto; min-height: 0; }
.sub-galeria figure { margin: 0; position: relative; }
.sub-galeria img { width: 100%; aspect-ratio: 4 / 3; object-fit: cover; border-radius: 8px;
  border: 1px solid var(--linea, #252d3f); display: block; }
.sub-galeria figcaption { font-size: 12px; color: var(--text); margin-top: 3px;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.sub-galeria .lu-btn { position: absolute; top: 5px; right: 5px; padding: 1px 7px; font-size: 12px;
  background: rgba(14,17,20,.85); }

.sub-traer { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 10px; }
.sub-traer-nota { margin-left: auto; }
.sub-web { font-size: 12px; text-transform: uppercase; letter-spacing: .5px; color: var(--text);
  border: 1px solid #3f7a4a; border-radius: 20px; padding: 1px 7px; }

/* ---- Fichas de carga en columna ---------------------------------------
   Una celda debajo de la otra, con el rótulo a la izquierda. Se carga
   bajando con Enter, sin saltar de una columna a la otra buscando con el
   mouse. El campo se corta en 22 caracteres, que es lo más largo que se
   carga acá: un modal ancho para escribir un año de cuatro cifras es
   incómodo, hay que barrer media pantalla con la vista. */
.com-grid--vertical { grid-template-columns: 1fr; gap: 6px; }
.com-grid--vertical .per-campo {
  display: grid; grid-template-columns: 150px minmax(0, 22ch); align-items: center; gap: 10px;
}
/* Nada ocupa doble ancho acá: si algo lo pidiera, la grilla se partiría en
   dos columnas y dejaría de ser una lista. */
.com-grid--vertical .per-campo,
.com-grid--vertical .pre-sp2 { grid-column: 1; }
.com-grid--vertical .per-campo > span { text-align: right; }
.com-grid--vertical .per-campo > small { grid-column: 2; }
/* El desplegable de catálogo trae su propia caja: se alinea igual. */
.com-grid--vertical .cvn-cat .cvn-cat-elegir { min-width: 0; }
.com-modal--angosto { width: auto; max-width: min(480px, calc(96vw / var(--tcg-z, 1))); }



/* ---- Presupuestos ----
   Cada tarjeta lleva su título, lo que le corresponda al costado y el rayo
   de carga rápida, que abre esos mismos campos uno debajo del otro. En la
   tarjeta se carga de izquierda a derecha con Tab o con Enter. */
.pre-tarjeta { margin-bottom: 10px; }
.pre-sec-tit { flex: 0 0 auto; }
.pre-rapida {
  margin-left: auto; background: rgba(255, 255, 255, .16); border: 0; border-radius: 6px;
  color: inherit; font: inherit; font-size: 12px; line-height: 1; padding: 3px 8px; cursor: pointer;
}
.pre-rapida:hover { background: rgba(255, 255, 255, .3); }
/* El tilde de stock y la referencia van en la misma línea del título. */
.pre-tilde { display: inline-flex; align-items: center; gap: 5px; text-transform: none;
  letter-spacing: 0; font-weight: 600; font-size: 12px; cursor: pointer; }
.pre-tilde input { margin: 0; cursor: pointer; }
.pre-ref { text-transform: none; letter-spacing: 0; font-weight: 400; opacity: 1;
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 12px; }
.pre-sec .com-ayuda { color: inherit; opacity: 1; }
/* Los selectores que van en el rótulo, en tono con la banda. */
.sub-sumar, .sub-suelta { background: rgba(255, 255, 255, .14); border: 0; color: inherit;
  border-radius: 6px; padding: 3px 7px; }
.sub-sumar option, .sub-suelta option { color: #000; }
.pre-cliente { min-width: 0; }

/* Mismo rótulo de sección que el resto del sistema (ver .ret-seccion): el
   color de la marca en pleno, letra chica y clara. La banda clara que tenía
   antes no se parecía a nada del proyecto. */
.pre-sec { margin: 12px 0 5px; padding: 3px 8px; border-radius: 6px;
  background: var(--vnv-marca, #6c7684); color: var(--vnv-marca-txt, #fff);
  font-size: 12px; font-weight: 700; letter-spacing: .5px; text-transform: uppercase;
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.pre-sec .com-ayuda { text-transform: none; letter-spacing: 0; font-weight: 400; }
.per-campo.pre-sp2 { grid-column: span 2; }
.pre-variantes { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
  gap: 10px; align-items: start; }
.pre-var { border: 1px solid var(--linea, #252d3f); border-radius: 8px; padding: 8px 10px; }
.pre-var-cab { display: flex; gap: 6px; align-items: center; margin-bottom: 6px; }
.pre-var-tit { flex: 1; background: transparent; border: 0; border-bottom: 1px dotted #5a626d;
  color: var(--text); font: inherit; font-size: 13px; font-weight: 700; padding: 2px 0; }
.pre-var-campos { display: grid; gap: 4px; }
.pre-var-total { display: flex; justify-content: space-between; gap: 8px; margin-top: 7px;
  padding-top: 6px; border-top: 2px solid var(--accent-amber, #f2c200); font-size: 12px; }
.pre-var-total b { font-variant-numeric: tabular-nums; margin-left: 5px; }
.pre-agregar { align-self: start; }
/* Acciones del renglón: la principal (pasar a venta) destacada. */
/* Las acciones van todas en la misma línea. Con ancho fijo y wrap, en cuanto
   una llevaba texto («Ofertas», «→ Venta») se partían en dos renglones y la
   fila quedaba desalineada con las de al lado. */
.pre-acc-col { width: 1%; white-space: nowrap; }
.pre-acciones { display: flex; gap: 4px; flex-wrap: nowrap; align-items: center; }
.pre-acciones .lu-btn { padding: 2px 8px; font-size: 13px; line-height: 1.35; white-space: nowrap; }
.pre-chip { display: inline-block; font-size: 12px; padding: 1px 8px; border-radius: 20px; border: 1px solid; }
.pre-c-vig { color: var(--text); border-color: #3f7a4a; }
.pre-c-ven { color: var(--text); border-color: #7a5f2a; }
.pre-c-acp { color: var(--text); border-color: #2f5f8a; }
.pre-c-rec { color: #cf7b7b; border-color: #7a3a3a; }
/* Las mismas pastillas, en tema claro. Los cuatro colores de arriba están
   hechos para el panel oscuro: sobre blanco el verde da 2,01 de contraste y
   los otros tres andan por ahí. El mínimo legible es 4,5.
   No es de la ficha: pasa igual en las tablas desde siempre, sólo que ahí la
   pastilla era una columna más y en la ficha es LA señal de estado.
   Medido en Chromium sobre #ffffff: 5,6 · 6,0 · 6,2 · 6,4. */
.mo-claro .pre-c-vig { color: #000; border-color: #8dc79c; }
.mo-claro .pre-c-ven { color: #000; border-color: #d8bd83; }
.mo-claro .pre-c-acp { color: #000; border-color: #93bede; }
.mo-claro .pre-c-rec { color: #000; border-color: #d9a2a2; }
.pre-motivos { display: flex; flex-wrap: wrap; gap: 7px; padding: 14px; }

/* ---- Registro de boletos emitidos ----
   Las acciones van juntas al final del renglón, con el botón principal
   (reimprimir) primero. Un boleto anulado se lee tachado y apagado, pero
   no se borra: el número tiene que seguir a la vista. */
.bol-acc-col { width: 168px; white-space: nowrap; text-align: center; }
.bol-acciones { display: flex; gap: 3px; justify-content: center; }
.bol-acciones .lu-btn { padding: 2px 7px; font-size: 13px; line-height: 1.3; }
tr.bol-anulado td { opacity: 1; text-decoration: line-through; }
tr.bol-anulado td.bol-acc-col { opacity: 1; text-decoration: none; }

/* ===== Tienda online: pantalla de publicacion ===== */
.tnd-seccion {
  margin: 14px 0 8px;
  padding: 3px 9px;
  font-size: 12px;
  font-weight: 700;
  letter-spacing: .08em;
  text-transform: uppercase;
  border-radius: 6px;
  background: var(--vnv-marca, var(--accent-amber));
  color: var(--vnv-marca-txt, #131824);
  display: inline-block;
}
.tnd-conf {
  display: flex;
  flex-wrap: wrap;
  gap: 10px 14px;
  align-items: flex-end;
  margin-bottom: 6px;
}
.tnd-campo { display: flex; flex-direction: column; gap: 3px; min-width: 190px; }
.tnd-campo--ancho { flex: 1 1 300px; }
.tnd-campo > span { font-size: 12px; color: var(--text); }
.tnd-campo input {
  height: 30px;
  padding: 0 8px;
  border: 1px solid var(--border, #252d3f);
  border-radius: 6px;
  background: var(--panel-2, #202940);
  color: inherit;
  font-size: 13px;
}
.tnd-enlace { display: flex; flex-direction: column; gap: 8px; margin-bottom: 6px; }
.tnd-chips { display: flex; flex-wrap: wrap; gap: 8px; }
.tnd-url {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
}
.tnd-url code {
  flex: 1 1 260px;
  padding: 6px 9px;
  border: 1px dashed var(--border, #252d3f);
  border-radius: 6px;
  background: var(--panel-2, #202940);
  font-size: 12px;
  word-break: break-all;
}
.tnd-tilde-col { width: 1%; white-space: nowrap; text-align: center; }
.tnd-tilde-col .ret-tilde { padding: 2px 4px; }
.tnd-fila--on { background: rgba(76, 175, 109, .07); }

/* ===== Album de fotos de la unidad ===== */
.fu { margin: 6px 0 12px; }
.fu-barra { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 8px; }
.fu-subir { cursor: pointer; }
.fu-cuenta { font-size: 12px; color: var(--text); }
.fu-grilla {
  display: grid; gap: 10px;
  grid-template-columns: repeat(auto-fill, minmax(132px, 1fr));
}
.fu--compacto .fu-grilla { grid-template-columns: repeat(auto-fill, minmax(104px, 1fr)); }
.fu-item {
  margin: 0; position: relative;
  border: 1px solid var(--border, #252d3f); border-radius: 8px;
  overflow: hidden; background: var(--panel-2, #202940);
}
.fu-item--portada { border-color: var(--accent-amber, #f2c200); }
.fu-mini {
  display: block; width: 100%; padding: 0; border: 0; cursor: pointer;
  aspect-ratio: 4 / 3; background: var(--panel-3, #10131a);
}
.fu-mini img { width: 100%; height: 100%; object-fit: cover; display: block; }
.fu-item figcaption {
  display: flex; flex-direction: column; gap: 1px; padding: 5px 7px 6px;
}
.fu-titulo {
  font-size: 12px; font-weight: 600;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.fu-origen { font-size: 12px; color: var(--text); }
.fu-acciones {
  position: absolute; right: 4px; top: 4px;
  display: flex; gap: 3px; opacity: 0; transition: opacity .14s ease;
}
.fu-item:hover .fu-acciones, .fu-item:focus-within .fu-acciones { opacity: 1; }
.fu-item--portada .fu-acciones { opacity: 1; }
.fu-acciones .lu-btn { padding: 1px 6px; font-size: 12px; line-height: 1.5; }
.fu-lupa {
  position: fixed; inset: 0; z-index: 60;
  background: rgba(10,13,18,.86); display: grid; place-items: center; padding: 20px;
}
.fu-lupa img { max-width: 100%; max-height: calc(92vh / var(--tcg-z, 1)); object-fit: contain; border-radius: 8px; }

/* Casillero con nombre del peritaje: la × va montada arriba de la foto */
.per-foto-caja { position: relative; }
.per-foto-x {
  position: absolute; right: -5px; top: -5px;
  width: 19px; height: 19px; padding: 0; border: 0; border-radius: 50%;
  background: #e0725f; color: #fff; font-size: 12px; line-height: 19px;
  cursor: pointer;
}


/* El panel de fotos se monta encima de la pantalla de publicación */
.tnd-fotos-overlay { z-index: 50; }
.tnd-fotos-overlay .per-modal { max-width: 900px; }

/* La columna Fotos es la puerta de entrada al álbum */
.tnd-fotos-btn {
  padding: 3px 10px; border-radius: 999px; cursor: pointer;
  border: 1px solid var(--border, #252d3f);
  background: var(--panel-2, #202940); color: inherit;
  font-size: 12px; font-weight: 600; white-space: nowrap;
}
.tnd-fotos-btn:hover { border-color: var(--accent-amber, #f2c200); }
.tnd-fotos-btn--vacia {
  border-style: dashed;
  border-color: var(--accent-amber, #f2c200);
  color: var(--text);
}

/* Publicar: el estado es el botón, para que no haya que buscarlo */
.tnd-estado {
  padding: 3px 11px; border-radius: 999px; cursor: pointer;
  font-size: 12px; font-weight: 700; white-space: nowrap;
  border: 1px solid var(--border, #252d3f);
  background: var(--panel-2, #202940); color: inherit;
}
.tnd-estado--off { border-color: var(--accent-blue, #4f8ef7); color: var(--text); }
.tnd-estado--off:hover { background: var(--accent-blue, #4f8ef7); color: #000; }
.tnd-estado--on {
  border-color: var(--green, #4caf6d); color: var(--text);
  background: rgba(76, 175, 109, .12);
}
.tnd-estado[disabled] { opacity: .5; cursor: default; }

/* El botón de guardar contesta solo, sin cartel arriba de todo */
.tnd-guardar { min-width: 130px; transition: background .16s ease, color .16s ease; }
.tnd-guardar--listo {
  background: var(--green, #4caf6d) !important;
  border-color: var(--green, #4caf6d) !important;
  color: #000 !important;
}
.tnd-guardar--error {
  background: #e0725f !important; border-color: #e0725f !important; color: #000 !important;
}

/* Borrar y elegir tapa: siempre visibles. Escondidos detrás del mouse,
   en una tablet no existen y nadie los encuentra. */
.fu-acciones {
  position: static; opacity: 1;
  display: flex; gap: 5px; padding: 0 6px 7px;
}
.fu-accion {
  flex: 1; padding: 4px 6px; border-radius: 6px; cursor: pointer;
  border: 1px solid var(--border, #252d3f);
  background: var(--panel, #1b2233); color: var(--text);
  font-size: 12px; font-weight: 600; white-space: nowrap;
}
.fu-accion:hover { border-color: var(--accent-amber, #f2c200); color: var(--text); }
.fu-accion--portada {
  border-color: var(--accent-amber, #f2c200); color: var(--text);
  background: rgba(232,163,61,.12);
}
.fu-accion--borrar:hover { border-color: #e0725f; color: #e0725f; }
.fu-item:hover .fu-acciones, .fu-item--portada .fu-acciones { opacity: 1; }

/* Accesos de la Lista de usados, con el color del concesionario */
.lu-acc {
  display: inline-flex; align-items: center; gap: 7px;
  padding: 9px 17px; border-radius: 999px; cursor: pointer;
  font-size: 12.5px; font-weight: 700;
  border: 1px solid var(--border, #252d3f);
  background: var(--panel-2, #202940); color: inherit;
  transition: background .15s ease, color .15s ease, border-color .15s ease;
}
.lu-acc:hover { border-color: var(--accent-amber, #f2c200); }
.lu-acc[disabled] { opacity: .45; cursor: default; }
.lu-acc--marca {
  background: var(--accent-amber, #f2c200);
  border-color: var(--accent-amber, #f2c200);
  color: var(--vnv-marca-txt, #131824);
}
.lu-acc--marca:hover { filter: brightness(1.08); }
.lu-oculta, .inf-oculta { display: none; }
/* El acceso a la web va pegado a la derecha del encabezado, separado del
   título: es una salida de la pantalla, no un dato más de la cabecera. */
.tnd-ver-web, .sub-ver-web { margin-left: auto; flex: 0 0 auto; align-self: center; }
/* 22/09/2026 (Ramiro: «el botón se ve tapado»). «Ver la web» va sobre la
   banda de color de la casa: queda con el fondo de la tinta de la banda y la
   letra del color de la casa, así se lee en las tres y en los dos modos. */
.per-modal > .per-cab .lu-btn--accion.tnd-ver-web,
.per-modal > .per-cab .lu-btn--accion.sub-ver-web {
  background: var(--vnv-marca-txt, #ffffff) !important;
  color: var(--vnv-marca-fuerte, var(--vnv-marca, #0b4f96)) !important;
  border-color: transparent !important; font-weight: 700; min-width: 120px; justify-content: center;
}
/* Los bloques de la tienda, parejos: mismo aire entre uno y otro y los
   botones de cada bloque alineados a la derecha, del mismo ancho. */
.tnd-seccion { margin-top: 16px; }
.tnd-guardar-fila { display: flex; justify-content: flex-end; gap: 8px; margin: 12px 0 4px;
  padding-top: 10px; border-top: 1px solid var(--border, #2a3345); }
.tnd-guardar-fila .lu-btn, .tnd-enlace .tnd-url .lu-btn { min-width: 130px; justify-content: center; }
.tnd-enlace .tnd-url { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.tnd-enlace .tnd-url code { flex: 1 1 320px; min-width: 0; }
.tnd-chip-n { margin-left: 6px; font-size: 12px; opacity: 1; }
.acc-cat { margin: 14px 0 0; }
/* Y si aun así no entra —pantalla chica, columnas anchas—, la tabla se
   arrastra de costado en vez de cortarse. */
.acc-cat .cjs-tabla-caja { overflow-x: auto; }
.acc-cat .cjs-tabla { min-width: 1020px; }
.acc-cat-precio { width: 110px; text-align: right; }
.acc-cat-detalle { width: 100%; min-width: 170px; }
.acc-cat-parte { width: 118px; text-align: center; font-variant-numeric: tabular-nums; }
.acc-cat-modelos { width: 100%; min-width: 150px; }
.acc-cat-ops { display: block; font-size: 12px; color: var(--text); margin-top: 2px; }
.acc-cat-desde { font-size: 12px; color: var(--text); }
.acc-cat-foto { width: 38px; height: 28px; object-fit: cover; border-radius: 4px; }
.acc-cat-foto-caja { position: relative; display: inline-flex; align-items: center; }
.acc-cat-foto-x { position: absolute; top: -6px; right: -8px; width: 16px; height: 16px;
  line-height: 14px; padding: 0; border-radius: 50%; border: 1px solid var(--border, #2b3348);
  background: var(--panel, #161c2a); color: var(--text); cursor: pointer; font-size: 12px; }
.acc-cat-foto-x:hover { color: var(--red, #e2574c); }
.acc-cat-foto-poner { display: inline-flex; align-items: center; justify-content: center;
  width: 38px; height: 28px; border: 1px dashed var(--border, #2b3348); border-radius: 4px;
  color: var(--text); cursor: pointer; }
.acc-cat-foto-poner:hover { border-color: var(--accent-amber, #f2c200); color: var(--text); }
.acc-cat-nombre { width: 100%; min-width: 180px; }
.acc-cat-nombre-txt { cursor: text; }
.acc-cat-nombre-txt:hover { text-decoration: underline dotted; }
.acc-cat-alta { border-top: 1px dashed var(--border, #2b3348); padding-top: 8px; margin-top: 6px; }
.acc-alta-modelos { display: flex; gap: 6px; flex-wrap: wrap; align-items: center; margin: 8px 0 4px; }
.acc-alta-modelos .ret-tilde { font-size: 12px; padding: 3px 9px; }
/* Los tres niveles de comunicación */
/* El plan que pasó a otro concesionario: se lee igual, pero se distingue de
   un vistazo (una marca al costado y un fondo apenas tocado). */
.car-fila-plan--otroce > td:first-child { box-shadow: inset 4px 0 0 var(--accent-amber, #f2c200); }
.car-fila-plan--otroce > td { background: color-mix(in srgb, var(--accent-amber, #f2c200) 9%, transparent); }
.tcg-claro .car-fila-plan--otroce > td { background: #fdf6dc; }
.ac-otroce { margin-top: 8px; padding: 8px 10px; border-radius: 8px; border: 1px solid var(--accent-amber, #f2c200);
  background: color-mix(in srgb, var(--accent-amber, #f2c200) 12%, transparent); font-size: 13px; }
.crm-tanda { width: min(880px, calc(96vw / var(--tcg-z, 1))); max-height: calc(88vh / var(--tcg-z, 1)); overflow: auto; padding: 16px 18px; }
.crm-tanda-tit { font-size: 17px; }
/* za: la «Tanda de hoy» a toda la pantalla (se elige con «Agrandar» / «Achicar», por persona). */
/* Con !important porque la regla general de los modales (más abajo) fija 1240 px y 90 % de alto con !important. */
.per-overlay.crm-tanda-fondo--grande { padding: 6px !important; align-items: stretch !important; justify-content: stretch !important; }
.per-overlay > .per-modal.crm-tanda.crm-tanda--grande { flex: 1 1 auto !important; align-self: stretch !important; width: auto !important; max-width: none !important;
  height: auto !important; max-height: none !important; border-radius: 10px; display: block !important; }
.crm-tanda--grande .adj2-caja { max-height: calc(100vh / var(--tcg-z, 1) - 240px) !important; }
.crm-tanda-botones { display: flex; gap: 8px; align-items: flex-start; flex-shrink: 0; }
.crm-tanda-botones .pvx-btn { min-width: 104px; }
.comu-niveles { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 10px; }
.comu-nivel { text-align: left; border: 1px solid var(--border, #2a3345); border-radius: 12px; padding: 12px 14px;
  background: var(--panel, #161c29); color: var(--text, #e6eaf0); cursor: pointer; font: inherit; }
.tcg-claro .comu-nivel { background: #ffffff; }
.comu-nivel.on { border-color: var(--casa-activa, #4f8ef7); box-shadow: inset 3px 0 0 var(--casa-activa, #4f8ef7); }
.comu-nivel b { display: block; font-size: 15px; margin-bottom: 4px; }
.comu-nivel span { font-size: 12.5px; color: var(--text); }
.comu-lista { list-style: none; margin: 0 0 10px; padding: 0; display: grid; gap: 4px; font-size: 13px; }
.comu-lista li { color: var(--text); }
.comu-lista li.es-ok { color: var(--text); font-weight: 600; }
.comu-estado { font-size: 12px; font-weight: 700; border: 1px solid var(--border, #2a3345); border-radius: 999px; padding: 2px 10px; color: var(--text); }
.comu-estado.on { color: var(--text); border-color: var(--green, #4caf6d); }
/* Los dos registros de boletos: alto fijo y el botón de nuevo en el pie. */
.bad-registro { display: flex; flex-direction: column; min-height: min(calc(78vh / var(--tcg-z, 1)), 720px); }
.bad-registro .tnd-tabla-caja, .bad-registro .tnd-vacio { flex: 1 1 auto; min-height: 220px; }
.bad-registro .bad-nuevo-arriba { display: none; }
/* El pie de la casa dentro de PDA, que trae su propia hoja de estilos. */
/* La caja de Transferencia: alto fijo, como las demás del sector. */
.trf-caja { display: flex; flex-direction: column; min-height: min(calc(78vh / var(--tcg-z, 1)), 760px); }
.trf-caja .ac-sub-intro { padding: 12px 16px 0; }
.trf-caja > .cip-pie { margin-top: auto; }
.bad-pie-acciones { display: flex; align-items: center; gap: 12px; padding: 10px 2px 0; margin-top: auto; }
.acc-cat-mod-celda { display: flex; gap: 4px; align-items: center; }
.acc-cat-mod-celda .acc-cat-modelos { flex: 1 1 auto; min-width: 0; }
.acc-cat-mod-mas { flex: 0 0 auto; width: 26px; height: 26px; border: 1px solid var(--border, #2a3345); border-radius: 6px;
  background: var(--panel-2, #1c2432); color: var(--text, #e6eaf0); cursor: pointer; font: inherit; line-height: 1; }
.tcg-claro .acc-cat-mod-mas { background: #f4f6fa; }
.acc-cat-mo { align-items: flex-end; gap: 10px; }
.acc-cat-mo-celda select { font-size: 13px; max-width: 132px; }
.acc-cat-mo-valor { width: 92px; text-align: right; }
.acc-cat-puesto b { font-variant-numeric: tabular-nums; }   /* la columna «Colocado» */
/* El renglón con mano de obra propia, marcado por el fondo: un cartel al
   lado de la cifra ensucia la columna y las cifras dejan de leerse en
   línea. */
.acc-cat-fila--propia td { background: color-mix(in srgb, var(--accent-amber, #f2c200) 6%, transparent); }
/* Transferencia de plan: el vacío se ve apagado, no listo para usar. */
.transf-vacio { margin-top: 14px; padding: 16px; border: 1px dashed var(--border, #252d3f);
  border-radius: 10px; }
.transf-vacio-tit { font-weight: 700; margin-bottom: 4px; }
.transf-vacio p { color: var(--text); font-size: 12.5px; margin: 0 0 12px; max-width: 560px; }
.transf-nuevo--off { opacity: 1; pointer-events: none; }
/* Envío bloqueado: el motivo se escribe en la misma fila, y la lista de
   bloqueadas se distingue de un vistazo. */
.env-motivo { width: 100%; min-width: 170px; }
.env-bloq-fila td { background: color-mix(in srgb, var(--red, #e2574c) 7%, transparent); }
/* El tilde de cambio de titularidad, en la misma línea del título del
   bloque: es una excepción del caso normal, no un dato más del cliente. */
.sus-tilde { display: inline-flex; align-items: center; gap: 6px; margin-left: 14px;
  font-size: 12px; font-weight: 400; color: var(--text); cursor: pointer; }
.sus-tilde input { margin: 0; }
/* Las tres solapas del modal de accesorios. Con bajada, porque el nombre
   solo no alcanza para saber qué hay adentro de cada una. */
.pv-solapas { display: flex; gap: 4px; padding: 10px 14px 0; border-bottom: 1px solid var(--border, #252d3f); }
.pv-sol { padding: 8px 16px; border: 1px solid var(--border, #252d3f); border-bottom: 0;
  border-radius: 9px 9px 0 0; background: var(--panel-2, #1b2233); color: var(--text);
  cursor: pointer; text-align: left; font-size: 13px; }
.pv-sol small { display: block; font-size: 12px; font-weight: 400; color: var(--text); }
.pv-sol.es-on { background: var(--panel, #161c2a); color: var(--text, #ecf0f4); font-weight: 700;
  box-shadow: inset 0 2px 0 var(--accent-amber, #f2c200); }

/* LAS SOLAPAS NO SE VAN Y EL MODAL NO SALTA (13/09/2026, Ramiro).
   Dos cosas que se notan al usarlo y no al mirarlo:

   1. Al recorrer una lista larga las solapas se iban para arriba con el
      scroll, y para cambiar de solapa había que volver al principio. Quedan
      pegadas al tope.
   2. Cada solapa tiene distinto largo —la lista de clientes es larga, la
      web son cuatro renglones—, así que el modal se achicaba y se agrandaba
      en cada clic. Se le da el alto de la más grande y no se mueve: el ojo
      no tiene que volver a buscar dónde está todo. */
/* LAS SOLAPAS NO SE VAN. Estaban FUERA del contenedor que se desplaza, así
   que «sticky» no tenía contra qué pegarse: el que scrollea es el cuerpo del
   modal. Se fija el modal al alto de la pantalla, las solapas quedan arriba
   sin moverse y lo único que se desplaza es lo de abajo. */
.per-modal.pv-modal-alto { height: min(calc(88vh / var(--tcg-z, 1)), 900px); max-height: min(calc(88vh / var(--tcg-z, 1)), 900px);
  display: flex; flex-direction: column; }
.per-modal.pv-modal-alto > .per-cab,
.per-modal.pv-modal-alto > .pv-solapas { flex: 0 0 auto; }
.per-modal.pv-modal-alto > .com-cuerpo { flex: 1 1 auto; min-height: 0; overflow: auto; }
.pv-solapas { background: var(--panel, #161c2a); }
.pv-cuerpo { min-height: 0; }
.acc-cat-mo-txt { display: block; font-size: 12px; color: var(--text); margin-top: 2px; }
.acc-cat-publicar { display: flex; flex-direction: column; align-items: flex-end; gap: 3px; }
.acc-cat-barra { display: flex; align-items: flex-end; gap: 16px; flex-wrap: wrap;
  margin: 12px 0 4px; padding-bottom: 12px; border-bottom: 1px solid var(--border, #252d3f); }
.acc-cat-buscar { min-width: 240px; }
.acc-cat-espacio { flex: 1 1 auto; }
/* Cada cosa que se toca de vez en cuando, en su caja y con su nombre. Antes
   estaban una abajo de la otra sin aire y no se sabía dónde terminaba una. */
.acc-cat-bloque { margin: 14px 0 0; padding: 10px 12px; border-radius: 8px;
  background: color-mix(in srgb, var(--panel-2, #1b2233) 60%, transparent);
  border: 1px solid var(--border, #252d3f); }
.acc-cat-bloque-tit { font-size: 12px; text-transform: uppercase; letter-spacing: .5px;
  color: var(--text); margin-bottom: 6px; }
.acc-cat-donde { font-weight: 600; letter-spacing: .3px; }
.acc-cat-borrar { color: var(--text); }
.acc-cat-borrar:hover { color: var(--red, #e2574c); }
.acc-cat-sinfoto { color: var(--text); }
.acc-import, .acc-precios { margin: 8px 0 0; }
.acc-cat-solapas { margin: 10px 0 4px; }
.tnd-chip-n--cero { color: var(--red, #e2574c); opacity: 1; font-weight: 700; }
/* La solapa que se está arrastrando se ve levantada, y la de abajo del dedo
   marca dónde va a caer. Sin esas dos señales, arrastrar es adivinar. */
.sc-tab-btn[draggable="true"] { cursor: grab; }
.sc-tab-btn[draggable="true"]:active { cursor: grabbing; }
.sc-tab-btn.sc-tab--arrastrando { opacity: .45; }
/* Cuando la lista de fichas está dibujada, la tabla se va. Se mira con «:has»
   para no tener que llevar un estado más en cada una de las 21 pantallas. */
.sc-fichas { padding: 0 4px 10px; }
.sc-ver-entregadas { display: flex; align-items: center; gap: 6px; padding: 0 0 8px;
  font-size: 12px; color: var(--text); cursor: pointer; }
.sc-panel:has(.sc-fichas) .sc-table-wrap { display: none; }
.inf-fichas { padding: 0 10px 10px; }
.lu-elegir-casa { max-width: 420px; padding: 16px 18px 18px; }
.lu-elegir-botones { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 12px; }
.lu-acc--tienda {
  border-color: var(--accent-blue, #4f8ef7); color: var(--text);
}
.lu-acc--tienda:hover:not([disabled]) { background: var(--accent-blue, #4f8ef7); color: #000; }
.lu-publica {
  display: flex; flex-direction: column; align-items: center; gap: 10px;
  padding: 30px 20px 40px; text-align: center;
}
.lu-publica-tit { margin: 0; font-size: 16px; font-weight: 700; }

.tnd-campos { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 4px; }
.tnd-guardar-fila { display: flex; justify-content: flex-end; margin: 14px 0 4px; }

/* Subasta de varias casas */
.sub-casas { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 4px; }
.ret-tilde--fijo { opacity: 1; cursor: default; }
.sub-anfitrion {
  margin-left: 6px; padding: 1px 6px; border-radius: 999px;
  background: var(--accent-amber, #f2c200); color: var(--vnv-marca-txt, #131824);
  font-size: 12px; font-style: normal; font-weight: 700; text-transform: uppercase;
}
.sub-casa-chip {
  display: inline-block; margin-left: 6px; padding: 1px 7px; border-radius: 999px;
  border: 1px solid var(--border, #252d3f); font-size: 12px; font-weight: 700;
  color: var(--text);
}

/* Lista de usados: concesionarios que se suman, y acciones en una línea */
.lu-casas {
  display: flex; gap: 9px; justify-content: center; align-items: center;
  flex-wrap: wrap; padding: 10px 20px 6px;
}
.lu-casa {
  display: inline-flex; align-items: center; gap: 7px;
  padding: 10px 20px; border-radius: 999px; cursor: pointer;
  border: 1px solid var(--border, #2C2F36);
  background: transparent; color: var(--text);
  font-weight: 700; font-size: 13px;
}
.lu-casa:hover { border-color: var(--vnv-marca-luz, var(--vnv-marca, var(--accent-amber))); color: var(--text, #c7cbd3); }
.lu-casa--on {
  background: var(--vnv-marca, var(--accent-amber));
  border-color: var(--vnv-marca-luz, var(--vnv-marca, var(--accent-amber)));
  color: var(--vnv-marca-txt, #171410);
}
.lu-casa-tilde {
  display: inline-grid; place-items: center;
  width: 15px; height: 15px; border-radius: 6px;
  border: 1px solid currentColor; font-size: 12px; line-height: 1;
}
.lu-casas-nota { font-size: 12px; color: var(--text); }

.lu-acciones {
  display: flex; gap: 10px; justify-content: center; align-items: center;
  flex-wrap: nowrap; padding: 6px 20px 16px;
}
.lu-acciones .lu-acc { padding: 12px 24px; font-size: 13.5px; }


.tnd-n {
  margin-left: 8px; padding: 1px 8px; border-radius: 999px;
  background: rgba(0,0,0,.22); font-size: 12px; font-weight: 700;
}

.lu-acc--vender {
  border-color: var(--green, #4caf6d); color: var(--text);
}
.lu-acc--vender:hover:not([disabled]) { background: var(--green, #4caf6d); color: #000; }

/* Fuera de alcance: apagado, no escondido. El día que se habilite a alguien
   es prender un permiso, no rehacer la pantalla. */
.ret-tilde--off, .lu-casa--off {
  opacity: 1; cursor: not-allowed; filter: grayscale(1);
}
.ret-tilde--off:hover, .lu-casa--off:hover { border-color: inherit; color: inherit; }

.sub-avisos { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 8px; grid-column: 1 / -1; }

/* Celdas de la Lista que abren un modal en vez de escribirse solas */
.lu-celda-modal {
  width: 100%; padding: 4px 8px; border-radius: 6px; cursor: pointer;
  border: 1px solid transparent; background: transparent;
  color: inherit; font-size: 13px; font-family: inherit; text-align: left;
}
.lu-celda-modal:hover { border-color: #57B6AC; background: var(--panel-2, #202940); }
.lu-celda-modal--vacia { color: var(--text); font-weight: 600; }

.vnb-ancho { grid-column: 1 / -1; }

/* Peritajes pendientes */
.per-tarde { color: #ff5d5d; font-weight: 700; }
.per-hechas { display: flex; flex-wrap: wrap; gap: 7px; }
.per-hecha {
  display: inline-flex; align-items: center; gap: 8px;
  padding: 5px 11px; border-radius: 999px; cursor: pointer;
  border: 1px solid var(--border, #252d3f);
  background: var(--panel-2, #202940); color: var(--text);
  font-size: 12px;
}
.per-hecha:hover { border-color: var(--accent-amber, #f2c200); color: inherit; }

/* Presupuesto de reparación dentro del peritaje */
.per-modo { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 10px; }
.per-renglon { display: flex; gap: 8px; align-items: center; margin-bottom: 7px; }
.per-renglon input:first-child { flex: 1 1 240px; }
.per-renglon input:nth-child(2) { width: 130px; text-align: right; }
.per-total {
  margin-top: 12px; padding-top: 10px; border-top: 1px solid var(--border, #252d3f);
  text-align: right; font-size: 14px;
}
.per-total b { font-size: 17px; margin-left: 8px; }
.per-campo--total input { font-size: 17px; text-align: right; }

.per-barra { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; margin-bottom: 8px; }
.per-buscar {
  flex: 1 1 220px; height: 30px; padding: 0 9px; font-size: 12.5px;
  border: 1px solid var(--border, #252d3f); border-radius: 6px;
  background: var(--panel-2, #202940); color: inherit;
}
/* Columna «Cuándo» de Peritajes hechos: todas las pastillas arrancan en el
   mismo lugar, lleven o no el agregado de «de un cliente». */
.per-col-momento { text-align: left !important; white-space: nowrap; }
.per-mom-chip { display: inline-block; min-width: 132px; text-align: center; }
.per-ajeno {
  margin-left: 6px; padding: 1px 7px; border-radius: 999px;
  border: 1px dashed var(--border, #252d3f); font-size: 12px;
  color: var(--text);
}

.per-vista {
  margin: 0; padding: 11px 13px; border-radius: 8px;
  background: var(--panel-2, #202940); border: 1px solid var(--border, #252d3f);
  font-size: 12px; line-height: 1.55; white-space: pre-wrap; word-break: break-word;
  max-height: 260px; overflow: auto; font-family: inherit;
}

/* Leads — no compra */
.lead-kpis { display: flex; gap: 10px; flex-wrap: wrap; margin-bottom: 6px; }
.lead-kpi {
  display: flex; flex-direction: column; gap: 2px;
  padding: 9px 15px; border-radius: 10px;
  border: 1px solid var(--border, #252d3f); background: var(--panel-2, #202940);
}
.lead-kpi span { font-size: 12px; color: var(--text); }
.lead-kpi b { font-size: 17px; }
.lead-kpi--dest { border-color: var(--green, #4caf6d); }
.lead-kpi--dest b { color: var(--text); }
.lead-tel { color: var(--text); text-decoration: none; }
.lead-tel:hover { text-decoration: underline; }
.lead-hist { margin: 0; padding-left: 18px; font-size: 12.5px; line-height: 1.7; }

/* Cambio de asignación */
.asig-acciones { display: flex; gap: 9px; flex-wrap: wrap; margin: 12px 0 4px; }
.asig-columnas { display: grid; grid-template-columns: 1.35fr 1fr; gap: 16px; }
.asig-lista { max-height: 420px; overflow: auto; }

/* ── Asignación / Desasignación ────────────────────────────────────────
   Los dos bloques, uno debajo del otro y a ancho completo. */
.asig-bloques { display: flex; flex-direction: column; gap: 18px; }
.asig-bloque { min-width: 0; }
.asig-bloque .asig-lista { max-height: 340px; }
/* La barra horizontal se ve siempre: con nueve columnas hay que desplazar, y
   una barra escondida no avisa que hay más a la derecha. */
.asig-bloque .vn-tabla-wrap { overflow-x: auto; overflow-y: auto; }
.asig-bloque .vn-tabla-wrap::-webkit-scrollbar { height: 10px; width: 10px; }
.asig-bloque .vn-tabla-wrap::-webkit-scrollbar-thumb {
  background: color-mix(in srgb, currentColor 28%, transparent); border-radius: 8px;
}
.asig-bloque .vn-tabla { min-width: max-content; }
.asig-sec-ayuda { margin-left: 10px; font-weight: 400; text-transform: none; letter-spacing: 0; }

/* El buscador estirado, en tres pantallas a la vez ─────────────────────
   «.per-buscar» trae «flex: 1 1 220px», pensado para vivir en una barra
   horizontal. Dentro de «.com-cuerpo», que es una COLUMNA, ese 220px es
   ALTO y el flex-grow lo estira todavía más: salía un cajón de 240px de
   alto en Asignación, en Enviar a reventas y en el contacto de un lead.
   Como hijo directo del cuerpo no crece ni encoge. */
.com-cuerpo > .per-buscar { flex: 0 0 auto; }
.asig-falta { color: var(--text); font-weight: 700; }


.asig-pedido {
  margin: 10px 0 4px; padding: 12px 14px; border-radius: 10px;
  border: 1px dashed var(--accent-amber, #f2c200);
  background: var(--panel-2, #202940);
}


.proc-embebido { display: block; }
.lead-kpi--rojo { border-color: #e0725f; }
.lead-kpi--rojo b { color: #e0725f; }

/* Comparativo con dos lados: período anterior y mismo período del año pasado */
.rv-comp-card--doble { border-left: 0 !important; }
.rv-comp-card--doble .rv-comp-label {
  font-size: 14px;
  margin-bottom: 9px;
}
/* Dos columnas, no tres: la grilla tenía una columna de 1px para el separador
   pero sólo hay dos tarjetas, así que la segunda caía en esa columna y salía
   apretada en una tira. El separador es el borde de la primera. */
.rv-comp-lados {
  display: grid; grid-template-columns: 1fr 1fr; gap: 12px; align-items: start;
}
.rv-comp-lado { min-width: 0; }
.rv-comp-lado .rv-comp-valor { white-space: nowrap; }
.rv-comp-lado:nth-child(1) { border-right: 1px solid var(--border, #252d3f); padding-right: 12px; }
.rv-comp-lado--sube .rv-comp-valor { color: var(--text); }
.rv-comp-lado--baja .rv-comp-valor { color: #e0725f; }
.rv-comp-lado--igual .rv-comp-valor { color: var(--text); }
.rv-comp-lado--neutro .rv-comp-valor { color: var(--text); font-size: 17px; }
.rv-comp-lado .rv-comp-periodo { margin: 2px 0 3px; }
.rv-comp-lado .rv-comp-detalle { margin: 0; }


.rv-comp-aviso {
  margin: 0 0 8px; font-size: 11.5px; color: var(--text);
}
.rv-comp-valor--dif { font-size: 20px; }

/* Dónde estoy parado en el menú: el ítem queda encendido y hundido, con el
   ícono en el color del concesionario. Antes, al abrir un modal, no quedaba
   ninguno marcado y no se sabía de dónde se había entrado. */
.gv-root .gv-side-item--on {
  background: rgba(255,255,255,.07);
  box-shadow: inset 2px 0 0 var(--vnv-marca, var(--accent-amber, #f2c200));
}



/* Formaciones */
.for-anio { display: grid; gap: 10px; grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); }
.for-mes {
  border: 1px solid var(--border, #252d3f); border-radius: 8px;
  padding: 8px 9px; background: var(--panel-2, #202940); min-height: 92px;
}
.for-mes-tit {
  font-size: 12px; font-weight: 700; letter-spacing: .09em; text-transform: uppercase;
  opacity: 1; margin-bottom: 6px; display: flex; justify-content: space-between;
}
.for-item {
  display: flex; align-items: baseline; gap: 7px; width: 100%;
  padding: 5px 7px; margin-bottom: 4px; border-radius: 6px; cursor: pointer;
  border: 0; border-left: 3px solid var(--txt-2, #9aa4b2);
  background: rgba(255,255,255,.04); color: inherit;
  font-size: 12px; font-family: inherit; text-align: left;
}
.for-item:hover { background: rgba(255,255,255,.09); }
.for-item b { font-size: 13px; min-width: 18px; }
.for-item span { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.for-item i { font-style: normal; font-size: 12px; opacity: 1; }
.for-item--planificada { border-left-color: var(--txt-2, #9aa4b2); }
.for-item--confirmada { border-left-color: var(--accent-amber, #f2c200); }
.for-item--realizada { border-left-color: var(--green, #4caf6d); }
.for-item--cancelada { border-left-color: #e0725f; opacity: 1; text-decoration: line-through; }
.for-vacio {
  width: 100%; padding: 6px; border: 1px dashed var(--border, #252d3f);
  border-radius: 6px; background: transparent; color: var(--text);
  font-size: 12px; cursor: pointer; font-family: inherit;
}
.for-vacio:hover { border-color: var(--accent-amber, #f2c200); color: inherit; }
.for-avisos { display: flex; flex-direction: column; gap: 7px; }
.for-aviso { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.for-barra {
  position: relative; height: 18px; border-radius: 999px;
  background: rgba(255,255,255,.07); overflow: hidden; min-width: 120px;
}
.for-barra span {
  position: absolute; left: 0; top: 0; bottom: 0;
  background: var(--green, #4caf6d); opacity: 1;
}
.for-barra b {
  position: relative; display: block; text-align: center;
  font-size: 12px; line-height: 18px;
}
.for-doc {
  display: grid; place-items: center; font-size: 30px;
  text-decoration: none; color: inherit; background: var(--panel-3, #10131a);
}

/* Las tarjetas terminan parejas: la última de cada columna se estira hasta
   el borde de abajo, así las tres columnas cierran a la misma altura. */
.vnv-cuerpo .vnv-col { display: flex; flex-direction: column; gap: 16px; }
.vnv-cuerpo .vnv-col > .vnb:last-child { flex: 1; }
.vnv-cuerpo .vnv-col > .vnb:last-child > .vnb-body { height: 100%; }

.bol-cuenta {
  display: inline-block; margin: 0 5px 0 10px; padding: 1px 8px;
  border-radius: 999px; background: rgba(255,255,255,.09);
  font-size: 12px; font-weight: 700;
}
.bol-cuenta--falta { background: var(--accent-amber, #f2c200); color: var(--vnv-marca-txt, #131824); }
.bol-mes { min-width: 130px; }

/* Menú de informes colgado del botón del grupo */
.gv-root .gv-menu-drop--informes { min-width: 268px; padding: 4px 0; }
/* BUG encontrado (las dos barras de desplazamiento): el submenú salía flotando
   al costado (position: absolute; left: 100%), pero vivía adentro del
   desplegable, que tiene "overflow-y: auto". Cuando un eje deja de ser
   "visible", el otro pasa a "auto" solo: por eso aparecía una barra
   horizontal en el desplegable —y encima recortaba el submenú, que se salía
   por la derecha—, más la barra propia del submenú. Dos barras, ninguna útil.
   El submenú ahora se abre hacia abajo, indentado, adentro del mismo panel
   —igual que los submenús de Tablas, que nunca dieron problema. Sin nada
   que sobresalga, no hay barra horizontal que mostrar. */
.gv-root .gv-inf-sub {
  margin: 2px 0 5px 9px; padding-left: 8px;
  border-left: 1px solid var(--border, #252d3f);
}
/* Raya al pie del grupo abierto: marca dónde terminan los subtemas y dónde
   vuelve a arrancar la lista principal. Sin ella, los subtemas indentados y
   los informes de abajo se leen como una sola tirada y hay que contar la
   sangría para saber dónde cortó. Va en la fila entera (no en el submenú,
   que está indentado) para que cruce todo el ancho del panel. */
.gv-root .gv-inf-fila:has(.gv-inf-sub) {
  border-bottom: 1px solid rgba(255,255,255,.16);
  padding-bottom: 6px; margin-bottom: 6px;
}
/* Cinturón y tiradores: aunque hoy no sobresalga nada, si mañana algo se pasa
   de ancho preferimos que baje de línea antes que volver a la barra. */
.gv-root .gv-menu-drop { overflow-x: hidden; }
/* Dónde estoy parado */
.gv-root .gv-menu-drop-item--aca {
  background: var(--vnv-marca, var(--accent-amber, #f2c200));
  color: var(--vnv-marca-txt, #131824);
  font-weight: 700;
}


/* ---- Modal de ventas: columnas parejas ---------------------------
   Las dos columnas crecían cada una según lo que tenía adentro, así que
   una terminaba mucho más abajo que la otra y quedaba un hueco largo.
   Ahora la última tarjeta de cada columna estira hasta el piso y las dos
   terminan a la misma altura. */
.vnv-cuerpo--2col { align-items: stretch; }
.vnv-cuerpo--2col > .vnv-col { min-height: 0; }
/* Las dos columnas cierran a la misma altura: el último elemento de cada una
   —la última tarjeta o la ficha de la unidad— se lleva el sobrante.
   La ficha de la unidad además se ACHICA si hace falta, porque lista muchos
   datos y si no la columna izquierda terminaba mucho más abajo. Se desplaza
   por dentro y nunca baja de un alto mínimo, así no desaparece como pasaba
   cuando se la dejaba encoger sin piso. */
.vnv-cuerpo--2col > .vnv-col > :last-child { flex: 1 1 auto; min-height: 0; }
.vnv-cuerpo--2col > .vnv-col > .vnv-unidad {
  display: flex; flex-direction: column; min-height: 150px;
}
.vnv-cuerpo--2col > .vnv-col > .vnv-unidad > .vnp-cuerpo {
  flex: 1 1 auto; min-height: 0; overflow-y: auto;
}

/* ---- Las dos columnas comparten los renglones -----------------------
   Emparejar tarjeta por tarjeta retocando alturas no funciona: cada una
   tiene distinta cantidad de campos y cualquier cambio lo desacomoda de
   nuevo. Lo que hace falta es que las dos columnas usen LAS MISMAS
   líneas de renglón, y de eso se encarga subgrid.
       renglón 1  Cliente            ↔  Importes
       renglón 2  Fechas y tipo      ↔  Forma de pago
       renglón 3  Unidad ────────────↔  Financiación
       renglón 4        │               Usado en parte de pago
       renglón 5        └───────────────Datos adicionales y comisiones
   La ficha de la unidad ocupa del renglón 3 al último: arranca con
   Financiación y cierra con Datos adicionales, y lo que no entre se
   desplaza por dentro.
   Si el navegador no soporta subgrid queda el apilado de arriba, que
   funciona igual aunque no empareje. */
@supports (grid-template-rows: subgrid) {
  .vnv-cuerpo--2col { grid-template-rows: repeat(5, auto); align-content: start; }
  .vnv-cuerpo--2col > .vnv-col {
    display: grid; grid-row: 1 / -1; grid-template-rows: subgrid;
    align-content: start;
  }
  /* OJO: nada de min-height:0 acá. Con eso los renglones se achicaban por
     debajo de lo que tenían adentro y las tarjetas quedaban cortadas: a
     Cliente le faltaba Vendedor 2 y a Importes, Bonificación. */
  .vnv-cuerpo--2col > .vnv-col > * { min-width: 0; }
  /* La ficha de la unidad, del tercer renglón hasta el final. Es la única que
     puede achicarse, y lo que no entra se desplaza por dentro. */
  .vnv-cuerpo--2col > .vnv-col:first-child > .vnv-unidad {
    grid-row: 3 / -1; min-height: 0; overflow: hidden;
  }
}

/* ============================================================
   Modales de compra: más cortos y con el teclado bien encaminado
   ============================================================ */
/* Demo · Prioritario · Invisible, en un solo renglón y sin leyenda debajo.
   Antes Invisible arrastraba dos líneas de texto y empujaba el pie fuera de
   la pantalla. */
.vn-checks--fila { flex-wrap: nowrap; align-items: center; gap: 22px; margin: 8px 0 2px; }
.vn-checks--fila .vn-check { white-space: nowrap; }

/* ============================================================
   Pie del modal de ventas: el lugar que no se mueve
   ------------------------------------------------------------
   El bloque de la derecha tiene ancho fijo y ordena sus botones desde la
   izquierda. Así el PRIMER botón cae siempre en el mismo punto, haya dos
   botones o cuatro: se confirma la venta y el clic siguiente, sin mover la
   mano, es el boleto. Alineado a la derecha no serviría: los botones se
   correrían según cuántos haya.
   ============================================================ */
.vnv-pie-acciones {
  display: flex; align-items: center; gap: 7px; flex-wrap: nowrap;
  flex: 0 0 auto; min-width: 372px; justify-content: flex-start;
}
/* El rótulo del medio es lo único elástico del renglón: se achica y recorta
   con puntos suspensivos antes que dejar que un botón baje de línea. */
.gv-root .gv-panel-proceso .vnv-pie-nota,
.vnv-pie > .vnv-pie-nota {
  flex: 1 1 40px; min-width: 0; overflow: hidden;
  text-overflow: ellipsis; white-space: nowrap;
}


/* ============================================================
   Modal de ventas: tamaño fijo, y el zoom escala el conjunto
   ------------------------------------------------------------
   El modal se dibuja siempre de 1010 × 812 y se achica entero con transform
   cuando no entra. Antes se estiraba con vw/vh y cruzaba los cortes de
   980 / 900 / 760px al cambiar el zoom: por eso al 75% se veía bien y al
   100% se cortaba la última tarjeta y la de unidad se movía sola.
   Las reglas van al final para ganarle por orden a las de más arriba.
   ============================================================ */
.vnv-modal.vnv-fijo,
.gv-root .gv-panel-proceso > .per-overlay > .per-modal.vnv-modal.vnv-fijo {
  width: 1278px !important; max-width: 1278px !important;
  height: 812px !important; max-height: 812px !important;
  transform-origin: top center;
  display: flex; flex-direction: column; overflow: hidden;
  flex: 0 0 auto;
  /* El escalado deja un margen inferior NEGATIVO —de hasta 300px— para que el
     layout no vea el hueco que sobra debajo del modal achicado. El efecto de
     lado es que lo que venga después sube y se monta sobre el PIE del modal,
     que es justo donde está el botón de cerrar: se ve, pero el clic se lo
     lleva lo que quedó encima. Con posición propia y z-index, manda el modal. */
  position: relative; z-index: 3;
}
/* Y el botón de salida, por encima de todo lo del propio pie. */
.vnv-pie-salir { position: relative; z-index: 4; flex: 0 0 auto; }
/* El overlay ancla arriba a la izquierda: con el escalado, centrar por flex
   deja el modal corrido, porque el navegador reserva el tamaño sin escalar. */
/* Se centra: el hueco que deja el escalado ya se descuenta con los márgenes
   negativos que pone useEscalaFija, así que la caja de maquetado mide lo mismo
   que lo que se ve y el centrado por flex vuelve a funcionar. Antes quedaba
   pegado arriba a la izquierda. */
.per-overlay:has(> .vnv-fijo) { align-items: center; justify-content: center; padding: 8px; }

/* Adentro nada se estira: el cuerpo reparte lo que hay y cada columna se
   desplaza sola si le sobra contenido. Así la tarjeta de unidad deja de
   crecer y encoger según lo que tenga al lado. */
.vnv-fijo > .vnv-cuerpo { flex: 1 1 auto; min-height: 0; overflow: hidden; }
.vnv-fijo .vnv-cuerpo--2col > .vnv-col { min-height: 0; overflow: auto; }
.vnv-fijo .vnv-unidad.pnl-existente { min-height: 0; }
/* Y el panel de unidad no cambia de alto al pasarle el mouse por encima. */
.vnv-fijo .vnv-unidad.pnl-existente:hover { padding: 0; border-width: 1px; }



/* ============================================================
   Un solo criterio de color para todas las pantallas internas
   ------------------------------------------------------------
   Antes cada pantalla resolvía su cabecera por su cuenta: unas con logo,
   otras sin él, unas con banda de color, otras grises. Ahora es siempre lo
   mismo, en las 54 cabeceras: la franja de arriba —la del logo y el título—
   va apenas teñida con el color del concesionario y cerrada por una línea
   sólida de ese color. La barra del buscador, que está justo abajo, queda
   neutra: si las dos llevaran color, ninguna de las dos diría nada.
   Se elige la de arriba y no la del buscador porque es la que contesta
   "¿dónde estoy?", que es lo que hay que ver al entrar.
   ============================================================ */
/* (El tinte suave de la franja quedó sin efecto: ahora la cabecera va plena.
   Las reglas viven más abajo, en el bloque del criterio único.) */
/* Los submodales que se abren encima (alta de cliente, carga rápida, motivo
   del rechazo) no repiten la banda: sería la tercera franja de color en la
   misma pantalla y ya no distinguiría nada. */
.per-overlay .per-overlay:not(.vnl-pantalla) .per-modal > .per-cab {
  background: transparent; border-bottom: 1px solid var(--border, #2C2F36);
}
.per-overlay .per-overlay:not(.vnl-pantalla) .per-modal > .per-cab .per-titulo { color: inherit; }

/* ============================================================
   Un solo criterio de color para cabecera y pie de TODO modal
   ------------------------------------------------------------
   Antes cada pantalla resolvía esto por su cuenta: algunas tenían la
   cabecera pintada y el pie no, otras al revés, otras ninguna. Visualmente
   quedaba desparejo. El criterio único es:
     · CABECERA: siempre plena con el color de la casa. El color va ATRAS
       del logo y del título, no sobre las letras.
     · PIE: por defecto un tinte fuerte del mismo color con línea sólida
       arriba, para que acompañe sin competir. Con el botón de la barra
       pasa a pleno, igual que la cabecera.
     · Los submodales que se abren encima no repiten ninguna de las dos.
     · El buscador NUNCA se pinta: es un campo donde se escribe y necesita
       fondo propio para leerse. Si cae adentro de la cabecera, se hunde.
   ============================================================ */
.per-modal > .per-cab {
  background: var(--vnv-marca, var(--accent-amber, #f2c200));
  border-bottom: none;
}
.per-modal > .per-cab .per-titulo,
.per-modal > .per-cab .per-sub,
.per-modal > .per-cab .per-titulo .per-dom { color: var(--vnv-marca-txt, #131824); }
.per-modal > .per-cab .per-sub { opacity: 1; }

.per-modal .per-pie {
  background: color-mix(in srgb, var(--vnv-marca, var(--accent-amber, #f2c200)) 26%, var(--bg, #131824));
  border-top: 2px solid var(--vnv-marca-luz, var(--vnv-marca, var(--accent-amber, #f2c200)));
  color: #ffffff;
}
.per-modal .per-pie .com-ayuda,
.per-modal .per-pie .vnv-nota,
.per-modal .per-pie small { color: #fff; }

/* El pie va pleno, igual que la cabecera. Se probó con un tinte atenuado y
   quedaba desparejo: un solo criterio para las dos franjas. */

.per-modal > .per-cab .lu-btn,
.per-modal > .per-pie .lu-btn {
  color: var(--vnv-marca-txt, #131824);
  border-color: color-mix(in srgb, var(--vnv-marca-txt, #131824) 45%, transparent);
}
.per-modal > .per-cab .lu-btn--accion,
.per-modal > .per-pie .lu-btn--accion {
  background: var(--vnv-marca-txt, #131824);
  color: var(--vnv-marca-luz, var(--vnv-marca, var(--accent-amber, #f2c200)));
  border-color: var(--vnv-marca-txt, #131824);
}

.per-modal > .per-cab .vnv-buscador input,
.per-modal > .per-cab input[type="text"],
.per-modal > .per-cab input[type="search"] {
  background: var(--bg, #131824);
  border: 1px solid rgba(0,0,0,.45);
  color: var(--text, #f0eee9);
}
.mo-claro .per-modal > .per-cab .vnv-buscador input,
.mo-claro .per-modal > .per-cab input[type="text"],
.mo-claro .per-modal > .per-cab input[type="search"] {
  background: #ffffff; border-color: rgba(0,0,0,.25); color: #000;
}

.per-overlay .per-overlay:not(.vnl-pantalla) .per-modal > .per-cab {
  background: transparent; color: inherit;
  border-bottom: 1px solid var(--border, #2C2F36);
}
.per-overlay .per-overlay:not(.vnl-pantalla) .per-modal .per-pie {
  background: transparent; color: inherit;
  border-top: 1px solid var(--border, #2C2F36);
}
.per-overlay .per-overlay:not(.vnl-pantalla) .per-modal > .per-cab .per-titulo,
.per-overlay .per-overlay:not(.vnl-pantalla) .per-modal > .per-cab .per-sub { color: inherit; }

/* (El bloque de tarjetas de la tanda anterior vivía acá. Usaba
   «.vista-cards > .vista-card», dos clases con hijo directo, y le ganaba por
   peso al bloque nuevo: por eso la tarjeta seguía midiendo 236 y el contenido
   seguía apilado. Se saca entero; la definición única está más abajo.) */

/* ============================================================
   Las tarjetas, todas iguales en todo el proyecto
   ------------------------------------------------------------
   Las de concesionario eran más chicas y de otro fondo que las de área, y en
   las pantallas de segunda línea salían distintas de las de la portada.
   Ahora hay una sola tarjeta:
     · el mismo tamaño, más grande que antes (268 × 148 contra 236 × 132),
     · el ícono o el logo SIEMPRE al costado, nunca apilado. Con el elemento
       al costado, el nombre arranca en el mismo punto en todas y la mirada
       baja en línea recta; apilado, cada título empezaba a distinta altura
       según cuántos renglones ocupara,
     · una escuadra de color arriba y a la derecha: azul del sistema en las
       de área, color de la casa en las de concesionario. Sin esa escuadra la
       tarjeta es un rectángulo gris más y no se lee como algo en lo que se
       puede entrar,
     · el concesionario no repite el nombre: el logo ya lo dice. Al lado va
       la marca, que es el dato que falta.
   El fondo es un azul noche con el brillo entrando en diagonal desde arriba
   a la izquierda. Se arma con blancos translúcidos sobre un degradé propio,
   así funciona igual sobre cualquiera de los temas.
   ============================================================ */
/* Tres por fila. Con el ancho libre entraban seis y la pantalla quedaba una
   tira horizontal larguísima: el ojo tiene que barrer de punta a punta y
   después volver. Con tres, las once tarjetas de un concesionario arman un
   bloque compacto que se lee de arriba abajo.
   El tope sale de la cuenta: 3 × 268 + 2 × 16 de separación. */
.vista-cards { display: flex; flex-wrap: wrap; flex-direction: row;
  justify-content: center; align-items: stretch; gap: 16px; margin-bottom: 18px;
  max-width: 880px; margin-left: auto; margin-right: auto; }

.vista-card {
  --c: var(--accent-blue, #4f8ef7);
  flex: 0 0 268px; max-width: 268px; min-height: 148px;
  padding: 20px 18px; border-radius: 16px;
  display: flex; flex-direction: row; align-items: center;
  justify-content: flex-start; text-align: left; gap: 15px;
  background:
    linear-gradient(135deg, rgba(255,255,255,.085) 0%, rgba(255,255,255,.022) 30%, rgba(255,255,255,0) 58%),
    /* Estaba fijo en var(--panel-2, #21262e): en modo claro las tarjetas quedaban oscuras
       sobre fondo blanco y no se leía ningún título. */
    var(--panel-2, #21262e);
  border: 1px solid var(--border, rgba(255,255,255,.085));
  border-top: 3px solid var(--c);
  border-right: 3px solid var(--c);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.09), inset 0 -14px 24px rgba(0,0,0,.20), 0 2px 6px rgba(0,0,0,.32);
  transition: transform .12s ease, filter .12s ease;
}
.vista-card:hover:not(:disabled) { transform: translateY(-1px); filter: brightness(1.07); }
.vista-card:disabled { opacity: .5; }
.vista-card.active {
  box-shadow: inset 0 1px 0 rgba(255,255,255,.09),
    0 0 0 2px color-mix(in srgb, var(--c) 35%, transparent);
}

.vista-card--giorgi  { --c: #f2c200; }
.vista-card--vesubio { --c: #0b4f96; }
.vista-card--ginza   { --c: #cf2126; }

/* El «min-width: 0» es lo que evita que el texto se salga de la tarjeta.
   Por defecto un hijo de flex no se achica más allá de su contenido, así que
   un título largo —«Informe de Ventas Concesionarios»— empujaba el bloque y
   se desbordaba por la derecha en vez de partirse en dos renglones. El
   overflow oculto del contenedor es la red de seguridad. */
.vista-card { overflow: hidden; }
.vista-card-body { display: flex; flex-direction: row; align-items: center; gap: 15px; text-align: left; flex: 1 1 auto; min-width: 0; }
.vista-card-body > * { min-width: 0; }
.vista-card-title { overflow-wrap: anywhere; }
.vista-card-icon { color: var(--c); flex-shrink: 0; }
.vista-card-title { font-family: inherit; font-size: 16px; font-weight: 600; color: var(--text); letter-spacing: 0; line-height: 1.25; }
.vista-card-sub { font-family: inherit; font-size: 12px; color: var(--text);
  text-transform: none; letter-spacing: 0; margin-top: 4px; }
.vista-card-badge { align-self: center; }

/* El logo va al costado, a la misma altura que el ícono de las de área, y la
   marca al lado. Sin alto propio por concesionario: las tres iguales. */
.vista-card-logo-wrap { display: flex; align-items: center; flex: 0 0 auto; padding: 0; }
.vista-card-logo-wrap img { height: 30px; width: auto; max-width: 120px; }
.vista-card--logo .vista-card-sub { margin-top: 0; letter-spacing: .06em; font-size: 12.5px; }

/* La pantalla de entrada tenía su propio juego de reglas: tres columnas
   fijas, alto distinto para los concesionarios y todo apilado en vertical.
   Ahora la tarjeta es una sola en todas las pantallas, así que ese bloque se
   neutraliza en vez de dejarlo compitiendo. */
@media (min-width: 860px) {
  /* «max-width: none» era para anular las tres columnas fijas de la regla
     vieja, pero de paso mataba el tope de tres por fila y entraban cinco o
     seis. El tope vuelve: 3 × 268 + 2 × 16 de separación. */
  .vista-cards--entrada {
    display: flex; grid-template-columns: none; gap: 16px;
    max-width: 880px; margin-left: auto; margin-right: auto;
  }
  .vista-cards--entrada .vista-card,
  .vista-cards--entrada.vista-cards--dealers .vista-card {
    min-height: 148px; padding: 20px 18px; align-items: center; text-align: left;
    justify-content: flex-start; gap: 15px;
  }
  /* El «flex: 0 0 auto» de la regla vieja le prohibía encogerse, y por eso el
     título largo salía de la tarjeta en vez de partirse en dos renglones. */
  .vista-cards--entrada .vista-card-body {
    flex-direction: row; align-items: center; justify-content: flex-start; gap: 15px;
    flex: 1 1 auto; min-width: 0;
  }
  .vista-cards--entrada .vista-card-icon { margin-top: 0; }
  .vista-cards--entrada .vista-card-title { margin-top: 0; }
  .vista-cards--entrada.vista-cards--dealers { max-width: 880px; }
}

/* El grupo de tarjetas se lee como un bloque, no como piezas sueltas
   flotando sobre el fondo: un recuadro tenue las envuelve. El recuadro se
   dibuja sobre el contenedor, así que crece con la cantidad de tarjetas y no
   hay que tocarlo cuando se agrega una. */
.vista-cards {
  padding: 18px; border-radius: 16px;
  border: 1px solid rgba(255,255,255,.06);
  background: rgba(255,255,255,.014);
}
/* Sin tarjetas no se dibuja el recuadro vacío. */
.vista-cards:empty { display: none; }



/* ============================================================
   La barra del buscador, adentro de la franja de color
   ------------------------------------------------------------
   La cápsula y las píldoras estaban pensadas para vivir sobre el panel
   oscuro: filo gris y letra gris claro. Al quedar sobre el color de la casa
   desaparecían — en Jorge Giorgi directamente no se leían, porque el
   amarillo es claro y la letra también.
   Además convivían dos amarillos: el de la marca (#f2c200) y el ámbar del
   sistema (#f2c200), que se colaba en el foco, en el hover y en las
   píldoras. Acá se usa uno solo: el de la casa.
   El filo es «la tinta de la franja», no un blanco fijo: en Ginza y Vesubio
   da blanco, y en Jorge Giorgi da negro, que es lo único que se lee sobre
   amarillo.
   ============================================================ */
.per-modal > .per-cab .vnvb-caja,
.vnv-fijo .vnvb-caja {
  border: 1px solid color-mix(in srgb, var(--vnv-marca-txt, #131824) 55%, transparent);
  color: var(--vnv-marca-txt, #131824);
}
.vnv-fijo .vnvb-caja:hover {
  border-color: color-mix(in srgb, var(--vnv-marca-txt, #131824) 80%, transparent);
}
.vnv-fijo .vnvb-caja:focus-within {
  border-color: var(--vnv-marca-txt, #131824);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--vnv-marca-txt, #131824) 22%, transparent);
}
.vnv-fijo .vnvb-caja .bap-input { color: var(--vnv-marca-txt, #131824); }
.vnv-fijo .vnvb-caja .bap-input::placeholder {
  color: color-mix(in srgb, var(--vnv-marca-txt, #131824) 62%, transparent);
}

/* Píldoras: filo de la tinta y letra de la tinta. Al pasar por encima se
   invierten, que es la única forma de que se note el cambio sin meter un
   tercer color. */
/* LA PASTILLA SE APOYA EN LA FRANJA DE COLOR DE LA CASA, NO EN EL PANEL.
   Por eso su tinta es «--vnv-marca-txt», que es justamente la tinta pensada
   para ir sobre el color pleno: blanca en Vesubio y Ginza, casi negra en
   Jorge Giorgi.
   OJO CON ESTO. En la versión «bv» yo lo cambié a «var(--text)» creyendo que
   la pastilla se apoyaba en el panel. Lo había medido, pero en una página de
   prueba armada a mano donde la franja no tenía fondo, así que la medición
   decía cualquier cosa. El resultado en la aplicación real fue el contrario
   del buscado: en modo claro «--text» es oscuro y quedaba oscuro sobre azul
   en Vesubio y Ginza, y en modo oscuro es casi blanco y quedaba blanco sobre
   amarillo en Jorge Giorgi. Ramiro lo reportó con fotos de las dos cosas.
   Si hay que volver a tocar esto, medir sobre la franja pintada. */
.vnv-fijo .vnvb-pill,
.vnv-fijo .vnvb-pill--doble > button {
  background: transparent;
  border: 1px solid color-mix(in srgb, var(--vnv-marca-txt, #131824) 55%, transparent);
  color: var(--vnv-marca-txt, #131824);
}
/* Al pasar el mouse se rellenaban con la tinta entera: en Jorge Giorgi eso
   es casi negro y quedaba un bloque oscuro sobre el amarillo, más pesado que
   el resto de la barra. Ahora el relleno es un velo de esa misma tinta —se
   nota el cambio sin tapar nada— y lo que marca el foco es el filo, que pasa
   a pleno. Vale para las tres casas, así el gesto es el mismo en todas. */
.vnv-fijo .vnvb-pill:hover,
.vnv-fijo .vnvb-pill--doble > button:hover {
  background: color-mix(in srgb, var(--vnv-marca-txt, #131824) 16%, transparent);
  color: var(--vnv-marca-txt, #131824);
  border-color: var(--vnv-marca-txt, #131824);
}
.vnv-fijo .vnvb-acciones .mo-tema:hover {
  background: color-mix(in srgb, var(--vnv-marca-txt, #131824) 16%, transparent);
  color: var(--vnv-marca-txt, #131824);
}
.vnv-fijo .vnvb-pill--doble { border: 1px solid color-mix(in srgb, var(--vnv-marca-txt, #131824) 55%, transparent); }
.vnv-fijo .vnvb-pill--doble > button { border: 0; }
.vnv-fijo .vnvb-pill--doble > button + button {
  border-left: 1px solid color-mix(in srgb, var(--vnv-marca-txt, #131824) 45%, transparent);
}
/* La consulta activa queda rellena, como en Vesubio. */
/* La encendida sí se rellena con el color de la casa, y la tinta es la que
   corresponde a ese color pleno: para eso existe «--vnvb-sobre-marca». */
.vnv-fijo .vnvb-pill--soltar,
.vnv-fijo .vnvb-pill.activa {
  background: var(--vnv-marca, #6c7684);
  color: var(--vnvb-sobre-marca, #ffffff);
  border-color: var(--vnv-marca, #6c7684);
}

/* No hay reglas de «mo-claro» para estas pastillas a propósito: la franja es
   del color de la casa en los DOS modos, así que la tinta correcta es la de
   la franja y no la del tema. Acá hubo un bloque que las pintaba de gris
   claro con letra oscura y rompía Jorge Giorgi. */
.vnv-fijo .vnvb-acciones .mo-tema {
  background: transparent; color: var(--vnv-marca-txt, #131824);
  border: 1px solid color-mix(in srgb, var(--vnv-marca-txt, #131824) 55%, transparent);
}

/* Un solo amarillo adentro del modal: el ámbar del sistema deja de asomar. */
.vnv-fijo .vnb-cab { background: var(--vnv-marca, var(--accent-amber, #f2c200)); }
.vnv-fijo .vnb-cab h4 { color: var(--vnv-marca-txt, #131824); }
.vnv-fijo .vnb { border-left-color: var(--vnv-marca, var(--accent-amber, #f2c200)); }

/* ============================================================
   Que el color de la franja no se tape con el color del texto
   ------------------------------------------------------------
   El título salía invisible: hay reglas anteriores que lo pintan con
   var(--accent-amber), y adentro de Gestión de Ventas ese ámbar se
   reemplaza por el color de la casa. O sea, letra del color de la casa
   sobre franja del color de la casa. En Ginza se veía rojo oscuro sobre
   rojo, y en Jorge Giorgi directamente no se veía.
   No alcanza con escribirlo de nuevo: esas reglas tienen cinco clases y
   ganan por especificidad. Hay que repetir la cadena entera.
   Lo mismo con el pie, que se quedaba con el fondo del panel.
   ============================================================ */
.per-modal .per-titulo,
.per-modal > .per-cab .per-titulo,
.gv-root .gv-panel-proceso > .per-overlay > .per-modal > .per-cab .per-titulo,
.gv-root .gv-panel .per-modal > .per-cab .per-titulo {
  color: var(--vnv-marca-txt, #131824);
}
.per-modal > .per-cab .per-titulo .per-dom,
.gv-root .gv-panel-proceso > .per-overlay > .per-modal > .per-cab .per-titulo .per-dom {
  color: var(--vnv-marca-txt, #131824); opacity: .8;
}
.gv-root .gv-panel-proceso > .per-overlay > .per-modal > .per-cab {
  background: var(--vnv-marca, var(--accent-amber, #f2c200));
  border-bottom: none;
}
.gv-root .gv-panel-proceso > .per-overlay > .per-modal .per-pie {
  background: var(--vnv-marca, var(--accent-amber, #f2c200));
  border-top: none;
  color: var(--vnv-marca-txt, #131824);
}
.gv-root .gv-panel-proceso > .per-overlay > .per-modal > .per-pie .lu-btn {
  color: var(--vnv-marca-txt, #131824);
  border-color: color-mix(in srgb, var(--vnv-marca-txt, #131824) 45%, transparent);
}
.gv-root .gv-panel-proceso > .per-overlay > .per-modal > .per-pie .lu-btn--accion {
  background: var(--vnv-marca-txt, #131824);
  color: var(--vnv-marca, var(--accent-amber, #f2c200));
  border-color: var(--vnv-marca-txt, #131824);
}

/* ============================================================
   Menú lateral
   ------------------------------------------------------------
   Va fijo a la izquierda y la aplicación se corre para dejarle lugar. En vez
   de tocar cada pantalla, se empuja el contenido del shell con un padding.
   Cuando Gestión de Ventas está abierta, el menú se pliega a un rail de
   íconos: el módulo tiene su propio menú y no entran los dos. El rail no
   desaparece —salir tiene que estar siempre a mano— y con el ☰ se despliega
   ENCIMA del contenido, no empujándolo, para que el módulo no se reacomode
   entero cada vez que se abre.
   ============================================================ */
:root { --ml-ancho: 196px; --ml-rail: 52px; }
/* Gestión de Ventas primero y separada: no es un área más. */
.ml-item--gv .ml-ico { color: var(--text); }
/* El logo pasa de 22 a 46px: era casi ilegible y es lo primero que se mira. */
.ml-marca { height: 46px; width: auto; max-width: 100%; object-fit: contain; }

/* Los concesionarios con el logo en miniatura, sin punto de color. */
.ml-casa-logo { height: 15px; width: auto; max-width: 108px; object-fit: contain; }

/* Los tres niveles. La sangría es lo único que los distingue: un color o un
   filo por nivel serían tres señales para decir lo mismo. */
.ml-grupo { display: flex; flex-direction: column; }
/* El punto lleva el color de la casa: es lo que se sigue viendo cuando el
   menú está plegado a rail y el nombre desaparece. */
.ml-punto {
  width: 10px; height: 10px; border-radius: 50%; flex: 0 0 auto;
  background: var(--casa, #6c7684);
  box-shadow: 0 0 0 2px color-mix(in srgb, var(--casa, #6c7684) 28%, transparent);
}
/* El menú lateral viejo repetía los tres colores a mano. Son los mismos de
   CASA_COLORES; se dejan apuntando a las variables del tema para que cambiar
   un color de casa siga siendo tocar UN solo lugar. */
.ml-casa--giorgi  { --casa: var(--tcg-casa-giorgi, #f2c200); }

/* El contenido se corre para no quedar debajo del menú. */
.app-shell { padding-left: calc(var(--ml-ancho) + 18px); }
/* El módulo reservaba siempre 52px (el riel plegado), pero con el menú
   abierto son 196px: por eso la barra de Volver / Datos / Tablas quedaba
   tapada. Ahora el hueco acompaña el estado del menú. */
.app-shell--modulo { padding-left: var(--ml-rail) !important; }
/* Si el menú se abre ENCIMA (plegado y desplegado a mano), no se corre nada:
   flota sobre el contenido y se cierra solo al elegir. */
.app-shell--modulo:has(.ml-root--encima) { padding-left: var(--ml-rail) !important; }


@media print {
  .app-shell { padding-left: 0 !important; } }

/* El aviso de guardado caído. Va abajo a la izquierda, del lado opuesto a la
   pastilla de versión, y por encima de todo: si no se guarda, es lo más
   importante que hay en pantalla. */
.aviso-guardado {
  /* Sin esto el cartel se come los clics del rincón de abajo a la izquierda,
     que ahora es donde va «Nueva compra». Sólo la cruz de cerrar recibe. */
  pointer-events: none;
  position: fixed; left: 14px; bottom: 14px; z-index: 9999;
  display: flex; align-items: flex-start; gap: 10px; max-width: 380px;
  background: var(--panel-2, #3a1113); border: 1px solid var(--red, #e2574c); border-left: 4px solid var(--red, #e2574c);
  color: #fff; border-radius: 10px; padding: 11px 12px;
  font-size: 12.5px; line-height: 1.45;
  box-shadow: 0 6px 20px rgba(0,0,0,.5);
}
.aviso-guardado b { color: #fff; }
.aviso-guardado-punto {
  width: 9px; height: 9px; border-radius: 50%; background: var(--red, #e2574c); flex: 0 0 auto;
  margin-top: 4px; animation: aviso-late 1.6s ease-in-out infinite;
}
@keyframes aviso-late { 0%,100% { opacity: 1; } 50% { opacity: .35; } }
.aviso-guardado-det { color: var(--text); font-size: 12px; margin-top: 3px; }
.aviso-guardado-x {
  pointer-events: auto;
  background: none; border: 0; color: var(--text); font-size: 17px; line-height: 1;
  cursor: pointer; padding: 0 2px; margin-left: auto;
}
.aviso-guardado-x:hover { color: #fff; }
@media print { .aviso-guardado { display: none; } }

/* «res-pie-datos» y «pre-acciones» llevan «pie» o «acciones» en el nombre
   pero están en el MEDIO de su pantalla: son un panel de datos de Reserva y
   una fila de botones del cuerpo de Preentrega, no la franja de abajo. Se
   dejan neutras a propósito, y la prueba que recorre las pantallas avisa si
   alguna vuelve a pintarse. */
.per-modal .res-pie-datos,
.per-modal .pre-acciones { background: transparent; }

/* ============================================================
   Lista de Usados: barra de trabajo en vez de portada
   ------------------------------------------------------------
   Era la única pantalla que se presentaba como portada: título centrado
   grande, bajada debajo, y los botones sueltos flotando en el medio. Con
   nueve elementos en tres alturas distintas, encontrar «Vender usado»
   costaba más que en cualquier otra pantalla.
   Ahora es una barra de trabajo como el resto: franja arriba con el título,
   los concesionarios y las acciones en un renglón, y la tabla enseguida.
   ============================================================ */
.lu-modulo {
  max-width: 1600px; margin: 0 auto;
  border: 1px solid color-mix(in srgb, var(--vnv-marca, var(--accent-amber, #f2c200)) 58%, transparent);
  border-radius: 12px; overflow: hidden;
}
.lu-modulo .lu-cab { align-items: flex-start; }
.lu-cab-der { margin-left: auto; display: flex; align-items: center; gap: 8px; }
/* El Excel es temporal: chico, arriba y separado de las acciones de abajo,
   para que no se confunda con el trabajo de todos los días. */
.lu-excel-chico {
  display: inline-flex; align-items: center; gap: 5px; cursor: pointer;
  font-size: 12px; font-weight: 600; border-radius: 6px; padding: 4px 10px;
  color: var(--vnv-marca-txt, #131824);
  border: 1px solid color-mix(in srgb, var(--vnv-marca-txt, #131824) 50%, transparent);
  background: transparent;
}
.lu-excel-chico:hover { background: color-mix(in srgb, var(--vnv-marca-txt, #131824) 16%, transparent); }
.lu-aviso-carga { margin: 8px 14px 0; font-size: 12px; color: var(--text); }

/* Concesionarios y acciones en un solo renglón. */
.lu-modulo .lu-casas { padding: 10px 14px 0; justify-content: flex-start; }
.lu-modulo .lu-acciones {
  display: flex; flex-wrap: wrap; align-items: center; gap: 8px;
  padding: 10px 14px 12px; justify-content: flex-start;
}
.lu-modulo .lu-guardado { margin-left: auto; }

/* ============================================================
   Informes: el mismo encuadre y las mismas franjas que el resto
   ------------------------------------------------------------
   Los informes se montan por su cuenta, con CSS propio, y por eso quedaron
   afuera de todo lo que hicimos: sin recuadro, sin color arriba y sin color
   abajo. No tienen «per-cab» ni «per-pie», pero sí dos bloques que cumplen
   esa función: el renglón con el nombre del informe y sus subtemas, y el pie
   con los totales. Se les da el mismo tratamiento.
   ============================================================ */
.gv-root .inf-root {
  max-width: 1600px; margin: 0 auto;
  border: 1px solid color-mix(in srgb, var(--vnv-marca, var(--accent-amber, #f2c200)) 58%, transparent);
  border-radius: 12px; overflow: hidden;
}
/* El renglón del nombre del informe hace de franja de arriba.
   Alto FIJO: sin esto la franja crece o se achica según cuántos subtemas
   tenga cada informe —Stock tiene catorce, otros dos— y todo lo de abajo se
   corre de lugar al cambiar de informe. El usuario pierde de vista dónde
   estaban los botones. Con el alto clavado, los subtemas se acomodan adentro
   y la pantalla de abajo no se mueve nunca.
   El alto son dos renglones de botones: es lo que necesita el informe con
   más subtemas. Si algún día hace falta un tercero, se cambia acá y en un
   solo lado. */
.gv-root .inf-root .inf-filtros--subtemas {
  background: var(--vnv-marca, var(--accent-amber, #f2c200));
  color: var(--vnv-marca-txt, #131824);
  border-radius: 0; padding: 8px 12px; margin: 0;
  min-height: var(--inf-alto-subtemas, 78px);
  align-content: flex-start;
  overflow: auto;
}
.gv-root .inf-root .inf-filtros--subtemas .inf-donde-fila {
  color: var(--vnv-marca-txt, #131824); font-weight: 700; font-size: 13.5px;
}
.gv-root .inf-root .inf-filtros--subtemas button {
  color: var(--vnv-marca-txt, #131824);
  border-color: color-mix(in srgb, var(--vnv-marca-txt, #131824) 55%, transparent);
  background: transparent;
}
.gv-root .inf-root .inf-filtros--subtemas button:hover {
  background: color-mix(in srgb, var(--vnv-marca-txt, #131824) 16%, transparent);
  border-color: var(--vnv-marca-txt, #131824);
}
.gv-root .inf-root .inf-filtros--subtemas button.active,
.gv-root .inf-root .inf-filtros--subtemas .inf-vista--on {
  background: var(--vnv-marca-txt, #131824);
  color: var(--vnv-marca, var(--accent-amber, #f2c200));
  border-color: var(--vnv-marca-txt, #131824);
}
/* Y el pie de totales hace de franja de abajo. */
.gv-root .inf-root .inf-pie {
  background: var(--vnv-marca, var(--accent-amber, #f2c200));
  color: var(--vnv-marca-txt, #131824);
  border-top: none; padding: 8px 12px;
}
.gv-root .inf-root .inf-pie *:not(input):not(select):not(textarea) { color: inherit; }
.gv-root .inf-root .inf-pie .inf-btn {
  background: transparent;
  border: 1px solid color-mix(in srgb, var(--vnv-marca-txt, #131824) 55%, transparent);
}
/* El renglón del buscador queda neutro: es donde se escribe. */
.gv-root .inf-root .inf-filtros--acciones { background: transparent; }

/* ============================================================
   Encuadre de módulo: ninguna pantalla de punta a punta
   ------------------------------------------------------------
   Peritajes se veía mejor que Entregas y la diferencia no era el ancho: era
   que estaba metida en una caja con borde y aire alrededor. Las que ocupaban
   toda la ventana parecían dos franjas sueltas y no una pantalla.
   Una sola regla para todas: tope de ancho, centrado, borde y esquinas.
   La excepción son las de tabla. Registro de Ventas, Stock o Asignación
   tienen quince o veinte columnas, y con el tope de formulario quedarían con
   barra horizontal permanente. Se las detecta con :has(table) y se les da un
   tope más grande; siguen leyéndose como módulo porque lo que lo define es el
   borde y el aire, no el ancho.
   ============================================================ */
.gv-root .gv-panel-proceso > .per-overlay { padding: 14px 16px 18px; }
.gv-root .gv-panel-proceso > .per-overlay > .per-modal {
  max-width: var(--ancho-modulo, 1180px);
  /* El filo gris no se veía contra el fondo negro: el módulo parecía flotar
     sin bordes. Se pinta del color de la casa, fino, para que envuelva el
     modal y se entienda dónde empieza y dónde termina. */
  border: 1px solid color-mix(in srgb, var(--vnv-marca, var(--accent-amber, #f2c200)) 58%, transparent);
  border-radius: 12px;
  overflow: hidden;
}
/* Las de tabla respiran. */
.gv-root .gv-panel-proceso > .per-overlay > .per-modal:has(table) {
  --ancho-modulo: 1600px;
}
/* El modal de ventas ya tiene su propio tamaño de diseño y se escala: no
   entra en esta regla. */
.gv-root .gv-panel-proceso > .per-overlay > .per-modal.vnv-fijo {
  max-width: 1278px !important;
}

/* ============================================================
   Modal de ventas: que se lea
   ------------------------------------------------------------
   El modo compacto había bajado la letra hasta 8,5–10,5px para que entrara
   todo en los 812px de alto que tenía clavados. Ya no hace falta: el alto lo
   pone el contenido y el bloque se escala entero. Con la letra chica y
   además escalada al 86%, los rótulos quedaban en 9px reales.
   Los títulos de las tarjetas eran lo peor: 9,5px en mayúsculas y con
   interletrado, casi ilegibles. Suben a 13 y en negrita.
   ============================================================ */
.vnv-fijo .vnb-cab { padding: 7px 12px; }
.vnv-fijo .vnb-cab h4 { font-size: 16.5px; font-weight: 700; letter-spacing: .03em; }
.vnv-fijo .vnb-body { padding: 10px 12px; gap: 7px; }
.vnv-fijo .vnb .per-campo { grid-template-columns: 158px 1fr; gap: 10px; }
.vnv-fijo .vnb .per-campo > span { font-size: 16px; }
.vnv-fijo .vnb .per-campo > input,
.vnv-fijo .vnb .per-campo > select,
.vnv-fijo .vnb .cat-disparador,
.vnv-fijo .vnv-mesanio input { min-height: 34px; padding: 5px 10px; font-size: 17px; }
.vnv-fijo .per-campo--calc strong { min-height: 34px; padding: 5px 10px; font-size: 17.5px; }
.vnv-fijo .vnb .com-ayuda { font-size: 13.5px; }
.vnv-fijo .per-titulo { font-size: 19px; }

/* El panel de la unidad, que es media pantalla, también estaba en letra
   de 8,5 y 9px. */
.vnv-fijo .vnp-cab { padding: 7px 12px; font-size: 15px; }
.vnv-fijo .vnp-grupo h5 { font-size: 14.5px; letter-spacing: .03em; padding: 7px 0 4px; }
.vnv-fijo .vnp-lista > div { min-height: 24px; }
.vnv-fijo .vnp-lista dt { font-size: 14.5px; }
.vnv-fijo .vnp-lista dd { font-size: 16px; }
.vnv-fijo .vnp-sindato { font-size: 14.5px; }
.vnv-fijo .vnp-hero strong { font-size: 17px; }
.vnv-fijo .vnp-hero p { font-size: 15px; }

/* ============================================================
   Todo lo que va sobre la franja usa la tinta de la casa
   ------------------------------------------------------------
   Quedaban textos en blanco sobre el amarillo de Jorge Giorgi: la nota del
   pie, la ayuda, los rótulos. Cada uno tenía su color propio puesto a mano.
   En vez de perseguirlos uno por uno, la franja fija el color y todo lo de
   adentro lo hereda. Lo único que se exceptúa son los campos, que tienen
   fondo propio.
   ============================================================ */
.per-modal > .per-cab,
.per-modal .per-pie,
.gv-root .gv-panel-proceso > .per-overlay > .per-modal > .per-cab,
.gv-root .gv-panel-proceso > .per-overlay > .per-modal .per-pie {
  color: var(--vnv-marca-txt, #131824);
}
.per-modal > .per-cab *:not(input):not(select):not(textarea):not(.bap-lista):not(.bap-lista *),
.per-modal .per-pie *:not(input):not(select):not(textarea),
.gv-root .gv-panel-proceso > .per-overlay > .per-modal > .per-cab *:not(input):not(select):not(textarea):not(.bap-lista):not(.bap-lista *),
.gv-root .gv-panel-proceso > .per-overlay > .per-modal > .per-pie *:not(input):not(select):not(textarea) {
  color: inherit;
}
/* La nota de ayuda se distingue por opacidad, no por otro color. */
.per-modal .per-pie .vnv-pie-nota,
.per-modal .per-pie .com-ayuda,
.per-modal > .per-cab .per-sub { opacity: 1; }

/* Los botones del pie: filo de la tinta, y el principal relleno. Antes se
   perdían contra la franja porque conservaban el filo gris del panel. */
.per-modal .per-pie .lu-btn,
.gv-root .gv-panel-proceso > .per-overlay > .per-modal > .per-pie .lu-btn {
  background: transparent;
  border: 1px solid color-mix(in srgb, var(--vnv-marca-txt, #131824) 60%, transparent);
}
.per-modal .per-pie .lu-btn:hover:not(:disabled),
.gv-root .gv-panel-proceso > .per-overlay > .per-modal > .per-pie .lu-btn:hover:not(:disabled) {
  background: color-mix(in srgb, var(--vnv-marca-txt, #131824) 14%, transparent);
  border-color: var(--vnv-marca-txt, #131824);
}
.per-modal .per-pie .lu-btn--accion,
.gv-root .gv-panel-proceso > .per-overlay > .per-modal > .per-pie .lu-btn--accion {
  background: var(--vnv-marca-txt, #131824) !important;
  color: var(--vnv-marca, var(--accent-amber, #f2c200)) !important;
  border-color: var(--vnv-marca-txt, #131824);
  font-weight: 700;
}
/* «Cargar venta» arranca deshabilitado hasta que se elige la unidad, y salía
   apagado como si estuviera roto. Se lo deja con el mismo aspecto que
   habilitado —es el destino del recorrido y tiene que verse— pero sigue sin
   responder al clic: sólo cambia el cursor. */
.per-modal .per-pie .lu-btn--accion:disabled,
.gv-root .gv-panel-proceso > .per-overlay > .per-modal > .per-pie .lu-btn--accion:disabled {
  opacity: 1; cursor: not-allowed;
}

/* ============================================================
   La franja de abajo, para TODAS las pantallas
   ------------------------------------------------------------
   Veníamos agregando clases de a una cada vez que aparecía una pantalla sin
   color abajo, y siempre faltaba otra. Inventarié el archivo entero buscando
   clases con «pie», «footer» o «acciones»: hay setenta. Estas son las que
   hacen de franja de abajo de una pantalla — el resto son barras internas de
   tabla o filas de botones dentro del cuerpo, que NO se pintan.
   Están todas acá, en un solo lugar. Cuando aparezca una nueva, se agrega a
   esta lista y no en una regla aparte.
   ============================================================ */
.per-modal .per-pie,
.per-modal .cvn-pie,
.per-modal .vnv-pie,
.per-modal .mig-pie,
.per-modal .sch-pie,
.per-modal .ret-pie,
.per-modal .acc-pie,
.per-modal .enc-pie,
.per-modal .pd-pie,
.per-modal .sd-pie,
.per-modal .sd-modal-pie,
.per-modal .bp-modal-pie,
.per-modal .inf-pie,
.per-modal .lu-informe-pie,
.per-modal .lu-pie,
.per-modal .bt-pie,
.per-modal .rv-footer,
.per-modal .pat-footer,
.per-modal .pda-footer,
.per-modal .sc-modal-footer,
.per-modal .am-tabla-pie,
.per-modal .asg-fila-botones-pie,
.per-modal .asg-form-acciones,
.per-modal .sch-modal-acciones,
.per-modal .vna-pie-btns {
  background: var(--vnv-marca, var(--accent-amber, #f2c200));
  border-top: none;
  color: var(--vnv-marca-txt, #131824);
}
.per-modal .per-pie *:not(input):not(select):not(textarea),
.per-modal .cvn-pie *:not(input):not(select):not(textarea),
.per-modal .vnv-pie *:not(input):not(select):not(textarea),
.per-modal .mig-pie *:not(input):not(select):not(textarea),
.per-modal .sch-pie *:not(input):not(select):not(textarea),
.per-modal .ret-pie *:not(input):not(select):not(textarea),
.per-modal .acc-pie *:not(input):not(select):not(textarea),
.per-modal .enc-pie *:not(input):not(select):not(textarea),
.per-modal .pd-pie *:not(input):not(select):not(textarea),
.per-modal .sd-pie *:not(input):not(select):not(textarea),
.per-modal .sd-modal-pie *:not(input):not(select):not(textarea),
.per-modal .bp-modal-pie *:not(input):not(select):not(textarea),
.per-modal .inf-pie *:not(input):not(select):not(textarea),
.per-modal .lu-informe-pie *:not(input):not(select):not(textarea),
.per-modal .lu-pie *:not(input):not(select):not(textarea),
.per-modal .bt-pie *:not(input):not(select):not(textarea),
.per-modal .rv-footer *:not(input):not(select):not(textarea),
.per-modal .pat-footer *:not(input):not(select):not(textarea),
.per-modal .pda-footer *:not(input):not(select):not(textarea),
.per-modal .sc-modal-footer *:not(input):not(select):not(textarea),
.per-modal .am-tabla-pie *:not(input):not(select):not(textarea),
.per-modal .asg-fila-botones-pie *:not(input):not(select):not(textarea),
.per-modal .asg-form-acciones *:not(input):not(select):not(textarea),
.per-modal .sch-modal-acciones *:not(input):not(select):not(textarea),
.per-modal .vna-pie-btns *:not(input):not(select):not(textarea) { color: inherit; }
.per-modal .per-pie .lu-btn,
.per-modal .cvn-pie .lu-btn,
.per-modal .vnv-pie .lu-btn,
.per-modal .mig-pie .lu-btn,
.per-modal .sch-pie .lu-btn,
.per-modal .ret-pie .lu-btn,
.per-modal .acc-pie .lu-btn,
.per-modal .enc-pie .lu-btn,
.per-modal .pd-pie .lu-btn,
.per-modal .sd-pie .lu-btn,
.per-modal .sd-modal-pie .lu-btn,
.per-modal .bp-modal-pie .lu-btn,
.per-modal .inf-pie .lu-btn,
.per-modal .lu-informe-pie .lu-btn,
.per-modal .lu-pie .lu-btn,
.per-modal .bt-pie .lu-btn,
.per-modal .rv-footer .lu-btn,
.per-modal .pat-footer .lu-btn,
.per-modal .pda-footer .lu-btn,
.per-modal .sc-modal-footer .lu-btn,
.per-modal .am-tabla-pie .lu-btn,
.per-modal .asg-fila-botones-pie .lu-btn,
.per-modal .asg-form-acciones .lu-btn,
.per-modal .sch-modal-acciones .lu-btn,
.per-modal .vna-pie-btns .lu-btn {
  background: transparent;
  border: 1px solid color-mix(in srgb, var(--vnv-marca-txt, #131824) 60%, transparent);
}
.per-modal .per-pie .lu-btn--accion,
.per-modal .cvn-pie .lu-btn--accion,
.per-modal .vnv-pie .lu-btn--accion,
.per-modal .mig-pie .lu-btn--accion,
.per-modal .sch-pie .lu-btn--accion,
.per-modal .ret-pie .lu-btn--accion,
.per-modal .acc-pie .lu-btn--accion,
.per-modal .enc-pie .lu-btn--accion,
.per-modal .pd-pie .lu-btn--accion,
.per-modal .sd-pie .lu-btn--accion,
.per-modal .sd-modal-pie .lu-btn--accion,
.per-modal .bp-modal-pie .lu-btn--accion,
.per-modal .inf-pie .lu-btn--accion,
.per-modal .lu-informe-pie .lu-btn--accion,
.per-modal .lu-pie .lu-btn--accion,
.per-modal .bt-pie .lu-btn--accion,
.per-modal .rv-footer .lu-btn--accion,
.per-modal .pat-footer .lu-btn--accion,
.per-modal .pda-footer .lu-btn--accion,
.per-modal .sc-modal-footer .lu-btn--accion,
.per-modal .am-tabla-pie .lu-btn--accion,
.per-modal .asg-fila-botones-pie .lu-btn--accion,
.per-modal .asg-form-acciones .lu-btn--accion,
.per-modal .sch-modal-acciones .lu-btn--accion,
.per-modal .vna-pie-btns .lu-btn--accion {
  background: var(--vnv-marca-txt, #131824) !important;
  color: var(--vnv-marca, var(--accent-amber, #f2c200)) !important;
  border-color: var(--vnv-marca-txt, #131824);
}
/* Gestoría de usados mete adentro un proceso «embebido» —Transferencias,
   Bajas— que es una pantalla entera metida como solapa. Ese proceso trae su
   propio pie, y la regla de la franja lo pintaba: quedaba una banda de color
   en el MEDIO de la pantalla, y encima el recuadro parecía envolver la tabla
   en vez del modal. El pie de un proceso embebido no es la franja de abajo
   del módulo: es una fila de acciones más, y va neutra. */
.proc-embebido .per-pie,
.proc-embebido .vnv-pie,
.proc-embebido .cvn-pie {
  background: transparent;
  color: inherit;
  border-top: 1px solid var(--border, #2C2F36);
}
.proc-embebido .per-pie *:not(input):not(select):not(textarea),
.proc-embebido .vnv-pie *:not(input):not(select):not(textarea) { color: inherit; }
.proc-embebido .per-pie .lu-btn,
.proc-embebido .vnv-pie .lu-btn {
  border-color: var(--border, #2C2F36);
}
.proc-embebido .per-pie .lu-btn--accion,
.proc-embebido .vnv-pie .lu-btn--accion {
  background: var(--vnv-marca-luz, var(--accent-amber, #f2c200)) !important;
  color: var(--accent-texto, #131824) !important;
  border-color: var(--vnv-marca-luz, var(--accent-amber, #f2c200));
}

/* Estas son la fila de botones DENTRO del pie, no el pie. No se pintan —el
   pie ya tiene color— pero tienen que quedar transparentes: con fondo propio
   tapaban la franja justo donde están los botones, y la pantalla parecía sin
   color abajo. */
.per-modal .vnv-pie-acciones,
.per-modal .per-pie-acciones,
.per-modal .cvn-pie-nota,
.per-modal .vnv-pie-nota { background: transparent; color: inherit; }

/* Los submodales que se abren encima no repiten la franja. */
.per-overlay .per-overlay:not(.vnl-pantalla) .per-modal .per-pie,
.per-overlay .per-overlay:not(.vnl-pantalla) .per-modal .cvn-pie,
.per-overlay .per-overlay:not(.vnl-pantalla) .per-modal .vnv-pie,
.per-overlay .per-overlay:not(.vnl-pantalla) .per-modal .mig-pie,
.per-overlay .per-overlay:not(.vnl-pantalla) .per-modal .sch-pie,
.per-overlay .per-overlay:not(.vnl-pantalla) .per-modal .ret-pie,
.per-overlay .per-overlay:not(.vnl-pantalla) .per-modal .acc-pie,
.per-overlay .per-overlay:not(.vnl-pantalla) .per-modal .enc-pie,
.per-overlay .per-overlay:not(.vnl-pantalla) .per-modal .pd-pie,
.per-overlay .per-overlay:not(.vnl-pantalla) .per-modal .sd-pie,
.per-overlay .per-overlay:not(.vnl-pantalla) .per-modal .sd-modal-pie,
.per-overlay .per-overlay:not(.vnl-pantalla) .per-modal .bp-modal-pie,
.per-overlay .per-overlay:not(.vnl-pantalla) .per-modal .inf-pie,
.per-overlay .per-overlay:not(.vnl-pantalla) .per-modal .lu-informe-pie,
.per-overlay .per-overlay:not(.vnl-pantalla) .per-modal .lu-pie,
.per-overlay .per-overlay:not(.vnl-pantalla) .per-modal .bt-pie,
.per-overlay .per-overlay:not(.vnl-pantalla) .per-modal .rv-footer,
.per-overlay .per-overlay:not(.vnl-pantalla) .per-modal .pat-footer,
.per-overlay .per-overlay:not(.vnl-pantalla) .per-modal .pda-footer,
.per-overlay .per-overlay:not(.vnl-pantalla) .per-modal .sc-modal-footer,
.per-overlay .per-overlay:not(.vnl-pantalla) .per-modal .am-tabla-pie,
.per-overlay .per-overlay:not(.vnl-pantalla) .per-modal .asg-fila-botones-pie,
.per-overlay .per-overlay:not(.vnl-pantalla) .per-modal .asg-form-acciones,
.per-overlay .per-overlay:not(.vnl-pantalla) .per-modal .sch-modal-acciones,
.per-overlay .per-overlay:not(.vnl-pantalla) .per-modal .vna-pie-btns {
  background: transparent; color: inherit;
  border-top: 1px solid var(--border, #2C2F36);
}

/* EL LOGO DE GIORGI YA VIENE CON LA TINTA QUE CORRESPONDE (24/09/2026, Ramiro).
   Acá se invertía el logo de Renault, porque la regla suponía que en la franja
   iba la silueta BLANCA —cierto para Vesubio y Ginza, que tienen tinta blanca—.
   Pero «LogoDealer» elige el logo por la tinta de la casa, y Giorgi tiene tinta
   OSCURA: le manda el logo a COLOR, que ya es la tinta correcta para su banda
   amarilla. Invertirlo lo volvía blanco, y blanco sobre amarillo casi no se
   lee: así se veía el logo lavado en Accesorios y en todas las pantallas de
   Giorgi. Se saca la inversión; el logo va como viene. */

/* El buscador de compras no tiene por qué ocupar media pantalla: con eso el
   botón de Nueva compra se iba al medio y había que ir a buscarlo. */
.cvn-modal .cvn-barra .cvn-buscar { flex: 0 1 300px; max-width: 300px; min-width: 170px; }

/* ============================================================
   Buscadores de catálogo: la opción marcada tiene que LEERSE
   ------------------------------------------------------------
   El renglón resaltado se pintaba con el color de la marca del concesionario
   y la letra encima quedaba tapada — en Peugeot, texto ámbar sobre azul.
   El resalte pasa a ser neutro (una gris clara que funciona con las tres
   marcas) y el color de la casa queda como un filo a la izquierda, que marca
   igual de bien sin comerse el texto.
   ============================================================ */
.cat-op--foco {
  background: rgba(255,255,255,.10) !important;
  color: var(--text, #e8ecf2) !important;
  box-shadow: inset 3px 0 0 var(--vnv-marca, var(--accent-amber, #f2c200));
}
.cat-op--crear { color: var(--text); font-weight: 700; }
.cat-op--crear.cat-op--foco {
  background: rgba(232,163,61,.16) !important;
  color: var(--text) !important;
}
.cat-op--act { color: var(--text); font-weight: 600; }
.cat-op--act.cat-op--foco { color: var(--text) !important; }
/* Y el tema claro, donde el blanco translúcido no se ve. */
.mo-claro .cat-op--foco { background: rgba(0,0,0,.07) !important; color: var(--bg, #131824) !important; }

/* Volver al vencimiento automático después de haberlo puesto a mano. */
.pre-recalc {
  font: inherit; font-size: 12px; background: none; border: 0; padding: 2px 0 0;
  color: var(--text); cursor: pointer; text-align: left;
}

/* ============================================================
   PostVenta · venta de accesorios
   ============================================================ */
/* Importe por accesorio: es lo que permite medir pesos, no sólo órdenes. */
.acc-item-imp { width: 108px; text-align: right; flex: 0 0 auto; }
/* Días que pasaron sin llamar / sin colocar: pasado el plazo, en rojo. */
.pv-viejo { color: #e0725f; font-weight: 700; }
.pv-compro td { background: color-mix(in srgb, var(--vnv-marca, #4caf6d) 9%, transparent); }
/* El renglón para anotar qué contestó el cliente, debajo de su fila. */
.pv-registro { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; padding: 7px 4px; }
.pv-obs { flex: 1 1 220px; min-width: 150px; }
/* La cotización del dólar vive con los indicadores: se toca poco y se mira
   cada vez que se lee una cifra en US$. */
.pv-dolar { cursor: text; }
.pv-dolar input {
  width: 100%; font-size: 19px; font-weight: 700; text-align: left;
  background: transparent; border: none; border-bottom: 1px dashed var(--border, #252d3f);
  color: inherit; padding: 1px 0;
}
.lead-kpi i { display: block; font-style: normal; font-size: 12px; opacity: 1; margin-top: 2px; }
.per-barra--der { justify-content: flex-end; }

/* Marcador de versión: chico, abajo a la derecha, arriba de todo lo demás.
   Se pone legible al pasar el mouse; el resto del tiempo casi no se nota.
   No se imprime ni tapa nada porque no recibe clics. */
.tcg-version {
  /* Se mudó de abajo-DERECHA a abajo-IZQUIERDA. En la derecha está el botón
     de cerrar de casi todos los pies: aunque ya no roba el clic, lo tapaba y
     no se veía. La izquierda del pie lleva conteos y notas —texto, no
     botones—, así que ahí no estorba a ninguna acción.
     Además va chica y atenuada: sirve para confirmar de un vistazo qué
     versión está publicada, no para leerla todo el día. */
  position: fixed; left: 10px; bottom: 8px; z-index: 100000;
  font-size: 12px; font-weight: 700; letter-spacing: .02em; line-height: 1;
  padding: 4px 9px; border-radius: 999px; opacity: 1;
  background: var(--bg, #131824); color: var(--text);
  border: 1px solid color-mix(in srgb, var(--accent-amber, #f2c200) 55%, transparent);
  /* VUELVE a pointer-events:none. Cuando se la hizo tocable pasó a robar los
     clics: está fija abajo a la derecha, con z-index 100000, y ése es
     justamente el rincón donde vive el botón de cerrar de casi todos los
     pies. Medido en la captura de Ventas VN: la chapa tapa el «Cerrar» y el
     clic lo recibe ella. Por eso «el botón no funciona».
     Ningún rincón de la pantalla es seguro para un elemento fijo y tocable:
     arriba a la derecha están los cerrar de cabecera, abajo a la izquierda
     ahora va «Nueva compra». Así que la chapa vuelve a ser sólo información,
     y el diagnóstico se abre desde el panel de ajustes (el engranaje). */
  pointer-events: none;
  user-select: none; white-space: nowrap;
}
.mo-claro .tcg-version, .app-shell--claro .tcg-version { background: #ffffff; color: var(--text); border-color: #d8a24a; }
/* Y con un modal o un panel de procesos abierto, la chapa se esconde. Es la
   única solución que no se muda de un problema a otro: los dos rincones de
   abajo tienen botones —a la derecha el cerrar, a la izquierda «Nueva
   compra»— y no hay esquina libre mientras hay un modal en pantalla.
   El marcador se mira en la portada, al volver de publicar; ahí no hay nada
   que tapar. Los navegadores sin :has() la siguen mostrando, y no molestan
   porque no recibe clics. */
.app-shell:has(.per-overlay) .tcg-version,
.app-shell:has(.gv-panel-proceso) .tcg-version,
.app-shell:has(.gv-pantalla-suelta) .tcg-version { display: none; }
@media print { .tcg-version { display: none !important; } }


/* ── Tesorería sigue el color de la casa ────────────────────────────────
   Se aplica al encabezado y al marco. Las dos tarjetas de adentro conservan
   sus acentos —azul para Caja, ámbar para Posición— porque ahí el color es
   lo que las distingue, no decoración. */
.tesoreria-panel--casa {
  border: 1px solid color-mix(in srgb, var(--casa) 45%, transparent);
  border-radius: 14px; padding: 4px 12px 12px;
}
.tesoreria-panel--casa .tesoreria-cab-casa {
  background: var(--casa); color: var(--casa-tinta);
  margin: 0 -12px 14px; padding: 12px 16px; border-radius: 12px 12px 0 0;
}
.tesoreria-panel--casa .tesoreria-cab-casa .tesoreria-titulo-principal {
  margin: 0; color: var(--casa-tinta);
}
/* La franja de abajo, igual que la de arriba: el marco cierra. Sin esto el
   panel quedaba con el color sólo en la cabecera y abierto abajo. */
.tesoreria-panel--casa::after {
  content: ""; display: block; height: 34px; margin: 14px -12px -12px;
  background: var(--casa); border-radius: 0 0 12px 12px;
}

/* ── El acceso a cargar el usado en parte de pago ───────────────────────
   Era un botón chico («lu-btn--sm») dentro de un encabezado pintado con el
   color de la casa. En Jorge Giorgi quedaba negro sobre negro —el mismo
   choque de siempre— y encima era el más difícil de acertar de la pantalla,
   siendo una de las acciones que más se usan. Ahora es grande, con el
   contraste resuelto a mano y sin depender de ninguna variable. */
.vnv-usado .vnb-cab { gap: 10px; }
.vnv-usado-alta {
  font-size: 13px !important; font-weight: 700 !important;
  padding: 7px 16px !important; border-radius: 8px !important;
  white-space: nowrap; flex: 0 0 auto;
  background: var(--panel-3, #131824) !important; color: var(--text, #f5f7fa) !important;
  border: 1.5px solid rgba(255,255,255,.5) !important;
}
.vnv-usado-alta:hover:not(:disabled) { background: var(--panel, #2a3346) !important; border-color: #fff !important; }
.vnv-usado-alta:disabled { opacity: .45; }

/* ── El alta del usado, con la pinta de los demás ────────────────────
   Era angosto y con los rótulos pegados a la derecha en dos columnas, que es
   un formato de planilla vieja: al lado del modal de ventas parecía de otro
   sistema. Más ancho, esquinas del mismo radio, sombra para que se despegue
   del que tiene detrás, y los rótulos a la izquierda como en el resto.
   No cambia el orden de los campos: cambia cómo se ve. */
.ret-modal {
  width: min(560px, calc(96vw / var(--tcg-z, 1))) !important;
  border-radius: 14px;
  box-shadow: 0 18px 44px rgba(0, 0, 0, .45);
  border: 1px solid var(--border, #252d3f);
}
/* La superficie del alta, la MISMA que la de los demás modales.
   Se pintaba con «var(--bg)», y «.mo-claro» redefine «--panel» pero NO
   «--bg»: en tema claro quedaba un modal oscuro con la tinta oscura del
   tema claro encima. Medido: 1,21 de contraste en los rótulos, el mínimo
   es 4,5. Era la «letra gris que no se nota» y también por qué este modal
   parecía de otra época que el resto de la venta. */
.ret-modal { background: var(--panel, #1b2233) !important; }
.ret-modal .ret-rot {
  text-align: left;
  font-size: 12px; color: var(--text, #ecf0f4); font-weight: 600;
}
.ret-modal .ret-linea { margin-bottom: 7px; }
.ret-modal .ret-ctrl input,
.ret-modal .ret-ctrl select,
.ret-modal .ret-ctrl textarea {
  height: 34px !important; min-height: 34px !important;
  border-radius: 8px; font-size: 13px;
}
.ret-modal .ret-ctrl .lu-btn {
  flex: 0 0 34px !important; width: 34px !important;
  height: 34px !important; min-height: 34px !important;
  line-height: 32px !important; border-radius: 8px;
}
/* Las franjas de sección, como las del modal de ventas: redondeadas y
   separadas, no rectángulos pegados a todo lo ancho. */
.ret-modal .ret-seccion { border-radius: 8px; margin: 12px 0 8px; letter-spacing: .4px; }

/* El modal de compra del usado que sale de acá: un centímetro más ancho
   —de 392 a 430px— para que los campos respiren. En celular sigue mandando
   el 95% de la pantalla, así que ahí no cambia nada. */
.ret-modal { width: min(468px, calc(95vw / var(--tcg-z, 1))); }
.ret-modal .ret-rot { flex: 0 0 130px; }

/* ═══════════════════════════════════════════════════════════════════════
   CELULAR
   Dos pantallas quedaban inusables en el teléfono. Van al final para que
   ganen a todo lo anterior, que es lo que manda con @media.
   ═══════════════════════════════════════════════════════════════════════ */

/* ── Pantalla de ingreso ────────────────────────────────────────────────
   El teclado tenía las columnas en píxeles fijos (3 × 84 = 252 más las
   separaciones y el relleno del marco). En una pantalla de 320 no entraba
   y los botones se salían del borde. Ahora las columnas se reparten el
   ancho disponible, así entra en cualquier teléfono. */


/* Compra directa de usado: sin texto adentro, el renglón no tiene que ocupar
   lugar. Se apaga entero en vez de dejar una barra vacía. */
.ret-quien--vacia { display: none; }
/* «Elegí primero el modelo…» ocupaba un renglón fijo debajo de Versión desde
   que se abre el modal. El motivo sigue estando en el globito del botón «+»,
   que además está apagado: se ve igual, sin gastar alto. Sólo acá: en otras
   pantallas el renglón no molesta. */
.com-modal--ficha .cvn-bloqueo { display: none; }

/* ============================================================
   Informe de Ventas: los cuatro indicadores al pie
   ------------------------------------------------------------
   Plan de Ahorro dejó de ser un bloque suelto debajo de los otros tres y
   pasó a ser el cuarto indicador, adentro de la misma grilla. Se corrige
   de paso lo que salía cortado en la hoja impresa. Va al final de baseCss
   porque tiene que ganarle por orden al bloque de impresión de más arriba.
   ============================================================ */
/* Los cuatro indicadores en una sola línea, del mismo ancho y ocupando todo
   el renglón. Con «auto-fit + minmax» el navegador decidía cuántos entraban y
   cambiaba de tres a cuatro columnas según el ancho; con cuatro fijas siempre
   son cuatro y se reparten el total. */
.ivj-indicadores { grid-template-columns: repeat(4, minmax(0, 1fr)); align-items: stretch; }
.ivj-ind-card { display: flex; flex-direction: column; min-width: 0; }
/* Las dos tarjetas cortas (comparación y Plan de Ahorro) tienen poco adentro y
   quedaban mucho más bajas que el ranking. Se estiran para cerrar parejas. */
.ivj-ind-card--vs .ivj-vs-caja, .ivj-ind-card--plan .ivj-plan-filas { flex: 1 1 auto; }
.ivj-ind-card--vs .ivj-vs-valor { font-size: calc(var(--ivj-letra, 1) * 34px); }
.ivj-ind-card--vs .ivj-vs-caja, .ivj-ind-card--plan .ivj-plan-filas {
  display: flex; flex-direction: column; justify-content: center; gap: 6px;
}



.ivj-ind-card--plan .ivj-plan-fila {
  border-top: 1px solid var(--border); border-bottom: none; padding: 7px 2px;
}
.ivj-ind-card--plan .ivj-plan-fila:first-of-type { border-top: none; }

@media print {
  /* 1) La hoja se arma como una columna: encabezado, tabla, y los cuatro
        indicadores empujados al pie con "margin-top: auto". Antes iban
        pegados abajo de la tabla y el espacio sobrante quedaba al final. */
  .ivj-reporte {
    display: flex !important; flex-direction: column !important;
    min-height: 196mm !important;
  }
  /* Se saca el "zoom: .78" de más arriba: achicaba TODO el informe, que es
     justo lo contrario de lo que hace falta. El tamaño se controla ahora
     tipografía por tipografía, más abajo. */
  /* Sólo para el que NO fue medido: al que lleva «data-ajuste» le puso el
     zoom la medición de ivjAjustarAUnaHoja y esa medida tiene que ganar. */
  .ivj-panel > .ivj-reporte:not([data-ajuste]) { zoom: 1 !important; }
  .ivj-indicadores {
    /* Con la tabla estirada (punto 5) los indicadores ya quedan abajo
       solos; acá sólo se separa del último renglón para que no se peguen.
       Los cuatro en una línea, repartiéndose el ancho de la hoja. */
    margin-top: 5mm !important; margin-bottom: 0 !important;
    gap: 5px !important; grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
    align-items: stretch !important;
  }

  /* 2) Nada de recortes. El tope de alto con "overflow: hidden" era lo que
        cortaba el último puesto del ranking y de localidades, y también la
        línea de aclaración de cada tarjeta. */
  .ivj-ind-card { max-height: none !important; overflow: visible !important; padding: 4px 6px !important; }
  .ivj-rank-list { overflow: visible !important; }
  .ivj-rank-nombre { overflow: visible !important; text-overflow: clip !important; }
  /* La tabla arrastraba de la pantalla un alto máximo de 560px con recorte:
     con muchos vendedores, las últimas filas no se imprimían. */
  .ivj-tabla-scroll { max-height: none !important; overflow: visible !important; }

  /* 3) El doble renglón del encabezado (Retoma → x VN · % · x VO · % ·
        Total · %) se veía pisado: los th quedan "sticky" de la pantalla y
        al imprimir se superponen entre sí. En papel no hay nada que fijar. */
  .ivj-tabla thead th, .ivj-tabla .ivj-th-sub th {
    position: static !important; top: auto !important; z-index: auto !important;
    vertical-align: middle !important; white-space: nowrap !important;
    overflow: visible !important; line-height: 1.25 !important;
  }
  .ivj-tabla .ivj-th-sub th { padding: 3px 5px !important; font-size: calc(var(--ivj-letra, 1) * 12px) !important; font-weight: 700 !important; }

  /* 4) Las columnas de % de Retoma salían en gris clarito, casi ilegibles
        en papel: son las únicas celdas que NO son un input, así que la
        regla que pinta de negro los inputs (.ivj-celda) nunca las tocaba y
        se quedaban con el gris del tema oscuro. */
  .ivj-tabla tbody td, .ivj-tabla tbody td .ivj-num { color: #000 !important; }

  /* 5) La tabla se estira hasta donde arrancan los indicadores. Sin esto
        quedaba una franja blanca larga en el medio de la hoja: los
        indicadores abajo, la tabla arriba y nada entre medio. Estirándola,
        los renglones quedan más altos y más fáciles de leer. */
  .ivj-tabla-scroll { flex: 1 1 auto !important; display: flex !important; flex-direction: column !important; }
  .ivj-tabla { flex: 1 1 auto !important; height: auto !important; }

  /* 6) Letras y números más grandes, que es lo que se pidió. Con el zoom
        apagado hay lugar de sobra: antes todo esto se veía al 78%. */
  .ivj-tabla { font-size: calc(var(--ivj-letra, 1) * 26px) !important; }
  .ivj-tabla thead th { font-size: calc(var(--ivj-letra, 1) * 14px) !important; padding: 4px 6px !important; }
  .ivj-tabla tbody td { font-size: calc(var(--ivj-letra, 1) * 26px) !important; padding: 3px 4px !important; }
  .ivj-num, .ivj-celda { font-size: calc(var(--ivj-letra, 1) * 26px) !important; font-weight: 700 !important; }
  .ivj-col-vendedor { font-size: calc(var(--ivj-letra, 1) * 16px) !important; }
  /* Ancho fijo también en papel: las columnas no cambian de tamaño según
     lo que tengan adentro. */
  .ivj-celda { min-width: 30px !important; }
  .ivj-fila-totales td { font-size: calc(var(--ivj-letra, 1) * 29px) !important; }
  .ivj-fila-totales td .ivj-celda, .ivj-fila-totales td .ivj-num { font-size: calc(var(--ivj-letra, 1) * 29px) !important; }
  .ivj-fila-totales td.ivj-col-destacada .ivj-celda { font-size: calc(var(--ivj-letra, 1) * 33px) !important; }

  /* 7) Las tarjetas del pie, legibles: antes el ranking se leía a 7,5px. */
  .ivj-ind-titulo { font-size: calc(var(--ivj-letra, 1) * 11.5px) !important; margin-bottom: 3px !important; }
  .ivj-ind-card--vs .ivj-vs-valor { font-size: calc(var(--ivj-letra, 1) * 30px) !important; }
  .ivj-ind-nota { font-size: calc(var(--ivj-letra, 1) * 8px) !important; margin-top: 3px !important; line-height: 1.25 !important; }
  .ivj-ind-vacio { font-size: calc(var(--ivj-letra, 1) * 9px) !important; }
  .ivj-vs-valor { font-size: calc(var(--ivj-letra, 1) * 20px) !important; }
  .ivj-rank-fila { padding: 2px 0 !important; gap: 4px !important; }
  .ivj-rank-pos { font-size: calc(var(--ivj-letra, 1) * 8.5px) !important; width: 12px !important; }
  .ivj-rank-nombre { font-size: calc(var(--ivj-letra, 1) * 10px) !important; margin-bottom: 2px !important; }
  .ivj-rank-valor { font-size: calc(var(--ivj-letra, 1) * 9px) !important; }
  .ivj-rank-pct { font-size: calc(var(--ivj-letra, 1) * 8px) !important; }
  .ivj-rank-barra-track { height: 3px !important; }

  /* 8) Plan de Ahorro, ya como cuarta tarjeta: se apagan los estilos del
        bloque suelto que tenía antes (borde grueso, ancho de 240px). */
  .ivj-ind-card--plan { border-left: 3px solid var(--accent-amber, #f2c200) !important; max-width: none !important; }
  .ivj-ind-card--plan .ivj-plan-fila { padding: 5px 2px !important; border-top-color: #ddd !important; }
  /* Suscripciones y Facturaciones son dato de negocio, no adorno: Ramiro los
     manda por correo todas las semanas y a 11 y 17px no se leían. Suben los
     dos, el rótulo y el número. */
  .ivj-plan-label { font-size: calc(var(--ivj-letra, 1) * 14px) !important; font-weight: 700 !important; }
  .ivj-ind-card--plan .ivj-ind-titulo { font-size: calc(var(--ivj-letra, 1) * 14px) !important; }
  .ivj-plan-input {
    width: 74px !important; font-size: calc(var(--ivj-letra, 1) * 24px) !important; font-weight: 700 !important;
    padding: 2px 5px !important; border: 1px solid #bbb !important; border-radius: 5px !important;
    color: #000 !important; background: #fff !important;
  }

  /* 8 bis) EL PIE NO SE IMPRIME. En pantalla cierra el envoltorio y dice de
        qué casa y de qué mes es lo que se está mirando. En papel eso ya está
        en el título de la hoja, así que el pie sólo robaría alto —y el alto
        es justo lo que decide cuánto hay que achicar la letra—. Ramiro:
        «envoltorio sí, perder espacio por un pie no». */
  .ivj-pie { display: none !important; }

  /* 9) LA TABLA ENTRA EN LA HOJA, DE PUNTA A PUNTA.
        Medido en Chromium con la hoja A4 apaisada y los ocho modelos de
        Ginza: la tabla daba 1154px dentro de un hueco de 1097, o sea que se
        salía 58px por la derecha y el impresor recortaba la última columna
        de Retoma. Eso es lo que veía Ramiro.
        Dos reglas alcanzan: el ancho al 100% del hueco, y que los
        encabezados puedan partirse en dos renglones —el punto 3 les había
        puesto «nowrap», que es lo que empujaba la tabla hacia afuera—.
        NO se usa «table-layout: fixed»: eso fue lo que rompió Ginza en la
        tanda del 28/08.
        Va al final del bloque a propósito: dentro de un mismo @media manda
        la última regla escrita, y este es además el último @media print del
        proyecto. */
  /* El ancho del reporte lo pone la medición (ivjAjustarAUnaHoja) como un
     estilo en línea, y un «!important» de la hoja se lo comería. Por eso la
     regla no toca al que ya fue medido. */
  .ivj-reporte:not([data-ajuste]) { width: 100% !important; max-width: 100% !important; }
  .ivj-tabla-scroll { width: 100% !important; max-width: 100% !important; }
  .ivj-tabla { width: 100% !important; max-width: 100% !important; }
  .ivj-tabla thead th, .ivj-tabla .ivj-th-sub th {
    white-space: normal !important; word-break: normal !important; overflow-wrap: anywhere;
  }
}

/* ============================================================
   Modal de ventas: nada se desplaza adentro, se escala el bloque
   ------------------------------------------------------------
   El alto estaba clavado en 812px. Como el contenido necesita más, cada
   columna se desplazaba por su cuenta: dos barras adentro del modal, la
   tarjeta de usado en parte de pago cortada al medio y las tarjetas
   corridas hacia la derecha. Ahora el alto lo pone el contenido y el
   escalado se calcula sobre ese alto medido (ver useEscalaFija), así que:
     · no hay barras de desplazamiento adentro,
     · las tres tarjetas de arriba arrancan a la misma altura,
     · la de UNIDAD se estira hasta terminar donde termina la última
       tarjeta de la derecha,
     · el zoom agranda o achica el bloque entero, sin reacomodar nada.
   ============================================================ */
.vnv-modal.vnv-fijo,
.gv-root .gv-panel-proceso > .per-overlay > .per-modal.vnv-modal.vnv-fijo {
  height: auto !important; max-height: none !important;
  border: 1px solid color-mix(in srgb, var(--vnv-marca, var(--accent-amber, #f2c200)) 58%, transparent);
}
.vnv-fijo > .vnv-cuerpo { flex: 0 0 auto; min-height: 0; overflow: visible; }
/* Adentro de Gestión de Ventas hay una regla con cuatro clases y dos «>» que
   le pone overflow-y: auto al cuerpo. Le gana por especificidad a cualquier
   cosa que escribamos con dos clases, así que hay que repetir la cadena
   entera para poder desactivarla. */
.gv-root .gv-panel-proceso > .per-overlay > .per-modal.vnv-fijo > .vnv-cuerpo {
  flex: 0 0 auto; min-height: 0; overflow: visible;
}
.vnv-fijo .vnv-cuerpo--2col { max-height: none; overflow: visible; align-items: stretch; }
.vnv-fijo .vnv-cuerpo--2col > .vnv-col { min-height: 0; overflow: visible; }
/* La tarjeta de la unidad ocupa el sobrante de su columna: así las dos
   columnas terminan a la misma altura en vez de dejar un hueco abajo. */
.vnv-fijo .vnv-cuerpo--2col > .vnv-col > .vnv-unidad.pnl-existente { flex: 1 1 auto; }



/* ---- Boleto papel: espejo del Registro de Ventas, no es un campo ----
   Es un renglón igual a los otros diecisiete de la ficha; lo único propio
   es el color del SÍ y del NO. Medidos en los dos temas: verde 5,79 oscuro
   y 5,33 claro · rojo 4,31 y 5,92. El mínimo legible es 4,5. */
.bpp-dato--si { color: var(--text); }
.bpp-dato--no { color: #e2574c; }
.mo-claro .bpp-dato--si { color: #000; }
.mo-claro .bpp-dato--no { color: #b8332a; }

/* ============================================================
   PANTALLA DE ENTRADA
   ------------------------------------------------------------
   Reusa .vista-card tal cual, para que la entrada no parezca de otro
   sistema: mismo grafito, misma escuadra de 3px arriba y a la derecha,
   mismo Oswald en el titulo y JetBrains Mono en el renglon de abajo.
   Lo unico propio es la franja de tres colores: es la unica pantalla
   que no es de una casa sino de las tres.
   Va al final de baseCss a proposito: las reglas de igual peso que se
   insertan antes pierden contra las que ya estaban.
   ============================================================ */
.ent-todo { min-height: calc(100dvh / var(--tcg-z, 1)); display: flex; flex-direction: column; }
.ent-franja { height: 4px; width: 100%; flex: 0 0 auto; display: flex; }
.ent-franja i { flex: 1 1 0; display: block; }
.ent-franja i:nth-child(1) { background: var(--accent-amber, #f2c200); }
.ent-franja i:nth-child(2) { background: var(--panel, #0b4f96); }
.ent-franja i:nth-child(3) { background: #cf2126; }

.ent-centro { flex: 1 1 auto; display: flex; align-items: center; justify-content: center; padding: 26px 18px; }
.ent-caja {
  /* 880px con el contenido en 292: el marco quedaba a media pantalla de
     distancia. Ahora abraza el panel. */
  width: 100%; max-width: 420px;
}
.ent-marca { display: flex; justify-content: center; margin-bottom: 28px; }
.ent-marca img { width: 210px; max-width: calc(60vw / var(--tcg-z, 1)); height: auto; display: block; }
/* El logo se limpió: la imagen original tenía un 37% de píxeles de halo gris
   que sobre fondo claro se veían como una mancha. Ahora no hace falta ningún
   filtro y se ve igual de bien en los dos modos. */

.ent-grupo {
  display: block; margin-bottom: 0;
  /* El borde toma el color del modo: es lo primero que se ve y anticipa
     cómo va a verse el resto. */
  padding: 26px 24px 20px;
  border: 1px solid color-mix(in srgb, var(--accent-amber, #f2c200) 42%, transparent);
  border-radius: 16px;
  background: var(--panel, #1b2233);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.05),
              0 8px 28px rgba(0,0,0,.34),
              0 0 0 1px color-mix(in srgb, var(--accent-amber, #f2c200) 9%, transparent);
}
.ent-rotulo {
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 12px; font-weight: 600;
  letter-spacing: .05em; text-transform: uppercase; color: var(--text);
  text-align: center; margin: 0 0 16px;
}
.ent-cargando { text-align: center; color: var(--text); font-size: 13.5px; margin: 6px 0 4px; }
.ent-fila { display: flex; flex-wrap: wrap; gap: 16px; justify-content: center; }

.ent-persona { position: relative; cursor: pointer; }
.ent-inicial {
  flex: 0 0 auto; width: 48px; height: 48px; border-radius: 12px;
  display: grid; place-items: center;
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 18px; font-weight: 600;
  background: color-mix(in srgb, var(--c, #4f8ef7) 14%, transparent);
  color: var(--c, #4f8ef7);
  border: 1px solid color-mix(in srgb, var(--c, #4f8ef7) 30%, transparent);
}
.ent-cuerpo { min-width: 0; flex-direction: column; align-items: flex-start; gap: 0; }
.ent-casas { position: absolute; left: 17px; bottom: 13px; display: flex; gap: 5px; }
.ent-casas i { width: 7px; height: 7px; border-radius: 50%; display: block; }

.ent-cab { display: flex; align-items: center; gap: 13px; margin-bottom: 18px; }
.ent-volver {
  background: var(--panel, #1b2233); border: 1px solid var(--border, #252d3f);
  color: var(--text); width: 36px; height: 36px; border-radius: 10px;
  cursor: pointer; font-size: 17px; line-height: 1; flex: 0 0 auto;
}
.ent-volver:hover { border-color: var(--accent-amber, #f2c200); color: var(--text); }
.ent-cab-nom { font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 18px; font-weight: 600; }
.ent-cab-rol {
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 12px; color: var(--text);
  margin-top: 2px; text-transform: uppercase; letter-spacing: .02em;
}

.ent-puntos { display: flex; gap: 13px; justify-content: center; margin: 4px 0 14px; }
.ent-punto {
  width: 15px; height: 15px; border-radius: 50%;
  border: 1.5px solid var(--border, #252d3f); background: transparent; transition: all .13s;
}
.ent-punto.on { background: var(--accent-amber, #f2c200); border-color: var(--accent-amber, #f2c200); }
.ent-punto.mal { background: transparent; border-color: #ee776c; }
.ent-error { text-align: center; color: #f08a80; font-size: 13px; min-height: 19px; margin-bottom: 10px; }
.ent-sacudir { animation: entSac .34s; }
@keyframes entSac {
  0%, 100% { transform: translateX(0); }
  20% { transform: translateX(-8px); }
  40% { transform: translateX(8px); }
  60% { transform: translateX(-5px); }
  80% { transform: translateX(5px); }
}

.ent-pad { display: grid; grid-template-columns: repeat(3, 86px); gap: 11px; justify-content: center; }
.ent-tecla {
  height: 60px; border-radius: 12px; border: 1px solid rgba(255,255,255,.085);
  background: linear-gradient(135deg, rgba(255,255,255,.06) 0%, rgba(255,255,255,0) 60%),
    var(--panel-2, #21262e);
  color: var(--text, #e8ecf2); font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 22px; font-weight: 600;
  /* Sin esto el navegador suaviza con subpíxeles y los números salen con
     matices rojos y azules, como si estuvieran mal impresos. */
  -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
  cursor: pointer; box-shadow: inset 0 1px 0 rgba(255,255,255,.07); transition: filter .12s;
}
.ent-tecla:hover:not(:disabled) { filter: brightness(1.18); }
.ent-tecla:active:not(:disabled) { filter: brightness(.9); }
.ent-tecla:disabled { opacity: .55; cursor: default; }
.ent-tecla--chica { font-size: 17px; color: var(--text); }
.ent-tecla--vacia { border: none; background: none; box-shadow: none; }
.ent-ayuda {
  text-align: center; font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 12px;
  color: var(--text); margin: 18px 0 0; text-transform: uppercase; letter-spacing: .02em;
}

/* ══ MODO CLARO · PANTALLA DE ENTRADA (20/09/2026, Ramiro: «letra negra y
   resaltar bordes») ════════════════════════════════════════════════════
   Las teclas estaban pensadas para fondo oscuro: se dibujan con un brillo
   blanco encima del panel. Sobre blanco ese brillo no se ve y quedaban sin
   borde, planas y apagadas. Acá tienen borde propio, letra negra y se hunden
   al apretarlas. Los rótulos gris claro pasan a la tinta oscura. Todo va
   colgado de «.tcg-claro», así que el modo oscuro queda igual que hoy. */
.tcg-claro .ent-tecla {
  background: #ffffff; border: 1.5px solid var(--border, #d6dbe4);
  color: var(--text, #0e1116); box-shadow: 0 1px 2px rgba(15,23,42,.08);
}
.tcg-claro .ent-tecla:hover:not(:disabled) { filter: none; background: var(--panel-2, #f4f6fa); border-color: var(--accent-blue, #2563eb); }
.tcg-claro .ent-tecla:active:not(:disabled) { filter: none; background: var(--panel-3, #e9edf4); box-shadow: inset 0 2px 4px rgba(15,23,42,.14); }
.tcg-claro .ent-tecla--chica { color: var(--text, #0e1116); }
/* El hueco del teclado no es una tecla: sin esto el borde nuevo le dibujaba
   un cuadrado vacío al lado del cero. */
.tcg-claro .ent-tecla--vacia { border: none; background: none; box-shadow: none; }
.tcg-claro .ent-grupo {
  border-color: var(--border, #d6dbe4);
  box-shadow: 0 1px 3px rgba(15,23,42,.10), 0 10px 30px rgba(15,23,42,.10);
}
.tcg-claro .ent-rotulo, .tcg-claro .ent-ayuda, .tcg-claro .ent-cab-rol,
.tcg-claro .ent-cargando, .tcg-claro .ent-o { color: var(--text); }
.tcg-claro .ent-punto { border-color: #8b93a1; }
/* El punto lleno en ámbar sobre blanco no se veía: en claro va tinta oscura. */
.tcg-claro .ent-punto.on { background: var(--accent-blue, #2563eb); border-color: var(--accent-blue, #2563eb); }
.tcg-claro .ent-error { color: var(--red, #c0392b); }
.tcg-claro .ent-google { background: #ffffff; border-color: var(--border, #d6dbe4); color: var(--text, #0e1116); }
.tcg-claro .ent-google:hover:not(:disabled) { border-color: var(--accent-blue, #2563eb); }
.tcg-claro .ent-volver { color: var(--text, #0e1116); border-color: var(--border, #d6dbe4); }
.tcg-claro .ent-volver:hover { border-color: var(--accent-blue, #2563eb); color: var(--text); }
.tcg-claro .ent-cab-select { color: var(--text, #0e1116); }

/* Quien sos y el boton de salir, en la portada */
.sesion-quien { font-weight: 600; color: var(--text, #e8ecf2); }
.sesion-salir {
  margin-left: 12px; background: var(--panel, #1b2233); border: 1px solid var(--border, #252d3f);
  color: var(--text); padding: 5px 14px; border-radius: 8px; cursor: pointer;
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 12px;
  text-transform: uppercase; letter-spacing: .05em;
}
.sesion-salir:hover { border-color: var(--accent-amber, #f2c200); color: var(--text); }
.sesion-aviso {
  max-width: 620px; margin: 10px auto 0; padding: 9px 14px; border-radius: 10px;
  border: 1px solid color-mix(in srgb, var(--accent-amber, #f2c200) 45%, transparent);
  background: color-mix(in srgb, var(--accent-amber, #f2c200) 9%, transparent);
  color: var(--text); font-size: 12.5px; text-align: center;
}

/* La clave, en Administracion de Usuarios */
.pin-fila { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-top: 6px; }
.pin-campo {
  width: 108px; background: var(--panel-2, #202940); border: 1px solid var(--border, #252d3f);
  color: var(--text, #e8ecf2); border-radius: 8px; padding: 9px 12px;
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 15px; letter-spacing: .28em; text-align: center;
}
.pin-campo:focus { outline: none; border-color: var(--accent-amber, #f2c200); }
.pin-estado { font-size: 12.5px; color: var(--text); }
.pin-estado.ok { color: var(--text); }
.pin-estado.mal { color: #f08a80; }




/* ============================================================
   MI CLAVE  ·  cuadro para cambiarse la clave propia
   Va al final de baseCss a proposito: las reglas de igual peso
   que se insertan antes pierden contra las que ya estaban.
   ============================================================ */
.mic-overlay {
  position: fixed; inset: 0; z-index: 400;
  background: rgba(0,0,0,.62);
  display: flex; align-items: center; justify-content: center; padding: 20px;
}
.mic-modal {
  background: var(--bg, #14181d); border: 1px solid var(--border, #2c2f36); border-radius: 14px;
  width: 100%; max-width: 480px; overflow: hidden;
  box-shadow: 0 18px 50px rgba(0,0,0,.55);
}
.mic-cab { background: var(--accent-amber, #f2c200); color: #000; padding: 12px 16px; }
.mic-cab h3 { margin: 0; font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 16px; font-weight: 600; }
.mic-cab p { margin: 2px 0 0; font-size: 12px; opacity: 1; }
.mic-cuerpo { padding: 18px 16px 6px; }
.mic-campo { display: block; margin-bottom: 14px; }
.mic-campo > span {
  display: block; font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 12px;
  text-transform: uppercase; letter-spacing: .05em;
  color: var(--text); margin-bottom: 5px;
}
.mic-campo > input {
  width: 100%; background: var(--panel-2, #202940);
  border: 1px solid var(--border, #252d3f); color: var(--text, #e8ecf2);
  border-radius: 8px; padding: 11px 13px;
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 17px;
  letter-spacing: .42em; text-align: center;
}
.mic-campo > input:focus { outline: none; border-color: var(--accent-amber, #f2c200); }
.mic-campo > input:disabled { opacity: .55; }
.mic-pista { font-size: 12px; color: var(--text); margin: -8px 0 14px; line-height: 1.5; }
.mic-error { color: #f08a80; font-size: 12.5px; min-height: 18px; margin-bottom: 8px; }
.mic-ok { color: var(--text); font-size: 12.5px; min-height: 18px; margin-bottom: 8px; }
.mic-pie {
  background: var(--accent-amber, #f2c200); padding: 10px 16px;
  display: flex; gap: 10px; justify-content: flex-end;
}
.mic-btn-pri {
  background: var(--panel-3, #1a1207); color: var(--text); border: none;
  padding: 9px 20px; border-radius: 8px; cursor: pointer; font-size: 13px; font-weight: 600;
}
.mic-btn-sec {
  background: transparent; color: #000; border: 1px solid rgba(0,0,0,.4);
  padding: 9px 18px; border-radius: 8px; cursor: pointer; font-size: 13px;
}
.mic-btn-pri:disabled, .mic-btn-sec:disabled { opacity: .55; cursor: default; }

/* El boton Mi clave se destaca cuando la persona todavia no tiene clave propia */
.sesion-salir--destaca {
  border-color: var(--accent-amber, #f2c200) !important;
  color: var(--text) !important;
}
.sesion-aviso-link {
  background: none; border: none; padding: 0; cursor: pointer;
  color: inherit; font: inherit; text-decoration: underline;
}

/* Dado de baja, en la ficha de Administracion de Usuarios */
.admin-usuarios-card-baja {
  border-color: color-mix(in srgb, var(--red, #e2574c) 45%, transparent) !important;
  background: color-mix(in srgb, var(--red, #e2574c) 7%, transparent) !important;
}
.admin-usuarios-nota-baja {
  font-size: 12px; color: var(--text);
  line-height: 1.55; margin: 8px 0 0;
}
/* ============================================================
   LISTA DE USADOS  ·  la estetica del resto del sistema
   ------------------------------------------------------------
   Era la unica pantalla sin franja de casa arriba y abajo, con
   dos filas de botones en cuatro estilos distintos y las
   tarjetas antes de la tabla. Ahora sigue el mismo patron que
   gestoria: franja, modulo cerrado, UNA barra, y los numeros
   despues de la tabla.
   ============================================================ */

/* El modulo cerrado, centrado y con borde, como los demas. */
.lu-modulo {
  display: flex; flex-direction: column;
  max-width: 1560px; width: 100%; margin: 0 auto;
  background: var(--bg, #14181d); border: 1px solid var(--border, #2c2f36); border-radius: 14px;
  overflow: hidden;
}

/* Franja de la casa arriba. */
.lu-modulo .lu-cab {
  background: var(--vnv-marca, var(--accent-amber));
  color: var(--vnv-marca-txt, var(--casa-activa-tinta, #1a1207));
  padding: 10px 16px; border-radius: 0; border: 0;
}
.lu-modulo .lu-cab .per-titulo,
.lu-modulo .lu-cab .per-sub { color: inherit; }
.lu-modulo .lu-cab .per-sub { opacity: 1; }
.lu-modulo .lu-cab .lu-excel-chico {
  border-color: rgba(0,0,0,.42); color: var(--vnv-marca-txt, var(--casa-activa-tinta, #1a1207));
}

/* Franja de la casa abajo. */
.lu-pie {
  background: var(--vnv-marca, var(--accent-amber));
  color: var(--vnv-marca-txt, var(--casa-activa-tinta, #1a1207));
  padding: 8px 16px; display: flex; align-items: center; gap: 12px;
  font-size: 12px; margin-top: auto;
}
.lu-pie span { opacity: 1; }
.lu-pie .lu-pie-sp { flex: 1; }

/* Una sola barra: casas + acciones en la misma linea. */
.lu-barra {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  padding: 13px 20px 0;
}
.lu-barra .lu-casas,
.lu-barra .lu-acciones { padding: 0; margin: 0; }

/* Los concesionarios, como selector segmentado: se lee como UNA eleccion,
   no como tres tildes sueltas. */
.lu-casas {
  display: flex; background: var(--panel-2, #202940);
  border: 1px solid var(--border, #252d3f); border-radius: 8px; padding: 3px; gap: 2px;
}
.lu-casa {
  background: none; border: none; color: var(--text);
  padding: 6px 13px; border-radius: 8px; cursor: pointer;
  font-size: 12.5px; font-family: inherit;
}
.lu-casa:hover { color: var(--text, #e8ecf2); }
.lu-casa--on {
  background: var(--vnv-marca, var(--accent-amber));
  color: var(--vnv-marca-txt, var(--casa-activa-tinta, #1a1207)); font-weight: 600;
}
.lu-casa--off { opacity: 1; cursor: default; }
.lu-casa-tilde { display: none; }   /* el segmentado ya dice cual esta elegida */

/* De las cuatro acciones, UNA sola es la principal. El resto comparte forma:
   antes cada boton tenia su color y ninguno resaltaba. */
.lu-acciones { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.lu-acc {
  background: var(--panel, #1b2233); border: 1px solid var(--border, #252d3f);
  color: var(--text, #e8ecf2); padding: 7px 14px; border-radius: 8px;
  cursor: pointer; font-size: 12.5px; font-family: inherit;
  display: flex; align-items: center; gap: 7px;
}
.lu-acc:hover:not(:disabled) {
  border-color: var(--vnv-marca, var(--accent-amber));
  color: var(--text);
}
.lu-acc:disabled { opacity: .45; cursor: default; }
.lu-acc--marca:first-child {
  background: var(--vnv-marca, var(--accent-amber));
  border-color: var(--vnv-marca, var(--accent-amber));
  color: var(--vnv-marca-txt, var(--casa-activa-tinta, #1a1207)); font-weight: 600;
}
.lu-acc--marca:first-child:hover:not(:disabled) {
  color: var(--vnv-marca-txt, var(--casa-activa-tinta, #1a1207)); filter: brightness(1.07);
}
/* Comprar e Ingresar traian los dos el color de la casa: dos botones pintados
   compiten y ninguno se lee como el principal. Queda pintado el primero. */
.lu-acciones .lu-acc--marca:not(:first-child) {
  background: var(--panel, #1b2233);
  border-color: var(--border, #252d3f);
  color: var(--text, #e8ecf2);
  font-weight: 400;
}
.lu-acciones .lu-acc--marca:not(:first-child):hover:not(:disabled) {
  border-color: var(--vnv-marca, var(--accent-amber));
  color: var(--text);
}
.lu-acc--vender, .lu-acc--tienda { color: var(--text, #e8ecf2); }
.lu-guardado { margin-left: auto; font-size: 12px; color: var(--text); }

/* Los numeros van DESPUES de la tabla. Se hace por orden y no moviendo el
   bloque de JSX: mismo resultado, sin riesgo de romper el render. */
.lu-indicadores { order: 90; }
.lu-pie { order: 95; }

/* ============================================================
   GESTORIA UNICA  ·  carpetas y tramites con acuse
   ============================================================ */

/* Estimacion y Cobranzas eran pantallas sueltas con su propio overlay y su
   propio encabezado. Adentro de una carpeta eso sobra: el encabezado ya lo
   pone la gestoria. En vez de tocarles el JSX (y arriesgar romperlas), se les
   apaga el overlay por CSS, con el mismo criterio que ya se usa en
   .gv-panel-proceso. Asi siguen andando iguales abiertas de forma suelta. */
/* Sin esto el modal embebido abre una capa fija sobre todo el módulo y no
   hay forma de cerrarla: es lo que pasaba en gestoría y pasaba en cobranzas.
   La regla equivalente ya existía para .gu-insc pero faltaba acá. */
.gu-embebido > .per-overlay {
  position: static; inset: auto; background: none; padding: 0; display: block;
}
.gu-embebido > .per-overlay > .per-modal {
  width: 100%; max-width: none; max-height: none;
  border: 0; border-radius: 0; box-shadow: none; background: transparent;
  transform: none;
  /* Sin min-width:0 el modal no puede achicarse por debajo de su contenido:
     la tabla de cobranzas mide casi 2000px y lo empuja más ancho que el
     panel, que lo recorta. Es el mismo arreglo que necesitó gestoría. */
  min-width: 0; display: flex; flex-direction: column;
}
.gu-embebido > .per-overlay > .per-modal > .per-cab { display: none; }
/* La tabla ancha se desplaza dentro de su cuerpo en vez de que el panel la
   recorte. Sin esto la pantalla "se iba al costado". */
.gu-embebido > .per-overlay > .per-modal > .per-cuerpo,
.gu-embebido > .per-overlay > .per-modal > .com-cuerpo,
.gu-embebido > .per-overlay > .per-modal > .vnp-cuerpo,
.gu-embebido > .per-overlay > .per-modal > .vnv-cuerpo,
.gu-embebido > .per-overlay > .per-modal > .acc-cuerpo,
.gu-embebido > .per-overlay > .per-modal > .cc-cuerpo,
.gu-embebido > .per-overlay > .per-modal > .mic-cuerpo,
.gu-embebido > .per-overlay > .per-modal > .abm-cuerpo,
.gu-embebido .com-tabla-cont { min-width: 0; overflow-x: auto; }
.gu-embebido > .per-overlay > .per-modal > .com-cuerpo { padding-left: 0; padding-right: 0; }
.gu-insc > .per-overlay { position: static; inset: auto; background: none; padding: 0; display: block; }
.gu-insc > .per-overlay > .per-modal {
  width: 100%; max-width: none; max-height: none;
  border: 0; border-radius: 0; box-shadow: none; background: transparent; transform: none;
  /* Mismo arreglo que gestoría y cobranzas: sin esto la tabla ancha empuja
     el modal más allá del panel y la pantalla se recorta al costado. */
  min-width: 0; display: flex; flex-direction: column;
}
/* Y la tabla ancha se desplaza dentro del cuerpo, igual que en cobranzas. */
.gu-insc > .per-overlay > .per-modal > .per-cuerpo,
.gu-insc > .per-overlay > .per-modal > .com-cuerpo,
.gu-insc > .per-overlay > .per-modal > .vnp-cuerpo,
.gu-insc > .per-overlay > .per-modal > .vnv-cuerpo,
.gu-insc > .per-overlay > .per-modal > .acc-cuerpo,
.gu-insc > .per-overlay > .per-modal > .cc-cuerpo,
.gu-insc > .per-overlay > .per-modal > .mic-cuerpo,
.gu-insc > .per-overlay > .per-modal > .abm-cuerpo,
.gu-insc .ing-tabla-cont { min-width: 0; overflow-x: auto; }
.gu-insc > .per-overlay > .per-modal > .per-cab { display: none; }

/* Las carpetas nunca se parten en dos renglones: la fila se desliza. */
/* LAS SOLAPAS NO SE DESPLAZAN (28/09/2026 · nd, Ramiro: «no va scroll con
   las solapas»). Estaban en una sola línea con barra: en un monitor de 1366
   la barra aparecía debajo de las carpetas y, además de fea, escondía
   solapas que nadie iba a buscar corriendo una barrita. Ahora bajan de
   renglón. Las carpetas se ven todas y la barra no existe. */
.gu-carpetas {
  display: flex; gap: 3px; flex-wrap: wrap; row-gap: 0;
  border-bottom: 2px solid var(--vnv-marca, var(--accent-amber));
  margin-bottom: 14px;
}
.gu-carpeta {
  background: var(--panel, #1b2233);
  border: 1px solid var(--border, #252d3f); border-bottom: none;
  color: var(--text);
  padding: 8px 14px; border-radius: 9px 9px 0 0; cursor: pointer;
  font-size: 13px; font-family: inherit;
  display: flex; align-items: center; gap: 7px;
  white-space: nowrap; flex: 0 0 auto;
}
.gu-carpeta:hover { color: var(--text, #e8ecf2); }
.gu-carpeta--on {
  background: var(--vnv-marca, var(--accent-amber));
  color: var(--vnv-marca-txt, var(--casa-activa-tinta, #1a1207));
  border-color: var(--vnv-marca, var(--accent-amber));
  font-weight: 600;
}
.gu-carpeta--on .tnd-n { background: rgba(0,0,0,.28); }

/* --- tramites con acuse (Prendas y REU) --- */
.tac-sub { margin: 0 0 12px; }
.tac-filtros { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 10px; }
.tac-chip {
  background: var(--panel, #1b2233); border: 1px solid var(--border, #252d3f);
  color: var(--text); padding: 5px 13px; border-radius: 999px;
  cursor: pointer; font-size: 12px; font-family: inherit;
}
.tac-chip:hover { color: var(--text, #e8ecf2); }
.tac-chip.on {
  background: var(--vnv-marca, var(--accent-amber));
  border-color: var(--vnv-marca, var(--accent-amber));
  color: var(--vnv-marca-txt, var(--casa-activa-tinta, #1a1207)); font-weight: 600;
}
.tac-busca {
  width: 100%; background: var(--panel-2, #202940);
  border: 1px solid var(--border, #252d3f); color: var(--text, #e8ecf2);
  border-radius: 8px; padding: 10px 13px; font-size: 13px;
  font-family: inherit; margin-bottom: 10px;
}
.tac-busca:focus { outline: none; border-color: var(--vnv-marca, var(--accent-amber)); }
.tac-tabla-caja { overflow-x: auto; }
.tac-tabla { width: 100%; border-collapse: collapse; font-size: 12.5px; }
.tac-tabla th {
  text-align: left; padding: 7px 9px; white-space: nowrap;
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 13px;
  text-transform: uppercase; letter-spacing: .05em;
  color: var(--text);
  background: color-mix(in srgb, var(--vnv-marca, #f2c200) 7%, transparent);
  border-bottom: 1px solid var(--border, #252d3f);
}
.tac-tabla td { padding: 7px 9px; border-bottom: 1px solid #22272e; }
.tac-fila { cursor: pointer; }
.tac-fila:hover td { background: var(--panel-2, #1a1f26); }
.tac-n, .tac-mono { font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; }
.tac-c { text-align: center; }
.tac-vacio { color: var(--text); font-style: italic; }
.tac-nada { text-align: center; color: var(--text);
  font-style: italic; padding: 24px 0; }

.tac-ficha {
  margin-top: 16px; border: 1px solid color-mix(in srgb, var(--vnv-marca, #f2c200) 42%, transparent);
  border-radius: 10px; padding: 14px 16px;
}
.tac-ficha-cab { display: flex; align-items: center; gap: 12px; margin-bottom: 12px; }
.tac-ficha-cab > div { flex: 1; min-width: 0; }
.tac-ficha-sub { display: block; font-size: 12px; color: var(--text);
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; margin-top: 2px; }
.tac-pasos { display: flex; gap: 7px; flex-wrap: wrap; margin-bottom: 14px; }
.tac-paso {
  background: var(--panel-2, #202940); border: 1px solid var(--border, #252d3f);
  color: var(--text); padding: 6px 13px; border-radius: 999px;
  cursor: pointer; font-size: 12px; font-family: inherit;
}
.tac-paso--on, .tac-paso.on {
  background: var(--vnv-marca, var(--accent-amber));
  border-color: var(--vnv-marca, var(--accent-amber));
  color: var(--vnv-marca-txt, var(--casa-activa-tinta, #1a1207)); font-weight: 600;
}
.tac-campos { display: flex; gap: 16px; flex-wrap: wrap; margin-bottom: 14px; }
.tac-campo { display: flex; flex-direction: column; gap: 5px; }
.tac-campo--ancho { flex: 1 1 260px; }
.tac-campo > span {
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 12px;
  text-transform: uppercase; letter-spacing: .05em;
  color: var(--text);
}
.tac-campo > input {
  background: var(--bg, #131824); border: 1px solid var(--border, #252d3f);
  color: var(--text, #e8ecf2); border-radius: 8px; padding: 8px 11px;
  font-size: 13px; font-family: inherit; min-width: 170px;
}
.tac-campo > input:focus { outline: none; border-color: var(--vnv-marca, var(--accent-amber)); }
.tac-fotos { display: flex; gap: 14px; flex-wrap: wrap; align-items: flex-start; }
.tac-foto { display: flex; flex-direction: column; gap: 6px; }
.tac-foto-rot {
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 12px;
  text-transform: uppercase; letter-spacing: .05em; color: var(--text);
}
.tac-foto img {
  width: 148px; height: 108px; object-fit: cover; border-radius: 8px;
  border: 1px solid var(--border, #252d3f); cursor: zoom-in; display: block;
}
.tac-foto-vacia {
  width: 148px; height: 108px; border-radius: 8px; cursor: pointer;
  border: 1px dashed color-mix(in srgb, var(--vnv-marca, #f2c200) 45%, transparent);
  background: color-mix(in srgb, var(--vnv-marca, #f2c200) 5%, transparent);
  display: grid; place-items: center;
  color: var(--text); font-size: 12px;
}
.tac-foto-vacia:hover { background: color-mix(in srgb, var(--vnv-marca, #f2c200) 11%, transparent); }
.tac-foto-quitar { align-self: flex-start; }
.tac-foto-aviso { font-size: 12px; color: var(--text); align-self: center; }
.tac-nota { font-size: 12px; color: var(--text); margin: 10px 0 0; }

.admin-usuarios-tag-baja {
  display: inline-block; margin-left: 9px; padding: 1px 8px; border-radius: 999px;
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 12px;
  text-transform: uppercase; letter-spacing: .06em;
  color: #f08a80; border: 1px solid color-mix(in srgb, var(--red, #e2574c) 45%, transparent);
  background: color-mix(in srgb, var(--red, #e2574c) 12%, transparent);
  vertical-align: middle;
}
/* ============================================================
   Modal de ventas: los botones tienen que LEERSE
   ------------------------------------------------------------
   Dos cosas distintas pasaban acá.

   1) "Soltar unidad" no se leía porque la letra tenía EL MISMO color que el
      fondo. La regla que le daba contraste es ".vnv-fijo .vnvb-pill--soltar"
      (dos clases) y más abajo hay un ".per-modal > .per-cab * { color:
      inherit }" que le gana por especificidad y le pisaba el color. Lo mismo
      con el campo de búsqueda, que en Jorge Giorgi quedaba negro sobre negro.
      Se repite la cadena entera para poder ganarle.

   2) El resto eran chicos de verdad: el cuerpo del modal está a 16-17px y
      estas píldoras estaban a 12, los botones del pie a 11,5. Encima el
      modal se escala para entrar en la pantalla, así que en una notebook
      bajaban a 10,7. Suben a un tamaño acorde al resto del modal.
      El ancho sobra: la cápsula usaba 876px de los 1278 que hay.
   ============================================================ */

/* --- 1. Contraste: que la letra no sea del color del fondo --- */
.per-modal > .per-cab .vnvb-pill--soltar,
.per-modal > .per-cab .vnvb-pill.activa,
.vnv-fijo .vnvb-pill--soltar,
.vnv-fijo .vnvb-pill.activa,
.gv-root .gv-panel-proceso > .per-overlay > .per-modal > .per-cab .vnvb-pill--soltar {
  background: var(--vnv-marca-txt, #131824);
  color: var(--vnv-marca, var(--accent-amber, #f2c200)) !important;
  border-color: var(--vnv-marca-txt, #131824);
}
/* El campo tiene fondo propio: sin él se confundía con la cápsula y no se
   veía dónde escribir.
   Y arregla algo peor que estaba escondido: el texto usaba --vnv-marca-txt,
   que en Giorgi es #1d1a06, casi negro. La cápsula no es amarillo pleno sino
   un 7% sobre el panel oscuro (#2a2d2f), así que daba 1,26:1: lo que se
   escribía era invisible. El color de texto de la marca sirve sobre el color
   PLENO de la marca, no sobre un 7% de ella. */
.per-modal > .per-cab .vnvb-caja .bap-input,
.vnv-fijo .vnvb-caja .bap-input,
.gv-root .gv-panel-proceso > .per-overlay > .per-modal > .per-cab .vnvb-caja .bap-input {
  background: var(--panel, #1b2233);
  border: 0;
  box-shadow: none;
  border-radius: 999px;
  color: var(--text, #ecf0f4);
}
.mo-claro .per-modal > .per-cab .vnvb-caja .bap-input,
.mo-claro .vnv-fijo .vnvb-caja .bap-input {
  background: #ffffff; color: #000;
}

/* --- 2. Tamaños: acordes al cuerpo del modal --- */
.vnv-fijo .vnvb-caja { min-height: 54px; }
.vnv-fijo .vnvb-caja .bap-input,
.vnv-modal .vnv-fijo .vnvb-caja .bap-input,
.vnv-compacto .vnvb-caja .bap-input { height: 44px; font-size: 16px; padding: 0 8px 0 20px; }
.vnv-fijo .vnvb-caja .bap-input::placeholder { font-size: 15px; }
.vnv-fijo .vnvb-acciones { gap: 7px; }
.vnv-fijo .vnvb-pill { height: 38px; padding: 0 16px; font-size: 14px; }
.vnv-fijo .vnvb-pill--doble > button { padding: 0 15px; font-size: 14px; }
.vnv-fijo .vnvb-acciones .mo-tema { width: 38px; height: 38px; font-size: 16px; }

/* La cápsula ocupa el renglón entero. Antes se quedaba en 876 de 1278 y al
   campo le sobraban 207px: el texto de ayuda salía cortado en "clien...". */
.vnv-fijo > .per-cab { display: block; }
.vnv-fijo > .per-cab > .vnv-buscador.vnvb-uni { width: 100%; }

/* El pie, con la misma vara. */
.vnv-fijo .vnv-pie .lu-btn,
.per-modal .vnv-pie .lu-btn,
.gv-root .gv-panel-proceso > .per-overlay > .per-modal > .vnv-pie .lu-btn {
  padding: 9px 16px; font-size: 14px;
}
.vnv-fijo .vnv-pie .lu-btn--sm { padding: 5px 11px; font-size: 12.5px; }
.vnv-fijo .vnv-pie-nota,
.per-modal .per-pie .vnv-pie-nota { font-size: 13px; }
.vnv-fijo .vnv-fecha-inline input { font-size: 13.5px; padding: 6px 9px; }
.vnv-fijo .per-pie { padding: 9px 14px; }
/* El bloque de la derecha arranca siempre en el mismo punto, así el botón de
   boleto cae bajo el mismo lugar de la pantalla. Al crecer los botones, el
   ancho reservado tiene que crecer con ellos o el truco se pierde. */
.vnv-fijo .vnv-pie-acciones { min-width: 440px; gap: 8px; }

/* ============================================================
   Menú lateral: los logos de las casas
   ------------------------------------------------------------
   Estaban a 15px de alto. Con logos de proporción 3:1 eso da unos 50px de
   ancho, contra los 46 de alto del logo de TCG que está tres renglones más
   arriba: al lado parecían una miniatura. Suben a 30, que es lo que entra
   cómodo en el ancho del menú.
   ============================================================ */
.ml-casa-logo { height: 30px; width: auto; max-width: 100%; object-fit: contain; }

/* Plegado a rail es donde peor estaban, y es justo cuando más se los mira:
   con Gestión de Ventas abierta el menú vive plegado. En 52px de ancho un
   logo apaisado no entra —quedaba de 9px de alto o cortado—, así que el rail
   pasa a 84. Ahí el ancho manda y el alto sale solo, sin deformar.
   Cada logo se apoya en una tarjeta del color de su casa: es lo que permite
   distinguirlas de un vistazo cuando no hay nombre al lado. */
:root { --ml-rail: 84px; }


/* ============================================================
   El hueco del medio: las tarjetas de la derecha eran 100px más angostas
   ------------------------------------------------------------
   Las dos columnas se emparejan fila a fila (Cliente↔Importes,
   Fechas↔Forma de pago, Unidad↔Financiación) gracias a un display:contents
   sobre .vnv-col, que hace que las tarjetas pasen a ser hijas directas de la
   grilla del cuerpo. Esa regla vive en un @media y quedó pisada por una
   .vnv-cuerpo .vnv-col { display:flex } escrita más abajo, con la misma
   especificidad y por lo tanto ganadora por orden.

   Al no haber display:contents, la columna volvió a ser una caja, pero sus
   tarjetas conservaron el grid-column: 2 del emparejado. Resultado: adentro
   de la columna derecha se armó una PISTA FANTASMA de 84px vacíos a la
   izquierda, y las tarjetas quedaron de 523px contra los 623px de la
   izquierda. Eso es el hueco del medio.
   ============================================================ */
.vnv-fijo .vnv-cuerpo--2col > .vnv-col { display: contents; }
/* Panel de Unidad: sin los títulos de grupo.
   Los rótulos de cada renglón ya dicen qué es cada dato ("Boleto de compra",
   "Perit. cotización"), así que el título del grupo repetía lo que ya se lee.
   Para que los grupos no se conviertan en una lista larga y pareja, quedan
   separados por un filo finito: cuesta 9px en vez de 28. */
.vnv-fijo .vnp-grupo h5 { display: none; }
.vnv-fijo .vnp-grupo + .vnp-grupo {
  margin-top: 5px; padding-top: 5px;
  border-top: 1px solid color-mix(in srgb, var(--vnv-marca, #6c7684) 30%, transparent);
}
/* "Boleto" era un título de grupo con un solo renglón que dice "Boleto papel":
   el título repetía la fila. Queda la fila sola. */
/* Las filas 3 a 5 las manda la ficha de Unidad, no la derecha: pide 573px y
   las tres tarjetas de enfrente juntas piden 478. Esos 95px de diferencia son
   los que la derecha reparte como aire. Se los saca a la ficha, que tiene 17
   renglones de una línea: 3px por renglón alcanzan. */
.vnv-fijo .vnp-lista > div { min-height: 21px; }
.vnv-fijo .vnp-grupo + .vnp-grupo { margin-top: 3px; padding-top: 3px; }
.vnv-fijo .vnp-cab { padding: 5px 12px; }
/* ============================================================
   Ficha de Unidad: que la separación de grupos SE NOTE
   ------------------------------------------------------------
   El filo entre grupos no se distinguía porque cada renglón trae su propio
   filo punteado y el del grupo era del mismo grosor: con diecisiete líneas
   iguales, una más no dice nada. Las de los renglones quedan como estaban;
   la del grupo pasa a ser más gruesa, entera (no punteada) y con el color
   de la casa a pleno. Es la única diferencia, y alcanza para leerla como
   separación.
   ============================================================ */
.vnv-fijo .vnp-grupo + .vnp-grupo {
  margin-top: 6px; padding-top: 6px;
  border-top: 3px solid color-mix(in srgb, var(--vnv-marca, #6c7684) 70%, transparent);
}

/* El cartel de estado estaba en 10px: escalado quedaba en 6 y no se leía. */
.vnv-fijo .vnp-chip { font-size: 14px; padding: 3px 12px; }

/* La cabecera de la ficha usaba dos renglones para decir una sola cosa.
   El nombre y la ayuda van en la misma línea. */
.vnv-fijo .vnp-hero { min-height: 0; padding: 7px 10px; }
.vnv-fijo .vnp-hero > div {
  display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; min-width: 0;
}
.vnv-fijo .vnp-hero p { margin: 0; }
/* ============================================================
   PROPUESTA — apretar el aire entre tarjetas y gastarlo arriba y abajo
   ------------------------------------------------------------
   Ningún dato se saca y ninguna tarjeta cambia de columna. Lo único que se
   toca es el espacio VACÍO: el relleno de cada tarjeta, el hueco entre
   campos y el hueco entre tarjetas. Son 1 o 2 píxeles por renglón, como
   dijo Ramiro, pero multiplicados por 19 campos y 5 tarjetas dan de sobra
   para agrandar el buscador y el pie y ADEMÁS bajar el alto del modal.

   Bajar el alto del modal es lo que más se nota: el modal se dibuja fijo y
   después se escala para entrar en la pantalla, así que cada píxel que baja
   sube la escala y agranda TODO, no sólo los botones.
   ============================================================ */

/* --- 1. El aire de las tarjetas (lo que se recupera) --- */
.vnv-fijo .vnb-cab { padding: 5px 12px; }
.vnv-fijo .vnb-body { padding: 8px 12px; gap: 5px; }
.vnv-fijo .vnv-cuerpo--2col .vnb-body { padding-bottom: 8px; }
.vnv-fijo .vnv-cuerpo--2col .vnv-col { gap: 11px; }
.vnv-fijo .vnb .per-campo > input,
.vnv-fijo .vnb .per-campo > select,
.vnv-fijo .vnb .cat-disparador,
.vnv-fijo .vnv-mesanio input { min-height: 32px; padding: 4px 10px; }
.vnv-fijo .per-campo--calc strong { min-height: 32px; padding: 4px 10px; }
/* Fechas respiraba de más porque se estiraba para emparejar columnas; eso
   ahora lo hace sola la tarjeta de Unidad, que es la que tiene lugar. */
.vnv-fijo .vnv-cuerpo--2col .vnv-col > .vnb.vnb--fechas > .vnb-body {
  padding-top: 9px; padding-bottom: 10px; gap: 7px;
}

/* --- 2. Adónde va lo recuperado: arriba --- */
.vnv-fijo .vnvb-caja { min-height: 60px; }
.vnv-fijo .vnvb-caja .bap-input,
.vnv-modal .vnv-fijo .vnvb-caja .bap-input,
.vnv-compacto .vnvb-caja .bap-input { height: 48px; font-size: 17.5px; padding: 0 8px 0 20px; }
.vnv-fijo .vnvb-caja .bap-input::placeholder { font-size: 16.5px; }
.vnv-fijo .vnvb-pill { height: 42px; padding: 0 18px; font-size: 16px; }
.vnv-fijo .vnvb-pill--doble > button { padding: 0 17px; font-size: 16px; }
.vnv-fijo .vnvb-acciones { gap: 8px; }
.vnv-fijo .vnvb-acciones .mo-tema { width: 42px; height: 42px; font-size: 18px; }

/* --- 3. Y abajo --- */
.vnv-fijo .vnv-pie .lu-btn,
.per-modal .vnv-pie .lu-btn,
.gv-root .gv-panel-proceso > .per-overlay > .per-modal > .vnv-pie .lu-btn {
  padding: 10px 18px; font-size: 16px;
}
.vnv-fijo .vnv-pie .lu-btn--sm { padding: 6px 12px; font-size: 14px; }
.vnv-fijo .vnv-pie-nota,
.per-modal .per-pie .vnv-pie-nota { font-size: 14.5px; }
.vnv-fijo .vnv-fecha-inline input { font-size: 15px; padding: 7px 10px; }
.vnv-fijo .per-pie { padding: 10px 14px; }
.vnv-fijo .vnv-pie-acciones { min-width: 480px; gap: 9px; }
/* Con las tarjetas convertidas en hijas de la grilla, la separación entre
   filas la da el row-gap del cuerpo. El margin-top que traían de cuando cada
   columna era una caja se suma encima: separa de más y deja a la ficha de
   Unidad seis píxeles más abajo que la última tarjeta de enfrente. */
.vnv-fijo .vnv-cuerpo--2col .vnb + .vnb,
.vnv-fijo .vnv-cuerpo--2col .vnv-col > .vnb + .vnv-unidad { margin-top: 0; }
/* Logos del menú: sólo la silueta blanca, sin tarjeta de color detrás, y un
   punto más grandes. Lo que marca en cuál casa estás parado sigue siendo el
   filo de color de la izquierda, que ya estaba. */
.ml-casa-logo { height: 31px; width: auto; max-width: 100%; object-fit: contain; }


/* ============================================================
   Informe de Ventas en modo claro
   ------------------------------------------------------------
   Casi todo el informe está escrito con las variables del tema (--panel,
   --panel-2, --border, --text, --text-muted), así que el modo claro se
   resuelve redefiniéndolas sobre el panel. Sólo quedan a mano los pocos
   colores que estaban puestos fijos.

   La paleta es la MISMA que ya usaba la impresión, a propósito: lo que se ve
   en pantalla en modo claro es lo que sale por la impresora.
   ============================================================ */
.ivj-panel.ivj-claro {
  /* «--bg» faltaba y por eso Liquidación de Comisiones quedaba con el fondo
     del tema oscuro y la tinta de este panel claro: negro sobre negro. */
  --bg: #ffffff;
  --panel: #ffffff;
  --panel-2: #eeeeee;
  --panel-3: #e6e6e6;
  --border: #c9ced6;
  --text: #000000;
  --text-muted: #000000;
  background: #ffffff; color: #000;
}
.ivj-claro .ivj-reporte { background: #ffffff; border-color: #c9ced6; box-shadow: 0 1px 3px rgba(16,20,28,.08); }
.ivj-claro .ivj-header { background: #f2f2f2; border-radius: 8px 8px 0 0; padding: 8px 10px; }
.ivj-claro .ivj-tabla thead th { background: #d8d8d8; color: #000; }
.ivj-claro .ivj-tabla .ivj-th-sub th { background: #d8d8d8; color: #000; }
.ivj-claro .ivj-tabla tbody tr:nth-child(even) td { background: #f6f6f6; }
/* El cebrado de las filas pares tapaba el resaltado: una fila sí y otra no.
   Las cuatro columnas que se leen tienen que estar pintadas en TODAS. */
.ivj-claro .ivj-tabla tbody tr:nth-child(even) td.ivj-col-destacada,
.ivj-claro .ivj-tabla tbody tr:hover td.ivj-col-destacada { background: #fbe37a; }
.ivj-claro .ivj-tabla tbody tr:hover td { background: #e9eef5; }
.ivj-claro .ivj-fila-totales td { background: #e4e4e4; }
/* Las cuatro cifras que se leen: Total VN, OM, VO y Total Ventas. */
.ivj-claro .ivj-th-destacada, .ivj-claro .ivj-col-destacada { background: #fbe37a; }
.ivj-claro .ivj-col-destacada, .ivj-claro .ivj-col-destacada .ivj-celda { color: #000; font-weight: 700; }
.ivj-claro .ivj-fila-totales td.ivj-col-destacada { background: var(--accent-amber, #f2c200); }
/* La fila de TOTALES tiene su propio color de número, ámbar, puesto con un
   selector más específico que el de las otras filas. Sobre el naranja del
   modo claro quedaba ámbar sobre ámbar: no se leía. Hay que repetir la
   cadena entera para poder ganarle. */
.ivj-claro .ivj-fila-totales td.ivj-col-destacada .ivj-celda { color: #000; }
/* El título de las tarjetas estaba en blanco fijo: sobre claro desaparecía. */
.ivj-claro .ivj-ind-titulo { color: #000; }
.ivj-claro .ivj-ind-card { background: #f4f6f8; border-color: #c9ced6; }
.ivj-claro .ivj-celda { color: #000; background: transparent; border-color: transparent; }
.ivj-claro .ivj-celda:hover, .ivj-claro .ivj-celda:focus { background: #ffffff; border-color: #9aa4b2; }
.ivj-claro .ivj-plan-input { background: #ffffff; color: #000; border-color: #9aa4b2; }
.ivj-claro .ivj-mes-select { background: #ffffff; color: #000; border-color: #9aa4b2; }
.ivj-claro .ivj-rank-barra-track { background: #dde2e8; }
.ivj-claro .ivj-vs-valor { color: #000; }

/* ============================================================
   El resaltado de las cuatro cifras, en TODAS las filas
   ------------------------------------------------------------
   Hay un cebrado general para cualquier tabla del sistema:
       tr:nth-child(2n) td { background: rgba(255,255,255,0.015) }
   Ese selector pesa más que ".ivj-col-destacada", así que en las filas pares
   pintaba encima y el resaltado desaparecía: quedaba una fila sí y una no.
   Pasaba en los dos temas y no lo habíamos visto porque en oscuro el gris es
   muy suave. Se sube la especificidad nombrando la tabla y la celda.
   ============================================================ */
.ivj-tabla tbody tr td.ivj-col-destacada {
  background: color-mix(in srgb, var(--accent-amber) 24%, transparent);
}
.ivj-tabla tbody tr.ivj-fila-totales td.ivj-col-destacada {
  background: color-mix(in srgb, var(--accent-amber) 50%, var(--panel-2));
}
.ivj-claro .ivj-tabla tbody tr td.ivj-col-destacada { background: #fbe37a; }
.ivj-claro .ivj-tabla tbody tr.ivj-fila-totales td.ivj-col-destacada { background: var(--accent-amber, #f2c200); }

/* ============================================================
   Impresión: ninguna columna puede cortar el número
   ------------------------------------------------------------
   El ancho de cada columna lo reparte el navegador según el texto del
   encabezado. "Total VN" y "Total Ventas" son largos y se llevan lugar de
   sobra; "OM" y "VO" tienen dos letras y quedaban en 37px. Ahí entra un
   dígito, pero la fila de TOTALES se imprime a 19px y "11" pide 34: salía
   partido al medio, como se ve en la foto.

   No se arregla columna por columna: probado con un mes de tres dígitos
   también cortaban KWID y las de Retoma. Se le pone el mismo piso a TODAS
   las celdas numéricas, calculado para que entre el número más grande que
   puede aparecer al tamaño del total. Sobra ancho en la hoja: la tabla usa
   1136px de los ~1390 que da el A4 apaisado con el zoom de impresión.
   ============================================================ */
@media print {
  .ivj-tabla tbody td.ivj-num,
  .ivj-tabla thead .ivj-th-destacada { min-width: 66px !important; }
  /* El campo ocupa la celda entera: sin esto conserva su propio mínimo de
     18px y sigue recortando aunque la columna sea más ancha. */
  .ivj-tabla td.ivj-num .ivj-celda { min-width: 100% !important; width: 100% !important; }

  /* Y el resaltado, también en papel. El cebrado de la impresión lleva
     !important, así que le pisaba el color a las cuatro columnas en las filas
     pares: en la foto se ve BUSTO y JALIL sin pintar y las otras sí. */
  .ivj-tabla tbody tr:nth-child(even) td.ivj-col-destacada { background: #fbe37a !important; }
}

/* ============================================================
   Detalle de Suscripciones · barra de arriba y encabezado inmóvil
   ============================================================ */

/* --- La barra de arriba, con el color de la casa --- */
.sc-barra-tit {
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
  padding: 10px 16px; margin: 0 0 10px;
  border-radius: 10px;
  background: color-mix(in srgb, var(--casa-color, #4f8ef7) 14%, var(--panel-2));
  border: 1px solid color-mix(in srgb, var(--casa-color, #4f8ef7) 45%, transparent);
  border-left: 5px solid var(--casa-color, #4f8ef7);
}
.sc-barra-tit-h {
  margin: 0; font-size: 22px; font-weight: 700; letter-spacing: .2px;
  color: var(--text, #e8ecf2);
}
.sc-barra-tit-casa {
  font-size: 19px; font-weight: 700; letter-spacing: .3px;
  color: var(--text);
}
.sc-barra-tit-sep { flex: 1; }
.sc-barra-tit-cant { font-size: 13px; color: var(--text); white-space: nowrap; }

/* --- Los títulos de las columnas: más grandes y con el color de la casa --- */
.sc-panel .sc-table thead th {
  font-size: 13px; font-weight: 700; letter-spacing: .3px;
  color: var(--text, #e8ecf2);
  background: color-mix(in srgb, var(--casa-color, #4f8ef7) 20%, var(--panel-2));
  border-bottom: 2px solid var(--casa-color, #4f8ef7);
}
/* La primera columna se fija también a la izquierda, así que necesita su
   propio fondo o las celdas de al lado se le ven por debajo al desplazar. */
.sc-panel .sc-table thead th.sc-cant-col {
  background: color-mix(in srgb, var(--casa-color, #4f8ef7) 28%, var(--panel-2)) !important;
  z-index: 3;
}

/* --- Encabezado inmóvil ---
   El "position: sticky" ya estaba en el CSS, pero cada th traía un
   "position: relative" EN LÍNEA (hacía falta para montar la manija de ancho
   de columna) y el inline le gana a cualquier hoja de estilos. Por eso el
   título se iba con el scroll. En el JSX pasa a ser sticky; acá se asegura
   el top y la altura para que no lo tape nada. */
.sc-panel .sc-table thead th { top: 0; }
/* La columna "Cant." está despegada A PROPÓSITO con un
   ".sc-cant-col { position: static !important }": sticky sobre un <td> con
   border-collapse:collapse se ve en blanco en Chrome. Pero esa regla no
   distingue el cuerpo del encabezado, así que también despegaba el TÍTULO y
   al bajar quedaba la fila de títulos completa menos "Cant.".
   El cuerpo se deja como está —ahí el problema es real— y se vuelve a fijar
   sólo el th, y sólo en vertical (left: auto). */
.sc-panel .sc-table thead th.sc-cant-col {
  position: sticky !important; top: 0 !important; left: auto !important; z-index: 3 !important;
}

/* --- Fijar tablero --- */
.sc-btn--fijar { display: inline-flex; align-items: center; gap: 6px; cursor: pointer; }
.sc-btn--fijar input { margin: 0; cursor: pointer; }
.sc-table-scroll--fija {
  max-height: calc(calc(100dvh / var(--tcg-z, 1)) - 150px);
  overscroll-behavior: contain;   /* la rueda no arrastra la pantalla entera */
}

/* ============================================================
   Detalle de Suscripciones · filtro por casa e indicador de origen
   ============================================================ */
.sc-filtro-casa {
  display: inline-flex; align-items: center; gap: 7px;
  padding: 4px 10px; border-radius: 8px;
  background: var(--panel-2); border: 1px solid var(--border);
  font-size: 12px; color: var(--text); white-space: nowrap;
}
.sc-filtro-casa select {
  background: transparent; border: 0; color: var(--text);
  font-family: inherit; font-size: 13px; font-weight: 600; cursor: pointer; outline: none;
}

/* La cifra que se mira: cuántas aportó otra casa. */
.sc-origen-valor {
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 26px; font-weight: 700;
  color: var(--text); line-height: 1.1;
}
.sc-origen-pct { font-size: 15px; font-weight: 700; margin-left: 7px; opacity: 1; }
.sc-origen-sub { font-size: 12px; color: var(--text); margin: 2px 0 8px; }

/* Una sola barra con el reparto, para verlo de un vistazo. */
.sc-origen-barra {
  display: flex; height: 9px; border-radius: 999px; overflow: hidden;
  background: var(--panel); margin-bottom: 8px;
}
.sc-origen-barra-propia { background: var(--accent-blue, #4f8ef7); }
.sc-origen-barra-otras  { background: var(--accent-amber, #f2c200); }
.sc-origen-barra-sd     { background: color-mix(in srgb, var(--text-muted, #8b95a5) 55%, transparent); }

.sc-origen-lista { display: flex; flex-direction: column; gap: 3px; }
.sc-origen-fila {
  display: flex; align-items: center; gap: 7px; font-size: 12px;
  padding: 2px 0; border-bottom: 1px solid var(--border);
}
.sc-origen-fila:last-child { border-bottom: none; }
.sc-origen-punto { width: 9px; height: 9px; border-radius: 50%; flex: 0 0 auto; }
.sc-origen-punto--propia { background: var(--accent-blue, #4f8ef7); }
.sc-origen-punto--otras  { background: var(--accent-amber, #f2c200); }
.sc-origen-punto--sd     { background: color-mix(in srgb, var(--text-muted, #8b95a5) 55%, transparent); }
.sc-origen-nom { flex: 1; color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.sc-origen-fila b { font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; color: var(--text); }
.sc-origen-fila i { font-style: normal; color: var(--text); min-width: 42px; text-align: right; }


/* ── Botones para elegir tema ──────────────────────────────────────────
   El botón ES el color: mitad acento, mitad superficie, así se ve de un
   vistazo cómo queda el tema. Antes era una cajita del tono del panel con
   un punto chico adentro y sobre fondo oscuro no se distinguía.
   Va en baseCss: la primera vez quedó en otra hoja y no llegaba. */
.gv-temas { display: inline-flex; align-items: center; gap: 6px; margin-left: 6px; }
.gv-tema {
  width: 26px; height: 26px; min-width: 26px; min-height: 26px;
  padding: 0; border-radius: 50%; cursor: pointer; flex: 0 0 auto;
  border: 2px solid rgba(255,255,255,.28); display: inline-block;
  transition: transform .12s, box-shadow .12s, border-color .12s;
}
.gv-tema:hover { transform: scale(1.12); border-color: rgba(255,255,255,.6); }
.gv-tema--on {
  border-color: #ffffff;
  box-shadow: 0 0 0 3px rgba(255,255,255,.22), 0 1px 4px rgba(0,0,0,.5);
}
.tcg-temas-fijo {
  position: fixed; top: 10px; right: 14px; z-index: 99998;
  display: flex; align-items: center; gap: 6px;
  padding: 5px 9px; border-radius: 999px;
  background: var(--panel, #1b2233);
  border: 1px solid var(--border, #252d3f);
  box-shadow: 0 2px 10px rgba(0,0,0,.35);
}
@media print { .tcg-temas-fijo { display: none !important; } }

/* ── Indicadores del pie de los informes ───────────────────────────────
   Se veían bien aislados pero no en la pantalla: alguna regla de más arriba
   les pisaba el color. Van con prioridad y en la hoja global para que no
   dependa de cuál gana. Los rótulos y las notas a 10,5px con gris claro;
   el valor en el acento. */
.inf-root .inf-ind, .inf-pie .inf-ind {
  background: var(--panel-2, #202940) !important;
  border: 1px solid var(--border, #252d3f) !important;
}
.inf-root .inf-ind-label, .inf-pie .inf-ind-label,
.inf-root .inf-ind-nota, .inf-pie .inf-ind-nota,
.inf-root .inf-pie-ayuda, .inf-pie .inf-pie-ayuda {
  color: var(--text) !important;
}
.inf-root .inf-ind-label, .inf-pie .inf-ind-label {
  font-size: 12px !important; font-weight: 600 !important;
}
.inf-root .inf-ind-nota, .inf-pie .inf-ind-nota { font-size: 12px !important; }
.inf-root .inf-ind-valor, .inf-pie .inf-ind-valor {
  color: var(--text, #ecf0f4) !important; font-size: 16px !important; font-weight: 700 !important;
}
.inf-root .inf-pie-total, .inf-pie .inf-pie-total {
  background: var(--panel-2, #202940) !important;
  color: var(--text, #ecf0f4) !important;
}
/* En modo claro se invierte: gris oscuro sobre superficie clara. */
.tema-claro .inf-ind, .tema-claro .inf-pie-total {
  background: #ffffff !important; border-color: #d5dbe5 !important;
}
.tema-claro .inf-ind-label, .tema-claro .inf-ind-nota,
.tema-claro .inf-pie-ayuda { color: #000 !important; }
.tema-claro .inf-ind-valor, .tema-claro .inf-pie-total { color: #000 !important; }




/* ── Modal embebido dentro de otro modal ───────────────────────────────
   Cobranzas e Inscripciones se abren adentro del modal de gestoría. Su
   overlay tomaba el ancho de la VENTANA (1680px medidos) en vez del hueco
   que le toca (1046px), así que el contenido se corría al costado y el
   panel lo recortaba.
   Con prioridad y en la hoja global a propósito: las reglas equivalentes
   existían en otra de las cinco hojas del archivo y no llegaban. */
.gu-embebido, .gu-insc { min-width: 0 !important; width: 100%; }
.gu-embebido > .per-overlay,
.gu-insc > .per-overlay {
  position: static !important; inset: auto !important;
  width: 100% !important; max-width: 100% !important;
  padding: 0 !important; background: none !important;
  display: block !important; overflow: visible !important;
}
.gu-embebido > .per-overlay > .per-modal,
.gu-insc > .per-overlay > .per-modal {
  width: 100% !important; max-width: 100% !important; min-width: 0 !important;
  transform: none !important; box-shadow: none !important;
}

/* ── Tablas anchas dentro de un panel ──────────────────────────────────
   El envoltorio de tabla tiene overflow-x:auto, pero al ser hijo de un
   contenedor flex su min-width vale "auto": no se achica por debajo de su
   contenido, se estira con la tabla y el desplazamiento nunca se activa.
   El panel entonces recorta lo que sobra y la pantalla se va al costado.
   Medido en cobranzas: tabla de 1800px dentro de 1046, se salía 449px.

   Va al final de baseCss a propósito. El archivo tiene cinco hojas de
   estilos distintas; ésta es la global. Las veces anteriores la escribí en
   otra hoja y dentro de un @media de 720px, así que sólo corría en celular. */
.vn-tabla-wrap, .com-tabla-cont, .ing-tabla-cont,
.per-modal [class$="-tabla-wrap"], .per-modal [class$="-tabla-cont"] {
  min-width: 0 !important; max-width: 100%; overflow-x: auto;
}


/* Entrar con Google. Todavía no está habilitado: se deja el lugar hecho
   para no rehacer el diseño cuando Vesubio termine de configurar Workspace. */
.ent-o {
  display: flex; align-items: center; gap: 12px;
  margin: 20px auto 14px; max-width: 292px;
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 12px;
  color: var(--text); text-transform: uppercase;
}
.ent-o::before, .ent-o::after {
  content: ""; flex: 1; height: 1px; background: var(--border, #252d3f);
}
.ent-google {
  display: flex; align-items: center; justify-content: center; gap: 9px;
  width: 100%; max-width: 292px; margin: 0 auto 16px;
  padding: 11px 14px; border-radius: 10px;
  border: 1px solid var(--border, #252d3f);
  background: var(--panel-2, #202940);
  color: var(--text, #ecf0f4);
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 13px; font-weight: 600;
  cursor: pointer; transition: border-color .13s;
}
.ent-google:hover:not(:disabled) { border-color: var(--accent-amber, #f2c200); }
.ent-google:disabled { opacity: .5; cursor: not-allowed; }
.ent-google-pronto {
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 12px; font-weight: 700;
  text-transform: uppercase; letter-spacing: .06em;
  padding: 2px 7px; border-radius: 20px;
  background: var(--border, #252d3f); color: var(--text);
}

/* Elegir usuario, arriba de la clave. Tiene su propia zona con una línea
   que la separa del teclado: antes el desplegable flotaba encima y se
   superponía con «Tu clave». */
.ent-cab {
  /* Centrada, en la misma columna que el teclado y los puntos: pegada a la
     izquierda la pantalla quedaba desbalanceada. */
  display: flex; flex-direction: column; align-items: center; gap: 7px;
  padding: 0 0 18px; margin: 0 0 24px;
  border-bottom: 1px solid var(--border, #252d3f);
}
.ent-cab-sel { min-width: 0; width: 100%; max-width: 292px; text-align: center; }
.ent-cab-select {
  appearance: none; -webkit-appearance: none;
  /* 292px = las tres columnas del teclado (86×3) más sus separaciones:
     el desplegable queda exactamente del ancho del pad. */
  width: 100%; max-width: 292px;
  /* Con caja propia, no flotando: el desplegable es el control principal de
     esta pantalla y tiene que verse como tal. */
  padding: 11px 38px 11px 14px; margin: 0;
  border-radius: 10px;
  background: var(--panel-2, #202940);
  border: 1px solid var(--border, #252d3f);
  cursor: pointer;
  /* Un <select> NO hereda el color del texto: el navegador le pone negro. */
  color: var(--text, #ecf0f4);
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 17px; font-weight: 600;
  letter-spacing: .01em;
  background-image: linear-gradient(45deg, transparent 50%, currentColor 50%),
                    linear-gradient(135deg, currentColor 50%, transparent 50%);
  background-position: right 17px center, right 12px center;
  background-size: 6px 6px, 6px 6px;
  background-repeat: no-repeat;
  transition: border-color .13s, background .13s;
}
.ent-cab-select:hover { border-color: var(--accent-amber, #f2c200); }
.ent-cab-select:focus-visible {
  outline: 2px solid var(--accent-amber, #f2c200); outline-offset: 2px;
}
.ent-cab-select option {
  background: var(--panel, #1b2233); color: var(--text, #ecf0f4);
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 14px; padding: 8px;
}
.ent-cab-rol {
  /* Se pegaba al desplegable y quedaba montado encima. */
  text-align: center; margin-top: 8px;
}


/* Las tarjetas de la portada llevan el color de la casa en su filo. En los
   temas que no son Color CE, ese filo pasa a ser el acento del tema. */
.tema-ambar .vista-card, .tema-claro .vista-card, .tema-perla .vista-card,
.tema-ambar .vista-card--giorgi, .tema-ambar .vista-card--vesubio, .tema-ambar .vista-card--ginza,
.tema-claro .vista-card--giorgi, .tema-claro .vista-card--vesubio, .tema-claro .vista-card--ginza,
.tema-perla .vista-card--giorgi, .tema-perla .vista-card--vesubio, .tema-perla .vista-card--ginza {
  --c: var(--accent-amber);
}
/* Y en claro el brillo de arriba tiene que ser una sombra, no una luz. */
.tema-claro .vista-card {
  background:
    linear-gradient(135deg, rgba(0,0,0,.028) 0%, rgba(0,0,0,.008) 30%, rgba(0,0,0,0) 58%),
    var(--panel, #ffffff);
  box-shadow: 0 1px 3px rgba(15,23,42,.10), 0 4px 12px rgba(15,23,42,.06);
}
.tema-claro .vista-cards { background: transparent; border-color: var(--border); }

/* En modo claro el texto de las tablas salía casi blanco: el gris atenuado
   pensado para fondo oscuro no contrasta sobre blanco. Se refuerza. */
.tema-claro td, .tema-claro th,
.tema-claro .lu-td, .tema-claro .com-td, .tema-claro .ing-td,
.tema-claro .gu-td, .tema-claro .rv-td {
  color: var(--text, #1f2937);
}
.tema-claro .per-sub, .tema-claro .com-ayuda, .tema-claro .lu-sub {
  color: var(--text);
}
/* Y el acento como TEXTO usa la tinta oscura, no el relleno vivo. */
.tema-claro .per-titulo, .tema-claro h4, .tema-claro .sec-titulo {
  color: var(--accent-tinta, var(--accent-amber));
}

/* ══ Los temas mandan también en Gestión de Ventas ═════════════════════
   Ese módulo pinta con --vnv-marca, que fijan 8 reglas por concesionario
   (.vnv-marca--renault, --peugeot, --toyota). Por eso al elegir Ámbar o
   Gris azulado seguía viéndose el color de la casa: sus 260 reglas nunca
   miraban el tema.
   En "Color CE" no se toca nada y todo queda como hoy. En los otros temas,
   --vnv-marca pasa a ser el acento del tema.
   La especificidad de estas reglas (.tema-x .clase.clase) le gana a las
   originales (.clase.clase), así que no hace falta !important. */
/* Apunta a la CLASE DE MARCA, no al tipo de modal. Antes nombraba
   .vnv-modal, pero hay más de veinte familias — ing-modal, ret-modal,
   cvn-modal, vna-modal, vnl-modal… — y todas quedaban afuera. Lo único que
   comparten es .vnv-marca--renault / --peugeot / --toyota.
   Se repite el selector de tema dos veces para ganarle en peso a la regla
   original .vnv-modal.vnv-marca--renault, que tiene dos clases. */
.tema-ambar.tema-ambar .vnv-marca--renault,
.tema-ambar.tema-ambar .vnv-marca--peugeot,
.tema-ambar.tema-ambar .vnv-marca--toyota,
.tema-claro.tema-claro .vnv-marca--renault,
.tema-claro.tema-claro .vnv-marca--peugeot,
.tema-claro.tema-claro .vnv-marca--toyota,
.tema-perla.tema-perla .vnv-marca--renault,
.tema-perla.tema-perla .vnv-marca--peugeot,
.tema-perla.tema-perla .vnv-marca--toyota,
.tema-ambar.tema-ambar .vnv-modal,
.tema-claro.tema-claro .vnv-modal,
.tema-perla.tema-perla .vnv-modal {
  --vnv-marca: var(--accent-amber);
  --vnv-marca-luz: var(--accent-amber);
  --vnv-marca-txt: var(--accent-texto);
}
/* Lo mismo para la tinta del módulo, que se calcula aparte. */
.tema-ambar .gv-root, .tema-claro .gv-root, .tema-perla .gv-root {
  --gv-tinta: var(--accent-amber);
}

/* ══ Movido desde una hoja local ══════════════════════════════════════
   Estas reglas vivían dentro de la hoja de una pantalla, que sólo se
   carga en esa pantalla. Por eso no llegaban al resto de la aplicación.
   ══════════════════════════════════════════════════════════════════ */

/* red de contención */
/* Red de contención: cuando una pantalla se rompe, en vez de dejar la
     aplicación en blanco se muestra qué pasó y se puede seguir trabajando. */
  .tcg-error{ margin:22px auto; max-width: 720px; padding:20px 22px;
    background:var(--panel, #1b2233); border:1px solid var(--border, #252d3f);
    border-left:4px solid #f17176; border-radius:12px; }
  .tcg-error-tit{ font-size: 15px; font-weight:700; color:#f17176; margin-bottom:7px; }
  .tcg-error-txt{ font-size: 12.5px; color:var(--text);
    margin:0 0 12px; line-height:1.5; }
  .tcg-error-det{ font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 12px;
    color:var(--text, #ecf0f4); background:var(--panel-2, #202940);
    border-radius:8px; padding:11px 13px; margin:0 0 13px;
    white-space:pre-wrap; word-break:break-word; max-height:210px; overflow:auto; }
  .tcg-error-btns{ display:flex; gap:9px; flex-wrap:wrap; }

  /* == Botones: tamaño, jerarquía y estados ==========================
     Tres tamaños y tres niveles. La regla que más ayuda a alguien que
     recién empieza: UN SOLO botón principal por pantalla, el que completa
     la tarea. El resto queda en secundario o en texto, así el ojo va
     derecho al correcto sin tener que leerlos todos. */

  /* -- Tamaño -- los tres ya eran de los más usados en el archivo. */
  .tcg-btn, .lu-btn, .pat-btn, .rv-btn, .inf-btn, .gv-btn, .sd-btn {
    padding: 7px 12px; font-size: 12px; line-height: 1.25;
    border-radius: 8px; border: 1px solid var(--border, #252d3f);
    background: var(--panel-2, #202940); color: var(--text, #ecf0f4);
    cursor: pointer; font-weight: 600;
    transition: background .13s, border-color .13s, color .13s;
  }
  .tcg-btn--sm, .lu-btn--sm, .pat-btn--sm, .rv-btn--sm, .inf-btn--sm {
    padding: 5px 10px; font-size: 12px;
  }
  .tcg-btn--lg, .lu-btn--lg, .pat-btn--lg, .rv-btn--lg {
    padding: 9px 16px; font-size: 13px;
  }

  /* -- Principal -- el que completa la tarea. Lleva el color de la casa.
        Va uno solo por pantalla: si hay dos, ninguno resalta. */
  .tcg-btn--principal, .lu-btn.primary, .pat-btn.primary,
  .rv-btn.primary, .inf-btn.primary, .gv-btn.primary {
    background: var(--accent-amber, #f2c200);
    border-color: var(--accent-amber, #f2c200);
    color: var(--accent-texto, #131824); font-weight: 700;
  }
  .tcg-btn--principal:hover, .lu-btn.primary:hover, .pat-btn.primary:hover,
  .rv-btn.primary:hover, .inf-btn.primary:hover {
    filter: brightness(1.08);
  }

  /* -- Secundario -- el resto de las acciones. */
  .tcg-btn--secundario {
    background: transparent; border-color: var(--border, #252d3f);
    color: var(--text, #ecf0f4);
  }
  .tcg-btn--secundario:hover { background: var(--panel-2, #202940); }

  /* -- De texto -- salir, cancelar, volver. Presentes pero sin peso. */
  .tcg-btn--texto {
    background: transparent; border-color: transparent;
    color: var(--text); font-weight: 600;
  }
  .tcg-btn--texto:hover { color: var(--text, #ecf0f4); background: var(--panel-2, #202940); }

  /* -- Estados -- valen para TODO botón del sistema, tenga o no clase. */
  .tcg-btn:hover, .lu-btn:hover, .pat-btn:hover, .rv-btn:hover,
  .inf-btn:hover, .gv-btn:hover, .sd-btn:hover {
    border-color: var(--accent-amber, #f2c200);
  }
  /* El foco del teclado tiene que VERSE. Sin esto, quien carga datos con el
     teclado todo el día no sabe dónde está parado. Se usa :focus-visible y
     no :focus para que el contorno no aparezca también al hacer clic. */
  button:focus-visible, a:focus-visible,
  input:focus-visible, select:focus-visible, textarea:focus-visible,
  [role="button"]:focus-visible, [tabindex]:focus-visible {
    outline: 2px solid var(--accent-amber, #f2c200);
    outline-offset: 2px; border-radius: 6px;
  }
  button:disabled, .tcg-btn:disabled, .lu-btn:disabled,
  .pat-btn:disabled, .rv-btn:disabled, .inf-btn:disabled {
    opacity: .42; cursor: not-allowed; filter: none;
  }
  button:disabled:hover { border-color: var(--border, #252d3f); }

  /* Selector de color al pie del menú lateral. */
  .ml-temas{ margin-top:auto; padding:10px 6px 4px; border-top:1px solid var(--border,#252d3f); }

  /* En modo claro el logo blanco desaparece sobre el fondo. Se lo pasa a un
     gris intermedio invirtiéndolo y bajándole el contraste. Lo mismo con los
     logos de las tres casas del menú. */
  .tema-claro .ml-marca, .tema-claro .ml-casa-logo,
  .tema-claro .tcg-logo, .tema-claro .ent-marca img,
  .tema-claro .gv-logo, .tema-claro img[alt="TCG"] {
    /* Los logos son siluetas blancas: sobre fondo claro desaparecen.
       Antes la regla sólo alcanzaba al del menú. */
    filter: invert(1) brightness(.42) contrast(1.15);
  }

  /* Elegir tema: cuatro puntos de color, del mismo tamaño que el botón de
     modo que tienen al lado. Sin texto a propósito. */
  /* Los botones de tema, fijos arriba a la derecha en toda la aplicación
     salvo dentro del módulo, que los tiene en su barra. */
  .tcg-temas-fijo{ position:fixed; top:10px; right:14px; z-index:99998;
    display:flex; align-items:center; gap:6px;
    padding:5px 8px; border-radius:999px;
    background:color-mix(in srgb, var(--panel, #1b2233) 88%, transparent);
    border:1px solid var(--border, #252d3f);
    box-shadow:0 2px 10px rgba(0,0,0,.35); }
  @media print { .tcg-temas-fijo{ display:none !important; } }

  /* El botón ES el color: antes era una cajita del tono del panel con un
     punto chico adentro, y sobre fondo oscuro no se veía nada. */
  .gv-temas{ display:inline-flex; align-items:center; gap:6px; margin-left:6px; }
  .gv-tema{ width:26px; height:26px; padding:0; border-radius:50%; cursor:pointer;
    border:2px solid rgba(255,255,255,.28); display:inline-block;
    transition:transform .12s, box-shadow .12s, border-color .12s; }
  .gv-tema:hover{ transform:scale(1.12); border-color:rgba(255,255,255,.6); }
  .gv-tema-punto{ display:none; }
  .gv-tema--on{
    border-color:#ffffff;
    box-shadow:0 0 0 3px rgba(255,255,255,.22), 0 1px 4px rgba(0,0,0,.5);
  }

  /* El tema "Gris azulado" lleva el perlado más marcado: es lo que lo
     distingue de los otros. El resto queda con el brillo suave de siempre. */
  .tema-perla .gv-panel, .tema-perla .per-modal, .tema-perla .inf-ind,
  .tema-perla .pat-panel, .tema-perla .lu-tarjeta, .tema-perla .tcg-perla {
    background-image: linear-gradient(180deg,
      rgba(255,255,255,.072) 0%, rgba(255,255,255,.026) 42%, rgba(255,255,255,0) 100%);
    box-shadow: inset 0 1px 0 rgba(255,255,255,.10), 0 1px 3px rgba(0,0,0,.34);
  }

  /* ── Perlado de superficies ──────────────────────────────────────
     Los paneles planos sobre fondo oscuro se confunden con el fondo. En vez
     de aclararlos (que rompería la escala), se les da un degradado apenas
     perceptible y una línea de luz arriba, como si les diera luz de arriba.
     Los valores son deliberadamente bajos: si se llega a NOTAR el brillo,
     está de más. Lo que tiene que notarse es que el panel se despega. */
  .tcg-perla,
  .gv-root .gv-panel, .gv-root .gv-tarjeta,
  .inf-root .inf-ind, .inf-root .inf-pie-total,
  .pat-root .pat-panel, .pat-root .pat-kpi-card,
  .per-modal, .lu-tarjeta, .rv-tarjeta {
    background-image: linear-gradient(180deg,
      rgba(255,255,255,.040) 0%,
      rgba(255,255,255,.014) 38%,
      rgba(255,255,255,0)    100%);
    box-shadow: inset 0 1px 0 rgba(255,255,255,.055),
                0 1px 2px rgba(0,0,0,.28);
  }
  /* Las barras superiores llevan el perlado al revés: la luz entra por
     abajo, así se separan del contenido en vez de flotar sobre él. */
  .gv-root .gv-menubar, .tcg-envoltura {
    background-image: linear-gradient(0deg,
      rgba(255,255,255,.022) 0%, rgba(255,255,255,0) 100%);
    box-shadow: inset 0 -1px 0 rgba(255,255,255,.045);
  }
  /* En modo claro el perlado se invierte: una sombra suave en vez de luz. */
  .mo-claro .per-modal, .mo-claro .tcg-perla {
    background-image: linear-gradient(180deg,
      rgba(0,0,0,.022) 0%, rgba(0,0,0,0) 42%);
    box-shadow: inset 0 1px 0 rgba(255,255,255,.7), 0 1px 2px rgba(0,0,0,.07);
  }
  /* ── Tablas anchas dentro de un panel ──────────────────────────────
     El envoltorio de tabla tiene overflow-x:auto, pero como es hijo de un
     contenedor flex su min-width vale "auto": no se achica por debajo de su
     contenido, se estira con la tabla y el desplazamiento nunca se activa.
     El panel entonces recorta lo que sobra y la pantalla "se va al costado".
     Medido en cobranzas: tabla de 1800px, se salía 449px.
     Va acá, al final y FUERA de todo @media: la primera vez lo escribí dentro
     de uno de max-width 720px y sólo corría en celular. */
  .vn-tabla-wrap, .com-tabla-cont, .ing-tabla-cont, .lu-tabla-scroll,
  .per-modal .tabla-wrap, .per-modal [class*="-tabla-wrap"] {
    min-width: 0; max-width: 100%; overflow-x: auto;
  }

  .ing-embebido{ display:flex; flex-direction:column; min-width:0; min-height:0; flex:1; }
  .ing-embebido > .per-modal{ width:100%; max-width:none; max-height:none;
    border:0; border-radius:0; box-shadow:none; background:transparent;
    min-width:0; display:flex; flex-direction:column; }
  .ing-embebido .ing-tabla-cont{ min-width:0; overflow:auto; }
  /* Cabecera y pie en el color de la casa: envuelven el modal, igual que
     en gestoría. El texto encima va oscuro, que es lo que se lee sobre
     amarillo (10,6:1 en Giorgi, 5,5 en Vesubio, 4,8 en Ginza). */
  .pat-ed-cab{ display:flex; align-items:center; gap:11px; padding:10px 15px;
    background:var(--accent-amber, #f2c200); color:var(--accent-texto, #131824);
    border-bottom:0; }
  .pat-ed-logo{ height:17px; width:auto; flex:0 0 auto;
    /* El logo es blanco: sobre el amarillo hay que invertirlo. */
    filter:brightness(0); opacity:.88; }
  .pat-ed-interno{ font:800 14px 'Inter',sans-serif; flex:0 0 auto; }
  .pat-ed-raya{ width:1px; height:17px; flex:0 0 auto;
    background:color-mix(in srgb, var(--accent-texto, #131824) 32%, transparent); }
  .pat-ed-datos{ flex:1; min-width:0; font:600 12.5px 'Inter',sans-serif;
    white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  .pat-ed-salir{ flex:0 0 auto; padding:4px 11px; font-size: 12px;
    background:color-mix(in srgb, var(--accent-texto, #131824) 16%, transparent);
    color:var(--accent-texto, #131824); border:0; }
  .pat-ed-pie{ display:flex; align-items:center; gap:8px; padding:10px 15px;
    background:var(--accent-amber, #f2c200); border-top:0; }
  .pat-ed-pie-nota{ flex:1; font:400 10.5px 'Inter',sans-serif;
    color:var(--text); }
  .pat-ed-cancelar{ padding:6px 12px; border:0; background:transparent; cursor:pointer;
    font:600 11.5px 'Inter',sans-serif;
    color:var(--text); }
  /* Sobre el pie amarillo, un botón amarillo desaparece: se invierte. */
  .pat-ed-guardar{ padding:6px 14px; border:0; border-radius:8px; cursor:pointer;
    background:var(--accent-texto, #131824); color:var(--text);
    font:700 11.5px 'Inter',sans-serif; }
  .pat-ed-modal{ width:100%; max-width: 900px; }
  .pat-ed-cuerpo{ padding:16px 20px; overflow:auto; }
  .pat-ed-nota{ margin-bottom:14px; }
  .pat-ed-titulo{ display:flex; align-items:center; gap:10px; margin:16px 0 9px;
    font-size: 12px; font-weight:700; text-transform:uppercase; letter-spacing:.6px;
    color:var(--pat-text,#EEF0F3); }
  .pat-ed-grilla{ display:grid; grid-template-columns:repeat(auto-fit,minmax(210px,1fr)); gap:11px; }
  .pat-ed-campo{ display:flex; flex-direction:column; gap:4px; min-width:0; }
  .pat-ed-campo>span{ font-size: 12px; color:var(--pat-text); }
  .pat-ed-campo input:disabled{ opacity:.45; cursor:not-allowed; }
  .pat-ed-tope{ font-size: 12px; font-weight:600; text-transform:none;
    letter-spacing:0; color:var(--pat-text); }
  .pat-ed-tope--agotado{ color:var(--pat-danger,#E5484D); }
  .pat-ed-aviso, .pat-ed-error{ margin-top:10px; padding:9px 12px; border-radius:8px;
    background:rgba(229,72,77,.13); color:var(--pat-danger,#E5484D);
    font-size: 12px; font-weight:600; }
  .pat-ed-bloqueados{ display:flex; flex-wrap:wrap; gap:7px; align-items:center; }
  .pat-ed-bloq{ background:var(--pat-panel2,#232833); color:var(--pat-text); }
  .pat-ed-hist{ display:flex; flex-direction:column; gap:5px; max-height:190px; overflow:auto; }
  .pat-ed-hist-fila{ display:grid; grid-template-columns:88px 130px 1fr 190px;
    gap:10px; align-items:center; font-size: 12px;
    padding:5px 8px; border-radius:6px; background:var(--pat-panel2,#232833); }
  .pat-ed-hist-cambio s{ color:var(--pat-text); }
  .pat-origen{ margin-right:4px; }
  .pat-origen-aviso{ margin:14px 0 0; padding:9px 13px; border-radius: 8px;
    background:rgba(79,142,247,.12); color:var(--text); font-size: 12px; font-weight:600; }
  .pat-origen-aviso-fuerte{ margin-top:9px; padding:8px 11px; border-radius: 8px;
    background:rgba(229,72,77,.15); color:#f17176; display:flex;
    align-items:center; gap:11px; justify-content:space-between; }
  .pat-obj-panel{ padding:15px 20px; }
  .pat-obj-modo{ margin-left:4px; }
  .pat-obj-linea{ display:flex; align-items:center; gap:11px; padding:6px 0; }
  .pat-obj-linea--total{ margin-top:5px; padding-top:11px; border-top:2px solid var(--pat-line); }
  .pat-obj-canal{ width:48px; font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif;
    font-size: 12px; font-weight:700; color:var(--pat-text); }
  .pat-obj-linea--total .pat-obj-canal{ color:var(--pat-text); }
  .pat-obj-meta{ width:48px; text-align:center; }
  .pat-obj-pista{ flex:1; height:7px; background:var(--pat-panel2);
    border-radius:6px; overflow:hidden; }
  .pat-obj-linea--total .pat-obj-pista{ height:9px; }
  .pat-obj-relleno{ height:100%; border-radius:6px; transition:width .25s; }
  .pat-obj-cifras{ width:66px; text-align:right; font-size: 12px; }
  .pat-obj-pct{ width:42px; text-align:right; font-weight:700; }
  .pat-obj-aviso{ margin-top:10px; padding:8px 11px; border-radius:8px;
    background:rgba(229,72,77,.12); color:var(--pat-danger);
    font-size: 12px; font-weight:600; }
  .pat-obj-nota{ margin-top:9px; }


  .pat-ccf-search{ position:relative; margin-bottom:14px; }
  .pat-ccf-search input{ width:100%; background:var(--pat-panel2); border:1px solid var(--pat-line); color:var(--pat-text); padding:11px 14px; border-radius: 8px; font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 13px; outline:none; }
  .pat-ccf-search input:focus{ border-color:var(--pat-amber); }
  .pat-ccf-results{ display:flex; flex-direction:column; gap:1px; max-height:360px; overflow-y:auto; }
  .pat-ccf-row{ display:flex; justify-content:space-between; align-items:center; gap:12px; flex-wrap:wrap; padding:11px 4px; border-bottom:1px solid var(--pat-rowborder); }
  .pat-ccf-row:last-child{ border-bottom:none; }
  .pat-ccf-row-info{ display:flex; align-items:center; gap:10px; flex-wrap:wrap; font-size: 12.5px; }
  .pat-ccf-row-titular{ font-weight:600; }
  .pat-ccf-row-muted{ color:var(--pat-text); font-size: 12px; }
  .pat-ccf-row-action{ display:flex; align-items:center; gap:8px; flex-shrink:0; }
  .pat-ccf-row-action input{ background:var(--pat-panel2); border:1px solid var(--pat-line); color:var(--pat-text); padding:7px 10px; border-radius: 8px; font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 13px; outline:none; }
  .pat-ccf-row-action input:focus{ border-color:var(--pat-amber); }
  .pat-ccf-row-action button:disabled{ opacity:.4; cursor:default; }





/* ── El botón de salir: uno solo, y que se vea ─────────────────────────
   ANTES: el botón de la cabecera se anclaba abajo a la derecha con
   position:absolute. Ese arreglo creó dos problemas peores.
     1. Se montaba encima del contenido. En Asignación tapaba la tabla de
        unidades disponibles.
     2. Quedaba invisible. Medido con el resolutor de cascada y confirmado
        contando píxeles en las capturas: el fondo salía de este mismo
        bloque (var(--accent-texto)) y la letra la ponía la regla
        «.per-cab *:not(input)…{color:inherit}», que gana por especificidad
        (0,6,3) contra (0,6,0) — los tres :not() de etiqueta suman tres
        puntos. Fondo y letra terminaban siendo EL MISMO color: 1,00:1.
   AHORA el botón se queda donde está, en la cabecera o en el pie, y se
   pinta con «currentColor»: hereda la tinta de la franja, que ya está
   elegida para leerse sobre esa franja. No puede fallar — ni con el
   amarillo de Giorgi, ni con el azul, ni con el rojo, ni con ningún tema.
   Sin variables propias no hay dos sistemas de color pisándose, que es lo
   que rompía todo.
   Sobre el !important: es deliberado, y son estas tres propiedades. Es la
   única forma de ganarle a un selector (0,6,3) sin escribir cadenas de
   siete clases. Mismo criterio que .confirm-armado, más arriba. */
.tcg-cerrar {
  background: color-mix(in srgb, currentColor 13%, transparent) !important;
  color: inherit !important;
  border: 1.5px solid currentColor !important;
  font-weight: 700;
  padding: 6px 16px;
  border-radius: 8px;
}
.tcg-cerrar:hover:not(:disabled) {
  background: color-mix(in srgb, currentColor 26%, transparent) !important;
}
/* Los navegadores sin color-mix caen acá y se siguen viendo: filo y letra
   de la tinta de la franja, con el fondo de la franja detrás. */
@supports not (background: color-mix(in srgb, red 10%, transparent)) {
  .tcg-cerrar { background: transparent !important; }
}

/* Y el resto de los botones de una cabecera pintada: les faltaba el fondo.
   La letra se la ponía «.per-modal > .per-cab .lu-btn» (tinta de la casa)
   pero el fondo seguía saliendo de la regla base «.lu-btn» (--panel-2, azul
   oscuro). En Jorge Giorgi eso daba tinta #1d1a06 sobre #202940: 1,21:1.
   Vesubio y Ginza zafaban sólo porque su tinta es blanca. El pie tenía este
   arreglo desde antes; a la cabecera nunca se lo pusieron. */
.per-modal > .per-cab .lu-btn:not(.lu-btn--accion) { background: transparent; }
.per-modal > .per-cab .lu-btn:not(.lu-btn--accion):hover:not(:disabled) {
  background: color-mix(in srgb, currentColor 14%, transparent);
}

/* Lista de Usados: el salir va ARRIBA, al lado de Excel. Esta pantalla no
   es un modal —no vive dentro de «.per-modal»—, así que su cabecera no está
   pintada y el botón lleva el filo y la letra normales del panel. */
.lu-cab-cerrar { margin-left: 10px; }

/* ── Compras: el pie hace de barra de acciones ─────────────────────────
   El alta va a la izquierda y la salida a la derecha, con el conteo y la
   ayuda en el medio. Antes «Nueva compra» estaba arriba, entre los filtros,
   y la salida abajo: las dos acciones de la pantalla en dos extremos
   distintos. El separador flexible es lo que empuja el cerrar al borde. */
/* El pie del cartel de compartir empuja el cerrar al borde, igual que en
   compras. */
.per-modal .per-pie .per-pie-sp { flex: 1 1 auto; }

.cvn-pie--acciones { flex-wrap: wrap; gap: 10px; }
.cvn-pie--acciones .cvn-pie-sp { flex: 1 1 auto; }
.cvn-pie--acciones .lu-btn { flex: 0 0 auto; }

/* ── El N° de fila es la puerta para modificar, y tiene que gritarlo ────
   Estaba marcado con un filo y un fondo apenas teñido. Ahora el número es
   una pastilla con el color de la casa: se lee como algo en lo que se entra,
   no como un dato más de la fila. */
/* MÁS DISCRETO (29/09/2026 · np, Ramiro: «se diferencia mucho del resto de
   las pantallas»). El número de fila se toca para modificar, así que algo
   tiene que indicarlo, pero era un círculo con borde y fondo en CADA
   renglón: en una lista de ochenta unidades la pantalla quedaba a lunares y
   no se parecía a ninguna otra.
   Ahora es el número solo, en el color de la casa. El redondel aparece
   recién al pasar por encima, que es cuando hace falta saber que se toca. */
.cvn-tabla--consulta tbody td.cvn-col-n--abrir .cvn-n-num,
.lu-informe-tabla tbody td.lu-inf-abrir .lu-n-num {
  display: inline-block; min-width: 26px; padding: 2px 7px;
  border-radius: 999px; font-weight: 700;
  border: 1px solid transparent;
  background: transparent;
}
.cvn-tabla--consulta tbody td.cvn-col-n--abrir:hover .cvn-n-num,
.lu-informe-tabla tbody td.lu-inf-abrir:hover .lu-n-num {
  border-color: currentColor;
  background: color-mix(in srgb, currentColor 14%, transparent);
}
.cvn-tabla--consulta tbody td.cvn-col-n--abrir:hover .cvn-n-abrir,
.lu-informe-tabla tbody td.lu-inf-abrir:hover .lu-n-icono { font-size: 14px; }
/* En Compras de usados el N° ya es un botón propio: misma pastilla. */
.com-lista-tabla td.proc-n-col .bt-abrir {
  min-width: 26px; padding: 2px 7px; border-radius: 999px; font-weight: 700;
  color: var(--text); border: 1px solid currentColor;
  background: color-mix(in srgb, currentColor 16%, transparent);
  cursor: pointer;
}
.com-lista-tabla td.proc-n-col .bt-abrir:hover {
  background: var(--accent-blue, #4f8ef7); color: var(--casa-activa-tinta, #fff);
}

/* ═══════════════════════════════════════════════════════════════════════
   EL ARMAZÓN
   Tres piezas fijas y una que cambia:
     · arriba   identidad, sesión y los sectores
     · costado  las pantallas del sector y los concesionarios
     · franja   alto FIJO: saluda, o titula la pantalla abierta
     · lienzo   lo único que cambia de verdad
   La franja tiene alto fijo a propósito: antes el saludo y el título eran
   dos bloques distintos y al cambiar saltaba de lugar y de tamaño.
   ═══════════════════════════════════════════════════════════════════════ */
/* El armazón ocupa la pantalla ENTERA. El shell reserva un hueco a la
   izquierda para el menú lateral viejo (--ml-ancho) y márgenes a los lados;
   con la portada nueva ese menú no existe, así que el hueco quedaba como
   una franja negra al costado. Se anulan los dos. */
.app-shell:has(.tcg-app) { padding: 0 !important; }
.app-shell:has(.tcg-app) > * { max-width: none; }
.tcg-app {
  display: flex; flex-direction: column; min-height: calc(100dvh / var(--tcg-z, 1));
  background: var(--bg, #0f131c);
  /* Toma el ancho DISPONIBLE, no el de la ventana.
     Acá había «width: 100vw; margin-left: calc(50% - 50vw)», el truco de
     siempre para escaparse de un contenedor con margen. El problema es que
     «100vw» mide la ventana CON la barra de scroll adentro, y el lugar real
     para dibujar mide unos 15px menos. Mientras la página entraba a lo alto
     no se notaba, porque sin barra los dos números coinciden. En cuanto la
     página se pasa de alto aparece la barra, el armazón pide 15px de más y
     el «margin-left» los reparte a los costados: 7 para un lado, 8 para el
     otro. Eso era el desborde de 8px, y pasa en CUALQUIER monitor, no sólo
     en los chicos — el monitor chico sólo hace que la barra aparezca antes.
     Con «100%» el ancho lo da el contenedor, que ya descuenta la barra. El
     truco además no hacía falta: las dos reglas de arriba ya le sacan el
     padding y el max-width al shell. */
  width: 100%; margin-left: 0;
  /* La portada vieja centra TODO su texto y el armazón lo heredaba: por eso
     el saludo aparecía en el medio de la franja en vez de a la izquierda.
     (Sin llaves en este comentario: una llave suelta adentro de un comentario
     rompe cualquier análisis del CSS, incluido el de las pruebas.) */
  text-align: left;
}

/* ── Arriba ─────────────────────────────────────────────────────────── */
.tcg-top { background: var(--panel, #161c29); border-bottom: 1px solid var(--border, #252d3f);
  position: sticky; top: 0; z-index: 40; }
/* El logo, a la escala de la pantalla: en un monitor de 1080 la barra son
   ~56px y un logo de 38 se perdía. Con 52 ocupa lo que tiene que ocupar y
   queda alineado con el nombre del concesionario. */
/* El renglón de arriba, un centímetro más bajo: quedó sólo con el logo y el
   concesionario, así que no necesita el alto que tenía. Lo que se saca acá
   se lo gana el modal de ventas. */
/* Renglón un 35% más bajo: quedaba mucho aire alrededor del logo solo.
   Ahora lo llena el logo de la casa, del otro lado y del mismo alto. */
.tcg-top-1 { display: flex; align-items: center; gap: 16px; padding: 5px 18px 4px; }
.tcg-top-sp { flex: 1 1 auto; }
/* El logo es el botón de inicio: grande, porque es lo que se toca al
   perderse, y con la mano encima para que se note que se puede tocar. */
.tcg-logo { background: none; border: 0; padding: 2px 8px; border-radius: 10px;
  cursor: pointer; line-height: 0; transition: background .12s; }
/* El logo va COMPLETO, con sus letras. Es casi cuadrado (1,16 de ancho por
   alto), así que a 36px ocupa 42 de ancho.
   Si lo querés más grande o más chico, es este número y el min-height de
   «.tcg-logo img» y de «.tcg-top-1»: el renglón tiene que darle lugar. */
.tcg-logo img { height: 36px; width: auto; display: block; }
/* El de la casa, EL MISMO alto que el de TCG: si uno domina al otro, deja de
   leerse como un par y parece un error. */
/* (Acá vivían «.tcg-top-casa-logo» —el logo único de la casa— y
   «.tcg-top-tres» —el trío de «Los tres juntos»—. Los reemplaza el selector
   de tres logos, que está al final del archivo.) */
.tcg-logo:hover { background: rgba(255,255,255,.08); }
.tcg-logo:active { background: rgba(255,255,255,.14); }
.tcg-logo:hover { background: rgba(255,255,255,.07); }
.tcg-top-casa { display: flex; align-items: baseline; gap: 7px; padding-left: 14px;
  border-left: 1px solid var(--border, #252d3f); }
.tcg-top-casa b { color: var(--text); font-size: 14px; font-weight: 700; }
.tcg-top-casa span { font-size: 12px; color: var(--text); }
/* (acá vivía «.tcg-top-der»: la sesión se mudó a la franja) */
/* Ramiro: en oscuro la letra va blanca salvo lo marcado a propósito. El
   respaldo también sube: cuando la variable no llega, ganaba el gris. */
.tcg-top-quien { font-size: 12px; color: var(--text, #ecf0f4); }
.tcg-tbtn { background: transparent; border: 1px solid var(--border, #252d3f); border-radius: 8px;
  color: var(--text, #ecf0f4); font: inherit; font-size: 13px; padding: 5px 11px; cursor: pointer; }
.tcg-tbtn:hover { color: var(--text, #ecf0f4); border-color: #4a5468; }
.tcg-tbtn--eng { font-size: 14px; line-height: 1; padding: 4px 9px; }

/* Los sectores: solapas, no tarjetas. Siempre a la vista. */
/* Las solapas arrancan a la altura donde empieza la franja, no pegadas al
   borde: así la columna de la izquierda y el centro quedan alineados y el
   ojo baja derecho desde el sector hasta el título. */
/* Una línea donde se cruzan las solapas y la columna: comparten fondo y sin
   ella la esquina queda plana, sin decir dónde termina una y empieza la otra. */
.tcg-sect { display: flex; gap: 3px; padding: 0 12px 0 calc(var(--tcg-side-w, 232px) + 18px);
  overflow-x: auto; position: relative; }
.tcg-sect::before { content: ""; position: absolute; left: var(--tcg-side-w, 232px); top: 0; bottom: 0;
  width: 1px; background: var(--border, #252d3f); }
.tcg-app--plegada .tcg-sect::before { left: 46px; }
.tcg-app--plegada .tcg-sect { padding-left: calc(46px + 18px); }
/* LOS SECTORES, SIEMPRE EN BLANCO. Antes estaban apagados y sólo se
   encendían al pasar el mouse: se leían como deshabilitados, cuando en
   realidad se puede entrar a todos. Ramiro lo pidió con foto. */
.tcg-sec { background: transparent; border: 0; border-bottom: 2px solid transparent;
  color: var(--text, #ecf0f4); font: inherit; font-size: 14.5px;
  padding: 7px 13px 6px; cursor: pointer; white-space: nowrap;
  display: flex; align-items: center; gap: 8px; }
.tcg-sec:hover { background: rgba(255,255,255,.07); }
/* El elegido toma el color de LA CASA que se está mirando. «--casa-activa» la
   escribe el armazón; «--vnv-marca» no llega hasta acá y caía siempre al
   ámbar de Jorge Giorgi aunque estuvieras en Vesubio o en Ginza. */
.tcg-sec[aria-pressed="true"] {
  color: var(--text);
  border-bottom-color: var(--casa-activa, var(--accent-amber, #f2c200)); font-weight: 700; }
.tcg-sec i { font-style: normal; font-size: 14px; line-height: 1; }

/* ── Cuerpo: columna + centro ───────────────────────────────────────── */
/* Fila, no rejilla: con «grid» y el ancho en 100vw las columnas se calculaban
   sobre un ancho distinto al visible y la franja se montaba sobre la columna. */
.tcg-cuerpo { display: flex; align-items: stretch; flex: 1; min-height: 0; }
.tcg-side {
  flex: 0 0 var(--tcg-side-w, 232px); width: var(--tcg-side-w, 232px);
  background: var(--panel, #161c29); border-right: 1px solid var(--border, #252d3f);
  display: flex; flex-direction: column; min-height: 0;
  /* Hasta abajo del todo: antes se cortaba a la altura de su contenido. */
  align-self: stretch;
}
.tcg-app--plegada .tcg-side { flex: 0 0 46px; width: 46px; }
/* rh: la columna no estira la pantalla. Con un renglón más en el menú (Boletos
   entre terceros) la lista de 0 km de Ginza medía más que el alto libre y
   empujaba todo 50 px para abajo: el modal de ventas quedaba cortado. Ahora
   la columna toma el alto del centro y su lista se desplaza si no entra. */
@media (min-width: 900px) {
  .tcg-side { contain: size; overflow: hidden; }
}
.tcg-side-tit { display: flex; align-items: center; gap: 8px;
  font-size: 12px; letter-spacing: .13em; text-transform: uppercase;
  color: var(--text); padding: 9px 8px 5px 12px; font-weight: 700; }
.tcg-plegar { margin-left: auto; background: transparent; border: 1px solid var(--border, #252d3f);
  border-radius: 6px; color: var(--text); font: inherit; font-size: 12px;
  line-height: 1; padding: 3px 7px; cursor: pointer; }
.tcg-plegar:hover { color: var(--text, #ecf0f4); }
/* Se estira hasta abajo y desplaza sólo si hace falta. Antes la columna
   medía lo que medía su contenido y quedaba flotando a media pantalla. */
.tcg-side-lista { flex: 1 1 auto; min-height: 0; overflow-y: auto; padding: 0 8px 10px; }
/* Compacto: 16 pantallas más los concesionarios tienen que entrar sin
   desplazar, para que el alto que queda alcance para el modal de ventas. */
/* Con icono y aire entre renglones: una lista de 16 nombres pegados no se
   recorre con la vista, hay que leerla entera. El icono da un punto de
   anclaje y los ~1,5mm de separación hacen que cada uno sea un blanco propio. */
.tcg-side-it { display: flex; align-items: center; gap: 10px; width: 100%; text-align: left;
  background: transparent; border: 0; border-radius: 8px; color: var(--text, #ecf0f4);
  font: inherit; font-size: 13px; padding: 6px 10px; cursor: pointer; line-height: 1.25;
  margin-bottom: 8px; }
.tcg-side-it:last-child { margin-bottom: 0; }
.tcg-side-ic { flex: 0 0 19px; font-size: 15px; line-height: 1; text-align: center; opacity: 1;
  display: inline-flex; align-items: center; justify-content: center; }
/* Los iconos de línea toman el color de la letra, así siguen al estado del
   ítem —normal, elegido, atenuado— sin reglas aparte. */
.tcg-side-ic svg { stroke: currentColor; }
.tcg-sec i { display: inline-flex; align-items: center; }
.tcg-sec i svg { stroke: currentColor; }
.tcg-side-tx { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tcg-side-it[aria-current="true"] .tcg-side-ic { opacity: 1; }
/* El resaltado, con el color de la casa que se está mirando. */
.tcg-side-it:hover { background: rgba(255,255,255,.06); border-left: 3px solid var(--casa-activa, var(--accent-amber, #f2c200)); padding-left: 7px; }
/* Filete a la izquierda y fondo apenas teñido, no un bloque relleno: el
   color pleno en la columna pesaba más que la franja y se llevaba la vista
   a donde no estaba pasando nada. */
.tcg-side-it[aria-current="true"] {
  background: color-mix(in srgb, var(--vnv-marca, #f2c200) 14%, transparent);
  color: var(--text, #ecf0f4); font-weight: 700;
  box-shadow: inset 3px 0 0 var(--vnv-marca, var(--accent-amber, #f2c200));
  border-radius: 0 7px 7px 0; }
.tcg-side-vacio { color: var(--text); font-size: 12px; padding: 14px 12px; line-height: 1.5; }
.tcg-side-sep { height: 1px; background: var(--border, #252d3f); margin: 4px 10px 10px; opacity: 1; }
/* Lo que falta construir figura igual: una pantalla que no está en el menú
   no se pide nunca, y así queda a la vista qué queda por hacer. */
.tcg-side-it--porhacer { opacity: 1; cursor: default; }
.tcg-side-it--porhacer:hover { background: transparent; }
/* Existe y abre, pero todavía no muestra nada: se atenúa un poco y se avisa,
   sin bloquearla. */
.tcg-side-it--vacia { opacity: 1; }
.tcg-side-it--vacia .tcg-side-tx::after {
  content: "sin datos"; margin-left: 7px; font-size: 13px; text-transform: uppercase;
  letter-spacing: .08em; border: 1px solid currentColor; border-radius: 999px;
  padding: 1px 6px; opacity: 1; }
.tcg-side-it--porhacer .tcg-side-tx::after {
  content: "por hacer"; margin-left: 7px; font-size: 13px; text-transform: uppercase;
  letter-spacing: .08em; border: 1px solid currentColor; border-radius: 999px;
  padding: 1px 6px; opacity: 1; }

/* La línea de la casa: lo primero y lo último que se ve. */
.tcg-linea-casa { height: 4px; flex: 0 0 auto; }
/* La del pie va fija abajo: el contenido se desplaza y ella queda. */
.tcg-linea-casa--pie { position: fixed; left: 0; right: 0; bottom: 0; z-index: 45; }
.tcg-app--solo .tcg-linea-casa--pie { pointer-events: none; }

/* Zebra suave en las tablas del armazón: con 29 columnas, seguir un renglón
   de punta a punta sin una guía es difícil. Al 3% no ensucia. */
.tcg-lienzo table tbody tr:nth-child(even) > * { background: rgba(255,255,255,.03); }
.tcg-claro .tcg-lienzo table tbody tr:nth-child(even) > * { background: rgba(20,30,60,.035); }
/* Plegada: se esconde el texto y queda la tira, para ganar 168px de ancho
   en las pantallas anchas como Liquidación. */
.tcg-app--plegada .tcg-side-lista,
.tcg-app--plegada .tcg-casas-pie,
.tcg-app--plegada .tcg-side-tit { font-size: 0; padding-left: 4px; padding-right: 4px; }
.tcg-app--plegada .tcg-plegar { font-size: 12px; margin: 0 auto; }

/* Los concesionarios, abajo y siempre a la vista */
.tcg-casas-pie { border-top: 1px solid var(--border, #252d3f); padding: 6px 8px 11px; flex: 0 0 auto; }
.tcg-side-tit--casas { padding: 6px 6px 6px; }
.tcg-casa-it { display: flex; align-items: center; justify-content: flex-start;
  width: 100%; background: transparent; border: 1px solid transparent; border-radius: 8px;
  color: var(--text); font: inherit; font-size: 12px;
  padding: 7px 10px; cursor: pointer; text-align: left; margin-bottom: 5px; }
.tcg-casa-it:hover { background: rgba(255,255,255,.06); }
/* El elegido se marca con SU color, no con el de la casa activa: así se ve
   cuál es cuál aunque estés parado en otra. */
.tcg-casa-it[aria-pressed="true"] { color: var(--text, #ecf0f4);
  border-color: var(--casa, var(--accent-amber, #f2c200));
  background: color-mix(in srgb, var(--casa, #f2c200) 14%, transparent); }
.tcg-casa-logo-mini { height: 17px; width: auto; max-width: 100%; object-fit: contain;
  object-position: left center; opacity: .8; }
.tcg-casa-it[aria-pressed="true"] .tcg-casa-logo-mini { opacity: 1; }
.tcg-claro .tcg-casa-logo-mini { filter: invert(1) brightness(.3); }
.tcg-casa-it--todos b { font-weight: 600; font-size: 12px; }

/* El selector de informes, cuando el panel se dibuja sin el menú de arriba.
   Dos filas: la sección y, debajo, los informes de esa sección. */
.inf-selector { padding: 8px 14px 4px; border-bottom: 1px solid var(--border, #252d3f);
  background: var(--panel, #161c29); }
.inf-sel-fila { display: flex; gap: 5px; flex-wrap: wrap; margin-bottom: 6px; }
.inf-sel-fila--inf { margin-bottom: 2px; }
.inf-sel-sec { background: transparent; border: 1px solid var(--border, #252d3f);
  border-radius: 999px; color: var(--text); font: inherit; font-size: 12px;
  padding: 4px 13px; cursor: pointer; white-space: nowrap; }
.inf-sel-sec:hover { color: var(--text, #ecf0f4); border-color: #4a5468; }
.inf-sel-sec.es-activa { background: var(--vnv-marca, var(--accent-amber, #f2c200));
  color: var(--vnv-marca-txt, #1d1a06); border-color: var(--vnv-marca, #f2c200); font-weight: 700; }
.inf-sel-inf { background: transparent; border: 0; border-bottom: 2px solid transparent;
  color: var(--text); font: inherit; font-size: 12.5px;
  padding: 4px 8px 3px; cursor: pointer; white-space: nowrap; }
.inf-sel-inf:hover { color: var(--text, #ecf0f4); }
.inf-sel-inf.es-activo { color: var(--text);
  border-bottom-color: var(--vnv-marca, var(--accent-amber, #f2c200)); font-weight: 700; }

/* ── El centro ──────────────────────────────────────────────────────── */
.tcg-main { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; }
/* UNA sola fila: el título a la izquierda y lo demás a la derecha. Con
   «flex-wrap: wrap» el buscador se caía a un segundo renglón y el saludo
   quedaba flotando en el medio. */
/* Fina: una sola línea. Cada píxel de alto acá se lo saca al modal. */
/* Un rastro del color de la casa, del 8% y sólo a la izquierda: refuerza la
   línea de arriba sin gritar. */
.tcg-franja { display: flex; align-items: center; gap: 12px; flex-wrap: nowrap;
  min-height: 0; flex: 0 0 auto; position: relative;
  /* Al borde izquierdo, como estaba antes. Probamos alinearlo con el lienzo
     (232px) y quedaba flotando al medio: en ese renglón la banda de la
     columna está vacía, así que el saludo y el título la ocupan y el buscador
     gana lugar. */
  padding: 6px 16px;
  /* Sin el rastro de color que había: con la línea de arriba y la del pie ya
     está dicho de dónde es la pantalla, y el degradado ensuciaba el fondo. */
  background: var(--panel-2, #1c2333);
  border-bottom: 1px solid var(--border, #252d3f); }
.tcg-fr-izq { min-width: 0; display: flex; align-items: baseline; gap: 9px;
  overflow: hidden; white-space: nowrap; }
.tcg-fr-tit { font-size: 15px; font-weight: 700; line-height: 1.3; flex: 0 0 auto; }
.tcg-fr-sub { font-size: 12px; color: var(--text);
  overflow: hidden; text-overflow: ellipsis; }
.tcg-fr-der { margin-left: auto; display: flex; gap: 6px; flex-wrap: wrap;
  justify-content: flex-end; align-items: center; position: relative; }
.tcg-fr-der .tcg-buscar { width: clamp(180px, calc(26vw / var(--tcg-z, 1)), 360px); }
.tcg-buscar { box-sizing: border-box; background: var(--panel, #161c29);
  border: 1px solid var(--border, #252d3f); border-radius: 8px;
  color: var(--text, #ecf0f4); font: inherit; font-size: 13px; padding: 8px 12px; }
/* La foto de portada, en la pantalla de inicio. Va detrás del saludo y del
   «elegí una pantalla», nunca detrás de una planilla: ahí compite con el
   texto y cansa. Se atenúa para que lo escrito encima se lea igual. */
/* LA FOTO, EN TODO EL SISTEMA (23/09/2026, Ramiro). Va detrás de todo, fija:
   se ve en cualquier pantalla y también alrededor de los modales cuando hay
   uno abierto. Bien atenuada, para que nunca compita con lo que se lee.
   En la portada se ve más, que es donde luce. */
/* 23/09/2026 (Ramiro). El velo sobre TODO el sistema no servía: ensuciaba la
   lectura en claro y en oscuro. Vuelve a ser lo que pidió: la foto vive en la
   PORTADA —el lienzo—, y cuando se abre una pantalla más chica que el lienzo
   (una consulta, el CRM, un modal), la portada con el auto se sigue viendo
   alrededor. Detrás de una planilla a pantalla completa no se ve nada, que
   es lo correcto. */
.tcg-lienzo--foto { position: relative; }
.tcg-lienzo--foto::before { content: ""; position: absolute; inset: 0; pointer-events: none; z-index: 0;
  background-image: var(--tcg-foto); background-size: cover; background-position: center; opacity: .55;
  -webkit-mask-image: linear-gradient(180deg, transparent, #000 18%, #000 82%, transparent);
  mask-image: linear-gradient(180deg, transparent, #000 18%, #000 82%, transparent); }
.tcg-claro .tcg-lienzo--foto::before { opacity: .40; }
.tcg-lienzo--foto > * { position: relative; z-index: 1; }

/* El lienzo le pasa TODO el alto a lo que tenga adentro. El modal de ventas
   calcula cuánto achicarse midiendo el alto de su padre: si el padre mide lo
   que mide el contenido en vez de lo que hay disponible, el modal se achica
   de más y queda chico con la pantalla medio vacía. */
.tcg-lienzo { flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column; overflow: auto; }
.tcg-lienzo > * { flex: 1 1 auto; min-height: 100%; }

/* ── «Sólo armazón» ─────────────────────────────────────────────────────
   La barra y la columna se dibujan fijas y el contenido viejo se corre para
   dejarles lugar. Es lo que permite que los tableros y las pantallas de
   gerencia —que usan el enrutador de siempre— tengan el armazón encima. */
.tcg-app--solo { position: fixed; inset: 0 auto 0 0; width: 100%;
  pointer-events: none; z-index: 30; min-height: 0;
  /* TRANSPARENTE. «.tcg-app» trae «background: var(--bg)» y en capa fija eso
     pintaba un fondo opaco sobre TODA la pantalla: el armazón se veía y la
     pantalla de atrás no. Es la causa de que no abrieran los tableros, la
     tesorería, la postventa ni los informes de venta. */
  background: transparent; }
.tcg-app--solo .tcg-linea-casa,
.tcg-app--solo .tcg-top,
.tcg-app--solo .tcg-side,
.tcg-app--solo .tcg-franja,
.tcg-app--solo .tcg-ajustes { pointer-events: auto; }
.tcg-app--solo .tcg-top { background: var(--panel, #161c29); }
.tcg-app--solo .tcg-cuerpo { flex: 1; min-height: 0; }
.tcg-app--solo .tcg-main { pointer-events: none; background: transparent; }
.tcg-app--solo .tcg-lienzo { display: none; }
/* En capa fija el panel de ajustes es lo único que crece hacia abajo: sin
   fondo propio y sin quedar por encima del resto, se dibujaba transparente
   sobre la pantalla de atrás y parecía que el ⚙ no abría. */
.tcg-app--solo .tcg-ajustes {
  position: relative; z-index: 5; max-height: calc(calc(100dvh / var(--tcg-z, 1)) - var(--tcg-alto-armazon, 95px)); overflow-y: auto;
  box-shadow: 0 14px 30px rgba(0,0,0,.5);
}
.tcg-app--solo .tcg-side { background: var(--panel, #161c29); }
/* El contenido viejo se corre: debajo de la barra y al lado de la columna. */
/* El alto del armazón fijo, en un solo lugar: si cambia el logo o la franja,
   se ajusta acá y no hay que buscar el número en tres reglas.
   ⚠ Este número no se CALCULA: se MIDE. Se monta el armazón en Chromium y se
   pide getBoundingClientRect() del borde de abajo de «.tcg-franja» con la
   capa «--solo» puesta. Hasta hoy la variable no estaba declarada en ningún
   lado y mandaba el valor de reserva —100— mientras el armazón medía otra
   cosa: ésa es la mitad del hueco que aparecía arriba de los tableros.
   Medido el 22/08 a 1440, 1330 y 1024px con el logo en 36 y el renglón en
   44: línea 4 + barra 45 + franja 46 = 95. */
:root { --tcg-alto-armazon: 95px; }
.app-shell:has(.tcg-app--solo) { padding: var(--tcg-alto-armazon, 95px) 0 0 var(--tcg-side-w, 232px) !important; }
.app-shell:has(.tcg-app--solo.tcg-app--plegada) { padding-left: 46px !important; }
/* (acá vivía «.tcg-embebido», de un intento de dibujar el tablero adentro
   del lienzo que no prosperó: el tablero se dibuja en línea, no es un
   componente. Se resolvió con la capa fija «.tcg-app--solo».) */
.tcg-lienzo .gv-root,
.tcg-lienzo .gv-body--sola,
.tcg-lienzo .gv-main { min-height: 100%; }
/* Y la capa del modal ocupa el alto entero del lienzo, no el del contenido. */
.tcg-lienzo .per-overlay { position: absolute; inset: 0; padding: 8px; }
/* Ordenar la columna (sólo quien administra). */
.tcg-side-it--mueve { cursor: grab; }
.tcg-side-it--mueve:active { cursor: grabbing; }
.tcg-side-it.es-arrastra { opacity: .45; }
.fmt-fila--4 { display: grid !important; grid-template-columns: repeat(2, 1fr); gap: 6px; }
.fmt-nota { font-size: 12px; opacity: 1; margin: 4px 0 2px; }
/* La guía, al lado del buscador */
.tcg-guia-btn { height: 34px; border: 1px solid var(--casa-activa, #4f8ef7); background: transparent;
  color: var(--text, #ecf0f4); border-radius: 8px; padding: 0 12px; font: inherit; font-size: 13px; font-weight: 600; cursor: pointer; white-space: nowrap; }
.tcg-guia-btn:hover { background: color-mix(in srgb, var(--casa-activa, #4f8ef7) 14%, transparent); }
.guia-fondo { position: fixed; inset: 0; background: rgba(0,0,0,.55); z-index: 90; display: flex; align-items: center; justify-content: center; padding: 16px; }
.guia { width: min(820px, calc(96vw / var(--tcg-z, 1))); max-height: calc(90vh / var(--tcg-z, 1)); overflow: auto; background: var(--panel, #161c29); color: var(--text, #e6eaf0);
  border: 1px solid var(--border, #2a3345); border-radius: 14px; padding: 16px 18px; display: grid; gap: 12px; }
.tcg-claro .guia { background: #ffffff; }
.guia-cab { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.guia-cab b { font-size: 18px; display: block; }
.guia-cab span { font-size: 12.5px; color: var(--text); }
.guia-buscar input { width: 100%; height: 40px; border: 1px solid var(--border, #2a3345); border-radius: 10px;
  background: var(--panel-2, #1c2432); color: var(--text, #e6eaf0); padding: 0 12px; font: inherit; font-size: 14.5px; }
.tcg-claro .guia-buscar input { background: #ffffff; }
.guia-chips { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 8px; }
.guia-chips .pvx-btn { font-size: 12.5px; min-width: 0; }
.guia-result { display: grid; gap: 6px; margin-top: 8px; }
.guia-item { text-align: left; border: 1px solid var(--border, #2a3345); border-radius: 10px; padding: 8px 12px;
  background: var(--panel-2, #1c2432); color: var(--text, #e6eaf0); cursor: pointer; font: inherit; }
.tcg-claro .guia-item { background: #f4f6fa; }
.guia-item b { display: block; font-size: 14px; }
.guia-item span { font-size: 12px; color: var(--text); }
.guia-nada { margin-top: 8px; font-size: 13px; color: var(--text); }
.guia-recetas { display: grid; gap: 8px; margin-top: 8px; }
.guia-receta { border: 1px solid var(--casa-activa, #4f8ef7); border-radius: 10px; padding: 10px 12px; background: color-mix(in srgb, var(--casa-activa, #4f8ef7) 8%, transparent); }
.guia-receta b { font-size: 14.5px; }
.guia-receta ol { margin: 6px 0 0; padding-left: 20px; font-size: 13px; line-height: 1.6; }
.guia-pasos { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 12px; border-top: 1px solid var(--border, #2a3345); padding-top: 12px; }
.guia-lista { display: grid; gap: 4px; align-content: start; }
.guia-paso { text-align: left; border: 0; background: none; color: var(--text); font: inherit; font-size: 13.5px; padding: 6px 8px; border-radius: 8px; cursor: pointer; }
.guia-paso.on { background: color-mix(in srgb, var(--casa-activa, #4f8ef7) 16%, transparent); color: var(--text, #e6eaf0); font-weight: 700; }
.guia-texto b { font-size: 15px; }
.guia-texto p { margin: 6px 0 10px; font-size: 13.5px; line-height: 1.55; }
.guia-nav { display: flex; gap: 8px; }
.guia-pie { font-size: 12px; color: var(--text); border-top: 1px solid var(--border, #2a3345); padding-top: 10px; }
.tcg-side-aviso { display: block; font-size: 12px; font-weight: 600; text-transform: none; letter-spacing: 0; color: var(--text); margin-top: 2px; }
/* El CRM PostVenta, abierto desde el menú: ocupa exactamente el lienzo, de
   tamaño fijo en todas las solapas (22/09/2026). */
.tcg-lienzo .per-overlay > .per-modal.crm-modal,
.tcg-lienzo .per-overlay > .per-modal.ces-modal { width: 100%; max-width: 100%; height: 100%; max-height: 100%; }
.tcg-main { position: relative; }
.tcg-lienzo-pad { padding: 16px 18px; overflow: auto; }
.tcg-lienzo-nota { margin: auto; text-align: center; color: var(--text);
  font-size: 13px; line-height: 1.8; }
/* Medido en Chromium: «#5b6577» sobre el fondo oscuro da 3,02:1, por debajo
   del mínimo de 4,5 que pide el resto del proyecto. Se usa la tinta apagada
   del sistema, que cambia sola con el modo y ya está medida. */
.tcg-lienzo-nota span { display: block; color: var(--text, #ecf0f4); opacity: 1; font-size: 12px; }

/* La lista de pantallas del sector, en el centro */
.tcg-lista { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 6px; }
.tcg-item { display: flex; align-items: center; gap: 10px; text-align: left;
  background: var(--panel-2, #1c2333); border: 1px solid var(--border, #252d3f);
  border-radius: 8px; padding: 10px 12px; color: var(--text, #ecf0f4); font: inherit; cursor: pointer; }
/* El resaltado toma el color de LA CASA QUE SE ESTÁ MIRANDO. Ramiro lo
   reportó con foto: estaba en Vesubio y el resaltado salía amarillo, que es
   Jorge Giorgi. La variable «--vnv-marca» no llega hasta acá, así que caía
   siempre al respaldo ámbar. «--casa-activa» la escribe el armazón. */
.tcg-item:hover { border-color: var(--casa-activa, var(--accent-amber, #f2c200)); background: var(--panel-2, #232c40); }
.tcg-item-tx { min-width: 0; }
.tcg-item-tx b { display: block; font-size: 13px; font-weight: 600; }
.tcg-item-tx small { display: block; color: var(--text); font-size: 12px;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tcg-etq { margin-left: auto; font-size: 12px; border: 1px solid currentColor;
  border-radius: 999px; padding: 2px 7px; white-space: nowrap; }
.tcg-etq--calle { color: var(--text); }
.tcg-vacio { color: var(--text); font-size: 12.5px; padding: 22px 4px; text-align: center; }

/* ── Armar lote para reventa ────────────────────────────────────────── */
/* La caja: encabezado y pie del color de la casa, como el resto. El relleno
   pasa al cuerpo, porque antes lo tenía la pantalla entera y las franjas
   quedaban despegadas de los bordes. (24/09/2026, Ramiro) */
.lote-caja { padding: 0; border: 1px solid var(--border, #252d3f); border-radius: 12px; overflow: hidden; }
.lote-caja > .per-cab, .lote-caja > .per-pie {
  background: var(--vnv-marca, var(--accent-amber, #f2c200));
  color: var(--vnv-marca-txt, var(--casa-activa-tinta, #1a1207)); border: 0;
}
.lote-caja > .per-cab { align-items: center; }
.lote-caja > .per-pie { display: flex; justify-content: space-between; align-items: center;
  gap: 10px; flex-wrap: wrap; font-size: 13px; font-weight: 600; }
.lote-caja > *:not(.per-cab):not(.per-pie) { margin-left: 16px; margin-right: 16px; }
.lote-caja > .lote-barra { margin-top: 12px; }

.lote { padding: 14px 16px 20px; display: flex; flex-direction: column; gap: 12px; min-height: 0; }
.lote-barra { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.lote-tit { font-size: 15px; font-weight: 700; }
.lote-sp { flex: 1 1 auto; }
.lote-cols { background: var(--panel-2, #1c2333); border: 1px solid var(--border, #252d3f);
  border-radius: 10px; padding: 11px 13px; }
.lote-cols-gr { display: flex; gap: 14px; flex-wrap: wrap; margin-top: 7px; }
.lote-chk { display: flex; align-items: center; gap: 6px; font-size: 12.5px; cursor: pointer; }
.lote-tabla-wrap { overflow: auto; max-height: calc(46vh / var(--tcg-z, 1)); border: 1px solid var(--border, #252d3f);
  border-radius: 10px; }
.lote-tabla { width: 100%; }
.lote-tabla th { position: sticky; top: 0; z-index: 2; }
.lote-tabla tbody tr { cursor: pointer; }
.lote-tabla tbody tr:hover td { background: rgba(255,255,255,.05); }
.lote-fila--on td { background: color-mix(in srgb, var(--vnv-marca, #f2c200) 15%, transparent) !important; }
.lote-num { text-align: right; font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; }
.lote-chk-col { width: 1%; text-align: center; }

/* Lo que SE MANDA. Marco del color de la casa: es la parte que sale. */
.lote-totales { border: 1.5px solid var(--vnv-marca, var(--accent-amber, #f2c200));
  border-radius: 10px; padding: 12px 14px; }
.lote-tot-tit { font-size: 12px; text-transform: uppercase; letter-spacing: .1em;
  color: var(--text); font-weight: 700; margin-bottom: 9px; }
.lote-tot-gr { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 10px; }
.lote-tot { background: var(--panel-2, #1c2333); border-radius: 8px; padding: 9px 12px; }
.lote-tot small { display: block; font-size: 12px; text-transform: uppercase;
  letter-spacing: .08em; color: var(--text); }
.lote-tot b { display: block; font-size: 18px; font-weight: 700; margin-top: 2px; }
.lote-acc { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin-top: 11px; }

/* Lo que NO se manda: separado, con otro marco, para que no se confunda. */
.lote-mio { border: 1px dashed var(--border, #252d3f); border-radius: 10px; padding: 12px 14px; }
.lote-mio-tit { font-size: 12px; text-transform: uppercase; letter-spacing: .1em;
  color: var(--text); font-weight: 700; margin-bottom: 9px; }

/* ── Mensual ────────────────────────────────────────────────────────── */
.men { padding: 14px 16px 22px; display: flex; flex-direction: column; gap: 14px; }
.men-barra { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
.men-tit { font-size: 12px; text-transform: uppercase; letter-spacing: .11em; font-weight: 700;
  color: var(--text); display: flex; align-items: baseline; gap: 10px; }
.men-tit small { font-size: 12px; letter-spacing: 0; text-transform: none;
  color: var(--text); font-weight: 400; }
.men-tabla { width: 100%; }
.men-num { text-align: right; font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; white-space: nowrap; }
.men-fuerte { font-weight: 700; color: var(--text); }
.men-subtotal td { border-top: 1px solid var(--border, #252d3f); font-weight: 700; }
.men-acc { text-align: right; }
.men-manual { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 7px; }
.men-item { display: flex; align-items: center; gap: 6px; }
.men-nom { flex: 1 1 auto; min-width: 0; background: var(--panel-2, #1c2333);
  border: 1px solid var(--border, #252d3f); border-radius: 8px; color: var(--text, #ecf0f4);
  font: inherit; font-size: 12.5px; padding: 6px 9px; }
.men-val { flex: 0 0 130px; text-align: right; background: var(--panel-2, #1c2333);
  border: 1px solid var(--border, #252d3f); border-radius: 8px; color: var(--text, #ecf0f4);
  font: inherit; font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-size: 12.5px; padding: 6px 9px; }
/* Lo que resta se ve rojo sin tener que leer el signo. */
.men-val--neg { color: #ff8a8a; border-color: rgba(255,138,138,.45); }
.men-mas { justify-self: start; }
.men-total { display: flex; align-items: baseline; gap: 14px; padding: 13px 16px;
  border: 1.5px solid var(--vnv-marca, var(--accent-amber, #f2c200)); border-radius: 10px; }
.men-total span { font-size: 12px; text-transform: uppercase; letter-spacing: .1em;
  color: var(--text); font-weight: 700; }
.men-total b { margin-left: auto; font-size: 26px; font-weight: 700;
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; color: var(--text); }
.men-total b.men-neg { color: #ff8a8a; }

/* ── La puerta de concesionario ─────────────────────────────────────── */
.tcg-puerta { padding: 44px 18px 50px; text-align: center; }
.tcg-puerta h2 { font-size: 20px; margin: 0 0 3px; font-weight: 700; }
.tcg-puerta p { color: var(--text); margin: 0 0 22px; font-size: 12.5px; }
.tcg-casas { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: 12px; max-width: 760px; margin: 0 auto; }
.tcg-casa { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 12px;
  background: var(--panel-2, #1c2333); border: 2px solid var(--casa, var(--border, #252d3f));
  border-radius: 14px; padding: 26px 16px; color: var(--text, #ecf0f4);
  font: inherit; cursor: pointer; min-height: 132px; }
.tcg-casa:hover { background: var(--panel-2, #232c40); }
.tcg-casa-logo { height: 40px; width: auto; max-width: 84%; object-fit: contain; }
.tcg-claro .tcg-casa-logo { filter: invert(1) brightness(.35); }
.tcg-casa-nom { font-size: 15px; font-weight: 700; }
.tcg-casa-pie { font-size: 12px; color: var(--text); }
.tcg-casa--todos { border-style: dashed; }

/* ── El panel de ajustes ─────────────────────────────────────────────────
   Antes era una lista de filas con pastillas sueltas y las ayudas
   amontonadas al final, así que no se sabía a qué campo correspondía cada
   una. Ahora: cabecera, secciones con título, y un campo por renglón con su
   rótulo, su explicación y su control alineado a la derecha. */
.tcg-ajustes {
  background: var(--panel-2, #202940);
  border-bottom: 1px solid var(--border, #252d3f);
}
.tcg-aj-cab {
  display: flex; align-items: baseline; gap: 12px; flex-wrap: wrap;
  padding: 13px 16px 11px; border-bottom: 1px solid var(--border, #252d3f);
}
.tcg-aj-cab b { font-size: 15px; font-weight: 700; }
.tcg-aj-cab span { font-size: 12px; color: var(--text); flex: 1 1 200px; }
.tcg-aj-cerrar {
  background: transparent; border: 1px solid var(--border, #252d3f); border-radius: 8px;
  color: var(--text, #ecf0f4); font: inherit; font-size: 12px; padding: 5px 13px; cursor: pointer;
}
.tcg-aj-cerrar:hover { border-color: var(--vnv-marca, var(--accent-amber, #f2c200)); }

.tcg-aj-seccion { padding: 12px 16px 14px; border-bottom: 1px solid var(--border, #252d3f); }
.tcg-aj-seccion:last-child { border-bottom: 0; }
.tcg-aj-titulo {
  font-size: 12px; text-transform: uppercase; letter-spacing: .12em; font-weight: 700;
  color: var(--text); margin-bottom: 9px;
}
.tcg-aj-titulo--sis { color: var(--text); }

/* UNA columna, y con el ancho acotado.
   Estaba en dos columnas «auto-fit». Cada sección tiene distinta cantidad de
   campos —tres, uno, dos, dos— así que en cada una los controles aterrizaban
   en un lugar distinto, con huérfanos sueltos y huecos al costado. Eso es lo
   que hacía que el panel se viera grande y desparramado, no el alto.
   En una columna los controles quedan todos alineados en la misma vertical y
   el ojo baja derecho. Son ocho ajustes: entran igual sin desplazarse. */
.tcg-aj-campos { display: flex; flex-direction: column; gap: 0; }
/* Y que los renglones no se estiren de punta a punta en un monitor ancho:
   un rótulo corto con el control a 900px de distancia no se lee como un par. */
.tcg-ajustes .tcg-aj-seccion { max-width: 640px; }
/* SE ROMPÍA EN MONITORES CHICOS (28/09/2026 · nk). El auditor lo midió: el
   campo mide 608 y su contenido 652, así que el rótulo largo y el control
   juntos no entraban y empujaban la sección entera fuera de la pantalla —de
   ahí los seis desbordes seguidos de Ajustes—.
   Un renglón de flex no achica a sus hijos por debajo de lo que miden («min-
   width: auto» es el valor de fábrica), así que en vez de apretarse, salen.
   Con «wrap» el control baja de renglón cuando no entra, y con «min-width: 0»
   lo que sí puede achicarse, se achica. */
.tcg-aj-campo {
  display: flex; align-items: center; gap: 14px; min-height: 40px;
  flex-wrap: wrap; row-gap: 6px;
  padding: 5px 0; border-bottom: 1px solid rgba(255,255,255,.05);
}
.tcg-aj-campo > * { min-width: 0; }
.tcg-aj-campo:last-child { border-bottom: 0; }
.tcg-aj-rot { min-width: 0; flex: 1 1 auto; }
.tcg-aj-rot b { display: block; font-size: 12.5px; font-weight: 600; }
.tcg-aj-rot small { display: block; font-size: 12px; color: var(--text); line-height: 1.3; }
/* El control puede achicarse. Con «0 0 auto» la versión, que es larga, no
   cedía nada y el rótulo de al lado quedaba de una palabra por renglón.
   Ramiro lo vio en la captura del panel. */
.tcg-aj-ctrl { flex: 0 1 auto; min-width: 0; }
.tcg-aj-medida { font-size: 15px; font-weight: 700; color: var(--text); font-variant-numeric: tabular-nums; }
.tcg-aj-ok { font-size: 12px; color: var(--text); font-weight: 700; margin-right: 8px; }

/* Las opciones excluyentes se ven como UN control, no como pastillas
   sueltas: así se lee que elegir una apaga la otra. */
.tcg-aj-seg { display: inline-flex; border: 1px solid var(--border, #252d3f); border-radius: 8px; overflow: hidden; }
.tcg-aj-seg .tcg-aj-op { border: 0; border-radius: 0; border-left: 1px solid var(--border, #252d3f); }
.tcg-aj-seg .tcg-aj-op:first-child { border-left: 0; }
.tcg-aj-op {
  background: var(--panel, #1b2233); color: var(--text);
  font: inherit; font-size: 12px; padding: 7px 14px; cursor: pointer; white-space: nowrap;
}
.tcg-aj-op:hover { color: var(--text, #ecf0f4); background: rgba(255,255,255,.05); }
.tcg-aj-op[aria-pressed="true"] {
  background: var(--vnv-marca, var(--accent-amber, #f2c200));
  color: var(--vnv-marca-txt, #1d1a06); font-weight: 700;
}
.tcg-aj-fila-btn { display: flex; gap: 6px; }
.tcg-aj-btn--fuerte { border-color: var(--casa-activa, #f2c200) !important; font-weight: 700; }
.tcg-aj-btn {
  display: inline-block; background: var(--panel, #1b2233);
  border: 1px solid var(--border, #252d3f); border-radius: 8px;
  color: var(--text, #ecf0f4); font: inherit; font-size: 12px;
  padding: 7px 14px; cursor: pointer; white-space: nowrap;
}
.tcg-aj-btn:hover { border-color: var(--vnv-marca, var(--accent-amber, #f2c200)); }
.tcg-aj-btn--sis { border-color: #c9a0ff; color: var(--text); }
.tcg-aj-btn--peligro { border-color: #ff8a8a; color: #ff8a8a; }
.tcg-aj-btn--peligro:hover { background: rgba(255,138,138,.12); border-color: #ff8a8a; }

/* La foto de fondo: en una franja arriba, no detrás del menú. Detrás de una
   lista que se lee cincuenta veces por día, una foto compite con el texto. */
/* (Acá vivía la franja de la versión de tarjetas: una banda de 132px, en
   columna y con la foto detrás. Se eliminó al pasar al armazón: como estaba
   DESPUÉS de la regla nueva, la pisaba, y de ahí salían las tres cosas
   juntas — franja alta, texto centrado y superpuesta a la columna.) */

/* ═══════════════════════════════════════════════════════════════════════
   CAMPOS Y BOTONES APAGADOS SOBRE LAS FRANJAS PINTADAS
   Dos agujeros del mismo criterio, medidos en Ingreso de stock de Renault:

   1. Los campos. La regla que pone «color: inherit» en la cabecera excluye
      input, select y textarea —para no pisarlos—, pero excluirlos no les da
      un color: igual heredan. Terminaban con la tinta de la marca (casi
      negra en Giorgi) sobre su propio fondo oscuro. Medido: letra #202940
      sobre fondo #202940, contraste 1,00. En Vesubio y Ginza la tinta es
      blanca y por eso ahí se leía.
   2. Los botones apagados. Sobre el amarillo, bajarles la opacidad los borra:
      «Cancelar» quedaba amarillo sobre amarillo. Un botón apagado tiene que
      seguir viéndose; apagado no es invisible.
   ═══════════════════════════════════════════════════════════════════════ */
.per-modal > .per-cab input,
.per-modal > .per-cab select,
.per-modal > .per-cab textarea,
.per-modal > .per-pie input,
.per-modal > .per-pie select,
.per-modal > .per-pie textarea {
  color: var(--text, #e6eaf0) !important;
  background: var(--panel-2, #202940);
  border: 1px solid rgba(255,255,255,.30);
}
.per-modal > .per-cab option,
.per-modal > .per-pie option { color: var(--text, #e6eaf0); background: var(--panel-2, #202940); }

.per-modal > .per-cab .lu-btn:disabled,
.per-modal > .per-pie .lu-btn:disabled,
.per-modal .vnv-pie .lu-btn:disabled {
  opacity: 1;
  color: color-mix(in srgb, var(--vnv-marca-txt, #131824) 62%, transparent) !important;
  border-color: color-mix(in srgb, var(--vnv-marca-txt, #131824) 42%, transparent) !important;
  background: color-mix(in srgb, var(--vnv-marca-txt, #131824) 8%, transparent) !important;
  cursor: not-allowed;
}

/* ═══════════════════════════════════════════════════════════════════════
   CONTROLES SOBRE LA FRANJA PINTADA
   Un select o un input en la cabecera se llevaba el fondo oscuro de la regla
   base («--panel-2») y la letra oscura de la marca: oscuro sobre oscuro. En
   Vesubio y Ginza la letra es blanca y zafaba; en Jorge Giorgi «Sin migrados»
   era ilegible. Mismo choque que el botón de cerrar, distinto elemento.
   Un campo tiene que parecer un campo: relleno claro y letra oscura, con
   colores FIJOS para que funcione sobre amarillo, azul y rojo por igual.
   ═══════════════════════════════════════════════════════════════════════ */
.per-modal > .per-cab select,
.per-modal > .per-cab input,
.per-modal > .per-cab textarea {
  background: #f7f9fb !important;
  color: #000 !important;
  border: 1px solid rgba(0,0,0,.38) !important;
  border-radius: 6px;
}
.per-modal > .per-cab select option { background: #f7f9fb; color: #000; }
.per-modal > .per-cab select:focus,
.per-modal > .per-cab input:focus { outline: 2px solid rgba(0,0,0,.45); outline-offset: 1px; }

/* El botón secundario del pie —Cancelar— quedaba en un filo apenas marcado
   sobre el amarillo: se medía en 1,7:1, prácticamente invisible. Ahora lleva
   filo pleno y letra a opacidad completa. */
.per-modal .per-pie .lu-btn:not(.lu-btn--accion):not(.lu-btn--ok):not(.tcg-cerrar),
.per-modal .vnv-pie .lu-btn:not(.lu-btn--accion):not(.lu-btn--ok):not(.tcg-cerrar) {
  border: 1.5px solid currentColor !important;
  opacity: 1;
  font-weight: 600;
}

/* ═══════════════════════════════════════════════════════════════════════
   LOS CONTROLES DE FORMULARIO EN UNA FRANJA PINTADA
   La regla que reparte la tinta de la marca dice «*:not(input):not(select)
   :not(textarea)», o sea que deja los campos afuera A PROPÓSITO: un campo
   tiene su propio fondo oscuro. Pero como nadie les dio color después, la
   letra les llegaba igual por herencia. En Vesubio y Ginza la tinta es
   blanca y sobre el fondo oscuro del campo se lee; en Jorge Giorgi es casi
   negra: 1,21:1, ilegible. Es el mismo choque del botón de cerrar, ahora en
   los campos. Se resuelve dándoles el color que va con SU fondo.
   ═══════════════════════════════════════════════════════════════════════ */
.per-modal > .per-cab input,
.per-modal > .per-cab select,
.per-modal > .per-cab textarea,
.per-modal > .per-pie input,
.per-modal > .per-pie select,
.per-modal > .per-pie textarea {
  color: var(--text, #ecf0f4) !important;
  background: var(--panel-2, #202940) !important;
  border: 1px solid rgba(255,255,255,.22) !important;
}
.per-modal > .per-cab option,
.per-modal > .per-pie option { color: var(--text, #ecf0f4); background: var(--panel-2, #202940); }

/* ═══════════════════════════════════════════════════════════════════════
   EL BOTÓN PRINCIPAL DEL PIE, IGUAL EN LAS TRES CASAS
   Estaba invertido a propósito: fondo con la tinta de la marca y letra con
   el color de la marca. En Vesubio y Ginza la tinta es BLANCA, así que
   quedaba blanco sobre azul o rojo y se leía bien. En Jorge Giorgi la tinta
   es casi negra y el color es amarillo: letra AMARILLA, mientras el resto de
   los botones de la pantalla tienen letra blanca. De ahí el desparejo que
   sólo aparecía en Renault.
   Ahora: relleno oscuro fijo, letra casi blanca y filo del color de la casa.
   Sin variables de color en el relleno ni en la letra —la misma lección del
   botón de cerrar—: lo que no depende del tema no puede desalinearse.
   ═══════════════════════════════════════════════════════════════════════ */
.per-modal .per-pie .lu-btn--accion,
.per-modal .vnv-pie .lu-btn--accion,
.per-modal .per-pie .lu-btn--ok,
.per-modal .vnv-pie .lu-btn--ok {
  background: var(--panel-3, #131824) !important;
  color: var(--text, #f7f9fb) !important;
  border: 1.5px solid var(--vnv-marca, var(--accent-amber, #f2c200)) !important;
  font-weight: 700;
}
.per-modal .per-pie .lu-btn--accion:hover:not(:disabled),
.per-modal .vnv-pie .lu-btn--accion:hover:not(:disabled),
.per-modal .per-pie .lu-btn--ok:hover:not(:disabled),
.per-modal .vnv-pie .lu-btn--ok:hover:not(:disabled) {
  background: var(--panel-2, #22293a) !important;
}
.per-modal .per-pie .lu-btn--accion:disabled,
.per-modal .vnv-pie .lu-btn--accion:disabled { opacity: .45; }


/* ═══════════════════════════════════════════════════════════════════════
   REGLAS DE PANTALLA CHICA — TODAS JUNTAS Y ORDENADAS
   Con @media no hay especificidad: gana la que va ÚLTIMA. Estaban
   desparramadas por todo el archivo, así que cuál ganaba dependía de en qué
   línea la había escrito cada sesión. Eso rompió el teclado de la pantalla
   de ingreso y el modal de ventas, entre otros.
   Ahora van todas acá, de MAYOR a MENOR ancho. Esa es la escalera correcta:
   lo de 900 lo puede corregir lo de 768, y eso lo puede corregir lo de 560.
   REGLA: una regla nueva de celular va a su bloque de ancho, no al final.
   ═══════════════════════════════════════════════════════════════════════ */

/* ── EL RENGLÓN ÚNICO ────────────────────────────────────────────────────
   Reparto: [banda de la casa, 214px] [sectores] [TCG]. La banda mide lo
   mismo que la columna de abajo, así los sectores y el título de la franja
   arrancan donde arranca el lienzo. */
.tcg-top-1 { display: flex; align-items: stretch; gap: 0; padding: 0 12px 0 0;
  min-height: 44px; }
.tcg-banda-casa { flex: 0 0 var(--tcg-side-w, 232px); display: flex; align-items: center;
  padding: 0 12px; position: relative; }
.tcg-banda-casa::after { content: ""; position: absolute; right: 0; top: 8px; bottom: 8px;
  width: 1px; background: var(--border, #252d3f); }

/* Un solo logo a la vista: el de la casa puesta. Cada toque pasa al
   siguiente. 22px — probado contra 26 y 32: a esos tamaños el logo pesaba
   más que la pantalla que uno vino a mirar. */
.tcg-casa-sel { background: transparent; border: 0; cursor: pointer; padding: 3px 6px;
  display: flex; align-items: center; border-radius: 6px; font: inherit; position: relative; }
.tcg-casa-sel:hover { background: rgba(255,255,255,.06); }
.tcg-casa-sel img { display: block; height: 22px; width: auto; max-width: 168px;
  object-fit: contain; object-position: left center; }
.tcg-casa-sel-nom { font-size: 12px; font-weight: 700; color: var(--text, #ecf0f4); }
/* Con una sola casa no hay a dónde girar: deja de ser botón, pero se sigue
   viendo igual (nada de opacidad de «apagado»). */
.tcg-casa-sel--sola { cursor: default; }
.tcg-casa-sel--sola:hover { background: transparent; }
.tcg-casa-sel--sola .tcg-casa-aro, .tcg-casa-sel--sola::after { display: none; }
/* El aro y el chevrón son la única pista de que el logo se toca. */
.tcg-casa-aro { position: absolute; inset: 0; border-radius: 6px;
  border: 1px solid transparent; transition: border-color .14s; pointer-events: none; }
.tcg-casa-sel:hover .tcg-casa-aro, .tcg-casa-sel:focus-visible .tcg-casa-aro {
  border-color: color-mix(in srgb, var(--casa, #f2c200) 55%, transparent); }
.tcg-casa-sel::after { content: "⌄"; position: absolute; right: 1px; bottom: -1px;
  font-size: 12px; line-height: 1; color: var(--text); opacity: 0;
  transition: opacity .14s; pointer-events: none; }
.tcg-casa-sel:hover::after, .tcg-casa-sel:focus-visible::after { opacity: 1; }

/* El TCG en la otra punta, más chico: es la identidad del sistema, no la de
   la casa, y no tiene por qué pesar más que ella. */
.tcg-logo { margin-left: auto; align-self: center; }
.tcg-claro .tcg-casa-sel img { filter: invert(1) brightness(.3); }

/* Los sectores. En el teléfono la fila se desliza con el dedo; en un monitor
   NO, y ése era el problema: con «overflow-x: auto» y la barra escondida, los
   sectores que no entraban seguían estando pero no había forma de llegar a
   ellos ni pista de que existieran. Reportado en una pantalla de ~1420: se
   veía hasta PostVenta y Tableros no aparecía. No se perdía el sector, se
   perdía el acceso, que es peor porque no se nota.
   La garantía va abajo: en cualquier cosa que no sea la capa fija del
   teléfono, lo que no entra BAJA DE RENGLÓN. Puede quedar una barra de dos
   líneas en un monitor angosto, y está bien: es preferible a un sector al
   que no se puede entrar. */
.tcg-sect { flex: 1 1 auto; min-width: 0; display: flex; align-items: center; gap: 3px;
  padding: 0 10px 0 18px; overflow-x: auto; scrollbar-width: none;
  border: 0; background: transparent; }
.tcg-app:not(.tcg-app--solo) .tcg-sect {
  flex-wrap: wrap; row-gap: 2px; overflow-x: visible; padding-top: 3px; padding-bottom: 3px;
}
/* Y antes de partirse en dos, que se apriete. Con «clamp» el aire de cada
   pastilla se achica solo a medida que la pantalla se angosta, sin ningún
   punto de corte: a 1920 queda como estaba, a 1420 recupera unos 55px —más
   que los ~50 que faltaban en el reporte— y la fila sigue entrando en una
   línea. Se hace con clamp y no con un @media de 1500 a propósito: una
   regla de ancho que alcanza a un monitor está prohibida en este proyecto,
   y con razón. */
.tcg-sec { padding: 4px clamp(6px, calc(0.55vw / var(--tcg-z, 1)), 10px); font-size: clamp(13px, calc(0.82vw / var(--tcg-z, 1)), 13px); }
.tcg-app:not(.tcg-app--solo) .tcg-sect { column-gap: clamp(1px, calc(0.2vw / var(--tcg-z, 1)), 3px); }
.tcg-sect::-webkit-scrollbar { display: none; }
.tcg-sect::before { display: none; }
/* Tarjeta en vez de subrayado: en un renglón de 42px con letra de 12 el
   subrayado es un pelito y no se ve dónde estás parado. */
.tcg-sec { border: 1px solid transparent; border-bottom: 1px solid transparent;
  border-radius: 6px; padding: 4px 10px; font-size: 13px; flex: 0 0 auto; }
.tcg-sec:hover { border-color: rgba(255,255,255,.1); }
.tcg-sec[aria-pressed="true"] {
  border-color: color-mix(in srgb, var(--accent-amber, #f2c200) 45%, transparent);
  background: color-mix(in srgb, var(--accent-amber, #f2c200) 11%, transparent); }

/* La barra del pulgar, la hoja y los controles del teléfono se apagan acá,
   ANTES de la escalera, y el bloque de 700px los enciende. Puestos DESPUÉS
   de la escalera este display:none le gana al bloque de celular y el
   teléfono se queda sin barra de navegación. Pasó, y se vio midiendo en
   Chromium, no leyendo el archivo. */
.tcg-pulgar, .tcg-velo, .tcg-hoja, .tcg-top-tit, .tcg-top-mas { display: none; }

/* Con la columna plegada (46px) todo acompaña, o los sectores quedan
   flotando sobre la nada y la franja empieza a mitad de camino. */
.tcg-app--plegada .tcg-banda-casa { flex: 0 0 46px; padding: 0 4px; }
.tcg-app--plegada .tcg-banda-casa .tcg-casa-sel img { max-width: 38px; }
.tcg-app--plegada .tcg-franja { padding-left: 64px; }

/* La columna se queda con el alto que dejaron los concesionarios: no se
   achica, respira. Con el bloque puesto, las 17 pantallas de Vehículos
   nuevos no entraban y había que desplazar. */
.tcg-side-lista { padding-bottom: 12px; }
.tcg-side-it { margin-bottom: 6px; }
/* Un renglón siempre: un nombre largo en dos líneas rompe el alto parejo y
   la lista deja de leerse de un vistazo. */
.tcg-side-tx { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

/* (Reglas huérfanas: las clases .tcg-casas-pie, .tcg-casa-it,
   .tcg-casa-logo-mini y .tcg-casa--todos ya no las dibuja nadie. Se apagan
   acá en vez de borrarlas más arriba para no mover de lugar el resto.) */
.tcg-casas-pie, .tcg-casa-it, .tcg-casa--todos { display: none !important; }

/* Notebook. Medido en Chromium con los diez sectores puestos: a 1672px entran
   con 0px de sobra, pero a 1280px sobresalen 120px y hay que deslizar.
   Los iconitos de cada sector suman unos 24px cada uno y no dicen nada que el
   rótulo no diga ya: se van primero. Con eso se recuperan ~240px, más que
   suficiente. (Aparte, el usuario puede apagarlos siempre desde ⚙.) */

/* ── Asignación en el teléfono ──────────────────────────────────────────
   La barra de esta pantalla tiene diez botones. Apilados en 360px —que es lo
   que hacía la regla de 768px, «flex-direction: column» con ancho completo—
   ocupaban la pantalla entera antes de la primera fila: el usuario abría
   Asignación y veía una columna de botones, no sus operaciones.
   En el teléfono se dejan los dos que se usan parado en el salón: agregar una
   asignación y mostrar u ocultar los indicadores. Lo demás —cargar el Excel,
   exportar, crear y borrar solapas, elegir columnas, fijar el tablero— son
   tareas de escritorio y no desaparecen: siguen estando donde se hacen.
   El buscador tampoco va: la lista trae el suyo. */
.asg-solo-monitor { display: none !important; }
@media (min-width: 900px) {
  .asg-solo-monitor { display: revert !important; }
  .asg-buscador.asg-solo-monitor,
  .asg-header-acciones.asg-solo-monitor,
  .asg-col-menu-wrap.asg-solo-monitor { display: flex !important; }
}

/* Pasar a la solapa siguiente sin volver arriba. Ver el comentario del JSX. */
.per-sig-sec {
  display: block; width: 100%; margin: 14px 0 4px; min-height: 46px;
  border-radius: 10px; cursor: pointer; font: inherit; font-size: 14px;
  font-weight: 600; border: 1px solid var(--border, #2c2f36);
  background: var(--panel-2, #202940); color: var(--text);
}
.per-sig-sec:active { background: var(--panel, #1b2233); }
/* En el monitor no ocupa todo el ancho: el detalle ahí es ancho y un botón
   de mil doscientos píxeles no se lee como un paso, se lee como una barra. */
@media (min-width: 900px) {
  .per-sig-sec { width: auto; min-width: 260px; padding: 0 18px; margin-left: auto; }
}
.per-sig-sec span { opacity: 1; margin-left: 4px; }

/* El aviso de que la pantalla se sale. Arriba y no abajo: abajo está la barra
   del pulgar, y ya nos pasó una vez que la chapa de versión le tapaba dos
   puertas. Ocupa un renglón, y sólo aparece cuando hay algo que avisar. */
.tcg-desborde-chapa {
  position: fixed; left: 0; right: 0; top: 0; z-index: 9000;
  border: 0; cursor: pointer; font: inherit; font-size: 12px; font-weight: 600;
  padding: 7px 10px; text-align: center;
  background: #ff8a4c; color: #000;
  box-shadow: 0 2px 10px rgba(0,0,0,.4);
}
.tcg-desborde-panel {
  position: fixed; left: 8px; right: 8px; top: 44px; z-index: 9001;
  background: var(--panel, #1b2233); border: 1px solid #ff8a4c;
  border-radius: 12px; padding: 10px; box-shadow: 0 18px 40px rgba(0,0,0,.6);
  max-height: calc(70dvh / var(--tcg-z, 1)); display: flex; flex-direction: column;
}
.tcg-desborde-cab { display: flex; align-items: center; justify-content: space-between;
  margin-bottom: 8px; font-size: 13px; }
.tcg-desborde-cab button { width: 32px; height: 32px; border-radius: 8px; cursor: pointer;
  border: 1px solid var(--border, #2c2f36); background: var(--bg, #131824); color: var(--text); }
/* Cuando el aviso está, el contenido arranca más abajo: si no, la franja
   naranja le tapa el renglón de arriba a la pantalla que se está mirando. */
.app-shell:has(.tcg-desborde-chapa) .tcg-app { padding-top: 30px; }

/* El diagnóstico de ancho. Texto plano y monoespaciado: lo que hace falta es
   copiarlo y mandarlo, no leerlo prolijo en pantalla. */
.tcg-diag-resumen { margin: 0 0 8px; font-size: 12px; color: var(--text); }
.tcg-diag-texto {
  margin: 0; padding: 10px; max-height: calc(40dvh / var(--tcg-z, 1)); overflow: auto;
  background: var(--bg, #131824); border: 1px solid var(--border, #2c2f36);
  border-radius: 8px; font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif;
  font-size: 12px; line-height: 1.5; color: var(--text);
  white-space: pre-wrap; word-break: break-word;
}
.tcg-diag-acciones { display: flex; gap: 8px; margin-top: 8px; }

/* La versión, adentro de Ajustes. Ver el comentario del JSX. */
.tcg-aj-version { display: inline-block; white-space: normal; overflow-wrap: anywhere;
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif;
  font-size: 12.5px; color: var(--text); background: var(--panel-2, #202940);
  border: 1px solid var(--border, #2c2f36); border-radius: 8px;
  padding: 7px 10px; word-break: break-word; }

/* «Datos» como primera solapa del teléfono. Arriba de todo ocupaba 900px de
   formulario antes del primer ítem: nadie se enteraba de que había que
   completarlos, y encima empujaba la tira de secciones tan abajo que sólo se
   veían dos. En el monitor no molestan y quedan donde están. */
/* En el teléfono, los datos adentro del detalle: sin el marco ni el
   separador que llevan arriba en el monitor, porque ahí ya son el contenido
   de la solapa y no un bloque aparte. */
.per-datos--solapa { border: 0 !important; padding: 0 !important; margin: 0 !important; }
/* En el teléfono las cinco columnas no entran. Este es el armado del teléfono,
   que lleva su propia clase, así que se arregla acá y no hace falta un @media
   —uno nuevo obligaría a revisar toda la escalera de max-width—. */
.per-datos--solapa { grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)) !important; }
.per-datos--solapa .per-campo--ancho { grid-column: auto; }

/* UNA SOLA BARRA DE ATAJOS, DE ALTO FIJO. Eran dos renglones con quiebre de
   línea: según el ancho se partían en dos o tres y la tabla de ítems subía y
   bajaba al mover la ventana. Ahora la altura es fija y no hay quiebre: si no
   entra, la barra se corre sola hacia el costado y la tabla no se mueve.
   Maqueta aprobada por Ramiro (maqueta_peritaje.html). */
.per-barra-fija {
  display: flex; align-items: center; gap: 8px; flex-wrap: nowrap;
  height: 42px; padding: 0 10px; margin: 0 0 10px; border-radius: 8px;
  border: 1px dashed var(--border, #2c2f36);
  overflow-x: auto; overflow-y: hidden; scrollbar-width: none;
  /* SE QUEDA QUIETA. Antes se iba con el desplazamiento de los ítems: uno
     bajaba a la puerta trasera y ya no tenía los botones de calificar a
     mano. Ahora queda clavada arriba del panel mientras la lista corre por
     debajo. Renglón propio, separado de la ayuda de la sección.
     El fondo tiene que ser OPACO: con el translúcido de antes se veían los
     ítems pasando por atrás. */
  position: sticky; top: 0; z-index: 3;
  background: var(--panel, #1a2130);
}
.per-barra-fija::-webkit-scrollbar { display: none; }
.per-barra-fija .com-ayuda { flex: 0 0 auto; white-space: nowrap; font-size: 12px; }
.per-barra-sep { flex: none; width: 1px; height: 20px; background: var(--border, #2c2f36); }
.per-barra-fija .per-todos-btn,
.per-barra-fija .lu-btn {
  flex: 0 0 auto; white-space: nowrap;
  height: 26px; padding: 0 9px; border-radius: 7px; font-size: 12px;
  border: 1px solid var(--border, #2c2f36); background: transparent;
  color: var(--text); font-weight: 600;
}
/* El color aparece al apuntar, no antes: sirve para confirmar qué se va a
   poner, no para llamar la atención desde el arranque. */
.per-barra-fija .per-todos-btn:hover:not(:disabled),
.per-barra-fija .lu-btn:hover:not(:disabled) {
  border-color: currentColor; color: var(--text);
  background: var(--panel-2, #202940);
}
.per-barra-fija .per-todos-btn:disabled { opacity: .4; }

/* La versión adentro del menú del teléfono. Ver el comentario del JSX. */
.tcg-hoja-version { padding: 14px 12px 6px; margin-top: 8px;
  border-top: 1px solid var(--border, #2c2f36); }
.tcg-hoja-version span { display: block; font-size: 12px; letter-spacing: .05em;
  text-transform: uppercase; color: var(--text); }
.tcg-hoja-version b { display: block; margin-top: 3px; font-size: 12.5px;
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-weight: 600;
  color: var(--text); word-break: break-word; }

/* Rótulo largo y corto de los atajos del buscador de ventas. El corto sólo
   aparece en el teléfono; ver el bloque de pantalla chica. */
.vnvb-largo { display: inline; }
.vnvb-corto { display: none; }

/* ── Las tablas en el teléfono: lista, foco y ficha ─────────────────────
   Reemplaza a la tabla sólo en pantalla chica. Ver ListaCelu para el porqué.
   Va ANTES de la escalera de @media, como todas las reglas de componente. */
/* La pieza no puede suponer nada del padre. Con «flex: 1 1 auto» funcionaba
   adentro del peritaje —cuyo cuerpo es una columna— pero en Asignación el
   contenedor es una FILA: la lista se encogía a 267px y empujaba la barra de
   herramientas a un rincón de 77px, apilada. Medido a 360px.
   Con «width: 100%» y ancho mínimo propio se comporta igual en los tres
   casos: padre bloque, fila o columna. */
.lcel { display: flex; flex-direction: column; position: relative;
  width: 100%; min-width: 0; flex: 1 1 100%; }
.lcel-barra { flex: 0 0 auto; display: flex; align-items: center; gap: 6px;
  padding: 6px 0; }
.lcel-barra input { flex: 1 1 auto; min-width: 0; height: 34px; border-radius: 8px;
  border: 1px solid var(--border, #2c2f36); background: var(--bg, #131824);
  color: var(--text); font: inherit; font-size: 13px; padding: 0 10px; }
.lcel-cont { flex: 0 0 auto; font-size: 12px; color: var(--text);
  font-variant-numeric: tabular-nums; }
.lcel-ico { flex: 0 0 auto; width: 34px; height: 34px; border-radius: 8px; cursor: pointer;
  border: 1px solid var(--border, #2c2f36); background: var(--bg, #131824);
  color: var(--text); font-size: 14px; }
.lcel-ico[aria-pressed="true"] { border-color: var(--accent-amber, #f2c200);
  color: var(--text); }
.lcel-ico:disabled { opacity: .32; cursor: default; }

/* El renglón de foco: qué columna se está mirando, y cargando. */
.lcel-foco { flex: 0 0 auto; display: flex; align-items: center; gap: 6px;
  padding: 5px 0; overflow-x: auto; scrollbar-width: none;
  border-bottom: 1px solid var(--border, #2c2f36); }
.lcel-foco::-webkit-scrollbar { display: none; }
.lcel-foco-et { flex: 0 0 auto; font-size: 12px; letter-spacing: .06em;
  text-transform: uppercase; color: var(--text); }
.lcel-chip { flex: 0 0 auto; height: 28px; padding: 0 11px; border-radius: 14px;
  font: inherit; font-size: 12px; cursor: pointer; white-space: nowrap;
  border: 1px solid var(--border, #2c2f36); background: var(--bg, #131824);
  color: var(--text); }
.lcel-chip[aria-pressed="true"] {
  background: color-mix(in srgb, var(--accent-amber, #f2c200) 16%, transparent);
  border-color: color-mix(in srgb, var(--accent-amber, #f2c200) 55%, transparent);
  color: var(--text); font-weight: 600; }

.lcel-lista { flex: 1 1 auto; min-height: 0; overflow-y: auto; overscroll-behavior: contain; }
.lcel-vacio { padding: 40px 22px; text-align: center; color: var(--text);
  font-size: 13px; line-height: 1.6; }
.lcel-fila { display: flex; align-items: center; gap: 8px; width: 100%; min-height: 56px;
  padding: 8px 2px; border-bottom: 1px solid var(--border, #2c2f36);
  color: var(--text); text-align: left; cursor: pointer; }
.lcel-fila:active { background: var(--panel, #1b2233); }
.lcel-tx { flex: 1 1 auto; min-width: 0; display: block; }
.lcel-1 { display: flex; align-items: baseline; gap: 7px; font-size: 14px;
  font-weight: 600; overflow: hidden; line-height: 1.25; }
.lcel-num { flex: 0 0 auto; font-size: 12px; color: var(--text);
  font-weight: 400; font-variant-numeric: tabular-nums; min-width: 18px; }
/* «text-overflow» no aplica al texto suelto de un contenedor flex: el rótulo
   tiene que ir adentro de su propio elemento o se corta sin los puntos. */
.lcel-t { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.lcel-2 { display: block; font-size: 12px; color: var(--text);
  margin-top: 2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.lcel-val { flex: 0 0 auto; text-align: right; font-size: 14px; font-weight: 700;
  font-variant-numeric: tabular-nums; min-width: 88px; }
/* El número completo no entra a 14px al lado de un nombre. */
.lcel-val--larga { font-size: 12.5px; min-width: 104px; }
.lcel-val--vacio { color: var(--text); font-weight: 400; font-size: 12px; }
/* 128 y no 104: «$112.000.000» son nueve dígitos y se cortaba el último. */
.lcel-edita { flex: 0 0 auto; width: 128px; height: 38px; text-align: right;
  border-radius: 8px; border: 1px solid var(--border, #2c2f36);
  background: var(--panel-2, #202940); color: var(--text); font: inherit;
  font-size: 13px; font-weight: 600; padding: 0 8px; font-variant-numeric: tabular-nums; }
.lcel-edita:focus { outline: 0; border-color: var(--accent-amber, #f2c200); }

.lcel-tot { flex: 0 0 auto; display: flex; align-items: center; justify-content: space-between;
  padding: 8px 4px; background: var(--panel-2, #202940);
  border-top: 1px solid var(--border, #2c2f36); font-size: 12px;
  color: var(--text); }
.lcel-tot b { font-size: 15px; color: var(--text); font-variant-numeric: tabular-nums; }

.lcel-cols { position: fixed; left: 8px; right: 8px; top: 92px; z-index: 62;
  background: var(--panel, #1b2233); border: 1px solid var(--border, #2c2f36);
  border-radius: 12px; box-shadow: 0 18px 40px rgba(0,0,0,.55);
  max-height: calc(70dvh / var(--tcg-z, 1)); display: flex; flex-direction: column; overflow: hidden; }
.lcel-cols h3 { margin: 0; padding: 11px 13px 4px; font-size: 13px; }
.lcel-cols > p { margin: 0; padding: 0 13px 9px; font-size: 12px;
  color: var(--text); line-height: 1.5; }
.lcel-plata { display: flex; flex-direction: column; gap: 6px; padding: 2px 13px 11px;
  border-bottom: 1px solid var(--border, #2c2f36); margin-bottom: 6px; }
.lcel-plata > span:first-child { font-size: 12px; color: var(--text); }
.lcel-par { display: flex; gap: 6px; }
.lcel-plata button { flex: 1; height: 34px; border-radius: 8px; cursor: pointer;
  border: 1px solid var(--border, #2c2f36); background: var(--bg, #131824);
  color: var(--text); font: inherit; font-size: 12.5px;
  font-variant-numeric: tabular-nums; }
.lcel-plata button[aria-pressed="true"] { border-color: var(--accent-amber, #f2c200);
  color: var(--text); font-weight: 600;
  background: color-mix(in srgb, var(--accent-amber, #f2c200) 14%, transparent); }
.lcel-cols-lista { overflow-y: auto; padding: 0 5px 8px; }
.lcel-cols-lista label { display: flex; align-items: center; gap: 9px; padding: 8px;
  font-size: 13px; border-radius: 8px; cursor: pointer; }
.lcel-cols-lista input { width: 18px; height: 18px; accent-color: var(--accent-amber, #f2c200); }
.lcel-rol { margin-left: auto; font-size: 12px; color: var(--text); }
.lcel-cols-pie { padding: 9px 12px; border-top: 1px solid var(--border, #2c2f36); }
.lcel-cols-pie button { width: 100%; height: 38px; border-radius: 9px; border: 0;
  background: var(--accent-amber, #f2c200); color: #000; font: inherit;
  font-weight: 600; cursor: pointer; }

.lcel-velo { position: fixed; inset: 0; background: rgba(0,0,0,.55); z-index: 60; }
.lcel-ficha { position: fixed; left: 0; right: 0; bottom: 0; top: 64px; z-index: 61;
  background: var(--panel, #1b2233); border-top: 2px solid var(--accent-amber, #f2c200);
  border-radius: 14px 14px 0 0; display: flex; flex-direction: column; overflow: hidden; }
.lcel-ficha-cab { flex: 0 0 auto; display: flex; align-items: center; gap: 8px;
  padding: 9px 8px 9px 12px; border-bottom: 1px solid var(--border, #2c2f36); }
.lcel-ficha-t { flex: 1 1 auto; min-width: 0; }
.lcel-ficha-t b { display: block; font-size: 14px;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.lcel-ficha-t span { font-size: 12px; color: var(--text); }
.lcel-nav { display: flex; gap: 4px; flex: 0 0 auto; }
.lcel-nav button { width: 34px; height: 34px; border-radius: 8px; cursor: pointer;
  border: 1px solid var(--border, #2c2f36); background: var(--bg, #131824);
  color: var(--text); font-size: 15px; }
.lcel-nav button:disabled { opacity: .35; }
.lcel-ficha-cuerpo { flex: 1 1 auto; min-height: 0; overflow-y: auto; padding: 4px 0 10px; }
.lcel-grupo { font-size: 12px; letter-spacing: .07em; text-transform: uppercase;
  color: var(--text); padding: 12px 12px 5px; margin: 0; }
.lcel-campo { display: flex; align-items: center; gap: 10px; padding: 5px 12px; min-height: 44px; }
.lcel-campo label { flex: 0 0 128px; font-size: 12px; color: var(--text); }
.lcel-campo input { flex: 1 1 auto; min-width: 0; height: 38px; border-radius: 8px;
  border: 1px solid var(--border, #2c2f36); background: var(--bg, #131824);
  color: var(--text); font: inherit; font-size: 14px; padding: 0 9px; }
.lcel-campo input.lcel-num { text-align: right; font-variant-numeric: tabular-nums; font-weight: 600; }
.lcel-campo--calc input { background: transparent; border-color: transparent;
  color: var(--text); }
.lcel-ficha-pie { flex: 0 0 auto; display: flex; gap: 8px; padding: 9px 12px;
  border-top: 1px solid var(--border, #2c2f36); background: var(--panel-2, #202940); }
.lcel-ficha-pie button { flex: 1; height: 42px; border-radius: 9px; cursor: pointer;
  border: 1px solid var(--border, #2c2f36); background: var(--bg, #131824);
  color: var(--text); font: inherit; font-size: 14px; font-weight: 600; }

/* ── El peritaje en el teléfono: lista de ítems y hoja ──────────────────
   Reemplaza a la tabla sólo en pantalla chica. Ver PeritajeItemsCelu para el
   porqué. Va ANTES de la escalera de @media, como todas las reglas de
   componente: si quedara después, una regla plana le ganaría al bloque de
   celular aunque ése dijera max-width. */
.pcel-lista { display: block; }
.pcel-fila {
  display: flex; align-items: center; gap: 8px; width: 100%; min-height: 52px;
  padding: 6px 2px; border-bottom: 1px solid var(--border, #2c2f36);
  color: var(--text); text-align: left; cursor: pointer;
}
.pcel-fila:active { background: var(--panel-2, #202940); }
.pcel-tx { flex: 1 1 auto; min-width: 0; display: block; }
.pcel-n { display: block; font-size: 14px;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pcel-obs { display: block; font-size: 12px; color: var(--text);
  margin-top: 2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pcel-fila--sin .pcel-n { color: var(--text); }
/* La pastilla es lo único con color en la lista: se barre la columna derecha
   y se ve de una qué falta y qué está mal. */
.pcel-pill {
  flex: 0 0 auto; height: 30px; min-width: 78px; padding: 0 10px; border-radius: 15px;
  font-size: 12px; font-weight: 600; display: flex; align-items: center;
  justify-content: center; border: 1px solid currentColor;
}
/* Sin revisar: un círculo VACÍO. Un tilde —de cualquier color— se lee como
   «ya está»; una ✗ se leería como «está mal» en vez de «falta mirarlo». */
.pcel-rapido {
  flex: 0 0 auto; width: 46px; height: 38px; border: 0; background: none;
  padding: 0; display: flex; align-items: center; justify-content: center;
  cursor: pointer;
}
.pcel-rapido i {
  display: block; width: 22px; height: 22px; border-radius: 50%;
  border: 2px dashed color-mix(in srgb, var(--text-muted, #9aa3b2) 70%, transparent);
}
.pcel-rapido:active i {
  border-style: solid; border-color: #3ddc97;
  background: color-mix(in srgb, #3ddc97 25%, transparent);
}

/* La hoja: es donde se trabaja de verdad. */
.pcel-velo { position: fixed; inset: 0; background: rgba(0,0,0,.55); z-index: 60; }
.pcel-hoja {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 61;
  background: var(--panel, #1b2233); border-top: 2px solid var(--accent-amber, #f2c200);
  border-radius: 14px 14px 0 0; display: flex; flex-direction: column;
  max-height: calc(calc(100dvh / var(--tcg-z, 1)) - 46px);
}
.pcel-hoja-cab { flex: 0 0 auto; display: flex; align-items: center; gap: 8px;
  padding: 10px 8px 10px 13px; border-bottom: 1px solid var(--border, #2c2f36); }
.pcel-hoja-t { flex: 1 1 auto; min-width: 0; }
.pcel-hoja-t b { display: block; font-size: 15px;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pcel-hoja-t span { font-size: 12px; color: var(--text); }
.pcel-x { width: 38px; height: 38px; border-radius: 9px; cursor: pointer;
  border: 1px solid var(--border, #2c2f36); background: var(--bg, #131824);
  color: var(--text); font-size: 16px; }
.pcel-hoja-cuerpo { flex: 1 1 auto; min-height: 0; overflow-y: auto; padding: 10px 12px 12px; }
/* Cinco opciones a lo alto, del tamaño de un dedo. Apiladas en la tabla
   medían 40px y estaban pegadas: parado al lado del auto y con una mano se
   tocaba la equivocada. */
.pcel-op {
  width: 100%; min-height: 50px; display: flex; align-items: center; gap: 10px;
  margin-bottom: 7px; padding: 0 13px; border-radius: 10px; font: inherit;
  font-size: 14.5px; cursor: pointer; text-align: left;
  border: 1px solid var(--border, #2c2f36); background: var(--bg, #131824);
  color: var(--text);
}
.pcel-op--activa { border-width: 2px; font-weight: 700; }
.pcel-punto { width: 20px; height: 20px; border-radius: 50%; border: 2px solid currentColor;
  flex: 0 0 auto; display: flex; align-items: center; justify-content: center; font-size: 12px; }
.pcel-op:not(.pcel-op--activa) .pcel-punto { color: var(--text); }
.pcel-campo { display: block; margin-top: 8px; }
.pcel-campo span { display: block; font-size: 12px; color: var(--text);
  margin-bottom: 4px; }
.pcel-campo input { width: 100%; height: 44px; border-radius: 9px;
  border: 1px solid var(--border, #2c2f36); background: var(--bg, #131824);
  color: var(--text); font: inherit; font-size: 15px; padding: 0 10px; }
.pcel-hoja-pie { flex: 0 0 auto; display: flex; gap: 8px; padding: 9px 12px;
  border-top: 1px solid var(--border, #2c2f36); background: var(--panel-2, #202940); }
.pcel-hoja-pie button { flex: 1; height: 44px; border-radius: 9px; font: inherit;
  font-size: 14px; font-weight: 600; cursor: pointer;
  border: 1px solid var(--border, #2c2f36); background: var(--bg, #131824); color: var(--text); }
.pcel-hoja-pie button:disabled { opacity: .35; }
.pcel-sig { background: var(--accent-amber, #f2c200) !important;
  border-color: var(--accent-amber, #f2c200) !important; color: #000 !important; }

/* ── El envoltorio de la pantalla ───────────────────────────────────────
   El encabezado único de los tableros: bloque del color de la casa con el
   título de la pantalla, el concesionario y los botones de esa pantalla,
   todo junto. Reemplaza tres franjas apiladas.
   Va ANTES de la escalera de @media, como todas las reglas del armazón: si
   quedara después, una regla plana le ganaría al bloque de celular aunque
   ése dijera max-width. */
.tcg-envoltura {
  align-items: center; gap: 10px; flex-wrap: nowrap;
  background: var(--casa); color: var(--casa-tinta);
  border-radius: 12px 12px 0 0; padding: 9px 10px 9px 16px; margin: 0;
  min-height: 54px;
}
/* La franja que cierra la caja abajo. Se hace con el «::after» del lienzo y
   no con un elemento propio: el tablero tiene cuatro ternarios anidados y un
   div que los cruce no cierra donde abre —se probó y Babel lo rechaza—. Los
   fragmentos de React se aplanan, así que el encabezado termina siendo hijo
   directo del lienzo y «:has(> …)» lo alcanza.
   El color sale del encabezado mismo, no se repite acá. */
/* CAMBIADO 26/08/2026: era «:has(> …)», o sea sólo cuando el encabezado es
   HIJO DIRECTO del lienzo. Con eso el pie aparecía en cuatro pantallas y en
   ninguna más, porque el resto mete su encabezado adentro de su propio div.
   Con el descendiente («:has(…)») la franja sale sola en cualquier pantalla
   que use el encabezado universal, sin agregarle un elemento a cada una. */
.tcg-lienzo-pad:has(.tcg-envoltura)::after {
  content: ""; display: block; height: 10px; margin-top: 14px;
  border-radius: 0 0 12px 12px;
  background: var(--tcg-cierre, transparent);
}
/* Cuando la pantalla no es de un concesionario —Administración, Post Venta,
   Comercial unificada— el bloque va neutro. Pintarlo con el acento del tema
   las dejaba amarillas como si fueran de Giorgi, que es el error que ya se
   había corregido una vez en la tinta de la app. */
.tcg-envoltura--neutra {
  background: var(--panel); color: var(--text);
  border: 1px solid var(--border);
}
.tcg-envoltura--neutra .tcg-env-tit h1 { color: var(--text); }
.tcg-envoltura--neutra .tcg-env-sub { color: var(--text); opacity: 1; }
/* Y sin casa no hay línea de color abajo: el bloque cierra solo. */
.tcg-envoltura--neutra + .dealer-switch { border-color: var(--border); }

/* Los tres concesionarios se pegan al encabezado y toman sus bordes: la caja
   se lee como una sola pieza aunque en el JSX sean hermanos. Se hace por el
   hermano adyacente y no envolviendo con un div, porque el tablero tiene
   cuatro ternarios anidados y un div que los cruce no cierra. */
.tcg-envoltura + .dealer-switch {
  margin: 0 0 12px; padding: 10px 12px;
  border: 1px solid color-mix(in srgb, var(--casa) 45%, transparent);
  border-top: 0; border-radius: 0 0 12px 12px;
}
.tcg-envoltura .brandline { flex: 1 1 auto; min-width: 0; }
.tcg-env-tit { min-width: 0; }
.tcg-envoltura .tcg-env-tit h1 {
  margin: 0; color: var(--casa-tinta); font-size: 20px; line-height: 1.15;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
/* La transparencia del renglón chico es jerarquía visual, pero no puede
   costarle la legibilidad: a .82 sobre el rojo de Ginza el contraste caía a
   4,01 y el mínimo es 4,5. A .95 queda en 5,1 y se sigue leyendo como
   secundario. */
.tcg-env-sub { display: block; font-size: 12px; opacity: .95; margin-top: 1px;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* «flex: 0 0 auto» las clavaba a su ancho natural: con muchas acciones
   desbordaban el encabezado y salían de la ventana —1605px en 1425 de lugar,
   medido con tcgMapaPantalla en Propuesta Comercial—. Ahora pueden encoger
   y, si aun así no entran, pasan de renglón, que es mejor que quedar afuera. */
.tcg-env-acc { flex: 1 1 auto; min-width: 0; display: flex; align-items: center;
  justify-content: flex-end; gap: 8px; flex-wrap: wrap; }
/* LAS SOLAPAS DEL ENCABEZADO. Van pegadas abajo del titulo y ocupan el
   renglon entero: por eso la caja pasa a poder envolver, cosa que sin
   solapas no hace (una sola linea, alto fijo de 54px). */
/* EL PIE DE LA CAJA: barra llena del color de la casa, de punta a punta. */
.cym > .cip-pie, .sus-completa > .cip-pie, .adj-pant > .cip-pie, .sc-panel.fom > .cip-pie {
  margin: 0; padding: 9px 16px; border-radius: 0 0 12px 12px; flex: 0 0 auto;
  font-weight: 600;
}
.cip-pie-sep { flex: 1 1 auto; }
/* Scoring: los indicadores arriba, y el tema como tercer control de la fila
   de solapas, del mismo alto que ellas. */
.cc-ind-arriba { padding: 10px 14px 0; }
.cc-ind-arriba .cc-indicadores { margin: 0; }
.cc-solapas--tema { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
/* EL TEMA NO SE MUEVE (Ramiro, 14/09/2026). Tenía «margin-left: auto», así
   que se pegaba a la derecha: en «Contactos», donde al lado hay un tilde y un
   buscador, quedaba justo después de las solapas; en «Temas y preguntas», sin
   nada al lado, se iba al otro extremo. Un control que cambia de lugar según
   la solapa hay que volver a buscarlo cada vez. Ahora va siempre tercero,
   pegado a las solapas, y lo que se corre a la derecha es lo que filtra la
   lista de abajo. */
.cc-tema-solapa { font: inherit; font-size: 12px; cursor: pointer; }
.cc-solapas--tema .cc-filtros-lista { margin-left: auto; }
.pc-hoja-cab { position: relative; }
.pc-hoja-x { position: absolute; top: -2px; right: 0; border: 0; background: transparent;
  font-size: 17px; line-height: 1; cursor: pointer; color: var(--text); padding: 2px 6px; }
.pc-hoja-x:hover { color: #000; }
@media print { .pc-hoja-x { display: none; } }
.pc-pub { font-size: 12px; color: var(--text); margin-left: 4px; }
.pc-pub--nunca { color: var(--text); }
.pc-pub--viejo { color: var(--text); font-weight: 700; }
/* Con carpetas debajo, la banda de color cierra plana: la caja sigue abajo. */
.tcg-envoltura--sol { border-radius: 12px 12px 0 0; margin-bottom: 0; }
/* Las carpetas quedan pegadas a la banda y toman su color de raya. */
.tcg-env-sol.gu-carpetas { margin: 0 0 12px; padding: 8px 10px 0 16px;
  border-bottom-color: var(--casa, var(--accent-amber)); }
/* El pie de acción: la que cierra el trabajo, del ancho de la pantalla. */
/* rw · Scoring adentro de Suscripción: sin cabecera arriba, las carpetas no se corren 58px y no tapan los indicadores. */
.sco-cuerpo .cc-modal .cc-solapas, .sco-cuerpo .cc-pantalla .cc-solapas { top: 0 !important; }
/* sa · Compañías de seguro: precio con margen, lista con todas las columnas, stock y tiempos. */
.seg-orion { text-align: right; font-weight: 700; white-space: nowrap; }
.seg-in-margen { max-width: 58px; text-align: center; }
.seg-sin-margen { border-color: #d29b2b !important; }
.seg-stock { display: block; font-size: 12px; opacity: 1; }
.seg-stock--si { color: var(--text); opacity: 1; font-weight: 700; }
.seg-tiempo { white-space: nowrap; }
.seg-disp-orion { display: block; font-size: 12px; opacity: 1; line-height: 1.2; }
.seg-num { text-align: right; white-space: nowrap; }
.seg-busca-fila { align-items: center; gap: 12px; }
.seg-busca-fila .seg-buscar { max-width: 460px; }
.seg-config-grilla { display: grid; grid-template-columns: minmax(220px, 300px) 1fr; gap: 16px; align-items: start; }
.seg-cfg-desc { max-width: 120px; }
.seg-cfg-obs { width: 100%; resize: vertical; }
/* sj · Compañías de seguro: tabla de piezas con la barra estándar, en un renglón; bloques arriba y abajo; Configuración. */
.seg-setup--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.seg-cfg-fila { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; align-items: end; }
.seg-cfg-fila .seg-card-campo > span { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.seg-cfg-fila .pvx-in { width: 100%; box-sizing: border-box; }
.pvx-kpis.seg-kpis-band { grid-template-columns: repeat(4, minmax(0, 1fr)); }
@media (max-width: 1100px) { .pvx-kpis.seg-kpis-band { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.seg-cfg-fila .seg-card-campo { max-width: none; }
.seg-alt-tabla { border: 1px solid var(--border, #3a4560); border-radius: 8px; overflow: hidden; margin: 8px 0; }
.seg-alt-fila { display: grid; grid-template-columns: 240px minmax(0, 1fr) 56px; border-bottom: 1px solid var(--border, #3a4560); }
.seg-alt-fila:last-child { border-bottom: 0; }
.seg-alt-fila > span { padding: 6px 10px; display: flex; align-items: center; }
.seg-alt-fila > span + span { border-left: 1px solid var(--border, #3a4560); }
.seg-alt-fila > span .pvx-in { width: 100%; }
.seg-alt-fila--cab > span { font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: .05em; opacity: 1; padding: 7px 10px; }
.seg-alt-vacio { padding: 10px; font-size: 12.5px; opacity: 1; }
.seg-pz-cab { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; border: 1px solid var(--border, #3a4560); border-radius: 8px; padding: 8px 12px; margin: 10px 0 2px; }
.seg-pz-cab-acc { display: flex; gap: 8px; padding-right: 12px; border-right: 1px solid var(--border, #3a4560); }
.seg-alt-check { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; cursor: pointer; }
.seg-alt-check.on { font-weight: 700; color: var(--text); }
.seg-alt-pags { display: flex; gap: 6px; flex-wrap: wrap; }
.seg-ayuda-linea { margin-left: auto; font-size: 12px; opacity: 1; cursor: help; white-space: nowrap; }
.seg-pz-caja { overflow-x: auto; }
.seg-pz-tabla { table-layout: fixed; width: max-content; min-width: 100%; }
.seg-pz-tabla td, .seg-piezas.seg-pz-tabla td { padding: 3px 5px; vertical-align: middle; white-space: nowrap !important; }
.seg-pz-tabla th { letter-spacing: .02em; font-size: 13px; }
.seg-pz-td--orion .seg-orion, .seg-pz-td--conf label { vertical-align: middle; }
.seg-pz-tabla td .pvx-in, .seg-pz-tabla td select { width: 100%; box-sizing: border-box; min-width: 0; }
.seg-pz-desc { display: flex; gap: 6px; align-items: center; }
.seg-pz-desc .seg-in-desc { flex: 1; }
.seg-pz-desc .seg-sug { white-space: nowrap; font-size: 12px; }
.seg-pz-td--orion, .seg-pz-td--stock { text-align: right; }
.seg-pz-td--orion .seg-orion { display: inline; }
.seg-pz-origen { display: flex; gap: 4px; align-items: center; }
.seg-pz-origen select { flex: 1; min-width: 0; }
.seg-pz-cab-bt { flex-basis: 100%; border-top: 1px solid var(--border, #3a4560); padding-top: 6px; }
.seg-pz-cab-bt .bt-barra { padding: 0 !important; }
.seg-stock-n { font-weight: 600; }
.seg-pz-nada { opacity: 1; font-size: 12px; }
.seg-pz-td--quitar { text-align: center; }
.seg-conf-dos { display: inline-flex; gap: 4px; }
.seg-no-usar { font-size: 12px; padding: 0 6px; }
.seg-alt-pz { font-size: 12px; padding: 0 8px !important; min-height: 28px; }
.seg-inhib { border-color: #d29b2b !important; color: var(--text); font-weight: 700; }
.seg-pieza--inhibida td { background: color-mix(in srgb, #d29b2b 8%, transparent); }
.seg-pz-pie { display: grid; grid-template-columns: repeat(3, 150px) 1fr auto; align-items: stretch; border: 1px solid var(--border, #3a4560); border-radius: 8px; margin-top: 10px; }
.seg-pz-pie-c { display: flex; flex-direction: column; justify-content: center; gap: 4px; padding: 8px 12px; font-size: 12px; }
.seg-pz-pie-c + .seg-pz-pie-c { border-left: 1px solid var(--border, #3a4560); }
.seg-pz-pie-c > span { font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; opacity: 1; }
.seg-pz-pie-c .pvx-in { width: 100%; box-sizing: border-box; }
.seg-vigencia { font-size: 14px; }
.seg-pz-pie .seg-total { align-items: flex-end; min-width: 200px; }
.seg-pz-pie .seg-total b { font-size: 20px; }
.seg-orion-barra { display: flex; align-items: center; gap: 8px; border: 1px solid color-mix(in srgb, var(--accent-blue, #2f6fbf) 55%, transparent); border-radius: 8px; padding: 6px 10px; margin-top: 10px; }
.seg-orion-txt { flex: 1; min-width: 0; font-size: 12px; opacity: 1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.seg-orion-barra .pvx-btn { white-space: nowrap; }
/* sk · Reportes de Compañías de seguro */
.seg-resultado { width: 128px; flex: none; font-weight: 600; }
.seg-resultado-hist { width: 112px; }
.seg-resultado--ganado { border-color: var(--green, #16a34a) !important; color: var(--text); }
.seg-resultado--perdido { border-color: #dc2626 !important; color: #dc2626; }
.seg-rep-filtros { display: grid !important; grid-template-columns: 44px minmax(0, 1fr); gap: 8px 10px; align-items: center; padding: 10px 14px !important; }
.seg-rep-et { font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: .05em; opacity: 1; }
.seg-rep-et--cia { margin-left: auto; }
.seg-rep-tira { display: grid; grid-template-columns: repeat(13, minmax(0, 1fr)); gap: 6px; }
.seg-rep-chip { font: inherit; color: inherit; background: transparent; border: 1px solid var(--border, #3a4560); border-radius: 8px; padding: 5px 2px 4px; display: flex; flex-direction: column; align-items: center; justify-content: space-between; gap: 3px; cursor: pointer; min-width: 0; }
.seg-rep-chip:hover { border-color: var(--accent-blue, #2f6fbf); }
.seg-rep-chip.on { border-color: var(--accent-blue, #2f6fbf); background: color-mix(in srgb, var(--accent-blue, #2f6fbf) 20%, transparent); box-shadow: inset 0 -3px 0 var(--accent-blue, #2f6fbf); }
.seg-rep-chip-mes { font-size: 12px; font-weight: 700; text-transform: capitalize; white-space: nowrap; }
.seg-rep-chip-bar { height: 26px; width: 100%; display: flex; align-items: flex-end; justify-content: center; gap: 2px; border-bottom: 1px solid var(--border, #3a4560); }
.seg-rep-chip-bar > span { display: block; width: 9px; border-radius: 2px 2px 0 0; min-height: 1px; }
.seg-rep-chip-n { font-size: 12px; opacity: 1; white-space: nowrap; }
.seg-rep-chip--12 { justify-content: center; gap: 8px; }
.seg-rep-chip-mes--12 { text-transform: none; }
.seg-rep-filtros-pie { grid-column: 1 / -1; display: flex; align-items: center; gap: 14px; border-top: 1px solid var(--border, #3a4560); padding-top: 8px; }
.seg-rep-rango { font-size: 12px; opacity: 1; }
.seg-rep-filtros .seg-rep-cia { width: 190px; flex: none; }
.pvx-kpis.seg-rep-kpis { display: grid !important; grid-template-columns: repeat(4, minmax(0, 1fr)) !important; gap: 10px; }
.seg-rep-kpi b { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.seg-rep-kpi i { line-height: 1.3; }
.seg-rep-kpi--bien b { color: var(--text); }
.seg-rep-kpi--mal b, .seg-rep-neg { color: #ef4444; }
.seg-rep-kpi--azul b { color: var(--text); }
.seg-rep-ranking { min-width: 0; display: flex; flex-direction: column; gap: 6px; margin-top: 12px; }
.seg-rep-tabla { table-layout: fixed; width: max-content; min-width: 100%; }
.seg-rep-tabla td { white-space: nowrap; height: 34px; }
.seg-rep-tabla td.seg-rep-td--cot, .seg-rep-tabla td.seg-rep-td--gan, .seg-rep-tabla td.seg-rep-td--pct, .seg-rep-tabla td.seg-rep-td--plata, .seg-rep-tabla td.seg-rep-td--rent, .seg-rep-tabla td.seg-rep-td--min, .seg-rep-tabla td.seg-rep-td--pos { text-align: right !important; }
.seg-rep-bien { color: var(--text); }
.seg-rep-ojo { color: #d97706; }
.seg-rep-part { display: flex; align-items: center; gap: 8px; }
.seg-rep-part-bar { flex: 1; height: 9px; border-radius: 3px; background: color-mix(in srgb, var(--text, #e6eaf0) 12%, transparent); overflow: hidden; }
.seg-rep-part-bar > span { display: block; height: 100%; background: var(--accent-blue, #2f6fbf); }
.seg-rep-part > span:last-child, .seg-rep-part > b { width: 40px; text-align: right; flex: none; }
.seg-rep-total td { font-weight: 700; background: color-mix(in srgb, var(--text, #e6eaf0) 6%, transparent); }
.seg-rep-ley { display: inline-flex; align-items: center; gap: 4px; font-size: 12px; opacity: 1; white-space: nowrap; }
.seg-rep-ley i { display: inline-block; width: 10px; height: 10px; border-radius: 2px; margin-left: 6px; }
.seg-rep-c, .seg-rep-bc { background: #9fb0cc; }
.seg-rep-g, .seg-rep-bg { background: var(--green, #16a34a); }
.seg-rep-tres { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; margin-top: 12px; align-items: stretch; }
.seg-rep-tres > .pvx-bloque { margin: 0; min-width: 0; display: flex; flex-direction: column; gap: 6px; }
.seg-rep-mini-t { width: 100%; table-layout: fixed; }
.seg-rep-mini-t th, .seg-rep-mini-t td { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; padding-left: 8px !important; padding-right: 8px !important; }
.seg-rep-mini-t th { font-size: 13px; letter-spacing: .02em; }
.seg-rep-mini-t th:first-child, .seg-rep-mini-t td:first-child { width: 32%; }
.seg-rep-mini-t th:nth-child(2), .seg-rep-mini-t td:nth-child(2), .seg-rep-mini-t th:nth-child(3), .seg-rep-mini-t td:nth-child(3) { width: 19%; }
.seg-rep-mini-t td { height: 30px; }
.seg-rep-mini-t td:nth-child(2), .seg-rep-mini-t td:nth-child(3), .seg-rep-mini-t th:nth-child(2), .seg-rep-mini-t th:nth-child(3) { text-align: right; }
.seg-rep-mini-t th:last-child, .seg-rep-mini-t td:last-child { width: 30%; text-align: right; }
.seg-rep-mini-t .seg-rep-part-bar { min-width: 20px; }
.seg-rep-mini-t .seg-rep-part > b { width: 42px; }
.seg-cfg-bonif-campo { margin-top: 10px; }
.pvx-kpis.seg-hist-kpis, .pvx-kpis.seg-cia-kpis, .pvx-kpis.seg-apr-kpis { display: grid !important; grid-template-columns: repeat(4, minmax(0, 1fr)) !important; gap: 10px; margin: 6px 0 10px; }
.seg-cia-kpis { margin: 0; }
.seg-hist-kpis .pvx-kpi b, .seg-cia-kpis .pvx-kpi b { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.seg-rep-kpi--ojo b { color: #d97706; }
.seg-gan-orion { margin-left: auto; }
.seg-pegar-gan { border: 1px solid var(--border, #3a4560); border-radius: 8px; padding: 10px 12px; margin: 8px 0; display: flex; flex-direction: column; gap: 8px; }
.seg-alta-alt .seg-alt-check { min-height: 34px; }
.seg-alta-cab { display: flex; align-items: center; gap: 12px; }
.seg-alta-casa { margin-left: auto; font-size: 12.5px; padding: 4px 12px; border-radius: 6px; border: 1px solid var(--casa, #2f6fbf); box-shadow: inset 4px 0 0 var(--casa, #2f6fbf); }
.seg-previo { display: flex; align-items: flex-start; gap: 8px; font-size: 12.5px; padding: 8px 12px; border: 1px dashed var(--accent-blue, #2f6fbf); border-radius: 8px; margin-bottom: 10px; cursor: pointer; }
.seg-nocot { font-size: 12px; }
.seg-nocot--si { border-color: #d97706 !important; color: #d97706; font-weight: 600; }
.seg-pieza--nocot td { opacity: 1; }
.seg-pieza--nocot td.seg-pz-td--conf { opacity: 1; }
.seg-in-renglon { text-align: center; }
/* sp · Panel de control del agente */
.ag { display: flex; flex-direction: column; gap: 12px; }
.ag > .pvx-bloque, .ag-fila3 > .pvx-bloque, .ag-fila2 > .pvx-bloque, .ag-fila2b > .pvx-bloque { margin: 0; }
.ag-barra { display: flex; align-items: center; gap: 8px; padding: 10px 14px !important; }
.ag-barra-txt { display: flex; flex-direction: column; margin-right: auto; font-size: 12.5px; }
.ag-barra-txt span { opacity: 1; font-size: 12px; }
.ag-fila3 { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; }
.ag-fila2 { display: grid; grid-template-columns: minmax(0, 1.55fr) minmax(0, 1fr); gap: 12px; }
.ag-fila2b { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
.ag-blo { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.ag-linea { display: flex; align-items: center; gap: 8px; font-size: 13px; flex-wrap: wrap; }
.ag-linea span { opacity: 1; font-size: 12px; }
.ag-punto { display: inline-block; width: 9px; height: 9px; border-radius: 50%; flex: none; }
.ag-ok { background: #16a34a; } .ag-mal { background: #dc2626; } .ag-gris { background: #94a3b8; }
.ag-chico { font-size: 12px; opacity: 1; line-height: 1.35; }
.ag-pcs-btn { align-self: flex-start; margin-top: auto; }
.ag-ses-f { display: grid; grid-template-columns: 12px 1fr auto; align-items: center; gap: 8px; min-height: 32px; font-size: 12.5px; border-bottom: 1px solid color-mix(in srgb, var(--text, #e6eaf0) 10%, transparent); }
.ag-ses-f .pvx-btn { white-space: nowrap; }
.ag-hoy-n { display: grid; grid-template-columns: repeat(4, 1fr); text-align: center; gap: 6px; }
.ag-hoy-n b { display: block; font-size: 20px; font-weight: 800; }
.ag-hoy-n span { font-size: 12px; opacity: 1; }
.ag-c-azul { color: var(--text); } .ag-c-ojo { color: #d97706; font-weight: 700; } .ag-c-bien { color: var(--text); font-weight: 700; } .ag-c-gris { opacity: 1; }
.ag-vincular { display: flex; flex-direction: column; gap: 8px; }
.ag-pc-f { display: grid; grid-template-columns: 180px 1fr auto; align-items: center; gap: 10px; font-size: 12.5px; }
.ag-pc-nueva { display: flex; gap: 8px; }
.ag-pc-nueva .pvx-in { width: 260px; }
.ag-llave { border: 1px dashed #d97706; border-radius: 8px; padding: 10px 12px; display: flex; flex-direction: column; gap: 8px; font-size: 12.5px; }
.ag-llave-txt { font-size: 13px; padding: 6px 10px; background: color-mix(in srgb, var(--text, #e6eaf0) 8%, transparent); border-radius: 6px; word-break: break-all; user-select: all; }
.ag-visor-cab { display: flex; align-items: center; gap: 8px; }
.ag-vivo { margin-left: auto; font-size: 12px; font-weight: 700; color: var(--text); white-space: nowrap; }
.ag-visor-cuerpo { display: grid; grid-template-columns: minmax(0, 1fr) 230px; gap: 12px; }
.ag-pantalla { border: 1px solid var(--border, #3a4560); border-radius: 6px; min-height: 300px; display: flex; align-items: center; justify-content: center; overflow: hidden; background: color-mix(in srgb, var(--text, #e6eaf0) 4%, transparent); }
.ag-pantalla img { width: 100%; height: auto; display: block; }
.ag-pantalla span { font-size: 12px; opacity: 1; padding: 20px; text-align: center; }
.ag-paso { display: grid; grid-template-columns: 22px 1fr; align-items: center; gap: 8px; min-height: 26px; font-size: 12px; opacity: 1; }
.ag-paso span { width: 20px; height: 20px; border-radius: 50%; border: 2px solid currentColor; font-size: 12px; font-weight: 800; display: flex; align-items: center; justify-content: center; }
.ag-paso.ok { opacity: 1; color: var(--text); } .ag-paso.ok { color: inherit; } .ag-paso.ok span { color: var(--text); }
.ag-paso.curso { opacity: 1; font-weight: 700; } .ag-paso.curso span { color: var(--text); }
.ag-ultimo { border-top: 1px solid color-mix(in srgb, var(--text, #e6eaf0) 10%, transparent); padding-top: 6px; margin-top: 4px; }
.ag-cola-f { font: inherit; color: inherit; background: transparent; border: 0; border-bottom: 1px solid color-mix(in srgb, var(--text, #e6eaf0) 10%, transparent); display: grid; grid-template-columns: minmax(0, 1fr) 100px 150px; align-items: center; min-height: 32px; font-size: 12px; text-align: left; cursor: pointer; padding: 0; }
.ag-cola-f b { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ag-cola-f span:last-child { text-align: right; }
.ag-revisar { margin-top: 6px; }
.ag-botones { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
.ag-pie { font-size: 12px; opacity: 1; text-align: center; }
@media (max-width: 1100px) { .ag-fila3, .ag-fila2, .ag-fila2b { grid-template-columns: 1fr; } }
.seg-paginas { display: flex; align-items: center; gap: 6px; margin-right: auto; flex-wrap: wrap; }
.seg-paginas-et { font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: .05em; opacity: 1; margin-right: 4px; }
.seg-pagina { white-space: nowrap; }
.seg-pz-tabla .seg-in-desc, .seg-pz-tabla .seg-in-cod, .seg-pz-tabla .seg-in-equiv { text-align: left !important; }
.seg-plat-bloque .pvx-campo { max-width: 520px; }
@media (max-width: 1100px) { .seg-rep-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); } .seg-rep-tres { grid-template-columns: 1fr; } .seg-rep-tira { grid-template-columns: repeat(7, minmax(0, 1fr)); } }
.seg-anio-viejo { color: var(--text); font-weight: 700; }
@media (max-width: 1000px) { .seg-pz-pie { grid-template-columns: 1fr 1fr; } .seg-orion-barra { flex-wrap: wrap; } .seg-cfg-fila { grid-template-columns: 1fr; } }
/* sf · Cartera por vendedor: tabla de tramos tipo planilla (líneas y columnas fijas) y cuadritos del primer año. */
.cv { display: flex; flex-direction: column; min-height: 100%; }
.cv-cuerpo { padding: 12px 16px 16px; display: flex; flex-direction: column; gap: 12px; flex: 1; }
.cv-kpis { grid-template-columns: repeat(4, minmax(0, 1fr)) !important; }
.cv-k-aldia b { color: var(--text); } .cv-k-mora b { color: #e5484d; } .cv-k-caido b { color: var(--text); }
.cv-vend-fijo { font-size: 13px; } .cv-vend-sel { display: inline-flex; align-items: center; gap: 8px; font-size: 13px; }
.cv-vend-sel select { font: inherit; font-size: 13px; padding: 6px 10px; border-radius: 6px; min-width: 230px; }
.cv-tit-fila { display: flex; align-items: center; gap: 12px; margin-bottom: -4px; }
.cv-tit { font-size: 12px; font-weight: 800; letter-spacing: .05em; text-transform: uppercase; opacity: 1; }
.cv-ley { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; margin-left: auto; opacity: 1; }
.cv-ley i { margin-left: 8px; }
.cv-ley--pie { margin-left: 0; }
.cv-sq { display: inline-block; width: 11px; height: 11px; border-radius: 2px; }
.cv-sq--aldia { background: #22a35a; } .cv-sq--mora { background: #e5484d; } .cv-sq--caido { background: #8a94a3; }
.cv-tramos { border: 1px solid var(--border, #3a4560); border-radius: 8px; overflow: hidden; }
.cv-tr { display: grid; grid-template-columns: 1.6fr repeat(4, 1fr) 2fr; min-height: 32px; border-bottom: 1px solid var(--border, #3a4560); }
.cv-tr:last-child { border-bottom: 0; }
.cv-tr > span { display: flex; align-items: center; justify-content: flex-end; padding: 0 14px; border-right: 1px solid var(--border, #3a4560); }
.cv-tr > span:first-child { justify-content: flex-start; }
.cv-tr > span:last-child { border-right: 0; justify-content: stretch; }
.cv-tr--cab { min-height: 32px; background: color-mix(in srgb, var(--border, #3a4560) 35%, transparent); }
.cv-tr--cab > span { font-size: 12px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; opacity: 1; }
.cv-tr--total { background: color-mix(in srgb, var(--border, #3a4560) 22%, transparent); }
.cv-tr--sel { background: color-mix(in srgb, #f2c200 10%, transparent); }
.cv-tr-nom { flex-direction: column; align-items: flex-start !important; justify-content: center !important; }
.cv-tr-nom small { font-size: 12px; opacity: 1; }
.cv-num { font: inherit; font-size: 14px; font-weight: 800; min-width: 44px; padding: 1px 8px; border-radius: 6px; border: 1px solid transparent; background: transparent; color: inherit; cursor: pointer; text-align: right; }
.cv-num:hover:not(:disabled) { border-color: var(--border, #3a4560); }
.cv-num:disabled { opacity: .45; cursor: default; }
.cv-num.on { background: #fde68a; border-color: #c79f00; color: #000; }
.cv-num--aldia { color: var(--text); } .cv-num--mora { color: #e5484d; } .cv-num--caido { color: var(--text); }
.cv-barra { display: flex; width: 100%; height: 12px; border-radius: 3px; overflow: hidden; background: color-mix(in srgb, var(--border, #3a4560) 40%, transparent); }
.cv-barra i { display: block; height: 100%; }
.cv-b-aldia { background: #22a35a; } .cv-b-mora { background: #e5484d; } .cv-b-caido { background: #8a94a3; }
.cv-filtros { display: flex; align-items: center; gap: 10px; }
/* si · Consultas de clientes: panel de control de 4 celdas iguales y tres columnas con borde. */
.cq { display: flex; flex-direction: column; min-height: 100%; }
.cq-cuerpo { padding: 12px 16px 16px; display: flex; flex-direction: column; gap: 10px; flex: 1; }
.cq-anotar { min-width: 150px; justify-content: center; }
.cq-tit, .cq-sub { font-size: 12px; font-weight: 800; letter-spacing: .06em; text-transform: uppercase; opacity: 1; }
.cq-panel { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); border: 1px solid var(--border, #3a4560); border-radius: 8px; }
.cq-pcel { display: flex; flex-direction: column; gap: 6px; padding: 10px 14px; min-width: 0; }
.cq-pcel + .cq-pcel { border-left: 1px solid var(--border, #3a4560); }
.cq-ptit { font-size: 12px; font-weight: 800; letter-spacing: .05em; text-transform: uppercase; opacity: 1; }
.cq-pcel small { font-size: 12px; opacity: 1; }
.cq-prow { display: flex; align-items: center; justify-content: space-between; gap: 8px; min-height: 30px; }
.cq-prow b { font-size: 14px; }
.cq-link { font: inherit; font-size: 12.5px; font-weight: 700; background: none; border: 0; color: var(--text); cursor: pointer; padding: 0; }
.cq-ok { color: var(--text) !important; } .cq-mal { color: #e5484d !important; } .cq-ojo { color: var(--text); } .cq-bot { color: var(--text) !important; }
.cq-seg3 { display: grid; grid-template-columns: repeat(3, 1fr); border: 1px solid var(--border, #3a4560); border-radius: 6px; overflow: hidden; }
.cq-seg3 button { font: inherit; font-size: 12.5px; padding: 6px 0; border: 0; background: transparent; color: inherit; cursor: pointer; }
.cq-seg3 button + button { border-left: 1px solid var(--border, #3a4560); }
.cq-seg3 button.on { background: var(--accent-blue, #2f6fbf); color: var(--casa-activa-tinta, #fff); font-weight: 700; }
.cq-temas { display: flex; flex-wrap: wrap; gap: 4px 12px; font-size: 12.5px; }
.cq-temas label { display: inline-flex; align-items: center; gap: 5px; cursor: pointer; }
.cq-temas label.on { font-weight: 700; }
.cq-cols { display: grid; grid-template-columns: 320px minmax(0, 1fr) 280px; gap: 12px; align-items: start; }
.cq-caja { border: 1px solid var(--border, #3a4560); border-radius: 8px; overflow: hidden; display: flex; flex-direction: column; min-width: 0; }
.cq-caja-cab { display: flex; align-items: center; gap: 10px; min-height: 42px; padding: 0 12px; border-bottom: 1px solid var(--border, #3a4560); background: color-mix(in srgb, var(--border, #3a4560) 30%, transparent); }
.cq-caja-cab span { font-size: 12px; opacity: 1; }
.cq-busca { margin-left: auto; width: 280px; max-width: 60%; }
.cq-filtros { display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px; padding: 8px 10px; border-bottom: 1px solid var(--border, #3a4560); }
.cq-filtros button { font: inherit; font-size: 12px; padding: 5px 0; border-radius: 6px; border: 1px solid var(--border, #3a4560); background: transparent; color: inherit; cursor: pointer; }
.cq-filtros button.on { background: var(--accent-blue, #2f6fbf); border-color: var(--accent-blue, #2f6fbf); color: var(--casa-activa-tinta, #fff); font-weight: 700; }
.cq-filtros small { opacity: 1; }
.cq-lista { display: flex; flex-direction: column; max-height: 460px; overflow: auto; }
.cq-item { display: grid; grid-template-columns: 72px minmax(0, 1fr) auto; align-items: center; gap: 8px; min-height: 48px; padding: 0 10px; border: 0; border-bottom: 1px solid var(--border, #3a4560); background: transparent; color: inherit; font: inherit; text-align: left; cursor: pointer; }
.cq-item.on { background: color-mix(in srgb, #f2c200 14%, transparent); box-shadow: inset 4px 0 0 #c79f00; }
.cq-item--cerrada { opacity: 1; }
.cq-item-txt { display: flex; flex-direction: column; min-width: 0; }
.cq-item-txt b { font-size: 12.5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.cq-item-txt small { font-size: 12px; opacity: 1; }
.cq-item-asig { font-size: 12px; font-weight: 700; text-align: right; }
.cq-canal { font-size: 12px; font-weight: 700; text-align: center; padding: 2px 0; border-radius: 4px; }
.cq-canal--whatsapp { background: color-mix(in srgb, #22a35a 20%, transparent); color: var(--text); }
.cq-canal--llamada { background: color-mix(in srgb, #3b82f6 20%, transparent); color: var(--text); }
.cq-vacio { padding: 14px; font-size: 12.5px; opacity: 1; }
.cq-resp-cuerpo { display: flex; flex-direction: column; gap: 10px; padding: 10px 12px 12px; }
.cq-sel-datos { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.cq-sel-datos label { display: flex; flex-direction: column; gap: 3px; font-size: 12px; }
.cq-res { display: flex; flex-direction: column; border: 1px solid var(--border, #3a4560); border-radius: 8px; max-height: 180px; overflow: auto; }
.cq-solo { display: block; font-style: normal; font-size: 12px; font-weight: 600; opacity: 1; }
.cq-msjs { display: flex; flex-direction: column; gap: 4px; border: 1px solid var(--border, #3a4560); border-radius: 8px; padding: 8px 10px; }
.cq-msj { display: grid; grid-template-columns: 74px 1fr; gap: 8px; font-size: 12.5px; }
.cq-msj small { opacity: 1; }
.cq-res-tel .cq-ptit { padding: 6px 10px 0; }
.cq-meta { border: 1px solid var(--border, #3a4560); border-radius: 10px; padding: 12px 14px; margin: 0 0 12px; }
.cq-meta-nota { font-size: 12px; margin-bottom: 8px; }
.cq-meta-btn { font-size: inherit; }
/* sp · Avisos mensuales y Mi plan */
.cq-vistas { display: inline-flex; border: 1px solid var(--border, #3a4560); border-radius: 8px; overflow: hidden; margin-bottom: 12px; }
.cq-vista { font: inherit; font-size: 12.5px; padding: 7px 16px; border: 0; background: transparent; color: inherit; cursor: pointer; }
.cq-vista + .cq-vista { border-left: 1px solid var(--border, #3a4560); }
.cq-vista.on { background: var(--accent-blue, #2f6fbf); color: var(--casa-activa-tinta, #fff); font-weight: 700; }
.av-cols { display: grid; grid-template-columns: minmax(0, 1fr) 340px; gap: 12px; align-items: stretch; }
.av-izq { display: flex; flex-direction: column; gap: 12px; min-width: 0; }
.av-blo { display: flex; flex-direction: column; gap: 8px; padding-bottom: 12px; }
.av-blo > :not(.cq-caja-cab) { margin-left: 12px; margin-right: 12px; }
.av-blo > .cq-caja-cab { flex-wrap: wrap; padding-top: 6px; padding-bottom: 6px; }
.av-blo > .cq-caja-cab b { font-size: 13.5px; }
.av-txt { height: auto !important; min-height: 112px; }
.av-cfg-fila { display: grid; grid-template-columns: 110px 190px 150px 1fr; gap: 12px; align-items: end; }
.av-checks { display: flex; flex-direction: column; gap: 4px; font-size: 12.5px; }
.av-fila { display: grid; grid-template-columns: 1.3fr 70px 1.8fr 90px; align-items: center; gap: 10px; min-height: 36px; border-bottom: 1px solid color-mix(in srgb, var(--text, #e6eaf0) 10%, transparent); font-size: 12.5px; }
.av-n { text-align: right; font-weight: 800; }
.av-fila--vendedora { opacity: 1; }
.av-acc { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.av-hist { margin-left: auto; font-size: 12px; opacity: 1; }
.av-lista { max-height: 260px; overflow: auto; }
.av-dos { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.av-msj { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.av-msj-tit { font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: .05em; }
.av-msj-tit--aldia { color: var(--text); } .av-msj-tit--mora { color: #dc2626; }
.av-txt { font-size: 12px; resize: vertical; }
.av-burbuja { background: #e7f8e3; color: #000; border-radius: 8px; padding: 9px 11px; font-size: 12px; line-height: 1.45; white-space: pre-wrap; }
.av-miplan { min-width: 0; }
.av-chico { font-size: 12px; opacity: 1; line-height: 1.4; }
.av-url { font-size: 12px; padding: 6px 10px; border-radius: 6px; background: color-mix(in srgb, var(--text, #e6eaf0) 8%, transparent); word-break: break-all; }
.av-celu { border: 8px solid #131824; border-radius: 26px; overflow: hidden; height: 470px; background: #fff; }
.av-celu iframe { width: 100%; height: 100%; border: 0; }
@media (max-width: 1100px) { .av-cols, .av-dos { grid-template-columns: 1fr; } .av-cfg-fila { grid-template-columns: 1fr 1fr; } }
.cq-res-it { display: flex; justify-content: space-between; gap: 10px; padding: 7px 10px; border: 0; border-bottom: 1px solid var(--border, #3a4560); background: transparent; color: inherit; font: inherit; font-size: 12.5px; text-align: left; cursor: pointer; }
.cq-res-it:hover { background: color-mix(in srgb, #f2c200 12%, transparent); }
.cq-plan-cab { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; }
.cq-plan-sub { font-size: 12px; opacity: 1; }
.cq-datos { display: grid; grid-template-columns: repeat(4, 1fr); border: 1px solid var(--border, #3a4560); border-radius: 8px; }
.cq-datos > div { display: flex; flex-direction: column; padding: 7px 12px; }
.cq-datos > div + div { border-left: 1px solid var(--border, #3a4560); }
.cq-datos span { font-size: 12px; font-weight: 700; text-transform: uppercase; opacity: 1; }
.cq-datos b { font-size: 15px; }
.cq-motivos { display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px; }
.cq-motivos button { font: inherit; font-size: 12.5px; padding: 6px 0; border-radius: 6px; border: 1px solid var(--border, #3a4560); background: transparent; color: inherit; cursor: pointer; }
.cq-motivos button.on { background: var(--accent-blue, #2f6fbf); border-color: var(--accent-blue, #2f6fbf); color: var(--casa-activa-tinta, #fff); font-weight: 700; }
.cq-texto { width: 100%; box-sizing: border-box; resize: vertical; line-height: 1.45; font-size: 13px; min-height: 140px; }
.cq-acc { display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px; }
.cq-acc .lu-btn { justify-content: center; min-height: 34px; white-space: nowrap; font-size: 12.5px; padding: 0 8px; }
.cq-mandar { background: #16803c !important; border-color: #16803c !important; color: #fff !important; font-weight: 700; }
.cq-kfila { display: flex; align-items: center; justify-content: space-between; min-height: 36px; padding: 0 12px; border-bottom: 1px solid var(--border, #3a4560); font-size: 12.5px; }
.cq-kfila b { font-size: 15px; }
.cq-hoy .cq-sub { padding: 10px 12px 4px; }
.cq-barra { display: grid; grid-template-columns: 120px 1fr 28px; align-items: center; gap: 8px; padding: 4px 12px; font-size: 12px; }
.cq-barra i { height: 8px; border-radius: 4px; background: color-mix(in srgb, var(--border, #3a4560) 60%, transparent); overflow: hidden; }
.cq-barra em { display: block; height: 100%; background: #c79f00; }
.cq-barra b { text-align: right; }
@media (max-width: 1100px) { .cq-panel { grid-template-columns: 1fr 1fr; } .cq-pcel:nth-child(3) { border-left: 0; } .cq-pcel:nth-child(n+3) { border-top: 1px solid var(--border, #3a4560); } .cq-cols { grid-template-columns: 1fr; } }
.cv-herr { display: grid; grid-template-columns: auto minmax(0, 1fr); border: 1px solid var(--border, #3a4560); border-radius: 8px; overflow: visible; }
.cv-herr-celda { display: flex; flex-direction: column; gap: 6px; padding: 8px 14px 10px; min-width: 0; }
.cv-herr-celda + .cv-herr-celda { border-left: 1px solid var(--border, #3a4560); }
.cv-herr-tit { font-size: 12px; font-weight: 800; letter-spacing: .06em; text-transform: uppercase; opacity: 1; }
.cv-herr-fila { display: flex; align-items: center; gap: 10px; min-height: 32px; }
.cv-herr .bt-barra { padding: 0 !important; gap: 8px; flex-wrap: wrap; min-width: 0; }
.cv-herr .bt-buscador { flex: 1 1 150px; min-width: 120px; max-width: none; min-height: 32px; border: 1px solid var(--border, #3a4560); border-radius: 6px; padding: 0 10px; }
.cv-herr .bt-barra > .lu-btn, .cv-herr .bt-menu-wrap > .lu-btn { width: 92px; justify-content: center; min-height: 32px; border: 1px solid var(--border, #3a4560) !important; }
.cv-herr .bt-menu-wrap { display: inline-flex; }
.cv-herr .bt-cuenta { font-size: 12.5px; opacity: 1; white-space: nowrap; padding-left: 12px; border-left: 1px solid var(--border, #3a4560); min-height: 32px; display: inline-flex; align-items: center; }
.cv-herr .bt-cuenta::after { content: " planes"; white-space: pre; }
.cv-herr .cv-seg button { min-height: 30px; }
@media (max-width: 1000px) { .cv-herr { grid-template-columns: 1fr; } .cv-herr-celda + .cv-herr-celda { border-left: 0; border-top: 1px solid var(--border, #3a4560); } .cv-herr .bt-barra { flex-wrap: wrap; } }
.cv-seg { display: inline-grid; grid-template-columns: repeat(4, 84px); border: 1px solid var(--border, #3a4560); border-radius: 6px; overflow: hidden; }
.cv-seg button { font: inherit; font-size: 12.5px; padding: 6px 0; border: 0; background: transparent; color: inherit; cursor: pointer; }
.cv-seg button + button { border-left: 1px solid var(--border, #3a4560); }
.cv-seg button.on { background: var(--accent-blue, #2f6fbf); color: var(--casa-activa-tinta, #fff); font-weight: 700; }
.cv-chip { font: inherit; font-size: 12px; font-weight: 700; padding: 4px 10px; border-radius: 6px; border: 1px solid #c79f00; background: #fde68a; color: #000; cursor: pointer; }
.cv-cuadros { display: inline-flex; gap: 2px; vertical-align: middle; }
.cv-q { display: inline-block; width: 13px; height: 13px; border-radius: 2px; box-sizing: border-box; }
.cv-q--paga { background: #22a35a; } .cv-q--impaga { background: #e5484d; } .cv-q--curso { border: 1.5px solid currentColor; }
.cv-q--futura { background: color-mix(in srgb, var(--border, #3a4560) 70%, transparent); } .cv-q--caida { background: #8a94a3; opacity: 1; }
.cv-td-anio { white-space: nowrap; } .cv-td-anio small { margin-left: 8px; opacity: 1; font-size: 12px; }
.cv-est { font-size: 12px; font-weight: 700; padding: 2px 8px; border-radius: 4px; background: color-mix(in srgb, var(--border, #3a4560) 45%, transparent); }
.cv-est--mora { background: color-mix(in srgb, #e5484d 18%, transparent); } .cv-est--caido { opacity: 1; }
.cv-mor--aldia { color: var(--text); font-weight: 600; } .cv-mor--mora { color: #e5484d; font-weight: 700; } .cv-mor--caido { color: var(--text); font-weight: 600; }
.cv-deuda { color: #e5484d; font-weight: 700; }
.cv-td-acc { white-space: nowrap; text-align: right; }
.cv-link { font: inherit; font-weight: 700; background: none; border: 0; padding: 0; color: var(--text); cursor: pointer; text-decoration: underline; text-underline-offset: 2px; }
.cv-mandar, .cv-ver { font: inherit; font-size: 12px; font-weight: 600; width: 100px; padding: 3px 0; border-radius: 6px; cursor: pointer; background: transparent; }
.cv-mandar { border: 1px solid #22a35a; color: var(--text); } .cv-ver { border: 1px solid var(--border, #3a4560); color: inherit; margin-left: 6px; width: 72px; }
.cv-ley--pie .cv-q { margin-left: 10px; }
@media (max-width: 900px) { .cv-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; } .cv-tr { grid-template-columns: 1.4fr repeat(4, 1fr); } .cv-tr > span:last-child { display: none; } }
/* se · Qué ítems del menú ve (ficha de la persona): tabla con líneas, columnas fijas y grilla de 4. */
.pmi { margin: 18px 0 8px; }
.pmi-casas { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; margin: 10px 0; max-width: 640px; }
.pmi-casa { font: inherit; font-size: 13px; padding: 8px 0; border-radius: 8px; border: 1px solid var(--border, #3a4560); background: transparent; color: inherit; cursor: pointer; display: flex; flex-direction: column; align-items: center; gap: 2px; }
.pmi-casa.on { background: var(--accent-blue, #2f6fbf); border-color: var(--accent-blue, #2f6fbf); color: var(--casa-activa-tinta, #fff); font-weight: 700; }
.pmi-casa small { font-size: 12px; opacity: 1; font-weight: 500; }
.pmi-tabla { border: 1px solid var(--border, #3a4560); border-radius: 8px; overflow: hidden; }
.pmi-vend { display: grid; grid-template-columns: 240px 340px 1fr; align-items: center; border: 1px solid var(--border, #3a4560); border-radius: 8px; margin-bottom: 10px; min-height: 52px; }
.pmi-vend > * { padding: 6px 14px; }
.pmi-vend-rot { display: flex; flex-direction: column; border-right: 1px solid var(--border, #3a4560); font-size: 13px; }
.pmi-vend-rot small { font-size: 12px; opacity: 1; }
.pmi-vend-in { font: inherit; font-size: 13px; font-weight: 700; margin: 0 14px; padding: 6px 10px; border-radius: 6px; border: 1.5px solid #c79f00; }
.pmi-vend-nota { font-size: 12px; opacity: 1; border-left: 1px solid var(--border, #3a4560); align-self: stretch; display: flex; align-items: center; }
.pmi-fila { display: grid; grid-template-columns: 240px 200px 140px 1fr; min-height: 38px; border-bottom: 1px solid var(--border, #3a4560); }
.pmi-fila:last-child { border-bottom: 0; }
.pmi-fila > span { display: flex; align-items: center; padding: 0 14px; border-right: 1px solid var(--border, #3a4560); font-size: 13px; }
.pmi-fila > span:last-child { border-right: 0; justify-content: flex-end; }
.pmi-cab { min-height: 32px; background: color-mix(in srgb, var(--border, #3a4560) 35%, transparent); }
.pmi-cab > span { font-size: 12px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; opacity: 1; }
.pmi-fila--ab { background: color-mix(in srgb, var(--accent-blue, #2f6fbf) 8%, transparent); }
.pmi-nom { font-weight: 700; }
.pmi-seg { display: inline-grid; grid-template-columns: 1fr 1fr; border: 1px solid var(--border, #3a4560); border-radius: 6px; overflow: hidden; width: 150px; }
.pmi-seg button { font: inherit; font-size: 12px; padding: 4px 0; border: 0; background: transparent; color: inherit; cursor: pointer; }
.pmi-seg button + button { border-left: 1px solid var(--border, #3a4560); }
.pmi-seg button.on { background: var(--accent-blue, #2f6fbf); color: var(--casa-activa-tinta, #fff); font-weight: 700; }
.pmi-seg button:disabled { cursor: default; opacity: .6; }
.pmi-cuenta { font-variant-numeric: tabular-nums; opacity: 1; }
.pmi-cuenta--parcial { color: var(--text); font-weight: 700; opacity: 1; }
.pmi-link { font: inherit; font-size: 12.5px; font-weight: 700; background: none; border: 0; color: var(--text); cursor: pointer; }
.pmi-panel { border-bottom: 1px solid var(--border, #3a4560); padding: 10px 14px 14px; background: color-mix(in srgb, var(--accent-blue, #2f6fbf) 5%, transparent); }
.pmi-panel-cab { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; font-size: 12px; text-transform: uppercase; letter-spacing: .04em; }
.pmi-panel-acc { margin-left: auto; display: grid; grid-template-columns: repeat(3, 150px); gap: 6px; text-transform: none; letter-spacing: 0; }
.pmi-btn { font: inherit; font-size: 12px; padding: 5px 0; border-radius: 6px; border: 1px solid var(--border, #3a4560); background: transparent; color: inherit; cursor: pointer; }
.pmi-btn--fuerte { background: var(--accent-blue, #2f6fbf); border-color: var(--accent-blue, #2f6fbf); color: var(--casa-activa-tinta, #fff); font-weight: 700; }
.pmi-grilla { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); border-top: 1px solid var(--border, #3a4560); border-left: 1px solid var(--border, #3a4560); }
.pmi-item { display: flex; align-items: center; gap: 8px; min-height: 30px; padding: 0 10px; font-size: 12.5px; border-right: 1px solid var(--border, #3a4560); border-bottom: 1px solid var(--border, #3a4560); cursor: pointer; }
.pmi-item span { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pmi-item.on { font-weight: 700; background: color-mix(in srgb, #f2c200 14%, transparent); }
.pmi-item--vacio { cursor: default; }
@media (max-width: 900px) { .pmi-fila { grid-template-columns: 1fr 160px 110px 110px; } .pmi-grilla { grid-template-columns: repeat(2, minmax(0, 1fr)); } .pmi-panel-acc { grid-template-columns: repeat(3, auto); } }
/* sd · Lista de precios en bloques: tres tarjetas iguales arriba (lista, stock, precio a Orion),
   observaciones a todo el ancho y la consulta de la lista al final. */
.seg-setup { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; margin-bottom: 14px; }
.seg-setup > .seg-card { margin: 0; display: flex; flex-direction: column; gap: 6px; }
.seg-card-tit { font-size: 12px; font-weight: 800; letter-spacing: .06em; text-transform: uppercase; opacity: 1; }
.seg-card-num { font-size: 22px; font-weight: 800; line-height: 1.15; }
.seg-card-sub { font-size: 12.5px; opacity: 1; word-break: break-word; }
.seg-card-formula { font-size: 13px; font-weight: 600; padding: 6px 10px; border-radius: 8px; border: 1px dashed var(--border, #3a4560); align-self: flex-start; }
.seg-card-aviso { font-size: 12.5px; font-weight: 700; color: var(--text); }
.seg-card-ayuda { font-size: 12px; opacity: 1; line-height: 1.35; }
.seg-card-acc { display: flex; flex-wrap: wrap; gap: 8px; margin-top: auto; padding-top: 8px; }
.seg-card-campo { max-width: 220px; }
.seg-obs-bloque .seg-cfg-obs { min-height: 118px; line-height: 1.45; font-size: 13.5px; }
.seg-obs-bloque .seg-cfg-obs-campo > span { display: block; margin-bottom: 6px; }
.seg-consulta .pvx-tit-fila { align-items: center; }
@media (max-width: 1000px) { .seg-setup { grid-template-columns: 1fr; } }
.seg-in-desccosto { max-width: 90px; }
@media (max-width: 760px) { .seg-config-grilla { grid-template-columns: 1fr; } }
.cc-nota-emb { font-size: 12px; color: var(--text); padding: 6px 4px 0; }
.sus-pie-acc { display: flex; align-items: center; gap: 12px; justify-content: flex-end;
  padding: 10px 14px; border-top: 1px solid var(--border, #252d3f);
  background: var(--panel, #1b2233); border-radius: 0 0 10px 10px; }
/* rw (Ramiro: «Nueva suscripción y Enviar podrían estar en un bloque para
   identificarlos mejor»). La acción de cada paso va en un recuadro propio,
   separado del pie de la casa. */
.sus-completa .sus-pie-acc { margin: 14px 0 6px; border: 1px solid color-mix(in srgb, var(--accent-blue, #2f6fbf) 55%, transparent);
  border-radius: 10px; background: color-mix(in srgb, var(--accent-blue, #2f6fbf) 9%, var(--panel, #1b2233)); }
.sus-completa .sus-pie-acc::before { content: "ACCIÓN"; font-size: 12px; font-weight: 800; letter-spacing: .08em;
  color: var(--text); padding-right: 10px; border-right: 1px solid var(--border, #252d3f); }
.sus-sec--bloq { border-left-color: #b45309 !important; }
.sus-objp-cab { display: flex; flex-wrap: wrap; gap: 10px; align-items: baseline; margin: 4px 0 10px; }
.sus-objp-cab span { font-size: 12.5px; color: var(--text); }
.sus-objp-t { max-width: 760px; }
.sus-objp-in { width: 90px; text-align: center; padding: 5px 6px; border: 1px solid var(--border, #252d3f); border-radius: 6px; background: transparent; color: inherit; font: inherit; }
.sus-objp-tot td { font-weight: 800; border-top: 2px solid var(--border, #252d3f); }
.sus-pie-txt { margin-right: auto; font-size: 12.5px; color: var(--text); }
/* EL FILTRO, A LA DERECHA DE LAS CARPETAS. Va primero en el orden del
   documento y se empuja al final con «order», para que al tabular se llegue
   antes a las solapas, que es lo que se usa todo el tiempo. */
/* La franja que además lleva el buscador y el botón: el rótulo a la
   izquierda y las acciones a la derecha, en un solo renglón. Los controles
   toman la tinta de la franja para que se lean sobre el color de la casa. */
.tnd-seccion--barra { display: flex; align-items: center; gap: 10px; }
.tnd-seccion--barra > span:first-child { margin-right: auto; }
.tnd-seccion--barra .bap-input { font-size: 12px; padding: 4px 9px; max-width: 280px;
  background: var(--panel, #1b2233); border: 1px solid var(--border); color: var(--text);
  border-radius: 7px; text-transform: none; letter-spacing: 0; font-weight: 400; }
.tnd-seccion--barra .lu-btn { font-size: 12px; padding: 4px 11px; text-transform: none;
  letter-spacing: 0; }

.tcg-env-filtros { order: 9; margin-left: auto; display: flex; align-items: center;
  gap: 6px; padding-bottom: 6px; flex: 0 0 auto; }
.tcg-env-filtros .bap-input { min-width: 210px; }
.tcg-env-filtros select, .tcg-env-filtros input { font-size: 13px; padding: 5px 9px; }

/* EL SEGUNDO RENGLON DE SOLAPAS. Mas chico y sin el color de la casa: se
   tiene que leer como «adentro de» la carpeta de arriba, no al lado. */
.tcg-env-sol--2 { border-bottom-width: 1px; border-bottom-color: var(--border, #252d3f);
  margin: 0 0 10px; padding: 6px 10px 0 16px; }
.tcg-env-sol--2 .gu-carpeta { font-size: 13px; padding: 5px 11px; }
.tcg-env-sol .gu-carpeta--on { background: var(--casa, var(--accent-amber));
  color: var(--casa-tinta, var(--accent-texto, #1a1207)); border-color: var(--casa, var(--accent-amber)); }
/* Va DESPUES de la de arriba a proposito: misma especificidad, gana la
   ultima, y el segundo renglon no lleva el color de la casa. */
.tcg-env-sol--2 .gu-carpeta--on { background: var(--panel-2, #202940);
  color: var(--text, #e8ecf2); border-color: var(--border, #252d3f);
  border-bottom-color: var(--panel-2, #202940); }
.tcg-envoltura--neutra + .tcg-env-sol.gu-carpetas { border-bottom-color: var(--border); }
/* El renglón chico se dice UNA vez. Estaba arriba, en la franja del armazón,
   y el envoltorio lo repetía palabra por palabra dos centímetros más abajo.
   Se queda en el envoltorio, que es donde está junto al concesionario al que
   pertenece; arriba sobra. */
.tcg-main:has(.tcg-envoltura) .tcg-fr-sub { display: none; }
/* Sobre el color de la casa los controles se dibujan con la tinta. Con el
   gris del panel desaparecían sobre el amarillo de Giorgi: el contraste de
   #8b93a1 sobre #f2c200 no llega ni a 2:1. */
/* Los controles de CUALQUIER pantalla, no sólo los de los tableros.
   Patentamientos trae los suyos con su paleta propia («--pat-panel2» sobre
   gris): puestos sobre el color de la casa quedaban invisibles. */
.tcg-envoltura .year-switch,
.tcg-envoltura .settings-btn,
.tcg-envoltura .pat-btn,
.tcg-envoltura .pat-seg {
  background: color-mix(in srgb, var(--casa-tinta) 9%, transparent);
  border-color: color-mix(in srgb, var(--casa-tinta) 34%, transparent);
  color: var(--casa-tinta);
}
.tcg-envoltura .pat-seg button { color: var(--casa-tinta) !important; background: transparent !important; }
.tcg-envoltura .pat-seg button.active {
  background: color-mix(in srgb, var(--casa-tinta) 26%, transparent) !important;
  font-weight: 700;
}
.tcg-envoltura .pat-filestatus { color: var(--casa-tinta) !important; opacity: 1; }
.tcg-envoltura .pat-btn { background: color-mix(in srgb, var(--casa-tinta) 9%, transparent) !important;
  border-color: color-mix(in srgb, var(--casa-tinta) 34%, transparent) !important;
  color: var(--casa-tinta) !important; }
.tcg-envoltura .pat-btn:hover {
  background: color-mix(in srgb, var(--casa-tinta) 20%, transparent);
  border-color: color-mix(in srgb, var(--casa-tinta) 50%, transparent);
}
.tcg-envoltura .year-switch button {
  background: transparent; border-color: transparent; color: var(--casa-tinta);
}
.tcg-envoltura .year-switch .vs { color: var(--casa-tinta); opacity: 1; }
.tcg-envoltura .settings-btn:hover,
.tcg-envoltura .year-switch button:hover {
  background: color-mix(in srgb, var(--casa-tinta) 20%, transparent);
}

/* EL AVISO DE CONFIRMACIÓN SE DIBUJABA DETRÁS DEL MODAL.
   «.mp-aviso» tenía z-index 200 y «.per-overlay» tiene 9999: el cartel de
   «1 trámite actualizado» quedaba tapado. En la gestoría embebida, además,
   la unidad sigue en la lista después de guardar —está bien, sigue sin
   transferirse—, así que en pantalla no cambiaba nada y el botón parecía
   roto. Guardaba: no se veía.
   Ya se había parcheado a mano en una pantalla suelta con un zIndex inline;
   esto lo arregla para todas de una vez. */
.mp-aviso { z-index: 10050; }

/* El encabezado sin título: queda sólo la fila de botones. Sin esto el
   hueco del <h1> vacío empuja los botones y deja media franja en blanco. */
.tcg-envoltura:has(.tcg-env-tit h1:empty) .brandline { display: none; }
.tcg-envoltura:has(.tcg-env-tit h1:empty) { padding-top: 8px; padding-bottom: 8px; }

/* ── Fichas automáticas: la tabla, en el teléfono ────────────────────
   Una ficha por fila. El título arriba con el tilde y el número, y abajo
   los pares rótulo/valor en dos columnas. Los vacíos no se dibujan: una
   ficha llena de «—» no mejora nada respecto de la tabla. */
.fa-lista { display: flex; flex-direction: column; gap: 8px; }
.fa-ficha {
  border: 1px solid var(--border, #2b3348); border-radius: 10px;
  background: var(--panel-2, #202940); padding: 9px 11px;
}
.fa-ficha--on { border-color: var(--casa-tinta, #f2c200); }
.fa-cab { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; }
.fa-tit { flex: 1 1 auto; min-width: 0; font-size: 13.5px;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.fa-n { font-size: 12px; color: var(--text);
  font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; }
.fa-datos { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 3px 12px; }
.fa-dato { min-width: 0; }
.fa-dato span { display: block; font-size: 12px; text-transform: uppercase;
  letter-spacing: .3px; color: var(--text); }
.fa-dato b { display: block; font-size: 12px; font-weight: 600;
  overflow: hidden; text-overflow: ellipsis; }
.bt-vista { display: inline-flex; gap: 4px; }
.bt-vista--on {
  border-color: var(--casa-tinta, #f2c200) !important;
  color: var(--casa-tinta, #f2c200) !important;
  font-weight: 700;
}

/* ── Administración de Usuarios, en tabla ────────────────────────────── */
.adu-wrap {
  border: 1px solid var(--border, #2b3348); border-radius: 12px;
  overflow: auto; max-height: calc(calc(100vh / var(--tcg-z, 1)) - 260px);
}
.adu-tabla { width: 100%; border-collapse: collapse; font-size: 13px; }
.adu-tabla th {
  position: sticky; top: 0; z-index: 1;
  background: var(--panel, #1a2136);
  text-align: left; font-size: 13px; letter-spacing: .5px; text-transform: uppercase;
  color: var(--text); padding: 9px 12px; white-space: nowrap;
  border-bottom: 1px solid var(--border, #2b3348);
}
.adu-tabla td {
  padding: 9px 12px; vertical-align: middle;
  border-bottom: 1px solid color-mix(in srgb, var(--border, #2b3348) 55%, transparent);
}
.adu-tabla tbody tr { cursor: pointer; }
.adu-tabla tbody tr:hover { background: color-mix(in srgb, var(--casa-tinta, #f2c200) 10%, transparent); }
.adu-nombre { font-weight: 600; white-space: nowrap; }
/* La de baja se atenúa entera, pero se sigue leyendo: no está borrada. */
.adu-baja .adu-nombre, .adu-baja .adu-acceso { opacity: 1; }
.adu-acceso { color: var(--text); font-size: 12px; }
.adu-tag {
  display: inline-block; font-size: 12px; padding: 2px 8px; border-radius: 999px;
  border: 1px solid currentColor; white-space: nowrap;
}
.adu-tag--alta { color: var(--text); }
.adu-tag--baja { color: var(--text); }
.adu-tag--sin  { color: #e0725f; }
.adu-abrir { text-align: right; white-space: nowrap; font-size: 12px;
  color: var(--text); }
.adu-tabla tbody tr:hover .adu-abrir { color: inherit; }

/* ── Registro de Ventas: TODO en el encabezado ───────────────────────
   Los siete botones y los tres concesionarios en un solo renglón, dentro
   de la banda de color de la casa. Antes eran DOS filas apiladas —una del
   envoltorio con las casas, otra del tablero con las acciones— y el
   encabezado en el medio: tres renglones para lo que entra en uno. */
.tcg-env-acc .lu-btn--sm { padding: 4px 9px; font-size: 12px; white-space: nowrap; }
/* Dentro de la banda de color, los botones se pintan con la tinta de la
   casa. Si no, quedan del color del tema y se ven pegoteados encima. */
.tcg-env-acc .lu-btn {
  background: rgba(0, 0, 0, .14);
  border-color: rgba(0, 0, 0, .28);
  color: var(--casa-tinta, inherit);
}
.tcg-env-acc .lu-btn:hover { background: rgba(0, 0, 0, .24); }
.rv-enc-casas { display: inline-flex; gap: 5px; }
/* La casa que se está mirando: fondo lleno, para que se lea de un vistazo
   cuál de las tres planillas está abierta. */
.rv-casa--on {
  background: var(--casa-tinta, #fff) !important;
  color: var(--casa, #111) !important;
  border-color: var(--casa-tinta, #fff) !important;
  font-weight: 700;
}
.rv-enc-sep {
  width: 1px; align-self: stretch; min-height: 20px;
  background: currentColor; opacity: 1; margin: 0 3px;
}
.rv-enc-primaria { font-weight: 700; }
/* Lo que no se puede deshacer va al final y con su color, aunque esté en
   la misma fila que todo lo demás. */
.rv-enc-peligro {
  border-color: rgba(255, 255, 255, .55) !important;
  font-weight: 700;
}
/* En pantalla angosta se parte en dos renglones antes que recortar botones:
   perder un botón es peor que ocupar una línea más. El «flex-wrap» ya lo
   trae la regla original de «.tcg-env-acc»; acá sólo se separan las filas. */
.tcg-env-acc { row-gap: 5px; }

/* ── Registro de Ventas: encabezado, acciones y pie ─────────────────── */
/* Las acciones, agrupadas. Antes eran siete botones en fila, todos iguales:
   sin jerarquía no se distingue «agregar una venta» de «borrar todo». */
.rv-acciones {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  margin: 4px 0 14px;
}
.rv-acciones-grupo { display: flex; align-items: center; gap: 6px; }
.rv-acciones-sep {
  width: 1px; align-self: stretch; min-height: 22px;
  background: var(--rv-line, #2b3348); opacity: 1;
}
/* Lo que no se puede deshacer, al otro extremo y solo: para llegar hay que
   cruzar toda la barra, que es exactamente la idea. */
.rv-acciones-grupo--peligro { margin-left: auto; }

/* El menú de columnas del detalle de un indicador: las elegidas arriba con
   sus flechas, las que se pueden sumar abajo. */
.rv-col-menu { max-height: calc(62vh / var(--tcg-z, 1)); overflow-y: auto; min-width: 238px; }
.rv-col-fila { display: flex; align-items: center; gap: 6px; padding: 2px 0; }
.rv-col-nom { flex: 1 1 auto; font-size: 12px; }
.rv-col-x {
  background: transparent; border: 0; cursor: pointer; font: inherit;
  color: var(--text); padding: 0 4px; border-radius: 4px;
}
.rv-col-x:hover { color: #e0725f; background: rgba(224,114,95,.12); }
.rv-col-add {
  display: block; width: 100%; text-align: left; font: inherit; font-size: 12px;
  background: transparent; border: 0; cursor: pointer; padding: 3px 4px;
  border-radius: 4px; color: var(--text);
}
.rv-col-add:hover { background: rgba(255,255,255,.06); color: inherit; }
.rv-col-vacio { font-size: 11.5px; color: var(--text); padding: 2px 0 4px; }

/* El botón que acaba de copiar el dominio: se marca un momento para que se
   vea que la copia salió, sin un cartel más en pantalla. */
.dnrpa-copiado {
  border-color: color-mix(in srgb, var(--casa-tinta, #f2c200) 60%, transparent) !important;
  color: var(--casa-tinta, #f2c200) !important;
}

/* El botón del llamado vencido: quedó anotado un próximo llamado y la fecha
   ya pasó. Se pinta con el rojo del sistema, no con uno propio. */
.recl-vencido {
  border-color: #e0725f !important;
  color: #e0725f !important;
}
.recl-llamados, .recl-denuncia { white-space: nowrap; }
/* Los campos de fecha de Reclamos salían cortados: el <InputFecha >
   necesita lugar para el día, el mes, el año Y el iconito del calendario, y
   heredaba un ancho pensado para texto. Se le da el mínimo que necesita en
   vez de dejarlo encogerse con la columna. */
.recl-th-fecha { min-width: 148px; }
.recl-fecha-celda .lu-fecha, .recl-denuncia .lu-fecha { min-width: 132px; }
/* Un reclamo que lleva más de un mes sin resolver se marca en la lista. Es la
   misma tinta del llamado vencido, pero clase aparte: aquélla pinta el borde
   de un botón y acá no hay botón. */
.recl-dias-alto { color: #e0725f; font-weight: 700; }
/* ── Accesorios · el módulo partido en dos ─────────────────────────────
   Arriba la ficha del cliente, abajo la lista. Los tres colores son los del
   sistema viejo, que es lo que la gente ya tiene aprendido: blanco sin
   contactar, rojo contactado sin orden, verde contactado con orden. */
.pv-punto { display:inline-block; width:9px; height:9px; border-radius:50%; flex:0 0 auto; }
.pv-p-sin  { background:#e8eef5; }
.pv-p-cont { background:#e0725f; }
.pv-p-ord  { background:#3fa66b; }
.pv-barra-sep { flex:1; }
.pv-ficha {
  border:1px solid var(--border, #252d3f); border-radius:10px; padding:13px 15px;
  margin:0 0 10px; background:var(--panel-2, #202940);
}
.pv-ficha--vacia { color:var(--text); font-size: 12.5px; }
.pv-ficha-top { display:flex; gap:14px; align-items:flex-start; flex-wrap:wrap; }
.pv-ficha-quien { flex:1; min-width:220px; }
.pv-ficha-nom { font-size: 18px; font-weight:700; letter-spacing:.2px; }
.pv-ficha-sub { font-size: 12px; opacity: 1; margin-top:2px; }
.pv-chip { border-radius:999px; padding:2px 10px; font-size: 12px; font-weight:700; white-space:nowrap; }
.pv-e-sin  { background:rgba(232,238,245,.14); }
.pv-e-cont { background:rgba(224,114,95,.18); color:#e0725f; }
.pv-e-ord  { background:rgba(63,166,107,.18); color:var(--text); }
.pv-datos { display:flex; gap:24px; flex-wrap:wrap; margin-top:11px; }
.pv-dato { min-width:118px; }
.pv-dato span { display:block; font-size: 12px; text-transform:uppercase; letter-spacing:.5px; opacity: 1; }
.pv-dato b { font-weight:600; font-size: 13.5px; }
.pv-dato a { color:inherit; text-decoration:none; border-bottom:1px dotted currentColor; }
.pv-acciones { display:flex; gap:8px; flex-wrap:wrap; align-items:center; margin-top:12px; }
.pv-acc-sep { width:10px; }
.pv-btn-wa { background:var(--panel, #1f8a4c) !important; border-color:#1f8a4c !important; color:var(--text, #fff) !important; font-weight:600; }
/* El mensaje se muestra tal cual va a salir: si dice algo raro se ve antes de
   mandarlo, no después. */
.pv-msg {
  margin-top:11px; padding:9px 11px; border-radius:8px; font-size: 12px;
  line-height:1.55; opacity: 1; border:1px solid var(--border, #252d3f);
  background:rgba(255,255,255,.03); white-space:pre-wrap;
}
.pv-lista { max-height:340px; overflow:auto; }
.pv-tabla tbody tr { cursor:pointer; }
.pv-tabla tbody tr.pv-fila--on td { background:rgba(120,170,255,.16); }
/* Lo ya colocado queda a la vista pero apagado: sirve para saber que se hizo,
   no para que compita con lo que falta. */
.pv-hecho td { opacity: 1; }
.pv-hecho td:last-child { opacity:1; }
/* Los campos editables de la ficha: se ven como dato hasta que se tocan. */
.pv-editable {
  width:100%; background:transparent; border:1px solid transparent; border-radius:6px;
  color:inherit; font:inherit; font-weight:600; font-size: 13.5px; padding:1px 4px; margin-left:-4px;
}
.pv-editable:hover { border-color:var(--border, #252d3f); }
.pv-editable:focus { outline:none; border-color:var(--accent-amber, #f2c200); background:rgba(0,0,0,.2); }
.pv-editable::placeholder { color:var(--text); font-weight:400; }
/* El mensaje: se toca y se edita. */
.pv-msg { cursor:text; }
.pv-msg-caja { margin-top:11px; }
.pv-msg-caja .pv-msg { margin-top:0; }
.pv-msg-edit {
  width:100%; resize:vertical; font:inherit; font-size: 12px; line-height:1.55;
  padding:9px 11px; border-radius:8px; border:1px solid var(--accent-amber, #f2c200);
  background:rgba(0,0,0,.2); color:inherit;
}
.pv-msg-pie { display:flex; gap:8px; align-items:center; margin-top:6px; font-size: 12px; opacity: 1; }
/* Los botones que HACEN algo se distinguen de los de apoyo. Todos iguales
   obligaba a leerlos uno por uno cada vez. */
.pv-btn-orden { background:#2f6fbf !important; border-color:#2f6fbf !important; color:#fff !important; font-weight:700; }
.pv-btn-contacto { background:#7a5cc4 !important; border-color:#7a5cc4 !important; color:#fff !important; font-weight:700; }
.pv-btn-mail { background:#2b7d8c !important; border-color:#2b7d8c !important; color:#fff !important; font-weight:600; }
.pv-btn-apoyo { opacity: 1; }
/* Informe del taller. La unidad que ya está en el concesionario se resalta:
   es el dato que decide si el trabajo se puede hacer hoy o hay que esperar
   a que la traigan. */
.pv-en-casa {
  background:rgba(63,166,107,.22) !important;
  color:var(--text) !important; font-weight:700;
}
.pv-inf-sw { display:flex; align-items:center; gap:6px; font-size: 12px; opacity: 1; cursor:pointer; }
.pv-inf-acc td { padding-top:2px; padding-bottom:2px; font-size: 13px; opacity: 1; }
.pv-inf-acc td:nth-child(2) { padding-left:18px; }
.pv-inf-pie {
  padding:8px 12px; font-size: 12px; border-top:1px solid var(--border, #252d3f);
  background:var(--panel-2, #202940);
}
/* «sólo 0km» al lado del título del ranking de versiones: sin esto el número
   se lee como si incluyera usados, que es justamente lo que no hace. */
.rv-solo-vn {
  font-size: 10px; text-transform: uppercase; letter-spacing: .5px;
  opacity: 1; font-weight: 600; margin-left: 7px;
}
/* Ventana de alta de reclamo. Angosta a propósito: pide una fecha y un
   motivo, nada más. Entra entera en el S23 sin scroll. */
.recl-alta { width: min(520px, calc(94vw / var(--tcg-z, 1))); }
.recl-alta-cuerpo { display: grid; gap: 12px; padding: 14px 16px; }
.recl-alta-cuerpo textarea {
  width: 100%; resize: vertical; font: inherit; padding: 8px 10px;
  border-radius: 8px;
}
.recl-alta-nota { font-size: 12px; opacity: 1; line-height: 1.45; }

/* ══ Semáforo de antigüedad de las no transferidas ══════════════════ */
.gt-bloque {
  border: 1px solid var(--border, #2b3348);
  border-radius: 10px;
  padding: 10px 12px 12px;
  margin: 0 0 10px;
  background: var(--panel-2, #202940);
}
.gt-cab { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; margin-bottom: 8px; }
.gt-tit { font-size: 12.5px; font-weight: 700; text-transform: uppercase; letter-spacing: .3px; }
.gt-sub { font-size: 12px; color: var(--text); }
.gt-limpiar { margin-left: auto; }

.gt-tarjetas { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; }
.gt-tarjeta {
  text-align: left; cursor: pointer; font: inherit;
  display: flex; flex-direction: column; gap: 1px;
  padding: 8px 10px;
  border: 1px solid var(--border, #2b3348);
  border-left-width: 4px;
  border-radius: 8px;
  background: var(--panel, #1a2136);
  color: inherit;
}
.gt-tarjeta:hover { border-color: var(--gt-color); }
.gt-tarjeta--on { box-shadow: inset 0 0 0 1px var(--gt-color); background: color-mix(in srgb, var(--gt-color) 12%, transparent); }
.gt-t-rot { font-size: 12px; text-transform: uppercase; letter-spacing: .3px; color: var(--text); }
.gt-t-num { font-size: 22px; line-height: 1.15; color: var(--gt-color); }
.gt-t-pct { font-size: 12px; }
.gt-t-nota { font-size: 12px; color: var(--text); }

/* Un solo lugar define los cuatro colores, y de ahí sale todo: el borde de
   la tarjeta, el número, la franja de la barra y la cifra del ranking. */
.gt--verde    { --gt-color: #35b866; }
.gt--amarillo { --gt-color: #e0b400; }
.gt--naranja  { --gt-color: #ef8b2c; }
.gt--rojo     { --gt-color: #e2574c; }
.gt--sinfecha { --gt-color: #7a839b; }
.gt-tarjeta.gt--verde, .gt-tarjeta.gt--amarillo,
.gt-tarjeta.gt--naranja, .gt-tarjeta.gt--rojo { border-left-color: var(--gt-color); }

.gt-barra {
  display: flex; height: 10px; margin: 9px 0 4px;
  border-radius: 5px; overflow: hidden;
  border: 1px solid var(--border, #2b3348);
}
.gt-barra-parte { display: block; background: var(--gt-color); min-width: 3px; }

.gt-rank-tit {
  font-size: 12px; text-transform: uppercase; letter-spacing: .3px;
  color: var(--text); margin: 10px 0 4px;
}
.gt-rank-wrap { max-height: 210px; overflow: auto; border: 1px solid var(--border, #2b3348); border-radius: 8px; }
.gt-rank { width: 100%; border-collapse: collapse; font-size: 12px; }
.gt-rank th {
  position: sticky; top: 0; z-index: 1;
  background: var(--panel, #1a2136);
  text-align: center; font-size: 13px; text-transform: uppercase;
  padding: 5px 6px; border-bottom: 1px solid var(--border, #2b3348); white-space: nowrap;
}
.gt-rank th.gt--verde, .gt-rank th.gt--amarillo,
.gt-rank th.gt--naranja, .gt-rank th.gt--rojo { color: var(--gt-color); }
.gt-rank td { padding: 4px 6px; border-bottom: 1px solid color-mix(in srgb, var(--border, #2b3348) 55%, transparent); }
.gt-rank tbody tr { cursor: pointer; }
.gt-rank tbody tr:hover { background: color-mix(in srgb, var(--casa-tinta, #f2c200) 10%, transparent); }
.gt-rank--on { background: color-mix(in srgb, var(--casa-tinta, #f2c200) 18%, transparent); }
.gt-rank-nom { white-space: nowrap; }
.gt-rank-n { text-align: center; white-space: nowrap; }
.gt-rank-n.gt--verde, .gt-rank-n.gt--amarillo,
.gt-rank-n.gt--naranja, .gt-rank-n.gt--rojo { color: var(--gt-color); }
.gt-rank-vieja { white-space: nowrap; color: var(--text); font-size: 12px; }


@media (max-width: 1330px) {
  .tcg-sec i { display: none; }
  .tcg-sec { gap: 0; padding: 4px 9px; }
}

@media (max-width: 980px) {
  .vnv-cuerpo { grid-template-columns: 1fr; max-height: calc(calc(100dvh / var(--tcg-z, 1)) - 330px); }
  .vnv-buscador { flex-direction: column; align-items: stretch; }
}
@media (max-width: 980px) {
  .vnv-col .per-campo, .vnv-usado .per-campo { grid-template-columns: 92px 1fr; }
  .vnv-col .per-campo > span, .vnv-usado .per-campo > span { font-size: 10px; }
}
@media (max-width: 980px) {
  .vnv-col .per-campo, .vnv-usado .per-campo { grid-template-columns: 80px 1fr; }
}
@media (max-width: 980px) {
  .vnv-modal .vnb .per-campo,
  .vnv-modal .vnv-usado .per-campo { grid-template-columns: 104px 1fr; }
  .vnv-modal .vnb .per-campo > input,
  .vnv-modal .vnb .cat-disparador { min-height: 36px; font-size: 14px; }
  .vnv-consultas { width: 100%; }
  .vnv-pie-nota { display: none; }
}
@media (max-width: 980px) {
  .vnv-compacto .vnb .per-campo { grid-template-columns: 96px 1fr; }
  .vnv-compacto .vnb .per-campo > input,
  .vnv-compacto .vnb .cat-disparador { min-height: 32px; font-size: 13px; }
  .vnv-compacto .vnv-cuerpo--2col { overflow-y: auto; }
}
@media (max-width: 980px) {
  .vn-tabla, .cvn-tabla { font-size: 12px; }
  .vn-tabla thead th, .cvn-tabla thead th { padding: 5px 8px; font-size: 13px; }
  .vn-tabla tbody td, .cvn-tabla tbody td { padding: 5px 8px; }
}
/* En monitor chico la lista y la ficha se apilan: al lado no entra ninguna de
   las dos. La barrita se esconde, que en apilado no significa nada.
   (25/09/2026, Ramiro) */
@media (max-width: 900px) {
  /* En monitor chico, todas las pantallas con divisoria se apilan. */
  .crm-dos--part, .tcg-part { grid-template-columns: 1fr !important; }
  .tcg-divisoria { display: none; }
}
@media (max-width: 900px) { .rob-root .rob-fila-dias { grid-template-columns: 1fr; } }
@media (max-width: 900px) {
  .cc-barra-sup { gap: 10px; }
  .cc-filtros { flex: 1 1 100%; flex-wrap: wrap; }
}
@media (max-width: 900px) { .mod-split { grid-template-columns: 1fr; } .mod-split .pe { max-height: none; } }
@media (max-width: 900px) {
  .pre-detalle, .pre-listas { grid-template-columns: 1fr; }
}
@media (max-width: 900px) { .acc-cuerpo { grid-template-columns: 1fr; } }
@media (max-width: 900px) {
  .cc-filtros-lista { flex: 1 1 100%; margin-left: 0; padding: 6px 16px 0; justify-content: flex-start; }
}
@media (max-width: 900px) {
  .cc-cuerpo { grid-template-columns: 1fr; }
  .cc-indicadores { grid-template-columns: 1fr; }
}
/* En pantalla chica el panel necesita alto propio o queda aplastado. */
@media (max-width: 900px) {
  .gv-root .gv-panel-proceso { min-height: calc(70vh / var(--tcg-z, 1)); }
}
/* Los informes de la sección elegida: pestañas cuadradas, para que no se
   confundan con las píldoras redondeadas de las variantes. */





@media (max-width: 900px) {
  .inf-root .inf-seccion { font-size: 12px; padding: 4px 6px; }
}
@media (max-width: 900px) {
  .gv-root .gv-panel-proceso .vnv-buscador { flex-wrap: wrap; }
  .gv-root .gv-panel-proceso .vnv-buscador > .bap { flex: 1 1 100%; min-width: 0; }
  .bap-item { grid-template-columns: 74px minmax(0, 1fr) 110px; }
  .bap-item .vnv-resultado-est { display: none; }
}
@media (max-width: 900px) {
  .gv-root .gv-panel-proceso .vnv-buscador .vnv-consultas,
  .gv-root .gv-panel-proceso .vnv-buscador .mo-cab-btns { height: 38px; }
  .gv-root .gv-panel-proceso .vnv-buscador .vnv-consultas .lu-btn { padding: 0 9px; font-size: 11px; }
}
/* La última sección abre hacia la izquierda para no salirse de la pantalla. */

@media (max-width: 900px) {
  .gv-root .inf-seccion-elegido { display: none; }
  .gv-root .inf-desplegable { min-width: 210px; }
}
/* En pantalla chica la cápsula sigue siendo una sola: los botones bajan
   adentro, no se parte el recuadro. */
@media (max-width: 900px) {
  .vnvb-caja { flex-wrap: wrap; border-radius: 16px; padding: 5px; row-gap: 5px; }
  .vnvb-caja > .bap { flex: 1 1 100%; }
  .vnvb-caja .bap-input { height: 34px; padding-left: 12px; font-size: 13.5px; }
  .vnvb-acciones { flex: 1 1 100%; flex-wrap: wrap; }
  .vnvb-pill { height: 28px; padding: 0 10px; font-size: 11px; }
  .vnvb-pill--doble > button { padding: 0 9px; font-size: 11px; }
  .vnvb-acciones .mo-tema { width: 28px; height: 28px; }
}
/* ── Gestión de Ventas en pantalla angosta: reglas rescatadas ──────────────
   Estas reglas ya existían más arriba dentro de sus @media, pero después
   venían reglas planas del mismo peso que las pisaban, así que en el celular
   nunca llegaban a aplicarse. Repetidas acá, al final, sí mandan.

   Es el mismo problema que ya nos mordió antes: en este bloque, lo que se
   escribe antes pierde contra lo que se escribe después. */
@media (max-width: 900px) {
  /* El buscador de la barra de procesos quedaba en una sola línea con un
     ancho mínimo de 260px al lado del bloque de consultas, y entre los dos
     se pasaban del ancho de la pantalla. Ahora el buscador se lleva un
     renglón entero y las consultas bajan abajo. */
  .gv-root .gv-panel-proceso .vnv-buscador { flex-wrap: wrap; }
  .gv-root .gv-panel-proceso .vnv-buscador > .bap { flex: 1 1 100%; min-width: 0; }
}
@media (max-width: 900px) { .asig-columnas { grid-template-columns: 1fr; } }
@media (max-width: 900px) {
  /* Sin lugar para el ancho fijo, el bloque se acomoda solo. El truco del
     mismo punto se pierde, pero se pierde también la pantalla si no. */
  .vnv-pie-acciones { min-width: 0; flex: 1 1 100%; }
}
@media (max-width: 900px) {
  /* En celular no se escala: no tiene sentido leer todo al 40%. Vuelve a
     acomodarse en una columna y se desplaza, como cualquier pantalla. */
  .vnv-modal.vnv-fijo,
  .gv-root .gv-panel-proceso > .per-overlay > .per-modal.vnv-modal.vnv-fijo {
    width: 100% !important; max-width: 100% !important;
    height: auto !important; max-height: calc(94vh / var(--tcg-z, 1)) !important;
    transform: none !important; margin: 0 !important;
  }
  .per-overlay:has(> .vnv-fijo) { align-items: center; justify-content: center; }
}
@media (max-width: 900px) {
  /* En pantalla chica el menú vive siempre plegado a rail. */
  .ml-root { width: var(--ml-rail); padding: 12px 6px; }
  .app-shell { padding-left: calc(var(--ml-rail) + 10px); }
}
@media (max-width: 900px) {
  .ivj-indicadores { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 900px) {
  /* En celular se sigue desplazando como cualquier pantalla. */
  .vnv-modal.vnv-fijo,
  .gv-root .gv-panel-proceso > .per-overlay > .per-modal.vnv-modal.vnv-fijo {
    max-height: calc(94vh / var(--tcg-z, 1)) !important;
  }
  .vnv-fijo > .vnv-cuerpo { flex: 1 1 auto; overflow-y: auto; }
}
@media (max-width: 900px) {
  /* En pantalla chica el menú vive siempre plegado: mismo criterio. */
  .ml-root .ml-casa-logo { height: auto; width: 100%; max-height: 24px; }
}
/* ── Modal de ventas VN y VO ────────────────────────────────────────────
   Está armado sobre un lienzo de 1278px que se achica para entrar. En el
   teléfono el factor daba 0,24: se veía todo pero no se leía nada, y no
   se podía cargar una venta ni probar el boleto digital.
   Debajo de 900 el escalado se apaga (ver useEscalaFija) y acá se pasa a
   una sola columna que se desplaza, como cualquier formulario largo. */
/* ── La navegación en el teléfono ───────────────────────────────────────
   Al costado o arriba da igual acá: en las dos, las tarjetas pasan a una
   fila que se desliza con el pulgar y el contenido va debajo, a lo ancho. */
@media (max-width: 899px) {
  /* Una sola columna: dos tarjetas de pantalla al lado no entran. */
  .tcg-lista { grid-template-columns: 1fr; }
  /* Sin columna al costado, las solapas vuelven al borde: si no, arrancan
     con 232px de sangría contra nada. */
  .tcg-sect, .tcg-app--plegada .tcg-sect { padding-left: 10px; }
  /* La banda del logo dejó de valer 214px: en un teléfono de 360 se comía
     la pantalla entera. Acá pasa a lo que ocupe el logo, y los sectores usan
     el resto del renglón. */
  .tcg-banda-casa { flex: 0 0 auto; padding: 0 8px 0 10px; }
  .tcg-banda-casa::after { display: none; }
  .tcg-casa-sel img { height: 20px; max-width: 108px; }
  /* Sin columna al costado, la franja tampoco arranca a 232px. Y el
     padding de abajo lleva la safe-area acá y no en una regla suelta al
     final: suelta le gana a este bloque y deja la franja a 232px. */
  .tcg-franja { padding: 6px 12px calc(6px + env(safe-area-inset-bottom)); }
  /* Y la columna pasa a una fila que se desliza con el pulgar. */
  .tcg-cuerpo { flex-direction: column; }
  .tcg-side { flex: none; width: auto; align-self: stretch; border-right: 0;
    border-bottom: 1px solid var(--border, #252d3f); max-height: none; }
  .tcg-side-lista { display: flex; gap: 6px; overflow-x: auto; padding: 8px; }
  .tcg-side-it { flex: 0 0 auto; margin-bottom: 0; }
  .tcg-side-sep { display: none; }
  .tcg-casas-pie { display: flex; gap: 6px; overflow-x: auto; align-items: center; }
  .tcg-casas-pie .tcg-side-tit { display: none; }
  .tcg-casa-it { flex: 0 0 auto; width: auto; margin-bottom: 0; }
  /* (la franja del teléfono también era de la versión vieja) */
  /* En el teléfono el control baja debajo del rótulo: al costado no entra. */
  .tcg-aj-campo { flex-direction: column; align-items: stretch; gap: 7px; }
  .tcg-aj-ctrl { width: 100%; }
  .tcg-aj-seg { display: flex; width: 100%; }
  .tcg-aj-seg .tcg-aj-op { flex: 1 1 0; text-align: center; }
  .tcg-aj-campos { grid-template-columns: 1fr; }
}

@media (max-width: 899px) {
  /* Faltaba lo más importante: «.vnv-fijo» trae ALTO de 812px con
     «overflow: hidden». Con eso el modal se corta a los 812 y no hay forma
     de bajar: se ve la mitad del formulario y nada más. En el teléfono el
     alto lo pone el contenido y quien se desplaza es la pantalla. */
  .vnv-fijo {
    width: 100% !important; min-width: 0 !important; max-width: 100% !important;
    height: auto !important; max-height: none !important; overflow: visible !important;
    transform: none !important; margin: 0 !important;
  }
  /* Y la capa de atrás tiene que poder desplazarse. Con «align-items: center»
     un modal más alto que la pantalla se recorta ARRIBA y abajo a la vez, y
     lo recortado no se alcanza ni desplazándose. */
  .per-overlay {
    align-items: flex-start; justify-content: stretch;
    padding: 0; overflow-y: auto; -webkit-overflow-scrolling: touch;
  }
  .per-modal {
    width: 100%; max-width: 100%; max-height: none; border-radius: 0;
    margin: 0; overflow: visible;
  }
  .com-cuerpo, .vnv-cuerpo, .per-cuerpo { max-height: none; overflow: visible; }
  /* Los dos modales del peritaje traen alto fijo y «overflow: hidden» para
     que el pie quede pegado abajo. En el teléfono eso los corta: acá manda
     el contenido y el que se desplaza es la pantalla. El pie queda pegado
     abajo con «sticky», que sí funciona cuando se desplaza la página. */
  .per-modal-peritaje,
  .per-modal.com-modal--angosto {
    max-height: none !important; overflow: visible !important; display: block !important;
  }
  .per-modal-peritaje > .per-cuerpo,
  .per-modal-peritaje .per-cuerpo,
  .per-modal.com-modal--angosto > .com-cuerpo {
    max-height: none !important; overflow: visible !important;
  }
  .per-modal-peritaje > .per-pie,
  .per-modal.com-modal--angosto > .per-pie {
    position: sticky; bottom: 0; z-index: 6;
  }
  /* Las secciones y el panel van uno debajo del otro, no lado a lado. */
  .per-cuerpo { display: block !important; }
  /* Dos columnas IGUALES, no un flex que reparte. Con «flex: 1 1 46%» cada
     botón terminaba tomando el ancho de su propio texto, así que las dos
     columnas quedaban de anchos distintos, los contadores caían en cualquier
     lado y las siete secciones se leían mezcladas. Con grid las columnas
     miden lo mismo pase lo que pase con el texto. */
  .per-secciones {
    display: grid; grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 4px; margin-bottom: 10px;
  }
  .per-secciones .per-sec-btn {
    border-bottom: none; border-radius: 8px; min-width: 0;
    padding: 9px 8px; gap: 5px; font-size: 12px;
  }
  /* El rótulo cede y el contador no: es el dato que se está mirando. */
  .per-secciones .per-sec-t {
    min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  }
  .per-secciones .per-sec-n { flex: 0 0 auto; }
  /* Fotos, sola en la columna derecha del final. Con nueve solapas caía en
     el renglón de abajo a la IZQUIERDA, pegada a Presupuesto, y se leía como
     una más del montón. Corrida a la derecha queda visiblemente aparte, que
     es lo que es: lo último que se carga, cuando el auto ya se revisó. */
  .per-secciones > :last-child { grid-column: 2; }
  /* La tabla de ítems se desplaza sola: con cinco estados no entra a lo ancho. */
  .per-tabla-wrap, .vn-tabla-wrap { overflow-x: auto; }
  .per-estados { flex-wrap: wrap !important; }
  /* La cabecera acompaña: en un formulario largo es la única referencia de
     dónde estás parado. */
  .per-modal > .per-cab { position: sticky; top: 0; z-index: 6; }
  .vnv-modal { width: 100%; max-width: 100%; border-radius: 0; }
  .vnv-cuerpo,
  .vnv-cuerpo--2col { grid-template-columns: minmax(0, 1fr) !important; max-height: none; }
  .vnv-col { min-width: 0; }
  .vnv-buscador { flex-wrap: wrap; gap: 6px; }
  .vnv-buscador input { flex: 1 1 100%; }
  /* El pie no se pega abajo: en el teléfono roba media pantalla al teclado. */
  .vnv-modal .per-pie { position: static; flex-wrap: wrap; gap: 8px; }
  .vnv-modal .per-pie .lu-btn { flex: 1 1 auto; }
}
/* ── EL PERITAJE EN EL TELÉFONO ──────────────────────────────────────────
   El modal se derramaba: el pie amarillo aparecía flotando en el medio de
   la pantalla y las filas de ítems se dibujaban ENCIMA de la lista de
   atrás. Medido en Chromium a 360×780: el modal medía 686px y su cuerpo
   1497, empezando 604px por debajo del borde de arriba del modal.

   La causa son dos reglas que se pisan y ninguna gana del todo:
   «.tcg-lienzo .per-overlay» (dos clases) le gana por especificidad al
   «.per-overlay { padding: 0; align-items: stretch }» del bloque de 720px
   (una clase), así que el overlay conserva su padding y su centrado; y el
   bloque de 899px le pone al cuerpo «max-height: none !important; overflow:
   visible», que con un modal de alto acotado derrama el contenido afuera.
   El fondo del modal sólo pinta su caja, y por eso se ve la pantalla de
   atrás entre los renglones.

   El arreglo NO es sacar aquellas reglas —sostienen el monitor y la
   tablet— sino decir con la misma especificidad qué pasa en el teléfono:
   el modal ocupa el lienzo y se desplaza ÉL, con la cabecera y el pie
   pegados. Va acá adentro de la escalera, no suelta al final: una regla
   plana escrita después le ganaría al bloque de celular. */
@media (max-width: 899px) {
  /* ── Por qué acá no hay «>» ─────────────────────────────────────────
     El alta de usado en parte de pago es un modal DENTRO del modal de
     ventas: cuelga del cuerpo de una sección, no del panel. Con «> .per-
     overlay» —hijo directo— ninguna de estas reglas lo alcanzaba: salía con
     los bordes redondeados y el alto del escritorio, y el pie con «Crear y
     enganchar» quedaba fuera de la pantalla. No se podía crear el usado.
     Y las variantes con «.tcg-lienzo» tampoco lo alcanzan, ni a él ni a
     ningún modal: el armazón se dibuja como capa aparte —«soloArmazon»— y
     las pantallas quedan por debajo, FUERA del lienzo. Están de más; se
     dejan por si el armazón vuelve a envolver el contenido.
     La que manda es ésta, y va por descendencia: cualquier modal que viva
     dentro del panel de procesos, por hondo que esté. */

  .tcg-lienzo .per-overlay { padding: 0; align-items: stretch; }
  /* Los «!important» no son capricho: más arriba, en el bloque de 640px,
     vive «[class*="-modal"] { max-width: calc(100vw - 16px) !important;
     max-height: 88vh !important }». Ese comodín le acota el alto a TODOS los
     modales del sistema y es lo que dejaba al de peritaje sin lugar para su
     contenido. No se toca —sostiene los otros modales—: acá se lo contesta
     con la misma moneda, y sólo para el modal que vive en el lienzo. */
  /* El overlay de un submodal también toma la pantalla: si conserva el
     margen y el centrado del monitor, el modal de adentro no llega a los
     bordes y el pie pegado abajo queda flotando en el medio. */
  .tcg-lienzo .per-overlay .per-overlay { position: absolute; inset: 0;
    padding: 0; align-items: stretch; }
  /* El modal toma la pantalla entera, NO el alto visible.
     Acá estuvo el bug que más costó: acotar el modal a «--tcg-visible»
     parecía razonable —con el teclado arriba la pantalla útil es más
     chica— pero el modal arranca DEBAJO del encabezado de la casa, no en
     el cero. Medido a 360×780 con «--tcg-visible: 330px»: el modal quedaba
     de 25 a 355 y de 355 hasta abajo no había nada, negro. El pie, pegado
     al borde de un modal de 330px, aterrizaba en el MEDIO de la pantalla,
     y entre la cabecera y el pie sobraban 91px para el dato que se estaba
     cargando. Es el hueco negro del modal de crear usado, el pie duplicado
     y el pie flotando en Ventas: los tres son esto mismo.
     El modal vuelve a la pantalla entera y lo que se corre del teclado es
     el PIE, que para eso sabe cuánto mide. */
  .tcg-lienzo .per-overlay,
  .tcg-lienzo .per-overlay .per-overlay {
    max-height: calc(100dvh / var(--tcg-z, 1));
  }
  /* TRES FRANJAS, no una caja que se desplaza entera.
     Antes el modal era un solo bloque con desplazamiento y el pie iba
     «sticky» apoyado en «--tcg-teclado». Bastaba que esa variable trajera
     un valor alto —y lo traía, ver el comentario de la medición— para que
     el pie se despegara del piso y terminara arriba de todo, encima del
     formulario. Es lo que se veía en las tres casas.
     Ahora el modal mide lo que de verdad se ve y se reparte en tres: la
     cabecera arriba, el cuerpo en el medio —el ÚNICO que se desplaza— y el
     pie abajo. El pie no puede irse a ningún lado: es la última franja de
     una columna. Con el teclado abierto el modal se achica solo, porque
     «--tcg-visible» ya lo dice, y el pie queda justo encima del teclado.
     Sin cuentas de por medio. */
  /* Las tres cadenas hacen falta y ninguna sobra:
     · la del lienzo, para los modales que se abren desde el armazón;
     · la de «.gv-root .gv-panel-proceso», porque desde Gestión de Ventas el
       modal cuelga de ahí y esa rama tiene reglas propias de cuatro clases
       —también le gana al comodín «[class*="-modal"]» del bloque de 640px,
       que es el que acotaba TODOS los modales a 88vh;
     · la de «.vnv-fijo» con su cadena completa, porque el modal de venta
       trae un «max-height: 94vh !important» con SIETE clases y sin esto se
       quedaba en 733px en vez de tomar el alto que de verdad se ve.
     Todo esto se leyó del CSSOM, preguntándole al navegador qué regla
     estaba ganando, no del código. */
  /* El fondo se ancla a la pantalla, no al lugar donde cayó en la página.
     Medido: sin esto arrancaba trece píxeles más abajo —lo que le dejaba
     encima el panel— y entonces el modal terminaba trece píxeles por
     DEBAJO del borde, con el pie justo en esa franja que no se ve. Es la
     otra mitad de por qué «no se veían los botones». */
  /* El modal ocupa la pantalla entera, por encima de la barra de arriba.
     Antes quedaba por debajo —«z-index: 1» contra el 40 de la barra— y la
     barra le tapaba la primera franja: se veía el buscador cortado por la
     mitad y en el alta de usado desaparecía el título. Visto en el S23. */
  .tcg-lienzo .per-overlay,
  .gv-root .gv-panel-proceso .per-overlay {
    position: fixed !important; left: 0 !important; right: 0 !important;
    top: 0 !important; bottom: auto !important;
    height: var(--tcg-visible, calc(100dvh / var(--tcg-z, 1))) !important;
    max-height: var(--tcg-visible, calc(100dvh / var(--tcg-z, 1))) !important;
    align-items: stretch !important;
    /* Sin relleno: el fondo trae 14px por lado para que el modal no toque
       los bordes, que es lo correcto en un monitor. En el teléfono el modal
       ocupa la pantalla, y esos 14px lo corrían hacia abajo: el pie quedaba
       cortado justo esa franja. Medido en el modal anidado del alta de
       usado: el modal iba de 14 a 794 sobre una pantalla de 780. */
    padding: 0 !important;
    /* POR ENCIMA de la barra de arriba, que está en 40. En el panel de
       procesos el fondo queda en «z-index: 1» —una regla de escritorio, donde
       el modal vive DENTRO del panel— y en el teléfono, donde es de pantalla
       completa, la barra le ganaba y le tapaba la primera franja: se veía el
       buscador cortado por la mitad y el título del alta de usado no se veía.
       Compensarlo corriendo el modal hacia abajo era tapar el síntoma, y
       encima dependía de una medición que no vuelve a correr cuando se abre
       un modal. Debajo de 60, que es la hoja del menú: el ⋮ tiene que poder
       abrirse por encima de todo. */
    z-index: 55 !important;
  }
  .tcg-lienzo .per-overlay .per-modal,
  .gv-root .gv-panel-proceso .per-overlay > .per-modal,
  .gv-root .gv-panel-proceso .per-overlay > .per-modal.vnv-modal.vnv-fijo,
  .tcg-lienzo .per-overlay > .per-modal.vnv-modal.vnv-fijo {
    width: 100% !important; max-width: 100% !important;
    /* Todo lo que se ve. Ya no hay que restarle la barra: el modal va por
       encima de ella, así que no le queda nada arriba. */
    height: var(--tcg-visible, calc(100dvh / var(--tcg-z, 1))) !important;
    max-height: var(--tcg-visible, calc(100dvh / var(--tcg-z, 1))) !important;
    /* Con «!important»: «.ret-modal» redondea 14px con más clases y le
       ganaba. En pantalla completa las esquinas redondeadas dejan ver el
       fondo por los cuatro vértices. */
    border: 0 !important; border-radius: 0 !important;
    display: flex !important; flex-direction: column !important;
    overflow: hidden !important;
    -webkit-overflow-scrolling: touch;
  }
  .tcg-lienzo .per-overlay .per-modal > .per-cab,
  .tcg-lienzo .per-overlay .per-modal > .per-pie,
  .tcg-lienzo .per-overlay .per-modal > .per-pie-avisos,
  /* Las fotos, las marcas y el canal viven en su propia franja, entre el
     cuerpo y el pie. Fija: si se achicara, las tildes se superpondrían. */
  .tcg-lienzo .per-overlay .per-modal > .ret-marcas,
  .tcg-lienzo .per-overlay .per-modal > .ret-quien,
  .tcg-lienzo .per-overlay .per-modal > .ret-buscador,
  .gv-root .gv-panel-proceso .per-overlay > .per-modal > .ret-marcas,
  .gv-root .gv-panel-proceso .per-overlay > .per-modal > .per-cab,
  .gv-root .gv-panel-proceso .per-overlay > .per-modal > .per-pie,
  .gv-root .gv-panel-proceso .per-overlay > .per-modal > .per-pie-avisos {
    flex: 0 0 auto;
  }
  /* Dónde estoy parado y cómo salgo: las dos cosas quietas Y OPACAS.
     Lo opaco no es adorno: pegados con sticky, si son transparentes se ve
     el formulario entero pasando por detrás de los botones. Pasó en el
     presupuesto y se vio en el teléfono: la cabecera dejaba leer «VALOR
     ESTIMADO DE TOMA» a través, y la fila de Guardar / Cancelar flotaba
     encima de los campos.
     La causa: la ficha del presupuesto es un submodal —un «.per-overlay»
     adentro de otro— y hay una regla que a propósito les saca el color a
     la cabecera y al pie de los submodales, para que no repitan la franja
     del modal de atrás. En el monitor está bien: el submodal tiene su
     marco y su fondo. En el teléfono no hay modal de atrás a la vista, así
     que la franja va, igual que en cualquier otra pantalla. */
  .tcg-lienzo .per-overlay .per-modal > .per-cab,
  .gv-root .gv-panel-proceso .per-overlay > .per-modal > .per-cab {
    position: static !important; top: auto !important; z-index: 8;
    background: var(--vnv-marca, var(--accent-amber, #f2c200)) !important;
    color: var(--vnv-marca-txt, #131824) !important;
  }
  /* «bottom: 0» es el borde de la pantalla, que con el teclado abierto
     está TAPADO. «--tcg-teclado» lo publica el mismo efecto que medía el
     alto visible y dice exactamente cuánto se comió el teclado: el pie se
     apoya justo encima. Con el teclado cerrado vale 0 y no cambia nada. */
  /* «static» y no «sticky»: siendo la última franja de la columna ya está
     abajo, y apoyarlo en una medida era justamente lo que lo mandaba
     arriba. El «!important» es para ganarle a las reglas de escritorio. */
  .tcg-lienzo .per-overlay .per-modal > .per-pie,
  .tcg-lienzo .per-overlay .per-modal > .per-pie-avisos,
  .gv-root .gv-panel-proceso .per-overlay > .per-modal > .per-pie,
  .gv-root .gv-panel-proceso .per-overlay > .per-modal > .per-pie-avisos {
    /* Se lleva lo que sobra y queda pegado abajo. Antes lo que sobraba se
       lo quedaba el cuerpo, estirándose, y dejaba un agujero enorme entre
       el último campo y la franja siguiente. Es el hueco del alta de usado. */
    margin-top: auto !important;
    position: static !important; bottom: auto !important; z-index: 8;
    background: var(--vnv-marca, var(--accent-amber, #f2c200)) !important;
    color: var(--vnv-marca-txt, #131824) !important;
  }
  /* Con el teclado arriba, el modal ya mide sólo lo que se ve y el pie
     queda apoyado justo encima del teclado. No hace falta esconderlo —eso
     era para cuando el pie flotaba— pero sí achicarlo: con 330px de
     pantalla, cabecera y pie no pueden llevarse la mitad. */
  html.tcg-teclado-abierto .tcg-lienzo .per-overlay .per-modal > .per-pie,
  html.tcg-teclado-abierto .tcg-lienzo .per-overlay .per-modal > .per-pie-avisos {
    padding-top: 4px; padding-bottom: 4px;
  }
  html.tcg-teclado-abierto .tcg-lienzo .per-overlay .per-modal > .per-pie .vnv-pie-nota,
  html.tcg-teclado-abierto .tcg-lienzo .per-overlay .per-modal > .per-pie .com-ayuda {
    display: none;
  }
  /* Las fotos, las marcas y el canal de compra son una franja fija de casi
     doscientos píxeles. Con el teclado arriba quedan doscientos cuarenta de
     modal: sólo esa franja más la cabecera y el pie ya se pasan, y el pie
     volvía a quedar fuera de la pantalla. Mientras se escribe un campo no
     hacen falta; al bajar el teclado vuelven solas. */
  html.tcg-teclado-abierto .tcg-lienzo .per-overlay .per-modal > .ret-marcas,
  html.tcg-teclado-abierto .tcg-lienzo .per-overlay .per-modal > .ret-quien {
    display: none;
  }
  /* Y los cuatro atajos del buscador de ventas. Con el teclado arriba
     quedan 216px de modal: la cabecera se llevaba 126 y el pie 101, así que
     no entraban ni con el cuerpo en cero y el pie volvía a salirse.
     Son atajos para buscar una unidad; mientras se escribe un campo del
     formulario no se usan. Al bajar el teclado vuelven. */
  html.tcg-teclado-abierto .tcg-lienzo .per-overlay .per-modal .vnvb-acciones,
  html.tcg-teclado-abierto .gv-root .gv-panel-proceso .per-overlay > .per-modal .vnvb-acciones {
    display: none !important;
  }
  /* El pie, a un renglón. Sus tres botones —Cargar venta, Cancelar y
     Cerrar— se parten en dos renglones y se llevan 101px. Con 216px de
     modal, cabecera y pie no dejaban lugar ni para el campo que se está
     escribiendo. En un renglón son la mitad. */
  html.tcg-teclado-abierto .tcg-lienzo .per-overlay .per-modal > .per-pie,
  html.tcg-teclado-abierto .gv-root .gv-panel-proceso .per-overlay > .per-modal > .per-pie {
    flex-wrap: nowrap !important; gap: 5px !important;
  }
  html.tcg-teclado-abierto .tcg-lienzo .per-overlay .per-modal > .per-pie .lu-btn,
  html.tcg-teclado-abierto .gv-root .gv-panel-proceso .per-overlay > .per-modal > .per-pie .lu-btn {
    flex: 1 1 0 !important; min-width: 0 !important; overflow: hidden;
    height: 34px !important; min-height: 34px !important; padding: 0 6px !important;
  }
  /* Y el relleno del cuerpo. Con «flex-basis: 0» el cuerpo se achica hasta
     su relleno, que no se achica: eran 32px de los 216. */
  html.tcg-teclado-abierto .tcg-lienzo .per-overlay .per-modal > .vnv-cuerpo,
  html.tcg-teclado-abierto .tcg-lienzo .per-overlay .per-modal > .com-cuerpo,
  html.tcg-teclado-abierto .tcg-lienzo .per-overlay .per-modal > .per-cuerpo,
  html.tcg-teclado-abierto .tcg-lienzo .per-overlay .per-modal > .ret-body {
    padding-top: 4px !important; padding-bottom: 4px !important;
  }
  /* «Cerrar» partía en dos renglones: «Cerr / ar». */
  .tcg-lienzo .per-overlay .per-modal > .per-cab .lu-btn,
  .tcg-lienzo .per-overlay .per-modal > .per-pie .lu-btn { white-space: nowrap; }
  /* El cuerpo es la franja del medio y es la ÚNICA que se desplaza. Antes
     el que se desplazaba era el modal entero y el cuerpo tenía que fluir;
     ahora es al revés, y de paso desaparece la doble barra: hay un solo
     lugar con desplazamiento en toda la pantalla.
     Van TODAS las clases de cuerpo, no sólo la del peritaje: son ocho en el
     proyecto y cada pantalla usa la suya. «.com-cuerpo» está adentro porque
     la usan treinta y cuatro pantallas, el presupuesto entre ellas.
     «min-height: 0» no es adorno: sin él, un hijo de una columna flex se
     niega a achicarse y el cuerpo empuja al pie fuera de la pantalla. */
  .tcg-lienzo .per-overlay .per-modal > .per-cuerpo,
  .tcg-lienzo .per-overlay .per-modal .per-cuerpo,
  .tcg-lienzo .per-overlay .per-modal > .com-cuerpo,
  .tcg-lienzo .per-overlay .per-modal > .vnv-cuerpo,
  .tcg-lienzo .per-overlay .per-modal > .vnp-cuerpo,
  .tcg-lienzo .per-overlay .per-modal > .acc-cuerpo,
  .tcg-lienzo .per-overlay .per-modal > .cc-cuerpo,
  .tcg-lienzo .per-overlay .per-modal > .mic-cuerpo,
  .tcg-lienzo .per-overlay .per-modal > .abm-cuerpo,
  /* «.ret-body» es el cuerpo del alta de usado y faltaba en esta lista.
     Se notaba: el modal se forzaba a la pantalla entera pero el cuerpo
     conservaba su «max-height: calc(100dvh - 320px)», que es un número de
     escritorio. Con las fotos, las marcas y el canal de compra abajo, la
     suma de las franjas se pasaba del alto del modal y el «overflow:
     hidden» recortaba la última: desaparecía «Crear y enganchar» y no se
     podía crear el usado. Es el hueco del modal de crear usado.
     Como franja del medio toma exactamente lo que sobra: ni deja hueco ni
     empuja a nadie afuera. */
  .tcg-lienzo .per-overlay .per-modal > .ret-body,
  .gv-root .gv-panel-proceso .per-overlay > .per-modal > .ret-body,
  .gv-root .gv-panel-proceso .per-overlay > .per-modal > .vnv-cuerpo,
  .gv-root .gv-panel-proceso .per-overlay > .per-modal > .com-cuerpo,
  .gv-root .gv-panel-proceso .per-overlay > .per-modal > .per-cuerpo {
    /* «0 1 auto»: se achica cuando el contenido no entra, pero NO crece
       cuando sobra. Con «1 1 0%» el cuerpo se estiraba hasta llenar el
       modal y, si el formulario era corto, quedaba un agujero enorme entre
       el último campo y lo que sigue. Es el hueco del alta de usado.
       Lo que sobra ahora se lo lleva el pie, que baja solo: ver el
       «margin-top: auto» de la franja de abajo. */
    flex: 0 1 auto !important;
    max-height: none !important;
    overflow-y: auto !important; overflow-x: hidden;
    -webkit-overflow-scrolling: touch;
    display: block !important; min-height: 0 !important;
    overscroll-behavior: contain;
  }
  /* El detalle tampoco: su «overflow: auto» creaba una segunda barra de
     desplazamiento adentro de la que ya tiene el modal. */
  .tcg-lienzo .per-overlay .per-modal-peritaje .per-detalle {
    max-height: none; overflow: visible;
  }
  /* Y la tabla de ítems se desliza SOLA de costado. Sin esto, al sacarle el
     «overflow» al detalle la columna de observación se salía de la pantalla
     y no había forma de alcanzarla. Con «display: block» la tabla es su
     propia caja con desplazamiento horizontal, y el modal sigue moviéndose
     en vertical sin pelearse con ella.
     Esto CONTIENE la tabla; no la arregla. Cinco calificaciones apiladas por
     ítem dan renglones de 250px y 57 ítems son catorce mil píxeles de
     recorrido. La forma que va a tener esta fila en el teléfono es la pieza
     de formularios, y va con maqueta antes de tocar nada. */
  .tcg-lienzo .per-overlay .per-modal .per-tabla {
    display: block; overflow-x: auto; max-width: 100%;
    scrollbar-width: thin;
  }
}
/* ═══════════════════════════════════════════════════════════════════════
   EL DEDO · piso táctil y piso de letra · 2026-08-28
   Medido en Chromium a 360×780 sobre la versión «ba»: en una sola pantalla
   de Informes había 28 botones de menos de 40px de alto, con los subtemas a
   24px y los de Excel/imprimir a 22px. La referencia de Android y de iOS es
   44px. A 24px el dedo erra, y errar en una lista de informes significa
   abrir el que no era y volver.
   Va acá, en el escalón de 899px, y no al final del archivo: al final queda
   después de los afinados de (hover:none) y (max-height), que tienen que ir
   últimos porque corrigen ENCIMA del ancho.
   ═════════════════════════════════════════════════════════════════════ */
@media (max-width: 899px) {
  /* El piso general. Se escribe sobre los elementos que se tocan, no sobre
     «button» a secas, para no estirar los tildes de las tablas ni los
     tiradores de columna, que se manejan aparte más abajo. */
  .lu-btn, .ivj-tab-btn, .inf-btn, .inf-vista, .inf-sel-sec, .inf-sel-inf,
  .tcg-casa-sel, .per-pie button, .gv-side-item, .asig-sol, .tnd-btn,
  .bol-mes, .ret-cab-btns button, .com-cuerpo > button {
    min-height: 40px;
    padding-top: 6px; padding-bottom: 6px;
  }
  /* Los campos de texto y los desplegables van al mismo piso: si el botón de
     al lado mide 40 y el campo 20, la fila queda desprolija y el campo es más
     difícil de acertar que el botón. */
  .per-buscar, .inf-buscar, .lu-buscar,
  input[type="text"], input[type="search"], input[type="date"],
  input[type="tel"], input[type="email"], input[type="password"], select {
    min-height: 40px;
  }
  /* El piso de letra. A 10,5px, que es lo que había en Informes, en la mano y
     con sol no se lee. */
  .inf-vista, .inf-sel-sec, .inf-sel-inf, .inf-btn, .ivj-tab-btn,
  .asig-porque, .asig-pasa, .asig-chip, .com-ayuda, .tnd-n {
    font-size: 12px;
  }
  /* Las excepciones, a propósito. Adentro de una tabla un piso de 40px hace
     renglones enormes y entra menos información en la pantalla; y el tirador
     de columna tiene que seguir siendo finito para caer sobre la separación.
     En el teléfono, además, 27 pantallas cambian la tabla por fichas, así que
     acá lo que importa es que la tabla siga siendo legible. */
  .vn-tabla button, .per-tabla button, table button {
    min-height: 0; padding-top: 2px; padding-bottom: 2px;
  }
  .inf-th-tirador, .bt-th-tirador, .ret-tilde, .asig-lapiz {
    min-height: 0; padding-top: 0; padding-bottom: 0;
  }
  /* La cabecera y las celdas de Informes estaban a 10,5 y 11px. Medido: en
     una pantalla había 14 textos abajo de 11px. En la mano y con sol no se
     leen. El ancho de la tabla no cambia por esto: las columnas ya tienen
     ancho propio y el contenedor se desplaza de costado.

     OJO CON LA ESPECIFICIDAD, que costó encontrarlo. «baseCss» NO es siempre
     la última hoja: Informes monta la suya, «INF_CSS», y el navegador la
     inserta después. Con la misma especificidad gana la de Informes, así que
     «.inf-root .inf-th» escrito acá NO hacía nada, aunque estuviera bien
     escrito y en el @media correcto. Se sube un escalón agregando el
     contenedor —«.inf-tabla»— y así gana sin necesidad de !important.
     Vale para cualquier regla de baseCss que pise a una de INF_CSS. */
  .inf-root .inf-tabla .inf-th { font-size: 12px; }
  .inf-root .inf-tabla .inf-td { font-size: 12px; }
  /* Las tarjetas de indicadores de Informes van aparte: su tamaño está fijado
     con !important más arriba, en el bloque que les puso color de tema. A un
     !important sólo se le gana con otro !important escrito después, así que
     acá no es un atajo sino la única forma. El rótulo sube a 12 y la nota a
     11,5: la nota es texto secundario y tiene que seguir viéndose como tal,
     pero 10px en la mano no se leen. */
  /* Propuesta Comercial en el teléfono. Las clases cambiaron al pasar de
     planilla a tarjetas, y las reglas viejas apuntaban a nombres que ya no
     existen: no rompían nada, pero tampoco hacían nada. */
  .pc-grilla, .pc-grilla--chica { grid-template-columns: 1fr; }
  .pc-tar-cab { flex-wrap: wrap; }
  .pc-tar-res { width: 100%; align-items: flex-start; text-align: left; }
  .pc-det-campos > .pc-campo { flex: 1 1 100%; }
  .pc-hoja-foto { width: 100%; }
  .pc-hoja-tabla { flex: 1 1 100%; }
  .pc-barra > * { flex: 1 1 auto; }
  .inf-root .inf-ind-label, .inf-pie .inf-ind-label { font-size: 12px !important; }
  .inf-root .inf-ind-nota, .inf-pie .inf-ind-nota { font-size: 12px !important; }
  /* Y que se note que hay más tabla a la derecha. Medido a 360px: se ven 320
     de 953, o sea que hay 633px escondidos y nada lo anuncia. En el monitor
     no hace falta —se ve el corte—, en el teléfono sí: sin la barra a la
     vista, la mitad de la tabla no existe para quien la usa. */
  .inf-root div.inf-tabla-wrap {
    scrollbar-width: thin;
    overscroll-behavior-x: contain;
    background-image:
      linear-gradient(to right, var(--panel) 30%, rgba(0,0,0,0)),
      linear-gradient(to left, var(--panel) 30%, rgba(0,0,0,0)),
      linear-gradient(to right, rgba(0,0,0,.28), rgba(0,0,0,0)),
      linear-gradient(to left, rgba(0,0,0,.28), rgba(0,0,0,0));
    background-position: left center, right center, left center, right center;
    background-repeat: no-repeat;
    background-size: 32px 100%, 32px 100%, 12px 100%, 12px 100%;
    background-attachment: local, local, scroll, scroll;
  }
  .inf-root div.inf-tabla-wrap::-webkit-scrollbar { height: 8px; }
  .inf-root div.inf-tabla-wrap::-webkit-scrollbar-thumb {
    background: var(--text-muted, #9aa3b2); border-radius: 4px;
  }
}
@media (max-width: 860px) {
  .ing-detalle, .ing-grid { grid-template-columns: 1fr; }
  .ing-tabla-cont { max-height: calc(calc(100dvh / var(--tcg-z, 1)) - 480px); }
}
@media (max-width: 860px) { .ing-grid--3 { grid-template-columns: 1fr; } }
@media (max-width: 860px) { .rep-grid { grid-template-columns: 1fr; } }
@media (max-width: 768px) {
  .am-tabla-card { flex-direction: column; }
  .am-mapa-titulo-block { flex: 0 0 auto; flex-direction: row; justify-content: flex-start; padding: 8px 4px; gap: 10px; }
  .am-mapa-svg { max-height: 90px; width: auto; max-width: 90px; }
  .am-mapa-titulo-block .am-mapa-rotulo-block { text-align: left; }
  .am-tabla-cuerpo { min-width: 0; width: 100%; }
  .am-tabla-scroll { overflow-x: auto; }
  .am-tabla-scroll table { font-size: 12px; }
  .am-tabla-header h2 { font-size: 14px; }
  .am-indicadores-marca { grid-template-columns: 1fr; gap: 8px; }
  .am-ind-card { padding: 8px 10px; }
  .am-evolucion-fila { grid-template-columns: 74px 1fr; gap: 6px; }
  .am-evolucion-barras { height: 34px; }
  .am-brecha-grid { grid-template-columns: 1fr; }
}
@media (max-width: 768px) {
  .lc-reporte { padding: 14px 12px; }
  .lc-nombre-dealer { font-size: 16px; }
  .lc-header h1 { font-size: 14px; }
  .lc-grid { grid-template-columns: 1fr; }
  .lc-grid--resumen { grid-template-columns: 1fr; }
  .lc-card, .lc-grid--resumen .lc-card { width: 100%; max-width: 420px; }
  .lc-card-fila { grid-template-columns: 1fr 46px 100px; font-size: 12px; }
  .lc-card-fila--encabezado span { font-size: 10px; }
  .lc-extras { grid-template-columns: 1fr; }
  .lc-tabla-anuladas, .lc-tabla-unificada { font-size: 10.5px; }
}
@media (max-width: 768px) {
  .ivj-reporte { padding: 14px 12px; border-radius: 8px; }
  .ivj-header { flex-wrap: wrap; gap: 8px; margin-bottom: 10px; padding-bottom: 8px; }
  .ivj-nombre-dealer { font-size: calc(var(--ivj-letra, 1) * 16px); }
  .ivj-header h1 { font-size: calc(var(--ivj-letra, 1) * 14px); }
  .ivj-mes-select { font-size: calc(var(--ivj-letra, 1) * 11px); padding: 5px 8px; }
  .ivj-tabla { font-size: calc(var(--ivj-letra, 1) * 10px); }
  .ivj-tabla thead th { padding: 5px 6px; font-size: calc(var(--ivj-letra, 1) * 10px); }
  .ivj-tabla tbody td { padding: 4px 6px; }
  .ivj-celda { font-size: calc(var(--ivj-letra, 1) * 10px); min-width: 26px; }
  .ivj-fila-totales td.ivj-col-destacada .ivj-celda { font-size: calc(var(--ivj-letra, 1) * 11px); }
  .ivj-indicadores { grid-template-columns: 1fr; gap: 10px; margin-bottom: 14px; }
  .ivj-ind-card { padding: 10px 12px; }
  .ivj-ind-titulo { font-size: calc(var(--ivj-letra, 1) * 13px); margin-bottom: 6px; }
  .ivj-vs-valor { font-size: calc(var(--ivj-letra, 1) * 17px); }
  .ivj-rank-nombre { font-size: calc(var(--ivj-letra, 1) * 11px); }
  .ivj-rank-valor { font-size: calc(var(--ivj-letra, 1) * 10px); }
  .ivj-planahorro { max-width: 100%; }
  .ivj-tab-btn { padding: 7px 12px; font-size: calc(var(--ivj-letra, 1) * 11px); }
}
@media (max-width: 768px) {
  .asg-reporte { padding: 14px 12px; }
  .asg-buscador { min-width: 0; }

  /* Encabezado: el título ocupa su propio renglón y los botones van abajo,
     si no el título quedaba apretado contra los botones y se cortaba. */
  .asg-header { flex-direction: column; align-items: stretch; gap: 8px; }
  .asg-header h1 { font-size: 15px; line-height: 1.35; overflow-wrap: anywhere; }
  .asg-header-acciones { justify-content: flex-start; }
  .asg-toolbar { flex-direction: column; align-items: stretch; }
  .asg-toolbar > * { width: 100%; }
  .asg-toolbar .asg-btn { justify-content: center; }

  /* Indicadores: en el celular no tiene sentido el plano libre (las tarjetas
     arrancan en una grilla de 4 columnas = más de 1100px de ancho, así que
     en pantalla chica quedaban casi todas fuera de la vista y había que
     scrollear de costado). Acá se apilan una debajo de la otra a todo el
     ancho. Las posiciones y tamaños que hayas elegido en la computadora NO
     se pierden: siguen guardados y se vuelven a ver al entrar desde una
     pantalla grande. */
  .asg-indicadores { height: auto !important; overflow-x: visible; display: flex; flex-direction: column; gap: 12px; }
  .asg-ind-card {
    position: static !important; left: auto !important; top: auto !important;
    width: 100% !important; height: auto !important; max-height: calc(60vh / var(--tcg-z, 1));
  }
  .asg-ind-drag, .asg-ind-resize { display: none !important; }
  .asg-ind-titulo { font-size: 12px; letter-spacing: 0; overflow-wrap: anywhere; }
  .asg-ind-valor-grande { font-size: 15px; }

  /* Modal de detalle: título largo que se corta y tabla con scroll propio. */
  .asg-modal { padding: 14px 12px; max-height: calc(88vh / var(--tcg-z, 1)); }
  .asg-modal-titulo { font-size: 13.5px; overflow-wrap: anywhere; }
  .asg-modal-header { flex-wrap: wrap; }
}
@media (max-width: 768px) {
  .rob-root .rob-grid { grid-template-columns: 1fr 1fr; }
  .rob-root .rob-inds { grid-template-columns: 1fr; }
  .rob-root .rob-bloque { padding: 12px 11px; }
  .rob-root .rob-bloque-barra { flex-direction: column; align-items: stretch; }
}
@media (max-width: 768px) {
  .asg-indicadores { grid-template-columns: 1fr; grid-auto-rows: auto; }
  .asg-ind-card { grid-column: span 1 !important; grid-row: span 1 !important; max-height: calc(60vh / var(--tcg-z, 1)); }
  .asg-ind-resize, .asg-ind-medida { display: none !important; }
}
@media (max-width: 768px) {
  .per-cuerpo { flex-direction: column; }
  .per-secciones { flex-direction: row; overflow-x: auto; border-right: none; border-bottom: 1px solid var(--border, #2c2f36); min-width: 0; }
  .per-sec-btn { white-space: nowrap; }
}
@media (max-width: 768px) { .com-origen { grid-template-columns: 1fr; } }
@media (max-width: 768px) {
  .mp-franjas { margin: 0 0 10px; }
  .mp-franja { gap: 7px; padding: 5px 8px; }
  .mp-chip { font-size: 12px; padding: 5px 8px; }
}
@media (max-width: 760px) {

  .gv-root { --gv-side-w: 100%; min-height: 0; }
  .gv-root .gv-body { flex-direction: column; }
  /* El desplegable se ancla a la DERECHA del botón: anclado a la izquierda,
     los botones del final del renglón lo tiraban afuera de la pantalla. Y el
     ancho tiene techo: sin él, un informe de nombre largo lo estira y se sale
     igual, que era el problema que quedaba anotado del teléfono.
     Medido a 360px: el menú ocupa de 9 a 351. */
  .gv-root .gv-menu-drop {
    left: auto; right: 0; min-width: 236px;
    max-width: calc(calc(100vw / var(--tcg-z, 1)) - 18px);
  }

  /* EL ENCABEZADO DEL INFORME, EN EL TELÉFONO.
     Stock de 0km tiene trece subtemas: envueltos en 360px ocupaban seis
     renglones, más las dos filas del índice, y los datos empezaban abajo de
     todo —había que desplazarse media pantalla para ver el primer registro—.
     Pasan a UN renglón que se desliza con el pulgar: se ven los primeros,
     se arrastra para el resto, y la tabla arranca arriba.
     No se achica la letra ni se esconden botones: lo que sobraba era el
     alto, no el ancho. */
  /* Con «.inf-root .inf-filtros--subtemas» no alcanzaba: del lado del monitor
     la regla se escribió con TRES clases —«.gv-root .inf-root
     .inf-filtros--subtemas»— y le gana en cualquier ancho. Se repite el mismo
     selector, que es lo único que hace que la de teléfono gane. Y se suelta
     el alto mínimo de 78px, que estaba puesto para que el bloque no saltara
     al cambiar de informe: en un renglón ya no salta. */
  .gv-root .inf-root .inf-filtros--subtemas,
  .inf-root .inf-filtros--subtemas,
  .inf-root .inf-sel-fila {
    /* Con «!important» y no confiando en el orden: en esta hoja el bloque de
       teléfono compite con reglas de igual peso escritas antes, y basta que
       alguien agregue una línea más arriba para que la de monitor vuelva a
       ganar sin que se note. */
    flex-wrap: nowrap !important; overflow-x: auto; -webkit-overflow-scrolling: touch;
    scrollbar-width: none; min-height: 0 !important;
  }
  .inf-root .inf-filtros--subtemas::-webkit-scrollbar,
  .inf-root .inf-sel-fila::-webkit-scrollbar { display: none; }
  .inf-root .inf-sel-sec, .inf-root .inf-sel-inf, .inf-root .inf-vista { flex: 0 0 auto; }
  .inf-selector { padding: 6px 10px 3px; }
  .inf-root .inf-donde-fila { position: sticky; left: 0; z-index: 2;
    background: var(--panel, #171e2e); }
}
@media (max-width: 760px) {
  .cvn-barra { flex-direction: column; align-items: stretch; }
  .cvn-tabla-cont { max-height: calc(calc(100dvh / var(--tcg-z, 1)) - 340px); }
}
/* ── Gestión de Ventas en celular ──────────────────────────────────────────
   Va al final del bloque a propósito: varias reglas de arriba (las de dos
   columnas, las de alto calculado y las de tipografía chica) están escritas
   DESPUÉS de los @media viejos y por eso los pisaban. Acá se corrigen. */
@media (max-width: 760px) {

  /* 1. Alto real de la ventana. Con 100dvh el pie del formulario (Cancelar ·
        Guardar) quedaba tapado por la barra del navegador y no se llegaba. */
  .app-shell--modulo { height: calc(100dvh / var(--tcg-z, 1)); }
  .gv-root { min-height: 0; }
  .gv-root .gv-main { min-height: 0; }

  /* 2. Barra de menú compacta, para que entre en uno o dos renglones.
        No se le pone scroll horizontal a propósito: recortaría los
        desplegables, que cuelgan de los botones. */
  .gv-root .gv-menubar { min-height: 40px; padding: 3px 8px; gap: 3px; }
  .gv-root .gv-menu-btn { font-size: 12px; padding: 7px 10px; border-radius: 8px; }
  .gv-root .gv-menu-drop {
    left: auto; right: 0; min-width: 0;
    width: max-content; max-width: calc(calc(100vw / var(--tcg-z, 1)) - 20px); max-height: calc(62vh / var(--tcg-z, 1));
  }
  .gv-root .gv-menu-drop-item { padding: 10px 10px; font-size: 12.5px; }
  .gv-root .gv-slot-barra .lu-btn { padding: 6px 10px; font-size: 12px; }

  /* Chips de concesionario en una sola línea que se corre con el dedo. */
  .gv-root .gv-chips {
    flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; padding: 8px 10px;
  }
  .gv-root .gv-chips::-webkit-scrollbar { display: none; }
  .gv-root .gv-chips > * { flex: 0 0 auto; }

  /* 3. Los accesos del lateral se comían media pantalla. */
  .gv-root .gv-side { max-height: calc(26vh / var(--tcg-z, 1)); }
  .gv-root .gv-side-items { grid-template-columns: repeat(auto-fill, minmax(102px, 1fr)); gap: 6px; }
  .gv-root .gv-side-item { padding: 9px 6px; }
  .gv-root .gv-side-head { padding: 10px 12px; }

  /* 4. Una sola barra de desplazamiento: la del área de trabajo.
        Antes el panel pedía 70vh dentro de un hueco de ~40vh, el sobrante se
        recortaba y no había forma de llegar a la parte de abajo. */
  .gv-root .gv-main--informe { display: block; overflow: auto; -webkit-overflow-scrolling: touch; }
  .gv-root .gv-panel-proceso { min-height: 0; display: block; }
  .gv-root .gv-panel-proceso > * { display: block; }
  .gv-root .gv-panel-proceso > .per-overlay {
    position: relative; inset: auto; padding: 0; display: block;
  }
  .gv-root .gv-panel-proceso > .per-overlay > .per-modal { height: auto; display: block; }
  .gv-root .gv-panel-proceso > .per-overlay > .per-modal > .vnv-cuerpo,
  .gv-root .gv-panel-proceso > .per-overlay > .per-modal > .per-cuerpo,
  .gv-root .gv-panel-proceso .vnv-compacto .vnv-cuerpo--2col {
    overflow: visible; max-height: none;
  }
  /* El aviso flotante deja de taparle la esquina al formulario. */
  .gv-root .gv-panel-proceso .mp-aviso { position: static; margin: 8px 10px 0; }

  /* 5. Una sola columna. Esta era la que rompía la pantalla: la regla de dos
        columnas está escrita más abajo que el @media viejo de 980px y ganaba
        también en el celular. */
  .vnv-cuerpo, .vnv-cuerpo--2col { grid-template-columns: 1fr; }
  .vnv-fila2, .vnv-fila3 { grid-template-columns: 1fr; }
  .ing-detalle, .ing-grid { grid-template-columns: 1fr; }

  /* 6. Etiqueta arriba del campo: con 80px de etiqueta al costado no entraba
        ni el nombre ni el dato. */
  .vnv-col .per-campo, .vnv-usado .per-campo, .ing-grid--edit .per-campo {
    grid-template-columns: 1fr; gap: 3px;
  }
  .vnv-col .per-campo > span, .vnv-usado .per-campo > span,
  .ing-grid--edit .per-campo > span {
    text-align: left; font-size: 12px; letter-spacing: .3px;
  }
  .vnv-col .per-campo > small, .vnv-usado .per-campo > small,
  .ing-grid--edit .per-campo > small { grid-column: 1; }
  .vnv-col .com-ayuda, .vnv-usado .com-ayuda { font-size: 10.5px; line-height: 1.35; }

  /* 7. iOS agranda la pantalla solo si el texto del campo mide menos de 16px.
        Ese salto de zoom era lo que dejaba el formulario descuadrado. */
  .gv-root .gv-panel-proceso .per-campo > input,
  .gv-root .gv-panel-proceso .per-campo > select,
  .gv-root .gv-panel-proceso .per-campo > textarea,
  .gv-root .gv-panel-proceso .cvn-cat-elegir select,
  .gv-root .gv-panel-proceso .cat-disparador,
  .gv-root .gv-panel-proceso .vnv-mesanio input,
  .gv-root .gv-panel-proceso .vnv-dato--edit input,
  .gv-root .gv-panel-proceso .vnvb-caja .bap-input,
  .gv-root .gv-panel-proceso .vnl-buscar {
    font-size: 16px; padding: 8px 10px; min-height: 38px;
  }
  .gv-root .gv-panel-proceso .vnv-mesanio { grid-template-columns: 62px 8px 1fr; }
  .gv-root .gv-panel-proceso .vnvb-caja .bap-input { padding: 0 12px; }
  .gv-root .gv-panel-proceso .per-campo--calc strong { font-size: 14px; padding: 7px 9px; }
  .gv-root .gv-panel-proceso .vnv-dato > span { font-size: 10px; }
  .gv-root .gv-panel-proceso .vnv-dato > strong { font-size: 13px; }

  /* 8. Botones del pie: alcanzables y del tamaño de un dedo. */
  .gv-root .gv-panel-proceso .vnv-pie,
  .gv-root .gv-panel-proceso .per-pie {
    flex-wrap: wrap; gap: 7px; padding: 9px 10px 16px;
  }
  .gv-root .gv-panel-proceso .lu-btn { padding: 9px 13px; font-size: 13px; }
  .gv-root .gv-panel-proceso .lu-btn--sm { padding: 6px 10px; font-size: 12px; }
  .gv-root .gv-panel-proceso .vnv-pie-nota { flex: 1 1 100%; margin: 0 0 2px; }

  /* 9. Las coincidencias del buscador, legibles en pantalla angosta. */
  .gv-root .bap-item { grid-template-columns: 66px minmax(0, 1fr); gap: 8px; padding: 10px 11px; }
  .gv-root .bap-item .vnv-resultado-est, .gv-root .bap-item .bap-donde { display: none; }
  /* El agente sí se queda en pantalla angosta: es lo que más se mira para
     saber de quién es la unidad. Ocupa su propia línea debajo del modelo. */
  .gv-root .bap-item .bap-agente { grid-column: 2; justify-self: start; margin-top: 2px; }
}
@media (max-width: 760px) {
  .gv-root .gv-panel-proceso .per-modal .per-overlay > .per-modal.ret-modal {
    width: calc(96vw / var(--tcg-z, 1)); max-width: none;
  }
}
@media (max-width: 760px) {
  .gv-root .gv-panel-proceso .mp-aviso {
    position: fixed; bottom: 10px; left: 50%; transform: translateX(-50%);
    margin: 0; max-width: calc(92vw / var(--tcg-z, 1));
  }
}
@media (max-width: 760px) {
  /* ── Desplegables de la barra de menú ──────────────────────────────────
     Se anclaban al botón que los abre y crecían según el texto más largo
     que tuvieran adentro ("Departamentos (Tradicional · Autoplan ·
     Consignación)"). Como se alinean por la derecha del botón, todo ese
     ancho se iba para la izquierda y se salía de la pantalla: por eso los
     de Tablas e Informes aparecían cortados.

     Sacándole la posición relativa al envoltorio del botón, el desplegable
     pasa a medirse contra la barra de menú entera, que ocupa el ancho de la
     pantalla. Así queda de borde a borde y no se corta nada. */
  .gv-root .gv-menu-wrap { position: static; }
  /* Los renglones largos bajan de línea en vez de estirar el panel. */
  .gv-root .gv-menu-drop-item,
  .gv-root .gv-menu-drop-head,
  .gv-root .gv-menu-drop-sep { white-space: normal; }

  /* La barra lateral se muestra como una grilla a lo ancho, pero la variable
     de ancho volvía a 172px por una regla plana escrita después. */
  .gv-root { --gv-side-w: 100%; }

  /* ── Accesos del lateral en el celular ─────────────────────────────────
     Tres problemas encadenados, los tres arreglados acá:

     1. Las columnas se armaban con auto-fill, que decide cuántas entran
        según el ancho disponible. Si algo más de la pantalla se desborda,
        el contenedor mide más que la pantalla, entran más columnas de las
        que se ven y las etiquetas quedan aplastadas — hasta el punto de
        partirse en una letra por renglón. Con dos columnas fijas y
        minmax(0, 1fr) el ancho no depende de nada de afuera. */
  .gv-root .gv-side-items { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px; }
  /* La etiqueta "por armar" no puede ensanchar su columna a costa de las otras. */
  .gv-root .gv-side-item-tag { white-space: normal; }

  /* 2. Los divisores con título ("Sumado de lo nuestro") caían adentro de
        una columna y el texto se partía letra por letra: son separadores,
        tienen que ocupar el ancho entero. */
  .gv-root .gv-side-sep { grid-column: 1 / -1; white-space: normal; }

  /* 3. El lateral estaba encerrado en 26vh con su propio desplazamiento:
        una ventanita de dos renglones adentro de una pantalla que no se
        movía, así que el resto de los accesos no había forma de verlos.
        Ahora hay UN solo desplazamiento para todo el módulo: se baja con
        el dedo y detrás del menú aparece el formulario. */
  .gv-root .gv-body { overflow-y: auto; -webkit-overflow-scrolling: touch; }

  /* Los informes se quedan con una pantalla entera y con su propio
     desplazamiento, porque la tabla se mueve para los dos lados. Sin un alto
     asegurado les tocaba lo que sobrara después del lateral, que con la lista
     desplegada era cero: por eso al abrir un informe no se veía nada. */
  .gv-root .gv-main--informe { flex: 0 0 auto; height: 100%; overflow: auto; }
  /* El formulario toma su alto natural para que el desplazamiento de arriba
     llegue hasta el final. Antes esto no pasaba porque el panel de procesos
     comparte la clase de los informes, y los informes SÍ necesitan quedarse
     con su propio desplazamiento: con el lateral ya alto, al formulario le
     quedaba una franja de cero píxeles y no había nada que desplazar. */
  .gv-root .gv-main--panel { flex: 0 0 auto; overflow: visible; display: block; min-height: 0; height: auto; }
  .gv-root .gv-main--panel .gv-panel-proceso { height: auto; min-height: 0; }

  /* El título del grupo queda pegado arriba mientras se baja. Es el botón que
     cierra la lista, así que después de elegir un acceso se pliega de un toque
     y el formulario se queda con toda la pantalla. Sin esto habría que subir
     doce accesos cada vez. */
  .gv-root .gv-side-head {
    position: sticky; top: 0; z-index: 6;
    background: var(--panel, #191d23); border-bottom: 1px solid var(--border, #252d3f);
  }
}
@media (max-width: 760px) {
  .sch-root .sch-titulo { font-size: 17px; }
  .sch-root .sch-acciones { width: 100%; }
  .sch-root .sch-btn { flex: 1 1 auto; justify-content: center; }
  .sch-root .sch-tabla-scroll { max-height: calc(calc(100dvh / var(--tcg-z, 1)) - 330px); }
  .sch-root .sch-alerta-importe { text-align: left; }
}
@media (max-width: 760px) {
  .sch-root .sch-overlay { padding: 8px; }
  .sch-root .sch-modal { max-height: calc(94vh / var(--tcg-z, 1)); }
}
@media (max-width: 720px) {
  .bp-panel { padding: 14px 12px; }
  .bp-grilla { grid-template-columns: 1fr; }
}
@media (max-width: 720px) {
  .mig-modal { width: calc(100vw / var(--tcg-z, 1)); }
  .mig-resumen { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 720px) {
  .abm-modal { width: calc(100vw / var(--tcg-z, 1)); }
  .abm-barra { flex-direction: column; align-items: stretch; }
}
@media (max-width: 720px) {
  .ord-tabla { table-layout: auto; }
  .ord-tabla th:nth-child(5), .ord-tabla td:nth-child(5),
  .ord-tabla th:nth-child(6), .ord-tabla td:nth-child(6) { display: none; }
}
@media (max-width: 720px) {
  .logo-dealer { margin-right: 9px; }
  .logo-dealer img { height: 19px; }
}
/* ==================================================================
   CELULAR — 720 px para abajo
   ------------------------------------------------------------------
   Cuatro cosas rompían en el teléfono:
   · Los modales quedaban centrados con alto máximo: la parte de abajo
     caía fuera de la pantalla y no se llegaba a los botones.
   · Las etiquetas en grilla de dos columnas se achicaban tanto que el
     texto salía en vertical, una letra por renglón («Invisible»).
   · Los botones de la Lista quedaban centrados y de anchos distintos,
     uno debajo del otro, como una escalera.
   · La barra fija de arriba tapaba el encabezado del modal.
   ================================================================== */
@media (max-width: 720px) {
  /* Los modales ocupan la pantalla entera y scrollean de verdad. */
  .per-overlay { padding: 0; align-items: stretch; }
  .per-overlay > .per-modal,
  .per-overlay > .com-modal,
  .per-overlay > .ing-modal,
  .per-overlay > .acc-modal {
    width: 100%; max-width: 100%;
    max-height: calc(100dvh / var(--tcg-z, 1)); height: calc(100dvh / var(--tcg-z, 1));
    margin: 0; border-radius: 0; border-left: 0; border-right: 0;
    display: flex; flex-direction: column;
  }
  /* Encabezado y pie quedan quietos; sólo el cuerpo se mueve. */
  .per-overlay > * > .per-cab {
    position: sticky; top: 0; z-index: 5;
    background: var(--panel, #1b2233);
    border-bottom: 1px solid var(--border, #252d3f);
    padding: 10px 12px;
  }
  .per-overlay > * > .com-cuerpo,
  .per-overlay > * > .vnv-cuerpo {
    flex: 1; min-height: 0; overflow-y: auto; -webkit-overflow-scrolling: touch;
    padding: 10px 12px 22px;
  }
  .per-modal .per-titulo { font-size: 15px; }
  .per-modal .per-sub { font-size: 12px; }

  /* Etiqueta arriba del campo. En dos columnas la etiqueta se comprime
     hasta partir la palabra letra por letra.

     Los «!important» de «flex-direction» y «align-items» son nuevos y
     arreglan un caso que esta regla no alcanzaba: «display» y
     «grid-template-columns» ya los llevaban, pero los otros dos no, y hay
     TRECE reglas de contexto con más clases que les ganaban —
     «.com-modal--ficha .per-campo { flex-direction: row }»,
     «.vna-modal .per-campo», «.pre-cab-edit», «.pre-alta-acc»,
     «.acc-agregar», «.vnv-modal .vnb», «.vnd-campo» y las demás con
     «align-items: center». Resultado: en esas pantallas el campo quedaba
     en flex (por el !important de display) pero en FILA, con la etiqueta
     comprimida al costado en 360px, que es exactamente lo que esta regla
     venía a evitar. No es una decisión nueva: es la misma, aplicada a los
     contextos que se habían quedado afuera.

     El «:not(.per-campo--check)» deja afuera el único caso donde la fila
     es lo correcto: un tilde con su rótulo al lado. */
  .per-campo:not(.per-campo--check),
  .vnv-col .per-campo:not(.per-campo--check),
  .vnv-usado .per-campo:not(.per-campo--check),
  .tnd-campo {
    display: flex !important; flex-direction: column !important;
    align-items: stretch !important;
    grid-template-columns: none !important; gap: 3px;
  }
  .per-campo > span, .tnd-campo > span {
    text-align: left !important; white-space: normal; word-break: normal;
    font-size: 12px;
  }
  .per-campo input, .per-campo select, .tnd-campo input, .tnd-campo select {
    width: 100%; min-width: 0; font-size: 16px; padding: 9px 10px;
  }
  /* 16px evita que el teléfono haga zoom solo al tocar un campo. */

  /* Una sola columna en todo lo que venía en grilla. */
  .com-grid, .vnv-cuerpo, .vnv-cuerpo--2col, .tnd-conf, .asig-columnas,
  .lead-kpis, .vnb-body { grid-template-columns: 1fr !important; display: grid; }
  .vnv-col { min-width: 0; }
  .vn-checks { gap: 10px; }
  .vn-check { flex: 1 1 45%; }

  /* EL ENCABEZADO DE LA LISTA DE USADOS, EN 360px (11/09/2026).
     Medido en Chromium: los cuatro botones uno abajo del otro ocupaban 216px,
     los indicadores 357, y el primer auto empezaba a los 489 de 780. Más de
     media pantalla de encabezado antes del primer dato, en la pantalla que
     más se mira parado al lado de un auto.
     No se saca nada: se acomoda. Los botones van de a dos, las casas en un
     renglón, y los indicadores en una fila que se desliza con el pulgar. */
  /* Con «.lu-acciones» a secas no alcanza: del lado del monitor está escrita
     como «.lu-modulo .lu-acciones», dos clases, y le gana en cualquier ancho.
     Se repite el mismo selector, que es lo único que hace que la del teléfono
     gane. Es el mismo tropiezo del menú de informes. */
  .lu-modulo .lu-acciones, .lu-acciones {
    display: grid; grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 8px; align-items: stretch; padding: 6px 14px;
  }
  .lu-acciones .lu-acc { width: 100%; justify-content: center; padding: 11px 8px; font-size: 12.5px; }
  /* EL SELECTOR DE INFORMES (23/09/2026). Son dos filas de botones —las
     secciones y los informes de la sección— pensadas para un monitor ancho:
     en el teléfono se salían por el costado. Se arrastran de lado, que es lo
     natural con el dedo, y el que está elegido queda a la vista. */
  .inf-selector { max-width: 100%; }
  .inf-sel-fila { flex-wrap: nowrap; overflow-x: auto; -webkit-overflow-scrolling: touch;
    scroll-snap-type: x proximity; padding-bottom: 4px; }
  .inf-sel-fila > button { flex: 0 0 auto; scroll-snap-align: start; }
  .inf-barra, .inf-cab { flex-wrap: wrap; }
  .inf-root .inf-tabla-caja { overflow-x: auto; }
  /* El aviso de guardado y la nota no son botones: ocupan el renglón entero
     y no una celda de la grilla. */
  .lu-acciones .lu-guardado, .lu-acciones .lu-acciones-nota { grid-column: 1 / -1; text-align: center; }
  /* Las tres casas entran holgadas en un renglón: son tres palabras. */
  .lu-casas {
    display: flex; flex-direction: row; align-items: stretch; gap: 6px;
    padding: 6px 14px; overflow-x: auto; scrollbar-width: none;
  }
  .lu-casas::-webkit-scrollbar { display: none; }
  .lu-casas .lu-casa { flex: 1 0 auto; width: auto; justify-content: center; padding: 9px 12px; }
  /* Los indicadores: de cuatro renglones a uno que se arrastra. Se ven los
     dos primeros y el corte del tercero avisa que hay más. */
  .lu-indicadores {
    display: flex; grid-template-columns: none; gap: 8px;
    padding: 0 14px 10px; overflow-x: auto; -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
  }
  .lu-indicadores::-webkit-scrollbar { display: none; }
  .lu-indicadores .lu-ind { flex: 0 0 auto; min-width: 168px; max-width: calc(78vw / var(--tcg-z, 1)); padding: 9px 11px; }

  /* Tablas: que se puedan arrastrar sin romper el resto. */
  .vn-tabla-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; }
  .vn-tabla { min-width: 620px; }

  /* Barras de solapas y filtros: no apiladas en escalera. */
  .per-barra, .tnd-campos, .tnd-chips { gap: 6px; }
  .per-barra .per-buscar { flex: 1 1 100%; }

  /* El pie de acciones del modal queda a mano, sin tener que buscarlo. */
  .com-acciones, .per-acciones, .tnd-guardar-fila {
    position: sticky; bottom: 0; z-index: 5;
    background: var(--panel, #1b2233);
    border-top: 1px solid var(--border, #252d3f);
    padding: 9px 0; margin: 0;
  }
  .com-acciones .lu-btn, .per-acciones .lu-btn { flex: 1 1 auto; }

  /* Menú de informes: la lista y el submenú, uno abajo del otro. */
}
@media (max-width: 720px) {
  .vn-checks--fila { flex-wrap: wrap; gap: 12px; }
}
@media (max-width: 720px) { .tcg-version { font-size: 12px; padding: 3px 8px; left: 6px; bottom: 6px; } }
/* Con el armazón el marcador se corre a la derecha: abajo a la izquierda
   están los concesionarios y los tapaba. */
.app-shell:has(.tcg-app) .tcg-version { left: auto; right: 8px; bottom: 4px; opacity: 1; }
/* La cabecera del tablero sin su marca: queda sólo la fila de controles
   —los años, exportar, compartir, ajustes— que sí son de la pantalla. */
.header--sin-marca { padding-top: 6px; padding-bottom: 6px; }
.header--sin-marca .brandline { min-height: 0; }
.app-shell:has(.tcg-app) .tcg-version:hover { opacity: 1; }
/* ═══════════════════════════════════════════════════════════════════════
   EL ARMAZÓN EN EL TELÉFONO · Galaxy S23 = 360 × 780
   Nada de esto existe arriba de 700px. Va en la escalera y no al final:
   una regla suelta después le gana a todo bloque de ancho, y hay una prueba
   que ahora lo vigila.
   Se esconden la columna, las solapas y la franja entera; el título sube al
   renglón de arriba y todo lo que se toca baja a la barra del pulgar.
   ═══════════════════════════════════════════════════════════════════════ */
@media (max-width: 700px) {
  /* La franja completa afuera. Tiene saludo, buscador, sesión, Mi clave,
     Cerrar, ☀ y ⚙: en 360px se apilan y comen 300 de los 730 útiles. */
  .tcg-franja { display: none; }
  .tcg-sect { display: none; }
  .tcg-side { display: none; }
  .tcg-banda-casa { flex: 0 0 auto; padding: 0 2px 0 8px; }
  .tcg-banda-casa::after { display: none; }
  .tcg-casa-sel img { height: 19px; max-width: 96px; }
  /* El logo de TCG no entra al lado del título: en el teléfono la identidad
     que importa es la de la casa. Se vuelve desde la barra de abajo. */
  .tcg-logo { display: none; }
  /* En el teléfono el logo de TCG no se dibuja, así que el renglón no
     necesita los 52px del monitor. */
  .tcg-top-1 { min-height: 46px; padding-right: 2px; }

  /* El título ocupa el hueco. Con una pantalla abierta es el botón de volver. */
  .tcg-top-tit { display: flex; align-items: center; gap: 4px; flex: 1; min-width: 0;
    background: none; border: 0; color: var(--text, #ecf0f4); font: inherit;
    font-size: 14px; font-weight: 600; padding: 8px 4px; border-radius: 6px;
    text-align: left; cursor: pointer; }
  .tcg-top-tit:disabled { cursor: default; }
  .tcg-top-tit span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .tcg-top-atras { font-size: 19px; line-height: 1; color: var(--text);
    flex: 0 0 auto; }
  .tcg-top-mas { display: block; background: none; border: 0; color: var(--text);
    font-size: 18px; line-height: 1; padding: 10px 11px; border-radius: 6px; cursor: pointer;
    flex: 0 0 auto; }

  /* El lienzo se queda con todo lo que sobra. */
  .tcg-cuerpo { flex-direction: column; }
  .tcg-main { min-height: 0; }
  .tcg-lienzo { padding: 12px 10px; }

  /* ── La barra del pulgar ──────────────────────────────────────────
     48px de alto mínimo por botón: menos que eso el dedo erra. Y la
     safe-area va acá adentro, no en una regla suelta al final. */
  .tcg-pulgar { display: flex; flex: 0 0 auto; background: var(--panel, #161c29);
    border-top: 1px solid var(--border, #252d3f);
    padding-bottom: env(safe-area-inset-bottom); }
  .tcg-pulgar button { flex: 1; min-height: 52px; background: none; border: 0;
    color: var(--text); font: inherit; font-size: 12px;
    letter-spacing: .03em; cursor: pointer;
    display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px; }
  .tcg-pulgar button b { font-size: 17px; font-weight: 400; line-height: 1; }
  .tcg-pulgar button[aria-pressed="true"] { color: var(--text); }
  .tcg-pulgar button:active { background: rgba(255,255,255,.07); }

  /* ── La hoja que sube ─────────────────────────────────────────────
     Arranca 24px abajo del borde: deja ver que hay algo atrás, así se
     entiende que se cierra tocando afuera. */
  .tcg-velo { display: block; position: fixed; inset: 0; background: rgba(0,0,0,.5); z-index: 60; }
  .tcg-hoja { display: flex; position: fixed; left: 0; right: 0; bottom: 0; top: 24px;
    z-index: 61; flex-direction: column; background: var(--panel, #161c29);
    border-top: 1px solid var(--border, #252d3f); border-radius: 16px 16px 0 0; }
  .tcg-hoja-asa { padding: 9px 0 5px; display: grid; place-items: center; flex: 0 0 auto; }
  .tcg-hoja-asa span { width: 38px; height: 4px; border-radius: 999px; background: var(--panel, #3a4152); }
  .tcg-hoja-cab { display: flex; align-items: center; gap: 10px; padding: 2px 12px 10px;
    flex: 0 0 auto; }
  .tcg-hoja-cab b { flex: 1; min-width: 0; font-size: 15px; font-weight: 600;
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .tcg-hoja-cab button { background: none; border: 0; color: var(--text);
    font-size: 17px; padding: 6px 10px; border-radius: 6px; cursor: pointer; }
  .tcg-hoja-cuerpo { flex: 1; min-height: 0; overflow-y: auto;
    padding: 0 8px calc(14px + env(safe-area-inset-bottom)); }
  .tcg-hoja-it { display: flex; align-items: center; gap: 12px; width: 100%; height: 48px;
    background: transparent; border: 0; border-radius: 10px; color: var(--text, #ecf0f4);
    font: inherit; font-size: 14px; text-align: left; cursor: pointer; padding: 0 12px;
    margin-bottom: 2px; }
  .tcg-hoja-it:active { background: rgba(255,255,255,.08); }
  .tcg-hoja-it:disabled { opacity: .4; cursor: default; }
  .tcg-hoja-it i { font-style: normal; font-size: 16px; opacity: 1; width: 20px;
    text-align: center; flex: 0 0 auto; }
  .tcg-hoja-it span { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis;
    white-space: nowrap; }
  .tcg-hoja-it em { font-style: normal; color: var(--text); font-size: 12px;
    flex: 0 0 auto; }
  .tcg-hoja-it--on { font-weight: 600;
    background: color-mix(in srgb, var(--casa, #f2c200) 14%, transparent);
    box-shadow: inset 3px 0 0 var(--casa, #f2c200); }
  .tcg-hoja-buscar { width: calc(100% - 4px); margin: 0 2px 8px; height: 44px;
    background: var(--bg, #0e1320); border: 1px solid var(--border, #252d3f);
    border-radius: 10px; padding: 0 12px; color: var(--text, #ecf0f4); font: inherit;
    font-size: 16px; outline: none; }
  .tcg-hoja-vacio { color: var(--text); font-size: 12.5px; padding: 18px 12px; }

  .cc-selector-btn { min-width: 0; flex: 1 1 100%; }
  .cc-pantalla { min-height: 0; }
}
@media (max-width: 700px) {
  /* El envoltorio se apila: el título arriba y los botones abajo, en una
     fila que se desliza. En 360px el título y los años no entran al lado. */
  .tcg-envoltura {
    flex-direction: column; align-items: stretch; gap: 8px;
    padding: 10px 12px; border-radius: 10px; margin-bottom: 10px;
  }
  .tcg-envoltura .tcg-env-tit h1 { font-size: 17px; }
  .tcg-envoltura + .dealer-switch { padding: 8px 10px; margin-bottom: 10px; }
  .tcg-env-acc { overflow-x: auto; scrollbar-width: none; flex-wrap: nowrap; }
  .tcg-env-acc > * { flex: 0 0 auto; }
  .tcg-env-acc::-webkit-scrollbar { display: none; }
  /* Los márgenes no se suman tres veces. Medido a 360px: el lienzo pone 10px
     de padding, el pad de adentro otros 18 y cada panel 8 más — treinta y
     seis por lado, o sea el 20% de la pantalla gastado en aire antes de que
     empiece el dato. En un monitor eso no se nota; acá es una quinta parte
     del ancho. El aire lo pone UNA capa, la de adentro. */
  .tcg-lienzo { padding-left: 0; padding-right: 0; }
  .tcg-lienzo-pad { padding-left: 10px; padding-right: 10px; }

  /* ── En qué bloque estoy ─────────────────────────────────────────────
     Ventas de 0km y de usados tienen veinticuatro campos repartidos en
     cuatro bloques. En el monitor van en tres columnas y se ven los cuatro
     de una; en el teléfono quedan uno abajo del otro, y para cuando llegás
     al campo quince ya no sabés si estás en «El cliente» o en «La plata».
     La cabecera de cada bloque se queda pegada arriba mientras se recorre y
     la empuja la que sigue, como los meses en una agenda. */
  .vnv-modal .vnb-cab {
    position: sticky; top: 0; z-index: 4;
    border-radius: 0;
  }
  /* El cuerpo del bloque cede el desplazamiento: si cada uno se desplaza por
     su cuenta, la cabecera de arriba nunca llega a pegarse. */
  .vnv-modal .vnb-body { overflow: visible; }

  /* ── Las listas de los modales se deslizan de costado ───────────────
     En la lista de presupuestos la columna de acciones se comprimía a unos
     cincuenta píxeles y sus seis botones caían uno por renglón: la fila
     medía cuatrocientos de alto para mostrar un registro.
     La tabla pasa a ser su propia caja con desplazamiento horizontal —lo
     mismo que ya se hizo con la de ítems del peritaje— y las acciones dejan
     de encogerse. */
  .tcg-lienzo .per-overlay .per-modal .com-lista,
  .tcg-lienzo .per-overlay .per-modal .lc-table {
    display: block; overflow-x: auto; max-width: 100%; scrollbar-width: thin;
  }
  /* La celda pide el ancho de sus botones y no cede: «width: 1%» la
     comprimía todavía más y quedaban seis renglones. Con la tabla
     deslizándose, pedir espacio ya no rompe nada. */
  .tcg-lienzo .per-overlay .per-modal .com-lista { width: max-content; min-width: 100%; }
  .com-lista-acciones { white-space: nowrap; }
  .com-lista-acciones > * { flex: 0 0 auto; }

  /* ── El buscador de ventas: opaco, y las consultas compactas ────────
     Tres cosas que se veían en el teléfono y son la misma pieza:

     · El bloque quedaba VELADO, con el formulario pasándose por detrás. Va
       pegado arriba mientras se recorre, y sin fondo propio lo que hay atrás
       se transparenta. Al tope se veía bien; scrolleando, no.
     · Los cuatro botones de consulta ocupaban un renglón cada uno. En el
       monitor viven adentro del buscador, en una fila.
     · El pie traía «min-width: 372px» —y 440 y 480 en otras reglas— pensado
       para que los botones cayeran siempre en el mismo punto del escritorio.
       En 384px eso empuja «Cargar venta» fuera del borde izquierdo. */
  .vnv-buscador, .vnv-buscador.vnvb-uni {
    position: sticky; top: 0; z-index: 6;
    background: var(--panel, #1b2233);
    /* Y si la franja se pinta con el PANEL, la tinta de adentro es la del
       panel. Toda la barra usaba «--vnv-marca-txt», que es la tinta que va
       sobre el color PLENO de la casa: blanca en Vesubio y Ginza, casi
       negra en Giorgi. Sobre el panel eso da, medido: 1,12 de contraste en
       Vesubio y Ginza con tema claro, y 1,10 en Giorgi con tema oscuro. El
       mínimo legible es 4,5. Reportado como «el buscador sale velado».
       La franja redefine la tinta y todo lo de adentro la hereda. */
    --vnv-marca-txt: var(--text, #ecf0f4);
  }
  /* La pastilla activa sí se rellena con el color de la casa: ahí la tinta
     que corresponde es el par de esa casa, como en el resto del modal. */
  .vnv-buscador .vnvb-pill--soltar,
  .vnv-buscador .vnvb-pill.activa {
    background: var(--vnv-marca, #6c7684);
    color: var(--vnvb-sobre-marca, #ffffff) !important;
    border-color: var(--vnv-marca, #6c7684);
  }
  /* Las consultas, en una fila que envuelve y con letra de renglón, no de
     botón principal: son atajos, no la acción de la pantalla. */
  /* Rótulo corto en el teléfono. «Consultar ventas · Por cliente · Por
     agente · Unidades sin interno» son más de sesenta caracteres: no entran
     en un renglón de 384px por más que se achique la letra, y achicándola
     dejan de leerse. El corto dice lo mismo con la mitad. */
  .vnvb-largo { display: none; }
  .vnvb-corto { display: inline; }
  /* Y los atajos, del tamaño de un renglón de texto: son atajos, no la
     acción de la pantalla. */
  .vnv-buscador .vnvb-pill,
  .vnv-buscador .vnvb-pill--doble > button {
    height: 28px; padding: 0 8px; font-size: 11px;
  }

  /* En COLUMNA, y no en fila con envoltura. Con fila hubo dos intentos
     fallidos: el contenedor de los atajos se quedaba en 166px —lo que ocupa
     su hijo más ancho— y con «flex: 1 1 100%» colapsaba a cero. En columna
     cada parte pide su renglón sin pelear: la caja arriba, los atajos abajo
     compartiendo el suyo. */
  .vnv-buscador, .vnv-buscador.vnvb-uni {
    flex-direction: column; align-items: stretch; flex-wrap: nowrap;
  }
  /* Medido a 360px: los cuatro pedían 342px y había 332, así que el último
     caía a un segundo renglón. «Soltar unidad» era el más ancho y el único
     sin rótulo corto; con «Soltar» sobran veinte píxeles.
     El «!important» le contesta al comodín «[class*="-acciones"] {
     flex-wrap: wrap !important }» del bloque de 640px, que le pega a esta
     barra sin nombrarla. Sin él la regla se aplicaba entera MENOS el
     flex-wrap. Y «max-width» es lo que permite que cedan: sin él la barra se
     mide por su contenido y con nowrap se saldría de la pantalla. */
  .vnv-buscador > .vnvb-acciones,
  .vnv-buscador.vnvb-uni > .vnvb-acciones {
    display: flex; flex-direction: row; flex-wrap: nowrap !important; gap: 4px;
    width: auto; min-width: 0; max-width: 100%;
  }
  .vnv-buscador .vnvb-acciones > .vnvb-pill,
  .vnv-buscador .vnvb-acciones > .vnvb-pill--doble {
    flex: 0 1 auto; height: 30px; min-width: 0; overflow: hidden;
  }

  .vnvb-acciones .vnvb-pill { padding: 0 9px; font-size: 11px; }
  .vnvb-acciones .vnvb-pill--doble > button { padding: 0 8px; font-size: 11px; }

  /* ── El buscador se lee en las TRES casas ───────────────────────────
     La cápsula y las pastillas tomaban la tinta de «--vnv-marca-txt», que
     es el color para escribir ENCIMA del color de la casa. En el monitor
     está bien: ahí el buscador vive adentro de la franja de color. En el
     teléfono no: la regla de más arriba le pone «background: var(--panel)»
     —el panel claro— y entonces la tinta de Vesubio y de Ginza, que es
     BLANCA, quedaba blanco sobre blanco. Jorge Giorgi se salvaba de
     casualidad, porque su tinta es casi negra.
     Medido con getComputedStyle a 360px: Vesubio y Ginza daban 1,00 de
     contraste —el mínimo legible es 4,5— y Jorge Giorgi 17,46. Por eso el
     buscador «salía tapado» en dos casas y en una no.
     Acá la tinta sale de lo que hay DETRÁS, que es el panel, no la casa.
     El color de la casa se queda donde sirve: el filo de la cápsula. */
  .tcg-lienzo .per-overlay .per-modal > .per-cab .vnvb-caja,
  .vnv-fijo .vnvb-caja {
    border-color: color-mix(in srgb, var(--vnv-marca, #6c7684) 55%, transparent);
    color: var(--text, #131824);
  }
  .tcg-lienzo .per-overlay .per-modal > .per-cab .vnvb-caja .bap-input,
  .vnv-fijo .vnvb-caja .bap-input {
    color: var(--text, #131824) !important;
  }
  .tcg-lienzo .per-overlay .per-modal > .per-cab .vnvb-caja .bap-input::placeholder,
  .vnv-fijo .vnvb-caja .bap-input::placeholder {
    color: var(--text) !important; opacity: 1;
  }
  /* «!important» y la cadena entera: la cabecera declara su tinta con
     «!important» y las pastillas la HEREDABAN por una regla comodín
     —«.per-modal > .per-cab :not(input):not(select)…»— que con sus cuatro
     «:not» pesa más que dos clases. Esa tinta es la correcta PARA LA
     FRANJA, pero las pastillas no están sobre la franja: están sobre la
     cápsula clara. Verificado con el CSSOM, no leyendo el código. */
  .gv-root .gv-panel-proceso > .per-overlay > .per-modal > .per-cab .vnvb-pill,
  .gv-root .gv-panel-proceso > .per-overlay > .per-modal > .per-cab .vnvb-pill--doble > button,
  .tcg-lienzo .per-overlay .per-modal > .per-cab .vnvb-pill,
  .tcg-lienzo .per-overlay .per-modal > .per-cab .vnvb-pill--doble,
  .tcg-lienzo .per-overlay .per-modal > .per-cab .vnvb-pill--doble > button,
  .vnv-fijo .vnvb-pill,
  .vnv-fijo .vnvb-pill--doble,
  .vnv-fijo .vnvb-pill--doble > button {
    color: var(--text, #131824) !important;
    border-color: color-mix(in srgb, var(--vnv-marca, #6c7684) 55%, transparent) !important;
  }
  .tcg-lienzo .per-overlay .per-modal > .per-cab .vnvb-pill--doble > button,
  .vnv-fijo .vnvb-pill--doble > button { border-color: transparent !important; }
  .tcg-lienzo .per-overlay .per-modal > .per-cab .vnvb-pill--doble > button + button,
  .vnv-fijo .vnvb-pill--doble > button + button {
    border-left: 1px solid color-mix(in srgb, var(--vnv-marca, #6c7684) 45%, transparent) !important;
  }
  /* «Soltar» se distingue por el RELLENO, no por la tinta. Había cuatro
     reglas peleándose por su color —una lo pintaba del color de la casa
     sobre fondo del color de la casa, y así quedaba amarillo sobre
     amarillo, invisible en las tres— así que acá se fija una sola vez y
     con la cadena entera. Un velo del color de la casa alcanza para que se
     note que es el que deshace, y la tinta sigue siendo la del panel, que
     es la única que se lee en Jorge Giorgi, Vesubio y Ginza por igual. */
  /* La cadena de «.gv-root .gv-panel-proceso» va porque desde Gestión de
     Ventas el modal cuelga de ahí y esa regla pesa SEIS clases: le ganaba
     a las cinco de la cadena del lienzo. Verificado con el CSSOM. */
  .gv-root .gv-panel-proceso > .per-overlay > .per-modal > .per-cab .vnvb-pill--soltar,
  .gv-root .gv-panel-proceso > .per-overlay > .per-modal > .per-cab .vnvb-pill.activa,
  .tcg-lienzo .per-overlay .per-modal > .per-cab .vnvb-pill--soltar,
  .tcg-lienzo .per-overlay .per-modal > .per-cab .vnvb-pill.activa,
  .vnv-fijo .vnvb-pill--soltar,
  .vnv-fijo .vnvb-pill.activa {
    background: color-mix(in srgb, var(--vnv-marca, #6c7684) 20%, transparent) !important;
    color: var(--text, #131824) !important;
    border-color: var(--vnv-marca, #6c7684) !important;
  }
  /* El pie deja de reservar un ancho de escritorio y envuelve. */
  .vnv-pie-acciones,
  .vnv-fijo .vnv-pie-acciones {
    min-width: 0 !important; flex: 1 1 100%; flex-wrap: wrap;
    justify-content: stretch;
  }
  .vnv-pie-acciones > * { flex: 1 1 auto; min-width: 0; }

  /* ── El buscador de unidad, a todo el ancho ─────────────────────────
     Medido a 384px en Ventas de usado: la caja de búsqueda quedaba en 221px
     y centrada, con «Stock» y «Consigna» apilados uno por renglón debajo.
     Es el primer control de la pantalla —lo primero que se toca al vender— y
     estaba usando la mitad del ancho disponible.
     La caja toma todo el renglón y las pastillas van en una fila abajo. */
  /* En fila con envoltura, no en columna: en columna cada pastilla se queda
     con un renglón para ella sola, que es peor que el problema. La caja pide
     el renglón entero y las pastillas comparten el de abajo. */
  /* «flex-direction: row» explícito: el bloque de 980px lo pone en columna y
     eso deja cada pastilla en su propio renglón. No alcanza con pedir wrap:
     hay que deshacer la columna. */
  /* La columna la pone el bloque del buscador de ventas, más abajo. */
  .vnv-buscador { gap: 7px; }
  /* «0 0 100%» y no «1 1 100%»: con shrink en 1 la caja igual se achica para
     dejarles lugar a las pastillas en su mismo renglón, y vuelve a quedar en
     166px. Lo que se quiere es que pida el renglón entero y las empuje
     abajo. */
  .vnv-buscador > .vnvb-caja,
  .vnv-buscador.vnvb-uni > .vnvb-caja { flex: 0 0 100%; width: 100%; min-width: 0; }
  .vnv-buscador .vnvb-pill { flex: 0 0 auto; }

  /* El encabezado de cada bloque llega hasta donde llegan sus campos: iba
     sangrado de un lado y no del otro, y la franja parecía suelta. */
  .vnb-cab, .vnb-body { margin-left: 0; margin-right: 0; }

  /* ── La lista fluye, la pantalla se desplaza ────────────────────────
     La lista traía desplazamiento propio: adentro del modal del peritaje eso
     está bien, porque el modal es una caja de alto conocido. En una pantalla
     normal no: la lista queda encajonada mostrando cinco filas, con un
     desplazamiento adentro de otro, y el dedo no sabe a cuál le habla — no se
     movía ni la lista ni la página.
     Acá la lista crece con lo que tiene y se desplaza la pantalla, que es lo
     que un teléfono espera. La barra y el renglón de foco quedan pegados
     arriba mientras se recorre, así no hay que volver para cambiar de
     columna. */
  .lcel { display: block; flex: none; }
  .lcel-lista { overflow: visible; max-height: none; flex: none; }
  .lcel-barra, .lcel-foco {
    position: sticky; z-index: 5; background: var(--bg, #131824);
  }
  .lcel-barra { top: 0; }
  .lcel-foco { top: 46px; }
  .lcel-tot { position: sticky; bottom: 0; z-index: 5; }

  /* ── Los 214px del costado ─────────────────────────────────────────
     Éste era el problema de verdad, y no era desborde: por eso taparlo con
     «overflow-x: hidden» no cambió nada.
     Con una pantalla abierta, el contenido viejo se corre para dejarle lugar
     a la columna lateral: «padding: … 0 0 214px». Pero en el teléfono la
     columna está ESCONDIDA —la reemplaza la barra del pulgar— y el hueco
     queda igual. En una ventana de 384px eso deja 170 para trabajar: media
     pantalla negra a la izquierda y todo apretado contra el borde derecho.
     Justo lo que se veía en Asignación.
     El alto de arriba sí hace falta: la barra de arriba sigue estando. */
  .app-shell:has(.tcg-app--solo) { padding-left: 0 !important; }

  /* Ninguna pantalla desborda de costado. En Asignación, algo adentro medía
     más que los 360px y el navegador daba desplazamiento horizontal a TODA
     la pantalla: el panel quedaba corrido y se veía media pantalla vacía a la
     izquierda con el contenido asomando por la derecha.
     No se busca al culpable uno por uno —hay ciento ocho pantallas y mañana
     aparece otro—: se corta acá. Lo que de verdad necesite deslizarse de
     costado, como la tabla de ítems del peritaje, tiene su propio
     desplazamiento adentro y no depende de éste.
     «min-width: 0» va junto: sin él, un hijo de un contenedor flex se niega
     a achicarse por debajo de su contenido y empuja igual, aunque el padre
     tenga overflow. Es la causa clásica de este síntoma. */
  .tcg-lienzo, .tcg-lienzo-pad { overflow-x: hidden; min-width: 0; }
  .tcg-lienzo-pad > * { max-width: 100%; min-width: 0; }
  .asg-panel, .per-panel, .lu-panel, .sc-panel, .inf-panel { padding-left: 0; padding-right: 0; }
  .asg-reporte { padding-left: 10px; padding-right: 10px; }

  /* La chapa de la versión se esconde: abajo de 700px aparece la barra del
     pulgar y la chapa se dibujaba ENCIMA de dos de sus cuatro puertas
     —medido a 360×780: la chapa en x 269-352, «Buscar» en 180-270 y
     «Recientes» en 270-360—. No roba clics (tiene pointer-events: none),
     pero tapa los rótulos, que es lo único que dice para qué sirve cada
     puerta. El número de versión se mira en el monitor al volver de
     publicar; en el teléfono no hace falta. Es la misma decisión que ya
     rige con un modal abierto, sólo que por otra razón. */
  .tcg-version { display: none; }
  .lu-acciones { flex-wrap: wrap; } }
@media (max-width: 700px) {
  .vista-card { flex: 1 1 100%; max-width: none; }
}
@media (max-width: 700px) {
  .ent-marca img { width: 170px; }
  .ent-pad { grid-template-columns: repeat(3, 74px); }
  .ent-fila .vista-card { flex: 1 1 100%; max-width: 340px; }
}
/* Al exportar a PDF (Ctrl+P / el botón de arriba), que se vea como un
   documento normal: fondo blanco, sin los botones de navegación, y cada
   concesionario en su propia hoja. */
/* ==================================================================
   VISTA CELULAR — que ningún bloque quede cortado
   ------------------------------------------------------------------
   La causa de fondo no eran anchos grandes sino que los hijos de las
   grillas y de los flex no podían achicarse: por defecto un elemento
   de grilla no baja del ancho de su contenido, así que un texto largo,
   un número monoespaciado o una tabla adentro empujaban la tarjeta más
   allá del ancho de la pantalla y el bloque aparecía cortado.
   Este bloque va al final del CSS para ganarle a las reglas de cada
   pantalla, que se inyectan después de las generales.
   ================================================================== */
/* ── Pantalla de ingreso en celular ────────────────────────────────────
   A lo alto no entra con las medidas de escritorio: el panel se estiraba y
   quedaba desproporcionado. Y los botones de tema, fijos arriba a la
   derecha, se montaban sobre el borde de la tarjeta. */
/* ── Modo claro de la navegación ────────────────────────────────────────
   No es el oscuro invertido. El amarillo de Renault como LETRA sobre blanco
   da 1,68:1 —ilegible—, así que en claro el texto usa la variante fuerte y
   el pleno queda para rellenos con tinta oscura encima. Medido en las tres
   casas: Giorgi 10,4 · Vesubio 8,2 · Ginza 5,9. */
.tcg-claro {
  --bg: #eef1f6; --panel: #ffffff; --panel-2: #f4f6fa; --panel-3: #eaeef5; --border: #d6dbe4;
  /* NEGRA, NO GRIS (Ramiro). La tinta apagada del claro era «#5c6474», un
     gris medio que sobre blanco se lee con esfuerzo. Baja a casi negro: el
     apagado sigue distinguiéndose del principal, pero se lee. */
  --text: #000000; --text-muted: #000000;
  --muted: #000000;
  --accent-blue: #2563eb; --green: #1e7a3c; --red: #c0392b; --text-ind: #000000;
  /* El tono más hondo, para los campos escribibles: en oscuro es casi negro,
     en claro tiene que ser un gris muy suave, no otro blanco, o el campo se
     pierde dentro de la tarjeta. */
  --panel-3: #e9edf4;
  /* EL VELO, DEL LADO QUE CORRESPONDA (14/09/2026, Ramiro: «el modo claro no
     funciona en planes»). Medio sector estaba pintado con blanco translúcido
     —rgba(255,255,255,.03)— para separar un bloque del panel. Sobre el panel
     oscuro eso aclara y se ve; sobre el panel blanco no hace nada, y por eso
     en claro los bloques desaparecían. El velo pasa a ser una variable: en
     oscuro aclara, en claro oscurece. */
  --lavado: rgba(16,24,40,.04);
  --lavado-2: rgba(16,24,40,.07);
  --lavado-3: rgba(16,24,40,.10);
  /* SE PINTA A SÍ MISMO, COMO «.mo-claro» (14/09/2026, pista de Ramiro: «mirá
     cómo sí podés ponerle modo claro al modal y copiá la idea»).
     Hasta acá este bloque sólo cambiaba las variables, y eso alcanza para lo
     que las usa; lo que se pinta con un color propio se quedaba oscuro y la
     pantalla salía a medias. El modal claro no tiene ese problema porque,
     además de las variables, se pinta él: fondo y tinta en el propio bloque.
     Se copia eso. */
  color: var(--text);
}
/* El fondo lo pinta el armazón de AFUERA. En «.tcg-app» no puede ir: cuando
   hay una pantalla abierta ese armazón es una capa fija transparente y el
   contenido se dibuja debajo, así que pintarla deja la pantalla en blanco.
   Pasó, y estaba avisado en el comentario de «.tcg-app--solo». */
.app-shell.tcg-claro { background: var(--bg); color: var(--text); }
/* MODO CLARO — barras y bloques con acento, no fondo macizo (19/09/2026).
   Muchas barras de sección usan el color de marca de fondo entero; en claro
   (y con marcas claras como el amarillo de Renault) quedan ilegibles. En
   claro pasan a fondo blanco con una línea del color de marca a la izquierda
   y letra negra: el color queda como acento, se lee, y da vida sin cargar. */
.tcg-claro .tnd-seccion,
.tcg-claro .sus-pantalla > .tnd-seccion {
  background: #fff !important;
  color: #000 !important;
  border: 1px solid var(--border);
  border-left: 4px solid var(--vnv-marca, var(--accent-amber));
  display: block;
}
/* Barras de encabezado de bloque (títulos de sección azules/amarillos que
   ocupan todo el ancho): mismo tratamiento. */
.tcg-claro .sus-casa,
.tcg-claro .cip-bloque-tit,
.tcg-claro .sc-bloque-tit,
.tcg-claro .bap-cabecera {
  background: #fff !important;
  color: #000 !important;
  border: 1px solid var(--border);
  border-top: 3px solid var(--vnv-marca, var(--accent-blue));
}
.tcg-claro .sus-casa h3, .tcg-claro .sus-casa p { color: #000 !important; }
/* EL ENCABEZADO Y EL PIE, DEL COLOR DE LA CASA TAMBIÉN EN CLARO (23/09/2026,
   Ramiro). Estaban en blanco con una línea de marca: se perdía de qué casa es
   la pantalla y el logo blanco desaparecía sobre el fondo. Ahora la banda es
   del color de la casa en los dos modos, con su tinta —blanca en Vesubio y
   Ginza, oscura en Giorgi— y el logo que corresponde a cada una. */
.tcg-claro .per-cab, .tcg-claro .com-cab, .tcg-claro .mo-cab,
.tcg-claro .vnv-cab, .tcg-claro .asg-cab,
.tcg-claro .per-pie, .tcg-claro .com-pie, .tcg-claro .vnv-pie {
  background: var(--vnv-marca, var(--accent-blue)) !important;
  color: var(--vnv-marca-txt, #ffffff) !important;
  border-bottom: 0;
}
.tcg-claro .per-cab .per-titulo, .tcg-claro .per-cab .per-sub,
/* EL DESPLEGABLE DEL BUSCADOR QUEDA AFUERA (24/09/2026, Ramiro). El buscador
   de Ventas vive DENTRO de la franja del encabezado, y su lista de resultados
   cuelga de ahí. Esta regla le ponía a todo lo de adentro la tinta de la
   franja —blanca en Vesubio y Ginza— y con «!important»: sobre el desplegable,
   que es blanco, quedaba blanco sobre blanco y no se veía nada. La lista tiene
   su propio fondo y su propia tinta, así que se la exceptúa, igual que ya se
   hacía en la regla gemela de más arriba. */
/* Y los campos tampoco: tienen fondo propio. El «Origen» de Entrega de
   unidades salía con letra blanca sobre el desplegable blanco, igual que el
   buscador. La regla gemela de más arriba ya los exceptuaba; a esta le
   faltaba. (24/09/2026, Ramiro) */
.tcg-claro .per-cab *:not(input):not(select):not(textarea):not(.bap-lista):not(.bap-lista *),
.tcg-claro .com-cab *, .tcg-claro .mo-cab *,
.tcg-claro .vnv-cab *, .tcg-claro .asg-cab *,
.tcg-claro .per-pie *, .tcg-claro .com-pie *, .tcg-claro .vnv-pie * {
  color: var(--vnv-marca-txt, #ffffff) !important;
}
/* Los botones que viven en esas bandas, con el contraste dado vuelta. */
.tcg-claro .per-cab .lu-btn, .tcg-claro .per-pie .lu-btn,
.tcg-claro .com-cab .lu-btn, .tcg-claro .com-pie .lu-btn {
  border-color: color-mix(in srgb, var(--vnv-marca-txt, #fff) 55%, transparent) !important;
  background: transparent !important;
}
.tcg-claro .per-cab .lu-btn--accion, .tcg-claro .per-pie .lu-btn--accion,
.tcg-claro .com-cab .lu-btn--accion, .tcg-claro .com-pie .lu-btn--accion {
  background: var(--vnv-marca-txt, #fff) !important;
  color: var(--vnv-marca-fuerte, var(--vnv-marca, #0b4f96)) !important;
  border-color: transparent !important;
}
/* Los títulos de bloque en azul fuerte de Ventas: barra clara con acento. */
.tcg-claro .vn-bloque-tit, .tcg-claro .vnv-bloque-tit, .tcg-claro .asg-bloque-tit,
.tcg-claro .sus-bloque-tit, .tcg-claro .cip-seccion, .tcg-claro .per-seccion,
.tcg-claro .pvx-tit, .tcg-claro .cpb-editor-tit, .tcg-claro .cjs-tit,
.tcg-claro .ac-tit, .tcg-claro .sc-tit {
  background: color-mix(in srgb, var(--vnv-marca, #0b4f96) 10%, #ffffff) !important;
  color: #000 !important;
  border-left: 4px solid var(--vnv-marca, var(--accent-blue));
  padding: 6px 10px; border-radius: 6px;
}
/* Botón de acción negro sobre negro -> con marca y letra visible. */
.tcg-claro .lu-btn--accion {
  background: var(--vnv-marca, var(--accent-blue)) !important;
  color: var(--vnv-marca-txt, #fff) !important;
  border: 1px solid var(--border-fuerte, #b9c2d0) !important;
}
/* LA FRANJA DE ABAJO, EN CLARO (corregido el 24/09/2026, Ramiro).
   Esta regla es vieja: dejaba el pie gris claro. Arriba, el 23/09, se decidió
   que en claro la cabecera Y el pie van del color de la casa, y se escribió
   la regla que lo hace... pero ESTA queda DESPUÉS en la hoja y también lleva
   «!important», así que ganaba y el pie seguía saliendo gris en TODOS los
   modales. Por eso el pie «sin color» aparecía una y otra vez en pantallas
   que ya se habían arreglado. Se le sacan «per-pie» y «com-pie», que ya los
   atiende la regla del color de la casa; queda sólo «sus-pie», que no está
   en aquella y sí quiere el gris. */
.tcg-claro .sus-pie {
  background: #eef2f8 !important; color: #000 !important;
  border-top: 1px solid var(--border) !important;
}
.tcg-claro .sus-pie * { color: #000 !important; }
/* Más barras de título con color de marca de fondo (19/09/2026): en claro,
   fondo suave con la marca de borde y letra negra, para que se lean
   siempre —sobre todo con la marca amarilla de Renault. */
.tcg-claro .prog-grupo-tit, .tcg-claro .pnl-titulo, .tcg-claro .gu-grupo-tit,
.tcg-claro .lu-grupo-tit, .tcg-claro .sc-grupo-tit, .tcg-claro .vnb-cab {
  background: #eef2f8 !important; color: #000 !important;
  border-left: 4px solid var(--vnv-marca, var(--accent-blue)) !important;
}
.tcg-claro .vnb-cab h4 { color: #000 !important; }
/* Botones/píldoras seleccionadas con marca: en claro, borde de marca y
   fondo claro si la marca es muy clara (amarillo); si no, se deja. */
.tcg-claro .ent-lados button.on {
  background: var(--vnv-marca, var(--accent-blue)) !important;
  color: var(--vnv-marca-txt, #fff) !important;
  border: 1px solid var(--border-fuerte, #b9c2d0) !important;
}
/* Toda letra que quede en gris flojo sobre claro, a un gris legible. */
.tcg-claro .n, .tcg-claro small, .tcg-claro .sub, .tcg-claro .tenue,
.tcg-claro .cjs-tenue, .tcg-claro .vn-sub { color: #000 !important; }
/* Botones oscuros que quedaban negro sobre negro: en claro, con marca. */
.tcg-claro .lu-btn--accion, .tcg-claro .bap-btn--nuevo {
  background: var(--vnv-marca, var(--accent-blue)) !important;
  color: var(--vnv-marca-txt, #fff) !important;
  border: 1px solid var(--border-fuerte, #b9c2d0);
}
/* Bordes más marcados en claro, para que las tarjetas y tablas se distingan. */
.tcg-claro .ac-tabla, .tcg-claro .sc-table, .tcg-claro .cjs-tabla,
.tcg-claro .car-ind, .tcg-claro .po-tabla {
  border-color: var(--border) !important;
}
.tcg-claro .ac-tabla th, .tcg-claro .sc-table th, .tcg-claro .cjs-tabla th {
  color: #000 !important; border-bottom: 2px solid var(--border) !important;
}
/* La letra apagada, negra de verdad en planes y postventa. */
.tcg-claro .po-sub, .tcg-claro .com-ayuda, .tcg-claro .n, .tcg-claro .sc-sub,
.tcg-claro .cip-sub, .tcg-claro .per-sub { color: #000 !important; }
.app-shell.tcg-claro .tcg-lienzo, .app-shell.tcg-claro .tcg-lienzo-pad,
.app-shell.tcg-claro .app-main { background: var(--bg); }
.tcg-claro .tcg-tj, .tcg-claro .tcg-item, .tcg-claro .tcg-aj-op { background: #fff; }
.tcg-claro .tcg-tj:hover, .tcg-claro .tcg-item:hover { background: #f7f9fc; }
.tcg-claro .tcg-buscar { background: #fff; color: var(--text); }
.tcg-claro .tcg-etq--calle { color: #000; }
.tcg-claro .tcg-franja h2 { color: #fff; }

/* ═══════════════════════════════════════════════════════════════════════
   PANTALLA DE INGRESO EN EL TELÉFONO — VA AL FINAL, Y NO ES CAPRICHO
   Con @media no hay especificidad: gana la ÚLTIMA regla del archivo. Este
   bloque estaba 95.000 caracteres más arriba y otras tres reglas de celular
   —900px, 700px y 560px— le volvían a poner ancho fijo al teclado después.
   Por eso los botones seguían saliéndose y quedando corridos a la derecha.
   Acá abajo no lo pisa nadie.
   ═══════════════════════════════════════════════════════════════════════ */

/* ═══════════════════════════════════════════════════════════════════════
   SELECTOR DE CASA EN LA BARRA DE ARRIBA · 2026-08-22
   Los tres logos, mismo alto que el de TCG, misma línea, a la derecha.
   Reemplaza al logo decorativo de acá arriba MÁS los tres botones que
   vivían al pie de la columna: era una sola cosa en dos lugares.
   ═══════════════════════════════════════════════════════════════════════ */
/* ── Cimientos de app ────────────────────────────────────────────────────
   En el teléfono la franja se mete bajo la muesca y el pie bajo la barra de
   gestos. Estas cuatro reglas son todo lo que hace falta para que no pase.
   Sin la ventana instalada los valores valen 0: no cambian nada en el
   monitor. */
.tcg-app, .app-shell { padding-left: env(safe-area-inset-left);
  padding-right: env(safe-area-inset-right); }
.tcg-top { padding-top: env(safe-area-inset-top); }
.per-pie, .vnv-fijo { padding-bottom: env(safe-area-inset-bottom); }
@supports (-webkit-touch-callout: none) {
  /* En iOS el rebote del cuerpo despega la barra de arriba. */
  body { overscroll-behavior-y: none; }
}

/* ============================================================
   La ficha de renglón — la tabla, cuando la pantalla es un teléfono
   ------------------------------------------------------------
   Cincuenta y ocho tablas del sistema son «.vn-tabla», y en el teléfono
   traen «min-width: 620px»: hay que arrastrarlas de costado para ver la
   mitad de las columnas. Estas tablas son de SÓLO LECTURA con botones por
   renglón, así que «ListaCelu» —que es para cargar datos con Enter— no es
   la pieza: la pieza es ésta.
   Cada registro es una tarjeta y siempre dice lo mismo en el mismo orden:
     1 · qué registro es, y el estado a la derecha
     2 · qué unidad
     3 · de quién
     4 · los números que se miran, CON su rótulo (en la tabla el rótulo era
         el encabezado de la columna; sueltos no se sabe qué es cada uno)
     5 · las acciones
   Va al final de baseCss y dentro del bloque de 700px, como todas las
   reglas de teléfono. En el monitor no existe: ahí sigue la tabla.
   Medido a 360, 384 y 412px, en las tres casas y en los dos temas: nada se
   sale de la tarjeta y el peor contraste da 4,83 (el mínimo es 4,5).
   ============================================================ */
@media (max-width: 700px) {
  .fch-lista { display: flex; flex-direction: column; gap: 8px; }
  .fch {
    position: relative; overflow: hidden;
    background: var(--panel, #1b2233);
    border: 1px solid var(--border, #252d3f); border-radius: 12px;
    padding: 10px 11px; display: flex; flex-direction: column; gap: 7px;
  }
  /* El filo del color de la casa: dice de quién es el registro sin
     gastar un renglón en decirlo. */
  .fch::before {
    content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 3px;
    background: var(--vnv-marca, var(--accent-amber, #f2c200));
  }
  .fch--tocable { cursor: pointer; }
  .fch--tocable:active { background: var(--panel-2, #202940); }
  /* Tildada. En la tabla era un fondo apenas distinto en la fila; en una
     tarjeta hace falta más, porque no hay filas vecinas contra las que
     comparar de un vistazo. */
  .fch--marcada {
    border-color: var(--vnv-marca, var(--accent-amber, #f2c200));
    background: color-mix(in srgb, var(--vnv-marca, #f2c200) 10%, var(--panel, #1b2233));
  }
  .fch-tilde { width: 20px; height: 20px; flex: 0 0 auto; margin: 0 2px 0 0; accent-color: var(--vnv-marca, #f2c200); }
  /* El «tildar todo» vivía en el encabezado de la tabla. */
  .fch-todas {
    display: flex; align-items: center; gap: 9px;
    padding: 9px 11px; border-radius: 10px;
    background: var(--panel-2, #202940); border: 1px solid var(--border, #252d3f);
    font-size: 12.5px; cursor: pointer;
  }
  .fch-todas > input { width: 20px; height: 20px; accent-color: var(--vnv-marca, #f2c200); }

  /* Fichas o tabla. Va arriba de la lista, pegado a la cuenta de registros:
     es la cuenta la que dice cuál conviene ese día. */
  .svc {
    display: flex; align-items: center; justify-content: space-between;
    gap: 10px; padding: 2px 0 8px;
  }
  .svc-cuenta { font-size: 12px; color: var(--text); }
  .svc-grupo {
    display: flex; flex: 0 0 auto;
    border: 1px solid var(--border, #252d3f); border-radius: 9px; overflow: hidden;
  }
  .svc-btn {
    border: 0; background: transparent; color: var(--text);
    font: inherit; font-size: 12px; font-weight: 700;
    padding: 6px 13px; min-height: 32px; cursor: pointer; white-space: nowrap;
  }
  .svc-btn + .svc-btn { border-left: 1px solid var(--border, #252d3f); }
  .svc-btn--on {
    background: var(--vnv-marca, var(--accent-amber, #f2c200));
    color: var(--vnv-marca-txt, #131824);
  }

  /* El nombre del usado tomado, un punto más chico. Medido con el caso peor
     —«AB 123 CD · Volkswagen Amarok Highline V6 Extreme 2021»— contra el
     ancho real del desplegable a 360px: 276px de texto en 288 de lugar. */
  .vnv-usado-sel > select { font-size: 11px !important; }

  /* ── El botón del encabezado de sección, a su propio renglón ────────
     «Usado en parte de pago» más «+ Cargar usado» piden 396px y a 360 hay
     320: el botón se salía 54px del bloque y quedaba fuera de la pantalla.
     Desde el teléfono no había forma de cargar el usado en parte de pago.
     Medido en Chromium a 360px.
     Vale para cualquier encabezado de sección con botón, no sólo éste:
     el rótulo lo escribe cada pantalla y mañana puede ser más largo. */
  .vnv-cuerpo .vnb-cab,
  .per-modal .vnb-cab {
    flex-wrap: wrap; row-gap: 7px; min-width: 0;
  }
  .vnv-cuerpo .vnb-cab > h4,
  .per-modal .vnb-cab > h4 { flex: 1 1 100%; min-width: 0; }
  .vnv-cuerpo .vnb-cab > .lu-btn,
  .per-modal .vnb-cab > .lu-btn {
    flex: 1 1 100%; width: 100%; min-width: 0;
    min-height: 40px; white-space: nowrap;
    /* Sobre la franja del color de la casa, un botón del mismo color no se
       distingue: se rellena con la tinta y se escribe con el color. */
    background: var(--vnv-marca-txt, #131824) !important;
    color: var(--vnv-marca, var(--accent-amber, #f2c200)) !important;
    border-color: var(--vnv-marca-txt, #131824) !important;
  }

  .fch-l1 { display: flex; align-items: baseline; gap: 8px; min-width: 0; }
  .fch-id {
    font-size: 15.5px; font-weight: 700; letter-spacing: .3px;
    font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0;
  }
  .fch-fecha { font-size: 12px; color: var(--text); white-space: nowrap; }
  .fch-l1 .pre-chip { margin-left: auto; flex: 0 0 auto; }
  .fch-l2 { font-size: 13.5px; line-height: 1.35; }
  .fch-l3 {
    font-size: 12px; color: var(--text); line-height: 1.4;
    display: flex; flex-wrap: wrap; gap: 2px 10px;
  }
  .fch-l3 b { color: var(--text, #ecf0f4); font-weight: 600; }

  .fch-nums { display: flex; gap: 14px; padding-top: 7px;
    border-top: 1px solid var(--border, #252d3f); }
  .fch-num { display: flex; flex-direction: column; min-width: 0; }
  .fch-num > span { font-size: 12px; letter-spacing: .4px; text-transform: uppercase;
    color: var(--text); }
  .fch-num > b { font-size: 14px; font-weight: 700;
    font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; }
  /* Los tonos se eligieron MIDIENDO, no a ojo. Sobre el panel oscuro
     (#1b2233) el «--red» del sistema da 4,31 y el mínimo es 4,5: por eso
     acá el rojo es un punto más claro (5,09). El verde del sistema ya da
     5,79 y se deja como está. */
  .fch-num > b.fch-alerta { color: #ea6a60; }
  .fch-num > b.fch-bien { color: var(--text); }
  /* «--red» y «--green» son los acentos del tema OSCURO: sobre la tarjeta
     blanca del tema claro dan 3,4 y 2,7 de contraste, y el mínimo es 4,5.
     Medido sobre #ffffff, estos dos dan 5,9. */
  .mo-claro .fch-num > b.fch-alerta { color: #b3261e; }
  .mo-claro .fch-num > b.fch-bien { color: #000; }

  /* Las acciones. «nowrap» y no «wrap»: son pocas y con rótulo corto, y un
     segundo renglón de botones duplica el alto de cada tarjeta. Si algún
     día no entran, ceden ancho —igual que los atajos del buscador— en vez
     de partirse. */
  .fch-acc { display: flex; gap: 6px; align-items: center;
    flex-wrap: nowrap !important; max-width: 100%; }
  .fch-btn {
    flex: 0 1 auto; min-width: 0; overflow: hidden;
    height: 34px; padding: 0 11px; border-radius: 9px;
    border: 1px solid var(--border, #252d3f); background: var(--panel-2, #202940);
    color: var(--text, #ecf0f4); font: inherit; font-size: 12.5px; font-weight: 600;
    display: inline-flex; align-items: center; justify-content: center; gap: 5px;
    white-space: nowrap; cursor: pointer;
  }
  .fch-btn--principal {
    background: var(--vnv-marca, var(--accent-amber, #f2c200));
    border-color: var(--vnv-marca, var(--accent-amber, #f2c200));
    color: var(--vnv-marca-txt, #131824); font-weight: 700;
  }
  .fch-btn--mas { margin-left: auto; font-size: 17px; line-height: 1; padding: 0 12px; }

  /* La hoja con el resto de las acciones, CON nombre. En la tabla eran
     siete botones de un carácter apretados en una columna de 58px. */
  /* z-index por ENCIMA de todo lo que vive fijo abajo: el marcador de
     versión va en 100000 y el selector de tema en 99998, los dos pegados al
     borde inferior. Con la hoja en 9600 esos dos le tapaban el último
     renglón: se veían dos acciones de cuatro. Visto en el S23.
     Mientras la hoja está abierta, tapar el marcador de versión es lo
     correcto: la hoja es una decisión, el marcador es un adorno. */
  .fch-hoja-fondo { position: fixed; inset: 0; background: rgba(0,0,0,.5);
    z-index: 100001; display: flex; align-items: flex-end; }
  /* «display: flex» le gana al atributo «hidden», que el navegador aplica
     con «display: none» desde su hoja propia y por lo tanto pierde contra
     cualquier regla de autor. Hoy la hoja se monta y se desmonta con React
     y no molesta; el día que alguien la esconda con «hidden» va a quedar
     tapando la pantalla entera, invisible y capturando los toques. */
  .fch-hoja-fondo[hidden] { display: none; }
  .fch-hoja {
    width: 100%; background: var(--panel, #1b2233); border-radius: 16px 16px 0 0;
    padding: 8px 12px calc(14px + env(safe-area-inset-bottom));
    max-height: calc(80vh / var(--tcg-z, 1)); overflow-y: auto;
  }
  .fch-hoja-asa { width: 38px; height: 4px; border-radius: 4px;
    background: var(--border, #252d3f); margin: 4px auto 10px; }
  .fch-hoja-tit { font-size: 12.5px; color: var(--text); padding: 0 2px 8px; }
  .fch-hoja-tit b { color: var(--text, #ecf0f4); font-size: 14px; display: block; }
  .fch-hoja-it {
    display: flex; align-items: center; gap: 11px; width: 100%;
    padding: 13px 10px; border-radius: 10px; border: 0; background: transparent;
    color: var(--text, #ecf0f4); font: inherit; font-size: 15px;
    text-align: left; cursor: pointer;
  }
  .fch-hoja-it:active { background: var(--panel-2, #202940); }
  .fch-hoja-it > i { font-style: normal; font-size: 18px; width: 24px; text-align: center; }
  .fch-hoja-it--peligro { color: var(--red, #e2574c); }

  /* Las dos pantallas de los atajos del buscador de ventas. El contenedor
     de la tabla («.vnl-tabla-cont») trae borde, margen y «overflow: auto»
     porque envuelve una tabla ancha; con fichas nada de eso hace falta y el
     borde dibujaba una caja alrededor de las tarjetas. */
  .vnl-fichas-cont { margin: 10px 12px; display: flex; flex-direction: column; gap: 8px; }
  /* El total vivía en el «tfoot». Se conserva como último renglón. */
  .vnl-fichas-total {
    display: flex; align-items: baseline; justify-content: space-between; gap: 10px;
    padding: 10px 12px; border-radius: 10px;
    /* «--panel» y no «--panel-2»: el gris del segundo panel deja al rótulo
       en 4,39 de contraste con tema claro, y el mínimo es 4,5. Sobre el
       mismo fondo que las fichas da 4,83, y además queda parejo con ellas. */
    background: var(--panel, #1b2233); border: 1px solid var(--border, #252d3f);
  }
  .vnl-fichas-total > span { font-size: 12px; color: var(--text); }
  .vnl-fichas-total > b {
    font-size: 15px; font-weight: 700;
    font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif;
  }

  /* ── La comparación del peritaje, apilada ──────────────────────────
     Cinco columnas —Sección, Ítem, Al cotizar, Al ingresar, Observación—
     en 360px. Es la pantalla que dice QUÉ empeoró entre la cotización y el
     ingreso: si no se lee, no sirve para nada.
     Cada fila pasa a ser un bloque y cada celda lleva adelante el rótulo de
     su columna, que en la tabla lo daba el encabezado. */
  .per-comp { margin: 0 12px 14px; padding: 10px 11px; }
  .per-comp-tabla thead { display: none; }
  .per-comp-tabla, .per-comp-tabla tbody, .per-comp-tabla tr, .per-comp-tabla td {
    display: block; width: auto;
  }
  .per-comp-tabla tr {
    padding: 8px 0; border-bottom: 1px solid var(--border, #2c2f36);
  }
  .per-comp-tabla tr:last-child { border-bottom: 0; }
  /* Hay una regla global «tbody td { text-align: center; font-family:
     JetBrains Mono }» que le pega a toda celda del sistema. En una tabla de
     números está bien; acá, con la fila apilada, dejaba los cinco renglones
     centrados y en monoespaciada, como un ticket. Visto en el S23. */
  .per-comp-tabla td {
    padding: 1px 0; border: 0;
    text-align: left; font-family: inherit;
  }
  .per-comp-tabla td::before {
    content: attr(data-rot) " · ";
    color: var(--text); font-size: 13px;
    text-transform: uppercase; letter-spacing: .3px;
  }
  /* El ítem es el dato que se busca con el ojo: va primero y más grande. */
  .per-comp-tabla td.per-comp-item { font-size: 13px; font-weight: 700; }
  .per-comp-tabla td.per-comp-item::before { content: none; }
}

/* ═══════════════════════════════════════════════════════════════════════
   EL ALTA DE USADO EN EL TELÉFONO · 2026-08-24
   SÓLO la piel. Una celda por renglón y el rótulo a la izquierda, como
   estaba: eso no se toca. Ningún tamaño sube; los campos sólo se achican
   si no entran, y nunca por debajo de donde el dedo deja de acertar.
   Todo adentro del @media de 700px: en el monitor no cambia un píxel.
   Va al final del archivo porque con @media no hay especificidad extra:
   gana la última regla del origen.
   ═══════════════════════════════════════════════════════════════════════ */
@media (max-width: 700px) {

  /* La casa tiene dos tonos y hacía falta un tercero: el que sirve cuando
     el color va como LETRA sobre el panel. El amarillo pleno sobre blanco
     da 1,68 y el azul de Vesubio sobre el panel oscuro, 2,0. Medido:
     Giorgi 9,4 oscuro / 6,1 claro · Vesubio 6,3 / 8,2 · Ginza 5,8 / 6,5. */
  .ret-modal { --ret-tinta: var(--vnv-marca-luz, #96a1b3); }
  .ret-modal.vnv-marca--renault { --ret-tinta: #f2c200; }
  .ret-modal.vnv-marca--peugeot { --ret-tinta: #6ba3ff; }
  .ret-modal.vnv-marca--toyota  { --ret-tinta: #f07a72; }
  .mo-claro .ret-modal.vnv-marca--renault, .ret-modal.mo-claro.vnv-marca--renault { --ret-tinta: #7a5f00; }
  .mo-claro .ret-modal.vnv-marca--peugeot, .ret-modal.mo-claro.vnv-marca--peugeot { --ret-tinta: #0b4f96; }
  .mo-claro .ret-modal.vnv-marca--toyota,  .ret-modal.mo-claro.vnv-marca--toyota  { --ret-tinta: #b81b20; }

  /* El botón de claro/oscuro al lado de Cerrar. */
  .ret-modal .ret-cab-btns { display: flex; align-items: center; gap: 6px; flex: 0 0 auto; }

  /* «Lo entrega el cliente…» se pintaba con var(--muted), y el tema claro
     redefine --text-muted pero NO --muted: quedaba el gris del tema oscuro
     sobre el fondo claro, 2,80 medido. Con --text da 14,1 en oscuro y 17,6
     en claro. Sólo cambia el color: la caja queda igual. */
  .ret-modal > .ret-quien { color: var(--text, #ecf0f4); }

  /* Las franjas de sección eran rectángulos plenos apilados: de ahí sale lo
     cuadrado. Rótulo en el tono de la casa y una línea al lado. Mismo alto. */
  .ret-modal .ret-seccion {
    display: flex; align-items: center; gap: 8px;
    padding: 0; margin: clamp(5px, calc(1.1dvh / var(--tcg-z, 1)), 9px) 0 clamp(3px, calc(.7dvh / var(--tcg-z, 1)), 5px);
    border-radius: 0; background: none; color: var(--ret-tinta);
    font-size: 12px; letter-spacing: .9px;
  }
  .ret-modal .ret-seccion::after {
    content: ""; flex: 1 1 auto; height: 1px; background: var(--border, #2b3348);
  }

  /* Los campos NO crecen: 34px es lo que ya tenían, y ése es el techo. El
     piso es 29, que es donde el dedo todavía acierta. En una pantalla alta
     se ven igual que hoy; en una baja se achican solos en vez de mandar el
     pie fuera de la pantalla. */
  .ret-modal .ret-ctrl input,
  .ret-modal .ret-ctrl select,
  .ret-modal .ret-ctrl .cat-disparador {
    height: clamp(29px, calc(4.3dvh / var(--tcg-z, 1)), 34px) !important;
    min-height: clamp(29px, calc(4.3dvh / var(--tcg-z, 1)), 34px) !important;
  }
  .ret-modal .ret-ctrl .lu-btn {
    height: clamp(29px, calc(4.3dvh / var(--tcg-z, 1)), 34px) !important;
    min-height: clamp(29px, calc(4.3dvh / var(--tcg-z, 1)), 34px) !important;
    flex: 0 0 clamp(29px, calc(4.3dvh / var(--tcg-z, 1)), 34px) !important;
    width: clamp(29px, calc(4.3dvh / var(--tcg-z, 1)), 34px) !important;
    line-height: 1 !important;
  }
  .ret-modal .ret-linea { margin-bottom: clamp(3px, calc(.7dvh / var(--tcg-z, 1)), 7px); }

  /* La letra, un punto y medio más grande que en el monitor. En la mano, a
     un brazo de distancia y con el teléfono en movimiento, 11,5 no se lee
     igual que en un monitor a cincuenta centímetros. No sube de 14: a 16 el
     navegador de iPhone hace zoom solo al tocar un campo, y de paso 14
     mantiene el alto de renglón que ya tenemos. */
  .ret-modal .ret-rot { font-size: 13px; }
  .ret-modal .ret-ctrl input,
  .ret-modal .ret-ctrl select,
  .ret-modal .ret-ctrl .cat-disparador { font-size: 14px; }
  .ret-modal .ret-seccion { font-size: 12px; }
  .ret-modal > .ret-quien { font-size: 12.5px; }
  .ret-modal .ret-tilde { font-size: 12.5px; }
  .ret-modal .ret-canal-tit { font-size: 12px; }
  .ret-modal .fu-cuenta { font-size: 12px; }
  .ret-modal > .per-cab .per-titulo { font-size: 15px; }
  .ret-modal > .ret-pie .lu-btn { font-size: 13.5px; }

  /* Las fotos, las marcas y el canal: la franja de abajo. Los cuatro canales
     en dos por dos — en un solo renglón «Directa Bell Ville» se cortaba. */
  /* Las marcas de la operación son tres y cortas: entran en un renglón.
     El canal se queda en dos por dos, que son cuatro y uno es «Directa Bell
     Ville». Se distinguen por «--fila», que ya venía en el marcado. */
  .ret-modal .ret-tildes { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 5px; }
  .ret-modal .ret-tildes--fila { grid-template-columns: 1fr 1fr; }
  .ret-modal .ret-canal { margin-top: clamp(3px, calc(.7dvh / var(--tcg-z, 1)), 6px); }
  .ret-modal .ret-tilde {
    min-height: clamp(28px, calc(4.1dvh / var(--tcg-z, 1)), 32px); padding: 4px 8px;
    font-size: 12px; border-radius: 8px; justify-content: flex-start;
    overflow: hidden; text-overflow: ellipsis;
    background: var(--panel-2, #202940);
    border-color: var(--border, #2b3348); color: var(--text, #ecf0f4);
  }
  /* Elegida = rellena. Antes sólo cambiaba el borde y había que mirar una
     cajita de trece píxeles para saber qué estaba marcado. */
  .ret-modal .ret-tilde--on {
    background: var(--vnv-marca, #6c7684);
    border-color: var(--vnv-marca, #6c7684);
    color: var(--vnv-marca-txt, #ffffff); font-weight: 700;
  }
  .ret-modal .ret-tilde--on .ret-tilde-caja {
    background: transparent; color: inherit; border-color: currentColor;
  }
  .ret-modal .fu-cuenta { font-size: 12px; color: var(--text); }

  /* El pie ya viene pleno con el color de la casa —criterio del sistema—:
     acá sólo se acomoda para que los dos botones entren en un renglón y el
     que crea se lleve el ancho que sobra. */
  .ret-modal > .ret-pie {
    justify-content: stretch; gap: 8px; flex-wrap: nowrap !important;
    padding: clamp(6px, calc(1.1dvh / var(--tcg-z, 1)), 9px) 12px !important;
  }
  .ret-modal > .ret-pie .lu-btn {
    height: clamp(32px, calc(4.7dvh / var(--tcg-z, 1)), 36px); min-height: clamp(32px, calc(4.7dvh / var(--tcg-z, 1)), 36px);
    font-size: 12.5px; padding: 0 10px; border-radius: 8px; white-space: nowrap;
  }
  .ret-modal > .ret-pie .lu-btn--accion { flex: 1 1 auto; font-weight: 700; }
}

/* ═══════════════════════════════════════════════════════════════════════
   LA SALIDA EN EL TELÉFONO · 2026-08-25
   Tres cosas que dejaban pantallas sin salida y contenido tapado.
   ═══════════════════════════════════════════════════════════════════════ */
@media (max-width: 700px) {
  /* Los tres bloques de agentes, uno debajo del otro. Dentro de la escalera. */
  .rv-agentes { grid-template-columns: 1fr; }
  /* El panel de impresión, en una columna. Dentro de la escalera. */
  .ivj-imp-grid { grid-template-columns: 1fr; }
  /* Tramos y formas, en una columna. Dentro de la escalera de anchos. */
  .pc-tramo { grid-template-columns: 1fr 1fr; }
  .pc-tramo > button { grid-column: span 2; }
  .pc-formas-lista { grid-template-columns: 1fr; }
  /* EN EL TELÉFONO, LA TABLA SE VUELVE FICHAS. Una tabla de doce columnas no
     entra en un teléfono por más columnas que se escondan: los encabezados se
     pisan. Ramiro lo reportó con foto. Cada renglón pasa a ser un bloque
     apilado con el nombre del campo adelante. Misma información, otro acomodo.
     Va DENTRO de la escalera de anchos, que no se puede romper. */
  .pc-tabla-planes { table-layout: auto; }
  .pc-tabla-planes thead { display: none; }
  .pc-tabla-planes tbody tr.pc-fila {
    display: grid; grid-template-columns: 34px 66px 1fr; gap: 5px 9px;
    align-items: center; padding: 10px 12px; border-bottom: 1px solid var(--border, #2e3648);
  }
  .pc-tabla-planes tbody tr.pc-detalle { display: block; padding: 10px 12px; }
  .pc-tabla-planes tbody tr.pc-fila > td { display: contents; border: 0; padding: 0; }
  .pc-tabla-planes tbody tr.pc-fila > td > * { grid-column: 3; }
  .pc-tabla-planes tbody tr.pc-fila > td:nth-child(1) > * { grid-column: 1; grid-row: 1; }
  .pc-tabla-planes tbody tr.pc-fila > td:nth-child(2) > * { grid-column: 2; grid-row: 1 / span 3; }
  /* El nombre del campo, adelante de cada valor: sin encabezado no se sabe
     qué es cada cosa. */
  .pc-tabla-planes tbody tr.pc-fila > td[data-r] > *::placeholder { color: var(--text); }
  .pc-celda { height: 34px; border-color: var(--border, #2e3648); background: var(--panel-2, #1e2637); }
  .pc-rangos { grid-template-columns: 1fr 1fr; }
  .pc-acc { justify-content: flex-start; }
  /* El unificado por pantalla, en una sola columna. Va DENTRO de la escalera:
     un @media suelto al final la rompe y lo caza «prueba_celu_orden». Es la
     tercera vez en esta sesión, así que conviene mirar la escalera antes de
     escribir un @media nuevo. */
  /* Atajos del bloque de unificadas. Tildarlas de a una era tedioso. */
.perm-unif-todos {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin: 0 0 10px;
}
.perm-unif-todos > span { font-size: 12px; color: var(--text); }
.perm-unif-todos .lu-btn { padding: 5px 12px; font-size: 12px; }
.perm-unif-todos .lu-btn:disabled { opacity: .4; cursor: default; }
.perm-unif { grid-template-columns: 1fr; }
  /* Modo planilla: en pantallas chicas las tres columnas de localidades y
     el pie editable pasan a una sola. Va DENTRO de la escalera y no en un
     @media propio al final, que la rompe. */
  .ivj-loc-grilla { grid-template-columns: 1fr; }
  .ivj-pie-planilla { grid-template-columns: 1fr; }

  /* 1 · LA BARRA DE ABAJO NO RESPONDÍA AL DEDO.
     La capa del armazón va con «pointer-events: none» para poder tocar la
     pantalla que está debajo, y se le devuelve el toque a mano, pieza por
     pieza: estaban la línea de la casa, la barra de arriba, la columna, la
     franja y los ajustes. La barra del pulgar y sus hojas NO estaban. Se
     veía la barra, se tocaba «Sectores» y no pasaba nada: de ahí «quedamos
     encerrados». */
  .tcg-app--solo .tcg-pulgar,
  .tcg-app--solo .tcg-hoja,
  .tcg-app--solo .tcg-velo { pointer-events: auto; }

  /* 2 · EL FINAL DE LA PANTALLA QUEDABA DEBAJO DE LA BARRA.
     Arriba se reservaban 95px —línea 4 + barra 45 + franja 46, medidos en el
     monitor— y acá la franja no se dibuja. Abajo no se reservaba nada, y la
     barra del pulgar es fija: el último tramo de cada pantalla quedaba tapado
     y no había manera de correrlo, porque el contenido terminaba ahí. No era
     que no se desplazara: era que ya no había nada más abajo.
     Los 58 son 52 del botón más el aire, y la zona segura del teléfono se
     suma aparte. */
  :root { --tcg-alto-armazon: 50px; }
  .app-shell:has(.tcg-app--solo) {
    padding-left: 0 !important;
    padding-bottom: calc(58px + env(safe-area-inset-bottom)) !important;
  }

  /* En el teléfono, la tabla de usuarios muestra sólo el nombre y el estado:
     con eso alcanza para encontrar a quién hay que abrir, y las otras dos
     columnas obligaban a desplazarse de costado.
     Va ACÁ ADENTRO y no en un @media propio: un bloque de 700px escrito
     antes del de 1330 rompe el orden de la escalera, y el banco de pruebas
     lo rechaza —con razón, porque el desorden es lo que hace que una regla
     de teléfono le gane a una de monitor sin que se note—. */
  .adu-tabla th:nth-child(3), .adu-tabla td:nth-child(3),
  .adu-tabla th:nth-child(4), .adu-tabla td:nth-child(4) { display: none; }
  .adu-wrap { max-height: none; }

  /* 4 · El semáforo en 360px. Cuatro tarjetas en fila entran a 22px de
     ancho cada una y no se lee nada: pasan a dos por dos. El ranking se
     desplaza a lo ancho con su propia barra, en vez de aplastar las
     columnas. */
  .gt-tarjetas { grid-template-columns: repeat(2, 1fr); }
  .gt-t-num { font-size: 19px; }
  .gt-bloque { padding: 8px 9px 10px; }
  .gt-rank-wrap { max-height: calc(46dvh / var(--tcg-z, 1)); }
  .gt-rank { font-size: 12px; }
  .gt-rank-vieja { font-size: 12px; }

  /* 3 · Y que se vea que el título de arriba es el botón de volver. Antes
     era texto a secas con una flechita: nadie lo toca si no parece botón. */
  .tcg-top-tit { border: 1px solid transparent; }
  .tcg-app--solo .tcg-top-tit {
    border-color: var(--border, #2b3348);
    background: var(--panel-2, #202940);
  }
}

/* Los afinados de menos de 700px, ORDENADOS de mayor a menor. Con @media
   no hay especificidad: gana el último que se escribe. Si un bloque de 640
   queda debajo de uno de 560, el de 640 le pisa el afinado al teléfono más
   chico y no se nota. Por eso el orden importa y hay una prueba que lo
   cuida. */
@media (max-width: 640px) {
  /* EL CENTRO ESTADISTICO EN EL CELULAR (26/09/2026, Ramiro: «no se ven las
     solapas en vista celu»).
     La barra de arriba tiene cinco grupos de botones —las tres casas, los dos
     meses, el día de la foto, guardarla y verlas— y en un teléfono se parte
     en cuatro renglones. Empuja las solapas hacia abajo y, como el cuerpo se
     lleva todo el alto que sobra, quedaban cortadas contra el borde: se veía
     un hilo de botones y nada más.
     Dos cosas: la barra se achica, y las solapas dejan de poder encogerse.
     Un menú que se puede achicar hasta desaparecer no es un menú. */
  .ces-barra { gap: 6px; padding: 8px 10px 0; }
  .ces-barra .ces-b { padding: 6px 10px; font-size: 12px; min-height: 30px; }
  .ces-barra .ces-dia { font-size: 12px; }
  .ces-barra .ces-dia input { width: 48px; }
  .ces-solapas { flex: 0 0 auto; padding: 8px 10px 0; margin-bottom: 10px; }
  .ces-solapas .ces-sol { padding: 7px 11px; font-size: 12px; }
  .per-modal > .ces-barra, .per-modal > .ces-solapas { flex-shrink: 0; }
  .ces-cuerpo { padding: 10px; }

  /* LA SUSCRIPCIÓN EN EL CELULAR. Ramiro desarrolla la vista de PC y esta
     parte me toca a mí. Las cuatro tarjetas de indicadores en dos columnas
     —en una sola quedan cuatro pantallas de alto—, los tres estados de la
     cobranza uno abajo del otro y a lo ancho —son el botón que más se toca y
     apretados se erra—, y el objetivo en dos columnas. */
  .sus-ind-grilla { grid-template-columns: repeat(2, 1fr); }
  .sus-ind-num { font-size: 25px; }
  .sus-obj-grilla { grid-template-columns: repeat(2, 1fr); }
  .sus-obj-der { margin-left: 0; width: 100%; }
  .sus-acc-fila--estados { flex-direction: column; align-items: stretch; }
  .sus-acc-fila--estados .sus-est { width: 100%; }
  .sus-acc-rot { margin: 0 0 2px; }
  .sus-franja > span:nth-child(3) { display: none; }
  .sus-enc-barra { padding-top: 4px; }
  .sus-enc-barra .sus-mes { flex: 1; }
  .sus-det { max-height: calc(92vh / var(--tcg-z, 1)); }
  .sus-det-der { width: 100%; }
  .sus-det-der .lu-btn { flex: 1; justify-content: center; }
  /* Los renglones del boleto y las grillas de la suscripción, en dos columnas.
     Van ACÁ DENTRO y no en un @media propio al final: la escalera de anchos
     tiene que ir estrictamente de mayor a menor y un bloque suelto al final la
     rompe. Lo caza «prueba_celu_orden». */
  .bad-reng { grid-template-columns: 1fr 1fr; }
  .bad-reng > button { grid-column: span 2; }
  .ivj-toolbar { flex-direction: column; align-items: stretch; gap: 8px; }
  .ivj-toolbar-grupo { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; width: 100%; }
  .ivj-toolbar-grupo--acciones { margin-left: 0; }
  .ivj-toolbar-grupo .ivj-tab-btn { justify-content: center; text-align: center; }
}
@media (max-width: 640px) {
  .ivj-reporte { padding: 14px 12px; }
  .ivj-header h1 { font-size: calc(var(--ivj-letra, 1) * 14px); }
  .ivj-nombre-dealer { font-size: calc(var(--ivj-letra, 1) * 16px); }
  .ivj-mes-select { font-size: calc(var(--ivj-letra, 1) * 11px); padding: 5px 8px; }
  .ivj-tabla thead th { font-size: calc(var(--ivj-letra, 1) * 10px); padding: 6px 6px; }
  .ivj-tabla .ivj-th-sub th { font-size: calc(var(--ivj-letra, 1) * 10.5px); padding: 3px 6px; }
  .ivj-tabla tbody td { padding: 5px 6px; font-size: calc(var(--ivj-letra, 1) * 11px); }
  .ivj-celda { font-size: calc(var(--ivj-letra, 1) * 10.5px); min-width: 26px; }
  .ivj-indicadores { grid-template-columns: 1fr; gap: 10px; }
  .ivj-ind-card { padding: 10px 12px; }
  .ivj-ind-titulo { font-size: calc(var(--ivj-letra, 1) * 12px); margin-bottom: 8px; }
  .ivj-vs-valor { font-size: calc(var(--ivj-letra, 1) * 18px); }
  .ivj-rank-nombre { font-size: calc(var(--ivj-letra, 1) * 11px); }
  .ivj-tab-btn { padding: 7px 12px; font-size: calc(var(--ivj-letra, 1) * 11.5px); }
  .ivj-planahorro { max-width: 100%; }
}
/* Acotada de 561px para arriba: abajo manda la regla de 560px, que usa
   fracciones porque 3×84 más los espacios no entra en un teléfono chico. */
@media (min-width: 561px) and (max-width: 640px) {
  /* El mismo fondo que el shell: si algún contenido lo desborda, no aparece
     un color distinto detrás. */
  html, body { max-width: 100%; overflow-x: hidden; background: var(--bg, #131824); }

  /* 1) Todo hijo de grilla/flex puede achicarse. Es el arreglo clave. */
  [class*="-grid"] > *, [class*="-grilla"] > *, [class*="-row"] > *,
  [class*="-fila"] > *, [class*="-indicadores"] > *, [class*="-kpi"] > *,
  [class*="-cards"] > *, [class*="-inds"] > *, [class*="-comparativo"] > * {
    min-width: 0 !important;
  }

  /* 2) Tarjetas de un número suelto: dos por fila. Las de contenido
        (rankings, formularios, tablas): una sola. */
  .rv-kpi-row, .sc-kpis, .pda-kpis, .am-indicadores-marca, .pat-kpis {
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
  }
  .ivj-indicadores, .bp-grilla, .rv-comparativo, .sc-indicadores,
  .am-brecha-grid, .pda-quad-grid, .asg-form-grid, .lc-grid,
  .lc-grid--resumen, .rob-inds, .rob-grid, .rob-grid-bloques,
  .asg-indicadores, .rob-fila-dias, .robx-cuerpo {
    grid-template-columns: 1fr !important;
  }
  .lc-grid--resumen .lc-card { width: 100% !important; }

  /* 3) Los textos largos cortan en vez de desbordar la tarjeta. */
  [class*="-card"], [class*="-tarjeta"], [class*="-bloque"], [class*="-panel"] {
    max-width: 100%; overflow-wrap: anywhere;
  }
  [class*="-titulo"], [class*="-label"], [class*="-nota"], [class*="-sub"] {
    overflow-wrap: anywhere; white-space: normal;
  }

  /* 4) Las tablas no se recortan: se deslizan de costado dentro de su caja. */
  [class$="-table-wrap"], [class$="-tabla-wrap"], [class$="-table-scroll"],
  [class$="-tabla-scroll"], [class$="-scroll"] {
    max-width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch;
  }

  /* 5) Menos aire alrededor: en el celular cada píxel de ancho cuenta. */
  .sc-panel, .rv-page, .lc-panel, .ivj-panel, .asg-panel, .rob-root, .pat-panel {
    padding-left: 8px !important; padding-right: 8px !important;
  }

  /* 6) Las barras de botones se apilan en vez de comprimirse. */
  [class*="-toolbar"], [class*="-header-acciones"], [class*="-acciones"] {
    flex-wrap: wrap !important;
  }

  /* 7) Los modales entran en la pantalla. */
  [class*="-modal"] { max-width: calc(calc(100vw / var(--tcg-z, 1)) - 16px) !important; max-height: calc(88vh / var(--tcg-z, 1)) !important; }
}
@media (max-width: 620px) {
  .com-grid--vertical .per-campo { grid-template-columns: 1fr; gap: 3px; }
  .com-grid--vertical .per-campo > span { text-align: left; }
  .com-grid--vertical .per-campo > small { grid-column: 1; }
}
@media (max-width: 620px) {
  .rv-comp-lados { grid-template-columns: 1fr; gap: 10px; }
  .rv-comp-lado:nth-child(1) { border-right: 0; border-bottom: 1px solid var(--border, #252d3f); padding: 0 0 8px; }
}
@media (max-width: 560px) {
  /* Más angosto todavía: los indicadores pasan a uno por renglón, que es lo
     único que entra sin que el número quede ilegible. */
  .sus-ind-grilla, .sus-obj-grilla { grid-template-columns: 1fr; }

  .ent-centro { padding: 12px 10px; justify-content: center; }
  .ent-caja { max-width: 100%; margin: 0 auto; }
  .ent-grupo { padding: 16px 12px 14px; border-radius: 12px; }
  /* Columnas por fracción, no en píxeles: entra en cualquier teléfono.
     «justify-items: stretch» hace que cada tecla llene su columna, que es
     lo que faltaba para que el bloque quedara centrado y no corrido. */
  .ent-pad {
    display: grid; grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 9px; width: 100%; margin: 0 auto;
    justify-content: stretch; justify-items: stretch;
  }
  .ent-tecla { width: 100%; min-width: 0; height: 54px; font-size: 21px; }
  .ent-cab-sel, .ent-cab-select, .ent-google { max-width: 100%; width: 100%; }
  /* El rótulo «PRONTO» empujaba el botón de Google fuera del marco. */
  .ent-google { flex-wrap: wrap; gap: 6px; padding: 10px; font-size: 12px; }
  .ent-google-pronto { font-size: 12px; padding: 2px 6px; }
  .ent-rotulo, .ent-ayuda { font-size: 12px; }
}
@media (max-width: 560px) {
  .ivj-indicadores { grid-template-columns: 1fr; }
}
@media (max-width: 560px) {
  /* Los botones de tema pasan a formar parte del panel, no a flotar sobre él. */
  .tcg-temas-fijo {
    position: static; margin: 12px auto; width: fit-content;
    box-shadow: none;
    /* align-self hace falta además del margin: dentro de un contenedor flex
       en columna, margin:auto solo no alcanza. */
    align-self: center;
  }
  .ent-centro { padding: 14px 12px; align-items: flex-start; }
  .ent-caja { max-width: 100%; }
  .ent-grupo { padding: 16px 14px 14px; border-radius: 14px; }
  .ent-marca { margin-bottom: 12px; }
  .ent-marca img { width: 132px; }
  .ent-cab { padding-bottom: 12px; margin-bottom: 16px; }
  .ent-cab-select { font-size: 15px; padding: 10px 34px 10px 12px; }
  /* Teclas CUADRADAS, no estiradas. Con 1fr se repartían todo el ancho y
     quedaban de 107×48: anchas y chatas. Un teclado numérico se toca mejor
     con teclas cuadradas, y así el bloque acompaña al desplegable en vez de
     irse hasta los bordes. */
  /* Acá había un «.ent-pad» con columnas de 84px FIJOS, y más arriba —en otro
     bloque del mismo ancho— hay otro con fracciones. Los dos aplican al mismo
     teléfono, así que ganaba el escrito último: al reordenar la escalera el
     teclado cambió de forma solo, sin que nadie lo tocara. Se saca éste y
     queda el de fracciones, que es el correcto: 3×84 más los espacios se sale
     de un teléfono de 360px, que es el caso que este bloque quería atender.
     Las teclas siguen cuadradas por el alto fijo de «.ent-tecla».
     Lo marcaba «prueba_cierre». */
  .ent-tecla { height: 56px; font-size: 21px; border-radius: 12px; }
  .ent-puntos { gap: 11px; margin: 3px 0 11px; }
  .ent-rotulo { font-size: 12px; }
  .ent-o { margin: 14px auto 10px; max-width: 100%; }
  .ent-google { max-width: 100%; padding: 10px 12px; font-size: 12.5px; }
  .ent-ayuda { font-size: 12px; }
  /* El desplegable y el separador miden lo mismo que el teclado:
     84×3 + 9×2 = 270px. Así los tres bloques comparten el mismo eje. */
  .ent-cab-sel { max-width: 270px; }
  .ent-cab-select { max-width: 270px; }
  .ent-o { max-width: 270px; }
  .ent-google { max-width: 270px; }
}

/* LOS AFINADOS VAN ÚLTIMOS, después de toda la escalera de anchos.
   No miden ancho sino otra cosa —si hay mouse, si la pantalla es baja, si
   se pidió menos movimiento— así que se cruzan con cualquier ancho. Escritos
   en el medio, la regla de ancho que viene después les pisa el afinado: es
   justo lo que pasaba con el teclado de la pantalla de ingreso. Acá abajo no
   los pisa nadie, que es lo que el comentario de más arriba ya pedía. */
/* En el teléfono la barra queda en una columna: los dos rótulos al lado
   quedaban de tres caracteres de ancho. */
@media (max-width: 560px) {
  .asig-sol { padding: 9px 10px; font-size: 12px; }
  .asig-chip { max-width: none; flex: 1 1 100%; }
  .asig-flecha { display: none; }
}

/* ── Las solapas, TODAS visibles en el teléfono (24/09/2026, Ramiro · kg) ──
   En Accesorios son cinco y en una sola fila no entran: la quinta —«La web»—
   quedaba afuera de la pantalla, y como la fila no se desplaza ni se ve que
   haya más, era una solapa que directamente no existía en el celular.
   Ahora la fila dobla y la bajada de cada una no se muestra: en el teléfono
   el título alcanza, y con la bajada las cinco ocupaban media pantalla. */
@media (max-width: 560px) {
  /* Informes en el teléfono: las carpetas doblan y reparten el ancho, los
     informes también, y la tabla se desplaza sola adentro de su recuadro
     para que la página no se vaya de lado. (24/09/2026, Ramiro · kh) */
  .inf-root.inf-caja{ border-radius: 10px; }
  .inf-root.inf-caja > .per-cab{ padding: 9px 11px; }
  .inf-root.inf-caja .inf-selector{ padding: 8px 9px 0; }
  /* Las filas DOBLAN en vez de desplazarse de lado. Antes se desplazaban, y
     como el rótulo del informe se quedaba pegado a la izquierda mientras las
     píldoras pasaban por debajo, el rótulo terminaba encimado arriba de los
     botones: eso era la maraña que se veía en Informes de Planes desde el
     teléfono. Doblando entra todo y no hay nada que se superponga.
     Lleva «!important» porque la regla que las hacía desplazarse también lo
     tiene. (24/09/2026, Ramiro) */
  .inf-root.inf-caja .inf-sel-fila,
  .inf-root.inf-caja .inf-filtros--subtemas{
    flex-wrap: wrap !important; overflow-x: visible !important;
  }
  .inf-root.inf-caja .inf-donde-fila{ position: static !important; flex: 1 1 100%; }
  .inf-root.inf-caja .inf-sel-sec{ flex: 1 1 auto; text-align: center; padding: 6px 10px; font-size: 12px; }
  .inf-root.inf-caja .inf-sel-inf{ flex: 1 1 auto; text-align: center; font-size: 12px; }
  .inf-root.inf-caja .inf-main{ overflow-x: auto; }
  .inf-root.inf-caja .inf-pie{ font-size: 12px; padding: 9px 11px; }

  .pv-solapas { flex-wrap: wrap; overflow-x: visible; padding: 8px 10px 0; gap: 5px; }
  .pv-solapas .pv-sol { flex: 1 1 auto; min-width: 0; padding: 7px 10px; font-size: 12px; }
  .pv-solapas .pv-sol small { display: none; }
}

@media (hover: none) { .fu-acciones { opacity: 1; } }
@media (prefers-reduced-motion: reduce) {
  .ent-sacudir { animation: none; }
}
/* ── Pantalla de ingreso en celulares bajos ────────────────────────────
   Celulares chicos y el teléfono acostado: sin esto hay que desplazar para
   llegar al teclado, que es lo primero que se necesita.
   Va acá, al final de todo: lo puse dos veces más arriba y el bloque de
   max-width:560px, que viene después, lo pisaba. Con @media no hay
   especificidad que valga, gana el que va último. */
@media (max-height: 700px) {
  .ent-marca { margin-bottom: 8px; }
  .ent-marca img { width: 104px; }
  .ent-grupo { padding: 12px 14px 10px; }
  .ent-cab { padding-bottom: 9px; margin-bottom: 11px; }
  .ent-tecla { height: 46px; font-size: 19px; }
  .ent-pad { gap: 7px; }
  .ent-puntos { margin: 2px 0 8px; }
  .ent-o { margin: 10px auto 8px; }
  .ent-google { padding: 9px 12px; }
}

/* MOVIDO acá abajo: este bloque de 560px estaba escrito ANTES de los de
   700px y rompía el orden de la escalera. La escalera va de mayor a menor
   ancho a propósito: cuando una regla más chica queda arriba, la más grande
   escrita después la pisa y el afinado del teléfono deja de aplicarse sin
   que se note. Lo marcaba «prueba_celu_orden» desde antes de esta tanda. */

/* MOVIDOS acá: estos dos bloques de 560px estaban escritos ANTES de los
   tres de 700px del armazón del teléfono, y eso rompía el orden de la
   escalera. Con @media no hay especificidad: gana el último, así que una
   regla de 700px escrita después le pisa el afinado a una de 560px y no
   se nota. Ninguno de los dos toca el armazón, así que bajarlos no cambia
   nada de lo que se ve; sólo deja la escalera en orden.
   Lo marcaba «prueba_celu_orden» desde antes de esta tanda. */

/* MOVIDOS acá abajo: cinco bloques de 640px y 620px que estaban escritos
   ANTES de los tres de 700px del armazón. La escalera va de mayor a menor
   ancho porque con @media no hay especificidad —gana el último—, y una
   regla de 700px escrita después le pisa el afinado a una de 640. Se
   conserva el orden relativo entre ellos. */

/* ── Asignación / Desasignación · las tres solapas ─────────────────────
   Una solapa por verbo. La lista vieja mezclaba operaciones con unidad y
   sin unidad, y el botón aparecía apagado sin decir por qué: el motivo era
   estar parado en la fila equivocada. */
.asig-solapas {
  display: flex; gap: 0; flex-wrap: wrap;
  padding: 0 16px; border-bottom: 1px solid var(--border, #252d3f);
}
.asig-sol {
  appearance: none; background: none; border: none; font: inherit;
  font-weight: 600; color: var(--text); cursor: pointer;
  padding: 9px 16px; display: flex; align-items: center; gap: 7px;
  border-bottom: 3px solid transparent; margin-bottom: -1px;
}
.asig-sol:hover { color: var(--text, #ecf0f4); }
.asig-sol--on { color: var(--text, #ecf0f4); border-bottom-color: var(--accent-amber, #f2c200); }
.asig-sol-n {
  background: var(--panel-2, #202940); border: 1px solid var(--border, #252d3f);
  border-radius: 9px; padding: 0 7px; font-size: 12px; font-weight: 700;
}
.asig-sol--on .asig-sol-n {
  background: var(--accent-amber, #f2c200); color: #000;
  border-color: var(--accent-amber, #f2c200);
}

/* El renglón que dice qué hay que hacer en esta solapa. */
.asig-paso {
  margin: 0; padding: 8px 11px; font-size: 12px; border-radius: 8px;
  background: color-mix(in srgb, var(--accent-blue, #4f8ef7) 10%, transparent);
  border: 1px solid color-mix(in srgb, var(--accent-blue, #4f8ef7) 32%, transparent);
}

/* La unidad libre que se parece a lo que compró el cliente. */
.asig-coincide {
  margin-left: 7px; border-radius: 9px; padding: 0 6px;
  font-size: 12px; font-weight: 700; color: var(--text);
  background: color-mix(in srgb, var(--green, #4caf6d) 16%, transparent);
  border: 1px solid color-mix(in srgb, var(--green, #4caf6d) 45%, transparent);
}

/* El lápiz para cambiar qué vehículo espera la operación. */
.asig-lapiz-col { width: 34px; text-align: center; }
.asig-lapiz {
  appearance: none; background: none; border: 1px solid var(--border, #252d3f);
  border-radius: 6px; color: var(--text); cursor: pointer;
  font-size: 13px; line-height: 1; padding: 3px 6px;
}
.asig-lapiz:hover { color: var(--text); border-color: var(--accent-amber, #f2c200); }

/* La barra de acción. Dice en palabras qué va a pasar antes de apretar, y
   cuando el botón está apagado dice al lado qué falta elegir. */
.asig-barra {
  position: sticky; bottom: 0; z-index: 3; margin: 16px -16px 0;
  padding: 10px 16px; background: var(--panel-2, #202940);
  border-top: 1px solid var(--border, #252d3f);
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
}
.asig-par { display: flex; align-items: center; gap: 10px; flex: 1 1 260px; flex-wrap: wrap; }
.asig-chip {
  background: var(--panel, #1b2233); border: 1px solid var(--border, #252d3f);
  border-radius: 8px; padding: 5px 10px; font-size: 12px; max-width: 340px;
}
.asig-chip b { display: block; font-weight: 600; }
.asig-chip em { display: block; font-style: normal; color: var(--text); }
.asig-chip-rot {
  display: block; font-size: 12px; text-transform: uppercase; letter-spacing: 0.5px;
  color: var(--text); margin-bottom: 1px;
}
.asig-chip--vacio { border-style: dashed; color: var(--text); }
.asig-chip--a { border-color: color-mix(in srgb, var(--accent-amber, #f2c200) 50%, transparent); }
.asig-chip--b { border-color: color-mix(in srgb, var(--accent-blue, #4f8ef7) 50%, transparent); }
.asig-flecha { color: var(--text); font-size: 15px; }

/* ── Las listas ────────────────────────────────────────────────────────
   Propias y no el motor genérico, a propósito: con el motor aparecían la
   barra de Columnas/Excel/PDF que la maqueta aprobada no tenía, los rótulos
   en cápsula de color, y los anchos y el centrado guardados dejaban dos
   columnas enormes con el resto cortado de costado. Acá los anchos los fija
   la pantalla y el texto va a la izquierda, como en la maqueta. */
.asig-cuerpo { padding-bottom: 0; }
.asig-buscar {
  width: 100%; background: var(--panel-2, #202940);
  border: 1px solid var(--border, #252d3f); border-radius: 8px;
  color: var(--text, #ecf0f4); font: inherit; padding: 9px 12px;
  margin-bottom: 12px; outline: none;
}
.asig-buscar::placeholder { color: var(--text); }

/* El rótulo del bloque: nombre, cuenta y ayuda en el mismo renglón, con una
   línea abajo. No es una cápsula de color. */
.asig-rot {
  display: flex; align-items: baseline; gap: 9px; flex-wrap: wrap;
  padding: 14px 0 7px; margin-bottom: 0;
  border-bottom: 2px solid var(--border, #252d3f);
}
.asig-rot strong {
  font-size: 12.5px; letter-spacing: .2px; text-transform: uppercase;
  color: var(--text, #ecf0f4);
}
.asig-rot-n {
  background: var(--panel-2, #202940); border: 1px solid var(--border, #252d3f);
  border-radius: 9px; padding: 0 8px; font-size: 12px; font-weight: 700;
}
.asig-rot-ayuda { font-size: 12px; color: var(--text); font-weight: 400; }
/* Excel y PDF: dos botones chicos al final del rótulo. La barra genérica
   traía además el menú de columnas y los anchos guardados, que es lo que
   desarmaba la maqueta aprobada. Estos sólo exportan. */
.asig-rot-btns { margin-left: auto; display: flex; gap: 6px; }
.asig-exp {
  appearance: none; background: var(--panel-2, #202940);
  border: 1px solid var(--border, #252d3f); border-radius: 6px;
  color: var(--text); font: inherit; font-size: 12px;
  padding: 3px 10px; cursor: pointer;
}
.asig-exp:hover { color: var(--text); border-color: var(--accent-amber, #f2c200); }

/* ══════════════════════════════════════════════════════════════════════
   PLAN DE AHORRO · PROPUESTA COMERCIAL
   Tarjeta por modelo, no planilla. La versión anterior era una tabla de once
   columnas y Ramiro la rechazó por ruido visual, con razón: cinco de esas
   columnas eran cálculos del mismo precio —cuota pura, integración, primera,
   última y tramos— y competían con el único número que importa, que es lo
   que el cliente paga la primera cuota. Los cálculos pasaron adentro.
   Las tarjetas arrancan CERRADAS: cargar el mes es actualizar veinte precios
   y para eso alcanza el encabezado; los planes se miran de a un modelo.
   ══════════════════════════════════════════════════════════════════════ */
/* 23/09/2026 (Ramiro: «está más chica que el resto»). Heredaba los 900 px de
   «com-modal», pensados para un modal de dos columnas; esta pantalla tiene
   tablas anchas y quedaba apretada al lado de las demás del sector. */
.per-modal.pc-modal { max-width: min(1400px, calc(98vw / var(--tcg-z, 1))); width: min(1400px, calc(98vw / var(--tcg-z, 1))); height: calc(92vh / var(--tcg-z, 1)); max-height: calc(92vh / var(--tcg-z, 1)); }
.pc-cuerpo { padding-bottom: 0; }
/* Los botones del encabezado, en grupos: buscar · armar · mandar. */
.pc-acciones-enc { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; width: 100%; }
.pc-grupo { display: inline-flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.pc-grupo + .pc-grupo { border-left: 1px solid var(--border, #2a3345); padding-left: 14px; }
.pc-grupo--der { margin-left: auto; border-left: 0; padding-left: 0; }
.pc-acciones-enc .pc-buscar { min-width: 220px; }
.pc-oculto { display: none; }
.pc-sp { flex: 1; }
.pc-der { text-align: right; }
.pc-ayuda { color: var(--text); font-size: 12px; }

.pc-barra { display: flex; gap: 9px; align-items: center; flex-wrap: wrap; margin-bottom: 6px; }
/* MISMA ALTURA QUE LOS BOTONES (14/09/2026, Ramiro). El desplegable y el
   buscador tenían su propio borde, su propio radio y su propio relleno, así
   que en la misma fila se veían de tres tamaños. Se copian los del botón. */
.pc-sel, .pc-buscar {
  background: var(--panel-2, #202940); border: 1px solid var(--border, #2c2f36);
  border-radius: 8px; color: var(--text, #ecf0f4); font: inherit;
  font-size: 12.5px; padding: 7px 12px; line-height: 1.2;
}
.pc-buscar { flex: 0 1 150px; min-width: 110px; max-width: 150px; }
.pc-buscar::placeholder { color: var(--text); }

/* La explicación del valor móvil, como renglón y no como cartel: se lee una
   vez y después pesa para siempre. */
.pc-nota { margin: 0 0 14px; color: var(--text); font-size: 12px; }
.pc-nota b { color: var(--text, #ecf0f4); }

.pc-grilla {
  display: grid; gap: 13px; align-items: start;
  grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
}
.pc-grilla--chica { grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); }

.pc-tar {
  background: var(--panel, #1b2233); border: 1px solid var(--border, #252d3f);
  border-radius: 12px; overflow: hidden;
}
.pc-tar--on { border-color: var(--accent-amber, #f2c200); }
/* Abierta ocupa toda la fila. Dejándola en su columna, la tarjeta crecía
   hacia abajo y al lado quedaba un hueco del alto de la pantalla. */
.pc-tar--on { grid-column: 1 / -1; }
.pc-tar-cab { display: flex; gap: 11px; padding: 11px; align-items: center; cursor: pointer; }
.pc-tar-id { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 5px; }
.pc-tar-res { text-align: right; flex: none; display: flex; flex-direction: column; align-items: flex-end; }
.pc-tar-res b { font-size: 14px; font-variant-numeric: tabular-nums; }
.pc-tar-res span { color: var(--text); font-size: 12px; }
.pc-chev { color: var(--text); font-size: 12px; font-style: normal; margin-top: 3px; }
.pc-tar-pie { display: flex; gap: 8px; align-items: center; padding: 9px 12px; }

.pc-foto {
  width: 96px; height: 66px; border-radius: 8px; flex: none; padding: 0;
  background: var(--panel-3); border: 1px solid var(--border);
  color: var(--text); font: inherit; font-size: 12px; cursor: pointer;
  display: grid; place-items: center; overflow: hidden;
}
.pc-foto img { width: 100%; height: 100%; object-fit: cover; }
.pc-foto:hover { border-color: var(--accent-amber, #f2c200); color: var(--text); }

.pc-campo { display: flex; flex-direction: column; gap: 3px; }
.pc-campo > span {
  font-size: 12px; text-transform: uppercase; letter-spacing: .5px;
  color: var(--text);
}
.pc-campo--fila { flex-direction: row; align-items: center; gap: 7px; }
.pc-campo--fila > span { margin: 0; }

.pc-in {
  background: var(--panel-2, #202940); border: 1px solid var(--border, #252d3f);
  border-radius: 6px; color: var(--text, #ecf0f4); font: inherit; font-size: 12px;
  padding: 5px 8px; min-width: 0; width: 100%;
}
.pc-in:focus { outline: none; border-color: var(--accent-amber, #f2c200); }
.pc-in--modelo { font-weight: 700; font-size: 13px; width: auto; flex: 1 1 140px; min-width: 110px; }
.pc-in--version { width: auto; flex: 1 1 160px; min-width: 120px; }
/* En la tarjeta los campos van en una fila que se acomoda, no uno por
   renglón a todo lo ancho: así se lee «YARIS · XS CVT 5P» de un vistazo. */
.pc-tar-id { flex-direction: row; flex-wrap: wrap; align-items: center; }
.pc-in--precio {
  /* Medido: con 132px un precio de nueve dígitos se cortaba y se leía
     «35354». Ocupa lo que le queda a la fila, con un piso propio. */
  flex: 1 1 auto; min-width: 128px; text-align: right;
  font-variant-numeric: tabular-nums;
  border-color: var(--accent-amber, #f2c200); font-weight: 700; font-size: 13px;
}
.pc-campo--fila { width: 100%; }
.pc-in--codigo { width: 92px; }
.pc-in--fin, .pc-in--ea { width: 62px; text-align: right; }
.pc-in--cuotas { width: 70px; text-align: right; }
.pc-in--rango { width: 54px; text-align: center; }
.pc-in--monto { width: 128px; min-width: 0; text-align: right; font-variant-numeric: tabular-nums; }
/* Los campos de la tabla de cargos llevan su ancho propio: con el «width:100%»
   general el de Concepto empujaba a los demás fuera de la caja. */
.pc-det-tabla .pc-in { width: 100%; }
.pc-det-tabla .pc-in--rango, .pc-det-tabla .pc-in--monto { width: 100%; }
.pc-suma { color: var(--text); }
.pc-resta { color: #e2574c; }

/* Un renglón por plan, con UN solo número: la primera cuota. */
.pc-planes { border-top: 1px solid var(--border, #252d3f); }
.pc-plan {
  display: flex; align-items: center; gap: 10px; padding: 9px 12px;
  border-bottom: 1px solid var(--border, #252d3f); cursor: pointer;
}
.pc-plan:hover { background: var(--lavado); }
.pc-plan--off { opacity: 1; }
.pc-plan--on { background: color-mix(in srgb, var(--accent-amber, #f2c200) 10%, transparent); }
.pc-plan-id { flex: 1; min-width: 0; }
.pc-plan-nom { font-weight: 600; }
.pc-plan-sub { color: var(--text); font-size: 12px; }
.pc-plan-num { text-align: right; flex: none; font-variant-numeric: tabular-nums; }
.pc-plan-num b { font-size: 14px; display: block; }
.pc-plan-num span {
  color: var(--text); font-size: 12px;
  text-transform: uppercase; letter-spacing: .4px;
}

/* El tilde de vigente: cuadrado y verde. Verde y no ámbar porque no marca una
   elección sino un estado: está en venta o no lo está. */
.pc-tilde {
  appearance: none; width: 17px; height: 17px; line-height: 1; padding: 0; flex: none;
  border: 1.5px solid var(--text-muted, #9aa3b2); border-radius: 4px;
  background: none; color: var(--text); font-size: 12px;
  font-weight: 700; cursor: pointer;
}
.pc-tilde--on { background: var(--green, #4caf6d); border-color: var(--green, #4caf6d); color: #000; }

/* El detalle del plan, adentro de la tarjeta y sin ventana encima. */
/* Color de tema, no fijo. Con «#161d2c» escrito a mano el detalle quedaba
   negro también en modo claro: los colores fijos no siguen al tema. */
.pc-det { background: var(--panel-2); border-bottom: 1px solid var(--border); padding: 12px; }
.pc-det-campos { display: flex; gap: 10px; flex-wrap: wrap; margin-bottom: 12px; }
.pc-det-tit {
  margin: 0 0 7px; font-size: 12px; text-transform: uppercase;
  letter-spacing: .5px; color: var(--text);
}
.pc-cifras { display: flex; gap: 20px; flex-wrap: wrap; margin-bottom: 12px; }
.pc-cifra span {
  display: block; font-size: 12px; text-transform: uppercase;
  letter-spacing: .5px; color: var(--text);
}
.pc-cifra b { font-size: 13px; font-variant-numeric: tabular-nums; }
.pc-det-tabla-caja {
  border: 1px solid var(--border, #252d3f); border-radius: 8px;
  overflow: hidden; margin-bottom: 9px;
}
.pc-det-tabla { width: 100%; border-collapse: collapse; font-size: 12px; }
/* Gris y no el acento de la casa: un encabezado de tabla no es una marca.
   «.per-modal thead th» pinta TODOS los encabezados con el color de la casa y
   además les pone un borde de 2px del mismo color; medido en Ginza, «RANGO» y
   «VALOR» salían en rojo con subrayado rojo. Se necesita el mismo peso de
   selector —modal + thead th— para ganarle sin !important en el borde. */
.per-modal .pc-det-tabla thead th,
.pc-embebido .pc-det-tabla thead th,
.per-modal .pc-tabla thead th,
.pc-embebido .pc-tabla thead th {
  background: var(--panel-3); text-align: left; padding: 6px 9px; font-size: 13px;
  text-transform: uppercase; letter-spacing: .4px; font-weight: 600;
  color: var(--text);
  border-bottom: 1px solid var(--border, #252d3f);
}
.pc-det-tabla td { padding: 5px 9px; border-bottom: 1px solid var(--border, #252d3f); }
.pc-det-tabla tr:last-child td { border-bottom: none; }
.pc-td-x { text-align: center; }
.pc-x {
  appearance: none; background: none; border: none; cursor: pointer;
  color: var(--text); font-size: 14px; line-height: 1;
}
.pc-x:hover { color: #e2574c; }
.pc-det-pie { display: flex; gap: 9px; align-items: center; flex-wrap: wrap; margin-bottom: 12px; }
.pc-vacio-chico { text-align: center; color: var(--text); padding: 12px; }

/* El vacío: chico y con el botón que se va a querer apretar. Antes una tabla
   sin datos ocupaba la pantalla entera. */
.pc-vacio {
  border: 1px dashed var(--border, #252d3f); border-radius: 12px;
  padding: 32px 18px; text-align: center; color: var(--text);
  max-width: 520px; margin: 0 auto;
}
.pc-vacio b { color: var(--text, #ecf0f4); display: block; margin-bottom: 5px; font-size: 14px; }
.pc-vacio .lu-btn { margin-top: 11px; }

/* Los que ya no se comercializan, en su propia sección y cerrada. Con los años
   son muchos más que los quince que se venden. */
.pc-viejos {
  margin-top: 20px; border: 1px solid var(--border, #252d3f);
  border-radius: 12px; overflow: hidden;
}
.pc-viejos-cab {
  display: flex; gap: 10px; align-items: center; padding: 11px 14px;
  cursor: pointer; background: var(--panel, #1b2233);
}
.pc-viejos-cab:hover { background: var(--panel-2, #202940); }
.pc-viejos-cab span { color: var(--text); font-size: 12px; flex: 1; }
.pc-viejos-barra {
  display: flex; gap: 6px; align-items: center; padding: 9px 14px;
  border-top: 1px solid var(--border, #252d3f);
}
.pc-viejos-lista { padding-bottom: 4px; }
.pc-viejos-fila {
  display: flex; gap: 10px; align-items: center; padding: 7px 14px;
  border-top: 1px solid var(--border, #252d3f); font-size: 12px;
}
.pc-viejos-fila span { color: var(--text); font-size: 12px; }
.pc-viejos-precio { font-variant-numeric: tabular-nums; color: var(--text, #ecf0f4) !important; }
.pc-viejos-tabla { padding: 0 8px 8px; }
.pc-tabla { width: 100%; border-collapse: collapse; font-size: 12px; }
.pc-tabla th {
  text-align: left; padding: 6px 9px; font-size: 13px; font-weight: 600;
  text-transform: uppercase; letter-spacing: .4px;
  color: var(--text); border-bottom: 1px solid var(--border, #252d3f);
}
.pc-tabla td { padding: 6px 9px; border-bottom: 1px solid var(--border, #252d3f); }

/* El resumen para imprimir: fondo claro, porque es lo que sale en papel y lo
   que se le manda al cliente. */
.pc-resumen-barra { display: flex; gap: 9px; align-items: center; margin-bottom: 10px; }
/* EL BLOQUE COMPACTO: todos los planes vigentes, un renglón cada uno. Las
   tarjetas sirven para cargar; para mirar la propuesta entera obligaban a
   bajar por quince tarjetas grandes. Pedido de Ramiro. */
/* El encabezado de la hoja: período y concesionario, arriba de todo. */
.pc-hoja-cab {
  display: flex; align-items: baseline; gap: 10px;
  border-bottom: 2px solid #222222; padding-bottom: 7px; margin-bottom: 4px;
}
.pc-hoja-casa { font-size: 16px; font-weight: 700; letter-spacing: .02em; color: #000; }
.pc-hoja-cab-der { margin-left: auto; font-size: 12px; color: #000; }
/* ══════════════════════════════════════════════════════════════════
   FORMULARIO DE SUSCRIPCIÓN DIGITAL
   Pedido de Ramiro: «formularios muy formales y con celdas iguales».
   Por eso hay UN solo alto —«--sus-alto»— y lo usan campos, desplegables,
   botones de opción y botones de acción. Si alguna celda no lo usa, el
   renglón se desparaja y se nota enseguida.
   ══════════════════════════════════════════════════════════════════ */
.sus-modal {
  --sus-alto: 36px;
  width: min(900px, calc(96vw / var(--tcg-z, 1))); max-width: 900px; max-height: calc(94vh / var(--tcg-z, 1));
  display: flex; flex-direction: column; overflow: hidden;
}
/* La franja de la casa: el envoltorio de arriba. */
.sus-casa {
  display: flex; align-items: center; gap: 12px; padding: 13px 18px; flex: none;
  background: var(--vnv-marca, #6c7684); color: var(--vnv-marca-txt, #fff);
}
.sus-casa h3 { margin: 0; font-size: 15px; letter-spacing: .02em; }
.sus-casa p { margin: 2px 0 0; font-size: 12px; opacity: 1; }
.sus-casa-logo {
  width: 36px; height: 36px; border-radius: 7px; flex: none;
  background: color-mix(in srgb, var(--vnv-marca-txt, #fff) 18%, transparent);
  display: grid; place-items: center; font-size: 12px; font-weight: 700; letter-spacing: .04em;
}
.sus-casa-der { margin-left: auto; text-align: right; font-size: 12px; line-height: 1.5; }
.sus-casa-der b { font-size: 14px; }

.sus-modos { display: flex; flex: none; border-bottom: 1px solid var(--border, #2c3446); background: var(--lavado); }
.sus-modo {
  flex: 1; background: transparent; border: 0; border-bottom: 2px solid transparent;
  color: var(--text); font: inherit; font-size: 12.5px; padding: 11px 8px; cursor: pointer;
}
.sus-modo b { display: block; font-size: 13px; }
.sus-modo small { font-size: 12px; opacity: 1; }
.sus-modo--on { color: var(--text); border-bottom-color: var(--accent-amber, #f2c200); background: rgba(242,194,0,.07); }

/* LAS SOLAPAS. Una cosa por pantalla en el celular, o todo de corrido para
   revisar antes de cerrar: lo elige el usuario. Pedido de Ramiro, las dos. */
/* ══ EL ENVOLTORIO DE LAS PANTALLAS DE PLAN DE AHORRO ══════════════
   Las cinco —Suscripción, Scoring, Envío, Agrupamiento y Boleto— comparten
   marco, encabezado, secciones y pie. Pedido de Ramiro: «encabezado,
   envoltorio y pie, así es más entendible y sólido todo». Con cada pantalla
   con su forma, el usuario tenía que reaprender en cada una. */
.sus-pantalla {
  /* ANCHO ACOTADO Y PAREJO. Ramiro: «no podemos tener todo un renglón para
     escribir una dirección». Estas pantallas se estiraban a todo el monitor y
     en uno grande los campos quedaban absurdos. 1180px es el ancho al que las
     cuatro columnas del formulario dan unos 240px cada una, que es lo que mide
     un campo cómodo. Centrado, para que no quede pegado a la izquierda.
     El mismo número en las cinco: si cada una tuviera el suyo, parecerían
     proyectos distintos. */
  max-width: 1180px; margin-left: auto; margin-right: auto;
  background: var(--panel, #1a2130);
  border: 1px solid var(--border, #2c3446);
  border-radius: 14px; overflow: hidden;
  box-shadow: 0 1px 0 var(--lavado-2) inset, 0 8px 24px rgba(0,0,0,.28);
}
/* El encabezado se pega al borde del marco, sin aire alrededor. */
.sus-pantalla > .tcg-envoltura { margin: 0; border-radius: 0; }
.sus-pantalla > .ivj-toolbar,
.sus-pantalla > .sus-enc-barra { padding-left: 16px; padding-right: 16px; }
.sus-pantalla > .tnd-seccion { border-radius: 0; }
.sus-pantalla > .sus-ind,
.sus-pantalla > .sus-franja,
.sus-pantalla > .sus-form { margin-left: 16px; margin-right: 16px; }
.sus-pantalla > .ivj-pie { margin: 0; padding: 12px 16px; }

/* ── LOS BOTONES Y LAS SOLAPAS, CON PESO ────────────────────────────
   Ramiro: «resaltar los botones y las solapas». Estaban todos transparentes
   y no se distinguía cuál cerraba el trabajo ni qué solapa estaba abierta. */
.sus-pantalla .lu-btn, .sus-form .lu-btn {
  background: var(--panel-3, #232c3f); border: 1px solid var(--border, #2c3446);
  color: var(--text); font-weight: 600;
}
.sus-pantalla .lu-btn:hover:not(:disabled), .sus-form .lu-btn:hover:not(:disabled) {
  background: var(--panel-2, #2a3448); border-color: #414d66;
}
.sus-pantalla .lu-btn--accion, .sus-form .lu-btn--accion {
  background: var(--accent-amber, #f2c200); border-color: var(--accent-amber, #f2c200);
  color: #000; font-weight: 700; box-shadow: 0 2px 0 #b99700;
}
.sus-pantalla .lu-btn--accion:hover:not(:disabled),
.sus-form .lu-btn--accion:hover:not(:disabled) { background: #ffd21f; }
/* La solapa abierta se pega al cuerpo, como una carpeta, con su línea ámbar. */
.sus-form .sus-solapa--on {
  box-shadow: inset 0 3px 0 var(--accent-amber, #f2c200);
  border-radius: 9px 9px 0 0;
}
/* El foco marcado: en un formulario largo, saber dónde se está parado importa. */
.sus-form input:focus, .sus-form select:focus, .sus-form textarea:focus {
  outline: none; border-color: var(--accent-amber, #f2c200);
  box-shadow: 0 0 0 3px rgba(242,194,0,.16);
}

/* ── LA PANTALLA DE SUSCRIPCIÓN, FORMATO NUEVO ──────────────────────
   Encabezado, franja, formulario en la página, listado y pie: todo en el
   mismo marco y nada escondido detrás de un modal. Decisión de Ramiro. */
/* ══ LA MATRIZ DE PERMISOS ═════════════════════════════════════════
   Sectores desplegables a la izquierda y tres columnas por concesionario:
   sin acceso, ver y editar. Maqueta aprobada por Ramiro. */
/* El bloque de unificado por pantalla. */
.perm-ayuda { font-size: 12px; color: var(--text); line-height: 1.5; margin: 2px 0 10px; }
.perm-ayuda b { color: var(--text); }
.perm-unif { display: grid; grid-template-columns: repeat(2, 1fr); gap: 8px 16px; }
.perm-unif-item {
  display: flex; align-items: flex-start; gap: 10px; text-align: left; cursor: pointer;
  background: rgba(255,255,255,.03); border: 1px solid var(--border, #2c3446);
  border-radius: 9px; padding: 8px 11px; font: inherit; color: var(--text);
}
.perm-unif-item:hover:not(:disabled) { border-color: var(--text-muted, #c2cad8); }
.perm-unif-item--trabada { opacity: 1; cursor: default; }
.perm-unif-item--on { border-color: rgba(242,194,0,.55); background: rgba(242,194,0,.08); }
.perm-unif-caja {
  width: 18px; height: 18px; border-radius: 5px; flex: none; margin-top: 1px;
  border: 1.5px solid var(--border, #2c3446); background: var(--panel-2, #202940);
  display: grid; place-items: center; font-size: 12px; color: transparent;
}
.perm-unif-item--on .perm-unif-caja {
  background: var(--accent-amber, #f2c200); border-color: var(--accent-amber, #f2c200); color: #000;
}
.perm-unif-item b { display: block; font-size: 12.5px; font-weight: 600; }
.perm-unif-item small { color: var(--text); font-size: 12px; }
.perm-aviso {
  display: flex; gap: 9px; align-items: flex-start; margin-top: 12px;
  background: rgba(242,194,0,.08); border: 1px solid rgba(242,194,0,.35);
  border-radius: 9px; padding: 10px 13px; font-size: 12px; color: var(--text); line-height: 1.5;
}
.perm-aviso b { color: var(--text); }
.perm-aviso--ok { background: rgba(61,220,151,.07); border-color: rgba(61,220,151,.32); color: var(--text); }
.perm-aviso--ok b { color: var(--text); }

/* El encabezado del reporte de Liquidación: fino, sin repetir el título ni el
   PDF que ya están arriba. Sólo el concesionario, el mes y su propio PDF. */
.lc-header--fino { border-bottom: 1px solid var(--border, #2c3446); padding-bottom: 8px; margin-bottom: 12px; }
.lc-header-casa { font-size: 15px; font-weight: 700; letter-spacing: .01em; }

/* ══ AL IMPRIMIR LA PANTALLA, NADA DE LOS CONTROLES SALE ═══════════
   La hoja buena se genera aparte con «ivjImprimirHoja». Pero quedan dos
   caminos que imprimen la PANTALLA: el Ctrl+P del navegador y el botón de
   PDF viejo. Por ahí se colaban los botones —zoom, ⚙, Registro, Liquidación,
   el selector de mes—, que es lo que Ramiro vio en el PDF.
   Esto los esconde pase lo que pase. Es una red de seguridad: no reemplaza a
   la hoja generada, la cubre. */
@media print {
  .ivj-header-acc,
  .ivj-zoom,
  .ivj-imp,
  .ivj-btn-modo,
  .ivj-mes-select,
  .ivj-toolbar,
  .ivj-tab-btn,
  .lu-btn,
  .rv-embudo,
  .rv-aviso-filtros,
  .tcg-app,
  .header,
  .back-btn { display: none !important; }
  /* Los campos editables salen como texto: en el papel un recuadro de
     formulario vacío no dice nada. */
  .ivj-reporte input,
  .ivj-loc-in,
  .ivj-pie-planilla input {
    border: 0 !important; background: transparent !important;
    color: #000 !important; -webkit-appearance: none; appearance: none;
  }
}

/* ══ FILTROS POR COLUMNA DEL REGISTRO DE VENTAS ════════════════════ */
.rv-embudo-caja { position: relative; display: inline-block; margin-left: 4px; }
.rv-embudo {
  width: 15px; height: 15px; padding: 0; line-height: 1; cursor: pointer;
  border: 1px solid transparent; border-radius: 4px; background: transparent;
  color: var(--text); font-size: 10px;
}
.rv-embudo:hover { border-color: var(--accent-amber, #f2c200); color: var(--text); }
/* Con filtro puesto se ve SIEMPRE, no sólo al pasar por encima: es la única
   pista de que la tabla está escondiendo filas. */
.rv-embudo--on {
  background: var(--accent-amber, #f2c200); border-color: var(--accent-amber, #f2c200); color: #000;
}
.rv-embudo-panel {
  position: absolute; top: 20px; right: 0; z-index: 60; width: 250px;
  background: var(--panel, #1a2130); border: 1px solid var(--border, #2e3648);
  border-radius: 10px; box-shadow: 0 12px 32px rgba(0,0,0,.5); padding: 9px;
  text-transform: none; letter-spacing: 0; font-weight: 400; text-align: left;
}
.rv-embudo-buscar {
  width: 100%; height: 30px; background: var(--panel-2, #202940);
  border: 1px solid var(--border, #2e3648); border-radius: 7px;
  color: var(--text); padding: 0 9px; font: inherit; font-size: 12.5px;
}
.rv-embudo-acc { display: flex; gap: 6px; margin: 7px 0; }
.rv-embudo-acc button {
  flex: 1; height: 26px; cursor: pointer; font: inherit; font-size: 11px;
  background: var(--panel-2, #202940); border: 1px solid var(--border, #2e3648);
  border-radius: 7px; color: var(--text);
}
.rv-embudo-acc button:hover { color: var(--text); border-color: var(--text-muted, #c2cad8); }
.rv-embudo-lista { max-height: 240px; overflow: auto; }
.rv-embudo-it {
  display: flex; align-items: center; gap: 7px; padding: 3px 4px;
  border-radius: 6px; cursor: pointer; font-size: 12.5px;
}
.rv-embudo-it:hover { background: rgba(255,255,255,.06); }
.rv-embudo-it input { accent-color: var(--accent-amber, #f2c200); margin: 0; }
.rv-embudo-it span { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rv-embudo-it b { font-size: 11px; color: var(--text); font-variant-numeric: tabular-nums; }
.rv-embudo-vacio { display: block; padding: 10px 4px; font-size: 12px; color: var(--text); }
/* El aviso de que hay filtros puestos. */
.rv-aviso-filtros {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  background: rgba(242,194,0,.10); border: 1px solid rgba(242,194,0,.4);
  border-radius: 9px; padding: 9px 13px; margin-bottom: 10px;
  font-size: 12.5px; color: var(--text); line-height: 1.5;
}
.rv-aviso-filtros b { color: var(--text); }
.rv-aviso-filtros > span:nth-child(2) { flex: 1; min-width: 200px; }
/* yl: los renglones de la planilla para revisar (al subir el Excel del Registro). */
.rv-aviso-planilla { align-items: flex-start; }
.rv-aviso-planilla ul { margin: 4px 0 0; padding-left: 18px; }
.rv-aviso-planilla li { margin: 2px 0; }
/* La lupa que lleva al usado de la retoma. */
.rv-ver-usado {
  position: absolute; right: 2px; top: 50%; transform: translateY(-50%);
  width: 20px; height: 20px; padding: 0; cursor: pointer; z-index: 2;
  border: 0; background: transparent; font-size: 11px; opacity: 1;
}
.rv-ver-usado:hover { opacity: 1; }

/* ══ TOTALIZADO POR AGENTE — TRES BLOQUES ══════════════════════════
   EL FONDO ES EL DEL REGISTRO DE VENTAS, NO EL DEL ARMAZÓN.
   Los armé con «--panel» y «--border», que son las variables del armazón, y
   el resto del Registro usa «--rv-panel» y «--rv-line». Resultado: los tres
   bloques salían gris azulado y la tabla de vendedor negra, una al lado de la
   otra. Ramiro lo vio enseguida en la captura.
   Con las variables del Registro los dos fondos son el mismo, sin tocar nada
   más: cuando cambie el tema, cambian juntos. */
/* EL TOTALIZADO POR AGENTE SE VEÍA CORTADO EN EL TELÉFONO (28/09/2026 · no).
   Había una regla de una sola columna para pantallas chicas, pero estaba
   ESCRITA ANTES que ésta: a igual peso gana la última, así que en el
   teléfono seguían las tres columnas y de cada una se veía sólo el nombre
   del agente; los números quedaban afuera.
   Se arregla sin @media, que es lo que evita que vuelva a pasar por el
   orden: las columnas se acomodan solas: tres en el monitor, una en el
   teléfono, y nunca más angostas que 280 px, que es lo que necesita una
   para mostrar el agente y sus números. */
.rv-agentes { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 12px; margin-bottom: 18px; }
.rv-agente-bloque {
  border: 1px solid var(--rv-line); border-radius: 14px; overflow: hidden;
  background: var(--rv-panel);
}
.rv-agente-bloque h3 {
  margin: 0; padding: 9px 14px; font-size: 11px; font-weight: 700;
  text-transform: uppercase; letter-spacing: .05em;
  background: var(--rv-panel2); color: var(--rv-text);
  border-bottom: 1px solid var(--rv-line);
}
.rv-agente-tabla { width: 100%; border-collapse: separate; border-spacing: 0; }
.rv-agente-tabla th {
  background: var(--rv-panel2); font-size: 10px; font-weight: 700;
  text-transform: uppercase; letter-spacing: .4px; color: var(--rv-text);
  text-align: center; padding: 7px 12px; border-bottom: 1px solid var(--rv-line);
}
.rv-agente-tabla td {
  padding: 7px 12px; font-size: 12.5px; color: var(--rv-text);
  border-bottom: 1px solid var(--rv-rowborder);
}
.rv-agente-tabla tbody tr:last-child td { border-bottom: 0; }
.rv-ag-izq { text-align: left !important; }
.rv-ag-n { text-align: center; }
.rv-ag-vacio { text-align: center; color: var(--rv-text); padding: 22px 12px !important; }
/* DIRECTAS no es un agente: es la casa vendiendo sola. Va primero y aparte. */
.rv-ag-directa td { background: color-mix(in srgb, var(--rv-amber) 5%, transparent); }
.rv-ag-directa td.rv-ag-izq { color: var(--rv-text); font-weight: 700; }
.rv-ag-total td {
  background: color-mix(in srgb, var(--rv-amber) 9%, transparent);
  font-weight: 700; border-top: 1px solid color-mix(in srgb, var(--rv-amber) 40%, transparent);
}
.perm-global {
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
  background: rgba(242,194,0,.07); border: 1px solid rgba(242,194,0,.3);
  border-radius: 10px; padding: 10px 14px; margin: 10px 0 14px;
}
.perm-global-tit { font-size: 12px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--text); }
.perm-global-ayuda { font-size: 12px; color: var(--text); flex: 1; min-width: 170px; }
.perm-seg { display: inline-flex; border: 1px solid var(--border, #2c3446); border-radius: 9px; overflow: hidden; }
.perm-seg-btn {
  background: var(--panel-2, #202940); border: 0; color: var(--text);
  font: inherit; font-size: 12px; padding: 6px 14px; cursor: pointer;
}
.perm-seg-btn + .perm-seg-btn { border-left: 1px solid var(--border, #2c3446); }
.perm-seg-btn:hover { color: var(--text); background: var(--panel, #2a3448); }
.perm-matriz .perm-col-area { min-width: 250px; text-align: left; }
.perm-matriz .perm-casa { text-align: center; padding-bottom: 6px; }
.perm-matriz .perm-sub th {
  font-size: 13px; text-transform: uppercase; letter-spacing: .5px;
  color: var(--text); font-weight: 700; padding: 4px 0 8px; text-align: center;
}
.perm-sep { border-left: 1px solid var(--border, #2c3446); }
.perm-celda { text-align: center; }
.perm-grupo td { background: rgba(255,255,255,.035); }
.perm-grupo .admin-usuarios-td-area { display: flex; align-items: center; gap: 8px; }
.perm-flecha {
  width: 18px; height: 18px; border: 0; background: transparent; cursor: pointer;
  color: var(--text); font-size: 12px; line-height: 1; transition: transform .15s;
}
.perm-flecha--on { transform: rotate(90deg); color: var(--text); }
.perm-cuenta { font-size: 12px; color: var(--text); }
.perm-rotar {
  margin-left: auto; background: transparent; border: 1px solid var(--border, #2c3446);
  color: var(--text); border-radius: 7px; padding: 2px 9px;
  font: inherit; font-size: 12px; cursor: pointer;
}
.perm-rotar:hover { color: var(--text); border-color: var(--text-muted, #c2cad8); }
.perm-hijo { padding-left: 40px !important; color: var(--text); }
/* El tilde de cada celda. «Sin acceso» se ve MARCADO, con cruz y en rojo
   apagado: no es lo mismo que nadie lo haya tocado. */
.perm-marca {
  width: 19px; height: 19px; border-radius: 50%; padding: 0; cursor: pointer;
  border: 1.5px solid var(--border, #2c3446); background: transparent;
  color: transparent; font-size: 12px; line-height: 1;
  display: inline-grid; place-items: center;
}
.perm-marca:hover { border-color: var(--text-muted, #c2cad8); }
.perm-marca--grupo { border-radius: 6px; width: 18px; height: 18px; }
.perm-marca--on.perm-marca--no { background: #c2606a; border-color: #c2606a; color: #000; }
.perm-marca--on.perm-marca--ver { background: #3ddc97; border-color: #3ddc97; color: #000; }
.perm-marca--on.perm-marca--editar { background: var(--accent-amber, #f2c200); border-color: var(--accent-amber, #f2c200); color: #000; }
.perm-marca--mixto { border-color: var(--accent-amber, #f2c200); color: var(--text); }

.sus-enc-barra {
  display: flex; align-items: center; gap: 9px; flex-wrap: wrap;
  padding: 10px 0 12px;
}
.sus-mes {
  height: 36px; background: var(--panel-2, #202940); border: 1px solid var(--border, #2c3446);
  border-radius: 9px; color: var(--text); padding: 0 11px; font: inherit; font-size: 13px;
}

/* La franja: que se note que es EL botón de la pantalla. */
.sus-franja {
  display: flex; align-items: center; gap: 12px; width: 100%; cursor: pointer;
  padding: 11px 16px; margin: 4px 0 0; border-radius: 10px; font: inherit; text-align: left;
  color: var(--text);
  background: linear-gradient(180deg, rgba(242,194,0,.11), rgba(242,194,0,.04));
  border: 1px solid var(--border, #2c3446); border-left: 4px solid var(--accent-amber, #f2c200);
}
.sus-franja:hover { background: rgba(242,194,0,.16); }
.sus-franja b { font-size: 14.5px; }
.sus-franja > span:nth-child(3) { color: var(--text); font-size: 12px; }
.sus-franja-mas {
  display: grid; place-items: center; width: 26px; height: 26px; border-radius: 8px; flex: none;
  background: var(--accent-amber, #f2c200); color: #000; font-weight: 700; font-size: 17px; line-height: 1;
}
.sus-franja-fl { margin-left: auto; color: var(--text); font-size: 12px; }
/* La franja que sólo explica y no abre nada: mismo aspecto, sin cursor de
   clic. Está para que la pantalla diga qué hacer cuando no hay datos. */
.sus-franja--quieta { cursor: default; }
.sus-franja--quieta:hover { background: linear-gradient(180deg, rgba(242,194,0,.11), rgba(242,194,0,.04)); }

/* LOS TÍTULOS DE SECCIÓN, A LO ANCHO DEL MARCO. Ramiro: con la pantalla
   vacía, un título corto y otro largo no dejaban entender que eran grupos.
   Ahora los tres ocupan el mismo ancho, con el número a la derecha. */
.sus-pantalla > .tnd-seccion,
.sus-pantalla .sus-sec {
  display: flex; align-items: center; gap: 10px; width: 100%;
  padding: 9px 16px; margin: 0;
}
.sus-pantalla .sus-sec .tnd-n { margin-left: auto; }

/* EL ALTO NO CAMBIA AL CAMBIAR DE SOLAPA. Antes el bloque crecía y se
   achicaba según la solapa elegida y la pantalla saltaba. */
.sco-cuerpo { min-height: 460px; }

/* El estado esperando el segundo clic: se distingue del elegido. */
.sus-est--confirma {
  background: var(--accent-amber, #f2c200) !important;
  border-color: var(--accent-amber, #f2c200) !important;
  color: #000 !important; font-weight: 700;
}

/* El formulario, ya sin overlay. */
.sus-form {
  --sus-alto: 36px;
  background: var(--panel, #1a2130); border: 1px solid var(--border, #2c3446);
  border-radius: 0 0 12px 12px; border-top: 0; margin-bottom: 12px; overflow: hidden;
}

/* Los tres estados de la cobranza, al pie del formulario. */
.sus-acc-fila--estados { align-items: center; }
.sus-acc-rot {
  font-size: 12px; text-transform: uppercase; letter-spacing: .5px;
  color: var(--text); margin-right: 4px;
}
.sus-est {
  height: var(--sus-alto, 36px); padding: 0 14px; border-radius: 9px; cursor: pointer;
  font: inherit; font-size: 12.5px; font-weight: 600;
  background: transparent; border: 1px solid var(--border, #2c3446); color: var(--text);
}
.sus-est:hover { color: var(--text); border-color: #4a566e; }
.sus-est--sin.sus-est--on { background: rgba(255,93,93,.18); border-color: #ff5d5d; color: var(--text); }
.sus-est--cob.sus-est--on { background: rgba(242,194,0,.20); border-color: var(--accent-amber, #f2c200); color: var(--text); }
.sus-est--pre.sus-est--on { background: rgba(61,220,151,.18); border-color: #3ddc97; color: var(--text); }

/* Las tres secciones del listado, con su color. */
.sus-sec { border-left: 4px solid var(--border, #2c3446); }
.sus-sec--sin { border-left-color: #ff5d5d; }
.sus-sec--cob { border-left-color: var(--accent-amber, #f2c200); }
.sus-sec--pre { border-left-color: #3ddc97; }
.sus-pill {
  display: inline-block; font-size: 12px; font-weight: 700; white-space: nowrap;
  padding: 2px 9px; border-radius: 999px; border: 1px solid currentColor;
}
.sus-pill--sin { color: #ff8a8a; } .sus-pill--cob { color: var(--text); } .sus-pill--pre { color: var(--text); }

/* Los indicadores. */
.sus-ind {
  background: var(--panel-2, #202940); border: 1px solid var(--border, #2c3446);
  border-radius: 12px; padding: 13px 15px; margin-bottom: 12px;
}
.sus-ind-cab { display: flex; align-items: center; gap: 10px; margin-bottom: 12px; flex-wrap: wrap; }
.sus-ind-cab b { font-size: 13.5px; }
.sus-ind-cab span { color: var(--text); font-size: 12px; }
.sus-ind-der { margin-left: auto; }
.sus-ind-grilla { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; }
.sus-ind-caja {
  display: flex; flex-direction: column; gap: 2px; text-align: left; cursor: pointer;
  background: var(--panel, #1a2130); border: 1px solid var(--border, #2c3446);
  border-radius: 11px; padding: 13px 15px; font: inherit; color: var(--text);
}
.sus-ind-caja:hover { border-color: var(--accent-amber, #f2c200); }
.sus-ind-tit { font-size: 12px; text-transform: uppercase; letter-spacing: .6px; color: var(--text); font-weight: 700; }
.sus-ind-num { font-size: 30px; font-weight: 700; line-height: 1.25; font-variant-numeric: tabular-nums; }
.sus-ind-num small { font-size: 12.5px; font-weight: 600; color: var(--text); }
.sus-ind-num--alerta { color: var(--text); }
.sus-ind-barra { display: block; height: 6px; border-radius: 999px; background: var(--lavado-3); overflow: hidden; margin: 8px 0; }
.sus-ind-barra i { display: block; height: 100%; background: var(--accent-amber, #f2c200); }
.sus-ind-barra i.ok { background: #3ddc97; } .sus-ind-barra i.mal { background: #ff5d5d; }
.sus-ind-pie { font-size: 12px; color: var(--text); line-height: 1.5; }
.sus-ind-ver { font-size: 12px; color: var(--text); margin-top: 8px; }

/* El objetivo del mes. */
.sus-obj { background: var(--panel, #1a2130); border: 1px solid var(--border, #2c3446); border-radius: 11px; padding: 13px 15px; margin-bottom: 12px; }
.sus-obj-grilla { display: grid; grid-template-columns: repeat(4, 1fr); gap: 11px; }
.sus-obj-pie { display: flex; align-items: center; gap: 10px; margin-top: 12px; padding-top: 11px; border-top: 1px solid var(--border, #2c3446); font-size: 12.5px; color: var(--text); flex-wrap: wrap; }
.sus-obj-pie b { color: var(--text); font-size: 15px; }
.sus-obj-der { margin-left: auto; }

/* El detalle de un indicador. */
.sus-det { width: min(760px, calc(96vw / var(--tcg-z, 1))); max-height: calc(88vh / var(--tcg-z, 1)); display: flex; flex-direction: column; overflow: hidden; }
.sus-det-cab { display: flex; align-items: flex-start; gap: 12px; padding: 15px 18px; border-bottom: 1px solid var(--border, #2c3446); }
.sus-det-cab b { font-size: 15px; } .sus-det-cab p { margin: 3px 0 0; font-size: 12px; color: var(--text); }
.sus-det-der { margin-left: auto; display: flex; gap: 9px; }
.sus-det-cuerpo { padding: 12px 18px; overflow: auto; flex: 1; min-height: 0; }
.sus-det-pie { display: flex; align-items: center; gap: 10px; padding: 13px 18px; border-top: 1px solid var(--border, #2c3446); background: var(--panel-2, #202940); flex-wrap: wrap; }
.sus-der { text-align: right; }
.sus-fila--on td { background: rgba(242,194,0,.14); }
.sus-total td { font-weight: 700; background: var(--panel-2, #202940); border-top: 2px solid var(--border, #2c3446); }
.lu-btn:disabled { opacity: .45; cursor: default; }

.sus-solapas {
  display: flex; gap: 4px; flex: none; padding: 8px 12px; flex-wrap: wrap;
  border-bottom: 1px solid var(--border, #2c3446); background: var(--lavado);
}
.sus-solapa {
  height: 30px; padding: 0 13px; border-radius: 8px; cursor: pointer;
  background: transparent; border: 1px solid transparent;
  color: var(--text); font: inherit; font-size: 12.5px; white-space: nowrap;
}
.sus-solapa:hover:not(:disabled) { color: var(--text); background: var(--lavado-2); }
.sus-solapa:disabled { opacity: .4; cursor: default; }
.sus-solapa--on {
  background: color-mix(in srgb, var(--vnv-marca, #6c7684) 30%, transparent);
  border-color: var(--vnv-marca, #6c7684); color: var(--text); font-weight: 700;
}
.sus-solapa--todo { margin-left: auto; border-color: var(--border, #2c3446); }
.sus-oculto { display: none; }
/* La tabla de cliente: el desplegable ocupa el ancho y la ficha queda al lado. */
.sus-cliente { display: flex; gap: 8px; }
.sus-cliente > select { flex: 1; min-width: 0; }
.sus-cliente > .lu-btn { flex: none; height: var(--sus-alto); }
.sus-cuerpo { flex: 1; min-height: 0; overflow: auto; padding: 16px 18px; }
.sus-bloque { margin-bottom: 18px; }
.sus-tit {
  display: flex; align-items: center; gap: 8px;
  font-size: 12px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase;
  color: var(--text);
  border-bottom: 1px solid var(--border, #2c3446); padding-bottom: 6px; margin-bottom: 10px;
}
.sus-tit-der { margin-left: auto; }
.sus-opt { text-transform: none; letter-spacing: 0; font-weight: 400; color: var(--text); }

.sus-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; }
.sus-grid .per-campo { display: flex; flex-direction: column; gap: 5px; min-width: 0; }
.sus-grid .per-campo > span,
.sus-bonif .per-campo > span {
  font-size: 12px; color: var(--text); text-transform: uppercase;
  letter-spacing: .4px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.sus-modal .per-campo > input,
.sus-modal .per-campo > select {
  height: var(--sus-alto); background: var(--panel-2, #202940);
  border: 1px solid var(--border, #2c3446); border-radius: 8px;
  color: var(--text); padding: 0 10px; font-size: 13px; font-family: inherit; width: 100%;
}
.sus-modal .per-campo > input[readonly] { background: var(--lavado-2); color: var(--text); }
.sus-modal .per-campo > textarea {
  min-height: 84px; background: var(--panel-2, #202940); border: 1px solid var(--border, #2c3446);
  border-radius: 8px; color: var(--text); padding: 9px 10px; font-size: 13px;
  font-family: inherit; width: 100%; line-height: 1.5; resize: vertical;
}
.sus-c2 { grid-column: span 2; } .sus-c3 { grid-column: span 3; } .sus-c4 { grid-column: span 4; }

/* Las opciones miden lo mismo que un campo: si no, el renglón se desparaja. */
.sus-ops { display: flex; gap: 6px; height: var(--sus-alto); }
.sus-op {
  flex: 1; background: var(--panel-2, #202940); border: 1px solid var(--border, #2c3446);
  color: var(--text); border-radius: 8px; font: inherit; font-size: 12.5px;
  cursor: pointer; white-space: nowrap; padding: 0 6px;
}
.sus-op--on {
  background: color-mix(in srgb, var(--vnv-marca, #6c7684) 34%, transparent);
  border-color: var(--vnv-marca, #6c7684); color: var(--text); font-weight: 700;
}

.sus-cuotas { display: grid; grid-template-columns: repeat(6, 1fr); gap: 10px; }
.sus-cuota { display: flex; flex-direction: column; gap: 5px; }
.sus-cuota > label {
  display: flex; align-items: center; gap: 6px; height: 14px; cursor: pointer;
  font-size: 12px; color: var(--text); text-transform: uppercase; letter-spacing: .4px;
}
.sus-cuota input[type="checkbox"] { accent-color: var(--accent-amber, #f2c200); margin: 0; }
.sus-cuota > input[type="text"] {
  height: var(--sus-alto); width: 100%; background: var(--panel-2, #202940);
  border: 1px solid var(--border, #2c3446); border-radius: 8px; color: var(--text);
  padding: 0 10px; font-size: 13px; font-family: inherit;
}
.sus-cuota--off { opacity: 1; }

.sus-bonif {
  display: grid; grid-template-columns: 1.3fr 1fr 1.2fr 1.2fr var(--sus-alto);
  gap: 10px; align-items: end; margin-bottom: 10px;
}
.sus-bonif .per-campo { display: flex; flex-direction: column; gap: 5px; min-width: 0; }
.sus-bonif-x {
  height: var(--sus-alto); background: var(--panel-2, #202940);
  border: 1px solid var(--border, #2c3446); color: var(--text);
  border-radius: 8px; cursor: pointer; font-family: inherit; font-size: 14px;
}
.sus-bonif-x:hover { border-color: #ff8a8a; color: #ff8a8a; }

.sus-fotos { display: grid; grid-template-columns: repeat(6, 1fr); gap: 10px; }
.sus-foto {
  aspect-ratio: 4 / 3; border: 1px dashed var(--border, #2c3446); border-radius: 9px;
  background: var(--panel-2, #202940); display: grid; place-items: center; overflow: hidden;
  color: var(--text); font-size: 12px; text-align: center; cursor: pointer; padding: 4px;
}
.sus-foto:hover { border-color: var(--accent-amber, #f2c200); color: var(--text); }
.sus-foto--con { border-style: solid; padding: 0; }
.sus-foto img { width: 100%; height: 100%; object-fit: cover; }

.sus-firma { max-width: 440px; background: var(--panel-2, #202940);
  border: 1px dashed var(--border, #2c3446); border-radius: 10px; padding: 9px; }
.sus-firma canvas {
  width: 100%; height: 130px; display: block; border-radius: 7px;
  background: #f7f8fa; touch-action: none; cursor: crosshair;
}
.sus-firma-pie { display: flex; align-items: center; gap: 8px; margin-top: 7px; }
.sus-firma-pie span { font-size: 12px; color: var(--text); }
.sus-firma-pie > :last-child { margin-left: auto; }
.sus-ayuda { font-size: 12px; color: var(--text); line-height: 1.5; margin: 10px 0 0; }
.sus-ayuda b { color: var(--text); }
.sus-legal {
  width: 100%; min-height: 76px; background: var(--lavado);
  border: 1px solid var(--border, #2c3446); border-radius: 9px; padding: 10px 12px;
  color: var(--text); font-size: 12px; line-height: 1.6;
  font-family: inherit; resize: vertical;
}

.sus-enlace { display: grid; grid-template-columns: 1fr auto auto; gap: 10px; align-items: end; }
.sus-chip {
  display: inline-flex; align-items: center; justify-content: center; height: var(--sus-alto);
  padding: 0 13px; background: rgba(242,194,0,.12); border: 1px solid rgba(242,194,0,.35);
  color: var(--text); border-radius: 8px; font-size: 12px; white-space: nowrap;
}
.sus-wa { border-color: #25d366 !important; color: var(--text) !important; }

/* LOS BOTONES. Arriba los dos que cierran el trabajo, del mismo largo: uno
   guarda a medio hacer, el otro cierra la suscripción. Abajo, las formas de
   sacarla del sistema. Pedido de Ramiro. */
.sus-acciones { flex: none; padding: 13px 18px; border-top: 1px solid var(--border, #2c3446);
  background: var(--lavado); display: flex; flex-direction: column; gap: 8px; }
.sus-acc-fila { display: flex; gap: 8px; flex-wrap: wrap; }
.sus-acc-fila--sec .lu-btn { min-height: var(--sus-alto); }
.sus-btn-grande { flex: 1 1 0; min-height: 42px; justify-content: center; font-size: 13.5px; font-weight: 700; }
.sus-acc-der { margin-left: auto; }
.sus-btn-borrar { border-color: #ff5d5d !important; color: #ff8a8a !important; }
.sus-fila { cursor: pointer; }
.sus-fila:hover td { background: color-mix(in srgb, var(--accent-amber, #f2c200) 10%, transparent); }

/* SCORING. Las pastillas dicen de un vistazo en qué estado está cada
   suscripción, y el aviso ámbar recuerda que un scoring negativo NO frena el
   circuito pero sigue pendiente hasta que se resuelva. */
.sco-pill {
  display: inline-block; font-size: 12px; font-weight: 700; letter-spacing: .02em;
  padding: 2px 9px; border-radius: 999px; border: 1px solid currentColor; white-space: nowrap;
}
.sco-pill--ok { color: var(--text); }
.sco-pill--mal { color: #ff8a8a; background: rgba(255,93,93,.12); }
.sco-pill--resuelto { color: var(--text); }
.sco-pill--sin { color: var(--text); }
/* El botón de eliminar un peritaje: rojo apagado, para que no compita con
   «Abrir» y «Enviar», que son los que se usan todos los días. */
.per-borrar { border-color: rgba(255,93,93,.55) !important; color: #ff8a8a !important; }
.sco-aviso {
  display: flex; gap: 9px; align-items: flex-start; margin: 10px 0;
  background: rgba(242,194,0,.08); border: 1px solid rgba(242,194,0,.35);
  border-radius: 8px; padding: 10px 13px; font-size: 12px; color: var(--text); line-height: 1.5;
}
.sco-aviso b { color: var(--text); }

/* Grupo y orden se cargan en la tabla misma, sin abrir un modal por cada
   suscripción: se agrupan de a decenas y abrir y cerrar sería la tarea. */
/* Los renglones del negocio y de la forma de pago: concepto e importe, y se
   agregan los que hagan falta. En los cinco archivos de Ramiro no hay dos
   boletos con los mismos conceptos, así que la lista no puede ser fija. */
.bad-reng { display: grid; grid-template-columns: 1fr 180px var(--sus-alto, 36px); gap: 10px; align-items: end; margin-bottom: 8px; }
.bad-suma { text-align: right; font-size: 12px; color: var(--text); padding-top: 4px; }
.bad-suma b { color: var(--text); font-variant-numeric: tabular-nums; }
.bad-suma--grande { font-size: 12.5px; text-align: left; margin-top: 10px; padding-top: 10px; border-top: 1px solid var(--border, #2c3446); line-height: 1.9; }
.bad-suma--grande b { color: var(--text); }

.agr-in {
  width: 100%; height: 30px; background: var(--panel-2, #202940);
  border: 1px solid var(--border, #2c3446); border-radius: 7px; color: var(--text);
  padding: 0 8px; font-size: 12.5px; font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif;
}
.agr-contrato { font-weight: 700; color: var(--text); }

/* La marca, adelante del modelo: una sola línea con marca, modelo y versión. */
.pc-in--marca { max-width: 130px; }
.pc-campo--ancho { flex: 1 1 220px; min-width: 160px; }
/* Los botones de cada modelo: enviar, PDF y baja. Chicos, porque el dato
   importante de ese rincón es el precio desde. */
.pc-tar-acc { display: flex; gap: 5px; flex-wrap: wrap; justify-content: flex-end; margin-top: 4px; }
.pc-tar-acc .lu-btn { font-size: 12px; padding: 2px 8px; }

/* El «Enviar» de cada plan: chico y al costado, para que no compita con la
   cuota, que es el número que se mira. */
.pc-enviar-plan { flex: none; margin-left: 8px; }
/* ══ LA TABLA DE PLANES ════════════════════════════════════════════
   Reemplaza a las tarjetas. Maqueta aprobada por Ramiro: con tarjetas,
   quince planes no se pueden comparar entre sí. La celda ES el campo. */
/* LO QUE SE SALÍA DE LA TABLA (28/09/2026 · nk). El auditor lo midió: la
   tabla ocupa 1035 y su contenido 1203, así que sobresalía por la derecha y
   la barra de desplazamiento quedaba suelta debajo, pegada al borde de la
   pantalla, sin que se entendiera a qué pertenecía.
   La tabla es ancha de verdad —doce columnas de importes— y achicarla más
   sería volver a la letra chica. Así que el desplazamiento se queda, pero
   ADENTRO de una caja con borde: se ve dónde empieza y dónde termina lo que
   se corre, y la barra pertenece a algo. */
.pc-tabla-wrap {
  overflow-x: auto; max-width: 100%;
  border: 1px solid var(--border, #2a3345); border-radius: 10px;
}
.pc-tabla-wrap > .pc-tabla-planes { border: 0; }
/* Un ancho mínimo para que las doce columnas no se apelotonen: por debajo de
   esto se corre la caja, que es mejor que no poder leer un importe. */
.pc-tabla-wrap > .pc-tabla-planes { min-width: 1080px; }
.tcg-claro .pc-tabla-wrap { border-color: #d4dae6; background: #fff; }

/* LOS ICONOS NO SE VAN CON EL DESPLAZAMIENTO (28/09/2026 · nl, Ramiro con
   foto). La vigencia, el duplicar y el borrar están a propósito fuera de la
   grilla —sin borde ni fondo, como pediste—, pero al ser la última columna
   de una tabla más ancha que la pantalla, había que correrse hasta el final
   para tocarlos, y en el camino quedaban colgando del borde.
   Ahora quedan pegados a la derecha y el resto de la tabla se desliza por
   debajo. Llevan el fondo del panel, si no el texto pasaría por atrás. */
.pc-tabla-planes td.pc-xl-acc {
  position: sticky; right: 0; z-index: 2;
  background: var(--panel, #161c2a) !important;
  box-shadow: -8px 0 8px -8px rgba(0,0,0,.45);
}
.tcg-claro .pc-tabla-planes td.pc-xl-acc {
  background: #ffffff !important;
  box-shadow: -8px 0 8px -8px rgba(15,23,42,.18);
}
/* El renglón de la derecha de las solapas: el buscador y el mes. */
.tcg-env-sol-der {
  margin-left: auto; display: flex; align-items: center; gap: 8px;
  padding-bottom: 4px;
}
.tcg-env-sol-der .pc-buscar { width: 230px; height: 32px; }
.tcg-env-sol-der .pc-sel { height: 32px; }
.pc-tabla-planes { width: 100%; border-collapse: collapse; table-layout: fixed; }
/* El encabezado va en GRIS, no en el color de la casa. Hay una regla general
   que pinta los «th» con el acento del concesionario —en Ginza salían rojos—
   y acá no corresponde: el color tiene que quedar para los datos, no para los
   rótulos. Lleva «!important» porque esa regla general está escrita después. */
/* Los títulos en 9,5 px eran ilegibles: 11 y centrados, que es como se leen
   las columnas de importes que tienen debajo. (28/09/2026 · nk) */
.pc-tabla-planes th {
  font-size: 13px; color: var(--text) !important; text-transform: uppercase;
  letter-spacing: .4px; text-align: center; padding: 10px 8px; font-weight: 700;
  background: var(--panel-2, #1e2637); border-bottom: 1px solid var(--border, #2e3648); }
.pc-tabla-planes td { padding: 5px 8px; border-bottom: 1px solid rgba(255,255,255,.05); vertical-align: middle; }
.pc-th-fl { width: 34px; } .pc-th-foto { width: 64px; }
.pc-th-vig { width: 44px; } .pc-th-acc { width: 44px; }
.pc-centro, .pc-celda--centro { text-align: center; }
.pc-der { text-align: right; }
.pc-fila--baja td { opacity: 1; }
.pc-celda {
  width: 100%; height: 28px; background: transparent; border: 1px solid transparent;
  border-radius: 6px; color: var(--text); padding: 0 7px; font: inherit; font-size: 12.5px;
}
.pc-celda:hover { border-color: var(--border, #2e3648); background: var(--panel-2, #1e2637); }
.pc-celda:focus {
  outline: none; border-color: var(--accent-amber, #f2c200); background: var(--panel-2, #1e2637);
  box-shadow: 0 0 0 2px rgba(242,194,0,.16);
}
.pc-calc { font-variant-numeric: tabular-nums; color: var(--text); font-weight: 700; }
.pc-foto-mini {
  width: 52px; height: 39px; border-radius: 6px; padding: 0; overflow: hidden; cursor: pointer;
  background: var(--panel-3, #232c3f); border: 1px dashed var(--border, #2e3648);
  display: grid; place-items: center; font-size: 12px; color: var(--text);
}
.pc-foto-mini img { width: 100%; height: 100%; object-fit: cover; }
.pc-ico {
  width: 26px; height: 26px; border-radius: 7px; padding: 0; cursor: pointer;
  border: 1px solid var(--border, #2e3648); background: transparent;
  color: var(--text); font-size: 12px; display: grid; place-items: center;
}
.pc-ico:hover:not(:disabled) { color: var(--text); border-color: var(--text-muted, #c2cad8); }
.pc-ico:disabled { opacity: .35; cursor: default; }
.pc-ico--wa:hover:not(:disabled) { color: var(--text); border-color: #25d366; }
.pc-acc { display: flex; gap: 5px; justify-content: flex-end; }
/* El tilde de vigencia: era lo que no se veía. */
.pc-vig {
  width: 24px; height: 24px; border-radius: 7px; padding: 0; cursor: pointer;
  border: 1.5px solid var(--border, #2e3648); background: transparent; color: transparent;
  display: inline-grid; place-items: center; font-size: 13px;
}
.pc-vig:hover { border-color: var(--text-muted, #c2cad8); }
.pc-vig--on { background: #3ddc97; border-color: #3ddc97; color: #000; }
.pc-detalle td { background: var(--lavado); padding: 10px 16px 14px; }
.pc-rangos { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; }
.pc-rango { background: var(--panel-2, #1e2637); border: 1px solid var(--border, #2e3648); border-radius: 8px; padding: 7px 10px; }
.pc-rango span { display: block; font-size: 12px; text-transform: uppercase; letter-spacing: .4px; color: var(--text); }
.pc-rango b { font-size: 14px; font-variant-numeric: tabular-nums; }
.pc-obs { display: flex; gap: 9px; align-items: center; margin-top: 10px; }
.pc-obs span { font-size: 12px; text-transform: uppercase; letter-spacing: .4px; color: var(--text); white-space: nowrap; }
/* La cabecera de «Sin vigencia» es un botón: se abre y se cierra. */
.pc-viejos-cab { width: 100%; text-align: left; cursor: pointer; font: inherit; }
/* Los tramos: de qué cuota a qué cuota y cuánto. Son los que generan el
   detalle de cuotas que sale impreso. */
.pc-tramos { margin-bottom: 12px; }
.pc-tramos-cab { display: flex; align-items: baseline; gap: 9px; margin-bottom: 8px; flex-wrap: wrap; }
.pc-tramos-cab b { font-size: 12px; }
.pc-tramos-cab span { font-size: 12px; color: var(--text); }
.pc-tramos-mas { margin-left: auto; }
.pc-tramo { display: grid; grid-template-columns: 1fr 90px 90px 130px 26px; gap: 8px; margin-bottom: 6px; align-items: center; }
.pc-tramo .pc-celda { border-color: var(--border, #2e3648); background: var(--panel-2, #1e2637); }
/* El editor de formas de adjudicación. */
.pc-formas { background: var(--panel-2, #1e2637); border: 1px solid var(--border, #2e3648); border-radius: 11px; padding: 12px 14px; margin-bottom: 12px; }
.pc-formas-cab { display: flex; align-items: baseline; gap: 9px; margin-bottom: 10px; flex-wrap: wrap; }
.pc-formas-cab b { font-size: 13px; }
.pc-formas-cab span { font-size: 12px; color: var(--text); flex: 1; min-width: 160px; }
.pc-formas-lista { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
.pc-forma { display: flex; gap: 6px; align-items: center; }
.pc-forma .pc-celda { border-color: var(--border, #2e3648); background: var(--panel, #161d2b); }

.pc-compacto { margin-top: 4px; }
.pc-compacto .pc-tabla { width: 100%; }
.pc-compacto-fila { cursor: pointer; }
.pc-compacto-fila:hover td { background: color-mix(in srgb, var(--accent-amber, #f2c200) 10%, transparent); }
/* La modalidad, en chico y debajo del código: es dato de apoyo, no título. */
.pc-compacto-mod { display: block; font-size: 12px; color: var(--text); }
.pc-hoja { background: #ffffff; color: #000; border-radius: 10px; padding: 16px; max-width: 800px; margin: 0 auto; }
.pc-hoja-mod { display: flex; gap: 14px; border-bottom: 1px solid #e3e6ea; padding: 12px 0; }
.pc-hoja-foto { width: 156px; flex: none; display: grid; place-items: center; color: var(--text); font-size: 12px; }
.pc-hoja-foto img { width: 100%; border-radius: 6px; }
.pc-hoja-planes { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 12px; }
.pc-hoja-plan { display: flex; gap: 14px; align-items: flex-start; flex-wrap: wrap; }
.pc-hoja-datos { flex: 1 1 220px; min-width: 190px; }
.pc-hoja-tit { font-weight: 700; font-size: 12.5px; background: #f4f5f7; padding: 4px 7px; }
.pc-hoja-precio { font-weight: 700; font-size: 13px; margin: 4px 0; }
.pc-hoja-cond { font-size: 12px; color: #000; }
.pc-hoja-adj { font-style: italic; color: var(--text); font-size: 12px; }
.pc-hoja-tabla { flex: 0 0 250px; border-collapse: collapse; font-size: 12px; color: #000; }
.pc-hoja-tabla th {
  background: #f4f5f7; color: #000; text-align: left;
  border-bottom: 1px solid #dfe3e8; padding: 3px 7px; font-size: 13px;
}
.pc-hoja-tabla td { padding: 3px 7px; border-bottom: 1px solid #eceff2; }
.pc-hoja-pie { color: var(--text); font-size: 12px; padding-top: 10px; }

/* ══════════════════════════════════════════════════════════════════════
   MODO CLARO · LA REGLA
   Dicha por Ramiro: si elijo modo claro, la letra es negra en todos lados; si
   elijo oscuro, es blanca. Salvo lo que está pintado a propósito para
   resaltar algo.
   Medido antes de escribir esto: «Hola, PRUEBA» daba 1,06 de contraste sobre
   su fondo —prácticamente invisible— porque heredaba el color del tema
   oscuro. El mínimo para leer sin esfuerzo es 4,5.
   Va como regla general y no campo por campo: cada vez que se agrega una
   pantalla habría que acordarse, y no pasa.
   ══════════════════════════════════════════════════════════════════════ */
/* LO PINTADO CON EL COLOR DE LA CASA NO SE TOCA. La regla de abajo pone
   tinta oscura en todo, y sobre el azul de Vesubio o el rojo de Ginza eso
   deja el título ilegible. Las bandas y el pie llevan su propia tinta. */
/* Yo había puesto «color: inherit» acá y era peor que el problema: le ganaba
   a la regla propia de cada pieza —«.enc-vista» pide la tinta de la casa— y
   las dejaba heredando cualquier cosa. El revisor las encontró: blanco sobre
   el amarillo de Renault, 1,47 a 1. Va la tinta de la casa, y si no hay casa
   la del tema. */
.tcg-claro .tcg-envoltura, .tcg-claro .tcg-envoltura *,
.tcg-claro .cip-cab, .tcg-claro .cip-cab *,
.tcg-claro .cip-pie, .tcg-claro .cip-pie *,
/* Misma excepción que arriba, por el mismo motivo. */
.tcg-claro .per-cab, .tcg-claro .per-cab *:not(input):not(select):not(textarea):not(.bap-lista):not(.bap-lista *) {
  color: var(--casa-tinta, var(--text, #1a1d24));
}
/* LA REGLA QUE PINTABA TODO (14/09/2026). El revisor de contraste que pidió
   Ramiro la dejó al descubierto: los seis elementos ilegibles del sector
   tenían la misma letra, «rgb(26,29,36)», y salía de acá.
   Nombraba div, span, td, th, p y li, así que le ganaba a cualquier regla de
   módulo y pintaba de oscuro TAMBIÉN lo que está encima de un fondo oscuro
   —el sello, los rótulos de Tesorería, las cabeceras de tabla—. Negro sobre
   negro, y no había forma de que un módulo se defendiera.
   Ahora la tinta se declara UNA vez y baja por herencia, que es como tiene
   que ser: el que está sobre un fondo de color pone la suya y gana. Si algo
   queda ilegible, el revisor lo encuentra en diez segundos. */
.tcg-claro { color: var(--text, #1a1d24); }
.tcg-claro .tcg-fr-tit, .tcg-claro .tcg-lienzo,
.tcg-claro .tcg-side, .tcg-claro .tcg-sec { color: var(--text, #1a1d24); }
/* Lo que SÍ conserva su color: lo pintado a propósito para resaltar. */
.tcg-claro .tcg-fr-casa, .tcg-claro .tcg-etq--calle,
.tcg-claro [class*=--rojo], .tcg-claro [class*=--verde],
.tcg-claro [class*=--amarillo], .tcg-claro [class*=--naranja],
.tcg-claro .vn-ok, .tcg-claro .pc-suma, .tcg-claro .pc-resta {
  color: inherit;
}
/* El nombre del concesionario va en el color de su casa. En oscuro se lee
   bien; en claro no: el amarillo de Giorgi sobre blanco daba 1,55 de
   contraste, y el mínimo para leer sin esfuerzo es 4,5. Se oscurece
   mezclándolo con negro, así conserva la identidad y se puede leer. */
.tcg-fr-casa { color: var(--text); }
.tcg-claro .tcg-fr-casa {
  color: var(--text);
}
/* El texto de apoyo sigue siendo más suave, pero legible: gris oscuro y no
   el gris del tema oscuro, que sobre blanco no se ve. */
.tcg-claro .tcg-side-tx, .tcg-claro .com-ayuda, .tcg-claro .pc-ayuda,
.tcg-claro .tcg-fr-sub, .tcg-claro .per-sub {
  color: #000;
}

/* El comparativo contra el mes anterior: verde si vendimos más, rojo si menos.
   Pedido de Ramiro. En oscuro ya salía así; en claro la regla general lo
   pintaba de negro junto con todo lo demás, y además el verde y el rojo del
   tema oscuro sobre fondo blanco quedan lavados: se usan tonos más oscuros.
   Va DESPUÉS de la regla general para ganarle por orden, sin !important. */
.tcg-claro .ivj-vs-up, .ivj-claro .ivj-vs-up { color: #000; }
.tcg-claro .ivj-vs-down, .ivj-claro .ivj-vs-down { color: #c0392b; }

/* ══ MODO CLARO · LETRA NEGRA Y MÁS VIDA (21/09/2026, Ramiro) ═══════════
   «En el menú y en las pantallas no tiene letra negra y faltaría resaltar
   algunos bordes». Lo que estaba gris y ahora va negro:
     · el texto de cada ítem de la columna de la izquierda (tenía #4a5160);
     · los títulos de las tablas (tomaban el gris de «texto de apoyo»);
     · el texto de las celdas.
   La ayuda (las líneas chicas que explican) sigue más suave, a propósito.
   Para darle vida, sin cargar: el ítem donde estás parado lleva una barra
   con el color de la casa y un fondo apenas teñido; el pasar el mouse se
   nota (antes aclaraba con blanco sobre blanco, o sea nada); las tarjetas y
   tablas tienen una sombra corta que las despega del fondo; y el título de
   cada tabla tiene su línea de abajo marcada. Todo cuelga de «.tcg-claro»:
   el modo oscuro queda igual. */
.tcg-claro .tcg-side-tx { color: var(--text, #0e1116); }
.tcg-claro .tcg-side-tit { color: var(--text); font-weight: 800; }
.tcg-claro .tcg-side-it:hover { background: color-mix(in srgb, var(--casa-activa, #2563eb) 8%, #ffffff); }
.tcg-claro .tcg-side-it[aria-current="true"] {
  background: color-mix(in srgb, var(--casa-activa, #2563eb) 13%, #ffffff);
  box-shadow: inset 3px 0 0 var(--casa-activa, #2563eb);
}
.tcg-claro .tcg-side-it[aria-current="true"] .tcg-side-tx { font-weight: 700; }
.tcg-claro .tcg-sec { color: var(--text, #0e1116); }
.tcg-claro .tcg-sec:hover { background: color-mix(in srgb, var(--casa-activa, #2563eb) 8%, #ffffff); }
.tcg-claro .tcg-plegar { color: var(--text, #0e1116); }
/* Las tablas: título negro y marcado, celdas negras, fila al pasar teñida. */
.tcg-claro .sc-table thead th, .tcg-claro .asg-tabla thead th, .tcg-claro .rob-tabla thead th,
.tcg-claro .pat-tabla thead th, .tcg-claro .rv-tabla thead th, .tcg-claro .sd-tabla thead th {
  color: var(--text, #0e1116); font-weight: 700; border-bottom: 2px solid var(--border, #c3cad6);
}
.tcg-claro .sc-table tbody td, .tcg-claro .asg-tabla tbody td, .tcg-claro .rob-tabla tbody td,
.tcg-claro .pat-tabla tbody td, .tcg-claro .rv-tabla tbody td, .tcg-claro .sd-tabla tbody td {
  color: var(--text, #0e1116);
}
.tcg-claro .sc-table tbody tr:hover td { background: color-mix(in srgb, var(--casa-activa, #2563eb) 7%, #ffffff); }
/* Tarjetas y tablas despegadas del fondo, con una sombra corta. */
.tcg-claro .sc-panel, .tcg-claro .sc-table-wrap, .tcg-claro .po-op, .tcg-claro .tvn-ff-card {
  box-shadow: 0 1px 2px rgba(15,23,42,.06), 0 4px 14px rgba(15,23,42,.05);
}
/* (Los botones no se tocan: algunos van sobre la banda de color de la casa y
   ahí tienen que seguir con su tinta clara.) */

/* ══════════════════════════════════════════════════════════════════════
   IMPRESIÓN · el armazón no va al papel
   En el PDF que mandó Ramiro se veían «RAMIRO LAGARES», «Cerrar» y «Mi clave»
   encima de la tabla del informe. La causa: la franja del enrutador está
   FIJA en pantalla, y lo fijo se imprime en cada hoja y encima del contenido.
   Es lo mismo que ya pasó con los modales.
   El menú, la franja, la columna lateral y los botones son herramientas para
   moverse por el sistema: en papel no sirven para nada y tapan lo que sí.
   Va al final para ganarle a cualquier regla anterior por orden.
   ══════════════════════════════════════════════════════════════════════ */
@media print {
  .tcg-top, .tcg-franja, .tcg-side, .tcg-temas-fijo, .tcg-plegar,
  .tcg-buscar, .tcg-fr-der, .tcg-tbtn, .tcg-casa-sel {
    display: none !important;
  }
  /* ══ NINGÚN BOTÓN VA AL PAPEL ══════════════════════════════════════
     El botón «Imprimir» del informe genera la hoja en una ventana aparte y
     ahí no hay botones. PERO Ctrl+P y el «Exportar a PDF» de siempre siguen
     imprimiendo la pantalla, y por ahí volvían a salir el zoom, el ⚙, los
     accesos cruzados y el selector de mes. Ramiro lo reportó con foto.
     Se tapan por CSS para que salga limpio POR CUALQUIER CAMINO. */
  .ivj-header-acc, .ivj-zoom, .ivj-imp, .ivj-btn-modo,
  .ivj-mes-select, .ivj-toolbar, .ivj-tab-btn,
  .lc-header-acciones, .lc-btn-pdf, .rv-embudo, .rv-aviso-filtros,
  .sus-franja, .sus-acciones {
    display: none !important;
  }
  /* Los campos editables salen como texto, no como cajas: en el papel una
     caja vacía se lee como un dato que falta. */
  .ivj-loc-in, .ivj-pie-planilla input, .ivj-celda-input {
    border: 0 !important; background: transparent !important;
    box-shadow: none !important; padding: 0 !important;
    color: #000 !important; text-align: inherit !important;
  }
  /* Lo que quedaba fijo pasa a estático: si no, se repite en cada hoja. */
  .tcg-app, .tcg-cuerpo, .tcg-lienzo, .tcg-lienzo-pad {
    position: static !important;
    height: auto !important; max-height: none !important;
    overflow: visible !important;
    padding: 0 !important; margin: 0 !important;
  }
  /* Sin la columna lateral, el lienzo tiene que ocupar la hoja entera: medido,
     quedaba corrido a la derecha con el hueco que dejaba la columna. */
  .tcg-cuerpo { display: block !important; }
  .tcg-lienzo { width: 100% !important; max-width: none !important; flex: none !important; }
  .tcg-linea-casa { display: none !important; }
}

/* El botón para cargar el usado que todavía no está peritado. Era chico y
   decía «No está peritado · Cargarlo»: nombraba la condición y no la acción.
   Ahora dice qué hace y se ve. Clase propia: «vnv-usado-alta» ya existe y es
   el formulario de alta, no el botón. */
.vnv-cargar-usado { min-height: 40px; padding: 8px 16px; font-size: 13px; font-weight: 700; }
/* CON EL COLOR DE LA CASA, NO CON EL ÁMBAR DEL SISTEMA. El botón vive en la
   cabecera de la sección, que está pintada con el color de la casa. Heredaba
   «.lu-btn--accion», que es ámbar fijo: en Vesubio y Ginza quedaba de un color
   ajeno, y en Jorge Giorgi —cuya casa TAMBIÉN es amarilla— quedaba amarillo
   sobre amarillo y no se veía. Ramiro lo reportó con foto de los dos casos.
   La tinta es la de la franja, que ya está calculada para ir sobre ese color:
   negra en Giorgi, blanca en Vesubio y Ginza. */
.vnv-cargar-usado,
.vnv-cargar-usado.lu-btn--accion {
  background: color-mix(in srgb, var(--vnv-marca-txt, #131824) 14%, transparent);
  border: 1px solid var(--vnv-marca-txt, #131824);
  color: var(--vnv-marca-txt, #131824);
}
.vnv-cargar-usado:hover:not(:disabled),
.vnv-cargar-usado.lu-btn--accion:hover:not(:disabled) {
  background: var(--vnv-marca-txt, #131824);
  color: var(--vnv-marca, var(--accent-amber, #f2c200));
}
.vnv-cargar-usado:disabled { opacity: .45; }

/* El aviso de que quedó una venta a medias. Va arriba de todo y con color de
   atención: es lo primero que hay que decidir al entrar. */
.vnv-borrador {
  display: flex; gap: 10px; align-items: center; flex-wrap: wrap;
  margin: 0 0 10px; padding: 9px 12px; border-radius: 8px;
  background: color-mix(in srgb, var(--accent-amber, #f2c200) 12%, transparent);
  border: 1px solid color-mix(in srgb, var(--accent-amber, #f2c200) 40%, transparent);
  font-size: 12.5px;
}
.vnv-borrador > span { flex: 1; min-width: 180px; }

/* Embebida en el lienzo del armazón: sin la capa que oscurece el fondo, sin
   ancho de ventana y sin alto máximo, porque el lienzo ya desplaza. Mismo
   criterio que «.proc-embebido» y «.ing-embebido». */
/* Embebida toma el fondo del armazón —el mismo del menú y la portada— en vez
   de quedar transparente sobre lo que haya atrás. Pedido de Ramiro: «en lugar
   de que todo sea negro ponelo del color del menú o portada». */
.pc-embebido { display: block; background: var(--bg); color: var(--text); min-height: 100%; }
.pc-embebido .com-cuerpo { padding-left: 0; padding-right: 0; }
.pc-embebido .pc-tabla-caja { max-height: none; }
.pc-embebido .per-pie { border-radius: 0; }

.asig-tabla-caja {
  max-height: 232px; overflow: auto;
  border: 1px solid var(--border, #252d3f); border-top: none;
  border-radius: 0 0 8px 8px;
}
.asig-tabla { width: 100%; border-collapse: collapse; font-size: 12px; }
.asig-tabla thead th {
  position: sticky; top: 0; z-index: 1;
  background: var(--panel-2, #202940); text-align: left;
  padding: 6px 8px; font-size: 13px; text-transform: uppercase;
  letter-spacing: .4px; color: var(--text);
  border-bottom: 1px solid var(--border, #252d3f); white-space: nowrap;
}
.asig-tabla tbody td {
  padding: 6px 8px; text-align: left; white-space: nowrap;
  border-bottom: 1px solid var(--border, #252d3f);
}
.asig-tabla tbody tr:hover { background: rgba(255,255,255,.035); }
.asig-fila--on { background: color-mix(in srgb, var(--accent-amber, #f2c200) 13%, transparent); }
.asig-mono { font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; }
.asig-vacio { text-align: center; color: var(--text); padding: 22px 8px; }

/* El tilde: un cuadrado, como en la maqueta. Redondo se lee como «elegí una
   sola», y en Intercambiar se eligen dos. */
.asig-td-tilde { width: 34px; text-align: center; padding: 4px !important; }
.asig-tilde {
  appearance: none; width: 17px; height: 17px; line-height: 1;
  border: 1.5px solid var(--text-muted, #9aa3b2); border-radius: 4px;
  background: none; color: var(--text);
  font-size: 12px; font-weight: 700; cursor: pointer; padding: 0;
}
.asig-tilde--on {
  background: var(--accent-amber, #f2c200);
  border-color: var(--accent-amber, #f2c200); color: #000;
}

.asig-td-lapiz { width: 36px; text-align: center; }

/* Los campos de «qué vehículo espera» */
.asig-pedido {
  border: 1px solid var(--border, #252d3f); border-radius: 8px;
  padding: 0 12px 12px; margin-bottom: 12px; background: var(--panel-2, #202940);
}
.asig-pedido-campos { display: flex; gap: 10px; flex-wrap: wrap; align-items: flex-end; padding-top: 10px; }
.asig-campo { display: flex; flex-direction: column; gap: 3px; font-size: 12px; }
.asig-campo span { color: var(--text); text-transform: uppercase; letter-spacing: .4px; font-size: 12px; }
.asig-campo input {
  background: var(--panel, #1b2233); border: 1px solid var(--border, #252d3f);
  border-radius: 6px; color: var(--text, #ecf0f4); font: inherit; padding: 6px 9px; min-width: 150px;
}
.asig-porque { font-size: 12px; color: var(--text); }
.asig-pasa { flex: 1 1 100%; font-size: 12px; color: var(--text); }
.asig-pasa b { color: var(--text, #ecf0f4); }


/* ── El usado en parte de pago sale de los peritajes ──────────────────
   Dos carteles con la misma forma y distinto peso: el rojo TRABA hasta
   que se marque re-compra, el azul solamente avisa. Van al final de
   baseCss a propósito, como el resto de lo nuevo. */
.ret-aviso {
  display: flex; gap: 10px; align-items: flex-start;
  border-radius: 7px; padding: 10px 12px; margin: 0 0 12px;
  font-size: 12.5px; line-height: 1.45;
}
.ret-aviso-ico { font-size: 15px; line-height: 1.2; flex: none; }
.ret-aviso b { display: block; margin-bottom: 2px; }
.ret-aviso p { margin: 0; font-size: 12px; color: var(--text, #ecf0f4); }
.ret-aviso--traba {
  background: rgba(234, 109, 99, .12);
  border: 1px solid var(--red, #ea6d63); color: var(--red, #ea6d63);
}
.ret-aviso--recompra {
  background: rgba(79, 142, 247, .10);
  border: 1px solid rgba(79, 142, 247, .45); color: var(--text);
}
.ret-aviso .ret-tilde { margin-top: 7px; }

/* De qué peritaje salió la ficha. Es una nota, no un campo. */
.ret-viene {
  margin: 0 0 12px; font-size: 12px; line-height: 1.45;
  color: var(--text);
}
.ret-viene b { color: var(--text); }

/* ══ LA PERILLA DE LETRA DEL INFORME ══════════════════════════════════
   Va al lado de la del zoom y se ve igual: son dos controles hermanos y
   parecerse es lo que dice que hacen cosas del mismo tipo. Los rótulos son
   «A−» y «A+» en vez de «−» y «+» para que a simple vista se distinga cuál
   es cuál sin leer el título. */
.ivj-letra button { min-width: 30px; font-size: 12.5px; letter-spacing: -.02em; }
.ivj-letra span { min-width: 40px; }
/* Los controles del informe NO se escalan con la letra: ver moverse la propia
   barra que uno está moviendo desconcierta. Se los deja en 1 explícitamente
   por si la variable llegara heredada desde un contenedor de más arriba. */
.ivj-zoom, .ivj-imp { --ivj-letra: 1; }



/* ══ PROPUESTA COMERCIAL · CATÁLOGOS Y CREAR PLAN ═══════════════════════
   Las dos tablas de catálogo y el modal de crear. Van al FINAL de baseCss:
   con igual especificidad gana la regla escrita después. */
/* TABLA DE VERDAD, DEL TAMAÑO QUE NECESITA. Con 940px las columnas salían
   aplastadas: «Entrega aseg.» se cortaba en «Entr» y «Cuotas» en «Cu». Una
   tabla con tres tramos necesita ancho; si el monitor no da, se corre para el
   costado como cualquier planilla. */
.pc-cat { width: min(1860px, calc(98vw / var(--tcg-z, 1))); max-height: calc(92vh / var(--tcg-z, 1)); display: flex; flex-direction: column; }
.pc-cat .pc-cat-cue { flex: 1; min-height: 0; }
/* Anchos mínimos por columna: el título tiene que entrar entero. */
.pc-tabla--reja { min-width: 1180px; }
.pc-tabla--reja th, .pc-tabla--reja td { min-width: 78px; }
.pc-tabla--reja th:first-child, .pc-tabla--reja td:first-child { min-width: 96px; }
.pc-cat-pie { display: flex; align-items: center; gap: 12px; padding: 10px 17px;
  border-top: 1px solid var(--border); background: var(--panel-2);
  font-size: 12px; color: var(--text); border-radius: 0 0 12px 12px; }
.pc-cat-sp { flex: 1; }
.pc-nuevo { width: min(620px, calc(96vw / var(--tcg-z, 1))); display: flex; flex-direction: column; }
.pc-cat-cab { display: flex; align-items: center; gap: 10px; padding: 13px 17px;
  border-bottom: 1px solid var(--border); }
.pc-cat-cab b { flex: 1; font-size: 15px; }
.pc-cat-cue { padding: 15px 17px; overflow: auto; }
.pc-cat-pie { display: flex; gap: 8px; justify-content: flex-end; padding: 12px 17px;
  border-top: 1px solid var(--border); }
.pc-cat-nota { margin-top: 11px; }
.pc-cat .pc-tabla input, .pc-cat .pc-tabla select {
  width: 100%; background: var(--panel-2); border: 1px solid var(--border);
  border-radius: 6px; color: var(--text); font: inherit; font-size: 13px; padding: 6px 8px; }
.pc-retiro { font-size: 12px; color: var(--text); text-align: left; }
.pc-bloque { margin-bottom: 13px; }
.pc-bloque h4 { margin: 0 0 6px; font-size: 12px; color: var(--text); font-weight: 600; }
.pc-sumas { display: flex; gap: 7px; align-items: center; flex-wrap: wrap; }
.pc-pastilla { display: inline-block; padding: 3px 9px; border-radius: 999px; font-size: 12px;
  background: var(--panel-3); color: var(--text); }
.pc-pastilla--base { background: color-mix(in srgb, var(--accent-amber) 22%, transparent);
  color: var(--text); font-weight: 600; }
.pc-suma { display: inline-flex; gap: 5px; align-items: center; background: var(--panel-2);
  border: 1px solid var(--border); border-radius: 7px; padding: 3px 5px; }
.pc-suma select { width: auto; min-width: 150px; }
.pc-suma input { width: 72px; }
.pc-campo { display: block; margin-bottom: 13px; }
.pc-campo > span { display: block; font-size: 12px; color: var(--text); margin-bottom: 4px; }
.pc-campo select, .pc-campo textarea, .pc-campo input {
  width: 100%; background: var(--panel-2); border: 1px solid var(--border);
  border-radius: 7px; color: var(--text); font: inherit; font-size: 13px; padding: 8px 10px; }
.pc-vacio { padding: 22px 14px; text-align: center; color: var(--text); font-size: 13px; }


/* Grilla completa y borde de celda: en modo oscuro, sin el borde no se ve
   dónde se escribe. Verticales iguales a las horizontales. */
.pc-tabla--reja th, .pc-tabla--reja td { border: 1px solid var(--border); text-align: center; vertical-align: middle; }
.pc-tabla--reja th { padding: 6px 5px; white-space: nowrap; }
.pc-tabla--reja td { padding: 6px; }
.pc-th-grupo { background: color-mix(in srgb, var(--accent-amber) 17%, transparent); }
.pc-th-in { display: flex; align-items: center; justify-content: center; gap: 3px; }
.pc-th-t { background: transparent; border: 1px dashed transparent; border-radius: 4px;
  color: inherit; font: inherit; font-size: 12px; font-weight: 700; text-align: center;
  padding: 2px 3px; width: 100%; max-width: 150px; }
.pc-th-t:hover { border-color: currentColor; }
.pc-th-t:focus { border-style: solid; background: var(--panel); outline: none; }
.pc-th-x { color: var(--text); cursor: pointer; font-size: 12px; padding: 0 2px; }
.pc-th-x:hover { color: var(--alerta, #ef4444); }
.pc-th-sub { display: block; font-weight: 400; color: var(--text); font-size: 12px; margin-top: 1px; }
.pc-cel { background: var(--panel); border: 1px solid var(--border); border-radius: 5px;
  color: var(--text); font: inherit; font-size: 12.5px; padding: 5px 6px; width: 100%; text-align: center; }
.pc-cel:hover { border-color: var(--text-muted); }
.pc-cel:focus { border-color: var(--accent-amber); outline: none; }
.pc-tr { display: inline-flex; align-items: center; gap: 1px; background: var(--panel);
  border: 1px solid var(--border); border-radius: 6px; padding: 2px 3px 2px 5px; white-space: nowrap; }
.pc-tr:focus-within { border-color: var(--accent-amber); }
.pc-tr input { background: transparent; border: 0; color: var(--text); font: inherit;
  font-size: 13px; padding: 3px 1px; text-align: center; width: 28px; }
.pc-tr input.pc-imp { width: 62px; text-align: right; }
.pc-tr input:focus { outline: none; }
.pc-gu { color: var(--text); font-size: 12px; }
.pc-x { color: var(--text); cursor: pointer; font-size: 12px; padding: 0 3px; }
.pc-x:hover { color: var(--alerta, #ef4444); }
.pc-poner { background: transparent; border: 1px dashed var(--border); color: var(--text);
  border-radius: 6px; font: inherit; font-size: 12px; padding: 5px 10px; cursor: pointer; white-space: nowrap; }
.pc-poner:hover { border-color: var(--accent-amber); color: var(--text); }
.pc-tenue { color: var(--text); }
.pc-scroll { overflow-x: auto; }
/* ry · Propuesta Comercial: tablas por bloques, crear plan por bloques y listado tipo Excel. */
.pc-blqs { display: flex; flex-direction: column; gap: 12px; }
.pc-blq { border: 1px solid var(--border, #2a3345); border-radius: 11px; background: var(--panel, #161c29); min-width: 0; }
.mo-claro .pc-blq, .tcg-claro .pc-blq { background: #ffffff; box-shadow: 0 1px 2px rgba(15,23,42,.06); border-color: #d5dbe5; }
.pc-blq-cab { display: flex; align-items: center; gap: 10px; padding: 8px 12px; border-bottom: 1px solid var(--border, #2a3345);
  background: var(--panel-2, #1c2432); border-radius: 11px 11px 0 0; }
.mo-claro .pc-blq-cab, .tcg-claro .pc-blq-cab { background: #f4f7fb; border-bottom-color: #e3e8ef; }
.pc-blq-n { flex: 0 0 24px; width: 24px; height: 24px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center;
  background: var(--vnv-marca, var(--accent-blue, #2f6fbf)); color: var(--casa-activa-tinta, #fff); font-weight: 800; font-size: 12.5px; }
td.pc-blq-n { background: transparent !important; color: var(--text); width: auto; height: auto; border-radius: 0; display: table-cell; font-weight: 700; }
.pc-blq-cab b { font-size: 13px; font-weight: 800; letter-spacing: .05em; text-transform: uppercase; white-space: nowrap; }
.pc-blq-cab i { font-style: normal; font-size: 12px; color: var(--text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; flex: 1 1 auto; }
.pc-blq-acc .lu-btn { white-space: nowrap; }
.mo-claro .pc-blq-cab i, .tcg-claro .pc-blq-cab i { color: #000; }
.pc-blq-acc { margin-left: auto; display: flex; gap: 8px; }
.pc-blq-cue { padding: 10px 12px 12px; min-width: 0; }
.pc-blq-dos { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 12px; }
.pc-blq-tabla { width: 100%; }
.pc-blq-tabla--ancha { width: max-content; min-width: 100%; }
.pc-blq-tabla th { text-align: center; white-space: nowrap; }
.pc-blq-izq .pc-xl-in { text-align: left; padding-left: 8px; }
.pc-blq-est { color: #d97706; font-weight: 800; }
.pc-blq-uso { font-size: 12px; color: var(--text); white-space: nowrap; }
.pc-blq-mas { border: 1px solid var(--vnv-marca, var(--accent-blue, #2f6fbf)) !important; color: var(--text); font-weight: 700; }
.pc-plata { text-align: center !important; }
.pc-np-scroll { overflow-x: auto; scrollbar-width: auto; padding-bottom: 2px; }
.pc-np-scroll::-webkit-scrollbar { height: 12px; }
.pc-np-scroll::-webkit-scrollbar-track { background: var(--panel-2, #1c2432); border-radius: 6px; }
.mo-claro .pc-np-scroll::-webkit-scrollbar-track, .tcg-claro .pc-np-scroll::-webkit-scrollbar-track { background: #e5e9f0; }
.pc-np-scroll::-webkit-scrollbar-thumb { background: var(--vnv-marca, var(--accent-blue, #2f6fbf)); border-radius: 6px; border: 2px solid transparent; background-clip: padding-box; }
.pc-np .pc-np-cue { display: flex; flex-direction: column; gap: 10px; overflow: auto; }
.pc-np-tres { display: grid; grid-template-columns: 1.25fr 1fr 1.25fr; gap: 10px; }
.pc-np-dos { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 10px; }
.pc-np-fila { display: flex; gap: 8px; align-items: center; min-width: 0; }
.pc-np-fila > select, .pc-np-fila > .pc-np-tildes { flex: 1 1 auto; min-width: 0; }
.pc-np-in { height: 36px; border: 1px solid var(--border, #2a3345); border-radius: 8px; padding: 0 10px; font: inherit; font-size: 13.5px;
  background: var(--panel-2, #1c2432); color: inherit; width: 100%; box-sizing: border-box; }
.mo-claro .pc-np-in { background: #ffffff; color: #000; border-color: #c3cad6; }
.pc-np-nueva { flex: 0 0 auto; height: 36px; min-width: 104px; font-weight: 700; border: 1px solid var(--vnv-marca, var(--accent-blue, #2f6fbf)) !important;
  color: var(--text); white-space: nowrap; }
.pc-np-nueva--on { background: var(--vnv-marca, var(--accent-blue, #2f6fbf)) !important; color: var(--casa-activa-tinta, #fff) !important; }
.pc-np-alta { border: 1px solid var(--vnv-marca, var(--accent-blue, #2f6fbf)); border-radius: 10px; padding: 10px 12px; margin-top: 8px;
  background: color-mix(in srgb, var(--vnv-marca, var(--accent-blue, #2f6fbf)) 7%, var(--panel, #161c29)); }
.mo-claro .pc-np-alta { background: color-mix(in srgb, var(--vnv-marca, var(--accent-blue, #2f6fbf)) 6%, #ffffff); }
.pc-np-alta-tit { font-size: 12.5px; font-weight: 700; color: var(--text); margin-bottom: 8px; }
.pc-np-alta-pie { display: flex; align-items: center; gap: 8px; margin-top: 10px; }
.pc-np-tabla { table-layout: fixed; width: max-content; min-width: 100%; }
.pc-np-tabla th, .pc-np-tabla td { min-width: 110px; }
.pc-np-cuotas { width: max-content; min-width: 100%; margin-top: 10px; }
.pc-np-cuotas th { min-width: 104px; text-align: center; }
.pc-np-cuotas td { min-width: 104px; font-weight: 700; }
.pc-np-rt { font-weight: 800 !important; font-size: 12px; text-transform: uppercase; letter-spacing: .05em; padding: 0 10px !important; }
.pc-np-falta { box-shadow: inset 0 0 0 2px #f2c200; }
.mo-claro .pc-np-falta { background: #fffbea !important; }
.pc-np-nota { margin-top: 6px; color: var(--text); font-size: 12px; }
.mo-claro .pc-np-nota { color: #000; }
.pc-np-aviso { color: #b45309; font-weight: 600; font-size: 12.5px; }
.pc-np-tildes { display: flex; flex-wrap: wrap; gap: 8px; }
.pc-np-tilde { display: inline-flex; align-items: center; gap: 7px; border: 1px solid var(--border, #2a3345); border-radius: 8px; padding: 6px 10px; font-size: 13px; cursor: pointer; }
.pc-np-tilde--on { border-color: var(--vnv-marca, var(--accent-blue, #2f6fbf)); background: color-mix(in srgb, var(--vnv-marca, var(--accent-blue, #2f6fbf)) 10%, transparent); }
.pc-np-chip { display: inline-flex; align-items: center; gap: 4px; font-size: 12px; font-weight: 700; padding: 2px 8px; border-radius: 999px;
  background: color-mix(in srgb, var(--vnv-marca, var(--accent-blue, #2f6fbf)) 15%, transparent); white-space: nowrap; margin: 2px; }
.pc-np-chip button { border: 0; background: transparent; color: inherit; cursor: pointer; font-size: 12px; padding: 0 2px; }
.pc-tabla-ry td.pc-td-txt, .pc-tabla-ry .pc-td-txt { text-align: center; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pc-tabla-ry .pc-celda-sel { width: 100%; height: 30px; border: 0; background: transparent; color: inherit; font: inherit; text-align: center; text-align-last: center; cursor: pointer; }
.pc-tabla-ry .pc-td-bon { white-space: normal; text-align: center; }
.pc-tabla-ry .pc-bon-sel { width: auto; min-width: 70px; height: 24px; font-size: 12px; }
.pc-tabla-ry td.pc-tr-td { padding: 0 !important; vertical-align: middle; }
.pc-tr-in { display: block; width: 100%; border: 0; background: transparent; text-align: center; font: inherit; font-size: 12px; font-weight: 800;
  text-transform: uppercase; color: inherit; padding: 3px 4px 0; box-sizing: border-box; }
.pc-tr-plata { display: block; width: 100%; border: 0 !important; background: transparent !important; font-weight: 800; height: 24px !important; box-sizing: border-box; }
.pc-tr-td--nueva { opacity: 1; }
.pc-tr-td--falta { box-shadow: inset 0 0 0 2px #f2c200; }
.pc-senal-btn { border: 1px solid #f2c200 !important; font-weight: 700; }
/* sa · ACTUALIZAR CON LA SEÑAL */
.pc-sen .pc-sen-cue { overflow: auto; display: flex; flex-direction: column; gap: 10px; }
.pc-sen .pc-sen-cue > * { flex-shrink: 0; }
.pc-sen .pc-sen-aplicar { background: var(--vnv-marca, var(--accent-blue, #2f6fbf)) !important; color: var(--casa-activa-tinta, #fff) !important; border-color: var(--vnv-marca, var(--accent-blue, #2f6fbf)) !important; min-width: 160px; }
.pc-sen-pasos { display: flex; align-items: center; gap: 8px; padding: 8px 16px; border-bottom: 1px solid var(--border, #2a3345); background: var(--panel-2, #1c2432); flex-wrap: wrap; }
.mo-claro .pc-sen-pasos { background: #f6f8fb; border-bottom-color: #e3e8ef; }
.pc-sen-paso { display: inline-flex; align-items: center; gap: 7px; font-size: 12.5px; font-weight: 600; color: var(--text); }
.pc-sen-paso i { font-style: normal; width: 22px; height: 22px; border-radius: 50%; background: #7b8597; color: #fff; display: inline-flex; align-items: center; justify-content: center; font-weight: 800; font-size: 12px; }
.pc-sen-paso--on { color: inherit; } .pc-sen-paso--on i { background: var(--vnv-marca, var(--accent-blue, #2f6fbf)); }
.pc-sen-paso--ok i { background: #16a34a; }
.pc-sen-fl { color: var(--text); }
.pc-sen-res { margin-left: auto; display: flex; gap: 8px; }
.pc-sen-k { border: 1px solid var(--border, #2a3345); border-radius: 9px; padding: 3px 11px; font-size: 12px; }
.mo-claro .pc-sen-k { border-color: #d5dbe5; background: #fff; }
.pc-sen-k b { font-size: 15px; margin-right: 5px; } .pc-sen-k--ok b { color: var(--text); } .pc-sen-k--rev b { color: #f59e0b; }
.pc-sen-archivo { display: flex; align-items: center; gap: 12px; border: 1px dashed var(--vnv-marca, var(--accent-blue, #2f6fbf)); border-radius: 10px; padding: 8px 12px; font-size: 12.5px;
  background: color-mix(in srgb, var(--vnv-marca, var(--accent-blue, #2f6fbf)) 7%, transparent); }
.pc-sen-archivo b { font-size: 13px; } .pc-sen-ico { font-size: 18px; }
.pc-sen-leyendo { display: flex; flex-direction: column; gap: 6px; font-size: 13px; font-weight: 600; padding: 6px 2px; }
.pc-sen-leyendo small { font-weight: 400; color: var(--text); }
.pc-sen-barra { height: 8px; border-radius: 6px; background: var(--panel-2, #1c2432); overflow: hidden; border: 1px solid var(--border, #2a3345); }
.mo-claro .pc-sen-barra { background: #e5e9f0; border-color: #d5dbe5; }
.pc-sen-barra i { display: block; height: 100%; background: var(--vnv-marca, var(--accent-blue, #2f6fbf)); transition: width .3s; }
.pc-sen-error { color: #f87171; font-weight: 600; } .mo-claro .pc-sen-error { color: #b91c1c; }
.pc-sen-mes { display: flex; align-items: center; gap: 10px; font-size: 13px; font-weight: 600; }
.pc-sen-mes .pc-sen-mes-sel { width: 260px; }
.pc-sen-mes i { font-style: normal; font-weight: 400; color: var(--text); }
.pc-sen-tabla { min-width: 100%; table-layout: fixed; }
.pc-sen-tabla th { text-align: center; white-space: nowrap; }
.pc-sen-tabla td { vertical-align: middle; text-align: center; }
.pc-sen-est { font-weight: 800; font-size: 12.5px; white-space: nowrap; }
.pc-sen-est--ok { color: var(--text); } .pc-sen-est--rev { color: #f59e0b; } .pc-sen-est--mal { color: #f87171; }
.mo-claro .pc-sen-est--ok { color: #000; } .mo-claro .pc-sen-est--rev { color: #b45309; } .mo-claro .pc-sen-est--mal { color: #b91c1c; }
.pc-sen-nom { text-align: left !important; padding: 4px 8px !important; }
.pc-sen-nom b { display: block; font-size: 13px; } .pc-sen-nom small { display: block; font-size: 12px; color: var(--text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pc-sen-nom .pc-sen-nota { color: #f59e0b; white-space: normal; } .mo-claro .pc-sen-nom .pc-sen-nota { color: #b45309; }
.pc-sen-tabla .pc-sen-asig, .pc-sen-tabla .pc-sen-pla { height: 30px; font-size: 12.5px; padding: 0 6px; }
.pc-sen-tabla .pc-sen-pla--falta { border-color: #f2c200; }
.pc-sen-reac { display: block; font-size: 12px; font-weight: 800; color: var(--text); margin-top: 2px; } .mo-claro .pc-sen-reac { color: #000; }
.pc-sen-tr { padding: 2px 3px !important; line-height: 1.2; }
.pc-sen-rg { display: block; font-size: 12px; font-weight: 800; text-transform: uppercase; }
.pc-sen-plata { display: block; width: 100%; border: 0 !important; background: transparent !important; font-weight: 800; height: 22px !important; color: inherit; }
.pc-sen-ant { display: block; font-size: 12px; color: var(--text); white-space: normal; line-height: 1.15; }
.pc-sen-up { color: #f87171; } .pc-sen-dn { color: var(--text); } .mo-claro .pc-sen-up { color: #b91c1c; } .mo-claro .pc-sen-dn { color: #000; }
.pc-sen-tr--rev { box-shadow: inset 0 0 0 2px #f2c200; } .mo-claro .pc-sen-tr--rev { background: #fffbea !important; }
.pc-sen-tr--rev .pc-sen-ant { color: #f59e0b; white-space: normal; } .mo-claro .pc-sen-tr--rev .pc-sen-ant { color: #b45309; }
.pc-sen-sub { font-size: 12px; font-weight: 800; letter-spacing: .05em; text-transform: uppercase; color: var(--text); margin-top: 4px; }
.pc-sen-quedan { width: 100%; table-layout: fixed; } .pc-sen-quedan td { vertical-align: middle; }
.pc-sen-quedan .pc-sen-q { height: 30px; font-size: 12.5px; padding: 0 6px; }
.pc-sen-izq { text-align: left !important; padding-left: 10px !important; } .pc-sen-gris { color: var(--text); font-size: 12px; }
.pc-sen select, .pc-sen select option { color-scheme: dark; } .pc-sen select option { background: #1c2432; color: #fff; }
.mo-claro.pc-sen select { color-scheme: light; } .mo-claro.pc-sen select option { background: #ffffff; color: #000; }
.abm-tab--plan { border-left: 2px solid var(--accent-blue, #2f6fbf); }
/* rz: Plazos, Formas e Integración, uno al lado del otro; y en Crear, las cuatro listas en un renglón. */
.pc-blq-tres { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.2fr) minmax(0, 1fr); gap: 12px; }
.pc-blq-tres .pc-blq-cab i { display: none; }
.pc-blq-tres .pc-blq-cab { padding: 8px 10px; gap: 8px; }
.pc-blq-tres .pc-blq-cab b { font-size: 12.5px; }
.pc-blq-tres .pc-blq-mas { padding: 0 10px; }
.pc-blq-tres .pc-blq-cue { padding: 10px 8px 12px; }
.pc-blq-tres .pc-blq-uso { font-size: 12px; }
.pc-np-cuatro { display: grid; grid-template-columns: minmax(0, 1.3fr) minmax(0, 1fr); gap: 10px; }
@media (max-width: 1250px) { .pc-blq-tres { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); } }
@media (max-width: 900px) { .pc-blq-dos, .pc-blq-tres, .pc-np-tres, .pc-np-cuatro, .pc-np-dos { grid-template-columns: minmax(0, 1fr); } }
/* rz · LOS DESPLEGABLES EN OSCURO (13/10, Ramiro: «no salen en modo oscuro
   las opciones del desplegable»). El select es transparente y toma la letra
   clara de la tabla; la lista que abre el navegador quedaba en blanco con
   letra blanca. Se le da fondo y letra propios, y el esquema de color para
   que la lista nativa también salga oscura. */
.pc-tabla-ry select, .pc-np select, .pc-blqs select, .pc-tabla-wrap select { color-scheme: dark; }
.pc-tabla-ry select option, .pc-np select option, .pc-blqs select option, .pc-tabla-wrap select option,
.pc-tabla-ry select optgroup, .pc-np select optgroup { background: #1c2432; color: #fff; }
.mo-claro .pc-tabla-ry select, .mo-claro .pc-np select, .mo-claro .pc-blqs select, .mo-claro .pc-tabla-wrap select,
.tcg-claro .pc-tabla-ry select, .tcg-claro .pc-np select, .tcg-claro .pc-blqs select, .tcg-claro .pc-tabla-wrap select { color-scheme: light; }
.mo-claro .pc-tabla-ry select option, .mo-claro .pc-np select option, .mo-claro .pc-blqs select option, .mo-claro .pc-tabla-wrap select option,
.tcg-claro .pc-tabla-ry select option, .tcg-claro .pc-np select option, .tcg-claro .pc-blqs select option, .tcg-claro .pc-tabla-wrap select option { background: #ffffff; color: #000; }
/* En oscuro el azul de la casa no se lee sobre el fondo: el «+ Nueva» va más claro. */
.pc-np-nueva:not(.pc-np-nueva--on), .pc-blq-mas { color: var(--text) !important;
  border-color: color-mix(in srgb, var(--vnv-marca, #2f6fbf) 45%, #ffffff) !important; }
.mo-claro .pc-np-nueva:not(.pc-np-nueva--on), .mo-claro .pc-blq-mas, .tcg-claro .pc-np-nueva:not(.pc-np-nueva--on), .tcg-claro .pc-blq-mas {
  color: var(--text); border-color: var(--vnv-marca, var(--accent-blue, #2f6fbf)) !important; }
.pc-np .pc-np-crear { background: var(--vnv-marca, var(--accent-blue, #2f6fbf)) !important; color: var(--casa-activa-tinta, #fff) !important; border-color: var(--vnv-marca, var(--accent-blue, #2f6fbf)) !important; }

.pc-cat-sub { color: var(--text); font-size: 12px; margin-right: auto; }


/* Panel ⚙ Columnas: reordenar y ocultar. El título y el eliminar viven en el
   encabezado de la tabla; acá va lo que ahí no entra. */
.pc-panel-velo { position: fixed; inset: 0; background: rgba(0,0,0,.5);
  display: flex; align-items: flex-start; justify-content: flex-end; padding: 70px 22px; z-index: 60; }
.pc-panel { background: var(--panel); border: 1px solid var(--border); border-radius: 11px;
  width: 340px; max-height: calc(78vh / var(--tcg-z, 1)); display: flex; flex-direction: column; }
.pc-panel-cab { display: flex; align-items: center; padding: 11px 14px; border-bottom: 1px solid var(--border); }
.pc-panel-cab b { flex: 1; font-size: 14px; }
.pc-panel-cue { padding: 8px 6px; overflow: auto; }
.pc-panel-f { display: flex; align-items: center; gap: 5px; padding: 5px 8px; border-radius: 7px; }
.pc-panel-f:hover { background: var(--panel-2); }
.pc-panel-f input[type=text] { flex: 1; background: var(--panel); border: 1px solid var(--border);
  border-radius: 5px; color: var(--text); font: inherit; font-size: 13px; padding: 4px 6px; }
.pc-panel-f input[type=text]:focus { border-color: var(--accent-amber); outline: none; }
.pc-panel-pie { display: flex; align-items: center; gap: 8px; padding: 10px 14px;
  border-top: 1px solid var(--border); }
.pc-fija { font-size: 12px; color: var(--text); background: var(--panel-3);
  border-radius: 4px; padding: 1px 5px; }


/* «Cómo se retira» en la propuesta: texto fijo que envuelve, no campo. */
.pc-retiro-txt { min-width: 200px; }
.pc-retiro-fijo { display: block; font-size: 12px; line-height: 1.3; color: var(--text);
  white-space: normal; text-align: left; }


/* ══ TIPO EXCEL (03/09/2026) ═══════════════════════════════════════════
   La celda ES el campo: sin recuadro adentro, se hace clic y se escribe. Las
   acciones van fuera de la grilla, en el mismo renglón. */
.pc-xl-modal { width: min(1100px, calc(96vw / var(--tcg-z, 1))); max-height: calc(92vh / var(--tcg-z, 1)); display: flex; flex-direction: column; }
.pc-xl-modal--ancho { width: min(1500px, calc(97vw / var(--tcg-z, 1))); }
.pc-xl { border-collapse: collapse; table-layout: fixed; width: auto; font-size: 12.5px; }
.pc-xl th, .pc-xl td { border: 1px solid var(--border); padding: 0; text-align: center; height: 30px; }
.pc-xl th { background: color-mix(in srgb, var(--accent-amber) 12%, var(--panel-2)); font-weight: 700; font-size: 13px; padding: 6px 8px; }
.pc-xl-grupo { letter-spacing: .06em; }
.pc-xl td { background: var(--panel); }
.pc-xl-in { width: 100%; height: 30px; border: 0; background: transparent; color: inherit; font: inherit;
  text-align: center; padding: 0 8px; outline: none; border-radius: 0; }
.pc-xl-in:focus { background: color-mix(in srgb, var(--accent-amber) 18%, transparent);
  box-shadow: inset 0 0 0 2px var(--accent-amber); }
.pc-xl-der { text-align: right; }
.pc-xl-tit { font-weight: 700; font-size: 12px; height: auto; padding: 0 4px; }
.pc-xl th:has(.pc-xl-tit) { padding: 3px 4px; }
.pc-xl-acc, .pc-tabla .pc-xl-acc { border: 0 !important; background: transparent !important; white-space: nowrap;
  padding-left: 10px !important; text-align: left; color: var(--text); font-size: 12px; width: 1%; }
.pc-xl-ico { margin-right: 9px; cursor: pointer; font-size: 14px; }
.pc-xl-ico:hover { color: var(--text); }
.pc-xl-ico--btn { background: none; border: 0; color: inherit; font: inherit; padding: 0; }
.pc-vig-ico--on { color: var(--text); }
.pc-th-tramo { white-space: nowrap; }
/* la tabla de la propuesta también sin recuadros en las celdas */
.pc-tabla-planes .pc-celda { border-color: transparent; background: transparent; }
.pc-tabla-planes .pc-celda:focus { background: color-mix(in srgb, var(--accent-amber) 18%, transparent);
  box-shadow: inset 0 0 0 2px var(--accent-amber); border-color: transparent; }


/* «Crear nuevo plan»: la acción del día, primera y resaltada. Blanco sobre
   el color de la casa, en negrita y un poco más grande que el resto. */
/* Tinta OSCURA fija: «--casa-tinta» es blanca en Vesubio y Ginza y el botón
   salía blanco sobre blanco, «tapado». Lo vio Ramiro. */
/* «Crear nuevo plan» era el único blanco de la fila y se comía la atención
   de los otros seis. Queda como todos. */
.tcg-env-acc .lu-btn.pc-btn-crear { background: transparent; color: inherit;
  border-color: currentColor; font-weight: 700; }
.tcg-env-acc .lu-btn.pc-btn-crear:hover { background: color-mix(in srgb, currentColor 14%, transparent); }
/* Los siete controles del encabezado, del mismo alto: antes el desplegable y
   el buscador tenían su propio relleno y quedaban más bajos que los botones. */
.tcg-env-acc .lu-btn, .tcg-env-acc .pc-sel, .tcg-env-acc .pc-buscar {
  font-size: 12.5px; padding: 7px 12px; border-radius: 8px; line-height: 1.2; }
.tcg-env-acc .pc-sel { max-width: 170px; }


.pc-hoja-tabla .pc-hoja-centro { text-align: center !important; }


/* ══ FORMATO CON CLIC DERECHO ═══════════════════════════════════════ */

.fmt-menu { position: fixed; background: var(--panel, #1b2233); color: var(--text, #eef0f3); border: 1px solid var(--border, #333a47);
  border-radius: 10px; box-shadow: 0 10px 30px rgba(0,0,0,.35); padding: 6px; min-width: 240px; z-index: 9999; font-size: 13px; font-family: inherit; }
.fmt-h { padding: 6px 10px 8px; font-size: 12px; color: var(--text); text-transform: uppercase; letter-spacing: .05em; border-bottom: 1px solid var(--border, #333a47); margin-bottom: 4px; }
.fmt-h b { color: var(--text, #eef0f3); display: block; font-size: 12.5px; text-transform: none; letter-spacing: 0; margin-top: 2px; }
.fmt-fila { display: flex; gap: 4px; padding: 4px 6px; }
.fmt-menu button { flex: 1; background: var(--panel-2, #202940); border: 1px solid var(--border, #333a47); color: inherit; font: inherit; padding: 6px 4px; border-radius: 6px; cursor: pointer; }
.fmt-menu button:hover { border-color: var(--accent-amber, #f2a900); }
.fmt-menu button.fmt-on { background: var(--accent-amber, #f2a900); border-color: var(--accent-amber, #f2a900); color: #000; }
.fmt-chk { display: flex; gap: 7px; align-items: center; padding: 6px 10px; font-size: 12px; color: var(--text); cursor: pointer; }
.fmt-sep { border-top: 1px solid var(--border, #333a47); margin: 4px 0; }
.fmt-menu .fmt-adm { color: var(--text); }
.fmt-foco { outline: 2px dashed var(--accent-amber, #f2a900) !important; outline-offset: 3px; }
[data-fmt-al="left"], [data-fmt-al="left"] th, [data-fmt-al="left"] td, [data-fmt-al="left"] input, [data-fmt-al="left"] h1, [data-fmt-al="left"] h2, [data-fmt-al="left"] h3 { text-align: left !important; }
[data-fmt-al="center"], [data-fmt-al="center"] th, [data-fmt-al="center"] td, [data-fmt-al="center"] input, [data-fmt-al="center"] h1, [data-fmt-al="center"] h2, [data-fmt-al="center"] h3 { text-align: center !important; }
[data-fmt-al="right"], [data-fmt-al="right"] th, [data-fmt-al="right"] td, [data-fmt-al="right"] input, [data-fmt-al="right"] h1, [data-fmt-al="right"] h2, [data-fmt-al="right"] h3 { text-align: right !important; }
.fmt-imprimir { position: fixed; right: 18px; bottom: 18px; z-index: 9998; background: var(--accent-amber, #f2a900); color: #000;
  border: 0; border-radius: 10px; padding: 12px 18px; font: inherit; font-size: 15px; font-weight: 700; cursor: pointer; box-shadow: 0 6px 20px rgba(0,0,0,.35); }
.fmt-imprimir small { display: block; font-weight: 400; font-size: 12px; opacity: 1; }

/* ── La cadena de alcances, renombrar y ocultar ───────────────────────
   Va al FINAL de baseCss a propósito: acá gana la cascada, y estas reglas
   tienen que poder pisar el ancho y el alto de más arriba. */
.fmt-menu { max-height: calc(92vh / var(--tcg-z, 1)); overflow: auto; width: 272px; }
.fmt-alc { display: flex; flex-direction: column; gap: 3px; padding: 0 6px 2px; }
.fmt-menu .fmt-alc button { display: flex; justify-content: space-between; align-items: center; gap: 8px;
  text-align: left; padding: 6px 9px; font-size: 12.5px; flex: none; width: 100%; }
.fmt-alc small { color: var(--text); font-size: 12px; white-space: nowrap; }
.fmt-menu .fmt-alc button.fmt-on small { color: #000; }
.fmt-txt { display: flex; gap: 5px; padding: 4px 6px; }
.fmt-txt input { flex: 1; min-width: 0; background: var(--bg, #12182a); color: inherit;
  border: 1px solid var(--border, #333a47); border-radius: 6px; padding: 6px 8px; font: inherit; font-size: 16px; }
.fmt-txt input:focus { outline: none; border-color: var(--accent-amber, #f2a900); }
.fmt-menu .fmt-txt button { flex: none; width: 34px; }
.fmt-nota { padding: 2px 10px 6px; color: var(--text); font-size: 12px; line-height: 1.35; }
.fmt-menu .fmt-vuelta { width: calc(100% - 12px); margin: 2px 6px 6px; flex: none;
  background: rgba(226,87,76,.14); color: #ff9d94; border-color: rgba(226,87,76,.5); font-size: 12px; }
.fmt-menu .fmt-peli { color: #ff9d94; }
.fmt-oculto { display: none !important; }
/* El ✕ de un tramo con datos: primer clic lo arma en rojo, segundo lo saca. */
.pc-xl-ico--armado { color: #ff9d94 !important; background: rgba(226,87,76,.18);
  border-radius: 5px; padding: 0 5px; font-size: 12px; white-space: nowrap;
  animation: pcArmado 1s ease-in-out 4; }
@keyframes pcArmado { 0%,100% { opacity: 1 } 50% { opacity: .45 } }
/* Con el menú abierto lo oculto vuelve a verse en fantasma: nada desaparece
   sin dejar rastro de dónde estaba ni de cómo traerlo de vuelta. */
body.fmt-editando .fmt-oculto { display: revert !important; opacity: .28;
  outline: 1px dashed #e2574c !important; outline-offset: 2px; }
.fmt-foco-suave { outline: 2px dotted rgba(242,169,0,.45) !important; outline-offset: 2px; }
@media print { .fmt-foco, .fmt-foco-suave { outline: none !important; } .fmt-menu { display: none !important; } }


/* Aviso de libro de otra casa. Rojo y arriba de todo: es el único error de
   esta pantalla que puede ensuciar los datos de una concesionaria entera. */
.sc-libro-alerta{background:rgba(194,69,59,.12);border:1px solid #6d3029;
  border-radius:5px;padding:10px 13px;margin:0 0 12px;font-size: 12.5px;color:var(--text);line-height:1.5}
.sc-libro-alerta b{color:#ef8479}

/* ── Actualización de Cartera ─────────────────────────────────────────── */
.ac-panel{padding-bottom:30px}
.ac-ok{background:rgba(63,157,99,.12);border:1px solid #2f7d4d;border-radius:5px;
  padding:11px 14px;margin:0 0 14px;font-size: 12.5px;color:var(--text)}
.ac-ok b{color:var(--text)}
.ac-soltar{border:1px dashed var(--border-fuerte,#3a4559);border-radius:6px;
  padding:30px 20px;text-align:center;background:var(--lavado);cursor:pointer;margin:6px 0 4px}
.ac-soltar:hover{border-color:var(--accent-amber,#f2c200);background:var(--lavado-2)}
.ac-soltar-grande{font-size: 14px;font-weight:600}
.ac-soltar-chico{font-size: 12px;opacity: 1;margin-top:5px}
.ac-leido{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:1px;
  background:var(--border,#2a3345);border:1px solid var(--border,#2a3345);border-radius:5px;
  overflow:hidden;margin:14px 0 0}
.ac-leido>div{background:var(--lavado);padding:10px 13px}
.ac-r{font-size: 12px;opacity: 1;text-transform:uppercase;letter-spacing:.7px;font-weight:700}
.ac-v{font-size: 14px;font-weight:700;margin-top:2px}
.ac-avisos{margin-top:11px;display:flex;flex-direction:column;gap:8px}
.ac-aviso{border-radius:5px;padding:9px 12px;font-size: 12px;display:flex;gap:9px;line-height:1.45}
.ac-aviso.info{background:rgba(79,142,247,.10);border:1px solid #2b4a70;color:var(--text)}
.ac-aviso.warn{background:rgba(242,194,0,.09);border:1px solid #4a4223;color:var(--text)}
.ac-ic{font-weight:700;flex:0 0 auto}
.ac-estados{display:flex;flex-wrap:wrap;gap:7px;margin-top:12px}
.ac-estados span{background:var(--lavado-2);border:1px solid var(--border,#2a3345);
  border-radius:4px;padding:5px 10px;font-size: 12px;opacity: 1}
.ac-estados b{opacity:1;font-weight:700}
.ac-primera,.ac-cambios{margin-top:16px}
.ac-pie{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:14px}
.ac-sep{flex:1}
.ac-sin-cambios{background:var(--lavado);border:1px solid var(--border,#2a3345);
  border-radius:5px;padding:16px 18px;font-size: 12.5px;line-height:1.5;margin-top:14px}
.ac-buscar{flex:1;min-width:150px}
.ac-tabla-box{border:1px solid var(--border-fuerte,#3a4559);border-radius:5px;overflow:auto;
  max-height:520px;margin-top:2px}
.ac-tabla{width:100%;border-collapse:collapse;font-size: 12px}
.ac-tabla th{background:color-mix(in srgb, var(--accent-amber,#f2c200) 7%, transparent);
  font-size: 13px;text-transform:uppercase;letter-spacing:.6px;padding:8px;text-align:center;
  border-bottom:1px solid var(--border,#2a3345);font-weight:700;position:sticky;top:0;z-index:1}
.ac-tabla td{padding:7px 8px;border-bottom:1px solid rgba(255,255,255,.05);white-space:nowrap}
.ac-tabla td.ac-c{text-align:center}
.ac-tabla td.ac-n{text-align:right;font-variant-numeric:tabular-nums}
.ac-tabla tr.ac-conf{background:rgba(194,69,59,.09)}
.ac-flecha{opacity: 1;padding-right:6px}
.ac-nuevo{color:var(--text);font-weight:600}
.ac-elige{display:flex;flex-direction:column;gap:3px;font-size: 12px}
.ac-elige label{display:flex;align-items:center;gap:5px;cursor:pointer;white-space:nowrap}
.ac-badge{font-size: 12px;padding:2px 7px;border-radius:3px;font-weight:700;white-space:nowrap}
.ac-badge--reporte{background:rgba(79,142,247,.16);color:var(--text)}
.ac-badge--impagas,.ac-badge--cobranzas{background:rgba(242,194,0,.13);color:var(--text)}
.ac-badge--ausente{background:rgba(194,69,59,.14);color:var(--text)}
.ac-badge--conflicto{background:rgba(194,69,59,.2);color:#ef8479}
.ac-inds{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;margin-top:16px}
.ac-ind{background:var(--lavado);border:1px solid var(--border,#2a3345);border-radius:5px;padding:11px 13px}
.ac-iv{font-size: 20px;font-weight:700;margin-top:3px;font-variant-numeric:tabular-nums}
.ac-d{font-size: 12px;opacity: 1;margin-top:1px}

/* ── Actualización de Cartera · sub-solapas y bandejas ────────────────── */
.ac-cont{padding-bottom:30px}
.ac-subtabs{display:flex;gap:0;border-bottom:1px solid var(--border-fuerte,#3a4559);
  margin:6px 0 16px;flex-wrap:wrap}
.ac-subtab{padding:9px 15px;border:0;border-bottom:2px solid transparent;background:none;
  cursor:pointer;color:var(--text);font-size: 12px;font-weight:600;display:flex;align-items:center;gap:7px}
.ac-subtab:hover{color:var(--text,#eef1f6)}
.ac-subtab.on{color:var(--text,#eef1f6);border-bottom-color:var(--accent-amber,#f2c200)}
.ac-pill{background:var(--accent-amber,#f2c200);color:#000;font-size: 12px;font-weight:700;
  border-radius:9px;padding:1px 7px;min-width:18px;text-align:center}
.ac-sub{margin-top:2px}
.ac-sub-intro{font-size: 12px;opacity: 1;line-height:1.5;max-width:920px;margin:0 0 14px}
.ac-sub-nota{font-size: 12px;opacity: 1;margin-left:4px}
.ac-cargando{opacity:.6;padding:20px}
.ac-vacio{text-align:center;opacity: 1;padding:16px}
.ac-mes-lbl{display:flex;align-items:center;gap:6px;font-size: 12px;opacity: 1;text-transform:uppercase;letter-spacing:.5px}
.ac-mes{width:92px}
.sc-btn--peligro-solido{background:#c2453b;color:#fff;border:1px solid #9c342c;
  padding:10px 20px;font-weight:700;text-transform:uppercase;letter-spacing:.3px}
.sc-btn--peligro-solido:hover{background:#d4544a}
.sc-btn--peligro-solido:disabled{opacity:.4}
/* ficha de A mano */
.ac-ficha{border:1px solid var(--border,#2a3345);border-radius:6px;padding:15px 17px;margin-top:12px;
  background:var(--lavado)}
.ac-ficha-cab{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:12px}
.ac-ficha-cab b{font-size: 14px}
.ac-ficha-cab span{font-size: 12px;opacity: 1}
.ac-ficha-cab .sc-btn{margin-left:auto}
.ac-ficha-datos{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:12px;
  padding:12px 0;border-top:1px solid var(--border,#2a3345);border-bottom:1px solid var(--border,#2a3345)}
.ac-ficha-datos>div{display:flex;flex-direction:column;gap:2px}
.ac-ficha-datos b{font-size: 13px}
.ac-ficha-form{display:flex;gap:12px;flex-wrap:wrap;margin-top:13px}
.ac-campo{display:flex;flex-direction:column;gap:4px;font-size: 12px;opacity: 1;
  text-transform:uppercase;letter-spacing:.6px;font-weight:700;flex:1;min-width:180px}
.ac-campo--ancho{flex:2 1 100%}
.ac-campo select,.ac-campo input{font-size: 13px;text-transform:none;letter-spacing:0;font-weight:400}
/* configuración */
.ac-config{display:flex;flex-wrap:wrap;gap:14px;max-width:820px}
.ac-check{display:flex;align-items:center;gap:8px;font-size: 12px;flex:1 1 100%;cursor:pointer}

/* ── Cobranzas · Plan de Ahorro ───────────────────────────────────────── */
.cpb .ac-sub-intro{margin-top:6px}
.cpb-inds{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:10px;margin:4px 0 16px}
.cpb-ind{text-align:left;background:var(--panel-2,#1c2432);border:1px solid var(--border,#2a3345);border-radius:5px;
  padding:11px 13px;cursor:pointer;font-family:inherit}
.cpb-ind:hover{border-color:var(--border-fuerte,#3a4559)}
.cpb-ind.on{border-color:var(--azul,#4f8ef7);background:rgba(79,142,247,.08)}
.cpb-ind .ac-iv{font-size: 20px;font-weight:700;margin-top:3px;font-variant-numeric:tabular-nums}
.cpb-sel{font-family:inherit;font-size: 12px;background:var(--panel-3, #0d121a);color:var(--text);border:1px solid var(--border-fuerte);border-radius:3px;padding:6px 9px}
.cpb-tabla td{vertical-align:middle}
.cpb-tabla tr.cpb-abierto{background:rgba(79,142,247,.06)}
.cpb-ciclo{display:inline-flex;gap:4px;align-items:center}
.cpb-paso{width:12px;height:12px;border-radius:50%;border:1px solid var(--border-fuerte,#3a4559);display:inline-block}
.cpb-paso.ok{background:var(--verde,#3f9d63);border-color:var(--verde,#3f9d63)}
.cpb-paso.pend{background:transparent;border-color:var(--amber,#f2c200);border-style:dashed}
.cpb-ciclo-txt{font-size: 12px;opacity: 1;margin-left:5px}
.cpb-det td{padding:0;border-bottom:1px solid var(--border-fuerte,#3a4559)}
.cpb-gest{padding:16px 20px;background:var(--panel-3, #121826);display:grid;grid-template-columns:repeat(auto-fit,minmax(340px,1fr));gap:24px}
.cpb-h3{font-size: 12px;text-transform:uppercase;letter-spacing:.8px;opacity: 1;margin:0 0 9px;font-weight:700}
.cpb-cuotas,.cpb-contactos{width:100%;border-collapse:collapse;font-size: 12px;margin-bottom:8px}
.cpb-cuotas th,.cpb-contactos th{background:transparent;border-bottom:1px solid var(--border,#2a3345);text-align:left;padding:5px 7px;font-size: 13px}
.cpb-cuotas td,.cpb-contactos td{border-bottom:1px solid #1b2230;padding:3px 6px}
.cpb-contactos input,.cpb-contactos select{width:100%;background:var(--panel-3, #0d121a);color:var(--text);border:1px solid transparent;border-radius:3px;padding:4px 6px;font-family:inherit;font-size: 13px}
.cpb-contactos input:hover,.cpb-contactos select:hover{border-color:var(--border-fuerte,#3a4559)}
.cpb-contactos input:focus,.cpb-contactos select:focus{border-color:var(--azul,#4f8ef7);outline:0}
.cpb-del{text-align:center;width:44px}
.cpb-ciclo-nota{font-size: 12px;opacity: 1}
.cpb-sel-edit{display:flex;gap:5px;align-items:stretch}
.cpb-sel-edit select{flex:1;background:var(--panel-3, #0d121a);color:var(--text);border:1px solid var(--border-fuerte);border-radius:4px;padding:7px 9px;font-family:inherit;font-size: 13px}
.cpb-lapiz{border:1px solid var(--border-fuerte,#3a4559);background:var(--panel-2,#1c2432);border-radius:4px;padding:0 10px;cursor:pointer;opacity: 1;font-size: 13px}
.cpb-lapiz:hover{opacity:1;border-color:var(--azul,#4f8ef7)}
.cpb-editor-op,.cpb-msj-editor{background:var(--panel-3, #0d121a);border:1px solid var(--border-fuerte,#3a4559);border-radius:4px;padding:10px;margin:6px 0}
.cpb-editor-tit{font-size: 12px;text-transform:uppercase;letter-spacing:.6px;opacity: 1;font-weight:700;margin-bottom:8px}
.cpb-fila-op{display:flex;gap:6px;margin-bottom:5px}
.cpb-fila-op input{flex:1;background:var(--panel-3, #0d121a);color:var(--text);border:1px solid var(--border-fuerte);border-radius:4px;padding:6px 8px;font-family:inherit;font-size: 13px}
.cpb-wa-fila{display:flex;gap:8px;flex-wrap:wrap}
.cpb-wa{background:var(--panel-2, #1a3d2a);border-color:#2f7d4d;color:var(--text)}
.cpb-wa:hover{background:var(--panel, #245239);color:var(--text, #a9e6bd)}
.cpb-bonif{border-top:1px solid var(--border,#2a3345);margin-top:14px;padding-top:12px}
.cpb-bonif-nota{font-size: 12px;opacity: 1;margin-bottom:9px}
.cpb-reactivar{border-top:1px solid var(--border,#2a3345);margin-top:14px;padding-top:12px;display:flex;align-items:center;gap:10px}
.cpb-msj-fila{display:flex;gap:8px;margin-bottom:8px;align-items:flex-start}
.cpb-msj-nom{width:150px;flex:0 0 auto;background:var(--panel-3, #0d121a);color:var(--text);border:1px solid var(--border-fuerte);border-radius:4px;padding:6px 8px;font-family:inherit;font-size: 12px}
.cpb-msj-fila textarea{flex:1;background:var(--panel-3, #0d121a);color:var(--text);border:1px solid var(--border-fuerte);border-radius:4px;padding:6px 8px;font-family:inherit;font-size: 13px}
.cpb-msj-pie{display:flex;gap:8px;margin-top:6px}

/* ── Morosidad y Caída ────────────────────────────────────────────────── */
.mc-panel{padding-bottom:30px}
.mc-tabs{display:flex;gap:0;border-bottom:1px solid var(--border-fuerte,#3a4559);margin:6px 0 14px;overflow-x:auto}
.mc-tab{padding:10px 16px;border:0;border-bottom:2px solid transparent;background:none;cursor:pointer;color:var(--text);font-size: 12.5px;font-weight:600;white-space:nowrap}
.mc-tab:hover{color:var(--text,#eef1f6)}
.mc-tab.on{color:var(--text,#eef1f6);border-bottom-color:var(--rojo,#c2453b)}
.mc-controles{display:flex;gap:20px;flex-wrap:wrap;margin-bottom:12px}
.mc-grupo{display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.mc-lbl{font-size: 12px;text-transform:uppercase;letter-spacing:.6px;opacity: 1;font-weight:700}
.mc-chip{font-size: 12px;padding:6px 11px;border-radius:4px;border:1px solid var(--border-fuerte,#3a4559);background:var(--panel-2,#1c2432);color:var(--text);cursor:pointer;font-weight:600}
.mc-chip:hover{color:var(--text);border-color:#4b5870}
.mc-chip.on{background:var(--rojo,#c2453b);color:#fff;border-color:#9c342c}
.mc-chip--tope{border-color:var(--amber,#f2c200);color:var(--text)}
.mc-chip--tope:hover{background:rgba(242,194,0,.12)}
.mc-cortes{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:14px}
.mc-corte{display:flex;align-items:center;gap:5px;font-size: 12px;cursor:pointer}
.mc-corte--tope{color:var(--text)}
.mc-graf-box{padding:14px 16px;margin-top:4px}
.mc-graf-tit{font-size: 12px;text-transform:uppercase;letter-spacing:.8px;opacity: 1;font-weight:700;margin-bottom:8px}
.mc-leyenda{display:flex;gap:16px;font-size: 12px;margin-bottom:8px;flex-wrap:wrap}
.mc-leyenda span{display:flex;align-items:center;gap:6px}
.mc-leyenda i{width:16px;height:3px;border-radius:2px;display:inline-block}
.mc-graf-wrap{width:100%;overflow:hidden}
.mc-graf-wrap svg{display:block;width:100%;height:auto}
.mc-tabla tr.mc-fila{cursor:pointer}
.mc-tabla tr.mc-fila:hover{background:rgba(79,142,247,.06)}
.mc-barra-col{min-width:70px;width:34%}
.mc-barra-fondo{background:var(--panel-3, #1b2230);border-radius:3px;height:8px;width:100%;overflow:hidden}
.mc-barra-val{height:8px;border-radius:3px;background:var(--rojo,#c2453b)}

/* ── Morosidad y Caída ────────────────────────────────────────────────── */
.myc .ac-sub-intro{margin-top:6px}
.myc-tabs{display:flex;gap:0;border-bottom:1px solid var(--border-fuerte,#3a4559);margin-bottom:14px;overflow-x:auto}
.myc-tab{padding:9px 16px;border:0;border-bottom:2px solid transparent;background:none;cursor:pointer;color:var(--text);font-size: 12.5px;font-weight:600;white-space:nowrap}
.myc-tab:hover{color:var(--text,#eef1f6)}
.myc-tab.on{color:var(--text,#eef1f6);border-bottom-color:var(--rojo,#c2453b)}
.myc-modos{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-bottom:12px}
.myc-modo{font-size: 12px;padding:6px 12px;border-radius:4px;border:1px solid var(--border-fuerte,#3a4559);background:var(--panel-2,#1c2432);color:var(--text);cursor:pointer;font-weight:600}
.myc-modo.on{background:var(--rojo,#c2453b);color:#fff;border-color:#9c342c}
.myc-sep-v{width:1px;height:20px;background:var(--border,#2a3345);margin:0 4px}
.myc-medida-casa{font-size: 12px;opacity: 1;margin-left:6px}
.myc-medida-casa b{opacity:1}
.myc-filtros{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:14px}
.myc-filtros label{font-size: 12px;text-transform:uppercase;letter-spacing:.6px;opacity: 1;font-weight:700;display:flex;flex-direction:column;gap:4px}
.myc-filtros select{font-family:inherit;font-size: 13px;text-transform:none;letter-spacing:0;font-weight:400;background:var(--panel-3, #0d121a);color:var(--text);border:1px solid var(--border-fuerte);border-radius:4px;padding:7px 9px;min-width:180px;max-width:100%}
.myc-inds{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;margin-bottom:16px}
.myc-ind{background:var(--panel-2,#1c2432);border:1px solid var(--border,#2a3345);border-radius:5px;padding:11px 13px}
.myc-ind--casa{border-color:var(--amber,#f2c200)}
.myc-ind .ac-iv{font-size: 21px;font-weight:700;margin-top:3px;font-variant-numeric:tabular-nums}
.myc-panel{background:var(--panel,#161c28);border:1px solid var(--border,#2a3345);border-radius:6px;padding:14px 16px;margin-bottom:16px;overflow:hidden}
.myc-leyenda{display:flex;gap:16px;font-size: 12px;margin:0 0 8px;flex-wrap:wrap}
.myc-leyenda span{display:flex;align-items:center;gap:6px}
.myc-leyenda i{width:16px;height:3px;border-radius:2px;display:inline-block}
.myc-grafwrap{width:100%;overflow:hidden}
.myc-grafwrap svg{display:block;width:100%;height:auto}
.myc-tabla td{vertical-align:middle}
.myc-fila{cursor:pointer}
.myc-fila:hover{background:rgba(79,142,247,.06)}
.myc-casa-tag{font-size: 12px;background:var(--amber,#f2c200);color:#000;font-weight:700;border-radius:3px;padding:1px 5px;margin-left:6px;text-transform:uppercase;letter-spacing:.4px}
.myc-barra-col{min-width:70px;width:26%}
.myc-barra-fondo{background:var(--panel-2, #1b2230);border-radius:3px;height:8px;width:100%;overflow:hidden}
.myc-barra-val{height:8px;border-radius:3px;background:var(--rojo,#c2453b)}
.myc-det td{padding:0;background:var(--panel-3, #121826)}
.myc-det-in{padding:12px 16px}

/* ── Fomentación ──────────────────────────────────────────────────────── */
.fom-tabs{display:flex;gap:0;border-bottom:1px solid var(--border-fuerte,#3a4559);margin-bottom:14px;overflow-x:auto}
.fom-tab{padding:9px 16px;border:0;border-bottom:2px solid transparent;background:none;cursor:pointer;color:var(--text);font-size: 12.5px;font-weight:600;white-space:nowrap}
.fom-tab:hover{color:var(--text,#eef1f6)}
.fom-tab.on{color:var(--text,#eef1f6);border-bottom-color:#9b7ff2}
.fom-embudo{display:flex;gap:6px;flex-wrap:wrap;margin:0 0 16px}
.fom-paso{flex:1;min-width:110px;text-align:left;background:var(--panel-2,#1c2432);border:1px solid var(--border,#2a3345);border-radius:5px;padding:11px 13px;cursor:pointer;font-family:inherit}
.fom-paso:hover{border-color:var(--border-fuerte,#3a4559)}
.fom-paso.on{border-color:#9b7ff2;background:rgba(155,127,242,.08)}
.fom-v{font-size: 22px;font-weight:700;margin-top:3px;font-variant-numeric:tabular-nums}
.fom-conv{font-size: 12px;color:var(--text);margin-top:1px}
.fom-barra{height:4px;border-radius:2px;background:#9b7ff2;margin-top:7px;opacity: 1;max-width:100%}
.fom-tabla td{vertical-align:middle}
.fom-fila:hover{background:rgba(155,127,242,.05)}
.fom-et{font-size: 12px;padding:2px 7px;border-radius:3px;font-weight:700;white-space:nowrap}
.e-cond{background:rgba(159,171,191,.14);color:var(--text)}
.e-cont{background:rgba(79,142,247,.16);color:var(--text)}
.e-int{background:rgba(155,127,242,.16);color:var(--text)}
.e-ofer{background:rgba(242,194,0,.14);color:var(--text)}
.e-gano{background:rgba(63,157,99,.18);color:var(--text)}
.e-perdio{background:rgba(194,69,59,.14);color:var(--text)}
.pago{font-size: 12px;padding:2px 7px;border-radius:3px;font-weight:700}
.p-contado{background:rgba(63,157,99,.14);color:var(--text)}
.p-usado{background:rgba(242,194,0,.12);color:var(--text)}
.fom-det td{padding:0;background:var(--panel-2, #121826)}
.fom-gest{padding:16px 20px;display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:24px}
.fom-gest-col .g-dato{font-size: 12px}
.fom-check{display:flex;align-items:center;gap:8px;font-size: 12px;margin:5px 0;cursor:pointer}

/* ── Toggle de vista del seguimiento (fila / panel) ───────────────────── */
.vista-toggle{display:inline-flex;border:1px solid var(--border-fuerte,#3a4559);border-radius:4px;overflow:hidden}
.vista-op{border:0;border-radius:0;background:var(--panel-2,#1c2432);color:var(--text);font-size: 12px;padding:6px 11px;cursor:pointer;font-weight:600}
.vista-op:hover{color:var(--text,#eef1f6)}
.vista-op.on{background:var(--violeta,#9b7ff2);color:#000}
/* En Cobranzas el acento del toggle es azul, para no chocar con el violeta de Fomentación */
.cpb .vista-op.on{background:var(--azul,#4f8ef7);color:#fff}
/* ── Modo "todo en la fila": las columnas del detalle fluyen horizontales ── */
.fom-gest--compacto,.cpb-gest--compacto{display:flex;flex-wrap:wrap;gap:18px;align-items:flex-start}
.fom-gest--compacto .fom-gest-col,.cpb-gest--compacto .cpb-gest-col{flex:1 1 300px;min-width:260px}

/* ── Acto de Adjudicación ─────────────────────────────────────────────── */
.fom-acto-form label{font-size: 12px;text-transform:uppercase;letter-spacing:.6px;opacity: 1;font-weight:700;display:flex;flex-direction:column;gap:4px;margin-top:12px;max-width:340px}
.fom-acto-form input{font-family:inherit;font-size: 13px;text-transform:none;letter-spacing:0;font-weight:400;background:var(--panel-3, #0d121a);color:var(--text);border:1px solid var(--border-fuerte);border-radius:4px;padding:7px 9px}
.fom-adj{font-size: 12px;padding:2px 8px;border-radius:3px;font-weight:700;white-space:nowrap}
.fom-adj--sorteo{background:rgba(79,142,247,.16);color:var(--text)}
.fom-adj--licitacion{background:rgba(63,157,99,.18);color:var(--text)}
.fom-adj--desierta{background:rgba(194,69,59,.14);color:var(--text)}
.fom-acto-guardado{border:1px solid var(--border,#2a3345);border-radius:6px;padding:12px 14px;margin-bottom:10px;background:var(--lavado)}
.fom-acto-cab{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:8px}
.fom-acto-cab b{font-size: 13px}
.fom-acto-cab .sc-btn{margin-left:auto}
.fom-acto-nums{display:flex;gap:8px;flex-wrap:wrap;font-size: 12px;opacity: 1}

/* ── Fomentación: viabilidad, licitación, integración manual ──────────── */
.fom-viab-inds{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:10px;margin:0 0 14px}
.fom-manual{border-top:1px solid var(--border,#2a3345);margin-top:12px;padding-top:10px}
.fom-manual .g-row{gap:8px;flex-wrap:wrap}
.fom-manual input{background:var(--panel-3, #0d121a);color:var(--text);border:1px solid var(--border-fuerte);border-radius:4px;padding:6px 8px;font-family:inherit;font-size: 13px}
.fom-check--destacado{background:rgba(155,127,242,.10);border:1px solid rgba(155,127,242,.4);border-radius:4px;padding:5px 9px}
.fom-usado-fotos{font-size: 12px;opacity:.7;margin-top:4px}

/* ── Transferencia de titularidad ─────────────────────────────────────── */
.transf-hist{border-top:1px solid var(--border,#2a3345);margin-top:12px;padding-top:12px}
.transf-hist table{margin-top:6px}
.transf-nuevo{border-top:1px solid var(--border,#2a3345);margin-top:14px;padding-top:12px}

/* Color de compra bloqueado. El dato se ve como dato, no como celda para
   completar; el candado se abre con doble clic y una confirmacion. */
.col-cmp-dato { cursor: pointer; user-select: none; }
.col-cmp-dato:hover { border-color: color-mix(in srgb, var(--accent-amber, #f2c200) 70%, transparent); }
.col-cmp-pregunta {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-top: 6px;
}
.col-cmp-pregunta > span { font-size: 12px; color: var(--text); }
.col-cmp-pregunta .lu-btn { padding: 4px 9px; font-size: 12px; }


/* ── Consulta Individual de Planes ──────────────────────────────────────
   Diseno formal: bloques con titulo y linea, encabezado y pie con el color
   de la casa, buscador angosto con los botones al lado. Sin tarjetas
   flotantes: todo se ordena con lineas de un pixel. */
/* LA FICHA TIENE ALTO FIJO: encabezado y pie quietos, lo del medio se
   desplaza. Sin plan elegido mide lo mismo que con uno: la forma no cambia
   con el contenido. */
.cip { background: var(--panel, #1b2233); border: 1px solid var(--border, #252d3f); border-radius: 10px;
  overflow: hidden; display: flex; flex-direction: column; height: min(calc(86vh / var(--tcg-z, 1)), 900px); }
.cip > .cip-cab, .cip > .cip-barra, .cip > .cip-acciones, .cip > .cip-pie { flex: 0 0 auto; }
.cip > .cip-medio { flex: 1 1 auto; min-height: 0; overflow: auto; }
.cip-acciones { display: flex; gap: 6px; flex-wrap: wrap; align-items: center;
  padding: 8px 14px; border-bottom: 1px solid var(--border, #252d3f); }
.cip-accion { flex: 1 0 100%; margin-top: 6px; padding: 10px 12px; border-radius: 9px;
  border: 1px solid var(--accent-amber, #f2c200);
  background: color-mix(in srgb, var(--accent-amber, #f2c200) 8%, var(--panel-2, #1b2233)); }
.cip-accion-tit { font-size: 12px; font-weight: 700; color: var(--text); margin-bottom: 6px; }
.cip-pie { display: flex; align-items: center; gap: 12px; padding: 9px 14px; font-size: 13px; }

/* ── Cartera ──────────────────────────────────────────────────────────── */
.car { background: var(--panel, #1b2233); border: 1px solid var(--border, #252d3f); border-radius: 10px;
  overflow: hidden; display: flex; flex-direction: column; height: min(calc(88vh / var(--tcg-z, 1)), 940px); }
.car > .cip-cab, .car > .cip-pie { flex: 0 0 auto; }
.car > .car-medio { flex: 1 1 auto; min-height: 0; overflow: auto; padding: 12px 14px; }
/* Cada bloque un renglón de ancho completo, con su rótulo: se lee como una
   lista —qué miro, cómo filtro, qué hago, qué falta, cómo estamos, los datos—. */
.car-bloq { border: 1px solid var(--border, #252d3f); border-radius: 10px; background: var(--panel-2, #1b2233);
  padding: 8px 10px; margin-bottom: 10px; }
.car-bloq-tit { font-size: 12px; text-transform: uppercase; letter-spacing: .6px; color: var(--text);
  margin-bottom: 6px; }
.car-bloq--barra { display: flex; align-items: center; gap: 6px; }
.car-bloq--barra .car-bloq-tit { margin: 0 8px 0 0; }
.car-cortes { display: flex; gap: 6px; flex-wrap: nowrap; overflow-x: auto; }
.car-corte { padding: 6px 12px; border-radius: 9px; border: 1px solid var(--border, #252d3f);
  background: var(--panel, #161c2a); color: var(--text); cursor: pointer; text-align: left; white-space: nowrap; }
.car-corte b { display: block; font-size: 13px; color: var(--text, #ecf0f4); font-weight: 600; }
.car-corte span { font-size: 12px; }
.car-corte.es-on { border-color: var(--accent-amber, #f2c200);
  background: color-mix(in srgb, var(--accent-amber, #f2c200) 12%, var(--panel-2, #1b2233)); }
.car-corte.es-on b { color: var(--text); }
.car-n { display: inline-block; margin-left: 6px; font-size: 12px; font-style: normal;
  background: var(--border, #252d3f); border-radius: 999px; padding: 0 7px; color: var(--text, #ecf0f4); }
.car-sep { width: 1px; height: 22px; background: var(--border, #252d3f); margin: 0 8px; align-self: center; }
.car-espacio { flex: 1; }
.car-filtros { display: flex; gap: 22px; align-items: flex-end; flex-wrap: wrap; }
.car-campo { display: flex; flex-direction: column; gap: 3px; }
.car-campo span, .car-rot { font-size: 12px; text-transform: uppercase; letter-spacing: .4px; color: var(--text); }
.car-rot { margin-bottom: 4px; }
.car-campo input { padding: 6px 10px; border-radius: 7px; border: 1px solid var(--border, #252d3f);
  background: var(--panel, #131a28); color: var(--text, #ecf0f4); font-size: 13px; width: 200px; }
.car-chips { display: flex; gap: 6px; flex-wrap: wrap; }
.car-chip { padding: 4px 9px; border-radius: 999px; border: 1px solid var(--border, #252d3f);
  background: var(--panel, #131a28); color: var(--text); font-size: 12px; cursor: pointer; }
.car-chip.es-on { background: var(--text, #ecf0f4); color: #000; border-color: var(--text, #ecf0f4); font-weight: 700; }
/* Siete lugares fijos: los dos renglones miden lo mismo aunque un corte use menos. */
.car-inds { display: grid; grid-template-columns: repeat(7, 1fr); gap: 8px; }
.car-ind { border: 1px solid var(--border, #252d3f); border-radius: 9px; padding: 7px 10px; background: var(--panel, #121826); min-height: 62px; }
/* 21/09/2026 (Ramiro: «hay indicadores con letra que no se ve»). Las tarjetas
   son botones, y la que no filtra nada queda deshabilitada: el navegador le
   pone su gris de «apagado» (en oscuro, casi invisible; en claro, gris). Una
   tarjeta sin filtro no está apagada: es sólo un dato. Letra del tema,
   siempre. */
.car-ind { color: var(--text, #ecf0f4); font: inherit; text-align: left; }
.car-ind:disabled { color: var(--text, #ecf0f4); opacity: 1; cursor: default; }
.car-ind:disabled .v { color: var(--text, #ecf0f4); }
.car-ind--mal:disabled .v { color: var(--red, #e2574c); }
.car-ind--bien:disabled .v { color: var(--text); }
.car-ind .k { font-size: 12px; text-transform: uppercase; letter-spacing: .5px; color: var(--text); }
.car-ind .v { font-size: 19px; font-weight: 800; letter-spacing: -.6px; }
.car-ind .n { font-size: 12px; color: var(--text); }
.car-ind--mal .v { color: var(--red, #e2574c); }
.car-ind--bien .v { color: var(--text); }
.car-ind--ojo .v { color: var(--text); }
.car-planilla .sc-table-scroll { max-height: 460px; }

/* Cobranzas y morosidad: mismo modal, dos solapas, alto fijo. */
.cym { background: var(--panel, #1b2233); border: 1px solid var(--border, #252d3f); border-radius: 10px;
  overflow: hidden; display: flex; flex-direction: column; height: min(calc(88vh / var(--tcg-z, 1)), 940px); }
.cym > .cip-cab, .cym > .pv-solapas { flex: 0 0 auto; }
.cym > .cym-medio { flex: 1 1 auto; min-height: 0; overflow: auto; }
/* EL ENCABEZADO COMUN, EN LAS CAJAS DE ALTO FIJO (14/09/2026).
   Estas tres cajas son columnas flexibles con alto clavado, y tenian escrito
   «no te encojas» sólo para las dos piezas viejas —«cip-cab» y
   «pv-solapas»—. Al cambiarlas por el encabezado comun, el encabezado quedo
   con el encogimiento por defecto: la caja lo apreto, las solapas se salieron
   por abajo y el texto de la pantalla les paso por encima. Lo vio Ramiro en
   la foto de Cobranzas.
   Se nombran las tres juntas porque las tres van a usar el encabezado comun,
   y asi la proxima no aparece el mismo solapamiento en Suscripcion. */
.cym > .tcg-envoltura, .cym > .tcg-env-sol,
.sus-completa > .tcg-envoltura, .sus-completa > .tcg-env-sol,
.adj-pant > .tcg-envoltura, .adj-pant > .tcg-env-sol { flex: 0 0 auto; margin-bottom: 0; }
.cym > .tcg-env-sol, .sus-completa > .tcg-env-sol, .adj-pant > .tcg-env-sol { margin-bottom: 0; }

/* ═══ UNA SOLA CAJA, IGUAL A GESTORIA (Ramiro, 14/09/2026) ═══════════════
   Lo que se veia: la banda de color y las carpetas ocupaban todo el ancho y
   la pantalla de adentro dibujaba SU PROPIA caja, mas angosta y corrida. Dos
   cajas, dos anchos, nada alineado.
   Gestoria tiene una sola: «per-modal» con el encabezado, las carpetas, el
   contenido y el pie adentro, todos del mismo ancho. Se copia esa medida
   —1156 px, centrada— y se apaga la caja de la pantalla de adentro, que pasa
   a ser contenido y no un recuadro aparte. */
.cym, .sus-completa, .adj-pant, .car, .sc-panel.fom, .sc-panel.cfg-panel,
.sc-panel.ac-panel, .lc-panel.sus-pantalla {
  max-width: 1156px; margin-left: auto; margin-right: auto;
  border-radius: 14px; border-color: var(--border, #2c2f36);
}
.cym > .cym-medio > .lc-panel, .cym > .cym-medio > .sc-panel,
.sus-completa > .sus-completa-medio > .lc-panel, .sus-completa > .sus-completa-medio > .sc-panel,
.sus-completa > .sus-completa-medio > .cc-pantalla,
/* LAS TRES SOLAPAS, LA MISMA FORMA (14/09/2026, Ramiro: «mismo envoltorio,
   pie y tamaño los tres»). Venta venía en una tarjeta angosta y centrada,
   Usado a todo el ancho y Facturación con su propia banda. Acá adentro
   ninguna dibuja su caja: la caja es la de «Adjudicados». */
.adj-pant .adj-medio .lc-panel, .adj-pant .adj-medio .sc-panel,
.adj-pant .adj-medio .cip {
  background: transparent; border: 0; box-shadow: none; border-radius: 0;
  max-width: none; width: auto; margin: 0; padding: 0;
}
.adj-pant .adj-medio .ivj-pie { display: none; }
.adj-pant > .adj-medio > .lc-panel, .adj-pant > .adj-medio > .sc-panel,
.sc-panel.fom > .lc-panel, .sc-panel.fom > .sc-panel {
  background: transparent; border: 0; box-shadow: none; border-radius: 0;
  max-width: none; width: auto; margin: 0; padding: 12px 16px;
}
/* El pie de la pantalla de adentro pasa a ser el pie de la caja: pegado
   abajo y sin el margen que lo separaba cuando era una tarjeta suelta. */
.cym > .cym-medio > * > .ivj-pie,
.sus-completa > .sus-completa-medio > * > .ivj-pie,
.adj-pant > .adj-medio > * > .ivj-pie { margin-bottom: 0; border-radius: 0; }


/* Suscripción de punta a punta: los cuatro pasos, en el orden en que pasan. */
.sus-completa { background: var(--panel, #1b2233); border: 1px solid var(--border, #252d3f);
  border-radius: 10px; overflow: hidden; display: flex; flex-direction: column; height: min(calc(88vh / var(--tcg-z, 1)), 940px); }
.sus-completa > .cip-cab, .sus-completa > .pv-solapas { flex: 0 0 auto; }
.sus-completa > .sus-completa-medio { flex: 1 1 auto; min-height: 0; overflow: auto; }

/* Adjudicados: del sorteo a la entrega, tres solapas y alto fijo. */
.adj-pant { background: var(--panel, #1b2233); border: 1px solid var(--border, #252d3f);
  border-radius: 10px; overflow: hidden; display: flex; flex-direction: column; height: min(calc(88vh / var(--tcg-z, 1)), 940px); }
.adj-pant > .cip-cab, .adj-pant > .pv-solapas { flex: 0 0 auto; }
.adj-pant > .adj-medio { flex: 1 1 auto; min-height: 0; overflow: auto; }
/* El logo en el encabezado común: al lado del título, sin empujarlo. */
.brandline > .logo-dealer { flex: 0 0 auto; margin-right: 10px; }
.pc-barra-sep { display: inline-block; width: 1px; height: 20px; margin: 0 6px;
  background: var(--border, #252d3f); vertical-align: middle; }
.cip-pie-sep { flex: 1; }
.cip-cab {
  display: flex; align-items: center; gap: 14px; padding: 12px 20px;
  background: var(--accent-amber, #f2c200); color: #000;
}
.cip-cab-tit h3 { margin: 0; font-size: 16.5px; font-weight: 700; }
.cip-cab-tit p { margin: 2px 0 0; font-size: 12px; opacity: 1; }
.cip-barra {
  display: flex; gap: 8px; align-items: center; flex-wrap: wrap;
  padding: 13px 20px; border-bottom: 1px solid var(--border, #252d3f);
  background: var(--panel-2, #222b40);
}
.cip-busca {
  width: 330px; max-width: 100%; background: var(--panel-2, #141a28);
  border: 1px solid var(--border, #252d3f); color: var(--text, #ecf0f4);
  border-radius: 6px; padding: 8px 11px; font-size: 13px;
}
.cip-historia {
  margin-left: auto; display: flex; align-items: center; gap: 8px; font-size: 12.5px;
  color: var(--text); padding-right: 4px;
  border-right: 1px solid var(--border, #252d3f);
}
.cip-historia b { color: var(--text, #ecf0f4); }
.cip-historia .lu-btn { padding: 4px 9px; line-height: 1; }
.cip-historia + .cip-estado { margin-left: 0; }
.cip-estado { margin-left: auto; display: flex; align-items: center; gap: 9px; font-size: 12.5px; }
.cip-estado > span { color: var(--text); }
.cip-estado b {
  border: 1px solid var(--green, #4caf6d); color: var(--text); border-radius: 4px;
  padding: 3px 10px; letter-spacing: .3px;
}
/* La cuenta del cliente, al lado del estado: hasta ahora había que entrar a
   la solapa de movimientos para saber si tenía plata a favor, y es lo primero
   que se pregunta cuando el cliente llama. Va sin color propio cuando está en
   cero: verde y rojo sólo cuando dicen algo. */
.cip-saldo { margin-left: 18px; }
.cip-saldo b { border-color: var(--border, #2b3348); color: var(--text, #ecf0f4); }
.cip-saldo--favor b { border-color: #4f8ef7; color: var(--text); }
.cip-saldo--debe b { border-color: var(--red, #e2574c); color: #ff9b92; }
/* El tilde de plan propio, al lado del estado. Apagado mientras no lo esté:
   marcado en amarillo se ve de lejos, que es lo que se busca cuando alguien
   revisa la cartera de la casa. */
.cip-propio { margin-left: 14px; background: transparent; border: 1px dashed var(--border, #2b3348);
  color: var(--text); border-radius: 4px; padding: 3px 10px; font: inherit;
  font-size: 12px; cursor: pointer; }
.cip-propio--on { border-style: solid; border-color: var(--accent-amber, #f2c200);
  color: #000; background: var(--accent-amber, #f2c200); font-weight: 600; }
/* Aviso de que se esta mirando el pasado. Tiene que cortar la vista: si no,
   alguien carga un movimiento creyendo que esta en el titular de hoy. */
.cip-aviso-hist {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  padding: 10px 20px; font-size: 12.5px; line-height: 1.5;
  background: rgba(224,114,95,.12); border-bottom: 1px solid rgba(224,114,95,.45);
  color: var(--text);
}
.cip-aviso-hist b { color: var(--text, #ecf0f4); }
.cip-aviso-hist .lu-btn { margin-left: auto; padding: 5px 11px; }
/* El semaforo del scoring: tres estados, no dos. El gris es «nadie lo miro». */
.cip-sem {
  display: inline-block; width: 9px; height: 9px; border-radius: 50%;
  margin-right: 6px; vertical-align: middle;
}
.cip-sem--bueno { background: var(--green, #4caf6d); }
.cip-sem--malo  { background: var(--red, #E0725F); }
.cip-sem--sin   { background: #6b7488; }
.cip-sco-cab { display: flex; align-items: center; gap: 9px; flex-wrap: wrap; margin-bottom: 12px; }
.cip-sco-cab strong { font-size: 15px; }
.cip-sco-cab em { color: var(--text); font-style: normal; font-size: 12px; }
.cip-sco-datos { border-top: 1px solid var(--border, #252d3f); padding-top: 10px; }
.cip-sco-abierto {
  margin-top: 12px; padding: 9px 12px; font-size: 12.5px; line-height: 1.5;
  border-left: 3px solid var(--red, #E0725F); background: rgba(224,114,95,.1);
  color: var(--text);
}
.cip-fila-actual td { font-weight: 700; }
/* Aclaraciones dentro de una solapa: por que falta un dato o de donde sale. */
.cip-aclara {
  margin: 0 0 12px; font-size: 12px; line-height: 1.55; color: var(--text);
  padding-left: 10px; border-left: 2px solid var(--border, #252d3f);
}
.cip-aclara b { color: var(--text, #ecf0f4); }
.cip-aclara--falta { border-left-color: var(--red, #E0725F); margin: 14px 0 0; }
/* La grilla de cuotas: un cuadradito por cuota. */
.cip-grilla { display: flex; flex-wrap: wrap; gap: 4px; }
.cip-cuota {
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 26px; height: 22px; padding: 0 4px; border-radius: 4px;
  font-size: 12px; font-variant-numeric: tabular-nums;
  border: 1px solid var(--border, #252d3f); color: var(--text);
}
.cip-cuota--paga { background: rgba(76,175,109,.22); border-color: rgba(76,175,109,.55); }
.cip-cuota--impaga { background: rgba(224,114,95,.24); border-color: rgba(224,114,95,.6); }
.cip-cuota--enCurso { background: rgba(242,194,0,.24); border-color: rgba(242,194,0,.6); }
.cip-cuota--porVencer { background: transparent; }
.cip-ind-r .cip-cuota { min-width: 12px; height: 12px; padding: 0; }
/* Correccion de un dato de la ficha. */
.cip-editable { cursor: pointer; border-bottom: 1px dashed var(--border, #252d3f); }
.cip-editable:hover { border-bottom-color: var(--accent-amber, #f2c200); }
.cip-edit { display: flex; gap: 6px; align-items: center; flex-wrap: wrap; }
.cip-edit input {
  flex: 1; min-width: 120px; background: var(--panel-2, #141a28); border: 1px solid var(--accent-amber, #f2c200);
  color: var(--text, #ecf0f4); border-radius: 6px; padding: 5px 8px; font-size: 13px;
}
.cip-edit .lu-btn { padding: 4px 9px; font-size: 12px; }
.cip-manual {
  margin-left: 6px; font-size: 12px; letter-spacing: .3px; text-transform: uppercase;
  color: var(--text); border: 1px solid currentColor;
  border-radius: 3px; padding: 0 4px; font-weight: 700;
}
.cip-resultados { padding: 14px 20px; }
.cip-vacio { color: var(--text); line-height: 1.6; padding: 10px 0; }
/* Sin plan elegido la estructura esta igual, pero apagada: se lee «aca no hay
   dato» en vez de «aca no hay campo». Y el alta se ve, para saber que existe
   antes de buscar; esconderla dejaba la pantalla muda. */
.cip-alta--apagada { opacity: 1; pointer-events: none; }
/* ── Facturación de Plan ────────────────────────────────────────────────── */
.fac-pend { margin-left: auto; font-size: 12px; color: var(--text); }
/* ── Señales de comisiones ──────────────────────────────────────────────── */
.sen-vig {
  display: flex; gap: 10px; align-items: center; flex-wrap: wrap;
  padding: 12px 20px; border-bottom: 1px solid var(--border, #252d3f);
  background: var(--panel-2, #222b40); font-size: 12.5px;
}
.sen-vig input { background: var(--panel-3, #141a28); border: 1px solid var(--border, #252d3f);
  color: var(--text, #ecf0f4); border-radius: 6px; padding: 6px 9px; font-size: 13px; }
.sen-circ { color: var(--text); }
.sen-hist { margin-left: auto; color: var(--text); font-size: 12px; }
.sen-sub { font-size: 12px; color: var(--text); margin: -6px 0 11px; }
.sen-tabla td { vertical-align: top; }
.sen-tabla input, .sen-tabla select {
  width: 100%; background: var(--panel-3, #141a28); border: 1px solid var(--border, #252d3f);
  color: var(--text, #ecf0f4); border-radius: 5px; padding: 5px 7px; font-size: 13px;
}
.sen-pc { width: 78px !important; text-align: right; border-color: var(--accent-amber, #f2c200) !important; }
.sen-fijo, .sen-cuotas { display: inline-flex; align-items: center; gap: 5px; margin-top: 5px; font-size: 12px; }
/* El botón que abre la tabla de tramos. Un concepto por escala no tiene UN
   porcentaje: tiene una tabla, y meterla en la fila la haría ilegible. */
.sen-abrir {
  display: inline-block; margin-top: 5px; background: transparent; border: none;
  color: var(--text); font-size: 12px; cursor: pointer;
  text-decoration: underline; padding: 0;
}
.sen-tramos > td { background: rgba(255, 255, 255, .03); padding: 10px 14px; }
.sen-tabla-tramos { width: auto; min-width: 420px; border-collapse: collapse; }
.sen-tabla-tramos th {
  background: transparent; border-bottom: 1px solid var(--border, #252d3f);
  border-top: none; padding: 4px 8px; font-size: 13px;
}
.sen-tabla-tramos td { border-bottom: 1px solid var(--border, #252d3f); padding: 4px 8px; }
.sen-tabla-tramos input {
  width: 150px; background: var(--panel-3, #141a28); border: 1px solid var(--border, #252d3f);
  color: var(--text, #ecf0f4); border-radius: 5px; padding: 4px 7px; font-size: 13px;
}
.sen-tramo { display: flex; align-items: center; gap: 6px; margin-bottom: 5px; font-size: 12px; }
.sen-tramo select { flex: 1; }
.sen-borrar { width: 42px; text-align: center; }
.sen-mas { margin-top: 10px; padding: 5px 11px; font-size: 12px; }
/* Lo que no figura en la circular queda marcado: son los porcentajes de
   margen, que los paga la terminal y vienen por otro papel. */
.sen-verif { display: block; margin-top: 4px; font-size: 12px; color: var(--red, #E0725F); }
/* ── Comisiones pendientes de cobrar ────────────────────────────────────── */
.com-filtros { margin-left: auto; display: flex; gap: 6px; }
.com-cobrada td { opacity: 1; }
.com-marcar { white-space: nowrap; }
/* Cuando falta un dato se dice cuál, en vez de mostrar un importe en cero que
   parecería una comisión que no se cobra. */
.com-falta { display: block; margin-top: 3px; font-size: 12px; color: var(--red, #E0725F); }
.com-delmes {
  margin-top: 18px; padding: 13px 16px; border-left: 3px solid var(--accent-amber, #f2c200);
  background: rgba(242, 194, 0, .07); border-radius: 0 8px 8px 0;
}
.com-delmes h5 {
  margin: 0 0 6px; font-size: 12px; letter-spacing: 1px; text-transform: uppercase;
  color: var(--text);
}
.com-delmes p { margin: 0; font-size: 12px; line-height: 1.55; color: var(--text); }
.com-delmes ul { margin: 9px 0 0; padding-left: 19px; color: var(--text); font-size: 12.5px; }
.com-delmes li { margin: 4px 0; }
.com-delmes b { color: var(--text, #ecf0f4); }
.fac-par { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin-bottom: 12px; }
.fac-campos { display: grid; grid-template-columns: repeat(auto-fit, minmax(185px, 1fr)); gap: 11px; }
.fac-campo span {
  display: block; font-size: 12px; letter-spacing: .4px; text-transform: uppercase;
  color: var(--text); margin-bottom: 4px;
}
.fac-campo input {
  width: 100%; background: var(--panel-3, #141a28); border: 1px solid var(--border, #252d3f);
  color: var(--text, #ecf0f4); border-radius: 6px; padding: 7px 9px; font-size: 13px;
}
.fac-campo small { display: block; margin-top: 4px; font-size: 12px; color: var(--text); }
.fac-campo--clave input { border-color: var(--accent-amber, #f2c200); }
/* Los que sólo llegan por el reporte se ven distintos: que no parezca que se
   pueden escribir y después no se pueda. */
.fac-campo--reporte input { background: var(--panel-3, #11161f); color: var(--text); cursor: default; }
.fac-num { text-align: right; font-variant-numeric: tabular-nums; }
.fac-apagado { opacity: 1; pointer-events: none; }
.fac-aviso {
  display: flex; gap: 9px; align-items: flex-start; margin-top: 12px;
  padding: 10px 13px; font-size: 12.5px; line-height: 1.5;
  border-left: 3px solid var(--border, #252d3f); color: var(--text);
}
.fac-aviso b { color: var(--text, #ecf0f4); }
.fac-aviso--ok { border-left-color: var(--green, #4caf6d); background: rgba(76,175,109,.09); }
.fac-aviso--ojo { border-left-color: var(--red, #E0725F); background: rgba(224,114,95,.1); }
.fac-foto { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; margin-top: 14px; }
.fac-foto-caja {
  width: 120px; height: 78px; border: 1px dashed var(--border, #252d3f); border-radius: 8px;
  display: grid; place-items: center; color: var(--text); font-size: 12px;
  text-align: center; flex: none; overflow: hidden;
}
.fac-foto-caja--con { border-style: solid; border-color: var(--green, #4caf6d); }
.fac-foto-caja img { width: 100%; height: 100%; object-fit: cover; }
.fac-subir { display: inline-block; cursor: pointer; }
.fac-subir input { display: none; }
.fac-foto-ayuda { font-size: 12px; color: var(--text); margin-top: 6px; }
.cip-pie-fac {
  display: flex; gap: 10px; align-items: center; flex-wrap: wrap;
  padding: 12px 20px; border-top: 1px solid var(--border, #252d3f);
  background: var(--panel-2, #222b40); font-size: 13px; color: var(--text);
}
.cip-pie-fac .lu-btn:last-child { margin-left: auto; }
.cip-d strong:empty::after { content: "—"; }
.cip-fila { cursor: pointer; }
.cip-fila:hover { background: var(--lavado-2); }
.cip-ficha { display: grid; grid-template-columns: 1.4fr .9fr; border-bottom: 1px solid var(--border, #252d3f); }
.cip-col + .cip-col { border-left: 1px solid var(--border, #252d3f); }
.cip-bloque { padding: 12px 20px; border-bottom: 1px solid var(--border, #252d3f); }
.cip-bloque:last-child { border-bottom: none; }
.cip-bloque h4 {
  margin: 0 0 10px; font-size: 12px; letter-spacing: 1.1px; text-transform: uppercase;
  color: var(--text); font-weight: 700; padding-bottom: 6px;
  border-bottom: 1px solid var(--border, #252d3f);
}
/* LAS PANTALLAS DE CONSULTA DE PLAN DE AHORRO, MÁS CHICAS Y DEL MISMO TAMAÑO
   (22/09/2026, Ramiro: «este es un módulo de consulta y debería ser más
   chico»). Consulta individual, Transferencia de plan y Configuración no
   necesitan toda la pantalla: van centradas, con el mismo ancho las tres.
   Las de tablas grandes (Cartera, Seguimiento, Cobranzas, Adjudicados…)
   siguen ocupando todo. */
.pa-compacto { width: min(1180px, 100%); margin: 0 auto; }
.pa-compacto > .cip { height: min(calc(80vh / var(--tcg-z, 1)), 820px); }
.pa-compacto > * { max-width: 100%; }
.gv-lado-planes .per-modal, .gv-lado-planes .vnv-modal { width: min(1180px, calc(96vw / var(--tcg-z, 1))); max-width: min(1180px, calc(96vw / var(--tcg-z, 1))); }
/* La foto de la portada, detrás de las pantallas: apenas desenfocada, para
   que se note el auto sin competir con lo que se lee encima (23/09/2026). */
.tcg-lienzo--foto::before { filter: blur(2.5px); transform: scale(1.03); }
/* Los títulos de cada sector de la ficha, SOMBREADOS: una banda suave con
   la marca de la casa a la izquierda. Se encuentra el bloque buscado de un
   vistazo, sin rayas por todos lados. */
.cip-bloque h4, .tcg-claro .cip-bloque h4 {
  background: var(--panel-2, #1c2432); border: 0; border-left: 3px solid var(--casa-activa, #4f8ef7);
  border-radius: 6px; padding: 6px 10px; margin: 0 0 8px; color: var(--text, #e6eaf0); letter-spacing: .08em;
}
.tcg-claro .cip-bloque h4 { background: #e9edf4; color: #000; }
/* En claro: el botón del pie («Otro plan») era blanco con letra blanca, y el
   estado «Ahorrista» un verde claro sobre blanco. */
.tcg-claro .cip-pie .lu-btn { background: #ffffff !important; color: #000 !important; border-color: rgba(0,0,0,.2) !important; }
.tcg-claro .cip-estado b { color: #000; border-color: #1e7a3c; }
.cip-filas { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); }
.cip-d { padding: 6px 12px 6px 0; border-right: 1px solid var(--border, #252d3f); }
.cip-d:last-child { border-right: none; }
.cip-d span {
  display: block; font-size: 12px; letter-spacing: .4px; text-transform: uppercase;
  color: var(--text); margin-bottom: 3px;
}
.cip-d strong { font-size: 13.5px; font-weight: 600; }
.cip-d--dest strong { font-size: 16px; }
.cip-cuotas { display: grid; grid-template-columns: 1fr 1fr; }
.cip-cuotas div {
  display: flex; justify-content: space-between; padding: 5px 12px 5px 0;
  border-bottom: 1px solid var(--border, #252d3f);
}
.cip-cuotas div:nth-child(odd) { border-right: 1px solid var(--border, #252d3f); padding-right: 12px; }
.cip-cuotas div:nth-child(even) { padding-left: 12px; }
.cip-cuotas span { color: var(--text); font-size: 12px; }
.cip-solapas {
  display: flex; padding: 0 20px; background: var(--panel-2, #222b40);
  border-bottom: 1px solid var(--border, #252d3f); flex-wrap: wrap;
}
.cip-solapas button {
  background: transparent; color: var(--text); border: none;
  border-bottom: 2px solid transparent; padding: 11px 15px; cursor: pointer; font-size: 12.5px;
}
.cip-solapas button.on { color: var(--text, #ecf0f4); border-bottom-color: var(--accent-amber, #f2c200); font-weight: 700; }
.cip-cuerpo { padding: 16px 20px; }
.cip-alta {
  display: flex; gap: 8px; align-items: flex-end; flex-wrap: wrap;
  margin-bottom: 14px; padding-bottom: 14px; border-bottom: 1px solid var(--border, #252d3f);
}
.cip-alta label span {
  display: block; font-size: 12px; letter-spacing: .4px; text-transform: uppercase;
  color: var(--text); margin-bottom: 4px;
}
.cip-alta input, .cip-alta select {
  background: var(--panel-2, #141a28); border: 1px solid var(--border, #252d3f); color: var(--text, #ecf0f4);
  border-radius: 6px; padding: 7px 9px; font-size: 13px;
}
.cip-imp { width: 130px; text-align: right; }
.cip-det { flex: 1; min-width: 190px; }
.cip-det input { width: 100%; }
.cip-tabla { width: 100%; border-collapse: collapse; font-size: 12.5px; }
.cip-tabla th {
  background: var(--panel-2, #141a28); color: var(--text); padding: 7px 9px; font-weight: 700;
  white-space: nowrap; text-align: center; border-bottom: 2px solid var(--accent-amber, #f2c200);
  font-size: 13px; letter-spacing: .4px; text-transform: uppercase;
}
.cip-tabla td { border-bottom: 1px solid var(--border, #252d3f); padding: 7px 9px; }
.cip-num { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
.cip-borrar { width: 44px; text-align: center; }
.cip-tabla tfoot td {
  background: var(--panel-2, #141a28); font-weight: 700;
  border-top: 2px solid var(--accent-amber, #f2c200); border-bottom: none;
}
.cip-inds {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
  margin-top: 16px; border-top: 1px solid var(--border, #252d3f);
}
.cip-ind { padding: 12px 16px; border-right: 1px solid var(--border, #252d3f); }
.cip-ind:last-child { border-right: none; }
.cip-ind-r { font-size: 12px; letter-spacing: .5px; text-transform: uppercase; color: var(--text); }
.cip-ind-v { font-size: 19px; font-weight: 700; margin: 3px 0 2px; }
.cip-ind-n { font-size: 12px; color: var(--text); }


/* ── Administración de Usuarios: vista formal ──────────────────────────────
   Ancho acotado y centrado como el resto de los modales; todo con el mismo
   formato —rótulo a la izquierda, control a la derecha— y sin bloques
   flotantes. El ruido venía de tres cosas: la pantalla ocupaba todo el ancho,
   dos tarjetas tenían color y tamaño propios, y la matriz pintaba de fondo
   los encabezados y los renglones de grupo. */
.admin-usuarios-editor { max-width: 1100px; }
.admin-usuarios-matriz-wrap { max-width: 1100px; margin: 0 auto; }

/* Una fila de dato. El mismo molde para nombre, clave, estado y permisos. */
.adu-fila {
  display: flex; align-items: center; gap: 16px;
  padding: 10px 0; border-bottom: 1px solid var(--border, #252d3f);
}
.adu-fila-rot { width: 190px; flex: none; }
.adu-fila-rot b { display: block; font-size: 12.5px; font-weight: 600; }
.adu-fila-rot small {
  display: block; color: var(--text); font-size: 12px;
  margin-top: 2px; line-height: 1.4;
}
.adu-fila-ctrl { flex: 1; display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.adu-fila-nota { color: var(--text); font-size: 12px; }

/* El interruptor, del mismo alto que un botón para que alinee con todo. */
.adu-sw {
  display: inline-flex; align-items: center; gap: 9px; cursor: pointer;
  background: transparent; border: none; padding: 0; color: var(--text, #ecf0f4);
  font-size: 12.5px;
}
.adu-sw:disabled { opacity: .45; cursor: default; }
.adu-sw i {
  width: 38px; height: 21px; border-radius: 999px; background: var(--panel, #39415a);
  position: relative; flex: none; transition: background .15s;
}
.adu-sw i::after {
  content: ""; position: absolute; top: 2px; left: 2px; width: 17px; height: 17px;
  border-radius: 50%; background: #aab3c0; transition: left .15s, background .15s;
}
.adu-sw.on i { background: var(--accent-amber, #f2c200); }
.adu-sw.on i::after { left: 19px; background: var(--panel-3, #1d1a06); }

/* La matriz: UN SOLO FONDO. Lo único que separa es una línea. */
.perm-matriz, .perm-matriz th, .perm-matriz tr.perm-grupo td { background: transparent; }
.perm-matriz th {
  color: var(--text); border-bottom: 1px solid var(--border, #252d3f);
}
.perm-matriz th.perm-casa {
  border-bottom: none; color: var(--text, #ecf0f4); letter-spacing: .8px;
}
.perm-matriz tr.perm-grupo td {
  color: var(--text); border-top: 1px solid var(--border, #252d3f);
}
/* La raya vertical que separa una casa de la otra. Sin esto las nueve
   columnas se leen sueltas y no se sabe dónde termina cada concesionario. */
.perm-matriz .perm-sep, .perm-matriz th.perm-sep {
  border-left: 1px solid var(--border, #252d3f);
}
.perm-matriz tbody tr:hover td { background: rgba(255, 255, 255, .03); }


/* ============================================================
   ANÁLISIS DE STOCK POR PERÍODOS
   Va al FINAL de baseCss y fuera de todo @media: acá gana la cascada.
   ============================================================ */
.asp-root{
  --asp-panel: var(--panel, #1a2233);
  --asp-panel2: var(--panel-2, #151c2b);
  --asp-linea: var(--border, #2a344a);
  --asp-texto: var(--text, #e8eaf0);
  --asp-tenue: var(--muted, #9aa3b8);
  --asp-tinta: var(--accent-amber);
  color: var(--asp-texto);
  padding: 4px 2px 24px;
}
.asp-cab{display:flex;align-items:flex-start;gap:12px;margin-bottom:12px}
.asp-titulo{font-size: 19px;margin:0 0 2px;font-weight:700}
.asp-sub{color:var(--asp-texto);font-size: 12.5px}
.asp-cab .asp-btn{margin-left:auto}

.asp-barra{display:flex;flex-wrap:wrap;gap:8px;align-items:center;
  background:var(--asp-panel);border:1px solid var(--asp-linea);border-radius:8px;
  padding:8px 10px;margin-bottom:12px}
.asp-btn{background:var(--asp-panel2);border:1px solid var(--asp-linea);color:var(--asp-texto);
  border-radius:6px;padding:5px 10px;font-size: 12.5px;cursor:pointer;white-space:nowrap}
.asp-btn:hover{border-color:var(--asp-tinta)}
.asp-btn--act{border-color:var(--asp-tinta);color:var(--asp-tinta)}
.asp-corte{display:flex;align-items:center;gap:5px;font-size: 12.5px;color:var(--asp-texto)}
.asp-corte select{background:var(--asp-panel2);border:1px solid var(--asp-linea);
  color:var(--asp-texto);border-radius:6px;padding:4px 6px;font-size: 13px}
.asp-cuenta{margin-left:auto;color:var(--asp-texto);font-size: 12.5px}

.asp-recorrido{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px}
.asp-anio{background:var(--asp-panel);border:1px solid var(--asp-linea);color:var(--asp-texto);
  border-radius:14px;padding:3px 12px;font-size: 12.5px;cursor:pointer}
.asp-anio--on{background:rgba(255,255,255,.08);border-color:var(--asp-tinta);
  color:var(--asp-tinta);font-weight:600}

.asp-bloque{background:var(--asp-panel);border:1px solid var(--asp-linea);
  border-radius:9px;margin-bottom:16px;overflow:hidden}
.asp-bloque--pad{padding:12px}
.asp-bloque-cab{background:var(--asp-tinta);color:#000;font-weight:700;
  text-align:center;padding:5px;font-size: 13.5px;letter-spacing:.4px}
.asp-envuelve{overflow-x:auto}
.asp-tabla{border-collapse:collapse;width:100%;min-width:880px;font-size: 12.5px}
.asp-tabla th,.asp-tabla td{border:1px solid var(--asp-linea);padding:4px 6px;
  text-align:center;white-space:nowrap}
.asp-tabla thead th{background:var(--asp-panel2);color:var(--asp-texto);font-weight:600;
  text-transform:uppercase;font-size: 13px;letter-spacing:.3px}
.asp-tabla th.asp-rot,.asp-tabla td.asp-rot{text-align:left;position:sticky;left:0;
  background:var(--asp-panel2);z-index:2;min-width:158px;font-weight:600}
.asp-tabla tbody tr:nth-child(even) td{background:rgba(255,255,255,.018)}
.asp-tabla tbody tr:nth-child(even) td.asp-rot{background:var(--asp-panel2)}
.asp-tabla td.asp-prom,.asp-tabla th.asp-prom{background:rgba(255,255,255,.06);font-weight:700}
.asp-fila-total td{font-weight:700;font-size: 13.5px;color:var(--asp-tinta)}
.asp-vacio{color:var(--text)}
.asp-sube{background:var(--panel, #8e2b20);color:var(--text, #ffd9d4);font-weight:600}
.asp-baja{background:var(--panel, #1e6b40);color:var(--text, #d3f5e2);font-weight:600}
.asp-sep td{border-top:2px solid var(--asp-linea)}
.asp-nota{font-size: 12px;color:var(--asp-texto);font-weight:400}

.asp-graf{padding:12px 10px 6px;overflow-x:auto}
.asp-graf svg{width:100%;min-width:640px;height:190px;display:block}

.asp-rot-sec{font-size: 12px;text-transform:uppercase;letter-spacing:.6px;
  color:var(--asp-texto);margin:20px 0 8px;font-weight:600}
/* Sin consultas de medios, a proposito: agregar una aca romperia la
   escalera de la hoja, que vigila prueba_celu_orden. Con auto-fit los
   indicadores se acomodan solos en cualquier ancho. */
.asp-inds{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:10px}
.asp-ind{background:var(--asp-panel);border:1px solid var(--asp-linea);
  border-radius:9px;padding:10px 12px}
.asp-ind-lab{font-size: 12px;color:var(--asp-texto);text-transform:uppercase;letter-spacing:.4px}
.asp-ind-val{font-size: 25px;font-weight:700;margin:2px 0 1px;color:var(--asp-tinta)}
.asp-ind-det{font-size: 12px;color:var(--asp-texto);line-height:1.35}
.asp-ind-det b{color:var(--asp-texto);font-weight:600}

.asp-apilada{display:flex;height:26px;border-radius:5px;overflow:hidden;
  border:1px solid var(--asp-linea);margin:2px 0 6px}
.asp-apilada div{display:flex;align-items:center;justify-content:center;
  font-size: 12px;font-weight:600;color:#000;overflow:hidden}
.asp-leyenda{display:flex;gap:14px;flex-wrap:wrap;font-size: 12px;color:var(--asp-texto)}
.asp-leyenda i{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:5px}

.asp-vacio-aviso{background:rgba(255,255,255,.05);border:1px solid var(--asp-linea);
  border-radius:8px;padding:10px 12px;font-size: 12.5px;color:var(--asp-texto);margin-bottom:14px}

/* ── CAJA POR SECTOR ─────────────────────────────────────────────────
   Sin reglas por ancho de pantalla: los totales y los indicadores se
   acomodan solos con auto-fit, igual que en Análisis de Stock. */
.cjs-root{--cjs-linea:rgba(255,255,255,.12);--cjs-tenue:var(--text-muted,#cbd3e0);
  --cjs-verde:#4caf6d;--cjs-rojo:#e2574c;--cjs-azul:#4f8ef7;font-size: 12px;color:var(--text,#ecf0f4)}
.cjs-solapas{display:flex;gap:6px;flex-wrap:wrap;border-bottom:1px solid var(--cjs-linea);margin-bottom:12px}
.cjs-sol{background:transparent;border:1px solid var(--cjs-linea);border-bottom:none;
  color:var(--text);padding:6px 16px;border-radius:7px 7px 0 0;cursor:pointer;font:inherit;font-size: 12px}
.cjs-sol.es-on{background:rgba(255,255,255,.07);color:var(--text,#ecf0f4);font-weight:600;
  box-shadow:inset 0 2px 0 var(--accent-amber,#f2c200)}
.cjs-subsol{display:flex;gap:6px;margin:0 0 12px}
.cjs-ss{background:rgba(255,255,255,.04);border:1px solid var(--cjs-linea);color:var(--text);
  padding:4px 14px;border-radius:6px;cursor:pointer;font:inherit;font-size: 12px}
.cjs-ss.es-on{background:rgba(255,255,255,.09);color:var(--text,#ecf0f4);font-weight:600;
  border-color:var(--accent-amber,#f2c200)}
.cjs-ayuda{color:var(--text);font-size: 12px;margin:0 0 12px;line-height:1.5}
.cjs-nota{color:var(--text);font-size: 12px;margin-top:12px;border-left:2px solid var(--cjs-linea);padding-left:9px}
.cjs-aviso{color:var(--text);font-size: 12px;margin:8px 0 0}
.cjs-vacio-aviso{background:rgba(255,255,255,.05);border:1px solid var(--cjs-linea);border-radius:8px;
  padding:10px 12px;font-size: 12.5px;color:var(--text)}
.cjs-tot{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:9px;margin-bottom:12px}
.cjs-t{background:rgba(255,255,255,.05);border:1px solid var(--cjs-linea);border-radius:9px;padding:9px 12px}
.cjs-t .k{font-size: 12px;letter-spacing:.4px;text-transform:uppercase;color:var(--text)}
.cjs-t .v{font-size: 19px;font-weight:700;margin:1px 0}
.cjs-t .n{font-size: 12px;color:var(--text)}
.cjs-t--efe .v{color:var(--text)}
.cjs-t--che .v{color:var(--text)}
.cjs-per{display:flex;align-items:center;gap:7px;flex-wrap:wrap;background:rgba(255,255,255,.04);
  border:1px solid var(--cjs-linea);border-radius:9px;padding:7px 10px;margin-bottom:12px}
.cjs-rot{font-size: 12px;text-transform:uppercase;letter-spacing:.4px;color:var(--text)}
.cjs-anio{background:transparent;border:1px solid var(--cjs-linea);color:var(--text);border-radius:12px;
  padding:2px 10px;font:inherit;font-size: 12px;cursor:pointer}
.cjs-anio.es-on{background:rgba(255,255,255,.09);color:var(--text,#ecf0f4);border-color:var(--accent-amber,#f2c200)}
.cjs-mes{background:transparent;border:1px solid transparent;color:var(--text);border-radius:6px;
  padding:2px 7px;font:inherit;font-size: 12px;cursor:pointer}
.cjs-mes.es-on{background:var(--accent-amber,#f2c200);color:#000;font-weight:700}
.cjs-mes.es-vacio{opacity: 1}
.cjs-sep{width:1px;height:20px;background:var(--cjs-linea);margin:0 3px}
.cjs-vista{display:flex;border:1px solid var(--cjs-linea);border-radius:6px;overflow:hidden}
.cjs-vista button{background:transparent;border:none;color:var(--text);padding:3px 12px;
  font:inherit;font-size: 12px;cursor:pointer}
.cjs-vista button.es-on{background:rgba(255,255,255,.09);color:var(--text,#ecf0f4);font-weight:600}
.cjs-dias{display:flex;gap:3px;flex-wrap:wrap}
.cjs-dia{background:transparent;border:1px solid var(--cjs-linea);color:var(--text);border-radius:5px;
  padding:1px 7px;font:inherit;font-size: 12px;cursor:pointer}
.cjs-dia.es-on{background:var(--accent-amber,#f2c200);color:#000;font-weight:700}
.cjs-dia.es-sin{opacity: 1}
.cjs-sec{font-size: 12px;font-weight:700;letter-spacing:.4px;text-transform:uppercase;color:var(--text);
  margin:14px 0 7px;border-bottom:1px solid var(--cjs-linea);padding-bottom:4px}
.cjs-n{color:var(--text);margin-left:6px}
.cjs-form{display:flex;flex-wrap:wrap;gap:8px;align-items:flex-end}
.cjs-form--filtros{margin-bottom:4px}
.cjs-campo{display:flex;flex-direction:column;gap:3px}
.cjs-campo span{font-size: 12px;color:var(--text);text-transform:uppercase;letter-spacing:.3px}
.cjs-campo input,.cjs-campo select{background:rgba(255,255,255,.06);border:1px solid var(--cjs-linea);
  color:var(--text,#ecf0f4);border-radius:6px;padding:5px 8px;font:inherit;min-width:130px}
.cjs-campo--ancho input{min-width:250px}
.cjs-campo--chico input,.cjs-campo--chico select{min-width:96px}
.cjs-btn{background:var(--accent-amber,#f2c200);color:#000;border:none;border-radius:6px;
  padding:6px 16px;font:inherit;font-weight:600;cursor:pointer}
.cjs-bmini{background:rgba(255,255,255,.07);border:1px solid var(--cjs-linea);color:var(--text);
  border-radius:5px;padding:1px 8px;font:inherit;font-size: 12px;cursor:pointer;margin:0 2px}
.cjs-bmini--acc{background:var(--cjs-azul);border-color:var(--cjs-azul);color:#000;font-weight:600}
.cjs-cheque{margin-top:9px;border:1px dashed var(--cjs-azul);border-radius:9px;padding:10px 12px;
  background:rgba(79,142,247,.08)}
.cjs-cheque-tit{font-size: 12px;color:var(--text);font-weight:700;margin-bottom:8px}
.cjs-cheque-pie{font-size: 12px;color:var(--text);margin-top:8px}
.cjs-tabla-caja{overflow-x:auto;max-height:calc(calc(100vh / var(--tcg-z, 1)) - 430px)}
.cjs-tabla{width:100%;border-collapse:collapse}
.cjs-tabla th{background:rgba(255,255,255,.07);color:var(--text);font-size: 13px;text-transform:uppercase;
  letter-spacing:.3px;padding:6px 8px;text-align:center;border-bottom:1px solid var(--cjs-linea);white-space:nowrap}
.cjs-tabla td{padding:5px 8px;border-bottom:1px solid rgba(255,255,255,.07);font-size: 13px}
.cjs-num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
.cjs-cen{text-align:center}
.cjs-ent{color:var(--text)}
.cjs-sal{color:var(--cjs-rojo)}
.cjs-vacia{text-align:center;color:var(--text);padding:14px 8px}
.cjs-corte td{background:rgba(255,255,255,.06);color:var(--text);font-size: 13px;font-weight:700;
  text-transform:uppercase;letter-spacing:.3px}
.cjs-tabla tfoot td{background:rgba(255,255,255,.07);font-weight:700;border-top:1px solid var(--cjs-linea)}
.cjs-eti{display:inline-block;padding:1px 7px;border-radius:10px;font-size: 12px;border:1px solid var(--cjs-linea)}
.cjs-eti--che{color:var(--text)}
.cjs-eti--efe{color:var(--text)}
.cjs-eti--emi{color:var(--text)}
.cjs-eti--pag{color:var(--text)}
.cjs-eti--anu{color:var(--cjs-rojo);text-decoration:line-through}
.cjs-inds{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:9px;margin-top:14px}
.cjs-i{background:rgba(255,255,255,.05);border:1px solid var(--cjs-linea);border-radius:9px;padding:9px 12px}
.cjs-i .k{font-size: 12px;text-transform:uppercase;letter-spacing:.4px;color:var(--text)}
.cjs-i .v{font-size: 17px;font-weight:700;color:var(--text)}
.cjs-i .n{font-size: 12px;color:var(--text)}
.cjs-t--cred .v{color:var(--text)}
.cjs-t--ban .v{color:var(--text)}
.sc-accesos{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin:0 0 8px}
.sc-accesos-rot{font-size: 12px;text-transform:uppercase;letter-spacing:.4px;
  color:var(--text);margin-right:2px}
.sc-accesos--modal{padding:8px 14px 0;margin:0}
.cjs-cred{color:var(--text)}
.cjs-eti--pend{color:var(--cjs-rojo)}
.cjs-ind-ok{color:var(--text);font-weight:700}
.cjs-decl{width:52px;text-align:center;background:rgba(255,255,255,.06);
  border:1px solid var(--cjs-linea);color:var(--text,#ecf0f4);border-radius:5px;padding:2px 4px;font:inherit}
.cjs-tabla input[type=file]{font:inherit;font-size: 13px;color:var(--text);max-width:230px}

/* ── La cartera debajo del gráfico de Morosidad y Caída (15/09/2026) ── */
.mc-graf-wrap circle.mc-punto{cursor:pointer}
.mc-graf-wrap circle.mc-punto.on{stroke:var(--text,#ecf0f4);stroke-width:2}
.mc-tabla tr.mc-fila.on,.mc-tabla tr.mc-fila.on:hover{background:rgba(242,194,0,.14);box-shadow:inset 3px 0 0 var(--accent-amber,#f2c200)}
.mc-contratos{margin-top:12px}
.mc-contratos .mc-graf-tit{display:flex;align-items:center;gap:10px}
.mc-soltar{background:none;border:1px solid var(--border,#2a3345);color:inherit;border-radius:5px;padding:1px 8px;font:inherit;font-size: 12px;text-transform:none;letter-spacing:0;cursor:pointer}
.mc-cart-barra{margin:8px 0 0}
.mc-contratos .ac-tabla{margin-top:6px}
.mc-contrato--caido td{opacity: 1}
.mc-ficha{background:none;border:0;padding:0;font:inherit;color:inherit;text-decoration:underline dotted;text-underline-offset:3px;cursor:pointer}
.mc-ficha:hover{color:var(--text)}

/* Fotos de modelos en Accesorios (18/09/2026) */
.acmf-grilla{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:10px;margin-top:8px}
.acmf-item{border:1px solid var(--border,#2a3345);border-radius:8px;padding:8px;text-align:center;background:var(--panel-2,#1c2432)}
.acmf-foto{height:80px;display:flex;align-items:center;justify-content:center;background:var(--panel-3,#0d121a);border-radius:6px;overflow:hidden;color:var(--text);font-size: 12px}
.acmf-foto img{width:100%;height:100%;object-fit:contain}
.acmf-nom{display:block;font-size: 12px;margin:6px 0}
.acmf-barra{margin:6px 0}
.acmf-nuevo{background:var(--panel-3,#0d121a);color:var(--text);border:1px solid var(--border-fuerte,#3a4559);border-radius:6px;padding:6px 9px;min-width:220px}
.acmf-modelos-chips{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0 10px}
.acmf-chip{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border:1px solid var(--border,#2a3345);border-radius:999px;font-size: 12px;background:var(--panel-2,#1c2432)}
.acmf-chip button{border:0;background:none;color:var(--text);cursor:pointer;font-size: 15px;line-height:1}


/* Catálogo embebido en la solapa (19/09/2026): sin overlay, ocupa el cuerpo. */
.acc-cat-embebido{padding:4px 0}
.acc-cat-embebido .cjs-tabla-caja{max-height:none}
.acc-cat-colocacion{color:var(--text);font-variant-numeric:tabular-nums}

.acmf-subir{cursor:pointer;display:inline-block}

/* ── Tema: arreglos medidos con el revisor (15/09/2026) ── */
/* Un <button> no hereda la letra: toma la del navegador, negra. Los
   indicadores que son botones salían negro sobre el panel oscuro. */
.cpb-ind, .fom-paso { color: inherit; }
/* El gráfico de Morosidad crecía con el ancho hasta tapar la pantalla, con su
   propia barra de desplazamiento adentro. */
.mc-graf-box { max-height: none; overflow: visible; }
.mc-graf-wrap svg { max-height: 300px; }
.mc-contratos .mc-graf-tit, .mc-panel .ac-tabla-box > .mc-graf-tit { padding: 10px 12px 0; }

/* ── Modo claro: los colores fijos pensados para fondo oscuro (15/09/2026) ──
   Medidos en las 35 pantallas de Plan de ahorro. Cada uno era un gris o un
   pastel claro escrito a mano, que sobre blanco baja de 3 a 1. */
.tcg-claro .mc-chip:not(.on), .tcg-claro .vista-op:not(.on), .tcg-claro .ac-subtab:not(.on) { color: var(--text); }
.tcg-claro .mc-chip--tope:not(.on) { color: #000; }
.tcg-claro .fom-conv { color: #000; }
.tcg-claro .e-cond { color: #000; background: rgba(16,24,40,.07); }
.tcg-claro .sus-ind-num--alerta { color: #b3261e; }
.tcg-claro .sc-btn--peligro { color: #b3261e; }
.tcg-claro .car-chip.es-on { color: var(--panel, #fff); }
/* EL SELECTOR 0KM / USADOS SOBRE LA BANDA DE LA CASA (16/09/2026). Tenía el
   fondo del panel —blanco en claro— y los botones heredan la tinta de la
   banda —blanca en Vesubio—: blanco sobre blanco. Ahora el fondo es un velo
   sobre el color de la casa, que se lee con la tinta de la casa en los dos
   modos y en las tres marcas. */
.per-modal > .per-cab .ent-lados { background: rgba(0,0,0,.18); border-color: rgba(255,255,255,.35); }
.tcg-claro .car-ind--bien .v { color: #000; }
.tcg-claro .cjs-root { --cjs-verde: #1e7a3c; --cjs-rojo: #b3261e; --cjs-azul: #2563eb; --cjs-linea: rgba(16,24,40,.12); }
/* Encabezado y pie de casa con la tinta EN LÍNEA (tintaCasa): los hijos la
   heredan. La regla de más arriba les ponía var(--text) a todos, y en claro
   eso es casi negro sobre el azul de Vesubio, 2,3 a 1. */
.tcg-claro .cip-cab[style] *, .tcg-claro .cip-pie[style] * { color: inherit; }

/* ── Precios y oportunidades (17/09/2026) ── */
.po-casas{display:flex;gap:8px;flex-wrap:wrap;margin:10px 0 6px}
.po-casa{flex:1 1 150px;min-width:150px;display:flex;flex-direction:column;gap:2px;padding:7px 12px;border:2px solid var(--border,#2a3345);border-radius:8px;background:var(--panel-2,#1c2432);color:inherit;cursor:pointer;text-align:left;font:inherit;--c:var(--border-fuerte,#3a4559)}
.po-casa small{opacity: 1;font-size: 12px}
.po-casa-barra{height:4px;border-radius:2px;margin-top:4px;background:var(--c)}
.po-casa.on{border-color:var(--c)}
.po-casa.on b::after{content:" ✓";color:var(--c)}
.po-aviso{margin:8px 0;padding:7px 10px;border-left:3px solid var(--accent-amber,#f2c200);background:var(--lavado,rgba(255,255,255,.03));font-size: 12px;display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.po-aviso--warn{border-left-color:var(--red,#e2574c)}.po-aviso--ok{border-left-color:var(--green,#3fb56b)}
.po-barra{margin:6px 0}
.po-cats{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin:8px 0}
.po-tabla-box{margin-top:8px}
.po-tabla td{font-size: 13px}
.po-tabla td:nth-child(2),.po-tabla th:nth-child(2),.po-tabla td:first-child,.po-tabla th:first-child{text-align:left}
.po-tabla input[type=checkbox]{width:16px;height:16px}

/* Cobranzas: encabezado fijo, orden al clic, selector de columnas (19/09/2026) */
.cpb-tabla--sticky thead th{position:sticky;top:0;z-index:2;background:var(--panel,#141b26)}
.cpb-th-orden{cursor:pointer;user-select:none;white-space:nowrap}
.cpb-th-orden:hover{color:var(--text)}
.cpb-cols-wrap{position:relative;display:inline-block}
.cpb-cols-menu{position:absolute;top:100%;right:0;z-index:20;background:var(--panel-2,#1c2432);border:1px solid var(--border-fuerte,#3a4559);border-radius:8px;padding:8px;min-width:190px;box-shadow:0 8px 24px rgba(0,0,0,.4);max-height:320px;overflow:auto}
.cpb-col-op{display:flex;gap:8px;align-items:center;padding:4px 6px;font-size: 13px;cursor:pointer;border-radius:5px}
.cpb-col-op:hover{background:var(--panel-3,#0d121a)}

.car-fila-click{cursor:pointer}
.car-fila-click:hover td{background:var(--panel-3,#0d121a)}

/* Cartera: tarjetas que filtran, rankings, por estado y avance (19/09/2026) */
.car-ind--btn{cursor:pointer;text-align:left;font:inherit;border:1px solid var(--border,#2a3345);transition:border-color .12s}
.car-ind--btn:hover{border-color:var(--accent-amber,#f2c200)}
.car-ind--on{border-color:var(--accent-amber,#f2c200);box-shadow:inset 0 0 0 1px var(--accent-amber,#f2c200)}
.car-inds--chip .car-ind{min-width:120px}
/* ══ MODO CLARO · CARTERA Y PLANILLAS (20/09/2026, Ramiro) ═══════════════
   El ámbar y el verde de los indicadores están pensados para fondo oscuro:
   sobre blanco el número amarillo daba 1,7 a 1 de contraste, o sea casi
   invisible. En claro, el número va en tinta oscura y el color queda para
   lo que avisa (rojo y verde, en su versión fuerte). También se marcan más
   los bordes de las tarjetas y de la planilla, que se perdían. */
.tcg-claro .car-ind .v { color: var(--text, #0e1116); }
/* En claro, los rótulos y las aclaraciones de las tarjetas también en negro
   (antes gris), y los títulos de cada bloque y los rankings. */
.tcg-claro .car-ind .k, .tcg-claro .car-ind .n, .tcg-claro .car-bloq-tit { color: #000; }
.tcg-claro .car-ind:disabled, .tcg-claro .car-ind:disabled .v { color: var(--text, #0e1116); }
.tcg-claro .car-ind--mal:disabled .v { color: var(--red, #c0392b); }
.tcg-claro .car-ind--bien:disabled .v { color: var(--text); }
.tcg-claro .car-ind--mal .v { color: var(--red, #c0392b); }
.tcg-claro .car-ind--bien .v { color: var(--text); }
.tcg-claro .car-ind--ojo .v { color: var(--text); }
.tcg-claro .car-ind { border-color: var(--border, #d6dbe4); box-shadow: 0 1px 2px rgba(15,23,42,.05); }
.tcg-claro .car-ind--btn:hover { border-color: var(--accent-blue, #2563eb); }
.tcg-claro .car-ind--on { border-color: var(--accent-blue, #2563eb); box-shadow: inset 0 0 0 1px var(--accent-blue, #2563eb); }
.tcg-claro .car-planilla .sc-table th { border-bottom: 2px solid var(--border, #d6dbe4); background: var(--panel-2, #f4f6fa); }
.tcg-claro .car-planilla .sc-table td { border-color: var(--border, #d6dbe4); }
.tcg-claro .car-fila-plan:hover td { background: #eef3fb; }
.tcg-claro .car-celda:focus { outline-color: var(--accent-blue, #2563eb); background: rgba(37,99,235,.10); }
.car-rankings{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:12px}
.car-rank{border:1px solid var(--border,#2a3345);border-radius:10px;padding:10px 12px;background:var(--panel-2,#1c2432)}
.car-rank-tit{font-size: 12px;letter-spacing:.1em;text-transform:uppercase;color:var(--text);margin-bottom:6px}
.car-rank-fila{display:flex;align-items:center;gap:8px;width:100%;background:none;border:0;cursor:pointer;padding:4px 4px;border-radius:5px;font:inherit;color:var(--text)}
.car-rank-fila:hover{background:var(--panel-3,#0d121a)}
.car-rank--on{background:var(--panel-3,#0d121a);box-shadow:inset 0 0 0 1px var(--accent-amber,#f2c200)}
.car-rank-nom{flex:1;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size: 13px}
.car-rank-bar{flex:0 0 90px;height:8px;background:var(--panel-3,#0d121a);border-radius:5px;overflow:hidden}
.car-rank-bar i{display:block;height:100%;background:var(--accent-azul,#4a90d9)}
.car-rank-n{flex:0 0 auto;font-weight:700;font-size: 13px;min-width:28px;text-align:right}

/* Pie de Clientes y órdenes: resultados y configuración separados (19/09/2026) */
.acc-pie{display:grid;grid-template-columns:repeat(auto-fit,minmax(360px,1fr));gap:12px;margin-top:10px}
/* ══ ACCESORIOS · BLOQUES FORMALES (21/09/2026, Ramiro) ═══════════════════
   Una sola familia de piezas («pvx-») para Clientes y órdenes y para el
   Catálogo: bloque con título chico, tarjetas de indicador iguales, campos
   con su rótulo arriba, botones de contorno y uno solo lleno. Todos los
   colores salen del tema (--text, --panel, --border…), así se lee igual de
   bien en claro que en oscuro. En claro, además, una sombra corta despega
   cada bloque del fondo. */
.pvx-bloque { background: var(--panel, #161c29); border: 1px solid var(--border, #2a3345);
  border-radius: 12px; padding: 14px 16px; margin-top: 12px; color: var(--text, #e6eaf0); }
.pvx-bloque--interno { margin-top: 0; background: var(--panel-2, #1c2432); }
.tcg-claro .pvx-bloque { box-shadow: 0 1px 2px rgba(15,23,42,.06), 0 4px 14px rgba(15,23,42,.05); }
.tcg-claro .pvx-bloque--interno { box-shadow: none; background: var(--panel-2, #f4f6fa); }
.pvx-tit { font-size: 12px; font-weight: 800; letter-spacing: .08em; text-transform: uppercase;
  color: var(--text); margin-bottom: 10px; }
.pvx-tit-fila { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; margin-bottom: 10px; }
.pvx-tit-fila .pvx-tit { margin-bottom: 0; }
.pvx-nota { font-size: 12px; color: var(--text); }
.pvx-kpis { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 10px; }
.pvx-kpis--3 { grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); }
.pvx-kpi { border: 1px solid var(--border, #2a3345); border-radius: 10px; padding: 10px 12px;
  background: var(--panel-2, #1c2432); display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.tcg-claro .pvx-kpi { background: #ffffff; }
.pvx-kpi span { font-size: 12px; color: var(--text); }
.pvx-kpi b { font-size: 20px; font-weight: 800; color: var(--text, #e6eaf0); letter-spacing: -.01em; }
.pvx-kpi i { font-style: normal; font-size: 12px; color: var(--text); }
.pvx-kpi--dest { box-shadow: inset 3px 0 0 var(--green, #4caf6d); }
.pvx-kpi--dest b { color: var(--text); }
.pvx-kpi--ojo { box-shadow: inset 3px 0 0 var(--accent-amber, #f2c200); }
.pvx-campos { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 12px; }
.pvx-campo { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.pvx-campo span, .pvx-dato span { font-size: 12px; color: var(--text); }
.pvx-campo input, .pvx-in { height: 34px; border: 1px solid var(--border, #2a3345); border-radius: 8px;
  background: var(--panel-3, #0d121a); color: var(--text, #e6eaf0); padding: 0 10px; font: inherit; font-size: 13.5px; width: 100%; }
.tcg-claro .pvx-campo input, .tcg-claro .pvx-in { background: #ffffff; }
.pvx-campo input:focus, .pvx-in:focus { outline: none; border-color: var(--vnv-marca, var(--accent-blue, #4f8ef7)); }
.pvx-campo small { font-size: 12px; color: var(--text); }
.pvx-dos { display: grid; grid-template-columns: repeat(auto-fit, minmax(340px, 1fr)); gap: 12px; }
.pvx-dos .pvx-bloque { margin-top: 12px; }
.pvx-publicar { display: flex; align-items: center; gap: 10px; }
/* Presupuestos de accesorios (22/09/2026) */
.presu { padding: 0 2px 10px; }
.presu-campos { grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); }
.presu-buscar { position: relative; }
.presu-buscar .pvx-in { width: 320px; }
.presu-sug { position: absolute; top: 38px; left: 0; z-index: 6; display: grid; gap: 4px; padding: 6px;
  background: var(--panel, #161c29); border: 1px solid var(--border, #2a3345); border-radius: 10px; min-width: 340px;
  box-shadow: 0 10px 26px rgba(0,0,0,.35); }
.tcg-claro .presu-sug { background: #ffffff; box-shadow: 0 10px 26px rgba(15,23,42,.18); }
.presu-sug .pvx-btn { text-align: left; justify-content: flex-start; }
.presu-caja { max-height: 300px; }
.presu-def { gap: 8px; }
.presu-dias { width: 70px !important; text-align: center; }
/* ══ PROPUESTA COMERCIAL (21/09/2026, Ramiro) ═══════════════════════════
   Botones del encabezado del mismo alto y ancho parejo; la tabla como un
   Excel simple: TODAS las celdas con el mismo formato —la casilla de edición
   no se ve, la grilla sí—, sin cajitas en unas columnas y texto suelto en
   otras. En claro y en oscuro. */
.pc-acciones-enc { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; justify-content: flex-end; }
.pc-acciones-enc > .lu-btn, .pc-acciones-enc > .pc-sel, .pc-acciones-enc > .pc-buscar {
  height: 34px; box-sizing: border-box; font-size: 13px; }
.pc-acciones-enc > .lu-btn { min-width: 84px; padding: 0 10px; display: inline-flex; align-items: center; justify-content: center; }
.pc-acciones-enc > .pc-buscar { width: 130px; }
.pc-publicar { margin: 4px 0 12px; }
.pc-publicar-acc { gap: 8px; }
.pc-btn-igual { min-width: 110px; }
.pc-check { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; color: var(--text, #e6eaf0); margin-right: 6px; cursor: pointer; }
.pc-publicar .pc-pub { color: inherit; font-weight: 400; }
.pc-publicar .pc-pub--viejo { color: var(--text); font-weight: 700; }
.pc-pie-nota { color: var(--text); font-size: 12px; }
.pc-tabla-planes { border: 1px solid var(--border, #2a3345); }
.pc-tabla-planes th, .pc-tabla-planes td { border: 1px solid var(--border, #2a3345) !important; }
/* MÁS GRANDE Y MÁS FORMAL (28/09/2026 · nk, pedido de Ramiro). Estaba en
   12 px con renglones de 32: se lee con esfuerzo y es la pantalla donde se
   carga la propuesta del mes, número por número. Sube a 13,5 con renglones
   de 40, que es la medida del resto del sistema. */
.pc-tabla-planes td { height: 40px; padding: 0 10px !important; color: var(--text, #e6eaf0); font-size: 13.5px; }
/* El selector largo es a propósito: la regla general del modo claro para
   campos («.tcg-claro input:not(...)», con !important) pesa más que una
   clase sola y le volvía a poner cajita blanca con borde a cada celda. */
.pc-tabla-planes .pc-celda, .tcg-claro .pc-tabla-planes input.pc-celda:not([type="checkbox"]):not([type="radio"]) {
  border: 0 !important; background: transparent !important; box-shadow: none !important;
  width: 100%; min-width: 0; height: 38px; padding: 0 6px;
  color: var(--text, #e6eaf0) !important; font-size: 13.5px; text-align: center; }
.pc-tabla-planes .pc-celda:focus { outline: 2px solid var(--accent-blue, #4f8ef7); outline-offset: -2px; background: rgba(79,142,247,.10) !important; }
.pc-tabla-planes .pc-calc, .pc-tabla-planes .pc-retiro-fijo { color: var(--text, #e6eaf0) !important; font-size: 13.5px; font-weight: 600; }
.pc-tabla-planes .pc-retiro-fijo { font-weight: 400; display: block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pc-tabla-planes th { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pc-tabla-planes td.pc-der { text-align: center; }
.tcg-claro .pc-tabla-planes th { color: var(--text, #0e1116); font-weight: 700; background: var(--panel-2, #f4f6fa); }
.tcg-claro .pc-tabla-planes { background: #ffffff; box-shadow: 0 1px 2px rgba(15,23,42,.06), 0 4px 14px rgba(15,23,42,.05); }
/* 23/09/2026: ahora la cabecera es del color de la casa en los DOS modos, así
   que va siempre el logo de la banda —que ya se eligió según la tinta de cada
   casa: blanco en Vesubio y Ginza, a color en Renault—. La otra versión queda
   para cuando el fondo es blanco de verdad (el papel, la vista previa web). */
.logo-dealer .logo-dealer-color { display: none; }
.logo-dealer-banda { display: block; }
.fondo-blanco .logo-dealer .logo-dealer-banda { display: none; }
.fondo-blanco .logo-dealer .logo-dealer-color { display: block; }
.pvx-web { display: grid; gap: 10px; }
.pvx-web .tvn-casas-tilde, .pvx-web .tvn-resumen { margin: 0; }
.pvx-enlace { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.pvx-enlace code { flex: 1 1 320px; min-width: 0; height: 34px; display: flex; align-items: center; padding: 0 12px;
  border: 1px solid var(--border, #2a3345); border-radius: 8px; background: var(--panel-3, #0d121a); color: var(--text, #e6eaf0);
  font-size: 12.5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tcg-claro .pvx-enlace code { background: #f4f6fa; }
.pvx-bloque .acmf-barra { margin: 0 0 10px; }
.pvx-bloque .acmf-modelos-chips { margin: 0; }
.pvx-bloque .acmf-grilla { margin-top: 4px; }
/* Los campos viejos del catálogo, adentro de un bloque nuevo, con la misma
   forma que los demás: rótulo chico arriba y caja pareja. */
.pvx-bloque .cjs-campo span { text-transform: none; letter-spacing: 0; font-size: 12px; color: var(--text); }
.pvx-bloque .cjs-campo input { height: 34px; border: 1px solid var(--border, #2a3345); border-radius: 8px;
  background: var(--panel-3, #0d121a); color: var(--text, #e6eaf0); padding: 0 10px; font-size: 13.5px; }
.tcg-claro .pvx-bloque .cjs-campo input { background: #ffffff; }
.pvx-bloque .cjs-form { border: 0; padding: 0; margin: 0 0 6px; background: none; align-items: flex-end; gap: 10px; }
.pvx-barra-tabla { margin-top: 14px; padding: 0; border: 0; }
.pvx-dos + .pvx-barra-tabla { margin-top: 14px; }
.acc-cat .cjs-tabla-caja { margin-top: 10px; }
.acc-scroll-arriba { margin-top: 10px; position: static; border-radius: 6px 6px 0 0; }
.acc-cat .acc-cat-caja { margin-top: 0; overflow: auto; max-height: calc(calc(100vh / var(--tcg-z, 1)) - 300px); }
/* Los títulos de las columnas, siempre a la vista al bajar. */
.acc-cat-caja .cjs-tabla thead th { position: sticky; top: 0; z-index: 3; background: var(--panel-2, #1c2432); }
.tcg-claro .acc-cat-caja .cjs-tabla thead th { background: var(--panel-2, #f4f6fa); }
/* La tabla del catálogo como un Excel simple (condición fija de Ramiro):
   la grilla se ve, las cajitas no. Todas las celdas iguales, se editen o no;
   al pararse en una, se marca en azul. El selector largo le gana a la regla
   general del modo claro para campos, que tiene !important. */
.acc-cat-caja .cjs-tabla { border-collapse: collapse; }
.acc-cat-caja .cjs-tabla th, .acc-cat-caja .cjs-tabla td { border: 1px solid var(--border, #2a3345); }
.acc-cat-caja .cjs-tabla td { padding: 0 6px; height: 32px; }
.acc-cat-caja .cjs-tabla td input:not([type="checkbox"]):not([type="radio"]),
.acc-cat-caja .cjs-tabla td select,
.tcg-claro .acc-cat-caja .cjs-tabla td input:not([type="checkbox"]):not([type="radio"]),
.tcg-claro .acc-cat-caja .cjs-tabla td select {
  border: 0 !important; background: transparent !important; box-shadow: none !important;
  width: 100%; height: 30px; color: var(--text, #e6eaf0) !important; font-size: 13px; }
.acc-cat-caja .cjs-tabla td input:focus, .acc-cat-caja .cjs-tabla td select:focus {
  outline: 2px solid var(--accent-blue, #4f8ef7); outline-offset: -2px; background: rgba(79,142,247,.10) !important; }
.tcg-claro .acc-cat-caja .cjs-tabla { background: #ffffff; }
.acc-cat-caja .cjs-tabla td select { min-width: 110px; }
/* La última columna (borrar) no queda debajo de la barra vertical. */
.acc-cat .acc-cat-caja { scrollbar-gutter: stable; padding-right: 2px; }
.acc-cat-caja .cjs-tabla th:last-child, .acc-cat-caja .cjs-tabla td:last-child { min-width: 86px; padding-right: 14px; }
.acc-cat-borrar.es-confirmando { background: #c0392b !important; border-color: #c0392b !important; color: #fff !important; min-width: 74px; }
/* La lista de clientes, más alta y con los títulos fijos. */
.pv-lista-caja { overflow: auto; max-height: calc(calc(100vh / var(--tcg-z, 1)) - 300px); min-height: 220px; border: 1px solid var(--border, #2a3345); border-top: 0; border-radius: 0 0 8px 8px; }
.pv-lista-caja .pv-tabla thead th { position: sticky; top: 0; z-index: 3; background: var(--panel-2, #1c2432); }
.tcg-claro .pv-lista-caja .pv-tabla thead th { background: var(--panel-2, #f4f6fa); }
.pv-lista .acc-scroll-arriba { margin-top: 8px; }
.pv-plantilla { display: grid; gap: 8px; padding: 10px 12px; margin-bottom: 10px; border: 1px dashed var(--border, #2a3345); border-radius: 8px; }
.pv-plantilla code { font-size: 12px; padding: 1px 5px; border-radius: 4px; background: var(--panel-3, #0d121a); }
.tcg-claro .pv-plantilla code { background: #eef1f6; }
/* La ventana de diferencias. */
.dif-overlay { z-index: 400; }
.pvx-btn--ok { background: #1f8a4c !important; border-color: #1f8a4c !important; color: #ffffff !important; }
.pvx-btn--err { background: #c0392b !important; border-color: #c0392b !important; color: #ffffff !important; }
.arch-btn { display: flex; flex-direction: column; gap: 5px; min-width: 260px; }
.arch-btn-rot { font-size: 12px; color: var(--text); text-transform: none; letter-spacing: 0; }
.arch-btn-fila { display: flex; align-items: center; gap: 10px; min-width: 0; }
.arch-btn-boton { display: inline-flex; align-items: center; justify-content: center; cursor: pointer; min-width: 130px; }
.arch-btn-nom { font-size: 12.5px; color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 260px; }
.arch-btn-nom--si { color: var(--text, #e6eaf0); font-weight: 600; }
.arch-listo { display: inline-flex; align-items: center; align-self: flex-end; cursor: default; }
.acc-import .cjs-form, .acc-precios .cjs-form { align-items: flex-end; gap: 16px; flex-wrap: wrap; }
.acc-import-pie { display: flex; justify-content: flex-end; align-items: center; gap: 10px; margin-top: 16px; padding-top: 12px; border-top: 1px solid var(--border, #2a3345); }
.acc-import-pie .pvx-btn { min-width: 240px; }
/* Un botón principal apagado no puede parecer un error (en Ginza se veía rojo). */
.pvx-btn--primario:disabled { background: var(--panel-2, #1c2432) !important; border-color: var(--border, #2a3345) !important; color: var(--text) !important; opacity: 1; }
.dif-modal { width: min(980px, calc(96vw / var(--tcg-z, 1))); max-height: calc(88vh / var(--tcg-z, 1)); display: flex; flex-direction: column; padding: 16px 18px; gap: 10px; }
.dif-cab { display: flex; flex-direction: column; gap: 2px; }
.dif-cab b { font-size: 16px; }
.dif-tabla-caja { overflow: auto; border: 1px solid var(--border, #2a3345); border-radius: 8px; flex: 1; min-height: 160px; }
.dif-tabla { width: 100%; border-collapse: collapse; font-size: 12.5px; }
.dif-tabla th { position: sticky; top: 0; background: var(--panel-2, #1c2432); text-align: left; font-size: 13px; text-transform: uppercase; letter-spacing: .05em; padding: 7px 10px; }
.tcg-claro .dif-tabla th { background: var(--panel-2, #f4f6fa); color: var(--text, #0e1116); }
.dif-tabla td { border: 1px solid var(--border, #2a3345); padding: 6px 10px; vertical-align: top; color: var(--text, #e6eaf0); }
.dif-nom { width: 30%; }
.dif-antes { color: var(--text) !important; text-decoration: line-through; }
.dif-despues { font-weight: 700; }
.dif-tag { margin-left: 8px; font-size: 12px; font-weight: 800; text-transform: uppercase; padding: 1px 7px; border-radius: 999px; background: var(--green, #4caf6d); color: #fff; }
.dif-pie { display: flex; align-items: center; gap: 8px; }
/* ══ Adjudicados (21/09/2026) ══ */
.adj2 { padding: 0 2px 12px; }
.adj2-btn { min-width: 120px; display: inline-flex; align-items: center; justify-content: center; }
.adj2-busca, .tcg-claro .adj2-busca:not([type="checkbox"]) { width: 300px; height: 34px; border: 1px solid var(--border, #2a3345) !important; border-radius: 8px; background: var(--panel-3, #0d121a) !important; color: var(--text, #e6eaf0) !important; padding: 0 10px; }
.tcg-claro .adj2-busca:not([type="checkbox"]) { background: #ffffff !important; color: var(--text, #0e1116) !important; }
.adj2-vista { min-width: 150px; justify-content: center; }
.adj2-obj-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: 12px; }
.adj2-obj { border: 1px solid var(--border, #2a3345); border-radius: 10px; padding: 12px 14px; background: var(--panel-2, #1c2432); color: var(--text, #e6eaf0); }
.tcg-claro .adj2-obj { background: #ffffff; }
.adj2-obj-fila { display: flex; justify-content: space-between; align-items: baseline; gap: 10px; font-size: 13.5px; }
.adj2-obj-fila b { font-size: 26px; }
.adj2-obj-barra { height: 10px; border-radius: 6px; border: 1px solid var(--border, #2a3345); background: var(--panel, #161c29); margin: 8px 0 6px; position: relative; overflow: hidden; }
.adj2-obj-barra i { display: block; height: 100%; background: var(--casa-activa, #4f8ef7); }
.adj2-obj--ok .adj2-obj-barra i { background: var(--green, #4caf6d); }
.adj2-obj-barra em { position: absolute; top: -3px; bottom: -3px; width: 2px; background: var(--text, #e6eaf0); opacity: 1; }
.adj2-obj small { font-size: 12px; color: var(--text); }
.adj2-editor { margin-top: 12px; border-top: 1px solid var(--border, #2a3345); padding-top: 12px; }
.adj2-pasos-ed { display: grid; grid-template-columns: repeat(auto-fill, minmax(330px, 1fr)); gap: 8px; }
.adj2-paso-ed { display: flex; align-items: center; gap: 8px; border: 1px solid var(--border, #2a3345); border-radius: 8px; padding: 6px 8px; font-size: 12.5px; color: var(--text, #e6eaf0); }
.adj2-paso-ed > input { flex: 1; min-width: 0; height: 30px; border: 1px solid var(--border, #2a3345); border-radius: 6px; background: var(--panel, #161c29); color: var(--text, #e6eaf0); padding: 0 8px; }
.adj2-mini { width: 46px !important; height: 28px; border: 1px solid var(--border, #2a3345); border-radius: 6px; background: var(--panel, #161c29); color: var(--text, #e6eaf0); text-align: center; }
.tcg-claro .adj2-paso-ed > input, .tcg-claro .adj2-mini { background: #ffffff; }
/* Mismo criterio que «gu-carpetas»: sin barra. (28/09/2026 · nd) */
.adj2-solapas { display: flex; gap: 4px; flex-wrap: wrap; row-gap: 0; border-bottom: 2px solid var(--casa-activa, #4f8ef7); margin-bottom: 10px; }
.adj2-sol { border: 1px solid var(--border, #2a3345); border-bottom: 0; background: var(--panel-2, #1c2432); color: var(--text); padding: 8px 12px 7px; border-radius: 9px 9px 0 0; cursor: pointer; font: inherit; font-size: 12.5px; font-weight: 600; white-space: nowrap; display: inline-flex; gap: 6px; align-items: center; }
.adj2-sol.on { background: var(--casa-activa, #4f8ef7); color: var(--casa-activa-tinta, #ffffff); border-color: var(--casa-activa, #4f8ef7); }
.adj2-sol b { font-size: 12px; min-width: 20px; padding: 0 6px; border-radius: 999px; background: var(--panel, #161c29); color: var(--text, #e6eaf0); border: 1px solid var(--border, #2a3345); text-align: center; }
.tcg-claro .adj2-sol b { background: #ffffff; }
.adj2-sol b.mal { background: var(--red, #e2574c); border-color: var(--red, #e2574c); color: #ffffff; }
.adj2-herr { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; margin-bottom: 8px; }
.adj2-panel { border: 1px solid var(--border, #2a3345); border-radius: 10px; padding: 10px 12px; margin-bottom: 8px; color: var(--text, #e6eaf0); background: var(--panel, #161c29); }
.tcg-claro .adj2-panel { background: #ffffff; }
.adj2-panel-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 6px 14px; margin-top: 8px; }
.adj2-panel-grid label { display: flex; gap: 8px; align-items: center; font-size: 13px; }
.adj2-panel-grid input[type=text] { flex: 1; height: 28px; border: 1px solid var(--border, #2a3345); border-radius: 6px; padding: 0 8px; background: var(--panel-2, #1c2432); color: var(--text, #e6eaf0); }
.tcg-claro .adj2-panel-grid input[type=text] { background: #ffffff; }
.adj2-sup { overflow-x: auto; overflow-y: hidden; height: 14px; border: 1px solid var(--border, #2a3345); border-bottom: 0; border-radius: 8px 8px 0 0; background: var(--panel-2, #1c2432); }
.adj2-caja { overflow: auto; max-height: calc(calc(100vh / var(--tcg-z, 1)) - 380px); min-height: 180px; border: 1px solid var(--border, #2a3345); border-radius: 0 0 8px 8px; }
.adj2-caja table { border-collapse: collapse; min-width: 100%; font-size: 12.5px; }
.adj2-caja th { position: sticky; top: 0; z-index: 2; background: var(--panel-2, #1c2432); color: var(--text, #e6eaf0); text-align: left; font-size: 13px; text-transform: uppercase; letter-spacing: .04em; padding: 8px 10px; border: 1px solid var(--border, #2a3345); border-bottom: 2px solid var(--border, #2a3345); white-space: nowrap; cursor: grab; user-select: none; }
.adj2-caja th.num { text-align: center; }
.adj2-caja th.es-arrastra { opacity: .4; }
.adj2-caja td { border: 1px solid var(--border, #2a3345); padding: 5px 10px; white-space: nowrap; color: var(--text, #e6eaf0); height: 30px; text-align: left; }
.adj2-caja td.num { text-align: center; font-variant-numeric: tabular-nums; }
.adj2-caja tbody tr:hover td { background: color-mix(in srgb, var(--casa-activa, #4f8ef7) 8%, transparent); }
.adj2-caja tfoot td { font-weight: 800; background: var(--panel-2, #1c2432); position: sticky; bottom: 0; }
.tcg-claro .adj2-caja table { background: #ffffff; }
.tcg-claro .adj2-caja th, .tcg-claro .adj2-caja tfoot td { background: var(--panel-2, #f4f6fa); color: var(--text, #0e1116); }
.adj2-caja td.adj2-edit { padding: 0; }
.adj2-caja td.adj2-edit input, .tcg-claro .adj2-caja td.adj2-edit input:not([type="checkbox"]):not([type="radio"]) {
  width: 100%; min-width: 110px; height: 30px; border: 0 !important; background: transparent !important; box-shadow: none !important; color: var(--text, #e6eaf0) !important; font: inherit; font-size: 13px; padding: 0 10px; }
.tcg-claro .adj2-caja td.adj2-edit input:not([type="checkbox"]):not([type="radio"]) { color: var(--text, #0e1116) !important; }
.adj2-caja td.adj2-edit.num input { text-align: center; }
.adj2-caja td.adj2-edit input:focus { outline: 2px solid var(--casa-activa, #4f8ef7); outline-offset: -2px; background: color-mix(in srgb, var(--casa-activa, #4f8ef7) 10%, transparent) !important; }
.adj2-vacio { color: var(--text) !important; text-align: left; }
/* Avisos como fondo de celda: letra del tema, nada de dorado. */
.adj2-caja td.adj2-ok { background: color-mix(in srgb, var(--green, #4caf6d) 18%, transparent); }
.adj2-caja td.adj2-ojo { background: color-mix(in srgb, #f2c200 26%, transparent); }
.adj2-caja td.adj2-mal { background: color-mix(in srgb, var(--red, #e2574c) 22%, transparent); }
.tcg-claro .adj2-caja td.adj2-ok { background: #dff1e5; } .tcg-claro .adj2-caja td.adj2-ojo { background: #fff3bf; } .tcg-claro .adj2-caja td.adj2-mal { background: #fbdcd8; }
.adj2-ley { display: flex; gap: 14px; flex-wrap: wrap; font-size: 12px; color: var(--text, #e6eaf0); }
.adj2-ley-i { padding: 2px 10px; border-radius: 999px; }
.adj2-ley-i.adj2-ok { background: color-mix(in srgb, var(--green, #4caf6d) 22%, transparent); } .adj2-ley-i.adj2-ojo { background: color-mix(in srgb, #f2c200 30%, transparent); } .adj2-ley-i.adj2-mal { background: color-mix(in srgb, var(--red, #e2574c) 26%, transparent); }
.tcg-claro .adj2-ley { color: #000; } .tcg-claro .adj2-ley-i.adj2-ok { background: #dff1e5; } .tcg-claro .adj2-ley-i.adj2-ojo { background: #fff3bf; } .tcg-claro .adj2-ley-i.adj2-mal { background: #fbdcd8; }
/* El camino */
.adj2-camino { overflow-x: auto; }
.adj2-svg { min-width: 980px; display: block; }
.adj2-via { stroke: var(--border, #2a3345); }
.adj2-via-puntos { stroke: var(--casa-activa, #4f8ef7); opacity: 1; }
.adj2-est { cursor: pointer; }
.adj2-aro { fill: var(--panel, #161c29); stroke-width: 3.5; }
.tcg-claro .adj2-aro { fill: #ffffff; }
.adj2-aro--ok { stroke: var(--green, #4caf6d); } .adj2-aro--ojo { stroke: #d9a800; } .adj2-aro--mal { stroke: var(--red, #e2574c); }
/* La estación elegida: el color de la casa, en su versión que se ve en oscuro. */
.adj2-aro.es-sel { stroke: var(--casa-activa-luz, #8fb8ff); stroke-width: 6; }
.tcg-claro .adj2-aro.es-sel { stroke: var(--casa-activa, #0b4f96); }
.adj2-est-n { font-size: 18px; font-weight: 800; fill: var(--text, #e6eaf0); }
.adj2-est-nom { font-size: 13px; font-weight: 700; fill: var(--text, #e6eaf0); }
.adj2-est-dias { font-size: 12px; fill: var(--text-muted, #9aa3b2); }
.tcg-claro .adj2-est-n, .tcg-claro .adj2-est-nom { fill: #0e1116; } .tcg-claro .adj2-est-dias { fill: #39404b; }
.adj2-fin { fill: var(--green, #4caf6d); } .adj2-fin-n { font-size: 18px; font-weight: 800; fill: #ffffff; } .adj2-fin-t { font-size: 12px; fill: #ffffff; }
/* Historial: barras de 24 meses */
.adj2-barras { position: relative; display: flex; align-items: flex-end; gap: 6px; height: 200px; padding: 20px 2px 0; }
.adj2-col { flex: 1; min-width: 0; height: 100%; display: flex; flex-direction: column; justify-content: flex-end; align-items: center; gap: 3px; background: none; border: 0; padding: 0; cursor: pointer; font: inherit; color: var(--text); }
.adj2-col span { width: 100%; background: var(--casa-activa, #4f8ef7); border-radius: 4px 4px 0 0; opacity: 1; min-height: 1px; }
.adj2-col.es-ok span { background: var(--green, #4caf6d); }
.adj2-col.es-sel span { outline: 2px solid var(--text, #e6eaf0); }
.adj2-col b { font-size: 12px; color: var(--text, #e6eaf0); }
.adj2-col small { font-size: 12px; white-space: nowrap; }
.tcg-claro .adj2-col b { color: #000; } .tcg-claro .adj2-linea em { background: #ffffff; } .tcg-claro .adj2-col small { color: #000; } .tcg-claro .adj2-col.es-sel span { outline-color: #0e1116; }
.adj2-linea { position: absolute; left: 0; right: 0; border-top: 2px dashed var(--red, #e2574c); pointer-events: none; }
.adj2-linea em { position: absolute; left: 0; top: -18px; background: var(--panel, #161c29); padding: 0 4px; font-size: 12px; font-weight: 700; font-style: normal; color: var(--red, #e2574c); }
/* CRM PostVenta: tamaño fijo, no cambia con cada solapa (21/09/2026, Ramiro) */
.per-modal.crm-modal { width: min(1440px, calc(98vw / var(--tcg-z, 1))); height: calc(94vh / var(--tcg-z, 1)); max-height: calc(94vh / var(--tcg-z, 1)); }
/* CRM PostVenta */
.per-modal.crm-modal { width: min(1440px, calc(98vw / var(--tcg-z, 1))); max-width: calc(98vw / var(--tcg-z, 1)); max-height: calc(96vh / var(--tcg-z, 1)); display: flex; flex-direction: column; }
.crm-cuerpo { flex: 1; overflow: auto; padding: 12px 16px; }
/* TAMAÑO FIJO DE VERDAD (22/09/2026, Ramiro, con capturas). Abierto desde el
   menú, el CRM vive adentro del lienzo (debajo de la barra de arriba) y el
   «94 % de la pantalla» era más alto que ese lugar: el pie quedaba cortado
   abajo. Adentro del lienzo ocupa exactamente el lugar disponible; suelto,
   el 94 % de la pantalla. En los dos casos el mismo alto en todas las
   solapas: la solapa se desplaza por dentro, el modal no crece ni se achica. */
.per-modal.crm-modal { height: calc(94vh / var(--tcg-z, 1)); max-height: calc(94vh / var(--tcg-z, 1)); }

/* ══ Centro estadístico (23/09/2026) ══ */
.ces-modal { width: min(1500px, calc(98vw / var(--tcg-z, 1))); height: calc(94vh / var(--tcg-z, 1)); max-height: calc(94vh / var(--tcg-z, 1)); display: flex; flex-direction: column; }
.ces-barra { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; padding: 10px 16px 0; }
.ces-grupo { display: inline-flex; border: 1px solid var(--border, #2a3345); border-radius: 10px; overflow: hidden; }
.ces-grupo .ces-b { border: 0; border-right: 1px solid var(--border, #2a3345); border-radius: 0; }
.ces-grupo .ces-b:last-child { border-right: 0; }
.ces-b { height: 32px; padding: 0 14px; border: 1px solid var(--border, #2a3345); border-radius: 8px; cursor: pointer;
  background: var(--panel, #161c29); color: var(--text, #e6eaf0); font: inherit; font-size: 13px; font-weight: 600; }
.tcg-claro .ces-b { background: #ffffff; }
.ces-b.on { background: var(--casa-activa, #4f8ef7); color: var(--casa-activa-tinta, #fff); border-color: var(--casa-activa, #4f8ef7); }
.ces-solapas { display: flex; gap: 4px; padding: 10px 16px 0; flex-wrap: wrap; row-gap: 0; border-bottom: 2px solid var(--casa-activa, #4f8ef7); }
.ces-sol { border: 1px solid var(--border, #2a3345); border-bottom: 0; background: var(--panel-2, #1c2432); color: var(--text);
  padding: 8px 14px 7px; border-radius: 9px 9px 0 0; cursor: pointer; font: inherit; font-size: 13px; font-weight: 600; white-space: nowrap; }
.ces-sol.on { background: var(--casa-activa, #4f8ef7); color: var(--casa-activa-tinta, #fff); border-color: var(--casa-activa, #4f8ef7); }
.ces-cuerpo { flex: 1; overflow: auto; padding: 12px 16px; min-height: 0; }
.ces-ritmos { display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: 10px; }
.ces-r { border: 1px solid var(--border, #2a3345); border-radius: 12px; padding: 12px 14px; }
.ces-r h4 { margin: 0; font-size: 12.5px; color: var(--text); font-weight: 600; }
.ces-r-val { display: flex; align-items: baseline; gap: 6px; margin: 2px 0 6px; }
.ces-r-val b { font-size: 27px; letter-spacing: -.02em; }
.ces-r-val span { font-size: 13px; color: var(--text); }
.ces-r-barra { height: 8px; border-radius: 5px; background: var(--panel-2, #1c2432); border: 1px solid var(--border, #2a3345); position: relative; overflow: hidden; }
.ces-r-barra i { display: block; height: 100%; background: var(--casa-activa, #4f8ef7); }
.ces-r.es-ok .ces-r-barra i { background: var(--green, #4caf6d); }
.ces-r.es-mal .ces-r-barra i { background: var(--red, #e2574c); }
.ces-r-barra em { position: absolute; top: -3px; bottom: -3px; width: 2px; background: var(--text, #e6eaf0); opacity: 1; }
.ces-r small { display: block; margin-top: 6px; font-size: 12px; color: var(--text); }
.ces-kpis { display: grid; grid-template-columns: repeat(auto-fit, minmax(165px, 1fr)); gap: 10px; }
.ces-kpi { border: 1px solid var(--border, #2a3345); border-radius: 10px; padding: 10px 12px; }
.ces-kpi span { font-size: 12px; color: var(--text); display: block; }
.ces-kpi b { font-size: 22px; display: block; line-height: 1.2; }
.ces-kpi i { font-style: normal; font-size: 12px; color: var(--text); }
.es-sube { color: var(--text); font-weight: 700; }
.es-baja { color: var(--red, #e2574c); font-weight: 700; }
.ces-dos { display: grid; grid-template-columns: repeat(auto-fit, minmax(380px, 1fr)); gap: 12px; }
.ces-lin { display: grid; grid-template-columns: 170px 1fr 80px; gap: 10px; align-items: center; margin: 5px 0; font-size: 13px; }
.ces-lin i { display: block; height: 10px; border-radius: 5px; background: var(--casa-activa, #4f8ef7); opacity: 1; }
.ces-lin b { text-align: right; font-variant-numeric: tabular-nums; }
.ces-alerta { display: grid; grid-template-columns: auto 1fr auto; gap: 12px; align-items: center; margin-bottom: 8px;
  border: 1px solid var(--border, #2a3345); border-left: 4px solid var(--red, #e2574c); border-radius: 10px; padding: 10px 12px; }
.ces-alerta b { font-size: 22px; font-variant-numeric: tabular-nums; }
.ces-alerta small { display: block; color: var(--text); font-size: 12px; }
.ces-embebido { padding: 0; overflow: hidden; }
.per-modal.crm-modal > .crm-cuerpo { min-height: 0; }
.crm-dos { display: grid; grid-template-columns: repeat(auto-fit, minmax(420px, 1fr)); gap: 12px; }
.crm-dos .pvx-bloque { margin-top: 12px; }
.crm-tabla-caja { overflow: auto; max-height: 440px; border-radius: 8px; }
.crm-tabla td, .crm-tabla th { text-align: left; white-space: nowrap; }
.crm-tabla tr.crm-click { cursor: pointer; }
.crm-tabla tr.crm-click:hover td { background: color-mix(in srgb, var(--accent-blue, #4f8ef7) 8%, transparent); }
.crm-tabla tr.crm-on td { background: color-mix(in srgb, var(--accent-blue, #4f8ef7) 16%, transparent); font-weight: 700; }
.crm-tabla-ed td { padding: 0 4px !important; }
.crm-tabla-ed input, .tcg-claro .crm-tabla-ed input:not([type="checkbox"]):not([type="radio"]) { border: 0 !important; background: transparent !important; box-shadow: none !important; width: 100%; min-width: 80px; height: 30px; color: var(--text, #e6eaf0) !important; font-size: 13px; padding: 0 6px; }
.crm-tabla-ed input:focus { outline: 2px solid var(--accent-blue, #4f8ef7); outline-offset: -2px; }
.crm-kpi { text-align: left; cursor: pointer; font: inherit; color: var(--text, #e6eaf0); }
.crm-kpi:hover { border-color: var(--accent-blue, #4f8ef7); }
.crm-kpi--on { box-shadow: inset 0 0 0 2px var(--accent-blue, #4f8ef7); }
.crm-kpi--mal b { color: var(--red, #e2574c); }
.crm-kpi--bien b { color: var(--text); }
.crm-chip { font-size: 12px; font-weight: 700; padding: 2px 8px; border-radius: 999px; border: 1px solid var(--border, #2a3345); white-space: nowrap; }
.crm-chip--mal { color: var(--red, #e2574c); border-color: var(--red, #e2574c); }
.crm-chip--ojo { color: var(--text); border-color: var(--ambar-texto, #f2c200); }
.crm-chip--bien { color: var(--text); border-color: var(--green, #4caf6d); }
.crm-busca { max-width: 280px; }
.crm-ficha { display: grid; gap: 10px; align-content: start; }
.crm-estados { display: flex; flex-wrap: wrap; gap: 6px; }
.crm-est { border: 1px solid var(--border, #2a3345); background: var(--panel, #161c29); color: var(--text, #e6eaf0); border-radius: 999px; padding: 5px 10px; font: inherit; font-size: 12px; cursor: pointer; }
.tcg-claro .crm-est { background: #ffffff; }
.crm-est.on { background: var(--accent-blue, #4f8ef7); border-color: var(--accent-blue, #4f8ef7); color: var(--casa-activa-tinta, #fff); }
.crm-est--pri { border-color: var(--green, #4caf6d); color: var(--text); font-weight: 700; }
.crm-recon { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 10px; }
.crm-hist { display: grid; gap: 4px; font-size: 12.5px; max-height: 140px; overflow: auto; }
.crm-pct { font-weight: 700; }
.crm-aviso-carga { display: flex; align-items: center; justify-content: space-between; gap: 10px; flex-wrap: wrap; border: 1px solid var(--ambar-texto, #f2c200); border-radius: 10px; padding: 10px 14px; margin-bottom: 10px; color: var(--text, #e6eaf0); }
.crm-detalle { border-color: var(--accent-blue, #4f8ef7); }
/* Fecha vacía, vacía: sin el «dd/mm/aaaa» gris hasta que se toca. */
.crm-fecha-vacia::-webkit-datetime-edit { color: transparent; }
.crm-fecha-vacia:focus::-webkit-datetime-edit { color: var(--text); }
/* Control y recupero (Plan de Ahorro) */
.pcr { display: grid; gap: 0; padding: 4px 2px 12px; }
.pcr-param { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 12px; }
.pcr-tramos-ed { grid-column: 1 / -1; }
.pcr-tramo-ed { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--text, #e6eaf0); }
.pcr-tramo-ed input { width: 70px !important; }
.pcr-control { display: grid; grid-template-columns: repeat(auto-fit, minmax(360px, 1fr)); gap: 12px; }
.pcr-ctl { border: 1px solid var(--border, #2a3345); border-radius: 10px; padding: 12px; background: var(--panel-2, #1c2432); display: grid; gap: 6px; }
.tcg-claro .pcr-ctl { background: #ffffff; }
.pcr-ctl-cab { display: flex; justify-content: space-between; align-items: center; }
.pcr-sem { font-size: 12px; font-weight: 800; padding: 2px 9px; border-radius: 999px; }
.pcr-sem--ok { background: color-mix(in srgb, var(--green, #4caf6d) 20%, transparent); color: var(--text); }
.pcr-sem--mal { background: color-mix(in srgb, var(--red, #e2574c) 20%, transparent); color: var(--red, #e2574c); }
.pcr-apagar { font-size: 13.5px; color: var(--text, #e6eaf0); }
.pcr-rangos-caja { overflow: auto; max-height: 420px; border-radius: 8px; }
.pcr-rangos tbody tr { cursor: pointer; }
.pcr-rangos tbody tr:hover td { background: color-mix(in srgb, var(--accent-blue, #4f8ef7) 8%, transparent); }
.pcr-rangos tr.pcr-on td { background: color-mix(in srgb, var(--accent-blue, #4f8ef7) 16%, transparent); font-weight: 700; }
.pcr-rangos tr.pcr-mal td:nth-child(5), .pcr-rangos tr.pcr-mal td:nth-child(8) { color: var(--red, #e2574c); font-weight: 700; }
.pcr-detalle { margin-top: 12px; }
.pcr-tabla td, .pcr-rangos td { text-align: left; }
/* Celda vacía, vacía: la ayuda aparece recién al pararse en ella. */
.acc-cat-caja .cjs-tabla td input::placeholder { color: transparent; }
.acc-cat-caja .cjs-tabla td input:focus::placeholder { color: var(--text); }
/* Los filtros: un control segmentado. */
.pvx-filtros { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 12px; }
.pvx-seg { display: inline-flex; border: 1px solid var(--border, #2a3345); border-radius: 10px; overflow: hidden; background: var(--panel, #161c29); }
.pvx-seg-op { display: inline-flex; align-items: center; gap: 7px; border: 0; border-right: 1px solid var(--border, #2a3345);
  background: transparent; color: var(--text, #e6eaf0); font: inherit; font-size: 13px; padding: 7px 12px; cursor: pointer; }
.pvx-seg-op:last-child { border-right: 0; }
.pvx-seg-op:hover { background: var(--panel-2, #1c2432); }
.pvx-seg-op.on { background: var(--panel-2, #1c2432); font-weight: 700; box-shadow: inset 0 -2px 0 var(--vnv-marca, var(--accent-blue, #4f8ef7)); }
.tcg-claro .pvx-seg-op.on { background: color-mix(in srgb, var(--vnv-marca, #2563eb) 10%, #ffffff); }
.pvx-n { font-size: 12px; font-weight: 700; min-width: 20px; height: 18px; padding: 0 6px; border-radius: 999px;
  display: inline-flex; align-items: center; justify-content: center; background: var(--panel-3, #0d121a); color: var(--text, #e6eaf0); }
.tcg-claro .pvx-n { background: #e9edf4; }
/* Botones: contorno; uno solo lleno. */
.pvx-btn { height: 32px; padding: 0 12px; border-radius: 8px; border: 1px solid var(--border, #2a3345);
  background: var(--panel, #161c29); color: var(--text, #e6eaf0); font: inherit; font-size: 13px; font-weight: 600; cursor: pointer; white-space: nowrap; }
.tcg-claro .pvx-btn { background: #ffffff; }
.pvx-btn:hover:not(:disabled) { border-color: var(--vnv-marca, var(--accent-blue, #4f8ef7)); }
.pvx-btn:disabled { opacity: .45; cursor: default; }
.pvx-btn--primario { background: var(--vnv-marca, #2f6fbf) !important; border-color: var(--vnv-marca, #2f6fbf) !important; color: var(--vnv-marca-txt, #ffffff) !important; }
.pvx-btn--wa { color: var(--text); border-color: #1f8a4c; }
.pvx-link { border: 0; background: none; padding: 0; color: var(--text); font: inherit; font-size: 12.5px; font-weight: 600; cursor: pointer; }
.tcg-claro .pvx-link { color: var(--text); }
.pvx-link:hover { text-decoration: underline; }
/* La ficha del cliente. */
.pvx-ficha { background: var(--panel, #161c29); border: 1px solid var(--border, #2a3345); border-radius: 12px; padding: 16px; color: var(--text, #e6eaf0); display: grid; gap: 12px; margin-bottom: 12px; }
.tcg-claro .pvx-ficha { box-shadow: 0 1px 2px rgba(15,23,42,.06), 0 4px 14px rgba(15,23,42,.05); }
.pvx-ficha-cab { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; }
.pvx-nom { font-size: 19px; font-weight: 800; letter-spacing: -.01em; }
.pvx-sub { font-size: 12.5px; color: var(--text); margin-top: 2px; }
.pvx-ficha-cuerpo { display: grid; grid-template-columns: repeat(auto-fit, minmax(340px, 1fr)); gap: 12px; }
.pvx-datos { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 12px 14px; }
.pvx-dato { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.pvx-dato b { font-size: 13.5px; font-weight: 700; color: var(--text, #e6eaf0); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pvx-grupo + .pvx-grupo { margin-top: 12px; }
.pvx-grupo-tit { display: block; font-size: 12px; color: var(--text); margin-bottom: 6px; }
.pvx-fila { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; }
.pvx-fila--chica { gap: 14px; }
.pvx-msg { background: var(--panel, #161c29); border: 1px solid var(--border, #2a3345); border-radius: 8px; padding: 10px 12px;
  font-size: 13.5px; line-height: 1.5; color: var(--text, #e6eaf0); cursor: text; white-space: pre-wrap; }
.tcg-claro .pvx-msg { background: #ffffff; }
.pvx-msg--edit { width: 100%; font: inherit; font-size: 13.5px; resize: vertical; }
/* Sin «@media»: las rejillas se acomodan solas al ancho (auto-fit), así no
   se rompe la escalera de anchos del archivo y en pantallas angostas los
   bloques bajan uno debajo del otro. */
/* La web de accesorios, en claro: letra negra, bordes y tarjetas despegadas. */
.tcg-claro .acmf-item, .tcg-claro .tnd-enlace { background: #ffffff; border-color: var(--border, #c3cad6); color: var(--text, #0e1116);
  box-shadow: 0 1px 2px rgba(15,23,42,.06), 0 4px 14px rgba(15,23,42,.05); }
.tcg-claro .tnd-seccion, .tcg-claro .acmf-nom, .tcg-claro .acmf-chip { color: var(--text, #0e1116); }
.tcg-claro .acmf-chip { background: #ffffff; border-color: var(--border, #c3cad6); }
.acc-pie-bloque{border:1px solid var(--border,#2a3345);border-radius:10px;padding:10px 12px;background:var(--panel-2,#1c2432)}
.acc-pie-tit{font-size: 12px;letter-spacing:.1em;text-transform:uppercase;color:var(--text);margin-bottom:8px}

/* Catálogo y precios: estado en su propio bloque (19/09/2026) */
.acc-cat-estado{border:1px solid var(--border,#2a3345);border-radius:10px;padding:10px 12px;margin-top:12px;background:var(--panel-2,#1c2432)}
.acc-cat-estado .cjs-inds{margin-top:6px}
.cjs-i--ojo .v{color:var(--text)}

/* Órdenes de accesorios: buscador y encabezado fijo (19/09/2026) */
.pv-buscador{display:flex;gap:8px;align-items:center;margin-bottom:8px}
.pv-buscador input{flex:1;padding:8px 11px;border:1px solid var(--border-fuerte,#3a4559);border-radius:8px;background:var(--panel-3,#0d121a);color:var(--text);font-size: 13px}
.pv-tabla--sticky thead th{position:sticky;top:0;z-index:2;background:var(--panel,#141b26)}

/* Fechas del proceso de adjudicación (19/09/2026) */
.fpr-tabla input[type=date]{background:var(--panel-3,#0d121a);color:var(--text);border:1px solid var(--border-fuerte,#3a4559);border-radius:5px;padding:3px 6px;font:inherit;font-size: 13px}
.fpr-imp{width:90px;background:var(--panel-3,#0d121a);color:var(--text);border:1px solid var(--border-fuerte,#3a4559);border-radius:5px;padding:3px 6px;font:inherit;font-size: 12px;text-align:right}
.fpr-tabla th{white-space:nowrap}

/* Seguimiento de adjudicados: editor de pasos (19/09/2026) */
.fpr-barra{display:flex;gap:10px;align-items:center;margin-bottom:8px}
.fpr-barra .pv-buscador{flex:1;margin:0}
.fpr-editor{border:1px solid var(--border,#2a3345);border-radius:10px;padding:10px 12px;margin-bottom:10px;background:var(--panel-2,#1c2432)}
.fpr-chips{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0}
.fpr-chip{display:inline-flex;align-items:center;gap:4px;border:1px solid var(--border,#2a3345);border-radius:8px;padding:2px 6px;background:var(--panel-3,#0d121a)}
.fpr-chip-nom{background:none;border:0;color:var(--text);font:inherit;font-size: 12px;width:130px}
.fpr-chip-monto{font-size: 12px;display:inline-flex;align-items:center;gap:2px;color:var(--text)}
.fpr-chip button{border:0;background:none;color:var(--text);cursor:pointer;font-size: 15px;line-height:1}
.fpr-nuevo{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:6px;font-size: 12px}
.fpr-nuevo input[type=text],.fpr-nuevo input:not([type]){background:var(--panel-3,#0d121a);color:var(--text);border:1px solid var(--border-fuerte,#3a4559);border-radius:6px;padding:5px 8px;min-width:200px}
.fpr-th-monto{font-weight:400;opacity: 1;font-size: 12px}
.fpr-tabla td{white-space:nowrap}

.car-celda-vieja{background:var(--panel-3,#0d121a);color:var(--text);border:1px solid var(--border-fuerte,#3a4559);border-radius:5px;padding:2px 5px;font:inherit;font-size: 12px}

/* Tienda VN · Fotos y fichas: grilla de tarjetas foto+ficha (19/09/2026) */
.tvn-ff-grilla{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:14px;margin-top:8px}
.tvn-ff-card{border:1px solid var(--border,#2a3345);border-radius:12px;padding:10px;background:var(--panel-2,#1c2432);text-align:center}
.tvn-ff-foto{height:120px;display:flex;align-items:center;justify-content:center;background:var(--panel-3,#0d121a);border-radius:8px;margin-bottom:8px;overflow:hidden}
.tvn-ff-foto img{max-width:100%;max-height:120px;object-fit:contain}
.tvn-ff-foto span{color:var(--text);font-size: 12px}
.tvn-ff-nom{font-weight:700;margin-bottom:8px}
.tvn-ff-acc{display:flex;flex-direction:column;gap:6px;align-items:center}
.tvn-ff-ficha{font-size: 12px;color:var(--text)}
.tvn-ff-ficha a{color:var(--text);text-decoration:none;font-weight:600}
/* El renglón de enlace/publicar de la vidriera, legible en oscuro y claro. */
/* 22/09/2026 (Ramiro: «en modo oscuro no se ve»). Este bloque de controles
   vive ADENTRO de la vista previa de la web, que es blanca con letra negra
   (así se ve como la ve el cliente). La letra negra se colaba en los
   controles, que tienen fondo oscuro: los nombres de las casas, el resumen,
   «WhatsApp de consultas» y las ayudas quedaban negro sobre negro. Los
   controles usan los colores del tema; la vista previa sigue blanca. */
.tvn-enlace-top{background:var(--panel-2,#1c2432);border:1px solid var(--border,#2a3345);border-radius:10px;padding:10px 12px;margin-bottom:12px;color:var(--text,#e6eaf0)}
.tvn-enlace-top .com-ayuda, .tvn-enlace-top .po-sub, .tvn-enlace-top .tvn-tilde-foto{color:var(--text)}
.tvn-enlace-top .ret-tilde, .tvn-enlace-top .tvn-resumen span, .tvn-enlace-top .tvn-wa{color:var(--text,#e6eaf0)}
.tvn-enlace-top .tvn-wa input{color:var(--text,#e6eaf0)}
.tcg-claro .tvn-enlace-top{color:var(--text,#0e1116)}
.tcg-claro .tvn-enlace-top .ret-tilde, .tcg-claro .tvn-enlace-top .tvn-resumen span, .tcg-claro .tvn-enlace-top .tvn-wa, .tcg-claro .tvn-enlace-top .tvn-wa input{color:var(--text,#0e1116)}
.tcg-claro .tvn-enlace-top .com-ayuda, .tcg-claro .tvn-enlace-top .po-sub, .tcg-claro .tvn-enlace-top .tvn-tilde-foto{color:#000}
.tcg-claro .tvn-enlace-top{background:#fff}
.tvn-enlace-top .tnd-url code{background:var(--panel-3,#0d121a);color:var(--text)}
.tcg-claro .tvn-enlace-top .tnd-url code{background:#f4f6fa;color:#000}
.tvn-tilde-foto{display:inline-flex;align-items:center;gap:7px;margin-top:8px;font-size: 13px;color:var(--text);cursor:pointer}
.tvn-tilde-foto input{width:15px;height:15px}
.tvn-btn-ok{background:#1e7a3c !important;color:#fff !important;border-color:#1e7a3c !important}
.tvn-btn-err{background:#c0392b !important;color:#fff !important;border-color:#c0392b !important}
.po-aviso--mal{background:#3a1512;border:1px solid #c0392b;color:var(--text)}
.tcg-claro .po-aviso--mal{background:#fdecea;color:#000}


/* ── Publicación web (17/09/2026) ── */
.pw-cuadro th.pw-col{text-align:center}
.pw-clave{display:block;font-size: 12px;opacity: 1;font-weight:400}
.pw-cel{text-align:center}
.pw-cel label{display:inline-flex;flex-direction:column;align-items:center;gap:2px;cursor:pointer}
.pw-cel input{width:17px;height:17px}
.pw-cel small{font-size: 12px;opacity: 1}
.pw-cambio{outline:2px solid var(--accent-amber,#f2c200);outline-offset:-3px}
.pw-casa{display:flex;gap:8px;align-items:center;font-weight:700}
.pw-casa i{width:10px;height:10px;border-radius:50%;background:var(--c);display:inline-block}
.pw-casa small{font-weight:400;opacity: 1;font-size: 12px}
.pw-cuadro tr{box-shadow:inset 3px 0 0 var(--c)}
.pw-banda{display:flex;gap:10px;align-items:center;padding:7px 12px;border-radius:6px 6px 0 0;background:var(--c,#33405a);color:#fff;font-weight:700;margin-top:12px}
.pw-banda small{font-weight:500;opacity: 1}
.pw-atender{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:8px;margin-top:4px}
.pw-at{border:1px solid var(--border,#2a3345);border-left:3px solid var(--accent-amber,#f2c200);border-radius:6px;padding:8px 11px;background:var(--panel-2,#1c2432);font-size: 12px}
.pw-at b{display:block}.pw-at--ok{border-left-color:var(--border,#2a3345)}
.pw-remite{border:1px dashed var(--border-fuerte,#3a4559);border-radius:8px;padding:16px;margin-top:10px}
.pw-enl{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:8px;margin-top:10px}
.pw-enl div{border:1px solid var(--border,#2a3345);border-top:3px solid var(--c,#33405a);border-radius:6px;padding:10px;background:var(--panel-2,#1c2432)}
.pw-enl code{display:block;font-size: 12px;margin:4px 0 8px;word-break:break-all;opacity: 1}
.pw-web{border:1px solid var(--border,#2a3345);border-radius:8px;overflow:hidden;background:#fff;color:#000;margin-top:10px;--m:#1a1a1a;--mt:#fff}
.pw-web--giorgi{--m:#efdf00;--mt:#1a1a1a}.pw-web--vesubio{--m:#0b4f96}.pw-web--ginza{--m:#EB0A1E}.pw-web--grupo{--m:#1a1a1a}
.pw-web-top{display:flex;gap:14px;align-items:center;padding:12px 20px;border-bottom:1px solid #e0e0e0}
.pw-logo{font-weight:800;font-size: 16px;display:flex;gap:8px;align-items:center;color:#000}
.pw-logo i{width:26px;height:26px;border-radius:6px;background:var(--m);display:inline-block}
.pw-web-sub{font-size: 12px;letter-spacing:.12em;text-transform:uppercase;color:#000}
.pw-web-cta{margin-left:auto;border:1.5px solid var(--m);color:var(--text);border-radius:20px;padding:5px 12px;font-weight:700;font-size: 12px}
.pw-web--giorgi .pw-web-cta{color:#000;border-color:#1a1a1a}
.pw-web-linea{height:2px;background:var(--m)}
.pw-web-sec{display:flex;background:#fff;border-bottom:1px solid #e0e0e0;overflow-x:auto}
.pw-web-sec button{border:0;background:none;padding:10px 16px;cursor:pointer;color:#000;border-bottom:3px solid transparent;white-space:nowrap;font:inherit}
.pw-web-sec button.on{color:#000;font-weight:700;border-bottom-color:#1a1a1a}
.pw-web-tit{padding:16px 20px 4px}.pw-web-tit h2{margin:0;font-size: 20px}
.pw-web-barra{background:#1a1a1a;color:#fff;font-size: 12px;letter-spacing:.14em;text-transform:uppercase;padding:7px 20px}
.pw-web-item{display:grid;grid-template-columns:1fr 200px;gap:16px;padding:16px 20px;border-bottom:1px solid #eee}
.pw-num{display:inline-block;border:1px solid #1a1a1a;padding:0 6px;font-size: 12px;margin-right:8px}
.pw-web-item h3{margin:0 0 6px;font-size: 17px;border-bottom:1px solid #1a1a1a;padding-bottom:6px;color:#000}
.pw-web-d{font-size: 12.5px;color:#000}.pw-web-d b{color:#000}
.pw-web-p{color:var(--text);font-weight:800;font-size: 17px;margin:8px 0 4px}
.pw-web--giorgi .pw-web-p{color:#000}
.pw-web-agregar{display:inline-block;border:1.5px solid var(--m);color:var(--text);border-radius:20px;padding:4px 12px;font-size: 12px;font-weight:700}
.pw-web--giorgi .pw-web-agregar{border-color:#1a1a1a;color:#000}
.pw-web-foto{background:#f0f0f0;border-radius:6px;height:96px;display:flex;align-items:center;justify-content:center;color:var(--text);font-size: 12px}
.pw-web-pedir{padding:30px 16px;text-align:center;color:#000}
.pw-web-pedir input{border:1px solid #d0d5dd;border-radius:6px;padding:8px 10px;margin:8px 6px 0 0}
.pw-web-pedir button{border:0;background:#1a1a1a;color:#fff;border-radius:6px;padding:8px 14px;cursor:pointer}
.pw-web-pie{padding:12px 20px;font-size: 12px;color:var(--text);border-top:1px solid #e0e0e0;display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px}

/* ── Tienda online VN (18/09/2026) ── */
.tvn-web{border:1px solid var(--border,#2a3345);border-radius:8px;overflow:hidden;background:#fff;color:#000;margin-top:10px;--m:#1a1a1a}
.tvn-web--giorgi{--m:#efdf00}.tvn-web--vesubio{--m:#0b4f96}.tvn-web--ginza{--m:#EB0A1E}
.tvn-top{display:flex;gap:14px;align-items:center;padding:12px 20px;border-bottom:1px solid #e0e0e0;flex-wrap:wrap}
.tvn-logo{font-weight:800;font-size: 16px;display:flex;gap:8px;align-items:center;color:#000}
.tvn-logo img{height:34px;width:auto;display:block}
.tvn-wa{display:flex;flex-direction:column;gap:4px;margin:8px 0;font-size: 13px;font-weight:600;max-width:420px}
.tvn-wa input{padding:6px 8px;border:1px solid var(--border,#2a3345);border-radius:6px;background:var(--panel-3,#0d121a);color:inherit;font-weight:400}
.tvn-fin-plan{margin-bottom:12px}
.tvn-fin-fila{display:flex;gap:10px;flex-wrap:wrap;padding:8px 12px}
.tvn-fin-campo{display:flex;flex-direction:column;gap:3px;min-width:120px;font-size: 12px;color:var(--text)}
.tvn-fin-campo input{padding:6px 8px;border:1px solid var(--border,#2a3345);border-radius:6px;background:var(--panel-3,#0d121a);color:var(--text,#e6eaf0);font-size: 14px}
.tvn-buscador{margin-top:8px}
.po-root--embebida{margin-top:8px}
.bp-chips--marcas{margin-bottom:6px}
/* Las casas tildadas (mismo criterio en toda la Tienda VN y en Publicación). */
.tvn-casas-tilde{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:8px 0}
.tvn-casas-tilde .com-ayuda{margin:0}
.tvn-tilde-casa{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--border,#2a3345);border-radius:999px;padding:5px 12px;cursor:pointer;font-size: 13px;font-weight:600}
.tvn-tilde-casa.on{border-color:var(--c);box-shadow:inset 0 -3px 0 var(--c)}
.tvn-envio{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:6px 0}
.tvn-envio code{flex:1;min-width:260px;overflow:auto;white-space:nowrap}
.tvn-resumen{display:flex;gap:10px;flex-wrap:wrap;margin:6px 0}
.tvn-resumen span{border:1px solid var(--border,#2a3345);border-radius:8px;padding:4px 10px;font-size: 12px}
/* La Cartera, como una planilla: todas las celdas del mismo alto y con el
   mismo borde, se editen o no. El recuadro de foco marca dónde estoy. */
.car-planilla .sc-table td.car-td{padding:0;height:30px}
/* La celda es texto liviano; la casilla de edición aparece sólo donde estoy
   parado. Con 500 filas por 20 columnas, meter una casilla en cada celda
   dejaba el navegador de rodillas (por eso se trababa al cambiar de pantalla). */
.car-celda{display:block;width:100%;height:30px;line-height:30px;border:0;background:transparent;color:inherit;font:inherit;font-size: 13px;padding:0 8px;outline:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.car-celda--in{line-height:normal}
.car-celda:focus{outline:2px solid var(--acento,#4f8ef7);outline-offset:-2px;background:rgba(79,142,247,.10);border-radius:2px}
.car-celda--edit{color:var(--texto,inherit)}
.car-celda--edit:hover{background:rgba(79,142,247,.06)}
.car-celda[readonly]{cursor:default}
.car-celda::-webkit-calendar-picker-indicator{opacity:.45;cursor:pointer}
.car-fila-plan:hover td{background:rgba(127,127,127,.07)}
.asg-col-quitar{border:0;background:none;color:#b42318;cursor:pointer;font-size: 12px;padding:0 4px}
.pw-vista-tres{margin:8px 0}
.tvn-logo i{width:26px;height:26px;border-radius:6px;background:var(--m);display:inline-block}
.tvn-marca{font-size: 12px;letter-spacing:.12em;text-transform:uppercase;color:#000}
.tvn-buscar{flex:1;min-width:160px;border:1px solid #d0d5dd;border-radius:6px;padding:7px 10px;color:#000}
.tvn-cta{border:1.5px solid var(--m);color:var(--text);border-radius:20px;padding:5px 12px;font-weight:700;font-size: 12px}
.tvn-web--giorgi .tvn-cta{color:#000;border-color:#1a1a1a}
.tvn-linea{height:2px;background:var(--m)}
.tvn-modelos{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:14px;padding:18px 20px}
.tvn-mcard{background:#fff;border:1px solid #e6e8ec;border-radius:12px;overflow:hidden;cursor:pointer;text-align:center;padding-bottom:12px;font:inherit;color:#000}
.tvn-mcard:hover{border-color:var(--m);box-shadow:0 2px 10px rgba(0,0,0,.06)}
.tvn-foto{height:120px;background:#f0f0f0;display:flex;align-items:center;justify-content:center;color:var(--text);font-size: 12px;margin-bottom:8px}
.tvn-foto img{width:100%;height:100%;object-fit:contain}
.tvn-mcard b{display:block;font-size: 15px}.tvn-mcard small{color:#000;font-size: 12px}
.tvn-detalle{padding:0}
.tvn-det-cab{display:flex;gap:12px;align-items:center;padding:14px 20px}
.tvn-det-cab h2{margin:0;font-size: 22px;color:#000}
.tvn-ficha{margin-left:auto;border:1.5px solid var(--m);color:var(--text);border-radius:6px;padding:5px 12px;font-size: 12px;font-weight:700;text-decoration:none}
.tvn-web--giorgi .tvn-ficha{color:#000;border-color:#1a1a1a}
.tvn-det-foto{height:240px;background:#f0f0f0;display:flex;align-items:center;justify-content:center;color:var(--text);margin:0 20px 12px;border-radius:10px}
.tvn-det-foto img{max-width:100%;max-height:100%;object-fit:contain}
.tvn-web-barra{background:#1a1a1a;color:#fff;font-size: 12px;letter-spacing:.14em;text-transform:uppercase;padding:7px 20px}
.tvn-item{display:grid;grid-template-columns:1fr 200px;gap:16px;padding:16px 20px;border-bottom:1px solid #eee}
.tvn-num{display:inline-block;border:1px solid #1a1a1a;padding:0 6px;font-size: 12px;margin-right:8px}
.tvn-item h3{margin:0 0 6px;font-size: 17px;border-bottom:1px solid #1a1a1a;padding-bottom:6px;color:#000}
.tvn-p{color:var(--text);font-weight:800;font-size: 17px;margin:4px 0}
.tvn-web--giorgi .tvn-p{color:#000}
.tvn-col{margin:4px 0}
.tvn-suma{font-size: 12px;color:#000;margin-top:4px}
.tvn-agregar{display:inline-block;margin-top:8px;border:1.5px solid var(--m);color:var(--text);border-radius:20px;padding:4px 12px;font-size: 12px;font-weight:700}
.tvn-web--giorgi .tvn-agregar{border-color:#1a1a1a;color:#000}
.tvn-item-foto{background:#f0f0f0;border-radius:6px;height:96px;display:flex;align-items:center;justify-content:center;color:var(--text);font-size: 12px}
.tvn-pie{padding:12px 20px;font-size: 12px;color:var(--text);border-top:1px solid #e0e0e0;display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px}
.tvn-mini{display:inline-flex;gap:8px;align-items:center}
.tvn-mini img{width:60px;height:38px;object-fit:contain;border:1px solid var(--border,#2a3345);border-radius:4px;background:#fff}
.tvn-subir{cursor:pointer}

/* ── Catálogo web de accesorios, estética Ginza (18/09/2026) ── */
.aweb{border:1px solid var(--border,#2a3345);border-radius:8px;overflow:hidden;background:#fff;color:#000;margin-top:10px;--m:#EB0A1E}
.aweb--giorgi{--m:#efdf00}.aweb--vesubio{--m:#0b4f96}.aweb--ginza{--m:#EB0A1E}
.aweb-top{display:flex;gap:14px;align-items:center;padding:12px 20px;border-bottom:1px solid #e0e0e0;flex-wrap:wrap}
.aweb-logo{font-weight:800;font-size: 16px;display:flex;gap:8px;align-items:center;color:#000}
.aweb-logo i{width:26px;height:26px;border-radius:6px;background:var(--m);display:inline-block}
.aweb-marca{font-size: 12px;letter-spacing:.12em;text-transform:uppercase;color:#000}
.aweb-buscar{flex:1;min-width:160px;border:1px solid #d0d5dd;border-radius:6px;padding:7px 10px;color:#000}
.aweb-cta{margin-left:auto;border:1.5px solid var(--m);color:var(--text);border-radius:20px;padding:5px 14px;font-weight:700;font-size: 12px;cursor:pointer;background:#fff}
.aweb--giorgi .aweb-cta{color:#000;border-color:#1a1a1a}
.aweb-linea{height:2px;background:var(--m)}
.aweb-titulo{padding:16px 20px 4px}.aweb-titulo h2{margin:0;font-size: 22px;color:#000}.aweb-titulo p{margin:2px 0 0;color:var(--text);font-size: 12px}
.aweb-modelos{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:14px;padding:16px 20px}
.aweb-mcard{background:#fff;border:1px solid #e6e8ec;border-radius:12px;overflow:hidden;cursor:pointer;text-align:center;padding-bottom:12px;font:inherit;color:#000}
.aweb-mcard:hover{border-color:var(--m);box-shadow:0 2px 10px rgba(0,0,0,.06)}
.aweb-mcard small{display:block;color:var(--text);font-size: 12px}
.aweb-mfoto{height:110px;background:#f0f0f0;display:flex;align-items:center;justify-content:center;color:var(--text);font-size: 12px;margin-bottom:8px;padding:0 8px;text-align:center}
.aweb-mfoto img{width:100%;height:100%;object-fit:contain}
.aweb-mcard b{display:block;font-size: 15px}
.aweb-det-cab{display:flex;gap:12px;align-items:center;padding:14px 20px}
.aweb-det-cab h2{margin:0;font-size: 20px;color:#000}
.aweb-barra{background:#1a1a1a;color:#fff;font-size: 12px;letter-spacing:.12em;text-transform:uppercase;padding:7px 20px}
.aweb-vacio{padding:24px 20px;color:var(--text)}
.aweb-item{padding:16px 20px;border-bottom:1px solid #eee}
.aweb-num-tit{display:flex;gap:10px;align-items:center;margin-bottom:8px}
.aweb-num{display:inline-flex;width:22px;height:22px;align-items:center;justify-content:center;border:1px solid #1a1a1a;font-size: 12px;font-weight:700}
.aweb-item h3{margin:0;font-size: 17px;color:#000}
.aweb-cuerpo{display:grid;grid-template-columns:1fr 180px;gap:16px}
.aweb-datos p{margin:2px 0;font-size: 12.5px;color:#000}
.aweb-desc{color:#000}
.aweb-precio{color:var(--text);font-weight:800;font-size: 16px;margin:8px 0 4px}
.aweb--giorgi .aweb-precio{color:#000}
.aweb-agregar{display:inline-flex;align-items:center;gap:.35rem;margin-top:.6rem;padding:.35rem .8rem;background:transparent;color:var(--text);border:1.5px solid var(--m);border-radius:20px;font-weight:700;font-size: 12px;cursor:pointer}
.aweb--giorgi .aweb-agregar{color:#000;border-color:#1a1a1a}
.aweb-agregar:disabled{opacity:.4;cursor:default}
.aweb-sinstock{margin-top:8px;font-size: 12px;color:#b3261e;font-weight:600}
.aweb-ops{margin-top:6px}
.aweb-ops-tit{font-size: 12px;letter-spacing:.08em;text-transform:uppercase;color:var(--text);margin-bottom:4px}
.aweb-op-row{display:flex;gap:8px;align-items:center;padding:5px 0;border-bottom:1px solid #f0f0f0;font-size: 12.5px}
.aweb-op-row.aweb-op--nd{opacity: 1}
.aweb-op-nom{flex:1}.aweb-op-precio{font-weight:700;color:var(--text);white-space:nowrap}
.aweb--giorgi .aweb-op-precio{color:#000}
.aweb-fotos .aweb-foto-wrap{background:#f0f0f0;border-radius:6px;min-height:120px;display:flex;align-items:center;justify-content:center;color:var(--text);font-size: 12px}
.aweb-fotos img{width:100%;height:100%;object-fit:contain}
.aweb-pie{padding:12px 20px;font-size: 12px;color:var(--text);border-top:1px solid #e0e0e0;display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px}
.aweb-overlay{position:fixed;inset:0;background:rgba(0,0,0,.4);display:flex;align-items:flex-start;justify-content:center;z-index:60;padding:40px 12px}
.aweb-carrito{background:#fff;color:#000;border-radius:10px;max-width:520px;width:100%;padding:14px 16px;max-height:calc(80vh / var(--tcg-z, 1));overflow:auto}
.aweb-carrito-cab{display:flex;align-items:center;gap:10px;margin-bottom:8px}.aweb-carrito-cab b{font-size: 15px}
.aweb-carrito .po-sub{color:var(--text)}
.aweb-total{text-align:right;font-size: 15px;margin:8px 0;color:#000}
.aweb-carrito-pie{display:flex;gap:8px;justify-content:flex-end;flex-wrap:wrap}

/* editor de «qué suma cada versión» (18/09/2026) */
.tvn-suma-fila td{background:var(--panel-2,#1c2432)}
.tvn-suma-editor{padding:6px 4px}
.tvn-suma-row{display:grid;grid-template-columns:280px 1fr;gap:10px;align-items:start;padding:6px 0;border-top:1px solid var(--border,#2a3345)}
.tvn-suma-nom{font-weight:600;font-size: 12px}
.tvn-suma-in{width:100%;min-height:46px;background:var(--panel-3,#0d121a);color:var(--text);border:1px solid var(--border-fuerte,#3a4559);border-radius:4px;padding:5px 7px;font:inherit;font-size: 12px;resize:vertical}
.po-grupo td{background:var(--panel-2,#1c2432);font-weight:700;font-size: 13px;box-shadow:inset 3px 0 0 var(--c)}
.po-sub{font-size: 12px;opacity: 1}
.po-col{display:inline-block;padding:1px 7px;border:1px solid var(--border-fuerte,#3a4559);border-radius:999px;font-size: 12px;margin:1px 2px 1px 0;white-space:nowrap}
.po-col--venir{border-style:dashed}
.po-ficha{color:var(--text);text-decoration:none;font-size: 12px;white-space:nowrap}
.po-vacio{padding:24px}
.po-op{border:1px solid var(--border,#2a3345);border-radius:6px;margin:10px 0;overflow:hidden}
.po-op--pausada{opacity: 1}
.po-op-cab{display:flex;gap:10px;align-items:center;flex-wrap:wrap;padding:8px 11px;background:var(--panel-2,#1c2432);box-shadow:inset 4px 0 0 var(--c)}
.po-sep{flex:1}
.po-vence{font-size: 12px;padding:1px 7px;border-radius:999px;border:1px solid var(--accent-amber,#f2c200);color:var(--text);white-space:nowrap}
.po-interruptor{display:inline-flex;gap:6px;align-items:center;cursor:pointer;font-size: 12px}
.po-obs{padding:7px 11px;border-top:1px solid var(--border,#2a3345);font-size: 12px}
.po-masivo{display:flex;gap:8px;align-items:center;flex-wrap:wrap;background:var(--panel-2,#1c2432);border:1px solid var(--border,#2a3345);border-radius:6px;padding:8px 10px;margin:8px 0}
.po-masivo select,.po-ajuste select,.po-ajuste-in,.po-campo input,.po-campo textarea,.po-texto{background:var(--panel-3,#0d121a);color:var(--text);border:1px solid var(--border-fuerte,#3a4559);border-radius:4px;padding:4px 6px;font:inherit}
.po-ajuste{display:inline-flex;gap:3px}
.po-ajuste-in{width:84px;text-align:right}
.po-tabla tr.on td{background:rgba(79,142,247,.1)}
.po-campo{display:block;margin-top:10px;font-weight:600;font-size: 12px}
.po-campo textarea{display:block;width:100%;min-height:60px;margin-top:4px;font-weight:400;resize:vertical}
.po-campo--corto{display:inline-flex;gap:8px;align-items:center;margin-right:16px}
.po-campo--corto input{font-weight:400;min-width:200px}
.po-pieop{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:10px}
.po-chipcheck{display:inline-flex;gap:6px;align-items:center}
.po-subir{border:1px dashed var(--border-fuerte,#3a4559);border-radius:8px;padding:14px;margin:8px 0}
.po-subir input[type=file]{display:block;margin:8px 0;font-size: 13px}
.po-texto{display:block;width:100%;min-height:110px;font-family:ui-monospace,Menlo,Consolas,monospace;font-size: 12px}
.tcg-claro .po-tabla tr.on td{background:rgba(37,99,235,.08)}
/* MODO CLARO — campos de formulario (19/09/2026). En oscuro los inputs
   tienen fondo casi negro; sobre una tarjeta blanca quedaban oscuros y
   feos. En claro: fondo blanco, borde gris, letra negra, y el foco con
   la marca. Cubre input, select y textarea en todo el proyecto. */
.tcg-claro input:not([type=checkbox]):not([type=radio]),
.tcg-claro select, .tcg-claro textarea {
  background: #fff !important; color: #000 !important;
  border: 1px solid #cfd6e0 !important;
}
.tcg-claro input::placeholder, .tcg-claro textarea::placeholder { color: var(--text) !important; }
.tcg-claro input:focus, .tcg-claro select:focus, .tcg-claro textarea:focus {
  border-color: var(--vnv-marca, var(--accent-blue)) !important;
  outline: none !important;
}
/* Celdas de tabla: líneas suaves pero visibles, letra negra. */
.tcg-claro td, .tcg-claro .sc-table td, .tcg-claro .cjs-tabla td {
  color: #000; border-color: #e4e8ee !important;
}
.tcg-claro tr:hover > td { background: #f2f6fb !important; }
/* Modales y tarjetas: fondo blanco de verdad y borde marcado. */
.tcg-claro .sc-panel, .tcg-claro .cjs-caja, .tcg-claro .lead-kpi,
.tcg-claro .acc-pie-bloque, .tcg-claro .acc-cat-estado, .tcg-claro .car-rank {
  background: #fff !important; border-color: #d6dbe4 !important;
}

/* ── La gracia de la mora (15/09/2026) ── */
.mc-gracia{font-size: 12px;line-height:1.5;margin:-6px 0 12px;padding:7px 10px;border-left:3px solid var(--accent-amber,#f2c200);background:var(--lavado,rgba(255,255,255,.03))}
.mc-gcfg{flex:1 1 100%;border:1px solid var(--border,#2a3345);border-radius:6px;padding:10px 12px;margin:0;font-size: 12px}
.mc-gcfg legend{font-weight:700;padding:0 6px}
.mc-gcfg-ops{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:8px}
.mc-gcfg-op{display:flex;gap:8px;align-items:flex-start;padding:8px 10px;border:1px solid var(--border,#2a3345);border-radius:5px;cursor:pointer;line-height:1.4}
.mc-gcfg-op.on{border-color:var(--accent-amber,#f2c200)}
.mc-gcfg-op input{margin-top:3px}
.mc-gcfg-dias{display:inline-flex;align-items:center;gap:8px;margin-top:10px}
.mc-gcfg-dias input{width:56px;background:var(--panel-3,#0d121a);color:var(--text);border:1px solid var(--border-fuerte,#3a4559);border-radius:4px;padding:5px 7px;font:inherit;text-align:center}
.mc-gcfg-ej{margin-top:10px;font-size: 12px;opacity: 1}

/* ── Compras y ventas en el Análisis de Stock (15/09/2026) ──
   Indicadores neutros, todos iguales: sin el color de la casa en el número
   ni verde o rojo en compras − ventas (Ramiro). */
.asp-ind-val{color:var(--asp-texto)}
.asp-fila-cv td{font-variant-numeric:tabular-nums}
.asp-graf-cv{border-top:1px solid var(--asp-linea)}
.asp-graf-ley{display:flex;gap:14px;font-size: 12px;color:var(--asp-texto);padding:0 0 4px 46px}
.asp-graf-ley i{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:5px;vertical-align:-1px}
.asp-cv-c{fill:#7d8ea8;background:#7d8ea8}
.asp-cv-v{fill:#c9d1dc;background:#c9d1dc}
.tcg-claro .asp-cv-c{fill:#4b5a70;background:#4b5a70}
.tcg-claro .asp-cv-v{fill:#aeb8c6;background:#aeb8c6}
.asp-nota-cv{margin-top:10px;font-size: 12px;line-height:1.5;color:var(--asp-texto);border-left:3px solid var(--asp-linea);padding:6px 10px}
.asp-nota-cv b{color:var(--asp-texto)}


/* ── Encabezado de la Tienda online VO (24/09/2026, Ramiro) ──
   Al sacarle la bajada, el título quedaba pegado arriba y desalineado del
   logo, porque la cabecera alinea sus partes por el borde de arriba. Con una
   sola línea de texto lo que corresponde es centrarlas. Va sólo en este
   modal: las cabeceras que sí tienen bajada se siguen alineando arriba. */
.tnd-modal .per-cab{align-items:center}


/* ── Calidad · Contacto de clientes: las dos franjas (24/09/2026, Ramiro) ──
   La pantalla completa no es un «per-modal», así que la regla general que
   pinta cabecera y pie no le llegaba: la cabecera quedaba de un azul que no
   es de ninguna casa y el pie directamente no se veía. Con «cc-casa» valen
   las dos formas, la de modal y la de pantalla entera. */
.cc-casa > .per-cab, .cc-casa > .per-pie{
  background: var(--vnv-marca, var(--accent-amber, #f2c200));
  color: var(--vnv-marca-txt, #131824);
  border-bottom: none;
}
.cc-casa > .per-pie{ border-top: 2px solid var(--vnv-marca-luz, var(--vnv-marca, #f2c200)); }
.cc-casa > .per-cab .per-titulo, .cc-casa > .per-cab .per-sub,
.cc-casa > .per-pie, .cc-casa > .per-pie b, .cc-casa > .per-pie span{ color: inherit; }
.cc-casa > .per-cab .per-sub{ opacity: 1; }
.cc-casa > .per-pie .lu-btn{
  color: var(--vnv-marca-txt, #131824);
  border-color: color-mix(in srgb, var(--vnv-marca-txt, #131824) 45%, transparent);
}


/* ── Propuesta Comercial (24/09/2026, Ramiro) ──
   Tres cosas que marcó con captura:
   · EL PIE. Existía, pero embebida en el armazón la pantalla no es un
     «per-modal» y la regla que pinta las dos franjas no la alcanzaba: el pie
     se perdía contra el fondo, igual que en Calidad.
   · LA LETRA DE LA TABLA, un punto más grande: con importes de siete cifras
     11,5 px se lee con esfuerzo.
   · LOS BOTONES DEL FINAL, más grandes: no se veían. */
.pc-embebido > .per-pie{
  background: var(--vnv-marca, var(--accent-amber, #f2c200));
  color: var(--vnv-marca-txt, #131824);
  border-top: 2px solid var(--vnv-marca-luz, var(--vnv-marca, #f2c200));
}
.pc-embebido > .per-pie small,
.pc-embebido > .per-pie span,
.pc-embebido > .per-pie b{ color: inherit; }
.pc-embebido > .per-pie .pc-pie-nota{ opacity: 1; }
.pc-embebido > .per-pie .lu-btn{
  color: var(--vnv-marca-txt, #131824);
  border-color: color-mix(in srgb, var(--vnv-marca-txt, #131824) 45%, transparent);
}
.pc-tabla{ font-size: 12.5px; }
.per-modal .pc-tabla thead th,
.pc-embebido .pc-tabla thead th{ font-size: 13px; }
.pc-modal > .per-pie .lu-btn,
.pc-embebido > .per-pie .lu-btn,
.pc-modal .tcg-env-acc .lu-btn,
.pc-embebido .tcg-env-acc .lu-btn{
  font-size: 13.5px; padding: 8px 16px; min-height: 36px;
}


/* ── Buscador de unidades en Ventas (24/09/2026, Ramiro) ──
   Tres cosas, todas con captura:
   · LA SEPARACIÓN entre «Para vender» y «Ya vendidas» era una raya de 1 px de
     un gris fijo: en oscuro apenas se veía y en claro no se veía nada. Ahora
     son 2 px del color de la casa, con aire arriba y abajo, así se entiende
     de un vistazo que son dos listas distintas y no una sola corrida.
   · LA LETRA, dos puntos más grande. Con el interno, el modelo, el color y
     el cliente en el mismo renglón, 12,5 px obliga a acercarse.
   · EL MODO CLARO. Las reglas de la lista estaban escritas sólo para
     «mo-claro», que es el modificador de los modales que flotan. La pantalla
     de ventas usa el tema general «tcg-claro», así que no la alcanzaban y el
     desplegable salía en blanco sobre blanco. Van las dos.
   El dorado del rótulo no va en claro: sobre el desplegable blanco iría
   ilegible en Giorgi. En claro el rótulo va en tinta oscura. */
.bap-item{ font-size: 14.5px; padding: 9px 12px; }
.bap-item strong{ min-width: 92px; }
/* Y los rótulos de la derecha —dónde coincidió, el canal, el estado— que
   habían quedado en 10,5 px: con el renglón en 14,5 se veían de juguete y
   son justo los que dicen si la unidad está en stock o ya vendida.
   (24/09/2026, Ramiro) */
.bap-donde, .bap-item .vnv-resultado-est{ font-size: 12px; letter-spacing: .2px; }
.bap-vacio{ font-size: 13.5px; }
.bap-input{ font-size: 14px; }
/* El rótulo, del color de la casa y no del dorado fijo: en Vesubio y Ginza
   salía amarillo Renault. En oscuro va el color; en claro, tinta oscura. */
.bap-rotulo{ font-size: 12px; padding: 8px 11px 4px; color: var(--text); }
.bap-grupo--apagado{
  border-top: 2px solid var(--vnv-marca, var(--accent-amber, #f2c200));
  margin-top: 10px; padding-top: 2px;
}
/* En claro el desplegable es BLANCO, y sobre blanco el amarillo de Giorgi no
   se ve: la raya que separa las dos listas desaparecía justo en la casa donde
   más hace falta. En claro va gris pizarra, que se ve con las tres. En oscuro
   sigue el color de la casa. (24/09/2026, Ramiro) */
.tcg-claro .bap-grupo--apagado, .mo-claro .bap-grupo--apagado{ border-top-color: #64748b; }
.bap-grupo--apagado .bap-item{ opacity: 1; }

.tcg-claro .bap-lista{ background: #ffffff; border-color: #c3ccd8; box-shadow: 0 10px 26px rgba(15,23,42,.18); }
.tcg-claro .bap-item{ border-bottom-color: #e6e9ed; color: #000; }
.tcg-claro .bap-item strong{ color: #000; }
.tcg-claro .bap-item:hover, .tcg-claro .bap-item--foco{ background: #eef2f8; }
.tcg-claro .bap-donde, .tcg-claro .bap-vacio{ color: #000; border-color: #c3ccd8; }
.tcg-claro .bap-rotulo{ color: #000; }
.tcg-claro .bap-grupo--apagado .bap-rotulo{ color: #000; }
.tcg-claro .bap-input{ background: #ffffff; border-color: #c3ccd8; color: #000; }
.mo-claro .bap-rotulo{ color: #000; }
.mo-claro .bap-item strong{ color: #000; }


/* ── Comunicación: mapeo, bot y registro (24/09/2026, Ramiro · entrega ka) ──
   Todo con el mismo formato que el resto de la pantalla: nada de cajitas
   distintas para cada cosa. */
.comu-mapeo{display:flex;flex-direction:column;gap:6px;margin-top:6px}
.comu-hueco{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.comu-hueco>b{min-width:52px;font-variant-numeric:tabular-nums;
  color:var(--vnv-marca,var(--accent-amber,#f2c200))}
.comu-hueco select{flex:0 1 220px;padding:5px 8px;border-radius:6px;font:inherit;font-size: 13px;
  background:var(--panel-2,#1b2233);color:var(--text,#e8ecf3);border:1px solid var(--border,#252d3f)}
.tcg-claro .comu-hueco select{background:#fff;color:#000;border-color:#c3ccd8}
.tcg-claro .comu-hueco>b{color:#000}
.comu-bot-in{width:100%;padding:5px 8px;border-radius:6px;font:inherit;font-size: 12.5px;
  background:var(--panel-2,#1b2233);color:var(--text,#e8ecf3);border:1px solid var(--border,#252d3f)}
.tcg-claro .comu-bot-in{background:#fff;color:#000;border-color:#c3ccd8}
.comu-bot table,.comu-reg table{margin-top:6px}
.comu-reg .pvx-fila{flex-wrap:wrap;gap:8px;margin-bottom:6px}
.comu-bajas{display:flex;flex-wrap:wrap;gap:8px;margin-top:4px}
.comu-baja{display:inline-flex;align-items:center;gap:8px;padding:4px 9px;border-radius:8px;
  border:1px solid var(--border,#252d3f);background:var(--panel-2,#1b2233)}
.tcg-claro .comu-baja{background:#f5f7fb;border-color:#c3ccd8}
.comu-baja small{color:var(--text)}


/* ── La cabecera no puede comerse el «Cerrar» (24/09/2026, Ramiro · kc) ──
   En Entrega de unidades la cabecera lleva el título, el selector de lado
   (0km / Planes / Usados / Programación), el «Origen» y el Cerrar. Todo eso
   en una fila que no doblaba: el Cerrar se salía del modal y quedaba
   cortado contra el borde. Ahora la fila dobla cuando no entra, y los
   botones no se achican: doblar es feo un segundo, quedar cortado es un
   botón que no se puede apretar. Vale para todas las cabeceras, porque el
   problema es de todas: sólo se nota en las que tienen mucho arriba. */
.per-modal > .per-cab{ flex-wrap: wrap; }
.per-cab .mo-cab-btns{ flex-wrap: wrap; justify-content: flex-end; }
.per-cab .mo-cab-btns > *{ flex: 0 0 auto; }

/* La nota del pie, con la tinta de la franja. Quedaba oscura sobre el azul
   de Vesubio y no se leía; se distingue por opacidad, no por otro color,
   que es el criterio del resto de las franjas. */
.per-modal .per-pie .com-ayuda{ color: var(--vnv-marca-txt, #ffffff) !important; opacity: 1; }


/* ── El aviso de «todavía no hay contactos» (24/09/2026, Ramiro · kd) ──
   Con la pantalla recién abierta el panel de indicadores no tiene nada que
   mostrar, y su aviso se estiraba a lo alto en una columna angosta: ocupaba
   media pantalla para decir una línea. Va en un renglón, centrado. */
.cc-ind-arriba .cvn-vacio{
  grid-column: 1 / -1; max-width: none; text-align: center;
  padding: 10px 14px; margin: 0;
}
.cc-ind-arriba:empty{ display: none; }


/* ── Informes: encabezado, envoltura y pie (24/09/2026, Ramiro · kh) ──
   La caja los contiene, que es lo que faltaba. Y las secciones pasan a tener
   forma de carpeta, como en Gestoría y Accesorios: antes eran píldoras
   redondeadas, igual que las variantes del informe, y mirando la pantalla no
   había forma de saber cuál era cuál. Quedan tres formas distintas para tres
   cosas distintas: carpeta = sección, botón cuadrado = informe, píldora =
   variante. */
.inf-root.inf-caja{
  background: var(--panel, #1b2233);
  border: 1px solid var(--border, #252d3f);
  border-radius: 12px; overflow: hidden;
  /* ANCHO FIJO (25/09/2026, Ramiro: «el tamaño no es igual, debe ser de
     tamaño fijo»). Antes cada informe la estiraba según sus columnas y
     pasar de uno a otro hacía saltar la pantalla. Ahora es siempre la misma
     caja: las tablas anchas se desplazan adentro, que es lo que corresponde. */
  width: 1400px; max-width: calc(96vw / var(--tcg-z, 1)); margin: 0 auto;
}
.inf-root.inf-caja > .per-cab, .inf-root.inf-caja > .per-pie{
  background: var(--vnv-marca, var(--accent-amber, #f2c200));
  color: var(--vnv-marca-txt, var(--casa-activa-tinta, #1a1207));
  border: 0;
}
.inf-root.inf-caja > .per-cab{ align-items: center; }
.inf-root.inf-caja .inf-selector{ background: var(--panel-2, #151b28); padding: 10px 14px 0; }
.inf-root.inf-caja .inf-sel-fila{ display: flex; flex-wrap: wrap; gap: 3px; }
.inf-root.inf-caja .inf-sel-fila:not(.inf-sel-fila--inf){ border-bottom: 2px solid var(--vnv-marca, var(--accent-amber, #f2c200)); }
.inf-root.inf-caja .inf-sel-sec{
  background: var(--panel, #1b2233);
  border: 1px solid var(--border, #252d3f); border-bottom: none;
  color: var(--text);
  padding: 7px 14px; border-radius: 9px 9px 0 0; cursor: pointer;
  font: inherit; font-size: 12.5px; white-space: nowrap;
}
.inf-root.inf-caja .inf-sel-sec.es-activa{
  background: var(--vnv-marca, var(--accent-amber, #f2c200));
  color: var(--vnv-marca-txt, var(--casa-activa-tinta, #1a1207));
  border-color: var(--vnv-marca, var(--accent-amber, #f2c200)); font-weight: 600;
}
.inf-root.inf-caja .inf-sel-fila--inf{ padding: 9px 0 2px; }
.inf-root.inf-caja .inf-sel-inf{
  background: var(--panel-2, #151b28); border: 1px solid var(--border, #252d3f);
  border-radius: 7px; color: var(--text, #e8ecf3);
  font: inherit; font-size: 12px; padding: 5px 11px; cursor: pointer; white-space: nowrap;
}
.inf-root.inf-caja .inf-sel-inf.es-activo{
  border-color: var(--vnv-marca, var(--accent-amber, #f2c200)); font-weight: 600;
}
.inf-root.inf-caja .inf-pie{ display: flex; justify-content: space-between; align-items: center;
  gap: 10px; flex-wrap: wrap; font-size: 12px; font-weight: 600; }


/* ── Fotos del mes del Centro estadístico (24/09/2026, Ramiro · ki) ── */
.ces-fotos{ margin: 10px 0 0; }
.ces-fotos .tabla-env{ overflow-x: auto; }
.ces-fotos table{ min-width: 460px; }
.ces-fotos td:first-child{ white-space: nowrap; }
.ces-dif{ font-size: 12px; font-weight: 700; margin-left: 4px; }
.ces-dif--sube{ color: var(--text); }
.ces-dif--baja{ color: #d05a4f; }
.ces-fotos-pie{ display: flex; gap: 7px; flex-wrap: wrap; margin-top: 8px; }


/* El casillero del día de la foto: chico, al lado del botón. (24/09/2026) */
.ces-dia{ display: inline-flex; align-items: center; gap: 6px; font-size: 12px;
  color: var(--text); }
.ces-dia input{ width: 58px; padding: 4px 7px; border-radius: 6px; font: inherit; font-size: 13px;
  background: var(--panel-2, #151b28); color: var(--text, #e8ecf3);
  border: 1px solid var(--border, #252d3f); text-align: center; }
.tcg-claro .ces-dia input{ background: #fff; color: #000; border-color: #c3ccd8; }


/* Resultado de la tanda automática (24/09/2026, Ramiro · kk) */
.crm-tanda-res{ margin-top: 12px; }
.crm-res-ok{ color: var(--text); font-weight: 600; white-space: nowrap; }
.crm-res-mal{ color: #d05a4f; font-weight: 600; }


/* ══════════════════════════════════════════════════════════════════════════
   ACA ESTABA LA REGLA ESTETICA GLOBAL DE «kn», Y SE FUE (25/09/2026, Ramiro).

   Cambiaba de una sola vez, para TODO el sistema, el fondo detrás de los
   modales, el ancho de los modales anchos, la tinta del modo claro y el
   fondo de los títulos. La idea era buena —unificar en un solo lugar lo que
   cada pantalla resolvía por su cuenta— pero se aplicó sin ver ninguna
   pantalla real, y el resultado fue peor que el problema: modales flotando
   en un vacío, tamaños que no cierran y pantallas que antes se veían bien.

   Se saca entera. La unificación se hace igual, pero pantalla por pantalla y
   mirando cada una, no de un saque desde la hoja de estilos.
   ══════════════════════════════════════════════════════════════════════════ */



/* ── El tirador para ensanchar una columna (25/09/2026, Ramiro · kr) ──
   Se ve siempre, no sólo al pasar el mouse: un tirador invisible es un
   tirador que nadie encuentra. Discreto, pero está. */
th { position: relative; }
.col-tirador{
  position: absolute; top: 0; right: -4px; width: 9px; height: 100%;
  cursor: col-resize; z-index: 3; touch-action: none;
}
.col-tirador::after{
  content: ""; position: absolute; top: 22%; left: 3px; width: 2px; height: 56%;
  background: currentColor; opacity: 1; border-radius: 1px;
}
.col-tirador:hover::after{ opacity: 1; width: 3px; left: 2.5px; }


/* El aviso cuando una foto de modelo no se pudo guardar (25/09/2026) */
.acmf-mal{ color: #d05a4f; font-weight: 600; }

.acmf-bien{ color: var(--text); font-weight: 600; }


/* La ficha del presupuesto, dibujada adentro de su carpeta (25/09/2026) */
.pre-ficha-emb{ display: block; }
.pre-ficha-emb > *:first-child{ margin-top: 0; }


/* La cuenta al lado del nombre de la carpeta (25/09/2026, Ramiro) */
.gu-carpeta-n{
  display: inline-block; margin-left: 5px; padding: 0 6px; border-radius: 20px;
  font-size: 13px; font-weight: 700; background: rgba(0,0,0,.18);
}
.gu-carpeta:not(.gu-carpeta--on) .gu-carpeta-n{
  background: var(--panel-2, #151b28); border: 1px solid var(--border, #252d3f);
}


/* ══ TABLA TIPO PLANILLA, EN TODO EL PROYECTO (25/09/2026, Ramiro · lb) ══
   Arrastrar el título para mover la columna, el borde para ensancharla, y un
   filtro debajo de cada una. Y la barra de botones en UN renglón, todos del
   mismo alto, que es lo que hace que una pantalla se vea formal y no armada
   de a pedazos. */
.bt-barra{
  display: flex; align-items: center; gap: 7px; flex-wrap: wrap;
  padding: 8px 0 10px;
}
/* Todos los botones de la barra, del mismo alto y con el mismo aire. Antes
   cada uno traía el suyo y el renglón quedaba desparejo. */
.bt-barra .lu-btn, .bt-barra .lu-btn--sm, .bt-barra select, .bt-barra button{
  min-height: 30px; padding: 0 11px; font-size: 13px; line-height: 1;
  display: inline-flex; align-items: center; gap: 5px; white-space: nowrap;
}
.bt-barra .bt-buscador{ min-height: 30px; }
.bt-barra .lu-btn { border-color: rgba(127,127,127,.45); }
/* rz: en modo claro los botones de la barra con su caja, también en las pantallas sin «mo-claro». */
.tcg-claro .bt-barra .lu-btn { background: #f2f4f7; color: #000; border-color: #cbd2d9; }
/* La nota y lo que venga de la pantalla, contra la derecha: los botones
   quedan todos juntos a la izquierda y no salpicados. */
.bt-barra .bt-nota{ margin-left: auto; }

/* El título se puede agarrar y llevar. */
.vn-tabla th[draggable="true"], .cjs-tabla th[draggable="true"]{ cursor: grab; }
.vn-tabla th[draggable="true"]:active, .cjs-tabla th[draggable="true"]:active{ cursor: grabbing; }
/* Dónde va a caer: una raya del color de la casa en el borde de llegada. */
.bt-th--destino{ box-shadow: inset 3px 0 0 0 var(--vnv-marca, var(--accent-amber, #f2c200)); }

/* El filtro de cada columna, debajo del título. */
.bt-th-filtro{
  display: block; width: 100%; margin-top: 4px; padding: 2px 6px;
  font: inherit; font-size: 12px; font-weight: 400; text-transform: none;
  letter-spacing: 0; border-radius: 5px;
  background: var(--panel, #1b2233); color: var(--text, #ecf0f4);
  border: 1px solid var(--border, #252d3f);
}
.tcg-claro .bt-th-filtro, .mo-claro .bt-th-filtro{
  background: #ffffff; color: #000; border-color: #c3ccd8;
}
.bt-th-filtro::placeholder{ opacity: .55; font-style: italic; }


/* ══ UNA SOLA FORMA DE SOLAPA EN TODO EL PROYECTO (25/09/2026, Ramiro · ld) ══
   «Donde corresponde con solapa va igual a Gestoría». Había seis familias de
   solapas conviviendo —Centro estadístico, Contacto de clientes, PostVenta,
   Caja por sector, Asignación y las carpetas de Gestoría—, cada una con su
   forma, su tamaño de letra y su manera de marcar la elegida. Seis formas
   para la misma idea: cambiar de vista sin salir de la pantalla.
   Acá se unifican todas a la carpeta de Gestoría. Es sólo aspecto: ninguna
   pantalla cambia de comportamiento, cada una sigue con su propio estado y
   sus propias solapas. Lo que se empareja es cómo se ven.
   Va al final a propósito: tiene que ganarle a la regla vieja de cada
   familia, que quedó donde estaba por si alguna vez hay que volver atrás. */
.ces-solapas, .cc-solapas, .pv-solapas, .cjs-solapas, .asig-solapas {
  display: flex; gap: 3px; flex-wrap: wrap;
  border-bottom: 2px solid var(--vnv-marca, var(--accent-amber, #f2c200));
  margin-bottom: 14px; padding: 0;
}
.ces-solapas .ces-sol, .cc-solapas .cc-sol, .pv-solapas .pv-sol,
.cjs-solapas .cjs-sol, .asig-sol {
  background: var(--panel, #1b2233);
  border: 1px solid var(--border, #252d3f); border-bottom: none;
  color: var(--text);
  padding: 8px 14px; border-radius: 9px 9px 0 0; cursor: pointer;
  font-size: 12.5px; font-family: inherit; font-weight: 400;
  display: flex; align-items: center; gap: 7px;
  white-space: nowrap; flex: 0 0 auto; box-shadow: none;
}
/* La elegida: el color de la casa, como en Gestoría. Cada familia marca la
   suya con una clase distinta —«es-on», «es-activa», «--on»—, así que van
   las tres. */
.ces-solapas .ces-sol.es-on, .ces-solapas .ces-sol.es-activa,
.cc-solapas .cc-sol.es-on, .cc-solapas .cc-sol.es-activa,
.pv-solapas .pv-sol.es-on, .pv-solapas .pv-sol.es-activa,
.cjs-solapas .cjs-sol.es-on, .cjs-solapas .cjs-sol.es-activa,
.asig-sol.es-on, .asig-sol.es-activa {
  background: var(--vnv-marca, var(--accent-amber, #f2c200));
  color: var(--vnv-marca-txt, var(--casa-activa-tinta, #1a1207));
  border-color: var(--vnv-marca, var(--accent-amber, #f2c200));
  font-weight: 600;
}
/* LA BAJADA DE CADA SOLAPA SE VA (25/09/2026, Ramiro). En Accesorios las
   cinco solapas traían su explicación al lado del título —«a quién contactar
   y qué se colocó»— y la fila no entraba: se partía en dos renglones y las de
   abajo quedaban flotando, que es justo lo que arruina la forma de carpeta.
   El CRM tiene siete solapas y entra en una sola línea porque son sólo los
   nombres. Se copia eso.
   La explicación no se pierde: queda en el título emergente, al pasar el
   mouse por encima. */
.ces-solapas .ces-sol small, .cc-solapas .cc-sol small,
.pv-solapas .pv-sol small, .asig-sol small,
.gu-carpetas .gu-carpeta small { display: none; }

/* Y la fila nunca se parte: si no entra, se desliza al costado. En dos
   renglones la de arriba queda flotando y se pierde el efecto de carpeta,
   que es lo que hace entendible esta forma de navegar. */
.ces-solapas, .cc-solapas, .pv-solapas, .cjs-solapas, .asig-solapas {
  flex-wrap: nowrap; overflow-x: auto; scrollbar-width: thin;
}


/* ══ MODO CLARO: LO QUE VA SOBRE LA BANDA DE LA CASA (25/09/2026 · le) ══
   La auditoría los midió: en «Unidades con la venta ya cargada» los botones
   «Consultar ventas», «Por cliente», «Por agente» y «Usados sin ingresar»
   tenían contraste 1,1 en modo claro. Uno es el mínimo posible: letra del
   mismo color que su fondo, invisible del todo.
   La causa: el botón trae fondo claro de la hoja general, y encima la regla
   de la banda le pone la tinta de la banda —blanca en Vesubio y Ginza—.
   Blanco sobre blanco. Se le da al botón un fondo propio, translúcido, que
   funciona con las tres casas sin escribir el color de ninguna. */
.tcg-claro .per-cab .lu-btn, .mo-claro > .per-cab .lu-btn,
.tcg-claro .per-cab .pvx-btn, .mo-claro > .per-cab .pvx-btn,
.tcg-claro .com-cab .lu-btn, .tcg-claro .vnv-cab .lu-btn {
  background: rgba(0,0,0,.16);
  border-color: rgba(0,0,0,.3);
  color: var(--vnv-marca-txt, #ffffff) !important;
}
.tcg-claro .per-cab .lu-btn:hover, .mo-claro > .per-cab .lu-btn:hover {
  background: rgba(0,0,0,.26);
}
/* El elegido, al revés: fondo claro y la tinta de la banda, para que se note
   cuál está puesto sin depender del color de la casa. */
.tcg-claro .per-cab .lu-btn.es-on, .tcg-claro .per-cab .lu-btn--accion,
.mo-claro > .per-cab .lu-btn.es-on, .mo-claro > .per-cab .lu-btn--accion {
  background: rgba(255,255,255,.92);
  color: var(--text);
  border-color: rgba(255,255,255,.92); font-weight: 600;
}

/* ══ MODO CLARO: LOS ENCABEZADOS DE TABLA ══
   Medidos en «Armar lote para reventa»: «N°», «Dominio», «Marca», «Modelo»
   y «Versión» daban 1,5. Es el amarillo de la casa sobre un fondo casi
   blanco. Se les da un fondo teñido y tinta oscura: se leen, y la barra de
   títulos se distingue del cuerpo de la tabla, que es lo que le faltaba al
   modo claro para no ser una hoja en blanco. */
.tcg-claro .vn-tabla thead th, .tcg-claro .cjs-tabla thead th,
.tcg-claro .lote-tabla thead th, .mo-claro .vn-tabla thead th {
  background: color-mix(in srgb, var(--vnv-marca, #0b4f96) 14%, #ffffff);
  color: #000;
  border-bottom: 2px solid var(--vnv-marca, #0b4f96);
}


/* ══ LO QUE ENCONTRO EL MOTOR EN SU PRIMERA CORRIDA (25/09/2026 · le) ══
   1 · Los botones de la banda y del pie no median lo mismo: 31 px unos y
       29 px otros. Dos píxeles no se ven de a uno, pero cuatro botones al
       lado con dos alturas distintas es lo que hace que una barra se vea
       armada de a pedazos. Misma regla que ya tiene la barra de la tabla.
   2 · La nota de la barra —«8 renglones», «Próximo número: P-0000004»—
       tenía contraste 1,2 en modo oscuro. Uno es invisible del todo: era
       texto gris oscuro sobre fondo oscuro. */
.mo-cab-btns, .per-pie-acciones, .cab-btns {
  display: flex; align-items: center; gap: 7px; flex-wrap: wrap;
}
.mo-cab-btns > .lu-btn, .mo-cab-btns > button,
.per-pie-acciones > .lu-btn, .per-pie-acciones > button,
.cab-btns > .lu-btn, .cab-btns > button {
  min-height: 30px; padding: 0 12px; font-size: 13px; line-height: 1;
  display: inline-flex; align-items: center; gap: 5px; white-space: nowrap;
}
.bt-nota, .bt-barra .bt-nota {
  color: var(--text); font-size: 13px;
}
.tcg-claro .bt-nota, .mo-claro .bt-nota { color: #000; }


/* ══ LA BANDA, DEL ALTO DE SIEMPRE (25/09/2026, Ramiro · lf) ══
   En Presupuestos la banda salía de tres renglones: el logo arriba, el título
   abajo y la bajada abajo de todo. El culpable es mío: en «kd» le puse
   «flex-wrap: wrap» a la banda para que dejara de cortar el botón Cerrar. Eso
   arregló el Cerrar y rompió esto: con una bajada larga, el bloque del título
   no entra al lado del logo y se va a un renglón propio.
   La solución no es sacar el wrap —volvería el Cerrar cortado— sino decirle
   al bloque del título que puede achicarse: así entra al lado del logo, la
   bajada se acomoda adentro, y el wrap queda de reserva para cuando de
   verdad no entra nada más.
   Queda como Gestoría: logo, título y bajada en un renglón, compacta. */
.per-cab { align-items: center; padding: 11px 16px; }
.per-cab > div:not(.mo-cab-btns):not(.per-pie-acciones),
.per-cab > .logo-dealer + div {
  flex: 1 1 240px; min-width: 0;
}
.per-cab .per-sub {
  margin: 2px 0 0; font-size: 12px; line-height: 1.4;
  overflow: hidden; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;
}
.per-cab .logo-dealer { flex: 0 0 auto; }

/* Las carpetas, despegadas de la banda. Estaban pisándole el borde de abajo:
   en Gestoría hay un respiro entre una cosa y la otra, y es lo que hace que
   se lean como dos niveles y no como una sola pieza apelmazada. */
.per-cab + .gu-carpetas,
.per-cab + .ces-solapas, .per-cab + .cc-solapas,
.per-cab + .pv-solapas, .per-cab + .cjs-solapas {
  padding: 10px 14px 0; margin-bottom: 12px;
  background: var(--panel-2, #151b28);
}
.tcg-claro .per-cab + .gu-carpetas, .tcg-claro .per-cab + .ces-solapas,
.tcg-claro .per-cab + .cc-solapas, .tcg-claro .per-cab + .pv-solapas,
.tcg-claro .per-cab + .cjs-solapas { background: #f4f6fa; }


/* ══ LA DIVISORIA DEL CRM (25/09/2026, Ramiro · li) ══
   Tres columnas: la lista, la barrita, la ficha. El ancho de la lista lo pone
   la persona arrastrando, y queda guardado. Antes era un reparto automático
   de mitad y mitad que a la lista no le alcanzaba: cuatro columnas cortadas
   y una barra de desplazamiento abajo. */
.crm-dos--part { grid-template-columns: 50% 8px 1fr; align-items: start; }
/* Una sola barrita para todas las pantallas que la usen. (26/09/2026) */
.tcg-divisoria {
  align-self: stretch; width: 8px; cursor: col-resize; border-radius: 4px;
  background: var(--border, #252d3f); margin-top: 12px;
  transition: background .12s;
}
.tcg-divisoria:hover { background: var(--vnv-marca, var(--accent-amber, #f2c200)); }


/* ══ EL SELLO DE LA VERSION, LEGIBLE EN CLARO (25/09/2026, Ramiro · lk) ══
   En claro salía en un marrón mostaza sobre blanco y con opacidad .55: casi
   no se veía. Y es justo el dato que hay que mirar primero cuando algo no
   cambió después de publicar. Letra negra, más grande, sin transparencia y
   con un borde que lo despega del fondo. En oscuro no cambia: ahí ya se ve.
   Sigue sin recibir clics, que fue lo que una vez le robaba el «Cerrar». */
.tcg-claro .tcg-version, .app-shell--claro .tcg-version {
  background: #ffffff; color: #000; border-color: #9aa5b4;
  font-size: 12px; opacity: 1; font-weight: 700;
  box-shadow: 0 1px 4px rgba(15,23,42,.14);
}


/* ══ LA LUPA DE LA RETOMA, VISIBLE (25/09/2026, Ramiro · lm) ══
   La auditoría la midió en contraste 1,3 en modo oscuro: prácticamente no se
   veía. Y es la que abre el legajo del usado que se tomó en parte de pago,
   que no es un detalle. El problema era la opacidad a .55 sobre un campo
   oscuro, sin fondo propio.
   Ahora tiene su chapita: fondo del panel, borde suave y tinta legible. Sigue
   apareciendo sólo cuando hay una retoma cargada. */
.rv-ver-usado {
  opacity: 1; font-size: 12px; border-radius: 5px;
  background: var(--panel, #1b2233);
  border: 1px solid var(--border, #252d3f);
  color: var(--text, #e8ecf3);
}
.rv-ver-usado:hover {
  background: var(--vnv-marca, var(--accent-amber, #f2c200));
  border-color: var(--vnv-marca, var(--accent-amber, #f2c200));
}
.tcg-claro .rv-ver-usado, .mo-claro .rv-ver-usado {
  background: #ffffff; border-color: #c3ccd8; color: #000;
}

/* El «Cant.» del encabezado no entraba en su columna y salía cortado.
   Que el título de una columna angosta se pueda partir en dos renglones es
   preferible a que se lea «Can…». */
.rv-tabla th, .vn-tabla th { white-space: normal; }


/* ══ PROPUESTA COMERCIAL: ENVOLTURA Y BOTONES (26/09/2026, Ramiro · lq) ══
   «Le falta el envoltorio y los iconos de la derecha tienen que ser más
   grandes en la misma línea.»
   Embebida, la pantalla era un bloque suelto contra el lienzo: sin borde y
   sin esquina, no se leía como una cosa, y por eso la franja de arriba y la
   de abajo parecían sueltas. Ahora es una caja, como el resto del sistema.
   Y los tres botones de cada renglón medían 26 píxeles: para un dedo o un
   clic apurado eso es chico, y encima podían partirse en dos renglones. Van
   a 30 y la fila no se parte nunca. */
.pc-embebido {
  border: 1px solid var(--border, #252d3f); border-radius: 12px;
  overflow: hidden; background: var(--panel, #1b2233); min-height: 0;
}
.tcg-claro .pc-embebido { background: #ffffff; border-color: #c9d2e0; }
.pc-embebido .com-cuerpo { padding-left: 14px; padding-right: 14px; }
.pc-embebido > .per-pie { border-radius: 0; }

/* Los botones de cada renglón: más grandes y siempre en una línea. */
.pc-acc { flex-wrap: nowrap; gap: 6px; }
.pc-ico { width: 30px; height: 30px; font-size: 14px; }
.pc-ico:hover:not(:disabled) { background: var(--panel-2, #151b28); }
.tcg-claro .pc-ico { color: #000; border-color: #c3ccd8; }
.tcg-claro .pc-ico:hover:not(:disabled) { background: #eef2f8; color: #000; }


/* ══ SUBASTAS: LA CAJA MAS ANCHA (26/09/2026, Ramiro · lr) ══
   «El ancho es muy chico.» La pantalla lista subastas con once columnas
   —número, nombre, modalidad, cierre, lotes, unidades, invitados, ofertas,
   mejor oferta, estado y apertura— y salía en una caja angosta, con casi
   todas las columnas escondidas o desplazadas. Un ancho cómodo, con tope
   para que en un monitor grande no quede una tira de punta a punta. */
.sub-modal, .per-modal.sub-modal { width: min(1280px, calc(94vw / var(--tcg-z, 1))); max-width: calc(94vw / var(--tcg-z, 1)); }


/* Mientras se lee el reparto guardado, la rejilla ya tiene sus tres columnas.
   Sin esto, en el primer dibujo la barrita quedaba de tercer elemento en una
   rejilla de dos y se iba a un renglón propio, con un salto visible.
   (26/09/2026) */
.tcg-part { grid-template-columns: 50% 8px 1fr; align-items: start; }


/* El DNI del cliente, debajo del nombre en Cargar venta (26/09/2026) */
.vnv-cliente-dni{ margin: 3px 0 0; font-size: 11.5px; color: var(--text); }
.vnv-cliente-dni--falta{ color: var(--text); font-weight: 600; }


/* ══ IMAGENES DE LA VENTA (26/09/2026, Ramiro · lv) ══ */
.vi-modal { width: min(820px, calc(94vw / var(--tcg-z, 1))); }
.vi-grilla { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: 12px; }
.vi-caja {
  border: 1px solid var(--border, #252d3f); border-radius: 10px; padding: 10px;
  background: var(--panel-2, #151b28); display: flex; flex-direction: column; gap: 8px;
}
.tcg-claro .vi-caja, .mo-claro .vi-caja { background: #f4f6fa; border-color: #c9d2e0; }
.vi-caja--si { border-color: var(--vnv-marca, var(--accent-amber, #f2c200)); }
.vi-rotulo { font-size: 12px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase;
  color: var(--text); }
.vi-mini { padding: 0; border: 0; background: transparent; cursor: zoom-in; }
.vi-mini img { width: 100%; height: 120px; object-fit: cover; border-radius: 7px; display: block; }
.vi-vacia {
  display: flex; align-items: center; justify-content: center; height: 120px;
  border: 1px dashed var(--border, #3a4356); border-radius: 7px; cursor: pointer;
  font-size: 12.5px; color: var(--text);
}
.vi-vacia:hover { border-color: var(--vnv-marca, var(--accent-amber, #f2c200)); color: var(--text, #e8ecf3); }
.tcg-claro .vi-vacia:hover, .mo-claro .vi-vacia:hover { color: #000; }
.vi-acc { display: flex; gap: 6px; flex-wrap: wrap; }
.vi-grande {
  position: fixed; inset: 0; z-index: 10000; background: rgba(0,0,0,.88);
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 10px; cursor: zoom-out; padding: 20px;
}
.vi-grande img { max-width: calc(96vw / var(--tcg-z, 1)); max-height: calc(86vh / var(--tcg-z, 1)); border-radius: 8px; }
.vi-grande .com-ayuda { color: #fff; }


/* ══ PUBLICAR EL LOTE (26/09/2026, Ramiro · lx) ══ */
.lote-publicar { display: flex; gap: 10px; flex-wrap: wrap; align-items: flex-end;
  padding: 10px 12px; border: 1px solid var(--border, #252d3f); border-radius: 9px;
  background: var(--panel-2, #151b28); margin: 10px 0; }
.tcg-claro .lote-publicar { background: #f4f6fa; border-color: #c9d2e0; }
.lote-publicar .per-campo { flex: 1 1 180px; min-width: 0; }
.lote-enlace { display: flex; gap: 7px; flex-wrap: wrap; align-items: center; margin: 8px 0; }
.lote-enlace input { flex: 1 1 320px; min-width: 0; padding: 6px 10px; border-radius: 7px;
  font: inherit; font-size: 13px; background: var(--panel, #1b2233);
  color: var(--text, #e8ecf3); border: 1px dashed var(--border, #3a4356); }
.tcg-claro .lote-enlace input { background: #fff; color: #000; border-color: #c3ccd8; }


/* El historial de lotes publicados (26/09/2026, Ramiro) */
.lote-hist-fila { margin: 8px 0; }
.lote-hist { margin: 6px 0 12px; }
.lote-hist .tabla-env { overflow-x: auto; }
.lote-hist-acc { display: flex; gap: 5px; flex-wrap: wrap; }
.lote-hist--cerrado td { opacity: 1; text-decoration: line-through; }
.lote-hist--cerrado td:last-child { text-decoration: none; }


/* ══ CRUCE DE VENTAS (26/09/2026, Ramiro · mc) ══
   Doce meses más el acumulado y el total: la tabla es ancha por naturaleza.
   Se desliza adentro de su recuadro y la primera columna se queda fija, que
   sin eso uno se pierde de qué renglón está mirando. */
.cru-barra { display: flex; gap: 9px; flex-wrap: wrap; align-items: flex-end;
  padding: 10px 16px; background: var(--panel-2, #151b28);
  border-bottom: 1px solid var(--border, #252d3f); }
.tcg-claro .cru-barra { background: #f4f6fa; border-color: #c9d2e0; }
.cru-barra .per-campo { min-width: 140px; }
.cru-env { overflow: auto; }
.cru-tabla { font-size: 12.5px; }
.cru-tabla th, .cru-tabla td { white-space: nowrap; vertical-align: top; }
.cru-tabla .cru-g { position: sticky; left: 0; z-index: 2; text-align: left;
  background: var(--panel, #1b2233); min-width: 170px; }
.tcg-claro .cru-tabla .cru-g { background: #ffffff; }
.cru-tabla thead th { position: sticky; top: 0; z-index: 3; }
.cru-tabla thead .cru-g { z-index: 4; }
/* Los meses que todavía no pasaron: se ven, pero apagados. Una columna
   vacía de noviembre en septiembre no es un dato, es el futuro. */
.cru-futuro { opacity: 1; }
.cru-acum { border-left: 2px solid var(--border, #252d3f); }
.cru-total { border-left: 2px solid var(--vnv-marca, var(--accent-amber, #f2c200)); }
.cru-dif { display: block; font-size: 12px; font-weight: 700; margin-top: 1px; }
.cru-dif.sube { color: var(--text); }
.cru-dif.baja { color: #d05a4f; }
.cru-tabla tfoot td { border-top: 2px solid var(--vnv-marca, var(--accent-amber, #f2c200));
  position: sticky; bottom: 0; background: var(--panel, #1b2233); }
.tcg-claro .cru-tabla tfoot td { background: #ffffff; }


/* El selector de casas de Armar lote (27/09/2026, Ramiro) */
.lote-casas { display: flex; gap: 7px; flex-wrap: wrap; align-items: center;
  padding: 10px 14px; border-bottom: 1px solid var(--border, #252d3f); }
.lote-casa { font: inherit; font-size: 12.5px; min-height: 30px; padding: 0 13px;
  border-radius: 20px; cursor: pointer; white-space: nowrap;
  background: var(--panel, #1b2233); color: var(--text);
  border: 1px solid var(--border, #252d3f); }
.lote-casa--on { background: var(--vnv-marca, var(--accent-amber, #f2c200));
  color: var(--vnv-marca-txt, var(--casa-activa-tinta, #1a1207)); border-color: transparent; font-weight: 700; }
.tcg-claro .lote-casa { background: #fff; color: #000; border-color: #c3ccd8; }
.lote-casas .com-ayuda { margin-left: auto; }


/* Los borradores de lote (27/09/2026, Ramiro) */
.lote-borr { border: 1px solid var(--border, #252d3f); border-radius: 9px;
  padding: 10px 12px; margin: 10px 0; background: var(--panel-2, #151b28); }
.tcg-claro .lote-borr { background: #f4f6fa; border-color: #c9d2e0; }
.lote-borr-fila { display: flex; gap: 10px; align-items: center; flex-wrap: wrap;
  padding: 7px 9px; border-radius: 7px; cursor: pointer; font-size: 12.5px;
  border: 1px solid transparent; }
.lote-borr-fila:hover { background: rgba(255,255,255,.04); }
.tcg-claro .lote-borr-fila:hover { background: rgba(15,23,42,.04); }
.lote-borr-fila--on { border-color: var(--vnv-marca, var(--accent-amber, #f2c200)); }
.lote-borr-fila b { min-width: 170px; }
.lote-borr-fila .com-ayuda { margin-left: auto; }

/* ── Lista de usados, al pack de tabla (27/09/2026 · mv) ──
   El relleno de las celdas estaba escrito a mano en cada <td>. Al pasar al
   estándar las celdas las dibuja «BtTd», así que el relleno pasa acá. Los
   mismos números de antes: 8×6 en las de mirar, 4×3 en las que se escriben
   adentro, que llevan el campo pegado al borde. */
.lu-planilla th { padding: 8px 6px; vertical-align: bottom; }
.lu-planilla td { padding: 8px 6px; }
.lu-planilla td.lu-td-edit { padding: 4px 3px; }
.lu-planilla td.lu-td-vacia {
  padding: 26px 6px; text-align: center; font-style: italic;
  color: var(--text);
}

/* ── Carga por planilla y semilla (28/09/2026 · mw) ── */
.lu-aviso-semilla { border-left: 3px solid var(--accent-amber, #f2c200); }
.lu-vaciar { color: #E0725F; border-color: #E0725F; }
.lu-imp { max-width: 720px; }
.lu-imp-tabla { width: 100%; border-collapse: collapse; font-size: 12.5px; margin: 6px 0 12px; }
.lu-imp-tabla th, .lu-imp-tabla td {
  padding: 6px 8px; border-bottom: 1px solid var(--border, #2c2f36); text-align: left;
}
.lu-imp-tabla th { font-size: 13px; text-transform: uppercase; color: var(--text); }
.lu-imp-ojo { color: var(--text); }
.lu-imp-botones { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 14px; }
.lu-imp-peligro { color: #E0725F; border-color: #E0725F; }

/* ── Propuesta Comercial · la carpeta «La web» (28/09/2026 · mx) ── */
.pc-casas { display: inline-flex; gap: 6px; flex-wrap: wrap; }
.pc-casa {
  background: none; border: 1px solid var(--border, #2c2f36); color: var(--text);
  border-radius: 999px; padding: 0 12px; min-height: 30px; font-size: 12.5px;
  font-weight: 600; cursor: pointer; white-space: nowrap;
}
.pc-casa--on {
  border-color: var(--vnv-marca, var(--accent-amber, #f2c200));
  color: var(--text, #ecf0f4);
  background: color-mix(in srgb, var(--vnv-marca, #f2c200) 14%, transparent);
}
.pc-pdf-aviso { color: var(--text); }
.pc-casas--web { margin: 4px 0 8px; }

/* ── CRM de PostVenta · el renglón de «A quién contactar» (29/09/2026 · nq)
   Ramiro con foto: quedaba desprolijo. Y no era sólo el acomodo — abajo la
   tabla trae su propia barra con buscador y Excel, así que se veían DOS
   buscadores y DOS Excel, uno arriba y otro abajo, y parecían lo mismo.
   No lo son, y por eso quedan los dos: el de arriba busca en toda la lista
   por VIN y patente, que no son columnas de la tabla, y baja quince
   columnas; el de la tabla busca en lo que se ve y baja eso. Lo que se
   arregla es que se note: el de arriba pasó a llamarse «Excel completo», y
   los tres controles van en un solo renglón, alineados a la derecha y todos
   del mismo alto, en vez de caer cada uno donde entraba. */
.pvx-tit-fila {
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
  margin-bottom: 10px;
}
.pvx-tit-fila > .pvx-fila {
  margin-left: auto; display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
}
.pvx-tit-fila .pvx-in, .pvx-tit-fila .pvx-btn { height: 34px; }
.pvx-tit-fila .crm-busca { width: 260px; min-width: 180px; flex: 1 1 200px; max-width: 320px; }

/* EL ENCABEZADO NO CAMBIA DE ALTO AL CAMBIAR DE CARPETA (29/09/2026 · np,
   Ramiro con las dos fotos). «Los planes» tiene cinco botones y se iban a
   dos renglones; «La web» tiene dos y entraba en uno. Al pasar de una a la
   otra saltaba todo lo de abajo. Un alto fijo para los dos, y los botones
   alineados a la derecha en los dos casos: se cambia de carpeta y lo único
   que cambia es el contenido. */
.pc-acciones-enc {
  display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end;
  gap: 8px; min-height: 76px; align-content: center;
}
.pc-acciones-enc .pc-grupo { display: flex; gap: 8px; flex-wrap: wrap; justify-content: flex-end; }
.pc-acciones-enc .pc-grupo--der { margin-left: 0; }
.pc-casa small { font-weight: 500; opacity: 1; }
.pc-casa--sin { border-style: dashed; }
.pc-enlace {
  font-family: ui-monospace, monospace; font-size: 12px; word-break: break-all;
  background: var(--panel-2, #151b28); border: 1px solid var(--border, #252d3f);
  border-radius: 8px; padding: 8px 10px; margin-top: 8px;
  color: var(--text);
}
.tcg-claro .pc-enlace { background: #f4f6fa; border-color: #c9d2e0; }
.pc-previa-caja {
  margin-top: 10px; border: 1px solid var(--border, #2c2f36); border-radius: 10px;
  overflow: hidden; background: #ffffff;
}
/* Alto sin @media: una regla nueva al final de la hoja rompía el orden de
   mayor a menor ancho que vigila «prueba_celu_orden». Con «clamp» el marco
   se achica solo en el teléfono y no hace falta el bloque. */
.pc-previa-hoja { display: block; width: 100%; height: clamp(420px, calc(62vh / var(--tcg-z, 1)), 620px); border: 0; }

/* Los permisos de plata en la ficha de la persona (28/09/2026 · ne) */
.adu-tit-plata {
  margin: 22px 0 8px; font-size: 13px; text-transform: uppercase;
  letter-spacing: .06em; color: var(--text);
}
.adu-nota-admin {
  margin: 0 0 10px; font-size: 12.5px; color: var(--text);
  border-left: 3px solid var(--accent-amber, #f2c200); padding-left: 10px;
}
.adu-sw:disabled { opacity: .75; cursor: default; }

/* El resultado de una importación que salió bien no va en rojo (28/09/2026 · my) */
.sc-import-ok {
  color: var(--text, #ecf0f4) !important;
  border-color: #2e7d32 !important;
  background: color-mix(in srgb, #2e7d32 14%, transparent) !important;
}
.tcg-claro .sc-import-ok { color: #000 !important; }

/* La planilla que parece de otra casa (28/09/2026 · nf) */
.sc-import-ajena {
  display: flex; flex-direction: column; gap: 8px; margin: 10px 0;
  padding: 12px 14px; border-radius: 10px;
  border: 1px solid var(--accent-amber, #f2c200);
  background: color-mix(in srgb, var(--accent-amber, #f2c200) 10%, transparent);
  font-size: 13px;
}
.sc-import-ajena b { font-size: 14px; }
.sc-import-ajena-btns { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 2px; }
.sc-import-peligro { color: #E0725F; border-color: #E0725F; }

/* El aviso de diferencias entre peritajes ahora se toca (28/09/2026 · na) */
.per-dif--btn { cursor: pointer; border: 0; font: inherit; }
.per-dif--btn:hover { filter: brightness(1.15); }
.lu-comp { max-width: 900px; }

/* Desde / Hasta de Inactivos y Sólo reparaciones (30/09/2026 · ns): arriba, a
   todo lo ancho, «crm-recon» estiraba cada fecha a 877 px en el monitor de
   trabajo. Columnas acotadas y sin @media: en el teléfono entran las dos. */
.crm-recon--tramos { grid-template-columns: repeat(auto-fit, minmax(150px, 190px)); margin-top: 10px; }
/* Bandeja del CRM: los dos bloques de abajo terminan a la misma altura
   (30/09/2026 · nt, Ramiro). Se estiran los dos y la tabla crece para llenar
   el suyo: arranca en 440 px como siempre y, si la ficha es más alta, se
   agranda hasta emparejarla en vez de dejar un hueco. Sin @media: en el
   teléfono quedan apilados y cada uno con su alto. */
.crm-dos--part { align-items: stretch; }
.crm-dos--part > .pvx-bloque:first-child { display: flex; flex-direction: column; }
.crm-dos--part > .pvx-bloque:first-child > div:last-child { flex: 1; display: flex; flex-direction: column; min-height: 0; }
.crm-dos--part .crm-tabla-caja { flex: 1 1 440px; max-height: none; min-height: 0;
  scrollbar-width: thin; scrollbar-color: var(--border, #2a3345) transparent; }
/* Confirmación de «Vaciar y cargar sólo esto» en la carga del CRM (30/09/2026 · nv). */
.crm-vaciar { display: grid; gap: 8px; margin-top: 12px; padding: 12px 14px; border-radius: 10px;
  border: 1px solid rgba(239, 68, 68, .45); background: rgba(239, 68, 68, .08); font-size: 13px; }
.crm-vaciar span { color: var(--text); line-height: 1.45; }
.crm-vaciar .pvx-fila { justify-content: flex-end; }
/* El primer paso: borde rojo, para que no se confunda con «Guardar». */
.pvx-btn.pvx-btn--peligro { color: #e5534b; border-color: rgba(229, 83, 75, .6); }
.pvx-btn.pvx-btn--peligro:hover:not(:disabled) { background: rgba(229, 83, 75, .12); }
.tcg-claro .pvx-btn.pvx-btn--peligro { color: #c0392b; border-color: rgba(192, 57, 43, .55); }
/* Carga de datos y Configuración del CRM en el teléfono (30/09/2026 · nv): las
   columnas de mínimo 420 px no entraban en 380 y la página se corría 52 px de
   costado. Mínimo 420 o el ancho que haya. La bandeja tiene su propio reparto. */
.crm-dos:not(.crm-dos--part) { grid-template-columns: repeat(auto-fit, minmax(min(420px, 100%), 1fr)); }
/* Registro de Ventas, bloque Facturación (30/09/2026 · oa): sin el permiso de
   comisiones la grilla de 2×2 queda con tres tarjetas. La tercera ocupa la
   fila entera en vez de dejar un cuarto vacío con las líneas sueltas. */
.rv-cuatro > div:nth-child(3):last-child { grid-column: 1 / -1; border-right: 0; }
/* Registro de Ventas: títulos encimados al bajar (01/10/2026 · of, Ramiro).
   Cada título era «sticky» por su cuenta, también los tres de la segunda fila
   del grupo VO (Si/NO · Modelo · Costo): al bajar en la tabla se pegaban
   arriba de todo, a la altura de la primera fila, y quedaban encima de los
   demás («MODELO» sobre «COSTO»). Ahora queda fijo el encabezado entero y
   sus dos filas bajan juntas. Los títulos siguen «relative» para el borde que
   cambia el ancho y el embudo del filtro. */
.rv-table thead { position: sticky; top: 0; z-index: 4; }
.rv-table thead th { position: relative !important; top: auto !important; }
/* Modal de venta (usados y 0 km), revisado en las tres casas y los dos modos
   (01/10/2026 · of, Ramiro). Medido sobre la franja de la casa pintada, como
   advierte la nota de «bv»:
   · Rótulos cortados en los dos modos («Importe venta ne…», «Entrega en
     efecti…»): la columna de 158 px no alcanzaba. Con 182 px no se corta
     ninguno; «min(…, 40 %)» la achica sola en pantallas angostas, sin @media.
   · En claro la caja del buscador se pintaba de gris opaco sobre la franja,
     y las píldoras («Consultar ventas», «Por cliente»…) conservaban la tinta
     pensada para la franja: blanco sobre gris en Vesubio y Ginza (contraste
     1,1). Ahora la caja vuelve a ser el velo de la franja, igual que en oscuro.
     Va con las dos clases juntas porque están en el MISMO elemento: las reglas
     «.mo-claro .vnv-fijo» de más arriba nunca se aplicaban.
   · «sin elegir», en la cabecera del panel Unidad: blanco sobre celeste en
     claro. Toma el color de su cabecera. */
.vnv-fijo .vnb .per-campo { grid-template-columns: min(182px, 40%) 1fr; }
.vnv-fijo.mo-claro .vnvb-caja { background: color-mix(in srgb, var(--vnv-marca, #6c7684) 7%, transparent); }
.vnv-modal.mo-claro .vnp-chip { color: inherit; }
/* Registro de Ventas con el pack (01/10/2026 · og): la barra y su menú toman
   los colores del Registro, que tiene su propio claro y oscuro (--rv-…), en
   vez de los generales. Va en su propia línea, arriba de la tabla. */
.rv-root .rv-pack-barra { margin: 0 0 6px; }
.rv-root .bt-barra, .rv-root .bt-menu {
  --text: var(--rv-text); --text-muted: var(--rv-muted); --border: var(--rv-line);
  --panel: var(--rv-panel); --panel-2: var(--rv-panel2);
}
.rv-root .bt-buscador input { background: none; border: 0; box-shadow: none; padding: 0; color: var(--rv-text); }
/* REGISTRO DE VENTAS COMO UNA PLANILLA COMÚN (01/10/2026 · oj, Ramiro: «un
   excel simple»). Cada celda mostraba una cajita adentro: en claro, la regla
   general de los campos («.tcg-claro input:not(...)», con !important) les
   ponía fondo blanco, borde y esquinas redondeadas, y los desplegables
   mostraban su flecha. Ahora el campo ES la celda: sin borde, sin fondo
   propio, sin flecha, y la que se está editando se marca con un borde de
   color por dentro, como en Excel. Mismo camino que la tabla de «adj2». */
.rv-root .rv-table.rv-table--editable tbody td { padding: 0 2px; }
.rv-table--editable tbody td .rv-cell-input,
.tcg-claro .rv-table--editable tbody td input.rv-cell-input:not([type="checkbox"]):not([type="radio"]),
.tcg-claro .rv-table--editable tbody td select.rv-cell-input {
  border: 0 !important; background: transparent !important; box-shadow: none !important;
  border-radius: 0 !important; height: 32px; padding: 0 4px !important; color: var(--rv-text) !important;
  -webkit-appearance: none; appearance: none; background-image: none !important;
}
.rv-table--editable tbody td .rv-cell-input:hover,
.tcg-claro .rv-table--editable tbody td input.rv-cell-input:not([type="checkbox"]):not([type="radio"]):hover, .tcg-claro .rv-table--editable tbody td select.rv-cell-input:hover { background: color-mix(in srgb, var(--rv-amber) 6%, transparent) !important; }
.rv-table--editable tbody td .rv-cell-input:focus,
.tcg-claro .rv-table--editable tbody td input.rv-cell-input:not([type="checkbox"]):not([type="radio"]):focus, .tcg-claro .rv-table--editable tbody td select.rv-cell-input:focus {
  outline: none; box-shadow: inset 0 0 0 2px var(--rv-amber) !important; background: var(--rv-panel) !important;
}
.rv-table--editable tbody td .rv-cell-input.rv-cell-input--falta,
.tcg-claro .rv-table--editable tbody td input.rv-cell-input:not([type="checkbox"]):not([type="radio"]).rv-cell-input--falta, .tcg-claro .rv-table--editable tbody td select.rv-cell-input.rv-cell-input--falta {
  background: color-mix(in srgb, var(--red) 14%, transparent) !important; color: var(--red) !important;
}
/* Títulos del pack (01/10/2026 · ok): el nombre se agarra para mover la
   columna; mientras se cambia un ancho, todo el cursor es de ancho y no se
   selecciona texto. */
.bt-th-label { cursor: grab; }
.bt-th-label:active { cursor: grabbing; }
body.bt-redimensionando, body.bt-redimensionando * { cursor: col-resize !important; user-select: none !important; }
.bt-resize { touch-action: none; }
/* ══ MODO CLARO Y VENTANAS, PAREJO EN TODO EL SISTEMA (01/10/2026 · ol, Ramiro:
   «botones ocultos, letra gris que debe ser negra, títulos sólidos, el mismo
   sector con dos tamaños de pantalla»). Cuatro causas comunes:
   1 · Las ventanas se dibujan FUERA del contenedor principal y no heredan sus
       colores: su modo claro («mo-claro») definía el texto secundario como
       #6b7280, gris medio. Ahora es el mismo casi negro de la aplicación.
   2 · Los títulos de sección: el 19/09 pasaron en claro a blanco con una línea
       de color, porque con el amarillo de Renault y letra blanca no se leían.
       Hoy cada casa tiene su tinta (--vnv-marca-txt: casi negra sobre el
       amarillo, blanca sobre el azul o el rojo): vuelven a ser sólidos.
   3 · Los botones de acción de las franjas («Ver la web»): la regla que pinta
       con la tinta de la casa todo lo que hay en la franja les ganaba, y el
       botón quedaba tinta sobre tinta (negro sobre negro en Renault, blanco
       sobre blanco en Vesubio). Esta regla es más específica.
   4 · Las ventanas con solapas medían lo que su contenido: «Pendientes» y
       «Reservadas» eran dos tamaños distintos. Ahora tienen un alto mínimo
       fijo y las solapas quedan arriba aunque se baje en la lista. */
.mo-claro { --text-muted: #000000; --muted: #000000; }
/* «--txt-2» la usan 20 rótulos (los de la Tienda, entre otros) y no estaba
   definida en ningún lado: caían en su gris de reserva, #9aa4b2, que en
   oscuro va bien y en claro casi no se lee. */
.tcg-claro, .mo-claro { --txt-2: #000000; --muted-2: #4a5263; }

.tcg-claro .tnd-seccion, .tcg-claro .sus-pantalla > .tnd-seccion,
.tcg-claro .sus-casa, .tcg-claro .cip-bloque-tit, .tcg-claro .sc-bloque-tit,
.tcg-claro .lu-grupo-tit, .tcg-claro .sc-grupo-tit, .tcg-claro .vnb-cab,
.mo-claro .tnd-seccion, .mo-claro .vnb-cab {
  background: var(--vnv-marca, var(--accent-amber)) !important;
  color: var(--vnv-marca-txt, #131824) !important;
  border: 0 !important;
}
.tcg-claro .sus-casa h3, .tcg-claro .sus-casa p,
.tcg-claro .vnb-cab h4, .mo-claro .vnb-cab h4,
.tcg-claro .tnd-seccion *:not(input):not(select):not(textarea):not(.lu-btn),
.tcg-claro .sus-casa *:not(input):not(select):not(textarea):not(.lu-btn) {
  color: var(--vnv-marca-txt, #131824) !important;
}

.tcg-claro .per-modal > .per-cab .lu-btn.lu-btn--accion:not(.ol-a):not(.ol-b),
.tcg-claro .per-modal > .per-pie .lu-btn.lu-btn--accion:not(.ol-a):not(.ol-b),
.tcg-claro .per-modal > .per-cab .lu-btn.lu-btn--accion:not(.ol-a):not(.ol-b) *,
.tcg-claro .per-modal > .per-pie .lu-btn.lu-btn--accion:not(.ol-a):not(.ol-b) * {
  /* El color pleno de la casa sobre su tinta: amarillo sobre casi negro en
     Renault, azul sobre blanco en Vesubio. La variante «fuerte» sobre el
     casi negro de Renault daba contraste 2,4. */
  color: var(--vnv-marca, #0b4f96) !important;
}
.tcg-claro .per-modal > .per-cab .lu-btn.lu-btn--accion:not(.ol-a):not(.ol-b),
.tcg-claro .per-modal > .per-pie .lu-btn.lu-btn--accion:not(.ol-a):not(.ol-b) {
  background: var(--vnv-marca-txt, #ffffff) !important;
}

.per-modal:has(.proc-solapas), .per-modal:has(.gu-carpetas) { min-height: min(calc(88vh / var(--tcg-z, 1)), 860px); }
.per-modal:has(.proc-solapas) > .com-cuerpo, .per-modal:has(.gu-carpetas) > .com-cuerpo { flex: 1 1 auto; min-height: 0; }
.com-cuerpo > .proc-solapas, .com-cuerpo > .gu-carpetas {
  position: sticky; top: -14px; z-index: 5;
  margin-top: -14px; padding-top: 14px; background: var(--bg, #14181d);
}

/* El logo de Jorge Giorgi es oscuro: en la tabla de permisos, en oscuro, va
   en blanco. En claro queda a color. */
.app-shell:not(.tcg-claro) .admin-usuarios-logo-btn img[data-casa="giorgi"],
.tcg-app:not(.tcg-claro) .admin-usuarios-logo-btn img[data-casa="giorgi"] { filter: brightness(0) invert(1); }
/* Empezar a cargar en limpio (01/10/2026 · om). */
.tcg-limpieza { margin: 0; padding: 14px 16px; border: 1px solid rgba(229, 83, 75, .45); border-radius: 12px; background: rgba(229, 83, 75, .05); display: grid; gap: 10px; }
.tcg-limpieza h3 { margin: 0; font-size: 15px; }
.tcg-limpieza p { margin: 0; font-size: 13px; line-height: 1.45; }
.tcg-limpieza-dos { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(280px, 100%), 1fr)); gap: 10px; }
.tcg-limpieza-dos > div { display: grid; gap: 4px; font-size: 12.5px; padding: 9px 11px; border-radius: 9px; border: 1px solid var(--border, #2c2f36); }
.tcg-limpieza-fila { display: flex; gap: 10px; align-items: flex-end; flex-wrap: wrap; }
.tcg-limpieza-fila label { display: grid; gap: 4px; font-size: 12px; }
.tcg-limpieza-fila select, .tcg-limpieza-fila input { min-height: 32px; padding: 0 10px; border-radius: 8px; }
.tcg-limpieza-confirma { display: grid; gap: 8px; padding: 10px 12px; border-radius: 9px; border: 1px solid var(--border, #2c2f36); }
.tcg-limpieza-error { color: #e5534b; font-weight: 600; }
.tcg-limpieza-avance { font-weight: 600; }
/* ══ UN SOLO CRITERIO PARA LAS LISTAS DE LOS MODALES (01/10/2026 · on, Ramiro:
   «no podemos tener un ítem resaltado por un círculo de color, el otro sin
   círculo, el otro con un casillero, y desalineados»).
   · N° (abre la unidad): una pastilla con borde fino, igual en todas las
     pantallas, centrada; al pasar el mouse toma el color de la casa. Había
     cuatro estilos (número suelto, pastilla azul en Compras de usados…).
   · Casillas: sólo en los procesos de varias unidades. En los de una sola,
     se toca la fila. La columna mide lo mismo y la del título queda alineada
     con las de abajo.
   · Fila elegida: el mismo resaltado en todos lados. */
table td.proc-n-col .bt-abrir.bt-abrir {
  min-width: 30px; height: 24px; padding: 0 8px !important; border-radius: 999px !important;
  border: 1px solid var(--border, #3a4150) !important; background: transparent !important;
  color: var(--text, inherit) !important; font-weight: 600; font-variant-numeric: tabular-nums;
  display: inline-flex; align-items: center; justify-content: center; cursor: pointer; line-height: 1;
}
table td.proc-n-col .bt-abrir.bt-abrir:hover {
  background: var(--vnv-marca, var(--accent-amber, #f2c200)) !important;
  border-color: var(--vnv-marca, var(--accent-amber, #f2c200)) !important;
  color: var(--vnv-marca-txt, #131824) !important;
}
table th.proc-n-col, table td.proc-n-col { width: 56px; min-width: 56px; text-align: center !important; }
table th.proc-check-col, table td.proc-check-col {
  width: 40px; min-width: 40px; max-width: 40px; text-align: center !important;
  padding-left: 0 !important; padding-right: 0 !important;
}
table th.proc-check-col input[type="checkbox"], table td.proc-check-col input[type="checkbox"] {
  margin: 0; width: 16px; height: 16px; vertical-align: middle; cursor: pointer;
  accent-color: var(--vnv-marca, var(--accent-amber, #f2c200));
}
table tr.activa > td { background: color-mix(in srgb, var(--vnv-marca, var(--accent-amber, #f2c200)) 14%, transparent) !important; }
table tr.activa > td:first-child { box-shadow: inset 3px 0 0 var(--vnv-marca, var(--accent-amber, #f2c200)); }
table th.proc-det-col, table td.proc-det-col { text-align: center !important; white-space: nowrap; }
/* La indicación de la franja, legible: era amarillo sobre blanco. */
.proc-elegidas { color: var(--text, inherit) !important; font-weight: 600; }
.proc-por-unidad--vacio { font-size: 12.5px; padding: 10px 12px; border: 1px dashed var(--border, #3a4150); border-radius: 8px; opacity: 1; }
/* El logo de Jorge Giorgi es oscuro: en la pantalla de elegir casa, sobre el
   fondo oscuro, va en blanco; en claro, a color. (01/10/2026 · oo) */
img.tcg-casa-logo[data-casa="giorgi"] { filter: brightness(0) invert(1); }
.tcg-claro img.tcg-casa-logo[data-casa="giorgi"] { filter: none; }
/* Ajustes en tarjetas (01/10/2026 · op). Dos columnas donde entran (con un
   ancho máximo, para no estirar los renglones de punta a punta) y una sola
   en pantallas angostas, sin @media. */
.tcg-aj-grilla {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 480px), 1fr));
  gap: 14px; padding: 16px; max-width: 1240px; align-items: start;
}
.tcg-ajustes .tcg-aj-grilla > .tcg-aj-seccion,
.tcg-ajustes .tcg-aj-grilla > .tcg-aj-seccion:last-child {
  max-width: none; border: 1px solid var(--border, #2c3346); border-radius: 12px;
  background: var(--panel, #1b2233); padding: 12px 16px 14px;
}
.tcg-ajustes .tcg-aj-grilla .tcg-aj-titulo {
  font-size: 12px; color: var(--text, #ecf0f4); margin: 0 0 10px;
  border-left: 3px solid var(--vnv-marca, var(--accent-amber, #f2c200)); padding: 2px 0 2px 9px;
}
.tcg-ajustes .tcg-aj-grilla .tcg-aj-titulo--sis { border-left-color: #c9a0ff; }
/* En claro, la opción elegida volvía a blanco («.tcg-claro .tcg-aj-op» le
   ganaba por estar más abajo) y no se distinguía de la otra. Y el ancho del
   monitor, en amarillo sobre blanco, casi no se leía. */
.tcg-claro .tcg-aj-op[aria-pressed="true"] {
  background: var(--vnv-marca, var(--accent-amber, #f2c200)); color: var(--vnv-marca-txt, #1d1a06); font-weight: 700;
}
.tcg-claro .tcg-aj-medida { color: #000; }
/* COMPRA DE 0KM A FÁBRICA, CON FRANJA, PIE Y ANCHO (01/10/2026 · oq, Ramiro).
   Se abre encima del listado de vehículos, y la regla de «los submodales no
   repiten la franja» —pensada para avisos chicos— le sacaba la franja de color
   y el pie: quedaba sin envoltorio. Una ficha completa no es un aviso: vuelve
   a tener cabecera plena y pie con el tono de la casa. Y pasa de 470 a 820 px
   (o el ancho que haya), con rótulos más anchos: se veía apretada. */
.per-overlay .per-modal.com-modal--ficha > .per-cab {
  background: var(--vnv-marca, var(--accent-amber, #f2c200)) !important; border-bottom: none !important;
}
.per-overlay .per-modal.com-modal--ficha > .per-cab .per-titulo,
.per-overlay .per-modal.com-modal--ficha > .per-cab .per-sub { color: var(--vnv-marca-txt, #131824) !important; }
.per-overlay .per-modal.com-modal--ficha .per-pie {
  background: color-mix(in srgb, var(--vnv-marca, var(--accent-amber, #f2c200)) 26%, var(--bg, #131824)) !important;
  border-top: 2px solid var(--vnv-marca-luz, var(--vnv-marca, var(--accent-amber, #f2c200))) !important;
  color: #ffffff;
}
.mo-claro .per-modal.com-modal--ficha .per-pie, .tcg-claro .per-overlay .per-modal.com-modal--ficha .per-pie { color: inherit; }
.per-modal.com-modal--ficha,
.per-modal.vnv-modal.com-modal--ficha,
.gv-root .gv-panel-proceso > .per-overlay > .per-modal.com-modal--ficha,
.gv-root .gv-panel-proceso .per-overlay > .per-modal.com-modal--ficha {
  width: min(820px, calc(94vw / var(--tcg-z, 1))); max-width: 820px;
}
.com-modal--ficha .per-campo > span { flex-basis: 150px; font-size: 12px; }
/* Aviso de «se limpió desde otra computadora» (01/10/2026 · or): tapa todo. */
.tcg-aviso-limpieza { position: fixed; inset: 0; z-index: 100000; background: rgba(10, 13, 20, .78); display: flex; align-items: center; justify-content: center; padding: 20px; }
.tcg-aviso-limpieza > div { max-width: 460px; display: grid; gap: 10px; padding: 20px 22px; border-radius: 14px; background: var(--panel, #1b2233); color: var(--text, #ecf0f4); border: 2px solid var(--vnv-marca, var(--accent-amber, #f2c200)); }
.tcg-aviso-limpieza b { font-size: 16px; }
.tcg-aviso-limpieza span { font-size: 13px; line-height: 1.45; }
.tcg-aviso-limpieza .lu-btn { justify-self: start; }
/* ══ UN SOLO TAMAÑO PARA TODAS LAS VENTANAS (02/10/2026 · os, Ramiro: «tienen
   que ser iguales de tamaño, con solapas siempre a la vista y con todo
   activado aunque no haya datos» — para todo el proyecto).
   · Todas miden lo mismo: 94 % del ancho hasta 1.240 px y 90 % del alto. No
     se achican con la lista vacía ni cambian al pasar de solapa.
   · La parte del medio ocupa el espacio y se desplaza; la franja de arriba,
     las solapas y el pie quedan fijos. Si una ventana no tiene parte del medio
     propia, se desplaza ella entera con la franja y el pie pegados.
   · Quedan afuera los avisos chicos (confirmar, dar de alta un cliente…), que
     se abren encima de otra ventana y tienen que seguir siendo chicos.
   · La ventana de VENTA (vnv-fijo / vnv-compacto: cargar la venta de 0 km
     y de usados) tiene su armado propio y queda como estaba: Ramiro pidió
     no tocarla (02/10/2026 · ot).
   · Los botones no se apagan: si falta algo, se ven disponibles (con borde) y
     al tocarlos dicen qué falta; cuando ya se puede, se rellenan. */
.per-overlay > .per-modal:not(.vnv-fijo):not(.vnv-compacto):not(.com-modal--angosto):not(.sub-modal):not(.lu-elegir-casa):not(.rvl-elegir):not(.recl-alta):not(.dif-modal):not(.vna-modal):not(.crm-tanda--grande) {
  width: min(1240px, calc(94vw / var(--tcg-z, 1))) !important; max-width: none !important;
  height: min(calc(90vh / var(--tcg-z, 1)), 940px) !important; max-height: calc(92vh / var(--tcg-z, 1)) !important;
  display: flex !important; flex-direction: column !important;
}
.per-overlay .per-overlay > .per-modal:not(.com-modal):not(.vnv-modal):not(.vn-asig-modal):not(.ing-modal):not(.com-modal--ficha):not(.proc-ficha):not(.crm-tanda--grande) {
  width: auto !important; max-width: min(640px, calc(94vw / var(--tcg-z, 1))) !important; height: auto !important;
}
.per-overlay > .per-modal > .per-cab, .per-overlay > .per-modal > .per-pie,
.per-overlay > .per-modal > [class$="-pie"] { flex: 0 0 auto; }
.per-overlay > .per-modal:not(.vnv-fijo):not(.vnv-compacto) > .per-pie, .per-overlay > .per-modal:not(.vnv-fijo):not(.vnv-compacto) > [class$="-pie"] { margin-top: auto; }
.per-overlay > .per-modal > .com-cuerpo, .per-overlay > .per-modal > .per-cuerpo, .per-overlay > .per-modal > .vnv-cuerpo,
.per-overlay > .per-modal > .vnp-cuerpo, .per-overlay > .per-modal > .sus-cuerpo, .per-overlay > .per-modal > .cip-cuerpo,
.per-overlay > .per-modal > .acc-cuerpo, .per-overlay > .per-modal > .cc-cuerpo, .per-overlay > .per-modal > .crm-cuerpo,
.per-overlay > .per-modal > .sco-cuerpo, .per-overlay > .per-modal > .vna-body, .per-overlay > .per-modal > .ret-body {
  flex: 1 1 auto !important; min-height: 0 !important; overflow: auto;
}
.per-overlay > .per-modal:not(.vnv-fijo):not(.vnv-compacto):not(:has(> .com-cuerpo, > .per-cuerpo, > .vnv-cuerpo, > .vnp-cuerpo, > .sus-cuerpo, > .cip-cuerpo, > .acc-cuerpo, > .cc-cuerpo, > .crm-cuerpo, > .sco-cuerpo, > .vna-body, > .ret-body)) {
  overflow-y: auto !important;
}
.per-overlay > .per-modal:not(.vnv-fijo):not(.vnv-compacto):not(:has(> .com-cuerpo, > .per-cuerpo, > .vnv-cuerpo, > .vnp-cuerpo, > .sus-cuerpo, > .cip-cuerpo, > .acc-cuerpo, > .cc-cuerpo, > .crm-cuerpo, > .sco-cuerpo, > .vna-body, > .ret-body)) > .per-cab { position: sticky; top: 0; z-index: 6; }
.per-overlay > .per-modal:not(.vnv-fijo):not(.vnv-compacto):not(:has(> .com-cuerpo, > .per-cuerpo, > .vnv-cuerpo, > .vnp-cuerpo, > .sus-cuerpo, > .cip-cuerpo, > .acc-cuerpo, > .cc-cuerpo, > .crm-cuerpo, > .sco-cuerpo, > .vna-body, > .ret-body)) > .per-pie { position: sticky; bottom: 0; z-index: 6; }
.per-modal:not(.vnv-fijo):not(.vnv-compacto) [class$="-solapas"], .per-modal:not(.vnv-fijo):not(.vnv-compacto) .gu-carpetas { position: sticky; top: 0; z-index: 5; background: var(--bg, #14181d); }
.proc-vacio { padding: 18px 12px !important; text-align: left !important; font-style: italic; }

/* Botones: disponibles con borde si falta algo; rellenos cuando ya se puede. */
.tcg-claro .per-modal > .per-pie .lu-btn.lu-btn--accion.btn-falta:not(.ol-a):not(.ol-b),
.tcg-claro .per-modal > .per-cab .lu-btn.lu-btn--accion.btn-falta:not(.ol-a):not(.ol-b),
.per-overlay .per-modal .btn-falta.btn-falta, .per-modal .btn-falta.btn-falta,
.per-overlay .per-modal:not(.vnv-fijo):not(.vnv-compacto) .per-pie button:disabled, .per-modal:not(.vnv-fijo):not(.vnv-compacto) [class$="-pie"] button:disabled {
  opacity: 1 !important; filter: none !important; cursor: pointer !important;
  background: transparent !important; color: inherit !important;
  border: 1px solid currentColor !important;
}
.per-modal .btn-listo.lu-btn--accion, .per-modal .btn-listo.pvx-btn--primario {
  background: var(--vnv-marca-txt, #ffffff) !important; color: var(--vnv-marca, #0b4f96) !important;
  box-shadow: 0 0 0 2px var(--vnv-marca-luz, rgba(255,255,255,.35));
}
/* ══ PANTALLA NEUTRA (02/10/2026 · ou): Administración de Usuarios y Empezar a
   cargar en limpio. La caja de Cartera en el tono del tema: franja, medio que
   ocupa el lugar y pie abajo, del mismo ancho que las demás. */
.tcg-neutra {
  display: flex; flex-direction: column; width: min(1178px, 100%); margin: 2px auto 0;
  min-height: min(calc(80vh / var(--tcg-z, 1)), 820px); background: var(--panel, #1b2233);
  border: 1px solid var(--border, #252d3f); border-radius: 12px; overflow: hidden;
}
.tcg-neutra > .tcg-envoltura--neutra { border: 0; border-bottom: 1px solid var(--border, #252d3f); border-radius: 0; }
.tcg-neutra > .tcg-neutra-medio { flex: 1 1 auto; min-height: 0; padding: 16px; }
.cip-pie.cip-pie--neutra {
  flex: 0 0 auto; background: var(--panel-2, #202940); color: var(--text, #ecf0f4);
  border-top: 1px solid var(--border, #252d3f); font-weight: 600;
}
.tcg-claro .cip-pie.cip-pie--neutra, .tcg-claro .cip-pie.cip-pie--neutra * { color: var(--text, #1a1d24); }
/* Transferencia de Plan: el medio con aire, como en Cartera. */
.trf-caja > .cip-medio { padding: 0 16px 16px; }
.trf-caja > .cip-medio .ac-sub-intro { padding: 12px 0 0; }
.trf-caja > .cip-medio .sc-libro-barra { padding: 0; }
.trf-caja > .cip-medio .ac-buscar { width: 100%; min-height: 34px; padding: 0 10px; border-radius: 8px;
  border: 1px solid var(--border, #252d3f); background: var(--bg, #131824); color: var(--text, #ecf0f4); font: inherit; }
/* ══ LOS DOCE MESES DENTRO DEL CENTRO ESTADÍSTICO (02/10/2026 · ov) ══
   La barra de filtros con borde redondeado, como un bloque más del cuerpo;
   la tabla ocupa lo que haya y se desplaza el cuerpo del Centro. */
.ces-cuerpo > .cru-solapa { display: grid; gap: 10px; align-content: start; }
.cru-solapa > .cru-barra { border: 1px solid var(--border, #252d3f); border-radius: 10px; }
.cru-solapa > .cru-cuerpo > .com-ayuda { margin: 4px 2px; }
.cru-nota { margin: 0 2px; }
/* El logo de la casa en la franja del Centro, del mismo alto que el título. */
.ces-modal > .per-cab { display: flex; align-items: center; gap: 14px; }
/* Nueve solapas en una sola fila, en el ancho único de las ventanas (1.240 px):
   un poco menos de aire a los costados y la letra de 12 px. Medido: entran
   todas sin deslizar. */
.ces-modal .ces-solapas { gap: 2px; }
.ces-modal .ces-solapas .ces-sol { padding: 8px 5px; font-size: 12px; }   /* xc: diez solapas en una fila (medido a 1.240 px) */
/* Y la barra de arriba en una sola fila: «Fotos guardadas» caía sola al
   segundo renglón (lo marcó Ramiro en la captura). Menos aire entre botones. */
.ces-modal .ces-barra { gap: 6px; }
.ces-modal .ces-barra .ces-b { padding: 0 10px; font-size: 12.5px; }

/* ══ LA CAJA DE LA PANTALLA (02/10/2026 · ow, Ramiro: «encabezado, envoltorio
   y pie en todas»). Franja arriba, el contenido con aire a los costados y el
   pie lleno abajo, al fondo aunque haya poco. La misma altura que Cartera. */
.tcg-caja {
  display: flex; flex-direction: column; min-height: min(calc(86vh / var(--tcg-z, 1)), 900px);
  background: var(--panel, #1b2233); border: 1px solid var(--border, #252d3f);
  border-radius: 12px; overflow: hidden; padding: 0 !important;
}
.tcg-caja > .tcg-envoltura { border-radius: 0; margin: 0; border: 0; }
.tcg-caja > .tcg-env-sol { margin-bottom: 12px; }
.tcg-caja > :not(.tcg-envoltura):not(.tcg-env-sol):not(.cip-pie) { margin-left: 16px; margin-right: 16px; width: auto; max-width: none; box-sizing: border-box; }
.tcg-caja > :not(.tcg-envoltura):not(.tcg-env-sol):not(.cip-pie):first-of-type { margin-top: 12px; }
.tcg-caja > .cip-pie { margin: auto 0 0 !important; border-radius: 0 !important; flex: 0 0 auto; }
.tcg-caja > .tcg-env-sol + * { margin-top: 0; }
.sch-caja > .sch-root { margin-top: 14px; padding-bottom: 16px; }
.sch-caja .sch-header { justify-content: flex-end; }
/* El registro de boletos usa la misma caja: el botón de nuevo, pegado al pie. */
.tcg-caja.bad-registro > .bad-pie-acciones { margin-top: auto; padding: 10px 0 12px; }
.tcg-caja.bad-registro > .bad-pie-acciones + .cip-pie { margin-top: 0 !important; }

/* ══ TABLEROS CON CAJA Y PIE (02/10/2026 · oy) ══
   El encabezado y el pie de los tableros son hermanos sueltos dentro del
   armazón: el pie cierra con las esquinas de abajo y el tablero sin armar
   (Directorio, Calidad…) ocupa su lugar en vez de dejar el pie en el aire. */
.app-shell > .cip-pie { margin: 14px 0 0; border-radius: 0 0 12px 12px; }
.app-shell > header.tcg-envoltura + .panel-empty { min-height: min(calc(60vh / var(--tcg-z, 1)), 600px); margin: 0;
  display: flex; flex-direction: column; justify-content: center; border-radius: 0; }
.app-shell > header.tcg-envoltura + .panel-empty + .cip-pie { margin-top: 0; }
/* PDA y Seguimiento de objetivo, adentro de la caja común: sin el relleno ni
   el redondeo de cuando eran sueltas. */
.pda-root.tcg-caja { border-radius: 12px; }
.pda-root.tcg-caja > .tcg-envoltura .pda-header-right { justify-content: flex-end; }
.rob-root.tcg-caja { padding-bottom: 0; }
.tcg-envoltura .rob-btn { white-space: nowrap; }
/* Los botones de Seguimiento de objetivo sobre la franja de la casa: en claro
   eran blancos con letra blanca (medido). Translúcidos, con la tinta de la casa. */
.tcg-envoltura .rob-btn, .tcg-claro .tcg-envoltura .rob-btn {
  background: color-mix(in srgb, var(--casa-tinta, #fff) 14%, transparent) !important;
  color: var(--casa-tinta, #fff) !important; border: 1px solid color-mix(in srgb, var(--casa-tinta, #fff) 55%, transparent) !important;
}

/* ══ RECORRIDO DE TODAS LAS PANTALLAS (02/10/2026 · oz) ══
   · El pie de las ventanas con dos textos (qué se mira · de quién es): el de
     la derecha iba pegado al primero y con la letra del cuerpo, más grande
     (Gestoría, y antes los informes por período). Se separa a la derecha y
     con la misma letra del pie. */
.per-modal > .per-pie > span:not([class]):last-child:not(:first-child) {
  margin-left: auto; font-size: 13px; font-weight: 600; white-space: nowrap;
}
/* · COMPRAS DE 0 KM Y DE USADOS, IGUALES (02/10/2026 · pc, Ramiro: «los que
     son iguales en VN y VO deben quedar iguales»). El mismo pie lleno del color
     de la casa —el de 0 km, igual a la franja— en claro y en oscuro; la tabla
     ocupa el lugar y el pie queda abajo en las dos; los filtros de Estado (y
     Origen en 0 km) a la derecha de la barra. La ventana de venta no se toca. */
.per-overlay > .per-modal.vnv-modal.com-lista:not(.vnv-fijo):not(.vnv-compacto) > .cvn-pie--acciones,
.per-overlay > .per-modal.cvn-modal > .cvn-pie--acciones {
  background: var(--vnv-marca, var(--accent-amber, #f2c200)) !important; border-top: 0 !important; margin-top: auto;
  padding: 8px 12px !important; min-height: 42px; box-sizing: border-box;
}
.per-overlay > .per-modal.vnv-modal.com-lista:not(.vnv-fijo):not(.vnv-compacto) > .cvn-pie--acciones > span,
.per-overlay > .per-modal.cvn-modal > .cvn-pie--acciones > span {
  color: var(--vnv-marca-txt, #ffffff) !important;
}
.per-overlay > .per-modal.vnv-modal.com-lista:not(.vnv-fijo):not(.vnv-compacto) > .cvn-pie--acciones > .tcg-cerrar,
.per-overlay > .per-modal.cvn-modal > .cvn-pie--acciones > .tcg-cerrar {
  color: var(--vnv-marca-txt, #ffffff) !important; background: transparent !important;
  border: 1px solid color-mix(in srgb, var(--vnv-marca-txt, #ffffff) 70%, transparent) !important;
}
.per-overlay > .per-modal.cvn-modal:has(> .cvn-tabla-cont) > .cvn-tabla-cont { flex: 1 1 auto; min-height: 0; overflow: auto; }
.cvn-barra > .lu-btn + .cvn-filtro-origen, .cvn-barra > .cvn-buscar + .cvn-filtro-origen { margin-left: auto; }
.app-shell:not(.tcg-claro) .com-lista-tabla, .app-shell:not(.tcg-claro) .cvn-tabla-cont {
  scrollbar-color: var(--border, #2b3348) transparent;
}
.asp-root.tcg-caja { padding: 0 !important; }

/* ══ GESTORÍA COMO LA FOTO DE RAMIRO (02/10/2026 · pa) ══
   Franja de la solapa arriba, buscador, el renglón de Registro / Radicación
   con los filtros, la tabla que ocupa el lugar, y el cambio de estado con
   sus botones abajo, casi pegados al pie. */
.vn-asig-modal > .com-cuerpo:has(> .gu-insc) { display: flex; flex-direction: column; }
.vn-asig-modal > .com-cuerpo > .gu-insc { flex: 1 1 auto; display: flex; flex-direction: column; }
.gu-insc > * { flex: 1 1 auto; display: flex; flex-direction: column; }
.gu-insc .per-modal.ing-modal { flex: 1 1 auto; display: flex; flex-direction: column; max-height: none; }
.gu-insc .per-modal.ing-modal > .ing-tabla-cont { flex: 1 1 auto; }
.gu-insc .per-modal.ing-modal > .pnl-editable.ing-pnl { margin-top: auto; }
.per-modal > .per-pie > span:not([class]):first-child:has(+ span:not([class]):last-child) { font-size: 13px; }
.proc-herramientas .tac-filtros { display: inline-flex; flex-wrap: wrap; gap: 6px; margin: 0; }
.proc-herr-sep { width: 1px; align-self: stretch; background: var(--border, #252d3f); margin: 2px 6px; }
/* Caja por sector con «las tres casas»: los tres logos para elegir. */
.cjs-elegir-casa { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 10px; }
.cjs-casa-btn { display: inline-flex; align-items: center; gap: 10px; padding: 8px 14px; border-radius: 10px;
  border: 1px solid var(--border, #252d3f); background: var(--panel-2, #202940); color: var(--text, #ecf0f4);
  font: inherit; font-weight: 600; cursor: pointer; }
.cjs-casa-btn:hover { border-color: var(--accent-amber, #f2c200); }

/* Restaurar desde una copia: debajo de la limpieza, separado. */
.tcg-restaurar { margin-top: 16px; border-color: var(--border, #252d3f); }
.tcg-restaurar h4 { margin: 0 0 4px; font-size: 14px; }
.tcg-restaurar-lista { margin: 6px 0 10px; padding-left: 18px; font-size: 12.5px; }
.tcg-restaurar-elegir { cursor: pointer; }

/* ── Gestoría · todas las solapas con la forma de Inscripciones (02/10/2026 · pd)
   La tabla ocupa el lugar que queda y el estado baja hasta casi el pie. */
.gu-insc .per-modal.ing-modal > .gu-crece { flex: 1 1 auto; min-height: 0; }
.gu-insc .per-modal.ing-modal > .gu-abajo { margin-top: auto; }
.gu-insc .per-modal.gu-sol > .proc-herramientas { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; }

.gu-insc .proc-herramientas .gu-select { flex: 0 0 220px; width: 220px; height: 28px; margin: 0; }

.gu-insc .tac-ficha.gu-abajo { margin: 8px 0 0; }
.gu-insc .tac-ficha--apagada { opacity: 1; }
.gu-insc .tac-ficha--apagada .tac-foto-vacia { pointer-events: none; }
/* Compacta: la ficha abajo no le puede comer el lugar a la tabla. Estado,
   fechas y observaciones en un renglón; las fotos chicas a la derecha. */
.gu-insc .tac-ficha.gu-abajo { display: grid; grid-template-columns: 1fr auto; column-gap: 16px; padding: 10px 12px; }
.gu-insc .tac-ficha.gu-abajo > .tac-ficha-cab { grid-column: 1 / -1; margin-bottom: 6px; }
.gu-insc .tac-ficha.gu-abajo > .tac-pasos { grid-column: 1 / -1; margin-bottom: 8px; }
.gu-insc .tac-ficha.gu-abajo > .tac-campos { margin-bottom: 0; gap: 10px; flex-wrap: nowrap; align-items: flex-end; }
.gu-insc .tac-ficha.gu-abajo > .tac-campos .tac-campo--ancho { flex: 1 1 auto; }
.gu-insc .tac-ficha.gu-abajo > .tac-fotos { flex-wrap: nowrap; gap: 10px; }
.gu-insc .tac-ficha.gu-abajo .tac-foto img,
.gu-insc .tac-ficha.gu-abajo .tac-foto-vacia { width: 110px; height: 44px; object-fit: cover; }

/* Caja diaria adentro de Gestoría: el contenido es un formulario largo,
   así que el cuerpo desliza dentro de la caja en vez de estirarla. */
.gu-insc .per-modal.gu-sol--libre { flex: 1 1 auto; display: flex; flex-direction: column; min-height: 0; max-height: none; width: 100%; }

.gu-embebido--pat { flex: 1 1 auto; display: flex; flex-direction: column; min-height: 0; }
.gu-embebido--pat > .gu-insc { flex: 1 1 auto; display: flex; flex-direction: column; min-height: 0; }
.gu-sol--libre > .pat-root.gu-pat { flex: 1 1 auto; min-height: 0; overflow: auto; border-radius: 0; padding: 8px 2px 12px; }

.gu-insc .gu-crece td.cvn-vacio { text-align: left; padding-left: 14px; }

/* Antigüedad de los no transferidos, compacta adentro de Gestoría: tarjetas
   a la izquierda y el cuadro por agente a la derecha, así la tabla y el
   estado entran en el monitor de 1366. (02/10/2026 · pd) */
.gu-sol > .gt-bloque { display: grid; grid-template-columns: minmax(0, 1.25fr) minmax(0, 1fr);
  grid-template-areas: "cab cab" "tar tit" "tar rank" "bar rank"; column-gap: 14px; row-gap: 4px; padding: 8px 10px; }
.gu-sol > .gt-bloque > .gt-cab { grid-area: cab; }
.gu-sol > .gt-bloque > .gt-tarjetas { grid-area: tar; gap: 6px; }
.gu-sol > .gt-bloque > .gt-barra { grid-area: bar; margin: 2px 0 0; align-self: end; }
.gu-sol > .gt-bloque > .gt-rank-tit { grid-area: tit; margin: 0; }
.gu-sol > .gt-bloque > .gt-rank-wrap { grid-area: rank; margin: 0; }
.gu-sol > .gt-bloque .gt-tarjetas > * { padding: 5px 8px; min-height: 0; }
.gu-sol > .gt-bloque .gt-tarjetas > * > :nth-child(n+4) { display: none; }
.gu-insc .per-modal.ing-modal > .gu-crece { min-height: 120px; }

/* La caja de la solapa no crece más que el lugar: la tabla se achica (con su
   propio desplazamiento) y el estado y los botones quedan siempre a la vista
   sobre el pie. Si ni así entra, desliza la caja de la solapa, no el modal. */
.vn-asig-modal > .com-cuerpo:has(> .gu-insc .gu-sol) { overflow: hidden; min-height: 0; }
.gu-insc:has(.gu-sol), .gu-insc:has(.gu-sol) > .ing-embebido { min-height: 0; }
.gu-insc .per-modal.gu-sol { min-height: 0; overflow-y: auto; }
.gu-insc .per-modal.ing-modal.gu-sol > .gu-crece { flex: 1 1 0; overflow: auto; }

/* Buscador de Ventas en modo oscuro: la lista que se abre cuelga de la franja
   amarilla y heredaba su tinta oscura, así que el interno y el modelo no se
   leían sobre el fondo oscuro de la lista. (02/10/2026 · pe, foto de Ramiro) */
.per-modal:not(.mo-claro) .per-cab .bap-lista .bap-item > strong,
.per-modal:not(.mo-claro) .per-cab .bap-lista .bap-item > span:not([class]) { color: var(--text, #e8ecf2); }
.per-modal:not(.mo-claro) .per-cab .bap-lista .bap-rotulo { color: var(--text); }

.ing-pnl--apagado { opacity: 1; }
.ing-pnl--apagado input { cursor: not-allowed; }

/* MODO CLARO: NADA DE AMARILLO COMO LETRA (03/10/2026 · pj). Con el color de
   Jorge Giorgi (#f2c200) estos rótulos, solapas activas y botones quedaban
   amarillo sobre blanco: contraste 1,5 a 1,7, ilegibles. Medido pantalla por
   pantalla en el recorrido del modo claro. Regla de Ramiro: en claro, letra
   negra con el título resaltado; el color de la casa queda en el borde. */
.tcg-claro .lu-aviso-dup b, .mo-claro .lu-aviso-dup b,
.tcg-claro .lu-celda-modal, .mo-claro .lu-celda-modal,
.tcg-claro .proc-solapas button.active, .mo-claro .proc-solapas button.active,
.tcg-claro .men-tit, .mo-claro .men-tit,
.tcg-claro .men-total b, .mo-claro .men-total b,
.tcg-claro .inf-btn--print, .mo-claro .inf-btn--print,
.tcg-claro .asp-btn--act, .mo-claro .asp-btn--act,
.tcg-claro .asp-anio--on, .mo-claro .asp-anio--on,
.tcg-claro .tac-campo > span, .mo-claro .tac-campo > span,
.tcg-claro .tac-foto-vacia > span, .mo-claro .tac-foto-vacia > span,
.tcg-claro .pre-accion--on, .mo-claro .pre-accion--on,
.tcg-claro .lote-tot-tit, .mo-claro .lote-tot-tit {
  color: var(--text, #111821) !important;
}
.tcg-claro .proc-solapas button.active, .mo-claro .proc-solapas button.active,
.tcg-claro .pre-accion--on, .mo-claro .pre-accion--on,
.tcg-claro .asp-anio--on, .mo-claro .asp-anio--on,
.tcg-claro .asp-btn--act, .mo-claro .asp-btn--act {
  font-weight: 700; border-color: var(--vnv-marca, var(--accent-amber, #f2c200)) !important;
  box-shadow: inset 0 -3px 0 var(--vnv-marca, var(--accent-amber, #f2c200));
}
.tcg-claro .lu-celda-modal--vacia, .mo-claro .lu-celda-modal--vacia { font-weight: 700; text-decoration: underline; text-decoration-color: var(--accent-amber, #f2c200); }
.tcg-claro .pat-route-hint { color: #000 !important; }

/* Títulos de columna en claro: el amarillo oscurecido de Giorgi daba 2,2 a 2,5
   sobre blanco. Letra negra, el color de la casa queda en la raya de abajo. */
.tcg-claro th .bt-th-label, .mo-claro th .bt-th-label,
.tcg-claro th.proc-n-col, .mo-claro th.proc-n-col,
.tcg-claro .abm-root th, .tcg-claro .smv-root th, .tcg-claro table.abm-tabla th,
.tcg-claro .vnv-modal dt, .mo-claro.vnv-modal dt { color: var(--text, #111821) !important; }
.tcg-claro .abm-tab-comp { color: #000 !important; }

/* Revisión del modo claro (03/10/2026 · pj). Medido pantalla por pantalla:
   lo que quedaba con menos de 3 a 1 de contraste en modo claro. Sin dorado
   en claro: la letra va negra y el acento en el subrayado o el borde. */
.tcg-claro .mig-tabla th, .mo-claro .mig-tabla th, .tema-claro .mig-tabla th { color: var(--text, #111821); }
.tcg-claro .po-ficha, .mo-claro .po-ficha { color: var(--text, #111821); text-decoration: underline; text-decoration-color: var(--vnv-marca, #f2c200); text-underline-offset: 2px; }
.tcg-claro .pat-seg button.combo.active, .mo-claro .pat-seg button.combo.active { color: #000; }
.tcg-claro .lu-badge, .mo-claro .lu-badge { background: color-mix(in srgb, var(--accent-amber) 72%, #000); color: #fff; }
/* Rojos, naranjas y verdes de aviso: en claro, el tono vivo sobre fondo claro
   no llegaba a 3 a 1. Se oscurecen sólo en modo claro. (03/10/2026 · pj) */
.tcg-claro .lu-inf-viejo, .mo-claro .lu-inf-viejo { color: #b3261e !important; }
.tcg-claro .lu-ind--alerta .lu-ind-valor, .mo-claro .lu-ind--alerta .lu-ind-valor,
.tcg-claro .per-dif, .mo-claro .per-dif,
.tcg-claro .recl-dias-alto, .mo-claro .recl-dias-alto { color: #b3261e; }
.tcg-claro .per-pill--gra, .mo-claro .per-pill--gra { color: #b3261e; border-color: #b3261e; }
.tcg-claro th.gt--naranja, .mo-claro th.gt--naranja { color: #000; }
.tcg-claro th.gt--amarillo, .mo-claro th.gt--amarillo { color: #000; }
.tcg-claro th.gt--verde, .mo-claro th.gt--verde { color: #000; }
/* La fecha de pago va sobre el color de la casa: el rótulo con su tinta. */
.pag-fecha.proc-destacado > span { color: var(--vnv-marca-txt, #fff); }

/* MODO CLARO · el color de la casa como letra (03/10/2026 · pj). Los textos
   que se pintaban con el acento (amarillo en Giorgi, azul claro en Vesubio)
   no se leían sobre blanco: pasan al tono oscuro de la misma casa. Los
   fondos y bordes siguen con el acento de siempre. Lo midió el recorrido de
   contraste de todas las pantallas. */
:is(.tcg-claro, [data-modo="claro"]) :is(.sc-btn, .sc-tab-btn.destacada, .sc-barra-tit-casa, .lc-marca-title,
  .lc-ranking-label, .lc-acum-label, .sen-abrir, .cjs-n, .admin-usuarios-btn-nuevo,
  .tesoreria-card-titulo h2, td.mescol, .tcard-period, .brand-tag, .tesoreria-btn-add) { color: var(--text) !important; }
/* Los números de colores de Estimación vienen con color en línea (amarillo,
   verde agua, azul claro): en claro se oscurecen sin cambiar el tono. */
:is(.tcg-claro, [data-modo="claro"]) .pat-kpi-value { filter: brightness(.62) saturate(1.3); }
/* El verde claro del oscuro como letra sobre blanco tampoco se lee (2,6). */
:is(.tcg-claro, [data-modo="claro"]) :is(.adu-tag--alta, .sch-tarjeta-valor) { color: var(--text) !important; }

/* Insignias de marca de PDA Analytics: letra blanca sobre amarillo y verde
   agua (1,9 y 2,4 a 1). Letra oscura, que sobre esos dos fondos se lee. */
.pda-brand-badge { color: #000 !important; }

/* Análisis por marca: las filas de las marcas de la casa vienen pintadas con
   su color y letra blanca en la fila, pero en claro cada celda volvía a la
   letra negra (negro sobre azul marino y sobre negro). La celda hereda la
   letra de su fila. (03/10/2026 · pj) */
.am-tabla tr[style*="background"] > td { color: inherit !important; }
.am-tabla tr[style*="background"] > td input { color: inherit !important; }

/* Botón × rojo en claro: la letra gris oscura sobre rojo no se leía. */
/* (Es transparente: toma la letra de la fila en que está.) */
:is(.tcg-claro, [data-modo="claro"]) .am-tabla .sc-btn-icon.danger { color: inherit !important; }

/* La flechita del desplegable toma la letra de su botón (en Ginza el botón
   lleva el color de la casa y la flecha roja sobre rojo no se veía). */
:is(.tcg-claro, [data-modo="claro"]) .cat-flecha { color: inherit !important; }

/* Liquidación de Comisiones e Informe de Ventas · SÓLO COLOR Y SÓLO EN CLARO
   (03/10/2026 · pj, autorizado por Ramiro). Nada de tamaños ni lugares.
   1) «Por concesionario» elegido: letra blanca sobre su pastilla blanca.
   2) Títulos de sección de la liquidación: blancos sobre la tarjeta blanca.
   3) Nombre de la casa en el título del informe: celeste flojo (2,8 a 1).
   4) Solapa «Liquidación» del informe: el mismo celeste. */
:is(.tcg-claro, [data-modo="claro"]) .enc-vista--on { color: var(--text); }
:is(.tcg-claro, [data-modo="claro"]) .lc-section-titulo { color: var(--text, #0e1116) !important; }
:is(.tcg-claro, [data-modo="claro"]) :is(.ivj-nombre-dealer, .lc-header-casa) { color: var(--accent-letra, #1f2937) !important; }
/* Mismo caso, encontrado al medir en Jorge Giorgi: «Exportar a PDF» amarillo
   (1,6 a 1) y el nombre de la casa en la cabecera fina de la liquidación. */
:is(.tcg-claro, [data-modo="claro"]) .ivj-tab-btn--pdf { color: var(--accent-letra, #1f2937) !important; }
/* Y en las tarjetas de cierre de la liquidación (Giorgi): el nombre del
   cierre, la fila destacada (total de ventas, comisión) y los importes en
   letras salían en amarillo sobre blanco; los botones Excel y PDF también. */
:is(.tcg-claro, [data-modo="claro"]) :is(.lc-btn-pdf, .lc-card-nombre--fijo, .lc-card-letras--comision,
  .lc-card-fila--destacada, .lc-card-fila--destacada > span) { color: var(--accent-letra, #1f2937) !important; }
:is(.tcg-claro, [data-modo="claro"]) .ivj-tab-btn--liq { color: var(--accent-letra, #1f2937) !important; }

/* INFORME DE VENTAS · encabezado y pie del color de la casa (03/10/2026 · pk,
   Ramiro: «sin color de la casa en encabezado y pie»). La misma franja que el
   resto: logo, título y los botones de siempre, todos en su renglón. Sólo en
   pantalla: la hoja impresa sale como antes. */
.ivj-header.ivj-header--casa { background: var(--casa); color: var(--casa-tinta); border-bottom: 0;
  border-radius: 10px; padding: 8px 12px; gap: 8px 12px; flex-wrap: wrap; justify-content: flex-start; }
.ivj-header--casa .logo-dealer { flex: none; }
.ivj-header--casa .logo-dealer-banda { display: inline-block !important; }
.ivj-header--casa .logo-dealer-color { display: none !important; }
.ivj-header--casa h1, .ivj-header--casa .ivj-nombre-dealer, .ivj-header--casa .ivj-vs-enc small { color: var(--casa-tinta) !important; }
.ivj-header--casa h1 { white-space: nowrap; }
.ivj-header--casa h1::before { display: none; }
.ivj-header--casa .ivj-vs-enc { white-space: nowrap; }
.ivj-header--casa .ivj-vs-enc b { background: #fff; border-radius: 6px; padding: 1px 6px; }
/* Los botones, todos en UN renglón (si no entran al lado del título, el
   renglón entero baja, pero nunca se parte). */
.ivj-header--casa .ivj-header-acc { flex-wrap: nowrap; margin-left: auto; }
.ivj-header--casa .ivj-header-acc .ivj-tab-btn { padding: 5px 10px; font-size: 12px; }
.ivj-header--casa .ivj-tab-btn, .ivj-header--casa select { color: var(--casa-tinta) !important;
  background: color-mix(in srgb, var(--casa-tinta) 10%, transparent) !important;
  border-color: color-mix(in srgb, var(--casa-tinta) 45%, transparent) !important; white-space: nowrap; }
.ivj-header--casa select option { color: #000; }
.ivj-header--casa .ivj-tab-btn--on { background: var(--casa-tinta) !important; color: var(--casa) !important; }
.ivj-reporte > .cip-pie { margin-top: 12px; border-radius: 10px; }
@media print {
  .ivj-header.ivj-header--casa { background: none !important; padding: 0 !important; border-radius: 0 !important; }
  .ivj-header--casa .logo-dealer { display: none !important; }
  .ivj-reporte > .cip-pie { display: none !important; }
}

/* Análisis de Stock: un solo renglón arriba —corte, años, verde, Excel, PDF y
   la cuenta a la derecha— y sin aire de más. (03/10/2026 · pk) */
.asp-root .asp-barra { flex-wrap: nowrap; gap: 10px; padding: 6px 10px; margin-bottom: 8px; align-items: center; }
.asp-root .asp-barra > * { white-space: nowrap; flex: none; }
.asp-root .asp-anios { display: inline-flex; gap: 6px; padding-left: 10px; border-left: 1px solid var(--border, #2b3348); }
.asp-root .asp-cuenta { margin-left: auto; }
.asp-root .asp-vacio-aviso { margin: 0 0 8px; padding: 6px 10px; }

/* LIQUIDACIÓN DE COMISIONES · un solo encabezado, todos los botones en un
   renglón y el pie del color de la casa (03/10/2026 · pk). Lo duplicado
   («lc-solo-papel») no se ve en pantalla pero sigue en la hoja impresa. */
.lc-panel .lc-solo-papel { display: none !important; }
@media print {
  .lc-panel .lc-solo-papel { display: flex !important; }
  .lc-panel span.lc-solo-papel { display: inline !important; }
  .lc-panel > .cip-pie { display: none !important; }
  .lc-header-acciones > .ivj-tab-btn, .lc-header-acciones > .asg-col-menu-wrap { display: none !important; }
}
.lc-panel .lc-header--fino { justify-content: flex-end; }
.lc-panel .lc-header-acciones { display: flex; align-items: center; gap: 8px; flex-wrap: nowrap; }
.lc-panel .lc-header-acciones > * { white-space: nowrap; flex: none; }
.lc-panel > .cip-pie { margin-top: 12px; }

/* PANEL DE CARGA DE LAS PANTALLAS DE PROCESO (03/10/2026 · pl, Ramiro).
   Préstamos, Ingreso, Reserva, Cambio de lugar, Entrega, Gestoría:
   · el color es el de la casa —el mismo de la franja de arriba—, no el
     segundo tono más claro que tenía;
   · los campos se ven siempre activos, aunque todavía no haya unidad
     elegida (antes se veían apagados y parecía roto);
   · el panel baja casi hasta el pie y la tabla ocupa el lugar que queda,
     igual en todas. */
.proc-destacado {
  background: var(--vnv-marca, var(--accent-amber, #f2c200)) !important;
  border-color: var(--vnv-marca, var(--accent-amber, #f2c200)) !important;
}
.proc-destacado .per-campo > span, .proc-destacado label > span { color: var(--vnv-marca-txt, var(--accent-texto, #131824)) !important; }
.proc-destacado :is(input, select, textarea, button.cat-disparador):disabled {
  opacity: 1 !important; background: var(--panel-2, #202940) !important; color: var(--text, #ecf0f4) !important;
  -webkit-text-fill-color: var(--text, #ecf0f4); cursor: not-allowed;
}
.proc-destacado .cat-campo, .proc-destacado .cvn-cat { opacity: 1 !important; }
.ing-pnl--apagado { opacity: 1 !important; }
.per-modal.ing-modal > .ing-tabla-cont { flex: 1 1 auto; min-height: 0; }
.per-modal.ing-modal > .pnl-editable.ing-pnl { margin-top: auto; }

/* La franja de color ES el panel: sin la caja gris alrededor, que dejaba un
   hueco vacío entre el panel y el pie. (03/10/2026 · pl) */
.per-modal.ing-modal > .pnl-editable.ing-pnl { background: none !important; border: 0 !important; padding: 0 !important; margin-bottom: 8px; }

/* El pie también tenía «margin-top: auto» y repartía el aire en dos: medio
   arriba del panel y medio abajo. Con el panel al fondo, el pie va pegado y
   la tabla toma lo que queda (con su propio desplazamiento). */
.per-modal.ing-modal:has(> .pnl-editable.ing-pnl) > .per-pie { margin-top: 0 !important; }
.per-modal.ing-modal:has(> .pnl-editable.ing-pnl) > .ing-tabla-cont { max-height: none !important; }

/* Préstamos: el paso a paso en el renglón de filtros. (03/10/2026 · pm) */
.prest-pasos { flex-wrap: nowrap; align-items: center; }
.prest-pasos .tac-chip { white-space: nowrap; }
.prest-flecha { opacity: 1; font-weight: 700; padding: 0 1px; }

/* SALDO DIARIO y ASIGNACIÓN GINZA · franja y pie de la casa (03/10/2026 · pm).
   Sólo pantalla: la hoja impresa de Asignación (.asg-reporte) y la de Saldo
   diario salen como antes. */
.sd-root .sd-header.sd-header--casa, .asg-header.asg-header--casa {
  background: var(--casa); color: var(--casa-tinta); border-radius: 10px; padding: 8px 14px;
  border-bottom: 0; justify-content: flex-start; align-items: center; gap: 14px;
}
.sd-header--casa .logo-dealer, .asg-header--casa .logo-dealer { flex: none; }
.sd-header--casa .logo-dealer-banda, .asg-header--casa .logo-dealer-banda { display: inline-block !important; }
.sd-header--casa .logo-dealer-color, .asg-header--casa .logo-dealer-color { display: none !important; }
.sd-root .sd-header--casa h2, .sd-root .sd-header--casa p, .asg-header--casa h1, .asg-header--casa .asg-nombre-dealer,
.asg-header--casa .asg-save-status { color: var(--casa-tinta) !important; }
.sd-root .sd-header--casa .sd-header-kpi { margin-left: auto; }
.asg-header--casa .asg-header-acciones { margin-left: auto; }
.asg-header--casa .asg-btn { color: var(--casa-tinta) !important; background: color-mix(in srgb, var(--casa-tinta) 10%, transparent) !important;
  border-color: color-mix(in srgb, var(--casa-tinta) 45%, transparent) !important; }
.sd-root > .cip-pie, .asg-panel > .cip-pie { margin-top: 14px; border-radius: 10px; }
@media print {
  .sd-root .sd-header.sd-header--casa, .asg-header.asg-header--casa { background: none !important; padding: 0 0 12px !important; border-radius: 0 !important; border-bottom: 1px solid #ccc !important; }
  .sd-header--casa .logo-dealer, .asg-header--casa .logo-dealer { display: none !important; }
  .sd-root .sd-header--casa h2, .sd-root .sd-header--casa p, .asg-header--casa h1, .asg-header--casa .asg-nombre-dealer { color: #000 !important; }
  .sd-root > .cip-pie, .asg-panel > .cip-pie { display: none !important; }
}

/* SALDO DIARIO EN MODO CLARO (03/10/2026 · pm). Tenía su paleta oscura fija:
   en claro quedaban textos claros sobre fondo claro. La misma pantalla, con
   la paleta clara del resto. */
:is(.tcg-claro, [data-modo="claro"]) .sd-root {
  --sd-bg: #eef1f6; --sd-panel: #ffffff; --sd-panel2: #f4f6fa; --sd-line: #c3cad6;
  --sd-text: #000000; --sd-muted: #000000; --sd-amber: #7a6000; --sd-red: #c0392b; --sd-green: #1e7a3c; --sd-blue: #2563eb;
}
:is(.tcg-claro, [data-modo="claro"]) .sd-root :is(.rec-titulo, .rec-hint, .rec-route-label, .sd-nro, .sd-ind-nota, .sd-ind-drag) { color: var(--sd-text) !important; }
/* Asignación Ginza en claro: los botones de alta iban en amarillo sobre blanco. */
:is(.tcg-claro, [data-modo="claro"]) :is(.asg-btn--nueva, .asg-btn--agregar) { color: var(--accent-letra, #1f2937) !important; }
:is(.tcg-claro, [data-modo="claro"]) .asg-ind-drag { color: var(--text) !important; }
/* Los títulos de las tarjetas de indicadores de Asignación salían blancos
   sobre gris claro (1,1 a 1): no se veían. */
:is(.tcg-claro, [data-modo="claro"]) .asg-ind-titulo { color: var(--text, #0e1116) !important; }

/* ASIGNACIÓN · indicadores en dos filas fijas (03/10/2026 · pn). Las
   columnas son siempre las mismas, en cualquier monitor; el texto se ajusta
   adentro de cada tarjeta. Sólo en el teléfono van de a una. */
.asg-indicadores.asg-indicadores--filas { display: flex !important; flex-direction: column; gap: 10px; height: auto !important; position: static !important; }
.asg-ind-fila { display: grid; gap: 10px; grid-template-columns: repeat(var(--asg-cols, 3), minmax(0, 1fr)); }
.asg-ind-card.asg-ind-card--fija { position: relative !important; left: auto !important; top: auto !important; width: auto !important; height: auto !important;
  grid-column: auto !important; grid-row: auto !important; min-width: 0; display: flex; flex-direction: column; }
/* El título entra entero: hasta dos renglones (nunca cortado con «…»), y
   todas las tarjetas de la fila reservan el mismo lugar, así quedan parejas. */
.asg-ind-card--fija .asg-ind-titulo { white-space: normal; overflow: hidden; text-align: left; min-width: 0; line-height: 1.25;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
.asg-ind-fila--num .asg-ind-titulo-fila { min-height: 2.6em; align-items: flex-start; }
.asg-ind-card--fija .asg-ind-titulo-fila { display: flex; align-items: center; gap: 8px; min-width: 0; }
.asg-ind-card--fija .asg-ind-acciones-tarjeta { margin-left: auto; flex: none; }
/* Números: compactos, el valor a la izquierda y del mismo tamaño en todas. */
.asg-ind-fila--num .asg-ind-card--fija { min-height: 104px; }
.asg-ind-fila--num .asg-ind-titulo { font-size: 12px; }
.asg-ind-fila--num .asg-ind-cuerpo-scroll { overflow: hidden; }
.asg-ind-fila--num .asg-ind-valor-grande { text-align: left !important; font-size: clamp(16px, calc(1.6vw / var(--tcg-z, 1)), 22px); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.asg-ind-fila--num .asg-ind-nota { text-align: left !important; font-size: 12px; }
.asg-ind-fila--num .asg-ind-clickable { width: 100%; text-align: left; }
/* Rankings: mismo alto, la lista desliza adentro. */
.asg-ind-fila--rank .asg-ind-card--fija { height: 300px !important; }
.asg-ind-fila--rank .asg-ind-cuerpo-scroll { flex: 1 1 auto; min-height: 0; overflow: auto; }
/* Sin @media (el orden de los cortes del archivo es de mayor a menor): cada
   columna mide su parte del ancho, con un mínimo; en el teléfono ese mínimo
   no entra y las tarjetas bajan solas (números de a dos, rankings de a uno). */
/* NUNCA UNA TARJETA COLGADA (04/10/2026 · pr, Ramiro): en cualquier monitor
   las dos filas quedan completas y ocupan todo el ancho —5 arriba, 3 abajo—,
   aunque las tarjetas se angosten. Sólo en un ancho de teléfono pasan a una
   columna entera (nunca 3 + 2). Se mide el ancho de la caja de indicadores,
   no el de la pantalla, así el menú lateral abierto o cerrado no cambia nada. */
.asg-indicadores.asg-indicadores--filas { container-type: inline-size; container-name: asgind; }
.asg-ind-fila--num, .asg-ind-fila--rank { grid-template-columns: repeat(var(--asg-cols, 3), minmax(0, 1fr)); }
@container asgind (max-width: 560px) {
  .asg-ind-fila--num, .asg-ind-fila--rank { grid-template-columns: minmax(0, 1fr); }
}
/* En tarjetas angostas el número se achica para entrar entero. */
.asg-ind-fila--num .asg-ind-valor-grande { font-size: clamp(14px, 1.7cqi, 22px); }
.asg-ind-fila--num .asg-ind-nota { overflow-wrap: anywhere; }

/* REGISTRO DE VENTAS (03/10/2026 · po, Ramiro).
   1) Los dos indicadores del medio (Agentes · Directas y Ticket promedio)
      ocupan todo el alto, como Retoma y Facturación: el rótulo arriba, el
      porcentaje en el medio y la cantidad abajo, bien separados. Antes
      quedaban arriba y el resto de la tarjeta vacía.
   2) Desde «Detalle de ventas» para abajo, todo un 22 % más grande (unos
      tres puntos: 14 → 17, 12 → 14,5): no se leía bien. Sólo en pantalla. */
.rv-fila2 > .rv-blq { display: flex; flex-direction: column; }
.rv-fila2 > .rv-blq > .rv-part--alto { flex: 1 1 auto; align-items: stretch; }
.rv-fila2 .rv-part.rv-part--alto > div { justify-content: space-evenly; padding-top: 6px; padding-bottom: 10px; }
.rv-fila2 .rv-part.rv-part--alto .rv-pv { font-size: 24px; }
.rv-fila2 .rv-part.rv-part--alto .rv-pv.rv-pv--md { font-size: 20px; }
.rv-fila2 .rv-part.rv-part--alto .rv-pp { font-size: 16px; }
.rv-root > [data-bloque="detalle-tit"], .rv-root > [data-bloque="detalle-tit"] ~ * { zoom: 1.22; }
@media print { .rv-root > [data-bloque="detalle-tit"], .rv-root > [data-bloque="detalle-tit"] ~ * { zoom: 1; } }

/* SEÑALES DE COMISIONES · cada dato en su celda (03/10/2026 · po, Ramiro:
   «están encimadas las celdas y datos»). La tabla reparte el ancho fijo por
   columna; lo de abajo de cada desplegable («4 tramos», «N cuotas») va en su
   propio renglón dentro de la celda y nunca se mete en la de al lado. */
.sen-tabla { table-layout: fixed; width: 100%; }
.sen-tabla > thead > tr > th:nth-child(1) { width: 25%; }
.sen-tabla > thead > tr > th:nth-child(2) { width: 17%; }
.sen-tabla > thead > tr > th:nth-child(3) { width: 15%; }
.sen-tabla > thead > tr > th:nth-child(4) { width: 22%; }
.sen-tabla > thead > tr > th:nth-child(5) { width: 17%; }
.sen-tabla > thead > tr > th:nth-child(6) { width: 44px; }
.sen-tabla > tbody > tr > td { white-space: normal; overflow: hidden; padding: 5px 6px; min-width: 0; }
.sen-tabla > tbody > tr > td > input, .sen-tabla > tbody > tr > td > select { display: block; width: 100% !important; box-sizing: border-box; text-overflow: ellipsis; }
.sen-tabla .sen-abrir, .sen-tabla .sen-fijo, .sen-tabla .sen-cuotas { display: flex; width: 100%; margin-top: 5px; white-space: nowrap; }
.sen-tabla .sen-fijo .sen-pc, .sen-tabla .sen-cuotas .sen-pc { flex: 0 0 70px; width: 70px !important; }
.sen-tabla > tbody > tr.sen-tramos > td { overflow: visible; }

/* Cartera: las dos cargas, lado a lado. (03/10/2026 · po) */
.ac-soltar-dos { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 12px; }
.ac-soltar-dos .ac-soltar { margin: 0; }
.ac-soltar-tipo { font-size: 12px; font-weight: 700; letter-spacing: .5px; text-transform: uppercase; color: var(--text); margin-bottom: 6px; }
:is(.tcg-claro, [data-modo="claro"]) .ac-soltar-tipo { color: var(--accent-letra, #1f2937); }
.ac-aviso-tipo { margin: 8px 0; padding: 8px 12px; border-radius: 8px; border: 1px solid #c98a00; background: color-mix(in srgb, #f2c200 14%, transparent); font-size: 12.5px; }

/* Listo para entregar + gastos del área (04/10/2026 · pp). */
.lge { margin-top: 8px; background: var(--panel-2, #202940); border: 1px solid var(--border, #2b3348); border-radius: 8px; padding: 8px 10px; }
.lge-cab { display: flex; align-items: center; gap: 10px; margin-bottom: 6px; font-size: 12.5px; }
.lge-estado { font-size: 12px; padding: 2px 8px; border-radius: 999px; border: 1px solid var(--border, #2b3348); color: var(--text); }
.lge-estado--ok { border-color: var(--green, #4caf6d); color: var(--text); font-weight: 700; }
.lge-filas { display: grid; grid-template-columns: repeat(auto-fill, minmax(330px, 1fr)); gap: 6px 12px; }
.lge-fila { display: grid; grid-template-columns: minmax(150px, 1fr) 110px 26px; gap: 6px; align-items: center; }
.lge-fila input { min-width: 0; }
.lge-imp input { width: 100%; text-align: right; }
.lge-pie { display: flex; align-items: center; gap: 8px; margin-top: 8px; flex-wrap: wrap; }
.lge-total { margin-left: auto; font-size: 12.5px; }
.lge-varias { display: flex; flex-direction: column; gap: 6px; }

/* La flechita de los desplegables dentro del panel de carga (que ahora es
   del color de la casa) toma la letra del campo, no la del panel. */
.proc-destacado .cat-flecha { color: var(--text, #ecf0f4) !important; }

/* SEGUIMIENTO DE ADJUDICADOS · tres subsolapas fijas (04/10/2026 · pq). */
.adj2-ramas { display: grid; grid-template-columns: repeat(3, 230px); gap: 6px; margin: 0 0 12px; }
.adj2-rama { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 8px 12px; border-radius: 8px;
  border: 1px solid var(--border, #2b3348); background: var(--panel-2, #202940); color: var(--text, #ecf0f4); font: inherit; font-size: 12.5px; cursor: pointer; }
.adj2-rama b { font-size: 12px; padding: 1px 8px; border-radius: 999px; background: color-mix(in srgb, var(--text, #ecf0f4) 12%, transparent); }
.adj2-rama.on { background: var(--vnv-marca, var(--accent-blue, #0b4f96)); border-color: var(--vnv-marca, var(--accent-blue, #0b4f96)); color: var(--vnv-marca-txt, #fff); font-weight: 700; }
.adj2-aro--todos { fill: var(--accent-blue, #4f8ef7); stroke: var(--accent-blue, #4f8ef7); }
.adj2-est-n--todos { fill: #fff; }
.adj2-modal-no { max-width: 520px; width: calc(94vw / var(--tcg-z, 1)); }
.adj2-motivo-nuevo { display: flex; gap: 6px; margin: 8px 0; }
.adj2-motivo-nuevo input { flex: 1; }
.adj2-fomentar { margin-top: 6px; }
.adj2-sel { min-width: 180px; }
.adj2-prom-busca { width: 100%; margin: 6px 0; }
.adj2-prom-lista { border: 1px solid var(--border, #2b3348); border-radius: 8px; max-height: 220px; overflow: auto; margin-bottom: 10px; }
.adj2-prom-op { display: flex; align-items: center; gap: 8px; width: 100%; text-align: left; padding: 7px 10px; border: 0; border-bottom: 1px solid var(--border, #2b3348);
  background: none; color: var(--text, #ecf0f4); font: inherit; font-size: 12.5px; cursor: pointer; }
.adj2-prom-op:hover { background: var(--panel-2, #202940); }
.adj2-prom-op small { color: var(--text); }
.adj2-prom-mas { margin-left: auto; font-weight: 700; color: var(--text); }
:is(.tcg-claro, [data-modo="claro"]) .adj2-prom-mas { color: var(--accent-letra, #1f2937); }
.adj2-obs { min-width: 260px; }
.adj2-obs-in { width: 100%; }
.adj2-nocont-btn { white-space: nowrap; }

/* DNI y tarjeta verde (04/10/2026 · pt). */
.doc-boton-fila { display: flex; justify-content: flex-end; margin-top: 4px; }
.doc-boton { white-space: nowrap; }
.doc-boton--ok { border-color: var(--green, #4caf6d) !important; }
.doc-modal { max-width: 720px; width: calc(94vw / var(--tcg-z, 1)); height: auto !important; min-height: 0 !important; max-height: calc(90vh / var(--tcg-z, 1)); flex: none !important; }
.doc-modal .doc-mini, .doc-modal .doc-vacio { height: 150px; }
.doc-modal .per-pie { display: flex; align-items: center; gap: 8px; justify-content: flex-end; }
.doc-verif { margin-right: auto; font-weight: 700; font-size: 13px; }
.doc-grilla { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 12px; padding: 12px 14px; }
.doc-grilla--ficha { padding: 6px 0; }
.doc-casillero { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.doc-rot { font-size: 12px; font-weight: 700; letter-spacing: .4px; text-transform: uppercase; color: var(--text); }
.doc-vacio { height: 120px; border: 1.5px dashed var(--border, #2b3348); border-radius: 8px; display: flex; align-items: center; justify-content: center;
  font-size: 12.5px; color: var(--text); }
.doc-subir { cursor: pointer; }
.doc-subir:hover { border-color: var(--vnv-marca, var(--accent-amber, #f2c200)); color: var(--text, #ecf0f4); }
.doc-mini { height: 120px; padding: 0; border: 1px solid var(--border, #2b3348); border-radius: 8px; overflow: hidden; background: #000; cursor: zoom-in; }
.doc-mini img { width: 100%; height: 100%; object-fit: cover; display: block; }
.doc-acc { display: flex; gap: 6px; align-items: center; min-height: 26px; }
.doc-aviso { font-size: 12px; color: var(--text); }
.doc-nota { margin: 0 14px 10px; font-size: 12px; color: var(--text); }
.doc-grande { display: flex; align-items: center; justify-content: center; cursor: zoom-out; z-index: 2000; }
.doc-grande img { max-width: calc(94vw / var(--tcg-z, 1)); max-height: calc(90vh / var(--tcg-z, 1)); border-radius: 8px; box-shadow: 0 10px 40px rgba(0,0,0,.5); }
.doc-ficha { margin: 6px 16px 12px; padding-top: 8px; border-top: 1px solid var(--border, #2b3348); }
.doc-ficha-tit { font-size: 12px; font-weight: 700; letter-spacing: .5px; text-transform: uppercase; margin-bottom: 4px; }
.doc-ficha-quien { font-size: 12.5px; font-weight: 600; margin-top: 6px; }
/* «Soltar unidad» en modo claro: otra regla le seguía ganando y quedaba la
   píldora sin letra visible. La letra va del color de la casa sobre el fondo
   de la píldora (oscuro en Giorgi, blanco en Vesubio y Ginza). */
.mo-claro .per-cab .vnvb-acciones .vnvb-pill.vnvb-pill--soltar,
.tcg-claro .per-modal > .per-cab .vnvb-acciones .vnvb-pill.vnvb-pill--soltar { color: var(--text); }
.mo-claro .per-cab .vnvb-acciones .vnvb-pill.vnvb-pill--soltar *,
.tcg-claro .per-modal > .per-cab .vnvb-acciones .vnvb-pill.vnvb-pill--soltar * { color: var(--text); }

/* Buscador del modal de ventas en modo oscuro (05/10/2026 · pw, Ramiro):
   el texto tomaba la tinta de la casa, y en Renault esa tinta es casi negra:
   sobre el campo oscuro no se veía ni lo escrito ni la unidad elegida. En
   oscuro, el campo lleva letra clara en las tres casas. */
.per-modal:not(.mo-claro) .per-cab .bap-input { color: var(--text, #ecf0f4) !important; -webkit-text-fill-color: var(--text, #ecf0f4); }
.per-modal:not(.mo-claro) .per-cab .bap-input::placeholder { color: var(--text) !important; -webkit-text-fill-color: color-mix(in srgb, var(--text, #ecf0f4) 62%, transparent); }

/* SCORING: la pantalla ocupa todo el alto y el pie baja hasta abajo, cerca
   del pie de la casa, en todas sus solapas. (05/10/2026 · px) */
.lc-panel.sus-pantalla:has(> .sco-cuerpo) { display: flex; flex-direction: column; min-height: calc(100% - 6px); }
.lc-panel.sus-pantalla > .sco-cuerpo { flex: 1 1 auto; display: flex; flex-direction: column; min-height: 0; }
.sco-cuerpo > .cc-pantalla-wrap { flex: 1 1 auto; display: flex; flex-direction: column; min-height: 0; }
.sco-cuerpo .cc-pantalla { flex: 1 1 auto; height: auto !important; min-height: 0 !important; }
.sco-cuerpo .cc-pantalla > .per-pie:last-child, .sco-cuerpo .cc-pantalla > .per-pie.cc-temas-pie { margin-top: auto; }

/* Documentación por ítems (05/10/2026 · py). */
.doc-items { display: flex; flex-direction: column; gap: 10px; padding: 10px 14px; max-height: calc(60vh / var(--tcg-z, 1)); overflow: auto; }
.doc-item { border: 1px solid var(--border, #2b3348); border-radius: 10px; padding: 8px 10px; }
.doc-item-tit { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 6px; font-size: 13px; }
.doc-grilla--2 { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.doc-agregar { display: flex; gap: 8px; padding: 0 14px 6px; }
.doc-agregar input { flex: 1; font: inherit; padding: 6px 10px; border-radius: 7px; border: 1px solid var(--border, #2b3348); background: var(--panel-2, #202940); color: var(--text, #ecf0f4); }
.doc-boton-fila .doc-boton { font-size: 12.5px; padding: 6px 12px; }

/* Retoma: la ventana que bloquea, encima de la compra del usado (py). */
.ret-modal { position: relative; }
.ret-bloqueo { position: absolute; inset: 0; z-index: 30; display: flex; align-items: center; justify-content: center;
  background: rgba(10, 12, 18, .62); border-radius: inherit; }
.ret-bloqueo-caja { max-width: 460px; width: 92%; background: var(--panel, #1b2233); color: var(--text, #ecf0f4);
  border: 2px solid var(--vnv-marca, #f2c200); border-radius: 12px; padding: 16px 18px; box-shadow: 0 10px 40px rgba(0,0,0,.45); font-size: 14px; line-height: 1.45; }
.ret-bloqueo-caja h4 { margin: 0 0 8px; font-size: 16px; }
.ret-bloqueo-caja p { margin: 0 0 8px; }
.ret-bloqueo-btns { display: flex; gap: 8px; margin-top: 12px; }
:is(.tcg-claro, [data-modo="claro"]) .ret-bloqueo-caja { background: #fff; color: #000; }
/* Letra +3 puntos en la compra del usado (py, Ramiro: «no se ve casi nada»). */
.ret-modal .ret-rot { font-size: 14.5px !important; }
.ret-modal input:not([type="checkbox"]):not([type="radio"]), .ret-modal select, .ret-modal textarea,
.ret-modal .cat-disparador, .ret-modal .cat-disparador * { font-size: 16px !important; }
.ret-modal .ret-tilde, .ret-modal .ret-seccion, .ret-modal .ret-canal-tit, .ret-modal .ret-peritados-tit,
.ret-modal .fu-cuenta { font-size: 13.5px !important; }
.ret-modal .lu-btn { font-size: 14px !important; }
.ret-modal .com-ayuda { font-size: 13px !important; }

/* Propuesta Comercial: los botones del pie, centrados en su renglón (salían
   cortados abajo: el pie no tenía relleno inferior). (05/10/2026 · pz) */
.pc-embebido > .per-pie { padding: 8px 16px !important; align-items: center !important; min-height: 50px; }

/* Seguimiento de adjudicados: las tres subsolapas, separadas de la línea de
   las solapas de arriba (≈1 mm), sin quedar encimadas. (05/10/2026 · qb) */
.adj2 > .adj2-ramas { margin-top: 5px; }
/* Facturación de Adjudicados: los campos se ven SIEMPRE activos, en claro y en
   oscuro, aunque todavía no se haya buscado el contrato (antes se veían
   apagados y parecía rota). Se completan al elegir el contrato. (qb) */
.cip .fac-campo.fac-apagado { opacity: 1 !important; }
.cip .fac-campo.fac-apagado > span { color: var(--text) !important; opacity: 1 !important; }
.cip .fac-campo input:disabled { opacity: 1 !important; background: var(--panel-2, #202940) !important; color: var(--text, #ecf0f4) !important;
  -webkit-text-fill-color: var(--text, #ecf0f4); border-color: var(--border, #2b3348) !important; cursor: not-allowed; }
:is(.tcg-claro, [data-modo="claro"]) .cip .fac-campo input:disabled { background: #fff !important; color: #000 !important; -webkit-text-fill-color: #0e1116; border-color: #c3cad6 !important; }
:is(.tcg-claro, [data-modo="claro"]) .cip .fac-campo.fac-apagado > span { color: #000 !important; }
.cip .lu-btn:disabled { opacity: .85; }

/* Diseñar la hoja (qf). */
.inf-diseno { max-width: 860px; width: calc(96vw / var(--tcg-z, 1)); }
.inf-diseno-letra { display: flex; align-items: center; gap: 8px; padding: 8px 14px; }
.inf-diseno-tabla { max-height: calc(58vh / var(--tcg-z, 1)); overflow: auto; padding: 0 14px 8px; }
.inf-diseno-tabla table { width: 100%; border-collapse: collapse; font-size: 12.5px; }
.inf-diseno-tabla th { text-align: left; font-size: 13px; text-transform: uppercase; letter-spacing: .3px; padding: 6px; border-bottom: 1px solid var(--border, #2b3348); position: sticky; top: 0; background: var(--panel, #1b2233); }
.inf-diseno-tabla td { padding: 4px 6px; border-bottom: 1px solid var(--border, #2b3348); white-space: nowrap; }
.inf-diseno-tabla td input { width: 100%; min-width: 140px; }
.inf-d-lugar, .inf-d-ancho { display: flex; align-items: center; gap: 4px; }
.inf-d-ancho span { min-width: 38px; text-align: center; }
.inf-d-res--azul { background: #cfe2f8 !important; color: #000 !important; }
.inf-d-res--rosa { background: #f7c6c9 !important; color: #000 !important; }
.inf-d-res--verde { background: #d5efe1 !important; color: #000 !important; }
.inf-d-res--amarillo { background: #fff2b3 !important; color: #000 !important; }
.inf-btn--disenado { box-shadow: inset 0 -2px 0 var(--accent-amber, #f2c200); }

/* CALIDAD Y SCORING: las solapas, siempre a la vista (05/10/2026 · qk,
   Ramiro). En Comunicación, al bajar, se escondían detrás del encabezado.
   Quedan pegadas arriba mientras el contenido se desplaza debajo. */
.cc-pantalla .cc-solapas, .cc-modal .cc-solapas { position: sticky; top: 0; z-index: 6; background: var(--bg, #14181d); padding-top: 6px; padding-bottom: 6px; }
.cc-modal .cc-solapas { background: var(--panel, #1b2233) !important; top: 58px !important; }
/* El renglón de solapas se achicaba a 14 px con su propia barra de
   desplazamiento (el «scroll» que se veía): ahora no se achica nunca. */
.cc-pantalla .cc-solapas, .cc-modal .cc-solapas { flex: none !important; overflow: visible !important; min-height: auto !important; }
:is(.tcg-claro, [data-modo="claro"]) :is(.cc-pantalla, .cc-modal) .cc-solapas, .mo-claro .cc-solapas { background: #ffffff; }

/* Cartera: las tres cargas en el mismo renglón (ql). */
.ac-soltar-tres { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.ac-aviso-tipo--ok { border-color: var(--green, #4caf6d); background: color-mix(in srgb, var(--green, #4caf6d) 14%, transparent); }

/* ══ qm · 05/10/2026 · tablas como Excel, sin cápsulas ══
   1) El título de columna NO se transparenta: al pasar el mouse se teñía con
      un ámbar al 12% y los números de abajo se veían a través (Cartera:
      «015» encima de ABONADAS). Ahora el tinte es opaco.
   2) En Cartera los títulos quedan por encima de las celdas.
   3) Seguimiento de Cartera (las veinte solapas): cada celda era una
      «cápsula» (borde y esquinas redondeadas). Ahora es una celda de
      planilla: la grilla la dibuja la tabla, el dato va plano y la celda
      elegida se marca con el recuadro azul, como en Excel. Los colores de
      los formatos condicionales siguen siendo el relleno de la celda. */
th.arr:hover { background: color-mix(in srgb, var(--accent-amber, #e8a33d) 16%, var(--panel-2, #1b2233)) !important; }
.tcg-claro th.arr:hover { background: color-mix(in srgb, var(--accent-amber, #e8a33d) 16%, var(--panel-2, #f4f6fa)) !important; }
.car-planilla .sc-table thead th { z-index: 5; background: var(--panel-2, #1b2233); }
.car-planilla .sc-table td.car-td { position: relative; z-index: 0; }
.sc-table tbody td:has(> .sc-cell-input) { padding: 0; }
.sc-table .sc-cell-input { border: none; border-radius: 0; background: transparent; padding: 6px 7px; height: 100%; min-height: 30px; box-shadow: none; }
.sc-table .sc-cell-input:hover { border: none; }
.sc-table .sc-cell-input:focus { outline: 2px solid var(--accent-blue, #3b82f6); outline-offset: -2px; box-shadow: none; }
.sc-table select.sc-cell-input { -webkit-appearance: none; appearance: none; min-width: 0; }
.car-bloq-par { display: flex; gap: 10px; align-items: stretch; margin-bottom: 10px; }
.car-bloq-par > .car-bloq { margin-bottom: 0; min-width: 0; }
.car-bloq-par > .car-bloq:first-child { flex: 2 1 0; }
.car-bloq-par > .car-bloq:last-child { flex: 3 1 0; }
.car-bloq-par .car-inds { grid-template-columns: repeat(auto-fit, minmax(110px, 1fr)); }
@media (max-width: 760px) { .car-bloq-par { flex-direction: column; } }

/* ══ qt · 06/10/2026 · TODAS las tablas como Excel, sin cápsulas ══
   Ramiro: «cada tabla que veas en el proyecto que no tenga esas dos
   condiciones transformalas». El recorrido por todas las pantallas encontró
   celdas-cápsula (campo con borde y esquinas redondeadas adentro de la
   celda) en Lista de usados, Tesorería, los Tableros de Servicios,
   Repuestos y Comercial, Seguimiento de objetivo, Comisiones · Incentivos,
   Análisis por marca e Informe de Ventas. Regla general: el campo adentro
   de una celda va plano —la grilla la dibuja la tabla— y la celda elegida
   se marca con el recuadro azul, como en Excel. Los rellenos de color de
   cada pantalla se respetan. Tildes y botones no se tocan. */
table td input:not([type="checkbox"]):not([type="radio"]):not([type="file"]):not([type="range"]):not([type="color"]),
table td select, table td textarea {
  border: none !important; border-radius: 0 !important; box-shadow: none !important;
}
/* Sin la cajita de fondo y a todo el ancho de la celda: el número no se corta
   (en el Tablero de Servicios «2.497.810» se leía «249781»). Los rellenos de
   formato condicional (clases «cf») se respetan. */
table:not(.sc-table) td input:not([type="checkbox"]):not([type="radio"]):not([type="file"]):not([type="range"]):not([type="color"]):not([class*="cf"]),
table:not(.sc-table) td select:not([class*="cf"]) {
  background-color: transparent !important; width: 100%; max-width: none; box-sizing: border-box;
}
table td input:not([type="checkbox"]):not([type="radio"]):not([type="file"]):not([type="range"]):not([type="color"]):focus,
table td select:focus, table td textarea:focus {
  outline: 2px solid var(--accent-blue, #3b82f6) !important; outline-offset: -2px;
}

/* qu · de dónde sale el vendedor en la Cartera */
.car-fuentes { display: flex; flex-direction: column; gap: 3px; line-height: 1.35; }
.car-fuentes b { color: var(--text, #ecf0f4); }
.car-fuentes-falta { margin-top: 4px; color: var(--text); }
.tcg-claro .car-fuentes-falta { color: #000; }

/* qu · Tesorería: el importe de las tarjetas no se parte en dos renglones
   («$51.362.8» arriba y «74» abajo). Va en una línea, con la letra que se
   achica un poco en pantallas angostas. */
.tesoreria-kpis-fechas .tesoreria-kpi { min-width: 170px; }
.tesoreria-kpis-fechas .tesoreria-kpi > div:last-child { min-width: 0; }
.tesoreria-kpis-fechas .tesoreria-kpi-valor { white-space: nowrap; font-size: clamp(12px, calc(.95vw / var(--tcg-z, 1)), 15px); font-variant-numeric: tabular-nums; overflow: hidden; text-overflow: ellipsis; }
.tesoreria-kpis-fechas .tesoreria-kpi { gap: 8px; padding-left: 10px; padding-right: 10px; overflow: hidden; }
.tesoreria-kpis-fechas .tesoreria-kpi-icon { width: 28px; height: 28px; min-width: 28px; }

/* qv · vendedor/casa a mano en Cartera */
.car-celda--manual { box-shadow: inset 3px 0 0 var(--accent-amber, #e8a33d); }
.car-bloque-manual { display: inline-flex; gap: 6px; align-items: center; flex-wrap: wrap; }
.car-bloque-manual input, .car-bloque-manual select { height: 28px; border-radius: 6px; border: 1px solid var(--border, #2a3346); background: var(--panel, #121826); color: var(--text, #ecf0f4); padding: 0 8px; font: inherit; font-size: 13px; }
.car-bloque-manual input { width: 220px; }

/* qw · Cartera: acciones en el encabezado */
.car .cip-cab { position: relative; overflow: visible; flex-wrap: wrap; }
.car-cab-acciones { margin-left: auto; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.car-cab-acciones .lu-btn { background: color-mix(in srgb, currentColor 10%, transparent); border: 1px solid color-mix(in srgb, currentColor 45%, transparent); color: inherit; }
.car-cab-acciones .lu-btn:hover { background: color-mix(in srgb, currentColor 20%, transparent); }
.car-cab-cuenta { font-size: 12px; opacity: 1; white-space: nowrap; }
.car-cab-acciones .asg-col-menu { color: var(--text, #ecf0f4); z-index: 50; right: 0; left: auto; }

/* qy · Cartera: botones iguales y el bloque de filtros nuevo */
.car-cortes--iguales { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 8px; overflow: visible; }
.car-cortes--iguales .car-corte { min-width: 0; text-align: left; }
.car-cortes--iguales .car-corte b { display: flex; align-items: center; gap: 6px; }
.car-cortes--iguales .car-corte span { display: block; }
@media (max-width: 900px) { .car-cortes--iguales { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.car-filtros2 { display: flex; flex-direction: column; gap: 10px; }
.car-filtros2-fila { display: flex; gap: 14px; flex-wrap: wrap; align-items: flex-end; }
.car-filtros2 .car-campo { display: flex; flex-direction: column; gap: 4px; }
.car-filtros2 .car-campo > span { font-size: 12px; color: var(--text); }
.car-filtros2 .car-campo input, .car-filtros2 .car-campo select { height: 32px; border-radius: 7px; border: 1px solid var(--border, #2a3346); background: var(--panel, #121826); color: var(--text, #ecf0f4); padding: 0 10px; font: inherit; font-size: 13px; min-width: 170px; }
.car-filtros2 .car-campo input { width: 240px; }
.car-seg { display: inline-flex; align-self: flex-start; border: 1px solid var(--border, #2a3346); border-radius: 7px; overflow: hidden; flex-wrap: wrap; }
.car-seg button { font: inherit; font-size: 12px; border: 0; background: transparent; color: var(--text); padding: 0 12px; height: 32px; cursor: pointer; white-space: nowrap; }
.car-seg button + button { border-left: 1px solid var(--border, #2a3346); }
.car-seg button.es-on { background: #e9edf5; color: #000; font-weight: 600; }
.tcg-claro .car-seg button.es-on { background: var(--casa-activa, #0b4f96); color: var(--casa-activa-tinta, #fff); }
.car-filtros2-pie { display: flex; align-items: center; gap: 12px; font-size: 12px; color: var(--text); }
.car-limpiar { margin-left: auto; font: inherit; font-size: 12px; background: none; border: 0; color: var(--text); cursor: pointer; padding: 0; }
.car-limpiar:disabled { color: var(--text); cursor: default; }
.car-camino { width: 100%; overflow-x: auto; }
.car-camino svg { display: block; min-width: 900px; width: 100%; height: auto; }
.car-camino .car-camino-n { font-size: 15px; }
.car-camino .car-camino-nom { font-size: 12px; }
.car-camino .car-camino-d { font-size: 12px; }

/* qy · Adjudicados: las tres ramas forman un bloque, separado de las solapas */
.adj2 > .adj2-ramas, .adj2-ramas { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin: 10px 0 12px;
  border: 1px solid var(--border, #252d3f); border-radius: 10px; background: var(--panel-2, #1b2233); padding: 10px 12px; }
.adj2-ramas-tit { font-size: 12px; text-transform: uppercase; letter-spacing: .6px; color: var(--text); margin-right: 6px; }
.adj2-ramas .adj2-rama { flex: 0 0 230px; min-width: 0; }   /* las tres del mismo ancho */

/* qz · CRM: tandas por tiempo */
.crm-tt { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin-top: 10px; padding: 8px 10px; border: 1px solid var(--border, #2a3346); border-radius: 8px; font-size: 12.5px; }
.crm-tt input { width: 48px; height: 28px; text-align: center; border-radius: 6px; border: 1px solid var(--border, #2a3346); background: var(--panel, #121826); color: var(--text, #ecf0f4); margin: 0 4px; font: inherit; }
.crm-tt-reloj { font-weight: 700; font-variant-numeric: tabular-nums; }
.crm-tt-nota { margin: 6px 0 0; }

/* ra · Cartera: los indicadores en un solo bloque, en renglones alineados */
.car-tablero { display: flex; flex-direction: column; gap: 0; }
.car-tablero-fila { display: grid; grid-template-columns: 150px minmax(0, 1fr); gap: 12px; align-items: stretch; padding: 8px 0; border-top: 1px solid var(--border, #252d3f); }
.car-tablero-fila:first-of-type { border-top: 0; padding-top: 2px; }
.car-tablero-tit { font-size: 12px; font-weight: 700; color: var(--text, #ecf0f4); padding-top: 8px; line-height: 1.3; }
.car-tablero-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 8px; }
.car-tablero-cards .car-ind { min-height: 66px; min-width: 0; }
.car-tablero-cards .car-ind .k { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.car-tablero-cards .car-ind .n { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
@media (max-width: 760px) { .car-tablero-fila { grid-template-columns: 1fr; } .car-tablero-tit { padding-top: 0; } }

/* rb · Cartera: filtros en un renglón, estados como tarjetas, tabla más alta */
.car-filtros2 .car-filtros2-fila { display: grid; grid-template-columns: 1.4fr repeat(4, minmax(0, 1fr)); gap: 12px; }
.car-filtros2 .car-filtros2-fila .car-campo input, .car-filtros2 .car-filtros2-fila .car-campo select { width: 100%; min-width: 0; }
@media (max-width: 900px) { .car-filtros2 .car-filtros2-fila { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.car-est-cards { display: grid; grid-template-columns: repeat(var(--n, 6), minmax(0, 1fr)); gap: 8px; }
.car-est-cards .car-est { min-width: 0; min-height: 64px; text-align: left; }
.car-est-cards .car-est .k { white-space: normal; line-height: 1.2; min-height: 2.4em; display: flex; align-items: flex-end; }
@media (max-width: 900px) { .car-est-cards { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
.car-planilla .sc-table-scroll { max-height: max(560px, calc(calc(100vh / var(--tcg-z, 1)) - 170px)); min-height: 420px; }

/* rd (07/10/2026): Excel y PDF de los cuadros de informe */
.exp-tabla { display: inline-flex; gap: 6px; vertical-align: middle; }
.pda-panel h2 .exp-tabla { float: right; }
.men-tit { display: flex; align-items: center; gap: 10px; }
.men-tit .exp-tabla { margin-left: auto; }

/* re (07/10/2026): Excel y PDF en el renglón del título de cada cuadro de caja */
.cjs-sec { display: flex; align-items: center; }
.cjs-sec .exp-tabla { margin-left: auto; }
.cjs-sec .exp-tabla .lu-btn { text-transform: none; letter-spacing: 0; }
.cjs-sec .exp-tabla .lu-btn { min-height: 26px; padding: 0 10px; font-size: 12px; }

/* rf (07/10/2026): Excel y PDF en tableros, Tesorería y señal de comisiones */
.tab-exportar { display: flex; justify-content: flex-end; gap: 6px; margin: 4px 0 6px; }
.tes-acciones { display: inline-flex; align-items: center; gap: 8px; }
.cip-bloque h4 { display: flex; align-items: center; gap: 10px; }
.cip-bloque h4 .exp-tabla { margin-left: auto; }
.cip-bloque h4 .exp-tabla .lu-btn { text-transform: none; letter-spacing: 0; }

/* rg (07/10/2026): motor de fichas en Fotos y fichas */
.tvn-motor { border: 1px solid var(--border, #252d3f); border-radius: 10px; padding: 10px 12px; margin: 6px 0 10px; }
.tvn-motor-cab { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.tvn-motor-lista { margin-top: 10px; display: flex; flex-direction: column; gap: 8px; }
.tvn-motor-tabla select { width: 100%; max-width: 460px; }
.tvn-motor-tabla tr.tvn-motor-sin td { opacity: 1; }
.tvn-motor-pie { display: flex; gap: 8px; justify-content: flex-end; }

/* rh (07/10/2026): CRM › Envíos */
.crm-env { display: flex; flex-direction: column; gap: 12px; }
.crm-env-cab { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
/* rb: las 4 formas de envío como solapas, enlazadas con Comunicación. */
.crm-env-modos { display: inline-flex; flex-wrap: wrap; gap: 4px; padding: 3px; border-radius: 10px; border: 1px solid rgba(127,127,127,.35); background: rgba(127,127,127,.08); }
.crm-env-modo { border: 0; background: none; color: inherit; font: inherit; font-size: 13px; padding: 6px 12px; border-radius: 7px; cursor: pointer; opacity: 1; display: inline-flex; align-items: center; gap: 6px; }
.crm-env-modo:hover { opacity: 1; background: rgba(127,127,127,.15); }
.crm-env-modo--on { opacity: 1; font-weight: 700; background: var(--casa-activa, #3b82f6); color: var(--casa-activa-tinta, #fff); }
.crm-env-modo--on:hover { background: var(--casa-activa, #3b82f6); }
.crm-env-modo-uso { font-style: normal; font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; padding: 1px 6px; border-radius: 99px; background: rgba(34,197,94,.22); color: var(--text); }
.crm-env-modo--on .crm-env-modo-uso { background: rgba(255,255,255,.25); color: var(--casa-activa-tinta, #fff); }
.crm-env-fila { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.crm-env-fila--sep { justify-content: space-between; }
.crm-env-tit { font-size: 14px; }
.crm-env-chip { font-size: 12px; font-weight: 700; border-radius: 999px; padding: 3px 10px; border: 1px solid; }
.crm-env-chip--curso { color: var(--text); border-color: #2f6b3f; background: rgba(76,175,109,.12); }
.crm-env-chip--pausa { color: var(--text); border-color: #6b5427; background: rgba(232,163,61,.12); }
.crm-env-chip--terminada { color: var(--text); border-color: #2c4c7f; background: rgba(79,142,247,.12); }
.crm-env-chip--cortada { color: var(--text); border-color: var(--border, #252d3f); }
.crm-env-barra { height: 8px; border: 1px solid var(--border, #252d3f); border-radius: 999px; overflow: hidden; margin: 10px 0 4px; background: var(--panel, #1b2233); }
.crm-env-barra i { display: block; height: 100%; background: linear-gradient(90deg, #4caf6d, #6fd08a); transition: width .4s; }
.crm-env-kpis { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 10px; }
.crm-env-kpis .crm-kpi { cursor: default; }
.crm-kpi--ok b { color: var(--text); }
.crm-env-ahora { display: grid; grid-template-columns: 1.5fr 1fr; gap: 12px; }
.crm-env-cli b { font-size: 15px; } .crm-env-cli div { font-size: 12px; opacity: 1; margin-top: 3px; }
.crm-env-msg { margin-top: 10px; max-height: 120px; overflow: auto; }
.crm-env-reloj { display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; gap: 4px; }
.crm-env-reloj span { font-size: 12px; text-transform: uppercase; letter-spacing: .5px; opacity: 1; }
.crm-env-reloj b { font-size: 38px; font-weight: 700; font-variant-numeric: tabular-nums; }
.crm-env-reloj i { font-style: normal; font-size: 12px; opacity: 1; white-space: pre-line; }
.crm-env-caja { max-height: 300px; }
.crm-env-actual td { background: rgba(79,142,247,.14); }
.crm-env-est { font-weight: 600; }
.crm-env-est--ok { color: var(--text); } .crm-env-est--act { color: var(--text); } .crm-env-est--sal { color: var(--text); } .crm-env-est--mal { color: #e2574c; } .crm-env-est--esp { opacity: 1; }
.crm-env .pvx-campo { margin-bottom: 10px; }
.crm-env .pvx-campo .crm-env-fila { flex-wrap: nowrap; font-size: 13px; gap: 8px; }
.crm-env .pvx-campo input.crm-env-n, .crm-env input.crm-env-n { width: 72px; flex: 0 0 auto; height: 34px; align-self: flex-start; text-align: center; padding: 0 6px; }
.crm-env select.pvx-in { max-width: 380px; }
.crm-env-resumen { border: 1px dashed var(--border, #323c52); border-radius: 8px; padding: 10px 12px; line-height: 1.6; }
.crm-env-linea { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; font-size: 12px; margin: 2px 0 8px; }
.crm-env-linea-der { margin-left: auto; }
.crm-env-vacio p { margin: 4px 0 10px; }
.tcg-claro .crm-env-chip--curso { color: #000; border-color: #7cc08f; background: #e6f4ea; }
.tcg-claro .crm-env-chip--pausa { color: #000; border-color: #e0b763; background: #fdf3dc; }
.tcg-claro .crm-env-chip--terminada { color: #000; border-color: #8fb3ea; background: #e8f0fd; }
.tcg-claro .crm-env-est--ok, .tcg-claro .crm-kpi--ok b { color: #000; } .tcg-claro .crm-env-est--sal { color: #000; } .tcg-claro .crm-env-est--mal { color: #b42318; }
@media (max-width: 900px) { .crm-env-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); } .crm-env-ahora { grid-template-columns: 1fr; } }
/* su (16/10/2026): Motor 3, Seguimiento, Reporte y Configuración del mensaje */
.crm-env-listo { margin-top: 10px; padding: 10px 12px; border-radius: 8px; background: rgba(79,142,247,.14); border: 1px solid rgba(79,142,247,.45); font-size: 13px; font-weight: 600; }
.crm-env-latido { animation: crmLatido 1.2s ease-in-out infinite; }
@keyframes crmLatido { 0%, 100% { box-shadow: 0 0 0 0 rgba(79,142,247,.55); } 50% { box-shadow: 0 0 0 6px rgba(79,142,247,0); } }
.crm-env-motor { margin-top: 10px; font-size: 13px; line-height: 1.5; }
.crm-env-fin p { margin: 6px 0 10px; }
.crm-seg .pvx-kpis, .crm-rep .pvx-kpis { margin-bottom: 12px; }
.crm-seg input.crm-env-n { width: 64px; height: 30px; text-align: center; padding: 0 6px; margin: 0 4px; border-radius: 6px; border: 1px solid var(--border, #323c52); background: var(--panel, #1b2233); color: inherit; font: inherit; }
.crm-seg-chip { font: inherit; font-size: 12.5px; padding: 6px 11px; border-radius: 999px; border: 1px solid var(--border, #323c52); background: var(--panel, #1b2233); color: inherit; cursor: pointer; }
.crm-seg-chip b { margin-left: 4px; }
.crm-seg-chip.on { background: var(--crm-acento, #3b82f6); border-color: var(--crm-acento, #3b82f6); color: #fff; }
.crm-seg-resp { min-width: 300px; }
.crm-seg-resp b { display: block; margin-bottom: 4px; }
.crm-seg-bots { display: flex; flex-wrap: wrap; gap: 4px; align-items: center; }
.crm-seg-op { font: inherit; font-size: 12px; padding: 4px 8px; border-radius: 6px; border: 1px solid var(--border, #323c52); background: transparent; color: inherit; cursor: pointer; white-space: nowrap; }
.crm-seg-op:hover { background: rgba(127,127,127,.15); }
.crm-seg-op.on { background: rgba(76,175,109,.18); border-color: #2f6b3f; font-weight: 700; }
.crm-seg-otra { font: inherit; font-size: 12px; padding: 3px 6px; border-radius: 6px; border: 1px solid var(--border, #323c52); background: var(--panel, #1b2233); color: inherit; }
.crm-seg-acc { white-space: nowrap; } .crm-seg-acc .pvx-btn { margin-right: 4px; }
.crm-seg .crm-env-caja, .crm-rep .crm-env-caja { max-height: 520px; }
.crm-rep-mes { margin: 0; min-width: 200px; }
.crm-rep-kpis { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.crm-rep-embudo { display: flex; flex-direction: column; gap: 8px; margin-top: 8px; }
.crm-rep-fila { display: grid; grid-template-columns: 170px 1fr 70px; gap: 10px; align-items: center; font-size: 13px; }
.crm-rep-fila i { display: block; height: 14px; border-radius: 4px; background: var(--panel, #1b2233); border: 1px solid var(--border, #252d3f); overflow: hidden; }
.crm-rep-fila i b { display: block; height: 100%; background: var(--crm-acento, #3b82f6); }
.crm-rep-fila em { font-style: normal; font-weight: 700; text-align: right; }
.crm-rep-hist { font-size: 12px; opacity: 1; min-width: 260px; }
.crm-conf-sub { margin-bottom: 12px; }
.crm-conf-lin { display: flex; gap: 8px; align-items: center; margin-bottom: 6px; }
.crm-conf-lin .pvx-in { flex: 1; min-width: 0; }
.crm-conf-x { width: 36px; padding: 0; flex: 0 0 auto; }
.crm-prev-burb { white-space: pre-line; background: rgba(37,211,102,.10); border: 1px solid rgba(37,211,102,.35); border-radius: 12px 12px 12px 4px; padding: 12px 14px; font-size: 13.5px; line-height: 1.55; }
.crm-resp-tabla select { max-width: 320px; }
.crm-exc-sube { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; justify-content: space-between; border: 2px dashed var(--border, #323c52); border-radius: 10px; padding: 14px; margin: 10px 0; }
.crm-exc-nuevo { display: flex; flex-wrap: wrap; gap: 8px; margin: 10px 0; }
.crm-exc-nuevo .pvx-in { flex: 1 1 140px; min-width: 0; }
.tcg-claro .crm-prev-burb { background: #e9f9ef; border-color: #9fdcb5; }
@media (max-width: 900px) { .crm-rep-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); } .crm-rep-fila { grid-template-columns: 110px 1fr 50px; } }

/* rk (07/10/2026): Comunicación con cuatro formas y Envíos según la forma */
.comu-niveles--4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.comu-nivel .comu-quien { display: block; font-style: normal; font-size: 12px; text-transform: uppercase; letter-spacing: .4px; opacity: 1; margin-top: 8px; }
.comu-tanda { margin: 0 0 12px; }
.crm-env-forma { font-size: 13px; }
.crm-env-kpis--4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.crm-env-chats { display: grid; grid-template-columns: 320px 1fr; gap: 12px; }
.crm-env-chat-l { border: 1px solid var(--border, #252d3f); border-radius: 10px; overflow: auto; max-height: 420px; }
.crm-env-chat-i { display: block; width: 100%; text-align: left; font: inherit; color: inherit; background: transparent; border: 0; border-bottom: 1px solid var(--border, #252d3f); padding: 10px 12px; cursor: pointer; }
.crm-env-chat-i.on { background: rgba(79,142,247,.14); }
.crm-env-chat-i b { font-size: 12.5px; } .crm-env-chat-i div { font-size: 12px; opacity: 1; margin-top: 3px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.crm-env-tag { float: right; font-size: 12px; font-weight: 700; border-radius: 999px; padding: 1px 7px; border: 1px solid; }
.crm-env-tag--bot { color: var(--text); border-color: #4c3d86; } .crm-env-tag--persona { color: var(--text); border-color: #6b5427; } .crm-env-tag--abierta { color: var(--text); border-color: #2c4c7f; }
.crm-env-conv { border: 1px solid var(--border, #252d3f); border-radius: 10px; padding: 12px; display: flex; flex-direction: column; gap: 8px; max-height: 420px; overflow: auto; }
.crm-env-burb { max-width: 75%; padding: 8px 11px; border-radius: 10px; font-size: 12.5px; line-height: 1.45; border: 1px solid var(--border, #252d3f); }
.crm-env-burb small { display: block; font-size: 12px; opacity: 1; margin-top: 3px; }
.crm-env-burb--cli { align-self: flex-start; }
.crm-env-burb--bot { align-self: flex-end; background: rgba(167,139,250,.14); border-color: rgba(167,139,250,.4); }
.crm-env td.crm-env-est--ok { color: var(--text); } .crm-env td.crm-env-est--mal { color: #e2574c; } .crm-env td.crm-env-est--sal { color: var(--text); } .crm-env td.crm-env-est--act { color: var(--text); }
.tcg-claro .crm-env td.crm-env-est--ok { color: #000; } .tcg-claro .crm-env td.crm-env-est--mal { color: #b42318; } .tcg-claro .crm-env td.crm-env-est--sal { color: #000; }
@media (max-width: 900px) { .comu-niveles--4, .crm-env-kpis--4 { grid-template-columns: repeat(2, minmax(0, 1fr)); } .crm-env-chats { grid-template-columns: 1fr; } }

/* ── rl · Modal de ventas ────────────────────────────────────────────────
   1) Los listados que abren los botones de arriba (Consultar ventas, Por
      cliente, Por agente, Unidades sin interno) vivían adentro de la capa
      del modal, que en el lienzo mide lo que el contenido y no lo que la
      pantalla: el pie y el Volver quedaban debajo del borde y parecía que no
      se podían cerrar. En el monitor van fijos, sobre la pantalla entera. */
@media (min-width: 900px) {
  .per-overlay:has(> .vnv-fijo) > .per-overlay { position: fixed; inset: 0; z-index: 10000; padding: 14px; }
  .per-overlay:has(> .vnv-fijo) > .per-overlay > .per-modal { max-height: calc(calc(100vh / var(--tcg-z, 1)) - 28px); }
}
/* 2) Con la letra agrandada, si el modal no entra a lo alto se desplaza el fondo. */
.per-overlay.vnv-desborda { align-items: flex-start !important; overflow-y: auto; }
/* 3) El control de la letra, en el pie. */
.vnv-letra { display: inline-flex; align-items: center; gap: 4px; margin-left: auto; margin-right: 10px; flex: 0 0 auto; position: relative; z-index: 4; }
.vnv-letra-rot { font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: .4px; opacity: 1; }
/* Arriba, dentro de la cápsula del buscador, como un atajo más. */
.vnv-letra { margin-left: 0 !important; margin-right: 0 !important; }
.vnvb-acciones .vnv-letra .vnv-letra-btn { height: 34px; border-radius: 999px; border: 1px solid rgba(255,255,255,.75); background: transparent; color: #fff; font: inherit; font-size: 14px; font-weight: 700; cursor: pointer; padding: 0 12px; white-space: nowrap; }
.vnvb-acciones .vnv-letra .vnv-letra-btn:hover { background: rgba(255,255,255,.18); }
.vnv-letra-caja { position: absolute; right: 0; top: calc(100% + 8px); z-index: 20; display: grid; gap: 8px; min-width: 210px; padding: 12px; border-radius: 10px;
  background: var(--panel, #161c29); color: var(--text, #e8ecf2); border: 1px solid var(--border, #2a3345); box-shadow: 0 10px 28px rgba(0,0,0,.35); }
/* La cabecera fuerza la letra blanca: la cajita va oscura en los dos temas. */
.vnvb-acciones .vnv-letra-caja { width: 236px !important; min-width: 236px !important; max-width: none !important; background: #1b2232 !important; color: #fff !important; border-color: #3a4560 !important; white-space: normal; }
.vnvb-acciones .vnv-letra-caja * { color: #fff !important; }
.vnvb-acciones .vnv-letra-caja button { display: flex !important; align-items: center; justify-content: center; width: 100%; height: 34px !important; border: 1px solid rgba(255,255,255,.6) !important; padding: 0 10px !important; }
.vnv-letra-caja .vnv-letra-rot { font-size: 11.5px; font-weight: 700; text-transform: uppercase; letter-spacing: .4px; opacity: 1; }
.vnv-letra-fila { display: grid; grid-template-columns: 44px 1fr 44px; align-items: center; gap: 6px; }
.vnv-letra-n { text-align: center; font-size: 16px; }
.vnv-letra-caja button { height: 34px; border-radius: 8px; border: 1px solid currentColor; background: transparent; color: inherit; font: inherit; font-size: 14px; font-weight: 700; cursor: pointer; }
.vnv-letra-caja button:hover { background: color-mix(in srgb, currentColor 10%, transparent); }
.vnv-letra-caja .vnv-letra-aj--act { opacity: 1; }
@media (max-width: 899px) { .vnv-letra { display: none; } }
/* ro: la letra del modal de ventas, en el encabezado de arriba. */
.tcg-fr-slot { display: contents; }
.vnv-letra--cab { position: relative; z-index: 10001; }
/* Con un listado de los atajos abierto (va encima de todo), el botón se esconde. */
body:has(.vnl-pantalla) .vnv-letra--cab { visibility: hidden; }
.vnv-letra--cab .vnv-letra-btn { display: inline-flex; align-items: center; gap: 5px; }
.vnv-letra--cab .vnv-letra-k { font-weight: 700; }
.vnv-letra--cab .vnv-letra-caja { width: 250px; z-index: 10002; }
.vnv-letra--cab .vnv-letra-caja button:disabled { opacity: .4; cursor: default; }
.vnv-letra-nota { font-size: 12px; line-height: 1.35; opacity: 1; }
/* ro: con la letra más grande, la columna de rótulos y el mes crecen igual. */
.vnv-fijo[data-fuente-on="1"] .vnb .per-campo { grid-template-columns: min(calc(182px * var(--vnv-f, 1)), 46%) 1fr; }
.vnv-fijo[data-fuente-on="1"] .vnv-mesanio { grid-template-columns: calc(46px * var(--vnv-f, 1)) 8px 1fr; }
/* ══ rb · ALTA DE CLIENTE CHICA (08/10/2026, Ramiro: «sale sin encabezado,
   sin envoltorio ni pie y es muy ancho; tiene que ser un modal chico de alta
   cliente sencillo pero estéticamente lindo, de carga rápida y práctica»).
   Antes tomaba el ancho de las pantallas grandes (1240) y la cabecera y el pie
   quedaban transparentes. Ahora: 520 de ancho, franja de la casa arriba y
   abajo, rótulo a la izquierda y caja a la derecha, todo del mismo alto. ══ */
.per-overlay > .per-modal.vna-modal.vna-modal.vna-modal,
.gv-root .gv-panel-proceso .per-overlay > .per-modal.vna-modal.vna-modal.vna-modal {
  width: min(520px, calc(94vw / var(--tcg-z, 1))) !important; max-width: calc(94vw / var(--tcg-z, 1)) !important;
  height: auto !important; min-height: 0 !important; max-height: calc(90vh / var(--tcg-z, 1)) !important;
  display: flex !important; flex-direction: column !important; overflow: hidden !important;
  border-radius: 14px !important; padding: 0 !important;
  box-shadow: 0 18px 50px rgba(0,0,0,.45) !important;
}
.per-modal.vna-modal.vna-modal > .per-cab {
  background: var(--vnv-marca, #f2c200) !important; color: var(--vnv-marca-txt, #1d1a06) !important;
  display: flex !important; align-items: center !important; gap: 12px !important;
  padding: 10px 16px !important; margin: 0 !important; border: 0 !important; flex: none !important;
  position: static !important;
}
.per-modal.vna-modal.vna-modal > .per-cab * { color: var(--vnv-marca-txt, #1d1a06) !important; }
.per-modal.vna-modal.vna-modal > .per-cab .vnl-tipo { margin: 0 !important; font-size: 12px !important; letter-spacing: .08em; text-transform: uppercase; opacity: 1; }
.per-modal.vna-modal.vna-modal > .per-cab .per-titulo { margin: 0 !important; font-size: 18px !important; line-height: 1.2 !important; }
.per-modal.vna-modal.vna-modal > .vna-body {
  flex: 1 1 auto !important; min-height: 0 !important; overflow-y: auto !important;
  padding: 16px 20px 12px !important; gap: 9px !important; display: flex !important; flex-direction: column !important;
}
.per-modal.vna-modal.vna-modal .per-campo {
  display: grid !important; grid-template-columns: 146px minmax(0, 1fr) !important;
  align-items: center !important; column-gap: 12px !important; row-gap: 3px !important; margin: 0 !important;
}
.per-modal.vna-modal.vna-modal .per-campo > span {
  text-align: right !important; font-size: 12px !important; letter-spacing: .04em; text-transform: uppercase; opacity: 1; white-space: nowrap;
}
.per-modal.vna-modal.vna-modal .per-campo > input,
.per-modal.vna-modal.vna-modal .per-campo > .vna-opts,
.per-modal.vna-modal.vna-modal .per-campo input {
  max-width: none !important; width: 100% !important; height: 34px !important; min-height: 34px !important;
  font-size: 14px !important; border-radius: 8px !important; padding: 0 10px !important; box-sizing: border-box;
}
.per-modal.vna-modal.vna-modal .per-campo > .vna-opts { height: auto !important; padding: 0 !important; }
.per-modal.vna-modal.vna-modal .com-ayuda, .per-modal.vna-modal.vna-modal .vna-loc-lista { grid-column: 2 !important; margin-left: 0 !important; }
.per-modal.vna-modal.vna-modal .vna-agregar {
  align-self: flex-start !important; margin: 2px 0 0 158px !important; width: auto !important;
  border: 0 !important; background: none !important; padding: 4px 0 !important;
  font-size: 13px !important; font-weight: 600; color: var(--text); cursor: pointer;
}
.per-modal.vna-modal.vna-modal .vna-agregar:hover { text-decoration: underline; }
.per-modal.vna-modal.vna-modal .vna-sub, .per-modal.vna-modal.vna-modal .vna-bloque-cab {
  display: flex !important; justify-content: space-between !important; align-items: center !important;
  margin: 8px 0 2px !important; padding: 8px 0 0 !important; border-top: 1px solid rgba(127,127,127,.3) !important;
  font-size: 12px !important; font-weight: 700; text-transform: uppercase; letter-spacing: .05em;
}
.per-modal.vna-modal.vna-modal .vna-sub > button, .per-modal.vna-modal.vna-modal .vna-bloque-cab > button {
  border: 0 !important; background: none !important; padding: 2px 4px !important; font-size: 12px !important;
  font-weight: 600 !important; text-transform: none; letter-spacing: 0; color: inherit !important; opacity: 1; cursor: pointer;
}
.per-modal.vna-modal.vna-modal .vna-sub > button:hover, .per-modal.vna-modal.vna-modal .vna-bloque-cab > button:hover { opacity: 1; text-decoration: underline; }
.per-modal.vna-modal.vna-modal .vna-bloque { display: flex !important; flex-direction: column !important; gap: 9px !important; border: 0 !important; padding: 0 !important; background: none !important; }
.per-modal.vna-modal.vna-modal > .cvn-pie {
  background: var(--vnv-marca, #f2c200) !important; color: var(--vnv-marca-txt, #1d1a06) !important;
  display: flex !important; align-items: center !important; justify-content: space-between !important; gap: 10px !important;
  padding: 10px 16px !important; margin: 0 !important; border: 0 !important; flex: none !important; position: static !important;
}
.per-modal.vna-modal.vna-modal > .cvn-pie .cvn-pie-nota { color: var(--vnv-marca-txt, #1d1a06) !important; font-size: 12px !important; opacity: 1; font-style: normal !important; }
.per-modal.vna-modal.vna-modal > .cvn-pie .per-pie {
  background: none !important; border: 0 !important; padding: 0 !important; margin: 0 !important;
  display: flex !important; gap: 8px !important; position: static !important; width: auto !important;
}
/* ══ rc · BOLETO SIN MEMBRETE ══ */
.bsm { display: flex; flex-direction: column; gap: 12px; }
.bter-nuevo { white-space: nowrap; }
.rvc-mal { color: #c0392b; font-weight: 700; }
.rvc-bien { color: var(--text); font-weight: 700; }
.rvc-vacio { padding: 18px 4px; font-size: 14px; }
/* ri: barra de arriba en un bloque; estado guardado / sin guardar */
.bter-bloque, .bsm-barra { border: 1px solid rgba(127,127,127,.3); border-radius: 12px; padding: 8px 12px; background: rgba(127,127,127,.06); }
.bter-bloque { margin-bottom: 12px; }
.bsm-barra { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.bsm-barra-der { margin-left: auto; display: flex; gap: 8px; flex-wrap: wrap; align-items: center; }
.bsm-estado { font-size: 12.5px; font-weight: 700; padding: 3px 10px; border-radius: 99px; }
.bsm-estado--no { color: var(--text); background: rgba(224,166,58,.16); }
.bsm-estado--ok { color: var(--text); background: rgba(34,197,94,.15); }
.bsm-otros { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; border: 1px solid rgba(127,127,127,.35); border-radius: 10px; padding: 8px 10px; }
.bsm-otros .bsm-ftit { margin: 0; }
.bsm-otro { display: inline-flex; align-items: center; gap: 6px; border: 1px solid rgba(127,127,127,.35); border-radius: 8px; padding: 3px 6px; }
.bsm-otro img { width: 48px; height: 36px; object-fit: cover; border-radius: 4px; }
.bsm-otro input, .bsm-otro-nuevo input { font: inherit; font-size: 13px; border: 1px solid rgba(127,127,127,.4); border-radius: 6px; padding: 4px 8px; background: transparent; color: inherit; min-width: 160px; }
.bsm-otro-nuevo { display: inline-flex; gap: 6px; align-items: center; margin-left: auto; }
.bsm-otro-nuevo .lu-btn { cursor: pointer; }
.bsm-lugar { font-size: 14px !important; font-weight: 700; }
.bsm-acciones { display: flex; gap: 8px; align-items: center; justify-content: flex-end; flex-wrap: wrap; }
.bsm-nota { margin-right: auto; font-size: 12.5px; opacity: 1; }
.bsm-fotos { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; }
.bsm-fgrupo { border: 1px solid rgba(127,127,127,.35); border-radius: 10px; padding: 8px 10px 10px; }
.bsm-ftit { display: flex; align-items: center; justify-content: space-between; gap: 8px; flex-wrap: wrap; font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: .05em; margin-bottom: 6px; }
.bsm-lado { display: inline-flex; align-items: center; gap: 2px; padding: 2px; border-radius: 8px; border: 1px solid rgba(127,127,127,.35); text-transform: none; letter-spacing: 0; font-weight: 500; }
.bsm-lado-rot { font-size: 12px; opacity: 1; padding: 0 4px; }
.bsm-lado-op { border: 0; background: none; color: inherit; font: inherit; font-size: 12px; padding: 3px 9px; border-radius: 6px; cursor: pointer; opacity: 1; }
.bsm-lado-op:hover { opacity: 1; background: rgba(127,127,127,.15); }
.bsm-lado-op--on { opacity: 1; font-weight: 700; background: var(--vnv-marca, #2f6fbf); color: var(--vnv-marca-txt, #fff); }
.bsm-fpar { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.bsm-foto { position: relative; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px; min-height: 84px; border: 1px dashed rgba(127,127,127,.55); border-radius: 8px; cursor: pointer; font-size: 12.5px; padding: 4px; text-align: center; overflow: hidden; }
.bsm-foto:hover { border-color: var(--vnv-marca, #3b82f6); }
.bsm-foto--con { border-style: solid; }
.bsm-foto img { max-width: 100%; max-height: 64px; object-fit: contain; border-radius: 4px; }
.bsm-foto em { font-style: normal; font-size: 12px; line-height: 1.3; opacity: .85; }
.bsm-ayuda { margin: 0; font-size: 12px; opacity: 1; }
.bsm-hoja { background: #fff; color: #000; max-width: 820px; width: 100%; margin: 0 auto; padding: 28px 34px 34px; border-radius: 4px; box-shadow: 0 2px 12px rgba(0,0,0,.3); box-sizing: border-box; }
.bsm-hoja * { color: #000; }
.bsm-lugar { display: flex; justify-content: flex-start; gap: 6px; margin-bottom: 8px; font-size: 12.5px; flex-wrap: wrap; }
.bsm-lugar label { display: flex; align-items: center; gap: 6px; }
.bsm-lugar input { border: 0; border-bottom: 1px solid #9aa3ad; background: transparent; font: inherit; padding: 2px 4px; min-width: 120px; color: #000; }
.bsm-titulo { text-align: center; font-weight: 800; font-size: 17px; letter-spacing: .06em; margin: 0 0 14px; padding-bottom: 10px; border-bottom: 2px solid #111; }
.bsm-texto { font-size: 12.5px; line-height: 1.55; margin: 0 0 6px; text-align: justify; }
.bsm-sec { display: flex; align-items: center; gap: 10px; font-size: 12px; font-weight: 800; letter-spacing: .08em; text-transform: uppercase; border-bottom: 1px solid #111; padding: 4px 0; margin: 14px 0 8px; }
.bsm-traer { margin-left: auto; display: flex; gap: 6px; align-items: center; text-transform: none; letter-spacing: 0; font-weight: 400; }
.bsm-traer input { width: 96px; border: 1px solid #9aa3ad; border-radius: 4px; padding: 3px 6px; font: inherit; font-size: 13px; background: #fff; }
.bsm-hoja .bsm-traer .lu-btn { color: #000 !important; border-color: #9aa3ad !important; background: #f4f6f8 !important; }
.bsm-edit { font-style: normal; font-size: 12px; font-weight: 700; letter-spacing: .04em; padding: 1px 7px; border-radius: 99px; background: #2f6fbf; color: #fff !important; }
.bsm-g4 { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 6px; }
.bsm-g1 { display: grid; grid-template-columns: 1fr; gap: 6px; }
.bsm-c { display: flex; flex-direction: column; border: 1px solid #9aa3ad; border-radius: 3px; padding: 3px 7px 4px; min-width: 0; }
.bsm-c--2 { grid-column: span 2; }
.bsm-c small { display: flex; justify-content: space-between; gap: 6px; font-size: 12px; letter-spacing: .06em; text-transform: uppercase; color: #000 !important; }
.bsm-c small i { font-style: normal; font-weight: 700; color: #000 !important; text-transform: none; letter-spacing: 0; }
.bsm-c input { border: 0; outline: 0; background: transparent; font: inherit; font-size: 13px; font-weight: 600; padding: 1px 0; color: #000; width: 100%; min-width: 0; }
.per-modal .com-cuerpo .bsm .bsm-hoja label.bsm-c > input.bsm-in.bsm-in:not(.x1):not(.x2):not(.x3), .bsm-hoja .bsm-c input:focus { border: 0 !important; background: transparent !important; box-shadow: none !important; height: auto !important; min-height: 0 !important; padding: 1px 0 !important; border-radius: 0 !important; color: #000 !important; }
.bsm-hoja .bsm-lugar input:not([type=date]) { border-width: 0 0 1px !important; border-radius: 0 !important; background: transparent !important; box-shadow: none !important; }
.bsm-hoja .bsm-cond { color: #000 !important; background: #f7faff !important; }
.bsm-c:focus-within { border-color: #2f6fbf; box-shadow: 0 0 0 2px rgba(47,111,191,.18); }
.bsm-c--foto { background: #fff6e0; border-color: #e0a63a; }
.bsm-cond { width: 100%; box-sizing: border-box; border: 1px dashed #2f6fbf; border-radius: 4px; padding: 8px 10px; background: #f7faff; font: inherit; font-size: 12.5px; line-height: 1.6; color: #000; resize: vertical; }
.bsm-partes { display: grid; grid-template-columns: 1fr 1fr; gap: 22px; }
.bsm-firmas { display: grid; grid-template-columns: 1fr 1fr; gap: 40px; margin-top: 52px; }
.bsm-firmas > div { border-top: 1px solid #111; text-align: center; font-size: 12px; padding-top: 6px; }
@media (max-width: 760px) {
  .bsm-fotos { grid-template-columns: 1fr; }
  .bsm-hoja { padding: 18px 14px; }
  .bsm-g4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .bsm-partes, .bsm-firmas { grid-template-columns: 1fr; }
}
/* ra: la ventanita de Documentación (abre dentro del modal de ventas) entra
   en el modal, que ahora es más angosto; antes el «Listo» quedaba afuera. */
.vnv-modal.vnv-fijo .per-overlay.per-overlay.per-overlay > .per-modal.doc-modal.doc-modal.doc-modal.doc-modal.doc-modal,
.gv-root .gv-panel-proceso .vnv-modal.vnv-fijo .per-overlay > .per-modal.doc-modal.doc-modal.doc-modal.doc-modal.doc-modal { width: min(760px, 92%) !important; max-width: 92% !important; max-height: 92% !important; }
/* ══ ra · MODAL DE VENTAS MÁS PROLIJO (08/10/2026, Ramiro: «nítido y moderno
   con este nuevo tamaño, un poquito más angosto, sin grandes cambios»).
   · 1140 de ancho en vez de 1278: las cajas ya no son tan largas.
   · Todas las cajas del mismo alto y la misma esquina.
   · Gastos de otorgamiento: el total y los tres importes con su cajita, sin
     paréntesis; antes las cajitas no se veían y el renglón era más alto que
     los demás y se montaba sobre el borde de la tarjeta.
   · El importe del usado y «Sin usado» centrados en su caja. ══ */
@media (min-width: 900px) {
  .vnv-modal.vnv-fijo,
  .gv-root .gv-panel-proceso > .per-overlay > .per-modal.vnv-modal.vnv-fijo { width: 1140px !important; max-width: 1140px !important; }
  .gv-root .gv-panel-proceso > .per-overlay > .per-modal.vnv-fijo { max-width: 1140px !important; }
}
.vnv-fijo .vnb .per-campo > input, .vnv-fijo .vnb .per-campo > output, .vnv-fijo .vnb .per-campo > select,
.vnv-fijo .vnb .cat-disparador, .vnv-fijo .vnb .vnv-usado-txt, .vnv-fijo .vnv-mesanio input,
.vnv-fijo .vnb .per-campo--trio > .vnv-trio { border-radius: 6px !important; }
.vnv-fijo .vnb .per-campo > output, .vnv-fijo .vnb .vnv-usado-txt { display: flex !important; align-items: center; justify-content: flex-end; box-sizing: border-box; }
.vnv-fijo .vnb .per-campo--trio > .vnv-trio { height: 28px !important; min-height: 0 !important; padding: 0 3px !important; gap: 4px !important; align-items: center; }
.vnv-fijo .vnv-trio > input, .vnv-fijo .vnv-trio > .vn-monto {
  height: 22px !important; min-height: 0 !important; font-size: 15px; padding: 0 6px !important;
  background: rgba(127,127,127,.16) !important; border-radius: 4px !important; }
.vnv-fijo .vnv-trio > input:first-child { flex: 1.5 1 0; font-weight: 700; }
.vnv-fijo .vnv-trio-par { display: none !important; }
.vnv-fijo .vnv-trio-p { font-size: 13px; font-weight: 700; padding-left: 4px; }
.vnv-fijo .vnv-trio > .vnv-trio-p:nth-of-type(2) { border-left: 1px solid rgba(127,127,127,.45); padding-left: 8px; margin-left: 2px; }
.vnv-fijo .vnb .vnv-cargar-usado { color: #ffffff !important; background: rgba(255,255,255,.16) !important; border: 1px solid rgba(255,255,255,.55) !important; font-weight: 700; }
.vnv-fijo .vnb .vnv-cargar-usado:disabled { opacity: .75; }
.vnv-fijo.mo-claro .vnb .vnv-usado-txt, .vnv-fijo.mo-claro .vnb .per-campo > output { border: 1px solid #cfd6df !important; box-shadow: none !important; }
/* Con 1140 de ancho el pie de una venta cargada (Modificar, Factura, DUV,
   Boleto, WhatsApp, Anular, Documentación, Cerrar) no entraba: botones con
   menos aire a los costados. Lo mismo los atajos de arriba, para que el
   buscador no quede angosto cuando aparece «Soltar unidad». */
@media (min-width: 900px) {
  .vnv-modal.vnv-fijo .vnv-pie .lu-btn { padding-left: 7px !important; padding-right: 7px !important; font-size: 13.5px !important; }
  .vnv-modal.vnv-fijo .vnv-pie { gap: 5px !important; padding-left: 10px !important; padding-right: 10px !important; }
  .vnv-modal.vnv-fijo .vnv-pie-acciones { min-width: 340px !important; gap: 6px !important; }
  .vnv-fijo .vnvb-pill { padding-left: 12px !important; padding-right: 12px !important; }
  .vnv-fijo .vnvb-pill--doble > button { padding-left: 12px !important; padding-right: 12px !important; }
}
/* 4) Foto 4 · el desplegable del buscador: la parte izquierda (interno y
      unidad) +1 punto, la derecha (agente, estado, fecha) +3. */
.vnv-fijo .bap-item > strong,
.vnv-fijo .bap-item > span:not(.bap-agente):not(.vnv-resultado-est):not(.bap-donde) { font-size: 15.5px; }
.vnv-fijo .bap-item .bap-agente { font-size: 13.5px; padding: 3px 10px; }
.vnv-fijo .bap-item .vnv-resultado-est, .vnv-fijo .bap-item .bap-donde { font-size: 15px; }
.vnv-fijo .bap-item .bap-fecha { font-size: 13.5px; }
.vnv-fijo .bap-rotulo { font-size: 13px; }

/* ── rm · Calidad y Scoring: la forma de envío y la tanda, sobre la lista ── */
.cc-tanda-barra { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; padding: 8px 12px; margin: 6px 0; border: 1px solid var(--border, #2a3345); border-radius: 10px; background: var(--panel, #161c29); font-size: 13.5px; }
.cc-tanda-barra .cc-tanda-btn, .cc-tanda-barra .cc-tanda-nota { margin-left: auto; }
.tcg-claro .cc-tanda-barra, .mo-claro .cc-tanda-barra { background: #fff; border-color: #d5dbe3; }
/* ro: barra de tanda común (Leads, Cobranzas) y lo que la acompaña. */
.sec-tanda-der { display: inline-flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.sec-tanda-msj { display: inline-flex; align-items: center; gap: 8px; font-size: 13px; }
.sec-tanda-msj select { padding: 6px 8px; border-radius: 8px; border: 1px solid var(--border, #2a3345); background: var(--panel2, #1b2233); color: inherit; font: inherit; }
.tcg-claro .sec-tanda-msj select { background: #fff; border-color: #d5dbe3; }
.sec-msj-link { display: flex; justify-content: flex-end; margin: -2px 0 6px; }
.sec-msj { display: grid; gap: 10px; margin: 6px 0 10px; }
.lead-msg { margin: 6px 0 4px; }
.cym-comu { padding: 14px 18px; }
.cpb-wa-aviso { display: block; margin: 6px 0; font-size: 12.5px; }
.cpb .sec-tanda-barra { margin: 10px 0; }
/* ro (Ramiro): en modo oscuro las letras de los campos del modal de ventas
   van BLANCAS, también en consulta (campo apagado). Antes quedaban grises y
   chicas: «ZORZENON…», «DIRECTAS». Mismo tamaño que el resto de los campos. */
.vnv-modal:not(.mo-claro) .vnb .per-campo > input,
.vnv-modal:not(.mo-claro) .vnb .per-campo > select,
.vnv-modal:not(.mo-claro) .vnb .cat-disparador,
.vnv-modal:not(.mo-claro) .vnb .cat-disparador > span:not(.cat-flecha),
.vnv-modal:not(.mo-claro) .vnv-mesanio input,
.vnv-modal:not(.mo-claro) .vnb .per-campo > input:disabled,
.vnv-modal:not(.mo-claro) .vnb .per-campo > select:disabled,
.vnv-modal:not(.mo-claro) .vnb .cat-disparador:disabled,
.vnv-modal:not(.mo-claro) .vnv-mesanio input:disabled { color: #ffffff !important; -webkit-text-fill-color: #ffffff; }
.vnv-modal:not(.mo-claro) .vnb .cat-disparador:disabled { opacity: 1 !important; }
.vnv-fijo .vnb .cat-disparador > span:not(.cat-flecha) { font-size: inherit; }
/* rp (Maxi, 07/10): en modo claro, las mismas letras van NEGRAS (no grises). */
.vnv-modal.mo-claro .vnb .per-campo > input,
.vnv-modal.mo-claro .vnb .per-campo > select,
.vnv-modal.mo-claro .vnb .cat-disparador,
.vnv-modal.mo-claro .vnb .cat-disparador > span:not(.cat-flecha),
.vnv-modal.mo-claro .vnv-mesanio input,
.vnv-modal.mo-claro .vnb .per-campo > input:disabled,
.vnv-modal.mo-claro .vnb .per-campo > select:disabled,
.vnv-modal.mo-claro .vnb .cat-disparador:disabled,
.vnv-modal.mo-claro .vnv-mesanio input:disabled { color: #000 !important; -webkit-text-fill-color: #111827; }
.vnv-modal.mo-claro .vnb .cat-disparador:disabled { opacity: 1 !important; }
/* rp (Maxi y Ramiro, 07/10): «.per-campo span» es la regla de los RÓTULOS
   (chica, gris, mayúscula) y se metía también en el valor elegido de cada
   desplegable de catálogo (cliente, agente, marca, modelo…): por eso se veían
   chicos y grises en todo el sistema. El valor va del tamaño y color del campo:
   blanco en modo oscuro, negro en claro. */
.per-campo .cat-disparador > span:not(.cat-flecha):not(.cat-placeholder) {
  font-size: inherit; color: inherit; text-transform: none; letter-spacing: normal;
}
.per-campo .cat-disparador > .cat-placeholder { font-size: inherit; text-transform: none; letter-spacing: normal; }
/* La Documentación, en el pie, junto al Cerrar. */
.vnv-pie-doc { display: inline-flex; align-items: center; margin-left: 8px; }
.vnv-pie-doc .doc-boton-fila { display: inline-flex; margin: 0; }
/* rp: con la Documentación en el pie son 8 botones. Entran en UN renglón si
   la nota de la izquierda se acorta sola («…», el texto completo queda en el
   título) y los botones llevan un poco menos de relleno. En el celular no se
   toca: ahí el pie baja de renglón como siempre. */
@media (min-width: 900px) {
  .vnv-fijo .vnv-pie { flex-wrap: nowrap; }
  .vnv-fijo .vnv-pie > * { flex-shrink: 0; }
  .vnv-fijo .vnv-pie > .vnv-pie-nota { flex: 1 1 0; min-width: 0; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
  .vnv-fijo .vnv-pie { gap: 5px; }
  .vnv-fijo .vnv-pie .lu-btn { padding-left: 10px !important; padding-right: 10px !important; font-size: 14px !important; }
  .vnv-fijo .vnv-pie .vnv-pie-doc { margin-left: 3px; }
}
/* ro: Enter automático (motor de la PC). */
.motor-enter .motor-fila { flex-wrap: wrap; gap: 12px; align-items: center; }
.motor-espera { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; }
.motor-chip { font-size: 12px; font-weight: 700; padding: 3px 10px; border-radius: 999px; border: 1px solid var(--border, #2a3345); }
.motor-chip--on { color: var(--text); border-color: #16a34a; }
.motor-chip--off { opacity: 1; }
.motor-ojo { color: #d97706; }
.crm-env-enter { font-size: 12.5px; margin-left: 8px; }
.motor-pasos { margin: 8px 0 12px; padding-left: 22px; display: grid; gap: 8px; font-size: 13px; }
.motor-pasos li { line-height: 1.45; }
.motor-pasos li > span { margin-left: 8px; }
.motor-bajar { vertical-align: middle; }
.cc-envios { flex: 1 1 auto; min-height: 0; overflow: auto; padding: 4px 2px; }
.crm-camp-forma { margin-top: 8px; }
/* rr · Tablas › Vendedores: vigente y en qué vende. */
/* rw · Tablas › Vendedores: tabla de vigencia y tipo al lado de la lista. */
.abm3-cols--vend { grid-template-columns: minmax(0, 380px) minmax(0, 1fr); }
.vend-tab { display: flex; flex-direction: column; min-height: 0; background: var(--panel-2, #161c2a); border: 1px solid var(--border, #252d3f); border-radius: 10px; overflow: hidden; }
.vend-tab--vacio { padding: 14px; color: var(--text); font-size: 13px; display: block; }
.vend-tab-cab { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; padding: 8px 11px; font-size: 13px; border-bottom: 1px solid var(--border, #252d3f); }
.vend-tab-res { color: var(--text); font-size: 12px; }
.vend-tab-cue { flex: 1; min-height: 0; overflow: auto; }
.vend-tab-t { width: 100%; border-collapse: collapse; font-size: 13px; }
.vend-tab-t th { position: sticky; top: 0; background: var(--panel-2, #161c2a); font-size: 13px; text-transform: uppercase; letter-spacing: .05em; padding: 6px 8px; border-bottom: 1px solid var(--border, #252d3f); text-align: center; }
.vend-tab-t th:first-child, .vend-tab-t td:first-child { text-align: left; }
.vend-tab-t td { padding: 5px 8px; border-bottom: 1px solid var(--border, #252d3f); text-align: center; }
.vend-tab-t input[type="checkbox"] { width: 17px; height: 17px; cursor: pointer; }
.vend-tab-nom { cursor: pointer; font-weight: 600; }
.vend-tab-t tr.on td { background: rgba(47,111,191,.14); }
.vend-tab-baja .vend-tab-nom { opacity: 1; text-decoration: line-through; }
.vend-tab-pie { padding: 6px 11px; font-size: 12px; color: var(--text); border-top: 1px solid var(--border, #252d3f); }
.vend-tab-vacio { color: var(--text); padding: 14px !important; }
@media (max-width: 760px) { .abm3-cols--vend { grid-template-columns: 1fr; } }
.vend-atr { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin: 10px 0 4px; padding: 10px 12px;
  border: 1px solid var(--border, #2a3345); border-radius: 10px; font-size: 13px; }
.vend-atr--vacio { color: var(--text); }
.vend-atr-nom { font-size: 14px; margin-right: 6px; }
.vend-atr-vig { display: inline-flex; align-items: center; gap: 6px; cursor: pointer; }
.vend-atr-tit { color: var(--text); margin-left: 8px; }
.vend-atr-tipo { border: 1px solid var(--border, #2a3345); background: transparent; color: inherit; border-radius: 999px;
  padding: 4px 12px; font: inherit; font-size: 12.5px; cursor: pointer; }
.vend-atr-tipo.on { background: var(--accent-blue, #2f6fbf); border-color: var(--accent-blue, #2f6fbf); color: var(--casa-activa-tinta, #fff); font-weight: 600; }
.vend-atr-aviso { font-size: 12px; color: var(--text); }
/* rr · Suscripción: el objetivo del equipo, primero y destacado. */
.sus-obj-equipo span { font-weight: 700; }
/* rt · Propuesta › Unidades: la lista de precios del plan. */
.pc-lista { border: 1px solid var(--border, #2a3345); border-radius: 10px; padding: 10px 12px; margin-bottom: 12px; display: grid; gap: 8px; }
.pc-lista-cab { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; font-size: 13px; }
.pc-lista-cab span { opacity: 1; }
.pc-lista-aviso { font-size: 13px; font-weight: 600; color: #000; }
.pc-lista-aviso--mal { color: #b3261e; }
.pc-lista-prev { display: grid; gap: 8px; overflow-x: auto; }
.pc-lista-prev-tit { font-size: 12px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; opacity: 1; }
.pc-lista-tabla td, .pc-lista-tabla th { font-size: 13px; padding: 5px 8px; }
.pc-lista-falta td { opacity: 1; font-style: italic; }
.pc-lista-nueva td { background: rgba(21,128,61,.08); }
.pc-lista-acc { display: flex; gap: 8px; justify-content: flex-end; }
/* ru · Boleto de adjudicado: cambio de modelo. */
.bad-lista-sel { width: 100%; }
.bad-cm { margin-top: 12px; border: 1px solid var(--border, #2a3345); border-radius: 10px; padding: 10px 12px; display: grid; gap: 8px; }
.bad-cm--falta { border-style: dashed; }
.bad-cm-tit { font-size: 12px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; opacity: 1; }
.bad-cm-cuenta { display: flex; flex-wrap: wrap; gap: 6px 14px; font-size: 13px; align-items: baseline; }
.bad-cm-dif { font-size: 15px; font-weight: 800; }
.bad-cm-imp { max-width: 260px; }
.bad-cm-cobro { display: flex; flex-wrap: wrap; gap: 6px 14px; align-items: baseline; font-size: 13px; }
.bad-cm-saldo { color: #000; }
.bad-cm-saldo--falta { color: #b45309; }
/* rs · Suscripción: plan de la Propuesta, bonificaciones del mes y cartera. */
.sus-plan-prop select { font-weight: 600; }
.sus-bonmes { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; margin: 4px 0 12px; }
.sus-bonmes-tit { font-size: 12px; font-weight: 700; opacity: 1; margin-right: 4px; }
.sus-bonmes-chip { border: 1px solid var(--border, #2a3345); background: transparent; color: inherit; border-radius: 999px; padding: 5px 12px; font: inherit; font-size: 12.5px; cursor: pointer; }
.sus-bonmes-chip.on { background: var(--accent-blue, #2f6fbf); border-color: var(--accent-blue, #2f6fbf); color: var(--casa-activa-tinta, #fff); font-weight: 600; }
.sus-cartera { position: relative; }
.sus-cartera-lista { display: grid; gap: 4px; margin-top: 6px; max-height: 260px; overflow: auto; }
.sus-cartera-it { display: flex; justify-content: space-between; gap: 10px; text-align: left; border: 1px solid var(--border, #2a3345); background: transparent; color: inherit; border-radius: 8px; padding: 7px 10px; font: inherit; font-size: 13px; cursor: pointer; }
.sus-cartera-it span { opacity: 1; font-size: 12px; }
.sus-cartera-it:hover { border-color: var(--accent-blue, #2f6fbf); }
.sus-cartera-ref { margin-top: 6px; font-size: 12.5px; padding: 6px 10px; border-radius: 8px; background: rgba(47,111,191,.12); }
/* rr · Propuesta: el nombre del plan a la izquierda. */
.pc-celda--nombre { text-align: left !important; font-weight: 600; }
/* rs · Propuesta: tramos propios por plan, bonificaciones y «Traer lo publicado». */
.pc-chips { display: flex; flex-wrap: wrap; gap: 4px; }
.pc-chip { background: rgba(47,111,191,.14); color: inherit; border-radius: 6px; padding: 2px 7px; font-size: 12px; white-space: nowrap; }
.pc-chip b { font-weight: 700; }
.pc-fin-plan { display: flex; align-items: center; gap: 4px; }
.pc-fin-abrir { border: 0; background: transparent; color: inherit; font-size: 14px; cursor: pointer; padding: 2px 4px; }
.pc-fin-resumen { cursor: pointer; }
.pc-fin-aviso { margin-top: 4px; font-size: 12px; color: #b45309; font-weight: 600; }
.pc-fin-det > td { background: rgba(47,111,191,.06); }
.pc-fin-tit { font-size: 12px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; opacity: 1; margin: 2px 0 8px; }
.pc-tramos { display: grid; grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); gap: 8px; }
.pc-tramo { border: 1px solid var(--border, #2a3345); border-radius: 8px; padding: 6px 8px; display: grid; gap: 4px; position: relative; }
.pc-tramo label { display: grid; gap: 2px; font-size: 12px; text-transform: uppercase; letter-spacing: .05em; opacity: 1; }
.pc-tramo-rango { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; }
.pc-tramo-x { position: absolute; top: 2px; right: 4px; border: 0; background: transparent; color: inherit; cursor: pointer; font-size: 12px; }
.pc-tramo--agregar { border-style: dashed; background: transparent; color: var(--text); font: inherit; font-weight: 700; cursor: pointer; min-height: 70px; }
/* rw · Financiaciones como Excel: cada tramo es una columna con las cuotas arriba y el importe abajo. */
.pc-fin-xl td.pc-fin-celda { padding: 0; vertical-align: top; height: auto; }
.pc-fin-xl td.pc-fin-celda > input { display: block; width: 100%; box-sizing: border-box; }
.pc-fin-xl .pc-fin-rango { height: 24px; font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: .03em;
  background: color-mix(in srgb, var(--accent-amber) 12%, var(--panel-2)); border-bottom: 1px solid var(--border); text-align: center; }
.pc-fin-xl .pc-fin-imp { height: 28px; }
.pc-fin-xl .pc-fin-celda--vacia .pc-fin-rango { background: transparent; }
/* rx · ✕ para quitar un tramo (dos toques) */
.pc-fin-xl td.pc-fin-celda { position: relative; }
.pc-fin-quitar { position: absolute; top: 1px; right: 1px; border: 0; background: transparent; cursor: pointer;
  font: inherit; font-size: 12px; line-height: 1; padding: 2px 3px; border-radius: 4px; color: var(--text); opacity: 1; }
.pc-fin-quitar:hover, .pc-fin-quitar:focus { opacity: 1; color: #dc2626; background: rgba(220,38,38,.12); outline: none; }
.pc-fin-quitar--armado { opacity: 1; color: #ffffff; background: #dc2626; font-weight: 700; padding: 2px 5px; }
.pc-fin-xl .pc-xl-in:disabled { opacity: .35; cursor: default; }
.pc-fin-xl .pc-xl-in::placeholder { opacity: .45; font-weight: 400; text-transform: none; }
.pc-tabla-planes td.pc-tr-td { padding: 0 !important; }
.pc-tr-fila { display: flex; flex-wrap: nowrap; height: 100%; }
.pc-tr-col { display: flex; flex-direction: column; min-width: 84px; border-right: 1px solid var(--border, #2a3345); text-align: center; }
.pc-tr-col:last-child { border-right: 0; }
.pc-tr-r { font-size: 12px; font-weight: 700; text-transform: uppercase; padding: 2px 6px; border-bottom: 1px solid var(--border, #2a3345);
  background: color-mix(in srgb, var(--accent-amber) 12%, var(--panel-2)); white-space: nowrap; }
.pc-tr-col b { font-size: 12.5px; padding: 3px 6px; white-space: nowrap; }
.pc-fin-alerta { color: #b45309; font-weight: 700; margin-right: 8px; cursor: help; }
.pc-fin-avisos { margin-top: 8px; display: grid; gap: 2px; }
.pc-vacio-acc { display: flex; flex-wrap: wrap; gap: 8px; justify-content: center; }
.pc-bon { display: grid; gap: 10px; }
.pc-bon-barra { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.pc-bon-tabla { min-width: 760px !important; }
.pc-bon-th { display: flex; align-items: center; gap: 4px; }
.pc-bon-tit { flex: 1; min-width: 0; border: 1px dashed transparent; background: transparent; color: inherit; font: inherit; font-weight: 700; text-transform: uppercase; letter-spacing: .05em; font-size: 12px; padding: 3px 4px; border-radius: 4px; }
.pc-bon-tit:hover, .pc-bon-tit:focus { border-color: var(--border, #2a3345); outline: none; }
.pc-bon-x { border: 0; background: transparent; color: inherit; cursor: pointer; font-size: 12px; opacity: 1; }
.pc-bon-celda { width: 100%; border: 1px solid transparent; background: transparent; color: inherit; font: inherit; font-size: 13px; resize: vertical; padding: 4px 6px; border-radius: 6px; min-height: 30px; }
.pc-bon-celda:hover, .pc-bon-celda:focus { border-color: var(--border, #2a3345); outline: none; }

/* wt (20/10/2026, Darío): el precio a Orion escrito a mano se marca en amarillo, con ↺ para volver al de la lista. */
.seg-orion-ed { display: flex; gap: 4px; align-items: center; }
.seg-pz-tabla td .seg-orion-ed .seg-in-orion { flex: 1; min-width: 0; max-width: none; text-align: right; font-weight: 700; }
/* (la clase repetida le gana a la regla general de los campos dentro de una tabla) */
table.crm-tabla-ed.seg-pz-tabla td input.seg-in-orion.seg-manual.seg-manual.seg-manual.seg-manual { background: rgba(230,194,0,.22) !important; box-shadow: inset 0 0 0 1px #e6c200 !important; border-radius: 4px; }
.tcg-claro table.crm-tabla-ed.seg-pz-tabla td input.seg-in-orion.seg-manual.seg-manual.seg-manual.seg-manual,
.mo-claro table.crm-tabla-ed.seg-pz-tabla td input.seg-in-orion.seg-manual.seg-manual.seg-manual.seg-manual { background: #fff1a8 !important; box-shadow: inset 0 0 0 1px #b39500 !important; color: #000 !important; }
.seg-volver-lista { flex: none; padding: 2px 6px; line-height: 1.2; }
/* wt: «Sugerido: código» va debajo de la descripción, entero (al lado quedaba cortado). */
.seg-pz-desc:has(.seg-sug) { flex-direction: column; align-items: stretch; gap: 2px; }
.seg-pz-desc .seg-sug { align-self: flex-start; max-width: 100%; margin-top: 0; }
/* wx (20/10/2026, Vesubio): los estados nuevos, con la misma forma que los de siempre. */
.seg-estado--guardada { background: rgba(122,108,232,.18); color: var(--text); }
.seg-estado--nosalio { background: rgba(127,127,127,.10); color: var(--text); border: 1px dashed rgba(127,127,127,.5); }
.mo-claro .seg-estado--guardada { color: #000; }
.mo-claro .seg-estado--nosalio { color: #000; }
.seg-por-persona { opacity: 1; }
.seg-enviada-fecha { width: auto; min-width: 0; }
.seg-orion-fila--revisar td, .seg-orion-fila--falta td { color: #ef6b6b; }
.mo-claro .seg-orion-fila--revisar td, .mo-claro .seg-orion-fila--falta td { color: #b42323; }
.seg-orion-fila--ya td { opacity: 1; }
.seg-orion-cot, .seg-orion-com { min-height: 130px; resize: vertical; }
/* wx: con «Guardada en Orion», la fecha y el resultado, la barra de Orion baja de renglón si no entra (no se sale de la ficha). */
.seg-orion-barra { flex-wrap: wrap; }
.seg-orion-barra .seg-orion-txt { flex: 1 1 0; min-width: 0; }
.seg-orion-barra .seg-resultado, .seg-orion-barra .seg-enviada-fecha { width: auto; flex: none; }
/* (a 1366 entra todo en un renglón, como pidió Ramiro: resultado y fecha más angostos y botones un poco más juntos) */
.seg-orion-barra { gap: 6px; }
.seg-orion-barra .seg-resultado { max-width: 135px; }
.seg-orion-barra .seg-enviada-fecha { width: 122px; padding-left: 6px; padding-right: 4px; }
/* xa (Maxi, 20/10): «.per-campo span» (rótulo chico, gris y en mayúscula) también se metía en las opciones de los
   desplegables de catálogo (la lista de clientes del modal de ventas): se veían chicas y apagadas. Van del tamaño de
   la opción y con la letra del campo (clara en modo oscuro, negra en claro). */
.per-campo .cat-op .cat-op-txt { font-size: inherit; color: inherit; text-transform: none; letter-spacing: normal; }
/* xa (Pauli, 20/10): en su pantalla «Agregar» quedó del ancho de un «+» y se cortó. No se pudo reproducir, pero
   queda blindado: «Agregar» y «×» nunca se achican; si falta lugar, se achica el campo de texto. */
.cvn-cat-alta > .lu-btn:not(:last-child) { flex: 0 0 auto !important; width: auto !important; min-width: max-content !important; }
.cvn-cat-alta > .lu-btn:last-child { flex: 0 0 27px !important; }
.cvn-cat-alta > input { flex: 1 1 0 !important; min-width: 40px !important; width: auto !important; }

/* ══ LETRA DE LOS MODALES (21/10/2026 · xb, Ramiro: «letra al máximo sin que
   los modales salgan cortados»). El tamaño lo pone 2295-LetraModales (zoom por
   dentro, el más grande que entra). Acá, lo que ordena la lectura: el título
   marcado y alineado con el logo, la bajada chiquita en un renglón para no
   desalinearlos, y los nombres de los campos en semi negrita. El de Ventas
   VN/VO («vnv-fijo») no se toca. */
.per-modal.per-modal:not(.vnv-fijo) .per-titulo { font-weight: 800; letter-spacing: .2px; line-height: 1.2; }
.per-modal.per-modal:not(.vnv-fijo) .per-cab .per-sub { font-size: 12px; line-height: 1.3; -webkit-line-clamp: 1; margin-top: 1px; }
.per-modal.per-modal:not(.vnv-fijo) :is(.per-campo, .cvn-cat) > span:first-child { font-weight: 600; }
/* Las solapas de las pantallas, más grandes (entran igual en 1366 al 75 %). */
.gu-carpeta { font-size: 14px; }
/* El zoom del navegador fuera de 100 %, en Ajustes. */
.tcg-aj-medida.tcg-aj-medida--aviso { color: #ff7a6e; }
.tcg-claro .tcg-aj-medida.tcg-aj-medida--aviso { color: #b42318; }
/* El error al guardar la ficha del cliente, en el pie (xb). */
.cvn-pie-nota.cvn-pie-nota--error { color: #fff; font-weight: 700; background: rgba(0,0,0,.28); padding: 3px 8px; border-radius: 6px; }
/* Centro estadístico › Vendedores y localidades (xc): línea de tiempo, desplegables, dos tablas y el ranking. */
.cev { display: flex; flex-direction: column; gap: 12px; }
.cev-oculto { position: absolute; left: -9999px; }
.cev-linea { border: 1px solid var(--border, #2a3345); border-radius: 10px; padding: 12px 16px; display: flex; flex-direction: column; gap: 8px; }
.cev-linea-fila { display: flex; align-items: flex-end; gap: 14px; flex-wrap: wrap; }
.cev-play { min-width: 130px; height: 42px; border-radius: 8px; border: 1px solid var(--casa-activa, #4f8ef7); background: var(--casa-activa, #4f8ef7);
  color: var(--casa-activa-tinta, #fff); font: inherit; font-weight: 700; font-size: 14px; cursor: pointer; }
.cev-play:disabled { opacity: .5; cursor: default; }
.cev-periodo { display: flex; flex-direction: column; gap: 2px; flex: 1 1 260px; }
.cev-periodo span { font-size: 12px; font-weight: 600; color: var(--text); }
.cev-periodo b { font-size: 18px; font-weight: 800; }
.cev-campo { display: flex; flex-direction: column; gap: 3px; font-size: 12px; font-weight: 600; color: var(--text); }
.cev-campo select, .cev-desp { height: 40px; min-width: 200px; border: 1px solid var(--border, #2a3345); border-radius: 8px; padding: 0 10px;
  font: inherit; font-size: 14px; font-weight: 600; color: var(--text, #e6eaf0); background: var(--panel, #151b26); }
.cev-desp { display: flex; align-items: center; justify-content: space-between; gap: 10px; cursor: pointer; min-width: 230px; }
.cev-vend { position: relative; }
.cev-lista { position: absolute; top: 100%; right: 0; margin-top: 4px; z-index: 20; width: 320px; max-height: 380px; overflow-y: auto;
  background: var(--panel, #151b26); border: 1px solid var(--border, #2a3345); border-radius: 10px; box-shadow: 0 8px 24px rgba(0,0,0,.25); padding: 6px 0; }
.cev-op { display: flex; align-items: center; gap: 10px; padding: 6px 14px; font-size: 14px; font-weight: 500; color: var(--text, #e6eaf0); cursor: pointer; }
.cev-op input { width: 18px; height: 18px; margin: 0; }
.cev-op small { margin-left: auto; font-size: 12px; color: var(--text); }
.cev-op--todos { font-weight: 700; border-bottom: 1px solid var(--border, #2a3345); padding: 8px 14px; }
.cev-op--vacio { color: var(--text); cursor: default; font-size: 12.5px; }
.cev-op-tit { padding: 8px 14px 2px; font-size: 12px; font-weight: 700; letter-spacing: .4px; color: var(--text); }
.cev-lista-pie { display: flex; justify-content: flex-end; padding: 8px 14px 4px; border-top: 1px solid var(--border, #2a3345); margin-top: 6px; }
.cev-listo { height: 34px; padding: 0 18px; border-radius: 8px; border: 1px solid var(--casa-activa, #4f8ef7); background: var(--casa-activa, #4f8ef7);
  color: var(--casa-activa-tinta, #fff); font: inherit; font-size: 13px; font-weight: 700; cursor: pointer; }
.cev-rango input { width: 100%; height: 26px; accent-color: var(--casa-activa, #4f8ef7); margin: 0; }
.cev-marcas { display: grid; grid-template-columns: repeat(24, minmax(0, 1fr)); }
.cev-marca { border: 0; border-top: 3px solid var(--border, #2a3345); background: none; padding: 2px 0 0; font: inherit; font-size: 12px;
  color: var(--text); cursor: pointer; white-space: nowrap; overflow: hidden; }
.cev-marca.on { border-top-color: var(--casa-activa, #4f8ef7); color: var(--text, #e6eaf0); }
.cev-marca.es-desde { font-weight: 800; }
.cev-ind { margin-bottom: 0; grid-template-columns: repeat(4, minmax(0, 1fr)); }
.cev-ind .sc-indicador-card { text-align: center; }
.cev-cuerpo { display: flex; flex-wrap: wrap; gap: 14px; align-items: flex-start; }
.cev-grupos { flex: 999 1 560px; min-width: 0; display: flex; flex-direction: column; gap: 14px; }
.cev-rank { flex: 1 1 340px; min-width: 0; }
.cev-caja { border: 1px solid var(--border, #2a3345); border-radius: 10px; overflow: hidden; }
.cev-caja-cab { background: var(--casa-activa, #4f8ef7); color: var(--casa-activa-tinta, #fff); padding: 8px 14px; font-size: 13px; font-weight: 800;
  letter-spacing: .4px; display: flex; justify-content: space-between; gap: 8px; flex-wrap: wrap; }
.cev-caja-cab span + span { font-weight: 600; letter-spacing: 0; }
.cev-t { width: 100%; border-collapse: collapse; font-size: 13px; }
.cev-t th { padding: 7px 8px; text-align: center; border-bottom: 1px solid var(--border, #2a3345); background: var(--panel-2, #1c2432); font-weight: 700; }
.cev-t td { padding: 7px 8px; border-bottom: 1px solid var(--border, #2a3345); }
.cev-t td.c { text-align: center; }
.cev-t th:first-child { width: 42px; }
.cev-t .cev-t-barra { width: 30%; }
.cev-nom { font-weight: 600; }
.cev-vacio { text-align: center; color: var(--text); padding: 14px 8px !important; }
.cev-barra { height: 12px; background: var(--panel-2, #1c2432); border-radius: 6px; overflow: hidden; }
.cev-barra i { display: block; height: 100%; border-radius: 6px; }
.cev-barra i.es-arriba { background: #1f5fbf; }
.cev-barra i.es-abajo { background: #e07b00; }
.cev-cambio { font-weight: 700; }
.cev-cambio.es-sube { color: var(--text); }
.cev-cambio.es-baja { color: var(--text); }
.cev-nota { margin: 0; padding: 6px 4px; font-size: 12px; color: var(--text); }
.cev-marca-grupo { font-weight: 800; font-size: 15px; letter-spacing: .5px; border-right: 1px solid currentColor; padding-right: 14px; white-space: nowrap; }
.tcg-claro .cev-campo, .tcg-claro .cev-periodo span, .tcg-claro .cev-nota, .tcg-claro .cev-op small, .tcg-claro .cev-op-tit { color: #000; }
.tcg-claro .cev-campo select, .tcg-claro .cev-desp, .tcg-claro .cev-lista { background: #fff; color: #000; border-color: #9aa4b2; }
.tcg-claro .cev-op { color: #000; }
.tcg-claro .cev-t th { background: #e7ecf3; color: #000; border-color: #9aa4b2; }
.tcg-claro .cev-t td { border-color: #d5dbe3; color: #000; }
.tcg-claro .cev-linea, .tcg-claro .cev-caja { border-color: #9aa4b2; }
.tcg-claro .cev-barra { background: #e7ecf3; }
.tcg-claro .cev-marca { color: #000; border-top-color: #d5dbe3; }
.tcg-claro .cev-marca.on { color: #000; border-top-color: #333; }
.tcg-claro .cev-cambio.es-sube { color: #000; }
.tcg-claro .cev-cambio.es-baja { color: #b45309; }
@media (max-width: 760px) {
  .cev-ind { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .cev-campo, .cev-vend { flex: 1 1 100%; }
  .cev-campo select, .cev-desp { width: 100%; min-width: 0; }
  .cev-lista { left: 0; right: auto; width: 100%; }
  .cev-marca { font-size: 0; }
  .cev-marca:first-child, .cev-marca:last-child { font-size: 12px; overflow: visible; }
}
.cev-campo .cev-ver { min-width: 230px; }
.cev-rk-sols { display: flex; gap: 3px; padding: 8px 10px 0; border-bottom: 2px solid var(--casa-activa, #4f8ef7); }
.cev-rk-sol { flex: 1; border: 1px solid var(--border, #2a3345); border-bottom: 0; border-radius: 8px 8px 0 0; background: var(--panel-2, #1c2432);
  color: var(--text); font: inherit; font-size: 13px; font-weight: 600; padding: 7px 8px; cursor: pointer; }
.cev-rk-sol.on { background: var(--casa-activa, #4f8ef7); color: var(--casa-activa-tinta, #fff); border-color: var(--casa-activa, #4f8ef7); font-weight: 700; }
.tcg-claro .cev-rk-sol { background: #f4f6f9; color: #000; border-color: #9aa4b2; }
.tcg-claro .cev-rk-sol.on { background: var(--casa-activa, #4f8ef7); color: var(--casa-activa-tinta, #fff); border-color: var(--casa-activa, #4f8ef7); }
/* Tablas (xd): las solapas en carpetas y los dos botones de Excel a la derecha de la barra. */
.abm-modal .abm-carpetas { gap: 2px; }
.abm-modal .abm-carpetas .gu-carpeta { padding: 7px 9px; font-size: 13px; gap: 5px; }
.abm-modal .abm-carpetas .gu-carpeta-n { font-size: 13px; }
.abm-recuperar .abm-excel { margin-left: auto; display: inline-flex; gap: 8px; }
.abm-recuperar .lu-btn { min-width: 200px; }
@media (max-width: 760px) { .abm-recuperar .abm-excel { margin-left: 0; width: 100%; } .abm-recuperar .abm-excel .lu-btn { flex: 1; min-width: 0; } }
/* Compañías de seguro (xd): los reemplazos de una pieza (sustituciones, alternativos y lo aprendido). */
.seg-sust-btn { margin-left: 4px; border: 1px solid #b45309; background: #fff7ed; color: #000; border-radius: 6px; padding: 1px 6px;
  font: inherit; font-size: 12px; font-weight: 700; cursor: pointer; white-space: nowrap; }
.seg-sust-de { margin-left: 4px; font-size: 12px; color: var(--text); white-space: nowrap; }
.seg-sust-modal { width: min(860px, calc(96vw / var(--tcg-z, 1))); height: auto; max-height: calc(90vh / var(--tcg-z, 1)); }
.seg-sust-t td.c, .seg-sust-t th { text-align: center; }
/* Seguros (xd): la disponibilidad que va a Orion, por casa y por compañía. */
.seg-dispo-t td.c, .seg-dispo-t th { text-align: center; }
.seg-dispo-t .seg-dispo-in { width: 100%; border: 1px solid var(--border, #3a4560); border-radius: 6px; padding: 5px 8px; }
.seg-dispo-sub { margin-top: 10px; }
.seg-dispo-cia .seg-alt-fila { grid-template-columns: 1.2fr 0.8fr 1.6fr 40px; }
/* Seguros (xd): el motor de la casa en el Panel de control y en Configuración. */
.ag-motor-cuerpo { display: grid; grid-template-columns: minmax(0, 1fr); gap: 12px; }
.ag-motor-t td.c, .ag-motor-t th { text-align: center; }
.ag-motor-pasos { margin: 0; padding-left: 20px; display: grid; gap: 4px; font-size: 13px; columns: 1; }
.seg-motor-pl .seg-alt-fila { grid-template-columns: 1fr 1.6fr 0.9fr 40px; }
.seg-motor-pasos { margin-top: 10px; }
@media (max-width: 900px) { .ag-motor-cuerpo { grid-template-columns: 1fr; } }
/* El sello de versión (xd): corto en la esquina; en Ajustes y en el menú, pantallas y servicio por separado. */
.tcg-sello-largo { display: inline-flex; flex-direction: column; gap: 2px; text-align: left; }
.tcg-sello-largo b { font-weight: 700; margin-right: 4px; }
.tcg-sello-nota { font-size: 12px; opacity: 1; white-space: normal; }
/* xd · Compra de 0 km (y toda ficha) en el teléfono: el rótulo va arriba del campo y su ancho fijo de escritorio
   (150 px) se volvía alto en columna: quedaban huecos enormes entre campos. */
@media (max-width: 760px) {
  .com-modal--ficha .per-campo:not(.per-campo--check) > span { flex: 0 0 auto !important; text-align: left; }
}
/* ══ AJUSTES, FORMAL Y SIMÉTRICO (xd, Ramiro: «vista más formal y simétrica por bloques, resaltar los títulos en un
   renglón como un encabezado para identificar rápido el tema») ══
   Dos columnas parejas: las tarjetas de una misma fila tienen el mismo alto. Los dos bloques largos (Tamaño y zoom,
   Del sistema) van arriba y los dos cortos (Apariencia, Esta versión) abajo. Cada título es una franja de encabezado
   de punta a punta de la tarjeta. Los botones de una fila, del mismo tamaño. */
.tcg-ajustes .tcg-aj-grilla { grid-template-columns: repeat(2, minmax(0, 1fr)); align-items: stretch; max-width: 1240px; }
.tcg-ajustes .tcg-aj-grilla > .tcg-aj-seccion,
.tcg-ajustes .tcg-aj-grilla > .tcg-aj-seccion:last-child { padding: 0 0 6px; overflow: hidden; display: flex; flex-direction: column; }
.tcg-ajustes .tcg-aj-grilla > .tcg-aj-seccion--tam { order: 1; }
.tcg-ajustes .tcg-aj-grilla > .tcg-aj-seccion--sis { order: 2; }
.tcg-ajustes .tcg-aj-grilla > .tcg-aj-seccion--apa { order: 3; }
.tcg-ajustes .tcg-aj-grilla > .tcg-aj-seccion--ver { order: 4; }
.tcg-ajustes .tcg-aj-grilla .tcg-aj-titulo,
.tcg-ajustes .tcg-aj-grilla .tcg-aj-titulo--sis {
  margin: 0; padding: 10px 16px; font-size: 12.5px; letter-spacing: .1em; font-weight: 800; color: var(--text, #ecf0f4);
  background: var(--panel-2, #202940); border-left: 0; border-bottom: 2px solid var(--vnv-marca, var(--accent-amber, #f2c200));
}
.tcg-ajustes .tcg-aj-grilla .tcg-aj-titulo--sis { border-bottom-color: #c9a0ff; }
.tcg-ajustes .tcg-aj-grilla .tcg-aj-campos { padding: 4px 16px 6px; flex: 1 1 auto; }
.tcg-ajustes .tcg-aj-campo { min-height: 46px; }
.tcg-ajustes .tcg-aj-rot b { font-size: 13px; }
.tcg-ajustes .tcg-aj-fila-btn .tcg-aj-btn, .tcg-ajustes .tcg-aj-seccion--sis .tcg-aj-btn { min-width: 150px; text-align: center; justify-content: center; }
.tcg-claro .tcg-ajustes .tcg-aj-grilla .tcg-aj-titulo, .tcg-claro .tcg-ajustes .tcg-aj-grilla .tcg-aj-titulo--sis { background: #eef1f6; color: #000; }
.tcg-claro .tcg-ajustes .tcg-aj-grilla > .tcg-aj-seccion { border-color: #9aa4b2; background: #fff; }
@media (max-width: 900px) { .tcg-ajustes .tcg-aj-grilla { grid-template-columns: minmax(0, 1fr); } }
.tcg-ajustes .tcg-aj-seccion--sis .tcg-aj-campo { flex-wrap: nowrap; }
.tcg-ajustes .tcg-aj-seccion--sis .tcg-aj-rot { flex: 1 1 0; }
.tcg-ajustes .tcg-aj-seccion--sis .tcg-aj-ctrl { flex: 0 0 auto; }
.tcg-claro .tcg-ajustes .tcg-aj-btn--sis { color: #000; border-color: #7c3aed; font-weight: 700; }
.tcg-claro .tcg-ajustes .tcg-aj-btn--peligro { color: #b42318; border-color: #d92d20; font-weight: 700; }
/* Tableros (xd): la solapa «Indicadores». */
.tind-solapas { margin: 4px 0 12px; }
.tind { display: flex; flex-direction: column; gap: 14px; }
.tind-periodo { margin: 0; font-size: 13px; font-weight: 700; }
.tind-bloque { border: 1px solid var(--border, #2c3346); border-radius: 12px; overflow: hidden; }
.tind-tit { padding: 9px 14px; font-size: 12.5px; font-weight: 800; letter-spacing: .08em; text-transform: uppercase;
  background: var(--panel-2, #202940); border-bottom: 2px solid var(--vnv-marca, var(--accent-amber, #f2c200)); }
.tind-cards { padding: 12px 14px; margin-bottom: 0; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); }
.tind-card { text-align: center; }
.tind-var.es-sube { color: var(--text); }
.tind-var.es-baja { color: #ff8a8a; }
.tcg-claro .tind-var.es-sube { color: #000; }
.tcg-claro .tind-var.es-baja { color: #b42318; }
.tcg-claro .tind-tit { background: #eef1f6; color: #000; }
.tind-vacio, .tind-ayuda { font-size: 12px; color: var(--text); margin: 0; }
/* Menú del costado (xd): los subtítulos de área (PostVenta: Servicios y Repuestos). */
.tcg-side-area { margin: 10px 10px 4px; padding: 4px 6px 4px 8px; font-size: 12px; font-weight: 800; letter-spacing: .1em; text-transform: uppercase;
  color: var(--text, #ecf0f4); border-left: 3px solid var(--vnv-marca, var(--accent-amber, #f2c200)); background: rgba(127,127,127,.10); border-radius: 0 6px 6px 0; }
.tcg-side-area:first-child { margin-top: 2px; }
.tcg-claro .tcg-side-area { color: #000; background: #eef1f6; }
/* ══ UN SOLO COLOR POR CASA (xd, Ramiro: «el encabezado y el pie de los modales tienen dos colores diferentes y deben
   ser del mismo color; en Renault el más claro de los dos, en Vesubio el más claro y en Ginza el más oscuro») ══
   Vesubio y Ginza tenían dos tonos: el de los modales (--vnv-marca) y el de las solapas y franjas (--casa-activa).
   Ahora es uno solo en todo: Vesubio #0b57d0 (xo, antes #4f8ef7), Ginza #cf2126, Renault #f2c200. «--vnv-marca-fuerte» queda oscuro:
   es el color de letra sobre fondo claro, que necesita contraste. */
.vnv-marca--peugeot, .vnv-modal.vnv-marca--peugeot { --vnv-marca: #0b57d0; --vnv-marca-luz: #0b57d0; }   /* xo: el azul más oscuro */
.vnv-marca--toyota, .vnv-modal.vnv-marca--toyota { --vnv-marca: #cf2126; --vnv-marca-luz: #cf2126; }

/* xe (21/10/2026): el boleto emitido avisa si la ficha del cliente cambió después (se reemite con el mismo número). */
.bol-acciones .lu-btn.bol-ficha-cambio { font-size: 12px; font-weight: 700; white-space: nowrap; border-color: #b45309; color: #b45309; }
:root[data-theme="light"] .bol-acciones .lu-btn.bol-ficha-cambio, .tcg-claro .bol-acciones .lu-btn.bol-ficha-cambio { color: #000; border-color: #7c2d12; }
.fa-acciones { margin-top: 8px; padding-top: 8px; border-top: 1px solid var(--borde, #d0d5dd); }
.fa-acciones .bol-acciones { justify-content: flex-start; flex-wrap: wrap; gap: 6px; }
.fa-acciones .bol-acciones .lu-btn { min-width: 44px; min-height: 36px; font-size: 15px; }

/* xe (21/10/2026, Ramiro: «que TCG se vea igual en todos los monitores»). A 1366 con el zoom en 100 % la barra de
   sectores no entraba en un renglón (pedía ~1285 px y tenía ~1070): bajaba a dos y empujaba los modales 13 px
   por debajo de la pantalla. No es una regla de monitor: mira el ancho de la barra misma. Si no entra con los
   íconos, se sacan los íconos y se achica el aire de cada sector, y queda en una línea. */
.tcg-app:not(.tcg-app--solo) .tcg-sect { container-type: inline-size; container-name: tcgsect; }
@container tcgsect (max-width: 1300px) {
  .tcg-sect .tcg-sec i { display: none; }
  .tcg-sect .tcg-sec { padding: 4px 7px; gap: 0; }
}
/* xe: el modal de Plan de ahorro (Ingreso de unidades y los demás del lado de planes) medía hasta 1180 px o el 96 %
   de la PANTALLA, pero va al lado del menú: a 1366 con zoom 100 % se salía 54 px por la derecha. Ahora el 96 % es
   del lugar que tiene (el ancho de la zona de trabajo). */
.tcg-app .gv-lado-planes .per-modal, .tcg-app .gv-lado-planes .vnv-modal { width: min(1180px, 100%); max-width: min(1180px, 100%); }
/* xe: el modal del panel podía medir hasta el 92 % del alto de la PANTALLA, pero arriba quedan el menú y el
   encabezado (~89 px): a 1366 con zoom 100 % eso es más que el 8 % que sobra y el modal se pasaba 6 a 13 px por
   abajo (el pie quedaba cortado). Ahora mide como mucho el lugar que tiene. El de Ventas no se toca.
   Lleva !important y las mismas excepciones porque la regla de «un solo tamaño para todas las ventanas» (os) también. */
.tcg-app .gv-root .gv-panel-proceso > .per-overlay > .per-modal:not(.vnv-fijo):not(.vnv-compacto):not(.com-modal--angosto):not(.sub-modal):not(.lu-elegir-casa):not(.rvl-elegir):not(.recl-alta):not(.dif-modal):not(.vna-modal),
.tcg-app .gv-root .gv-panel-proceso > div > .per-overlay > .per-modal:not(.vnv-fijo):not(.vnv-compacto):not(.com-modal--angosto):not(.sub-modal):not(.lu-elegir-casa):not(.rvl-elegir):not(.recl-alta):not(.dif-modal):not(.vna-modal) { max-height: 100% !important; }

/* ══ xf (23/10/2026, Ramiro, maqueta aprobada): OPERACIONES — la venta por solapas ══ */
.opx-modal .per-cab { align-items: center; }
.opx-estado { margin-left: auto; font-size: 12px; font-weight: 700; padding: 5px 12px; border-radius: 14px; border: 1px solid currentColor; background: var(--bg, #14181d); white-space: nowrap; }
.opx-estado--ok { color: var(--text); }
.opx-elegir { display: flex; align-items: center; gap: 10px; padding: 10px 16px; border-bottom: 1px solid var(--border, #2c2f36); flex-wrap: wrap; }
.opx-buscador { flex: 1 1 420px; min-width: 0; }
.opx-nueva { white-space: nowrap; font-weight: 700; }
.opx-precarga { font-size: 12px; font-weight: 700; color: #f59e0b; border: 1px solid #f59e0b; border-radius: 12px; padding: 4px 10px; white-space: nowrap; }
.opx-carpetas { padding-left: 16px; }
.opx-cuerpo { padding: 14px 16px; }
.opx-grilla { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; align-items: start; }
.opx-span2 { grid-column: span 2; }
.opx-span3 { grid-column: 1 / -1; }
.opx-bloque { border: 1px solid var(--border, #2c2f36); border-radius: 10px; overflow: hidden; background: var(--panel, #1a1f2b); }
.opx-bloque-tit { display: flex; align-items: center; gap: 10px; padding: 8px 14px; font-size: 12px; font-weight: 800; letter-spacing: .8px; text-transform: uppercase; background: var(--panel-2, #202940); border-bottom: 1px solid var(--border, #2c2f36); }
.opx-tit-der { margin-left: auto; letter-spacing: 0; text-transform: none; font-weight: 700; font-size: 12px; }
.opx-bloque-cuerpo { padding: 12px 14px; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; align-content: start; }
.opx-span3 .opx-bloque-cuerpo, .opx-cuadre-bloque .opx-bloque-cuerpo { grid-template-columns: 1fr; }
.opx-span2 .opx-bloque-cuerpo { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.opx-bloque-cuerpo > .opx-ayuda, .opx-bloque-cuerpo > .opx-datos, .opx-bloque-cuerpo > .opx-fila-btns, .opx-bloque-cuerpo > .opx-cuadre, .opx-bloque-cuerpo > .opx-falta-lista, .opx-bloque-cuerpo > .opx-neto, .opx-bloque-cuerpo > .opx-trio, .opx-bloque-cuerpo > .opx-auts, .opx-bloque-cuerpo > .opx-entrega, .opx-bloque-cuerpo > .opx-etapas, .opx-bloque-cuerpo > .opx-situacion { grid-column: 1 / -1; }
.opx-campo { margin: 0; }
.opx-ayuda { margin: 0; font-size: 12.5px; line-height: 1.5; }
.opx-vacio { margin: 30px 0; text-align: center; font-size: 14px; }
.opx-aviso { margin: 0 0 10px; padding: 8px 12px; border-radius: 8px; font-weight: 600; border: 1px solid #16a34a; }
.opx-aviso--mal { border-color: #dc2626; }
.opx-datos { display: grid; grid-template-columns: 1fr; gap: 6px; font-size: 12.5px; }
.opx-datos--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.opx-datos--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.opx-datos b { margin-left: 4px; }
.opx-ok { color: var(--text); font-weight: 700; }
.opx-falta { color: #d97706; font-weight: 700; }
.opx-falta-lista { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; font-size: 12.5px; }
.opx-mesanio { display: flex; align-items: center; gap: 6px; }
.opx-mesanio input { width: 64px; text-align: center; }
.opx-fila-btns { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.opx-btn { min-width: 150px; }
.opx-btn-chico { margin-left: auto; padding: 3px 10px; font-size: 12px; text-transform: none; letter-spacing: 0; }
.opx-interno { flex: 1; min-width: 120px; padding: 7px 10px; }
.opx-neto { display: flex; justify-content: space-between; align-items: center; padding: 8px 10px; border-radius: 8px; background: var(--panel-2, #202940); font-size: 13px; }
.opx-trio { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; }
.opx-cuadre { display: grid; gap: 6px; font-size: 13px; }
.opx-cuadre > span { display: flex; justify-content: space-between; gap: 10px; }
.opx-cuadre-saldo { border-top: 1px solid var(--border, #2c2f36); padding-top: 6px; }
.opx-cuadre--cubierto b:last-child { color: var(--text); }
.opx-cuadre--falta b:last-child, .opx-cuadre--sinImporte b:last-child { color: #d97706; }
.opx-cuadre--sobra b:last-child { color: #000; }
.opx-etapas { display: grid; gap: 6px; text-align: center; font-size: 12px; grid-template-columns: repeat(8, minmax(0, 1fr)); }
.opx-etapas--6 { grid-template-columns: repeat(6, minmax(0, 1fr)); }
.opx-etapa { padding: 8px 4px; border-radius: 8px; display: flex; flex-direction: column; gap: 3px; }
.opx-etapa b { font-size: 12px; }
.opx-etapa--hecho { background: rgba(22, 163, 74, .14); border: 1px solid #16a34a; }
.opx-etapa--hoy { background: var(--vnv-marca, #f2c200); color: #000; border: 2px solid #111; }
.opx-etapa--falta { border: 1px dashed var(--border, #6b7280); opacity: 1; }
.opx-situacion { display: flex; gap: 18px; flex-wrap: wrap; font-size: 12px; }
.opx-entrega { margin: 0; padding: 8px 12px; border-radius: 8px; font-weight: 700; border: 1px solid #d97706; color: #d97706; }
.opx-entrega--lista { border-color: #2563eb; color: #000; }
.opx-entrega--ok { border-color: #16a34a; color: var(--text); }
.opx-auts { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; }
.opx-aut { border: 1px solid var(--border, #2c2f36); border-radius: 10px; padding: 10px 12px; display: flex; flex-direction: column; gap: 4px; font-size: 12px; }
.opx-aut--ok { border-color: #16a34a; background: rgba(22, 163, 74, .08); }
.opx-aut-cab { display: flex; justify-content: space-between; align-items: center; font-size: 13px; }
.opx-tilde { width: 34px; height: 34px; border-radius: 6px; border: 1px solid var(--border, #6b7280); background: transparent; font-weight: 800; font-size: 16px; cursor: pointer; color: inherit; }
.opx-tilde--on { background: #16a34a; border-color: #16a34a; color: #fff; }
.opx-aut-quien { font-weight: 700; }
.opx-aut-nota { font-style: italic; }
.opx-aut-in { padding: 6px 8px; font-size: 12px; }
.opx-pie { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.opx-pie-grupo { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.opx-pie-der { margin-left: auto; }
/* Los botones del pie, todos del mismo tamaño (también Documentación y las fechas). */
.opx-pie .lu-btn:not(.lu-btn--sm), .opx-pie-doc button { width: 150px; min-width: 150px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-size: 12px; box-sizing: border-box; }
.opx-anular { color: #dc2626; }
.tcg-claro .opx-bloque { background: #fff; border-color: #c9ced6; }
.tcg-claro .opx-bloque-tit { background: #eef1f6; color: #000; border-color: #c9ced6; }
.tcg-claro .opx-neto { background: #f6f7fa; }
.tcg-claro .opx-estado { background: #fff; }
.tcg-claro .opx-etapa--falta { border-color: #9aa1ab; }
@media (max-width: 700px) {
  .opx-grilla { grid-template-columns: 1fr; }
  .opx-span2, .opx-span3 { grid-column: auto; }
  .opx-bloque-cuerpo, .opx-span2 .opx-bloque-cuerpo { grid-template-columns: 1fr; }
  .opx-etapas, .opx-etapas--6 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .opx-auts, .opx-datos--2, .opx-datos--3 { grid-template-columns: 1fr; }
  .opx-pie-der { margin-left: 0; }
}

/* xf: Asignación — el N° de operación, poner el interno en el renglón, y las entregadas sin facturar. */
.asig-buscar-fila { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.asig-buscar-fila .asig-buscar { flex: 1 1 380px; }
.asig-entregadas { display: flex; align-items: center; gap: 6px; font-size: 12.5px; white-space: nowrap; }
.asig-td-interno { width: 176px; white-space: nowrap; overflow: hidden; }
.asig-td-interno > * { vertical-align: middle; }
.asig-interno-in { width: 70px; padding: 4px 6px; text-align: center; box-sizing: border-box; }
.asig-interno-btn { margin-left: 4px; padding: 4px 8px; font-size: 12px; font-weight: 700; border-radius: 6px; border: 1px solid currentColor; background: transparent; color: inherit; cursor: pointer; }
.asig-interno-btn:disabled { opacity: .45; cursor: default; }

/* ── xg · Centro estadístico, una solapa por área ─────────────────────────
   Barra igual en todas las solapas; ocho solapas del mismo ancho que no se
   corren al tocarlas; adentro, bloques: el mes, mes a mes y lo que hay que mirar. */
.ces2 { position: relative; }
.ces2-barra { display: flex; align-items: center; gap: 10px; padding: 10px 16px; flex-wrap: wrap; border-bottom: 1px solid var(--border, #2a3345); flex-shrink: 0; }
.ces2-grupo { display: inline-flex; gap: 6px; flex-wrap: wrap; }
.ces2-b { min-width: 112px; height: 34px; padding: 0 12px; font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; font-weight: 600; font-size: 12.5px; }
.ces2-b.on { background: var(--casa-activa, #4f8ef7); color: var(--casa-activa-tinta, #fff); border-color: var(--casa-activa, #4f8ef7); }
.ces2-b:disabled { opacity: .45; cursor: not-allowed; }
.ces2-barra .ces2-grupo:last-child .ces2-b { min-width: 168px; }
.ces2-estado { flex: 1; min-width: 120px; text-align: right; font-size: 12px; color: var(--text); }
.ces2-solapas { display: grid !important; grid-template-columns: repeat(8, minmax(0, 1fr)); gap: 4px; padding: 10px 16px 0; flex-shrink: 0; }
.ces2-solapas .gu-carpeta { width: 100%; min-width: 0; justify-content: center; text-align: center; font-weight: 600; display: flex; align-items: center; gap: 6px; padding-left: 6px; padding-right: 6px; }
.ces2-solapas .gu-carpeta span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ces2-solapas .gu-carpeta--on { font-weight: 600; }
.ces2-cuerpo { display: flex; flex-direction: column; gap: 14px; }
.ces-bloque { border: 1px solid var(--border, #2a3345); border-radius: 12px; padding: 12px 14px; background: var(--panel, transparent); }
.ces-bloque-tit { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; flex-wrap: wrap; margin-bottom: 10px; border-bottom: 1px solid var(--border, #2a3345); padding-bottom: 6px; }
.ces-bloque-tit h4 { margin: 0; font-size: 13px; text-transform: uppercase; letter-spacing: .3px; font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; }
.ces-bloque-tit small { font-size: 12px; color: var(--text); }
.ces-bloque .sc-indicadores { grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); margin-bottom: 0; }
.ces-ind { border-top-color: var(--casa-activa, #4f8ef7); text-align: center; }
.ces-ind .sc-indicador-valor { text-shadow: none; font-size: 24px; }
.ces-ind--mal { border-top-color: var(--red, #e2574c); }
.ces-margen { display: grid; grid-template-columns: minmax(0, 420px) 1fr; gap: 14px; align-items: end; margin-top: 12px; }
.ces-margen table td.c, .ces-tabla td.c, .ces-tabla th { text-align: center; }
.ces-nota { font-size: 12px; color: var(--text); }
.ces-vacio { padding: 14px; text-align: center; color: var(--text); font-size: 13px; }
.ces-mirar { display: flex; flex-direction: column; gap: 6px; }
.ces-mirar .ces-alerta { display: grid; grid-template-columns: 70px 1fr auto; align-items: center; gap: 12px; border: 1px solid var(--border, #2a3345); border-left: 4px solid var(--red, #e2574c); border-radius: 8px; padding: 8px 12px; }
.ces-mirar .ces-alerta b { font-size: 20px; text-align: center; }
.ces-mirar .ces-alerta small { display: block; font-size: 12px; color: var(--text); }
.ces-mirar .ces-alerta .lu-btn { min-width: 72px; }
.ces2-velo { position: absolute; inset: 0; background: rgba(0, 0, 0, .45); display: flex; align-items: flex-start; justify-content: center; padding: 70px 16px 16px; z-index: 5; }
.ces2-ventana { width: min(760px, 100%); max-height: calc(100% - 90px); overflow: auto; background: var(--panel, #161c27); border: 1px solid var(--border, #2a3345); border-radius: 12px; padding: 16px 18px; box-shadow: 0 18px 50px rgba(0, 0, 0, .45); }
.ces2-ventana h4 { margin: 4px 0 10px; font-size: 14px; font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; }
.ces2-ventana h4 + .pvx-campos, .ces2-ventana .pvx-campos { margin-bottom: 8px; }
.ces2-dia { margin-top: 12px; max-width: 320px; }
.ces2-ventana-pie { display: flex; justify-content: flex-end; margin-top: 14px; }
.tcg-claro .ces2-ventana { background: #ffffff; color: #000; border-color: #8a93a3; }
.tcg-claro .ces-bloque { background: #ffffff; border-color: #8a93a3; }
.tcg-claro .ces-bloque-tit { border-bottom-color: #8a93a3; }
.tcg-claro .ces-bloque-tit h4, .tcg-claro .ces-ind .sc-indicador-valor, .tcg-claro .ces-mirar .ces-alerta b { color: #000; }
.tcg-claro .ces-mirar .ces-alerta { border-color: #8a93a3; border-left-color: #c62828; background: #fff; }
.tcg-claro .ces2-barra { border-bottom-color: #8a93a3; }
@media (max-width: 1100px) {
  .ces2-solapas { grid-template-columns: repeat(4, minmax(0, 1fr)); row-gap: 4px; }
}
@media (max-width: 700px) {
  .ces2-barra { padding: 8px 10px; gap: 6px; }
  .ces2-b, .ces2-barra .ces2-grupo:last-child .ces2-b { min-width: 0; flex: 1 1 calc(50% - 6px); height: 32px; font-size: 12px; }
  .ces2-grupo { width: 100%; }
  .ces2-estado { text-align: left; }
  .ces2-solapas { grid-template-columns: repeat(2, minmax(0, 1fr)); padding: 8px 10px 0; }
  .ces-margen { grid-template-columns: 1fr; }
  .ces-mirar .ces-alerta { grid-template-columns: 48px 1fr; }
  .ces-mirar .ces-alerta .lu-btn { grid-column: 1 / -1; }
  .ces2-velo { padding: 10px; }
}
/* xg · ajustes vistos en la captura a 1366 (zoom 75 %) y a 360. */
/* Sólo el medio se corre: si se corría la ventana entera, su barra le comía 16 px y las solapas cambiaban de ancho. */
.per-modal.ces2 { overflow: hidden; }
.ces2 > .ces2-cuerpo { scrollbar-gutter: stable; }
.ces2-solapas .gu-carpeta { min-height: 46px; font-size: 13px; line-height: 1.15; }
.ces2-solapas .gu-carpeta span { white-space: normal; overflow: visible; }
.ces2 .ces2-solapas .gu-carpeta--on { background: var(--casa-activa, #4f8ef7); color: var(--casa-activa-tinta, #fff); border-color: var(--casa-activa, #4f8ef7); }
.ces2 .ces2-solapas { border-bottom: 2px solid var(--casa-activa, #4f8ef7); }
.ces2 .ces-ritmos { grid-template-columns: repeat(5, minmax(0, 1fr)); }
.ces2 .ces-bloque .sc-indicadores { grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); }
.ces-margen table td:first-child, .ces-margen table th:first-child { text-align: left; }
@media (max-width: 1100px) { .ces2 .ces-ritmos { grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); } }
@media (max-width: 700px) {
  /* En el teléfono se corre toda la ventana, no sólo el medio: así los números tienen lugar. */
  .per-modal.ces2 { overflow-y: auto; }
  .ces2 > .com-cuerpo.ces2-cuerpo { flex: none; overflow: visible; min-height: auto; }
  .ces2 .per-pie { position: sticky; bottom: 0; }
  .ces2-b, .ces2-barra .ces2-grupo:last-child .ces2-b { flex: 1 1 calc(33% - 6px); height: 30px; font-size: 11.5px; padding: 0 6px; }
  .ces2-barra .ces2-grupo:first-child .ces2-b { flex-basis: calc(50% - 6px); }
  .ces2-solapas .gu-carpeta { min-height: 38px; font-size: 12px; }
}
.ces2 > .ces2-solapas, .ces2 > .ces2-barra { width: 100%; box-sizing: border-box; align-self: stretch; }
/* El ajuste automático de TCG le cambia el zoom al bloque según lo que hay abajo: con espacios en px las solapas
   variaban 2 px al tocarlas. En porcentaje no dependen del zoom. */
.ces2 > .ces2-solapas { column-gap: .35%; padding-left: 1.3%; padding-right: 1.3%; }
/* xg (Ramiro): la comparación de cada número, el mes anterior y el mismo mes del año anterior. */
.ces-cmp { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; margin-top: 8px; padding-top: 6px; border-top: 1px dashed var(--border, #2a3345); }
.ces-cmp span { display: flex; flex-direction: column; align-items: center; line-height: 1.2; }
.ces-cmp small { font-size: 12px; color: var(--text); text-transform: uppercase; letter-spacing: .3px; }
.ces-cmp b { font-size: 14px; }
.tcg-claro .ces-cmp { border-top-color: #8a93a3; }
.tcg-claro .ces-cmp b { color: #000; }
.ces2-barra .ces2-grupo:first-child .ces2-b { min-width: 210px; }

/* xh (Ramiro: «letras desbordadas… el vs no se entiende») ──────────────────
   Solapas del Centro: el numerito va en la esquina y no le quita lugar al nombre. */
.ces2-solapas .gu-carpeta { position: relative; padding-left: 10px; padding-right: 10px; }
.ces2-solapas .gu-carpeta .tnd-n { position: absolute; top: 3px; right: 4px; font-size: 10px; line-height: 15px; min-width: 15px; padding: 0 4px; margin: 0; }
.ces2-solapas .gu-carpeta span { width: 100%; }
/* La tabla agrupada: columnas de mes iguales, la comparación en chico y el % sólo en Acum. y Total. */
.cru-tabla { table-layout: fixed; width: 100%; min-width: 1080px; }
.cru-tabla th.cru-g, .cru-tabla td.cru-g { width: 170px; white-space: normal; }
.cru-tabla th.cjs-num, .cru-tabla td.cjs-num { width: 64px; text-align: center; }
.cru-tabla th.cru-acum, .cru-tabla td.cru-acum, .cru-tabla th.cru-total, .cru-tabla td.cru-total { width: 96px; }
.cru-tabla .cru-dif { font-weight: 600; white-space: nowrap; color: var(--text); }
.cru-tabla .cru-dif i { display: block; font-style: normal; }
.cru-nota { margin: 8px 2px; font-size: 12px; }
/* Vendedores: «Localidad que más compra» es un texto, no un número. */
.cev-ind .sc-indicador-card:last-child .sc-indicador-valor { font-size: 19px; line-height: 1.2; word-break: break-word; }
.cru-tabla .cru-dif.sube { color: var(--text); }
.cru-tabla .cru-dif.baja { color: #d05a4f; }
/* xh: el Centro tiene su tamaño fijo (no lo agranda el ajuste de letra de los modales). */
.ces2-solapas .gu-carpeta { font-size: 12.5px; padding-left: 6px; padding-right: 6px; }
@media (min-width: 1300px) { .per-modal.ces2 > * { zoom: 1.08; } }
/* xh: el numerito como globo en la esquina, afuera del texto; y la tabla agrupada entra sin correrse. */
.ces2-solapas { overflow: visible; padding-top: 14px; }
.ces2-solapas .gu-carpeta .tnd-n { top: -8px; right: -3px; z-index: 2; box-shadow: 0 0 0 2px var(--bg, #14181d); }
.cru-tabla { min-width: 940px; }
.cru-tabla th.cru-g, .cru-tabla td.cru-g { width: 140px; }
.cru-tabla th.cjs-num, .cru-tabla td.cjs-num { width: 56px; }
.cru-tabla th.cru-acum, .cru-tabla td.cru-acum, .cru-tabla th.cru-total, .cru-tabla td.cru-total { width: 86px; }
.cru-tabla .cru-dif { font-size: 12px; }

/* xh · Compañías de seguro (Ramiro: «alinear, ordenar»). ─────────────────────
   Lista de precios: los botones principales de las tres tarjetas a la misma altura, del mismo tamaño;
   el segundo botón (o su lugar vacío) abajo. */
.seg-setup .seg-card-acc { display: grid; grid-template-columns: 1fr; grid-auto-rows: 38px; gap: 8px; min-height: 84px; align-content: start; }
.seg-setup .seg-card-acc > .pvx-btn, .seg-setup .seg-card-acc > label.pvx-btn, .seg-setup .seg-card-acc > button { width: 100%; height: 38px; margin: 0; display: flex; align-items: center; justify-content: center; text-align: center; box-sizing: border-box; }
/* Los indicadores (Bandeja, Historial, Reportes, Orion): título, valor y nota centrados. */
.seg-modal .pvx-kpi { text-align: center; align-items: center; }
.seg-modal .pvx-kpi > span, .seg-modal .pvx-kpi > b, .seg-modal .pvx-kpi > i { text-align: center; width: 100%; }
/* Historial: la tabla entra entera y los números y fechas van centrados. */
.seg-hist-caja { overflow-x: auto; }
.seg-hist-tabla { width: 100%; table-layout: auto; }
.seg-hist-tabla th, .seg-hist-tabla td { white-space: normal; }
.seg-hist-tabla th.c, .seg-hist-tabla td.c, .seg-devs td.c { text-align: center; white-space: nowrap; }
.seg-hist-tabla .seg-resultado-hist { min-width: 104px; }
/* xh · Cartera por vendedor (Ramiro: «agregar %»): el % al lado de cada número, en una columna fija para que alineen. */
.cv-tr > span .cv-pct { display: inline-block; min-width: 46px; margin-left: 8px; text-align: right; font-size: 12px; opacity: 1; font-variant-numeric: tabular-nums; }
.tcg-claro .cv-tr > span .cv-pct { color: #000; opacity: 1; }
.seg-setup .seg-card-acc { box-sizing: border-box; height: 92px; min-height: 92px; padding-top: 8px; grid-template-rows: 38px 38px; overflow: visible; }

/* xh · Operaciones: el buscador como tabla simple (una columna por dato, títulos arriba). */
.opx-buscador .bap-lista--tabla { max-height: 420px; }
.opx-buscador .bap-item { grid-template-columns: minmax(0, 1fr) !important; padding: 6px 12px; }
.opx-buscador .bap-donde { display: none; }
.opx-fila-b { display: grid; grid-template-columns: 92px 1.6fr 1fr 1.4fr 1fr 1fr 1fr; gap: 10px; align-items: center; width: 100%; font-size: 12.5px; }
.opx-fila-b--vo { grid-template-columns: 92px 1.2fr 1.6fr 1fr 1.4fr 1fr 1fr 1fr; }
.opx-fila-b > * { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; text-align: left; }
.bap-cab { position: sticky; top: 0; z-index: 2; padding: 7px 12px; background: var(--panel-2, #1c2432); border-bottom: 2px solid var(--vnv-marca, var(--accent-amber, #f2c200)); }
.bap-cab .opx-fila-b > span { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .03em; color: var(--text); }
.mo-claro .bap-cab, .tcg-claro .bap-cab { background: #eef1f5; }
.mo-claro .bap-cab .opx-fila-b > span, .tcg-claro .bap-cab .opx-fila-b > span { color: #000; }
/* Operaciones con su tamaño fijo (fuera del agrandado automático): los botones del pie, medidos al modal. */
.opx-modal .opx-pie .lu-btn:not(.lu-btn--sm), .opx-modal .opx-pie-doc button { width: 132px; min-width: 132px; height: 34px; font-size: 12.5px; }

/* xh · Registro de Ventas (Ramiro: «el encabezado y sus botones no se leen bien»): título y botones más grandes,
   todos los botones del mismo alto. */
.rv-root > .header.tcg-envoltura .tcg-env-tit h1 { font-size: 20px; }
.rv-root > .header.tcg-envoltura .tcg-env-sub { font-size: 13px; }
.rv-root > .header.tcg-envoltura .tcg-env-acc .lu-btn, .rv-root > .header.tcg-envoltura .tcg-env-acc .lu-btn--sm { font-size: 13.5px; height: 36px; padding: 0 14px; white-space: nowrap; display: inline-flex; align-items: center; }
/* xh: los botones del pie de Operaciones, todos del mismo ancho y con el texto entero; un poco más grande en pantallas anchas. */
.opx-modal .opx-pie .lu-btn:not(.lu-btn--sm), .opx-modal .opx-pie-doc button { width: 150px; min-width: 150px; font-size: 12px; padding: 0 8px; text-overflow: clip; }
@media (min-width: 1300px) { .per-modal.opx-modal > * { zoom: 1.08; } }
/* xh: el Registro se achica entero para que entre la tabla; el encabezado se agranda aparte para que se lea. */
.rv-root [data-bloque="encabezado"] { zoom: 1.3; }
.rv-root [data-bloque="encabezado"] .tcg-env-tit h1 { font-size: 18px; }
.rv-root [data-bloque="encabezado"] .tcg-env-sub { font-size: 12px; }
.rv-root [data-bloque="encabezado"] .tcg-env-acc .lu-btn, .rv-root [data-bloque="encabezado"] .tcg-env-acc .lu-btn--sm { font-size: 12.5px; height: 32px; padding: 0 12px; white-space: nowrap; display: inline-flex; align-items: center; }
.rv-root [data-bloque="encabezado"] { zoom: 1.18; }
.rv-root [data-bloque="encabezado"] .tcg-env-tit { flex: 0 0 auto; }
.rv-root [data-bloque="encabezado"] .tcg-env-tit h1 { white-space: nowrap; overflow: visible; text-overflow: clip; }
.rv-root [data-bloque="encabezado"] .tcg-env-acc .lu-btn, .rv-root [data-bloque="encabezado"] .tcg-env-acc .lu-btn--sm { padding: 0 10px; }

/* xi · Compañías de seguro: «Orion al día» en la Bandeja (verde si se actualizó hace menos de 2 horas). */
.seg-orion-aldia { font-size: 12px; font-weight: 600; color: var(--text); margin-left: 10px; white-space: nowrap; }
.seg-orion-aldia--viejo { color: #d05a4f; }
.tcg-claro .seg-orion-aldia { color: #000; }
.tcg-claro .seg-orion-aldia--viejo { color: #b3261e; }

/* xj · Operaciones (Ramiro, 24/10): una solapa «Cliente y unidad», bloques simétricos (los de un mismo
   renglón con el mismo alto), los bloques a la vista aunque no haya operación elegida y el pie en un renglón. */
.opx-fs { border: 0; margin: 0; padding: 0; min-width: 0; }
.opx-fs:disabled .opx-bloque-cuerpo { opacity: 1; }   /* xp: lo que sólo se mira se lee entero, sin gris */
.opx-modal .opx-grilla { align-items: stretch; }
.opx-modal .opx-bloque { display: flex; flex-direction: column; }
.opx-modal .opx-bloque-cuerpo { flex: 1; }
.opx-modal .opx-fechas .opx-bloque-cuerpo > label:last-child:nth-child(odd) { grid-column: 1 / -1; }
.opx-kv { grid-column: 1 / -1; display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 7px 14px; margin: 0; font-size: 12.5px; align-content: start; }
.opx-kv dt { color: var(--text); font-weight: 600; }
.opx-kv dd { margin: 0; font-weight: 700; text-align: right; overflow-wrap: anywhere; }
.tcg-claro .opx-kv dt, .mo-claro .opx-kv dt { color: #000; }
/* El estado de la entrega, arriba a la derecha: letra blanca sobre negro (la cabecera pinta su letra con !important y selectores largos: por eso las clases repetidas). */
.per-modal.opx-modal.opx-modal > .per-cab .opx-estado.opx-estado { background: #111 !important; color: #fff !important; border-color: #111 !important; }
.per-modal.opx-modal.opx-modal > .per-cab .opx-estado.opx-estado--ok { background: #16a34a !important; border-color: #16a34a !important; }
/* El pie: los diez botones en un renglón y del mismo ancho. */
.opx-modal .opx-pie { display: grid; grid-template-columns: repeat(10, minmax(0, 1fr)); gap: 6px; flex-wrap: nowrap; }
.opx-modal .opx-pie--vo { grid-template-columns: repeat(8, minmax(0, 1fr)); }
.opx-modal .opx-pie-grupo, .opx-modal .opx-pie-doc, .opx-modal .opx-pie-doc .doc-boton-fila { display: contents; }
.opx-modal .opx-pie-der { margin-left: 0; }
.opx-modal .opx-pie .lu-btn:not(.lu-btn--sm), .opx-modal .opx-pie-doc button { width: 100%; min-width: 0; height: 34px; padding: 0 3px; font-size: 12px; letter-spacing: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
/* El pie no se agranda con el resto (×1,08): así entran los diez botones con el texto entero. */
@media (min-width: 1300px) { .per-modal.opx-modal > .opx-pie { zoom: 1; } }
.opx-modal .opx-pie .vnv-fecha-inline { display: flex; gap: 4px; min-width: 0; }
.opx-modal .opx-pie .vnv-fecha-inline input { min-width: 0; width: 100%; }
@media (max-width: 900px) {
  .opx-modal .opx-pie, .opx-modal .opx-pie--vo { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
/* xj · Panel de control de Seguros: el título del paso a paso, dentro del visor. */
.ag-pasos-tit { font-size: 12px; font-weight: 800; letter-spacing: .06em; text-transform: uppercase; margin-bottom: 4px; }

/* xk · Registro de Ventas › Enganchar con los legajos: ventana ancha, solapas, indicadores, tabla tipo Excel. */
.per-modal.eng-modal { width: min(1280px, calc(96vw / var(--tcg-z, 1))); max-width: calc(96vw / var(--tcg-z, 1)); display: flex; flex-direction: column; max-height: calc(92vh / var(--tcg-z, 1)); }
.eng-carpetas { padding-left: 16px; }
.eng-cuerpo { padding: 14px 16px; overflow: auto; flex: 1; min-height: 0; }
.eng-ind { grid-template-columns: repeat(4, minmax(0, 1fr)); }
/* ys: «Revisar enganche» lleva 5 indicadores (se suma «Repetidas»): en la computadora, los 5 en una fila. */
@media (min-width: 900px) { .sc-indicadores.eng-ind { grid-template-columns: repeat(5, minmax(0, 1fr)); } }
.eng-ind .sc-indicador-card { text-align: center; }
.eng-tabla-env { overflow-x: auto; }
.eng-tabla th, .eng-tabla td { font-size: 13px; }
.eng-tabla td.c, .eng-tabla th { text-align: center; }
.eng-col-acc { width: 110px; }
.eng-anulada td { opacity: 1; text-decoration: line-through; }
.eng-ayuda { margin-top: 10px; }
.eng-pie { display: flex; justify-content: flex-end; gap: 8px; }
.eng-pie .lu-btn { min-width: 170px; }
@media (max-width: 760px) { .eng-ind { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
/* La ventana va afuera del Registro (en el body): lleva la letra de TCG por su cuenta. */
.eng-modal, .eng-modal * { font-family: "Montserrat", ui-sans-serif, system-ui, sans-serif; }
.eng-modal .per-titulo { font-size: 18px; font-weight: 700; }
/* xk · Asignación Ginza: el aviso del cruce con el stock. */
.asg-cruce { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin: 8px 0; padding: 8px 12px; border: 1px solid #d97706; border-radius: 8px; font-size: 13px; }
.per-modal.asg-cruce-modal { max-width: 960px; width: calc(94vw / var(--tcg-z, 1)); }
/* xl: el recorrido mensual (Asignación Ginza y otras) entra en el teléfono sin barra al costado. */
@media (max-width: 420px) { .rec-controlrow, .rec-seg { max-width: 100%; min-width: 0; box-sizing: border-box; } }

/* ══ LAS SOLAPAS, EN UN SOLO RENGLÓN (26/10/2026 · xm, Ramiro: «las solapas
   tienen que estar en un solo renglón arriba»). En la PC las carpetas del
   encabezado no bajan de renglón: si no entran, se achican un poco la letra y
   el relleno (según el ancho que tiene la pantalla, no el monitor). Recién en
   el teléfono vuelven a bajar, como siempre. */
/* xn: vale para TODAS las filas de carpetas (Tablas, Presupuestos, Operaciones…), no sólo las del encabezado. */
.gu-carpetas:not(.ces2-solapas) { container: carpetas / inline-size; }
@media (min-width: 701px) {
  .gu-carpetas:not(.ces2-solapas) { flex-wrap: nowrap; }
  .gu-carpetas:not(.ces2-solapas) > .gu-carpeta { flex: 0 1 auto; min-width: 0; overflow: hidden; }
  .gu-carpeta-txt { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  @container carpetas (max-width: 1180px) {
    .gu-carpetas.gu-carpetas > .gu-carpeta { font-size: 13px; padding-left: 10px; padding-right: 10px; gap: 5px; }
  }
  @container carpetas (max-width: 1060px) {
    .gu-carpetas.gu-carpetas > .gu-carpeta { font-size: 13px; padding-left: 8px; padding-right: 8px; }
  }
  @container carpetas (max-width: 900px) {
    .gu-carpetas.gu-carpetas > .gu-carpeta { font-size: 13px; padding-left: 6px; padding-right: 6px; gap: 4px; }
    .gu-carpetas.gu-carpetas > .gu-carpeta .gu-carpeta-n { font-size: 13px; padding: 0 5px; }
  }
}

/* xn (26/10/2026, Ramiro: «hay pantallas superpuestas en cuanto a las letras y bloques»). Con una pantalla abierta
   a lo ancho (Cartera, por ejemplo) la barra de sectores no se achicaba: a 1280 «Tablas» quedaba escondido debajo
   del logo de TCG y había que correr la barra para verlo. Ahora se achica igual que en las demás (sin íconos y con
   menos aire) y, si aun así no entra, baja de renglón. El teléfono tiene su propia barra y no cambia. */
@media (min-width: 701px) {
  .tcg-app--solo .tcg-sect { container-type: inline-size; container-name: tcgsect; flex-wrap: wrap; row-gap: 2px; overflow-x: visible; }
}
/* Compañías de seguro › Panel de control: los tres botones de «Órdenes al agente» no entraban en su caja a 1280
   («Revisar sesiones» se salía). Ahora cada botón ocupa su lugar y, si el nombre no entra, baja a dos renglones. */
.ag-botones { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.ag-botones > .pvx-btn { min-width: 0; white-space: normal; line-height: 1.2; }
/* Compañías de seguro › Reportes: las tablitas de cuatro columnas («Ganados según el descuento», «Ranking de
   localidades»…) no podían medir menos de 320 px (la regla general de las tablas) y a 1280 la caja tenía 298: el
   «% ganado» quedaba afuera. Ahora miden lo que su caja. */
.seg-rep-mini-t { min-width: 0; }

/* xn · Tablas: doce solapas con su cantidad no entran en un renglón en una pantalla de 1280. Cuando falta lugar, la
   cantidad se ve sólo en la solapa abierta (las demás la muestran al entrar); los nombres quedan enteros. */
@media (min-width: 701px) {
  @container carpetas (max-width: 1240px) {
    .abm-carpetas .gu-carpeta:not(.gu-carpeta--on) .gu-carpeta-n { display: none; }
  }
}

/* xo (27/10/2026) · Pago de unidades 0km por solapas. Debajo de las solapas, un solo renglón: el buscador, los
   indicadores (cada uno con su título) y los botones. Al marcar pagada se pide la fecha ahí mismo. */
.pag-modal .bt-barra { flex-wrap: nowrap; }
.pag-ind { display: flex; align-items: center; gap: 18px; margin-left: auto; white-space: nowrap; }
.pag-ind > div { display: flex; flex-direction: column; align-items: center; line-height: 1.15; }
.pag-ind > div > span { font-size: 12px; text-transform: uppercase; letter-spacing: .04em; color: var(--text); }
.pag-ind > div > b { font-size: 15px; }
.pag-accion { white-space: nowrap; text-align: center; }
.pag-confirma { display: inline-flex; align-items: center; gap: 6px; }
.pag-confirma input { width: 140px; }
.pag-config { display: flex; flex-direction: column; gap: 12px; max-width: 720px; }
.pag-config-gral { display: flex; align-items: flex-end; gap: 14px; }
.pag-config-gral input { width: 110px; text-align: center; }
.pag-config-t td, .pag-config-t th { text-align: center; }
.pag-config-t input { width: 90px; text-align: center; }
.pag-config-pie { display: flex; justify-content: flex-end; }
/* Asignación / facturación: los tres campos en un renglón. */
.vn-asig-fila.ing-grid--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
@media (max-width: 700px) { .pag-modal .bt-barra { flex-wrap: wrap; } .pag-ind { margin-left: 0; flex-wrap: wrap; } }
/* Pago de unidades › Reporte: el informe va adentro de la solapa, del ancho de la pantalla y sin repetir el
   encabezado (logo y título ya están arriba) ni el pie. */
.pag-modal.per-modal { width: min(1320px, 100%); max-width: min(1320px, 100%); }
.pag-modal .inf-root { max-width: 100%; min-width: 0; width: 100%; box-sizing: border-box; }
.pag-modal .inf-root > .per-cab, .pag-modal .inf-root > .per-pie { display: none; }
/* xp (28/10/2026, Ramiro: «organizar mejor los botones»): la franja de las variantes del alto justo (sin el lugar vacío
   de abajo); debajo, un renglón con el período y el buscador a la izquierda y los botones a la derecha, todos del mismo
   tamaño y del mismo color. Abajo, sólo los tres indicadores (sin el «Total» que repetía las unidades). */
.pag-modal .inf-root .inf-filtros--subtemas { min-height: 0 !important; padding: 8px 12px; }
.pag-modal .inf-root .inf-filtros--acciones { flex-wrap: nowrap !important; align-items: flex-end; gap: 6px; }
.pag-modal .inf-root .inf-filtros--acciones .inf-filtro--busq { flex: 1 1 140px; min-width: 110px; }
.pag-modal .inf-root .inf-filtros--acciones .inf-filtro--busq input { width: 100%; }
.pag-modal .inf-root .inf-filtros--acciones .inf-filtros-sep { display: none; }
.pag-modal .inf-root .inf-filtros--acciones .inf-btn {
  flex: 0 0 106px; width: 106px; height: 30px; padding: 0 4px; white-space: nowrap;
  display: inline-flex; align-items: center; justify-content: center;
  color: var(--text) !important; border-color: var(--border) !important; background: var(--panel) !important; box-shadow: none !important;
}
.pag-modal .inf-root .inf-pie-total { display: none; }
@media (max-width: 700px) { .pag-modal .inf-root .inf-filtros--acciones { flex-wrap: wrap !important; } .pag-modal .inf-root .inf-filtros--acciones .inf-btn { flex: 1 1 30%; width: auto; } }
/* xo · Empezar a cargar en limpio › «Qué no se borra»: las pantallas por sector, cada una con su casilla. */
.tcg-limpieza-modal { width: min(920px, 100%); }
.tcg-limpieza-lista { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 12px; }
.tcg-limpieza-grupo { border: 1px solid var(--border, #252d3f); border-radius: 10px; padding: 8px 12px 10px; margin: 0; }
.tcg-limpieza-grupo legend { font-weight: 700; font-size: 12.5px; padding: 0 6px; }
.tcg-limpieza-op { display: flex; align-items: center; gap: 8px; padding: 4px 0; font-size: 13px; cursor: pointer; }
.tcg-limpieza-op--fija { opacity: 1; cursor: default; }

/* ═══ xp (28/10/2026, Ramiro) · UN SOLO COLOR, EL DE LA CASA, Y LA LETRA BLANCA O NEGRA ═══
   «En todas las pantallas tiene que haber 1 solo color, el del encabezado; no tiene que haber colores secundarios» y
   «no debe haber letra gris en ningún lugar del proyecto: todo letra blanca o negra (modo claro, letra negra)».
   - El color de la casa va de FONDO (encabezados, pies, solapa y sector elegidos), con su tinta encima.
   - La letra es la del modo (blanca en oscuro, negra en claro); el rojo queda para lo vencido.
   - Nada transparentado que vuelva gris la letra. */
.tcg-sec[aria-pressed="true"], .tcg-claro .tcg-sec[aria-pressed="true"] {
  background: var(--casa-activa, #f2c200) !important; color: var(--casa-activa-tinta, #1d1a06) !important;
  border-color: var(--casa-activa, #f2c200) !important; }
.tcg-side-it:hover { border-left-color: var(--casa-activa, #f2c200); }
.tcg-side-it[aria-current="true"], .tcg-claro .tcg-side-it[aria-current="true"] {
  background: var(--casa-activa, #f2c200) !important; box-shadow: none !important; }
.tcg-side-it[aria-current="true"], .tcg-side-it[aria-current="true"] * { color: var(--casa-activa-tinta, #1d1a06) !important; }
.tcg-side-it--porhacer, .tcg-side-it--vacia, .tcg-limpieza-op--fija { opacity: 1; }
.tcg-side-it--vacia .tcg-side-tx::after, .tcg-side-it--porhacer .tcg-side-tx::after { opacity: 1; }
/* xp · Informes › ⚙ Columnas, simple: las que se ven en orden y las que se pueden agregar, en una grilla pareja. */
.inf-root .inf-cols-panel.inf-cols-panel { display: block; }
.inf-root .inf-cols-grilla { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 4px 14px; margin: 4px 0 10px; }
.inf-root .inf-cols-grilla .inf-col-chk { display: flex; align-items: center; gap: 6px; font-size: 12px; color: var(--text); min-width: 0; }
.inf-root .inf-cols-panel .inf-cols-sep { font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: var(--text); margin: 2px 0 4px; }
/* xp · Los rótulos de área del menú del costado, con el color de la casa (eran amarillos en las tres). */
.tcg-side-area { border-left-color: var(--casa-activa, #f2c200) !important; border-color: var(--casa-activa, #f2c200); }
/* xp · La solapa elegida: el color de la casa de fondo y su tinta encima, aunque la pantalla no publique la tinta. */
.gu-carpeta--on { color: var(--vnv-marca-txt, var(--casa-activa-tinta, #fff)); }
.gu-carpeta--on .gu-carpeta-txt { color: inherit; }
/* xp · Lo que quedaba con otro color o con la letra del color de la casa. */
.pw-web { --text: #000000; }   /* la vista de la web pública es una hoja blanca: letra negra */
.asp-fila-total td, .asp-btn--act, .asp-anio--on, .asp-tabla td.asp-rot, .asp-tabla td.asp-prom, .asp-anio, .asp-btn { color: var(--asp-texto, var(--text)) !important; }
.lead-kpi--dest, .comu-estado.on, .men-total { border-color: var(--casa-activa, #f2c200) !important; }
.seg-rep-g, .seg-rep-bg { background: var(--casa-activa, #f2c200) !important; }
.cc-modal .cc-solapas .pre-accion--on { background: var(--casa-activa, #f2c200) !important; border-color: var(--casa-activa, #f2c200) !important; color: var(--casa-activa-tinta, #1d1a06) !important; }
.inf-root .inf-vista:not(.inf-vista--on) { color: var(--text); }
/* xp · El importe calculado del modal de ventas: caja neutra, sin el ámbar (sólo cambia el color, no el tamaño). */
.vnv-modal .per-campo--calc strong, .vnv-modal.mo-claro .per-campo--calc strong { border-color: var(--border) !important; background: var(--panel-2) !important; }
.cjs-n { color: var(--text) !important; }
/* xp · Lo que se pintaba con el color de la casa encima de su propio color: va la tinta (negra en el amarillo de Jorge Giorgi). */
.pc-blq-n, .pw-banda, .pw-banda * { color: var(--vnv-marca-txt, var(--casa-activa-tinta)) !important; }
/* Botón «invertido» (fondo blanco) en los pies y encabezados de color: letra de la casa, o la tinta si la casa es clara. */
.mo-claro > .per-pie .lu-btn--accion, .mo-claro > .per-cab .lu-btn--accion { color: var(--vnv-marca-fuerte) !important; }
/* xp · El azul de «ya existe» del modal de ventas y los bordes celestes de Tablas: el color de la casa. */
.vnv-modal { --vnv-existe: var(--vnv-marca, #5aa2e8); }
.vnv-modal.mo-claro .vnv-unidad.pnl-existente { border-color: var(--vnv-marca) !important; }
.mo-claro .abm-ambito { border-left-color: var(--vnv-marca, var(--casa-activa)) !important; }
/* xp · Armar lote para reventa: el encabezado es del color de la casa, la letra va con su tinta. */
.lote-caja > .per-cab .per-titulo, .lote-caja > .per-cab .per-sub { color: var(--vnv-marca-txt, var(--casa-activa-tinta)) !important; }
/* xp · El botón principal del encabezado (fondo con la tinta de la casa) lleva la letra del color de la casa, en los dos modos. */
.per-modal > .per-cab .lu-btn.lu-btn--accion, .per-modal > .per-cab .lu-btn.lu-btn--accion * { color: var(--vnv-marca, var(--casa-activa)) !important; }
.inf-root > .per-cab .per-titulo, .inf-root > .per-cab .per-sub { color: var(--vnv-marca-txt, var(--casa-activa-tinta)) !important; }
/* xp · Contacto clientes y encuestas: encabezado y pie del color de la casa, letra con su tinta. */
.cc-casa > .per-pie, .cc-casa > .per-pie *:not(input):not(select):not(textarea),
.cc-casa > .per-cab, .cc-casa > .per-cab *:not(input):not(select):not(textarea):not(.lu-btn--accion) { color: var(--vnv-marca-txt, #131824) !important; }
/* PostVenta · CRM, Carga de datos: leer las atenciones de un Sheet de Google (29/10/2026, Leo). */
.crm-sheet { display: flex; flex-direction: column; gap: 5px; margin-top: 12px; }
.crm-sheet-fila { display: flex; align-items: center; gap: 10px; min-width: 0; }
.crm-sheet-fila .pvx-in { flex: 1 1 auto; min-width: 0; }
.crm-sheet-fila .pvx-btn { flex: 0 0 auto; min-width: 130px; height: 34px; }
/* yh · Usuarios: las siete plantillas rápidas (las de GG360) y lo ajustado a mano, marcado en amarillo. */
.adu-niveles { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 8px; }
.adu-nivel {
  display: flex; flex-direction: column; justify-content: center; align-items: center; gap: 3px; min-height: 64px;
  background: var(--panel); border: 1.5px solid var(--border); border-radius: 10px; padding: 8px 6px;
  color: var(--text); font: inherit; text-align: center; cursor: pointer;
}
.adu-nivel b { font-size: 12.5px; font-weight: 700; }
.adu-nivel small { font-size: 12px; font-weight: 500; line-height: 1.25; }
.adu-nivel:hover { border-color: var(--text-muted); }
.adu-nivel.on { background: var(--casa-activa, #0b57d0); border-color: var(--casa-activa, #0b57d0); color: var(--casa-activa-tinta, #fff); }
.adu-plant { margin-top: 10px; border: 1px solid var(--border); border-radius: 10px; padding: 10px 14px; }
.adu-plant-fila { display: flex; align-items: center; gap: 12px; padding: 6px 0; flex-wrap: wrap; }
.adu-plant-rot { width: 110px; flex: none; font-size: 12px; font-weight: 700; }
.adu-plant-ops { display: flex; flex-wrap: wrap; gap: 8px; flex: 1; min-width: 0; }
.adu-plant-op {
  min-width: 150px; height: 36px; padding: 0 12px; border-radius: 8px; cursor: pointer;
  background: var(--panel); border: 1.5px solid var(--border); color: var(--text); font: inherit; font-size: 12.5px; font-weight: 600;
}
.adu-plant-op.on { border-color: var(--casa-activa, #0b57d0); box-shadow: inset 0 0 0 1px var(--casa-activa, #0b57d0); }
.adu-plant-acc { display: flex; align-items: center; gap: 12px; margin-top: 10px; flex-wrap: wrap; }
.adu-plant-aplicar { min-width: 170px; height: 36px; }
.adu-plant-estado {
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-top: 10px; padding: 8px 12px;
  border: 1px solid var(--border); border-radius: 9px; font-size: 12px; color: var(--text);
}
.adu-plant-estado--aj { border-color: rgba(242,194,0,.6); }
.adu-plant-cuenta { flex: 1; min-width: 180px; }
.adu-plant-volver { min-width: 170px; height: 36px; }
.adu-aj {
  display: inline-block; margin-left: 8px; padding: 1px 8px; border-radius: 999px; vertical-align: 1px;
  font-size: 12px; font-weight: 800; color: #000; background: #fff4cc; border: 1px solid #000;
}
.perm-celda--aj, .adu-fila--aj, .pmi-fila--aj { background: rgba(242,194,0,.16) !important; }
:is(.tcg-claro, [data-modo="claro"]) :is(.adu-fila--aj, .pmi-fila--aj),
:is(.tcg-claro, [data-modo="claro"]) tr > td.perm-celda--aj, :is(.tcg-claro, [data-modo="claro"]) tr:hover > td.perm-celda--aj { background: #fff4cc !important; }
@media (max-width: 1100px) { .adu-niveles { grid-template-columns: repeat(4, minmax(0, 1fr)); } }
@media (max-width: 700px) {
  .adu-niveles { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .adu-plant-rot { width: 100%; }
  .adu-plant-op { min-width: 0; flex: 1 1 calc(50% - 8px); }
  /* «En la cartera de planes es»: en el teléfono, una cosa debajo de la otra (se salía 200 px). */
  .pmi-vend { grid-template-columns: minmax(0, 1fr); }
  .pmi-vend-rot { border-right: 0; }
  .pmi-vend-in { margin: 0 14px 6px; min-width: 0; }
  .pmi-vend-nota { border-left: 0; }
}

/* ══ yk · CONTROL DE CAÍDAS (Cobranzas y morosidad › Caída) ══
   Una sola fila de solapas: si no entran, se acorta el nombre (nunca dos filas ni puntos suspensivos).
   Tablas de trabajo a todo el ancho, letra que se ve igual en un monitor chico o grande. */
.cdc { margin-top: 22px; padding-top: 16px; border-top: 2px solid var(--border-fuerte, #3a4559); }
.cdc-tit { font-size: clamp(12px, calc(0.8vw / var(--tcg-z, 1)), 12.5px); margin-bottom: 10px; }
.cdc-solapas { display: flex; flex-wrap: nowrap; gap: 3px; border-bottom: 2px solid var(--vnv-marca, var(--accent-amber)); margin-bottom: 14px; }
.cdc-solapa { flex: 0 1 auto; min-width: 0; white-space: nowrap; overflow: hidden; background: var(--panel, #1b2233); border: 1px solid var(--border, #252d3f); border-bottom: none;
  color: var(--text); padding: 8px 16px; border-radius: 9px 9px 0 0; cursor: pointer; font-family: inherit; font-size: clamp(12.5px, calc(0.9vw / var(--tcg-z, 1)), 14px); min-height: 36px; }
.cdc-solapa--on { background: var(--vnv-marca, var(--accent-amber)); color: var(--vnv-marca-txt, var(--casa-activa-tinta, #1a1207)); border-color: var(--vnv-marca, var(--accent-amber)); font-weight: 600; }
.cdc-corto { display: none; }
.cdc-inds { margin-bottom: 12px; }
.cdc-tabla-wrap { width: 100%; overflow: auto; max-height: calc(70vh / var(--tcg-z, 1)); border: 1px solid var(--border-fuerte, #3a4559); border-radius: 8px; }
.cdc-tabla { width: 100%; font-size: clamp(12px, calc(0.88vw / var(--tcg-z, 1)), 13.5px); }
.cdc-tabla thead th { text-align: center; white-space: nowrap; }
.cdc-tabla tbody tr { cursor: default; }
.cdc-tabla tbody td, .cdc-tabla tfoot td { white-space: nowrap; }
.cdc-tabla td.cdc-num { text-align: center; font-variant-numeric: tabular-nums; }
.cdc-tabla td.cdc-izq { text-align: left; font-weight: 600; }
.cdc-tabla td.cdc-total { font-weight: 700; }
.cdc-tabla tr.cdc-pct td { font-style: italic; }
.cdc-tabla tfoot tr.cdc-pie td { font-weight: 700; border-top: 2px solid var(--border-fuerte, #3a4559); padding: 6px 9px; }
.cdc-tabla td.cdc-cuota { text-align: center; }
.cdc-tabla td.cdc-debe { color: var(--red, #e2574c); font-weight: 700; }
.cdc-tabla td.cdc-ce { color: var(--accent-blue, #4f8bd6); font-weight: 700; }
.cdc-tabla tbody tr.cdc-cae { background: color-mix(in srgb, var(--red, #e2574c) 10%, transparent); }
.cdc-tabla tbody tr.cdc-mes-ini td { border-top: 2px solid var(--border-fuerte, #3a4559); }
.cdc-sel { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 600; }
.cdc-elegir, .cdc-chips { display: inline-flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.cdc-ayuda { margin-top: 8px; }
.cdc-in { width: 100%; min-width: 110px; padding: 5px 7px; border: 1px solid var(--border-fuerte, #3a4559); border-radius: 5px; background: var(--panel-2, #1c2432); color: var(--text); font-family: inherit; font-size: inherit; }
.cdc-in--n { min-width: 56px; width: 70px; text-align: center; }
.cdc-botones { display: flex; gap: 8px; justify-content: flex-end; margin-top: 10px; flex-wrap: wrap; }
.cdc-aviso { margin-top: 8px; }
/* Tomar de la cartera (Planilla de liquidación de Plan): la vista previa, ancha. */
.lc-modal.lc-modal--cartera { max-width: min(1100px, calc(96vw / var(--tcg-z, 1))); max-height: calc(90vh / var(--tcg-z, 1)); overflow: auto; }
.lc-cartera-chips { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin: 6px 0 10px; }
.lc-cartera-avisos { margin: 10px 0 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 4px; }
.lc-cartera-avisos li { border-left: 3px solid var(--amber, #f2c200); padding: 4px 8px; font-size: 12.5px; background: color-mix(in srgb, var(--amber, #f2c200) 10%, transparent); }
.lc-cartera-txt { font-size: 12.5px; margin: 0 0 6px; line-height: 1.45; }
@media (max-width: 600px) {
  .cdc-solapa { padding: 8px 9px; flex: 1 1 auto; text-align: center; }
  .cdc-largo { display: none; }
  .cdc-corto { display: inline; }
  .cdc-tabla-wrap { max-height: none; }
  .lc-modal.lc-modal--cartera { padding: 12px; }
  .lc-cartera-chips .mc-lbl { flex-basis: 100%; }
  .cdc-inds { grid-template-columns: 1fr 1fr; gap: 8px; }
  .cdc-inds .sc-indicador-card { padding: 10px; }
  .cdc-inds .sc-indicador-valor { font-size: 20px; }
}
/* yk · el ajuste manual en la solapa Liquidación de la planilla de Plan */
.lc-table-liquidacion .lc-ajuste-in { width: 92px; min-width: 92px; padding: 4px 6px; }
.lc-table-liquidacion .lc-motivo-in { width: 150px; min-width: 120px; padding: 4px 6px; }
.lc-table-liquidacion td.lc-cell-ajuste, .lc-table-liquidacion td.lc-cell-motivo { padding-left: 3px; padding-right: 3px; }

/* ══════════════════════════════════════════════════════════════════════
   ym · ESTÉTICA Y TAMAÑOS POR MONITOR (31/10/2026, Ramiro aprobó las 14
   propuestas). Etapa 1: la escala por monitor, el menú, las solapas y dos
   pantallas de trabajo de ejemplo (Lista de usados y Cobranzas y morosidad).
   La escala va como «zoom» en <html> (2290-TCG): acá todo se mide como en un
   monitor de 1366 al 100 %. Lo que mide en vw/vh ya se divide por --tcg-z.
   ══════════════════════════════════════════════════════════════════════ */
:root { --tcg-side-w: 232px; }

/* El aviso del zoom del navegador: chico, abajo a la izquierda, en azul (info). */
.tcg-fr-slot .tcg-aviso-zoomnav { position: static; box-shadow: none; border-radius: 10px; padding: 2px 4px 2px 10px; }
.tcg-fr-slot .tcg-aviso-zoomnav > span { display: block; max-width: 300px; line-height: 1.2; }
.tcg-aviso-zoomnav { position: fixed; left: 12px; bottom: 10px; z-index: 60; display: flex; align-items: center; gap: 8px;
  padding: 4px 4px 4px 12px; border-radius: 999px; font-size: 12px; line-height: 1.3;
  background: #eaf1ff; color: #10264d; border: 1px solid #2f6fed; box-shadow: 0 2px 10px rgba(0,0,0,.18); }
.tcg-aviso-zoomnav button { min-width: 28px; min-height: 28px; border-radius: 999px; border: 1px solid #2f6fed;
  background: #ffffff; color: #10264d; font: inherit; font-size: 14px; line-height: 1; cursor: pointer; }

/* ── El menú: 232 px, nombres enteros (o el corto, o dos renglones), nunca «…» ── */
.tcg-side-tx { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: clip; white-space: nowrap; }
.tcg-side-it--corto .tcg-side-tx { display: none; }
.tcg-side-it--corto::after { content: attr(data-corto); flex: 0 0 auto; white-space: nowrap; }
.tcg-side-it--dos .tcg-side-tx { white-space: normal; overflow: visible; line-height: 1.2; }
/* Modo junto: si la lista no entra a lo alto, ≈ 27 px por renglón. */
.tcg-side--junto .tcg-side-it { padding-top: 4px; padding-bottom: 4px; margin-bottom: 1px; min-height: 27px; }
.tcg-side--junto .tcg-side-sep { margin: 3px 10px 4px; }
.tcg-side--junto .tcg-side-area { margin-top: 4px; }
/* Si ni así entra: se desplaza y lo dice. */
.tcg-side-mas { flex: 0 0 auto; margin: 0 8px 6px; min-height: 28px; border: 1px solid var(--border, #252d3f);
  border-radius: 8px; background: var(--panel-2, #1c2333); color: var(--text); font: inherit; font-size: 12px; cursor: pointer; }
/* «Por hacer» pasa a ser un puntito gris al lado del nombre. */
.tcg-side-it--porhacer .tcg-side-tx::after { content: ""; display: inline-block; width: 7px; height: 7px; padding: 0; margin-left: 8px;
  border: 0; border-radius: 50%; background: #9aa3ad; vertical-align: middle; }

/* ── Los sectores de arriba, en un renglón: el corto por debajo de 1440 px reales ── */
.tcg-sect, .tcg-app--solo .tcg-sect { flex-wrap: nowrap; }
.tcg-sec { font-size: 13px; }
html.tcg-angosto .tcg-sec[data-corto] .tcg-sec-largo, .tcg-sect--corto .tcg-sec[data-corto] .tcg-sec-largo { display: none; }
html.tcg-angosto .tcg-sec[data-corto]::after, .tcg-sect--corto .tcg-sec[data-corto]::after { content: attr(data-corto); }

/* ── La barra de arriba: el camino, no el título repetido ── */
.tcg-fr-camino { display: inline-flex; align-items: baseline; gap: 7px; font-size: 14px; }
.tcg-fr-sector { font-weight: 500; }
.tcg-fr-sep { font-weight: 400; opacity: .7; }

/* ── Las solapas: una sola fila, nunca cortadas (2296-SolapasUnaFila) ── */
.gu-carpetas:not(.ces2-solapas) { flex-wrap: nowrap; }
.gu-carpetas:not(.ces2-solapas) > .gu-carpeta { flex: 0 0 auto; min-width: auto; overflow: visible; font-size: 13px; }
.gu-carpeta-txt { overflow: visible; text-overflow: clip; white-space: nowrap; min-width: auto; }
.gu-carpetas--corto > .gu-carpeta[data-corto] > .gu-carpeta-txt { display: none; }
.gu-carpetas--corto > .gu-carpeta[data-corto]::before { content: attr(data-corto); white-space: nowrap; }
.gu-carpetas.gu-carpetas--apretadas > .gu-carpeta { padding-left: 8px; padding-right: 8px; gap: 4px; }
.gu-carpetas--desliza { overflow-x: auto; overflow-y: hidden; scrollbar-width: thin; }
/* La ventana que se ensanchó para que entren sus solapas (no el modal de ventas). */
.tcg-ventana--ancha:not(.vnv-fijo) { max-width: min(calc(96vw / var(--tcg-z, 1)), 1600px) !important; }
/* Las reglas de xm/xn achicaban la letra de las solapas hasta 11,5 px y las
   cortaban con «…»: la letra queda en 13 y lo resuelve el corto. */
@media (min-width: 701px) {
  @container carpetas (max-width: 1180px) { .gu-carpetas.gu-carpetas > .gu-carpeta { font-size: 13px; } }
  @container carpetas (max-width: 1060px) { .gu-carpetas.gu-carpetas > .gu-carpeta { font-size: 13px; } }
  @container carpetas (max-width: 900px) { .gu-carpetas.gu-carpetas > .gu-carpeta { font-size: 13px; } }
}

/* ── Barra de tabla: a la izquierda buscar, Filtros, Columnas, Excel y PDF; a la derecha las acciones ── */
.bt-barra--acc { flex-wrap: wrap; row-gap: 6px; }
.bt-barra--acc > .bt-cuenta { margin-left: 8px; }
.bt-acciones { margin-left: auto; display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 6px; align-items: center; }
.bt-acciones .lu-acc { flex: 0 0 auto; min-width: 9.5rem; min-height: 36px; justify-content: center; padding-top: 6px; padding-bottom: 6px; font-size: 13px; }
.bt-acciones .lu-excel-chico, .lu-acciones .lu-excel-chico { min-height: 36px; display: inline-flex; align-items: center; justify-content: center; gap: 6px; font-size: 13px;
  min-width: 9.5rem; padding: 6px 12px; border-radius: 8px; border: 1px solid var(--border, #252d3f);
  background: var(--panel, #1b2233); color: var(--text); cursor: pointer; font-weight: 600; }
.bt-acciones .lu-excel-chico.lu-vaciar, .lu-acciones .lu-excel-chico.lu-vaciar { color: var(--red, #c62828); border-color: var(--red, #c62828); }

/* ── Pantallas de trabajo de ejemplo: a todo el ancho, con 16 px de margen como máximo ── */
.pa-compacto:has(> .cym) { max-width: none; padding-left: 16px; padding-right: 16px; }
@media (min-width: 900px) {
  .pa-compacto > .cym { max-width: none; width: 100%; height: calc(100dvh / var(--tcg-z, 1) - var(--tcg-alto-armazon, 95px) - 24px); }
}
.gv-pantalla-suelta > .lu-modulo { margin-left: 0; margin-right: 0; }
.lu-modulo .lu-tabla-zona { padding: 0 16px 16px !important; }
/* Los títulos de la tabla quedan arriba al bajar; el N° y la columna clave, a la izquierda. */
.lu-tabla-scroll { max-height: calc(100dvh / var(--tcg-z, 1) - 300px); overflow: auto; }
.lu-planilla thead th { position: sticky; top: 0; z-index: 3; background: var(--panel, #1b2233); }
.tcg-claro .lu-planilla thead th { background: #ffffff; }
.cpb-tabla thead th, .cym .sc-table thead th { position: sticky; top: 0; z-index: 3; }
/* Monitores bajos (menos de 800 px reales de alto): indicadores y filtros más compactos. */
html.tcg-bajo .cym .sc-indicador-card, html.tcg-bajo .cym [class*="indicador"] { padding-top: 6px; padding-bottom: 6px; min-height: 0; }
html.tcg-bajo .cym .tcg-envoltura { padding-top: 6px; padding-bottom: 6px; }
/* La tabla de Lista de usados, más baja por renglón: más renglones a la vista. */
.lu-planilla td { padding-top: 3px; padding-bottom: 3px; }
html.tcg-bajo .lu-planilla td label > img, html.tcg-bajo .lu-planilla td label > div { height: 26px !important; width: 36px !important; }
.bt-acciones .lu-acc { min-width: 8.5rem; }
.bt-acciones .lu-excel-chico { min-width: 0; }
/* Celular: indicadores de a 2, la lista entera y el pie al final, sin tapar nada. */
@media (max-width: 899px) {
  .cpb-inds, .sc-indicadores { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .cym { height: auto; overflow: visible; }
  .cym > .cym-medio { overflow: visible; }
}
/* La caja de Cobranzas, a todo el ancho también en los monitores grandes. */
.pa-compacto:has(> .cym) { width: auto; }
/* Barra de tabla (en todas): el buscador con lupa y borde, del alto de los botones (36 px); botones de 13 px. */
.bt-barra .bt-buscador { min-height: 36px; box-sizing: border-box; padding: 0 10px; border: 1px solid var(--border, #252d3f);
  border-radius: 8px; background: var(--panel, #161c29); }
.bt-barra .bt-buscador:focus-within { border-color: var(--casa-activa, var(--accent-amber, #f2c200)); }
.bt-barra .bt-buscador input { font-size: 13px; }
.bt-barra > .lu-btn, .bt-menu-wrap > .lu-btn { min-height: 36px; font-size: 13px; border-color: var(--border, #252d3f); }
.tcg-claro .bt-barra .bt-buscador { background: #ffffff; border-color: #9aa3ad; }
.tcg-claro .bt-barra > .lu-btn, .tcg-claro .bt-menu-wrap > .lu-btn { border-color: #9aa3ad; }
/* N° (la primera columna) fija a la izquierda al correr la tabla de costado. */
.lu-planilla tbody td:first-child, .lu-planilla thead th:first-child,
.cpb-tabla tbody tr.plan > td:first-child, .cpb-tabla thead th:first-child { position: sticky; left: 0; z-index: 2; background: var(--panel, #1b2233); }
.lu-planilla thead th:first-child, .cpb-tabla thead th:first-child { z-index: 4; }
.tcg-claro .lu-planilla tbody td:first-child, .tcg-claro .lu-planilla thead th:first-child,
.tcg-claro .cpb-tabla tbody tr.plan > td:first-child, .tcg-claro .cpb-tabla thead th:first-child { background: #ffffff; }
.bt-barra .bt-buscador input, .tcg-claro .bt-barra .bt-buscador input { border: 0; background: none; box-shadow: none; padding: 0; min-height: 0; outline: none; }
/* Lista de usados: «Cerrar» pegado a la derecha del encabezado. */
.lu-modulo > .per-cab.lu-cab > div.lu-cab-der { flex: 0 0 auto; margin-left: auto; }
/* El campo de adentro del buscador no lleva su propio borde: el borde es el del buscador. */
.bt-barra .bt-buscador input, .tcg-claro .bt-barra .bt-buscador input:not([type="checkbox"]):not([type="radio"]) { border: 0 !important; background: transparent !important; box-shadow: none !important; }

/* ── ym · etapa 2 ─────────────────────────────────────────────────────── */
/* Centro estadístico: la marca del objetivo al 100 % quedaba 2 px afuera de su barra. */
.ces-r-barra em { margin-left: -2px; }
/* Un modal con solapas no mide más que el lugar que tiene (con la escala, el 88 % de la ventana podía ser más). */
.per-modal:has(.proc-solapas), .per-modal:has(.gu-carpetas) { min-height: min(calc(88vh / var(--tcg-z, 1)), 860px, 100%); }
/* Cobranzas en el monitor: la tabla toma el alto que queda y la ayuda corta se ve entera, arriba del pie. */
@media (min-width: 900px) {
  .cym > .cym-medio:has(> .cpb) { display: flex; flex-direction: column; overflow: hidden; }
  .cym > .cym-medio > .cpb { flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column; overflow: hidden; }
  .cym > .cym-medio > .cpb > * { flex: 0 0 auto; }
  .cym > .cym-medio > .cpb > .ac-tabla-box { flex: 1 1 auto; min-height: 8rem; max-height: none; }
  .cym > .cym-medio > .cpb > .tcg-ayuda-corta { margin: 8px 0 6px !important; }
}

/* 2 · Una sola tarjeta de indicador: título en mayúscula, valor grande, nota de una línea, 4 por fila y del mismo alto.
   La que avisa algo malo lleva borde rojo. */
@media (min-width: 900px) {
  .sc-indicadores, .cpb-inds, .lu-indicadores { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); grid-auto-rows: 1fr; gap: 10px; }
}
.sc-indicador-card, .cpb-ind, .lu-ind { display: flex; flex-direction: column; justify-content: flex-start; min-width: 0; }
.cpb-ind .ac-r, .lu-ind-titulo, .sc-indicador-titulo { text-transform: uppercase; font-size: 12px; font-weight: 700; letter-spacing: .04em; }
.cpb-ind .ac-iv, .lu-ind-valor { font-size: 22px; font-weight: 800; }
.cpb-ind .ac-d, .lu-ind-nota, .sc-indicador-nota { font-size: 12px; line-height: 1.3; }
.lu-ind--alerta, .sc-indicador-card--mal, .cpb-ind--mal { border: 1px solid var(--red, #d32f2f) !important; }

/* 3 · Lo que todavía no funciona: gris punteado, con su línea (el «title») de cuándo se habilita. */
.bt-acciones button:disabled, .bt-acciones .lu-acc:disabled { border-style: dashed !important; border-color: #8a929c !important;
  color: #8a929c !important; background: transparent !important; cursor: not-allowed; }

/* 4 · Tablas: la misma letra en títulos y datos; títulos en negrita; «N renglones» chico y pegado. */
.lu-planilla th, .lu-planilla td, .cpb-tabla th, .cpb-tabla td { font-size: 13px; }
.lu-planilla th, .cpb-tabla th { font-weight: 700; }
.tcg-renglones { margin: 4px 2px 0; font-size: 12px; opacity: .85; }

/* 8 · Modo claro sin dorado: lo elegido, en el color de la casa (Jorge Giorgi: negro). */
.tcg-claro .gu-carpeta--on, .tcg-claro .tcg-sec[aria-pressed="true"], .tcg-claro .lu-casa--on, .tcg-claro .bt-vista--on,
.tcg-claro .car-corte.es-on, .tcg-claro .cpb-ind.on {
  background: var(--casa-elegido, var(--casa-activa)) !important; border-color: var(--casa-elegido, var(--casa-activa)) !important;
  color: var(--casa-elegido-tinta, #ffffff) !important; }
.tcg-claro .gu-carpeta--on *, .tcg-claro .lu-casa--on *, .tcg-claro .car-corte.es-on *, .tcg-claro .cpb-ind.on * { color: inherit !important; }
.tcg-claro .tcg-side-it[aria-current="true"] { box-shadow: inset 3px 0 0 var(--casa-elegido, var(--casa-activa)); }
.tcg-claro .gu-carpetas { border-bottom-color: var(--casa-elegido, var(--casa-activa)); }

/* 9 · Tres avisos iguales y la tabla vacía (2297-AvisosTCG). */
.tcg-aviso { display: flex; align-items: center; gap: 10px; padding: 8px 12px; border-radius: 8px; border: 1px solid; margin: 6px 0;
  font-size: 13px; line-height: 1.3; }
.tcg-aviso-ic { flex: 0 0 22px; height: 22px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center;
  font-weight: 800; font-size: 12px; color: #ffffff; }
.tcg-aviso-tx { flex: 1 1 auto; min-width: 0; }
.tcg-aviso-btn { flex: 0 0 auto; min-height: 36px; padding: 0 14px; border-radius: 8px; font: inherit; font-weight: 700; cursor: pointer;
  border: 1px solid currentColor; background: transparent; color: inherit; }
.tcg-aviso--info { background: #eaf1ff; border-color: #2f6fed; color: #10264d; }
.tcg-aviso--info .tcg-aviso-ic { background: #2f6fed; }
.tcg-aviso--atencion { background: #fff3e6; border-color: #e07b00; color: #4a2700; }
.tcg-aviso--atencion .tcg-aviso-ic { background: #e07b00; }
.tcg-aviso--error { background: #fdecec; border-color: #d32f2f; color: #5a0f0f; }
.tcg-aviso--error .tcg-aviso-ic { background: #d32f2f; }
.tcg-vacia { display: flex; align-items: center; justify-content: center; gap: 10px; padding: 26px 16px; margin: 8px 0;
  border: 1px dashed var(--border, #9aa3ad); border-radius: 10px; font-size: 14px; }
.tcg-vacia-btn { min-height: 36px; padding: 0 14px; border-radius: 8px; border: 1px solid var(--casa-elegido, var(--casa-activa, #2563eb));
  background: var(--casa-elegido, var(--casa-activa, #2563eb)); color: var(--casa-elegido-tinta, #ffffff); font: inherit; font-weight: 700; cursor: pointer; }

/* 13 · Modo oscuro: bordes blancos marcados en campos y botones. */
.app-shell:not(.tcg-claro) input:not([type="checkbox"]):not([type="radio"]):not([type="range"]), .app-shell:not(.tcg-claro) select,
.app-shell:not(.tcg-claro) textarea, .app-shell:not(.tcg-claro) .lu-btn, .app-shell:not(.tcg-claro) .sc-btn,
.app-shell:not(.tcg-claro) .lu-acc, .app-shell:not(.tcg-claro) .tcg-tbtn, .app-shell:not(.tcg-claro) .bt-buscador {
  border-color: rgba(255, 255, 255, .62); }
.app-shell:not(.tcg-claro) .bt-barra .bt-buscador input { border: 0 !important; }

/* 5 · Celular: encabezado de una línea con «Cerrar» y botones iguales de a dos. */
@media (max-width: 899px) {
  .tcg-envoltura .tcg-env-sub, .lu-modulo > .lu-cab .per-sub { display: none; }
  .lu-modulo .lu-acciones { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
  .lu-modulo .lu-acciones > * { width: 100%; min-height: 40px; box-sizing: border-box; }
  .lu-modulo .lu-acciones > .lu-guardado:empty { display: none; }
}

/* 12 · Botones de acción: al menos 36 px; los de ícono en una celda, 28. */
.lu-acc, .cip-pie button { min-height: 36px; }
.tcg-tbtn { font-size: 13px; }
.lu-planilla td button, .cpb-tabla td button { min-height: 28px; min-width: 28px; }
/* Los botones de la barra de arriba pasaron a 13 px: la barra pierde 1 px de aire arriba y abajo y queda del mismo alto
   (si creciera, el modal de ventas tendría menos lugar y cambiaría de tamaño). */
@media (min-width: 900px) { .tcg-franja { padding-top: 5px; padding-bottom: 5px; } }
/* Lista de usados: subir y vaciar la planilla al lado de «Excel»; las casas, a la izquierda del renglón de las acciones. */
.bt-barra > .lu-excel-chico { min-height: 36px; display: inline-flex; align-items: center; gap: 6px; padding: 0 12px; border-radius: 6px;
  border: 1px solid var(--border, #9aa3ad); font-size: 13px; font-weight: 600; background: none; color: var(--text); cursor: pointer; }
.bt-barra > .lu-excel-chico.lu-vaciar { color: var(--red, #c62828); border-color: var(--red, #c62828); }
.bt-barra--acc .bt-acciones { flex: 1 0 100%; }
.bt-acciones > .lu-casas { margin-right: auto; padding: 0; }
/* Monitores bajos (menos de 800 px reales): más renglones a la vista. */
html.tcg-bajo .cym > .tcg-envoltura .tcg-env-sub, html.tcg-bajo .lu-modulo > .lu-cab .per-sub { display: none; }
html.tcg-bajo .lu-modulo > .lu-cab { padding-top: 6px; padding-bottom: 6px; }
html.tcg-bajo .lu-tabla-scroll { max-height: calc(100dvh / var(--tcg-z, 1) - 250px); }
html.tcg-bajo .cpb-inds { margin: 2px 0 6px; gap: 8px; }
html.tcg-bajo .cpb-ind { padding-top: 4px; padding-bottom: 4px; display: grid; grid-template-columns: 1fr auto; align-items: baseline; column-gap: 8px; }
html.tcg-bajo .cpb-ind .ac-r { grid-column: 1; }
html.tcg-bajo .cpb-ind .ac-iv { grid-column: 2; grid-row: 1 / span 2; font-size: 20px; margin: 0; }
html.tcg-bajo .cpb-ind .ac-d { grid-column: 1; }
html.tcg-bajo .cpb-tabla td { padding-top: 3px; padding-bottom: 3px; }
html.tcg-bajo .cpb .sec-tanda-barra, html.tcg-bajo .cpb [class*="forma"] { padding-top: 4px; padding-bottom: 4px; margin-top: 2px; margin-bottom: 4px; }
html.tcg-bajo .tcg-env-sol.gu-carpetas { padding-top: 4px; }
html.tcg-bajo .gu-carpetas > .gu-carpeta { padding-top: 5px; padding-bottom: 5px; }
.tcg-ayuda-corta { white-space: normal; }
/* Tabla de trabajo a todo el lienzo: sin el tope de 1560/1600 px de la Lista de usados. */
.gv-pantalla-suelta > .lu-modulo { max-width: none; }
.lu-planilla > tbody > tr > td { padding-top: 3px !important; padding-bottom: 3px !important; }
.lu-barra:empty { display: none; }
/* La acción principal de la barra, en el color de la casa. */
.bt-acciones .bt-acc--principal { background: var(--casa-elegido, var(--casa-activa, #1d4ed8)) !important;
  border-color: var(--casa-elegido, var(--casa-activa, #1d4ed8)) !important; color: var(--casa-elegido-tinta, #ffffff) !important; }
/* Cobranzas en monitores bajos: indicadores de una línea, encabezado y renglones más finos. */
html.tcg-bajo .cpb-ind .ac-d { display: none; }
html.tcg-bajo .cpb-ind .ac-iv { grid-row: 1; font-size: 18px; }
html.tcg-bajo .cym > .tcg-envoltura { padding-top: 4px !important; padding-bottom: 4px !important; min-height: 0; }
html.tcg-bajo .cpb-tabla > tbody > tr > td { padding-top: 2px !important; padding-bottom: 2px !important; line-height: 1.25; }
html.tcg-bajo .cpb-tabla td button { min-height: 26px; padding-top: 0; padding-bottom: 0; }
html.tcg-bajo .cym .tcg-ayuda-corta { margin: 4px 0 2px !important; }
html.tcg-bajo .cpb-tabla > thead th { padding-top: 4px !important; padding-bottom: 4px !important; }
html.tcg-bajo .cym .sc-libro-barra { padding-top: 2px; padding-bottom: 2px; }
html.tcg-bajo .cym > .cip-pie { padding-top: 4px; padding-bottom: 4px; }
html.tcg-bajo .cpb .sec-tanda-barra, html.tcg-bajo .cpb .sec-tanda { padding-top: 2px !important; padding-bottom: 2px !important; margin-top: 0 !important; margin-bottom: 4px !important; min-height: 0 !important; }
html.tcg-bajo .cpb-ind { padding-top: 2px !important; padding-bottom: 2px !important; }
/* Con la letra de 13 px: los campos de una grilla no se salen de su columna y los botones del reporte de Pendientes de
   pago bajan de renglón si no entran. */
.ing-grid input, .ing-grid select, .ing-grid textarea { min-width: 0; max-width: 100%; box-sizing: border-box; }
.pag-modal .inf-root .inf-filtros--acciones { flex-wrap: wrap !important; }
/* Operaciones: los diez botones del pie, con la letra en 12 px, entran enteros en un renglón. */
.opx-modal .opx-pie .lu-btn:not(.lu-btn--sm), .opx-modal .opx-pie-doc button { letter-spacing: -.35px; padding: 0 1px; }
/* La bajada de los modales «vnv-modal» que no son el de ventas (Compras a fábrica, por ejemplo), en 12 px. */
.vnv-modal:not(.vnv-fijo) .per-sub, .cvn-modal .per-sub { font-size: 12px; }
/* yp (31/10/2026, Ramiro): «Desde / Hasta» en el encabezado del Informe de ventas, en la misma fila que el mes. */
.ivj-rango { display: inline-flex; align-items: center; gap: 4px; flex-wrap: nowrap; }
.ivj-rango label { display: inline-flex; align-items: center; gap: 4px; font-size: calc(var(--ivj-letra, 1) * 12.5px); font-weight: 600; white-space: nowrap; color: var(--text); }
.ivj-rango input[type="date"] {
  /* Angostos: con los siete botones y el mes tienen que entrar en un renglón también a 1366 px sin zoom. */
  font-family: inherit; font-size: calc(var(--ivj-letra, 1) * 12px); font-weight: 600; padding: 5px 4px; border-radius: 8px; width: calc(var(--ivj-letra, 1) * 108px);
  border: 1px solid var(--border); background: var(--panel-2); color: var(--text); color-scheme: light dark;
}
.ivj-rango--on input[type="date"] { border-color: var(--accent-amber); }
.ivj-header--casa .ivj-rango label { color: var(--casa-tinta); }
.ivj-header--casa .ivj-header-acc > * { flex-shrink: 0; white-space: nowrap; }
/* En el teléfono los botones del encabezado del Informe bajan de renglón: en una sola fila (nowrap, arriba) corrían la pantalla
   unos 400 px ya antes de «Desde / Hasta». En el monitor no cambia nada. */
@media (max-width: 700px) {
  .ivj-header--casa .ivj-header-acc { flex-wrap: wrap; margin-left: 0; }
  .ivj-rango { flex-wrap: wrap; }
  .ivj-header--casa .ivj-header-acc > * { flex-shrink: 1; }
  .ivj-header--casa .ivj-header-acc > .ivj-rango { white-space: normal; max-width: 100%; }
}
/* yp: la fila de las ventas sin vendedor del Informe, sin nombre y en rojo (en claro y en oscuro). */
.ivj-tabla td.ivj-sin-vendedor { background: rgba(229, 72, 77, 0.22) !important; box-shadow: inset 0 0 0 2px #e5484d; }
/* yp: el % de comisión que pasa el tope del 2 %, en rojo, y su motivo en el renglón del pie (sin cambiar el tamaño del modal). */
.vnv-pct input.vnv-pct-mal { border-color: #e5484d !important; box-shadow: 0 0 0 2px rgba(229, 72, 77, 0.35); }
.vnv-pie-nota.vnv-pie-nota--mal { color: #e5484d; font-weight: 700; min-width: 0; flex: 1 1 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
/* PostVenta · CRM, Carga de datos: la lectura diaria del Sheet (02/11/2026, Leo). */
.crm-sheet-auto { margin-top: 6px; padding: 8px 10px; border-radius: 8px; font-size: 12.5px; line-height: 1.4;
  border: 1px solid var(--border, #2a3345); color: var(--text); }
.crm-sheet-auto--mal { border-color: rgba(239, 68, 68, .55); background: rgba(239, 68, 68, .08); }
/* PostVenta · CRM, Configuración: la casilla del contacto del taller (03/11/2026, Leo · yv). */
.crm-check { display: flex; align-items: flex-start; gap: 8px; margin-top: 12px; font-size: 13px; line-height: 1.4; color: var(--text); cursor: pointer; }
.crm-check input { margin-top: 3px; flex: 0 0 auto; }
/* PostVenta · CRM, Bandeja con «Teléfono a revisar»: las seis tarjetas en un renglón (03/11/2026, Leo · yv). */
.crm-kpis-6 { grid-template-columns: repeat(6, minmax(0, 1fr)); }
@media (max-width: 900px) { .crm-kpis-6 { grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); } }
/* ── yw (Ramiro, 04/11/2026) · Compañías de seguro: el motor de cotización ──────────────────────
   Las tarjetas de la Bandeja en dos filas como la maqueta: arriba lo de hoy (5), abajo lo del mes (4). */
.pvx-kpis.seg-kpis-band { display: flex; flex-direction: column; gap: 8px; grid-template-columns: none; }
.seg-kpis-fila { display: grid; gap: 8px; }
.seg-kpis-fila--hoy { grid-template-columns: repeat(5, minmax(0, 1fr)); }
.seg-kpis-fila--mes { grid-template-columns: repeat(4, minmax(0, 1fr)); }
@media (max-width: 1100px) { .seg-kpis-fila--hoy, .seg-kpis-fila--mes { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.seg-sin-motivo { margin-top: 4px; }
/* Las ventanas chicas (descartar y pasar a comprada): encabezado del color de la casa, pie con dos botones iguales. */
.per-overlay > .per-modal.seg-vent { width: min(560px, calc(100vw - 24px)) !important; max-width: 560px !important; min-width: 0 !important; height: auto !important; min-height: 0 !important; max-height: calc(100vh - 24px) !important; flex: 0 0 auto !important; margin: auto !important; }
.per-modal.seg-vent > .seg-vent-cuerpo { flex: 0 1 auto !important; min-height: 0; overflow: auto; }
.seg-vent-cab { background: var(--casa, #0b57d0); color: #fff; padding: 10px 14px; }
.seg-vent-cab .per-titulo, .seg-vent-cab .per-sub { color: #fff; margin: 0; }
.seg-vent-cab .per-sub { font-size: 12px; margin-top: 2px; }
.seg-vent-cuerpo { padding: 12px 14px; display: flex; flex-direction: column; gap: 8px; }
.seg-vent-cuerpo .pvx-campo { display: flex; flex-direction: column; gap: 3px; }
.seg-vent-cuerpo .pvx-campo > span { font-weight: 600; }
.seg-vent-txt { margin: 0; }
.seg-vent-error { color: #c62828; font-weight: 600; font-size: 13px; }
.seg-vent-pie { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; padding: 10px 14px; border-top: 1px solid var(--border, #252d3f); }
.seg-vent-pie .pvx-btn { width: 100%; min-height: 36px; justify-content: center; }
/* Reportes › Descartadas por motivo */
.seg-desc-filtros { display: flex; gap: 12px; align-items: flex-end; flex-wrap: wrap; }
.seg-desc-filtros .pvx-campo { display: flex; flex-direction: column; gap: 3px; min-width: 160px; }
.seg-desc-falta { font-size: 12px; font-weight: 600; color: #b26a00; }
.seg-desc-t td, .seg-desc-t th, .seg-desc-det-t td, .seg-desc-det-t th { text-align: center; }
.seg-desc-t td.seg-desc-td--motivo, .seg-desc-det-t td.seg-desc-td--vehiculo, .seg-desc-det-t td.seg-desc-td--obs { text-align: left; }
.seg-desc-ayuda { font-size: 12px; margin: 6px 0 0; }
/* Configuración › 10 · Reglas de la casa */
.seg-reglas-t td { vertical-align: middle; }
.seg-reglas-t th:nth-child(1) { width: 46px; }
.seg-reglas-t th:nth-child(2) { width: 270px; }
.seg-reglas-t td:last-child { text-align: left; }
.seg-regla-tit { font-weight: 600; white-space: nowrap; text-align: left; }
.seg-reglas-t .seg-regla-in { width: 100%; box-sizing: border-box; text-align: left; border: 1px solid var(--border-fuerte, #3a4559); border-radius: 6px; padding: 5px 7px; font-family: inherit; font-size: 13px; resize: vertical; line-height: 1.35; }
.seg-reglas-t input.pvx-in.seg-regla-in { max-width: 240px; border: 1px solid var(--border-fuerte, #3a4559) !important; background: var(--panel, #1b2233); }
.tcg-claro .seg-reglas-t input.pvx-in.seg-regla-in { border-color: #000 !important; background: #fff; }
.tcg-claro .seg-reglas-t .seg-regla-in { border-color: #000; color: #000; background: #fff; }
.seg-regla-perdida { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
.seg-regla-perdida .seg-regla-modo { min-width: 260px; flex: 1 1 260px; }
.seg-regla-mini { display: flex; gap: 6px; align-items: center; font-size: 12px; }
.seg-regla-mini .seg-regla-in { width: 70px; }
/* Piezas aprendidas › Enseñar */
.seg-ensenar-txt { width: 100%; box-sizing: border-box; font-family: inherit; }
/* Panel de control: PCs de la casa y avisos */
.ag-pcs-t td, .ag-avisos-t td { vertical-align: middle; }
.ag-pcs-t, .ag-avisos-t { width: 100%; table-layout: auto; }
.ag-pcs-t td:nth-child(3), .ag-avisos-t td:nth-child(5) { white-space: normal; text-align: left; }
.ag-pcs-t td, .ag-pcs-t th { white-space: nowrap; }
.ag-pcs-t td:nth-child(3) { white-space: normal; }
.ag-pc-est { font-weight: 700; }
.ag-avisos-t td:nth-child(5) { text-align: left; }
@media (max-width: 700px) {
  .seg-vent-pie { grid-template-columns: 1fr 1fr; }
  .seg-regla-tit { white-space: normal; }
  .ag-pcs-t td, .ag-pcs-t th { white-space: normal; }
  .seg-kpis-fila--hoy, .seg-kpis-fila--mes { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
/* yy · Configuración › Reglas de la casa › Usuarios y claves de las páginas */
.seg-claves { margin-top: 14px; }
.seg-claves-t input { width: 100%; min-width: 120px; }
.seg-claves-estado { min-width: 200px; }
.seg-claves-ok { color: var(--ok, #1b7f3a); font-weight: 600; }
.seg-claves-mal { color: var(--mal, #b3261e); font-weight: 600; }
.seg-claves-pc { max-width: 320px; margin: 6px 0; }
/* yy · Configuración › Reglas de la casa › VIGENCIA (por compañía) */
.seg-vig { margin-top: 14px; }
.seg-vig-t .seg-vig-dias { width: 90px; text-align: center; }
.seg-vig-t .seg-vig-cia { width: 100%; min-width: 180px; }
.seg-vig-otras td { font-weight: 600; }
/* PostVenta · CRM, la tanda elegida para WAPI: el aviso con su botón en un renglón (10/11/2026, Leo · zb). */
.crm-wapi-aviso { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.crm-wapi-aviso span { flex: 1 1 260px; }

/* zb (Leo, Ginza): «Marcar enviados (subir el Excel)» en la Bandeja del CRM. */
.crm-wapi-archivo { display: none; }
.crm-wapi-noenc { margin: 6px 0 10px; max-height: 260px; overflow: auto; border: 1px solid var(--border); border-radius: 6px; }
.crm-wapi-noenc table { width: 100%; border-collapse: collapse; font-size: 13px; }
.crm-wapi-noenc th { position: sticky; top: 0; background: var(--panel-2); text-align: center; padding: 5px 8px; }
.crm-wapi-noenc td { padding: 4px 8px; border-top: 1px solid var(--border); white-space: normal; }
.crm-wapi-noenc td.num { text-align: center; }
/* ze (Leo, Ginza): las respuestas del Excel del programa de la PC, para confirmar. Lo que queda para mirar va
   en ámbar; lo que ya estaba anotado, atenuado. */
.crm-resp-tabla { max-height: 420px; }
.crm-resp-tabla .crm-resp-texto { min-width: 260px; max-width: 460px; }
.crm-resp-tabla .crm-seg-otra { min-width: 190px; }
.crm-resp-tabla tr.crm-resp-mirar td { background: rgba(245, 158, 11, 0.12); }
.crm-resp-tabla tr.crm-resp-ya td { opacity: 0.6; }

/* zd (Leo, Ginza): Seguimiento compacto. Renglones bajos, respuestas con su número, la barra de costado arriba
   pegada a los títulos y lo que hay que gestionar resaltado (verde: pasarle el turno; naranja: revisar el teléfono). */
.crm-seg .pvx-kpis .crm-kpi { padding-top: 8px; padding-bottom: 8px; }
.crm-seg .pvx-kpis .crm-kpi i { font-size: 11.5px; }
.crm-seg-leyenda { font-size: 12.5px; margin: 0 0 6px; color: var(--text, #e6eaf0); }
.crm-seg-arriba { overflow-x: auto; overflow-y: hidden; height: 14px; border: 1px solid var(--border, #2a3345); border-bottom: 0; border-radius: 6px 6px 0 0; }
.crm-seg-arriba div { height: 1px; }
.crm-seg .crm-seg-caja { max-height: 58vh; }
.crm-seg-tabla td { height: 26px; padding: 2px 8px; font-size: 12.5px; }
.crm-seg-tabla th { padding: 6px 8px; font-size: 11.5px; text-align: center; }
.crm-seg-tabla td.num { text-align: center; }
.crm-seg-tabla td.crm-seg-nom { max-width: 220px; overflow: hidden; text-overflow: ellipsis; }
.crm-seg-tabla .crm-seg-resp { min-width: 290px; text-align: center; white-space: nowrap; overflow: visible; }
.crm-seg-tabla .crm-seg-resp b { display: inline; margin: 0 6px 0 0; }
.crm-seg-tabla .crm-seg-bots { display: inline-flex; flex-wrap: nowrap; gap: 3px; vertical-align: middle; }
.crm-seg-tabla .crm-seg-op { min-width: 24px; height: 24px; padding: 0 6px; font-weight: 700; }
.crm-seg-tabla .crm-seg-otra { height: 24px; padding: 0 4px; }
.crm-seg-otra option { color: #111; background: #fff; }
.crm-seg-tabla .crm-seg-que { text-align: center; }
.crm-seg-tabla .crm-seg-acc { text-align: center; }
.crm-seg-tabla .crm-seg-acc .pvx-btn { min-height: 24px; height: 24px; padding: 0 8px; font-size: 12px; }
.crm-seg-tabla .crm-seg-wa { min-width: 32px; }
.crm-seg-tag { display: inline-block; border-radius: 10px; padding: 1px 9px; font-size: 11.5px; font-weight: 700; }
.crm-seg-tag--turno { background: #2ecc71; color: #06210f; }
.crm-seg-tag--telefono { background: #f0a020; color: #2a1700; }
.crm-seg-tabla tr.crm-seg-g-turno td { background: rgba(46,204,113,.14); }
.crm-seg-tabla tr.crm-seg-g-turno td:first-child { box-shadow: inset 4px 0 0 #2ecc71; }
.crm-seg-tabla tr.crm-seg-g-telefono td { background: rgba(240,160,32,.14); }
.crm-seg-tabla tr.crm-seg-g-telefono td:first-child { box-shadow: inset 4px 0 0 #f0a020; }
.crm-seg-pt { display: inline-block; width: 9px; height: 9px; border-radius: 50%; margin-right: 6px; vertical-align: 0; }
.crm-seg-chip--turno .crm-seg-pt { background: #2ecc71; } .crm-seg-chip--telefono .crm-seg-pt { background: #f0a020; }
