/* Cuerpo común de los listados Razor, con las medidas de Mis PoolBox. */
:is(.cli-table, .ntf-table, .avs-table, .chk-table, .seg-table, .emp-table, .usd-table, .ys-detail-table) {
    width: 100%; table-layout: fixed; border-collapse: collapse;
    font-family: var(--ys-lv-font-family, var(--ys-font-family)) !important;
    font-size: var(--ys-lv-row-font-size, .83rem) !important;
    font-weight: var(--ys-lv-row-font-weight, 400) !important;
}
:is(.cli-table, .ntf-table, .avs-table, .chk-table, .seg-table, .emp-table, .usd-table, .ys-detail-table) thead th {
    position: sticky; top: 0; z-index: 10; box-sizing: border-box; height: var(--ys-lv-header-height, 36px); padding: 0 10px !important;
    background: var(--ys-lv-header-bg, #fbfdff) !important;
    color: var(--ys-lv-header-text, var(--ys-text-muted)) !important;
    font-family: var(--ys-lv-header-font-family, var(--ys-lv-font-family, var(--ys-font-family))) !important;
    font-size: var(--ys-lv-header-font-size, var(--ys-text-size-base, .875rem)) !important;
    font-weight: var(--ys-lv-header-font-weight, var(--ys-text-weight-normal, 400)) !important;
    text-transform: none !important; letter-spacing: normal !important;
    border-bottom: 1px solid var(--ys-lv-header-border, var(--ys-border-soft));
    border-right: 1px solid var(--ys-lv-header-border, var(--ys-border-soft));
    white-space: nowrap; overflow: hidden; text-align: left; cursor: pointer;
}
:is(.cli-table, .ntf-table, .avs-table, .chk-table, .seg-table, .emp-table, .usd-table, .ys-detail-table) tbody td {
    box-sizing: border-box; height: var(--ys-lv-row-height, 44px); padding: 0 10px !important; line-height: 1.3 !important;
    border-bottom: 1px solid var(--ys-lv-row-border, #eef1f5); color: var(--ys-lv-row-text, var(--ys-text-dark));
    font-family: var(--ys-lv-font-family, var(--ys-font-family)) !important;
    font-size: var(--ys-lv-row-font-size, .83rem) !important;
    font-weight: var(--ys-lv-row-font-weight, 400) !important;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
:is(.cli-table, .ntf-table, .avs-table, .chk-table, .seg-table, .emp-table, .usd-table, .ys-detail-table) tbody tr:hover { background: var(--ys-lv-row-hover, var(--ys-bg-hover)); }
:is(.cli-table, .ntf-table, .avs-table, .chk-table, .seg-table, .emp-table, .usd-table, .ys-detail-table) tbody tr.selected,
:is(.cli-table, .ntf-table, .avs-table, .chk-table, .seg-table, .emp-table, .usd-table, .ys-detail-table) tbody tr.selected > td {
    background: var(--ys-lv-row-selected, var(--ys-row-selected, #e8f8f0)) !important;
}
:is(.cli-table, .ntf-table, .avs-table, .chk-table, .seg-table, .emp-table, .usd-table, .ys-detail-table) tbody tr.selected > td {
    border-bottom-color: var(--ys-lv-row-selected-border, #a7f3d0) !important;
}

/* Las dos tablas del tab Relés del DetailView de PoolBox usan la misma guía
   tipográfica, alturas y paleta que el resto de los ListViews Razor. */
:is(.ys-poolbox-relays-table, .ys-poolbox-schedules-table) {
    font-family: var(--ys-lv-font-family, var(--ys-font-family)) !important;
    font-size: var(--ys-lv-row-font-size, var(--ys-text-size-base, .875rem)) !important;
    font-weight: var(--ys-lv-row-font-weight, var(--ys-text-weight-normal, 400)) !important;
}
:is(.ys-poolbox-relays-table, .ys-poolbox-schedules-table) thead th {
    height: var(--ys-lv-header-height, 36px) !important;
    background: var(--ys-lv-header-bg, #fbfdff) !important;
    color: var(--ys-lv-header-text, var(--ys-text-muted)) !important;
    font-family: var(--ys-lv-header-font-family, var(--ys-lv-font-family, var(--ys-font-family))) !important;
    font-size: var(--ys-lv-header-font-size, var(--ys-text-size-base, .875rem)) !important;
    font-weight: var(--ys-lv-header-font-weight, var(--ys-text-weight-normal, 400)) !important;
    border-color: var(--ys-lv-header-border, var(--ys-border-soft)) !important;
}
:is(.ys-poolbox-relays-table, .ys-poolbox-schedules-table) tbody tr {
    background: var(--ys-lv-row-bg, #fff) !important;
}
:is(.ys-poolbox-relays-table, .ys-poolbox-schedules-table) tbody tr:hover {
    background: var(--ys-lv-row-hover, var(--ys-bg-hover)) !important;
}
:is(.ys-poolbox-relays-table, .ys-poolbox-schedules-table) tbody tr.selected,
:is(.ys-poolbox-relays-table, .ys-poolbox-schedules-table) tbody tr.selected > td {
    background: var(--ys-lv-row-selected, #e8f8f0) !important;
}
:is(.ys-poolbox-relays-table, .ys-poolbox-schedules-table) tbody tr.selected > td {
    border-bottom-color: var(--ys-lv-row-selected-border, #a7f3d0) !important;
}
:is(.ys-poolbox-relays-table, .ys-poolbox-schedules-table) tbody td {
    height: var(--ys-lv-row-height, 44px) !important;
    border-bottom-color: var(--ys-lv-row-border, #e2e8f0) !important;
    color: var(--ys-lv-row-text, var(--ys-text-dark)) !important;
    font-family: var(--ys-lv-font-family, var(--ys-font-family)) !important;
    font-size: var(--ys-lv-row-font-size, var(--ys-text-size-base, .875rem)) !important;
    font-weight: var(--ys-lv-row-font-weight, var(--ys-text-weight-normal, 400)) !important;
}
:is(.ys-poolbox-relays-table, .ys-poolbox-schedules-table) tbody :is(input, select, textarea) {
    font-family: var(--ys-lv-font-family, var(--ys-font-family)) !important;
    font-size: var(--ys-lv-row-font-size, var(--ys-text-size-base, .875rem)) !important;
    font-weight: var(--ys-lv-row-font-weight, var(--ys-text-weight-normal, 400)) !important;
}
:is(.ys-detail-table, .dxbl-grid) .ys-lv-inline-edit,
:is(.ys-detail-table, .dxbl-grid) .ys-lv-inline-edit input,
:is(.ys-detail-table, .dxbl-grid) .ys-lv-inline-edit .dxbl-text-edit-input {
    box-sizing: border-box; width: 100%; min-width: 0; min-height: 30px; padding: 4px 6px;
    border: 1px solid transparent !important;
    border-radius: 5px;
    background: transparent !important;
    color: var(--ys-lv-row-text, var(--ys-text-dark)) !important;
    font-family: var(--ys-lv-font-family, var(--ys-font-family)) !important;
    font-size: var(--ys-lv-row-font-size, var(--ys-text-size-base, .875rem)) !important;
    font-weight: var(--ys-lv-row-font-weight, var(--ys-text-weight-normal, 400)) !important;
    text-decoration: none !important;
    box-shadow: none !important;
}
:is(.ys-detail-table, .dxbl-grid) .ys-lv-inline-edit:focus-within,
:is(.ys-detail-table, .dxbl-grid) .ys-lv-inline-edit input:focus,
:is(.ys-detail-table, .dxbl-grid) .ys-lv-inline-edit .dxbl-text-edit-input:focus {
    border-color: var(--ys-lv-header-border, var(--ys-border-soft)) !important;
    outline: none !important;
}

/* Presentación explícita de booleanos en las listas, con colores del grupo ListViews. */
.ys-lv-boolean-switch {
    display: inline-flex; align-items: center; width: 40px; height: 22px; padding: 2px;
    border: 1px solid var(--ys-border-gray, #d9d9d9); border-radius: 999px;
    background: var(--ys-border-gray, #d9d9d9); cursor: pointer; transition: background .14s ease, border-color .14s ease;
}
.ys-lv-boolean-switch > span {
    display: block; width: 16px; height: 16px; border-radius: 50%; background: var(--ys-white, #fff);
    transition: transform .14s ease; box-shadow: 0 1px 2px rgb(15 23 42 / 18%);
}
.ys-lv-boolean-switch.is-on {
    justify-content: flex-end; border-color: var(--ys-lv-checkbox-checked, var(--ys-accent, #00aca0));
    background: var(--ys-lv-checkbox-checked, var(--ys-accent, #00aca0));
}
.ys-lv-boolean-switch:disabled { opacity: .72; cursor: not-allowed; }
.ys-lv-boolean-dot {
    display: inline-block; width: 18px; height: 18px; border: 1px solid transparent;
    border-radius: 50%; vertical-align: middle; background: var(--ys-border-gray, #d9d9d9);
}
.ys-lv-boolean-dot.is-on { background: var(--ys-lv-checkbox-checked, var(--ys-accent, #00aca0)); }
.ys-lv-boolean-check {
    display: inline-flex; align-items: center; justify-content: center; width: 20px; height: 20px;
    border: 1.5px solid var(--ys-border, #cbd5e1); border-radius: 4px; background: var(--ys-white, #fff);
    color: var(--ys-white, #fff); font-size: 14px; font-weight: 700; line-height: 1;
}
.ys-lv-boolean-check.is-checked {
    border-color: var(--ys-lv-checkbox-checked, var(--ys-accent, #00aca0));
    background: var(--ys-lv-checkbox-checked, var(--ys-accent, #00aca0));
}
.ys-lv-state-badge { box-sizing: border-box; }

:is(.pbv-table, .pbd-table) {
    font-family: var(--ys-lv-font-family, var(--ys-font-family)) !important;
    font-size: var(--ys-lv-row-font-size, .83rem) !important;
    font-weight: var(--ys-lv-row-font-weight, 400) !important;
}
:is(.pbv-table, .pbd-table) thead th {
    box-sizing: border-box !important;
    height: var(--ys-lv-header-height, 36px) !important;
    padding-top: 0 !important;
    padding-bottom: 0 !important;
    font-family: var(--ys-lv-header-font-family, var(--ys-lv-font-family, var(--ys-font-family))) !important;
    font-size: var(--ys-lv-header-font-size, var(--ys-text-size-base, .875rem)) !important;
    font-weight: var(--ys-lv-header-font-weight, var(--ys-text-weight-normal, 400)) !important;
}
:is(.pbv-table, .pbd-table) tbody td {
    box-sizing: border-box !important;
    height: var(--ys-lv-row-height, 44px) !important;
    padding-top: 0 !important;
    padding-bottom: 0 !important;
    font-family: var(--ys-lv-font-family, var(--ys-font-family)) !important;
    font-size: var(--ys-lv-row-font-size, .83rem) !important;
    font-weight: var(--ys-lv-row-font-weight, 400) !important;
}
:is(.cli-card, .avs-card, .ys-detail-table-wrap, .emp-pb-table-wrap) { overflow: auto; }
:is(.cli-menu-item, .ntf-menu-item-c, .ys-col-menu-item) { display: flex; align-items: center; gap: 8px; font-size: .8rem; padding: 8px 14px; }
:is(.cli-menu-item, .ntf-menu-item-c, .ys-col-menu-item) svg { flex-shrink: 0; }
.avs-btn-nuevo:active { transform: scale(.97); filter: brightness(.95); opacity: 1 !important; visibility: visible !important; }
.avs-btn-nuevo { animation: none !important; }
.ipc-head { padding: 14px 18px; background: var(--ys-white); border: 1px solid var(--ys-border-soft); border-radius: 14px; }
.ipc-head-title { margin: 0; font-size: 1.15rem; font-weight: 800; }
.ys-detail-footer { display: flex; justify-content: flex-end; gap: 8px; position: sticky; bottom: 0; padding: 12px; background: var(--ys-white); border-top: 1px solid var(--ys-border-soft); }

/* Configurar Notificaciones (AvisosListView) ya dibuja su propia barra.
   XAF puede colocar la barra nativa un nivel por encima del contenido o
   dentro de un wrapper adicional; cubrir ambas posiciones sin afectar los
   toolbars de los popups, que se montan fuera de este editor. */
:is(.dxbl-tabs-content-panel, .main-content):has(:is(.cld-container, .usd-view, .emp-view, .avd-container, .avs-view, #avisos-listview-container, .chkd-view, .chk-view, #checklist-listview-container)) > :is(.main-toolbar, .dxbl-toolbar, .xaf-toolbar),
:is(.dxbl-tabs-content-panel, .main-content):has(:is(.cld-container, .usd-view, .emp-view, .avd-container, .avs-view, #avisos-listview-container, .chkd-view, .chk-view, #checklist-listview-container)) > div > :is(.main-toolbar, .dxbl-toolbar, .xaf-toolbar),
.dxbl-tabs-content:has(#avisos-listview-container) > :is(.main-toolbar, .dxbl-toolbar, .xaf-toolbar),
.dxbl-tabs-content-panel:has(#avisos-listview-container) > div > :is(.main-toolbar, .dxbl-toolbar, .xaf-toolbar),
.main-toolbar:has(+ .main-content #avisos-listview-container),
.main-toolbar:has(~ .main-content #avisos-listview-container),
.main-toolbar:has(~ * #avisos-listview-container),
.dxbl-toolbar:has(~ * #avisos-listview-container) {
    display: none !important;
    height: 0 !important;
    min-height: 0 !important;
    max-height: 0 !important;
    margin: 0 !important;
    padding: 0 !important;
    border: none !important;
    overflow: hidden !important;
}

/* DetailView Razor de Clientes: ocultar solo la barra nativa asociada a este
   editor. Los toolbars de los popups quedan fuera del alcance o protegidos por
   el selector del modal. */
:is(.dxbl-tabs-content-panel, .main-content):has(#clientes-detailview-container) > :is(.main-toolbar, .dxbl-toolbar, .xaf-toolbar),
:is(.dxbl-tabs-content-panel, .main-content):has(#clientes-detailview-container) > div > :is(.main-toolbar, .dxbl-toolbar, .xaf-toolbar),
.dxbl-tabs-content:has(#clientes-detailview-container) > :is(.main-toolbar, .dxbl-toolbar, .xaf-toolbar),
.dxbl-tabs-content-panel:has(#clientes-detailview-container) > div > :is(.main-toolbar, .dxbl-toolbar, .xaf-toolbar),
.main-toolbar:has(+ .main-content #clientes-detailview-container),
.main-toolbar:has(~ .main-content #clientes-detailview-container),
.main-toolbar:has(~ * #clientes-detailview-container),
.dxbl-toolbar:has(~ * #clientes-detailview-container) {
    display: none !important;
    height: 0 !important;
    min-height: 0 !important;
    max-height: 0 !important;
    margin: 0 !important;
    padding: 0 !important;
    border: none !important;
    overflow: hidden !important;
}

/* DetailView Razor de PoolBox: el editor contiene varias pestañas, pero la
   barra nativa de XAF pertenece al DetailView completo y no debe reaparecer
   al cambiar de pestaña. Se oculta solo la barra asociada a este editor. */
:is(.dxbl-tabs-content-panel, .main-content):has(#poolbox-detailview-container) > :is(.main-toolbar, .dxbl-toolbar, .xaf-toolbar),
:is(.dxbl-tabs-content-panel, .main-content):has(#poolbox-detailview-container) > div > :is(.main-toolbar, .dxbl-toolbar, .xaf-toolbar),
.dxbl-tabs-content:has(#poolbox-detailview-container) > :is(.main-toolbar, .dxbl-toolbar, .xaf-toolbar),
.dxbl-tabs-content-panel:has(#poolbox-detailview-container) > div > :is(.main-toolbar, .dxbl-toolbar, .xaf-toolbar),
.main-toolbar:has(+ .main-content #poolbox-detailview-container),
.main-toolbar:has(~ .main-content #poolbox-detailview-container),
.main-toolbar:has(~ * #poolbox-detailview-container),
.dxbl-toolbar:has(~ * #poolbox-detailview-container) {
    display: none !important;
    height: 0 !important;
    min-height: 0 !important;
    max-height: 0 !important;
    margin: 0 !important;
    padding: 0 !important;
    border: none !important;
    overflow: hidden !important;
}

/* DetailView Razor de Empresa: ocultar solo la barra nativa asociada a este
   editor, preservando los toolbars de los popups. */
:is(.dxbl-tabs-content-panel, .main-content):has(#empresa-detailview-container) > :is(.main-toolbar, .dxbl-toolbar, .xaf-toolbar),
:is(.dxbl-tabs-content-panel, .main-content):has(#empresa-detailview-container) > div > :is(.main-toolbar, .dxbl-toolbar, .xaf-toolbar),
.dxbl-tabs-content:has(#empresa-detailview-container) > :is(.main-toolbar, .dxbl-toolbar, .xaf-toolbar),
.dxbl-tabs-content-panel:has(#empresa-detailview-container) > div > :is(.main-toolbar, .dxbl-toolbar, .xaf-toolbar),
.main-toolbar:has(+ .main-content #empresa-detailview-container),
.main-toolbar:has(~ .main-content #empresa-detailview-container),
.main-toolbar:has(~ * #empresa-detailview-container),
.dxbl-toolbar:has(~ * #empresa-detailview-container) {
    display: none !important;
    height: 0 !important;
    min-height: 0 !important;
    max-height: 0 !important;
    margin: 0 !important;
    padding: 0 !important;
    border: none !important;
    overflow: hidden !important;
}

/* ListView Razor de Plantilla Intervención: mantener su barra propia y
   ocultar únicamente la barra nativa de XAF asociada a este editor. */
:is(.dxbl-tabs-content-panel, .main-content):has(#checklist-listview-container) > :is(.main-toolbar, .dxbl-toolbar, .xaf-toolbar),
:is(.dxbl-tabs-content-panel, .main-content):has(#checklist-listview-container) > div > :is(.main-toolbar, .dxbl-toolbar, .xaf-toolbar),
.dxbl-tabs-content:has(#checklist-listview-container) > :is(.main-toolbar, .dxbl-toolbar, .xaf-toolbar),
.dxbl-tabs-content-panel:has(#checklist-listview-container) > div > :is(.main-toolbar, .dxbl-toolbar, .xaf-toolbar),
.main-toolbar:has(+ .main-content #checklist-listview-container),
.main-toolbar:has(~ .main-content #checklist-listview-container),
.main-toolbar:has(~ * #checklist-listview-container),
.dxbl-toolbar:has(~ * #checklist-listview-container) {
    display: none !important;
    height: 0 !important;
    min-height: 0 !important;
    max-height: 0 !important;
    margin: 0 !important;
    padding: 0 !important;
    border: none !important;
    overflow: hidden !important;
}

/* DetailView de usuario/MyDetails: ocultar solo la barra nativa asociada al
   editor Razor, preservando los toolbars de los popups. */
:is(.dxbl-tabs-content-panel, .main-content):has(#usuario-detailview-container) > :is(.main-toolbar, .dxbl-toolbar, .xaf-toolbar),
:is(.dxbl-tabs-content-panel, .main-content):has(#usuario-detailview-container) > div > :is(.main-toolbar, .dxbl-toolbar, .xaf-toolbar),
.dxbl-tabs-content:has(#usuario-detailview-container) > :is(.main-toolbar, .dxbl-toolbar, .xaf-toolbar),
.dxbl-tabs-content-panel:has(#usuario-detailview-container) > div > :is(.main-toolbar, .dxbl-toolbar, .xaf-toolbar),
.main-toolbar:has(+ .main-content #usuario-detailview-container),
.main-toolbar:has(~ .main-content #usuario-detailview-container),
.main-toolbar:has(~ * #usuario-detailview-container),
.dxbl-toolbar:has(~ * #usuario-detailview-container) {
    display: none !important;
    height: 0 !important;
    min-height: 0 !important;
    max-height: 0 !important;
    margin: 0 !important;
    padding: 0 !important;
    border: none !important;
    overflow: hidden !important;
}

/* ListView Razor de PoolBox y Usuarios: la vista ya dispone de su propio
   toolbar y la botonera nativa de XAF solo duplica acciones. Cubrimos tanto
   el toolbar hermano del contenido como los wrappers intermedios que usa
   TabbedMDI en Blazor. */
:is(.dxbl-tabs-content-panel, .main-content, .dxbl-tabs-content):has(#poolbox-list-container, #usuarios-listview-container) :is(.main-toolbar, .dxbl-toolbar, .xaf-toolbar),
:is(.dxbl-tabs-content-panel, .main-content, .dxbl-tabs-content):has(#poolbox-list-container, #usuarios-listview-container) > :is(.main-toolbar, .dxbl-toolbar, .xaf-toolbar),
:is(.dxbl-tabs-content-panel, .main-content, .dxbl-tabs-content):has(#poolbox-list-container, #usuarios-listview-container) > div > :is(.main-toolbar, .dxbl-toolbar, .xaf-toolbar),
:is(.main-toolbar, .dxbl-toolbar, .xaf-toolbar):has(~ * #poolbox-list-container),
:is(.main-toolbar, .dxbl-toolbar, .xaf-toolbar):has(~ * #usuarios-listview-container) {
    display: none !important;
    height: 0 !important;
    min-height: 0 !important;
    max-height: 0 !important;
    margin: 0 !important;
    padding: 0 !important;
    border: none !important;
    overflow: hidden !important;
}

/* El popup de calibración usa el mismo DetailView Razor que Mapa de vistas.
   Se limita al contenido real y se eliminan los márgenes laterales del
   contenedor XAF para que no quede el formulario flotando en una ventana
   desproporcionada. */
:is(.dxbl-popup, .dxbl-modal):has(.ys-calibration-popup) {
    width: min(860px, calc(100vw - 32px)) !important;
    max-width: calc(100vw - 32px) !important;
}
:is(.dxbl-popup, .dxbl-modal):has(.ys-calibration-popup) :is(.dxbl-popup-body, .dxbl-modal-body, .dxbl-popup-content) {
    padding-left: 0 !important;
    padding-right: 0 !important;
}
.ys-calibration-popup {
    max-width: none !important;
    border: 0 !important;
    border-radius: 0 !important;
    box-shadow: none !important;
}
:is(.cli-table, .ntf-table, .avs-table, .chk-table, .seg-table, .emp-table, .usd-table, .ys-detail-table) input[type="checkbox"] {
    width: 20px; height: 20px; appearance: none; -webkit-appearance: none;
    background: var(--ys-white, #fff); border: 1.5px solid var(--ys-border, #cbd5e1);
    border-radius: 4px; position: relative; vertical-align: middle; cursor: pointer;
}

/* Checkbox normal compartido por ListViews y DetailViews. Los switches y
   bolitas mantienen sus clases propias y no entran en este patrón. */
.ys-standard-checkbox {
    width: 20px; height: 20px; appearance: none; -webkit-appearance: none;
    background: var(--ys-white, #fff); border: 1.5px solid var(--ys-border, #cbd5e1);
    border-radius: 4px; position: relative; vertical-align: middle; cursor: pointer;
    flex: 0 0 20px; padding: 0;
}
.ys-standard-checkbox:checked {
    background: var(--ys-lv-checkbox-checked, var(--ys-accent, #00aca0)) !important;
    border-color: var(--ys-lv-checkbox-checked, var(--ys-accent, #00aca0)) !important;
}
.ys-standard-checkbox:checked::after {
    content: ""; position: absolute; left: 6px; top: 2px; width: 5px; height: 10px;
    border: solid var(--ys-white, #fff); border-width: 0 2px 2px 0; transform: rotate(45deg);
}
.ys-standard-checkbox:disabled { opacity: .78; cursor: default; }
:is(.cli-table, .ntf-table, .avs-table, .chk-table, .seg-table, .emp-table, .usd-table, .ys-detail-table) input[type="checkbox"]:checked {
    background: var(--ys-lv-checkbox-checked, var(--ys-accent, #00aca0)) !important;
    border-color: var(--ys-lv-checkbox-checked, var(--ys-accent, #00aca0)) !important;
}
:is(.cli-table, .ntf-table, .avs-table, .chk-table, .seg-table, .emp-table, .usd-table, .ys-detail-table) input[type="checkbox"]:checked::after {
    content: ""; position: absolute; left: 6px; top: 2px; width: 5px; height: 10px;
    border: solid var(--ys-white, #fff); border-width: 0 2px 2px 0; transform: rotate(45deg);
}

/* El patrón de la guía: verde en selección y naranja al pasar por encima de
   una fila ya seleccionada. Se aplica también a las tablas especiales de
   PoolBox, sin afectar sus switches de encendido/apagado. */
:is(.cli-table, .ntf-table, .avs-table, .chk-table, .seg-table, .emp-table, .usd-table, .ys-detail-table) tbody tr.selected:hover input[type="checkbox"]:checked {
    background: var(--ys-lv-checkbox-selected-hover, #d86b1f) !important;
    border-color: var(--ys-lv-checkbox-selected-hover, #d86b1f) !important;
}
.pbv-table .pbv-check,
.pbd-table thead th:first-child input[type="checkbox"],
.pbd-table .pbd-row td:first-child input[type="checkbox"] {
    width: 20px !important; height: 20px !important; appearance: none !important; -webkit-appearance: none !important;
    background: var(--ys-white, #fff) !important; border: 1.5px solid var(--ys-border, #cbd5e1) !important;
    border-radius: 4px !important; position: relative !important; vertical-align: middle; cursor: pointer;
}
.pbv-table .pbv-check:checked,
.pbd-table thead th:first-child input[type="checkbox"]:checked,
.pbd-table .pbd-row td:first-child input[type="checkbox"]:checked {
    background: var(--ys-lv-checkbox-checked, var(--ys-accent, #00aca0)) !important;
    border-color: var(--ys-lv-checkbox-checked, var(--ys-accent, #00aca0)) !important;
}
.pbv-table .pbv-check:checked::after,
.pbd-table thead th:first-child input[type="checkbox"]:checked::after,
.pbd-table .pbd-row td:first-child input[type="checkbox"]:checked::after {
    content: ""; position: absolute; left: 6px; top: 2px; width: 5px; height: 10px;
    border: solid var(--ys-white, #fff); border-width: 0 2px 2px 0; transform: rotate(45deg);
}
.pbv-row-selected:hover .pbv-check:checked,
.pbd-row-selected:hover td:first-child input[type="checkbox"]:checked {
    background: var(--ys-lv-checkbox-selected-hover, #d86b1f) !important;
    border-color: var(--ys-lv-checkbox-selected-hover, #d86b1f) !important;
}

/* Los indicadores grises deben conservar contraste sobre el fondo verde de
   una fila seleccionada. El trazo es interior, fino y no altera el tamaño. */
:is(.pbv-row-selected, .pbd-row-selected, .ys-detail-table tbody tr.selected, .dxbl-grid .dxbl-grid-selected-row) :is(
    .pbv-switch input:not(:checked) + .pbv-switch-slider,
    .pbd-switch input:not(:checked) + .pbd-switch-slider,
     .pbv-dot.dot-inactive,
     .pbd-dot.dot-inactive,
     .ys-lv-boolean-check:not(.is-checked),
     .ys-lv-boolean-dot.is-off,
     .ys-lv-boolean-switch.is-off
) {
    box-shadow: inset 0 0 0 1px var(--ys-lv-selected-icon-outline, #64748b) !important;
}

:is(.pbv-row-selected, .pbd-row-selected, .ys-detail-table tbody tr.selected, .dxbl-grid .dxbl-grid-selected-row) :is(.ys-lv-state-badge, .sync-badge.sync-ok) {
    box-shadow: inset 0 0 0 1px var(--ys-lv-selected-icon-outline, #64748b) !important;
}

/* En Señal se marca por dentro cada barra, tanto gris como verde, sin crear
   un marco alrededor del conjunto. */
:is(.pbv-row-selected, .pbd-row-selected) :is(
    .pbv-signal .pbv-signal-segment,
    .signal-bar .signal-bar-segment
) {
    box-shadow: inset 0 0 0 1px var(--ys-lv-selected-icon-outline, #64748b) !important;
}

/* El estado gris también es un SVG: el contorno sigue la forma del icono,
   nunca una caja rectangular alrededor de la celda. */
:is(.pbv-row-selected, .pbd-row-selected) :is(
    .pbv-estado-sin > svg,
    .pbd-status-icon.icon-success > svg
) {
    stroke: var(--ys-lv-selected-icon-outline, #64748b) !important;
    stroke-width: .6px !important;
    paint-order: stroke fill;
}

/* Paginación única: solo página actual y flechas, sin el texto “Mostrando…”. */
:is(.ys-lv-pager, .cli-pager, .ntf-pager, .avs-pager, .chk-pager, .pbv-pager, .ys-admin-list__pager) {
    display: inline-flex !important; align-items: center; gap: 5px !important;
    font-family: var(--ys-lv-font-family, var(--ys-font-family));
}
:is(.ys-lv-page-btn, .cli-page, .ntf-page, .avs-page, .chk-page, .pbv-page-btn, .ys-admin-list__pager > button) {
    min-width: 28px !important; width: 28px; height: 28px !important; padding: 0 !important;
    display: inline-flex !important; align-items: center; justify-content: center;
    border: 1px solid var(--ys-lv-pagination-border, #99d9d4) !important;
    border-radius: 6px !important; background: var(--ys-white, #fff) !important;
    color: var(--ys-lv-pagination-text, #008f87) !important;
    font-size: var(--ys-text-size-sm, .75rem) !important;
    font-weight: var(--ys-text-weight-semibold, 600) !important; cursor: pointer;
    transition: background .12s ease, color .12s ease, border-color .12s ease;
}
:is(.ys-lv-page-btn, .cli-page, .ntf-page, .avs-page, .chk-page, .pbv-page-btn, .ys-admin-list__pager > button):is(:hover, .active):not(:disabled) {
    background: var(--ys-lv-pagination-hover, #d86b1f) !important;
    border-color: var(--ys-lv-pagination-hover, #d86b1f) !important;
    color: var(--ys-white, #fff) !important;
}
:is(.ys-lv-page-current, .ys-lv-page-info) {
    min-width: 28px; height: 28px; padding: 0 7px; display: inline-flex;
    align-items: center; justify-content: center; border-radius: 6px;
    background: var(--ys-lv-pagination-active, var(--ys-accent, #00aca0)) !important;
    border: 1px solid var(--ys-lv-pagination-active, var(--ys-accent, #00aca0)) !important;
    color: var(--ys-white, #fff) !important; font-size: var(--ys-text-size-sm, .75rem) !important;
    font-weight: var(--ys-text-weight-bold, 800) !important; line-height: 1;
}
:is(.ys-lv-page-btn, .cli-page, .ntf-page, .avs-page, .chk-page, .pbv-page-btn, .ys-admin-list__pager > button):disabled {
    opacity: .42 !important; cursor: not-allowed;
}

/* El selector de tamaño permanece siempre en el extremo derecho del pie. */
:is(.cli-pagesize, .avs-pagesize, .chk-pagesize, .ntf-pagesize,
     .pbv-footer-right, .pagination-size, .pag-size-block) {
    margin-left: auto !important;
}
:is(.cli-pager, .avs-pager, .chk-pager, .ntf-pager, .pbv-pager) {
    margin-left: 0 !important;
}
/* La barra se oculta solo dentro del contenedor de la lista que la necesita.
   Nunca usar body como ancestro: los popups de XAF también cuelgan de body y
   su toolbar contiene Aceptar/Cancelar. */
.avs-btn-nuevo:focus { opacity: 1 !important; visibility: visible !important; }
:is(.dxbl-popup):has(.avd-container) { width: max(560px, 50vw) !important; max-width: 94vw !important; }
.dxbl-popup .avd-container { width: 100%; min-width: 0; }
.avd-grid { grid-template-columns: minmax(0, 1fr) !important; }

/* ==========================================================================
   ESTILOS UNIVERSALES DE REDIMENSIONAMIENTO Y MENÚS CONTEXTUALES DE LISTVIEWS
   ========================================================================== */

/* Resizer handle universal en el borde derecho de cada cabecera */
:is(.ys-col-resizer, .cli-col-resizer, .ntf-col-resizer, .pbv-col-resizer) {
    position: absolute;
    top: 0;
    right: 0;
    width: 7px;
    height: 100%;
    cursor: col-resize;
    z-index: 15;
    user-select: none;
    transition: background 0.15s ease;
}
:is(.ys-col-resizer, .cli-col-resizer, .ntf-col-resizer, .pbv-col-resizer):hover {
    background: rgba(2, 132, 199, 0.35);
}

/* Capa transparente de arrastre global mientras se redimensiona */
:is(.ys-col-resize-overlay, .cli-resize-overlay, .ntf-resize-overlay, .pbv-resize-overlay) {
    position: fixed;
    inset: 0;
    z-index: 2000;
    cursor: col-resize;
    user-select: none;
}

/* Fondo transparente para cerrar menús contextuales al hacer clic fuera */
:is(.ys-col-backdrop, .cli-backdrop, .ntf-backdrop) {
    position: fixed;
    inset: 0;
    z-index: 1400;
    background: transparent;
}

/* Menú contextual flotante (siempre por encima de tablas y nunca debajo) */
:is(.ys-col-menu, .cli-menu, .ntf-menu-c) {
    position: fixed;
    z-index: 1500;
    background: var(--ys-white, #ffffff);
    border: 1px solid var(--ys-border-soft, #e2e8f0);
    border-radius: 8px;
    box-shadow: 0 10px 25px rgba(0,0,0,0.15);
    min-width: 220px;
    padding: 4px 0;
    font-family: inherit;
}
:is(.ys-col-menu-header, .cli-menu-header) {
    padding: 8px 14px;
    font-size: 0.72rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    color: var(--ys-text-muted, #64748b);
    border-bottom: 1px solid var(--ys-border-soft, #e2e8f0);
}
:is(.ys-col-menu-divider, .cli-menu-divider) {
    height: 1px;
    background: var(--ys-border-soft, #e2e8f0);
    margin: 4px 0;
}
:is(.ys-col-menu-item, .cli-menu-item) {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 8px 14px;
    font-size: 0.8rem;
    color: var(--ys-text-dark, #1e293b);
    cursor: pointer;
    transition: background 0.12s;
}
:is(.ys-col-menu-item, .cli-menu-item):hover {
    background: var(--ys-bg-hover, #f1f5f9);
    color: var(--ys-action, #0284c7);
}

/* Modal universal de selección de columnas */
:is(.ys-col-modal-backdrop, .cli-modal-backdrop) {
    position: fixed;
    inset: 0;
    z-index: 1600;
    background: rgba(15, 23, 42, 0.45);
    display: flex;
    align-items: center;
    justify-content: center;
}
:is(.ys-col-modal, .cli-modal) {
    background: var(--ys-white, #ffffff);
    border-radius: 12px;
    width: 380px;
    max-width: 92vw;
    box-shadow: 0 15px 35px rgba(0,0,0,0.2);
    border: 1px solid var(--ys-border-soft, #e2e8f0);
    overflow: hidden;
    display: flex;
    flex-direction: column;
}
:is(.ys-col-modal-header, .cli-modal-header) {
    padding: 12px 16px;
    border-bottom: 1px solid var(--ys-border-soft, #e2e8f0);
    font-weight: 700;
    font-size: 0.9rem;
    color: var(--ys-text-heading, #0f172a);
    display: flex;
    align-items: center;
    justify-content: space-between;
}
:is(.ys-col-modal-close, .cli-modal-close) {
    border: none;
    background: transparent;
    cursor: pointer;
    font-size: 1.1rem;
    color: var(--ys-text-muted, #64748b);
    padding: 2px 6px;
    border-radius: 4px;
}
:is(.ys-col-modal-close, .cli-modal-close):hover {
    background: var(--ys-bg-hover, #f1f5f9);
    color: var(--ys-text-dark, #0f172a);
}
:is(.ys-col-modal-body, .cli-modal-body) {
    padding: 12px 16px;
    max-height: 320px;
    overflow-y: auto;
    display: flex;
    flex-direction: column;
    gap: 8px;
}
:is(.ys-col-modal-item, .cli-modal-item) {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 0.84rem;
    color: var(--ys-text-dark, #1e293b);
    cursor: pointer;
    padding: 4px 6px;
    border-radius: 6px;
}
:is(.ys-col-modal-item, .cli-modal-item):hover {
    background: var(--ys-bg-hover, #f1f5f9);
}
:is(.ys-col-modal-footer, .cli-modal-footer) {
    padding: 10px 16px;
    border-top: 1px solid var(--ys-border-soft, #e2e8f0);
    display: flex;
    justify-content: flex-end;
    gap: 8px;
    background: var(--ys-bg, #f8fafc);
}
