/* Responsive global — AeI Project Management (todos los módulos MVC) */

html {
    overflow-x: hidden;
    -webkit-text-size-adjust: 100%;
}

body.aei-page {
    overflow-x: hidden;
    width: 100%;
    max-width: 100%;
}

.aei-page-shell {
    width: 100%;
    max-width: 100%;
    min-width: 0;
    box-sizing: border-box;
    padding: clamp(8px, 1.5vw, 14px);
}

/* Anular anchos fijos legacy Ext.NET */
.x-tab-bar-body {
    width: 100% !important;
    max-width: 100%;
}

/* Contenedores principales */
.aei-page,
.aei-panel,
.aei-panel-body,
.aei-fieldset,
.aei-fieldset-body,
.aei-tab-content,
.aei-modal,
.aei-modal-body {
    max-width: 100%;
    min-width: 0;
    box-sizing: border-box;
}

/* Tabs internos de módulos (Config, etc.): flujo normal, no iframe fill */
.aei-page .aei-tab-content,
.aei-panel .aei-tab-content,
.aei-panel-body > .aei-tab-content {
    position: relative;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
}

.aei-page .aei-tab-pane,
.aei-panel .aei-tab-pane,
.aei-panel-body .aei-tab-pane {
    position: static;
    inset: auto;
    display: none;
    width: 100%;
}

.aei-page .aei-tab-pane.active,
.aei-panel .aei-tab-pane.active,
.aei-panel-body .aei-tab-pane.active {
    display: block;
}

/* Tabs del portal (iframe a pantalla completa) */
.aei-shell-center > .aei-tab-content > .aei-tab-pane {
    position: absolute;
    inset: 0;
    display: none;
    overflow: auto;
    -webkit-overflow-scrolling: touch;
}

.aei-shell-center > .aei-tab-content > .aei-tab-pane.active {
    display: block;
}

/* Barras de pestañas */
.aei-page .aei-tab-bar,
.aei-panel .aei-tab-bar {
    flex-wrap: wrap;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    gap: 4px;
}

/* Formularios */
.aei-page .aei-form-group,
.aei-panel .aei-form-group {
    min-width: 0;
    max-width: 100%;
}

.aei-page .aei-input,
.aei-page .aei-select,
.aei-page textarea.aei-input,
.aei-panel .aei-input,
.aei-panel .aei-select,
.aei-panel textarea.aei-input,
.aei-modal .aei-input,
.aei-modal .aei-select,
.aei-modal textarea.aei-input {
    width: 100%;
    max-width: 100%;
    min-width: 0;
}

.aei-form-row {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    align-items: flex-end;
    max-width: 100%;
}

.aei-form-row > .aei-form-group,
.aei-form-row > .aei-form-col {
    flex: 1 1 220px;
    min-width: 0;
    max-width: 100%;
}

/* Grillas: scroll horizontal en pantallas estrechas */
.aei-grid-scroll {
    width: 100%;
    max-width: 100%;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
}

.aei-grid-scroll > .aei-grid,
.aei-grid-scroll > table.aei-grid,
.aei-grid-scroll > .dataTables_wrapper {
    min-width: 0;
}

/* Toolbar y acciones */
.aei-toolbar {
    flex-wrap: wrap;
    gap: 6px;
    max-width: 100%;
}

.aei-toolbar .aei-btn {
    flex: 0 1 auto;
}

/* Modales */
.aei-modal-wide,
.aei-modal-medium,
.aei-modal-lg {
    width: min(100%, var(--aei-modal-max, 750px));
    max-width: min(100%, var(--aei-modal-max, 750px));
}

.aei-modal-medium {
    --aei-modal-max: 640px;
}

.aei-modal-wide {
    --aei-modal-max: 1050px;
}

.aei-modal-overlay {
    padding: clamp(8px, 2vw, 16px);
    box-sizing: border-box;
}

/* Login */
.aei-login-container {
    width: min(100%, 400px);
    padding: clamp(16px, 4vw, 24px);
}

/* --- Breakpoints --- */

@media (max-width: 1200px) {
    .aei-layout-split {
        flex-direction: column;
    }

    .aei-layout-west {
        width: 100%;
        max-width: 100%;
        border-right: 0;
        border-bottom: 1px solid var(--aei-border, #C8C4BC);
    }

    .aei-layout-center {
        width: 100%;
        min-height: 240px;
    }
}

@media (max-width: 992px) {
    .aei-form-row > .aei-form-group,
    .aei-form-row > .aei-form-col {
        flex: 1 1 100%;
    }

    .aei-dashboard-grid {
        margin-bottom: 12px;
    }

    .aei-panel-body {
        padding: clamp(10px, 2.5vw, 16px);
    }

    .aei-tab-btn {
        font-size: 11px;
        padding: 7px 10px;
    }
}

@media (max-width: 768px) {
    .aei-page-shell {
        padding: 8px;
    }

    .aei-panel-header {
        font-size: 13px;
        padding: 10px 12px;
    }

    .aei-fieldset-body {
        padding: 10px;
    }

    .aei-btn,
    .aei-tab-btn,
    .aei-menu-item {
        min-height: 44px;
    }

    .aei-btn-success {
        min-width: 0;
    }

    .aei-grid {
        font-size: 12px;
    }

    .aei-grid-scroll > .aei-grid,
    .aei-grid-scroll > table.aei-grid {
        min-width: 480px;
    }

    .aei-tab-title {
        max-width: 120px;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
        display: inline-block;
        vertical-align: bottom;
    }

    .aei-modal {
        width: 100%;
        min-width: 0;
        max-height: 92vh;
        overflow: auto;
    }

    .aei-check-group,
    .aei-check-list {
        grid-template-columns: 1fr;
    }
}

/* ============================================================
   Shell móvil
   ------------------------------------------------------------
   Una sola versión del portal. Proyecto / idioma / pendientes /
   quick add se quedan SIEMPRE en la barra superior, junto al botón
   de inicio y salir; en pantallas chicas pasan a una segunda fila
   compacta en vez de apilarse a ancho completo (que dejaba el
   contenido sin alto).
   ============================================================ */

@media (max-width: 992px) {
    .aei-shell {
        height: 100dvh;
    }

    .aei-shell-header {
        flex-wrap: wrap;
        gap: 6px;
        row-gap: 6px;
        padding: 6px 8px;
        min-height: 0;
    }

    .aei-shell-header > img,
    .aei-shell-menu-toggle {
        flex: 0 0 auto;
    }

    .aei-shell-menu-toggle {
        width: 40px;
        min-width: 40px;
        height: 40px;
        padding: 0;
    }

    .aei-shell-header > img {
        width: 30px;
        height: auto;
    }

    .aei-shell-brand {
        flex: 1 1 auto;
        min-width: 0;
        font-size: 13px;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
    }

    /* Segunda fila: todas las herramientas en línea, sin ocupar 100% cada una. */
    .aei-shell-header > .aei-shell-header-tools {
        width: 100%;
        margin-left: 0;
        flex-wrap: wrap;
        align-items: center;
        justify-content: flex-start;
        gap: 6px;
    }

    .aei-shell-header-tools > * {
        flex: 0 0 auto;
        margin: 0;
    }

    .aei-shell-header-tools > .aei-project-picker {
        flex: 1 1 150px;
        min-width: 0;
        width: auto;
        flex-direction: row;
        align-items: center;
    }

    .aei-project-picker .aei-form-inline,
    .aei-project-picker .aei-search-select,
    .aei-project-picker .aei-search-select-wrap,
    .aei-project-picker .aei-search-select-input,
    .aei-project-picker .aei-select {
        width: 100%;
        min-width: 0;
        max-width: none;
    }

    .aei-shell-header-tools > .aei-culture-form {
        flex: 0 1 148px;
        min-width: 0;
    }

    .aei-culture-form .aei-select,
    .aei-culture-form .aei-select-search,
    .aei-culture-form .aei-select-search-input {
        width: 100%;
        min-width: 0;
        max-width: none;
    }

    /* Botones de la barra: solo icono (el texto se pierde, no el acceso). */
    .aei-shell-header .aei-user-chip,
    .aei-shell-header .aei-pending-docs-btn,
    .aei-shell-header .aei-quick-add > .aei-btn,
    .aei-shell-header .aei-shell-header-tools .aei-btn-ghost {
        font-size: 0;
        gap: 4px;
        padding: 8px 10px;
    }

    .aei-shell-header .aei-user-chip .fa,
    .aei-shell-header .aei-pending-docs-btn .fa,
    .aei-shell-header .aei-quick-add > .aei-btn .fa,
    .aei-shell-header .aei-shell-header-tools .aei-btn-ghost .fa {
        font-size: 15px;
    }

    .aei-shell-header .aei-pending-docs-btn .aei-badge {
        font-size: 11px;
    }

    /* El drawer arranca bajo la barra: la hamburguesa y la marca siguen visibles.
       z-index por debajo de 2000: las listas flotantes de los combos con búsqueda
       se cuelgan del body con ese z-index, y con el 15000 legacy quedaban detrás
       del drawer (no se podía elegir proyecto ni idioma desde el menú). */
    .aei-shell-west {
        top: var(--aei-mobile-header-h, 52px);
        z-index: 1200;
        padding-bottom: 12px;
        box-shadow: 0 6px 18px rgba(58, 58, 56, 0.22);
    }

    body.aei-menu-open .aei-shell-menu-backdrop {
        top: var(--aei-mobile-header-h, 52px);
        z-index: 1199;
        background: rgba(58, 58, 56, 0.42);
    }

    /* Pestañas: una sola fila que se desplaza, sin apilarse ni cortar el título. */
    .aei-shell-center > .aei-tab-bar {
        flex-wrap: nowrap;
        overflow-x: auto;
        overflow-y: hidden;
        padding: 6px 8px 0;
        gap: 2px;
        scrollbar-width: thin;
        -webkit-overflow-scrolling: touch;
    }

    .aei-shell-center > .aei-tab-bar .aei-tab-btn {
        flex: 0 0 auto;
    }

    .aei-home-banner {
        padding: 10px;
    }
}

@media (max-width: 480px) {
    .aei-shell-brand {
        font-size: 13px;
    }

    .aei-user-chip {
        font-size: 12px;
        padding: 6px 10px;
    }

    /* Ya no caben proyecto + idioma + iconos en la misma línea:
       el selector de proyecto toma la fila y el resto queda debajo. */
    .aei-shell-header-tools > .aei-project-picker {
        flex: 1 1 100%;
        padding: 4px 10px;
    }

    .aei-shell-header-tools > .aei-culture-form {
        flex: 1 1 130px;
    }

    .aei-quick-add-menu,
    .aei-callout {
        right: 0;
        left: 0;
        min-width: 0;
        width: min(100vw - 16px, 280px);
    }
}

/* ============================================================
   Red de seguridad responsive
   ------------------------------------------------------------
   Este archivo se carga en <head>, pero los CSS de módulo se cargan
   dentro del body (después) y usan selectores más específicos
   (.aei-{modulo} .aei-layout-west) o atributos style= heredados del
   legacy. Sin !important las reglas de abajo pierden la cascada y los
   paneles de ancho fijo desbordan el viewport.

   Todo vive dentro de @media, así que el escritorio no cambia.
   ============================================================ */

@media (max-width: 1200px) {
    /* Los módulos fijan min-height de escritorio (520px/480px) que en un
       teléfono deja franjas vacías enormes. */
    .aei-layout-split,
    .aei-layout-west,
    .aei-layout-east,
    .aei-layout-center {
        min-height: 0 !important;
    }
}

@media (max-width: 992px) {
    /* Maestro/detalle a una sola columna. Le gana a los anchos fijos de
       módulo (435px, 400px, 370px) y a los style="width:435px" inline.
       Solo se fuerza el eje horizontal y la dirección: en columna, `flex`
       pasa a gobernar la altura y los módulos de alto completo
       (Comités de Obra, Matriz) ya la ajustan por su cuenta. */
    .aei-layout-split {
        flex-direction: column !important;
        flex-wrap: nowrap !important;
    }

    .aei-layout-west,
    .aei-layout-east,
    .aei-layout-center {
        width: 100% !important;
        max-width: 100% !important;
        min-width: 0 !important;
    }

    .aei-layout-west,
    .aei-layout-east {
        border-right: 0;
        border-left: 0;
    }

    /* Contenedores flex/grid que no pueden encogerse por min-width heredado. */
    .aei-page,
    .aei-panel,
    .aei-panel-body,
    .aei-fieldset,
    .aei-fieldset-body,
    .aei-form-row,
    .aei-form-col,
    .aei-form-group,
    .aei-toolbar {
        min-width: 0 !important;
        max-width: 100% !important;
    }

    /* Iframes de detalle con width fijo en atributo o inline. La altura se
       deja como está: un iframe alto solo hace scrollear la página. */
    iframe {
        max-width: 100% !important;
    }
}

@media (max-width: 768px) {
    /* Campos con ancho fijo (inline style="width:500px" de SolicitudCambio,
       width:340px de totales, min-width:280px del buscador, etc.).
       Solo se acota el máximo: no se fuerza width:100% para no romper los
       grupos horizontales tipo fecha+hora ni los campos numéricos cortos. */
    .aei-input,
    .aei-select,
    input.aei-input,
    select.aei-input,
    textarea.aei-input,
    .aei-search-select,
    .aei-search-select-input,
    .aei-select-search,
    .aei-select-search-input {
        max-width: 100% !important;
        min-width: 0 !important;
        box-sizing: border-box;
    }

    /* Botoneras: que puedan envolver en vez de desbordar. */
    .aei-toolbar,
    .aei-form-actions,
    .aei-modal-footer {
        flex-wrap: wrap !important;
    }
}

/* ============================================================
   Portal-wide responsive hardening (todos los módulos)
   ------------------------------------------------------------
   Completa la red de seguridad: medios, Bootstrap, DataTables,
   modales 100dvh, frames de módulo e inputs anchos fijos.
   No altera el look de escritorio (≥1201px).
   ============================================================ */

img,
video,
canvas,
svg {
    max-width: 100%;
    height: auto;
}

/* Konva / canvas de trabajo: no forzar height:auto */
.aei-konva-stage canvas,
.aei-comunicado-canvas-wrap canvas {
    height: auto;
    max-width: 100%;
}

.aei-module-frame,
.aei-module-frame .aei-page,
.aei-page-shell,
.aei-shell-body,
.aei-shell-center,
.aei-tab-content {
    min-width: 0;
    max-width: 100%;
}

.row,
.row > [class*="col-"] {
    min-width: 0;
    max-width: 100%;
}

/* Grillas y DataTables: scroll horizontal en vez de romper el viewport */
.aei-grid-surface,
.aei-fieldset-body:has(> table.aei-grid),
.aei-fieldset-body:has(> .dataTables_wrapper),
.aei-page .dataTables_wrapper,
.aei-module-frame .dataTables_wrapper,
.table-responsive {
    max-width: 100%;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
}

.aei-page .dataTables_wrapper .dataTables_scroll,
.aei-module-frame .dataTables_wrapper .dataTables_scroll,
.aei-page .dataTables_wrapper .dataTables_scrollBody,
.aei-module-frame .dataTables_wrapper .dataTables_scrollBody {
    max-width: 100%;
}

@media (max-width: 992px) {
    body.aei-module-frame,
    body.aei-page {
        overflow-x: hidden;
        width: 100%;
        max-width: 100%;
    }

    /* Toolbars / filtros: apilar sin desborde */
    .aei-page .aei-toolbar,
    .aei-module-frame .aei-toolbar,
    .aei-page form.aei-toolbar,
    .aei-module-frame form.aei-toolbar {
        width: 100%;
        max-width: 100%;
    }

    .aei-page .aei-toolbar > .aei-input,
    .aei-page .aei-toolbar > .aei-select,
    .aei-page .aei-toolbar > .aei-search-select,
    .aei-page .aei-toolbar > .aei-select-search,
    .aei-module-frame .aei-toolbar > .aei-input,
    .aei-module-frame .aei-toolbar > .aei-select,
    .aei-module-frame .aei-toolbar > .aei-search-select,
    .aei-module-frame .aei-toolbar > .aei-select-search {
        flex: 1 1 160px;
        min-width: 0;
        max-width: 100%;
    }

    /* DataTables pie/cabecera */
    .dataTables_wrapper .aei-dt-toolbar,
    .dataTables_wrapper .aei-dt-footer,
    .dataTables_wrapper .dataTables_length,
    .dataTables_wrapper .dataTables_filter,
    .dataTables_wrapper .dataTables_info,
    .dataTables_wrapper .dataTables_paginate {
        float: none !important;
        text-align: left;
        max-width: 100%;
    }

    .dataTables_wrapper .dataTables_paginate {
        padding-top: 6px;
    }
}

@media (max-width: 768px) {
    /* En móvil, columnas Bootstrap de filas con gap pasan a una sola columna */
    .aei-page .row.g-2 > [class*="col-"],
    .aei-page .row.g-3 > [class*="col-"],
    .aei-module-frame .row.g-2 > [class*="col-"],
    .aei-module-frame .row.g-3 > [class*="col-"] {
        flex: 0 0 100%;
        max-width: 100%;
    }

    /* Modales: cabecera/pie fijos, cuerpo scrollea; tope con dvh */
    .aei-modal-overlay {
        padding: 8px;
        align-items: flex-start;
    }

    .aei-modal,
    .aei-modal-wide,
    .aei-modal-medium,
    .aei-modal-lg,
    .aei-modal-sm,
    .aei-modal-xs {
        width: 100% !important;
        max-width: 100% !important;
        min-width: 0 !important;
        max-height: calc(100dvh - 16px) !important;
        display: flex;
        flex-direction: column;
        min-height: 0;
        overflow: hidden;
    }

    .aei-modal-header,
    .aei-modal-footer {
        flex: 0 0 auto;
    }

    .aei-modal-body {
        flex: 1 1 auto;
        min-height: 0;
        overflow: auto;
        -webkit-overflow-scrolling: touch;
    }

    /* Bootstrap modal dialogs usados en algunos módulos */
    .modal-dialog {
        margin: 0.5rem auto;
        max-width: calc(100% - 1rem);
        width: calc(100% - 1rem);
    }

    .modal-content {
        max-height: calc(100dvh - 1rem);
    }

    /* Botones de acción a ancho usable en móvil */
    .aei-grid-actions,
    .aei-form-actions {
        gap: 8px;
    }

    .aei-grid-actions .aei-btn,
    .aei-form-actions .aei-btn,
    .aei-modal-footer .aei-btn {
        min-height: 40px;
    }

    /* Anchos fijos legacy (style="width:NNNpx") en campos de formulario */
    .aei-form-group > .aei-input[style*="width"],
    .aei-form-group > .aei-select[style*="width"],
    .aei-form-group > textarea.aei-input[style*="width"],
    .aei-fieldset-body .aei-input[style*="width"],
    .aei-fieldset-body .aei-select[style*="width"] {
        width: 100% !important;
        max-width: 100% !important;
    }

    /* Tables: forzar contenedor con scroll si no lo tienen */
    table.aei-grid {
        max-width: none;
    }

    .aei-page .aei-dt-toolbar,
    .aei-module-frame .aei-dt-toolbar {
        flex-wrap: wrap;
        gap: 6px;
    }
}

@media (max-width: 576px) {
    .aei-page-shell {
        padding: 6px;
    }

    .aei-fieldset-legend,
    .aei-panel-header {
        font-size: 12px;
        padding: 8px 10px;
    }

    .aei-label,
    .aei-page label,
    .aei-module-frame label {
        font-size: 12px;
    }

    .aei-btn {
        padding-left: 10px;
        padding-right: 10px;
    }

    .aei-login-page {
        padding: 1rem 0.75rem;
    }
}

@media (prefers-reduced-motion: reduce) {
    .aei-shell-west,
    .aei-shell-menu-backdrop,
    .aei-modal-overlay,
    .aei-a11y {
        transition: none !important;
    }
}

