/*
 * dotoo — LA TARJETA: un solo chasis para las ocho listas de la app (29-ago-2026).
 *
 * Decisión de Guillem del 29-ago-2026 (`docs/DECISIONS.md`): un reto en marcha, un reto abierto, un
 * reto en el perfil de alguien, una lista de to-do's (esa se fue con la mini-app, retirada), un
 * plan, un bote, una rota y una porra (todas se fueron con sus mini-apps) dejan
 * de tener cada uno su markup y su vestido para pasar a ser el MISMO componente
 * (`app/views/comun/_tarjeta.html.erb`) con distinto contenido. Opción B del mockup: a la izquierda
 * un SELLO de 44 que dice de qué entidad se trata —la categoría del reto, el dado de la fecha de un
 * plan, el glifo de la mini-app en el resto— y a su derecha tres filas que se pintan solo si tienen
 * algo que decir: cabecera, meta y pie.
 *
 * El chasis original toma colores y medidas de los tokens de `application.css` § 1 y
 * de las recetas que ya vivían repartidas por las ocho cards. El contorno va SIEMPRE por
 * `--contorno`/`--contorno-fino` y nunca en píxeles literales, porque el grosor del chasis se está
 * ajustando en otra rama y esta hoja tiene que heredarlo sin tocarse.
 * La variante de retos (§ 8), aprobada el 10-sep-2026, integra el sello en un lateral suave.
 *
 * LO QUE SE REUSA TAL CUAL y por eso no se repite aquí: `.caras`/`.cara` (§ 26) —ya no en la ficha
 * de un reto en marcha—, `.barra` (§ 24),
 * `.cuenta` (§ 20) y el cajón del gesto de tirar
 * (§ 48). La tarjeta solo les cambia lo que su sitio nuevo exige (la cara pasa de 21 a 23, la barra
 * de 14 a 11).
 *
 * `.chip-arranque`, `.tipo` y `.pills`/`.pills i` estaban en esa lista y SE FUERON DEL REPO el
 * 7-sep-2026, con el rediseño de la ficha de un reto abierto (§ 3 y § 6): eran su chip coral, su
 * badge de familia y sus casillas de plazas, y esa ficha era el único markup que las escribía.
 *
 * CSS MUERTO QUE SE QUEDA EN PIE. La migración no borra nada de `application.css`: otra sesión lo
 * tiene abierto. Estos selectores se quedaron sin markup el 29-ago-2026 y hay que RETIRARLOS de
 * `application.css` cuando esa sesión cierre su barrido (TODO en `tasks/app/TODO.md`). Los de
 * `porras.css` ya no figuran: la hoja entera se fue con la mini-app el 8-sep-2026.
 *
 *   application.css § 20/26  .reto.indice, .lista:not(.indice) > .reto.indice, .indice .r-tit,
 *                            .indice .r-meta, .indice .r-plazas, .chip-dia, .r-quien,
 *                            .r-quien .mas, .r-prog, .r-prog .barra, .a-txt, .a-meta
 *                            (`.card-ir` ya no figura: su único escritor era la mini-app `eventos`
 *                            y salió de `application.css` con ella el 7-sep-2026.)
 *   application.css § 32     .r-tit .cat-mini, .r-tit .cat-mini svg, .r-tit .cat-mini + .r-dias
 *   (la § 39 de To-do's ya no figura: la mini-app se retiró y su sección entera salió de
 *   `application.css`, con estos selectores dentro.)
 *   (la § 41 del Bote ya no figura: la mini-app se retiró el 8-sep-2026 y de su sección solo
 *   quedo en pie `.fab`, que nunca fue suya.)
 *   (la § 42 del Roster ya no figura: la mini-app se retiró el 8-sep-2026 y su sección entera salió
 *   de `application.css`, con esos selectores dentro.)
 *   (la § 47 de Eventos ya no figura: la mini-app se retiró el 7-sep-2026 y su sección entera salió
 *   de `application.css`, con `.de-plan` dentro.)
 *
 * SEGUNDA TANDA, MISMO DÍA: el JOURNAL y el índice del PLANNER, que se habían quedado fuera de la
 * migración de las ocho. El planner no añade nada al inventario —sus dos `<li>` usaban la card
 * vieja de la § 20/26, ya listada arriba—, pero el journal tenía fila propia y se queda sin markup:
 *
 *   application.css § 38     .antes, .antes-fila, .antes li:last-child .antes-fila,
 *                            .antes-fila:active, .antes-dia, .indice .antes-dia, .antes-txt,
 *                            .antes-chevron
 *
 * OJO AL RETIRARLAS: los comentarios de la § 41.e (`.gasto`) y de los defaults de un gasto citan
 * `.antes-fila` y `.antes-chevron` como LINAJE —"es `.antes-fila` con una tercera columna"—, pero
 * esas dos cards tienen sus propias reglas y no heredan ni un selector. Se borra el CSS; los
 * comentarios que lo nombran hay que reescribirlos, no arrastrarlos.
 *
 * LO QUE ESTA HOJA PERDIÓ CON LA RETIRADA DE TO-DO'S (2-sep-2026, D7): tres reglas cuyo único
 * escritor era la mini-app y que sin ella no las pinta nadie — `.tarjeta[data-fallo]` (el relleno
 * de aviso que marcaba `todos_controller.js` al fallar el renombrado de una lista),
 * `.t-dato.numero` (el dato de la derecha leído como cifra, que solo pasaba la ficha de una lista
 * vía el local `dato_clase`) y `.t-ico`/`.t-ico svg` (el anillo de "lista compartida"). El local
 * `dato_clase` sigue en `comun/_tarjeta.html.erb` como punto de extensión; el día que alguien lo
 * use tendrá que traerse su propia regla.
 *
 * `.reto`/`.r-tit`/`.r-dias`/`.r-meta` a secas NO entran en esa lista: siguen vivos en el listado
 * público de cohortes y en las fogatas.
 */

/* ---------- 1. El chasis ---------- */
/* 14/16/15/14 de relleno, radio 20, contorno --contorno y la sombra dura de siempre. El relleno
   izquierdo es 2px menor que el derecho porque el sello ya trae su propio contorno y, con los 16
   de aquel lado, la caja se leía descentrada.
   `--crema` y no `#fff`: es el token de superficie blanca del set (§ 1), y así esta hoja no escribe
   ni un color literal. */
.tarjeta{position:relative;display:flex;align-items:center;gap:12px;margin-bottom:12px;
  padding:14px 16px 15px 14px;background:var(--crema);color:var(--tinta);
  border:var(--contorno) solid var(--tinta);border-radius:20px;box-shadow:0 4px 0 var(--som);
  font-family:var(--f);list-style:none}
/* 12px entre tarjetas. Donde la tarjeta va suelta (la raíz, un perfil, la invitación) lo pone su
   propio margen; dentro de un `.lista` —que ya reparte 8 de gap (§ 20)— el
   margen se apaga y es el gap el que sube a 12, para no sumar los dos. */
.lista:has(> .tarjeta),.lista:has(> li > .tarjeta){gap:12px}
.lista > .tarjeta,.lista > li > .tarjeta{margin-bottom:0}
/* ---------- 2. La puerta ---------- */
/* UN `<a>` VACÍO ESTIRADO POR DEBAJO, el apilado que ya repetían `.card-ir` (retirada el
   7-sep-2026 con Eventos), `.ficha-todos-ir`, y `.bote-card-ir` y `.roster-card-ir` (retiradas el
   8-sep-2026 con sus mini-apps), escrito una sola vez y sin nombre de
   mini-app: dentro de una tarjeta puede haber un `<button>` (el borrado) o un `<input>` (el nombre
   editable de una lista), y ninguno de los dos cabe dentro de un `<a>`. El radio es el de la card
   menos su contorno. Sin `href` la tarjeta no lleva enlace y no hay nada que apilar.
   El hundido cuelga del ENLACE y no de la tarjeta —tocar el formulario no finge una navegación— y
   se apaga mientras se tira de la card (§ 48), que es cuando el enlace está `:active` sin que nadie
   lo haya pulsado. */
.tarjeta-ir{position:absolute;inset:0;z-index:0;border-radius:17px}
.tarjeta:has(.tarjeta-ir:active):not([data-tirar-arrastrando]){transform:translateY(2px);
  box-shadow:0 2px 0 var(--som)}

/* ---------- 3. El sello ---------- */
/* La caja blanca de 44 con el dibujo de la entidad. Es la misma tile que el launcher de mini-apps
   (§ 36) a otra medida: contorno fino, radio 14 y el glifo dentro. `non-scaling-stroke` mantiene el
   trazo en 1,5 aunque el `viewBox` de 32 baje a 30 (decisión del 28-ago-2026: una sola escala de
   trazo en todo el chasis). */
.t-sello{flex:0 0 auto;width:44px;height:44px;display:grid;place-content:center;
  border:var(--contorno-fino) solid var(--tinta);border-radius:14px;background:var(--crema);
  text-align:center;line-height:1}
.t-sello svg{width:30px;height:30px;display:block;fill:none;stroke:var(--tinta);stroke-width:1.5;
  stroke-linecap:round;stroke-linejoin:round}
.t-sello svg *{vector-effect:non-scaling-stroke}
/* El reto lleva su CATEGORÍA, sobre el lavanda claro de los rótulos: el mismo relleno que tenía el
   disco `.cat-mini` que este sello sustituye. El icono va a 22 porque su `viewBox` es de 24 y no de
   32, así que a 30 se saldría de la caja. SIN CONTORNO (7-sep-2026, decisión de Guillem: «me gusta
   el system, sin borders»): el relleno lavanda ya recorta la caja, igual que el vainilla recorta el
   badge de recurrencia. */
.t-sello.categoria{background:var(--lavanda-cl);border:0}
.t-sello.categoria svg{width:22px;height:22px}
/* El indicador de recurrencia comparte columna con la categoría para no añadir filas al cuerpo.
   Sin indicador, la columna conserva los 44px del sello y su alineación superior. */
.t-sello-col{flex:0 0 auto;align-self:flex-start;display:flex;flex-direction:column;
  align-items:center;gap:5px}
.t-recurrente{display:flex;padding:2px 5px;border-radius:6px;background:var(--vainilla);
  color:var(--tinta)}
.t-recurrente svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.5;
  stroke-linecap:round;stroke-linejoin:round}
.t-recurrente path{vector-effect:non-scaling-stroke}
/* La FECHA como sello: día arriba, mes abreviado debajo, sobre el vainilla claro. Lo estrenó el
   `.dado` de la retirada § 47 de Eventos, metido en la caja del sello con su mismo `<time
   datetime>` y su mismo apagado; hoy lo escriben el dado de un plan y la ficha de un reto abierto. */
.t-sello.dado{background:var(--vainilla-cl)}
.t-sello.dado b{font-size:18px;font-weight:var(--peso-fuerte);letter-spacing:-.02em}
.t-sello.dado small{display:block;margin-top:3px;font-size:8.5px;font-weight:var(--peso-fuerte);
  letter-spacing:.12em;color:var(--tinta2)}
.t-sello.dado[data-estado="pasado"],
.t-sello.dado[data-estado="pasada"],
.t-sello.dado[data-estado="cancelado"]{background:var(--pista);color:var(--tinta2)}
/* EL RETO QUE TODAVÍA NO HA ARRANCADO lleva ese mismo dado en AMARILLO desde el 16-sep-2026
   (decisión de Guillem, `decisions/retos.md`): `--vainilla`, donde `--tinta` da 6,99:1. Hasta
   entonces fue `--coral`, y lo que sigue es el razonamiento de aquel dado (7-sep-2026, propuesta B):
   coral es el rol fijo del DÍA DE ARRANQUE en todo el set (`UI/README.md` § 1), así que el sello de
   esa ficha no estrena color, hereda el que ya decía esto en el lobby.
   El mes baja a `--tinta` y no se queda en `--tinta2`: sobre `--coral` aquel da 3,76:1 y suspende,
   y `--tinta` da 5,46:1. Sobre el `--vainilla-cl` del plan el reparto original sigue en pie.
   `empieza` y no `arranque`, que es como se llamaba en el mockup: `.arranque` ya es el bloque de la
   fecha del lobby (`application.css` § 22) y lleva `margin:var(--aire-bloques) 0`, que aqui estiraba
   la columna del sello 36px y dejaba la invitacion sin caber en una pantalla.
   Tampoco lleva contorno (misma decisión del 7-sep que el sello de categoría): el coral recorta
   solo la caja. El dado de un plan conserva el suyo. */
.t-sello.dado.empieza{background:var(--vainilla);border:0}
.t-sello.dado.empieza small{color:var(--tinta)}
/* Y LA CATEGORÍA BAJA A BADGE, porque el sello lo ocupa la fecha. Es el `.t-recurrente` de arriba
   con el lavanda claro de los rótulos —el mismo relleno que lleva el sello de 44—. Nació con
   contorno para separarse del de recurrencia en la misma fila; el 7-sep-2026 Guillem lo quitó
   («me gusta el system, sin borders»): los dos rellenos, lavanda y vainilla, ya los distinguen. */
.t-categoria-mini{display:flex;padding:2px 5px;border-radius:6px;background:var(--lavanda-cl);
  color:var(--tinta)}
.t-categoria-mini svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.5;
  stroke-linecap:round;stroke-linejoin:round}
.t-categoria-mini svg *{vector-effect:non-scaling-stroke}
/* LOS DOS BADGES VAN EN LA MISMA FILA bajo el dado (matiz de Guillem del 7-sep-2026: «si hay
   recurrente, que el icono esté en la misma row que categoría»), y cuando salen juntos se les fija
   el ancho en 20: 20 + 4 + 20 = 44, el ancho exacto del dado, así que la columna del sello no
   ensancha la tarjeta. Ancho fijo y no el relleno lateral de 5 porque con él cada badge mide 24 y
   los dos juntos se iban a 52. Solo con la categoría no hay nada que cuadrar: el dado ya fija los
   44 de la columna y el badge se queda en su relleno. */
.t-sello-fila{display:flex;gap:4px}
.t-sello-fila:has(> :nth-child(2)) > *{width:20px;padding:2px 0;justify-content:center}

/* ---------- 4. La cabecera: título y UN dato ---------- */
.t-cuerpo{flex:1 1 auto;min-width:0;display:flex;flex-direction:column}
.t-tit{display:flex;align-items:center;gap:8px;min-width:0}
.t-tit b{min-width:0;font-size:15px;font-weight:var(--peso-fuerte);line-height:1.15;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* Un título que es el dato ENTERO de la fila envuelve en vez de recortarse: lo estrenó la
   pregunta de una porra y hoy lo escribe el nombre de un reto en marcha. */
.t-tit b.larga{white-space:normal;overflow:visible;text-overflow:clip;overflow-wrap:anywhere}
/* EL DATO DE LA DERECHA TIENE DOS VOCES Y SON EXCLUYENTES. Chip coral = TIEMPO (el día del reto en
   marcha), que es el rol de --coral en todo el set. Texto gris = cuenta o estado ("14 días",
   "Semanal", "Te deben 12,50 €", "Ya pasó"): un dato que no apremia no gasta cromo. */
.t-chip{margin-left:auto;flex:0 0 auto;padding:2px 9px;background:var(--coral);
  border:var(--contorno-fino) solid var(--tinta);border-radius:999px;box-shadow:0 2.5px 0 var(--coral-s);
  font-size:10px;font-weight:var(--peso-fuerte);line-height:1.5;white-space:nowrap}
.t-dato{margin-left:auto;flex:0 0 auto;font-size:10px;font-weight:var(--peso-fuerte);
  color:var(--tinta2);white-space:nowrap}
/* LA SEÑAL DE VIDA es el `dato` de la ficha de un reto en marcha (5-sep-2026, decisión de Guillem):
   las dos cifras del grupo suben a la fila del título, al hueco que dejó el chip del día esa misma
   mañana, y la tarjeta se ahorra la fila de pie en la que vivían. Llega por `dato_clase`, así que el
   elemento lleva LAS DOS clases: `.t-dato` lo coloca en la fila y `.t-vida` lo viste. Estas reglas
   van DESPUÉS de `.t-dato` a propósito —misma especificidad, gana la última—, y por eso repiten
   `font-weight` en vez de heredar el `--peso-fuerte` de aquella.
   El número manda: 13px/`--peso-titulo` en `--tinta` frente a la etiqueta de 10px en `--tinta2`, la
   misma jerarquía que ya usa el sello del dado (§ 3). `tabular-nums` para que un "2/6" y un "12/16"
   ocupen lo mismo y las fichas de la lista no bailen; `align-items:baseline` para que el número
   grande y su etiqueta pequeña se apoyen en la misma línea. `flex:0 0 auto` para que no encoja: va
   en `nowrap` y prefiere caer al renglón de abajo (§ 7) antes que salirse de la tarjeta. */
.t-vida{display:inline-flex;flex:0 0 auto;align-items:baseline;gap:11px;white-space:nowrap;
  font-size:10px;font-weight:400;color:var(--tinta2)}
.t-vida span{display:inline-flex;align-items:baseline;gap:3px;white-space:nowrap}
.t-vida b{font-size:13px;font-weight:var(--peso-titulo);line-height:1;letter-spacing:-.02em;
  font-variant-numeric:tabular-nums;color:var(--tinta)}

/* ---------- 5. La meta: la fila de contexto ---------- */
/* Envuelve a propósito: el chip de arranque y el badge de tipo de un reto abierto prefieren caer a
   la segunda línea antes que partirse por dentro, igual que hacían en `.a-meta`. */
.t-meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px;row-gap:4px;margin-top:4px;
  min-width:0;font-size:11px;font-weight:700;color:var(--tinta2)}
.t-meta + .t-meta{margin-top:3px}
.t-meta > span{display:inline-flex;align-items:center;gap:4px;min-width:0;white-space:nowrap}
/* El resumen conserva el texto completo en el DOM y reserva dos líneas en la tarjeta. */
.t-meta > .t-descripcion{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;
  overflow:hidden;white-space:normal;overflow-wrap:anywhere;line-height:1.45}
/* El renglón que puede encoger: una dirección de verdad no cabe nunca, así que cede su ancho y
   recorta con ellipsis en vez de empujar al resto. */
.t-meta > span.larga{flex:0 1 auto;display:block;overflow:hidden;text-overflow:ellipsis}
.t-meta svg{width:12px;height:12px;flex:0 0 auto;stroke:currentColor;fill:none;stroke-width:1.5;
  stroke-linecap:round;stroke-linejoin:round}
/* AQUÍ VIVÍA `.t-meta .vas`, el verde de "Vas" en el renglón de la gente. Su único escritor era la
   tarjeta de un plan, y se va con la mini-app Eventos el 7-sep-2026. */
/* AQUÍ VIVÍA `.tarjeta.t-plan .t-meta`, los 12px entre dos datos cortos de la misma fila. Su único
   escritor era la lista de Expiry Alarm, y se va con la mini-app el 8-sep-2026. */

/* ---------- 6. El pie: lo vivo ---------- */
/* Caras, barra, plazas. Una tarjeta admite dos pies; la del reto en marcha se quedó con UNO el
   5-sep-2026, la barra de piezas sola, cuando su fila de caras salió del markup y el icono del día
   subió a la fila del título (§ 7). */
.t-pie{display:flex;align-items:center;gap:8px;margin-top:9px;min-width:0}
.t-pie + .t-pie{margin-top:6px}
/* La cara sube de 21 a 23 y se centra: en la tarjeta puede llevar dentro a Momo (que se coloca solo,
   por porcentajes) o la inicial de quien esté en una lista de gente. Los cuatro colores
   son los de `color_de_miembro`, hasta ahora copiados en tres hojas con tres prefijos distintos. */
.tarjeta .cara{width:23px;height:23px;display:grid;place-items:center;
  font-size:10px;font-weight:var(--peso-fuerte);color:var(--tinta)}
.tarjeta .cara.p1{background:var(--lavanda)}
.tarjeta .cara.p2{background:var(--coral)}
.tarjeta .cara.p3{background:var(--menta-cl)}
.tarjeta .cara.p4{background:var(--vainilla)}
/* `.t-mas` (el "+N" de las caras que no caben) y `.t-gente` (el "N personas" que leía el lector de
   pantalla) SALIERON el 5-sep-2026 con la fila de la gente de la ficha de la raíz, que era su único
   escritor. Las caras siguen en pie: lo que se fue es el conteo en palabras, no `.caras`/`.cara`. */
/* La barra de piezas es la de la § 24; aquí solo se le dice que se lleve la fila entera y a qué
   altura. */
.t-pie .barra{flex:1 1 0;height:11px;min-width:40px}
/* El estado del día es SOLO el icono (29-ago-2026): 16px para que se lea sin la palabra al lado.

   EL DÍA CUMPLIDO ES UN DISCO CON EL VESTIDO DEL BOTÓN DE CREAR RETO (5-sep-2026, decisión de
   Guillem: «que el verde del tick sea el mismo verde que el botón de crear reto»). Ese botón es
   `.fab.boton-accion--flotante` (§ 42 de application.css): relleno `--menta-cl` y el verde vibrante
   SOLO en la sombra dura. Aquí se repite el par a escala de icono — 1,5px de repisa en vez de 3 —
   así que el tick queda en `--tinta` sobre `--menta-cl`, 7,21:1, y el mismo verde aparece dos veces
   en la pantalla queriendo decir lo mismo.

   No es un color nuevo, es «La trampa del verde» (UI/README.md § 1): `--menta` como relleno queda
   para lo que no lleva glifo encima. El disco en `--menta` que estuvo aquí unas horas dejaba el tick
   en 3,68:1 y era el único verde pleno del índice.

   El círculo de lo pendiente queda vacío, en el gris de `.estado-txt.toca`. El tick se encoge en el
   propio `path` (no con padding) para que el trazo siga en 1,5 como todos los iconos. La descripción
   sigue dentro, `visualmente-oculto`, para el lector de pantalla. */
/* LA LÍNEA DE ARRANQUE ocupa ese mismo pie en la ficha de un reto ABIERTO (7-sep-2026, propuesta B),
   donde la de un reto en marcha lleva la barra. Es texto y no una pastilla: el chip coral que decía
   esto vivía arriba, en una fila propia, y aquí el color ya lo pone el dado del sello.
   12px y no los 11 de `.t-meta` porque es la ÚNICA línea de contexto de la tarjeta y no una de
   varias. Envuelve —`flex-wrap`— para que "· en 17 días" caiga al renglón de abajo antes de
   partirse por dentro, con 2px de `row-gap` para que las dos líneas no se peguen. */
.t-pie.t-arranque{margin-top:8px;gap:5px;flex-wrap:wrap;row-gap:2px;
  font-size:12px;font-weight:700;color:var(--tinta2)}
.t-pie.t-arranque b{font-weight:var(--peso-fuerte);color:var(--tinta)}
/* ---------- 7. Legibilidad de los retos ---------- */
/* El nombre completo distingue retos que empiezan igual. Día y duración conservan su propia
   línea para no robarle ancho. El chasis compartido mantiene el resto de listas tal como estaban. */
/* `>` y no descendiente: el sello de un reto EN MARCHA no cuelga de la tarjeta, cuelga de
   `.t-sello-col` (§ 3), que es la que se pega arriba por él. Desde el 7-sep-2026 la ficha de un reto
   ABIERTO usa esa misma columna, así que esta regla queda para el sello suelto de la tarjeta de un
   reto en un perfil y de la de una plantilla. */
.tarjeta-cohorte > .t-sello{align-self:flex-start}
.tarjeta-cohorte .t-tit{flex-wrap:wrap;row-gap:6px}
.tarjeta-cohorte .t-tit > b{flex:1 0 100%;line-height:1.3}
/* SALVO CUANDO EL DATO SON LAS DOS CIFRAS DEL GRUPO (5-sep-2026): ahí el título comparte renglón
   con ellas y solo se lleva la fila entera si no caben juntos. `flex-basis:auto` hace que el
   reparto en líneas mire el ancho real del nombre — uno corto cabe al lado y el `flex-grow` empuja
   las cifras contra el borde derecho; uno largo desborda el renglón y las baja enteras debajo, sin
   solaparse, que es lo que mide `spec/system/legibilidad_de_retos_spec.rb` con 120 caracteres. */
.tarjeta-cohorte .t-tit:has(.t-vida) > b{flex:1 1 auto}
.tarjeta-cohorte .t-chip,.tarjeta-cohorte .t-dato{margin-left:0}
/* El índice recorta lo que queda fuera de sus bordes: el anillo se dibuja dentro de la tarjeta. */
.tarjeta-cohorte .tarjeta-ir:focus-visible{outline-offset:-5px}

/* Los planes se leen por su nombre, cuándo quedamos y quién viene. La fila de personas conserva
   las caras compartidas y cede espacio al título completo, también a 320px. */
.tarjeta-plan-de-grupo > .t-sello{align-self:flex-start}
.tarjeta-plan-de-grupo .t-tit b{line-height:1.3}
.tarjeta-plan-de-grupo .t-tit{align-items:baseline}
.tarjeta-plan-de-grupo .t-hora-plan{margin-left:auto;white-space:nowrap;font-size:12px;font-weight:600;color:var(--tinta2)}
.t-sello.dado-plan{border:0;box-shadow:none}
.tarjeta-plan-de-grupo .t-meta{margin-top:7px;font-weight:500;line-height:1.4}
.tarjeta-plan-de-grupo .t-pie{margin-top:12px;flex-wrap:wrap;row-gap:5px}
.tarjeta-plan-de-grupo .caras > .cara:last-child{margin-right:0}
.tarjeta-plan-de-grupo .t-personas{font-size:11px;font-weight:500;color:var(--tinta2)}

/* ---------- 8. Retos: sello integrado ---------- */
/* Propuesta 2, elegida por Guillem el 10-sep-2026 con colores más suaves. El fondo pertenece al
   chasis: una capa posicionada obligaría a apilar sello y cuerpo por encima de la puerta y se
   comería sus clics (§ 7). La clase es opt-in para conservar el vestido de las otras entidades.
   Los tonos mezclan los roles existentes con la superficie; la paleta global sigue siendo única. */
.tarjeta-reto{--reto-lateral:color-mix(in srgb,var(--lavanda-cl) 65%,var(--crema));
  --reto-sombra-sello:color-mix(in srgb,var(--lavanda) 60%,var(--crema));
  column-gap:20px;padding-left:12px;
  background:linear-gradient(to right,var(--reto-lateral) 67px,var(--crema) 67px);
  box-shadow:0 3px 0 var(--som)}
/* La fecha visible es la que activa el amarillo (coral hasta el 16-sep-2026). Revisión o finalizado conservan el sello de
   categoría y su lavanda, sin sugerir un arranque que el contenido ha decidido ocultar. */
.tarjeta-reto:has(.t-sello.empieza){
  --reto-lateral:var(--vainilla-cl)}
.tarjeta-reto .t-sello{align-self:flex-start;border:0;border-radius:15px;
  background:var(--crema);box-shadow:0 3px 0 var(--reto-sombra-sello)}
.tarjeta-reto .t-sello svg{width:26px;height:26px}
.tarjeta-reto .t-sello.dado.empieza{
  background:var(--vainilla);box-shadow:none}
/* Los dos badges bajo el sello van en blanco desde el 16-sep-2026 (Guillem): sobre la franja
   `--vainilla-cl` el vainilla del icono de sistema se fundía, y la categoría lo acompaña para que
   queden parejos. */
.tarjeta-reto .t-categoria-mini,.tarjeta-reto .t-recurrente{background:#fff}
.tarjeta-reto .t-tit{flex-wrap:wrap;row-gap:6px}
.tarjeta-reto .t-tit > b{font-size:16px;font-weight:750;line-height:1.3}
/* A 320px las cifras pueden necesitar dos renglones; cada pareja conserva número y etiqueta
   juntos y solo envuelve el grupo, dentro del hueco que deja el estado del día. */
.tarjeta-reto .t-vida{flex:0 1 auto;flex-wrap:wrap;row-gap:4px;max-width:100%}
.tarjeta-reto .t-vida b{font-weight:650}
.tarjeta-reto .t-pie:has(> .barra){margin-top:12px}
.tarjeta-reto .t-pie .barra{height:7px;border:0}
.tarjeta-reto .t-pie .barra i{box-shadow:none}
/* Mantener el salto entre filas del chasis cuando el extra ocupa todo el ancho: el hueco de 20
   pertenece solo a sello y cuerpo, no a las caras y al botón de onboarding o invitación. */
.tarjeta-reto:has(> .empezar-pie){row-gap:12px}
.tarjeta-reto .tarjeta-ir:focus-visible{outline-offset:-5px}
/* LA FILA APAGADA DEL HISTORIAL (20-sep-2026): un reto que dejaste o que se disolvio. No cambia de
   forma —es la misma tarjeta, el mismo sello y el mismo chasis—, solo se retira: el lateral y el
   sello bajan a `--pista` y el dibujo y el nombre a `--tinta2`. Cuatro declaraciones con tokens que
   ya existen; la ausencia de puerta hace el resto. */
.tarjeta-reto[data-apagada]{--reto-lateral:var(--pista);--reto-sombra-sello:var(--som)}
.tarjeta-reto[data-apagada] .t-sello.categoria{background:var(--pista)}
.tarjeta-reto[data-apagada] .t-sello svg{stroke:var(--tinta2)}
.tarjeta-reto[data-apagada] .t-tit > b{color:var(--tinta2)}

/* ---------- 9. La puerta de los retos temáticos: el borde circuito ---------- */
/* Opción A de los tres mockups del 20-sep-2026, elegida por Guillem («claramente A»), sin chip de
   «Nuevo»: lo que destaca la puerta es el borde, no una etiqueta que luego hay que ir a retirar.
 *
 * UN ANILLO DE 2px QUE GIRA. El `conic-gradient` del `::before` se pinta sobre el borde y solo
 * sobre él: las dos máscaras se restan (`mask-composite:exclude`), así que el relleno de la caja
 * —la franja lateral de `.tarjeta-reto` (§ 8) y el blanco del cuerpo— queda intacto y la luz
 * recorre el rectángulo sin cortes, como la pista de un circuito.
 *
 * Lo que gira es el ÁNGULO del gradiente y no la caja: `transform:rotate` sobre el pseudo giraría
 * también sus esquinas y el anillo dejaría de coincidir con el radio de 20. Por eso `--giro` se
 * registra con `@property` como `<angle>` —una custom property sin registrar no interpola y el
 * fotograma saltaría de 0 a 360 de golpe—. Donde `@property` no exista, el anillo se queda quieto
 * con el gradiente en su ángulo inicial: degrada a un borde lila-azulado fijo, que sigue siendo
 * legible.
 *
 * El chasis pierde su contorno (`border:0`) porque el anillo YA es el borde, y con los dos puestos
 * el trazo de --tinta se veía por debajo del lila en las rectas. El relleno no se toca: los 2px del
 * anillo caen sobre el `border-box`, no sobre el contenido, así que la tarjeta mide lo mismo que
 * sus vecinas y la lista no baila.
 *
 * 4s por vuelta: por debajo de 3 la luz distrae en una lista que se lee de arriba abajo, por
 * encima de 5 parece que la página se ha colgado. Con `prefers-reduced-motion` se apaga entera. */
@property --giro-circuito{syntax:'<angle>';inherits:false;initial-value:0deg}
.tarjeta-tematicos{border:0}
.tarjeta-tematicos::before{content:"";position:absolute;inset:0;border-radius:20px;padding:2px;
  background:conic-gradient(from var(--giro-circuito),
    var(--circuito) 0deg,var(--circuito-2) 60deg,var(--circuito-luz) 92deg,
    var(--circuito-2) 128deg,var(--circuito) 200deg,
    color-mix(in srgb,var(--circuito) 35%,var(--crema)) 300deg,var(--circuito) 360deg);
  -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
  -webkit-mask-composite:xor;mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
  mask-composite:exclude;pointer-events:none;
  animation:girar-circuito 4s linear infinite}
@keyframes girar-circuito{to{--giro-circuito:360deg}}
/* El sello recoge el mismo par para que la puerta se lea como una pieza y no como una card normal
   con un borde encima: el degradado del fondo y la repisa en lila, no en el --reto-sombra-sello
   lavanda de las vecinas. */
.tarjeta-tematicos .t-sello{background:linear-gradient(140deg,var(--lavanda-cl),var(--cielo));
  box-shadow:0 3px 0 color-mix(in srgb,var(--circuito) 30%,var(--crema))}
@media (prefers-reduced-motion:reduce){
  .tarjeta-tematicos::before{animation:none}
}

/* LA PANTALLA DE LA SEMANA TEMÁTICA (`temas#show`, 20-sep-2026). No estrena chasis: la portada es
   `comun/_tarjeta` con el anillo de arriba y estas reglas la visten de portada. El degradado es el
   mismo par lavanda-cielo que el sello de la puerta ya lleva, ahora en toda la caja, para que la
   pantalla se lea como la continuación del card que acabas de tocar. Sin `.tarjeta-reto`, así que
   no hay franja lateral: esta tarjeta no lleva a un alta, solo presenta la semana. */
.tarjeta-tema{align-items:flex-start;
  background:linear-gradient(150deg,var(--lavanda-cl),var(--cielo))}
/* El nombre de la semana es el titular de la pantalla, no el título de una fila de lista: sube de
   16 a 22 y al peso de cabecera. Se queda por debajo del `<h1>` de la hoja a propósito — la
   cabecera sigue diciendo dónde estás. */
.tarjeta-tema .t-tit b{font-size:22px;font-weight:var(--peso-titulo);line-height:1.15;
  letter-spacing:-.02em}
.tarjeta-tema .t-meta > .t-descripcion{-webkit-line-clamp:4;font-size:12.5px;font-weight:600;
  line-height:1.5}
/* El sello recupera el blanco: sobre el degradado, el mismo degradado del card de la raíz lo
   fundiría con el fondo. */
.tarjeta-tema .t-sello{background:var(--crema);
  box-shadow:0 3px 0 color-mix(in srgb,var(--circuito) 30%,var(--crema))}
/* Tres líneas, fecha / nombre / frase (21-sep-2026). La fecha va en el hueco `titulo` del chasis
   junto al nombre, así que esa fila se apila en columna en vez de ir en línea. La fecha va en la
   pastilla vainilla que antes llevaba «Quedan N días» (Guillem, 21-sep-2026): vainilla y no el coral
   de `.t-chip`, que es el rol del DÍA del reto en marcha en todo el set. */
.tarjeta-tema .t-tit{flex-direction:column;align-items:flex-start;gap:6px}
.t-fecha-del-tema{display:inline-flex;align-items:center;padding:3px 10px;background:var(--vainilla);
  border:var(--contorno) solid var(--tinta);border-radius:999px;box-shadow:0 2.5px 0 var(--vainilla-s);
  font-size:10.5px;font-weight:var(--peso-fuerte);white-space:nowrap}
/* Las dos secciones —la semana y el historial— siguen el reparto de las categorías de puertas de la
   raíz (cohortes.css): el rótulo es el `.rotulo` sin tocar, el `<h2>` solo lo envuelve (sin los
   18px de `.hoja h2`), sus 12px de debajo lo separan de la primera tarjeta y cada sección se aparta
   de la anterior con el aire de bloques. */
.seccion-de-temas > h2{margin:0;font-size:0}
.seccion-de-temas > h2 + .lista{margin-top:0}
.seccion-de-temas + .seccion-de-temas{margin-top:var(--aire-bloques)}

/* ---------- 10. Las confirmaciones de agente en «Tú» ---------- */
/* U4 del chat entre agentes (27-sep-2026): Rechazar y Confirmar no caben al lado del texto en un
   móvil sin exprimirlo, así que la tarjeta se parte y los dos `.cat` bajan a su propia fila, a la
   derecha, con el aire de la fila de chips. */
.confirmaciones-de-agente .tarjeta{flex-wrap:wrap}
/* La meta dice quién lo pide, cuándo caduca y, si toca, que lo disuelve: no cabe en la línea
   recortada de `.t-meta > span`, así que parte como la de las apps conectadas. */
.confirmaciones-de-agente .t-meta > span{white-space:normal;overflow-wrap:anywhere;min-width:0}
.confirmacion-de-agente__acciones{flex:1 0 100%;display:flex;justify-content:flex-end;gap:8px}
.confirmacion-de-agente__acciones form{margin:0}
