/* Componente boton (shell; v2: #53). Solo tokens de style.css.
 * primario: el único CTA de la página. secundario: el resto de acciones.
 * fantasma: acción discreta, sin borde. enlace: «de más información», subrayado.
 * Estados: reposo, al pasar (se ilumina y sube 1px), activo, foco (anillo
 * común), desactivado y cargando. Con movimiento reducido no sube ni gira. */

.pf-boton {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--pf-space-2xs);
    min-height: 2.75rem;
    padding: var(--pf-space-xs) var(--pf-space-md);
    font-family: var(--pf-font-sans);
    font-size: var(--pf-text-base);
    font-weight: var(--pf-weight-bold);
    line-height: var(--pf-leading-snug);
    text-align: center;
    text-decoration: none;
    border: 1px solid transparent;
    border-radius: var(--pf-radius-control);
    cursor: pointer;
    transition: background-color var(--pf-transition), border-color var(--pf-transition), color var(--pf-transition), box-shadow var(--pf-transition), transform var(--pf-transition);
}

.pf-boton:focus-visible {
    outline: 2px solid var(--pf-color-focus);
    outline-offset: 2px;
    border-radius: var(--pf-radius-control);
}

.pf-boton__icono {
    flex: none;
    width: 1.25em;
    height: 1.25em;
    transition: transform var(--pf-transition);
}

/* Primario: relleno verde vivo con rótulo petróleo (DEC-019). */
.pf-boton--primario,
.pf-boton--primario:visited {
    background-color: var(--pf-color-accent);
    border-color: var(--pf-color-accent);
    color: var(--pf-color-on-accent);
    box-shadow: var(--pf-shadow-sm);
}

.pf-boton--primario:hover {
    background-color: var(--pf-color-accent-hover);
    border-color: var(--pf-color-accent-hover);
    color: var(--pf-color-on-accent);
    box-shadow: var(--pf-shadow-md);
}

/* Secundario: contorno verde. */
.pf-boton--secundario,
.pf-boton--secundario:visited {
    background-color: transparent;
    border-color: var(--pf-color-brand-strong);
    color: var(--pf-color-heading);
}

.pf-boton--secundario:hover {
    background-color: var(--pf-color-brand-soft);
    border-color: var(--pf-color-brand-strong);
    color: var(--pf-color-brand-strong);
}

/* Fantasma: sin borde ni relleno hasta pasar por encima. */
.pf-boton--fantasma,
.pf-boton--fantasma:visited {
    background-color: transparent;
    color: var(--pf-color-heading);
}

.pf-boton--fantasma:hover {
    background-color: var(--pf-color-brand-soft);
    color: var(--pf-color-brand-strong);
}

.pf-boton--enlace,
.pf-boton--enlace:visited {
    min-height: 0;
    padding: 0;
    background: none;
    border: 0;
    color: var(--pf-color-link);
    text-decoration: underline;
    text-decoration-thickness: 1px;
    text-underline-offset: var(--pf-underline-offset);
}

.pf-boton--enlace:hover {
    color: var(--pf-color-link-hover);
    text-decoration-thickness: 2px;
}

.pf-boton--sm {
    min-height: 2.25rem;
    padding: var(--pf-space-2xs) var(--pf-space-sm);
    font-size: var(--pf-text-sm);
}

/* Pantalla táctil: también el pequeño mide 44px de alto. */
@media (pointer: coarse) {
    .pf-boton--sm {
        min-height: 2.75rem;
    }
}

.pf-boton:disabled,
.pf-boton[aria-disabled="true"] {
    opacity: 0.55;
    cursor: not-allowed;
    pointer-events: none;
    box-shadow: none;
}

/* Cargando: un anillo que gira delante del texto, como mucho 5 s (WCAG
 * 2.2.2); después se queda quieto. Lo mismo en el botón de enviar de un
 * formulario con aria-busy="true" (los scripts de los formularios lo ponen). */
.pf-boton.pf-boton--cargando,
.pf-formulario[aria-busy="true"] .pf-boton[type="submit"] {
    opacity: 0.85;
    cursor: progress;
}

.pf-boton--cargando::before,
.pf-formulario[aria-busy="true"] .pf-boton[type="submit"]::before {
    content: "";
    flex: none;
    width: 1em;
    height: 1em;
    border: 2px solid currentColor;
    border-right-color: transparent;
    border-radius: var(--pf-radius-round);
}

.pf-boton--cargando .pf-boton__icono,
.pf-formulario[aria-busy="true"] .pf-boton[type="submit"] .pf-boton__icono {
    display: none;
}

/* Microinteracciones con movimiento: solo si nadie pidió reducirlo. */
@media (prefers-reduced-motion: no-preference) {
    .pf-boton--primario:hover,
    .pf-boton--secundario:hover {
        transform: translateY(-1px);
    }

    .pf-boton:active {
        transform: translateY(0);
    }

    .pf-boton:hover .pf-boton__icono:last-child {
        transform: translateX(2px);
    }

    .pf-boton--cargando::before,
    .pf-formulario[aria-busy="true"] .pf-boton[type="submit"]::before {
        animation: pf-boton-gira 0.8s linear 6;
    }
}

@keyframes pf-boton-gira {
    to {
        transform: rotate(360deg);
    }
}
