/* ==========================================================================
   Iniciar sesión · lo único de esta pantalla (lo compartido vive en kapi.css).
   Origen: Content/login.css del sistema actual, sección «Página de inicio de sesión (21-oct)», ya sin los
   !important que solo servían para ganarle a Bootstrap.
   Colores (decisiones de Diego, 21-oct): botón principal turquesa de marca con texto oscuro (8.4:1); enlaces en
   #2D6BFA (4.6:1); ayuda #5a6472; bordes de campo #8a939e, el tono más claro que cumple 3:1.
   ========================================================================== */

body.login-cuerpo {
    --login-azul: #2D6BFA;
    --login-azul-hover: #1f55d6;
    --login-azul-foco: rgba(45, 107, 250, .25);
    --login-ayuda: #5a6472;
    --login-borde: #8a939e;
    --login-tinta: var(--kapi-text-primary);
    --login-boton: var(--kapi-secondary);
    --login-boton-hover: #00c495;
    --login-boton-tinta: var(--kapi-ink);
    --login-fondo: #f8f9fa;
    height: 100%;
    background-color: var(--kapi-surface);
}

@media (min-width: 705px) {
    body.login-cuerpo {
        background-color: var(--login-fondo);
    }
}

/* ---------- Base de Bootstrap 5.3 (la del inicio de sesión actual) ----------
   kapi.css trae la base de Kapi para el POS (Bootstrap 4.5 en lo estructural y la piel de la familia kf-, D24). El inicio
   de sesión ya tenía su diseño sobre Bootstrap 5.3 (decisiones de Diego, 21-oct), así que aquí lo conserva; solo
   toma la fuente (D26) y el azul (D25) comunes. Donde no había regla vuelve al valor del navegador con revert.
   :where(.login-cuerpo) no suma especificidad: cada regla pesa lo mismo que la de kapi.css que reemplaza, y las propias
   de esta hoja (más abajo) le siguen ganando igual que antes. Medido con tools/medir-css (muestra «login»). */
body.login-cuerpo {
    display: block;
    min-height: 0;
    font-weight: 400;
    color: var(--kapi-text-primary);
    text-align: start;
}

:where(.login-cuerpo) h1,
:where(.login-cuerpo) h2,
:where(.login-cuerpo) h3,
:where(.login-cuerpo) h4 {
    margin-bottom: revert;
    font-size: revert;
    font-weight: revert;
    line-height: revert;
}

:where(.login-cuerpo) h5,
:where(.login-cuerpo) h6 {
    font-weight: 500;
}

:where(.login-cuerpo) strong {
    font-weight: bolder;
}

:where(.login-cuerpo) small {
    font-size: revert;
    font-weight: revert;
}

:where(.login-cuerpo) a {
    color: revert;
    text-decoration: revert;
    cursor: revert;
    transition: none;
}

:where(.login-cuerpo) label {
    display: revert;
    margin-bottom: revert;
}

:where(.login-cuerpo) input,
:where(.login-cuerpo) button,
:where(.login-cuerpo) select,
:where(.login-cuerpo) textarea {
    font: inherit;
    color: inherit;
}

:where(.login-cuerpo) button {
    border-radius: revert;
}

/* Mismo selector que la regla de kapi.css que quita la apariencia nativa, para igualar su peso. */
:where(.login-cuerpo) button,
:where(.login-cuerpo) [type="button"],
:where(.login-cuerpo) [type="reset"],
:where(.login-cuerpo) [type="submit"] {
    -webkit-appearance: revert;
    appearance: revert;
}

/* Rejilla de Bootstrap 5 (medianil de 1.5rem) */
:where(.login-cuerpo) .container {
    padding-right: calc(var(--kapi-gutter) * .5);
    padding-left: calc(var(--kapi-gutter) * .5);
}

@media (min-width: 1400px) {
    :where(.login-cuerpo) .container { max-width: 1320px; }
}

:where(.login-cuerpo) .row {
    --login-gutter: var(--kapi-gutter);
    margin-right: calc(var(--login-gutter) * -.5);
    margin-left: calc(var(--login-gutter) * -.5);
}

:where(.login-cuerpo) .row > * {
    position: static;
    flex-shrink: 0;
    width: 100%;
    max-width: 100%;
    padding-right: calc(var(--login-gutter) * .5);
    padding-left: calc(var(--login-gutter) * .5);
}

:where(.login-cuerpo) .g-0 {
    --login-gutter: 0px;
}

:where(.login-cuerpo) .col-4 { flex: 0 0 auto; width: 33.33333333%; }
:where(.login-cuerpo) .col-8 { flex: 0 0 auto; width: 66.66666667%; }

@media (min-width: 576px) {
    :where(.login-cuerpo) .col-sm-6 { flex: 0 0 auto; width: 50%; }
}

@media (min-width: 992px) {
    :where(.login-cuerpo) .col-lg-4 { flex: 0 0 auto; width: 33.33333333%; }
}

@media (min-width: 1200px) {
    :where(.login-cuerpo) .col-xl-3 { flex: 0 0 auto; width: 25%; }
}

/* Botones, campos y tarjetas de Bootstrap 5.3 */
:where(.login-cuerpo) .btn {
    display: inline-block;
    align-items: normal;
    justify-content: normal;
    margin: 0;
    padding: .375rem .75rem;
    font-size: 1rem;
    color: inherit;
    font-weight: 400;
    text-transform: none;
    white-space: normal;
    overflow-wrap: normal;
    border: 1px solid transparent;
    border-radius: var(--kapi-radius);
    box-shadow: none;
}

:where(.login-cuerpo) .btn:hover,
:where(.login-cuerpo) .btn:focus,
:where(.login-cuerpo) .btn:active {
    box-shadow: none;
}

:where(.login-cuerpo) .btn-lg {
    padding: .5rem 1rem;
    font-size: 1.25rem;
    border-radius: var(--kapi-radius-lg);
}

/* kapi/style.css: enlace con forma de botón, sin caja */
:where(.login-cuerpo) .btn-link {
    padding: .5rem 0;
    font-size: 16px;
    font-weight: 400;
    color: var(--kapi-primary);
    text-decoration: none;
    background-color: transparent;
    border: 0;
}

:where(.login-cuerpo) .btn-link:hover {
    color: var(--kapi-primary-dark);
    text-decoration: none;
}

:where(.login-cuerpo) .form-control,
:where(.login-cuerpo) input.form-control {
    height: auto;
    min-height: 0;
    color: var(--kapi-ink);
    border: 1px solid var(--kapi-border);
    border-radius: var(--kapi-radius);
    appearance: none;
}

:where(.login-cuerpo) .form-control-lg,
:where(.login-cuerpo) input.form-control-lg {
    min-height: 0;
    padding: .5rem 1rem;
    font-size: 1.25rem;
    border-radius: var(--kapi-radius-lg);
}

:where(.login-cuerpo) .form-control:focus {
    border-color: var(--kapi-border);
    box-shadow: none;
}

/* Las reglas de arriba van después de la etiqueta flotante de kapi.css y le ganarían: se reafirman sus medidas. */
:where(.login-cuerpo) .form-floating > .form-control {
    height: calc(3.5rem + 2px);
    padding: 1rem .75rem;
}

:where(.login-cuerpo) .form-floating > .form-control:focus,
:where(.login-cuerpo) .form-floating > .form-control:not(:placeholder-shown) {
    padding-top: 1.625rem;
    padding-bottom: .625rem;
}

:where(.login-cuerpo) .form-control.is-invalid {
    padding-right: .75rem;
    background-image: none;
}

:where(.login-cuerpo) .invalid-feedback {
    font-size: .875em;
    font-weight: 400;
    color: var(--kapi-danger);
}

:where(.login-cuerpo) .small {
    font-size: .875em;
    font-weight: inherit;
}

:where(.login-cuerpo) .card {
    font-weight: inherit;
    border: 1px solid var(--kapi-card-border);
    border-radius: var(--kapi-radius);
    box-shadow: none;
}

:where(.login-cuerpo) .card-body {
    min-height: auto;
    padding: 1rem;
}

/* Igual que la etiqueta flotante: .card-cta de kapi.css va antes y se reafirma. */
:where(.login-cuerpo) .card-cta {
    border: none;
    border-radius: var(--kapi-radius-card);
    box-shadow: var(--kapi-card-shadow);
}

:where(.login-cuerpo) .card-cta:hover {
    box-shadow: var(--kapi-card-shadow-hover);
}

/* ---------- kapi/style.css y kapi/form.css del actual (6-nov) ----------
   El inicio de sesión del actual también carga esas dos hojas (bundle «login», antes de login.css) y faltaban aquí: los campos con
   borde de 2 px, el botón más alto (18 px, sin borde, radio .275rem), los avisos de error en 600, los enlaces sin caja, el texto de
   ejemplo en cursiva y la tarjeta sin sombra en teléfono. Medido contra esa pila con tools/medir-css (muestra «login-actual»). */
body.login-cuerpo {
    color: var(--kapi-ink);
}

:where(.login-cuerpo) input.form-control,
:where(.login-cuerpo) textarea.form-control,
:where(.login-cuerpo) select.form-select {
    border-width: 2px;
}

:where(.login-cuerpo) .btn {
    padding: .5rem 1rem;
    font-size: 16px;
    border: none;
    border-radius: .275rem;
}

:where(.login-cuerpo) .btn-lg {
    padding: .65rem 1rem;
    font-size: 18px;
}

:where(.login-cuerpo) .btn-primary {
    font-weight: 500;
}

:where(.login-cuerpo) .btn:hover {
    box-shadow: 0 0 10px rgba(0, 0, 0, .15);
}

:where(.login-cuerpo) button[disabled] {
    cursor: not-allowed;
    opacity: .5;
}

/* .btn-link lleva «all: unset» allá: un enlace en línea, sin caja. */
:where(.login-cuerpo) .btn-link {
    display: inline;
    box-sizing: content-box;
}

:where(.login-cuerpo) .invalid-feedback {
    font-weight: 600;
}

:where(.login-cuerpo) ::placeholder {
    font-size: 15px;
    font-style: italic;
    color: #a5a5a5;
}

:where(.login-cuerpo) small {
    font-size: .875em;
}

/* .form-control-lg de Bootstrap 5.3: alto mínimo de un renglón más su relleno. */
:where(.login-cuerpo) .form-control-lg {
    min-height: calc(1.5em + 1rem + 2px);
}

:where(.login-cuerpo) fieldset {
    margin-right: 0;
    margin-left: 0;
}

@media (max-width: 704px) {
    :where(.login-cuerpo) div.content-form-sm {
        box-shadow: none;
    }
}

/* ---------- Responsivo ---------- */
.login-cuerpo .login-pagina {
    min-height: 100vh;
    padding-top: 48px;
    padding-bottom: 24px;
}

.login-cuerpo .content-form-sm {
    width: 100%;
    color: var(--login-ayuda);
}

.login-cuerpo #content-logo img {
    max-height: 64px;
}

/* El logo se queda en el selector de sucursales, más chico: misma página, otro paso. */
.login-cuerpo #content-logo.login-logo-chico img {
    max-height: 32px;
}

@media (max-height: 800px) {
    .login-cuerpo .login-pagina { padding-top: 24px; }
    .login-cuerpo #content-logo { margin-bottom: 8px; }
    .login-cuerpo #content-logo img { max-height: 48px; }
}

@media (max-width: 420px) {
    .login-cuerpo .content-form-sm { padding: 24px 16px; }
    .login-cuerpo .login-pagina { padding-top: 16px; }
}

/* ---------- Color, tinta y contraste ---------- */
.login-cuerpo .login-titulo {
    font-size: 1.25rem;
    font-weight: 600;
    color: var(--login-tinta);
}

.login-cuerpo .btn-primary {
    font-weight: 600;
    color: var(--login-boton-tinta);
    background-color: var(--login-boton);
    border-color: var(--login-boton);
}

.login-cuerpo .btn-primary:hover {
    background-color: var(--login-boton-hover);
    border-color: var(--login-boton-hover);
}

/* La opacidad es la de button[disabled] de kapi/style.css del actual (.5, con !important), que gana a la .6 de su login.css. */
.login-cuerpo .btn-primary:disabled {
    background-color: var(--login-boton);
    opacity: .5;
}

.login-cuerpo .btn-link,
.login-cuerpo a.link {
    color: var(--login-azul);
    text-decoration: none;
}

.login-cuerpo .btn-link:hover,
.login-cuerpo a.link:hover {
    color: var(--login-azul-hover);
    text-decoration: underline;
}

.login-cuerpo .form-control {
    border-color: var(--login-borde);
}

.login-cuerpo .form-control:focus {
    border-color: var(--login-azul);
    box-shadow: 0 0 0 .25rem var(--login-azul-foco);
}

.login-cuerpo .form-control.is-invalid {
    border-color: var(--kapi-danger);
}

/* ---------- Foco visible (nunca quitar el foco sin reemplazo) ---------- */
.login-cuerpo .btn-link:focus-visible,
.login-cuerpo a.link:focus-visible,
.login-cuerpo .toogle-password:focus-visible,
.login-cuerpo .btn:focus-visible {
    outline: 2px solid var(--login-azul);
    outline-offset: 2px;
    border-radius: 4px;
}

/* ---------- Mostrar la contraseña (kapi/style.css: .form-floating-password) ---------- */
.form-floating-password {
    display: flex;
    flex-wrap: wrap;
    justify-content: flex-end;
    box-shadow: 0 0 40px rgba(51, 51, 51, .1);
}

.form-floating-password .toogle-password {
    position: absolute;
    z-index: 3;
    margin: .5rem .75rem 0;
    /* Medido contra el actual: así el dibujo queda en el mismo lugar que el del ícono de fuente (allá 1px 6px y su renglón). */
    padding: 7px 6px 1px;
    line-height: 1;
    background-color: var(--kapi-surface);
    border: none;
}

/* El ojo: el bi-eye-fill del actual, gris y de 1.65rem (26 px). */
.login-ojo {
    width: 1.65rem;
    height: 1.65rem;
    fill: var(--kapi-text-secondary);
}

/* ---------- Cambio de pantalla: aparece y sube 8px en .2s ---------- */
.login-cuerpo .login-entra {
    animation: login-entra .2s ease both;
}

@keyframes login-entra {
    from { opacity: 0; transform: translateY(8px); }
    to { opacity: 1; transform: none; }
}

@media (prefers-reduced-motion: reduce) {
    .login-cuerpo .login-entra { animation: none; }
}

.login-cuerpo .login-otra-cuenta,
.login-cuerpo .login-otra-cuenta .btn-link {
    font-size: .875rem;
}

/* ---------- Selector de sucursales: la tarjeta de producción ---------- */
.card-branch-btn {
    width: 100%;
    padding: 0;
    color: inherit;
    text-align: inherit;
    background-color: transparent;
    border: none;
}

.card-branch-btn .logo-container {
    display: flex;
    justify-content: center;
    padding: .25rem;
}

.card-branch-btn .logo-container img {
    width: 80px;
    height: 80px;
    object-fit: contain;
}

.card-branch-btn .branch-info-container {
    display: flex;
    flex-direction: column;
    flex-wrap: nowrap;
    align-items: flex-end;
    justify-content: center;
}

.card-branch-btn .branch-info-container span {
    text-align: right;
    color: var(--login-azul);
}

/* La de las sucursales es un botón y allá conservaba el relleno y la tinta del navegador; la tarjeta fija es un div y no. */
button.card-branch-btn {
    padding: 1px 6px;
    color: buttontext;
}

/* La empresa no se corta con «…» (nunca truncar): pasa al siguiente renglón. */
.card-branch-btn .branch-info-container small {
    text-align: right;
    color: var(--login-ayuda);
}

.card-branch-btn:focus-visible {
    outline: 2px solid var(--login-azul);
    outline-offset: 4px;
    border-radius: 3px;
}

/* Las tarjetas de una fila miden lo mismo y el contenido va centrado en vertical. */
#content-sucursales .row > [class*="col-"] > .card {
    height: 100%;
}

#content-sucursales .card .card-body {
    display: flex;
    align-items: center;
}

.login-grupo {
    display: flex;
    align-items: center;
    gap: 4px;
    margin: 16px 8px 0;
    font-size: .75rem;
    font-weight: 600;
    letter-spacing: .04em;
    text-transform: uppercase;
    color: var(--login-ayuda);
}

.login-estrella {
    width: .75rem;
    height: .75rem;
    fill: var(--login-azul);
}

.login-vacio {
    padding: 32px 16px;
    text-align: center;
    color: var(--login-ayuda);
}

/* Confirmación: la misma tarjeta, fija (no es botón: sin manita ni sombra de hover). */
.login-tarjeta-fija.card-cta {
    cursor: default;
}

.login-tarjeta-fija.card-cta:hover {
    box-shadow: var(--kapi-card-shadow);
}

.login-confirmar {
    min-height: 350px;
    justify-content: center;
}

/* ---------- Avisos: confirmación en verde («Listo, tu contraseña cambió») ---------- */
.content-form .form-notify.form-ok {
    margin-top: .25rem;
    color: #0f5132;
    background-color: #e8f5ee;
    border: 1px solid #b7dfc8;
}

.login-cuerpo .login-tinta {
    color: var(--login-tinta);
}

/* ---------- «o» y opción secundaria ---------- */
.login-separador {
    display: flex;
    align-items: center;
    gap: 12px;
    margin: 8px 0;
    color: var(--login-ayuda);
}

.login-separador::before,
.login-separador::after {
    content: "";
    flex: 1;
    border-top: 1px solid var(--kapi-border);
}

/* «Entrar con un código por correo» es un enlace con icono, no un botón (decisión de Diego). */
.login-enlace-codigo {
    display: flex;
    justify-content: center;
}

.login-icono {
    width: 1em;
    height: 1em;
    margin-right: .5rem;
    vertical-align: -.125em;
    fill: currentColor;
}

/* ---------- Casillas del código: un número por casilla; se encogen en teléfonos angostos ---------- */
.login-codigo {
    display: flex;
    justify-content: center;
    gap: 8px;
    min-width: 0;
    padding: 0;
    border: 0;
}

.login-codigo input {
    flex: 1 1 0;
    min-width: 0;
    max-width: 44px;
    height: 56px;
    font-size: 1.75rem;
    font-weight: 600;
    text-align: center;
    color: var(--kapi-ink);
    border: 1px solid var(--login-borde);
    border-radius: var(--kapi-radius);
}

.login-codigo input:focus {
    outline: none;
    border-color: var(--login-azul);
    box-shadow: 0 0 0 .25rem var(--login-azul-foco);
}

.login-codigo.login-codigo-error input {
    border-color: var(--kapi-danger);
}

/* «¿No te llegó? Búscalo en Correo no deseado o mándate otro.» en un solo renglón. */
.login-ayuda-renglon {
    line-height: 1.6;
}

.login-ayuda-renglon .btn-link {
    padding: 0;
    font-size: inherit;
}

.login-cuerpo .content-form .btn-link:disabled {
    color: var(--login-ayuda);
    text-decoration: none;
    cursor: default;
}

/* ---------- Requisitos de la contraseña nueva: globo bajo el campo SOLO mientras tiene el foco ---------- */
.login-campo-ayuda {
    position: relative;
}

.login-reglas {
    position: absolute;
    top: calc(100% + 8px);
    right: 0;
    left: 0;
    z-index: 1080;
    display: none;
    margin: 0;
    padding: 12px 16px;
    font-size: .875rem;
    color: var(--login-ayuda);
    list-style: none;
    background: var(--kapi-surface);
    border: 1px solid #c9d1dc;
    border-radius: 8px;
    box-shadow: 0 4px 12px rgba(0, 0, 0, .12);
}

/* La flecha apunta al campo */
.login-reglas::before {
    content: "";
    position: absolute;
    top: -7px;
    left: 24px;
    width: 12px;
    height: 12px;
    background: var(--kapi-surface);
    border-top: 1px solid #c9d1dc;
    border-left: 1px solid #c9d1dc;
    transform: rotate(45deg);
}

.login-reglas.visible {
    display: grid;
    gap: 4px;
}

.login-reglas .login-reglas-titulo {
    margin-bottom: 4px;
    font-weight: 600;
    color: var(--kapi-text-primary);
}

/* El círculo de cada requisito (antes bi-circle / bi-check-circle-fill). */
.login-reglas li[data-regla]::before {
    content: "○";
    display: inline-block;
    width: 1.25em;
}

.login-reglas li.cumple {
    color: #0f5132;
}

.login-reglas li.cumple::before {
    content: "✓";
}

.login-reglas.revisar li[data-regla]:not(.cumple) {
    color: #b02a37;
}

/* ---------- Grosor de la letra con Roboto (6-nov) ----------
   El actual usa la letra del equipo (Segoe UI en Windows); aquí es Roboto (D26). Con el mismo tamaño los textos miden lo mismo,
   pero el 600 de Roboto se ve más grueso que el Semibold de Segoe UI: el título, las etiquetas de los campos y el botón van en 500,
   que a la vista es el grosor de producción. Solo en el inicio de sesión. */
body.login-cuerpo .login-titulo,
body.login-cuerpo .form-floating > label,
body.login-cuerpo .btn-primary {
    font-weight: 500;
}
