/* ======================================================================
   ultu.css -- ULTU Design System
   Estructura: 9 partes ordenadas por capas de responsabilidad

   PART 1 -- LEGACY              (codigo heredado, a migrar)
   PART 2 -- VARIABLES + RESET   (:root, *, body)
   PART 3 -- APP SHELL           (cabecera, botonera, menu lateral)
   PART 4 -- COMPONENTES GLOBALES(spinners, inputs, grilla)
   PART 5 -- LOGIN
   PART 6 -- MI PERFIL
   PART 7 -- ADMINISTRACION
   PART 8 -- CLIENTES
   PART 9 -- PRESUPUESTOS        (pendiente)
   ====================================================================== */


/* ======================================================================
   PART 1 -- LEGACY
   Codigo heredado de cuerpo.css / estilos.css.
   Revisar y eliminar progresivamente.
   ====================================================================== */


/* ──────────────────────────────────────────
    ELEMENTOS A ELIMINAR O REUBICAR (EXTRAIDOS DE CUERPO.CSS DEPRECADO)
────────────────────────────────────────── */

/* Primero solo ELEMENTOS HTML a eliminar o reubicar */

iframe {
    display: block;
    border-style: none;
}

/*Ahora solo elementos de tipo ID a eliminar o reubicar*/

#cabecera {
    padding: 0;
    align-items: normal;
    margin-bottom: 0px;
    width: 98%;
}

#panelMenu {
    display: block;
    position: relative;
}

#iframeBotonera {
    border: 0px;
    margin: 0;
}

#datosDestacados {
    padding-top: 0.5rem;
}

#cuerpoPagina,
#cuerpoSolapa {
    max-width: 100% !important;
}

#cabSistema,
#divBarraDirecciones,
#panelCuerpo,
#panelSolapa {
    padding-left: 0px;
}

#cabSistema,
#panelMenu,
#divBarraDirecciones,
#panelMenuSolapa,
#panelCuerpo,
#panelSolapa
{
    margin-left: 0px;
}

#botonera,
#botonerSolapa,
#botoneraSubSolapa,
#subBotonera,
#subBotoneraSubSolapa,
div.scrollableArea {
    position: relative;
    border: 0px;
    max-width: 100% !important;
}

/* Ahora elementos de "Clases" a eliminar o reubicar*/

.carousel-control-prev,
.carousel-control-next {
    height: max-content;
    top: -1.5em;
    width: max-content;
}

.carousel-control-prev {
    padding-right: 1%;
    margin-right: 0%;
    left: initial;
    right: 50%;
}

.carousel-control-next {
    padding-left: 1%;
    margin-left: 0%;
    right: initial;
    left: 50%;
}

.carousel-control-prev-icon,
.carousel-control-next-icon {
    padding: 0.8rem;
    background-color: #bbb;
    border: 1px solid #CCCCCC;
    box-shadow: 1px 1px 3px #CCC;
    border-radius: 6px;
    margin-top: 2.5rem;
}

.badge-ultu,
.carousel-control-prev-icon:hover,
.carousel-control-next-icon:hover {
    background-color: #60207E;
}

.badge-ultu {
    color: #fff;
}

.badge {
    font-size: 10px;
}

.badge-ultu:hover {
    color: #60207E;
    background-color: #fff;
    border: 1px solid #bbb;
}

.modal-body {
    position: relative;
    overflow-y: auto;
}

.modal-autoheight {
    position: relative;
    min-height: 100px !important;
    max-height: 2000px !important;
    max-width: 900px !important;
    height: auto !important;
}

.contenedor-dashboard {
	width: 95%;
    display: flex;
    justify-content: space-around;
    background-color: #fff;
    border: 1px solid #bbb;
    padding: 10px;
    border-radius: 5px;
}

.texto-titulo-dashboard {
    text-align: center;
    font-size: small;
    padding-bottom: 30px;
}

.grilla-titulo-dashboard {
	font-size: 20px;
	font-weight: none;
	color: #60207E;
	display: revert;
}

.elemento-superior-dashboard {
    width: 20%;
    padding-top: 5px;
    padding-bottom: 25px; /* Simplificar las propiedades de relleno */
    background-color: #60207E;
    color: #fff;
    border: 1px solid #60207E;
    border-radius: 5px;
    font-size: 50px;
    font-weight: bold;
    display: flex; /* Establecer el contenedor como flexbox */
    flex-direction: column; /* Columna principal para centrar verticalmente */
    justify-content: center; /* Centrar verticalmente el contenido */
    align-items: center;
}

.elemento-inferior-dashboard-bar {
    width: 50%; 
    height: 400px; 
    border: 1px solid black;
    text-align: center; 
    align-items: center;
}

.elemento-inferior-dashboard-pie {
    width: 49%; 
    height: 650px; 
    border: 1px solid black;
    text-align: center; 
    align-items: center;
}

.contenedor-dashboard-siniestro {
	width: 98%;
    display: flex;
    justify-content: space-between;
    background-color: #fff;
    border: 1px solid #bbb;
    padding: 10px;
    border-radius: 5px;
}

.elemento-superior-dashboard-siniestro {
    width: 15%;
    padding-top: 5px;
    padding-bottom: 50px; /* Simplificar las propiedades de relleno */
    background-color: #60207E;
    color: #fff;
    border: 1px solid #60207E;
    border-radius: 5px;
    font-size: 50px;
    font-weight: bold;
    display: flex; /* Establecer el contenedor como flexbox */
    flex-direction: column; /* Columna principal para centrar verticalmente */
    justify-content: center; /* Centrar verticalmente el contenido */
    align-items: center;
}

.elemento-inferior-dashboard-siniestro-bar {
    width: 50%; 
    height: 600px; 
    border: 1px solid black;
    text-align: center; 
    align-items: center;
}

.elemento-inferior-dashboard-siniestro-pie {
    width: 50%; 
    height: 1000px; 
    border: 1px solid black;
    text-align: center; 
    align-items: center;
}


/* ======================================================================
   PART 2 -- VARIABLES GLOBALES + RESET BASE
   Design tokens (:root), reset universal (*), body base
   ====================================================================== */

/* ──────────────────────────────────────────
    VARIABLES GLOBALES :ROOT
────────────────────────────────────────── */
:root {
    /* Colores primarios */
    --ultu-color-primary:       #6C4FD1;
    --ultu-color-primary-light: #7B5FD9;
    --ultu-color-primary-dark:  #5A3DBF;
    --ultu-color-primary-rgb:   108, 79, 209;

    /* Textos */
    --ultu-text-base:        #1a1a1a;
    --ultu-text-muted:       #585858;
    --ultu-text-subtle:      #888888;
    --ultu-text-faint:       #adadad;
    --ultu-text-placeholder: #b8b8b8;
    --ultu-text-dim:         #c3c3c3;

    /* Superficies y bordes */
    --ultu-bg:               #ecedf8;
    --ultu-surface:          #f5f6fc;
    --ultu-surface-hover:    #f0f1f9;
    --ultu-border:           #eaecf5;
    --ultu-card-header-bg:   #f5f5f5;
    --ultu-global-surface:   #ebecf2;
    --ultu-border-global-grid: #d7d8de;

    /* Tintes del primario */
    --ultu-primary-tint:         #f7f4ff;
    --ultu-primary-border-hover: #c4b5f4;

    /* Gradientes primarios */
    --ultu-gradient-primary: linear-gradient(135deg, #7B5FD9 0%, #5A3DBF 100%);
    --ultu-gradient-global-grid: #ebecf2;

    /* Radios */
    --ultu-radius-sm:   8px;
    --ultu-radius-md:   12px;
    --ultu-radius-lg:   18px;
    --ultu-radius-card: 24px;

    /* Indicadores de carga */
    --ultu-loading-track: rgba(var(--ultu-color-primary-rgb), 0.15);

    /* ── Sombras ─────────────────────────────────────────────────
       --ultu-shadow-color : purple derivado del brand (más oscuro que el primario) — úsalo en contenedores/cards.
       var(--ultu-color-primary-rgb) sigue usándose en botones/foco para que la sombra respete el color exacto del elemento.
    ──────────────────────────────────────────────────────────── */
    --ultu-shadow-color: 80, 60, 150;

    /* Escala de elevación — contenedores, cards, popups */
    --ultu-shadow-sm: 0 4px 16px rgba(var(--ultu-shadow-color), 0.08);
    --ultu-shadow-md: 0 8px 32px rgba(var(--ultu-shadow-color), 0.09), 0 2px 8px  rgba(0, 0, 0, 0.04);
    --ultu-shadow-lg: 0 16px 48px rgba(var(--ultu-shadow-color), 0.16), 0 2px 8px  rgba(0, 0, 0, 0.06);
    --ultu-shadow-xl: 0 24px 64px rgba(var(--ultu-shadow-color), 0.10), 0 4px 16px rgba(0, 0, 0, 0.05);

    /* Foco / ring interactivo */
    --ultu-shadow-focus: 0 0 0 3px rgba(var(--ultu-color-primary-rgb), 0.12);

    /* Botones — usan el primario exacto, no --ultu-shadow-color */
    --ultu-shadow-btn:            0 4px 14px rgba(var(--ultu-color-primary-rgb), 0.30);
    --ultu-shadow-btn-hover:      0 6px 20px rgba(var(--ultu-color-primary-rgb), 0.44);
    --ultu-shadow-btn-hero:       0 6px 22px rgba(var(--ultu-color-primary-rgb), 0.38);
    --ultu-shadow-btn-hero-hover: 0 8px 28px rgba(var(--ultu-color-primary-rgb), 0.48);

    /* ── Iconos SVG centralizados ── */
    --ultu-icon-logo-menu:     url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round'%3E%3Cline x1='3' y1='6' x2='21' y2='6'/%3E%3Cline x1='3' y1='12' x2='21' y2='12'/%3E%3Cline x1='3' y1='18' x2='21' y2='18'/%3E%3C/svg%3E");
    --ultu-icon-mail-inbox:    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='2' y='4' width='20' height='16' rx='2'/%3E%3Cpolyline points='2,4 12,13 22,4'/%3E%3C/svg%3E");
    --ultu-icon-mail-sent:     url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='22' y1='2' x2='11' y2='13'/%3E%3Cpolygon points='22 2 15 22 11 13 2 9 22 2'/%3E%3C/svg%3E");
    --ultu-icon-mail-draft:    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M11 4H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'/%3E%3Cpath d='M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z'/%3E%3C/svg%3E");
    --ultu-icon-mail-archive:  url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='21 8 21 21 3 21 3 8'/%3E%3Crect x='1' y='3' width='22' height='5'/%3E%3Cline x1='10' y1='12' x2='14' y2='12'/%3E%3C/svg%3E");
    --ultu-icon-cotizador:     url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='4' y='2' width='16' height='20' rx='2'/%3E%3Cline x1='8' y1='7' x2='16' y2='7'/%3E%3Cline x1='8' y1='11' x2='10' y2='11'/%3E%3Cline x1='14' y1='11' x2='16' y2='11'/%3E%3Cline x1='8' y1='15' x2='10' y2='15'/%3E%3Cline x1='14' y1='15' x2='16' y2='15'/%3E%3Cline x1='8' y1='19' x2='16' y2='19'/%3E%3C/svg%3E");
    --ultu-icon-tasks:         url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2'/%3E%3Crect x='9' y='3' width='6' height='4' rx='1'/%3E%3Cline x1='9' y1='12' x2='15' y2='12'/%3E%3Cline x1='9' y1='16' x2='12' y2='16'/%3E%3C/svg%3E");
    --ultu-icon-user-status:   url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'/%3E%3Ccircle cx='12' cy='7' r='4'/%3E%3C/svg%3E");
    --ultu-icon-helpdesk:      url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 18v-6a9 9 0 0 1 18 0v6'/%3E%3Cpath d='M21 19a2 2 0 0 1-2 2h-1a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h3z'/%3E%3Cpath d='M3 19a2 2 0 0 0 2 2h1a2 2 0 0 0 2-2v-3a2 2 0 0 0-2-2H3z'/%3E%3C/svg%3E");
    --ultu-icon-bell:          url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9'/%3E%3Cpath d='M13.73 21a2 2 0 0 1-3.46 0'/%3E%3C/svg%3E");
    --ultu-icon-chevron-right: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='9 18 15 12 9 6'/%3E%3C/svg%3E");
    --ultu-icon-chevron-down:  url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
    --ultu-icon-refresh:       url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='23 4 23 10 17 10'/%3E%3Cpolyline points='1 20 1 14 7 14'/%3E%3Cpath d='M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15'/%3E%3C/svg%3E");
    --ultu-icon-compose:       url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'/%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'/%3E%3C/svg%3E");
    --ultu-icon-calendar:      url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2'/%3E%3Cline x1='16' y1='2' x2='16' y2='6'/%3E%3Cline x1='8' y1='2' x2='8' y2='6'/%3E%3Cline x1='3' y1='10' x2='21' y2='10'/%3E%3C/svg%3E");
    --ultu-icon-search:        url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'/%3E%3C/svg%3E");
    --ultu-icon-export:        url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='3' width='18' height='18' rx='2'/%3E%3Cpath d='M3 9h18'/%3E%3Cpath d='M3 15h18'/%3E%3Cpath d='M9 3v18'/%3E%3Cpath d='M15 3v18'/%3E%3C/svg%3E");
    --ultu-icon-user:          url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='8' r='4'/%3E%3Cpath d='M4 20c0-4 3.6-7 8-7s8 3 8 7'/%3E%3C/svg%3E");
    --ultu-icon-lock:          url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2'/%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'/%3E%3C/svg%3E");
    --ultu-icon-eye:           url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 12s4-8 11-8 11 8 11 8-4 8-11 8S1 12 1 12z'/%3E%3Ccircle cx='12' cy='12' r='3'/%3E%3C/svg%3E");
    --ultu-icon-eye-off:       url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24'/%3E%3Cline x1='1' y1='1' x2='23' y2='23'/%3E%3C/svg%3E");
    --ultu-icon-arrow-right:   url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12h14M12 5l7 7-7 7'/%3E%3C/svg%3E");
    --ultu-icon-settings-gear: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'/%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'/%3E%3C/svg%3E");
    --ultu-icon-users-group:   url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2'/%3E%3Ccircle cx='9' cy='7' r='4'/%3E%3Cpath d='M23 21v-2a4 4 0 0 0-3-3.87'/%3E%3Cpath d='M16 3.13a4 4 0 0 1 0 7.75'/%3E%3C/svg%3E");
    --ultu-icon-hierarchy:     url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='1' width='9' height='6' rx='1.5'/%3E%3Crect x='7' y='9' width='10' height='6' rx='1.5'/%3E%3Crect x='14' y='17' width='9' height='6' rx='1.5'/%3E%3Cpath d='M10 4h3a2 2 0 0 1 2 2v1'/%3E%3Cpolyline points='13 5.5 15 7.5 17 5.5'/%3E%3Cpath d='M14 12h3a2 2 0 0 1 2 2v1'/%3E%3Cpolyline points='17 13.5 19 15.5 21 13.5'/%3E%3C/svg%3E");
    --ultu-icon-dispatch:      url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9 2H5a2 2 0 0 0-2 2v13'/%3E%3Cpath d='M8 5h6l3 3v9a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2z'/%3E%3Cpath d='M14 5v3h3'/%3E%3Cline x1='10' y1='11' x2='15' y2='11'/%3E%3Cline x1='10' y1='14' x2='15' y2='14'/%3E%3Cpath d='M19 13l4 1.5v2.5c0 2-4 4-4 4s-4-2-4-4V14.5z'/%3E%3Cpolyline points='17.5 17 19 18.5 21.5 15.5'/%3E%3C/svg%3E");
    --ultu-icon-login-key:     url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-3.92 7.94'/%3E%3C/svg%3E");
    --ultu-icon-text-lines:    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='4' y1='6' x2='20' y2='6'/%3E%3Cline x1='4' y1='12' x2='14' y2='12'/%3E%3Cline x1='4' y1='18' x2='18' y2='18'/%3E%3C/svg%3E");
    --ultu-icon-briefcase:     url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='2' y='7' width='20' height='14' rx='2'/%3E%3Cpath d='M16 7V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v2'/%3E%3Cline x1='12' y1='12' x2='12' y2='17'/%3E%3Cline x1='9' y1='14.5' x2='15' y2='14.5'/%3E%3C/svg%3E");
    --ultu-icon-info:          url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cline x1='12' y1='16' x2='12' y2='12'/%3E%3Cline x1='12' y1='8' x2='12.01' y2='8'/%3E%3C/svg%3E");
    --ultu-icon-check:         url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E");
    --ultu-icon-close:         url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'/%3E%3Cline x1='6' y1='6' x2='18' y2='18'/%3E%3C/svg%3E");

    /* ── Estados de usuario ── */
    --ultu-color-status-available: #22c55e;
    --ultu-color-status-busy:      #f59e0b;
    --ultu-color-status-absent:    #94a3b8;
    --ultu-color-status-vacation:  #3b82f6;

    /* ── Danger / requerido — formaliza los rojos sueltos que ya existían
       en .GrillaError y .gg-badge--no-activo, en vez de sumar un color nuevo ── */
    --ultu-color-danger:        #dc2626;
    --ultu-color-danger-bg:     #fef2f2;
    --ultu-color-danger-border: #fca5a5;

    /* ── Series de gráficos (dashboards) — reutilizable en cualquier torta/área ── */
    --ultu-chart-series-1:      var(--ultu-color-primary);
    --ultu-chart-series-2:      #9B7FE8;
    --ultu-chart-series-3:      #E85FA0;
    --ultu-chart-series-4:      #4FA8D1;
    --ultu-chart-series-muted:  #D8D2F0;
}

/* ── Reset base ── */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

body {
    font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
    overflow-x: hidden;
}

/* ======================================================================
   PART 3 -- APP SHELL -- LAYOUT GLOBAL
   #divBarraDirecciones, Cabecera, Botonera,
   p_menuLateral, Container Queries, lockWindow
   ====================================================================== */

/* ══════════════════════════════════════════════════════════════
   BARRA DE DIRECCIONES, TRACKING DE NAVEGACIÓN — Área de navegación
   del sitio web SPA, sirve para volver atrás en el recorrido de las
   páginas que se fue visitando / linkeando está inmediatamente antes 
   del Layout Global.
══════════════════════════════════════════════════════════════ */

#divBarraDirecciones {
    margin-top: 0.5rem;
}

/* ══════════════════════════════════════════════════════════════
   LAYOUT GLOBAL — Área de contenido principal
   Wrapper que envuelve panelCuerpo + panelMenuSolapa + panelSolapa
   en cuerpo.php, inmediatamente después de #divBarraDirecciones.
══════════════════════════════════════════════════════════════ */

.ultu-content-area {
    padding: 10px 20px;
}


/* ══════════════════════════════════════════════════════════════
   CABECERA / TOP NAVIGATION BAR
══════════════════════════════════════════════════════════════ */

/* Cuando la cabecera de la aplicación está presente el body adopta
   layout de bloque en lugar del flex centrado que usa el login.
   Esto hace que .ultu-ia-header ocupe el 100 % de su contenedor. */
body:has(#ultu-ia-cabecera) {
    display: block;
}

/* ── Top bar ── */
.ultu-ia-header {
    position: sticky;
    top: 0;
    z-index: 100;
    width: 100%;
    background: #ffffff;
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 8px;
    min-height: 60px;
    flex-wrap: nowrap;
    container-type: inline-size;
    container-name: cabecera;
}

/* ── Brand / Logo ── */
.ultu-ia-header .ultu-ia-logo-sistema {
    display: flex;
    align-items: center;
    gap: 10px;
    max-width: 45%;
    flex-shrink: 1;
    min-width: 0;
    overflow: hidden;
    text-decoration: none;
    height: auto;
    margin-left: 15px;
}

.ultu-ia-logo-cia {
    max-height: 88px;
    width: auto;
    border-radius: 6px;
    flex-shrink: 0;
}

.ultu-ia-cabecera-titulo,
.ultu-ia-text-leyenda {
    font-size: 0.88rem;
    font-weight: 600;
    color: var(--ultu-text-base);
    line-height: 1.3;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    min-width: 0;
}

/* ── Right-side actions container ── */
.ultu-ia-datos-destacados {
    display: flex !important;
    align-items: center;
    gap: 10px;
    position: relative;
    flex-wrap: nowrap;
    flex-shrink: 0;
}

/* ── Bell loading spinner container ──
   Tamaño fijo para que no cause layout shift al alternar con #notificationIcon.
   visibility:hidden/visible en lugar de display:none/block garantiza que el 
   espacio reservado nunca cambie y el popup de notificaciones no salte. ── */
.ultu-ia-bell-notices {
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}

/* ── Notification icon (trigger) ──
   min-width fijo para que el reemplazo de contenido vía AJAX no reduzca el ancho del elemento y desplace el popup. ── */
.ultu-ia-notification-icon {
    cursor: pointer;
    position: relative;
    display: flex;
    align-items: center;
    min-width: 46px;
    flex-shrink: 0;
}

/* ── Bell button chip ── */
.ultu-ia-hdr-bell-btn {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 3px;
    padding: 7px 10px 5px;
    border-radius: var(--ultu-radius-md);
    background: var(--ultu-surface);
    border: 1.5px solid var(--ultu-border);
    transition: background .2s, border-color .2s, box-shadow .2s;
    min-width: 46px;
    user-select: none;
}

.ultu-ia-notification-icon:hover .ultu-ia-hdr-bell-btn {
    background: var(--ultu-primary-tint);
    border-color: var(--ultu-primary-border-hover);
    box-shadow: 0 2px 8px rgba(var(--ultu-color-primary-rgb), 0.14);
}

.ultu-ia-hdr-bell-icon {
    color: var(--ultu-color-primary);
    display: flex;
    align-items: center;
    line-height: 0;
    position: relative;
}

.ultu-ia-hdr-bell-icon--off {
    color: var(--ultu-text-placeholder);
}

/* Punto de aviso naranja superpuesto (reemplaza el <circle> que antes iba dentro del SVG) */
.ultu-ia-hdr-bell-dot {
    position: absolute;
    top: 3px;
    right: 2px;
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: #f59e0b;
}

/* ══════════════════════════════════════════════════════════════
   NOTIFICACIONES — Campana, popup, grilla, acciones
══════════════════════════════════════════════════════════════ */

/* ── Notification count badge ── */
.ultu-ia-badge,
#cantNoticePend.ultu-ia-badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 18px;
    height: 17px;
    padding: 0 5px;
    border-radius: 9px;
    font-size: 0.62rem;
    font-weight: 700;
    font-family: inherit;
    line-height: 1;
}

.ultu-ia-badge-warning {
    background: linear-gradient(135deg, #f59e0b, #d97706);
    color: #fff;
}

.ultu-ia-badge-secondary {
    background: #e4e6f4;
    color: var(--ultu-text-subtle);
}

/* ── Notifications popup panel ── */
.ultu-ia-popup-notice {
    position: absolute !important;
    top: calc(100% + 10px) !important;
    left: 0 !important;
    background: #ffffff !important;
    border: 1.5px solid var(--ultu-border) !important;
    border-radius: 16px !important;
    box-shadow: var(--ultu-shadow-lg) !important;
    z-index: 300 !important;
    min-width: 300px;
    max-width: 360px;
    overflow: hidden;
    margin: 0 !important;
    padding: 0 !important;
    float: none !important;
}

.ultu-ia-popup-notice .ultu-ia-card-header {
    display: flex !important;
    align-items: center !important;
    justify-content: space-between !important;
    padding: 12px 16px 11px !important;
    background: var(--ultu-card-header-bg) !important;
    border-bottom: 1px solid var(--ultu-border) !important;
    border-radius: 0 !important;
    font-size: 0.7rem !important;
    font-weight: 700 !important;
    color: var(--ultu-text-base) !important;
    letter-spacing: 0.7px !important;
    text-transform: uppercase !important;
}

/* ── Cotización & Perfil inline cards ── */
.ultu-ia-card {
    background: #ffffff;
    border: 1.5px solid var(--ultu-border) !important;
    border-radius: 14px !important;
    box-shadow: var(--ultu-shadow-sm) !important;
    overflow: hidden;
    margin: 0 !important;
    align-self: stretch;
    display: flex;
    flex-direction: column;
}

.ultu-ia-card .ultu-ia-card-header {
    display: flex !important;
    align-items: center !important;
    justify-content: space-between !important;
    padding: 8px 12px 7px !important;
    height: 34px;
    overflow: hidden;
    box-sizing: border-box;
    background: var(--ultu-card-header-bg) !important;
    border-bottom: 1px solid var(--ultu-border) !important;
    border-radius: 0 !important;
    font-size: 0.68rem !important;
    font-weight: 700 !important;
    color: var(--ultu-text-base) !important;
    letter-spacing: 0.7px !important;
    text-transform: uppercase !important;
}

.ultu-ia-card .ultu-ia-card-body {
    padding: 10px 12px !important;
    font-size: 0.78rem !important;
    color: var(--ultu-text-muted) !important;
    line-height: 1.00 !important;
    flex: 1 1 auto;
}

.ultu-ia-cotiz-row {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 12px;
}

.ultu-ia-cotiz-row + .ultu-ia-cotiz-row {
    margin-top: 8px;
    padding-top: 8px;
    border-top: 1px solid var(--ultu-surface-hover);
}

.ultu-ia-cotiz-lbl {
    font-weight: 700;
    color: var(--ultu-text-base);
}

/* ── Header refresh / icon button ── */
.ultu-ia-hdr-refresh-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: none;
    border: none;
    cursor: pointer;
    color: var(--ultu-text-faint);
    padding: 4px 5px;
    border-radius: 6px;
    transition: color .2s, background .2s;
    line-height: 0;
    text-decoration: none !important;
}

.ultu-ia-hdr-refresh-btn:hover {
    color: var(--ultu-color-primary);
    background: var(--ultu-primary-tint);
}

/* ── Contenedores de íconos de refresh: tamaño fijo para evitar layout shift
   al alternar entre el SVG (13px) y el spinner reutilizado .ultu-ia-spinner-sm (16px) ── */
#loadUpCotizacionMoneda,
#refreshNotices {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 16px;
    height: 16px;
    flex-shrink: 0;
}

/* ── Profile card ── */
.ultu-ia-hdr-user-row {
    display: flex;
    align-items: center;
    gap: 8px;
    min-height: 21px;
}

.ultu-ia-hdr-user-lbl {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 0.62rem;
    font-weight: 400;
    color: var(--ultu-text-faint);
    text-transform: uppercase;
    letter-spacing: 0.6px;
    margin-bottom: 0;
    line-height: 0;
}

.ultu-ia-hdr-user-name {
    font-size: inherit;
    font-weight: 700;
    color: var(--ultu-text-base);
    text-transform: uppercase;
    letter-spacing: inherit;
    line-height: 1;
}

.ultu-ia-hdr-date {
    font-size: 0.78rem;
    color: var(--ultu-text-subtle);
    margin-bottom: 8px;
}

.ultu-ia-hdr-profile-actions {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 10px;
    padding-top: 6px;
    border-top: 1px solid var(--ultu-surface-hover);
}

.ultu-ia-datos-perfil a {
    color: var(--ultu-color-primary);
    font-size: 0.78rem;
    font-weight: 500;
    text-decoration: none;
    transition: opacity .2s;
    cursor: pointer;
}

.ultu-ia-datos-perfil a:hover { opacity: 0.75; text-decoration: none; }

/* ── Mobile mini menu button ── */
.ultu-ia-btn-mini-mnu {
    display: none;
}

.ultu-ia-btn-mini-mnu a {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 7px 12px;
    background: var(--ultu-surface);
    border: 1.5px solid var(--ultu-border);
    border-radius: 10px;
    color: var(--ultu-color-primary);
    font-size: 0.8rem;
    font-weight: 600;
    text-decoration: none;
    cursor: pointer;
    transition: background .2s;
}

.ultu-ia-btn-mini-mnu a:hover { background: var(--ultu-primary-tint); }

.ultu-ia-mini-user-name {
    display: inline-block;
    max-width: 92px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

#frmMenu {
    display: none;
}

/* ── Notice items table ── */
.ultu-ia-grilla-notice {
    width: 100%;
    border-collapse: collapse;
    display: block;
    max-height: 260px;
    overflow-y: auto;
}

.ultu-ia-grilla-notice::-webkit-scrollbar { width: 4px; }
.ultu-ia-grilla-notice::-webkit-scrollbar-track { background: var(--ultu-surface); }
.ultu-ia-grilla-notice::-webkit-scrollbar-thumb { background: #d4d2ee; border-radius: 2px; }

.ultu-ia-grilla-texto-notice,
.ultu-ia-grilla-texto-notice-leida {
    display: block;
    width: 100%;
    cursor: pointer;
    border-bottom: 1px solid var(--ultu-surface-hover);
    transition: background .12s;
}

.ultu-ia-grilla-texto-notice { background: #f5f4ff; }
.ultu-ia-grilla-texto-notice-leida { background: #ffffff; }

.ultu-ia-grilla-texto-notice:hover,
.ultu-ia-grilla-texto-notice-leida:hover { background: var(--ultu-primary-tint); }

.ultu-ia-grilla-texto-notice td,
.ultu-ia-grilla-texto-notice-leida td {
    display: block;
    padding: 10px 14px;
    font-size: 0.82rem;
}

.ultu-ia-grilla-texto-notice td .float-left,
.ultu-ia-grilla-texto-notice-leida td .float-left {
    float: none !important;
    display: block;
}

.ultu-ia-grilla-texto-notice td .float-left:first-child {
    font-size: 0.82rem;
    font-weight: 600;
    color: var(--ultu-text-base);
    line-height: 1.4;
    margin-bottom: 3px;
}

.ultu-ia-grilla-texto-notice-leida td .float-left:first-child {
    font-size: 0.82rem;
    font-weight: 400;
    color: var(--ultu-text-muted);
    line-height: 1.4;
    margin-bottom: 3px;
}

.ultu-ia-estilo-fecha-notice {
    font-size: 0.7rem !important;
    color: var(--ultu-text-faint) !important;
    float: none !important;
    display: block !important;
}

.ultu-ia-grilla-error {
    color: #dc2626;
    font-size: 0.82rem;
    padding: 10px 14px;
    display: block;
}

/* ── Notice actions bar ── */
.ultu-ia-notice-actions-wrap {
    display: flex;
    gap: 8px;
    justify-content: center;
    padding: 10px 14px 12px;
    border-top: 1px solid var(--ultu-border);
    background: var(--ultu-card-header-bg);
}

/* ── btnVioleta ── */
.ultu-ia-btn-violeta {
    padding: 4px 14px;
    background: var(--ultu-gradient-primary);
    color: #fff;
    border: none;
    border-radius: var(--ultu-radius-sm);
    font-size: 0.78rem;
    font-weight: 600;
    font-family: inherit;
    cursor: pointer;
    box-shadow: var(--ultu-shadow-btn);
    transition: transform .15s, box-shadow .2s;
    white-space: nowrap;
}

.ultu-ia-btn-violeta:hover {
    transform: translateY(-1px);
    box-shadow: var(--ultu-shadow-btn-hover);
}

.ultu-ia-btn-violeta:active { transform: translateY(0); }

/* ── No notices empty state ── */
.ultu-ia-notice-empty {
    text-align: center;
    padding: 20px 16px;
    font-size: 0.82rem;
    color: var(--ultu-text-faint);
}

/* ══════════════════════════════════════════════════════════════
   BOTONERA PRINCIPAL — Menú horizontal de navegación
   BEM: ultu-ia-botonera / ultu-ia-menu-pr / ultu-ia-menu-pr-link
   Reemplaza gradualmente los estilos de estilos.css:
   .btnMenuPr / .btnMenuPrSeleccionado / .menuPrincipal
   Mantiene las clases viejas en los elementos para compatibilidad
   con el JavaScript existente (actualizarcolor, seleccionomenu).
══════════════════════════════════════════════════════════════ */

/* ── botonera__track: contenedor externo del rail de navegación ── */
.ultu-ia-botonera-track {
    position: relative;
    width: 100%;
    border-bottom: 2px solid var(--ultu-color-primary);
}

/* ── botonera__surface: superficie visible con scroll CSS nativo ── */
.ultu-ia-botonera-surface {
    position: relative;
    background: linear-gradient(180deg, rgba(255,255,255,0.98) 0%, rgba(248,249,255,0.98) 100%);
    border-radius: var(--ultu-radius-lg);
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.7);
    padding: 8px;
    overflow-x: auto;
    overflow-y: hidden;
    scrollbar-width: none;
    -ms-overflow-style: none;
}

/* Scrollbar oculto — la navegación se hace con las flechas laterales */
.ultu-ia-botonera-surface::-webkit-scrollbar { display: none; }

/* ── botonera__nav: fila flex de ítems ── */
.ultu-ia-botonera-nav {
    display: flex;
    align-items: stretch;
    gap: 2px;
    min-width: max-content;
}

/* ── menu-item: wrapper de cada ítem (neutros, sin visual propio) ──
   Sobreescribe float y altura de estilos.css para .menuPrincipal   */
.ultu-ia-menu-item.menuPrincipal {
    float: none;
    min-width: 0;
    height: auto;
    margin: 0;
    padding: 0;
    border: none;
    background: transparent;
    box-shadow: none;
    border-radius: var(--ultu-radius-sm);
    flex: 0 0 auto;
}

/* ── menu-pr: el ítem en sí (wrapper del link + borde animado) ──
   Sobreescribe estilos visuales de .btnMenuPr y .btnMenuPrSeleccionado */
.ultu-ia-menu-pr.btnMenuPr,
.ultu-ia-menu-pr.btnMenuPrSeleccionado {
    font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
    float: none;
    min-width: 0;
    width: auto;
    height: auto;
    margin: 0;
    padding: 0;
    border: none;
    background: transparent;
    box-shadow: none;
    border-radius: var(--ultu-radius-sm);
    position: relative;
}

/* Neutraliza el hover de estilos.css en .btnMenuPr:hover */
.ultu-ia-menu-pr.btnMenuPr:hover,
.ultu-ia-menu-pr.btnMenuPrSeleccionado:hover {
    border: none;
    background: transparent;
    box-shadow: none;
    color: inherit;
}

/* ── menu-item--dropdown: ítem con submenú flotante ── */
.ultu-ia-menu-item-dropdown.menuPrincipal,
.ultu-ia-menu-item-dropdown.ultu-ia-menu-pr.btnMenuPr,
.ultu-ia-menu-item-dropdown.ultu-ia-menu-pr.btnMenuPrSeleccionado {
    min-width: 118px;
}

/* ── menu-pr__border: borde animado independiente del layout ── */
.ultu-ia-menu-pr-border {
    position: absolute;
    inset: 0;
    border-radius: var(--ultu-radius-sm);
    border: 1px solid transparent;
    pointer-events: none;
    transition: border-color .2s ease, box-shadow .2s ease;
}

/* ── menu-pr__link: área clickeable con visuales modernos ── */
.ultu-ia-menu-pr-link {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 26px;
    padding: 5px 8px;
    border-radius: var(--ultu-radius-sm);
    background: linear-gradient(180deg, #ffffff 0%, #f1f1f1 100%);
    box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.9),
        0 1px 2px rgba(0, 0, 0, 0.04);
    color: var(--ultu-text-base);
    cursor: pointer;
    transition:
        transform .15s ease,
        background .2s ease,
        box-shadow .2s ease,
        color .2s ease;
}

.ultu-ia-menu-pr-link:hover {
    transform: translateY(-1px);
    background: linear-gradient(180deg, #ffffff 0%, #f1eeff 100%);
    box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.92),
        0 8px 20px rgba(var(--ultu-color-primary-rgb), 0.12);
}

.ultu-ia-menu-pr:hover .ultu-ia-menu-pr-border {
    border-color: #d7cff7;
    box-shadow: 0 0 0 3px rgba(var(--ultu-color-primary-rgb), 0.06);
}

/* ── menu-pr__label: texto del botón ── */
.ultu-ia-menu-pr-label {
    display: block;
    min-width: 0;
    font-size: 0.8rem;
    font-weight: 600;
    line-height: 1.2;
    color: inherit;
    white-space: nowrap;
    text-align: center;
}

.ultu-ia-menu-item-dropdown .ultu-ia-menu-pr-label {
    padding-right: 16px;
}

/* ── menu-pr__caret: flecha indicadora de dropdown (CSS puro) ── */
.ultu-ia-menu-pr-caret {
    position: absolute;
    top: 50%;
    right: 11px;
    width: 9px;
    height: 9px;
    border-right: 2px solid currentColor;
    border-bottom: 2px solid currentColor;
    transform: translateY(-50%) rotate(45deg);
    opacity: 0.45;
    transition: opacity .2s ease, transform .2s ease;
}

.ultu-ia-menu-pr:hover .ultu-ia-menu-pr-caret        { opacity: 0.8; }

.ultu-ia-menu-item-dropdown[aria-expanded="true"] .ultu-ia-menu-pr-caret {
    transform: translateY(-50%) rotate(-135deg);
    opacity: 0.8;
}

/* ── menu-pr--selected: estado activo/seleccionado ── */
.ultu-ia-menu-pr-selected .ultu-ia-menu-pr-link {
    background: var(--ultu-gradient-primary);
    color: #ffffff;
    box-shadow:
        0 12px 24px rgba(var(--ultu-color-primary-rgb), 0.28),
        inset 0 1px 0 rgba(255, 255, 255, 0.18);
}

.ultu-ia-menu-pr-selected .ultu-ia-menu-pr-border {
    border-color: rgba(90, 61, 191, 0.15);
}

.ultu-ia-menu-pr-selected .ultu-ia-menu-pr-caret {
    color: rgba(255, 255, 255, 0.82);
    opacity: 1;
}

.ultu-ia-menu-pr-selected:hover .ultu-ia-menu-pr-link {
    transform: translateY(-1px);
    box-shadow:
        0 16px 28px rgba(var(--ultu-color-primary-rgb), 0.34),
        inset 0 1px 0 rgba(255, 255, 255, 0.2);
}

/* ── dropdown flotante (submenú de Cobranzas, etc.) ── */
.ultu-ia-preview-dropdown {
    position: absolute;
    top: calc(100% - 6px);
    left: 0;
    min-width: 220px;
    background: #ffffff;
    border: 1px solid #e7e9f5;
    border-radius: 14px;
    box-shadow: var(--ultu-shadow-lg);
    padding: 5px;
    z-index: 25000;
}

.ultu-ia-preview-dropdown-list {
    display: grid;
}

.ultu-ia-preview-dropdown-item {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    padding: 5px 12px;
    border-radius: 10px;
    color: var(--ultu-text-base);
    font-size: 13px;
    font-weight: 500;
    background: transparent;
    cursor: pointer;
    transition: background .2s ease, color .2s ease, transform .15s ease;
}

.ultu-ia-preview-dropdown-item:hover {
    background: #f5f3ff;
    color: var(--ultu-color-primary-dark);
    transform: translateX(1px);
}

/* Flecha decorativa en cada ítem del dropdown */
.ultu-ia-preview-dropdown-item::after {
    content: "";
    width: 7px;
    height: 7px;
    border-right: 2px solid currentColor;
    border-bottom: 2px solid currentColor;
    transform: rotate(-45deg);
    opacity: 0.38;
    flex: 0 0 auto;
}

/* ── botonera__arrow: zonas de scroll lateral con hover (reemplaza smoothDivScroll) ── */
.ultu-ia-botonera-arrow {
    position: absolute;
    top: 6px;
    bottom: 2px;
    width: 48px;
    z-index: 10;
    display: flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    opacity: 0;
    pointer-events: none;
    transition: opacity .2s ease;
}

.ultu-ia-botonera-arrow--left {
    left: 0;
    background: linear-gradient(to right, rgba(248,249,255,0.97) 55%, transparent 100%);
    border-radius: 18px 0 0 18px;
}

.ultu-ia-botonera-arrow--right {
    right: 0;
    background: linear-gradient(to left, rgba(248,249,255,0.97) 55%, transparent 100%);
    border-radius: 0 18px 18px 0;
}

/* Chevron CSS puro */
.ultu-ia-botonera-arrow::before {
    content: '';
    display: block;
    width: 9px;
    height: 9px;
    border-right: 2.5px solid var(--ultu-color-primary);
    border-top: 2.5px solid var(--ultu-color-primary);
    transition: border-color .15s ease;
}

.ultu-ia-botonera-arrow--left::before  { transform: rotate(-135deg); margin-left: 8px; }
.ultu-ia-botonera-arrow--right::before { transform: rotate(45deg);   margin-right: 8px; }
.ultu-ia-botonera-arrow:hover::before  { border-color: var(--ultu-color-primary-dark); }

/* JS toggle: visible solo cuando hay contenido para scrollear en esa dirección */
.ultu-ia-botonera-arrow--visible {
    opacity: 1;
    pointer-events: auto;
}

#iframeBotonera, #botonera, #botoneraSubSolapa, #subBotonera {
	height: 44px !important;
	overflow: hidden;
	padding: initial;
	width: 100%;
}

/* Linea divisoria del 1er menú de solapas */
#iframeBotonera, #botonera {
	border-bottom: 3px solid var(--ultu-color-primary) !important;
}

/* Linea divisoria del 2do menú de solapas */
#botoneraSolapa {
    height: 44px;
}

/* ── Responsive de la botonera (sin escalones, solo ajustes finos) ── */
@container cabecera (max-width: 768px) {
    .ultu-ia-botonera-track   { padding-top: 4px; }
    .ultu-ia-botonera-surface { border-radius: 16px; padding: 7px; }
    .ultu-ia-botonera-nav     { gap: 7px; }

    .ultu-ia-menu-item.menuPrincipal,
    .ultu-ia-menu-pr.btnMenuPr,
    .ultu-ia-menu-pr.btnMenuPrSeleccionado { min-width: 0; }

    .ultu-ia-menu-item-dropdown.menuPrincipal,
    .ultu-ia-menu-item-dropdown.ultu-ia-menu-pr.btnMenuPr,
    .ultu-ia-menu-item-dropdown.ultu-ia-menu-pr.btnMenuPrSeleccionado { min-width: 108px; }

    .ultu-ia-menu-pr-link { min-height: 43px; padding: 4px 7px; }
}


/* ══════════════════════════════════════════════════════════════
   MENÚ LATERAL — Panel de navegación vertical deslizable
   BEM: p_menuLateral__*
   Reemplaza: #menuLateral / #panelLateral de cuerpo.css (deprecado),
              .tituloLateral / .lineasTitulo / .divLateral /
              .EstiloMailLinkLateral / .EstiloMailActualizacion de estilos.css
══════════════════════════════════════════════════════════════ */

/* ── Tab / franja lateral (trigger de apertura) ── */
.p_menuLateral__tab {
    position: fixed !important;
    z-index: 2501;
    top: 0;
    left: 0;
    width: 20px;
    height: 115px;
    min-height: 60px;
    background: var(--ultu-gradient-primary);
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 0 var(--ultu-radius-sm) var(--ultu-radius-sm) 0;
    box-shadow: 3px 0 12px rgba(var(--ultu-color-primary-rgb), 0.30);
    transition: width .2s ease, box-shadow .2s ease;
    padding: 0;
}

.p_menuLateral__tab:hover {
    width: 26px;
    box-shadow: 5px 0 20px rgba(var(--ultu-color-primary-rgb), 0.45);
}

.p_menuLateral__tab-icon {
    color: rgba(255, 255, 255, 0.88);
    --ultu-icon-size: 13px;
}

/* Alert state: punto indicador + pulso de sombra */
.p_menuLateral__tab--alert {
    animation: p_menuLateral-pulse 1.8s ease-in-out infinite;
    position: relative;
}

.p_menuLateral__tab--alert::after {
    content: '';
    position: absolute;
    top: 10px;
    right: -3px;
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: var(--ultu-color-status-busy);
    border: 2px solid #ffffff;
}

@keyframes p_menuLateral-pulse {
    0%, 100% { box-shadow: 3px 0 12px rgba(var(--ultu-color-primary-rgb), 0.30); }
    50%       { box-shadow: 3px 0 24px rgba(var(--ultu-color-primary-rgb), 0.68); }
}

/* ── Panel expandido ── */
.p_menuLateral__panel {
    display: none;
    position: fixed !important;
    top: 0;
    left: 0;
    width: 200px;
    height: 100vh;
    background: #ffffff;
    z-index: 2500;
    overflow-y: auto;
    overflow-x: hidden;
    box-shadow: var(--ultu-shadow-lg);
    border-right: 1px solid var(--ultu-border);
    border-radius: 0 var(--ultu-radius-md) var(--ultu-radius-md) 0;
}

.p_menuLateral__panel::-webkit-scrollbar { width: 4px; }
.p_menuLateral__panel::-webkit-scrollbar-track { background: var(--ultu-surface); }
.p_menuLateral__panel::-webkit-scrollbar-thumb {
    background: rgba(var(--ultu-color-primary-rgb), 0.25);
    border-radius: 2px;
}
.p_menuLateral__panel {
    scrollbar-width: thin;
    scrollbar-color: rgba(var(--ultu-color-primary-rgb), 0.25) var(--ultu-surface);
}

/* ── Logo del sistema ── */
.p_menuLateral__logo-wrap {
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 20px 16px 14px;
    border-bottom: 1px solid var(--ultu-border);
}

.p_menuLateral__logo {
    max-width: 150px;
    height: auto;
}

/* ── Sección genérica ── */
.p_menuLateral__section {
    padding: 10px 12px;
    border-bottom: 1px solid var(--ultu-border);
}

/* ── Encabezado de sección con línea extensible ── */
.p_menuLateral__section-header {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 8px;
}

.p_menuLateral__section-title {
    font-size: 0.68rem;
    font-weight: 700;
    color: var(--ultu-text-subtle);
    letter-spacing: 0.9px;
    text-transform: uppercase;
    white-space: nowrap;
    flex-shrink: 0;
}

/* Línea extensible — elemento explícito para permitir elementos a su derecha */
.p_menuLateral__section-line {
    flex: 1;
    height: 1px;
    background: var(--ultu-border);
    min-width: 10px;
}

/* ── Cuerpo de sección ── */
.p_menuLateral__section-body {
    display: flex;
    flex-direction: column;
    gap: 1px;
}

/* ── Ítem clickeable ── */
.p_menuLateral__item {
    display: flex;
    align-items: center;
    gap: 9px;
    padding: 7px 8px;
    border-radius: var(--ultu-radius-sm);
    cursor: pointer;
    color: var(--ultu-text-muted);
    font-size: 0.82rem;
    font-weight: 500;
    line-height: 1.3;
    user-select: none;
    transition: background .15s ease, transform .12s ease, color .15s ease;
}

.p_menuLateral__item:hover {
    background: var(--ultu-primary-tint);
    color: var(--ultu-color-primary-dark);
    transform: translateX(2px);
}

.p_menuLateral__item--alert {
    color: var(--ultu-text-base);
    font-weight: 600;
}

/* ── Ícono del ítem ── */
.p_menuLateral__item-icon {
    flex-shrink: 0;
    color: var(--ultu-color-primary);
    opacity: 0.75;
    line-height: 0;
    transition: opacity .15s;
}

.p_menuLateral__item:hover .p_menuLateral__item-icon { opacity: 1; }

/* ── Label del ítem ── */
.p_menuLateral__item-label {
    flex: 1;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* ── Badge de contador ── */
.p_menuLateral__item-badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 18px;
    height: 17px;
    padding: 0 5px;
    border-radius: 9px;
    font-size: 0.62rem;
    font-weight: 700;
    line-height: 1;
    flex-shrink: 0;
}

.p_menuLateral__item-badge--warning {
    background: linear-gradient(135deg, #f59e0b, #d97706);
    color: #ffffff;
}

.p_menuLateral__item-badge--secondary {
    background: #e4e6f4;
    color: var(--ultu-text-subtle);
}

/* ── Timestamp ── */
.p_menuLateral__timestamp {
    font-size: 0.68rem;
    color: var(--ultu-text-faint);
    padding: 5px 8px 2px;
    line-height: 1.4;
}

/* ── Fila de botones de acción ── */
.p_menuLateral__actions {
    display: flex;
    gap: 6px;
    padding: 8px 0 2px;
    flex-wrap: wrap;
    justify-content: center;
}

/* ── Estado del usuario: fila activa ── */
.p_menuLateral__estado-current {
    display: flex;
    align-items: center;
    gap: 9px;
    padding: 7px 8px;
    border-radius: var(--ultu-radius-sm);
    cursor: pointer;
    color: var(--ultu-text-muted);
    font-size: 0.82rem;
    font-weight: 500;
    user-select: none;
    transition: background .15s ease;
}

.p_menuLateral__estado-current:hover { background: var(--ultu-primary-tint); }

/* ── Punto de color de estado ── */
.p_menuLateral__estado-dot {
    width: 9px;
    height: 9px;
    border-radius: 50%;
    flex-shrink: 0;
    border: 1.5px solid rgba(0, 0, 0, 0.08);
}

.p_menuLateral__estado-dot--disponible  { background: var(--ultu-color-status-available); }
.p_menuLateral__estado-dot--ocupado     { background: var(--ultu-color-status-busy);      }
.p_menuLateral__estado-dot--ausente     { background: var(--ultu-color-status-absent);    }
.p_menuLateral__estado-dot--vacaciones  { background: var(--ultu-color-status-vacation);  }

/* ── Chevron del estado ── */
.p_menuLateral__estado-chevron {
    display: inline-block;
    width: 14px;
    height: 14px;
    -webkit-mask: var(--ultu-icon-chevron-down) center / contain no-repeat;
    mask:         var(--ultu-icon-chevron-down) center / contain no-repeat;
    background-color: var(--ultu-text-faint);
    flex-shrink: 0;
    margin-left: auto;
    transition: transform .2s ease;
}

.p_menuLateral__estado-current[aria-expanded="true"] .p_menuLateral__estado-chevron {
    transform: rotate(180deg);
}

/* ── Dropdown de opciones de estado ── */
.p_menuLateral__estado-dropdown {
    background: var(--ultu-surface);
    border: 1px solid var(--ultu-border);
    border-radius: var(--ultu-radius-sm);
    padding: 4px;
    margin: 0 4px 4px;
}

.p_menuLateral__estado-option {
    display: flex;
    align-items: center;
    gap: 9px;
    padding: 7px 10px;
    border-radius: 6px;
    cursor: pointer;
    font-size: 0.80rem;
    font-weight: 500;
    color: var(--ultu-text-muted);
    transition: background .12s ease, color .12s ease;
}

.p_menuLateral__estado-option:hover {
    background: var(--ultu-primary-tint);
    color: var(--ultu-color-primary-dark);
}

/* ── Link Help Desk ── */
.p_menuLateral__helpdesk-link {
    display: flex;
    align-items: center;
    gap: 9px;
    padding: 7px 8px;
    border-radius: var(--ultu-radius-sm);
    text-decoration: none;
    color: var(--ultu-text-muted);
    font-size: 0.82rem;
    font-weight: 500;
    transition: background .15s ease, color .15s ease, transform .12s ease;
}

.p_menuLateral__helpdesk-link:hover {
    background: var(--ultu-primary-tint);
    color: var(--ultu-color-primary-dark);
    transform: translateX(2px);
    text-decoration: none;
}

/* ── Header de Notificaciones (título + badge inline) ── */
.p_menuLateral__notif-header {
    flex-wrap: wrap;
    row-gap: 4px;
}

/* ── Selector de Cotizadores ── */
.p_menuLateral__select {
    width: 100%;
    padding: 4px 8px;
    border: 1.5px solid var(--ultu-border);
    border-radius: var(--ultu-radius-sm);
    background: var(--ultu-surface);
    font-size: 12px;
    font-family: inherit;
    color: var(--ultu-text-base);
    outline: none;
    cursor: pointer;
    transition: border-color .2s, box-shadow .2s;
}

.p_menuLateral__select:focus {
    border-color: var(--ultu-color-primary);
    box-shadow: var(--ultu-shadow-focus);
    background-color: #ffffff;
}

/* ── Pie del panel ── */
.p_menuLateral__footer {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 6px;
    padding: 14px 16px 16px;
}

.p_menuLateral__footer-logo {
    max-width: 100px;
    height: auto;
    opacity: 0.65;
}

.p_menuLateral__footer-copy {
    font-size: 0.70rem;
    color: var(--ultu-text-dim);
}


/* ══════════════════════════════════════════════════════════════
    CONTAINER QUERIES — Cabecera adaptativa sin escalones fijos
    La campana de notificaciones SIEMPRE permanece visible.
══════════════════════════════════════════════════════════════ */

/* Paso 1: cuando la cabecera mide menos de 700px → ocultar Cotización */
@container cabecera (max-width: 700px) {
    .ultu-ia-destacado:not(.ultu-ia-datos-perfil) {
        display: none;
    }
}

/* Paso 2: cuando la cabecera mide menos de 500px → ocultar Perfil */
@container cabecera (max-width: 500px) {
    .ultu-ia-datos-perfil {
        display: none;
    }
}

/* ══════════════════════════════════════════════════════════════
   OVERLAY DE CARGA (lockWindow)
   Solo posicionamiento — diseño y color vienen de .ultu-loader-shell
   y .ultu-ia-progress-bar respectivamente
══════════════════════════════════════════════════════════════ */
.lockWindow .ultu-loader-shell {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
}


/* ======================================================================
   PART 4 -- COMPONENTES GLOBALES REUTILIZABLES
   Spinners/loaders, inputs, buttons, panel consulta,
   iconos SVG, exportar, grilla-global
   ====================================================================== */

/* ──────────────────────────────────────────
   SPINNER DE CARGA GLOBAL
────────────────────────────────────────── */
#load {
    display: flex;
    justify-content: center;
    align-items: center;
}

.ultu-ia-spinner {
    width: 40px;
    height: 40px;
    border-radius: 50%;
    border: 3px solid var(--ultu-loading-track);
    border-top-color: var(--ultu-color-primary);
    animation: ultu-spin 0.75s linear infinite;
}

@keyframes ultu-spin {
    to { transform: rotate(360deg); }
}

/* ── Spinner variants (reemplazan loadLogin.gif) ── */
.ultu-ia-spinner-sm {
    display: inline-block;
    width: 16px;
    height: 16px;
    border-radius: 50%;
    border: 2px solid var(--ultu-loading-track);
    border-top-color: var(--ultu-color-primary);
    animation: ultu-spin 0.75s linear infinite;
    vertical-align: middle;
}

.ultu-ia-spinner-md {
    display: inline-block;
    width: 26px;
    height: 26px;
    border-radius: 50%;
    border: 2.5px solid var(--ultu-loading-track);
    border-top-color: var(--ultu-color-primary);
    animation: ultu-spin 0.75s linear infinite;
    vertical-align: middle;
}

/* ── Barra de progreso indeterminada (reemplaza cargando.gif) ── */
.ultu-ia-progress-bar {
    position: relative;
    width: 100%;
    height: 4px;
    background: var(--ultu-loading-track);
    border-radius: 2px;
    overflow: hidden;
}

.ultu-ia-progress-bar::before {
    content: "";
    position: absolute;
    top: 0;
    bottom: 0;
    width: 40%;
    background: var(--ultu-color-primary);
    border-radius: 2px;
    animation: ultu-progress-slide 1.6s ease-in-out infinite;
    will-change: transform;
}

@keyframes ultu-progress-slide {
    0%   { transform: translateX(-100%); }
    100% { transform: translateX(350%); }
}

.ultu-ia-progress-bar-sm {
    height: 2px;
}

/* ── Cápsula del overlay de carga ── */
.ultu-loader-shell {
    width: 100%;
    max-width: 320px;
    padding: 7px 9px;
    border-radius: 14px;
    background: rgba(255, 255, 255, 0.72);
    backdrop-filter: blur(12px);
    -webkit-backdrop-filter: blur(12px);
    border: 1px solid rgba(255, 255, 255, 0.55);
    box-shadow:
        0 8px 32px rgba(0, 0, 0, 0.10),
        0 1px 2px rgba(0, 0, 0, 0.05);
}


/* ──────────────────────────────────────────
   INPUT GLOBAL — input_global
   Campo de texto base del sistema. Altura fija 28px, borde suave #eaecf5,
   radio 8px. Hover y focus usan el color primario con sombra de anillo.
   Usar en cualquier <input type="text|number|email|..."> del sistema.
   No aplica a <select>; para combos usar el componente específico de cada página.
────────────────────────────────────────── */
.input_global {
    height: 25px;
    padding: 0 7px;
    font-size: 12px;
    color: var(--ultu-text-base);
    border: 1.5px solid var(--ultu-border);
    border-radius: var(--ultu-radius-sm);
    outline: none;
    width: 100%;
    box-sizing: border-box;
    transition: border-color .15s, box-shadow .15s, background .15s;
    appearance: none;
    -webkit-appearance: none;
}
.input_global::placeholder {
    color: var(--ultu-text-placeholder);
}
.input_global:hover:not(:focus) {
    border-color: var(--ultu-primary-border-hover);
}
.input_global:focus {
    border-color: var(--ultu-primary-border-hover);
    box-shadow: var(--ultu-shadow-focus);
    background: #fff;
}
.input_global:disabled,
.input_global[disabled] {
    background: var(--ultu-card-header-bg);
    color: var(--ultu-text-subtle);
    border-color: var(--ultu-border);
    cursor: not-allowed;
    opacity: 1;
}

/* ──────────────────────────────────────────
   SELECT GLOBAL — input_globalSelect / select.FormularioDatosCombo
   Desplegable base del sistema. Misma altura y tokens visuales que input_global.
   Incluye la flecha (chevron) mediante background-image para unificar la apariencia
   cross-browser (reemplaza la flecha nativa con -webkit-appearance: none).
   Único punto de verdad para TODOS los <select> del sistema: tanto los estáticos
   (input_globalSelect) como los cargados vía AJAX por los generadores de combos
   compartidos (agregarCombo.php, agregarComboRol.php, ComboEnEspera en utiles.php),
   que siempre emiten class="FormularioDatosCombo".
────────────────────────────────────────── */
.input_globalSelect,
select.FormularioDatosCombo {
    height: 25px;
    padding: 0 22px 0 7px;
    font-size: 12px;
    color: var(--ultu-text-base);
    border: 1.5px solid var(--ultu-border);
    border-radius: var(--ultu-radius-sm);
    outline: none;
    box-sizing: border-box;
    transition: border-color .15s, box-shadow .15s, background .15s;
    appearance: none;
    -webkit-appearance: none;
    background-image: var(--ultu-icon-chevron-down);
    background-repeat: no-repeat;
    background-position: right 6px center;
    background-size: 13px;
    cursor: pointer;
}
/* width:100% solo para input_globalSelect: es la clase que vive dentro de
   grillas en columna (p_clientes__field) pensadas para ancho completo.
   FormularioDatosCombo a secas se usa también en layouts inline (ej. barra
   "Ordenar por" en barraGlobal__sort) donde el ancho debe seguir siendo el del
   contenido — forzar 100% ahí rompe el layout en una sola fila. */
.input_globalSelect {
    width: 100%;
}
.input_globalSelect:hover:not(:focus),
select.FormularioDatosCombo:hover:not(:focus) {
    border-color: var(--ultu-primary-border-hover);
}
.input_globalSelect:focus,
select.FormularioDatosCombo:focus {
    border-color: var(--ultu-primary-border-hover);
    box-shadow: var(--ultu-shadow-focus);
    background-color: #fff;
}
.input_globalSelect:disabled,
select.FormularioDatosCombo:disabled,
.input_globalSelect[disabled],
select.FormularioDatosCombo[disabled] {
    background-color: var(--ultu-card-header-bg);
    color: var(--ultu-text-subtle);
    border-color: var(--ultu-border);
    cursor: not-allowed;
    opacity: 1;
}

/* ──────────────────────────────────────────
   COMBO GLOBAL — input_globalCombo / input_globalInlineCombo
   Wrappers div para combos <select> inyectados vía AJAX.
   input_globalCombo: combo estándar de ancho completo.
   input_globalInlineCombo: combo de 44% dentro de una fila inline (ej. Tipo + Nº Documento).
   El aspecto visual (borde, radio, flecha, hover/focus/disabled) ya lo resuelve
   select.FormularioDatosCombo en el bloque SELECT GLOBAL — toda esta clase inyecta
   siempre esa clase en el <select>. Acá solo quedan los ajustes de layout propios
   del wrapper flex (estirar el <select> al ancho del contenedor por sobre el
   style="width:...px" inline que agregan los generadores de combos en PHP).
   Usar estos wrappers en cualquier campo de combo AJAX del sistema.
────────────────────────────────────────── */
.input_globalCombo {
    min-height: 28px;
    display: flex;
    align-items: stretch;
    overflow: hidden;
}
.input_globalInlineCombo {
    flex: 0 0 44%;
    min-width: 0;
    overflow: hidden;
}
.input_globalCombo select,
.input_globalInlineCombo select {
    flex: 1;
    width: 100% !important;
}

/* ──────────────────────────────────────────
   BOTÓN GLOBAL — btn_globalWhite
   Cuerpo blanco degradado, texto primario en reposo → oscuro en hover.
   Basado en transición de .ultu-ia-menu-pr-link (sin translateY).
   Usar en cualquier botón de acción del sistema sobre fondos claros o violeta.
────────────────────────────────────────── */
.btn_globalWhite {
    height: 25px;
    padding: 0 8px;
    font-size: 11px;
    font-family: inherit;
    font-weight: 600;
    border: 1.5px solid #d4d6e8;
    border-radius: var(--ultu-radius-sm);
    background: linear-gradient(180deg, #ffffff 0%, #f5f4fb 100%);
    color: var(--ultu-color-primary);
    cursor: pointer;
    letter-spacing: .02em;
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, .9), 0 1px 3px rgba(0, 0, 0, .06);
    transition: background .2s ease, box-shadow .2s ease, color .2s ease, border-color .2s ease;
    outline: none;
    white-space: nowrap;
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    gap: 5px;
}
.btn_globalWhite:hover {
    background: linear-gradient(180deg, #ffffff 0%, #eae6ff 100%);
    color: var(--ultu-text-base);
    border-color: #a893f0;
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, .92), 0 10px 24px rgba(108, 79, 209, .18);
}
.btn_globalWhite:disabled,
.btn_globalWhite[disabled] {
    pointer-events: none;
    cursor: default;
    color: var(--ultu-text-subtle);
    background: var(--ultu-card-header-bg);
    border-color: #d4d6e8;
    box-shadow: none;
}
/* .BarraDireccion también se usa para breadcrumbs (ver agregarItemBarraDirecciones en /js);
   al combinarla con btn_globalWhite hay que anular su text-decoration:hover para que no herede el subrayado. */
.BarraDireccion.btn_globalWhite,
.BarraDireccion.btn_globalWhite:hover {
    text-decoration: none;
}

/* ──────────────────────────────────────────
   BOTÓN CALENDARIO GLOBAL — btn_globalDate
   Botón cuadrado 28×28px con ícono de calendario via CSS mask.
   Se usa junto a un input de fecha dentro de un wrapper flex.
   Usar en cualquier campo de fecha del sistema.
────────────────────────────────────────── */
.btn_globalDate {
    width: 28px;
    height: 28px;
    flex-shrink: 0;
    border: 1.5px solid var(--ultu-border);
    border-radius: var(--ultu-radius-sm);
    background: var(--ultu-primary-tint);
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: border-color .15s, background .15s;
    outline: none;
    font-family: inherit;
}
.btn_globalDate::before {
    content: '';
    display: block;
    width: 14px;
    height: 14px;
    -webkit-mask: var(--ultu-icon-calendar) center / contain no-repeat;
    mask:         var(--ultu-icon-calendar) center / contain no-repeat;
    background-color: var(--ultu-color-primary);
}
.btn_globalDate:hover {
    background: var(--ultu-primary-border-hover);
    border-color: var(--ultu-color-primary);
}

/* ──────────────────────────────────────────
   CAMPO FECHA GLOBAL — input_globalDate
   Wrapper flex para el par input-fecha + btn_globalDate.
   Usar en cualquier campo de fecha del sistema.
────────────────────────────────────────── */
.input_globalDate {
    display: flex;
    gap: 4px;
    align-items: center;
}
.input_globalDate .input_global {
    flex: 1;
}

/* ──────────────────────────────────────────
   PANEL GLOBAL CONSULTA — Componente reutilizable
   para pantallas de búsqueda/filtro en todo el sistema.
   Uso: panel_globalConsulta / panel_globalConsulta-header /
        panel_globalConsulta-header-title / panel_globalConsulta-form-grid
────────────────────────────────────────── */

/* ── Tarjeta contenedora ── */
.panel_globalConsulta {
    background: var(--ultu-gradient-global-grid);
    border-radius: var(--ultu-radius-md);
    box-shadow: var(--ultu-shadow-sm);
    border: 1px solid var(--ultu-border-global-grid);
    overflow: hidden;
    max-width: 1080px;
}

/* ── Header con fondo primario ── */
.panel_globalConsulta-header {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 8px 14px;
    background: var(--ultu-gradient-primary);
}

/* ── Título dentro del header ── */
.panel_globalConsulta-header-title {
    font-size: 14px;
    font-weight: 600;
    color: #fff;
    flex: 1;
}

/* ── Grid de campos: 3 cols → 2 → 1 ── */
.panel_globalConsulta-form-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 8px 12px;
    padding: 12px 14px 4px;
}
@media (max-width: 719px) {
    .panel_globalConsulta-form-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 479px) {
    .panel_globalConsulta-form-grid { grid-template-columns: 1fr; }
}

/* ── Separador de sección ── */
.panel_globalConsulta-section-label {
    grid-column: 1 / -1;
    font-size: 11px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .07em;
    color: var(--ultu-color-primary);
    padding: 3px 0 2px;
    border-bottom: 1.5px solid var(--ultu-primary-tint);
    margin-top: 4px;
}
.panel_globalConsulta-section-label:first-child {
    margin-top: 0;
}

/* ── Campo individual ── */
.panel_globalConsulta-field {
    display: flex;
    flex-direction: column;
    gap: 3px;
    min-width: 0;
}

/* ── Label ── */
.panel_globalConsulta-field-label {
    font-size: 11px;
    font-weight: 500;
    color: var(--ultu-text-muted);
    letter-spacing: .02em;
    text-transform: uppercase;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    user-select: none;
    line-height: 1.3;
    margin-bottom: 0;
}

/* ── Acciones (botones) ── */
.panel_globalConsulta-actions {
    display: flex;
    justify-content: flex-end;
    align-items: center;
    gap: 8px;
    padding: 8px 14px 12px;
    border-top: 1px solid var(--ultu-border);
    margin-top: 6px;
}

/* ──────────────────────────────────────────
   BOTONES CONSULTA/CANCELAR GLOBAL — btn_globalConsultaCancel
   Par de botones reutilizable para formularios de búsqueda:
   --primary (Consultar) y --ghost (Cancelar).
   Usar dentro de panel_globalConsulta-actions.
────────────────────────────────────────── */

/* ── Base compartida ── */
.btn_globalConsultaCancel {
    height: 28px;
    padding: 0 14px;
    font-size: 12px;
    font-family: inherit;
    font-weight: 600;
    border-radius: var(--ultu-radius-sm);
    border: 1.5px solid var(--ultu-border);
    cursor: pointer;
    transition: all .14s;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    outline: none;
    letter-spacing: .01em;
}

/* ── Primario (Consultar) ── */
.btn_globalConsultaCancel--primary {
    background: var(--ultu-color-primary);
    color: #fff;
    border-color: var(--ultu-color-primary);
}
.btn_globalConsultaCancel--primary::before {
    content: '';
    display: block;
    width: 12px;
    height: 12px;
    flex-shrink: 0;
    -webkit-mask: var(--ultu-icon-search) center / contain no-repeat;
    mask:         var(--ultu-icon-search) center / contain no-repeat;
    background-color: #fff;
}
.btn_globalConsultaCancel--primary:hover {
    background: var(--ultu-color-primary-dark);
    border-color: var(--ultu-color-primary-dark);
    box-shadow: var(--ultu-shadow-btn-hover);
    transform: translateY(-1px);
}

/* ── Fantasma (Cancelar) ── */
.btn_globalConsultaCancel--ghost {
    background: transparent;
    color: var(--ultu-text-muted);
}
.btn_globalConsultaCancel--ghost:hover {
    background: var(--ultu-primary-tint);
    border-color: var(--ultu-primary-border-hover);
    color: var(--ultu-color-primary);
}

/* ──────────────────────────────────────────
   BOTÓN GUARDAR GLOBAL — btn_globalSave
   Botón primario de confirmación. Gradiente primario, tamaño estándar de formulario.
   Usar en cualquier formulario de edición del sistema.
────────────────────────────────────────── */
.btn_globalSave {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    padding: 10px 22px;
    background: var(--ultu-gradient-primary);
    color: #ffffff;
    border: none;
    border-radius: var(--ultu-radius-sm);
    font-size: 13px;
    font-weight: 600;
    cursor: pointer;
    letter-spacing: 0.15px;
    box-shadow: var(--ultu-shadow-btn);
    transition: transform .15s, box-shadow .2s;
    white-space: nowrap;
    line-height: 1;
}
.btn_globalSave:hover {
    transform: translateY(-1px);
    box-shadow: var(--ultu-shadow-btn-hover);
}
.btn_globalSave:active {
    transform: translateY(0);
}

/* ──────────────────────────────────────────
   BOTÓN CANCELAR GLOBAL — btn_globalCancel
   Botón secundario neutro. Fondo surface, borde suave.
   Usar junto a btn_globalSave en formularios de edición.
────────────────────────────────────────── */
.btn_globalCancel {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    padding: 10px 20px;
    background: var(--ultu-surface);
    color: var(--ultu-text-muted);
    border: 1.5px solid var(--ultu-border);
    border-radius: var(--ultu-radius-sm);
    font-size: 13px;
    font-weight: 500;
    cursor: pointer;
    transition: background .2s, border-color .2s, color .2s;
    white-space: nowrap;
    line-height: 1;
}
.btn_globalCancel:hover {
    background: var(--ultu-surface-hover);
    border-color: #d4d6e8;
    color: var(--ultu-text-base);
}

/* ──────────────────────────────────────────
   NOTA INFORMATIVA GLOBAL — note_global
   Caja de información con borde lateral primario.
   Usar para mensajes de ayuda o contexto en formularios.
────────────────────────────────────────── */
.note_global {
    display: flex;
    align-items: flex-start;
    gap: 9px;
    background: var(--ultu-primary-tint);
    border-left: 3px solid var(--ultu-color-primary);
    border-radius: var(--ultu-radius-sm);
    padding: 11px 14px;
    font-size: 0.78rem;
    color: var(--ultu-text-muted);
    line-height: 1.55;
}
.note_global-icon {
    flex-shrink: 0;
    color: var(--ultu-color-primary);
    line-height: 0;
    margin-top: 1px;
}

/* ──────────────────────────────────────────
   ICONOS SVG — Sistema centralizado via CSS mask
   Uso: <span class="ultu-icon ultu-icon--mail-inbox"></span>
   El color hereda del padre via currentColor.
────────────────────────────────────────── */
.ultu-icon {
    display: inline-block;
    flex-shrink: 0;
    width: var(--ultu-icon-size, 18px);
    height: var(--ultu-icon-size, 18px);
    -webkit-mask: var(--ultu-icon-src) center / contain no-repeat;
    mask:         var(--ultu-icon-src) center / contain no-repeat;
    background-color: currentColor;
    vertical-align: middle;
}

.ultu-icon--sm  { --ultu-icon-size: 14px; }
.ultu-icon--md  { --ultu-icon-size: 18px; }
.ultu-icon--lg  { --ultu-icon-size: 22px; }

.ultu-icon--logo-menu    { --ultu-icon-src: var(--ultu-icon-logo-menu);     }
.ultu-icon--mail-inbox   { --ultu-icon-src: var(--ultu-icon-mail-inbox);    }
.ultu-icon--mail-sent    { --ultu-icon-src: var(--ultu-icon-mail-sent);     }
.ultu-icon--mail-draft   { --ultu-icon-src: var(--ultu-icon-mail-draft);    }
.ultu-icon--mail-archive { --ultu-icon-src: var(--ultu-icon-mail-archive);  }
.ultu-icon--cotizador    { --ultu-icon-src: var(--ultu-icon-cotizador);     }
.ultu-icon--tasks        { --ultu-icon-src: var(--ultu-icon-tasks);         }
.ultu-icon--user-status  { --ultu-icon-src: var(--ultu-icon-user-status);   }
.ultu-icon--helpdesk     { --ultu-icon-src: var(--ultu-icon-helpdesk);      }
.ultu-icon--bell         { --ultu-icon-src: var(--ultu-icon-bell);          }
.ultu-icon--chevron-right { --ultu-icon-src: var(--ultu-icon-chevron-right); }
.ultu-icon--chevron-down { --ultu-icon-src: var(--ultu-icon-chevron-down);  }
.ultu-icon--refresh      { --ultu-icon-src: var(--ultu-icon-refresh);       }
.ultu-icon--compose      { --ultu-icon-src: var(--ultu-icon-compose);       }
.ultu-icon--calendar     { --ultu-icon-src: var(--ultu-icon-calendar);      }
.ultu-icon--search       { --ultu-icon-src: var(--ultu-icon-search);        }
.ultu-icon--export       { --ultu-icon-src: var(--ultu-icon-export);        }
.ultu-icon--user         { --ultu-icon-src: var(--ultu-icon-user);          }
.ultu-icon--lock         { --ultu-icon-src: var(--ultu-icon-lock);          }
.ultu-icon--eye          { --ultu-icon-src: var(--ultu-icon-eye);           }
.ultu-icon--eye-off      { --ultu-icon-src: var(--ultu-icon-eye-off);       }
.ultu-icon--arrow-right  { --ultu-icon-src: var(--ultu-icon-arrow-right);   }
.ultu-icon--settings-gear { --ultu-icon-src: var(--ultu-icon-settings-gear); }
.ultu-icon--users-group  { --ultu-icon-src: var(--ultu-icon-users-group);   }
.ultu-icon--hierarchy    { --ultu-icon-src: var(--ultu-icon-hierarchy);     }
.ultu-icon--dispatch     { --ultu-icon-src: var(--ultu-icon-dispatch);     }
.ultu-icon--login-key    { --ultu-icon-src: var(--ultu-icon-login-key);    }
.ultu-icon--text-lines   { --ultu-icon-src: var(--ultu-icon-text-lines);   }
.ultu-icon--briefcase    { --ultu-icon-src: var(--ultu-icon-briefcase);    }
.ultu-icon--info         { --ultu-icon-src: var(--ultu-icon-info);         }
.ultu-icon--check        { --ultu-icon-src: var(--ultu-icon-check);        }
.ultu-icon--close        { --ultu-icon-src: var(--ultu-icon-close);        }

/* ──────────────────────────────────────────
    COSAS A REVISAR Y ORDENAR:
────────────────────────────────────────── */


/* ── Botón Exportar (generado por paginarConJS, class="exportar") ── */
.grilla-global td.GrillaPie a.exportar {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 4px 6px;
    border-radius: 6px;
    border: 1.5px solid #d4d6e8;
    background: linear-gradient(180deg, #fff 0%, #f5f4fb 100%);
    color: #6C4FD1 !important;
    font-size: 11px;
    font-weight: 600;
    text-decoration: none !important;
    cursor: pointer;
    transition: border-color .2s ease, color .2s ease, background .2s ease;
    vertical-align: middle;
}
.grilla-global td.GrillaPie a.exportar::before {
    content: '';
    display: inline-block;
    width: 13px;
    height: 13px;
    flex-shrink: 0;
    -webkit-mask: var(--ultu-icon-export) center / contain no-repeat;
    mask:         var(--ultu-icon-export) center / contain no-repeat;
    background-color: currentColor;
}
.grilla-global td.GrillaPie a.exportar:hover {
    border-color: #22c55e;
    color: #16a34a !important;
    background: linear-gradient(180deg, #fff 0%, #f0fdf4 100%);
    text-decoration: none !important;
}

/* ── Celda con texto + botón de acción (reemplaza tabla anidada dentro de td) ── */
.ultu-cell-action {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 4px;
}
.ultu-cell-action span {
    flex: 1;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
}


/* ══════════════════════════════════════════════════════════════
   GRILLA GLOBAL — Módulo de resultados reutilizable
   Aurora design. 100% autocontenido, sin dependencia de estilos.css.
   Asignar class="grilla-global" en reemplazo de class="grilla".
══════════════════════════════════════════════════════════════ */

/* ── Wrapper: contiene la tabla para border-radius confiable ── */
.grilla-global-wrap {
    border-radius: var(--ultu-radius-md);
    border: 1px solid var(--ultu-border-global-grid);
    margin-bottom: 10px;
    overflow-x: auto;
    overflow-y: hidden;
    box-shadow: 0 4px 20px rgba(108, 79, 209, .09);
}

.grilla-global-wrap::-webkit-scrollbar { height: 4px; }
.grilla-global-wrap::-webkit-scrollbar-track { background: var(--ultu-surface); }
.grilla-global-wrap::-webkit-scrollbar-thumb {
    background: rgba(var(--ultu-color-primary-rgb), 0.25);
    border-radius: 2px;
}
.grilla-global-wrap {
    scrollbar-width: thin;
    scrollbar-color: rgba(var(--ultu-color-primary-rgb), 0.25) var(--ultu-surface);
}

/* ── Tabla base: collapse elimina los gaps de cellspacing="1" del HTML ── */
.grilla-global {
    background: #ebecf2;
    width: 100%;
    border-collapse: collapse;
    border: none;
    table-layout: auto;
}

/* ── Header: gradiente en el TR evita el degradé por columna ── */
.grilla-global tr.GrillaCabecera {
    background: linear-gradient(180deg, #d5cbf7, #c4b5f4);
}
.grilla-global tr.GrillaCabecera td {
    background: transparent !important;
    padding: 5px 8px;
    font-size: 10px;
    font-weight: 700;
    letter-spacing: .04em;
    text-transform: uppercase;
    white-space: nowrap;
    border: none !important;
    text-align: center;
    height: auto;
}

.grilla-global tr.GrillaTexto {
    transition: background-color .12s ease-out;
}

.grilla-global tr.GrillaTexto td {
    padding: 2px 2px;
    font-size: 11px;
    color: #1a1a1a !important;
    border: none !important;
    border: 1px solid #d7d8de !important;
    vertical-align: middle;
    text-align: center;
    height: auto;
    transition: background-color .12s ease-out, color .12s ease-out;
}

/* Acento izquierdo sutil — degradé lateral Aurora */
.grilla-global tr.GrillaTexto td:first-child {
    border-left: 3px solid #ede9ff !important;
    transition: border-color .12s ease-out;
}

/* ── Hover: color sólido con fundido, TD transparente para que traspase ── */
.grilla-global tr.GrillaTexto:hover {
    background: #F4F0FE;
    cursor: pointer;
}
.grilla-global tr.GrillaTexto:hover td {
    background: transparent !important;
    color: #5A3DBF !important;
    cursor: pointer;
}
.grilla-global tr.GrillaTexto:hover td:first-child {
    border-left-color: #a893f0 !important;
}

/* ── Fila seleccionada ── */
.grilla-global tr.GrillaTextoSeleccionado {
    background: linear-gradient(90deg, #ede9ff 0%, #f0ecff 60%, #f7f4ff 100%);
}
.grilla-global tr.GrillaTextoSeleccionado td {
    padding: 2px 2px !important;
    background: transparent !important;
    color: #5A3DBF !important;
    font-size: 11px !important;
    font-weight: 600;
    vertical-align: middle;
    text-align: center;
}
.grilla-global tr.GrillaTextoSeleccionado td:first-child {
    border-left: 3px solid #7B5FD9 !important;
}

/* ── Footer: anula "width: max-content !important" de estilos.css ── */
.grilla-global td.GrillaPie {
    padding: 2px 6px;
    border-top: 1px solid #eaecf5;
    text-align: center;
    width: auto !important;
}

/* Footer de 3 zonas: spacer / paginado / exportar (reemplaza el viejo margin-top negativo) */
.grilla-global td.GrillaPie .grilla-global-paginado {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    line-height: 1;
}
.grilla-global td.GrillaPie .grilla-global-paginado__spacer,
.grilla-global td.GrillaPie .grilla-global-paginado__exportar {
    flex: 1 1 0;
}
.grilla-global td.GrillaPie .grilla-global-paginado__exportar {
    text-align: right;
}
.grilla-global td.GrillaPie .grilla-global-paginado__paginas {
    flex: 0 0 auto;
}

/* Tabla interna de paginación */
.grilla-global td.GrillaPie .grilla-global-paginado__paginas > table {
    display: table;
    border-collapse: collapse;
    margin: 0 auto;
}
.grilla-global td.GrillaPie .grilla-global-paginado__paginas > table td {
    background: transparent !important;
    border: none !important;
    padding: 0 2px !important;
    vertical-align: middle;
}

/* Links de páginas (no activa) */
.grilla-global td.GrillaPie a.EstiloPaginacion,
.grilla-global td.GrillaPie a.EstiloPaginacion:visited,
.grilla-global td.GrillaPie a.EstiloPaginacion:link {
    display: inline-block;
    min-width: 22px;
    text-align: center;
    padding: 4px 6px;
    border-radius: 5px;
    border: 1.5px solid #d4d6e8;
    background: #fff;
    color: #6C4FD1 !important;
    font-size: 11px;
    font-weight: 600;
    text-decoration: none !important;
    transition: background .15s, border-color .15s;
}
.grilla-global td.GrillaPie a.EstiloPaginacion:hover {
    color: #5A3DBF !important;
    background: #f0ecff;
    border-color: #a893f0;
    text-decoration: none !important;
}

/* Wrapper neutro — todos los divs de página */
.grilla-global td.GrillaPie .EstiloPaginacionSeleccionado {
    display: inline-block;
    vertical-align: middle;
    color: #6C4FD1 !important;
    font-weight: 700 !important;
    font-size: 11px !important;
}

/* Página activa: div sin <a> adentro → filled pill (Chrome 105+) */
.grilla-global td.GrillaPie .EstiloPaginacionSeleccionado:not(:has(a)) {
    min-width: 22px;
    padding: 4px 6px;
    border-radius: 5px;
    background: #6C4FD1;
    color: #fff !important;
    border: 1.5px solid #6C4FD1;
}

/* ── Badges de Estado — Pill con borde ── */
.gg-badge {
    display: inline-flex;
    align-items: center;
    padding: 1px 7px;
    border-radius: 20px;
    font-size: 10px;
    font-weight: 600;
    letter-spacing: .02em;
    white-space: nowrap;
    border: 1.5px solid;
}
.gg-badge--activo    { color: #16a34a; background: #f0fdf4; border-color: #86efac; }
.gg-badge--prospecto { color: #b45309; background: #fffbeb; border-color: #fcd34d; }
.gg-badge--no-activo { color: #dc2626; background: #fef2f2; border-color: #fca5a5; }


/* ──────────────────────────────────────────
   ssDetalle 
   Fondo y contenedor global para utilizar en todas las SubSolapas que
   se llamen "Detalle", esto apunta a reemplazar las clases viejas "fondo margenes"
────────────────────────────────────────── */

.ssDetalle {
    background: var(--ultu-gradient-global-grid);
    border: 1px solid var(--ultu-border-global-grid);
    border-bottom-left-radius:  var(--ultu-radius-lg);
    border-bottom-right-radius: var(--ultu-radius-lg);
    box-shadow: var(--ultu-shadow-sm);
    padding: 10px;
    margin-bottom: 20px;
}

/* ──────────────────────────────────────────
   ssDetalle-grid / ssDetalle-acciones
   Grid de filtros y botonera para usar dentro de .ssDetalle, en subsolapas
   de consulta que no requieren su propia card con header (a diferencia de
   panel_globalConsulta). Los campos van con panel_globalConsulta-field /
   panel_globalConsulta-field-label (label arriba, campo abajo) directamente
   dentro de este grid. Grid de 4 columnas que se reduce a 3, luego 2 y
   luego a 1 en mobile.
────────────────────────────────────────── */
.ssDetalle-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 6px 20px;
}
@media (max-width: 1100px) { .ssDetalle-grid { grid-template-columns: repeat(3, 1fr); } }
@media (max-width: 900px) { .ssDetalle-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 560px) { .ssDetalle-grid { grid-template-columns: 1fr; } }

/* ── Título de sección (barraGlobal__titulo) cuando se usa suelto arriba
   de un .ssDetalle: mismo espaciado que ya separa la línea violeta de la
   subsolapa del título (padding-top de .ssDetalle), replicado debajo para
   separarlo de los campos. Scoped a .ssDetalle para no alterar el resto de
   usos de .barraGlobal__titulo (barras de resultados, headers, etc.). ── */
.ssDetalle > .barraGlobal__titulo {
    display: block;
    margin-bottom: 7px;
}

.ssDetalle-acciones {
    display: flex;
    justify-content: center;
    gap: 10px;
    padding-top: 10px;
    margin-top: 8px;
}


/* ======================================================================
   PART 5 -- LOGIN
   Pantalla de autenticacion. Prefijo: ultu-ia-
   ====================================================================== */

body.ultu-login {
    min-height: 100vh;
    background: var(--ultu-bg);
    display: flex;
    align-items: center;
    justify-content: center;
    position: relative;
}

/* ──────────────────────────────────────────
   FONDO DECORATIVO DEL LOGIN
────────────────────────────────────────── */
.ultu-ia-bg-blob {
    position: fixed;
    border-radius: 50%;
    filter: blur(70px);
    opacity: 0.55;
    pointer-events: none;
    z-index: 0;
}
.ultu-ia-bg-blob--tl {
    width: 420px; height: 420px;
    background: #c4c6e8;
    top: -100px; left: -120px;
}
.ultu-ia-bg-blob--br {
    width: 350px; height: 350px;
    background: #cfd0ec;
    bottom: -80px; right: -90px;
}

.ultu-ia-dot-grid {
    position: fixed;
    pointer-events: none;
    z-index: 0;
    opacity: 0.35;
}
.ultu-ia-dot-grid--tl { top: 90px;  left: 70px; }
.ultu-ia-dot-grid--bl { bottom: 90px; left: 70px; }
.ultu-ia-dot-grid--tr { top: 90px;  right: 60px; }

/* ──────────────────────────────────────────
   CARD / CONTENEDOR CENTRAL DEL LOGIN
────────────────────────────────────────── */
#divCentral {
    position: relative;
    z-index: 1;
    width: 100%;
    max-width: 480px;
    padding: 24px 16px;
}

.ultu-ia-login-card {
    background: #ffffff;
    border-radius: var(--ultu-radius-card);
    padding: 48px 44px 36px;
    box-shadow: var(--ultu-shadow-xl);
}

/* ── Logo ── */
.ultu-ia-login-logo { text-align: center; margin-bottom: 32px; }
#logoSistema  { max-width: 200px; height: auto; }

/* ── Títulos ── */
.ultu-ia-login-title {
    text-align: center;
    font-size: 1.70rem;
    font-weight: 700;
    color: var(--ultu-text-base);
    margin-bottom: 8px;
    letter-spacing: -0.3px;
    line-height: 1.25;
}
.ultu-ia-login-title span { color: var(--ultu-color-primary); }

.ultu-ia-login-subtitle {
    text-align: center;
    color: var(--ultu-text-subtle);
    font-size: 0.92rem;
    line-height: 1.65;
    margin-bottom: 28px;
}

/* ──────────────────────────────────────────
   INPUTS DEL LOGIN
────────────────────────────────────────── */
.ultu-ia-input-wrap {
    position: relative;
    margin-bottom: 14px;
}

.ultu-ia-input-wrap .ico-left {
    position: absolute;
    left: 15px;
    top: 50%;
    transform: translateY(-50%);
    color: var(--ultu-text-faint);
    pointer-events: none;
    display: flex;
}

.ultu-ia-input-wrap input[type="text"],
.ultu-ia-input-wrap input[type="password"] {
    width: 100%;
    padding: 13px 44px 13px 44px;
    border: 1.5px solid #e6e8f4;
    border-radius: var(--ultu-radius-md);
    background: var(--ultu-surface);
    font-size: 0.94rem;
    font-family: inherit;
    color: var(--ultu-text-base);
    outline: none;
    transition: border-color .2s, box-shadow .2s, background .2s;
}

.ultu-ia-input-wrap input::placeholder { color: var(--ultu-text-placeholder); }

.ultu-ia-input-wrap input:focus {
    border-color: var(--ultu-color-primary);
    background: #fff;
    box-shadow: var(--ultu-shadow-focus);
}

/* ── Toggle ojo contraseña ── */
.ultu-ia-btn-eye {
    position: absolute;
    right: 13px;
    top: 50%;
    transform: translateY(-50%);
    background: none;
    border: none;
    cursor: pointer;
    color: var(--ultu-text-faint);
    padding: 4px;
    line-height: 0;
    transition: color .2s;
}
.ultu-ia-btn-eye:hover { color: var(--ultu-color-primary); }

/* ──────────────────────────────────────────
   BOTONES DEL LOGIN
────────────────────────────────────────── */

/* Primario — acción principal */
.ultu-ia-btn-login {
    width: 100%;
    padding: 14px 20px;
    background: var(--ultu-gradient-primary);
    color: #fff;
    border: none;
    border-radius: var(--ultu-radius-md);
    font-size: 1rem;
    font-weight: 600;
    font-family: inherit;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
    letter-spacing: 0.2px;
    box-shadow: var(--ultu-shadow-btn-hero);
    transition: transform .15s, box-shadow .2s;
}
.ultu-ia-btn-login:hover {
    transform: translateY(-1px);
    box-shadow: var(--ultu-shadow-btn-hero-hover);
}
.ultu-ia-btn-login:active { transform: translateY(0); }

/* Secundario — acción de retroceso */
.ultu-ia-btn-back {
    padding: 12px 20px;
    background: var(--ultu-surface-hover);
    color: var(--ultu-text-muted);
    border: none;
    border-radius: 10px;
    font-size: 0.9rem;
    font-weight: 500;
    font-family: inherit;
    cursor: pointer;
    transition: background .2s;
}
.ultu-ia-btn-back:hover { background: #e4e6f4; }

/* Recuperar contraseña */
.ultu-ia-btn-recover {
    flex: 1;
    padding: 12px;
    background: var(--ultu-gradient-primary);
    color: #fff;
    border: none;
    border-radius: 10px;
    font-size: 0.9rem;
    font-weight: 600;
    font-family: inherit;
    cursor: pointer;
    box-shadow: var(--ultu-shadow-btn);
    transition: transform .15s;
}
.ultu-ia-btn-recover:hover { transform: translateY(-1px); }

/* Cerrar mensaje */
.ultu-ia-btn-msg-close {
    padding: 11px 24px;
    background: var(--ultu-gradient-primary);
    color: #fff;
    border: none;
    border-radius: 10px;
    font-size: 0.9rem;
    font-weight: 600;
    font-family: inherit;
    cursor: pointer;
    box-shadow: var(--ultu-shadow-btn);
}

/* Confirmación Sí */
.ultu-ia-btn-conf-yes {
    padding: 11px 24px;
    background: var(--ultu-gradient-primary);
    color: #fff;
    border: none;
    border-radius: 10px;
    font-size: 0.9rem;
    font-weight: 600;
    font-family: inherit;
    cursor: pointer;
    box-shadow: var(--ultu-shadow-btn);
}

/* Confirmación No */
.ultu-ia-btn-conf-no {
    padding: 11px 24px;
    background: var(--ultu-surface-hover);
    color: var(--ultu-text-muted);
    border: none;
    border-radius: 10px;
    font-size: 0.9rem;
    font-weight: 500;
    font-family: inherit;
    cursor: pointer;
}

/* ──────────────────────────────────────────
   FILA DE OPCIONES (olvidé contraseña / recordarme) LOGIN
────────────────────────────────────────── */
.ultu-ia-row-options {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin: 6px 0 22px;
}

.ultu-ia-link-forgot {
    color: var(--ultu-color-primary);
    font-size: 0.84rem;
    font-weight: 500;
    cursor: pointer;
    text-decoration: none;
    transition: opacity .2s;
}
.ultu-ia-link-forgot:hover { opacity: 0.7; }

.ultu-ia-remember-label {
    display: flex;
    align-items: center;
    gap: 7px;
    font-size: 0.84rem;
    color: var(--ultu-text-muted);
    cursor: pointer;
    user-select: none;
}
.ultu-ia-remember-label input[type="checkbox"] {
    width: 15px;
    height: 15px;
    accent-color: var(--ultu-color-primary);
    cursor: pointer;
}

/* ──────────────────────────────────────────
   FORMULARIO RECUPERAR CONTRASEÑA LOGIN
────────────────────────────────────────── */
.ultu-ia-recover-note {
    background: #f3f3fb;
    border-left: 3px solid var(--ultu-color-primary);
    border-radius: var(--ultu-radius-sm);
    padding: 12px 16px;
    font-size: 0.875rem;
    color: var(--ultu-text-muted);
    line-height: 1.55;
    margin-bottom: 18px;
}

.ultu-ia-recover-actions {
    display: flex;
    gap: 10px;
    margin-top: 6px;
}

/* ──────────────────────────────────────────
   PANELES DE MENSAJE Y CONFIRMACIÓN LOGIN
────────────────────────────────────────── */
.ultu-ia-msg-box {
    background: var(--ultu-surface);
    border-radius: var(--ultu-radius-md);
    padding: 18px 20px;
    margin-bottom: 18px;
    font-size: 0.94rem;
    color: var(--ultu-text-base);
    line-height: 1.6;
}

.ultu-ia-msg-actions {
    display: flex;
    justify-content: flex-end;
    gap: 10px;
}


/* ──────────────────────────────────────────
   DIVISOR Y FOOTER
────────────────────────────────────────── */
.ultu-ia-card-divider {
    display: flex;
    align-items: center;
    gap: 12px;
    margin: 28px 0 18px;
    color: #c8cad8;
    font-size: 0.7rem;
    letter-spacing: 1.4px;
    text-transform: uppercase;
}
.ultu-ia-card-divider::before,
.ultu-ia-card-divider::after {
    content: '';
    flex: 1;
    height: 1px;
    background: var(--ultu-border);
}

.ultu-ia-card-footer { text-align: center; }
#logoKimn    { max-width: 110px; height: auto; opacity: 0.72; }
.ultu-ia-copyright { margin-top: 10px; font-size: 0.77rem; color: var(--ultu-text-dim); }

/* ──────────────────────────────────────────
   RESPONSIVE
────────────────────────────────────────── */
@media (max-width: 520px) {
    .ultu-ia-login-card  { padding: 36px 24px 28px; border-radius: 20px; }
    .ultu-ia-login-title { font-size: 1.45rem; }
}

@media (max-width: 360px) {
    .ultu-ia-login-card    { padding: 28px 16px 22px; }
    .ultu-ia-row-options   { flex-direction: column; align-items: flex-start; gap: 10px; }
}


/* ======================================================================
   PART 6 -- MI PERFIL
   Datos del usuario autenticado. Prefijo BEM: p_miPerfil-
   ====================================================================== */

/* ══════════════════════════════════════════════════════════════
   MI PERFIL — Pantalla de datos del usuario autenticado
   Prefijo BEM: p_miPerfil-
   Autocontenido: sin dependencias de estilos.css ni de ningún
   otro archivo CSS. Todas las referencias usan variables :root.
   Linea de inicio: 1425
══════════════════════════════════════════════════════════════ */

/* ──────────────────────────────────────────
   WRAPPER PRINCIPAL DE PÁGINA
────────────────────────────────────────── */
.p_miPerfil_wrapper {
    padding: 0 0 24px;
    max-width: 1080px;
    display: flex;
    flex-direction: column;
    gap: 22px;
}

/* ──────────────────────────────────────────
   HERO BANNER — Avatar + nombre + rol
────────────────────────────────────────── */
.p_miPerfil-hero {
    background: var(--ultu-gradient-global-grid);
    border-radius: var(--ultu-radius-card);
    border: 1.5px solid var(--ultu-border-global-grid);
    box-shadow: var(--ultu-shadow-md);
    padding: 18px 28px;
    display: flex;
    align-items: center;
    gap: 24px;
    position: relative;
    overflow: hidden;
}

/* Banda de acento izquierda */
.p_miPerfil-hero::before {
    content: '';
    position: absolute;
    left: 0; top: 0; bottom: 0;
    width: 4px;
    background: var(--ultu-gradient-primary);
    border-radius: 4px 0 0 4px;
}

/* Blob decorativo de fondo */
.p_miPerfil-hero::after {
    content: '';
    position: absolute;
    right: -70px; top: -70px;
    width: 260px; height: 260px;
    background: radial-gradient(
        circle,
        rgba(var(--ultu-color-primary-rgb), 0.055) 0%,
        transparent 68%
    );
    pointer-events: none;
}

/* Círculo de avatar con gradiente primario */
.p_miPerfil-avatar {
    width: 70px;
    height: 70px;
    border-radius: 50%;
    background: var(--ultu-gradient-primary);
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    color: #ffffff;
    box-shadow:
        0 8px 24px rgba(var(--ultu-color-primary-rgb), 0.34),
        0 2px 6px rgba(0, 0, 0, 0.10);
}

/* Info textual del hero */
.p_miPerfil-hero-info {
    display: flex;
    flex-direction: column;
    gap: 5px;
    min-width: 0;
    flex: 1;
}

.p_miPerfil-hero-name {
    font-size: 1.28rem;
    font-weight: 700;
    color: var(--ultu-text-base);
    letter-spacing: -0.2px;
    line-height: 1.25;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.p_miPerfil-hero-role {
    font-size: 0.84rem;
    font-weight: 500;
    color: var(--ultu-text-muted);
    line-height: 1.3;
}

/* Chip con handle de login */
.p_miPerfil-hero-login {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    font-size: 0.76rem;
    font-weight: 600;
    color: var(--ultu-color-primary);
    background: var(--ultu-primary-tint);
    padding: 3px 11px 3px 9px;
    border-radius: 20px;
    width: fit-content;
    margin-top: 3px;
    letter-spacing: 0.1px;
    border: 1px solid rgba(var(--ultu-color-primary-rgb), 0.18);
}

/* ──────────────────────────────────────────
   GRID DE DOS COLUMNAS PARA LAS TARJETAS
   Columna izquierda más ancha (datos personales)
   Columna derecha más angosta (cambiar contraseña)
────────────────────────────────────────── */
.p_miPerfil-cards-grid {
    display: grid;
    grid-template-columns: 1fr 400px;
    gap: 20px;
    align-items: start;
}

/* ──────────────────────────────────────────
   TARJETA BASE
────────────────────────────────────────── */
.p_miPerfil-card {
    background: var(--ultu-gradient-global-grid);
    border-radius: var(--ultu-radius-lg);
    border: 1.5px solid var(--ultu-border-global-grid);
    box-shadow: var(--ultu-shadow-md);
    overflow: hidden;
    display: flex;
    flex-direction: column;
}

/* Encabezado de tarjeta con gradiente primario */
.p_miPerfil-card-header {
    display: flex;
    align-items: center;
    gap: 11px;
    padding: 12px 22px;
    background: var(--ultu-gradient-primary);
    flex-shrink: 0;
}

.p_miPerfil-card-icon {
    display: flex;
    align-items: center;
    justify-content: center;
    color: rgba(255, 255, 255, 0.90);
    flex-shrink: 0;
    line-height: 0;
}

.p_miPerfil-card-title {
    font-size: 14px;
    font-weight: 700;
    color: #ffffff;
    letter-spacing: 0.25px;
}

/* Cuerpo de la tarjeta */
.p_miPerfil-card-body {
    padding: 24px 24px 20px;
    display: flex;
    flex-direction: column;
    gap: 18px;
    flex: 1;
}

/* ──────────────────────────────────────────
   ETIQUETA DE SUBSECCIÓN INTERNA
────────────────────────────────────────── */
.p_miPerfil-section-label {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 0.70rem;
    font-weight: 700;
    color: var(--ultu-text-subtle);
    letter-spacing: 0.9px;
    text-transform: uppercase;
}

.p_miPerfil-section-label-icon {
    display: inline-flex;
    align-items: center;
    color: var(--ultu-color-primary);
    opacity: 0.75;
    line-height: 0;
}

/* Línea extensible a la derecha de la etiqueta */
.p_miPerfil-section-label::after {
    content: '';
    flex: 1;
    height: 1px;
    background: var(--ultu-text-subtle);
}

/* ──────────────────────────────────────────
   GRID DE CAMPOS DEL FORMULARIO
────────────────────────────────────────── */
.p_miPerfil-form-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 14px 20px;
}

/* Campo que ocupa el ancho completo del grid */
.p_miPerfil-field--full {
    grid-column: 1 / -1;
}

/* ── Campo individual: label flotante + input ── */
.p_miPerfil-field {
    display: flex;
    flex-direction: column;
}

/* Etiqueta del campo */
.p_miPerfil-label {
    display: flex;
    align-items: center;
    gap: 5px;
    font-size: 11px;
    font-weight: 600;
    color: var(--ultu-text-muted);
    letter-spacing: 0.35px;
    text-transform: uppercase;
}

.p_miPerfil-label-icon {
    display: inline-flex;
    align-items: center;
    color: var(--ultu-color-primary);
    opacity: 0.65;
    line-height: 0;
}

/* ──────────────────────────────────────────
   CHIP "Solo lectura"
────────────────────────────────────────── */
.p_miPerfil-badge-locked {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    font-size: 9px;
    font-weight: 700;
    color: var(--ultu-text-faint);
    background: var(--ultu-surface);
    border: 1px solid var(--ultu-border);
    padding: 0px 4px;
    border-radius: 20px;
    letter-spacing: 0.4px;
    text-transform: uppercase;
    margin-left: auto;
}

/* ──────────────────────────────────────────
   FILA DE BOTONES DE ACCIÓN
────────────────────────────────────────── */
.p_miPerfil-actions {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 10px;
    padding-top: 10px;
    border-top: 1px solid var(--ultu-border-global-grid);
}


/* ──────────────────────────────────────────
   RESPONSIVE DE MI PERFIL
────────────────────────────────────────── */

/* Tablets — apilar las dos tarjetas verticalmente */
@media (max-width: 920px) {
    .p_miPerfil-cards-grid {
        grid-template-columns: 1fr;
    }
}

/* Móvil — ajustes de espacio y grid de campos a 1 col */
@media (max-width: 600px) {
    .p_miPerfil-card-body {
        padding: 18px 16px 16px;
    }

    .p_miPerfil-form-grid {
        grid-template-columns: 1fr;
    }

    .p_miPerfil-field--full {
        grid-column: 1;
    }
}


/* ======================================================================
   PART 7 -- ADMINISTRACION
   Panel de administracion. Prefijo BEM: p_administracion_
   ====================================================================== */

/* ══════════════════════════════════════════════════════════════
    PANEL DE ADMINISTRACIÓN — p_administracion_*
══════════════════════════════════════════════════════════════ */

.p_administracion_wrapper {
    padding: 0 0 24px;
    font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
}

.p_administracion_grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(370px, 1fr));
    gap: 18px;
}

.p_administracion_card {
    background: var(--ultu-card-header-bg);
    border: 1px solid var(--ultu-border-global-grid);
    border-left: 3px solid var(--ultu-color-primary);
    border-radius: var(--ultu-radius-lg);
    box-shadow: var(--ultu-shadow-md);
    overflow: hidden;
    display: flex;
    flex-direction: column;
}

.p_administracion_card-header {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 12px 22px;
    background: var(--ultu-gradient-primary);
    border-bottom: none;
}

.p_administracion_card-icon {
    display: flex;
    align-items: center;
    justify-content: center;
    color: #ffffff;
    flex-shrink: 0;
}

.p_administracion_card-title {
    font-size: 14px;
    font-weight: 700;
    line-height: 1.3;
    color: #ffffff;
}

.p_administracion_card-body {
    padding: 8px;
    display: flex;
    flex-direction: column;
    flex: 1;
}

.p_administracion_link {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    padding: 5px 12px;
    border-radius: 8px;
    color: var(--ultu-text-base);
    font-size: 13px;
    font-weight: 500;
    text-decoration: none;
    background: transparent;
    transition: background .2s ease, color .2s ease, transform .15s ease;
    cursor: pointer;
    line-height: 1.4;
}

.p_administracion_link::after {
    content: '';
    width: 7px;
    height: 7px;
    border-right: 2px solid currentColor;
    border-bottom: 2px solid currentColor;
    transform: rotate(-45deg);
    opacity: 0.38;
    flex-shrink: 0;
}

.p_administracion_link:hover {
    background: #f8f0ff;
    color: var(--ultu-color-primary-dark);
    transform: translateX(3px);
    text-decoration: none;
}

.p_administracion_link:hover::after {
    opacity: 0.8;
}

/* ======================================================================
   PART 7b -- DASHBOARD ULTU
   paginas/adm_dashboardUltu.php. Prefijo BEM: p_dashboardUltu__
   Rediseño visual (KPIs + donuts + área) sin tocar la obtención de datos:
   los canvas de Chart.js y la leyenda se siguen alimentando con los mismos
   arrays PHP ($keys_.../$valores_...) que ya calculaba la página.
   ====================================================================== */

.p_dashboardUltu__wrapper {
    display: flex;
    flex-direction: column;
    gap: 20px;
}

/* ── KPIs superiores ── */
.p_dashboardUltu__kpi-row {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 18px;
}

.p_dashboardUltu__kpi-card {
    position: relative;
    overflow: hidden;
    background: #ffffff;
    border: 1px solid var(--ultu-border-global-grid);
    border-radius: var(--ultu-radius-card);
    box-shadow: var(--ultu-shadow-md);
    padding: 20px 22px;
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.p_dashboardUltu__kpi-card::before {
    content: '';
    position: absolute;
    inset: 0 0 auto 0;
    height: 3px;
    background: var(--ultu-gradient-primary);
}

.p_dashboardUltu__kpi-top {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
}

.p_dashboardUltu__kpi-label {
    font-size: 12px;
    font-weight: 600;
    letter-spacing: .05em;
    text-transform: uppercase;
    color: var(--ultu-text-muted);
}

.p_dashboardUltu__kpi-icon {
    width: 36px;
    height: 36px;
    border-radius: 10px;
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    background: rgba(var(--ultu-color-primary-rgb), .12);
    color: var(--ultu-color-primary);
}

.p_dashboardUltu__kpi-value {
    font-size: 2.1rem;
    font-weight: 700;
    letter-spacing: -.02em;
    color: var(--ultu-text-base);
    font-variant-numeric: tabular-nums;
}

/* ── Grillas de tarjetas ── */
.p_dashboardUltu__grid-2 {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 18px;
}

.p_dashboardUltu__grid-3 {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 18px;
}

.p_dashboardUltu__card {
    background: #ffffff;
    border: 1px solid var(--ultu-border-global-grid);
    border-radius: var(--ultu-radius-card);
    box-shadow: var(--ultu-shadow-md);
    padding: 22px;
}

.p_dashboardUltu__card-title {
    display: block;
    font-size: 15px;
    font-weight: 700;
    color: var(--ultu-text-base);
    margin-bottom: 16px;
}

.p_dashboardUltu__card-title small {
    display: block;
    font-size: 12px;
    font-weight: 500;
    color: var(--ultu-text-subtle);
    margin-top: 2px;
}

/* ── Donut + leyenda ── */
.p_dashboardUltu__donut-wrap {
    display: flex;
    align-items: center;
    gap: 20px;
    flex-wrap: wrap;
}

.p_dashboardUltu__donut-canvas-box {
    position: relative;
    width: 168px;
    height: 168px;
    flex-shrink: 0;
}

.p_dashboardUltu__donut-canvas-box canvas {
    width: 100% !important;
    height: 100% !important;
}

.p_dashboardUltu__donut-center {
    position: absolute;
    inset: 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    text-align: center;
    pointer-events: none;
}

.p_dashboardUltu__donut-center-n {
    font-size: 1.3rem;
    font-weight: 700;
    color: var(--ultu-text-base);
    font-variant-numeric: tabular-nums;
}

.p_dashboardUltu__donut-center-l {
    font-size: .62rem;
    color: var(--ultu-text-subtle);
    text-transform: uppercase;
    letter-spacing: .05em;
}

.p_dashboardUltu__legend {
    display: flex;
    flex-direction: column;
    gap: 9px;
    flex: 1;
    min-width: 160px;
}

.p_dashboardUltu__legend-row {
    display: flex;
    align-items: center;
    gap: 9px;
    font-size: 13px;
}

.p_dashboardUltu__legend-dot {
    width: 9px;
    height: 9px;
    border-radius: 3px;
    flex-shrink: 0;
}

.p_dashboardUltu__legend-label {
    flex: 1;
    color: var(--ultu-text-base);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.p_dashboardUltu__legend-value {
    font-weight: 700;
    color: var(--ultu-text-base);
    font-variant-numeric: tabular-nums;
}

.p_dashboardUltu__legend-pct {
    width: 36px;
    text-align: right;
    font-size: 11px;
    color: var(--ultu-text-subtle);
    font-variant-numeric: tabular-nums;
}

/* ── Gráfico de área (pólizas por mes) ── */
.p_dashboardUltu__timechart-box {
    width: 100%;
    height: 240px;
}

/* ── Rankings ── */
.p_dashboardUltu__rank-list {
    display: flex;
    flex-direction: column;
    max-height: 280px;
    overflow-y: auto;
}

.p_dashboardUltu__rank-row {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 9px 2px;
    border-bottom: 1px solid var(--ultu-border);
}

.p_dashboardUltu__rank-row:last-child {
    border-bottom: none;
}

.p_dashboardUltu__rank-badge {
    width: 22px;
    height: 22px;
    border-radius: 7px;
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 11px;
    font-weight: 700;
    background: rgba(var(--ultu-color-primary-rgb), .12);
    color: var(--ultu-color-primary);
}

.p_dashboardUltu__rank-row:first-child .p_dashboardUltu__rank-badge {
    background: var(--ultu-color-primary);
    color: #ffffff;
}

.p_dashboardUltu__rank-name {
    flex: 1;
    font-size: 13px;
    font-weight: 600;
    color: var(--ultu-text-base);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.p_dashboardUltu__rank-meta {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    font-size: 11px;
    color: var(--ultu-text-subtle);
}

.p_dashboardUltu__rank-meta b {
    font-size: 13px;
    font-weight: 700;
    color: var(--ultu-text-base);
    font-variant-numeric: tabular-nums;
}

/* ── Estado vacío (sin datos) ── */
.p_dashboardUltu__empty {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 10px;
    padding: 40px 0;
    color: var(--ultu-text-subtle);
    font-size: 13px;
}

.p_dashboardUltu__empty img {
    width: 120px;
    opacity: .6;
}

@media (max-width: 900px) {
    .p_dashboardUltu__kpi-row,
    .p_dashboardUltu__grid-2,
    .p_dashboardUltu__grid-3 {
        grid-template-columns: 1fr;
    }
}


/* ======================================================================
   PART 8 -- CLIENTES
   Consulta de clientes. Prefijo BEM: p_clientes__
   ====================================================================== */

/* ============================================================
   p_clientes — PANTALLA DE CONSULTA
   Rediseño CSS Grid BEM. Variables reutilizadas de --ultu-*.
   Sin font-family propio (hereda de body).
   ============================================================ */

/* ── Neutralizar .divConsulta de estilos.css (deprecated) ── */
.divConsulta {
    position: relative !important;
    background-color: transparent !important;
    width: 100% !important;
    padding-bottom: 1em !important;
}

/* ── Contenedor del panel: ancho estable, breathing room lateral ── */
#pantallaConsulta {
    width: 100% !important;
    max-width: 100% !important;
    box-sizing: border-box;
}

/* ── Panel card: centrado a nivel del propio elemento ── */
.p_clientes__panel {
    background: var(--ultu-gradient-global-grid);
    border-radius: var(--ultu-radius-md);
    box-shadow: var(--ultu-shadow-sm);
    border: 1px solid var(--ultu-border-global-grid);
    overflow: hidden;
    max-width: 1080px;
}

/* ── Header del panel ── */
.p_clientes__panel-header {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 8px 14px;
    background: var(--ultu-gradient-primary);
}
.p_clientes__panel-header-title {
    font-size: 14px;
    font-weight: 600;
    color: #fff;
    flex: 1;
}
.p_clientes__panel-header-hint {
    font-size: 11px;
    color: rgba(255, 255, 255, .60);
}

/* ── Campo individual ── */
.p_clientes__field {
    display: flex;
    flex-direction: column;
    gap: 3px;
    min-width: 0;
}

/* ── Label ── */
.p_clientes__field-label {
    font-size: 11px;
    font-weight: 500;
    color: var(--ultu-text-muted);
    letter-spacing: .02em;
    text-transform: uppercase;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    user-select: none;
    line-height: 1.3;
}


/* ── Inline: Tipo + Nº Documento ── */
.p_clientes__field-inline {
    display: flex;
    gap: 5px;
    align-items: center;
}
.p_clientes__field-inline .input_global {
    flex: 1;
    min-width: 0;
}

/* ── Fecha + botón calendario ── */
.p_clientes__field-date {
    display: flex;
    gap: 4px;
    align-items: center;
}
.p_clientes__field-date .input_global {
    flex: 1;
}

/* ── Acciones (botones) ── */
.p_clientes__actions {
    display: flex;
    justify-content: flex-end;
    align-items: center;
    gap: 8px;
    padding: 8px 14px 12px;
    border-top: 1px solid var(--ultu-border);
    margin-top: 6px;
}
.p_clientes__btn {
    height: 28px;
    padding: 0 14px;
    font-size: 12px;
    font-family: inherit;
    font-weight: 600;
    border-radius: var(--ultu-radius-sm);
    border: 1.5px solid var(--ultu-border);
    cursor: pointer;
    transition: all .14s;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    outline: none;
    letter-spacing: .01em;
}
.p_clientes__btn--primary {
    background: var(--ultu-color-primary);
    color: #fff;
    border-color: var(--ultu-color-primary);
}
.p_clientes__btn--primary::before {
    content: '';
    display: block;
    width: 12px;
    height: 12px;
    flex-shrink: 0;
    -webkit-mask: var(--ultu-icon-search) center / contain no-repeat;
    mask:         var(--ultu-icon-search) center / contain no-repeat;
    background-color: #fff;
}
.p_clientes__btn--primary:hover {
    background: var(--ultu-color-primary-dark);
    border-color: var(--ultu-color-primary-dark);
    box-shadow: var(--ultu-shadow-btn-hover);
    transform: translateY(-1px);
}
.p_clientes__btn--ghost {
    background: transparent;
    color: var(--ultu-text-muted);
}
.p_clientes__btn--ghost:hover {
    background: var(--ultu-primary-tint);
    border-color: var(--ultu-primary-border-hover);
    color: var(--ultu-color-primary);
}

/* ── Override histórico de la vieja button.btnVioleta (ya eliminada de estilos.css) ── */
#pantallaConsulta button.p_clientes__btn--primary {
    background: var(--ultu-color-primary) !important;
    color: #fff !important;
    box-shadow: none !important;
}
#pantallaConsulta button.p_clientes__btn--primary:hover {
    background: var(--ultu-color-primary-dark) !important;
    box-shadow: var(--ultu-shadow-btn-hover) !important;
}

/* ── Neutralizar legacy de estilos.css dentro del scope ── */
#pantallaConsulta label { margin-bottom: 0; }

/* ── Barra de resultados: "Clientes y Prospectos" ── */
.barraGlobal {
    padding: 6px 0 8px;
}
.barraGlobal__main {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 8px;
}
.barraGlobal__left {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 8px;
}
.barraGlobal__titulo {
    font-size: 20px;
    font-weight: 500;
    color: var(--ultu-color-primary);
    white-space: nowrap;
}
.barraGlobal__actions {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 6px;
}
.barraGlobal__sort {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 6px;
}
.barraGlobal__sort-label {
    font-size: 11px;
    font-weight: 600;
    color: var(--ultu-text-muted);
    text-transform: uppercase;
    letter-spacing: .06em;
    white-space: nowrap;
}
.barraGlobal__filter {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 6px;
    margin-top: 6px;
}
.barraGlobal select {
    height: 23px;
    padding: 0 22px 0 7px;
    font-size: 12px;
    font-family: inherit;
    color: var(--ultu-text-base);
    background: var(--ultu-surface);
    border: 1.5px solid var(--ultu-border);
    border-radius: var(--ultu-radius-sm);
    outline: none;
    cursor: pointer;
    appearance: none;
    -webkit-appearance: none;
    background-image: var(--ultu-icon-chevron-down);
    background-repeat: no-repeat;
    background-position: right 6px center;
    background-size: 13px;
    transition: border-color .15s;
    box-sizing: border-box;
}
.barraGlobal select:focus {
    border-color: var(--ultu-primary-border-hover);
}

/* ── Ocultar barra en pantalla de búsqueda ── */
#ocultarSolapas ~ .barraGlobal { display: none; }
#pantallaConsulta .fondo {
    background: transparent;
    border: 0;
    padding: 0;
    width: auto;
}
#pantallaConsulta .FilaFormularioEtiquetaDato {
    all: unset;
}


/* ======================================================================
   PART 9 -- PRESUPUESTOS
   (pendiente -- aun no existe en el proyecto)
   ====================================================================== */
/* placeholder -- agregar aqui los estilos de p_presupuestos */

/* ======================================================================
   PART 10 -- PÓLIZAS — pol_polizasConsulta
   ====================================================================== */

/* ──────────────────────────────────────────
   MULTISELECT GLOBAL — input_globalMultiSelect
   Listbox de selección múltiple para filtros de Estado.
   Usar con .panel_globalConsulta-field--full para ocupar todo el ancho.
   Ctrl+clic selecciona múltiples ítems.
────────────────────────────────────────── */
.input_globalMultiSelect {
    width: 100%;
    min-height: 120px;
    padding: 4px;
    font-size: 12px;
    color: var(--ultu-text-base);
    background: #fff;
    border: 1.5px solid var(--ultu-border);
    border-radius: var(--ultu-radius-sm);
    outline: none;
    box-sizing: border-box;
    overflow-y: auto;
    transition: border-color .15s, box-shadow .15s;
}
.input_globalMultiSelect:hover:not(:focus) {
    border-color: var(--ultu-primary-border-hover);
}
.input_globalMultiSelect:focus {
    border-color: var(--ultu-primary-border-hover);
    box-shadow: var(--ultu-shadow-focus);
}
.input_globalMultiSelect option {
    padding: 3px 8px;
    border-radius: 4px;
    font-size: 12px;
    cursor: pointer;
    transition: background .1s;
}
.input_globalMultiSelect option:hover {
    background: var(--ultu-primary-tint);
}
.input_globalMultiSelect option:checked {
    background: var(--ultu-color-primary);
    color: #fff;
}

/* ──────────────────────────────────────────
   MODIFICADORES DE CAMPO — panel_globalConsulta
────────────────────────────────────────── */

/* Campo que ocupa todo el ancho del grid */
.panel_globalConsulta-field--full {
    grid-column: 1 / -1;
}

/* Garantizar que oculto prevalece sobre display:flex — especificidad doble clase (0-2-0) gana */
.panel_globalConsulta-field.oculto,
.panel_globalConsulta-section-label.oculto {
    display: none;
}

/* Campo con checkbox inline (label + input en fila) */
.panel_globalConsulta-field--checkbox {
    flex-direction: row;
    align-items: center;
    gap: 8px;
    padding-top: 16px;
}
.panel_globalConsulta-field--checkbox .panel_globalConsulta-field-label {
    text-transform: none;
    font-size: 12px;
    font-weight: 400;
    color: var(--ultu-text-base);
    letter-spacing: 0;
    white-space: normal;
    cursor: pointer;
    order: 2;
}
.panel_globalConsulta-field--checkbox input[type="checkbox"] {
    order: 1;
    width: 15px;
    height: 15px;
    accent-color: var(--ultu-color-primary);
    cursor: pointer;
    flex-shrink: 0;
}
/* Checkbox deshabilitado: mismo criterio que inputs/selects — no debe
   verse como algo clickeable si todavia no esta disponible. El :has()
   en el wrapper permite tambien apagar el cursor "manito" del label,
   que por defecto queda en pointer sin importar el estado del checkbox. */
.panel_globalConsulta-field--checkbox input[type="checkbox"]:disabled {
    cursor: not-allowed;
    opacity: .5;
}
.panel_globalConsulta-field--checkbox:has(input[type="checkbox"]:disabled) {
    cursor: not-allowed;
}
.panel_globalConsulta-field--checkbox:has(input[type="checkbox"]:disabled) .panel_globalConsulta-field-label {
    cursor: not-allowed;
    color: var(--ultu-text-subtle);
}

/* ======================================================================
   PART 11 -- PÓLIZAS CONSULTA — panel_polizasConsulta
   Componente EXCLUSIVO de pol_polizasConsulta.php.
   No tiene max-width. Grid de 4 columnas con Estado siempre top-right.
   No interfiere en absoluto con panel_globalConsulta de presupuestos.
   ====================================================================== */

/* ── Tarjeta contenedora ── */
.panel_polizasConsulta {
    max-width: 1440px;
    background: var(--ultu-gradient-global-grid);
    border-radius: var(--ultu-radius-md);
    box-shadow: var(--ultu-shadow-sm);
    border: 1px solid var(--ultu-border-global-grid);
    overflow: hidden;
}

/* ── Header (mismo estilo visual que panel_globalConsulta) ── */
.panel_polizasConsulta-header {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 8px 14px;
    background: var(--ultu-gradient-primary);
}
.panel_polizasConsulta-header-title {
    font-size: 14px;
    font-weight: 600;
    color: #fff;
    flex: 1;
}

/* ── Grid: 4 columnas por defecto, sin restricción de ancho ── */
.panel_polizasConsulta-form-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 8px 12px;
    padding: 12px 14px 4px;
    align-items: start;  /* cada campo se alinea al tope de su fila */
}

/* ── Separador de sección — por defecto abarca todo el ancho ── */
.panel_polizasConsulta-section-label {
    grid-column: 1 / -1;
    font-size: 11px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .07em;
    color: var(--ultu-color-primary);
    padding: 3px 0 2px;
    border-bottom: 1.5px solid var(--ultu-primary-tint);
    margin-top: 4px;
}
.panel_polizasConsulta-section-label:first-child {
    margin-top: 0;
}

/*
  PÓLIZA label: NO ocupa la última columna (reservada para Estado).
  grid-column: 1 / 4 → cols 1, 2, 3  (la col 4 queda libre para Estado)
  Se redefine en cada breakpoint para respetar la columna variable de Estado.
*/
.panel_polizasConsulta-section-label--poliza {
    grid-column: 1 / 4;
}

/*
  ESTADO label: posicionamiento explícito → siempre en la última columna, fila 1.
  El algoritmo de auto-placement del grid lo excluye de la zona de auto-place,
  por eso los campos de Póliza (que sí auto-place) evitan esa celda naturalmente.
*/
.panel_polizasConsulta-section-label--estado {
    grid-column: 4;
    grid-row: 1;
    margin-top: 0;
}

/*
  ESTADO field: posicionamiento explícito → última columna, filas 2-5.
  Cálculo: 10 campos de Póliza / 3 cols = ⌈10/3⌉ = 4 filas (filas 2, 3, 4, 5).
  align-self: stretch → ocupa toda la altura del rango de filas que abarca.
*/
.panel_polizasConsulta-field--estado {
    grid-column: 4;
    grid-row: 2 / 6;
    align-self: stretch;
    display: flex;
    flex-direction: column;
    gap: 4px;
}
/* El multiselect crece para llenar toda la altura disponible del campo */
.panel_polizasConsulta-field--estado .input_globalMultiSelect {
    flex: 1;
    min-height: 100px;
    max-height: 210px;
    height: 100%;
}
/* Texto de ayuda: pequeño, itálico, no uppercase */
.panel_polizasConsulta-estado-hint {
    font-size: 10px;
    color: var(--ultu-text-subtle);
    font-style: italic;
    user-select: none;
    line-height: 1.3;
}


/* ── Acciones (botones) ── */
.panel_polizasConsulta-actions {
    display: flex;
    justify-content: flex-end;
    align-items: center;
    gap: 8px;
    padding: 8px 14px 12px;
    border-top: 1px solid var(--ultu-border);
    margin-top: 6px;
}


/* Oculto en section-labels: especificidad 0-2-0 garantiza que display:none prevalece. */
.panel_polizasConsulta-section-label.oculto {
    display: none;
}

/* ======================================================
   RESPONSIVE — panel_polizasConsulta
   Breakpoints calculados por cantidad de columnas totales:
   4 cols (default) → 3 cols (≤960px) → 2 cols (≤720px) → 1 col (≤480px)
   En cada salto se recalcula:
   · grid-template-columns
   · grid-column del label --poliza  (deja libre la última col para Estado)
   · grid-column y grid-row del label --estado y del field --estado
   ====================================================== */

/* ── 3 columnas totales: Estado en col 3, campos de Póliza en cols 1-2 ──
   Póliza: 10 campos / 2 cols por fila = ⌈10/2⌉ = 5 filas → Estado filas 2-6
*/
@media (max-width: 960px) {
    .panel_polizasConsulta-form-grid {
        grid-template-columns: repeat(3, 1fr);
    }
    .panel_polizasConsulta-section-label--poliza {
        grid-column: 1 / 3;
    }
    .panel_polizasConsulta-section-label--estado {
        grid-column: 3;
        grid-row: 1;
    }
    .panel_polizasConsulta-field--estado {
        grid-column: 3;
        grid-row: 2 / 7;
    }
}

/* ── 2 columnas totales: Estado en col 2, campos de Póliza solo en col 1 ──
   Póliza: 10 campos en 1 col = 10 filas → Estado filas 2-11
*/
@media (max-width: 720px) {
    .panel_polizasConsulta-form-grid {
        grid-template-columns: repeat(2, 1fr);
    }
    .panel_polizasConsulta-section-label--poliza {
        grid-column: 1 / 2;
    }
    .panel_polizasConsulta-section-label--estado {
        grid-column: 2;
        grid-row: 1;
    }
    .panel_polizasConsulta-field--estado {
        grid-column: 2;
        grid-row: 2 / 12;
    }
}

/* ── 1 columna: flujo DOM natural ──
   Estado aparece 2º en orden vertical, justo después del label "PÓLIZA"
   (es el 2º elemento en el DOM dentro del grid).
   Se cancelan el posicionamiento explícito y el stretch de fila.
*/
@media (max-width: 480px) {
    .panel_polizasConsulta-form-grid {
        grid-template-columns: 1fr;
    }
    .panel_polizasConsulta-section-label--poliza {
        grid-column: 1 / -1;
    }
    .panel_polizasConsulta-section-label--estado {
        grid-column: 1 / -1;
        grid-row: auto;
    }
    .panel_polizasConsulta-field--estado {
        grid-column: 1 / -1;
        grid-row: auto;
        align-self: auto;
    }
    .panel_polizasConsulta-field--estado .input_globalMultiSelect {
        flex: none;
        height: auto;
        min-height: 120px;
    }
}

/* ======================================================================
   PART 8b -- CLIENTES: FORMULARIO DE ALTA/EDICIÓN — form_globalFieldset
   Componente reutilizable para pantallas de ALTA/EDICION de un registro
   completo (Nuevo/Editar Cliente, etc.). A diferencia de panel_globalConsulta
   (paneles de búsqueda/filtro con header en violeta), este conserva la
   esencia de <fieldset><legend> pero modernizado: marco con título apoyado
   sobre el borde, sin header tipo card. Los campos dentro del grid
   reutilizan panel_globalConsulta-field / -field-label / -field--full /
   --checkbox (ya existentes más arriba en este archivo).
   Origen: rediseño de paginas/cli_clientesDetalleEditar.php.
   ====================================================================== */

/* Envoltorio exterior: fondo --ultu-global-surface + bordes redondeados.
   Recibe del fondo blanco de la página y separa visualmente cada bloque
   del formulario (Datos Principales, Direcciones, Teléfonos, etc). */
.form_globalFieldsetContainer {
    background: var(--ultu-global-surface);
    border-radius: calc(var(--ultu-radius-md) + 6px);
    box-shadow: var(--ultu-shadow-sm);
    padding: 10px;
    margin: 0 0 20px;
    max-width: 1080px;
}

/* Fieldset real dentro del contenedor: bordes redondeados propios,
   fondo transparente (hereda el --ultu-global-surface del contenedor).
   Se mantiene <fieldset>/<legend> real por accesibilidad; solo se
   modernizan el borde, el radio y la tipografía de la leyenda. */
fieldset.form_globalFieldset {
    margin: 0;
    padding: 6px 16px 16px;
    background: transparent;
    border: 1.5px solid var(--ultu-text-placeholder);
    border-radius: var(--ultu-radius-md);
}

.form_globalFieldset-legend {
    padding: 0 8px;
    font-size: 13px;
    font-weight: 700;
    color: var(--ultu-color-primary);
    text-transform: uppercase;
    letter-spacing: .05em;
}

/* Grid de 3 columnas → colapsa a 2 y luego 1 en pantallas chicas. */
.form_globalFieldset-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 10px 20px;
    padding-top: 8px;
}
@media (max-width: 900px) {
    .form_globalFieldset-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 560px) {
    .form_globalFieldset-grid { grid-template-columns: 1fr; }
}

/* Fila para agrupar checkboxes en una sola línea, centrados. */
.form_globalFieldset-checkbox-row {
    grid-column: 1 / -1;
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: 10px 28px;
    padding-top: 4px;
}

/* Barra de acciones (Nuevo/Editar/Borrar, Agregar/Cancelar) dentro de
   un fieldset. Reemplaza el viejo .divBotones agregando gap consistente
   entre botones btn_globalWhite. */
.form_globalFieldset-toolbar {
    display: flex;
    justify-content: flex-end;
    gap: 8px;
    margin-bottom: 10px;
}

/* Layout de 2 columnas para colocar 2 contenedores lado a lado (ej.
   Teléfonos + Mails), apilados en 1 columna en pantallas chicas. */
.form_globalFieldset-pair {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 20px;
    max-width: 1080px;
    margin: 0 0 20px;
}
@media (max-width: 720px) {
    .form_globalFieldset-pair { grid-template-columns: 1fr; }
}
.form_globalFieldset-pair .form_globalFieldsetContainer {
    max-width: none;
    margin-bottom: 0;
}

/* Acciones finales del formulario (Guardar/Cancelar), fuera de cualquier
   fieldset. Se centran DENTRO del ancho del formulario (1080px), no de
   toda la pantalla — reemplaza el viejo <div align="center"> sin tope
   de ancho, que quedaba desfasado respecto al resto del contenido
   (que arranca a la izquierda, sin margin:auto, como .p_miPerfil_wrapper). */
.form_globalFieldset-finalActions {
    display: flex;
    justify-content: center;
    gap: 8px;
    max-width: 1080px;
}

/* Separador sutil entre grupos de campos dentro del mismo fieldset
   (ej. después de Alias, después de Profesión). Ocupa todo el ancho
   del grid; se atenúa en los extremos para que no toque los bordes. */
.form_globalDivider {
    grid-column: 1 / -1;
    height: 1px;
    border: none;
    margin: 10px 0;
    background: linear-gradient(90deg, transparent, var(--ultu-border-global-grid) 12%, var(--ultu-border-global-grid) 88%, transparent);
}

/* ──────────────────────────────────────────
   TEXTAREA GLOBAL — input_globalTextarea
   Mismo lenguaje visual que input_global (borde, radio, foco), pero
   con altura propia y resize vertical. Usar en cualquier <textarea>
   del sistema (ej. Comentario, Aclaración).
────────────────────────────────────────── */
.input_globalTextarea {
    width: 100%;
    min-height: 70px;
    padding: 8px 10px;
    font-size: 12px;
    font-family: inherit;
    color: var(--ultu-text-base);
    background: #fff;
    border: 1.5px solid var(--ultu-border);
    border-radius: var(--ultu-radius-sm);
    outline: none;
    box-sizing: border-box;
    resize: vertical;
    transition: border-color .15s, box-shadow .15s, background .15s;
}
.input_globalTextarea::placeholder {
    color: var(--ultu-text-placeholder);
}
.input_globalTextarea:hover:not(:focus) {
    border-color: var(--ultu-primary-border-hover);
}
.input_globalTextarea:focus {
    border-color: var(--ultu-primary-border-hover);
    box-shadow: var(--ultu-shadow-focus);
    background: #fff;
}
.input_globalTextarea:disabled,
.input_globalTextarea[disabled] {
    background: var(--ultu-card-header-bg);
    color: var(--ultu-text-subtle);
    border-color: var(--ultu-border);
    cursor: not-allowed;
    opacity: 1;
    resize: none;
}

/* ──────────────────────────────────────────
   CAMPOS OBLIGATORIOS — is-required / :required
   Modernización del asterisco (antes color:red literal en estilos.css,
   ahora token --ultu-color-danger). Override intencional: misma
   especificidad que la regla vieja, gana por orden de carga (ultu.css
   despues de estilos.css).
   El borde tenue usa el atributo HTML nativo `required` + :invalid del
   navegador — cero JS. Es la capa "informativa" (todavia falta completar);
   el estado de error real post-intento-de-guardado queda para una
   iteracion futura que toque el feedback de validacion (hoy son
   popups via mensaje()).
────────────────────────────────────────── */
.is-required::after {
    content: "* ";
    margin-left: 3px;
    color: var(--ultu-color-danger);
    font-weight: bold;
}

.input_global:required:invalid,
.input_globalSelect:required:invalid,
select.FormularioDatosCombo:required:invalid {
    border-color: var(--ultu-color-danger-border);
}
.input_global:required:invalid:hover:not(:focus),
.input_globalSelect:required:invalid:hover:not(:focus),
select.FormularioDatosCombo:required:invalid:hover:not(:focus) {
    border-color: var(--ultu-color-danger);
}

/* Asterisco que aparece/desaparece segun el estado del campo (:has(), sin JS).
   Ya hay precedente de :has() en produccion en este mismo archivo
   (body:has(#ultu-ia-cabecera), .grilla-global td.GrillaPie ... :not(:has(a))).
   Degradacion prolija en navegadores viejos: el asterisco simplemente
   queda visible siempre, como estaba antes de esto — no rompe nada. */
.panel_globalConsulta-field:has(:required:valid) .is-required::after,
.panel_globalConsulta-field--full:has(:required:valid) .is-required::after {
    display: none;
}

/* ======================================================================
   MODAL DE SISTEMA — msgSistema
   Cartel de alerta/confirmacion GLOBAL (funcion mensaje() en js/utiles.js).
   No es exclusivo de ninguna pantalla: se usa en TODO el sistema. Cualquier
   ajuste aca impacta a todas las pantallas que llaman mensaje().
   Reemplaza los estilos legacy que vivian en estilos.css: #contMsgSistema,
   #msgSistema, #mostrarMensaje, y el borde violeta/fondo gris que
   #msgSistema compartia con .divFlotante/.popup (esas dos clases quedaron
   intactas en estilos.css, se les quito unicamente #msgSistema del selector).

   BUG DE POSICIONAMIENTO RESUELTO — antes mensaje() calculaba a mano
   "top = altura ventana/2 - altura cartel/2" y forzaba position:absolute
   por JS (pisando el position:fixed del CSS viejo). Absolute se mide desde
   el techo del DOCUMENTO, no de la pantalla — por eso el cartel aparecia
   arriba de todo si el usuario habia scrolleado. Con position:fixed +
   top/left 50% + transform(-50%,-50%) el centrado queda resuelto 100% en
   CSS, sin medir nada por JS, sin importar scroll ni largo de pagina.
   ====================================================================== */

/* ── Overlay: cubre el viewport completo. display:none/inline por defecto
   en un <div> es "block" (asi lo determina jQuery internamente al hacer
   fadeIn/fadeOut) — "block" alcanza y sobra aca, el centrado real lo hace
   #msgSistema con position:fixed propio, no depende de que el overlay
   sea flex. Con inset:0 cubre siempre el viewport exacto, sin necesidad
   de que JS mida document.height()/window.height() como hacia antes. ── */
#contMsgSistema {
    position: fixed;
    inset: 0;
    z-index: 51000;
    display: none;
}

/* ── Tarjeta ── */
#msgSistema {
    position: fixed;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: 360px;
    max-width: calc(100vw - 32px);
    max-height: calc(100vh - 32px);
    overflow: auto;
    background: var(--ultu-surface);
    border: 1.5px solid var(--ultu-color-primary);
    border-radius: var(--ultu-radius-lg);
    box-shadow: var(--ultu-shadow-lg);
    padding: 20px 22px;
    font-size: 13px;
    line-height: 1.5;
    color: var(--ultu-text-base);
}

/* ── Zona del mensaje ── */
#mostrarMensaje {
    max-height: 55vh;
    overflow-y: auto;
    overflow-x: hidden;
}

/* ── Fila de botones (Aceptar / Si / No), armada por JS en mensaje() ── */
#botonesMensaje {
    display: flex;
    justify-content: flex-end;
    align-items: center;
    gap: 8px;
    margin-top: 16px;
    padding-top: 14px;
    border-top: 1px solid var(--ultu-border);
}
/* El boton principal (Aceptar / Si) usa directamente p_clientes__btn +
   p_clientes__btn--primary (mismo boton violeta que "Consultar" en
   Clientes) — coherencia pedida explicitamente por el usuario, en vez de
   reinventar un violeta propio para msgSistema. El unico ajuste puntual
   es sacarle el icono de lupa (::before), que en p_clientes__btn--primary
   esta pensado para una accion de busqueda y no aplica semanticamente a
   un "Aceptar"/"Si" de confirmacion. */
#botonesMensaje .p_clientes__btn--primary::before {
    display: none;
}

