/* seguridad.css — red de seguridad contra desbordes. Se carga el ÚLTIMO. Todo con :where() (especificidad 0): no pisa ninguna regla explícita de una sección,
   solo actúa donde nadie decidió nada. La causa real de cada desborde se corrige en el CSS de su sección; esto evita que reaparezcan. */
:where(*, *::before, *::after) { box-sizing: border-box; }

/* Causa real de las páginas "anchas": .bloque.pagina es hijo de un grid con margin-inline:auto, y con márgenes auto el ancho pasa a ser el de su contenido más largo (min-content) en vez del de la columna. */
:where(.bloque.pagina, .pagina) { width: 100%; }

/* hijos de flex y grid pueden encoger (sin esto un texto largo o una tabla ensancha el contenedor entero) */
:where(.pagina, .pagina *, header, header *, #barra-movil, #barra-movil *, #mas-panel, #mas-panel *) { min-width: 0; }

:where(img, svg, canvas, video, pre, iframe) { max-width: 100%; }
:where(img, video, canvas) { height: auto; }
:where(svg:not([width]):not([height])) { height: auto; }
:where(pre) { overflow-x: auto; white-space: pre-wrap; overflow-wrap: anywhere; }

/* texto: nada se sale de su caja (titulares, párrafos, chips, celdas, botones, enlaces) */
:where(h1, h2, h3, h4, h5, h6, p, li, dd, dt, summary, label, a, button, span, b, strong, em, small, td, th, blockquote, figcaption,
       .badge, .chip, .mt-chip, .c-imp, .rl-et, .ie-chip, .pag-act, .que, .num) { overflow-wrap: anywhere; }
:where(td, th) { overflow-wrap: break-word; }
:where(button, .btn, [role="button"]) { max-width: 100%; }

/* tablas: contenidas en su caja; solo la caja hace scroll horizontal, nunca la página */
:where(.tabla-scroll) { max-width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; }
:where(table) { max-width: 100%; }
@media (max-width: 900px) {
  :where(table:not(.tabla-scroll table)) { display: block; overflow-x: auto; -webkit-overflow-scrolling: touch; }
}

/* filas de chips y metadatos: pasan a la línea siguiente */
:where(.ec-chips, .ec-filtros, .ec-seg, .dv-chips, .dv-cab, .chips, .filtros, .meta, .metadatos, .badges, .tags, .seccion-cab, .panel-cab,
       .nt-meta, .nt-filtros, .sa-meta, [class*="-chips"], [class*="-meta"], [class*="-filtros"]) { flex-wrap: wrap; }

/* elipsis: solo en etiquetas cortas explícitas, nunca en titulares ni párrafos */
:where(.etiqueta-corta, .ellipsis) { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; overflow-wrap: normal; }

/* Último recurso (la causa real se corrige en cada sección): ningún desborde horizontal hace scroll lateral de la página. `clip` no crea contenedor de scroll, así que no rompe sticky. */
html, body { overflow-x: clip; }

/* Causas reales medidas con detectar_desbordes.js (26/10/2026): cifras del pulso (#pulso .pl-i b) (2-5 px de más) y la tabla de Riesgo de cola (columna auto que dejaba la primera en 0 px: ahora 1fr/1,4fr, en informe.css) */
#pulso .pl-i b.num { display: inline-block; flex: none; min-width: max-content; width: max-content; overflow: visible; }
.pl-i b.num { display: inline-block; width: max-content; min-width: max-content; }
.cola-fila td .badge, .cola-fila td .estado { white-space: normal; overflow-wrap: anywhere; max-width: 100%; }
#pulso .pl-i b.num, .pl-i b.num { min-width: 5ch; }
/* cifras en línea que se parten en dos líneas (Cartera): sin interlineado ajustado no se pisan */
.kpi .v, .kpi .v span { line-height: 1.3; }
