/* ==========================================================================
   Portada. Siete secciones, siete ritmos.
   Nada de degradados de marca ni sombras decorativas: la separación la hacen
   filetes de 1px y el espacio. El color lo ponen las capturas de producto.
   ========================================================================== */

/* --- Aparición al entrar en viewport ------------------------------------
   La opacidad inicial sólo se aplica si `theme.js` (síncrono en <head>) ha
   podido marcar el documento con data-js. Sin JavaScript el atributo no
   existe, el selector no casa y el contenido nace visible: nunca queda una
   portada en blanco. Con movimiento reducido tampoco se oculta nada. */
:root[data-js='true'] .rm-reveal {
  opacity: 0;
  transform: translateY(12px);
  transition: opacity 480ms var(--rm-ease), transform 480ms var(--rm-ease);
}

:root[data-js='true'] .rm-reveal[data-visible='true'] {
  opacity: 1;
  transform: none;
}

@media (prefers-reduced-motion: reduce) {
  :root[data-js='true'] .rm-reveal {
    opacity: 1;
    transform: none;
    transition: none;
  }
}

/* --- Piezas compartidas -------------------------------------------------- */
.rm-eyebrow {
  margin: 0 0 var(--rm-space-4);
  font-family: var(--rm-font-mono);
  font-size: var(--rm-text-xs);
  font-weight: 500;
  letter-spacing: 0.09em;
  text-transform: uppercase;
  color: var(--rm-ink-muted);
}

.rm-figure {
  font-family: var(--rm-font-mono);
  font-variant-numeric: tabular-nums;
  font-weight: 600;
  letter-spacing: -0.02em;
  color: var(--rm-ink);
}

.rm-figure--xl {
  display: block;
  font-size: clamp(3.5rem, 9vw, 6.5rem);
  line-height: 0.9;
}

.rm-mono {
  font-family: var(--rm-font-mono);
  font-size: var(--rm-text-xs);
  font-variant-numeric: tabular-nums;
  color: var(--rm-ink-muted);
}

.rm-shot { margin: 0; }

.rm-shot img {
  width: 100%;
  height: auto;
  border: 1px solid var(--rm-rule);
  border-radius: var(--rm-radius-lg);
  background: var(--rm-surface-sunken);
}

.rm-shot figcaption {
  margin-top: var(--rm-space-2);
  font-family: var(--rm-font-mono);
  font-size: var(--rm-text-xs);
  color: var(--rm-ink-muted);
}

/* ==========================================================================
   1. Portada: dos columnas desiguales, alineado a la izquierda
   ========================================================================== */
.rm-hero {
  padding-block: var(--rm-space-8) var(--rm-space-10);
  border-bottom: 1px solid var(--rm-rule);
}

.rm-hero__grid { display: grid; gap: var(--rm-space-8); }

@media (min-width: 62em) {
  .rm-hero__grid {
    grid-template-columns: minmax(0, 1.08fr) minmax(0, 0.92fr);
    gap: var(--rm-space-9);
    align-items: center;
  }
}

.rm-hero h1 { margin-bottom: var(--rm-space-5); }

.rm-hero__sub {
  max-width: 46ch;
  margin-bottom: var(--rm-space-6);
  font-size: var(--rm-text-lg);
  color: var(--rm-ink-muted);
}

.rm-hero__actions {
  display: flex;
  flex-wrap: wrap;
  gap: var(--rm-space-3);
}

.rm-hero__note {
  max-width: 46ch;
  margin: var(--rm-space-7) 0 0;
  padding-top: var(--rm-space-5);
  border-top: 1px solid var(--rm-rule);
  font-size: var(--rm-text-sm);
  color: var(--rm-ink-muted);
}

.rm-hero__shots {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--rm-space-4);
  align-items: start;
}

/* Recorte cerrado a la cabecera de cada aplicación: aquí interesa que se lea
   la pantalla, no que se reconozca la silueta del teléfono. Abajo, en la
   sección de producto, van las mismas capturas enteras y en pequeño. */
.rm-hero__shots .rm-shot img {
  aspect-ratio: 4 / 5;
  object-fit: cover;
  object-position: top center;
}

.rm-hero__shots .rm-shot:nth-child(2) { margin-top: var(--rm-space-7); }

@media (min-width: 62em) {
  .rm-hero__shots { gap: var(--rm-space-5); }
  .rm-hero__shots .rm-shot:nth-child(2) { margin-top: var(--rm-space-9); }
}

/* ==========================================================================
   2. La obra: carrusel de tarjetas de producto, con cifras verificadas y
      estado real de publicación
   ========================================================================== */
.rm-work { padding-block: var(--rm-space-10); }

.rm-work__head {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--rm-space-4);
  padding-bottom: var(--rm-space-4);
  margin-bottom: var(--rm-space-7);
  border-bottom: 1px solid var(--rm-rule-strong);
}

.rm-work__head h2 { margin: 0 0 var(--rm-space-2); font-size: var(--rm-text-2xl); }
.rm-work__head p { margin: 0; }

/* Enlace «hacia dentro»: lleva a la página profunda de la sección. Mismo
   tratamiento en productos, servicios y presentación para que se lea como
   un único gesto repetido y no como tres botones distintos. */
.rm-work__more {
  display: inline-flex;
  align-items: center;
  gap: var(--rm-space-2);
  font-size: var(--rm-text-sm);
  font-weight: 550;
}

.rm-work__foot {
  margin: var(--rm-space-6) 0 0;
  font-size: var(--rm-text-sm);
  color: var(--rm-ink-muted);
}

/* --- Carrusel -----------------------------------------------------------
   Desplazamiento nativo con scroll-snap. Sin librería y sin autoplay: la
   pista es un contenedor con overflow, así que funciona igual con el guion
   desactivado. main.js sólo añade los controles y los indicadores. */
.rm-carousel { position: relative; }

.rm-carousel__track {
  display: flex;
  gap: var(--rm-space-5);
  overflow-x: auto;
  overscroll-behavior-x: contain;
  scroll-snap-type: x mandatory;
  scroll-behavior: smooth;
  scrollbar-width: thin;
  scrollbar-color: var(--rm-rule-strong) transparent;
  /* Aire para que el anillo de foco de la tarjeta (2px de trazo + 2px de
     separación) no lo recorte el propio contenedor de scroll; se compensa
     con el margen negativo.

     `scroll-padding` tiene que igualar al relleno: sin él la primera tarjeta
     se ancla en scrollLeft = 4 en vez de 0, y el botón de retroceder nunca
     llegaba a considerarse «al principio». */
  padding: 4px;
  margin: -4px;
  scroll-padding-inline: 4px;
}

@media (prefers-reduced-motion: reduce) {
  .rm-carousel__track { scroll-behavior: auto; }
}

/* El ancho deja siempre la tarjeta siguiente asomando: un carrusel que no
   enseña que hay más contenido esconde producto. */
.rm-carousel__slide {
  flex: 0 0 min(86%, 22rem);
  display: flex;
  flex-direction: column;
  scroll-snap-align: start;
  padding: var(--rm-space-5);
  background: var(--rm-surface);
  border: 1px solid var(--rm-rule);
  border-radius: var(--rm-radius-lg);
}

/* Los anchos no están elegidos a ojo. Mandan dos cosas:

   1. Que las capturas de dentro no bajen de los ~240px a los que la interfaz
      todavía se lee; con tarjetas más estrechas caían por debajo.
   2. Que todas las tarjetas sean alcanzables. Con tarjetas muy estrechas caben
      varias a la vez, el recorrido de scroll se queda corto y las posiciones
      finales no existen: sus indicadores no llegarían a activarse nunca. */
@media (min-width: 48em) {
  .rm-carousel__slide { flex-basis: 76%; }
}

@media (min-width: 68em) {
  .rm-carousel__slide { flex-basis: 58%; }
}

.rm-carousel__slide .rm-product__summary { font-size: var(--rm-text-sm); }

/* El enlace a la ficha se pega abajo: con tarjetas de altura desigual queda
   siempre en la misma línea y no bailando a media tarjeta. */
.rm-carousel__slide .rm-product__link { margin-top: auto; padding-top: var(--rm-space-2); }

.rm-carousel__controls {
  display: flex;
  align-items: center;
  gap: var(--rm-space-4);
  margin-top: var(--rm-space-5);
}

.rm-carousel__nav {
  display: grid;
  place-items: center;
  width: 44px;
  height: 44px;
  padding: 0;
  background: var(--rm-surface);
  border: 1px solid var(--rm-rule-strong);
  border-radius: var(--rm-radius-pill);
  font-size: var(--rm-text-lg);
  color: var(--rm-ink);
  cursor: pointer;
  transition: background-color var(--rm-duration-fast) var(--rm-ease),
              border-color var(--rm-duration-fast) var(--rm-ease);
}

.rm-carousel__nav:hover:not(:disabled) {
  background: var(--rm-surface-sunken);
  border-color: var(--rm-ink-subtle);
}

.rm-carousel__nav:disabled {
  color: var(--rm-ink-subtle);
  border-color: var(--rm-rule);
  cursor: default;
}

/* Una sola flecha en el sprite: la de retroceder es la misma girada. */
.rm-carousel__nav--prev .rm-icon { transform: rotate(180deg); }

.rm-carousel__dots { display: flex; align-items: center; gap: var(--rm-space-1); }

.rm-carousel__dot {
  display: grid;
  place-items: center;
  width: 32px;
  height: 32px;
  padding: 0;
  background: transparent;
  border: 0;
  border-radius: var(--rm-radius-pill);
  cursor: pointer;
}

.rm-carousel__dot::before {
  content: '';
  width: 8px;
  height: 8px;
  border: 1px solid var(--rm-ink-subtle);
  border-radius: 50%;
  transition: background-color var(--rm-duration-fast) var(--rm-ease),
              border-color var(--rm-duration-fast) var(--rm-ease);
}

.rm-carousel__dot[aria-current='true']::before {
  background: var(--rm-ink);
  border-color: var(--rm-ink);
}

/* Objetivo táctil de 44×44 sólo con puntero grueso, igual que el conmutador
   de tema: en escritorio el indicador se queda compacto. */
@media (pointer: coarse) {
  .rm-carousel__dot { width: 44px; height: 44px; }
}

.rm-product { --rm-product-accent: var(--rm-accent); }

/* Sector y etapa, uno a cada extremo de la primera línea de la tarjeta. */
.rm-product__head {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--rm-space-2) var(--rm-space-3);
  margin-bottom: var(--rm-space-3);
}

.rm-product__head .rm-eyebrow { margin: 0; }

/* `.rm-stage` (la pastilla de etapa) y `.rm-logo-plate` (la placa blanca del
   logotipo) están en components.css: las comparten esta tarjeta, el catálogo
   de /proyectos/ y la ficha de producto. Aquí sólo queda lo que es del
   carrusel. */

.rm-product__name {
  display: flex;
  align-items: center;
  gap: var(--rm-space-3);
  margin-bottom: var(--rm-space-3);
  font-size: var(--rm-text-xl);
}

/* La marca de color del producto es un dato de 6px, no un fondo.
   Decorativa: no transporta información y no necesita ratio de contraste. */
.rm-product__mark {
  flex: none;
  width: 6px;
  height: 1.4em;
  border-radius: 3px;
  background: var(--rm-product-accent);
}

.rm-product__summary { color: var(--rm-ink-muted); }

/* Cifras del producto: tabla pequeña de dos columnas. `max-content` en la
   primera hace que todas las filas compartan el ancho del valor más largo,
   así los números quedan alineados sin fijar una medida a ojo. */
.rm-product__figures {
  display: grid;
  grid-template-columns: max-content minmax(0, 1fr);
  gap: var(--rm-space-3) var(--rm-space-5);
  align-items: baseline;
  margin: var(--rm-space-5) 0;
  padding-block: var(--rm-space-5);
  border-block: 1px solid var(--rm-rule);
}

.rm-product__figures dt { font-size: var(--rm-text-lg); }

.rm-product__figures dd {
  margin: 0;
  font-size: var(--rm-text-sm);
  color: var(--rm-ink-muted);
}

/* `.rm-product__key` y `.rm-product__chips` también están en components.css:
   los comparten esta tarjeta, el catálogo y la ficha de producto. */

.rm-product__link {
  display: inline-flex;
  align-items: center;
  gap: var(--rm-space-2);
  font-size: var(--rm-text-sm);
  font-weight: 550;
}

/* Dos capturas por tarjeta, no tres: a media tarjeta cada una se queda en
   240-300px, por encima de la medida a la que se venían viendo. Con tres
   bajaban de 200px y la captura dejaba de demostrar nada.

   En móvil la tarjeta es estrecha y ni siquiera caben dos: se enseña sólo la
   primera, a ancho completo. La segunda vuelve en cuanto hay sitio para que
   las dos conserven esa medida. El resto de pantallas, en la ficha. */
.rm-product__shots {
  display: grid;
  gap: var(--rm-space-3);
  grid-template-columns: minmax(0, 1fr);
  margin-bottom: var(--rm-space-2);
}

.rm-product__shots .rm-shot:nth-child(n + 2) { display: none; }

@media (min-width: 48em) {
  .rm-product__shots { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .rm-product__shots .rm-shot:nth-child(n + 2) { display: block; }
}

/* Recorte a la cabecera de la pantalla, como en el hero: dentro de la tarjeta
   interesa que se lea la interfaz, no que se reconozca la silueta del
   teléfono. La captura entera medía 500px de alto y era ella sola la que
   estiraba la tarjeta, que es justo lo que el carrusel viene a corregir. */
.rm-product__shots img {
  aspect-ratio: 4 / 5;
  object-fit: cover;
  object-position: top center;
}

/* Lo que hace el producto, en las tarjetas que no tienen captura que enseñar.
   Ocupa el hueco de la imagen y hereda su ritmo: mismo filete arriba y abajo
   que las cifras, para que las cinco tarjetas del carrusel se lean como
   variaciones de una sola y no como dos maquetaciones distintas. */
.rm-product__highlights {
  display: grid;
  gap: var(--rm-space-3);
  margin: var(--rm-space-5) 0;
  padding: var(--rm-space-5) 0;
  border-block: 1px solid var(--rm-rule);
  list-style: none;
}

.rm-product__highlights li {
  display: grid;
  grid-template-columns: max-content minmax(0, 1fr);
  gap: var(--rm-space-3);
  align-items: start;
  font-size: var(--rm-text-sm);
  color: var(--rm-ink-muted);
}

/* Alineado con la primera línea de texto, no con el centro del bloque. El
   color es --rm-accent y no el de la marca del producto: ese sí cambia con el
   tema y ya está comprobado en los dos, mientras que los colores de marca son
   fijos y en oscuro alguno se apagaría. */
.rm-product__tick {
  margin-top: 0.2em;
  color: var(--rm-accent);
}

/* MeetingVoice es software de escritorio: su captura es apaisada y ocupa el
   ancho entero de la tarjeta. Partida en dos columnas no se leería. */
.rm-product--meetingvoice .rm-product__shots { grid-template-columns: minmax(0, 1fr); }

.rm-product--meetingvoice .rm-product__shots img {
  aspect-ratio: 16 / 9;
  object-fit: cover;
  object-position: left top;
}

/* ==========================================================================
   2b. Paquete para asesorías: caja cerrada, sin imágenes. FactuSimple ya se
       describe en su tarjeta del carrusel, así que aquí sólo queda el
       argumento del paquete y la tabla de precios.
   ========================================================================== */
.rm-suite { padding-bottom: var(--rm-space-10); }

.rm-suite__box {
  padding: var(--rm-space-6);
  background: var(--rm-surface);
  border: 1px solid var(--rm-rule-strong);
  border-radius: var(--rm-radius-lg);
}

@media (min-width: 56em) {
  .rm-suite__box { padding: var(--rm-space-8) var(--rm-space-9); }
}

.rm-suite__head { max-width: 56ch; }
.rm-suite__title { margin: 0 0 var(--rm-space-3); font-size: var(--rm-text-2xl); }
.rm-suite__lead { margin: 0; color: var(--rm-ink-muted); }

/* Rótulo del bloque y etapa comparten línea, igual que en la tarjeta de
   producto: la etapa se lee siempre en el mismo sitio de la pieza. */
.rm-suite__eyebrow-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--rm-space-3);
}

.rm-suite__prices { width: 100%; border-collapse: collapse; }

.rm-suite__prices caption {
  caption-side: top;
  padding-top: var(--rm-space-7);
  padding-bottom: var(--rm-space-3);
  font-family: var(--rm-font-mono);
  font-size: var(--rm-text-xs);
  letter-spacing: 0.09em;
  text-transform: uppercase;
  color: var(--rm-ink-muted);
  text-align: left;
}

.rm-suite__prices th,
.rm-suite__prices td {
  padding-block: var(--rm-space-4);
  border-top: 1px solid var(--rm-rule);
  text-align: left;
  vertical-align: baseline;
}

.rm-suite__prices th { font-weight: 550; }

.rm-suite__prices td {
  width: 1%;
  white-space: nowrap;
  text-align: right;
}

.rm-suite__prices tr:last-child th,
.rm-suite__prices tr:last-child td { border-bottom: 1px solid var(--rm-rule); }

.rm-suite__prices .rm-figure { font-size: var(--rm-text-xl); }

.rm-suite__period {
  display: block;
  font-family: var(--rm-font-mono);
  font-size: var(--rm-text-xs);
  color: var(--rm-ink-muted);
}

/* ==========================================================================
   3. Despliegue: banda hundida, cifra grande y lista desplegable
   ========================================================================== */
.rm-coverage {
  padding-block: var(--rm-space-10);
  background: var(--rm-surface-sunken);
  border-block: 1px solid var(--rm-rule);
}

.rm-coverage__grid { display: grid; gap: var(--rm-space-8); }

@media (min-width: 56em) {
  .rm-coverage__grid {
    grid-template-columns: minmax(0, 0.8fr) minmax(0, 1fr);
    gap: var(--rm-space-9);
    align-items: start;
  }
}

.rm-coverage h2 { margin: var(--rm-space-4) 0 var(--rm-space-4); font-size: var(--rm-text-2xl); }
.rm-coverage__lead { color: var(--rm-ink-muted); }

.rm-coverage__table {
  width: 100%;
  border-collapse: collapse;
  font-size: var(--rm-text-sm);
}

.rm-coverage__table caption {
  /* Bootstrap manda el pie de tabla abajo; aquí el rótulo encabeza. */
  caption-side: top;
  padding-top: 0;
  padding-bottom: var(--rm-space-3);
  font-family: var(--rm-font-mono);
  font-size: var(--rm-text-xs);
  letter-spacing: 0.09em;
  text-transform: uppercase;
  color: var(--rm-ink-muted);
  text-align: left;
}

.rm-coverage__table th,
.rm-coverage__table td {
  padding: var(--rm-space-3) 0;
  border-bottom: 1px solid var(--rm-rule);
  text-align: left;
  font-weight: 400;
}

.rm-coverage__table td {
  width: 1%;
  white-space: nowrap;
  text-align: right;
  font-family: var(--rm-font-mono);
  font-variant-numeric: tabular-nums;
  color: var(--rm-ink);
}

.rm-muni { margin-top: var(--rm-space-6); }

.rm-muni__toggle {
  display: inline-flex;
  align-items: center;
  gap: var(--rm-space-2);
  min-height: 44px; /* objetivo táctil */
  padding: var(--rm-space-2) var(--rm-space-4);
  border: 1px solid var(--rm-rule-strong);
  border-radius: var(--rm-radius-pill);
  font-family: var(--rm-font-mono);
  font-size: var(--rm-text-xs);
  color: var(--rm-ink);
  cursor: pointer;
  list-style: none;
  width: fit-content;
}

.rm-muni__toggle::-webkit-details-marker { display: none; }
.rm-muni__toggle:hover { border-color: var(--rm-ink-subtle); background: var(--rm-surface); }

.rm-muni[open] .rm-muni__more,
.rm-muni__less { display: none; }
.rm-muni[open] .rm-muni__less { display: inline; }

.rm-muni__panel { margin-top: var(--rm-space-6); }

.rm-muni__region {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--rm-space-3);
  margin: 0 0 var(--rm-space-3);
  padding-top: var(--rm-space-4);
  border-top: 1px solid var(--rm-rule);
  font-family: var(--rm-font-body);
  font-size: var(--rm-text-sm);
  font-weight: 600;
  letter-spacing: 0;
}

.rm-muni__list {
  margin: 0 0 var(--rm-space-5);
  padding: 0;
  list-style: none;
  columns: 11rem;
  column-gap: var(--rm-space-5);
  font-size: var(--rm-text-xs);
  line-height: 1.75;
  color: var(--rm-ink-muted);
}

.rm-muni__list li { break-inside: avoid; }

/* ==========================================================================
   3b. Cumplimiento normativo: rejilla de fichas cortas sobre papel, justo
       después de la banda hundida de cobertura. Ritmo propio y deliberado:
       ni zigzag de capturas, ni cifra gigante, ni numeración de proceso, ni
       filas de índice a todo el ancho. Cada ficha se encabeza con el código
       de la norma bajo un filete, como un sello de expediente.
   ========================================================================== */
.rm-compliance { padding-block: var(--rm-space-10); }

.rm-compliance__head { max-width: 60ch; margin-bottom: var(--rm-space-7); }
.rm-compliance__head h2 { margin: 0 0 var(--rm-space-4); font-size: var(--rm-text-2xl); }
.rm-compliance__lead { margin: 0; color: var(--rm-ink-muted); }

.rm-compliance__grid {
  display: grid;
  gap: var(--rm-space-4);
  margin: 0;
  padding: 0;
  list-style: none;
}

@media (min-width: 44em) {
  .rm-compliance__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .rm-compliance__item:last-child { grid-column: 1 / -1; }
}

/* Seis columnas para poder componer 3 + 2 con cinco fichas: la fila corta se
   reparte el ancho en lugar de dejar un hueco suelto al final. */
@media (min-width: 62em) {
  .rm-compliance__grid { grid-template-columns: repeat(6, minmax(0, 1fr)); }
  .rm-compliance__item { grid-column: span 2; }
  .rm-compliance__item:nth-child(n + 4) { grid-column: span 3; }
}

.rm-compliance__item {
  display: grid;
  align-content: start;
  gap: var(--rm-space-3);
  padding: var(--rm-space-5);
  background: var(--rm-surface);
  border: 1px solid var(--rm-rule);
  border-radius: var(--rm-radius-md);
}

.rm-compliance__code {
  margin: 0;
  padding-bottom: var(--rm-space-3);
  border-bottom: 1px solid var(--rm-rule);
  font-family: var(--rm-font-mono);
  font-size: var(--rm-text-xs);
  letter-spacing: 0.06em;
  color: var(--rm-ink);
}

.rm-compliance__title {
  display: flex;
  gap: var(--rm-space-3);
  margin: 0;
  font-family: var(--rm-font-body);
  font-size: var(--rm-text-base);
  font-weight: 600;
  letter-spacing: 0;
}

.rm-compliance__tick { margin-top: 0.28em; color: var(--rm-accent); }

.rm-compliance__desc {
  margin: 0;
  font-size: var(--rm-text-sm);
  color: var(--rm-ink-muted);
}

.rm-compliance__note {
  display: flex;
  gap: var(--rm-space-3);
  max-width: 82ch;
  margin: var(--rm-space-7) 0 0;
  padding-top: var(--rm-space-5);
  border-top: 1px solid var(--rm-rule-strong);
  font-size: var(--rm-text-sm);
  color: var(--rm-ink-muted);
}

.rm-compliance__note-icon { margin-top: 0.28em; color: var(--rm-ink-subtle); }

/* ==========================================================================
   4. Qué hacemos: índice tipográfico, sin iconos ni tarjetas
   ========================================================================== */
.rm-services { padding-block: var(--rm-space-10); }

.rm-services__head {
  display: grid;
  gap: var(--rm-space-4);
  padding-bottom: var(--rm-space-5);
  margin-bottom: var(--rm-space-6);
  border-bottom: 1px solid var(--rm-rule-strong);
}

@media (min-width: 56em) {
  .rm-services__head { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); align-items: end; }
}

.rm-services__head h2 { margin: 0; font-size: var(--rm-text-2xl); }
.rm-services__head p { margin: 0; color: var(--rm-ink-muted); }

.rm-index { margin: 0; padding: 0; list-style: none; counter-reset: rm-index; }

.rm-index__row {
  display: grid;
  gap: var(--rm-space-2);
  padding-block: var(--rm-space-5);
  border-bottom: 1px solid var(--rm-rule);
}

@media (min-width: 48em) {
  .rm-index__row {
    grid-template-columns: 3.5rem minmax(0, 15rem) minmax(0, 1fr);
    gap: var(--rm-space-5);
    align-items: baseline;
  }
}

.rm-index__num {
  font-family: var(--rm-font-mono);
  font-variant-numeric: tabular-nums;
  font-size: var(--rm-text-xs);
  color: var(--rm-ink-subtle);
}

.rm-index__title {
  margin: 0;
  font-family: var(--rm-font-body);
  font-size: var(--rm-text-base);
  font-weight: 600;
  letter-spacing: 0;
}

.rm-index__row p { margin: 0; max-width: 62ch; color: var(--rm-ink-muted); font-size: var(--rm-text-sm); }

/* Filas de etiquetas: sectores y tecnologías */
.rm-labels {
  display: grid;
  gap: var(--rm-space-3);
  padding-block: var(--rm-space-5);
  border-bottom: 1px solid var(--rm-rule);
}

@media (min-width: 48em) {
  .rm-labels { grid-template-columns: 3.5rem minmax(0, 1fr); gap: var(--rm-space-5); align-items: baseline; }
}

.rm-labels__key {
  margin: 0;
  font-family: var(--rm-font-mono);
  font-size: var(--rm-text-xs);
  letter-spacing: 0.09em;
  text-transform: uppercase;
  color: var(--rm-ink-subtle);
}

.rm-labels__list {
  display: flex;
  flex-wrap: wrap;
  gap: var(--rm-space-2) var(--rm-space-3);
  margin: 0;
  padding: 0;
  list-style: none;
}

.rm-labels__list li {
  padding: 2px var(--rm-space-3);
  border: 1px solid var(--rm-rule);
  border-radius: var(--rm-radius-sm);
  font-size: var(--rm-text-xs);
  color: var(--rm-ink-muted);
}

.rm-services__foot { margin: var(--rm-space-6) 0 0; }

/* ==========================================================================
   5. Cómo trabajamos: banda horizontal de cuatro columnas
   ========================================================================== */
.rm-steps-band {
  padding-block: var(--rm-space-9);
  border-top: 1px solid var(--rm-rule-strong);
}

.rm-steps-band__head {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: var(--rm-space-4);
  margin-bottom: var(--rm-space-7);
}

.rm-steps-band__head h2 { margin: 0; font-size: var(--rm-text-xl); }
.rm-steps-band__head p { margin: 0; color: var(--rm-ink-muted); font-size: var(--rm-text-sm); }

.rm-steps { display: grid; gap: 0; }

.rm-step {
  padding-block: var(--rm-space-5);
  border-top: 1px solid var(--rm-rule);
}

.rm-step__num {
  display: block;
  margin-bottom: var(--rm-space-2);
  font-family: var(--rm-font-mono);
  font-variant-numeric: tabular-nums;
  font-size: var(--rm-text-xs);
  color: var(--rm-ink-subtle);
}

.rm-step h3 {
  margin: 0 0 var(--rm-space-2);
  font-family: var(--rm-font-body);
  font-size: var(--rm-text-base);
  font-weight: 600;
  letter-spacing: 0;
}

.rm-step p { margin: 0; font-size: var(--rm-text-sm); color: var(--rm-ink-muted); }

@media (min-width: 54em) {
  .rm-steps { grid-template-columns: repeat(4, minmax(0, 1fr)); }

  .rm-step {
    padding-block: 0;
    padding-inline: var(--rm-space-5);
    border-top: 0;
    border-left: 1px solid var(--rm-rule);
  }

  .rm-step:first-child { padding-left: 0; border-left: 0; }
}

/* ==========================================================================
   5b. Quiénes somos: la única pieza con párrafo de arranque en la tipografía
       de titulares y el cuerpo en dos entradas de glosario bajo filete. Sin
       tarjetas, sin capturas, sin cifras y sin numeración: ninguno de los
       ritmos que ya están usados más arriba.
   ========================================================================== */
.rm-about {
  padding-block: var(--rm-space-10);
  border-top: 1px solid var(--rm-rule-strong);
}

.rm-about__grid { display: grid; gap: var(--rm-space-7); }

@media (min-width: 56em) {
  .rm-about__grid {
    grid-template-columns: minmax(0, 0.6fr) minmax(0, 1fr);
    gap: var(--rm-space-9);
    align-items: start;
  }
}

.rm-about h2 { margin: 0 0 var(--rm-space-5); font-size: var(--rm-text-2xl); }

.rm-about__lead {
  max-width: 48ch;
  margin: 0 0 var(--rm-space-7);
  font-family: var(--rm-font-display);
  font-size: var(--rm-text-xl);
  line-height: var(--rm-leading-snug);
  font-variation-settings: 'SOFT' 20, 'WONK' 0, 'opsz' 32;
  color: var(--rm-ink);
}

.rm-about__creed { display: grid; gap: var(--rm-space-3); margin: 0; }

.rm-about__creed dt {
  padding-top: var(--rm-space-5);
  border-top: 1px solid var(--rm-rule);
}

.rm-about__creed dt:first-child { padding-top: 0; border-top: 0; }

.rm-about__creed dd {
  max-width: 62ch;
  margin: 0;
  font-size: var(--rm-text-sm);
  color: var(--rm-ink-muted);
}

/* ==========================================================================
   6. Portal de privacidad: una sola fila, discreta
   ========================================================================== */
.rm-portal { padding-block: var(--rm-space-8); border-top: 1px solid var(--rm-rule); }

.rm-portal__row {
  display: grid;
  gap: var(--rm-space-5);
  align-items: center;
}

@media (min-width: 48em) {
  .rm-portal__row { grid-template-columns: minmax(0, 1fr) auto; gap: var(--rm-space-8); }
}

.rm-portal__title {
  margin: 0 0 var(--rm-space-2);
  font-size: var(--rm-text-lg);
  font-variation-settings: 'SOFT' 20, 'WONK' 0, 'opsz' 24;
}

.rm-portal p { margin: 0; max-width: 68ch; font-size: var(--rm-text-sm); color: var(--rm-ink-muted); }

/* ==========================================================================
   7. Cierre: sin marco, alineado a la izquierda
   ========================================================================== */
.rm-close {
  padding-block: var(--rm-space-10);
  border-top: 1px solid var(--rm-rule-strong);
}

.rm-close h2 { margin: 0 0 var(--rm-space-4); max-width: 20ch; }

.rm-close__lead {
  max-width: 52ch;
  margin-bottom: var(--rm-space-6);
  font-size: var(--rm-text-lg);
  color: var(--rm-ink-muted);
}

.rm-close__actions { display: flex; flex-wrap: wrap; gap: var(--rm-space-3); }

/* El acceso a /legal/ acompaña al cierre sin competir con los dos botones:
   es la puerta a la documentación, no una tercera vía de contacto. */
.rm-close__legal {
  display: flex;
  gap: var(--rm-space-3);
  max-width: 68ch;
  margin: var(--rm-space-6) 0 0;
  font-size: var(--rm-text-sm);
  color: var(--rm-ink-muted);
}

.rm-close__legal-icon { margin-top: 0.28em; color: var(--rm-ink-subtle); }

.rm-close__meta {
  display: flex;
  flex-wrap: wrap;
  gap: var(--rm-space-2) var(--rm-space-5);
  margin: var(--rm-space-7) 0 0;
  padding-top: var(--rm-space-5);
  border-top: 1px solid var(--rm-rule);
  font-family: var(--rm-font-mono);
  font-size: var(--rm-text-xs);
  color: var(--rm-ink-muted);
}
