/* mejorando.es — gemeinsame Gestaltung fuer Start- und Unterseiten.
   Ausgelagert am 21.08.2026, als die Leistungsseiten dazukamen. */

/* ------------------------------------------------------------------
   mejorando.es -- Reformas en Barcelona
   Farben: warmes Grau als Grund, Markengelb NUR als Akzent (nie als
   Flaeche hinter Text -- Gelb auf Weiss ist unlesbar, und Schwarz auf
   Gelb schreit). Zweitfarbe ist ein tiefes Blaugrau, kein Terrakotta:
   Terrakotta-auf-Creme ist der Standardgriff und sieht nach Vorlage aus.
   ------------------------------------------------------------------ */
:root{
  --grund:#f7f6f3;
  --flaeche:#ffffff;
  --tief:#1a1917;
  --text:#2c2a26;
  --leise:#6b675f;
  --linie:#e2ded6;
  --akzent:#fbd232;
  --zweit:#2b3a42;
  --ok:#1e7a4f;
  --fehler:#b3261e;
  /* ⚠ 1440 statt 1180 (Manuel, 23.08.: „mach den container 1440px und hoere
     auf staendig Seiten mit mini container zu machen ... auf meinem ultrawide
     sieht es einfach nur schrecklich aus").
     Das geht hier ohne Nebenwirkung, weil die LESETEXTE eigene Grenzen in
     `ch` haben (74ch fuer Abschnitte, 68ch fuer FAQ, 76ch fuer den Kopf).
     Ein breiter Container macht also die RASTER breiter -- Karten, Bilder,
     Hero -- ohne die Zeilen zu verlaengern. Beides zu koppeln waere der
     Fehler, der zu 1180 gefuehrt hat. */
  --breit:1440px;
  --radius:4px;
  --schatten:0 1px 2px rgba(26,25,23,.06), 0 8px 24px rgba(26,25,23,.06);
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{
  margin:0; background:var(--grund); color:var(--text);
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  font-size:17px; line-height:1.62; -webkit-font-smoothing:antialiased;
}
/* ⚠ height:auto ist hier kein Beiwerk. Die <img> tragen width/height als
   Attribut, damit der Browser den Platz vor dem Laden kennt und nichts
   springt. Ohne height:auto gilt aber genau dieses Attribut als Hoehe --
   aspect-ratio wird dann still ignoriert. Gemessen: das Hero-Bild stand
   mit 526x1200 statt 526x394 auf der Seite, der Hero war 1377px hoch und
   die H1 begann erst bei y=563. Keine Fehlermeldung, nur ein Hero, der
   leer aussieht. */
img{max-width:100%; display:block; height:auto}
a{color:inherit}
h1,h2,h3{line-height:1.15; text-wrap:balance; margin:0; color:var(--tief); letter-spacing:-.02em}
h1{font-size:clamp(2.1rem,5.4vw,3.7rem); font-weight:800}
h2{font-size:clamp(1.6rem,3.4vw,2.5rem); font-weight:750}
h3{font-size:1.12rem; font-weight:700; letter-spacing:-.01em}
p{margin:0}
.envoltura{max-width:var(--breit); margin:0 auto; padding-inline:clamp(20px,4vw,64px)}
.seccion{padding:clamp(56px,8vw,104px) 0}
.seccion--claro{background:var(--flaeche)}
.rotulo{
  font-size:.735rem; font-weight:800; letter-spacing:.14em; text-transform:uppercase;
  color:var(--leise); display:flex; align-items:center; gap:11px; margin-bottom:14px;
}
.rotulo::before{content:""; width:26px; height:3px; background:var(--akzent); flex:none; border-radius:2px}
.entradilla{color:var(--leise); max-width:60ch; margin-top:14px; font-size:1.05rem}

/* --- Kopf ------------------------------------------------------- */
.cabecera{
  position:sticky; top:0; z-index:50; background:rgba(247,246,243,.93);
  backdrop-filter:saturate(160%) blur(9px); border-bottom:1px solid var(--linie);
}
.cabecera__int{max-width:var(--breit); margin:0 auto;
  padding-block:13px; padding-inline:clamp(20px,4vw,64px);
  display:flex; align-items:center; gap:18px}
.marca{font-weight:800; font-size:1.24rem; letter-spacing:-.03em; color:var(--tief); text-decoration:none}
.marca span{color:var(--akzent); -webkit-text-stroke:.6px var(--tief)}
.nav{margin-left:auto; display:flex; gap:26px}
.nav a{color:var(--leise); text-decoration:none; font-size:.93rem; font-weight:600}
.nav a:hover{color:var(--tief)}
@media(max-width:860px){.nav{display:none}}
/* Auf schmalen Geraeten nimmt der Button im Kopf ueber die halbe Breite und
   draengt die Marke an den Rand. Er darf weg: derselbe Button steht im Hero
   direkt darunter, also verliert niemand einen Weg zum Formular. */
@media(max-width:560px){.cabecera .boton{display:none}}

/* --- Schaltflaechen --------------------------------------------- */
.boton{
  display:inline-flex; align-items:center; justify-content:center; gap:9px;
  padding:14px 26px; border-radius:var(--radius); font-weight:700; font-size:1rem;
  text-decoration:none; border:2px solid transparent; cursor:pointer;
  transition:transform .12s ease, box-shadow .12s ease, background .12s ease;
}
.boton:hover{transform:translateY(-1px)}
.boton--principal{background:var(--tief); color:#fff; box-shadow:var(--schatten)}
.boton--principal:hover{background:#000}
/* Das Gelb sitzt als Kante, nicht als Flaeche: so bleibt der Text lesbar
   und die Marke ist trotzdem im Bild. */
.boton--principal{border-bottom:3px solid var(--akzent)}
.boton--secundario{background:transparent; color:var(--tief); border-color:var(--linie)}
.boton--secundario:hover{border-color:var(--tief)}

/* --- Hero -------------------------------------------------------- */
.hero{background:var(--flaeche); border-bottom:1px solid var(--linie); overflow:hidden}
.hero__int{
  max-width:var(--breit); margin:0 auto;
  padding-block:clamp(46px,7vw,88px); padding-inline:clamp(20px,4vw,64px);
  display:grid; grid-template-columns:1.02fr .98fr; gap:clamp(30px,5vw,62px); align-items:center;
}
@media(max-width:900px){.hero__int{grid-template-columns:1fr; padding-top:38px}}
.hero__sub{margin-top:19px; font-size:clamp(1.04rem,1.9vw,1.2rem); color:var(--leise); max-width:52ch}
.hero__acciones{margin-top:30px; display:flex; gap:13px; flex-wrap:wrap}
/* Untereinander gestellt sahen die beiden Schaltflaechen verschieden breit
   aus, weil jede nur so breit war wie ihr Text. Nebeneinander stoert das
   nicht, untereinander schon. */
@media(max-width:560px){
  .hero__acciones{flex-direction:column; align-items:stretch}
  .hero__acciones .boton{width:100%}
}
.hero__medio{position:relative}
.hero__medio img{border-radius:var(--radius); box-shadow:var(--schatten); width:100%; aspect-ratio:4/3; object-fit:cover}
.hero__sello{
  position:absolute; left:-14px; bottom:-14px; background:var(--akzent); color:var(--tief);
  padding:13px 17px; border-radius:var(--radius); font-weight:800; line-height:1.2;
  box-shadow:var(--schatten); max-width:190px; font-size:.9rem;
}
.hero__sello b{display:block; font-size:1.5rem}
@media(max-width:900px){.hero__sello{left:auto; right:8px; bottom:-10px}}

/* --- Vertrauen ---------------------------------------------------- */
.confianza{display:grid; grid-template-columns:repeat(auto-fit,minmax(228px,1fr)); gap:1px;
  background:var(--linie); border:1px solid var(--linie); border-radius:var(--radius); overflow:hidden}
.confianza__it{background:var(--flaeche); padding:26px 24px}
.confianza__it h3{margin-bottom:7px}
.confianza__it p{color:var(--leise); font-size:.95rem}
.confianza__n{font-size:.72rem; font-weight:800; color:var(--akzent); -webkit-text-stroke:.5px var(--zweit);
  letter-spacing:.1em; display:block; margin-bottom:11px}

/* --- Leistungen --------------------------------------------------- */
.servicios{display:grid; grid-template-columns:repeat(auto-fit,minmax(268px,1fr)); gap:16px; margin-top:38px}
.servicio{
  background:var(--flaeche); border:1px solid var(--linie); border-radius:var(--radius);
  padding:25px 24px; transition:border-color .14s ease, transform .14s ease;
}
.servicio:hover{border-color:var(--zweit); transform:translateY(-2px)}
.servicio h3{margin-bottom:8px}
.servicio p{color:var(--leise); font-size:.94rem}

/* --- Antes y Despues (Kernstueck) --------------------------------- */
/* ⚠ KEIN Vergleichs-Schieberegler: die Fotos sind vor und nach dem Umbau
   freihand aufgenommen, keine Perspektive deckt sich exakt. Ein Slider
   wuerde zwei nicht deckungsgleiche Bilder uebereinanderschieben und
   dadurch kaputt aussehen. Ein Umschalter zeigt jedes Bild ganz. */
.obras{display:grid; grid-template-columns:repeat(auto-fit,minmax(320px,1fr)); gap:22px; margin-top:40px}
.obra{background:var(--flaeche); border:1px solid var(--linie); border-radius:var(--radius); overflow:hidden}
.obra__marco{position:relative; aspect-ratio:4/3; background:#eceae5}
.obra__marco img{
  position:absolute; inset:0; width:100%; height:100%; object-fit:cover;
  opacity:0; transition:opacity .28s ease;
}
.obra__marco img.activa{opacity:1}
.obra__mando{
  position:absolute; left:12px; bottom:12px; z-index:2; display:flex;
  background:rgba(26,25,23,.82); border-radius:var(--radius); overflow:hidden;
  backdrop-filter:blur(4px);
}
.obra__mando button{
  border:0; background:transparent; color:#fff; padding:8px 15px; font-size:.79rem;
  font-weight:800; letter-spacing:.07em; text-transform:uppercase; cursor:pointer;
  font-family:inherit; transition:background .14s ease, color .14s ease;
}
.obra__mando button[aria-pressed="true"]{background:var(--akzent); color:var(--tief)}
.obra__mando button:focus-visible{outline:2px solid #fff; outline-offset:-3px}
.obra__texto{padding:21px 22px 24px}
.obra__texto h3{margin-bottom:8px}
.obra__texto p{color:var(--leise); font-size:.94rem}

/* --- Ablauf ------------------------------------------------------- */
.proceso{display:grid; grid-template-columns:repeat(auto-fit,minmax(232px,1fr)); gap:26px; margin-top:40px}
.paso{position:relative; padding-top:23px; border-top:3px solid var(--linie)}
/* Die Nummerierung ist hier keine Deko: der Ablauf IST eine Reihenfolge. */
.paso--activo{border-top-color:var(--akzent)}
.paso__n{font-size:.75rem; font-weight:800; letter-spacing:.12em; color:var(--leise); display:block; margin-bottom:9px}
.paso h3{margin-bottom:8px}
.paso p{color:var(--leise); font-size:.94rem}

/* --- Gewerke ------------------------------------------------------ */
.gremios{display:grid; grid-template-columns:repeat(auto-fit,minmax(215px,1fr)); gap:14px; margin-top:34px}
.gremio{display:flex; gap:12px; align-items:flex-start; padding:15px 17px;
  background:var(--flaeche); border:1px solid var(--linie); border-radius:var(--radius)}
.gremio::before{content:""; width:7px; height:7px; border-radius:50%; background:var(--akzent);
  margin-top:9px; flex:none; box-shadow:0 0 0 3px rgba(251,210,50,.22)}
.gremio b{display:block; color:var(--tief); font-size:.97rem}
.gremio span{color:var(--leise); font-size:.87rem}

/* --- Vermittler-Abschnitt ----------------------------------------- */
.intermediario{background:var(--zweit); color:#e8ecee}
.intermediario h2{color:#fff}
.intermediario .rotulo{color:#a9b8c0}
.intermediario__int{display:grid; grid-template-columns:1fr 1fr; gap:clamp(26px,5vw,58px); align-items:center}
@media(max-width:860px){.intermediario__int{grid-template-columns:1fr}}
.intermediario p{color:#cdd7dc; margin-top:16px}
.intermediario img{border-radius:var(--radius); aspect-ratio:3/2; object-fit:cover}

/* --- Formular ----------------------------------------------------- */
.contacto__int{display:grid; grid-template-columns:.88fr 1.12fr; gap:clamp(28px,5vw,56px)}
@media(max-width:860px){.contacto__int{grid-template-columns:1fr}}
.formulario{background:var(--flaeche); border:1px solid var(--linie); border-radius:var(--radius);
  padding:clamp(24px,3.4vw,36px); box-shadow:var(--schatten)}
.campo{margin-bottom:17px}
.campo label{display:block; font-size:.86rem; font-weight:700; color:var(--tief); margin-bottom:7px}
.campo label .req{color:var(--fehler); margin-left:2px}
.campo input,.campo select,.campo textarea{
  width:100%; padding:12px 14px; border:1px solid var(--linie); border-radius:var(--radius);
  font-family:inherit; font-size:1rem; color:var(--text); background:var(--grund);
  transition:border-color .14s ease, box-shadow .14s ease;
}
.campo input:focus,.campo select:focus,.campo textarea:focus{
  outline:0; border-color:var(--zweit); box-shadow:0 0 0 3px rgba(43,58,66,.13); background:#fff;
}
.campo textarea{min-height:118px; resize:vertical}
.campo--error input,.campo--error select,.campo--error textarea{border-color:var(--fehler)}
.campo__aviso{display:none; color:var(--fehler); font-size:.82rem; margin-top:6px; font-weight:600}
.campo--error .campo__aviso{display:block}
.privacidad{font-size:.83rem; color:var(--leise); margin:16px 0 20px; line-height:1.5}
.privacidad a{color:var(--zweit); font-weight:600}
.formulario .boton{width:100%}
.resultado{margin-top:16px; padding:14px 16px; border-radius:var(--radius); font-weight:600;
  font-size:.94rem; display:none}
.resultado--ok{display:block; background:rgba(30,122,79,.1); color:var(--ok); border:1px solid rgba(30,122,79,.3)}
.resultado--fallo{display:block; background:rgba(179,38,30,.08); color:var(--fehler); border:1px solid rgba(179,38,30,.28)}
/* Honeypot: fuer Menschen unsichtbar, fuer einfache Bots ein Pflichtfeld.
   Kein display:none -- manche Bots ueberspringen genau das. */
.trampa{position:absolute; left:-9999px; width:1px; height:1px; overflow:hidden}
.zonas{margin-top:26px; font-size:.9rem; color:var(--leise)}
.zonas b{color:var(--tief); display:block; margin-bottom:7px; font-size:.95rem}

/* --- Fuss --------------------------------------------------------- */
.pie{background:var(--tief); color:#a8a49c; padding:52px 0 30px; font-size:.9rem}
.pie__int{display:grid; grid-template-columns:1.35fr 1fr 1fr; gap:32px}
@media(max-width:760px){.pie__int{grid-template-columns:1fr}}
.pie h4{color:#fff; font-size:.79rem; letter-spacing:.12em; text-transform:uppercase; margin:0 0 13px}
.pie a{color:#a8a49c; text-decoration:none}
.pie a:hover{color:#fff}
.pie ul{list-style:none; margin:0; padding:0}
.pie li{margin-bottom:8px}
/* ⚠ #8d897f statt #7d7970: gemessen kam die alte Farbe auf dem Fussgrund
   #1a1917 nur auf Kontrast 4.05, WCAG verlangt 4.5 fuer Fliesstext.
   Ausgerechnet die Zeile mit den Betreiberdaten war die einzige auf allen
   26 Seiten, die durchfiel. Der neue Wert liegt bei 5.03, also mit Reserve --
   4.5 exakt zu treffen heisst, beim naechsten Farbdreh wieder darunter zu
   liegen. Farbton unveraendert, nur aufgehellt. */
.pie__legal{border-top:1px solid #34322d; margin-top:34px; padding-top:20px;
  font-size:.82rem; color:#8d897f; line-height:1.6}
.pie__marca{font-weight:800; font-size:1.2rem; color:#fff; letter-spacing:-.03em}
.pie__marca span{color:var(--akzent)}
@media(prefers-reduced-motion:reduce){
  *{animation:none !important; transition:none !important}
  html{scroll-behavior:auto}
}

/* ===================================================================
   Leistungsseiten (21.08.2026)
   Eigene Bausteine, gleiche Grundfarben und Typo wie die Startseite.
   =================================================================== */

/* Brotkrumen: sagen, wo man ist, ohne eine eigene Zeile Aufmerksamkeit
   zu verlangen. Deshalb klein und leise, aber anklickbar. */
.migas{font-size:.84rem; color:var(--leise); padding:16px 0 0}
.migas a{color:var(--leise); text-decoration:none}
.migas a:hover{color:var(--tief); text-decoration:underline}
.migas span{margin:0 7px; opacity:.5}

.encabezado-servicio{background:var(--flaeche); border-bottom:1px solid var(--linie)}
.encabezado-servicio__int{
  max-width:var(--breit); margin:0 auto;
  padding-block:26px clamp(38px,5vw,62px); padding-inline:clamp(20px,4vw,64px);
  display:grid; grid-template-columns:1.15fr .85fr; gap:clamp(26px,4vw,52px); align-items:center;
}
@media(max-width:880px){.encabezado-servicio__int{grid-template-columns:1fr}}
.encabezado-servicio h1{font-size:clamp(1.85rem,4.3vw,3rem); margin-top:12px}
.encabezado-servicio__intro{margin-top:17px; font-size:1.06rem; color:var(--leise); max-width:56ch}
.encabezado-servicio__acciones{margin-top:26px; display:flex; gap:12px; flex-wrap:wrap}
@media(max-width:560px){
  .encabezado-servicio__acciones{flex-direction:column; align-items:stretch}
  .encabezado-servicio__acciones .boton{width:100%}
}
.encabezado-servicio img{border-radius:var(--radius); box-shadow:var(--schatten);
  aspect-ratio:4/3; object-fit:cover; width:100%}

/* Fliesstext-Abschnitte: eine Spalte, begrenzte Zeilenlaenge. Zwei Spalten
   waeren hier falsch -- man liest den Text, man ueberfliegt ihn nicht. */
.bloques{display:grid; gap:clamp(26px,3.4vw,40px); margin-top:36px; max-width:74ch}
.bloque h2{font-size:clamp(1.3rem,2.4vw,1.72rem); margin-bottom:11px}
.bloque p{color:var(--text)}

/* FAQ als <details>: klappt ohne eine Zeile JavaScript auf, funktioniert
   auch wenn das Skript nicht laedt, und die Suche im Browser findet den
   Text trotzdem. */
.faq{margin-top:34px; max-width:74ch; border-top:1px solid var(--linie)}
.faq details{border-bottom:1px solid var(--linie)}
.faq summary{
  padding:17px 34px 17px 0; cursor:pointer; font-weight:700; color:var(--tief);
  list-style:none; position:relative; font-size:1.02rem;
}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{
  content:""; position:absolute; right:6px; top:50%; width:9px; height:9px;
  border-right:2px solid var(--leise); border-bottom:2px solid var(--leise);
  transform:translateY(-70%) rotate(45deg); transition:transform .16s ease;
}
.faq details[open] summary::after{transform:translateY(-30%) rotate(-135deg)}
.faq summary:focus-visible{outline:2px solid var(--zweit); outline-offset:3px}
.faq p{padding:0 0 19px; color:var(--leise); max-width:68ch}

/* Querverweise auf die anderen Leistungen */
.otros{display:grid; grid-template-columns:repeat(auto-fit,minmax(215px,1fr)); gap:12px; margin-top:32px}
.otro{
  display:block; padding:15px 17px; background:var(--flaeche); border:1px solid var(--linie);
  border-radius:var(--radius); text-decoration:none; color:var(--tief); font-weight:650;
  font-size:.95rem; transition:border-color .14s ease, transform .14s ease;
}
.otro:hover{border-color:var(--zweit); transform:translateY(-2px)}
.otro span{display:block; font-weight:400; color:var(--leise); font-size:.85rem; margin-top:4px}

/* Die Leistungskarten der Startseite sind jetzt Verweise auf die
   Unterseiten. Als <a> erben sie sonst Unterstreichung und Linkfarbe. */
a.servicio{text-decoration:none; color:inherit; display:block}
a.servicio h3::after{content:" \203A"; color:var(--leise); font-weight:400}
a.servicio:hover h3::after{color:var(--tief)}

/* Leistungsseiten ohne eigenes Foto: eine Spalte statt zwei. Ohne diese
   Regel bliebe rechts eine leere Rasterspalte stehen und der Text saesse
   auf der halben Breite, als fehle dort etwas. */
/* ⚠ Die Begrenzung gehoert an den TEXT, nicht an den Rastercontainer.
   Der Container hat margin:0 auto -- eine max-width darauf zentriert den
   ganzen Block, waehrend die Brotkrumen darueber linksbuendig bleiben.
   Gesehen wurde das nur im Screenshot: die Messung meldete 0 px Ueberhang,
   weil nichts ueberlief. Es stand nur alles an der falschen Stelle. */
.encabezado-servicio__int--solo{grid-template-columns:1fr}
.encabezado-servicio__int--solo > div{max-width:76ch}

/* Gewerke-Kacheln, die auf eine eigene Seite zeigen. Fuenf von sieben haben
   eine; die beiden ohne bleiben <div> und sollen genauso aussehen. */
a.gremio{text-decoration:none; color:inherit}
a.gremio b::after{content:" \203A"; color:var(--leise); font-weight:400}
a.gremio:hover b::after{color:var(--tief)}

/* ===================================================================
   Kopfzeile mit echtem Logo und Menue (21.08.2026)

   ⚠ ANLASS (Manuel, 08:31): "ist auf mobile kein Hero? Ich sehe kein
   mobile menu und das Logo ist weg". Alle drei Punkte trafen zu:
   - Das Logo war nur ein Schriftzug. Die Firma HAT ein Logo (gelbes
     Sechseck mit Haus und Schraubenschluessel), es lag in einem
     Upload-Ordner von 2020 und tauchte in der Mediathek-Liste nicht auf.
   - Die Navigation war unter 860 px auf display:none gesetzt -- OHNE
     Ersatz. Auf dem Handy stand im Kopf nur der Schriftzug, sonst nichts.
     Das ist kein Aufraeumen, das ist eine fehlende Navigation.
   - Der Hero zeigte auf dem Handy zuerst 500 px Text, das Bild kam erst
     nach dem Scrollen. Technisch da, als Hero aber nicht wahrnehmbar.
   =================================================================== */

.marca{display:flex; align-items:center; flex:none}
.marca img{width:150px; height:auto}
@media(max-width:420px){.marca img{width:132px}}

/* Menue-Knopf: drei Striche, die sich beim Oeffnen zum Kreuz drehen. */
.menu-boton{
  display:none; margin-left:auto; width:44px; height:44px; padding:10px;
  background:transparent; border:1px solid var(--linie); border-radius:var(--radius);
  cursor:pointer; flex-direction:column; justify-content:space-between;
}
.menu-boton span{
  display:block; height:2px; width:100%; background:var(--tief); border-radius:2px;
  transition:transform .2s ease, opacity .2s ease;
}
.menu-boton[aria-expanded="true"] span:nth-child(1){transform:translateY(9px) rotate(45deg)}
.menu-boton[aria-expanded="true"] span:nth-child(2){opacity:0}
.menu-boton[aria-expanded="true"] span:nth-child(3){transform:translateY(-9px) rotate(-45deg)}
.menu-boton:focus-visible{outline:2px solid var(--zweit); outline-offset:2px}

@media(max-width:860px){
  .menu-boton{display:flex}
  .cabecera__int{flex-wrap:wrap; gap:0}
  /* Das Menue klappt als eigene Zeile unter den Kopf. Nicht als
     Vollbild-Overlay: bei fuenf Eintraegen ist das ueberzogen, und ein
     Overlay muss man erst wieder schliessen. */
  .nav{
    display:flex; flex-direction:column; width:100%; order:3;
    max-height:0; overflow:hidden; gap:0;
    transition:max-height .26s ease;
  }
  .nav[data-abierto="true"]{max-height:420px}
  .nav a{
    padding:14px 2px; border-top:1px solid var(--linie); font-size:1rem;
    color:var(--tief);
  }
  /* Der Hauptknopf gehoert ins Menue, nicht daneben: im Kopf nahm er
     ueber die halbe Breite und drueckte das Logo an den Rand. */
  .cabecera .boton{
    display:none; order:4; width:100%; margin:12px 0 14px;
  }
  .nav[data-abierto="true"] ~ .boton{display:inline-flex}
}
@media(prefers-reduced-motion:reduce){
  .nav{transition:none}
}

/* --- Hero auf dem Handy: erst das Bild, dann der Text ---------------
   Auf dem Handy stapelt das Raster untereinander, und der Textblock ist
   rund 500 px hoch. Wer die Seite oeffnet, sah eine Textwand. Mit
   order:-1 steht das Bild oben und der Hero ist als solcher erkennbar.
   Am DOM aendert das nichts, die H1 bleibt das erste Element im Quelltext. */
@media(max-width:900px){
  .hero__medio{order:-1; margin-bottom:26px}
  .hero__medio img{aspect-ratio:16/10}
  .hero__int{padding-top:26px}
  .hero__sello{left:8px; right:auto; bottom:-12px}
}

/* Das Siegel war auf dem Handy zu gross: es verdeckte die halbe Kueche.
   Auf schmalen Geraeten deshalb einzeilig und deutlich kleiner -- es soll
   das Bild ergaenzen, nicht ersetzen. */
@media(max-width:560px){
  .hero__sello{
    max-width:none; width:auto; padding:8px 13px; font-size:.79rem;
    line-height:1.25; display:flex; align-items:baseline; gap:7px;
    left:8px; right:auto; bottom:-11px;
  }
  .hero__sello b{display:inline; font-size:1.18rem}
}

/* Das Logo ist der Weg zurueck zur Startseite und war als Tippflaeche nur
   28 px hoch. Padding statt groesserem Bild: die Flaeche waechst, das Logo
   bleibt gleich gross. */
.marca{padding:8px 0}

/* Rechtstexte: eine Spalte, ruhig, gut lesbar. Kein Schmuck -- die Seite
   wird gelesen, weil jemand etwas nachschlagen will. */
.legal{max-width:72ch; display:grid; gap:clamp(24px,3vw,34px)}
.legal h2{font-size:clamp(1.2rem,2.2vw,1.55rem); margin-bottom:10px}
.legal p{color:var(--text)}
.legal a{color:var(--zweit); font-weight:600}
/* Die Fusszeile bekommt jetzt Verweise auf die Rechtsseiten. */
.pie h4 + ul a{text-decoration:none}

/* Der Fuss hat jetzt vier Spalten statt drei. */
.pie__int{grid-template-columns:1.35fr 1fr 1fr 1fr}
@media(max-width:900px){.pie__int{grid-template-columns:1fr 1fr}}
@media(max-width:560px){.pie__int{grid-template-columns:1fr}}

/* --- Leistungskarten mit Bild (21.08.2026) -------------------------
   ⚠ Sechs der neun Karten tragen ein Foto, drei nicht -- fuer Ladenlokale,
   Geschaefte und Industriehallen gibt es kein einziges echtes Bild. Statt
   ein fremdes Motiv einzusetzen, bekommen diese drei eine ruhige Flaeche
   in der Grundfarbe. Gleiche Hoehe, gleiche Form: das Raster bleibt
   gleichmaessig, ohne etwas zu behaupten. */
.servicio{padding:0; overflow:hidden; display:flex; flex-direction:column}
.servicio__img,
.servicio__sin{
  width:100%; height:170px; object-fit:cover; display:block; flex:none;
  border-bottom:1px solid var(--linie);
}
.servicio__sin{
  background:
    repeating-linear-gradient(135deg,
      var(--grund) 0 14px, #efece6 14px 28px);
}
.servicio__txt{padding:22px 24px 25px}
.servicio__txt h3{margin-bottom:8px}
.servicio__txt p{color:var(--leise); font-size:.94rem}
/* Beim Ueberfahren zieht das Bild leicht an -- ein Hinweis, dass die Karte
   ein Verweis ist, ohne zusaetzliche Beschriftung. */
.servicio__img{transition:transform .3s ease}
a.servicio:hover .servicio__img{transform:scale(1.03)}
@media(prefers-reduced-motion:reduce){.servicio__img{transition:none}}

/* ⚠ DREI Spalten, nicht vier: Es sind genau NEUN Leistungen. Bei vier
   Spalten ergibt das 4+4+1 und die letzte Karte steht allein am Ende --
   bei drei Spalten sind es drei volle Reihen. Die Spaltenzahl folgt hier
   der Anzahl der Inhalte, nicht der verfuegbaren Breite. */
.servicios{grid-template-columns:repeat(auto-fit,minmax(300px,1fr))}
@media(min-width:1000px){.servicios{grid-template-columns:repeat(3,1fr)}}

/* --- Glossar (21.08.2026) --------------------------------------------
   Der Definitionskasten steht direkt unter der Ueberschrift. Wer einen
   Begriff nachschlaegt, hat seine Antwort nach zwei Saetzen; alles Weitere
   ist fuer die, die mehr wollen. */
.definicion{
  margin-top:20px; padding:20px 24px; background:var(--flaeche);
  border:1px solid var(--linie); border-left:4px solid var(--akzent);
  border-radius:var(--radius); font-size:1.1rem; line-height:1.6;
  color:var(--tief); max-width:62ch;
}

/* Uebersicht: nach Anfangsbuchstaben gruppiert. Bei zwanzig Eintraegen ist
   das noch keine Notwendigkeit, bei hundert schon -- und die Struktur jetzt
   anzulegen kostet nichts. */
.glosario-grupo{margin-top:38px}
.glosario-grupo h2{
  font-size:1.5rem; padding-bottom:8px; border-bottom:2px solid var(--akzent);
  display:inline-block; margin-bottom:18px;
}
.glosario-lista{display:grid; grid-template-columns:repeat(auto-fit,minmax(290px,1fr)); gap:14px}
.glosario-item{
  display:block; padding:18px 20px; background:var(--flaeche);
  border:1px solid var(--linie); border-radius:var(--radius);
  text-decoration:none; color:inherit;
  transition:border-color .14s ease, transform .14s ease;
}
.glosario-item:hover{border-color:var(--zweit); transform:translateY(-2px)}
.glosario-item b{display:block; color:var(--tief); font-size:1.03rem; margin-bottom:5px}
.glosario-item b::after{content:" \203A"; color:var(--leise); font-weight:400}
.glosario-item span{color:var(--leise); font-size:.9rem; line-height:1.5}

/* Sprungleiste zu den Buchstaben */
.glosario-abc{display:flex; flex-wrap:wrap; gap:7px; margin-top:26px}
.glosario-abc a{
  display:inline-flex; align-items:center; justify-content:center;
  min-width:38px; height:38px; padding:0 9px; border:1px solid var(--linie);
  border-radius:var(--radius); text-decoration:none; color:var(--tief);
  font-weight:700; background:var(--flaeche);
}
.glosario-abc a:hover{border-color:var(--zweit)}

/* --- Glossar: Inhaltsverzeichnis, Listen, Quellen ---------------------
   ⚠ Inhaltsverzeichnis erst ab vier Abschnitten (so steht es im
   zds-Prozess). Bei zwei Abschnitten ist es laenger als der Weg, den es
   abkuerzt. Die Anker sind lesbar (#como-se-instala, nicht #s-3): Wer den
   Link kopiert und weiterschickt, soll daran sehen, wohin er fuehrt. */
.indice{
  background:var(--flaeche); border:1px solid var(--linie);
  border-radius:var(--radius); padding:20px 24px; margin-bottom:34px;
  max-width:64ch;
}
.indice p{font-size:.76rem; font-weight:800; letter-spacing:.12em;
  text-transform:uppercase; color:var(--leise); margin-bottom:12px}
.indice ol{margin:0; padding-left:20px; display:grid; gap:7px}
.indice a{color:var(--zweit); text-decoration:none; font-weight:600}
.indice a:hover{text-decoration:underline}

.lista-bloque{margin-top:clamp(28px,3.4vw,40px); max-width:74ch}
.lista-bloque h2{font-size:clamp(1.3rem,2.4vw,1.72rem); margin-bottom:14px}
.lista-bloque ul{margin:0; padding:0; list-style:none; display:grid; gap:11px}
.lista-bloque li{
  padding-left:26px; position:relative; color:var(--text);
}
.lista-bloque li::before{
  content:""; position:absolute; left:0; top:9px;
  width:9px; height:9px; border-radius:2px; background:var(--akzent);
}
/* Fehlerliste bekommt ein anderes Zeichen -- eine Liste, die vor etwas
   warnt, soll nicht wie eine Empfehlungsliste aussehen. */
.lista-bloque--errores li::before{
  background:none; border-left:2px solid var(--fehler);
  border-bottom:2px solid var(--fehler); width:8px; height:8px;
  transform:rotate(-45deg); top:8px; border-radius:0;
}

.fuentes{
  margin-top:clamp(30px,4vw,46px); padding-top:22px;
  border-top:1px solid var(--linie); max-width:74ch;
}
.fuentes p{font-size:.76rem; font-weight:800; letter-spacing:.12em;
  text-transform:uppercase; color:var(--leise); margin-bottom:12px}
.fuentes ol{margin:0; padding-left:20px; display:grid; gap:10px;
  font-size:.92rem; color:var(--leise)}
.fuentes a{color:var(--zweit); font-weight:600}

/* --- Schaubilder (21.08.2026) ----------------------------------------
   ⚠ HTML-Karten im Grid, KEIN SVG mit fester viewBox: Ein SVG wird auf
   360 px gestaucht, bis die Beschriftung bei sechs Pixeln landet.
   `auto-fit` mit `minmax` bricht dagegen von selbst um.

   ⚠ container-type auf dem aeusseren Element, damit die Umbrueche an der
   verfuegbaren BREITE haengen und nicht am Fenster. Gemessen an anderen
   Seiten: bei 1440 px Fenster ist der Inhaltsbereich 748 px breit, bei
   1024 px Fenster 976 px -- eine @media-Regel haengt also an der falschen
   Groesse. */
.schaubild{
  margin:clamp(28px,3.6vw,42px) 0; padding:0; max-width:76ch;
  container-type:inline-size;
}
.sc-rejilla{
  /* ⚠ 200px, nicht 230: Der Inhaltsbereich der Glossarseiten ist 678 px
     breit (gemessen, nicht geschaetzt). Bei minmax(230px) passen dort nur
     ZWEI Spalten -- ein Dreiervergleich, der nach zwei Spalten umbricht,
     verliert genau die Gegenueberstellung, wegen der es ihn gibt.
     Bei 200px sind es drei zu je 225px. */
  display:grid; grid-template-columns:repeat(auto-fit,minmax(200px,1fr));
  gap:1px; background:var(--linie);
  border:1px solid var(--linie); border-radius:var(--radius); overflow:hidden;
}
.sc-col{background:var(--flaeche); padding:20px 20px 22px}
/* Die Spalte, um die es eigentlich geht, wird hervorgehoben -- aber ueber
   eine Kante, nicht ueber eine farbige Flaeche hinter Text. */
.sc-col--clave{box-shadow:inset 0 3px 0 var(--akzent)}
.sc-col h3{font-size:1.05rem; margin-bottom:14px; color:var(--tief)}
.sc-fila{padding:9px 0; border-top:1px solid var(--linie)}
.sc-fila:first-of-type{border-top:0; padding-top:0}
.sc-etq{
  display:block; font-size:.7rem; font-weight:800; letter-spacing:.1em;
  text-transform:uppercase; color:var(--leise); margin-bottom:3px;
}
.sc-val{display:block; font-size:.93rem; line-height:1.45; color:var(--text)}

/* ⚠ DIE TRENNLINIEN MUESSEN FLUCHTEN, und eine feste Mindesthoehe schafft
   das nicht. Erster Versuch war `min-height:2.9em` (zwei Zeilen). Beim
   zweiten Schaubild ist eine Zelle DREIzeilig -- gemessen 19 bis 20 px
   Versatz, im Screenshot als schiefe Linien sichtbar, in keiner anderen
   Zahl. Eine Mindesthoehe nagelt die Linien nur fest, solange man die
   laengste Zelle vorher kennt.

   `subgrid` loest es richtig: Die Spalten uebernehmen das Zeilenraster des
   Elterngrids, also richtet sich jede Zeile an der hoechsten Zelle DIESER
   Zeile aus -- unabhaengig davon, wie lang der Text spaeter wird.

   ⚠ Mit @supports, damit aeltere Browser nicht leer ausgehen: dort greift
   der Rueckfall mit fester Mindesthoehe, der immerhin die haeufigen
   zweizeiligen Faelle ausrichtet. */
.sc-val{min-height:2.9em}

@supports (grid-template-rows: subgrid) {
  .sc-rejilla{grid-auto-rows:auto}
  .sc-col{
    display:grid;
    grid-template-rows:subgrid;
    /* ⚠ Ueberschrift plus Zeilen -- die Zahl kommt vom Schaubild selbst.
       Vorher stand hier fest `span 5` (vier Zeilen), weil alle Figuren vier
       hatten. Das erste mit DREI Zeilen haette lautlos gebrochen: subgrid
       spannt dann ueber eine Zeile, die es nicht gibt, und die Spalten
       verlieren die Ausrichtung, wegen der subgrid ueberhaupt da ist.
       Ein Maß, das aus dem Inhalt kommt, gehoert nicht ins Stylesheet. */
    grid-row:span var(--sc-filas, 5);
  }
  .sc-val{min-height:0}
}

@container (max-width: 520px){
  /* Einspaltig gibt es nichts auszurichten -- dort waere die Mindesthoehe
     nur ein Loch unter kurzen Werten, und subgrid haette keinen Nachbarn. */
  .sc-val{min-height:0}
  .sc-col{display:block}
}
.schaubild figcaption{
  margin-top:12px; font-size:.87rem; color:var(--leise); font-style:normal;
}
@container (max-width: 520px){
  .sc-rejilla{grid-template-columns:1fr}
}

/* ── Fassadenschnitt (Waermebruecken) ──────────────────────────────────
   ⚠ Warum hier eine ZEICHNUNG statt Spalten: Die vier Punkte stehen nicht
   nebeneinander, sondern an bestimmten Stellen eines Hauses. Ein
   Spaltenvergleich wuerde die Ortsangabe wegwerfen, die die ganze Aussage
   traegt.

   ⚠ Und warum die Beschriftung NICHT im SVG steht: Ein SVG mit fester
   viewBox wird auf 360 px gestaucht, bis die Schrift bei sechs Pixeln
   landet. Im Bild stehen deshalb nur Ziffern, der Text daneben ist HTML
   und skaliert normal. Auf schmalem Schirm rutscht er unter die Zeichnung,
   statt in ihr zu schrumpfen. */
.pt-rejilla{
  display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1.05fr);
  gap:22px; align-items:center;
  background:var(--flaeche); border:1px solid var(--linie);
  border-radius:var(--radius); padding:20px;
}
.pt-dibujo{width:100%; height:auto; display:block}
.pt-marca circle{fill:var(--tief)}
.pt-marca text{
  fill:#fff; font-size:15px; font-weight:800; text-anchor:middle;
  font-family:inherit;
}
.pt-lista{list-style:none; margin:0; padding:0; display:grid; gap:13px}
.pt-item{display:grid; grid-template-columns:26px 1fr; gap:11px; align-items:start}
.pt-num{
  display:grid; place-items:center; width:26px; height:26px; border-radius:50%;
  background:var(--tief); color:#fff; font-size:.8rem; font-weight:800;
  /* ⚠ Die Ziffer sitzt auf der Grundlinie der ersten Textzeile, nicht am
     oberen Rand des Textblocks -- sonst steht sie bei zweizeiligen
     Eintraegen sichtbar zu hoch. */
  margin-top:1px;
}
.pt-txt{font-size:.9rem; line-height:1.5; color:var(--text)}
.pt-txt b{display:block; color:var(--tief); font-size:.94rem; margin-bottom:2px}

@container (max-width: 560px){
  /* ⚠ 560 und nicht 520 wie oben: Die Zeichnung braucht mehr Platz als eine
     Textspalte, bevor sie unbrauchbar schmal wird. Der Umbruchpunkt gehoert
     zum Inhalt, nicht zu einer seitenweit einheitlichen Zahl. */
  .pt-rejilla{grid-template-columns:1fr; gap:18px}
  .pt-dibujo{max-width:320px; margin:0 auto}
}

/* Verweis vom Glossareintrag auf die passende Leistungsseite. Ruhig
   gehalten: Wer einen Begriff nachschlaegt, sucht eine Erklaerung, keine
   Werbung -- das Angebot steht am Ende, nicht dazwischen. */
.cta-servicio{background:var(--flaeche); border-top:1px solid var(--linie);
  border-bottom:1px solid var(--linie)}
.cta-servicio h2{font-size:clamp(1.3rem,2.4vw,1.7rem); margin-bottom:10px}
.cta-servicio .entradilla{margin-bottom:20px}

/* Wandschnitt (tabique gegen muro de carga).
   ⚠ Der Hinweiskasten steht bewusst OHNE Ziffer in der Reihe: Er ist kein
   dritter Fall, sondern die Folgerung aus den ersten beiden. Eine "3" haette
   ihn zu einem weiteren Wandtyp gemacht. */
.tb-dibujo{max-width:340px}
.pt-frei{
  fill:var(--leise); font-size:11px; text-anchor:middle; font-weight:700;
  letter-spacing:.04em;
}
.pt-item--nota{margin-top:3px; padding-top:13px; border-top:1px solid var(--linie)}
.pt-item--nota .pt-num{background:var(--grund); color:var(--leise); font-size:.85rem}

/* ── Textbereich zweispaltig (Manuel, 23.08.) ─────────────────────────
   Gemessen bei 2560 px: Container 1440, Textspalte 678, daneben 1258 px
   leer. Die Lesespalte bleibt bei 74ch -- das Inhaltsverzeichnis fuellt
   die zweite Spalte und bleibt beim Scrollen stehen.

   ⚠ Nur wo es ein Inhaltsverzeichnis GIBT: Seiten ohne `.indice` behalten
   das einspaltige Layout, sonst entsteht eine leere zweite Spalte -- also
   genau das Problem, das hier behoben wird, nur andersherum. */
@media(min-width:1100px){
  .seccion--texto .envoltura:has(.indice){
    display:grid;
    grid-template-columns:minmax(0,74ch) minmax(230px,1fr);
    gap:clamp(30px,3.6vw,64px);
    align-items:start;
  }
  /* ⚠⚠ HIER STAND `grid-row:1 / span 40` -- das erzeugt VIERZIG
     Rasterzeilen, auch wenn nur drei Inhalt haben. Die leeren Zeilen
     bekommen trotzdem Hoehe: Die Seite war danach 10.700 px hoch statt
     rund 6.000, der Rest war weisse Flaeche.
     Ohne `span` reicht eine Zeile: Die Inhalte in Spalte 1 erzeugen ihre
     eigenen impliziten Zeilen, das Verzeichnis steht in Zeile 1 der
     zweiten Spalte und klebt beim Scrollen. */
  .seccion--texto .envoltura:has(.indice) > .indice{
    grid-column:2; grid-row:1;
    position:sticky; top:96px; margin:0;
    border-left:2px solid var(--linie); border-top:0;
    padding:2px 0 2px 18px;
  }
  .seccion--texto .envoltura:has(.indice) > .bloques,
  .seccion--texto .envoltura:has(.indice) > .lista-bloque,
  .seccion--texto .envoltura:has(.indice) > .fuentes,
  .seccion--texto .envoltura:has(.indice) > figure{
    grid-column:1; max-width:none;
  }
  .seccion--texto .envoltura:has(.indice) > .bloques{margin-top:0}
  .indice ol{margin:0; padding-left:1.1em}
  .indice li{margin:.34em 0; font-size:.93rem}
}

/* Ohne Inhaltsverzeichnis: die Lesespalte wenigstens zentrieren, statt sie
   links kleben zu lassen. */
@media(min-width:1100px){
  .seccion--texto .envoltura:not(:has(.indice)) > .bloques,
  .seccion--texto .envoltura:not(:has(.indice)) > .lista-bloque,
  .seccion--texto .envoltura:not(:has(.indice)) > .faq{
    margin-inline:auto;
  }
}
