/**
 * Estilos de la landing de lista de espera.
 *
 * Diseñado móvil primero: las reglas base son las del móvil y
 * los media queries van añadiendo espacio en pantallas grandes.
 */

/* --- Base --- */

*,
*::before,
*::after {
	box-sizing: border-box;
}

html {
	-webkit-text-size-adjust: 100%;
}

body.rd-landing {
	margin: 0;
	background: var(--rd-bg);
	color: var(--rd-ink);
	font-family: var(--rd-font-body);
	font-size: var(--rd-size-base);
	line-height: var(--rd-leading-normal);
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
}

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

/* Enlace para saltar al contenido, visible solo al tabular. */
.rd-skip-link {
	position: absolute;
	left: -9999px;
	top: 0;
	z-index: 100;
	background: var(--rd-ink);
	color: #fff;
	padding: var(--rd-space-3) var(--rd-space-4);
	border-radius: 0 0 var(--rd-radius-sm) 0;
	z-index: 100;
}

.rd-skip-link:focus {
	left: 0;
}

/* --- El cielo, SOLO en la portada --- */

/* «rd-landing» la lleva toda página, así que el cielo cuelga de
   «rd-space», que solo se pone en la portada. */
body.rd-space {
	background: var(--rd-sky-top);
	background-image: linear-gradient(
		170deg,
		var(--rd-sky-top) 0%,
		var(--rd-sky-mid) 55%,
		var(--rd-sky-bottom) 100%
	);
	background-attachment: fixed;
	color: var(--rd-sky-ink);
}


.rd-sky {
	position: fixed;
	inset: 0;
	overflow: hidden;
	z-index: 0;
	pointer-events: none;
}

/*
 * Las estrellas son una imagen que se repite, no algo que se dibuje.
 * Cada capa es más ancha que la pantalla justo lo que mide el dibujo
 * (1000 px), y se desplaza exactamente esos 1000 px: al terminar, el
 * dibujo cae donde estaba y el bucle no se nota.
 *
 * Todo el movimiento es «transform», que el navegador resuelve con la
 * tarjeta gráfica sin volver a pintar nada. Antes esto era un lienzo
 * que se borraba y se redibujaba sesenta veces por segundo, y en
 * algunos móviles eso se veía como un parpadeo.
 */
/*
 * Cada capa es un cuadrado bastante mayor que la pantalla y centrado en
 * ella. Hace falta ese exceso porque al girar las esquinas barren por
 * fuera: con una capa del tamaño justo, se verían huecos negros
 * entrando y saliendo.
 */
.rd-sky__capa {
	position: absolute;
	top: 50%;
	left: 50%;
	/* 125% del lado mayor cubre la diagonal de cualquier pantalla,
	   incluidas las muy alargadas. */
	width: 125vmax;
	height: 125vmax;
	margin: -62.5vmax 0 0 -62.5vmax;
	background-repeat: repeat;
	will-change: transform;
}

/*
 * Las estrellas están QUIETAS, y es la única forma de garantizar que no
 * titilen. Una estrella mide uno o dos píxeles: si se desplaza medio
 * píxel, el navegador tiene que repartirla distinto entre los píxeles
 * de al lado, y sus bordes cambian de brillo. Con cientos a la vez, eso
 * es lo que se ve como parpadeo, y pasa igual con un lienzo que con una
 * imagen de fondo. Quietas, cada estrella se pinta una vez y ya está.
 *
 * El cielo sigue vivo por las estrellas fugaces, que cruzan deprisa y
 * de una en una.
 */
/*
 * El cielo gira, muy despacio: una vuelta entera tarda ocho minutos.
 *
 * Girar es distinto de lo que había antes. Antes cada estrella se
 * redibujaba por su cuenta en cada fotograma y sus bordes cambiaban de
 * forma independiente: eso es lo que se veía como parpadeo. Aquí gira
 * la capa entera como una sola pieza, así que todas se mueven juntas y
 * el ojo lo lee como movimiento.
 *
 * Es UNA capa y no dos: medido, cada capa girando cuesta unos dieciocho
 * fotogramas por segundo, y a esta velocidad la profundidad entre dos
 * capas no se aprecia. Los dos tamaños de estrella van dentro del mismo
 * dibujo.
 */
.rd-sky__capa {
	background-image: url("../img/cielo.svg");
	animation: rd-girar 480s linear infinite;
}

@keyframes rd-girar {
	from {
		transform: rotate(0deg);
	}

	to {
		transform: rotate(360deg);
	}
}

/* --- Estrellas fugaces --- */

/*
 * Cada una tarda seis segundos en dar la vuelta y solo se ve al
 * principio. La segunda va desfasada tres segundos, así que pasa una
 * cada tres.
 */
.rd-sky__fugaz {
	position: absolute;
	width: 170px;
	height: 2px;
	border-radius: var(--rd-radius-pill);
	background: linear-gradient(90deg, transparent, var(--rd-sky-star));
	opacity: 0;
	will-change: transform, opacity;
}

.rd-sky__fugaz--a {
	top: 14%;
	left: -220px;
	animation: rd-fugaz-a 6s linear infinite;
}

.rd-sky__fugaz--b {
	top: 4%;
	left: -220px;
	animation: rd-fugaz-b 6s linear infinite;
	animation-delay: -3s;
}

@keyframes rd-fugaz-a {
	0% {
		opacity: 0;
		transform: rotate(24deg) translate3d(0, 0, 0);
	}

	3% {
		opacity: 1;
	}

	16% {
		opacity: 0;
		transform: rotate(24deg) translate3d(125vw, 0, 0);
	}

	100% {
		opacity: 0;
		transform: rotate(24deg) translate3d(125vw, 0, 0);
	}
}

@keyframes rd-fugaz-b {
	0% {
		opacity: 0;
		transform: rotate(38deg) translate3d(0, 0, 0);
	}

	3% {
		opacity: 1;
	}

	18% {
		opacity: 0;
		transform: rotate(38deg) translate3d(115vw, 0, 0);
	}

	100% {
		opacity: 0;
		transform: rotate(38deg) translate3d(115vw, 0, 0);
	}
}

/* --- El haz que sigue al cursor --- */

.rd-sky__haz {
	position: absolute;
	top: 0;
	left: 0;
	width: 520px;
	height: 520px;
	margin: -260px 0 0 -260px;
	border-radius: 50%;
	background: radial-gradient(
		circle closest-side,
		var(--rd-sky-glow) 0%,
		transparent 70%
	);
	opacity: 0;
	transition: opacity 260ms ease;
	will-change: transform, opacity;
}

.rd-sky__haz.is-on {
	opacity: 0.16;
}

/* Quien haya pedido menos movimiento en su móvil u ordenador, ve el
   cielo quieto. Hay gente a la que el movimiento le marea. */
@media ( prefers-reduced-motion: reduce ) {
	.rd-sky__capa {
		animation: none;
	}

	.rd-sky__fugaz {
		display: none;
	}
}

/* Todo lo demás va por encima de las estrellas. */
.rd-shell {
	position: relative;
	z-index: 1;
}

/* --- Estructura --- */

.rd-shell {
	min-height: 100vh;
	min-height: 100dvh;
	display: flex;
	flex-direction: column;
	padding: var(--rd-space-5) var(--rd-space-4);
	max-width: var(--rd-container);
	margin: 0 auto;
	width: 100%;
}

.rd-header {
	margin-bottom: var(--rd-space-6);
}

.rd-space .rd-logo {
	display: inline-flex;
	align-items: center;
	gap: var(--rd-space-3);
	text-decoration: none;
	color: var(--rd-sky-ink);
}

.rd-space .rd-logo__mark {
	width: 62px;
	height: auto;
	filter: drop-shadow(0 6px 16px rgba(0, 0, 0, 0.55));
}

.rd-space .rd-logo__text {
	font-family: var(--rd-font-display);
	font-size: 1.625rem;
	font-weight: var(--rd-weight-display);
	letter-spacing: -0.02em;
	text-shadow: var(--rd-sky-shadow);
}

.rd-main {
	flex: 1;
	display: grid;
	gap: var(--rd-space-7);
	align-content: center;
	grid-template-columns: 1fr;
}

/* La portada abierta: solo la tarjeta, centrada.

   Sin el titular al lado, la rejilla de dos columnas de escritorio
   dejaría la tarjeta pegada a la derecha con medio cielo vacío a la
   izquierda. Una sola columna estrecha y centrada la pone donde se mira
   primero. Va con «!important» porque las dos reglas de escritorio que
   reparten las columnas están más abajo, dentro de sus consultas de
   medios, y esas ganan por orden. */
.rd-main--sola {
	grid-template-columns: minmax(0, 460px) !important;
	justify-content: center;
	align-content: center;
}

/* Y la tarjeta suelta no lleva el tope de ancho de la lista de espera:
   el que manda es el de la columna de aquí arriba. */
.rd-main--sola .rd-card {
	max-width: none;
	margin: 0;
}

/* --- Bloque de texto --- */

.rd-space .rd-badge {
	display: inline-block;
	background: var(--rd-sky-veil);
	border: 1px solid var(--rd-sky-line);
	color: var(--rd-sky-star);
	text-shadow: var(--rd-sky-shadow);
	backdrop-filter: blur(3px);
	-webkit-backdrop-filter: blur(3px);
	font-weight: 700;
	font-size: var(--rd-size-xs);
	font-weight: 600;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	padding: var(--rd-space-2) var(--rd-space-4);
	border-radius: var(--rd-radius-pill);
	margin-bottom: var(--rd-space-5);
}

.rd-space .rd-title {
	color: var(--rd-sky-ink);
	text-shadow: var(--rd-sky-shadow);
	font-family: var(--rd-font-display);
	font-size: var(--rd-size-display);
	line-height: 1.02;
	font-weight: var(--rd-weight-display);
	letter-spacing: -0.035em;
	margin: 0 0 var(--rd-space-6);
	max-width: 12ch;
}

.rd-space .rd-title__accent {
	color: var(--rd-sky-ink);
	position: relative;
	display: inline-block;
}

/* Subrayado suave bajo la segunda línea del titular. */
.rd-title__accent::after {
	content: "";
	position: absolute;
	left: 0;
	right: 0;
	bottom: 0.02em;
	height: 0.13em;
	background: var(--rd-primary);
	border-radius: var(--rd-radius-pill);
	z-index: -1;
}

.rd-space .rd-lead {
	font-size: var(--rd-size-lg);
	line-height: var(--rd-leading-snug);
	color: var(--rd-sky-ink);
	text-shadow: var(--rd-sky-shadow);
	margin: 0;
	max-width: 44ch;
}

/* --- Tarjeta del formulario --- */

/* La portada abierta: el botón de crear cuenta y el enlace de entrar.

   Cuando «REDDIE_PRELAUNCH» pasa a false, la tarjeta de la lista de
   espera se convierte en la puerta. Estas dos reglas son todo lo que
   necesita: el botón ya viene vestido de «.rd-button» y lo único que
   hace falta es que ocupe el ancho —como lo ocupaba el de enviar el
   formulario— y que el enlace de debajo tenga su aire. */
.rd-card__acciones {
	margin: 0 0 var(--rd-space-4);
}

.rd-card__acciones .rd-button {
	display: block;
	width: 100%;
	text-align: center;
	text-decoration: none;
}

.rd-card__ya {
	margin: 0 0 var(--rd-space-5);
	font-size: var(--rd-size-sm);
	color: var(--rd-ink-soft);
}

.rd-card {
	background: var(--rd-surface);
	color: var(--rd-ink);
	border-radius: var(--rd-radius-lg);
	padding: var(--rd-space-6) var(--rd-space-5);
	box-shadow: var(--rd-shadow-card);
}

.rd-card__mark {
	width: 92px;
	margin: 0 auto var(--rd-space-4);
}

.rd-card__title {
	font-family: var(--rd-font-display);
	font-size: 1.5rem;
	font-weight: var(--rd-weight-display);
	text-align: center;
	margin: 0 0 var(--rd-space-3);
	letter-spacing: -0.025em;
}

.rd-card__sub {
	text-align: center;
	color: var(--rd-ink-soft);
	font-size: var(--rd-size-sm);
	line-height: var(--rd-leading-snug);
	margin: 0 0 var(--rd-space-5);
}

/* --- Formulario --- */

.rd-field {
	margin-bottom: var(--rd-space-4);
}

.rd-label {
	display: block;
	font-size: var(--rd-size-sm);
	font-weight: 600;
	margin-bottom: var(--rd-space-2);
}

.rd-input {
	width: 100%;
	padding: var(--rd-space-4);
	font-family: inherit;
	font-size: var(--rd-size-base);
	color: var(--rd-ink);
	background: var(--rd-input-bg);
	border: 1px solid var(--rd-border);
	border-radius: var(--rd-radius-md);
	transition: border-color var(--rd-transition), box-shadow var(--rd-transition);
}

.rd-input::placeholder {
	color: var(--rd-ink-muted);
}

.rd-input:focus {
	outline: none;
	border-color: var(--rd-primary);
	box-shadow: var(--rd-shadow-focus);
}

.rd-input[aria-invalid="true"] {
	border-color: var(--rd-error-ink);
}

/* Campo trampa para bots: fuera de pantalla, sin display:none
   porque algunos bots detectan y evitan los campos ocultos así. */
.rd-honeypot {
	position: absolute;
	left: -9999px;
	width: 1px;
	height: 1px;
	overflow: hidden;
}

/* --- Consentimiento --- */

.rd-consent {
	display: flex;
	align-items: flex-start;
	gap: var(--rd-space-3);
	margin-bottom: var(--rd-space-5);
	font-size: var(--rd-size-xs);
	line-height: var(--rd-leading-snug);
	color: var(--rd-ink-soft);
	cursor: pointer;
}

.rd-consent input[type="checkbox"] {
	flex-shrink: 0;
	width: 20px;
	height: 20px;
	margin: 1px 0 0;
	accent-color: var(--rd-primary);
	cursor: pointer;
}

.rd-consent a {
	color: var(--rd-primary);
	text-decoration: underline;
}

/* --- Botón --- */

.rd-button {
	width: 100%;
	padding: var(--rd-space-4);
	font-family: inherit;
	font-size: var(--rd-size-base);
	font-weight: 600;
	color: #fff;
	background: var(--rd-primary);
	border: none;
	border-radius: var(--rd-radius-pill);
	cursor: pointer;
	transition: background var(--rd-transition), transform var(--rd-transition);
}

.rd-button:hover {
	background: var(--rd-primary-hover);
}

.rd-button:active {
	background: var(--rd-primary-active);
	transform: scale(0.99);
}

.rd-button:focus-visible {
	outline: none;
	box-shadow: var(--rd-shadow-focus);
}

.rd-button[disabled] {
	opacity: 0.65;
	cursor: not-allowed;
}

/* --- Nota de privacidad --- */

.rd-note {
	display: flex;
	align-items: flex-start;
	gap: var(--rd-space-3);
	margin-top: var(--rd-space-4);
	font-size: var(--rd-size-xs);
	line-height: var(--rd-leading-snug);
	color: var(--rd-ink-soft);
}

.rd-note svg {
	flex-shrink: 0;
	margin-top: 2px;
	width: 16px;
	height: 16px;
	stroke: currentColor;
	fill: none;
}

/* --- Mensajes de respuesta --- */

.rd-message {
	padding: var(--rd-space-4);
	border-radius: var(--rd-radius-md);
	font-size: var(--rd-size-sm);
	line-height: var(--rd-leading-snug);
	margin-bottom: var(--rd-space-4);
}

.rd-message--ok {
	background: var(--rd-success-bg);
	color: var(--rd-success-ink);
}

.rd-message--error {
	background: var(--rd-error-bg);
	color: var(--rd-error-ink);
}

/* El aviso: ni éxito ni error. La cuenta existe, pero hay algo que
   hacer. Ámbar, que es lo que la gente lee como «ojo con esto» sin
   leerlo como «ha fallado». */
.rd-message--aviso {
	background: #FBF1DC;
	color: #6B4A0C;
	border: 1px solid #E8C98A;
}

.rd-message[hidden] {
	display: none;
}

/* ==========================================================
   La tarjeta en la portada
   ==========================================================
   Sobre un cielo oscuro, una tarjeta color crema se ve como un
   parche pegado encima. Aquí se convierte en un panel de cristal:
   el mismo azul del cielo, translúcido y desenfocado, para que se
   apoye en el fondo en vez de taparlo. El botón se queda naranja:
   es lo único que tiene que gritar.
   ========================================================== */

.rd-space .rd-card {
	background: var(--rd-sky-card);
	color: var(--rd-sky-ink);
	border: 1px solid var(--rd-sky-veil);
	/*
	 * Sin desenfoque a propósito. Desenfocar el fondo de la tarjeta
	 * obliga al navegador a rehacer ese desenfoque en CADA fotograma
	 * del cielo: medido, tumbaba la animación de 59 a 29 imágenes por
	 * segundo. El panel se sostiene igual con el azul translúcido, el
	 * borde de luz y la sombra.
	 */
	box-shadow:
		0 30px 80px rgba(0, 0, 0, 0.45),
		inset 0 1px 0 rgba(255, 255, 255, 0.12);
}

.rd-space .rd-card__title {
	color: var(--rd-sky-ink);
}

.rd-space .rd-card__sub,
.rd-space .rd-card__ya,
.rd-space .rd-note {
	color: var(--rd-sky-ink-soft);
}

/* El «Entra aquí» de la portada abierta.

   Va con el mismo tono claro que el enlace del consentimiento y por el
   mismo motivo, que está escrito arriba: el naranja de marca no llega a
   contrastar sobre el azul oscuro en letra pequeña. Sin esto se queda
   con el azul de enlace de fábrica, que sobre este fondo no se lee y
   además no es de esta web. */
.rd-space .rd-card__ya a {
	color: var(--rd-sky-link);
}

.rd-space .rd-label {
	color: var(--rd-sky-ink);
}

.rd-space .rd-input {
	background: var(--rd-sky-field);
	border-color: var(--rd-sky-veil);
	color: var(--rd-sky-ink);
}

.rd-space .rd-input::placeholder {
	color: var(--rd-sky-ink-soft);
	opacity: 0.7;
}

.rd-space .rd-input:focus {
	border-color: var(--rd-primary);
	background: rgba(255, 255, 255, 0.12);
}

.rd-space .rd-consent {
	color: var(--rd-sky-ink-soft);
}

/* El naranja de marca no llega a contrastar sobre azul oscuro en
   letra pequeña, así que los enlaces van en un tono más claro. */
.rd-space .rd-consent a {
	color: var(--rd-sky-link);
}

.rd-space .rd-consent input[type="checkbox"] {
	accent-color: var(--rd-primary);
	outline: 1px solid var(--rd-sky-veil);
	outline-offset: 1px;
	border-radius: 3px;
}

.rd-space .rd-message--ok {
	background: var(--rd-sky-ok-bg);
	color: var(--rd-sky-ok-ink);
}

.rd-space .rd-message--error {
	background: var(--rd-sky-error-bg);
	color: var(--rd-sky-error-ink);
}

/* --- Pie --- */

.rd-space .rd-footer {
	margin-top: var(--rd-space-7);
	padding-top: var(--rd-space-5);
	font-size: var(--rd-size-xs);
	color: var(--rd-sky-ink);
	text-shadow: var(--rd-sky-shadow);
	text-align: center;
	opacity: 0.85;
}

.rd-space .rd-footer a {
	color: var(--rd-sky-ink);
	text-decoration: underline;
}

/* --- Móvil: comprimir para que el botón quede cuanto antes --- */

@media (max-width: 719px) {
	.rd-main {
		gap: var(--rd-space-5);
	}

	.rd-card__mark {
		width: 68px;
		margin-bottom: var(--rd-space-3);
	}

	.rd-card__sub {
		margin-bottom: var(--rd-space-4);
	}

	.rd-title {
		margin-bottom: var(--rd-space-5);
	}
}

/* --- Tabletas --- */

@media (min-width: 720px) {
	.rd-shell {
		padding: var(--rd-space-6);
	}

	.rd-card {
		padding: var(--rd-space-7) var(--rd-space-6);
		max-width: 480px;
		margin: 0 auto;
		width: 100%;
	}
}

/* --- Escritorio: dos columnas --- */

@media (min-width: 1020px) {
	.rd-shell {
		padding: var(--rd-space-5) var(--rd-space-6) var(--rd-space-4);
	}

	.rd-header {
		margin-bottom: var(--rd-space-5);
	}

	/* La tarjeta lleva un ancho fijo para que no se estreche cuando la
	   ventana es pequeña: el formulario siempre debe quedar cómodo. */
	.rd-main {
		grid-template-columns: minmax(0, 1fr) 440px;
		gap: var(--rd-space-7);
		align-items: center;
	}

	.rd-card {
		margin: 0;
		max-width: none;
		padding: var(--rd-space-6);
	}

	.rd-card__mark {
		width: 76px;
		margin-bottom: var(--rd-space-3);
	}

	.rd-footer {
		text-align: left;
		margin-top: var(--rd-space-5);
		padding-top: var(--rd-space-4);
	}
}

/* --- Pantallas anchas: se puede volver a respirar --- */

@media (min-width: 1400px) {
	.rd-shell {
		padding: var(--rd-space-6) var(--rd-space-6);
	}

	.rd-header {
		margin-bottom: var(--rd-space-7);
	}

	.rd-main {
		grid-template-columns: minmax(0, 1fr) 480px;
		gap: var(--rd-space-8);
	}

	.rd-card {
		padding: var(--rd-space-7) var(--rd-space-6);
	}

	.rd-card__mark {
		width: 92px;
	}

	.rd-title {
		font-size: clamp(3.5rem, 4.4vw, 5rem);
	}
}

/* --- Pantallas bajas: comprimir el ritmo vertical --- */

@media (min-width: 1020px) and (max-height: 900px) {
	.rd-badge {
		margin-bottom: var(--rd-space-4);
	}

	.rd-title {
		margin-bottom: var(--rd-space-4);
	}

	.rd-card {
		padding: var(--rd-space-5);
	}

	.rd-card__sub {
		margin-bottom: var(--rd-space-4);
	}
}

/* --- Respeto por quien prefiere menos animación --- */

@media (prefers-reduced-motion: reduce) {
	*,
	*::before,
	*::after {
		animation-duration: 0.01ms !important;
		transition-duration: 0.01ms !important;
	}
}
