/*
Theme Name: LPA Promoción
Theme URI: https://lpapromocion.com
Author: Inventia
Description: Block theme (FSE) de la web institucional de Promoción Las Palmas de Gran Canaria. Accesible WCAG 2.2 AA (ADR-0003). Tokens compilados desde docs/diseno/ — fuente única de verdad, no tocar a ojo (M-004).
Version: 0.1.0
Requires at least: 6.5
Tested up to: 6.8
Requires PHP: 8.1
License: GPL-2.0-or-later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: lpapromocion
Tags: full-site-editing, block-patterns, accessibility-ready
*/

/* ==========================================================================
   C01 · Tokens y base de accesibilidad
   Compilado desde docs/diseno/tokens.css (congelado por /diseno, M-004).

   FUENTE ÚNICA: los valores viven en theme.json, que WordPress expone como
   --wp--preset--*. Aquí NO se repiten: se les da un alias con los nombres
   del diseño. Así un color se cambia en UN solo sitio y no puede haber
   deriva entre theme.json y el CSS.
   ========================================================================== */

:root {
  /* --- Marca ------------------------------------------------------------- */
  --color-primary:          var(--wp--preset--color--primary);          /* #CB007B · 5.49:1 sobre blanco ✔ */
  --color-primary-strong:   var(--wp--preset--color--primary-strong);   /* hover/active · 7.96:1        ✔ */
  --color-primary-darker:   var(--wp--preset--color--primary-darker);
  --color-primary-contrast: var(--wp--preset--color--primary-contrast); /* texto sobre magenta · 5.49:1 ✔ */
  --color-primary-tint:     var(--wp--preset--color--primary-tint);
  --color-secondary:        var(--wp--preset--color--secondary);        /* 3.97:1 → solo UI/texto grande ⚠ */

  /* --- Texto ------------------------------------------------------------- */
  --color-ink:   var(--wp--preset--color--ink);    /* cuerpo · 16.43:1     ✔ */
  --color-muted: var(--wp--preset--color--muted);  /* secundario · 6.63:1  ✔ */

  /* --- Superficies ------------------------------------------------------- */
  --color-surface:      var(--wp--preset--color--surface);
  --color-surface-soft: var(--wp--preset--color--surface-soft);
  --color-surface-tint: var(--wp--preset--color--surface-tint);

  /* --- Bordes ------------------------------------------------------------
     WCAG 2.2 · 1.4.11 (contraste no textual): los bordes decorativos dan
     1.44:1 y NO valen como límite de un control. Para eso está el token
     -interactive (3.97:1). Se fuerza más abajo; no es opcional.            */
  --color-border:             var(--wp--preset--color--border);              /* decorativo · 1.44:1  */
  --color-border-strong:      var(--wp--preset--color--border-strong);       /* decorativo           */
  --color-border-interactive: var(--wp--preset--color--border-interactive);  /* controles · 3.97:1 ✔ */

  /* --- Estados ----------------------------------------------------------- */
  --color-success: var(--wp--preset--color--success);  /* 5.35:1 ✔ */
  --color-warning: var(--wp--preset--color--warning);  /* 3.82:1 → solo UI/texto grande ⚠ */
  --color-error:   var(--wp--preset--color--error);    /* 7.33:1 ✔ */

  /* --- Foco (2.4.7 / 2.4.13) --------------------------------------------- */
  --focus-ring:    var(--wp--custom--focus--ring);
  --focus-outline: var(--wp--custom--focus--outline);
  --focus-offset:  var(--wp--custom--focus--offset);

  /* --- Radios y sombras --------------------------------------------------- */
  --radius-sm:   var(--wp--custom--radius--sm);
  --radius:      var(--wp--custom--radius--base);
  --radius-lg:   var(--wp--custom--radius--lg);
  --radius-pill: var(--wp--custom--radius--pill);   /* 999px · pastillas */
  --shadow-sm: var(--wp--custom--shadow--sm);
  --shadow-md: var(--wp--custom--shadow--md);

  /* --- Tamaño mínimo de objetivo (2.5.8) ---------------------------------- */
  --target-min: var(--wp--custom--target--min);  /* 24px */
}

/* ==========================================================================
   Base mínima de accesibilidad.
   WordPress NO da esto por defecto: hay que forzarlo. Es el DoD del ADR-0003.
   Va con :where() (especificidad 0) para que cualquier bloque pueda
   sobrescribirlo sin recurrir a !important.
   ========================================================================== */

/* Desplazamiento suave al saltar a un ancla (#programas, #institucional…), como
   el diseño (prototipo l.70). El bloque prefers-reduced-motion de más abajo lo
   devuelve a `auto` para quien pide menos movimiento (2.3.3). */
html {
  scroll-behavior: smooth;
}

/* Foco visible (2.4.7). El outline no se quita jamás sin sustituto. */
:where(a, button, input, select, textarea, summary, [tabindex]):focus-visible {
  outline: var(--focus-outline);
  outline-offset: var(--focus-offset);
  box-shadow: var(--focus-ring);
}

/* Los controles heredan la tipografía del cuerpo. Sin esto el navegador les
   pone su propia fuente (Arial en los input, monospace en el textarea), que
   rompe la coherencia. El prototipo lo hace con font-family:inherit global. */
:where(input, textarea, button, select) { font-family: inherit; }

/* Bordes de control (1.4.11): nunca el borde decorativo, que no llega a 3:1. */
:where(input, select, textarea) {
  border: 1px solid var(--color-border-interactive);
  border-radius: var(--radius-sm);
}

/* Objetivo mínimo 24x24 (2.5.8). No se aplica a <a> en línea: un enlace dentro
   de un párrafo es texto, no un objetivo, y forzarle altura rompe el interlineado. */
:where(button, input[type='checkbox'], input[type='radio'], input[type='submit']) {
  min-block-size: var(--target-min);
  min-inline-size: var(--target-min);
}

/* Los enlaces del contenido no se distinguen solo por el color (1.4.1). */
:where(main a:not([class])) {
  color: var(--color-primary);
  text-decoration: underline;
  text-underline-offset: 2px;
}

/* Salto al contenido: invisible hasta que se tabula (2.4.1). */
.skip-link {
  position: absolute;
  inset-inline-start: -9999px;
}

.skip-link:focus,
.skip-link:focus-visible {
  position: fixed;
  inset-block-start: var(--wp--preset--spacing--4);
  inset-inline-start: var(--wp--preset--spacing--4);
  z-index: 999999;
  padding: var(--wp--preset--spacing--3) var(--wp--preset--spacing--5);
  background: var(--color-surface);
  color: var(--color-primary-strong);
  border: 2px solid var(--color-primary);
  border-radius: var(--radius-sm);
  font-weight: 700;
}

/* Respeta a quien pide menos movimiento (2.3.3). */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .01ms !important;
    scroll-behavior: auto !important;
  }
}

/* ==========================================================================
   C02 · Cabecera, navegación y pie
   ========================================================================== */

/* El contenido (main) y el pie van PEGADOS, como el diseño (la sección de
   contacto en surface-soft toca el pie oscuro). WordPress mete un hueco de
   block-gap (24px) entre las áreas de nivel superior; se anula sobre el pie. */
.wp-site-blocks > footer.wp-block-template-part {
  margin-block-start: 0;
}

/* Cabecera pegajosa con línea inferior sutil. */
.site-header {
  border-block-end: 1px solid var(--color-border);
  z-index: 100;
}

/* El grupo `site-header` no se quedaba pegado: su contenedor es el `<header>`
   que genera el template part, que mide LO MISMO que la cabecera → el sticky no
   tiene recorrido y se va con la página (el contenedor alto de verdad,
   `.wp-site-blocks`, es el abuelo, no el padre). Con `display:contents` el
   `<header>` no genera caja: el grupo pasa a ser hijo directo de
   `.wp-site-blocks` (alto = toda la página) y su `position:sticky` —la que pone
   el control nativo "Fija" (clase `is-position-sticky`)— funciona. El toggle del
   editor (Posición: Fija ↔ Ninguna) sigue mandando. Solo afecta a la cabecera:
   el pie usa `<footer>`. El landmark `<header>` se conserva en el árbol a11y. */
header.wp-block-template-part {
  display: contents;
}

/* Enlace CTA del menú (Contacto): botón magenta.
   Se sube la especificidad (y se fuerza el color del texto también en el span
   hijo) porque el CSS de core/navigation define el color del enlace y gana al
   selector simple: sin esto, el texto queda oscuro sobre magenta (fallo AA). */
.wp-block-navigation .nav-cta a,
.wp-block-navigation .nav-cta a span {
  color: var(--color-primary-contrast);
}
.wp-block-navigation .nav-cta a {
  background: var(--color-primary);
  /* Diseño: 9px 18px · radio 8px · 15px/700 (extraído del prototipo). No hay
     token de 6px→8px; el 8px es un valor literal del diseño (no mapea a radius-sm). */
  padding: 9px 18px;
  border-radius: 8px;
  font-size: 15px;
  line-height: 1.2;
  font-weight: 700;
}
.wp-block-navigation .nav-cta a:hover {
  background: var(--color-primary-strong);
}

/* Enlaces del menú principal: píldora fiel al diseño.
   Diseño (prototipo): 15px/600, padding 9px 14px, radio 8px; en hover NO solo
   cambia el color del texto: aparece una PÍLDORA de fondo surface-tint con el
   texto en primary-strong (data-hov="0"). Sin el padding, el fondo no se ve
   como píldora, por eso van juntos. */
.site-header .wp-block-navigation a:not(.nav-cta a) {
  font-size: 15px;
  line-height: 1.2;
  padding: 9px 14px;
  border-radius: 8px;
  text-decoration: none;
}
.site-header .wp-block-navigation a:not(.nav-cta a):hover {
  background: var(--color-surface-tint);
  color: var(--color-primary-strong);
}

/* ==========================================================================
   Menú MÓVIL — overlay del bloque core/navigation (v0.28.0)
   Sin diseño congelado (el prototipo es solo escritorio, hueco): maqueta propia
   con tokens + WCAG 2.2 AA. El overlay nativo heredaba `items-justified-right`
   (justifyContent:right del bloque) → enlaces diminutos (15px) pegados al borde
   derecho y gap de 6px. Aquí: lista a lo ancho, alineada a la izquierda, filas
   con objetivo cómodo (≥48px, 2.5.8), separadores sutiles y la CTA «Contacto»
   como botón. TODO scoped a `.is-menu-open` para NO tocar el menú horizontal de
   escritorio. Especificidad con 4 clases para ganar a `.site-header
   .wp-block-navigation a:not(.nav-cta a)` (0,3,2). El gutter lateral lo aporta
   el root padding (contenido a 16px del borde, alineado con el logo). */
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content {
  display: block;      /* era flex-row → el <ul> no llenaba el ancho y se iba a la derecha */
  padding-top: 64px;   /* deja hueco bajo el botón de cierre */
}
/* El overlay de core impone flex + align-items:flex-end (items-justified-right)
   con especificidad/orden que ganan al tema → los enlaces salían a la derecha.
   Se fuerza columna a lo ancho con !important (mismo caso que el CTA, el CSS de
   core/navigation gana; §4). */
.is-menu-open .wp-block-navigation__container.is-responsive {
  flex-direction: column !important;
  align-items: stretch !important;
  gap: 0 !important;
  width: 100%;
}
.is-menu-open .wp-block-navigation__container.is-responsive > .wp-block-navigation-item {
  width: 100%;
  border-block-end: 1px solid var(--color-border);
}
.is-menu-open .wp-block-navigation__container.is-responsive > .wp-block-navigation-item:first-child {
  border-block-start: 1px solid var(--color-border);
}
/* Cada enlace: fila a lo ancho, objetivo cómodo, texto grande, sin la píldora
   de escritorio (anula font-size/padding/radius de la regla de arriba). */
.site-header .is-menu-open .wp-block-navigation__container .wp-block-navigation-item__content {
  display: block;
  box-sizing: border-box;   /* el tema no aplica border-box (§4 [v0.5.5]): sin esto width:100%+padding rebosa */
  width: 100%;
  padding: 15px 0;          /* texto alineado con el logo (borde del gutter, 16px) */
  font-size: 20px;
  font-weight: 600;
  line-height: 1.3;
  color: var(--color-ink);
  border-radius: 0;
  text-decoration: none;
}
.site-header .is-menu-open .wp-block-navigation__container .wp-block-navigation-item__content:hover,
.site-header .is-menu-open .wp-block-navigation__container .wp-block-navigation-item__content:focus-visible {
  background: var(--color-surface-tint);
  color: var(--color-primary-strong);
}
/* CTA «Contacto»: botón magenta a lo ancho, separado del resto, sin separadores. */
.is-menu-open .wp-block-navigation__container.is-responsive > .wp-block-navigation-item.nav-cta {
  border: 0;
  margin-block-start: 20px;
}
.site-header .is-menu-open .wp-block-navigation__container .nav-cta .wp-block-navigation-item__content {
  background: var(--color-primary);
  color: var(--color-primary-contrast);
  text-align: center;
  border-radius: 8px;
  padding: 15px 18px;   /* box-sizing:border-box heredado de la regla base → botón = ancho del gutter */
}
.site-header .is-menu-open .wp-block-navigation__container .nav-cta .wp-block-navigation-item__content:hover,
.site-header .is-menu-open .wp-block-navigation__container .nav-cta .wp-block-navigation-item__content:focus-visible {
  background: var(--color-primary-strong);
  color: var(--color-primary-contrast);
}
/* Botón de cierre: objetivo cómodo (≥44px). */
.wp-block-navigation__responsive-container-close {
  width: 44px;
  height: 44px;
}

/* Pie: los enlaces heredan el color claro; en hover/foco pasan a blanco
   (diseño: data-hov=5 → primary-contrast) y se subrayan (a11y 1.4.1). */
.site-footer .wp-block-navigation a {
  text-decoration: none;
}
.site-footer .wp-block-navigation a:hover,
.site-footer .wp-block-navigation a:focus-visible {
  color: var(--color-primary-contrast);
  text-decoration: underline;
  text-underline-offset: 3px;
}

/* Encabezados de columna del pie (Proyectos / Institucional): pequeños, en la
   fuente de CUERPO y BLANCOS. Extraído del prototipo: 13px/700, Public Sans,
   letter-spacing .1em, mayúsculas. Un <h2> por defecto saldría en Montserrat a
   18px (fontSize lg) — por eso se le quita el preset y se estila por clase. */
.site-footer .footer-heading {
  font-family: var(--wp--preset--font-family--body);
  font-size: 13px;
  font-weight: 700;
  line-height: 1.2;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--color-primary-contrast);
  margin-bottom: var(--wp--preset--spacing--1);
}

/* Enlaces de las columnas del pie a 15px (diseño; por defecto heredarían 16). */
.site-footer .wp-block-column .wp-block-navigation a {
  font-size: 15px;
}

/* ==========================================================================
   C03 · Home
   ========================================================================== */

/* Al saltar a una sección por ancla (#programas, #institucional…), deja hueco
   bajo la cabecera pegajosa (71px) para que no tape el título de destino. */
#programas,
#institucional,
#contacto {
  scroll-margin-top: 88px;
}

/* --- Rejillas responsive (grid nativo de WP) --- */
.rejilla-programas.is-layout-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.rejilla-institucional.is-layout-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
@media (max-width: 1024px) {
  .rejilla-institucional.is-layout-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 700px) {
  .rejilla-programas.is-layout-grid,
  .rejilla-institucional.is-layout-grid { grid-template-columns: 1fr; }
}

/* --- Tarjeta de programa: toda la card es clickable (stretched link) --- */
.programa {
  position: relative;
  overflow: hidden;
  box-shadow: var(--shadow-sm);
  border: 1px solid var(--color-border);
  transition: box-shadow .15s ease, transform .15s ease;
}
.programa:hover { box-shadow: var(--shadow-md); }
.programa .programa-img img { aspect-ratio: 16 / 9; object-fit: cover; width: 100%; }
.programa .card-cta a {
  color: var(--color-primary-strong); font-weight: 600; text-decoration: none;
  overflow-wrap: break-word;
}
/* El grupo interior (padding) es position:relative por el layout de WP, lo que
   ancla el ::after a ese grupo y deja la IMAGEN fuera. Lo hacemos static para que
   el ::after se ancle a .programa y cubra TODA la card, imagen incluida. */
.programa > .wp-block-group { position: static; }

/* El enlace se estira sobre toda la tarjeta: un solo <a>, card 100% clickable
   (imagen incluida). */
.programa .card-link::after {
  content: ""; position: absolute; inset: 0; z-index: 1;
}
.programa .card-link:hover { text-decoration: underline; }
/* Foco visible en TODA la card cuando el enlace estirado recibe foco. */
.programa:has(.card-link:focus-visible) {
  outline: var(--focus-outline);
  outline-offset: 2px;
}

/* --- Iconos SVG en línea --- */
.ico { display: inline-flex; }
.ico svg { display: block; }

/* --- Tarjetas institucionales --- */
.inst-card {
  height: 100%;
  border: 1px solid var(--color-border);
  box-shadow: var(--shadow-sm);
}
.inst-ico {
  display: inline-flex; align-items: center; justify-content: center;
  width: 46px; height: 46px; margin-bottom: var(--wp--preset--spacing--3);
  border-radius: 12px;
  background: var(--color-surface-tint); color: var(--color-primary-strong);
}
.inst-ico svg { width: 28px; height: 28px; }
.inst-card--destacada { border-color: transparent; }
.inst-card--destacada .inst-ico { background: rgba(255,255,255,.18); color: var(--color-primary-contrast); }
.inst-link a { color: var(--color-primary-strong); font-weight: 600; text-decoration: none; }
.inst-card--destacada .inst-link a { color: var(--color-primary-contrast); }
.inst-link a:hover, .inst-link a:focus-visible { text-decoration: underline; }

/* --- Datos de contacto (bloques nativos editables, v0.5.7: icono decorativo
   + etiqueta + valor; icono centrado en vertical). --- */
.datos-contacto { margin: var(--wp--preset--spacing--5) 0 0; display: grid; gap: var(--wp--preset--spacing--5); }
/* Reconciliación del block-gap de WP (ver §4): grid → hijos sin margen. */
.contacto .datos-contacto > * { margin-block-start: 0; margin-block-end: 0; }
.datos-contacto .dato { position: relative; }
.datos-contacto .dato { padding-left: 58px; }
.datos-contacto .dato-ico {
  position: absolute; left: 0; top: 50%; transform: translateY(-50%);
  display: inline-flex; align-items: center; justify-content: center;
  width: 42px; height: 42px; border-radius: 11px;
  background: var(--color-surface); border: 1px solid var(--color-border);
  color: var(--color-primary-strong);
}
.datos-contacto .dato-ico svg { width: 22px; height: 22px; }
.datos-contacto .dato-label {
  font-size: var(--font-size-xs); font-weight: 700; letter-spacing: .06em;
  text-transform: uppercase; color: var(--color-muted); margin: 0 0 2px;
}
.datos-contacto .dato-valor { margin: 0; color: var(--color-ink); line-height: 1.5; }
.datos-contacto .dato-valor a { color: var(--color-primary-strong); }

/* --- Texto solo para lector de pantalla --- */
.screen-reader-text {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0;
}

/* ==========================================================================
   C03 · Tamaños de letra fieles al diseño (v0.3.5)
   Valores exactos del prototipo (docs/diseno/prototipo/export/index.html).
   ========================================================================== */

/* Títulos de sección: hasta 42px en escritorio (no 28px). */
.seccion-titulo {
  font-family: var(--font-title);
  font-size: clamp(28px, 3.6vw, 42px);
  font-weight: 700;
  line-height: 1.15;
}
/* Subtítulo bajo el título de sección. */
.seccion-sub { font-size: 18px; }

/* Tarjeta de programa. */
.prog-titulo { font-size: 24px; }
.prog-desc { font-size: 16px; }
.programa .card-cta { font-size: 15px; }

/* Tarjeta institucional. */
.inst-titulo { font-size: 21px; }
.inst-desc { font-size: 15px; }
.inst-card .inst-link { font-size: 15px; }

/* Datos de contacto (etiqueta 13px, valor 17px — tamaños del diseño). */
.datos-contacto .dato-label { font-size: 13px; }
.datos-contacto .dato-valor { font-size: 17px; }

/* ==========================================================================
   C03 · Hero: botones y gif fieles al diseño (v0.3.6)
   ========================================================================== */

/* Botones del hero: padding y tipografía del diseño (15px 28px · 16px/700). */
.hero .wp-block-button__link {
  font-size: 16px;
  font-weight: 700;
  padding: 15px 28px;
  border-radius: var(--radius);
}
/* Botón secundario: fondo BLANCO, texto oscuro, borde fino gris (no el outline
   por defecto de WordPress). */
.hero .is-style-outline .wp-block-button__link {
  background: var(--color-surface);
  color: var(--color-ink);
  border: 1.5px solid var(--color-border);
}
.hero .is-style-outline .wp-block-button__link:hover {
  border-color: var(--color-primary);
  color: var(--color-primary-strong);
}

/* El gif llena su columna: el borde derecho llega a 1200 (alineado con el menú). */
.hero .hero-img { width: 100%; }
.hero .hero-img img {
  width: 100%;
  aspect-ratio: 4 / 3;
  object-fit: cover;
  display: block;
}

/* ==========================================================================
   C06 · Página de contacto + formulario Contact Form 7
   Valores exactos del prototipo (docs/diseno/prototipo/export/contacto.html).
   Anti-spam SIN Google (ADR-0006/0007): honeypot invisible + casilla propia.
   ========================================================================== */

/* --- Cabecera: miga de pan + título + intro --- */
.breadcrumb ol {
  list-style: none; margin: 0 0 22px; padding: 0;
  display: flex; flex-wrap: wrap; gap: 8px; align-items: center;
  font-size: 14px; color: var(--color-muted);
}
.breadcrumb a { color: var(--color-muted); text-decoration: none; }
.breadcrumb a:hover { color: var(--color-primary-strong); text-decoration: underline; }
.breadcrumb .sep { color: var(--color-border-strong); }
.breadcrumb [aria-current="page"] { color: var(--color-ink); font-weight: 600; }

.contacto-h1 {
  font-family: var(--font-title);
  font-size: clamp(36px, 4.6vw, 54px);
  line-height: 1.05; font-weight: 700; letter-spacing: -.02em;
  margin-bottom: 18px;
}
/* Intro alineada a la izquierda: el layout `constrained` de WP centra los hijos
   más estrechos con `margin-inline:auto !important`, así que hay que anularlo con
   `!important` (mismo motivo por el que un párrafo con max-width sale centrado). */
.contacto-cabecera .contacto-intro {
  font-size: 20px; line-height: 1.55; max-width: 38em;
  margin-left: 0 !important; margin-right: auto !important;
}

/* --- Aside de datos: columna con separación uniforme --- */
.col-datos { display: flex; flex-direction: column; gap: 22px; }

/* --- Tarjeta del formulario --- */
.form-card {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: 16px;
  padding: 36px;
  box-shadow: 0 20px 50px -34px var(--color-shadow-form, rgba(31, 31, 35, .35));
}
.form-card .wpcf7-form { display: flex; flex-direction: column; gap: 22px; }
.form-card .wpcf7-form > p { margin: 0; }

.cf7-intro { display: flex; flex-direction: column; gap: 6px; }
/* Reset de margen: el tema no resetea h2/p globalmente (a diferencia del
   prototipo), y el margen del navegador inflaba el hueco título↔nota a 41px. */
.cf7-titulo { font-size: 24px; font-weight: 700; font-family: var(--font-title); margin: 0; }
.cf7-obligatorios { font-size: 15px; color: var(--color-muted); margin: 0; }
.req { color: var(--color-error); }

/* Campo: label arriba, control debajo */
.campo { display: flex; flex-direction: column; gap: 7px; }
.campo > label { font-size: 15px; font-weight: 700; color: var(--color-ink); }
.form-card .wpcf7-form-control-wrap { display: block; }
/* border-box: sin él, width:100% + padding + borde hacía que el input se saliera
   ~33px del área de contenido del card (casi hasta el borde). El prototipo usa
   box-sizing:border-box global; aquí lo acotamos a los controles del formulario. */
.form-card input, .form-card textarea, .form-card select { box-sizing: border-box; }
.form-card input[type="text"],
.form-card input[type="email"],
.form-card textarea {
  width: 100%; font-size: 16px; color: var(--color-ink); background: var(--color-surface);
  border: 1.5px solid var(--color-border); border-radius: var(--radius);
  padding: 13px 15px; line-height: 1.4;
}
.form-card textarea { min-height: 120px; resize: vertical; display: block; }
.form-card input::placeholder,
.form-card textarea::placeholder { color: var(--color-muted); opacity: 1; }

/* Checkbox base (tamaño + color de marca) */
.form-card input[type="checkbox"] {
  width: 20px; height: 20px; flex-shrink: 0; accent-color: var(--color-primary); cursor: pointer;
}
/* Las cajas acceptance/checkbox de CF7 son spans inline: a bloque para maquetar */
.form-card .wpcf7-acceptance,
.form-card .wpcf7-checkbox,
.form-card .wpcf7-list-item { display: block; margin: 0; }

/* "Enviarme una copia" en caja suave */
.campo-copia label {
  display: flex; gap: 12px; align-items: flex-start;
  padding: 14px 16px; background: var(--color-surface-soft);
  border: 1px solid var(--color-border); border-radius: var(--radius);
  font-size: 15px; line-height: 1.5; color: var(--color-ink); cursor: pointer;
}
.campo-copia input[type="checkbox"] { margin-top: 3px; }

/* "No soy un robot" en su caja (sin marca reCAPTCHA de Google) */
.campo-captcha .captcha-box {
  padding: 16px; background: var(--color-surface);
  border: 1.5px solid var(--color-border); border-radius: var(--radius);
}
.campo-captcha label {
  display: flex; gap: 12px; align-items: center;
  font-size: 15px; font-weight: 600; color: var(--color-ink); cursor: pointer;
}
.campo-captcha input[type="checkbox"] { width: 26px; height: 26px; }

/* Aceptación de privacidad */
.campo-privacidad label {
  display: flex; gap: 12px; align-items: flex-start;
  font-size: 15px; line-height: 1.5; color: var(--color-ink); cursor: pointer;
}
.campo-privacidad input[type="checkbox"] { margin-top: 3px; }
.campo-privacidad a { color: var(--color-primary-strong); text-underline-offset: 2px; }

/* Honeypot: refuerzo de ocultación (el addon ya lo oculta) */
.form-card .wpcf7-form-control-wrap[data-name="website"] {
  position: absolute !important; left: -9999px !important; width: 1px; height: 1px; overflow: hidden;
}

/* Botón enviar (con flecha → como el diseño; la flecha va de fondo porque un
   input[type=submit] no admite ::after ni icono hijo). */
.form-card input.wpcf7-submit {
  align-self: flex-start;
  background-color: var(--color-primary); color: var(--color-primary-contrast);
  font-weight: 700; font-size: 16px;
  /* Como el diseño: [34px] texto [10px] flecha(20) [34px]. Un input[type=submit]
     no admite icono hijo, así que la flecha va de fondo; el padding-derecho
     (34 + 20 + 10 = 64) reserva su hueco y bg-position la fija a 34px del borde. */
  padding: 15px 64px 15px 34px;
  border: none; border-radius: var(--radius); cursor: pointer;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960' fill='%23ffffff'%3E%3Cpath d='M647-440H160v-80h487L423-744l57-56 320 320-320 320-57-56 224-224Z'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 34px center;
  background-size: 20px 20px;
}
.form-card input.wpcf7-submit:hover { background-color: var(--color-primary-strong); }

/* --- Aside: datos de contacto --- */
.contacto-datos-titulo { font-size: 22px; font-weight: 700; font-family: var(--font-title); }
.contacto-datos { margin: 0; display: flex; flex-direction: column; gap: 20px; }
/* Datos de contacto como bloques nativos editables (v0.5.3): cada .dato es un
   wp:group con icono decorativo (absoluto) + etiqueta + valor. Reconciliación
   del block-gap de WP (ver §4): .contacto-datos es flex → sus hijos .dato
   espacian con `gap`, anulamos el margen de layout. */
.col-datos .contacto-datos > * { margin-block-start: 0; margin-block-end: 0; }
.contacto-datos .dato { position: relative; padding-left: 58px; }
.contacto-datos .dato-ico {
  position: absolute; left: 0; top: 0;
  display: inline-flex; align-items: center; justify-content: center;
  width: 42px; height: 42px; border-radius: 11px;
  background: var(--color-surface-tint); border: 1px solid var(--color-border);
  color: var(--color-primary-strong);
}
.contacto-datos .dato-label {
  font-size: 13px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase;
  color: var(--color-muted); margin: 0 0 4px;
}
.contacto-datos .dato-valor { margin: 0; font-size: 16px; line-height: 1.5; color: var(--color-ink); }
.contacto-datos .dato-valor a { color: var(--color-ink); font-weight: 600; }
.contacto-datos .dato-valor a:hover { color: var(--color-primary-strong); }

/* Imagen del Palacete */
.contacto-mapa {
  aspect-ratio: 4 / 3; border-radius: 16px; overflow: hidden;
  border: 1px solid var(--color-border); background: var(--color-surface-soft);
}
.contacto-mapa img { width: 100%; height: 100%; object-fit: cover; display: block; }
.contacto-mapa--vacia {
  display: flex; align-items: center; justify-content: center; text-align: center;
  padding: 16px; color: var(--color-muted); font-size: 14px; font-weight: 600;
}

/* Aviso RGPD */
.contacto-rgpd {
  background: var(--color-surface-soft); border: 1px solid var(--color-border);
  border-radius: var(--radius); padding: 18px 20px;
}
.contacto-rgpd p { font-size: 14px; line-height: 1.55; color: var(--color-muted); }
.contacto-rgpd a { color: var(--color-primary-strong); }

/* --- Validación / respuesta de CF7 (accesible) --- */
.wpcf7 .wpcf7-not-valid-tip {
  color: var(--color-error); font-size: 14px; font-weight: 600; margin-top: 6px;
}
.form-card .wpcf7-not-valid { border-color: var(--color-error) !important; }
.wpcf7 .wpcf7-response-output {
  margin: 4px 0 0; padding: 14px 16px; border-radius: var(--radius);
  font-size: 15px; line-height: 1.5;
}
.wpcf7 form.invalid .wpcf7-response-output,
.wpcf7 form.unaccepted .wpcf7-response-output,
.wpcf7 form.spam .wpcf7-response-output {
  border: 1.5px solid var(--color-error); background: var(--color-error-tint); color: var(--color-error);
}
.wpcf7 form.sent .wpcf7-response-output {
  border: 1.5px solid var(--color-success); background: var(--color-success-tint); color: var(--color-success);
}

/* ==========================================================================
   C05 · Páginas de contenido (legales) + prosa editorial
   Declaración de accesibilidad fiel al prototipo (accesibilidad.html).
   La prosa (.prosa) es la base editorial reutilizable (adelanta C04).
   ========================================================================== */

/* La página de contenido es UNA columna centrada, como el diseño (contenido 852,
   left 214 en escritorio) — NO el ancho "wide" (1200). Título y cuerpo comparten
   la misma columna. Se anula el max-width de alignwide.
   El gutter lateral en móvil lo aporta el root padding nativo (theme.json
   styles.spacing.padding); por eso la columna es el ANCHO DE CONTENIDO (852) SIN
   padding propio, no 900+24 [antes de v0.28.0]: así no se duplica el gutter en
   móvil (root + propio = 32) y queda idéntica a antes en todos los anchos
   (852 centrado en el área ya sangrada → 214 en escritorio, 16 en móvil). */
.contenido-cabecera,
.contenido-cuerpo {
  max-width: 852px !important;   /* gana al max-width de alignwide (1200) */
  margin-inline: auto !important;
}

/* Páginas INTERIORES del Portal de transparencia: el contenido ocupa 1200 y va a
   ras, alineado con el contenido del header (como la portada y las páginas de los
   CPT), en vez de la columna de 900 de las legales. Acotado por la clase de body
   `tr-interior-page` (functions.php) para NO afectar a aviso legal/privacidad/
   cookies/declaración, que siguen a 900 por diseño. Especificidad 0,2,0 > 0,1,0
   → gana al 900 aunque ambos lleven !important. */
.tr-interior-page .contenido-cabecera,
.tr-interior-page .contenido-cuerpo {
  max-width: 1200px !important;
  padding-inline: 0 !important;
}

/* El cuerpo es un layout `constrained` con contentSize 900: ensanchar SOLO la
   caja no basta —WordPress limita a 900 (con margin auto) a los hijos directos
   vía su regla generada `.wp-container-N > *` (0,1,0)—. Hay que soltar también
   ese límite. `.tr-interior-page .contenido-cuerpo > *` es 0,2,0 → gana sin
   !important, pero lo dejamos por robustez. margin-inline:0 = a ras (no centrado). */
.tr-interior-page .contenido-cuerpo > * {
  max-width: 1200px !important;
  margin-inline: 0 !important;
}

/* --- Cabecera de página de contenido (miga + título + lead) --- */
.contenido-titulo {
  font-family: var(--font-title);
  font-size: clamp(34px, 5.4vw, 52px);
  line-height: 1.05; font-weight: 700; letter-spacing: -.02em;
  margin-bottom: 18px;
}
/* Lead y sub alineados a la izquierda (el layout constrained centra los hijos
   estrechos con margin-inline:auto !important; ver §4). */
.contenido-cabecera .contenido-lead {
  font-size: clamp(17px, 2.4vw, 20px); line-height: 1.55; max-width: 44em;
  margin-left: 0 !important; margin-right: auto !important;
}
.contenido-cabecera .contenido-sub {
  font-size: 16px; line-height: 1.55; max-width: 44em; margin: 16px 0 0;
  margin-left: 0 !important; margin-right: auto !important;
}

/* --- Prosa editorial (aviso legal, privacidad; base para C04) --- */
/* El ritmo vertical es EXPLÍCITO (no depende de los márgenes del navegador):
   los bloques nativos de Gutenberg (.wp-block-heading/.wp-block-paragraph)
   resetean el margen que el UA daba a <h2>/<p>, así que restituimos el margen
   inferior aquí. Con esto la prosa se ve idéntica tanto en HTML como en bloques
   nativos editables. Los márgenes colapsan con los margin-top de abajo. */
.prosa { overflow-wrap: break-word; }   /* correos/URLs largos no desbordan a 320px */
.prosa > * + * { margin-top: 18px; }
.prosa h2 {
  font-family: var(--font-title);
  font-size: clamp(23px, 3vw, 30px); line-height: 1.15; font-weight: 700;
  letter-spacing: -.01em; color: var(--color-ink); margin-top: 40px; margin-bottom: 0.83em;
}
.prosa h2:first-child { margin-top: 0; }
.prosa h3 { font-family: var(--font-title); font-size: 18px; font-weight: 700; color: var(--color-ink); margin-top: 26px; margin-bottom: 0.83em; }
.prosa p { font-size: 16px; line-height: 1.6; color: var(--color-muted); margin-bottom: 1em; }
.prosa ul, .prosa ol { margin: 0; padding-left: 22px; display: flex; flex-direction: column; gap: 10px; }
.prosa li { font-size: 16px; line-height: 1.6; color: var(--color-muted); }
.prosa a { color: var(--color-primary-strong); text-underline-offset: 2px; }
.prosa strong { color: var(--color-ink); }
.prosa-nota {
  margin-top: 28px; padding: 16px 18px; border-left: 4px solid var(--color-border-strong);
  background: var(--color-surface-soft); border-radius: var(--radius-sm);
  font-size: 14px !important; line-height: 1.55;
}

/* --- Declaración de accesibilidad --- */
.acc-secciones { display: flex; flex-direction: column; gap: clamp(32px, 4vw, 44px); }
.acc-seccion h2 {
  font-family: var(--font-title);
  font-size: clamp(23px, 3vw, 30px); line-height: 1.15; font-weight: 700;
  letter-spacing: -.01em; color: var(--color-ink); margin: 0 0 18px;
}
.acc-seccion > p { font-size: 16px; line-height: 1.6; color: var(--color-muted); margin: 0 0 22px; }
.acc-seccion > ul { margin: 0; padding-left: 22px; display: flex; flex-direction: column; gap: 10px; }
.acc-seccion > ul li { font-size: 16px; line-height: 1.6; color: var(--color-muted); }
.acc-seccion a { color: var(--color-primary-strong); }

/* Callout de situación de cumplimiento */
.acc-callout {
  display: flex; gap: 14px; align-items: flex-start; padding: 20px 22px;
  background: var(--wp--preset--color--warning-tint);
  border: 1px solid var(--wp--preset--color--warning-border);
  border-left: 4px solid var(--color-warning);
  border-radius: 14px;
}
.acc-callout-ico { color: var(--color-warning); flex-shrink: 0; margin-top: 2px; display: inline-flex; }
.acc-callout-ico .dato-ico svg { width: 28px; height: 28px; }
.acc-callout-titulo { font-weight: 700; color: var(--wp--preset--color--warning-ink); font-size: 17px; margin: 0 0 4px; }
.acc-callout-texto { font-size: 16px; line-height: 1.6; color: var(--wp--preset--color--warning-ink); margin: 0; }

/* Tarjetas de contenido no accesible */
.acc-cards { display: flex; flex-direction: column; gap: 20px; }
.acc-card {
  background: var(--color-surface); border: 1px solid var(--color-border);
  border-radius: 14px; padding: 22px 24px;
}
.acc-card h3 { font-size: 18px; font-weight: 700; color: var(--color-ink); margin: 0 0 12px; }
.acc-card ul { margin: 0; padding-left: 22px; display: flex; flex-direction: column; gap: 10px; }
.acc-card li, .acc-card p { font-size: 16px; line-height: 1.6; color: var(--color-muted); margin: 0; }

/* Preparación: tarjetas de datos */
.acc-stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 16px; }
.acc-stat {
  background: var(--color-surface-soft); border: 1px solid var(--color-border);
  border-radius: var(--radius); padding: 18px 20px;
}
.acc-stat-label {
  font-size: 13px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase;
  color: var(--color-muted); margin: 0 0 6px;
}
.acc-stat-valor { font-size: 18px; font-weight: 700; color: var(--color-ink); margin: 0; }
.acc-stat-valor--sm { font-size: 16px; font-weight: 600; line-height: 1.4; }

/* Observaciones: tarjeta de contacto */
.acc-contacto {
  background: var(--color-surface-tint); border: 1px solid var(--color-border);
  border-radius: 14px; padding: clamp(20px, 3vw, 28px);
  display: flex; flex-direction: column; gap: 18px;
}
.acc-dato { display: flex; gap: 14px; align-items: flex-start; }
.acc-dato .dato-ico {
  flex-shrink: 0; display: inline-flex; align-items: center; justify-content: center;
  width: 42px; height: 42px; border-radius: 11px;
  background: var(--color-surface); border: 1px solid var(--color-border);
  color: var(--color-primary-strong);
}
.acc-dato-label {
  font-size: 13px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase;
  color: var(--color-muted); margin: 0 0 4px;
}
.acc-dato-valor { font-size: 17px; line-height: 1.5; margin: 0; }
.acc-dato-valor a { color: var(--color-ink); font-weight: 600; word-break: break-word; }
.acc-dato-valor a:hover { color: var(--color-primary-strong); }
.acc-contacto-nota {
  font-size: 15px; line-height: 1.55; color: var(--color-muted);
  border-top: 1px solid var(--color-border); padding-top: 16px; margin: 0;
}
.acc-contacto-nota strong { color: var(--color-ink); }

/* Contenido opcional: pastillas de navegadores.
   Selector con `.acc-seccion` para ganar a `.acc-seccion > ul` (columna). */
.acc-seccion ul.acc-browsers {
  list-style: none; margin: 0; padding: 0;
  display: flex; flex-direction: row; flex-wrap: wrap; gap: 10px;
}
.acc-seccion ul.acc-browsers li {
  font-size: 15px; font-weight: 600; color: var(--color-ink);
  background: var(--color-surface-soft); border: 1px solid var(--color-border);
  padding: 8px 16px; border-radius: var(--radius-pill); line-height: 1.2;
}

/* --- Reconciliación con el layout de bloques nativos (Gutenberg) ---
   Los contenedores acc-* son grupos nativos: WordPress los marca `is-layout-flow`
   y les inyecta `margin-block-start:24px` (block-gap) entre hijos. Como estos
   contenedores espacian con `gap` (flex/grid), anulamos ese margen en sus hijos
   directos —igual que hace WP para `is-layout-flex`—. Especificidad 0,2,0 con el
   prefijo .contenido-cuerpo para ganar al 0,1,0 de la regla global de WP. */
.contenido-cuerpo :is(.acc-secciones, .acc-callout, .acc-cards, .acc-stats, .acc-contacto, .acc-dato) > * {
  margin-block-start: 0; margin-block-end: 0;
}
/* Las secciones son de flujo: el espaciado lo dan los márgenes inferiores del
   diseño (h2 18, p 22), con los contenedores hijos a margen superior 0. Anulamos
   solo el block-gap superior (no el inferior, que sí es del diseño). */
.contenido-cuerpo .acc-seccion > * { margin-block-start: 0; }
/* WP recorta a 0 el margen del último hijo de cada grupo de flujo (0,2,0). La
   última <p> de una sección lleva su margen inferior de diseño; lo restituimos. */
.contenido-cuerpo .acc-seccion > p:last-child { margin-block-end: 22px; }
/* El icono del callout lleva un nudge de 2px que la regla de primer-hijo de WP
   (y nuestra anulación) recortan; lo restituimos con mayor especificidad. */
.contenido-cuerpo .acc-callout > .acc-callout-ico { margin-block-start: 2px; }
/* Igual que arriba, el último bloque de la prosa conserva su margen inferior. */
.contenido-cuerpo .prosa > :last-child { margin-block-end: 1em; }

/* ==========================================================================
   C-transparencia · Portal de transparencia (LANDING)
   Valores del prototipo (docs/diseno/prototipo/export/transparencia.html).
   Solo la landing (hero + intro + 6 tarjetas + 4 documentos). El contenido
   interno se decide aparte (ADR-0005).
   Ancho: 1200px alineado con el header (decisión del cliente 2026-07-20, v0.27.0;
   antes 1120 fiel al prototipo — la rejilla auto-fit pasa de 3 a 4 columnas). El
   buscador se alinea a la izquierda. Iconos SVG (Material Symbols), NADA de Google.
   ========================================================================== */

/* Alineación 40/1240 con el header en escritorio + gutter en móvil (v0.28.0).
   Las secciones `alignwide` (intro/documentos) las centra el root padding nativo
   (theme.json styles.spacing.padding + useRootPaddingAwareAlignments): 1200
   centrado deja 40px a los lados en escritorio y respeta el gutter (16/24) al
   estrecharse → padding-inline:0 en ellas.
   Las secciones `alignfull` (hero/categorías) sangran el fondo a todo el ancho;
   su CONTENIDO se inseta con `max(gutter, (100%-1200)/2)`: en escritorio (100%≈vw)
   da (1280-1200)/2 = 40 (alineado con el header); al estrecharse el término del
   centrado se hace ≤ gutter y gana el clamp (24→16). Sustituye al hack
   `padding-inline:0` [v0.27.0], que dejaba el contenido pegado al borde en móvil. */
.tr-intro, .tr-documentos { padding-inline: 0; }
.tr-hero, .tr-categorias {
  padding-inline: max(clamp(16px, 4vw, 24px), calc((100% - 1200px) / 2));
}

/* La landing pega su hero al header: quita el block-gap (24px) que WordPress mete
   entre las áreas header↔main en .wp-site-blocks (mismo caso que el pie, v0.3.12).
   Acotado a la landing (clase de body tr-landing) para no mover otras páginas. */
.tr-landing .wp-site-blocks > main { margin-block-start: 0; }

/* --- Hero: fondo magenta a todo el ancho, texto claro --- */
.tr-hero {
  background: linear-gradient(120deg, var(--color-primary-strong) 0%, var(--color-primary) 100%);
  color: var(--color-primary-contrast);
}
/* Miga sobre magenta: colores CLAROS. El prototipo usa on-brand-85/80/50, que
   quedan por debajo de 4.5:1 (defecto B-07); aquí se usa blanco sólido en los
   enlaces y el actual para garantizar WCAG 1.4.3 AA. El separador es decorativo
   (aria-hidden) → no requiere contraste. */
.tr-hero .breadcrumb ol { margin: 0 0 28px; }
.tr-hero .breadcrumb a { color: var(--color-primary-contrast); }
.tr-hero .breadcrumb a:hover { color: var(--color-primary-contrast); text-decoration: underline; }
.tr-hero .breadcrumb .sep { color: var(--color-on-brand-50); }
.tr-hero .breadcrumb [aria-current="page"] { color: var(--color-primary-contrast); font-weight: 600; }

.tr-eyebrow {
  font-size: 13px; font-weight: 700; letter-spacing: .14em; text-transform: uppercase;
  color: var(--color-primary-contrast); margin: 0 0 18px;
}
/* Contenido del hero en un grupo de flujo: dentro de una sección alignfull, un
   hijo con max-width y margin-left:0 se pega al borde del viewport (0), no al del
   área de contenido (ver §4). El wrapper de flujo hereda el ancho de contenido y
   sus hijos-bloque con max-width quedan a la izquierda sin hacks. Se anula solo
   el block-gap superior (24px de WP); los márgenes inferiores propios se respetan. */
.tr-hero .tr-hero-inner > * { margin-block-start: 0; }
.tr-hero-title {
  font-family: var(--font-title);
  font-size: clamp(38px, 6.4vw, 68px);
  line-height: 1.02; font-weight: 800; letter-spacing: -.02em;
  max-width: 14ch; text-wrap: balance; margin: 0;
}

/* --- Intro --- (sin la clase tr-intro-texto: los párrafos van directos en
   .tr-intro, a todo el ancho de la sección; conservan el aspecto de lead) --- */
.tr-intro p { font-size: clamp(16px, 2vw, 18px); line-height: 1.65; color: var(--color-muted); }
.tr-intro strong { color: var(--color-ink); }

/* --- Categorías --- */
.tr-upd { margin-bottom: 32px; }
.tr-categorias .tr-upd > * { margin-block-start: 0; margin-block-end: 0; }
.tr-upd-label { font-size: 14px; font-weight: 600; color: var(--color-muted); margin: 0; }
.tr-upd-fecha { font-size: 16px; font-weight: 700; color: var(--color-ink); margin: 0; }

.tr-cats {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: clamp(16px, 2vw, 24px);
}
.tr-categorias .tr-cats > * { margin-block-start: 0; margin-block-end: 0; }
.tr-cat {
  position: relative;
  background: var(--color-surface); border: 1px solid var(--color-border);
  border-radius: calc(var(--radius) + 4px);
  padding: clamp(24px, 3vw, 34px);
  display: flex; flex-direction: column; gap: clamp(40px, 6vw, 64px);
  min-height: 200px;
  transition: border-color .18s ease, box-shadow .18s ease;
}
.tr-cat > * { margin-block-start: 0; margin-block-end: 0; }
.tr-cat:hover { border-color: var(--color-primary); box-shadow: 0 8px 30px -18px var(--color-shadow-card, #83838380); }
/* Icono = DECORACIÓN (no contenido): va por CSS, no en un bloque wp:html, para
   que el bloque quede 100% editable en Gutenberg. El glifo (Material Symbols,
   color del diseño) lo pone cada modificador .tr-cat--<mod> más abajo. */
.tr-cat::before { content: ""; width: 46px; height: 46px; background: no-repeat center / contain; }
.tr-cat-titulo {
  font-family: var(--font-title);
  font-size: clamp(19px, 2.2vw, 22px); font-weight: 700;
  color: var(--color-primary-strong); margin: 0;
}
/* Toda la tarjeta es clicable (stretched link): un solo <a> con ::after. */
.tr-cat-link { color: inherit; text-decoration: none; }
.tr-cat-link::after { content: ""; position: absolute; inset: 0; }
.tr-cat:focus-within { border-color: var(--color-primary); }

/* --- Documentos --- */
.tr-doc-titulo-seccion {
  font-family: var(--font-title);
  font-size: clamp(22px, 3vw, 32px); line-height: 1.15; font-weight: 700;
  letter-spacing: -.01em; color: var(--color-ink); margin: 0 0 10px;
}
.tr-doc-intro { font-size: 16px; line-height: 1.6; color: var(--color-muted); max-width: 44em; margin: 0 0 28px; }
.tr-docs {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 14px;
}
.tr-documentos .tr-docs > * { margin-block-start: 0; margin-block-end: 0; }
.tr-doc {
  position: relative;
  display: flex; gap: 14px; align-items: center;
  background: var(--color-surface); border: 1px solid var(--color-border);
  border-radius: var(--radius); padding: 18px 20px;
  transition: border-color .18s ease;
}
.tr-doc > * { margin-block-start: 0; margin-block-end: 0; }
.tr-doc:hover { border-color: var(--color-primary); }
/* Icono decorativo por CSS (ver nota en .tr-cat::before). */
.tr-doc::before { content: ""; width: 28px; height: 28px; flex-shrink: 0; background: no-repeat center / contain; }
.tr-doc-titulo { font-size: 16px; font-weight: 600; color: var(--color-ink); margin: 0; }
.tr-doc-link { color: inherit; text-decoration: none; }
.tr-doc-link::after { content: ""; position: absolute; inset: 0; }
.tr-doc:focus-within { border-color: var(--color-primary); }

/* Iconos (Material Symbols Rounded, Apache-2.0) como SVG data-URI, uno por
   categoría/documento. Generados del paquete @material-symbols/svg-400/rounded;
   fill fijo del diseño (categorías: ink · documentos: primary-strong). NADA de
   Google en runtime (ADR-0006). Decorativos: no se anuncian al lector. */
.tr-cat--institucional::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960' fill='%231F1F23'%3E%3Cpath d='M180-180h560v-173q0-9 4.5-16t12.5-11l24-11q19-8 30.5-27t11.5-40q0-21.43-11.5-39.72Q800-516 781-525l-24-11q-8.13-3.75-12.57-10.88Q740-554 740-563v-177H564q-10.66 0-18.83-7-8.17-7-10.17-18.33L530-791q-5-27-24.67-45.5-19.68-18.5-45.91-18.5Q432-855 412-836.5T387-791l-5 25.67Q380-754 371.83-747q-8.17 7-18.83 7H181v110q55 20 89 66.78t34 105.5q0 59.72-34 107.22T180-287v107Zm11 60q-29 0-50-21t-21-51v-121q0-8 5-13t13-7q45-9 75.5-43.08T244-458q0-48.03-30-82.52Q184-575 139-583q-8-2-13-7t-5-13v-126q0-30 20.5-50.5T192-800h136q6.63-48.88 43.58-81.94Q408.53-915 458.74-915q49.26 0 86.45 33.06Q582.37-848.88 590-800h139q30 0 50.5 20.5T800-729v147q38 18 60.5 49.5T883-458q0 43-22.5 75T800-334v142q0 30-20.5 51T729-120H191Zm311-338Z'/%3E%3C/svg%3E"); }
.tr-cat--organizativa::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960' fill='%231F1F23'%3E%3Cpath d='M604-180v-65h-94q-24.75 0-42.37-17.63Q450-280.25 450-305v-350h-93v70q0 24.75-17.62 42.37Q321.75-525 297-525H140q-24.75 0-42.37-17.63Q80-560.25 80-585v-195q0-24.75 17.63-42.38Q115.25-840 140-840h157q24.75 0 42.38 17.62Q357-804.75 357-780v65h247v-65q0-24.75 17.63-42.38Q639.25-840 664-840h156q24.75 0 42.38 17.62Q880-804.75 880-780v195q0 24.75-17.62 42.37Q844.75-525 820-525H664q-24.75 0-42.37-17.63Q604-560.25 604-585v-70h-94v350h94v-70q0-24.75 17.63-42.38Q639.25-435 664-435h156q24.75 0 42.38 17.62Q880-399.75 880-375v195q0 24.75-17.62 42.37Q844.75-120 820-120H664q-24.75 0-42.37-17.63Q604-155.25 604-180ZM140-780v195-195Zm524 405v195-195Zm0-405v195-195Zm0 195h156v-195H664v195Zm0 405h156v-195H664v195ZM140-585h157v-195H140v195Z'/%3E%3C/svg%3E"); }
.tr-cat--economica::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960' fill='%231F1F23'%3E%3Cpath d='M540-420q-50 0-85-35t-35-85q0-50 35-85t85-35q50 0 85 35t35 85q0 50-35 85t-85 35ZM220-280q-24.75 0-42.37-17.63Q160-315.25 160-340v-400q0-24.75 17.63-42.38Q195.25-800 220-800h640q24.75 0 42.38 17.62Q920-764.75 920-740v400q0 24.75-17.62 42.37Q884.75-280 860-280H220Zm100-60h440q0-42 29-71t71-29v-200q-42 0-71-29t-29-71H320q0 42-29 71t-71 29v200q42 0 71 29t29 71Zm450 180H100q-24.75 0-42.37-17.63Q40-195.25 40-220v-430q0-12.75 8.68-21.38 8.67-8.62 21.5-8.62 12.82 0 21.32 8.62 8.5 8.63 8.5 21.38v430h670q12.75 0 21.38 8.68 8.62 8.67 8.62 21.5 0 12.82-8.62 21.32-8.63 8.5-21.38 8.5ZM220-340v-400 400Z'/%3E%3C/svg%3E"); }
.tr-cat--contratos::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960' fill='%231F1F23'%3E%3Cpath d='M560-110v-81q0-5.57 2-10.78 2-5.22 7-10.22l211.61-210.77q9.11-9.12 20.25-13.18Q812-440 823-440q12 0 23 4.5t20 13.5l37 37q9 9 13 20t4 22q0 11-4.5 22.5t-13.58 20.62L692-89q-5 5-10.22 7-5.21 2-10.78 2h-81q-12.75 0-21.37-8.63Q560-97.25 560-110Zm300-233-37-37 37 37ZM620-140h38l121-122-37-37-122 121v38ZM220-80q-24 0-42-18t-18-42v-680q0-24 18-42t42-18h315q12.44 0 23.72 5T578-862l204 204q8 8 13 19.28 5 11.28 5 23.72v71q0 12.75-8.68 21.37-8.67 8.63-21.5 8.63-12.82 0-21.32-8.63-8.5-8.62-8.5-21.37v-56H550q-12.75 0-21.37-8.63Q520-617.25 520-630v-190H220v680h250q12.75 0 21.38 8.68 8.62 8.67 8.62 21.5 0 12.82-8.62 21.32Q482.75-80 470-80H220Zm0-60v-680 680Zm541-141-19-18 37 37-18-19Z'/%3E%3C/svg%3E"); }
.tr-cat--ayudas::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960' fill='%231F1F23'%3E%3Cpath d='m562-110 248-78q0-20-15.5-34T758-235H549q-16 1-31.5-2t-30.5-8l-66-20q-12-4-18-16t-2-24q4-12 15.28-18t23.72-1l64 21q11 4 22.5 6t22.5 2h56q2 0 0 0 0-21-14-36.5T557-355l-218-83h-84v238l307 90Zm-13 57-294-84q-2 27-22.5 42T195-80h-95q-24.75 0-42.37-17.63Q40-115.25 40-140v-298q0-24.75 17.63-42.38Q75.25-498 100-498h238q5.33 0 10.67 1 5.33 1 10.33 3l218 82q42 16 66.5 46t24.5 71h90q50.83 0 86.42 37Q880-221 880-170q0 11-5.5 20T859-138L583-53q-8.17 2-17.09 2Q557-51 549-53Zm-449-87h94v-298h-94v298Zm524-344.5q-11-4.5-20-12.5L482-616q-29.32-27.74-49.66-61.49Q412-711.24 412-751q0-53 35-91t87-38q34 0 62 17.5t50 43.5q22-26 50-43.5t62-17.5q52 0 87 38t35 91q0 39.66-20.5 73.33T810-616L688-497q-9 8-19.81 12.5-10.82 4.5-22 4.5-11.19 0-22.19-4.5Zm22-54.5 120-119q20.12-19.85 37.06-42.32T820-751q0-28-17.5-48.5T758-820q-20 0-37 11t-30 27l-21.66 27.14Q660.38-744 646.19-744q-14.19 0-23.26-10.86L601-782q-13-16-30-27t-37-11q-27 0-44.5 20.5T472-751q0 28.21 16.94 50.68T526-658l120 119Zm0-188Z'/%3E%3C/svg%3E"); }
.tr-cat--comisionado::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960' fill='%231F1F23'%3E%3Cpath d='M110-120q-13 0-21.5-8.5T80-150q0-13 8.5-21.5T110-180h340v-484q-26-9-46.5-29.5T374-740H215l118 285q4 8 4.5 17t-1.5 18q-9 45-46 67.5T210-330q-43 0-80-22.5T84-420q-2-9-1.5-18t4.5-17l118-285h-55q-13 0-21.5-8.5T120-770q0-13 8.5-21.5T150-800h224q12-35 41-57.5t65-22.5q36 0 65 22.5t41 57.5h224q13 0 21.5 8.5T810-770q0 13-8.5 21.5T780-740h-55l118 285q4 8 4.5 17t-1.5 18q-9 45-46 67.5T750-330q-43 0-80-22.5T624-420q-2-9-1.5-18t4.5-17l118-285H586q-9 26-29.5 46.5T510-664v484h340q13 0 21.5 8.5T880-150q0 13-8.5 21.5T850-120H110Zm565-320h150l-75-184-75 184Zm-540 0h150l-75-184-75 184Zm345-280q21 0 35.5-15t14.5-35q0-21-14.5-35.5T480-820q-20 0-35 14.5T430-770q0 20 15 35t35 15Z'/%3E%3C/svg%3E"); }
.tr-doc--accesibilidad::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960' fill='%239E0064'%3E%3Cpath d='M100-40q-24 0-42-18t-18-42v-93q0-12.75 8.68-21.38 8.67-8.62 21.5-8.62 12.82 0 21.32 8.62 8.5 8.63 8.5 21.38v93h93q12.75 0 21.38 8.68 8.62 8.67 8.62 21.5 0 12.82-8.62 21.32Q205.75-40 193-40h-93Zm760 0h-93q-12.75 0-21.37-8.68-8.63-8.67-8.63-21.5 0-12.82 8.63-21.32 8.62-8.5 21.37-8.5h93v-93q0-12.75 8.68-21.38 8.67-8.62 21.5-8.62 12.82 0 21.32 8.62 8.5 8.63 8.5 21.38v93q0 24-18 42t-42 18ZM479-225q-109 0-199-57.5T137-441q-5-9-7-18.87-2-9.87-2-20.13 0-10.5 2.25-20.25T137-519q53-102 143-159.5T479-736q109 0 199.5 57.5T822-519q5 9 7 19t2 20q0 10-2 20t-7 19q-53 101-143.5 158.5T479-225Zm0-60q93 0 173-52.5T774-480q-42-90-122-143t-173-53q-93 0-172.5 53T185-480q42 90 121.5 142.5T479-285Zm1.22-63Q535-348 574-386.72t39-93.5Q613-535 574.07-574t-94-39q-55.07 0-93.57 38.93-38.5 38.93-38.5 94t38.72 93.57q38.72 38.5 93.5 38.5Zm-.22-60q-30 0-51-21t-21-51q0-30 21-51.5t51-21.5q30 0 51.5 21.29T553-480q0 30-21.29 51T480-408Zm0-72Z'/%3E%3C/svg%3E"); }
.tr-doc--informe::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960' fill='%239E0064'%3E%3Cpath d='M349-250h262q12.75 0 21.38-8.68 8.62-8.67 8.62-21.5 0-12.82-8.62-21.32-8.63-8.5-21.38-8.5H349q-12.75 0-21.37 8.68-8.63 8.67-8.63 21.5 0 12.82 8.63 21.32 8.62 8.5 21.37 8.5Zm0-170h262q12.75 0 21.38-8.68 8.62-8.67 8.62-21.5 0-12.82-8.62-21.32-8.63-8.5-21.38-8.5H349q-12.75 0-21.37 8.68-8.63 8.67-8.63 21.5 0 12.82 8.63 21.32 8.62 8.5 21.37 8.5ZM220-80q-24 0-42-18t-18-42v-680q0-24 18-42t42-18h336q12.44 0 23.72 5T599-862l183 183q8 8 13 19.28 5 11.28 5 23.72v496q0 24-18 42t-42 18H220Zm331-584v-156H220v680h520v-494H581q-12.75 0-21.37-8.63Q551-651.25 551-664ZM220-820v186-186 680-680Z'/%3E%3C/svg%3E"); }
.tr-doc--solicitud::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960' fill='%239E0064'%3E%3Cpath d='M180-120q-24.75 0-42.37-17.63Q120-155.25 120-180v-600q0-24.75 17.63-42.38Q155.25-840 180-840h205q5-35 32-57.5t63-22.5q36 0 63 22.5t32 57.5h205q24.75 0 42.38 17.62Q840-804.75 840-780v600q0 24.75-17.62 42.37Q804.75-120 780-120H180Zm0-60h600v-600H180v600Zm130-100h213q12.75 0 21.38-8.68 8.62-8.67 8.62-21.5 0-12.82-8.62-21.32-8.63-8.5-21.38-8.5H310q-12.75 0-21.37 8.68-8.63 8.67-8.63 21.5 0 12.82 8.63 21.32 8.62 8.5 21.37 8.5Zm0-170h340q12.75 0 21.38-8.68 8.62-8.67 8.62-21.5 0-12.82-8.62-21.32-8.63-8.5-21.38-8.5H310q-12.75 0-21.37 8.68-8.63 8.67-8.63 21.5 0 12.82 8.63 21.32 8.62 8.5 21.37 8.5Zm0-170h340q12.75 0 21.38-8.68 8.62-8.67 8.62-21.5 0-12.82-8.62-21.32-8.63-8.5-21.38-8.5H310q-12.75 0-21.37 8.68-8.63 8.67-8.63 21.5 0 12.82 8.63 21.32 8.62 8.5 21.37 8.5Zm194.5-187.5Q515-818 515-832t-10.5-24.5Q494-867 480-867t-24.5 10.5Q445-846 445-832t10.5 24.5Q466-797 480-797t24.5-10.5ZM180-180v-600 600Z'/%3E%3C/svg%3E"); }
.tr-doc--correo::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960' fill='%239E0064'%3E%3Cpath d='M140-160q-24 0-42-18t-18-42v-520q0-24 18-42t42-18h680q24 0 42 18t18 42v520q0 24-18 42t-42 18H140Zm680-525L496-473q-4 2-7.5 3.5T480-468q-5 0-8.5-1.5T464-473L140-685v465h680v-465ZM480-522l336-218H145l335 218ZM140-685v7-39.32.73V-740v23-.91V-678v-7 465-465Z'/%3E%3C/svg%3E"); }

/* ==========================================================================
   C-tr1 · Portal de transparencia — PÁGINAS INTERIORES (contenido, ADR-0008)
   Sin diseño congelado (hueco B-06): componentes coherentes con los tokens.
   Reutiliza la maqueta de contenido de C05 (.contenido-cabecera/.contenido-cuerpo).
   Estructura: índice de anclas + H2/H3 + "Documento descargable" + acordeón
   nativo (core/details) para el histórico. Iconos por CSS (sin wp:html).
   ========================================================================== */

/* Ritmo vertical del cuerpo interior (bloques nativos con block-gap de WP). */
.tr-interior { overflow-wrap: break-word; }   /* nombres/URLs largos no desbordan a 320px */
.tr-interior > * { margin-block-start: 24px; }
.tr-interior > .tr-cat-h2 { margin-block-start: 44px; }
.tr-interior > .tr-cat-h2:first-child,
.tr-interior > *:first-child { margin-block-start: 0; }

/* Índice de anclas (tabla de contenidos) */
.tr-indice {
  list-style: none; margin: 0; padding: 16px 20px;
  background: var(--color-surface-soft); border: 1px solid var(--color-border);
  border-radius: var(--radius);
  display: flex; flex-wrap: wrap; gap: 8px 24px;
}
.tr-indice li { margin: 0; }
.tr-indice a { color: var(--color-primary-strong); font-weight: 600; font-size: 15px; text-underline-offset: 2px; }

/* Encabezados de categoría/subsección */
.tr-cat-h2 {
  font-family: var(--font-title); font-size: clamp(24px, 3vw, 32px); line-height: 1.15;
  font-weight: 700; letter-spacing: -.01em; color: var(--color-ink); margin-bottom: 0;
  padding-bottom: 12px; border-bottom: 2px solid var(--color-border);
}
.tr-interior h3 {
  font-family: var(--font-title); font-size: 19px; font-weight: 700;
  color: var(--color-ink); margin-bottom: 0;
}

/* --- Documento descargable (patrón) --- */
.tr-doc-item {
  display: flex; align-items: center; gap: 14px; flex-wrap: wrap;
  background: var(--color-surface); border: 1px solid var(--color-border);
  border-radius: var(--radius); padding: 14px 18px;
}
.tr-doc-item > * { margin-block-start: 0; margin-block-end: 0; }
/* Icono documento = decoración por CSS (no wp:html). */
.tr-doc-item::before {
  content: ""; flex-shrink: 0; width: 26px; height: 26px;
  background: no-repeat center / contain;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960' fill='%239E0064'%3E%3Cpath d='M349-250h262q12.75 0 21.38-8.68 8.62-8.67 8.62-21.5 0-12.82-8.62-21.32-8.63-8.5-21.38-8.5H349q-12.75 0-21.37 8.68-8.63 8.67-8.63 21.5 0 12.82 8.63 21.32 8.62 8.5 21.37 8.5Zm0-170h262q12.75 0 21.38-8.68 8.62-8.67 8.62-21.5 0-12.82-8.62-21.32-8.63-8.5-21.38-8.5H349q-12.75 0-21.37 8.68-8.63 8.67-8.63 21.5 0 12.82 8.63 21.32 8.62 8.5 21.37 8.5ZM220-80q-24 0-42-18t-18-42v-680q0-24 18-42t42-18h336q12.44 0 23.72 5T599-862l183 183q8 8 13 19.28 5 11.28 5 23.72v496q0 24-18 42t-42 18H220Zm331-584v-156H220v680h520v-494H581q-12.75 0-21.37-8.63Q551-651.25 551-664ZM220-820v186-186 680-680Z'/%3E%3C/svg%3E");
}
.tr-doc-item-nombre { flex: 1 1 200px; min-width: 0; overflow-wrap: anywhere; font-size: 16px; font-weight: 600; color: var(--color-ink); }
.tr-doc-item-formatos { display: flex; flex-wrap: wrap; gap: 8px; }
/* Pills de formato (objetivo táctil ≥24px, WCAG 2.5.8; foco visible heredado) */
.tr-doc-item-formatos a {
  display: inline-flex; align-items: center; min-height: 30px; padding: 4px 14px;
  font-size: 13px; font-weight: 700; letter-spacing: .02em;
  color: var(--color-primary-strong); text-decoration: none;
  background: var(--color-surface); border: 1.5px solid var(--color-border-strong);
  border-radius: var(--radius-pill); line-height: 1.2;
}
.tr-doc-item-formatos a:hover { border-color: var(--color-primary); background: var(--color-primary-tint); color: var(--color-primary-darker); }

/* --- Acordeón histórico (bloque nativo core/details) --- */
.tr-historico { border: 1px solid var(--color-border); border-radius: var(--radius); background: var(--color-surface-soft); overflow: hidden; }
.tr-historico > summary {
  cursor: pointer; padding: 12px 18px; font-weight: 700; font-size: 15px; color: var(--color-ink);
  list-style-position: inside;
}
.tr-historico > summary:hover { color: var(--color-primary-strong); }
.tr-historico[open] > summary { border-bottom: 1px solid var(--color-border); }
/* El contenido del acordeón: los documentos con separación uniforme. */
.tr-historico > :not(summary) { margin: 0 14px; }
.tr-historico > .tr-doc-item { margin-block: 10px; }
.tr-historico > .tr-doc-item:last-child { margin-bottom: 14px; }

/* ==========================================================================
   C07-tr · Buscador del Portal de transparencia
   Sin diseño congelado (B-06): componente coherente con los tokens. Filtra el
   índice auto-mantenido de documentos y secciones. Accesible (label visible,
   estado aria-live, resultados navegables).
   ========================================================================== */
/* El fondo gris del buscador se pega al hero: se elimina el block-gap (24px) que
   WordPress mete entre secciones de nivel superior (mismo caso que el fix v0.3.12
   del pie). El padding interno de la sección se conserva. */
.tr-buscador-seccion { margin-block-start: 0 !important; }
/* Buscador alineado a la IZQUIERDA (antes centrado en la columna): el bloque ocupa
   la columna de contenido (1200, centrada por el layout → 40/1240, como el resto) y
   su contenido (formulario, estado y resultados) se queda a la izquierda con el
   ancho de 760 del diseño. */
.tr-buscador { max-width: 1200px; }
.tr-buscador > * { max-width: 760px; margin-inline: 0; }
.tr-buscador-form { margin: 0; }
.tr-buscador-label { display: block; font-family: var(--font-title); font-size: 20px; font-weight: 700; color: var(--color-ink); margin-bottom: 10px; }
.tr-buscador-input {
  width: 100%; box-sizing: border-box; font-size: 16px; line-height: 1.4;
  padding: 14px 18px; color: var(--color-ink); background: var(--color-surface);
  border: 1.5px solid var(--color-border-strong); border-radius: var(--radius);
}
.tr-buscador-input::placeholder { color: var(--color-muted); opacity: 1; }
.tr-buscador-ayuda { font-size: 14px; color: var(--color-muted); margin: 8px 0 0; }
.tr-buscador-estado { font-size: 15px; font-weight: 600; color: var(--color-ink); margin-top: 14px; min-height: 1.2em; }

.tr-buscador-resultados { list-style: none; margin: 12px 0 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
.tr-res {
  display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px;
  padding: 12px 16px; background: var(--color-surface);
  border: 1px solid var(--color-border); border-radius: var(--radius);
}
.tr-res-nombre { font-size: 16px; font-weight: 600; color: var(--color-ink); overflow-wrap: anywhere; }
a.tr-res-nombre { color: var(--color-primary-strong); text-decoration: none; }
a.tr-res-nombre:hover { text-decoration: underline; }
.tr-res-pag {
  font-size: 12px; font-weight: 700; letter-spacing: .03em; color: var(--color-muted);
  background: var(--color-surface-soft); border: 1px solid var(--color-border);
  padding: 2px 10px; border-radius: var(--radius-pill);
}
.tr-res-tipo { font-size: 12px; color: var(--color-muted); font-style: italic; }
.tr-res-fmts { display: flex; flex-wrap: wrap; gap: 6px; margin-left: auto; }
.tr-res-fmts a {
  display: inline-flex; align-items: center; min-height: 28px; padding: 3px 12px;
  font-size: 12px; font-weight: 700; color: var(--color-primary-strong); text-decoration: none;
  background: var(--color-surface); border: 1.5px solid var(--color-border-strong); border-radius: var(--radius-pill); line-height: 1.2;
}
.tr-res-fmts a:hover { border-color: var(--color-primary); background: var(--color-primary-tint); color: var(--color-primary-darker); }
.tr-buscador-cats { margin: 8px 0 0; }
