.login-body {
    display: grid;
    min-height: 100vh;
    margin: 0;
    background:
        radial-gradient(circle at 12% 15%, rgba(112, 77, 204, 0.16), transparent 26rem),
        radial-gradient(circle at 90% 85%, rgba(49, 87, 213, 0.16), transparent 30rem), #f4f7fb;
}

.login-shell {
    display: grid;
    place-items: center;
    width: 100%;
    min-height: 100vh;
    margin: 0;
    padding: 1.25rem;
}

.login-card {
    width: min(100%, 460px);
    padding: 2rem;
    border: 1px solid rgba(227, 233, 242, 0.95);
    border-radius: 24px;
    background: rgba(255, 255, 255, 0.96);
    box-shadow: 0 24px 65px rgba(30, 47, 82, 0.14);
}

.login-brand {
    display: flex;
    align-items: center;
    gap: 1rem;
    padding-bottom: 1.5rem;
    margin-bottom: 1.5rem;
    border-bottom: 1px solid var(--border);
}

.login-card .input-group-text {
    color: var(--muted);
    background: #f8faff;
}

/*
 * El mensaje de validación es el último hijo del grupo. Bootstrap interpreta
 * por ello que el control anterior no cierra el grupo y elimina sus radios.
 * Recuperamos únicamente las esquinas exteriores del último control visible.
 */
.login-card .input-group > .form-control:nth-last-child(2),
.login-card .input-group > .alternar-clave:nth-last-child(2) {
    border-top-right-radius: var(--bs-border-radius, 0.375rem) !important;
    border-bottom-right-radius: var(--bs-border-radius, 0.375rem) !important;
}

.access-denied-icon {
    display: grid;
    place-items: center;
    width: 72px;
    height: 72px;
    color: #dc3545;
    border-radius: 22px;
    background: #fff0f1;
    font-size: 2rem;
}

@media (max-width: 575.98px) {
    .login-card {
        padding: 1.5rem;
    }
}
