/* =========================================================================
 * CERVO — CAPA 23 · el aviso de bienvenida
 * -------------------------------------------------------------------------
 * PANEL OSCURO SOBRE UNA TIENDA CLARA, a propósito: el aviso tiene que sentirse
 * de otro sitio, como la sala de trofeos, no como una franja publicitaria más.
 * Es el mismo registro que la ventana de rangos, que es adonde lleva.
 *
 * MANDA LA CIFRA. Arriba firma el ciervo —pequeño, solo la marca— y todo el
 * peso se lo lleva el 10%: grande, en oro y con un destello que barre. Lo demás
 * va callado: un solo botón dorado y el resto en texto plano.
 *
 * ⚠️ SOLO UNA COSA PUEDE SER LA GRANDE. Antes aquí había una cornamenta con las
 * puntas por ganar, y contaba muy bien la escalera de rangos — pero peleaba con
 * la cifra por la mirada y no ganaba ninguna de las dos. Si algún día se le
 * añade otra figura o un segundo botón de color, vuelve el mismo problema.
 *
 * ⚠️ TARJETA CENTRADA TAMBIÉN EN MÓVIL, y esto se cambió después de verlo.
 * La primera versión era una hoja pegada al borde de abajo (el patrón típico
 * de móvil, pensado para el pulgar). Con el contenido centrado dentro, pero el
 * panel abajo del todo, quedaba un hueco muerto arriba y la pieza se leía
 * DESEQUILIBRADA: no es que algo estuviera descentrado —se midió y era 0 px de
 * desvío en todo—, es que el conjunto no estaba centrado.
 * Cabe de sobra (unos 505 px de alto en una pantalla de 844) y el botón sigue
 * quedando a mano. Si algún día crece el contenido, antes que volver abajo hay
 * que recortar contenido: la caja lleva scroll propio como último recurso.
 *
 * ⚠️ El panel va en <body> directamente y con position:fixed. Si algún día se
 * mete dentro de un contenedor con overflow/transform, el fixed deja de
 * anclarse al viewport — ya pasó con la ventana de rangos dentro de
 * .woocommerce (que lleva overflow-x) y con .cervo-cart.
 * ========================================================================= */

.cvbv {
	--bv-fondo:  #12161d;
	--bv-fondo2: #1a212b;
	--bv-oro:    #c8a96e;
	--bv-claro:  #f0dcab;
	--bv-papel:  #f6f1e7;
	--bv-mudo:   rgba(246, 241, 231, .58);
	--bv-linea:  rgba(200, 169, 110, .22);

	position: fixed;
	inset: 0;
	z-index: 100000;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: 16px;
	font-family: 'Jost', 'Segoe UI', Helvetica, Arial, sans-serif;
	-webkit-font-smoothing: antialiased;
}
.cvbv[hidden] { display: none; }

/* ⚠️ RESET DE BOTONES — NO QUITAR.
   orchid-store le pone a TODO <button> `padding: 16px 20px`, su propia
   tipografía y `appearance: button`. En un botón cuadrado de 40×40 con
   box-sizing:border-box, esos 20 px de lado dejan el área interior en CERO de
   ancho: el aspa se iba 10 px a la derecha y 6 hacia abajo, y `place-items:
   center` no lo salvaba porque centra dentro de un hueco que ya no existe.
   Medido antes y después, no estimado.
   Por eso el reset va aquí arriba y cada botón vuelve a declarar SU relleno. */
.cvbv button {
	margin: 0;
	padding: 0;
	border: 0;
	background: none;
	font: inherit;
	line-height: 1;
	color: inherit;
	-webkit-appearance: none;
	   -moz-appearance: none;
	        appearance: none;
}

/* ⚠️ EL VELO VA AL .74, NO AL .58, y el motivo es concreto: al 58% el botón
   verde de WhatsApp (#ht-ctc-chat, z-index 99) seguía cantando a través del
   velo. No estaba por encima —está muy por debajo— pero el verde saturado
   sobrevive a un atenuado flojo y competía con la tarjeta por la mirada.
   Se resolvió subiendo el velo y no escondiendo ese botón a mano: atarnos al
   id de un plugin se rompe el día que lo cambien o se instale otro. */
.cvbv__velo {
	position: absolute;
	inset: 0;
	background: rgba(9, 12, 17, .74);
	-webkit-backdrop-filter: blur(4px) saturate(.7);
	        backdrop-filter: blur(4px) saturate(.7);
	opacity: 0;
	animation: cvbv-velo .45s ease forwards;
}
@keyframes cvbv-velo { to { opacity: 1; } }

.cvbv__panel {
	position: relative;
	width: 100%;
	max-width: 440px;
	padding: 32px 24px 24px;
	background:
		radial-gradient(120% 80% at 50% 0%, rgba(200, 169, 110, .10), transparent 60%),
		linear-gradient(var(--bv-fondo2), var(--bv-fondo));
	border: 1px solid var(--bv-linea);
	border-radius: 18px;
	text-align: center;
	color: var(--bv-papel);
	box-shadow: 0 24px 60px rgba(0, 0, 0, .45);

	/* Último recurso si el contenido creciera o la pantalla fuera muy baja:
	   que el panel se desplace por dentro antes que salirse. dvh y no vh
	   porque en el móvil la barra del navegador se come parte del vh. */
	max-height: calc(100dvh - 32px);
	overflow-y: auto;
	-webkit-overflow-scrolling: touch;

	transform: translateY(14px) scale(.97);
	animation: cvbv-entra .5s cubic-bezier(.16, 1, .3, 1) .06s forwards;
}
@supports not (height: 100dvh) {
	.cvbv__panel { max-height: calc(100vh - 32px); }
}
@keyframes cvbv-entra { to { transform: none; } }

/* ── El ciervo: la marca y nada más ──
   Sustituyó a la cornamenta. La cornamenta contaba la escalera, pero con la
   cifra de protagonista competía por la mirada; el ciervo solo firma.

   ⚠️ LA PIEZA QUE SE INCLUYE ES LA MARCA DE AGUA. template-parts/cervo-deer-
   watermark trae la clase .cervo-deer-wm, la MISMA que usan el carrito y
   mi-cuenta, donde va posicionada en absoluto, girada y al 5% de opacidad.
   Aquí hay que DESHACER todo eso (position, transform, opacity) o el ciervo
   sale invisible y descolocado. Si algún día se toca aquel CSS, revisar esto. */
.cvbv__logo {
	width: 74px;
	margin: 0 auto 14px;
	opacity: 0;
	animation: cvbv-asoma .7s cubic-bezier(.16, 1, .3, 1) .28s forwards;
}
.cvbv__logo .cervo-deer-wm {
	display: block;
	position: static;
	inset: auto;
	width: 100%;
	height: auto;
	transform: none;
	opacity: 1;
	color: var(--bv-oro);
}
.cvbv__logo .cervo-deer-wm path { fill: currentColor; }
@keyframes cvbv-asoma { to { opacity: 1; } }

/* ══ EL TITULAR ══ manda la CIFRA.
   Va apilado en tres alturas —"Recibe el" pequeño, el 10% enorme, el resto
   mediano— para que el ojo caiga en el número sin leer nada primero. Puesto
   todo en una línea, el número se pierde entre palabras. */
.cvbv__titulo {
	margin: 0 0 14px;
	font-weight: 400;
	line-height: 1.1;
	color: var(--bv-papel);
}
.cvbv__t1, .cvbv__t2 {
	display: block;
	font-size: 13px;
	font-weight: 500;
	letter-spacing: .22em;
	text-indent: .22em;
	text-transform: uppercase;
	color: var(--bv-papel);
}
.cvbv__t1 { opacity: .82; }

/* La cola del titular es larga ("off de descuento en tu primera compra
   registrándote"), así que aquí el interletraje BAJA a .12em: con los .22em
   del resto se iba a cuatro líneas y el bloque pesaba más que la cifra, que es
   justo lo contrario de lo que tiene que pasar. */
.cvbv__t2 {
	margin: 3px auto 0;
	max-width: 26ch;
	letter-spacing: .12em;
	text-indent: .12em;
	line-height: 1.65;
}

/* LA CIFRA. Jost 700 muy apretado de interletraje: a este tamaño el espaciado
   por defecto la desarma. El degradado es el mismo oro del botón, para que se
   lean como la misma promesa. */
.cvbv__cifra {
	display: block;
	margin: 2px 0 4px;
	font-size: clamp(4.4rem, 24vw, 6.4rem);
	font-weight: 700;
	letter-spacing: -.035em;
	line-height: .95;
	color: var(--bv-claro);
	transform-origin: 50% 60%;
	/* Dos animaciones que NO se pisan: la entrada mueve `transform` y el
	   latido mueve la propiedad `scale`, que es independiente. Si el latido
	   usara `transform` borraría la entrada. */
	animation: cvbv-cifra .75s cubic-bezier(.2, 1.5, .35, 1) .38s both,
	           cvbv-latido 3.6s ease-in-out 1.4s infinite;
}
/* Un respiro muy corto (3,5%) y lento. Lo justo para que el número siga vivo
   mientras el aviso está en pantalla, sin llegar a parpadear. */
@keyframes cvbv-latido {
	0%, 100% { scale: 1; }
	50%      { scale: 1.035; }
}
/* El % más pequeño y subido: al mismo cuerpo compite con el número, que es lo
   único que la gente tiene que retener. */
.cvbv__pc {
	font-size: .44em;
	font-weight: 600;
	vertical-align: .55em;
	margin-left: .04em;
	letter-spacing: 0;
}

/* EL DESTELLO. Dos capas de fondo recortadas al texto: arriba una banda blanca
   estrecha que barre, debajo el oro fijo. El barrido no se hace moviendo el
   degradado de oro —eso lo despintaría— sino una capa aparte.

   ⚠️ EL BUCLE ES LIMPIO POR CÓMO ESTÁN PUESTAS LAS PARADAS: la banda arranca
   en −70% y acaba en 170%, o sea FUERA del elemento por los dos lados. Al
   saltar del último fotograma al primero no se ve nada porque en ambos
   extremos la banda no está en pantalla. Si se cambian esos valores a algo
   dentro del 0–100%, el salto se hace visible como un parpadeo. */
@supports ((-webkit-background-clip: text) or (background-clip: text)) {
	.cvbv__cifra {
		background-image:
			linear-gradient(102deg, transparent 34%, rgba(255, 255, 255, .92) 50%, transparent 66%),
			linear-gradient(170deg, #fff6e0 8%, var(--bv-claro) 38%, var(--bv-oro) 78%, #a5854a 100%);
		background-size: 58% 100%, 100% 100%;
		background-repeat: no-repeat, no-repeat;
		background-position: -70% 0, 0 0;
		-webkit-background-clip: text;
		        background-clip: text;
		color: transparent;
		animation: cvbv-cifra .75s cubic-bezier(.2, 1.5, .35, 1) .38s both,
		           cvbv-latido 3.6s ease-in-out 1.4s infinite,
		           cvbv-brillo 5.2s ease-in-out 1.5s infinite;
	}
}
/* Barre en ~1,3 s y descansa el resto del ciclo: un brillo continuo cansa y
   deja de llamar la atención, que es justo lo contrario de lo que se busca. */
@keyframes cvbv-brillo {
	0%, 62%   { background-position: -70% 0, 0 0; }
	87%, 100% { background-position: 170% 0, 0 0; }
}

/* Entra con un golpe corto y se asienta. El rebote va en la curva
   (cubic-bezier con salto), no en fotogramas: así el número nunca se pasa de
   tamaño en pantalla, solo llega con energía. */
@keyframes cvbv-cifra {
	0%   { opacity: 0; transform: scale(.72) translateY(10px); }
	100% { opacity: 1; transform: none; }
}

.cvbv__nota {
	margin: 0 auto 22px;
	max-width: 32ch;
	font-size: 13px;
	line-height: 1.5;
	color: var(--bv-mudo);
}

/* ── El único botón de color de toda la pieza ── */
.cvbv__cta {
	display: block;
	width: 100%;
	padding: 15px 20px;
	background: linear-gradient(180deg, var(--bv-claro), var(--bv-oro));
	color: #17120a;
	border-radius: 11px;
	font-size: 13.5px;
	font-weight: 600;
	letter-spacing: .07em;
	text-transform: uppercase;
	text-decoration: none;
	transition: transform .18s ease, box-shadow .18s ease;
}
/* ⚠️ orchid-store trae `a:visited{color:inherit}` y un hover propio en los
   botones que le ganan a una clase suelta. Por eso se declaran los cuatro
   estados y se scopea bajo .cvbv. Ver la nota de la bitácora sobre esto. */
.cvbv .cvbv__cta:link,
.cvbv .cvbv__cta:visited { color: #17120a; }
.cvbv .cvbv__cta:hover,
.cvbv .cvbv__cta:focus-visible {
	color: #17120a;
	transform: translateY(-1px);
	box-shadow: 0 8px 22px rgba(200, 169, 110, .28);
}

.cvbv__pie {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 10px;
	margin: 14px 0 0;
	font-size: 13px;
}
/* ⚠️ VA COMO `.cvbv .cvbv__no` Y NO COMO `.cvbv__no` A SECAS.
   El reset de arriba es `.cvbv button` (clase + elemento = más específico que
   una clase sola), así que un `.cvbv__no { padding }` PIERDE contra él y el
   relleno no se aplicaba: la zona táctil se quedaba en 50×13 px, la mitad de
   lo que necesita un dedo. Mismo motivo para el enlace de al lado. */
.cvbv .cvbv__no,
.cvbv .cvbv__pie a {
	display: inline-block;
	padding: 12px 8px;
	/* Se declara el interlineado en los DOS: el reset de botones puso
	   `line-height: 1` y sin esto el botón quedaba 7 px más bajo que el enlace
	   de al lado — dos cosas idénticas a la vista con distinta zona táctil. */
	line-height: 1.5;
	cursor: pointer;
	text-decoration: underline;
	text-underline-offset: 3px;
}
.cvbv .cvbv__no { color: var(--bv-mudo); }
/* El hover global del tema (`button:hover{background:#e26143}`) le pintaría
   un rectángulo naranja detrás. Se anula aquí. */
.cvbv .cvbv__no:hover,
.cvbv .cvbv__no:focus-visible { background: none; color: var(--bv-papel); }
.cvbv__sep { color: var(--bv-linea); }
/* `a:visited{color:inherit}` de orchid-store obliga a declarar los estados. */
.cvbv .cvbv__pie a:link,
.cvbv .cvbv__pie a:visited { color: var(--bv-mudo); }
.cvbv .cvbv__pie a:hover,
.cvbv .cvbv__pie a:focus-visible { color: var(--bv-papel); }

.cvbv__letra {
	margin: 16px 0 0;
	font-size: 10.5px;
	line-height: 1.5;
	color: rgba(246, 241, 231, .38);
}

/* ── La X ── */
.cvbv__x {
	position: absolute;
	top: 8px;
	right: 8px;
	width: 44px;    /* 44 y no 40: es el mínimo cómodo para un dedo */
	height: 44px;
	display: grid;
	place-items: center;
	border-radius: 50%;
	color: var(--bv-mudo);
	cursor: pointer;
}
.cvbv__x svg { width: 20px; height: 20px; display: block; }
.cvbv .cvbv__x:hover,
.cvbv .cvbv__x:focus-visible { background: rgba(246, 241, 231, .09); color: var(--bv-papel); }
.cvbv .cvbv__x:hover svg { fill: none; }   /* el tema pinta `button:hover svg{fill:#fff}` */

/* ── Escritorio: solo más aire ── */
@media (min-width: 700px) {
	.cvbv__panel { padding: 38px 40px 28px; }
}

/* ── Pantallas bajas (móvil apaisado, o móviles pequeños) ──
   Se recorta lo prescindible ANTES que dejar el botón fuera de la vista: la
   letra pequeña se va, la cornamenta y el titular encogen. El scroll interno
   del panel está de red, no de plan A — un aviso que hay que desplazar para
   ver el botón es un aviso que no se pulsa. */
@media (max-height: 700px) {
	.cvbv__panel { padding: 22px 22px 18px; }
	.cvbv__logo { width: 54px; margin-bottom: 8px; }
	.cvbv__cifra { font-size: clamp(3rem, 15vw, 4rem); }
	.cvbv__t1, .cvbv__t2 { font-size: 12px; }
	.cvbv__titulo { margin-bottom: 10px; }
	.cvbv__nota { margin-bottom: 14px; }
	.cvbv__letra { display: none; }
}

@media (prefers-reduced-motion: reduce) {
	.cvbv__velo, .cvbv__panel, .cvbv__logo {
		animation-duration: .01ms !important;
		animation-delay: 0s !important;
	}
	.cvbv__panel { transform: none; }
	/* El latido de las puntas que faltan se para, pero se dejan a media luz:
	   la diferencia con la punta ganada tiene que seguir viéndose. */
	/* La cifra aparece, pero sin golpe ni latido. */
	/* Sin golpe, sin latido y SIN DESTELLO: hay que reponer la posición del
	   fondo a mano, porque al matar la animación se queda donde estuviera. */
	.cvbv__cifra {
		animation: none;
		opacity: 1;
		transform: none;
		scale: 1;
		background-position: -70% 0, 0 0;
	}
}
