/*
Theme Name: Krahl
Theme URI: https://krahlconsulting.com/
Author: Krahl & Partner Consulting SL
Author URI: https://krahlconsulting.com/
Description: Tema clásico trilingüe (DE/EN/ES) para Krahl & Partner Consulting SL. Paleta marino+turquesa de la propuesta ganadora «fiel-referencia» (porstmann.net). Un solo primitivo de composición (el registro), cero JavaScript de terceros, cero peticiones externas, tipografía autoalojada. Accesibilidad AA verificada por cálculo de contraste, no estimada.
Version: 1.0.0
Requires at least: 6.4
Tested up to: 6.8
Requires PHP: 8.0
License: GNU General Public License v2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: krahl
Tags: accessibility-ready, translation-ready, custom-menu, threaded-comments
*/

/* ============================================================================
   REDISEÑO DE INTERIORES (30-sep-2026, rama `rediseno-interiores`)
   ============================================================================
   Lleva /ueber-mich/, /leistungen/ y /kontakt/ (y sus versiones EN/ES) al
   diseño de las maquetas de la serie B: b2 (Über mich), b3 (Leistungen) y b4
   (Kontakt). Antes solo el héroe de portada estaba en esa estética.

   SOLO CAMBIA LA PRESENTACIÓN. Los textos siguen saliendo de `the_content()` y
   de las mismas cadenas gettext, en el mismo orden (comprobado con
   `_scratch/rediseno/comparar.mjs`, antes/después, línea a línea). Todo lo
   que se añade es imagen o adorno CSS sin texto: el sello, las numeraciones
   01/02/03 (`counter()`), los filetes y las galerías. Las secciones de las
   maquetas que solo tienen texto que NO es de Sascha (la ficha «Kurzprofil», el
   recuadro «Diskretion», los cinco pasos, el mapa, las citas, los pies de las
   galerías) se OMITEN por decisión de Ángel.

   Las secciones del contenido (`.k-seccion`) llenan el ancho de la pantalla y
   llevan su propio fondo; el contenido se acota a la misma columna que la
   cabecera con `--mq-x` (ver :root, junto al pie). Por eso el envoltorio es
   `.mq__cuerpo` y no `.contenido`: las reglas de `.contenido` (columna de 640px)
   no se aplican aquí y las de abajo no dependen de ellas.
   ========================================================================= */
.mq{background:var(--mq-papel);overflow-x:clip}
.mq-ojo{
  display:flex;align-items:center;gap:.875rem;margin:0 0 var(--sp-5);
  font-family:var(--ff-sans-display);font-weight:600;font-size:.75rem;line-height:1.4;
  letter-spacing:.2em;text-transform:uppercase;color:var(--k-tuerkis-700);
}
.mq-ojo::before{content:"";flex:none;width:1.75rem;height:2px;background:var(--mq-tur)}

/* --- Cabecera clara (Über mich, Leistungen) ------------------------------- */
.mq-cab{padding-block:clamp(2.5rem,6vw,5rem) clamp(1.5rem,3vw,2.5rem);background:var(--mq-papel)}
.mq-cab h1{
  margin:0;max-width:16ch;text-wrap:balance;
  font-family:var(--ff-serif);font-weight:500;color:var(--k-marine-900);
  font-size:clamp(2.5rem,1.6rem + 4.2vw,4.75rem);line-height:1.04;letter-spacing:-.02em;
}
.mq-cab__persona{
  margin-top:var(--sp-6);max-width:28ch;
  font-family:var(--ff-serif);font-style:italic;font-weight:400;
  font-size:clamp(1.25rem,1rem + 1.2vw,1.75rem);line-height:1.4;color:var(--k-tuerkis-700);
}
.mq-cab__foto{
  margin-top:clamp(2rem,4vw,3.5rem);overflow:hidden;aspect-ratio:2.6/1;
  border-radius:0 clamp(3rem,9vw,7.5rem) 0 clamp(3rem,9vw,7.5rem);
  box-shadow:0 30px 60px -28px rgba(0,36,62,.38);background:var(--k-nieve);
}
.mq-cab__foto img{width:100%;height:100%;object-fit:cover;object-position:50% 50%;display:block}
@media (max-width:640px){.mq-cab__foto{aspect-ratio:4/3}}

/* --- Secciones del contenido ---------------------------------------------- */
.mq__cuerpo > .k-seccion{
  position:relative;background:var(--k-blanco);
  padding:var(--mq-y) var(--mq-x);
}
.mq .k-seccion h2{
  margin:0 0 var(--sp-8);max-width:20ch;text-wrap:balance;
  font-family:var(--ff-serif);font-weight:500;color:var(--k-marine-900);
  font-size:clamp(1.75rem,1.25rem + 1.9vw,2.75rem);line-height:1.12;letter-spacing:-.012em;
}
.mq .k-seccion h2::before{
  content:"";display:block;width:2.25rem;height:2px;background:var(--mq-tur);margin-bottom:var(--sp-5);
}
.mq .k-seccion h3{
  margin:0 0 .5em;max-width:none;
  font-family:var(--ff-serif);font-weight:500;color:var(--k-marine-900);
  font-size:clamp(1.25rem,1.1rem + .6vw,1.625rem);line-height:1.25;letter-spacing:-.008em;
}
.mq .k-seccion p{max-width:62ch;color:var(--k-tinta-70);line-height:1.7}
.mq .k-seccion p + p{margin-top:1.1em}
.mq .k-seccion a:not(.btn){text-decoration:underline;text-underline-offset:.18em;text-decoration-thickness:.08em}
.mq .k-seccion ul,.mq .k-seccion ol{list-style:none;margin:0;padding:0}
.mq .k-seccion a[href^="mailto:"]{hyphens:none;overflow-wrap:anywhere}

/* Dos columnas: titular a la izquierda, el resto a la derecha */
@media (min-width:900px){
  .mq .k-split,
  .mq--leistungen .k-intro,
  .mq--leistungen .k-zusammenarbeit,
  .mq--ueber-mich .k-zahlen,
  .mq--ueber-mich .k-branchen,
  .mq--ueber-mich .k-warengruppen,
  .mq--kontakt .k-erstgespraech{
    display:grid;grid-template-columns:minmax(0,5fr) minmax(0,7fr);column-gap:clamp(2rem,6vw,5.5rem);align-items:start;
  }
  .mq .k-split > h2,
  .mq--leistungen .k-intro > h2,
  .mq--leistungen .k-zusammenarbeit > h2,
  .mq--ueber-mich .k-zahlen > h2,
  .mq--ueber-mich .k-branchen > h2,
  .mq--ueber-mich .k-warengruppen > h2,
  .mq--kontakt .k-erstgespraech > h2{grid-column:1;grid-row:1;margin-bottom:0}
  .mq--leistungen .k-intro > :not(h2),
  .mq--leistungen .k-zusammenarbeit > :not(h2),
  .mq--ueber-mich .k-zahlen > :not(h2),
  .mq--ueber-mich .k-branchen > :not(h2),
  .mq--ueber-mich .k-warengruppen > :not(h2),
  .mq--kontakt .k-erstgespraech > :not(h2){grid-column:2}
}

/* --- ÜBER MICH -------------------------------------------------------------- */
.mq--ueber-mich .k-intro{
  background:var(--mq-papel);padding-top:clamp(1.5rem,3vw,2.5rem);
  display:grid;grid-template-columns:minmax(0,1fr);gap:var(--sp-8);
}
.mq--ueber-mich .k-intro p{font-size:1.125rem;color:var(--k-tinta);max-width:none}
.mq--ueber-mich .k-intro p:first-of-type{font-size:1.25rem;line-height:1.6}
@media (min-width:900px){
  .mq--ueber-mich .k-intro{
    grid-template-columns:minmax(0,22rem) minmax(0,1fr);grid-template-rows:auto auto auto 1fr;
    column-gap:clamp(3rem,7vw,6.5rem);row-gap:0;align-items:start;
  }
  .mq--ueber-mich .k-intro > p{grid-column:2;max-width:38rem}
  .mq--ueber-mich .k-intro > .mq-arco{grid-column:1;grid-row:1 / -1}
}

/* Retrato en arco con sello redondo */
.mq-arco{position:relative;margin:0;width:min(100%,22rem)}
.mq-arco::before{
  content:"";position:absolute;top:-14px;right:-14px;left:14px;bottom:14px;z-index:0;
  border:1px solid rgba(11,165,165,.55);border-radius:999px 999px 6px 6px;
}
.mq-arco__marco{
  position:relative;z-index:1;aspect-ratio:4/5.2;overflow:hidden;background:#dfe3e6;
  border-radius:999px 999px 6px 6px;box-shadow:0 40px 60px -30px rgba(0,36,62,.45);
}
.mq-arco__marco img{width:100%;height:100%;object-fit:cover;object-position:50% 14%;display:block}
.mq-sello{
  position:absolute;left:-.5rem;bottom:2.25rem;z-index:2;width:7rem;height:7rem;border-radius:50%;
  background:var(--k-blanco);border:1px solid rgba(11,165,165,.35);box-shadow:0 14px 30px rgba(0,36,62,.18);
}
.mq-sello::before{
  content:"&";position:absolute;inset:0;display:grid;place-items:center;padding-bottom:.25rem;
  font-family:var(--ff-serif);font-style:italic;font-weight:500;font-size:2.875rem;line-height:1;color:var(--mq-tur);
}
.mq-sello::after{
  content:"";position:absolute;inset:.5rem;border-radius:50%;
  background:repeating-conic-gradient(from 0deg,var(--mq-tur) 0 1.5deg,transparent 1.5deg 7.5deg);
  -webkit-mask:radial-gradient(farthest-side,transparent calc(100% - 6px),#000 calc(100% - 5px));
  mask:radial-gradient(farthest-side,transparent calc(100% - 6px),#000 calc(100% - 5px));
}
.mq-arco--sin-sello::before{display:none}
@media (min-width:900px){.mq-sello{left:-1.25rem}}

/* Key Facts: tres bloques numerados */
.mq--ueber-mich .k-keyfacts__grid{
  display:grid;grid-template-columns:minmax(0,1fr);gap:clamp(2rem,4vw,3rem) clamp(1.5rem,3vw,2.5rem);
  margin-top:var(--sp-8);counter-reset:mq-k;
}
@media (min-width:760px){.mq--ueber-mich .k-keyfacts__grid{grid-template-columns:repeat(3,minmax(0,1fr))}}
.mq--ueber-mich .k-keyfacts__karte{
  counter-increment:mq-k;padding:var(--sp-5) 0 0;background:none;border-top:2px solid var(--k-marine-900);
}
.mq--ueber-mich .k-keyfacts__karte::before{
  content:counter(mq-k,decimal-leading-zero);display:block;margin-bottom:var(--sp-2);
  font-family:var(--ff-serif);font-style:italic;font-weight:400;font-size:2rem;line-height:1;color:var(--mq-tur);
}
.mq--ueber-mich .k-keyfacts__karte p{font-size:.975rem}

/* Ausbildung & Qualifikationen: el recuadro azul */
.mq--ueber-mich .k-zahlen{background:var(--k-marine-900)}
.mq--ueber-mich .k-zahlen h2{color:var(--k-blanco)}
.mq--ueber-mich .k-zahlen h2::before,
.mq--leistungen .k-ablauf h2::before,
.mq--leistungen .k-cierre h2::before{background:var(--mq-tur-claro)}
.mq--ueber-mich .k-zahlen li{color:rgba(255,255,255,.86)}
.mq--ueber-mich .k-zahlen li::before{color:var(--mq-tur-claro)}
.mq--ueber-mich .k-zahlen .k-lista-2col{columns:1}
@media (min-width:1100px){.mq--ueber-mich .k-zahlen .k-lista-2col{columns:2;column-gap:var(--sp-8)}}
.mq--ueber-mich .k-lista-2col li{padding-bottom:.85em}

/* Branchen: píldoras de contorno */
.mq--ueber-mich .k-chips{display:flex;flex-wrap:wrap;gap:.625rem;margin:0}
.mq--ueber-mich .k-chips li{
  margin:0;padding:.5em 1.1em;background:transparent;border:1px solid rgba(0,47,90,.3);border-radius:999px;
  font-family:var(--ff-sans-display);font-weight:600;font-size:.875rem;line-height:1.3;color:var(--k-marine-900);
}

/* Schwerpunkte: foto en arco a la izquierda, lista a la derecha */
.mq--ueber-mich .k-schwerpunkte{background:var(--mq-arena)}
@media (min-width:900px){
  .mq--ueber-mich .k-schwerpunkte{
    display:grid;grid-template-columns:minmax(0,22rem) minmax(0,1fr);grid-template-rows:auto 1fr;
    column-gap:clamp(3rem,7vw,6.5rem);align-items:start;
  }
  .mq--ueber-mich .k-schwerpunkte > .mq-arco{grid-column:1;grid-row:1 / -1}
  .mq--ueber-mich .k-schwerpunkte > h2{grid-column:2;grid-row:1}
  .mq--ueber-mich .k-schwerpunkte > ul{grid-column:2;grid-row:2}
}
.mq--ueber-mich .k-schwerpunkte .mq-arco{margin-bottom:var(--sp-8)}
@media (min-width:900px){.mq--ueber-mich .k-schwerpunkte .mq-arco{margin-bottom:0}}
.mq--ueber-mich .k-schwerpunkte .k-lista-2col{columns:1}
.mq--ueber-mich .k-schwerpunkte li{color:var(--k-tinta);padding-bottom:1em;line-height:1.6}

.mq--ueber-mich .k-warengruppen p{max-width:none;color:var(--k-tinta-70)}

/* Stationen: la tabla sobre papel */
.mq--ueber-mich .k-stationen{background:var(--mq-papel)}
.mq--ueber-mich .k-tabla-stationen tbody tr:nth-child(even){background:rgba(255,255,255,.7)}
.mq--ueber-mich .k-tabla-stationen{font-size:.9375rem}
.mq--ueber-mich .k-tabla-stationen th,.mq--ueber-mich .k-tabla-stationen td{color:var(--k-tinta)}
.mq--ueber-mich .k-tabla-stationen thead th{color:var(--k-blanco)}
.mq--ueber-mich .k-tabla-stationen td.k-tabla-vol{color:var(--k-marine-900)}
@media (max-width:699px){
  .mq--ueber-mich .k-tabla-stationen tbody tr{display:block;background:var(--k-blanco);margin-top:var(--sp-4);padding:var(--sp-4);border-top:2px solid var(--k-marine-900)}
  .mq--ueber-mich .k-tabla-stationen tbody tr:nth-child(even){background:var(--k-blanco)}
}

/* --- LEISTUNGEN -------------------------------------------------------------- */
.mq--leistungen .k-intro{padding-bottom:calc(var(--mq-y) * .55)}
.mq--leistungen .k-intro > p{color:var(--k-tinta-70);font-size:1.125rem}
.mq--leistungen .k-citable{padding-block:0 var(--mq-y)}
.mq--leistungen .k-citable p{
  max-width:none;padding:clamp(1.75rem,3vw,2.5rem) clamp(1.5rem,4vw,3rem);
  background:var(--k-marine-900);color:var(--k-pie-texto);border-top:2px solid var(--mq-tur);border-radius:2px;
  font-size:1.0625rem;line-height:1.7;
}
.mq--leistungen .k-bloque{counter-increment:mq-b;border-top:1px solid var(--k-borde-suave);padding-block:clamp(2.5rem,5vw,4.5rem)}
.mq__cuerpo{counter-reset:mq-b}
.mq--leistungen .k-bloque h2::before{
  content:counter(mq-b,decimal-leading-zero);width:auto;height:auto;background:none;margin-bottom:var(--sp-3);
  font-family:var(--ff-serif);font-style:italic;font-weight:400;font-size:2rem;line-height:1;color:var(--mq-tur);
}
.mq--leistungen .k-bloque h3{
  margin:0 0 var(--sp-3);font-family:var(--ff-sans-display);font-weight:600;font-size:.75rem;line-height:1.4;
  letter-spacing:.18em;text-transform:uppercase;color:var(--k-tuerkis-700);
}
.mq--leistungen .k-bloque h3:not(:first-of-type){margin-top:var(--sp-8)}
@media (min-width:900px){
  .mq--leistungen .k-bloque{
    display:grid;grid-template-columns:minmax(0,5fr) minmax(0,7fr);column-gap:clamp(2rem,6vw,5.5rem);align-items:start;
  }
  .mq--leistungen .k-bloque > h2{grid-column:1;grid-row:1 / span 6;margin-bottom:0}
  .mq--leistungen .k-bloque > :not(h2){grid-column:2}
}
.mq--leistungen .k-zusammenarbeit{background:var(--mq-arena)}
.mq--leistungen .k-zusammenarbeit p{font-size:1.125rem}

/* Banda azul del proceso */
.mq--leistungen .k-ablauf{background:linear-gradient(135deg,#002F5A 0%,#00234A 100%);color:var(--k-blanco)}
.mq--leistungen .k-ablauf h2{color:var(--k-blanco)}
.mq--leistungen .k-ablauf ol{display:grid;gap:var(--sp-8) clamp(1.5rem,4vw,3rem);counter-reset:mq-a}
@media (min-width:700px){.mq--leistungen .k-ablauf ol{grid-template-columns:repeat(2,minmax(0,1fr))}}
.mq--leistungen .k-ablauf li{counter-increment:mq-a;color:rgba(255,255,255,.78);line-height:1.65;max-width:34rem}
.mq--leistungen .k-ablauf li::before{
  content:counter(mq-a,decimal-leading-zero);display:block;margin-bottom:var(--sp-3);
  font-family:var(--ff-serif);font-style:italic;font-weight:400;font-size:2.25rem;line-height:1;color:var(--mq-tur-claro);
}
.mq--leistungen .k-ablauf li strong{display:block;color:var(--k-blanco);font-weight:600;margin-bottom:.15em}
.mq--leistungen .k-ablauf li i{font-style:normal;font-weight:400;color:rgba(255,255,255,.78)}

/* Preguntas frecuentes sobre banda beige */
.mq--leistungen .k-faq{background:var(--mq-arena)}
.mq--leistungen .k-faq h2{max-width:none}
@media (min-width:900px){
  .mq--leistungen .k-faq{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,7fr);column-gap:clamp(2rem,6vw,5.5rem);align-items:start}
  .mq--leistungen .k-faq > h2{grid-column:1 / -1}
  .mq--leistungen .k-faq > h3{grid-column:1}
  .mq--leistungen .k-faq > p{grid-column:2}
}
.mq--leistungen .k-faq h3{
  margin:0;padding-top:var(--sp-6);border-top:1px solid rgba(0,47,90,.22);
  font-size:clamp(1.25rem,1.1rem + .6vw,1.5rem);line-height:1.3;
}
.mq--leistungen .k-faq h3 + p{padding-block:var(--sp-3) var(--sp-8);margin-top:0}
@media (min-width:900px){.mq--leistungen .k-faq h3 + p{padding-top:var(--sp-6)}}

/* Llamada final sobre fondo oscuro */
.mq--leistungen .k-cierre{background:var(--mq-noche);text-align:center}
.mq--leistungen .k-cierre h2{color:var(--k-blanco);margin-inline:auto;max-width:22ch}
.mq--leistungen .k-cierre h2::before{margin-inline:auto}
.mq--leistungen .k-cierre p{margin-inline:auto;color:var(--k-pie-texto)}
.mq--leistungen .k-cierre .k-acciones{margin-top:var(--sp-8);display:flex;justify-content:center}
.mq .btn--acento{background:var(--k-tuerkis-700);color:var(--k-blanco)}
.mq--leistungen .k-cierre .btn--acento{
  background:var(--mq-tur);color:#00243E;border-radius:2px;
  font-family:var(--ff-sans-display);font-weight:600;
}
.mq--leistungen .k-cierre .btn--acento:hover{background:var(--mq-tur-claro);color:#00243E}

/* --- KONTAKT ----------------------------------------------------------------- */
.mq--kontakt{background:var(--k-blanco)}
.mq--kontakt .pagina-hero{
  --pagina-hero-corte:clamp(28px,5vw,64px);
  padding-block:clamp(4.5rem,11vw,8.5rem) clamp(4.5rem,9vw,7rem);
}
.mq--kontakt .pagina-hero .reg{display:block}
.mq--kontakt .pagina-hero h1{font-size:clamp(2.75rem,2rem + 4vw,4.5rem);max-width:14ch}
.mq--kontakt .pagina-hero__datum{font-family:var(--ff-sans-display);font-weight:600;letter-spacing:.2em;font-size:.75rem}
.mq--kontakt .k-intro{
  display:grid;grid-template-columns:minmax(0,1fr);gap:var(--sp-8);
  padding-top:clamp(3rem,6vw,5rem);
}
.mq--kontakt .k-intro > p:not(.k-correo){font-size:1.125rem;color:var(--k-tinta-70);max-width:40rem}
.mq--kontakt .k-correo{margin-top:var(--sp-6)}
.mq--kontakt .k-correo a{
  display:inline-block;padding-block:.25rem;
  font-family:var(--ff-serif);font-weight:500;font-size:clamp(1.5rem,1.1rem + 1.6vw,2.125rem);line-height:1.2;
  color:var(--k-marine-900);text-decoration-color:var(--mq-tur);
}
.mq--kontakt .k-correo a:hover{color:var(--k-tuerkis-700)}
@media (max-width:899px){.mq--kontakt .k-intro > .mq-tarjeta-foto{order:2;max-width:22rem}}
@media (min-width:900px){
  .mq--kontakt .k-intro{
    grid-template-columns:minmax(0,7fr) minmax(0,5fr);grid-template-rows:auto auto 1fr;
    column-gap:clamp(3rem,7vw,6rem);row-gap:0;align-items:start;
  }
  .mq--kontakt .k-intro > p{grid-column:1}
  .mq--kontakt .k-intro > .mq-tarjeta-foto{grid-column:2;grid-row:1 / -1}
}
.mq-tarjeta-foto{
  margin:0;overflow:hidden;aspect-ratio:4/4.6;border-radius:2px;background:var(--k-nieve);
  box-shadow:0 30px 60px -30px rgba(0,36,62,.42);max-width:26rem;
}
.mq-tarjeta-foto img{width:100%;height:100%;object-fit:cover;object-position:50% 12%;display:block}
.mq--kontakt .k-erstgespraech{background:var(--mq-arena)}
.mq--kontakt .k-erstgespraech p{font-size:1.125rem}

/* Anschrift: bloque de contacto directo con tarjeta de foto a la derecha */
.mq--kontakt .k-anschrift{display:grid;grid-template-columns:minmax(0,1fr);gap:0}
.mq--kontakt .k-anschrift p{color:var(--k-tinta);font-size:1.0625rem}
.mq--kontakt .k-anschrift a:not(.btn){color:var(--k-marine-900);font-weight:600}
.mq--kontakt .k-anschrift::after{
  content:"";display:block;min-height:15rem;margin-top:var(--sp-10);
  border-radius:0 clamp(3rem,8vw,6rem) 0 clamp(3rem,8vw,6rem);
  background:linear-gradient(rgba(0,47,90,.18),rgba(0,47,90,.18)),url("assets/img/leistungen-sala-reunion-1400.jpg") center/cover no-repeat;
  box-shadow:0 30px 60px -30px rgba(0,36,62,.38);
}
@media (min-width:900px){
  .mq--kontakt .k-anschrift{
    grid-template-columns:minmax(0,5fr) minmax(0,7fr);grid-template-rows:auto auto auto auto 1fr;
    column-gap:clamp(2rem,6vw,5.5rem);align-items:start;
  }
  .mq--kontakt .k-anschrift > *{grid-column:1}
  .mq--kontakt .k-anschrift::after{grid-column:2;grid-row:1 / -1;margin-top:0;min-height:22rem;height:100%}
}
.mq__form{padding:0 0 var(--mq-y);background:var(--k-blanco)}

/* --- Páginas legales (Impressum, Datenschutz y sus versiones EN/ES) ------------
   Columna de lectura amplia como el resto de páginas rediseñadas: el contenedor
   de 1200px (1104px de texto) sin la columna de rótulo de 200px del registro y
   sin el tope de 640px de `.contenido`. Los párrafos se topan a 90ch para que
   la línea no pase de lo razonable; las tablas (cookies) usan el ancho entero. */
.entrada--legal .reg{display:block}
.entrada--legal .contenido{max-width:none}
.entrada--legal .contenido p,
.entrada--legal .contenido li,
.entrada--legal .contenido dd{max-width:90ch}
.entrada--legal .contenido h2,
.entrada--legal .contenido h3{max-width:none}

/* --- Banda oscura con tres fotos (galería de b2, b3 y b4) --------------------- */
.mq-galeria{position:relative;overflow:hidden;overflow:clip;background:var(--mq-noche);padding-block:clamp(3rem,6vw,5rem)}
.mq-galeria::before{
  content:"&";position:absolute;left:-1.5rem;top:-4.5rem;
  font-family:var(--ff-serif);font-style:italic;font-weight:400;font-size:clamp(12rem,24vw,20rem);line-height:1;
  color:rgba(47,196,190,.06);pointer-events:none;
}
.mq-galeria__fila{position:relative;display:grid;gap:14px;grid-template-columns:minmax(0,1fr)}
.mq-galeria__foto{margin:0;overflow:hidden;position:relative;border-radius:2px;height:13rem;background:#00121F}
.mq-galeria__foto img{width:100%;height:100%;object-fit:cover;display:block;filter:saturate(.85) brightness(.88)}
.mq-galeria__foto::after{content:"";position:absolute;inset:0;background:linear-gradient(to top,rgba(0,27,48,.55),transparent 55%)}
@media (min-width:760px){
  .mq-galeria__fila{grid-template-columns:minmax(0,3fr) minmax(0,1.25fr) minmax(0,1.25fr);height:clamp(18rem,34vw,27.5rem)}
  .mq-galeria__foto{height:auto}
  .mq-galeria__foto--2{border-radius:999px 999px 2px 2px}
}

/* --- Cierre con foto de fondo (todas las páginas salvo la portada) -------------- */
.sec--foto{position:relative;isolation:isolate;overflow:hidden;overflow:clip;background:var(--mq-noche);color:var(--k-blanco);padding-block:clamp(4rem,9vw,7rem)}
.sec__foto,.sec__foto img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center}
.sec__foto{z-index:-2}
.sec__capa{position:absolute;inset:0;z-index:-1;background:linear-gradient(180deg,rgba(0,27,48,.9),rgba(0,36,68,.84))}
.sec--foto .reg{display:block;text-align:center}
.sec--foto .reg__rot{
  display:block;margin:0 0 var(--sp-4);padding:0;
  font-family:var(--ff-sans-display);font-weight:600;font-size:.75rem;letter-spacing:.2em;color:var(--mq-tur-claro);
}
.sec--foto .reg__rot::before{display:none}
.sec--foto .gespraech{
  max-width:44rem;margin-inline:auto;padding:0;background:none;border:0;border-radius:0;clip-path:none;
}
.sec--foto .gespraech h2{color:var(--k-blanco);max-width:none;margin-inline:auto}
.sec--foto .gespraech .prosa{margin-inline:auto;color:var(--k-pie-texto)}
.sec--foto .gespraech__acc{justify-content:center}
.sec--foto .btn--acento{
  background:var(--mq-tur);color:#00243E;border-radius:2px;font-family:var(--ff-sans-display);
}
.sec--foto .btn--acento:hover{background:var(--mq-tur-claro);color:#00243E}
.sec--foto .correo,.sec--foto .enl{color:var(--mq-tur-claro)}
.sec--foto a:focus-visible{outline-color:var(--k-blanco);box-shadow:0 0 0 2px var(--mq-noche)}

@media print{
  .mq-galeria,.sec__foto,.sec__capa,.pie::after,.mq-sello,.pie__socios{display:none !important}
  .mq__cuerpo > .k-seccion{padding:.6rem 0}
}

/* ============================================================================
   KRAHL & PARTNER CONSULTING · SISTEMA DE DISEÑO
   ============================================================================

   PALETA — MARINO + TURQUESA, corregida el 7-ago-2026 (CLAUDE.md del proyecto,
   REGLA 1). El cliente eligió porstmann.net y dijo «también tipo azul verde»:
   no era una preferencia abstracta de dos colores cualesquiera, era la pareja
   REAL de ese sitio (marino #002F5A + turquesa #009AA5, ver diseno/00-
   referencias.md §1.3). El brief anterior a ese análisis había fijado azul
   #0E5A8A + VERDE BOSQUE #136B4E, y esta hoja llegó a maquetarse con esa
   paleta equivocada. Se corrige aquí: marino literal de la referencia +
   turquesa oscurecido lo justo para cumplir AA (la referencia, #009AA5, da
   3,41:1 y suspende en sus siete usos medidos). Es la paleta de
   diseno/propuesta-fiel-referencia.html, la ganadora del concurso de diseño
   (80,8/100, 5 jueces — diseno/01-veredicto-final.md). CERO VERDE en todo el
   sistema: el cliente pidió «azul verde», no «azul y verde».

   UN SOLO PRIMITIVO DE COMPOSICIÓN: EL REGISTRO.
   Marca de cota (2 px) + rótulo en el margen + contenido que arranca en la
   línea de referencia (--datum). Se usa en el cuerpo y en el pie: todo el
   documento se acota desde la misma x. La página está ACOTADA, no decorada.

   ---------------------------------------------------------------------------
   CONTRASTES — calculados con la fórmula de luminancia relativa de WCAG 2.1
   (sRGB linealizado). Reproducibles con `_scratch/contraste-tema.py` (mismo
   script que auditaba la paleta anterior; los números de abajo son los que
   imprime HOY, con la paleta marino+turquesa).
   Umbrales: texto normal >= 4,5:1 · texto grande (>=24px, o >=18,66px en 600)
   >= 3:1 · componentes de interfaz y bordes con significado >= 3:1.

   TEXTO SOBRE LOS TRES FONDOS CLAROS
                       #FFFFFF  #F4F7F9  #EAF7F8
     #12212D tinta      16,39    15,24    14,95
     #46565F tinta-70    7,62     7,08     6,95
     #5A6B75 tinta-60    5,53     5,14     5,05
     #002F5A marine-900 13,51    12,56    12,33
     #00707A tuerkis-700 5,84     5,42     5,32
     #005A63 tuerkis-800 7,95     7,39     7,25
     #A4192B error       7,63     7,09     6,96

   RELLENOS — SC 1.4.11 exige medir el RELLENO contra la banda que lo sostiene,
   no solo el texto contra el relleno.
     relleno #00707A contra #FFFFFF 5,84 · #F4F7F9 5,42 · #EAF7F8 5,32
       -> pasa el 3:1 sobre las tres bandas, y el 4,5:1 de texto normal también
     texto #FFFFFF sobre #00707A = 5,84 · hover sobre #005A63 = 7,95
     contorno #00707A contra #FFFFFF = 5,84 · hover #005A63 = 7,95

   PIE Y BANDA OSCURA, fondo #002F5A (el mismo marine-900 de la estructura:
   fiel-referencia reutiliza un solo marino para las dos cosas)
     #FFFFFF 13,51 · #C7D8E4 pie-texto 9,25 · #8FE3E8 tuerkis-claro 9,21 ·
     #5FB3BA tuerkis-borde 5,56 (borde discontinuo, no-texto, >=3:1)
     PROHIBIDO sobre esta banda: #00707A directo como texto, da 2,32:1.

   ANILLO DE FOCO #002F5A con separador blanco de 2 px
     sobre #FFFFFF 13,51 · #F4F7F9 12,56 · #EAF7F8 12,33
     sobre el botón turquesa #00707A el anillo solo daría 2,32 y sobre el pie
     #002F5A daría 1,00: por eso el separador blanco es obligatorio, y por eso
     el pie invierte el anillo (blanco con separador #002F5A = 13,51).

   TARJETA DE CONVERSACIÓN (Gesprächskarte)
     blanco #FFFFFF sobre la banda #EAF7F8 = 1,08. La tarjeta NO se distingue
     por su fondo: la distingue el canto #00707A, que da 5,32 contra la banda.
     Sin ese canto la tarjeta no existe para nadie. No es adorno.

   DECORATIVO, NUNCA TEXTO NI PORTADOR DE INFORMACIÓN
     El propio #00707A (5,84 sobre blanco) se reutiliza para marcas de cota de
     2-3 px: no hace falta un tono aparte y así hay un solo hex «acción» en
     todo el sistema.
     #D3DCE3 borde-suave: decorativo, SOLO filetes; ninguna información
     depende de verlo.
     El borde de CONTROL (campos de formulario, que sí portan información) es
     #6E8291 —el mismo «--k-rand» de fiel-referencia—: 3,99 / 3,71 / 3,64
     sobre los tres fondos claros.

   ---------------------------------------------------------------------------
   MEDIDA DE LÍNEA — la disciplina, no solo el número.
   `ch` NO mide el ancho medio del carácter: mide el ancho del glifo «0», y se
   resuelve con la fuente del CONTENEDOR, no con la del párrafo. 68ch dio 85
   caracteres reales en la maqueta. Por eso el tope es doble:
       --medida: min(68ch, 40rem)
   40rem = 640 px son ~74 caracteres reales a 18 px en IBM Plex Sans.
   Si algún día entra una serifa, la medida se vuelve a MEDIR en navegador; no
   se supone.

   PROHIBIDO en este proyecto y ausente de esta hoja: Google Fonts, cualquier
   CDN, iframes, imágenes remotas, analítica de terceros, overlays de
   accesibilidad. En Alemania hay sentencia firme por cargar fuentes de Google
   (LG München I, 20-01-2022, Az. 3 O 17493/20).
   ========================================================================= */


/* --- TIPOGRAFÍA AUTOALOJADA -----------------------------------------------
   IBM Plex Sans + IBM Plex Mono · SIL Open Font License 1.1 (autoalojable y
   de uso comercial sin coste). Los ficheros van en assets/fonts/ del propio
   tema: ver assets/fonts/README.md para qué descargar y de dónde.

   El PRECARGADO NO SE DECLARA AQUÍ. Las etiquetas <link rel="preload"> reales
   de Regular 400 y SemiBold 600 se emiten desde inc/assets.php, en el <head>.
   Un comentario en el CSS que dijera «se precargan» sin que exista la etiqueta
   es exactamente la clase de afirmación falsa que este proyecto no admite.

   La familia de reserva es de sistema y aguanta sola: si los woff2 no están
   subidos, la página se lee igual y no se rompe ninguna medida.

   `unicode-range` corregido en la ronda 2 (8-ago-2026): el bloque de símbolos
   de moneda declaraba U+20A0-20AB, que llega hasta ₫ pero SE PARA justo
   antes de U+20AC, el signo EURO — el único que de verdad hace falta en una
   consultora española que factura en Alemania. Hoy no hay ningún € publicado
   (verificado con `curl` sobre las 18 páginas), así que el hueco no se veía,
   pero en cuanto alguien escriba un precio, ese carácter habría caído fuera
   de las cinco fuentes autoalojadas y se habría renderizado con la tipografía
   de sistema, mezclada con el resto del texto en IBM Plex. Ampliado a
   U+20A0-20CF: todo el bloque Unicode «Currency Symbols».
   ------------------------------------------------------------------------- */

@font-face{
  font-family:"IBM Plex Sans";
  src:url("assets/fonts/IBMPlexSans-Regular.woff2") format("woff2");
  font-weight:400;font-style:normal;font-display:swap;
  unicode-range:U+0000-00FF,U+0100-024F,U+2000-206F,U+20A0-20CF,U+2113,U+2C60-2C7F;
}
@font-face{
  font-family:"IBM Plex Sans";
  src:url("assets/fonts/IBMPlexSans-Italic.woff2") format("woff2");
  font-weight:400;font-style:italic;font-display:swap;
  unicode-range:U+0000-00FF,U+0100-024F,U+2000-206F,U+20A0-20CF,U+2113,U+2C60-2C7F;
}
@font-face{
  font-family:"IBM Plex Sans";
  src:url("assets/fonts/IBMPlexSans-Medium.woff2") format("woff2");
  font-weight:500;font-style:normal;font-display:swap;
  unicode-range:U+0000-00FF,U+0100-024F,U+2000-206F,U+20A0-20CF,U+2113,U+2C60-2C7F;
}
@font-face{
  font-family:"IBM Plex Sans";
  src:url("assets/fonts/IBMPlexSans-SemiBold.woff2") format("woff2");
  font-weight:600;font-style:normal;font-display:swap;
  unicode-range:U+0000-00FF,U+0100-024F,U+2000-206F,U+20A0-20CF,U+2113,U+2C60-2C7F;
}
@font-face{
  font-family:"IBM Plex Mono";
  src:url("assets/fonts/IBMPlexMono-Medium.woff2") format("woff2");
  font-weight:500;font-style:normal;font-display:swap;
  unicode-range:U+0000-00FF,U+0100-024F,U+2000-206F,U+20A0-20CF,U+2113,U+2C60-2C7F;
}

/* Newsreader + Archivo — reskin de la portada (§ TAREA-RESKIN-ESTETICA.md).
   Mismo trato que IBM Plex arriba: autoalojadas, SIL OFL 1.1, subconjunto
   latin + latin-ext con el MISMO unicode-range que el resto de la hoja (no
   dos convenciones de subconjunto conviviendo). De Newsreader, solo los tres
   cortes que de verdad consume el CSS de esta hoja:
     - Newsreader Medium (500) recta      → h1 del héroe, primera línea
     - Newsreader Medium (500) cursiva    → h1 del héroe, segunda línea (.h1__b)
     - Newsreader Regular (400) cursiva   → cinta de palabras bajo el héroe
   El rótulo superior del héroe (.hero__datum) se queda en IBM Plex Mono: es
   la «voz de la maquinaria» del sitio (.rot, ver más abajo) y ese papel no
   cambia porque el fondo del héroe ahora sea una foto — solo cambia de color
   para seguir siendo legible sobre ella.
   Archivo (Regular 400 + SemiBold 600) se autoaloja igual, PERO sin
   selector propio todavía en esta pasada: es la preparación explícita para
   el resto del reskin (nav, botones, secciones siguientes — §8 de la
   tarea), pedida en el encargo con independencia de si el héroe la usa hoy.
   `font-display:swap` en las cinco: si no cargan, el texto sigue en IBM Plex
   Sans (--ff-sans) o Georgia/serif de sistema, nunca invisible. */
@font-face{
  font-family:"Newsreader";
  src:url("assets/fonts/Newsreader-Medium.woff2") format("woff2");
  font-weight:500;font-style:normal;font-display:swap;
  unicode-range:U+0000-00FF,U+0100-024F,U+2000-206F,U+20A0-20CF,U+2113,U+2C60-2C7F;
}
@font-face{
  font-family:"Newsreader";
  src:url("assets/fonts/Newsreader-MediumItalic.woff2") format("woff2");
  font-weight:500;font-style:italic;font-display:swap;
  unicode-range:U+0000-00FF,U+0100-024F,U+2000-206F,U+20A0-20CF,U+2113,U+2C60-2C7F;
}
@font-face{
  font-family:"Newsreader";
  src:url("assets/fonts/Newsreader-Italic.woff2") format("woff2");
  font-weight:400;font-style:italic;font-display:swap;
  unicode-range:U+0000-00FF,U+0100-024F,U+2000-206F,U+20A0-20CF,U+2113,U+2C60-2C7F;
}
@font-face{
  font-family:"Archivo";
  src:url("assets/fonts/Archivo-Regular.woff2") format("woff2");
  font-weight:400;font-style:normal;font-display:swap;
  unicode-range:U+0000-00FF,U+0100-024F,U+2000-206F,U+20A0-20CF,U+2113,U+2C60-2C7F;
}
@font-face{
  font-family:"Archivo";
  src:url("assets/fonts/Archivo-SemiBold.woff2") format("woff2");
  font-weight:600;font-style:normal;font-display:swap;
  unicode-range:U+0000-00FF,U+0100-024F,U+2000-206F,U+20A0-20CF,U+2113,U+2C60-2C7F;
}


/* --- FICHAS DEL SISTEMA --------------------------------------------------- */
:root{
  /* Paleta obligatoria: marino + turquesa de fiel-referencia.html, literal.
     Ni un color fuera de esta lista salvo --k-error, que está justificado
     abajo y nunca porta significado por sí solo. DOS familias, no cuatro:
     marine-* es la ESTRUCTURA (títulos, marca, foco, banda oscura); tuerkis-*
     es la ACCIÓN (enlaces, botones, bordes de voz, decorativo). La paleta
     anterior tenía una familia «azul» Y una familia «verde» separadas para
     esos mismos dos papeles — el error que corrige esta hoja el 7-ago-2026. */
  --k-blanco:#FFFFFF;
  --k-nieve:#F4F7F9;
  --k-tuerkis-hell:#EAF7F8;    /* fondo de sección/bloque alterno, claro */
  --k-tinta:#12212D;
  --k-tinta-70:#46565F;
  --k-tinta-60:#5A6B75;

  --k-marine-900:#002F5A;      /* estructura — el marino literal de la referencia */
  --k-tuerkis-700:#00707A;     /* acción — turquesa corregido a AA (ref.: #009AA5 = 3,41, suspende) */
  --k-tuerkis-800:#005A63;     /* hover del turquesa */
  --k-tuerkis-claro:#8FE3E8;   /* turquesa legible SOLO sobre la banda oscura (texto) */
  --k-tuerkis-borde:#5FB3BA;   /* borde discontinuo decorativo sobre la banda oscura */

  --k-borde-control:#6E8291;   /* bordes que SÍ portan información (campos) — «--k-rand» de la referencia */
  --k-borde-suave:#D3DCE3;     /* filetes decorativos */
  --k-pie-texto:#C7D8E4;       /* texto general sobre la banda oscura */

  /* --k-error es el ÚNICO color fuera de la paleta base. Un estado de error
     que se señalara con el mismo turquesa que todo lo demás no se distingue de
     un estado normal. Nunca va solo: siempre lleva texto, aria-invalid y
     entrada en el resumen de errores (SC 1.4.1). Rojo ladrillo, no rojo de
     alarma, y no se confunde con ningún tono de la paleta de marca. */
  --k-error:#A4192B;
  --k-error-fondo:#FBEAEC;

  /* Líneas del pie: transparencias de --k-pie-texto, no colores nuevos. */
  --k-pie-linea:rgba(199,216,228,.22);
  --k-pie-linea-fuerte:rgba(199,216,228,.36);

  --ff-sans:"IBM Plex Sans",ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  --ff-mono:"IBM Plex Mono",ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,"Liberation Mono",monospace;
  /* Reskin de portada: titular del héroe. Reserva es Georgia/Times, que
     también son serifas — un titular que cae a la reserva sigue leyéndose
     como titular, no cambia de familia tipográfica en abstracto. */
  --ff-serif:"Newsreader",Georgia,"Times New Roman",serif;
  --ff-sans-display:"Archivo",var(--ff-sans);

  /* Escala de espaciado de base 4px. Una sola cifra base, sin excepciones. */
  --sp-1:.25rem; --sp-2:.5rem;  --sp-3:.75rem; --sp-4:1rem;
  --sp-5:1.25rem;--sp-6:1.5rem; --sp-8:2rem;   --sp-10:2.5rem;
  --sp-12:3rem;  --sp-16:4rem;  --sp-24:6rem;  --sp-32:8rem;

  --ancho:1200px;
  --margen:clamp(1.25rem,5vw,3rem);
  --datum:12.5rem;            /* la línea de referencia: 200 px */
  --ritmo:clamp(3.5rem,8vw,7rem);

  /* Medida de línea. Ver la nota de arriba: el tope en rem es el que manda. */
  --medida:min(68ch,40rem);
  --medida-corta:min(52ch,32rem);

  --radio:4px;
}


/* --- BASE ----------------------------------------------------------------- */
*,*::before,*::after{box-sizing:border-box}

html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}

body{
  margin:0;
  background:var(--k-blanco);
  color:var(--k-tinta);
  font-family:var(--ff-sans);
  font-size:clamp(1.0625rem,.98rem + .4vw,1.125rem);   /* 17px -> 18px */
  line-height:1.65;
  font-weight:400;
  /* Un peso que falte NUNCA se renderiza como negrita falsa: antes se ve el
     texto en regular que en una síntesis que desalinea toda la página. */
  font-synthesis-weight:none;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
}

h1,h2,h3,h4{color:var(--k-marine-900);font-weight:600;margin:0;text-wrap:balance}
p{margin:0}
p + p{margin-top:1.35em}

/* El alemán compone palabras de 28 letras y las columnas estrechas aparecen en
   todas las páginas de servicio: la partición va en global, no por bloque.
   Incluye h1-h4: un título de una sola palabra («Datenschutzerklärung», 21
   caracteres, sin espacio donde romper) no tiene otro punto de ruptura que la
   propia palabra, y a 320px de ancho con el h1 en ~34px de fuente desborda su
   caja 58px y arrastra scroll horizontal de toda la página — mismo defecto que
   esta regla ya resuelve en párrafos, solo que sin cubrir encabezados. Hallazgo
   de Calidad, ronda de re-verificación (8-ago-2026 noche), verificado con
   getBoundingClientRect en /datenschutz/ a 320px: el causante real no era la
   tabla de cookies (que sí queda contenida por `.tabla-rueda`) sino el h1. */
p,li,dd,dt,blockquote,figcaption,h1,h2,h3,h4{
  hyphens:auto;-webkit-hyphens:auto;
  hyphenate-limit-chars:8 4 4;
  overflow-wrap:break-word;
}

a{color:var(--k-tuerkis-700)}
ul,ol{margin:0;padding:0}
table{border-collapse:collapse}
img,svg,video{max-width:100%;height:auto}
img{display:block}
strong,b{font-weight:600}
abbr[title]{text-decoration:underline dotted;cursor:help}
sup{font-size:.7em;line-height:0;vertical-align:super}

/* Cualquier ancla interna a la que se salte queda por debajo de la cabecera. */
:target{scroll-margin-top:var(--sp-16)}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{
    animation-duration:.01ms !important;animation-iteration-count:1 !important;
    transition-duration:.01ms !important;
  }
}


/* --- UTILIDADES ----------------------------------------------------------- */
.wrap{max-width:var(--ancho);margin-inline:auto;padding-inline:var(--margen)}
.u-vh{
  position:absolute;width:1px;height:1px;margin:-1px;padding:0;
  overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0;
}
.u-vh-foco:focus,.u-vh-foco:focus-visible{
  position:static;width:auto;height:auto;margin:0;overflow:visible;
  clip-path:none;white-space:normal;
}
.prosa{max-width:var(--medida);text-wrap:pretty}
.prosa > * + *{margin-top:1.35em}
.u-sep{margin-top:var(--sp-6)}

/* Rótulo técnico: IBM Plex Mono 500, versalitas, +0,1em. Es la voz de la
   maquinaria del sitio: rótulos, fechas, cifras. Nunca se usa para prosa. */
.rot{
  font-family:var(--ff-mono);font-weight:500;font-size:.8125rem;line-height:1.4;
  letter-spacing:.1em;text-transform:uppercase;color:var(--k-tinta-70);
}

/* Cifras dentro de la prosa. La monoespaciada tabular da densidad de dato sin
   sacar el número de la frase que lo atribuye a su fuente: 257 insolvencias
   son de Oliver Wyman, no de Sascha, y en un mosaico gigante dejarían de
   parecerlo. */
.zahl{
  font-family:var(--ff-mono);font-weight:500;
  font-variant-numeric:tabular-nums;
  font-size:.94em;letter-spacing:.005em;
}


/* --- SKIP-LINK ------------------------------------------------------------ */
.skip{
  position:absolute;left:var(--margen);top:0;z-index:50;
  transform:translateY(-150%);
  background:var(--k-marine-900);color:var(--k-blanco);
  padding:var(--sp-3) var(--sp-4);border-radius:0 0 var(--radio) var(--radio);
  font-weight:600;text-decoration:none;
}
.skip:focus{transform:translateY(0)}


/* --- CABECERA -------------------------------------------------------------
   No pegajosa: en un móvil de 390 px una cabecera fija roba un tercio de la
   pantalla útil.

   SIN REORDENAR NADA. La colocación es automática en el orden del DOM
   (marca · nav · idiomas · CTA), que es el orden que prescribe la
   arquitectura y el que oye un lector de pantalla. No se usa `order` ni
   `grid-area`: cambiar el orden visual sin cambiar el DOM rompe el recorrido
   de foco (SC 1.3.2 y 2.4.3), y era el defecto exacto de una de las
   propuestas descartadas.

   Por debajo de 1024px: UNA columna, cada bloque a ancho completo, en el
   orden del DOM. (Corregido en la ronda 2 del 8-ago-2026: este comentario
   prometía un empaquetado en 2 filas —marca+nav / idiomas+CTA— que la
   rejilla de 2 columnas de abajo nunca produjo porque `.cab__panel`
   envolvía nav+idiomas+CTA como un único hijo sin tratamiento propio, y
   forzar esas 2 columnas de verdad exprimía la columna de la marca a
   ~112px, partiendo «Krahl & Partner Consulting» en varias líneas cortas.
   El nombre de marca y el subtítulo son intrínsecamente largos —27 y 49
   caracteres— y van a partirse en más de una línea en cualquier ancho de
   móvil: la solución no es una columna estrecha compartida con el CTA, es
   darle las 350 px enteras del viewport.)

   El umbral subió de 700px a 1024px en la ronda 3 (8-ago-2026). El arreglo
   de la ronda 2 (arriba) resolvió <700px pero dejó exactamente el mismo
   síntoma un tramo más allá: a partir de 700px la rejilla pasaba a
   `minmax(0,1fr) auto auto auto` (ver el bloque de abajo) y esa pista
   `1fr` se sigue exprimiendo contra tres pistas `auto` —nav + selector de
   idioma + CTA— cuya suma no cabe hasta bien pasados los 900px. Medido con
   getBoundingClientRect a 768px: `.marca` daba 8×176px en alemán (la marca
   partida letra a letra, superpuesta con «Servicios Contacto») y 77×119px
   en inglés, frente a 335×42px a 375px (móvil, ya bueno) y 245-421×42-59px
   a partir de 1024px (escritorio, verificado bueno en los tres idiomas).
   No había ningún punto verificado como bueno entre 700 y 1023px, así que
   en vez de adivinar un valor intermedio sin medir, el umbral se movió al
   primer punto donde SÍ hay medición limpia: 1024px. Por debajo, se
   reutiliza la columna única de abajo, ya probada en todo ese rango porque
   apilar bloques a ancho completo nunca puede exprimir nada — es la misma
   razón por la que la ronda 2 la prefirió sobre un empaquetado en 2 filas.
   ------------------------------------------------------------------------- */
.cab{border-bottom:1px solid var(--k-borde-suave);background:var(--k-blanco)}
.cab__in{
  display:grid;
  grid-template-columns:minmax(0,1fr) auto;
  align-items:center;
  gap:var(--sp-3) var(--sp-4);
  padding-block:var(--sp-4);
}
.marca{text-decoration:none;color:inherit;display:block}
.marca__n{
  display:block;font-weight:600;font-size:1.0625rem;letter-spacing:-.005em;
  color:var(--k-marine-900);line-height:1.25;
}

/* Logotipo real (10-sep-2026, petición del cliente: cabecera «poco
   atractiva»). SVG 342,6775×96,8208 — ratio 3,5397:1 — de diseno/marca/
   krahl-logo-color.svg vía convertir-logo.py (11-ago-2026), copiado a
   assets/img/krahl-logo.svg (ver su comentario en marca.php: es un fichero
   FIJO del tema, no `custom_logo`).
   46px de alto en escritorio: a ese tamaño el monograma «K» sigue siendo
   legible y el conjunto logo+eslogan (46px + .2rem margen + ~17px de línea
   de `.marca__d`) queda en ~66px, por debajo de los 88px de min-height de
   `.cab__in` en escritorio (ver el bloque CABECERA de arriba) — no
   desborda la cabecera ni la hace más alta que antes.
   width:auto: el `width`/`height` del <img> en marca.php ya fija el ratio
   correcto (343×97) para que el navegador reserve el hueco sin salto de
   layout (CLS); aquí solo se pisa el alto visual. */
.marca__logo{display:block;height:46px;width:auto}
@media (max-width:1023px){
  /* Un pelo más pequeño en el tramo de una sola columna: no hay nav al
     lado tirando de la altura de la fila, así que el logotipo puede ser
     algo menor sin que la cabecera se vea descompensada. */
  .marca__logo{height:38px}
}

/* --- ESLOGAN DE CABECERA (`.marca__d`) --------------------------------------
   Texto del CLIENTE (lo edita desde su editor: mu-plugin krahl-editor-
   textos), monoespaciado porque hereda `font-family` de `.rot` (IBM Plex
   Mono 500, mayúsculas por `text-transform:uppercase` de esa misma clase).
   Hoy (comprobado en el respaldo de BD krahl-bd-20260910.sql, opción
   `krahl_kt_overrides`, 10-sep-2026): «Einkaufsberatung mit FOKUS auf EBIT
   - NUR WAS SICH RECHNET, LOHNT SICH», 70 caracteres.

   PROBLEMA ORIGINAL: a 12,5px ese texto mide ~577px de ancho (medido con el
   .ttf real del tema, IBM Plex Mono Medium, tracking incluido tras cada
   carácter — _scratch/medir-eslogan/, 10-sep-2026) y NINGÚN hueco de la
   cabecera tiene tanto sitio en escritorio: se partía en tres líneas y
   dejaba un bloque descuadrado pegado al menú.

   Bajado a 12px (.75rem) — NO más, porque este mismo bloque ya documentaba
   que 11px con +0,11em resultó ilegible a 1440px (ver historial de esta
   regla) — el texto pasa a necesitar ~554px. A 12px, `.marca` en modo de
   UNA columna (viewport <1024px, `.marca` ocupa TODO el ancho de
   `.cab__in` = viewport − 2×var(--margen)) alcanza esos 554px a partir de
   ~616px de viewport: `616 − 2×clamp(20px,5vw,48px)= 616-2×30,8=554,4px`.
   Se muestra desde 640px (24px de margen de seguridad sobre el cálculo,
   por hinting/kerning que un .ttf leído fuera de navegador no reproduce al
   100%) hasta 1023px.

   Por encima de 1024px la cabecera cambia a la rejilla de 4 columnas
   (marca+nav+idiomas+CTA en la misma fila, ver el bloque CABECERA) y ahí
   `.marca` NUNCA vuelve a tener 554px: con «Über mich» ya en el menú
   (LEEME.md, 9-sep-2026 — el enlace añadido DESPUÉS de que se midiera el
   245-421px de la nota grande de arriba, así que ese rango ya está
   desfasado) el peor caso (alemán) mide ~155px a 1024px de viewport y como
   mucho ~331px en el ancho máximo de `.wrap` (1200px, `.cab__in` no crece
   más allá aunque el viewport sí). Por eso se OCULTA en todo el tramo de
   escritorio, en vez de encoger la letra hasta la ilegibilidad para intentar
   que quepa donde nunca cabe. Sigue en el DOM (`display:none`, no se borra
   el `<span>`): lo necesita el editor de textos del cliente para poder
   seguir localizando y editando la cadena; el nombre de la firma para
   lectores de pantalla ya lo lleva el `alt` del logotipo de al lado. */
.marca__d{
  display:none;
  margin-top:.2rem;font-size:.75rem;letter-spacing:.06em;
  max-width:37.5rem;
}
@media (min-width:640px) and (max-width:1023.98px){
  .marca__d{display:block}
}

.cab__nav{justify-self:end}
.cab__nav ul{display:flex;align-items:center;gap:var(--sp-5);flex-wrap:wrap;list-style:none}
.cab__nav a{
  display:inline-block;
  font-size:.9375rem;font-weight:500;color:var(--k-tinta);
  text-decoration:none;padding-block:.55rem;
  border-bottom:2px solid transparent;
}
.cab__nav a:hover{color:var(--k-tuerkis-800);border-bottom-color:var(--k-tuerkis-700)}
.cab__nav .current-menu-item > a,
.cab__nav [aria-current="page"]{color:var(--k-marine-900);border-bottom-color:var(--k-tuerkis-700)}

.cab__cta{justify-self:end}

/* Selector de idioma: lista de enlaces, no <select>. Cada idioma escrito en su
   propio nombre, con su lang y su hreflang (SC 3.1.2). Sin banderas: una
   bandera es un estado, no un idioma. */
.idi{display:flex;align-items:stretch;gap:0;list-style:none}
.idi li{display:flex;align-items:center}
.idi li + li{border-left:1px solid var(--k-borde-suave);margin-left:.625rem;padding-left:.625rem}
.idi a{
  display:inline-block;padding-block:.5625rem;   /* destino táctil >= 32 px */
  font-family:var(--ff-mono);font-weight:500;font-size:.8125rem;letter-spacing:.06em;
  text-transform:uppercase;text-decoration:none;color:var(--k-tinta-70);
}
.idi a:hover{color:var(--k-tuerkis-800);text-decoration:underline;text-underline-offset:.2em}
.idi a[aria-current]{
  color:var(--k-marine-900);text-decoration:underline;
  text-decoration-thickness:.09em;text-underline-offset:.22em;
}

/* Botón de menú. Solo se muestra cuando hace falta un menú de verdad (más de
   cuatro entradas). Mientras la navegación tenga dos entradas, no aparece:
   un mecanismo cuesta un clic, un estado y una tecla, y aquí no compra nada. */
.cab__boton{display:none}
.no-js .cab__boton{display:none !important}   /* sin JS, el menú va desplegado */

/* `.cab__panel` transparente a la rejilla POR DEFECTO, en todos los anchos —
   no solo desde 1024px (umbral subido en la ronda 3, ver el comentario de
   arriba). Antes esta regla vivía solo dentro del media query de escritorio:
   por debajo del umbral `.cab__panel` caía a su `display:block` de `<div>`
   sin estilo, con navegación+idiomas+CTA apilados dentro de una sola pista
   de la rejilla de 2 columnas de `.cab__in` mientras la marca ocupaba la
   otra, exprimida.
   Hallazgo ronda 2 (8-ago-2026), verificado con getBoundingClientRect a
   390px: cabecera de ~160px con la marca partida en 3 líneas cortas.
   `display:contents` hace que nav/idiomas/CTA entren como hijos directos de
   `.cab__in`, que por debajo de 1024px es ahora una única columna (ver
   bloque de abajo): cada uno a ancho completo, en el orden del DOM. La
   variante `.cab--plegable` (5+ entradas, con JS) lo revierte a una caja
   real más abajo, porque ahí el panel sí tiene que poder ocultarse/mostrarse
   como menú desplegable. */
.cab__panel{display:contents}
.cab__panel[hidden]{display:contents}

@media (max-width:1023px){
  /* Una columna, no dos: con `minmax(0,1fr) auto` la pista `auto` se
     dimensiona por el hijo más ancho de TODA la columna (el CTA,
     «Erstgespräch vereinbaren», ~222px) en las dos filas a la vez, y eso
     exprimía la columna de la marca. En una sola columna cada bloque recibe
     el ancho completo del viewport y ya no hace falta exprimir nada.
     Umbral en 1023px (antes 699px, ver el comentario grande al principio de
     este bloque): el mismo exprimido que esta regla ya resolvía por debajo
     de 700px reaparecía sin corregir entre 700 y ~950px, porque ahí regía
     la rejilla de 4 columnas del media query de abajo y esa sí se exprimía.
     Subir el umbral no es evitar el problema, es dejar de fingir que hay
     sitio para 4 columnas antes de haberlo medido. */
  .cab__in{grid-template-columns:1fr;row-gap:var(--sp-4)}
  .cab__nav,.cab__cta{justify-self:start}

  .cab--plegable .cab__boton{
    display:inline-flex;align-items:center;gap:var(--sp-2);
    min-height:44px;padding:.5rem .9rem;
    background:transparent;border:1.5px solid var(--k-tuerkis-700);border-radius:var(--radio);
    color:var(--k-tuerkis-700);font:inherit;font-size:.9375rem;font-weight:600;cursor:pointer;
    justify-self:end;
  }
  .cab--plegable .cab__boton[aria-expanded="true"]{background:var(--k-nieve)}
  /* Aquí SÍ hace falta una caja real: es el menú desplegable que el botón
     abre y cierra. Pisa el `display:contents` de la regla base de arriba. */
  .cab--plegable .cab__panel{display:block;grid-column:1 / -1}
  .cab--plegable .cab__panel[hidden]{display:none}
}

@media (min-width:1024px){
  /* La rejilla de 4 columnas SOLO entra donde está medido que cabe (ver el
     comentario grande al principio de este bloque de cabecera): a partir de
     1024px, con `.marca` entre 245 y 421px según el idioma y sin
     exprimirse. Antes este media query empezaba en 700px, que es donde
     `.marca` colapsaba a 8px de ancho. */
  .cab__in{
    grid-template-columns:minmax(0,1fr) auto auto auto;
    gap:var(--sp-4) var(--sp-8);
    min-height:88px;
  }
  .cab__panel{display:contents}
  .cab__panel[hidden]{display:contents}
}


/* --- BOTONES Y ENLACES -----------------------------------------------------
   Dos botones, y ni uno más. Relleno turquesa = la única acción del sitio.
   Contorno marino = la misma acción cuando vive dentro de la navegación, o sea
   subordinada. Si un tercer estilo de botón aparece algún día, es que se ha
   inventado una tercera acción, y no hay tercera acción.
   ------------------------------------------------------------------------- */
.btn,
/* RESKIN DE PÁGINAS INTERIORES (5-sep-2026): `.k-btn`/`.k-btn--primario`/
   `.k-btn--secundario` son los MISMOS dos botones, ya presentes en el
   `post_content` de /leistungen/ y /danke/ (fixtures reales de
   tema/mu-plugins/krahl-editor-textos/tests/fixtures/real/) sin una sola
   regla que los pintara. Se suman a los selectores de siempre — sigue
   habiendo dos botones y nunca un tercer estilo — en vez de reescribir las
   declaraciones: el editor del cliente sanea el `<a>` (inc/ajax.php
   PERMITIDOS_C) y NO se toca esa clase, solo se le da CSS. */
.contenido .k-btn{
  display:inline-flex;align-items:center;justify-content:center;
  min-height:44px;padding:.875rem 1.75rem;border-radius:var(--radio);
  font:inherit;font-weight:600;font-size:1rem;line-height:1.2;
  text-decoration:none;border:1.5px solid transparent;cursor:pointer;
  text-align:center;
  transition:background-color 160ms linear,border-color 160ms linear,color 160ms linear;
}
.btn--acento,
.contenido .k-btn--primario{background:var(--k-tuerkis-700);color:var(--k-blanco)}
.btn--acento:hover,
.contenido .k-btn--primario:hover{background:var(--k-tuerkis-800);color:var(--k-blanco)}
.btn--acento[disabled],.btn--acento[aria-disabled="true"]{
  background:var(--k-tinta-60);cursor:not-allowed;
}
.btn--linea,
.contenido .k-btn--secundario{
  background:transparent;color:var(--k-tuerkis-700);border-color:var(--k-tuerkis-700);
  padding:.6rem 1.1rem;font-size:.9375rem;
}
.btn--linea:hover,
.contenido .k-btn--secundario:hover{color:var(--k-tuerkis-800);border-color:var(--k-tuerkis-800);background:var(--k-nieve)}

/* Enlace de texto: subrayado SIEMPRE. Nunca solo color (SC 1.4.1). */
.enl{
  color:var(--k-tuerkis-700);font-weight:500;
  text-decoration:underline;text-underline-offset:.18em;text-decoration-thickness:.08em;
}
.enl:hover{color:var(--k-marine-900)}

.correo{
  display:inline-block;padding-block:.4375rem;   /* destino aislado >= 24 px */
  font-family:var(--ff-mono);font-weight:500;font-size:.9375rem;letter-spacing:.01em;
  color:var(--k-tuerkis-700);overflow-wrap:anywhere;
}


/* --- EL REGISTRO -----------------------------------------------------------
   El único primitivo de composición. Marca de cota de 2 px que mide la
   distancia hasta la línea de referencia, rótulo debajo, contenido empezando
   en esa línea. Cuerpo y pie se acotan desde la misma x.
   ------------------------------------------------------------------------- */
.reg{display:grid;gap:var(--sp-3)}
.reg__rot{margin:0}
.reg__rot::before,
/* `.persona__kicker` (24-sep-2026): MISMA línea turquesa, reutilizada por
   selector compartido (mismo patrón que `.citable, .contenido .k-citable`
   más abajo) en vez de duplicar la declaración — ver citable.php, PULIDO. */
.persona__kicker::before{
  content:"";display:block;width:2.5rem;height:2px;
  background:var(--k-tuerkis-700);margin-bottom:.625rem;
}
.persona__kicker{margin:0 0 var(--sp-4)}
.reg__cuerpo{min-width:0}

@media (min-width:900px){
  .reg{grid-template-columns:var(--datum) minmax(0,1fr);gap:0}
  .reg__rot{grid-column:1;padding-right:var(--sp-8);padding-top:1.2rem}  /* a la línea base del H2 */
  .reg__rot::before{width:calc(var(--datum) - var(--sp-8))}
  /* Explícito, no confiar en el auto-placement: si `.reg__rot` no existe como
     hermano (page.php, single.php, archive.php, index.php, 404.php no lo
     emiten), el grid metía `.reg__cuerpo` en la pista de 200 px por ser el
     primer/único hijo — la página entera se renderizaba en una columna
     estrecha. Fijar la pista 2 explícitamente lo hace correcto exista o no
     `.reg__rot`. Hallazgo ronda 2 (8-ago-2026), verificado con
     getBoundingClientRect en /leistungen/, /kontakt/, /impressum/. */
  .reg__cuerpo{grid-column:2}
}


/* --- SECCIONES -------------------------------------------------------------
   El ritmo (--ritmo) es la distancia ENTRE secciones, no el relleno de cada
   una: dos secciones seguidas suman sus dos rellenos. Por eso la sección
   suelta lleva la mitad larga y la banda lleva el entero — una banda necesita
   más aire por dentro que un simple cambio de asunto.
   ------------------------------------------------------------------------- */
.sec{padding-block:calc(var(--ritmo) * .62)}
.sec--nieve{background:var(--k-nieve);padding-block:var(--ritmo)}
.sec--tuerkis{background:var(--k-tuerkis-hell);padding-block:var(--ritmo)}
/* RESKIN (5-sep-2026): Newsreader también en los titulares de cada sección de
   la portada — no solo en el H1 del héroe —, la misma voz editorial que la
   maqueta de referencia (`publico/_build/b1.html`) usa en TODOS sus H2/H3.
   `.rot` (el rótulo mono en versalitas) NO cambia: sigue siendo la «voz de
   la maquinaria» del sitio, un papel aparte del titular. Alcance de esta
   regla: SOLO las cinco plantillas de `template-parts/portada/` usan la
   clase `.sec` en todo el tema (comprobado con grep), así que este cambio
   no toca `/leistungen/`, `/kontakt/` ni ninguna otra página — esas usan
   `.entrada`/`.contenido`, con su propia tipografía, sin tocar. */
.sec h2{
  font-family:var(--ff-serif);font-weight:500;
  font-size:clamp(1.875rem,1.6rem + 1.2vw,2.375rem);line-height:1.22;letter-spacing:-.012em;
  margin-bottom:var(--sp-4);max-width:26ch;
}
.sec h3{
  font-family:var(--ff-serif);font-weight:500;
  font-size:clamp(1.5rem,1.35rem + .7vw,1.75rem);line-height:1.3;letter-spacing:-.008em;
}


/* --- HÉROE -----------------------------------------------------------------
   Reskin fotográfico (§ TAREA-RESKIN-ESTETICA.md, serie B de las maquetas:
   `publico/_build/b1.html`). Foto industrial A SANGRE + capa de color encima
   + corte diagonal en el borde inferior — sustituye al filete recto de 3px
   que llevaba esta banda; el gesto horizontal que cruza la composición ahora
   lo hace el propio corte, no una línea.

   LA FOTO ES DECORATIVA, no informativa: es banco de imágenes (Unsplash,
   `diseno/banco-imagenes/nave-industrial-linea-produccion.jpg`, ver su
   LEEME.md), no una fotografía de Sascha Krahl ni de sus instalaciones. Por
   eso el `<img>` va con `alt=""` — todo lo que hay que saber ya lo dice el
   texto que se pinta encima — y nunca lleva pie de foto que sugiera un lugar
   o una persona concretos. El retrato real ([[PENDIENTE 17]]) sigue siendo
   un asunto aparte: ver el bloque HUECO DEL RETRATO, sin tocar, más abajo.

   CONTRASTE MEDIDO, no supuesto (5-sep-2026): la capa de color usa
   --k-marine-900 (ya en :root, ningún color nuevo) a tres paradas de opacidad
   —.90 / .84 / .78— elegidas tras medir la luminancia de CADA píxel de la
   foto reescalada (percentiles 90/95/99/99.5/100 de brillo) y comprobar la
   fórmula de contraste WCAG del resultado compuesto contra --k-blanco,
   --k-tuerkis-claro y --k-pie-texto. Incluso en la parada más clara (.78)
   contra el píxel más brillante de TODA la foto (p100, un reflejo puntual,
   luminancia 0,954): blanco 7,06:1, turquesa-claro 4,81:1, pie-texto 4,83:1
   — los tres pasan AA (4,5:1 texto normal / 3:1 texto grande) con margen.
   Guion de medición: `_scratch/reskin/medir-contraste.py`. Si se cambia la
   foto, HAY QUE REMEDIR: estas tres cifras son de esta imagen concreta. */
.hero{
  position:relative;
  overflow:hidden;
  isolation:isolate;         /* la capa/foto no tapan el contenido ni z-index ajeno */
  /* CONTROL NEGATIVO: fondo de reserva si `hero-nave-industrial-*.{jpg,webp}`
     no está (hero.php ya no dibuja `.hero__foto`/`.hero__capa` si el fichero
     no existe). Sin esto, un héroe sin foto quedaría con el texto blanco/
     turquesa-claro/pie-texto de este bloque sobre fondo transparente —
     prácticamente ilegible. Se pinta ANTES que la foto/capa (z-index
     negativo) así que, cuando SÍ hay foto, esta reserva no se ve. */
  background:var(--k-marine-900);
  color:var(--k-blanco);     /* base de color para todo lo de dentro: fondo oscuro */
  padding-block:clamp(4.5rem,11vw,8.5rem) clamp(6rem,14vw,10rem);
  --hero-corte:clamp(28px,4.5vw,56px);   /* altura del corte diagonal, ver clip-path */
  clip-path:polygon(0 0,100% 0,100% calc(100% - var(--hero-corte)),0 100%);
}
.hero__foto,
.hero__foto img{
  position:absolute;inset:0;width:100%;height:100%;
  object-fit:cover;object-position:center;
}
.hero__foto{
  z-index:-2;
  transform:scale(1.045);       /* margen para el zoom de entrada, sin dejar borde */
  animation:krahl-hero-zoom 1.6s cubic-bezier(.22,.61,.21,1) both;
}
@keyframes krahl-hero-zoom{from{transform:scale(1.09)}to{transform:scale(1.045)}}
@media (prefers-reduced-motion:reduce){
  .hero__foto{animation:none}
}
/* La capa de color: gradiente de --k-marine-900 a tres opacidades medidas
   (ver comentario de arriba). Más cerrada donde vive el texto (izquierda),
   más abierta hacia la derecha, donde solo hay foto. */
.hero__capa{
  position:absolute;inset:0;z-index:-1;
  background:linear-gradient(
    100deg,
    rgba(0,47,90,.90) 0%,
    rgba(0,47,90,.84) 45%,
    rgba(0,47,90,.78) 100%
  );
}

/* Línea de encabezamiento sobre el H1: resuelve categoría, sector y mercado
   antes de que hable el titular. Sigue en IBM Plex Mono —la «voz de la
   maquinaria» del sitio (.rot)— solo cambia de color para seguir legible
   sobre la foto: --k-tuerkis-claro es el turquesa que este sistema reserva
   para texto sobre banda oscura (ver su definición en :root). */
.hero__datum{margin:0 0 var(--sp-5);color:var(--k-tuerkis-claro)}

.hero h1{
  font-family:var(--ff-serif);font-weight:500;color:var(--k-blanco);
  font-size:clamp(2.5rem,1.9rem + 3.1vw,3.75rem);line-height:1.08;letter-spacing:-.018em;
  max-width:22ch;
  text-wrap:balance;
}
/* CORTE CONTROLADO DEL TITULAR. La segunda mitad va en su propio bloque, así
   que el corte cae siempre en la cesura y no depende de qué fuente cargue ni
   de lo que decida `text-wrap:balance`. El punto de corte lo decide cada
   idioma en su propia traducción — pero desde el 5-sep-2026 cada mitad es un
   `msgid` INDEPENDIENTE (krahl_titular(), inc/helpers.php, llamada desde
   template-parts/portada/hero.php), YA NO una sola cadena con un delimitador
   `|` dentro. Ese delimitador era justo lo que obligaba a excluir el titular
   entero del editor de textos del cliente (docs/EDITOR-TEXTOS.md §4):
   marcarlo y partirlo después dejaba el marcador invisible cortado a la
   mitad. Con dos msgid, el editor marca cada uno POR SU CUENTA y el titular
   ya es editable en los tres idiomas, sin tocar `inc/marcado.php` (su
   exclusión de '|' se queda, protege 4 cadenas de administración ajenas a
   este titular). Esta regla de CSS solo viste el `<span>` que ya produce esa
   función; no cambia el mecanismo. */
.hero h1 .h1__b{
  display:block;
  font-style:italic;color:var(--k-tuerkis-claro);
}
@media (min-width:900px){
  /* El guion sale al margen: la línea óptica arranca donde arranca la primera.
     Solo a partir de 900 px, que es donde hay margen del que colgarlo. */
  .hero h1 .h1__b--guion{margin-left:-.52em}
}

.hero__sub{
  margin-top:var(--sp-6);
  font-size:clamp(1.1875rem,1.1rem + .4vw,1.375rem);line-height:1.55;
  color:var(--k-pie-texto);max-width:var(--medida-corta);text-wrap:pretty;
}
.hero__acc{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sp-6);margin-top:var(--sp-10)}

/* Botón secundario del héroe SOBRE FOTO. Sigue siendo el mismo `.btn--linea`
   que usa el CTA de la cabecera y el buscador (misma acción subordinada al
   turquesa sólido — ver el comentario grande de «BOTONES Y ENLACES»: dos
   botones, nunca tres estilos), solo con sus colores de contorno adaptados a
   fondo oscuro en vez de al blanco de la cabecera. No es un tercer botón, es
   el mismo con la variable de color que toca en este contexto. */
.hero .btn--linea{
  color:var(--k-blanco);border-color:rgba(255,255,255,.55);
  background:transparent;
}
.hero .btn--linea:hover{
  color:var(--k-tuerkis-claro);border-color:var(--k-tuerkis-claro);
  background:rgba(255,255,255,.06);
}

/* Flecha circular de bajada. PURAMENTE DECORATIVA y a propósito: activarla
   no revela ninguna función que no exista ya (la sección siguiente se
   alcanza igual con scroll normal o Tab), así que en vez de inventar una
   cadena __() nueva solo para su aria-label se saca del árbol de
   accesibilidad y del orden de tabulación. Si algún día deja de ser
   redundante, entra por el catálogo de traducción como cualquier otra. */
.hero__bajar{
  position:absolute;left:50%;bottom:clamp(1.75rem,4vw,3.25rem);
  transform:translateX(-50%);
  width:2.75rem;height:2.75rem;border-radius:50%;
  border:1px solid rgba(255,255,255,.4);
  display:flex;align-items:center;justify-content:center;
  color:rgba(255,255,255,.8);text-decoration:none;font-size:1.125rem;
  transition:border-color 160ms linear,color 160ms linear;
  animation:krahl-hero-bob 2.6s ease-in-out infinite;
}
.hero__bajar:hover{border-color:var(--k-tuerkis-claro);color:var(--k-tuerkis-claro)}
@keyframes krahl-hero-bob{0%,100%{transform:translateX(-50%) translateY(0)}50%{transform:translateX(-50%) translateY(6px)}}
@media (prefers-reduced-motion:reduce){
  .hero__bajar{animation:none}
}
@media (max-width:640px){
  /* A menos de 640px la flecha se solapa con el corte diagonal y con los
     botones si el titular ocupa 3-4 líneas: se retira, no se encoge un
     elemento puramente decorativo hasta hacerlo ilegible. */
  .hero__bajar{display:none}
}

/* HUECO DEL RETRATO. No se dibuja hoy: mientras no exista la fotografía de
   Sascha Krahl ([[PENDIENTE 17]] — DISTINTO de la foto de fondo de arriba,
   que es de ambiente/banco), el héroe va a una columna y no hay recuadro
   vacío en el sitio más visible de la página. Lo que sí queda escrito es la
   proporción, para que el día que entre la imagen el CLS siga siendo cero.
   Nunca un campo reservado en el primer viewport: un recuadro con un número
   de ticket al lado del CTA es decoración dirigida a la agencia, no al
   comprador. */
.hero__retrato{display:none}
.hero:has(.hero__retrato img) .hero__cuerpo{min-width:0}
@media (min-width:900px){
  .hero:has(.hero__retrato img) .reg__cuerpo{
    display:grid;grid-template-columns:minmax(0,1fr) 40%;gap:var(--sp-12);align-items:start;
  }
  .hero:has(.hero__retrato img) .hero__retrato{display:block}
}
.hero__retrato img{
  width:100%;height:auto;aspect-ratio:4/5;object-fit:cover;
  border-radius:var(--radio);
}

/* --- CINTA ------------------------------------------------------------------
   Tira horizontal bajo el héroe que recibe visualmente el corte diagonal
   (el notch de --hero-corte queda relleno por este fondo --k-nieve, sin
   offsets ni márgenes negativos: el rectángulo de .hero ya termina justo
   donde empieza esta banda).
   TEXTO — CORREGIDO el 5-sep-2026 (hallazgo de captura): esta cinta repetía
   literalmente el rótulo de `.hero__datum`, dos veces en la misma pantalla.
   Ahora lleva CUATRO rótulos DISTINTOS que ya existen y están aprobados en
   los tres idiomas (REGLA 3 del CLAUDE.md del proyecto): 'Cost', 'Focus',
   'Market', 'Questions' — ver el comentario junto al bucle en hero.php para
   el porqué de estos cuatro y no otros. Sigue siendo puramente decorativa
   (mismo texto que ya lee quien usa lector de pantalla en los rótulos `.rot`
   de las secciones siguientes, dicho antes), por eso `aria-hidden` en el
   contenedor entero. */
.cinta{
  background:var(--k-nieve);
  overflow:hidden;
  padding-block:var(--sp-2) var(--sp-4);
}
.cinta__pista{
  display:flex;flex-wrap:nowrap;white-space:nowrap;width:max-content;
  animation:krahl-cinta-desplazar 26s linear infinite;
}
.cinta__item{
  font-family:var(--ff-serif);font-style:italic;font-weight:400;
  font-size:1.0625rem;color:var(--k-tinta-70);
  padding-inline:var(--sp-5);
}
.cinta__item::after{content:"—";margin-left:var(--sp-5);color:var(--k-tuerkis-700);font-style:normal}
@keyframes krahl-cinta-desplazar{to{transform:translateX(-50%)}}
@media (prefers-reduced-motion:reduce){
  .cinta__pista{animation:none}
}


/* --- BLOQUE CITABLE --------------------------------------------------------
   Fondo azul claro, filete izquierdo de 4 px. Va en el primer tercio de la
   página y tiene que pasar la prueba del recorte: copiado solo, en un
   documento en blanco, sigue teniendo sentido y sigue siendo verdad.
   Es además el CÓDIGO DE VOZ del sitio: donde aparece este filete, habla
   Sascha. Por eso lo llevan también la frase pivote del bloque de mercado y
   las respuestas del FAQ, y por eso NO lo lleva la prosa de mercado, que es
   de Oliver Wyman, de EY y del VDA.
   ------------------------------------------------------------------------- */
.citable,
/* RESKIN DE PÁGINAS INTERIORES (5-sep-2026): `.k-citable` es la MISMA caja
   citable, ya presente sin estilo en el `post_content` de /leistungen/ (las
   288 líneas de las 5 páginas × 3 idiomas) — se suma al selector en vez de
   duplicar declaraciones, para que un cambio de la caja no pueda divergir
   entre portada y páginas interiores. */
.contenido .k-citable{
  background:var(--k-tuerkis-hell);
  border-left:4px solid var(--k-tuerkis-700);
  padding:var(--sp-6) var(--sp-8);
  max-width:var(--medida);
}
.citable p,
.contenido .k-citable p{font-size:1.0625em;line-height:1.6}
.citable + .citable{margin-top:var(--sp-6)}

/* La misma voz, sin la caja: para cuando el bloque va dentro de otra banda. */
.voz{
  border-left:4px solid var(--k-tuerkis-700);
  padding-left:var(--sp-6);
  max-width:var(--medida);
}


/* --- FOTO DE SASCHA EN «ZUR PERSON» (24-sep-2026, cierra parte de
   [[PENDIENTE 17]]) ----------------------------------------------------------
   El arco y el sello son GEOMETRÍA COPIADA, no interpretada, de la maqueta de
   referencia (`publico/_build/b1.html`, sección «Zur Person»): mismo
   aspect-ratio 3/3.9, mismo radio 190px/190px arriba (el `4px` de abajo SÍ es
   `var(--radio)`, porque en este sistema ya vale 4px — mismo número, token
   real), mismo tamaño de sello (112px), mismos offsets del anillo
   (-14/-14/24/42) y del sello (-26/24), mismas sombras (30/60 y 12/30).

   LOS COLORES NO SE COPIAN LITERALES — se traducen a los tokens de ESTE
   sistema, que ya corrigió la paleta de la maqueta:
   · --k-marine-900 = #002F5A: coincide byte a byte con el marino de b1, cero
     traducción que hacer.
   · --k-tuerkis-700 SUSTITUYE al #0BA5A5/#009AA5 de la maqueta. No es una
     preferencia: la cabecera de esta hoja ya fija «un solo hex de acción en
     todo el sistema» y esa referencia sin corregir da 3,41:1 y suspende AA
     (REGLA 1 del CLAUDE.md del proyecto — nos parecemos a la referencia Y
     arreglamos lo que hace mal). Introducir un segundo turquesa aquí
     reabriría exactamente ese defecto.
   · El sello usa --k-nieve de fondo porque en b1 el fondo del sello es EL
     MISMO color que el fondo de la sección (#F7F5F0 ~ --k-nieve): no es un
     color nuevo, es el fondo de `.sec--nieve` reaparecido en el sello.

   NO SE REPLICA EL TEXTO CIRCULAR del sello de la maqueta («KRAHL & PARTNER
   · EINKAUF · AUTOMOBIL»): nombra compras de AUTOMOCIÓN, un sector que el
   cliente no ha confirmado ([[PENDIENTE 12/58/07]], REGLA 1/3 del CLAUDE.md
   del proyecto) y esta tarea tiene prohibido tocar cualquier texto. Queda
   solo el «&» — el mismo signo que ya lleva el nombre público de la empresa
   (KRAHL_RAZON_SOCIAL, «Krahl & Partner Consulting SL»), no un claim nuevo.

   GAP DE LA REJILLA: b1 usa `clamp(40px,5vw,76px)`; aquí `var(--sp-12)`
   (48px) — el MISMO token que ya usa la rejilla gemela del héroe
   (`.hero:has(.hero__retrato img) .reg__cuerpo`, más abajo en este fichero),
   no un valor nuevo. Igual la proporción de columnas: 40% es la MISMA que ya
   usa esa rejilla del héroe (ahí para la foto en la columna derecha, aquí
   para la izquierda) — con `.reg__cuerpo` en ~904px de ancho (ver el
   comentario de `.reg__cuerpo{grid-column:2}` más arriba), 40% da ~362px,
   prácticamente el 360px literal de b1.

   SOLO SE ACTIVA SI HAY FOTO, mismo mecanismo `:has()` que ya usa
   `.hero:has(.hero__retrato img)`: sin `krahl_foto_persona_id()`, la sección
   queda exactamente como antes, una columna. En móvil (<900px) se apila —
   a diferencia del héroe, que oculta el retrato entero por debajo de 900px,
   aquí SÍ hay hueco para apilar sin invadir un H1 ni un CTA. */
.persona__foto{position:relative;margin-top:var(--sp-10);max-width:360px}
.persona__marco{position:relative}
.persona__marco::before{
  content:"";position:absolute;top:-14px;right:-14px;left:24px;bottom:42px;
  border:1.5px solid rgba(0,112,122,.55);   /* --k-tuerkis-700 en rgb, ring decorativo */
  border-radius:190px 190px var(--radio) var(--radio);
  pointer-events:none;
}
.persona__marco img{
  position:relative;display:block;width:100%;
  aspect-ratio:3/3.9;object-fit:cover;
  border-radius:190px 190px var(--radio) var(--radio);
  box-shadow:0 30px 60px rgba(0,47,90,.20);  /* --k-marine-900 en rgb */
}
.persona__sello{
  position:absolute;left:-26px;bottom:24px;
  width:112px;height:112px;border-radius:50%;
  background:var(--k-nieve);
  border:1px solid rgba(0,112,122,.45);      /* --k-tuerkis-700 en rgb */
  box-shadow:0 12px 30px rgba(0,47,90,.16);  /* --k-marine-900 en rgb */
  display:flex;align-items:center;justify-content:center;
  font-family:var(--ff-serif);font-style:italic;font-size:32px;
  color:var(--k-tuerkis-700);
}
@media (min-width:900px){
  /* `align-items:start`, NO `center` (corregido 24-sep-2026 tras revisión
     visual de Ángel): con `center`, la fila del grid toma la altura del
     bloque MÁS ALTO, y el más BAJO se reparte el sobrante arriba y abajo —
     con nuestro texto (copy largo y aprobado, no recortable) casi siempre
     más alto que la foto, eso hundía la foto muy por debajo del titular,
     con un hueco vacío encima. Con `start`, la foto y el kicker/titular
     arrancan en la MISMA línea — el propio borde superior del arco queda a
     la altura del titular, como en b1. */
  #zur-person:has(.persona__foto img) .reg__cuerpo{
    display:grid;grid-template-columns:40% minmax(0,1fr);gap:var(--sp-12);align-items:start;
  }
  /* `grid-row:1` en los DOS, explícito: sin él, el cursor de auto-colocación
     de CSS Grid procesa por orden de DOM (texto primero, columna 2) y al
     llegar a la foto (columna 1, MENOR que la columna donde quedó el cursor)
     salta de fila — la foto cae en la fila 2, debajo del texto, aunque las
     columnas estén bien puestas. Medido el 24-sep-2026 con getBoundingClientRect:
     sin esto, foto.top (1832px) caía por debajo de texto.bottom (1784px) a
     pesar de columnas 1/2 correctas. Mismo error que ya advierte el
     comentario de `.reg__cuerpo{grid-column:2}` más arriba sobre no confiar
     en el auto-placement. */
  #zur-person:has(.persona__foto img) .persona__foto{grid-column:1;grid-row:1;margin-top:0}
  #zur-person:has(.persona__foto img) .persona__texto{grid-column:2;grid-row:1;min-width:0}
}
@media (max-width:640px){
  /* Corregido 24-sep-2026: con los offsets de escritorio (-14/-14/24/42 el
     anillo, -26/24 el sello) sobre un `.persona__foto` de ~350px (viewport
     390 − 2×20px de --margen), el sello quedaba a ~4px del borde izquierdo
     de la PANTALLA y el anillo a ~6px del derecho — medido pidiendo ≥16px a
     los dos lados. Con estos offsets más cortos, a 390px y a 360px (el otro
     ancho de referencia) el hueco resultante es de 16-17px en los dos
     bordes: `(20px de --margen) − (offset)` en cada lado. */
  .persona__marco::before{top:-8px;right:-3px;left:14px;bottom:28px}
  .persona__sello{width:76px;height:76px;font-size:22px;left:-3px;bottom:12px}
}


/* --- ÍNDICE DE PÁGINA ------------------------------------------------------
   Convierte los rótulos del margen en un sistema de referencia real en lugar
   de cinco etiquetas decorativas. Va DESPUÉS del bloque citable a propósito:
   ningún índice se pone por delante de lo que un motor tiene que extraer.
   Ayuda al usuario de teclado, habilita enlaces profundos y pesa cero.
   ------------------------------------------------------------------------- */
.inhalt{padding-block:var(--sp-8);border-block:1px solid var(--k-borde-suave)}
.inhalt ol{
  list-style:none;display:flex;flex-wrap:wrap;
  gap:var(--sp-3) var(--sp-8);counter-reset:k;
}
.inhalt li{counter-increment:k}
.inhalt a{
  display:inline-flex;align-items:baseline;gap:.55rem;
  padding-block:.3rem;text-decoration:none;color:var(--k-tinta);
  font-size:.9375rem;font-weight:500;
}
.inhalt a::before{
  content:counter(k,decimal-leading-zero);
  font-family:var(--ff-mono);font-weight:500;font-size:.75rem;letter-spacing:.06em;
  color:var(--k-tuerkis-700);font-variant-numeric:tabular-nums;
}
.inhalt a:hover{color:var(--k-tuerkis-800);text-decoration:underline;text-underline-offset:.2em}


/* --- DOS COLUMNAS DE TRABAJO ------------------------------------------------
   RESKIN (5-sep-2026): de «dos columnas separadas por un filete» a DOS
   TARJETAS con la esquina superior derecha cortada en diagonal — el mismo
   gesto que las tarjetas «Für wen»/«Leistungen» de la maqueta de referencia
   (`publico/_build/b1.html`), aquí SIN fotografía: ninguna de las dos
   tarjetas (Coste / Organización) tiene imagen que ofrecer sin arriesgar que
   se lea como una instalación o persona real del cliente (LEEME.md del
   banco de imágenes) — el corte se resuelve con color y numeral, como hace
   la propia maqueta en su tarjeta «A/B» de «Für wen», que tampoco lleva
   foto. Numeral vía CSS `counter()`, mismo mecanismo ya usado en `.inhalt`
   más arriba — no es texto nuevo, es decoración generada.
   CONTRASTE: reutiliza pares YA MEDIDOS en el bloque de arriba («TEXTO SOBRE
   LOS TRES FONDOS CLAROS»): tinta/marine-900/tuerkis-700 contra --k-nieve. */
.cols{
  display:grid;gap:var(--sp-6);margin-top:var(--sp-10);
  counter-reset:krahl-col;
}
.col{
  position:relative;counter-increment:krahl-col;
  background:var(--k-nieve);border:1px solid var(--k-borde-suave);
  padding:var(--sp-8) var(--sp-8) var(--sp-10);
  clip-path:polygon(0 0,calc(100% - 32px) 0,100% 32px,100% 100%,0 100%);
}
.col::before{
  content:counter(krahl-col,decimal-leading-zero);
  display:block;margin-bottom:var(--sp-3);
  font-family:var(--ff-serif);font-style:italic;font-weight:500;
  font-size:clamp(1.75rem,1.55rem + .7vw,2.25rem);line-height:1;
  color:var(--k-tuerkis-700);
}
.col h3{margin-bottom:var(--sp-3)}
.col p{color:var(--k-tinta);max-width:44ch}
/* El orden importa: esta regla va ANTES del @media, porque su margin-top
   anularía el `margin-top:auto` que alinea los dos enlaces. */
.col .enl{align-self:start;margin-top:var(--sp-6);padding-block:.25rem;display:inline-block}
@media (min-width:600px){
  .cols{grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--sp-8);align-items:stretch}
  /* Los dos enlaces caen en la misma línea aunque los párrafos midan distinto:
     si no, el ojo lee dos columnas desalineadas y el sistema deja de leerse. */
  .col{display:flex;flex-direction:column}
  .col .enl{margin-top:auto;padding-top:var(--sp-6)}
}


/* --- REGISTRO DE FUENTES ---------------------------------------------------
   La única tabla del sitio y el componente que ningún comparable tiene: qué se
   afirma, quién lo midió, cuándo se publicó y cuándo lo comprobamos NOSOTROS.
   Aparato de informe, no tarjeta de estadística.
   ------------------------------------------------------------------------- */
.fuentes{margin-top:var(--sp-12);width:100%}
.fuentes caption{text-align:left;padding-bottom:var(--sp-3)}
.fuentes th,.fuentes td{text-align:left;vertical-align:top;padding:var(--sp-4) var(--sp-6) var(--sp-4) 0}
.fuentes thead th{
  border-top:2px solid var(--k-marine-900);border-bottom:1px solid var(--k-borde-suave);
  padding-block:var(--sp-2);
}
.fuentes tbody th{font-weight:600;color:var(--k-marine-900);white-space:nowrap}
.fuentes tbody tr + tr th,.fuentes tbody tr + tr td{border-top:1px solid var(--k-borde-suave)}
.fuentes .fecha{
  font-family:var(--ff-mono);font-weight:500;font-variant-numeric:tabular-nums;
  white-space:nowrap;color:var(--k-tinta-70);
}
.fuentes td:last-child,.fuentes th:last-child{padding-right:0}

/* La frase que hace creíble todo lo demás. Envejece sola: se revalida con
   fecha nueva en cada republicación o se retira. Si una URL da 404 se retira
   LA FRASE que depende de ella, no solo el enlace. */
.fuentes__geprueft{
  margin-top:var(--sp-4);font-size:.875rem;color:var(--k-tinta-70);
  font-family:var(--ff-mono);font-weight:500;letter-spacing:.02em;
}
.fuentes__geprueft time{font-variant-numeric:tabular-nums}

/* Llamada volada: ata cada afirmación a la fila del registro que la sostiene.
   Es lo que un motor generativo necesita para citar con procedencia. */
.nota-ref{font-size:.68em;line-height:0;vertical-align:super}
.nota-ref a{
  font-family:var(--ff-mono);font-weight:500;text-decoration:none;
  padding-inline:.15em;color:var(--k-tuerkis-700);
}
.nota-ref a:hover{text-decoration:underline}

@media (max-width:699px){
  /* Debajo de 700 px la tabla se apila. La SEMÁNTICA no cambia: sigue siendo
     una tabla con th scope, y solo se oculta visualmente la fila de
     encabezado. Un lector de pantalla lee exactamente lo mismo en las dos
     anchuras. */
  .fuentes thead{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
  .fuentes tbody tr{display:block;padding-block:var(--sp-4)}
  .fuentes tbody tr:first-child{border-top:2px solid var(--k-marine-900)}
  .fuentes tbody tr + tr{border-top:1px solid var(--k-borde-suave)}
  .fuentes tbody th,.fuentes tbody td{display:block;padding:0;border:0}
  .fuentes tbody th{
    font-family:var(--ff-mono);font-size:.75rem;letter-spacing:.1em;text-transform:uppercase;
    font-weight:500;color:var(--k-tinta-70);margin-bottom:var(--sp-1);white-space:normal;
  }
  .fuentes tbody .fecha{margin-top:var(--sp-2)}
}


/* --- BANDA OSCURA · CIFRAS DE MERCADO (markt) -------------------------------
   RESKIN (5-sep-2026): la única banda de la portada, aparte del héroe, que
   rompe a fondo oscuro con fotografía — la alternancia clara/oscura de la
   maqueta de referencia (`publico/_build/b1.html`, secciones «Vorgehen» y
   «Panorama»). Reutiliza el MISMO mecanismo que el héroe (foto de fondo +
   capa de --k-marine-900 en gradiente) y el MISMO marino que ya lleva el
   pie: por eso los contrastes de abajo son los YA MEDIDOS en el bloque
   «PIE Y BANDA OSCURA, fondo #002F5A» del principio de esta hoja — es el
   idéntico par de colores sobre el idéntico fondo, no una suposición nueva.

   FOTO: diseno/banco-imagenes/componente-industrial-macro.jpg (banco,
   Unsplash — pieza mecánica en taller, SIN rostro ni lugar identificable,
   ver su LEEME.md). Igual que el héroe: decorativa, `alt=""`, nunca con pie
   que sugiera una instalación real del cliente.

   CONTRASTE MEDIDO SOBRE ESTA FOTO CONCRETA, no supuesto (5-sep-2026,
   `_scratch/reskin/medir-contraste-markt.py`): incluso en el píxel más
   brillante de TODA la foto (p100, luminancia 0,8708) con la misma parada
   más clara del degradado del héroe (.78 de --k-marine-900): blanco
   7,29:1, turquesa-claro 4,97:1, pie-texto 4,99:1 — los tres pasan AA con
   margen (>=4,5 texto normal), así que se reutiliza el MISMO degradado de
   tres paradas del héroe (.90/.84/.78) en vez de inventar uno nuevo. Si se
   cambia esta foto, hay que volver a medir. */
.sec--marino{
  position:relative;overflow:hidden;isolation:isolate;
  background:var(--k-marine-900);color:var(--k-pie-texto);
  padding-block:var(--ritmo);
}
.markt__foto,.markt__foto img{
  position:absolute;inset:0;width:100%;height:100%;
  object-fit:cover;object-position:center;
}
.markt__foto{z-index:-2}
.markt__capa{
  position:absolute;inset:0;z-index:-1;
  background:linear-gradient(
    100deg,
    rgba(0,47,90,.90) 0%,
    rgba(0,47,90,.84) 45%,
    rgba(0,47,90,.78) 100%
  );
}
.sec--marino h2{color:var(--k-blanco)}
.sec--marino .rot{color:var(--k-tuerkis-claro)}
.sec--marino .reg__rot::before{background:var(--k-tuerkis-claro)}
.sec--marino p{color:var(--k-pie-texto)}
.sec--marino .enl{color:var(--k-tuerkis-claro)}
.sec--marino .enl:hover{color:var(--k-blanco)}
.sec--marino .nota-ref a{color:var(--k-tuerkis-claro)}
.sec--marino .nota-ref a:hover{color:var(--k-blanco)}
/* El bloque `.citable` dentro de esta banda SIGUE siendo la tarjeta clara de
   siempre (fondo --k-tuerkis-hell): flota sobre el marino igual que en la
   maqueta flotan las tarjetas claras sobre sus bandas oscuras. Su texto NO
   hereda el --k-pie-texto de la banda —sería azul claro sobre azul claro,
   ilegible—, así que se restaura el tinta oscuro de siempre. Especificidad
   (dos clases + tipo) por encima de la regla `.sec--marino p` de arriba. */
.sec--marino .citable p{color:var(--k-tinta)}
.sec--marino .fuentes thead th{border-top-color:var(--k-blanco);border-bottom-color:var(--k-pie-linea-fuerte)}
.sec--marino .fuentes tbody th{color:var(--k-blanco)}
.sec--marino .fuentes tbody tr + tr th,.sec--marino .fuentes tbody tr + tr td{border-top-color:var(--k-pie-linea)}
.sec--marino .fuentes .fecha{color:var(--k-pie-texto)}
.sec--marino .fuentes__geprueft{color:var(--k-pie-texto)}
/* Mismo motivo que el pie (ver ANILLO DE FOCO al final de esta hoja): el
   anillo marino directo solo da 1,00 contra este fondo. */
.sec--marino a:focus-visible{outline-color:var(--k-blanco);box-shadow:0 0 0 2px var(--k-marine-900)}
@media (max-width:699px){
  .sec--marino .fuentes tbody tr:first-child{border-top-color:var(--k-blanco)}
}

/* Numeral decorativo de los dos hallazgos citados (Oliver Wyman / EY+VDA):
   el mismo gesto que los pasos «01…05» de la banda oscura de la maqueta
   (sección «Vorgehen»), aplicado a los DOS párrafos con fuente de esta
   sección en vez de a pasos inventados — cero copy nuevo, solo dígitos. */
.markt__num{
  display:block;margin-bottom:var(--sp-2);
  font-family:var(--ff-serif);font-style:italic;font-weight:500;
  font-size:clamp(1.5rem,1.35rem + .5vw,1.875rem);line-height:1;
  color:var(--k-tuerkis-claro);
}


/* --- PREGUNTAS -------------------------------------------------------------
   Sin acordeón, por decisión de arquitectura y no por descuido. Tres preguntas
   cortas no necesitan un mecanismo: abrirlas cuesta un clic, un estado y una
   tecla, esconde el texto de los motores generativos y deja los encabezados
   fuera del primer paint. Los tres H3 salen como encabezados reales.

   Regla del sistema: los FILETES abarcan la columna de contenido entera; el
   TEXTO se para en su medida. Así el registro de fuentes y el de preguntas se
   leen como el mismo componente, que es lo que son.
   ------------------------------------------------------------------------- */
/* RESKIN (5-sep-2026): numeral grande en cursiva por pregunta, el mismo
   mecanismo de `counter()` que `.col` (arriba) y `.inhalt` — más aire por
   pregunta (`--sp-10`, antes `--sp-8`) para el «aire generoso» de la
   maqueta de referencia. */
.faq{margin-top:var(--sp-10);counter-reset:krahl-faq}
.faq__item{
  position:relative;counter-increment:krahl-faq;
  border-top:1px solid var(--k-borde-suave);padding-block:var(--sp-10);
}
.faq__item:first-child{border-top:2px solid var(--k-marine-900)}
.faq__item:last-child{padding-bottom:0}
.faq__item::before{
  content:counter(krahl-faq,decimal-leading-zero);
  display:block;margin-bottom:var(--sp-2);
  font-family:var(--ff-serif);font-style:italic;font-weight:500;
  font-size:clamp(1.5rem,1.35rem + .5vw,1.875rem);line-height:1;
  color:var(--k-tuerkis-700);
}
.faq h3{margin-bottom:var(--sp-4);max-width:34ch}
/* El mismo filete azul de 4 px del bloque citable: sin que nadie se lo diga,
   el lector aprende que en las respuestas sigue hablando él. */
.faq__item p{
  max-width:var(--medida);
  border-left:4px solid var(--k-tuerkis-700);
  padding-left:var(--sp-5);
}


/* --- CIERRE: GESPRÄCHSKARTE ------------------------------------------------
   El único sitio donde el sistema se rompe a propósito es donde se pide la
   conversación. Tarjeta blanca con canto turquesa sobre la banda turquesa
   clara: la tarjeta NO se distingue por su fondo (1,10 contra la banda), la
   distingue el canto (5,32, recalculado con `_scratch/contraste-tema.py` sobre
   la paleta marino+turquesa vigente). Por eso el canto no es decoración.
   ------------------------------------------------------------------------- */
.gespraech{
  position:relative;
  background:var(--k-blanco);
  border-left:6px solid var(--k-tuerkis-700);
  border-radius:0 var(--radio) var(--radio) 0;
  padding:var(--sp-10) clamp(var(--sp-6),4vw,var(--sp-12));
  max-width:46rem;
  /* RESKIN (5-sep-2026): esquina superior derecha cortada en diagonal, el
     mismo lenguaje de tarjeta que `.col` y `.faq__item`. El corte queda
     lejos del canto izquierdo (el `border-left` de 6px que sostiene el
     contraste, ver el comentario grande de arriba): la línea x=0 del
     polígono no se toca, así que el canto se pinta entero. */
  clip-path:polygon(0 0,calc(100% - 36px) 0,100% 36px,100% 100%,0 100%);
}
.gespraech h2{margin-bottom:var(--sp-4)}
.gespraech__acc{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sp-6);margin-top:var(--sp-8)}


/* --- MIGAS DE PAN --------------------------------------------------------- */
.migas{padding-block:var(--sp-6) 0}
.migas ol{list-style:none;display:flex;flex-wrap:wrap;gap:.35rem .5rem;font-size:.875rem}
.migas li{display:flex;align-items:center;gap:.5rem;color:var(--k-tinta-70)}
.migas li + li::before{content:"›";color:var(--k-tinta-60)}
.migas a{color:var(--k-tuerkis-700);text-decoration:underline;text-underline-offset:.18em}
.migas [aria-current="page"]{color:var(--k-tinta-70)}


/* --- CONTENIDO EDITORIAL (page / single / archive) ------------------------ */
.entrada{padding-block:calc(var(--ritmo) * .62)}
.entrada__cab{margin-bottom:var(--sp-10)}
.entrada h1{
  font-size:clamp(2.125rem,1.7rem + 2vw,3rem);line-height:1.12;letter-spacing:-.018em;
  max-width:24ch;
}
.entrada__meta{margin-top:var(--sp-4);display:flex;flex-wrap:wrap;gap:var(--sp-2) var(--sp-6)}
.entrada__meta time{font-variant-numeric:tabular-nums}

/* Firma y fechas visibles — inc/geo.php §4. Los modelos leen el TEXTO
   RENDERIZADO, no solo el schema: por eso la autoría y las fechas van en el
   documento y no únicamente en el JSON-LD. */
.firma{
  font-family:var(--ff-mono);font-weight:500;font-size:.9375rem;
  color:var(--k-marine-900);
}
.firma a{color:var(--k-marine-900);text-decoration:underline;text-underline-offset:.18em}
.fechas{
  margin-top:var(--sp-1);font-size:.8125rem;color:var(--k-tinta-70);
  font-variant-numeric:tabular-nums;
}
.fechas time{font-family:var(--ff-mono)}

/* Bloque citable de artículo — krahl_geo_bloque_citable() en inc/geo.php §5.
   Mismo filete que el `.citable` de la portada: es el mismo código de voz. */
.citable .respuesta{font-size:1.0625em;font-weight:500;line-height:1.55;color:var(--k-marine-900)}
.citable .desarrollo{margin-top:var(--sp-3);color:var(--k-tinta)}
.citable .desarrollo > * + *{margin-top:1.35em}
.citable .stand{
  margin-top:var(--sp-4);font-family:var(--ff-mono);font-size:.8125rem;
  color:var(--k-tinta-70);border-top:1px dashed var(--k-borde-suave);padding-top:var(--sp-2);
}

/* Línea «fuentes comprobadas el …» — krahl_geo_fuentes_revisadas(). Misma
   voz tipográfica que .fuentes__geprueft de la portada. */
.fuentes-revisadas{
  margin-top:var(--sp-4);font-size:.875rem;color:var(--k-tinta-70);
  font-family:var(--ff-mono);font-weight:500;letter-spacing:.02em;
}
.fuentes-revisadas time{font-variant-numeric:tabular-nums}

.contenido{max-width:var(--medida)}
.contenido > * + *{margin-top:1.35em}
.contenido h2{
  font-size:clamp(1.625rem,1.45rem + .9vw,2rem);line-height:1.25;
  margin-top:2.2em;margin-bottom:.5em;max-width:26ch;
}
.contenido h3{
  font-size:clamp(1.3125rem,1.2rem + .6vw,1.5rem);line-height:1.3;
  margin-top:1.8em;margin-bottom:.4em;max-width:32ch;
}
.contenido h4{font-size:1.125rem;margin-top:1.6em;margin-bottom:.35em}
.contenido a{text-decoration:underline;text-underline-offset:.18em;text-decoration-thickness:.08em}
/* Un botón dentro del contenido NO se subraya. `.btn` ya trae
   `text-decoration:none`, pero `.contenido a` es más específica y ganaba, así que
   los CTA del post_content salían subrayados dentro del rectángulo de color.
   Se vio al pasar esos enlaces a `.btn` el 3-sep-2026. */
.contenido a.btn{text-decoration:none}
.contenido ul,.contenido ol{padding-left:1.35em;margin-block:1.35em}
.contenido ul{list-style:disc}
.contenido ol{list-style:decimal}
.contenido li + li{margin-top:.5em}
.contenido li::marker{color:var(--k-tuerkis-700)}
.contenido blockquote{
  margin:1.8em 0;padding-left:var(--sp-6);
  border-left:4px solid var(--k-tuerkis-700);color:var(--k-tinta);
}
.contenido figure{margin:2em 0}
.contenido figcaption{margin-top:var(--sp-3);font-size:.875rem;color:var(--k-tinta-70)}
/* RESKIN DE PÁGINAS INTERIORES (5-sep-2026, CORREGIDO otra vez el 5-sep-2026
   por la noche — el primer "arreglo" de esta mañana NO rodaba en vivo, avisado
   por Ángel a 390px con cifras: `table.scrollWidth`=565, `.tabla-rueda`
   (contenedor) `clientWidth`=350 pero `scrollWidth-clientWidth`=0, y forzar
   `scrollLeft=9999` en el CONTENEDOR se quedaba en 0. Reproducido igual antes
   de tocar nada: ver `_scratch/cotejo/medir-tabla.mjs`).

   CAUSA REAL (no la hipótesis de "falta min-width en px": el min-width de
   7rem en `th`/`td` de abajo YA estaba puesto y SÍ se aplicaba —
   `firstThMinWidth` medía 112px). El fallo fue de CAPA, no de valor:

   1. Cada `<table>` del contenido YA vive envuelta en un
      `<div class="tabla-rueda">` que el propio `the_content` inyecta en
      tiempo de render (`krahl_tablas_ruedan()` en `inc/setup.php`, filtro
      previo a este reskin, no tocado hoy) — y ese `div` YA tiene
      `overflow-x:auto` (regla `.tabla-rueda` de abajo, preexistente).
   2. El "arreglo" de esta mañana puso una SEGUNDA capa de scroll en la propia
      `<table>` (`display:block` + `overflow-x:auto` + `max-width:100%`). Ese
      `max-width:100%` capaba el ancho de LA TABLA al 100% de su padre
      (`.tabla-rueda`), así que la tabla, vista desde fuera, NUNCA desbordaba
      su contenedor — de ahí que `.tabla-rueda` midiera desbordamiento 0.
   3. Pero `display:block` en un `<table>` cuyos hijos (`thead`/`tbody`/`tr`)
      conservan su display de agente de usuario (`table-row-group`/
      `table-row`) hace que el navegador genere una caja de tabla ANÓNIMA por
      dentro para poder maquetar esas filas — y esa caja anónima sí atendía al
      `min-width` de las celdas y desbordaba LA PROPIA TABLA (de ahí que forzar
      `scrollLeft` en la tabla misma sí avanzara: comprobado, avanzaba a
      215-229px según idioma). Verificar sobre la tabla en vez de sobre el
      contenedor —que es lo que un dedo real toca primero, y lo que Ángel
      testeó— fue lo que dio un "verificado" que no correspondía a la
      experiencia real: exactamente la familia B de la regla 17 del CLAUDE.md
      global (medir el proceso interno, no el efecto que ve el visitante).

   CORRECCIÓN: se retira la segunda capa (`display:block`, `max-width:100%`,
   `overflow-x` y `-webkit-overflow-scrolling` propios de la tabla). La tabla
   vuelve a su ancho natural (`display:table` por defecto) y el ÚNICO
   contenedor con scroll es `.tabla-rueda`, que ya existía, ya es fiable y no
   depende de ningún comportamiento de "caja anónima". El `min-width` en
   celdas se mantiene sin cambios: es lo que fuerza que la tabla, con sus 5
   columnas, sea más ancha que el móvil y por tanto desborde DE VERDAD dentro
   de `.tabla-rueda`.

   VERIFICADO tras el cambio, tres idiomas a 390px (`.tabla-rueda`, el
   contenedor real, no la tabla): `scrollWidth-clientWidth` = 215px (de),
   210px (en), 229px (es); forzar `scrollLeft=9999` en el CONTENEDOR avanza a
   esas mismas cifras (antes: 0 en los tres); `document.body.scrollWidth` se
   queda en 390 en los tres (la página no gana scroll). A 1440px, sin cambios:
   `body.scrollWidth`=1440, sin desbordamiento — `.contenido` ya mide más que
   5×7rem, así que la regla de abajo no hace nada ahí. Capturas antes/después
   en `_scratch/cotejo/` (antes: cabecera "Dauer" cortada en una letra;
   después: columna "Dauer"/"Duration"/"Duración" y la de consentimiento
   legibles enteras al desplazar el contenedor). */
.contenido table{margin-block:2em;font-size:.9375rem}
@media (max-width:699px){
  .contenido th,.contenido td{min-width:7rem}
}
/* El navegador centra `caption` por defecto: la única tabla real de contenido
   hoy (`.k-tabla`, cookies de datenschutz) leería distinto del resto del
   sitio, que alinea todo a la izquierda (ver `.fuentes caption`). */
.contenido caption{text-align:left;padding-bottom:var(--sp-3);color:var(--k-tinta-70)}
.contenido th,.contenido td{
  text-align:left;vertical-align:top;padding:var(--sp-3) var(--sp-4) var(--sp-3) 0;
  border-bottom:1px solid var(--k-borde-suave);
}
.contenido thead th{border-bottom:2px solid var(--k-marine-900);color:var(--k-marine-900)}
.contenido code,.contenido kbd{font-family:var(--ff-mono);font-size:.9em;background:var(--k-nieve);padding:.1em .35em;border-radius:2px}
.contenido pre{
  font-family:var(--ff-mono);font-size:.875rem;background:var(--k-nieve);
  padding:var(--sp-4);border-radius:var(--radio);overflow-x:auto;
}
.contenido pre code{background:none;padding:0}
.contenido hr{border:0;border-top:1px solid var(--k-borde-suave);margin-block:2.5em}
/* Cualquier tabla ancha rueda dentro de su propio contenedor: el cuerpo de la
   página no hace scroll horizontal nunca. */
.tabla-rueda{overflow-x:auto;-webkit-overflow-scrolling:touch}


/* ============================================================================
   PÁGINAS INTERIORES — RESKIN (§ TAREA-RESKIN-ESTETICA.md, apartado añadido
   5-sep-2026, "PÁGINAS INTERIORES").
   ============================================================================
   Traduce la estética fotográfica de la portada (Newsreader, numerales por
   `counter()`, bandas oscuras con foto) a /leistungen/ (`publico/_build/
   b3.html`) y /kontakt/ (`b4.html`), y da coherencia tipográfica al resto
   (impressum, datenschutz, danke), que la maqueta no cubre.

   NINGUNA REGLA DE AQUÍ ABAJO TOCA `post_content`. Las clases `k-seccion`,
   `k-intro`, `k-citable`, `k-bloque`, `k-zusammenarbeit`, `k-ablauf`, `k-faq`,
   `k-cierre`, `k-acciones`, `k-btn(--primario|--secundario)`, `k-correo`,
   `k-erstgespraech`, `k-utilidad`, `k-legal`, `k-legal-versiones` y `k-tabla`
   YA EXISTEN en las 288 líneas de post_content de las 5 páginas × 3 idiomas
   que pasan por page.php (comprobado con grep sobre los 15 fixtures de
   tema/mu-plugins/krahl-editor-textos/tests/fixtures/real/ antes de escribir
   esto) y no tenían una sola regla en esta hoja. Es CSS puro sobre marcado ya
   guardado: cero riesgo para el enumerador de bloques del editor del cliente
   (bloques.php ETIQUETAS_HOJA/ETIQUETAS_BLOQUE no cambian su lista, y ningún
   `<p>`/`<h2>`/`<h3>`/`<li>`/`<blockquote>` cambia de etiqueta).
   ========================================================================= */

/* --- Tipografía editorial: Newsreader también en H2/H3 de contenido --------
   Mismo criterio que `.sec h2/h3` de la portada (ver su comentario: esa regla
   solo tocaba las 5 plantillas de portada "a propósito", dejando dicho que
   `.contenido` seguía con "su propia tipografía, sin tocar" — este es el
   punto en el que SÍ se toca, ahora que le llega su turno). Alcance: TODO
   `.contenido` (page.php, single.php, archive.php) — un H2 de un artículo del
   blog no tiene motivo para verse peor que uno de /leistungen/. */
.contenido h2,
.contenido h3{
  font-family:var(--ff-serif);font-weight:500;letter-spacing:-.01em;
}

/* --- `.k-intro`: el párrafo de entrada de cada página ----------------------
   Mismo papel que `.hero__sub` en portada: un pelín más grande y más suave
   que el cuerpo. Excluye `.k-correo` (ver más abajo, voz distinta). */
.contenido .k-intro > p:not(.k-correo){
  font-size:1.0625em;line-height:1.65;color:var(--k-tinta-70);
  max-width:var(--medida);
}

/* Correo dentro de la intro de /kontakt/: mismo tratamiento tipográfico que
   `.correo` de portada/pie — monoespaciada, sin adorno de tamaño. */
.contenido .k-correo{
  font-family:var(--ff-mono);font-weight:500;font-size:.9375rem;letter-spacing:.01em;
}
/* HALLAZGO DE CAPTURA (5-sep-2026, móvil 390px, /danke/ y /kontakt/): la
   `hyphens:auto` global de `p` (ver la regla grande junto a `h1,h2,h3,h4`
   más arriba) hereda también en el `<a href="mailto:…">` que vive DENTRO del
   párrafo, y el motor de guionado parte la dirección de correo por una
   sílaba («krahlconsultin-g.com») en vez de tratarla como una cadena que no
   se corta. Es el mismo problema que `.correo` del pie ya resuelve con
   `overflow-wrap:anywhere` — aquí el enlace no lleva esa clase (viene tal
   cual del `post_content` aprobado), así que se corrige por atributo, sin
   tocar el HTML: cualquier `mailto:` dentro de `.contenido` deja de
   guionarse. */
.contenido a[href^="mailto:"]{hyphens:none}

/* Segunda sección de /kontakt/ ("Das erste Gespräch"): separador sutil, el
   mismo filete que usa el resto del sitio entre bloques del registro. */
.contenido .k-erstgespraech{
  margin-top:var(--sp-10);padding-top:var(--sp-8);
  border-top:1px solid var(--k-borde-suave);
}

/* --- `.k-bloque`: los dos pilares de servicio, numerados -------------------
   El mismo mecanismo de `counter()` que `.faq__item`/`.col` de portada —
   nunca texto nuevo, solo dígitos generados. Hoy son DOS bloques (Kosten /
   Organisation): el copy aprobado son dos pilares, no los tres de la
   maqueta (CLAUDE.md REGLA 1 — no se inventa un tercero para "completar" la
   cuadrícula). */
.contenido{counter-reset:k-bloque}
.contenido .k-bloque{
  counter-increment:k-bloque;
  margin-top:var(--sp-12);padding-top:var(--sp-10);
  border-top:1px solid var(--k-borde-suave);
}
.contenido .k-bloque::before{
  content:counter(k-bloque,decimal-leading-zero);
  display:block;margin-bottom:var(--sp-2);
  font-family:var(--ff-serif);font-style:italic;font-weight:500;
  font-size:clamp(1.75rem,1.55rem + .7vw,2.25rem);line-height:1;
  color:var(--k-tuerkis-700);
}
.contenido .k-bloque h2{margin-top:0}
/* Los subtítulos "Ausgangslage"/"Vorgehen" (y sus traducciones) hablan con la
   VOZ DE LA MAQUINARIA del sitio (`.rot`), no con la del titular: mismo
   mono/versalitas/tracking que el resto de rótulos técnicos, para que no
   compitan con el numeral ni con el H2. */
.contenido .k-bloque h3{
  font-family:var(--ff-mono);font-weight:500;font-style:normal;
  font-size:.8125rem;line-height:1.4;letter-spacing:.1em;text-transform:uppercase;
  color:var(--k-tuerkis-700);
  margin-top:1.8em;margin-bottom:.6em;
}

/* --- `.k-zusammenarbeit`: condiciones de colaboración ----------------------
   Sin caja propia — es prosa de cierre de la sección de servicios, no una
   voz distinta —, solo el filete de separación habitual. */
.contenido .k-zusammenarbeit{
  margin-top:var(--sp-10);padding-top:var(--sp-8);
  border-top:1px solid var(--k-borde-suave);
}

/* --- `.k-ablauf`: pasos numerados ("Was nach Ihrer Nachricht passiert") ----
   Mismo lenguaje que los pasos «01…05» de la banda oscura de portada
   (Vorgehen) y que "So läuft es ab" de la maqueta de contacto (b4.html),
   aplicado al `<ol>` real del copy aprobado — dos pasos hoy, no los tres
   inventados de la maqueta. */
.contenido .k-ablauf{margin-top:var(--sp-10)}
.contenido .k-ablauf ol{
  list-style:none;padding-left:0;margin-block:var(--sp-6);
  display:flex;flex-wrap:wrap;gap:var(--sp-8) var(--sp-10);
  counter-reset:k-ablauf;
}
.contenido .k-ablauf li{
  counter-increment:k-ablauf;
  flex:1 1 220px;min-width:200px;margin-top:0;
}
.contenido .k-ablauf li::before{
  content:counter(k-ablauf,decimal-leading-zero);
  display:block;margin-bottom:var(--sp-2);
  font-family:var(--ff-serif);font-style:italic;font-weight:500;
  font-size:clamp(1.5rem,1.35rem + .5vw,1.875rem);line-height:1;
  color:var(--k-tuerkis-700);
}
.contenido .k-ablauf li strong{
  display:block;margin-bottom:.3em;font-size:1.0625rem;font-weight:600;color:var(--k-marine-900);
}

/* --- `.k-faq`: preguntas frecuentes -----------------------------------------
   Numeral por pregunta, mismo mecanismo que `.faq__item` de portada. Los H3
   siguen siendo encabezados reales (sin acordeón, misma decisión de
   arquitectura que portada: ver el comentario grande de `.faq` más arriba). */
.contenido .k-faq{counter-reset:k-faq;margin-top:var(--sp-10)}
.contenido .k-faq h3{
  counter-increment:k-faq;
  position:relative;
  border-top:1px solid var(--k-borde-suave);
  padding-top:var(--sp-8);margin-top:var(--sp-8);margin-bottom:var(--sp-3);
  max-width:34ch;
}
.contenido .k-faq h3:first-of-type{border-top:2px solid var(--k-marine-900)}
.contenido .k-faq h3::before{
  content:counter(k-faq,decimal-leading-zero);
  display:block;margin-bottom:var(--sp-2);
  font-family:var(--ff-serif);font-style:italic;font-weight:500;
  font-size:clamp(1.5rem,1.35rem + .5vw,1.875rem);line-height:1;
  color:var(--k-tuerkis-700);
}
/* La respuesta lleva el mismo filete de voz que `.faq__item p` de portada. */
.contenido .k-faq h3 + p{
  max-width:var(--medida);
  border-left:4px solid var(--k-tuerkis-700);padding-left:var(--sp-5);
}

/* --- `.k-cierre`: la última pregunta antes del formulario -------------------
   Tarjeta con esquina cortada — el mismo lenguaje de `.col`/`.gespraech` —
   pero más ligera que `.gespraech`: en /leistungen/ el cierre canónico
   (template-parts/portada/cierre.php) ya llega justo después con su propia
   tarjeta turquesa, y dos tarjetas idénticas seguidas leerían como un error,
   no como énfasis. */
.contenido .k-cierre{
  margin-top:var(--sp-12);padding:var(--sp-8) clamp(var(--sp-6),4vw,var(--sp-10));
  background:var(--k-nieve);border-top:2px solid var(--k-marine-900);
  clip-path:polygon(0 0,calc(100% - 32px) 0,100% 32px,100% 100%,0 100%);
}
.contenido .k-cierre h2{margin-top:0}
.contenido .k-cierre p{max-width:var(--medida)}

/* --- `.k-acciones`: fila de botones ------------------------------------------
   Mismo patrón que `.hero__acc`/`.gespraech__acc`: nunca los botones pegados
   al texto ni entre sí. */
.contenido .k-acciones{
  display:flex;flex-wrap:wrap;align-items:center;gap:var(--sp-4) var(--sp-6);
  margin-top:var(--sp-6);
}

/* --- `.k-utilidad`: aviso de utilidad (p. ej. /danke/ con el formulario
   todavía apagado) ------------------------------------------------------------
   Caja neutra, canto marino (estructura), no turquesa (acción): no es la voz
   editorial de Sascha, es un estado del sitio. */
.contenido .k-utilidad{
  padding:var(--sp-6) var(--sp-8);
  background:var(--k-nieve);border-left:4px solid var(--k-marine-900);
}
.contenido .k-utilidad p{font-size:1.0625em;line-height:1.6}

/* --- `.k-legal`: Impressum / Datenschutz -------------------------------------
   Documento largo, muchos H2 seguidos: un filete antes de cada uno (salvo el
   primero) lo lee como un registro de artículos, no como una pared de texto.
   `:first-of-type` cuenta solo entre los H2 hermanos — los H3 intercalados no
   rompen la cuenta. */
.contenido .k-legal > h2:not(:first-of-type){
  border-top:1px solid var(--k-borde-suave);
  padding-top:var(--sp-8);margin-top:var(--sp-10);
}
/* Fila final con los enlaces a las otras versiones de idioma del documento
   legal: voz técnica, discreta, igual que `.fuentes__geprueft`. */
.contenido .k-legal-versiones{
  margin-top:var(--sp-10);padding-top:var(--sp-6);
  border-top:1px solid var(--k-borde-suave);
  font-family:var(--ff-mono);font-size:.8125rem;letter-spacing:.02em;
  color:var(--k-tinta-70);
}
.contenido .k-legal-versiones a{color:var(--k-tuerkis-700)}


/* --- HÉROE FOTOGRÁFICO DE /kontakt/ (`.pagina-hero`) ------------------------
   Traduce la sección "Seitenkopf" de la maqueta de contacto (`publico/
   _build/b4.html`): foto a sangre + capa marino + UN corte en la esquina
   inferior derecha (no el corte diagonal completo de `.hero`: esta banda es
   más baja, hay una página entera con el formulario debajo). Mismo mecanismo
   de foto+capa que `.hero`/`.markt__foto`, con su propia variable de corte
   para no acoplarse a `--hero-corte` de portada (papeles parecidos, pero
   plantillas distintas: portada vs. page.php).

   CONTRASTE MEDIDO sobre esta foto concreta (`_scratch/reskin/
   medir-contraste-kontakt.py`, 5-sep-2026): reutiliza el MISMO degradado de
   tres paradas que el héroe de portada (.90/.84/.78 de --k-marine-900) — ni
   una opacidad nueva. Contra el píxel más brillante de TODA la foto (p100,
   un reflejo de cristal, luminancia 1,0) incluso en la parada más clara
   (.78): blanco 6,93:1, turquesa-claro 4,73:1, pie-texto 4,74:1 — los tres
   pasan AA con margen. Si se cambia la foto, hay que volver a medir. */
.pagina-hero{
  position:relative;overflow:hidden;isolation:isolate;
  background:var(--k-marine-900);color:var(--k-blanco);
  padding-block:clamp(3.5rem,8vw,6rem) clamp(3rem,7vw,5rem);
  --pagina-hero-corte:clamp(20px,3.5vw,40px);
  clip-path:polygon(0 0,100% 0,100% calc(100% - var(--pagina-hero-corte)),0 100%);
}
.pagina-hero__foto,
.pagina-hero__foto img{
  position:absolute;inset:0;width:100%;height:100%;
  object-fit:cover;object-position:center;
}
.pagina-hero__foto{z-index:-2}
.pagina-hero__capa{
  position:absolute;inset:0;z-index:-1;
  background:linear-gradient(
    100deg,
    rgba(0,47,90,.90) 0%,
    rgba(0,47,90,.84) 45%,
    rgba(0,47,90,.78) 100%
  );
}
.pagina-hero__datum{margin:0 0 var(--sp-4);color:var(--k-tuerkis-claro)}
.pagina-hero h1{
  font-family:var(--ff-serif);font-weight:500;color:var(--k-blanco);
  font-size:clamp(2.25rem,1.8rem + 2.4vw,3.25rem);line-height:1.1;letter-spacing:-.016em;
  max-width:20ch;margin:0;text-wrap:balance;
}
/* Nombre + titulación bajo el H1, SOLO en el héroe de /ueber-mich/
   (template-parts/comun/ueber-mich-hero.php, 10-sep-2026). `--k-pie-texto`
   es el MISMO tono que `.pagina-hero__datum`... no, ese usa tuerkis-claro;
   aquí se usa pie-texto (el tono de prosa sobre banda oscura, ver la nota
   «PIE Y BANDA OSCURA» al principio de esta hoja: 9,25:1 sobre
   --k-marine-900 sólido — sobra AA con margen incluso antes de contar la
   foto de fondo). Tamaño de subtítulo, no de prosa de cuerpo: es una sola
   línea corta (nombre + titulación), no un párrafo. */
.pagina-hero__persona{margin:var(--sp-3) 0 0;color:var(--k-pie-texto);font-size:1.0625rem;line-height:1.5}
/* Mismo motivo que `.sec--marino a:focus-visible`: el anillo marino directo
   no se distingue sobre esta banda. Sin enlaces hoy dentro del héroe, pero
   la regla queda escrita para el día que los haya. */
.pagina-hero a:focus-visible{outline-color:var(--k-blanco);box-shadow:0 0 0 2px var(--k-marine-900)}


/* --- BANDA FOTOGRÁFICA DECORATIVA DE /leistungen/ (`.pagina-foto`) ----------
   Traduce la foto ancha bajo el "Seitenkopf" de la maqueta de servicios
   (`b3.html`). La maqueta la recorta en pastilla (border-radius redondeado);
   aquí se usa el MISMO lenguaje de esquina cortada que `.col`/`.faq__item`/
   `.gespraech` — nos parecemos a la maqueta, no le copiamos un gesto que el
   resto del sitio no usa (CLAUDE.md REGLA 1). Puramente decorativa: sin
   texto encima, nada que medir en contraste. */
.pagina-foto{
  position:relative;overflow:hidden;
  margin-bottom:var(--sp-10);
  aspect-ratio:21/9;
  clip-path:polygon(0 0,calc(100% - 56px) 0,100% 56px,100% 100%,0 100%);
  box-shadow:0 20px 44px rgba(0,36,62,.14);
}
.pagina-foto img{width:100%;height:100%;object-fit:cover;display:block}
@media (max-width:640px){
  .pagina-foto{aspect-ratio:4/3;clip-path:polygon(0 0,calc(100% - 32px) 0,100% 32px,100% 100%,0 100%)}
}


/* ============================================================================
   MAQUETACIÓN «ÜBER MICH» (10-sep-2026)
   ============================================================================
   Petición del cliente: «Todo el diseño del apartado "über mich" es poco
   atractivo visualmente». El contenido real vive en `publicable/paginas/
   ueber-mich-de.html` — NI UNA PALABRA de ese fichero se ha tocado, solo la
   envoltura (control: _scratch/medir-eslogan/contar-palabras.py, misma
   bolsa de 605 palabras antes y después). Todo lo de aquí abajo es CSS +
   las clases/envoltorios nuevos de ese HTML.

   RITMO GENERAL: hasta hoy `.k-seccion` no tenía NINGUNA regla propia — la
   única separación entre secciones venía del genérico `.contenido > * +
   *{margin-top:1.35em}` (≈23px), que es la misma distancia que separa DOS
   PÁRRAFOS dentro de la misma idea. Por eso siete `<h2>` seguidos se leían
   como un único muro: nada marcaba dónde empezaba una sección nueva.

   ⚠️ `.k-seccion` y `.k-intro`/`.k-schwerpunkte` NO son exclusivos de esta
   página: `grep -rl "k-seccion"` los encuentra también en Impressum,
   Datenschutz, Leistungen, Kontakt y la Startseite. Estilarlos a secas
   cambiaría esas seis páginas sin que nadie las haya revisado — justo lo
   que la tarea pide NO hacer salvo que sea imprescindible. Por eso todo
   este bloque va cualificado con `.contenido:has(.k-keyfacts)`:
   `.k-keyfacts` SÍ es exclusiva de /ueber-mich/ (comprobado con el mismo
   grep), así que el selector solo entra en el `.contenido` de ESTA
   página. La técnica `:has()` ya la usa el tema (`.hero:has(.hero__retrato
   img)`, más arriba), no es una novedad para esta hoja. */
.contenido:has(.k-keyfacts) .k-seccion{margin-top:clamp(3rem,5vw + 1.5rem,5rem)}
.contenido:has(.k-keyfacts) .k-seccion:first-child{margin-top:0}
/* Filete turquesa antes de CADA h2 de sección — el mismo lenguaje visual que
   `.reg__rot::before` (la marca de cota del sistema), reutilizado aquí en
   vez de inventar un segundo adorno. Es lo que rompe «los siete h2 pesan
   igual»: no se trata de agrandar unos y encoger otros —seguirían siendo el
   mismo nivel de encabezado, falsear el tamaño confundiría la jerarquía—,
   sino de darle a cada uno un arranque visual propio, igual que ya tienen
   los `<h2>` de la portada dentro de `.reg`. */
.contenido:has(.k-keyfacts) .k-seccion > h2::before{
  content:"";display:block;width:2.5rem;height:2px;
  background:var(--k-tuerkis-700);margin-bottom:.625rem;
}

/* --- KEY FACTS → REJILLA DE TARJETAS ---------------------------------------
   Antes: un h2 y tres h3 corridos con sus párrafos, sin ninguna separación
   visual entre los tres bloques — un muro más. Ahora, tres tarjetas con
   filete superior turquesa (mismo tono de acción que el resto del sitio,
   nunca un color nuevo). 3 columnas en escritorio, 1 en móvil. */
.k-keyfacts__grid{
  display:grid;grid-template-columns:1fr;gap:var(--sp-6);
  margin-top:var(--sp-6);
}
.k-keyfacts__karte{
  padding:var(--sp-6) var(--sp-6) var(--sp-2);
  background:var(--k-nieve);border-top:3px solid var(--k-tuerkis-700);
}
.k-keyfacts__karte h3{margin-top:0}
.k-keyfacts__karte p{font-size:.95em}
@media (min-width:760px){
  .k-keyfacts__grid{grid-template-columns:repeat(3,minmax(0,1fr))}
}

/* --- AUSBILDUNG / SCHWERPUNKTE → LISTAS A DOS COLUMNAS ---------------------
   `.k-lista-2col` sustituye el bullet por defecto (heredado de `.contenido
   ul{list-style:disc}`) por un marcador propio del sistema: un guion corto
   turquesa, no un punto genérico de navegador — mismo criterio que
   `.contenido li::marker{color:var(--k-tuerkis-700)}` ya aplicaba al color,
   aquí además se cambia la FORMA.

   DOS COLUMNAS CON `columns:2` (multi-columna CSS), NO `display:grid` — a
   propósito, aunque el resto de la hoja use grid para todo lo demás. Con
   grid y 6 `<li>` sin `grid-row`/`grid-column` explícitos, el navegador los
   coloca en PARES por fila (1-2, 3-4, 5-6: zigzag), no "3 arriba a la
   izquierda, 3 abajo a la derecha" como pide una lectura normal de dos
   columnas. `columns:2` sí da ese orden (se lee la columna izquierda
   entera de arriba abajo y LUEGO la derecha) sin tener que numerar filas a
   mano. `break-inside:avoid` en cada `<li>` evita que el texto de un ítem
   se parta justo en el salto de columna (única forma de que "dos columnas
   de texto" no corte una frase por la mitad).
   >=560px: donde 6 ítems cortos empiezan a tener sitio real a los dos
   lados sin apretarse; por debajo, la columna única ya usa bien el ancho
   de `.contenido`. */
/* Cualificado con `.contenido` A PROPÓSITO: `.contenido ul{list-style:disc}`
   y `.contenido ul{padding-left:1.35em}` (más arriba en esta hoja) tienen
   especificidad 0,1,1 y ganaban a `.k-lista-2col` a secas (0,1,0). Medido
   en la captura real del 10-sep-2026: salían el bullet nativo Y el guion
   («• –»). Con 0,2,0 gana esta. */
.contenido .k-lista-2col{list-style:none;padding-left:0}
.k-lista-2col li{
  position:relative;padding-left:1.3em;
  break-inside:avoid;-webkit-column-break-inside:avoid;
}
.k-lista-2col li::before{
  content:"–";position:absolute;left:0;color:var(--k-tuerkis-700);font-weight:600;
}
@media (min-width:560px){
  .k-lista-2col{columns:2;column-gap:var(--sp-8)}
}

/* --- BRANCHEN → CHIPS -------------------------------------------------------
   Convertido de párrafo con comas a lista de píldoras SOLO donde el reparto
   salía limpio y reversible (comprobado con _scratch/medir-eslogan/
   partir-branchen.py: reconstruir los 7 trozos con ", " devuelve el texto
   original carácter a carácter). `k-warengruppen` NO lleva esta clase a
   propósito — ver el comentario en el HTML fuente y el informe de esta
   tarea: "Guss-, Schmiede- und Stanz-Biege-Bauteile" se partiría por la
   mitad de una palabra compuesta alemana si se separase por comas. */
.contenido .k-chips{ /* cualificado por el mismo motivo que .k-lista-2col */
  list-style:none;padding-left:0;margin-top:var(--sp-5);
  display:flex;flex-wrap:wrap;gap:var(--sp-2) var(--sp-3);
}
.contenido .k-chips li + li{margin-top:0} /* pisa `.contenido li + li{margin-top:.5em}`: el gap del flex ya separa */
.k-chips li{
  margin:0;padding:.4em .9em;
  background:var(--k-tuerkis-hell);border:1px solid var(--k-tuerkis-borde);
  border-radius:999px;font-size:.9em;line-height:1.3;color:var(--k-tinta);
}

/* --- WARENGRUPPEN: SOLO TIPOGRAFÍA -----------------------------------------
   Ver arriba: esta sección se queda en prosa a propósito. Se mejora el
   ritmo de lectura (line-height más generoso, ancho de línea recortado a
   `--medida-corta` en vez del ancho completo de `.contenido`, que a
   68/40rem ya es largo para dos frases densas en comas) sin tocar ni una
   coma del texto real. */
.k-warengruppen p{max-width:var(--medida-corta);line-height:1.7}

/* --- PROJEKTE UND STATIONEN --------------------------------------------------
   La tabla reutiliza el componente compartido `.fuentes` (registro de
   fuentes, style.css arriba) para heredar su base — tipografía, el `thead`
   visualmente oculto en móvil, el borde superior de la primera fila — pero
   TODO lo de aquí abajo va bajo el modificador `.k-tabla-stationen`
   (segunda clase del mismo `<table>`), nunca sobre `.fuentes` a secas: ese
   componente lo usa el registro de fuentes de otras páginas y no se toca
   su aspecto por esta tarea.

   ENVOLTORIO CON SCROLL: `.k-tabla-scroll` deja que la tabla respire más
   ancho que `.contenido` (68ch/40rem) sin desbordar la página. El
   `margin-inline-end` negativo SOLO entra a partir de 1024px, y el número
   (`--sp-12`=48px) está puesto con margen de seguridad DELIBERADO: a esa
   anchura `.reg__cuerpo` (la columna de contenido dentro de `.reg`, ver el
   bloque REGISTRO al principio de esta hoja) mide `1024 − 2×48(margen) −
   200(--datum) = 728px`, y `.contenido` sigue topado en 640px
   (`--medida`) — sobran 88px de hueco real. 48px de los 88 es un tercio de
   margen de seguridad sobre el cálculo, no un número puesto a ojo. Por
   debajo de 1024px no hay breakout (no hace falta comprobar `.reg__cuerpo`
   en ese rango: por debajo de 900px `.reg` ni siquiera parte en 2
   columnas, y entre 900-1023px el hueco es más variable) — el
   `overflow-x:auto` de abajo es quien absorbe cualquier apriete residual,
   nunca la página. */
.k-tabla-scroll{overflow-x:auto}
/* ANCHURA (corregido 10-sep-2026 tras la captura real a 1440px: con el
   margen negativo de 48px la columna Jahresvolumen seguía CORTADA —
   «Jahresvo», «40 Mio. €» a medias — que es justo el dato que pidió el
   cliente). En vez de estirar la tabla con un margen negativo, el
   contenedor de ESTA página deja de toparse en `--medida` y son las
   secciones de prosa las que se limitan a ella. Números: a 1440px
   `.reg__cuerpo` mide 1200 − 2×48 − 200 = 904px; a 1024px, 728px. La
   tabla, las tarjetas de Key Facts, las listas a dos columnas y los chips
   usan ese ancho entero (3 tarjetas de ~290px en vez de ~200; dos columnas
   de ~430px, que sigue siendo medida de lectura). Intro y Warengruppen
   siguen en 640px (`--medida`) porque son párrafos de lectura, y los h2
   ya llevan `max-width:26ch` en `.contenido h2`. Todo bajo el mismo
   `:has(.k-keyfacts)` que el resto del bloque: ninguna otra página cambia. */
.contenido:has(.k-keyfacts){max-width:none}
.contenido:has(.k-keyfacts) > .k-intro,
.contenido:has(.k-keyfacts) > .k-warengruppen{max-width:var(--medida)}

/* Escritorio (>=700px, donde `.fuentes` sigue siendo una tabla real: por
   debajo de eso el bloque de abajo la convierte en tarjetas). Cabecera
   marino con texto claro: el par #FFFFFF sobre #002F5A SÓLIDO ya está
   medido en la nota «PIE Y BANDA OSCURA» al principio de esta hoja — 13,51:1,
   el mismo marino de estructura, ningún color nuevo que volver a medir. */
.k-tabla-stationen thead th{
  background:var(--k-marine-900);color:var(--k-blanco);
  border-top:0;border-bottom:0;padding-block:var(--sp-3);
}
/* Cebra suave en vez del borde-superior por fila de `.fuentes`: con cabecera
   de color, un borde tenue entre filas claras se perdía visualmente: la
   cebra separa sin necesitar esa línea. */
.k-tabla-stationen tbody tr:nth-child(even){background:var(--k-nieve)}
.k-tabla-stationen tbody tr + tr th,
.k-tabla-stationen tbody tr + tr td{border-top:0}
.k-tabla-stationen{font-size:.9375rem} /* 15px: cinco columnas en 728px (1024) sin apretar; a 16px la Rolle partía en 4 líneas */
.k-tabla-stationen tbody th{font-variant-numeric:tabular-nums;white-space:nowrap}
/* Columna Jahresvolumen destacada — quedaba cortada por el ancho
   estrecho de `.contenido`; con el ancho completo de arriba ya no hay corte, y
   además se le da peso visual porque es el dato que más se busca en esta
   tabla. */
.k-tabla-stationen td.k-tabla-vol{
  font-weight:600;color:var(--k-marine-900);font-variant-numeric:tabular-nums;
  white-space:nowrap;
}

@media (max-width:699px){
  /* Tarjetas apiladas. LA TABLA SIGUE SIENDO UNA <table> SEMÁNTICA: el
     `<thead>` se oculta visualmente igual que en `.fuentes` (clip a 1px, no
     `display:none`, sigue en el árbol de accesibilidad), `scope="row"` y
     `scope="col"` siguen intactos en el HTML — esto solo cambia el
     `display` visual, nunca el marcado. La técnica es `data-label` +
     `::before` en cada `<td>` (los `<th scope="row">` de Zeitraum NO llevan
     data-label: ya hacen de título de tarjeta con el tratamiento que
     `.fuentes tbody th` les da de por sí — negrita + marino). */
  .k-tabla-stationen tbody th{margin-bottom:var(--sp-3)}
  .k-tabla-stationen tbody td{
    display:grid;grid-template-columns:6.5rem minmax(0,1fr);
    gap:var(--sp-3);align-items:baseline;
    padding:.35em 0;border:0;
  }
  .k-tabla-stationen tbody td[data-label]::before{
    content:attr(data-label);
    font-family:var(--ff-mono);font-size:.6875rem;letter-spacing:.06em;
    text-transform:uppercase;color:var(--k-tinta-70);
  }
  .k-tabla-stationen td.k-tabla-vol{white-space:normal}
}


.paginacion{
  margin-top:var(--sp-16);padding-top:var(--sp-8);
  border-top:1px solid var(--k-borde-suave);
  display:flex;flex-wrap:wrap;gap:var(--sp-4);
}
.paginacion .page-numbers{
  display:inline-flex;align-items:center;justify-content:center;
  min-width:44px;min-height:44px;padding:0 .75rem;border-radius:var(--radio);
  text-decoration:none;color:var(--k-tuerkis-700);border:1px solid var(--k-borde-suave);
  font-variant-numeric:tabular-nums;
}
.paginacion .page-numbers:hover{background:var(--k-nieve);border-color:var(--k-tuerkis-700)}
.paginacion .page-numbers.current{
  background:var(--k-marine-900);color:var(--k-blanco);border-color:var(--k-marine-900);font-weight:600;
}

/* Listado de piezas */
.lista{list-style:none;margin-top:var(--sp-8)}
.lista > li{border-top:1px solid var(--k-borde-suave);padding-block:var(--sp-8)}
.lista > li:first-child{border-top:2px solid var(--k-marine-900)}
.teaser h2,.teaser h3{
  font-size:clamp(1.375rem,1.25rem + .6vw,1.625rem);line-height:1.3;margin-bottom:var(--sp-3);
  max-width:30ch;
}
.teaser h2 a,.teaser h3 a{color:inherit;text-decoration:none}
.teaser h2 a:hover,.teaser h3 a:hover{text-decoration:underline;text-underline-offset:.18em}
.teaser__fecha{display:block;margin-bottom:var(--sp-2);font-variant-numeric:tabular-nums}
.teaser p{max-width:var(--medida);color:var(--k-tinta-70)}
.teaser .enl{display:inline-block;margin-top:var(--sp-4);padding-block:.25rem}

/* Barra lateral opcional de single.php (widget-area "lateral" de setup.php).
   Vacía por defecto: mientras no haya widgets, `.sin-lateral` en el <body>
   mantiene una sola columna y esta regla no se aplica a nada. */
.entrada--con-lateral .wrap.reg{max-width:none}
@media (min-width:64rem){
  .entrada--con-lateral .reg__cuerpo{
    display:grid;grid-template-columns:minmax(0,1fr) 20rem;gap:var(--sp-12);align-items:start;
  }
  .entrada--con-lateral .entrada__principal{min-width:0}
  .entrada--con-lateral .contenido{max-width:none}
}
.lateral .widget + .widget{margin-top:var(--sp-10)}
.lateral .widget h2{margin-bottom:var(--sp-3)}


/* --- FORMULARIO ------------------------------------------------------------
   Los bordes de los campos SÍ portan información (dónde se escribe): por eso
   usan --k-borde-control (3,99 sobre blanco), no --k-borde-suave (1,39).
   ------------------------------------------------------------------------- */
.form{max-width:38rem;margin-top:var(--sp-8)}
.form__leyenda{margin-bottom:var(--sp-8);color:var(--k-tinta-70);font-size:.9375rem}
.form__campo + .form__campo{margin-top:var(--sp-6)}
.form__campo label,.form__grupo legend{
  display:block;font-weight:600;font-size:.9375rem;color:var(--k-marine-900);
  margin-bottom:var(--sp-2);
}
.form__ayuda{display:block;margin-bottom:var(--sp-2);font-size:.875rem;color:var(--k-tinta-70)}
.form__req{color:var(--k-error);font-weight:700}

.form input[type="text"],
.form input[type="email"],
.form input[type="tel"],
.form input[type="search"],
.form select,
.form textarea{
  width:100%;min-height:44px;padding:.6875rem .875rem;
  font:inherit;font-size:1rem;color:var(--k-tinta);
  background:var(--k-blanco);
  border:1.5px solid var(--k-borde-control);border-radius:var(--radio);
}
.form textarea{min-height:11rem;resize:vertical;line-height:1.6}
.form select{appearance:none;padding-right:2.5rem;
  background-image:linear-gradient(45deg,transparent 50%,var(--k-tinta-70) 50%),
                   linear-gradient(135deg,var(--k-tinta-70) 50%,transparent 50%);
  background-position:calc(100% - 20px) calc(50% + 2px),calc(100% - 14px) calc(50% + 2px);
  background-size:6px 6px,6px 6px;background-repeat:no-repeat;
}
.form input::placeholder,.form textarea::placeholder{color:var(--k-tinta-60);opacity:1}

.form [aria-invalid="true"]{border-color:var(--k-error);border-width:2px}
.form__error{
  display:block;margin-top:var(--sp-2);
  color:var(--k-error);font-size:.875rem;font-weight:500;
}
/* El error nunca se señala solo con color: además del rojo hay texto, el
   borde engordado y la entrada en el resumen de arriba (SC 1.4.1, SC 3.3.1). */
.form__error::before{content:"▲ ";font-size:.8em}

.form__resumen{
  margin-bottom:var(--sp-8);padding:var(--sp-5) var(--sp-6);
  background:var(--k-error-fondo);border-left:4px solid var(--k-error);
  border-radius:0 var(--radio) var(--radio) 0;
}
.form__resumen h2,.form__resumen p:first-child{
  font-size:1rem;font-weight:600;color:var(--k-error);margin-bottom:var(--sp-3);
}
.form__resumen ul{list-style:disc;padding-left:1.35em}
.form__resumen li + li{margin-top:.35em}
.form__resumen a{color:var(--k-error);font-weight:500}

.form__casilla{display:grid;grid-template-columns:auto minmax(0,1fr);gap:var(--sp-3);align-items:start}
.form__casilla input[type="checkbox"]{
  width:1.375rem;height:1.375rem;margin:.1rem 0 0;flex:none;
  accent-color:var(--k-tuerkis-700);
}
.form__casilla label{margin:0;font-weight:400;font-size:.9375rem;line-height:1.55;color:var(--k-tinta)}
.form__casilla + .form__casilla{margin-top:var(--sp-6)}
/* El mensaje ocupa la fila entera: alineado bajo el texto, no bajo la casilla. */
.form__casilla .form__error{grid-column:1 / -1}

.form__opciones{display:flex;flex-wrap:wrap;gap:var(--sp-4) var(--sp-6)}
.form__opcion{display:flex;align-items:center;gap:var(--sp-2);min-height:44px}
.form__opcion input[type="radio"]{width:1.25rem;height:1.25rem;accent-color:var(--k-tuerkis-700)}
.form__opcion label{margin:0;font-weight:400}

.form__acc{margin-top:var(--sp-10)}
/* Trampa de miel: fuera de la vista y fuera del recorrido de foco y del árbol
   de accesibilidad. Nunca `display:none`, que algunos rellenadores detectan. */
.form__miel{
  position:absolute !important;left:-9999px !important;
  width:1px;height:1px;overflow:hidden;
}

/* Capa 1 de privacidad. Es el único <details> del sitio y está justificado:
   es texto legal de consulta, no una objeción comercial que haya que
   responder antes de que la pregunten. */
.privacidad{
  margin-top:var(--sp-8);border:1px solid var(--k-borde-suave);
  border-radius:var(--radio);background:var(--k-nieve);
}
.privacidad > summary{
  padding:var(--sp-4) var(--sp-5);cursor:pointer;
  font-family:var(--ff-mono);font-weight:500;font-size:.8125rem;letter-spacing:.08em;
  text-transform:uppercase;color:var(--k-marine-900);
  list-style-position:inside;
}
.privacidad > summary::marker{color:var(--k-tuerkis-700)}
.privacidad__cuerpo{padding:0 var(--sp-5) var(--sp-5);font-size:.9375rem;line-height:1.6}
.privacidad__cuerpo dt{font-weight:600;color:var(--k-marine-900);margin-top:var(--sp-4)}
.privacidad__cuerpo dt:first-child{margin-top:0}
.privacidad__cuerpo dd{margin:.2rem 0 0}


/* --- BUSCADOR ------------------------------------------------------------- */
.buscador{display:flex;flex-wrap:wrap;gap:var(--sp-3);max-width:32rem;margin-top:var(--sp-6)}
.buscador label{
  flex-basis:100%;font-weight:600;font-size:.9375rem;color:var(--k-marine-900);
  margin-bottom:var(--sp-1);
}
.buscador input[type="search"]{
  flex:1 1 14rem;min-width:0;min-height:44px;padding:.6875rem .875rem;
  font:inherit;font-size:1rem;color:var(--k-tinta);background:var(--k-blanco);
  border:1.5px solid var(--k-borde-control);border-radius:var(--radio);
}


/* --- 404 y páginas de utilidad -------------------------------------------- */
.utilidad{padding-block:clamp(3rem,8vw,6rem)}
.utilidad h1{
  font-size:clamp(2.125rem,1.7rem + 2vw,3rem);line-height:1.12;letter-spacing:-.018em;
  max-width:20ch;
}
.utilidad__salidas{list-style:none;display:flex;flex-wrap:wrap;gap:var(--sp-4) var(--sp-8);margin-top:var(--sp-10)}
.utilidad__salidas a{display:inline-block;padding-block:.35rem}


/* --- PIE (REDISEÑO 30-sep-2026, maqueta b1) ----------------------------------
   Banda azul muy oscura, frase grande en serifa con el botón turquesa, cuatro
   columnas (marca, navegación, contacto, idioma), «&» de marca de agua y una
   línea fina inferior con © y los textos legales. Sustituye al cajetín
   «Schriftfeld» de filas con borde. El «&» y las flechas son CSS (`content:`):
   no son texto del DOM.

   CONTRASTES (calculados sobre --mq-noche #001B30, no estimados):
   blanco 15,9:1 · rgba(255,255,255,.72) ≈ 9:1 · rgba(255,255,255,.62) ≈ 6,3:1 ·
   turquesa claro #2FC4BE ≈ 8,6:1 · botón #00243E sobre #0BA5A5 ≈ 5,2:1.
   ------------------------------------------------------------------------- */
:root{
  --mq-papel:#F7F5F0;           /* fondo de página de las maquetas (papel) */
  --mq-arena:#F0EBE3;           /* banda beige alterna */
  --mq-noche:#001B30;           /* banda azul muy oscura: pie y galerías */
  --mq-tur:#0BA5A5;             /* turquesa de relleno (botones, filetes); NO para texto claro */
  --mq-tur-claro:#2FC4BE;       /* turquesa legible SOBRE la banda oscura */
  --mq-x:max(var(--margen),calc((100% - var(--ancho)) / 2 + var(--margen)));
  --mq-y:clamp(3.5rem,7vw,6rem);
}

.pie{
  position:relative;isolation:isolate;
  overflow:hidden;overflow:clip;  /* clip: el «&» sobresale y hidden dejaba el pie desplazable por foco/scrollIntoView */
  background:var(--mq-noche);color:rgba(255,255,255,.72);
  border-top:2px solid rgba(11,165,165,.55);
  padding-block:clamp(2.75rem,5vw,4.25rem) 0;
  font-size:.9063rem;line-height:1.65;
}
.pie::after{
  content:"&";position:absolute;right:-1.25rem;bottom:-7.5rem;z-index:-1;
  font-family:var(--ff-serif);font-style:italic;font-weight:400;
  font-size:clamp(13rem,30vw,24rem);line-height:1;
  color:rgba(47,196,190,.06);pointer-events:none;user-select:none;
}
.pie a{color:var(--mq-tur-claro)}
.pie a:hover{color:var(--k-blanco)}

/* Frase + botón */
.pie__cta{
  display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--sp-6);
  padding-bottom:clamp(2rem,4vw,3.25rem);border-bottom:1px solid rgba(255,255,255,.14);
}
.pie__frase{
  margin:0;max-width:18ch;color:var(--k-blanco);text-wrap:balance;
  font-family:var(--ff-serif);font-weight:500;letter-spacing:-.008em;
  font-size:clamp(1.75rem,1.2rem + 2vw,2.625rem);line-height:1.15;
}
.pie .pie__boton{
  display:inline-flex;align-items:center;gap:.625rem;
  background:var(--mq-tur);color:#00243E;border-radius:2px;
  padding:.9375rem 1.75rem;min-height:44px;
  font-family:var(--ff-sans-display);font-weight:600;font-size:.9688rem;line-height:1.2;text-decoration:none;
  transition:background-color 200ms linear,gap 200ms linear;
}
.pie .pie__boton::after{content:"\2192";font-size:1.05em}
.pie .pie__boton:hover{background:var(--mq-tur-claro);color:#00243E;gap:1rem}

/* Cuatro columnas */
.pie__campo{
  display:grid;grid-template-columns:minmax(0,1fr);gap:var(--sp-10);
  padding-block:clamp(2.25rem,4vw,3.25rem);
}
@media (min-width:640px){.pie__campo{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (min-width:1000px){
  .pie__campo{grid-template-columns:minmax(0,1.5fr) minmax(0,.85fr) minmax(0,1.4fr) minmax(0,1fr);gap:clamp(2rem,4vw,4.25rem)}
}
.pie h2{
  margin:0 0 var(--sp-4);
  font-family:var(--ff-sans-display);font-weight:600;font-size:.75rem;line-height:1.4;
  letter-spacing:.18em;text-transform:uppercase;color:var(--mq-tur-claro);
}
.pie__logo{height:2.5rem;width:auto;max-width:100%}
.pie__lema{margin-top:var(--sp-4);max-width:30ch;color:rgba(255,255,255,.62);font-size:.9375rem;line-height:1.65}
.pie address{font-style:normal;line-height:1.7;color:rgba(255,255,255,.72)}
.pie address a{text-decoration:underline;text-underline-offset:.2em;text-decoration-thickness:.06em;overflow-wrap:anywhere;hyphens:none}
.pie__marca{color:var(--k-blanco);font-weight:600}
.pie__lista{display:flex;flex-direction:column;gap:.125rem;list-style:none}
.pie__lista a{display:inline-block;padding-block:.3rem;color:rgba(255,255,255,.78);text-decoration:none;font-size:.9063rem}
.pie__lista a:hover{color:var(--mq-tur-claro)}
.pie__perfiles{padding-bottom:var(--sp-8)}
.pie__perfiles .pie__lista{flex-direction:row;flex-wrap:wrap;gap:var(--sp-2) var(--sp-6)}

/* Idioma */
.pie__idiomas{display:flex;flex-wrap:wrap;gap:.375rem;list-style:none}
.pie .pie__idiomas a{
  display:inline-block;padding:.4375rem .75rem;min-height:32px;border-radius:2px;
  border:1px solid rgba(128,144,156,.6);color:rgba(255,255,255,.78);text-decoration:none;
  font-family:var(--ff-sans-display);font-weight:600;font-size:.75rem;letter-spacing:.04em;
}
.pie .pie__idiomas a:hover{border-color:var(--mq-tur-claro);color:var(--mq-tur-claro)}
.pie .pie__idiomas a[aria-current]{background:var(--mq-tur);border-color:var(--mq-tur);color:#00243E}
.pie__nota{margin-top:var(--sp-4);max-width:26ch;color:rgba(255,255,255,.62);font-size:.8125rem;line-height:1.6}

/* Membresías y fondos */
.pie__banda{
  display:grid;grid-template-columns:minmax(0,1fr);gap:var(--sp-8) clamp(2rem,5vw,4.5rem);
  padding-block:clamp(1.75rem,3vw,2.5rem);border-top:1px solid rgba(255,255,255,.14);
}
.pie__socios{display:flex;flex-wrap:wrap;gap:var(--sp-4);list-style:none;margin:0;padding:0;align-items:stretch}
.pie .pie__socios a{
  display:flex;align-items:center;justify-content:center;height:100%;
  background:var(--k-blanco);padding:var(--sp-3) var(--sp-4);border-radius:2px;
}
.pie__socios img{display:block;height:3.25rem;width:auto;max-width:100%}
.pie__socios li:last-child img{height:2.875rem}
/* Logos preceptivos del Kit Digital: composición oficial en una sola imagen,
   franja de ancho completo con fondo BLANCO (la imagen lleva fondo blanco y
   logos oscuros: nunca sobre azul). Sin recolorear ni recortar. */
.pie__kit{background:var(--k-blanco);padding-block:clamp(.875rem,2vw,1.5rem)}
.pie__kit .wrap{padding-inline:.75rem}
.pie__kit img{display:block;width:100%;max-width:1200px;height:auto;margin-inline:auto}
.hueco{
  width:8.5rem;height:4.5rem;border:1px dashed var(--k-tuerkis-borde);border-radius:var(--radio);
  display:flex;align-items:center;justify-content:center;text-align:center;
  font-family:var(--ff-mono);font-size:.6875rem;letter-spacing:.08em;text-transform:uppercase;
  color:var(--k-pie-texto);padding:var(--sp-2);line-height:1.3;
}

/* Línea inferior */
.pie__cierre{border-top:1px solid rgba(255,255,255,.12);font-size:.8125rem;color:rgba(255,255,255,.62)}
.pie__cierre-in{
  display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--sp-3) var(--sp-6);
  padding-block:1.125rem;
}
.pie__copy{margin:0}
.pie__legal .pie__lista{flex-direction:row;flex-wrap:wrap;gap:.25rem 1.375rem}
.pie__legal .pie__lista a{font-size:.8125rem;color:rgba(255,255,255,.72)}
.pie__legal .pie__lista a:hover{color:var(--k-blanco)}


/* --- IMPRESIÓN -------------------------------------------------------------
   El comprador industrial alemán imprime y hace circular el papel. En papel,
   una fuente sin su URL no es una fuente: por eso los enlaces del registro y
   de la prosa de mercado sacan su href detrás. Los enlaces de navegación NO
   lo hacen: en una hoja impresa, «Kontakt (https://…/kontakt/)» es ruido.
   ------------------------------------------------------------------------- */
@media print{
  :root{--ritmo:1.5rem;--margen:0}
  *{background:transparent !important;color:#000 !important;box-shadow:none !important}
  body{font-size:11pt;line-height:1.45}
  .skip,.cab__nav,.cab__cta,.cab__boton,.idi,.inhalt,.buscador,.paginacion,
  .form__acc,.gespraech__acc,.hero__acc,.utilidad__salidas,.hueco{display:none !important}
  .cab,.pie{border:0}
  .hero{border-bottom:1pt solid #000;padding-block:0 1rem}
  .sec,.sec--nieve,.sec--tuerkis,.entrada{padding-block:.6rem;break-inside:auto}
  .reg{display:block}
  .reg__rot{margin-bottom:.25rem}
  .reg__rot::before{background:#000;width:2.5rem !important}
  h1,h2,h3{break-after:avoid-page}
  h1{font-size:20pt}h2{font-size:14pt}h3{font-size:12pt}
  .citable,.voz,.faq__item p,.gespraech{border-left:2pt solid #000;background:transparent !important}
  .fuentes{break-inside:avoid}
  .fuentes th,.fuentes td{border-color:#000 !important}
  /* La URL detrás del enlace, SOLO donde la procedencia es el contenido. */
  .fuentes a::after,.prosa a[href^="http"]::after{
    content:" (" attr(href) ")";
    font-family:monospace;font-size:8.5pt;word-break:break-all;
  }
  a[href^="mailto:"]::after{content:""}
  .pie__campo{border:1pt solid #000}
  .pie__fila + .pie__fila{border-top:1pt solid #000}
}


/* ============================================================================
   ANILLO DE FOCO — LA ÚLTIMA REGLA DE LA HOJA, A PROPÓSITO.

   Va aquí y no arriba por dos motivos, y los dos son de fallo mudo:

   1. NO usa `:where()`. `:where()` tiene especificidad CERO: cualquier regla
      que WordPress, un plugin, un bloque del editor o un tema hijo añada
      después se la come EN SILENCIO, y nadie se entera hasta que un usuario de
      teclado se queda sin saber dónde está. Es el fallo exacto de la web que
      el cliente puso de referencia.
   2. Va la última para que ninguna regla POSTERIOR de esta misma hoja pueda
      anularla. Si alguien añade CSS debajo de este bloque, lo está haciendo a
      sabiendas.

   Nunca `outline:none` sin sustituto (SC 2.4.7 + SC 1.4.11).
   ========================================================================= */
a:focus-visible,
button:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
summary:focus-visible,
[tabindex]:focus-visible{
  outline:3px solid var(--k-marine-900);
  outline-offset:2px;
  /* El separador blanco no es adorno: sobre el botón turquesa el anillo
     marino directo solo daría 2,32 (falla el 3:1 de SC 1.4.11), y el
     separador blanco que se interpone entre los dos da 5,84 — recalculado
     con `_scratch/contraste-tema.py` sobre la paleta marino+turquesa vigente. */
  box-shadow:0 0 0 2px var(--k-blanco);
  border-radius:2px;
}

/* Sobre la banda oscura del pie el anillo azul da 1,00 contra el fondo. Ahí se
   invierte: anillo blanco (14,39) con separador oscuro. Es más robusto que
   fiarlo todo al halo blanco de 2 px. */
.pie a:focus-visible,
.pie button:focus-visible{
  outline-color:var(--k-blanco);
  box-shadow:0 0 0 2px var(--k-marine-900);
}

/* El destino del skip-link recibe foco programático: se le marca, pero sin el
   halo, que sobre un bloque de 1200 px de ancho no dice nada. */
main:focus-visible{
  outline:3px solid var(--k-marine-900);
  outline-offset:-3px;
  box-shadow:none;
}


/* ============================================================================
   FOTOS DE SASCHA (30-sep-2026)
   Cinco fotos de la mediateca colocadas desde las plantillas (page.php,
   leistungen-foto.php, cierre.php), sin tocar el texto de ningún post.
   Mismo lenguaje de tarjeta que el resto del tema: esquina superior derecha
   cortada en diagonal + sombra marino suave. width/height los pone
   wp_get_attachment_image (sin CLS) y hay srcset + carga diferida.
   ========================================================================= */
.foto-sascha{margin:0;overflow:hidden;box-shadow:0 20px 44px rgba(0,36,62,.14);background:var(--k-nieve)}
.foto-sascha img{display:block;width:100%;height:100%;object-fit:cover}

/* Retrato junto al inicio del contenido (/ueber-mich/, /kontakt/) */
.foto-retrato{
  width:min(100%,20rem);aspect-ratio:4/5;margin:0 0 var(--sp-8);
  clip-path:polygon(0 0,calc(100% - 40px) 0,100% 40px,100% 100%,0 100%);
}
.foto-retrato img{object-position:50% 12%}
@media (min-width:900px){
  .foto-retrato{float:right;width:15rem;margin:0 0 var(--sp-8) var(--sp-8)}
}

/* Segunda foto de /ueber-mich/, intercalada entre bloques del contenido */
.foto-segunda{
  width:min(100%,20rem);aspect-ratio:4/5;margin:var(--sp-10) 0;
  clip-path:polygon(0 0,calc(100% - 40px) 0,100% 40px,100% 100%,0 100%);
}
.foto-segunda{border-top:4px solid var(--k-tuerkis-700)}
.foto-segunda img{object-position:50% 15%}

/* Banda ancha de /leistungen/ con la foto real: el encuadre sube para no
   cortar la cabeza al pasar de 3:2 a 21:9. */
.pagina-foto--sascha img{object-position:50% 22%}

/* Cierre de la portada: tarjeta + foto */
.gespraech-con-foto{display:grid;gap:var(--sp-8);align-items:center}
.foto-cierre{
  width:min(100%,19rem);aspect-ratio:2/3;
  clip-path:polygon(0 0,calc(100% - 40px) 0,100% 40px,100% 100%,0 100%);
}
.foto-cierre img{object-position:50% 30%}
@media (min-width:900px){
  .gespraech-con-foto{grid-template-columns:minmax(0,1fr) 17rem;gap:var(--sp-10)}
  .gespraech-con-foto .gespraech{max-width:none}
  .foto-cierre{width:100%}
}
