/*
Theme Name: Casa de Oficios Podcast
Theme URI: https://github.com/
Author: Fondart Iquique
Author URI: https://github.com/
Description: Tema de bloques (FSE) para el Centro Cultural Casa de Oficios y su podcast, financiado por Fondart Iquique. Construido con templates HTML y theme.json, sin PHP en las plantillas.
Requires at least: 6.4
Tested up to: 6.6
Requires PHP: 7.4
Version: 1.6.2
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Text Domain: casa-oficios-podcast
Tags: full-site-editing, block-theme, one-column
*/

/* ════════════════════════════════════════════════════════════
   CASA DE OFICIOS · PODCAST
   Sistema de diseño — Fondart Iquique
   Paleta extraída del imagotipo real del cliente
   ════════════════════════════════════════════════════════════ */

/* ─── FUENTES ───
   Declaradas SOLO en theme.json (settings.typography.fontFamilies):
   WordPress las imprime en el <head> vía wp_print_font_faces y así valen
   también para el editor. No duplicar acá con @font-face — la versión
   anterior además apuntaba al .ttc, que WP rechaza (mime no permitido)
   y los navegadores no soportan en @font-face: PT Sans nunca cargó. */

/* ─── TOKENS ─── */
:root {
  /* Paleta oficial del cliente — extraída de los PNG */
  /* Fuente: ImagotipoPodcast-color.png + LogoCasaDeOficios-colores4.png */
  --terracota: #9c4041; /* micro top, hojas, isotipo chakana */
  --terracota-deep: #430303; /* borde chakana, base, títulos contrast */
  --terracota-soft: #c1764a; /* sol central isotipo, marrón anaranjado */
  --oliva: #7d8023; /* micro bottom, hojas olivo */
  --oliva-soft: #97a25b;
  --naranja: #f29100; /* sol del imagotipo, acento cálido */
  --naranja-soft: #f7b04a;
  --tan: #e9d7ba; /* fondo del micro, beige cálido */
  --tan-light: #f0e4cd;
  --marron-medio: #7a5434; /* montaña media */
  --marron-oscuro: #532f1a; /* montaña oscura, tipografía principal */
  --marron-tipografia: #532f1a;
  --ink: #2a1f18; /* texto crítico, footer */
  --cream: #f5efe3; /* fondo página (derivado del tan) */
  --cream-2: #ece4d2;
  --paper: #fbf6ec;

  /* Tipografía */
  --display: "TT Hoves Pro", "Inter", system-ui, sans-serif;
  --body: "PT Sans", "Segoe UI", system-ui, sans-serif;

  /* Sistema */
  --radius: 14px;
  --radius-sm: 8px;
  --radius-lg: 22px;
  --shadow-soft: 0 6px 24px -10px rgba(83, 47, 26, 0.18);
  --shadow-card: 0 14px 40px -18px rgba(83, 47, 26, 0.28);
  --shadow-glow: 0 10px 32px -10px rgba(242, 145, 0, 0.45);
  --shadow-hover: 0 20px 50px -16px rgba(156, 64, 65, 0.35);

  --wrap: 1240px;
  --gutter: 28px;
}

/* ─── RESET ─── */
*,
*::before,
*::after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}
html {
  scroll-behavior: smooth;
}
body {
  font-family: var(--body);
  background: var(--cream);
  color: var(--marron-tipografia);
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  font-size: 16px;
}
img,
svg {
  display: block;
  max-width: 100%;
}
a {
  color: inherit;
  text-decoration: none;
}
button {
  font: inherit;
  cursor: pointer;
  border: none;
  background: none;
  color: inherit;
}
ul {
  list-style: none;
}
::selection {
  background: var(--terracota);
  color: var(--cream);
}

.wrap {
  max-width: var(--wrap);
  margin: 0 auto;
  padding: 0 var(--gutter);
}

/* ════════════════════════════════════════════════════════════
   TIPOGRAFÍA
   ════════════════════════════════════════════════════════════ */
.kicker {
  font-family: var(--body);
  font-size: 11.5px;
  font-weight: 700;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--terracota);
  display: inline-flex;
  align-items: center;
  gap: 10px;
}
.kicker::before {
  content: "";
  width: 28px;
  height: 1.5px;
  background: var(--terracota);
}
.section-title {
  font-family: var(--display);
  font-weight: 600;
  font-size: clamp(36px, 5.2vw, 64px);
  line-height: 0.98;
  color: var(--marron-tipografia);
  letter-spacing: -0.005em;
  text-transform: uppercase;
}
.section-title em {
  font-style: normal;
  color: var(--terracota);
  display: block;
}
.section-desc {
  font-size: 16.5px;
  line-height: 1.7;
  color: var(--marron-medio);
  max-width: 56ch;
}

/* ════════════════════════════════════════════════════════════
   NAV
   ════════════════════════════════════════════════════════════ */
.nav {
  position: sticky;
  top: 0;
  z-index: 50;
  border-bottom: 1px solid rgba(156, 63, 53, 0.18);
}
/* El fondo esmerilado va acá y NO en `.nav` por una razón concreta: un
   `backdrop-filter` distinto de `none` convierte al elemento en bloque
   contenedor de sus descendientes `position: fixed`. El overlay del menú móvil
   de WordPress es exactamente `fixed; inset: 0`, así que colgado de `.nav` se
   recortaba al alto de la barra: medía 390×52 en vez de 390×844. La lista de
   links (176px) no entraba y, como el overlay lleva `overflow: auto`, el menú
   quedaba como una tira scrolleable de una línea.
   En un pseudo-elemento el efecto es idéntico y el overlay vuelve a medir
   contra el viewport. */
.nav::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  background: rgba(245, 239, 227, 0.92);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
}
.nav-inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  /* solo vertical: el horizontal viene de .wrap (padding: 0 var(--gutter));
     un shorthand `12px 0` acá lo pisaba y los links tocaban el borde */
  padding-top: 12px;
  padding-bottom: 12px;
  gap: 24px;
}
.nav-brand {
  display: flex;
  align-items: center;
  gap: 10px;
  font-family: var(--display);
  font-weight: 600;
  font-size: 12px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--marron-tipografia);
}
.nav-brand img {
  width: 28px;
  height: 28px;
  object-fit: contain;
}
.nav-links {
  display: flex;
  gap: 30px;
  align-items: center;
}
.nav-links a {
  font-family: var(--body);
  font-size: 14px;
  font-weight: 700;
  letter-spacing: 0.04em;
  color: var(--marron-tipografia);
  padding: 6px 0;
  position: relative;
  transition: color 0.2s;
}
.nav-links a::after {
  content: "";
  position: absolute;
  left: 50%;
  bottom: 0;
  width: 0;
  height: 2px;
  background: var(--terracota);
  transform: translateX(-50%);
  transition: width 0.25s ease;
}
.nav-links a:hover {
  color: var(--terracota);
}
.nav-links a:hover::after {
  width: 100%;
}

/* ---- Menú desplegado en celular ----
   El overlay solo existe bajo 600px (`overlayMenu: "mobile"`), así que no hace
   falta media query. Sin estas reglas sale con los defaults de core —fondo
   blanco, texto negro de 16px, pegado al borde— que no se parece en nada al
   resto del sitio. */
.nav-links .wp-block-navigation__responsive-container.is-menu-open {
  background: var(--cream);
  padding: 22px var(--gutter) 40px;
}
.nav-links .is-menu-open .wp-block-navigation__responsive-container-content {
  padding-top: 58px;
}
.nav-links .is-menu-open .wp-block-navigation__container {
  gap: 0;
  width: 100%;
}
.nav-links .is-menu-open .wp-block-navigation-item {
  width: 100%;
  border-bottom: 1px solid rgba(156, 63, 53, 0.14);
}
.nav-links .is-menu-open .wp-block-navigation-item:last-child {
  border-bottom: 0;
}
.nav-links .is-menu-open .wp-block-navigation-item a {
  display: block;
  width: 100%;
  font-family: var(--display);
  font-size: 24px;
  font-weight: 700;
  letter-spacing: 0.01em;
  color: var(--marron-tipografia);
  /* 17px arriba y abajo dejan el área de toque por encima de los 44px */
  padding: 17px 0;
}
.nav-links .is-menu-open .wp-block-navigation-item a::after {
  /* el subrayado animado está pensado para la nav horizontal */
  content: none;
}
.nav-links .wp-block-navigation__responsive-container-close {
  color: var(--terracota);
}

/* ════════════════════════════════════════════════════════════
   HERO
   ════════════════════════════════════════════════════════════ */
.hero {
  position: relative;
  padding: 80px 0 100px;
  background:
    radial-gradient(
      ellipse at top right,
      rgba(232, 153, 64, 0.1),
      transparent 50%
    ),
    radial-gradient(
      ellipse at bottom left,
      rgba(123, 133, 64, 0.1),
      transparent 55%
    ),
    var(--cream);
  overflow: hidden;
}
/* El divisor de montañas se sacó de la portada: ensuciaba el borde inferior de
   la foto principal. Sigue en uso en .contacto y en el bloque del podcast. */
.hero-grid {
  display: grid;
  grid-template-columns: 1.05fr 1fr;
  gap: 60px;
  align-items: center;
  position: relative;
  z-index: 1;
}
.hero-mark {
  position: relative;
  display: flex;
  justify-content: center;
  align-items: center;
  width: 100%;
  max-width: 360px;
  margin: 0 auto;
  aspect-ratio: 1 / 1;
}
.hero-mark img {
  width: 100%;
  height: auto;
  /* Recorta sólo el wordmark «CASA DE OFICIOS» del PNG institucional. Medido
     sobre el archivo (881 px de alto): el isotipo va de y=119 a y=661 (75,1%)
     y el wordmark arranca en y=682 (77,4%). El corte al 77% cae en ese hueco.
     Con el 32% anterior caía dentro de la greca y el logo se veía mochado. */
  clip-path: inset(0 0 23% 0);
  filter: drop-shadow(0 20px 40px rgba(94, 53, 37, 0.22));
  animation: float 8s ease-in-out infinite;
}
@keyframes float {
  0%,
  100% {
    transform: translateY(0);
  }
  50% {
    transform: translateY(-10px);
  }
}
.hero-mark::after {
  content: "";
  position: absolute;
  inset: 60% 12% 0 12%;
  background: radial-gradient(ellipse, rgba(156, 63, 53, 0.2), transparent 70%);
  filter: blur(20px);
  z-index: -1;
}
.hero-text {
  position: relative;
}
.hero-pretitle {
  display: flex;
  align-items: center;
  gap: 14px;
  margin-bottom: 28px;
}
.hero-cta {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
}
/* wrappers de wp:button — solo layout, sin estilos visuales */
.btn-primary.wp-block-button,
.btn-ghost.wp-block-button {
  margin: 0;
}
/* base compartida — aplicada al enlace real, no al wrapper */
.btn-primary .wp-block-button__link,
.btn-ghost .wp-block-button__link {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  font-family: var(--body);
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  padding: 14px 24px;
  border: none;
  border-radius: 100px;
  transition: all 0.22s ease;
  cursor: pointer;
}
.btn-primary .wp-block-button__link {
  background: var(--terracota);
  color: var(--cream);
  box-shadow: 0 6px 18px -6px rgba(156, 63, 53, 0.5);
}
.btn-primary .wp-block-button__link:hover {
  background: var(--terracota-deep);
  transform: translateY(-2px);
  box-shadow:
    0 12px 28px -8px rgba(156, 63, 53, 0.65),
    0 0 0 4px rgba(232, 153, 64, 0.18);
}
.btn-ghost .wp-block-button__link {
  background: transparent;
  color: var(--marron-tipografia);
  border: 1.5px solid var(--marron-tipografia);
}
.btn-ghost .wp-block-button__link:hover {
  background: var(--marron-tipografia);
  color: var(--cream);
  transform: translateY(-2px);
}

/* Los <button> de los formularios (inscripción, lista de espera y contacto)
   llevan .btn .btn-primary directamente en el elemento, no envuelto en un
   wp:button. Sin estas reglas quedaban como texto plano: todas las de arriba
   piden un .wp-block-button__link descendiente que en un <button> no existe. */
button.btn {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  font-family: var(--body);
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  padding: 14px 24px;
  border: none;
  border-radius: 100px;
  transition: all 0.22s ease;
  cursor: pointer;
}
button.btn-primary {
  background: var(--terracota);
  color: var(--cream);
  box-shadow: 0 6px 18px -6px rgba(156, 63, 53, 0.5);
}
button.btn-primary:hover:not(:disabled) {
  background: var(--terracota-deep);
  transform: translateY(-2px);
  box-shadow:
    0 12px 28px -8px rgba(156, 63, 53, 0.65),
    0 0 0 4px rgba(232, 153, 64, 0.18);
}
/* Mientras se envía, view.js lo deshabilita y le pone "Enviando…". */
button.btn:disabled {
  opacity: 0.6;
  cursor: progress;
  transform: none;
}

/* ════════════════════════════════════════════════════════════
   SECCIÓN GENÉRICA
   ════════════════════════════════════════════════════════════ */
section {
  padding: 110px 0;
  position: relative;
}
.section-head {
  display: grid;
  grid-template-columns: 1fr 2fr;
  gap: 60px;
  align-items: end;
  margin-bottom: 70px;
  padding-bottom: 36px;
  border-bottom: 1.5px solid rgba(156, 63, 53, 0.2);
  position: relative;
}
.section-head::after {
  content: "";
  position: absolute;
  left: 0;
  bottom: -1.5px;
  width: 80px;
  height: 3px;
  background: var(--terracota);
}
.section-head .kicker {
  margin-bottom: 14px;
}

/* ─── OLIVE LEAF DECO ─── */
.olive-deco {
  display: flex;
  align-items: center;
  gap: 18px;
  margin: 0 auto 50px;
  color: var(--oliva);
  max-width: 320px;
  opacity: 0.7;
}
.olive-deco img {
  width: 18px;
  height: 18px;
  object-fit: contain;
}
.olive-deco .line {
  flex: 1;
  height: 1.5px;
  background: var(--oliva);
  opacity: 0.4;
}

/* ════════════════════════════════════════════════════════════
   TALLERES — Cards
   ════════════════════════════════════════════════════════════ */
.talleres {
  background: var(--cream);
}

/* ════════════════════════════════════════════════════════════
   EQUIPO / STAFF — Cards
   ════════════════════════════════════════════════════════════ */
.equipo {
  background: var(--paper);
}
.staff {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 22px;
}
.staff-card {
  background: var(--cream);
  border-radius: var(--radius);
  padding: 28px 24px;
  position: relative;
  box-shadow: var(--shadow-soft);
  border: 1px solid rgba(156, 63, 53, 0.08);
  transition: all 0.3s;
}
.staff-card:hover {
  transform: translateY(-4px);
  box-shadow: var(--shadow-hover);
}
.staff-role {
  font-family: var(--body);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--terracota);
  margin-bottom: 10px;
  display: flex;
  align-items: center;
  gap: 8px;
}
.staff-role::before {
  content: "";
  width: 18px;
  height: 1.5px;
  background: var(--terracota);
}
.staff-name {
  font-family: var(--display);
  font-weight: 600;
  font-size: 22px;
  line-height: 1.1;
  color: var(--marron-tipografia);
  text-transform: uppercase;
}
.staff-name + .staff-name {
  margin-top: 4px;
  color: var(--terracota);
}

/* Tarjeta dinámica (bloque casa-oficios/equipo-grid) — foto, descripción
   y tarjeta fija de cierre. La foto es la imagen destacada del integrante;
   mientras no haya foto se muestran las iniciales sobre un fondo cálido. */
.staff-photo {
  aspect-ratio: 4 / 5;
  border-radius: calc(var(--radius) - 6px);
  overflow: hidden;
  margin-bottom: 18px;
  background: linear-gradient(
    135deg,
    rgba(247, 176, 74, 0.28),
    rgba(156, 64, 65, 0.12)
  );
}
.staff-photo img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.staff-inicial {
  display: grid;
  place-items: center;
  width: 100%;
  height: 100%;
  font-family: var(--display);
  font-weight: 600;
  font-size: 52px;
  letter-spacing: 0.06em;
  color: var(--terracota);
}
.staff-desc {
  margin-top: 10px;
  font-size: 14px;
  line-height: 1.55;
  color: var(--marron-medio);
  display: -webkit-box;
  -webkit-line-clamp: 5;
  line-clamp: 5;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
/* Cierre fijo de la grilla: invitación en terracota que baja a #contacto. */
.staff-cta {
  display: block;
  background: var(--terracota);
  text-decoration: none;
}
.staff-cta .staff-role {
  color: var(--naranja-soft);
}
.staff-cta .staff-role::before {
  background: var(--naranja-soft);
}
.staff-cta .staff-name {
  color: var(--cream);
  font-size: 19px;
}

/* ════════════════════════════════════════════════════════════
   CONTACTO
   ════════════════════════════════════════════════════════════ */
.contacto {
  background:
    radial-gradient(
      ellipse at top right,
      rgba(232, 153, 64, 0.08),
      transparent 50%
    ),
    radial-gradient(
      ellipse at bottom left,
      rgba(123, 133, 64, 0.1),
      transparent 50%
    ),
    var(--cream);
  position: relative;
}
.contacto::before {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 100px;
  background: url("assets/svg/mountain-divider.svg") center top / 100% 100%
    no-repeat;
  color: var(--terracota);
  opacity: 0.4;
  pointer-events: none;
}
.contact-grid {
  display: grid;
  grid-template-columns: 1fr 1.3fr;
  gap: 70px;
  align-items: start;
  position: relative;
  z-index: 1;
}
.contact-info {
  display: flex;
  flex-direction: column;
  gap: 28px;
}
.contact-info .row {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.contact-info .label {
  font-family: var(--body);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--terracota);
  display: flex;
  align-items: center;
  gap: 8px;
}
.contact-info .label::before {
  content: "";
  width: 18px;
  height: 1.5px;
  background: var(--terracota);
}
.contact-info .value {
  font-family: var(--display);
  font-weight: 600;
  font-size: 22px;
  line-height: 1.2;
  color: var(--marron-tipografia);
  text-transform: uppercase;
}
.contact-info .value a {
  border-bottom: 1.5px solid transparent;
  transition: border-color 0.2s;
}
.contact-info .value a:hover {
  border-color: var(--terracota);
  color: var(--terracota);
}

.form {
  background: var(--paper);
  border-radius: var(--radius-lg);
  padding: 40px;
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 22px;
  box-shadow: var(--shadow-card);
  border: 1px solid rgba(156, 63, 53, 0.1);
  position: relative;
}
.form::before {
  content: "";
  position: absolute;
  top: -10px;
  left: 40px;
  width: 80px;
  height: 4px;
  background: linear-gradient(90deg, var(--terracota), var(--naranja));
  border-radius: 0 0 4px 4px;
}
.form .field {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.form .field.full {
  grid-column: 1 / -1;
}
/* El `display: flex` de `.form .field` (0,2,0) le gana al `[hidden] { display:
   none }` del navegador (0,1,0), así que un campo marcado como oculto seguía
   ocupando lugar. Por eso #campoPropuesta (la subida de dossier) se veía
   siempre, incluso en la pestaña "Consulta general": view.js hace
   `campoPropuesta.hidden = ...` y el CSS lo ignoraba. */
.form .field[hidden] {
  display: none;
}
.form label {
  font-family: var(--body);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--terracota);
}
.form input,
.form textarea {
  font-family: var(--body);
  font-size: 16px;
  color: var(--marron-tipografia);
  background: var(--cream);
  border: 1.5px solid rgba(156, 63, 53, 0.2);
  border-radius: var(--radius-sm);
  padding: 14px 18px;
  outline: none;
  transition: all 0.2s;
  width: 100%;
}
.form input::placeholder,
.form textarea::placeholder {
  color: rgba(124, 74, 42, 0.4);
  font-style: italic;
}
.form input:focus,
.form textarea:focus {
  border-color: var(--terracota);
  background: var(--cream);
  box-shadow: 0 0 0 4px rgba(242, 145, 0, 0.18);
}
.form textarea {
  resize: vertical;
  min-height: 130px;
  grid-column: 1 / -1;
}
.form .submit {
  grid-column: 1 / -1;
  margin-top: 4px;
}

/* ════════════════════════════════════════════════════════════
   FONDART / FOOTER
   ════════════════════════════════════════════════════════════ */
.fondart {
  background: var(--ink);
  color: var(--cream);
  padding: 50px 0;
  border-top: 1px solid var(--marron-tipografia);
}
.fondart-inner {
  display: grid;
  grid-template-columns: 1fr 1.4fr;
  gap: 50px;
  align-items: center;
}
.fondart-text {
  font-family: var(--body);
  font-size: 13.5px;
  line-height: 1.7;
  color: rgba(245, 239, 227, 0.8);
}
.fondart-text b {
  color: var(--naranja-soft);
  font-weight: 700;
  display: block;
  font-size: 16px;
  margin: 4px 0;
}
.fondart-logos {
  display: flex;
  gap: 16px;
  flex-wrap: wrap;
}
.fondart-logos .logo-slot {
  flex: 1;
  min-width: 140px;
  height: 88px;
  display: flex;
  align-items: center;
  justify-content: center;
}
figure.logo-slot {
  margin: 0;
}
.fondart-logos .logo-slot img {
  max-height: 76px;
  width: auto;
  max-width: 100%;
  object-fit: contain;
}

footer {
  background: var(--ink);
  color: var(--cream);
  padding: 60px 0 30px;
  border-top: 1px solid rgba(245, 239, 227, 0.1);
}
/* WP envuelve la template part en un <footer> extra: sin este reset, el
   selector de arriba duplica borde y padding (doble línea antes del footer) */
footer.wp-block-template-part {
  background: none;
  padding: 0;
  border-top: none;
}
.footer-grid {
  display: grid;
  grid-template-columns: 1.4fr 1fr 1fr 1fr;
  gap: 40px;
  margin-bottom: 50px;
}
.footer-brand {
  display: flex;
  flex-direction: column;
  gap: 16px;
  align-items: flex-start;
}
.footer-brand img {
  width: 52px;
  height: 52px;
  object-fit: contain;
  filter: brightness(0) invert(1);
  opacity: 0.92;
}
.footer-brand .name {
  font-family: var(--display);
  font-weight: 600;
  font-size: 22px;
  line-height: 1;
  text-transform: uppercase;
  color: var(--cream);
}
.footer-brand .name b {
  color: var(--naranja-soft);
  font-weight: 600;
}
.footer-brand .tag {
  font-family: var(--body);
  font-style: italic;
  font-size: 13.5px;
  line-height: 1.55;
  color: rgba(245, 239, 227, 0.7);
  max-width: 32ch;
}
.footer-col h5 {
  font-family: var(--body);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--naranja-soft);
  margin-bottom: 18px;
  display: flex;
  align-items: center;
  gap: 8px;
}
.footer-col h5::before {
  content: "";
  width: 18px;
  height: 1.5px;
  background: var(--naranja-soft);
}
.footer-col ul li {
  padding: 5px 0;
  font-size: 13.5px;
  color: rgba(245, 239, 227, 0.8);
  transition: color 0.2s;
  cursor: pointer;
}
.footer-col ul li:hover {
  color: var(--naranja-soft);
}
.footer-col ul li a {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.footer-col ul li a::after {
  content: "↗";
  font-size: 11px;
  opacity: 0.6;
}
.footer-bottom {
  border-top: 1px solid rgba(245, 239, 227, 0.1);
  padding-top: 24px;
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-family: var(--body);
  font-size: 11.5px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: rgba(245, 239, 227, 0.5);
}
.footer-bottom .deco {
  display: flex;
  align-items: center;
  gap: 12px;
  color: var(--oliva-soft);
}
.footer-bottom .deco img {
  width: 50px;
  height: 16px;
  opacity: 0.6;
  /* El SVG usa stroke="currentColor", que dentro de un <img> resuelve a
     NEGRO (no hereda del CSS) — sobre el footer oscuro la hoja era
     invisible. Mismo truco que .footer-brand img: pasarla a crema. */
  filter: brightness(0) invert(1);
}

/* ════════════════════════════════════════════════════════════
   RESPONSIVE
   ════════════════════════════════════════════════════════════ */
@media (max-width: 980px) {
  /* Ojo: NO esconder .nav-links acá — el burger responsive de WordPress
     (overlayMenu:"mobile", breakpoint 600px) vive DENTRO del <nav
     class="nav-links">, así que un display:none deja al sitio sin ningún
     menú entre 600 y 980px. Solo compactamos los links. */
  .nav-links {
    gap: 18px;
  }
  .nav-links a {
    font-size: 13px;
  }
  .hero {
    padding: 50px 0 80px;
  }
  .hero-grid {
    grid-template-columns: 1fr;
    gap: 40px;
  }
  .hero-mark {
    order: -1;
  }
  .hero-mark img {
    max-width: 280px;
  }
  .section-head {
    grid-template-columns: 1fr;
    gap: 24px;
  }
  .contact-grid,
  .fondart-inner,
  .footer-grid {
    grid-template-columns: 1fr;
    gap: 40px;
  }
  .staff {
    grid-template-columns: 1fr;
  }
  .form {
    grid-template-columns: 1fr;
    padding: 30px 24px;
  }
  .form textarea {
    grid-column: auto;
  }
  section {
    padding: 70px 0;
  }
  .footer-bottom {
    flex-direction: column;
    gap: 12px;
    text-align: center;
  }
}
@media (max-width: 700px) {
  /* El título del sitio es un <p class="wp-block-site-title">, no un span
     (la regla vieja apuntaba a un span del prototipo y no matcheaba nada).
     Corte en 700px: entre 600 (burger de WP) y 700, brand completo + los
     5 links no caben en el ancho — solo queda el logo. */
  .nav-brand .wp-block-site-title {
    display: none;
  }
}
@media (max-width: 560px) {
  .section-title {
    font-size: 36px;
  }
}

/* ============================================================
   TIMELINE — Línea de tiempo del oficio
   ============================================================ */

.cat-filters {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-bottom: 32px;
}
.cat-chip {
  font-family: var(--body);
  font-size: 11.5px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  padding: 8px 15px;
  border-radius: 100px;
  border: 1.5px solid var(--line-strong);
  background: transparent;
  color: var(--marron-tipografia);
  cursor: pointer;
  transition: all 0.2s ease;
}
.cat-chip:hover {
  border-color: var(--terracota);
  color: var(--terracota);
}
.cat-chip.active {
  background: var(--terracota);
  border-color: var(--terracota);
  color: var(--cream);
}

.timeline {
  list-style: none;
  padding: 0;
  margin: 0;
  position: relative;
  padding-left: 76px;
}
.timeline::before {
  content: "";
  position: absolute;
  left: 28px;
  top: 22px;
  bottom: 22px;
  width: 2px;
  background: repeating-linear-gradient(
    to bottom,
    var(--terracota) 0 6px,
    transparent 6px 12px
  );
  opacity: 0.7;
}
.timeline::after {
  content: "";
  position: absolute;
  left: 18px;
  top: -4px;
  width: 22px;
  height: 22px;
  border-radius: 50%;
  background: var(--cream);
  border: 1.5px solid var(--terracota);
  box-shadow: 0 0 0 4px var(--paper);
}

.tl-item {
  position: relative;
  padding-bottom: 36px;
  animation: tl-fade-in 0.5s ease both;
}
.tl-item:last-child {
  padding-bottom: 0;
}

.tl-marker {
  position: absolute;
  left: -76px;
  top: -2px;
  width: 56px;
  height: 56px;
  border-radius: 50%;
  background: var(--paper);
  border: 1.5px solid var(--terracota-deep);
  display: grid;
  place-items: center;
  text-align: center;
  box-shadow: 0 4px 14px -6px rgba(83, 47, 26, 0.35);
  transition:
    transform 0.22s ease,
    box-shadow 0.22s ease;
  z-index: 1;
}
.tl-item:hover .tl-marker {
  transform: rotate(-4deg) scale(1.06);
  box-shadow: 0 8px 22px -8px rgba(156, 64, 65, 0.5);
}
.tl-marker::before {
  content: "";
  position: absolute;
  inset: 4px;
  border: 1px dashed var(--terracota);
  border-radius: 50%;
  opacity: 0.5;
}
.tl-num {
  font-family: var(--display);
  font-size: 18px;
  font-weight: 600;
  color: var(--terracota-deep);
  line-height: 1;
  position: relative;
  top: 1px;
}
.tl-cat {
  font-family: var(--body);
  font-size: 8px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.12em;
  color: var(--oliva);
  margin-top: 3px;
  line-height: 1;
}

.tl-content {
  background: var(--paper);
  border: 1px solid var(--line);
  border-radius: var(--radius);
  padding: 20px 20px 18px;
  position: relative;
  box-shadow: var(--shadow-soft);
  transition:
    transform 0.22s ease,
    box-shadow 0.22s ease;
}
.tl-content::before {
  content: "";
  position: absolute;
  left: -8px;
  top: 22px;
  width: 0;
  height: 0;
  border-style: solid;
  border-width: 7px 8px 7px 0;
  border-color: transparent var(--paper) transparent transparent;
  filter: drop-shadow(-1px 0 0 var(--line));
}
.tl-item:hover .tl-content {
  transform: translateY(-2px);
  box-shadow: var(--shadow-card);
}

.tl-date {
  display: inline-block;
  font-family: var(--body);
  font-size: 10.5px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.22em;
  color: var(--terracota-deep);
  padding: 5px 12px;
  border-top: 1px solid var(--terracota);
  border-bottom: 1px solid var(--terracota);
  margin-bottom: 12px;
  background: linear-gradient(
    180deg,
    transparent 0,
    transparent 2px,
    rgba(242, 145, 0, 0.06) 2px,
    rgba(242, 145, 0, 0.06) calc(100% - 2px),
    transparent calc(100% - 2px)
  );
}

.tl-content h3 {
  font-size: clamp(22px, 6vw, 28px);
  margin: 0 0 8px;
  letter-spacing: -0.005em;
}
.tl-content p {
  font-size: 14.5px;
  line-height: 1.6;
  color: var(--marron-medio);
  margin: 0;
  text-indent: 1.4em;
}
.tl-content p::first-letter {
  font-family: var(--display);
  font-weight: 600;
  font-size: 1.18em;
  color: var(--terracota);
}

.tl-meta {
  display: block;
  margin-top: 12px;
  padding-top: 10px;
  border-top: 1px dashed var(--line);
  font-size: 12px;
  font-style: italic;
  color: var(--oliva);
  letter-spacing: 0.02em;
}

@keyframes tl-fade-in {
  from {
    opacity: 0;
    transform: translateY(8px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@media (min-width: 900px) {
  .timeline {
    padding-left: 0;
  }
  .timeline::before {
    left: 50%;
    transform: translateX(-50%);
  }
  .timeline::after {
    left: calc(50% - 11px);
  }
  .tl-item {
    display: grid;
    grid-template-columns: 1fr 76px 1fr;
    align-items: start;
    column-gap: 0;
  }
  .tl-marker {
    position: static;
    grid-column: 2;
    grid-row: 1;
    margin: 0 auto;
  }
  .tl-item:nth-child(odd) .tl-content {
    grid-column: 3;
    grid-row: 1;
    margin-left: 24px;
  }
  .tl-item:nth-child(odd) .tl-content::before {
    left: -8px;
    right: auto;
    border-width: 7px 8px 7px 0;
    border-color: transparent var(--paper) transparent transparent;
    filter: drop-shadow(-1px 0 0 var(--line));
  }
  .tl-item:nth-child(even) .tl-content {
    grid-column: 1;
    grid-row: 1;
    margin-right: 24px;
    text-align: right;
  }
  .tl-item:nth-child(even) .tl-content p {
    text-align: right;
  }
  .tl-item:nth-child(even) .tl-content::before {
    left: auto;
    right: -8px;
    border-width: 7px 0 7px 8px;
    border-color: transparent transparent transparent var(--paper);
    filter: drop-shadow(1px 0 0 var(--line));
  }
}

.pager {
  display: flex;
  justify-content: center;
  align-items: center;
  gap: 18px;
  margin-top: 40px;
  padding-top: 24px;
  border-top: 1px dashed var(--line-strong);
}
.pager-btn {
  width: 52px;
  height: 52px;
  border-radius: 50%;
  border: 1.5px solid var(--terracota-deep);
  background: var(--paper);
  color: var(--terracota-deep);
  display: grid;
  place-items: center;
  cursor: pointer;
  transition:
    transform 0.22s ease,
    background 0.22s ease,
    box-shadow 0.22s ease,
    color 0.22s ease;
}
.pager-btn svg {
  width: 20px;
  height: 20px;
}
.pager-btn:hover:not(:disabled) {
  background: var(--terracota);
  color: var(--cream);
  transform: translateY(-2px);
  box-shadow: 0 8px 22px -8px rgba(156, 64, 65, 0.5);
}
.pager-btn:disabled {
  opacity: 0.32;
  cursor: not-allowed;
  border-color: var(--line-strong);
  color: var(--marron-medio);
}

.tl-empty {
  text-align: center;
  padding: 48px 22px;
  font-style: italic;
  font-size: 16px;
  color: var(--marron-medio);
  border: 1px dashed var(--line);
  border-radius: var(--radius);
  background: var(--paper);
  margin-top: 8px;
}
.tl-empty[hidden] {
  display: none;
}

/* ════════════════════════════════════════════════════════════
   COMPONENTES ADICIONALES (desde extra.css)
   Cartelera de talleres, podcast, inscripción, archivo, etc.
   ════════════════════════════════════════════════════════════ */

/* ─── HERO HOME (centro, no podcast) ─── */
/* Ojo: WordPress pone la clase `home` en el <body> de la portada, así que estas
   reglas van scopeadas a `.hero.home` — si no, el padding cae sobre el body y
   empuja el nav hacia abajo (nav más alto solo en la portada). */
.hero.home {
  padding: 56px 0 90px;
}
.hero.home .hero-pretitle {
  margin-bottom: 22px;
}
.home-title {
  font-family: var(--display);
  font-weight: 600;
  font-size: clamp(46px, 9vw, 92px);
  line-height: 0.9;
  color: var(--marron-tipografia);
  text-transform: uppercase;
  letter-spacing: -0.01em;
}
.home-title em {
  font-style: normal;
  display: block;
  color: var(--terracota);
}
.home-intro {
  font-family: var(--body);
  font-size: 17px;
  line-height: 1.7;
  color: var(--marron-medio);
  max-width: 46ch;
  margin: 26px 0 32px;
  padding-left: 18px;
  border-left: 3px solid var(--naranja);
}
.home-intro b {
  color: var(--terracota);
  font-weight: 700;
}

.banner {
  position: relative;
  margin-top: 14px;
  border-radius: var(--radius-lg);
  overflow: hidden;
  aspect-ratio: 16 / 9;
  /* La foto de la puerta de la casa. El degradado terracota queda debajo como
     color de espera mientras la imagen carga, así el hueco nunca se ve blanco.
     Mismo patrón que .podcast-soon: imagen de fondo del tema, con una versión
     liviana para pantallas angostas. */
  background-color: var(--terracota);
  background-image: url("assets/img/espacio-banner.webp");
  background-size: cover;
  background-position: center;
  box-shadow: var(--shadow-card);
  display: flex;
  align-items: center;
  justify-content: center;
}
/* Versión liviana (66 KB vs 241 KB) para pantallas donde la grande no aporta. */
@media (max-width: 700px) {
  .banner {
    background-image: url("assets/img/espacio-banner-sm.webp");
  }
}
.banner .ph-label {
  color: rgba(245, 239, 227, 0.85);
}
/* Sin divisor de montañas encima de la foto: la imagen se muestra limpia. */

/* ---------------------------------------------------------------------------
   Carrusel del hero (bloque casa-oficios/hero-carrusel)
   ---------------------------------------------------------------------------
   El bloque reusa .banner, así que hereda el recuadro 16/9, el radio y la
   sombra. Acá va solo lo que suma el carrusel.

   Las diapositivas se apilan con position:absolute y cruzan por opacidad. Se
   eligió opacidad y no transform porque las fotos tienen proporciones
   distintas (4:3, 3:2, 16:9) y el object-fit:cover las recorta a cada una: un
   desplazamiento lateral dejaría ver los bordes del recorte.

   La foto de fondo que define .banner queda debajo como color de espera, igual
   que antes; con el carrusel cargado no se ve nunca. */
.banner-carrusel .carrusel-pista {
  position: absolute;
  inset: 0;
}
.banner-carrusel .carrusel-slide {
  position: absolute;
  inset: 0;
  margin: 0;
  opacity: 0;
  transition: opacity 700ms ease;
  pointer-events: none;
}
.banner-carrusel .carrusel-slide.es-activa {
  opacity: 1;
  pointer-events: auto;
}
.banner-carrusel .carrusel-foto {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

/* Flechas y puntos: aparecen sobre la foto, con una sombra suave detrás para
   que se lean tanto sobre una foto clara como sobre una oscura. */
.banner-carrusel .carrusel-nav {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  z-index: 2;
  width: 44px;
  height: 44px;
  border: 0;
  border-radius: 50%;
  cursor: pointer;
  background: rgba(43, 20, 20, 0.55);
  color: var(--cream);
  font-size: 26px;
  line-height: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: background 200ms ease;
}
.banner-carrusel .carrusel-nav:hover,
.banner-carrusel .carrusel-nav:focus-visible {
  background: rgba(43, 20, 20, 0.72);
}
.banner-carrusel .carrusel-prev {
  left: 14px;
}
.banner-carrusel .carrusel-next {
  right: 14px;
}
.banner-carrusel .carrusel-puntos {
  position: absolute;
  z-index: 2;
  left: 0;
  right: 0;
  bottom: 16px;
  display: flex;
  gap: 8px;
  justify-content: center;
}
/* Velo inferior: sin esto los puntos desaparecen sobre una foto clara (la
   fachada es una puerta blanca). Es un degradado muy suave, no un bloque. */
.banner-carrusel .carrusel-puntos::before {
  content: "";
  position: absolute;
  inset: -16px -100vw -16px -100vw;
  z-index: -1;
  pointer-events: none;
  background: linear-gradient(to top, rgba(43, 20, 20, 0.38), transparent);
}
.banner-carrusel .carrusel-punto {
  width: 9px;
  height: 9px;
  padding: 0;
  border: 0;
  border-radius: 50%;
  cursor: pointer;
  background: rgba(245, 239, 227, 0.55);
  box-shadow: 0 0 0 1px rgba(43, 20, 20, 0.35);
  transition: background 200ms ease, transform 200ms ease;
}
.banner-carrusel .carrusel-punto.es-activo {
  background: var(--cream);
  transform: scale(1.35);
}

/* Pantallas angostas: las flechas se comen la foto, quedan solo los puntos. */
@media (max-width: 700px) {
  .banner-carrusel .carrusel-nav {
    display: none;
  }
}

/* Si el sistema pide menos movimiento, el cruce es instantáneo. El avance
   automático ya lo corta view.js. */
@media (prefers-reduced-motion: reduce) {
  .banner-carrusel .carrusel-slide {
    transition: none;
  }
}

.ph-label {
  font-family: var(--body);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  display: inline-flex;
  align-items: center;
  gap: 10px;
}

.cartelera {
  display: grid;
  grid-template-columns: 1fr;
  gap: 26px;
}
@media (min-width: 720px) {
  .cartelera {
    grid-template-columns: repeat(2, 1fr);
  }
}
@media (min-width: 1040px) {
  .cartelera {
    grid-template-columns: repeat(3, 1fr);
  }
}
.taller-card {
  background: var(--cream);
  border-radius: var(--radius-lg);
  overflow: hidden;
  box-shadow: var(--shadow-soft);
  border: 1px solid rgba(156, 63, 53, 0.1);
  transition: all 0.3s ease;
  display: flex;
  flex-direction: column;
}
.taller-card:hover {
  transform: translateY(-6px);
  box-shadow: var(--shadow-hover);
  border-color: rgba(156, 63, 53, 0.25);
}
.taller-foto {
  position: relative;
  aspect-ratio: 4 / 3;
  background:
    radial-gradient(
      ellipse at 30% 30%,
      rgba(242, 145, 0, 0.22),
      transparent 60%
    ),
    linear-gradient(150deg, var(--tan), var(--terracota-soft));
  display: flex;
  align-items: center;
  justify-content: center;
}
.taller-foto .ph-label {
  color: rgba(67, 3, 3, 0.55);
}
.taller-foto-img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.taller-vacio {
  grid-column: 1 / -1;
  text-align: center;
  color: var(--marron-medio);
  font-family: var(--body);
  padding: 40px 0;
}
/* Pastilla de estado compartida: talleres y episodios (.ef-estado) hablan el
   mismo lenguaje visual. La posición y los colores los pone cada contexto. */
.taller-estado,
.ef-estado {
  position: absolute;
  font-family: var(--body);
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  padding: 6px 13px;
  border-radius: 100px;
  display: inline-flex;
  align-items: center;
  gap: 7px;
}
.taller-estado::before,
.ef-estado::before {
  content: "";
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: currentColor;
}
.taller-estado {
  top: 14px;
  left: 14px;
}
.taller-estado.abierta {
  background: var(--naranja);
  color: var(--ink);
}
.taller-estado.espera {
  background: var(--cream);
  color: var(--marron-medio);
  border: 1px solid rgba(124, 74, 42, 0.4);
}
.taller-body {
  padding: 24px 24px 26px;
  display: flex;
  flex-direction: column;
  gap: 12px;
  flex: 1;
}
.taller-cat {
  font-family: var(--body);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--oliva);
}
.taller-title {
  font-family: var(--display);
  font-weight: 600;
  font-size: 24px;
  line-height: 1.05;
  text-transform: uppercase;
  color: var(--marron-tipografia);
}
/* La tarjeta enlaza a la página del taller: foto y título clicables. */
.taller-title a {
  color: inherit;
  text-decoration: none;
}
.taller-title a:hover,
.taller-title a:focus-visible {
  color: var(--terracota);
}
a.taller-foto {
  text-decoration: none;
}
.taller-tallerista {
  font-family: var(--body);
  font-size: 14px;
  color: var(--marron-medio);
  display: flex;
  align-items: center;
  gap: 8px;
}
.taller-tallerista::before {
  content: "·";
  color: var(--naranja);
  font-size: 26px;
  line-height: 0;
}
.taller-detalles {
  list-style: none;
  display: flex;
  flex-direction: column;
  gap: 6px;
  margin-top: 2px;
}
.taller-detalles li {
  font-family: var(--body);
  font-size: 13.5px;
  color: var(--marron-medio);
  display: flex;
  align-items: center;
  gap: 9px;
}
.taller-detalles li::before {
  content: "—";
  color: var(--terracota);
}
.taller-cta {
  margin-top: auto;
  padding-top: 18px;
  border-top: 1px dashed rgba(156, 63, 53, 0.22);
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.taller-cta .wp-block-button {
  margin: 0;
}
.taller-cta .wp-block-button__link {
  width: 100%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  font-family: var(--body);
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  padding: 14px 24px;
  border: none;
  border-radius: 100px;
  background: var(--terracota);
  color: var(--cream);
  box-shadow: 0 6px 18px -6px rgba(156, 63, 53, 0.5);
  transition: all 0.22s ease;
  cursor: pointer;
}
.taller-cta .wp-block-button__link:hover {
  background: var(--terracota-deep);
  transform: translateY(-2px);
  box-shadow:
    0 12px 28px -8px rgba(156, 63, 53, 0.65),
    0 0 0 4px rgba(232, 153, 64, 0.18);
}
.taller-cta .wp-block-button__link::after {
  content: "↗";
  font-size: 13px;
  font-weight: 400;
}
.taller-nota {
  font-family: var(--body);
  font-size: 11.5px;
  font-style: italic;
  line-height: 1.45;
  color: var(--marron-medio);
  opacity: 0.85;
  display: flex;
  gap: 7px;
}
.taller-nota::before {
  content: "ⓘ";
  font-style: normal;
  color: var(--terracota);
}
.taller-card.espera .taller-cta .wp-block-button__link {
  background: transparent;
  color: var(--marron-medio);
  border: 1.5px solid rgba(124, 74, 42, 0.45);
  box-shadow: none;
}
.taller-card.espera .taller-cta .wp-block-button__link:hover {
  background: var(--marron-medio);
  color: var(--cream);
  border-color: var(--marron-medio);
}

.actividades {
  background: var(--paper);
}

/* ─── PODCAST — Sección con "telón" ─── */
.podcast {
  background:
    radial-gradient(
      80% 60% at 80% 0%,
      rgba(242, 145, 0, 0.14),
      transparent 60%
    ),
    linear-gradient(180deg, var(--ink) 0%, #1d1510 100%);
  color: var(--cream);
}
.podcast .kicker {
  color: var(--naranja-soft);
}
.podcast .kicker::before {
  background: var(--naranja-soft);
}
.podcast .section-title {
  color: var(--cream);
}
.podcast .section-title em {
  color: var(--naranja-soft);
}
.podcast .section-desc {
  color: var(--tan);
}

.podcast-banner {
  position: relative;
  border-radius: var(--radius-lg);
  overflow: hidden;
  padding: 54px 30px;
  text-align: center;
  background:
    radial-gradient(ellipse at 50% 0%, rgba(242, 145, 0, 0.3), transparent 60%),
    linear-gradient(160deg, var(--terracota), var(--terracota-deep));
  box-shadow: var(--shadow-card);
  color: var(--cream);
}
/* La clase del bloque wp:image cae en el <figure>, no en el <img>: el selector
   tiene que bajar un nivel o no matchea nada. */
.podcast-banner .mic {
  margin: 0 auto 22px;
}
.podcast-banner .mic img {
  display: block;
  width: 80px;
  height: auto;
  margin: 0 auto;
  filter: drop-shadow(0 10px 24px rgba(0, 0, 0, 0.3));
}
.podcast-kicker {
  font-family: var(--body);
  font-size: 11.5px;
  font-weight: 700;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--naranja-soft);
  margin-bottom: 16px;
}
.podcast-sub {
  font-family: var(--body);
  font-style: italic;
  font-size: 16px;
  line-height: 1.6;
  color: rgba(245, 239, 227, 0.85);
  max-width: 44ch;
  margin: 24px auto 0;
}

/* Banner del podcast: foto del set de grabación (micrófono bajo el tamarugo).
   Reemplaza la franja tipográfica que había antes — el encargo de Rafa era
   poner el banner justo donde aparecía «PRÓXIMAMENTE», sin perder el aviso.
   El aspect-ratio replica el del recorte (2.5:1) para que la foto se vea
   entera y el micrófono nunca quede cortado; el min-height toma el relevo en
   pantallas angostas, donde `cover` recorta a los costados. El scrim cálido
   asegura el contraste del texto incluso sobre la copa del árbol a contraluz.

   `width/max-width: 100%` NO son decorativos: sin ellos, en cuanto el
   min-height gana (viewport angosto, ancho disponible < 750px) el alto pasa a
   ser el lado definido y el aspect-ratio lo transfiere de vuelta al ANCHO
   (300 × 2.5 = 750px). El bloque se salía de la pantalla y arrastraba a todo
   el documento: scrollWidth 778px en un viewport de 390px, o sea el sitio
   entero con scroll horizontal en celular. Clavando el ancho al contenedor,
   el min-height hace lo que promete el párrafo de arriba y `cover` recorta. */
.podcast-soon {
  text-align: center;
  margin: 18px auto 56px;
  padding: 40px 24px;
  position: relative;
  display: flex;
  flex-direction: column;
  justify-content: center;
  aspect-ratio: 2.5 / 1;
  width: 100%;
  max-width: 100%;
  min-height: 300px;
  border-radius: var(--radius-lg);
  overflow: hidden;
  background-image: linear-gradient(
      180deg,
      rgba(42, 31, 24, 0.72) 0%,
      rgba(42, 31, 24, 0.48) 45%,
      rgba(42, 31, 24, 0.78) 100%
    ),
    url("assets/img/podcast-banner.jpg");
  background-size: cover;
  background-position: center;
  box-shadow: var(--shadow-card);
}
/* Versión liviana (66 KB vs 200 KB) para pantallas donde la grande no aporta. */
@media (max-width: 700px) {
  .podcast-soon {
    background-image: linear-gradient(
        180deg,
        rgba(42, 31, 24, 0.72) 0%,
        rgba(42, 31, 24, 0.48) 45%,
        rgba(42, 31, 24, 0.78) 100%
      ),
      url("assets/img/podcast-banner-sm.jpg");
  }
}
.podcast-soon-mark {
  font-family: var(--display);
  font-weight: 600;
  font-size: clamp(48px, 9vw, 96px);
  line-height: 0.95;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--cream);
  margin: 0 0 18px;
  text-wrap: balance;
}
.podcast-soon-mark span {
  display: inline-block;
  margin: 0 18px;
  color: var(--naranja);
  font-size: 0.55em;
  vertical-align: middle;
  opacity: 0.75;
}
.podcast-soon-date {
  font-family: var(--body);
  font-style: italic;
  font-size: 14px;
  letter-spacing: 0.06em;
  color: var(--tan);
  margin: 0;
  opacity: 0.9;
}
@media (max-width: 640px) {
  .podcast-soon {
    padding: 30px 16px;
    margin: 14px auto 42px;
  }
  /* El floor de 48px del clamp base no entra en un celular: "Próximamente" es
     UNA palabra, no puede wrappear, y `text-wrap: balance` no la salva. Se
     cortaba 88px contra el borde del banner —que tiene overflow oculto—, así
     que en pantalla se leía "PRÓXIMAMEI". Acá el tamaño sigue al viewport. */
  .podcast-soon-mark {
    font-size: clamp(28px, 7.8vw, 44px);
  }
  .podcast-soon-mark span {
    margin: 0 10px;
  }
}
@media (max-width: 420px) {
  /* Las rayas son decorativas (van aria-hidden) y se comen ~90px entre glifo y
     márgenes: justo lo que le falta a la palabra en los anchos más angostos. */
  .podcast-soon-mark span {
    display: none;
  }
}

.episodios-futuros {
  margin-top: 34px;
}
.ef-label {
  font-family: var(--body);
  font-size: 11.5px;
  font-weight: 700;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--marron-medio);
  text-align: center;
  margin-bottom: 22px;
}
.ef-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 16px;
}
@media (min-width: 640px) {
  .ef-grid {
    grid-template-columns: repeat(2, 1fr);
  }
}
@media (min-width: 1000px) {
  .ef-grid {
    grid-template-columns: repeat(3, 1fr);
  }
}
.ef-card {
  position: relative;
  background: rgba(245, 239, 227, 0.05);
  border: 1px dashed rgba(247, 176, 74, 0.22);
  border-radius: var(--radius);
  padding: 22px 22px 20px;
  display: flex;
  flex-direction: column;
  gap: 12px;
  overflow: hidden;
}
.ef-card .lock {
  position: absolute;
  top: 16px;
  right: 16px;
  font-size: 14px;
  color: var(--naranja-soft);
  opacity: 0.6;
}
/* Foto del capítulo — imagen destacada del episodio (bloque episodios-grid).
   La tarjeta ya era una columna flex: la foto entra arriba, centrada, y el
   margin-top la baja lo justo para no quedar debajo de la pastilla de estado,
   que va absoluta en la esquina.
   El par width: 100% + max-width es deliberado: con solo aspect-ratio, en un
   contenedor angosto el alto puede transferirse al ancho y desbordar en
   celular (ver .podcast-soon). Acá el ancho manda siempre. */
.ef-foto {
  width: 100%;
  max-width: 190px;
  margin: 34px auto 6px;
  aspect-ratio: 1 / 1;
  border-radius: calc(var(--radius) - 6px);
  overflow: hidden;
  background: linear-gradient(
    135deg,
    rgba(247, 176, 74, 0.28),
    rgba(156, 64, 65, 0.12)
  );
}
.ef-foto img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
/* Con foto, la tarjeta entera se lee como una columna centrada: número,
   título y fecha se alinean con la imagen en vez de irse al borde izquierdo. */
.ef-card.con-foto {
  align-items: center;
  text-align: center;
}
/* Excepción: los botones de escucha siguen ocupando el ancho completo.
   align-items: center los encogería al ancho de su propio contenido. */
.ef-card.con-foto .ef-players {
  align-self: stretch;
}

.ef-num {
  font-family: var(--display);
  font-weight: 600;
  font-size: 30px;
  line-height: 1;
  color: var(--naranja-soft);
  opacity: 0.85;
}
.ef-title {
  font-family: var(--display);
  font-weight: 600;
  font-size: 17px;
  text-transform: uppercase;
  color: var(--cream);
  opacity: 0.78;
  line-height: 1.1;
}
.ef-players {
  margin-top: auto;
  display: flex;
  gap: 8px;
}
.ef-player {
  flex: 1;
  height: 34px;
  border-radius: var(--radius-sm);
  background: rgba(245, 239, 227, 0.05);
  border: 1px solid rgba(247, 176, 74, 0.18);
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--body);
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--tan);
  opacity: 0.75;
}

.ef-curtain {
  position: relative;
  margin-top: 34px;
  border-radius: var(--radius-lg);
  overflow: hidden;
  border: 1px solid rgba(247, 176, 74, 0.25);
}
.ef-curtain .ef-grid {
  filter: blur(3px);
  opacity: 0.45;
  pointer-events: none;
}
.ef-veil {
  position: absolute;
  inset: 0;
  display: grid;
  place-content: center;
  text-align: center;
  gap: 14px;
  padding: 40px 24px;
  background:
    radial-gradient(
      60% 60% at 50% 40%,
      rgba(242, 145, 0, 0.18),
      transparent 70%
    ),
    linear-gradient(180deg, rgba(42, 31, 24, 0.86), rgba(29, 21, 16, 0.94));
  z-index: 2;
}
.ef-veil-tag {
  font-family: var(--body);
  font-size: 11.5px;
  font-weight: 700;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--naranja-soft);
}
.ef-veil-big {
  font-family: var(--display);
  font-weight: 600;
  font-size: clamp(32px, 8vw, 56px);
  line-height: 0.95;
  text-transform: uppercase;
  color: var(--cream);
}
.ef-veil-note {
  font-family: var(--body);
  font-style: italic;
  font-size: 15px;
  line-height: 1.55;
  color: rgba(245, 239, 227, 0.85);
  max-width: 38ch;
  margin: 0;
}

/* Telón abierto: hay al menos un episodio al aire (publicado y con links).
   El bloque episodios-grid agrega la clase .estrenada y deja de renderizar
   el velo; acá se quita el blur. */
.ef-curtain.estrenada .ef-grid {
  filter: none;
  opacity: 1;
  pointer-events: auto;
}

/* Badge de estado del episodio — la estructura de pastilla se comparte con
   .taller-estado (ver sección talleres); acá solo posición y colores para el
   fondo oscuro de la sección podcast. */
.ef-estado {
  top: 16px;
  right: 16px;
}
.ef-estado.al-aire {
  background: var(--naranja);
  color: var(--ink);
}
.ef-estado.proximamente {
  background: rgba(245, 239, 227, 0.07);
  color: var(--tan);
  border: 1px solid rgba(247, 176, 74, 0.35);
}

/* Tarjeta de episodio al aire: borde firme y textos a plena opacidad. */
.ef-card.al-aire {
  border-style: solid;
  border-color: rgba(247, 176, 74, 0.45);
}
.ef-card.al-aire .ef-num,
.ef-card.al-aire .ef-title {
  opacity: 1;
}

/* Tarjeta anunciada (aún no al aire): más presente que la de referencia. */
.ef-card.anunciado .ef-title {
  opacity: 0.9;
}

/* Fecha de estreno en tarjetas anunciadas (episodios con fecha agendada). */
.ef-fecha {
  font-family: var(--body);
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--tan);
  opacity: 0.7;
  margin-top: auto;
}

/* Los players de un episodio publicado son links reales a Spotify/YouTube. */
a.ef-player {
  text-decoration: none;
  opacity: 1;
  transition:
    background 0.2s ease,
    border-color 0.2s ease,
    color 0.2s ease;
}
a.ef-player:hover,
a.ef-player:focus-visible {
  background: rgba(247, 176, 74, 0.18);
  border-color: rgba(247, 176, 74, 0.6);
  color: var(--cream);
}
a.ef-player:focus-visible {
  outline: 2px solid var(--naranja-soft);
  outline-offset: 2px;
}

.section-foot-note {
  text-align: center;
  margin-top: 44px;
  font-family: var(--body);
  font-size: 12.5px;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--marron-medio);
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: center;
  gap: 14px;
}

.social-row {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  margin-top: 6px;
}
.social-btn.wp-block-button {
  flex: 1;
  min-width: 140px;
  margin: 0;
}
.social-btn .wp-block-button__link {
  width: 100%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 9px;
  font-family: var(--body);
  font-size: 12.5px;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  padding: 13px 18px;
  background: transparent;
  border-radius: 100px;
  border: 1.5px solid rgba(156, 63, 53, 0.3);
  color: var(--marron-tipografia);
  transition: all 0.22s ease;
}
.social-btn .wp-block-button__link:hover {
  background: var(--terracota);
  color: var(--cream);
  border-color: var(--terracota);
  transform: translateY(-2px);
}
/* Glifos oficiales de marca (Simple Icons), inline con fill=currentColor:
   toman el marrón del botón y el crema del hover sin reglas extra.
   Corrección óptica: a caja igual, el círculo RELLENO de Facebook pesa
   más que el contorno fino de Instagram — se compensa con cajas
   distintas para que se PERCIBAN del mismo tamaño. */
.social-btn .wp-block-button__link svg {
  flex: 0 0 auto;
}
.social-btn .wp-block-button__link svg.icon-ig {
  width: 16px;
  height: 16px;
}
.social-btn .wp-block-button__link svg.icon-fb {
  width: 14px;
  height: 14px;
}

.perfil-tabs {
  grid-column: 1 / -1;
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  margin-bottom: 4px;
}
.perfil-tab {
  flex: 1;
  min-width: 160px;
  text-align: center;
  font-family: var(--body);
  font-size: 11.5px;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  padding: 12px 14px;
  border-radius: var(--radius-sm);
  border: 1.5px solid rgba(156, 63, 53, 0.25);
  color: var(--marron-medio);
  background: var(--cream);
  transition: all 0.2s;
}
.perfil-tab.active {
  background: var(--terracota);
  color: var(--cream);
  border-color: var(--terracota);
}
/* Las tabs del formulario de contacto son <button> reales: reset mínimo. */
button.perfil-tab {
  appearance: none;
  cursor: pointer;
}

/* ─── INSCRIPCIÓN A TALLERES ─── */
.insc {
  padding-top: 56px;
  background:
    radial-gradient(
      ellipse at top left,
      rgba(123, 133, 64, 0.08),
      transparent 50%
    ),
    var(--cream);
}
.volver {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-family: var(--body);
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--marron-medio);
  margin-bottom: 26px;
  transition:
    color 0.2s,
    gap 0.2s;
}
.volver::before {
  content: "←";
  font-size: 14px;
}
.volver:hover {
  color: var(--terracota);
  gap: 12px;
}

.insc-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 34px;
  align-items: start;
}
@media (min-width: 940px) {
  .insc-grid {
    grid-template-columns: 0.85fr 1.15fr;
    gap: 54px;
  }
}

.insc-aside {
  display: flex;
  flex-direction: column;
  gap: 26px;
}
@media (min-width: 940px) {
  .insc-aside {
    position: sticky;
    top: 92px;
  }
}

.resumen-card {
  background: var(--cream);
  border-radius: var(--radius-lg);
  overflow: hidden;
  box-shadow: var(--shadow-card);
  border: 1px solid rgba(156, 63, 53, 0.12);
}
.resumen-foto {
  position: relative;
  aspect-ratio: 16 / 9;
  background:
    radial-gradient(
      ellipse at 30% 30%,
      rgba(242, 145, 0, 0.22),
      transparent 60%
    ),
    linear-gradient(150deg, var(--tan), var(--terracota-soft));
  display: flex;
  align-items: center;
  justify-content: center;
}
.resumen-foto .ph-label {
  color: rgba(67, 3, 3, 0.5);
}
.resumen-foto .taller-estado {
  position: absolute;
  top: 14px;
  left: 14px;
}
.resumen-body {
  padding: 24px;
}
.resumen-cat {
  font-family: var(--body);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--oliva);
}
.resumen-title {
  font-family: var(--display);
  font-weight: 600;
  font-size: 26px;
  line-height: 1.05;
  text-transform: uppercase;
  color: var(--marron-tipografia);
  margin: 8px 0 4px;
}
.resumen-tallerista {
  font-family: var(--body);
  font-style: italic;
  font-size: 14px;
  color: var(--marron-medio);
  margin-bottom: 18px;
}
.resumen-datos {
  list-style: none;
  border-top: 1px dashed rgba(156, 63, 53, 0.22);
  padding-top: 16px;
  display: flex;
  flex-direction: column;
  gap: 11px;
}
.resumen-datos li {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 14px;
  font-family: var(--body);
  font-size: 14px;
  color: var(--marron-medio);
}
.resumen-datos li .k {
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--terracota);
}
.resumen-datos li .v {
  text-align: right;
  font-weight: 700;
  color: var(--marron-tipografia);
}
.resumen-datos li.valor .v {
  font-family: var(--display);
  font-size: 22px;
  color: var(--terracota);
}

.pasos {
  list-style: none;
  counter-reset: paso;
  display: flex;
  flex-direction: column;
  gap: 18px;
}
.pasos li {
  counter-increment: paso;
  display: grid;
  grid-template-columns: 36px 1fr;
  gap: 14px;
  align-items: start;
}
.pasos li::before {
  content: counter(paso, decimal-leading-zero);
  font-family: var(--display);
  font-weight: 600;
  font-size: 15px;
  color: var(--cream);
  background: var(--terracota);
  width: 36px;
  height: 36px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
}
.pasos li h4 {
  font-family: var(--display);
  font-weight: 600;
  font-size: 16px;
  text-transform: uppercase;
  color: var(--marron-tipografia);
  line-height: 1.2;
}
.pasos li p {
  font-family: var(--body);
  font-size: 13.5px;
  line-height: 1.55;
  color: var(--marron-medio);
  margin-top: 3px;
}

.banco-box {
  background: var(--ink);
  color: var(--cream);
  border-radius: var(--radius);
  padding: 24px;
}
.banco-box h4 {
  font-family: var(--body);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--naranja-soft);
  margin-bottom: 16px;
  display: flex;
  align-items: center;
  gap: 9px;
}
.banco-box h4::before {
  content: "";
  width: 18px;
  height: 1.5px;
  background: var(--naranja-soft);
}
.banco-box dl {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: 10px 18px;
}
.banco-box dt {
  font-family: var(--body);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: rgba(245, 239, 227, 0.55);
}
.banco-box dd {
  font-family: var(--body);
  font-size: 14px;
  font-weight: 700;
  color: var(--cream);
  text-align: right;
}

/* Cuenta de destino sin configurar: el bloque avisa en vez de mostrar datos
   inventados. Se distingue del estado normal con borde de alerta. */
.banco-box--sin-datos {
  border: 1.5px solid var(--naranja-soft);
}
.banco-box p {
  font-family: var(--body);
  font-size: 14px;
  line-height: 1.55;
  color: rgba(245, 239, 227, 0.8);
}
.banco-box p + p {
  margin-top: 12px;
}
.banco-box p strong {
  color: var(--cream);
}
.banco-box a {
  color: var(--naranja-soft);
  text-decoration: underline;
}

.insc-form {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 22px;
}
.insc-form .field.full {
  grid-column: 1 / -1;
}
.req::after {
  content: " *";
  color: var(--terracota);
}
.field-hint {
  font-family: var(--body);
  font-size: 12px;
  font-style: italic;
  color: var(--marron-medio);
  opacity: 0.8;
}
.taller-fijo {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  background: rgba(156, 63, 53, 0.07);
  border: 1.5px solid rgba(156, 63, 53, 0.18);
  border-radius: var(--radius-sm);
  padding: 13px 16px;
  font-family: var(--display);
  font-weight: 600;
  font-size: 16px;
  text-transform: uppercase;
  color: var(--terracota);
}
.taller-fijo .edit {
  font-family: var(--body);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--marron-medio);
  border-bottom: 1.5px solid transparent;
  /* En celular el título del taller se come el ancho del flex y encogía este
     link hasta partirlo al medio: se leía "CAMB / IAR". */
  flex-shrink: 0;
  white-space: nowrap;
}
.taller-fijo .edit:hover {
  color: var(--terracota);
  border-color: var(--terracota);
}

.dropzone {
  /* `relative` es funcional, no cosmético: el .dz-input va `absolute` y sin un
     ancestro posicionado se resolvía contra uno lejano, aterrizando en x=527
     (fuera de un viewport de 390px). Ver el comentario de .dz-input. */
  position: relative;
  border: 2px dashed rgba(156, 63, 53, 0.35);
  border-radius: var(--radius);
  background: rgba(245, 239, 227, 0.5);
  padding: 30px 24px;
  text-align: center;
  cursor: pointer;
  transition: all 0.22s ease;
}
.dropzone:hover {
  border-color: var(--terracota);
  background: rgba(242, 145, 0, 0.06);
}
.dropzone .dz-icon {
  font-size: 26px;
  color: var(--terracota);
  margin-bottom: 8px;
}
.dropzone .dz-title {
  font-family: var(--body);
  font-size: 14px;
  font-weight: 700;
  color: var(--marron-tipografia);
}
.dropzone .dz-title b {
  color: var(--terracota);
}
.dropzone .dz-sub {
  font-family: var(--body);
  font-size: 12px;
  font-style: italic;
  color: var(--marron-medio);
  margin-top: 4px;
}
.dropzone.filled {
  border-style: solid;
  border-color: var(--oliva);
  background: rgba(125, 128, 35, 0.08);
}
.dropzone.filled .dz-icon {
  color: var(--oliva);
}
.dz-file {
  display: none;
  align-items: center;
  justify-content: center;
  gap: 10px;
  font-family: var(--body);
  font-size: 13.5px;
  font-weight: 700;
  color: var(--oliva);
}
.dropzone.filled .dz-file {
  display: flex;
}
.dropzone.filled .dz-prompt {
  display: none;
}
/* El input real va invisible: la superficie clickeable es la label .dropzone,
   que lo alcanza por `for`. Va scopeado a `.dropzone` a propósito: `.dz-input`
   solo (0,1,0) PIERDE contra `.form input` (0,1,1), que le metía `width: 100%`
   y padding; el input terminaba de 332×30 y, al ser absolute sin contenedor
   posicionado, se iba a x=527 y empujaba el scroll horizontal del sitio en
   celular. `.dropzone .dz-input` (0,2,0) sí le gana. El `inset: 0` lo deja
   calcado sobre la zona, así que ya no puede desbordar aunque cambie el form. */
.dropzone .dz-input {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  max-width: 100%;
  padding: 0;
  opacity: 0;
  pointer-events: none;
}

.check-row {
  display: flex;
  gap: 12px;
  align-items: flex-start;
}
.check-row input {
  width: 20px;
  height: 20px;
  flex: 0 0 auto;
  margin-top: 2px;
  accent-color: var(--terracota);
}
.check-row label {
  font-family: var(--body);
  font-size: 13.5px;
  font-weight: 400;
  letter-spacing: 0;
  text-transform: none;
  color: var(--marron-medio);
  line-height: 1.5;
}
.check-row label a {
  color: var(--terracota);
  border-bottom: 1px solid currentColor;
}

.cupo-nota {
  grid-column: 1 / -1;
  display: flex;
  gap: 10px;
  font-family: var(--body);
  font-size: 12.5px;
  font-style: italic;
  line-height: 1.5;
  color: var(--marron-medio);
}
.cupo-nota::before {
  content: "ⓘ";
  font-style: normal;
  color: var(--terracota);
}

/* Aviso de lista de espera: encabeza el formulario cuando el taller está lleno.
   Usa el oliva —no el terracota del error— porque no es una falla: el taller
   funcionó tan bien que se agotó, y sumarse a la lista es una acción válida. */
.espera-aviso {
  grid-column: 1 / -1;
  margin: 0;
  padding: 14px 18px;
  border-radius: var(--radius-sm);
  border-left: 4px solid var(--oliva);
  background: rgba(125, 128, 35, 0.09);
  font-family: var(--body);
  font-size: 14px;
  line-height: 1.55;
  color: var(--marron-tipografia);
}

/* Mensaje de error de los formularios (inscripción y contacto). */
.insc-error {
  grid-column: 1 / -1;
  margin: 0;
  padding: 12px 16px;
  border-radius: var(--radius-sm);
  border: 1.5px solid rgba(156, 63, 53, 0.4);
  background: rgba(156, 63, 53, 0.08);
  color: var(--terracota);
  font-size: 14px;
  font-weight: 600;
}

.insc-ok {
  display: none;
  grid-column: 1 / -1;
  text-align: center;
  background: var(--paper);
  border-radius: var(--radius-lg);
  padding: 56px 34px;
  box-shadow: var(--shadow-card);
  border: 1px solid rgba(125, 128, 35, 0.25);
}
.insc-ok.show {
  display: block;
}
.insc-ok .ok-mark {
  width: 64px;
  height: 64px;
  border-radius: 50%;
  background: var(--oliva);
  color: var(--cream);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 30px;
  margin: 0 auto 22px;
}
.insc-ok h3 {
  font-family: var(--display);
  font-weight: 600;
  font-size: 30px;
  text-transform: uppercase;
  color: var(--marron-tipografia);
  line-height: 1.05;
}
.insc-ok p {
  font-family: var(--body);
  font-size: 15px;
  line-height: 1.65;
  color: var(--marron-medio);
  max-width: 42ch;
  margin: 16px auto 28px;
}

@media (max-width: 620px) {
  .insc-form {
    grid-template-columns: 1fr;
  }
}

/* ─── ACTIVIDADES — Vista de archivo / noticias ─── */
.archivo {
  padding-top: 56px;
  background:
    radial-gradient(
      ellipse at top right,
      rgba(242, 145, 0, 0.07),
      transparent 50%
    ),
    var(--paper);
}

.featured {
  display: grid;
  grid-template-columns: 1fr;
  gap: 0;
  border-radius: var(--radius-lg);
  overflow: hidden;
  box-shadow: var(--shadow-card);
  border: 1px solid rgba(156, 63, 53, 0.12);
  background: var(--cream);
  margin-bottom: 56px;
}
@media (min-width: 860px) {
  .featured {
    grid-template-columns: 1.25fr 1fr;
  }
}
.featured-foto {
  position: relative;
  min-height: 280px;
  background:
    radial-gradient(
      ellipse at 30% 25%,
      rgba(242, 145, 0, 0.25),
      transparent 60%
    ),
    linear-gradient(150deg, var(--terracota-soft), var(--terracota-deep));
  display: flex;
  align-items: center;
  justify-content: center;
}
.featured-foto .ph-label {
  color: rgba(245, 239, 227, 0.8);
}
.featured-foto::after {
  content: "";
  position: absolute;
  inset: auto 0 0 0;
  height: 60px;
  background: url("assets/svg/mountain-divider.svg") center bottom / 100% 100%
    no-repeat;
  color: var(--cream);
  opacity: 0.4;
}
.featured-body {
  padding: 38px 34px;
  display: flex;
  flex-direction: column;
  justify-content: center;
}
.featured-tag {
  font-family: var(--body);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--terracota);
  display: inline-flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 16px;
}
.featured-tag::before {
  content: "";
  width: 26px;
  height: 1.5px;
  background: var(--terracota);
}
.featured-title {
  font-family: var(--display);
  font-weight: 600;
  font-size: clamp(28px, 4vw, 40px);
  line-height: 1.02;
  text-transform: uppercase;
  color: var(--marron-tipografia);
}
.featured-desc {
  font-family: var(--body);
  font-size: 15.5px;
  line-height: 1.7;
  color: var(--marron-medio);
  margin: 16px 0 24px;
  max-width: 50ch;
}
.featured-meta {
  font-family: var(--body);
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--marron-medio);
}

/* ─── ACTIVIDADES — foto destacada del bloque "Lo último" ───
   get_the_post_thumbnail() ya trae el <img>, pero necesita posicionarse
   absoluto + cover encima del placeholder degradado, igual que
   .taller-foto-img en talleres-grid/taller-resumen. Sin esta regla la
   imagen se veía fuera de flujo dentro de .featured-foto. */
.featured-foto-img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* ─── ACTIVIDADES — foto en la tarjeta de la timeline (.tl-item) ───
   Solo se emite cuando la actividad tiene imagen destacada (degradación
   limpia si no la tiene). La tarjeta con foto pasa a layout horizontal
   de dimensiones estables: foto en columna fija a la izquierda, texto a
   la derecha. La imagen se recorta (object-fit: cover) a su columna —
   NUNCA deforma la tarjeta, sin importar la proporción del archivo que
   suba el editor. El padding pasa de la tarjeta a .tl-texto para que la
   foto llegue al borde; el redondeo izquierdo se hace en la imagen (no
   con overflow: hidden en la tarjeta, que recortaría la flecha ::before). */
.tl-content--con-foto {
  display: flex;
  align-items: stretch;
  padding: 0;
  min-height: 230px;
}
.tl-content--con-foto .tl-texto {
  flex: 1;
  min-width: 0;
  padding: 20px 20px 18px;
}
.tl-foto {
  position: relative;
  display: block;
  flex: 0 0 38%;
  max-width: 320px;
}
.tl-foto img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: var(--radius) 0 0 var(--radius);
}
/* En pantallas angostas la tarjeta se apila: foto arriba con alto fijo,
   texto abajo — mismo principio, la imagen se ajusta a la caja. */
@media (max-width: 640px) {
  .tl-content--con-foto {
    flex-direction: column;
    min-height: 0;
  }
  .tl-foto {
    flex: 0 0 auto;
    max-width: none;
    height: 180px;
  }
  .tl-foto img {
    border-radius: var(--radius) var(--radius) 0 0;
  }
}

/* ─── ACTIVIDADES — página single (single-actividad.html) ───
   Template FSE dedicado: solo bloques core (post-terms, post-date,
   post-title, post-featured-image, post-content), sin PHP nuevo. Estos
   estilos reusan el sistema de diseño ya definido arriba (paleta,
   --radius-lg, --shadow-*) para que la single se sienta parte del mismo
   sitio que la timeline y las tarjetas de taller. */
/* Página individual de contenido: actividades y talleres comparten el
   andamiaje (padding, categoría, título) y el relato (.contenido-relato). */
.actividad-single,
.taller-single {
  padding: 48px 0 64px;
}
.actividad-cat,
.taller-single-cat {
  display: inline-block;
  font-family: var(--body);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--terracota);
  margin-bottom: 10px;
}
.actividad-cat a,
.taller-single-cat a {
  color: inherit;
  text-decoration: none;
}
.actividad-date {
  display: block;
  font-family: var(--body);
  font-size: 10.5px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.22em;
  color: var(--terracota-deep);
  margin-bottom: 14px;
}
.actividad-title,
.taller-single-title {
  font-family: var(--display);
  font-weight: 600;
  font-size: clamp(30px, 5vw, 46px);
  line-height: 1.05;
  color: var(--marron-tipografia);
  margin: 0 0 28px;
}
.taller-single .resumen-card {
  margin-bottom: 36px;
}
.actividad-imagen-destacada {
  margin: 0 0 32px;
}
.actividad-imagen-destacada img {
  display: block;
  width: 100%;
  max-height: 480px;
  object-fit: cover;
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-card);
}
.contenido-relato {
  font-family: var(--body);
  font-size: 16px;
  line-height: 1.75;
  color: var(--marron-medio);
  max-width: 72ch;
}
.contenido-relato p {
  margin: 0 0 20px;
}
.contenido-relato img {
  border-radius: var(--radius);
  box-shadow: var(--shadow-soft);
}
.contenido-relato h2,
.contenido-relato h3 {
  color: var(--marron-tipografia);
  margin: 32px 0 14px;
}
.contenido-relato ul {
  margin: 0 0 20px;
  padding-left: 22px;
}
.contenido-relato li {
  margin-bottom: 6px;
}

/* Cita/testimonio: el recurso narrativo de los patrones de actividad
   (patrones-actividad.php). Voz de participantes, frase del hito. */
.contenido-relato blockquote {
  margin: 32px 0;
  padding: 6px 0 6px 24px;
  border-left: 3px solid var(--naranja);
}
.contenido-relato blockquote p {
  font-style: italic;
  font-size: 19px;
  line-height: 1.55;
  color: var(--marron-tipografia);
  margin: 0 0 8px;
}
.contenido-relato blockquote cite {
  display: block;
  font-style: normal;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--terracota);
}

/* Separador corto y centrado, como pausa artesanal antes del cierre. */
.contenido-relato hr.wp-block-separator {
  border: none;
  height: 1px;
  width: 120px;
  margin: 40px auto;
  background: rgba(124, 74, 42, 0.3);
}

/* Ritmo vertical de los bloques de media dentro del relato. */
.contenido-relato .wp-block-gallery,
.contenido-relato .wp-block-image {
  margin: 28px 0;
}
