/* Toolbar transversal de listas (ListToolbar) — asset COMPARTIDO del RCL InsCore.Ui.Gadgets.
   Self-contained con var(--token, fallback): en el broker toma sus tokens; en cliente/Backoffice cae
   al fallback neutro. **ESTA ES LA ÚNICA DECLARACIÓN de `.app-list-toolbar*` del repo** (M-137): los
   tres hosts enlazan este fichero y encima solo ponen overrides (el Backoffice, los responsive de xs).
   Antes el broker llevaba su propia copia en `theme.css` porque era el ÚNICO host que no enlazaba este
   asset — esa era la causa de la duplicación, no un descuido de estilo: sin el enlace, la copia era
   obligatoria. Si vuelves a necesitar una copia aquí, mira primero el `App.razor` de tu host. */
.app-list-toolbar {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
    padding: 10px 12px;
    border-bottom: 1px solid var(--glass-border, rgba(148, 163, 184, 0.18));
}

.app-list-toolbar__search {
    min-width: 280px;
    flex: 1 1 280px;
    max-width: 420px;
}

/* M-022 · TOPE DURO DEL CROMO.
   La banda de filtros es la única parte del toolbar que crece con el número de filtros de la pantalla:
   `flex-wrap` la deja envolver y en la cartera del corredor llegaba a tres o cuatro renglones, con lo
   que la tabla —que es a lo que se ha entrado— salía de la vista. Se acota a DOS renglones de control
   denso (40px + 8px de hueco) y lo que exceda se desplaza DENTRO de la banda: así el tope existe sin
   que ningún filtro quede inalcanzable. El camino normal no es este scroll, es el pliegue del botón
   «Filtros» del propio ListToolbar, que además se recuerda por tabla.
   Los popover de los MudSelect no se recortan aquí: MudBlazor los teletransporta a su proveedor en la
   raíz del documento, fuera de este contenedor. */
.app-list-toolbar__filters {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
    max-height: 6rem;
    overflow-y: auto;
    overflow-x: hidden;
}

/* El rótulo del pliegue no se encoge nunca: si se corta, deja de decir qué hace (familia de M-172). */
.app-list-toolbar__filters-toggle {
    flex: 0 0 auto;
}

/* ── Superficie de listado con scroll acotado (patrón sticky-header) ──
   La rejilla se envuelve en un MudPaper redondeado con .ins-listado. Acotamos la altura del
   contenedor propio de la rejilla (.mud-table-container) al viewport y lo hacemos desplazable en
   ambos ejes; combinado con FixedHeader="true" en la MudDataGrid, la cabecera queda pegada arriba
   y AMBAS barras (vertical y horizontal) viven en el borde del área visible — la barra horizontal
   está SIEMPRE a la vista sin bajar al final de la lista. Las esquinas redondeadas siguen
   recortando porque el scroll vive en el hijo. Self-contained con var(--token, fallback). */
.ins-listado .mud-table-container {
    max-height: calc(100dvh - 22rem);
    min-height: 12rem;
    overflow: auto;
    -webkit-overflow-scrolling: touch;
}

/* La cabecera fija (FixedHeader) queda pegada arriba mientras el cuerpo se desplaza por debajo.
   El tinte translúcido de cabecera deja TRASLUCIR las filas al pasar bajo ella; la volvemos opaca
   con la superficie del tema (idéntico color al estático, sin cambiar su aspecto). */
.ins-listado .mud-table-container .mud-table-head .mud-table-cell {
    background-color: var(--mud-palette-surface, #0a1632) !important;
}

/* ── 📐 M-574 · REPARTO DE ANCHO POR NECESIDAD ────────────────────────────────────────────────────
   El reparto automático de la tabla asigna ancho según el min-content de cada columna. El theme del
   Backoffice trae `.mud-table-cell { word-break: break-word }` (theme.css, «evita el recorte de texto»),
   y esa propiedad DEJA EL MIN-CONTENT EN UN CARÁCTER: con la ventana justa el navegador estruja las
   columnas de texto hasta partir «España» en tres renglones y «Copiado de la referencia…» carácter a
   carácter (medido a 1280×720 en /accounting-chart-adoptions: fila de 153 px). Se restituye el
   min-content real (`word-break: normal`) y el objetivo legítimo de aquella regla —que un token
   larguísimo no desborde la celda— lo cumple `overflow-wrap: break-word`, que solo parte cuando la
   palabra no cabe en la línea y NO estrecha el min-content. Mayor especificidad que la del theme
   a propósito: esta es la declaración de las superficies de tabla y gana en los tres hosts.

   ⚠️ EL ANCLA ES `td`/`th`, NO `.mud-table-cell`, Y ESO ES EL ARREGLO DE S72.
   M-574 escribió estas reglas sobre `.mud-table-cell`, que es la clase que emiten MudDataGrid y
   MudTable — o sea, los LISTADOS. Las tablas de una FICHA de detalle son `MudSimpleTable`, y ese
   componente pinta `<thead><tr><th>` y `<td>` A PELO: su CSS propio los alcanza por
   `.mud-simple-table table * tr > td`, sin poner ni una sola vez la clase `.mud-table-cell`. Por eso
   «la mejora se hizo para los listados y no para la ficha»: no faltó ponerle clases a las columnas,
   es que EL SELECTOR NO LLEGABA AL MARCADO. Las tres familias sí comparten el contenedor
   `.mud-table-container`, así que ese es el ancla que las describe a las tres sin nombrar ninguna
   pantalla ni ningún componente. */
.mud-table-container td,
.mud-table-container th {
    word-break: normal;
    overflow-wrap: break-word;
}

/* M-574 · La CABECERA no envuelve: «Prima anual (neta)» a tres renglones hacía la fila de cabecera de
   85 px en /policies (39 px con una línea). El Backoffice ya lo declara en su theme; aquí queda para
   los tres hosts. Si la suma de cabeceras no cabe, la barra horizontal del contenedor —siempre a la
   vista en el patrón .ins-listado— es la salida, no el pliegue del rótulo.

   📐 Y ES TAMBIÉN LA CAUSA DEL IMPORTE PARTIDO EN LA FICHA, medido el 17-ago-2026 a 1280 px en
   /policies/{id} (POL-2025-000004, RC con límite legal español): con «Prima neta anual» envuelto a
   TRES renglones, el min-content de esa columna pasa a ser la palabra «anual» y el reparto
   automático la estruja a 94 px — con lo que «162,00 EUR» se parte en «162,00 / EUR», que es lo que
   se lee como un importe cortado. No es `overflow` ni falta de ancho mínimo declarado: es que la
   CABECERA le estaba mintiendo al reparto sobre lo que esa columna necesita. Con el rótulo a un
   renglón la columna vuelve a pedir su ancho real y el importe deja de partirse — el mismo hecho
   que M-574 ya había medido en /policies, aplicado ahora también donde el selector no llegaba. */
.mud-table-container thead th {
    white-space: nowrap;
}

/* M-574 · Columna AJUSTADA: la que enseña un dato atómico (fecha, importe, sello de tarifa, chip,
   badge) pide su min-content y ni un píxel más; el sobrante va a las columnas de texto (producto,
   tomador, colaborador), que son las que saben crecer. Se pone en CellClass de la columna. */
.mud-table-container td.ins-col-ajustada {
    width: 1%;
    white-space: nowrap;
}

/* M-574 · Dato SECUNDARIO dentro de una celda (p. ej. «Total c/ imp. 3.028,20 EUR» bajo la prima):
   jerarquía sin inflar la fila — un renglón exacto, peso normal. El par rótulo+importe es UN dato:
   partido a media cifra no hay quien lo lea (en /policies envolvía a dos renglones con la columna a
   145 px y era la celda que fijaba el alto de TODA la fila). */
.mud-table-container .ins-dato-secundario {
    white-space: nowrap;
    font-weight: 400;
}

/* M-574 · La CABECERA se alinea con su CELDA. Las 28 columnas numéricas del repo declaran
   `HeaderStyle="text-align:right"` desde junio y era INERTE: MudBlazor 8 envuelve el contenido del th
   en `.column-header`, un flex al que text-align no le dice nada. Se honra la declaración existente
   —el estilo SÍ llega al th— alineando el flex; así cada página sigue diciendo su intención con la
   propiedad natural y esta regla la hace verdad, sin tocar 28 ficheros. */
.mud-table-cell[style*="text-align:right"] .column-header,
.mud-table-cell[style*="text-align: right"] .column-header {
    justify-content: flex-end;
}

/* ── 🧰 M-554 · LA COLUMNA DE ACCIONES NO ENVUELVE ─────────────────────────────────────────────────
   Con cuatro iconos en la fila —registrar, editar, activar/desactivar y eliminar— la última celda
   envolvía a dos renglones y la papelera caía DEBAJO de los otros tres, alineada con nada. Medido a
   1280×720 en /external-products. Y con la reserva de M-551 puesta hay 88 px menos de celda, así que
   la clase se ve más justo después de arreglar la de al lado: es la misma esquina, apretada por dos
   sitios.

   🌳 RAÍZ Y NO PARCHE, y por eso vive aquí y no en una pantalla. La plataforma pone su columna de
   acciones con TRES marcados distintos —TemplateColumn de MudDataGrid, MudTd de MudTable y <td> a
   pelo— repartidos por 29 ficheros; añadir una clase a mano en cada uno sería teclear el mismo
   arreglo treinta veces, que es exactamente el defecto que M-558 cierra en la puerta de al lado. La
   regla reconoce la celda por lo que ES: la última de la fila y con botones de icono dentro.

   ⚖️ Por qué `:last-child` Y `:has(.mud-icon-button)` a la vez, y no cualquiera de los dos suelto:
   `:last-child` solo apagaría el ajuste de línea de una última columna de TEXTO largo, que sí debe
   envolver; `:has()` solo alcanzaría a celdas intermedias con un icono al lado de un dato. Juntos
   describen la celda de acciones sin nombrar ninguna pantalla.

   Se declara sobre `.mud-table-container` para cubrir por igual a la rejilla y a la tabla simple, que
   comparten ese contenedor. */
.mud-table-container tbody td:last-child:has(.mud-icon-button) {
    white-space: nowrap;
    /* M-574 · Y tampoco ACAPARA: «Acciones» se llevaba 336 px para dos iconos en /quotes porque el
       reparto automático le regalaba el sobrante. Con width:1% pide su min-content (los botones, que
       ya no envuelven) y el sobrante vuelve a las columnas de texto. */
    width: 1%;
}
