/**
 * Datanex Widgets — núcleo compartido.
 *
 * Orden de prioridad de los tokens:
 *   1. Datanex Theme (--dnxt-*): colores de Personalizar > Datanex Theme > Colores de marca.
 *   2. Globales de Elementor (solo primario, texto y acento; con otro theme).
 *   3. Valores del diseño.
 * El tono profundo NO se toma del "Secundario" de Elementor (por defecto es gris).
 */
.dnx-w {
	--dnx-primary: var(--dnxt-primary, var(--e-global-color-primary, #2B3A7A));
	--dnx-deep: var(--dnxt-deep, #1B2352);
	--dnx-ink: var(--dnxt-ink, var(--e-global-color-text, #1A1F3F));
	--dnx-accent: var(--dnxt-accent, var(--e-global-color-accent, #E80040));

	--dnx-ink-muted: var(--dnxt-ink-muted, color-mix(in srgb, var(--dnx-ink) 68%, #fff));
	--dnx-primary-soft: color-mix(in srgb, var(--dnx-primary) 8%, #fff);
	--dnx-primary-tint: var(--dnxt-primary-tint, color-mix(in srgb, var(--dnx-primary) 17%, #fff));
	--dnx-line: color-mix(in srgb, var(--dnx-primary) 12%, #fff);
	--dnx-surface: #fff;
	--dnx-surface-alt: color-mix(in srgb, var(--dnx-primary) 4%, #fff);

	--dnx-font-display: var(--dnxt-font-display, var(--e-global-typography-primary-font-family, inherit));
	--dnx-font-body: var(--dnxt-font-body, var(--e-global-typography-text-font-family, inherit));

	--dnx-wrap: 1140px;
	--dnx-radius: 8px;
	--dnx-radius-card: 16px;
	--dnx-shadow: 0 8px 24px color-mix(in srgb, var(--dnx-primary) 8%, transparent);
	--dnx-shadow-lg: 0 20px 48px color-mix(in srgb, var(--dnx-primary) 14%, transparent);

	font-family: var(--dnx-font-body);
	color: var(--dnx-ink);
	box-sizing: border-box;
}

.dnx-w *,
.dnx-w *::before,
.dnx-w *::after {
	box-sizing: inherit;
}

.dnx-w img {
	display: block;
	max-width: 100%;
	height: auto;
}

/* ---------- Botones ---------- */
.dnx-actions {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 14px;
}

.dnx-btn {
	--dnx-btn-bg: transparent;
	--dnx-btn-color: var(--dnx-primary);
	--dnx-btn-border: transparent;
	--dnx-btn-hover: var(--dnx-primary);
	--dnx-btn-hover-color: #fff;
	--dnx-btn-radius: var(--dnx-radius);

	position: relative;
	isolation: isolate;
	overflow: hidden;
	display: inline-flex;
	align-items: center;
	gap: 8px;
	padding: 14px 26px;
	border: 2px solid var(--dnx-btn-border);
	border-radius: var(--dnx-btn-radius);
	background: var(--dnx-btn-bg);
	color: var(--dnx-btn-color);
	font-size: 15px;
	font-weight: 600;
	line-height: 1.2;
	text-decoration: none;
	transition: color .3s, box-shadow .3s, border-color .3s;
}

.dnx-btn::before {
	content: "";
	position: absolute;
	inset: 0;
	z-index: -1;
	background: var(--dnx-btn-hover);
	transform: translateX(-101%);
	transition: transform .35s cubic-bezier(.22, .61, .36, 1);
}

.dnx-btn:hover::before,
.dnx-btn:focus-visible::before {
	transform: translateX(0);
}

/* Los hijos no capturan el clic: el objetivo del evento siempre es el <a> (GTM). */
.dnx-btn > * {
	pointer-events: none;
}

.dnx-btn:focus-visible {
	outline: 3px solid color-mix(in srgb, var(--dnx-accent) 45%, transparent);
	outline-offset: 3px;
}

.dnx-btn--primario {
	--dnx-btn-bg: var(--dnx-accent);
	--dnx-btn-color: #fff;
	--dnx-btn-hover: color-mix(in srgb, var(--dnx-accent) 78%, #000);
	box-shadow: 0 8px 20px color-mix(in srgb, var(--dnx-accent) 25%, transparent);
}

.dnx-btn--primario:hover {
	color: var(--dnx-btn-color);
	box-shadow: 0 8px 20px color-mix(in srgb, var(--dnx-accent) 35%, transparent);
}

.dnx-btn--secundario {
	--dnx-btn-border: var(--dnx-primary);
}

.dnx-btn--secundario:hover,
.dnx-btn--secundario:focus-visible {
	color: var(--dnx-btn-hover-color);
}

.dnx-btn--texto {
	padding: 0;
	border: 0;
	overflow: visible;
	background-image: linear-gradient(var(--dnx-accent), var(--dnx-accent));
	background-size: 0 2px;
	background-repeat: no-repeat;
	background-position: 0 100%;
	transition: background-size .3s;
}

.dnx-btn--texto::before {
	display: none;
}

.dnx-btn--texto::after {
	content: "→";
	transition: transform .2s;
}

.dnx-btn--texto:hover {
	background-size: 100% 2px;
	color: var(--dnx-btn-color);
}

.dnx-btn--texto:hover::after {
	transform: translateX(4px);
}

.dnx-btn--sm {
	padding: 9px 16px;
	font-size: 14px;
}

/* ---------- Texto enriquecido (editor visual) ---------- */
.dnx-richtext > :first-child {
	margin-top: 0;
}

.dnx-richtext > :last-child {
	margin-bottom: 0;
}

.dnx-richtext p,
.dnx-richtext ul,
.dnx-richtext ol,
.dnx-richtext blockquote {
	margin: 0 0 .9em;
}

.dnx-richtext :is(strong, b) {
	color: var(--dnx-ink);
	font-weight: 700;
}

.dnx-richtext a {
	color: var(--dnx-primary);
	text-decoration: underline;
	text-decoration-thickness: 1px;
	text-underline-offset: 3px;
	transition: color .2s;
}

.dnx-richtext a:hover {
	color: var(--dnx-accent);
}

.dnx-richtext ul,
.dnx-richtext ol {
	padding-left: 1.3em;
}

.dnx-richtext li {
	margin-bottom: .35em;
}

.dnx-richtext ul li::marker {
	color: var(--dnx-accent);
}

.dnx-richtext :is(h3, h4, h5) {
	margin: 1.2em 0 .4em;
	color: var(--dnx-primary);
	font-family: var(--dnx-font-body);
	font-weight: 700;
	line-height: 1.3;
}

.dnx-richtext h3 { font-size: 1.2em; }
.dnx-richtext h4 { font-size: 1.08em; }
.dnx-richtext h5 { font-size: 1em; }

.dnx-richtext blockquote {
	padding-left: 16px;
	border-left: 3px solid var(--dnx-accent);
	color: var(--dnx-primary);
	font-style: italic;
}

.dnx-richtext img {
	height: auto;
	border-radius: 12px;
}

/* ---------- Piezas comunes ---------- */
/* Texto destacado dentro de títulos (compartido por todos los widgets). */
.dnx-mark {
	color: var(--dnx-accent);
}

.dnx-chip {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	padding: 6px 14px 6px 6px;
	border: 1px solid var(--dnx-line);
	border-radius: 999px;
	background: #fff;
	box-shadow: var(--dnx-shadow);
	color: var(--dnx-ink-muted);
	font-size: 13px;
	font-weight: 500;
}

.dnx-chip b {
	padding: 3px 10px;
	border-radius: 999px;
	background: var(--dnx-accent);
	color: #fff;
	font-size: 12px;
	font-weight: 600;
}

.dnx-eyebrow {
	display: inline-flex;
	align-items: center;
	gap: 10px;
	margin: 0 0 14px;
	color: var(--dnx-accent);
	font-size: 13px;
	font-weight: 600;
	letter-spacing: 2px;
	text-transform: uppercase;
}

.dnx-eyebrow::before,
.dnx-eyebrow--ambos::after {
	content: "";
	flex: none;
	width: 28px;
	height: 3px;
	border-radius: 2px;
	background: currentColor;
}

.dnx-eyebrow--ninguna::before {
	display: none;
}

.dnx-pill {
	padding: 5px 12px;
	border-radius: 999px;
	background: var(--dnx-accent);
	color: #fff;
	font-size: 12px;
	font-weight: 600;
	letter-spacing: .5px;
}

.dnx-stars {
	color: #F5A524;
	letter-spacing: 2px;
}

.dnx-float {
	display: flex;
	flex-direction: column;
	padding: 16px 20px;
	border: 1px solid var(--dnx-line);
	border-radius: 14px;
	background: #fff;
	box-shadow: var(--dnx-shadow-lg);
}

.dnx-float small {
	color: var(--dnx-ink-muted);
	font-size: 12px;
}

.dnx-float b {
	color: var(--dnx-primary);
	font-family: var(--dnx-font-display);
	font-size: 36px;
	font-weight: 400;
	line-height: 1;
}

/* ---------- Animación de entrada ----------
 * Solo se oculta si el JS del plugin está activo (clase .dnx-js en <html>):
 * si el script falla o no carga, el contenido sigue visible.
 */
.dnx-js .dnx-reveal {
	opacity: 0;
	transform: translateY(18px);
	transition: opacity .6s ease, transform .6s ease;
}

.dnx-js .dnx-reveal.is-in,
.elementor-editor-active .dnx-reveal {
	opacity: 1;
	transform: none;
}

@media (prefers-reduced-motion: reduce) {
	.dnx-js .dnx-reveal {
		opacity: 1;
		transform: none;
		transition: none;
	}

	.dnx-btn,
	.dnx-btn::before {
		transition: none;
	}
}

/* ---------- Animación al pasar el cursor (sutil, compartida) ----------
 * Se activa con la clase .dnx-anim en el contenedor del widget.
 */
.dnx-anim .dnx-card__icon,
.dnx-anim .dnx-card__title,
.dnx-anim .dnx-card__text,
.dnx-anim .dnx-card__link {
	transition: transform .3s cubic-bezier(.22, .61, .36, 1), color .25s;
}

.dnx-anim .dnx-card:hover .dnx-card__icon,
.dnx-anim .dnx-card:hover .dnx-card__title,
.dnx-anim .dnx-card:hover .dnx-card__text,
.dnx-anim .dnx-card:hover .dnx-card__link {
	transform: translateY(-3px);
}

/* Cascada: cada elemento sube un instante después del anterior. */
.dnx-anim .dnx-card:hover .dnx-card__title {
	transition-delay: 40ms;
}

.dnx-anim .dnx-card:hover .dnx-card__text {
	transition-delay: 80ms;
}

.dnx-anim .dnx-card:hover .dnx-card__link {
	transition-delay: 120ms;
}

/* La flecha del enlace mantiene su avance lateral. */
.dnx-anim .dnx-card:hover .dnx-btn--texto::after {
	transform: translateX(4px);
}

/* Hero: panel ilustrativo y tarjeta flotante. */
.dnx-anim .dnx-mockup__kpi,
.dnx-anim .dnx-float {
	transition: transform .3s cubic-bezier(.22, .61, .36, 1), box-shadow .3s;
}

.dnx-anim .dnx-mockup__kpi:hover {
	transform: translateY(-3px);
	box-shadow: var(--dnx-shadow);
}

.dnx-anim .dnx-float:hover {
	transform: translateY(-3px);
}

@media (prefers-reduced-motion: reduce) {
	.dnx-anim .dnx-card__icon,
	.dnx-anim .dnx-card__title,
	.dnx-anim .dnx-card__text,
	.dnx-anim .dnx-card__link {
		transition: none;
	}

	.dnx-anim .dnx-card:hover .dnx-card__title,
	.dnx-anim .dnx-card:hover .dnx-card__text,
	.dnx-anim .dnx-card:hover .dnx-card__icon,
	.dnx-anim .dnx-card:hover .dnx-card__link,
	.dnx-anim .dnx-mockup__kpi:hover,
	.dnx-anim .dnx-float:hover {
		transform: none;
	}
}

