
.tabla_general_contenedor
{
    display: block;
    position: relative;
    left:0;
    top:0;
    width: 100%;
    height: 100%;
    overflow: hidden;
    user-select: none;
}

.tabla_general_carga
{
    display: block;
    position: absolute;
    bottom:0;
    left: 0;
    width: 100%;
    height: 100%;
    background:rgba(255, 255, 255, 1);
    z-index: 5;   /* por encima del header sticky (z-index:2), si no el header le ganaba y la
                     capa de carga dejaba de taparlo (mismo problema que .tabla_general_desSeleccionar) */
    overflow: hidden;
    transition: height 0.4s;
    border-top:1px solid #000;
}

.tabla_general_carga > div
{
    top: 45%;
    margin: 0 auto;
    width: 35%;
}

/*Tabla general*/
.tabla_general
{
	display: flex;
    table-layout: fixed;
    border-collapse: collapse;
    box-shadow: 0px 0px 6px 1px rgba(0,0,0,0.07);
    flex-direction: column;
    height: 100%;
    white-space: nowrap;
    overflow: auto;
    background: #fff;
    position: relative;
}

/* Un buen scroll */
.tabla_general::-webkit-scrollbar {
	width: var(--scrollbar-width, 13px);
	height: var(--scrollbar-width, 13px);
	background: #c7c5c5;
}

.tabla_general tbody::-webkit-scrollbar {
	width: var(--scrollbar-width, 13px);
	height: var(--scrollbar-width, 13px);
	background: #c7c5c5;
}

.tabla_general thead tr th
{
	text-align: center;
	border-bottom: 1px solid #c0c0c0;
}

.tabla_general thead
{
    display: flex;
    width: max-content;
    /* Header fijo arriba al scrollear vertical. Ahora el scroll (V y H) lo hace .tabla_general,
       que es el ÚNICO viewport: así la barra vertical queda en el borde visible y no "se mete
       adentro" cuando las columnas desbordan. Horizontalmente el header acompaña a los renglones. */
    position: sticky;
    top: 0;
    z-index: 2;
    background: #efeeee;
}

.tabla_general tbody
{
    display: flex;
    flex-direction:column;
    text-align: left;
    width: max-content;
    /* Sin scroll ni height:100% propios: el scroll vertical lo hace .tabla_general. flex:1 0 auto
       hace que el tbody llene el alto cuando hay pocos renglones, y lo desborde (scroll) cuando hay
       muchos. */
    flex: 1 0 auto;
}

.tabla_general > tbody > tr, .tabla_general > thead > tr
{
	cursor: pointer;
    transition: background 0.3s, color 0.3s;
    box-shadow: 0px 0px 2px 0px #FFF inset;
    display: block;
}

.tabla_general tbody tr td
{
	white-space: nowrap;
	text-overflow: ellipsis;
	overflow: hidden;
    text-align: left;
}

.tabla_general tbody tr:not(:last-child) td
{
	height: 100%;
}

.tabla_general > tbody > tr:last-child
{
	flex: 1 0 auto;   /* renglón de relleno: crece para llenar el espacio vacío abajo (antes height:100%) */
    overflow:hidden;
    cursor: default;
}

.tabla_general > tbody > tr:last-child > td
{
	height:100%;
}

.tabla_general th, .tabla_general td
{
    padding: 10px 12px;
    display: inline-block;
    width: 108px;
    box-sizing: border-box;
    position: relative;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    /* Centrado vertical del contenido de la celda. Todas las celdas del renglon ya miden lo mismo
       (el height:100% de abajo las estira a la mas alta: en la ventana 16 la tapa de 68px las lleva
       a 88), pero el contenido de cada una quedaba pegado arriba, contra su padding.
       align-content centra el contenido de un contenedor de BLOQUE sin convertirlo en flex, que es
       justo lo que hace falta: con display:inline-flex + align-items:center el text-overflow:ellipsis
       de arriba dejaria de aplicar (no alcanza al contenido anonimo de un contenedor flex) y se
       perderian los "..." de los titulos y codigos largos.
       Requiere Chrome 123+ / Firefox 125+ / Safari 17.4+ (2024). Sin soporte degrada a lo de antes
       (contenido arriba), no rompe nada. */
    align-content: center;
}

.tabla_general th:not(:last-child), .tabla_general td:not(:last-child)
{
	border-right:1px solid #c0c0c0;
}

/* Handle de redimensionado en el borde derecho de cada th (el usuario arrastra para cambiar el
   ancho de esa columna; doble-clic resetea al ancho automático). */
.tabla_general th .tabla_general_redim
{
    position: absolute;
    top: 0;
    right: 0;
    width: 7px;
    height: 100%;
    cursor: col-resize;
    z-index: 3;
    user-select: none;
}

.tabla_general th .tabla_general_redim:hover
{
    background: rgba(0, 0, 0, 0.18);
}

/* Rayado por índice de DATO (no nth-child): con virtualización las filas renderizadas son una
   franja, así que nth-child parpadearía al scrollear. La clase la pone _html_fila según i. */
.tabla_general > tbody > tr.tabla_general_fila_impar
{
    background: rgba(40, 40, 40, 0.03);
}

/* Spacers de virtualización: ocupan el alto de las filas no renderizadas (arriba/abajo de la
   ventana visible) para que la barra de scroll refleje el total. No interactúan. */
.tabla_general > tbody > tr.tabla_general_spacer
{
    flex: 0 0 auto;
    pointer-events: none;
    cursor: default;
    box-shadow: none;
    background: transparent;
}


.tabla_general_desSeleccionar
{
    display: block;
    top:-60px;
    right: 20px;
    position: absolute;
    border-bottom:0;
    border-radius: 0px 0px 10px 10px;
    padding: 10px 15px;
    color:#FFF;
    background:red;
    transition: top 0.5s;
    z-index: 5;   /* por encima del header sticky (z-index:2 del punto 3), si no quedaba tapado */
}



/* Clase ordenar columnas */

.tabla_general_ordenar, .tabla_general_ordenar2
{
    background: #f1f1f1;
    position: relative;
}

.tabla_general_ordenar::before
{
    content: ">";
    position: absolute;
    color:#000;
    top:11px;
    right: 5px;
    transform: rotate(90deg);
}

.tabla_general_ordenar2::before
{
    content: ">";
    position: absolute;
    color:#000;
    top:11px;
    right: 5px;
    transform: rotate(270deg);
}