/* Hoja compartida por todas las fichas de proyecto.
   Un cambio aquí se aplica a los 10. Generadas por generar.mjs. */
*,*::before,*::after{box-sizing:border-box}
:root{
  --paper:#e9e9e7; --paper-2:#dedcd8; --ink:#000; --void:#141017;
  --mute:#6f6b76; --line:rgba(0,0,0,.14); --accent:#d6ff3f;
  --sans:'Plus Jakarta Sans',system-ui,-apple-system,'Segoe UI',sans-serif;
  --fs-display:clamp(2.6rem,7vw,7rem);
  --fs-h2:clamp(1.5rem,2.4vw,2.4rem);
  --fs-body:clamp(1rem,1.25vw,1.25rem);
  --fs-micro:.875rem;
  --r-lg:60px; --r-md:20px; --r-pill:100px;
  --gut:clamp(1.25rem,3.4vw,3.4rem);
  --max:1600px; --medida:1120px; --sec:clamp(3.5rem,9vh,7rem);
}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body{
  margin:0;background:var(--paper);color:var(--ink);
  font-family:var(--sans);font-size:1rem;line-height:1.6;
  -webkit-font-smoothing:antialiased;overflow-x:hidden
}
a{color:inherit;text-decoration:none}
h1,h2{margin:0;font-weight:300;letter-spacing:normal;line-height:1}
p{margin:0}
body::after{
  content:'';position:fixed;inset:0;z-index:999;pointer-events:none;opacity:.035;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)'/%3E%3C/svg%3E")
}
.wrap{max-width:var(--max);margin-inline:auto;padding-inline:var(--gut)}
main.wrap{padding-bottom:var(--r-lg)}
.eyebrow{font-size:var(--fs-micro);font-weight:600;letter-spacing:.15em;text-transform:uppercase;line-height:1.3}
.arrow{width:1em;height:1em;stroke:currentColor;fill:none;stroke-width:1.8;flex:0 0 auto}

/* ── barra superior ── */
.top{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:clamp(1.1rem,2.4vw,1.9rem) var(--gut)}
.logo{display:inline-flex;align-items:center;justify-content:center;min-width:44px;min-height:44px;
      font-size:1.5rem;font-weight:500;letter-spacing:-.1em;text-transform:lowercase}
.volver{display:inline-flex;align-items:center;min-height:44px;gap:.5rem;font-weight:500;
        border-bottom:1px solid transparent;transition:border-color .3s}
.volver:hover{border-color:var(--ink)}
.volver .arrow{transition:transform .3s}
.volver:hover .arrow{transform:translateX(-3px)}

/* El idioma y el enlace de volver van juntos a la derecha. Sueltos, el
   space-between de .top dejaba el selector flotando en mitad de la barra. */
.top-der{display:flex;align-items:center;gap:.2rem}

/* selector de idioma en la barra superior de las paginas interiores */
.idioma{display:inline-flex;align-items:center;margin-right:.9rem;padding-right:.9rem;
        border-right:1px solid var(--line)}
.idioma a{display:inline-flex;align-items:center;min-height:44px;padding:0 .45rem;
          font-size:.75rem;font-weight:500;letter-spacing:.06em;
          color:rgba(0,0,0,.4);transition:color .3s}
.idioma a.on,.idioma a:hover{color:var(--ink)}

/* ── portada ── */
.hero{padding:clamp(2rem,7vh,5rem) 0 var(--sec)}
.hero .eyebrow{color:rgba(0,0,0,.5);margin-bottom:1.4rem}
.hero h1{font-size:var(--fs-display);margin-bottom:2rem}
.lead{font-size:var(--fs-body);line-height:1.55;color:rgba(0,0,0,.68);max-width:44rem}

/* ── bloque de datos ── */
.meta{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:1.6rem;
      border-top:1px solid var(--line);padding-top:1.8rem;margin-bottom:var(--sec)}
.meta .eyebrow{color:rgba(0,0,0,.42);margin-bottom:.5rem}
.meta b{font-weight:500;font-size:1rem}
.meta a{display:inline-flex;align-items:center;min-height:44px;gap:.4rem;font-weight:500;
        border-bottom:1px solid transparent;transition:border-color .3s}
.meta a:hover{border-color:var(--ink)}

/* ── imágenes ── */
/* Medida de las imagenes. A los 1491px del ancho completo cada plancha
   se comia la pantalla y obligaba a hacer scroll para ver una sola foto.
   1120 no es un numero redondo por gusto: es el ancho nativo de los
   archivos mas pequenos, asi que ninguna se amplia y todas se ven
   nitidas. Van centradas dentro del ancho general. */
.shot.ancho,.par,.galeria{max-width:var(--medida);margin-inline:auto}
.shot{margin:0 0 clamp(1.4rem,3vw,2.4rem)}
.shot .frame{
  border-radius:var(--r-md);overflow:hidden;aspect-ratio:16/10;
  display:grid;place-items:center;color:rgba(255,255,255,.5);
  font-size:var(--fs-micro);letter-spacing:.14em;text-transform:uppercase
}
.shot img,.shot video,.shot iframe{width:100%;height:100%;object-fit:cover;display:block;border:0}
.shot figcaption{margin-top:.9rem;font-size:var(--fs-micro);color:rgba(0,0,0,.5)}
.par{display:grid;grid-template-columns:1fr 1fr;gap:clamp(1rem,2.4vw,2rem);margin-bottom:clamp(1.4rem,3vw,2.4rem)}
.par .shot{margin-bottom:0}
@media(max-width:760px){.par{grid-template-columns:1fr}}
/* marcadores de color mientras no hay imagen real */
.f1{background:linear-gradient(155deg,#1d2b26,#2f5147 48%,#4d7d6e)}
.f2{background:linear-gradient(155deg,#75391a,#b56732 48%,#dc9d5f)}
.f3{background:linear-gradient(155deg,#101218,#282d35 55%,#474e5a)}
.f4{background:linear-gradient(155deg,#2a2140,#4b3a72 48%,#7a63ad)}

/* ── imagen a sangre ── */
/* calc(50% - 50vw) en el margen la saca de la medida hasta el borde del
   viewport sin tocar el ancho. El body ya lleva overflow-x:hidden, asi
   que no aparece barra horizontal. El pie se queda dentro de la medida:
   una linea de texto pegada al borde de la pantalla no se lee. */
.shot.sangrado{max-width:none;margin-inline:calc(50% - 50vw);
  margin-bottom:clamp(1.4rem,3vw,2.4rem)}
.shot.sangrado .frame{border-radius:0}
.shot.sangrado figcaption{max-width:var(--medida);margin-inline:auto;padding-inline:var(--gut)}

/* ── vertical con texto al lado ── */
.vertical{max-width:var(--medida);margin:0 auto var(--sec);
  display:grid;grid-template-columns:minmax(0,.8fr) minmax(0,1fr);
  gap:clamp(1.6rem,4vw,3.4rem);align-items:center}
.vertical.derecha .shot{order:2}
.vertical .shot{margin-bottom:0}
.vertical-txt h2{font-size:var(--fs-h2);font-weight:300;margin-bottom:1.2rem}
.vertical-txt p{color:rgba(0,0,0,.72);line-height:1.65;margin-bottom:1rem;max-width:34rem}
.vertical-txt p:last-child{margin-bottom:0}
@media(max-width:760px){
  .vertical{grid-template-columns:1fr;gap:1.6rem}
  .vertical.derecha .shot{order:0}
}

/* ── mosaico ── */
.mosaico{max-width:var(--medida);margin:0 auto var(--sec);
  display:grid;grid-template-columns:repeat(12,1fr);
  gap:clamp(1rem,2.4vw,2rem);align-items:start}
.mosaico .shot{margin-bottom:0}
.mosaico .bajo{margin-top:clamp(2rem,6vw,5rem)}
/* En movil el mosaico se deshace: una columna y sin descuelgue. El
   !important pisa el grid-column que va en linea, que es donde vive el
   ancho de cada pieza. */
@media(max-width:760px){
  .mosaico{grid-template-columns:1fr;gap:1.4rem}
  .mosaico .shot{grid-column:1/-1!important}
  .mosaico .bajo{margin-top:0}
}

/* ── paleta de marca ── */
.paleta{max-width:var(--medida);margin:0 auto var(--sec)}
.paleta .eyebrow{color:rgba(0,0,0,.42);margin-bottom:1.2rem}
/* Cuatro columnas y filas de igual alto: el primer color ocupa 2x2 y los
   demas se reparten lo que queda. Con cinco colores la rejilla cierra
   exacta; con otros numeros la ultima fila queda corta, que es preferible
   a estirar un swatch hasta deformarlo. */
.paleta-grid{display:grid;grid-template-columns:repeat(4,1fr);
  grid-auto-rows:minmax(148px,1fr);gap:clamp(.6rem,1.4vw,1rem)}
.paleta-color{border-radius:var(--r-md);padding:clamp(1rem,2vw,1.4rem);
  display:flex;flex-direction:column;justify-content:space-between;
  box-shadow:inset 0 0 0 1px rgba(0,0,0,.06)}
.paleta-color.destacado{grid-column:span 2;grid-row:span 2}
.paleta-color.ancho{grid-column:span 2}
.paleta-nombre{font-size:var(--fs-micro);font-weight:500}
.paleta-hex{font-size:var(--fs-micro);letter-spacing:.08em;font-variant-numeric:tabular-nums;opacity:.85}
@media(max-width:760px){
  .paleta-grid{grid-template-columns:repeat(2,1fr)}
  .paleta-color.destacado{grid-row:span 1;min-height:200px}
}

/* ── vídeo ── */
.video .frame{aspect-ratio:16/9;background:#000}

/* ── galería en carrusel ── */
.galeria{margin-bottom:var(--sec)}
.galeria .track{
  display:grid;grid-auto-flow:column;grid-auto-columns:min(46%,520px);
  gap:clamp(1rem,2vw,1.6rem);overflow-x:auto;scroll-snap-type:x mandatory;
  scrollbar-width:none;cursor:grab;padding-bottom:.5rem
}
.galeria .track::-webkit-scrollbar{display:none}
.galeria .track.drag{cursor:grabbing;scroll-snap-type:none}
.galeria .slide{scroll-snap-align:start;user-select:none;margin:0}
.galeria .slide .frame{border-radius:var(--r-md);overflow:hidden;display:grid;place-items:center;
  color:rgba(255,255,255,.5);font-size:var(--fs-micro);letter-spacing:.14em;text-transform:uppercase}
.galeria .slide img{width:100%;height:100%;object-fit:cover;display:block}
.galeria .slide figcaption{margin-top:.8rem;font-size:var(--fs-micro);color:rgba(0,0,0,.5)}
@media(max-width:760px){.galeria .track{grid-auto-columns:86%}}
.bullets{display:flex;justify-content:center;margin-top:1.4rem}
.bullets button{width:44px;height:44px;padding:0;border:0;background:none;cursor:pointer;display:grid;place-items:center}
.bullets button::before{content:'';width:7px;height:7px;border-radius:50%;
  background:rgba(0,0,0,.2);transition:background .3s,transform .3s}
.bullets button.on::before{background:var(--ink);transform:scale(1.35)}

 /* ── rejilla del índice: 2 por fila ── */
.pgrid{display:grid;grid-template-columns:1fr 1fr;gap:clamp(1.4rem,3vw,2.6rem);margin-bottom:var(--sec)}
@media(max-width:820px){.pgrid{grid-template-columns:1fr}}
.pcard{position:relative;display:block;transition:transform .35s}
.pcard:hover{transform:translateY(-4px)}
.pcard-img{
  border-radius:var(--r-md);overflow:hidden;aspect-ratio:4/3;margin-bottom:1.2rem;
  display:grid;place-items:center;color:rgba(255,255,255,.5);
  font-size:var(--fs-micro);letter-spacing:.14em;text-transform:uppercase
}
.pcard-img img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .5s}
.pcard:hover .pcard-img img{transform:scale(1.04)}
.pcard-txt .eyebrow{color:rgba(0,0,0,.45);display:block;margin-bottom:.5rem}
.pcard-txt h2{font-size:clamp(1.4rem,2.2vw,2.1rem);font-weight:300;line-height:1.15}
.pcard-tags{display:flex;flex-wrap:wrap;gap:.4rem;margin-top:.9rem}
.pcard-tags span{font-size:.8125rem;border:1px solid var(--line);border-radius:var(--r-pill);padding:.28rem .75rem}
.pcard-go{
  position:absolute;top:1rem;right:1rem;width:46px;height:46px;border-radius:50%;
  background:rgba(255,255,255,.9);backdrop-filter:blur(8px);display:grid;place-items:center;
  transition:background-color .3s,color .3s
}
.pcard:hover .pcard-go{background:var(--ink);color:var(--paper)}

/* ── bloque de texto ── */
.cierre{max-width:44rem;margin-bottom:var(--sec)}
.cierre h2{font-size:var(--fs-h2);line-height:1.3;margin-bottom:1.2rem;font-weight:400}
.cierre p{color:rgba(0,0,0,.68);font-size:var(--fs-body);line-height:1.55;margin-bottom:1rem}

/* ── espina del caso: reto / enfoque / resultado ── */
.caso{display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(1.4rem,2.8vw,2.4rem);
      border-top:1px solid var(--line);padding-top:2rem;margin-bottom:var(--sec)}
@media(max-width:1100px){.caso{grid-template-columns:1fr 1fr;gap:2rem}}
@media(max-width:620px){.caso{grid-template-columns:1fr;gap:1.8rem}}
/* el numero de tiempo delante: deja leer el caso como una secuencia */
.caso-col{counter-increment:paso}
.caso-col .eyebrow::before{content:counter(paso,decimal-leading-zero) ' · ';opacity:.5}
.caso{counter-reset:paso}
.caso .eyebrow{color:rgba(0,0,0,.42);margin-bottom:.9rem}
.caso p{color:rgba(0,0,0,.72);line-height:1.6;margin-bottom:.8rem}
.caso p:last-child{margin-bottom:0}

/* ── cifras del proyecto ── */
.cifras-p{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));
          gap:clamp(1.4rem,3vw,2.4rem);border-top:1px solid var(--line);
          padding-top:2.2rem;margin-bottom:var(--sec)}
.cifra b{display:block;font-size:clamp(2.2rem,4.5vw,3.6rem);font-weight:300;line-height:1}
.cifra span{display:block;margin-top:.6rem;font-size:var(--fs-micro);
            color:rgba(0,0,0,.5);line-height:1.4}
.cifras-fuente{grid-column:1/-1;margin-top:.6rem;font-size:var(--fs-micro);
               color:rgba(0,0,0,.42)}

/* ── saltos entre proyectos ── */
/* Dos columnas, anterior y siguiente. Con una sola direccion, llegar al
   proyecto 2 desde el 3 obligaba a dar la vuelta entera por el 4 y el 1.
   El enlace de Volver existe, pero vive arriba del todo y para cuando
   has bajado hasta aqui ya no esta a la vista. */
.saltos{display:grid;grid-template-columns:1fr 1fr;gap:clamp(1rem,2vw,1.6rem);
  margin-bottom:var(--sec);align-items:stretch}
.saltos .next{margin-bottom:0}
/* En el de vuelta la flecha va delante, pegada al texto: con
   space-between quedaria en la otra punta y apuntando a ningun sitio. */
.next.atras{justify-content:flex-start}
@media(max-width:760px){.saltos{grid-template-columns:1fr}}

.next{
  background:#fff;border-radius:var(--r-lg);padding:clamp(2rem,5vw,3.5rem);
  display:flex;justify-content:space-between;align-items:center;gap:1.5rem;flex-wrap:wrap;
  margin-bottom:var(--sec);transition:transform .3s
}
.next:hover{transform:translateY(-3px)}
.next .eyebrow{color:rgba(0,0,0,.42);margin-bottom:.6rem}
.next strong{display:block;font-size:var(--fs-h2);font-weight:300;line-height:1.1}
.next .go{width:56px;height:56px;flex:0 0 56px;border-radius:50%;border:1px solid var(--line);
          display:grid;place-items:center;font-size:1.1rem;transition:background-color .3s,color .3s}
.next:hover .go{background:var(--ink);color:var(--paper)}

/* ── pie completo, mismo panel blanco que la portada ── */
.foot{
  background:#fff;color:var(--ink);
  border-radius:var(--r-lg) var(--r-lg) 0 0;
  margin-top:calc(var(--r-lg) * -1);   /* monta sobre el hueso: si no, la
                                          esquina recortada deja ver el fondo */
  /* el mismo respiro que el pie de la portada: alli --sec es mayor que aqui,
     asi que el pie lleva su propia medida y no la del ritmo de la ficha */
  padding:clamp(4rem,11vh,9rem) 0 6rem;position:relative;z-index:2
}
.foot-top{
  display:flex;justify-content:space-between;align-items:flex-end;gap:2rem;flex-wrap:wrap;
  padding-bottom:2rem;border-bottom:1px solid var(--line);margin-bottom:clamp(2rem,6vh,4rem)
}
.foot-id .eyebrow{color:rgba(0,0,0,.42)}
.foot-id b{display:block;font-size:1rem;font-weight:500;margin-top:.45rem}
.avatar{
  width:96px;height:96px;flex:0 0 96px;border-radius:50%;overflow:hidden;
  background:linear-gradient(160deg,var(--paper-2),#c9c6c0);display:grid;place-items:center;
  font-size:.6rem;letter-spacing:.12em;color:rgba(0,0,0,.38);text-transform:uppercase;text-align:center
}
.avatar img{width:100%;height:100%;object-fit:cover}
.big{font-size:clamp(3rem,8.92vw,8.92rem);font-weight:300;line-height:1;
     display:flex;align-items:flex-end;flex-wrap:wrap;gap:clamp(1.2rem,3vw,2.4rem)}
.big span{display:block}

/* redes junto al titular del pie, alineadas a su linea base */
/* .big span{display:block} es mas especifica que .redes y la dejaba
   en block: los iconos se apilaban en columna. De ahi el .big .redes */
.big .redes{display:flex;align-items:center;gap:.35rem;
            padding-bottom:clamp(.5rem,1.2vw,1.2rem)}
.big .redes a{display:grid;place-items:center;width:46px;height:46px;border-radius:50%;
  border:1px solid var(--line);color:var(--ink);
  transition:background-color .3s,color .3s,border-color .3s,transform .3s}
.big .redes a:hover{background:var(--ink);color:var(--paper);border-color:var(--ink);transform:translateY(-2px)}
.big .redes svg{width:17px;height:17px;fill:currentColor;display:block}
@media(max-width:620px){.big .redes a{width:42px;height:42px}.big .redes svg{width:16px;height:16px}}
.contact-grid{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));
  gap:1.6rem;margin-top:clamp(2.5rem,7vh,4.5rem)
}
.contact-grid .eyebrow{color:rgba(0,0,0,.42);margin-bottom:.5rem}
.contact-grid a,.contact-grid span.v{
  display:inline-flex;align-items:center;min-height:44px;
  font-size:1rem;font-weight:500;border-bottom:1px solid transparent;transition:border-color .3s
}
.contact-grid a:hover{border-color:var(--ink)}
.foot-bar{
  display:flex;justify-content:space-between;gap:1.4rem;flex-wrap:wrap;
  margin-top:clamp(2.5rem,7vh,5rem);padding-top:1.5rem;
  border-top:1px solid var(--line);font-size:var(--fs-micro);color:rgba(0,0,0,.5)
}

/* ── curriculum ── */
.top-acciones{display:flex;align-items:center;gap:1rem}
.cv-cabecera{display:flex;justify-content:space-between;align-items:flex-end;gap:2rem;
             flex-wrap:wrap;padding:clamp(2rem,6vh,4rem) 0 2rem;
             border-bottom:1px solid var(--line)}
.cv-cabecera .eyebrow{color:rgba(0,0,0,.5);margin-bottom:1rem}
.cv-cabecera h1{font-size:clamp(2.4rem,5.5vw,4.4rem);margin-bottom:1.1rem}
.cv-cabecera .lead{max-width:34rem}
.cv-cabecera .avatar{width:120px;height:120px;flex:0 0 120px}

.cv-contacto{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));
             gap:1.4rem;padding:1.8rem 0;border-bottom:1px solid var(--line)}
.cv-contacto .eyebrow{color:rgba(0,0,0,.42);margin-bottom:.4rem}
.cv-contacto a,.cv-contacto span{font-size:.9375rem;font-weight:500}
.cv-contacto a{border-bottom:1px solid transparent;transition:border-color .3s}
.cv-contacto a:hover{border-color:var(--ink)}

/* etiqueta a la izquierda y contenido a la derecha: se escanea de un vistazo */
.cv-bloque{display:grid;grid-template-columns:minmax(140px,180px) 1fr;
           gap:clamp(1.2rem,3vw,3rem);padding:clamp(2rem,5vh,3.2rem) 0;
           border-bottom:1px solid var(--line)}
.cv-bloque h2{font-size:var(--fs-micro);font-weight:600;letter-spacing:.15em;
              text-transform:uppercase;color:rgba(0,0,0,.42);line-height:1.3;padding-top:.3rem}
@media(max-width:760px){.cv-bloque{grid-template-columns:1fr;gap:1rem}}
.cv-cuerpo p{color:rgba(0,0,0,.72);line-height:1.65;margin-bottom:1rem;max-width:44rem}
.cv-cuerpo p:last-child{margin-bottom:0}

.cv-row{display:grid;grid-template-columns:130px 1fr;gap:.4rem 1.4rem;
        padding:.85rem 0;border-bottom:1px solid rgba(0,0,0,.07)}
.cv-row:last-child{border-bottom:0;padding-bottom:0}
.cv-yr{font-size:.8125rem;color:rgba(0,0,0,.45);padding-top:.15rem}
.cv-nm{font-weight:500}
.cv-dt{grid-column:2;font-size:.9375rem;color:rgba(0,0,0,.6)}
@media(max-width:560px){.cv-row{grid-template-columns:1fr}.cv-dt{grid-column:1}}

.cv-fig-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:1.6rem}
.cv-fig b{display:block;font-size:clamp(1.8rem,3.2vw,2.6rem);font-weight:300;line-height:1}
.cv-fig span{display:block;margin-top:.45rem;font-size:.8125rem;color:rgba(0,0,0,.5);line-height:1.4}
.cv-stack{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:1.6rem}
.cv-stack .eyebrow{color:rgba(0,0,0,.42);margin-bottom:.6rem}
.cv-stack ul{margin:0;padding:0;list-style:none}
.cv-stack li{font-size:.9375rem;color:rgba(0,0,0,.7);padding:.16rem 0}
.cv-idiomas{display:flex;gap:2.4rem;flex-wrap:wrap}
.cv-idiomas b{display:block;font-weight:500}
.cv-idiomas span{font-size:.875rem;color:rgba(0,0,0,.5)}
.cv-pie-nota{margin:2rem 0 var(--sec);font-size:var(--fs-micro);color:rgba(0,0,0,.42)}

/* ── hoja de impresion: esto es lo que sale al hacer PDF ──
   Fuera todo lo que no es documento y el fondo a blanco puro, que si no
   las impresoras se comen medio cartucho en el gris del sitio. */
@media print{
  @page{size:A4;margin:14mm 14mm 16mm}
  body,body.doc{background:#fff!important;font-size:10.5pt}
  body::after{display:none!important}                 /* el grano */
  .top,.wa,.foot,.ck,.top-acciones{display:none!important}
  [data-in]{visibility:visible!important;animation:none!important}
  .wrap{max-width:none;padding-inline:0}
  main.wrap{padding-bottom:0}
  .cv-cabecera{padding-top:0}
  .cv-cabecera h1{font-size:24pt}
  .cv-cabecera .avatar{width:82px;height:82px;flex:0 0 82px}
  .cv-bloque{break-inside:avoid;page-break-inside:avoid;padding:12pt 0}
  .cv-row{break-inside:avoid;page-break-inside:avoid}
  h2,h1{break-after:avoid;page-break-after:avoid}
  a{text-decoration:none;color:#000}
  /* la URL detras de cada enlace: en papel un enlace sin destino no sirve */
  .cv-contacto a::after{content:' (' attr(href) ')';font-size:8pt;color:#555;word-break:break-all}
  .cv-contacto a[href^="mailto:"]::after,.cv-contacto a[href^="tel:"]::after{content:''}
}

/* ── whatsapp ── */
/* --cookie-h lo publica cookies.js: es el alto que ocupa el aviso.
   Vale 0 mientras no hay aviso, asi que en reposo no cambia nada. */
.wa{position:fixed;right:22px;bottom:calc(26px + var(--cookie-h,0px));z-index:78;width:54px;height:54px;border-radius:50%;
    background:var(--ink);color:var(--paper);display:grid;place-items:center;
    box-shadow:0 6px 24px rgba(0,0,0,.3);transition:transform .3s,background-color .3s,color .3s,bottom .5s cubic-bezier(.2,.8,.2,1)}
.wa:hover{transform:translateY(-3px);background:var(--accent);color:var(--ink)}
.wa svg{width:27px;height:27px;fill:currentColor}
@media(max-width:820px){.wa{right:12px;bottom:calc(16px + var(--cookie-h,0px));width:50px;height:50px}}

/* ── paginas legales ── */
.legal{max-width:46rem;margin-bottom:var(--sec)}
.legal h2{font-size:clamp(1.25rem,1.9vw,1.6rem);font-weight:500;line-height:1.3;
          margin:clamp(2.2rem,5vh,3.2rem) 0 .9rem}
.legal h2:first-child{margin-top:0}
.legal p{color:rgba(0,0,0,.72);line-height:1.65;margin-bottom:1rem}
.legal a{border-bottom:1px solid var(--line);transition:border-color .3s}
.legal a:hover{border-color:var(--ink)}
.legal code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.9em;
            background:rgba(0,0,0,.055);border-radius:5px;padding:.12em .4em}
.legal .nota{font-size:var(--fs-micro);color:rgba(0,0,0,.5);line-height:1.6}

/* la tabla se desborda sola en movil en vez de romper la pagina */
.tabla{width:100%;border-collapse:collapse;margin:1.2rem 0 1.4rem;
       display:block;overflow-x:auto;white-space:nowrap}
.tabla th,.tabla td{text-align:left;padding:.85rem 1.1rem .85rem 0;
                    border-bottom:1px solid var(--line);vertical-align:top}
.tabla th{font-size:var(--fs-micro);font-weight:600;letter-spacing:.1em;
          text-transform:uppercase;color:rgba(0,0,0,.45)}
.tabla td{font-size:.9375rem;color:rgba(0,0,0,.72)}
@media(min-width:700px){.tabla{display:table;white-space:normal}}

/* panel para cambiar la decision desde la propia politica */
.ck-panel{background:#fff;border-radius:var(--r-md);padding:clamp(1.3rem,3vw,1.9rem);
          margin:1.4rem 0 1.6rem}
.ck-panel .eyebrow{color:rgba(0,0,0,.42);margin-bottom:.5rem}
.ck-panel b{display:block;font-size:1.0625rem;font-weight:500;margin-bottom:1.2rem}
.ck-panel-btns{display:flex;gap:.5rem;flex-wrap:wrap}
.btn-linea,.btn-solido{font:inherit;font-weight:500;font-size:.875rem;cursor:pointer;
  min-height:44px;padding:0 1.3rem;border-radius:var(--r-pill);
  transition:background-color .3s,color .3s,border-color .3s}
.btn-linea{background:transparent;color:var(--ink);border:1px solid var(--line)}
.btn-linea:hover{border-color:var(--ink)}
.btn-solido{background:var(--ink);color:var(--paper);border:1px solid var(--ink)}
.btn-solido:hover{background:#2b2b2b;border-color:#2b2b2b}

/* el enlace legal del pie: presente, pero sin pedir turno */
.foot-legal a{border-bottom:1px solid transparent;transition:border-color .3s}
.foot-legal a:hover{border-color:rgba(0,0,0,.5)}

/* ── entradas ── */
@keyframes subir{from{opacity:0;transform:translate3d(0,40px,0)}to{opacity:1;transform:none}}
[data-in]{visibility:hidden}
[data-in].is-in{visibility:visible;animation:subir 1s both;animation-delay:var(--retardo,0s)}
@media(prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation-duration:.01ms!important;transition-duration:.01ms!important}
  [data-in]{visibility:visible!important}
}
:focus-visible{outline:2px solid var(--accent);outline-offset:4px;border-radius:4px}
::selection{background:var(--accent);color:var(--ink)}
