/*STYLES FOR LOGIN (START)*/
@import url('https://fonts.googleapis.com/css2?family=Open+Sans&display=swap');
.auth-wrapper {
    height: 100vh;
    display: flex;
    flex-wrap: wrap;
    font-family: 'Open Sans', sans-serif;
}

.auth-side-img {
    width: calc(100% - 400px);
}

.auth-bg-img {
    background-size: cover;
    background-attachment: fixed;
}
.auth-banner-sian {
    position: absolute;
    bottom: 15px;
    left: 10px;
    padding-left: 7rem;
    padding-bottom: 7rem;
}
.auth-banner-sian  .auth-text {
    margin-top: 10px;
    font-family: 'Open Sans', sans-serif;
}

.auth-side-form {
    width: 400px;
    background-color: #F6F6F6;
    display: flex;
    flex-direction: column;
    flex-wrap: wrap;
}
.auth-form-header {
    height: 35%;
    width: 100%;
    padding: 5px 20px 10px 20px;
    box-sizing: border-box;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: flex-end;
}
.auth-img-logo {
    max-width: 200px;
    max-height: 150px;
}
.auth-img-logo.svg {
    height: 50px;
    max-width: 200px;
    max-height: 150px;
}
.auth-form-content {
    height: 40%;
    width: 100%;
    padding: 20px 60px 0px 60px;
    margin: 0px;
    box-sizing: border-box;
}
.auth-user.form-control, .auth-password.form-control {
    border-radius: 0px;
    font-size: 15px;
    padding: 20px 10px;
}
.auth-btn-login.btn-default {
    display: inline-block;
    font-weight: normal;
    font-size: 11px;
    line-height: 1.45;
    text-align: center;
    white-space: nowrap;
    cursor: pointer;
    user-select: none;
    padding: 6px 10px;
    margin-top: 15px;
    margin-bottom: 0px;
    border-radius: 0px;
    color: #ffffff;
    background-color: #FF6B00;
    border: 1px solid transparent;
    border-color: #FF6B00;
}

.auth-btn-login.btn-default:active, .auth-btn-login.btn-default:hover, .auth-btn-login.btn-default:active:hover, .auth-btn-login.btn-default:active:focus {
    color: #ffffff;
    background-color: #FF6B00;
    border-color: #FF6B00;
    opacity: 0.7;
}
.auth-wrapper-recover-account {
    margin-top: 25px;
    display: none;
}
.auth-wrapper-recover-account a {
    color: #3DAE2B;
}

.auth-sian-banner-gris {
    width: 130px;
}
.auth-form-footer {
    width: 100%;
    height: 25%;
    padding: 20px 20px 10px 20px;
    box-sizing: border-box;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: flex-end;
}
.auth-form-footer .auth-text {
    font-family: 'Open Sans', sans-serif;
    font-size: 15px;
    margin: 10px 0px;
}


@media (max-width: 575.98px) {
    .auth-side-img {
        width: 0px;
        display: none;
    }
    .auth-side-form {
        width: 100%;
    }
}
/*STYLES FOR LOGIN (END)*/

body.bg-banner-1 {
    background-size:cover;
    background-attachment:fixed;
}



/*STYLES FOR PAGE (START)*/
div#page {
    margin-top: 65px;
    padding: 0px;
}
/*STYLES FOR PAGE (END)*/

li.sian-navbar-first{
    font-size: 16px;
}

li.sian-navbar-first > a{
    color: #077FF7 !important;
}

li.sian-navbar-first:hover > a{
    color: black !important;
}

a.no-border{
    border: none;
}

div.us-detail > table td, div.us-detail > table th {
    padding: 3px 0px !important;
    text-align: left;
}

div.us-detail > table td:nth-child(2), div.us-detail > table th:nth-child(2){
    padding: 3px 10px !important;
    text-align: left;
}
h1.page-title{
    padding-bottom: 12px;
}

.ct-form-control {
    min-width: 100px;
}

.colorpicker-element:hover
{
    cursor: pointer;
}

select[readonly]:hover
{
    cursor: not-allowed;
}

div.us-select2-div
{
    overflow: hidden;
}

div.us-select2-div span.us-span:hover
{
    cursor: pointer;
    animation-play-state: paused

}

div.us-select2-div span.us-span-readonly
{
    background-color: rgb(238, 238, 238);
}


/* Make it move */
@keyframes marquee {
    0% {
        margin-left: 100%;
        transform: translateX(0%);
    }
    100% {
        margin-left: 0;
        transform: translateX(-100%);
    }
}

input.sian-force-tooltip:disabled {
    pointer-events: auto;
}
input.sian-force-tooltip:-moz-read-only { /* For Firefox */
    pointer-events: auto;
}
input.sian-force-tooltip:read-only {
    pointer-events: auto;
}

.grid-view
{
    padding-top: 10px;
}

.tableFixHead
{
    overflow-y: auto;
    height: 100px;
}
.tableFixHead thead th {
    position: sticky;
    top: 30px; /* Es el alto del navbar*/
    background:#fff;
}


/*chat de soporte*/
.d-hotline {
    background-color: #FF6B00 !important;
    color: #ffff !important;
    border-color: transparent #3DAE2B transparent transparent;
}
.icon-ic_chat_icon:before {
    font-size: 50px;
}

.custom_fc_frame {
    right: 50px !important;
    bottom: 30px !important;
}

/* =====================================================================
   Tipografia del sistema: Inter (SIAN-7697)

   Es la familia de SIAN 2 (`font-sans` de su Tailwind). Se aplica a TODO el
   ERP por decision expresa, no solo a la cabecera: la fuente se carga en
   SIANAssets::registerCoreCss, que corre en cada pagina.

   Ojo al revisar: cambiar la familia base mueve el ancho de todo el texto,
   asi que las columnas de los grids, los botones y los formularios se ven
   ligeramente distintos. Es esperado.
   ===================================================================== */
body,
button,
input,
select,
textarea,
.auth-wrapper,
.auth-banner-sian .auth-text {
    font-family: "Inter", system-ui, -apple-system, "Segoe UI", sans-serif;
}

/* =====================================================================
   View Transitions entre navegaciones

   ACTIVACION. Esta regla es la que enciende las transiciones entre
   documentos. Cuidado si se busca documentacion vieja: el
   `<meta name="view-transition" content="same-origin">` era la sintaxis
   del origin trial de Chrome de 2023 y NO llego a la especificacion
   final — no hace nada. La forma vigente es esta regla CSS
   (View Transitions Level 2, Chrome 126+ / Safari 18.2+).

   Tiene que estar presente en la pagina que se deja Y en la que se
   entra. Como vive en styles.css, que carga en los tres layouts via
   SIANAssets::registerCoreCss, eso se cumple solo.

   En navegadores sin soporte la regla se ignora y la navegacion queda
   exactamente como estaba.
   ===================================================================== */
@view-transition {
    navigation: auto;
}

/* Fundido con una elevacion minima, no un desplazamiento completo.

   Esto es una herramienta de trabajo donde se navega decenas de veces al
   dia: un slide de pantalla completa es un patron de app movil, cansa a
   la decima vez y en las pantallas con grids grandes el snapshot es caro
   y se nota el tiron. 10px y 200ms alcanzan para borrar el corte blanco
   sin pedir atencion.

   mix-blend-mode: normal evita el aclarado (plus-lighter) que el
   navegador aplica por defecto y que se ve sucio sobre fondos claros. */
::view-transition-old(root),
::view-transition-new(root) {
    mix-blend-mode: normal;
    animation-duration: 0.2s;
    animation-timing-function: cubic-bezier(.4, 0, .2, 1);
}

::view-transition-old(root) {
    animation-name: sian-vt-out;
}

::view-transition-new(root) {
    animation-name: sian-vt-in;
}

@keyframes sian-vt-out {
    to {
        opacity: 0;
        transform: translateY(-10px);
    }
}

@keyframes sian-vt-in {
    from {
        opacity: 0;
        transform: translateY(10px);
    }
}

/* ---------------------------------------------------------------------
   La barra superior queda fija.

   Es chrome de la aplicacion, no contenido: verla desvanecerse en cada
   clic delata la recarga. Con su propio nombre de transicion el
   navegador la saca del snapshot de `root` y la trata como el mismo
   elemento entre paginas, asi que se queda quieta mientras el contenido
   cambia debajo — que es como se comporta una SPA.
   --------------------------------------------------------------------- */
.navbar-fixed-top {
    view-transition-name: sian-navbar;
}

::view-transition-old(sian-navbar),
::view-transition-new(sian-navbar) {
    animation: none;
    mix-blend-mode: normal;
}

/* ---------------------------------------------------------------------
   Elemento compartido: la fila del grid se transforma en el titulo del
   documento.

   El nombre se lo pone sian-view-transitions.js a la fila que se
   pulsa, justo antes de navegar (tiene que ser unico en la pagina, y un
   grid tiene cientos de filas). El destino es el <h1> de la vista, que
   lo lleva fijo desde el layout.

   Si se llega a una vista sin venir de un grid, solo existe el lado
   nuevo: el navegador lo hace aparecer y ya, sin romper nada.
   --------------------------------------------------------------------- */
.sian-vt-doc {
    view-transition-name: sian-vt-doc;
}

::view-transition-old(sian-vt-doc),
::view-transition-new(sian-vt-doc) {
    animation-duration: 0.28s;
    animation-timing-function: cubic-bezier(.4, 0, .2, 1);
    mix-blend-mode: normal;
}

@media (prefers-reduced-motion: reduce) {
    ::view-transition-old(root),
    ::view-transition-new(root),
    ::view-transition-old(sian-vt-doc),
    ::view-transition-new(sian-vt-doc) {
        animation: none !important;
    }
}
/* ============================================================
   Planillas sin terminar (borradores) - human/payroll/_drafts
   No es una tabla a proposito: si se parece al grid de abajo se
   lee como "mas planillas" en vez de como trabajo propio a
   medias. El borde izquierdo punteado significa que el
   documento no esta cerrado.
   ============================================================ */
.sian-drafts {
    margin-bottom: 18px;
}
.sian-drafts-head {
    display: flex;
    align-items: baseline;
    flex-wrap: wrap;
    gap: 10px;
    margin-bottom: 8px;
}
.sian-drafts-eyebrow {
    font-size: 10px;
    font-weight: 600;
    letter-spacing: .14em;
    text-transform: uppercase;
    color: #FF6B00;
}
.sian-drafts-list {
    margin: 0;
    padding: 0;
    list-style: none;
}
/* Sin borde ni sombra: el tinte y el punteado ya separan el bloque del grid */
.sian-draft {
    position: relative;
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 4px 18px;
    padding: 13px 18px 15px 0;
    margin-bottom: 6px;
    background-color: #FFF9F4;
    /* Contenedor mas suave que lo de adentro: el boton usa 2px */
    border-radius: 3px;
    color: #3D3835;
    text-decoration: none;
    transition: background-color .2s ease, transform .2s ease;
}
.sian-draft:hover,
.sian-draft:focus {
    background-color: #FFF1E3;
    color: #3D3835;
    text-decoration: none;
}
.sian-draft:active {
    transform: translateY(1px);
}
.sian-draft:focus {
    outline: 2px solid #FF6B00;
    outline-offset: 2px;
}
.sian-draft:focus:not(:focus-visible) {
    outline: none;
}
/* --- Agrupado por tipo. El chip encabeza el grupo, no cada fila: si el grupo
   ya dice Liquidacion, repetirlo en sus filas es decirlo dos veces. */
.sian-drafts-groups {
    display: flex;
    flex-direction: column;
    gap: 18px;
}
.sian-drafts-group {
    display: flex;
    flex-direction: column;
    gap: 6px;
}
.sian-drafts-gh {
    display: flex;
    align-items: center;
    gap: 10px;
}
.sian-draft-chip {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 2px 8px 3px;
    border: 1px solid #E3DCD4;
    border-radius: 2px;
    background: #FFFFFF;
    color: #6E655E;
    font-size: 10px;
    font-weight: 600;
    letter-spacing: .08em;
    text-transform: uppercase;
    white-space: nowrap;
}
/* Oscuro solo la liquidacion: es la excepcion --se paga en 48 horas-- y el
   naranja ya esta tomado por "sin emitir" y por el boton */
.sian-draft-chip-strong {
    padding: 3px 8px 4px;
    border-color: #3D3835;
    background: #3D3835;
    color: #FFFFFF;
}
.sian-drafts-count {
    font-size: 11px;
    color: #A79C93;
    font-variant-numeric: tabular-nums;
}
.sian-drafts-rule {
    flex: 1 1 auto;
    height: 1px;
    background: #EFE9E3;
}
.sian-drafts-gnote {
    font-size: 11px;
    color: #8A8078;
    white-space: nowrap;
}
@media (max-width: 767px) {
    .sian-drafts-gnote {
        display: none;
    }
}

/* El enlace cubre la fila entera para que siga siendo toda clicable, y el boton de
   descartar se levanta por encima. Va con z-index 0 --no negativo-- porque debajo del
   fondo de la fila no recibiria el clic */
.sian-draft-link {
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    z-index: 0;
    border-radius: 3px;
}
.sian-draft-go,
.sian-draft-drop {
    position: relative;
    z-index: 1;
}
/* Destructivo, asi que va callado hasta que lo apuntas: si compite con "Continuar"
   por la mirada, alguien va a descartar el borrador que venia a seguir */
.sian-draft-drop {
    flex: 0 0 auto;
    padding: 5px 10px;
    background: transparent;
    border: 1px solid transparent;
    border-radius: 2px;
    color: #A79C93;
    font-size: 12px;
    white-space: nowrap;
}
.sian-draft-drop:hover,
.sian-draft-drop:focus {
    border-color: #E4CDC8;
    color: #C0392B;
}
.sian-draft-drop:focus {
    outline: 2px solid #C0392B;
    outline-offset: 1px;
}
.sian-draft-drop:focus:not(:focus-visible) {
    outline: none;
}
/* El del banco no es destructivo: callado igual, pero sin el rojo al apuntarlo */
.sian-draft-bank:hover,
.sian-draft-bank:focus {
    border-color: #D9D2CB;
    color: #3D3530;
}
.sian-draft-bank:focus {
    outline-color: #3D3530;
}
.sian-draft-drop[disabled] {
    opacity: .5;
}

/* Punteado = sin cerrar. Es la unica licencia visual del bloque */
.sian-draft-edge {
    align-self: stretch;
    width: 0;
    margin-right: 16px;
    border-left: 3px dashed #FF6B00;
}
.sian-draft-main {
    flex: 1 1 14rem;
    min-width: 0;
}
.sian-draft-period {
    display: block;
    font-size: 17px;
    font-weight: 600;
    line-height: 1.25;
    letter-spacing: -.01em;
    color: #2E2A27;
}
.sian-draft-sub,
.sian-draft-meta {
    font-size: 12px;
    color: #8A8078;
    /* Cifras tabulares: son datos, no prosa */
    font-variant-numeric: tabular-nums;
}
.sian-draft-sub {
    display: block;
}
.sian-draft-meta {
    flex: 0 1 auto;
}
/* Marca cuadrada, no pildora: la pildora de estado es el gesto por defecto y
   ademas competia con el boton por ser el elemento con mas peso de la fila */
.sian-draft-taken {
    color: #C0392B;
    font-weight: 600;
}
.sian-draft-taken:before {
    content: "";
    display: inline-block;
    width: 7px;
    height: 7px;
    margin-right: 6px;
    background-color: #C0392B;
}
.sian-draft-go {
    flex: 0 0 auto;
    padding: 5px 14px;
    border: 1px solid #FF6B00;
    border-radius: 2px;
    color: #FF6B00;
    font-size: 13px;
    font-weight: 600;
    white-space: nowrap;
}
.sian-draft:hover .sian-draft-go {
    background-color: #FF6B00;
    color: #fff;
}
/* Ahora es un <a>: sin el subrayado del enlace generico del ERP */
.sian-draft-go:hover,
.sian-draft-go:focus {
    color: #fff;
    text-decoration: none;
}
@media (max-width: 767px) {
    .sian-draft-meta,
    .sian-draft-go {
        flex-basis: 100%;
    }
    .sian-draft-go {
        text-align: center;
    }
}
@media (prefers-reduced-motion: reduce) {
    .sian-draft {
        transition: none;
    }
}

/* ============================================================
   Grid de planilla (human/payroll) - widget SIANPayroll
   300 trabajadores x ~80 columnas. Es la pantalla donde RRHH
   pasa horas, asi que manda la lectura, no el adorno.
   ============================================================ */

/* La cabecera no se pierde al bajar. Con altura completa es lo
   que evita tener que subir a ver de que columna es el numero */
.sian-payroll-grid .ui-jqgrid-hdiv {
    position: sticky;
    top: 30px; /* Es el alto del navbar */
    z-index: 4;
}
.sian-payroll-grid .ui-jqgrid-bdiv {
    overflow-y: hidden;
}

/* Cebra. En una fila de 80 celdas el ojo se va de renglon:
   el contraste minimo entre filas es lo que lo sostiene.
   OJO: va con el atajo background, no con background-color. El tema de
   jQuery UI pinta .ui-widget-content con una IMAGEN de fondo
   (ui-bg_highlight-soft_100_eeeeee_1x100.png) y solo el atajo la borra.
   Con background-color la imagen queda encima y la cebra solo se ve en
   las columnas fijas, que heredan el color y no tienen esa imagen. */
.sian-payroll-grid tr.jqgrow {
    background: #fff;
}
.sian-payroll-grid tr.jqgrow.sian-payroll-alt {
    background: #EAE8E2;
}
.sian-payroll-grid tr.jqgrow:hover,
.sian-payroll-grid tr.jqgrow:hover td {
    background: #FFF6EE;
}
/* La fila seleccionada usa el naranja de SIAN, no el azul del tema */
.sian-payroll-grid tr.jqgrow.ui-state-highlight,
.sian-payroll-grid tr.jqgrow.ui-state-highlight td {
    background: #FFE9D5;
    color: #3D3835;
}
/* La columna que se esta editando (RRHH, 2026-09-23). Va despues de la cebra, el hover
   y la fila seleccionada para ganarles: es lo unico que dice de que concepto es el monto. */
.sian-payroll-grid tr.jqgrow td.sian-col-on,
.sian-payroll-grid tr.jqgrow.sian-payroll-alt td.sian-col-on,
.sian-payroll-grid tr.jqgrow.ui-state-highlight td.sian-col-on {
    background: #DCEBFA;
}
.sian-payroll-grid .ui-jqgrid-htable th.sian-col-on {
    box-shadow: inset 0 -3px 0 #2B6CB0;
    background: #DCEBFA;
    color: #1A365D;
}
.sian-payroll-sort {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    margin: 0 8px 0 0;
    font-weight: 600;
}
.sian-payroll-sort select {
    width: auto;
}

/* Los totales, igual: sin la imagen del tema */
.sian-payroll-grid tr.footrow,
.sian-payroll-grid tr.footrow td {
    background: #F0EFEC;
}

/* Cifras tabulares: son montos, se leen en columna */
.sian-payroll-grid tr.jqgrow td,
.sian-payroll-grid .ui-jqgrid-ftable td {
    font-variant-numeric: tabular-nums;
}

/* Columnas fijas (documento y colaborador). Sin esto, al llegar
   a la columna 40 ya no se sabe de quien es la fila */
.sian-payroll-grid .sian-payroll-sticky {
    position: sticky;
    z-index: 2;
    background-color: inherit;
}
.sian-payroll-grid th.sian-payroll-sticky {
    z-index: 5;
}
.sian-payroll-grid tr.jqgrow:hover td.sian-payroll-sticky {
    background-color: #FFF6EE;
}
/* El corte entre lo fijo y lo que se desplaza. Sombra calida,
   del tono del fondo, no negro generico */
.sian-payroll-grid .sian-payroll-sticky-last {
    box-shadow: 6px 0 6px -6px rgba(61, 56, 53, .35);
}

/* La fila en edicion se marca por si sola */
.sian-payroll-grid tr.jqgrow td input.editable {
    border: 1px solid #FF6B00;
    border-radius: 2px;
}

/* Los totales tampoco se pierden: con 300 filas, el numero que
   se compara contra el banco tiene que estar siempre a la vista */
.sian-payroll-grid .ui-jqgrid-sdiv {
    position: sticky;
    bottom: 0;
    z-index: 4;
}

/* El titulo de la columna se parte en dos lineas en vez de cortarse.
   jqGrid lo fija en height:17px con overflow:hidden, y por eso se leia
   "F. Nacimie" o "afpprofutur". Ensanchar sin esto solo mueve el corte */
.sian-payroll-grid .ui-jqgrid-htable th div {
    height: auto;
    white-space: normal;
    line-height: 1.15;
    padding: 1px 0;
    /* Con la columna al ancho del importe, un nombre largo se parte en cinco o seis
       lineas y la cabecera acaba mas alta que media planilla. Tope de 3; el nombre
       entero se sigue viendo en el selector de columnas. */
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    overflow: hidden;
    overflow-wrap: anywhere;
}

/* Selector de columnas del grid de planilla */
.sian-cols {
    display: inline-block;
    margin-right: 6px;
}
.sian-cols-count:not(:empty):before {
    content: "(";
}
.sian-cols-count:not(:empty):after {
    content: " ocultas)";
}
/* Mas ancho que el minimo de Bootstrap: los nombres de concepto son largos
   ("Reintegro de Sueldo (Afecto)") y en 280px se cortaban casi todos */
.sian-cols-menu {
    min-width: 340px;
    max-width: 400px;
    padding: 10px;
}
.sian-cols-filter {
    margin-bottom: 8px;
}
.sian-cols-list {
    max-height: 320px;
    overflow-y: auto;
}
/* El color del grupo tambien aca: el menu y la tabla tienen que leerse como
   una sola cosa. Lo pinta el JS en el `style` de cada titulo, con el color que
   la empresa eligio para ese grupo */
.sian-cols-group {
    margin: 10px 0 4px;
    padding-left: 8px;
    border-left: 3px solid #FF6B00;
    font-size: 10px;
    font-weight: 600;
    letter-spacing: .12em;
    text-transform: uppercase;
    color: #8A8078;
}
.sian-cols-group:first-child {
    margin-top: 0;
}
/* En una linea por columna: son cien, y si cada nombre largo parte en dos la
   lista mide el doble y hay que barrerla dos veces para encontrar una */
.sian-cols-item {
    display: block;
    margin: 0;
    padding: 3px 4px 3px 11px;
    font-weight: normal;
    cursor: pointer;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.sian-cols-item:hover {
    background-color: #FFF6EE;
}
/* Las acciones, una por linea: pegadas se leian como un solo enlace
   ("Mostrar todasVolver al diccionario") */
.sian-cols-actions {
    margin-top: 8px;
    padding-top: 8px;
    border-top: 1px solid #EDE9E4;
}
.sian-cols-actions > a {
    display: block;
    padding: 2px 0;
    font-size: 12px;
}

/* 11px con Trebuchet MS es lo que trae jqGrid con el tema de jQuery UI.
   En la pantalla donde alguien pasa la mañana leyendo importes, eso es poco:
   sube a 13px y toma la tipografia del resto de SIAN */
.sian-payroll-grid,
.sian-payroll-grid .ui-jqgrid-view,
.sian-payroll-grid input,
.sian-payroll-grid select {
    font-family: inherit;
    /* 11px es la base real del ERP (bootstrap.css). A 13px la planilla se veia mas
       grande que el resto del sistema Y entraban menos conceptos en pantalla, que es
       lo que se pasa el dia mirando quien la revisa */
    font-size: 11px;
}
.sian-payroll-grid tr.jqgrow td,
.sian-payroll-grid .ui-jqgrid-ftable td {
    height: 20px;
    padding: 0 4px;
}
.sian-payroll-grid .ui-jqgrid-htable th {
    padding: 2px 4px;
}

/* =====================================================================
   PLANILLA EN ESTILO SIAN 2 (usuario, 2026-09-17: eligio la opcion C de las
   maquetas, "si lo haces igual esta bien"). Tarjetas blancas sobre #F6F7FB,
   eyebrow + titulo, controles de 34px, segmentado de columnas y acciones a la
   derecha. Todo acotado a .sian-payroll-form (views/payroll/form.php y
   view.php): el resto de formularios del ERP no cambia. Bootstrap carga
   despues, por eso los selectores llevan el contenedor delante.
   Markup: SIANPayrollUi, SIANPayrollTabulator::run, SIANPayrollView::run.
   ===================================================================== */
/* La grilla clasica de emergencia (?grid=clasico, SIANPayroll) conserva una barra simple */
.sian-payroll-bar {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 6px;
    padding: 8px 0;
}
.sian-payroll-bar-status {
    margin-left: auto;
    font-size: 12px;
}
.sian-payroll-form {
    --sian-pf-accent: #625EF1;
    --sian-pf-ink: #141820;
    --sian-pf-text: #1F2430;
    --sian-pf-muted: #5E6573;
    --sian-pf-eyebrow: #7A8190;
    --sian-pf-line: #E4E7EE;
    --sian-pf-control: #DCE0E7;
    font-family: "Inter", system-ui, -apple-system, "Segoe UI", sans-serif;
}
.sian-payroll-form .sian-pf-i {
    width: 14px;
    height: 14px;
    flex: none;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.9;
    stroke-linecap: round;
    stroke-linejoin: round;
}
.sian-payroll-form .sian-pf-card {
    margin-bottom: 14px;
    background: #fff;
    border: 1px solid var(--sian-pf-line);
    border-radius: 12px;
}
.sian-payroll-form .sian-pf-eyebrow {
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: .09em;
    text-transform: uppercase;
    color: var(--sian-pf-eyebrow);
}
.sian-payroll-form .sian-pf-title {
    font-size: 15px;
    font-weight: 700;
    line-height: 1.3;
    color: var(--sian-pf-ink);
}
.sian-payroll-form .sian-pf-card-h {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 14px 16px 4px;
}

/* --- Datos generales: los widgets de siempre, reacomodados en 6 columnas.
   Las filas y columnas de Bootstrap que ENVUELVEN a cada campo se vuelven
   transparentes (display: contents); las de adentro de un campo (el
   autocompletar de Proyecto) se quedan como estan. */
.sian-payroll-form .sian-pf-fields {
    display: grid;
    grid-template-columns: repeat(6, minmax(0, 1fr));
    gap: 12px 14px;
    padding: 10px 16px 16px;
}
.sian-payroll-form .sian-pf-fields .row:not(.form-group .row),
.sian-payroll-form .sian-pf-fields [class*="col-"]:not(.form-group [class*="col-"]),
.sian-payroll-form .sian-pf-fields .us-autocomplete {
    display: contents;
}
/* El clearfix de Bootstrap (.row::before/::after) seguiria generando cajas y
   ocuparia celdas de la grilla */
.sian-payroll-form .sian-pf-fields .row:not(.form-group .row)::before,
.sian-payroll-form .sian-pf-fields .row:not(.form-group .row)::after {
    display: none;
}
.sian-payroll-form .sian-pf-fields .form-group {
    grid-column: span 1;
    min-width: 0;
    margin: 0;
}
.sian-payroll-form .sian-pf-fields .form-group:has([name="Movement[business_unit_id]"]),
.sian-payroll-form .sian-pf-fields .form-group:has([name="PayrollMovement[dictionary_id]"]) {
    grid-column: span 2;
}
.sian-payroll-form .sian-pf-fields .form-group:has(.us-autocomplete-aux),
.sian-payroll-form .sian-pf-fields .form-group:has([name="Movement[person_id]"]) {
    grid-column: span 3;
}
.sian-payroll-form .sian-pf-fields .control-label {
    display: block;
    margin: 0 0 4px;
    font-size: 11.5px;
    font-weight: 500;
    color: var(--sian-pf-muted);
}
/* Sin asteriscos: en esta tarjeta todo es obligatorio salvo Proyecto. Los
   errores de validacion (help-block) siguen apareciendo debajo del campo. */
.sian-payroll-form .sian-pf-fields .control-label span.required {
    display: none;
}
.sian-payroll-form .sian-pf-fields .form-control {
    height: 34px;
    padding: 6px 10px;
    font-size: 12px;
    color: var(--sian-pf-text);
    border: 1px solid var(--sian-pf-control);
    border-radius: 8px;
    box-shadow: none;
}
.sian-payroll-form .sian-pf-fields .form-control[readonly],
.sian-payroll-form .sian-pf-fields .form-control[disabled] {
    background-color: #F1F2F5;
    color: #4A505C;
}
.sian-payroll-form .sian-pf-fields .input-group .form-control {
    border-radius: 8px 0 0 8px;
}
.sian-payroll-form .sian-pf-fields .input-group-addon,
.sian-payroll-form .sian-pf-fields .input-group-btn .btn {
    height: 34px;
    border-color: var(--sian-pf-control);
    border-radius: 0 8px 8px 0;
    background: #F6F7FB;
}
/* Proyecto: el buscador y el nombre elegido, lado a lado dentro de sus 3 columnas */
.sian-payroll-form .sian-pf-fields .us-autocomplete .form-group > .row {
    display: flex;
    gap: 8px;
    margin: 0;
}
.sian-payroll-form .sian-pf-fields .us-autocomplete .form-group > .row > [class*="col-"] {
    padding: 0;
}
.sian-payroll-form .sian-pf-fields .help-block {
    margin: 4px 0 0;
    font-size: 11px;
}

/* --- Detalle de planilla: tarjeta, barra y grilla. overflow: clip (no hidden)
   para redondear sin romper la barra pegajosa. */
.sian-payroll-form .sian-pf-detail {
    margin-bottom: 0;
    overflow: clip;
}
/* Con un desplegable abierto (Elegir columnas, mas acciones) la tarjeta deja de recortar: si
   no, la lista se cortaba en el borde de la grilla y no se llegaba al final (Vida Ley) */
.sian-payroll-form .sian-pf-detail:has(.open) {
    overflow: visible;
}
.sian-payroll-form .sian-payroll-bar {
    position: sticky;
    top: 30px; /* Es el alto del navbar */
    /* Por encima de las columnas congeladas de la grilla (z-index 12): si no, el menu de
       columnas y el de mas acciones quedaban DEBAJO de la grilla (usuario, 2026-09-24) */
    z-index: 20;
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 10px;
    margin: 0;
    padding: 12px 16px;
    background: #fff;
    border-bottom: 1px solid #EEF0F4;
    border-radius: 12px 12px 0 0;
}
.sian-payroll-form .sian-pf-push {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-left: auto;
}

/* Segmentado: Resumen | Todas las columnas | Elegir */
.sian-payroll-form .sian-pf-seg {
    display: inline-flex;
    align-items: center;
    gap: 2px;
    padding: 3px;
    background: #F1F3F7;
    border-radius: 9px;
}
.sian-payroll-form .sian-pf-seg button {
    display: flex;
    align-items: center;
    gap: 6px;
    height: auto;
    padding: 5px 10px;
    font-size: 12px;
    font-weight: 400;
    line-height: 1.5;
    color: #4B5261;
    background: transparent;
    border: 0;
    border-radius: 7px;
    box-shadow: none;
}
.sian-payroll-form .sian-pf-seg button.sian-pf-seg-on {
    font-weight: 600;
    color: var(--sian-pf-ink);
    background: #fff;
    box-shadow: 0 1px 2px rgba(0, 0, 0, .08);
}
.sian-payroll-form .sian-pf-seg .sian-cols {
    display: inline-block;
}
/* El conteo de ocultas va en el tooltip del boton, no en el texto */
.sian-payroll-form .sian-pf-seg .sian-cols-count {
    display: none;
}

/* Botones de 34px */
.sian-payroll-form .sian-pf-btn,
.sian-payroll-form a.sian-pf-btn {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    height: 34px;
    padding: 0 13px;
    font-size: 12.5px;
    font-weight: 600;
    line-height: 1;
    color: var(--sian-pf-text);
    white-space: nowrap;
    text-decoration: none;
    background: #fff;
    border: 1px solid var(--sian-pf-control);
    border-radius: 9px;
    cursor: pointer;
}
.sian-payroll-form .sian-pf-btn:hover {
    background: #F6F7FB;
}
.sian-payroll-form .sian-pf-btn:focus-visible,
.sian-payroll-form .sian-pf-seg button:focus-visible {
    outline: 2px solid var(--sian-pf-accent);
    outline-offset: 2px;
}
.sian-payroll-form .sian-pf-btn.sian-pf-btn-pri {
    color: #fff;
    background: var(--sian-pf-accent);
    border-color: var(--sian-pf-accent);
}
.sian-payroll-form .sian-pf-btn.sian-pf-btn-pri:hover {
    filter: brightness(.94);
}
.sian-payroll-form .sian-pf-btn.sian-pf-btn-icon {
    padding: 0 9px;
    color: #6B7280;
}
.sian-payroll-form .sian-pf-btn[disabled] {
    opacity: .6;
    cursor: default;
}

/* Chip del autoguardado: draftStatus() pone text-success / text-danger / text-muted */
/* Planilla nueva (Tabulator): localizador de la celda que se edita (RRHH, 2026-09-23).
   Sin tocar el fondo de la cabecera: cada grupo tiene su color (amarillo, azul, rojo) y un
   relleno encima la volvia ilegible. Marco oscuro, que se lee sobre cualquiera de ellos. */
.sian-payroll-form .tabulator .tabulator-col.sian-col-on {
    box-shadow: inset 0 0 0 2px #111827, inset 0 -5px 0 #111827 !important;
}
.sian-payroll-form .tabulator .tabulator-cell.sian-cell-on {
    box-shadow: inset 0 0 0 2px #111827 !important;
}
/* El mismo localizador al pasar el mouse, atenuado. Va ANTES de las reglas de edicion para que,
   en la celda que se edita, gane el marcado fuerte. */
.sian-payroll-form .tabulator .tabulator-col.sian-col-hover {
    box-shadow: inset 0 -4px 0 rgba(17, 24, 39, .55);
}
.sian-payroll-form .tabulator .tabulator-cell.sian-cell-hover {
    box-shadow: inset 0 0 0 1px rgba(17, 24, 39, .35);
}
/* El nombre lleva la MISMA barra que la cabecera (usuario, 2026-09-23: «el mismo acento en la
   fila del nombre del trabajador»): abajo en la columna, a la izquierda en la fila. */
.sian-payroll-form .tabulator .tabulator-cell.sian-name-hover::before,
.sian-payroll-form .tabulator .tabulator-cell.sian-name-on::before {
    /* Franja propia y no box-shadow: el contenido de la celda del nombre tapa una sombra interior */
    content: '';
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: 4px;
    background: rgba(17, 24, 39, .55);
    z-index: 2;
    pointer-events: none;
}
.sian-payroll-form .tabulator .tabulator-cell.sian-name-on::before {
    width: 5px;
    background: #111827;
}
.sian-payroll-form .tabulator .tabulator-cell.sian-name-on {
    background: #FFE8A3 !important;
    color: #3D2E00 !important;
    font-weight: 700;
}
/* 5ta distinta del calculo (2026-09-23): el boton va dentro de la celda, antes del monto */
.sian-payroll-form .sian-ftax-diff span {
    color: #B7791F;
    font-weight: 700;
}
.sian-payroll-form .sian-ftax-use {
    margin-right: 4px;
    padding: 0 4px;
    border-radius: 6px;
    background: #FFF3CD;
    color: #8A5A00;
    font-size: 11px;
    font-weight: 700;
    text-decoration: none;
    white-space: nowrap;
}
/* Detalle de «Días No Lab.» al hacer clic: tarjeta con cabecera y una fila por tipo, con el mismo
   color que el calendario de asistencia (falta rojo, vacaciones morado, subsidio azul) */
.sian-nolab-pop {
    position: absolute;
    z-index: 3000;
    display: none;
    width: 290px;
    padding: 0;
    border: 1px solid #E3E7EC;
    border-radius: 10px;
    background: #FFFFFF;
    color: #1F2A30;
    font-size: 12.5px;
    line-height: 1.4;
    box-shadow: 0 10px 30px rgba(20, 30, 40, .16), 0 2px 6px rgba(20, 30, 40, .08);
    overflow: hidden;
}
.sian-nolab-head {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 8px;
    padding: 10px 12px 9px;
    border-bottom: 1px solid #EEF1F4;
    background: #F7F9FA;
}
.sian-nolab-title {
    font-weight: 700;
    font-size: 13px;
}
.sian-nolab-who {
    color: #6B7780;
    font-size: 11.5px;
    margin-top: 1px;
}
.sian-nolab-x {
    border: 0;
    background: transparent;
    color: #8A959C;
    font-size: 18px;
    line-height: 1;
    padding: 0 2px;
    cursor: pointer;
}
.sian-nolab-x:hover {
    color: #1F2A30;
}
.sian-nolab-row {
    padding: 9px 12px;
}
.sian-nolab-row + .sian-nolab-row {
    border-top: 1px solid #F0F2F4;
}
.sian-nolab-top {
    display: flex;
    align-items: center;
    gap: 7px;
}
.sian-nolab-dot {
    width: 8px;
    height: 8px;
    border-radius: 50%;
    flex: none;
    background: #8A959C;
}
.sian-nolab-label {
    font-weight: 600;
    flex: 1;
}
.sian-nolab-n {
    font-size: 11px;
    font-weight: 700;
    padding: 1px 7px;
    border-radius: 999px;
    background: #EEF1F4;
    color: #44525A;
}
.sian-nolab-dates {
    margin: 3px 0 0 15px;
    color: #56636B;
    font-variant-numeric: tabular-nums;
}
.sian-nolab-abs .sian-nolab-dot { background: #C0392B; }
.sian-nolab-abs .sian-nolab-n { background: #FBE9E7; color: #A12B1F; }
.sian-nolab-vac .sian-nolab-dot { background: #7B4BB7; }
.sian-nolab-vac .sian-nolab-n { background: #EFE7F8; color: #5F3794; }
.sian-nolab-sub .sian-nolab-dot { background: #2C6BA3; }
.sian-nolab-sub .sian-nolab-n { background: #E2EDF6; color: #235A8A; }
.sian-grid-tip {
    position: absolute;
    z-index: 3000;
    display: none;
    max-width: 280px;
    padding: 5px 9px;
    border-radius: 6px;
    background: #1F2A30;
    color: #FFFFFF;
    font-size: 12px;
    line-height: 1.35;
    pointer-events: none;
    box-shadow: 0 4px 14px rgba(0, 0, 0, .18);
}
.sian-payroll-form .sian-ftax-use:hover {
    background: #FFE08A;
    color: #5C3D00;
    text-decoration: none;
}
.sian-payroll-form .sian-pf-sort {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    margin: 0;
    font-size: 12.5px;
    font-weight: 600;
    color: #5C6A70;
}
.sian-payroll-form .sian-pf-sort select {
    height: 30px;
    padding: 2px 8px;
    border: 1px solid #CDD6D6;
    border-radius: 8px;
    background: #fff;
    font-size: 12.5px;
}

.sian-payroll-form .sian-pf-chip {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    max-width: 360px;
    padding: 4px 10px;
    font-size: 11.5px;
    font-weight: 600;
    color: #4B5261;
    background: #F1F3F7;
    border-radius: 99px;
}
.sian-payroll-form .sian-pf-chip .sian-payroll-bar-status {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    color: inherit;
}
.sian-payroll-form .sian-pf-chip .sian-pf-i {
    display: none;
}
.sian-payroll-form .sian-pf-chip:has(.text-success) {
    color: #067647;
    background: #ECFDF3;
}
.sian-payroll-form .sian-pf-chip:has(.text-success) .sian-pf-i {
    display: block;
}
.sian-payroll-form .sian-pf-chip:has(.text-danger) {
    color: #B42318;
    background: #FEF3F2;
}

/* Menu "⋯": Proyeccion y Descartar borrador */
.sian-payroll-form .sian-pf-more .dropdown-menu {
    min-width: 200px;
    padding: 6px;
    border: 1px solid var(--sian-pf-line);
    border-radius: 10px;
    box-shadow: 0 8px 24px rgba(20, 24, 32, .12);
}
.sian-payroll-form .sian-pf-menu-item {
    display: flex;
    align-items: center;
    gap: 8px;
    width: 100%;
    margin: 0;
    padding: 7px 10px;
    font-size: 12.5px;
    font-weight: 500;
    color: var(--sian-pf-text);
    text-align: left;
    background: transparent;
    border: 0;
    border-radius: 7px;
    cursor: pointer;
}
.sian-payroll-form .sian-pf-menu-item:hover {
    background: #F6F7FB;
}
.sian-payroll-form .sian-pf-menu-item input[type=checkbox] {
    margin: 0;
}
.sian-payroll-form .sian-pf-menu-item.sian-pf-menu-danger {
    color: #B42318;
}

/* Avisos (mes en curso, proyeccion) dentro de la tarjeta, entre la barra y la grilla */
.sian-payroll-form .sian-pf-detail > .alert {
    margin: 12px 16px;
    border-radius: 8px;
}
/* La grilla, sin marco propio: el de la tarjeta la contiene */
.sian-payroll-form .sian-pf-detail .sian-payroll-tabulator,
.sian-payroll-form .sian-pf-detail .ui-jqgrid {
    border: 0;
}

@media (max-width: 991px) {
    .sian-payroll-form .sian-pf-fields {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
    .sian-payroll-form .sian-pf-fields .form-group,
    .sian-payroll-form .sian-pf-fields .form-group:has([name="Movement[business_unit_id]"]),
    .sian-payroll-form .sian-pf-fields .form-group:has([name="PayrollMovement[dictionary_id]"]),
    .sian-payroll-form .sian-pf-fields .form-group:has(.us-autocomplete-aux),
    .sian-payroll-form .sian-pf-fields .form-group:has([name="Movement[person_id]"]) {
        grid-column: span 1;
    }
    .sian-payroll-form .sian-pf-push {
        margin-left: 0;
        flex-wrap: wrap;
    }
}

/* Selector de color por grupo de columnas */
.sian-cols-color {
    display: flex;
    align-items: center;
    gap: 8px;
    margin: 0 0 4px;
    font-weight: normal;
    cursor: pointer;
}
.sian-cols-color input[type=color] {
    width: 34px;
    height: 22px;
    padding: 0;
    border: 1px solid #D8D2CB;
    border-radius: 2px;
    background: none;
    cursor: pointer;
}
.sian-cols-reset {
    display: inline-block;
    margin-top: 6px;
    font-size: 12px;
}
/* El color lo pinta el JS por grupo; esto solo asegura que se vea
   sobre el degradado que el tema de jQuery UI pone en la cabecera */
.sian-payroll-grid .ui-jqgrid-htable th {
    background-image: none;
    border-color: rgba(255, 255, 255, .35);
}
.sian-payroll-grid .ui-jqgrid-htable th div {
    color: inherit;
}
/* ============================================================
   Vigencias faltantes - human/payroll/_coverage
   Deliberadamente NO es una alerta roja de Bootstrap. Lo que
   avisa no es un error: es que un dato no esta cargado y por eso
   va a entrar como cero. Pintarlo de rojo lo vuelve ruido que se
   ignora al tercer mes; el ambar de aviso y el borde solido a la
   izquierda lo mantienen legible sin gritar.
   Borde solido, no punteado: el punteado ya significa "sin
   cerrar" en el bloque de borradores.
   ============================================================ */
.sian-coverage {
    margin-bottom: 18px;
    padding: 14px 18px 16px;
    background-color: #FFFBF2;
    border-left: 3px solid #C98A00;
    border-radius: 3px;
}
.sian-coverage-title {
    margin: 0 0 4px;
    font-size: 15px;
    font-weight: 600;
    color: #3D3835;
}
.sian-coverage-lead {
    max-width: 62ch;
    margin: 0 0 10px;
    font-size: 12px;
    color: #8A8078;
    text-wrap: pretty;
}
.sian-coverage-lead strong {
    color: #3D3835;
}
.sian-coverage-list {
    margin: 0;
    padding: 0;
    list-style: none;
    font-size: 13px;
}
.sian-coverage-list li {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 3px 10px;
    padding: 4px 0;
}
.sian-coverage-list li + li {
    border-top: 1px solid rgba(201, 138, 0, .15);
}
/* Ancho fijo para que los nombres queden en columna y se puedan barrer */
.sian-coverage-kind {
    flex: 0 0 5.5rem;
    font-size: 10px;
    font-weight: 600;
    letter-spacing: .12em;
    text-transform: uppercase;
    /* #C98A00 daba 2.6:1 sobre #FFFBF2 a 10px: no se leia. Este ambar oscuro pasa AA (5.6:1)
       y sigue siendo el mismo tono del borde del aviso */
    color: #8A5E00;
}
.sian-coverage-name {
    flex: 0 0 11rem;
    font-weight: 600;
    color: #3D3835;
    /* Es un identificador del diccionario, no prosa */
    font-variant-numeric: tabular-nums;
}
.sian-coverage-detail {
    flex: 1 1 16rem;
    min-width: 0;
    color: #6B635C;
}
/* ASISTENCIA SIN CERRAR: TABLA COMPACTA (2026-09-14, elegida por el usuario). Columnas
   alineadas y al ANCHO DEL CONTENIDO (width:auto): la accion queda pegada a las fechas y no
   a media pantalla. Una persona por renglon; en pantalla estrecha desplaza de lado. */
.sian-closure-scroll {
    overflow-x: auto;
}
.sian-closure-table {
    width: auto;
    border-collapse: collapse;
    font-size: 13px;
}
.sian-closure-table th {
    padding: 0 18px 5px 6px;
    border-bottom: 1px solid rgba(201, 138, 0, .3);
    color: #8A5E00;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: .03em;
    text-align: left;
    white-space: nowrap;
}
.sian-closure-table td {
    padding: 5px 18px 5px 6px;
    border-top: 1px solid rgba(201, 138, 0, .12);
    color: #6B635C;
    vertical-align: middle;
    white-space: nowrap;
}
.sian-closure-table tbody tr:first-child td {
    border-top: 0;
}
/* La fila responde al puntero: se lee de punta a punta sin perderse */
.sian-closure-table tbody tr:hover td {
    background-color: rgba(201, 138, 0, .07);
}
.sian-closure-table .sian-closure-name {
    color: #3D3835;
    font-weight: 600;
}
.sian-closure-table .sian-closure-num {
    text-align: right;
    font-variant-numeric: tabular-nums;
}
.sian-closure-table .sian-closure-action {
    padding-right: 6px;
}
/* Cada fecha pendiente, un chip que abre ESE dia: es la accion principal de la fila */
.sian-closure-dates {
    display: flex;
    flex-wrap: nowrap;
    gap: 4px;
}
.sian-closure-date {
    padding: 1px 7px;
    border: 1px solid rgba(138, 94, 0, .35);
    border-radius: 3px;
    color: #6B4700;
    font-size: 12px;
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}
a.sian-closure-date:hover,
a.sian-closure-date:focus {
    border-color: #8A5E00;
    background-color: #fff;
    color: #3D3835;
    text-decoration: none;
}
/* Menu de columnas: la que la planilla oculto sola por no tener montos se distingue de la que
   apago el usuario (grilla Tabulator, autoHideEmpty) */
.sian-cols-item.sian-cols-auto span {
    color: #8A8078;
    font-style: italic;
}
.sian-cols-item.sian-cols-auto span:after {
    content: " (sin montos)";
    font-size: 11px;
}
/* "Abrir mes": secundario, enlace de texto y no boton. Cuatro botones iguales en columna
   gritaban mas que los datos que acompanan. */
.sian-closure-go {
    padding: 2px 4px;
    color: #6B4700;
    font-size: 12px;
    font-weight: 600;
    white-space: nowrap;
}
.sian-closure-go:hover,
.sian-closure-go:focus {
    color: #3D3835;
    text-decoration: underline;
}
.sian-closure-go:focus-visible,
a.sian-closure-date:focus-visible {
    outline: 2px solid #8A5E00;
    outline-offset: 2px;
}

/* ============= Hoja de planilla en Tabulator (SIAN-7700 §10, beta) =============
   Paralelo a .sian-payroll-grid (jqGrid): mismo tamaño de fuente y alto de fila,
   para que probar el grid nuevo no se sienta como otra pantalla */
.sian-payroll-tabulator {
    font-family: inherit;
    /* 11px es la base real del ERP (bootstrap.css). A 13px la planilla se veia mas
       grande que el resto del sistema Y entraban menos conceptos en pantalla. */
    font-size: 11px;
}
.sian-payroll-tabulator .tabulator-cell {
    padding: 2px 5px;
}
/* El titulo YA vive dentro de .tabulator-col-content, que pone su propio relleno.
   Con relleno tambien aqui se pagaba dos veces (18px por columna) y una etiqueta
   de una sola palabra se partia por la mitad aunque cupiera. */
.sian-payroll-tabulator .tabulator-col .tabulator-col-content {
    padding: 2px 4px;
}
.sian-payroll-tabulator .tabulator-col-title {
    padding: 0;
}
.sian-payroll-tabulator .tabulator-row {
    min-height: 20px;
}
/* El titulo se parte en lineas (headerWordWrap): sin interlineado corto, dos lineas
   dejan la cabecera del doble de alta que la fila.
   `anywhere` es para las etiquetas sin espacios donde partir -- Inasistencias/Tardanzas:
   el navegador NO parte despues de la barra, asi que sin esto se corta con puntos
   suspensivos y se pierde el nombre del concepto, que es justo lo que hay que evitar. */
.sian-payroll-tabulator .tabulator-col-title.tabulator-col-title-wrap {
    line-height: 1.15;
    overflow-wrap: anywhere;
    /* Tope de 3 lineas: con la columna al ancho del importe, un titulo largo se
       partiria en cinco o seis y la cabecera acabaria mas alta que media planilla.
       El nombre completo queda en el tooltip (headerTooltip). */
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    overflow: hidden;
}
/* CELDA EDITABLE: un LAVADO translucido, no un relleno opaco. Con relleno solido
   esas columnas quedaban de un color plano de arriba abajo y se comian la franja
   alterna justo donde mas se usa la tabla -- las columnas que RRHH digita. Con
   alfa, la franja se ve por debajo y las dos senales conviven: el tono calido dice
   editable, el escalon de gris dice de que fila es. */
.sian-payroll-tabulator .tabulator-cell.sian-tab-editable {
    background-color: rgba(255, 196, 0, .10);
}
.sian-payroll-tabulator .tabulator-col-group .tabulator-col-title {
    text-align: center;
}
/* FILAS ALTERNAS. En una tabla de 80 columnas el ojo se salta de fila a mitad de
   camino y se lee el importe del vecino.
   LOS TONOS SON LOS DE LA GRILLA CLASICA, no unos nuevos: gris calido para la
   franja, naranja palido para el cursor. Es la misma planilla, y dos grillas con
   dos paletas distintas se leen como dos sistemas distintos.
   El gris es #EAE8E2 y no el #F7F7F5 de antes a proposito: a esa distancia del
   blanco la franja no se distinguia, y una cebra que no se ve es solo ruido en la
   hoja de estilos. Se subio tambien en la clasica, que tenia el mismo problema. */
.sian-payroll-tabulator .tabulator-row.tabulator-row-even {
    background-color: #EAE8E2;
}
.sian-payroll-tabulator .tabulator-row:hover {
    background-color: #FFF6EE;
}
/* Cifras tabulares: son montos, se leen en columna */
.sian-payroll-tabulator .tabulator-cell {
    font-variant-numeric: tabular-nums;
}

/* COLUMNAS CONGELADAS: fondo OPACO y por encima de lo que se desplaza.
   Tabulator le deja el fondo heredado, y como el grupo de al lado lleva color
   propio (applyGroupColors), al desplazar la planilla ese color se veia a traves
   del nombre del colaborador.
   OJO CON EL `inherit` DE LAS CELDAS: tiene que heredar de la FILA para que la
   franja alterna y el resaltado del cursor lleguen tambien a las congeladas. La
   fila ya es opaca, asi que no se transparenta nada. En la cabecera no hay fila de
   la que heredar, y ahi si va un color fijo. */
.sian-payroll-tabulator .tabulator-header .tabulator-col.tabulator-frozen {
    background-color: #fff;
    z-index: 12;
}
.sian-payroll-tabulator .tabulator-row .tabulator-cell.tabulator-frozen {
    background-color: inherit;
    z-index: 12;
}
/* Los totales, con el gris de la clasica */
.sian-payroll-tabulator .tabulator-row.tabulator-calcs,
.sian-payroll-tabulator .tabulator-row.tabulator-calcs .tabulator-cell.tabulator-frozen {
    background-color: #F0EFEC !important;
}
/* SEPARACION ENTRE GRUPOS. La clase la pone markGroupEnd() en la ultima columna de
   cada grupo, y `cssClass` de Tabulator la aplica a la cabecera Y a las celdas: por
   eso el corte baja por toda la tabla en vez de quedarse arriba, que es donde hace
   falta cuando se esta a la altura de la columna 40. */
/* En la cabecera basta con el propio elemento del grupo. En las FILAS no hay grupos,
   asi que el corte lo escribe paintGroupEnds() por posicion -- ver el porque alli. */
.sian-payroll-tabulator .tabulator-header .tabulator-col-group {
    border-right: 2px solid #6E665C;
}
/* CELDA QUE ACABA DE CAMBIAR AL RECALCULAR. Solo color y sombra: son propiedades de
   PINTADO, no de maquetacion. Animar ancho o alto en una tabla de 80 columnas la
   deja pensando y el parpadeo se traba a medias.
   El borde interior es lo que la hace visible aunque la celda ya tenga fondo propio
   (franja alterna o el crema de editable), sin pisarles el color. */
@keyframes sian-tab-flash {
    0% {
        background-color: #FFE0AE;
        box-shadow: inset 0 0 0 2px #E08A1E;
    }
    100% {
        background-color: transparent;
        box-shadow: inset 0 0 0 2px transparent;
    }
}
.sian-payroll-tabulator .tabulator-cell.sian-tab-changed {
    animation: sian-tab-flash 1.6s ease-out;
}

/* CELDA DE DESCUENTO CON ORIGEN: el importe se sigue leyendo a la derecha, como
   toda la columna, y el enlace queda a la izquierda para que no se mueva de sitio
   segun el largo del numero. */
.sian-tab-osd-cell {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 6px;
}
.sian-tab-osd {
    color: #337ab7;
    text-decoration: none;
    flex: 0 0 auto;
}
.sian-tab-osd:hover {
    color: #23527c;
}
/* El nombre es texto largo y se recorta; el icono va delante para que no desaparezca justo
   en las filas donde el nombre es mas largo. */
.sian-tab-name-cell {
    display: flex;
    align-items: center;
    gap: 6px;
}
.sian-tab-name-cell span {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
/* ---------------------------------- DESGLOSE DEL DESCUENTO POR CONVENIO ----------------- */
.sian-conv-sub {
    color: #6E665C;
    font-size: 12px;
    margin-top: 2px;
}
.sian-conv-head {
    font-size: 14px;
    margin-bottom: 2px;
}
.sian-conv-note {
    color: #6E665C;
    font-size: 12px;
    margin-bottom: 10px;
}
.sian-conv-table {
    font-size: 12px;
}
.sian-conv-table > thead > tr > th {
    background: #F0EFEC;
    border-bottom: 1px solid #B9B3A9;
    white-space: nowrap;
}
.sian-conv-table > tbody > tr:nth-child(even) {
    background: #EAE8E2;
}
/* Mismo criterio que la grilla: los importes se comparan en columna, y con cifras de ancho
   distinto las unidades no se alinean y hay que leer numero por numero. */
.sian-conv-num {
    text-align: right;
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}
.sian-conv-empty {
    color: #6E665C;
    text-align: center;
    padding: 18px 12px;
}

/* ------------------------------- DESGLOSE DE LA RENTA DE 5TA ---------------------------- */
/* El resultado primero. Es lo que la persona vino a ver; la cuenta viene despues, para
   quien quiera comprobarla. */
.sian-tax-headline {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 12px;
    background: #F0EFEC;
    border: 1px solid #B9B3A9;
    border-radius: 3px;
    padding: 10px 12px;
    font-size: 13px;
}
.sian-tax-headline .sian-tax-total {
    font-size: 20px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}
/* Sin esta frase, ningun desglose explica lo unico que la gente no se espera: que el
   impuesto no se calcula sobre el sueldo del mes sino sobre el ano proyectado. */
.sian-tax-intro {
    color: #6E665C;
    font-size: 11px;
    margin: 6px 0 16px;
}
.sian-tax-steps {
    display: flex;
    flex-direction: column;
    gap: 16px;
}
.sian-tax-step-title {
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .04em;
    text-transform: uppercase;
    color: #6E665C;
    margin-bottom: 4px;
}
.sian-tax-table {
    width: 100%;
    border-collapse: collapse;
    font-size: 12px;
}
.sian-tax-table td {
    padding: 3px 0;
}
.sian-tax-table td:first-child {
    /* La etiqueta manda el ancho; el importe queda pegado a la derecha, en columna, que es
       como se comprueba una cuenta encadenada. */
    width: 100%;
}
/* El operador al principio de la linea es lo que convierte la lista en una cuenta que se
   puede rehacer con una calculadora. Ancho fijo para que las etiquetas queden alineadas
   aunque unas lineas lo lleven y otras no. */
.sian-tax-op {
    display: inline-block;
    width: 14px;
    color: #6E665C;
}
.sian-tax-note {
    color: #6E665C;
    font-size: 11px;
    margin-left: 6px;
}
/* Donde termina cada paso */
.sian-tax-table tr.sian-tax-sum > td {
    border-top: 1px solid #B9B3A9;
    padding-top: 5px;
    font-weight: 600;
}
.sian-tax-table tr.sian-tax-final > td {
    border-top: 1px solid #6E665C;
    padding-top: 6px;
    font-weight: 700;
}
.sian-tax-table tr.sian-tax-final > td.sian-conv-num {
    font-size: 14px;
}
.sian-tax-foot {
    color: #6E665C;
    font-size: 11px;
    margin-top: 16px;
    border-top: 1px solid #e5e5e5;
    padding-top: 10px;
}

/* El titulo trae el boton de colapsar adentro (ver SIANPayrollTabulator::buildColumns) */
.sian-tab-group-title {
    margin-right: 6px;
}
.sian-tab-toggle {
    padding: 0 4px;
    font-size: 11px;
    font-weight: normal;
    color: inherit;
    background: rgba(255, 255, 255, .25);
    border: 1px solid rgba(255, 255, 255, .4);
    border-radius: 2px;
    cursor: pointer;
}
.sian-tab-toggle:hover {
    background: rgba(255, 255, 255, .45);
}


/* ============================================================
   Empezar una planilla (human/payroll) - vista _start.php
   Tres documentos distintos, con distinto plazo legal, donde
   equivocarse no da ningun error. Antes vivian en un carrusel
   dentro de la barra del grid, uno detras del otro y con las
   etiquetas cortadas. Aca se ven los tres a la vez.
   Mismo lenguaje que .sian-drafts, que va justo debajo, pero
   sin su naranja: ese color significa "sin emitir" y aca no
   hay nada emitiendose todavia. El unico acento es el boton.
   ============================================================ */
/* El boton de crear va al extremo derecho de la barra, junto al tamaño de pagina,
   que es donde el ERP pone siempre la accion de crear. El widget lo deja al inicio
   de su bloque --a un tercio de la fila-- y ahi no se lee como la accion principal */
#sian_payroll_toolbar .btn-group {
    float: right;
}
/* Dentro del modal las tres tarjetas caben en fila (modal-lg deja ~870 px de
   contenido); el titulo va con la misma voz que el resto del bloque */
.sian-start-modal .modal-title {
    font-size: 17px;
    font-weight: 600;
    letter-spacing: -.01em;
    color: #2E2A27;
}
.sian-start-modal .modal-body {
    padding: 18px 20px 22px;
}
/* MAS ANCHO (usuario, 2026-09-28: "se ve raro, el modal puede ser mas ancho"): modal-lg deja ~870 px y
   la lista de liquidaciones se apretaba en su media columna */
@media (min-width: 992px) {
    .sian-start-modal .modal-dialog { width: min(1180px, 94vw); }
}
.sian-settle-list { list-style: none; margin: 0; padding: 0 4px 0 0; max-height: 300px; overflow-y: auto; overflow-x: hidden; }
.sian-settle-row { display: flex; align-items: center; justify-content: space-between; gap: 12px;
    padding: 10px 0; border-bottom: 1px solid #EDE6DF; }
.sian-settle-row:last-child { border-bottom: 0; }
.sian-settle-info { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1 1 auto; }
.sian-settle-name { font-size: 13px; color: #2E2A27; }
.sian-settle-meta { font-size: 12px; color: #7A6F66; }
.sian-settle-note { font-size: 12px; color: #B45309; }
/* mas especifico que .sian-start-go (width:100%, definido mas abajo): el boton va a la derecha, a su medida */
.sian-settle-row .sian-settle-go { flex: 0 0 auto; width: auto; height: 32px; padding: 0 14px; white-space: nowrap; text-decoration: none; margin: 0; }
/* CUATRO A LA VEZ, EN CUADRICULA DE DOS (rediseño acordado con el usuario, 2026-09-21:
   "todo debe estar en una sola vista"). Apiladas en columna, el modal obligaba a
   desplazarse para ver la cuarta; en cuadricula entran las cuatro de un golpe de vista y
   el <select> sigue teniendo ~400 px, que es de sobra para "Diciembre 2026
   (julio-diciembre)". `align-items: start` para que una tarjeta corta --Liquidacion sin
   pendientes-- no se estire a la altura de la de al lado. */
.sian-start-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 14px;
    align-items: start;
}
.sian-start-card {
    min-width: 0;
    padding: 15px 17px 17px;
    background-color: #FCFAF8;
    border: 1px solid #EDE6DF;
    border-radius: 6px;
    display: flex;
    flex-direction: column;
    gap: 11px;
}
/* LA QUE TIENE ALGO POR HACER SE DISTINGUE SIN GRITAR: un fondo apenas calido y el borde
   en el naranja de la marca, muy rebajado. El acento fuerte sigue siendo solo el boton */
.sian-start-card--now {
    background-color: #FFFCF8;
    border-color: #FAD3B2;
}
.sian-start-card-slim {
    min-width: 0;
}
/* NADA DE ENCOGER: la tarjeta es un contenedor flex en columna, y sin esto sus hijos se
   comprimen cuando el contenido crece. Medido en pantalla: el interruptor
   Emitir/Proyectar quedaba en 7 px de alto, con los botones recortados dentro */
.sian-start-card > * {
    flex-shrink: 0;
}
/* Nombre y estado en la MISMA linea: el estado es lo primero que se busca */
.sian-start-head {
    display: flex;
    align-items: center;
    gap: 9px;
}
.sian-start-gap {
    flex-grow: 1;
}
.sian-start-kind {
    margin: 0;
    font-size: 15px;
    font-weight: 600;
    line-height: 1.25;
    letter-spacing: -.01em;
    color: #2E2A27;
}
/* LA PILDORA DE ESTADO. Antes habia que deducirlo de un parrafo gris: "ya pagada",
   "no hay pendientes", "se arma en diciembre" se leian todos igual de callados */
.sian-start-chip {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 3px 10px 3px 8px;
    border-radius: 999px;
    font-size: 11px;
    font-weight: 600;
    line-height: 1.4;
    white-space: nowrap;
}
.sian-start-dot {
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background-color: currentColor;
}
.sian-start-chip--now {
    color: #A34E00;
    background-color: #FFF3E9;
    border: 1px solid #FBD8BC;
}
.sian-start-chip--now .sian-start-dot {
    background-color: #FF6B00;
}
.sian-start-chip--open {
    color: #6B5B3E;
    background-color: #F7F2E8;
    border: 1px solid #E7DCC6;
}
.sian-start-chip--open .sian-start-dot {
    background-color: #C8A85A;
}
.sian-start-chip--done {
    color: #4F6B4A;
    background-color: #F0F5EF;
    border: 1px solid #D9E6D6;
}
.sian-start-chip--done .sian-start-dot {
    background-color: #7FA378;
}
.sian-start-chip--none {
    color: #6E655E;
    background-color: #F5F2EF;
    border: 1px solid #E4DDD6;
}
.sian-start-chip--none .sian-start-dot {
    background-color: #BDB3AA;
}
.sian-start-who,
.sian-start-empty,
.sian-start-more {
    margin: 0;
    font-size: 12px;
    color: #8A8078;
    text-wrap: pretty;
}
.sian-start-who {
    font-size: 13px;
    color: #6E655E;
}
.sian-start-empty {
    font-size: 13px;
}
/* CAMPOS CON ETIQUETA. Tres desplegables seguidos sin decir que es cada uno --"2026 /
   Mayo (nov-abr) / Regimen de Empleados"-- obligaban a adivinar */
.sian-start-fields {
    display: flex;
    flex-direction: column;
    gap: 9px;
}
.sian-start-row {
    display: flex;
    gap: 10px;
}
.sian-start-field {
    flex: 1 1 0;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 5px;
}
.sian-start-field--wide {
    flex: 2 1 0;
}
.sian-start-label {
    margin: 0;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: .04em;
    text-transform: uppercase;
    color: #8A8078;
}
/* UNA SOLA ALTURA PARA TODO CONTROL: antes el boton media 28 px y el desplegable 30, y
   la fila quedaba desalineada. Esquina de 4 px: a 2 px el control se ve duro */
.sian-start-fields select,
.sian-start-pick select {
    width: 100%;
    min-width: 0;
    height: 34px;
    padding: 0 10px;
    font-size: 13px;
    font-variant-numeric: tabular-nums;
    color: #2E2A27;
    background-color: #fff;
    border: 1px solid #D5CCC4;
    border-radius: 4px;
    box-shadow: none;
}
.sian-start-fields select:focus,
.sian-start-pick select:focus {
    border-color: #FF6B00;
    outline: 2px solid #FFE0C7;
    outline-offset: 0;
}
.sian-start-pick {
    display: flex;
    align-items: stretch;
    gap: 8px;
}
/* La ventana de dias y el conteo del periodo elegido. `min-height` reserva la linea
   para que la tarjeta no salte al cambiar de opcion */
.sian-start-detail {
    margin: 0;
    min-height: 1.15em;
    font-size: 12px;
    color: #8A8078;
    font-variant-numeric: tabular-nums;
}
/* DOS MODOS, NO UNA CASILLA: emitir y proyectar son cosas distintas, y hay que ver cual
   esta apagada antes de pulsar */
.sian-start-modes {
    display: inline-flex;
    align-self: flex-start;
    border: 1px solid #D5CCC4;
    border-radius: 4px;
    overflow: hidden;
}
.sian-start-mode {
    height: 28px;
    padding: 0 14px;
    border: 0;
    background-color: #fff;
    color: #6E655E;
    font-size: 12px;
    font-weight: 600;
    cursor: pointer;
}
.sian-start-mode + .sian-start-mode {
    border-left: 1px solid #D5CCC4;
}
.sian-start-mode[aria-pressed="true"] {
    background-color: #2E2A27;
    color: #fff;
}
.sian-start-mode[disabled] {
    background-color: #F7F3EF;
    color: #AEA49B;
    cursor: not-allowed;
}
/* UN SOLO NARANJA POR PANTALLA. Con tres botones solidos ninguno mandaba: el relleno
   queda para lo que de verdad se emite, y proyectar o mirar pasa a contorno */
.sian-start-go {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    height: 36px;
    padding: 0 18px;
    background-color: #FF6B00;
    border: 1px solid #ED6200;
    border-radius: 4px;
    color: #fff;
    font-size: 13px;
    font-weight: 600;
    white-space: nowrap;
    text-decoration: none;
    transition: background-color .2s ease, transform .2s ease;
}
.sian-start-go:hover,
.sian-start-go:focus {
    background-color: #E85F00;
    border-color: #D25700;
    color: #fff;
    text-decoration: none;
}
.sian-start-go--ghost {
    background-color: #fff;
    border-color: #D5CCC4;
    color: #3A342F;
}
.sian-start-go--ghost:hover,
.sian-start-go--ghost:focus {
    background-color: #FAF7F4;
    border-color: #BFB4AA;
    color: #3A342F;
}
.sian-start-go:active {
    transform: translateY(1px);
}
.sian-start-go:focus,
.sian-start-mode:focus {
    outline: 2px solid #FF6B00;
    outline-offset: 2px;
}
.sian-start-go:focus:not(:focus-visible),
.sian-start-mode:focus:not(:focus-visible) {
    outline: none;
}
/* En el movil no hay dos columnas que valgan */
@media (max-width: 767px) {
    .sian-start-grid {
        grid-template-columns: minmax(0, 1fr);
    }
}
@media (prefers-reduced-motion: reduce) {
    .sian-start-go {
        transition: none;
    }
}
