/*
 * The Sensual Soul · Formación — piezas base
 *
 * Las variables y las piezas comunes (títulos, botones, formularios, avisos,
 * ventanas) del área de formación. Viene del plugin de Respiración Completa,
 * pero aquí NO depende del tema: los colores son los de la marca y las
 * tipografías las que ya carga el tema (Playfair Display y Jost, autoalojadas),
 * así que no se descarga ninguna fuente de más.
 */

:root {
	/*
	 * Los colores NO se escriben aquí: se apuntan a los del tema
	 * (assets/css/main.css), que es donde vive la paleta de la marca. Así hay
	 * un solo sitio que tocar. El valor de detrás de la coma es el de repuesto,
	 * por si este plugin acaba en una web sin ese tema.
	 */
	--tssf-fondo: var(--tss-cream, #f9f1ec);
	--tssf-tarjeta: var(--tss-cream-light, #fdfdf1);
	--tssf-papel: var(--tss-white, #ffffff);
	--tssf-linea: var(--tss-border, rgba(20, 16, 14, 0.14));
	--tssf-principal: var(--tss-ink, #14100e);
	--tssf-secundario: var(--tss-plum, #775c46);
	--tssf-texto: var(--tss-ink, #14100e);
	--tssf-suave: var(--tss-plum-soft, #6a5a4c);
	--tssf-acento: var(--tss-gold, #c6a67d);
	--tssf-franja: var(--tss-plum, #775c46);
	--tssf-beige: var(--tss-sand, #dfcbb3);
	--tssf-beige-hover: var(--tss-peach, #edccb9);
	--tssf-escena: var(--tss-ink, #14100e);   /* el negro de los vídeos y el directo */

	/* Botón negro de píldora, como el de la portada. */
	--tssf-boton: #000000;
	--tssf-boton-hover: #241c17;
	--tssf-boton-texto: var(--tss-accent-contrast, #f9f2ed);

	--tssf-radio: var(--tss-radius, 14px);
	--tssf-fuente-titulos: var(--tss-font-display, "Playfair Display", Georgia, serif);
	--tssf-fuente-texto: var(--tss-font-body, "Jost", "Century Gothic", sans-serif);

	--tssf-ancho: 1180px;
	--tssf-margen: clamp(1.25rem, 4vw, 3rem);
}


/* El área de formación lleva su propio fondo y letra, sea cual sea el tema. */
.tssf {
	background: var(--tssf-fondo);
	color: var(--tssf-texto);
	font: 400 1rem/1.7 var(--tssf-fuente-texto);
	-webkit-font-smoothing: antialiased;
}

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

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

/*
 * Los enlaces sueltos heredan el color del texto. Va con :where() para que
 * pese poco: si el enlace tiene su clase (botón, enlace con flecha…), manda
 * la clase. Antes esta regla ganaba y los botones salían del color del fondo.
 */
.tssf :where(a) {
	color: inherit;
}

/*
 * El margen de los párrafos, por el mismo motivo que el color de los enlaces:
 * con `.tssf p` esta regla pesaba MÁS que cualquier clase, así que un párrafo
 * con su propia clase no podía ni centrarse (`margin: 0 auto` se lo comía
 * esta) ni pegarse al fondo de una tarjeta. Con :where() pesa lo mismo que
 * una clase y manda la que venga después: la del elemento.
 */
.tssf :where(p) {
	margin: 0 0 1.2rem;
}

.tssf strong {
	font-weight: 400;
}

.tssf .tssf-ui-texto strong,
.tssf .tssf-ui-texto b {
	font-weight: 600;
}

.tssf :focus-visible {
	outline: 1px solid var(--tssf-acento);
	outline-offset: 4px;
}

.tssf .screen-reader-text {
	position: absolute;
	width: 1px;
	height: 1px;
	overflow: hidden;
	clip-path: inset(50%);
	white-space: nowrap;
}

.tssf-ui-contenedor {
	max-width: var(--tssf-ancho);
	margin-inline: auto;
	padding-inline: var(--tssf-margen);
}

.tssf-ui-contenedor--estrecho {
	max-width: 46rem;
}

.tssf-ui-seccion {
	padding-block: clamp(2.75rem, 5vw, 4rem);
}

/* ------------------------------------------------------------------
   Tipografía
------------------------------------------------------------------ */

.tssf-ui-antetitulo {
	margin: 0 0 1.1rem;
	font: 400 .7rem/1.5 var(--tssf-fuente-texto);
	letter-spacing: .38em;
	text-transform: uppercase;
	color: var(--tssf-principal);
}

.tssf-ui-titulo {
	margin: 0 0 1.4rem;
	font: 500 clamp(2.1rem, 3.6vw, 3rem)/1.1 var(--tssf-fuente-titulos);
	color: var(--tssf-principal);
}

.tssf-ui-subtitulo {
	margin: 2.2rem 0 .6rem;
	font: 400 .7rem/1.5 var(--tssf-fuente-texto);
	letter-spacing: .3em;
	text-transform: uppercase;
	color: var(--tssf-principal);
}

.tssf-ui-texto > p {
	max-width: 34rem;
}

.tssf-ui-cabezal {
	margin: 0 auto clamp(1.75rem, 3vw, 2.5rem);
	text-align: center;
}

.tssf-ui-cabezal__texto {
	max-width: 34rem;
	margin: 0 auto;
}

.tssf-ui-enlace {
	display: inline-flex;
	align-items: center;
	gap: .9rem;
	padding: .4rem 0;
	font: 400 .7rem/1 var(--tssf-fuente-texto);
	letter-spacing: .3em;
	text-transform: uppercase;
	text-decoration: none;
	color: var(--tssf-principal);
}

.tssf-ui-boton {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: .9rem;
	padding: 1.05rem 2rem;
	border: 0;
	border-radius: var(--tssf-radio, 1px);
	background: var(--tssf-boton);
	color: var(--tssf-boton-texto);
	font: 400 .7rem/1 var(--tssf-fuente-texto);
	letter-spacing: .3em;
	text-transform: uppercase;
	text-decoration: none;
	cursor: pointer;
	transition: background-color .25s ease;
}

.tssf-ui-boton:hover {
	background: var(--tssf-boton-hover);
}

.tssf-ui-puntos {
	margin: 0 0 2rem;
	padding: 0;
	list-style: none;
}

.tssf-ui-puntos li {
	position: relative;
	padding: .75rem 0 .75rem 1.6rem;
	border-bottom: 1px solid var(--tssf-linea);
	font-size: .95rem;
	line-height: 1.65;
}

.tssf-ui-puntos li::before {
	content: "";
	position: absolute;
	top: 1.5rem;
	left: 0;
	width: .6rem;
	height: 1px;
	background: var(--tssf-acento);
}

.tssf-ui-puntos strong {
	display: block;
	font: 500 1.2rem/1.3 var(--tssf-fuente-titulos);
	color: var(--tssf-principal);
}

/* Curso sin foto. */
.tssf-ui-pendiente {
	position: absolute;
	bottom: 1.5rem;
	left: 50%;
	transform: translateX(-50%);
	padding: .5rem .9rem;
	border: 1px dashed rgba(255, 255, 255, .75);
	font: 400 .6rem/1 var(--tssf-fuente-texto);
	letter-spacing: .3em;
	text-transform: uppercase;
	white-space: nowrap;
	color: rgba(255, 255, 255, .9);
}

/* ------------------------------------------------------------------
   Tarjetas del catálogo

   Venía de Respiración Completa con columnas a pantalla completa —foto a
   sangre, velo y el resumen escondido hasta pasar el cursor—, que con uno o
   dos cursos se agigantaban. Son tarjetas: foto arriba, texto debajo y botón
   al pie, con la misma forma que las de la portada del sitio.
------------------------------------------------------------------ */

.tssf-ui-servicios {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr));
	gap: clamp(1.5rem, 3vw, 2.5rem);
	max-width: var(--tssf-ancho);
	margin: 0 auto;
	padding: 0 var(--tssf-margen) clamp(3rem, 6vw, 4.5rem);
}

/* Como mucho tres por fila: a partir de ahí las fotos se hacen sellos. */
@media (min-width: 62rem) {
	.tssf-ui-servicios {
		grid-template-columns: repeat(auto-fit, minmax(18rem, 22rem));
		justify-content: center;
	}
}

.tssf-ui-servicio {
	position: relative;
	display: flex;
	flex-direction: column;
	text-align: center;
	cursor: pointer;
}

.tssf-ui-servicio__foto {
	width: 100%;
	height: auto;
	aspect-ratio: 4 / 3;
	margin: 0 0 1.1rem;
	border-radius: var(--tssf-radio);
	object-fit: cover;
	object-position: center;
	transition: transform .6s cubic-bezier(.2, .7, .2, 1);
}

@media (hover: hover) {
	.tssf-ui-servicio:hover .tssf-ui-servicio__foto {
		transform: scale(1.02);
	}
}

.tssf-ui-servicio__texto {
	display: flex;
	flex: 1;
	flex-direction: column;
	align-items: center;
}

.tssf-ui-servicio__titulo {
	margin: 0 0 .5rem;
	font: 500 clamp(1.6rem, 2.4vw, 2rem)/1.15 var(--tssf-fuente-titulos);
	letter-spacing: -.005em;
	color: var(--tssf-principal);
}

.tssf-ui-servicio__resumen {
	max-width: 24rem;
	margin: 0 0 .9rem;
	font-size: .95rem;
	line-height: 1.8;
}

/* Cuando el curso no tiene foto puesta. */
.tssf-ui-servicio .tssf-ui-pendiente {
	display: block;
	margin: 0 0 1.1rem;
	padding: 3rem 1rem;
	border: 1px dashed var(--tssf-linea);
	border-radius: var(--tssf-radio);
	color: var(--tssf-suave);
}

/* ------------------------------------------------------------------
   Formularios y avisos
------------------------------------------------------------------ */

.tssf-ui-form {
	display: grid;
	gap: .8rem;
}

.tssf-ui-form__fila {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: .8rem;
}

.tssf-ui-campo input,
.tssf-ui-campo textarea,
.tssf-ui-campo select {
	display: block;
	width: 100%;
	padding: .9rem 1rem;
	border: 1px solid var(--tssf-linea);
	border-radius: var(--tssf-radio, 2px);
	background: color-mix(in srgb, var(--tssf-tarjeta, #fff) 60%, transparent);
	font: 300 .92rem/1.5 var(--tssf-fuente-texto);
	color: var(--tssf-texto);
	transition: border-color .2s ease, background-color .2s ease;
}

.tssf-ui-campo select {
	padding-right: 2.6rem;
	background: color-mix(in srgb, var(--tssf-tarjeta, #fff) 60%, transparent) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8'%3E%3Cpath d='M1 1.5l5 5 5-5' fill='none' stroke='%236a5a4c' stroke-width='1.2'/%3E%3C/svg%3E") no-repeat right 1rem center / .75rem;
	appearance: none;
	cursor: pointer;
}

.tssf-ui-campo select:invalid,
.tssf-ui-campo ::placeholder {
	color: var(--tssf-suave);
	opacity: 1;
}

.tssf-ui-campo textarea {
	min-height: 9.5rem;
	resize: vertical;
}

.tssf-ui-campo input:focus,
.tssf-ui-campo textarea:focus,
.tssf-ui-campo select:focus {
	border-color: var(--tssf-principal);
	background-color: var(--tssf-tarjeta);
	outline: none;
	box-shadow: 0 0 0 2px color-mix(in srgb, var(--tssf-principal) 25%, transparent);
}

/* Casilla y botón en la misma fila. */
.tssf-ui-form__envio {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: 1rem 1.5rem;
	margin-top: .3rem;
}

.tssf-ui-form__envio .tssf-ui-check {
	margin: 0;
}

.tssf-ui-form__envio .tssf-ui-boton {
	padding: .85rem 1.6rem;
}

.tssf-ui-check {
	display: flex;
	align-items: flex-start;
	gap: .65rem;
	margin: .3rem 0 .6rem;
	font-size: .84rem;
	line-height: 1.5;
}

.tssf-ui-check input {
	flex: none;
	width: 1rem;
	height: 1rem;
	margin: .15rem 0 0;
	accent-color: var(--tssf-boton);
}

.tssf-ui-aviso {
	margin: 0 0 .5rem;
	padding: .9rem 1.1rem;
	border-left: 2px solid var(--tssf-secundario);
	background: color-mix(in srgb, var(--tssf-secundario) 9%, transparent);
	font-size: .9rem;
	color: var(--tssf-principal);
}

.tssf-ui-aviso--error {
	border-left-width: 4px;
	font-weight: 500;
	border-color: var(--tssf-principal);
	background: color-mix(in srgb, var(--tssf-acento) 9%, transparent);
}

@media (max-width: 520px) {
	.tssf-ui-form__fila {
		grid-template-columns: 1fr;
	}
}

