/* ═══════════════════════════════════════════════════════════════════════
   SHUNKU BY ROX — capa propia del proyecto.

   Se carga DESPUÉS de main.css y secciones.css. Aquí vive lo que no es de la
   plantilla: el hero a medida, el manifiesto, la banda de la miel, el mosaico
   de tratamientos, y el retoque de las variantes que sí se reutilizan (FAQ,
   sobre nosotros, cierre, footer) para que dejen de parecer la base.

   Tres decisiones gobiernan todo el archivo:

   1. NADA DE TARJETAS. Ni bordes, ni sombras, ni radios grandes. La
      plantilla base separa con cajas; aquí se separa con temperatura de
      color y con aire. Es lo que más distancia pone entre esta web y
      cualquier otra hecha con la misma base.
   2. LA VERSALITA ES LA VOZ. Marcellus es una capital lapidaria: en caja
      alta y muy espaciada suena a oficio y a calma. Se usa en el hero, en
      los rótulos de sección y en nada más — en párrafos sería ilegible.
   3. EL COBRE SE GANA, Y DONDE APARECE, APARECE ENTERO. No se reparte por
      toda la página: está en la banda de la miel, en los botones al pasar
      el ratón y en los filetes que marcan cada ancla oscura. Pero en esos
      sitios va como METAL —la rampa de sombra a brillo de --metal-cobre—,
      no como un tono plano. Un cobre de un solo hex, a poca superficie, se
      lee como marrón; eso ya pasó una vez y la web no se parecía en nada a
      la imagen que usa la clienta.
   ═══════════════════════════════════════════════════════════════════════ */

/* ── Piezas compartidas ─────────────────────────────────────────────── */

.shunku-icono { width: 1em; height: 1em; display: block; }

/* Antetítulos en la tinta del cobre, no en el cobre. main.css los pinta con
   --color-accent, y el cobre de la paleta es luminoso a propósito —es el que
   tiene que brillar en el metal—: sobre lino se queda en 3.2, que vale para
   un icono pero no para texto de 12 px. La tinta da 6.2. Las bandas oscuras
   ya los repintan en crema con una regla más fuerte (.section--dark .eyebrow). */
.eyebrow { color: var(--color-cobre-tinta); }

/* El rótulo grabado: el gesto más reconocible de la placa de la clienta
   —el texto en versalita entre dos filetes que se desvanecen— como voz
   común de todos los rótulos de la portada, no solo del hero. Antes cada
   sección tenía el suyo (uno subrayado, otros sueltos) y esa variedad es lo
   que hacía que las secciones no parecieran de la misma pieza.
   Centrados: filete a cada lado. Alineados a la izquierda: filete delante.
   El filete es del color del propio rótulo (currentColor), así que funciona
   igual sobre lino, sobre cobre y sobre espresso. */
.mosaico-intro .eyebrow,
.faq .section-head--center .eyebrow,
.ventajas .section-head--center .eyebrow,
.eyebrow--filete,
.manifiesto-firma {
  display: flex; align-items: center; justify-content: center;
  gap: var(--space-4);
}
.mosaico-intro .eyebrow::before, .mosaico-intro .eyebrow::after,
.faq .section-head--center .eyebrow::before, .faq .section-head--center .eyebrow::after,
.ventajas .section-head--center .eyebrow::before, .ventajas .section-head--center .eyebrow::after,
.eyebrow--filete::before, .eyebrow--filete::after,
.manifiesto-firma::before, .manifiesto-firma::after {
  content: ""; height: 1px; width: clamp(24px, 6vw, 56px);
  background: linear-gradient(90deg, transparent, currentColor);
  opacity: .7;
}
.mosaico-intro .eyebrow::after,
.faq .section-head--center .eyebrow::after,
.ventajas .section-head--center .eyebrow::after,
.eyebrow--filete::after,
.manifiesto-firma::after { background: linear-gradient(90deg, currentColor, transparent); }

.sobre-nosotros--shunku .eyebrow,
.miel-etiqueta {
  display: flex; align-items: center; gap: var(--space-4);
}
.sobre-nosotros--shunku .eyebrow::before,
.miel-etiqueta::before {
  content: ""; flex: none; height: 1px; width: 40px;
  background: linear-gradient(90deg, transparent, currentColor);
}

/* Botón flotante de WhatsApp, en la paleta y no en el verde de la marca de
   WhatsApp. El verde saturado era lo único de la web que se leía como un
   plugin encima del diseño. Lo que hace reconocible el botón es la
   SILUETA —el bocadillo con el teléfono—, y esa se queda intacta.
   Espresso y no cobre, a propósito: el botón flota por encima de todo, y la
   portada tiene dos bloques de cobre (el hero y la banda de la miel) donde
   un círculo de cobre desaparecería. Sobre las bandas oscuras, que son del
   mismo espresso, lo despega el aro de cobre. El icono en cobre claro da 8.8
   sobre el espresso.
   Al pasar el ratón se hace de cobre, como todos los botones de la web. */
.whatsapp-cta {
  isolation: isolate;
  overflow: hidden;
  background: var(--color-primary);
  color: var(--color-cobre-claro);
  box-shadow:
    0 0 0 1px color-mix(in srgb, var(--color-accent) 75%, transparent),
    0 10px 24px -8px color-mix(in srgb, var(--color-primary) 60%, transparent);
  transition: transform var(--duration-fast) var(--ease-out), color var(--duration-base) var(--ease-out);
}
.whatsapp-cta svg { width: 28px; height: 28px; }
.whatsapp-cta::before {
  content: "";
  position: absolute; inset: 0; z-index: -1;
  border-radius: inherit;
  background: var(--metal-cobre-texto);
  background-size: 240% 100%;
  background-position: 100% 0;
  opacity: 0;
  transition: opacity var(--duration-base) var(--ease-out), background-position 700ms var(--ease-out);
}
.whatsapp-cta:is(:hover, :focus-visible) { color: var(--color-ink); }
.whatsapp-cta:is(:hover, :focus-visible)::before { opacity: 1; background-position: 0 0; }
.whatsapp-cta:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 3px; }
@media (prefers-reduced-motion: reduce) {
  .whatsapp-cta::before { transition: opacity var(--duration-base) linear; background-position: 30% 0; }
}

/* Rótulo de sección: caja alta, muy espaciado, con un filete corto delante.
   Sustituye al .eyebrow de la base, que era texto pequeño y ya está. */
.titulo-seccion {
  font-family: var(--font-display);
  font-weight: 400;
  font-size: clamp(1.9rem, 1.2rem + 2.6vw, 3rem);
  line-height: 1.12;
  letter-spacing: .01em;
  margin: 0;
  text-wrap: balance;
}

.enlace-subrayado {
  display: inline-block;
  font-size: var(--text-sm);
  letter-spacing: .12em;
  text-transform: uppercase;
  font-weight: 600;
  color: var(--color-cobre-tinta);
  text-decoration: none;
  padding-bottom: 4px;
  border-bottom: 1px solid currentColor;
}
.enlace-subrayado:hover { color: var(--color-primary); }

/* ── HERO ────────────────────────────────────────────────────────────
   A sangre y sin fotografía: es la placa de cobre de la clienta. La misma
   composición que ella usa para presentarse —rótulo entre filetes, la
   marca en capital grabada en tinta, una pastilla de contorno— sobre el
   mismo material: cobre cepillado con el brillo detrás del titular y las
   esquinas cayendo a sombra. Quien la conoce la reconoce en el primer
   pantallazo; ese era el encargo.

   Antes era lino con luz de cobre. Se conservaba la calma del hero
   original, pero la primera pantalla no se parecía a la imagen de Shunku, y
   la clienta tenía que bajar hasta la banda de la miel para encontrar su
   color. El grano se queda y además hay cepillado: sin ellos, un degradado
   grande se ve bandeado en pantallas de 8 bits y delata que es un relleno.
   ------------------------------------------------------------------- */

.hero-shunku {
  position: relative;
  min-height: min(88vh, 780px);
  display: flex;
  align-items: center;
  overflow: hidden;
  background: var(--color-bg);
}

.hero-shunku.sin-foto::before {
  content: "";
  position: absolute; inset: 0;
  /* Encima de todo, los HILOS DE COBRE: las cintas de la placa de la
     clienta, abstraídas a tres líneas finas que suben desde las dos
     esquinas inferiores. Es el único gesto orgánico de la web, y va solo en
     la apertura (aquí) y en el cierre: enmarca la página, no la decora.
     Son SVG en línea (menos de 1 KB cada uno, ninguna petición) y se quedan
     en la mitad baja de las esquinas, lejos del texto: el contraste del
     titular, el subtítulo y el botón está medido con ellos puestos.
     De abajo arriba: el cuerpo del metal (medio arriba, cobre abajo), las
     dos esquinas inferiores en sombra, un destello diagonal al ángulo de
     --metal-cobre (115deg) y el brillo detrás del titular, que es donde la
     placa tiene la luz sobre la marca.
     La sombra va SOLO abajo y en las esquinas, lejos del texto: la tinta
     sobre el cobre da 4.8, pero sobre la sombra no llegaría. Arriba no hay
     sombra porque ahí flotan el logo y el botón de la cabecera. */
  background:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 520 360' preserveAspectRatio='xMinYMax meet'%3E%3Cdefs%3E%3ClinearGradient id='h' x1='0' y1='1' x2='1' y2='0'%3E%3Cstop offset='0' stop-color='%236B3820' stop-opacity='.95'/%3E%3Cstop offset='.38' stop-color='%23EDB894'/%3E%3Cstop offset='.5' stop-color='%23FFE6CF'/%3E%3Cstop offset='.7' stop-color='%23BD7650' stop-opacity='.7'/%3E%3Cstop offset='1' stop-color='%23BD7650' stop-opacity='0'/%3E%3C/linearGradient%3E%3C/defs%3E%3Cg%3E%3Cpath d='M-10 372C120 330 170 250 300 232S470 190 540 120' fill='none' stroke='url(%23h)' stroke-width='2.2' stroke-linecap='round'/%3E%3Cpath d='M-10 348C110 312 190 248 318 246S478 214 540 168' fill='none' stroke='url(%23h)' stroke-width='1' stroke-linecap='round'/%3E%3Cpath d='M20 372C150 344 238 292 350 286S490 262 540 226' fill='none' stroke='url(%23h)' stroke-width='.8' stroke-linecap='round'/%3E%3C/g%3E%3C/svg%3E") left bottom / min(30vw, 440px) auto no-repeat,
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 520 360' preserveAspectRatio='xMinYMax meet'%3E%3Cdefs%3E%3ClinearGradient id='h' x1='0' y1='1' x2='1' y2='0'%3E%3Cstop offset='0' stop-color='%236B3820' stop-opacity='.95'/%3E%3Cstop offset='.38' stop-color='%23EDB894'/%3E%3Cstop offset='.5' stop-color='%23FFE6CF'/%3E%3Cstop offset='.7' stop-color='%23BD7650' stop-opacity='.7'/%3E%3Cstop offset='1' stop-color='%23BD7650' stop-opacity='0'/%3E%3C/linearGradient%3E%3C/defs%3E%3Cg transform='translate(520 0) scale(-1 1)'%3E%3Cpath d='M-10 372C120 330 170 250 300 232S470 190 540 120' fill='none' stroke='url(%23h)' stroke-width='2.2' stroke-linecap='round'/%3E%3Cpath d='M-10 348C110 312 190 248 318 246S478 214 540 168' fill='none' stroke='url(%23h)' stroke-width='1' stroke-linecap='round'/%3E%3Cpath d='M20 372C150 344 238 292 350 286S490 262 540 226' fill='none' stroke='url(%23h)' stroke-width='.8' stroke-linecap='round'/%3E%3C/g%3E%3C/svg%3E") right bottom / min(30vw, 440px) auto no-repeat,
    radial-gradient(58% 48% at 50% 40%, color-mix(in srgb, var(--color-cobre-claro) 82%, transparent) 0%, transparent 72%),
    linear-gradient(115deg, transparent 28%, color-mix(in srgb, var(--color-cobre-claro) 26%, transparent) 47%, transparent 62%),
    radial-gradient(42% 46% at 0% 100%, color-mix(in srgb, var(--color-cobre-tinta) 42%, transparent) 0%, transparent 70%),
    radial-gradient(38% 42% at 100% 100%, color-mix(in srgb, var(--color-cobre-tinta) 34%, transparent) 0%, transparent 70%),
    linear-gradient(178deg, var(--color-cobre-medio) 0%, var(--color-accent) 100%);
  /* El borde inferior, grabado: un filete de tinta donde el metal se corta. */
  box-shadow: inset 0 -1px 0 color-mix(in srgb, var(--color-cobre-tinta) 60%, transparent);
}

/* Grano en SVG embebido: pesa menos de 1 KB y no es una petición más. */
/* Y el cepillado, exactamente el mismo que el de la banda de la miel: los
   dos bloques de cobre de la portada tienen que leerse como una misma
   pieza de metal, no como dos degradados parecidos. */
.hero-shunku::after {
  content: "";
  position: absolute; inset: 0;
  pointer-events: none;
  mix-blend-mode: soft-light;
  background:
    repeating-linear-gradient(0deg,
      color-mix(in srgb, var(--color-cobre-claro) 22%, transparent) 0 1px, transparent 1px 3px,
      color-mix(in srgb, var(--color-cobre-tinta) 10%, transparent) 3px 4px, transparent 4px 6px),
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)' opacity='.22'/%3E%3C/svg%3E");
}
/* Con foto de fondo no hay placa: el cepillado sobre una fotografía la
   ensuciaría. Ahí se queda solo el grano, como estaba. */
.hero-shunku.tiene-foto::after {
  opacity: .5;
  mix-blend-mode: multiply;
  background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)' opacity='.16'/%3E%3C/svg%3E");
}

.hero-shunku-media { position: absolute; inset: 0; }
.hero-shunku-media img { width: 100%; height: 100%; object-fit: cover; display: block; }
.hero-shunku-velo {
  position: absolute; inset: 0;
  background: linear-gradient(180deg,
    color-mix(in srgb, var(--color-primary) 30%, transparent) 0%,
    color-mix(in srgb, var(--color-primary) 62%, transparent) 100%);
}

.hero-shunku-cuerpo {
  position: relative; z-index: 2;
  padding-block: var(--space-24) var(--space-20);
  max-width: 940px;
  text-align: center;
}

/* La marca, arriba, entre dos filetes. Es el gesto que más "centro de
   bienestar con oficio" transmite de toda la portada, y cuesta dos líneas. */
.hero-shunku-marca {
  display: flex; align-items: center; justify-content: center; gap: var(--space-4);
  font-size: var(--text-xs);
  letter-spacing: .34em;
  text-transform: uppercase;
  font-weight: 600;
  /* Tinta y no cobre: sobre la placa, el cobre de texto (tinta cobre) se
     queda en 2.3. Es el mismo gesto que en la imagen de la clienta, donde
     todo lo escrito sobre el metal va en la tinta oscura. */
  color: var(--color-ink);
  margin: 0 0 var(--space-8);
}
/* H1 en el antetítulo (2026-10-12): .hero-shunku-marca es ahora el <h1> y
   .hero-shunku-titulo un <p>. Cada uno lleva lo que le daba su etiqueta
   antes (fuente, interlineado, text-wrap), para que nada se mueva. */
h1.hero-shunku-marca { font-family: var(--font-body); line-height: inherit; text-wrap: pretty; }
p.hero-shunku-titulo { text-wrap: balance; }
/* Lo mismo en las interiores (hub, categorías, fichas, Sobre mí, Bonos,
   Contacto): shunku_titular_h1() en inc/shunku.php. El titular <p> recibe lo
   que le daba la regla h1 de main.css y el antetítulo-h1 lo que le daba el
   <p>, con :where() para pesar lo mismo que la etiqueta: cualquier clase
   (.servicio-titulo, .contacto--mapa-ancho .section-title…) sigue mandando
   igual que mandaba sobre el h1. */
p:where(.shunku-titular) { font-family: var(--font-display); font-weight: 600; line-height: 1.15; letter-spacing: -0.01em; text-wrap: balance; }
h1:where(.eyebrow) { font-family: var(--font-body); font-weight: 600; line-height: inherit; letter-spacing: normal; text-wrap: pretty; }
.hero-shunku-marca::before,
.hero-shunku-marca::after {
  content: ""; height: 1px; width: clamp(28px, 9vw, 88px);
  background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--color-ink) 70%, transparent));
}
/* Los filetes se desvanecen hacia FUERA, igual que en la placa de la
   clienta: la línea nace del texto y se pierde. Una línea de opacidad plana
   se lee como un subrayado; esta, como un grabado. */
.hero-shunku-marca::after { background: linear-gradient(90deg, color-mix(in srgb, var(--color-ink) 70%, transparent), transparent); }

.hero-shunku-titulo {
  font-family: var(--font-display);
  /* Peso 400: Marcellus solo existe en una variante y pedirle negrita hace
     que el navegador la finja engordando el trazo, que en una romana se ve
     emborronado. La presencia la da el tamaño y el espaciado, no el peso. */
  font-weight: 400;
  text-transform: uppercase;
  font-size: clamp(2.1rem, 1.1rem + 4.4vw, 4.5rem);
  line-height: 1.06;
  letter-spacing: .045em;
  color: var(--color-primary);
  margin: 0 auto var(--space-6);
  max-width: 18ch;
  text-wrap: balance;
}

.hero-shunku-sub {
  font-size: clamp(1rem, .95rem + .4vw, 1.2rem);
  line-height: 1.65;
  /* Tinta al 90%, no el taupe de los textos secundarios: sobre el cobre,
     --color-muted se queda por debajo de 3:1. */
  color: color-mix(in srgb, var(--color-ink) 90%, transparent);
  max-width: 52ch;
  margin: 0 auto var(--space-10);
}

/* Botón de contorno, no macizo: sobre un fondo de luz, un botón sólido pesa
   demasiado y rompe la calma que construye todo lo demás. */
.btn-shunku {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  display: inline-block;
  font-family: var(--font-body);
  font-size: var(--text-sm);
  font-weight: 600;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--color-primary);
  border: 1px solid var(--color-primary);
  padding: 16px 40px;
  text-decoration: none;
  transition: color var(--duration-base) var(--ease-out), border-color var(--duration-base) var(--ease-out);
}
/* Al pasar el ratón, el botón se hace de cobre: el metal entra fundiéndose y
   su brillo cruza de derecha a izquierda, como la luz rasante sobre la placa.
   Fundido y NO barrido, a propósito: con un barrido, media etiqueta pasa un
   instante de un color de texto al otro sobre el fondo equivocado. Así el
   texto y el metal cambian a la vez en toda la superficie. */
.btn-shunku::before,
.btn-primary::before {
  content: "";
  position: absolute; inset: 0; z-index: -1;
  background: var(--metal-cobre-texto);
  background-size: 240% 100%;
  background-position: 100% 0;
  opacity: 0;
  transform: none;
  transition: opacity var(--duration-base) var(--ease-out), background-position 700ms var(--ease-out);
}
.btn-shunku:is(:hover, :focus-visible)::before,
.btn-primary:is(:hover, :focus-visible)::before { opacity: 1; background-position: 0 0; }
.btn-shunku:is(:hover, :focus-visible) { color: var(--color-ink); border-color: var(--color-cobre-tinta); }
.btn-primary:is(:hover, :focus-visible) { color: var(--color-ink); }
@media (prefers-reduced-motion: reduce) {
  .btn-shunku::before, .btn-primary::before { transition: opacity var(--duration-base) linear; background-position: 30% 0; }
}

.hero-shunku.tiene-foto .hero-shunku-titulo,
.hero-shunku.tiene-foto .hero-shunku-marca { color: var(--color-on-primary); }
.hero-shunku.tiene-foto .hero-shunku-sub { color: color-mix(in srgb, var(--color-on-primary) 85%, transparent); }
.hero-shunku.tiene-foto .btn-shunku { color: var(--color-on-primary); border-color: currentColor; }
.hero-shunku.tiene-foto .btn-shunku:is(:hover, :focus-visible) { color: var(--color-ink); border-color: transparent; }

/* Sobre la placa, el botón no puede fundirse a cobre al pasar el ratón: sería
   cobre sobre cobre y no se notaría que ha reaccionado. Se invierte a
   espresso con el texto en cobre claro — la pastilla de la placa, rellena. */
.hero-shunku.sin-foto .btn-shunku::before { background: var(--color-primary); }
.hero-shunku.sin-foto .btn-shunku:is(:hover, :focus-visible) { color: var(--color-cobre-claro); border-color: var(--color-primary); }

.hero-shunku-scroll {
  position: absolute; left: 50%; bottom: var(--space-8);
  transform: translateX(-50%); z-index: 2;
}
.hero-shunku-scroll span {
  display: block; width: 1px; height: 56px;
  background: linear-gradient(180deg, transparent, var(--color-ink));
  animation: shunku-respira 2.8s ease-in-out infinite;
  transform-origin: top;
}
@keyframes shunku-respira {
  0%, 100% { transform: scaleY(.45); opacity: .35; }
  50%      { transform: scaleY(1);   opacity: .9; }
}

/* ── MANIFIESTO ──────────────────────────────────────────────────────
   Una frase sola en pantalla. Todo el trabajo lo hace el aire de alrededor:
   si esta sección estuviera apretada, la frase no pesaría.
   ------------------------------------------------------------------- */

/* Lino, no el blanco roto de antes: entre dos placas de cobre, una banda
   blanca era el color más frío de la página y se leía como un hueco. Ahora
   es el lino del suelo con la luz de la placa de arriba cayéndole encima —
   un reflejo cobrizo que nace del borde del hero y se apaga hacia abajo —,
   así que las dos secciones empalman en vez de cortarse. */
.manifiesto {
  background:
    radial-gradient(75% 90% at 50% 0%, color-mix(in srgb, var(--color-cobre-medio) 30%, var(--color-cobre-suave)) 0%, transparent 70%),
    var(--color-bg);
}
.manifiesto-cuerpo {
  padding-block: clamp(var(--space-20), 12vw, var(--space-24));
  text-align: center;
  max-width: 860px;
}
.manifiesto-simbolo { display: block; color: var(--color-accent); margin-bottom: var(--space-8); }
.manifiesto-corazon { width: 46px; height: 46px; margin: 0 auto; }

.manifiesto-frase {
  font-family: var(--font-display);
  font-weight: 400;
  /* Más grande: es la promesa de la marca y la frase que más se recuerda de
     la portada. "Más caro" es menos elementos y más grandes. */
  font-size: clamp(1.7rem, 1rem + 2.9vw, 3.3rem);
  line-height: 1.26;
  color: var(--color-primary);
  margin: 0;
  text-wrap: balance;
}
.manifiesto-firma {
  margin: var(--space-8) 0 0;
  font-size: var(--text-xs);
  letter-spacing: .22em;
  text-transform: uppercase;
  color: var(--color-muted);
}

/* ── LA MIEL ─────────────────────────────────────────────────────────
   Asimétrica y sangrando por la derecha. La base compone todo centrado o en
   dos mitades iguales; esto rompe el eje a propósito, porque es la sección
   que tiene que destacar sobre las demás.
   ------------------------------------------------------------------- */

.miel {
  position: relative;
  isolation: isolate;
  /* La banda es la placa de la clienta: cobre cepillado a sangre, con la
     tinta encima. Es el único bloque de la web que va entero en metal, y por
     eso es este — el diferencial tiene que ser lo que más brilla de la
     página. Antes era un melocotón plano (--color-cobre-suave): ni se leía
     como cobre ni se distinguía del resto de tintes pálidos.
     Va la versión del metal SIN sombra (--metal-cobre-texto), porque aquí
     hay texto encima: su punto más oscuro es el cobre y la tinta da 4.8. El
     foco de arriba repite la luz rasante de la placa sobre la marca. */
  background:
    radial-gradient(60% 70% at 22% 0%, color-mix(in srgb, var(--color-cobre-claro) 45%, transparent) 0%, transparent 60%),
    linear-gradient(100deg,
      var(--color-accent) 0%, var(--color-cobre-medio) 13%, var(--color-cobre-claro) 26%,
      var(--color-cobre-medio) 37%, var(--color-accent) 49%, var(--color-accent) 100%);
  overflow: hidden;
  /* Los bordes de la placa, grabados como el del hero. La foto se apoya
     encima y tapa el de su mitad, que es justo lo que haría un objeto puesto
     sobre una placa. */
  box-shadow:
    inset 0 1px 0 color-mix(in srgb, var(--color-cobre-tinta) 60%, transparent),
    inset 0 -1px 0 color-mix(in srgb, var(--color-cobre-tinta) 60%, transparent);
  /* Contenedor de consulta para que .miel-texto pueda calcular el margen del
     contenedor con 100cqi. Es el ancho real de la banda, sin la barra de
     scroll: con 100vw el calculo se desviaba los ~15 px que ocupa la barra. */
  container-type: inline-size;
}
/* El cepillado: hilos horizontales finísimos, claros y oscuros alternos, y
   el mismo grano del hero. Sin esto el degradado se lee como un relleno de
   CSS; con esto, como un material. Va en ::before, POR DEBAJO del contenido
   (z-index -1 dentro del isolation de .miel): encima se habría comido
   también la foto. */
.miel::before {
  content: "";
  position: absolute; inset: 0; z-index: -1;
  pointer-events: none;
  background:
    repeating-linear-gradient(0deg,
      color-mix(in srgb, var(--color-cobre-claro) 22%, transparent) 0 1px, transparent 1px 3px,
      color-mix(in srgb, var(--color-cobre-tinta) 10%, transparent) 3px 4px, transparent 4px 6px),
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)' opacity='.22'/%3E%3C/svg%3E");
  mix-blend-mode: soft-light;
}

/* El sangrado se hacia con un margin negativo calculado a ojo y la foto se
   salia 321 px de la ventana: el cazo y el hilo de miel —lo unico que la
   foto tenia que contar— quedaban fuera de pantalla. Ahora la seccion deja
   de ser un contenedor centrado y pasa a dos columnas a sangre: la de texto
   lleva el margen del contenedor como padding y la de la foto llega al borde
   exacto de la ventana, ni un pixel mas. */
.miel-rejilla {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: 0;
  align-items: stretch;
  max-width: none;
  padding: 0;
}
.miel-texto {
  /* box-sizing: content-box y no el border-box global. Las 52ch son de TEXTO,
     no de caja: con border-box el padding del sangrado (que en una pantalla
     de 1900 px pasa de 450 px sumando los dos lados) se comia el ancho hasta
     dejar la columna en una palabra por linea. Asi el maximo mide lo que
     tiene que medir y el padding se suma por fuera. */
  box-sizing: content-box;
  max-width: 52ch;
  align-self: center;
  /* Más aire que ninguna otra: es la sección protagonista de la portada, y
     si todas respiran igual ninguna manda (ritmo-y-jerarquia.md, regla 4). */
  padding-block: clamp(var(--space-20), 9vw, calc(var(--space-24) + var(--space-8)));
  /* El sangrado replica el margen del contenedor, pero el contenedor ademas
     mete su propio padding-inline de var(--space-6) (main.css): sin sumarlo,
     el titular de la miel salia 24 px a la izquierda del de "Tratamientos"
     que viene justo debajo. Se suma aqui y se mide en cqi, no en vw. */
  padding-inline: max(var(--space-6), calc((100cqi - var(--container)) / 2 + var(--space-6))) clamp(var(--space-8), 5vw, var(--space-16));
}

.miel-etiqueta {
  /* flex y no inline-block: lleva el filete grabado delante (ver los
     rótulos, arriba del todo). */
  display: flex; align-items: center; gap: var(--space-4);
  font-size: var(--text-xs);
  letter-spacing: .2em;
  text-transform: uppercase;
  font-weight: 700;
  color: var(--color-ink);
  margin: 0 0 var(--space-6);
}
.miel-titulo {
  font-family: var(--font-display);
  font-weight: 400;
  font-size: clamp(1.9rem, 1.2rem + 2.8vw, 3.1rem);
  line-height: 1.1;
  color: var(--color-primary);
  margin: 0 0 var(--space-5);
  text-wrap: balance;
}
.miel-resumen {
  font-size: var(--text-lg);
  line-height: 1.65;
  /* Tinta plena. Al 90% se dejaba pasar metal y, medido en el render (el
     peor píxel detrás de la letra), bajaba a 4.16 en móvil y 4.41 en un
     portátil de 1024: por debajo de AA justo en el párrafo que se lee.
     Calcularlo con los hex de la paleta daba un aprobado engañoso. */
  color: var(--color-ink);
  margin: 0 0 var(--space-8);
}
.miel-franjas {
  list-style: none; margin: 0 0 var(--space-8); padding: 0;
  display: flex; flex-wrap: wrap; gap: var(--space-6);
}
.miel-franjas li {
  display: flex; align-items: center; gap: var(--space-2);
  font-size: var(--text-sm);
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--color-primary);
  font-variant-numeric: tabular-nums;
}
.miel-icono-reloj { width: 18px; height: 18px; color: var(--color-ink); }
.miel .enlace-subrayado { color: var(--color-ink); }
.miel .enlace-subrayado:hover { color: var(--color-primary-hover); }
.miel-precio { font-family: var(--font-display); font-size: var(--text-lg); text-transform: none; }

/* La foto se sale por el borde derecho de la ventana. Es el gesto editorial
   de la sección: rompe la caja del contenedor sin necesidad de nada más. */
.miel-media {
  position: relative; min-height: 100%;
  /* La foto se apoya SOBRE la placa, no se pega a ella: una sombra teñida en
     su borde izquierdo le da el grosor de una pieza puesta encima. */
  box-shadow: -28px 0 56px -28px color-mix(in srgb, var(--color-primary) 55%, transparent);
}
/* object-fit: cover y NO el 'fill' de antes, que estiraba la foto. Con la
   columna a altura completa, la imagen llena la banda y desaparecen los
   190 px de rosa muerto que quedaban arriba y abajo. */
.miel-foto {
  width: 100%; height: 100%;
  object-fit: cover; object-position: 60% 50%;
  display: block;
}
.miel-media .foto-hueco { width: 100%; height: 100%; }
.foto-hueco--sobre-acento {
  border-color: color-mix(in srgb, var(--color-cobre-tinta) 35%, transparent);
  background: color-mix(in srgb, var(--color-cobre-tinta) 7%, var(--color-surface));
  color: var(--color-cobre-tinta);
}

/* ── MOSAICO DE TRATAMIENTOS ─────────────────────────────────────────
   El sustituto de la rejilla de tarjetas. Celdas planas separadas por un
   hilo del color de la banda: se leen como un tejido, no como objetos
   sueltos flotando.
   ------------------------------------------------------------------- */

.mosaico-intro {
  padding-block: clamp(var(--space-16), 9vw, var(--space-24)) var(--space-12);
  text-align: center;
}
.mosaico-intro .eyebrow {
  letter-spacing: .24em;
  color: var(--color-cobre-tinta);
  margin-bottom: var(--space-4);
}
/* La entradilla de la carta. Medida corta y centrada bajo el titular: son
   dos frases que enmarcan trece tratamientos, no un párrafo de cuerpo. */
.mosaico-entradilla {
  max-width: 54ch;
  margin: var(--space-6) auto 0;
  font-size: var(--text-lg);
  line-height: 1.7;
  color: var(--color-muted);
  text-wrap: pretty;
}

.mosaico-grupo { position: relative; isolation: isolate; padding-block: clamp(var(--space-12), 6vw, var(--space-16)); }

/* El mosaico fuera de la portada. Son tres sitios más desde que el catálogo
   entero habla el mismo idioma (mosaico-grupo.php):

     · /tratamientos/            el hub, con las cinco categorías
     · /tratamientos/<categoria>/ una sola, sin cabecera de grupo
     · la ficha, en "Otros tratamientos de esta categoría"

   Lo único que cambia es el aire de la cabecera. En la portada el mosaico
   entra después de la banda de la miel y necesita esos ~150 px de arriba
   para despegarse de ella; aquí entra justo debajo de la miga de pan, y con
   ese mismo aire la página parecía empezar a mitad de pantalla. */
.mosaico--hermanos .mosaico-intro,
body:not(.home) .mosaico > .mosaico-intro {
  padding-block: clamp(var(--space-12), 6vw, var(--space-16)) var(--space-10);
}

/* En la ficha, el bloque de hermanos es una sección DENTRO del artículo, no
   la página: su rótulo va al mismo tamaño que el resto de rótulos de la
   ficha y el titular no compite con el <h1> del tratamiento. */
.mosaico--hermanos { margin-top: clamp(var(--space-16), 8vw, var(--space-20)); }
.mosaico--hermanos .mosaico-intro .eyebrow { color: var(--color-cobre-tinta); letter-spacing: .24em; }

/* La salida hacia el hub desde una categoría. Centrada y con aire, como el
   resto de remates de esta web: pegada a la izquierda debajo de una banda a
   sangre se leía como un enlace olvidado. */
.volver { margin: 0; text-align: center; }
/* Los grupos claros no se separan con un corte de color: EMPALMAN. El lino
   es el mismo del suelo, así que la intro y el primer grupo son una sola
   superficie (antes había entre los dos una costura de un 1-2% que solo se
   leía como un error). La arena entra degradándose desde el lino en sus
   primeros 160 px, así que la página se oscurece un paso sin que se vea
   dónde. Los cortes netos quedan para las placas (cobre, espresso), que sí
   tienen borde, como la placa de verdad. */
.mosaico-grupo--lino  { background: var(--tile-lino); }
.mosaico-grupo--arena { background: linear-gradient(180deg, var(--tile-lino) 0, var(--tile-arena) 160px); }
.mosaico-grupo--cobre { background: linear-gradient(180deg, var(--tile-lino) 0, var(--tile-cobre) 160px); }

/* El ancla del mosaico. No es decoración: son más de 3.000 px de rejilla, y
   sin un punto de peso a media altura el catálogo se lee como una sola masa
   clara. Jerarquiza además el diferencial del negocio.
   Es COBRE BRUÑIDO y no espresso: la sombra de las esquinas de la placa.
   Todo lo que es miel en la portada es cobre (la banda de arriba, este
   grupo), y el espresso queda para la persona y el cierre. Siendo espresso
   se leía como una banda oscura casi vacía —dos celdas en 1.400 px— que
   repetía a la de "Quién te atiende" dos secciones más abajo.
   Lo que hace que se lea como METAL y no como marrón es el reflejo, no el
   tono: una primera versión era un degradado de cobre oscuro plano con un
   cepillado marcado, y a tamaño real se leía como madera. En la placa, las
   esquinas en sombra son casi negras y lo que las hace cobre es la luz que
   las cruza. Así que aquí: base honda (el bruñido mezclado con espresso) y
   un reflejo diagonal de cobre al mismo ángulo que el resto del metal
   (115deg). El reflejo se queda por debajo de lo que dejaría la crema en
   4.5:1 — medido en el render, no con los hex. */
.mosaico-grupo--oscuro {
  background:
    linear-gradient(115deg,
      transparent 18%,
      color-mix(in srgb, var(--color-accent) 20%, transparent) 40%,
      color-mix(in srgb, var(--color-cobre-claro) 14%, transparent) 50%,
      color-mix(in srgb, var(--color-accent) 18%, transparent) 60%,
      transparent 82%),
    radial-gradient(70% 140% at 88% -20%, color-mix(in srgb, var(--color-accent) 20%, transparent) 0%, transparent 62%),
    linear-gradient(180deg,
      color-mix(in srgb, var(--color-cobre-oscuro) 62%, var(--color-primary)) 0%,
      color-mix(in srgb, var(--color-cobre-oscuro) 48%, var(--color-primary)) 100%);
  color: var(--color-on-primary);
  /* El borde de la placa, grabado: filete de cobre arriba y abajo. Va entre
     dos secciones claras, así que se lee como una banda, no como un escalón
     (ritmo-y-jerarquia.md, "Costuras"). */
  box-shadow:
    inset 0 1px 0 color-mix(in srgb, var(--color-cobre-claro) 45%, transparent),
    inset 0 -1px 0 color-mix(in srgb, var(--color-cobre-claro) 45%, transparent);
}
/* El mismo cepillado que el hero y la banda de la miel: las tres superficies
   de cobre son la misma pieza de metal en tres luces. */
.mosaico-grupo--oscuro::before {
  content: "";
  position: absolute; inset: 0; z-index: -1;
  pointer-events: none;
  /* Mucho más suave que en las placas claras: sobre un fondo oscuro, el
     mismo cepillado se leía como vetas de madera. */
  background: repeating-linear-gradient(0deg,
    color-mix(in srgb, var(--color-cobre-claro) 5%, transparent) 0 1px, transparent 1px 3px,
    color-mix(in srgb, #000 5%, transparent) 3px 4px, transparent 4px 6px);
  mix-blend-mode: soft-light;
}
.mosaico-grupo--oscuro .mosaico-cabecera {
  border-bottom-color: color-mix(in srgb, var(--color-on-primary) 28%, transparent);
}
.mosaico-grupo--oscuro .mosaico-icono { color: var(--color-cobre-claro); }
.mosaico-grupo--oscuro .mosaico-categoria a { color: var(--color-on-primary); }
.mosaico-grupo--oscuro .mosaico-categoria a:hover { color: var(--color-cobre-claro); }
.mosaico-grupo--oscuro .mosaico-intro-cat {
  color: color-mix(in srgb, var(--color-on-primary) 76%, transparent);
}
.mosaico-grupo--oscuro .mosaico-celda {
  /* Casi transparentes, con el hilo en cobre. Con el 7% de crema que
     llevaban sobre el petroleo, sobre el espresso se leian como cajas
     marrones planas: el unico sitio de la web donde la paleta caia en
     "marron". Ahora la celda la dibuja la linea, no el relleno. */
  background: transparent;
}
.mosaico-grupo--oscuro { --hilo: color-mix(in srgb, var(--color-accent) 48%, var(--color-cobre-oscuro)); }
.mosaico-grupo--oscuro .mosaico-enlace:hover {
  background: color-mix(in srgb, var(--color-accent) 12%, transparent);
}
.mosaico-grupo--oscuro .mosaico-servicio { color: var(--color-on-primary); }
.mosaico-grupo--oscuro .mosaico-enlace:hover .mosaico-servicio { color: var(--color-cobre-claro); }
.mosaico-grupo--oscuro .mosaico-resumen {
  color: color-mix(in srgb, var(--color-on-primary) 72%, transparent);
}
.mosaico-grupo--oscuro .mosaico-duracion { color: var(--color-cobre-claro); }

.mosaico-cabecera {
  display: flex; align-items: flex-start; gap: var(--space-5);
  margin-bottom: var(--space-8);
  padding-bottom: var(--space-6);
  border-bottom: 1px solid color-mix(in srgb, var(--color-primary) 16%, transparent);
}
.mosaico-icono { flex: none; color: var(--color-cobre-tinta); }
/* 48 y no 40: son los iconos dibujados para esta web (la pieza que no se
   puede copiar de un set) y a 40 px se leían como iconos de librería. */
.shunku-icono--categoria { width: 48px; height: 48px; }
.mosaico-categoria {
  font-family: var(--font-display);
  font-weight: 400;
  font-size: var(--text-2xl);
  letter-spacing: .06em;
  text-transform: uppercase;
  margin: 0 0 var(--space-2);
}
.mosaico-categoria a { color: var(--color-primary); text-decoration: none; }
.mosaico-categoria a:hover { color: var(--color-cobre-tinta); }
.mosaico-intro-cat {
  margin: 0; max-width: 62ch;
  font-size: var(--text-sm); line-height: 1.6;
  color: color-mix(in srgb, var(--color-primary) 70%, transparent);
}

.mosaico-celdas {
  list-style: none; margin: 0; padding: 0;
  display: grid;
  /* auto-FIT, no auto-fill: con dos tratamientos, auto-fill dejaba dos
     columnas fantasma y auto-fit las colapsa estirando las celdas.
     El contenedor NO pinta fondo ni borde. Los pintaba, y como la rejilla
     casi nunca cuadra —cinco celdas en cuatro columnas dejan tres huecos—,
     ese fondo salía como un bloque gris de hasta el 50% del ancho. Se leía
     como una maqueta rota, que es lo más caro que puede pasarle a una web.
     Ahora el hilo entre celdas es el propio color de la banda, que se ve por
     el gap, y donde no hay celda simplemente no hay nada. */
  /* Una columna de partida (movil). Las de escritorio se fijan abajo con
     numero EXPLICITO: auto-fit no convive con una celda que ocupa dos
     columnas — con las dos cosas a la vez el navegador resolvia la rejilla
     a dos columnas gigantes de 527 y 603 px en vez de cuatro. */
  grid-template-columns: 1fr;
  gap: 1px;
  background: none;
  border: 0;
}
.mosaico-celda {
  /* Sin relleno: la celda la dibuja el hilo, no una caja. Con el blanco roto
     que llevaban, el catálogo se leía como una rejilla de tarjetas —
     justo lo que la regla 1 de este archivo ("nada de tarjetas") prohíbe, y
     lo primero que delataba la plantilla. Ahora se lee como la carta de un
     centro: un tejido de líneas finas sobre la superficie de la banda.
     El hilo es un outline SIN desplazamiento, así que cae en el gap de 1 px:
     el de las dos celdas vecinas se pinta en el mismo píxel y la línea sale
     nítida, sin doblarse. Y es de color sólido (no transparente) por lo
     mismo: dos transparentes superpuestos oscurecerían el cruce. Donde no
     hay celda no se pinta nada. */
  background: transparent;
  outline: 1px solid var(--hilo, color-mix(in srgb, var(--color-cobre-tinta) 20%, var(--tile-lino)));
  outline-offset: 0;
}
.mosaico-grupo--arena { --hilo: color-mix(in srgb, var(--color-cobre-tinta) 22%, var(--tile-arena)); }
.mosaico-enlace {
  /* Columna flexible: la duracion baja al pie de la celda con margin-top
     auto. Las filas las mide la celda de foto, asi que el texto se quedaba
     arriba y cada celda tenia un tercio de aire muerto debajo. */
  display: flex; flex-direction: column; height: 100%;
  /* Más generoso de lo que pedía la retícula. Trece tratamientos con poco
     aire se leen como una hoja de cálculo; con aire, como un catálogo. */
  padding: var(--space-8) var(--space-6) var(--space-10);
  text-decoration: none;
  transition: background var(--duration-base) var(--ease-out);
}
.mosaico-enlace:hover { background: color-mix(in srgb, var(--color-accent) 8%, transparent); }

.mosaico-servicio {
  font-family: var(--font-display);
  font-weight: 400;
  /* El nombre del tratamiento es lo que se busca al escanear la carta: sube
     de tamaño y separa más del resumen. Subir el contraste tipográfico es lo
     que más levanta una página, más que añadir efectos. */
  font-size: clamp(1.15rem, 1rem + .4vw, 1.45rem);
  line-height: 1.2;
  color: var(--color-primary);
  margin: 0 0 var(--space-3);
}
.mosaico-enlace:hover .mosaico-servicio { color: var(--color-cobre-tinta); }
.mosaico-resumen {
  font-size: var(--text-sm); line-height: 1.6;
  color: color-mix(in srgb, var(--color-primary) 68%, transparent);
  margin: 0 0 var(--space-4);
}
/* Celdas sin resumen: la duracion NO se ancla al pie.
   Al entrar la carta definitiva hay seis tratamientos publicados sin resumen
   —estan a la espera de que la clienta escriba su descripcion—, y en esas
   celdas el anclaje dejaba el titulo arriba, la duracion abajo y un agujero
   de 200 px en medio. Pegada al titulo, la celda se lee como corta, que es
   lo que es, y el aire queda al final en vez de partirla por la mitad.
   Comparado renderizado el 2026-09-17, no decidido a ojo.
   Las celdas que SI tienen resumen no se tocan: ahi el anclaje es correcto y
   es lo que alinea las duraciones de toda la fila. */
.mosaico-enlace:not(:has(.mosaico-resumen)) .mosaico-duracion { margin-top: 0; }

.mosaico-duracion {
  margin: auto 0 0;
  font-size: var(--text-xs);
  /* .14em partia "45 MIN · 60 MIN · 90 MIN · 120 MIN" en 3 + 1, y la linea
     huerfana con la ultima franja sola se leia como un error de maqueta en
     los seis tratamientos que tienen las cuatro duraciones. */
  letter-spacing: .1em;
  text-transform: uppercase;
  color: var(--color-cobre-tinta);
  font-variant-numeric: tabular-nums;
  /* Y si aun asi no cabe, que parta por la mitad (2 + 2) en vez de dejar una
     sola franja abajo. */
  text-wrap: balance;
}

/* La celda de foto llena su hueco entero, sin margen: es una pieza más del
   tejido, no una imagen dentro de una caja. */
.mosaico-celda--foto {
  padding: 0; min-height: 260px; display: flex; overflow: hidden;
  outline: 0;
  /* Marco de la foto, que ahora va posicionada. Ver .mosaico-foto. */
  position: relative;
}
/* Dos columnas en escritorio. Con cuatro tratamientos + foto, una rejilla de
   cuatro columnas cuadra exacta en dos filas (2 celdas + foto de 2 = 4, y
   luego 2 celdas + la foto que sigue). Es la diferencia entre una rejilla que
   respira y una con huecos. */
@media (min-width: 700px) {
  /* Categorias cortas (sin celda de foto): dos columnas, y las celdas se
     reparten el ancho en vez de dejar columnas fantasma. */
  .mosaico-celdas { grid-template-columns: repeat(2, 1fr); }
  /* Una categoria con UN solo tratamiento ("Spa & bienestar") dejaba media
     fila vacia: una caja a la izquierda y un agujero del mismo tamano a la
     derecha, que es lo que hace que una rejilla parezca sin terminar. Sola en
     la fila, la celda ocupa el ancho entero y se lee como una banda: una
     decision, no un hueco. Es la misma correccion que ya lleva el tercer
     tratamiento detras de la foto, aplicada al caso de uno solo. */
  .mosaico-celdas > .mosaico-celda:only-child { grid-column: 1 / -1; }
}
@media (min-width: 1000px) {
  /* Con foto: cuatro columnas y la foto ocupando un cuadrado de 2x2. Con
     cuatro tratamientos el bloque cuadra exacto —dos celdas + foto llenan la
     primera fila, las otras dos llenan la segunda bajo la foto— que es justo
     lo que antes dejaba el 38% de la rejilla vacia. */
  .mosaico-celdas--con-foto { grid-template-columns: repeat(4, 1fr); }
  .mosaico-celda--foto { grid-column: span 2; grid-row: span 2; }
  /* Con tres tratamientos, el tercero se quedaba solo en la segunda fila
     junto a un hueco vacío del tamaño de una celda ("Spa y bienestar"): se
     leía como una maqueta sin terminar. Si tras la foto queda un único
     tratamiento, ocupa las dos columnas libres. */
  .mosaico-celdas--con-foto > .mosaico-celda--foto + .mosaico-celda:last-child { grid-column: span 2; }
  /* Y el mismo caso una fila mas abajo. Con CINCO tratamientos ("Masajes")
     las dos primeras celdas y la foto llenan la fila 1, otras dos llenan la
     fila 2 bajo la foto, y el quinto se quedaba solo en la fila 3 con TRES
     columnas vacias al lado: el agujero mas grande del catalogo, y encima en
     la categoria que mas gente mira.

     La cuenta: la foto es el tercer hijo, asi que a partir de ahi las celdas
     caen de dos en dos y la que abre fila es siempre la de indice par. Si esa
     es ademas la ultima, esta sola. De la sexta en adelante la fila esta
     entera libre (la foto solo ocupa las dos primeras), asi que puede tomarla
     completa; el caso de la cuarta lo resuelve la regla de arriba con span 2,
     porque ahi la foto todavia ocupa las columnas 3 y 4. */
  .mosaico-celdas--con-foto > .mosaico-celda--foto ~ .mosaico-celda:last-child:nth-child(n+6):nth-child(even) {
    grid-column: 1 / -1;
  }
}
/* ── Categorías cortas: el texto a un lado y la foto al otro ──────────
   La maqueta de una categoría de uno o dos tratamientos. No es un apaño
   para rellenar: es la forma que le corresponde.

   Dos tratamientos en una rejilla pensada para cuatro columnas se leen
   como una rejilla a medio llenar —dos cajas y aire—, y eso pasaba justo
   en las dos bandas con menos contenido de la portada, que son las que
   menos lo aguantan. Los mismos dos contra una foto de la misma altura
   se leen como una pieza entera, y además rima con los grupos grandes,
   donde el texto también entrega a una foto por la derecha.

   La foto va SIEMPRE a la derecha aquí (grid-column 2 y todas las filas),
   aunque en el marcado venga detrás del último tratamiento: en el DOM el
   orden es el de lectura —los tratamientos primero, que son el contenido—
   y la rejilla la coloca donde toca. */
@media (min-width: 700px) {
  .mosaico-celdas--pareja {
    grid-template-columns: 1fr 1fr;
    /* Las filas van DECLARADAS, una por tratamiento (--filas lo pone el PHP).
       No es un capricho: `grid-row: 1 / -1` de la foto cuenta líneas
       explícitas, y sin declararlas -1 es la línea 1 — la foto ocupaba una
       sola fila y el segundo tratamiento se quedaba con el hueco al lado. */
    grid-template-rows: repeat(var(--filas, 1), minmax(0, 1fr));
  }
  .mosaico-celdas--pareja > .mosaico-celda--foto {
    grid-column: 2;
    grid-row: 1 / -1;
  }
}
/* Suelo de altura para que la banda tenga presencia: con un solo
   tratamiento corto, la foto y la celda medían 120 px y la banda entera
   se leía como una nota al pie del catálogo. */
.mosaico-celdas--pareja > .mosaico-celda--foto { min-height: clamp(220px, 24vw, 320px); }

/* ── La categoría de un solo tratamiento y sin foto ───────────────────
   "Spa & bienestar": una celda a ancho completo con el texto en la
   esquina de arriba a la izquierda y mil píxeles de nada al lado. A
   media fila dejaba un agujero del tamaño de una celda, y a fila entera
   un rectángulo vacío — las dos formas se leen como una maqueta sin
   terminar, que es lo más caro que puede pasarle a una web.

   La salida no es rellenar: es reconocer qué es. Es el ÚLTIMO grupo del
   catálogo y tiene un solo tratamiento, o sea un remate, no una rejilla.
   Centrado y con aire, la anchura pasa de sobrar a ser el gesto —el
   mismo recurso que ya usa "Un espacio para ti" en Contacto.

   Sigue siendo una celda del tejido: mismo hilo, mismo fondo, misma
   familia (regla 5 de ritmo-y-jerarquia). Solo cambia cómo se reparte
   el contenido dentro.

   En cuanto la categoría tenga foto, entra la maqueta 'pareja' y esto
   deja de aplicarse solo. */
.mosaico-celdas:not(.mosaico-celdas--pareja) > .mosaico-celda:only-child .mosaico-enlace {
  align-items: center;
  text-align: center;
  padding-block: clamp(var(--space-12), 6vw, var(--space-16));
}
.mosaico-celdas:not(.mosaico-celdas--pareja) > .mosaico-celda:only-child .mosaico-servicio {
  font-size: clamp(1.35rem, 1.1rem + .8vw, 1.9rem);
  margin-bottom: var(--space-4);
}
.mosaico-celdas:not(.mosaico-celdas--pareja) > .mosaico-celda:only-child .mosaico-resumen {
  max-width: 46ch;
  font-size: var(--text-base);
  margin-bottom: 0;
}
/* La duración, si la hay, se despega del cuerpo en vez de anclarse al pie:
   en una celda centrada el anclaje la mandaba al fondo del rectángulo. */
.mosaico-celdas:not(.mosaico-celdas--pareja) > .mosaico-celda:only-child .mosaico-duracion {
  margin-top: var(--space-6);
}

/* object-fit y no aspect-ratio: la celda ya tiene la altura que le da la fila
   de la rejilla, y la foto se recorta para llenarla. Así una imagen cuadrada
   y una vertical caben igual de bien y el tejido no se descuadra según lo que
   suba la clienta.

   POSICIONADA, y esto es lo que arreglaba los huecos de todo el mosaico.
   En flujo normal, `height: 100%` dentro de una fila de altura indefinida se
   resuelve a `auto`: la foto se pintaba a su proporción natural sobre ~570 px
   de ancho, o sea 400-570 px de alto, y como ocupa DOS filas, esas dos filas
   pasaban a medir ~285 px cada una. Las celdas de texto de al lado, que con
   título y duración miden 110, se estiraban hasta ahí — de ahí los 170 px de
   vacío debajo de cada tratamiento. Era peor cuanto menos texto tenía la
   categoría, así que le tocaba justo a las que peor aguantan un hueco:
   "Rituales exclusivos" y "Rituales de cabeza y pies", donde todavía no hay
   resúmenes escritos.

   Sacada del flujo con position:absolute, la foto deja de opinar sobre la
   altura de las filas: las miden los tratamientos, que es quien debe, y la
   foto rellena lo que salga. El min-height de la celda sigue de suelo para
   que no quede convertida en una tira cuando la categoría es muy corta. */
.mosaico-foto {
  position: absolute; inset: 0;
  width: 100%; height: 100%; object-fit: cover; display: block;
}
.foto-hueco--celda {
  width: 100%; aspect-ratio: auto; border: 0; border-radius: 0;
  background: color-mix(in srgb, var(--color-primary) 8%, transparent);
}

/* ── Retoques a las variantes reutilizadas ───────────────────────────
   Sobre nosotros, FAQ, cierre y footer sí son de la base. Sin estos
   retoques se notaría el salto entre lo hecho a medida y lo heredado.
   ------------------------------------------------------------------- */

/* Esta banda se oscurece aqui, pero no lleva la clase .section--dark, que es
   quien redefine los tokens de contraste en la base. Sin esa redefinicion los
   parrafos seguian pintandose con el --color-muted de fondo claro (#5F7079,
   pizarra oscura) sobre la banda oscura: casi ilegibles. Se repiten aqui los
   mismos tokens que usa .section--dark. */
.sobre-nosotros--con-imagen {
  background:
    radial-gradient(65% 90% at 0% 100%, color-mix(in srgb, var(--color-accent) 18%, transparent) 0%, transparent 62%),
    var(--color-primary);
  color: var(--color-on-primary);
  /* Mismo gesto que el ancla del mosaico (filete de cobre en los dos bordes,
     veladura por una esquina), con la veladura en la esquina contraria para
     que las dos no se lean como copias. */
  box-shadow:
    inset 0 1px 0 color-mix(in srgb, var(--color-accent) 55%, transparent),
    inset 0 -1px 0 color-mix(in srgb, var(--color-accent) 55%, transparent);
  --color-muted: color-mix(in srgb, var(--color-on-primary) 78%, transparent);
  --color-border: color-mix(in srgb, var(--color-on-primary) 25%, transparent);
}
.sobre-nosotros--con-imagen .section-title {
  font-family: var(--font-display); font-weight: 400;
  text-transform: uppercase; letter-spacing: .05em;
}
.sobre-nosotros--con-imagen .eyebrow { color: var(--color-cobre-claro); letter-spacing: .24em; }

/* "Cómo trabajo" — solo en /sobre-nosotros/, dentro de la columna de texto.
   Va separado por un filete y no por una caja: en esta identidad la jerarquía
   la hacen el aire y las líneas, nunca un contenedor. El punto de la lista lo
   pone .lista-marcada, la misma que usan las fichas de tratamiento, para que
   la página y las fichas se lean como el mismo sitio. */
.sobre-nosotros-modo {
  margin-top: var(--space-10);
  padding-top: var(--space-8);
  border-top: 1px solid var(--color-border);
}
.sobre-nosotros-modo-titulo {
  font-family: var(--font-display);
  font-weight: 400;
  font-size: var(--text-xs);
  letter-spacing: .24em;
  text-transform: uppercase;
  color: var(--color-cobre-claro);
  margin: 0 0 var(--space-5);
}

/* El punto de la lista es cobre, y sobre el espresso se apaga: aquí sube al
   cobre lavado, que es el acento que esta banda ya usa en el rótulo. */
.sobre-nosotros--shunku .lista-marcada li::before { background: var(--color-cobre-claro); }

/* El hueco de foto sobre la banda oscura.
   Con los colores de fondo claro, la caja del hueco salia casi blanca sobre
   la banda oscura: era el elemento MAS brillante de esa zona de la pagina, y lo
   que mas se miraba era justo el sitio donde todavia no hay nada. */
.sobre-nosotros--con-imagen .foto-hueco {
  background: color-mix(in srgb, var(--color-on-primary) 6%, transparent);
  border-color: color-mix(in srgb, var(--color-on-primary) 26%, transparent);
  color: color-mix(in srgb, var(--color-on-primary) 68%, transparent);
}

/* FAQ: fuera las cajas. Solo filetes finos, a ancho completo — el briefing
   pide expresamente el acordeón sin columnas (apartado 9). */
.faq--acordeon .faq-list { max-width: 900px; margin-inline: auto; gap: 0; }
.faq--acordeon .faq-item {
  /* Filete de cobre en vez de gris: el acordeón era lo único de la página
     que seguía separando con líneas neutras. */
  background: transparent; border: 0;
  border-bottom: 1px solid color-mix(in srgb, var(--color-cobre-tinta) 22%, transparent);
  border-radius: 0; padding: 0;
  transition: background var(--duration-base) var(--ease-out);
}
.faq--acordeon .faq-item:hover { background: color-mix(in srgb, var(--color-accent) 5%, transparent); }
.faq--acordeon .faq-item:first-child {
  border-top: 1px solid color-mix(in srgb, var(--color-cobre-tinta) 22%, transparent);
}
/* El marcador del navegador se quita AQUI y no en main.css.
   Estaba en main.css y se perdio al sincronizar el tema con la base nueva:
   el acordeon volvio a salir con el triangulito gris por defecto, que es la
   senal mas clara de "esto no lo ha tocado nadie" que puede tener una web.
   Hacen falta las tres declaraciones —list-style, ::marker y el
   pseudo-elemento de WebKit— porque ningun navegador respeta las tres. */
.faq--acordeon .faq-item summary {
  font-family: var(--font-display); font-weight: 400;
  font-size: var(--text-xl); line-height: 1.35;
  padding: var(--space-8) var(--space-4);
  display: flex; align-items: flex-start; justify-content: space-between;
  gap: var(--space-6);
  cursor: pointer;
  list-style: none;
}
.faq--acordeon .faq-item summary::marker { content: ""; }
.faq--acordeon .faq-item summary::-webkit-details-marker { display: none; }
.faq--acordeon .faq-item summary::after {
  content: "+";
  flex: none;
  /* Más fino y más grande: a peso normal, el signo pesaba más que la
     pregunta. */
  font-family: var(--font-body); font-weight: 200;
  font-size: 1.75rem; line-height: 1;
  color: var(--color-accent);
  transition: transform var(--duration-base) var(--ease-out), color var(--duration-base) var(--ease-out);
}
.faq--acordeon .faq-item[open] summary::after { transform: rotate(180deg); color: var(--color-cobre-tinta); }
.faq--acordeon .faq-item[open] summary::after { content: "−"; }
.faq--acordeon .faq-item summary:focus-visible {
  outline: 2px solid var(--color-accent); outline-offset: -4px;
}
.faq--acordeon .faq-item[open] summary { color: var(--color-cobre-tinta); }
.faq--acordeon .faq-item > div { padding: 0 var(--space-2) var(--space-6); max-width: 72ch; }
/* La respuesta se pinta sin wp_kses_post() a proposito, para que se puedan
   incrustar videos (ver faq-acordeon.php). El reset de main.css encaja img,
   video y svg dentro de su caja, pero deja fuera <iframe>: un embed de
   YouTube viene con width="560" y a 375 px se salia casi 300 px, recortado en
   silencio por el overflow-x del body. Aqui se le pone el mismo techo, y de
   paso a las tablas y a las URLs largas que se pegan en una respuesta. */
.faq--acordeon .faq-item > div { overflow-wrap: anywhere; }
.faq--acordeon .faq-item > div :is(iframe, embed, object) { max-width: 100%; }
.faq--acordeon .faq-item > div table { display: block; overflow-x: auto; }
/* Las secciones de la base traen .section-title con la sans en negrita; en
   esta identidad los titulos de seccion van en la display. Se corrige por
   seccion segun se van usando. "Por que Shunku by Rox" (.ventajas) entro el
   2026-09-17 —el bloque nunca se habia pintado en este proyecto— y salia en
   sans justo debajo de "Un espacio para ti", que va en display: dos titulos
   consecutivos en dos familias distintas. */
.faq .section-title,
.ventajas .section-title { font-family: var(--font-display); font-weight: 400; }
/* El FAQ es de la familia del catálogo (lino), no una banda blanca suelta
   entre las dos anclas espresso. */
.faq.section--surface { background: var(--color-bg); }
.faq .eyebrow { letter-spacing: .24em; color: var(--color-cobre-tinta); }

.cta-final--franja {
  /* El cierre es la última ancla de la página y era una barra de 186 px con
     un titular y un botón — el "fallo por defecto" exacto del CTA final
     (frontend-design-pro, secciones.md §9). Ahora es un momento: centrado,
     con aire, y con los hilos de cobre en las esquinas opuestas, como las
     cintas de la placa. La página abre y cierra con la misma pieza. */
  position: relative;
  isolation: isolate;
  overflow: hidden;
  padding-block: clamp(var(--space-20), 10vw, calc(var(--space-24) + var(--space-8)));
  text-align: center;
  background:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 520 360' preserveAspectRatio='xMinYMax meet'%3E%3Cdefs%3E%3ClinearGradient id='h' x1='0' y1='1' x2='1' y2='0'%3E%3Cstop offset='0' stop-color='%236B3820' stop-opacity='.95'/%3E%3Cstop offset='.38' stop-color='%23EDB894'/%3E%3Cstop offset='.5' stop-color='%23FFE6CF'/%3E%3Cstop offset='.7' stop-color='%23BD7650' stop-opacity='.7'/%3E%3Cstop offset='1' stop-color='%23BD7650' stop-opacity='0'/%3E%3C/linearGradient%3E%3C/defs%3E%3Cg%3E%3Cpath d='M-10 372C120 330 170 250 300 232S470 190 540 120' fill='none' stroke='url(%23h)' stroke-width='2.2' stroke-linecap='round'/%3E%3Cpath d='M-10 348C110 312 190 248 318 246S478 214 540 168' fill='none' stroke='url(%23h)' stroke-width='1' stroke-linecap='round'/%3E%3Cpath d='M20 372C150 344 238 292 350 286S490 262 540 226' fill='none' stroke='url(%23h)' stroke-width='.8' stroke-linecap='round'/%3E%3C/g%3E%3C/svg%3E") left bottom / min(28vw, 400px) auto no-repeat,
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 520 360' preserveAspectRatio='xMinYMax meet'%3E%3Cdefs%3E%3ClinearGradient id='h' x1='0' y1='1' x2='1' y2='0'%3E%3Cstop offset='0' stop-color='%236B3820' stop-opacity='.95'/%3E%3Cstop offset='.38' stop-color='%23EDB894'/%3E%3Cstop offset='.5' stop-color='%23FFE6CF'/%3E%3Cstop offset='.7' stop-color='%23BD7650' stop-opacity='.7'/%3E%3Cstop offset='1' stop-color='%23BD7650' stop-opacity='0'/%3E%3C/linearGradient%3E%3C/defs%3E%3Cg transform='translate(520 0) scale(-1 1)'%3E%3Cpath d='M-10 372C120 330 170 250 300 232S470 190 540 120' fill='none' stroke='url(%23h)' stroke-width='2.2' stroke-linecap='round'/%3E%3Cpath d='M-10 348C110 312 190 248 318 246S478 214 540 168' fill='none' stroke='url(%23h)' stroke-width='1' stroke-linecap='round'/%3E%3Cpath d='M20 372C150 344 238 292 350 286S490 262 540 226' fill='none' stroke='url(%23h)' stroke-width='.8' stroke-linecap='round'/%3E%3C/g%3E%3C/svg%3E") right top / min(28vw, 400px) auto no-repeat,
    radial-gradient(55% 90% at 50% 0%, color-mix(in srgb, var(--color-accent) 20%, transparent) 0%, transparent 70%),
    var(--color-primary);
  /* Esta entrega al pie, que es más oscuro: filete de cobre solo ARRIBA. Por
     abajo ya lo pone el pie (ver .footer--negocio-local); con los dos se
     dibujaban dos líneas pegadas. */
  box-shadow: inset 0 1px 0 color-mix(in srgb, var(--color-accent) 55%, transparent);
}
.cta-final--franja .cta-franja-titulo {
  font-family: var(--font-display); font-weight: 400;
  text-transform: uppercase; letter-spacing: .05em;
  font-size: clamp(1.9rem, 1rem + 2.8vw, 3.2rem);
  line-height: 1.1;
  margin: 0;
}
.cta-final--franja .container {
  flex-direction: column; align-items: center; justify-content: center;
  gap: var(--space-8);
}
.cta-final--franja .cta-franja-sub {
  margin: var(--space-5) auto 0;
  font-size: var(--text-lg);
  max-width: 46ch;
}

.footer--minimo { background: var(--color-primary); color: var(--color-on-primary); }

/* ── Responsive ──────────────────────────────────────────────────────
   Mobile-first es requisito del briefing (apartado 3): la clienta espera
   que la mayoría de las visitas lleguen desde el móvil.
   ------------------------------------------------------------------- */

@media (max-width: 900px) {
  .miel-rejilla { grid-template-columns: 1fr; }
  /* En móvil la foto deja de sangrar: a un ancho de 375px, salirse del
     contenedor solo consigue que se corte por la derecha. */
  .miel-media { margin-right: 0; order: 2; }
  .miel-texto { order: 1; max-width: none; }
}

@media (max-width: 620px) {
  /* En móvil el rótulo del manifiesto se parte en dos líneas y los filetes
     se quedaban sueltos en los bordes de la pantalla, despegados del texto.
     Los rótulos cortos ("Tratamientos", "Antes de venir") caben en una línea
     y los conservan. */
  .manifiesto-firma::before, .manifiesto-firma::after { display: none; }
  /* El marco de hilo de la foto de Mirna casi tocaba el borde de la
     pantalla con los 12 px de escritorio. */
  .sobre-nosotros--shunku .sobre-nosotros-media { outline-offset: 8px; }
  .hero-shunku { min-height: 82vh; }
  .hero-shunku-cuerpo { padding-block: var(--space-20) var(--space-16); }
  .hero-shunku-marca { letter-spacing: .22em; gap: var(--space-3); }
  .hero-shunku-titulo { letter-spacing: .03em; max-width: 14ch; }
  .mosaico-cabecera { flex-direction: column; gap: var(--space-4); }
  .shunku-icono--categoria { width: 34px; height: 34px; }
  .mosaico-celdas { grid-template-columns: 1fr; }
  .mosaico-celda--foto { min-height: 180px; }
  .faq--acordeon .faq-item summary { font-size: var(--text-lg); padding: var(--space-5) 0; }
}

@media (prefers-reduced-motion: reduce) {
  .hero-shunku-scroll span { animation: none; opacity: .6; transform: scaleY(1); }
}

/* ── Cabecera flotante sobre un hero CLARO ───────────────────────────
   La regla de la base pinta logo y menú en --color-on-primary porque asume
   una fotografía oscura detrás. Sobre el hero de luz de Shunku eso hacía que
   el logo desapareciera de la pantalla: texto casi blanco sobre lino.
   La clase la pone functions.php y solo cuando el hero va sin foto, así que
   el día que se suba una imagen de fondo esto deja de aplicarse solo.
   ------------------------------------------------------------------- */

body.hero-shunku-claro.header-flotante .header:not(.is-scrolled) .logo-text,
body.hero-shunku-claro.header-flotante .header:not(.is-scrolled) .nav-toggle {
  color: var(--color-primary);
}
@media (min-width: 861px) {
  body.hero-shunku-claro.header-flotante .header:not(.is-scrolled) .nav-list a { color: var(--color-primary); }
}
/* Sobre la placa, el hover no puede cambiar a cobre (cobre sobre cobre, 2.3):
   se marca con un filete de tinta bajo el enlace, el mismo gesto que los
   filetes del rótulo. */
@media (min-width: 861px) {
  body.hero-shunku-claro.header-flotante .header:not(.is-scrolled) .nav-list a:hover {
    color: var(--color-ink);
    text-decoration: underline;
    text-decoration-thickness: 1px;
    text-underline-offset: 6px;
  }
}

/* Las páginas interiores ya NO llevan .header-flotante: la cabecera
   transparente solo flota en la portada, que es donde hay una placa de cobre
   bajo la que flotar (webker_header_flotante(), inc/secciones.php). Aquí
   había un parche que les devolvía el color a logo y menú; era maquillaje
   sobre el fallo real, que la barra no ocupaba sitio y el contenido de la
   página empezaba debajo de ella. Corregido el PHP, el parche sobra: fuera de
   la portada la cabecera es la normal, pegajosa y con fondo. */

/* ── LAS MIGAS, DEBAJO DE LA BARRA ───────────────────────────────────
   Iban en cuerpo de texto y con 24 px de margen debajo: un renglón suelto
   del mismo tamaño que el contenido, flotando en un bloque de lino vacío
   entre la cabecera y la primera sección. Sumado a la barra, la cabecera
   "se veía inmensa".
   Ahora son lo que son: una etiqueta de servicio. Versalita espaciada, del
   mismo cuerpo que los rótulos de sección, en tinta rebajada, en una franja
   ajustada que hace de peldaño entre la barra y el contenido.
   ------------------------------------------------------------------- */
body:not(.header-flotante) .breadcrumbs {
  margin: 0;
  padding-block: var(--space-4);
  font-size: var(--text-xs);
  letter-spacing: .12em;
  text-transform: uppercase;
  /* --color-muted y no la tinta al 58 %: esa mezcla daba 3.45 sobre el lino,
     medido en el render, y las migas son texto de 12 px. El taupe da 5.9. */
  color: var(--color-muted);
}
body:not(.header-flotante) .breadcrumbs a {
  color: inherit;
  text-decoration: none;
  border-bottom: 1px solid color-mix(in srgb, var(--color-accent) 45%, transparent);
  padding-bottom: 1px;
  transition: color var(--duration-base) var(--ease-out), border-color var(--duration-base) var(--ease-out);
}
body:not(.header-flotante) .breadcrumbs a:hover {
  color: var(--color-cobre-tinta);
  border-bottom-color: var(--color-accent);
}

/* ── CABECERA ────────────────────────────────────────────────────────
   La cabecera venia sin padding propio: su altura la daba el contenido y el
   logo quedaba pegado al borde superior de la ventana. Con la barra de
   administracion de WordPress encima, directamente se cortaba.
   ------------------------------------------------------------------- */

/* El aire va en el CONTENEDOR, no en el <header>. Poniéndolo en los dos se
   sumaban (24 px del header + 16 px del contenedor, arriba y abajo) y la
   cabecera se iba a 133 px: demasiado para una barra que además se queda
   fija al hacer scroll. */
.header { padding-block: 0; }
.header .container {
  /* Más aire que antes: una cabecera de marca respira por arriba. Al
     compactarse baja a la mitad, así que el gesto se nota de verdad. */
  padding-block: var(--space-8);
  transition: padding var(--duration-base) var(--ease-out);
}

/* ── La barra que SÍ ocupa sitio no puede cambiar de alto ─────────────
   Fuera de la portada la cabecera va en el flujo (sticky). Si al hacer
   scroll se compacta, el documento entero se acorta 40 px, el navegador
   recoloca el scroll, el desplazamiento vuelve a caer por debajo del umbral,
   la barra se estira otra vez... y se queda temblando. Medido en
   /sobre-nosotros/: ocho golpes de rueda daban DIECINUEVE cambios de estado,
   con la barra atrapada en alturas intermedias (117, 106, 93, 84, 77) — que
   es también por qué se veía "cortada", con el filete a media altura.

   Así que la compaccion se queda donde es inofensiva y tiene sentido: la
   portada, donde la barra flota fuera del flujo sobre la placa de cobre y el
   gesto sirve para pasar de transparente a sólida. En las interiores la
   cabecera nace ya en su tamaño compacto y no se mueve nunca; al hacer
   scroll solo cambia lo que no ocupa sitio (fondo, desenfoque y filete).
   ------------------------------------------------------------------- */
body:not(.header-flotante) .header .container {
  padding-block: var(--space-4);
  transition: none;
}
body:not(.header-flotante) .header .logo-text { font-size: var(--text-xl); transition: none; }
body:not(.header-flotante) .header .custom-logo { height: 32px; }
/* En reposo, un filete finísimo separa la barra de las migas: sin él, barra
   y migas son la misma mancha de lino y la cabecera parece el doble de alta
   de lo que es. */
body:not(.header-flotante) .header {
  border-bottom: 1px solid color-mix(in srgb, var(--color-accent) 20%, transparent);
}
/* La cabecera hablaba en un idioma distinto al de la web: el menú en
   minúsculas y sin espaciado (Mulish tal cual), el logotipo pequeño y un
   botón macizo. En una web cuya voz es la versalita espaciada, eso es lo que
   la hacía parecer una plantilla con la marca puesta encima.
   Ahora el menú va en versalita como los rótulos, el logotipo tiene la
   presencia de una marca y el botón cambia según lo que tenga detrás. */
.header .logo-text {
  font-size: var(--text-2xl);
  letter-spacing: .035em;
  transition: font-size var(--duration-base) var(--ease-out);
}
/* Solo en escritorio: en móvil los mismos enlaces viven en el panel
   desplegable (menú único, main.css), con su propio aspecto. */
@media (min-width: 861px) {
  .header .nav-list a {
    font-size: var(--text-xs);
    letter-spacing: .18em;
    text-transform: uppercase;
    font-weight: 600;
  }
  /* La flecha del submenú, más fina y más pequeña: a 1.5 px pesaba más que
     la propia palabra en versalita. */
  .header .nav-list .menu-item-has-children > a::after {
    width: .3em; height: .3em;
    border-width: 1px;
    margin-left: .6em;
  }
}
/* Hoy la marca es tipografica, pero el tema declara soporte de logo con
   flex-height y flex-width (functions.php), asi que WordPress no recorta: si
   alguien sube el logo por el Customizer, sale a su tamano original y no hay
   ninguna regla que lo frene. Con la cabecera flotando sobre el hero, un
   archivo de 600 px de alto se comeria la portada entera. */
.header .custom-logo { height: 40px; width: auto; max-width: 180px; object-fit: contain; }
body.header-flotante .header.is-scrolled .custom-logo { height: 32px; }
.footer .custom-logo { height: 44px; width: auto; max-width: 200px; object-fit: contain; }

/* Al hacer scroll, la cabecera se compacta: pierde un tercio de altura, el
   logo baja de tamaño y aparece el fondo con desenfoque. El tema ya ponía la
   clase .is-scrolled, pero solo la usaba para colorear un borde de 1 px —
   toda la mecánica estaba y no hacía nada visible.
   Es el único micromovimiento de cromo de la web, y se nota justo donde
   importa: una barra de 133 px fija encima del contenido se come la lectura
   en portátil. */
body.header-flotante .header.is-scrolled .container { padding-block: var(--space-3); }
body.header-flotante .header.is-scrolled .logo-text { font-size: var(--text-xl); }
/* En la portada la barra flota sobre la placa de cobre mientras no se hace
   scroll; al compactarse se vuelve una pieza sólida, igual que en las
   interiores. Estaba al 92 % con desenfoque, y sobre el cobre y sobre los
   titulares eso no leía como cristal esmerilado: leía como una banda sucia
   con el renglón de debajo cortado por la mitad y asomando a través. Una
   barra que tapa, tapa. Lo que la cierra es un filete de cobre —el mismo
   borde grabado de las placas— y una sombra muy corta. */
body.header-flotante .header.is-scrolled {
  background: var(--color-bg);
  backdrop-filter: none;
  border-bottom-color: color-mix(in srgb, var(--color-accent) 40%, transparent);
  box-shadow: 0 14px 26px -24px rgba(36, 25, 19, .55);
}

/* En las interiores, NO. Debajo de la barra pasan las secciones en tinta y la
   foto de Mirna, y una barra al 92 % sobre eso se llena de manchas grises: se
   ve translúcida, deslavada, como si estuviera cortada. En flujo la barra es
   una pieza sólida de lino. Al hacer scroll no cambia de color ni de alto:
   solo se marca el filete y cae una sombra muy corta, lo justo para que se
   lea que el contenido pasa por debajo. */
body:not(.header-flotante) .header { background: var(--color-bg); backdrop-filter: none; }
body:not(.header-flotante) .header.is-scrolled {
  border-bottom-color: color-mix(in srgb, var(--color-accent) 40%, transparent);
  box-shadow: 0 14px 26px -24px rgba(36, 25, 19, .55);
}
/* Sobre el hero claro, el texto de la cabecera flotante ya es oscuro; al
   compactarse tiene que seguir siéndolo. */
body.hero-shunku-claro.header-flotante .header.is-scrolled .logo-text,
body.hero-shunku-claro.header-flotante .header.is-scrolled .nav-toggle {
  color: var(--color-primary);
}
@media (min-width: 861px) {
  body.hero-shunku-claro.header-flotante .header.is-scrolled .nav-list a { color: var(--color-primary); }
}
@media (prefers-reduced-motion: reduce) {
  .header .container, .header .logo-text { transition: none; }
}
/* La barra de wp-admin es fixed y se comia los primeros 32 px de una
   cabecera flotante. Solo lo ve quien esta identificado, pero es justo quien
   revisa el diseno. */
body.admin-bar.header-flotante .header { top: 32px; }
@media (max-width: 782px) {
  body.admin-bar.header-flotante .header { top: 46px; }
}
/* El boton de la cabecera, en la misma familia que el resto: recto, no
   pastilla. Una pastilla maciza junto a titulares en capital lapidaria es la
   mezcla que mas abarata una web de este registro. */
.header .btn,
.cta-final .btn,
.cta-final--franja .btn,
/* Y el de la ficha de tratamiento, que es el mismo botón haciendo el mismo
   trabajo. Se quedaba en caja baja y con el radio de la plantilla base
   mientras los otros tres iban en versalitas: el visitante veía "PEDIR CITA"
   arriba en la cabecera y "Pedir cita" dos centímetros más abajo, con la
   misma placa de cobre. Un botón que se repite tiene que repetirse igual. */
.servicio-acciones .btn,
.bono-acciones .btn {
  border-radius: 0;
  letter-spacing: .12em;
  text-transform: uppercase;
  font-size: var(--text-sm);
  font-weight: 600;
  padding: 14px 30px;
}
/* "Pedir cita" de la cabecera: de COBRE DE SERIE, no solo al pasar el raton.
   El criterio de color de la marca siempre fue que el calido aparece en lo
   que invita a actuar; el cambio anterior lo dejo en petroleo y el cobre no
   aparecia en la primera pantalla hasta mover el raton. Es un boton pequeno
   —aqui un macizo no pesa como pesaria en el centro del hero, que por eso
   sigue siendo de contorno, igual que la pastilla de la placa de la
   clienta—. Al pasar el raton se invierte a espresso con el texto en cobre:
   la misma pareja, al reves. */
.header .btn-primary {
  background: var(--metal-cobre-texto);
  background-size: 200% 100%;
  color: var(--color-ink);
}
.header .btn-primary::before { background: var(--color-primary); }
.header .btn-primary:is(:hover, :focus-visible) { color: var(--color-cobre-claro); }

/* En la portada, mientras la cabecera flota SOBRE la placa de cobre, un
   botón de cobre se fundiría con el fondo. Ahí va en espresso; en cuanto la
   cabecera se compacta al hacer scroll y pasa a fondo lino, vuelve a cobre. */
/* Sobre la placa, de CONTORNO y no macizo. El bloque espresso se leía como
   una pegatina puesta encima del metal; el contorno fino es la pastilla de
   la propia placa de la clienta. Al compactarse la cabecera sobre el lino
   vuelve a ser de cobre macizo, que es donde tiene que pesar. */
body.hero-shunku-claro .header:not(.is-scrolled) .btn-primary {
  background: transparent;
  color: var(--color-primary);
  border-color: color-mix(in srgb, var(--color-primary) 60%, transparent);
}
body.hero-shunku-claro .header:not(.is-scrolled) .btn-primary::before { background: var(--color-primary); }
body.hero-shunku-claro .header:not(.is-scrolled) .btn-primary:is(:hover, :focus-visible) {
  color: var(--color-cobre-claro);
  border-color: transparent;
}

.cta-final .btn-primary {
  background: transparent;
  color: var(--color-on-primary);
  border: 1px solid color-mix(in srgb, var(--color-on-primary) 55%, transparent);
}
.cta-final .btn-primary:is(:hover, :focus-visible) {
  color: var(--color-ink);
  border-color: transparent;
}
/* main.css pinta este pseudo-elemento en crema dentro de .section--dark, con
   una regla de dos clases que gana a la de .btn-primary::before. Sin repetir
   aquí el metal con la misma fuerza, el botón del cierre se fundía a crema —
   el único botón de la web que no acababa en cobre. */
.cta-final .btn-primary::before { background: var(--metal-cobre-texto); background-size: 240% 100%; }

/* ── SOBRE MÍ ────────────────────────────────────────────────────────
   El hueco llevaba un radio de 12 px heredado de la plantilla, y en esta web
   no hay una sola esquina redondeada: desentonaba justo en la seccion mas
   personal.
   ------------------------------------------------------------------- */

.sobre-nosotros--con-imagen .foto-hueco { border-radius: 0; }

/* La caja clara de esquinas redondeadas que se veía aquí NO era el hueco:
   era su contenedor (.sobre-nosotros-media, en secciones.css), que pinta su
   propio fondo claro, un radio grande y una sombra. Las correcciones de
   arriba apuntaban al hueco de dentro y la caja de fuera seguía mandando: el
   elemento más brillante de la banda oscura, con esquinas redondeadas en una
   web que no tiene ni una.
   Ahora el contenedor no pinta nada, y lo enmarca un hilo de cobre separado
   12 px — el marco interior de la placa de la clienta. Vale igual para la
   foto cuando llegue. */
.sobre-nosotros--shunku .sobre-nosotros-media {
  /* La foto de Mirna es vertical (3:4) y el hueco de esta variante es
     horizontal: tal cual, el recorte le cortaba la cabeza y las manos. Va en
     4:5 y acotada, porque a ancho completo de columna una vertical de 600 px
     se come la sección entera. */
  position: relative;
  aspect-ratio: 4 / 5;
  max-width: 440px;
  margin-inline: auto 0;
  border-radius: 0;
  background: transparent;
  box-shadow: 0 40px 70px -40px color-mix(in srgb, #000 70%, transparent);
  outline: 1px solid color-mix(in srgb, var(--color-accent) 55%, transparent);
  outline-offset: 12px;
}
/* Mientras no hay foto, en su sitio va una placa de cobre (la misma del hero,
   con su cepillado) con el aviso en tinta: se lee como algo decidido y no
   como un hueco. Sigue diciendo qué foto falta — no es para disimularlo. */
.sobre-nosotros--shunku .foto-hueco {
  height: 100%;
  border: 0;
  background:
    repeating-linear-gradient(0deg,
      color-mix(in srgb, var(--color-cobre-claro) 22%, transparent) 0 1px, transparent 1px 3px,
      color-mix(in srgb, var(--color-cobre-tinta) 10%, transparent) 3px 4px, transparent 4px 6px),
    radial-gradient(60% 55% at 50% 42%, color-mix(in srgb, var(--color-cobre-claro) 75%, transparent) 0%, transparent 72%),
    var(--metal-cobre-texto);
  color: var(--color-ink);
}
.sobre-nosotros--shunku .foto-hueco-icono { opacity: .8; }

/* RETIRADO el velo cálido de la foto (2026-09-21).
   Aquí había un `filter: saturate(.88) contrast(1.04)` y un velo de cobre en
   soft-light encima. No eran estilo: eran un parche para UNA foto concreta
   —aquella en la que Mirna posaba delante del mural de bosque de su cabina—,
   cuyo verde era la única zona fría de la página.
   Esa foto ya no está: la clienta pasó un retrato de estudio sobre fondo
   negro, que se funde con el espresso de la banda y no tiene nada que
   corregir. Mantener el parche solo servía para dos cosas malas: apagar un
   punto la piel de una persona y teñírsela de cobre.
   Si algún día vuelve a entrar por el Personalizador una foto fría, se juzga
   esa foto — no se deja aquí un filtro permanente por si acaso. */
.sobre-nosotros--shunku .foto-hueco-texto { font-size: var(--text-base); letter-spacing: .02em; }
.sobre-nosotros--con-imagen .sobre-nosotros-texto { max-width: 54ch; }

/* ── PIE ─────────────────────────────────────────────────────────────
   Variante "negocio local": marca, direccion y horario en primer plano.
   Donde estas y a que hora abres son las dos cosas que mas se buscan en la
   web de un centro de barrio, y tenerlas solo en /contacto/ cuesta un clic
   que mucha gente no da.
   ------------------------------------------------------------------- */

/* El pie NO puede llevar el mismo espresso que la franja de CTA que tiene
   justo encima: la franja usa .section--dark, que ya es --color-primary, asi
   que los dos bloques se fundian en una sola masa oscura de casi 550px
   separada por una linea de 1px. Se lee como un final que no termina nunca.

   La separacion se hace con DOS VALORES DEL MISMO TONO, no con un color
   nuevo: el pie baja a un espresso mas profundo y la franja se queda donde
   estaba. Asi la franja pasa a leerse como banda y el pie como base sobre la
   que se apoya todo, que es lo que hace que un pie parezca caro. Meter aqui
   un cuarto color de la paleta habria roto la coherencia justo en el ultimo
   bloque de la pagina. */
/* El pie es espresso: el anillo de foco en espresso no se veía (como en
   .section--dark de main.css). */
.footer--negocio-local :focus-visible { outline-color: var(--color-on-primary); }
.footer--negocio-local {
  position: relative;
  isolation: isolate;
  /* Espresso profundo, derivado del primario y no escrito a mano: así sigue
     a la paleta. 45% contra negro deja el mismo escalón con la franja de
     encima que tenía el petróleo (1.18 frente a 1.19). */
  background: color-mix(in srgb, var(--color-primary) 45%, #000);
  color: var(--color-on-primary);
  /* Filo de cobre en vez de la linea gris generica: es el unico sitio del
     sitio donde el acento aparece como linea, y marca el cambio de bloque
     sin necesidad de un separador visible. */
  border-top: 1px solid color-mix(in srgb, var(--color-accent) 38%, transparent);
}

/* Lo que quita la sensacion de plano: dos veladuras muy bajas, del mismo
   cobre de las placas de la portada. No son decoracion suelta —
   repiten en el cierre la temperatura que el visitante lleva viendo toda la
   pagina. La calida entra por abajo a la izquierda, que es justo donde la
   columna de marca deja hueco, y lo llena sin añadir ningun elemento.

   Van en un ::before con z-index -1 e isolation en el padre para que no se
   coman los enlaces: sin el aislamiento, el -1 se escapa del pie y la
   veladura se pinta por detras de la seccion anterior. */
.footer--negocio-local::before {
  content: '';
  position: absolute; inset: 0; z-index: -1;
  pointer-events: none;
  background:
    radial-gradient(85% 65% at 8% 112%, color-mix(in srgb, var(--color-accent) 30%, transparent) 0%, transparent 62%),
    radial-gradient(65% 55% at 97% -12%, color-mix(in srgb, var(--color-cobre-claro) 6%, transparent) 0%, transparent 58%);
}
.footer--negocio-local .footer-top {
  display: grid;
  grid-template-columns: minmax(0, 1.4fr) repeat(auto-fit, minmax(160px, 1fr));
  gap: clamp(var(--space-8), 5vw, var(--space-16));
  padding-block: clamp(var(--space-16), 8vw, var(--space-20)) var(--space-12);
}
.footer--negocio-local .footer-brand .logo-text {
  font-family: var(--font-display);
  font-size: var(--text-2xl);
  letter-spacing: .04em;
}
.footer--negocio-local .footer-tagline {
  margin: var(--space-3) 0 0;
  font-size: var(--text-sm);
  line-height: 1.6;
  color: color-mix(in srgb, var(--color-on-primary) 70%, transparent);
  max-width: 34ch;
}
/* El segundo nivel del pie: las categorías colgando de "Tratamientos".
   Se distinguen por sangría y por tamaño, no por una viñeta ni por una
   línea: en esta identidad la jerarquía la hacen el aire y la escala.
   El filete de cobre a la izquierda es el mismo gesto que las seis razones
   de Sobre mí y que los rótulos de toda la web. */
.footer--negocio-local .footer-menu .sub-menu {
  list-style: none;
  margin: var(--space-2) 0 var(--space-4);
  padding: 0 0 0 var(--space-5);
  position: relative;
}
.footer--negocio-local .footer-menu .sub-menu::before {
  content: ""; position: absolute; left: 0; top: .55em; bottom: .75em;
  width: 1px;
  background: linear-gradient(180deg,
    color-mix(in srgb, var(--color-accent) 42%, transparent),
    transparent);
}
.footer--negocio-local .footer-menu .sub-menu a {
  font-size: var(--text-xs);
  line-height: 1.8;
  color: color-mix(in srgb, var(--color-on-primary) 62%, transparent);
}
.footer--negocio-local .footer-menu .sub-menu a:is(:hover, :focus-visible) {
  color: var(--color-cobre-claro);
}
/* El padre de un submenú es el rótulo de su grupo, no un enlace más. */
.footer--negocio-local .footer-menu > .menu-item-has-children > a {
  color: var(--color-on-primary);
}

.footer--negocio-local .footer-col-titulo {
  font-size: var(--text-xs);
  letter-spacing: .2em;
  text-transform: uppercase;
  font-weight: 700;
  color: var(--color-cobre-claro);
  margin: 0 0 var(--space-5);
}
.footer--negocio-local .footer-col a,
.footer--negocio-local .footer-local-dato {
  color: color-mix(in srgb, var(--color-on-primary) 82%, transparent);
  text-decoration: none;
  font-size: var(--text-sm);
  line-height: 1.9;
}
.footer--negocio-local .footer-col a:hover { color: var(--color-cobre-claro); }

/* Las redes: eran tres circulitos de 38 px con un borde gris apagado y un
   icono de 16, y se leían como los iconos que trae cualquier plantilla.
   Ahora el aro es de cobre, el icono más grande y con la crema del pie, y al
   pasar el ratón el círculo se llena de metal y el icono pasa a tinta —el
   mismo gesto que todos los botones de la web. Fuera el rebote de escala del
   hover genérico: en esta marca el movimiento es lento y corto. */
.footer--negocio-local .footer-social { gap: var(--space-4); margin-top: var(--space-8); }
.footer--negocio-local .footer-social a {
  position: relative; isolation: isolate; overflow: hidden;
  width: 44px; height: 44px;
  border-color: color-mix(in srgb, var(--color-accent) 50%, transparent);
  color: var(--color-on-primary);
  transition: color var(--duration-base) var(--ease-out), transform var(--duration-base) var(--ease-out), border-color var(--duration-base) var(--ease-out);
}
.footer--negocio-local .footer-social a svg { width: 19px; height: 19px; }
.footer--negocio-local .footer-social a::before {
  content: "";
  position: absolute; inset: 0; z-index: -1;
  border-radius: inherit;
  background: var(--metal-cobre-texto);
  background-size: 240% 100%;
  background-position: 100% 0;
  opacity: 0;
  transition: opacity var(--duration-base) var(--ease-out), background-position 700ms var(--ease-out);
}
.footer--negocio-local .footer-social a:is(:hover, :focus-visible) {
  color: var(--color-ink);
  background: transparent;
  border-color: transparent;
  transform: translateY(-2px);
}
.footer--negocio-local .footer-social a:is(:hover, :focus-visible)::before { opacity: 1; background-position: 0 0; }
.footer--negocio-local .footer-local-dato { display: block; margin-bottom: var(--space-2); }

.footer--negocio-local .footer-bottom {
  display: flex; flex-wrap: wrap; gap: var(--space-4) var(--space-8);
  align-items: center; justify-content: space-between;
  /* La línea va pintada como fondo y retranqueada lo mismo que el padding
     del contenedor: con border-top ocupaba también ese padding y asomaba
     24 px por delante de las columnas, que es lo primero que se ve torcido
     en un pie. */
  border-top: 0;
  background: linear-gradient(90deg,
      transparent var(--space-6),
      color-mix(in srgb, var(--color-on-primary) 18%, transparent) var(--space-6),
      color-mix(in srgb, var(--color-on-primary) 18%, transparent) calc(100% - var(--space-6)),
      transparent calc(100% - var(--space-6))) top / 100% 1px no-repeat;
  padding-block: var(--space-6) var(--space-8);
  font-size: var(--text-xs);
  /* 72% y no 60%: la veladura calida aclara el fondo justo debajo del
     copyright, y a 60% el texto se quedaba por debajo de 4.5:1. */
  color: color-mix(in srgb, var(--color-on-primary) 72%, transparent);
}
.footer--negocio-local .footer-legal-links {
  display: flex; flex-wrap: wrap; gap: var(--space-5);
  list-style: none; margin: 0; padding: 0;
}
.footer--negocio-local .footer-legal-links a {
  /* Un paso POR DEBAJO de la navegación, no por encima: con color: inherit
     cogían la crema plena de la columna y eran lo más brillante del pie.
     Lo legal va al final y con menos peso, pero legible (sobre este fondo
     sigue por encima de 9:1). */
  color: color-mix(in srgb, var(--color-on-primary) 70%, transparent);
  text-decoration: none;
  font-size: var(--text-sm);
}
.footer--negocio-local .footer-legal-links a:hover {
  color: var(--color-cobre-claro); text-decoration: underline; text-underline-offset: 3px;
}

@media (max-width: 900px) {
  .miel-texto {
    padding-inline: max(var(--space-6), calc((100cqi - var(--container)) / 2 + var(--space-6)));
    padding-block: var(--space-16) var(--space-12);
  }
  .miel-media { min-height: 60vw; }
  .footer--negocio-local .footer-top { grid-template-columns: 1fr; }
}

/* El pie salta de cuatro columnas a una en 900 px, y entre medias las cuatro
   se quedan en 184 px cada una: la direccion y el horario rompen a lo bruto
   dentro de columnas mas estrechas que sus propias lineas. Un escalon de dos
   columnas antes del salto a una. */
@media (max-width: 1080px) and (min-width: 901px) {
  .footer--negocio-local .footer-top {
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  }
}

/* ── Menu movil sobre cabecera flotante ──────────────────────────────
   En la portada el <body> lleva .header-flotante y la cabecera sale del
   flujo ('absolute' arriba del todo y 'fixed' al hacer scroll). El panel del
   menú es el propio <nav> de la cabecera (menú único), así que en la portada
   se abre como capa completa por debajo de la barra, como el panel de antes:
   el hueco de arriba es fijo y no calculado porque la barra cambia de altura
   al compactarse con el scroll; se reserva para la más alta. Vale porque la
   cabecera flotante no lleva backdrop-filter ni transform (harían de bloque
   contenedor del fixed). Logo y botón van por encima de la capa.
   ------------------------------------------------------------------- */
@media (max-width: 860px) {
  body.header-flotante .nav {
    position: fixed;
    inset: 0;
    z-index: -1;
    padding-top: var(--space-24);
    overflow-y: auto;
    overscroll-behavior: contain;
    border-top: 0;
  }
  body.admin-bar.header-flotante .nav { top: 46px; }
  /* El hueco de arriba ya lo da el padding-top de la capa. */
  body.header-flotante .nav-panel > :first-child { margin-top: 0; }

  /* Con el panel abierto y sin scroll, la cabecera sigue siendo transparente
     con el texto en claro —esta pensada para ir sobre la foto del hero— y
     debajo ya no esta la foto, sino el fondo claro del panel: logo y
     hamburguesa se volvian invisibles. Mientras el menu este abierto, la
     cabecera se comporta como la version compacta. */
  body.header-flotante .header:has(.nav.is-open):not(.is-scrolled) .logo-text,
  body.header-flotante .header:has(.nav.is-open):not(.is-scrolled) .nav-toggle {
    color: var(--color-primary);
  }
}

/* ── FICHA DE SERVICIO ───────────────────────────────────────────────
   La foto de la ficha comparte el problema que tenia la banda de la miel:
   la columna es alta y las fotos que sube la clienta pueden venir en
   cualquier proporcion. Se fija la forma aqui y se recorta con object-fit,
   en vez de depender de un recorte de WordPress que solo acierta con
   apaisadas.
   ------------------------------------------------------------------- */

.servicio-foto {
  width: 100%;
  aspect-ratio: 4 / 5;
  object-fit: cover;
  object-position: center;
  display: block;
  border-radius: 0;
}
.servicio-cabecera .foto-hueco { border-radius: 0; }

/* Las franjas de la ficha en la misma familia que el resto: rectas y con el
   precio en la tipografia de titulares. */
.franja { border-radius: 0; }

/* ═══════════════════════════════════════════════════════════════════════
   FICHA DE SERVICIO Y ARCHIVO DE CATEGORÍA

   Estos estilos vivían en main.css y SE PERDIERON al sincronizar el tema con
   la base nueva: main.css se sustituyó entero y con él se fue el bloque
   propio del proyecto. Las trece fichas y los cuatro archivos de categoría
   estuvieron desde entonces sin maquetar —texto apilado a una columna— y no
   se detectó porque la verificación miró solo la portada.

   Lección para el despliegue: al sustituir una hoja de estilos completa, hay
   que comprobar TODAS las plantillas que la usaban, no solo la que se estaba
   mirando.
   ═══════════════════════════════════════════════════════════════════════ */
/* --- Ficha de servicio -------------------------------------------------- */
/* La banda de entrada de la ficha. Llevaba --color-surface-tint, que es el
   teñido genérico de la plantilla base y aquí se resolvía a #F2EEEA: un
   neutro casi plano (8 puntos entre el rojo y el azul) al lado de un lino
   que tiene 15. Es exactamente el síntoma que la marca ya rechazó una vez
   —"se lee gris"— y encima dejaba la única banda del sitio que no pertenece
   a la rampa del catálogo (lino → arena → cobre).

   Pasa a arena, que es el segundo peldaño de esa rampa, con la misma luz
   cálida centrada que usan "Cómo trabajo", "El nombre" y el remate de
   Contacto: el gesto de esta web para el sitio donde se respira. Así la
   ficha entra con la misma temperatura que su categoría en el mosaico.

   Y el filete de abajo pasa de --color-border-tint (gris de la base) a
   cobre: es el mismo canto que separa todas las placas de este sitio. */
.servicio-cabecera {
  background:
    radial-gradient(68% 78% at 50% 0%, color-mix(in srgb, var(--color-cobre-suave) 62%, transparent) 0%, transparent 72%),
    var(--tile-arena);
  border-bottom: 1px solid color-mix(in srgb, var(--color-cobre-tinta) 22%, transparent);
  padding-block: var(--space-16);
}
.servicio-cabecera-rejilla {
  display: grid; grid-template-columns: minmax(0, 1.15fr) minmax(0, .85fr);
  gap: var(--space-16); align-items: center;
}
/* La rejilla NUNCA colapsaba: a 390 px seguian las dos columnas, con la
   columna de texto en unos 180 px. El titulo se partia en tres lineas, el
   resumen rompia cada tres palabras y las cuatro franjas de precio bajaban en
   fila india. Estaba asi en las trece fichas y no habia salido en ninguna
   revision porque todas miraban la portada, que es la unica pagina sin esta
   cabecera. Encontrado el 2026-09-17 al revisar el movil.
   La foto se limita en ancho: a pantalla completa se comia la pantalla
   entera debajo del boton. */
@media (max-width: 859px) {
  .servicio-cabecera-rejilla { grid-template-columns: 1fr; gap: var(--space-10); }
  .servicio-media { width: 100%; max-width: 420px; margin-inline: auto; }
}
.servicio-titulo {
  font-family: var(--font-display); font-weight: 400;
  font-size: var(--text-5xl); line-height: 1.08;
  margin: var(--space-2) 0 var(--space-4); text-wrap: balance;
}
.servicio-resumen {
  font-size: var(--text-lg); color: var(--color-muted);
  max-width: 46ch; margin: 0 0 var(--space-8);
}
.servicio-media { min-width: 0; }
.servicio-foto { width: 100%; height: auto; border-radius: 0; display: block; }
.servicio-acciones { display: flex; gap: var(--space-3); flex-wrap: wrap; }

/* Duración y precio. Se piden "de forma destacada" (briefing 5.2.4) y por eso
   son bloques con borde propio y no una línea de texto: en móvil son lo
   primero que se busca. tabular-nums para que 45/60/90 alineen. */
.franjas {
  list-style: none; margin: 0 0 var(--space-8); padding: 0;
  display: flex; flex-wrap: wrap; gap: var(--space-3);
}
.franja {
  background: var(--color-surface);
  border: 1px solid var(--color-border-tint);
  border-radius: 0;
  padding: var(--space-3) var(--space-5);
  min-width: 108px;
}
.franja-duracion {
  display: block; font-size: var(--text-xs);
  letter-spacing: .07em; text-transform: uppercase;
  color: var(--color-muted); font-weight: 600;
}
.franja-precio {
  display: block; font-family: var(--font-display);
  font-size: var(--text-2xl); line-height: 1.2; margin-top: 2px;
  font-variant-numeric: tabular-nums; color: var(--color-ink);
}

.servicio-cuerpo { padding-block: var(--space-16); }
.prosa { max-width: 68ch; }
.prosa > * + * { margin-top: var(--space-4); }

.servicio-bloques {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: var(--space-8); margin-top: var(--space-12);
}
/* Los dos bloques de la ficha no son tarjetas: llevan solo un filete de
   color a la izquierda. Si todo fuera tarjeta, nada destacaría sobre nada. */
.bloque-ficha {
  border-left: 3px solid var(--color-cobre-medio);
  padding-left: var(--space-6);
}
.bloque-ficha--lista { border-left-color: var(--color-accent); }
.bloque-ficha-titulo {
  font-family: var(--font-display); font-weight: 400;
  font-size: var(--text-2xl); margin: 0 0 var(--space-4); line-height: 1.2;
}
.bloque-ficha p { color: var(--color-muted); margin: 0 0 var(--space-3); }

/* ── "Qué incluye": de qué está hecho un ritual combinado ─────────────
   Va suelto y a ancho completo, fuera de la rejilla de dos columnas de
   .servicio-bloques, porque es lo primero que se lee en la ficha de un
   combo —qué es esto— y porque sus elementos son ENLACES: apretados en
   una columna de 280 px, tres enlaces con nombre, resumen y duración se
   leen como una lista de la compra.

   Mismo filete de cobre a la izquierda que los otros bloques de la ficha:
   es de la familia, no una pieza nueva (regla 5 de ritmo-y-jerarquia). */
.bloque-ficha--incluye {
  margin-top: var(--space-12);
  border-left-color: var(--color-cobre-tinta);
}
.incluye-lista {
  list-style: none; margin: 0; padding: 0;
  display: grid; gap: var(--space-4);
}
@media (min-width: 760px) {
  .incluye-lista { grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); }
}
/* La celda es del mismo tejido que el mosaico —hilo fino, sin relleno ni
   sombra— para que el catálogo hable el mismo idioma también dentro de
   una ficha. */
.incluye-enlace {
  display: flex; flex-direction: column; height: 100%;
  gap: var(--space-2);
  padding: var(--space-5) var(--space-6);
  text-decoration: none;
  outline: 1px solid color-mix(in srgb, var(--color-cobre-tinta) 22%, transparent);
  transition: background var(--duration-base) var(--ease-out),
              outline-color var(--duration-base) var(--ease-out);
}
.incluye-enlace:is(:hover, :focus-visible) {
  background: color-mix(in srgb, var(--color-accent) 8%, transparent);
  outline-color: color-mix(in srgb, var(--color-cobre-tinta) 45%, transparent);
}
.incluye-nombre {
  font-family: var(--font-display);
  font-size: var(--text-lg); line-height: 1.25;
  color: var(--color-primary);
}
.incluye-enlace:is(:hover, :focus-visible) .incluye-nombre { color: var(--color-cobre-tinta); }
.incluye-resumen {
  font-size: var(--text-sm); line-height: 1.6;
  color: var(--color-muted);
}
/* La duración al pie de la celda, alineada entre hermanas: es el mismo
   gesto que las duraciones del mosaico. */
.incluye-duracion {
  margin-top: auto; padding-top: var(--space-3);
  font-size: var(--text-xs); letter-spacing: .1em; text-transform: uppercase;
  color: var(--color-cobre-tinta);
  font-variant-numeric: tabular-nums;
  text-wrap: balance;
}
/* El aviso de que las duraciones no se suman. Pequeño y en taupe: matiza
   los tiempos de arriba, no compite con ellos — mismo criterio que el
   aviso de precios de la carta. */
.incluye-nota {
  margin: var(--space-5) 0 0;
  max-width: 60ch;
  font-size: var(--text-sm); line-height: 1.5;
  color: var(--color-muted);
}

.lista-marcada { list-style: none; margin: 0; padding: 0; display: grid; gap: var(--space-3); }
.lista-marcada li {
  position: relative; padding-left: var(--space-6);
  color: var(--color-muted); line-height: 1.6;
}
.lista-marcada li::before {
  content: ""; position: absolute; left: 0; top: .62em;
  width: 9px; height: 9px; border-radius: 50%;
  background: var(--color-accent);
}

/* --- Página de Servicios, agrupada por categoría ------------------------ */
.categoria-cabecera {
  display: flex; align-items: baseline; justify-content: space-between;
  gap: var(--space-6); flex-wrap: wrap; margin-bottom: var(--space-10);
}
.categoria-cabecera .section-lead { margin-top: var(--space-2); max-width: 56ch; }
.categoria-cuenta {
  font-size: var(--text-sm); color: var(--color-muted);
  font-variant-numeric: tabular-nums; margin: 0; white-space: nowrap;
}
.volver { margin-top: var(--space-12); }
.volver a { color: var(--color-cobre-tinta); text-decoration: underline; text-underline-offset: 3px; }

/* ── Micromovimiento ─────────────────────────────────────────────────
   El tema trae un sistema de reveal con IntersectionObserver y dos redes de
   seguridad (noscript + try/catch), pero su auto-etiquetado solo cubre
   .card-grid y .section-title — y esta portada no usa ninguna de las dos.
   Es decir: toda la home entraba de golpe, sin una sola transicion.
   Las clases se ponen en las plantillas, que es lo que pide el propio
   comentario del JS; aqui solo se ajusta lo que el reveal generico no sabe.
   ------------------------------------------------------------------- */

/* El simbolo del manifiesto entra con un poco menos de recorrido que un
   bloque de texto: es un elemento pequeno y 24 px de desplazamiento en algo
   de 30 px se ve como un salto, no como una entrada. */
.manifiesto-simbolo.reveal { transform: translateY(10px); }
.manifiesto-simbolo.reveal.is-visible { transform: none; }

/* La foto de la miel entra desde la derecha, que es por donde sangra. */
.miel-media.reveal { transform: translateX(28px); }
.miel-media.reveal.is-visible { transform: none; }

/* ══════════════════════════════════════════════════════════════════════
   CABECERA, SEGUNDA PASADA (2026-09-13)
   Revisión de director creativo sobre la barra ya estable. Lo que la hacía
   parecer de plantilla no era el fondo, era la jerarquía:
   - Lo que más gritaba era el botón (52 px de alto y un degradado metálico) y
     lo que menos, el nombre. En una marca tipográfica manda el nombre.
   - Un degradado de cobre en 150 px no se lee como metal: se lee como "botón
     con degradado". El metal funciona en superficies grandes (la placa del
     hero); en un botón, el cobre va macizo.
   - El menú no estaba centrado: flotaba entre un logo estrecho y un botón
     ancho, a medio camino de los dos.
   - La página actual no se marcaba (su color era el mismo que el del resto).
   ══════════════════════════════════════════════════════════════════════ */

/* Tres columnas, la del centro a su medida: el menú queda en el eje de la
   página, sea cual sea el ancho del logo y del botón. Solo en escritorio: en
   móvil el menú no existe y la columna central se quedaría con el botón. */
@media (min-width: 861px) {
  .header .container {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
    align-items: center;
    column-gap: var(--space-8);
  }
  /* Con el menú único el botón va dentro del <nav>: el <nav> ocupa las dos
     últimas columnas (subgrid) y sus hijos se reparten en ellas como antes,
     la lista en el centro y el botón al final. */
  .header .nav { grid-column: 2 / -1; display: grid; grid-template-columns: subgrid; align-items: center; }
  .header .nav-panel { display: contents; }
  .header .nav-list { justify-self: center; }
  .header .header-cta { justify-self: end; }
}

/* El nombre, siempre al mismo tamaño: en la portada compactada y en las
   interiores bajaba a text-xl, y la marca era lo más pequeño de la barra. */
.header .logo-text,
body.header-flotante .header.is-scrolled .logo-text,
body:not(.header-flotante) .header .logo-text {
  font-size: var(--text-2xl);
  transition: none;
}
body:not(.header-flotante) .header .container { padding-block: var(--space-5); }

/* Menú: el filete de cobre dice dónde estás. El hover usa el mismo filete en
   tinta y crece desde el centro; es un fondo de 1 px y no un ::after, porque
   el ::after de "Tratamientos" ya es su flecha de submenú. */
/* Solo en escritorio: en móvil los mismos enlaces viven en el panel
   desplegable (menú único, main.css), con su propio aspecto. */
@media (min-width: 861px) {
  .header .nav-list > li > a {
    padding-block: 6px;
    background-image: linear-gradient(currentColor, currentColor);
    background-repeat: no-repeat;
    background-position: 50% 100%;
    background-size: 0 1px;
    transition: background-size var(--duration-base) var(--ease-out), color var(--duration-base) var(--ease-out);
  }
  .header .nav-list > li > a:is(:hover, :focus-visible) { background-size: 100% 1px; }
  /* Cobre-tinta al pasar el ratón, no el acento: el acento sobre lino da 3.2 y
     el menú va a 12 px, así que no pasaría AA. */
  body:not(.header-flotante) .header .nav-list > li > a:is(:hover, :focus-visible),
  body.header-flotante .header.is-scrolled .nav-list > li > a:is(:hover, :focus-visible) { color: var(--color-cobre-tinta); }
  .header .nav-list > :is(.current-menu-item, .current-menu-ancestor, .current_page_parent) > a {
    background-image: linear-gradient(var(--color-accent), var(--color-accent));
    background-size: 100% 1px;
  }
  /* Sobre la placa del hero el acento no se vería: ahí el filete va en tinta. */
  body.hero-shunku-claro.header-flotante .header:not(.is-scrolled) .nav-list > :is(.current-menu-item, .current-menu-ancestor, .current_page_parent) > a {
    background-image: linear-gradient(var(--color-primary), var(--color-primary));
  }
}

/* ── EL BOTÓN DE COBRE ─────────────────────────────────────────────────
   "Pedir cita" (cabecera, también en el panel móvil) y "Enviar" (contacto): las dos acciones
   que convierten, y la misma pieza en las dos.

   Cobre METAL (la luz es lo que lo hace cobre), pero LIMPIO: una luz ancha y
   suave en diagonal (115deg, el ángulo de --metal-cobre) que se desplaza al
   pasar el ratón, un canto de cobre que baja de claro a tinta, un filo de luz
   arriba y la letra en tinta, sin efectos, a 13 px.

   Historial, para no repetirlo:
   - Degradado claro sin canto: cobre rosado, pegatina.
   - Cobre-tinta macizo: un hex plano no es cobre, es marrón.
   - Bruñido oscuro cepillado: vetas de madera. Bruñido oscuro pulido: botón
     marrón.
   - Placa cepillada con veta estrecha, canto oscuro y letra grabada: se
     eligió mirándola a 2x y a tamaño real no funcionaba. El cepillado se
     volvía ruido, el grabado emborronaba una letra de 12 px y el canto
     oscuro pesaba como un marco. "Se ve raro, tiene que ser más elegante y
     legible".
   - Comparadas a TAMAÑO REAL en la cabecera: esta (metal liso), cobre casi
     mate (vuelve a rozar el plano) y espresso con letra de cobre (elegante,
     pero saca el cálido de la acción). Un botón se juzga al tamaño al que se
     ve. */
:root {
  --cobre-placa:
    linear-gradient(115deg,
      var(--color-accent) 0%, var(--color-cobre-medio) 38%,
      color-mix(in srgb, var(--color-cobre-claro) 80%, var(--color-cobre-medio)) 52%,
      var(--color-cobre-medio) 68%, var(--color-accent) 100%) padding-box,
    linear-gradient(180deg, color-mix(in srgb, var(--color-cobre-claro) 70%, var(--color-accent)), var(--color-cobre-tinta)) border-box;
}
.header .btn {
  padding: 12px 26px;
  font-size: 13px;
  font-weight: 600;
  letter-spacing: .14em;
}
.header .btn-primary,
body.header-flotante .header.is-scrolled .btn-primary,
.contacto .form-card .srfm-submit-button,
.cta-final .btn-primary,
/* La ficha de tratamiento faltaba en esta lista, y es donde más falta hacía:
   "Pedir cita" en las DOCE fichas del catálogo se pintaba con el botón
   espresso genérico de la plantilla base mientras el de la cabecera, el del
   cierre y el de enviar el formulario eran la placa de cobre. O sea que el
   botón que convierte era el único que no seguía la regla de marca, y
   además el visitante lo veía justo debajo de uno que sí. */
/* Y la página de bonos regalo (2026-10-02): su "Pedir un bono" es el botón
   que convierte de esa página. */
.servicio-acciones .btn-primary,
.bono-acciones .btn-primary {
  background: var(--cobre-placa) !important;
  background-size: 200% 100%, 100% 100% !important;
  background-position: 30% 0, 0 0 !important;
  border: 1px solid transparent !important;
  border-radius: 0 !important;
  color: var(--color-ink) !important;
  text-shadow: none;
  box-shadow:
    inset 0 1px 0 color-mix(in srgb, #FFF4EA 45%, transparent),
    0 6px 16px -10px color-mix(in srgb, var(--color-cobre-oscuro) 70%, transparent);
  transition: background-position 700ms var(--ease-out), box-shadow var(--duration-base) var(--ease-out);
}
.header .btn-primary::before,
.cta-final .btn-primary::before,
.bono-acciones .btn-primary::before { display: none; }
.header .btn-primary:is(:hover, :focus-visible),
body.header-flotante .header.is-scrolled .btn-primary:is(:hover, :focus-visible),
.contacto .form-card .srfm-submit-button:is(:hover, :focus-visible),
.cta-final .btn-primary:is(:hover, :focus-visible),
.bono-acciones .btn-primary:is(:hover, :focus-visible) {
  background-position: 80% 0, 0 0 !important;
  color: var(--color-ink) !important;
  transform: none;
  box-shadow:
    inset 0 1px 0 color-mix(in srgb, #FFF4EA 60%, transparent),
    0 8px 18px -10px color-mix(in srgb, var(--color-cobre-oscuro) 85%, transparent);
}
/* Sobre la placa del hero la cabecera flota y el botón sigue siendo de
   contorno en tinta (la pastilla de la placa de la clienta): un bruñido
   encima del cobre claro se leería como un parche. Se restituye aquí porque
   la regla de arriba lleva !important. */
/* Solo en escritorio: en móvil el botón va dentro del panel desplegable,
   sobre el fondo claro, y lleva la placa de cobre como siempre. */
@media (min-width: 861px) {
  body.hero-shunku-claro.header-flotante .header:not(.is-scrolled) .btn-primary {
    background: transparent !important;
    color: var(--color-primary) !important;
    border: 1px solid color-mix(in srgb, var(--color-primary) 60%, transparent) !important;
    box-shadow: none;
    text-shadow: none;
  }
  body.hero-shunku-claro.header-flotante .header:not(.is-scrolled) .btn-primary:is(:hover, :focus-visible) {
    background: var(--color-primary) !important;
    color: var(--color-cobre-claro) !important;
  }
}
@media (prefers-reduced-motion: reduce) {
  .header .btn-primary, .contacto .form-card .srfm-submit-button { transition: none; }
}

/* ══════════════════════════════════════════════════════════════════════
   CONTACTO: EL MAPA
   ══════════════════════════════════════════════════════════════════════ */

/* ── LA PÁGINA DE CONTACTO ES UN ANCLA ESPRESSO ──────────────────────
   Era casi entera gris: lino, un mapa crema a sangre y una tarjeta blanca de
   borde fino, separados por un 1-2 % de luz (medido: el lino tiene croma
   0.009, por debajo del umbral en que un claro deja de leerse como gris), y
   ningún peso oscuro hasta el pie. Es la "alternancia invisible" y la página
   sin ancla de ritmo-y-jerarquia.md, y no se parecía en nada a la portada.

   En el sistema de la web cada color tiene un papel, y el espresso es "la
   persona y el cierre": Mirna, la franja final y el pie. Contactar es
   exactamente eso, hablar con Mirna, y es el cierre de cualquier recorrido.
   Así que la sección entera es la misma banda que "Quién te atiende" y la
   página Sobre mí —espresso con la veladura de cobre en una esquina y el
   filete de cobre arriba—, y dentro, las dos piezas claras reciben el mismo
   gesto que la foto de Mirna: el marco de filete desplazado. El mapa es "la
   foto del sitio"; el formulario, una hoja de lino que flota sobre la banda.
   Sobre mí y Contacto se leen ahora como la misma familia. */
.contacto--mapa-ancho {
  display: flex;
  flex-direction: column;
  padding-block: clamp(var(--space-16), 8vw, var(--space-24));
  background:
    radial-gradient(60% 55% at 100% 0%, color-mix(in srgb, var(--color-accent) 16%, transparent) 0%, transparent 65%),
    radial-gradient(55% 50% at 0% 100%, color-mix(in srgb, var(--color-accent) 12%, transparent) 0%, transparent 62%),
    var(--color-primary);
  color: var(--color-on-primary);
  /* Entrega al pie, que es aún más oscuro: filete solo arriba (ver
     "Costuras" en ritmo-y-jerarquia.md). */
  box-shadow: inset 0 1px 0 color-mix(in srgb, var(--color-accent) 55%, transparent);
}
/* El mapa, enmarcado como la foto de Mirna y dentro del ancho de contenido,
   no a sangre. */
.contacto--mapa-ancho .contact-map--ancho {
  box-sizing: border-box;
  width: calc(100% - 2 * var(--space-6));
  max-width: calc(var(--container) - 2 * var(--space-6));
  height: clamp(240px, 30vw, 380px);
  max-height: none;
  aspect-ratio: auto;
  /* Después del texto y el formulario, no antes: en una página de contacto
     lo primero es "escríbeme"; "cómo llegar" cierra la banda. Va así ya en el
     HTML (contacto-shunku.php): reordenado aquí con `order`, desplazaba la
     página al cargar y el teclado lo recorría el primero. */
  margin: var(--space-20) auto 0;
  border: 0;
  border-radius: 0;
  outline: 1px solid color-mix(in srgb, var(--color-accent) 55%, transparent);
  outline-offset: 12px;
  background: var(--color-surface);
}
/* El mapa real, en la temperatura de la web: sin el verde ni el amarillo de
   Google, y con un velo de cobre suave multiplicado encima para que el plano
   no quede gris sobre la banda (el velo va por debajo de la placa y no
   captura el ratón: el mapa se sigue moviendo). */
.contact-map iframe { filter: grayscale(1) sepia(.3) contrast(.95) brightness(1.02); }
.contacto--mapa-ancho .contact-map--ancho::after {
  content: "";
  position: absolute; inset: 0; z-index: 1;
  pointer-events: none;
  background: var(--color-cobre-suave);
  mix-blend-mode: multiply;
  opacity: .55;
}

/* La columna de texto, con los tokens de la banda oscura (los mismos que usa
   "Quién te atiende"). Solo esta columna: la hoja del formulario conserva los
   del lino. */
.contacto--mapa-ancho .contact-grid > :first-child {
  --color-muted: color-mix(in srgb, var(--color-on-primary) 80%, transparent);
  --color-border: color-mix(in srgb, var(--color-on-primary) 18%, transparent);
  color: var(--color-on-primary);
}
.contacto--mapa-ancho .eyebrow { color: var(--color-cobre-claro); letter-spacing: .24em; }
.contacto--mapa-ancho .section-title {
  font-family: var(--font-display);
  font-weight: 400;
  text-transform: uppercase;
  letter-spacing: .05em;
  color: var(--color-on-primary);
  text-wrap: balance;
}
.contacto--mapa-ancho .section-lead { color: color-mix(in srgb, var(--color-on-primary) 84%, transparent); max-width: 46ch; }
.contacto--mapa-ancho .contact-info-list {
  margin-top: var(--space-10);
  gap: 0;
  border-top: 1px solid var(--color-border);
}
.contacto--mapa-ancho .contact-info-list li {
  display: grid;
  grid-template-columns: 7.5rem minmax(0, 1fr);
  align-items: baseline;
  gap: var(--space-4);
  padding-block: var(--space-4);
  border-bottom: 1px solid var(--color-border);
}
.contacto--mapa-ancho .contact-info-etiqueta {
  color: var(--color-cobre-claro);
  letter-spacing: .2em;
  font-weight: 600;
}
.contacto--mapa-ancho .contact-info-valor { color: var(--color-on-primary); font-size: var(--text-lg); justify-self: start; }
.contacto--mapa-ancho .contact-info-list a {
  color: var(--color-on-primary);
  text-decoration: none;
  background-image: linear-gradient(color-mix(in srgb, var(--color-accent) 70%, transparent), color-mix(in srgb, var(--color-accent) 70%, transparent));
  background-repeat: no-repeat;
  background-position: 0 100%;
  background-size: 100% 1px;
  padding-bottom: 2px;
  display: inline;
  transition: color var(--duration-base) var(--ease-out);
}
.contacto--mapa-ancho .contact-info-list a:is(:hover, :focus-visible) { color: var(--color-cobre-claro); }

/* El formulario: una hoja de lino sobre la banda, con el marco desplazado de
   la foto de Mirna y una sombra teñida de espresso, que es lo que la separa
   como objeto (sin apoyo, una tarjeta de borde fino es una línea dibujada). */
.contacto .form-card {
  border: 0;
  border-radius: 0;
  /* Lino y no la superficie: sobre el espresso, el blanco roto de
     --color-surface era la mancha más brillante de la página (blanco en
     área grande, regla 3 bis). Los campos quedan un punto más claros que la
     hoja, que es como se leen como campos. */
  background: var(--color-bg);
  color: var(--color-ink);
  outline: 1px solid color-mix(in srgb, var(--color-accent) 50%, transparent);
  outline-offset: 12px;
  box-shadow: 0 40px 70px -40px color-mix(in srgb, #000 75%, transparent);
  padding: clamp(var(--space-6), 4vw, var(--space-12));
}
@media (max-width: 859px) {
  /* 340 y no el mínimo de 240: con el mapa bloqueado, la placa (rótulo, calle,
     localidad, dos acciones y la nota) mide unos 250 px a este ancho y tocaba
     los bordes. */
  .contacto--mapa-ancho .contact-map--ancho { margin-top: var(--space-16); outline-offset: 6px; height: 340px; }
  .contacto .form-card { outline-offset: 6px; }
  .contacto--mapa-ancho .contact-info-list li { grid-template-columns: minmax(0, 1fr); gap: var(--space-1); }
}

/* Mientras está bloqueado: una placa de cobre con la dirección grabada, la
   misma pieza que la imagen corporativa de la clienta. Sustituye a la foto
   genérica de mapa que ponía Complianz, que no era de Vitoria ni de ningún
   sitio. */
.contact-map-placa,
.contact-map:has(.cmplz-blocked-content-container) .contact-map-placa {
  background:
    radial-gradient(60% 90% at 50% 45%, color-mix(in srgb, var(--color-cobre-claro) 78%, transparent) 0%, transparent 72%),
    linear-gradient(115deg, transparent 30%, color-mix(in srgb, var(--color-cobre-claro) 22%, transparent) 48%, transparent 64%),
    linear-gradient(178deg, var(--color-cobre-medio) 0%, var(--color-accent) 100%);
  color: var(--color-ink);
  isolation: isolate;
}
.contact-map-placa::after {
  content: "";
  position: absolute; inset: 0; z-index: -1;
  pointer-events: none;
  mix-blend-mode: soft-light;
  background: repeating-linear-gradient(0deg,
    color-mix(in srgb, var(--color-cobre-claro) 22%, transparent) 0 1px, transparent 1px 3px,
    color-mix(in srgb, var(--color-cobre-tinta) 10%, transparent) 3px 4px, transparent 4px 6px);
}
.contact-map-placa-rotulo {
  color: var(--color-ink);
  font-weight: 600;
  letter-spacing: .2em;
}
.contact-map-placa-direccion {
  font-size: clamp(var(--text-xl), 2.6vw, var(--text-3xl));
  letter-spacing: .06em;
  text-transform: uppercase;
  color: var(--color-ink);
  max-width: 24ch;
}
.contact-map-placa-localidad {
  font-size: var(--text-sm);
  letter-spacing: .2em;
  text-transform: uppercase;
  color: var(--color-ink);
}
.contact-map-placa-enlace {
  position: relative; isolation: isolate; overflow: hidden;
  padding: 12px 28px;
  font-size: var(--text-xs);
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--color-ink);
  border-color: var(--color-ink);
  transition: color var(--duration-base) var(--ease-out);
}
.contact-map-placa-enlace::before {
  content: ""; position: absolute; inset: 0; z-index: -1;
  background: var(--color-primary);
  opacity: 0;
  transition: opacity var(--duration-base) var(--ease-out);
}
.contact-map-placa-enlace:is(:hover, :focus-visible) { color: var(--color-cobre-claro); }
.contact-map-placa-enlace:is(:hover, :focus-visible)::before { opacity: 1; }
.contact-map-placa-ver {
  font-size: var(--text-xs);
  font-weight: 600;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--color-ink);
  text-decoration-thickness: 1px;
}
.contact-map-placa-nota { color: var(--color-ink); font-size: var(--text-xs); }

/* Los campos y el botón de SureForms, rectos como todo lo demás: eran lo
   único redondeado de la página. El botón habla como los otros botones de la
   web (versalita espaciada); el color ya sale de los ajustes del propio
   formulario, que ahora son los de la marca. */
.contacto .form-card :is(.srfm-input-common, input, textarea, select) { border-radius: 0 !important; }
.contacto .form-card .srfm-input-common { background: var(--color-surface) !important; border-color: var(--color-border) !important; }
.contacto .form-card .srfm-submit-button {
  border-radius: 0 !important;
  text-transform: uppercase;
  letter-spacing: .14em;
  font-size: var(--text-sm);
  font-weight: 600;
  padding: 14px 30px;
}



/* ══════════════════════════════════════════════════════════════════════
   404
   Una página con la misma voz que las demás: la placa de cobre con el
   número grabado y el marco de filete desplazado, el mismo gesto que la foto
   de Mirna. Es la única pieza decorativa; el resto es texto y salidas.
   ══════════════════════════════════════════════════════════════════════ */
.error-404 { padding-block: clamp(var(--space-16), 10vw, var(--space-24)); }
.error-404-enlaces { border-top-color: color-mix(in srgb, var(--color-accent) 35%, transparent); }
.error-404-enlaces li { border-bottom-color: color-mix(in srgb, var(--color-accent) 35%, transparent); }
.error-404-enlaces a {
  font-family: var(--font-display);
  font-size: var(--text-xl);
  letter-spacing: .04em;
  color: var(--color-ink);
  display: flex; justify-content: space-between; align-items: center;
  transition: color var(--duration-base) var(--ease-out);
}
/* Flecha dibujada (SVG como máscara, pinta con currentColor): un guion solo
   se leía como "menos", o sea, "plegar". No es un carácter tipográfico por lo
   mismo que la hamburguesa: no se confía a que la fuente lo tenga. */
.error-404-enlaces a::after {
  content: "";
  width: 28px; height: 10px;
  background: currentColor;
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 28 10'%3E%3Cpath d='M0 5h27M22 1l5 4-5 4' fill='none' stroke='%23000' stroke-width='1.2'/%3E%3C/svg%3E") right center / contain no-repeat;
          mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 28 10'%3E%3Cpath d='M0 5h27M22 1l5 4-5 4' fill='none' stroke='%23000' stroke-width='1.2'/%3E%3C/svg%3E") right center / contain no-repeat;
  transform: translateX(-6px);
  transition: transform var(--duration-base) var(--ease-out);
}
.error-404-enlaces a:is(:hover, :focus-visible) { color: var(--color-cobre-tinta); }
.error-404-enlaces a:is(:hover, :focus-visible)::after { transform: none; }
.error-404-boton {
  border-radius: 0;
  letter-spacing: .14em;
  text-transform: uppercase;
  font-size: var(--text-sm);
  padding: 14px 30px;
}
.error-404-placa {
  position: relative;
  isolation: isolate;
  border: 0;
  width: min(100%, 380px);
  outline: 1px solid color-mix(in srgb, var(--color-accent) 55%, transparent);
  outline-offset: 12px;
  background:
    radial-gradient(70% 55% at 50% 42%, color-mix(in srgb, var(--color-cobre-claro) 85%, transparent) 0%, transparent 72%),
    linear-gradient(115deg, transparent 28%, color-mix(in srgb, var(--color-cobre-claro) 26%, transparent) 47%, transparent 62%),
    radial-gradient(60% 50% at 0% 100%, color-mix(in srgb, var(--color-cobre-tinta) 40%, transparent) 0%, transparent 70%),
    linear-gradient(178deg, var(--color-cobre-medio) 0%, var(--color-accent) 100%);
  color: color-mix(in srgb, var(--color-ink) 88%, transparent);
  letter-spacing: .04em;
  /* Grabado: una luz de un píxel por debajo del trazo, como una letra
     rehundida en el metal. */
  text-shadow: 0 1px 0 color-mix(in srgb, var(--color-cobre-claro) 90%, transparent);
}
.error-404-placa::after {
  content: "";
  position: absolute; inset: 0; z-index: -1;
  pointer-events: none;
  mix-blend-mode: soft-light;
  background: repeating-linear-gradient(0deg,
    color-mix(in srgb, var(--color-cobre-claro) 22%, transparent) 0 1px, transparent 1px 3px,
    color-mix(in srgb, var(--color-cobre-tinta) 10%, transparent) 3px 4px, transparent 4px 6px);
}
@media (max-width: 859px) {
  .error-404-placa { order: -1; width: min(62%, 240px); font-size: 4.5rem; }
}
@media (prefers-reduced-motion: reduce) {
  .header .nav-list > li > a, .error-404-enlaces a, .error-404-enlaces a::after { transition: none; }
}

/* ══════════════════════════════════════════════════════════════════════
   LAS TRES PÁGINAS AL MISMO NIVEL (2026-09-15)
   Revisión conjunta de portada, Sobre mí y Contacto. La portada estaba un
   escalón por encima: tenía los hilos de cobre abriendo y cerrando, rótulos
   con filete, secciones que alternaban peso y un cierre. Las interiores eran
   una banda oscura y el pie. Lo que sigue lleva a las tres el mismo sistema.
   ══════════════════════════════════════════════════════════════════════ */

/* ── Los hilos de cobre, también en las interiores ─────────────────────
   Son la firma orgánica de la marca (las cintas de la placa) y en la portada
   abren y cierran la página. Sobre mí y Contacto abrían sin ellos. Aquí van
   en la banda con la que empieza cada una, en la esquina inferior izquierda,
   que en las dos es aire libre bajo la columna de texto. */
.sobre-nosotros--shunku:has(h1),
.contacto--mapa-ancho {
  background-image:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 520 360' preserveAspectRatio='xMinYMax meet'%3E%3Cdefs%3E%3ClinearGradient id='h' x1='0' y1='1' x2='1' y2='0'%3E%3Cstop offset='0' stop-color='%236B3820' stop-opacity='.95'/%3E%3Cstop offset='.38' stop-color='%23EDB894'/%3E%3Cstop offset='.5' stop-color='%23FFE6CF'/%3E%3Cstop offset='.7' stop-color='%23BD7650' stop-opacity='.7'/%3E%3Cstop offset='1' stop-color='%23BD7650' stop-opacity='0'/%3E%3C/linearGradient%3E%3C/defs%3E%3Cg%3E%3Cpath d='M-10 372C120 330 170 250 300 232S470 190 540 120' fill='none' stroke='url(%23h)' stroke-width='2.2' stroke-linecap='round'/%3E%3Cpath d='M-10 348C110 312 190 248 318 246S478 214 540 168' fill='none' stroke='url(%23h)' stroke-width='1' stroke-linecap='round'/%3E%3Cpath d='M20 372C150 344 238 292 350 286S490 262 540 226' fill='none' stroke='url(%23h)' stroke-width='.8' stroke-linecap='round'/%3E%3C/g%3E%3C/svg%3E"),
    radial-gradient(60% 55% at 100% 0%, color-mix(in srgb, var(--color-accent) 16%, transparent) 0%, transparent 65%),
    radial-gradient(55% 50% at 0% 100%, color-mix(in srgb, var(--color-accent) 12%, transparent) 0%, transparent 62%);
  background-repeat: no-repeat;
  background-position: left bottom, 0 0, 0 0;
  background-size: min(30vw, 420px) auto, 100% 100%, 100% 100%;
  background-color: var(--color-primary);
}

/* ── El rótulo con filete, en Contacto como en el resto ────────────────── */
.contacto--mapa-ancho .eyebrow { display: flex; align-items: center; gap: var(--space-4); }
.contacto--mapa-ancho .eyebrow::before {
  content: ""; flex: none; height: 1px; width: 40px;
  background: linear-gradient(90deg, transparent, currentColor);
}

/* ── Migas: la barra de cobre en lugar del » de Yoast ──────────────────── */
.breadcrumbs .breadcrumbs-sep {
  display: inline-block;
  margin-inline: .7em;
  color: var(--color-accent);
  transform: skewX(-8deg);
}

/* ── Portada: el bloque de Mirna lleva a su página ─────────────────────── */
.sobre-nosotros--shunku .sobre-nosotros-enlace {
  margin-top: var(--space-8);
  color: var(--color-cobre-claro);
  border-bottom-color: color-mix(in srgb, var(--color-cobre-claro) 55%, transparent);
}
.sobre-nosotros--shunku .sobre-nosotros-enlace:is(:hover, :focus-visible) { color: var(--color-on-primary); }

/* ── Sobre mí: "Cómo trabajo" como sección propia ─────────────────────────
   Lino entre dos anclas espresso (la banda de Mirna y el cierre): la página
   pasa de "banda + pie" a respirar como la portada. Tres principios en
   columnas, cada uno con su número de cobre en display —la misma voz que los
   rótulos— y un filete encima, sin cajas: en esta identidad separan el aire y
   las líneas. */
.modo-shunku {
  background:
    radial-gradient(70% 60% at 50% 0%, color-mix(in srgb, var(--color-cobre-suave) 70%, transparent) 0%, transparent 70%),
    var(--color-bg);
  padding-block: clamp(var(--space-16), 9vw, calc(var(--space-24) + var(--space-8)));
}
.modo-shunku-cabecera { text-align: center; max-width: 40rem; margin: 0 auto var(--space-16); }
.modo-shunku-cabecera .eyebrow {
  display: inline-flex; align-items: center; gap: var(--space-4);
  color: var(--color-cobre-tinta); letter-spacing: .24em;
}
.modo-shunku-cabecera .eyebrow::before,
.modo-shunku-cabecera .eyebrow::after {
  content: ""; height: 1px; width: clamp(24px, 6vw, 56px); opacity: .7;
  background: linear-gradient(90deg, transparent, currentColor);
}
.modo-shunku-cabecera .eyebrow::after { background: linear-gradient(90deg, currentColor, transparent); }
.modo-shunku-cabecera .section-title {
  font-family: var(--font-display); font-weight: 400; text-wrap: balance;
}
.modo-shunku-lista {
  list-style: none; margin: 0; padding: 0;
  display: grid; gap: var(--space-12) var(--space-10);
  counter-reset: modo;
}
@media (min-width: 860px) {
  .modo-shunku-lista { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
.modo-shunku-item {
  counter-increment: modo;
  position: relative;
  padding-top: var(--space-8);
  border-top: 1px solid color-mix(in srgb, var(--color-accent) 40%, transparent);
}
.modo-shunku-item::before {
  content: counter(modo, decimal-leading-zero);
  display: block;
  margin-bottom: var(--space-5);
  /* La fuente de texto en fino y no la display: la display tiene cifras de
     estilo antiguo, y "01" se leía "OI". Estas son de caja alta. */
  font-family: var(--font-body);
  font-weight: 200;
  font-variant-numeric: lining-nums tabular-nums;
  font-size: clamp(2.75rem, 4.4vw, 3.5rem);
  line-height: 1;
  letter-spacing: .04em;
  background: var(--metal-cobre);
  background-size: 180% 100%;
  -webkit-background-clip: text; background-clip: text;
  color: transparent;
}
.modo-shunku-afirmacion {
  margin: 0 0 var(--space-3);
  font-family: var(--font-display);
  font-size: var(--text-xl);
  line-height: 1.3;
  color: var(--color-ink);
}
.modo-shunku-detalle { margin: 0; color: var(--color-muted); line-height: 1.7; max-width: 34ch; }

/* ── Contacto: WhatsApp a la vista, como acción secundaria ─────────────────
   Contorno crema, no cobre: la acción principal de esta página es el botón
   de cobre del formulario, y dos piezas de cobre a la misma altura se
   anularían. */
.contacto--mapa-ancho .contacto-whatsapp {
  margin-top: var(--space-10);
  border-radius: 0;
  background: transparent;
  color: var(--color-on-primary);
  border: 1px solid color-mix(in srgb, var(--color-on-primary) 45%, transparent);
  padding: 13px 28px;
  font-size: 13px;
  letter-spacing: .14em;
  text-transform: uppercase;
  font-weight: 600;
  transition: border-color var(--duration-base) var(--ease-out), color var(--duration-base) var(--ease-out);
}
.contacto--mapa-ancho .contacto-whatsapp::before { display: none; }
.contacto--mapa-ancho .contacto-whatsapp:is(:hover, :focus-visible) {
  color: var(--color-cobre-claro);
  border-color: var(--color-cobre-claro);
  transform: none; box-shadow: none;
}

/* ── Responsive: lo que en tablet se leía a medio terminar ─────────────── */

/* Catálogo entre 700 y 999 px: dos columnas y la foto ocupando UNA celda
   dejaba tratamientos huérfanos con un hueco vacío al lado ("Quiromasaje",
   "Fisioterapia", "Tratamiento de pies"). La foto ocupa la fila entera, así
   que los tratamientos quedan siempre en pareja, y el último, si va solo,
   ocupa también las dos columnas. */
@media (min-width: 700px) and (max-width: 999px) {
  .mosaico-celdas--con-foto .mosaico-celda--foto { grid-column: 1 / -1; min-height: min(56vw, 440px); }
  .mosaico-celdas--con-foto > .mosaico-celda--foto ~ .mosaico-celda:last-child:nth-child(even) { grid-column: 1 / -1; }
}

/* La foto de Mirna, en una columna: iba empujada a la derecha (margin-inline
   auto 0) y en tablet quedaba media pantalla vacía a su izquierda con el marco
   rozando el borde. */
@media (max-width: 859px) {
  .sobre-nosotros--shunku .sobre-nosotros-media { margin-inline: auto; width: min(100%, 440px); }
}

/* El cierre en tablet y móvil: el hilo de la esquina superior derecha medía
   28vw y atravesaba el titular ("VEMOS"). Más pequeño y pegado al canto. */
@media (max-width: 899px) {
  .cta-final--franja { background-size: min(34vw, 180px) auto, min(34vw, 180px) auto, 100% 100%, 100% 100% !important; }
  .sobre-nosotros--shunku:has(h1),
  .contacto--mapa-ancho { background-size: min(44vw, 220px) auto, 100% 100%, 100% 100%; }
}

/* El pie en tablet: una columna larguísima con 768 px disponibles. Dos
   columnas desde 600 px; y en táctil, los enlaces con altura de dedo. */
@media (min-width: 600px) and (max-width: 900px) {
  .footer--negocio-local .footer-top { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
}
@media (max-width: 900px) {
  .footer--negocio-local .footer-col a { display: inline-block; padding-block: 4px; }
}

/* ── BLOQUES DE TEXTO DE LA CLIENTA ──────────────────────────────────
   Las cuatro secciones de portada que aporta Mirna (filosofía, rituales,
   tu momento, un espacio para ti) y el significado del nombre en "Sobre
   mí". Una sola plantilla, un solo bloque de CSS.

   Todo lo demás lo ponen las clases que ya existían (.section,
   .titulo-seccion, .eyebrow, .prosa, .enlace-subrayado). Aquí solo se
   centra la columna: .prosa nació en la ficha de tratamiento, alineada a
   la izquierda y a 68ch, y a ese ancho un texto centrado se lee como un
   cartel, no como prosa. 58ch es lo que aguanta centrado. */
.bloque-texto-cuerpo { text-align: center; }
.bloque-texto-cuerpo .eyebrow { margin-bottom: var(--space-3); }
.bloque-texto-cuerpo .titulo-seccion { margin-bottom: var(--space-6); }

.prosa--centrada {
  max-width: 58ch;
  margin-inline: auto;
  color: var(--color-muted);
  font-size: var(--text-lg);
  line-height: 1.7;
}
/* El último párrafo de la filosofía y el del espacio son el remate ("Un
   momento para ti…", "Entra, respira…"). En tinta y no en taupe: es la
   frase que se recuerda, y en el color del cuerpo se perdía entre las
   anteriores. */
.prosa--centrada > p:last-child:not(:only-child) {
  color: var(--color-ink);
  margin-top: var(--space-6);
}

.bloque-texto-accion { margin-top: var(--space-8); margin-bottom: 0; }

/* Sobre banda oscura el taupe no llega a AA: el cuerpo hereda el color de
   .section--dark y solo se le baja la opacidad. */
.section--dark .prosa--centrada { color: color-mix(in srgb, var(--color-on-primary) 88%, transparent); }
.section--dark .prosa--centrada > p:last-child:not(:only-child) { color: var(--color-on-primary); }

/* El aviso de la carta, debajo de las franjas de precio. Pequeño y en
   taupe: matiza el precio, no compite con él. */
/* Cuando hay aviso, el aire de debajo de los precios pasa a debajo del
   aviso: el aviso matiza el precio, asi que va pegado a el, y lo que tiene
   que separarse es el boton. Sin esto el aviso quedaba lejisimos de las
   franjas y pegado al boton, que es justo al reves. */
.franjas:has(+ .franjas-aviso) { margin-bottom: 0; }
.franjas-aviso {
  max-width: 46ch;
  margin-top: var(--space-3);
  margin-bottom: var(--space-8);
  font-size: var(--text-sm);
  line-height: 1.5;
  color: var(--color-muted);
}

/* ── EL REMATE: "Un espacio para ti" ─────────────────────────────────
   Dos frases no son una seccion: con el peso normal quedaban 96 px de
   aire arriba y otros 96 abajo para dos lineas, y era el bloque mas
   descuidado de la portada. Aqui el aire lo pone .section--tight y el
   protagonismo lo pone el tamano del texto, que es lo que convierte un
   parrafo suelto en un respiro con intencion. */
.bloque-texto--remate .prosa--centrada {
  max-width: 34ch;
  font-size: clamp(1.15rem, 1rem + .6vw, 1.5rem);
  line-height: 1.5;
  color: var(--color-ink);
}
.bloque-texto--remate .prosa--centrada > p:last-child:not(:only-child) {
  margin-top: var(--space-5);
  color: var(--color-cobre-tinta);
}

/* ── "EL NOMBRE", EN SOBRE MÍ: EL ANCLA QUE LE FALTABA ────────────────
   "Shunku significa corazón" estaba en lino, y Sobre mí era una banda
   espresso arriba, todo claro en medio y el cierre espresso abajo: más
   del 40% de la altura sin un punto de peso (ritmo-y-jerarquia.md,
   regla 2). Este bloque pasa a espresso y la página queda alternando
   oscuro y claro en sus cinco pasos.

   Es además el contenido que más lo merece: el significado del nombre es
   el centro emocional de la marca, y en lino se leía como una nota al
   pie entre dos secciones más vistosas.

   Rima con las otras dos piezas oscuras de la página SIN ser una copia
   (regla 2: "las anclas deben rimar entre sí"). Comparten el espresso y
   el filete de cobre grabado arriba y abajo —el borde de la placa—, y se
   distinguen por la luz: la banda de Mirna la recibe por abajo a la
   izquierda, el cierre lleva las filigranas, y aquí entra centrada por
   arriba. Esa luz centrada es exactamente la misma que usa .modo-shunku,
   la sección que va justo debajo: las dos se encienden por el mismo
   sitio, una en oscuro y otra en claro, y el corte entre ambas se lee
   como un cambio de luz y no como un cambio de web. */
.bloque-texto--nombre {
  background:
    radial-gradient(62% 72% at 50% 0%, color-mix(in srgb, var(--color-accent) 17%, transparent) 0%, transparent 62%),
    var(--color-primary);
  box-shadow:
    inset 0 1px 0 color-mix(in srgb, var(--color-accent) 55%, transparent),
    inset 0 -1px 0 color-mix(in srgb, var(--color-accent) 55%, transparent);
}
.bloque-texto--nombre .eyebrow { color: var(--color-cobre-claro); }
/* Y no puede tener la MISMA silueta que "Cuidarse no es un lujo", que va
   justo encima: rótulo con filete, titular en display y dos párrafos
   centrados, las dos. Con la misma medida y el mismo cuerpo se leían como
   la misma sección pintada dos veces, una en claro y otra en oscuro — que
   es el fallo de la alternancia invisible trasladado a la composición.
   Se separan por el ritmo tipográfico, no por el color: aquí el titular
   pesa más y la columna es más estrecha y de cuerpo mayor, porque esto es
   una revelación (de dónde viene el nombre) y lo de arriba es un
   razonamiento. Dos velocidades de lectura distintas. */
.bloque-texto--nombre .titulo-seccion {
  font-size: clamp(2.1rem, 1.5rem + 2.3vw, 3.4rem);
}
.bloque-texto--nombre .prosa--centrada {
  max-width: 48ch;
  font-size: clamp(1.05rem, .98rem + .35vw, 1.25rem);
  line-height: 1.75;
}
/* El filete del rótulo hereda currentColor, que aquí ya es cobre lavado:
   sobre el espresso el cobre tinta de fondo claro se apagaba del todo. */
.bloque-texto--nombre .titulo-seccion { color: var(--color-on-primary); }

/* ── CONTACTO: "UN ESPACIO PARA TI" COMO ÚLTIMO ALIENTO ───────────────
   Viene de la portada. Aquí queda entre el bloque espresso del
   formulario y el pie, que también es oscuro, así que es el único
   respiro claro de la página: si se quedara en el blanco liso del fondo
   se leería como un hueco entre dos bloques en vez de como una sección.
   La misma luz cálida centrada de .modo-shunku y de "El nombre" —el
   gesto de esta web para "aquí se respira"— lo convierte en una pieza.

   Y el aire de abajo sube: .section--tight deja 64 px, que pegados al
   filo del pie hacían que el remate pareciera cortado. */
.bloque-texto--llegada {
  background:
    radial-gradient(72% 82% at 50% 0%, color-mix(in srgb, var(--color-cobre-suave) 78%, transparent) 0%, transparent 72%),
    var(--color-bg);
  /* .section--tight deja 64 px, y aquí arriba y abajo hay bloque oscuro: con
     ese aire el respiro se leía como la juntura entre dos piezas, no como una
     sección. Lo que lo convierte en un final es el aire, porque texto hay
     poco — dos frases. */
  padding-block: clamp(var(--space-16), 8vw, var(--space-20));
}

/* ── LAS SEIS RAZONES, DENTRO DE "CÓMO TRABAJO" ───────────────────────
   Segundo movimiento de la sección, no una sección nueva. El porqué está
   en sobre-nosotros-shunku.php; aquí solo está lo que lo hace legible
   como un movimiento y no como un bloque pegado.

   Tres claves:
   · El filete de arriba lo separa. En esta identidad la jerarquía la
     hacen el aire y las líneas, nunca una caja (regla 1 de este archivo:
     nada de tarjetas).
   · Tres columnas, las MISMAS que los principios de encima, y no las dos
     que traía la variante de la portada. Seis apuntes en dos columnas
     bajo tres columnas numeradas se leen como dos rejillas distintas
     apiladas; en tres, el segundo movimiento repite la retícula del
     primero a menor escala y los dos se leen como una sola pieza.
   · El rótulo lleva su filete a los lados, como todos los rótulos de
     esta web, pero más corto y sin el aire de un rótulo de sección: es
     un rango por debajo del titular de arriba, no otro titular. */
.modo-shunku-extra {
  margin-top: clamp(var(--space-16), 8vw, var(--space-20));
  padding-top: clamp(var(--space-12), 6vw, var(--space-16));
  border-top: 1px solid color-mix(in srgb, var(--color-cobre-tinta) 26%, transparent);
}
.modo-shunku-extra-titulo {
  display: flex; align-items: center; justify-content: center; gap: var(--space-4);
  margin: 0 0 clamp(var(--space-10), 5vw, var(--space-12));
  font-family: var(--font-body);
  font-size: var(--text-xs);
  font-weight: 600;
  letter-spacing: .24em;
  text-transform: uppercase;
  color: var(--color-cobre-tinta);
  text-align: center;
}
.modo-shunku-extra-titulo::before,
.modo-shunku-extra-titulo::after {
  content: ""; height: 1px; width: clamp(18px, 4vw, 38px); opacity: .7;
  background: linear-gradient(90deg, transparent, currentColor);
}
.modo-shunku-extra-titulo::after { background: linear-gradient(90deg, currentColor, transparent); }

/* La lista pierde el tope de 900 px de la variante de portada: aquí tiene
   que caer sobre la misma retícula que los tres principios de encima, y
   centrada a 900 px las columnas no coincidían con ninguna de las tres. */
.modo-shunku-extra .ventajas-check { max-width: none; }
@media (min-width: 860px) {
  .modo-shunku-extra .ventajas-check {
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: var(--space-6) var(--space-10);
  }
}
/* Un punto por debajo del cuerpo normal: son apuntes, y al tamaño de la
   variante de portada (--text-lg) competían con las afirmaciones en
   display de los tres principios. */
.modo-shunku-extra .ventaja-check-titulo {
  font-size: var(--text-base);
  line-height: 1.45;
  font-weight: 400;
  color: var(--color-ink);
}

/* ── "¿POR QUÉ SHUNKU BY ROX?" ───────────────────────────────────────
   Seis afirmaciones cortas no necesitan el aire de una seccion
   protagonista (regla 4 de ritmo-y-jerarquia).

   Acotado a .ventajas (la <section> de la variante) y no a la clase
   suelta: .modo-shunku-extra reutiliza .ventajas--lista-check para
   heredar el filete de cobre de las marcas, y sin acotar se llevaba
   tambien estos 64 px, que ahi los pone el separador. */
.ventajas.ventajas--lista-check { padding-block: var(--space-16); }

/* La marca de verificacion generica era la pieza mas prestada de la
   pagina: un tick de plantilla en la unica seccion que habla de por que
   elegir a Mirna. Se sustituye por el filete de cobre, que es el gesto
   que ya llevan todos los rotulos de la portada y la etiqueta de la
   banda de la miel. El SVG es decorativo (aria-hidden), asi que
   ocultarlo no quita informacion a nadie. */
.ventajas--lista-check .ventaja-check-icono { display: none; }
.ventajas--lista-check .ventaja-check { position: relative; padding-left: var(--space-10); }
.ventajas--lista-check .ventaja-check::before {
  content: ""; position: absolute; left: 0; top: .72em;
  width: 28px; height: 1px;
  background: linear-gradient(90deg, transparent, var(--color-cobre-tinta));
}

/* ══════════════════════════════════════════════════════════════════════
   QUE SE VEA QUE SE PUEDE PULSAR (2026-09-21)

   El mosaico es un tejido de celdas planas: sin tarjeta, sin sombra y sin
   elevación, que son las tres cosas con las que media web dice "esto es un
   enlace". Aquí no las tenemos —y no las queremos, es la regla 1 de este
   archivo—, así que la única señal que quedaba era el hover: un tinte del 8%
   y el título pasando a cobre.

   Eso deja fuera a casi todo el mundo:

   - En móvil y tableta NO HAY HOVER. Las doce fichas se leían como una lista
     de texto: nombre, descripción y duraciones. Nada invita a tocar. Medido
     en la captura de 390 px del 2026-09-21: la celda en reposo y la celda
     pulsable son el mismo píxel.
   - En escritorio, el 8% de tinte sobre lino es un cambio que se ve si ya
     sabes que está; quien llega a la carta a mirar precios no lo descubre.
   - Con teclado, el anillo de foco genérico caía FUERA de la celda, que va a
     borde con borde con sus vecinas: se pintaba encima del hilo del tejido.

   La señal tiene que existir EN REPOSO, y tiene que estar hecha del material
   de la marca —hilo fino y tinta de cobre—, no de una tarjeta. Es una flecha
   de un pelo, al pie de la celda, alineada con la línea de duraciones:
   atenuada mientras no pasa nada, cobre entero y un paso a la derecha cuando
   la celda responde. El gesto no es nuevo: es el mismo .enlace-flecha que ya
   traía el tema.

   Se dibuja con una máscara SVG, no con el glifo "→". Un carácter decorativo
   fiado a la fuente del sistema es exactamente como el botón de menú estuvo
   meses enseñando un recuadro vacío en producción (ver skill novamira).
   ------------------------------------------------------------------- */

.mosaico-enlace,
.incluye-enlace {
  position: relative;
  /* Sin esto, el foco y la pulsación mueven color pero no el cobre del hilo. */
  transition: background var(--duration-base) var(--ease-out),
              outline-color var(--duration-base) var(--ease-out);
}

/* La flecha. `mask` + background-color en vez de un SVG de color fijo: así
   hereda el cobre que le toque a cada banda (clara u oscura) con una sola
   declaración de color, y no hay dos copias del dibujo que se desincronicen. */
:root {
  --flecha-enlace: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 44 24' fill='none' stroke='%23000' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2 12h38M31 4l9 8-9 8'/%3E%3C/svg%3E");
}

/* DÓNDE VA, que es lo que costó acertar.

   Primer intento: colgada de la esquina inferior derecha de la celda con
   position:absolute. En la rejilla de cuatro columnas quedaba perfecta,
   porque ahí las duraciones ya van ancladas al pie. Pero las celdas de la
   maqueta 'pareja' y las de los combos miden lo que mide la FOTO de al lado,
   y en ellas la duración va pegada al título (no hay resumen que separar):
   la flecha se quedaba flotando sesenta píxeles por debajo del texto, en
   mitad de un rectángulo vacío. Se leía como un adorno suelto, no como el
   remate de una línea.

   Lo que la ata al contenido es la propia línea de duraciones, convertida en
   una fila: el texto a la izquierda, la flecha al extremo derecho y las dos
   sobre la misma base. Sale bien en los tres casos sin una sola excepción:

   - Celda normal: la duración ocupa el ancho, y space-between manda la
     flecha al borde derecho de la celda.
   - Celda centrada (el remate de "Spa & bienestar"): ahí la duración se
     encoge a su contenido, así que la flecha sale pegada al texto y el
     conjunto sigue centrado, que es lo que pide esa maqueta.
   - Duración de dos líneas: align-items:flex-end la sienta sobre la última,
     no a media altura del bloque. */
.mosaico-duracion,
.incluye-duracion {
  display: flex; align-items: flex-end; justify-content: space-between;
  gap: var(--space-4);
}
.mosaico-duracion::after,
.incluye-duracion::after,
.mosaico-enlace:not(:has(.mosaico-duracion))::after,
.incluye-enlace:not(:has(.incluye-duracion))::after {
  content: "";
  flex: none;
  width: 22px; height: 12px;
  /* 72%, no menos. Esta flecha NO es decoración: es el único indicio de que
     la celda se pulsa, así que le aplica el 3:1 que WCAG 1.4.11 pide a un
     componente de interfaz. Medido sobre las tres bandas claras: 3,39 en
     lino, 3,22 en arena, 3,18 en cobre. A ojo daba el pego con el 48% que
     tuvo primero, y ahí eran 2,1. */
  background-color: color-mix(in srgb, var(--color-cobre-tinta) 72%, transparent);
  -webkit-mask: var(--flecha-enlace) no-repeat center / contain;
          mask: var(--flecha-enlace) no-repeat center / contain;
  transition: transform var(--duration-base) var(--ease-out),
              background-color var(--duration-base) var(--ease-out);
  pointer-events: none;
}

/* Un tratamiento sin ninguna franja de duración publicada no tiene línea de
   la que colgarla; entonces sí va a la esquina, que es el único sitio que
   queda. Pasa con los borradores a medio rellenar de la carta. */
.mosaico-enlace:not(:has(.mosaico-duracion))::after,
.incluye-enlace:not(:has(.incluye-duracion))::after {
  position: absolute; right: var(--space-6); bottom: var(--space-8);
}

/* ...salvo en el remate centrado del final del catálogo ("Exfoliación e
   hidratación corporal"), que tampoco tiene duraciones. Ahí la esquina está a
   mil píxeles del texto: la flecha vuelve al flujo, debajo del resumen, y el
   align-items:center de esa maqueta la centra con él. */
.mosaico-celdas:not(.mosaico-celdas--pareja) > .mosaico-celda:only-child
  .mosaico-enlace:not(:has(.mosaico-duracion))::after {
  position: static;
  margin-top: var(--space-6);
}

/* Respuesta: cobre entero y un paso adelante. */
.mosaico-enlace:is(:hover, :focus-visible) :is(.mosaico-duracion, .incluye-duracion)::after,
.incluye-enlace:is(:hover, :focus-visible) :is(.mosaico-duracion, .incluye-duracion)::after,
.mosaico-enlace:is(:hover, :focus-visible)::after,
.incluye-enlace:is(:hover, :focus-visible)::after {
  background-color: var(--color-cobre-tinta);
  transform: translateX(5px);
}

/* El tinte del hover sube del 8% al 14%. Comprobado que el resumen en taupe
   sigue pasando AA sobre la celda teñida antes de dejarlo. */
.mosaico-enlace:hover { background: color-mix(in srgb, var(--color-accent) 14%, transparent); }
.incluye-enlace:is(:hover, :focus-visible) { background: color-mix(in srgb, var(--color-accent) 14%, transparent); }

/* El hilo de la celda apretada se enciende. El outline cae en el gap de 1 px
   que comparte con las vecinas, así que hace falta subirla de plano: si no,
   el hilo apagado de la celda de al lado se pinta en el mismo píxel y se
   come medio recuadro. */
.mosaico-celda { position: relative; z-index: 0; transition: outline-color var(--duration-base) var(--ease-out); }
.mosaico-celda:has(> .mosaico-enlace:is(:hover, :focus-visible)) {
  outline-color: color-mix(in srgb, var(--color-cobre-tinta) 60%, transparent);
  z-index: 1;
}

/* Foco de teclado DENTRO de la celda (offset negativo). El anillo global lleva
   offset positivo, pensado para un botón con aire alrededor; aquí las celdas
   van a hueso y ese anillo se dibujaba justo encima del tejido. */
.mosaico-enlace:focus-visible,
.incluye-enlace:focus-visible {
  outline: 2px solid var(--color-cobre-tinta);
  outline-offset: -5px;
}

/* Pulsación — la mitad de los visitantes de este sitio entran por el móvil,
   donde el hover no existe y sin :active cada celda se siente muerta bajo el
   dedo. Va DESPUÉS del :hover a propósito: misma especificidad, gana el
   último (ver skill animaciones-web). */
.mosaico-enlace:active,
.incluye-enlace:active {
  /* 18% y no más: por encima, el resumen en taupe y las duraciones en cobre
     bajan de 4,5 sobre arena y cobre. Con 18% quedan en 4,77 y 4,71. */
  background: color-mix(in srgb, var(--color-accent) 18%, transparent);
  transition-duration: var(--duration-fast);
}
.mosaico-enlace:active :is(.mosaico-duracion, .incluye-duracion)::after,
.incluye-enlace:active :is(.mosaico-duracion, .incluye-duracion)::after,
.mosaico-enlace:active::after,
.incluye-enlace:active::after {
  background-color: var(--color-cobre-tinta);
  transform: translateX(5px);
  transition-duration: var(--duration-fast);
}

/* La banda oscura tiene su propio cobre: el tinta (#8A4A28) sobre cobre
   bruñido no se ve. */
.mosaico-grupo--oscuro .mosaico-duracion::after,
.mosaico-grupo--oscuro .mosaico-enlace::after {
  /* Más cargada que en las bandas claras porque el peor fondo de esta banda
     no es el cobre bruñido de base (ahí sobra), sino la VETA clara que lo
     cruza a 115deg. Medido sobre ella: 3,20 al 80%, 2,99 al 75%. */
  background-color: color-mix(in srgb, var(--color-cobre-claro) 80%, transparent);
}
.mosaico-grupo--oscuro .mosaico-enlace:is(:hover, :focus-visible) .mosaico-duracion::after,
.mosaico-grupo--oscuro .mosaico-enlace:active .mosaico-duracion::after,
.mosaico-grupo--oscuro .mosaico-enlace:is(:hover, :focus-visible)::after,
.mosaico-grupo--oscuro .mosaico-enlace:active::after { background-color: var(--color-cobre-claro); }
.mosaico-grupo--oscuro .mosaico-duracion { color: var(--color-cobre-claro); }
.mosaico-grupo--oscuro .mosaico-enlace:focus-visible { outline-color: var(--color-cobre-claro); }
.mosaico-grupo--oscuro .mosaico-celda:has(> .mosaico-enlace:is(:hover, :focus-visible)) {
  outline-color: color-mix(in srgb, var(--color-cobre-claro) 60%, transparent);
}

/* La celda de foto NO es un enlace, así que no se mueve ni se enciende al
   pasar por encima. Un bloque que se eleva prometiendo un clic que no existe
   es peor que uno quieto (skill animaciones-web, "el movimiento significa
   cosas"). Lo único que hace es asentarse al entrar — ver más abajo. */

/* ══════════════════════════════════════════════════════════════════════
   MICROMOVIMIENTO, SEGUNDA PASADA (2026-09-21)

   El sistema de reveal ya estaba montado, pero solo lo usaba la portada. La
   carta, las seis páginas del catálogo y las doce fichas entraban de golpe:
   una pantalla que aparece entera y quieta se lee como un documento, no como
   un sitio cuidado.

   Lo que se añade es de un solo gesto por pieza, y cada gesto significa algo:
   los bloques de texto suben, las fotos se asientan, y lo que no es pulsable
   no se mueve al pasar por encima. Nada entra en bucle: el único movimiento
   perpetuo del sitio sigue siendo la deriva del hero.
   ------------------------------------------------------------------- */

/* Las fotos del catálogo se ASIENTAN al entrar: llegan un 6% grandes y bajan
   a su tamaño. Es el gesto de una foto que se posa, y como va en `transform`
   dentro de una celda con overflow:hidden, ni desplaza layout ni recorta nada
   que se estuviera viendo.

   Más largo que el reveal genérico (500 ms) a propósito: una foto grande
   moviéndose a la misma velocidad que un párrafo parece que da un tirón.
   El retardo lo hereda de la celda, así que la foto entra en su turno dentro
   de la banda, no antes. */
.mosaico-celda--foto .mosaico-foto {
  /* UNA sola transición para el transform de esta foto, y la duración por
     variable. El asentamiento de entrada y el zoom del hover son la misma
     propiedad: con dos declaraciones de `transition` compitiendo, ganaba la
     última y la entrada se quedaba en 500 ms.

     Y SIN `--reveal-delay` aquí. El <li> lo lleva puesto en línea (140 ms) y
     se hereda: metido en esta transición, el hover de la foto tardaría 140 ms
     en arrancar para siempre. Es el fallo que describe la skill
     animaciones-web, y no se ve leyendo el CSS. La entrada no lo necesita: la
     foto se asienta mientras la celda se funde, que es justo lo que se
     quiere. */
  transition: transform var(--foto-duracion, 1100ms) var(--ease-out);
}
/* El estado de partida va en :not(.is-visible) y el visible NO declara
   transform. Declararlo pesaba (0,4,0) contra los (0,3,0) del hover y, al ir
   después, le ganaba: el zoom de la foto enlazada no habría funcionado nunca
   y no habría dado ningún error. */
.mosaico-celda--foto.reveal:not(.is-visible) .mosaico-foto { transform: scale(1.06); }

/* La misma ley para la foto de la ficha de tratamiento, pero SIN reveal: es la
   primera pantalla y su LCP, y el reveal la tenía a opacity 0 hasta que corría
   el JS (skill animaciones-web: lo de la primera pantalla no se oculta). El
   asentamiento se queda como animación CSS, que no depende del JS ni oculta
   nada: la foto está desde el primer pintado y solo baja de 1.06 a 1.
   prefers-reduced-motion la anula con la regla global de main.css. */
@keyframes shunku-asentar { from { transform: scale(1.06); } to { transform: none; } }
.servicio-media img { animation: shunku-asentar 1100ms var(--ease-out) both; }

/* Los bloques de la ficha entran con MENOS recorrido que el reveal genérico
   (24 px). Son piezas que van una detrás de otra en una columna estrecha: con
   el recorrido completo, bajar por la ficha es una sucesión de saltos. */
.bloque-ficha.reveal { transform: translateY(14px); }
.bloque-ficha.reveal.is-visible { transform: none; }

/* El icono de la categoría gira un pelo al entrar, como un sello que se posa.
   Acompaña a su cabecera, no se anima aparte: si cada pieza pequeña tuviera
   su propia entrada, la banda entera parpadearía. */
.mosaico-cabecera.reveal .mosaico-icono {
  transform: rotate(-6deg) scale(.9);
  transition: transform 700ms var(--ease-spring) 120ms;
}
.mosaico-cabecera.reveal.is-visible .mosaico-icono { transform: none; }

/* ── La foto de la categoría, que ahora lleva a alguna parte ──────────
   Era la única pieza grande del mosaico que no era un enlace: media banda de
   ancho, el elemento que más se mira, y un callejón sin salida. En móvil
   ocupa la pantalla entera y es lo primero que se toca.

   Al hacerla pulsable hay que darle señal, o estaríamos creando otra vez el
   problema que acabamos de arreglar en las celdas de texto. Aquí la señal no
   puede ser la flecha sola: sobre una foto, un trazo fino de cobre desaparece
   en cuanto la foto tiene una zona clara. Así que es un rótulo con su velo:
   dice además a dónde lleva, que en mitad de una página larga es información
   y no adorno.

   El velo al 82% de espresso garantiza AA incluso con una foto BLANCA detrás
   (cobre claro da 4,85 en ese peor caso; sobre las fotos reales, 8,9). Medido
   contra el peor fondo posible y no contra las fotos que hay hoy, porque las
   cambia la clienta desde wp-admin sin llamar a nadie. */
.mosaico-foto-enlace {
  position: absolute; inset: 0;
  display: block; overflow: hidden;
  text-decoration: none;
}
.mosaico-foto-pie {
  position: absolute; left: 0; right: 0; bottom: 0;
  display: flex; align-items: center; gap: var(--space-3);
  padding: var(--space-10) var(--space-6) var(--space-5);
  font-size: var(--text-xs); letter-spacing: .14em; text-transform: uppercase;
  color: var(--color-cobre-claro);
  background: linear-gradient(180deg,
    transparent 0%,
    color-mix(in srgb, var(--color-primary) 55%, transparent) 45%,
    color-mix(in srgb, var(--color-primary) 82%, transparent) 100%);
  transition: color var(--duration-base) var(--ease-out);
}
.mosaico-foto-pie::after {
  content: "";
  flex: none; width: 22px; height: 12px;
  background-color: currentColor;
  -webkit-mask: var(--flecha-enlace) no-repeat center / contain;
          mask: var(--flecha-enlace) no-repeat center / contain;
  transition: transform var(--duration-base) var(--ease-out);
}

/* AHORA sí se mueve al pasar por encima, porque ahora sí lleva a algún sitio.
   Mientras fue una foto muda estuvo quieta a propósito (ver la nota de
   "Micromovimiento"): elevarse prometiendo un clic que no existe es peor que
   estarse quieto. La regla no ha cambiado, ha cambiado la foto. */
.mosaico-foto-enlace:is(:hover, :focus-visible) .mosaico-foto {
  --foto-duracion: var(--duration-slow);
  transform: scale(1.04);
}
.mosaico-foto-enlace:is(:hover, :focus-visible) .mosaico-foto-pie { color: var(--color-on-primary); }
.mosaico-foto-enlace:is(:hover, :focus-visible) .mosaico-foto-pie::after { transform: translateX(5px); }
.mosaico-foto-enlace:focus-visible { outline: 2px solid var(--color-cobre-claro); outline-offset: -5px; }
.mosaico-foto-enlace:active .mosaico-foto { --foto-duracion: var(--duration-fast); transform: scale(1.02); }

/* ═══════════════════════════════════════════════════════════════════════
   BONOS REGALO (2026-10-02)

   La página /bonos-regalo/ (page-bonos-regalo.php), la banda de la portada
   (template-parts/shunku/bono-portada.php) y el bono dibujado que llevan las
   dos (template-parts/shunku/bono.php).
   ═══════════════════════════════════════════════════════════════════════ */

/* ── El bono ────────────────────────────────────────────────────────────
   Una placa de cobre, del mismo metal que la banda de la miel: rampa a
   100deg, foco rasante arriba, cepillado y grano en ::before, cantos
   grabados. Es un OBJETO puesto encima de la banda, no una banda: por eso
   (y solo por eso) lleva sombra y va ligeramente girado. El mosaico no tiene
   sombras porque sus celdas son tejido; esto es una tarjeta que se regala.

   Todo lo de dentro se mide en cqi (el ancho del propio bono): así el bono
   grande de la página y el compacto de la portada son el mismo dibujo a dos
   tamaños, sin una segunda tabla de medidas. */
.bono {
  position: relative;
  isolation: isolate;
  container-type: inline-size;
  aspect-ratio: 16 / 10.5;
  width: 100%;
  overflow: hidden;
  color: var(--color-ink);
  background:
    radial-gradient(60% 80% at 18% 0%, color-mix(in srgb, var(--color-cobre-claro) 50%, transparent) 0%, transparent 62%),
    linear-gradient(100deg,
      var(--color-accent) 0%, var(--color-cobre-medio) 16%, var(--color-cobre-claro) 30%,
      var(--color-cobre-medio) 44%, var(--color-accent) 60%, var(--color-accent) 100%);
  box-shadow:
    inset 0 1px 0 color-mix(in srgb, #FFF4EA 45%, transparent),
    inset 0 -1px 0 color-mix(in srgb, var(--color-cobre-tinta) 60%, transparent),
    0 28px 50px -30px color-mix(in srgb, var(--color-primary) 65%, transparent),
    0 6px 14px -8px color-mix(in srgb, var(--color-cobre-oscuro) 45%, transparent);
  transform: rotate(-2deg);
}
.bono::before {
  content: "";
  position: absolute; inset: 0; z-index: -1;
  pointer-events: none;
  background:
    repeating-linear-gradient(0deg,
      color-mix(in srgb, var(--color-cobre-claro) 22%, transparent) 0 1px, transparent 1px 3px,
      color-mix(in srgb, var(--color-cobre-tinta) 10%, transparent) 3px 4px, transparent 4px 6px),
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)' opacity='.22'/%3E%3C/svg%3E");
  mix-blend-mode: soft-light;
}
/* El filete interior: el marco grabado de una tarjeta impresa. */
.bono::after {
  content: "";
  position: absolute; inset: 3.2cqi; z-index: -1;
  pointer-events: none;
  border: 1px solid color-mix(in srgb, var(--color-cobre-tinta) 45%, transparent);
}

/* La cinta del lazo: una franja de satén espresso que cruza la tarjeta de
   arriba abajo, con su brillo en el centro. Es el lazo del PDF de la
   clienta reducido a lo que un dibujo puede decir sin parecer clipart: que
   esto es un regalo. */
.bono-cinta {
  position: absolute; top: 0; bottom: 0; right: 9%; z-index: 0;
  width: 6cqi;
  background: linear-gradient(90deg,
    var(--color-cobre-oscuro) 0%,
    color-mix(in srgb, var(--color-cobre-medio) 70%, var(--color-cobre-oscuro)) 38%,
    color-mix(in srgb, var(--color-cobre-claro) 60%, var(--color-cobre-medio)) 50%,
    color-mix(in srgb, var(--color-cobre-medio) 70%, var(--color-cobre-oscuro)) 62%,
    var(--color-cobre-oscuro) 100%);
  box-shadow: 0 0 2.4cqi color-mix(in srgb, var(--color-cobre-oscuro) 45%, transparent);
}

.bono-cara {
  position: relative; z-index: 1;
  height: 100%;
  /* El texto se queda a la izquierda de la cinta. */
  padding: 8cqi 22cqi 7.5cqi 8.5cqi;
  display: flex; flex-direction: column;
}
.bono-marca {
  margin: 0;
  font-family: var(--font-display);
  font-size: 5.6cqi; line-height: 1;
  letter-spacing: .04em;
  display: flex; align-items: baseline; gap: 1.6cqi;
}
.bono-marca-firma {
  font-family: var(--font-body);
  font-size: 2.3cqi; font-weight: 600;
  letter-spacing: .3em; text-transform: uppercase;
}
.bono-nombre {
  margin: 4.5cqi 0 0;
  font-family: var(--font-display);
  font-size: 7.4cqi; line-height: 1;
  letter-spacing: .1em; text-transform: uppercase;
}
.bono-lema {
  margin: 2cqi 0 0;
  font-size: 1.85cqi; font-weight: 600;
  letter-spacing: .26em; text-transform: uppercase;
  white-space: nowrap;
}
.bono-campos {
  list-style: none; margin: auto 0 0; padding: 5cqi 0 0;
  display: grid; gap: 2.4cqi;
}
/* Cada campo: la etiqueta en versalita y la línea en blanco para escribir,
   como en el bono impreso. */
.bono-campos li {
  display: flex; align-items: baseline; gap: 1.6cqi;
  font-size: 2.1cqi; font-weight: 600;
  letter-spacing: .24em; text-transform: uppercase;
}
.bono-campos li::after {
  content: ""; flex: 1;
  border-bottom: 1px solid color-mix(in srgb, var(--color-ink) 55%, transparent);
  transform: translateY(-.3em);
}
.bono-validez {
  margin: 4cqi 0 0;
  font-size: 2.1cqi; font-weight: 600;
  letter-spacing: .24em; text-transform: uppercase;
}

/* Compacto (portada): dos campos, así que la tarjeta es más baja y las
   letras pueden ser un poco mayores sin llenarla. */
.bono--compacto { aspect-ratio: 16 / 9.4; }
.bono--compacto .bono-cara { padding-block: 7.5cqi 6.5cqi; }
.bono--compacto :is(.bono-campos li, .bono-validez) { font-size: 2.4cqi; }
.bono--compacto .bono-lema { font-size: 2.1cqi; }

/* ── La página: entrada ──────────────────────────────────────────────────
   La misma banda que la cabecera de las fichas (arena con la luz cálida
   centrada arriba y el filete de cobre debajo): el bono entra con la
   temperatura del catálogo. */
.bono-cabecera {
  background:
    radial-gradient(68% 78% at 50% 0%, color-mix(in srgb, var(--color-cobre-suave) 62%, transparent) 0%, transparent 72%),
    var(--tile-arena);
  border-bottom: 1px solid color-mix(in srgb, var(--color-cobre-tinta) 22%, transparent);
  padding-block: var(--space-16) var(--space-20);
  overflow: hidden; /* la sombra y el giro del bono no sacan scroll lateral */
}
.bono-cabecera-rejilla {
  display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: var(--space-16); align-items: center;
}
.bono-cabecera .eyebrow,
.bono-portada .eyebrow { color: var(--color-cobre-tinta); letter-spacing: .24em; }
.bono-titulo {
  font-family: var(--font-display); font-weight: 400;
  font-size: var(--text-5xl); line-height: 1.08;
  margin: var(--space-2) 0 var(--space-5); text-wrap: balance;
}
.bono-entradilla {
  font-size: var(--text-lg); line-height: 1.7; color: var(--color-muted);
  max-width: 44ch; margin: 0 0 var(--space-8);
}
.bono-acciones { display: flex; align-items: center; gap: var(--space-3) var(--space-5); flex-wrap: wrap; }
.bono-acciones-nota { font-size: var(--text-sm); color: var(--color-muted); }
.bono-cabecera-media { padding: var(--space-6); }

@media (max-width: 859px) {
  .bono-cabecera-rejilla { grid-template-columns: 1fr; gap: var(--space-12); }
  .bono-cabecera-media { max-width: 460px; width: 100%; margin-inline: auto; padding: var(--space-2); }
  .bono-titulo { font-size: var(--text-4xl); }
}

/* ── La página: cómo funciona y qué se puede regalar ──────────────────── */
/* Los pasos usan .modo-shunku tal cual (lino con la luz arriba). Lo que
   viene detrás es arena, para que dos claros seguidos no sean el mismo. */
.bono-que {
  --hilo: color-mix(in srgb, var(--color-cobre-tinta) 22%, var(--tile-arena));
  background: var(--tile-arena);
}
.bono-que .modo-shunku-cabecera { margin-bottom: var(--space-12); }
.bono-que-texto { margin: 0 auto; max-width: 52ch; color: var(--color-muted); line-height: 1.7; }
/* Cinco categorías: cinco columnas donde caben, y si no, dos (la quinta
   ocupa la fila entera, como el remate del mosaico). */
@media (min-width: 700px) {
  .bono-celdas { grid-template-columns: repeat(2, 1fr); }
  .bono-celdas > .mosaico-celda:last-child:nth-child(odd) { grid-column: 1 / -1; }
}
@media (min-width: 1100px) {
  .bono-celdas { grid-template-columns: none; grid-auto-flow: column; grid-auto-columns: minmax(0, 1fr); }
  .bono-celdas > .mosaico-celda:last-child:nth-child(odd) { grid-column: auto; }
}

/* ── La banda de la portada ──────────────────────────────────────────────
   Corta y en arena, entre el último grupo del mosaico (claro) y la banda
   espresso de Mirna. El bono es el único metal: la banda no compite con la
   de la miel, que es la que tiene que brillar más en la portada. */
.bono-portada {
  background:
    radial-gradient(60% 90% at 30% 50%, color-mix(in srgb, var(--color-cobre-suave) 70%, transparent) 0%, transparent 70%),
    var(--tile-arena);
  border-top: 1px solid color-mix(in srgb, var(--color-cobre-tinta) 18%, transparent);
  padding-block: var(--space-16);
  overflow: hidden;
}
.bono-portada-rejilla {
  display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 6fr);
  gap: var(--space-16); align-items: center;
}
.bono-portada-media { max-width: 440px; width: 100%; justify-self: end; padding: var(--space-4); }
.bono-portada-titulo {
  font-family: var(--font-display); font-weight: 400;
  font-size: var(--text-4xl); line-height: 1.1;
  margin: var(--space-2) 0 var(--space-4);
}
.bono-portada-texto-p { margin: 0 0 var(--space-6); max-width: 40ch; color: var(--color-muted); line-height: 1.7; }

@media (max-width: 859px) {
  .bono-portada-rejilla { grid-template-columns: 1fr; gap: var(--space-10); }
  .bono-portada-media { justify-self: center; max-width: 380px; }
  .bono-portada-titulo { font-size: var(--text-3xl); }
}

/* Un bono estrecho (móvil, unos 330 px): a ese ancho el lema y los campos en
   cqi bajaban a 6 px y se leían como textura, no como letras. Se quita el
   lema —es la línea más larga y la que menos dice— y lo demás sube a un
   tamaño que se lee. */
@container (max-width: 420px) {
  .bono-lema { display: none; }
  .bono-campos { padding-top: 4cqi; gap: 3cqi; }
  /* .bono delante: pesa lo mismo que la regla del compacto y va después,
     así que también manda en la banda de la portada. */
  .bono :is(.bono-campos li, .bono-validez) { font-size: 2.9cqi; letter-spacing: .18em; }
  .bono-marca-firma { font-size: 2.9cqi; }
}

/* La barra con cuatro entradas (Bonos regalo, 2026-10-02). La cabecera es
   una rejilla 1fr · auto · 1fr: si el menú del centro crece, las columnas de
   los lados encogen y parten en dos líneas el nombre y "Pedir cita". Con
   tres entradas había 89 px de margen a 861 px; con cuatro faltaban unos 60.
   Entre 861 y 1099 px se aprieta el menú —separación y tracking— en vez de
   subir el corte de la hamburguesa: un menú de cuatro palabras cabe, y
   esconderlo en una tableta apaisada sería tapar el síntoma. Medido en la
   web real con la cuarta entrada puesta: a 861 px, marca hasta 195, menú
   219–642, botón desde 708. Por encima de 1099 no cambia nada. */
@media (min-width: 861px) and (max-width: 1099px) {
  .header .container { column-gap: var(--space-5); }
  .header .nav-list { gap: var(--space-5); }
  .header .nav-list a { letter-spacing: .1em; }
  .header .logo-text, .header .header-cta { white-space: nowrap; }
  .header .btn { padding-inline: 18px; }
}

/* ── Rótulos con filete que van en dos o más líneas (2026-10-12) ──────────
   Con el H1 en el antetítulo (1.4.0) los rótulos se alargaron ("Mirna Gil,
   masajista de Shunku by Rox en Vitoria-Gasteiz") y empezaron a partirse.
   Alineados a la izquierda, el filete se quedaba centrado entre las líneas,
   flotando: ahora va a la altura de la primera, como una sangría, y el
   texto que sigue cuelga alineado debajo. Centrados, los filetes de los dos
   lados robaban ancho (a 320 px el del hub iba en cuatro líneas) y quedaban
   sueltos a media altura: se quitan en móvil a los H1, que son los largos,
   y por debajo de 361 px a todos, que es donde se parten también los cortos.
   Mismo criterio que la firma del manifiesto (más arriba, ≤620 px). Los
   rótulos de una línea no cambian: 1lh es su propio alto. */
.sobre-nosotros--shunku .eyebrow,
.contacto--mapa-ancho .eyebrow,
.miel-etiqueta { align-items: flex-start; }
.sobre-nosotros--shunku .eyebrow::before,
.contacto--mapa-ancho .eyebrow::before,
.miel-etiqueta::before { margin-top: calc(.5lh - .5px); }
@media (max-width: 620px) {
  .mosaico-intro h1.eyebrow::before, .mosaico-intro h1.eyebrow::after,
  h1.hero-shunku-marca::before, h1.hero-shunku-marca::after { display: none; }
}
@media (max-width: 360px) {
  .mosaico-intro .eyebrow::before, .mosaico-intro .eyebrow::after,
  .modo-shunku-cabecera .eyebrow::before, .modo-shunku-cabecera .eyebrow::after { display: none; }
}
