/*
 Theme Name:   Bricks Child · filezilla.com.es
 Description:  Child de Bricks para filezilla.com.es. Rediseño aprobado por Miguel 2026-08-10.
 Author:       ANGI-IA
 Template:     bricks
 Version:      2.0
 Text Domain:  bricks
*/

/* ═══════════════════════════════════════════════════════════════════════════════════════
   Los tokens son los del mockup APROBADO: entregables/mockups/filezilla-rediseno/
   No se re-inventan aquí (norma «el diseño aprobado se va a buscar»). Si hay que cambiar
   algo, se cambia en el mockup y se trae, para que los dos no diverjan.
   ═══════════════════════════════════════════════════════════════════════════════════════ */
@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500&family=IBM+Plex+Sans:wght@400;500;600;700&display=swap');

:root{
  /* marca, sin tocar (decisión de Miguel: colores y logo se mantienen) */
  --rojo:#ca0c2b;
  --rojo-osc:#a80a24;
  --turquesa:#04dfc0;
  /* neutros elegidos, con sesgo azul-pizarra */
  --tinta:#16232e;
  --tinta-2:#566875;
  --papel:#fff;
  --superficie:#f2f7f8;
  --borde:#dbe6e9;
  --sombra:0 1px 3px rgba(22,35,46,.07), 0 6px 20px rgba(22,35,46,.06);

  /* escala tipográfica, ratio 1.25 desde 17px.
     🔴 rem base = 10px: Bricks aplica el patrón 62.5% en esta web. MEDIDO en el navegador. */
  --t-xs:1.3rem; --t-s:1.5rem; --t-m:1.7rem; --t-l:2.1rem;
  --t-xl:2.7rem; --t-2xl:3.4rem; --t-3xl:4.2rem;
  --sp-1:.8rem; --sp-2:1.6rem; --sp-3:2.4rem; --sp-4:3.2rem; --sp-6:4.8rem; --sp-8:6.4rem;
  --radio:10px; --radio-l:16px;
  --ancho:1180px; --lectura:68ch;

  --sans:'IBM Plex Sans',system-ui,-apple-system,'Segoe UI',sans-serif;
  --mono:'IBM Plex Mono',ui-monospace,SFMono-Regular,monospace;
}

/* ── base ──────────────────────────────────────────────────────────────────────────── */
body{font-family:var(--sans);font-size:var(--t-m);line-height:1.7;color:var(--tinta);
  background:var(--papel);-webkit-font-smoothing:antialiased}
h1,h2,h3,h4{font-family:var(--sans);line-height:1.2;text-wrap:balance;font-weight:600;
  letter-spacing:-.01em;color:var(--tinta)}
h1{font-size:var(--t-3xl);font-weight:700;letter-spacing:-.025em}
h2{font-size:var(--t-2xl)}
h3{font-size:var(--t-l)}
h4{font-size:var(--t-m)}
a{color:var(--rojo);text-decoration-thickness:1px;text-underline-offset:3px}
img{max-width:100%;height:auto}
:focus-visible{outline:3px solid var(--turquesa);outline-offset:2px;border-radius:4px}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

.brxe-container{max-width:var(--ancho);width:100%;margin-inline:auto;padding-inline:var(--sp-3);
  gap:var(--sp-3)}
.brxe-section{padding-block:var(--sp-8)}

/* La prosa NO va a todo el ancho: 68ch es la medida legible (el diseño viejo la dejaba a
   1024px, que obliga a mover la cabeza para volver al principio de cada línea). */
.brxe-post-content{max-width:var(--lectura)}
.brxe-post-content>*+*{margin-top:var(--sp-2)}
.brxe-post-content h2{margin-top:var(--sp-4);font-size:var(--t-xl);scroll-margin-top:90px}
.brxe-post-content h3{margin-top:var(--sp-3)}
.brxe-post-content img{border-radius:var(--radio);border:1px solid var(--borde);box-shadow:var(--sombra)}
.brxe-post-content ul,.brxe-post-content ol{padding-left:1.4em}
.brxe-post-content li+li{margin-top:.4em}
.brxe-post-content code{font-family:var(--mono);font-size:.9em;background:var(--superficie);
  padding:.15em .4em;border-radius:4px}

/* ── páginas SIN contenido Bricks (legal): caen en el fallback del tema ───────────────
   /legal/ conserva su HTML original y no pasa por el constructor. Sin esto, su texto se servía
   a 1.280 px de ancho y pegado a la cabecera: la única página del sitio sin maquetar. No se le
   hace plantilla porque su contenido no es de silo — basta con darle la misma medida de lectura
   y el mismo aire que al resto. */
/* El selector se MIDIÓ en el DOM (`article.type-page`), no se supuso: el primer intento usó
   `.brx-content-wrapper`, que en esta versión de Bricks no existe, y el texto siguió a 1.100 px. */
article.type-page,article.type-post:not(.brxe-post-content){
  max-width:var(--lectura);margin-inline:auto;padding:var(--sp-6) var(--sp-3)}
article.type-page>*+*{margin-top:var(--sp-2)}
article.type-page h1{margin-bottom:var(--sp-3)}
article.type-page h2{margin-top:var(--sp-4);font-size:var(--t-xl)}
article.type-page h3{margin-top:var(--sp-3)}

/* ── cabecera: barra de marca, pegada arriba ──────────────────────────────────────── */
#brx-header{position:sticky;top:0;z-index:999}
#brx-header .brxe-section{background:var(--rojo);padding-block:var(--sp-1)}
#brx-header .brxe-container{align-items:center;justify-content:space-between;flex-wrap:wrap;
  min-height:60px}
.brxe-nav-menu ul,.brxe-nav-nested ul{display:flex;gap:var(--sp-3);list-style:none;margin:0;
  padding:0;flex-wrap:wrap}
#brx-header .brxe-nav-menu a{color:rgba(255,255,255,.92);text-decoration:none;font-weight:500;
  font-size:var(--t-s)}
#brx-header .brxe-nav-menu a:hover,#brx-header .brxe-nav-menu .current-menu-item a{color:#fff;
  text-decoration:underline;text-underline-offset:6px}

/* ── migas ─────────────────────────────────────────────────────────────────────────── */
/* Dos marcados con la MISMA clase, a propósito (2026-08-13, migración a nativos):
   · elemento `breadcrumbs` de Bricks → <nav><a class="item">…<span class="separator">›</span>
   · shortcode [angi_migas] del mu-plugin → <nav><ol><li>…  (sigue disponible)
   Los estilos comunes van en `.angi-migas`; los de cada marcado, en su propio selector.

   🔴 EL BLOQUE `.brxe-breadcrumbs` NO ES DECORACIÓN, ES LO QUE BRICKS NO ESTÁ SIRVIENDO.
   El tema trae `assets/css/elements/breadcrumbs.min.css` con exactamente estas reglas, pero
   esta web NO carga NINGÚN CSS base de elementos (medido: en el HTML servido solo entran
   `bricks-child/style.css` y `frontend-layer.min.css`; ni `nav-menu.min.css`, ni
   `post-title.min.css`, ni ninguno). Sin copiarlas aquí, el separador y los enlaces salen
   pegados —«Inicio›Ayuda›Título»— porque Bricks emite el `<span>` sin un solo espacio a los
   lados. No es un capricho de esta web: le pasa igual a jellyfinapp desde el 12-08. */
.angi-migas{font-size:var(--t-xs);color:var(--tinta-2);font-family:var(--sans)}
.angi-migas a{color:var(--tinta-2);text-decoration:none}
.angi-migas a:hover{color:var(--rojo)}
.angi-migas.brxe-breadcrumbs{display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;
  gap:.5em}
.angi-migas.brxe-breadcrumbs .separator{color:var(--borde)}
.angi-migas ol{list-style:none;display:flex;flex-wrap:wrap;gap:.5em;margin:0;padding:0}
.angi-migas li::after{content:"›";margin-left:.5em;color:var(--borde)}
.angi-migas li:last-child::after{content:""}

/* ── índice del artículo ──────────────────────────────────────────────────────────── */
.angi-toc{border:1px solid var(--borde);border-radius:var(--radio-l);padding:var(--sp-2);
  background:var(--superficie)}
.angi-toc h2{font-size:var(--t-s);text-transform:uppercase;letter-spacing:.06em;
  font-family:var(--mono);font-weight:500;color:var(--tinta-2);margin:0 0 var(--sp-1)}
.angi-toc ol{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.5em;
  counter-reset:toc}
.angi-toc li{counter-increment:toc;font-size:var(--t-s);line-height:1.4}
.angi-toc a{color:var(--tinta);text-decoration:none;display:flex;gap:.7em;align-items:baseline}
.angi-toc a::before{content:counter(toc,decimal-leading-zero);font-family:var(--mono);
  font-size:var(--t-xs);color:var(--rojo);flex:0 0 auto}
.angi-toc a:hover{color:var(--rojo)}
.angi-lectura{font-family:var(--mono);font-size:var(--t-xs);color:var(--tinta-2)}

/* ── lateral pegajoso del artículo ────────────────────────────────────────────────── */
.fz-lateral{position:sticky;top:90px}
/* Los enlaces del lateral son navegación secundaria: no compiten con el texto del artículo.
   En rojo y a tamaño de titular tiraban del ojo más que el propio contenido. */
.fz-lateral h3{font-size:var(--t-s);text-transform:uppercase;letter-spacing:.06em;
  font-family:var(--mono);font-weight:500;color:var(--tinta-2);margin:0 0 var(--sp-1)}
.fz-lateral>.brxe-block:last-child{border:1px solid var(--borde);border-radius:var(--radio-l);
  padding:var(--sp-2)}
.fz-lateral .brxe-post-title{font-size:var(--t-s);line-height:1.4}
.fz-lateral .brxe-post-title a{color:var(--tinta);text-decoration:none}
.fz-lateral .brxe-post-title a:hover{color:var(--rojo)}
.fz-lateral .brxe-shortcode{overflow:hidden}

/* ── botones ──────────────────────────────────────────────────────────────────────── */
.brxe-button,.fz-btn{display:inline-flex;align-items:center;gap:.6em;font-weight:600;
  font-size:var(--t-s);padding:.85em 1.5em;border-radius:var(--radio);text-decoration:none;
  border:2px solid transparent;background:var(--rojo);color:#fff;
  transition:transform .12s ease,background .12s ease}
.brxe-button:hover,.fz-btn:hover{background:var(--rojo-osc);color:#fff;transform:translateY(-1px)}
.fz-btn--sec{background:var(--papel);border-color:var(--borde);color:var(--tinta)}
.fz-btn--sec:hover{background:var(--papel);border-color:var(--rojo);color:var(--rojo)}

/* ── tarjetas de sistema operativo (página de descarga) ───────────────────────────── */
.fz-so{background:var(--papel);border:1px solid var(--borde);border-radius:var(--radio-l);
  padding:var(--sp-3);box-shadow:var(--sombra);height:100%;
  display:flex;flex-direction:column;gap:var(--sp-2)}
.fz-so h2,.fz-so h3{font-size:var(--t-l);margin:0}
/* El nombre del sistema va PEGADO a su icono: sin esto el flex del bloque los separa a los
   extremos de la tarjeta y el icono queda huérfano en una esquina. */
.fz-so .brxe-block{justify-content:flex-start;align-items:center}
/* Todas las tarjetas a la misma altura: una más corta que las otras se ve como un descuido
   (anti-patrón «tarjetas de altura desigual» del sistema de diseño). */
.fz-so{align-self:stretch}
.fz-so .fz-datos{border-block:1px solid var(--borde);padding-block:var(--sp-1)}
.fz-so .fz-datos div{display:flex;justify-content:space-between;gap:var(--sp-2)}
.fz-so .fz-datos dt{color:var(--tinta-2);font-size:var(--t-xs)}
.fz-so .fz-datos dd{margin:0;font-family:var(--mono);font-size:var(--t-xs);
  font-variant-numeric:tabular-nums}
.fz-so .fz-pie{margin-top:auto;display:flex;flex-direction:column;gap:var(--sp-1)}
/* La nota final de cada tarjeta es prosa, no un dato: la monoespaciada aquí estorba. */
.fz-so .fz-pie p{font-family:var(--sans);font-size:var(--t-xs);color:var(--tinta-2);
  line-height:1.5}
.fz-so .fz-pie p code{font-family:var(--mono)}

/* ── tarjetas de tutorial (portada, ayuda y archivo) ──────────────────────────────── */
.fz-tuto{border:1px solid var(--borde);border-radius:var(--radio-l);overflow:hidden;
  background:var(--papel);height:100%;display:flex;flex-direction:column;
  transition:transform .14s ease,box-shadow .14s ease}
.fz-tuto:hover{transform:translateY(-3px);box-shadow:var(--sombra)}
/* Títulos un punto por encima del cuerpo: son el elemento que se escanea en una rejilla. */
.fz-tuto .brxe-post-title,.fz-tuto h3{font-size:var(--t-l);line-height:1.25;padding:0;
  font-weight:600}
.fz-tuto a{color:var(--tinta);text-decoration:none}
.fz-tuto a:hover{color:var(--rojo)}
.fz-tuto p{font-size:var(--t-s);color:var(--tinta-2);line-height:1.5}

/* La imagen destacada, recortada a una proporción fija: sin esto, portadas de alturas distintas
   descuadran la rejilla entera (anti-patrón «tarjetas de altura desigual»). */
/* 🔴 En Bricks el elemento imagen ES el propio `<img>`, no un `<figure>` que lo envuelva: por eso
   `.fz-tuto__img img` no seleccionaba nada y la imagen se quedaba a los 300 px del tamaño
   «medium». Medido en el DOM antes de corregir. */
img.fz-tuto__img,.fz-tuto>img.brxe-image{width:100%!important;height:auto;aspect-ratio:16/9;
  object-fit:cover;display:block;border-radius:0;margin:0}
.fz-tuto svg{display:block;width:100%;height:auto}

/* Temporizador de lectura: dato, no adorno — mono, discreto y con el reloj alineado al texto. */
.angi-lectura{display:inline-flex;align-items:center;gap:.4em;font-family:var(--mono);
  font-size:var(--t-xs);color:var(--tinta-2);font-variant-numeric:tabular-nums}
.angi-lectura svg{width:12px;height:12px;flex:0 0 12px;opacity:.75}
.fz-tuto .angi-lectura{margin-top:auto;padding-top:.4em}

/* ── etiquetas y datos técnicos: la monoespaciada es del mundo del FTP ────────────── */
.fz-etiqueta{font-family:var(--mono);font-size:var(--t-xs);text-transform:uppercase;
  letter-spacing:.08em;color:var(--rojo);font-weight:500}
.fz-dato{font-family:var(--mono);font-size:var(--t-xs);color:var(--tinta-2);
  font-variant-numeric:tabular-nums}

/* ── aviso de independencia de marca: legal, tiene que verse ──────────────────────── */
.angi-aviso-comentarios{border-left:3px solid var(--turquesa);background:var(--superficie);
  padding:var(--sp-2);border-radius:0 var(--radio) var(--radio) 0;font-size:var(--t-s);
  margin-block:var(--sp-3)}
.angi-aviso-independencia{margin:0 0 .6em}
.angi-aviso-privacidad{margin:0;color:var(--tinta-2)}

/* ── anuncios: hueco reservado para no provocar CLS (norma de CWV) ────────────────── */
.brxe-shortcode ins.adsbygoogle{display:block;min-height:100px;margin-block:var(--sp-3)}

/* ── pie ──────────────────────────────────────────────────────────────────────────── */
#brx-footer .brxe-section{background:var(--tinta);padding-block:var(--sp-6) var(--sp-3)}
#brx-footer,#brx-footer p,#brx-footer div{color:#c9d6dd}
#brx-footer h3{color:#fff;font-size:var(--t-s);font-family:var(--mono);text-transform:uppercase;
  letter-spacing:.06em;font-weight:500;margin:0 0 var(--sp-1)}
#brx-footer a{color:#fff;text-decoration:none}
#brx-footer a:hover{text-decoration:underline}
#brx-footer p{font-size:var(--t-s);line-height:1.6;color:#a8bac4}
#brx-footer .brxe-container{align-items:flex-start;gap:var(--sp-4)}
#brx-footer .brxe-nav-menu ul{flex-direction:column;gap:.6em;padding-left:0;margin:0;
  list-style:none}
#brx-footer .brxe-nav-menu a{font-weight:400;font-size:var(--t-s)}
#brx-footer .brxe-post-title{font-size:var(--t-s);line-height:1.45}
#brx-footer figure,#brx-footer .image-wrapper{display:none}   /* el loop del pie va sin miniaturas */
.fz-legal{border-top:1px solid rgba(255,255,255,.14);margin-top:var(--sp-4);
  padding-top:var(--sp-2);font-size:var(--t-xs);color:#8ea3ae}
.fz-legal a{color:#c9d6dd}

/* ── responsive ───────────────────────────────────────────────────────────────────── */
@media (max-width:991px){
  .fz-lateral{position:static}
  .brxe-container{flex-direction:column}
  .brxe-block{width:100%!important}
}
@media (max-width:767px){
  :root{--t-3xl:3.2rem;--t-2xl:2.6rem;--t-xl:2.2rem}

  /* 🔴 En MÓVIL el anuncio de la página de descarga baja por debajo de las tarjetas.
     Medido en el staging: con el anuncio encima, el primer botón de descarga queda a 901 px en
     un viewport de 812 — o sea, fuera del primer pantallazo, y eso con el hueco de 36 px de
     pruebas; el anuncio real ocupa mucho más. Google lo pide explícito («ensure download links
     are above the fold and easy to find») y además es de sentido común: un botón que no se ve
     no se pulsa. En ESCRITORIO se queda arriba, que es donde Miguel lo quiere y donde el botón
     sí entra en pantalla. `main` pasa a flex solo aquí para poder reordenar con `order`. */
  main{display:flex;flex-direction:column}
  main>.brxe-section{order:0}
  body.page-id-46 main>.brxe-section:nth-of-type(2){order:1}   /* el anuncio, después */
  body.page-id-46 main>.brxe-section:nth-of-type(3){order:0}   /* las tarjetas, antes */
  /* Objetivos táctiles: los enlaces de navegación necesitan altura para poder pulsarlos con el
     pulgar. Medido en el staging: 6 enlaces del pie y el menú quedaban por debajo de 32 px. */
  #brx-header .brxe-nav-menu a,#brx-footer a,.angi-migas a{
    min-height:36px;display:inline-flex;align-items:center}
  #brx-footer .brxe-nav-menu ul{gap:2px}
  .brxe-section{padding-block:var(--sp-4)}
  .brxe-container{padding-inline:var(--sp-2)}
}

/* nada puede desbordar en horizontal: se mide en el navegador, no se supone */
img,iframe,table,pre{max-width:100%}
body{overflow-x:hidden}

/* ── tablas anchas: hace scroll la tabla, no la página ─────────────────────────────────
   `max-width:100%` de arriba NO basta: una tabla con cuatro columnas tiene un ancho mínimo
   de contenido (~410px medidos) que ignora el max-width y desborda igual. El envoltorio lo
   pone `angi-navegacion.php` en `the_content`. El degradado de la derecha es la única pista
   de que hay más tabla a la derecha; sin él, el visitante no sabe que puede desplazarla. */
.angi-tabla-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;margin-block:var(--sp-2);
  background:linear-gradient(to right,var(--fondo) 30%,transparent),
             linear-gradient(to left,var(--fondo) 30%,transparent) 100% 0,
             linear-gradient(to right,rgba(22,35,46,.14),transparent 14px),
             linear-gradient(to left,rgba(22,35,46,.14),transparent 14px) 100% 0;
  background-repeat:no-repeat;background-size:36px 100%,36px 100%,14px 100%,14px 100%;
  background-attachment:local,local,scroll,scroll}
.angi-tabla-scroll>table{margin:0;min-width:min(100%,34rem)}
.angi-tabla-scroll:focus-visible{outline:2px solid var(--turquesa);outline-offset:2px}

/* ── índice: el dedo también lo usa ──────────────────────────────────────────────────
   Los enlaces del índice medían 21px de alto en móvil. Un objetivo táctil por debajo de
   32px se falla constantemente, y el índice es justo lo que se toca desde el móvil. */
@media (max-width:767px){
  .angi-toc ol{gap:0}
  .angi-toc a{min-height:36px;align-items:center;padding-block:.35em}
}
