/* =====================================================================
   ITSOS Custom CSS — Bootstrap 5
   Reemplaza el itsos.css compilado desde SCSS.
   Carga DESPUÉS de bootstrap.min.css para sobrescribir lo necesario.
   ===================================================================== */

/* ── Variables globales ─────────────────────────────────────────────── */
:root {
    --itsos-primary:         #00576d;
    --itsos-primary-dark:    #003d4d;
    --itsos-primary-hover:   #004a5c;
    --itsos-success:         #367C36;
    --itsos-danger:          #CD322D;
    --itsos-warning:         #926402;
    --itsos-info:            #0868DD;
    --itsos-neo-base:        #eff0f3;
    --itsos-neo-shadow-super: 3px 3px 6px #c2c2c2, -3px -3px 6px white;
    --itsos-neo-shadow-deep:  inset 2px 2px 5px #c2c2c2, inset -3px -3px 7px #fdfdfe;
    --itsos-gray:            #555555;
    --itsos-gray-dark:       #333333;
    --itsos-gray-light:      #777777;

    /* ── Altura del navbar fixed-top: fuente de verdad única ── */
    /* Ajustar aquí actualiza body, heading-sticky y cualquier otro offset */
    --navbar-h: 44px;
}

/* ── Colores de marca Bootstrap 5 ───────────────────────────────────── */
.text-primary   { color: var(--itsos-primary) !important; }
.bg-primary     { background-color: var(--itsos-primary) !important; }
.btn-primary    { --bs-btn-bg: var(--itsos-primary); --bs-btn-border-color: var(--itsos-primary); --bs-btn-hover-bg: var(--itsos-primary-hover); --bs-btn-hover-border-color: var(--itsos-primary-dark); --bs-btn-active-bg: var(--itsos-primary-dark); }
.border-primary { border-color: var(--itsos-primary) !important; }

/* ── Body: compensar navbar fixed-top ───────────────────────────────── */
/* padding-top lo setea JS (ajustarOffsetNavbar) con la altura real del navbar.
   --navbar-h: 44px es el fallback para antes de que cargue el script. */
body {
    padding-top: var(--navbar-h);
    background-color: var(--itsos-neo-base);
}

/* =====================================================================
   NAVBAR ITSOS (tema claro neomórfico con links en color primario)
   ===================================================================== */
nav#menu-navegacion.navbar-itsos {
    /* BS5: override de variable del componente al mismo nivel que lo declara */
    --bs-navbar-padding-y: 0.2rem;
    background-color: var(--itsos-neo-base);
    border-bottom: 1px solid #d9d9d9;
    box-shadow: 0px 4px 15px -4px rgba(0, 0, 0, 0.25);
}

nav#menu-navegacion .navbar-brand {
    padding-top: 0.2rem;
    padding-bottom: 0.2rem;
}

/* Layout responsivo del navbar
   HTML order: brand | user-nav | toggler | collapse
   Desktop (lg+): brand | collapse(flex-grow, min-width:0) | user-nav(shrink:0)
   Mobile:        brand | user-nav(ms-auto) | toggler  →  collapse debajo
*/
@media (min-width: 992px) {
    nav#menu-navegacion .container-fluid {
        flex-wrap: nowrap;
        align-items: center;
    }
    /* Orden visual: brand → módulos → user-nav */
    nav#menu-navegacion .navbar-brand    { order: 1; flex-shrink: 0; }
    nav#menu-navegacion .navbar-collapse { order: 2; flex-grow: 1; flex-shrink: 1; min-width: 0; }
    nav#menu-navegacion #menu-usuario    { order: 3; flex-shrink: 0; }
    nav#menu-navegacion .navbar-toggler  { order: 4; }

    /* El ul de módulos no crece más de lo necesario, no empuja user-nav */
    nav#menu-navegacion .navbar-collapse .navbar-nav {
        flex-wrap: nowrap;
        overflow: visible;
    }

    /* Reducir padding de módulos en pantallas ajustadas.
       --bs-nav-link-padding-y se declara en .nav-link, hay que overridearlo
       con mayor especificidad en el propio elemento (BS5 custom props). */
    nav#menu-navegacion .nav-link,
    nav#menu-navegacion .nav-link.dropdown-toggle {
        --bs-nav-link-padding-y: 0.35rem;
        padding-left: 0.55rem;
        padding-right: 0.55rem;
        font-size: 0.875rem;
        white-space: nowrap;
    }

    /* Separador sutil entre módulos y user-nav */
    nav#menu-navegacion #menu-usuario::before {
        content: '';
        display: block;
        align-self: center;
        width: 1px;
        height: 20px;
        background-color: #d0d0d0;
        margin-right: 0.4rem;
        flex-shrink: 0;
    }
}

/* En pantallas muy grandes recuperamos el padding normal */
@media (min-width: 1400px) {
    nav#menu-navegacion .nav-link,
    nav#menu-navegacion .nav-link.dropdown-toggle {
        padding: 0.5rem 0.75rem;
        font-size: 1rem;
    }
}

@media (max-width: 991.98px) {
    nav#menu-navegacion #menu-usuario {
        margin-left: auto;
    }
}

nav#menu-navegacion .navbar-toggler {
    border-color: var(--itsos-primary);
}
nav#menu-navegacion .navbar-toggler-icon {
    background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='%2300576d' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
}

/* Links del nav principal */
nav#menu-navegacion .nav-link,
nav#menu-navegacion .nav-link.dropdown-toggle {
    color: var(--itsos-primary);
    font-weight: 500;
    padding: 0.5rem 0.75rem;
    border-radius: 4px;
    transition: background-color 0.15s, box-shadow 0.15s;
}
nav#menu-navegacion .nav-link:hover,
nav#menu-navegacion .nav-link:focus {
    background-color: var(--itsos-neo-base);
    box-shadow: var(--itsos-neo-shadow-deep);
    color: var(--itsos-primary-dark);
}
nav#menu-navegacion .nav-item.active .nav-link,
nav#menu-navegacion .nav-link.active,
nav#menu-navegacion .nav-item .nav-link.show {
    background-color: var(--itsos-neo-base);
    box-shadow: var(--itsos-neo-shadow-deep);
    color: var(--itsos-primary-dark);
}

/* Íconos de módulo en el menú */
nav#menu-navegacion .menu-img {
    vertical-align: middle;
    margin-right: 4px;
    margin-bottom: 2px;
}

/* Dropdown megamenú */
nav#menu-navegacion .dropdown-menu {
    min-width: 580px;
    padding: 0.4rem 0;
    background-color: var(--itsos-neo-base);
    border: 1px solid #d0d0d0;
    border-radius: 8px;
    box-shadow: var(--itsos-neo-shadow-super);
    overflow: hidden;
    max-height: calc(100vh - 70px);
    overflow-y: auto;
}
/* Scrollbar del megamenú */
nav#menu-navegacion .dropdown-menu::-webkit-scrollbar {
    width: 5px;
}
nav#menu-navegacion .dropdown-menu::-webkit-scrollbar-track {
    background: transparent;
}
nav#menu-navegacion .dropdown-menu::-webkit-scrollbar-thumb {
    background-color: rgba(0,0,0,0.18);
    border-radius: 10px;
}

/* Bootstrap 5 aplica margin negativo al .row (-0.75rem/lado). Eso hace que
   el row desborde el dropdown y el borde/border-radius corte el texto del
   último col. Se neutralizan los gutters para ambos modos (top y sidebar). */
nav#menu-navegacion .dropdown-menu .row {
    --bs-gutter-x: 0;
    margin-left: 0;
    margin-right: 0;
}
nav#menu-navegacion .dropdown-menu .col-12,
nav#menu-navegacion .dropdown-menu [class*="col-"] {
    padding-left: 0;
    padding-right: 0;
}
nav#menu-navegacion .dropdown-menu .dropdown-list {
    list-style: none;
    padding: 0.25rem 0.5rem;
    margin: 0;
}
nav#menu-navegacion .dropdown-menu .dropdown-list li a {
    display: block;
    padding: 0.4rem 0.5rem 0.4rem 1rem;
    color: var(--itsos-gray);
    text-decoration: none;
    border-radius: 5px;
    font-size: 0.875rem;
    white-space: normal;
    word-break: break-word;
    line-height: 1.35;
    transition: background-color 0.15s, box-shadow 0.15s;
}
nav#menu-navegacion .dropdown-menu .dropdown-list li a:hover {
    box-shadow: var(--itsos-neo-shadow-deep);
    color: var(--itsos-gray-dark);
}

/* Megamenú responsivo: en pantallas < lg ocupa todo el ancho disponible */
@media (max-width: 991.98px) {
    nav#menu-navegacion .dropdown-menu {
        min-width: unset;
        width: 100%;
        max-height: 55vh;
        overflow-y: auto;
        border-radius: 6px;
        box-shadow: 0 4px 12px rgba(0,0,0,0.15);
    }
    nav#menu-navegacion .dropdown-menu .row {
        flex-direction: column;
    }
    nav#menu-navegacion .dropdown-menu .col-sm-4 {
        width: 100%;
    }
}

/* ── Menú usuario (derecha) ─────────────────────────────────────────── */
nav#menu-usuario {
    display: flex;
    align-items: center;
    flex-shrink: 0;
}
nav#menu-usuario .navbar-nav {
    flex-direction: row;
    align-items: center;
    flex-wrap: nowrap;
    gap: 0.1rem;
}

/* Botones ícono del menú usuario */
nav#menu-usuario .nav-icon-btn {
    color: var(--itsos-primary);
    padding: 0.4rem 0.45rem;
    border-radius: 6px;
    transition: background-color 0.15s, box-shadow 0.15s;
    display: flex;
    align-items: center;
    justify-content: center;
}
nav#menu-usuario .nav-icon-btn:hover,
nav#menu-usuario .nav-icon-btn:focus {
    background-color: var(--itsos-neo-base);
    box-shadow: var(--itsos-neo-shadow-deep);
    color: var(--itsos-primary-dark);
}
nav#menu-usuario .nav-icon-btn img {
    display: block;
}

/* Ocultar caret por defecto en botones ícono */
nav#menu-usuario .dropdown-toggle-no-caret::after {
    display: none;
}

/* Info texto usuario: ajustarNavbar() controla el contenido dinámicamente */
nav#menu-usuario .datosUsuario {
    font-size: 0.75rem;
    color: var(--itsos-gray);
    white-space: nowrap;
    line-height: 1.3;
}

nav#menu-usuario a.datosUsuario-link {
    cursor: pointer;
    transition: opacity 0.15s;
    text-decoration: none;
}
nav#menu-usuario a.datosUsuario-link:hover {
    opacity: 0.75;
    text-decoration: underline;
}

.usuario-iniciales {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 22px;
    height: 22px;
    border-radius: 50%;
    background-color: var(--itsos-primary, #00576d);
    color: #fff;
    font-size: 0.6rem;
    font-weight: 700;
    letter-spacing: 0.03em;
    line-height: 1;
    user-select: none;
}

/* Dropdowns del usuario */
nav#menu-usuario .usuario-dropdown {
    min-width: 260px;
    border-radius: 8px;
    box-shadow: var(--itsos-neo-shadow-super);
    border: 1px solid #d9d9d9;
    padding: 0.35rem 0;
}
nav#menu-usuario .usuario-dropdown .dropdown-item {
    padding: 0.55rem 1rem;
    font-size: 0.875rem;
    color: var(--itsos-gray-dark);
    border-radius: 4px;
    margin: 0 0.25rem;
    width: auto;
    transition: background-color 0.15s, box-shadow 0.15s;
}
nav#menu-usuario .usuario-dropdown .dropdown-item:hover,
nav#menu-usuario .usuario-dropdown .dropdown-item:focus {
    background-color: var(--itsos-neo-base);
    box-shadow: var(--itsos-neo-shadow-deep);
    color: var(--itsos-gray-dark);
}
nav#menu-usuario .usuario-dropdown .dropdown-item img {
    flex-shrink: 0;
    opacity: 0.75;
}
nav#menu-usuario .usuario-dropdown kbd {
    font-size: 0.7rem;
    color: var(--itsos-gray);
    background-color: #e9ecef;
    border: 1px solid #ced4da;
    border-radius: 3px;
    padding: 0.1rem 0.35rem;
    white-space: nowrap;
}

/* Ítem perfil */
nav#menu-usuario .perfil-item {
    padding-top: 0.75rem;
    padding-bottom: 0.75rem;
}
nav#menu-usuario .perfil-avatar {
    border-radius: 50%;
    background-color: var(--itsos-neo-base);
    box-shadow: var(--itsos-neo-shadow-super);
    padding: 4px;
    flex-shrink: 0;
}
nav#menu-usuario .perfil-info {
    line-height: 1.3;
    min-width: 0;
}
nav#menu-usuario .perfil-info .fw-semibold {
    font-size: 0.9rem;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    max-width: 170px;
}

/* Atajos de teclado - no interactivo */
nav#menu-usuario .atajos-item {
    padding: 0.55rem 1rem;
    font-size: 0.8rem;
    color: var(--itsos-gray);
    cursor: default;
    margin: 0 0.25rem;
}
nav#menu-usuario .atajos-list li {
    margin-bottom: 0.2rem;
}
nav#menu-usuario .atajos-list kbd {
    font-size: 0.7rem;
}

/* ── Colapsar el <header> que envuelve el <nav fixed-top> en navbar.php ─ */
/* El nav es position:fixed (fuera del flujo), el <header> queda con solo
   nodos de texto/whitespace que generan line-height fantasma. */
body > header[role="banner"] {
    height: 0;
    overflow: hidden;
}

/* ── Sticky heading ─────────────────────────────────────────────────── */
.heading-sticky {
    position: sticky;
    top: var(--navbar-h);
    background: white;
    border-bottom: 1px solid #ccc;
    z-index: 100;
    padding: 0.25rem 0;
}
.heading-sticky-breadcrumbs {
    padding-top: 2rem;
    padding-bottom: 1rem;
}

/* ── Header ─────────────────────────────────────────────────────────── */
header {
    background-color: var(--itsos-neo-base);
}
header #fechaActual {
    color: var(--itsos-primary);
}
header img.brand-shadow {
    padding: 0.5rem;
    margin-top: 1rem;
    background-color: var(--itsos-neo-base);
    border-top-left-radius: 25px;
    box-shadow: 3px 3px 6px #c2c2c2, -3px -3px 6px white;
}
header img.client-shadow {
    padding: 6px;
    margin-top: 7px;
    background-color: var(--itsos-neo-base);
    box-shadow: 3px 3px 6px #c2c2c2, -3px -3px 6px white;
}

/* ── Footer ─────────────────────────────────────────────────────────── */
footer {
    position: fixed;
    bottom: 0;
    width: 100%;
    background-color: #f7f7f7;
    border-top: 1px solid #dbe2ea;
    z-index: 1005;
    box-shadow: 0 0px 9px -2px rgba(0, 0, 0, 0.65);
}
.footer-ris {
    box-shadow: none;
    background-color: transparent;
    position: initial;
}
.not-style-footer {
    position: initial;
    box-shadow: none;
    background-color: initial;
}

/* ── Neomorfismo ─────────────────────────────────────────────────────── */
.neomofismo-profundo {
    background-color: var(--itsos-neo-base) !important;
    box-shadow: var(--itsos-neo-shadow-deep) !important;
}
.neomofismo-superpuesto {
    background-color: white;
    box-shadow: var(--itsos-neo-shadow-super);
}
.neomofismo-superpuesto-round {
    border-radius: 50%;
    background-color: white;
    box-shadow: var(--itsos-neo-shadow-super);
}
.neomofismo-profundo-round {
    border-radius: 50%;
    background-color: var(--itsos-neo-base);
    box-shadow: var(--itsos-neo-shadow-deep);
}

/* ── Cards ───────────────────────────────────────────────────────────── */
.card {
    background-color: white;
    border: 1px solid #ddd;
    border-radius: 0.375rem;
    box-shadow: var(--itsos-neo-shadow-super);
    margin-bottom: 1.75rem;
}
.card:hover {
    box-shadow: var(--itsos-neo-shadow-deep);
}
.card a:hover { text-decoration: none; color: var(--itsos-info); }
.card a:focus { text-decoration: none; }
.card-block {
    flex: 1 1 auto;
    padding: 1.25rem;
}
/* Card header con borde izquierdo de acento */
.card > .card-header {
    background-color: #f8f9fa;
    border-bottom: 1px solid #e9ecef;
    border-left: 3px solid var(--itsos-primary);
    border-radius: calc(0.375rem - 1px) calc(0.375rem - 1px) 0 0;
}
.card > .card-header h6 {
    color: var(--itsos-primary);
    font-size: 0.9rem;
    letter-spacing: 0.01em;
}
/* Card body sin padding excesivo en fichas */
.card > .card-body {
    padding: 1rem;
}

/* ── DataTable (DT 1.x / legacy) ────────────────────────────────────── */
.dataTables_processing { z-index: 1200; top: 60%; }
.dataTables_filter { text-align: left !important; }
.dataTables_filter label { display: block; margin-bottom: 4px; }
.dataTables_filter input { display: block !important; margin: 0 !important; width: 100% !important; }
.dataTables_wrapper .dataTables_paginate .paginate_button { padding: 0; }
.dataTables_wrapper .dataTables_paginate .paginate_button:hover { background: none; border: none; }
.dataTables_wrapper .dataTables_filter input { margin-left: 0; height: 35px; }
table.dataTable.no-footer { border-bottom: none; }
/* Reducir gutter excesivo del wrapper BS5 */
.dataTables_wrapper > .row { --bs-gutter-x: 0.5rem; margin-bottom: 0; }
.dataTables_wrapper > .row:first-child { margin-bottom: 0.25rem; }

/* ── Toolbar personalizado de tablas (itsos-dt-toolbar) ────────────── */
/* Usado por módulos como Caja que construyen su propio toolbar via JS.
   Estructura: [ search (flex:1) ] [ .itsos-dt-right: botones + cantidad ] */
.itsos-dt-toolbar {
    display: flex;
    align-items: center;
    gap: 8px;
    padding-bottom: 8px;
    flex-wrap: nowrap;
}
/* Grupo derecho: botones + selector de cantidad, alineados entre sí */
.itsos-dt-right {
    display: flex;
    align-items: center;
    gap: 6px;
    flex-shrink: 0;
    white-space: nowrap;
}
.itsos-dt-toolbar .dt-buttons {
    display: flex;
    gap: 4px;
    flex-shrink: 0;
}
.itsos-dt-toolbar .dt-buttons button {
    height: 35px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 4px;
}

/* ── DataTable 2.x (dt-container) ──────────────────────────────────── */
/* Layout: buscador izquierda · botones centro · cantidad derecha       */
/* En DT 2.x el row de controles usa .dt-layout-start y .dt-layout-end */
.dt-container > .dt-layout-row:not(.dt-layout-table) {
    display: flex !important;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.5rem;
    margin-bottom: 0.4rem;
}
/* .dt-layout-end contiene el buscador → lo movemos a la izquierda */
.dt-container > .dt-layout-row:not(.dt-layout-table) > .dt-layout-end {
    order: -1;
    flex: 1 1 200px;
    min-width: 0;
}
/* .dt-layout-start contiene botones + cantidad → va a la derecha */
.dt-container > .dt-layout-row:not(.dt-layout-table) > .dt-layout-start {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    flex-shrink: 0;
}
/* Buscador: alineado a la izquierda, input expansivo */
.dt-container .dt-search {
    text-align: left !important;
    display: flex;
    align-items: center;
    gap: 0.35rem;
    width: 100%;
}
.dt-container .dt-search label {
    font-weight: normal;
    white-space: nowrap;
    font-size: 0.875rem;
    color: var(--itsos-gray);
}
.dt-container .dt-search input {
    flex: 1 1 160px;
    min-width: 160px;
    width: 100%;
    height: 35px;
    padding: 0.25rem 0.5rem;
    border: 1px solid #ced4da;
    border-radius: 0.375rem;
    font-size: 0.875rem;
}
/* Selector de cantidad: compacto y alineado */
.dt-container .dt-length {
    display: flex;
    align-items: center;
    gap: 0.35rem;
    white-space: nowrap;
}
.dt-container .dt-length label {
    font-size: 0.875rem;
    font-weight: normal;
    color: var(--itsos-gray);
    margin: 0;
}
.dt-container .dt-length select {
    height: 32px;
    padding: 0.1rem 0.4rem;
    font-size: 0.875rem;
    border: 1px solid #ced4da;
    border-radius: 0.375rem;
    width: auto;
}
/* Fila inferior: info izquierda, paginación derecha */
.dt-container > .dt-layout-row.dt-layout-table + .dt-layout-row {
    margin-top: 0.4rem;
}
.dt-container .dt-layout-row:not(.dt-layout-table):last-child .dt-layout-end,
.dt-container .dt-layout-row:not(.dt-layout-table):last-child .dt-layout-start {
    display: flex;
    align-items: center;
}
/* Paginador alineado a la derecha */
.dt-container .dt-paging,
.dataTables_wrapper .dataTables_paginate {
    display: flex !important;
    justify-content: flex-end;
    margin-top: 6px;
}

/* ── Paginador: botón activo con btn-primary, resto con btn-default ─── */
/* Aplica a todos los DataTables de la aplicación (DT 2.x y 1.x)        */
.dt-paging .pagination .page-item .page-link,
.dataTables_paginate .pagination .page-item .page-link,
.paginate_button.page-link {
    color: var(--itsos-primary);
    border-color: #dee2e6;
    background-color: #fff;
    transition: background-color 0.15s, color 0.15s, border-color 0.15s;
}
.dt-paging .pagination .page-item .page-link:hover,
.dataTables_paginate .pagination .page-item .page-link:hover {
    background-color: var(--itsos-neo-base);
    color: var(--itsos-primary);
    border-color: var(--itsos-primary);
}
.dt-paging .pagination .page-item.active .page-link,
.dataTables_paginate .pagination .page-item.active .page-link {
    background-color: var(--itsos-primary) !important;
    border-color: var(--itsos-primary) !important;
    color: #fff !important;
}
.dt-paging .pagination .page-item.disabled .page-link,
.dataTables_paginate .pagination .page-item.disabled .page-link {
    color: #adb5bd;
    background-color: #fff;
    border-color: #dee2e6;
}

/* ── Spinner / Preloader ─────────────────────────────────────────────── */
@keyframes placeHolderShimmer {
    0%   { background-position: -468px 0; }
    100% { background-position:  468px 0; }
}
.animated-background {
    animation: placeHolderShimmer 1s linear infinite forwards;
    background: linear-gradient(to right, #eeeeee 8%, #dddddd 18%, #eeeeee 33%);
    background-size: 800px 104px;
    height: 35px;
    position: relative;
}
@keyframes girar {
    from { transform: rotate(0deg); }
    to   { transform: rotate(360deg); }
}
.preloader { width: 250px; height: 150px; text-align: center; }
.preloader .spinner {
    width: 50px; height: 50px;
    margin: auto; margin-bottom: 1rem;
    border: 10px solid #eee;
    border-radius: 50%;
    border-top: 10px solid var(--itsos-primary);
    animation: girar 0.3s linear infinite;
}

/* ── Decoradores / Dots ──────────────────────────────────────────────── */
.dot {
    display: inline-block; position: relative;
    top: -1px; left: -1px;
    width: 6px; height: 6px; border-radius: 50%;
}
.dot-success { background-color: var(--itsos-success); }
.dot-danger  { background-color: var(--itsos-danger); }
.dot-warning { background-color: var(--itsos-warning); }
.p-relative  { position: relative; }
.border-dotted-primary {
    font-weight: bolder;
    border: 2px dotted var(--itsos-primary);
    padding: 3px;
}

/* ── Borders ─────────────────────────────────────────────────────────── */
/* .border-bottom se deja a Bootstrap 5 — evitar override de la utilidad */
.border-radius-50 { border-radius: 50%; }

/* ── Botones animados ────────────────────────────────────────────────── */
.animacion-up:hover { transform: translateY(-3px) scale(1.02); }

/* ── Login ───────────────────────────────────────────────────────────── */
.bg-itsos { background: #fff; }
.lista-enlaces { color: var(--itsos-gray-light); }
.lista-enlaces > li + li:before {
    content: "/\00a0";
    padding: 0 5px;
    color: var(--itsos-primary);
}

/* ── Portal footer ───────────────────────────────────────────────────── */
.portal-footer {
    border-top: 2px solid var(--itsos-primary);
    background-color: var(--itsos-neo-base);
    margin-top: 2rem;
}
.portal-footer-inner {
    padding: 0.75rem 1.25rem;
}
.portal-footer-brand {
    flex-shrink: 0;
}
.portal-footer-logo {
    opacity: 0.85;
    transition: opacity 0.2s;
}
.portal-footer-logo:hover { opacity: 1; }
.portal-footer-brand-text {
    font-weight: 700;
    font-size: 0.8rem;
    color: var(--itsos-primary);
    letter-spacing: 0.06em;
    text-transform: uppercase;
}
.portal-footer-links {
    font-size: 0.78rem;
    color: var(--itsos-gray-light);
}
.portal-footer-links .list-inline-item {
    white-space: nowrap;
}
.portal-footer-links .list-inline-item + .list-inline-item::before {
    content: "·";
    margin-right: 0.4rem;
    color: var(--itsos-primary);
    opacity: 0.5;
}
.portal-footer-links a {
    color: var(--itsos-gray);
    text-decoration: none;
    transition: color 0.15s;
}
.portal-footer-links a:hover {
    color: var(--itsos-primary);
}
.portal-footer-copy {
    font-size: 0.75rem;
    color: var(--itsos-gray-light);
    white-space: nowrap;
    flex-shrink: 0;
}

/* Dark mode */
[data-bs-theme="dark"] .portal-footer {
    background-color: #1a2332;
    border-top-color: #2a4a5e;
}
[data-bs-theme="dark"] .portal-footer-links,
[data-bs-theme="dark"] .portal-footer-copy   { color: #6a8a9a; }
[data-bs-theme="dark"] .portal-footer-links a { color: #8aaabb; }
[data-bs-theme="dark"] .portal-footer-links a:hover { color: #7ec8d8; }

/* ── Salto de teclado (accesibilidad) ───────────────────────────────── */
ul.salto-teclado { margin-top: 0; margin-bottom: 0; }
.salto { display: block; text-align: left; margin: auto; padding: 0; position: absolute; }
.salto a {
    padding: 0.5rem 0.5em; display: inline-block; z-index: 2;
    text-decoration: none; position: absolute;
    border: 2px solid var(--itsos-info);
    color: var(--itsos-info); background: #fff;
    width: 180px; left: -200em; cursor: pointer;
    border-radius: 4px;
}
.salto a:focus, .salto a:active { left: 0; }

/* ── Llamador pacientes ──────────────────────────────────────────────── */
.vh-100 { height: 100%; }
main.main-llamador-pacientes { background-color: #f7f7f7; }
.tabla-listado-pacientes th,
.tabla-llamado-paciente th {
    border: 1px solid #ddd; font-size: 2rem;
    background-color: var(--itsos-gray-dark);
    color: white; padding: 8px;
}
.tabla-listado-pacientes td {
    border: 1px solid #ddd; padding: 4px;
    font-size: 7.9rem; text-align: center;
}
.tabla-llamado-paciente td {
    border: 1px solid #ddd;
    padding-top: 50px; padding-bottom: 50px;
    text-align: center; font-size: 15rem;
    color: var(--itsos-gray-dark); background-color: #f7f7f7;
}
.tabla-listado-pacientes tr:nth-child(1) { background-color: yellow; }

/* ── Tipografía / Utilidades ─────────────────────────────────────────── */
.cursor-pointer    { cursor: pointer; }
.cursor-not-allowed { cursor: not-allowed; }
.letter-spacing-1  { letter-spacing: 2px; }
.letter-spacing-2  { letter-spacing: 6px; }
.font-weight-bold  { font-weight: bold !important; }
.font-weight-lighter { font-weight: lighter; }
.font-weight-normal  { font-weight: normal; }
.pl-menu  { padding-left: 0.5rem !important; }
.bg-gray  { background-color: #efefef; }
/* .bg-white se deja a Bootstrap 5 — el override con #fdfdfe generaba inconsistencias */

/* Backgrounds de turnos */
.bg-tasignado    { background-color: #571845; }
.bg-ttomado      { background-color: #c70039; }
.bg-tsobreturno  { background-color: #ff5733; }
.bg-trealizado   { background-color: #0c4dff; }
.bg-treservado   { background-color: #ffc107; }
.bg-tcancelado   { background-color: #ff2c46; }
.bg-tinsuficiente { background-color: gray; }
.bg-tlibre { background-color: #5cb85c; }
/* .bg-success se deja a Bootstrap 5 — no override */
.bg-notification  { background-color: #dc691d; }

/* ── Utilidades responsivas (xs = <768px) ────────────────────────────── */
@media (max-width: 767px) {
    .mx-0-xs  { margin-left: 0;  margin-right: 0; }
    .my-0-xs  { margin-top: 0;   margin-bottom: 0; }
    .mb-4-xs  { margin-bottom: 1.75rem; }
    .mt-0-xs  { margin-top: 0 !important; }
    .mt-1-xs  { margin-top: 1rem !important; }
    .mt-2-xs  { margin-top: 1.25rem !important; }
    .mt-3-xs  { margin-top: 1.5rem !important; }
    .mt-4-xs  { margin-top: 1.75rem !important; }
    .mt-5-xs  { margin-top: 2rem !important; }
    .mb-1-xs  { margin-bottom: 1rem; }
    .mb-0-xs  { margin-bottom: 0; }
    .ml-2-xs  { margin-left: 1.25rem; }
    .pb-1-xs  { padding-bottom: 1rem; }
    .px-0-xs  { padding-left: 0; padding-right: 0; }
    .py-0-xs  { padding-top: 0;  padding-bottom: 0; }
    .pr-0-xs  { padding-right: 0; }
    .pl-0-xs  { padding-left: 0; }
    .pt-1-xs  { padding-top: 1rem; }
    .col-xs-2  { width: 16.666%; }
    .col-xs-4  { width: 33.333%; }
    .col-xs-6  { width: 50%; }
    .col-xs-8  { width: 66.666%; }
    .col-xs-10 { width: 83.333%; }
    .col-xs-12 { width: 100%; }
    .visible-xs-inline-block { display: inline-block !important; }
    .pr-0-xs { padding-right: 0 !important; }
}
@media (min-width: 768px) {
    .visible-xs-inline-block { display: none !important; }
}

/* ── Compatibilidad BS3 → BS5 (clases renombradas) ──────────────────── */
/* pull-left / pull-right */
.pull-left  { float: left !important; }
.pull-right { float: right !important; }

/* sr-only → visually-hidden (ya existe en BS5, alias por compatibilidad) */
.sr-only {
    position: absolute; width: 1px; height: 1px;
    padding: 0; margin: -1px; overflow: hidden;
    clip: rect(0,0,0,0); white-space: nowrap; border: 0;
}

/* BS3 label → badge alias */
.label {
    display: inline-block; padding: 0.2em 0.6em 0.3em;
    font-size: 75%; font-weight: bold; line-height: 1;
    color: #fff; text-align: center; white-space: nowrap;
    vertical-align: baseline; border-radius: 0.25em;
    background-color: var(--itsos-primary);
}
.label-default  { background-color: #777; }
.label-primary  { background-color: var(--itsos-primary); }
.label-success  { background-color: var(--itsos-success); }
.label-info     { background-color: var(--itsos-info); }
.label-warning  { background-color: var(--itsos-warning); }
.label-danger   { background-color: var(--itsos-danger); }

/* btn-default → btn-secondary */
.btn-default {
    --bs-btn-color: #333;
    --bs-btn-bg: #fff;
    --bs-btn-border-color: #ccc;
    --bs-btn-hover-color: #333;
    --bs-btn-hover-bg: #e6e6e6;
    --bs-btn-hover-border-color: #adadad;
}

/* form-group (eliminado en BS5) */
.form-group { margin-bottom: 1rem; }

/* table-condensed → table-sm */
.table-condensed { --bs-table-cell-padding-y: 0.3rem; --bs-table-cell-padding-x: 0.3rem; }

/* fieldset tiene min-inline-size: min-content en UA stylesheet; impide que
   .input-group flex se expanda dentro de él */
fieldset { min-inline-size: 0; }

/* bs5-autocomplete.js envuelve el input en .bs5-ac-wrapper; dentro de .input-group
   ese div debe comportarse como flex item igual que .form-control */
.input-group .bs5-ac-wrapper {
    flex: 1 1 auto;
    width: 1%;
    min-width: 0;
    position: relative;
}

/* ── Calendario de turnos ─────────────────────────────────────────────────── */
#calendar { border: 0 !important; border-collapse: separate !important; border-spacing: 3px !important; background: transparent !important; }
#calendar thead tr th {
    background: #f1f3f5 !important;
    border: 0 !important;
    color: #6c757d;
    font-size: .68rem;
    font-weight: 700;
    letter-spacing: .06em;
    text-transform: uppercase;
    padding: 5px 2px !important;
    text-align: center;
}
#calendar tbody tr td {
    border: 0 !important;
    border-radius: 8px !important;
    width: 34px !important;
    height: 34px !important;
    min-width: 34px !important;
    text-align: center !important;
    vertical-align: middle !important;
    font-size: .82rem;
    padding: 0 !important;
    transition: transform .1s, box-shadow .1s;
}
/* disponible */
#calendar td.marca-hoy,
#calendar td.hoy,
#calendar .hoy {
    cursor: pointer;
    background: #198754 !important;
    color: #fff !important;
    border: 2px solid #ffc107 !important;
    border-radius: 8px !important;
    font-weight: 700;
    box-shadow: 0 2px 8px rgba(25,135,84,.3) !important;
}
#calendar td.marca-hoy:hover,
#calendar td.hoy:hover,
#calendar .hoy:hover { background: #157347 !important; transform: scale(1.08); }
#calendar td.marca-normal,
#calendar td.dia_normal {
    cursor: pointer;
    background: #d1e7dd !important;
    color: #0a3622 !important;
    font-weight: 600;
}
#calendar td.marca-normal:hover,
#calendar td.dia_normal:hover { background: #a3cfbb !important; transform: scale(1.08); box-shadow: 0 2px 6px rgba(25,135,84,.18) !important; }
/* tope */
#calendar td.dia_normal_tope {
    cursor: pointer;
    background: #fff3cd !important;
    color: #664d03 !important;
    font-weight: 600;
}
#calendar td.dia_normal_tope:hover { background: #ffe69c !important; transform: scale(1.08); }
/* sin horario */
#calendar td.dia_normal_sin_hor { color: #ced4da !important; cursor: default; background: transparent !important; font-weight: 400; }
/* feriado */
#calendar td.dia_feriado { cursor: default; background: #f8d7da !important; color: #842029 !important; }
/* caption / navegación de mes */
#calendar caption { caption-side: bottom; padding: 6px 0 2px; }
#calendar caption table { width: 100%; border-collapse: collapse !important; }
#calendar caption td { border: 0 !important; background: transparent !important; font-weight: 700; font-size: .82rem; color: #1a1a2e; text-align: center; padding: 2px !important; }

/* ── Barra de acción horarios ─────────────────────────────────────────────── */
.barra-accion-horarios {
    display: flex;
    align-items: center;
    gap: .5rem;
    flex-wrap: wrap;
    background: #fff;
    border-radius: .5rem;
    padding: .5rem .75rem;
    box-shadow: 0 2px 8px rgba(0,0,0,.08);
    margin-bottom: .75rem;
}
.barra-accion-horarios .btn-filtrar {
    margin-left: auto;
}

/* input-group-addon (BS3) */
.input-group-addon {
    padding: 0.375rem 0.75rem;
    font-size: 1rem;
    font-weight: 400;
    line-height: 1.5;
    color: #495057;
    background-color: #e9ecef;
    border: 1px solid #ced4da;
    border-radius: 0.375rem;
}

/* ── Validación BS3 → BS5 bridge ────────────────────────────────────────
   BS3 usaba has-error/has-success en el wrapper div.
   BS5 requiere is-invalid/is-valid en el input directamente.
   Este bridge propaga el estilo visual desde el wrapper a los inputs hijos,
   sin necesidad de modificar el JS existente.
   ─────────────────────────────────────────────────────────────────────── */

/* Error: borde rojo en el input hijo */
.has-validation .form-control,
.has-validation .form-select {
    border-color: #dc3545;
    padding-right: calc(1.5em + 0.75rem);
    background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");
    background-repeat: no-repeat;
    background-position: right calc(0.375em + 0.1875rem) center;
    background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
}
.has-validation .form-control:focus,
.has-validation .form-select:focus {
    border-color: #dc3545;
    box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);
}

/* Mensaje de error en rojo */
.has-validation .form-text {
    color: #dc3545 !important;
}

/* Éxito: borde verde en el input hijo */
.was-validated .form-control,
.was-validated .form-select {
    border-color: #198754;
    padding-right: calc(1.5em + 0.75rem);
    background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");
    background-repeat: no-repeat;
    background-position: right calc(0.375em + 0.1875rem) center;
    background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
}
.was-validated .form-control:focus,
.was-validated .form-select:focus {
    border-color: #198754;
    box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);
}

/* Mensaje de éxito en verde */
.was-validated .form-text {
    color: #198754 !important;
}

/* panel → card alias (mínimo para no romper vistas antiguas) */
.panel            { margin-bottom: 1.5rem; border: 1px solid #ddd; border-radius: 4px; }
.panel-heading    { padding: 0.75rem 1rem; background-color: #f5f5f5; border-bottom: 1px solid #ddd; border-radius: 3px 3px 0 0; }
.panel-body       { padding: 1rem; }
.panel-footer     { padding: 0.75rem 1rem; background-color: #f5f5f5; border-top: 1px solid #ddd; }
.panel-primary    { border-color: var(--itsos-primary); }
.panel-primary > .panel-heading { background-color: var(--itsos-primary); border-color: var(--itsos-primary); color: #fff; }
.panel-default > .panel-heading { background-color: #f5f5f5; }
.panel-success > .panel-heading { background-color: var(--itsos-success); border-color: var(--itsos-success); color: #fff; }
.panel-danger  > .panel-heading { background-color: var(--itsos-danger);  border-color: var(--itsos-danger);  color: #fff; }
.panel-warning > .panel-heading { background-color: var(--itsos-warning); border-color: var(--itsos-warning); color: #fff; }

/* well (BS3) */
.well { padding: 1rem; background-color: #f5f5f5; border: 1px solid #e3e3e3; border-radius: 4px; box-shadow: inset 0 1px 1px rgba(0,0,0,.05); }

/* Menú paciente (legacy) */
.menu-paciente ul li a { padding-right: 3px !important; padding-left: 3px !important; }

/* ── Portal: nav-links modernos (Turnos / Resultados / Familia) ─────── */
.portal-nav-link {
    display: flex !important;
    align-items: center;
    gap: 0.45rem;
    padding: 0.35rem 0.85rem !important;
    border-radius: 6px;
    color: var(--itsos-primary) !important;
    font-weight: 500;
    font-size: 0.875rem;
    white-space: nowrap;
    transition: background-color 0.15s, box-shadow 0.15s, color 0.15s;
    text-decoration: none;
}
.portal-nav-link img {
    opacity: 0.75;
    transition: opacity 0.15s;
    flex-shrink: 0;
}
.portal-nav-link:hover,
.portal-nav-link:focus {
    background-color: var(--itsos-neo-base);
    box-shadow: var(--itsos-neo-shadow-deep);
    color: var(--itsos-primary-dark) !important;
}
.portal-nav-link:hover img,
.portal-nav-link:focus img {
    opacity: 1;
}
.portal-nav-link.active,
.portal-nav-link.nav-active {
    background-color: var(--itsos-neo-base);
    box-shadow: var(--itsos-neo-shadow-deep);
    color: var(--itsos-primary-dark) !important;
    font-weight: 600;
}
.portal-nav-link.active img {
    opacity: 1;
}

/* Brand portal */
.portal-brand-logo  { display: inline-block; vertical-align: middle; }
.portal-brand-text  {
    font-weight: 700;
    font-size: 0.9rem;
    color: var(--itsos-primary);
    letter-spacing: 0.03em;
    text-transform: uppercase;
}

/* Dark mode */
[data-bs-theme="dark"] .portal-nav-link         { color: #7ec8d8 !important; }
[data-bs-theme="dark"] .portal-nav-link:hover,
[data-bs-theme="dark"] .portal-nav-link:focus   { color: #a8dce8 !important; }
[data-bs-theme="dark"] .portal-brand-text        { color: #7ec8d8; }

/* ── BS3 nav-stacked → BS5 flex-column ──────────────────────────────── */
/* En BS3 nav-stacked apilaba los ítems verticalmente; en BS5 esa clase
   no existe y .nav queda horizontal. Este bloque restaura el comportamiento. */
.nav.nav-stacked {
    flex-direction: column !important;
}
.nav.nav-stacked > li {
    width: 100%;
}
.nav.nav-stacked > li > a {
    display: block;
    padding: 0.5rem 1rem;
    border-radius: 4px;
    color: var(--itsos-gray-dark);
    text-decoration: none;
    transition: background-color 0.15s, box-shadow 0.15s;
}
.nav.nav-stacked > li > a:hover {
    background-color: var(--itsos-neo-base);
    box-shadow: var(--itsos-neo-shadow-deep);
    color: var(--itsos-primary);
}
.nav.nav-stacked > li.active > a,
.nav.nav-stacked > li.active > a:hover,
.nav.nav-stacked > li > a.active,
.nav.nav-stacked > li > a.active:hover {
    background-color: var(--itsos-primary);
    color: white;
    box-shadow: none;
}

/* =====================================================================
   MODO SIDEBAR  —  body.nav-left
   ===================================================================== */

/* ── Variable de ancho ───────────────────────────────────────────────── */
:root { --sidebar-width: 230px; }

/* ── Botón toggle de layout ─────────────────────────────────────────── */
#btn-toggle-nav {
    background: none;
    border: none;
    color: var(--itsos-primary);
    padding: 0.28rem 0.35rem;
    border-radius: 5px;
    cursor: pointer;
    display: flex;
    align-items: center;
    flex-shrink: 0;
    transition: background-color 0.15s, box-shadow 0.15s;
}
#btn-toggle-nav:hover {
    background-color: var(--itsos-neo-base);
    box-shadow: var(--itsos-neo-shadow-deep);
}
/* Mostrar ícono correcto según modo */
body:not(.nav-left) #btn-toggle-nav .icon-nav-to-top  { display: none; }
body:not(.nav-left) #btn-toggle-nav .icon-nav-to-left { display: block; }
body.nav-left       #btn-toggle-nav .icon-nav-to-left { display: none; }
body.nav-left       #btn-toggle-nav .icon-nav-to-top  { display: block; }

/* ── Body en modo sidebar ────────────────────────────────────────────── */
body.nav-left {
    padding-top: 0 !important;
    padding-left: var(--sidebar-width) !important;
    transition: padding 0.25s ease;
}

/* ── Navbar → Sidebar ────────────────────────────────────────────────── */
body.nav-left #menu-navegacion {
    width: var(--sidebar-width);
    height: 100vh;
    right: auto;
    flex-direction: column;
    border-bottom: none;
    overflow: hidden;
    border-right: 1px solid #d9d9d9;
    box-shadow: 4px 0 15px -4px rgba(0,0,0,0.12);
    overflow-y: auto;
    overflow-x: hidden;
    transition: width 0.25s ease;
}

body.nav-left #menu-navegacion .container-fluid {
    flex-direction: column;
    align-items: stretch;
    padding: 0;
    height: 100%;
    flex-wrap: nowrap;
    overflow: visible;
}

/* Área de marca en sidebar */
body.nav-left #navbar-brands {
    padding: 0.6rem 0.5rem 0.5rem;
    border-bottom: 1px solid #e9e9e9;
    flex-wrap: wrap;
}

/* Toggler móvil oculto en sidebar */
body.nav-left .navbar-toggler { display: none !important; }

/* Collapse siempre visible y vertical — scroll interno para que usuario quede fijo abajo */
body.nav-left #menu-navegacion .navbar-collapse {
    display: flex !important;
    flex-direction: column;
    flex-grow: 1;
    overflow-y: auto;
    overflow-x: hidden;
    order: unset !important;
    min-width: 0;
    min-height: 0;
}

/* Lista de módulos apilada */
body.nav-left #menu-navegacion .navbar-nav {
    flex-direction: column !important;
    flex-wrap: nowrap;
    overflow: visible;
    width: 100%;
    padding: 0.4rem 0.3rem;
}

/* Cada ítem ocupa todo el ancho */
body.nav-left #menu-navegacion .nav-item {
    width: 100%;
}

/* Links de módulos en sidebar */
body.nav-left #menu-navegacion .nav-link,
body.nav-left #menu-navegacion .nav-link.dropdown-toggle {
    width: 100%;
    padding: 0.5rem 0.75rem !important;
    font-size: 0.875rem !important;
    border-radius: 6px !important;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    display: flex !important;
    align-items: center;
    gap: 0.4rem;
}

/* Caret: apunta abajo (accordion) y rota al abrir */
body.nav-left #menu-navegacion .nav-link.dropdown-toggle::after {
    margin-left: auto;
    flex-shrink: 0;
    border-top: 0.35em solid currentColor;
    border-right: 0.3em solid transparent;
    border-bottom: 0;
    border-left: 0.3em solid transparent;
    vertical-align: middle;
    transition: transform 0.2s ease;
}
body.nav-left #menu-navegacion .nav-item.show .nav-link.dropdown-toggle::after {
    transform: rotate(180deg);
}

/* Accordion inline: el dropdown fluye dentro del sidebar (sin Popper flyout).
   position:static saca el menu del flujo de posicionamiento absoluto para
   que empuje el contenido del sidebar hacia abajo al abrirse. */
body.nav-left #menu-navegacion .dropdown-menu {
    position: static !important;
    transform: none !important;
    float: none;
    min-width: 0 !important;
    width: 100%;
    max-height: none !important;
    overflow: visible !important;
    border: none !important;
    border-top: 1px solid rgba(0,0,0,0.07) !important;
    border-radius: 0 !important;
    box-shadow: none !important;
    background-color: rgba(0,0,0,0.02);
    padding: 0.25rem 0 !important;
    margin: 0 !important;
}

/* Separador sidebar → ocultar */
body.nav-left #menu-navegacion #menu-usuario::before { display: none !important; }

/* Menú usuario al fondo del sidebar */
body.nav-left #menu-navegacion #menu-usuario {
    order: 10 !important;
    margin-left: 0 !important;
    flex-direction: column;
    border-top: 1px solid #e9e9e9;
    padding: 0.4rem 0;
    flex-shrink: 0;
}

body.nav-left #menu-navegacion #menu-usuario .navbar-nav {
    flex-direction: row !important;
    flex-wrap: wrap;
    align-items: center;
    width: 100%;
    padding: 0 0.3rem;
    gap: 0;
}

/* Íconos de usuario en sidebar: más compactos */
body.nav-left #menu-navegacion #menu-usuario .nav-icon-btn {
    padding: 0.38rem 0.45rem !important;
    border-radius: 6px !important;
}

/* Datos usuario en sidebar */
body.nav-left #menu-navegacion #menu-usuario a.datosUsuario-link {
    padding: 0.25rem 0.5rem;
    max-width: 100%;
    border-radius: 6px;
}
body.nav-left #menu-navegacion #menu-usuario a.datosUsuario-link .datosUsuario {
    font-size: 0.7rem;
    max-width: 100%;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* Dropdowns de usuario: abrir hacia arriba */
body.nav-left #menu-navegacion #menu-usuario .usuario-dropdown {
    bottom: 100% !important;
    top: auto !important;
    left: 0 !important;
    right: auto !important;
    transform: none !important;
    border-radius: 8px 8px 8px 0 !important;
}

/* Sticky headings: compensar sidebar */
body.nav-left .heading-sticky {
    top: 0;
}

/* ── Toggle día/noche compacto en el navbar de usuario ─────────────────── */
nav#menu-usuario .ris-theme-toggle-btn { min-width: 60px; }
nav#menu-usuario .ris-theme-toggle-track { width: 60px; height: 28px; }
nav#menu-usuario .ris-theme-toggle-track::after {
    left: 4px; right: 4px; bottom: 2px; height: 9px;
}
nav#menu-usuario .ris-theme-toggle-thumb {
    width: 20px; height: 20px; top: 3px; left: 3px;
}
nav#menu-usuario .ris-theme-toggle-thumb-crater-one  { top: 7px;  left: 5px;  width: 7px; height: 7px; }
nav#menu-usuario .ris-theme-toggle-thumb-crater-two  { top: 3px;  right: 4px; width: 4px; height: 4px; }
nav#menu-usuario .ris-theme-toggle-thumb-crater-three{ bottom: 3px; right: 3px; width: 4px; height: 4px; }
nav#menu-usuario .ris-theme-toggle-btn[data-theme="dark"] .ris-theme-toggle-thumb { transform: translateX(34px); }

/* ── kbd F10 en el botón Salir: discreto y pequeño ─────────────────────── */
nav#menu-usuario kbd {
    font-size: 0.52rem;
    padding: 1px 3px;
    opacity: 0.5;
    line-height: 1.2;
    vertical-align: middle;
}

/* =====================================================================
   CORRECCIONES POST-MIGRACIÓN BS3 → BS5
   ===================================================================== */

/* ── Radio / Checkbox: neutralizar color verde de was-validated ─────── */
/* Bootstrap 5 aplica color verde (#198754) a cualquier label hermano de
   un input :valid dentro de was-validated. Para radios/checkboxes con
   labels custom (class="btn-sm" u otras) esto genera texto verde no deseado. */
.was-validated input[type="radio"]:valid ~ label,
.was-validated input[type="checkbox"]:valid ~ label,
.was-validated input[type="radio"]:invalid ~ label,
.was-validated input[type="checkbox"]:invalid ~ label {
    color: inherit !important;
}
/* Evitar también el background-image (checkmark) en radios/checkboxes */
.was-validated input[type="radio"],
.was-validated input[type="checkbox"] {
    background-image: none !important;
}

/* ── group-radio: layout de opciones tipo botón ──────────────────────── */
/* Los grupos de radio en la ficha usan .group-radio con labels.btn-sm.
   El style debe parecer botones toggleables, no texto suelto. */
.group-radio {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.25rem;
}
.group-radio input[type="radio"] {
    display: none;
}
.group-radio label {
    display: inline-block;
    padding: 0.25rem 0.75rem;
    border: 1px solid #ced4da;
    border-radius: 0.375rem;
    cursor: pointer;
    font-size: 0.875rem;
    color: var(--itsos-gray-dark);
    background-color: #fff;
    transition: background-color 0.15s, color 0.15s, border-color 0.15s;
    margin: 0;
    user-select: none;
}
.group-radio input[type="radio"]:checked + label {
    background-color: var(--itsos-primary);
    border-color: var(--itsos-primary);
    color: #fff;
}
.group-radio label:hover {
    background-color: var(--itsos-neo-base);
    border-color: var(--itsos-primary);
    color: var(--itsos-primary);
}
.group-radio input[type="radio"]:disabled + label,
.group-radio label.radio-disabled {
    opacity: 0.6;
    cursor: not-allowed;
}

/* ── Filtros en línea (formularios de búsqueda) ──────────────────────── */
/* Muchos filtros usan .row con cols que en BS5 apilan verticalmente en
   pantallas medianas cuando usan col-sm-* sin col-md-* / col-lg-*. */
.filtros-inline .row > [class*="col-"] {
    margin-bottom: 0.5rem;
}

/* ── Espaciado de sección en filtros de módulos ──────────────────────── */
/* Reduce el exceso de mb-5 en filas de filtros que quedó de BS3 donde
   esa clase tenía efecto menor. Aplica solo dentro de contenedores con
   id="filtros" para no romper otros usos globales. */
#filtros.row,
#filtros.mb-5 {
    margin-bottom: 0.75rem !important;
}

/* ── Encabezados de página: padding top reducido ─────────────────────── */
/* En BS5 el wrapper .heading-sticky + contenedor-fluid suma padding extra
   respecto a BS3. Se reduce para recuperar la densidad visual anterior. */
.heading-sticky + .container-fluid,
.heading-sticky + div > .container-fluid {
    padding-top: 0.5rem;
}

/* ── BS3 badge-* aliases → BS5 bg-* ──────────────────────────────────── */
/* En BS3 los colores de badge se aplicaban con .badge-success, .badge-danger,
   etc. En BS5 esas clases no existen; se usa .badge.bg-success, etc.
   Estas reglas de compatibilidad evitan editar los ~92 archivos afectados. */
.badge.badge-primary   { background-color: var(--bs-primary)   !important; color: #fff; }
.badge.badge-secondary { background-color: var(--bs-secondary) !important; color: #fff; }
.badge.badge-success   { background-color: var(--bs-success)   !important; color: #fff; }
.badge.badge-danger    { background-color: var(--bs-danger)    !important; color: #fff; }
.badge.badge-warning   { background-color: var(--bs-warning)   !important; color: #212529; }
.badge.badge-info      { background-color: var(--bs-info)      !important; color: #fff; }
.badge.badge-light     { background-color: var(--bs-light)     !important; color: #212529; }
.badge.badge-dark      { background-color: var(--bs-dark)      !important; color: #fff; }

/* ── BS3 nav-tabs: compatibilidad sin clases nav-item / nav-link ─────── */
/* En BS3, los <li> de .nav-tabs no necesitaban nav-item y los <a> no
   necesitaban nav-link. En BS5 esas clases son obligatorias para el
   estilo activo. Se emula aquí para páginas no migradas. */
.nav-tabs > li:not(.nav-item) {
    display: inline-flex;
}
.nav-tabs > li:not(.nav-item) > a {
    display: block;
    padding: 0.5rem 1rem;
    color: var(--itsos-primary, #0d6efd);
    text-decoration: none;
    border: 1px solid transparent;
    border-top-left-radius: 0.375rem;
    border-top-right-radius: 0.375rem;
    transition: color 0.15s, background-color 0.15s, border-color 0.15s;
}
.nav-tabs > li:not(.nav-item) > a:hover {
    border-color: #e9ecef #e9ecef #dee2e6;
    background-color: #f8f9fa;
}
.nav-tabs > li:not(.nav-item).active > a {
    color: #495057;
    background-color: #fff;
    border-color: #dee2e6 #dee2e6 #fff;
}

/* ── BS3 .mt-5 en botones: en BS3 era ~5px custom; en BS5 es 3rem ─────── */
/* La clase mt-5 en botones de cabecera (heading-sticky) y grupos de
   formularios era custom en BS3. En BS5 margin-top:3rem desplaza mucho.
   Se neutraliza aquí para evitar editar ~39 archivos. */
.heading-sticky .btn.mt-5,
.btn-group .btn.mt-5,
.col-sm-4 .btn.mt-5,
.col-md-4 .btn.mt-5,
.col-sm-6 .btn.mt-5 {
    margin-top: 0.25rem !important;
}

/* ── Footer de acciones en modo sidebar ──────────────────────────────── */
/* El footer-acciones es position:fixed left:0 width:100%. En modo sidebar
   el nav ocupa 230px a la izquierda, por lo que hay que compensar. */
body.nav-left .footer-acciones {
    left: var(--sidebar-width);
    width: calc(100% - var(--sidebar-width));
}

/* ── Sidebar accordion: layout y estilos de items ───────────────────── */
/* En modo accordion el dropdown fluye inline; columnas apiladas y sin
   márgenes para que aprovechen todo el ancho del sidebar. */
body.nav-left #menu-navegacion .dropdown-menu .row {
    flex-direction: column;
    margin: 0;
}
body.nav-left #menu-navegacion .dropdown-menu [class*="col-"] {
    width: 100%;
    max-width: 100%;
    padding-left: 0;
    padding-right: 0;
}
body.nav-left #menu-navegacion .dropdown-menu .dropdown-list {
    padding: 0 !important;
}
body.nav-left #menu-navegacion .dropdown-menu .dropdown-list li a {
    padding-left: 2.25rem !important;
    font-size: 0.82rem !important;
    border-radius: 0 !important;
    white-space: normal !important;
    word-break: break-word;
    line-height: 1.3;
    color: var(--itsos-gray) !important;
    border-bottom: 1px solid rgba(0,0,0,0.04);
}
body.nav-left #menu-navegacion .dropdown-menu .dropdown-list li:last-child a {
    border-bottom: none;
}
body.nav-left #menu-navegacion .dropdown-menu .dropdown-list li a:hover {
    background-color: var(--itsos-neo-base) !important;
    box-shadow: none !important;
    color: var(--itsos-primary, #0d6efd) !important;
    padding-left: 2.5rem !important;
    transition: padding-left 0.15s ease;
}


/* ── Conciliación de órdenes — listado de prestaciones ───────────────── */
.prestaciones-container {
  display: flex;
  flex-direction: column;
  gap: 5px;
  margin-bottom: 20px;
}
.prestacion-header {
  display: flex;
  font-weight: bold;
  background-color: #113d64;
  color: white;
  padding: 10px;
  border-radius: 5px;
}
.prestacion-header div {
  flex: 1;
  text-align: center;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  padding: 0 4px;
}
.prestacion-item {
  display: flex;
  flex-wrap: wrap;
  background-color: #f4f8fb;
  border: 1px solid #e3e6ea;
  border-radius: 5px;
  padding: 10px;
  transition: transform 0.3s ease, background-color 0.3s ease, box-shadow 0.3s ease;
}
.prestacion-item:hover {
  background-color: rgb(255, 255, 255);
  transform: scale(1.00);
  box-shadow: 0 6px 12px rgba(0, 0, 0, 0.15);
  border-color: rgb(172, 200, 243);
}
.prestacion-item div {
  flex: 1;
  padding: 5px;
  text-align: center;
  font-size: 1.5rem;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  min-width: 0;
}
.prestacion-item .prestacion-badges {
  flex-basis: 100%;
  white-space: normal;
  overflow: visible;
  text-overflow: clip;
  min-width: unset;
}
@media (max-width: 1000px) {
  .prestacion-header div {
    font-size: 0;
  }
  .prestacion-header div::before {
    content: attr(data-short);
    font-size: 11px;
    display: block;
  }
}
@media (max-width: 768px) {
  .prestacion-header {
    display: none;
  }
  .prestacion-item {
    flex-direction: column;
    text-align: left;
  }
  .prestacion-item div {
    padding: 5px 0;
  }
  .prestacion-item div::before {
    content: attr(class) ": ";
    font-weight: bold;
    text-transform: capitalize;
  }
}
.prestacion-item.prestacion-disabled {
  position: relative !important;
  overflow: hidden !important;
  transition: all 0.3s ease;
  user-select: none;
  background-color: #fcfdfe !important;
}
.prestacion-item.prestacion-disabled::before {
  content: "";
  position: absolute;
  top: 0; left: 0; right: 0; bottom: 0;
  background: rgba(255, 255, 255, 0.45);
  backdrop-filter: blur(0.6px);
  z-index: 5;
  pointer-events: all;
}
.mensaje-bloqueo {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  z-index: 10;
  display: flex;
  align-items: center;
  background: #ffffff !important;
  padding: 8px 24px;
  border-radius: 6px;
  box-shadow: 0 3px 12px rgba(0, 0, 0, 0.12) !important;
  border: 1px solid #d1d9e6;
  white-space: nowrap;
  pointer-events: auto !important;
}
.mensaje-bloqueo span {
  font-weight: 500;
  color: #475569 !important;
  font-size: 1.25rem;
  letter-spacing: 0.02em;
}
.btn-desbloquear-link {
  background: none !important;
  border: none !important;
  padding: 0 0 0 5px !important;
  color: #475569 !important;
  text-decoration: underline;
  font-weight: 700;
  cursor: pointer;
  font-size: 1.25rem;
  display: inline;
}
.btn-desbloquear-link:hover {
  color: #1e293b !important;
  text-decoration: none;
}
.prestacion-item.prestacion-disabled div,
.prestacion-item.prestacion-disabled span:not(.mensaje-bloqueo) {
  opacity: 1.0 !important;
  filter: grayscale(0.25);
}

/* ── BS5: compatibilidad clase .hidden (equivalente a .d-none) ── */
.hidden { display: none !important; }

/* ── Destacar cobertura principal al ordenarse ── */
.contacto-item.highlight-main {
    background-color: #e6ffec !important;
    border: 1px solid #4CAF50 !important;
    box-shadow: 0 10px 20px rgba(76, 175, 80, 0.4);
    transform: translateY(-5px) scale(1.01);
    z-index: 10;
    transition: none;
}

/* ── Sección coberturas / instituciones ── */
#contenedor-instituciones {
    display: flex;
    flex-direction: column;
    gap: 12px;
}
.institucion-item {
    margin-bottom: 15px;
    padding: 0;
    border: 1px solid #ddd;
    border-radius: 6px;
    box-shadow: 0 1px 3px rgba(0,0,0,0.05);
    background-color: #fff;
    display: flex;
    overflow: hidden;
    transition: opacity 0.3s ease;
}
.card-sidebar {
    width: 6px;
    background-color: #17a2b8;
    flex-shrink: 0;
    border-right: 1px solid #eee;
}
.card-main-content {
    flex-grow: 1;
    padding: 10px 15px;
}
.institucion-info {
    display: flex;
    justify-content: space-between;
    align-items: center;
    width: 100%;
}
.institucion-actions {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    gap: 6px;
}
.actions-row-top {
    display: flex;
    justify-content: flex-end;
}
.actions-row-bottom {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    justify-content: flex-end;
    align-items: center;
}
.actions-row-bottom .principal-container label {
    white-space: nowrap;
    margin-bottom: 0;
}
.info-afiliado {
    display: flex;
    gap: 4px;
    flex-wrap: wrap;
}
@media (max-width: 767px) {
    .institucion-info {
        flex-direction: column;
        align-items: stretch;
    }
    .institucion-actions {
        align-items: stretch;
        width: 100%;
        margin-top: 8px;
    }
    .actions-row-top { justify-content: flex-start; }
    .actions-row-bottom { flex-direction: column; }
    .actions-row-bottom .principal-container,
    .actions-row-bottom .activar-desactivar-institucion { width: 100%; }
    .actions-row-bottom .principal-container label {
        width: 100%;
        text-align: center;
    }
}
/* Spinner / bloqueo visual durante cambio de cobertura principal */
@keyframes inst-spin { to { transform: rotate(360deg); } }
.institucion-item { transition: opacity 0.4s ease-out, filter 0.4s ease-out; }
.inst-bloqueada {
    opacity: 0.2 !important;
    filter: blur(2px) grayscale(50%) !important;
    pointer-events: none !important;
}
.inst-loading-spinner {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    margin-left: 7px;
    color: #17a2b8;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.03em;
    vertical-align: middle;
}
.inst-spin-circle {
    display: inline-block;
    width: 11px;
    height: 11px;
    border: 2px solid #17a2b8;
    border-top-color: transparent;
    border-radius: 50%;
    animation: inst-spin 0.65s linear infinite;
    flex-shrink: 0;
}

/* ── Bottom Sheet mobile (edición de cobertura) ── */
@media (max-width: 767px) {
    #inst-bottom-sheet {
        position: fixed;
        inset: 0;
        z-index: 1060;
    }
    .inst-sheet-backdrop {
        position: absolute;
        inset: 0;
        background: rgba(0,0,0,0.45);
        opacity: 0;
        transition: opacity 0.3s ease;
    }
    #inst-bottom-sheet.inst-sheet-open .inst-sheet-backdrop { opacity: 1; }
    .inst-sheet-panel {
        position: absolute;
        bottom: 0;
        left: 0;
        right: 0;
        background: #fff;
        border-radius: 18px 18px 0 0;
        max-height: 88vh;
        overflow-y: auto;
        -webkit-overflow-scrolling: touch;
        transform: translateY(100%);
        transition: transform 0.38s cubic-bezier(0.32,0.72,0,1);
        box-shadow: 0 -4px 32px rgba(0,0,0,0.18);
    }
    #inst-bottom-sheet.inst-sheet-open .inst-sheet-panel { transform: translateY(0); }
    .inst-sheet-handle {
        width: 36px;
        height: 4px;
        background: #dde1e7;
        border-radius: 2px;
        margin: 10px auto 0;
    }
    .inst-sheet-header {
        display: flex;
        align-items: center;
        justify-content: space-between;
        padding: 12px 16px 10px;
        border-bottom: 1px solid #f0f2f5;
        position: sticky;
        top: 0;
        background: #fff;
        z-index: 1;
    }
    .inst-sheet-title-wrap {
        display: flex;
        align-items: center;
        gap: 8px;
        flex: 1;
        min-width: 0;
    }
    .inst-sheet-nombre {
        font-weight: 700;
        font-size: 15px;
        color: #1a202c;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
    }
    .inst-sheet-close {
        background: #f0f2f5;
        border: none;
        border-radius: 50%;
        width: 30px;
        height: 30px;
        display: flex;
        align-items: center;
        justify-content: center;
        color: #555;
        flex-shrink: 0;
        cursor: pointer;
        font-size: 12px;
        padding: 0;
    }
    .inst-sheet-close:hover { background: #e2e6ea; }
    .inst-sheet-body {
        padding: 16px;
    }
    .inst-sheet-body .collapse {
        display: block !important;
        height: auto !important;
        overflow: visible !important;
    }
    body.inst-sheet-open { overflow: hidden; }
    /* Status bar dentro del sheet */
    .inst-sheet-status {
        display: flex;
        align-items: center;
        gap: 8px;
        padding: 8px 16px;
        font-size: 13px;
        font-weight: 600;
        border-bottom: 1px solid transparent;
    }
    .inst-sheet-status-guardando { background:#e8f4f8; color:#17a2b8; border-bottom-color:#bee5eb; }
    .inst-sheet-status-guardado  { background:#e9f7ef; color:#1a7a4a; border-bottom-color:#b7dfca; }
    .inst-sheet-status-error     { background:#fdf0f0; color:#c0392b; border-bottom-color:#f5c6cb; }
    /* Chip cobertura principal */
    .inst-sheet-principal-chip {
        display: inline-flex;
        align-items: center;
        gap: 4px;
        padding: 3px 10px 3px 7px;
        background: linear-gradient(135deg,#0f766e 0%,#17a2b8 100%);
        color: #fff;
        border-radius: 20px;
        font-size: 11px;
        font-weight: 700;
        letter-spacing: 0.2px;
        white-space: nowrap;
        opacity: 0;
        animation: inst-chip-in 0.45s cubic-bezier(0.34,1.56,0.64,1) 0.1s forwards;
    }
    @keyframes inst-chip-in {
        from { opacity:0; transform:scale(0.6) translateY(4px); }
        to   { opacity:1; transform:scale(1) translateY(0); }
    }
    /* Warning plan pendiente en sheet */
    .inst-sheet-plan-warning {
        display: flex;
        align-items: flex-start;
        gap: 10px;
        padding: 11px 14px;
        background: #fffbeb;
        border-left: 3px solid #f59e0b;
        color: #92400e;
        font-size: 13px;
        margin-bottom: 10px;
        border-radius: 0 6px 6px 0;
    }
    .inst-sheet-plan-warning .material-icons {
        color: #f59e0b;
        font-size: 17px;
        flex-shrink: 0;
        margin-top: 1px;
    }
    .inst-sheet-plan-warning strong { display:block; font-size:13px; margin-bottom:2px; }
    .inst-sheet-plan-warning small  { display:block; font-size:12px; color:#b45309; }
    /* Shake al intentar cerrar con plan pendiente */
    @keyframes inst-panel-shake {
        0%,100% { transform:translateX(0); }
        20%     { transform:translateX(-7px); }
        40%     { transform:translateX(7px); }
        60%     { transform:translateX(-4px); }
        80%     { transform:translateX(4px); }
    }
    .inst-sheet-panel.inst-shake { animation:inst-panel-shake 0.4s ease; }
    /* Badge activo/inactivo en mobile */
    .badge-activo {
        padding: 3px 8px;
        border-radius: 12px;
        background-color: #e8f5e9;
        color: #27ae60;
        font-weight: bold;
        font-size: 11px;
        letter-spacing: 0.5px;
        text-transform: uppercase;
        margin-left: 10px;
    }
    .institucion-detalle-collapse {
        border-top: 1px dashed #f0f0f0;
        padding-top: 10px;
        padding-bottom: 5px;
        padding-left: 15px;
        padding-right: 15px;
    }
    .badge-status-institucion {
        padding: 2px 8px;
        border-radius: 10px;
        font-size: 10px;
        font-weight: 700;
        display: inline-block;
        vertical-align: middle;
        letter-spacing: 0.4px;
        text-transform: uppercase;
    }
}

/* ── Hint buscador de institución (buscando / sin resultados) ── */
.bus-ins-hint {
    display: none;
    align-items: center;
    gap: 6px;
    margin-top: 5px;
    font-size: 12px;
    line-height: 1.4;
    border-radius: 6px;
    padding: 5px 10px;
    animation: bus-ins-hint-in 0.2s ease;
}
@keyframes bus-ins-hint-in {
    from { opacity:0; transform:translateY(-4px); }
    to   { opacity:1; transform:translateY(0); }
}
.bus-ins-hint--searching {
    display: flex;
    background: #f0f9ff;
    color: #0369a1;
    border: 1px solid #bae6fd;
}
.bus-ins-hint--searching .inst-spin-circle {
    border-color: #0369a1;
    border-top-color: transparent;
}
.bus-ins-hint--empty {
    display: flex;
    background: #fafafa;
    color: #6b7280;
    border: 1px solid #e5e7eb;
}
.bus-ins-hint--empty .material-icons { opacity:0.5; font-size:11px; }
.bus-ins-hint--empty em { font-style:normal; font-weight:600; color:#374151; }

/* ── Badges activo/inactivo (desktop) ── */
.badge-activo {
    background-color: #e8f5e9;
    color: #27ae60;
    border: 1px solid #c8e6c9;
}
.badge-inactivo-institucion {
    background-color: #f1f3f5;
    color: #868e96;
    border: 1px solid #dee2e6;
}

/* ── Botón Principal ── */
.principal-container .btn-check {
    position: absolute !important;
    width: 1px !important; height: 1px !important;
    padding: 0 !important; margin: -1px !important;
    overflow: hidden !important;
    clip: rect(0,0,0,0) !important;
    white-space: nowrap !important;
    border: 0 !important;
    opacity: 0 !important;
}
.btn-principal {
    background-color: transparent;
    border: 1px solid #ced4da;
    color: #adb5bd;
    font-size: 12px;
    padding: 3px 10px;
    border-radius: 4px;
    cursor: pointer;
    white-space: nowrap;
    line-height: 1.5;
    transition: background-color 0.2s, color 0.2s, border-color 0.2s;
}
.principal-container .btn-check:checked + .btn-principal {
    background-color: #28a745;
    border-color: #28a745;
    color: #ffffff;
}
.principal-container .btn-check:disabled + .btn-principal {
    opacity: 0.45;
    cursor: not-allowed;
}
.activar-desactivar-institucion { white-space:nowrap; font-size:12px; }
.btn-toggle-collapse {
    background: none; border: none; padding: 0;
    color: #0868DD; cursor: pointer;
    font-size: 13px; text-decoration: none;
    display: flex; align-items: center;
}
.btn-toggle-collapse:focus  { outline: none; }
.btn-toggle-collapse:hover  { text-decoration: underline; color: #0950a0; }
.institucion-detalle-collapse { border-top: 1px dashed #dee2e6; }
.institucion-item.save-error {
    border-color: #d9534f !important;
    border-left-color: #d9534f !important;
    background-color: #fff5f5;
}
.save-error .nombre-ins-display { color: #a94442; }

/* ── Spin / destacado ── */
@keyframes spin { from{transform:rotate(0deg);} to{transform:rotate(360deg);} }
.spin { display:inline-block; animation:spin 1s infinite linear; }
@keyframes destelloSutil {
    0%   { box-shadow:0 0 0px rgba(0,123,255,0);   border-color:#ddd; }
    50%  { box-shadow:0 0 10px rgba(0,123,255,0.5); border-color:#007bff; }
    100% { box-shadow:0 0 0px rgba(0,123,255,0);   border-color:#ddd; }
}
.resaltado-atencion { animation:destelloSutil 1.5s ease-in-out; }

/*--------------------------CHAT----------------------------*/
#chat-panel{position:fixed;bottom:0;right:20px;width:360px;background:var(--ris-surface-base,#fff);border-radius:12px 12px 0 0;box-shadow:0 -2px 24px rgba(0,0,0,.22);z-index:9999;display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;max-height:520px;transform:translateY(100%);transition:transform .28s cubic-bezier(.4,0,.2,1);}
#chat-panel.chat-panel-open{transform:translateY(0);}
#chat-panel.chat-panel-minimized{transform:translateY(calc(100% - 44px));}
#chat-panel-header{display:-webkit-flex;display:flex;justify-content:space-between;align-items:center;padding:10px 12px;background:#00576d;color:#fff;border-radius:12px 12px 0 0;cursor:pointer;user-select:none;flex-shrink:0;}
#chat-panel-header>span{font-weight:600;font-size:10pt;display:-webkit-flex;display:flex;align-items:center;gap:6px;}
.chat-panel-actions{display:-webkit-flex;display:flex;gap:2px;}
.chat-panel-actions button{background:none;border:none;color:#fff;cursor:pointer;padding:2px 5px;border-radius:4px;line-height:1;opacity:.8;transition:opacity .15s,background .15s;display:-webkit-flex;display:flex;align-items:center;}
.chat-panel-actions button:hover{opacity:1;background:rgba(255,255,255,.18);}
#chat2{-webkit-flex:1;flex:1;overflow:visible;display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;min-height:0;}
@keyframes chat-spin{to{transform:rotate(360deg);}}
.chat-search-spinner{display:inline-block;width:10px;height:10px;border:2px solid #ccc;border-top-color:#00576d;border-radius:50%;animation:chat-spin .7s linear infinite;vertical-align:middle;margin-right:3px;}

/* ── Paneles flotantes legacy ──────────────────────────────── */
#env_msj {
  font-size: 10pt;
  background: var(--ris-surface-base, #fff);
  width: 300px;
  height: 200px;
  position: absolute;
  border: 2px solid #6ba61c;
  z-index: 1;
}
#rec_msj {
  font-size: 10pt;
  background: var(--ris-surface-base, #fff);
  width: 300px;
  height: 200px;
  position: absolute;
  border: 2px solid #dc691d;
  z-index: 1;
}

/* ── Barra búsqueda destinatario ───────────────────────────── */
#usuarios_chat {
  padding: 8px 10px 6px;
  background: var(--ris-surface-base, #fff);
  border-bottom: 1px solid var(--ris-surface-level-2, #e0e0e0);
  font-size: 10pt;
  position: relative;
  box-sizing: border-box;
}
#usuarios_chat .row{margin-left:0;margin-right:0;}
#usuarios_chat .col{padding-left:0;padding-right:0;}
#buscador_ope_r_chat{width:100%;box-sizing:border-box;}
#usuarios_chat input[type="text"] {
  background: var(--ris-surface-level-1, #f5f6f8);
  color: var(--ris-text-color, #111);
  border: 1px solid var(--ris-surface-level-2, #ddd) !important;
  border-radius: 20px !important;
  padding: 7px 36px 7px 14px !important;
  font-size: 10pt;
  width: 100% !important;
  box-sizing: border-box;
  transition: border-color .2s, background .2s;
}
#usuarios_chat input[type="text"]:focus {
  border-color: #00576d !important;
  outline: none;
  background: var(--ris-surface-base, #fff);
}

/* ── Contenedor de mensajes ────────────────────────────────── */
#contenedor_chat {
  background-color: #e5ddd5;
  background-image: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23c8bfb5' fill-opacity='0.18'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
  border: none;
  height: 260px;
  overflow-y: auto;
  overflow-x: hidden;
  padding: 10px 8px;
  box-sizing: border-box;
  scroll-behavior: smooth;
  scrollbar-width: thin;
  scrollbar-color: rgba(0,0,0,.2) transparent;
}
html.theme-dark #contenedor_chat {
  background-color: #0d1117;
  background-image: none;
}
#contenedor_chat::-webkit-scrollbar { width: 5px; }
#contenedor_chat::-webkit-scrollbar-track { background: transparent; }
#contenedor_chat::-webkit-scrollbar-thumb {
  background-color: rgba(0,0,0,.25);
  border-radius: 10px;
}

/* ── Fila de mensaje ───────────────────────────────────────── */
.cont_msj_chat {
  display: flex;
  margin: 2px 4px;
  -webkit-animation: chatMsgIn .15s ease-out;
  animation: chatMsgIn .15s ease-out;
}
.cont_msj_env { justify-content: flex-end; }
.cont_msj_rec { justify-content: flex-start; }

@-webkit-keyframes chatMsgIn {
  from { opacity: 0; -webkit-transform: translateY(6px); transform: translateY(6px); }
  to   { opacity: 1; -webkit-transform: translateY(0);   transform: translateY(0); }
}
@keyframes chatMsgIn {
  from { opacity: 0; transform: translateY(6px); }
  to   { opacity: 1; transform: translateY(0); }
}

/* ── Burbuja ───────────────────────────────────────────────── */
.msj_chat {
  position: relative;
  max-width: 72%;
  min-width: 80px;
  font-size: 10pt;
  font-style: normal;
  border-radius: 7.5px;
  padding: 6px 10px 4px 10px;
  box-shadow: 0 1px 1px rgba(0,0,0,.18);
  word-break: break-word;
  border: none;
  display: inline-block;
}
.msj_chat p {
  text-align: left;
  margin: 0 0 2px 0;
  line-height: 1.45;
  color: var(--ris-text-color, #111);
}

/* Enviado — verde, cola derecha */
.env_chat {
  background-color: #d9f7be;
  border-top-right-radius: 2px;
}
html.theme-dark .env_chat { background-color: #1a4731; }
html.theme-dark .env_chat p { color: #e8f5e9; }
.env_chat::after {
  content: '';
  position: absolute;
  top: 0; right: -7px;
  width: 0; height: 0;
  border-style: solid;
  border-width: 8px 0 0 8px;
  border-color: transparent transparent transparent #d9f7be;
}
html.theme-dark .env_chat::after {
  border-color: transparent transparent transparent #1a4731;
}

/* Recibido — blanco, cola izquierda */
.rec_chat {
  background-color: var(--ris-surface-base, #ffffff);
  border-top-left-radius: 2px;
}
html.theme-dark .rec_chat { background-color: var(--ris-surface-level-2, #2c2c2c); }
.rec_chat::after {
  content: '';
  position: absolute;
  top: 0; left: -7px;
  width: 0; height: 0;
  border-style: solid;
  border-width: 8px 8px 0 0;
  border-color: transparent #ffffff transparent transparent;
}
html.theme-dark .rec_chat::after {
  border-color: transparent var(--ris-surface-level-2, #2c2c2c) transparent transparent;
}

/* ── Timestamp ─────────────────────────────────────────────── */
.hora_chat {
  display: -webkit-flex;
  display: flex;
  -webkit-justify-content: flex-end;
  justify-content: flex-end;
  -webkit-align-items: center;
  align-items: center;
  gap: 3px;
  font-size: 7.5pt;
  color: #667781;
  margin-top: 2px;
  line-height: 1;
}
html.theme-dark .hora_chat { color: #8696a0; }
.tick-sent { color: #8696a0; }
.tick-read { color: #53bdeb; }

/* ── Separador de fecha ────────────────────────────────────── */
.separator_chat {
  display: flex;
  align-items: center;
  text-align: center;
  margin: 12px 4px;
  font-size: 8.5pt;
  color: #54656f;
  font-weight: 500;
}
html.theme-dark .separator_chat { color: #aebac1; }
.separator_chat::before,
.separator_chat::after {
  content: '';
  flex: 1;
  border-bottom: 1px solid rgba(0,0,0,.12);
}
html.theme-dark .separator_chat::before,
html.theme-dark .separator_chat::after { border-bottom-color: rgba(255,255,255,.12); }
.separator_chat::before { margin-right: .5em; }
.separator_chat::after  { margin-left:  .5em; }
.separator_chat span {
  background: #d1c4b5;
  color: #54656f;
  padding: 2px 10px;
  border-radius: 12px;
  font-size: 8pt;
  letter-spacing: .2px;
}
html.theme-dark .separator_chat span { background: #182229; color: #aebac1; }

/* ── Zona input ────────────────────────────────────────────── */
#botones_chat {
  display: -webkit-flex;
  display: flex;
  -webkit-align-items: flex-end;
  align-items: flex-end;
  gap: 6px;
  padding: 6px 8px;
  background: var(--ris-surface-base, #f0f2f5);
  border-top: 1px solid var(--ris-surface-level-2, #ddd);
  box-sizing: border-box;
}
#txt_chat {
  -webkit-flex: 1;
  flex: 1;
  text-transform: initial;
  resize: none;
  border-radius: 12px !important;
  border: none !important;
  padding: 8px 12px !important;
  font-size: 10pt;
  line-height: 1.4;
  background: var(--ris-surface-level-1, #fff) !important;
  color: var(--ris-text-color, #111) !important;
  box-shadow: none !important;
  max-height: 100px;
  min-height: 38px;
  overflow-y: auto;
  scrollbar-width: thin;
}
html.theme-dark #txt_chat {
  background: var(--ris-surface-level-2, #2c2c2c) !important;
  color: var(--ris-text-color, #f0f0f0) !important;
}
#txt_chat:focus { outline: none; }

#btn_env_chat {
  flex-shrink: 0;
  width: 40px;
  height: 40px;
  padding: 0;
  border-radius: 50%;
  background: #00576d;
  border: none;
  color: #fff;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  transition: background .2s, transform .1s;
  box-shadow: 0 2px 5px rgba(0,0,0,.25);
}
#btn_env_chat:hover { background: #004a5c; transform: scale(1.05); }
#btn_env_chat:active { transform: scale(.95); }

#num_car_chat {
  display: block;
  font-size: 7.5pt;
  color: #8696a0;
  text-align: right;
  padding: 0 8px 2px;
  min-height: 14px;
  width: 100%;
}

.chat-status-dot {
  width: 9px;
  height: 9px;
  border-radius: 50%;
  -webkit-flex-shrink: 0;
  flex-shrink: 0;
  display: inline-block;
}
.chat-status-dot.online  { background: #25d366; }
.chat-status-dot.offline { background: #adb5bd; }

#id_ope_r_chat option { padding: 5px; }

/* ── Agrupación de mensajes consecutivos ──────────────────── */

/* Margen entre mensajes del mismo grupo: compacto */
.msj-grupo-mid {
  margin-top: 1px !important;
}

/* Margen entre grupos de remitentes distintos: más espacio */
.msj-grupo-first {
  margin-top: 8px !important;
}

/* Sin cola: reemplazar cola triangular por esquina redondeada */
.msj-no-cola .env_chat::after,
.msj-no-cola .rec_chat::after {
  display: none;
}

/* Enviado en grupo (no último): esquina inferior derecha redondeada */
.msj-env-mid {
  border-bottom-right-radius: 4px !important;
  border-top-right-radius: 7.5px !important;
}

/* Recibido en grupo (no último): esquina inferior izquierda redondeada */
.msj-rec-mid {
  border-bottom-left-radius: 4px !important;
  border-top-left-radius: 7.5px !important;
}

/* Nombre del remitente (primer mensaje del grupo recibido) */
.msj-nombre-remitente {
  display: block;
  font-size: 7.5pt;
  font-weight: 600;
  color: #00576d;
  margin-bottom: 2px;
  letter-spacing: .2px;
}

html.theme-dark .msj-nombre-remitente {
  color: #4db6c8;
}

/* Burbuja: ancho mínimo para mensajes cortos */
.msj_chat {
  min-width: 70px;
}

/* El timestamp no debe quedar partido en línea propia en mensajes cortos */
.msj_chat .hora_chat {
  white-space: nowrap;
}

/*--------------------------FIN CHAT----------------------------*/

/* =====================================================================
   GROUP-CHECKBOX / GROUP-CHECKBOX-DAY — Checkboxes con estilo de botón
   Migrado de Bootstrap 3 → Bootstrap 5
   ===================================================================== */

/* Oculta el input nativo */
.group-checkbox input[type="checkbox"],
.group-checkbox-day input[type="checkbox"] {
    opacity: 0;
    position: fixed;
    width: 0;
    pointer-events: none;
}

/* Label base: simula un btn btn-outline-secondary de BS5 */
.group-checkbox label,
.group-checkbox-day label {
    display: inline-block;
    padding: 0.25rem 0.75rem;        /* equivalente a btn-sm */
    font-size: 0.875rem;
    line-height: 1.5;
    font-weight: 400;
    text-align: center;
    white-space: nowrap;
    vertical-align: middle;
    cursor: pointer;
    user-select: none;
    background-color: #fff;
    color: #495057;
    border: 1px solid #65778B;
    border-radius: 4px;
    margin-bottom: 5px;
    transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;
}

/* Días (circular) */
.group-checkbox-day label {
    padding: 0.5em 0.83em;
    border-radius: 50%;
}

/* Estado seleccionado */
.group-checkbox input[type="checkbox"]:checked + label,
.group-checkbox-day input[type="checkbox"]:checked + label {
    background-color: var(--itsos-primary, #00576d);
    border-color: var(--itsos-primary, #00576d);
    color: #fff;
}

/* Foco accesible */
.group-checkbox input[type="checkbox"]:focus + label {
    box-shadow: 0 0 0 0.25rem rgba(0, 87, 109, 0.4);
    outline: none;
}

/* Hover */
.group-checkbox label:hover,
.group-checkbox-day label:hover {
    background-color: #d5e3e6;
    border-color: #4a6070;
}

/* Hover bloqueado en checked */
.group-checkbox input[type="checkbox"]:checked + label:hover,
.group-checkbox-day input[type="checkbox"]:checked + label:hover {
    background-color: var(--itsos-primary-hover, #004a5c);
    border-color: var(--itsos-primary-dark, #003d4d);
}

/* Disabled */
.group-checkbox label.checkbox-disabled {
    background-color: var(--itsos-neo-base, #eff0f3);
    opacity: 0.65;
    cursor: not-allowed;
    pointer-events: none;
}

/* Dark mode (BS5 data-bs-theme="dark") */
[data-bs-theme="dark"] .group-checkbox label,
[data-bs-theme="dark"] .group-checkbox-day label {
    background-color: var(--bs-body-bg);
    color: var(--bs-body-color);
    border-color: var(--bs-border-color);
}

[data-bs-theme="dark"] .group-checkbox input[type="checkbox"]:checked + label,
[data-bs-theme="dark"] .group-checkbox-day input[type="checkbox"]:checked + label {
    background-color: var(--itsos-primary, #00576d);
    border-color: var(--itsos-primary, #00576d);
    color: #fff;
}

[data-bs-theme="dark"] .group-checkbox label:hover,
[data-bs-theme="dark"] .group-checkbox-day label:hover {
    background-color: rgba(0, 87, 109, 0.2);
}

/* --------- FIN GROUP-CHECKBOX ----------------------------------------- */

/* =====================================================================
   TIMELINE — Migrado de float (BS3) a flexbox (BS5)
   Usado en: turnos/lis_his_tur.php
   ===================================================================== */

/* Contenedor principal: línea vertical central */
ul.timeline {
    list-style: none;
    padding: 20px 0;
    position: relative;
}

ul.timeline::before {
    top: 0;
    bottom: 0;
    position: absolute;
    content: "";
    width: 3px;
    background-color: #ddd;
    left: 50%;
    margin-left: -1.5px;
}

/* Cada ítem: flexbox reemplaza el clearfix flotante */
.timeline > li {
    margin-bottom: 20px;
    position: relative;
    display: flex;
    align-items: flex-start;
}

/* Eliminar clearfix de BS3 (ya no hace falta con flex) */
.timeline > li::before,
.timeline > li::after {
    content: none;
    display: none;
}

/* Panel izquierdo (normal): ocupa 46% del ancho, margen derecho auto empuja al badge */
.timeline > li > .timeline-panel {
    float: none;                    /* override BS3 */
    width: 46%;
    margin-right: auto;             /* left-aligned */
    border: 1px solid #d4d4d4;
    border-radius: 2px;
    padding: 20px;
    position: relative;
}

/* Badge central: posición absoluta, z-index sobre los panels */
.timeline > li > .timeline-badge {
    color: #fff;
    width: 50px;
    height: 50px;
    line-height: 50px;
    font-size: 1.4em;
    text-align: center;
    position: absolute;
    top: 16px;
    left: 50%;
    margin-left: -25px;
    background-color: #999;
    border-radius: 50%;
    z-index: 1;
}

/* Panel derecho (inverted): margen izquierdo auto lo empuja a la derecha */
.timeline > li.timeline-inverted > .timeline-panel {
    float: none;                    /* override BS3 */
    margin-left: auto;              /* right-aligned */
    margin-right: 0;
}

/* Flecha del panel izquierdo → apunta a la derecha (hacia el badge) */
.timeline > li > .timeline-panel:before {
    position: absolute;
    top: 26px;
    right: -15px;
    display: inline-block;
    border-top: 15px solid transparent;
    border-left: 15px solid #ccc;
    border-right: 0;
    border-bottom: 15px solid transparent;
    content: "";
}

.timeline > li > .timeline-panel:after {
    position: absolute;
    top: 27px;
    right: -14px;
    display: inline-block;
    border-top: 14px solid transparent;
    border-left: 14px solid #fff;
    border-right: 0;
    border-bottom: 14px solid transparent;
    content: "";
}

/* Flecha del panel derecho (inverted) → apunta a la izquierda */
.timeline > li.timeline-inverted > .timeline-panel:before {
    border-left-width: 0;
    border-right-width: 15px;
    left: -15px;
    right: auto;
}

.timeline > li.timeline-inverted > .timeline-panel:after {
    border-left-width: 0;
    border-right-width: 14px;
    left: -14px;
    right: auto;
}

/* Colores de badge — mantiene compatibilidad con el código existente
   + aliases con clases BS5 (bg-*) */
.timeline-badge.primary,
.timeline-badge.bg-primary  { background-color: var(--itsos-primary, #00576d) !important; }
.timeline-badge.success,
.timeline-badge.bg-success  { background-color: var(--itsos-success, #367C36) !important; }
.timeline-badge.warning,
.timeline-badge.bg-warning  { background-color: var(--itsos-warning, #926402) !important; }
.timeline-badge.danger,
.timeline-badge.bg-danger   { background-color: var(--itsos-danger, #CD322D)  !important; }
.timeline-badge.info,
.timeline-badge.bg-info     { background-color: var(--itsos-info, #0868DD)    !important; }

/* Tipografía interna */
.timeline-title  { margin-top: 0; color: inherit; }
.timeline-body > p,
.timeline-body > ul         { margin-bottom: 0; }
.timeline-body > p + p      { margin-top: 5px; }

/* ── Mobile: columna única, todo a la derecha del badge ── */
@media (max-width: 767px) {
    ul.timeline::before {
        left: 40px;
    }

    ul.timeline > li > .timeline-panel,
    ul.timeline > li.timeline-inverted > .timeline-panel {
        float: none;
        width: calc(100% - 90px);
        margin-left: auto;
        margin-right: 0;
    }

    ul.timeline > li > .timeline-badge {
        left: 15px;
        margin-left: 0;
        top: 16px;
    }

    /* En mobile todos los panels usan la flecha izquierda */
    ul.timeline > li > .timeline-panel:before {
        border-left-width: 0;
        border-right-width: 15px;
        left: -15px;
        right: auto;
    }

    ul.timeline > li > .timeline-panel:after {
        border-left-width: 0;
        border-right-width: 14px;
        left: -14px;
        right: auto;
    }
}

/* --------- FIN TIMELINE ------------------------------------------------ */

/* =====================================================================
   ICON SELECTORS — Migrados de .glyphicon a .material-icons
   Los templates ya usan <i class="material-icons"> pero el CSS viejo
   aún apuntaba a .glyphicon; estos overrides corrigen el targeting.
   Usado en: turnos/listados/mdf_fichas_portal_paciente.php
   ===================================================================== */

/* Ícono de advertencia en el panel de plan de institución */
.inst-sheet-plan-warning .material-icons,
.inst-sheet-plan-warning .material-symbols-outlined {
    color: #f59e0b;
    font-size: 18px;
    flex-shrink: 0;
    margin-top: 1px;
    vertical-align: middle;
}

/* Ícono de "sin resultados" en el hint del buscador de institución */
.bus-ins-hint--empty .material-icons,
.bus-ins-hint--empty .material-symbols-outlined {
    opacity: 0.5;
    font-size: 14px;
    vertical-align: middle;
}

/* =====================================================================
   VINCULAR TURNO ASIGNADO — Cobranza paciente (ingreso de dinero / SAF)
   div#div_principal_turnos_asignados_paciente
   ===================================================================== */

/* Grid de tarjetas */
.turnos-asignados-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
    gap: 0.75rem;
    margin-top: 0.25rem;
}

/* Tarjeta individual — reset de botón + estilos visuales */
.turno-asignado-card {
    position: relative;
    width: 100%;
    padding: 0.875rem 1rem 0.875rem 1.25rem;
    background: #fff;
    border: 1.5px solid #d8e3ea;
    border-radius: 10px;
    box-shadow: 0 2px 8px rgba(0, 87, 109, 0.06);
    text-align: left;
    cursor: pointer;
    overflow: hidden;
    transition: border-color 0.18s ease, box-shadow 0.18s ease,
                background 0.18s ease, transform 0.15s ease;
    /* reset button */
    appearance: none;
    -webkit-appearance: none;
    font-family: inherit;
    font-size: inherit;
    line-height: inherit;
}

/* Franja izquierda de color — acento visual */
.turno-asignado-card::before {
    content: '';
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: 4px;
    background: #b5cfd7;
    transition: background 0.18s ease;
    border-radius: 10px 0 0 10px;
}

/* Hover */
.turno-asignado-card:hover,
.turno-asignado-card:focus-visible {
    border-color: var(--itsos-primary);
    box-shadow: 0 4px 14px rgba(0, 87, 109, 0.14);
    transform: translateY(-2px);
    outline: none;
}
.turno-asignado-card:hover::before,
.turno-asignado-card:focus-visible::before {
    background: var(--itsos-primary);
}

/* Seleccionado */
.turno-asignado-card.is-selected {
    border-color: var(--itsos-primary);
    background: linear-gradient(160deg, #f0f8fb 0%, #eaf4f7 100%);
    box-shadow: 0 4px 16px rgba(0, 87, 109, 0.18);
    transform: translateY(-1px);
}
.turno-asignado-card.is-selected::before {
    background: var(--itsos-primary);
}

/* Encabezado de la tarjeta */
.turno-asignado-card__top {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 0.5rem;
    margin-bottom: 0.375rem;
}

/* Etiqueta pequeña "Turno asignado" */
.turno-asignado-card__eyebrow {
    display: block;
    font-size: 0.6875rem;
    font-weight: 700;
    letter-spacing: 0.07em;
    text-transform: uppercase;
    color: #6d8594;
    margin-bottom: 0.125rem;
    line-height: 1;
}

/* Fecha y hora — título principal de la tarjeta */
.turno-asignado-card__orden {
    display: block;
    font-size: 1rem;
    font-weight: 800;
    color: #17384a;
    line-height: 1.2;
}
.turno-asignado-card.is-selected .turno-asignado-card__orden {
    color: var(--itsos-primary);
}

/* Badge "Disponible" / "Seleccionado" */
.turno-asignado-card__badge {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    gap: 0.25rem;
    padding: 0.2em 0.55em;
    border-radius: 999px;
    font-size: 0.6875rem;
    font-weight: 700;
    letter-spacing: 0.03em;
    text-transform: uppercase;
    white-space: nowrap;
    background: #e8f5eb;
    color: #2e7d32;
    border: 1px solid #c8e6c9;
    transition: background 0.18s, color 0.18s, border-color 0.18s;
}
.turno-asignado-card.is-selected .turno-asignado-card__badge {
    background: #dceef2;
    color: var(--itsos-primary);
    border-color: #b3d4dc;
}
/* Checkmark en el badge al seleccionar — usa Bootstrap Icons (disponible en el proyecto) */
.turno-asignado-card.is-selected .turno-asignado-card__badge::before {
    content: '\F26B'; /* bi-check-circle-fill */
    font-family: 'bootstrap-icons';
    font-style: normal;
    font-size: 0.75rem;
}

/* Especialidad */
.turno-asignado-card__meta {
    margin: 0 0 0.3rem 0;
    font-size: 0.75rem;
    font-weight: 600;
    color: var(--itsos-primary);
    line-height: 1.3;
    opacity: 0.85;
}

/* Prestación / nombre del servicio */
.turno-asignado-card__title {
    margin: 0 0 0.375rem 0;
    font-size: 0.875rem;
    font-weight: 700;
    color: #22313d;
    line-height: 1.35;
}

/* Profesional y otros detalles en línea */
.turno-asignado-card__details-inline {
    display: flex;
    flex-wrap: wrap;
    gap: 0.25rem 0.625rem;
    align-items: center;
}
.turno-asignado-card__detail {
    margin: 0;
    font-size: 0.75rem;
    color: #526a77;
    line-height: 1.35;
    display: flex;
    align-items: center;
    gap: 0.25rem;
}
.turno-asignado-card__detail::before {
    content: '';
    display: inline-block;
    width: 5px;
    height: 5px;
    border-radius: 50%;
    background: #9bb6c0;
    flex-shrink: 0;
}

/* Observaciones al pie de la tarjeta */
.turno-asignado-card__obs {
    margin: 0.5rem 0 0 0;
    padding-top: 0.4rem;
    border-top: 1px dashed #cfdde4;
    font-size: 0.75rem;
    color: #607482;
    font-style: italic;
    line-height: 1.4;
}

/* Barra inferior: estado de selección + botón limpiar */
.turno-asignado-toolbar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 0.5rem;
    margin-top: 0.875rem;
    padding: 0.625rem 0.875rem;
    background: #f5f9fb;
    border: 1px solid #dde8ed;
    border-radius: 8px;
}
.turno-asignado-selection-state {
    margin: 0;
    font-size: 0.8125rem;
    color: #607482;
    font-style: italic;
}
.turno-asignado-selection-state strong {
    font-style: normal;
    color: var(--itsos-primary);
}

/* Sin turnos disponibles */
.turno-asignado-empty {
    padding: 0.875rem 1rem;
    border-radius: 8px;
    background: #f7fafc;
    border: 1px dashed #cfdde4;
    font-size: 0.8125rem;
    color: #607482;
}

/* Responsivo: una columna en móvil */
@media (max-width: 575.98px) {
    .turnos-asignados-grid {
        grid-template-columns: 1fr;
    }
}

/* --------- FIN ICON SELECTORS ------------------------------------------ */
