/* ======================================================================
   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;
    --ultu-color-white:         #FFFFFF;
    --ultu-color-link:          #4B5FD9;

    /* Textos */
    --ultu-text-base:        #1a1a1a;
    --ultu-text-strong:      #33303B;
    --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-neutral-border:   #D7D5E3;
    --ultu-card-header-bg:   #f5f5f5;
    --ultu-global-surface:   #ebecf2;
    --ultu-border-global-grid: #d7d8de;
    --ultu-overlay-bg:       rgba(26, 20, 46, 0.6);

    /* 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;
    --ultu-gradient-header-soft: linear-gradient(180deg, #d5cbf7, var(--ultu-primary-border-hover));

    /* 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");
    --ultu-icon-car-side:      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.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21.6 15.8V12.6C21.6 11.7 21 11 20.1 10.9L17.9 10.7L15.4 6.8C15.1 6.3 14.5 6 13.9 6H9.7C9 6 8.4 6.3 8 6.9L4.7 11.3C4.1 11.6 3.4 12.2 3.4 13.1V15.8'/%3E%3Cpath d='M5.5 10.7h12.4'/%3E%3Cpath d='M2.4 15.8h2.3'/%3E%3Cpath d='M4.7 15.8a2.5 2.5 0 0 1 5 0'/%3E%3Cpath d='M9.7 15.8h4.6'/%3E%3Cpath d='M14.3 15.8a2.5 2.5 0 0 1 5 0'/%3E%3Cpath d='M19.3 15.8h2.3'/%3E%3Ccircle cx='7.2' cy='15.9' r='1.8'/%3E%3Ccircle cx='16.8' cy='15.9' r='1.8'/%3E%3C/svg%3E");
    --ultu-icon-shield:        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='M12 22s8-4 8-11V5l-8-3-8 3v6c0 7 8 11 8 11z'/%3E%3C/svg%3E");
    --ultu-icon-percent:       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%3Cline x1='19' y1='5' x2='5' y2='19'/%3E%3Ccircle cx='6.5' cy='6.5' r='2.5'/%3E%3Ccircle cx='17.5' cy='17.5' r='2.5'/%3E%3C/svg%3E");
    --ultu-icon-message-circle: 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='M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z'/%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;
}

/* Scrollbar moderna global (mismos tokens que ya usan .grilla-global-wrap,
   .p_menuLateral__panel, el dashboard, etc.) — acá aplicada a toda la
   página en vez de a un contenedor puntual, para que el scroll principal
   del sistema deje de verse con la barra gris por defecto del navegador. */
html { scrollbar-width: thin; scrollbar-color: rgba(var(--ultu-color-primary-rgb), 0.25) var(--ultu-surface); }
html::-webkit-scrollbar { width: 8px; }
html::-webkit-scrollbar-track { background: var(--ultu-surface); }
html::-webkit-scrollbar-thumb {
    background: rgba(var(--ultu-color-primary-rgb), 0.25);
    border-radius: 4px;
}
html::-webkit-scrollbar-thumb:hover { background: rgba(var(--ultu-color-primary-rgb), 0.4); }

/* ======================================================================
   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 GLOBAL ICONO — btn_globalIconRefresh
   Botón icon-only circular para acciones de refresco dentro de tablas
   (ej. refrescar cotización por compañía en la grilla de resultados).
   Reemplaza el viejo .btnDegrade + <img src="imagenes/refresh.png">:
   mismo ícono SVG que ya usa el header (ultu-icon--refresh), color por
   token en vez de #60207E hardcodeado. El color lo hereda .ultu-icon
   vía currentColor.
────────────────────────────────────────── */
.btn_globalIconRefresh {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 24px;
    height: 24px;
    padding: 0;
    background: #fff;
    border: 1px solid #d4d6e8;
    border-radius: 50%;
    overflow: hidden;
    color: var(--ultu-text-faint);
    cursor: pointer;
    transition: color .2s ease, background .2s ease, border-color .2s ease;
}
.btn_globalIconRefresh:hover {
    color: var(--ultu-color-primary);
    background: var(--ultu-primary-tint);
    border-color: #a893f0;
}
.btn_globalIconRefresh:focus-visible {
    outline: 2px solid var(--ultu-color-primary);
    outline-offset: 2px;
}

/* ──────────────────────────────────────────
   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);
}

/* Botón "borrar fecha" — mismo molde cuadrado que btn_globalDate, para usar
   siempre junto a él (par calendario + borrar). Reemplaza el viejo
   <a><img src="cancelarFecha.gif"></a> por un botón real con ícono SVG
   (--ultu-icon-close) ya existente en el sistema de tokens. */
.btn_globalDateClear {
    width: 28px;
    height: 28px;
    flex-shrink: 0;
    border: 1.5px solid var(--ultu-border);
    border-radius: var(--ultu-radius-sm);
    background: var(--ultu-color-white);
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: border-color .15s, background .15s;
    outline: none;
    font-family: inherit;
}
.btn_globalDateClear::before {
    content: '';
    display: block;
    width: 12px;
    height: 12px;
    -webkit-mask: var(--ultu-icon-close) center / contain no-repeat;
    mask:         var(--ultu-icon-close) center / contain no-repeat;
    background-color: var(--ultu-color-danger);
}
.btn_globalDateClear:hover {
    background: var(--ultu-color-danger-bg);
    border-color: var(--ultu-color-danger);
}

/* ──────────────────────────────────────────
   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 {
    margin: 0;
    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);        }
.ultu-icon--car-side     { --ultu-icon-src: var(--ultu-icon-car-side);     }
.ultu-icon--shield       { --ultu-icon-src: var(--ultu-icon-shield);       }
.ultu-icon--percent      { --ultu-icon-src: var(--ultu-icon-percent);      }
.ultu-icon--message-circle { --ultu-icon-src: var(--ultu-icon-message-circle); }

/* ──────────────────────────────────────────
    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);
}

/* ── grillaValores: tabla legacy de las grillas comparativas de cotización
   (Auto, ART, presupuestos), migrada desde estilos.css. No usa el rediseño
   completo de .grilla-global, pero comparte el mismo .grilla-global-wrap
   como contenedor — necesita width:100% para no quedar pegada a la
   izquierda en pantallas anchas. ── */
.grillaValores {
    background-color: #FFFFFF;
    width: 100%;
}

/* ── Reparto de ancho de columnas dentro de .grillaValores (table-layout:
   auto, el default): primera columna (nombre de compañía) y última (botón
   de refresh) fijas al ancho de su contenido; el resto (celdas de precio,
   con width="95px"/"80" hardcodeado inline en el PHP) se liberan
   (width:auto) para que sean las que estiran y absorben el espacio
   sobrante del 100% de .grilla-global-wrap. Con table-layout:auto cada
   columna de precio sigue dimensionándose según su propio contenido
   (una celda con "216,918.00" será más ancha que una con "-"); no hay
   igualdad garantizada entre ellas, a cambio de que el ancho siga
   respondiendo al contenido real en vez de recortarlo (ver análisis de
   table-layout:fixed, descartado).
   .tituloCia y .btn_globalIconRefresh ya son clases estables presentes
   en los ~8 templates que generan esta tabla, por lo que no hace falta
   tocar el PHP. El único <td> sin clase (la esquina vacía rowspan="2"
   del header) no necesita regla propia: el ancho de columna lo terminan
   definiendo las celdas de datos, que son mayoría. ── */
.grillaValores td {
    width: auto;
}
.grillaValores td.tituloCia {
    width: 110px;
}

/* ── Espacio reservado para el logo chico de la compañía (24x24), a la
   izquierda del nombre. Ver clases/logosCias.php — mapeo manual por
   compañía. Si no hay logo mapeado, se devuelve un <span> vacío del
   mismo tamaño para que la fila mantenga la alineación igual que las
   demás. Por ahora solo conectado en el motor Auto. ── */
.tituloCia-logo {
    display: inline-block;
    width: 24px;
    height: 24px;
    margin-right: 6px;
    vertical-align: middle;
    object-fit: contain;
    border-radius: 3px;
}
.grillaValores td:has(.btn_globalIconRefresh) {
    width: 25px;
}

/* ── Espaciado del ícono de "sin cotización" (ultu-icon--close, ex
   error.png) SOLO cuando es hijo directo de un <td> de esta tabla —
   no toca el ícono en sí (mismo .ultu-icon--close que usa el botón
   Cancelar en adm_miPerfil.php), ni los usos en el texto de
   Aclaraciones (esos van dentro de un <div>, no directo en un <td>).
   Ensancha la columna cuando no hay dato numérico, evitando que quede
   más angosta que sus vecinas. ── */
#grillaValores td > .ultu-icon--close {
    margin: 0 20px;
}

/* ── Estados de selección de la grilla de cotización, migrados desde
   estilos.css (colores hardcodeados → tokens de ultu.css). Jerarquía
   visual: .celdaSelect es la cotización efectivamente elegida — el
   único estado "fuerte" (gradiente primario sólido + texto blanco,
   mismo lenguaje que los botones primarios del sistema). El resto son
   estados más suaves (tinte primario claro), en orden de intensidad:
   .ciaSelect (compañía en edición) > .fondoSelect (fila aceptada) =
   .tituloCia:hover/.tituloCobertura (pill de grupo) = .btnCuota .left:hover
   (preview al pasar el mouse). ── */
.fondoSelect {
    background-color: var(--ultu-primary-tint);
}

.btnCuota .left:hover {
    color: #fff;
    cursor: pointer;
    border-radius: 5px;
    background: var(--ultu-primary-border-hover);
}

.celdaSelect {
    color: #fff;
    cursor: pointer;
    border-radius: 5px;
    background: var(--ultu-gradient-primary);
    box-shadow: var(--ultu-shadow-btn);
}

.ciaSelect {
    color: var(--ultu-color-primary);
    cursor: pointer;
    border-radius: 5px;
    background: var(--ultu-primary-tint);
    box-shadow: inset 0 0 0 1.5px var(--ultu-primary-border-hover);
}

.tituloCia:hover {
    cursor: pointer;
    border-radius: 5px;
    background: var(--ultu-primary-tint);
}

.tituloCobertura {
    cursor: pointer;
    border-radius: 5px 5px 0 0;
    background: var(--ultu-gradient-header-soft);
}

/* ── 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;
}

/* ── comentDetalle: textarea de comentarios de class.detalle.php,
   migrado desde estilos.css (mismo dominio de pantallas "Detalle") ── */
.comentDetalle {
    min-height: 30px;
    width: 99%;
    padding: 2px 2px 2px 2px;
    background: var(--ultu-card-header-bg);
    border: 1px solid #999999;
    border-radius: 3px;
    font-size: 11px;
    color: #666666;
}

/* ── fondoT2: fondo idle de celdas en tablas comparativas de cotización
   (contrapartida de .fondoSelect, que queda en estilos.css), migrado
   desde estilos.css. Mismo token que los estados hover neutros del
   sistema (btn_globalCancel:hover, ultu-ia-btn-back). ── */
.fondoT2 {
    background-color: var(--ultu-surface-hover);
}


/* ======================================================================
   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-md);
    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: 8px 14px;
    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: 600;
    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-top {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
}

.p_dashboardUltu__kpi-label-group {
    display: flex;
    flex-direction: column;
    gap: 2px;
    min-width: 0;
}

.p_dashboardUltu__kpi-label {
    font-size: 12px;
    font-weight: 600;
    letter-spacing: .05em;
    text-transform: uppercase;
    color: var(--ultu-text-muted);
}

.p_dashboardUltu__kpi-hint {
    font-size: 10px;
    font-weight: 500;
    color: var(--ultu-text-faint);
    letter-spacing: normal;
    text-transform: none;
}

.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, minmax(0, 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;
}

/* Variante inline: aclaración a la derecha del título, misma línea (rankings).
   Selector compuesto (small + clase) a propósito: necesita más especificidad
   que ".p_dashboardUltu__card-title small" de arriba para poder pisar su
   "display: block" — con una sola clase, esa regla ganaba y el hint caía debajo. */
.p_dashboardUltu__card-title small.p_dashboardUltu__rank-title-hint {
    display: inline;
    font-size: 12px;
    font-weight: 500;
    color: var(--ultu-text-subtle);
    margin-top: 0;
    margin-left: 6px;
}

/* ── 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;
}

/* ── Barras verticales con scroll horizontal (Prima por compañía) ── */
.p_dashboardUltu__barchart-scroll-x {
    width: 100%;
    overflow-x: auto;
    overflow-y: hidden;
    scrollbar-width: thin;
    scrollbar-color: rgba(var(--ultu-color-primary-rgb), 0.25) var(--ultu-surface);
}

.p_dashboardUltu__barchart-scroll-x::-webkit-scrollbar { height: 6px; }
.p_dashboardUltu__barchart-scroll-x::-webkit-scrollbar-track { background: var(--ultu-surface); }
.p_dashboardUltu__barchart-scroll-x::-webkit-scrollbar-thumb {
    background: rgba(var(--ultu-color-primary-rgb), 0.25);
    border-radius: 3px;
}

.p_dashboardUltu__barchart-inner {
    width: 100%;
    height: 320px;
}


/* ── Rankings ── */
.p_dashboardUltu__rank-list {
    display: flex;
    flex-direction: column;
    max-height: 280px;
    overflow-y: auto;
    scrollbar-width: thin;
    scrollbar-color: rgba(var(--ultu-color-primary-rgb), 0.25) var(--ultu-surface);
}

.p_dashboardUltu__rank-list::-webkit-scrollbar { width: 4px; }
.p_dashboardUltu__rank-list::-webkit-scrollbar-track { background: var(--ultu-surface); }
.p_dashboardUltu__rank-list::-webkit-scrollbar-thumb {
    background: rgba(var(--ultu-color-primary-rgb), 0.25);
    border-radius: 2px;
}

.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;
    min-width: 0;
    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
   ====================================================================== */

/* ──────────────────────────────────────────
   POPOVER DE DETALLE DE COBERTURA — cobDetalle
   Tarjeta flotante que se abre al hacer click en el "+" (.masDetalle)
   junto a un valor cotizado, en las grillas de resultados de cotización
   (Auto, AP, General, ART, Sabana). Migrado desde estilos.css, donde
   compartía reglas con .destacado/.divGraficos/.menuEndoso/.cabGraficos
   — esas clases quedaron intactas allá con su estilo original, solo se
   les quitó ".cobDetalle"/".cobDetalle .tit"/".cobDetalle .cerrar" del
   selector compartido.
   Mismo lenguaje visual que panel_globalConsulta: header con degradado
   primario + card con sombra de elevación, en vez de la vieja tarjeta
   plana (borde #CCC + sombra gris + header gris con inset glow).
   El posicionamiento (top/left calculados en JS según el lado con más
   espacio libre en pantalla) NO se tocó — sigue igual en los 4 motores;
   acá solo se rediseña la piel visual. ── */
.cobDetalle {
    display: none;
    position: absolute;
    z-index: 2600;
    background: #fff;
    border-radius: var(--ultu-radius-md);
    box-shadow: var(--ultu-shadow-lg);
}

/* ── Header: mismo degradado primario que panel_globalConsulta-header ── */
.cobDetalle .tit {
    position: relative;
    z-index: 1;
    display: flex;
    align-items: center;
    gap: 8px;
    height: 20px;
    max-height: 20px;
    padding: 0 8px 0 12px;
    background: var(--ultu-gradient-primary);
    border-radius: var(--ultu-radius-md) var(--ultu-radius-md) 0 0;
}

/* Sin min-width:0 a propósito: así el flex item nunca se achica por
   debajo de su contenido (lo que forzaría el wrap a 2 líneas) — en
   cambio, .cobDetalle (auto-width por ser position:absolute) crece
   para contener siempre el título completo en una sola línea. */
.cobDetalle .titulo {
    float: none;
    flex: 1;
    white-space: nowrap;
    font-size: 12px;
    font-weight: 600;
    line-height: 20px;
    color: #fff;
}

/* ── Botón cerrar: círculo translúcido sobre el degradado, mismo patrón
   que btn_globalIconRefresh pero pensado para fondo oscuro ── */
.cobDetalle .cerrar {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 20px;
    height: 20px;
    flex-shrink: 0;
    margin-left: 0;
    border-radius: 50%;
    background: rgba(255, 255, 255, 0.16);
    color: #fff;
    font-size: 11px;
    font-weight: 700;
    line-height: 1;
    cursor: pointer;
    transition: background .15s ease;
}
.cobDetalle .cerrar:hover {
    background: rgba(255, 255, 255, 0.32);
    color: #fff;
}

.cobDetalle .img {
    margin: 10px 0 0 14px;
}

/* ── Cuerpo con el detalle (comisión, prima, premio, cuotas, paquetes) ── */
.cobDetalle .detalle {
    height: auto;
    overflow-y: auto;
    border-radius: 0 0 var(--ultu-radius-md) var(--ultu-radius-md);
    min-height: 180px;
    min-width: 200px;
    max-height: 350px;
    max-width: 500px;
    margin-bottom: 0;
    padding: 10px 14px 14px;
    font-size: 11px;
    color: var(--ultu-text-muted);
}
.cobDetalle .detalle::-webkit-scrollbar { width: 4px; }
.cobDetalle .detalle::-webkit-scrollbar-track { background: var(--ultu-surface); }
.cobDetalle .detalle::-webkit-scrollbar-thumb {
    background: rgba(var(--ultu-color-primary-rgb), 0.25);
    border-radius: 2px;
}

/* ── Flechita indicadora hacia el botón que abrió el popover: rombo
   rotado 45°, mismo color que el header. Antes era un cuadrado sin
   "position" (nunca se veía — bug arrastrado desde el original). Se
   posiciona en "left"/"margin-left" dinámicamente desde JS
   (mostrarDetalleCia... según el lado hacia el que abre); acá solo se
   define su aspecto y el "top" fijo. ── */
.cobDetalle .marca {
    position: absolute;
    z-index: 0;
    top: -5px;
    left: 14px;
    width: 12px;
    height: 12px;
    background: var(--ultu-gradient-primary);
    transform: rotate(45deg);
    border-radius: 2px 0 0 0;
}

/* ======================================================================
   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: 1px;
    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;
}

/* ── divCliente: celda de solo lectura (Tomador/Asegurado/Beneficiario, etc.)
   Comparte --ultu-card-header-bg con input_globalTextarea:disabled (mismo
   lenguaje visual que un campo deshabilitado) — modernizada a la línea del
   resto de los componentes (input_global/input_globalSelect): borde y radio
   por token, misma altura, con transición. La usan ~24 pantallas, algunas
   TODAVÍA sin migrar donde la clase cae directo sobre un <td> — por eso NO
   lleva display:flex (pisaría el display:table-cell y rompería esas tablas
   viejas); el centrado vertical es por line-height, que funciona igual en
   un <div> que en un <td>. Cambio puramente visual, no toca estructura ni
   JS de ninguna pantalla. ── */
.divCliente {
    background: var(--ultu-card-header-bg);
    color: var(--ultu-text-subtle);
    border: 1.5px solid var(--ultu-border);
    border-radius: var(--ultu-radius-sm);
    padding: 0 7px;
    height: 25px;
    line-height: 22px;
    box-sizing: border-box;
    cursor: not-allowed;
    transition: border-color .15s, box-shadow .15s, background .15s;
}
.divCliente:hover {
    border-color: var(--ultu-primary-border-hover);
}

/* ──────────────────────────────────────────
   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,
.FormularioDatos: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),
.FormularioDatos: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.
   :required:disabled tambien cuenta como "ocultar asterisco": un campo
   disabled queda fuera de la validacion de constraints del navegador (nunca
   matchea :valid NI :invalid), asi que en modo consulta (todo disabled)
   sin este agregado el asterisco quedaba pegado aunque el dato ya estuviera
   cargado — no tiene sentido pedir un dato que no se puede editar ahora. */
.panel_globalConsulta-field:has(:required:valid, :required:disabled) .is-required::after,
.panel_globalConsulta-field--full:has(:required:valid, :required:disabled) .is-required::after {
    display: none;
}

/* p_presupuestos-grid (Cotizador de Automotores) no envuelve cada par
   etiqueta:campo en su propio contenedor como panel_globalConsulta-field
   — son todos hermanos directos del grid. Por eso acá el :has() se ancla
   en la propia etiqueta y mira su hermano inmediato: la mayoría de los
   campos tiene el control envuelto en un div (":has(+ * ...)"), pero
   algunos (ej. Rastreo vehicular) tienen el <select required> como
   hermano directo, sin div envolvente (":has(+ :required:valid)"). Si
   algún campo nuevo no respeta ninguna de las dos formas, el asterisco
   simplemente queda visible siempre (misma degradación prolija que en
   panel_globalConsulta-field). También se oculta con :required:disabled
   (modo consulta, ver comentario arriba en panel_globalConsulta-field). */
.p_presupuestos-grid__label.is-required:has(+ :required:valid, + * :required:valid, + :required:disabled, + * :required:disabled)::after {
    display: none;
}

/* Auto Scoring (#autoScoring) reusa el mismo mecanismo pero con dos
   variantes de etiqueta propias: la mayoría son ".FilaFormularioEtiquetaDato
   is-required" (mismo patrón hermano-adyacente que p_presupuestos-grid__label
   de arriba); "Franquicias Disponibles" es la excepción — ahí el is-required
   vive en un <label> anidado DENTRO de un .FilaFormularioEtiquetaDato, no en
   la propia etiqueta. Scopeado a #autoScoring para no interferir si alguna
   otra pantalla llega a usar is-required sobre .FilaFormularioEtiquetaDato. */
#autoScoring .FilaFormularioEtiquetaDato.is-required:has(+ :required:valid, + * :required:valid, + :required:disabled, + * :required:disabled)::after,
#autoScoring label.is-required:has(+ :required:valid, + * :required:valid, + :required:disabled, + * :required:disabled)::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;
    /* Mismo fondo que .lockWindow (estilos.css), a pedido explicito */
    background-color: rgba(0, 0, 0, 0.4);
}

/* ── 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: 2px 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;
}

/* ══════════════════════════════════════════════════════════════
   COTIZACIÓN AUTO POR COMPAÑÍA — CotizadorGlobalCia
   Reemplaza la tabla vieja (FilaFormularioEtiquetaDato) generada por
   armaCiaCotizacion() en pre_autoFuncionesCotizacion.php. Un único
   layout para las ~20 compañías: cada fieldset ("Parámetros de
   cotización" / "Cobertura Adicional" / "Beneficios") se muestra u
   oculta entero segun corresponda, nunca se dejan huecos con colspan.
   Reutiliza panel_globalConsulta-field / -field-label / input_globalSelect
   / input_globalTextarea / btn_globalWhite ya existentes — solo se
   agrega lo que genuinamente no existía (layout de 2 columnas + sidebar,
   toggle, tarjeta con icono de sección, mensaje "no disponible",
   lista de observaciones con badge circular).
══════════════════════════════════════════════════════════════ */

/* Precio de cada cuota en la grilla comparativa (#grillaValores, filas
   FEDERACION/RIO URUGUAY/etc. generadas por filaCuotaXCotizacionAuto()).
   NO se tocó .GrillaTexto (compartida por cientos de pantallas del
   sistema) ni el id #grillaValores (se reutiliza en otros archivos con
   sus propias grillas) — en vez de eso se agregó esta clase nueva,
   exclusiva, directo en el <td> del precio dentro de esa función, así
   que ninguna otra pantalla puede verse afectada por este cambio. */
.CotizadorGlobalCia-precio {
    font-size: 11px;
    font-weight: 500;
}

/* Ancho fijo (600px + 380px), nunca colapsa a 1 columna: el contenedor
   ancestro #grillaCotizaciones ya es .grilla-global-wrap (overflow-x:auto),
   así que en pantallas angostas se scrollea horizontalmente en vez de
   apilar las columnas. width:fit-content + margin:auto centra el bloque
   completo tanto en pantallas anchas como dentro de ese wrapper. */
.CotizadorGlobalCia {
    display: grid;
    grid-template-columns: 650px 350px;
    gap: 5px;
    align-items: start;
    width: fit-content;
    margin: 0 auto;
    padding: 5px;
    /* El <td align="center"> legacy que envuelve esto en
       pre_presupuestosCotizacionAutoPantalla2.php hereda text-align:center
       a todos los descendientes (labels, textarea, etc.) que no lo
       sobrescriban. Se corta la herencia aquí en la raíz en vez de tocar
       esa tabla compartida por ~20 pantallas más. */
    text-align: left;
}

.CotizadorGlobalCia-col-izq,
.CotizadorGlobalCia-col-der {
    display: flex;
    flex-direction: column;
    gap: 5px;
    min-width: 0;
}

.CotizadorGlobalCia-card {
    background: var(--ultu-surface);
    border-radius: var(--ultu-radius-md);
    box-shadow: var(--ultu-shadow-sm);
    padding: 5px;
}

.CotizadorGlobalCia-card-header {
    display: flex;
    align-items: center;
}
.CotizadorGlobalCia-icon-badge {
    width: 30px;
    height: 30px;
    border-radius: 9px;
    background: var(--ultu-primary-tint);
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    color: var(--ultu-color-primary);
}
.CotizadorGlobalCia-card-header h3 {
    font-size: 14.5px;
    font-weight: 700;
    line-height: 1;
    color: var(--ultu-text-base);
    margin: 0;
}

.CotizadorGlobalCia-logo-row {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 14px;
    padding-bottom: 14px;
    border-bottom: 1px solid var(--ultu-border);
}
.CotizadorGlobalCia-logo-row img { height: 44px; width: auto; border-radius: 4px; }
.CotizadorGlobalCia-logo-row label { font-size: 13px; font-weight: 700; color: var(--ultu-text-base); margin-bottom: 0; }

/* Grid de 2 columnas para los campos de cada tarjeta (mas ancho que
   form_globalFieldset-grid porque conviven con la columna lateral) */
.CotizadorGlobalCia-grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 5px;
    padding: 5px;
}


/* Campo "Comisión: única" — reemplaza el <label>única</label> suelto */
.CotizadorGlobalCia-valor-fijo {
    height: 25px;
    display: flex;
    align-items: center;
    font-size: 12.5px;
    font-weight: 600;
    color: var(--ultu-text-base);
    margin-bottom: 0;
}

/* Campo checkbox->toggle en línea (Granizo, Pago Contado) */
.CotizadorGlobalCia-field--toggle-row {
    flex-direction: row;
    align-items: center;
    gap: 10px;
    padding-top: 4px;
}
.CotizadorGlobalCia-field--toggle-row .panel_globalConsulta-field-label {
    text-transform: none;
    font-size: 12.5px;
    font-weight: 600;
    color: var(--ultu-text-base);
    order: 2;
}

.CotizadorGlobalCia-toggle {
    position: relative;
    width: 38px;
    height: 21px;
    flex-shrink: 0;
    order: 1;
}
.CotizadorGlobalCia-toggle input {
    position: absolute;
    opacity: 0;
    width: 100%;
    height: 100%;
    margin: 0;
    cursor: pointer;
}
.CotizadorGlobalCia-toggle .track {
    position: absolute;
    inset: 0;
    background: var(--ultu-border-global-grid);
    border-radius: 20px;
    transition: background .18s;
    pointer-events: none;
}
.CotizadorGlobalCia-toggle .track::after {
    content: "";
    position: absolute;
    top: 2px;
    left: 2px;
    width: 17px;
    height: 17px;
    background: #fff;
    border-radius: 50%;
    box-shadow: 0 1px 3px rgba(0,0,0,.25);
    transition: transform .18s;
}
.CotizadorGlobalCia-toggle input:checked + .track { background: var(--ultu-color-primary); }
.CotizadorGlobalCia-toggle input:checked + .track::after { transform: translateX(17px); }
.CotizadorGlobalCia-toggle input:disabled { cursor: not-allowed; }
.CotizadorGlobalCia-toggle input:disabled + .track { background: #e5e6ec; cursor: not-allowed; }
.CotizadorGlobalCia-toggle input:disabled + .track::after { background: #f2f2f5; }

/* Mensaje cuando la cobertura/beneficio directamente no aplica a la cía
   (ej. "LA MERIDIONAL no incluye Granizo") — visible en vez de un hueco */
.CotizadorGlobalCia-no-disponible {
    grid-column: 1 / -1;
    display: flex;
    align-items: center;
    gap: 8px;
    background: var(--ultu-card-header-bg);
    border: 1.5px dashed var(--ultu-border);
    border-radius: var(--ultu-radius-sm);
    padding: 10px 12px;
    font-size: 12px;
    color: var(--ultu-text-subtle);
}
.CotizadorGlobalCia-no-disponible .ultu-icon { color: var(--ultu-text-placeholder); }

/* Observaciones: lista con badge circular en vez de tilde.gif/warning.gif */
.CotizadorGlobalCia-obs-list {
    display: flex;
    flex-direction: column;
    gap: 1px;
    max-height: 242px;
    overflow-y: auto;
    padding: 5px;
    background: #fff;
    border: 1.5px solid var(--ultu-border);
    border-radius: var(--ultu-radius-sm);
    box-sizing: border-box;
}
/* Aclaraciones: es de solo lectura (el sistema nunca permite editarla,
   el JS solo lee su .val() al recotizar) — se mantiene <textarea readonly>
   por compatibilidad con modificarCotizacionAuto() en presupuestosAutosPantalla2.js,
   pero visualmente NO debe parecer un campo editable: mismo borde/radio/fondo
   que .CotizadorGlobalCia-obs-list, sin resize ni estados de foco/hover. */
.CotizadorGlobalCia-static-box {
    display: block;
    width: 100%;
    min-height: 100px;
    padding: 5px;
    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: none;
    cursor: default;
}
.CotizadorGlobalCia-obs-item {
    display: flex;
    align-items: flex-start;
    gap: 8px;
    font-size: 12px;
    line-height: 1.4;
    color: var(--ultu-text-base);
}
.CotizadorGlobalCia-obs-icon {
    width: 16px;
    height: 16px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    margin-top: 1px;
}
.CotizadorGlobalCia-obs-icon .ultu-icon { --ultu-icon-size: 9px; }
.CotizadorGlobalCia-obs-icon--ok   { background: rgba(34, 197, 94, .12);  color: var(--ultu-color-status-available); }
.CotizadorGlobalCia-obs-icon--err  { background: var(--ultu-color-danger-bg); color: var(--ultu-color-danger); }
.CotizadorGlobalCia-obs-icon--warn { background: rgba(245, 158, 11, .14); color: var(--ultu-color-status-busy); }

.CotizadorGlobalCia-publicidad {
    margin-top: 12px;
    border: 0;
    border-radius: var(--ultu-radius-sm);
    overflow: hidden;
    width: 100%;
    height: 200px;
}

.CotizadorGlobalCia-actions {
    display: flex;
    justify-content: center;
    gap: 8px;
}

/* ======================================================================
   PRESUPUESTOS — Cotizador de Automotores — p_presupuestos-*
   Rediseño de pre_presupuestosCotizacionAuto.php y sus sub-includes
   (DatosCabecera, Vehiculos, pantallasDetalleAutoGeneral, Propietario,
   AccesoriosCoberturas, CiasAseguradoras). Metodología BEM.
   NO reemplaza form_globalFieldset / panel_globalConsulta-field — esos
   siguen siendo la base para pantallas de alta/edición estándar. Esto es
   una variante para pantallas densas (muchos campos cortos) donde el
   patrón "etiqueta arriba" infla demasiado el alto vertical: acá la
   etiqueta va a la izquierda del campo, como en el diseño legado, pero
   modernizado.
   ====================================================================== */

/* .botonesAsegurados: exclusivo de esta pantalla (pantallasDetalleAutoGeneral.php),
   se puede tipar directo. El toggle real lo hace presupuestosAutosNuevo.js
   agregando/quitando la clase "ocultar" (display:none) — por eso NO se usa
   `style="display:flex"` en el HTML: eso pisaría el ocultamiento por JS. */
.botonesAsegurados { display: flex; gap: 6px; }
.botonesAsegurados.ocultar { display: none; }

/* .botones (plain) la comparten ~35 pantallas más con layouts propios —
   NUNCA tipar `.botones` a secas. Acá se escopea solo dentro del control
   nuevo de Propietario/Tomador. */
.p_presupuestos-grid__control .botones { display: flex; gap: 6px; flex-shrink: 0; }

/* .botonesFechaFacturacion / .botonesFechaNacimiento (el par de botones
   calendario + borrar de un campo fecha) las comparte ~10 pantallas más
   (Siniestros, Pólizas, Hogar, etc.) sin ningún CSS propio hasta ahora —
   por eso NUNCA se tipan a secas acá: se escopean solo dentro de esta
   grilla nueva, para no afectar el layout de esas otras pantallas. */
.p_presupuestos-grid__control .botonesFechaFacturacion,
.p_presupuestos-grid__control .botonesFechaNacimiento {
    display: flex;
    align-items: center;
    gap: 4px;
    flex-shrink: 0;
}

/* .divCliente (Cliente la usa fija/chica para "Responsable") — dentro del
   control de Asegurado/Tomador necesita ocupar el espacio horizontal
   disponible, no achicarse al tamaño del texto. Escopeado, no toca el uso
   en Cliente. */
.p_presupuestos-grid__control .divCliente {
    flex: 1;
    min-width: 0;
    display: flex;
    align-items: center;
}

/* #botonesAceptarVehiculo / #botonesAceptarScoring son ids únicos de esta
   pantalla: los botones Guardar/Cancelar de los sub-formularios de Vehículo
   y de Auto Scoring, centrados dentro de su propia tarjeta (no a la
   derecha, como el resto de las toolbars ABM que sí usan
   .form_globalFieldset-toolbar). */
#botonesAceptarVehiculo,
#botonesAceptarScoring {
    justify-content: center;
}

/* .ocultar (estilos.css, display:none, especificidad 0-1-0) y
   .form_globalFieldset-toolbar / .p_presupuestos-grid__control (ultu.css,
   display:flex, misma especificidad 0-1-0) empatan en especificidad — y al
   cargar ultu.css DESPUÉS de estilos.css, en un empate gana ultu.css, o sea
   que .ocultar solo NO alcanza para ocultar estos elementos. Se ancla por
   id (0-1-0 + id = 1-1-0) para que gane siempre, sin tocar la regla global
   .ocultar (la usan decenas de pantallas más). */
#botonesAceptarVehiculo.ocultar,
#esOKWrap.ocultar {
    display: none;
}

/* --- Contenedor de sección --- */
.p_presupuestos-card {
    background: var(--ultu-global-surface);
    border-radius: calc(var(--ultu-radius-md) + 6px);
    box-shadow: var(--ultu-shadow-sm);
    margin: 0 0 20px;
    max-width: 1200px;
    overflow: hidden;
}

/* Aviso de edición sin guardar en Vehículo: mientras "Nuevo"/"Editar" está
   activo (campos habilitados, toolbar Guardar/Cancelar visible), la tarjeta
   se remarca con el mismo rojo que ya usa el resto del sistema para
   obligatorio/error — mismo criterio del usuario: "no te conviene seguir
   de largo sin guardar o cancelar". El borde transparente en reposo evita
   que el contenido salte 2px al mostrarse/ocultarse (border-box). Toggle
   en js/presupuestosAutosNuevo.js → habilitarCamposVehiculoPresupuestoAuto(). */
#tablaVehiculo {
    border: 2px solid transparent;
    transition: border-color .15s;
}
#tablaVehiculo.is-editing {
    border-color: var(--ultu-color-danger);
}
.p_presupuestos-card__header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    flex-wrap: wrap;
    padding: 14px 20px;
    border-bottom: 1px solid var(--ultu-border-global-grid);
}
.p_presupuestos-card__title {
    font-size: 13px;
    font-weight: 700;
    color: var(--ultu-color-primary);
    text-transform: uppercase;
    letter-spacing: .05em;
    margin: 0;
}
.p_presupuestos-card__subtitle {
    font-size: 11.5px;
    color: var(--ultu-text-subtle);
    font-weight: 400;
    text-transform: none;
    letter-spacing: normal;
    margin-top: 3px;
    display: block;
}
.p_presupuestos-card__toolbar { display: flex; gap: 8px; flex-wrap: wrap; }
.p_presupuestos-card__body { padding: 18px 20px 20px; }

/* --- Grilla densa etiqueta:campo (3 pares por fila) --- */
.p_presupuestos-grid {
    display: grid;
    grid-template-columns: minmax(100px,auto) minmax(150px,1fr) minmax(100px,auto) minmax(150px,1fr) minmax(100px,auto) minmax(150px,1fr);
    column-gap: 16px;
    row-gap: 12px;
    align-items: center;
}
.p_presupuestos-grid__label {
    margin: 0;
    font-size: 12px;
    font-weight: 500;
    color: var(--ultu-text-muted);
    white-space: nowrap;
}
.p_presupuestos-grid__label.is-required::after { content: "*"; margin-left: 3px; color: var(--ultu-color-danger); font-weight: bold; }
.p_presupuestos-grid__field--span2 { grid-column: span 3; }
.p_presupuestos-grid__field--span3 { grid-column: span 5; }
.p_presupuestos-grid__field--full  { grid-column: 1 / -1; }
.p_presupuestos-grid__control { display: flex; align-items: center; gap: 6px; }
.p_presupuestos-grid__control > input,
.p_presupuestos-grid__control > select { flex: 1; min-width: 0; }
.p_presupuestos-grid__hint {
    font-size: 11px;
    color: var(--ultu-text-subtle);
    text-align: right;
    margin-top: 6px;
}
@media (max-width: 900px) {
    .p_presupuestos-grid { grid-template-columns: minmax(100px,auto) 1fr; }
    .p_presupuestos-grid__field--span2,
    .p_presupuestos-grid__field--span3 { grid-column: 1 / -1; }
}

/* --- Dos columnas lado a lado (Accesorios / Coberturas Adicionales) --- */
.p_presupuestos-cols {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 24px;
}
.p_presupuestos-cols__title {
    font-size: 12px;
    font-weight: 700;
    color: var(--ultu-text-muted);
    text-transform: uppercase;
    letter-spacing: .04em;
    margin: 0 0 12px;
    display: flex;
    align-items: center;
    gap: 8px;
}
.p_presupuestos-cols__title::after {
    content: "";
    flex: 1;
    height: 1px;
    background: var(--ultu-border-global-grid);
}
@media (max-width: 820px) { .p_presupuestos-cols { grid-template-columns: 1fr; } }

/* --- Selector de Compañías a cotizar: picker de chips.
       Reemplaza visualmente el doble-listbox, pero NO reemplaza su mecanismo:
       los <select multiple> reales (ciasAseguradorasPresupuesto /
       ciasAseguradorasPresupuestoSeleccionadas) siguen en el DOM, ocultos
       (.p_presupuestos-cia-real) — son la fuente de verdad que ya usan Auto
       Scoring, Beneficios y el guardado en presupuestosEditar.js, compartido
       por todos los ramos de Presupuestos. Cada chip mueve la <option>
       correspondiente entre esos dos selects (ver toggleCiaAseguradora() en
       pre_presupuestosCotizacionCiasAseguradoras.php). Sin buscador: la
       cantidad de compañías nunca justifica filtrar. --- */
.p_presupuestos-cia-picker { display: grid; gap: 12px; }
.p_presupuestos-cia-picker__list {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    max-height: 260px;
    overflow-y: auto;
    padding: 2px;
    scrollbar-width: thin;
    scrollbar-color: rgba(var(--ultu-color-primary-rgb), 0.25) var(--ultu-surface);
}
.p_presupuestos-cia-picker__list::-webkit-scrollbar { width: 4px; }
.p_presupuestos-cia-picker__list::-webkit-scrollbar-track { background: var(--ultu-surface); }
.p_presupuestos-cia-picker__list::-webkit-scrollbar-thumb {
    background: rgba(var(--ultu-color-primary-rgb), 0.25);
    border-radius: 2px;
}
.p_presupuestos-cia-chip {
    display: flex;
    align-items: center;
    gap: 7px;
    margin: 0;
    border: 1.5px solid var(--ultu-neutral-border);
    border-radius: 999px;
    padding: 6px 14px 6px 10px;
    cursor: pointer;
    font-size: 12px;
    font-weight: 500;
    color: var(--ultu-text-muted);
    background: var(--ultu-color-white);
    transition: border-color .15s, background .15s, color .15s;
    user-select: none;
}
.p_presupuestos-cia-chip:hover { border-color: var(--ultu-primary-border-hover); }
.p_presupuestos-cia-chip input { margin: 0; cursor: pointer; }
.p_presupuestos-cia-chip.is-checked {
    background: var(--ultu-primary-tint);
    border-color: var(--ultu-color-primary);
    color: var(--ultu-color-primary-dark);
}
.p_presupuestos-cia-chip__dot {
    width: 6px; height: 6px;
    border-radius: 50%;
    background: var(--ultu-color-status-busy);
    flex-shrink: 0;
}
.p_presupuestos-cia-picker__summary {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
    font-size: 11px;
    color: var(--ultu-text-subtle);
}
.p_presupuestos-cia-picker__summary strong { color: var(--ultu-text-base); }
.p_presupuestos-cia-picker__dot-hint { display: inline-flex; align-items: center; gap: 5px; }

/* --- Auto Scoring: acordeón por compañía (antes fieldsets apilados que
       ocupaban mucho espacio). SIN tocar las clases classautoScoringX que
       usa el JS (verItemScoring/scoringDetectarColision) para mostrar/ocultar
       cada bloque — los <fieldset> pasaron a <details>, mismas clases,
       mismo mecanismo de display:none/block. GENERALES es la excepción real
       (comparte hasta 7 compañías): conserva sus classautoScoringX tal cual
       estaban, así que su visibilidad general sigue el mismo criterio de
       siempre — solo cambió la etiqueta, no la lógica. --- */
#autoScoring .p_presupuestos-scoring-item {
    border: 1.5px solid var(--ultu-text-placeholder);
    border-radius: var(--ultu-radius-md);
    margin: 0 0 14px;
    overflow: hidden;
}
#autoScoring .p_presupuestos-scoring-item[open] {
    border-color: var(--ultu-primary-border-hover);
}
#autoScoring .p_presupuestos-scoring-item__summary {
    list-style: none;
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 10px 16px;
    cursor: pointer;
    font-size: 12px;
    font-weight: 700;
    color: var(--ultu-color-primary);
    text-transform: uppercase;
    letter-spacing: .04em;
    background: var(--ultu-card-header-bg);
}
#autoScoring .p_presupuestos-scoring-item__summary::-webkit-details-marker { display: none; }
#autoScoring .p_presupuestos-scoring-item__summary::marker { content: ""; }
#autoScoring .p_presupuestos-scoring-item__chev {
    margin-left: auto;
    width: 14px;
    height: 14px;
    flex-shrink: 0;
    transition: transform .18s;
    -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-subtle);
}
#autoScoring .p_presupuestos-scoring-item[open] .p_presupuestos-scoring-item__chev {
    transform: rotate(180deg);
}
#autoScoring .p_presupuestos-scoring-item__body {
    padding: 14px 16px 16px;
}
/* Chip "Completo"/"Faltan datos" — mismos dos tokens semánticos ya usados
   en CotizadorGlobalCia-obs-icon (verde/ámbar), sin paleta nueva. */
#autoScoring .p_presupuestos-scoring-item__badge {
    font-size: 10.5px;
    font-weight: 700;
    padding: 2px 9px;
    border-radius: 999px;
    text-transform: none;
    letter-spacing: normal;
}
#autoScoring .p_presupuestos-scoring-item__badge:empty { display: none; }
#autoScoring .p_presupuestos-scoring-item__badge.is-ok {
    background: rgba(34, 197, 94, .12);
    color: var(--ultu-color-status-available);
}
#autoScoring .p_presupuestos-scoring-item__badge.is-pending {
    background: rgba(245, 158, 11, .14);
    color: var(--ultu-color-status-busy);
}
#autoScoring .form-row {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 10px 16px;
}
#autoScoring .col.FilaFormularioEtiquetaDato {
    font-size: 12px;
    color: var(--ultu-text-muted);
}
/* Franquicias de Federación Patronal (#combofranquicias220): es un
   <select multiple>, no un combo de una línea — la regla global
   .input_globalSelect/select.FormularioDatosCombo le imponía height:25px
   y padding pensados para un dropdown común, comprimiéndolo. Se ancla por
   id porque es un combo único en todo el sistema (agregarComboFranquicias.php
   solo lo genera para esta compañía), cero riesgo de afectar otro <select
   multiple> del sistema. overflow-y:auto + height:auto hace que el propio
   contenido decida el alto real entre los límites, sin scroll de sobra
   cuando entran pocas opciones. */
#combofranquicias220 {
    height: auto;
    min-height: 55px;
    max-height: 140px;
    padding: 0;
    overflow-y: auto;
    background-image: none;
}