/* Galifac — reset y fundamentos */

* {
    box-sizing: border-box;
}

/* El atributo hidden debe ganar siempre, aunque el elemento tenga una clase
   (p.ej. .campo { display: flex }) con la misma especificidad que la regla
   por defecto del navegador [hidden]{display:none} — si no, el orden de
   carga de las hojas de estilo puede dejar el hidden sin efecto. */
[hidden] {
    display: none !important;
}

html {
    scrollbar-gutter: stable;
}

html,
body {
    width: 100%;
    max-width: 100%;
    overflow-x: hidden;
    height: 100%;
}

body {
    margin: 0;
    background: var(--fondo-pagina);
    color: var(--texto-principal);
    font-family: -apple-system, "Segoe UI", "Helvetica Neue", Arial, sans-serif;
    font-size: 15px;
    line-height: 1.55;
    -webkit-font-smoothing: antialiased;
    min-height: 100dvh;
}

h1,
h2,
h3 {
    font-weight: 700;
    text-wrap: balance;
    margin: 0;
    letter-spacing: -0.01em;
}

img,
svg,
video,
canvas {
    max-width: 100%;
    height: auto;
}

a {
    color: inherit;
}

button {
    font-family: inherit;
}

.num {
    font-variant-numeric: tabular-nums;
}

:focus-visible {
    outline: 2px solid var(--primario);
    outline-offset: 2px;
}

@media (prefers-reduced-motion: reduce) {
    * {
        transition: none !important;
        animation: none !important;
    }
}

/* Icono de ayuda progresivo con tooltip */
.ayuda {
    display: inline-grid;
    place-items: center;
    width: 17px;
    height: 17px;
    border-radius: 50%;
    border: 1.3px solid var(--texto-tenue);
    color: var(--texto-tenue);
    font-size: 0.68rem;
    font-weight: 700;
    cursor: help;
    flex-shrink: 0;
    position: relative;
}

.ayuda:hover,
.ayuda:focus-visible {
    border-color: var(--primario);
    color: var(--primario);
}

.ayuda .globo {
    display: none;
    position: fixed;
    background: var(--texto-principal);
    color: var(--fondo-superficie);
    font-size: 0.76rem;
    font-weight: 500;
    line-height: 1.4;
    padding: 8px 11px;
    border-radius: 7px;
    width: max-content;
    max-width: 230px;
    box-shadow: var(--sombra-md);
    z-index: 50;
    text-align: left;
    white-space: normal;
}

.ayuda:hover .globo,
.ayuda:focus-visible .globo {
    display: block;
}

/* Botones */
.boton {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 10px 17px;
    border-radius: 9px;
    border: 1px solid var(--borde);
    background: var(--fondo-superficie);
    color: var(--texto-principal);
    font-size: 0.88rem;
    font-weight: 600;
    cursor: pointer;
    white-space: nowrap;
    transition: background .12s ease, border-color .12s ease;
}

.boton:hover {
    background: var(--fondo-hundido);
}

.boton-primario {
    background: var(--primario);
    border-color: var(--primario);
    color: #fff;
}

.boton-primario:hover {
    background: var(--primario-hover);
    border-color: var(--primario-hover);
}

/* Etiquetas de estado (chips) */
.etiqueta-estado {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 4px 10px;
    border-radius: 999px;
    font-size: 0.76rem;
    font-weight: 700;
}

.etiqueta-estado::before {
    content: "";
    width: 6px;
    height: 6px;
    border-radius: 50%;
}

/* Variante sin el punto de color delante — para usarla como icono de sí/no
   (✓/✗) donde el punto queda redundante y se ve como una manchita. */
.etiqueta-estado.sin-punto::before {
    content: none;
}

/* Variante clicable: mismo aspecto de chip, pero como <button>, sin el
   estilo nativo del navegador. */
.etiqueta-estado.etiqueta-boton {
    border: none;
    cursor: pointer;
    font-family: inherit;
}

.etiqueta-estado.etiqueta-boton:hover {
    filter: brightness(0.95);
}

.etiqueta-estado.exito {
    background: var(--exito-fondo);
    color: var(--exito);
}

.etiqueta-estado.exito::before {
    background: var(--exito);
}

.etiqueta-estado.aviso {
    background: var(--aviso-fondo);
    color: var(--aviso);
}

.etiqueta-estado.aviso::before {
    background: var(--aviso);
}

.etiqueta-estado.peligro {
    background: var(--peligro-fondo);
    color: var(--peligro);
}

.etiqueta-estado.peligro::before {
    background: var(--peligro);
}

.etiqueta-estado.info {
    background: var(--primario-claro);
    color: var(--primario);
}

.etiqueta-estado.info::before {
    background: var(--primario);
}

.etiqueta-estado.neutro {
    background: var(--fondo-hundido);
    color: var(--texto-atenuado);
}

.etiqueta-estado.neutro::before {
    background: var(--texto-atenuado);
}

.envoltorio-contrasena {
    position: relative;
    display: block;
}

.campo .envoltorio-contrasena input {
    width: 100%;
    padding-right: 40px;
}

.boton-ojo-contrasena {
    position: absolute;
    right: 6px;
    top: 50%;
    transform: translateY(-50%);
    background: none;
    border: none;
    padding: 6px;
    margin: 0;
    cursor: pointer;
    color: var(--texto-tenue);
    display: grid;
    place-items: center;
    border-radius: 6px;
}

.boton-ojo-contrasena:hover {
    color: var(--primario);
    background: var(--fondo-hundido);
}

/* Página 403 autónoma (helpers/respuesta_acceso.php): se sirve sin el layout
   normal porque puede dispararse antes de que la vista prepare sus datos. */
.pagina-acceso-denegado {
    padding: 40px 20px;
}

.panel-acceso-denegado {
    max-width: 560px;
    margin: 0 auto;
    padding: 28px 30px;
}

.panel-acceso-denegado h1 {
    font-size: 1.25rem;
    margin: 0 0 12px;
}

.panel-acceso-denegado p {
    margin: 0 0 16px;
    color: var(--texto-atenuado);
}
