/* ===========================================================================
   Card con imagen (card-image)
   - card-image / card-image__media / card-image__media-img / card-image__contenido:
     patron GENERICO reutilizable (imagen + contenido), no referencia ninguna vista.
   - card-image-hero / card-image-escena: imagen protagonista con capas superpuestas
     (disco, aro, contador). Variables --card-image-escena-* para alinear otra imagen.
   - ui-card-contrato-nivel*: estilos especificos de la card de contrato por nivel
     (portal estudiante envio de contrato firmado; staff documentos_contrato_nivel).
     Se mantienen con ese nombre para no romper la vista staff ni el JS.
   Se carga desde public/css/panel.css junto al resto de components/*.
   =========================================================================== */

/* Contratos por nivel (admision staff): cabecera + card largo en documentos_contrato_nivel/index.blade.php */
.contratos-nivel-pagina__tab {
    display: inline-block;
    font-size: var(--text-base, 1rem);
    font-weight: 600;
    color: var(--color-granate, #661414);
    border-bottom: 1px solid #c8c4c0;
    padding: 0 3.5rem 0.35rem 0;
    margin-bottom: var(--space-3, 0.75rem);
}

.contratos-nivel-lista {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: var(--space-4, 1rem);
    align-items: stretch;
    width: 100%;
}

.contratos-nivel-lista--solo {
    grid-template-columns: minmax(0, 1fr);
}

.ui-card-contrato-nivel.contrato-nivel-fila {
    position: relative;
    padding: 0;
    overflow: hidden;
    height: 100%;
}

.ui-card-contrato-nivel__cuerpo {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    gap: var(--space-4, 1rem);
    padding: var(--space-5, 1.25rem) var(--space-4, 1rem);
    min-height: 0;
    height: 100%;
    box-sizing: border-box;
}

/* ---------------------------------------------------------------------------
   card-image: patron generico reutilizable.
   Imagen 50% + contenido 50% (apila en <576px). No referencia ninguna vista;
   el contenido del lado derecho lo aporta quien lo use (aqui, la card contrato).
   --------------------------------------------------------------------------- */
.card-image {
    display: flex;
    flex-direction: row;
    align-items: stretch;
    gap: 0;
    padding: 0;
    height: 100%;
    box-sizing: border-box;
}

.card-image__media {
    position: relative;
    flex: 0 0 50%;
    align-self: stretch;
    min-height: 16rem;
    margin: 0;
    overflow: hidden;
    background: color-mix(in srgb, var(--color-crema, #f7f3e8) 78%, var(--color-blanco, #fff));
}

.card-image__media-img {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: center 25%;
    opacity: 0.85;
}

.card-image__contenido {
    flex: 1 1 auto;
    min-width: 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: var(--space-2, 0.5rem);
    padding: var(--space-4, 1rem);
    text-align: center;
}

.card-image .ui-card-contrato-nivel__acciones {
    margin-top: var(--space-2, 0.5rem);
}

/* Variante vertical: imagen arriba + contenido abajo (grids de tarjetas angostas) */
.card-image--vertical {
    flex-direction: column;
    min-height: 22rem;
}

.card-image--vertical .card-image__media {
    flex: 0 0 auto;
    min-height: 0;
    width: 100%;
    height: auto;
    aspect-ratio: 4 / 3;
    min-height: 11.5rem;
}

.card-image--vertical .card-image__media-img {
    opacity: 1;
    object-position: center center;
}

.card-image--vertical .card-image__contenido {
    flex: 1 1 auto;
    padding: var(--space-4, 1rem) var(--space-3, 0.75rem) var(--space-5, 1.25rem);
}

@media (max-width: 575.98px) {
    .card-image:not(.card-image--vertical) { flex-direction: column; }
    .card-image:not(.card-image--vertical) .card-image__media { flex-basis: auto; min-height: 0; height: 14rem; }
}

/* Resumen de pieza en drawer: afiche contenido + un total y el desglose, sin recortar la imagen. */
.ui-card-base.card-image--contencion {
    --card-w: 100%;
    --card-h: auto;
    width: 100%;
    height: auto;
    min-height: 0;
}

.card-image--contencion .card-image__media {
    flex: 0 0 38%;
    min-height: 12.5rem;
    background: color-mix(in srgb, var(--color-crema, #f7f3e8) 62%, var(--color-blanco, #fff));
}

.card-image--contencion .card-image__media-img {
    object-fit: contain;
    object-position: center center;
    opacity: 1;
    padding: var(--space-3, 0.75rem);
    box-sizing: border-box;
}

.card-image--contencion .card-image__contenido {
    align-items: stretch;
    justify-content: flex-start;
    text-align: left;
    gap: var(--space-3, 0.75rem);
    min-height: 0;
}

.card-image__resumen-cabecera {
    display: flex;
    align-items: center;
    justify-content: flex-start;
    gap: var(--space-3, 0.75rem);
    width: 100%;
    padding: 0;
    border: 0;
}

.card-image__resumen-etiqueta {
    margin: 0;
    font-size: var(--text-sm, 0.875rem);
    font-weight: 600;
    color: var(--color-text-muted, #5c4a3d);
}

.card-image__resumen-total {
    margin: 0;
    font-size: 1.35rem;
    font-weight: 700;
    line-height: 1;
    letter-spacing: -0.02em;
    color: var(--color-granate, #661414);
    font-variant-numeric: tabular-nums;
}

.card-image__resumen-estados {
    flex: 0 0 auto;
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 0.65rem;
    list-style: none;
    margin: 0;
    padding: 0;
    width: 100%;
}

.card-image__resumen-estado {
    display: flex;
    flex-direction: row;
    align-items: center;
    justify-content: flex-start;
    gap: 0.85rem;
    width: 100%;
    height: auto;
    min-width: 0;
    min-height: 0;
    margin: 0;
    padding: 0.7rem 0.95rem;
    text-align: left;
    border: 1px solid var(--ui-card-border, rgba(92, 74, 61, 0.13));
    border-radius: var(--radius-lg, 1rem);
    background: color-mix(in srgb, var(--color-blanco, #fff) 82%, var(--color-crema, #f7f3e8));
}

.card-image__resumen-icono {
    display: inline-flex;
    flex: 0 0 auto;
    align-items: center;
    justify-content: center;
    width: 2.5rem;
    height: 2.5rem;
    border-radius: 999px;
    font-size: 1.05rem;
    line-height: 1;
    background: color-mix(in srgb, var(--color-text-muted, #5c4a3d) 12%, var(--color-blanco, #fff));
    color: var(--color-text-muted, #5c4a3d);
}

.card-image__resumen-estado:has(.btn-accion-pill--pendiente-traslucido) .card-image__resumen-icono {
    color: #8a6914;
    background: color-mix(in srgb, #b8860b 18%, var(--color-blanco, #fff));
}

.card-image__resumen-estado:has(.btn-accion-pill--exito-traslucido) .card-image__resumen-icono {
    color: #2e7d32;
    background: color-mix(in srgb, #2e7d32 14%, var(--color-blanco, #fff));
}

.card-image__resumen-estado:has(.btn-accion-pill--plomo-traslucido) .card-image__resumen-icono {
    color: var(--color-text-muted, #5c4a3d);
    background: color-mix(in srgb, var(--color-text-muted, #5c4a3d) 14%, var(--color-blanco, #fff));
}

.card-image__resumen-datos {
    display: flex;
    flex: 1 1 auto;
    flex-direction: column;
    align-items: stretch;
    gap: 0.35rem;
    min-width: 0;
}

.card-image__resumen-linea {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    width: 100%;
    min-width: 0;
}

.card-image__resumen-parte {
    margin-left: auto;
    font-size: var(--text-sm, 0.875rem);
    font-weight: 700;
    line-height: 1;
    color: var(--color-text-muted, #5c4a3d);
    font-variant-numeric: tabular-nums;
}

.card-image__resumen-ayuda {
    margin: 0;
    font-size: var(--text-xs, 0.75rem);
    line-height: 1.35;
    color: var(--color-text-muted, #5c4a3d);
}

.card-image__resumen-barra {
    display: block;
    width: 100%;
    height: 0.35rem;
    border-radius: 999px;
    overflow: hidden;
    background: color-mix(in srgb, var(--color-text-muted, #5c4a3d) 14%, transparent);
}

.card-image__resumen-barra-relleno {
    display: block;
    height: 100%;
    width: var(--card-image-parte, 0%);
    border-radius: inherit;
    background: var(--color-text-muted, #5c4a3d);
}

.card-image__resumen-estado:has(.btn-accion-pill--pendiente-traslucido) .card-image__resumen-barra-relleno {
    background: #b8860b;
}

.card-image__resumen-estado:has(.btn-accion-pill--exito-traslucido) .card-image__resumen-barra-relleno {
    background: #2e7d32;
}

.card-image__resumen-estado:has(.btn-accion-pill--plomo-traslucido) .card-image__resumen-barra-relleno {
    background: var(--color-text-muted, #5c4a3d);
}

.card-image__resumen-cifra {
    font-size: 1.5rem;
    font-weight: 700;
    line-height: 1;
    color: var(--color-text-default, #1f1e1e);
    font-variant-numeric: tabular-nums;
}

.card-image__resumen-estado .btn-accion-pill {
    max-width: 100%;
    min-width: 0;
}

@media (max-width: 575.98px) {
    .card-image__resumen-estados {
        grid-template-columns: 1fr;
    }
}

.card-image__resumen-enlace {
    margin-left: auto;
    font-size: var(--text-sm, 0.875rem);
    font-weight: 600;
    text-decoration: none;
    color: var(--color-granate, #661414);
}

.card-image__resumen-enlace:hover,
.card-image__resumen-enlace:focus-visible {
    color: var(--color-granate-hover, #8a1c1c);
}

[data-theme="dark"] .card-image--contencion .card-image__media {
    background: color-mix(in srgb, var(--panel-main-bg, #12100d) 78%, var(--color-blanco, #fff));
}

[data-theme="dark"] .card-image__resumen-estado {
    background: color-mix(in srgb, var(--color-blanco, #fff) 8%, var(--panel-main-bg, #12100d));
}

[data-theme="dark"] .card-image__resumen-estado:has(.btn-accion-pill--pendiente-traslucido) .card-image__resumen-icono {
    color: #e0b070;
    background: color-mix(in srgb, #e0b070 18%, transparent);
}

[data-theme="dark"] .card-image__resumen-estado:has(.btn-accion-pill--exito-traslucido) .card-image__resumen-icono {
    color: #8fce93;
    background: color-mix(in srgb, #8fce93 18%, transparent);
}

[data-theme="dark"] .card-image__resumen-estado:has(.btn-accion-pill--plomo-traslucido) .card-image__resumen-icono {
    color: var(--color-text-muted, #c8c4c0);
    background: color-mix(in srgb, var(--color-blanco, #fff) 12%, transparent);
}

[data-theme="dark"] .card-image__resumen-total,
[data-theme="dark"] .card-image__resumen-enlace {
    color: var(--color-dorado, #e0b070);
}

[data-theme="dark"] .card-image__resumen-enlace:hover,
[data-theme="dark"] .card-image__resumen-enlace:focus-visible {
    color: var(--color-blanco, #fff);
}

@media (max-width: 575.98px) {
    .card-image.card-image--contencion .card-image__media {
        flex-basis: auto;
        height: 11rem;
        min-height: 0;
    }
}

/* ---------------------------------------------------------------------------
   card-image--envio-estudiante: portal estudiante, envío de contrato firmado.
   Reutiliza card-image + ui-card-contrato-nivel + card-image-hero (cabecera).
   --------------------------------------------------------------------------- */
.panel-main__inner:has(.card-image--envio-estudiante),
.panel-main__inner:has(.card-image--renovacion-vacante) {
    padding: 0;
}

.panel-main:has(.card-image--envio-estudiante),
.panel-main:has(.card-image--renovacion-vacante) {
    overflow: hidden;
}

.card-image--envio-estudiante {
    --envio-contrato-vh: calc(100dvh - var(--panel-topbar1-h) - var(--panel-topbar2-h));
    --envio-contrato-panel-marca: var(--mkt-marca-marca-agua, url('/images/colegio/publico/landing/marca-agua.png'));
    width: 100%;
    height: var(--envio-contrato-vh);
    min-height: var(--envio-contrato-vh);
    margin: 0;
}

.card-image--envio-estudiante .card-image__media {
    flex: 0 0 50%;
    min-height: 0;
    height: 100%;
}

.card-image--envio-estudiante .card-image__media-img {
    object-position: center center;
    opacity: 1;
}

.card-image--envio-estudiante .card-image__contenido {
    position: relative;
    flex: 0 0 50%;
    height: 100%;
    min-height: 0;
    padding: clamp(1.5rem, 3.5vh, 2.5rem) clamp(1.75rem, 5vw, 3.5rem);
    overflow-y: auto;
    background: var(--panel-main-bg, var(--color-crema, #f7f3e8));
    gap: 0;
}

.card-image--envio-estudiante .card-image__contenido::before {
    content: '';
    position: absolute;
    inset: 0;
    background-image: var(--envio-contrato-panel-marca);
    background-repeat: repeat;
    background-size: clamp(5.5rem, 12vmin, 7.5rem);
    background-position: center;
    opacity: 0.18;
    pointer-events: none;
    z-index: 0;
}

.card-image--envio-estudiante .card-image__contenido > * {
    position: relative;
    z-index: 1;
}

.card-image--envio-estudiante .card-image__contenido-apilado {
    display: flex;
    flex: 0 1 auto;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: clamp(2.5rem, 5vh, 3.5rem);
    width: 100%;
    max-width: 36rem;
    margin-block: auto;
    text-align: center;
}

.card-image--envio-estudiante .card-image-hero__cabecera {
    gap: clamp(1rem, 2vh, 1.5rem);
    width: 100%;
}

.card-image--envio-estudiante .card-image-hero__titulo {
    font-size: clamp(1.25rem, 2.2vw, 1.5rem);
    color: var(--panel-heading-color, #1a1a1a);
}

.card-image--envio-estudiante .card-image-hero__info {
    font-size: var(--text-sm, 0.875rem);
    max-width: 36rem;
    margin-inline: auto;
}

.card-image--envio-estudiante .ui-card-base.ui-card-base--superficie-solida {
    background-color: var(--color-crema, #f7f3e8);
    display: flex;
    flex-direction: column;
    gap: var(--space-3, 0.75rem);
    max-width: 34rem;
    margin-inline: auto;
    padding: var(--space-4, 1rem) var(--space-5, 1.25rem);
    height: auto;
    min-height: 0;
    overflow: visible;
}

.card-image--envio-estudiante .ui-card-contrato-nivel__nivel {
    text-transform: none;
    font-size: clamp(1.0625rem, 2vw, 1.25rem);
    letter-spacing: 0.02em;
}

.card-image--envio-estudiante .ui-card-contrato-nivel__mensaje:empty {
    display: none;
}

.card-image--envio-estudiante .ui-card-contrato-nivel__acciones {
    align-items: center;
    margin-top: 0;
    padding-top: var(--space-2, 0.5rem);
}

.card-image--envio-estudiante .ui-card-contrato-nivel__acciones .file-input-floating-card-field {
    align-self: stretch;
    width: 100%;
    margin-top: var(--space-1, 0.375rem);
}

.card-image--envio-estudiante .ui-card-contrato-nivel__fila-subir .btn-accion-pill {
    --btn-accion-pill-min-w: 0;
    --btn-accion-pill-h: 2.375rem;
    --btn-accion-pill-px: 1.25rem;
}

.card-image--envio-estudiante .ui-card-contrato-nivel__acciones-pie {
    display: flex;
    justify-content: center;
    width: 100%;
    padding-top: var(--space-3, 0.75rem);
}

.card-image--envio-estudiante .ui-card-contrato-nivel__btn-guardar {
    --btn-accion-pill-min-w: 9rem;
    --btn-accion-pill-h: 2.125rem;
    --btn-accion-pill-px: 1.25rem;
    font-size: var(--text-sm, 0.875rem);
}

.card-image--envio-estudiante .ui-card-contrato-nivel__acciones :is(.file-input-floating-card-field, .file-input-floating-card) {
    --floating-bg: var(--color-crema, #f7f3e8);
    --floating-control-height: calc(2.2rem + 2px);
    --floating-radius: 0.75rem;
}

.card-image--envio-estudiante .ui-card-contrato-nivel__acciones .file-input-floating-card-field__title {
    margin-bottom: 0.25rem;
    font-size: var(--text-sm, 0.8125rem);
}

.card-image--envio-estudiante .ui-card-contrato-nivel__acciones .file-input-floating-card__native,
.card-image--envio-estudiante .ui-card-contrato-nivel__acciones .file-input-floating-card__native::file-selector-button,
.card-image--envio-estudiante .ui-card-contrato-nivel__acciones .file-input-floating-card__native::-webkit-file-upload-button {
    font-size: var(--text-sm, 0.8125rem);
}

.card-image--envio-estudiante .ui-card-contrato-nivel__acciones .file-input-floating-card__clear {
    width: 1.5rem;
    min-width: 1.5rem;
    height: 1.5rem;
    font-size: 1.05rem;
}

/* Card de firma virtual: ajusta altura del file-input similar a los botones pill */
[data-via="virtual"] :is(.file-input-floating-card-field, .file-input-floating-card) {
    --floating-control-height: calc(2.2rem + 2px);
    --floating-radius: 0.75rem;
}

[data-theme="dark"] .card-image--envio-estudiante .card-image__contenido::before {
    opacity: 0.09;
}

[data-theme="dark"] .card-image--envio-estudiante .card-image-hero__titulo,
[data-theme="dark"] .card-image--envio-estudiante .ui-card-contrato-nivel__nivel {
    color: var(--color-text-default, #f0ebe0);
}

[data-theme="dark"] .card-image--envio-estudiante .ui-card-base.ui-card-base--superficie-solida {
    background-color: var(--panel-main-bg, #1a1918);
}

[data-theme="dark"] .card-image--envio-estudiante .ui-card-contrato-nivel__acciones :is(.file-input-floating-card-field, .file-input-floating-card) {
    --floating-bg: var(--panel-main-bg, #1a1918);
}

@media (max-width: 991.98px) {
    .panel-main:has(.card-image--envio-estudiante) {
        overflow-y: auto;
    }

    .card-image--envio-estudiante {
        flex-direction: column;
        height: auto;
        min-height: var(--envio-contrato-vh);
    }

    .card-image--envio-estudiante .card-image__media {
        flex-basis: auto;
        min-height: clamp(12rem, 36vh, 18rem);
        height: clamp(12rem, 36vh, 18rem);
    }

    .card-image--envio-estudiante .card-image__contenido {
        flex-basis: auto;
        height: auto;
        min-height: calc(var(--envio-contrato-vh) - clamp(12rem, 36vh, 18rem));
        overflow-y: visible;
        padding: var(--space-5, 1.25rem) var(--space-4, 1rem);
    }

    .card-image--envio-estudiante .card-image__contenido-apilado {
        margin-block: auto;
    }

    .card-image--envio-estudiante .ui-card-base.ui-card-base--superficie-solida {
        max-width: 100%;
    }

    .card-image--envio-estudiante .ui-card-contrato-nivel__acciones-pie {
        justify-content: center;
    }
}

/* ---------------------------------------------------------------------------
   card-image--renovacion-vacante: portal estudiante, renovación de vacante.
   Hereda envio-estudiante; compacta alturas para evitar scroll interno.
   --------------------------------------------------------------------------- */
.card-image--renovacion-vacante.card-image--envio-estudiante .card-image__contenido {
    overflow-y: hidden;
    padding: clamp(0.85rem, 1.75vh, 1.25rem) clamp(1.1rem, 2.5vw, 1.75rem);
}

.card-image--renovacion-vacante.card-image--envio-estudiante .card-image__contenido-apilado {
    gap: clamp(0.85rem, 1.6vh, 1.15rem);
    max-width: 42rem;
}

.card-image--renovacion-vacante.card-image--envio-estudiante .card-image-hero__cabecera {
    gap: 0.45rem;
}

.card-image--renovacion-vacante.card-image--envio-estudiante .card-image-hero__titulo {
    font-size: clamp(1.2rem, 2vw, 1.45rem);
    line-height: 1.25;
}

.card-image--renovacion-vacante.card-image--envio-estudiante .card-image-hero__info {
    font-size: 0.875rem;
    line-height: 1.4;
}

.card-image--renovacion-vacante.card-image--envio-estudiante .ui-card-base.ui-card-base--superficie-solida {
    gap: var(--space-4, 1rem);
    max-width: 40rem;
    padding: var(--space-4, 1rem) var(--space-5, 1.25rem);
}

.card-image--renovacion-vacante.card-image--envio-estudiante .ui-card-base.ui-card-base--borde-granate.ui-card-base--superficie-solida:has(.chk-granate:checked) {
    border-color: rgba(var(--color-granate-rgb, 102, 20, 20), 0.28);
    background-color: var(--color-crema, #f7f3e8);
}

[data-theme="dark"] .card-image--renovacion-vacante.card-image--envio-estudiante .ui-card-base.ui-card-base--borde-granate.ui-card-base--superficie-solida:has(.chk-granate:checked) {
    border-color: rgba(var(--color-granate-rgb, 102, 20, 20), 0.28);
    background-color: var(--panel-main-bg, #1a1918);
}

[data-theme="dark"] .renovacion-vacante__resumen-datos.estudiante-postulacion-page__perfil-grid {
    border-top-color: color-mix(in srgb, var(--color-dorado, #e0b070) 28%, transparent);
}

[data-theme="dark"] .renovacion-vacante__resumen-datos .estudiante-postulacion-page__perfil-stat-label {
    color: var(--color-text-muted, rgba(240, 235, 224, 0.72));
}

[data-theme="dark"] .renovacion-vacante__resumen-datos .estudiante-postulacion-page__perfil-stat-valor {
    color: var(--color-blanco, #f0ebe0);
}

[data-theme="dark"] .renovacion-vacante__resumen-datos .estudiante-postulacion-page__perfil-stat--documento .estudiante-postulacion-page__perfil-stat-valor {
    color: var(--color-dorado, #e0b070);
}

[data-theme="dark"] .renovacion-vacante__resumen-datos .estudiante-postulacion-page__perfil-stat i {
    color: var(--color-dorado, #e0b070);
}

[data-theme="dark"] .card-image--renovacion-vacante.card-image--envio-estudiante .ui-card-profile__nombre.text-primary {
    color: var(--color-blanco, #f0ebe0) !important;
}

[data-theme="dark"] .card-image--renovacion-vacante.card-image--envio-estudiante .ui-card-profile__detalle.text-body-secondary {
    color: var(--color-text-muted, rgba(240, 235, 224, 0.72)) !important;
}

[data-theme="dark"] .card-image--renovacion-vacante.card-image--envio-estudiante .btn-accion-pill--rechazo-traslucido {
    background-color: rgba(154, 45, 45, 0.22);
    border-color: var(--color-dorado, #e0b070);
    color: var(--color-blanco, #f0ebe0);
}

[data-theme="dark"] .ui-card-contrato-nivel__etiqueta,
[data-theme="dark"] .ui-card-contrato-nivel__nivel {
    color: var(--color-blanco, #f0ebe0);
}

[data-theme="dark"] .ui-card-contrato-nivel__fecha {
    color: var(--color-text-muted, rgba(240, 235, 224, 0.72));
}

.card-image--renovacion-vacante.card-image--envio-estudiante .ui-card-contrato-nivel__cabecera {
    gap: 0.4rem;
}

.card-image--renovacion-vacante.card-image--envio-estudiante .ui-card-contrato-nivel__etiqueta {
    font-size: 1rem;
}

.card-image--renovacion-vacante.card-image--envio-estudiante .ui-card-profile__avatar-img,
.card-image--renovacion-vacante.card-image--envio-estudiante .ui-card-profile__avatar-fallback {
    width: 4rem;
    height: 4rem;
    font-size: 1.05rem;
}

.card-image--renovacion-vacante.card-image--envio-estudiante .ui-card-profile__detalle.small {
    margin-top: 0.5rem !important;
    margin-bottom: 0.2rem !important;
}

.card-image--renovacion-vacante.card-image--envio-estudiante .ui-card-profile__nombre {
    font-size: 0.875rem;
    line-height: 1.3;
}

.renovacion-vacante__resumen-datos.estudiante-postulacion-page__perfil-grid {
    display: flex;
    flex-direction: row;
    flex-wrap: nowrap;
    align-items: flex-start;
    justify-content: space-between;
    gap: var(--space-4, 1rem);
    width: 100%;
    margin-top: var(--space-2, 0.5rem);
    padding-top: var(--space-3, 0.75rem);
    border-top: 1px solid color-mix(in srgb, var(--color-granate, #661414) 12%, transparent);
    font-size: var(--text-sm, 0.875rem);
}

.renovacion-vacante__resumen-datos .estudiante-postulacion-page__perfil-stat {
    display: flex;
    align-items: flex-start;
    gap: 0.5rem;
    flex: 1 1 0;
    min-width: 0;
    padding-inline: 0.15rem;
    text-align: left;
}

.renovacion-vacante__resumen-datos .estudiante-postulacion-page__perfil-stat-label {
    display: block;
    color: var(--color-text-muted);
    font-size: 0.6875rem;
    line-height: var(--leading-tight, 1.25);
    margin-bottom: 0.1rem;
}

.renovacion-vacante__resumen-datos .estudiante-postulacion-page__perfil-stat i {
    color: var(--color-granate);
    flex-shrink: 0;
    width: 0.875rem;
    font-size: 0.75rem;
    text-align: center;
    margin-top: 0.15rem;
}

.renovacion-vacante__resumen-datos .estudiante-postulacion-page__perfil-stat-valor {
    color: var(--color-text-default);
    word-break: break-word;
    line-height: 1.3;
    font-size: 0.8125rem;
}

.renovacion-vacante__resumen-datos .estudiante-postulacion-page__perfil-stat--documento .estudiante-postulacion-page__perfil-stat-valor {
    color: var(--color-granate);
    font-weight: 600;
}

.card-image--renovacion-vacante.card-image--envio-estudiante .ui-card-contrato-nivel__mensaje :is(.ui-card-aviso-panel, .ui-card-contrato-nivel__aviso-resultado) {
    padding: var(--space-3, 0.75rem) var(--space-4, 1rem) !important;
    text-align: center !important;
}

.card-image--renovacion-vacante.card-image--envio-estudiante .ui-card-aviso-panel__texto.fw-semibold {
    margin-bottom: 0.25rem !important;
}

.card-image--renovacion-vacante.card-image--envio-estudiante .ui-card-contrato-nivel__acciones {
    gap: var(--space-2, 0.5rem);
    padding-top: 0;
}

.card-image--renovacion-vacante.card-image--envio-estudiante .ui-card-contrato-nivel__acciones-pie {
    padding-top: var(--space-2, 0.5rem);
}

.card-image--renovacion-vacante.card-image--envio-estudiante .form-check-input.chk-granate:focus,
.card-image--renovacion-vacante.card-image--envio-estudiante .form-check-input.chk-granate:focus-visible {
    border-color: var(--color-granate-active, #9a2d2d);
    box-shadow: none;
    outline: none;
}

.card-image--renovacion-vacante.card-image--envio-estudiante .form-check-label {
    font-size: 0.8125rem;
    line-height: 1.35;
    cursor: pointer;
}

.renovacion-vacante__contador-apertura {
    display: flex;
    align-items: center;
    justify-content: center;
    flex-wrap: wrap;
    gap: 0.35rem 0.5rem;
    width: 100%;
}

.renovacion-vacante__contador-unidad {
    display: flex;
    flex-direction: column;
    align-items: center;
    min-width: 2.75rem;
}

.renovacion-vacante__contador-numero {
    font-size: clamp(1.25rem, 3vw, 1.75rem);
    font-weight: 700;
    line-height: 1.1;
    color: var(--color-granate, #7a1f1f);
    font-variant-numeric: tabular-nums;
}

.renovacion-vacante__contador-etiqueta {
    font-size: 0.6875rem;
    line-height: 1.2;
    text-transform: lowercase;
    color: var(--bs-secondary-color, #6c757d);
}

.renovacion-vacante__contador-sep {
    font-size: clamp(1rem, 2.5vw, 1.35rem);
    font-weight: 700;
    line-height: 1;
    color: var(--color-granate, #7a1f1f);
    align-self: flex-start;
    margin-top: 0.15rem;
}

[data-theme="dark"] .renovacion-vacante__contador-numero,
[data-theme="dark"] .renovacion-vacante__contador-sep {
    color: var(--color-granate-claro, #d48484);
}

@media (max-width: 991.98px) {
    .panel-main:has(.card-image--renovacion-vacante) {
        overflow-y: auto;
    }

    .card-image--renovacion-vacante.card-image--envio-estudiante .card-image__contenido {
        overflow-y: visible;
        min-height: 0;
    }
}

.ui-card-contrato-nivel__cabecera {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--space-2, 0.5rem);
    width: 100%;
}

.ui-card-contrato-nivel__acciones {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: var(--space-3, 0.75rem);
    width: 100%;
    margin-top: auto;
}

/* Fila 70/30: diseño virtual + vista previa PDF. */
.ui-card-contrato-nivel__fila-acciones {
    display: grid;
    grid-template-columns: 7fr 3fr;
    gap: var(--space-1, 0.25rem);
    align-items: stretch;
    width: 100%;
    box-sizing: border-box;
}

.ui-card-contrato-nivel .ui-card-contrato-nivel__btn-principal.btn-accion-pill,
.ui-card-contrato-nivel .ui-card-contrato-nivel__btn-secundario.btn-accion-pill,
.ui-card-contrato-nivel .ui-card-contrato-nivel__btn-pdf.btn-accion-pill {
    display: flex;
    box-sizing: border-box;
    width: 100%;
    min-width: 0;
    justify-content: center;
    gap: 0.25rem;
    font-size: var(--text-xs, 0.75rem);
    --btn-accion-pill-min-w: 0;
    --btn-accion-pill-px: 0.3rem;
    --btn-accion-pill-h: 2.375rem;
    --btn-accion-pill-svg: 0.9rem;
    /* Mismo radio cuadrado que los iconos de accion de listados (btn-accion-pill--blanco), no pastilla ovalada. */
    --btn-accion-pill-radius: 8px;
}

.ui-card-contrato-nivel .ui-card-contrato-nivel__btn-principal.btn-accion-pill span,
.ui-card-contrato-nivel .ui-card-contrato-nivel__btn-secundario.btn-accion-pill span,
.ui-card-contrato-nivel .ui-card-contrato-nivel__btn-pdf.btn-accion-pill span {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* Eliminar: icono flotante sobre la foto, separado de las acciones frecuentes (solo aparece si ya hay plantilla) */
.ui-card-contrato-nivel__btn-eliminar-flotante {
    position: absolute;
    top: 0.6rem;
    right: 0.6rem;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 2rem;
    height: 2rem;
    padding: 0;
    border: 1px solid rgba(255, 255, 255, 0.5);
    border-radius: 999px;
    background: rgba(26, 26, 26, 0.55);
    color: var(--color-blanco, #fff);
    cursor: pointer;
    transition: background-color 0.2s ease, transform 0.15s ease;
}

.ui-card-contrato-nivel__btn-eliminar-flotante svg {
    width: 0.95rem;
    height: 0.95rem;
    flex-shrink: 0;
}

.ui-card-contrato-nivel__btn-eliminar-flotante:hover {
    background: rgba(122, 25, 25, 0.85);
}

.ui-card-contrato-nivel__btn-eliminar-flotante:active {
    transform: scale(0.94);
}

.ui-card-contrato-nivel__btn-eliminar-flotante:focus-visible {
    outline: 3px solid var(--color-dorado, #d99a56);
    outline-offset: 2px;
}

.ui-card-contrato-nivel__etiqueta {
    font-size: var(--text-base, 1rem);
    font-weight: 500;
    color: var(--color-text-default, #1a1a1a);
    line-height: var(--leading-tight, 1.25);
}

.ui-card-contrato-nivel__nivel {
    font-size: 1.125rem;
    font-weight: 600;
    color: var(--color-text-default, #1a1a1a);
    line-height: var(--leading-tight, 1.25);
    letter-spacing: 0.03em;
    text-transform: uppercase;
}

/* Estados vigente/sin-pdf/sin-contrato: bloques pronunciados (icono + titulo + descripcion [+ mascota en vacio]).
   Reutiliza ui-card-aviso-panel--relleno-exito/advertencia/claro, mismo patron que ya usa
   envios_contrato_estudiante/index.blade.php (portal estudiante) y boletas/detalle.blade.php.
   Reutiliza ui-card-aviso-panel--relleno-claro (mismo fondo/borde que ya usa el aviso de bloqueo en boletas/detalle.blade.php). */
.ui-card-contrato-nivel__vacio {
    display: flex;
    align-items: center;
    gap: var(--space-3, 0.75rem);
    width: 100%;
    padding: 0.85rem 1rem;
}

.ui-card-contrato-nivel__vacio-icono {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    width: 2.5rem;
    height: 2.5rem;
    border-radius: 999px;
    background: var(--color-blanco, #fff);
    color: var(--color-granate, #661414);
    font-size: 1.1rem;
}

.ui-card-contrato-nivel__vacio-texto {
    flex: 1 1 auto;
    min-width: 0;
}

.ui-card-contrato-nivel__vacio-titulo {
    font-weight: 700;
    font-size: var(--text-base, 1rem);
    color: var(--color-granate, #661414);
}

.ui-card-contrato-nivel__vacio .ui-card-aviso-panel__texto {
    font-size: var(--text-sm, 0.8125rem);
}

.ui-card-contrato-nivel__mascota {
    flex-shrink: 0;
    width: 52px;
    height: auto;
}

[data-theme="dark"] .ui-card-contrato-nivel__vacio-icono {
    background: rgba(0, 0, 0, 0.25);
}

/* Vigente/sin-pdf: mismo padding e icono que sin-contrato (__vacio, sin tocar su tamano) para que las 3 tarjetas
   midan igual sin importar que el texto de "Contrato vigente" sea mas corto que el de "Sin contrato". */
.ui-card-contrato-nivel__vigente,
.ui-card-contrato-nivel__sin-pdf {
    padding: 0.85rem 1rem !important;
    display: flex;
    align-items: center;
    box-sizing: border-box;
}

.ui-card-contrato-nivel__vigente > .d-flex,
.ui-card-contrato-nivel__sin-pdf > .d-flex {
    width: 100%;
}

.ui-card-contrato-nivel__vigente .ui-card-aviso-panel__icono-exito,
.ui-card-contrato-nivel__sin-pdf .ui-card-aviso-panel__icono-advertencia {
    width: 2.5rem;
    height: 2.5rem;
}

.ui-card-contrato-nivel__fecha {
    font-size: var(--text-xs, 0.75rem);
    color: var(--color-text-muted, #6c757d);
}

.ui-card-contrato-nivel__aviso-estado {
    width: min(100%, 26rem);
    margin-inline: auto;
    text-align: center;
}

.ui-card-contrato-nivel__aviso-estado--banda {
    width: min(100%, 30rem);
    padding: 0.55rem 1.15rem;
    border-radius: 999px;
    box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.55),
        0 2px 6px rgba(26, 26, 26, 0.07);
}

.ui-card-contrato-nivel__aviso-estado--banda .ui-card-aviso-panel__texto {
    font-size: 0.8125rem;
    line-height: 1.4;
}

.ui-card-contrato-nivel__aviso-resultado {
    width: min(100%, 54rem);
    margin-inline: auto;
    text-align: left;
    background-color: color-mix(in srgb, #e6f4e8 68%, var(--color-crema, #f7f3e8)) !important;
    border-color: rgba(46, 125, 50, 0.2) !important;
    box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.82),
        0 2px 8px rgba(46, 125, 50, 0.06);
}

.ui-card-contrato-nivel__aviso-resultado .ui-card-aviso-panel__texto.fw-semibold :is(.fa-file-circle-check, .fa-heart, .fa-trophy) {
    color: #2e7d32 !important;
}

[data-theme="dark"] .ui-card-contrato-nivel__aviso-resultado {
    background-color: color-mix(in srgb, rgba(46, 125, 50, 0.16) 55%, var(--panel-main-bg, #12100d)) !important;
    border-color: rgba(158, 212, 162, 0.24) !important;
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.05);
}

@supports not (background: color-mix(in srgb, red 50%, white)) {
    .ui-card-contrato-nivel__aviso-resultado {
        background-color: #eef6ef !important;
    }
}

.ui-card-contrato-nivel__aviso-icono {
    font-size: 0.8125rem;
    color: #1a1a1a;
    opacity: 0.72;
}

[data-theme="dark"] .ui-card-contrato-nivel__aviso-estado--banda {
    box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.06),
        0 4px 14px rgba(0, 0, 0, 0.28);
}

[data-theme="dark"] .ui-card-contrato-nivel__aviso-icono {
    color: var(--color-text-default, #f0ebe0);
    opacity: 0.85;
}

.ui-card-contrato-nivel__aviso-estado.ui-card-aviso-panel--izquierda {
    text-align: center;
}

.ui-card-contrato-nivel__aviso-estado .ui-card-aviso-panel__texto {
    text-align: center;
}

.ui-card-contrato-nivel__aviso-estado .d-flex {
    justify-content: center;
}

.ui-card-contrato-nivel__cargando,
.contrato-nivel-fila__cargando {
    position: absolute;
    inset: 0;
    z-index: 3;
    border-radius: inherit;
}

@media (max-width: 991.98px) {
    .contratos-nivel-lista {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

@media (max-width: 575.98px) {
    .contratos-nivel-lista {
        grid-template-columns: minmax(0, 1fr);
    }
}

/* ---------------------------------------------------------------------------
   card-image-hero + card-image-escena: imagen protagonista a pantalla completa
   con capas superpuestas (disco, aro, contador). Reutilizable; la vista ajusta
   posicion con variables CSS (--card-image-escena-cx/cy, etc.) si cambia la imagen.
   --------------------------------------------------------------------------- */
.card-image-hero {
    display: flex;
    flex-direction: column;
    width: 100%;
    padding: clamp(0.25rem, 1vw, 0.75rem) 0;
}

.card-image-hero__cabecera {
    text-align: center;
    margin-bottom: 0;
}

.card-image-hero__titulo {
    font-size: clamp(1.4rem, 3.5vw, 2.1rem);
    font-weight: 700;
    color: var(--color-granate, #661414);
    margin-bottom: 0.4rem;
}

.card-image-hero__info {
    font-size: clamp(0.85rem, 2vw, 1rem);
    color: var(--color-text-muted, #5c4a3d);
    margin-bottom: 0;
}

.card-image-hero__escena {
    position: relative;
    display: flex;
    align-items: flex-start;
    justify-content: center;
    padding-block: 0;
    margin-top: clamp(-5rem, -6vw, -2rem);
}

.card-image-escena {
    --card-image-escena-cx: 49.8%;
    --card-image-escena-cy: 51.9%;
    --card-image-escena-disco: 43%;
    --card-image-escena-aro: 40%;
    --card-image-escena-contador: 37%;
    --card-image-escena-disco-opacity: 0.22;
    position: relative;
    aspect-ratio: var(--card-image-escena-aspect, 1536 / 1024);
    height: min(calc(100vh - 14rem), 49rem);
    width: auto;
    max-width: 100%;
    margin: 0 auto;
    container-type: inline-size;
}

.card-image-escena__fondo {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: contain;
    position: relative;
    z-index: 1;
}

.card-image-escena__disco {
    position: absolute;
    top: var(--card-image-escena-cy);
    left: var(--card-image-escena-cx);
    transform: translate(-50%, -50%);
    width: var(--card-image-escena-disco);
    aspect-ratio: 1;
    border-radius: 50%;
    object-fit: cover;
    opacity: var(--card-image-escena-disco-opacity);
    z-index: 2;
    pointer-events: none;
    -webkit-mask-image: radial-gradient(circle, #000 93%, transparent 100%);
    mask-image: radial-gradient(circle, #000 93%, transparent 100%);
}

.card-image-escena__aro {
    position: absolute;
    top: var(--card-image-escena-cy);
    left: var(--card-image-escena-cx);
    transform: translate(-50%, -50%);
    width: var(--card-image-escena-aro);
    aspect-ratio: 1;
    border-radius: 50%;
    border: 0.18rem dashed rgba(102, 20, 20, 0.22);
    box-shadow: inset 0 0 2.5rem rgba(102, 20, 20, 0.06);
    z-index: 2;
    pointer-events: none;
}

.card-image-escena__contador {
    position: absolute;
    top: var(--card-image-escena-cy);
    left: var(--card-image-escena-cx);
    transform: translate(-50%, -50%);
    width: var(--card-image-escena-contador);
    display: flex;
    align-items: flex-start;
    justify-content: center;
    gap: 1.1cqw;
    z-index: 3;
}

.card-image-escena__unidad {
    display: flex;
    flex-direction: column;
    align-items: center;
}

.card-image-escena__numero {
    font-size: 4.4cqw;
    font-weight: 700;
    line-height: 1;
    color: var(--color-granate, #661414);
    font-variant-numeric: tabular-nums;
}

.card-image-escena__etiqueta {
    margin-top: 0.35rem;
    font-size: 1.35cqw;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    color: #5c4a3d;
}

.card-image-escena__sep {
    font-size: 3.8cqw;
    font-weight: 700;
    line-height: 1;
    color: rgba(102, 20, 20, 0.5);
    margin-top: 0.3cqw;
}

/* Esfera clara de la imagen: numeros oscuros fijos aun en tema oscuro */
[data-theme="dark"] .card-image-escena__numero {
    color: #661414;
}

[data-theme="dark"] .card-image-escena__etiqueta {
    color: #5c4a3d;
}

/* ===========================================================================
   Editor "Contenido del contrato" (modalEditarHtmlDocumentoContrato, staff).
   Cabecera con icono+titulo+ayuda y mascota institucional (misma ranura que
   ui-card-contrato-nivel__vacio, marca.mascota-escribiendo) para que Marketing
   la actualice sin tocar codigo. Chips de marcadores agrupados en panel propio.
   =========================================================================== */
.ui-editor-contrato__cabecera {
    display: flex;
    align-items: flex-start;
    gap: 0.85rem;
    background: color-mix(in srgb, var(--color-granate, #661414) 6%, var(--color-blanco, #fff));
}

.ui-editor-contrato__cabecera-texto {
    flex: 1 1 auto;
    min-width: 0;
}

.ui-editor-contrato__mascota {
    flex-shrink: 0;
    width: 56px;
    height: auto;
    margin-top: -0.35rem;
}

.ui-editor-contrato__etiqueta {
    font-size: var(--text-sm, 0.875rem);
    font-weight: 700;
    color: var(--color-granate, #661414);
}

.ui-editor-contrato__ayuda {
    font-size: var(--text-sm, 0.8125rem);
    color: var(--color-text-muted, #6c757d);
    line-height: 1.45;
}

.ui-editor-contrato__marcadores {
    padding: 0.85rem 1rem;
    border: 1px solid #e5e0d8;
    border-radius: 12px;
    background: color-mix(in srgb, var(--color-crema, #f7f3e8) 55%, var(--color-blanco, #fff));
}

/* ===========================================================================
   Recuadro de firma virtual (envios_contrato_estudiante, portal estudiante).
   El borde anterior usaba --bs-border-color (redefinida global a un granate
   casi transparente para inputs), quedaba invisible sobre fondo blanco y sin
   ningun texto que avise que es un area interactiva. Borde propio + placeholder.
   =========================================================================== */
.ui-firma-canvas-wrap {
    position: relative;
    border: 2px dashed color-mix(in srgb, var(--color-granate, #661414) 45%, transparent);
    border-radius: 0.75rem;
    background: color-mix(in srgb, var(--color-crema, #f7f3e8) 40%, var(--color-blanco, #fff));
    overflow: hidden;
}

.ui-firma-canvas-wrap__canvas {
    width: 100%;
    height: 220px;
    touch-action: none;
    display: block;
    cursor: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" fill="none" stroke="%231a1a1a" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z"></path></svg>') 2 22, crosshair;
    position: relative;
    z-index: 1;
}

.ui-firma-canvas-wrap__placeholder {
    position: absolute;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 0.5rem;
    color: color-mix(in srgb, var(--color-granate, #661414) 45%, var(--color-text-muted, #6c757d));
    font-size: var(--text-sm, 0.9375rem);
    font-weight: 500;
    pointer-events: none;
    z-index: 0;
    transition: opacity 0.15s ease;
}

.ui-firma-canvas-wrap__placeholder.is-oculto {
    opacity: 0;
}

[data-theme="dark"] .ui-firma-canvas-wrap {
    background: rgba(0, 0, 0, 0.15);
    border-color: color-mix(in srgb, var(--color-dorado, #d99a56) 55%, transparent);
}

