/* Sistema de diseño de sergiruiz.es · extraído de la home rev 8 del paquete
   docs/mockups/sergiruiz-web-diseno/. Las reglas y sus motivos están en
   DISENO.md de ese paquete: NO se cambian colores sin volver a medir AA. */
@import url('fonts.css');

:root{
  --paper:#F6F1E3;
  --ink:#2A2622; --ink-soft:#554E3F; --ink-faint:#786C51;   /* A5: 4.58:1 */
  --pencil:#6B6256; --red:#B54A41;                          /* A5: 4.63:1 */
  --link:#1E4F86; --fluor:#F5D94E;
  --hand:"Kalam",cursive;
  --body:"Literata",Georgia,serif;
  --mono:ui-monospace,"SF Mono",Menlo,Consolas,monospace;
  --col:min(100% - 40px, 46rem);
  --ancho:min(100% - 40px, 62rem);
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
html,body{overflow-x:clip}   /* nada, jamás, genera scroll horizontal */
body{
  margin:0;background:var(--paper);color:var(--ink);
  font-family:var(--body);font-size:17px;line-height:1.7;
  -webkit-font-smoothing:antialiased;
}
body::before{  /* grano del papel */
  content:"";position:fixed;inset:0;pointer-events:none;z-index:1;opacity:.05;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='200' height='200' filter='url(%23n)'/%3E%3C/svg%3E");
}
::selection{background:var(--fluor);color:var(--ink)}

.wrap{width:var(--col);margin:0 auto;position:relative;z-index:2}
.ancho{width:var(--ancho);margin:0 auto;position:relative;z-index:2}

/* ---------------- escala ---------------- */
h1{
  font-family:var(--hand);font-weight:700;
  font-size:clamp(2.25rem,6vw,3.2rem);line-height:1.08;
  margin:0 0 18px;transform:rotate(-1deg);transform-origin:left center;text-wrap:balance;
}
h2{
  font-family:var(--hand);font-weight:700;
  font-size:clamp(1.6rem,3.7vw,2.15rem);line-height:1.16;
  margin:0 0 18px;transform:rotate(-.5deg);transform-origin:left center;text-wrap:balance;
}
h3{font-family:var(--body);font-weight:700;font-size:1.12rem;line-height:1.3;margin:0 0 4px}
p{margin:0 0 15px;max-width:66ch}
.lede{font-size:1.06rem;color:var(--ink-soft)}
.meta{
  font-family:var(--hand);font-weight:400;font-size:1.05rem;color:var(--pencil);
  transform:rotate(-.8deg);transform-origin:left center;margin:0 0 10px;
}

/* ---------------- notas rojas: al margen SOLO si hay margen de verdad ----------------
   Breakpoint por contenedor: .wrap (46rem) ≥1240px, .ancho (62rem) ≥1500px.
   Debajo, la nota fluye dentro de la columna. Nunca corta ni genera scroll. */
.sub{font-family:var(--hand);font-weight:400;font-size:1.15rem;line-height:1.35;color:var(--red);
     transform:rotate(-1.2deg);transform-origin:left center;margin:-6px 0 24px;max-width:38ch}
.con-nota{position:relative}
@media (min-width:1240px){
  .wrap.con-nota > .sub{
    position:absolute;left:calc(100% + 34px);top:2px;width:200px;margin:0 !important;
    font-size:1.02rem;text-align:left !important;transform:rotate(1.8deg);transform-origin:left top;
  }
}
@media (min-width:1500px){
  .ancho.con-nota > .sub{
    position:absolute;left:calc(100% + 34px);top:2px;width:200px;margin:0;
    font-size:1.02rem;transform:rotate(1.8deg);transform-origin:left top;
  }
}

/* ---------------- C1 · un significante, un significado ---------------- */
a{
  color:var(--link);text-decoration:none;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='10' viewBox='0 0 140 10'%3E%3Cpath d='M0 6C30 2.6 60 8.6 90 5.2S122 3.6 140 6' fill='none' stroke='%231E4F86' stroke-width='3.4' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat:repeat-x;background-position:0 100%;background-size:140px 10px;
  padding:2px 0 5px;box-decoration-break:clone;-webkit-box-decoration-break:clone;
}
a:hover,a:focus-visible{
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='10' viewBox='0 0 140 10'%3E%3Cpath d='M0 6C30 2.6 60 8.6 90 5.2S122 3.6 140 6' fill='none' stroke='%232A2622' stroke-width='3.6' stroke-linecap='round'/%3E%3C/svg%3E");
  color:var(--ink);
}
:focus-visible{outline:2.5px solid var(--red);outline-offset:3px}

.hl{
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='300' height='36' preserveAspectRatio='none'%3E%3Cfilter id='m' x='-20%25' y='-40%25' width='140%25' height='180%25'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.016 0.22' numOctaves='2' seed='8'/%3E%3CfeDisplacementMap in='SourceGraphic' scale='17'/%3E%3C/filter%3E%3Crect x='11' y='8' width='278' height='21' fill='%23F5D94E' filter='url(%23m)' opacity='.75'/%3E%3C/svg%3E");
  background-size:100% 100%;box-decoration-break:clone;-webkit-box-decoration-break:clone;
  padding:2px 7px;margin:0 -4px;mix-blend-mode:multiply;
}

/* ---------------- tachón de libreta ---------------- */
.tacha{position:relative;white-space:nowrap}
.tacha::after{
  content:"";position:absolute;left:-3%;right:-3%;top:50%;height:5px;margin-top:-2px;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='8' viewBox='0 0 120 8'%3E%3Cpath d='M0 4.5C26 2.2 52 6.4 78 4S104 3 120 4.6' fill='none' stroke='%232A2622' stroke-width='2.6' stroke-linecap='round'/%3E%3C/svg%3E") repeat-x 0 50%/120px 8px;
  transform:rotate(-1.4deg);opacity:.85;
}

/* ---------------- C2 · las acciones tienen forma ----------------
   El hover es SOLO el ladeo. a.boton pisa a a:hover (que colaba su garabato
   dentro del botón) y [hidden] recupera su display:none.                    */
.boton{
  position:relative;display:inline-flex;align-items:center;justify-content:center;
  min-height:50px;padding:11px 28px;margin:6px 12px 6px 0;
  font-family:var(--hand);font-weight:700;font-size:1.2rem;line-height:1.1;
  color:var(--ink);background:none;border:0;cursor:pointer;text-align:center;
  background-image:none;text-decoration:none;
  transition:transform .16s ease;
}
.boton[hidden]{display:none}
.boton:hover,.boton:focus-visible,
a.boton:hover,a.boton:focus-visible{background-image:none;color:var(--ink);transform:rotate(-1.4deg) scale(1.035)}
a.boton.principal,a.boton.principal:hover,a.boton.principal:focus-visible{color:#fff}
.boton svg{position:absolute;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none}
.boton .t{position:relative;z-index:2}
.boton .trazo-b{fill:none;stroke:var(--ink);stroke-width:2.2;stroke-linecap:round;
                vector-effect:non-scaling-stroke}
.boton.principal{color:#fff}
.boton.principal .relleno{fill:var(--red)}
@media (prefers-reduced-motion:reduce){.boton{transition:none}}

/* ---------------- ritmo ---------------- */
section{margin:0 0 84px}
.aire{margin-bottom:116px}
.hero{padding:64px 0 8px;margin-bottom:122px}

/* ---------------- hero: texto y venn centrado debajo ---------------- */
.venn-zona{margin:34px auto 0;max-width:420px;text-align:center;position:relative}
.venn{width:100%;max-width:352px;overflow:visible}
.venn .aro-v{fill:none;stroke:var(--ink-soft);stroke-width:2.4;stroke-linecap:round;opacity:.85}
.venn .neg-t{font-size:15px;fill:var(--pencil)}
.venn .relleno-v{stroke:none}
.venn .hueco{fill:var(--paper);opacity:.93}
.venn text{font-family:var(--hand);font-weight:400;font-size:17px;fill:var(--ink-soft)}
.venn .desde{font-size:11px;fill:var(--ink-faint)}
.venn .yo{font-weight:700;font-size:18px;fill:var(--red)}
.venn-pie{font-family:var(--hand);font-weight:400;font-size:1.05rem;line-height:1.4;
          color:var(--red);transform:rotate(-1deg);margin:10px auto 0;max-width:30ch}
@media (min-width:1240px){
  .venn-zona .venn-pie{position:absolute;left:calc(100% + 26px);top:38%;width:200px;
    margin:0;text-align:left;font-size:1.02rem;transform:rotate(1.8deg)}
}

/* ---------------- foto con celo ---------------- */
.tape{
  position:absolute;width:88px;height:27px;z-index:3;
  background:repeating-linear-gradient(90deg, rgba(255,255,255,.28) 0 2px, transparent 2px 7px),
             linear-gradient(180deg, rgba(250,246,226,.55), rgba(238,229,197,.5));
  box-shadow:0 2px 5px rgba(42,38,34,.16);
  clip-path:polygon(2% 14%, 7% 0, 94% 4%, 100% 16%, 97% 86%, 91% 100%, 5% 96%, 0 82%);
}
.tape.tl{top:-13px;left:-22px;transform:rotate(-38deg)}
.tape.tr{top:-13px;right:-22px;transform:rotate(39deg)}
.about{display:grid;grid-template-columns:230px 1fr;gap:36px;align-items:start}
.pinned{position:relative;transform:rotate(-1.6deg);width:fit-content;margin:8px 0 0}
.pinned img{display:block;width:230px;height:auto;
  box-shadow:0 12px 26px -18px rgba(42,38,34,.75);filter:saturate(.82) contrast(1.02)}
@media (max-width:720px){
  .about{grid-template-columns:1fr;gap:26px}
  .pinned{margin:0 auto}
  .pinned img{width:min(230px,62vw)}
}

/* ---------------- servicios: los márgenes trabajan ----------------
   En pantalla ancha la flecha cuelga del margen izquierdo y el precio
   rodeado del derecho, a la altura del título. En pantallas menores,
   todo vuelve a fluir dentro de la columna.                          */
.servicio{position:relative;margin:0 0 56px;padding-left:82px}
.servicio:last-of-type{margin-bottom:0}
.servicio .fl{position:absolute;left:0;top:9px;width:62px;height:20px;color:var(--red);overflow:visible}
.servicio h3{font-family:var(--hand);font-weight:700;font-size:1.45rem;margin:0 0 8px}
.servicio h3 a{font-size:inherit}
.servicio .lado{margin:2px 0 0}
@media (max-width:600px){
  .servicio{padding-left:46px}
  .servicio .fl{width:36px;height:14px;top:10px}
}
@media (min-width:1240px){
  .servicio{padding-left:0}
  .servicio .fl{left:-80px;top:10px}
  .servicio .lado{position:absolute;left:calc(100% + 26px);top:-2px;width:210px;margin:0}
  .servicio .lado .precio{font-size:1.1rem;padding:5px 16px}
  .servicio .lado .garantia{font-size:.92rem;margin-top:10px;max-width:none}
}

.precio{
  position:relative;display:inline-block;font-family:var(--hand);font-weight:700;
  font-size:1.3rem;color:var(--red);padding:6px 20px;margin:6px 0 4px;white-space:nowrap;
  transform:rotate(1.4deg);
}
.precio svg{position:absolute;inset:-6px -4px;width:calc(100% + 8px);height:calc(100% + 12px);overflow:visible}
.precio .aro{fill:none;stroke:var(--red);stroke-width:2.4;stroke-linecap:round;vector-effect:non-scaling-stroke}
.garantia{font-family:var(--hand);font-weight:400;font-size:1.08rem;color:var(--pencil);
          transform:rotate(-1deg);transform-origin:left center;margin:2px 0 0;max-width:36ch}

/* ---------------- testimonios ---------------- */
.opiniones{columns:2;column-gap:44px;margin:0;padding:0;list-style:none}
.opiniones li{break-inside:avoid;margin:0 0 30px;display:inline-block;width:100%}
.opiniones blockquote{margin:0 0 8px;font-size:.96rem;line-height:1.6;color:var(--ink-soft)}
.opiniones .quien{
  font-family:var(--hand);font-weight:700;font-size:1.08rem;color:var(--ink);margin:0;line-height:1.25;
}
.opiniones .quien a{font-weight:400;font-size:1rem;background-size:110px 8px;padding-bottom:3px}
.opiniones.colapso li:nth-child(n+5){display:none}
@media (max-width:760px){.opiniones{columns:1}}

/* ---------------- ¿hablamos?: sin CTA, se enruta al servicio ---------------- */
.ir{list-style:none;margin:22px 0 0;padding:0}
.ir li{position:relative;padding-left:80px;margin:0 0 18px}
.ir .fl{position:absolute;left:2px;top:8px;width:60px;height:20px;color:var(--red);overflow:visible}
.ir a{font-family:var(--hand);font-weight:700;font-size:1.3rem}
@media (max-width:600px){
  .ir li{padding-left:52px}
  .ir .fl{width:38px;top:9px}
}

/* ---------------- B7 · la raya ---------------- */
.raya{width:var(--col);margin:0 auto 96px;padding:34px 0 0;position:relative;z-index:2}
.raya p{
  font-family:var(--hand);font-weight:700;
  font-size:clamp(1.3rem,3.1vw,1.6rem);line-height:1.3;margin:0;max-width:30ch;color:var(--ink);
}
.raya .abajo{transform:rotate(-.7deg);transform-origin:left center}
.raya svg{display:block;width:100%;height:26px;margin:22px 0;color:var(--ink);overflow:visible}

/* ---------------- proyectos propios: compactos, cifra al margen ---------------- */
.proyectos{
  list-style:none;margin:36px 0 0;padding:0;
  display:grid;grid-template-columns:1fr 1fr;gap:46px 54px;
}
.proyectos li{margin:0}
.proyectos h3{display:inline;font-family:var(--hand);font-weight:700;font-size:1.3rem;margin:0}
.proyectos h3 a{font-size:1.3rem}
.proyectos p{margin:4px 0 0;color:var(--ink-soft);font-size:.96rem;max-width:52ch}
.proyectos .cifra{margin:16px 0 0}
.proyectos li:nth-child(2n) .cifra{transform:rotate(-1.7deg)}
.cifra{
  position:relative;display:inline-block;font-family:var(--hand);font-weight:700;
  font-size:1.05rem;color:var(--red);padding:4px 15px;white-space:nowrap;
  transform:rotate(2deg);
}
.cifra.larga{white-space:normal;max-width:24ch;text-align:center;font-size:.95rem;
             line-height:1.35;padding:8px 18px}
.cifra svg{position:absolute;inset:-5px -3px;width:calc(100% + 6px);height:calc(100% + 10px);overflow:visible}
.cifra .aro{fill:none;stroke:var(--red);stroke-width:2.2;stroke-linecap:round;vector-effect:non-scaling-stroke}
@media (max-width:680px){
  .proyectos{grid-template-columns:1fr;gap:30px}
  .proyectos li{display:grid;grid-template-columns:1fr auto;gap:0 14px;align-items:center}
  .proyectos .cifra{margin:0;font-size:.9rem;padding:4px 12px}
  .proyectos .cifra.larga{max-width:16ch;font-size:.8rem;padding:6px 12px}
}

/* ---------------- canales: árbol de esquema ---------------- */
.canales h2{text-align:center;transform:rotate(-.5deg);transform-origin:center;margin-bottom:4px}
.arbol{display:block;width:100%;height:84px;margin:0 0 6px;color:var(--ink);overflow:visible}
.arbol path{fill:none;stroke:currentColor;stroke-width:2.4;stroke-linecap:round;
            stroke-linejoin:round;vector-effect:non-scaling-stroke}
.tres{display:grid;grid-template-columns:repeat(3,1fr);gap:0 36px}
.tres .colu{text-align:center}
.tres a{font-family:var(--hand);font-weight:700;font-size:1.3rem}
.tres p{font-size:.9rem;color:var(--ink-faint);margin:10px auto 0;line-height:1.55;max-width:24ch}
.tres .colu:nth-child(1){transform:rotate(-.6deg)}
.tres .colu:nth-child(3){transform:rotate(.5deg)}
@media (max-width:700px){
  .tres{gap:0 12px}
  .tres p{display:none}
  .tres a{font-size:1.05rem}
  .arbol{height:64px}
}

/* ---------------- índice compacto, sin filetes ---------------- */
.indice{list-style:none;margin:0;padding:0;font-size:.95rem}
.indice li{
  display:flex;gap:14px;align-items:baseline;justify-content:space-between;
  padding:7px 0;
}
.indice .donde-sale{
  font-family:var(--mono);font-size:11px;letter-spacing:.09em;text-transform:uppercase;
  color:var(--ink-faint);white-space:nowrap;flex:none;
}
@media (max-width:600px){
  .indice li{flex-direction:column;gap:2px}
  .indice .donde-sale{margin-top:2px}
}

/* ---------------- despedida manuscrita ---------------- */
.despedida{padding-top:20px;margin-bottom:130px}
.despedida p{
  font-family:var(--hand);font-weight:400;font-size:1.3rem;line-height:1.5;
  color:var(--ink);max-width:34ch;transform:rotate(-.6deg);transform-origin:left center;
}
.despedida .firma{
  font-weight:700;font-size:1.6rem;transform:rotate(-3deg);margin:18px 0 0 8px;
}
.despedida .correo{font-family:var(--hand);font-size:1.1rem;margin:2px 0 0 26px;transform:rotate(-1deg)}

/* ---------------- copy propuesto por Claudia, sin aprobar ---------------- */
.prop{position:relative}
.prop::after{
  content:"\270E";position:absolute;left:-30px;top:2px;
  font-size:1rem;color:var(--pencil);opacity:.55;
}
@media (max-width:900px){.prop::after{left:auto;right:0;top:-20px}}

/* ---------------- footer: lo legal y lo pequeño ---------------- */
footer{
  width:var(--col);margin:0 auto;padding:34px 0 70px;position:relative;z-index:2;
  font-family:var(--mono);font-size:11.5px;letter-spacing:.06em;
  color:var(--ink-faint);line-height:2.1;
}
footer a{background-size:100px 8px;padding-bottom:3px}
footer .f-meta{margin:26px 0 0;opacity:.75}

/* ---------------- animación (se activa solo con JS) ---------------- */
@media (prefers-reduced-motion:no-preference){
  .anim .trazo path,.anim .aro,.anim .servicio .fl path,.anim .ir .fl path,
  .anim .arbol path,.anim .venn .aro-v{
    stroke-dasharray:1;stroke-dashoffset:1;transition:stroke-dashoffset .8s ease .05s}
  .anim .go .trazo path,.anim .aro.go,.anim .go path,.anim .go .aro-v{stroke-dashoffset:0}
  .anim .hl{background-size:0 100%;background-repeat:no-repeat;transition:background-size .6s ease}
  .anim .hl.go{background-size:100% 100%}
}

/* ═══════════════════════════════════════════════════════════════════════════
   Componentes que la home rev 8 no tenía y que la web sí necesita.
   Siguen los criterios de la sección «Lo que la home no enseña» de DISENO.md,
   aprobados por el usuario el 18-08. Nada de colores nuevos: solo variables
   ya medidas para contraste AA.
   ═══════════════════════════════════════════════════════════════════════════ */

/* Selector de idioma. La home decidió vivir sin menú (J12), así que esto no es
   una barra de navegación: es una anotación arriba a la derecha. */
.idiomas{
  font-family:var(--hand); font-size:1.05rem; letter-spacing:.02em;
  text-align:center; margin:0 0 22px;
}
.idiomas a, .idiomas span{ display:inline-block; padding:10px 6px; min-height:44px; line-height:24px }
.idiomas a{ margin:0 10px }

/* Zonas de servicio: las landings locales, como anotación bajo el servicio.
   No son un menú ni una lista destacada — son el «también por aquí». */
.zonas{
  font-family:var(--hand); font-size:15.5px; color:var(--ink-soft);
  margin:-6px 0 14px;
}
.zonas a{ white-space:nowrap }

/* Pie: solo legales [CA11]. */
footer{ padding:48px 20px 60px; text-align:center }
.f-legal{ margin:0; max-width:none; font-size:15.5px; color:var(--ink-soft) }

/* Banner de cookies. Papel pegado abajo, no barra de sistema. */
.cookies{
  position:fixed; left:16px; right:16px; bottom:16px; z-index:60;
  max-width:34rem; margin:0 auto; padding:20px 22px 8px;
  background:var(--paper); color:var(--ink);
  border:2px solid var(--ink); border-radius:2px;
  box-shadow:4px 5px 0 rgba(42,38,34,.18);
  transform:rotate(-.4deg);
}
.cookies[hidden]{ display:none }
.cookies p{ margin:0 0 10px; font-size:16px; max-width:none }
.cookies strong{ font-family:var(--hand); font-size:19px }
.cookies .boton{ margin:0 10px 12px 0 }
@media (prefers-reduced-motion:reduce){ .cookies{ transform:none } }

/* Foco visible. En los enlaces y botones, un recuadro rojo. En los campos del
   formulario NO: un rectángulo recto alrededor de una caja dibujada a pulso
   desentona. Ahí el foco se marca repintando en rojo el propio trazo de la
   caja, así sigue exactamente su silueta (ver .form-libreta más abajo). */
a:focus-visible, button:focus-visible, summary:focus-visible{
  outline:2.5px solid var(--red); outline-offset:3px;
}
input:focus-visible, textarea:focus-visible, select:focus-visible{ outline:none }

/* ═══════════════════════════════════════════════════════════════════════════
   FORMULARIOS
   Criterios de DISENO.md, sección «Lo que la home no enseña» (aprobados 18-08):
   cajas dibujadas a mano en el mismo lenguaje que .boton, el texto que escribe
   el visitante en Literata (lo manuscrito es de Sergi, no suyo), etiquetas en
   Kalam 400, errores como anotación roja, áreas táctiles ≥44px y foco visible.
   ═══════════════════════════════════════════════════════════════════════════ */

.form-libreta{ max-width:34rem }
.form-libreta .campo{ margin:0 0 26px; max-width:none }

.form-libreta label,
.form-libreta legend{
  display:block; font-family:var(--body); font-weight:600;
  font-size:.95rem; color:var(--ink); margin:0 0 7px; line-height:1.4;
}

/* La caja: un rectángulo a pulso, con el trazo irregular del sistema.
   Es el mismo recurso que .boton, pero como fondo, porque un <input> no
   admite un <svg> dentro. */
.form-libreta input[type=text],
.form-libreta input[type=email],
.form-libreta input[type=tel],
.form-libreta textarea,
.form-libreta select{
  width:100%; min-height:48px; padding:12px 15px;
  font-family:var(--body); font-size:1rem; line-height:1.5; color:var(--ink);
  background-color:transparent; border:0; border-radius:0; appearance:none;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='400' height='56' preserveAspectRatio='none'%3E%3Cpath d='M5 9C120 4 260 6 393 8c6 .3 5 4 5 20s0 20-6 20.5C260 51 130 49 7 48c-5-.4-5-4-5-19.5S1 9.3 5 9Z' fill='none' stroke='%232A2622' stroke-width='2' stroke-linecap='round' vector-effect='non-scaling-stroke'/%3E%3C/svg%3E");
  background-repeat:no-repeat; background-size:100% 100%;
}
.form-libreta textarea{ min-height:120px; resize:vertical }
.form-libreta select{ padding-right:38px; cursor:pointer;
  background-image:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='12'%3E%3Cpath d='M2 3.5C5 5 8 8 8 9.5 8.6 8 11 5 14 3.5' fill='none' stroke='%23B54A41' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E"),
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='400' height='56' preserveAspectRatio='none'%3E%3Cpath d='M5 9C120 4 260 6 393 8c6 .3 5 4 5 20s0 20-6 20.5C260 51 130 49 7 48c-5-.4-5-4-5-19.5S1 9.3 5 9Z' fill='none' stroke='%232A2622' stroke-width='2' stroke-linecap='round' vector-effect='non-scaling-stroke'/%3E%3C/svg%3E");
  background-position:right 14px center, center; background-size:16px 12px, 100% 100%;
}
.form-libreta input::placeholder,
.form-libreta textarea::placeholder{ color:var(--ink-faint); opacity:1 }

.form-libreta fieldset{ border:0; padding:0; margin:0 0 26px }
.form-libreta legend{ padding:0; margin-bottom:10px }

/* Opciones: la marca es un aspa a mano, no un control del sistema */
.form-libreta .opcion{
  display:flex; align-items:flex-start; gap:11px;
  font-family:var(--body); font-size:.98rem; color:var(--ink-soft);
  margin:0 0 4px; padding:9px 0; min-height:44px; cursor:pointer;
}
.form-libreta .opcion input,
.form-libreta .acepto input{
  appearance:none; flex:none; width:22px; height:22px; margin:1px 0 0; cursor:pointer;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M3 5C9 3 16 4 21 4.5c1.6.2 1.4 1.5 1.4 7.5s.2 7.4-1.6 7.6C15 20 8 19.6 3 19.4c-1.4-.2-1.3-1.4-1.3-7.4S1.6 5.2 3 5Z' fill='none' stroke='%23554E3F' stroke-width='1.8' stroke-linecap='round'/%3E%3C/svg%3E") center/100% no-repeat;
}
.form-libreta .opcion input:checked,
.form-libreta .acepto input:checked{
  background-image:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M5 12.5c2.5 2.4 3.6 4.6 4.4 5.8C11.6 13.6 15 8 19.5 4.2' fill='none' stroke='%23B54A41' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"),
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M3 5C9 3 16 4 21 4.5c1.6.2 1.4 1.5 1.4 7.5s.2 7.4-1.6 7.6C15 20 8 19.6 3 19.4c-1.4-.2-1.3-1.4-1.3-7.4S1.6 5.2 3 5Z' fill='none' stroke='%23554E3F' stroke-width='1.8' stroke-linecap='round'/%3E%3C/svg%3E");
  background-size:100%,100%; background-position:center,center; background-repeat:no-repeat;
}
.form-libreta .opcion textarea{ margin-top:10px }

.form-libreta .acepto label{
  display:flex; align-items:flex-start; gap:11px;
  font-family:var(--body); font-size:.95rem; color:var(--ink-soft);
  line-height:1.5; padding:8px 0; min-height:44px; cursor:pointer;
}
.form-libreta .campo > .sub{ margin:8px 0 0; font-size:.98rem; transform:rotate(-.6deg) }

/* Aviso de resultado: anotación, no caja de sistema */
.aviso-form{
  font-family:var(--hand); font-size:1.12rem; line-height:1.4;
  margin:16px 0 0; max-width:36ch; transform:rotate(-.8deg); transform-origin:left center;
}
.aviso-form.ok{ color:var(--ink) }
.aviso-form.ok::before{ content:"✓ "; color:var(--red); font-weight:700 }
.aviso-form.ko{ color:var(--red) }
.form-libreta button[disabled]{ opacity:.55; cursor:progress }

@media (max-width:600px){
  .form-libreta{ max-width:none }
  .form-libreta .campo{ margin-bottom:22px }
}

/* ═══════════════════════════════════════════════════════════════════════════
   CONTENIDO LARGO DE LAS LANDINGS
   El texto tiene que respirar como en la home: columna de 60-70 caracteres,
   interlineado 1.7 y aire entre bloques. Sin esto el texto migrado se
   apelmazaba y la landing no parecía del mismo sitio que la portada.
   ═══════════════════════════════════════════════════════════════════════════ */

.texto p{ margin:0 0 18px; max-width:66ch }
.texto p:last-child{ margin-bottom:0 }
.texto h3{ font-family:var(--hand); font-weight:700; font-size:1.32rem; margin:34px 0 10px }
.texto h4{ font-family:var(--hand); font-weight:700; font-size:1.12rem; margin:26px 0 8px }
.texto strong{ font-weight:700 }

/* Listas: viñeta a mano, no un disco del navegador */
.texto ul{ list-style:none; padding:0; margin:0 0 22px; max-width:64ch }
.texto ul li{ position:relative; padding-left:30px; margin:0 0 11px; line-height:1.6 }
.texto ul li::before{
  content:""; position:absolute; left:2px; top:.62em; width:15px; height:8px;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='15' height='8'%3E%3Cpath d='M1 4.5C4 2.6 8 5.4 14 3' fill='none' stroke='%23B54A41' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E") no-repeat;
}
/* Las que ya empiezan por emoji no necesitan viñeta: sería doble marca */
.texto ul li.emoji::before{ display:none }
.texto ul li.emoji{ padding-left:0 }

/* El plan dentro de .servicio hereda el ritmo del texto */
.servicio .texto p, .servicio p{ max-width:60ch }
.servicio ul{ list-style:none; padding:0; margin:14px 0 16px }
.servicio ul li{ position:relative; padding-left:30px; margin:0 0 9px; font-size:.98rem; color:var(--ink-soft) }

/* ── FAQs: hoja plegada, no acordeón de framework ───────────────────────── */
.faqs details{
  border-top:0; margin:0 0 4px; padding:0;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='600' height='4' preserveAspectRatio='none'%3E%3Cpath d='M2 2.4C120 1 300 3.2 460 1.8c50-.4 100 1.4 138 .8' fill='none' stroke='%23786C51' stroke-width='1.4' stroke-linecap='round' opacity='.5'/%3E%3C/svg%3E") repeat-x bottom;
  padding-bottom:14px; margin-bottom:14px;
}
.faqs summary{
  font-family:var(--hand); font-weight:700; font-size:1.16rem; line-height:1.35;
  cursor:pointer; list-style:none; padding:10px 40px 10px 0; position:relative; min-height:44px;
}
.faqs summary::-webkit-details-marker{ display:none }
.faqs summary::after{
  content:""; position:absolute; right:4px; top:1.15em; width:17px; height:11px;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='11'%3E%3Cpath d='M2 3C5.5 5 8.5 8.6 8.6 9.6 9 8.4 12 4.6 15 2.6' fill='none' stroke='%23B54A41' stroke-width='2.2' stroke-linecap='round'/%3E%3C/svg%3E") no-repeat;
  transition:transform .18s ease;
}
.faqs details[open] summary::after{ transform:rotate(180deg) }
.faqs details > div{ padding:2px 0 6px }
@media (prefers-reduced-motion:reduce){ .faqs summary::after{ transition:none } }

/* ── Casos de éxito: las capturas, pegadas como recortes ────────────────── */
.casos img{
  max-width:100%; height:auto; display:block; margin:14px 0 6px;
  border:1px solid rgba(42,38,34,.14); background:#fff; padding:6px;
  transform:rotate(-.4deg);
}
.casos img:nth-of-type(even){ transform:rotate(.5deg) }
@media (prefers-reduced-motion:reduce){ .casos img{ transform:none } }

/* ── Legales y términos: bloque denso, tipografía menor y cómoda ────────── */
.legal .texto-legal{ max-width:68ch }
.texto-legal h3{ font-family:var(--hand); font-weight:700; font-size:1.28rem; margin:38px 0 10px }
.texto-legal h4{ font-family:var(--hand); font-weight:700; font-size:1.08rem; margin:26px 0 8px }
.texto-legal p{ margin:0 0 15px; font-size:.98rem; line-height:1.72 }
.texto-legal ul{ margin:0 0 18px; padding-left:22px }
.texto-legal li{ margin:0 0 8px; font-size:.98rem }
.volver{ font-family:var(--hand); font-size:1.05rem; margin:0 0 30px }

/* ── Blog ───────────────────────────────────────────────────────────────── */
.indice-blog li{ display:block; padding:16px 0 }
.indice-blog .excerpt{ margin:5px 0 4px; color:var(--ink-soft); font-size:.98rem; max-width:62ch }
.indice-blog .donde-sale{ display:block; margin-top:4px }
.post h1{ margin-bottom:10px }
.post .meta{ margin-top:0 }
.cuerpo-post{ max-width:66ch }
.cuerpo-post p{ margin:0 0 18px; line-height:1.72 }
.cuerpo-post h2{ font-size:1.6rem; margin:40px 0 12px }
.cuerpo-post h3{ font-family:var(--hand); font-weight:700; font-size:1.28rem; margin:30px 0 10px }
.cuerpo-post img{ max-width:100%; height:auto; display:block; margin:22px 0; border:1px solid rgba(42,38,34,.12); padding:5px; background:#fff }
.cuerpo-post ul,.cuerpo-post ol{ margin:0 0 20px; padding-left:24px }
.cuerpo-post li{ margin:0 0 9px }
.cuerpo-post blockquote{ margin:22px 0; padding:0 0 0 20px; border-left:3px solid var(--red); font-style:italic; color:var(--ink-soft) }
.cuerpo-post iframe{ max-width:100%; margin:20px 0 }

/* ── Remates de las landings de servicio ────────────────────────────────── */

/* El CTA lleva su flecha delante, como los enlaces .ir de la home */
.cta-linea{ position:relative; padding-left:76px; margin-top:34px }
.cta-linea .fl{ position:absolute; left:2px; top:16px; width:56px; height:18px; color:var(--red); overflow:visible }
@media (max-width:600px){
  .cta-linea{ padding-left:0 }
  .cta-linea .fl{ position:static; display:block; width:40px; margin:0 0 8px }
}

/* Los planes son bloques largos: necesitan más aire entre ellos que en la home */
.servicio + .servicio{ margin-top:70px }

/* El hero de una landing no es el de la home: sin venn, con el H1 mandando */
.hero h1{ margin-bottom:14px }
.hero .lede{ max-width:30ch }
@media (min-width:900px){ .hero .lede{ font-size:1.5rem; line-height:1.4; max-width:24ch } }

/* ── Restos de Ghost en los posts migrados ──────────────────────────────────
   Los tres artículos vienen del blog anterior y traen sus propias clases
   (.kg-*). El texto es real y se conserva [INVENTARIO 7.1], así que en vez de
   tocarlo se le da estilo en el lenguaje de la libreta. */

.cuerpo-post .kg-callout-card{
  position:relative; margin:26px 0; padding:20px 22px;
  background:#FBF8F0; border:0;
  box-shadow:inset 3px 0 0 var(--ink-faint);
}
.cuerpo-post .kg-callout-card-red{ box-shadow:inset 3px 0 0 var(--red) }
.cuerpo-post .kg-callout-text > p:last-child{ margin-bottom:0 }
.cuerpo-post .kg-callout-text p{ font-size:.98rem }
.cuerpo-post .italic{ font-style:italic }

/* Vídeos embebidos: proporción 16:9 sin depender de JS */
.video-wrapper{ position:relative; margin:24px 0; padding-top:56.25%; height:0 }
.video-wrapper iframe{ position:absolute; inset:0; width:100%; height:100%; margin:0; border:0 }

/* .txt es el envoltorio de texto de las fichas de proyecto de la home */
.proyectos .txt{ min-width:0 }
.cuerpo-post .kg-image-card{ margin:24px 0 }
.cuerpo-post .kg-image-card figcaption,
.cuerpo-post figcaption{
  font-family:var(--hand); font-size:.98rem; color:var(--ink-soft);
  text-align:center; margin-top:8px; transform:rotate(-.5deg);
}
.cuerpo-post .kg-image{ max-width:100%; height:auto }
.cuerpo-post .kg-card{ margin:24px 0 }
.cuerpo-post .kg-card-hascaption img{ margin-bottom:0 }

/* Botones y utilidades que traen los posts de Ghost. El botón se pinta con el
   mismo recuadro a mano que el resto del sitio, para que un enlace de un post
   no parezca de otra web. */
.cuerpo-post .kg-button-card{ margin:26px 0; text-align:center }
.cuerpo-post .kg-btn{
  position:relative; display:inline-flex; align-items:center; justify-content:center;
  min-height:48px; padding:13px 30px; font-family:var(--hand); font-weight:700;
  font-size:1.06rem; color:var(--ink); text-decoration:none; background-image:none;
  background-color:transparent; border:0; transition:transform .16s ease;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='212' height='48' preserveAspectRatio='none'%3E%3Cpath d='M6 8C60 4 130 5 196 6c8 .2 10 3 10 12s-1 15-9 15.5C130 35 62 34 8 33c-6-.3-6-4-6-12.5S1 8.4 6 8Z' fill='none' stroke='%232A2622' stroke-width='2.2' stroke-linecap='round' vector-effect='non-scaling-stroke'/%3E%3C/svg%3E") no-repeat center/100% 100%;
}
.cuerpo-post .kg-btn:hover{ transform:rotate(-1.4deg) scale(1.035) }
.cuerpo-post .kg-btn-accent{ color:#fff;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='212' height='48' preserveAspectRatio='none'%3E%3Cpath d='M6 8C60 4 130 5 196 6c8 .2 10 3 10 12s-1 15-9 15.5C130 35 62 34 8 33c-6-.3-6-4-6-12.5S1 8.4 6 8Z' fill='%23B54A41' stroke='%23B54A41' stroke-width='2.2' stroke-linejoin='round' vector-effect='non-scaling-stroke'/%3E%3C/svg%3E") no-repeat center/100% 100%;
}
.cuerpo-post .kg-align-center{ text-align:center }
.cuerpo-post .underline{ text-decoration:underline }
.cuerpo-post .twitter-tweet{ margin:24px auto }
@media (prefers-reduced-motion:reduce){ .cuerpo-post .kg-btn{ transition:none } }

/* ── Los dos planes, en columnas, colgando del árbol ────────────────────── */
.planes h2{ text-align:center; transform:rotate(-.5deg); transform-origin:center; margin-bottom:4px }
.arbol-2{ height:76px }
.dos{ display:grid; grid-template-columns:1fr 1fr; gap:0 46px; align-items:start }
.dos .plan:nth-child(1){ transform:rotate(-.4deg) }
.dos .plan:nth-child(2){ transform:rotate(.35deg) }
.plan h3{
  font-family:var(--hand); font-weight:700; font-size:1.36rem;
  margin:0 0 6px; text-align:center; line-height:1.25;
}
.plan .precio-plan{ text-align:center; margin:0 0 16px }
.plan .texto p{ max-width:none; font-size:.98rem }
.plan .texto ul{ max-width:none }
.plan .texto p:first-child{ margin-top:0 }

@media (max-width:820px){
  .dos{ grid-template-columns:1fr; gap:52px 0 }
  .dos .plan:nth-child(1),.dos .plan:nth-child(2){ transform:none }
  /* Apilados, el árbol de dos ramas ya no describe nada: se retira. */
  .arbol-2{ display:none }
  .planes h2{ text-align:left; transform:none }
}
@media (prefers-reduced-motion:reduce){
  .dos .plan:nth-child(1),.dos .plan:nth-child(2){ transform:none }
}

/* ── Selector de idioma ──────────────────────────────────────────────────
   El activo se rodea a mano en rojo (regla 4). El otro es tinta normal, sin
   subrayado de enlace: aquí el subrayado azul hacía creer que el seleccionado
   era el contrario. */
.idiomas a{
  color:var(--ink); background-image:none; text-decoration:none;
}
.idiomas a:hover{ color:var(--red) }
.idiomas .activo{
  position:relative; display:inline-block; color:var(--red);
  padding:4px 13px; margin:0 2px;
}
.idiomas .activo svg{
  position:absolute; inset:-5px -3px; width:calc(100% + 6px); height:calc(100% + 10px); overflow:visible;
}
.idiomas .activo .aro{
  fill:none; stroke:var(--red); stroke-width:2.2; stroke-linecap:round; vector-effect:non-scaling-stroke;
}

/* ── Cierre: despedida centrada, en la portada y en las landings ─────────
   Las reglas originales llevaban margin-left (8px en la firma, 26px en el
   correo) y transform-origin a la izquierda, que era lo que las descentraba. */
.despedida{ text-align:center }
.despedida p{
  margin-left:auto; margin-right:auto;
  transform-origin:center center;
}
.despedida .firma{ margin:22px auto 0 }
.despedida .correo{ margin:6px auto 0 }
/* El enlace de vuelta necesita separarse: es otro gesto, no parte de la firma */
.despedida .volver{
  margin:56px auto 0; font-family:var(--hand); font-size:1.05rem;
  transform:none; max-width:none;
}

/* Enlaces de localidad en el pie: discretos, del servicio en el que estás [D55] */
.f-zonas{
  margin:0 0 14px; max-width:none;
  font-family:var(--hand); font-size:.98rem; color:var(--ink-faint);
}
.f-zonas a{ color:var(--ink-soft); background-image:none; text-decoration:none }
.f-zonas a:hover{ color:var(--red) }
.f-zonas [aria-current]{ color:var(--red) }
.f-zonas .sep{ margin:0 6px; opacity:.5 }
@media (max-width:600px){ .f-zonas{ line-height:2 } }

/* ── Foco de los campos: el mismo trazo, en rojo y un poco más grueso ───── */
.form-libreta input[type=text]:focus,
.form-libreta input[type=email]:focus,
.form-libreta input[type=tel]:focus,
.form-libreta textarea:focus{
  outline:none;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='400' height='56' preserveAspectRatio='none'%3E%3Cpath d='M5 9C120 4 260 6 393 8c6 .3 5 4 5 20s0 20-6 20.5C260 51 130 49 7 48c-5-.4-5-4-5-19.5S1 9.3 5 9Z' fill='none' stroke='%23B54A41' stroke-width='3' stroke-linecap='round' vector-effect='non-scaling-stroke'/%3E%3C/svg%3E");
}
.form-libreta select:focus{
  outline:none;
  background-image:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='12'%3E%3Cpath d='M2 3.5C5 5 8 8 8 9.5 8.6 8 11 5 14 3.5' fill='none' stroke='%23B54A41' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E"),
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='400' height='56' preserveAspectRatio='none'%3E%3Cpath d='M5 9C120 4 260 6 393 8c6 .3 5 4 5 20s0 20-6 20.5C260 51 130 49 7 48c-5-.4-5-4-5-19.5S1 9.3 5 9Z' fill='none' stroke='%23B54A41' stroke-width='3' stroke-linecap='round' vector-effect='non-scaling-stroke'/%3E%3C/svg%3E");
}

/* ── Consentimiento: una frase, no bloques ──────────────────────────────────
   El label era flex, así que cada enlace de dentro se convertía en un ítem del
   flex y partía la frase. Vuelve a ser texto corrido con la casilla flotando. */
.form-libreta .acepto label{
  display:block; position:relative; padding:8px 0 8px 34px;
  font-family:var(--body); font-size:.95rem; color:var(--ink-soft);
  line-height:1.6; min-height:44px; cursor:pointer;
}
.form-libreta .acepto label input{ position:absolute; left:0; top:10px; margin:0 }
.form-libreta .acepto a{ white-space:normal }

/* Índice de servicios en las landings: el mismo árbol de la home, sin textos */
.servicios-indice h2{ text-align:center; transform:rotate(-.5deg); transform-origin:center }
.servicios-indice .tres .colu{ padding:0 6px }
.servicios-indice .aqui{
  font-family:var(--hand); font-weight:700; font-size:1.3rem; color:var(--red);
}
@media (max-width:700px){ .servicios-indice .aqui{ font-size:1.05rem } }

/* ── Casos de éxito ─────────────────────────────────────────────────────────
   Carpetas de la libreta, todas cerradas. Dentro, texto a la izquierda y las
   capturas pegadas con celo a la derecha, pequeñas y ampliables. */
.casos .caso{
  margin:0 0 10px; padding:0 0 10px;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='600' height='4' preserveAspectRatio='none'%3E%3Cpath d='M2 2.4C120 1 300 3.2 460 1.8c50-.4 100 1.4 138 .8' fill='none' stroke='%23786C51' stroke-width='1.4' stroke-linecap='round' opacity='.5'/%3E%3C/svg%3E") repeat-x bottom;
}
.casos .caso > summary{
  font-family:var(--hand); font-weight:700; font-size:1.2rem; line-height:1.3;
  cursor:pointer; list-style:none; padding:13px 46px 13px 34px; position:relative; min-height:44px;
}
.casos .caso > summary::-webkit-details-marker{ display:none }
.casos .caso > summary::before{
  content:""; position:absolute; left:0; top:1.1em; width:22px; height:14px;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='22' height='14'%3E%3Cpath d='M1.5 12.5C1 8 1.2 4.4 2 2.2c2.6-.5 5-.6 7 .2 1 .5 1.4 1.4 2.2 1.6 3 .3 6 .2 9.3.2.6 3 .6 6 .2 8.4-6 .5-12.6.5-19.2-.1Z' fill='none' stroke='%23B54A41' stroke-width='1.8' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat;
}
.casos .caso > summary::after{
  content:""; position:absolute; right:6px; top:1.2em; width:17px; height:11px;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='11'%3E%3Cpath d='M2 3C5.5 5 8.5 8.6 8.6 9.6 9 8.4 12 4.6 15 2.6' fill='none' stroke='%23B54A41' stroke-width='2.2' stroke-linecap='round'/%3E%3C/svg%3E") no-repeat;
  transition:transform .18s ease;
}
.casos .caso[open] > summary::after{ transform:rotate(180deg) }

.caso-cuerpo{ display:grid; grid-template-columns:1fr 250px; gap:0 34px; padding:6px 0 22px 34px; align-items:start }
.caso-cuerpo .texto p{ max-width:none; font-size:.98rem }

/* Las capturas: recortes pegados con celo, como la foto del «sobre mí» */
.capturas figure{ margin:0 0 26px; position:relative }
.capturas figure:last-child{ margin-bottom:0 }
.capturas img{
  display:block; width:100%; height:auto;
  border:1px solid rgba(42,38,34,.12); background:#fff; padding:5px;
}
.capturas a{ display:block; background-image:none }
.capturas figure:nth-child(odd){ transform:rotate(-1deg) }
.capturas figure:nth-child(even){ transform:rotate(.8deg) }
.capturas figcaption{
  font-family:var(--hand); font-size:.86rem; color:var(--ink-faint);
  text-align:center; margin-top:7px; line-height:1.35;
}
@media (prefers-reduced-motion:reduce){
  .capturas figure:nth-child(odd),.capturas figure:nth-child(even){ transform:none }
  .casos .caso > summary::after{ transition:none }
}
@media (max-width:900px){
  .caso-cuerpo{ grid-template-columns:1fr; gap:24px 0; padding-left:30px }
  .capturas{ display:grid; grid-template-columns:1fr 1fr; gap:0 20px }
}

/* La hora de la auditoría es un dato, no un campo: se muestra escrita a mano */
.form-libreta .hora-fija{ margin-bottom:26px }
.form-libreta .hora-fija .etiqueta{
  display:block; font-family:var(--body); font-weight:600; font-size:.95rem; margin-bottom:6px;
}
.form-libreta .hora-fija .valor{
  display:inline-block; font-family:var(--hand); font-weight:700;
  font-size:1.3rem; color:var(--ink);
}
.form-libreta .hora-fija .sub{ display:block; margin:8px 0 0; font-size:.98rem; max-width:44ch }

/* El precio, justo debajo del H1 de la landing de auditoría */
.precio-hero{ margin:6px 0 0 }

/* Términos y condiciones plegados */
.terminos{ margin:0 }
.terminos > summary{
  font-family:var(--hand); font-weight:700; font-size:1.2rem; line-height:1.3;
  cursor:pointer; list-style:none; padding:14px 44px 14px 0; position:relative; min-height:44px;
  color:var(--ink-soft);
}
.terminos > summary::-webkit-details-marker{ display:none }
.terminos > summary::after{
  content:""; position:absolute; right:4px; top:1.25em; width:17px; height:11px;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='11'%3E%3Cpath d='M2 3C5.5 5 8.5 8.6 8.6 9.6 9 8.4 12 4.6 15 2.6' fill='none' stroke='%23B54A41' stroke-width='2.2' stroke-linecap='round'/%3E%3C/svg%3E") no-repeat;
  transition:transform .18s ease;
}
.terminos[open] > summary::after{ transform:rotate(180deg) }
.terminos > div{ padding-top:6px }
@media (prefers-reduced-motion:reduce){ .terminos > summary::after{ transition:none } }

/* ── Aire superior ──────────────────────────────────────────────────────────
   La home respira arriba porque su hero lo trae de serie. Las demás plantillas
   arrancaban pegadas al borde. */
main > section:first-child,
main > article:first-child{ padding-top:72px }
@media (max-width:700px){
  main > section:first-child,
  main > article:first-child{ padding-top:44px }
}

/* La nota del hero cuelga del bloque del lede, no de la sección */
.hero-linea{ position:relative }
@media (min-width:1240px){
  .wrap .hero-linea.con-nota > .sub{
    position:absolute; left:calc(100% + 34px); top:2px; width:200px; margin:0 !important;
    font-size:1.02rem; text-align:left !important; transform:rotate(1.8deg); transform-origin:left top;
  }
}

/* Garantía de satisfacción: rodeada en rojo y centrada */
.garantia-bloque{ text-align:center }
.cifra-centro{ margin:0 0 18px }
.garantia-bloque .cifra.larga{ max-width:28ch; font-size:1.05rem }
.garantia-bloque > .sub{
  margin:0 auto; max-width:46ch; text-align:center;
  transform:rotate(-.5deg); transform-origin:center;
}

/* Botón de enviar y precio, en la misma línea */
.form-libreta .enviar{ display:flex; align-items:center; gap:22px; flex-wrap:wrap }
.form-libreta .enviar .precio{ margin:0 }

/* ═══════════════════════════════════════════════════════════════════════════
   Ajustes del repaso del 2026-08-21 (segunda tanda)
   ═══════════════════════════════════════════════════════════════════════════ */

/* 1 · La home también necesita aire arriba. Su .hero trae padding:64px, pero
   la excepción que se puso para no duplicarlo lo dejaba pegado al borde. */
.p-home main > section:first-child{ padding-top:56px }

/* 3 · Los índices (blog, apariciones, ponencias) mareaban.
   Historia: bajar el color a tinta no bastaba, y variar la loseta del
   subrayado línea a línea ROMPIÓ SU COSTURA — el trazo entra y sale por el
   borde de la loseta a la misma altura, y moverla la parte por dentro. Es el
   bug que DISENO.md avisa dos veces de no reintroducir. Revertido.

   Solución: en estas listas el enlace no se subraya en reposo, se **señala
   con una flecha a mano** — que es para lo que existen las flechas (regla 5).
   Va en azul de enlace, como el texto, para no salirse de la línea del resto
   de enlaces de la web.

   Al pasar por encima **se dibuja el subrayado de izquierda a derecha**, con
   el mismo mecanismo que el fluorescente de la home (background-size de 0 a
   100 %). No es vocabulario nuevo: es el gesto de «se dibuja al entrar» que
   ya usa el sistema. Y el resultado del hover es exactamente el aspecto de
   cualquier otro enlace de la web, así que el reposo es la única excepción,
   y está justificada: es una lista, no un enlace suelto en un párrafo. */
.indice a{
  color:var(--link);
  /* DOS capas de fondo:
       1 · una tapa del color del papel, que empieza cubriendo el subrayado
           entero y se retira de derecha a izquierda al pasar por encima;
       2 · el subrayado, con su loseta ORIGINAL y REPETIDA (repeat-x).
     La loseta no se toca: ni se estira ni se desplaza, así que no se rompe su
     costura ni deja de dibujarse línea a línea. Lo que se anima es la tapa.
     (Un intento anterior puso la loseta en no-repeat para poder estirarla, y
     el subrayado pasó a ser una sola onda al fondo del bloque en vez de un
     trazo por línea: se veía un fragmento suelto.) */
  background-image:
    linear-gradient(var(--paper), var(--paper)),
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='10' viewBox='0 0 140 10'%3E%3Cpath d='M0 6C30 2.6 60 8.6 90 5.2S122 3.6 140 6' fill='none' stroke='%231E4F86' stroke-width='3.4' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat, repeat-x;
  background-position:right bottom, 0 100%;
  background-size:100% 12px, 140px 10px;
  padding:2px 0 5px;
  transition:background-size .32s ease;
}
.indice a::after{
  content:""; display:inline-block; vertical-align:baseline;
  width:26px; height:11px; margin-left:9px;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='26' height='11'%3E%3Cpath d='M1 6.4C7 4.9 14 7 21 5.6' fill='none' stroke='%231E4F86' stroke-width='2' stroke-linecap='round'/%3E%3Cpath d='M17 2.6l5.5 2.6-5.8 3' fill='none' stroke='%231E4F86' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat center/contain;
  transition:transform .16s ease;
}
/* Misma mano, distinto pulso (regla 5): ninguna flecha idéntica a su vecina */
.indice li:nth-child(2n) a::after{ transform:rotate(-2.5deg) }
.indice li:nth-child(3n) a::after{ transform:rotate(1.8deg) scaleX(.94) }
.indice li:nth-child(4n) a::after{ transform:rotate(-1.2deg) scaleX(1.06) }

/* Al pasar por encima la tapa se retira y el subrayado queda a la vista,
   dibujándose de izquierda a derecha. */
.indice a:hover, .indice a:focus-visible{ background-size:0 12px, 140px 10px }
.indice a:hover::after{ transform:translateX(4px) }
.indice li:nth-child(2n) a:hover::after{ transform:translateX(4px) rotate(-2.5deg) }
.indice li:nth-child(3n) a:hover::after{ transform:translateX(4px) rotate(1.8deg) scaleX(.94) }
.indice li:nth-child(4n) a:hover::after{ transform:translateX(4px) rotate(-1.2deg) scaleX(1.06) }

@media (prefers-reduced-motion:reduce){
  .indice a, .indice a::after{ transition:none }
  .indice a:hover::after{ transform:none }
}

/* 4 · El círculo largo (DOMS) pisaba su propio texto y el trazo era más grueso
   que el de los demás. Más aire dentro, trazo igualado y el óvalo un poco más
   holgado que la caja de texto. */
.cifra.larga{
  max-width:26ch; padding:14px 26px; line-height:1.45;
}
.cifra.larga svg{ inset:-10px -10px; width:calc(100% + 20px); height:calc(100% + 20px) }
.cifra.larga .aro{ stroke-width:2.2 }

/* 5b · La nota al margen del bloque de planes: en pantalla ancha va al margen
   (bien), pero al plegarse quedaba alineada a la izquierda bajo un título
   centrado y pegada a él. Cuando fluye dentro de la columna, se centra. */
@media (max-width:1239px){
  .planes.con-nota > .sub{
    text-align:center; margin:14px auto 30px; max-width:44ch;
    transform:rotate(-.5deg); transform-origin:center;
  }
}

/* 6 · Los textarea pisaban el trazo superior de su caja dibujada. */
.form-libreta textarea{ padding:18px 15px 14px }

/* 7 · Casos de éxito: en pantalla estrecha las capturas bajan bajo el texto, y
   si hay más de una se reparten en columnas para no encadenar scroll. */
@media (max-width:900px){
  .caso-cuerpo{ grid-template-columns:1fr; gap:26px 0; padding-left:30px }
  .capturas{ display:grid; grid-template-columns:repeat(auto-fit, minmax(220px, 1fr)); gap:22px 20px }
  .capturas figure{ margin:0 }
}
@media (max-width:520px){
  .caso-cuerpo{ padding-left:0 }
  .capturas{ grid-template-columns:1fr }
  .casos .caso > summary{ padding-left:30px }
}
