/*
 * Estilo base para paginas NUCLEO de Joomla ajenas a Fluques (perfil,
 * editar perfil, login/registro fuera de un modal, buscador, articulos
 * sueltos, paginas de error...) - cualquier vista que no venga armada
 * por el constructor de bloques. Solo se carga cuando NO es una pagina
 * de Fluques (ver index.php) - nunca convive con el lienzo del
 * constructor ni con el CSS propio de los modulos mod_flq_*. Usa las
 * mismas variables --flq-* que ya define el diseno del proyecto
 * (helpers/design.php) para que combine con el resto del sitio.
 *
 * Pedido explicito del usuario, con captura real de referencia (la
 * pantalla de login sin ningun estilo, "imaginate que un cliente
 * entra aqui... deberia de ser algo de alto impacto, acorde a Fluxus
 * Digital"): antes de esto, esta hoja daba un estilo minimo tipo
 * formulario suelto (fondo blanco, sin logo real, colores genericos
 * #1a1a2e/#4c7bf3 - ni siquiera los del proyecto real, ver el bug
 * real corregido en helpers/design.php: la pagina "home" real de
 * Joomla apuntaba a un proyecto viejo/abandonado). Ahora es una
 * pantalla oscura de pantalla completa, estilo "hero" (mismo lenguaje
 * visual que el sitio real: fondo casi negro, logo grande, tarjeta de
 * vidrio esmerilado) en vez de una tarjeta blanca chica sola en la
 * esquina - SIGUE siendo generica a proposito (nunca asume una clase
 * particular como ".com-users-login", que solo existe en la vista de
 * login) para servir por igual a cualquier vista nucleo (perfil,
 * registro, buscador, 404...).
 */

/* Sin ":has()" a proposito, aunque hoy los navegadores reales ya lo
   soportarian - esta hoja SOLO se carga cuando el body es justo esto
   (ver el "if (!$showTopbar)" en index.php), asi que no hace falta
   condicionar el selector para estar seguros del contexto. */
body {
    min-height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--flq-bg-dark, #0D0D0D);
    /* Pedido explicito del usuario: "los azules cambialos a solo azul
       que hemos venido majenado" - el azul de acento del proyecto
       (--flq-color-primary, hoy #4686BD, el mismo que ya se usa en
       todo el constructor) en vez de un azul distinto escrito a mano
       aca (#3B82F6, el que traia el sitio de referencia original). Con
       color-mix() en vez de un rgba() fijo para no tener que
       actualizar 2 lugares si el color vuelve a cambiar. */
    background-image:
        radial-gradient(color-mix(in srgb, var(--flq-color-primary, #4686BD) 12%, transparent) 1.5px, transparent 1.5px),
        radial-gradient(ellipse 900px 600px at 50% 0%, color-mix(in srgb, var(--flq-color-primary, #4686BD) 16%, transparent), transparent 70%);
    background-size: 28px 28px, 100% 100%;
    padding: 3rem 1rem;
}

/* BUG REAL reportado por el usuario (captura real): al fallar un login
   ("El usuario y contraseña no coinciden"), la tarjeta se corria del
   centro. Causa: "#system-message-container" (nucleo de Joomla,
   "<jdoc:include type="message" />") es HERMANO de ".flq-core-page"
   dentro de "body" - mientras esta vacio no se nota (no ocupa espacio
   real), pero en cuanto trae un mensaje real se vuelve un 2do elemento
   flex visible, y "justify-content:center" centra el PAR completo (aviso
   + tarjeta) en vez de solo la tarjeta, empujandola hacia la derecha.
   Se saca del flujo flex (position:fixed, con su propio centrado
   horizontal) para que la tarjeta se quede SIEMPRE en el centro real de
   la pantalla, haya o no un aviso. */
#system-message-container {
    position: fixed;
    top: 1.5rem;
    left: 50%;
    transform: translateX(-50%);
    z-index: 200;
    width: 100%;
    max-width: 460px;
    padding: 0 1rem;
}

.flq-core-page {
    max-width: 460px;
    width: 100%;
    margin: 0 auto;
    padding: 0;
    color: var(--flq-text-light, #fff);
}

.flq-core-page:empty {
    padding: 0;
}

.flq-core-page__brand {
    display: flex;
    justify-content: center;
    margin-bottom: 2.25rem;
}

.flq-core-page__brand img {
    max-height: 52px;
    width: auto;
    /* El logo real es tinta oscura (pensado para fondo claro) - esta
       pantalla es oscura, asi que se fuerza a blanco solido sin
       depender de tener una 2da version del archivo. Funciona porque
       el logo real es de un solo color solido, no un degradado. */
    filter: brightness(0) invert(1);
}

.flq-core-page__welcome {
    text-align: center;
    margin: -1.25rem 0 2.25rem;
    font-family: var(--flq-font-heading, sans-serif);
    font-weight: 700;
    font-size: 1.4rem;
    color: var(--flq-text-light, #fff);
}

.flq-core-page__instructions {
    text-align: center;
    margin: -1.75rem 0 1.75rem;
    font-family: var(--flq-font-body, sans-serif);
    font-size: .92rem;
    color: var(--flq-text-light, #fff);
    opacity: .7;
}

/* La "tarjeta" - vidrio esmerilado sobre el fondo oscuro, mismo
   lenguaje visual ya probado en el propio constructor
   (--flqb-bg-elevated) pero con las variables --flq-* del sitio
   PUBLICO, no las del constructor. Se aplica a CUALQUIER elemento de
   primer nivel dentro de ".flq-core-page" que no sea el logo/titulo -
   generico a proposito, sin depender del nombre de vista. */
.flq-core-page > form,
.flq-core-page > .com-users-login,
.flq-core-page > table,
.flq-core-page > .items-row,
.flq-core-page > dl {
    background: rgba(255, 255, 255, .04);
    border: 1px solid rgba(255, 255, 255, .1);
    border-radius: calc(var(--flq-radius, 14px) + 6px);
    padding: 2rem 1.75rem;
    box-shadow: 0 24px 60px -20px rgba(0, 0, 0, .6);
    backdrop-filter: blur(6px);
}

/* La vista de login envuelve TODO (form + links de abajo) en
   ".com-users-login" - ese contenedor ya es la tarjeta de arriba, asi
   que el <form> de adentro no necesita una 2da tarjeta propia. */
.com-users-login > form {
    background: none;
    border: none;
    padding: 0;
    box-shadow: none;
    backdrop-filter: none;
}

.flq-core-page .page-header {
    margin-bottom: 1.75rem;
    text-align: center;
}

.flq-core-page .page-header h1 {
    font-family: var(--flq-font-heading, sans-serif);
    font-weight: 900;
    text-transform: uppercase;
    letter-spacing: -.01em;
    font-size: 1.5rem;
    margin: 0;
}

.flq-core-page fieldset {
    border: none;
    border-radius: 0;
    padding: 0;
    margin: 0 0 1.25rem;
}

.flq-core-page legend {
    font-family: var(--flq-font-heading, sans-serif);
    font-weight: 700;
    padding: 0 0 1rem;
    font-size: 1.1rem;
}

.flq-core-page dl {
    margin: 0;
}

.flq-core-page dl.dl-horizontal dt,
.flq-core-page dl.dl-horizontal dd {
    padding: .4rem 0;
    margin: 0;
}

.flq-core-page dl.dl-horizontal dt {
    font-weight: 600;
    opacity: .7;
}

.flq-core-page dl.dl-horizontal dd {
    margin-bottom: .5rem;
}

@media (min-width: 576px) {
    .flq-core-page dl.dl-horizontal {
        display: grid;
        grid-template-columns: 220px 1fr;
    }

    .flq-core-page dl.dl-horizontal dt {
        grid-column: 1;
    }

    .flq-core-page dl.dl-horizontal dd {
        grid-column: 2;
    }
}

/* Boton principal - mismo trato "pildora" + levantarse al pasar el
   mouse que ya usa el CTA del sitio real (hero, etc.), no el
   cuadradito generico de antes. */
.flq-core-page .btn,
.flq-core-page button[type="submit"],
.flq-core-page input[type="submit"] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: .4rem;
    width: 100%;
    border: none;
    border-radius: 999px;
    padding: .8rem 1.4rem;
    font-family: var(--flq-font-heading, sans-serif);
    font-size: .85rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .04em;
    text-decoration: none;
    cursor: pointer;
    background: var(--flq-color-primary, #4686BD);
    /* Pedido explicito del usuario: identidad "negro y blanco" - con el
       primary del proyecto ahora blanco (boton solido sobre fondo
       oscuro), el texto ya no puede seguir fijo en --flq-text-light
       (blanco sobre blanco = invisible). Se usa --flq-text-dark en su
       lugar - la pareja correcta para CUALQUIER primary claro, no solo
       este caso puntual (texto oscuro sobre superficie clara). */
    color: var(--flq-text-dark, #000);
    transition: transform .2s ease, box-shadow .2s ease, opacity .2s ease;
}

.flq-core-page .btn:hover,
.flq-core-page button[type="submit"]:hover,
.flq-core-page input[type="submit"]:hover {
    opacity: 1;
    transform: translateY(-2px);
    box-shadow: 0 10px 24px -8px color-mix(in srgb, var(--flq-color-primary, #4686BD) 60%, transparent);
}

.flq-core-page .btn-secondary,
.flq-core-page .btn-outline-secondary {
    background: transparent;
    color: var(--flq-text-light, #fff);
    border: 1.5px solid rgba(255, 255, 255, .35);
}

.flq-core-page .btn-secondary:hover,
.flq-core-page .btn-outline-secondary:hover {
    box-shadow: none;
    background: rgba(255, 255, 255, .08);
}

.flq-core-page .btn-toolbar {
    list-style: none;
    padding: 0;
    margin: 0 0 1rem;
}

.flq-core-page .float-end {
    float: right;
}

.flq-core-page input:not([type="submit"]):not([type="checkbox"]):not([type="radio"]):not([type="hidden"]),
.flq-core-page select,
.flq-core-page textarea {
    display: block;
    width: 100%;
    padding: .75rem 1rem;
    border: 1px solid rgba(255, 255, 255, .16);
    border-radius: 999px;
    background: rgba(255, 255, 255, .06);
    color: var(--flq-text-light, #fff);
    font-size: .95rem;
    margin-bottom: .9rem;
}

.flq-core-page textarea {
    border-radius: var(--flq-radius, 14px);
}

.flq-core-page input::placeholder,
.flq-core-page textarea::placeholder {
    color: rgba(255, 255, 255, .4);
}

.flq-core-page input:focus,
.flq-core-page select:focus,
.flq-core-page textarea:focus {
    outline: none;
    border-color: var(--flq-color-primary, #4686BD);
    background: rgba(255, 255, 255, .09);
}

/* El boton "Mostrar/ocultar contraseña" vive DENTRO del campo (ver
   ".password-group" del nucleo de Joomla) - no debe verse como un
   boton "pildora" ancho de mas, sino como un icono chico pegado al
   input. */
.flq-core-page .password-group {
    position: relative;
}

.flq-core-page .password-group input {
    padding-right: 3.25rem;
    margin-bottom: 0;
}

/* BUG REAL reportado por el usuario (captura real): el ojo de "ver
   contraseña" se veia mal alineado SOLO en el campo "Contraseña" (no en
   "Confirmar contraseña"). Causa: el nucleo de Joomla (passwordstrength.js)
   inserta el medidor de fuerza (".input-group" + <meter> + su etiqueta)
   como HERMANOS dentro de ".password-group" - eso agranda el alto de
   ".password-group", y el boton (posicionado "top:50%" respecto a el)
   terminaba centrado en TODO ese alto, no solo en el del input, cayendo
   mas abajo del centro real del campo. El input+boton ya viven juntos
   dentro de ".input-group" (ver el HTML real de esta vista) - alcanza
   con centrar el boton respecto a ESE contenedor en vez de
   ".password-group", asi el alto que agregue el medidor (solo en el
   primer campo) ya no lo afecta. */
.flq-core-page .password-group .input-group {
    position: relative;
}

/* BUG REAL encontrado probando esto de verdad: el texto "Mostrar
   contraseña" del nucleo de Joomla viene envuelto en
   ".visually-hidden" (deberia ser invisible, solo para lector de
   pantalla) - pero esta plantilla no carga Bootstrap a proposito
   (ver el comentario de arriba de todo el archivo), asi que esa
   clase nunca estuvo definida en ningun lado y el texto quedaba
   VISIBLE (heredaba encima el trato "pildora ancha en mayusculas"
   del boton generico de arriba). Se define aca, patron estandar de
   "clip" (nunca "display:none" - eso rompe lectores de pantalla). El
   icono real (".icon-eye", fuente de iconos del admin) tampoco esta
   cargado en el sitio, asi que el boton queda sin icono visible -
   aceptable, sigue siendo clickeable con su area completa. */
.flq-core-page .visually-hidden {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

.flq-core-page .input-password-toggle {
    position: absolute;
    top: 50%;
    right: .35rem;
    transform: translateY(-50%);
    width: 2.25rem;
    height: 2.25rem;
    padding: 0 !important;
    border-radius: 50% !important;
    background: transparent !important;
    border: none !important;
    color: rgba(255, 255, 255, .55);
}

/* Icono de ojo propio, chico (el ".icon-eye" del nucleo de Joomla
   depende de una fuente que este sitio no carga) - SVG en linea como
   fondo, mismo criterio que ya usa el resto del proyecto para iconos
   sueltos sin depender de una libreria de iconos completa. */
.flq-core-page .input-password-toggle::before {
    content: '';
    display: block;
    width: 1.1rem;
    height: 1.1rem;
    margin: 0 auto;
    background-color: currentColor;
    -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8Z'/%3E%3Ccircle cx='12' cy='12' r='3'/%3E%3C/svg%3E") center / contain no-repeat;
    mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8Z'/%3E%3Ccircle cx='12' cy='12' r='3'/%3E%3C/svg%3E") center / contain no-repeat;
}

.flq-core-page .input-password-toggle:hover {
    background: rgba(255, 255, 255, .08) !important;
    box-shadow: none;
    transform: translateY(-50%);
}

.flq-core-page .password-group + * {
    margin-top: .9rem;
}

.flq-core-page label {
    display: block;
    font-weight: 600;
    font-size: .85rem;
    color: rgba(255, 255, 255, .75);
    margin-bottom: .4rem;
}

/* BUG REAL reportado por el usuario (captura real): el mensaje "Por
   favor, complete este campo" (nucleo de Joomla, validate.js) se inyecta
   como un <span> DENTRO del propio <label> - sin nada que lo separe,
   quedaba pegado en la misma linea que el texto de la etiqueta ("Nombre
   *Por favor..."). Se fuerza a su propia linea, mas chico y en un tono
   de alerta, para que se lea como un mensaje de error y no como parte
   del nombre del campo. */
.flq-core-page label .form-control-feedback {
    display: block;
    margin-top: .3rem;
    font-size: .78rem;
    font-weight: 500;
    color: #ff8a8a;
}

.flq-core-page label.invalid {
    color: rgba(255, 255, 255, .75);
}

/* "Requisitos minimos - Caracteres: 12" (nucleo de Joomla, arriba del
   campo Contraseña) - mismo problema de fondo: sin ningun estilo propio,
   quedaba pegado justo debajo de la etiqueta sin separacion. */
.flq-core-page .small.text-muted {
    display: block;
    margin: -.15rem 0 .5rem;
    font-size: .78rem;
    color: rgba(255, 255, 255, .5);
}

/* Medidor de fuerza de contraseña (nucleo de Joomla, passwordstrength.js)
   - un <meter> nativo sin ningun estilo (se veia como una barra suelta,
   gris, sin relacion visual con el resto del formulario). Se le da el
   mismo lenguaje "pildora" que el resto de los campos; el color de
   relleno usa los estados nativos de <meter> (bajo/optimo) via los
   pseudo-elementos de cada motor. */
.flq-core-page meter {
    display: block;
    width: 100%;
    height: .4rem;
    margin: -.5rem 0 .6rem;
    appearance: none;
    border: none;
    border-radius: 999px;
    background: rgba(255, 255, 255, .12);
}

.flq-core-page meter::-webkit-meter-bar {
    background: rgba(255, 255, 255, .12);
    border: none;
    border-radius: 999px;
}

.flq-core-page meter::-webkit-meter-optimum-value {
    background: var(--flq-color-primary, #4686BD);
    border-radius: 999px;
}

.flq-core-page meter::-webkit-meter-suboptimum-value,
.flq-core-page meter::-webkit-meter-even-less-good-value {
    background: rgba(255, 255, 255, .35);
    border-radius: 999px;
}

.flq-core-page meter::-moz-meter-bar {
    background: var(--flq-color-primary, #4686BD);
    border-radius: 999px;
}

/* Etiqueta en vivo del medidor ("Contraseña aceptada"/"no cumple con los
   requisitos") - la crea el mismo script, tambien sin estilo propio.
   Vive como hermana de ".input-group", justo despues, dentro de
   ".password-group" (ver passwordstrength.js: "insertAdjacentElement
   ('afterEnd', ...)" sobre "field.parentNode"). */
.flq-core-page .password-group > [id^="password-"] {
    display: block;
    margin: -.35rem 0 .6rem;
    font-size: .78rem;
    text-align: center;
    color: rgba(255, 255, 255, .5);
}

.flq-core-page .form-check {
    display: flex;
    align-items: center;
    gap: .5rem;
    margin-bottom: 1.25rem;
}

.flq-core-page .form-check-label {
    margin: 0;
    font-weight: 400;
    color: rgba(255, 255, 255, .75);
}

/* Enlaces sueltos de abajo ("Olvido su contraseña", "Registrarse"...) -
   ya NO viven adentro de la tarjeta de vidrio (ver ".com-users-login"
   arriba, que es la tarjeta entera) sino debajo, como texto discreto
   sobre el fondo oscuro. */
.flq-core-page .list-group {
    list-style: none;
    padding: 0;
    margin: 1.5rem 0 0;
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: .3rem .9rem;
}

.flq-core-page .list-group-item {
    background: none;
    border: none;
    padding: 0;
    font-size: .85rem;
    color: rgba(255, 255, 255, .65);
    text-decoration: underline;
    text-underline-offset: 2px;
}

.flq-core-page .list-group-item:hover {
    color: #fff;
}

.flq-core-page table {
    width: 100%;
    border-collapse: collapse;
    margin-bottom: 1.5rem;
}

.flq-core-page table th,
.flq-core-page table td {
    padding: .5rem .6rem;
    border-bottom: 1px solid rgba(255, 255, 255, .1);
    text-align: left;
}
