/**
 * Estilos del buscador público ISSUNNE.
 *
 * Todos los selectores están prefijados con "issunne-api-" y anidados
 * bajo ".issunne-api-buscador": no hay reglas globales ni selectores de
 * elemento sueltos (input, button, ul, etc.), para no afectar otros
 * formularios del sitio ni chocar con el tema o Elementor.
 *
 * Los colores y tipografías principales están expuestos como variables
 * CSS propias, con valores por defecto razonables, para poder
 * sobrescribirse desde el tema:
 *
 *   --issunne-api-primary
 *   --issunne-api-primary-hover
 *   --issunne-api-border
 *   --issunne-api-text
 *   --issunne-api-muted
 *   --issunne-api-background
 *   --issunne-api-error
 *   --issunne-api-success
 *   --issunne-api-font
 *   --issunne-api-font-accent
 *
 * Cuando Elementor está activo y define sus variables globales
 * (--e-global-color-*, --e-global-typography-*-font-family), esas
 * variables propias las usan como valor PREFERENTE, con el mismo valor
 * fijo de antes como respaldo si Elementor no está activo o esas
 * variables no existen (var() con fallback nunca deja el estilo sin
 * resolver):
 *
 *   --issunne-api-primary       ← --e-global-color-primary
 *   --issunne-api-primary-hover ← --e-global-color-accent
 *   --issunne-api-text          ← --e-global-color-text
 *   --issunne-api-muted         ← --e-global-color-secondary
 *   --issunne-api-font          ← --e-global-typography-text-font-family
 *   --issunne-api-font-accent   ← --e-global-typography-accent-font-family
 *
 * (--issunne-api-border, --background, --error y --success no tienen
 * equivalente global en Elementor, así que conservan su valor fijo.)
 */

.issunne-api-buscador {
	/* Valores por defecto de las variables del plugin. Un tema puede
	   sobrescribirlas apuntando a este mismo selector con mayor
	   especificidad, o definiéndolas más arriba en el árbol (heredan).
	   Los "var(--e-global-..., <valor de respaldo>)" toman el color/
	   tipografía global de Elementor cuando existe, y si no, usan
	   exactamente el mismo valor fijo que antes. */
	--issunne-api-primary: var( --e-global-color-primary, #2271b1 );
	--issunne-api-primary-hover: var( --e-global-color-accent, #135e96 );
	--issunne-api-border: #dcdcde;
	--issunne-api-text: var( --e-global-color-text, #1d2327 );
	--issunne-api-muted: var( --e-global-color-secondary, #646970 );
	--issunne-api-background: #ffffff;
	--issunne-api-error: #b32d2e;
	--issunne-api-success: #00825c;
	--issunne-api-font: var( --e-global-typography-text-font-family, inherit );
	--issunne-api-font-accent: var( --e-global-typography-accent-font-family, inherit );

	box-sizing: border-box;
	display: block;
	width: 100%;
	max-width: 820px;
	margin: 0 auto 2rem;
	padding: 1.75rem;
	background: var( --issunne-api-background );
	border: 1px solid var( --issunne-api-border );
	border-radius: 0;
	box-shadow: 0 1px 2px rgba( 0, 0, 0, 0.04 ), 0 4px 12px rgba( 0, 0, 0, 0.05 );
	color: var( --issunne-api-text );
	font-family: var( --issunne-api-font );
	font-size: 1rem;
	line-height: 1.5;
}

.issunne-api-buscador,
.issunne-api-buscador *,
.issunne-api-buscador *::before,
.issunne-api-buscador *::after {
	box-sizing: border-box;
}

/* --- Texto introductorio ------------------------------------------- */

.issunne-api-buscador__intro {
	margin: 0 0 1.25rem;
	color: var( --issunne-api-muted );
	font-size: 0.95rem;
	line-height: 1.5;
}

/* --- Formulario ------------------------------------------------------ */

.issunne-api-buscador__form {
	display: flex;
	flex-wrap: wrap;
	gap: 0.6rem;
	align-items: stretch;
}

.issunne-api-buscador__label {
	position: absolute;
	width: 1px;
	height: 1px;
	overflow: hidden;
	clip: rect(0, 0, 0, 0);
	white-space: nowrap;
}

.issunne-api-buscador__input {
	flex: 1 1 240px;
	min-width: 0;
	height: 2.75rem;
	padding: 0.5rem 0.9rem;
	background: var( --issunne-api-background );
	color: var( --issunne-api-text );
	border: 1px solid var( --issunne-api-border );
	border-radius: 0;
	font-size: 1rem;
	line-height: 1.4;
	transition: border-color 0.15s ease, box-shadow 0.15s ease;
}

.issunne-api-buscador__input::placeholder {
	color: var( --issunne-api-muted );
	opacity: 1;
}

.issunne-api-buscador__input:hover {
	border-color: var( --issunne-api-primary );
}

.issunne-api-buscador__input:focus-visible {
	border-color: var( --issunne-api-primary );
	outline: 2px solid var( --issunne-api-primary );
	outline-offset: 1px;
	/* Respaldo fijo para navegadores sin color-mix(); si lo soportan, la
	   segunda declaración (más abajo) gana y el anillo de foco sigue al
	   color primario vigente (fallback o global de Elementor). */
	box-shadow: 0 0 0 3px rgba( 34, 113, 177, 0.15 );
	box-shadow: 0 0 0 3px color-mix( in srgb, var( --issunne-api-primary ) 15%, transparent );
}

.issunne-api-buscador__button {
	flex: 0 0 auto;
	height: 2.75rem;
	padding: 0 1.5rem;
	background: var( --issunne-api-primary );
	color: #fff;
	border: 1px solid var( --issunne-api-primary );
	border-radius: 0;
	font-family: var( --issunne-api-font-accent );
	font-size: 1rem;
	font-weight: 600;
	line-height: 1;
	cursor: pointer;
	transition: background-color 0.15s ease, border-color 0.15s ease;
}

.issunne-api-buscador__button:hover:not(:disabled) {
	background: var( --issunne-api-primary-hover );
	border-color: var( --issunne-api-primary-hover );
}

.issunne-api-buscador__button:focus-visible {
	outline: 2px solid var( --issunne-api-primary );
	outline-offset: 2px;
}

.issunne-api-buscador__button:disabled {
	background: var( --issunne-api-muted );
	border-color: var( --issunne-api-muted );
	color: rgba( 255, 255, 255, 0.85 );
	cursor: not-allowed;
	opacity: 0.75;
}

/* En pantallas angostas (o columnas angostas de Elementor), el input y
   el botón pasan a apilarse, con el botón a ancho completo. */
@media ( max-width: 600px ) {
	.issunne-api-buscador {
		padding: 1.25rem;
	}

	.issunne-api-buscador__form {
		flex-direction: column;
	}

	/* En columna, el eje principal del flex pasa a ser vertical: el
	   "flex-basis: 240px" de .issunne-api-buscador__input (pensado como
	   ancho mínimo en la fila de escritorio) pasaría a fijar la ALTURA
	   del input y anularía su "height", inflándolo a ~240px. Se resetea
	   a "auto" para que el eje principal en columna vuelva a tomar el
	   height declarado. */
	.issunne-api-buscador__input {
		flex-basis: auto;
	}

	.issunne-api-buscador__button {
		width: 100%;
	}
}

/* --- Estado: cargando -------------------------------------------------- */

.issunne-api-buscador__loading {
	margin-top: 0.9rem;
	color: var( --issunne-api-muted );
	font-size: 0.9rem;
}

/* Solo aplica cuando NO tiene el atributo "hidden": así el JS sigue
   controlando la visibilidad exactamente igual que antes (display:none
   nativo del atributo hidden no se pisa). */
.issunne-api-buscador__loading:not([hidden]) {
	display: flex;
	align-items: center;
	gap: 0.6rem;
}

.issunne-api-buscador__spinner {
	flex: 0 0 auto;
	width: 1rem;
	height: 1rem;
	border: 2px solid var( --issunne-api-border );
	border-top-color: var( --issunne-api-primary );
	border-radius: 50%;
	animation: issunne-api-buscador-spin 0.7s linear infinite;
}

@keyframes issunne-api-buscador-spin {
	to {
		transform: rotate( 360deg );
	}
}

@media ( prefers-reduced-motion: reduce ) {
	.issunne-api-buscador__spinner {
		animation-duration: 1.6s;
	}
}

.issunne-api-buscador.is-loading .issunne-api-buscador__results {
	opacity: 0.6;
	transition: opacity 0.15s ease;
}

/* --- Mensajes: neutro / sin resultados / error ------------------------- */

.issunne-api-buscador__message {
	margin-top: 0.9rem;
}

.issunne-api-buscador__message:empty {
	margin-top: 0;
}

.issunne-api-buscador__message--empty,
.issunne-api-buscador__message--error {
	display: flex;
	align-items: flex-start;
	gap: 0.5rem;
	padding: 0.75rem 1rem;
	border: 1px solid;
	border-radius: 0;
	font-size: 0.9rem;
	line-height: 1.5;
}

.issunne-api-buscador__message--empty::before,
.issunne-api-buscador__message--error::before {
	flex: 0 0 auto;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 1.25rem;
	height: 1.25rem;
	border-radius: 0;
	font-size: 0.75rem;
	line-height: 1;
	font-weight: 700;
}

/* Sin resultados: neutro, no debe parecer una alarma. */
.issunne-api-buscador__message--empty {
	background: #f6f7f7;
	border-color: var( --issunne-api-border );
	color: var( --issunne-api-muted );
}

.issunne-api-buscador__message--empty::before {
	content: "i";
	background: var( --issunne-api-border );
	color: var( --issunne-api-text );
}

/* Error: además del color, usa borde e ícono propios (no depende solo
   del color para distinguirse del resto de los mensajes). */
.issunne-api-buscador__message--error {
	background: #fcf0f1;
	border-color: var( --issunne-api-error );
	color: var( --issunne-api-error );
}

.issunne-api-buscador__message--error::before {
	content: "!";
	background: var( --issunne-api-error );
	color: #fff;
}

/* --- Conexión inactiva / error de configuración del shortcode --------- */

.issunne-api-buscador--inactive,
.issunne-api-buscador--error {
	display: flex;
	align-items: flex-start;
	gap: 0.6rem;
	max-width: 820px;
	margin: 0 auto 2rem;
	padding: 1rem 1.25rem;
	border-radius: 0;
	font-size: 0.95rem;
	line-height: 1.5;
}

.issunne-api-buscador--inactive::before,
.issunne-api-buscador--error::before {
	flex: 0 0 auto;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 1.5rem;
	height: 1.5rem;
	border-radius: 0;
	font-size: 0.85rem;
	font-weight: 700;
	line-height: 1;
}

/* Inactiva: informativo, con borde punteado para diferenciarse a simple
   vista de un error técnico (no solo por el color). */
.issunne-api-buscador--inactive {
	background: #f6f7f7;
	border: 1px dashed var( --issunne-api-border );
	color: var( --issunne-api-muted );
}

.issunne-api-buscador--inactive::before {
	content: "i";
	background: var( --issunne-api-border );
	color: var( --issunne-api-text );
}

.issunne-api-buscador--error {
	background: #fcf0f1;
	border: 1px solid var( --issunne-api-error );
	color: var( --issunne-api-error );
}

.issunne-api-buscador--error::before {
	content: "!";
	background: var( --issunne-api-error );
	color: #fff;
}

@media ( max-width: 600px ) {
	.issunne-api-buscador--inactive,
	.issunne-api-buscador--error {
		padding: 0.85rem 1rem;
	}
}

/* --- Barra de resultados / contador -------------------------------------- */

.issunne-api-buscador__results-bar {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: 0.5rem;
	margin-top: 0.75rem;
}

.issunne-api-buscador__count {
	margin: 0;
	color: var( --issunne-api-muted );
	font-size: 0.85rem;
}

.issunne-api-buscador__count:empty {
	display: none;
}

@media ( max-width: 600px ) {
	.issunne-api-buscador__results-bar {
		flex-direction: column;
		align-items: flex-start;
	}
}

/* --- Resultados --------------------------------------------------------- */

.issunne-api-buscador__results {
	list-style: none;
	margin: 1.25rem 0 0;
	padding: 0;
}

.issunne-api-buscador__results:empty {
	margin-top: 0;
}

.issunne-api-buscador__result {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: 0.3rem;
	padding: 1rem 0.25rem;
	border-bottom: 1px solid var( --issunne-api-border );
	transition: background-color 0.15s ease;
}

.issunne-api-buscador__result:first-child {
	padding-top: 0.25rem;
}

.issunne-api-buscador__result:last-child {
	border-bottom: none;
}

.issunne-api-buscador__result:hover {
	background: #f6f7f7;
}

/* El literal es siempre la información principal: funciona como título
   del resultado (mayor tamaño y peso que el código), ocupa todo el
   ancho disponible y puede partirse en varias líneas sin desbordar. */
.issunne-api-buscador__result-literal {
	width: 100%;
	color: var( --issunne-api-text );
	font-family: var( --issunne-api-font-accent );
	font-size: 1.05rem;
	font-weight: 600;
	line-height: 1.4;
	overflow-wrap: anywhere;
	word-break: break-word;
}

/* El código es información secundaria y complementaria: texto simple
   (nunca un badge/pill), menor tamaño y menor peso visual que el
   literal, y nunca compite con él. */
.issunne-api-buscador__result-codigo {
	width: 100%;
	color: var( --issunne-api-muted );
	font-family: var( --issunne-api-font );
	font-size: 0.8rem;
	font-weight: 400;
	line-height: 1.4;
	overflow-wrap: anywhere;
	word-break: break-word;
}

/* --- Paginación ----------------------------------------------------------- */

.issunne-api-buscador__pagination {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: center;
	gap: 0.35rem;
	margin-top: 1.5rem;
}

.issunne-api-buscador__page-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 2.25rem;
	height: 2.25rem;
	padding: 0 0.6rem;
	background: var( --issunne-api-background );
	color: var( --issunne-api-text );
	border: 1px solid var( --issunne-api-border );
	border-radius: 0;
	font-family: var( --issunne-api-font-accent );
	font-size: 0.85rem;
	font-weight: 600;
	line-height: 1;
	cursor: pointer;
	transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease;
}

.issunne-api-buscador__page-btn:hover:not(:disabled):not([aria-current="page"]) {
	border-color: var( --issunne-api-primary );
	color: var( --issunne-api-primary );
}

.issunne-api-buscador__page-btn:focus-visible {
	outline: 2px solid var( --issunne-api-primary );
	outline-offset: 2px;
}

/* Página activa: además del color, usa fondo sólido + peso de fuente y
   aria-current="page", así no depende solo del color para distinguirse. */
.issunne-api-buscador__page-btn[aria-current="page"] {
	background: var( --issunne-api-primary );
	border-color: var( --issunne-api-primary );
	color: #fff;
	font-weight: 700;
	cursor: default;
}

.issunne-api-buscador__page-btn:disabled {
	color: var( --issunne-api-muted );
	border-color: var( --issunne-api-border );
	background: var( --issunne-api-background );
	cursor: not-allowed;
	opacity: 0.6;
}

.issunne-api-buscador__page-ellipsis {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 1.5rem;
	height: 2.25rem;
	color: var( --issunne-api-muted );
	font-size: 0.85rem;
}

@media ( max-width: 480px ) {
	.issunne-api-buscador {
		padding: 1rem;
	}

	.issunne-api-buscador__result-literal {
		font-size: 1rem;
	}

	.issunne-api-buscador__result-codigo {
		font-size: 0.75rem;
	}

	.issunne-api-buscador__pagination {
		gap: 0.25rem;
	}

	.issunne-api-buscador__page-btn {
		min-width: 2rem;
		height: 2rem;
		padding: 0 0.4rem;
		font-size: 0.8rem;
	}
}
