body {
    margin: 0px;
    height: 100%;
    overflow-x: hidden;
    overflow-y: auto;
    background-color: var(--surface-b);
    font-family: var(--font-family);
    font-weight: normal;
    color: var(--text-color);
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale
}

.baner {
    max-height: 95px;
    width: 100%;
    background: -webkit-linear-gradient(90deg, #0277BD, #0277BD, #ECECEC, #ECECEC, #0277BD, #0277BD);
    background: linear-gradient(90deg, #0277BD, #0277BD, #ECECEC, #ECECEC, #0277BD, #0277BD);
}

.panelGeneral {
    background-color: var(--surface-b);
}

/* .footer { */
/* 	float: left; */
/* 	width: 100%; */
/* 	height: 60px; */
/* 	bottom: 0; */
/* 	background-color: #0277BD; */
/* 	color: white; */
/* 	background-color: #0277BD; */
/* 	-webkit-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.1); */
/* 	-moz-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.1); */
/* 	box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.1); */
/* 	-webkit-font-smoothing: antialiased; */
/* 	-moz-osx-font-smoothing: grayscale; */
/* 	font-weight: 500; */
/* 	color: grayligth; */
/*    	font-size: 1.3em; */
/* } */

.ui-layout-unit {
    background-color: var(--surface-b) !important;
}

.ui-button {
    /*max-height: 30px !important;*/
}

body .ui-button.ui-button-icon-only .ui-button-text {
    padding: 0.3rem !important;
}


.ui-selectonemenu {
    max-height: 30px !important;
    min-height: 30px !important;
}

.ui-selectonemenu .ui-selectonemenu-label {
    color: #77797d;;
    font-size: 12px !important;
}

li.ui-selectonemenu-item.ui-selectonemenu-list-item.ui-corner-all {
    color: #495057;
    font-size: 12px !important;
}

body .ui-menu.ui-menubar > .ui-menu-list > .ui-menuitem {
    width: 100% !important;
}

body .ui-selectcheckboxmenu .ui-selectcheckboxmenu-label-container {
    min-height: 28px !important;
    max-height: 28px !important;
    margin: 0px !important;
    color: #495057;
    font-size: 12px !important;
}

.hasDatepicker {
    min-height: 30px !important;
    max-height: 30px !important;
    color: #495057;
    font-size: 12px !important;
}

body .ui-selectcheckboxmenu-panel .ui-selectcheckboxmenu-items .ui-selectcheckboxmenu-item {
    font-size: 12px !important;
    padding: 1px !important;
}

.ui-selectcheckboxmenu-label {
    font-size: 12px !important;
    color: #77797d;
}

body .ui-panelgrid .ui-panelgrid-cell {
    padding: 0 !important;
}

/* Que todos los campos ocupen el ancho completo */
.ui-inputtext,
.ui-password,
.ui-password input,
.ui-commandbutton,
.g-recaptcha {
    width: 100%;
    box-sizing: border-box;
    max-height: 30px !important;
    min-height: 30px !important;
    font-size: 13px !important;
}

/* Ajusta el texto al inicio */
span.ui-button-text {
    order: 1;
    margin-top: -2px !important;
}

body .ui-button.ui-button-text-icon-left .ui-button-text {
    padding: 5px 26px 4px 21px;
}

/*ui-button-icon-left*/


/* BOTONERA */
.botonera {
    display: block;
    /*     margin: 10px 0 20px; */
    margin-top: 15px !important;
    text-align: center;
    /*     padding: 10px 10px; */
}

.botoneraVertical {
    display: block;
    margin: 10px 0 20px;
    text-align: center;
    padding: 10px 10px;
}

.inputModalVertical {
    width: 100% !important;
    margin-bottom: 10px !important;
    border-radius: 2px;
    font-size: 15px !important;
    font-weight: normal !important;
}

.botonera * {
    display: inline-block;
    margin: 0 3px;
}

/* Aumenta el ancho mínimo de los submenús desplegables */
.ui-menu-child {
    min-width: max-content; /* Puedes ajustar este valor */
    white-space: nowrap; /* Previene que el texto se corte en 2 líneas */
    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);
    border-radius: 4px;
    line-height: 0.8 !important;
}

.ui-menu .ui-menuitem-link {
    padding-top: 10px !important;
    padding-bottom: 10px !important;
    padding-left: 12px;
    padding-right: 12px;
    line-height: 0.8 !important;
}


/* Quita flecha solo a los submenús marcados con no-arrow */
.primerMenu > a > span.ui-icon-triangle-1-e {
    display: none !important;
}

.primerMenu > a > span.ui-icon-triangle-1-e {
    display: none !important;
}

/* para que no se vea tan alto el encabezaxdo de los panel */
.ui-panel-titlebar {
    padding: 6px !important;
}

/* para que no tenga tanta separación entre los campos con las filas inferiores */
.field {
    margin-bottom: 5px !important;
}


.user-section {
    position: absolute;
    top: 0;
    right: 0;
    z-index: 999;
}

.flex.baner {
    justify-content: space-between;
    align-items: center;
}

.footer-icon {
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    text-align: right;
    font-family: 'socialicoregular';
    font-size: 40px;
    height: 40px !important;
    line-height: 40px;
    float: right;
    opacity: 0.5;
    cursor: pointer;
    float: right;
    color: white;
    opacity: 1;
    padding-top: 2px;
    width: 30px !important;
    max-width: 30px !important;
}

.footer-shadow {
    box-shadow: 0 -8px 4px rgba(0, 0, 0, 0.1);
}

html, body {
    margin: 0;
    padding: 0;
    height: 100%;
    max-width: 100vw;
    overflow-x: hidden;
    overflow-y: hidden;
}

/* Tamaño de letra general de la app (selector junto al de tema, en el panel
   de configuración del header). Escala todo lo que use rem/em: textos e
   iconos de PrimeFaces/PrimeIcons incluidos. */
html.font-size-sm {
    font-size: 13px;
}

html.font-size-md {
    font-size: 15px;
}

html.font-size-lg {
    font-size: 17px;
}

/* overflow:hidden evita el doble scroll: solo .app-content debe scrollear */
.app-container {
    display: flex;
    flex-direction: column;
    height: 100vh; /* fallback para navegadores sin soporte de dvh */
    height: 100dvh; /* En mobile, 100vh se calcula contra el viewport más grande posible (barra de
        direcciones oculta), más alto que lo que realmente se ve con la barra visible: el contenido
        del final (ej. el input del chat) queda recortado por el overflow:hidden de acá sin forma de
        llegar a él. 100dvh sí se ajusta al viewport visible real. */
    overflow: hidden;
}

.app-header {
    /*     background: #1976d2; */
    color: black;
    /*     flex-shrink: 0; */
    max-width: 100% !important;
}

/* Únicos dos accesos que quedan fuera del dashboard (ver template.xhtml): Inicio y Salir. */
.header-nav-link {
    color: var(--primary-color);
    font-size: 1.4rem;
    text-decoration: none;
}

.header-nav-link:hover {
    opacity: 0.75;
}

.app-content {
    flex: 1; /* ocupa todo el espacio disponible */
    overflow-y: auto; /* solo aquí se hace scroll si el contenido crece */
    background: var(--surface-b) !important;;
    box-sizing: border-box;
}

.app-footer {
    color: #222;
    flex-shrink: 0;
    transition: box-shadow 0.1s ease;
    box-shadow: 0px -2px 8px rgba(0, 0, 0, 0.08), 0px -2px 4px rgba(0, 0, 0, 0.1), 0px -2px 4px -1px rgba(0, 0, 0, 0.2) !important;
}

.app-footer:hover {
    box-shadow: 0px -1px 8px rgba(0, 0, 0, 0.08), 0px -7px 4px rgba(0, 0, 0, 0.1), 0px -4px 4px -1px rgba(0, 0, 0, 0.2) !important;
}

.pull-left {
    float: left !important;
}

.pull-right {
    float: right !important;
}


/* Fuerza que las columnas source y target sean iguales */
.ui-picklist .ui-picklist-list {
    width: 100% !important;
    box-sizing: border-box;
}

/* Ajusta la tabla general del PickList */
.ui-picklist table {
    width: 100% !important;
}

/* Alinea los filtros y listas */
.ui-picklist .ui-picklist-filter-container {
    width: 100% !important;
    display: block;
    box-sizing: border-box;
}

/* Asegura que el target y source tengan la misma altura */
.ui-picklist .ui-picklist-source,
.ui-picklist .ui-picklist-target {
    flex: 1; /* cada lado ocupa la misma cantidad de espacio */
    min-width: 200px;
}

/* Ajusta el área de botones del centro */
.ui-picklist .ui-picklist-buttons {
    width: 50px; /* o lo que necesites */
    text-align: center;
}


/*corrige los labels flotantes para que se centren en el input*/
.ui-float-label > label {
    margin-top: -12px !important;
}

/*
INPUTMODAL
*/
.ui-selectonemenu.inputModal {
    width: 100% !important;
}

input.hasDatepicker.inputModal {
    width: 50% !important;
}

.inputForm,
.inputModal {
    margin-bottom: 10px !important;

    font-size: 14px !important;
    font-weight: bold !important;
}

.buttonForm {
    margin-bottom: 10px !important;
    margin-left: 10px !important;
    font-size: 14px !important;
    font-weight: bold !important;
}

.selectForm {
    font-size: 14px !important;
    font-weight: bold !important;
    height: 30px;
}

.ui-state-default.inputForm,
.ui-state-default.inputModal {
    height: 30px;
    font-weight: normal !important;
}

input.inputModal {
    border: 1px solid #a39b9ba6 !important;
}

.ui-selectbooleanbutton.inputModal,
input.inputModal {
    width: 100% !important;
}

select.inputModal,
input.inputModal {
    width: 100% !important;
    height: 30px !important;
    border: 1px solid lightgrey !important;
    border-radius: 2px;
}

/* Fuente más pequeña en toda la tabla */
.dt-compact.ui-datatable {
    font-size: 12px !important;
}

/* el contenedor puede scrollear horizontal */
.dt-compact .p-datatable-wrapper {
    overflow-x: auto;
}

/* Encabezados */
.dt-compact.ui-datatable .ui-datatable-thead > tr > th {
    padding: 7px 0px !important;
    white-space: nowrap;
    /*   line-height: 1.2 !important; */
}

/* Celdas del cuerpo */
.dt-compact.ui-datatable .ui-datatable-data > tr > td {
    padding: 0px 0px !important;
    line-height: 1.2 !important;
    white-space: nowrap;
    vertical-align: top !important;
}

/* Filtros en header (si usas filterBy) */
.dt-compact.ui-datatable .ui-column-filter,
.dt-compact.ui-datatable .ui-inputfield {
    height: 30px !important;
    padding: 0px 0px !important;
    font-size: 12px !important;
    width: 99.9% !important;
}

.ui-calendar > .ui-inputfield {
    padding: 5px 5px !important;
}


.ui-fluid .ui-calendar {
    display: inline;
}

input.hasDatepicker.inputModal {
    width: 100% !important;
}

body .ui-datepicker .ui-datepicker-calendar td {
    padding: 0px !important;
}

.ui-datepicker-calendar > * {
    padding: 1px !important;
}


body .ui-fluid .p-datepicker .ui-datepicker-trigger.ui-button {
    max-height: 30px !important;
}

body .ui-fluid .ui-trigger-calendar input.hasDatepicker {
    width: 95% !important;
}

select {
    background: var(--surface-0);
    min-height: 30px !important;
    max-height: 30px !important;
    border-color: var(--gray-500);
    border-radius: 4px !important;
}

select > * {
    background: var(--surface-b);
}

/* Paginador compacto */
.dt-compact.ui-datatable .ui-paginator .ui-paginator-page,
.dt-compact.ui-datatable .ui-paginator .ui-paginator-next,
.dt-compact.ui-datatable .ui-paginator .ui-paginator-prev,
.dt-compact.ui-datatable .ui-paginator .ui-paginator-first,
.dt-compact.ui-datatable .ui-paginator .ui-paginator-last {
    min-width: 26px !important;
    height: 26px !important;
    line-height: 26px !important;
    padding: 1px 2px !important;
    margin-top: 4px !important;
    font-size: 12px !important;
}

.dt-compact.ui-datatable .ui-paginator {
    padding: 0 !important;
}

body .ui-paginator .ui-paginator-rpp-options {
    padding: 6px !important;
}

.ui-datatable thead th {
    text-align: center !important;
}

/* Alinear arriba todas las celdas del datatable: con columnas "wrap-column" (texto
   largo que hace wrap a varias líneas) la altura de la fila la define la celda más
   larga, y sin esto el resto de columnas quedaba centrada verticalmente "flotando"
   en medio de la fila (se veía roto/desalineado). Selector real de PrimeFaces en
   modo clásico (temas ui-* como saga-blue/vela-blue) es .ui-datatable, no .p-datatable. */
.ui-datatable .ui-datatable-data > tr > td {
    vertical-align: top !important;
}

/* Evitar márgenes y asegurar ancho dentro del editor */
.p-cell-editor .p-cell-editor-input > * {
    margin: 0 !important;
    width: 100%;
    padding: 0 !important;
}


/* Ajustar altura del selectOneMenu */
.dt-compact .ui-selectonemenu {

    font-size: 12px !important;
    height: 30px !important;
    /*     line-height: 22px !important; */
    width: 100% !important;
}

.dt-compact .ui-selectonemenu .ui-selectonemenu-label {
    margin-top: 5px !important;
    /*     margin-bottom: 4px !important; */
}

/* Ajustar el botón desplegable */
.dt-compact .ui-selectonemenu-trigger {
    height: 30px !important;
}

/* Ajustar altura de opciones del menú desplegable */
.dt-compact .ui-selectonemenu-items .ui-selectonemenu-item {
    font-size: 11px !important;
    padding: 6px 4px !important;
}

.dt-compact .ui-inputgroup-addon {
    height: 30px !important;
}

/* Compactar el selectBooleanButton */
.dt-compact .ui-selectbooleanbutton {
    font-size: 13px !important;
    /*     padding: 4px 10px !important; */
    margin-top: 0px !important;
    height: 30px !important;
    line-height: 20px !important;
}

.dt-compact .ui-selectbooleanbutton .ui-selectonemenu-label {
    margin-top: 5px !important;
    /*     margin-bottom: 4px !important; */
}


/* Con PrimeFlex o Bootstrap */
@media (max-width: 768px) {
    .btn-responsive .ui-button-text, /* PF <= 8 */
    .btn-responsive .p-button-label { /* PF 9+ */
        display: none;
    }

    /* Opcional: hacer botón cuadrado */
    .btn-responsive {
        padding: 0.5rem;
        width: 40px !important;
        min-width: 40px !important;
        justify-content: center;
    }
}

.ui-layout-resizer-north-open {
    display: none !important;
}
.ui-layout-resizer-south-open {
    display: none !important;
}

.map {width: 100%; height: 100%; position: relative !important; left: 0; z-index: 1; top:0;} 

.layout-container {
    height: 100%;       /* ← CLAVE */
    overflow: hidden;    /* evita doble scroll */
}

.firstCol {
    background: pink !important;
}

.ret {
    background-color: pink !important;
}

.ui-datatable .ui-datatable-data .styleRetraso {
   	background-color: pink !important;
}

.ui-datatable .ui-datatable-data .styleRetraso2 {
   	background-color: #F6FFB4 !important;
}  

.ui-datatable .ui-datatable-data .stylePedidoMovil {
   	background-color: pink !important;
}

.firstColColored .firstCol {
    background: pink !important;
}

.ui-chip.custom-chip {
    background: var(--primary-color);
    color: var(--primary-color-text);
}

body .ui-panel .ui-panel-content {
    padding: 6px !important;
}

.btnCrp {
    height:29px;
}
.ui-selectonemenu-label  {
    text-overflow: ellipsis !important;
    overflow: hidden !important;
    white-space: nowrap !important;
    max-width: 100%; /* ajusta según tu diseño */
    display: block !important;
}



.chat-message{
    display:grid;
    grid-template-columns:40px 1fr;
    gap:12px;
    margin-bottom:20px;
}

.chat-header{
    display:flex;
    align-items:center;
    gap:8px;
    font-weight:600;
    color:#1565C0;
}

.chat-header .pi{
    font-size:1.1rem;
}

.chat-body{
    line-height:1.6;
}

.app-chat-layout{
    gap:16px;
    align-items:flex-start;
    width:100%;
    height:100%;
}

.app-chat-sidebar{
    width:260px;
    min-width:260px;
    max-height:600px;
    overflow-y:auto;
    padding:8px;
    flex-shrink:0;
    background-color:var(--surface-card);
    border-radius:6px;
}

/* Estas dos reglas acotan la altura del panel del chat y lo convierten en columna flex,
   lo que le da a .chat-history-wrap (flex:1 1 auto más abajo) una altura real contra la
   cual medirse: sin esto, el panel crece con el contenido en vez de scrollear internamente,
   y el input queda al final de una página larga en vez de fijo abajo. Sin escopar a
   .app-chat-layout porque .chat-window también se usa en capacitacion_chat.xhtml (chat del
   alumno), que no tiene ese wrapper de sidebar. */
.chat-window{
    height: 100%;
    display:flex;
    flex-direction:column;
    overflow:hidden;
}

.chat-window .ui-panel-content{
    width:100%;
    height: 100%;
    display:flex;
    flex-direction:column;
    overflow:hidden;
}

/* Dentro del layout de dos columnas (sidebar + chat) del chat de prueba del admin
   (agente_ia.xhtml), el panel debe repartirse el ancho de la fila con la sidebar. */
.app-chat-layout .chat-window{
    flex:1 1 0%;
    min-width:0;
}

/* Historial de mensajes: ocupa todo el espacio disponible arriba del input
   y scrollea internamente (el input nunca se mueve de la parte inferior). */
.chat-history-wrap{
    flex:1 1 auto;
    min-height:0;
    overflow:hidden;
    display:flex;
}

/* Bloque del input + botón "Enviar": siempre pegado abajo del chat,
   como en Claude, en vez de arriba del historial. */
.chat-input-area{
    flex-shrink:0;
    border-top:1px solid rgba(0,0,0,0.08);
    padding:12px 16px;
    margin-top:8px;
}

/* Opciones seleccionables que el mentor puede ofrecer en vez de texto libre (ver
   CapacitacionStreamController / capacitacion-chat.js). Botones planos (no PrimeFaces),
   generados dentro del HTML persistido del mensaje. */
.chat-options{
    display:flex;
    flex-wrap:wrap;
    gap:8px;
    margin-top:10px;
}

.chat-option-btn{
    padding:8px 16px;
    border-radius:20px;
    border:1px solid var(--primary-color);
    background:transparent;
    color:var(--primary-color);
    cursor:pointer;
    font-size:0.9rem;
    font-family:inherit;
}

.chat-option-btn:hover:not(:disabled){
    background:var(--primary-color);
    color:#fff;
}

/* La opción "Continuar" que el mentor ofrece tras corregir una respuesta se destaca como
   acción sugerida por defecto. */
.chat-option-btn.chat-option-default{
    background:var(--primary-color);
    color:#fff;
}

.chat-option-btn:disabled{
    opacity:0.5;
    cursor:default;
}

#chatShowFreeText{
    cursor:pointer;
    text-decoration:underline;
}

/* El input y el botón "Enviar" van en la misma fila, centrados con un ancho
   máximo (igual que el historial), en vez del botón debajo del input. */
.chat-input-row{
    display:flex;
    align-items:center;
    gap:8px;
    width:100%;
    max-width:80%;
    margin:0 auto;
}

.chat-input-text{
    flex:1 1 auto;
    min-width:300px;
}

.chat-send-btn{
    flex-shrink:0;
}

/* El ui-inputgroup que envuelve el input + botón "Enviar" debe ocupar todo
   el ancho de .chat-input-row (80%, igual que el scrollpanel del historial),
   y el botón debe medir lo mismo de alto que el input en vez del alto por
   defecto (más grande) que trae un ui-button de PrimeFaces. */
.chat-input-row .ui-inputgroup{
    display:flex;
    width:100%;
}

.chat-input-row .ui-inputgroup .ui-inputtext{
    flex:1 1 auto;
    min-width:0;
}

.chat-input-row .ui-inputgroup .ui-button{
    flex-shrink:0;
    position:relative;
    width:36px;
    min-width:36px;
    min-height:30px;
    max-height:30px;
    padding:0;
    box-sizing:border-box;
}

.conversation-list{
    display:flex;
    flex-direction:column;
    gap:4px;
}

.conversation-item{
    display:flex;
    align-items:center;
    justify-content:space-between;
    border-radius:6px;
    padding:4px 8px;
}

.conversation-item.active{
    background-color:rgba(21,101,192,0.12);
}

.conversation-title{
    flex:1;
    overflow:hidden;
    text-overflow:ellipsis;
    white-space:nowrap;
    cursor:pointer;
}

.conversation-menu-btn.ui-button{
    flex-shrink:0;
    opacity:0;
    transition:opacity 0.15s ease;
    position:relative;
    width:24px;
    height:24px;
    min-width:24px;
    padding:0 !important;
    border:none;
    background:transparent;
    box-shadow:none;
}

.conversation-menu-btn.ui-button .ui-button-icon-left{
    font-size:0.8rem;
}

.conversation-menu-btn.ui-button:enabled:hover{
    background:rgba(0,0,0,0.06);
}

.conversation-item:hover .conversation-menu-btn,
.conversation-item.active .conversation-menu-btn{
    opacity:1;
}

.conversation-menu-delete .ui-menuitem-link,
.conversation-menu-delete .ui-menuitem-text,
.conversation-menu-delete .ui-menuitem-icon{
    color:#d32f2f !important;
}

.chat-feedback{
    display:flex;
    align-items:center;
    gap:4px;
    margin-top:8px;
}

.chat-feedback .feedback-btn.voted{
    color:#1565C0;
}

.typing-dots{
    display:inline-flex;
    align-items:center;
    gap:4px;
}

.typing-dots span{
    width:6px;
    height:6px;
    border-radius:50%;
    background-color:currentColor;
    opacity:0.4;
    animation:typing-dot-bounce 1.2s infinite ease-in-out;
}

.typing-dots span:nth-child(2){
    animation-delay:0.2s;
}

.typing-dots span:nth-child(3){
    animation-delay:0.4s;
}

@keyframes typing-dot-bounce{
    0%, 60%, 100%{
        opacity:0.4;
        transform:translateY(0);
    }
    30%{
        opacity:1;
        transform:translateY(-3px);
    }
}

.login-card{
    background-color:#fff;
    /* Sin esto, el padding de p-5 (3rem) se suma al width:360px fijo en vez de
       repartirse dentro de él, y la tarjeta termina más ancha que el viewport
       en celulares (los inputs quedan cortados contra el borde derecho). */
    box-sizing:border-box;
}

.login-message{
    display:block;
    margin-bottom:12px;
    padding:8px 12px;
    border-radius:6px;
    font-size:0.9rem;
}

.login-message-error{
    background-color:#fdecea;
    color:#b71c1c;
}

.login-message-info{
    background-color:#e8f5e9;
    color:#1b5e20;
}

.table-scroll-wrapper{
    width:100%;
    overflow-x:auto;
}

/* La tabla, dentro del wrapper con scroll, necesita un ancho mínimo propio
   para que las columnas no se compriman a casi nada en pantallas angostas;
   el que se desplace es el wrapper, no las columnas individuales. */
.table-scroll-wrapper .ui-datatable-tablewrapper{
    min-width:640px;
}

/* PrimeFaces no oculta el texto de fallback ("ui-button") en botones que
   solo tienen ícono y ningún value (el pencil de editar, los íconos del
   footer); el tema solo le agrega padding, no display:none. Sin esto el
   texto queda invisible-ish superpuesto al ícono en desktop, pero se nota
   apenas el layout tiene más espacio (como pasó en mobile con el footer). */
.ui-button-icon-only .ui-button-text{
    display:none !important;
}

/* El ícono de estos botones va con position:absolute (así lo centra el tema),
   por lo que NO aporta ancho al botón; al ocultar el texto de arriba no
   quedaba nada dándole tamaño y el botón colapsaba a una línea. Se fuerza
   un tamaño cuadrado explícito para que no dependa de eso. */
.ui-button-icon-only{
    width:2.357rem !important;
    height:2.357rem !important;
    min-width:2.357rem !important;
    min-height:2.357rem !important;
    position:relative !important;
}

.ui-button-icon-only .ui-icon{
    position:absolute !important;
    top:50% !important;
    left:50% !important;
    margin-top:-0.5rem !important;
    margin-left:-0.5rem !important;
}

/* --- Responsivo: tablet/celular ------------------------------------------ */
@media (max-width: 768px){

    /* El sidebar de conversaciones pasa a apilarse arriba del chat en vez
       de ir al costado, y deja de tener ancho fijo. */
    .app-chat-layout{
        flex-direction:column;
    }

    .app-chat-sidebar{
        width:100%;
        min-width:0;
        max-height:220px;
    }

    /* En mobile el input+botón ocupan todo el ancho disponible en vez del
       80% centrado que se usa en pantallas grandes. */
    .chat-input-row{
        max-width:100%;
    }

    /* El historial de mensajes usaba 80% de ancho para verse centrado en
       pantallas grandes; en mobile conviene aprovechar todo el ancho.
       .app-chat-layout es el chat de prueba del admin (agente_ia.xhtml);
       .chat-history-wrap es el chat real de capacitación del alumno
       (capacitacion_chat.xhtml), que no comparte ese wrapper. */
    .app-chat-layout .ui-scrollpanel,
    .chat-history-wrap .ui-scrollpanel{
        width:100% !important;
    }

    /* Los diálogos (renombrar, voto, nuevo usuario) tienen ancho fijo en
       píxeles que puede superar el ancho de un celular. */
    .ui-dialog{
        width:92vw !important;
        max-width:92vw !important;
    }

    /* Footer: las dos mitades (copyright / redes sociales) se apilan. */
    .app-footer .flex.footer{
        flex-direction:column;
        text-align:center;
        gap:8px;
    }

    .app-footer .col-6{
        width:100% !important;
        justify-content:center !important;
    }

    /* Panel de configuración (correo/perfil/ambiente/tema) del header: tenía
       ancho fijo en rem que puede superar el ancho del celular. */
    .ui-overlaypanel .formgrid.w-20rem{
        width:85vw !important;
        max-width:320px;
    }

    /* Mantenedor de usuarios: en celular se ocultan las columnas menos
       críticas para que la tabla quepa mejor y el scroll horizontal sea
       más corto (Correo/Perfil/Activo/editar/eliminar siguen visibles). */
    .col-hide-mobile{
        display:none !important;
    }
}

.wrap-column {
    white-space: normal !important;
    overflow-wrap: break-word;
    word-break: break-word;
}

/* Dashboard de inicio: botones cuadrados grandes con ícono al medio.
   El centrado y el layout flex se resuelven con utilidades de PrimeFlex
   directamente en la vista (flex, justify-content-center, gap-4, etc). */
.home-hero {
    min-height: 60vh;
}

.dashboard-tiles {
    padding: 24px 0;
}

.dashboard-tile {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 220px;
    height: 220px;
    border-radius: 16px;
    background-color: var(--surface-card);
    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
    text-decoration: none;
    color: var(--text-color);
    transition: transform 0.15s ease, box-shadow 0.15s ease;
    cursor: pointer;
    overflow: hidden;
}

.dashboard-tile:hover {
    transform: translateY(-4px);
    box-shadow: 0 6px 16px rgba(0, 0, 0, 0.15);
    text-decoration: none;
    color: var(--text-color);
}

/* !important necesario: el tema PrimeFaces define "body .pi{font-size:1rem}",
   más específico que una sola clase, y gana sobre este selector si no se fuerza. */
.dashboard-tile-icon {
    font-size: 10rem !important;
    line-height: 1;
    color: var(--primary-color);
    margin-top: 10px;
}

.dashboard-tile-label {
    position: absolute;
    top: 14px;
    left: 50%;
    transform: translateX(-50%);
    font-size: 11px;
    font-weight: 700;
    text-align: center;
    padding: 0 2px 2px 2px;
}

.dashboard-tile-disabled {
    opacity: 0.65;
    cursor: default;
    pointer-events: none;
}

.dashboard-tile-disabled .dashboard-tile-icon {
    color: #16a34a;
}

/* La tile de "Capacitaciones Habilitadas/Finalizadas" es un p:commandButton (dispara una
   acción, no navega): PrimeFaces le agrega sus propias clases de botón (borde/fondo del
   tema) que hay que resetear para que se vea igual que el resto de las tiles, que son
   h:outputLink. */
/* Tile "Capacitaciones Habilitadas/Finalizadas" (p:commandLink, no h:outputLink como el
   resto): icono en verde mientras está habilitada (todo activo, como el candado abierto) y
   en rojo cuando el admin las finalizó (candado cerrado) — mismos colores ya usados en el
   resto del admin (#16a34a en dashboard-tile-disabled, #dc2626 en evaluaciones.xhtml). */
.dashboard-tile-icon.pi-lock-open {
    color: #16a34a !important;
}

.dashboard-tile-icon.pi-lock {
    color: #dc2626 !important;
}

/* Caja de aviso bajo el grid de tiles (home.xhtml): reemplaza el texto largo que antes
   se forzaba dentro del tile de 220px (quedaba apretado/desbordado con font-size:12px). */
.dashboard-info-warning {
    display: flex;
    align-items: center;
    gap: 10px;
    max-width: 480px;
    margin: 8px auto 0;
    padding: 12px 16px;
    border-radius: 8px;
    background-color: rgba(245, 158, 11, 0.12);
    border: 1px solid rgba(245, 158, 11, 0.4);
    color: #f59e0b;
    font-size: 14px;
    text-align: left;
}

.dashboard-info-warning .pi {
    font-size: 1.3rem !important;
    flex-shrink: 0;
}

/* Pre-Test: opciones de respuesta con más aire para que se vean como tarjetas. */
.pretest-opciones .ui-radiobutton-label {
    font-size: 1rem;
    padding: 4px 0;
}

/* Hub de Capacitación (capacitacion.xhtml): fila por modelo, resaltando cuál está activo. */
.capacitacion-modulo {
    border: 1px solid var(--surface-border);
}

.capacitacion-modulo-actual {
    border-color: var(--primary-color);
    border-width: 2px;
}

.capacitacion-modulo-completado {
    opacity: 0.75;
}

.capacitacion-modulo-bloqueado {
    opacity: 0.55;
}

.pretest-opciones tr {
    display: block;
    margin-bottom: 8px;
}

/* Pre-Test: card con el doughnut de progreso, arriba a la derecha del panel. */
.pretest-panel {
    position: relative;
}

.pretest-progreso-card {
    position: absolute;
    top: 16px;
    right: 16px;
    display: flex;
    align-items: center;
    gap: 12px;
}

/* Deja espacio a la derecha para que el texto de la pregunta no quede debajo del card. */
.pretest-contenido {
    padding-right: 190px;
}

@media (max-width: 768px) {
    .pretest-progreso-card {
        position: static;
        justify-content: flex-end;
        margin-bottom: 12px;
    }

    .pretest-contenido {
        padding-right: 0;
    }
}

.pretest-progreso-legend {
    display: flex;
    flex-direction: column;
    gap: 4px;
    font-size: 0.85rem;
    color: var(--text-color-secondary);
    white-space: nowrap;
}

.pretest-progreso-dot {
    display: inline-block;
    width: 10px;
    height: 10px;
    border-radius: 50%;
    margin-right: 6px;
}

.pretest-progreso-dot-verde {
    background-color: #16a34a;
}

.pretest-progreso-dot-roja {
    background-color: #dc2626;
}

/* El tema Saga deja el texto pegado al ícono en los botones normales (no icon-only):
   el padding propio de .ui-button-text no alcanza como separador visual confiable,
   así que forzamos flex+gap directo en el botón. */
.ui-button.ui-button-text-icon-left {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
}

/* Botones de acción de Progreso de Usuarios (progreso_usuarios.xhtml): fondo blanco
   con borde suave, y SOLO el ícono lleva el color de la acción (rojo bloquear,
   azul resetear, verde reabrir). !important necesario para ganarle al fondo/borde
   que el tema Saga le pone a todo ui-button. */
.ui-button.boton-blanco {
    background: #ffffff !important;
    border: 1px solid #d1d5db !important;
    box-shadow: none !important;
}

.ui-button.boton-blanco.icono-rojo .ui-icon {
    color: #dc2626 !important;
}

.ui-button.boton-blanco.icono-azul .ui-icon {
    color: #2563eb !important;
}

.ui-button.boton-blanco.icono-verde .ui-icon {
    color: #16a34a !important;
}

/* Ícono de estado de cada etapa (celdas de progreso_usuarios.xhtml): solo ícono,
   el texto va en tooltip. */
.estado-etapa-icono {
    font-size: 1.4rem !important;
    line-height: 1;
}

/* Tarjeta genérica para las secciones del tab Indicadores (evaluaciones.xhtml):
   mismo lenguaje visual que .dashboard-tile pero de alto/ancho variable. */
.indicador-card {
    background-color: var(--surface-card);
    border-radius: 12px;
    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
    padding: 1.25rem;
    height: 100%;
    box-sizing: border-box;
}