@font-face{font-family:'DA Delta';src:local('Helvetica Neue'),local('HelveticaNeue'),local('Helvetica'),local('Arial'),local('ArialMT'),local('Roboto'),local('Segoe UI'),local('Noto Sans'),local('DejaVu Sans');unicode-range:U+2202;font-display:swap}
/* ∂iario aventureros — DESIGN TOKENS
 * Fuente de verdad: Claude Design · "Diario Aventureros Design System" (project/tokens/*.css),
 * exportado a diario-aventureros-intelligence/diario-aventureros-design-system. Consolidado aquí
 * en un único archivo (la app importa uno solo) en el estilo del repo (tabs, hex minúsculas).
 * Brandbook 60/30/10: fondo claro + aire (60), texto sobrio (30), acento verde en acciones (10).
 * Negro nunca puro (#252525). Los colores de ROL son puntuales (badges, estados), nunca rellenos grandes. */

:root {
	/* ═══════════════════ COLOR ═══════════════════ */

	/* ---- Base de marca ---- */
	--da-surface: #f1f1f1; /* fondo base de toda la app */
	--da-surface-warm: #f4f4f0; /* variante cálida usada en el portal de marca */
	--da-paper: #ffffff; /* tarjetas, formularios, superficies elevadas */
	--da-paper-soft: #f7f7f7; /* "Accent 7" en Figma — gris casi blanco */
	--da-paper-2: #ececec; /* superficie hundida / fondo de chips */
	--da-card-base: #ededee; /* base de tarjeta "revelar" (success) */

	--da-ink: #252525; /* texto principal — NUNCA #000 */
	--da-ink-warm: #2f2418; /* madera, carteles, tinta cálida de botones-sign */
	--da-gray: #9d9d9d; /* texto secundario, placeholders, estado pendiente */
	--da-gray-line: #e5e7eb; /* caso puntual: línea/borde gris (gray-200) */

	--da-accent: #b9c91c; /* verde lima — acción, CTA, éxito, color de marca */
	--da-accent-deep: #cfde3f; /* cima del degradado del cartel activo */
	--da-accent-ink: #2e3300; /* texto oscuro legible SOBRE el verde */
	--da-accent-shadow: rgba(140, 155, 0, 0.3); /* sombra inferior chunky de botones verdes */

	/* ---- Roles de la comunidad (uso puntual) ---- */
	--da-member: #dc00d3; /* magenta — miembro, exclusividad */
	--da-grumete: #fed01a; /* amarillo — grumete, bienvenida, calidez */
	--da-partner: #23cf9d; /* verde-agua — partner / colaborador */
	--da-pendiente: #9d9d9d; /* gris — pendiente / explorando */

	/*
	 * El ámbar oscuro que pedía el punto A-3 del modelo, y que faltaba.
	 *
	 * La regla es: el color del rol vive en el aro, el sello y el relleno; el texto
	 * va en tinta. Ninguno de los colores de rol llega a 4,5:1 sobre blanco
	 * (grumete 1,47 · accent 1,84 · colaborador 2,00 · pendiente 2,71 · miembro 4,21),
	 * así que cuando hace falta ESCRIBIR algo en amarillo —"ya es grumete"— no se
	 * puede usar --da-grumete.
	 *
	 * Mismo tono (48°) y misma saturación que --da-grumete, bajada la luminosidad
	 * hasta pasar el listón con margen en TODAS las superficies claras del producto:
	 * blanco 5,87:1 · paper-soft #f7f7f7 5,48:1 · superficie #f1f1f1 5,20:1 ·
	 * card-base #ededee 5,02:1 · hundido #ececec 4,97:1 · pastilla #e9e9e9 4,84:1 ·
	 * crema de aviso #fdf3d0 5,29:1. Ya no hace falta la negrita para que se lea.
	 *
	 * 06/09/2026 — bajado de #846a01 (que se quedaba en 4,38:1 sobre la pastilla
	 * amarilla, a un pelo del listón) al #7a6200 que ya estaba escrito a mano en
	 * Embudo.css:232 y EmbudoAuth.css:306. Así hay UN solo ámbar de escribir.
	 */
	--da-grumete-ink: #7a6200;

	/*
	 * El gris que se puede LEER, y es la otra mitad del mismo punto A-3.
	 *
	 * `--da-gray` (#9d9d9d) está en la lista de colores que no llegan a 4,5:1 — da 2,71:1
	 * sobre blanco— y sin embargo es el que usa `--text-secondary`, o sea casi toda la letra
	 * pequeña del producto. Mientras eso sea solo ambiente da igual; el problema es cuando
	 * en ese gris va escrita **una regla** («avisa si no vas», «normas de comunidad»,
	 * «1 plaza pedida, todavía sin respuesta»), porque entonces lo que no se lee es
	 * información.
	 *
	 * Mismo gris neutro, bajado hasta pasar el listón en las tres superficies claras del
	 * producto: blanco 5,74:1 · superficie #f1f1f1 5,08:1 · hundido #ececec 4,86:1.
	 *
	 * **No sustituye a `--da-gray`**: el ambiente sigue siendo ambiente. Este es para lo
	 * secundario que además hay que poder leer.
	 */
	--da-gray-ink: #666666;

	/*
	 * El mismo valor, con un nombre que **no se redefine nunca**.
	 *
	 * Hace falta porque las pantallas de fondo oscuro redefinen `--da-gray-ink` a un gris
	 * claro para su contexto (ver `Resumen.css`), y dentro de ellas hay islas claras —una
	 * nota de papel, una tarjeta blanca— donde el secundario tiene que volver a ser oscuro.
	 * Sin un ancla, esa vuelta no se puede escribir.
	 */
	--da-gray-ink-claro: #666666;

	/*
	 * El magenta que se puede LEER — cierra el punto A-3 para el rol de miembro.
	 *
	 * `--da-member` (#dc00d3) da 4,21:1 sobre blanco: por debajo del 4,5:1 que hace
	 * falta para texto, y las pastillas de rol son de 10–12 px en negrita, o sea que
	 * no cuentan como «texto grande». Cuando hay que ESCRIBIR algo en magenta —«ya es
	 * miembro», la cifra de la cola de conversión— no se puede usar `--da-member`.
	 *
	 * Mismo tono (302,5°) y misma saturación (100%), luminosidad de 43,1% a 30,2%:
	 * blanco 7,51:1 · paper-soft 7,01:1 · superficie 6,65:1 · card-base 6,42:1 ·
	 * hundido 6,36:1 · --member-tint 5,66:1 · --member-tint-solid 4,80:1.
	 *
	 * **No sustituye a `--da-member`**: el color del rol sigue viviendo en el aro, el
	 * sello, el borde y el relleno. Este es solo para escribir.
	 */
	--da-member-ink: #9a0093;

	/*
	 * El verde-agua que se puede LEER — el par del colaborador, y el peor caso de
	 * todos: `--da-partner` (#23cf9d) da 2,00:1 sobre blanco, ni la mitad del listón.
	 *
	 * Este valor NO se inventa: ya se usaba como valor de repuesto de
	 * `--da-partner-ink` en Demo.css, Bienvenida.css ×2, FichaAlta.css ×2 y
	 * Guardia.css, y estaba fichado como candidato en el bundle de Design
	 * (2026-09-02-fundacion/tokens/README-diff.md:30). Solo faltaba darlo de alta.
	 * Mismo tono (162°), luminosidad 20,2%:
	 * blanco 7,99:1 · paper-soft 7,46:1 · superficie 7,07:1 · card-base 6,83:1 ·
	 * hundido 6,76:1 · --partner-tint 6,54:1 · lavado #dff7ef 7,11:1.
	 *
	 * ⚠️ Las dos son tinta de FONDO CLARO. En pantallas oscuras NO se usan: darían
	 * 2,04:1 y 1,92:1 sobre `--da-ink`.
	 */
	--da-partner-ink: #0b5c44;

	/*
	 * Los tres lavados que se usaban con valor de repuesto y no estaban declarados.
	 * Mismos valores que el repuesto → cambio visual cero; lo que se arregla es que
	 * el código deje de mentir. El crema es el fondo de los avisos de consejo
	 * (6 usos en 5 ficheros); con --da-grumete-ink encima da 5,29:1.
	 */
	--da-grumete-wash: #fdf3d0; /* crema de aviso — 6 usos, 0 declaraciones */
	--da-partner-wash: #dff7ef; /* lavado teal — 7 usos en 5 ficheros */
	--da-accent-wash: #f3f6d9; /* lavado lima — 6 usos en 3 ficheros */

	/* ═══════════ ESTADOS DEL SISTEMA — error · aviso · info · éxito ═══════════
	 *
	 * Hasta hoy no existían. `--color-error` se llamaba en 5 sitios y no estaba
	 * definido en ninguno: caía siempre al literal #d92d20. En otras 6 pantallas el
	 * error se pintaba con `--da-member`, el MAGENTA de miembro — un color de ROL
	 * haciendo de ESTADO. Y `--success` (el lima) estaba definido pero sin usar,
	 * porque el lima da 1,84:1 sobre blanco y no se puede leer.
	 *
	 * Mismo patrón que `--da-grumete-ink`: el color VIVO va en el aro, el borde
	 * izquierdo, el punto y el relleno; el TEXTO va siempre en tinta.
	 *
	 * ⚠️ NO uses `--er`, `--su`, `--wa` ni `--in`: son de DaisyUI v4 y las pisa.
	 * ⚠️ Tampoco `--color-error` ni `--color-primary`: son del espacio de DaisyUI v5.
	 */

	/* ERROR — ladrillo. Ni magenta (eso es «miembro») ni el rojo plano de framework:
	 * mismo tono cálido que la madera de los carteles, bajada la luminosidad hasta que
	 * el MISMO valor sirve de borde (listón 3:1) y de texto (4,5:1).
	 * Texto: 5,75 · 5,37 · 5,09 · 4,92 · 4,87. Blanco encima (badge relleno): 5,75. */
	--da-error: #bd3227;
	/* La tinta, para texto pequeño y para escribir SOBRE el tinte rojo:
	 * 7,50 · 7,00 · 6,64 · 6,41 · 6,34 sobre base; 6,40 · 6,01 · 5,73 sobre su tinte. */
	--da-error-ink: #9e2a1c;
	/* La misma tinta para ESCENAS OSCURAS (login de noche, Resumen). Ya estaba escrita
	 * a mano en Login.css:334 y da 9,18:1 sobre el velo rojo del cielo nocturno. */
	--da-error-ink-claro: #ffd7d3;

	/* AVISO — ámbar. Más naranja (31°) y más oscuro (L 40%) que el amarillo de grumete
	 * (48°, L 55%) para que no se lean como el mismo color. El vivo NO llega a 4,5:1 en
	 * ninguna superficie —ningún ámbar lo hace—, así que es SOLO borde/punto:
	 * 3,91 · 3,65 · 3,46 · 3,34 · 3,31. */
	--da-warn: #c4690a;
	/* Texto: 6,33 · 5,91 · 5,60 · 5,41 · 5,36 sobre base; 5,49 · 5,15 · 4,91 sobre tinte. */
	--da-warn-ink: #8a5300;

	/* INFO — azul pizarra. Único tono frío del sistema, a propósito poco saturado:
	 * informa, no compite con el lima ni con el magenta.
	 * Vivo, solo borde/punto: 4,28 · 3,99 · 3,79 · 3,66 · 3,62. */
	--da-info: #2f7fbf;
	/* Texto: 7,21 · 6,73 · 6,39 · 6,17 · 6,11 sobre base; 6,38 · 5,98 · 5,71 sobre tinte. */
	--da-info-ink: #215b87;

	/* ÉXITO — el lima de marca sigue siendo el RELLENO (`--da-accent`, con
	 * `--da-accent-ink` #2e3300 encima: 7,19:1). Lo que faltaba era el lima que SE LEE
	 * sobre fondo claro: 6,45 · 6,02 · 5,71 · 5,51 · 5,46. Ya existía suelto y sin
	 * nombre en Embudo.css:221, EmbudoAuth.css:31 y 58, Invitacion.css:68 y 112 y
	 * Onboarding.css:639. Arregla el peor contraste de la app: el veredicto «encaja»,
	 * que hoy es lima escrito sobre lima (1,47:1).
	 *
	 * ⚠️ Ojo al sufijo: `--da-accent-ink` es la tinta que va ENCIMA del lima;
	 * `--da-accent-text` es el lima convertido en tinta. No son intercambiables. */
	--da-accent-text: #5a6400;

	/* ---- Madera y carteles (signpost RPG) ----
	 *
	 * ⚠️ **Rebajados el 09/09/2026, y es el cambio que pidió Andoni:** *«se ha intentado hacer
	 * ese tablón de madera, pero parece algo del Paint. Hay que darle mucho más fino,
	 * profesional, elegante… pero con tokens, no saturando demasiado»*.
	 *
	 * Lo que fallaba no era la idea, era el **croma**. La madera iba a 53 % de saturación
	 * (`#8a5a2b`), que no es madera: es terracota, y a pantalla completa satura la vista y
	 * aplasta todo lo que se pone encima. Los mismos tonos con la mitad de croma leen como
	 * nogal envejecido, que es lo que se buscaba — el brandbook ya lo avisaba: *«no
	 * sobrecargar con estética RPG; usarla como guiño, no como sistema entero»*.
	 *
	 * Se ha mantenido la LUMINOSIDAD de cada uno para no romper las once pantallas que los
	 * usan (el Hogar, la carta de amor, el resumen, el índice, compartir…): en todas son
	 * fondo con tinta cálida oscura encima, así que bajar croma y subir claridad solo puede
	 * mejorar el contraste, nunca empeorarlo. */
	--da-wood-1: #76614c; /* nogal claro — antes #8a5a2b, que era terracota */
	--da-wood-2: #5c4a39; /* nogal — antes #6c431f */
	--da-sign-1: #ecdcbe; /* cara del cartel: pergamino, no oro */
	--da-sign-2: #ddc9a4;
	--da-pin-1: #a68a6a; /* chincheta de latón viejo, no de plástico naranja */
	--da-pin-2: #7a6247;

	/* ---- Canal WhatsApp (omnipresente en el producto) ---- */
	--da-wa: #25d366; /* verde WhatsApp — botones "abrir chat" */
	--da-wa-deep: #075e54; /* cabecera de chat */
	--da-wa-bubble: #dcf8c6; /* burbuja de mensaje saliente */

	/* ---- Tablón de anuncios (sello postal — paneles perforados) ---- */
	--da-board-bg: #dee2b7; /* verde salvia — fondo de fila de tablón (legacy) */
	--da-board-ink: #5b630c; /* olivo oscuro — texto del tablón */
	--da-board-title: #2c2825; /* tinta casi negra — título grande del tablón */
	--da-stamp-green: #a8bd1c; /* panel OFICIALES — cuerpo del sello verde lima */
	--da-stamp-olive: #6e7615; /* panel MIEMBROS — cuerpo del sello oliva oscuro */
	--da-board-card: #dce3b6; /* fila/tarjeta sage SOBRE panel verde */
	--da-board-card-muted: #c7ce9e; /* fila/tarjeta sage SOBRE panel oliva */
	--da-stamp-oficial: #fbb825; /* amarillo — cinta/badge "OFICIALES" */
	--da-stamp-check: #fbb825; /* badge circular ✓ (oficiales) */
	--da-stamp-key: #dc00d3; /* badge circular 🔑 (miembros) = magenta de marca */

	/* ---- Líneas y velos ---- */
	--da-border: rgba(0, 0, 0, 0.09); /* borde estándar de tarjetas */
	--da-border-soft: rgba(0, 0, 0, 0.06);
	--da-veil: rgba(10, 10, 10, 0.4); /* overlay de modales */

	/* ---- Alias semánticos — usa estos en componentes y pantallas ---- */
	--bg: var(--da-surface);
	--bg-warm: var(--da-surface-warm);
	--surface-card: var(--da-paper);
	--surface-sunken: var(--da-paper-2);

	--text-primary: var(--da-ink);
	/*
	 * ⚠️ **Secundario NO quiere decir ilegible.** Esto apuntaba a `--da-gray` (#9d9d9d), que
	 * da **2,4:1** sobre el fondo de la app — muy por debajo del 4,5:1 que hace falta para
	 * leer texto. Y como `--text-secondary` viste casi toda la letra pequeña del producto,
	 * ahí iban escritas cosas que hay que poder leer: *«avisa si no vas»*, *«normas de
	 * comunidad»*, *«1 plaza pedida, todavía sin respuesta»*, la letra de las cifras del
	 * histórico. Un texto que no se lee no es diseño discreto: es decoración.
	 *
	 * Se cambió el 29/08/2026 al gris legible (5,1:1 sobre la superficie de la app). Sube un
	 * punto el peso visual de la letra pequeña, y a cambio se lee. Es el punto A-3 del
	 * modelo llevado hasta el final: *«el texto va siempre en tinta»*.
	 *
	 * **`--da-gray` no se toca** y sigue siendo el de antes: es el gris de lo que de verdad
	 * es ambiente —placeholders, bordes, estados apagados, el pendiente de la senda— donde
	 * no hay nada que leer.
	 */
	--text-secondary: var(--da-gray-ink);
	--text-on-accent: var(--da-accent-ink);
	--text-on-dark: #ffffff;
	--text-warm: var(--da-ink-warm);
	--text-member: var(--da-member-ink); /* escribir «miembro» — nunca --da-member */
	--text-partner: var(--da-partner-ink); /* escribir «colaborador» — nunca --da-partner */

	--accent: var(--da-accent);
	--accent-ink: var(--da-accent-ink);
	/* ---- Estados: el vivo para el aro y el borde, la tinta para el texto ---- */
	--error: var(--da-error);
	--error-ink: var(--da-error-ink);
	--error-ink-claro: var(--da-error-ink-claro);
	--error-tint: rgba(189, 50, 39, 0.1);
	--error-tint-solid: rgba(189, 50, 39, 0.2);

	--warn: var(--da-warn);
	--warn-ink: var(--da-warn-ink);
	--warn-tint: rgba(196, 105, 10, 0.12);
	--warn-tint-solid: rgba(196, 105, 10, 0.22);

	--info: var(--da-info);
	--info-ink: var(--da-info-ink);
	--info-tint: rgba(47, 127, 191, 0.1);
	--info-tint-solid: rgba(47, 127, 191, 0.2);

	--success: var(--da-accent); /* relleno — el éxito se pinta con el verde de marca */
	--success-ink: var(--da-accent-text); /* texto y borde — el lima NO se lee (1,84:1) */
	--success-tint: var(--accent-tint);
	/* ⚠️ NO uses `--wa` en componentes: DaisyUI lo pisa con su color "warning" (oklch).
	 * Para el verde de WhatsApp usa el token crudo `--da-wa`. */
	--wa: var(--da-wa);

	--border: var(--da-border);
	--border-soft: var(--da-border-soft);
	/* ⚠️ **Es un COLOR, no un atajo.** `outline: var(--focus-ring)` deja el `outline-style` en
	 * `none` y entonces NO SE VE NINGÚN FOCO: quien navega con teclado se queda sin saber
	 * dónde está. Se escribe siempre con su grosor y su estilo delante —
	 * `outline: 3px solid var(--focus-ring)`— como hacen `Tablon.css` y `FichaAlta.css`. */
	--focus-ring: rgba(185, 201, 28, 0.2); /* halo de focus en inputs */

	/* tintes de rol al 10–12% para fondos suaves de badge */
	--member-tint: rgba(220, 0, 211, 0.1);
	--member-tint-solid: rgba(220, 0, 211, 0.2);
	--grumete-tint: rgba(254, 208, 26, 0.16);
	--grumete-tint-solid: rgba(254, 208, 26, 0.24);
	--partner-tint: rgba(35, 207, 157, 0.12);
	--partner-tint-solid: rgba(35, 207, 157, 0.2);
	--accent-tint: rgba(185, 201, 28, 0.12);
	--accent-tint-solid: rgba(185, 201, 28, 0.2);

	/* ═══════════════════ TIPOGRAFÍA ═══════════════════ */

	/* ---- Familias ---- */
	--font-display:
		'DA Delta', 'Bike Park', 'Roboto', system-ui, sans-serif; /* titulares (Bike Park aún no desplegada → cae a Roboto 900) */
	--font-body: 'DA Delta', 'Roboto', system-ui, -apple-system, sans-serif; /* cuerpo / UI */
	--font-editorial: 'DA Delta', 'Lora', Georgia, 'Times New Roman', serif; /* modo editorial */
	--font-hand: 'DA Delta', 'Gochi Hand', 'Comic Sans MS', cursive; /* acento manuscrito */
	--font-pixel: 'DA Delta', 'Minecraft', 'Press Start 2P', ui-monospace, monospace; /* acento retro/RPG */
	--font-mono: 'DA Delta', ui-monospace, Menlo, Consolas, monospace; /* rutas, código, tickers */
	--font-adventure: 'DA Delta', 'Rubik', var(--font-body); /* títulos de tarjeta de aventura (ExperienceCard) */
	--font-poster: 'DA Delta', 'Poppins', var(--font-body); /* carteles / tablón de anuncios vintage */

	/* ---- Pesos ---- */
	--fw-light: 300;
	--fw-regular: 400;
	--fw-medium: 500;
	--fw-bold: 700;
	--fw-black: 900;

	/* ---- Escala de tamaño (mobile-first, base 15px) ---- */
	--text-xs: 11px; /* micro-labels, hints, metadatos */
	--text-sm: 13px; /* secundario, subtítulos de tarjeta */
	--text-base: 15px; /* cuerpo por defecto */
	--text-md: 17px; /* destacado de párrafo, h3 de tarjeta */
	--text-lg: 20px; /* títulos de sección pequeños */
	--text-xl: 24px; /* h2 compacto */
	--text-2xl: 32px; /* títulos de pantalla */
	--text-3xl: 44px; /* héroes secundarios */
	--text-4xl: 62px; /* héroe grande */

	--text-counter: clamp(80px, 15vw, 144px); /* contadores gigantes de páginas de datos */
	--text-hero: clamp(28px, 6vw, 62px);

	/* ---- Interlineado ---- */
	--leading-tight: 0.95; /* titulares grandes */
	--leading-snug: 1.1; /* títulos de tarjeta */
	--leading-normal: 1.6; /* cuerpo */
	--leading-relaxed: 1.7; /* editorial / textos largos */

	/* ---- Tracking ---- */
	--tracking-mega: -0.06em; /* contadores y héroes */
	--tracking-tight: -0.04em; /* titulares */
	--tracking-snug: -0.02em; /* subtítulos */
	--tracking-normal: 0;
	--tracking-label: 0.12em; /* labels en MAYÚSCULA */
	--tracking-pixel: 0.05em; /* texto pixel/RPG */

	/* ═══════════════════ ESPACIADO · RADIOS · SOMBRAS · MOVIMIENTO ═══════════════════ */

	/* ---- Espaciado (base 4px) ---- */
	--space-1: 4px;
	--space-2: 8px;
	--space-3: 12px;
	--space-4: 16px;
	--space-5: 20px;
	--space-6: 24px;
	--space-8: 32px;
	--space-10: 40px;
	--space-12: 48px;
	--space-16: 64px;
	--space-20: 80px;
	--space-22: 88px; /* padding vertical de secciones de landing */

	--measure: 480px; /* ancho de columna de lectura */
	--container: 1100px;
	--container-lg: 1280px;

	/*
	 * ---- Radios ----
	 *
	 * Andoni, 07/09/2026: *«en general botones cta más cuadrados como "mis productos" en el
	 * de colaboradores etc. En la mayoría de la app una estética más cuadrada que
	 * redondeada»*.
	 *
	 * El ancla es su propia referencia: `.co-rapido__card` (ColaboradorPortal.css:780), la
	 * tarjeta de «Mis productos», que ya estaba a **3 px**. Y no era un caso aislado: el 3 px
	 * ya se usaba a mano en 25 declaraciones de 15 ficheros. El lenguaje cuadrado estaba
	 * empezado y sin sistematizar; esto lo sistematiza.
	 *
	 * La escala vieja era 6/8/12/16/18/22/26. Se mantiene la progresión —cuanto más grande la
	 * pieza, algo más de radio— pero comprimida: una tarjeta grande a 3 px sigue leyéndose
	 * como tarjeta, y a 16 px se leía como pastilla.
	 *
	 * ⚠️ `--radius-pill` NO se toca, y es el freno de mano de todo esto. De él cuelgan los
	 * avatares, las pastillas de rol, los interruptores, las barras de progreso y los puntos
	 * de paginación: 257 declaraciones en 92 ficheros que TIENEN que seguir redondas. Una cara
	 * cuadrada deja de leerse como persona y una barra de progreso cuadrada deja de leerse
	 * como progreso.
	 */
	--radius-xs: 2px; /* chips de tag, code inline */
	--radius-sm: 3px; /* inputs */
	--radius: 3px; /* botones, campos grandes — el ancla: .co-rapido__card */
	--radius-md: 3px; /* tarjetas (estándar app) */
	--radius-lg: 4px; /* paneles del portal */
	--radius-xl: 6px; /* modales, drawers */
	--radius-2xl: 8px; /* tarjetas-héroe "revelar" */
	--radius-pill: 999px; /* badges, navegación, barras, avatares — NO se cuadra */

	/* ---- Bordes ---- */
	--border-width: 1px;
	--border-width-strong: 1.5px; /* inputs y burbujas RPG finas */
	--border-rpg: 3px; /* contorno grueso de carteles / bocadillos pixel */

	/* ---- Sombras ---- */
	--shadow-xs: 0 2px 8px rgba(0, 0, 0, 0.04);
	--shadow-sm: 0 3px 14px rgba(0, 0, 0, 0.06);
	--shadow-card: 0 4px 16px rgba(0, 0, 0, 0.06);
	--shadow-card-hover: 0 8px 28px rgba(0, 0, 0, 0.08);
	--shadow-float: 0 8px 24px rgba(0, 0, 0, 0.1); /* pastillas flotantes / topbar */
	--shadow-modal: 0 30px 80px rgba(0, 0, 0, 0.25);
	--shadow-pop: 0 18px 44px rgba(0, 0, 0, 0.1);
	--shadow-inset: inset 0 2px 8px rgba(0, 0, 0, 0.04);

	/* Botones "chunky" — sombra inferior sólida (no blur). Se hunde al pulsar. */
	--press-accent: 0 4px 0 var(--da-accent-shadow);
	--press-member: 0 5px 0 rgba(180, 0, 170, 0.3);
	--press-wood: 0 5px 0 var(--da-ink-warm);
	--press-wa: 0 5px 0 rgba(20, 140, 60, 0.3);

	/* ---- La cámara del recorrido ----
	 * Lo que de la cámara de `shared/ui/recorrido` pinta el CSS. Y solo eso: el
	 * paralaje, el desenfoque y la persecución los calcula JS fotograma a fotograma y
	 * sus cifras viven, con nombre, en `shared/ui/recorrido/camara.ts`. Copiarlas aquí
	 * también sería tener el mismo número en dos sitios, que es como se desincronizan. */
	--cam-trama: 46px; /* el punteado del fondo — es lo que hace visible el paralaje */

	/* ---- Movimiento ---- */
	--ease: cubic-bezier(0.22, 1, 0.36, 1);
	--ease-bounce: cubic-bezier(0.34, 1.56, 0.64, 1);
	--dur-fast: 0.15s;
	--dur: 0.3s;
	--dur-slow: 0.65s;
}

/* ═══════════════════════════════════════════════════════════════════════════
 * LA ISLA FLOTANTE — la piel del motor de escenas por capas.
 *
 * Salió entera de `features/ecosistema/EscenaHogar.css`, que sabía pintar una
 * isla y solo una. Aquí no hay nada del Hogar: lo que era «el humo de ESTA
 * chimenea» es ahora «una capa con `data-vida="humo"`», y cualquier isla que
 * traiga humo lo tiene sin escribir una línea de CSS.
 * ═══════════════════════════════════════════════════════════════════════════ */

.isla {
	position: relative;
}

/* El marco de papel. Sin él la isla flota suelta — que es como va en el cielo. */
.isla--enmarcada {
	overflow: hidden;
	background: #fffdf8;
	border: var(--border-width-strong) solid var(--border);
	border-radius: var(--radius-2xl);
	box-shadow: var(--shadow-card);
}

/*
 * El lienzo mantiene la proporción del dibujo original, así que las piezas colocadas en %
 * caen exactamente donde estaban en la ilustración, a cualquier ancho.
 * `touch-action: pan-y` deja que el dedo siga pudiendo scrollear la página hacia abajo: el
 * paralaje se queda con el movimiento lateral y no secuestra la navegación.
 */
.isla__lienzo {
	--recorrido: 10px;
	--mx: 0;
	--my: 0;
	position: relative;
	aspect-ratio: var(--isla-proporcion, 4 / 3);
	touch-action: pan-y;
}

.isla__pieza {
	position: absolute;
	height: auto;
	pointer-events: none;
	user-select: none;
	transform: translate3d(
		calc(var(--mx) * var(--z) * var(--recorrido)),
		calc(var(--my) * var(--z) * var(--recorrido) * 0.6),
		0
	);
	transition:
		transform 0.45s var(--ease),
		filter 0.3s var(--ease);
}

/* ── vida propia ──────────────────────────────────────────────────────────
   Cada bicho anima solo porque cada uno es su propio fichero. El humo sube y se
   deshace, la llama late y lo que revolotea va a su aire. */

.isla__pieza[data-vida='humo'] {
	transform-origin: 50% 100%;
	animation: isla-humo 7s var(--ease) infinite;
}

.isla__pieza[data-vida='llama'] {
	transform-origin: 50% 88%;
	animation: isla-llama 1.9s ease-in-out infinite;
}

.isla__pieza[data-vida='revoloteo'] {
	animation: isla-revoloteo 9s ease-in-out infinite;
}

/* El rescoldo: el halo cálido que una hoguera derrama sobre la hierba. */
.isla__resplandor {
	position: absolute;
	z-index: 5;
	pointer-events: none;
	background: radial-gradient(ellipse at center, rgba(255, 176, 60, 0.42), rgba(255, 176, 60, 0) 70%);
	border-radius: 50%;
	animation: isla-brasa 1.9s ease-in-out infinite;
}

@keyframes isla-humo {
	0% {
		opacity: 0.25;
		transform: translate3d(0, 8px, 0) scale(0.86);
	}
	45% {
		opacity: 0.95;
		transform: translate3d(4px, -4px, 0) scale(1.04);
	}
	100% {
		opacity: 0;
		transform: translate3d(10px, -22px, 0) scale(1.24);
	}
}

@keyframes isla-llama {
	0%,
	100% {
		transform: scale(1, 1);
	}
	50% {
		transform: scale(1.05, 0.94);
	}
}

@keyframes isla-brasa {
	0%,
	100% {
		opacity: 0.75;
	}
	50% {
		opacity: 1;
	}
}

@keyframes isla-revoloteo {
	0%,
	100% {
		transform: translate3d(0, 0, 0);
	}
	33% {
		transform: translate3d(6px, -7px, 0);
	}
	66% {
		transform: translate3d(-5px, 4px, 0);
	}
}

/* ── las zonas que se tocan ───────────────────────────────────────────────
   Van recortadas con la silueta del dibujo (`clip-path`), así que el toque cae
   donde se ve la pieza y no en su rectángulo transparente. */

.isla__zona {
	position: absolute;
	z-index: 40;
	display: block;
	/* Una zona puede ser `<a>`, `<button>` o `<Link>` según lo que haga (ver `pieza.ts`).
	   El botón trae borde, relleno y tipografía propios del navegador: se le quitan aquí
	   para que las tres se recorten y se toquen exactamente igual. */
	padding: 0;
	font: inherit;
	color: inherit;
	cursor: pointer;
	/* Sin fondo no habría nada que recortar y el hover no tendría dónde ocurrir. */
	background: rgba(255, 255, 255, 0.001);
	border: 0;
	-webkit-tap-highlight-color: transparent;
}

/* Cuando llega por teclado no hay dedo que señale: el halo lo dice. */
.isla__zona:focus-visible {
	outline: var(--border-width-strong) dashed var(--da-wood-2);
	outline-offset: 2px;
}

/* La pieza responde al toque: se levanta un poco y se recorta contra el resto. */
.isla__pieza[data-viva='true'] {
	filter: drop-shadow(0 8px 10px rgba(0, 0, 0, 0.22)) brightness(1.06);
	transform: translate3d(
			calc(var(--mx) * var(--z) * var(--recorrido)),
			calc(var(--my) * var(--z) * var(--recorrido) * 0.6 - 7px),
			0
		)
		scale(1.015);
}

/* Y lo que no señalas se aparta: baja un punto de luz para que no compita. */
.isla[data-zona] .isla__pieza:not([data-viva='true']) {
	filter: brightness(0.93) saturate(0.88);
}

/* ── una zona encendida ───────────────────────────────────────────────────
   La enciende quien monta la isla (`encendida`), no el dedo. La pieza brilla
   cálida —es un cartel recién clavado con la hoguera al lado— y el resto de la
   escena baja un punto para que se vea de dónde sale la luz. */

.isla__pieza[data-encendida='true'] {
	filter: drop-shadow(0 0 14px rgba(255, 196, 90, 0.95)) drop-shadow(0 0 34px rgba(255, 170, 40, 0.55)) brightness(1.18)
		saturate(1.12);
	animation: isla-encendida 1.6s ease-in-out infinite alternate;
}

.isla[data-encendida] .isla__pieza:not([data-encendida='true']) {
	filter: brightness(0.82) saturate(0.85);
}

@keyframes isla-encendida {
	from {
		filter: drop-shadow(0 0 10px rgba(255, 196, 90, 0.8)) drop-shadow(0 0 26px rgba(255, 170, 40, 0.4)) brightness(1.12)
			saturate(1.08);
	}
	to {
		filter: drop-shadow(0 0 16px rgba(255, 196, 90, 1)) drop-shadow(0 0 40px rgba(255, 170, 40, 0.65)) brightness(1.22)
			saturate(1.15);
	}
}

/* ── el cartel de abajo ───────────────────────────────────────────────────
   Dice a dónde lleva lo que estás señalando. */

.isla__cartel {
	padding: 0.6rem 1rem;
	margin: 0;
	font-family: var(--font-poster);
	font-size: 0.9rem;
	color: #fff8ec;
	text-align: center;
	letter-spacing: var(--tracking-label);
	background: var(--da-wood-1);
	border-top: var(--border-width-strong) solid var(--border);
	transition: background 0.3s var(--ease);
}

.isla__cartel[data-abierto='true'] {
	background: var(--da-wood-2);
}

.isla__cartel strong {
	font-weight: var(--fw-bold);
}

/* Quien pide menos movimiento ve la misma escena, quieta — y con los mismos enlaces. */
@media (prefers-reduced-motion: reduce) {
	.isla__lienzo {
		--recorrido: 0px;
	}

	.isla__pieza,
	.isla__resplandor {
		animation: none;
	}

	/* Encendida sigue encendida: se quita el latido, no la luz. */
	.isla__pieza[data-encendida='true'] {
		filter: drop-shadow(0 0 14px rgba(255, 196, 90, 0.95)) brightness(1.18);
	}

	.isla__pieza {
		transition: none;
	}
}

/* La página de grupos · lo propio de aquí. Los tokens, las fuentes y la isla vienen de la app en cada build
   (construir.mjs los pone delante). Lo que se escribe aquí y guste más que la app, se porta a la app. */

*,
*::before,
*::after {
	box-sizing: border-box;
}
[hidden] {
	display: none !important;
}
html {
	-webkit-text-size-adjust: 100%;
	scroll-behavior: smooth;
	scroll-padding-top: 64px;
}
body {
	margin: 0;
	background: var(--da-surface);
	color: var(--da-ink);
	font: 400 15px/1.45 var(--font-body);
	overflow-x: clip;
}
a {
	color: inherit;
}
button {
	font: inherit;
	color: inherit;
}
img {
	max-width: 100%;
}

/* ── la cinta de demo ─────────────────────────────────────────────────── */
.demo__cinta {
	display: flex;
	gap: 10px;
	align-items: center;
	justify-content: center;
	padding: 7px 16px;
	background: #1e1b16;
	color: #fff;
	font: 600 12.5px/1.3 var(--font-body);
	text-align: center;
}
.demo__que {
	padding: 0;
	border: 0;
	background: none;
	color: #c6e04b;
	text-decoration: underline;
	cursor: pointer;
}
.demo__panel {
	padding: 12px 16px 14px;
	background: #2a261f;
	color: #eee;
	font-size: 13.5px;
}
.demo__panel p {
	max-width: 640px;
	margin: 0 auto 6px;
}

/* ── la cabecera ──────────────────────────────────────────────────────── */
.gh {
	max-width: 760px;
	margin: 0 auto;
	padding: 18px 16px 8px;
}
.gh__marca {
	display: flex;
	gap: 8px;
	align-items: center;
	margin: 0 0 6px;
	color: var(--da-gray-ink);
	font: 600 12px/1 var(--font-body);
	letter-spacing: 0.08em;
	text-transform: uppercase;
}
.gh__marca img {
	width: 22px;
	height: 22px;
}
.gh__h1 {
	margin: 0;
	font: 800 clamp(30px, 8vw, 44px) / 1.02 var(--font-adventure);
	letter-spacing: -0.02em;
}
.gh__sub {
	margin: 8px 0 0;
	color: var(--da-gray-ink);
	font-size: 16px;
}
.gh__isla {
	position: relative;
	max-width: 330px;
	margin: -4px auto -14px;
}
@media (min-width: 640px) {
	.gh__isla {
		max-width: 440px;
	}
}

/* ── las cifras ───────────────────────────────────────────────────────── */
.cifras {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: 8px;
	margin: 14px 0 0;
}
@media (min-width: 640px) {
	.cifras {
		grid-template-columns: repeat(4, minmax(0, 1fr));
	}
}
.cifra {
	padding: 10px 12px 9px;
	border: var(--border-width) solid var(--da-border);
	border-radius: var(--radius-lg);
	background: var(--da-paper);
}
.cifra__n {
	display: block;
	font: 800 23px/1 var(--font-adventure);
	letter-spacing: -0.01em;
}
.cifra__que {
	display: block;
	margin-top: 4px;
	color: var(--da-gray-ink);
	font-size: 12.5px;
	line-height: 1.3;
}
.historia-sec {
	margin: 28px 0 0;
}
.historia {
	margin: 10px 0 0;
	padding: 12px;
	border: var(--border-width) solid var(--da-border);
	border-radius: var(--radius-lg);
	background: var(--da-paper);
}
.historia__t {
	margin: 0 0 8px;
	font: 700 13px/1.3 var(--font-body);
}
.historia__barras {
	display: grid;
	grid-template-columns: repeat(var(--anos), minmax(0, 1fr));
	gap: 8px;
	align-items: end;
	height: 92px;
}
.historia__ano {
	display: flex;
	flex-direction: column;
	gap: 3px;
	align-items: center;
	justify-content: flex-end;
	height: 100%;
	font-size: 11px;
}
.historia__barra {
	width: 100%;
	min-height: 3px;
	border-radius: 2px 2px 0 0;
	background: var(--da-accent);
}
.historia__ano b {
	font-size: 12px;
}
.historia__pie {
	margin: 8px 0 0;
	color: var(--da-gray-ink);
	font-size: 12.5px;
}
.fuente {
	margin: 8px 0 0;
	color: var(--da-gray-ink);
	font-size: 12px;
}
.fuente summary {
	cursor: pointer;
}

/* ── ¿quién eres? ─────────────────────────────────────────────────────── */
.quien {
	max-width: 760px;
	margin: 18px auto 0;
	padding: 0 16px;
}
.quien > * {
	max-width: 100%;
}
.quien__t {
	margin: 0;
	font: 800 22px/1.15 var(--font-adventure);
}
.quien__sub {
	margin: 4px 0 10px;
	color: var(--da-gray-ink);
	font-size: 14px;
}
.quien__roles {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: 8px;
}
@media (min-width: 640px) {
	.quien__roles {
		grid-template-columns: repeat(5, minmax(0, 1fr));
	}
}
/* Cinco roles desde el 29/09 (el lite): en el móvil, el último ocupa la fila entera. */
@media (max-width: 639px) {
	.quien__roles > .rol:last-child:nth-child(odd) {
		grid-column: 1 / -1;
	}
}
.rol {
	display: flex;
	flex-direction: column;
	gap: 2px;
	align-items: flex-start;
	padding: 10px 12px;
	border: var(--border-width-strong) solid var(--da-border);
	border-left: 5px solid var(--rol-color);
	border-radius: var(--radius-lg);
	background: var(--da-paper);
	text-align: left;
	cursor: pointer;
	transition:
		transform 0.15s var(--ease),
		box-shadow 0.15s var(--ease);
}
.rol b {
	font: 700 15px/1.2 var(--font-body);
}
.rol span {
	color: var(--da-gray-ink);
	font-size: 12.5px;
}
.rol[aria-checked='true'] {
	border-color: var(--rol-color);
	background: color-mix(in srgb, var(--rol-color) 12%, var(--da-paper));
	box-shadow: 0 0 0 3px color-mix(in srgb, var(--rol-color) 30%, transparent);
}
.rol[aria-checked='true'] b::after {
	content: ' ✓';
}
.rol:active {
	transform: scale(0.98);
}
.rol--nuevo {
	--rol-color: var(--da-gray);
}
.rol--grumete {
	--rol-color: var(--da-grumete);
}
.rol--miembro {
	--rol-color: var(--da-member);
}
.rol--colaborador {
	--rol-color: var(--da-partner);
}
.quien__zona {
	display: flex;
	gap: 8px;
	align-items: center;
	margin: 10px 0 0;
	font-weight: 600;
}
.quien__zona select {
	flex: 1;
	min-width: 0;
	padding: 9px 10px;
	border: var(--border-width-strong) solid var(--da-border);
	border-radius: var(--radius-pill);
	background: var(--da-paper);
	font: 500 15px/1.2 var(--font-body);
}
.quien__ayuda {
	margin: 8px 0 0;
	font-size: 13px;
}
.quien__ayuda a {
	color: var(--da-gray-ink);
}
.quien.is-destacado .quien__roles {
	animation: latido 0.8s var(--ease) 2;
}
@keyframes latido {
	50% {
		transform: scale(1.02);
	}
}

/* ── la barra de filtros ─────────────────────────────────────────────── */
.filtros {
	position: sticky;
	top: 0;
	z-index: 10;
	background: color-mix(in srgb, var(--da-surface) 92%, transparent);
	backdrop-filter: blur(8px);
	border-bottom: var(--border-width) solid var(--da-border-soft);
}
.filtros__in {
	max-width: 760px;
	margin: 0 auto;
	padding: 10px 16px 8px;
}
.buscador {
	display: flex;
	gap: 8px;
	align-items: center;
	padding: 0 12px;
	border: var(--border-width-strong) solid var(--da-border);
	border-radius: var(--radius-pill);
	background: var(--da-paper);
}
.buscador:focus-within {
	border-color: var(--da-accent);
	box-shadow: 0 0 0 3px var(--focus-ring);
}
.buscador input {
	flex: 1;
	min-width: 0;
	padding: 10px 0;
	border: 0;
	outline: 0;
	background: none;
	font: 400 16px/1.2 var(--font-body);
}
.chips {
	display: flex;
	gap: 6px;
	margin: 8px -16px 0;
	padding: 0 16px 2px;
	overflow-x: auto;
	scrollbar-width: none;
}
.chips::-webkit-scrollbar {
	display: none;
}
.chip {
	flex: none;
	padding: 6px 12px;
	border: var(--border-width) solid var(--da-border);
	border-radius: var(--radius-pill);
	background: var(--da-paper);
	font: 600 13px/1.2 var(--font-body);
	cursor: pointer;
	white-space: nowrap;
}
.chip[aria-pressed='true'] {
	border-color: var(--da-ink);
	background: var(--da-ink);
	color: #fff;
}
.chip__n {
	margin-left: 4px;
	opacity: 0.6;
	font-weight: 500;
}

.leyenda {
	margin: 12px 0 0;
	color: var(--da-gray-ink);
	font-size: 12.5px;
}

/* ── las secciones ───────────────────────────────────────────────────── */
.lista {
	max-width: 760px;
	margin: 0 auto;
	padding: 4px 16px 40px;
}
.sec {
	margin: 22px 0 0;
}
.sec__t {
	display: flex;
	gap: 8px;
	align-items: baseline;
	margin: 0;
	font: 800 21px/1.15 var(--font-adventure);
}
.sec__t small {
	color: var(--da-gray-ink);
	font: 600 13px/1 var(--font-body);
}
.sec__sub {
	margin: 4px 0 10px;
	color: var(--da-gray-ink);
	font-size: 14px;
}
.casa {
	margin: 14px 0 0;
}
.casa__t {
	display: flex;
	flex-wrap: wrap;
	gap: 2px 10px;
	align-items: baseline;
	margin: 0 0 6px;
	font: 700 12px/1.3 var(--font-body);
	letter-spacing: 0.08em;
	text-transform: uppercase;
}
.casa__t span {
	color: var(--da-gray-ink);
	font-weight: 500;
	letter-spacing: 0;
	text-transform: none;
}
.filas {
	overflow: hidden;
	border: var(--border-width) solid var(--da-border);
	border-radius: var(--radius-lg);
	background: var(--da-paper);
}
.vacio {
	padding: 24px 0;
	color: var(--da-gray-ink);
	text-align: center;
}

/* ── una fila: como la lista de chats de WhatsApp ────────────────────── */
.fila {
	display: grid;
	grid-template-columns: 48px minmax(0, 1fr) auto;
	gap: 12px;
	align-items: center;
	width: 100%;
	padding: 10px 12px;
	border: 0;
	border-top: var(--border-width) solid var(--da-border-soft);
	background: none;
	text-align: left;
	cursor: pointer;
}
.fila:first-child {
	border-top: 0;
}
.fila:hover {
	background: var(--da-paper-soft);
}
.fila:focus-visible {
	outline: 2px solid var(--da-accent);
	outline-offset: -2px;
}
.ava {
	position: relative;
	display: grid;
	place-items: center;
	width: 48px;
	height: 48px;
	border-radius: var(--radius-pill);
	background: var(--ava-fondo, var(--accent-tint));
	box-shadow: 0 0 0 2px var(--da-paper), 0 0 0 4px var(--ava-aro, transparent);
	font-size: 24px;
	line-height: 1;
}
.ava--lg {
	width: 92px;
	height: 92px;
	font-size: 46px;
	box-shadow: 0 0 0 3px var(--da-paper), 0 0 0 6px var(--ava-aro, transparent);
}
.fila__txt {
	min-width: 0;
}
.fila__nombre {
	display: block;
	overflow: hidden;
	font: 600 15.5px/1.25 var(--font-body);
	text-overflow: ellipsis;
	white-space: nowrap;
}
.fila__linea {
	display: block;
	overflow: hidden;
	margin-top: 2px;
	color: var(--da-gray-ink);
	font-size: 13px;
	text-overflow: ellipsis;
	white-space: nowrap;
}
.fila__lado {
	display: flex;
	flex-direction: column;
	gap: 4px;
	align-items: flex-end;
}
.acceso {
	padding: 2px 8px;
	border-radius: var(--radius-pill);
	background: var(--da-paper-soft);
	color: var(--da-gray-ink);
	font: 700 11px/1.4 var(--font-body);
	white-space: nowrap;
}
.acceso--miembros {
	background: var(--member-tint);
	color: var(--text-member);
}
.acceso--grumetes {
	background: var(--grumete-tint-solid);
	color: var(--da-grumete-ink);
}
.acceso--equipo {
	background: var(--partner-tint);
	color: var(--text-partner);
}
.acceso--espera {
	background: var(--accent-tint-solid);
	color: var(--da-accent-text);
}
.acceso--entras {
	background: #dcf5e4;
	color: #0b6b35;
}
.acceso--cuenta {
	background: var(--grumete-tint-solid);
	color: var(--da-grumete-ink);
}
.acceso--pedido {
	background: #0b7a3e;
	color: #fff;
}
.acceso--previa {
	border: 1px dashed var(--da-partner-ink);
	background: none;
	color: var(--text-partner);
}
.acceso--archivado {
	border: 1px solid var(--da-gray-line);
	background: var(--da-paper-2);
	color: var(--da-gray-ink);
}
/* Un archivado se ve apagado, pero se puede abrir: su historia sigue ahí. */
.sec--archivados .fila {
	opacity: 0.72;
}
.pulso {
	font-size: 12px;
	white-space: nowrap;
}

/* El aro dice a quién está abierto, como el aro de rol de la app. */
.aro--miembros {
	--ava-aro: var(--da-member);
}
.aro--grumetes {
	--ava-aro: var(--da-grumete);
}
.aro--equipo {
	--ava-aro: var(--da-partner);
}
.aro--todos {
	--ava-aro: var(--da-accent);
}
.fondo--lugar {
	--ava-fondo: #eef3d2;
}
.fondo--tematico,
.fondo--recurrente {
	--ava-fondo: #f7e8f6;
}
.fondo--avisos {
	--ava-fondo: #eef0f2;
}
.fondo--equipo,
.fondo--ecosistema {
	--ava-fondo: var(--da-partner-wash);
}

/* ── los ecosistemas de colaborador: otro color, dentro del Hogar ─────── */
.sec--colaboradores .filas {
	border-color: color-mix(in srgb, var(--da-partner) 55%, transparent);
	background: linear-gradient(180deg, var(--da-partner-wash), var(--da-paper) 60%);
}
.fila--previa .fila__nombre {
	color: var(--text-partner);
}
.fila--previa .ava {
	outline: 1.5px dashed var(--da-partner-ink);
	outline-offset: 4px;
	box-shadow: none;
}

/* ── la lista de espera ──────────────────────────────────────────────── */
.barra {
	display: block;
	height: 6px;
	margin-top: 6px;
	overflow: hidden;
	border-radius: var(--radius-pill);
	background: var(--da-paper-soft);
}
.barra i {
	display: block;
	height: 100%;
	border-radius: inherit;
	background: var(--da-accent);
}

.casa.is-tuya .casa__t::after {
	content: '· tu zona';
	color: var(--da-member-ink);
	letter-spacing: 0;
	text-transform: none;
}
.casa.is-tuya .filas {
	border-color: var(--da-member);
	box-shadow: 0 0 0 2px var(--member-tint);
}
.fila.is-pedido .fila__nombre::after {
	content: ' ✓';
	color: #0b7a3e;
}

/* ── lo pedido: la barra de abajo ────────────────────────────────────── */
.pedidos {
	position: fixed;
	right: 12px;
	bottom: calc(12px + env(safe-area-inset-bottom));
	left: 12px;
	z-index: 30;
	display: flex;
	gap: 10px;
	align-items: center;
	justify-content: space-between;
	max-width: 620px;
	margin: 0 auto;
	padding: 8px 8px 8px 16px;
	border-radius: var(--radius-pill);
	background: #0b3d23;
	color: #fff;
	box-shadow: var(--shadow-float);
	animation: sube 0.35s var(--ease);
}
.pedidos__txt {
	font: 600 14px/1.2 var(--font-body);
}
.pedidos__btn {
	flex: none;
	padding: 9px 16px;
	border: 0;
	border-radius: var(--radius-pill);
	background: var(--da-wa);
	color: #06331b;
	font: 700 14px/1 var(--font-body);
	cursor: pointer;
}
@keyframes sube {
	from {
		transform: translateY(140%);
	}
}
.lista {
	padding-bottom: 96px;
}

/* ── tu caso, en la hoja ─────────────────────────────────────────────── */
.caja--caso {
	position: relative;
	overflow: hidden;
	border-left: 5px solid var(--caso, var(--da-accent));
}
.caso--entras {
	--caso: #25d366;
}
.caso--cuenta {
	--caso: var(--da-grumete);
}
.caso--miembros {
	--caso: var(--da-member);
}
.caso--equipo {
	--caso: var(--da-partner);
}
.caso--espera,
.caso--previa {
	--caso: var(--da-accent);
}
.enlace {
	display: inline;
	padding: 0;
	border: 0;
	background: none;
	color: #0b7a3e;
	font-weight: 600;
	text-decoration: underline;
	cursor: pointer;
}
.sello {
	position: absolute;
	top: 10px;
	right: -6px;
	padding: 4px 14px;
	border: 2px solid #0b7a3e;
	border-radius: 4px;
	color: #0b7a3e;
	font: 800 13px/1 var(--font-body);
	letter-spacing: 0.12em;
	text-transform: uppercase;
	transform: rotate(8deg);
	animation: sello 0.45s cubic-bezier(0.2, 1.6, 0.4, 1);
}
@keyframes sello {
	from {
		opacity: 0;
		transform: rotate(8deg) scale(2.2);
	}
}
.quitar {
	border: 0;
	background: none;
	color: var(--da-gray-ink);
	font-size: 15px;
	cursor: pointer;
}

/* ── la hoja: «Info. del grupo» de WhatsApp ───────────────────────────── */
.velo {
	position: fixed;
	inset: 0;
	z-index: 40;
	background: var(--da-veil);
	opacity: 0;
	transition: opacity 0.25s var(--ease);
}
.velo.is-on {
	opacity: 1;
}
.hoja {
	position: fixed;
	right: 0;
	bottom: 0;
	left: 0;
	z-index: 41;
	display: flex;
	flex-direction: column;
	max-width: 620px;
	max-height: 92vh;
	max-height: 92dvh;
	margin: 0 auto;
	border-radius: 14px 14px 0 0;
	background: #efeae2;
	box-shadow: var(--shadow-modal);
	transform: translateY(100%);
	transition: transform 0.32s var(--ease);
}
.hoja.is-on {
	transform: none;
}
@media (min-width: 700px) {
	.hoja {
		top: 50%;
		bottom: auto;
		border-radius: 14px;
		transform: translate(0, -45%) scale(0.98);
		opacity: 0;
		transition:
			transform 0.3s var(--ease),
			opacity 0.2s;
	}
	.hoja.is-on {
		transform: translate(0, -50%);
		opacity: 1;
	}
}
.hoja__barra {
	display: flex;
	flex: none;
	align-items: center;
	justify-content: space-between;
	padding: 8px 8px 0 16px;
}
.hoja__asa {
	width: 38px;
	height: 4px;
	margin: 0 auto;
	border-radius: 4px;
	background: rgba(0, 0, 0, 0.18);
}
.hoja__x {
	display: grid;
	place-items: center;
	width: 36px;
	height: 36px;
	border: 0;
	border-radius: var(--radius-pill);
	background: rgba(0, 0, 0, 0.06);
	font-size: 16px;
	cursor: pointer;
}
.hoja__x:focus:not(:focus-visible) {
	outline: none;
}
.hoja__x:focus-visible {
	outline: 2px solid var(--da-accent);
	outline-offset: 2px;
}
.hoja__cuerpo {
	flex: 1;
	padding: 0 12px 12px;
	overflow-y: auto;
	overscroll-behavior: contain;
}
.hoja__pie {
	display: grid;
	flex: none;
	gap: 6px;
	padding: 10px 12px calc(12px + env(safe-area-inset-bottom));
	border-top: var(--border-width) solid var(--da-border);
	background: var(--da-paper);
}

.info {
	padding: 6px 4px 14px;
	text-align: center;
}
.info .ava {
	margin: 4px auto 10px;
}
.info__nombre {
	margin: 0;
	font: 700 21px/1.2 var(--font-body);
	overflow-wrap: anywhere;
}
.info__sub {
	margin: 4px 0 0;
	color: var(--da-gray-ink);
	font-size: 14px;
}
.info__chips {
	display: flex;
	flex-wrap: wrap;
	gap: 6px;
	justify-content: center;
	margin: 10px 0 0;
}
.acciones {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: 8px;
	margin: 0 0 10px;
}
.accion {
	display: flex;
	flex-direction: column;
	gap: 4px;
	align-items: center;
	padding: 10px 4px;
	border: 0;
	border-radius: 10px;
	background: var(--da-paper);
	color: var(--da-ink);
	font: 600 12.5px/1.2 var(--font-body);
	text-decoration: none;
	cursor: pointer;
}
.accion__i {
	font-size: 20px;
	line-height: 1;
}
.accion--si {
	color: #0b7a3e;
}
.caja {
	margin: 0 0 10px;
	padding: 12px 14px;
	border-radius: 10px;
	background: var(--da-paper);
}
.caja__t {
	margin: 0 0 6px;
	color: #0b7a3e;
	font: 600 13px/1.3 var(--font-body);
}
.wa-texto {
	margin: 0;
	font-size: 15px;
	line-height: 1.45;
	overflow-wrap: anywhere;
	white-space: pre-line;
}
.dato {
	display: grid;
	grid-template-columns: 26px minmax(0, 1fr);
	gap: 8px;
	padding: 7px 0;
	border-top: var(--border-width) solid var(--da-border-soft);
	font-size: 14.5px;
}
.dato:first-of-type {
	border-top: 0;
}
.dato__i {
	font-size: 17px;
	line-height: 1.3;
	text-align: center;
}
.dato small {
	display: block;
	color: var(--da-gray-ink);
	font-size: 12.5px;
}
.dato a {
	color: #0b7a3e;
	font-weight: 600;
}
.chispa {
	display: block;
	width: 100%;
	height: 44px;
	margin: 6px 0 2px;
}
.chispa__pie {
	display: flex;
	justify-content: space-between;
	color: var(--da-gray-ink);
	font-size: 11px;
}
.hermanos {
	margin: 0;
	padding: 0;
	list-style: none;
}
.hermanos li {
	display: flex;
	justify-content: space-between;
	padding: 6px 0;
	border-top: var(--border-width) solid var(--da-border-soft);
	font-size: 14px;
}
.hermanos li:first-child {
	border-top: 0;
}
.hermanos .es-turno {
	font-weight: 700;
}
.nota {
	margin: 6px 0 0;
	color: var(--da-gray-ink);
	font-size: 12.5px;
}

/* Los botones del pie: el principal, verde WhatsApp si lleva a WhatsApp. */
.boton {
	display: flex;
	gap: 8px;
	align-items: center;
	justify-content: center;
	min-height: 48px;
	padding: 12px 16px;
	border: 0;
	border-radius: var(--radius-pill);
	font: 700 15.5px/1.2 var(--font-body);
	text-align: center;
	text-decoration: none;
	cursor: pointer;
}
.boton--wa {
	background: var(--da-wa);
	color: #06331b;
}
.boton--marca {
	background: var(--da-accent);
	color: var(--da-accent-ink);
	box-shadow: 0 3px 0 var(--da-accent-shadow);
}
.boton--suave {
	min-height: 40px;
	padding: 8px 12px;
	background: none;
	color: var(--da-ink);
	font-weight: 600;
	font-size: 14px;
	text-decoration: underline;
}

/* ── el pie de la página ─────────────────────────────────────────────── */
.pie {
	max-width: 760px;
	margin: 0 auto;
	padding: 8px 16px 48px;
}
.pie__caja {
	padding: 16px;
	border-radius: var(--radius-lg);
	background: #1e1b16;
	color: #fff;
}
.pie__caja h2 {
	margin: 0 0 6px;
	font: 800 20px/1.2 var(--font-adventure);
}
.pie__caja p {
	margin: 0 0 12px;
	color: #d8d4cc;
	font-size: 14px;
}
.pie__enlaces {
	display: grid;
	gap: 8px;
	margin: 12px 0 0;
}
.pie__enlaces a {
	display: flex;
	justify-content: space-between;
	padding: 12px 14px;
	border: var(--border-width) solid var(--da-border);
	border-radius: var(--radius-lg);
	background: var(--da-paper);
	font-weight: 600;
	text-decoration: none;
}

.aviso {
	visibility: hidden;
	position: fixed;
	top: 14px;
	left: 50%;
	max-width: calc(100% - 32px);
	text-align: center;
	z-index: 60;
	padding: 10px 16px;
	border-radius: var(--radius-pill);
	background: #1e1b16;
	color: #fff;
	font-size: 14px;
	transform: translate(-50%, -180%);
	transition: transform 0.25s var(--ease);
}
.aviso.is-on {
	visibility: visible;
	transform: translate(-50%, 0);
}

@media (prefers-reduced-motion: reduce) {
	html {
		scroll-behavior: auto;
	}
	.hoja,
	.velo,
	.aviso {
		transition: none;
	}
	.isla__pieza,
	.isla__resplandor,
	.sello,
	.pedidos,
	.quien.is-destacado .quien__roles {
		animation: none !important;
	}
}

/* ── El embajador de un grupo (28/09/2026): su cara pequeña en la fila y su caja en la hoja ── */
.ava__emb {
	position: absolute;
	right: -4px;
	bottom: -4px;
	width: 22px;
	height: 22px;
	border-radius: var(--radius-pill);
	box-shadow: 0 0 0 2px var(--da-paper);
	object-fit: cover;
}
.caja--guia {
	display: grid;
	grid-template-columns: 52px minmax(0, 1fr);
	gap: 12px;
	align-items: start;
}
.guia__cara {
	width: 52px;
	height: 52px;
	border-radius: var(--radius-pill);
	object-fit: cover;
	box-shadow: 0 0 0 2px var(--da-paper), 0 0 0 4px var(--ava-aro-equipo, #00dc9b);
}
.guia__cara--sin {
	display: grid;
	place-items: center;
	background: var(--da-paper-soft);
	font-size: 26px;
}
.guia__txt .caja__t {
	margin-bottom: 2px;
}
.guia__nombre {
	margin: 0;
	font-size: 16px;
}
.guia__nombre span,
.guia__linea {
	color: var(--da-gray-ink);
	font-size: 13.5px;
}
.guia__linea {
	margin: 2px 0 0;
}
.guia__ir {
	display: inline-block;
	margin-top: 6px;
	color: #0b7a3e;
	font-weight: 700;
	font-size: 14.5px;
}

/* ── «Tus grupos» (28/09/2026) ── */
.tus__fila {
	display: flex;
	gap: 10px;
	align-items: center;
	justify-content: space-between;
	width: 100%;
	min-height: 48px;
	padding: 8px 0;
	border: 0;
	border-top: var(--border-width) solid var(--da-border-soft);
	background: none;
	color: inherit;
	font: inherit;
	text-align: left;
	cursor: pointer;
}
.tus__txt {
	min-width: 0;
}
.tus__txt b {
	display: block;
	font-weight: 600;
	font-size: 15px;
}
.tus__txt small {
	display: block;
	color: var(--da-gray-ink);
	font-size: 12.5px;
}
.caja--falta {
	background: #fff8e6;
}
.falta {
	display: grid;
	grid-template-columns: 26px minmax(0, 1fr);
	gap: 8px;
	padding: 6px 0;
}
.falta__i {
	font-size: 19px;
	line-height: 1.3;
	text-align: center;
}
.falta b {
	display: block;
	font-size: 15px;
}
.falta small {
	display: block;
	color: var(--da-gray-ink);
	font-size: 13px;
}
.falta a {
	display: inline-block;
	margin-top: 3px;
	color: #0b7a3e;
	font-weight: 700;
	font-size: 14px;
}

/* ── «Qué ha pasado aquí» (28/09/2026, detrás de HISTORIAL=1) ── */
.hist__fotos {
	display: flex;
	gap: 10px;
	overflow-x: auto;
	margin: 4px 0 10px;
	padding-bottom: 4px;
}
.hist__pol {
	flex: none;
	width: 128px;
	margin: 0;
	padding: 6px 6px 8px;
	background: #fff;
	box-shadow: 0 1px 4px rgba(0, 0, 0, 0.14);
	transform: rotate(-1.5deg);
}
.hist__pol:nth-child(2) {
	transform: rotate(1.2deg);
}
.hist__pol img {
	display: block;
	width: 100%;
	aspect-ratio: 1;
	object-fit: cover;
}
.hist__pol figcaption {
	margin-top: 5px;
	font: 13px/1.2 'Gochi Hand', var(--font-body);
	text-align: center;
}
.hist__planes {
	margin: 0;
	padding: 0;
	list-style: none;
}
.hist__planes li {
	display: flex;
	gap: 10px;
	justify-content: space-between;
	padding: 6px 0;
	border-top: var(--border-width) solid var(--da-border-soft);
	font-size: 14.5px;
}
.hist__planes li:first-child {
	border-top: 0;
}
.hist__planes small {
	flex: none;
	color: var(--da-gray-ink);
	font-size: 12.5px;
}
