/* ==========================================================================
   SIGEB — estilos compartidos
   Todo el color y el radio salen de los tokens que genera MudThemeProvider
   (--mud-palette-*, --mud-default-borderradius) a partir de Design/SigebTema.cs.
   No agregar colores literales acá.
   ========================================================================== */

/* ---- Tipografía Inter (self-hosted, sin depender de CDNs) ---- */

@font-face {
    font-family: 'Inter';
    font-style: normal;
    font-weight: 100 900;
    font-display: swap;
    src: url('fonts/inter-latin.woff2') format('woff2');
    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-weight: 100 900;
    font-display: swap;
    src: url('fonts/inter-latin-ext.woff2') format('woff2');
    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;
}

/* ---- Tokens de la aplicación ---- */

:root {
    --sigeb-radio-sm: 6px;
    --sigeb-radio-md: 10px;
    --sigeb-radio-lg: 14px;
    --sigeb-espacio-1: .25rem;
    --sigeb-espacio-2: .5rem;
    --sigeb-espacio-3: .75rem;
    --sigeb-espacio-4: 1rem;
    --sigeb-espacio-5: 1.5rem;
    --sigeb-espacio-6: 2rem;
    --sigeb-borde: 1px solid var(--mud-palette-divider);
    --sigeb-panel-padding: 1.25rem;
    --sigeb-ancho-max: 1560px;
    --sigeb-transicion: 160ms cubic-bezier(.4, 0, .2, 1);
}

html, body {
    margin: 0;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
}

/* Foco visible y consistente en toda la app (accesibilidad). */
:focus-visible {
    outline: 2px solid var(--mud-palette-primary);
    outline-offset: 2px;
    border-radius: var(--sigeb-radio-sm);
}

/* ---- Shell del dashboard ---- */

.sigeb-appbar {
    border-bottom: var(--sigeb-borde);
    backdrop-filter: saturate(140%) blur(6px);
}

.sigeb-appbar .mud-toolbar {
    gap: var(--sigeb-espacio-2);
}

.sigeb-appbar-titulo {
    font-weight: 600;
    letter-spacing: -.01em;
}

.sigeb-drawer {
    border-right: var(--sigeb-borde);
}

.sigeb-drawer .mud-drawer-content {
    display: flex;
    flex-direction: column;
    height: 100%;
}

.sigeb-drawer-cabecera {
    display: flex;
    align-items: center;
    gap: var(--sigeb-espacio-3);
    padding: 0 var(--sigeb-espacio-4);
    min-height: 60px;
    border-bottom: var(--sigeb-borde);
    text-decoration: none;
    color: inherit;
}

.sigeb-marca-logo {
    display: grid;
    place-items: center;
    width: 34px;
    height: 34px;
    flex: 0 0 34px;
    border-radius: var(--sigeb-radio-md);
    background: var(--mud-palette-primary);
    color: var(--mud-palette-primary-text);
}

.sigeb-marca-texto {
    display: flex;
    flex-direction: column;
    line-height: 1.15;
    overflow: hidden;
    white-space: nowrap;
}

.sigeb-marca-nombre {
    font-size: 1.0625rem;
    font-weight: 700;
    letter-spacing: -.01em;
    color: var(--mud-palette-text-primary);
}

.sigeb-marca-bajada {
    font-size: .6875rem;
    font-weight: 500;
    letter-spacing: .06em;
    text-transform: uppercase;
    color: var(--mud-palette-text-secondary);
}

.sigeb-nav {
    flex: 1 1 auto;
    overflow-y: auto;
    padding: var(--sigeb-espacio-3) var(--sigeb-espacio-2);
}

.sigeb-nav-grupo {
    padding: var(--sigeb-espacio-3) var(--sigeb-espacio-3) var(--sigeb-espacio-1);
    font-size: .6875rem;
    font-weight: 700;
    letter-spacing: .08em;
    text-transform: uppercase;
    color: var(--mud-palette-text-secondary);
}

.sigeb-nav .mud-nav-link {
    border-radius: var(--sigeb-radio-md);
    margin-bottom: 2px;
    padding-block: .5rem;
    font-size: .875rem;
    font-weight: 500;
    transition: background-color var(--sigeb-transicion), color var(--sigeb-transicion);
}

.sigeb-nav .mud-nav-link.active {
    background: rgba(var(--mud-palette-primary-rgb), .1);
    color: var(--mud-palette-primary);
    font-weight: 600;
}

.sigeb-nav .mud-nav-link.active .mud-icon-root {
    color: var(--mud-palette-primary);
}

.sigeb-drawer-pie {
    border-top: var(--sigeb-borde);
    padding: var(--sigeb-espacio-3);
}

.sigeb-version {
    margin-top: var(--sigeb-espacio-2);
    text-align: center;
    font-size: .6875rem;
    color: var(--mud-palette-text-secondary);
}

.sigeb-usuario {
    display: flex;
    align-items: center;
    gap: var(--sigeb-espacio-3);
    min-width: 0;
}

/* El bloque de usuario abre el menú de cuenta: toda la fila es el activador.
   MudBlazor le pone display:contents al wrapper del activador, y así no genera caja:
   no es enfocable y su tabindex/role="button" quedan muertos. Le damos caja para que
   funcione el Enter/Espacio que la propia MudMenu maneja. */
.sigeb-drawer-pie .mud-menu {
    display: block;
    width: 100%;
}

/* El selector lleva "div" a propósito: MudBlazor define .mud-menu > div.mud-menu-activator
   y sin eso le gana por especificidad. */
.sigeb-drawer-pie .mud-menu > div.mud-menu-activator {
    display: block;
    width: 100%;
}

.sigeb-usuario--activador {
    cursor: pointer;
    padding: var(--sigeb-espacio-2);
    border-radius: var(--sigeb-radio-md);
    transition: background-color var(--sigeb-transicion);
}

.sigeb-usuario--activador:hover {
    background-color: var(--mud-palette-action-default-hover);
}

.sigeb-usuario-chevron {
    color: var(--mud-palette-text-secondary);
    flex-shrink: 0;
}

.sigeb-usuario-datos {
    min-width: 0;
    line-height: 1.25;
}

.sigeb-usuario-nombre,
.sigeb-usuario-rol {
    display: block;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    max-width: 150px;
}

.sigeb-usuario-nombre {
    font-size: .8125rem;
    font-weight: 600;
    color: var(--mud-palette-text-primary);
}

.sigeb-usuario-rol {
    font-size: .6875rem;
    color: var(--mud-palette-text-secondary);
}

.sigeb-main {
    background: var(--mud-palette-background);
    min-height: 100vh;
}

.sigeb-contenedor {
    max-width: var(--sigeb-ancho-max);
    margin-inline: auto;
    padding: var(--sigeb-espacio-5) var(--sigeb-espacio-5) var(--sigeb-espacio-6);
    display: flex;
    flex-direction: column;
    gap: var(--sigeb-espacio-5);
}

@media (max-width: 600px) {
    .sigeb-contenedor {
        padding: var(--sigeb-espacio-4) var(--sigeb-espacio-3) var(--sigeb-espacio-5);
        gap: var(--sigeb-espacio-4);
    }
}

/* ---- Encabezado de página ---- */

.sigeb-encabezado {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: var(--sigeb-espacio-4);
    flex-wrap: wrap;
}

.sigeb-encabezado h1 {
    margin: 0;
}

.sigeb-encabezado-bajada {
    margin: .25rem 0 0;
    max-width: 70ch;
}

.sigeb-encabezado-acciones {
    display: flex;
    align-items: center;
    gap: var(--sigeb-espacio-2);
    flex-wrap: wrap;
}

/* En el teléfono el encabezado se apila y la acción principal ocupa todo el ancho:
   queda a la vista y es fácil de tocar con el pulgar. */
@media (max-width: 600px) {
    .sigeb-encabezado {
        flex-direction: column;
        align-items: stretch;
    }

    .sigeb-encabezado-acciones .mud-button-root {
        flex: 1 1 auto;
    }
}

/* ---- Panel / tarjeta ---- */

.sigeb-panel {
    background: var(--mud-palette-surface);
    border: var(--sigeb-borde);
    border-radius: var(--sigeb-radio-lg);
    overflow: hidden;
}

.sigeb-panel-cabecera {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--sigeb-espacio-4);
    padding: var(--sigeb-espacio-4) var(--sigeb-panel-padding);
    border-bottom: var(--sigeb-borde);
    flex-wrap: wrap;
}

.sigeb-panel-titulos {
    min-width: 0;
}

.sigeb-panel-acciones {
    display: flex;
    align-items: center;
    gap: var(--sigeb-espacio-2);
    flex-wrap: wrap;
}

.sigeb-panel-cuerpo {
    padding: var(--sigeb-panel-padding);
}

.sigeb-panel-cuerpo--plano {
    padding: 0;
}

/* Barra de filtros: alineada en grilla, colapsa en pantallas chicas. */
.sigeb-filtros {
    display: flex;
    align-items: center;
    gap: var(--sigeb-espacio-3);
    flex-wrap: wrap;
}

.sigeb-filtros > * {
    min-width: 150px;
}

.sigeb-filtros .sigeb-filtro {
    flex: 0 1 190px;
}

.sigeb-filtros .sigeb-filtro--ancho {
    flex: 1 1 240px;
}

.sigeb-filtros .sigeb-filtros-botones {
    display: flex;
    gap: var(--sigeb-espacio-2);
    min-width: 0;
    margin-left: auto;
}

/* ---- Tarjetas de KPI ---- */

.sigeb-kpis {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));
    gap: var(--sigeb-espacio-4);
}

.sigeb-kpi {
    display: flex;
    flex-direction: column;
    gap: var(--sigeb-espacio-2);
    height: 100%;
    padding: var(--sigeb-espacio-4) var(--sigeb-espacio-4) var(--sigeb-espacio-4);
    background: var(--mud-palette-surface);
    border: var(--sigeb-borde);
    border-radius: var(--sigeb-radio-lg);
    transition: border-color var(--sigeb-transicion), transform var(--sigeb-transicion);
}

.sigeb-kpi:hover {
    border-color: rgba(var(--mud-palette-primary-rgb), .35);
}

.sigeb-kpi-cabecera {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: var(--sigeb-espacio-3);
}

.sigeb-kpi-titulo {
    font-size: .75rem;
    font-weight: 600;
    letter-spacing: .04em;
    text-transform: uppercase;
    color: var(--mud-palette-text-secondary);
}

.sigeb-kpi-valor {
    font-size: 1.875rem;
    font-weight: 700;
    line-height: 1.1;
    letter-spacing: -.02em;
    color: var(--mud-palette-text-primary);
    font-variant-numeric: tabular-nums;
}

.sigeb-kpi-detalle {
    color: var(--mud-palette-text-secondary);
}

.sigeb-kpi-icono {
    display: grid;
    place-items: center;
    width: 36px;
    height: 36px;
    flex: 0 0 36px;
    border-radius: var(--sigeb-radio-md);
}

.sigeb-tono-primary { background: rgba(var(--mud-palette-primary-rgb), .12); color: var(--mud-palette-primary); }
.sigeb-tono-secondary { background: rgba(var(--mud-palette-secondary-rgb), .12); color: var(--mud-palette-secondary); }
.sigeb-tono-tertiary { background: rgba(var(--mud-palette-tertiary-rgb), .12); color: var(--mud-palette-tertiary); }
.sigeb-tono-info { background: rgba(var(--mud-palette-info-rgb), .12); color: var(--mud-palette-info); }
.sigeb-tono-success { background: rgba(var(--mud-palette-success-rgb), .14); color: var(--mud-palette-success); }
.sigeb-tono-warning { background: rgba(var(--mud-palette-warning-rgb), .14); color: var(--mud-palette-warning); }
.sigeb-tono-error { background: rgba(var(--mud-palette-error-rgb), .12); color: var(--mud-palette-error); }
/* El tono neutro usa gris oscuro (no el secundario) para llegar a contraste AA sobre su propio tinte. */
.sigeb-tono-default { background: rgba(var(--mud-palette-dark-rgb), .08); color: var(--mud-palette-gray-dark); }

/* ---- Accesos rápidos y avisos (home) ---- */

/* Botón principal de la portada del propietario: grande y fácil de tocar. */
.sigeb-cta {
    padding-block: .875rem;
    font-size: 1rem;
}

.sigeb-accesos {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));
    gap: var(--sigeb-espacio-3);
}

.sigeb-accesos .mud-button-root {
    justify-content: flex-start;
}

.sigeb-lista-avisos {
    display: flex;
    flex-direction: column;
    gap: var(--sigeb-espacio-3);
}

.sigeb-aviso {
    padding: var(--sigeb-espacio-3) var(--sigeb-espacio-4);
    border: var(--sigeb-borde);
    border-radius: var(--sigeb-radio-md);
    background: var(--mud-palette-background-gray);
}

.sigeb-aviso-cuerpo {
    margin-top: var(--sigeb-espacio-2);
    white-space: pre-line;
    color: var(--mud-palette-text-primary);
}

/* ---- Badges de estado ---- */

.sigeb-badge {
    display: inline-flex;
    align-items: center;
    gap: .25rem;
    padding: .125rem .5rem;
    border-radius: 999px;
    font-size: .6875rem;
    font-weight: 600;
    letter-spacing: .01em;
    white-space: nowrap;
    line-height: 1.6;
}

.sigeb-badge .mud-icon-root {
    font-size: .875rem;
}

/* ---- Tablas ---- */

.sigeb-tabla .mud-table-root {
    background: transparent;
}

.sigeb-tabla .mud-table-head .mud-table-cell {
    font-size: .6875rem;
    font-weight: 700;
    letter-spacing: .06em;
    text-transform: uppercase;
    color: var(--mud-palette-text-secondary);
    background: var(--mud-palette-surface);
    border-bottom: var(--sigeb-borde);
    white-space: nowrap;
}

.sigeb-tabla .mud-table-body .mud-table-cell {
    font-size: .8125rem;
    border-bottom: 1px solid var(--mud-palette-table-lines);
}

.sigeb-tabla .mud-table-body .mud-table-row:last-child .mud-table-cell {
    border-bottom: none;
}

.sigeb-tabla-cell--numero {
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}

.sigeb-tabla-acciones {
    display: flex;
    gap: .125rem;
    justify-content: flex-end;
    white-space: nowrap;
}

.sigeb-celda-principal {
    font-weight: 600;
    color: var(--mud-palette-text-primary);
}

.sigeb-celda-secundaria {
    color: var(--mud-palette-text-secondary);
}

/* Textos largos en tabla (observaciones): una línea con puntos suspensivos. */
.sigeb-celda-truncada {
    display: inline-block;
    max-width: 22rem;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    vertical-align: bottom;
}

.sigeb-codigo {
    font-family: ui-monospace, SFMono-Regular, "Cascadia Mono", Menlo, Consolas, monospace;
    font-size: .8125rem;
    letter-spacing: .06em;
    padding: .0625rem .375rem;
    border-radius: var(--sigeb-radio-sm);
    background: var(--mud-palette-background-gray);
    border: var(--sigeb-borde);
}

.sigeb-paginador {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--sigeb-espacio-3);
    padding: var(--sigeb-espacio-3) var(--sigeb-panel-padding);
    border-top: var(--sigeb-borde);
    flex-wrap: wrap;
}

/* ---- Lista de registros (vistas del propietario, mobile-first) ----
   Un renglón compacto por registro: título + detalle truncados, chip de estado
   e ícono decorativo. Si la fila es tocable, toda la fila es el botón. */

.sigeb-lista {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
}

.sigeb-lista > li + li,
.sigeb-lista > .sigeb-lista-fila + .sigeb-lista-fila {
    border-top: 1px solid var(--mud-palette-table-lines);
}

.sigeb-lista-fila {
    display: flex;
    align-items: center;
    gap: var(--sigeb-espacio-3);
    width: 100%;
    box-sizing: border-box;
    min-height: 56px;
    padding: .625rem var(--sigeb-panel-padding);
    background: none;
    border: none;
    font: inherit;
    color: inherit;
    text-align: left;
    text-decoration: none;
}

button.sigeb-lista-fila,
a.sigeb-lista-fila {
    cursor: pointer;
    transition: background-color var(--sigeb-transicion);
}

button.sigeb-lista-fila:hover,
a.sigeb-lista-fila:hover {
    background: var(--mud-palette-action-default-hover);
}

.sigeb-item-icono {
    display: grid;
    place-items: center;
    width: 34px;
    height: 34px;
    flex: 0 0 34px;
    border-radius: var(--sigeb-radio-md);
}

.sigeb-item-cuerpo {
    flex: 1 1 auto;
    min-width: 0;
    line-height: 1.35;
}

.sigeb-item-titulo {
    display: block;
    font-size: .875rem;
    font-weight: 600;
    color: var(--mud-palette-text-primary);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.sigeb-item-detalle {
    display: block;
    font-size: .75rem;
    color: var(--mud-palette-text-secondary);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.sigeb-lista-fila .sigeb-badge,
.sigeb-lista-fila > .mud-icon-root {
    flex-shrink: 0;
}

.sigeb-item-chevron {
    color: var(--mud-palette-text-secondary);
}

/* Filtros arriba de la lista: chips y controles compactos, sin la grilla de escritorio. */
.sigeb-lista-filtros {
    display: flex;
    align-items: center;
    gap: var(--sigeb-espacio-3);
    flex-wrap: wrap;
    padding: var(--sigeb-espacio-3) var(--sigeb-panel-padding);
    border-bottom: 1px solid var(--mud-palette-table-lines);
}

.sigeb-lista-filtros .sigeb-filtro {
    flex: 0 1 170px;
}

@media (max-width: 600px) {
    /* Dos pickers comparten el renglón en el teléfono. */
    .sigeb-lista-filtros .sigeb-filtro {
        flex: 1 1 130px;
    }
}

/* ---- Chips de selección (filtros de estado, tipo y duración) ---- */

.sigeb-chips {
    display: flex;
    gap: var(--sigeb-espacio-2);
    flex-wrap: wrap;
}

.sigeb-chip {
    font: inherit;
    font-size: .8125rem;
    font-weight: 600;
    color: var(--mud-palette-text-secondary);
    background: transparent;
    border: 1px solid var(--mud-palette-lines-inputs);
    border-radius: 999px;
    padding: .375rem .875rem;
    cursor: pointer;
    white-space: nowrap;
    transition: all var(--sigeb-transicion);
}

.sigeb-chip:hover {
    border-color: var(--mud-palette-text-secondary);
}

.sigeb-chip--activo {
    background: rgba(var(--mud-palette-primary-rgb), .12);
    border-color: var(--mud-palette-primary);
    color: var(--mud-palette-primary);
}

/* Grupo de chips dentro de un formulario: etiqueta chica arriba, opciones a la vista. */
.sigeb-grupo-chips {
    margin-top: var(--sigeb-espacio-4);
}

.sigeb-grupo-titulo {
    display: block;
    margin-bottom: var(--sigeb-espacio-2);
    font-size: .75rem;
    font-weight: 600;
    letter-spacing: .02em;
    color: var(--mud-palette-text-secondary);
}

.sigeb-esqueleto {
    display: flex;
    flex-direction: column;
    gap: .625rem;
    padding: var(--sigeb-panel-padding);
}

/* ---- Estado vacío ---- */

.sigeb-sin-datos {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--sigeb-espacio-2);
    padding: var(--sigeb-espacio-6) var(--sigeb-espacio-4);
    text-align: center;
    color: var(--mud-palette-text-secondary);
}

.sigeb-sin-datos-icono {
    display: grid;
    place-items: center;
    width: 48px;
    height: 48px;
    border-radius: 50%;
    background: var(--mud-palette-background-gray);
    border: var(--sigeb-borde);
}

/* ---- Formularios en diálogos ---- */

.sigeb-form-grilla {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    gap: var(--sigeb-espacio-4);
}

.sigeb-form-grilla--ancha {
    grid-column: 1 / -1;
}

.sigeb-subseccion {
    margin-top: var(--sigeb-espacio-4);
    padding-top: var(--sigeb-espacio-4);
    border-top: var(--sigeb-borde);
}

.sigeb-fila-embebida {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)) auto;
    align-items: center;
    gap: var(--sigeb-espacio-3);
    padding: var(--sigeb-espacio-3);
    border: 1px dashed var(--mud-palette-lines-default);
    border-radius: var(--sigeb-radio-md);
    background: var(--mud-palette-background-gray);
}

/* Selector de días de la semana (autorizaciones permanentes). */
.sigeb-dias {
    display: flex;
    gap: var(--sigeb-espacio-2);
    flex-wrap: wrap;
}

.sigeb-dia {
    position: relative;
}

.sigeb-dia input {
    position: absolute;
    opacity: 0;
    width: 100%;
    height: 100%;
    margin: 0;
    cursor: pointer;
}

.sigeb-dia span {
    display: grid;
    place-items: center;
    min-width: 42px;
    padding: .375rem .5rem;
    border: 1px solid var(--mud-palette-lines-inputs);
    border-radius: var(--sigeb-radio-md);
    font-size: .8125rem;
    font-weight: 600;
    color: var(--mud-palette-text-secondary);
    transition: all var(--sigeb-transicion);
}

.sigeb-dia input:checked + span {
    background: rgba(var(--mud-palette-primary-rgb), .12);
    border-color: var(--mud-palette-primary);
    color: var(--mud-palette-primary);
}

.sigeb-dia input:focus-visible + span {
    outline: 2px solid var(--mud-palette-primary);
    outline-offset: 2px;
}

/* ---- Portería: resultado de validación (legible a distancia) ---- */

.porteria-codigo {
    flex: 1 1 320px;
    min-width: 260px;
}

.porteria-codigo .mud-input-root {
    font-size: 1.5rem;
    font-weight: 600;
    letter-spacing: .1em;
}

.porteria-resultado {
    display: flex;
    align-items: center;
    gap: var(--sigeb-espacio-5);
    padding: var(--sigeb-espacio-5);
    border-radius: var(--sigeb-radio-lg);
    border: 2px solid;
    flex-wrap: wrap;
}

.porteria-resultado--valido {
    background: rgba(var(--mud-palette-success-rgb), .1);
    border-color: var(--mud-palette-success);
    color: var(--mud-palette-success);
}

.porteria-resultado--rechazado {
    background: rgba(var(--mud-palette-error-rgb), .1);
    border-color: var(--mud-palette-error);
    color: var(--mud-palette-error);
}

/* Ni permitido ni rechazado: hay que elegir o no se encontró nada. */
.porteria-resultado--aviso {
    background: rgba(var(--mud-palette-warning-rgb), .1);
    border-color: var(--mud-palette-warning);
    color: var(--mud-palette-warning);
}

.porteria-resultado-icono .mud-icon-root {
    font-size: 4.5rem;
}

.porteria-resultado-titulo {
    font-size: clamp(2rem, 5vw, 3.25rem);
    font-weight: 800;
    line-height: 1;
    letter-spacing: -.02em;
}

.porteria-resultado-mensaje {
    color: var(--mud-palette-text-primary);
    font-size: 1rem;
}

.porteria-resultado-datos {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
    gap: var(--sigeb-espacio-3) var(--sigeb-espacio-5);
    width: 100%;
    margin: 0;
    padding-top: var(--sigeb-espacio-4);
    border-top: 1px solid currentColor;
}

.porteria-resultado-datos dt {
    font-size: .6875rem;
    font-weight: 700;
    letter-spacing: .06em;
    text-transform: uppercase;
    color: var(--mud-palette-text-secondary);
}

.porteria-resultado-datos dd {
    margin: .125rem 0 0;
    font-size: 1rem;
    font-weight: 600;
    color: var(--mud-palette-text-primary);
}

.porteria-vacio {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--sigeb-espacio-2);
    padding: var(--sigeb-espacio-6) var(--sigeb-espacio-4);
    text-align: center;
    color: var(--mud-palette-text-secondary);
    border: 1px dashed var(--mud-palette-lines-default);
    border-radius: var(--sigeb-radio-lg);
}

.porteria-patente {
    min-width: 9rem;
}

/* Plegables de las funciones secundarias: mismo lenguaje visual que los paneles. */
.sigeb-plegables .mud-expand-panel {
    background: var(--mud-palette-surface);
    border: var(--sigeb-borde);
    border-radius: var(--sigeb-radio-lg);
    overflow: hidden;
}

.sigeb-plegables .mud-expand-panel + .mud-expand-panel {
    margin-top: var(--sigeb-espacio-4);
}

/* ---- Reservas: grilla de franjas (módulo postergado, la página no tiene ruta) ---- */

.sigeb-franjas {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(122px, 1fr));
    gap: var(--sigeb-espacio-3);
}

.sigeb-franja {
    font-variant-numeric: tabular-nums;
}

.sigeb-franja--ocupada {
    text-decoration: line-through;
}

/* ---- QR ---- */

.sigeb-qr {
    display: flex;
    gap: var(--sigeb-espacio-5);
    align-items: center;
    flex-wrap: wrap;
}

/* En el teléfono el QR va centrado y los botones de compartir a lo ancho. */
@media (max-width: 600px) {
    .sigeb-qr {
        flex-direction: column;
        gap: var(--sigeb-espacio-4);
    }

    .sigeb-qr-datos {
        min-width: 0;
        width: 100%;
        align-items: stretch;
        text-align: center;
    }

    .sigeb-qr-datos .mud-button-root {
        flex: 1 1 auto;
    }
}

.sigeb-qr-imagen {
    padding: var(--sigeb-espacio-3);
    background: #fff;
    border: var(--sigeb-borde);
    border-radius: var(--sigeb-radio-md);
    display: block;
}

.sigeb-qr-datos {
    display: flex;
    flex-direction: column;
    gap: var(--sigeb-espacio-2);
    min-width: 240px;
    flex: 1;
}

.sigeb-codigo-grande {
    font-family: ui-monospace, SFMono-Regular, "Cascadia Mono", Menlo, Consolas, monospace;
    font-size: 1.5rem;
    font-weight: 700;
    letter-spacing: .22em;
    color: var(--mud-palette-text-primary);
}

/* ---- Credencial temporal (alta de usuario y restablecimiento) ---- */

.sigeb-credencial {
    display: flex;
    flex-direction: column;
    gap: var(--sigeb-espacio-3);
    padding: var(--sigeb-panel-padding);
    background: var(--mud-palette-background-gray);
    border: var(--sigeb-borde);
    border-radius: var(--sigeb-radio-md);
}

.sigeb-credencial-fila {
    display: flex;
    align-items: center;
    gap: var(--sigeb-espacio-2);
    flex-wrap: wrap;
}

.sigeb-credencial-etiqueta {
    min-width: 9.5rem;
    font-size: .8125rem;
    color: var(--mud-palette-text-secondary);
}

/* ---- Páginas públicas (login, invitación, error) ---- */

.sigeb-publico {
    min-height: 100vh;
    display: grid;
    place-items: center;
    padding: var(--sigeb-espacio-5);
    background:
        radial-gradient(1200px 500px at 50% -10%, rgba(var(--mud-palette-primary-rgb), .10), transparent 70%),
        var(--mud-palette-background);
}

.sigeb-publico-tarjeta {
    width: 100%;
    max-width: 420px;
    background: var(--mud-palette-surface);
    border: var(--sigeb-borde);
    border-radius: var(--sigeb-radio-lg);
    padding: var(--sigeb-espacio-6);
    box-shadow: var(--mud-elevation-4);
}

.sigeb-publico-tarjeta--ancha {
    max-width: 480px;
}

.sigeb-publico-marca {
    display: flex;
    align-items: center;
    gap: var(--sigeb-espacio-3);
    justify-content: center;
    margin-bottom: var(--sigeb-espacio-5);
}

.sigeb-invitacion {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--sigeb-espacio-4);
    text-align: center;
}

.sigeb-invitacion-cabecera h1 {
    margin: 0;
}

.sigeb-invitacion-qr {
    align-self: center;
}

.sigeb-invitacion-vigencia {
    width: 100%;
    padding: var(--sigeb-espacio-3);
    border-radius: var(--sigeb-radio-md);
    background: var(--mud-palette-background-gray);
    border: var(--sigeb-borde);
}

/* Autoregistro del invitado: el formulario donde completa sus propios datos. */
.sigeb-invitacion-autoregistro {
    width: 100%;
    margin-top: var(--sigeb-espacio-4);
    padding: var(--sigeb-espacio-4);
    border-radius: var(--sigeb-radio-md);
    border: var(--sigeb-borde);
    text-align: left;
}

.sigeb-publico-titulo {
    margin: 0;
    font-size: 1.375rem;
    font-weight: 700;
    letter-spacing: -.01em;
    color: var(--mud-palette-text-primary);
}

.sigeb-publico-bajada {
    margin: .375rem 0 var(--sigeb-espacio-5);
    font-size: .875rem;
    color: var(--mud-palette-text-secondary);
}

.sigeb-publico-pie {
    margin-top: var(--sigeb-espacio-5);
    padding-top: var(--sigeb-espacio-4);
    border-top: var(--sigeb-borde);
    font-size: .75rem;
    color: var(--mud-palette-text-secondary);
    text-align: center;
}

/* Alertas nativas (páginas SSR estáticas, sin MudAlert). */
.sigeb-alerta {
    display: flex;
    gap: var(--sigeb-espacio-2);
    padding: .625rem .875rem;
    margin-bottom: var(--sigeb-espacio-4);
    border-radius: var(--sigeb-radio-md);
    font-size: .8125rem;
    border: 1px solid;
}

.sigeb-alerta--error {
    background: rgba(var(--mud-palette-error-rgb), .1);
    border-color: var(--mud-palette-error);
    color: var(--mud-palette-error);
}

.sigeb-alerta--exito {
    background: rgba(var(--mud-palette-success-rgb), .1);
    border-color: var(--mud-palette-success);
    color: var(--mud-palette-success);
}

/* Inputs nativos del login (SSR estático, sin componentes interactivos). */
.sigeb-campo {
    display: flex;
    flex-direction: column;
    gap: .375rem;
    margin-bottom: var(--sigeb-espacio-4);
}

.sigeb-campo label {
    font-size: .8125rem;
    font-weight: 600;
    color: var(--mud-palette-text-primary);
}

.sigeb-campo input {
    font: inherit;
    font-size: .9375rem;
    color: var(--mud-palette-text-primary);
    background: var(--mud-palette-surface);
    border: 1px solid var(--mud-palette-lines-inputs);
    border-radius: var(--sigeb-radio-md);
    padding: .625rem .75rem;
    transition: border-color var(--sigeb-transicion), box-shadow var(--sigeb-transicion);
}

.sigeb-campo input:hover {
    border-color: var(--mud-palette-text-secondary);
}

.sigeb-campo input:focus {
    outline: none;
    border-color: var(--mud-palette-primary);
    box-shadow: 0 0 0 3px rgba(var(--mud-palette-primary-rgb), .18);
}

.sigeb-boton-nativo {
    width: 100%;
    font: inherit;
    font-size: .9375rem;
    font-weight: 600;
    color: var(--mud-palette-primary-text);
    background: var(--mud-palette-primary);
    border: none;
    border-radius: var(--sigeb-radio-md);
    padding: .6875rem 1rem;
    cursor: pointer;
    transition: background-color var(--sigeb-transicion);
}

.sigeb-boton-nativo:hover {
    background: var(--mud-palette-primary-darken);
}

/* Mismo botón, cuando en vez de enviar un formulario navega a otra pantalla. */
.sigeb-boton-nativo--link {
    display: block;
    box-sizing: border-box;
    text-align: center;
    text-decoration: none;
}

.sigeb-campo-ayuda {
    font-size: .75rem;
    color: var(--mud-palette-text-secondary);
}

/* Formularios de una sola columna dentro del dashboard (cambio de contraseña). */
.sigeb-formulario-angosto {
    max-width: 32rem;
}

/* ---- Aviso de error / reconexión del framework ---- */

#blazor-error-ui {
    display: none;
    position: fixed;
    inset-inline: 0;
    bottom: 0;
    z-index: 2000;
    padding: .875rem 1.25rem;
    background: var(--mud-palette-surface);
    color: var(--mud-palette-text-primary);
    border-top: 3px solid var(--mud-palette-warning);
    box-shadow: var(--mud-elevation-8);
    font-size: .875rem;
}

#blazor-error-ui a {
    color: var(--mud-palette-primary);
    font-weight: 600;
    cursor: pointer;
    text-decoration: none;
    margin-inline-start: var(--sigeb-espacio-4);
}

#blazor-error-ui a.dismiss {
    color: var(--mud-palette-text-secondary);
}

/* ---- Validación de Blazor ---- */

.invalid {
    border-color: var(--mud-palette-error) !important;
}

.validation-message {
    color: var(--mud-palette-error);
    font-size: .8125rem;
}

.blazor-error-boundary {
    background: var(--mud-palette-error);
    color: var(--mud-palette-error-text);
    padding: var(--sigeb-espacio-4);
    border-radius: var(--sigeb-radio-md);
}

.blazor-error-boundary::after {
    content: "Ocurrió un error inesperado.";
}
