/* ============================================================
   Portada de los Útiles gratis (/es/utiles/, /en/tools/ y los otros 18
   idiomas) y sus hubs de categoría (/es/utiles/imagen/, /en/tools/image/…).
   La enlaza scripts/seo-utiles.mjs solo en esas páginas, que llevan
   <body class="utl-portada utl-portada--indice|--hub">.

   Estilo Higgsfield /apps (dueño, 8-oct-2026):
   - título en mayúsculas, compacto, y debajo una barra fija con el buscador
     y las pestañas (web/assets/js/utiles-portada.js las hace filtrar);
   - rejillas limpias de tarjetas con el icono propio de cada útil (Nano
     Banana, assets/media/utiles/iconos/<id>.webp) arriba y grande;
   - en el móvil, cada categoría de la portada es un carril horizontal y en
     los hubs una rejilla de dos columnas. Al buscar o elegir una pestaña,
     los carriles pasan a rejilla para ver todos los resultados.

   Reglas (las de seo-estudio.css): colores solo con var(); propiedades
   lógicas (árabe y urdu se leen de derecha a izquierda); la lima solo en
   el foco; con «reducir movimiento», sin transiciones.
   ============================================================ */

/* ---------- Héroe ---------- */
.utl-portada main .hero--texto{padding-block:clamp(28px,1rem + 3vw,64px) 0}
.utl-portada main .hero--texto h1{max-width:22ch;margin-block-end:var(--f-e-4);font-size:clamp(2.125rem,1.45rem + 2.4vw,3.25rem);font-weight:760;line-height:1;letter-spacing:-.035em;text-transform:uppercase}
.utl-portada main .hero--texto .lead{max-width:60ch;margin-block-end:var(--f-e-5);font-size:1rem;line-height:1.55;color:var(--f-texto-3)}
.utl-portada main .hero--texto .eyebrow{margin-block-end:var(--f-e-4)}

/* ---------- Barra: buscador + pestañas, fija bajo la cabecera ---------- */
.utl-barra{
  position:sticky;inset-block-start:calc(var(--f-alto-cabecera) + env(safe-area-inset-top,0px));z-index:6;
  display:flex;align-items:center;gap:var(--f-e-3);
  margin-block-start:var(--f-e-8);margin-inline:calc(50% - 50vw);padding-block:10px;padding-inline:calc(50vw - 50%);
  background:var(--f-fondo);box-shadow:0 1px 0 var(--f-linea)
}
.utl-buscar{flex:none;display:flex;align-items:center;gap:8px;inline-size:264px;block-size:44px;padding-inline:12px;border-radius:12px;background:var(--f-sup-1);box-shadow:inset 0 0 0 1px var(--f-linea);color:var(--f-texto-3);cursor:text;transition:box-shadow var(--f-rapido)}
.utl-buscar:focus-within{box-shadow:inset 0 0 0 1px var(--f-lima)}
.utl-buscar .icono{flex:none;inline-size:18px;block-size:18px}
.utl-buscar input{flex:1;min-inline-size:0;block-size:100%;margin:0;padding:0;border:0;background:none;color:var(--f-texto);font:inherit;font-size:.9375rem;outline:none;appearance:none;-webkit-appearance:none}
.utl-buscar input::placeholder{color:var(--f-texto-3);opacity:1}
.utl-buscar input:focus,.utl-buscar input:focus-visible{outline:none;box-shadow:none}
.utl-buscar input::-webkit-search-decoration{-webkit-appearance:none}
.utl-tabs{flex:1;min-inline-size:0;display:flex;gap:2px;padding:4px;border-radius:12px;background:var(--f-sup-1);overflow-x:auto;scrollbar-width:none;overscroll-behavior-inline:contain}
.utl-tabs::-webkit-scrollbar{display:none}
.utl-tabs a{flex:none;display:inline-flex;align-items:center;gap:6px;block-size:36px;padding-inline:14px;border-radius:10px;font-size:.875rem;font-weight:var(--f-peso-ui);line-height:1;color:var(--f-texto-3);white-space:nowrap;transition:color var(--f-rapido),background var(--f-rapido)}
.utl-tabs a>span{font-size:.75rem;font-variant-numeric:tabular-nums;color:var(--f-texto-3)}
.utl-tabs a:hover{color:var(--f-texto)}
.utl-tabs a[aria-current]{background:var(--f-sup-3);color:var(--f-texto)}
.utl-tabs a:focus-visible{outline:2px solid var(--f-lima);outline-offset:-2px;border-radius:10px}
/* Pestañas que no caben (los hubs tienen de 7 a 12 grupos y en el ordenador
   la barra mide unos 960 px). utiles-portada.js envuelve el <nav> en
   .utl-pestanas (que se queda con el fondo, para que no se desvanezca) y
   marca con data-ini / data-fin el lado que tiene pestañas fuera: ahí se
   desvanecen y, con ratón, sale una flecha que pasa a las siguientes. La
   rueda del ratón sobre las pestañas las desliza en horizontal. Al recibir
   el foco con el teclado, scroll-padding deja la pestaña fuera de la flecha. */
.utl-pestanas{position:relative;flex:1;min-inline-size:0;display:flex;border-radius:12px;background:var(--f-sup-1)}
.utl-pestanas>.utl-tabs{--utl-ia:0px;--utl-ib:0px;--utl-fa:0px;--utl-fb:0px;background:none;scroll-padding-inline:72px}
.utl-pestanas:is([data-ini],[data-fin])>.utl-tabs{-webkit-mask-image:linear-gradient(to right,transparent var(--utl-ia),#000 var(--utl-ib),#000 calc(100% - var(--utl-fb)),transparent calc(100% - var(--utl-fa)));mask-image:linear-gradient(to right,transparent var(--utl-ia),#000 var(--utl-ib),#000 calc(100% - var(--utl-fb)),transparent calc(100% - var(--utl-fa)))}
[dir="rtl"] .utl-pestanas:is([data-ini],[data-fin])>.utl-tabs{-webkit-mask-image:linear-gradient(to left,transparent var(--utl-ia),#000 var(--utl-ib),#000 calc(100% - var(--utl-fb)),transparent calc(100% - var(--utl-fa)));mask-image:linear-gradient(to left,transparent var(--utl-ia),#000 var(--utl-ib),#000 calc(100% - var(--utl-fb)),transparent calc(100% - var(--utl-fa)))}
/* Del borde a 58 px no se ve nada (ahí va la flecha) y de 58 a 86 px aparece:
   una pestaña colocada a 72 px (utiles-portada.js) empieza su texto, tras
   14 px de relleno, ya entero, y la anterior acaba antes de los 58. */
.utl-pestanas[data-ini]>.utl-tabs{--utl-ia:58px;--utl-ib:86px}
.utl-pestanas[data-fin]>.utl-tabs{--utl-fa:58px;--utl-fb:86px}
.utl-flecha{display:none;position:absolute;inset-block-start:50%;z-index:1;place-items:center;inline-size:32px;block-size:32px;margin:-16px 0 0;padding:0;border:0;border-radius:var(--f-r-pill);background:var(--f-sup-3);box-shadow:0 0 0 1px var(--f-linea);color:var(--f-texto);cursor:pointer;transition:background var(--f-rapido)}
.utl-flecha--ini{inset-inline-start:6px}
.utl-flecha--fin{inset-inline-end:6px}
.utl-flecha:hover{background:color-mix(in srgb,var(--blanco-luz) 16%,var(--negro-abismo))}
.utl-flecha svg{display:block;inline-size:18px;block-size:18px}
[dir="rtl"] .utl-flecha svg{transform:scaleX(-1)}
@media (hover:hover) and (pointer:fine) and (min-width:768px){
  .utl-pestanas[data-ini]>.utl-flecha--ini,.utl-pestanas[data-fin]>.utl-flecha--fin{display:grid}
}
/* Sin resultados al buscar. */
.utl-vacio{padding-block:var(--f-e-12) 0;font-size:1rem;color:var(--f-texto-3)}
.utl-vacio[hidden]{display:none}
/* Región viva del buscador (utiles-portada.js): solo para lectores de pantalla. */
.utl-estado{position:absolute;inline-size:1px;block-size:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}

/* ---------- Títulos de sección: mayúsculas, compactos (también preguntas y enlaces) ---------- */
.utl-portada main .section>h2{max-width:none;margin-block-end:var(--f-e-6);font-size:clamp(1.375rem,1.1rem + 1vw,1.75rem);font-weight:760;line-height:1.2;letter-spacing:-.02em;text-transform:uppercase}

/* ---------- Secciones con rejilla: título, frase y «ver todo» ---------- */
.utl-portada main section:has(>.utiles-rejilla){display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end;column-gap:var(--f-e-6);padding-block-start:clamp(48px,2rem + 2.6vw,88px);scroll-margin-block-start:calc(var(--f-alto-cabecera) + 72px)}
.utl-portada main section:has(>.utiles-rejilla)>*{grid-column:1/-1}
.utl-portada main section:has(>.utiles-rejilla)>h2{grid-column:1;max-width:none;margin:0;font-size:clamp(1.375rem,1.1rem + 1vw,1.75rem);font-weight:760;line-height:1.2;letter-spacing:-.02em;text-transform:uppercase}
.utl-portada main section:has(>.utiles-rejilla)>.section-lead{max-width:72ch;margin:6px 0 0;font-size:.875rem;line-height:1.5;color:var(--f-texto-3)}
.utl-portada main section:has(>.utiles-rejilla)>.utiles-rejilla{margin-block-start:var(--f-e-5)}
.utl-portada main section:has(>.utiles-rejilla)>.apps-volver{grid-column:2;grid-row:1;align-self:end;margin:0;font-size:.875rem;font-weight:var(--f-peso-ui)}
.utl-portada main section:has(>.utiles-rejilla)>.apps-volver a{min-block-size:40px;color:var(--f-texto)}
.utl-portada main section:has(>.utiles-rejilla)>.apps-volver a:hover{color:var(--f-texto-2)}
/* La pestaña o la búsqueda esconden lo que no toca (utiles-portada.js). */
.utl-portada main [data-utl-oculto]{display:none!important}

/* ---------- Tarjetas: icono grande arriba, nombre y una frase ---------- */
.utl-portada .utiles-rejilla{display:grid;gap:12px;grid-template-columns:repeat(auto-fill,minmax(min(100%,184px),1fr))}
.utl-portada .utiles-rejilla a{position:relative;display:flex;flex-direction:column;align-items:flex-start;gap:0;padding:16px;border-radius:16px;background:var(--f-sup-1);box-shadow:inset 0 0 0 1px var(--f-linea);transition:background var(--f-rapido),box-shadow var(--f-rapido)}
.utl-portada .utiles-rejilla a:hover{background:var(--f-sup-2);box-shadow:inset 0 0 0 1px var(--f-linea-fuerte)}
.utl-portada .utiles-rejilla a:focus-visible{outline:2px solid var(--f-lima);outline-offset:2px;border-radius:16px}
.utl-ico{display:block;flex:none;inline-size:64px;block-size:64px;margin-block-end:14px;border-radius:16px;overflow:hidden;background:var(--negro-abismo);box-shadow:0 0 0 1px var(--f-linea)}
.utl-ico img{display:block;inline-size:100%;block-size:100%;object-fit:cover;transition:transform var(--f-medio) var(--f-curva)}
.utl-portada .utiles-rejilla a:hover .utl-ico img{transform:scale(1.06)}
.utl-portada .utiles-rejilla strong{font-size:1rem;font-weight:var(--f-peso-titulo);line-height:1.35;letter-spacing:-.01em;color:var(--f-texto)}
/* La frase entera, sin cortar: lleva los formatos, códigos y medidas que se
   buscan («… TIFF y AVIF», «EAN-13, UPC-A…»). Las tarjetas de una fila
   crecen juntas (rejilla). */
.utl-portada .utiles-rejilla a>span:not([class]){grid-column:auto;margin-block-start:4px;font-size:.8125rem;line-height:1.45;color:var(--f-texto-3);text-wrap:pretty}
.utl-portada .utiles-rejilla .utiles-ir{position:absolute;inset-block-start:14px;inset-inline-end:16px;font-size:1rem;color:var(--f-texto-3);opacity:0;transition:opacity var(--f-rapido),transform var(--f-rapido)}
.utl-portada .utiles-rejilla a:hover .utiles-ir,.utl-portada .utiles-rejilla a:focus-visible .utiles-ir{opacity:1;color:var(--f-texto)}
[dir="rtl"] .utl-portada .utiles-rejilla .utiles-ir{transform:scaleX(-1)}

/* ---------- Teléfono ---------- */
@media (max-width:767px){
  .utl-portada main .hero--texto{padding-block-start:var(--f-e-5)}
  .utl-portada main .hero--texto h1{font-size:clamp(1.875rem,1.2rem + 3.4vw,2.25rem);line-height:1.02}
  .utl-portada main .hero--texto .lead{font-size:.9375rem}
  .utl-barra{flex-direction:column;align-items:stretch;gap:8px;margin-block-start:var(--f-e-6);padding-block:8px}
  .utl-buscar{inline-size:auto}
  /* En la portada, el campo «Buscar» de arriba (buscador-global.js) ya busca
     útiles. Si la página llega ya filtrada (?q=…), el buscador sí se ve, con
     la búsqueda escrita, para poder borrarla (utiles-portada.js pone data-utl-busca). */
  .utl-portada--indice .utl-barra:not([data-utl-busca]) .utl-buscar{display:none}
  /* La fila de pestañas llega hasta los bordes de la pantalla, como el carril
     de tarjetas de debajo: nada queda partido en el margen del contenido. */
  .utl-tabs{padding:0 var(--f-gutter);background:none;border-radius:0}
  .utl-barra>:is(.utl-tabs,.utl-pestanas){margin-inline:calc(var(--f-gutter) * -1)}
  /* Sin flechas (se desliza con el dedo): solo el desvanecido, más corto. */
  .utl-pestanas{background:none;border-radius:0}
  .utl-pestanas>.utl-tabs{scroll-padding-inline:40px}
  .utl-pestanas[data-ini]>.utl-tabs{--utl-ia:26px;--utl-ib:54px}
  .utl-pestanas[data-fin]>.utl-tabs{--utl-fa:26px;--utl-fb:54px}
  .utl-tabs a{block-size:36px;padding-inline:12px;border-radius:var(--f-r-pill);background:var(--f-sup-1)}
  .utl-tabs a[aria-current]{background:var(--f-texto);color:var(--f-fondo)}
  .utl-tabs a[aria-current]>span{color:var(--f-fondo)}
  .utl-portada main section:has(>.utiles-rejilla){display:block;padding-block-start:var(--f-e-10)}
  .utl-portada main section:has(>.utiles-rejilla)>h2{font-size:1.375rem}
  .utl-portada main section:has(>.utiles-rejilla)>.apps-volver{margin-block-start:var(--f-e-2)}
  .utl-portada .utiles-rejilla{gap:10px;grid-template-columns:repeat(2,minmax(0,1fr))}
  .utl-portada .utiles-rejilla a{padding:12px;border-radius:14px}
  .utl-ico{inline-size:56px;block-size:56px;margin-block-end:10px;border-radius:14px}
  .utl-portada .utiles-rejilla strong{font-size:.9375rem;line-height:1.3}
  .utl-portada .utiles-rejilla a>span:not([class]){font-size:.75rem;line-height:1.4}
  /* Portada: un carril por categoría (como Higgsfield), con un trozo de la
     siguiente tarjeta a la vista. Al filtrar, vuelve la rejilla. */
  .utl-portada--indice main:not([data-utl-filtro]) .utiles-rejilla{grid-template-columns:none;grid-auto-flow:column;grid-auto-columns:150px;margin-inline:calc(var(--f-gutter) * -1);padding-inline:var(--f-gutter);scroll-padding-inline:var(--f-gutter);overflow-x:auto;scroll-snap-type:x mandatory;overscroll-behavior-inline:contain;scrollbar-width:none}
  .utl-portada--indice main:not([data-utl-filtro]) .utiles-rejilla::-webkit-scrollbar{display:none}
  .utl-portada--indice main:not([data-utl-filtro]) .utiles-rejilla a{scroll-snap-align:start}
}

@media (prefers-reduced-motion:reduce){
  .utl-buscar,.utl-tabs a,.utl-flecha,.utl-portada .utiles-rejilla a,.utl-ico img,.utl-portada .utiles-rejilla .utiles-ir{transition:none}
  .utl-portada .utiles-rejilla a:hover .utl-ico img{transform:none}
}
