/* rsalas — estilos propios sobre Bootstrap 5 */

/* --- Tipografía: Inter (variable, servida desde el proyecto para funcionar sin internet) --- */
@font-face {
    font-family: 'Inter';
    font-style: normal;
    font-display: swap;
    font-weight: 100 900;
    src: url('../vendor/fonts/inter/inter-latin-wght-normal.woff2') format('woff2-variations');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
    font-family: 'Inter';
    font-style: normal;
    font-display: swap;
    font-weight: 100 900;
    src: url('../vendor/fonts/inter/inter-latin-ext-wght-normal.woff2') format('woff2-variations');
    unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

:root {
    /* Marca */
    --rs-primario: #7A1F23;
    --rs-primario-oscuro: #5E171A;
    --rs-secundario: #C8434A;
    --rs-primario-suave: #F6ECEC;   /* fondo de elementos activos */
    --rs-primario-tenue: #FBF5F5;   /* hover */

    /* Neutros cálidos */
    --rs-fondo: #F6F4F2;
    --rs-superficie: #FFFFFF;
    --rs-superficie-2: #FAF9F7;     /* cabeceras de tabla, barras de filtro */
    --rs-texto: #1F1A19;
    --rs-texto-suave: #6A625E;
    --rs-texto-tenue: #9A918C;
    --rs-borde: #E6E1DC;
    --rs-borde-suave: #EFEBE7;
    --rs-borde-campo: #D8D1CB;

    --rs-congelado-fondo: #E6F3FB;
    --rs-congelado-icono: #1F78B4;

    --rs-sombra-1: 0 1px 2px rgba(31, 26, 25, .05);
    --rs-sombra-2: 0 1px 3px rgba(31, 26, 25, .06), 0 4px 12px rgba(31, 26, 25, .04);
    --rs-sombra-3: 0 12px 32px rgba(31, 26, 25, .12);
    --rs-radio: .625rem;
    --rs-radio-sm: .45rem;

    --rs-ancho-lateral: 248px;
    --rs-ancho-lateral-colapsado: 68px;
    --rs-alto-superior: 64px;

    --bs-font-sans-serif: 'Inter', system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
    --bs-body-font-size: .9rem;
    --bs-body-line-height: 1.5;
    --bs-body-color: var(--rs-texto);
    --bs-secondary-color: var(--rs-texto-suave);
    --bs-tertiary-color: var(--rs-texto-tenue);
    --bs-emphasis-color: var(--rs-texto);
    --bs-primary: var(--rs-primario);
    --bs-primary-rgb: 122, 31, 35;
    --bs-link-color: var(--rs-primario);
    --bs-link-color-rgb: 122, 31, 35;
    --bs-link-hover-color: var(--rs-secundario);
    --bs-link-hover-color-rgb: 200, 67, 74;
    --bs-border-color: var(--rs-borde);
    --bs-border-radius: var(--rs-radio-sm);
    --bs-border-radius-sm: .375rem;
    --bs-border-radius-lg: var(--rs-radio);
    --bs-focus-ring-color: rgba(122, 31, 35, .2);
    --bs-heading-color: var(--rs-texto);
}

body {
    background-color: var(--rs-fondo);
    color: var(--rs-texto);
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
}

h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 { font-weight: 600; letter-spacing: -.011em; }
.h4, h4 { font-size: 1.25rem; }
.h5, h5 { font-size: 1.05rem; }
.h6, h6 { font-size: .925rem; }
code { color: var(--rs-primario); }
::selection { background: rgba(122, 31, 35, .16); }

/* Cifras alineadas en tablas y resúmenes */
.table, .valor-resumen, .ficha-bolsa, .total-bolsas, .subtotal-bolsas { font-variant-numeric: tabular-nums; }

/* --- Botones --- */
.btn {
    --bs-btn-font-weight: 500;
    --bs-btn-padding-x: .85rem;
    --bs-btn-padding-y: .42rem;
    --bs-btn-font-size: .875rem;
    --bs-btn-border-radius: var(--rs-radio-sm);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: .15rem;
    white-space: nowrap;
}
.btn-sm { --bs-btn-padding-x: .6rem; --bs-btn-padding-y: .28rem; --bs-btn-font-size: .8rem; --bs-btn-border-radius: .375rem; }
.btn-lg { --bs-btn-padding-x: 1.15rem; --bs-btn-padding-y: .6rem; --bs-btn-font-size: .95rem; }
.btn.w-100, .btn.d-block { display: flex; }
.btn-link { --bs-btn-font-weight: 500; text-decoration: none; }

.btn-primary {
    --bs-btn-bg: var(--rs-primario);
    --bs-btn-border-color: var(--rs-primario);
    --bs-btn-hover-bg: var(--rs-primario-oscuro);
    --bs-btn-hover-border-color: var(--rs-primario-oscuro);
    --bs-btn-active-bg: var(--rs-primario-oscuro);
    --bs-btn-active-border-color: var(--rs-primario-oscuro);
    --bs-btn-disabled-bg: var(--rs-primario);
    --bs-btn-disabled-border-color: var(--rs-primario);
    --bs-btn-focus-shadow-rgb: 122, 31, 35;
    box-shadow: 0 1px 2px rgba(94, 23, 26, .25), inset 0 1px 0 rgba(255, 255, 255, .08);
}

.btn-outline-primary {
    --bs-btn-color: var(--rs-primario);
    --bs-btn-bg: #fff;
    --bs-btn-border-color: rgba(122, 31, 35, .35);
    --bs-btn-hover-color: var(--rs-primario);
    --bs-btn-hover-bg: var(--rs-primario-suave);
    --bs-btn-hover-border-color: var(--rs-primario);
    --bs-btn-active-color: #fff;
    --bs-btn-active-bg: var(--rs-primario);
    --bs-btn-active-border-color: var(--rs-primario);
    --bs-btn-focus-shadow-rgb: 122, 31, 35;
}

/* Secundario neutro: botón blanco con borde gris, el más usado para acciones de apoyo */
.btn-outline-secondary {
    --bs-btn-color: var(--rs-texto);
    --bs-btn-bg: #fff;
    --bs-btn-border-color: var(--rs-borde-campo);
    --bs-btn-hover-color: var(--rs-texto);
    --bs-btn-hover-bg: var(--rs-superficie-2);
    --bs-btn-hover-border-color: #C4BBB4;
    --bs-btn-active-color: var(--rs-texto);
    --bs-btn-active-bg: var(--rs-borde-suave);
    --bs-btn-active-border-color: #C4BBB4;
    --bs-btn-disabled-color: var(--rs-texto-tenue);
    --bs-btn-disabled-bg: #fff;
    --bs-btn-disabled-border-color: var(--rs-borde);
    box-shadow: var(--rs-sombra-1);
}
.btn-outline-success, .btn-outline-danger, .btn-outline-warning, .btn-outline-info {
    --bs-btn-bg: #fff;
    --bs-btn-border-color: var(--rs-borde-campo);
    box-shadow: var(--rs-sombra-1);
}
.btn-outline-success { --bs-btn-color: #146C43; --bs-btn-hover-bg: #E8F5EE; --bs-btn-hover-color: #146C43; --bs-btn-hover-border-color: #8FC9A8; }
.btn-outline-danger  { --bs-btn-color: #B02A37; --bs-btn-hover-bg: #FCEDEE; --bs-btn-hover-color: #B02A37; --bs-btn-hover-border-color: #E4A3A9; }
.btn-outline-warning { --bs-btn-color: #997404; --bs-btn-hover-bg: #FFF6DA; --bs-btn-hover-color: #7A5C03; --bs-btn-hover-border-color: #E8C766; }
.btn-warning { --bs-btn-bg: #F2B705; --bs-btn-border-color: #F2B705; --bs-btn-hover-bg: #DDA704; --bs-btn-hover-border-color: #DDA704; }

/* Botón solo ícono, sin borde (barra superior) */
.btn-icono {
    --bs-btn-padding-x: 0;
    --bs-btn-padding-y: 0;
    width: 36px;
    height: 36px;
    color: var(--rs-texto-suave);
    border: 1px solid transparent;
    font-size: 1.1rem;
}
.btn-icono:hover, .btn-icono:focus-visible { background: var(--rs-superficie-2); border-color: var(--rs-borde); color: var(--rs-texto); }

/* --- Formularios --- */
.form-label { font-size: .8rem; font-weight: 500; color: #3E3634; margin-bottom: .35rem; }
.form-text { font-size: .76rem; color: var(--rs-texto-suave); line-height: 1.45; margin-top: .35rem; }

.form-control, .form-select {
    font-size: .875rem;
    border-color: var(--rs-borde-campo);
    border-radius: var(--rs-radio-sm);
    padding-top: .44rem;
    padding-bottom: .44rem;
    box-shadow: var(--rs-sombra-1);
    transition: border-color .12s ease, box-shadow .12s ease;
}
.form-control::placeholder { color: var(--rs-texto-tenue); }
.form-control:hover:not(:focus):not([readonly]):not(:disabled), .form-select:hover:not(:focus):not(:disabled) { border-color: #C4BBB4; }
.form-control[readonly], .form-control:disabled, .form-select:disabled { background-color: var(--rs-superficie-2); box-shadow: none; }
.form-control-sm, .form-select-sm { font-size: .8rem; padding-top: .25rem; padding-bottom: .25rem; }
.input-group-text { background: var(--rs-superficie-2); border-color: var(--rs-borde-campo); color: var(--rs-texto-suave); font-size: .875rem; }

.form-control:focus,
.form-select:focus,
.form-check-input:focus {
    border-color: var(--rs-secundario);
    box-shadow: 0 0 0 3px rgba(122, 31, 35, .14);
}

.form-check-input { border-color: #BDB4AD; }
.form-check-input:checked {
    background-color: var(--rs-primario);
    border-color: var(--rs-primario);
}
.form-check-label { font-size: .875rem; }

/* --- Elementos comunes --- */
.pagination {
    --bs-pagination-color: var(--rs-texto);
    --bs-pagination-bg: #fff;
    --bs-pagination-hover-color: var(--rs-primario);
    --bs-pagination-hover-bg: var(--rs-primario-tenue);
    --bs-pagination-hover-border-color: var(--rs-borde);
    --bs-pagination-focus-color: var(--rs-primario-oscuro);
    --bs-pagination-focus-box-shadow: 0 0 0 3px rgba(122, 31, 35, .14);
    --bs-pagination-active-bg: var(--rs-primario);
    --bs-pagination-active-border-color: var(--rs-primario);
    --bs-pagination-border-color: var(--rs-borde);
    --bs-pagination-disabled-color: var(--rs-texto-tenue);
    --bs-pagination-padding-x: .7rem;
    --bs-pagination-padding-y: .3rem;
    --bs-pagination-font-size: .825rem;
    --bs-pagination-border-radius: var(--rs-radio-sm);
}

.breadcrumb { --bs-breadcrumb-divider: '›'; --bs-breadcrumb-divider-color: var(--rs-texto-tenue); --bs-breadcrumb-item-padding-x: .45rem;
    font-size: .8rem; }
.breadcrumb .breadcrumb-item.active { color: var(--rs-texto-suave); }
.breadcrumb a { text-decoration: none; color: var(--rs-texto-suave); font-weight: 500; }
.breadcrumb a:hover { color: var(--rs-primario); }

.badge { font-weight: 600; letter-spacing: .01em; }
.badge.text-bg-light { background-color: var(--rs-superficie-2) !important; color: var(--rs-texto-suave) !important; border-color: var(--rs-borde) !important; }

/* Insignia suave: fondo tenue y punto del color del catálogo (estados, categorías, activo) */
.insignia-suave {
    --c: #6C757D;
    display: inline-flex;
    align-items: center;
    gap: .4rem;
    padding: .18rem .6rem .18rem .5rem;
    border-radius: 999px;
    font-size: .75rem;
    font-weight: 600;
    line-height: 1.3;
    white-space: nowrap;
    vertical-align: middle;
    color: color-mix(in srgb, var(--c) 62%, #000);
    background-color: color-mix(in srgb, var(--c) 12%, #fff);
    border: 1px solid color-mix(in srgb, var(--c) 28%, #fff);
}
.insignia-suave::before {
    content: '';
    width: .45rem;
    height: .45rem;
    border-radius: 50%;
    background-color: var(--c);
    flex-shrink: 0;
}

.alert { --bs-alert-border-radius: var(--rs-radio); font-size: .875rem; border-width: 1px; }
.alert > .bi:first-child { font-size: 1rem; line-height: 1.35; }
.alert-success { --bs-alert-bg: #EEF8F2; --bs-alert-border-color: #BFE3CD; --bs-alert-color: #0F5132; }
.alert-danger { --bs-alert-bg: #FDF0F1; --bs-alert-border-color: #F2C2C6; --bs-alert-color: #842029; }
.alert-warning { --bs-alert-bg: #FFF8E6; --bs-alert-border-color: #F5DD9A; --bs-alert-color: #664D03; }
.alert-info { --bs-alert-bg: #EEF6FC; --bs-alert-border-color: #BCDDF3; --bs-alert-color: #084C79; }

.dropdown-menu { --bs-dropdown-border-color: var(--rs-borde); --bs-dropdown-border-radius: var(--rs-radio); --bs-dropdown-font-size: .875rem;
    --bs-dropdown-link-active-bg: var(--rs-primario); --bs-dropdown-link-hover-bg: var(--rs-superficie-2);
    --bs-dropdown-item-padding-y: .45rem; box-shadow: var(--rs-sombra-3); padding: .35rem; }
.dropdown-item { border-radius: .375rem; }

.modal { --bs-modal-border-radius: .85rem; --bs-modal-border-color: transparent; --bs-modal-header-border-color: var(--rs-borde-suave);
    --bs-modal-footer-border-color: var(--rs-borde-suave); --bs-modal-padding: 1.25rem; }
.modal-content { box-shadow: var(--rs-sombra-3); }
.modal-header { padding: 1rem 1.25rem; }
.modal-title > .bi:first-child { color: var(--rs-primario); }
.modal-footer { background: var(--rs-superficie-2); border-bottom-left-radius: var(--bs-modal-inner-border-radius); border-bottom-right-radius: var(--bs-modal-inner-border-radius); }
.modal-backdrop { --bs-backdrop-bg: #1F1A19; --bs-backdrop-opacity: .45; }

.tooltip { --bs-tooltip-bg: #2B2422; --bs-tooltip-font-size: .76rem; --bs-tooltip-border-radius: .375rem; }
.list-group { --bs-list-group-border-color: var(--rs-borde-suave); }

.nav-tabs { --bs-nav-tabs-border-color: var(--rs-borde); --bs-nav-tabs-link-active-color: var(--rs-primario); }
.nav-tabs .nav-link { color: var(--rs-texto-suave); font-weight: 500; }

/* --- Cabecera de página: descripción a la izquierda, acción principal a la derecha --- */
.cabecera-pagina { display: flex; flex-wrap: wrap; gap: .75rem; align-items: center; justify-content: space-between; margin-bottom: 1rem; }
.cabecera-pagina:has(> .breadcrumb, > nav) { margin-bottom: .75rem; }
.subtitulo-pagina { margin: 0; color: var(--rs-texto-suave); font-size: .875rem; }
.acciones-pagina { display: flex; flex-wrap: wrap; gap: .5rem; align-items: center; }

/* --- Tarjetas --- */
.card {
    --bs-card-border-radius: var(--rs-radio);
    --bs-card-inner-border-radius: calc(var(--rs-radio) - 1px);
    --bs-card-border-color: var(--rs-borde);
    --bs-card-cap-padding-y: .8rem;
    --bs-card-cap-padding-x: 1.25rem;
    --bs-card-spacer-x: 1.25rem;
    --bs-card-spacer-y: 1.15rem;
    --bs-card-bg: #fff;
    box-shadow: var(--rs-sombra-2);
}
.card-header { background-color: #fff; border-bottom-color: var(--rs-borde-suave); }
.card-footer { background-color: var(--rs-superficie-2) !important; border-top-color: var(--rs-borde-suave); }
.card-header h2, .card-header h3 { font-weight: 600; }
.card-header > h3.h6, .card-header > h2.h5, .card-header > h2.h6 { display: inline-flex; align-items: center; gap: .45rem; }
.card-header h3 > .bi:first-child, .card-header h2 > .bi:first-child { color: var(--rs-primario); }

/* --- Barra de filtros de los listados (Protocolos, Mantenedores, Auditoría) --- */
.card-header:has(form[role="search"]) { background-color: var(--rs-superficie-2); padding-top: .85rem !important; padding-bottom: .85rem !important; }
.card-header form[role="search"] .form-label,
.card-header form .form-label.small { font-size: .68rem !important; font-weight: 600; text-transform: uppercase;
    letter-spacing: .05em; color: var(--rs-texto-suave); margin-bottom: .25rem !important; }
.card-header form[role="search"] .form-control,
.card-header form[role="search"] .form-select,
.card-header form[role="search"] .input-group-text,
.card-header form[role="search"] .btn { padding-top: .32rem; padding-bottom: .32rem; font-size: .84rem; }
.card-header form[role="search"] .input-group-text { background: #fff; color: var(--rs-texto-tenue); border-right: 0; }
.card-header form[role="search"] .input-group-text + .form-control { border-left: 0; padding-left: 0; }

/* --- Tablas dentro de tarjetas --- */
:where(.card, .modal) .table { font-size: .855rem; --bs-table-color: var(--rs-texto); margin-bottom: 0; }
:where(.card, .modal) .table > thead > tr > th { background-color: var(--rs-superficie-2); color: var(--rs-texto-suave); font-weight: 600;
    text-transform: uppercase; letter-spacing: .045em; font-size: .675rem; white-space: nowrap;
    border-bottom: 1px solid var(--rs-borde); padding-top: .65rem; padding-bottom: .65rem; }
:where(.card, .modal) .table > thead > tr > th a { color: inherit; text-decoration: none; }
:where(.card, .modal) .table > thead > tr > th a:hover { color: var(--rs-primario); }
:where(.card, .modal) .table > tbody > tr > td { border-color: var(--rs-borde-suave); padding-top: .6rem; padding-bottom: .6rem; }
:where(.card, .modal) .table > :not(caption) > tr > :first-child { padding-left: 1.25rem; }
:where(.card, .modal) .table > :not(caption) > tr > :last-child { padding-right: 1.25rem; }
:where(.card, .modal) .table > tbody > tr:last-child > td { border-bottom: 0; }
.table-hover > tbody > tr:hover > * { --bs-table-bg-state: rgba(122, 31, 35, .028); }
.table-light { --bs-table-bg: var(--rs-superficie-2); --bs-table-border-color: var(--rs-borde); }
:where(.card, .modal) .table td > a:not(.btn) { text-decoration: none; font-weight: 600; }
:where(.card, .modal) .table td > a:not(.btn):hover { text-decoration: underline; }

/* En pantallas angostas las celdas no se parten (fechas, números): la tabla se desplaza de lado */
@media (max-width: 767.98px) {
    .table-responsive > .table > tbody > tr > td:not(.col-corte):not(.estado-vacio) { white-space: nowrap; }
}

/* Botones de acción de cada fila: discretos, sin borde, el color aparece al pasar el mouse */
:where(.card, .modal) .table td .btn-sm[class*="btn-outline-"] {
    --bs-btn-border-color: transparent; --bs-btn-bg: transparent;
    --bs-btn-padding-y: 0; --bs-btn-padding-x: 0;
    width: 30px; height: 30px; box-shadow: none; font-size: .9rem;
}
:where(.card, .modal) .table td .btn-sm.btn-outline-secondary { --bs-btn-color: var(--rs-texto-suave); }
:where(.card, .modal) .table td .btn-sm[class*="btn-outline-"]:hover { --bs-btn-hover-border-color: var(--rs-borde); }
:where(.card, .modal) .table td .btn-sm.btn-outline-primary:hover { --bs-btn-hover-bg: var(--rs-primario-suave); --bs-btn-hover-color: var(--rs-primario); }

.text-primario { color: var(--rs-primario) !important; }
.bg-primario { background-color: var(--rs-primario) !important; color: #fff; }
.min-w-0 { min-width: 0; }

/* --- Layout principal --- */
.app-principal { min-width: 0; }

.app-lateral {
    background: #fff;
    border-right: 1px solid var(--rs-borde);
}
.app-lateral-marca { padding: 0 1.1rem; height: var(--rs-alto-superior); border-bottom: 1px solid var(--rs-borde-suave); }
.app-lateral .logo { display: block; height: 38px; width: auto; }
.app-lateral .logo-icono { display: none; height: 36px; width: auto; }
.app-lateral-cuerpo { display: flex !important; flex-direction: column; padding: .75rem .75rem 1rem !important; }

.app-menu .nav-link {
    display: flex;
    align-items: center;
    gap: .7rem;
    padding: .5rem .75rem;
    margin-bottom: 2px;
    border-radius: var(--rs-radio-sm);
    color: #3E3634;
    font-weight: 500;
    font-size: .875rem;
    position: relative;
    transition: background-color .12s ease, color .12s ease;
}
.app-menu .nav-link i { font-size: 1.05rem; color: var(--rs-texto-tenue); transition: color .12s ease; }
.app-menu .nav-link:hover { background: var(--rs-superficie-2); color: var(--rs-texto); }
.app-menu .nav-link:hover i { color: var(--rs-texto-suave); }
.app-menu .nav-link.active { background: var(--rs-primario-suave); color: var(--rs-primario); font-weight: 600; }
.app-menu .nav-link.active i { color: var(--rs-primario); }
.app-menu .nav-link.active::before {
    content: ''; position: absolute; left: -.75rem; top: .45rem; bottom: .45rem; width: 3px;
    border-radius: 0 3px 3px 0; background: var(--rs-primario);
}
.app-menu .nav-link.disabled { color: var(--rs-texto-tenue); }

.app-menu .titulo-seccion {
    font-size: .66rem;
    font-weight: 600;
    letter-spacing: .08em;
    text-transform: uppercase;
    color: var(--rs-texto-tenue);
    padding: 1rem .75rem .4rem;
}
.app-menu .titulo-seccion:first-child { padding-top: .35rem; }

.app-lateral-pie {
    margin-top: auto;
    display: flex;
    gap: .5rem;
    align-items: flex-start;
    padding: .75rem;
    border-radius: var(--rs-radio-sm);
    background: var(--rs-superficie-2);
    border: 1px solid var(--rs-borde-suave);
    font-size: .72rem;
    line-height: 1.35;
    color: var(--rs-texto-suave);
}
.app-lateral-pie .bi { color: var(--rs-primario); font-size: .85rem; }

.app-superior {
    display: flex;
    align-items: center;
    gap: .75rem;
    padding: 0 1rem;
    height: var(--rs-alto-superior);
    background: rgba(255, 255, 255, .92);
    backdrop-filter: saturate(1.4) blur(8px);
    border-bottom: 1px solid var(--rs-borde);
}
.app-titulo h1 { font-size: 1.05rem; font-weight: 650; margin: 0; line-height: 1.25; }
.app-titulo p { font-size: .78rem; color: var(--rs-texto-suave); margin: .1rem 0 0; line-height: 1.3; }

.fecha-superior {
    align-items: center; gap: .4rem; padding: .3rem .7rem; border-radius: 999px;
    font-size: .76rem; font-weight: 500; color: var(--rs-texto-suave); white-space: nowrap; flex-shrink: 0;
    background: var(--rs-superficie-2); border: 1px solid var(--rs-borde-suave);
}

.menu-usuario {
    --bs-btn-padding-x: .35rem; --bs-btn-padding-y: .25rem;
    gap: .6rem; border: 1px solid transparent; border-radius: 999px;
}
.menu-usuario:hover, .menu-usuario[aria-expanded="true"] { background: var(--rs-superficie-2); border-color: var(--rs-borde); }
.menu-usuario .usuario-nombre { display: block; font-weight: 600; font-size: .82rem; line-height: 1.15; color: var(--rs-texto); }
.menu-usuario .usuario-rol { display: block; font-size: .7rem; color: var(--rs-texto-suave); line-height: 1.2; }
.menu-usuario-desplegable { min-width: 15rem; }

.avatar-iniciales {
    width: 34px;
    height: 34px;
    border-radius: 50%;
    background: linear-gradient(135deg, var(--rs-secundario), var(--rs-primario));
    color: #fff;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-weight: 600;
    font-size: .78rem;
    letter-spacing: .02em;
    flex-shrink: 0;
    box-shadow: 0 0 0 2px #fff, 0 0 0 3px var(--rs-borde);
}

.app-contenido { padding: 1.25rem 1rem 1.5rem; }
.app-pie {
    display: flex; justify-content: space-between; gap: 1rem;
    padding: .9rem 1rem; font-size: .75rem; color: var(--rs-texto-tenue);
    border-top: 1px solid var(--rs-borde);
}

@media (min-width: 992px) {
    .app-superior { padding: 0 1.75rem 0 1.25rem; }
    .app-contenido { padding: 1.5rem 1.75rem 2rem; }
    .app-pie { padding: 1rem 1.75rem; }

    .app-lateral {
        width: var(--rs-ancho-lateral);
        flex-shrink: 0;
        position: sticky;
        top: 0;
        height: 100vh;
        overflow-y: auto;
        /* offcanvas-lg deja el fondo transparente y oculta el encabezado (logo) en escritorio */
        background-color: #fff !important;
    }

    .app-lateral .offcanvas-header { display: flex; }

    /* Menú colapsado: solo íconos, para dar más ancho al contenido (botón en la barra superior) */
    .app-lateral { overflow-x: hidden; transition: width .2s ease; }
    .menu-colapsado .app-lateral { width: var(--rs-ancho-lateral-colapsado); }
    .menu-colapsado .app-lateral .offcanvas-header { justify-content: center; padding-left: .5rem; padding-right: .5rem; }
    .menu-colapsado .app-lateral .logo { display: none; }
    .menu-colapsado .app-lateral .logo-icono { display: block; }
    .menu-colapsado .app-lateral-cuerpo { padding: .75rem .5rem !important; }
    .menu-colapsado .app-menu .nav-link { justify-content: center; padding: .6rem 0; }
    .menu-colapsado .app-menu .nav-link.active::before { left: -.5rem; }
    .menu-colapsado .app-menu .texto-menu,
    .menu-colapsado .app-menu .badge,
    .menu-colapsado .app-lateral-pie { display: none; }
    .menu-colapsado .app-menu .titulo-seccion { padding: 0; margin: .75rem .35rem; border-top: 1px solid var(--rs-borde); }
    .menu-colapsado .app-menu .titulo-seccion:first-child { display: none; }
}

@media (max-width: 991.98px) {
    .app-lateral.offcanvas-lg { width: var(--rs-ancho-lateral); }
    .app-superior { height: 56px; }
}

/* --- Pantalla de ingreso: panel de marca + formulario --- */
.pagina-ingreso { min-height: 100vh; background: var(--rs-fondo); }

.ingreso { display: grid; min-height: 100vh; grid-template-columns: 1fr; }
@media (min-width: 992px) { .ingreso { grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr); } }

.ingreso-marca {
    position: relative;
    overflow: hidden;
    display: none;
    flex-direction: column;
    justify-content: space-between;
    padding: 3rem 3.5rem;
    color: #fff;
    background:
        radial-gradient(circle at 85% 8%, rgba(255, 255, 255, .12), transparent 40%),
        radial-gradient(circle at 10% 95%, rgba(200, 67, 74, .45), transparent 45%),
        linear-gradient(150deg, #8A2328 0%, var(--rs-primario-oscuro) 55%, #3A0E11 100%);
}
@media (min-width: 992px) { .ingreso-marca { display: flex; } }
.ingreso-marca::after {
    /* trama sutil de líneas para dar textura */
    content: ''; position: absolute; inset: 0; pointer-events: none; opacity: .07;
    background-image: repeating-linear-gradient(135deg, #fff 0 1px, transparent 1px 22px);
}
.ingreso-marca > * { position: relative; z-index: 1; }
.ingreso-marca .sello {
    display: inline-flex; align-items: center; gap: .75rem; font-weight: 600; font-size: 1.05rem; letter-spacing: .01em;
}
.ingreso-marca .sello img { width: 44px; height: 44px; border-radius: 12px; box-shadow: 0 0 0 2px rgba(255, 255, 255, .25); }
.ingreso-marca h2 { font-size: clamp(1.7rem, 2.4vw, 2.3rem); font-weight: 700; line-height: 1.15; letter-spacing: -.02em; margin-bottom: .9rem; color: #fff; }
.ingreso-marca .bajada { font-size: .98rem; opacity: .82; max-width: 30rem; margin-bottom: 2rem; }
.ingreso-marca .rasgos { list-style: none; padding: 0; margin: 0; display: grid; gap: 1rem; max-width: 30rem; }
.ingreso-marca .rasgos li { display: flex; gap: .85rem; align-items: flex-start; }
.ingreso-marca .rasgos .bi {
    flex-shrink: 0; width: 36px; height: 36px; border-radius: 10px; display: inline-flex; align-items: center; justify-content: center;
    background: rgba(255, 255, 255, .12); border: 1px solid rgba(255, 255, 255, .18); font-size: 1rem;
}
.ingreso-marca .rasgos strong { display: block; font-weight: 600; font-size: .92rem; }
.ingreso-marca .rasgos span { display: block; font-size: .82rem; opacity: .75; }
.ingreso-marca .pie-marca { font-size: .75rem; opacity: .6; }

.ingreso-formulario { display: flex; align-items: center; justify-content: center; padding: 2rem 1.25rem; }
.ingreso-formulario .contenedor { width: 100%; max-width: 380px; }
.ingreso-formulario .logo { width: 210px; max-width: 100%; height: auto; margin-bottom: 2rem; }
.ingreso-formulario h1 { font-size: 1.5rem; font-weight: 700; letter-spacing: -.02em; margin-bottom: .35rem; }
.ingreso-formulario .form-control { padding-top: .6rem; padding-bottom: .6rem; }
.ingreso-formulario .input-group-text { background: #fff; }
.ingreso-formulario .input-group > .input-group-text + .form-control { border-left: 0; padding-left: .25rem; }
.ingreso-formulario .btn-primary { padding-top: .65rem; padding-bottom: .65rem; font-size: .925rem; }
.ingreso-formulario .ayuda { font-size: .78rem; color: var(--rs-texto-tenue); }

/* Páginas de error */
.pagina-error .codigo-error { font-size: 4.5rem; font-weight: 800; letter-spacing: -.04em; line-height: 1; color: var(--rs-primario); }

/* --- Cortes congelados: fondo celeste e ícono de frío en todo listado --- */
tr.fila-congelada > * { background-color: var(--rs-congelado-fondo) !important; }
.fila-congelada:not(tr) { background-color: var(--rs-congelado-fondo); }
.icono-congelado { color: var(--rs-congelado-icono); }

/* --- Mantenedores --- */
.grupo-mantenedores { display: flex; align-items: center; gap: .75rem; margin: 1.75rem 0 .85rem; }
.grupo-mantenedores:first-of-type { margin-top: .5rem; }
.grupo-mantenedores h2 { font-size: .72rem; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; color: var(--rs-texto-suave); margin: 0; white-space: nowrap; }
.grupo-mantenedores::after { content: ''; flex: 1; height: 1px; background: var(--rs-borde); }

.tarjeta-mantenedor { transition: border-color .15s, box-shadow .15s, transform .15s; }
.tarjeta-mantenedor:hover { border-color: rgba(122, 31, 35, .35); box-shadow: 0 6px 18px rgba(122, 31, 35, .08); transform: translateY(-1px); }
.tarjeta-mantenedor .flecha { margin-left: auto; color: var(--rs-texto-tenue); transition: transform .15s, color .15s; align-self: center; }
.tarjeta-mantenedor:hover .flecha { color: var(--rs-primario); transform: translateX(2px); }

.icono-mantenedor {
    width: 42px;
    height: 42px;
    border-radius: .65rem;
    background: var(--rs-primario-suave);
    color: var(--rs-primario);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 1.2rem;
    flex-shrink: 0;
    border: 1px solid rgba(122, 31, 35, .08);
}

.muestra-color {
    display: inline-block;
    width: 1.1rem;
    height: 1.1rem;
    border-radius: .3rem;
    border: 1px solid rgba(0, 0, 0, .15);
    vertical-align: middle;
}

.paginacion { display: flex; align-items: center; }
.paginacion > nav { width: 100%; }
.paginacion .pagination, .paginacion p.small { margin-bottom: 0; }
.paginacion p.small { color: var(--rs-texto-suave); }

/* Barra de herramientas sobre un listado: total a la izquierda, acciones a la derecha */
.barra-listado { display: flex; flex-wrap: wrap; gap: .75rem; align-items: center; justify-content: space-between; margin-bottom: 1rem; }
.barra-listado .total { font-size: .85rem; color: var(--rs-texto-suave); }
.barra-listado .total strong { color: var(--rs-texto); font-weight: 600; }

/* Formulario de mantenedor: ancho cómodo de lectura */
.formulario-acotado { max-width: 1080px; }

/* Ficha de lectura (detalle de un registro) */
.ficha-datos { margin: 0; }
.ficha-datos > dt { font-weight: 500; font-size: .8rem; color: var(--rs-texto-suave); padding-top: .55rem; padding-bottom: .55rem; border-bottom: 1px solid var(--rs-borde-suave); }
.ficha-datos > dd { margin: 0; padding-top: .55rem; padding-bottom: .55rem; border-bottom: 1px solid var(--rs-borde-suave); font-weight: 500; }
.ficha-datos > dt:nth-last-of-type(1), .ficha-datos > dd:last-of-type { border-bottom: 0; }

/* Lista de selección múltiple con buscador */
.lista-seleccion { max-height: 420px; overflow-y: auto; background: #fff; }
.lista-seleccion .item-seleccion { cursor: pointer; }
.lista-seleccion .item-seleccion:last-child { border-bottom: 0 !important; }
.lista-seleccion .item-seleccion:hover { background: var(--rs-superficie-2); }
.lista-seleccion .item-seleccion.seleccionado { box-shadow: inset 3px 0 0 var(--rs-primario); }

/* Tablas largas (cortes de plantilla y protocolo): encabezado fijo al hacer scroll */
.tabla-alta { max-height: 70vh; overflow: auto; }
.tabla-alta thead th { position: sticky; top: 0; z-index: 2; }
.tabla-formulas td.formula { max-width: 15rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-size: .8rem; }
.tabla-formulas thead th, .tabla-protocolo thead th { white-space: nowrap; font-size: .8rem; }

/* --- Inicio --- */
.bienvenida { position: relative; overflow: hidden; display: flex; flex-wrap: wrap; gap: 1rem; align-items: center; justify-content: space-between;
    padding: 1.5rem 1.75rem; border-radius: .85rem; color: #fff;
    background: radial-gradient(circle at 92% 0%, rgba(255, 255, 255, .16), transparent 42%),
                linear-gradient(120deg, #8A2328 0%, var(--rs-primario-oscuro) 58%, #3E0F12 100%);
    box-shadow: 0 10px 28px rgba(94, 23, 26, .2); }
.bienvenida::after { content: ''; position: absolute; inset: 0; pointer-events: none; opacity: .06;
    background-image: repeating-linear-gradient(135deg, #fff 0 1px, transparent 1px 22px); }
.bienvenida > * { position: relative; z-index: 1; }
.bienvenida-fecha { font-size: .78rem; opacity: .8; margin-bottom: .3rem; font-weight: 500; }
.bienvenida-titulo { font-size: 1.45rem; font-weight: 700; letter-spacing: -.02em; margin: 0 0 .3rem; color: #fff; }
.bienvenida-texto { font-size: .875rem; opacity: .82; margin: 0 0 .6rem; max-width: 40rem; }
.bienvenida-rol { display: inline-block; font-size: .68rem; font-weight: 600; letter-spacing: .06em; text-transform: uppercase;
    background: rgba(255, 255, 255, .14); border: 1px solid rgba(255, 255, 255, .24); border-radius: 2rem; padding: .15rem .65rem; }
.boton-bienvenida { color: var(--rs-primario); font-weight: 600; box-shadow: 0 6px 16px rgba(0, 0, 0, .18); border: 0; }
.boton-bienvenida:hover { color: var(--rs-primario-oscuro); background: #fff; }
.titulo-bloque { font-size: .72rem; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; color: var(--rs-texto-suave); }
.valor-resumen { font-size: 1.75rem; font-weight: 700; line-height: 1; letter-spacing: -.02em; }
.etiqueta-resumen { font-size: .8rem; color: var(--rs-texto-suave); margin-top: .3rem; font-weight: 500; }
.tarjeta-resumen { position: relative; overflow: hidden; transition: transform .15s, box-shadow .15s; }
.tarjeta-resumen::before { content: ''; position: absolute; left: 0; right: 0; top: 0; height: 3px; background: var(--color-tarjeta); }
.tarjeta-resumen:hover { transform: translateY(-1px); box-shadow: 0 8px 20px rgba(31, 26, 25, .08); }
.tarjeta-resumen .icono-resumen {
    width: 44px; height: 44px; border-radius: .7rem; flex-shrink: 0;
    display: inline-flex; align-items: center; justify-content: center; font-size: 1.25rem;
    color: var(--color-tarjeta); background: color-mix(in srgb, var(--color-tarjeta) 11%, white);
}
@media (max-width: 575.98px) {
    .tarjeta-resumen .card-body { padding: .9rem; gap: .65rem !important; }
    .tarjeta-resumen .icono-resumen { width: 36px; height: 36px; font-size: 1.05rem; }
    .etiqueta-resumen { font-size: .74rem; word-break: normal; overflow-wrap: normal; hyphens: auto; }
}
.barra-categoria { width: 4px; align-self: stretch; border-radius: 3px; flex-shrink: 0; }
.actividad-completada .fw-semibold { text-decoration: line-through; color: var(--bs-secondary-color); }

/* Estado vacío */
.estado-vacio { text-align: center; color: var(--rs-texto-suave); padding: 2.5rem 1rem; }
.estado-vacio .bi { display: inline-flex; align-items: center; justify-content: center; width: 52px; height: 52px; border-radius: 50%;
    background: var(--rs-superficie-2); border: 1px solid var(--rs-borde-suave); color: var(--rs-texto-tenue); font-size: 1.4rem; margin-bottom: .75rem; }
.estado-vacio strong { display: block; color: var(--rs-texto); font-weight: 600; margin-bottom: .15rem; }
.estado-vacio span { font-size: .85rem; }

/* --- Calendario (FullCalendar) --- */
.fc { --fc-button-bg-color: #fff; --fc-button-border-color: var(--rs-borde-campo); --fc-button-text-color: var(--rs-texto);
      --fc-button-hover-bg-color: var(--rs-superficie-2); --fc-button-hover-border-color: #C4BBB4;
      --fc-button-active-bg-color: var(--rs-primario); --fc-button-active-border-color: var(--rs-primario);
      --fc-today-bg-color: rgba(200, 67, 74, .06); --fc-border-color: var(--rs-borde-suave);
      --fc-neutral-bg-color: var(--rs-superficie-2); font-size: .85rem; }
.fc .fc-button { font-size: .82rem; font-weight: 500; padding: .35rem .75rem; box-shadow: var(--rs-sombra-1); text-transform: capitalize; }
.fc .fc-button-primary:not(:disabled):hover { color: var(--rs-texto); }
.fc .fc-button-primary:not(:disabled).fc-button-active, .fc .fc-button-primary:not(:disabled):active { color: #fff; }
.fc .fc-button-primary:disabled { color: var(--rs-texto-tenue); background: var(--rs-superficie-2); border-color: var(--rs-borde); }
.fc .fc-button:focus { box-shadow: 0 0 0 3px rgba(122, 31, 35, .14) !important; }
.fc .fc-toolbar-title { font-size: 1.1rem; font-weight: 600; }
.fc .fc-toolbar-title::first-letter { text-transform: uppercase; }
.fc a { color: inherit; text-decoration: none; }
.fc .fc-col-header-cell { background: var(--rs-superficie-2); }
.fc .fc-col-header-cell-cushion { text-transform: capitalize; font-size: .75rem; font-weight: 600; color: var(--rs-texto-suave); padding: .5rem 0; }
.fc .fc-daygrid-day-number { font-size: .78rem; color: var(--rs-texto-suave); padding: .35rem .5rem; }
.fc .fc-day-today .fc-daygrid-day-number { background: var(--rs-primario); color: #fff; border-radius: 999px; min-width: 1.6rem; text-align: center; margin: .25rem; padding: .1rem .4rem; }
.fc .fc-event { cursor: pointer; border-radius: .3rem; font-size: .74rem; font-weight: 500; padding: 0 .15rem; }
.fc .fc-scrollgrid { border-radius: var(--rs-radio-sm); overflow: hidden; }
.fc .evento-completado { opacity: .55; text-decoration: line-through; }
@media (max-width: 575.98px) { .fc .fc-toolbar { flex-direction: column; gap: .5rem; } }

/* --- Protocolo: pasos, tabla de cortes y recálculo --- */
.pasos-protocolo .paso { display: inline-flex; align-items: center; gap: .45rem; padding: .3rem .85rem .3rem .35rem; border-radius: 2rem;
    background: #fff; border: 1px solid var(--rs-borde); color: var(--rs-texto-suave); font-size: .82rem; font-weight: 500; box-shadow: var(--rs-sombra-1); }
.pasos-protocolo .paso .numero { width: 1.4rem; height: 1.4rem; border-radius: 50%; background: var(--rs-borde-suave); color: var(--rs-texto-suave);
    display: inline-flex; align-items: center; justify-content: center; font-weight: 600; font-size: .72rem; }
.pasos-protocolo .paso.activo { border-color: rgba(122, 31, 35, .4); background: var(--rs-primario-tenue); color: var(--rs-primario); font-weight: 600; }
.pasos-protocolo .paso.activo .numero { background: var(--rs-primario); color: #fff; }
.pasos-protocolo .paso.hecho { color: #146C43; }
.pasos-protocolo .paso.hecho .numero { background: #198754; color: #fff; }

/* Pasos en versión reducida (pantalla de trabajo) */
.pasos-protocolo.pasos-compactos .paso { padding: .15rem .65rem .15rem .2rem; font-size: .76rem; gap: .35rem; }
.pasos-protocolo.pasos-compactos .paso .numero { width: 1.25rem; height: 1.25rem; font-size: .68rem; }

/* Encabezado del protocolo compacto: etiquetas pequeñas, campos bajos y menos aire, sin perder legibilidad */
.encabezado-compacto .card-header { padding: .5rem 1rem; }
.encabezado-compacto .boton-plegar { display: inline-flex; align-items: center; gap: .45rem; padding: 0; flex-shrink: 0;
    color: var(--rs-texto); font-weight: 600; font-size: .9rem; text-decoration: none; box-shadow: none; }
.encabezado-compacto .boton-plegar:hover { color: var(--rs-primario); }
.encabezado-compacto .boton-plegar .bi-card-heading { color: var(--rs-primario); }
.encabezado-compacto .icono-plegar { font-size: .75rem; color: var(--rs-texto-suave); transition: transform .2s ease; }
.encabezado-compacto.plegado .icono-plegar { transform: rotate(-90deg); }
.encabezado-compacto .resumen-plegado { display: none; min-width: 0; padding-left: .6rem; border-left: 1px solid var(--rs-borde); }
.encabezado-compacto.plegado .resumen-plegado { display: block; }
.encabezado-compacto.plegado .card-header { border-bottom: 0; }

.encabezado-compacto .card-body { padding: .7rem 1rem .85rem; }
.encabezado-compacto .row { --bs-gutter-x: .75rem; --bs-gutter-y: .55rem; }
.encabezado-compacto .form-label { font-size: .72rem; font-weight: 500; letter-spacing: .01em; color: var(--rs-texto-suave);
    margin-bottom: .2rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%; }
.encabezado-compacto .form-control,
.encabezado-compacto .form-select,
.encabezado-compacto .btn-group > .btn { padding-top: .28rem; padding-bottom: .28rem; font-size: .85rem; }
.encabezado-compacto .form-control { padding-left: .6rem; padding-right: .6rem; }
.encabezado-compacto .form-select { padding-left: .6rem; }
.encabezado-compacto .form-control[readonly] { background-color: var(--rs-superficie-2); }
.encabezado-compacto textarea.form-control { min-height: calc(1.5em + .56rem + 2px); }

/* Selector SI / NO de "Cumple" */
.btn-check:checked + .btn-outline-success { background-color: #198754; border-color: #198754; color: #fff; }
.btn-check:checked + .btn-outline-danger { background-color: #B02A37; border-color: #B02A37; color: #fff; }

.tabla-cortes-protocolo { font-size: .8rem; }
.tabla-cortes-protocolo td, .tabla-cortes-protocolo th { padding-left: .35rem; padding-right: .35rem; }
.tabla-cortes-protocolo td.col-corte { white-space: normal !important; min-width: 11rem; max-width: 16rem; line-height: 1.25; }
.tabla-cortes-protocolo .col-ingreso { width: 4.8rem; min-width: 4.8rem; background-color: #FFFBEB; }
.tabla-cortes-protocolo input.form-control { font-size: .8rem; box-shadow: none; }
.tabla-cortes-protocolo thead .col-ingreso { background-color: #FDF1C7 !important; color: #7A5C03 !important; }
.tabla-cortes-protocolo input.form-control { padding: .15rem .4rem; }
.tabla-cortes-protocolo tr.fila-con-cajas .col-corte { font-weight: 600; }
.saldo-negativo { color: #C1121F !important; font-weight: 700; }

/* Bolsa de cada corte (con alternativa elegible) */
.tabla-cortes-protocolo .col-bolsa { white-space: nowrap; min-width: 10.5rem; }
.tabla-cortes-protocolo .col-bolsa { font-size: .76rem; }
.tabla-cortes-protocolo .col-bolsa .form-select { font-size: .76rem; padding-top: .15rem; padding-bottom: .15rem;
    border-color: transparent; background-color: transparent; cursor: pointer; box-shadow: none; }
.tabla-cortes-protocolo .col-bolsa .form-select:hover,
.tabla-cortes-protocolo .col-bolsa .form-select:focus { border-color: var(--rs-borde); background-color: #fff; }
.tabla-cortes-protocolo .col-bolsa.con-alternativa .form-select { border-color: #E0A800; background-color: #FFF6D6; font-weight: 600; }
.codigo-bolsa { margin-left: .4rem; font-size: .74rem; color: var(--rs-texto-suave); font-family: var(--bs-font-monospace); }

/* Mantenedor de bolsas: elección de alternativas como fichas */
.chip-alternativa { --bs-btn-color: var(--rs-texto); --bs-btn-border-color: var(--rs-borde); --bs-btn-bg: #fff;
    --bs-btn-hover-bg: var(--rs-superficie-2); --bs-btn-hover-border-color: var(--rs-secundario); --bs-btn-hover-color: var(--rs-primario);
    --bs-btn-active-bg: var(--rs-primario); --bs-btn-active-color: #fff; --bs-btn-active-border-color: var(--rs-primario); }
.btn-check:checked + .chip-alternativa { background-color: var(--rs-primario); border-color: var(--rs-primario); color: #fff; }

/* --- Solicitud de bolsas: una ficha por medida --- */
.solicitud-bolsas .total-bolsas { background: var(--rs-primario); color: #fff; border-radius: 2rem; padding: .25rem .95rem; font-size: .82rem; font-weight: 500;
    box-shadow: 0 2px 6px rgba(94, 23, 26, .25); }
.solicitud-bolsas .total-bolsas strong { font-size: 1.05rem; margin-left: .3rem; font-weight: 700; }
.solicitud-bolsas .subtotal-bolsas { font-size: .82rem; color: var(--rs-texto-suave); }
.solicitud-bolsas .subtotal-bolsas strong { color: var(--rs-texto); font-size: 1rem; margin-left: .2rem; }
.grupo-bolsas { background: var(--rs-superficie-2); border: 1px solid var(--rs-borde-suave); border-radius: var(--rs-radio); padding: .85rem; }
.grilla-bolsas { display: grid; grid-template-columns: repeat(auto-fill, minmax(132px, 1fr)); gap: .5rem; }
.ficha-bolsa { background: #fff; border: 1px solid var(--rs-borde); border-left: 3px solid var(--rs-primario); border-radius: var(--rs-radio-sm);
    padding: .45rem .65rem; display: grid; grid-template-columns: 1fr auto; align-items: baseline; row-gap: .05rem;
    box-shadow: var(--rs-sombra-1); transition: opacity .2s, border-color .2s; }
.ficha-bolsa .medida { font-weight: 600; font-size: .8rem; white-space: nowrap; }
.ficha-bolsa .codigo { grid-column: 1; grid-row: 2; font-family: var(--bs-font-monospace); font-size: .68rem; color: var(--rs-texto-suave); }
.ficha-bolsa .cantidad { grid-column: 2; grid-row: 1 / span 2; align-self: center; font-size: .95rem; font-weight: 700; color: var(--rs-primario); padding-left: .4rem; white-space: nowrap; font-variant-numeric: tabular-nums; }
.ficha-bolsa.vacia { border-left-color: var(--rs-borde); background: rgba(255, 255, 255, .6); box-shadow: none; }
.ficha-bolsa.vacia .medida { color: #000; font-weight: 500; }
.ficha-bolsa.vacia .cantidad { color: #000; font-weight: 500; }
.ficha-bolsa.negativa { border-color: #F1B5B9; border-left-color: #C1121F; background: #FFF5F5; }
.ficha-bolsa.negativa .cantidad { color: #C1121F; }

@keyframes resaltar-celda { from { background-color: #FFE08A; } to { background-color: transparent; } }
.celda-cambio { animation: resaltar-celda .5s ease-out; }

/* Primera columna fija en pantallas angostas (código y nombre del corte) */
@media (max-width: 991.98px) {
    .tabla-cortes-protocolo .col-fija { position: sticky; z-index: 1; background-color: #fff; }
    .tabla-cortes-protocolo thead .col-fija { z-index: 3; background-color: var(--rs-superficie-2); }
    .tabla-cortes-protocolo .col-codigo { left: 0; min-width: 3.6rem; }
    .tabla-cortes-protocolo .col-corte { left: 3.6rem; box-shadow: 2px 0 0 var(--rs-borde); }
    .tabla-cortes-protocolo tr.fila-congelada .col-fija { background-color: var(--rs-congelado-fondo); }
}

.estado-guardado { color: var(--bs-secondary-color); }
.estado-guardado.estado-ok { color: #198754; }
.estado-guardado.estado-error { color: #C1121F; font-weight: 600; }
@keyframes girar { to { transform: rotate(360deg); } }
.girando { display: inline-block; animation: girar 1s linear infinite; }

.barra-acciones-protocolo { position: sticky; bottom: .75rem; z-index: 5; background: rgba(255, 255, 255, .94);
    border: 1px solid var(--rs-borde); border-radius: var(--rs-radio); padding: .6rem .75rem .6rem 1rem;
    box-shadow: 0 10px 30px rgba(31, 26, 25, .14); backdrop-filter: blur(8px); }

/* --- Secciones del protocolo en tarjetas con cabecera --- */
.tarjeta-seccion { border-radius: var(--rs-radio); overflow: hidden; }
.tarjeta-seccion > .card-header { background: #fff; padding: .7rem 1.1rem; border-bottom: 1px solid var(--rs-borde-suave); }
.tarjeta-seccion > .card-footer { border-top: 1px solid var(--rs-borde-suave); padding: .6rem 1.1rem; }
.titulo-seccion-tarjeta { font-size: .95rem; font-weight: 600; margin: 0; display: inline-flex; align-items: center; gap: .5rem; }
.titulo-seccion-tarjeta > .bi { color: var(--rs-primario); }
.buscador-cortes { width: 260px; max-width: 100%; }
.filtro-cortes .btn { --bs-btn-padding-x: .65rem; box-shadow: none; }
.filtro-cortes .btn-check:checked + .btn, .filtro-cortes .btn.active { background: var(--rs-primario); border-color: var(--rs-primario); color: #fff; }

/* Tabla de cortes: encabezado sobrio, filas con cajas marcadas */
.tabla-cortes-protocolo thead th { background-color: var(--rs-superficie-2); color: var(--rs-texto-suave); font-weight: 600;
    text-transform: uppercase; letter-spacing: .03em; font-size: .66rem !important; border-bottom: 1px solid var(--rs-borde);
    padding-top: .6rem; padding-bottom: .6rem; }
.tabla-cortes-protocolo tbody td { border-color: var(--rs-borde-suave); }
.tabla-cortes-protocolo td.col-codigo { font-family: var(--bs-font-monospace); font-size: .74rem; color: #000; }
.tabla-cortes-protocolo .valor-cero { color: #000; }
.tabla-cortes-protocolo .col-logo { background-color: rgba(122, 31, 35, .04); font-weight: 700; }
.tabla-cortes-protocolo thead .col-logo { background-color: #F3E6E3 !important; color: var(--rs-primario) !important; }
.tabla-cortes-protocolo .col-logo.valor-cero { font-weight: 400; }
.tabla-cortes-protocolo tr.fila-con-cajas > td:first-child { box-shadow: inset 3px 0 0 var(--rs-primario); color: var(--rs-primario); font-weight: 600; }
.tabla-cortes-protocolo tbody td { padding-top: .22rem; padding-bottom: .22rem; }
.tabla-cortes-protocolo input.form-control,
.tabla-cortes-protocolo .col-bolsa .form-select { height: 1.75rem; min-height: 0; padding-top: 0; padding-bottom: 0; line-height: 1.65rem; }
.tabla-cortes-protocolo .col-ingreso input.form-control { border-color: #E9D9A6; background-color: #fff; }
.tabla-cortes-protocolo .col-ingreso input.form-control:focus { border-color: var(--rs-secundario); }
.tabla-cortes-protocolo tr.fila-con-cajas .col-ingreso input[data-campo="cajas"] { font-weight: 700; color: var(--rs-primario); }

/* --- Detalle del protocolo --- */
.ficha-protocolo { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 0; }
.ficha-protocolo .dato { padding: .85rem 1.1rem; border-right: 1px solid var(--rs-borde-suave); border-bottom: 1px solid var(--rs-borde-suave); min-width: 0; }
.ficha-protocolo .dato .etiqueta { font-size: .68rem; font-weight: 600; letter-spacing: .05em; text-transform: uppercase; color: var(--rs-texto-tenue); margin-bottom: .2rem; }
.ficha-protocolo .dato .valor { font-weight: 600; font-size: .9rem; overflow-wrap: anywhere; }
.ficha-protocolo .dato.ancho { grid-column: 1 / -1; }
.resumen-encabezado-tarjeta { overflow: hidden; }
.resumen-encabezado-tarjeta .ficha-protocolo { margin: -1px -1px -1px 0; }

.titulo-detalle { display: flex; flex-wrap: wrap; gap: 1rem; align-items: center; justify-content: space-between; margin-bottom: 1rem; }
.titulo-detalle h2 { font-size: 1.35rem; font-weight: 700; letter-spacing: -.02em; margin: 0; display: flex; align-items: center; gap: .6rem; flex-wrap: wrap; }
.titulo-detalle .meta { font-size: .82rem; color: var(--rs-texto-suave); margin-top: .2rem; }
.titulo-detalle .meta .bi { color: var(--rs-texto-tenue); }

/* Línea de tiempo */
.linea-tiempo { position: relative; max-height: 420px; overflow-y: auto; }
.linea-tiempo li { display: flex; gap: .75rem; padding-bottom: .75rem; position: relative; }
.linea-tiempo li:not(:last-child)::before { content: ''; position: absolute; left: 13px; top: 28px; bottom: 0; width: 2px; background: var(--rs-borde); }
.linea-tiempo .punto { width: 28px; height: 28px; border-radius: 50%; background: var(--rs-superficie-2); border: 1px solid var(--rs-borde);
    display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; color: var(--rs-primario); }
.linea-tiempo .evento-exportacion .punto { color: #198754; }
.linea-tiempo .evento-envio .punto { color: #1F78B4; }

/* --- Impresión: solo el protocolo (sin menú, botones ni paneles) --- */
.solo-imprimir { display: none; }
@media print {
    @page { size: letter portrait; margin: 10mm; }
    body { background: #fff !important; font-size: 9pt; }
    .app-lateral, .app-superior, footer, .no-imprimir, .alert-dismissible, .btn, .btn-group, .input-group, .dropdown, [data-contador-cortes] { display: none !important; }
    .solo-imprimir { display: block !important; }
    main { padding: 0 !important; }
    .tabla-alta { max-height: none !important; overflow: visible !important; }
    .tabla-cortes-protocolo { font-size: 7.5pt; }
    .tabla-cortes-protocolo tr { break-inside: avoid; }
    .tabla-cortes-protocolo tbody tr.d-none { display: table-row !important; }
    .card { border: 0; box-shadow: none; }
    .fila-congelada > *, .col-ingreso, thead th { -webkit-print-color-adjust: exact; print-color-adjust: exact; }
    .salto-pagina-evitar { break-inside: avoid; }
}

/* --- Auditoría --- */
.tabla-auditoria .descripcion-auditoria { max-width: 34rem; }
.tabla-diferencias pre { white-space: pre-wrap; word-break: break-word; font-size: .8rem; }
.tabla-diferencias tr.campo-cambiado > td { background-color: #FFF6D6; }
.tabla-diferencias tr.campo-cambiado .valor-antes pre { color: #9B1C1C; text-decoration: line-through; }
.tabla-diferencias tr.campo-cambiado .valor-despues pre { color: #146C43; font-weight: 600; }

/* Solicitud de bolsas */
.total-general { background: var(--rs-primario-tenue); border: 1px solid var(--rs-borde); }

/* --- Enfriado / congelado en la tabla de cortes del protocolo --- */
.variante-oculta { display: none !important; }
.selector-conservacion { width: auto; min-width: 7.2rem; padding-top: .1rem; padding-bottom: .1rem; font-size: .76rem; box-shadow: none; }

/* --- Cargando con porcentaje (RsCargando en app.js) --- */
.capa-cargando {
    position: fixed;
    inset: 0;
    z-index: 2000; /* sobre los modales de Bootstrap (1055) */
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 16px;
    background: rgba(31, 26, 25, .45);
    backdrop-filter: blur(3px);
}
.capa-cargando[hidden] { display: none; }
.tarjeta-cargando {
    width: min(360px, 100%);
    padding: 1.75rem 1.5rem 1.25rem;
    text-align: center;
    background: #fff;
    border-radius: .85rem;
    box-shadow: var(--rs-sombra-3);
}
.tarjeta-cargando .progress { height: .5rem; background-color: var(--rs-borde-suave); border-radius: 999px; }
.tarjeta-cargando .progress-bar { background: linear-gradient(90deg, var(--rs-secundario), var(--rs-primario)); transition: width .08s linear; border-radius: 999px; }
.porcentaje-cargando {
    margin: .5rem 0 .25rem;
    font-size: 1.75rem;
    font-weight: 700;
    letter-spacing: -.02em;
    color: var(--rs-primario);
    font-variant-numeric: tabular-nums;
}
body.cargando-activo { cursor: progress; }

/* --- Cortes que comparten varas (App\Servicios\GruposVaras): mismo color por grupo --- */
.pastilla-grupo {
    display: inline-block;
    min-width: 2.4rem;
    padding: 0 .35rem;
    border: 2px solid var(--grupo-color);
    border-radius: 999px;
    background-color: #fff;
    color: var(--grupo-color);
    font-family: var(--bs-font-monospace);
    font-size: .72rem;
    font-weight: 700;
    line-height: 1.35;
    text-align: center;
    cursor: help;
}
.pastilla-grupo.principal { background-color: var(--grupo-color); color: #fff; }
.leyenda-grupos .pastilla-grupo { cursor: default; }
/* Grupo con cajas cargadas: franja y fondo suave del color del grupo en código y nombre. */
.tabla-cortes-protocolo tr.grupo-activo > td.col-fija {
    --bs-table-bg: color-mix(in srgb, var(--grupo-color) 13%, #fff);
    background-color: color-mix(in srgb, var(--grupo-color) 13%, #fff);
}
.tabla-cortes-protocolo tr.grupo-activo > td.col-codigo { box-shadow: inset 5px 0 0 var(--grupo-color); }
/* Al pasar el mouse por un corte se resalta todo su grupo. */
.tabla-cortes-protocolo tr.grupo-resaltado > td { --bs-table-bg-state: color-mix(in srgb, var(--grupo-color) 20%, transparent); }
.tabla-cortes-protocolo tr.grupo-resaltado > td.col-fija { background-color: color-mix(in srgb, var(--grupo-color) 22%, #fff); }

/* Todos los valores de la tabla de cortes en negro, para que se lean bien en pantalla (los negativos siguen en rojo). */
.tabla-cortes-protocolo tbody td,
.tabla-cortes-protocolo tbody td input.form-control { color: #000; }

/* --- Marcas especial / relevante en el listado de cortes --- */
.col-marca { width: 6.5rem; }
.check-marca { width: 1.15rem; height: 1.15rem; margin: 0; cursor: pointer; float: none; vertical-align: middle; }
.check-marca:disabled { cursor: progress; opacity: .6; }

/* --- Avisos breves (RsAviso en app.js) --- */
.contenedor-avisos { z-index: 2100; }
.aviso { --bs-toast-max-width: 380px; --bs-toast-font-size: .85rem; --bs-toast-border-radius: var(--rs-radio);
    --bs-toast-bg: #fff; --bs-toast-border-color: var(--rs-borde); box-shadow: var(--rs-sombra-3); border-left-width: 4px; }
.aviso-exito { border-left-color: #198754; }
.aviso-error { border-left-color: #B02A37; }
.aviso .icono-aviso { font-size: 1.05rem; line-height: 1.3; }
.aviso-exito .icono-aviso { color: #198754; }
.aviso-error .icono-aviso { color: #B02A37; }
.btn-close-sm { font-size: .65rem; margin-top: .2rem; }

/* --- Lista de cortes con marcas por categoría de actividad (modal "Marcar cortes" y detalle) --- */
.lista-marcas { display: flex; flex-direction: column; min-height: 0; }
.lista-marcas-barra { display: flex; flex-wrap: wrap; gap: .5rem; align-items: center; padding: .75rem 1.25rem;
    background: var(--rs-superficie-2); border-bottom: 1px solid var(--rs-borde-suave); }
.lista-marcas-tabla { overflow: auto; max-height: 65vh; }
.lista-marcas-tabla thead th { position: sticky; top: 0; z-index: 2; }
.lista-marcas-pie { padding: .55rem 1.25rem; font-size: .8rem; color: var(--rs-texto-suave); border-top: 1px solid var(--rs-borde-suave); background: var(--rs-superficie-2); }
.tabla-marcas > tbody > tr > td { padding-top: .45rem; padding-bottom: .45rem; }

/* Modal: alto fijo, la tabla es la que se desplaza (barra de filtros y totales siempre visibles) */
.modal-marcas { max-width: min(1080px, calc(100vw - 2rem)); }
.modal-marcas .modal-content { height: min(88vh, 900px); }
.modal-marcas .modal-body { display: flex; flex-direction: column; overflow: hidden; }
.modal-marcas .lista-marcas { flex: 1; }
.modal-marcas .lista-marcas-tabla { flex: 1; max-height: none; }
.modal-marcas .modal-footer { padding: .6rem 1.25rem; }
:where(.card, .modal) .table td .btn-sm.boton-marcar-cortes { width: auto; height: auto; --bs-btn-padding-y: .22rem; --bs-btn-padding-x: .6rem;
    --bs-btn-border-color: rgba(122, 31, 35, .35); --bs-btn-bg: #fff; box-shadow: var(--rs-sombra-1); font-size: .78rem; }

/* --- Cortes relevantes registrados en cada actividad (detalle del protocolo) --- */
.cortes-actividad { list-style: none; margin: .5rem 0 0; padding: 0; border: 1px solid var(--rs-borde-suave); border-radius: var(--rs-radio-sm); overflow: hidden; }
.cortes-actividad li { display: flex; align-items: baseline; gap: .6rem; padding: .3rem .6rem; font-size: .8rem; border-bottom: 1px solid var(--rs-borde-suave); }
.cortes-actividad li:last-child { border-bottom: 0; }
.cortes-actividad li.congelado { background: var(--rs-congelado-fondo); }
.cortes-actividad strong { min-width: 2.6rem; text-align: right; font-variant-numeric: tabular-nums; }
.cortes-actividad .nombre { flex: 1; min-width: 0; }
.cortes-actividad .cajas { color: var(--rs-texto-suave); font-size: .74rem; white-space: nowrap; }
