/* Equipo Tagers · el kit (equipo-design, ronda 1, 9 oct 2026; documentado en /kit/). Sembrado en la ronda 0 con los cinco
   conceptos que Jorge aceptó el 24 de septiembre: «crema de fondo, vino para la tinta y las bandas oscuras, oro para el dinero y
   los logros; EightiesComeback para los números grandes y los titulares, Quicksand para lo demás; la foto de la casa como luz».
   Material: papel editorial. Sin vidrio, sin modo oscuro (cocinas y sol); una lámina de noche sólo si es lámina (data-tema="noche").
   Letra de 16 px o más para leer, blancos de 44 px para tocar. Un solo reloj: toda duración sale de --d-1/--d-2/--d-3/--late;
   sólo transform y opacity se mueven (WebKit). Nombres de clase estables: las héroes de otras sesiones los usan; aquí se agrega,
   no se renombra. Un color crudo fuera de :root es un error, salvo dentro de una ilustración. */
@font-face { font-family: "Eighties"; src: url("/fonts/EightiesComeback-Regular.otf") format("opentype"); font-weight: 400; font-display: swap; }
@font-face { font-family: "Eighties"; src: url("/fonts/EightiesComeback-Medium-2.otf") format("opentype"); font-weight: 500; font-display: swap; }
@font-face { font-family: "Quicksand"; src: url("/fonts/quicksand-latin.woff2") format("woff2"); font-weight: 300 700; font-display: swap; }

:root {
  /* ---- el papel ---- */
  --crema: #FAF2E7;        /* el fondo de toda pantalla */
  --papel: #F3E5D1;        /* tarjetas, listas, cifras sobre el crema */
  --papel-2: #EFDDC6;      /* rieles, barras apagadas, el anillo vacío */
  --crema-tenue: #F2E4D3;  /* texto de apoyo sobre vino */
  --barra: #FCF7F0;        /* la barra de pestañas */
  --hoja: #FFFCF7;         /* el campo donde se escribe */
  /* ---- la tinta ---- */
  --vino: #603440;         /* títulos, cifras, botón principal, bandas */
  --vino-claro: #7A4452;   /* la segunda barra de una gráfica */
  --ciruela: #3F1D29;      /* la banda honda, la lámina de noche, el texto sobre oro */
  --tinta: #2B1B20;        /* el texto que se lee */
  --gris: #6B585F;         /* el texto de apoyo (5.3:1 sobre papel; el #7A676D de los conceptos daba 4.25:1) */
  --gris-medio: #7F6C72;   /* pestañas apagadas y textos de muestra (4.6:1) */
  --gris-claro: #9C8A8F;   /* sólo trazos: flechas, rieles, puntos apagados; nunca texto */
  --linea: #E4D2BD;        /* separadores */
  /* ---- el oro: sólo donde la casa firma (dinero, logros, «una mesa te nombró») ---- */
  --oro: #E8AE24; --oro-vivo: #F7BE00; --oro-claro: #F8E3AE; --oro-suave: #F4D9A6; --oro-tinta: #6A4A06;
  /* ---- los estados ---- */
  --rosa: #EBD6C8;
  --verde: #2E7A3C; --verde-claro: #DCEBD9; --verde-tinta: #245B2D;
  --rojo: #B3261E; --rojo-claro: #F4D8D5;
  --azul: #2F5D8A; --azul-claro: #DCE6F0; --azul-tinta: #23476B;
  --espera: #A4593A; --espera-claro: #F5E1D6; --espera-tinta: #7E3F25; /* pendiente, por revisar: terracota, nunca oro */
  --whatsapp-claro: #E6F2D5; /* la burbuja de lo que manda el número de la casa */
  /* ---- sobre vino y ciruela (bandas, la decisión, la cita, la lámina de noche) ---- */
  --sobre-vino: #FAF2E7; --sobre-vino-2: #F2E4D3; --sobre-vino-oro: #F4D9A6;
  --sobre-vino-linea: rgba(250, 242, 231, .25); --sobre-vino-borde: rgba(250, 242, 231, .6); --sobre-vino-velo: rgba(250, 242, 231, .14);
  /* ---- la foto ---- */
  --foto-fondo: #2A160F;   /* lo que se ve mientras la foto llega */
  --velo-foto: linear-gradient(180deg, rgba(20, 8, 6, 0) 38%, rgba(20, 8, 6, .78) 100%);
  --velo-foto-alto: linear-gradient(180deg, rgba(20, 8, 6, 0) 18%, rgba(20, 8, 6, .55) 48%, rgba(20, 8, 6, .88) 100%);
  --sombra-flota: 0 10px 24px -14px rgba(43, 27, 32, .5);
  --sombra-hoja: 0 -18px 50px -20px rgba(43, 27, 32, .45);
  --velo-hoja: rgba(43, 27, 32, .42);
  /* ---- las letras: dos, nunca una tercera ---- */
  --f-display: "Eighties", Georgia, "Times New Roman", serif;
  --f-texto: "Quicksand", system-ui, -apple-system, "Segoe UI", sans-serif;
  --t-numero: 76px;   /* el número de la pantalla: «$5,231» */
  --t-saludo: 38px;   /* «Buenos días, Mateo» */
  --t-titulo: 34px;   /* el título de una pestaña o de una pantalla hija */
  --t-banda: 44px;    /* las cifras de una banda («208 · 4.88 · 4.88») */
  --t-cita: 28px;     /* las palabras de una mesa */
  --t-sub: 24px;      /* un titular secundario en Eighties */
  --t-cuerpo: 16px;   /* lo que se lee: nunca menos */
  --t-apoyo: 16px;    /* la segunda línea: también se lee (el juez, 9 oct: 14 px no alcanza a quien pasa de 40) */
  --t-nota: 16px;     /* notas y rótulos bajo una cifra: se distinguen por peso y color, no por tamaño */
  --t-micro: 12px;    /* sólo etiquetas del marco: pestañas, «pronto», «IA», el horizonte */
  /* ---- el espacio ---- */
  --e-1: 4px; --e-2: 8px; --e-3: 12px; --e-4: 16px; --orilla: 20px; --e-seccion: 26px;
  --r-chico: 12px; --r-tarjeta: 18px; --r-grande: 22px; --r-pastilla: 999px;
  /* ---- un solo reloj ---- */
  --d-1: .18s;   /* lo que contesta al dedo */
  --d-2: .32s;   /* lo que cambia */
  --d-3: .55s;   /* lo que entra */
  --late: 1.6s;  /* lo que respira (el oro que florece) */
  --escalon: 55ms;
  --suave: cubic-bezier(.2, .7, .2, 1); --resorte: cubic-bezier(.3, 1.35, .5, 1); --sale: cubic-bezier(.4, 0, 1, 1);
  /* ---- el marco ---- */
  --alto-pestanas: 74px; --alto-barra: 60px; --blanco: 44px;
}
/* La lámina de noche («Tu año»): los mismos nombres cambian de valor; nada más se oscurece. */
[data-tema="noche"] { color-scheme: dark; --papel: rgba(250, 242, 231, .08); --papel-2: rgba(250, 242, 231, .16); --linea: rgba(250, 242, 231, .18);
  --tinta: var(--sobre-vino); --gris: var(--sobre-vino-2); --c-monto: var(--sobre-vino); }

* { box-sizing: border-box; }
button { font: inherit; color: inherit; -webkit-tap-highlight-color: transparent; touch-action: manipulation; }
img { max-width: 100%; }
:focus-visible { outline: 3px solid var(--oro); outline-offset: 2px; }

/* ---------- el marco ---------- */
/* La letra y la tinta de la casa también en <body>: la hoja (.v2-hoja y su velo) y lo que el cascarón monta fuera de .eq-app la
   heredan de aquí — sin esto, el texto de toda hoja salía en la serif del navegador (ojo O8-1, 2026-10-12). */
/* El papel bajo todo: una página fuera del marco de la app (la de verificar una constancia, sin sesión) quedaba blanca bajo su contenido,
   porque .eq-app { min-height: 100% } no tiene altura que llenar ahí (revisión de la ronda 4, design 1). */
html { background: var(--crema); }
body { color: var(--tinta); font: 500 var(--t-cuerpo)/1.45 var(--f-texto); -webkit-font-smoothing: antialiased; -webkit-text-size-adjust: 100%; text-size-adjust: 100%; }
.eq-app { min-height: 100%; display: flex; flex-direction: column; background: var(--crema); color: var(--tinta);
  font: 500 var(--t-cuerpo)/1.45 var(--f-texto); -webkit-font-smoothing: antialiased; -webkit-text-size-adjust: 100%; }
.eq-lienzo { flex: 1; min-width: 0; padding: calc(var(--arriba, env(safe-area-inset-top, 0px)) + 8px) 0 calc(var(--abajo, env(safe-area-inset-bottom, 0px)) + var(--alto-pestanas) + 72px); }
.eq-cuerpo { display: grid; gap: 14px; padding: 0 var(--orilla); }
/* Lo que el cascarón agrega después de una héroe («Más en esta sección») lleva la misma orilla que la héroe. */
.eq-lienzo > section:not(.heroe) { margin: var(--e-seccion) var(--orilla) 0; }
.eq-barra { position: sticky; top: 0; z-index: 3; display: grid; grid-template-columns: var(--blanco) 1fr auto; align-items: center; gap: 8px;
  margin-top: calc(-1 * (var(--arriba, env(safe-area-inset-top, 0px)) + 8px)); padding: calc(var(--arriba, env(safe-area-inset-top, 0px)) + 6px) 16px 6px;
  background: var(--crema); box-shadow: 0 1px 0 var(--linea); }
.eq-volver { width: var(--blanco); height: var(--blanco); display: grid; place-items: center; padding: 0; border: 0; border-radius: var(--r-pastilla); background: var(--papel); color: var(--vino); cursor: pointer; }
.eq-migas { min-width: 0; font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.eq-cabeza { display: grid; gap: 4px; padding: 14px var(--orilla) 8px; }
.eq-cabeza .date { font-size: var(--t-apoyo); }
.eq-cabeza .title { font-size: var(--t-titulo); }
.eq-cabeza p { margin: 6px 0 0; }
.eq-como { position: fixed; right: 12px; bottom: calc(var(--abajo, env(safe-area-inset-bottom, 0px)) + var(--alto-pestanas) + 10px); z-index: 6;
  display: grid; place-items: center; width: var(--blanco); height: var(--blanco); padding: 0; border: 1.5px solid var(--vino); border-radius: var(--r-pastilla);
  background: var(--crema); color: var(--vino); cursor: pointer; box-shadow: var(--sombra-flota); }
.eq-como .ico { width: 20px; height: 20px; }
.eq-como { transition: transform var(--d-2) var(--suave), opacity var(--d-2) var(--suave); }
.eq-como.se-esconde { transform: translateY(14px) scale(.9); opacity: 0; pointer-events: none; }
.eq-como-barra { position: relative; display: inline-flex; align-items: center; gap: 6px; min-height: 36px; padding: 6px 12px 6px 9px; border: 1.5px solid var(--vino); border-radius: var(--r-pastilla);
  background: transparent; color: var(--vino); font-size: 13px; font-weight: 700; cursor: pointer; white-space: nowrap; }
.eq-como-barra::after { content: ""; position: absolute; inset: -5px -2px; }
.eq-como-barra .ico { width: 16px; height: 16px; }
[data-tema="noche"] ~ .eq-como, .eq-app:has([data-tema="noche"]) .eq-como { background: var(--ciruela); color: var(--sobre-vino); border-color: var(--sobre-vino-borde); }
.eq-pestanas { position: fixed; left: 0; right: 0; bottom: 0; z-index: 5; display: grid; grid-auto-flow: column; grid-auto-columns: 1fr;
  padding: 8px 6px calc(var(--abajo, env(safe-area-inset-bottom, 0px)) + 8px); background: var(--barra); border-top: 1px solid var(--linea); }
.eq-pestanas :is(button, a) { position: relative; display: flex; flex-direction: column; align-items: center; gap: 3px; min-width: 0; min-height: 52px; padding: 4px 0 2px; border: 0; text-decoration: none;
  background: transparent; font-size: var(--t-micro); font-weight: 700; color: var(--gris-medio); cursor: pointer; }
.eq-pestanas .ico { width: 24px; height: 24px; }
.eq-pestanas .mark { width: 5px; height: 5px; border-radius: 50%; margin-top: 1px; }
.eq-pestanas :is(button, a)[aria-current] { color: var(--vino); }
.eq-pestanas :is(button, a)[aria-current] .mark { background: var(--oro); }
.eq-pestanas .pronto { position: absolute; top: -10px; left: 50%; transform: translateX(-50%); padding: 2px 6px; border-radius: 6px; background: var(--oro-claro); color: var(--oro-tinta);
  font-size: 9.5px; line-height: 1.2; letter-spacing: .04em; text-transform: uppercase; box-shadow: 0 0 0 2px var(--barra); }

/* ---------- los iconos (trazo 1.9 en 24 × 24; la lista vive en bloques.js y en /kit/) ---------- */
.ico { width: 22px; height: 22px; display: inline-block; vertical-align: middle; fill: none; stroke: currentColor; stroke-width: 1.9; stroke-linecap: round; stroke-linejoin: round; flex: none; }
.ico.relleno { fill: currentColor; stroke: none; }

/* ---------- el lenguaje (de los cinco conceptos) ---------- */
.pad { padding: 0 var(--orilla); }
.row { display: flex; align-items: center; gap: 12px; }
.muted { color: var(--gris); }
.small { font-size: var(--t-apoyo); }
.strong { font-weight: 700; }
.note { font-size: var(--t-nota); color: var(--gris); }
.hr { height: 1px; background: var(--linea); margin: 14px 0; }
.eighties { font-family: var(--f-display); font-weight: 500; letter-spacing: 0; }
.top { display: flex; justify-content: space-between; align-items: flex-start; gap: 12px; padding: 6px var(--orilla) 0; }
.date { font-size: var(--t-apoyo); color: var(--gris); font-weight: 600; }
.avatar { width: var(--blanco); height: var(--blanco); border-radius: 50%; background: var(--vino); color: var(--crema); display: grid; place-items: center; font-weight: 700; font-size: 14px; letter-spacing: .02em; flex: none; border: 0; padding: 0; cursor: pointer; }
.avatar.chico { width: 34px; height: 34px; font-size: 12px; }
.avatar.oro { background: var(--oro); color: var(--ciruela); }
h1.hello { font-family: var(--f-display); font-weight: 500; font-size: var(--t-saludo); line-height: 1.02; color: var(--vino); margin: 6px 0 8px; }
.lede { font-size: var(--t-cuerpo); font-weight: 600; margin: 0; color: var(--tinta); }
.title { font-family: var(--f-display); font-weight: 500; font-size: var(--t-titulo); color: var(--vino); margin: 4px 0 0; line-height: 1; }
.panel { display: block; background: var(--papel); border-radius: var(--r-tarjeta); padding: 16px; }
.panel + .panel { margin-top: 12px; }
/* Un botón que es pieza de la página: sin borde ni relleno de botón; cada pieza conserva su propio display. */
/* (font y color los hereda cualquier botón desde la regla «button» de arriba, que pesa menos que la clase: así una banda de vino
   conserva su tinta crema; aquí no se repiten) */
:is(button, a).panel, :is(button, a).list, :is(button, a).item, :is(button, a).stat, :is(button, a).hero, :is(button, a).lesson, :is(button, a).quote, :is(button, a).cita, :is(button, a).grow, :is(button, a).yday, :is(button, a).banda, :is(button, a).b-tarjeta, :is(button, a).b-visor, :is(button, a).paso, :is(button, a).step, :is(button, a).renglon, :is(button, a).tick, :is(button, a).anillo {
  border: 0; text-align: left; cursor: pointer; }
:is(button, a).panel, :is(button, a).list, :is(button, a).lesson, :is(button, a).quote, :is(button, a).cita, :is(button, a).grow, :is(button, a).yday, :is(button, a).banda, :is(button, a).b-visor { width: 100%; }
:is(button, a).item, :is(button, a).b-tarjeta, :is(button, a).paso, :is(button, a).step, :is(button, a).renglon, :is(button, a).tick, :is(button, a).anillo { width: 100%; }
:is(button, a).hero { display: block; width: calc(100% - 2 * var(--orilla)); }
:is(button, a).b-visor { display: block; padding: 0; }
.section { margin-top: var(--e-seccion); }
.section-head { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; margin: 0 0 10px; }
.section-head h2 { font-size: 18px; font-weight: 700; margin: 0; color: var(--tinta); }
.section-head a, .section-head .mas { position: relative; font-size: var(--t-apoyo); font-weight: 700; color: var(--vino); text-decoration: none; background: none; border: 0; padding: 0; cursor: pointer; white-space: nowrap; }
.section-head .mas::after, .b-tit .mas::after { content: ""; position: absolute; inset: -14px -8px; }
.hero { position: relative; display: block; margin: 18px var(--orilla) 0; border-radius: var(--r-grande); overflow: hidden; height: 300px; background: var(--foto-fondo); padding: 0; }
.hero.baja { height: 250px; }
.hero img { width: 100%; height: 100%; object-fit: cover; display: block; }
.hero .shade { position: absolute; inset: 0; background: var(--velo-foto); }
.hero.baja .shade { background: var(--velo-foto-alto); }
.hero .cap { position: absolute; left: 18px; right: 18px; bottom: 16px; color: var(--crema); }
.hero .kicker, .kicker { font-size: var(--t-nota); font-weight: 700; color: var(--oro-suave); }
.hero .name { font-family: var(--f-display); font-size: var(--t-titulo); line-height: 1; margin: 4px 0 12px; }
/* El botón de audio: escucha el día, escucha la lección. data-play="<segundos>"; al tocarlo corre su barra de oro y se vuelve pausa. */
.play { display: inline-flex; align-items: center; gap: 10px; min-height: var(--blanco); background: var(--crema); color: var(--vino); border-radius: var(--r-pastilla); padding: 7px 18px 7px 7px; font-weight: 700; font-size: var(--t-apoyo); border: 0; cursor: pointer; position: relative; overflow: hidden; }
.play.vino { background: var(--vino); color: var(--crema); }
.play.vino .dot { background: var(--crema); color: var(--vino); }
.play .dot { position: relative; width: 30px; height: 30px; border-radius: 50%; background: var(--vino); color: var(--crema); display: grid; place-items: center; flex: none; }
.play .dot svg { width: 12px; height: 14px; display: block; transition: opacity var(--d-1) var(--suave); }
.play .dot::before, .play .dot::after { content: ""; position: absolute; top: 9px; width: 3.5px; height: 12px; border-radius: 2px; background: currentColor; opacity: 0; transition: opacity var(--d-1) var(--suave); }
.play .dot::before { left: 10px; } .play .dot::after { right: 10px; }
.play.sonando .dot svg { opacity: 0; }
.play.sonando .dot::before, .play.sonando .dot::after { opacity: 1; }
.play::after { content: ""; position: absolute; left: 0; bottom: 0; height: 3px; width: 100%; background: var(--oro); transform-origin: 0 50%; transform: scaleX(0); }
.play.sonando::after { animation: eq-progreso var(--dura, 60s) linear forwards; }
.play.pausado::after { animation-play-state: paused; }
.list { display: block; background: var(--papel); border-radius: var(--r-tarjeta); overflow: hidden; padding: 0; }
.item { display: flex; gap: 14px; align-items: center; padding: 14px 16px; min-height: 56px; width: 100%; background: transparent; border: 0; text-align: left; color: inherit; }
.item + .item { border-top: 1px solid var(--linea); }
.item .ic { width: 40px; height: 40px; border-radius: var(--r-chico); background: var(--crema); display: grid; place-items: center; flex: none; color: var(--vino); }
.item .txt, .item > div:not(.ic):not(.end) { flex: 1; min-width: 0; }
.item .txt { display: grid; }
.item .t { font-weight: 700; font-size: var(--t-cuerpo); line-height: 1.25; }
.item .s { font-size: var(--t-apoyo); color: var(--gris); margin-top: 2px; line-height: 1.35; }
.item .end { margin-left: auto; font-weight: 700; color: var(--vino); white-space: nowrap; flex: none; }
.item .end.horizonte { font-size: var(--t-micro); }
.item .txt .horizonte { justify-self: start; margin-top: 7px; }
.item .flecha { margin-left: auto; color: var(--gris-claro); width: 18px; height: 18px; }
.item .end + .flecha { margin-left: 0; }
.item .punto { width: 10px; height: 10px; border-radius: 50%; flex: none; background: var(--gris-claro); }
.item .punto[data-estado="verde"] { background: var(--verde); } .item .punto[data-estado="oro"], .item .punto[data-estado="espera"] { background: var(--espera); }
.item .punto[data-estado="rojo"] { background: var(--rojo); } .item .punto[data-estado="azul"] { background: var(--azul); }
.money { font-family: var(--f-display); font-weight: 500; color: var(--vino); line-height: .9; letter-spacing: -.01em; }
.money.big { font-size: var(--t-numero); }
.money sup { font-size: .45em; vertical-align: .9em; margin-right: 2px; }
.pill { display: inline-flex; align-items: center; gap: 6px; border-radius: var(--r-pastilla); padding: 5px 12px; font-size: var(--t-nota); font-weight: 700; border: 0; line-height: 1.3; }
button.pill { min-height: var(--blanco); padding: 8px 14px; font-size: var(--t-apoyo); cursor: pointer; }
.pill.oro { background: var(--oro-claro); color: var(--oro-tinta); }
.pill.vino { background: var(--vino); color: var(--crema); }
.pill.verde { background: var(--verde-claro); color: var(--verde-tinta); }
.pill.rosa { background: var(--rosa); color: var(--vino); }
.pill.rojo { background: var(--rojo-claro); color: var(--rojo); }
.pill.azul { background: var(--azul-claro); color: var(--azul-tinta); }
.pill.espera { background: var(--espera-claro); color: var(--espera-tinta); }
.cuenta-badge { display: inline-grid; place-items: center; min-width: 26px; height: 26px; padding: 0 8px; border-radius: var(--r-pastilla); background: var(--vino); color: var(--crema); font-size: 14px; font-weight: 700; flex: none; }
.ia { display: inline-flex; align-items: center; padding: 1px 6px; border-radius: 6px; background: var(--papel-2); color: var(--vino); font-size: 11px; font-weight: 700; letter-spacing: .04em; vertical-align: 2px; }
.btn { display: flex; align-items: center; justify-content: center; gap: 8px; border-radius: 14px; padding: 13px 16px; font-weight: 700; font-size: var(--t-cuerpo);
  background: var(--vino); color: var(--crema); border: 0; width: 100%; min-height: 48px; cursor: pointer; text-align: center; }
.btn.ghost { background: transparent; color: var(--vino); border: 1.5px solid var(--vino); }
.btn.oro { background: var(--oro); color: var(--ciruela); } /* sólo para un logro (compartir tu año, una mesa te nombró); nunca el botón de todos los días */
.btn.suave { background: var(--papel); color: var(--vino); }
.btn .ico { width: 20px; height: 20px; }
.btn, .item, .atajo, .chip, .stat, .play, .paso, .step, .renglon, .tick, .b-tarjeta, .hero, .panel { transition: transform var(--d-1) var(--suave); }
.btn:active, :is(button, a).item:active, .atajo:active, .chip:active, :is(button, a).stat:active, .play:active, :is(button, a).b-tarjeta:active, :is(button, a).hero:active, :is(button, a).panel:active, :is(button, a).banda:active, :is(button, a).cita:active, :is(button, a).quote:active { transform: scale(.985); }
/* El chip de contorno: «Voy tarde», «Aplaudir». */
.chip, .late, .clap { position: relative; display: inline-flex; align-items: center; gap: 7px; min-height: 40px; border: 1.5px solid var(--vino); color: var(--vino); background: transparent; border-radius: var(--r-pastilla); padding: 6px 14px 6px 12px; font-weight: 700; font-size: var(--t-apoyo); cursor: pointer; }
.chip::after, .late::after, .clap::after { content: ""; position: absolute; inset: -4px -2px; }
.chip .ico, .late svg, .clap svg { width: 17px; height: 17px; }
.chip.lleno { background: var(--vino); color: var(--crema); }
.seg { display: grid; grid-auto-flow: column; grid-auto-columns: 1fr; background: var(--papel); border-radius: 14px; padding: 4px; gap: 4px; }
.seg span, .seg button { display: grid; place-items: center; min-height: var(--blanco); text-align: center; padding: 8px 4px; border-radius: 10px; font-weight: 700; font-size: var(--t-apoyo); color: var(--gris); border: 0; background: transparent; cursor: pointer; }
.seg .on { background: var(--crema); color: var(--vino); box-shadow: 0 1px 2px rgba(43, 27, 32, .08); }
/* a filter row of links (review 6, design 3): the same parts as a link, the current one as .on (aria-current) — one line, nothing wraps to two */
.seg a { display: grid; place-items: center; min-height: var(--blanco); text-align: center; padding: 8px 4px; border-radius: 10px; font-weight: 700; font-size: var(--t-apoyo); line-height: 1.2; color: var(--gris); text-decoration: none; }
.seg a[aria-current] { background: var(--crema); color: var(--vino); box-shadow: 0 1px 2px rgba(43, 27, 32, .08); }
.bars { display: grid; grid-template-columns: repeat(7, 1fr); gap: 8px; align-items: end; height: 150px; margin-top: 18px; }
.bar { display: flex; flex-direction: column; align-items: center; justify-content: flex-end; height: 100%; gap: 6px; }
.bar .v { width: 100%; border-radius: 9px 9px 4px 4px; background: var(--vino); transform-origin: 50% 100%; }
.bar .v.dos { background: var(--vino-claro); }
.bar .v.mejor { background: var(--oro); }
.bar .v.off { background: var(--papel-2); height: 6px !important; border-radius: 4px; }
.bar .amt { font-size: var(--t-micro); font-weight: 700; color: var(--vino); }
.bar .d { font-size: var(--t-nota); font-weight: 700; color: var(--gris); }
.entra .bar .v:not(.off), .bars.entra .bar .v:not(.off) { animation: eq-crece var(--d-3) var(--suave) both; animation-delay: calc(var(--n, 0) * var(--escalon) + 120ms); }
.ring { position: relative; width: 132px; height: 132px; flex: none; }
.ring svg { transform: rotate(-90deg); display: block; }
.ring .c { position: absolute; inset: 0; display: grid; place-items: center; text-align: center; }
.stat { flex: 1; display: block; background: var(--papel); border-radius: var(--r-tarjeta); padding: 14px 16px; text-align: left; }
.stat b { display: block; font-family: var(--f-display); font-weight: 500; font-size: 36px; color: var(--vino); line-height: 1; }
.stat span { display: block; margin-top: 6px; font-size: var(--t-nota); font-weight: 700; color: var(--gris); line-height: 1.3; }
.chips { display: flex; flex-wrap: wrap; gap: 8px; }
.rejilla { display: grid; gap: 10px; }
.rejilla.dos { grid-template-columns: 1fr 1fr; }
.atajo { display: flex; flex-direction: column; gap: 10px; align-items: flex-start; min-height: 112px; padding: 14px; background: var(--papel); border-radius: var(--r-tarjeta); border: 0; text-align: left; color: inherit; cursor: pointer; }
.atajo .a-ico { width: 38px; height: 38px; border-radius: 11px; background: var(--crema); color: var(--vino); display: grid; place-items: center; }
.atajo b { display: block; font-size: 15.5px; line-height: 1.2; }
.atajo small { display: block; font-size: var(--t-nota); color: var(--gris); margin-top: 3px; line-height: 1.3; }
.horizonte { display: inline-flex; align-items: center; gap: 6px; padding: 4px 10px; border-radius: var(--r-pastilla); font-size: var(--t-micro); font-weight: 700; background: var(--papel); color: var(--gris); white-space: nowrap; }
.horizonte[data-h="vive"] { background: var(--verde-claro); color: var(--verde-tinta); }
.horizonte[data-h="siguiente"] { background: var(--oro-claro); color: var(--oro-tinta); }
.horizonte[data-h="despues"] { background: var(--rosa); color: var(--vino); }
.horizonte[data-h="futuro"] { background: var(--papel-2); color: var(--gris); }

/* ---------- las piezas de los conceptos, para todas las héroes ---------- */
/* La banda de vino: «Así nos fue ayer», la decisión, el siguiente paso. .honda = ciruela. */
.banda, .yday { display: block; background: var(--vino); color: var(--sobre-vino); border-radius: var(--r-grande); padding: 18px 18px 16px; }
.banda.honda, .grow { display: block; background: var(--ciruela); color: var(--sobre-vino); border-radius: var(--r-grande); padding: 20px; }
.banda .k, .yday .k { font-size: var(--t-nota); font-weight: 700; color: var(--sobre-vino-oro); }
.banda .numeros, .yday .nums { display: grid; grid-template-columns: 1.1fr 1fr 1fr; gap: 10px; margin: 10px 0 14px; align-items: end; }
.banda .numeros b, .yday .nums b { display: block; font-family: var(--f-display); font-weight: 500; font-size: var(--t-banda); line-height: .9; }
.banda .numeros span, .yday .nums span { display: block; margin-top: 4px; font-size: var(--t-nota); font-weight: 700; color: var(--sobre-vino-2); }
.banda .q, .yday .q { font-family: var(--f-display); font-size: 22px; line-height: 1.12; border-top: 1px solid var(--sobre-vino-linea); padding-top: 12px; }
.banda .who, .yday .who { font-size: var(--t-nota); font-weight: 700; color: var(--sobre-vino-oro); margin-top: 8px; }
.banda p, .grow p { color: var(--sobre-vino-2); font-weight: 600; }
.banda .btn.ghost, .grow .btn.ghost { color: var(--sobre-vino); border-color: var(--sobre-vino-borde); }
/* La cita: lo que dijo una mesa. Con la comilla de oro; florece una vez. */
.cita, .quote { position: relative; display: block; overflow: hidden; isolation: isolate; background: var(--vino); color: var(--sobre-vino); border-radius: 24px; padding: 22px 22px 20px; }
.cita .comilla, .quote .mark { font-family: var(--f-display); font-size: 120px; line-height: .6; color: var(--oro); position: absolute; top: 26px; right: 18px; opacity: .9; pointer-events: none; }
.cita .palabras, .quote .words { font-family: var(--f-display); font-weight: 400; font-size: var(--t-cita); line-height: 1.12; margin: 18px 0 16px; }
.cita .de, .quote .de { font-size: var(--t-nota); font-weight: 700; color: var(--sobre-vino-oro); }
.estrellas, .stars { display: flex; gap: 4px; color: var(--oro-vivo); }
.estrellas .ico, .stars svg { width: 18px; height: 18px; }
/* El camino: una ruta de lecciones (hecho · ahora · sigue). */
.camino, .path { position: relative; }
.camino::before, .path::before { content: ""; position: absolute; left: 21px; top: 22px; bottom: 22px; width: 3px; background: var(--papel-2); border-radius: 3px; }
.paso, .step { position: relative; display: flex; gap: 16px; align-items: center; padding: 11px 0; width: 100%; background: transparent; border: 0; text-align: left; color: inherit; cursor: pointer; }
.paso .t, .step .t { font-weight: 700; font-size: var(--t-cuerpo); line-height: 1.2; }
.paso .s, .step .s { font-size: var(--t-apoyo); color: var(--gris); margin-top: 2px; }
.nodo, .node { width: 45px; height: 45px; border-radius: 50%; display: grid; place-items: center; flex: none; font-family: var(--f-display); font-size: 22px; position: relative; z-index: 1; }
.nodo.hecho, .node.done { background: var(--vino); color: var(--crema); }
.nodo.ahora, .node.now { background: var(--oro); color: var(--ciruela); box-shadow: 0 0 0 6px var(--oro-claro); }
.nodo.sigue, .node.next { background: var(--crema); color: var(--gris); border: 2.5px solid var(--papel-2); }
.nodo.oro { background: var(--oro-vivo); color: var(--ciruela); }
/* El renglón con su cifra a la izquierda («14 mesas», «29 %»). */
.renglon, .tick { display: flex; gap: 12px; align-items: center; padding: 12px 0; width: 100%; background: transparent; border: 0; text-align: left; color: inherit; cursor: pointer; }
.renglon + .renglon, .tick + .tick { border-top: 1px solid var(--linea); }
.renglon .cuando, .tick .when { width: 50px; flex: none; text-align: center; }
.renglon .cuando b, .tick .when b { display: block; font-family: var(--f-display); font-weight: 500; font-size: 24px; color: var(--vino); line-height: 1; }
.renglon .cuando span, .tick .when span { font-size: var(--t-micro); font-weight: 700; color: var(--gris); }
.anillo { display: flex; gap: 18px; align-items: center; width: 100%; background: transparent; border: 0; padding: 0; text-align: left; color: inherit; cursor: pointer; }
.texto-boton { position: relative; display: block; width: 100%; min-height: var(--blanco); background: transparent; border: 0; font-size: var(--t-apoyo); font-weight: 700; color: var(--vino); text-align: center; cursor: pointer; }

/* De dónde sale: el dato de la pantalla, plegado al pie; una línea llana, sin nombres de sistemas (48 héroes lo usan). */
details.de-donde { margin-top: 6px; }
details.de-donde summary { display: flex; align-items: center; gap: 8px; min-height: var(--blanco); font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); cursor: pointer; list-style: none; }
details.de-donde summary::-webkit-details-marker { display: none; }
details.de-donde summary::after { content: ""; width: 7px; height: 7px; border-right: 2px solid currentColor; border-bottom: 2px solid currentColor; transform: translateY(-2px) rotate(45deg); transition: transform var(--d-1) var(--suave); }
details.de-donde[open] summary { color: var(--vino); }
details.de-donde[open] summary::after { transform: translateY(2px) rotate(-135deg); }
details.de-donde > :not(summary) { margin: 0 0 8px; color: var(--gris); font-size: var(--t-apoyo); line-height: 1.45; }
/* La burbuja: lo que la app manda por el número de la casa, como se verá en WhatsApp. */
.burbuja { background: var(--whatsapp-claro); color: var(--tinta); border-radius: 14px 14px 14px 4px; padding: 10px 14px; font-size: var(--t-cuerpo); font-weight: 600; line-height: 1.35; }
.burbuja small { display: block; margin-top: 4px; font-size: var(--t-nota); color: var(--gris); font-weight: 600; }
.burbuja.mia { border-radius: 14px 14px 4px 14px; background: var(--hoja); }

/* ---------- los ocho bloques (plantillas de bloques.js) ---------- */
.b-tit { display: flex; justify-content: space-between; align-items: baseline; gap: 10px; margin: 0 0 10px; font-size: 18px; font-weight: 700; }
.b-tit .mas { position: relative; font-size: var(--t-apoyo); font-weight: 700; color: var(--vino); background: none; border: 0; padding: 0; cursor: pointer; white-space: nowrap; }
.b-nota { margin: 8px 2px 0; font-size: var(--t-nota); color: var(--gris); }
/* decision: algo espera a una persona. */
.b-decision { background: var(--vino); color: var(--sobre-vino); border-radius: var(--r-grande); padding: 18px 18px 16px; }
.b-decision .quien { display: flex; align-items: center; gap: 6px; font-size: var(--t-nota); font-weight: 700; color: var(--sobre-vino-oro); margin: 0 0 6px; }
.b-decision .quien .ico { width: 16px; height: 16px; }
.b-decision h2 { font-family: var(--f-display); font-weight: 400; font-size: 27px; line-height: 1.1; margin: 0; }
.b-decision p { margin: 8px 0 0; color: var(--sobre-vino-2); }
.b-decision .acciones { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 16px; }
.b-decision .btn { background: var(--crema); color: var(--vino); flex: 1 1 40%; }
.b-decision .btn.ghost { background: transparent; color: var(--sobre-vino); border-color: var(--sobre-vino-borde); }
/* tarjeta: una cosa con foto. */
.b-tarjeta { background: var(--papel); border-radius: var(--r-tarjeta); padding: 12px; display: flex; gap: 14px; align-items: center; }
.b-tarjeta img { width: 88px; height: 104px; object-fit: cover; border-radius: var(--r-chico); flex: none; background: var(--foto-fondo); }
.b-tarjeta:not(:has(img)) { padding: 16px; }
.b-tarjeta .txt { flex: 1; min-width: 0; }
.b-tarjeta h2 { font-size: var(--t-cuerpo); font-weight: 700; line-height: 1.25; margin: 0; }
.b-tarjeta p { margin: 4px 0 0; font-size: var(--t-apoyo); color: var(--gris); line-height: 1.35; }
.b-tarjeta .pill { margin-top: 6px; }
.b-tarjeta .flecha { color: var(--gris-claro); width: 18px; height: 18px; }
.b-tarjeta.grande { display: block; padding: 0; overflow: hidden; }
.b-tarjeta.grande img { width: 100%; height: 190px; border-radius: 0; display: block; }
.b-tarjeta.grande .txt { padding: 14px 16px 16px; }
/* cifras: los números que importan, en Eighties. */
.b-cifras { display: flex; gap: 12px; flex-wrap: wrap; }
.b-cifras .stat { min-width: 100px; }
/* formulario: letra de 16 px (el iPhone no se acerca), campos de 48 px. */
.b-formulario { display: grid; gap: 14px; }
.b-formulario label { display: grid; gap: 6px; font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.b-formulario input:where(:not([type="checkbox"], [type="radio"])), .b-formulario select, .b-formulario textarea { width: 100%; min-height: 48px; padding: 11px 14px; border-radius: 14px; border: 1.5px solid var(--linea); background: var(--hoja); color: var(--tinta);
  font: 600 16px/1.3 var(--f-texto); -webkit-appearance: none; appearance: none; }
.b-formulario select { padding-right: 40px; background-image: linear-gradient(45deg, transparent 50%, var(--vino) 50%), linear-gradient(135deg, var(--vino) 50%, transparent 50%);
  background-position: calc(100% - 22px) 50%, calc(100% - 16px) 50%; background-size: 6px 6px; background-repeat: no-repeat; }
.b-formulario textarea { min-height: 96px; resize: vertical; }
/* a checkbox or radio a component does not hide behind its chip is the browser's own control, in vino, 22 px — never the 100 %-wide empty box
   the field rule drew (RH's «Termina con constancia», 2026-10-14). :where keeps it under every component's own rule. */
.b-formulario :where(input[type="checkbox"], input[type="radio"]), label.campo > :where(input[type="checkbox"], input[type="radio"]) { flex: none; width: 22px; height: 22px; margin: 0 8px 0 0; vertical-align: -5px; accent-color: var(--vino); }
.b-formulario input:focus, .b-formulario select:focus, .b-formulario textarea:focus { outline: none; border-color: var(--vino); box-shadow: 0 0 0 3px var(--oro-claro); }
.b-formulario ::placeholder { color: var(--gris-medio); }
.b-formulario .ayuda { font-size: var(--t-nota); font-weight: 600; color: var(--gris); }
.b-formulario .opciones { display: flex; flex-wrap: wrap; gap: 8px; }
/* acciones: un botón principal y los demás de contorno; .rejilla = atajos de dos columnas. */
.b-acciones { display: grid; gap: 10px; }
.b-acciones.fila { grid-auto-flow: column; grid-auto-columns: 1fr; }
.b-acciones .detalle { margin: -4px 2px 0; font-size: var(--t-nota); color: var(--gris); text-align: center; }
/* visor: foto | video | audio | grafica | recibo | qr | leccion. */
.b-visor { position: relative; border-radius: var(--r-grande); overflow: hidden; background: var(--papel); color: inherit; }
.b-visor > img { display: block; width: 100%; height: 220px; object-fit: cover; background: var(--foto-fondo); }
.b-visor .marco-visor { display: grid; place-items: center; min-height: 160px; padding: 20px; color: var(--gris); text-align: center; gap: 8px; }
.b-visor .marco-visor .ico { width: 34px; height: 34px; color: var(--vino); }
.b-visor .pie { padding: 12px 16px 14px; }
.b-visor .pie b { display: block; font-size: var(--t-cuerpo); }
.b-visor .pie small { display: block; color: var(--gris); font-size: var(--t-apoyo); margin-top: 2px; }
.b-visor .foto-video { position: relative; height: 220px; background: var(--foto-fondo); }
.b-visor .foto-video img { width: 100%; height: 100%; object-fit: cover; display: block; opacity: .9; }
.b-visor .foto-video .boton-video { position: absolute; left: 50%; top: 50%; width: 64px; height: 64px; margin: -32px 0 0 -32px; border-radius: 50%; background: var(--crema); color: var(--vino); display: grid; place-items: center; box-shadow: var(--sombra-flota); }
.b-visor .foto-video .boton-video .ico { width: 26px; height: 26px; margin-left: 3px; }
.b-visor .foto-video .dura { position: absolute; right: 12px; bottom: 12px; padding: 3px 9px; border-radius: var(--r-pastilla); background: rgba(20, 8, 6, .62); color: var(--crema); font-size: var(--t-micro); font-weight: 700; }
.b-visor .audio { display: grid; gap: 14px; padding: 18px 16px 6px; }
.b-visor .onda { display: flex; align-items: center; gap: 3px; height: 40px; }
.b-visor .onda i { flex: 1; min-width: 2px; border-radius: 2px; background: var(--vino); opacity: .28; }
.b-visor .grafica { padding: 16px 16px 4px; }
.b-visor .grafica .bars { margin: 0; height: 140px; }
.b-visor .recibo { padding: 6px 16px 12px; display: grid; }
.b-visor .recibo .grupo { margin: 12px 0 2px; font-size: var(--t-micro); font-weight: 700; color: var(--gris); text-transform: uppercase; letter-spacing: .06em; }
.b-visor .recibo .renglon-recibo { display: flex; justify-content: space-between; align-items: center; gap: 12px; min-height: 40px; padding: 6px 0; font-weight: 600; border: 0; background: transparent; width: 100%; text-align: left; color: inherit; }
.b-visor .recibo :is(button, a).renglon-recibo { cursor: pointer; }
.b-visor .recibo :is(button, a).renglon-recibo span:first-child { text-decoration: underline dotted var(--gris-claro); text-underline-offset: 4px; }
.b-visor .recibo .renglon-recibo + .renglon-recibo { border-top: 1px solid var(--linea); }
.b-visor .recibo .renglon-recibo b { color: var(--vino); white-space: nowrap; }
.b-visor .recibo .neto { margin-top: 6px; border-top: 2px solid var(--vino) !important; padding-top: 12px; font-size: 18px; font-weight: 700; }
.b-visor .recibo .neto b { font-family: var(--f-display); font-weight: 500; font-size: 30px; }
.b-visor .qr { display: grid; place-items: center; gap: 10px; padding: 22px 16px 8px; }
.b-visor .qr svg { width: 188px; height: 188px; padding: 12px; background: var(--hoja); border-radius: 16px; color: var(--ciruela); }
.b-visor .qr .codigo { font-family: var(--f-display); font-size: 30px; letter-spacing: .12em; color: var(--vino); }
.b-visor .leccion { display: grid; gap: 14px; padding: 16px; }
.b-visor .leccion .puntos { display: flex; gap: 6px; }
.b-visor .leccion .puntos i { flex: 1; height: 5px; border-radius: 3px; background: var(--papel-2); }
.b-visor .leccion .puntos i.hecho { background: var(--vino); }
.b-visor .leccion .puntos i.ahora { background: var(--oro); }
.b-visor .leccion .pregunta { font-family: var(--f-display); font-size: var(--t-sub); line-height: 1.12; color: var(--vino); }
.b-visor .leccion .respuestas { display: grid; gap: 8px; }
.b-visor .leccion .respuestas span { display: flex; align-items: center; gap: 10px; min-height: 48px; padding: 10px 14px; border-radius: 14px; background: var(--crema); font-weight: 700; border: 1.5px solid var(--linea); }
.b-visor .leccion .respuestas span.bien { border-color: var(--verde); background: var(--verde-claro); color: var(--verde-tinta); }
/* estado: verde | oro | gris | rojo | azul. Los colores del semáforo dicen lo que pasó; el horizonte va en su propia etiqueta. */
.b-estado { display: flex; gap: 12px; align-items: flex-start; padding: 14px 16px; border-radius: var(--r-tarjeta); background: var(--papel); }
.b-estado .punto { width: 10px; height: 10px; border-radius: 50%; background: var(--gris-claro); margin-top: 7px; flex: none; }
.b-estado > div { flex: 1; min-width: 0; }
.b-estado[data-estado="verde"] .punto { background: var(--verde); }
.b-estado[data-estado="oro"] .punto, .b-estado[data-estado="espera"] .punto { background: var(--espera); }
.b-estado[data-estado="rojo"] .punto { background: var(--rojo); }
.b-estado[data-estado="azul"] .punto { background: var(--azul); }
.b-estado[data-estado="verde"] { background: var(--verde-claro); color: var(--verde-tinta); }
.b-estado[data-estado="rojo"] { background: var(--rojo-claro); color: var(--rojo); }
.b-estado[data-estado="oro"], .b-estado[data-estado="espera"] { background: var(--espera-claro); color: var(--espera-tinta); }
.b-estado[data-estado="azul"] { background: var(--azul-claro); color: var(--azul-tinta); }
.b-estado h2 { font-size: var(--t-cuerpo); font-weight: 700; margin: 0; line-height: 1.3; }
.b-estado h2 .horizonte { margin-left: 4px; vertical-align: 1px; }
.b-estado p { margin: 3px 0 0; font-size: var(--t-apoyo); opacity: .9; }
.b-estado .acciones { display: flex; gap: 8px; margin-top: 10px; flex-wrap: wrap; }
.b-estado .btn { width: auto; min-height: var(--blanco); padding: 8px 16px; font-size: 15px; }
.b-lista .item .ic .ico { width: 22px; height: 22px; }

/* ---------- lo que se mueve (un reloj; sólo transform y opacity) ---------- */
[data-entra] { opacity: 0; transform: translateY(10px); }
[data-entra].entra { animation: eq-entra var(--d-3) var(--suave) both; animation-delay: calc(var(--n, 0) * var(--escalon)); }
/* Ya entró: si React reescribe su clase (un estado que cambia en su lugar: la pregunta contestada, el aviso cerrado) y se lleva
   `.entra`, el bloque no vuelve a esconderse (entra.js deja `data-entro`, que React no toca). */
[data-entra][data-entro]:not(.entra) { opacity: 1; transform: none; }
/* Rebuilt in place: a screen a form sent back to itself (a save, a paint) is the same screen — entra.js puts her place back and marks its
   blocks `data-quieto`: they are simply there, no entrance (2026-10-28). */
[data-entra][data-quieto] { opacity: 1 !important; transform: none !important; animation: none !important; }
@keyframes eq-entra { to { opacity: 1; transform: none; } }
@keyframes eq-progreso { from { transform: scaleX(0); } to { transform: scaleX(1); } }
@keyframes eq-crece { from { transform: scaleY(.05); } to { transform: none; } }
/* «Una mesa te nombró»: el oro florece una vez desde la comilla, detrás de las palabras. */
.florece { position: relative; isolation: isolate; overflow: hidden; }
.florece::after { content: ""; position: absolute; z-index: -1; top: -55%; right: -45%; width: 130%; aspect-ratio: 1; border-radius: 50%; pointer-events: none;
  background: radial-gradient(closest-side, rgba(247, 190, 0, .5), rgba(247, 190, 0, .16) 55%, rgba(247, 190, 0, 0) 72%);
  opacity: 0; transform: scale(.3); animation: eq-florece var(--late) var(--suave) .35s 1 both; }
@keyframes eq-florece { 0% { opacity: 0; transform: scale(.3); } 35% { opacity: 1; } 100% { opacity: 0; transform: scale(1.12); } }
@media (prefers-reduced-motion: reduce) {
  [data-entra] { opacity: 1; transform: none; animation: none !important; }
  .florece::after, .play.sonando::after, .bar .v { animation: none !important; }
}

/* ---------- montos ocultos (G14): el ojo cambia cada .monto por cuatro puntos; el candado (PIN) es de bloques.js ---------- */
.ojo { position: relative; display: inline-grid; place-items: center; flex: none; width: var(--blanco); height: var(--blanco); margin: -8px -10px -8px 0; padding: 0; border: 0; border-radius: 50%; background: transparent; color: var(--vino); cursor: pointer; }
.ojo .ico { width: 24px; height: 24px; }
html[data-ocultar] .ojo .abierto, html:not([data-ocultar]) .ojo .cerrado { display: none; }
html[data-ocultar] .monto { position: relative; color: transparent !important; -webkit-text-fill-color: transparent; user-select: none; }
html[data-ocultar] .monto * { color: transparent !important; -webkit-text-fill-color: transparent; }
html[data-ocultar] .monto::after { content: "••••"; position: absolute; left: 0; top: 50%; transform: translateY(-50%); white-space: nowrap;
  font-family: var(--f-texto); font-weight: 700; font-size: .62em; letter-spacing: .1em; line-height: 1; color: var(--c-monto, var(--vino)); -webkit-text-fill-color: var(--c-monto, var(--vino)); }
html[data-ocultar] .item .end.monto::after, html[data-ocultar] .recibo b.monto::after { left: auto; right: 0; }
.banda, .yday, .cita, .quote, .grow, .b-decision, .pill.vino, .btn { --c-monto: var(--sobre-vino); }
.pill.oro, .btn.oro { --c-monto: var(--oro-tinta); }

/* ---------- el candado de Dinero (PIN o huella; bloques.js lo abre con data-pin="<destino>") ---------- */
.pin-velo { position: fixed; inset: 0; z-index: 60; background: var(--velo-hoja); opacity: 0; transition: opacity var(--d-2) var(--suave); }
.pin-velo.abierto { opacity: 1; }
.pin-hoja { position: fixed; left: 0; right: 0; bottom: 0; z-index: 61; display: grid; gap: 18px; justify-items: center; padding: 14px var(--orilla) calc(var(--abajo, env(safe-area-inset-bottom, 0px)) + 18px);
  background: var(--crema); color: var(--tinta); border-radius: 28px 28px 0 0; box-shadow: var(--sombra-hoja); transform: translateY(105%); transition: transform var(--d-3) var(--suave); font-family: var(--f-texto); }
.pin-hoja.abierto { transform: none; }
.pin-hoja .asa { width: 40px; height: 5px; border-radius: 3px; background: var(--papel-2); }
.pin-hoja .cerrar { position: absolute; right: 12px; top: 10px; width: var(--blanco); height: var(--blanco); border: 0; border-radius: 50%; background: transparent; color: var(--gris); display: grid; place-items: center; cursor: pointer; }
.pin-hoja .candado { width: 52px; height: 52px; border-radius: 16px; background: var(--vino); color: var(--crema); display: grid; place-items: center; }
.pin-hoja h2 { margin: 0; font-family: var(--f-display); font-weight: 500; font-size: 30px; line-height: 1; color: var(--vino); text-align: center; }
.pin-hoja p { margin: -8px 0 0; font-size: var(--t-apoyo); color: var(--gris); text-align: center; font-weight: 600; }
.pin-puntos { display: flex; gap: 16px; height: 20px; align-items: center; }
.pin-puntos i { width: 16px; height: 16px; border-radius: 50%; border: 2px solid var(--vino); transition: transform var(--d-1) var(--resorte); }
.pin-puntos i.lleno { background: var(--vino); transform: scale(1.08); }
.pin-puntos.listo i { background: var(--oro); border-color: var(--oro); }
.pin-puntos.mal { animation: eq-tiembla var(--d-2) var(--suave); }
@keyframes eq-tiembla { 25% { transform: translateX(-8px); } 75% { transform: translateX(8px); } }
.pin-teclas { display: grid; grid-template-columns: repeat(3, 72px); gap: 12px 26px; }
.pin-tecla { width: 72px; height: 72px; border-radius: 50%; border: 0; background: var(--papel); color: var(--vino); font: 500 30px/1 var(--f-display); display: grid; place-items: center; cursor: pointer; transition: transform var(--d-1) var(--suave); }
.pin-tecla:active { transform: scale(.94); background: var(--papel-2); }
.pin-tecla.sin { background: transparent; }
.pin-tecla .ico { width: 28px; height: 28px; }
.pin-hoja .nota-pin { font-size: var(--t-nota); color: var(--gris); text-align: center; max-width: 300px; }

/* ---------- ronda «mejores» (10 oct 2026): las cinco piezas que cuatro carriles habrían dibujado de cuatro maneras (/kit/#nuevas) ---------- */
/* 1 · El aviso que señala su lugar (EQU-1). Una línea cuenta los avisos; cada aviso es un chip-botón terracota que, al tocarlo,
   rodea con un aro su lugar en la rejilla (data-senala="<clave>" en el chip, data-senal="<clave>" en el lugar). Nada se arregla solo. */
.avisos { margin: 0 0 10px; font-size: var(--t-cuerpo); font-weight: 700; color: var(--espera-tinta); line-height: 1.3; }
button.chip.aviso { min-height: var(--blanco); border-color: var(--espera); background: var(--espera-claro); color: var(--espera-tinta); text-align: left; line-height: 1.25; }
button.chip.aviso[aria-pressed="true"] { background: var(--espera); border-color: var(--espera); color: var(--crema); }
[data-senal] { position: relative; }
.senalado { box-shadow: 0 0 0 2.5px var(--crema), 0 0 0 5px var(--espera); z-index: 1; }
.senalado::after { content: ""; position: absolute; inset: -5px; border-radius: inherit; box-shadow: 0 0 0 3px var(--espera); pointer-events: none;
  animation: eq-senala var(--late) var(--suave) 1 both; }
@keyframes eq-senala { 0% { opacity: .9; transform: scale(1); } 100% { opacity: 0; transform: scale(1.18); } }

/* 2 · La tira en tres (MUR-3): bien (Mucho + Bastante) · más o menos · mal (Poco + Nada), por porcentaje, sobre las cinco caras.
   Verde · gris · rojo, los mismos en la tira grande y en la chica de cada renglón; la chica sale sólo con 3 respuestas o más. */
.tercios { display: grid; gap: 10px; }
.tercios .tira { display: flex; gap: 2px; height: 16px; border-radius: var(--r-pastilla); overflow: hidden; background: var(--papel-2); transform-origin: 0 50%; }
.tercios .tira i { display: block; flex: var(--p, 1) 1 0; min-width: 4px; }
.tercios .bien { background: var(--verde); } .tercios .masomenos { background: var(--gris-claro); } .tercios .mal { background: var(--rojo); }
.tercios .dice { display: flex; flex-wrap: wrap; gap: 4px 16px; margin: 0; font-size: var(--t-nota); font-weight: 700; color: var(--tinta); }
.tercios .dice span { display: inline-flex; align-items: center; gap: 7px; white-space: nowrap; }
.tercios .dice span::before { content: ""; width: 10px; height: 10px; border-radius: 50%; flex: none; }
.tercios .dice .bien, .tercios .dice .masomenos, .tercios .dice .mal { background: none; }
.tercios .dice .bien::before { background: var(--verde); } .tercios .dice .masomenos::before { background: var(--gris-claro); } .tercios .dice .mal::before { background: var(--rojo); }
.tercios.chico { display: inline-grid; width: 88px; flex: none; }
.tercios.chico .tira { height: 8px; gap: 1.5px; }
.entra .tercios .tira, .tercios.entra .tira { animation: eq-crece-x var(--d-3) var(--suave) both; animation-delay: calc(var(--n, 0) * var(--escalon) + 120ms); }
@keyframes eq-crece-x { from { transform: scaleX(.04); } to { transform: none; } }

/* 3 · El mes en puntos (TIE-6): L M M J V S D, un punto por día y cuatro en la leyenda. El punto dice el día (trabajado, descanso,
   festivo); el aro terracota dice «con marca» y sólo ese día es botón (abre el día). Lo que no ha pasado, sin punto. */
.mes { background: var(--papel); border-radius: var(--r-tarjeta); padding: 12px 6px 8px; }
.mes-cab { display: flex; justify-content: space-between; align-items: baseline; gap: 10px; padding: 0 8px 8px; font-size: 18px; font-weight: 700; }
.mes-cab small { font-size: var(--t-nota); color: var(--gris); }
.mes-semana, .mes-dias { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 2px; }
.mes-semana span { padding: 0 0 6px; text-align: center; font-size: var(--t-nota); font-weight: 700; color: var(--gris); }
.mes-dias > * { display: grid; justify-items: center; align-content: center; gap: 5px; min-height: 50px; padding: 4px 0; border: 0; border-radius: 12px; background: transparent;
  font-size: var(--t-cuerpo); font-weight: 700; line-height: 1; color: var(--tinta); }
.mes-dias i, .mes-leyenda i { display: block; width: 9px; height: 9px; border-radius: 50%; flex: none; }
.mes-dias [data-dia="trabajado"] i, .mes-leyenda [data-dia="trabajado"] i { background: var(--vino); }
.mes-dias [data-dia="descanso"] i, .mes-leyenda [data-dia="descanso"] i { box-shadow: inset 0 0 0 2px var(--gris-claro); }
.mes-dias [data-dia="festivo"] i, .mes-leyenda [data-dia="festivo"] i { background: var(--azul); }
.mes-dias [data-dia="sigue"] { color: var(--gris-medio); }
.mes-dias [data-marca], .mes-leyenda [data-marca] i { box-shadow: inset 0 0 0 2px var(--espera); background: var(--espera-claro); color: var(--espera-tinta); }
.mes-dias button[data-marca] { cursor: pointer; transition: transform var(--d-1) var(--suave); }
.mes-dias button[data-marca]:active { transform: scale(.94); }
/* En la app un día con checada es un enlace (abre el día sin JS): la misma celda, sin subrayado, y se hunde igual al tocarlo. */
.mes-dias > a { text-decoration: none; -webkit-tap-highlight-color: transparent; cursor: pointer; transition: transform var(--d-1) var(--suave); }
.mes-dias > a:active { transform: scale(.94); }
.mes-leyenda { display: grid; grid-template-columns: 1fr 1fr; gap: 8px 12px; margin: 10px 8px 4px; padding-top: 10px; border-top: 1px solid var(--linea); font-size: var(--t-nota); font-weight: 700; }
.mes-leyenda span { display: flex; align-items: center; gap: 8px; }
.mes-leyenda [data-marca] i { width: 18px; height: 18px; border-radius: 6px; }
/* ---- D14 · ronda 3 (2026-10-11): Mis días (CONTRATO S13; persona.yo.dias, .calendario). El mes de días de la persona usa la misma
   rejilla: un día aprobado por venir, lleno de vino; uno ya tomado, sobre papel; uno que Buk tiene sin aprobar, en terracota; hoy,
   con su aro. Arriba, el mes y su cuenta con ‹ › (44 px), como el registro de Tiempo. ---- */
.mes-dias [data-dia="libre"], .mes-leyenda [data-dia="libre"] i { background: var(--vino); color: var(--crema); }
.mes-dias [data-dia="tomado"], .mes-leyenda [data-dia="tomado"] i { background: var(--papel-2); color: var(--vino); }
.mes-dias [data-dia="pendiente"], .mes-leyenda [data-dia="pendiente"] i { box-shadow: inset 0 0 0 2px var(--espera); background: var(--espera-claro); color: var(--espera-tinta); }
.mes-leyenda :is([data-dia="libre"], [data-dia="tomado"], [data-dia="pendiente"]) i { width: 18px; height: 18px; border-radius: 6px; }
.mes-leyenda [data-dia="tomado"] i { box-shadow: inset 0 0 0 1.5px var(--gris-claro); }
.mes-dias [data-hoy] { box-shadow: inset 0 0 0 2px var(--vino); }
.mes-dias [data-hoy][data-dia="libre"] { box-shadow: inset 0 0 0 2px var(--vino), inset 0 0 0 4px var(--crema); }
.v2-mes .mes-cab { align-items: center; }
.v2-mes .mes-cab .tx { display: grid; gap: 2px; min-width: 0; }
.v2-mes .mes-cab .mover { display: flex; gap: 6px; flex: none; }
.v2-mes .mes-cab .mover > * { width: var(--blanco); height: var(--blanco); border-radius: var(--r-pastilla); display: grid; place-items: center; }
.v2-mes .mes-cab .mover a { background: var(--crema); color: var(--vino); text-decoration: none; -webkit-tap-highlight-color: transparent; }
.v2-mes .mes-cab .mover a:active { transform: scale(.94); }
.v2-mes .mes-cab .mover .ico { width: 20px; height: 20px; }
/* El titular: «Te quedan 13 días» con el número en la letra de los números (el saldo de Buk); sin número, sólo el título. */
.v2-misdias-titular { padding: 0; }
:is(h1, h2).frase.n { display: flex; align-items: baseline; flex-wrap: wrap; gap: 0 12px; font-size: 30px; }
:is(h1, h2).frase.n .v2-numero { font-size: var(--t-numero, 72px); line-height: .95; }
.v2-misdias-titular .lede { margin-top: 8px; }
/* El bloque de días: la línea de la ley, lo que tomaste y lo que viene («rango · N días»), o una línea si Buk no tiene nada. */
.v2-misdias { margin-top: 14px; }
.v2-misdias .panel { display: grid; gap: 8px; }
.v2-misdias .ley { display: grid; gap: 2px; }
.v2-misdias .ley b { font-size: var(--t-cuerpo); }
.v2-misdias .ley span, .v2-misdias .sub { font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.v2-misdias .sub { margin: 8px 0 0; }
.v2-misdias .tomados { display: grid; gap: 6px; }
.v2-misdias .tomados > div { display: flex; align-items: baseline; gap: 10px; font-size: var(--t-apoyo); }
.v2-misdias .tomados span { flex: 1; min-width: 0; color: var(--tinta); font-weight: 600; }
.v2-misdias .tomados b { color: var(--vino); white-space: nowrap; font-variant-numeric: tabular-nums; }
.v2-misdias .tomados .pill { display: table; margin: 6px 0 0; font-style: normal; }
.v2-misdias .vacio, .v2-misdias .nota { margin: 0; font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.por-confirmar { margin: 0 0 10px; font-size: var(--t-cuerpo); font-weight: 700; color: var(--espera-tinta); }

/* 4 · «Bajar» (APR-6): un aro chico al borde derecho de un renglón pendiente. El renglón y el aro son dos botones hermanos dentro de
   .con-bajar (nunca un botón dentro de otro); al tocarlo el aro se llena y la segunda línea dice data-bajar. Hecha y la de hoy: sin aro. */
.con-bajar { display: flex; align-items: center; gap: 2px; }
.con-bajar > .step, .con-bajar > .paso, .con-bajar > .item { flex: 1; min-width: 0; }
button.bajar { display: grid; justify-items: center; align-content: center; gap: 4px; width: 60px; min-height: 56px; padding: 4px 0; flex: none; border: 0; background: transparent;
  color: var(--vino); font-size: var(--t-nota); font-weight: 700; line-height: 1; cursor: pointer; }
.bajar .aro { position: relative; display: grid; place-items: center; width: 26px; height: 26px; border-radius: 50%; box-shadow: inset 0 0 0 2px var(--vino); }
.bajar .aro::before { content: ""; position: absolute; inset: 0; border-radius: 50%; background: var(--vino); transform: scale(0); transition: transform var(--d-2) var(--resorte); }
.bajar .aro .ico { position: relative; width: 16px; height: 16px; color: var(--crema); opacity: 0; transition: opacity var(--d-1) var(--suave); }
.bajar[aria-pressed="true"] .aro::before { transform: none; }
.bajar[aria-pressed="true"] .aro .ico { opacity: 1; transition-delay: .12s; }

/* 5 · La línea del fijado (MUR-5): sobre el título de UN renglón del muro, con la chincheta: hasta cuándo y para quién. Los demás, sin línea. */
.fijado { display: flex; align-items: center; gap: 6px; margin: 0 0 3px; font-size: var(--t-nota); font-weight: 700; line-height: 1.25; color: var(--vino); }
.fijado .ico { width: 17px; height: 17px; }
@media (prefers-reduced-motion: reduce) { .senalado::after, .tercios .tira { animation: none !important; } }

/* ---------- ronda «aprender» (10 oct 2026): las cinco piezas de Aprender que cuatro carriles habrían dibujado de cuatro maneras (/kit/#aprender) ---------- */
/* Un botón apagado espera a que la persona elija (el selector de público lo enciende); nunca se ve como si ya se pudiera. */
.btn[disabled], .btn[aria-disabled="true"] { opacity: .42; cursor: not-allowed; }
.btn[disabled]:active { transform: none; }

/* 1 · La constancia. Una tarjeta, dos tamaños, una variante pública. Curso · «Constancia de la casa» · nombre de pila · mes · folio
   chico · quién capacita y quién evalúa, por puesto · lo que dijo quien evaluó (sólo si la persona lo incluye) · «Verificar».
   Nunca una calificación, nunca un conteo, nunca un lugar. El sello de oro es lo único dorado: es donde la casa firma.
   .post = el tamaño del muro y de la imagen que se comparte (672 × 352, ≈ 20 KB); .publica = la página de verificar
   (nombre «Regina G.», quien evalúa sólo por puesto, sin sucursal; lo que dijo quien evaluó no existe ahí). */
.constancia { position: relative; min-width: 0; display: grid; gap: 4px; padding: 16px 16px 14px; border-radius: var(--r-tarjeta); background: var(--hoja); border: 1.5px solid var(--linea); color: var(--tinta); }
.constancia > * { margin: 0; }
.c-cab { display: flex; align-items: center; gap: 10px; min-width: 0; }
.c-sello { display: grid; place-items: center; width: 34px; height: 34px; border-radius: 50%; background: var(--oro); color: var(--ciruela); flex: none; }
.c-sello .ico { width: 21px; height: 21px; stroke-width: 2.1; }
.c-de { font-size: var(--t-nota); font-weight: 700; color: var(--vino); line-height: 1.2; }
.c-folio { margin-left: auto; font-size: var(--t-nota); font-weight: 700; color: var(--gris); white-space: nowrap; font-variant-numeric: tabular-nums; letter-spacing: .02em; }
.c-curso { margin-top: 8px !important; font-family: var(--f-display); font-weight: 500; font-size: var(--t-sub); line-height: 1.08; color: var(--vino); }
.c-quien { font-size: var(--t-cuerpo); font-weight: 700; line-height: 1.3; }
.c-cubre { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); line-height: 1.35; }
.c-firmas { display: grid; gap: 2px; margin-top: 8px !important; padding-top: 10px; border-top: 1px solid var(--linea); font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); line-height: 1.35; }
.c-firmas b { font-weight: 700; color: var(--tinta); }
.c-dijo { margin-top: 6px !important; font-size: var(--t-cuerpo); font-weight: 700; color: var(--vino); line-height: 1.35; }
.c-nota { margin-top: 6px !important; display: flex; gap: 8px; align-items: flex-start; font-size: var(--t-apoyo); font-weight: 700; color: var(--espera-tinta); line-height: 1.35; }
.c-nota .ico { width: 18px; height: 18px; margin-top: 2px; }
.c-estado { justify-self: start; margin-top: 6px !important; }
.c-estado[data-estado="vigente"] { background: var(--verde-claro); color: var(--verde-tinta); }
.c-estado[data-estado="vence"] { background: var(--espera-claro); color: var(--espera-tinta); }
.c-estado[data-estado="vencida"] { background: var(--papel-2); color: var(--gris); }
.c-estado[data-estado="anulada"] { background: var(--rojo-claro); color: var(--rojo); }
.c-verificar { position: relative; justify-self: start; display: inline-flex; align-items: center; gap: 7px; min-height: var(--blanco); margin-top: 10px; padding: 8px 16px 8px 12px;
  border: 1.5px solid var(--vino); border-radius: var(--r-pastilla); background: transparent; color: var(--vino); font-size: var(--t-apoyo); font-weight: 700; cursor: pointer; transition: transform var(--d-1) var(--suave); }
.c-verificar .ico { width: 19px; height: 19px; }
.c-verificar:active { transform: scale(.97); }
/* el tamaño del muro: la tarjeta como lámina de vino, la misma que viaja como imagen */
.constancia.post { gap: 6px; padding: 18px 18px 16px; border: 0; border-radius: var(--r-grande); background: var(--vino); color: var(--sobre-vino); width: 100%; aspect-ratio: 672 / 352; align-content: start; }
/* (min-width: 0 y width: 100%: sin ellos, dentro de un grid o un flex la proporción empuja el ancho y la pantalla se desplaza de lado) */
.constancia.post .c-de { color: var(--sobre-vino-oro); }
.constancia.post .c-folio { color: var(--sobre-vino-2); }
.constancia.post .c-curso { font-size: 32px; line-height: 1.02; color: var(--sobre-vino); }
.constancia.post .c-quien { color: var(--sobre-vino); }
.constancia.post .c-cubre, .constancia.post .c-firmas { color: var(--sobre-vino-2); }
.constancia.post .c-firmas { border-top-color: var(--sobre-vino-linea); }
.constancia.post .c-firmas b, .constancia.post .c-dijo { color: var(--sobre-vino); }
.constancia.post .c-verificar { border-color: var(--sobre-vino-borde); color: var(--sobre-vino); }
.constancia.post .c-nota { color: var(--sobre-vino-oro); }
.constancia.post .c-estado { box-shadow: 0 0 0 1.5px var(--sobre-vino-linea); }
/* la variante pública: lo que dijo quien evaluó no puede salir aquí aunque se copie el renglón */
.constancia.publica .c-dijo, .constancia.publica .c-verificar { display: none !important; }
/* la cabeza de la publicación (el muro): quién la compartió y qué terminó; la tarjeta va abajo */
.c-autor { display: flex; align-items: center; gap: 12px; margin: 0 0 10px; }
.c-autor .txt { display: grid; min-width: 0; line-height: 1.3; }
.c-autor b { font-size: var(--t-cuerpo); }
.c-autor small { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }

/* 2 · El requisito. Un renglón por lo que pide un escalón: su estado con marca y color, quién firmó y cuándo, «por tu cuenta» si lo
   tomó así, y el botón de la lección como hermano (nunca un botón dentro de otro). Estados: cumple (✓ verde) · evaluada (falta la
   firma: terracota) · pendiente (aro) · se-abre (candado). .breve = los renglones de RH y de la jefa: el nombre del requisito y la
   firma que se debe, en una línea; la fracción de lecciones, la lección y la etiqueta no existen ahí. */
.requisitos { display: block; background: var(--papel); border-radius: var(--r-tarjeta); overflow: hidden; }
.requisito { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; min-height: 60px; padding: 12px 16px; }
.requisito + .requisito { border-top: 1px solid var(--linea); }
.requisito.hijo { padding-left: 56px; min-height: 52px; }
.requisito.hijo .r-marca { width: 24px; height: 24px; }
.requisito.hijo .r-marca .ico { width: 15px; height: 15px; }
.r-marca { display: grid; place-items: center; width: 30px; height: 30px; border-radius: 50%; flex: none; background: var(--crema); box-shadow: inset 0 0 0 2px var(--gris-claro); color: var(--gris); }
.r-marca .ico { width: 18px; height: 18px; stroke-width: 2.4; }
[data-req="cumple"] > .r-marca { background: var(--verde); box-shadow: none; color: var(--crema); }
[data-req="evaluada"] > .r-marca { background: var(--espera-claro); box-shadow: inset 0 0 0 2px var(--espera); color: var(--espera-tinta); }
[data-req="se-abre"] > .r-marca { background: var(--papel-2); box-shadow: none; color: var(--gris); }
.r-txt { flex: 1 1 calc(100% - 42px); min-width: 0; display: grid; gap: 2px; }
/* el botón de un requisito baja bajo el texto, alineado con él: el texto conserva todo su ancho aunque el botón diga «Renovarla» */
.requisito > .r-leccion { margin-left: 42px; }
.requisito.hijo > .r-leccion { margin-left: 36px; }
.r-que { font-size: var(--t-cuerpo); font-weight: 700; line-height: 1.25; }
.r-dice { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); line-height: 1.35; }
[data-req="cumple"] .r-dice { color: var(--verde-tinta); }
[data-req="evaluada"] .r-dice { color: var(--espera-tinta); }
[data-req="se-abre"] .r-que { color: var(--gris); }
.r-avance { font-weight: 700; color: var(--vino); }
.por-tu-cuenta { justify-self: start; display: inline-flex; align-items: center; margin-top: 4px; padding: 3px 10px; border-radius: var(--r-pastilla); background: var(--rosa); color: var(--vino); font-size: var(--t-nota); font-weight: 700; line-height: 1.3; }
.r-leccion { position: relative; display: inline-flex; align-items: center; gap: 6px; min-height: var(--blanco); padding: 6px 14px 6px 10px; flex: none; border: 1.5px solid var(--vino); border-radius: var(--r-pastilla);
  background: transparent; color: var(--vino); font-size: var(--t-apoyo); font-weight: 700; cursor: pointer; transition: transform var(--d-1) var(--suave); }
.r-leccion .ico { width: 16px; height: 16px; }
.r-leccion:active { transform: scale(.97); }
.requisitos.breve { display: flex; flex-wrap: wrap; gap: 8px; background: transparent; border-radius: 0; overflow: visible; }
.requisitos.breve .requisito { display: inline-flex; gap: 8px; min-height: 36px; padding: 5px 12px 5px 6px; border: 0; border-radius: 18px; background: var(--crema); box-shadow: inset 0 0 0 1.5px var(--linea); }
.requisitos.breve .r-marca { width: 24px; height: 24px; }
.requisitos.breve .r-marca .ico { width: 14px; height: 14px; }
.requisitos.breve .requisito { flex-wrap: nowrap; }
.requisitos.breve .r-txt { display: block; flex: 0 1 auto; min-width: 0; }
.requisitos.breve .r-que { font-size: var(--t-apoyo); }
.requisitos.breve .r-dice { display: inline; }
.requisitos.breve .r-dice::before { content: " · "; }
.requisitos.breve .r-avance, .requisitos.breve .r-leccion, .requisitos.breve .por-tu-cuenta { display: none !important; }

/* 3 · Los dos chips del puesto. «Lo pide: <puesto>» (lleno de vino): un requisito del escalón, nunca «opcional». «Cuenta para:
   <puesto>» (rosa): un curso opcional que suma y nunca cuenta en contra. «ya en tu ruta» (verde) cuando el curso ya es tuyo. */
.lo-pide, .cuenta-para, .en-tu-ruta { position: relative; display: inline-flex; align-items: center; gap: 6px; min-height: 32px; padding: 4px 12px 4px 9px; border: 0; border-radius: var(--r-pastilla);
  font-size: var(--t-nota); font-weight: 600; line-height: 1.25; text-align: left; vertical-align: middle; }
.lo-pide b, .cuenta-para b { font-weight: 700; }
.lo-pide .ico, .cuenta-para .ico, .en-tu-ruta .ico { width: 16px; height: 16px; stroke-width: 2.3; }
.lo-pide { background: var(--vino); color: var(--crema); }
.cuenta-para { background: var(--rosa); color: var(--vino); }
.en-tu-ruta { background: var(--verde-claro); color: var(--verde-tinta); font-weight: 700; }
button.lo-pide, button.cuenta-para { min-height: var(--blanco); cursor: pointer; }

/* 4 · ¿Quién la ve? Tres renglones altos (Mi casa · Mi equipo · Sólo yo), ninguno elegido al llegar; el botón de la acción sigue
   apagado hasta que la persona toca uno (bloques.js: data-publico-op enciende data-publico-accion y le pone el texto de esa opción). */
.publico { display: grid; gap: 10px; }
.publico-t { margin: 0 0 2px; font-size: 18px; font-weight: 700; color: var(--tinta); }
.publico-op { display: flex; align-items: center; gap: 14px; width: 100%; min-height: 68px; padding: 12px 16px; border: 2px solid var(--linea); border-radius: 16px; background: var(--hoja); color: var(--tinta);
  text-align: left; cursor: pointer; transition: transform var(--d-1) var(--suave), border-color var(--d-1) var(--suave), background-color var(--d-1) var(--suave); }
.publico-op:active { transform: scale(.985); }
.publico-op .p-ic { display: grid; place-items: center; width: 40px; height: 40px; border-radius: 12px; background: var(--papel); color: var(--vino); flex: none; }
.publico-op .p-txt { flex: 1; min-width: 0; display: grid; gap: 2px; line-height: 1.25; }
.publico-op .p-txt b { font-size: var(--t-cuerpo); font-weight: 700; }
.publico-op .p-txt small { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.publico-op .p-radio { width: 26px; height: 26px; border-radius: 50%; flex: none; box-shadow: inset 0 0 0 2px var(--gris-claro); transition: box-shadow var(--d-1) var(--suave); }
.publico-op[aria-checked="true"] { border-color: var(--vino); background: var(--papel); }
.publico-op[aria-checked="true"] .p-ic { background: var(--vino); color: var(--crema); }
.publico-op[aria-checked="true"] .p-radio { background: var(--vino); box-shadow: inset 0 0 0 2px var(--vino), inset 0 0 0 7px var(--papel); }
.publico-pista { margin: 0; font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); text-align: center; }
.publico.elegido .publico-pista { visibility: hidden; }

/* 5 · «Quién lo ve»: la forma de persona.yo.queve (G15) en una línea, con el ojo; los lectores siempre en este orden: Tú · Tu jefa ·
   RH · Compañeros · un quinto cuando existe («Quien tenga el enlace», «Quien firma tu paso»). Como botón lleva a la tabla completa. */
.quien-ve { display: flex; align-items: flex-start; gap: 10px; margin: 0; font-size: var(--t-apoyo); font-weight: 600; line-height: 1.45; color: var(--gris); }
.quien-ve > .ico { width: 20px; height: 20px; margin-top: 2px; color: var(--vino); }
.quien-ve b { font-weight: 700; color: var(--tinta); }
button.quien-ve { width: 100%; min-height: var(--blanco); padding: 8px 0; border: 0; background: transparent; text-align: left; cursor: pointer; }
button.quien-ve > .flecha { width: 18px; height: 18px; margin: 2px 0 0 auto; color: var(--gris-claro); flex: none; }
.r-titulo { margin: 0 0 8px; font-size: var(--t-cuerpo); font-weight: 700; line-height: 1.3; color: var(--tinta); }
.r-titulo small { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.item .txt .chips { margin-top: 8px; gap: 6px; }

/* ===================================================================================================================
   App real (tagers-equipo) · equipo-design, ronda 1 (2026-10-10). Lo que la demo pintaba como <button data-ir> la app lo
   pinta como <a href>: el mismo aspecto, sin subrayado ni azul. Pesa lo mismo que la regla «button» (un elemento), así que
   la clase de cada pieza (.btn, .mas, una banda de vino) sigue mandando en su tinta.
   =================================================================================================================== */
a:where(.panel, .list, .item, .stat, .hero, .lesson, .quote, .cita, .grow, .yday, .banda, .b-tarjeta, .b-visor, .paso, .step, .renglon, .tick, .anillo, .atajo, .renglon-recibo, .mas, .btn, .sec, .chip, .pill, .play, .avatar, .eq-volver, .texto-boton, .v2-ahora) {
  color: inherit; text-decoration: none; -webkit-tap-highlight-color: transparent; touch-action: manipulation; }
/* lo que bloques.js de la demo escribía en línea, aquí como clase (la app no lleva estilos en línea) */
.item .ic.foto { overflow: hidden; padding: 0; }
.item .ic.foto img { width: 100%; height: 100%; object-fit: cover; }
.b-formulario fieldset.b-campo { border: 0; padding: 0; margin: 0; }
.b-formulario fieldset.b-campo > legend { padding: 0; margin: 0 0 6px; font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.note.b-detalle { margin: 0 0 12px; }
.b-visor .b-visor-mas { padding: 0 16px 16px; }
.b-visor .qr img { width: 188px; height: 188px; }

/* ---- Promovidas desde las héroes (primera.entrar.telefono/.codigo, persona.yo, persona.yo.datos, persona.yo.queve) para
   la puerta y Yo de la app. Con el elemento en el selector cuando otra héroe usa el mismo nombre para otra cosa: .sec es un
   texto que se toca (en rh.contenido.auditoria es una sección), .frase es un titular (en carta.platillo, una tarjeta de
   vino), .campo es la etiqueta de un campo (en persona.yo.queve, el dato dentro de .dato), .fuente es la sección del pie
   (en persona.yo, un párrafo), .quien es la fila de permisos dentro de .dato (en el bloque decisión es otra cosa). ---- */
:is(h1, h2, p).frase { font-family: var(--f-display); font-weight: 500; font-size: 34px; line-height: 1.05; color: var(--vino); margin: 6px 0 0; }
label.campo { display: grid; gap: 6px; font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
label.campo + label.campo { margin-top: 12px; }
/* ronda 17 (revisión): una casilla con sus palabras (las lecciones de «Nuevo curso» de la jefa y de la autora, `label.campo.opcion`) va en UN
   renglón — la casilla a la izquierda de su línea —, no encima de ella */
label.campo:has(> :is(input[type="checkbox"], input[type="radio"])) { display: flex; align-items: flex-start; gap: 0; font-size: var(--t-apoyo); font-weight: 600; line-height: 1.35; color: var(--tinta); cursor: pointer; }
label.campo:has(> :is(input[type="checkbox"], input[type="radio"])) + label.campo:has(> :is(input[type="checkbox"], input[type="radio"])) { margin-top: 10px; }
label.campo:has(> :is(input[type="checkbox"], input[type="radio"])) > :is(input[type="checkbox"], input[type="radio"]) { margin-top: -1px; }
label.campo:has(> input:disabled) { color: var(--gris); cursor: default; }
/* `fieldset.campo` (los pasos de «Nuevo curso» de la jefa y de la autora; ¿A quién?, ¿Para qué casa?, Tu respuesta): sin el marco gris del
   navegador — su legend es la etiqueta de arriba, como en `.b-campo` */
fieldset.campo { display: grid; gap: 10px; min-width: 0; margin: 0; padding: 0; border: 0; }
fieldset.campo > legend { padding: 0; margin: 0 0 8px; font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
fieldset.campo + fieldset.campo { margin-top: 18px; }
/* un enlace suelto dentro de una nota («Empezar a mano», «Ver si ya está»): el vino de la casa, nunca el azul del navegador */
:where(.note, .lead, .fuente, .editor-turno .detalle) a:not([class]) { color: var(--vino); font-weight: 700; text-decoration: underline; text-decoration-thickness: 1.5px; text-underline-offset: 3px; }
label.campo > :is(input:where(:not([type="checkbox"], [type="radio"])), select, textarea) { width: 100%; min-height: 48px; padding: 11px 14px; border-radius: 14px; border: 1.5px solid var(--linea); background: var(--hoja); color: var(--tinta); font: 600 16px var(--f-texto); }
label.campo > textarea { min-height: 96px; resize: vertical; line-height: 1.4; }
.tel { display: flex; gap: 8px; }
.tel .lada { min-width: 64px; display: grid; place-items: center; min-height: 52px; border-radius: 14px; background: var(--papel); font-weight: 700; color: var(--vino); }
.tel input { flex: 1; min-width: 0; min-height: 52px; padding: 11px 14px; border-radius: 14px; border: 1.5px solid var(--linea); background: var(--hoja); color: var(--tinta); font: 700 20px var(--f-texto); letter-spacing: .04em; }
.cajas { position: relative; display: grid; grid-template-columns: repeat(6, 1fr); gap: 8px; }
.cajas span { display: grid; place-items: center; height: 58px; border-radius: 14px; background: var(--hoja); border: 1.5px solid var(--linea); font-family: var(--f-display); font-size: 30px; color: var(--vino); }
.cajas span.hoy { border-color: var(--vino); box-shadow: 0 0 0 3px var(--espera-claro); }
/* un solo campo de verdad encima de las seis cajas (las cajas sólo pintan lo que se escribe) */
.cajas input { position: absolute; inset: 0; opacity: 0; width: 100%; font-size: 16px; }
:is(button, a).sec { display: block; width: 100%; background: transparent; border: 0; padding: 12px 0; font-weight: 700; font-size: var(--t-apoyo); color: var(--vino); cursor: pointer; text-align: center; min-height: 44px; }
.quien-soy { display: flex; gap: 16px; align-items: center; padding: 10px var(--orilla) 0; }
.quien-soy .avatar { width: 72px; height: 72px; font-size: 24px; cursor: default; }
.quien-soy h1 { margin: 0; font: 500 var(--t-titulo)/1 var(--f-display); color: var(--vino); }
.quien-soy p { margin: 6px 0 0; font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.campos { display: grid; gap: 10px; }
.dato { background: var(--papel); border-radius: var(--r-tarjeta); padding: 14px 16px; }
.dato .campo { font-weight: 700; font-size: var(--t-cuerpo); line-height: 1.2; }
.dato .campo small { display: block; margin-top: 3px; font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.dato .campo .paga { display: inline-block; margin-top: 6px; padding: 2px 10px; border-radius: 999px; background: var(--espera-claro); color: var(--espera-tinta); font-size: var(--t-apoyo); font-weight: 700; }
.dato .quien { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 10px; }
.dato .q { display: inline-flex; align-items: center; gap: 6px; padding: 4px 12px; border-radius: 999px; background: var(--crema); color: var(--vino); font-size: var(--t-apoyo); font-weight: 700; }
.dato .q .ico { width: 18px; height: 18px; stroke-width: 2.3; }
.dato .q.edita { background: var(--papel-2); color: var(--vino); }
.dato .q.no { background: transparent; color: var(--gris); border: 1.5px dashed var(--linea); }
.nota-v { display: flex; gap: 12px; align-items: flex-start; font-size: var(--t-apoyo); font-weight: 600; }
.nota-v .ico { color: var(--vino); margin-top: 2px; flex: none; }
section.fuente { display: grid; gap: 6px; margin-top: 26px; }
p.fuente { margin: 22px var(--orilla) 0; font-size: var(--t-nota); color: var(--gris); font-weight: 600; }

/* ---- Más piezas de las héroes de la primera vez para la puerta de yo (primera.entrar.queve, .antes, .listo, primera.entrar).
   .fila va dentro de un .panel y lleva su .ic (en jefa.muro, aprender.camino y el .detalle de una checada .fila es otra cosa); la burbuja global de arriba es el
   WhatsApp de la casa: aquí sólo se ajusta dentro de un .chat y dentro de un paso del camino. ---- */
.promesa { background: var(--vino); color: var(--crema); border-radius: var(--r-grande); padding: 16px 18px; }
.promesa .k { font-size: var(--t-apoyo); font-weight: 700; color: var(--oro-suave); }
.promesa p { margin: 6px 0 0; font-family: var(--f-display); font-size: 24px; line-height: 1.12; }
.panel:has(> .fila > .ic) { padding: 2px 16px; }
.panel > .fila:has(> .ic) { display: flex; gap: 14px; align-items: flex-start; padding: 14px 0; }
.panel > .fila:has(> .ic) + .fila { border-top: 1px solid var(--linea); }
.panel > .fila:has(> .ic) span { display: block; margin-top: 2px; font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.panel > .fila:has(> .ic) .ic { width: 40px; height: 40px; border-radius: 12px; background: var(--crema); display: grid; place-items: center; color: var(--vino); flex: none; }
.panel > .fila:has(> .ic) b { display: block; font-size: 16px; }
.chat { background: var(--papel-2); border-radius: var(--r-grande); padding: 14px; display: grid; gap: 10px; }
.chat .cab { display: flex; align-items: center; gap: 10px; font-weight: 700; font-size: var(--t-cuerpo); padding-bottom: 6px; }
.chat .cab .av { width: 36px; height: 36px; border-radius: 50%; background: var(--vino); color: var(--crema); display: grid; place-items: center; font-size: var(--t-apoyo); font-weight: 700; }
.chat .burbuja { background: var(--hoja); border-radius: 14px 14px 14px 4px; padding: 12px 14px; font-size: var(--t-cuerpo); font-weight: 600; line-height: 1.45; max-width: 92%; }
.chat .burbuja small { display: block; margin-top: 6px; font-size: var(--t-apoyo); color: var(--gris); font-weight: 700; text-align: right; }
.camino .paso .burbuja { display: inline-block; margin-top: 8px; padding: 8px 12px; border-radius: 4px 14px 14px 14px; background: var(--hoja); border: 1px solid var(--linea); font-size: var(--t-apoyo); font-weight: 600; color: var(--tinta); line-height: 1.35; }
.camino .paso .burbuja b { font-family: var(--f-display); font-weight: 500; font-size: 20px; letter-spacing: .08em; color: var(--vino); }
.hero-listo { background: var(--vino); color: var(--crema); border-radius: var(--r-grande); padding: 22px 20px 20px; text-align: center; }
.hero-listo .k { font-size: var(--t-apoyo); font-weight: 700; color: var(--oro-suave); }
.hero-listo .num { font-family: var(--f-display); font-size: var(--t-numero, 72px); line-height: .95; margin: 8px 0 0; }
/* v2 pinta .v2-numero y .v2-frase con :root[data-kit="v2"] (0,3,x): aquí se sube igual para que sobre vino se lean claros */
:root[data-kit="v2"] .hero-listo .v2-numero::before { background: var(--subraya-vino, rgba(250, 242, 231, .16)); }
.hero-listo p { margin: 8px 0 0; color: var(--crema-tenue); font-weight: 600; font-size: var(--t-cuerpo); }
:root[data-kit="v2"] .hero-listo p.v2-frase { margin: 10px 0 0; color: var(--crema-tenue); font-size: var(--t-cuerpo); }

/* ---- D2 · las piezas como componentes (components/kit): lo que sus héroes escribían en línea o en su propia hoja ---- */
.cita .palabras { display: block; }
.banda .n { font-family: var(--f-display); font-weight: 400; font-size: 28px; line-height: 1.12; margin: 6px 0 10px; }
.banda .n + p { margin: 0; line-height: 1.4; }

/* ---- D5 · las horas de Tiempo como las dibuja su héroe (persona.tiempo): el número con sus unidades chicas en la línea, y cada día
   con su checada — el día y sus horas en Eighties en un renglón, la entrada y la salida debajo. Un día con destino es a.ent.item. ---- */
.horas { font-family: var(--f-display); font-weight: 500; color: var(--vino); line-height: .9; font-variant-numeric: tabular-nums; font-size: var(--t-numero, 64px); }
.horas small { font-family: var(--f-texto); font-size: 20px; font-weight: 700; color: var(--gris); margin: 0 6px 0 3px; }
.ent { display: block; width: 100%; padding: 14px 16px; background: transparent; border: 0; text-align: left; color: inherit; cursor: pointer; }
.ent + .ent { border-top: 1px solid var(--linea); }
.ent .cab { display: flex; justify-content: space-between; align-items: baseline; gap: 10px; }
.ent .dia { font-weight: 700; font-size: var(--t-cuerpo); }
.ent .h { font-family: var(--f-display); font-size: 22px; color: var(--vino); font-variant-numeric: tabular-nums; white-space: nowrap; }
.ent .rango { font-size: var(--t-apoyo); color: var(--gris); font-weight: 600; margin-top: 2px; }
.list.pagina .ent { padding: 14px 2px; }

/* ---- D8 · ronda 2 (2026-10-11): «Mi equipo» para quien dirige (jefa.equipo, jefa.equipo.persona, el bloque de jefa.hoy). Sólo lo
   que el reloj registró a la hora de la lectura y los avisos de hoy: nada de horario (a tiempo, descanso, «Entra 12:00»), nadie
   «no ha llegado» ni «faltó». Componentes: components/kit/MiEquipo.tsx; palabras: incidencias.ts; en /kit, #mi-equipo. ---- */
/* Un chip que manda («Gracias por avisar», «Visto»): su propio form, en línea con los demás chips. */
form.v2-envia { display: inline-flex; margin: 0; }
/* El chip que manda es el toque de la pantalla («Lo vi hacerlo», «Deshacer», «Visto»): mide sus 44 px de verdad, no 40 + el halo (ojo O11-2). */
form.v2-envia > .chip { min-height: var(--blanco); }
/* El resumen: cuántos están dentro (un número), el equipo como tira por estado del reloj, las claves y la hora de la lectura. */
.v2-resumen-equipo { display: grid; gap: 12px; padding: 16px; }
.v2-resumen-equipo .k { margin: 0; font-size: var(--t-nota); font-weight: 700; color: var(--gris); }
.v2-resumen-equipo .cuenta { display: flex; align-items: baseline; gap: 10px; }
.v2-resumen-equipo .cuenta b { font-family: var(--f-display); font-weight: 500; font-size: 44px; line-height: .9; color: var(--vino); }
.v2-resumen-equipo .cuenta span { font-size: var(--t-cuerpo); font-weight: 700; color: var(--tinta); }
.v2-resumen-equipo .tira { display: flex; gap: 4px; }
.v2-resumen-equipo .tira i { flex: 1 1 0; min-width: 12px; height: 12px; border-radius: 6px; background: var(--papel-2); }
.v2-resumen-equipo .note { margin: 0; }
.v2-claves { display: flex; flex-wrap: wrap; gap: 6px 14px; margin: 0; padding: 0; list-style: none; font-size: 16px; font-weight: 700; color: var(--gris); }
.v2-claves li { display: inline-flex; align-items: center; gap: 6px; }
.v2-claves i { display: inline-block; width: 10px; height: 10px; border-radius: 3px; background: var(--papel-2); }
:is(.v2-claves, .tira) i.dentro { background: var(--vino); }
:is(.v2-claves, .tira) i.salio { background: var(--gris-claro); }
:is(.v2-claves, .tira) i.sin { background: var(--crema); box-shadow: inset 0 0 0 2px var(--vino-claro); }
/* Quien no checa en reloj (corporativo, sin asignar): rayado, para que se lea sobre el papel del panel y no se confunda con «salió». */
:is(.v2-claves, .tira) i.reloj { background: repeating-linear-gradient(135deg, var(--gris-claro) 0 2px, transparent 2px 5px); box-shadow: inset 0 0 0 1.5px var(--gris-claro); }
:is(.v2-claves, .tira) i.aviso { background: var(--espera); }
/* Una persona del equipo: iniciales, nombre y puesto, el estado del reloj a la derecha y el aviso de hoy como etiqueta. */
.item.v2-quien { align-items: flex-start; }
.item.v2-quien > .flecha { align-self: center; }
.item.v2-quien .nom { display: flex; flex-wrap: wrap; align-items: baseline; gap: 0 8px; }
.item.v2-quien .nom .oficio { font-size: 16px; font-weight: 600; line-height: 1.3; color: var(--gris); }
.item.v2-quien .nom .est { margin-left: auto; font-size: 16px; font-weight: 700; line-height: 1.3; color: var(--vino); white-space: nowrap; }
.item.v2-quien .nom .est:is(.salio, .sin_entrada) { color: var(--gris); }
.item.v2-quien .nom .est.sin_reloj { color: var(--gris-medio); font-weight: 600; }
.item.v2-quien .txt .pill { justify-self: start; margin-top: 6px; }
.pill.gris { background: var(--papel-2); color: var(--gris); }
/* Las iniciales nunca bajan de 14 px (HECHOS: el piso de 16 px exceptúa pestañas 12, «IA» 11 e iniciales 14); el .avatar.chico de la demo
   las ponía a 12 (el ojo, pase 5h, en «Mi equipo»). */
.avatar.chico { font-size: 14px; }
.pill.nuevo::before { content: ""; width: 8px; height: 8px; border-radius: 50%; background: currentColor; flex: none; }
.v2-grupo-equipo > .date { margin: 24px 2px 6px; font-weight: 700; color: var(--tinta); }
.v2-grupo-equipo .cuantos { font-weight: 600; color: var(--gris); }
.v2-grupo-equipo > .note { margin: 8px 2px 0; }
/* El aviso para quien dirige (de la héroe jefa.equipo): terracota mientras espera respuesta; gris cuando ya se respondió o se canceló. */
.exc { display: grid; gap: 8px; padding: 14px 16px; border-radius: var(--r-tarjeta); border-left: 6px solid var(--espera); background: var(--espera-claro); color: var(--espera-tinta); }
.exc + .exc { margin-top: 10px; }
.exc.gris { border-left-color: var(--gris-claro); background: var(--papel); color: var(--tinta); }
.exc h3 { margin: 0; font-size: 16px; line-height: 1.25; color: var(--tinta); }
.exc p { margin: 0; font-size: var(--t-apoyo); font-weight: 600; line-height: 1.4; color: var(--tinta); opacity: .85; }
.exc p.dicho { opacity: 1; }
.exc .acciones { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 2px; }
details.v2-otra > summary { display: flex; align-items: center; min-height: var(--blanco); font-size: var(--t-apoyo); font-weight: 700; color: var(--vino); cursor: pointer; list-style: none; }
details.v2-otra > summary::-webkit-details-marker { display: none; }
details.v2-otra[open] > summary { color: var(--gris); }
details.v2-otra .b-formulario { gap: 10px; }

/* ---- D6 · ronda 2 (2026-10-11): «Voy tarde» / «Hoy no puedo ir» y lo que pasa después (persona.hoy.tarde, .nopuedo, .enviado;
   la misma conversación en jefa.equipo.persona). Todo viaja en la app: nada «por el número de la casa», ni verde de WhatsApp ni
   palomitas (HECHOS «Round 2 — T0»). Componentes: components/kit/Avisos.tsx; en /kit, #avisos. ---- */
/* 1 · Las respuestas de un toque: la banda de vino (.b-decision) con sus respuestas una bajo otra, cada una un botón que manda
   (form.opciones). La primera —o la que la persona ya dijo— va llena; las demás de contorno sobre el vino, todas con su flecha. */
.b-decision .opciones { display: grid; gap: 10px; margin-top: 16px; }
.b-decision .opciones .btn { min-height: 56px; padding: 14px 18px; justify-content: space-between; font-size: 17px; text-align: left; }
.b-decision .opciones .btn .ico { width: 18px; height: 18px; }
.b-decision .opciones .btn.ghost { background: transparent; color: var(--sobre-vino); border: 1.5px solid var(--sobre-vino); }
:root[data-kit="v2"] .b-decision .opciones .btn.ghost { box-shadow: 0 var(--canto) 0 var(--sobre-vino-linea); }
/* 2 · El motivo: los renglones altos de «¿Quién la ve?» (.publico) con su radio de verdad, para que el formulario se mande sin
   JavaScript. Ninguno elegido al llegar; el botón de mandar se ve apagado hasta que la persona toca uno (`required` lo cuida
   también donde el navegador no sabe :has). */
/* Dentro de un form.b-formulario el renglón sigue siendo renglón (aquella regla hace de cada label una rejilla gris). */
.publico > label.publico-op { position: relative; display: flex; font-size: var(--t-cuerpo); font-weight: 500; color: var(--tinta); }
label.publico-op > input[type="radio"] { position: absolute; inset: 0; width: 100%; height: 100%; margin: 0; opacity: 0; cursor: pointer; }
label.publico-op:has(> input:checked) { border-color: var(--vino); background: var(--papel); }
label.publico-op:has(> input:checked) .p-ic { background: var(--vino); color: var(--crema); }
label.publico-op:has(> input:checked) .p-radio { background: var(--vino); box-shadow: inset 0 0 0 2px var(--vino), inset 0 0 0 7px var(--papel); }
label.publico-op:has(> input:focus-visible) { outline: 3px solid var(--oro); outline-offset: 2px; }
form:has(.publico input[required]):not(:has(.publico input:checked)) .btn[type="submit"] { opacity: .42; }
.publico:has(input:checked) .publico-pista { visibility: hidden; }
/* La nota de una línea («Para Paola»): el campo de siempre (label.campo) con su línea de ayuda debajo. */
label.campo > .ayuda { font-size: var(--t-nota); font-weight: 600; color: var(--gris); }
/* 3 · Lo que se dijeron (.hilo): el aviso de la persona a la derecha en vino, la respuesta a la izquierda en crema y, entre los
   dos, lo que pasó en palabras con su hora (.suceso): «Le llegó a Paola · 6:48» (el aviso ya está en su «Para ti») ≠ «Paola ya
   lo vio · 6:50» (lo abrió). En la vista de quien dirige los lados se invierten (.suceso.izq va bajo el mensaje de la izquierda). */
.hilo { display: grid; gap: 10px; padding: 14px 16px; border-radius: var(--r-tarjeta); background: var(--papel); }
.hilo .mio, .hilo .suyo { max-width: 86%; padding: 10px 14px; font-weight: 600; line-height: 1.4; overflow-wrap: anywhere; }
.hilo .mio { justify-self: end; border-radius: 16px 16px 4px 16px; background: var(--vino); color: var(--sobre-vino); }
.hilo .suyo { justify-self: start; border-radius: 16px 16px 16px 4px; background: var(--crema); color: var(--tinta); }
.hilo :is(.mio, .suyo) small { display: block; margin-top: 4px; font-size: var(--t-nota); font-weight: 700; opacity: .8; }
.hilo :is(.mio, .suyo).anulado { opacity: .55; }
.hilo .suceso { justify-self: end; display: flex; align-items: center; gap: 6px; max-width: 92%; margin: -4px 2px 0; font-size: var(--t-nota); font-weight: 700; line-height: 1.3; color: var(--gris); text-align: right; }
.hilo .suceso.izq { justify-self: start; text-align: left; }
.hilo .suceso .ico { width: 18px; height: 18px; }
.hilo .suceso.visto { color: var(--vino); }
.hilo .suceso.espera { margin-top: 2px; font-weight: 600; }
/* 4 · «Lo de ahora» con sus acciones: la tarjeta entera sigue abriendo Tiempo (a.cubre se estira debajo de todo) y los chips
   («Voy tarde», «Hoy no puedo ir») quedan encima, tocables aparte — dos enlaces hermanos, nunca uno dentro de otro. */
section.v2-ahora > a.cubre { position: absolute; inset: 0; z-index: 0; border-radius: inherit; }
section.v2-ahora:has(> a.cubre) > :not(a.cubre) { position: relative; z-index: 1; pointer-events: none; }
section.v2-ahora:has(> a.cubre) > .acciones > * { pointer-events: auto; }
/* Sobre la tarjeta el halo de 4 px del chip (.chip::after) queda debajo de a.cubre en Chromium: aquí el chip mide sus 44 px de verdad
   (el ojo, pase 5f: 129×40). */
section.v2-ahora > .acciones .chip { min-height: var(--blanco); }

/* ---- D7 · ronda 2 (2026-10-11): «Para ti» (persona.parati) y su entrada en Hoy. Lo que llega a una sola persona —la respuesta a
   su aviso; a quien dirige, el aviso de alguien de su equipo—; lo de toda la casa sigue en «Avisos de la casa». Componentes:
   components/kit/ParaTi.tsx (Campana, FilaParaTi, Bandeja) y Vacio.tsx; en /kit, #para-ti. ---- */
/* La entrada: la campana junto a tu foto, con la cuenta de lo que no has leído; sin nada nuevo, sólo la campana. */
.v2-lado { display: flex; align-items: center; gap: 10px; flex: none; }
.v2-campana { position: relative; display: grid; place-items: center; width: var(--blanco); height: var(--blanco); flex: none; border-radius: 50%;
  background: var(--papel); color: var(--vino); text-decoration: none; -webkit-tap-highlight-color: transparent; }
.v2-campana .cuenta-badge { position: absolute; top: -6px; right: -8px; box-shadow: 0 0 0 2px var(--crema); }
:root[data-kit="v2"] .v2-campana { transition: transform var(--d-3) var(--resorte-vivo); }
:root[data-kit="v2"] .v2-campana:active { transform: scale(.93); transition: transform var(--d-1) var(--suave); }
/* La bandeja: los renglones por día («Hoy», «Ayer», «El viernes»), lo nuevo arriba. Lo nuevo lleva su ícono lleno de vino y el
   título en negritas; lo leído, el ícono en papel y el título en su peso de lectura. La hora a la derecha; la segunda línea, dos
   renglones como mucho (lo completo vive en la pantalla que abre). */
.v2-bandeja > .date { margin: 24px 2px 6px; font-weight: 700; }
.v2-bandeja > .date:first-child { margin-top: 0; }
.item.para-ti .end { align-self: flex-start; margin-top: 1px; font-size: var(--t-nota); color: var(--gris); }
.item.para-ti .s { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; line-clamp: 2; overflow: hidden; }
.item.para-ti.leido .t { font-weight: 600; }
:root[data-kit="v2"] .v2-bandeja .list .item.para-ti:not(.leido) .ic { background: var(--vino); color: var(--crema); }
/* Lo que sólo oye un lector de pantalla («· sin leer»). */
.v2-oculto { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip-path: inset(50%); white-space: nowrap; border: 0; }

/* ---- D9 · ronda 2 (2026-10-11): lo que vive en el teléfono alrededor de cada pantalla — la banda de «Ver como», la tarjeta que
   pide los avisos y el interruptor de Yo › Privacidad. Componentes: components/kit/Telefono.tsx; en /kit, #telefono. ---- */
/* El interruptor (de la héroe persona.yo.privacidad): el renglón entero se toca; encendido = verde. Apagado mientras el teléfono
   contesta (disabled / aria-busy). */
.sw { display: flex; gap: 12px; align-items: center; width: 100%; min-height: 64px; padding: 12px 0; border: 0; background: transparent; color: inherit;
  font: inherit; text-align: left; cursor: pointer; -webkit-tap-highlight-color: transparent; }
.sw + .sw { border-top: 1px solid var(--linea); }
.sw .tx { flex: 1; min-width: 0; }
.sw .tx b { display: block; font-size: var(--t-cuerpo); }
.sw .tx span { display: block; margin-top: 2px; font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.sw i { position: relative; flex: none; width: 52px; height: 30px; border-radius: 999px; background: var(--papel-2); transition: background var(--d-1) var(--suave); }
.sw i::after { content: ""; position: absolute; top: 3px; left: 3px; width: 24px; height: 24px; border-radius: 50%; background: var(--hoja); box-shadow: 0 1px 3px var(--gris-claro);
  transition: transform var(--d-1) var(--suave); }
.sw[aria-pressed="true"] i { background: var(--verde); }
.sw[aria-pressed="true"] i::after { transform: translateX(22px); }
.sw:disabled { cursor: default; }
.sw:disabled i, .sw[aria-busy="true"] i { opacity: .55; }
.panel:has(> .sw) { padding: 4px 16px; }
/* «Viendo como Mateo · sólo lectura · Salir»: flota sobre toda pantalla (encima de la barra de pestañas cuando la hay) mientras
   dura la vista; ciruela, para que nunca se confunda con la app de la persona. */
.v2-vercomo { position: fixed; z-index: 7; left: 12px; right: 12px; bottom: calc(var(--abajo, env(safe-area-inset-bottom, 0px)) + 8px); display: flex; align-items: center; gap: 10px;
  min-height: 56px; padding: 6px 8px 6px 16px; border-radius: 28px; background: var(--ciruela); color: var(--sobre-vino); box-shadow: var(--sombra-barra, var(--sombra-flota)); }
.eq-app:has(.eq-pestanas) .v2-vercomo { bottom: calc(var(--abajo, env(safe-area-inset-bottom, 0px)) + 88px); }
.v2-vercomo > .ico { width: 20px; height: 20px; color: var(--sobre-vino-oro); }
.v2-vercomo p { flex: 1; min-width: 0; display: grid; margin: 0; font-size: 16px; line-height: 1.25; white-space: nowrap; }
.v2-vercomo p b { overflow: hidden; font-weight: 700; text-overflow: ellipsis; }
.v2-vercomo p span { font-weight: 600; color: var(--sobre-vino-2); }
.v2-vercomo form { flex: none; margin: 0; }
.v2-vercomo .salir { position: relative; min-height: 40px; padding: 8px 18px; border: 0; border-radius: 999px; background: var(--crema); color: var(--vino); font: 700 16px/1 var(--f-texto); cursor: pointer; }
.v2-vercomo .salir::after { content: ""; position: absolute; inset: -4px -2px; }
/* La tarjeta que pide los avisos, después de entrar y hasta que la persona contesta: una frase y las dos respuestas en fila, chica
   (≤ ~180 px a 390, el ojo 5g) para no tapar la primera pantalla de Hoy; sube como hoja sobre la barra de pestañas. */
.v2-pide-avisos { position: fixed; z-index: 7; left: 12px; right: 12px; bottom: calc(var(--abajo, env(safe-area-inset-bottom, 0px)) + 8px); display: grid; gap: 12px; padding: 14px;
  border: 1px solid var(--linea); border-radius: var(--r-grande); background: var(--hoja); box-shadow: var(--sombra-barra, var(--sombra-flota)); animation: v2-hoja var(--d-3) var(--resorte); }
.eq-app:has(.eq-pestanas) .v2-pide-avisos { bottom: calc(var(--abajo, env(safe-area-inset-bottom, 0px)) + 88px); }
.v2-pide-avisos .cab { display: flex; gap: 12px; align-items: center; }
.v2-pide-avisos .cab .ic { display: grid; place-items: center; flex: none; width: 36px; height: 36px; border-radius: 50%; background: var(--vino); color: var(--crema); }
.v2-pide-avisos .cab .ic .ico { width: 20px; height: 20px; }
.v2-pide-avisos .cab p { margin: 0; font-size: 16px; font-weight: 700; line-height: 1.35; color: var(--tinta); }
.v2-pide-avisos p.error { margin: 0; font-size: var(--t-apoyo); font-weight: 600; color: var(--rojo); }
.v2-pide-avisos .acciones { display: flex; gap: 10px; }
.v2-pide-avisos .acciones .btn { flex: 1; min-height: var(--blanco); padding: 10px 14px; }
/* Mientras la tarjeta está, lo último de la pantalla todavía sube por encima de ella (ojo O9-3, 2026-10-12: en iPhone tapaba «Otra
   persona» del código de entrada): el lienzo deja abajo lo más alto que la tarjeta mide a ese ancho (155 px a 360–430; 237 con su
   línea de error; 198 / 279 a 320) y 24 px de aire. */
.eq-app:has(> .v2-pide-avisos) > .eq-lienzo { --alto-pide-avisos: 160px; padding-bottom: calc(var(--abajo, env(safe-area-inset-bottom, 0px)) + 8px + var(--alto-pide-avisos) + 24px); }
.eq-app:has(> .v2-pide-avisos):has(.eq-pestanas) > .eq-lienzo { padding-bottom: calc(var(--abajo, env(safe-area-inset-bottom, 0px)) + 88px + var(--alto-pide-avisos) + 24px); }
.eq-app:has(> .v2-pide-avisos > .error) > .eq-lienzo { --alto-pide-avisos: 240px; }
@media (max-width: 359px) {
  .eq-app:has(> .v2-pide-avisos) > .eq-lienzo { --alto-pide-avisos: 200px; }
  .eq-app:has(> .v2-pide-avisos > .error) > .eq-lienzo { --alto-pide-avisos: 282px; }
}

/* ---- D10 · lo que la revisión de la ronda 2 le tocó al kit (2026-10-11) ---- */
/* «Lo de ahora»: sus notas («Esta semana…», «Actualizado hace…») no traen el margen del navegador además del hueco de la rejilla
   (~44 px entre renglón y renglón); la tarjeta respira con su gap de 12 px, como en la héroe. */
:root[data-kit="v2"] .v2-ahora > p { margin: 0; }

/* ---- D12 · ronda 3 (2026-10-11): confirmar un día (CONTRATO S14; persona.tiempo.abiertos, .corregir y el renglón de Hoy). Un día
   que el reloj dejó sin salida: la persona escribe a qué hora salió. Del vocabulario de las héroes de Tiempo: la etiqueta .est,
   label.campo, la hora en la letra de los números. Nada aquí escribe en el reloj ni en Buk. ---- */
/* La etiqueta al final de un renglón, antes de la flecha (Fila.etiqueta): verde = hecho; .por = le toca a la persona (terracota);
   .gris = nada que hacer. */
.item > .est { flex: none; margin-left: auto; border-radius: var(--r-pastilla); padding: 4px 10px; font-size: var(--t-apoyo); font-weight: 700; line-height: 1.3; white-space: nowrap; background: var(--verde-claro); color: var(--verde-tinta); }
.item > .est.por { background: var(--espera-claro); color: var(--espera-tinta); }
.item > .est.gris { background: var(--papel-2); color: var(--gris); }
.item > .end + .est { margin-left: 8px; }
.item > .est + .flecha { margin-left: 0; }
/* El día por confirmar: el reloj sobre terracota, para que se lea «te toca» sin otro color. */
.v2-por-confirmar .item .ic { background: var(--espera-claro); color: var(--espera-tinta); }
/* La hoja «¿A qué hora saliste?»: el día arriba, lo ya escrito en verde, la hora grande y un solo botón con orilla. */
.v2-salida { display: grid; gap: 14px; margin-top: 18px; }
.v2-salida .panel { padding: 2px 16px; }
.v2-salida .panel > .fila .ic { background: var(--espera-claro); color: var(--espera-tinta); }
.v2-salida .b-formulario .error { margin: 0; font-size: var(--t-apoyo); font-weight: 700; color: var(--rojo); }
/* La hora: un campo de 64 px en Eighties, alineado a la izquierda también en iPhone (Safari centra el valor y encoge un campo vacío). */
.b-formulario .hora-salida input[type="time"] { -webkit-appearance: none; appearance: none; display: block; width: 100%; min-width: 0; min-height: 64px; padding: 8px 16px;
  font: 500 34px/1.1 var(--f-display); color: var(--vino); font-variant-numeric: tabular-nums; text-align: left; }
.b-formulario .hora-salida input[type="time"]::-webkit-date-and-time-value { text-align: left; margin: 0; }
.b-formulario .hora-salida input[type="time"]::-webkit-calendar-picker-indicator { width: 24px; height: 24px; opacity: .55; cursor: pointer; }
.v2-salida form + form .sec { margin-top: -4px; }

/* ---- La hoja se cierra jalándola (equipo-v2.js §9), también con el dedo: la zona de arriba (asa + título, los 72 px donde el
   script empieza a jalar) no le da el gesto vertical al scroll del navegador —con pan-y el navegador cancelaba el puntero al
   primer movimiento— ni empieza una selección de texto o el arrastre del enlace «Cerrar» (WebKit). El cuerpo sigue con pan-y y
   se desplaza como siempre. Lo encontró el recorrido del cascarón, 2026-10-11. ---- */
:root[data-kit="v2"] .v2-hoja-cab { touch-action: none; -webkit-user-select: none; user-select: none; }
:root[data-kit="v2"] .v2-hoja-cab a { -webkit-user-drag: none; }

/* ---- D11 · ronda 3 (2026-10-11): Recibos (persona.dinero.recibos, .semana, .accesos). Promovido de las dos héroes, recortado a
   la ronda 3: sin renglones del recibo, sin «Comparar», sin aguinaldo, sin XML — el PDF es el recibo — y sin estado (nunca «Pagado»).
   Las palabras viven en components/kit/nomina.ts. ---- */
/* El más reciente: la tarjeta de vino arriba de la lista (la .vigente de la héroe); toda la tarjeta abre el recibo. */
.recibos-ultimo { margin-top: 18px; }
.recibo-vigente { display: block; width: 100%; text-align: left; border: 0; cursor: pointer; background: var(--vino); color: var(--crema); border-radius: var(--r-grande); padding: 18px;
  text-decoration: none; -webkit-tap-highlight-color: transparent; touch-action: manipulation; --c-monto: var(--sobre-vino); }
.recibo-vigente .k { font-size: var(--t-nota); font-weight: 700; color: var(--oro-suave); }
.recibo-vigente .money { color: var(--crema); margin-top: 10px; }
:is(.recibo-vigente, .recibo-neto) .money small { font-size: .5em; }
:root[data-kit="v2"] .recibo-vigente .v2-numero::before { background: var(--subraya-vino); }
:root[data-kit="v2"] .recibo-vigente .v2-frase { color: var(--crema-tenue); }
:root[data-kit="v2"] .recibo-vigente .v2-frase b { color: var(--crema); }
/* Un año que no es éste lleva su rótulo encima de su lista. */
.recibos-anio { margin: 18px 2px 8px; }
/* El recibo abierto: «Neto de este recibo» y el número (sin estado: el `abierto` de Buk viene en todos los renglones, HECHOS 23:06). */
.recibo-neto { margin-top: 18px; }
.recibo-neto .big { margin-top: 8px; }
/* El PDF: el botón con orilla y «Descargar» como chip, en fila (la héroe: «PDF» + «XML»); la frase debajo. */
.recibo-pdf { gap: 10px; flex-wrap: wrap; }
.recibo-pdf .btn { flex: 1 1 auto; width: auto; }
.recibo-pdf .chip { min-height: var(--blanco); }
.recibo-pdf-nota { margin: 8px 0 0; }
.recibos-accesos-nota { margin: 14px 0 0; }

/* ---- D13 · ronda 3 (2026-10-11): el registro del mes (CONTRATO S15; persona.tiempo.registro). Cada día del mes —entrada, salida,
   horas y la salida que escribió la persona— en renglones que se leen a 390 px los 31; los días antes de que la app leyera el reloj
   son «Sin registro en la app» (nunca cero), seguidos en un solo renglón. ---- */
.v2-registro { margin-top: 18px; }
/* El total se queda pegado bajo la barra de regreso (.eq-barra: 56 px + la muesca) mientras bajan los días, sobre el papel de la
   pantalla para que los renglones no se transparenten; a la derecha, el mes anterior y el siguiente. Sin barra, arriba del todo. */
.v2-registro-total { position: sticky; top: calc(var(--arriba, env(safe-area-inset-top, 0px)) + 56px); z-index: 2; display: flex; align-items: center; gap: 12px;
  margin: 0 calc(-1 * var(--orilla)); padding: 10px var(--orilla) 12px; background: var(--crema); box-shadow: 0 1px 0 var(--linea); }
.eq-lienzo:not(:has(> .eq-barra)) .v2-registro-total { top: 0; }
.v2-registro-total .tx { flex: 1; min-width: 0; }
.v2-registro-total h2 { margin: 0; font: 500 26px/1.05 var(--f-display); color: var(--vino); }
.v2-registro-total p { margin: 4px 0 0; font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.v2-registro-total .mover { display: flex; gap: 6px; flex: none; }
.v2-registro-total .mover > * { width: var(--blanco); height: var(--blanco); border-radius: var(--r-pastilla); display: grid; place-items: center; }
.v2-registro-total .mover a { background: var(--papel); color: var(--vino); text-decoration: none; -webkit-tap-highlight-color: transparent; }
.v2-registro-total .mover a:active { transform: scale(.94); }
.v2-registro-total .mover .ico { width: 20px; height: 20px; }
/* Un día: el número y su día de la semana, lo que marcó el reloj (o lo que escribió la persona), las horas a la derecha. */
.v2-reg-dias { display: grid; margin-top: 4px; }
.v2-reg-dia { display: grid; grid-template-columns: 44px minmax(0, 1fr) auto auto; align-items: center; gap: 2px 12px; min-height: 56px; padding: 6px 2px;
  border-bottom: 1px solid var(--linea); color: inherit; text-decoration: none; -webkit-tap-highlight-color: transparent; }
a.v2-reg-dia:active { background: var(--papel); }
.v2-reg-dia .cuando { display: grid; justify-items: center; line-height: 1; }
.v2-reg-dia .cuando b { font: 500 22px/1 var(--f-display); color: var(--vino); font-variant-numeric: tabular-nums; }
.v2-reg-dia .cuando span { margin-top: 3px; font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.v2-reg-dia .cuando.rango b { font: 700 16px/1.2 var(--f-texto); color: var(--gris); white-space: nowrap; }
.v2-reg-dia .que { display: grid; min-width: 0; }
.v2-reg-dia .t { font-size: var(--t-cuerpo); font-weight: 700; line-height: 1.25; font-variant-numeric: tabular-nums; }
.v2-reg-dia .s { font-size: var(--t-apoyo); font-weight: 600; line-height: 1.3; color: var(--gris); }
.v2-reg-dia .h { font-weight: 700; color: var(--vino); white-space: nowrap; font-variant-numeric: tabular-nums; }
.v2-reg-dia .flecha { width: 18px; height: 18px; color: var(--gris-claro); }
.v2-reg-dia:is([data-estado="sin_marca"], [data-estado="sin_registro"]) { min-height: 48px; }
.v2-reg-dia:is([data-estado="sin_marca"], [data-estado="sin_registro"]) .t { font-weight: 600; color: var(--gris); }
.v2-reg-dia:is([data-estado="sin_marca"], [data-estado="sin_registro"]) .cuando b { color: var(--gris-medio); }
.v2-reg-dia[data-estado="sin_salida"] .s { color: var(--espera-tinta); }
.v2-reg-dia > .est { border-radius: var(--r-pastilla); padding: 4px 10px; font-size: var(--t-apoyo); font-weight: 700; line-height: 1.3; white-space: nowrap; background: var(--verde-claro); color: var(--verde-tinta); }
.v2-reg-dia > .est.por { background: var(--espera-claro); color: var(--espera-tinta); }
.v2-reg-vacio { margin: 14px 0 0; }

/* ---- D15 · ronda 3 (2026-10-11): el QR de la junta (CONTRATO S16; jefa.equipo.qr, sin héroe) y la banda de «Hoy sin datos» (S17). ---- */
/* Quien dirige elige a UNA persona; el código lleva su nombre encima, se lee a un brazo de distancia (hasta 260 px en un panel de 350),
   y cuenta sus 5 minutos con una barra que sólo se encoge (transform); el último minuto, en terracota. A cero, la imagen se quita. */
.v2-qr-persona .flecha { width: 22px; height: 22px; color: var(--vino); }
.v2-qr-persona[aria-busy="true"] { opacity: .6; }
.v2-qr { margin-top: 14px; }
.v2-qr .panel { display: grid; justify-items: center; gap: 4px; padding: 18px 16px 16px; text-align: center; }
.v2-qr .k { margin: 0; font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.v2-qr .nombre { margin: 0; font: 500 30px/1.05 var(--f-display); color: var(--vino); }
.v2-qr .puesto { margin: 0; font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.v2-qr .cuadro { width: min(260px, 100%); aspect-ratio: 1; margin-top: 12px; border-radius: 18px; background: var(--hoja); box-shadow: 0 0 0 1px var(--linea); overflow: hidden; }
.v2-qr .cuadro .imagen, .v2-qr .cuadro .imagen svg { display: block; width: 100%; height: 100%; color: var(--ciruela); }
.v2-qr .cuadro .vencido { display: grid; place-content: center; gap: 4px; height: 100%; border: 2px dashed var(--linea); border-radius: 18px; background: var(--papel); }
.v2-qr .cuadro .vencido b { font: 500 30px/1 var(--f-display); color: var(--gris); }
.v2-qr .cuadro .vencido span { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.v2-qr .tiempo { display: grid; grid-template-columns: auto minmax(0, 1fr); align-items: center; gap: 12px; width: min(260px, 100%); margin-top: 12px; }
.v2-qr .tiempo b { font: 500 34px/1 var(--f-display); color: var(--vino); font-variant-numeric: tabular-nums; }
.v2-qr .tiempo .barra { height: 8px; border-radius: var(--r-pastilla); background: var(--papel-2); overflow: hidden; }
.v2-qr .tiempo .barra i { display: block; height: 100%; border-radius: inherit; background: var(--vino); transform-origin: left center; transform: scaleX(var(--parte, 1)); transition: transform 1s linear; }
.v2-qr .tiempo.poco b { color: var(--espera-tinta); }
.v2-qr .tiempo.poco .barra i { background: var(--espera); }
.v2-qr .como { margin: 10px 0 0; max-width: 30ch; font-size: var(--t-apoyo); font-weight: 600; color: var(--tinta); }
.v2-qr .acciones { display: grid; gap: 4px; margin-top: 12px; }
@media (prefers-reduced-motion: reduce) { .v2-qr .tiempo .barra i { transition: none; } }

/* «Sin señal · Hoy leído a las 9:12»: el service worker la pone como primer hijo de <body>, fuera de React, cuando sirve la última
   copia buena sin red. Una franja de ciruela arriba de todo (también de la muesca); la pantalla baja lo que mide la franja —el marco
   del cascarón es position: fixed; inset: 0 y #pantalla lleva inset en línea—, y la barra de regreso ya no suma la muesca. */
.eq-sin-senal { position: fixed; top: 0; left: 0; right: 0; z-index: 60; box-sizing: border-box; min-height: calc(var(--alto-sin-senal) + env(safe-area-inset-top, 0px));
  display: flex; align-items: center; gap: 8px; padding: env(safe-area-inset-top, 0px) var(--orilla) 0; background: var(--ciruela); color: var(--crema);
  font: 700 var(--t-apoyo)/1.25 var(--f-texto); }
.eq-sin-senal::before { content: ""; flex: none; width: 10px; height: 10px; border-radius: 50%; background: var(--espera); box-shadow: 0 0 0 3px rgba(250, 242, 231, .18); }
:root { --alto-sin-senal: 40px; }
body:has(> .eq-sin-senal) { --arriba: 0px; }
body:has(> .eq-sin-senal) #pantalla { top: calc(var(--alto-sin-senal) + env(safe-area-inset-top, 0px)) !important; }
/* Sin red, la copia se lee aunque el teléfono ya no guarde entra.js (que quita el velo de [data-entra]): sin entrada, todo visible. */
body:has(> .eq-sin-senal) [data-entra] { opacity: 1; transform: none; animation: none; }

/* ---- D16 · la revisión de la ronda 3 (2026-10-12): lo que le tocó al kit ---- */
/* Un estado en su lugar (no pudimos leer…) justo bajo la cabeza de la pantalla respira 8 px sin estilo en línea (jefa 3). */
.top + .pad > .b-estado:first-child { margin-top: 8px; }

/* ---- D17–D21 · ronda 4 (2026-10-12): Aprender. Lo que las héroes de la demo (persona.aprender, .ruta, .leccion, .leccion.quiz,
   persona.hoy) escribían bajo [data-heroe], aquí como clases del kit; la constancia, el requisito y «Cuenta para» ya estaban arriba
   (ronda «aprender» de la demo). Dos cambios con razón: la confianza elegida va en vino, no en oro (el oro es sólo donde la casa
   firma), y la opción correcta / la tuya llevan su marca además del color. Nada aquí se dibuja sin dato: sin foto no hay foto,
   sin voz no hay botón de audio. ---- */

/* D17 · la cabeza de la lección: la foto con su rótulo y «Escúchala» (sin foto, la banda de vino); la fuente; el texto. */
.l-vis { position: relative; border-radius: var(--r-grande); overflow: hidden; height: 236px; margin-top: 16px; background: var(--foto-fondo); }
.l-vis img { width: 100%; height: 100%; object-fit: cover; object-position: center 60%; display: block; }
.l-vis .shade { position: absolute; inset: 0; background: var(--velo-foto); }
.l-vis .cap { position: absolute; left: 18px; right: 18px; bottom: 16px; color: var(--crema); }
.l-vis .k { margin: 0; font-size: var(--t-apoyo); font-weight: 700; color: var(--oro-suave); }
.l-vis .n { margin: 4px 0 12px; font-family: var(--f-texto); font-weight: 700; font-size: 19px; line-height: 1.2; }
.l-vis .k + .play { margin-top: 12px; }
.l-vis.sin-foto { height: auto; background: var(--vino); }
.l-vis.sin-foto .cap { position: static; display: block; padding: 18px; }
.l-fuente { display: flex; gap: 8px; align-items: flex-start; margin: 12px 0 0; font-size: var(--t-apoyo); font-weight: 700; line-height: 1.35; color: var(--gris); }
.l-fuente .ico { width: 18px; height: 18px; margin-top: 1px; flex: none; color: var(--vino); }
.panel.l-texto { margin-top: 16px; font-size: var(--t-cuerpo); line-height: 1.5; }
.l-texto > * { margin: 0; }
.l-texto > * + * { margin-top: 12px; }
.l-texto h3 { font-size: 18px; font-weight: 700; line-height: 1.25; color: var(--tinta); }
.l-texto strong { color: var(--vino); }
.l-texto ul { padding-left: 22px; }
.l-texto ul > li + li { margin-top: 6px; }
/* una lista numerada se lee como «Lo que tienes que saber» de la héroe: el número en su círculo de vino, un renglón por cosa */
.l-texto ol { list-style: none; padding: 0; counter-reset: l-saber; }
.l-texto ol > li { counter-increment: l-saber; display: flex; gap: 14px; align-items: flex-start; padding: 12px 0; }
.l-texto ol > li + li { border-top: 1px solid var(--linea); }
.l-texto ol > li::before { content: counter(l-saber); display: grid; place-items: center; width: 32px; height: 32px; border-radius: 50%; flex: none; background: var(--vino); color: var(--crema); font-family: var(--f-display); font-size: 17px; }

/* D17 · la pregunta: las opciones como renglones con letra, «¿Qué tan segura es tu respuesta?» con sus dos respuestas, «Comprobar»
   apagado hasta que hay las dos (radios de verdad: se manda sin JavaScript; `required` lo cuida donde no hay :has). Contestada, la
   correcta en verde con su palomita, la tuya equivocada en rojo con su tache, y el veredicto (.b-estado) con la explicación. */
.quiz { display: block; }
.quiz-q { margin: 8px 0 16px; font-family: var(--f-display); font-weight: 400; font-size: 27px; line-height: 1.12; color: var(--vino); }
.quiz-ops { display: grid; gap: 10px; }
.quiz-op { position: relative; display: flex; gap: 12px; align-items: center; width: 100%; min-height: 56px; padding: 12px 16px; border-radius: 16px; border: 2px solid var(--linea); background: var(--hoja);
  text-align: left; font-weight: 700; font-size: var(--t-cuerpo); line-height: 1.25; color: var(--tinta); transition: border-color var(--d-1) var(--suave), background-color var(--d-1) var(--suave); }
label.quiz-op { cursor: pointer; }
.quiz-op > input, .quiz-conf label > input { position: absolute; inset: 0; width: 100%; height: 100%; margin: 0; opacity: 0; cursor: pointer; }
.quiz-l { display: grid; place-items: center; width: 30px; height: 30px; border-radius: 50%; flex: none; background: var(--papel); color: var(--vino); font-weight: 700; }
.quiz-op > .ico { width: 20px; height: 20px; margin-left: auto; flex: none; stroke-width: 2.6; }
label.quiz-op:has(> input:checked) { border-color: var(--vino); background: var(--papel); }
label.quiz-op:has(> input:checked) .quiz-l { background: var(--vino); color: var(--crema); }
:is(label.quiz-op, .quiz-conf label):has(> input:focus-visible) { outline: 3px solid var(--oro); outline-offset: 2px; }
.quiz-op.bien { border-color: var(--verde); background: var(--verde-claro); color: var(--verde-tinta); }
.quiz-op.bien .quiz-l { background: var(--verde); color: var(--crema); }
.quiz-op.mal { border-color: var(--rojo); background: var(--rojo-claro); color: var(--rojo); }
.quiz-op.mal .quiz-l { background: var(--rojo); color: var(--crema); }
.quiz-conf { min-width: 0; margin: 26px 0 0; padding: 0; border: 0; }
.quiz-conf legend { padding: 0; margin: 0 0 10px; font-size: 18px; font-weight: 700; color: var(--tinta); }
.quiz-conf .ops2 { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.quiz-conf label { position: relative; display: grid; place-items: center; min-height: 52px; padding: 8px 10px; border-radius: 14px; border: 2px solid var(--linea); background: var(--hoja);
  font-weight: 700; font-size: var(--t-cuerpo); line-height: 1.2; text-align: center; color: var(--tinta); cursor: pointer; transition: border-color var(--d-1) var(--suave), background-color var(--d-1) var(--suave); }
.quiz-conf label:has(> input:checked) { border-color: var(--vino); background: var(--papel); color: var(--vino); }
.quiz .btn[type="submit"] { margin-top: 16px; }
/* ronda 18: «Comprobar» como botón de la pantalla (las respuestas de R-H, sin form) lleva el mismo aire bajo las opciones */
.quiz > .btn { margin-top: 16px; }
form.quiz:is(:not(:has(.quiz-ops input:checked)), :not(:has(.quiz-conf input:checked))) .btn[type="submit"] { opacity: .42; }
.quiz-dijo { margin: 12px 0 0; font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.quiz-res { display: grid; gap: 12px; margin-top: 16px; }
.quiz-res .b-estado h2 { font-size: 17px; }

/* D18 · el anillo: cuánto llevas de tu ruta (la tinta en vino sobre el riel de papel), con su nombre y su línea. .chico = el de la ruta. */
.ring .riel { stroke: var(--papel-2); }
.ring .va { stroke: var(--vino); }
.ring .c b { display: block; font-family: var(--f-display); font-weight: 400; font-size: 38px; line-height: 1; color: var(--vino); }
.ring .c b small { font-size: .6em; }
.ring .c .de { display: block; margin-top: 2px; font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.ring.chico { width: 112px; height: 112px; }
.ring.chico svg { width: 112px; height: 112px; }
.ring.chico .c b { font-size: 32px; }
.anillo .a-txt { display: grid; gap: 4px; min-width: 0; }
.anillo .a-nom { font-size: 18px; font-weight: 700; line-height: 1.2; }
.anillo .a-sub { font-size: var(--t-apoyo); color: var(--gris); line-height: 1.35; }
:root[data-kit="v2"] .ring svg { animation: v2-anillo var(--d-3) var(--resorte) .1s backwards; }
@keyframes v2-anillo { from { opacity: 0; transform: rotate(-150deg) scale(.86); } }

/* D18 · la ruta por módulos: el nombre del módulo y cómo va («completo», «3 de 6»), y sus lecciones en el riel (.camino/.paso). */
.unidad + .unidad { margin-top: 26px; }
.unidad .camino { margin-top: 2px; }
.paso .pill.practica { margin-top: 6px; }
.unidad .paso > div { flex: 1; min-width: 0; }
.unidad .paso > .flecha { width: 18px; height: 18px; flex: none; color: var(--gris-claro); }

/* D19 · la constancia: el folio completo, en grupos de cuatro, al pie de la tarjeta y en verificar (en la cabeza va «Con folio»). */
.c-folio-num { margin-top: 8px !important; font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); letter-spacing: .04em; line-height: 1.35; font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }
.constancia.post .c-folio-num { display: none; }
a.c-verificar { text-decoration: none; }

/* D20 · «Cuenta para» como enlace mide 44 px; la práctica: «Quien te dirige lo confirma» en terracota, «Paola lo vio» en verde. */
a.cuenta-para { min-height: var(--blanco); text-decoration: none; }
.pill.practica .ico { width: 16px; height: 16px; stroke-width: 2.4; }

/* D21 · «Tu lección de hoy» en Hoy (y la tarjeta grande de Mi ruta): la foto a la izquierda, el título y de qué ruta es. */
a.panel.leccion { display: flex; gap: 14px; align-items: center; padding: 12px; text-decoration: none; }
.panel.leccion:not(:has(img)) { padding: 16px; }
.panel.leccion img { width: 88px; height: 104px; object-fit: cover; border-radius: var(--r-chico); display: block; flex: none; background: var(--foto-fondo); }
.panel.leccion .ic { display: grid; place-items: center; width: 52px; height: 52px; border-radius: 14px; flex: none; background: var(--hoja); color: var(--vino); }
.panel.leccion .ic .ico { width: 24px; height: 24px; }
.panel.leccion .txt { flex: 1; min-width: 0; display: grid; gap: 4px; }
.panel.leccion .t { font-size: var(--t-cuerpo); font-weight: 700; line-height: 1.25; }
.panel.leccion .s { font-size: var(--t-apoyo); color: var(--gris); line-height: 1.35; }
.panel.leccion > .flecha { width: 18px; height: 18px; flex: none; color: var(--gris-claro); }
:is(a, button).hero.lesson { width: 100%; margin: 18px 0 0; }
.hero.lesson img { object-position: center 60%; }
.hero.lesson .kicker, .hero.lesson .name { display: block; }
.hero.lesson .name { font-size: 30px; line-height: 1.02; }
.hero.lesson .play { padding-right: 18px; }
.hero.lesson.sin-foto { height: auto; background: var(--vino); }
.hero.lesson.sin-foto .cap { position: static; display: block; padding: 22px 18px 16px; }

/* ---- D22 · ronda 4: tres piezas de la héroe persona.aprender.constancias que vivían sólo en su <style> (las pidió equipo-constancias
   para su lista, #142; sirven igual a Mi ruta): la tarjeta oscura «Tu ruta · se genera al terminarla», la barra de avance y los pasos
   numerados de «Cómo es por dentro». Tal cual la demo; lo que allá iba en línea (el fondo de la barra sobre lo oscuro, su margen, la
   línea de abajo) aquí es clase. La barra deja en paz a la de la semana (.v2-semana), que tiene la suya. ---- */
.oscuro { background: var(--ciruela); color: var(--crema); border-radius: var(--r-grande); padding: 20px; }
.oscuro .k { font-size: var(--t-apoyo); font-weight: 700; color: var(--oro-suave); }
.oscuro .n { margin: 6px 0 8px; font-family: var(--f-display); font-size: 30px; line-height: 1.05; }
.oscuro p { margin: 6px 0 0; color: var(--crema-tenue); font-weight: 600; }
.oscuro .btn { background: var(--crema); color: var(--vino); }
.barra:where(:not(.v2-semana .barra)) { height: 10px; border-radius: 5px; background: var(--papel-2); overflow: hidden; }
.barra:where(:not(.v2-semana .barra)) > i { display: block; height: 100%; border-radius: 5px; background: var(--vino); }
.oscuro .barra { margin-top: 14px; background: rgba(250, 242, 231, .22); }
.oscuro .barra > i { background: var(--oro); }
.oscuro .barra + .small { margin-top: 6px; color: var(--crema-tenue); font-weight: 700; }
.pasoN { display: grid; margin-top: 6px; }
.pasoN .it { display: flex; gap: 14px; align-items: flex-start; padding: 12px 0; }
.pasoN .it + .it { border-top: 1px solid var(--linea); }
.pasoN .num { display: grid; place-items: center; width: 32px; height: 32px; border-radius: 50%; flex: none; background: var(--vino); color: var(--crema); font-family: var(--f-display); font-size: 17px; }
.pasoN .t { font-size: var(--t-cuerpo); font-weight: 700; line-height: 1.25; }
.pasoN .s { margin-top: 2px; font-size: var(--t-apoyo); color: var(--gris); line-height: 1.35; }

/* ---- D23 · ronda 4: el espacio que Aprender escribía en línea (revisión de la ronda 4, aprender 2), como regla del kit ---- */
/* Mi ruta: la sección que abre con el anillo queda 20 px bajo la cabeza (en la sección, no en el anillo: así reemplaza el margen que ya
   trae y no se le suma). */
.pad:has(> .anillo:first-child) { margin-top: 20px; }
/* Mi ruta: «Ver toda tu ruta» y sus filas, 6 px bajo el último paso del camino. */
.camino + .list { margin-top: 6px; }
/* La lección: la sección que abre con la línea de la fuente queda 16 px bajo la cabeza (la línea sin su margen propio, que ahí sobra). */
.pad:has(> .l-fuente:first-child) { margin-top: 16px; }
.pad > .l-fuente:first-child { margin-top: 0; }

/* ---- D23–D28 · ronda 5 (2026-10-12): el Muro. Lo que las héroes de la demo (persona.muro.post, .reconocer.enviado, .mesa,
   .aniversarios, jefa.muro, persona.muro.constancia) escribían bajo [data-heroe], como clases del kit. Nada se dibuja sin el dato de
   la casa: sin imagen no hay imagen; la tarjeta de una mesa no lleva estrellas (la encuesta no las trae a la persona); ni un conteo
   ni un lugar por persona. (El «D23» de la ronda 4, arriba, es otra cosa: los espacios de Aprender.) ---- */

/* D23 · la publicación del muro (un post de Buk, un aviso de la casa): quién y cuándo, la línea del fijado, la foto, el título y el texto.
   (.publicacion y no .post: .post ya es el tamaño de muro de la constancia.) */
.publicacion { background: var(--papel); border-radius: var(--r-grande); overflow: hidden; }
.publicacion + .publicacion, .muro > * + * { margin-top: 14px; }
.publicacion .quien { display: flex; gap: 12px; align-items: center; padding: 14px 16px; }
.publicacion .quien .av { display: grid; place-items: center; width: 40px; height: 40px; border-radius: 50%; flex: none; background: var(--vino); color: var(--crema); font-weight: 700; font-size: 14px; }
.publicacion .quien .av.casa .ico { width: 21px; height: 21px; } /* la casa misma: su ícono, nunca «LC» (ojo N91) */
.publicacion .quien .txt { display: grid; gap: 2px; min-width: 0; line-height: 1.3; }
.publicacion .quien b { font-size: var(--t-cuerpo); }
.publicacion .quien small { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.publicacion > img { display: block; width: 100%; height: 230px; object-fit: cover; background: var(--foto-fondo); }
.publicacion img.foto-diferida { display: block; width: 100%; height: 230px; object-fit: cover; border-radius: var(--r-tarjeta); background: var(--foto-fondo); }
.publicacion .fotos-mas { margin: 8px 16px 0; font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.publicacion .cuerpo { padding: 16px; }
.publicacion .cuerpo > .fijado { margin-bottom: 6px; }
.publicacion h2 { margin: 0 0 8px; font-family: var(--f-display); font-weight: 500; font-size: 27px; line-height: 1.08; color: var(--vino); }
.publicacion .texto { font-size: var(--t-cuerpo); font-weight: 600; line-height: 1.4; overflow-wrap: anywhere; }
.publicacion .texto > * { margin: 0; }
.publicacion .texto > * + * { margin-top: 10px; }
.publicacion .texto img { max-width: 100%; height: auto; border-radius: var(--r-chico); }
.publicacion .texto a { color: var(--vino); font-weight: 700; }
.publicacion .pie { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin-top: 14px; }
.publicacion .enterado { display: inline-flex; align-items: center; gap: 6px; font-size: var(--t-apoyo); font-weight: 700; color: var(--verde-tinta); }
.publicacion .enterado .ico { width: 18px; height: 18px; }
.publicacion.aviso { box-shadow: inset 0 0 0 2px var(--vino); }

/* D24 · el reconocimiento: la tarjeta de vino «Para Mateo», el hábito de la casa (uno de los ocho «Hábitos de nuestra casa» del Welcome
   book; su arte es la imagen recortada del libro cuando existe, nunca redibujada; mientras no, la ficha del kit: la inicial del hábito en
   Eighties sobre oro), lo que escribió quien reconoce y quién fue. La estrella sólo cuando reconoce quien lo dirige (S29). */
.reconocimiento { position: relative; overflow: hidden; padding: 22px 20px 20px; border-radius: 24px; background: var(--vino); color: var(--crema); }
.reconocimiento .k { margin: 0; font-size: var(--t-apoyo); font-weight: 700; color: var(--oro-suave); }
.reconocimiento .quien { display: flex; gap: 12px; align-items: center; margin: 12px 0 14px; }
.reconocimiento .quien .av { display: grid; place-items: center; width: 48px; height: 48px; border-radius: 50%; flex: none; background: var(--oro); color: var(--ciruela); font-weight: 700; font-size: 16px; }
.reconocimiento .quien .a { font-family: var(--f-display); font-size: 28px; line-height: 1.05; }
.reconocimiento .vrow { display: flex; gap: 10px; align-items: center; }
.reconocimiento .habito { display: inline-flex; gap: 8px; align-items: center; padding: 7px 14px; border-radius: var(--r-pastilla); background: var(--oro); color: var(--ciruela); font-weight: 700; font-size: var(--t-apoyo); line-height: 1.25; }
.reconocimiento .frase { margin: 16px 0 0; font-family: var(--f-display); font-weight: 400; font-size: 24px; line-height: 1.15; color: var(--crema); overflow-wrap: anywhere; }
.reconocimiento .de { display: flex; align-items: center; gap: 6px; margin: 14px 0 0; font-size: var(--t-apoyo); font-weight: 700; color: var(--oro-suave); }
.reconocimiento .de .ico { width: 18px; height: 18px; color: var(--oro-vivo); }
.habito-tile { display: grid; place-items: center; width: 44px; height: 44px; border-radius: 14px; flex: none; overflow: hidden; background: var(--oro); color: var(--ciruela); font: 500 24px/1 var(--f-display); }
.habito-tile img { width: 100%; height: 100%; object-fit: cover; display: block; }
.habito-tile.grande { width: 64px; height: 64px; border-radius: 18px; font-size: 34px; }

/* D25 · «Una mesa te nombró»: la cita de vino del kit (.cita) con las palabras de la mesa y cómo se supo (la línea .de); debajo, si la
   ve la casa o sólo la persona. Sin estrellas: la encuesta no las trae a la persona. */
.cita.mesa .palabras { overflow-wrap: anywhere; }
.mesa-estado { display: flex; align-items: center; gap: 8px; margin: 10px 2px 0; font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.mesa-estado .ico { width: 18px; height: 18px; color: var(--vino); }

/* D26 · el día de alguien en la casa (cumpleaños, aniversario): la tarjeta oscura con el día, el nombre y su puesto. El número de años
   sólo en la pantalla de la persona (S33: en el muro de la casa, ni edad ni años). */
.hito { padding: 22px 20px; border-radius: var(--r-grande); background: var(--ciruela); color: var(--crema); }
.hito .k { margin: 0; font-size: var(--t-apoyo); font-weight: 700; color: var(--oro-suave); }
.hito .big { margin: 6px 0 2px; font-family: var(--f-display); font-size: 62px; line-height: .95; color: var(--oro-vivo); }
.hito .n { margin: 6px 0 0; font-family: var(--f-display); font-size: 27px; line-height: 1.1; color: var(--crema); }
.hito p { margin: 8px 0 0; color: var(--crema-tenue); font-weight: 600; }
.hito .btn { background: var(--crema); color: var(--vino); }
.hito .marca { display: grid; place-items: center; width: 44px; height: 44px; border-radius: 14px; background: rgba(250, 242, 231, .12); color: var(--oro-vivo); margin-bottom: 10px; }
.hito .marca .ico { width: 24px; height: 24px; }

/* D27 · ¿Para quién? (.publico, ya en el kit) con su ícono y su línea; «Llega a N personas» antes de publicar; «Quién lo vio» por persona. */
.llega { display: flex; align-items: center; gap: 8px; margin: 10px 2px 0; font-size: var(--t-apoyo); font-weight: 700; color: var(--vino); }
.llega .ico { width: 20px; height: 20px; }
.llega { flex-wrap: wrap; }
.llega .mas { display: inline-flex; align-items: center; min-height: var(--blanco); margin-left: 6px; } /* ronda 16: «Ver quiénes», sólo RH */
.quien-vio { display: flex; align-items: center; gap: 12px; min-height: 56px; padding: 8px 0; }
.quien-vio + .quien-vio { border-top: 1px solid var(--linea); }
.quien-vio .av { display: grid; place-items: center; width: 40px; height: 40px; border-radius: 50%; flex: none; background: var(--papel-2); color: var(--vino); font-weight: 700; font-size: 14px; }
.quien-vio .txt { flex: 1; min-width: 0; display: grid; gap: 2px; line-height: 1.3; }
.quien-vio b { font-size: var(--t-cuerpo); }
.quien-vio small { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.quien-vio .est { display: inline-flex; align-items: center; gap: 6px; flex: none; font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); white-space: nowrap; }
.quien-vio .est .ico { width: 18px; height: 18px; }
.quien-vio[data-vio="si"] .est { color: var(--verde-tinta); }
.quien-vio[data-vio="si"] .av { background: var(--verde-claro); color: var(--verde-tinta); }
.vieron { margin: 0 2px 8px; font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }

/* D28 · la constancia en el muro: la cabeza de la publicación (.c-autor, ya en el kit) y la tarjeta grande (.constancia.post). */
.c-autor .av { display: grid; place-items: center; width: 40px; height: 40px; border-radius: 50%; flex: none; background: var(--vino); color: var(--crema); font-weight: 700; font-size: 14px; }

/* ---- ronda 5 · el desplegable dentro de una tarjeta («Leer todo», «Ver la foto»): el resumen de «De dónde sale» (gris, 44 px, la flecha
   que gira) sin su letra gris en lo que abre — lo que abre es el texto o la foto de la tarjeta, con su propia letra. «De dónde sale» queda
   uno por pantalla, al pie (revisión de la ronda 5, muro 3). ---- */
details.despliega { margin-top: 6px; }
details.despliega > summary { display: flex; align-items: center; gap: 8px; min-height: var(--blanco); font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); cursor: pointer; list-style: none; }
details.despliega > summary::-webkit-details-marker { display: none; }
details.despliega > summary::after { content: ""; width: 7px; height: 7px; border-right: 2px solid currentColor; border-bottom: 2px solid currentColor; transform: translateY(-2px) rotate(45deg); transition: transform var(--d-1) var(--suave); }
details.despliega[open] > summary { color: var(--vino); }
details.despliega[open] > summary::after { transform: translateY(2px) rotate(-135deg); }
details.despliega > summary:focus-visible { outline: 3px solid var(--oro); outline-offset: 2px; border-radius: 8px; }
/* ---- D29–D31 · ronda 6 (2026-10-12): Beneficios y Tu aguinaldo. Lo que las héroes de la demo (persona.dinero.beneficios, .beneficio,
   persona.dinero.recibos.aguinaldo) escribían bajo [data-heroe], como clases del kit. Nada se inventa: un beneficio dice lo que el libro
   dice; «Pedir» sólo cuando se ofrece; el aguinaldo sin sueldo diario no muestra número y dice por qué. ---- */

/* D29 · un beneficio de la casa: su ícono y nombre, qué es, quién puede, cómo se usa o se pide, quién lo aprueba, cada cuándo, de dónde. */
.ben { display: block; width: 100%; padding: 16px; border: 0; border-radius: var(--r-tarjeta); background: var(--papel); color: inherit; text-align: left; text-decoration: none; }
.ben + .ben { margin-top: 12px; }
.ben .cab { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; }
.ben .ic { display: grid; place-items: center; width: 42px; height: 42px; border-radius: 13px; flex: none; background: var(--crema); color: var(--vino); }
.ben .ic .ico { width: 22px; height: 22px; }
.ben .nom { flex: 1 1 150px; min-width: 150px; margin: 0; font-size: var(--t-cuerpo); font-weight: 700; line-height: 1.2; }
.ben .uso { margin: 10px 0 0; font-size: var(--t-cuerpo); font-weight: 600; line-height: 1.35; }
.ben dl { display: grid; grid-template-columns: auto 1fr; gap: 4px 12px; margin: 10px 0 0; font-size: var(--t-apoyo); line-height: 1.35; }
.ben dt { color: var(--gris); font-weight: 700; }
.ben dd { margin: 0; font-weight: 600; }
.ben dd.sin { color: var(--espera-tinta); }
.ben .de { margin: 10px 0 0; font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.ben .acc { display: flex; align-items: center; gap: 6px; margin-top: 12px; font-size: var(--t-apoyo); font-weight: 700; color: var(--vino); }
.ben .acc .ico { width: 18px; height: 18px; }
.ben > form { margin-top: 12px; }

/* D30 · el estado de un pedido: pedido (terracota, nunca oro) · en camino (azul) · listo (verde) · no se pudo (gris: una respuesta, no un error),
   y el renglón del pedido (quién, qué, cuándo, su estado; para quien lo atiende, sus botones debajo). */
.estado-pedido { display: inline-flex; align-items: center; gap: 6px; flex: none; padding: 4px 10px; border-radius: var(--r-pastilla); font-size: var(--t-apoyo); font-weight: 700; line-height: 1.3; white-space: nowrap; }
.estado-pedido i { width: 8px; height: 8px; border-radius: 50%; background: currentColor; }
.estado-pedido[data-estado="pedido"] { background: var(--espera-claro); color: var(--espera-tinta); }
.estado-pedido[data-estado="en_camino"] { background: var(--azul-claro); color: var(--azul-tinta); }
.estado-pedido[data-estado="listo"] { background: var(--verde-claro); color: var(--verde-tinta); }
.estado-pedido[data-estado="no_se_pudo"] { background: var(--papel-2); color: var(--gris); }
.pedido { display: grid; gap: 8px; padding: 12px 0; }
.pedido + .pedido { border-top: 1px solid var(--linea); }
.pedido .cab { display: flex; align-items: center; gap: 12px; }
.pedido .av { display: grid; place-items: center; width: 40px; height: 40px; border-radius: 50%; flex: none; background: var(--papel-2); color: var(--vino); font-weight: 700; font-size: 14px; }
.pedido .txt { flex: 1; min-width: 0; display: grid; gap: 2px; line-height: 1.3; }
.pedido b { font-size: var(--t-cuerpo); }
.pedido small { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.pedido .nota { margin: 0 0 0 52px; font-size: var(--t-apoyo); font-weight: 600; line-height: 1.35; overflow-wrap: anywhere; }
.pedido .acciones { display: flex; flex-wrap: wrap; gap: 8px; margin-left: 52px; }
.pedido .acciones .chip { min-height: var(--blanco); } /* the owner's answer is the row's one tap: 44 px (ojo O11-2) */

/* D31 · Tu aguinaldo: la cifra (el ojo la oculta), la cuenta en palabras renglón por renglón, el registro de nómina del que sale y la fecha;
   sin sueldo diario, ni cifra ni cuenta: una línea que dice por qué. */
.aguinaldo .money { display: block; }
.aguinaldo .money small { font-size: .5em; }
.aguinaldo .que { margin: 8px 0 0; font-size: var(--t-cuerpo); font-weight: 700; color: var(--vino); }
.aguinaldo .cuando { margin: 6px 0 0; font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.cuenta-aguinaldo { padding: 4px 16px; }
.cuenta-aguinaldo .r { display: flex; align-items: center; gap: 12px; min-height: 60px; padding: 10px 0; }
.cuenta-aguinaldo .r + .r { border-top: 1px solid var(--linea); }
.cuenta-aguinaldo .r .txt { flex: 1; min-width: 0; display: grid; gap: 2px; line-height: 1.3; }
.cuenta-aguinaldo .r .t { font-size: var(--t-cuerpo); font-weight: 700; }
.cuenta-aguinaldo .r .s { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.cuenta-aguinaldo .r .m { flex: none; font-family: var(--f-display); font-size: 24px; color: var(--vino); font-variant-numeric: tabular-nums; white-space: nowrap; }
.cuenta-aguinaldo .r.total { border-top: 2px solid var(--vino); }
.cuenta-aguinaldo .r.total .m { font-size: 28px; }
.registro { display: flex; align-items: flex-start; gap: 8px; margin: 10px 2px 0; font-size: var(--t-apoyo); font-weight: 600; line-height: 1.35; color: var(--gris); }
.registro .ico { width: 18px; height: 18px; margin-top: 1px; flex: none; color: var(--vino); }

/* ---- ojo O16-1 (ronda 6): un chip que se toca —un enlace («Ver»), un filtro («Listos»), un botón del renglón— mide sus 44 px de verdad,
   no 40 + su halo (la misma clase que O11-2). El chip que sólo nombra algo (un <span>) se queda como está. ---- */
:is(a, button).chip { min-height: var(--blanco); min-width: var(--blanco); } /* ojo N153: a one-word chip («Sí», NOM-035's filter questions) was 42 px wide */

/* ---- D32–D36 · ronda 7 (2026-10-13): Mis días completo + Dinero › Propinas «antes del parneo». Lo que las héroes de la demo
   (persona.yo.dias.pedir, jefa.equipo.aprobar + .aprobado / .rechazado, persona.dinero.mesas, .semana, jefa.equipo.propinas.regla,
   persona.dinero.recibos.comparar) escribían bajo [data-heroe], como clases del kit y cortado a CONTRATO S38–S43: nada por WhatsApp,
   ningún costo de cubrir, ninguna propina sumada al recibo. 16 px de piso, 44 px para tocar, sólo transform y opacity se mueven. ---- */

/* D32 · la hoja para pedir un día: el tipo (opciones grandes), las fechas, la cuenta con su regla, quién más se entera. */
:is(.tipos-dia, .fechas-dia) { border: 0; padding: 0; margin: 0; min-width: 0; }
:is(.tipos-dia, .fechas-dia) > legend { padding: 0; margin: 0 0 8px; font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.tipos-dia .opc { display: grid; gap: 10px; }
.tipos-dia .opc button { display: flex; gap: 12px; align-items: center; width: 100%; min-height: 56px; padding: 10px 14px; border: 2px solid transparent; border-radius: 14px;
  background: var(--papel); color: var(--tinta); font: 700 var(--t-cuerpo)/1.25 var(--f-texto); text-align: left; cursor: pointer; transition: transform var(--d-1) var(--suave); }
.tipos-dia .opc button:active { transform: scale(.985); }
.tipos-dia .opc button.on { border-color: var(--vino); background: var(--hoja); }
.tipos-dia .opc .ico { width: 22px; height: 22px; flex: none; color: var(--vino); }
.tipos-dia .opc small { display: block; margin-top: 2px; font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.dos-fechas { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.b-formulario input[type="date"] { display: block; min-width: 0; text-align: left; }
.b-formulario input[type="date"]::-webkit-date-and-time-value { text-align: left; margin: 0; }
.cuenta-dia dl { display: grid; grid-template-columns: auto 1fr; gap: 8px 14px; margin: 0; font-size: var(--t-apoyo); line-height: 1.3; }
.cuenta-dia dt { color: var(--gris); font-weight: 700; }
.cuenta-dia dd { margin: 0; font-weight: 700; color: var(--tinta); }
.cuenta-dia dd small { display: block; margin-top: 2px; font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.cuenta-dia dd.sin { font-weight: 600; color: var(--espera-tinta); }
.cuenta-dia dd.queda { font-family: var(--f-display); font-weight: 500; font-size: var(--t-sub); line-height: 1; color: var(--vino); }
.cuenta-dia dd.falta { color: var(--rojo); }
.cuenta-dia .dia-a-dia { list-style: none; display: grid; gap: 6px; margin: 12px 0 0; padding: 12px 0 0; border-top: 1px solid var(--linea); font-size: var(--t-apoyo); }
.cuenta-dia .dia-a-dia li { display: flex; justify-content: space-between; gap: 12px; }
.cuenta-dia .dia-a-dia span { font-weight: 600; color: var(--tinta); }
.cuenta-dia .dia-a-dia b { font-weight: 700; color: var(--gris); }
.cuenta-dia .dia-a-dia .cuenta b { color: var(--vino); }
.cuenta-dia .regla { display: flex; gap: 10px; align-items: flex-start; margin: 12px 0 0; font-size: var(--t-apoyo); font-weight: 600; line-height: 1.35; color: var(--tinta); }
.cuenta-dia .regla .ico { width: 20px; height: 20px; flex: none; margin-top: 1px; color: var(--vino); }
.quien-se-entera .k { margin: 0 0 10px; font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.quien-se-entera ul { list-style: none; display: grid; gap: 10px; margin: 0; padding: 0; }
.quien-se-entera li { display: flex; align-items: center; gap: 12px; }
.quien-se-entera .av { display: grid; place-items: center; width: 40px; height: 40px; flex: none; border-radius: 50%; background: var(--papel-2); color: var(--vino); font-weight: 700; font-size: var(--t-apoyo); }
.quien-se-entera li > span:last-child { display: grid; line-height: 1.25; color: var(--tinta); }
.quien-se-entera small { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.hoja-dia .nota-envio { margin: 0; text-align: center; font-size: var(--t-apoyo); font-weight: 600; line-height: 1.35; color: var(--gris); }
.hoja-dia .para-hoy { display: flex; align-items: center; justify-content: center; gap: 6px; text-align: center; min-height: var(--blanco); font-size: var(--t-apoyo); font-weight: 700; color: var(--vino); text-decoration: none; }
.hoja-dia .para-hoy .ico { width: 18px; height: 18px; }

/* D33 · aprobar en un toque: quién, qué días, el saldo con su fuente, «Aprobar» y «No aprobar y decir por qué» (la línea que le llega);
   después, «Listo, ya le avisamos» / «…que no» y dónde vive el día en Buk (terracota mientras RH lo pasa; nunca oro). */
.por-aprobar { display: grid; gap: 12px; padding: 16px; border-radius: var(--r-grande); background: var(--papel); }
.por-aprobar + .por-aprobar { margin-top: 12px; }
.por-aprobar .quien { display: flex; align-items: center; gap: 12px; }
.por-aprobar .ini { display: grid; place-items: center; width: 44px; height: 44px; flex: none; border-radius: 50%; background: var(--vino); color: var(--crema); font-weight: 700; font-size: var(--t-apoyo); }
.por-aprobar .tipo { margin: 0; font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.por-aprobar h3 { margin: 2px 0 0; font-size: 18px; line-height: 1.25; color: var(--tinta); }
.por-aprobar :is(.saldo, .nota) { margin: 0; font-size: var(--t-apoyo); font-weight: 600; line-height: 1.35; overflow-wrap: anywhere; }
.por-aprobar .incapacidad { justify-self: start; display: inline-flex; align-items: center; gap: 6px; margin: 0; padding: 4px 12px; border-radius: var(--r-pastilla);
  background: var(--azul-claro); color: var(--azul-tinta); font-size: var(--t-apoyo); font-weight: 700; }
.por-aprobar .incapacidad .ico { width: 18px; height: 18px; }
.por-aprobar form.aprobar { margin: 0; }
.por-aprobar form.aprobar .btn { width: 100%; }
.por-aprobar .no-aprobar > summary { display: flex; align-items: center; justify-content: center; min-height: var(--blanco); padding: 6px 14px; border: 1.5px solid var(--vino);
  border-radius: var(--r-pastilla); color: var(--vino); font-weight: 700; font-size: var(--t-apoyo); cursor: pointer; list-style: none; transition: transform var(--d-1) var(--suave); }
.por-aprobar .no-aprobar > summary::-webkit-details-marker { display: none; }
.por-aprobar .no-aprobar > summary:active { transform: scale(.985); }
.por-aprobar .no-aprobar[open] > summary { border-color: transparent; color: var(--gris); }
.por-aprobar .no-aprobar > form { margin-top: 12px; }
.decidido { display: grid; gap: 12px; }
.decidido .en-buk { justify-self: start; display: inline-flex; align-items: center; gap: 8px; margin: 0; padding: 6px 12px; border-radius: var(--r-pastilla);
  background: var(--verde-claro); color: var(--verde-tinta); font-size: var(--t-apoyo); font-weight: 700; }
.decidido .en-buk:is([data-buk="por_copiar"], [data-buk="fallo"]) { background: var(--espera-claro); color: var(--espera-tinta); }
.decidido .en-buk .ico { width: 18px; height: 18px; }
.decidido .aviso-para-ti { padding: 12px 14px; border-radius: 14px 14px 14px 4px; background: var(--papel); }
.decidido .aviso-para-ti p { margin: 0; font-size: var(--t-apoyo); font-weight: 600; line-height: 1.35; color: var(--tinta); }
.decidido .aviso-para-ti .k { margin-bottom: 4px; font-weight: 700; color: var(--gris); }

/* D34 · Propinas «antes del parneo»: la tarjeta de vino de la semana con su etiqueta y su fuente, el renglón por día y turno (el día en
   grande, la palabra de 16 px), el renglón de una mesa, y «Tu semana en pesos»: dos registros lado a lado, cada uno con su fuente, sin sumar. */
.propinas-resumen { padding: 18px; border-radius: var(--r-grande); background: var(--vino); color: var(--crema); --c-monto: var(--sobre-vino); }
.propinas-resumen p { margin: 0; }
.propinas-resumen .k { font-size: var(--t-nota); font-weight: 700; color: var(--oro-suave); }
.propinas-resumen .etiqueta { margin-top: 2px; font-size: var(--t-apoyo); font-weight: 600; color: var(--crema-tenue); }
.propinas-resumen .money { margin-top: 8px; color: var(--crema); }
:root[data-kit="v2"] .propinas-resumen .v2-numero::before { background: var(--subraya-vino); }
:root[data-kit="v2"] .propinas-resumen .v2-frase, .propinas-resumen .v2-frase { margin-top: 10px; font-size: var(--t-cuerpo); font-weight: 600; color: var(--crema-tenue); }
.propinas-resumen .de { margin-top: 8px; font-size: var(--t-apoyo); font-weight: 600; color: var(--crema-tenue); }
.panel.filas-propinas { padding: 4px 16px; }
.renglon:is(.propinas, .ticket) { min-height: 64px; text-decoration: none; }
.renglon.propinas .cuando span { font-size: var(--t-nota); }
.renglon:is(.propinas, .ticket) > .t { flex: 1; min-width: 0; display: grid; gap: 2px; font-weight: 700; font-size: var(--t-cuerpo); line-height: 1.25; }
.renglon:is(.propinas, .ticket) > .t small { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.renglon.propinas .que { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 8px; }
.renglon.propinas .que .pill { padding: 2px 9px; font-style: normal; }
.renglon:is(.propinas, .ticket) > b { font-weight: 700; font-size: var(--t-cuerpo); font-variant-numeric: tabular-nums; white-space: nowrap; }
.renglon:is(.propinas, .ticket) > .ico { width: 18px; height: 18px; flex: none; color: var(--gris-claro); }
.renglon.ticket .n { display: grid; place-items: center; width: 44px; height: 44px; flex: none; border-radius: 14px; background: var(--crema); font-family: var(--f-display); font-size: 20px; color: var(--vino); }
.renglon.ticket.mejor .n { background: var(--oro-claro); color: var(--oro-tinta); }
.semana-pesos .lados { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.semana-pesos[data-lados="1"] .lados { grid-template-columns: 1fr; }
.semana-pesos .lado { display: grid; align-content: start; gap: 4px; padding: 12px 14px; border-radius: var(--r-tarjeta); background: var(--papel); color: inherit; text-decoration: none; transition: transform var(--d-1) var(--suave); }
a.lado:active { transform: scale(.985); }
.semana-pesos .titulo { font-size: var(--t-apoyo); font-weight: 700; line-height: 1.25; color: var(--tinta); }
.semana-pesos .sub { font-size: var(--t-apoyo); font-weight: 600; line-height: 1.25; color: var(--gris); }
.semana-pesos .lado b { margin-top: 4px; font-family: var(--f-display); font-weight: 500; font-size: var(--t-sub); line-height: 1.05; color: var(--vino); font-variant-numeric: tabular-nums; white-space: nowrap; }
.semana-pesos .lado .sin { margin-top: 4px; font-size: var(--t-apoyo); font-weight: 600; line-height: 1.3; color: var(--espera-tinta); }
.semana-pesos .lado small { font-size: var(--t-apoyo); font-weight: 600; line-height: 1.25; color: var(--gris); }
.semana-pesos .no-se-suman { margin: 10px 0 0; font-size: var(--t-apoyo); font-weight: 600; line-height: 1.35; color: var(--gris); }

/* D35 · el parneo como dato: el formulario que sale del esquema de la regla (grupos de días en chips, la parte de cada puesto con su suma,
   cómo se divide dentro del puesto en el control segmentado), la regla como la lee todo el mundo y la vista previa del último domingo. */
.parneo-form { gap: 18px; }
.parneo-form .parte-regla + .parte-regla { padding-top: 18px; border-top: 1px solid var(--linea); }
.parneo-form fieldset { display: grid; gap: 12px; min-width: 0; margin: 0; padding: 0; border: 0; }
.parneo-form fieldset > legend { padding: 0; margin: 0 0 8px; font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.parneo-form .parte-regla > fieldset > legend, .parneo-form .parte-regla > .serie > .serie-tit, .parneo-form .parte-regla > label > span:first-child {
  font-family: var(--f-display); font-weight: 500; font-size: var(--t-sub); line-height: 1.1; color: var(--vino); }
.parneo-form .serie { display: grid; gap: 12px; }
.parneo-form .serie-tit { margin: 0; }
.parneo-form .serie > fieldset.grupo { padding: 14px; border-radius: var(--r-tarjeta); background: var(--papel); }
.parneo-form .serie > fieldset.grupo > legend { float: left; width: 100%; margin: 0 0 4px; font-size: var(--t-cuerpo); color: var(--tinta); }
.b-formulario .partes label { display: flex; align-items: center; justify-content: space-between; gap: 12px; min-height: 52px; font-size: var(--t-cuerpo); color: var(--tinta); }
.b-formulario .partes label + label { border-top: 1px solid var(--linea); }
.con-unidad { position: relative; display: inline-flex; align-items: center; }
.b-formulario .con-unidad input { width: 108px; padding-right: 36px; text-align: right; font-variant-numeric: tabular-nums; }
.con-unidad i { position: absolute; right: 14px; font-style: normal; font-weight: 700; color: var(--gris); pointer-events: none; }
.partes .suma { margin: 2px 0 0; font-size: var(--t-apoyo); font-weight: 700; color: var(--espera-tinta); }
.partes .suma[data-ok] { color: var(--verde-tinta); }
.chips-elige { display: flex; flex-wrap: wrap; gap: 8px; }
.b-formulario .chips-elige label { position: relative; display: inline-flex; }
.b-formulario .chips-elige input { position: absolute; width: 1px; height: 1px; min-height: 0; margin: 0; padding: 0; border: 0; opacity: 0; pointer-events: none; }
.chips-elige span { display: inline-flex; align-items: center; min-height: var(--blanco); padding: 6px 14px; border: 1.5px solid var(--vino); border-radius: var(--r-pastilla);
  color: var(--vino); font-weight: 700; font-size: var(--t-apoyo); cursor: pointer; transition: transform var(--d-1) var(--suave); }
.chips-elige label:active span { transform: scale(.97); }
.chips-elige input:checked + span { background: var(--vino); color: var(--crema); }
.chips-elige input:focus-visible + span { box-shadow: 0 0 0 3px var(--oro-claro); }
.fechas-sueltas { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.b-formulario label.si-no { display: flex; align-items: flex-start; gap: 12px; min-height: var(--blanco); font-size: var(--t-cuerpo); color: var(--tinta); }
.b-formulario .si-no input { flex: none; width: 24px; height: 24px; min-height: 0; margin: 2px 0 0; padding: 0; -webkit-appearance: auto; appearance: auto; accent-color: var(--vino); }
.si-no > span { display: grid; gap: 2px; }
.acciones-regla { display: grid; gap: 10px; }
.regla-parneo { display: grid; gap: 18px; }
.porc { display: grid; padding: 4px 16px; }
.porc > div { display: flex; justify-content: space-between; align-items: center; gap: 12px; padding: 12px 0; font-weight: 700; font-size: var(--t-cuerpo); }
.porc > div + div { border-top: 1px solid var(--linea); }
.porc b { font-family: var(--f-display); font-weight: 500; font-size: 26px; color: var(--vino); }
.regla-datos { display: grid; grid-template-columns: auto 1fr; gap: 6px 14px; margin: 0; font-size: var(--t-apoyo); line-height: 1.35; }
.regla-datos dt { font-weight: 700; color: var(--gris); }
.regla-datos dd { margin: 0; font-weight: 600; }
.texto-visible { margin: 0; padding: 14px 16px; border-left: 3px solid var(--oro); border-radius: 0 var(--r-chico) var(--r-chico) 0; background: var(--papel); font-size: var(--t-cuerpo); font-weight: 600; line-height: 1.45; white-space: pre-line; }
.vista-parneo { display: grid; gap: 14px; }
.vista-parneo .cab .k { margin: 0; font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.vista-parneo .cab h2 { margin: 2px 0 0; font-family: var(--f-display); font-weight: 500; font-size: var(--t-sub); line-height: 1.1; color: var(--vino); }
.vista-parneo table { width: 100%; border-collapse: collapse; font-size: var(--t-apoyo); font-variant-numeric: tabular-nums; }
.vista-parneo caption { padding: 0 0 8px; text-align: left; }
.vista-parneo .fondo { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; font-weight: 700; color: var(--tinta); }
.vista-parneo .fondo b { font-family: var(--f-display); font-weight: 500; font-size: 22px; color: var(--vino); }
.vista-parneo :is(th, td) { padding: 10px 8px; text-align: right; vertical-align: top; border-top: 1px solid var(--linea); background: var(--papel); }
.vista-parneo thead th { border-top: 0; font-weight: 700; color: var(--gris); }
.vista-parneo :is(th, td):first-child { padding-left: 14px; text-align: left; }
.vista-parneo :is(th, td):last-child { padding-right: 14px; }
.vista-parneo thead th:first-child { border-top-left-radius: var(--r-chico); }
.vista-parneo thead th:last-child { border-top-right-radius: var(--r-chico); }
.vista-parneo tbody tr:last-child > :first-child { border-bottom-left-radius: var(--r-chico); }
.vista-parneo tbody tr:last-child > :last-child { border-bottom-right-radius: var(--r-chico); }
.vista-parneo tbody th { font-weight: 700; color: var(--tinta); }
.vista-parneo tbody th small { display: block; font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.vista-parneo td { font-weight: 700; }
.vista-parneo td.sin { font-weight: 600; color: var(--gris); }
.vista-parneo .lineas { list-style: none; display: grid; gap: 6px; margin: 0; padding: 0; font-size: var(--t-apoyo); font-weight: 600; line-height: 1.35; color: var(--gris); }

/* D36 · «¿Por qué me llegó menos?»: la razón en una línea (sólo si la pantalla la tiene), las dos semanas, renglón por renglón con su
   signo (el signo lo dice; el color lo repite) y la diferencia en el neto. */
.titular-razon { padding: 18px; border-radius: var(--r-grande); background: var(--vino); color: var(--crema); --c-monto: var(--sobre-vino); }
.titular-razon .k { margin: 0; font-size: var(--t-nota); font-weight: 700; color: var(--oro-suave); }
.titular-razon h2 { margin: 6px 0 0; font-family: var(--f-display); font-weight: 400; font-size: 28px; line-height: 1.1; color: var(--crema); }
.titular-razon h2 + p { margin: 10px 0 0; font-size: var(--t-apoyo); color: var(--crema-tenue); }
.dos-semanas { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.dos-semanas .c { display: grid; gap: 4px; padding: 12px 14px; border-radius: var(--r-tarjeta); background: var(--papel); }
.dos-semanas .c.nueva { background: var(--oro-claro); }
.dos-semanas span { font-size: var(--t-nota); font-weight: 700; line-height: 1.25; color: var(--gris); }
.dos-semanas b { font-family: var(--f-display); font-weight: 500; font-size: var(--t-sub); line-height: 1.05; color: var(--vino); font-variant-numeric: tabular-nums; white-space: nowrap; }
.dos-semanas b.sin { font-family: var(--f-texto); font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.dos-semanas small { font-size: var(--t-nota); font-weight: 600; color: var(--gris); }
.panel.difs { padding: 4px 16px 8px; }
.dif { display: flex; align-items: center; gap: 12px; min-height: 64px; padding: 10px 0; }
.dif + .dif { border-top: 1px solid var(--linea); }
.dif .txt { flex: 1; min-width: 0; display: grid; gap: 2px; }
.dif .t { font-weight: 700; font-size: var(--t-cuerpo); }
.dif .s { font-size: var(--t-apoyo); line-height: 1.3; color: var(--gris); }
.dif .d { font-weight: 700; font-size: var(--t-cuerpo); font-variant-numeric: tabular-nums; white-space: nowrap; }
.compara-recibos [data-signo="menos"] { color: var(--rojo); --c-monto: var(--rojo); }
.compara-recibos [data-signo="mas"] { color: var(--verde-tinta); --c-monto: var(--verde-tinta); }
.compara-recibos .d[data-signo="igual"] { font-weight: 600; color: var(--gris); }
.difs .total { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; margin-top: 6px; padding: 14px 0 8px; border-top: 2px solid var(--vino); font-weight: 700; font-size: 18px; }
.difs .total > span { color: var(--tinta); }
.compara-nota { margin-top: 10px; }
/* el ojo: en una cifra alineada a la derecha, los cuatro puntos también van a la derecha */
html[data-ocultar] :is(.renglon.propinas, .renglon.ticket, .dif, .difs .total) > b.monto::after, html[data-ocultar] .vista-parneo td.monto::after,
html[data-ocultar] .vista-parneo .fondo b.monto::after { left: auto; right: 0; }
/* D32 · la casilla del aviso (Jorge 20:3x: «sutil, no grande, dentro de una casilla que se acepta ya predeterminado»): un renglón chico ya
   marcado bajo las fechas, el aviso enlazado dentro de la línea y «Qué se guarda y por cuánto» cerrado debajo. Sin marcar: no se guarda nada,
   aparece la línea del papel y se esconde la foto (:has, sin JS). */
.casilla-aviso { display: grid; gap: 2px; }
.casilla-aviso label.casilla { position: relative; display: flex; align-items: flex-start; gap: 10px; min-height: var(--blanco); padding: 10px 0 0; font-size: var(--t-apoyo); font-weight: 600; line-height: 1.35; color: var(--tinta); cursor: pointer; }
/* ojo N151: the whole line is the checkbox's target and nothing grows on screen («sutil», Jorge 20:3x) — the input covers the line, invisible,
   and the kit draws its 22 px box where the browser's was; the notice's link sits above it at 44 px; «Qué se guarda» keeps its own box. */
.casilla-aviso .casilla input { position: absolute; inset: 0; width: 100%; height: 100%; min-height: 0; margin: 0; padding: 0; border: 0; opacity: 0; cursor: pointer; }
.casilla-aviso .casilla > span { padding-left: 32px; }
.casilla-aviso .casilla > span::before { content: ""; position: absolute; left: 0; top: 10px; width: 22px; height: 22px; box-sizing: border-box; border: 2px solid var(--gris); border-radius: 5px; background: var(--hoja); }
.casilla-aviso .casilla input:checked + span::before { border-color: var(--vino); background: var(--vino) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='3.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12.5l4.5 4.5L19 7.5'/%3E%3C/svg%3E") center / 16px no-repeat; }
.casilla-aviso .casilla input:focus-visible + span::before { outline: 2px solid var(--vino); outline-offset: 2px; }
.casilla-aviso .casilla a { position: relative; z-index: 1; padding: 12px 0; color: var(--vino); font-weight: 700; text-decoration: underline; text-underline-offset: 2px; } /* inline padding: a 44 px tap area without moving the line */
.casilla-aviso details.despliega { position: relative; z-index: 2; margin: 0 0 0 32px; }
.casilla-aviso details.despliega dl { display: grid; gap: 8px; margin: 4px 0 10px; font-size: var(--t-apoyo); line-height: 1.35; }
.casilla-aviso details.despliega dt { font-weight: 700; color: var(--gris); }
.casilla-aviso details.despliega dd { margin: 2px 0 0; font-weight: 600; color: var(--tinta); }
.casilla-aviso details.despliega .chip { min-height: var(--blanco); text-decoration: none; }
.casilla-aviso .papel { display: none; margin: 6px 0 0; padding: 10px 14px; border-radius: 14px; background: var(--azul-claro); color: var(--azul-tinta); font-size: var(--t-apoyo); font-weight: 600; line-height: 1.35; }
.casilla-aviso:has(.casilla input:not(:checked)) .papel { display: block; }
form:has(.casilla-aviso .casilla input:not(:checked)) .foto-incapacidad { display: none; }
.parneo-form .serie > fieldset.grupo .seg { background: var(--papel-2); }
/* D35 · S42 (kiss's shape): a value the house's rule fixes is said, never edited; a shift with no tips that day says so. */
.parneo-form .fijo { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; margin: 0; font-size: var(--t-cuerpo); }
.parneo-form .fijo span { font-weight: 700; color: var(--gris); }
.parneo-form .fijo b { font-weight: 700; color: var(--tinta); text-align: right; }
.vista-parneo .fondo b.sin { font-family: var(--f-texto); font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); text-align: right; }
.vista-parneo .cab .linea { margin: 6px 0 0; font-size: var(--t-apoyo); font-weight: 600; line-height: 1.35; color: var(--gris); }

/* ---- D37–D41 · ronda 8 (2026-10-13): la consola de RH. Lo que las héroes rh.personas, .persona, .despliegue, rh.solicitudes y
   rh.contenido.autor dibujaban a 390, como clases del kit con prefijo rh- (el .fila y el .chip de la demo ya son otra cosa aquí) y
   pensadas para 3–4 personas en una laptop (1280) y un teléfono (390). 16 px de piso, 44 px para tocar, sólo transform y opacity se mueven. ---- */

/* D37 · el marco: riel lateral desde 960 px; abajo de eso, barra de arriba con los cinco lugares en una fila que corre. */
.rh-marco { min-height: 100vh; background: var(--crema); color: var(--tinta); }
.rh-riel { position: sticky; top: 0; z-index: 20; display: grid; grid-template-columns: 1fr auto; align-items: center; gap: 4px 12px; padding: calc(env(safe-area-inset-top, 0px) + 10px) var(--orilla) 0; background: var(--barra); border-bottom: 1px solid var(--linea); }
.rh-marca { display: flex; align-items: center; gap: 8px; margin: 0; min-height: var(--blanco); font-family: var(--f-display); font-size: 22px; color: var(--vino); }
.rh-marca .punto { width: 10px; height: 10px; border-radius: 50%; background: var(--oro-vivo); }
.rh-marca b { font-family: var(--f-texto); font-size: var(--t-apoyo); font-weight: 700; padding: 2px 8px; border-radius: var(--r-pastilla); background: var(--vino); color: var(--crema); }
.rh-riel nav { grid-column: 1 / -1; grid-row: 2; margin: 0 calc(-1 * var(--orilla)); overflow-x: auto; scrollbar-width: none; }
.rh-riel nav::-webkit-scrollbar { display: none; }
.rh-riel ul { display: flex; gap: 4px; margin: 0; padding: 0 var(--orilla); list-style: none; }
.rh-riel nav a { display: flex; align-items: center; gap: 8px; min-height: var(--blanco); padding: 6px 12px; border-bottom: 3px solid transparent; color: var(--gris); font-weight: 700; font-size: var(--t-cuerpo); text-decoration: none; white-space: nowrap; }
.rh-riel nav a .ico { width: 20px; height: 20px; }
.rh-riel nav a[aria-current="page"] { color: var(--vino); border-bottom-color: var(--vino); }
.rh-quien { grid-column: 2; grid-row: 1; display: flex; align-items: center; gap: 10px; }
.rh-quien .av { display: none; }
.rh-quien .tx { display: none; }
.rh-quien .salir { display: inline-flex; align-items: center; min-height: var(--blanco); padding: 0 4px; color: var(--vino); font-weight: 700; font-size: var(--t-apoyo); text-decoration: none; }
.rh-lienzo { min-width: 0; padding: 18px var(--orilla) 48px; }
@media (min-width: 960px) {
  .rh-marco { display: grid; grid-template-columns: 248px minmax(0, 1fr); }
  .rh-riel { position: sticky; top: 0; align-self: start; height: 100vh; grid-template-columns: 1fr; grid-template-rows: auto 1fr auto; align-content: stretch; padding: 22px 16px; border-bottom: 0; border-right: 1px solid var(--linea); }
  .rh-riel nav { grid-column: 1; grid-row: 2; margin: 18px 0 0; overflow: visible; }
  .rh-riel ul { flex-direction: column; padding: 0; }
  .rh-riel nav a { border-bottom: 0; border-radius: 12px; padding: 8px 12px; }
  .rh-riel nav a[aria-current="page"] { background: var(--papel); }
  .rh-riel nav a:hover { color: var(--vino); }
  .rh-quien { grid-column: 1; grid-row: 3; padding-top: 14px; border-top: 1px solid var(--linea); }
  .rh-quien .av { display: grid; place-items: center; width: 40px; height: 40px; flex: none; border-radius: 50%; background: var(--papel-2); color: var(--vino); font-weight: 700; font-size: var(--t-apoyo); }
  .rh-quien .tx { display: grid; flex: 1; min-width: 0; line-height: 1.25; }
  .rh-quien .tx b { font-size: var(--t-apoyo); }
  .rh-quien .tx small { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
  .rh-lienzo { padding: 32px 40px 64px; max-width: 1120px; }
}
.rh-cabeza { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: flex-end; gap: 12px 20px; margin-bottom: 18px; }
.rh-cabeza .title { margin: 0; font-size: var(--t-titulo); }
.rh-cabeza .acciones { display: flex; flex-wrap: wrap; gap: 8px; }

/* D38 · la búsqueda, los filtros (enlaces con su cuenta) y el renglón de una lista. */
.rh-filtros { display: grid; gap: 10px; margin-bottom: 18px; }
.rh-busca { display: flex; align-items: center; gap: 10px; min-height: 48px; padding: 0 14px; border: 1.5px solid var(--linea); border-radius: 14px; background: var(--hoja); color: var(--gris); }
.rh-busca:focus-within { border-color: var(--vino); box-shadow: 0 0 0 3px var(--oro-claro); }
.rh-busca .ico { width: 20px; height: 20px; flex: none; }
.rh-busca input { flex: 1; min-width: 0; min-height: 46px; border: 0; outline: 0; background: transparent; color: var(--tinta); font: 600 16px var(--f-texto); }
.rh-chips { display: flex; gap: 8px; margin: 0 calc(-1 * var(--orilla)); padding: 2px var(--orilla) 4px; overflow-x: auto; scrollbar-width: none; }
.rh-chips::-webkit-scrollbar { display: none; }
.rh-chips a { flex: none; display: inline-flex; align-items: center; gap: 6px; min-height: var(--blanco); padding: 6px 14px; border: 1.5px solid var(--linea); border-radius: var(--r-pastilla); background: var(--crema); color: var(--vino); font-weight: 700; font-size: var(--t-apoyo); text-decoration: none; transition: transform var(--d-1) var(--suave); }
.rh-chips a:active { transform: scale(.97); }
.rh-chips a[aria-current] { background: var(--vino); border-color: var(--vino); color: var(--crema); }
.rh-chips b { font-weight: 700; opacity: .75; }
@media (min-width: 960px) { .rh-filtros { grid-template-columns: minmax(280px, 380px) 1fr; align-items: center; } .rh-chips { flex-wrap: wrap; margin: 0; padding: 0; overflow: visible; } }
/* without a search field the chips take the whole width (they were squeezed into the search's 380 px column: three rows of filters on the courses catalog at 1280) */
@media (min-width: 960px) { .rh-filtros > .rh-chips:only-child { grid-column: 1 / -1; } }
.rh-lista + .rh-lista { margin-top: var(--e-seccion); }
.panel.rh-filas { padding: 0; overflow: hidden; }
/* at 390 the state pill sits under the name (it never squeezes it); from 960 px the row is one line with its columns */
.rh-fila { display: grid; grid-template-columns: 40px minmax(0, 1fr) auto; grid-template-areas: "ini txt fl" "ini est fl"; align-items: center; column-gap: 12px; row-gap: 4px; width: 100%; min-height: 64px; padding: 10px 16px; color: inherit; text-decoration: none; transition: transform var(--d-1) var(--suave); }
.rh-fila .ini { grid-area: ini; }
.rh-fila .txt { grid-area: txt; }
.rh-fila .pill { grid-area: est; justify-self: start; }
.rh-fila > .ico { grid-area: fl; }
a.rh-fila:active { transform: scale(.99); }
.rh-fila + .rh-fila { border-top: 1px solid var(--linea); }
.rh-fila .ini { display: grid; place-items: center; width: 40px; height: 40px; flex: none; border-radius: 50%; background: var(--crema); color: var(--vino); font-weight: 700; font-size: var(--t-apoyo); }
.rh-fila .ini .ico { width: 20px; height: 20px; }
.rh-fila .txt { flex: 1; min-width: 0; display: grid; gap: 2px; line-height: 1.3; }
.rh-fila .t { font-weight: 700; font-size: var(--t-cuerpo); }
.rh-fila .s { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.rh-fila .col { display: none; }
.rh-fila .pill { flex: none; }
.rh-fila .pill-vacia { display: none; }
.rh-fila > .ico { width: 18px; height: 18px; flex: none; color: var(--gris-claro); }
@media (min-width: 960px) {
  .rh-fila { display: flex; align-items: center; gap: 12px; }
  a.rh-fila:hover { background: var(--crema); }
  .rh-fila .col { display: block; flex: 0 0 150px; font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .rh-fila .pill, .rh-fila .pill-vacia { display: inline-flex; flex: 0 0 auto; min-width: 140px; justify-content: center; }
}
.rh-vacio { margin: 0; padding: 18px 16px; border-radius: var(--r-tarjeta); background: var(--papel); font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }

/* D39 · una solicitud de la cola: su tipo, quién y de qué casa, el resumen; a la derecha cuánto lleva (terracota pasados dos días), su estado
   y UNA acción. A 390 el lado va debajo. */
.rh-pendiente { display: grid; gap: 10px; padding: 14px 16px; border-radius: var(--r-tarjeta); background: var(--papel); }
.rh-pendiente + .rh-pendiente { margin-top: 10px; }
.rh-pendiente .cuerpo { display: grid; gap: 4px; color: inherit; text-decoration: none; min-width: 0; }
.rh-pendiente .tipo { display: inline-flex; align-items: center; gap: 6px; font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.rh-pendiente .tipo .ico { width: 18px; height: 18px; color: var(--vino); }
.rh-pendiente .quien { font-size: var(--t-cuerpo); font-weight: 600; color: var(--gris); }
.rh-pendiente .quien b { color: var(--tinta); }
.rh-pendiente .resumen { font-size: var(--t-cuerpo); font-weight: 600; line-height: 1.35; color: var(--tinta); overflow-wrap: anywhere; }
.rh-pendiente .lado { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 10px; }
.rh-pendiente .edad { font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.rh-pendiente[data-tarde] .edad { color: var(--espera-tinta); }
.rh-pendiente .accion { margin-left: auto; }
.rh-pendiente .accion :is(.btn, .chip) { min-height: var(--blanco); }
@media (min-width: 720px) {
  .rh-pendiente { grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 16px; }
  .rh-pendiente .lado { flex-wrap: nowrap; justify-content: flex-end; }
}

/* D40 · la ficha de una persona como la ve RH: quién es, sus estados, sus datos, sus sesiones y quién vio sus datos (dos columnas a 1280). */
.rh-persona { display: grid; gap: 14px; }
.rh-persona .id { display: flex; align-items: center; gap: 14px; }
.rh-persona .id .ini { display: grid; place-items: center; width: 64px; height: 64px; flex: none; border-radius: 50%; background: var(--vino); color: var(--crema); font-weight: 700; font-size: 20px; }
.rh-persona .id h2 { margin: 0; font-family: var(--f-display); font-weight: 500; font-size: 30px; line-height: 1.05; color: var(--vino); }
.rh-persona .id .s { margin: 4px 0 0; font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.rh-estados { display: flex; flex-wrap: wrap; gap: 6px; }
.rh-persona .acciones { display: flex; flex-wrap: wrap; gap: 8px; }
.rh-persona .columnas { display: grid; gap: var(--e-seccion); }
.rh-persona h3 { margin: 0 0 8px; font-size: var(--t-cuerpo); font-weight: 700; color: var(--gris); }
.rh-persona h3:not(:first-child) { margin-top: var(--e-seccion); }
.panel.rh-datos { display: grid; margin: 0; padding: 4px 16px; }
.rh-datos > div { display: flex; justify-content: space-between; gap: 12px; padding: 10px 0; font-size: var(--t-apoyo); }
.rh-datos > div + div { border-top: 1px solid var(--linea); }
.rh-datos dt { font-weight: 600; color: var(--gris); }
.rh-datos dd { margin: 0; font-weight: 700; color: var(--tinta); text-align: right; overflow-wrap: anywhere; }
.rh-datos dd.sin { font-weight: 600; color: var(--espera-tinta); }
.panel.rh-vistas { display: grid; margin: 0; padding: 4px 16px; list-style: none; }
.rh-vistas li { display: grid; gap: 2px; padding: 10px 0; font-size: var(--t-apoyo); line-height: 1.3; }
.rh-vistas li + li { border-top: 1px solid var(--linea); }
.rh-vistas li span { font-weight: 600; color: var(--gris); }
.rh-persona .note { margin: 8px 0 0; }
@media (min-width: 960px) { .rh-persona .columnas { grid-template-columns: 1fr 1fr; align-items: start; } }

/* D41 · qué se abre en cada casa (una tarjeta por casa; tres a lo ancho a 1280) y el bloque para escribir (el texto y sus fuentes al lado). */
.rh-casas { display: grid; gap: 12px; }
@media (min-width: 760px) { .rh-casas { grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); } }
.rh-casas-form { display: grid; gap: 16px; }
.rh-casas-form > .btn { justify-self: start; }
.rh-casa { display: grid; align-content: start; gap: 10px; padding: 14px 16px; border-radius: var(--r-tarjeta); background: var(--papel); }
.rh-casa .cab { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: baseline; gap: 4px 10px; }
.rh-casa h3 { margin: 0; font-family: var(--f-display); font-weight: 500; font-size: 22px; color: var(--vino); }
.rh-casa .linea { font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.rh-casa .mods { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.rh-casa .mod { position: relative; display: flex; align-items: center; gap: 8px; min-height: 52px; padding: 8px 10px; border-radius: 12px; line-height: 1.2; }
.rh-casa .mod .ico { width: 20px; height: 20px; flex: none; }
.rh-casa .mod b { display: block; font-size: var(--t-apoyo); }
.rh-casa .mod small { display: block; font-size: var(--t-apoyo); font-weight: 700; }
.rh-casa .mod[data-estado="abierto"] { background: var(--verde-claro); color: var(--verde-tinta); }
.rh-casa .mod[data-estado="cerrado"] { background: var(--papel-2); color: var(--gris); }
.rh-casa .mod[data-estado="pronto"] { border: 1.5px dashed var(--linea); color: var(--gris); }
.rh-casa label.mod { cursor: pointer; transition: transform var(--d-1) var(--suave); }
.rh-casa label.mod:active { transform: scale(.97); }
.rh-casa label.mod input { position: absolute; width: 1px; height: 1px; margin: 0; padding: 0; border: 0; opacity: 0; }
.rh-casa label.mod:has(input:checked) { background: var(--verde-claro); color: var(--verde-tinta); }
.rh-casa label.mod:has(input:not(:checked)) { background: var(--papel-2); color: var(--gris); }
.rh-casa label.mod:has(input:focus-visible) { box-shadow: 0 0 0 3px var(--oro-claro); }
.rh-casa label.mod:has(input:checked) small.no, .rh-casa label.mod:has(input:not(:checked)) small.si { display: none; }
.rh-editor { gap: 16px; }
.rh-editor .estado { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; }
.rh-editor .autor { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.rh-editor .columnas { display: grid; gap: 16px; }
.rh-editor .texto { display: grid; gap: 14px; }
.rh-editor textarea { min-height: 220px; line-height: 1.5; }
.rh-editor .fuentes { display: grid; gap: 10px; min-width: 0; margin: 0; padding: 14px 16px; border: 0; border-radius: var(--r-tarjeta); background: var(--papel); }
.rh-editor .fuentes legend { position: absolute; top: 14px; left: 16px; right: 16px; padding: 0; margin: 0; font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.rh-editor .fuentes ul { display: grid; gap: 8px; margin: 0; padding: 0; list-style: none; }
.rh-editor .fuentes li { display: flex; align-items: flex-start; gap: 8px; font-size: var(--t-apoyo); font-weight: 600; line-height: 1.35; overflow-wrap: anywhere; }
.rh-editor .fuentes li .ico { width: 18px; height: 18px; flex: none; margin-top: 1px; color: var(--vino); }
.rh-editor .fuentes li a { color: var(--vino); font-weight: 700; }
.rh-editor .fuentes .sin { margin: 0; font-size: var(--t-apoyo); font-weight: 600; color: var(--espera-tinta); }
.rh-editor .botones { display: flex; flex-wrap: wrap; gap: 10px; }
.rh-editor .botones .btn { flex: 1 1 200px; }
@media (min-width: 960px) {
  .rh-editor .columnas { grid-template-columns: minmax(0, 1fr) 320px; align-items: start; }
  .rh-editor .botones .btn { flex: 0 0 auto; min-width: 200px; }
}
/* /kit/rh: the reference page's own spacing (not a screen). */
.kit-rh-sec { display: grid; gap: 14px; margin-top: 40px; }
.kit-rh-rotulo { margin: 0; }
/* At 1280 a button in the console is as wide as its words (the phone keeps the full-width button). */
@media (min-width: 960px) { .rh-lienzo .btn { width: auto; min-width: 200px; } .rh-editor .botones .btn { flex: 0 0 auto; } }
/* D33 · the lane's own decision block inside the card (equipo-jefa's DecidirDias): the same rhythm as the built-in forms. */
.por-aprobar .decision { display: grid; gap: 10px; }
.por-aprobar .decision .btn { width: 100%; }

/* D42 · el registro de horas para descargar: el rango, la casa, el formato y «Descargar» (una fila a 1280); lo que el archivo muestra y no
   llena (días sin marca, marcas sin salida, personas sin reloj) con las cuentas de kiss; qué lleva cada renglón; la ley con su artículo. */
.rh-registro { display: grid; gap: 18px; }
.rh-registro .forma { padding: 16px; border-radius: var(--r-tarjeta); background: var(--papel); }
@media (min-width: 960px) {
  .rh-registro .forma { grid-template-columns: repeat(3, minmax(0, 1fr)) minmax(160px, auto) auto; align-items: end; gap: 12px; }
  .rh-registro .forma .btn { width: auto; min-width: 160px; }
}
.rh-registro .huecos h3 { margin: 0 0 10px; font-size: var(--t-cuerpo); font-weight: 700; color: var(--gris); }
.rh-registro .huecos-grid { display: grid; gap: 10px; }
@media (min-width: 760px) { .rh-registro .huecos-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
.rh-registro .hueco { display: grid; align-content: start; gap: 4px; padding: 14px 16px; border-radius: var(--r-tarjeta); border: 1.5px dashed var(--linea); }
.rh-registro .hueco b { font-family: var(--f-display); font-weight: 500; font-size: 32px; line-height: 1; color: var(--espera-tinta); }
.rh-registro .hueco .t { font-size: var(--t-cuerpo); font-weight: 700; color: var(--tinta); }
.rh-registro .hueco .s { font-size: var(--t-apoyo); font-weight: 600; line-height: 1.35; color: var(--gris); }
.rh-registro .huecos .note { margin: 10px 0 0; }
.rh-registro .columnas-registro { display: grid; gap: 6px; margin: 4px 0 0; padding: 0 0 0 20px; font-size: var(--t-apoyo); font-weight: 600; line-height: 1.35; color: var(--tinta); }
.rh-registro .ley { display: flex; align-items: flex-start; gap: 10px; margin: 0; padding: 14px 16px; border-left: 3px solid var(--oro); border-radius: 0 var(--r-chico) var(--r-chico) 0; background: var(--papel); font-size: var(--t-apoyo); font-weight: 600; line-height: 1.45; }
.rh-registro .ley .ico { width: 20px; height: 20px; flex: none; margin-top: 2px; color: var(--vino); }
.rh-registro .ley small { display: block; margin-top: 4px; font-size: var(--t-apoyo); color: var(--gris); }

/* D43 · «Quién lo vio» para RH: primero las cuentas (las dos cifras y la barra), luego quién no lo ha visto (con «Reenviar» al lado) y,
   doblado, quién ya lo vio; a 1280 las dos listas lado a lado. */
.rh-alcance { display: grid; gap: 18px; }
.rh-alcance .cuenta { display: grid; gap: 10px; }
.rh-alcance .cuenta .date { margin: 0; }
.rh-alcance .titulo { margin: 0; font-size: var(--t-cuerpo); font-weight: 700; color: var(--tinta); }
.rh-alcance .cifras { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.rh-alcance .cifras > div { display: grid; gap: 2px; padding: 10px 12px; border-radius: 14px; background: var(--crema); }
.rh-alcance .cifras b { font-family: var(--f-display); font-weight: 500; font-size: var(--t-banda); line-height: 1; color: var(--vino); }
.rh-alcance .cifras .falta b { color: var(--espera-tinta); }
.rh-alcance .cifras span { font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.rh-alcance .tira { display: block; width: 100%; height: 8px; }
.rh-alcance .tira .fondo { fill: var(--papel-2); }
.rh-alcance .tira .hecho { fill: var(--vino); }
.rh-alcance .listas { display: grid; gap: 18px; }
@media (min-width: 960px) { .rh-alcance .listas { grid-template-columns: 1fr 1fr; align-items: start; } }
.rh-alcance h3 { margin: 0 0 8px; font-size: var(--t-cuerpo); font-weight: 700; color: var(--gris); }
.rh-alcance .panel.quienes { padding: 2px 16px; }
.rh-alcance .reenviar { margin-top: 12px; }
.rh-alcance details.despliega { margin: 0; }
.rh-alcance details.despliega > summary { font-size: var(--t-cuerpo); }
.rh-registro .forma .seg { background: var(--papel-2); }
/* ojo O19-11 (ronda 7): a link in a section head («Recibos», «Ver todo») measures its 44 px in its own box, not only through its ::after;
   the negative block margins keep the head as tall as before. */
.section-head :is(a, .mas), .b-tit .mas { display: inline-flex; align-items: center; min-height: var(--blanco); margin-block: -12px; }
.section-head .mas::after, .b-tit .mas::after { inset: 0 -8px; }

/* ojo O19-12 (ronda 7): the generic row (Renglon — «Tus mesas de la semana» and /kit) reads at the 16 px floor: the weekday under the day
   (was --t-micro, 12 px) and the line under the text (an unstyled <small>, 13.3 px); text and line stack, as the demo's `.dia` drew them. */
.renglon .cuando span, .tick .when span { font-size: var(--t-nota); }
.renglon > .t { flex: 1; min-width: 0; display: grid; gap: 2px; font-weight: 700; font-size: var(--t-cuerpo); line-height: 1.25; }
.renglon > .t small { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.renglon > b { font-weight: 700; font-size: var(--t-cuerpo); font-variant-numeric: tabular-nums; white-space: nowrap; }

/* ---- Revisión 7 (2026-10-13): lo que las pantallas de la ronda escribían en línea, como reglas del kit (como D23) ---- */
/* La línea bajo el título de la cabeza: 10 px (el `margin-top:10px` de las héroes). */
.top > div > :is(.frase, .title) ~ .lede { margin-top: 10px; }
/* Una sección pegada a la cabeza (los 18 px de las héroes): `.cerca`. */
.pad.cerca { margin-top: 18px; }
/* Mi equipo: «Decides tú» 16 px bajo la cabeza; el resumen del día 8 px. */
.pad:has(> .b-decision:first-child) { margin-top: 16px; }
.pad:has(> .v2-resumen-equipo:first-child) { margin-top: 8px; }
/* La foto de la incapacidad antes de subirla: centrada, dentro de la tarjeta, el chip debajo. */
.panel.foto-previa { text-align: center; }
.panel.foto-previa img { display: block; max-width: 100%; max-height: 220px; margin: 0 auto 10px; border-radius: 12px; }
.panel.foto-previa label.chip { margin-top: 14px; }
/* Párrafos dentro de una tarjeta: 10 px entre ellos; un chip después, 12 px. */
.panel > .note + .note { margin-top: 10px; }
.panel > .note ~ .chip { margin-top: 12px; }
/* Las líneas bajo un formulario (un error, un enlace): 10 px. */
.b-formulario ~ .note { margin-top: 10px; }

/* ---- D44–D47 · ronda 9 (2026-10-13): Mi equipo a fondo. Lo que las héroes jefa.equipo.bitacora(.nota), .junta, persona.hoy.junta,
   jefa.equipo.ayer y .ventas dibujaban bajo [data-heroe], cortado a lo que kiss da: sin foto en la nota, sin audio en la junta, sin «% de
   la mano de obra», y cada número de la casa con la fecha en que se apoya. ---- */

/* D44 · una nota de la bitácora: quién y cuándo, de qué es, el texto, quién la leyó; «Nueva» mientras no la abres. */
.nota-bitacora { display: grid; gap: 8px; padding: 14px 16px; border-radius: var(--r-tarjeta); background: var(--papel); color: inherit; text-decoration: none; transition: transform var(--d-1) var(--suave); }
a.nota-bitacora:active { transform: scale(.985); }
.nota-bitacora + .nota-bitacora { margin-top: 10px; }
.nota-bitacora .cab { display: flex; align-items: center; gap: 12px; }
.nota-bitacora .ini { display: grid; place-items: center; width: 40px; height: 40px; flex: none; border-radius: 50%; background: var(--crema); color: var(--vino); font-weight: 700; font-size: var(--t-apoyo); }
.nota-bitacora .quien { flex: 1; min-width: 0; display: grid; line-height: 1.25; }
.nota-bitacora .quien b { font-size: var(--t-cuerpo); color: var(--tinta); }
.nota-bitacora .quien small { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.nota-bitacora .tipo-nota { justify-self: start; padding: 2px 10px; border-radius: var(--r-pastilla); background: var(--crema); color: var(--vino); font-size: var(--t-apoyo); font-weight: 700; }
.nota-bitacora .texto { margin: 0; font-size: var(--t-cuerpo); font-weight: 600; line-height: 1.4; color: var(--tinta); overflow-wrap: anywhere; white-space: pre-line; }
.nota-bitacora .leyo { display: flex; align-items: center; gap: 6px; margin: 0; font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.nota-bitacora .leyo .ico { width: 18px; height: 18px; flex: none; }
.tipos-nota { margin: 0; padding: 0; border: 0; min-width: 0; }
.tipos-nota > legend { padding: 0; margin: 0 0 8px; font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.tipos-nota .chips-elige label { position: relative; display: inline-flex; }
.tipos-nota .chips-elige input { position: absolute; width: 1px; height: 1px; min-height: 0; margin: 0; padding: 0; border: 0; opacity: 0; pointer-events: none; }

/* D45 · la junta de antes: la tarjeta de vino que lee el equipo (quién la mandó y cuándo, el título, los puntos; terracota mientras es
   borrador), quién la confirmó (el anillo y los nombres de quien falta, sólo para quien lleva la casa) y el «Enterado» de la persona. */
.junta { display: grid; gap: 10px; padding: 18px; border-radius: var(--r-grande); background: var(--vino); color: var(--crema); }
.junta[data-estado="borrador"] { background: var(--espera-claro); color: var(--tinta); }
.junta .quien { margin: 0; font-size: var(--t-apoyo); font-weight: 700; color: var(--oro-suave); }
.junta[data-estado="borrador"] .quien { color: var(--espera-tinta); }
.junta h2 { margin: 0; font-family: var(--f-display); font-weight: 400; font-size: 28px; line-height: 1.1; color: inherit; }
.junta ul { display: grid; gap: 8px; margin: 0; padding: 0 0 0 20px; font-size: var(--t-cuerpo); font-weight: 600; line-height: 1.4; }
.junta[data-estado="publicada"] ul { color: var(--crema-tenue); }
.lectura-junta { display: grid; gap: 18px; }
.lectura-junta h3 { margin: 0 0 8px; font-size: var(--t-cuerpo); font-weight: 700; color: var(--gris); }
.lectura-junta .panel.quienes { padding: 2px 16px; }

/* D46 · así nos fue ayer: la tarjeta de vino (la fecha en que se apoya, las cuentas, cuántos contestaron, las dos calificaciones) y, abajo,
   de dónde sale cada número y cuándo se leyó; «Sólo para ti», privado. */
.noche-ayer { display: grid; gap: 10px; }
.noche-ayer .noche { padding: 18px; border-radius: var(--r-grande); background: var(--vino); color: var(--crema); --c-monto: var(--sobre-vino); }
.noche-ayer .k { margin: 0; font-size: var(--t-apoyo); font-weight: 700; color: var(--oro-suave); }
.noche-ayer .grande { margin-top: 8px; font-family: var(--f-display); font-size: var(--t-numero); line-height: 1; color: var(--crema); }
:root[data-kit="v2"] .noche-ayer .v2-frase, .noche-ayer .v2-frase { margin: 8px 0 0; font-size: var(--t-cuerpo); font-weight: 600; color: var(--crema-tenue); }
.noche-ayer .dos { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-top: 14px; }
.noche-ayer .dos > div { display: grid; gap: 2px; padding: 10px 12px; border-radius: 14px; background: var(--sobre-vino-velo); }
.noche-ayer .dos b { font-family: var(--f-display); font-weight: 500; font-size: 30px; line-height: 1; color: var(--crema); }
.noche-ayer .dos span { font-size: var(--t-apoyo); font-weight: 700; color: var(--crema-tenue); }
.noche-ayer .pocas { margin: 12px 0 0; font-size: var(--t-apoyo); font-weight: 600; color: var(--crema-tenue); }
.fuentes-casa { display: grid; gap: 4px; margin: 0; padding: 0; list-style: none; font-size: var(--t-apoyo); font-weight: 600; line-height: 1.35; color: var(--gris); }
.privado-ayer { display: grid; gap: 10px; }
.privado-ayer .section-head { margin: 0; }
.privado-ayer .pill.vino .ico { width: 16px; height: 16px; }
.privado-ayer .privado { display: grid; gap: 6px; padding: 14px 16px; border-radius: var(--r-tarjeta); background: var(--papel); border-left: 3px solid var(--vino); }
.privado-ayer q { font-size: var(--t-cuerpo); font-weight: 600; line-height: 1.4; color: var(--tinta); quotes: "«" "»"; }
.privado-ayer small { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.privado-ayer .note { margin: 0; }

/* D47 · ventas contra horas: lo del día (sin IVA, sus cuentas, por hora del reloj), la leyenda, y hora por hora lo vendido (barra de vino)
   contra lo que suele vender un día igual (una raya fina; sin dato, sin raya — nunca un 0), con sus cuentas y cuántas personas marcaron. */
.ventas-horas { display: grid; gap: 14px; }
.ventas-horas .date { margin: 0; }
.ventas-horas .leyenda { display: flex; flex-wrap: wrap; gap: 6px 16px; font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.ventas-horas .leyenda span { display: inline-flex; align-items: center; gap: 8px; }
.ventas-horas .leyenda i { display: inline-block; flex: none; }
.ventas-horas .leyenda i.real { width: 18px; height: 10px; border-radius: 2px; background: var(--vino); }
.ventas-horas .leyenda i.esp { width: 2px; height: 16px; background: var(--tinta); }
.ventas-horas .horas { display: grid; gap: 0; margin: 0; padding: 4px 16px; list-style: none; border-radius: var(--r-tarjeta); background: var(--papel); }
.ventas-horas .horas li { display: grid; grid-template-columns: 48px minmax(0, 1fr) auto; grid-template-areas: "h pista v" ". c c"; align-items: center; column-gap: 10px; row-gap: 2px; padding: 10px 0; }
.ventas-horas .horas li + li { border-top: 1px solid var(--linea); }
.ventas-horas .h { grid-area: h; font: 700 var(--t-apoyo)/1.2 var(--f-texto); color: var(--gris); font-variant-numeric: tabular-nums; }
.ventas-horas .pista { grid-area: pista; display: block; width: 100%; height: 20px; }
.ventas-horas .pista .fondo { fill: var(--papel-2); }
.ventas-horas .pista .real { fill: var(--vino); }
.ventas-horas .pista .esp { fill: var(--tinta); }
.ventas-horas .v { grid-area: v; font: 700 var(--t-cuerpo)/1.2 var(--f-texto); color: var(--tinta); font-variant-numeric: tabular-nums; text-align: right; }
.ventas-horas .c { grid-area: c; font-size: var(--t-apoyo); font-weight: 600; line-height: 1.3; color: var(--gris); }
html[data-ocultar] .ventas-horas b.v.monto::after { left: auto; right: 0; }

/* RH (ojo O20-3 and the conductor's /rh/personas at 1280): «Salir» measures 44 × 44; a row's date column wraps, never cuts the year. */
.rh-quien .salir { min-width: var(--blanco); min-height: var(--blanco); justify-content: center; }
@media (min-width: 960px) { .rh-fila .col { flex: 0 1 220px; min-width: 120px; overflow: visible; text-overflow: clip; white-space: normal; overflow-wrap: anywhere; } }

/* ---- D48–D50 · ronda 9 (2026-10-13): los nuevos y la señal temprana, Llegar, Salir. Lo que las héroes jefa.equipo.nuevos, .senal,
   persona.llegar(.hito), persona.yo.salida(.gracias) y rh.personas.baja(.inventario, .recontratable) dibujaban, cortado a lo que kiss da:
   la señal es la salida de una regla con sus razones y fuentes, nunca una frase sobre la persona ni una calificación; «¿Puede volver?» no
   lleva razón; lo de la salida lo lee sólo RH. ---- */

/* D48 · un nuevo: quién, su puesto y su padrino, «12 de 90», los cuatro hitos con su fecha (pasó: contestó o no; hoy; falta) y lo que sigue. */
:is(.nuevo, .senal) { display: grid; gap: 10px; padding: 14px 16px; border-radius: var(--r-tarjeta); background: var(--papel); }
:is(.nuevo, .senal) + :is(.nuevo, .senal) { margin-top: 10px; }
:is(.nuevo, .senal) .cab { display: flex; align-items: center; gap: 12px; }
:is(.nuevo, .senal) .ini { display: grid; place-items: center; width: 44px; height: 44px; flex: none; border-radius: 50%; background: var(--vino); color: var(--crema); font-weight: 700; font-size: var(--t-apoyo); }
:is(.nuevo, .senal) .quien { flex: 1; min-width: 0; display: grid; line-height: 1.25; }
:is(.nuevo, .senal) .quien b { font-size: var(--t-cuerpo); color: var(--tinta); }
:is(.nuevo, .senal) .quien small { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.nuevo .dia { display: grid; justify-items: end; line-height: 1; }
.nuevo .dia b { font-family: var(--f-display); font-weight: 500; font-size: 32px; color: var(--vino); }
.nuevo .dia small { font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.nuevo .hitos { display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px; margin: 0; padding: 0; list-style: none; }
.nuevo .hitos li { display: grid; justify-items: center; gap: 2px; padding: 8px 4px; border-radius: 12px; background: var(--crema); text-align: center; line-height: 1.15; }
.nuevo .hitos b { font-family: var(--f-display); font-weight: 500; font-size: 22px; color: var(--vino); }
.nuevo .hitos span { font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.nuevo .hitos li[data-estado="paso"][data-respondio="si"] { background: var(--verde-claro); }
.nuevo .hitos li[data-estado="paso"][data-respondio="si"] :is(b, span) { color: var(--verde-tinta); }
.nuevo .hitos li[data-estado="paso"][data-respondio="no"] { background: var(--espera-claro); }
.nuevo .hitos li[data-estado="paso"][data-respondio="no"] :is(b, span) { color: var(--espera-tinta); }
.nuevo .hitos li[data-estado="hoy"] { background: var(--vino); }
.nuevo .hitos li[data-estado="hoy"] :is(b, span) { color: var(--crema); }
.nuevo .sigue { margin: 0; font-size: var(--t-apoyo); font-weight: 600; line-height: 1.35; color: var(--tinta); }
.nuevo > .chip { justify-self: start; min-height: var(--blanco); text-decoration: none; }
/* La regla de la señal: su resumen, lo que mira, sus fuentes, y que no es una calificación. */
.regla-senal { display: grid; gap: 8px; padding: 14px 16px; border-radius: var(--r-tarjeta); background: var(--azul-claro); color: var(--azul-tinta); }
.regla-senal p { margin: 0; }
.regla-senal .k { font-size: var(--t-apoyo); font-weight: 700; }
.regla-senal .resumen { font-size: var(--t-cuerpo); font-weight: 700; line-height: 1.35; }
.regla-senal ul { display: grid; gap: 4px; margin: 0; padding: 0 0 0 18px; font-size: var(--t-apoyo); font-weight: 600; }
.regla-senal .de, .regla-senal .no-es { font-size: var(--t-apoyo); font-weight: 600; line-height: 1.35; }
.senal .ventana { margin: 0; font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.senal .cifras { display: grid; grid-template-columns: repeat(auto-fit, minmax(110px, 1fr)); gap: 8px; }
.senal .cifras > div { display: grid; gap: 2px; padding: 10px 12px; border-radius: 12px; background: var(--crema); }
.senal .cifras b { font-family: var(--f-display); font-weight: 500; font-size: 26px; line-height: 1; color: var(--vino); }
.senal .cifras span { font-size: var(--t-apoyo); font-weight: 700; line-height: 1.25; color: var(--gris); }
.senal .motivos { display: grid; gap: 4px; margin: 0; padding: 0 0 0 18px; font-size: var(--t-apoyo); font-weight: 600; line-height: 1.35; color: var(--tinta); }
.senal[data-estado="acompanar"] { box-shadow: inset 3px 0 0 var(--espera); }

/* D49 · Llegar: los hitos de los 90 días (el día, su fecha o «en 18 días», lo que contestó) y «¿Cómo vas?» con sus tres respuestas. */
.hitos-llegar { display: grid; margin: 0; padding: 4px 16px; list-style: none; border-radius: var(--r-tarjeta); background: var(--papel); }
.hitos-llegar li { display: flex; align-items: center; gap: 12px; min-height: 64px; padding: 10px 0; }
.hitos-llegar li + li { border-top: 1px solid var(--linea); }
.hitos-llegar .n { display: grid; justify-items: center; width: 52px; flex: none; line-height: 1; }
.hitos-llegar .n small { font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.hitos-llegar .n b { font-family: var(--f-display); font-weight: 500; font-size: 26px; color: var(--vino); }
.hitos-llegar .txt { flex: 1; min-width: 0; display: grid; gap: 2px; line-height: 1.25; }
.hitos-llegar .t { font-size: var(--t-cuerpo); font-weight: 700; color: var(--tinta); }
.hitos-llegar .s { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.hitos-llegar li[data-estado="hoy"] .t { color: var(--vino); }
.hitos-llegar li > .ico { width: 20px; height: 20px; color: var(--verde-tinta); flex: none; }
.hitos-llegar .chip { min-height: var(--blanco); text-decoration: none; }
.como-vas { display: grid; gap: 12px; margin: 0; padding: 0; border: 0; min-width: 0; }
.como-vas > legend { padding: 0; margin: 0 0 4px; font-family: var(--f-display); font-weight: 500; font-size: var(--t-sub); color: var(--vino); }
.como-vas .opciones, .elegible .opciones { display: grid; gap: 8px; }
:is(.como-vas, .elegible) .opciones label { position: relative; display: flex; }
:is(.como-vas, .elegible) .opciones input { position: absolute; width: 1px; height: 1px; min-height: 0; margin: 0; padding: 0; border: 0; opacity: 0; }
:is(.como-vas, .elegible) .opciones span { display: flex; align-items: center; width: 100%; min-height: 56px; padding: 10px 16px; border: 2px solid transparent; border-radius: 14px; background: var(--papel); color: var(--tinta); font-weight: 700; font-size: var(--t-cuerpo); cursor: pointer; transition: transform var(--d-1) var(--suave); }
:is(.como-vas, .elegible) .opciones label:active span { transform: scale(.985); }
:is(.como-vas, .elegible) .opciones input:checked + span { border-color: var(--vino); background: var(--hoja); color: var(--vino); }
:is(.como-vas, .elegible) .opciones input:focus-visible + span { box-shadow: 0 0 0 3px var(--oro-claro); }
.como-vas .nota { display: grid; gap: 6px; font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }

/* D50 · Salir: lo que dijo al irse (sólo RH), lo que devuelve, y «¿Puede volver a la casa?» sin razón. */
.palabras-salida { display: grid; gap: 10px; padding: 14px 16px; border-radius: var(--r-tarjeta); background: var(--papel); }
.palabras-salida .cab, .elegible > legend { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 8px; }
.palabras-salida h3 { margin: 0; font-size: var(--t-cuerpo); font-weight: 700; color: var(--tinta); }
:is(.palabras-salida, .elegible) .pill.vino .ico { width: 16px; height: 16px; }
.palabras-salida dl { display: grid; gap: 6px; margin: 0; }
.palabras-salida dl > div { display: flex; justify-content: space-between; gap: 12px; font-size: var(--t-apoyo); }
.palabras-salida dt { font-weight: 600; color: var(--gris); }
.palabras-salida dd { margin: 0; font-weight: 700; color: var(--tinta); text-align: right; }
.palabras-salida q { padding: 10px 14px; border-left: 3px solid var(--vino); background: var(--crema); border-radius: 0 12px 12px 0; font-size: var(--t-cuerpo); font-weight: 600; line-height: 1.4; quotes: "«" "»"; overflow-wrap: anywhere; }
.palabras-salida .note { margin: 0; }
.devuelve { display: grid; margin: 0; padding: 4px 16px; list-style: none; border-radius: var(--r-tarjeta); background: var(--papel); }
.devuelve li { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; min-height: 56px; padding: 10px 0; }
.devuelve li + li { border-top: 1px solid var(--linea); }
.devuelve .txt { flex: 1; min-width: 0; display: grid; gap: 2px; line-height: 1.25; }
.devuelve .txt b { font-size: var(--t-cuerpo); }
.devuelve .txt small { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.devuelve .acc { display: flex; gap: 8px; }
.devuelve .acc :is(.chip, .btn) { min-height: var(--blanco); }
.elegible { display: grid; gap: 10px; margin: 0; padding: 0; border: 0; min-width: 0; }
.elegible > legend { float: left; width: 100%; padding: 0; margin: 0 0 4px; font-size: var(--t-cuerpo); font-weight: 700; color: var(--tinta); }
.elegible .por { margin: 0; font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.elegible .note { margin: 0; }

/* D33 · the person's puesto and house under the request (equipo-jefa). */
.por-aprobar .linea { margin: 2px 0 0; font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
/* the rule's state sits under the name (it never squeezes the line of puesto, day and padrino) */
.senal .cab { display: grid; grid-template-columns: 44px minmax(0, 1fr); grid-template-areas: "ini quien" "ini estado"; align-items: center; column-gap: 12px; row-gap: 4px; }
.senal .cab .ini { grid-area: ini; }
.senal .cab .quien { grid-area: quien; }
.senal .cab .pill { grid-area: estado; justify-self: start; }
/* ---- D51–D56 · ronda 10 (2026-10-14): Hoy y Yo. Lo que las héroes persona.hoy.turno.sentimiento, .reportar, persona.yo.rh, .constancia,
   .fiscales, .imss, .denuncia(.caso) y rh.voz.pulso dibujaban: el texto legal espera el sí de Jorge (la pantalla dice que se prepara), el
   RFC y el NSS sólo para su dueño y enmascarados, la denuncia nunca nombra a quien escribe. ---- */

/* D51 · ¿cómo estuvo tu turno?: cinco caras con su palabra, una elección; no es obligatoria. */
.califica-turno { display: grid; gap: 12px; margin: 0; padding: 0; border: 0; min-width: 0; }
.califica-turno > legend { padding: 0; margin: 0 0 4px; font-family: var(--f-display); font-weight: 500; font-size: var(--t-sub); color: var(--vino); }
.califica-turno .caras { display: grid; grid-template-columns: repeat(5, 1fr); gap: 6px; }
.califica-turno label { position: relative; display: flex; }
.califica-turno input { position: absolute; width: 1px; height: 1px; min-height: 0; margin: 0; padding: 0; border: 0; opacity: 0; }
.califica-turno label span { display: grid; justify-items: center; gap: 4px; width: 100%; min-height: 76px; padding: 10px 2px; border: 2px solid transparent; border-radius: 14px; background: var(--papel); color: var(--gris); cursor: pointer; transition: transform var(--d-1) var(--suave); }
.califica-turno label:active span { transform: scale(.97); }
.califica-turno .ico { width: 32px; height: 32px; }
.califica-turno em { font-style: normal; font-size: var(--t-apoyo); font-weight: 700; line-height: 1.15; text-align: center; }
.califica-turno input:checked + span { border-color: var(--vino); background: var(--hoja); color: var(--vino); }
.califica-turno input:focus-visible + span { box-shadow: 0 0 0 3px var(--oro-claro); }
.califica-turno .nota { margin: 0; font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }

/* D52 · ¿qué falla?: dónde (chips), qué pasa (una línea), la foto, «Mandar» con su ícono. */
.reporte-falla .btn .ico { width: 20px; height: 20px; }
.reporte-falla .note { margin: 0; }

/* D53 · pedir algo a RH: los cuatro tipos en mosaicos grandes (una elección), la línea, «Mandar a RH»; el pedido con quién lo atiende. */
.pedir-rh fieldset { display: grid; gap: 8px; margin: 0; padding: 0; border: 0; min-width: 0; }
.pedir-rh legend { padding: 0; margin: 0 0 8px; font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.pedir-rh .tiles { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.b-formulario .pedir-rh .tiles label, .pedir-rh .tiles label { position: relative; display: flex; }
.pedir-rh .tiles input { position: absolute; width: 1px; height: 1px; min-height: 0; margin: 0; padding: 0; border: 0; opacity: 0; }
.pedir-rh .tiles span { display: grid; align-content: start; gap: 4px; width: 100%; min-height: 104px; padding: 14px; border: 2px solid transparent; border-radius: var(--r-tarjeta); background: var(--papel); color: var(--tinta); cursor: pointer; transition: transform var(--d-1) var(--suave); }
.pedir-rh .tiles label:active span { transform: scale(.97); }
.pedir-rh .tiles .ico { width: 24px; height: 24px; color: var(--vino); }
.pedir-rh .tiles b { font-size: var(--t-cuerpo); line-height: 1.2; }
.pedir-rh .tiles small { font-size: var(--t-apoyo); font-weight: 600; line-height: 1.25; color: var(--gris); }
.pedir-rh .tiles input:checked + span { border-color: var(--vino); background: var(--hoja); }
.pedir-rh .tiles input:focus-visible + span { box-shadow: 0 0 0 3px var(--oro-claro); }
.pedido-rh { display: flex; align-items: center; gap: 12px; min-height: 64px; padding: 10px 16px; border-radius: var(--r-tarjeta); background: var(--papel); color: inherit; text-decoration: none; }
.pedido-rh + .pedido-rh { margin-top: 8px; }
.pedido-rh .txt { flex: 1; min-width: 0; display: grid; gap: 2px; line-height: 1.25; }
.pedido-rh .txt b { font-size: var(--t-cuerpo); }
.pedido-rh .txt small { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }

/* D54 · un documento tuyo: qué es, sus datos (enmascarados), su estado, de dónde se lee y la acción — o «La casa está preparando el texto». */
.documento { display: grid; gap: 12px; padding: 14px 16px; border-radius: var(--r-tarjeta); background: var(--papel); }
.documento + .documento { margin-top: 10px; }
.documento .cab { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; }
.documento .ic { display: grid; place-items: center; width: 42px; height: 42px; flex: none; border-radius: 13px; background: var(--crema); color: var(--vino); }
.documento .ic .ico { width: 22px; height: 22px; }
.documento .cab .txt { flex: 1 1 160px; min-width: 0; display: grid; gap: 2px; line-height: 1.25; }
.documento .cab b { font-size: var(--t-cuerpo); }
.documento .cab small { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.documento dl { display: grid; margin: 0; }
.documento dl > div { display: flex; justify-content: space-between; gap: 12px; padding: 8px 0; font-size: var(--t-apoyo); }
.documento dl > div + div { border-top: 1px solid var(--linea); }
.documento dt { font-weight: 600; color: var(--gris); }
.documento dd { margin: 0; font-weight: 700; color: var(--tinta); font-variant-numeric: tabular-nums; letter-spacing: .02em; text-align: right; }
.documento dd.sin { font-weight: 600; color: var(--espera-tinta); }
.documento .de { margin: 0; font-size: var(--t-apoyo); font-weight: 600; line-height: 1.35; color: var(--gris); }

/* D55 · la línea de denuncia: el código (una vez; «Copiar»), los pasos y la conversación — «Tú, sin tu nombre» y «Quien lo lee». */
.codigo-denuncia { display: grid; justify-items: start; gap: 8px; padding: 18px; border-radius: var(--r-grande); background: var(--vino); color: var(--crema); }
.codigo-denuncia .k { margin: 0; font-size: var(--t-apoyo); font-weight: 700; color: var(--oro-suave); }
.codigo-denuncia b { font-family: var(--f-texto); font-weight: 700; font-size: 30px; letter-spacing: .08em; font-variant-numeric: tabular-nums; }
.codigo-denuncia .chip { min-height: var(--blanco); border-color: var(--sobre-vino-borde); color: var(--crema); }
.hilo-denuncia { display: grid; gap: 14px; }
.pasos-denuncia { display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px; margin: 0; padding: 0; list-style: none; }
.pasos-denuncia li { display: grid; justify-items: center; gap: 6px; padding: 10px 4px; border-radius: 12px; background: var(--papel); font-size: var(--t-apoyo); font-weight: 700; line-height: 1.2; text-align: center; color: var(--gris); }
.pasos-denuncia i { width: 12px; height: 12px; border-radius: 50%; background: var(--papel-2); }
.pasos-denuncia [data-estado="hecho"] { color: var(--verde-tinta); }
.pasos-denuncia [data-estado="hecho"] i { background: var(--verde); }
.pasos-denuncia [data-estado="ahora"] { background: var(--hoja); color: var(--vino); box-shadow: inset 0 0 0 2px var(--vino); }
.pasos-denuncia [data-estado="ahora"] i { background: var(--vino); }
.hilo-denuncia .mensajes { display: grid; gap: 10px; }
.hilo-denuncia .msg { max-width: 88%; padding: 10px 14px; border-radius: 14px; }
.hilo-denuncia .msg p { margin: 0; font-size: var(--t-cuerpo); font-weight: 600; line-height: 1.4; overflow-wrap: anywhere; white-space: pre-line; }
.hilo-denuncia .msg small { display: block; margin-top: 4px; font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.hilo-denuncia .msg.tu { justify-self: end; border-radius: 14px 14px 4px 14px; background: var(--papel-2); }
.hilo-denuncia .msg.casa { justify-self: start; border-radius: 14px 14px 14px 4px; background: var(--papel); }

/* D56 · el enlace de una encuesta: su nombre o su pregunta, sin nombre y cuánto tarda, «Contestar» (otra pestaña) o «Ya contestaste». */
.encuesta-liga { display: grid; gap: 8px; padding: 16px; border-radius: var(--r-tarjeta); background: var(--papel); }
.encuesta-liga p { margin: 0; }
.encuesta-liga .k { font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.encuesta-liga .pregunta { font-family: var(--f-display); font-weight: 500; font-size: var(--t-sub); line-height: 1.15; color: var(--vino); }
.encuesta-liga .linea { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.encuesta-liga .hecha { display: flex; align-items: center; gap: 8px; font-size: var(--t-cuerpo); font-weight: 700; color: var(--verde-tinta); }
.encuesta-liga .hecha .ico { width: 20px; height: 20px; }
.encuesta-liga .prep { font-size: var(--t-apoyo); font-weight: 600; line-height: 1.35; color: var(--azul-tinta); }
/* D45 · a junta point with its title and its line (equipo-jefa, HECHOS 10-14). */
.junta li b { display: block; color: var(--crema); }
.junta[data-estado="borrador"] li b { color: var(--tinta); }
.junta li span { display: block; margin-top: 2px; }

/* ---- D57–D65 · ronda 11 (2026-10-14): Aprender completo. Lo que las héroes persona.aprender.carta.platillo, .recetas.receta,
   .higiene.evidencia/.renovar, .camino.escalon, .vacantes.vacante, .racha, .leccion.descarga y rh.contenido.caminos.escalon/.vencimientos
   dibujaban, con las fuentes de la ronda: la carta de Payload, las lecciones de la casa, `rrhh_puestos`, las vacantes de Talento; una receta
   sin fuente de la casa lo dice. ---- */

/* D57 · un platillo de la carta: la foto con su nombre, qué lleva, su alérgeno, la frase de la casa y su estándar. */
.platillo { display: grid; gap: 12px; }
.platillo .vis { position: relative; overflow: hidden; border-radius: var(--r-grande); background: var(--foto-fondo); aspect-ratio: 4 / 3; }
.platillo .vis img { display: block; width: 100%; height: 100%; object-fit: cover; }
.platillo .vis .sin-foto { display: grid; place-items: center; width: 100%; height: 100%; color: var(--sobre-vino-2); }
.platillo .vis .sin-foto .ico { width: 48px; height: 48px; }
.platillo .vis::after { content: ""; position: absolute; inset: 0; background: var(--velo-foto); pointer-events: none; }
.platillo .cap { position: absolute; left: 16px; right: 16px; bottom: 14px; z-index: 1; display: grid; gap: 4px; color: var(--crema); }
.platillo .cap p { margin: 0; }
.platillo .cap .k { font-size: var(--t-apoyo); font-weight: 700; color: var(--oro-suave); }
.platillo .cap .n { font-family: var(--f-display); font-size: 34px; line-height: 1; }
.platillo .lleva { display: flex; flex-wrap: wrap; gap: 6px; }
.platillo .alergeno { display: flex; gap: 10px; align-items: flex-start; margin: 0; padding: 12px 14px; border-radius: 14px; background: var(--espera-claro); color: var(--espera-tinta); font-size: var(--t-apoyo); font-weight: 600; line-height: 1.35; }
.platillo .alergeno .ico { width: 20px; height: 20px; flex: none; margin-top: 1px; }
.platillo .frase { padding: 14px 16px; border-radius: var(--r-tarjeta); background: var(--papel); }
.platillo .frase .k { margin: 0 0 4px; font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.platillo .frase q { font-family: var(--f-display); font-size: var(--t-sub); line-height: 1.2; color: var(--vino); quotes: "«" "»"; }
.platillo .estandar { display: grid; margin: 0; padding: 4px 16px; border-radius: var(--r-tarjeta); background: var(--papel); }
.platillo .estandar > div { display: flex; justify-content: space-between; gap: 12px; padding: 10px 0; font-size: var(--t-apoyo); }
.platillo .estandar > div + div { border-top: 1px solid var(--linea); }
.platillo .estandar dt { font-weight: 600; color: var(--gris); }
.platillo .estandar dd { margin: 0; font-weight: 700; text-align: right; }
:is(.platillo, .receta) .de { margin: 0; font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }

/* D58 · la receta: porciones, paso a paso numerado, de dónde sale. */
.receta { display: grid; gap: 14px; }
.receta .porciones { display: grid; grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); gap: 10px; }
.receta .porciones > div { display: grid; gap: 2px; padding: 12px 14px; border-radius: var(--r-tarjeta); background: var(--papel); }
.receta .porciones b { font-family: var(--f-display); font-weight: 500; font-size: 30px; line-height: 1; color: var(--vino); }
.receta .porciones span { font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.pasos-receta { display: grid; margin: 0; padding: 4px 16px; list-style: none; border-radius: var(--r-tarjeta); background: var(--papel); }
.pasos-receta li { display: flex; gap: 12px; align-items: flex-start; padding: 12px 0; }
.pasos-receta li + li { border-top: 1px solid var(--linea); }
.pasos-receta .num { display: grid; place-items: center; width: 32px; height: 32px; flex: none; border-radius: 50%; background: var(--vino); color: var(--crema); font-weight: 700; font-size: var(--t-apoyo); }
.pasos-receta .txt { display: grid; gap: 2px; line-height: 1.3; }
.pasos-receta .txt b { font-size: var(--t-cuerpo); }
.pasos-receta .txt small { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }

/* D59 · NOM-251: una evidencia (qué, cuándo vence, quién la guarda, su estado) y la banda de «Te toca renovarla». */
.evidencia { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; min-height: 64px; padding: 12px 16px; border-radius: var(--r-tarjeta); background: var(--papel); }
.evidencia + .evidencia { margin-top: 8px; }
.evidencia .txt { flex: 1 1 200px; min-width: 0; display: grid; gap: 2px; line-height: 1.3; }
.evidencia .txt b { font-size: var(--t-cuerpo); }
.evidencia .txt small { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.banda-renovar { display: grid; gap: 8px; padding: 18px; border-radius: var(--r-grande); background: var(--vino); color: var(--crema); }
.banda-renovar p { margin: 0; }
.banda-renovar .k { font-size: var(--t-apoyo); font-weight: 700; color: var(--oro-suave); }
.banda-renovar .n { font-family: var(--f-display); font-size: 28px; line-height: 1.1; }
.banda-renovar .para { font-size: var(--t-apoyo); font-weight: 600; line-height: 1.4; color: var(--crema-tenue); }
.banda-renovar[data-estado="vencida"] { background: var(--rojo); }
.banda-renovar .btn { background: var(--crema); color: var(--vino); }

/* D60 · el escalón: su nombre, «Ya cumples» o lo que falta, y sus requisitos (los renglones de la ronda 4). */
.escalon { display: grid; gap: 10px; }
.escalon .cab { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; }
.escalon .cab .txt { flex: 1 1 200px; min-width: 0; display: grid; gap: 2px; line-height: 1.25; }
.escalon .cab b { font-family: var(--f-display); font-weight: 500; font-size: var(--t-sub); color: var(--vino); }
.escalon .cab small { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.escalon .cab small.tuyo { font-weight: 700; color: var(--oro-tinta); }
.escalon[data-listo] .requisitos { box-shadow: inset 0 0 0 2px var(--verde-claro); }
.r-txt { flex: 1; min-width: 0; display: grid; gap: 2px; line-height: 1.3; }
.r-que { font-size: var(--t-cuerpo); font-weight: 700; }
.r-dice { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }

/* D61 · una vacante interna: la casa, el puesto, desde cuándo y cuántos lugares, si ya cumples, «Me interesa». */
.vacante { display: grid; gap: 12px; padding: 16px; border-radius: var(--r-tarjeta); background: var(--papel); }
.vacante + .vacante { margin-top: 10px; }
.vacante .cuerpo { display: grid; gap: 4px; color: inherit; text-decoration: none; }
.vacante p { margin: 0; }
.vacante .k { font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.vacante .n { font-family: var(--f-display); font-size: var(--t-sub); line-height: 1.1; color: var(--vino); }
.vacante .s { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.vacante .pill { justify-self: start; margin-top: 4px; }

/* D62 · la racha: el número, «turnos seguidos con lección», un punto por turno, y que no se pierde nada más. */
.racha { display: flex; align-items: center; gap: 14px; padding: 14px 16px; border-radius: var(--r-tarjeta); background: var(--papel); }
.racha .n { font-family: var(--f-display); font-weight: 500; font-size: 48px; line-height: 1; color: var(--vino); min-width: 56px; text-align: center; }
.racha .txt { flex: 1; min-width: 0; display: grid; gap: 6px; }
.racha .t { font-size: var(--t-cuerpo); font-weight: 700; }
.racha .puntos { display: flex; flex-wrap: wrap; gap: 5px; }
.racha .puntos i { width: 12px; height: 12px; border-radius: 50%; background: var(--oro); }
.racha small { font-size: var(--t-apoyo); font-weight: 600; line-height: 1.3; color: var(--gris); }

/* D63 · para oírla sin internet: la lección, su tamaño y un solo control (guardar · guardando · lista + quitar). */
.sin-internet { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; min-height: 64px; padding: 10px 16px; border-radius: var(--r-tarjeta); background: var(--papel); }
.sin-internet + .sin-internet { margin-top: 8px; }
.sin-internet .ic { display: grid; place-items: center; width: 40px; height: 40px; flex: none; border-radius: 12px; background: var(--crema); color: var(--vino); }
.sin-internet[data-estado="guardada"] .ic { background: var(--verde-claro); color: var(--verde-tinta); }
.sin-internet .ic .ico { width: 20px; height: 20px; }
.sin-internet .txt { flex: 1 1 160px; min-width: 0; display: grid; gap: 2px; line-height: 1.25; }
.sin-internet .txt b { font-size: var(--t-cuerpo); }
.sin-internet .txt small { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.sin-internet .acc { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.sin-internet .chip { min-height: var(--blanco); }

/* D64 · el editor del escalón (RH): el nombre, y lo que pide renglón por renglón (tipo · palabras · quitar), uno vacío para agregar. */
.editor-escalon fieldset { display: grid; gap: 8px; margin: 0; padding: 0; border: 0; min-width: 0; }
.editor-escalon legend { padding: 0; margin: 0 0 6px; font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.editor-escalon .fila-req { display: grid; grid-template-columns: minmax(0, 1fr); gap: 6px; padding: 10px 12px; border-radius: 14px; background: var(--papel); }
@media (min-width: 760px) { .editor-escalon .fila-req { grid-template-columns: 220px minmax(0, 1fr) auto; align-items: center; } }
.b-formulario .editor-escalon .quitar, .editor-escalon .quitar { display: flex; align-items: center; gap: 8px; min-height: var(--blanco); font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
/* «Quitar» is one 44 px target, like the consent line (ojo N151): the input covers the row, invisible; the kit draws its 20 px box. */
.editor-escalon .quitar { position: relative; }
.editor-escalon .quitar input { position: absolute; inset: 0; width: 100%; height: 100%; min-height: 0; margin: 0; padding: 0; border: 0; opacity: 0; cursor: pointer; }
.editor-escalon .quitar span::before { content: ""; display: inline-block; width: 20px; height: 20px; box-sizing: border-box; margin-right: 8px; vertical-align: -5px; border: 2px solid var(--gris); border-radius: 5px; background: var(--hoja); }
.editor-escalon .quitar input:checked + span::before { border-color: var(--vino); background: var(--vino) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='3.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12.5l4.5 4.5L19 7.5'/%3E%3C/svg%3E") center / 14px no-repeat; }
.editor-escalon .quitar input:focus-visible + span::before { outline: 2px solid var(--vino); outline-offset: 2px; }

/* D65 · lo que vence, casa por casa: la regla y su fecha, cuántos faltan en cada casa (verde cuando ya están todos). */
.vence-casas ul { display: grid; margin: 0; padding: 4px 16px; list-style: none; border-radius: var(--r-tarjeta); background: var(--papel); }
.vence-casas li { display: flex; justify-content: space-between; align-items: center; gap: 12px; min-height: 52px; padding: 8px 0; font-size: var(--t-cuerpo); }
.vence-casas li + li { border-top: 1px solid var(--linea); }
.vence-casas li span { font-size: var(--t-apoyo); font-weight: 700; color: var(--espera-tinta); }
.vence-casas li[data-listo] span { color: var(--verde-tinta); }
.vence-casas .note { margin: 0 0 10px; }
.vence-casas .section-head { display: grid; gap: 2px; justify-content: stretch; }

/* ---- D66–D73 · ronda 12 (2026-10-14): Muro, Beneficios y «Tu año». Lo que las héroes persona.muro.directorio.persona, .encuesta, .reto,
   .semana, persona.dinero.beneficios.pan.elegido, .credencial, persona.hoy.tiembla y persona.muro.ano(.compartir) dibujaban, con las reglas
   de la ronda: sólo fuentes, un beneficio cuando la casa lo define, ningún juicio sobre una persona, una tarjeta para compartir sin dinero y
   sin nadie más. ---- */

/* D66 · una persona del directorio: su foto si la quiso mostrar (si no, sus iniciales), puesto y casa, desde cuándo, lo que sabe. */
.tarjeta-cara { display: grid; gap: 10px; padding: 14px 16px; border-radius: var(--r-tarjeta); background: var(--papel); }
.tarjeta-cara + .tarjeta-cara { margin-top: 10px; }
.tarjeta-cara .cuerpo { display: flex; align-items: center; gap: 14px; color: inherit; text-decoration: none; }
.tarjeta-cara .cara { display: grid; place-items: center; width: 64px; height: 64px; flex: none; overflow: hidden; border-radius: 50%; background: var(--vino); color: var(--crema); font-weight: 700; font-size: 20px; }
.tarjeta-cara .cara img { width: 100%; height: 100%; object-fit: cover; }
.tarjeta-cara .txt { flex: 1; min-width: 0; display: grid; gap: 2px; line-height: 1.3; }
.tarjeta-cara .txt b { font-family: var(--f-display); font-weight: 500; font-size: var(--t-sub); color: var(--vino); }
.tarjeta-cara .txt small { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.tarjeta-cara .txt .sabe { color: var(--tinta); }

/* D67 · una encuesta: la pregunta en vino, para quién; las opciones (una elección) o los resultados con su barra y tu voto marcado. */
.encuesta { display: grid; gap: 12px; }
.encuesta .cab { display: grid; gap: 6px; padding: 18px; border-radius: var(--r-grande); background: var(--vino); color: var(--crema); }
.encuesta .cab p { margin: 0; }
.encuesta .cab .k { font-size: var(--t-apoyo); font-weight: 700; color: var(--oro-suave); }
.encuesta .cab .q { font-family: var(--f-display); font-size: 28px; line-height: 1.1; }
.encuesta .cab .para { font-size: var(--t-apoyo); font-weight: 600; color: var(--crema-tenue); }
.opciones-encuesta { display: grid; gap: 8px; }
.opciones-encuesta label { position: relative; display: flex; }
.opciones-encuesta input { position: absolute; width: 1px; height: 1px; margin: 0; padding: 0; border: 0; opacity: 0; }
.opciones-encuesta label span { display: flex; align-items: center; width: 100%; min-height: 56px; padding: 10px 16px; border: 2px solid transparent; border-radius: 14px; background: var(--papel); font-weight: 700; font-size: var(--t-cuerpo); cursor: pointer; transition: transform var(--d-1) var(--suave); }
.opciones-encuesta label:active span { transform: scale(.985); }
.opciones-encuesta input:checked + span { border-color: var(--vino); background: var(--hoja); color: var(--vino); }
.opciones-encuesta input:focus-visible + span { box-shadow: 0 0 0 3px var(--oro-claro); }
.resultados { display: grid; gap: 10px; margin: 0; padding: 14px 16px; list-style: none; border-radius: var(--r-tarjeta); background: var(--papel); }
.resultados li { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 4px 12px; align-items: center; }
.resultados .t { display: inline-flex; align-items: center; gap: 6px; font-size: var(--t-cuerpo); font-weight: 700; }
.resultados .t .ico { width: 18px; height: 18px; color: var(--vino); }
.resultados b { font-size: var(--t-cuerpo); font-variant-numeric: tabular-nums; }
.resultados .barra { grid-column: 1 / -1; width: 100%; height: 8px; }
.resultados .barra .fondo { fill: var(--papel-2); }
.resultados .barra .hecho { fill: var(--vino-claro); }
.resultados li[data-mia] .barra .hecho { fill: var(--vino); }
.resultados .total { display: block; font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.encuesta > .note { margin: 0; }

/* D68–D69 · el reto de la casa (de todos, nunca de una persona) y «Tu semana» (tus cuentas, sin juicio y sin dinero). */
:is(.reto, .tu-semana) { display: grid; gap: 8px; padding: 18px; border-radius: var(--r-grande); background: var(--ciruela); color: var(--crema); }
:is(.reto, .tu-semana) p { margin: 0; }
:is(.reto, .tu-semana) .k { font-size: var(--t-apoyo); font-weight: 700; color: var(--oro-suave); }
:is(.reto, .tu-semana) .n { font-family: var(--f-display); font-size: 28px; line-height: 1.1; }
.reto .juntos, .reto .dia { font-size: var(--t-apoyo); font-weight: 600; color: var(--crema-tenue); }
.reto .barra { width: 100%; height: 8px; }
.reto .barra .fondo { fill: var(--sobre-vino-velo); }
.reto .barra .hecho { fill: var(--oro); }
.tu-semana .cifras { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-top: 6px; }
.tu-semana .cifras > div { display: grid; gap: 2px; padding: 10px 12px; border-radius: 14px; background: var(--sobre-vino-velo); }
.tu-semana .cifras b { font-family: var(--f-display); font-weight: 500; font-size: 30px; line-height: 1; }
.tu-semana .cifras span { font-size: var(--t-apoyo); font-weight: 700; color: var(--crema-tenue); }

/* D70–D71 · el pase de barra (código grande, tu nombre corto, la casa y el día; tachado al usarlo) y la credencial (el QR, tu nombre). */
.pase, .credencial { display: grid; justify-items: center; gap: 8px; padding: 20px 18px; border-radius: var(--r-grande); background: var(--hoja); border: 2px dashed var(--oro); text-align: center; }
.pase p, .credencial p { margin: 0; }
.pase img { width: 120px; height: 120px; object-fit: cover; border-radius: 50%; }
.pase .que { font-family: var(--f-display); font-size: var(--t-sub); color: var(--vino); }
.pase .cod { font-weight: 700; font-size: 44px; letter-spacing: .1em; font-variant-numeric: tabular-nums; color: var(--tinta); }
.pase .quien, .pase .vale { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.pase[data-usado] { border-style: solid; border-color: var(--linea); opacity: .72; }
.pase[data-usado] .cod { text-decoration: line-through; }
.credencial { border-style: solid; border-color: var(--linea); }
.credencial .qr-cred { display: grid; place-items: center; width: 200px; height: 200px; padding: 10px; border-radius: 16px; background: #fff; color: var(--tinta); }
.credencial .qr-cred svg { width: 100%; height: 100%; }
.credencial .qr-cred > .ico { width: 64px; height: 64px; color: var(--gris-claro); }
.credencial .n { font-family: var(--f-display); font-size: var(--t-sub); color: var(--vino); }
.credencial .s, .credencial .da { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }

/* D72 · si tiembla: el punto de reunión primero, quién coordina, el próximo simulacro, qué hacer. */
.si-tiembla { display: grid; gap: 12px; padding: 16px; border-radius: var(--r-tarjeta); background: var(--papel); }
.si-tiembla p { margin: 0; }
.si-tiembla .k { font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.si-tiembla .punto { display: flex; gap: 10px; align-items: flex-start; padding: 12px 14px; border-radius: 14px; background: var(--vino); color: var(--crema); font-size: var(--t-cuerpo); font-weight: 700; line-height: 1.35; }
.si-tiembla .punto .ico { width: 22px; height: 22px; flex: none; color: var(--oro-suave); }
.si-tiembla .punto small { display: block; font-size: var(--t-apoyo); font-weight: 600; color: var(--crema-tenue); }
.si-tiembla dl { display: grid; margin: 0; }
.si-tiembla dl > div { display: flex; justify-content: space-between; gap: 12px; padding: 8px 0; font-size: var(--t-apoyo); }
.si-tiembla dl > div + div { border-top: 1px solid var(--linea); }
.si-tiembla dt { font-weight: 600; color: var(--gris); }
.si-tiembla dd { margin: 0; font-weight: 700; text-align: right; }
.si-tiembla .que-hacer { display: grid; gap: 6px; margin: 0; padding: 0 0 0 20px; font-size: var(--t-cuerpo); font-weight: 600; line-height: 1.4; }

/* D73 · tu año (la foto de la casa, un número grande, tus hechos) y su tarjeta para compartir (4:5, un hecho, sin dinero y sin nadie más). */
.tu-anio { overflow: hidden; border-radius: var(--r-grande); background: var(--ciruela); color: var(--crema); }
.tu-anio p { margin: 0; }
.tu-anio .foto { position: relative; aspect-ratio: 16 / 9; background: var(--foto-fondo); }
.tu-anio .foto img { width: 100%; height: 100%; object-fit: cover; }
.tu-anio .foto::after { content: ""; position: absolute; inset: 0; background: var(--velo-foto); }
.tu-anio .quien { position: absolute; left: 16px; bottom: 12px; z-index: 1; font-weight: 700; font-size: var(--t-cuerpo); }
.tu-anio .cuerpo { display: grid; gap: 8px; padding: 18px; }
.tu-anio .grande { font-family: var(--f-display); font-size: var(--t-numero); line-height: 1; color: var(--oro-vivo); }
.tu-anio .que { font-size: var(--t-cuerpo); font-weight: 600; color: var(--crema-tenue); }
.tu-anio .hechos { display: grid; gap: 10px; margin-top: 6px; }
.tu-anio .hechos > div { display: grid; gap: 2px; padding-top: 10px; border-top: 1px solid var(--sobre-vino-linea); }
.tu-anio .hechos b { font-family: var(--f-display); font-weight: 500; font-size: 26px; line-height: 1; }
.tu-anio .hechos span { font-size: var(--t-apoyo); font-weight: 600; color: var(--crema-tenue); }
.compartir { display: grid; gap: 10px; }
.compartir-anio { display: grid; align-content: space-between; gap: 12px; aspect-ratio: 4 / 5; margin: 0; padding: 24px; border-radius: var(--r-grande); background: var(--vino); color: var(--crema); }
.compartir-anio p { margin: 0; }
.compartir-anio .k { font-size: var(--t-cuerpo); font-weight: 700; color: var(--oro-suave); }
.compartir-anio .dato-anio { font-family: var(--f-display); font-size: 56px; line-height: 1; color: var(--crema); }
.compartir-anio .linea { font-size: 20px; font-weight: 600; line-height: 1.3; color: var(--crema-tenue); }
.compartir-anio .marca { display: inline-flex; align-items: center; gap: 8px; font-family: var(--f-display); font-size: 22px; }
.compartir-anio .marca .punto { width: 10px; height: 10px; border-radius: 50%; background: var(--oro-vivo); }
.compartir > .note { margin: 0; }

/* ---- Revisión de las rondas 8–10 (2026-10-14): lo que le tocó al kit ---- */
/* Inside the RH frame the page already has its gutter: a phone `.pad` there does not add a second one (/rh/accidentes, /rh/salidas, /rh/personas/alta
   at 390 drew 40 px from the edge). */
.rh-lienzo .pad { padding-left: 0; padding-right: 0; }
/* A state pill on a paper list (FilaRH): terracota-on-paper vanished («Aún no entra» read as bare text) — a hairline in its own ink keeps it a pill. */
.rh-filas .pill { box-shadow: inset 0 0 0 1px currentColor; }
/* The RH top bar under 960 px scrolls its five places: the right edge fades so the hidden ones read as «more». */
@media (max-width: 959.98px) { .rh-riel nav { -webkit-mask-image: linear-gradient(90deg, #000 85%, transparent); mask-image: linear-gradient(90deg, #000 85%, transparent); } }

/* ojo N146 (2026-10-14): a plain link inside a note («La carta viva» on Recetas, «Volver a la carta» on a dish) is a 44 px target. Vertical
   padding on an inline box grows its hit area, not the line: the note keeps its height and the link still wraps. */
.note a:not([class]) { padding-block: 12px; }

/* ---- Revisión final de las rondas 11–12 (2026-10-14): lo que le tocó al kit ---- */
/* A section title is never crushed by its side note. Since v2 the side note stays whole (no shrink, no wrap); when the title would get less than 40 % of the
   line, the side note now goes under it (La carta viva: «Festival de Otoño 2026» drew one word per line beside «Hasta el 2 de noviembre · 26 platillos»).
   With a short side note nothing moves: the title still takes the rest of the line. */
:root[data-kit="v2"] .section-head { flex-wrap: wrap; }
:root[data-kit="v2"] .section-head > h2 { flex: 1 1 40%; }
/* A section that opens (details > summary.section-head — La carta viva's cartas) is a 44 px target and says it opens: a chevron that turns. */
summary.section-head { min-height: var(--blanco); align-items: center; cursor: pointer; list-style: none; }
summary.section-head::-webkit-details-marker { display: none; }
summary.section-head::after { content: ""; flex: none; width: 8px; height: 8px; margin: 0 6px 4px 0; border: solid var(--gris); border-width: 0 2px 2px 0; transform: rotate(45deg); transition: transform .18s ease; }
details[open] > summary.section-head::after { transform: translateY(3px) rotate(225deg); }
/* RH: a list right after a section or a form keeps the section's air (Lo que vence, Quién firma qué and the audit visit: the list title sat
   0 px under it). */
.rh-lienzo :is(.section, form) + .rh-lista { margin-top: var(--e-seccion); }
/* D71: the credential's face — the person's own photo when they chose one, initials otherwise (the page drew it with an inline style). */
.credencial .cara { display: grid; place-items: center; width: 72px; height: 72px; overflow: hidden; border-radius: 50%; background: var(--vino); color: var(--crema); font-weight: 700; font-size: 22px; }
.credencial .cara img { width: 100%; height: 100%; object-fit: cover; }

/* ---- D74–D82 · ronda 13 (2026-10-14): Horarios y F3. Lo que las héroes jefa.equipo.horario, persona.tiempo.horario, persona.hoy.turno,
   persona.tiempo.cambiar, persona.tiempo.abiertos y persona.hoy.checklist.estacion dibujaban, con las reglas de la ronda: la semana la
   escribe la casa; una necesidad o un bono sólo con su fuente; nadie más en el turno de una persona; un aviso nunca detiene. ---- */
/* D74 · los días */
.semana-dias { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 6px; margin: 0 0 var(--e-4); }
.semana-dias .dia { position: relative; display: grid; justify-items: center; align-content: center; gap: 2px; min-height: 56px; border-radius: var(--r-chico); background: var(--papel); color: var(--tinta); text-decoration: none; font-variant-numeric: tabular-nums; }
.semana-dias .dia b { font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); line-height: 1; }
.semana-dias .dia span { font-size: 18px; font-weight: 700; line-height: 1; }
.semana-dias .dia[aria-current] { background: var(--vino); color: var(--crema); }
.semana-dias .dia[aria-current] b { color: var(--oro); }
.semana-dias .dia[data-aviso]::after { content: ""; position: absolute; top: 6px; right: 6px; width: 7px; height: 7px; border-radius: 50%; background: var(--espera-tinta); }
/* D75 · el día por estación */
.dia-estaciones .estaciones { padding: 0; overflow: hidden; }
.dia-estaciones .estacion { padding: 12px 14px; }
.dia-estaciones .estacion + .estacion { border-top: 1px solid var(--linea); }
.dia-estaciones .estacion .cab { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; margin: 0 0 8px; font-size: var(--t-apoyo); }
.dia-estaciones .estacion .cab span { color: var(--gris); font-weight: 600; }
.dia-estaciones .estacion .fuente { margin: -4px 0 8px; font-size: var(--t-nota); color: var(--gris); }
.dia-estaciones .turnos { display: flex; flex-wrap: wrap; gap: 6px; }
.turno-chip { display: inline-flex; align-items: center; gap: 6px; min-height: var(--blanco); padding: 0 14px; border-radius: var(--r-pastilla); background: var(--vino); color: var(--crema); font-size: var(--t-apoyo); font-weight: 700; text-decoration: none; font-variant-numeric: tabular-nums; }
.turno-chip.falta { background: transparent; border: 1.5px dashed var(--rojo); color: var(--rojo); }
.turno-chip.agregar { background: transparent; border: 1.5px solid var(--vino); color: var(--vino); }
.turno-chip .ico { width: 16px; height: 16px; }
/* D76 · lo que revisar */
.revisar-semana { margin: 0 0 var(--e-4); }
.revisar-semana .k { margin: 0 0 8px; font-size: var(--t-apoyo); font-weight: 700; color: var(--tinta); }
.revisar-semana .avisos { display: flex; flex-wrap: wrap; gap: 8px; margin: 0 0 8px; }
.aviso-semana { display: inline-flex; align-items: center; gap: 8px; min-height: var(--blanco); padding: 0 14px; border-radius: var(--r-pastilla); border: 1.5px solid var(--espera-tinta); background: var(--espera-claro); color: var(--espera-tinta); font-size: var(--t-apoyo); font-weight: 700; text-decoration: none; }
.aviso-semana .ico { width: 17px; height: 17px; flex: none; }
.revisar-semana.nada { display: flex; align-items: center; gap: 8px; font-size: var(--t-apoyo); font-weight: 700; color: var(--verde-tinta); }
.revisar-semana.nada .ico { width: 18px; height: 18px; }
/* D77 · editar un turno */
.editor-turno .quien { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; margin: 0; font-size: var(--t-cuerpo); }
.editor-turno .quien span { color: var(--gris); font-weight: 600; }
.editor-turno .horas-turno { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.editor-turno:has(input[name="tipo"][value="descanso"]:checked) :is(.horas-turno, .puesto-turno, .estacion-turno) { display: none; }
/* D78 · mi semana */
.mi-semana .planeadas { margin: 0 0 8px; font-size: var(--t-apoyo); font-weight: 700; color: var(--tinta); }
.mi-semana .marca-horas { display: grid; grid-template-columns: 1fr auto; align-items: center; gap: 10px; margin: 0 0 8px; }
.mi-semana .marca-horas .barra { display: block; width: 100%; height: 8px; background: none; border-radius: 4px; }
.mi-semana .marca-horas .fondo { fill: var(--papel-2); }
.mi-semana .marca-horas .hecho { fill: var(--vino); }
.mi-semana .marca-horas[data-pasa] .hecho { fill: var(--espera-tinta); }
.mi-semana .marca-horas .tope { font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); font-variant-numeric: tabular-nums; }
.mi-semana .dias-semana { margin-top: var(--e-3); padding: 0 16px; }
.mi-semana .dia-fila { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; padding: 14px 0; font-size: var(--t-apoyo); }
.mi-semana .dia-fila + .dia-fila { border-top: 1px solid var(--linea); }
.mi-semana .dia-fila span { font-weight: 600; color: var(--tinta); text-align: right; font-variant-numeric: tabular-nums; }
.mi-semana .dia-fila[data-hoy] b { color: var(--vino); }
.mi-semana .dia-fila[data-descanso] span { color: var(--gris); }
/* D79 · tu turno */
.turno-hoy .tiles { display: grid; grid-template-columns: repeat(auto-fit, minmax(96px, 1fr)); gap: 8px; }
.turno-hoy .tiles > div { display: grid; align-content: start; gap: 4px; padding: 12px; border-radius: var(--r-chico); background: var(--papel); min-width: 0; }
.turno-hoy .tiles b { font-family: var(--f-display); font-weight: 500; font-size: var(--t-sub); line-height: 1.05; color: var(--vino); overflow-wrap: anywhere; }
.turno-hoy .tiles span { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.turno-hoy .sales { margin: 10px 0 0; font-size: var(--t-apoyo); font-weight: 700; color: var(--tinta); }
.tarjeta-turno { display: block; padding: 16px; border-radius: var(--r-tarjeta); background: var(--papel); color: var(--tinta); text-decoration: none; }
.tarjeta-turno p { margin: 0; }
.tarjeta-turno .k { font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.tarjeta-turno .n { margin: 4px 0 2px; font-family: var(--f-display); font-weight: 500; font-size: var(--t-sub); line-height: 1.1; color: var(--vino); font-variant-numeric: tabular-nums; }
.tarjeta-turno .s { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
/* D80 · cambiar un turno */
.turno-cambio { padding: 14px 16px; border-radius: var(--r-tarjeta); background: var(--papel); }
.turno-cambio p { margin: 0; }
.turno-cambio .k { font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.turno-cambio .n { margin: 4px 0 2px; font-size: var(--t-cuerpo); font-weight: 700; color: var(--tinta); }
.turno-cambio .s { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.quien-cubre { display: flex; align-items: center; gap: 12px; padding: 14px 16px; border-radius: var(--r-tarjeta); background: var(--papel); }
.quien-cubre .ic { display: grid; place-items: center; width: 40px; height: 40px; flex: none; border-radius: 50%; background: var(--papel-2); color: var(--vino); }
.quien-cubre .ic .ico { width: 20px; height: 20px; }
.quien-cubre .txt { display: grid; gap: 2px; }
.quien-cubre b { font-size: var(--t-cuerpo); color: var(--tinta); }
.quien-cubre small { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.pasos-cambio { display: grid; gap: 0; margin: 0; padding: 4px 16px; list-style: none; border-radius: var(--r-tarjeta); background: var(--papel); }
.pasos-cambio li { display: grid; grid-template-columns: 14px 1fr; gap: 12px; align-items: start; padding: 10px 0; }
.pasos-cambio i { width: 14px; height: 14px; margin-top: 3px; border-radius: 50%; background: var(--papel-2); }
.pasos-cambio span { display: grid; gap: 2px; }
.pasos-cambio b { font-size: var(--t-apoyo); color: var(--gris); }
.pasos-cambio small { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.pasos-cambio [data-estado="hecho"] i { background: var(--verde); }
.pasos-cambio [data-estado="hecho"] b { color: var(--verde-tinta); }
.pasos-cambio [data-estado="ahora"] i { background: var(--vino); box-shadow: 0 0 0 4px var(--papel-2); }
.pasos-cambio [data-estado="ahora"] b { color: var(--vino); }
/* D81 · un turno por cubrir */
.turno-abierto { display: grid; justify-items: start; gap: 4px; padding: 16px; border-radius: var(--r-tarjeta); background: var(--papel); }
.turno-abierto p { margin: 0; }
.turno-abierto .n { font-size: var(--t-cuerpo); font-weight: 700; color: var(--tinta); }
.turno-abierto .s { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.turno-abierto .bono { font-size: var(--t-apoyo); font-weight: 700; color: var(--vino); }
.turno-abierto > :is(.btn, .chip, form, .pill) { margin-top: 8px; }
/* D82 · F3: la lista de una estación */
.lista-estacion .tareas { margin: 0; padding: 0 16px; list-style: none; }
.lista-estacion .tareas li { display: flex; align-items: center; justify-content: space-between; gap: 12px; min-height: var(--blanco); padding: 12px 0; }
.lista-estacion .tareas li + li { border-top: 1px solid var(--linea); }
.lista-estacion .tareas .txt { display: grid; gap: 2px; min-width: 0; }
.lista-estacion .tareas b { font-size: var(--t-apoyo); color: var(--tinta); }
.lista-estacion .tareas small { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.lista-estacion .tareas li > :is(.pill, .chip, form) { flex: none; }
/* the kit's reference pages: one column without an inline style */
.eq-cuerpo.kit-una-columna { grid-template-columns: minmax(0, 1fr); }
.quien-cubre small.quienes { color: var(--tinta); }

/* ---- D83–D85 · ronda 14 (2026-10-14): la trivia del turno, mi disponibilidad y el termómetro del equipo. Equipos y casas, nunca una
   persona; nada debajo de 5 respuestas; una casa contra sí misma la semana pasada; la disponibilidad es una nota, nunca asigna. ---- */
/* D83 · trivia (la tarjeta lleva las clases de la encuesta, D67) */
.trivia-ops { display: grid; gap: 8px; margin: 0; padding: 0; list-style: none; }
.trivia-ops li { display: flex; align-items: center; justify-content: space-between; gap: 12px; min-height: 56px; padding: 10px 16px; border-radius: 14px; background: var(--papel); font-size: var(--t-cuerpo); font-weight: 700; color: var(--tinta); }
.trivia-ops li[data-correcta] { box-shadow: inset 0 0 0 2px var(--verde); }
.trivia-ops .pill { flex: none; }
.encuesta.trivia .hecha { display: flex; align-items: center; gap: 8px; margin: 0; font-size: var(--t-cuerpo); font-weight: 700; color: var(--verde-tinta); }
.encuesta.trivia .hecha .ico { width: 20px; height: 20px; }
.trivia-equipos .equipos { margin: 0; padding: 0 16px; list-style: none; }
.trivia-equipos .equipos li { display: flex; align-items: center; gap: 12px; padding: 12px 0; }
.trivia-equipos .equipos li + li { border-top: 1px solid var(--linea); }
.trivia-equipos .letra { display: grid; place-items: center; width: 40px; height: 40px; flex: none; border-radius: 50%; background: var(--vino); color: var(--crema); font-weight: 700; font-size: var(--t-apoyo); }
.trivia-equipos .txt { display: grid; gap: 2px; flex: 1; min-width: 0; }
.trivia-equipos .txt b { font-size: var(--t-cuerpo); color: var(--tinta); }
.trivia-equipos .txt small { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.trivia-equipos .pct { flex: none; font-size: var(--t-cuerpo); font-weight: 700; color: var(--tinta); font-variant-numeric: tabular-nums; }
/* D84 · mi disponibilidad: cada casilla es la celda entera (44 px); «Sí» o «—» */
.disponibilidad .disp-semana { margin: 0; padding: 14px; border: 0; border-radius: var(--r-tarjeta); background: var(--papel); min-width: 0; }
.disponibilidad .disp-semana > legend { float: left; width: 100%; margin: 0 0 10px; padding: 0; font-family: var(--f-display); font-weight: 500; font-size: var(--t-sub); color: var(--vino); }
.disp-tabla { clear: both; display: grid; grid-template-columns: minmax(84px, 1fr) repeat(3, minmax(0, 1fr)); gap: 6px; align-items: center; }
.disp-col { font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); text-align: center; }
.disp-dia { font-size: var(--t-apoyo); font-weight: 700; color: var(--tinta); }
.disponibilidad label.disp-celda { position: relative; display: block; gap: 0; }
.disp-celda input { position: absolute; inset: 0; width: 100%; height: 100%; min-height: 0; margin: 0; padding: 0; border: 0; opacity: 0; cursor: pointer; }
.disp-celda span { display: grid; place-items: center; min-height: var(--blanco); border-radius: var(--r-chico); background: var(--papel-2); font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.disp-celda span::before { content: "—"; }
.disp-celda input:checked + span { background: var(--verde-claro); color: var(--verde-tinta); }
.disp-celda input:checked + span::before { content: "Sí"; }
.disp-celda input:focus-visible + span { box-shadow: 0 0 0 3px var(--oro-claro); }
.cada-ops { display: grid; gap: 8px; }
.cada-cuando .cada-ops label { position: relative; display: block; }
.cada-ops input { position: absolute; width: 1px; height: 1px; margin: 0; padding: 0; border: 0; opacity: 0; }
.cada-ops span { display: grid; gap: 2px; min-height: 56px; padding: 10px 16px; border: 2px solid transparent; border-radius: 14px; background: var(--papel); }
.cada-ops b { font-size: var(--t-cuerpo); color: var(--tinta); }
.cada-ops small { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.cada-ops input:checked + span { border-color: var(--vino); background: var(--hoja); }
.cada-ops input:focus-visible + span { box-shadow: 0 0 0 3px var(--oro-claro); }
.disp-nota { display: grid; gap: 2px; margin: 0; font-size: var(--t-apoyo); color: var(--tinta); }
.disp-nota span { font-weight: 600; }
.disp-nota .por-que { color: var(--gris); }
/* D85 · el termómetro: una barra de tres partes y su leyenda (con palabras, nunca sólo color) */
.termometro .termo { display: grid; gap: 10px; }
.termo-barra { display: block; width: 100%; height: 12px; }
.termo-barra .bien, .termo-leyenda [data-nivel="bien"] i { fill: var(--verde); background: var(--verde); }
.termo-barra .regular, .termo-leyenda [data-nivel="regular"] i { fill: var(--espera-tinta); background: var(--espera-tinta); }
.termo-barra .mal, .termo-leyenda [data-nivel="mal"] i { fill: var(--rojo); background: var(--rojo); }
.termo-leyenda { display: grid; gap: 6px; margin: 0; padding: 0; list-style: none; }
.termo-leyenda li { display: grid; grid-template-columns: 12px 1fr auto; align-items: center; gap: 10px; font-size: var(--t-apoyo); font-weight: 700; color: var(--tinta); }
.termo-leyenda i { width: 12px; height: 12px; border-radius: 3px; }
.termo-leyenda b { font-variant-numeric: tabular-nums; }
.termometro .termo .note { margin: 0; }
.termo-pocas { margin: 0; font-size: var(--t-apoyo); font-weight: 600; color: var(--azul-tinta); background: var(--azul-claro); }
.termo-temas-k { margin: var(--e-4) 0 8px; font-family: var(--f-display); font-weight: 500; font-size: var(--t-sub); color: var(--vino); }
.pill.tema { border: 1.5px solid var(--vino); background: transparent; color: var(--vino); }

/* ---- D86–D87 · ronda 14 (2026-10-14), en el marco de RH (1280 y 390): la visita de auditoría (pasa · no pasa · no aplica; foto y fecha
   sólo donde no pasa) y las gracias que propone la casa (una regla con su interruptor; una persona decide). ---- */
.seccion-auditoria { display: grid; gap: 4px; }
.seccion-auditoria > h3 { margin: 0 0 4px; font-family: var(--f-display); font-weight: 500; font-size: var(--t-sub); color: var(--vino); }
.punto-auditoria { display: grid; gap: 10px; margin: 0; padding: 12px 0; border: 0; min-width: 0; }
.punto-auditoria + .punto-auditoria { border-top: 1px solid var(--linea); }
.punto-auditoria > legend { float: left; width: 100%; display: grid; gap: 2px; margin: 0 0 10px; padding: 0; }
.punto-auditoria > legend b { font-size: var(--t-cuerpo); color: var(--tinta); }
.punto-auditoria > legend small { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.punto-auditoria .segmentado { clear: both; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 4px; padding: 4px; border-radius: var(--r-chico); background: var(--papel-2); }
.segmentado label { position: relative; display: block; }
.segmentado input { position: absolute; inset: 0; width: 100%; height: 100%; min-height: 0; margin: 0; padding: 0; border: 0; opacity: 0; cursor: pointer; }
.segmentado span { display: grid; place-items: center; min-height: var(--blanco); padding: 0 6px; border-radius: 9px; font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); text-align: center; }
.segmentado input:checked + span { background: var(--hoja); color: var(--vino); box-shadow: 0 1px 3px var(--gris-claro); }
.segmentado label:has(input[value="no_pasa"]:checked) span { color: var(--rojo); }
.segmentado input:focus-visible + span { box-shadow: 0 0 0 3px var(--oro-claro); }
.punto-auditoria .si-no-pasa { display: none; gap: 12px; }
.punto-auditoria:has(input[value="no_pasa"]:checked) .si-no-pasa { display: grid; }
@media (min-width: 960px) { .punto-auditoria .segmentado { max-width: 480px; } .punto-auditoria:has(input[value="no_pasa"]:checked) .si-no-pasa { grid-template-columns: 1fr 1fr; max-width: 720px; } .punto-auditoria .que-arreglar { grid-column: 1 / -1; } }
.regla-gracias { display: grid; gap: 6px; padding: 16px; border-radius: var(--r-tarjeta); background: var(--papel); }
.regla-gracias p { margin: 0; }
.regla-gracias .cuando { font-size: var(--t-cuerpo); color: var(--tinta); }
.regla-gracias .propone { font-size: var(--t-apoyo); color: var(--tinta); }
.regla-gracias .ejemplo { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.regla-gracias .sw { min-height: var(--blanco); padding: 4px 0 0; }
.regla-gracias div.sw[data-prendida] i { background: var(--verde); }
.regla-gracias div.sw[data-prendida] i::after { transform: translateX(22px); }
.gracias-propuesta { display: grid; gap: 6px; padding: 16px; border-radius: var(--r-tarjeta); background: var(--papel); }
.gracias-propuesta p { margin: 0; }
.gracias-propuesta .k { font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.gracias-propuesta .q { font-family: var(--f-display); font-weight: 500; font-size: var(--t-sub); line-height: 1.15; color: var(--vino); }
.gracias-propuesta .hecho { font-size: var(--t-apoyo); font-weight: 600; color: var(--tinta); }

/* ---- D88 · ronda 14 (2026-10-14): la línea de tiempo (persona.muro.historia) — hitos unidos por una línea; hecho ✓ en vino, el siguiente
   en oro, los que vienen como aro. ---- */
.linea-tiempo { display: grid; gap: 0; margin: 0; padding: 0; list-style: none; }
.linea-tiempo li { position: relative; display: grid; grid-template-columns: 28px 1fr; gap: 14px; align-items: start; padding: 0 0 18px; }
.linea-tiempo li:not(:last-child)::before { content: ""; position: absolute; left: 13px; top: 28px; bottom: 0; width: 2px; background: var(--papel-2); }
.linea-tiempo li[data-estado="hecho"]:not(:last-child)::before { background: var(--vino); }
.linea-tiempo i { position: relative; display: grid; place-items: center; width: 28px; height: 28px; border-radius: 50%; background: var(--hoja); box-shadow: inset 0 0 0 2px var(--papel-2); }
.linea-tiempo [data-estado="hecho"] i { background: var(--vino); color: var(--crema); box-shadow: none; }
.linea-tiempo [data-estado="hecho"] i .ico { width: 16px; height: 16px; }
.linea-tiempo [data-estado="siguiente"] i { background: var(--oro); box-shadow: 0 0 0 4px var(--oro-claro); }
.linea-tiempo span { display: grid; gap: 2px; padding-top: 3px; }
.linea-tiempo b { font-size: var(--t-cuerpo); color: var(--tinta); }
.linea-tiempo small { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.linea-tiempo [data-estado="falta"] b { color: var(--gris); }

/* ---- D89–D91 · ronda 16 (2026-10-14, «Cursos» R-A): el editor de una lección en la consola de RH (1280) y su vista previa en el teléfono
   (390). Jorge: «falta claridad en el proceso» — tres pasos con el actual encendido, el formulario en tres partes numeradas, y al lado el
   teléfono con las piezas reales de la lección. ---- */
.editor-leccion { display: grid; gap: var(--e-4); }
.editor-cab { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: 12px 24px; }
.editor-cab .titulo { display: grid; gap: 4px; min-width: 0; }
.editor-cab .titulo .date { margin: 0; }
.editor-cab .volver { justify-self: start; display: inline-flex; align-items: center; gap: 4px; min-height: var(--blanco); margin: -8px 0 0 -4px; padding: 0 4px; font-weight: 700; color: var(--vino); text-decoration: none; }
.editor-cab .volver .ico { width: 18px; height: 18px; }
.editor-cab .volver:focus-visible { outline: 3px solid var(--oro-claro); outline-offset: 2px; border-radius: 8px; }
@media (hover: hover) { .editor-cab .volver:hover { text-decoration: underline; text-underline-offset: 3px; } }
.editor-cab h2 { margin: 0; font-family: var(--f-display); font-weight: 500; font-size: var(--t-titulo); line-height: 1.05; color: var(--vino); }
.editor-cab .estado { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 12px; margin: 4px 0 0; font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.editor-cab .botones { display: flex; flex-wrap: wrap; gap: 10px; margin-left: auto; }
.editor-cab .botones .btn { display: inline-flex; width: auto; min-height: var(--blanco); }
/* D89 · el proceso */
.proceso-leccion { display: grid; gap: 8px; padding: 14px 16px; border-radius: var(--r-tarjeta); background: var(--papel); }
.proceso-leccion ol { display: grid; gap: 10px; margin: 0; padding: 0; list-style: none; }
.proceso-leccion li { display: grid; grid-template-columns: 30px 1fr; align-items: center; gap: 10px; font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.proceso-leccion li i { display: grid; place-items: center; width: 30px; height: 30px; border-radius: 50%; background: var(--papel-2); font-style: normal; font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.proceso-leccion li[data-estado="ahora"] { color: var(--vino); }
.proceso-leccion li[data-estado="ahora"] i { background: var(--vino); color: var(--crema); }
.proceso-leccion li[data-estado="hecho"] { color: var(--verde-tinta); }
.proceso-leccion li[data-estado="hecho"] i { background: var(--verde-claro); color: var(--verde-tinta); }
.proceso-leccion .note { margin: 0; }
@media (min-width: 960px) { .proceso-leccion ol { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
/* D90 · el formulario y la vista, lado a lado en la computadora */
.editor-cols { display: grid; gap: var(--e-seccion); align-items: start; }
/* lado a lado según el ancho del propio editor (no de la ventana): en la consola de RH (≈1040 px) van juntos; en la app de la persona en una
   computadora (760 px de contenido) el formulario va solo y el teléfono va en la columna de contexto de Marco. */
.editor-leccion { container-type: inline-size; }
@container (min-width: 900px) { .editor-cols:has(> .editor-vista) { grid-template-columns: minmax(0, 1fr) 430px; gap: 32px; } .editor-vista { position: sticky; top: 24px; } }
.editor-form { display: grid; gap: var(--e-4); }
.bloque-editor { display: grid; gap: 12px; margin: 0; padding: 18px; border: 0; border-radius: var(--r-tarjeta); background: var(--papel); min-width: 0; }
.bloque-editor > legend { position: absolute; top: 18px; left: 18px; right: 18px; display: block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; margin: 0; padding: 0; font-family: var(--f-display); font-weight: 500; font-size: var(--t-sub); color: var(--vino); }
.bloque-editor > legend i { display: inline-grid; vertical-align: middle; margin-right: 10px; place-items: center; width: 30px; height: 30px; border-radius: 50%; background: var(--vino); color: var(--crema); font-family: var(--f-texto); font-style: normal; font-size: var(--t-apoyo); font-weight: 700; }
.bloque-editor > legend + * { clear: both; }
.editor-form textarea[name="cuerpo"] { min-height: 320px; line-height: 1.5; }
.formatos { display: grid; gap: 6px; }
.formatos p { margin: 0; font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.formatos ul { display: flex; flex-wrap: wrap; gap: 6px 14px; margin: 0; padding: 0; list-style: none; }
.formatos li { display: inline-flex; align-items: baseline; gap: 6px; font-size: var(--t-apoyo); color: var(--gris); }
.formatos code { padding: 1px 6px; border-radius: 6px; background: var(--papel-2); font: 600 var(--t-apoyo)/1.4 ui-monospace, "SFMono-Regular", Menlo, monospace; color: var(--tinta); }
.opciones-editor { display: grid; gap: 8px; }
.opcion-editor { display: grid; grid-template-columns: 32px minmax(0, 1fr) auto; align-items: center; gap: 10px; }
.opcion-editor .letra { display: grid; place-items: center; width: 32px; height: 32px; border-radius: 50%; background: var(--papel-2); font-weight: 700; color: var(--vino); }
.opcion-editor .correcta { position: relative; display: inline-flex; }
.opcion-editor .correcta input { position: absolute; inset: 0; width: 100%; height: 100%; min-height: 0; margin: 0; padding: 0; border: 0; opacity: 0; cursor: pointer; }
.opcion-editor .correcta span { display: inline-flex; align-items: center; min-height: var(--blanco); padding: 0 14px; border-radius: var(--r-pastilla); border: 1.5px solid var(--linea); font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.opcion-editor .correcta input:checked + span { border-color: var(--verde-tinta); background: var(--verde-claro); color: var(--verde-tinta); }
.opcion-editor .correcta input:focus-visible + span { box-shadow: 0 0 0 3px var(--oro-claro); }
.opcion-editor:has(.correcta input:checked) .letra { background: var(--verde-claro); color: var(--verde-tinta); }
/* la revisión del diseño (ronda 18): en el editor angosto (el teléfono de la jefa, 390) «Correcta» va bajo su respuesta y la respuesta toma el ancho */
@container (max-width: 479.98px) { .opcion-editor { grid-template-columns: 32px minmax(0, 1fr); row-gap: 6px; } .opcion-editor .correcta { grid-column: 2; justify-self: start; } }
.editor-vista { display: grid; gap: 6px; justify-items: center; }
.editor-vista > .k { margin: 0; font-size: var(--t-apoyo); font-weight: 700; color: var(--tinta); }
.editor-vista > .note { margin: 0 0 6px; text-align: center; }
/* D91 · el teléfono de la vista previa */
.vista-telefono { width: 414px; max-width: 100%; padding: 12px; border-radius: 48px; background: var(--tinta); box-shadow: var(--sombra-flota); }
.pantalla-telefono { width: 390px; max-width: 100%; height: 720px; overflow-y: auto; overscroll-behavior: contain; padding: 18px 0 24px; border-radius: 36px; background: var(--crema); color: var(--tinta); }
@media (max-width: 959.98px) { .vista-telefono { width: 100%; } .pantalla-telefono { width: 100%; height: 640px; } }
/* ronda 18, la tercera lectura de la historia: la pantalla se recorre, pero nada lo decía — un riel delgado siempre a la vista y una sombra
   abajo que dice «hay más» (pegada al borde mientras hay más; al final cae sobre el relleno de abajo, no sobre la lección) */
.pantalla-telefono { scrollbar-width: thin; scrollbar-color: var(--gris-claro) transparent; }
.pantalla-telefono::-webkit-scrollbar { width: 6px; }
.pantalla-telefono::-webkit-scrollbar-thumb { border-radius: 3px; background: var(--gris-claro); }
.pantalla-telefono::after { content: ""; position: sticky; bottom: 0; display: block; height: 40px; margin: 0 0 -24px; pointer-events: none;
  background: linear-gradient(180deg, color-mix(in srgb, var(--tinta) 0%, transparent), color-mix(in srgb, var(--tinta) 16%, transparent)); }

/* ---- D92 · ronda 16 (2026-10-14, «Cursos» R-B): la tarjeta de un curso — portada, nombre, dónde va en una palabra con su fecha, «2 de 5»
   con una barra delgada (nunca un porcentaje) y el verbo de su único enlace. Siempre con la portada a la izquierda: una columna en el
   teléfono, columnas desde 720 px. ---- */
.cursos { display: grid; gap: 12px; margin: 0; padding: 0; list-style: none; }
.cursos > li { display: grid; min-width: 0; }
.curso { display: flex; gap: 14px; min-height: var(--blanco); padding: 12px; border-radius: var(--r-tarjeta); background: var(--papel); color: var(--tinta); text-decoration: none; }
.curso .portada { flex: none; display: grid; place-items: center; width: 84px; height: 84px; overflow: hidden; border-radius: var(--r-chico); background: var(--papel-2); color: var(--vino); }
.curso .portada img { display: block; width: 100%; height: 100%; object-fit: cover; }
.curso .portada .ico { width: 34px; height: 34px; }
.curso .portada.sin-foto { background: var(--vino); color: var(--crema); } /* sin portada, el mismo bloque en vino (como la lección sin foto) */
.curso .cuerpo { flex: 1; display: flex; flex-direction: column; gap: 8px; min-width: 0; }
.curso .nombre { font-size: 18px; font-weight: 700; line-height: 1.2; overflow-wrap: anywhere; }
.curso .chips { display: flex; flex-wrap: wrap; gap: 6px; }
/* sobre el papel de la tarjeta los tintes claros no se ven: la pastilla va en crema, con su punto del tono (UBITS: «● Vencida 13.07») */
:is(.curso, .persona-curso) .pill { background: var(--crema); }
:is(.curso, .persona-curso) .pill:not(.gris)::before { content: ""; flex: none; width: 8px; height: 8px; border-radius: 50%; background: currentColor; }
.curso .cuanto { display: grid; gap: 6px; font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
:is(.curso, .cabeza-curso) progress { -webkit-appearance: none; appearance: none; display: block; width: 100%; height: 6px; border: 0; border-radius: 3px; background: var(--linea); color: var(--vino); overflow: hidden; }
:is(.curso, .cabeza-curso) progress::-webkit-progress-bar { background: var(--linea); border-radius: 3px; }
:is(.curso, .cabeza-curso) progress::-webkit-progress-value { background: var(--vino); border-radius: 3px; }
:is(.curso, .cabeza-curso) progress::-moz-progress-bar { background: var(--vino); border-radius: 3px; }
.curso .verbo { display: inline-flex; align-items: center; gap: 4px; margin-top: auto; font-weight: 700; color: var(--vino); }
.curso .verbo .ico { width: 18px; height: 18px; }
.curso:focus-visible { outline: 3px solid var(--oro-claro); outline-offset: 2px; }
@media (hover: hover) { .curso:hover .verbo { text-decoration: underline; text-underline-offset: 3px; } }
/* desde 720 px, columnas de la misma tarjeta (portada a la izquierda): sin portadas — hoy ningún curso tiene — una cuadrícula de portadas
   arriba era un muro de bloques en vino (medido en /mi/aprender a 1280, 2026-10-14). */
@media (min-width: 720px) {
  .cursos { grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 14px; }
  .cursos .curso .portada { width: 96px; height: 96px; }
}

/* ---- D93–D94 · ronda 16 (2026-10-14, «Cursos» R-B): los cuatro pasos del creador de un curso (Qué · Lecciones · En tu teléfono ·
   Publicar), «Llega a N personas» y la matriz de seguimiento de RH (persona × lección). ---- */
/* the strip measures ITSELF (a container), not the window: the person shell's 760 px column on a computer is narrow like a tablet */
.pasos-curso { container-type: inline-size; margin-bottom: 14px; } /* aire debajo: lo hecho y lo que sigue (HechoYSigue) no se le pega */
.pasos-curso ol { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; margin: 0; padding: 0; list-style: none; }
@container (min-width: 720px) { .pasos-curso ol { grid-template-columns: none; grid-auto-flow: column; grid-auto-columns: minmax(0, 1fr); } }
.pasos-curso li { display: grid; min-width: 0; }
.pasos-curso .paso { display: grid; grid-template-columns: 30px minmax(0, 1fr); align-items: start; gap: 10px; min-height: var(--blanco); padding: 12px 14px; border-radius: var(--r-chico); background: var(--papel); color: var(--gris); text-decoration: none; box-shadow: inset 0 -3px 0 transparent; }
.pasos-curso .paso > i { display: grid; place-items: center; width: 30px; height: 30px; border-radius: 50%; background: var(--papel-2); font-style: normal; font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.pasos-curso .paso > i .ico { width: 18px; height: 18px; stroke-width: 2.4; }
.pasos-curso .tx { display: grid; gap: 2px; min-width: 0; padding-top: 3px; }
.pasos-curso .tx b { font-size: var(--t-cuerpo); line-height: 1.25; }
.pasos-curso .tx small { font-size: var(--t-apoyo); font-weight: 600; line-height: 1.3; color: var(--gris); overflow-wrap: anywhere; }
.pasos-curso li[data-estado="ahora"] .paso { color: var(--vino); box-shadow: inset 0 -3px 0 var(--vino); }
.pasos-curso li[data-estado="ahora"] .paso > i { background: var(--vino); color: var(--crema); }
.pasos-curso li[data-estado="hecho"] .paso { color: var(--verde-tinta); }
.pasos-curso li[data-estado="hecho"] .paso > i { background: var(--verde-claro); color: var(--verde-tinta); }
.pasos-curso a.paso:focus-visible { outline: 3px solid var(--oro-claro); outline-offset: 2px; }
@media (hover: hover) { .pasos-curso a.paso:hover b { text-decoration: underline; text-underline-offset: 3px; } }
/* D94 · la matriz */
.matriz-seguimiento { display: grid; gap: 14px; }
.matriz-seguimiento .section-head { flex-wrap: wrap; gap: 10px 16px; }
/* el botón de descarga vive en la cabeza: deshace lo que la cabeza le pone a sus enlaces (sin relleno, margen negativo) */
.matriz-seguimiento .section-head a.btn { display: inline-flex; width: auto; min-height: var(--blanco); margin-block: 0; padding: 0 18px; border: 1.5px solid var(--vino); background: transparent; }
@media (max-width: 719.98px) { .matriz th:first-child { min-width: 150px; } :root .matriz-seguimiento .section-head > h2 { flex: 1 1 100%; } } /* el botón, bajo el título (gana a la regla v2 de 40 %) */
.matriz-lecciones { display: grid; gap: 6px 20px; margin: 0; padding: 0; list-style: none; }
@media (min-width: 960px) { .matriz-lecciones { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.matriz-lecciones li { display: grid; grid-template-columns: 28px minmax(0, 1fr) auto; align-items: baseline; gap: 8px; font-size: var(--t-apoyo); }
.matriz-lecciones b { display: grid; place-items: center; width: 28px; height: 28px; border-radius: 50%; background: var(--papel-2); color: var(--vino); }
.matriz-lecciones small { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); white-space: nowrap; }
.matriz-leyenda { display: flex; flex-wrap: wrap; gap: 6px 18px; margin: 0; padding: 0; list-style: none; font-size: var(--t-apoyo); color: var(--gris); }
.matriz-leyenda li { display: inline-flex; align-items: center; gap: 6px; }
.matriz-seguimiento :is(.matriz-leyenda, .matriz) [data-estado="hecha"] .ico,
.matriz-leyenda li[data-estado="hecha"] .ico { color: var(--verde); }
.matriz-seguimiento .ico { width: 20px; height: 20px; stroke-width: 2.4; flex: none; }
.matriz-leyenda li[data-estado="vista"] .ico, .matriz td[data-estado="vista"] .ico { color: var(--azul); }
.matriz .raya, .matriz-leyenda .raya { color: var(--gris); font-weight: 700; }
.matriz-marco { overflow-x: auto; border-radius: var(--r-tarjeta); background: var(--papel); }
.matriz-marco:focus-visible { outline: 3px solid var(--oro-claro); outline-offset: 2px; }
.matriz { width: 100%; border-collapse: separate; border-spacing: 0; font-size: var(--t-cuerpo); }
.matriz th, .matriz td { padding: 10px 12px; border-bottom: 1px solid var(--linea); text-align: center; vertical-align: middle; }
.matriz tbody tr:last-child > * { border-bottom: 0; }
.matriz thead th { font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); white-space: nowrap; }
.matriz thead th.n span[aria-hidden] { display: inline-grid; place-items: center; width: 28px; height: 28px; border-radius: 50%; background: var(--papel-2); color: var(--vino); }
.matriz th:first-child { position: sticky; left: 0; z-index: 1; min-width: 200px; max-width: 260px; background: var(--papel); text-align: left; box-shadow: inset -1px 0 0 var(--linea); }
.matriz tbody th { display: table-cell; font-weight: 500; }
.matriz tbody th b { display: block; font-weight: 700; color: var(--tinta); }
.matriz tbody th small { display: block; font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.matriz td { min-width: 76px; }
.matriz td > span[aria-hidden] { display: inline-flex; flex-direction: column; align-items: center; gap: 2px; }
.matriz td small { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); white-space: nowrap; }
.matriz td.como-va { min-width: 180px; text-align: left; }
.matriz td.como-va > span:first-child { display: block; margin-bottom: 4px; font-weight: 700; color: var(--tinta); }
.matriz td.como-va .pill { background: var(--crema); }
.matriz td.como-va .pill:not(.gris)::before { content: ""; flex: none; width: 8px; height: 8px; border-radius: 50%; background: currentColor; }
.matriz-seguimiento .sr { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
.matriz-seguimiento td, .matriz-seguimiento th { position: relative; }
.matriz-seguimiento th:first-child { position: sticky; }
.matriz-vacia { margin: 0; padding: 18px; font-weight: 600; color: var(--gris); }

/* ---- R-C · ronda 16 (2026-10-14): lo que ve la persona — la tarjeta «Hoy» con su curso, la página de un curso (cabeza, lecciones con «Te
   toca», la constancia al final, el botón que se queda a la vista) y las etiquetas bajo el título de Aprender. ---- */
.hero.lesson .pill { display: flex; width: fit-content; margin: -4px 0 12px; background: var(--crema); }
.hero.lesson .pill:not(.gris)::before { content: ""; flex: none; width: 8px; height: 8px; border-radius: 50%; background: currentColor; }
.cabeza-curso { display: grid; gap: 10px; }
.cabeza-curso .portada { overflow: hidden; height: 220px; border-radius: var(--r-grande); background: var(--foto-fondo); }
.cabeza-curso .portada img { display: block; width: 100%; height: 100%; object-fit: cover; }
.cabeza-curso .portada.sin-foto { display: grid; place-items: center; height: 112px; background: var(--vino); color: var(--crema); }
.cabeza-curso .portada.sin-foto .ico { width: 40px; height: 40px; }
.cabeza-curso .title { margin: 6px 0 0; }
.cabeza-curso .por-que { margin: 0; font-size: var(--t-cuerpo); line-height: 1.45; }
.cabeza-curso .chips { display: flex; flex-wrap: wrap; gap: 6px; margin: 0; }
.cabeza-curso .cuanto { display: grid; gap: 6px; margin: 0; font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.cabeza-curso .note { margin: 0; }
.lecciones-curso { margin-top: var(--e-seccion); }
.al-terminar { display: flex; align-items: center; gap: 10px; margin: 18px 0 0; padding: 14px 16px; border-radius: var(--r-tarjeta); background: var(--papel); font-weight: 700; color: var(--vino); }
.al-terminar .ico { flex: none; width: 24px; height: 24px; }
.boton-fijo { position: sticky; z-index: 4; bottom: calc(var(--abajo, env(safe-area-inset-bottom, 0px)) + 12px); margin-top: 22px; }
.eq-app:has(> .eq-pestanas) .boton-fijo { bottom: calc(var(--abajo, env(safe-area-inset-bottom, 0px)) + var(--alto-pestanas) + 12px); }
@media (min-width: 900px) { .eq-app:has(> .eq-pestanas) .boton-fijo { bottom: 24px; } }
.boton-fijo .btn { box-shadow: var(--sombra-flota); }
.etiquetas { grid-auto-columns: auto; } /* cada etiqueta a su medida y el resto repartido: «Mis cursos» cabe en un renglón a 390 */
.etiquetas a { padding-inline: 8px; white-space: nowrap; }

/* ---- R-D · ronda 16 (2026-10-14): la jefa — una persona de su casa en un curso, con «Recordar» (o «Le recordaste hoy»). ---- */
/* una rejilla: iniciales · nombre y puesto · «Recordar»; debajo, a todo lo ancho, su palabra con fecha y «2 de 4» — así un chip largo y el
   botón no compiten por el mismo renglón a 390 */
.persona-curso { display: grid; grid-template-columns: 40px minmax(0, 1fr) auto; align-items: center; column-gap: 12px; row-gap: 4px; min-height: 64px; padding: 10px 0; }
.persona-curso .av { grid-row: span 3; align-self: start; }
.persona-curso .txt { grid-column: 2; }
.persona-curso form { grid-column: 3; grid-row: 1; }
.persona-curso :is(.como-va, .recordado) { grid-column: 2 / -1; }
.persona-curso + .persona-curso { border-top: 1px solid var(--linea); }
.persona-curso .av { display: grid; place-items: center; flex: none; width: 40px; height: 40px; border-radius: 50%; background: var(--papel-2); color: var(--vino); font-weight: 700; font-size: 14px; }
.persona-curso .txt { display: grid; gap: 2px; min-width: 0; line-height: 1.3; }
.persona-curso .txt small { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.persona-curso .como-va { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.persona-curso form { margin: 0; }
.persona-curso form .btn { width: auto; min-height: var(--blanco); padding: 0 16px; }
.persona-curso .como-va .pill { white-space: nowrap; }
.persona-curso .recordado { display: inline-flex; align-items: center; gap: 6px; font-size: var(--t-apoyo); font-weight: 700; line-height: 1.2; color: var(--verde-tinta); }
.persona-curso .recordado .ico { flex: none; width: 18px; height: 18px; }
.kit-760 { display: grid; gap: 26px; max-width: 760px; }
.kit-300 { max-width: 300px; }


/* ---- D95–D97 · ronda 16 (2026-10-14, «Cursos» R-E, «Borrador desde la fuente»): las tres maneras de empezar un curso, el diálogo para
   subir un documento de la casa, y cada lección del borrador con la línea del documento de donde sale (o quién la escribió); sin esa
   línea la tarjeta lo dice con palabras y con su marca, y el borrador no se envía. Sólo transform y opacity se mueven. ---- */
:is(.como-empezar, .desde-documento) > h2 { margin: 0; font: 500 var(--t-seccion, 24px)/1.05 var(--f-display); color: var(--vino); }
/* D95 · las tres maneras: apiladas en el teléfono (el dibujo a la izquierda), una fila de tres desde 720 px */
.como-empezar { display: grid; gap: 12px; }
.como-empezar ul { display: grid; gap: 10px; margin: 0; padding: 0; list-style: none; }
.como-empezar li { display: grid; min-width: 0; }
.manera { display: grid; grid-template-columns: 44px minmax(0, 1fr); align-items: start; gap: 2px 14px; min-height: var(--blanco); padding: 14px 16px; border: 2px solid transparent; border-radius: var(--r-tarjeta);
  background: var(--papel); color: var(--tinta); text-decoration: none; transition: transform var(--d-1) var(--suave); }
.manera .ico-caja { grid-row: span 2; display: grid; place-items: center; width: 44px; height: 44px; border-radius: 50%; background: var(--crema); color: var(--vino); }
.manera .ico-caja .ico { width: 22px; height: 22px; }
.manera b { padding-top: 2px; font-size: 18px; line-height: 1.25; color: var(--vino); }
.manera small { font-size: var(--t-apoyo); font-weight: 600; line-height: 1.35; color: var(--gris); }
a.manera:active { transform: scale(.985); }
a.manera:focus-visible { outline: 3px solid var(--oro-claro); outline-offset: 2px; }
@media (hover: hover) { a.manera:hover b { text-decoration: underline; text-underline-offset: 3px; } }
.manera[aria-current="true"] { border-color: var(--vino); background: var(--hoja); }
.manera[aria-current="true"] .ico-caja { background: var(--vino); color: var(--crema); }
.manera[aria-disabled="true"] b { color: var(--gris); }
.manera[aria-disabled="true"] .ico-caja { background: var(--papel-2); color: var(--gris); }
@media (min-width: 720px) {
  .como-empezar ul { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; }
  .manera { grid-template-columns: none; align-content: start; gap: 6px; padding: 18px; }
  .manera .ico-caja { grid-row: auto; margin-bottom: 6px; }
}
/* D96 · subir el documento: la zona es el selector (soltar un archivo encima funciona sin JS: el input la cubre) */
.desde-documento { display: grid; gap: 14px; }
.desde-documento > .lead { margin: 0; font-size: var(--t-cuerpo); line-height: 1.45; }
.zona-documento { position: relative; display: grid; justify-items: center; gap: 8px; padding: 26px 18px; border: 2px dashed var(--vino-claro); border-radius: var(--r-tarjeta); background: var(--hoja); color: var(--tinta); text-align: center; }
.b-formulario label.zona-documento { font-size: var(--t-cuerpo); color: var(--tinta); }
.zona-documento > .ico { width: 34px; height: 34px; color: var(--vino); }
.zona-documento b { font-size: 18px; line-height: 1.3; }
.zona-documento .archivo { overflow-wrap: anywhere; }
.zona-documento .como { display: inline-flex; align-items: center; min-height: var(--blanco); padding: 0 18px; border: 1.5px solid var(--vino); border-radius: var(--r-pastilla); font-weight: 700; color: var(--vino); }
.zona-documento small { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.b-formulario .zona-documento input[type="file"] { position: absolute; inset: 0; width: 100%; height: 100%; min-height: 0; margin: 0; padding: 0; border: 0; opacity: 0; cursor: pointer; }
.zona-documento:has(input:focus-visible) { outline: 3px solid var(--oro-claro); outline-offset: 2px; }
.zona-documento:hover, .zona-documento:has(input:active) { border-color: var(--vino); }
.zona-documento.con-archivo { border-style: solid; border-color: var(--verde); }
.zona-documento.con-archivo > .ico { color: var(--verde-tinta); }
.zona-documento .en-tel { display: none; }
@media (hover: none) and (pointer: coarse) { .zona-documento .en-pc { display: none; } .zona-documento .en-tel { display: inline; } }
details.pegar-texto > summary { display: inline-flex; align-items: center; gap: 8px; min-height: var(--blanco); font-size: var(--t-apoyo); font-weight: 700; color: var(--vino); cursor: pointer; list-style: none; }
details.pegar-texto > summary::-webkit-details-marker { display: none; }
details.pegar-texto > summary::after { content: ""; width: 7px; height: 7px; border-right: 2px solid currentColor; border-bottom: 2px solid currentColor; transform: translateY(-2px) rotate(45deg); }
details.pegar-texto[open] > summary::after { transform: translateY(2px) rotate(-135deg); }
.solo-casa { display: flex; align-items: flex-start; gap: 10px; margin: 0; padding: 12px 14px; border-radius: var(--r-chico); background: var(--papel); font-size: var(--t-apoyo); font-weight: 700; line-height: 1.4; color: var(--tinta); }
.solo-casa .ico { flex: none; width: 20px; height: 20px; margin-top: 1px; color: var(--vino); }
.desde-documento .quedan { margin: -4px 0 0; text-align: center; }
@media (min-width: 720px) { .desde-documento .b-formulario > .btn { justify-self: start; width: auto; padding-inline: 28px; } .desde-documento .quedan { text-align: left; } }
/* leyendo: el nombre, la espera dicha y la forma de las tarjetas que vienen; nunca una ruedita (kit v2 · 11) */
.leyendo-documento { display: grid; gap: 10px; }
.leyendo-documento .que { display: flex; align-items: center; gap: 10px; margin: 0; font-size: 18px; overflow-wrap: anywhere; }
.leyendo-documento .que .ico { flex: none; width: 24px; height: 24px; color: var(--vino); }
.leyendo-documento .note { margin: 0; }
.barra-leyendo { position: relative; display: block; height: 6px; overflow: hidden; border-radius: 3px; background: var(--linea); }
.barra-leyendo::after { content: ""; position: absolute; inset: 0 auto 0 0; width: 38%; border-radius: 3px; background: var(--vino); transform: translateX(-100%); animation: borrador-lee 1.6s var(--suave) infinite; }
@keyframes borrador-lee { to { transform: translateX(270%); } }
.huesos { display: grid; gap: 12px; margin-top: 8px; }
.huesos i { display: block; height: 118px; border-radius: var(--r-tarjeta); background: var(--papel); animation: borrador-respira 1.1s var(--suave) infinite alternate; }
.huesos i:nth-child(2) { animation-delay: .18s; } .huesos i:nth-child(3) { animation-delay: .36s; }
@keyframes borrador-respira { from { opacity: .5; } to { opacity: 1; } }
@media (prefers-reduced-motion: reduce) { .barra-leyendo::after, .huesos i { animation: none; } .barra-leyendo::after { transform: none; } }
/* D97 · una lección del borrador */
.lista-borrador { display: grid; gap: 12px; }
.leccion-borrador { display: grid; gap: 12px; min-width: 0; padding: 16px; border: 2px solid transparent; border-radius: var(--r-tarjeta); background: var(--papel); }
.leccion-borrador[data-estado="sin_linea"] { border-color: var(--espera); }
.leccion-borrador .cab { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; }
.leccion-borrador .cab .n { font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.leccion-borrador .cab .pill { background: var(--crema); }
.leccion-borrador .cab .pill .ico { flex: none; width: 16px; height: 16px; stroke-width: 2.4; }
.leccion-borrador .cab h3 { flex: 1 1 100%; margin: 0; font-size: 18px; font-weight: 700; line-height: 1.25; color: var(--tinta); overflow-wrap: anywhere; }
.leccion-borrador .extracto { display: -webkit-box; margin: 0; overflow: hidden; -webkit-line-clamp: 3; line-clamp: 3; -webkit-box-orient: vertical; font-size: var(--t-cuerpo); line-height: 1.45; }
/* la fuente, aparte: la línea del documento entre comillas, con su página; o quién la escribió */
.fuente-citada { display: grid; gap: 4px; margin: 0; padding: 10px 14px; border-left: 3px solid var(--vino); border-radius: 0 var(--r-chico) var(--r-chico) 0; background: var(--crema); }
.fuente-citada figcaption { display: flex; align-items: center; gap: 6px; font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.fuente-citada .ico { flex: none; width: 18px; height: 18px; color: var(--vino); }
.fuente-citada blockquote { margin: 0; font-size: var(--t-cuerpo); line-height: 1.45; color: var(--tinta); overflow-wrap: anywhere; }
.fuente-citada.autora { display: flex; align-items: flex-start; gap: 8px; border-left-color: var(--gris-claro); font-size: var(--t-apoyo); font-weight: 700; line-height: 1.35; color: var(--gris); }
.fuente-citada.autora .ico { margin-top: 1px; }
.pregunta-borrador { display: grid; gap: 8px; }
.pregunta-borrador > p { margin: 0; font-weight: 700; line-height: 1.35; }
.pregunta-borrador .k { display: block; font-size: var(--t-apoyo); color: var(--gris); }
.sin-linea { display: flex; align-items: flex-start; gap: 10px; padding: 12px 14px; border-radius: var(--r-chico); background: var(--espera-claro); color: var(--espera-tinta); }
.sin-linea .ico { flex: none; width: 22px; height: 22px; margin-top: 1px; }
.sin-linea p { margin: 0; font-size: var(--t-apoyo); font-weight: 600; line-height: 1.4; }
.sin-linea b { display: block; font-weight: 700; }
.leccion-borrador .acciones { display: flex; flex-wrap: wrap; align-items: flex-start; gap: 8px; }
.leccion-borrador .acciones > form { margin: 0; }
.leccion-borrador .acciones > form .btn { width: auto; min-width: 0; min-height: var(--blanco); padding: 0 18px; }
.leccion-borrador .acciones > .btn { display: inline-flex; align-items: center; width: auto; min-width: 0; min-height: var(--blanco); padding: 0 18px; } /* en la tarjeta, a su medida (la consola pone 200 px a sus botones grandes) */
/* una acción que pierde algo pide un segundo toque: el primero dice qué pasa */
details.confirma > summary { display: inline-flex; align-items: center; min-height: var(--blanco); padding: 0 18px; border: 1.5px solid var(--vino); border-radius: var(--r-pastilla); font-weight: 700; color: var(--vino); cursor: pointer; list-style: none; transition: transform var(--d-1) var(--suave); }
details.confirma > summary::-webkit-details-marker { display: none; }
details.confirma > summary:active { transform: scale(.985); }
details.confirma > summary:focus-visible { outline: 3px solid var(--oro-claro); outline-offset: 2px; }
details.confirma[open] > summary { background: var(--vino); color: var(--crema); }
details.confirma form { display: grid; gap: 8px; margin: 8px 0 0; padding: 12px 14px; border-radius: var(--r-chico); background: var(--crema); }
details.confirma form p { margin: 0; font-size: var(--t-apoyo); font-weight: 600; line-height: 1.4; }
details.confirma form .btn { width: auto; justify-self: start; min-height: var(--blanco); padding: 0 18px; }
details.confirma[open] { flex: 1 1 100%; }
.no-se-envia { display: flex; align-items: flex-start; gap: 8px; margin: 0; font-size: var(--t-apoyo); font-weight: 700; line-height: 1.4; color: var(--espera-tinta); }
.no-se-envia .ico { flex: none; width: 20px; height: 20px; margin-top: 1px; }
/* sólo en /kit/rh: dos estados lado a lado en la computadora; un botón a su medida */
.kit-rh-pares { display: grid; gap: 26px; align-items: start; }
@media (min-width: 960px) { .kit-rh-pares { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.kit-btn-auto { justify-self: start; width: auto; padding-inline: 28px; }

/* ---- R-F · ronda 16 (2026-10-14, «Dos relojes y lo de antes»): «Lo que vence» de RH con sus dos relojes aparte (cursos · constancias),
   cada renglón con la palabra de D92 y su fecha; «Antes de la app» bajo Crecer › Constancias; la constancia en que termina un curso es la
   tarjeta de siempre (Constancia) con sus horas de capacitación. ---- */
.dos-relojes { display: grid; gap: var(--e-seccion); }
.antes-de-la-app { margin-top: var(--e-seccion); }

/* ---- D98–D99 · ronda 16 (2026-10-14, R-E, la gemela de la jefa): «Fotografía la hoja» en su teléfono (la cámara o sus fotos, una hoja
   o varias, la línea de «sólo documentos de la casa») → «Tu borrador te espera en la computadora»; el borrador que espera es una tarjeta de
   su lista con su origen («Borrador de una foto · 14 oct»). ---- */
.foto-hoja { display: grid; gap: 14px; }
.foto-hoja > h2 { margin: 0; font: 500 var(--t-seccion, 24px)/1.05 var(--f-display); color: var(--vino); }
.foto-hoja > .lead { margin: 0; font-size: var(--t-cuerpo); line-height: 1.45; }
.foto-hoja .tomar { display: grid; gap: 10px; }
.b-formulario .tomar label.btn { position: relative; display: flex; align-items: center; justify-content: center; gap: 8px; font-size: var(--t-cuerpo); color: var(--crema); cursor: pointer; }
.b-formulario .tomar label.btn.ghost { color: var(--vino); }
.b-formulario .tomar input[type="file"] { position: absolute; inset: 0; width: 100%; height: 100%; min-height: 0; margin: 0; padding: 0; border: 0; opacity: 0; cursor: pointer; }
.foto-hoja .tomar label:has(input:focus-visible) { outline: 3px solid var(--oro-claro); outline-offset: 2px; }
.foto-hoja .tomar small { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); text-align: center; }
.hojas { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; margin: 0; padding: 0; list-style: none; }
.hojas li { display: grid; justify-items: center; gap: 4px; min-width: 0; }
.hojas .miniatura { display: grid; place-items: center; width: 100%; aspect-ratio: 3 / 4; overflow: hidden; border-radius: var(--r-chico); background: var(--papel); color: var(--vino); box-shadow: inset 0 0 0 1px var(--linea); }
.hojas .miniatura img { display: block; width: 100%; height: 100%; object-fit: cover; }
.hojas .miniatura .ico { width: 28px; height: 28px; }
.hojas .n { font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.quitar-hoja { min-height: var(--blanco); padding: 0 12px; border: 0; background: transparent; font: inherit; font-size: var(--t-apoyo); font-weight: 700; color: var(--vino); cursor: pointer; }
.foto-hoja.listo { justify-items: center; padding: 28px 18px; border-radius: var(--r-tarjeta); background: var(--papel); text-align: center; }
.foto-hoja.listo .palomita { display: grid; place-items: center; width: 64px; height: 64px; border-radius: 50%; background: var(--verde-claro); color: var(--verde-tinta); animation: borrador-palomita var(--d-3) var(--resorte) .1s backwards; }
.foto-hoja.listo .palomita .ico { width: 32px; height: 32px; stroke-width: 2.4; }
.foto-hoja.listo > p { margin: 0; max-width: 34ch; font-size: var(--t-cuerpo); line-height: 1.45; }
.foto-hoja.listo .acciones { display: grid; gap: 10px; width: 100%; max-width: 340px; }
@keyframes borrador-palomita { from { opacity: 0; transform: scale(.4) rotate(-90deg); } }
@media (prefers-reduced-motion: reduce) { .foto-hoja.listo .palomita { animation: none; } }
.kit-390 { display: grid; gap: 26px; max-width: 390px; }
.kit-pares-390 { display: grid; gap: 26px; align-items: start; }
@media (min-width: 900px) { .kit-pares-390 { grid-template-columns: repeat(2, minmax(0, 390px)); } }
/* ---- D100 · ronda 16 (2026-10-14, «falta claridad en el proceso»): el final de cada paso del creador con UNA acción («Sigue: las
   lecciones ›») y el camino de vuelta; y lo que pasa después de enviarlo — quién lo lee y lo publica, que publicado no le llega a nadie
   hasta asignarlo, y que desde ese día les aparece en Aprender, sin aviso — con el punto en que va encendido. ---- */
.siguiente-paso { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 18px; margin-top: var(--e-seccion); padding-top: 18px; border-top: 1px solid var(--linea); }
.siguiente-paso > .btn { display: inline-flex; width: auto; min-width: 0; padding-inline: 22px; }
.siguiente-paso > .btn .ico { width: 18px; height: 18px; }
.siguiente-paso .atras { display: inline-flex; align-items: center; gap: 4px; min-height: var(--blanco); padding: 0 4px; font-weight: 700; color: var(--vino); text-decoration: none; }
.siguiente-paso .atras .ico { width: 18px; height: 18px; }
.siguiente-paso .atras:focus-visible { outline: 3px solid var(--oro-claro); outline-offset: 2px; border-radius: 8px; }
@media (hover: hover) { .siguiente-paso .atras:hover { text-decoration: underline; text-underline-offset: 3px; } }
.siguiente-paso .falta { display: flex; align-items: flex-start; gap: 8px; margin: 0; font-size: var(--t-apoyo); font-weight: 700; line-height: 1.4; color: var(--espera-tinta); }
.siguiente-paso .falta .ico { flex: none; width: 20px; height: 20px; margin-top: 1px; }
@media (max-width: 719.98px) { .siguiente-paso > .btn { width: 100%; justify-content: center; } }
.despues-de-publicar { display: grid; gap: 10px; padding: 16px 18px; border-radius: var(--r-tarjeta); background: var(--papel); }
.despues-de-publicar h3 { margin: 0; font-size: var(--t-cuerpo); font-weight: 700; color: var(--tinta); }
.despues-de-publicar ol { display: grid; gap: 12px; margin: 0; padding: 0; list-style: none; }
.despues-de-publicar li { display: grid; grid-template-columns: 30px minmax(0, 1fr); align-items: start; gap: 12px; color: var(--gris); }
.despues-de-publicar li > i { display: grid; place-items: center; width: 30px; height: 30px; border-radius: 50%; background: var(--papel-2); font-style: normal; font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.despues-de-publicar li > i .ico { width: 18px; height: 18px; stroke-width: 2.4; }
.despues-de-publicar li span { display: grid; gap: 2px; min-width: 0; padding-top: 4px; }
.despues-de-publicar li b { font-size: var(--t-cuerpo); line-height: 1.3; color: var(--tinta); }
.despues-de-publicar li small { font-size: var(--t-apoyo); font-weight: 600; line-height: 1.4; color: var(--gris); }
.despues-de-publicar li[data-estado="ahora"] > i { background: var(--vino); color: var(--crema); }
.despues-de-publicar li[data-estado="ahora"] b { color: var(--vino); }
.despues-de-publicar li[data-estado="hecho"] > i { background: var(--verde-claro); color: var(--verde-tinta); }
@media (min-width: 960px) { .despues-de-publicar ol { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; } }

/* ---- ronda 16, la pasada de claridad (2026-10-14, a 1280 en Chromium y WebKit sobre la dirección) ---- */
/* WebKit ignora float en el legend de un fieldset (calcula «none») y lo dibuja sobre el borde de arriba de la caja: el legend va en absoluto y
   la caja le deja su lugar arriba (medido: Chromium y WebKit, legend 18 px dentro, el primer campo a 64 px). Un renglón: lo que no cabe se
   corta con «…» (nunca encima del primer campo). */
.bloque-editor { position: relative; padding-top: 64px; }
.rh-editor .fuentes { position: relative; padding-top: 44px; }
/* sin buscador, los filtros toman todo el ancho (iban apretados en la columna de 380 px del buscador: tres renglones en el catálogo a 1280) */
@media (min-width: 960px) { .rh-filtros > .rh-chips:only-child { grid-column: 1 / -1; } }
/* el detalle de un paso, en dos renglones a lo más (un nombre largo de curso ocupaba tres) */
.pasos-curso .tx small { display: -webkit-box; overflow: hidden; -webkit-line-clamp: 2; line-clamp: 2; -webkit-box-orient: vertical; }
/* una fila de RH con su acción (FilaRH accion): el botón a su medida a la derecha, en lugar de la flecha */
.rh-fila > .accion { grid-area: fl; display: flex; gap: 8px; }
.rh-fila > .accion form { margin: 0; }
.rh-fila > .accion .btn { width: auto; min-width: 0; min-height: var(--blanco); padding: 0 16px; }

/* ---- la pasada de claridad, segunda parte (2026-10-14): lo hecho y lo que sigue, arriba; la vuelta en la cabeza de RH; una pieza sólo
   para el teléfono o sólo para la computadora ---- */
.hecho-y-sigue { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 10px 18px; padding: 12px 16px; border-radius: var(--r-tarjeta); background: var(--verde-claro); color: var(--verde-tinta); }
.hecho-y-sigue[data-tono="azul"] { background: var(--azul-claro); color: var(--azul-tinta); }
.hecho-y-sigue > p { display: flex; align-items: flex-start; gap: 8px; margin: 0; font-weight: 700; line-height: 1.4; }
.hecho-y-sigue > p .ico { flex: none; width: 20px; height: 20px; margin-top: 1px; stroke-width: 2.4; }
.hecho-y-sigue > .btn { display: inline-flex; width: auto; min-width: 0; padding-inline: 20px; }
.hecho-y-sigue > .btn .ico { width: 18px; height: 18px; }
@media (max-width: 719.98px) { .hecho-y-sigue > .btn { width: 100%; justify-content: center; } }
.rh-cabeza .volver { display: inline-flex; align-items: center; gap: 4px; min-height: var(--blanco); margin: -6px 0 0 -4px; padding: 0 4px; font-weight: 700; color: var(--vino); text-decoration: none; }
.rh-cabeza .volver .ico { width: 18px; height: 18px; }
.rh-cabeza .volver:focus-visible { outline: 3px solid var(--oro-claro); outline-offset: 2px; border-radius: 8px; }
@media (hover: hover) { .rh-cabeza .volver:hover { text-decoration: underline; text-underline-offset: 3px; } }
/* sólo en el teléfono (sin mouse, con el dedo) · sólo en la computadora — la misma regla que la zona de «Desde un documento» */
@media not all and (hover: none) and (pointer: coarse) { .solo-tel { display: none !important; } }
@media (hover: none) and (pointer: coarse) { .solo-pc { display: none !important; } }
/* el proceso entero en el teléfono: seis pasos en dos columnas; sólo el actual dice su detalle, los demás su nombre (tres renglones bajos, no altos) */
@container (max-width: 719.98px) { .pasos-curso li:not([data-estado="ahora"]) .tx small { display: none; } .pasos-curso .paso { min-height: var(--blanco); padding-block: 8px; } }
/* six in a row from 720 px of strip (the 760 column, RH's console up to ~1200): the number above its name, so every name and detail is whole
   («Publicar», «Asignar», «Corporativo»; «En tu teléfono» in two lines); under 720, two columns. Measured: no word broken from 350 to 1200. */
@container (min-width: 720px) and (max-width: 1199.98px) { .pasos-curso .paso { grid-template-columns: minmax(0, 1fr); align-content: start; gap: 6px; padding: 10px; } .pasos-curso .tx { padding-top: 0; } }
/* listas de RH que se siguen (los dos relojes y «Constancias por casa»; el catálogo de cursos y «Más»): el mismo aire que entre dos ListaRH */
:is(.dos-relojes, .lista-cursos, .rh-lista) + :is(.dos-relojes, .lista-cursos, .rh-lista) { margin-top: var(--e-seccion); }

/* ---- D101–D102 · ronda 17 (2026-10-14, G4): «Grabar con tu voz» y «Foto o video» en una lección (la jefa o RH, su autora), y en la
   lección de la persona «La voz de Lorena» bajo «Escúchala» y el video sobre el texto (sus propios controles, nunca solo, nunca con sonido
   sin que ella lo pida). Sólo transform y opacity se mueven. ---- */
:is(.grabar-voz, .foto-o-video) { display: grid; gap: 12px; padding: 16px; border-radius: var(--r-tarjeta); background: var(--papel); }
:is(.grabar-voz, .foto-o-video) > h3 { display: flex; align-items: center; gap: 8px; margin: 0; font-size: 18px; font-weight: 700; color: var(--tinta); }
:is(.grabar-voz, .foto-o-video) > h3 .ico { width: 22px; height: 22px; color: var(--vino); }
:is(.grabar-voz, .foto-o-video) .calma { margin: 0; font-weight: 600; color: var(--gris); }
:is(.grabar-voz, .foto-o-video) .btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; width: auto; min-width: 0; padding-inline: 20px; }
:is(.grabar-voz, .foto-o-video) .acciones { display: flex; flex-wrap: wrap; align-items: flex-start; gap: 10px; }
.grabar-voz .voz-inicial, .foto-o-video .medio-inicial { display: grid; gap: 10px; justify-items: start; }
.grabar-voz .voz-inicial .note, .foto-o-video .note { margin: 0; }
.grabar-voz .reloj, .foto-o-video .reloj { display: flex; align-items: center; gap: 10px; margin: 0; font-weight: 700; }
.grabar-voz .reloj .k, .foto-o-video .reloj .k { color: var(--gris); }
.grabar-voz .reloj b { font: 500 var(--t-sub)/1 var(--f-display); color: var(--vino); font-variant-numeric: tabular-nums; }
.grabar-voz .punto-rojo { width: 12px; height: 12px; border-radius: 50%; background: var(--rojo); animation: voz-late 1s var(--suave) infinite alternate; }
@keyframes voz-late { from { opacity: .35; } to { opacity: 1; } }
@media (prefers-reduced-motion: reduce) { .grabar-voz .punto-rojo { animation: none; } }
.grabar-voz .voz-grabando { display: grid; gap: 10px; justify-items: start; }
.grabar-voz .voz-grabando progress { -webkit-appearance: none; appearance: none; display: block; width: 100%; height: 6px; border: 0; border-radius: 3px; background: var(--linea); overflow: hidden; }
.grabar-voz .voz-grabando progress::-webkit-progress-bar { background: var(--linea); border-radius: 3px; }
.grabar-voz .voz-grabando progress::-webkit-progress-value { background: var(--rojo); border-radius: 3px; }
.grabar-voz .voz-grabando progress::-moz-progress-bar { background: var(--rojo); border-radius: 3px; }
.grabar-voz .voz-escuchar, .grabar-voz .voz-guardada { display: grid; gap: 10px; justify-items: start; }
.grabar-voz .voz-de { display: flex; align-items: center; gap: 6px; margin: 0; font-weight: 700; color: var(--verde-tinta); }
.grabar-voz .voz-de .ico { width: 18px; height: 18px; stroke-width: 2.4; }
.grabar-voz .aviso-voz { display: flex; align-items: flex-start; gap: 8px; margin: 0; padding: 10px 12px; border-radius: var(--r-chico); background: var(--espera-claro); color: var(--espera-tinta); font-size: var(--t-apoyo); line-height: 1.4; }
.grabar-voz .aviso-voz .ico { flex: none; width: 20px; height: 20px; margin-top: 1px; }
.consentimiento-voz { display: flex; align-items: flex-start; gap: 8px; margin: 0; font-size: var(--t-apoyo); font-weight: 600; line-height: 1.4; color: var(--gris); }
.consentimiento-voz .ico { flex: none; width: 18px; height: 18px; margin-top: 1px; color: var(--vino); }
/* «Quitar» de la voz o del medio: el segundo toque sin formulario (el del cliente) */
details.confirma .confirma-cuerpo { display: grid; gap: 8px; margin: 8px 0 0; padding: 12px 14px; border-radius: var(--r-chico); background: var(--crema); }
details.confirma .confirma-cuerpo p { margin: 0; font-size: var(--t-apoyo); font-weight: 600; line-height: 1.4; }
details.confirma .confirma-cuerpo .btn { justify-self: start; }
/* la foto o el video que ya tiene, y elegir otro */
.foto-o-video .tomar { display: flex; flex-wrap: wrap; gap: 10px; }
.foto-o-video label.btn { position: relative; cursor: pointer; }
.foto-o-video label.btn input[type="file"] { position: absolute; inset: 0; width: 100%; height: 100%; min-height: 0; margin: 0; padding: 0; border: 0; opacity: 0; cursor: pointer; }
.foto-o-video label.btn:has(input:focus-visible) { outline: 3px solid var(--oro-claro); outline-offset: 2px; }
.foto-o-video .medio-guardado { display: grid; gap: 10px; }
/* «Cambiar» junto a «Quitar»: la misma pastilla, la misma altura (las dos son la acción de al lado, no la principal) */
.foto-o-video .medio-guardado .acciones label.btn { min-height: var(--blanco); padding: 0 18px; border-radius: var(--r-pastilla); }
.foto-o-video .medio-guardado :is(img, video) { display: block; width: 100%; max-width: 520px; max-height: 360px; object-fit: contain; border-radius: var(--r-chico); background: var(--tinta); }
/* a photo keeps its own shape (no dark bands beside a tall one); only the video sits on dark, under its controls */
.foto-o-video .medio-guardado img { width: auto; max-width: min(100%, 520px); height: auto; background: none; }
.foto-o-video .medio-subiendo { display: grid; gap: 10px; }
/* en la lección de la persona: de quién es la voz, y el video sobre el texto */
.l-vis .voz-de { margin: 8px 0 0; font-size: var(--t-apoyo); font-weight: 700; color: var(--sobre-vino-oro, var(--crema)); }
.l-vis:not(.sin-foto) .voz-de { text-shadow: 0 1px 2px rgba(0, 0, 0, .35); }
.l-video { margin: 14px 0 0; }
.l-video video { display: block; width: 100%; max-height: 70vh; border-radius: var(--r-tarjeta); background: var(--tinta); }
/* bajo el editor de la tarjeta (las dos consolas): la voz y la foto o el video, lado a lado en la computadora, uno bajo otro en el teléfono */
.medios-leccion { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 320px), 1fr)); gap: 12px; align-items: start; }

/* ---- R-G · ronda 18 (2026-10-15, «La lección se arma con bloques», README §2 B26 · B25 · B04 · B15 · B27 · B30 · B02; HECHOS M1): las
   piezas de las que se hace el texto de una lección, hijas directas de `.panel.l-texto` (D17). Cada una se distingue sin leer su nombre:
   la frase de por qué (vino, arriba, una raya debajo) · los pasos con su riel · la pregunta que se toca (hoja, la pastilla vino) · las
   casillas que palomea · la palabra con su libro · el ejemplo enmarcado en vino · la foto en su forma, con su pie. Nada de oro: el oro es
   donde la casa firma. Sólo transform y opacity se mueven. */
.l-texto > * + :is(.l-pasos, .l-revela, .l-cotejo, .l-palabra, .l-asi, .l-foto, .l-compara), .l-texto > :is(.l-pasos, .l-revela, .l-cotejo, .l-palabra, .l-asi, .l-foto, .l-compara) + * { margin-top: 18px; }
/* B26 · Por qué importa: la primera línea, la frase de la autora en vino */
.l-importa { display: grid; gap: 2px; padding-bottom: 14px; border-bottom: 1px solid var(--linea); }
.l-importa .k { font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.l-importa b { font-size: 18px; font-weight: 700; line-height: 1.35; color: var(--vino); }
/* B02 · la foto dentro del texto: su propia forma (nunca recortada), su pie debajo */
.l-foto { display: grid; gap: 8px; justify-items: start; margin: 0; }
.l-foto img { display: block; width: auto; max-width: 100%; height: auto; max-height: 70vh; border-radius: var(--r-chico); background: var(--foto-fondo); }
.l-foto figcaption { font-size: var(--t-apoyo); font-weight: 600; line-height: 1.4; color: var(--gris); }
/* B25 · Paso N: el número en su círculo y un riel hasta el siguiente. `.l-texto ol > li` (la lista «1.» de D17) pinta su propio círculo:
   `ol.l-pasos` empata su especificidad y viene después, así que lo reemplaza entero. */
ol.l-pasos { list-style: none; margin: 0; padding: 0; }
ol.l-pasos > li { position: relative; display: grid; grid-template-columns: 36px minmax(0, 1fr); gap: 0 14px; align-items: start; padding: 0 0 20px; }
ol.l-pasos > li + li { border-top: 0; }
ol.l-pasos > li:last-child { padding-bottom: 0; }
ol.l-pasos > li::before { content: ""; position: absolute; left: 17px; top: 42px; bottom: 6px; display: block; width: 2px; height: auto; border-radius: 2px; background: var(--gris-claro); }
ol.l-pasos > li:last-child::before { content: none; }
ol.l-pasos .n { display: grid; place-items: center; width: 36px; height: 36px; border-radius: 50%; background: var(--vino); color: var(--crema); font-family: var(--f-display); font-size: 19px; line-height: 1; }
ol.l-pasos .paso { display: grid; gap: 10px; min-width: 0; padding-top: 6px; }
ol.l-pasos .paso > p { margin: 0; }
/* B04 · Toca y revela: la pregunta entera es el blanco; la respuesta abre debajo y nada de arriba se mueve */
.l-revela { border-radius: var(--r-tarjeta); background: var(--hoja); box-shadow: inset 0 0 0 1.5px var(--linea); }
.l-revela > summary { display: grid; gap: 4px; justify-items: start; padding: 14px 16px 16px; border-radius: var(--r-tarjeta); cursor: pointer; list-style: none; }
.l-revela > summary::-webkit-details-marker { display: none; }
.l-revela > summary:focus-visible { outline: 3px solid var(--oro); outline-offset: 2px; }
.l-revela .k { font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.l-revela .q { font-size: 18px; font-weight: 700; line-height: 1.3; color: var(--tinta); }
.l-revela .toca { display: inline-flex; align-items: center; gap: 8px; min-height: var(--blanco); margin-top: 10px; padding: 0 18px; border-radius: var(--r-pastilla); background: var(--vino); color: var(--crema); font-weight: 700; transition: transform var(--d-1) var(--suave); }
.l-revela .toca .ico { width: 20px; height: 20px; }
.l-revela > summary:active .toca { transform: scale(.97); }
.l-revela .toca .abierta, .l-revela[open] .toca .cerrada { display: none; }
.l-revela[open] .toca .abierta { display: inline; }
/* abierta: la pastilla se vuelve el rótulo de la respuesta, en el mismo renglón */
.l-revela[open] .toca { min-height: 0; margin-top: 12px; padding: 0; background: none; color: var(--vino); }
.l-revela > .r { margin: 0; padding: 4px 16px 16px; line-height: 1.5; color: var(--tinta); }
.l-revela[open] > .r { animation: l-revela var(--d-2) var(--suave) both; }
@keyframes l-revela { from { opacity: 0; transform: translateY(-6px); } }
/* B15 · la lista de cotejo: el renglón entero es la casilla; nada se guarda */
.l-cotejo > .k { margin: 0 0 2px; font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.l-cotejo > ul { margin: 0; padding: 0; list-style: none; }
.l-cotejo > ul > li + li { margin-top: 0; border-top: 1px solid var(--linea); }
.l-cotejo label { position: relative; display: flex; align-items: flex-start; gap: 12px; min-height: var(--blanco); padding: 10px 0; cursor: pointer; }
.l-cotejo input { position: absolute; inset: 0; width: 100%; height: 100%; min-height: 0; margin: 0; padding: 0; border: 0; opacity: 0; cursor: pointer; }
.l-cotejo .caja { display: grid; place-items: center; flex: none; width: 26px; height: 26px; border-radius: 8px; border: 2px solid var(--vino); background: var(--hoja); }
.l-cotejo .caja .ico { width: 18px; height: 18px; stroke-width: 3; color: var(--crema); opacity: 0; transform: scale(.4); transition: opacity var(--d-1) var(--suave), transform var(--d-2) var(--resorte); }
.l-cotejo input:checked + .caja { border-color: var(--verde); background: var(--verde); }
.l-cotejo input:checked + .caja .ico { opacity: 1; transform: none; }
.l-cotejo input:focus-visible + .caja { box-shadow: 0 0 0 3px var(--oro-claro); }
.l-cotejo label > span { padding-top: 1px; line-height: 1.45; }
/* B27 · una palabra: el libro, la palabra en Eighties y lo que quiere decir, a la vista */
.l-palabra { display: flex; gap: 12px; align-items: flex-start; }
.l-palabra > .ic { display: grid; place-items: center; flex: none; width: 40px; height: 40px; border-radius: 12px; background: var(--crema); color: var(--vino); }
.l-palabra > div { min-width: 0; }
.l-palabra .k { margin: 0; font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.l-palabra dl { margin: 0; }
.l-palabra dt { margin: 2px 0 0; font-family: var(--f-display); font-weight: 500; font-size: 22px; line-height: 1.15; color: var(--vino); }
.l-palabra dd { margin: 4px 0 0; line-height: 1.45; }
/* B30 · así se hace: el ejemplo, enmarcado en vino */
.l-asi { display: grid; gap: 8px; padding: 14px 16px 16px; border-radius: var(--r-tarjeta); border: 2px solid var(--vino); background: var(--hoja); }
.l-asi > .k { display: flex; align-items: center; gap: 8px; margin: 0 0 2px; font-weight: 700; color: var(--vino); }
.l-asi > .k .ic { display: grid; place-items: center; flex: none; width: 28px; height: 28px; border-radius: 50%; background: var(--vino); color: var(--crema); }
.l-asi > .k .ico { width: 18px; height: 18px; stroke-width: 2.6; }
.l-asi > p { margin: 0; line-height: 1.5; }
/* B31 · así sí / así no: lo correcto y lo incorrecto lado a lado (dos columnas desde 360 px, una sobre otra en menos). Cada lado se dice con su rótulo
   y su icono —palomita, cruz—, nunca sólo con el color: verde para el sí, rojo para el no, el borde y el círculo del rótulo. */
.l-compara { display: grid; grid-template-columns: minmax(0, 1fr); gap: 12px; }
@media (min-width: 360px) { .l-compara { grid-template-columns: repeat(2, minmax(0, 1fr)); align-items: start; } }
.l-compara .lado { display: grid; gap: 10px; min-width: 0; padding: 12px 12px 14px; border-radius: var(--r-tarjeta); border: 2px solid var(--verde); background: var(--hoja); }
.l-compara .lado.no { border-color: var(--rojo); }
.l-compara .k { display: flex; align-items: center; gap: 8px; margin: 0; font-weight: 700; color: var(--verde-tinta); }
.l-compara .no .k { color: var(--rojo); }
.l-compara .k .ic { display: grid; place-items: center; flex: none; width: 28px; height: 28px; border-radius: 50%; background: var(--verde); color: var(--crema); }
.l-compara .no .k .ic { background: var(--rojo); }
.l-compara .k .ico { width: 18px; height: 18px; stroke-width: 2.6; }
.l-compara .l-foto { justify-items: stretch; }
.l-compara .l-foto img { width: 100%; max-height: 50vh; object-fit: contain; }
.l-compara .t { margin: 0; line-height: 1.45; overflow-wrap: anywhere; }
/* sólo en /kit: lo que escribe la autora, tal cual, junto a lo que ve la persona */
.kit-escrito { margin: 8px 0 0; white-space: pre-wrap; overflow-wrap: anywhere; font: 600 var(--t-apoyo)/1.5 ui-monospace, "SFMono-Regular", Menlo, monospace; color: var(--tinta); }

/* ---- R-G · ronda 18, D2 (2026-10-15): el editor de una lección — lo que kiss rechazó, arriba del texto; el campo «Por qué importa»; la
   pista que dice `###` y nombra cada bloque en un renglón; «Fotos en el texto», cada foto con su pie. ---- */
.editor-aviso { display: flex; align-items: flex-start; gap: 8px; margin: 0; padding: 10px 12px; border-radius: var(--r-chico); background: var(--rojo-claro); color: var(--rojo); font-weight: 700; line-height: 1.4; }
.editor-aviso .ico { flex: none; width: 20px; height: 20px; margin-top: 1px; }
.editor-form .porque-campo > textarea { min-height: 0; resize: vertical; font-weight: 700; line-height: 1.4; color: var(--vino); }
/* la pista: los formatos en un renglón que se dobla; los bloques, uno por renglón */
.formatos ul.gramatica { display: grid; gap: 6px; }
/* la revisión del diseño (ronda 18, 390): el renglón fluye — lo que se escribe y, a su lado o debajo, lo que queda; nunca una columna de una palabra */
.formatos ul.gramatica li { display: block; line-height: 1.5; }
.formatos ul.gramatica code { margin-right: 8px; white-space: nowrap; }
/* «Fotos en el texto»: la foto chica a la izquierda, su lugar en el texto, su pie y sus dos acciones */
.fotos-texto { display: grid; gap: 10px; }
.fotos-texto > h3 { display: flex; align-items: center; gap: 8px; margin: 0; font-size: 18px; font-weight: 700; color: var(--tinta); }
.fotos-texto > h3 .ico { color: var(--vino); }
.fotos-texto > .note { margin: 0; }
.fotos-texto > ol { display: grid; gap: 0; margin: 0; padding: 0; list-style: none; }
.fotos-texto > ol > li { display: grid; grid-template-columns: 88px minmax(0, 1fr); gap: 14px; align-items: start; padding: 14px 0; }
.fotos-texto > ol > li + li { border-top: 1px solid var(--linea); }
.fotos-texto > ol > li > img, .fotos-texto .hueco-foto { display: block; width: 88px; height: 88px; object-fit: cover; border-radius: var(--r-chico); background: var(--foto-fondo); }
.fotos-texto .hueco-foto { background: var(--papel-2); }
.fotos-texto .dato { display: grid; gap: 8px; min-width: 0; }
.fotos-texto .cual { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 10px; margin: 0; }
.fotos-texto .cual code { padding: 1px 6px; border-radius: 6px; background: var(--papel-2); font: 600 var(--t-apoyo)/1.4 ui-monospace, "SFMono-Regular", Menlo, monospace; color: var(--tinta); }
.fotos-texto .donde { margin: 0; font-size: var(--t-apoyo); font-weight: 600; color: var(--verde-tinta); }
.fotos-texto .donde.falta { color: var(--espera-tinta); }
.fotos-texto .acciones { display: flex; flex-wrap: wrap; align-items: flex-start; gap: 10px; }
.fotos-texto .acciones label.btn { min-height: var(--blanco); padding: 0 18px; border-radius: var(--r-pastilla); }
.fotos-texto .tomar { display: flex; flex-wrap: wrap; gap: 10px; }
/* dentro del formulario del editor (.b-formulario label es una rejilla gris): el botón vuelve a ser botón, a su medida */
.fotos-texto label.btn { min-width: 0; position: relative; display: inline-flex; align-items: center; justify-content: center; gap: 8px; width: auto; min-height: var(--blanco); padding: 0 18px; border-radius: var(--r-pastilla); font-size: var(--t-cuerpo); cursor: pointer; }
.fotos-texto label.btn:not(.ghost) { color: var(--crema); }
.fotos-texto label.btn.ghost { color: var(--vino); }
.fotos-texto label.btn input[type="file"] { position: absolute; inset: 0; width: 100%; height: 100%; min-height: 0; margin: 0; padding: 0; border: 0; opacity: 0; cursor: pointer; }
.fotos-texto label.btn:has(input:focus-visible) { outline: 3px solid var(--oro-claro); outline-offset: 2px; }
.fotos-texto .subiendo .dato { padding-top: 8px; }
/* en el teléfono la foto va arriba, a lo ancho del renglón */
@container (max-width: 479.98px) { .fotos-texto > ol > li { grid-template-columns: 64px minmax(0, 1fr); } .fotos-texto > ol > li > img, .fotos-texto .hueco-foto { width: 64px; height: 64px; } }
/* D91 · ronda 18: la pantalla del teléfono se recorre (es una región que toma el foco); lo que muestra no se toca salvo en la vista viva */
.pantalla-telefono:focus-visible { outline: 3px solid var(--oro); outline-offset: -3px; }
/* B04 · B15 en el teléfono: el toque no oscurece el renglón (Android); la casilla y la pastilla contestan al dedo */
:is(.l-cotejo label, .l-revela > summary) { -webkit-tap-highlight-color: transparent; }
.l-cotejo label:active .caja { transform: scale(.92); }
.l-cotejo .caja { transition: transform var(--d-1) var(--suave); }

/* ---- R-H · ronda 18 (2026-10-15): lo que pidieron las respuestas de la pregunta (equipo-opus-medium, HECHOS 09:00, components/kit/respuestas)
   y la barra y la portada (equipo-opus-max, HECHOS 09:10). Toques, nunca arrastres; un solo pulgar; cada blanco de 44 px; nada de oro. ---- */
/* (1) B10 · una opción con foto (Jorge, 09:19 «le falta mejorar la imagen, no tiene proporción»; 09:21: una foto en UNA opción vale, «es la
   imagen que tiene»): la foto cuadrada de 72 px junto a su letra, nunca estirada; el texto a su lado toma lo que queda y se dobla; en un
   grupo con alguna foto, todas las opciones a la misma altura tranquila (72 + el relleno y el borde del renglón) — sin un hueco de foto */
.quiz-op > span:not(.quiz-l, .chips) { min-width: 0; }
img.opcion-foto { flex: none; display: block; width: 72px; height: 72px; aspect-ratio: 1; object-fit: cover; border-radius: var(--r-chico); background: var(--foto-fondo); }
.quiz-ops.con-fotos .quiz-op { min-height: 100px; }
/* (2) B06 · ordenar con flechas: ↑ ↓ a la derecha en un renglón; la flecha que no puede (la primera ↑, la última ↓) se ve apagada */
.ordenar.flechas .quiz-op > span:not(.quiz-l, .chips) { flex: 1; }
.ordenar.flechas .quiz-op > .chips { flex: none; flex-wrap: nowrap; gap: 6px; margin-left: auto; }
.ordenar.flechas .quiz-op > .chips .chip { justify-content: center; min-width: var(--blanco); min-height: var(--blanco); padding: 0; }
.ordenar.flechas button.chip:disabled { border-color: var(--linea); color: var(--gris-claro); background: transparent; cursor: default; }
.ordenar.flechas button.chip:disabled::after { content: none; }
/* (3) parear: el primer toque (espera a su pareja) se lee distinto de una pareja hecha — raya punteada y «…»; la pareja, su número en vino */
.parear label.quiz-op[data-marcado] { border-style: dashed; border-color: var(--vino); background: var(--hoja); }
.parear label.quiz-op[data-marcado] .quiz-l { background: var(--papel-2); color: var(--vino); }
/* (4) toca en la foto: la foto es el botón; la marca del toque, un aro de 48 px centrado donde tocó (--x, --y ∈ [0, 1] son el dato) */
.toca-foto { display: grid; gap: 8px; }
.toca-foto .quiz-dijo { margin: 0; }
.toca-foto-lienzo { position: relative; display: block; width: 100%; margin: 0; padding: 0; border: 0; border-radius: var(--r-tarjeta); overflow: hidden; background: var(--foto-fondo); cursor: pointer; -webkit-tap-highlight-color: transparent; }
.toca-foto-lienzo > img { display: block; width: 100%; height: auto; -webkit-user-select: none; user-select: none; -webkit-touch-callout: none; }
.toca-foto-lienzo:focus-visible { outline: 3px solid var(--oro); outline-offset: 2px; }
.toca-foto-marca { position: absolute; left: calc(var(--x, .5) * 100%); top: calc(var(--y, .5) * 100%); width: 48px; height: 48px; border-radius: 50%; border: 3px solid var(--crema); box-shadow: 0 0 0 3px var(--vino), var(--sombra-flota); transform: translate(-50%, -50%); pointer-events: none; animation: toca-marca var(--d-2) var(--resorte) both; }
.toca-foto-marca::after { content: ""; position: absolute; left: 50%; top: 50%; width: 8px; height: 8px; border-radius: 50%; background: var(--crema); transform: translate(-50%, -50%); }
@keyframes toca-marca { from { opacity: 0; transform: translate(-50%, -50%) scale(.5); } }
/* (5) B23 · un número: el valor grande arriba; la barra a todo lo ancho con 44 px de toque y UN pulgar de 32 px, hueco hasta que lo mueve */
.numero { display: grid; gap: 6px; }
.numero-valor { display: block; min-height: 52px; font-family: var(--f-display); font-size: var(--t-banda); line-height: 1.1; color: var(--vino); }
.numero:not([data-tocado]) .numero-valor { font-family: var(--f-texto); font-size: 18px; font-weight: 700; line-height: 52px; color: var(--gris); }
.numero input[type="range"] { -webkit-appearance: none; appearance: none; display: block; width: 100%; height: var(--blanco); margin: 0; padding: 0; background: transparent; cursor: pointer; touch-action: pan-y; }
.numero input[type="range"]:focus-visible { outline: 3px solid var(--oro); outline-offset: 2px; border-radius: var(--r-chico); }
.numero input[type="range"]::-webkit-slider-runnable-track { height: 8px; border-radius: 4px; background: var(--papel-2); }
.numero input[type="range"]::-moz-range-track { height: 8px; border-radius: 4px; background: var(--papel-2); }
.numero input[type="range"]::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; width: 32px; height: 32px; margin-top: -12px; border-radius: 50%; border: 3px solid var(--vino); background: var(--hoja); box-shadow: var(--sombra-flota); }
.numero input[type="range"]::-moz-range-thumb { width: 26px; height: 26px; border-radius: 50%; border: 3px solid var(--vino); background: var(--hoja); box-shadow: var(--sombra-flota); }
.numero[data-tocado] input[type="range"]::-webkit-slider-thumb { background: var(--vino); }
.numero[data-tocado] input[type="range"]::-moz-range-thumb { background: var(--vino); }
.numero-ejes { display: flex; justify-content: space-between; gap: 12px; font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.numero > .chips { gap: 10px; }
.numero > .chips .chip { justify-content: center; min-width: 56px; min-height: var(--blanco); padding: 0 12px; font-size: 22px; font-weight: 700; }
/* (6) sólo en /kit: un código largo se dobla */
.quiz-dijo code { overflow-wrap: anywhere; }
/* La barra de la lección (BarraLeccion): nueve botones sobre el texto que se doblan en dos o tres renglones a 390, nunca de lado; su aviso, un renglón tranquilo debajo */
.barra-leccion { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.barra-leccion button { display: inline-flex; align-items: center; justify-content: center; gap: 6px; min-height: var(--blanco); margin: 0; padding: 0 12px; border: 1.5px solid var(--linea); border-radius: var(--r-chico); background: var(--hoja); color: var(--vino); font: 700 var(--t-apoyo)/1.2 var(--f-texto); cursor: pointer; -webkit-tap-highlight-color: transparent; transition: transform var(--d-1) var(--suave); }
.barra-leccion button .ico { width: 18px; height: 18px; }
.barra-leccion button:active { transform: scale(.96); }
.barra-leccion button:focus-visible { outline: 3px solid var(--oro); outline-offset: 2px; }
@media (hover: hover) { .barra-leccion button:hover { border-color: var(--vino); } }
.barra-leccion .aviso { flex-basis: 100%; margin: 2px 0 0; font-size: var(--t-apoyo); font-weight: 600; line-height: 1.4; color: var(--espera-tinta); }
/* La portada de un curso (PortadaCurso, paso 1): la vista cuadrada como en la tarjeta del curso, sus botones como los de «Foto o video» */
.portada-curso { display: grid; gap: 10px; justify-items: start; }
.portada-curso img, .portada-curso .vacia { display: grid; place-items: center; width: 160px; height: 160px; object-fit: cover; border-radius: var(--r-tarjeta); background: var(--papel-2); color: var(--vino); }
.portada-curso .vacia .ico { width: 40px; height: 40px; }
.portada-curso .tomar { display: flex; flex-wrap: wrap; gap: 10px; }
.portada-curso label.btn { min-width: 0; position: relative; display: inline-flex; align-items: center; justify-content: center; gap: 8px; width: auto; min-height: var(--blanco); padding: 0 18px; border-radius: var(--r-pastilla); cursor: pointer; }
.portada-curso label.btn:not(.ghost) { color: var(--crema); }
.portada-curso label.btn.ghost { color: var(--vino); }
.portada-curso label.btn input[type="file"] { position: absolute; inset: 0; width: 100%; height: 100%; min-height: 0; margin: 0; padding: 0; border: 0; opacity: 0; cursor: pointer; }
.portada-curso label.btn:has(input:focus-visible) { outline: 3px solid var(--oro-claro); outline-offset: 2px; }
.portada-curso .calma { margin: 0; font-weight: 600; color: var(--gris); }
.portada-curso > .note { margin: 0; }
/* la barra sobre el texto: su renglón de botones y el textarea, con aire entre los dos */
.barra-leccion + textarea { margin-top: 2px; }
/* B11 · la consecuencia (después de «Comprobar», opus-medium 09:22): lo que eligió, «Lo que pasa» como una cita tranquila (como la frase de
   un platillo) y la que sí funciona — dos tonos quietos, nunca verde ni rojo, sin ícono (T0-20) */
.consecuencia { display: grid; gap: 10px; }
.consecuencia > .quiz-dijo { margin: 4px 0 0; }
.consecuencia .quiz-op.elegida { border-color: var(--linea); background: var(--papel); }
.consecuencia .quiz-op.elegida .quiz-l { background: var(--papel-2); color: var(--tinta); }
.consecuencia .quiz-op.la-que-funciona { border-color: var(--vino); background: var(--hoja); }
.consecuencia .quiz-op.la-que-funciona .quiz-l { background: var(--vino); color: var(--crema); }
.consecuencia > blockquote.consecuencia-linea { margin: 0; padding: 14px 16px; border-radius: var(--r-tarjeta); background: var(--papel); }
.consecuencia-linea > .k { margin: 0 0 4px; font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.consecuencia-linea > p:not(.k) { margin: 0; font-family: var(--f-display); font-size: 20px; line-height: 1.25; color: var(--vino); }
/* R-G · el cambio del título, bajo la cabeza del editor (equipo-rh, después de la tercera lectura de la historia): pegado al título, no suelto */
.editor-leccion > .bajo-el-titulo { margin-top: calc(-1 * var(--e-2)); min-width: 0; }
/* la revisión del diseño (#666 en vivo): el cambio del título — el campo y su botón en un renglón cuando cabe; el botón a su medida, nunca de
   lado a lado (a 1280 se leía como el botón principal de la página) */
.editor-leccion > .bajo-el-titulo > form { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 10px 12px; }
.editor-leccion > .bajo-el-titulo > form > label { flex: 1 1 320px; min-width: 0; }
.editor-leccion > .bajo-el-titulo > form > .btn { flex: 0 0 auto; width: auto; min-width: 0; min-height: 48px; padding: 0 20px; }
/* ---- R-H · ronda 18 (2026-10-15): el editor de pines sobre la foto de la lección (equipo-opus-max, HECHOS 09:34) — sólo para quien escribe.
   Se toca, nunca se arrastra: la foto es la superficie; cada pin, un botón numerado de 44 px centrado en (--x, --y); la zona de una
   pregunta «toca en la foto», un círculo de diámetro --r × 2 del ancho; debajo, la lista de pines en una columna. ---- */
.editor-pines { display: grid; gap: 10px; min-width: 0; }
.editor-pines > .note, .editor-pines > .aviso { margin: 0; }
.editor-pines > .aviso { font-size: var(--t-apoyo); font-weight: 600; line-height: 1.4; color: var(--espera-tinta); }
.editor-pines-lienzo { position: relative; overflow: hidden; border-radius: var(--r-tarjeta); background: var(--foto-fondo); cursor: crosshair; -webkit-tap-highlight-color: transparent; touch-action: manipulation; }
.editor-pines-lienzo > img { display: block; width: 100%; height: auto; -webkit-user-select: none; user-select: none; -webkit-touch-callout: none; -webkit-user-drag: none; }
.editor-pines-pin { position: absolute; z-index: 1; left: calc(var(--x, .5) * 100%); top: calc(var(--y, .5) * 100%); display: grid; place-items: center; width: var(--blanco); height: var(--blanco); margin: 0; padding: 0;
  border: 3px solid var(--crema); border-radius: 50%; background: var(--vino); color: var(--crema); font: 500 20px/1 var(--f-display); box-shadow: var(--sombra-flota);
  transform: translate(-50%, -50%); transition: transform var(--d-1) var(--suave); cursor: pointer; -webkit-tap-highlight-color: transparent; }
.editor-pines-pin:active { transform: translate(-50%, -50%) scale(.94); }
.editor-pines-pin:focus-visible { outline: 3px solid var(--oro); outline-offset: 2px; }
/* el que levantó para moverlo: en crema, más grande; el siguiente toque en la foto lo pone ahí */
.editor-pines-pin[aria-pressed="true"] { border-color: var(--vino); background: var(--crema); color: var(--vino); transform: translate(-50%, -50%) scale(1.15); }
.editor-pines-lienzo[data-moviendo] { cursor: copy; }
.editor-pines-zona { position: absolute; left: calc(var(--x, .5) * 100%); top: calc(var(--y, .5) * 100%); width: calc(var(--r, .12) * 200%); aspect-ratio: 1; border: 3px dashed var(--crema); border-radius: 50%;
  background: color-mix(in srgb, var(--crema) 22%, transparent); box-shadow: 0 0 0 2px var(--vino), inset 0 0 0 2px var(--vino); transform: translate(-50%, -50%); pointer-events: none; }
.editor-pines-tamano > span { font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
/* la lista: el número del pin, su nombre, su frase y «Quitar»; el que está elegido, con su número en vino */
.editor-pines-lista { display: grid; margin: 0; padding: 0; list-style: none; }
.editor-pines-lista > li { display: grid; grid-template-columns: 36px minmax(0, 1fr); gap: 8px 12px; align-items: start; padding: 12px 0; }
.editor-pines-lista > li + li { border-top: 1px solid var(--linea); }
.editor-pines-lista > li > :not(.n) { grid-column: 2; }
.editor-pines-lista .n { grid-row: 1 / span 3; display: grid; place-items: center; width: 36px; height: 36px; border-radius: 50%; background: var(--papel-2); color: var(--vino); font: 500 19px/1 var(--f-display); }
.editor-pines-lista > li[data-elegido] .n { background: var(--vino); color: var(--crema); }
.editor-pines-lista label { display: grid; gap: 4px; font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.editor-pines-lista input[type="text"] { width: 100%; min-height: 48px; padding: 11px 14px; border-radius: 14px; border: 1.5px solid var(--linea); background: var(--hoja); color: var(--tinta); font: 600 16px var(--f-texto); }
.editor-pines-lista input[type="text"]:focus { outline: none; border-color: var(--vino); box-shadow: 0 0 0 3px var(--oro-claro); }
.editor-pines-lista .btn, .editor-pines > .btn { justify-self: start; width: auto; min-height: var(--blanco); padding: 0 18px; border-radius: var(--r-pastilla); }

/* ---- Otras preguntas que propone el documento (2026-10-15): debajo del editor de la pregunta de una lección del curso, cada pregunta que
   el documento propuso con su clase en una palabra, la pregunta, el renglón del documento y «Usar esta»; y la línea quieta del autoguardado
   junto a los botones del editor. Sólo tokens. ---- */
.candidatas { display: grid; gap: var(--e-3); }
.candidatas h3 { margin: 0; font-size: var(--t-apoyo); font-weight: 700; color: var(--vino); }
.candidata { display: grid; justify-items: start; gap: var(--e-2); padding: var(--e-3) var(--e-4); border-radius: var(--r-chico); background: var(--papel); }
.candidata[data-en-uso] { background: var(--verde-claro); }
.candidata .texto { margin: 0; font-weight: 700; color: var(--tinta); overflow-wrap: anywhere; }
.candidata .note { margin: 0; overflow-wrap: anywhere; }
.editor-cab .botones .autoguardado { order: 1; flex: 1 0 100%; margin: 0; min-height: 1.4em; text-align: right; color: var(--gris); }
.editor-cab .botones .autoguardado[data-estado="error"] { color: var(--rojo); font-weight: 700; }

/* ---- D103 · la costura del ingreso (ronda 23, S23-1; palabras de PALABRAS-23 P2): cuatro pasos — Expediente N de M · Hoja para Buk · En
   Buk · En la app —, cada uno su nombre sobre su línea: gris con el punto hueco = falta («Faltan 3», «Sin descargar»…), verde con su
   palomita y su día = hecho («Completo», «Descargada el 15 oct · RH»…). Cuatro columnas desde 760 px de caja; abajo, dos filas de dos. El
   día nunca se parte. Nunca una barra de avance: cada paso es su propia ficha. Sólo tokens. ---- */
.costura-caja { container-type: inline-size; }
.costura { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--e-2); margin: 0; padding: 0; list-style: none; }
@container (min-width: 760px) { .costura { grid-template-columns: repeat(4, minmax(0, 1fr)); } }
.costura > li { display: grid; align-content: start; gap: 2px; min-height: var(--blanco); padding: 8px 12px 9px; border-radius: var(--r-chico); background: var(--papel-2); color: var(--gris); }
.costura > li[data-estado="hecho"] { background: var(--verde-claro); color: var(--verde-tinta); }
.costura .que { font-size: var(--t-apoyo); font-weight: 700; line-height: 1.3; color: var(--tinta); }
.costura > li[data-estado="hecho"] .que { color: var(--verde-tinta); }
.costura .linea { display: flex; align-items: flex-start; gap: 6px; font-size: var(--t-apoyo); font-weight: 600; line-height: 1.3; text-wrap: balance; }
.costura .linea .ico { width: 16px; height: 16px; flex: none; margin-top: 2px; }
.costura .pendiente { width: 12px; height: 12px; flex: none; margin: 4px 2px 0; border: 1.5px solid currentColor; border-radius: 50%; }
.costura .fecha { white-space: nowrap; }

/* ---- D104 · una fila de documento (ronda 23, S23-4/S23-5): el nombre; bajo él su estado (Falta gris · Subido terracota · Revisado verde) y
   «Lo vio RH N veces», apagado; «Abrir» a la derecha. El estado va bajo el nombre para que el nombre largo quepa en 390. ---- */
.fila-documento { align-items: flex-start; }
.fila-documento > .chip { flex: none; align-self: center; }
.fila-documento .txt .linea { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; margin-top: 6px; }
.fila-documento .txt .linea .s { margin-top: 0; }
.fila-documento .txt .linea .pill { padding: 2px 10px; }

/* ---- D105 · el contrato firmado (ronda 23, S23-5): el tile de RH — qué toma, el avance de la subida, lo hecho o el rechazo con sus
   palabras. Mismo papel que D102. ---- */
.tile-contrato { display: grid; gap: var(--e-3); padding: var(--e-4); border-radius: var(--r-tarjeta); background: var(--papel); }
.tile-contrato > h3 { display: flex; align-items: center; gap: 8px; margin: 0; font-size: 18px; font-weight: 700; color: var(--tinta); }
.tile-contrato > h3 .ico { width: 22px; height: 22px; color: var(--vino); }
/* R23-D4 (design's review): the person's «Ingreso» — the strip and the contract's tile in one grid, 12 px apart. */
.ingreso-pila { display: grid; gap: var(--e-3); }
.tile-contrato :is(.inicial, .guardado) { display: grid; gap: 10px; justify-items: start; }
.tile-contrato .subiendo { display: grid; gap: 10px; }
.tile-contrato :is(.note, .reloj, .listo, .falla) { margin: 0; }
.tile-contrato .reloj { font-weight: 700; color: var(--gris); }
.tile-contrato .avance { display: block; height: 6px; overflow: hidden; border-radius: 3px; background: var(--linea); }
.tile-contrato .avance > i { display: block; height: 100%; background: var(--vino); transform-origin: 0 50%; transition: transform var(--d-2) var(--suave); }
.tile-contrato .listo { display: flex; align-items: center; gap: 8px; font-weight: 700; color: var(--verde-tinta); }
.tile-contrato .listo .ico { width: 20px; height: 20px; color: var(--verde); }
.tile-contrato .falla { padding: 10px 12px; border-radius: var(--r-chico); background: var(--rojo-claro); color: var(--rojo); font-weight: 700; }
.tile-contrato .acciones { display: flex; flex-wrap: wrap; gap: 10px; }
.tile-contrato .btn { display: inline-flex; width: auto; min-width: 0; min-height: var(--blanco); padding-inline: 20px; }
.tile-contrato label.btn { position: relative; cursor: pointer; }
.tile-contrato label.btn input[type="file"] { position: absolute; inset: 0; width: 100%; height: 100%; min-height: 0; margin: 0; padding: 0; border: 0; opacity: 0; cursor: pointer; }
.tile-contrato label.btn:has(input:focus-visible) { outline: 3px solid var(--oro-claro); outline-offset: 2px; }
@media (prefers-reduced-motion: reduce) { .tile-contrato .avance > i { transition: none; } }

/* ---- D106 · la semana por tipo (ronda 24, /rh/registro/semana): una casa, sus semanas cerradas en columnas («Reloj» · «Buk»), un renglón
   por tipo; coincide = la palomita, difiere = lo de Buk menos lo del reloj en terracota, Buk no lo lleva = «—»; la última columna dice en
   cuántas semanas coinciden. Nunca un peso. Sobre la matriz del kit (.matriz-marco/.matriz). ---- */
.semana-tipos { display: grid; gap: 10px; min-width: 0; }
.semana-tipos > * { min-width: 0; }
.semana-tipos .acuerdo-casa { margin: -4px 0 0; font-weight: 700; color: var(--tinta); }
.semana-tipos + .semana-tipos { margin-top: var(--e-seccion); }
.semana-tabla { table-layout: fixed; min-width: 760px; }
.semana-tabla th:first-child { width: 214px; min-width: 0; }
.semana-tabla :is(th, td).acuerdo { width: 150px; }
.semana-tabla thead th.sem { border-bottom: 0; padding-bottom: 2px; color: var(--tinta); }
.semana-tabla thead th.sem small { display: block; font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.semana-tabla thead th.lado { padding-top: 2px; font-size: var(--t-apoyo); }
.semana-tabla :is(th.lado.buk, td.buk) { box-shadow: inset -1px 0 0 var(--linea); }
.semana-tabla td.n { min-width: 64px; font-variant-numeric: tabular-nums; font-weight: 700; color: var(--tinta); }
.semana-tabla td.buk > span { display: inline-flex; align-items: center; gap: 4px; }
.semana-tabla td.buk .ico { width: 16px; height: 16px; color: var(--verde); }
.semana-tabla td.buk[data-coincide="difiere"] { background: var(--espera-claro); color: var(--espera-tinta); }
.semana-tabla td.buk .dif { font-size: var(--t-apoyo); font-weight: 700; color: var(--espera-tinta); }
.semana-tabla td.buk:is([data-coincide="sin_buk"], [data-coincide="sin_reloj"]) { color: var(--gris); font-weight: 600; }
.semana-tabla td.acuerdo { min-width: 120px; text-align: left; font-weight: 700; color: var(--espera-tinta); white-space: nowrap; }
.semana-tabla td.acuerdo[data-todo="si"] { color: var(--verde-tinta); }
.semana-tipos .semana-que { margin: 0; }
.semana-tabla tbody th .regla { display: inline-block; margin-top: 4px; white-space: nowrap; padding: 1px 8px; border-radius: var(--r-pastilla); font-size: var(--t-apoyo); font-weight: 700; background: var(--azul-claro); color: var(--azul-tinta); }
.semana-tabla tbody th .regla[data-regla="por_confirmar"] { background: var(--espera-claro); color: var(--espera-tinta); }
.semana-ayudas { display: grid; gap: 6px; margin: 0; padding: 12px 16px; border-radius: var(--r-tarjeta); background: var(--papel); }
.semana-ayudas > div { display: grid; grid-template-columns: minmax(150px, 220px) minmax(0, 1fr); gap: 2px 12px; }
.semana-ayudas dt { font-weight: 700; color: var(--tinta); }
.semana-ayudas dd { margin: 0; font-size: var(--t-apoyo); color: var(--gris); }
@media (max-width: 719.98px) { .semana-ayudas > div { grid-template-columns: 1fr; } }

/* ---- D107 · una diferencia (ronda 24): quién, la semana y el tipo, «Lo que vio el reloj» junto a «Lo que capturó RH», y una línea de por
   qué. En 390 los dos lados bajan bajo el nombre. ---- */
.diferencia { display: grid; grid-template-columns: 40px minmax(0, 1fr) auto; align-items: center; gap: 4px 12px; padding: 12px 16px; color: inherit; text-decoration: none; }
.diferencia + .diferencia { border-top: 1px solid var(--linea); }
.diferencia .ini { display: grid; place-items: center; width: 40px; height: 40px; border-radius: 50%; background: var(--crema); color: var(--vino); font-weight: 700; }
.diferencia .txt { display: grid; gap: 2px; min-width: 0; }
.diferencia .txt b { font-weight: 700; color: var(--tinta); }
.diferencia .txt small { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.diferencia .porque { font-size: var(--t-apoyo); color: var(--tinta); }
.diferencia .lados { display: flex; gap: 8px; }
.diferencia .lado { display: grid; gap: 2px; min-width: 132px; padding: 8px 12px; border-radius: var(--r-chico); background: var(--crema); }
.diferencia .lado.rh { background: var(--espera-claro); }
.diferencia .lado small { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.diferencia .lado.rh small { color: var(--espera-tinta); }
.diferencia .lado b { font: 500 24px/1.1 var(--f-display); color: var(--vino); font-variant-numeric: tabular-nums; }
.diferencia .lado.rh b { color: var(--espera-tinta); }
@media (max-width: 719.98px) { .diferencia { grid-template-columns: 40px minmax(0, 1fr); } .diferencia .lados { grid-column: 1 / -1; } .diferencia .lado { flex: 1 1 0; min-width: 0; } }

/* ---- D108 · el código de emparejamiento (ronda 24, /rh/registro/relojes): se ve una sola vez, al dar de alta el reloj — de quién es, los
   ocho caracteres en dos grupos con la letra grande para dictárselos al reloj, y cuándo vence. ---- */
.codigo-reloj { display: grid; gap: 6px; padding: 14px 16px; border-radius: var(--r-chico); background: var(--hoja); border: 1.5px dashed var(--vino); }
.codigo-reloj .k { margin: 0; font-size: var(--t-apoyo); font-weight: 700; color: var(--gris); }
.codigo-reloj b { display: flex; flex-wrap: wrap; gap: 0 .5em; font: 500 34px/1.1 var(--f-display); letter-spacing: .08em; color: var(--vino); }
.codigo-reloj .note { margin: 0; }

/* ---- D110 · el saldo en nuestras palabras (ronda 24, persona.yo.dias): la ley (LFT 76), los tomados (en la app · antes de la app), te
   quedan; junto, lo que dice Buk con su nombre, y una línea cuando no coinciden. Nunca un número sin su fuente. ---- */
.saldo-nuestro { margin-top: 14px; }
.saldo-nuestro .panel { display: grid; gap: 12px; }
.saldo-nuestro .cuentas { display: grid; gap: 8px; margin: 0; }
.saldo-nuestro .cuentas > div { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }
.saldo-nuestro dt { display: grid; gap: 2px; font-size: var(--t-apoyo); font-weight: 700; color: var(--tinta); }
.saldo-nuestro dt small { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.saldo-nuestro dd { margin: 0; font-weight: 700; color: var(--vino); white-space: nowrap; font-variant-numeric: tabular-nums; }
.saldo-nuestro .total { padding-top: 8px; border-top: 1px solid var(--linea); }
.saldo-nuestro .total dt { font-size: var(--t-cuerpo); }
.saldo-nuestro .total dd { font: 500 28px/1 var(--f-display); }
.saldo-nuestro .buk { display: grid; gap: 8px; padding: 12px 14px; border-radius: var(--r-chico); background: var(--crema); }
.saldo-nuestro .buk p { margin: 0; }
.saldo-nuestro .en-buk { font-weight: 700; color: var(--tinta); }
.saldo-nuestro .por-que { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.saldo-nuestro .sin-antiguedad { margin: 0; font-weight: 700; color: var(--tinta); }
.saldo-nuestro .saldo-dif { margin: 0; font-size: var(--t-apoyo); font-weight: 600; color: var(--espera-tinta); }
.v2-misdias .ayuda { margin: 0; font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }

/* ---- D111 · la semana de una casa (ronda 28, rh.prenomina.hoja): las personas en renglones, los tipos en columnas bajo su unidad («Días» ·
   «Horas»), «faltan N por resolver» arriba, cuántas por resolver en cada renglón (con el riel rojo del héroe) y el total de la casa al pie; el
   cero se apaga para que lo contado resalte, y un tipo que no entra a los archivos de Buk se lee como información (cifra quieta, su marca ¹ en
   la cabeza y la razón bajo la tabla): lo que va en negritas es lo que llevan los archivos. Nunca un peso. Sobre la matriz del kit
   (.matriz-marco/.matriz): a 390 corre de lado dentro de su marco con la persona fija. ---- */
.hoja-semana { display: grid; gap: 12px; min-width: 0; }
.hoja-semana > * { min-width: 0; }
.hoja-cabeza p { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 8px; }
.hoja-chip { display: inline-flex; align-items: center; padding: 1px 10px; border-radius: var(--r-pastilla); font-weight: 700; background: var(--hoja); color: var(--tinta); }
.hoja-prueba { margin: 0; padding: 10px 14px; border-radius: var(--r-chico); background: var(--azul-claro); color: var(--azul-tinta); font-weight: 600; }
.hoja-prueba b { margin-right: 6px; }
.hoja-tabla th:first-child { min-width: 200px; max-width: 240px; }
.hoja-tabla thead th { vertical-align: bottom; }
/* the second head row's first cell is a type, not the pinned person: .matriz's `th:first-child` must not pin or widen it */
.hoja-tabla thead tr + tr > th:first-child { position: relative; min-width: 56px; max-width: none; text-align: center; background: transparent; }
.hoja-tabla thead tr + tr > th:first-child:not([data-borde]) { box-shadow: none; }
.hoja-tabla thead th.unidad { padding-bottom: 4px; border-bottom: 0; white-space: normal; color: var(--tinta); }
.hoja-tabla thead th.tipo { position: relative; min-width: 56px; padding: 4px 8px 10px; white-space: normal; line-height: 1.2; color: var(--tinta); }
.hoja-tabla thead th.tipo[data-en-archivo="no"] { color: var(--gris); }
.hoja-tabla thead th.tipo sup, .hoja-notas sup { margin-left: 1px; font-weight: 700; line-height: 0; color: var(--espera-tinta); }
.hoja-tabla thead th.tipo[data-regla="por_confirmar"] { text-decoration: underline dotted var(--espera); text-underline-offset: 5px; }
.hoja-tabla :is(th, td)[data-borde] { box-shadow: inset -1px 0 0 var(--linea); }
.hoja-tabla td.n { min-width: 56px; padding-inline: 8px; font-variant-numeric: tabular-nums; font-weight: 700; color: var(--vino); }
.hoja-tabla td.n[data-en-archivo="no"] { font-weight: 500; color: var(--tinta); }
.hoja-tabla td.n[data-cero] { font-weight: 500; color: var(--gris); }
.hoja-tabla .quien { display: flex; align-items: center; gap: 10px; min-height: var(--blanco); color: inherit; text-decoration: none; }
.hoja-tabla .quien .ini { flex: none; display: grid; place-items: center; width: 36px; height: 36px; border-radius: 50%; background: var(--crema); color: var(--vino); font-weight: 700; }
.hoja-tabla .quien .txt { display: grid; min-width: 0; }
.hoja-tabla .quien b { font-weight: 700; color: var(--tinta); overflow-wrap: anywhere; }
.hoja-tabla .quien small { font-weight: 600; color: var(--gris); }
.hoja-tabla a.quien:hover b { text-decoration: underline; text-underline-offset: 3px; }
.hoja-tabla a.quien:focus-visible { outline: 3px solid var(--oro-claro); outline-offset: 2px; border-radius: var(--r-chico); }
.hoja-tabla tbody tr:not([data-excepciones="0"]) > th:first-child { box-shadow: inset 5px 0 0 var(--rojo), inset -1px 0 0 var(--linea); }
.hoja-tabla :is(th, td).pend { position: relative; min-width: 0; white-space: normal; }
.hoja-tabla td.pend .pill { min-width: 32px; justify-content: center; font-variant-numeric: tabular-nums; }
.hoja-tabla td.pend .nada { color: var(--gris); }
.hoja-tabla tfoot :is(th, td) { border-top: 2px solid var(--linea); border-bottom: 0; font-weight: 700; color: var(--tinta); }
.hoja-tabla tfoot td.n:not([data-cero]) { color: var(--tinta); }
.hoja-tabla tfoot td.n[data-en-archivo="no"] { font-weight: 500; }
.hoja-tabla .sr { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
.hoja-notas { display: grid; gap: 4px; margin: 0; padding: 0; list-style: none; font-weight: 600; color: var(--gris); }
.hoja-notas sup { margin: 0 2px 0 0; }
.hoja-sin { margin: 0; }
.hoja-que .semana-ayudas { margin-top: 4px; }
.hoja-que .regla { display: inline-block; margin-left: 8px; padding: 1px 8px; border-radius: var(--r-pastilla); font-weight: 700; white-space: nowrap; background: var(--azul-claro); color: var(--azul-tinta); }
.hoja-que .regla[data-regla="por_confirmar"] { background: var(--espera-claro); color: var(--espera-tinta); }
@media (max-width: 719.98px) { .hoja-tabla th:first-child { min-width: 150px; max-width: 170px; } .hoja-tabla .quien .ini { display: none; } }

/* ---- D112 · lo que bloquea la aprobación (ronda 28, rh.prenomina.excepcion): qué está mal, «Corrígelo donde nació» con UN enlace al lugar
   donde nació el dato —aquí nunca se edita—, y el par «Volver a revisar» / «Así se queda»; el segundo va doblado y pide la nota de RH, para
   que nunca sea el toque fácil. La fila de la hoja lleva la misma excepción con el riel del héroe (rojo: bloquea). ---- */
.excepcion { display: grid; min-width: 0; }
.excepcion-nota { font-weight: 700; }
.excepcion-hechos { display: grid; margin: 0; }
.excepcion-hechos > div { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; padding: 9px 0; font-weight: 600; }
.excepcion-hechos > div + div { border-top: 1px solid var(--linea); }
.excepcion-hechos dt { color: var(--gris); }
.excepcion-hechos dd { margin: 0; font-weight: 700; color: var(--vino); text-align: right; }
.excepcion-donde .panel { display: grid; gap: 12px; }
.excepcion-donde .donde { margin: 0; font-weight: 600; color: var(--tinta); }
.excepcion-donde .note { margin: 0; }
.excepcion-par { display: grid; gap: 14px; }
.excepcion-aviso { margin: 0; padding: 12px 14px; border-radius: var(--r-chico); background: var(--espera-claro); color: var(--espera-tinta); font-weight: 700; }
.excepcion-revisar { display: grid; gap: 8px; }
.excepcion-revisar .note { margin: 0; }
.excepcion-asi { padding-top: 4px; border-top: 1px solid var(--linea); }
.excepcion-asi summary { display: flex; align-items: center; gap: 8px; min-height: var(--blanco); font-weight: 700; color: var(--vino); cursor: pointer; list-style: none; }
.excepcion-asi summary::-webkit-details-marker { display: none; }
.excepcion-asi summary:focus-visible { outline: 3px solid var(--oro-claro); outline-offset: 2px; border-radius: var(--r-chico); }
.excepcion-asi form { display: grid; gap: 10px; margin-top: 6px; }
.excepcion-asi .note { margin: 0; }
@media (min-width: 960px) { .excepcion :is(.excepcion-donde, .excepcion-par) .btn { justify-self: start; } }
.excepcion-hogares { display: grid; gap: 10px; }
.excepcion-hogares .hogar { display: grid; gap: 12px; align-content: start; padding: 14px 16px; border: 1.5px solid transparent; border-radius: var(--r-tarjeta); background: var(--papel); color: inherit; text-decoration: none; }
.excepcion-hogares a.hogar { grid-template-columns: minmax(0, 1fr) auto; align-items: center; }
.excepcion-hogares a.hogar:hover { border-color: var(--vino); }
.excepcion-hogares a.hogar:focus-visible { outline: 3px solid var(--oro-claro); outline-offset: 2px; }
.excepcion-hogares .hogar .txt { display: grid; gap: 4px; min-width: 0; }
.excepcion-hogares .hogar b { font-weight: 700; color: var(--vino); }
.excepcion-hogares .hogar .txt > span { font-weight: 600; line-height: 1.35; color: var(--gris); }
.excepcion-hogares .hogar > .ico { width: 18px; height: 18px; color: var(--vino); }
.excepcion-hogares .hogar .btn { justify-self: start; }
.excepcion-hogares .excepcion-asi { padding-top: 0; border-top: 1px solid var(--linea); }
.excepcion-fila { display: flex; align-items: center; gap: 12px; min-height: 64px; padding: 12px 14px; border-left: 6px solid var(--rojo); border-radius: 14px; background: var(--rojo-claro); color: inherit; text-decoration: none; }
.excepcion-fila + .excepcion-fila { margin-top: 8px; }
.excepcion-fila[data-estado="resuelta"] { border-left-color: var(--verde); background: var(--verde-claro); }
.excepcion-fila[data-estado="descartada"] { border-left-color: var(--gris-claro); background: var(--papel); }
.excepcion-fila .txt { display: grid; flex: 1; gap: 3px; min-width: 0; }
.excepcion-fila .t { font-weight: 700; line-height: 1.25; color: var(--tinta); }
.excepcion-fila .s { font-weight: 600; line-height: 1.35; color: var(--gris); }
.excepcion-fila .ico { flex: none; width: 18px; height: 18px; color: var(--gris); }
.excepcion-fila:focus-visible { outline: 3px solid var(--oro-claro); outline-offset: 2px; }

/* ---- D113 · la semana de una persona (ronda 28, rh.prenomina.hoja.persona): arriba lo que suma por tipo; abajo sus siete días, cada uno con
   sus checadas, lo programado (el turno o su semana, con su fuente), sus días aprobados, y lo que cuenta: cada fila con su cantidad y, debajo,
   de dónde sale. Lo que bloquea lleva el riel rojo; lo que RH dejó así, tachado en gris. A 1280 cada día es un renglón de cuatro columnas; a
   390, el día a la izquierda y lo demás apilado. ---- */
.hoja-persona { display: grid; gap: 12px; min-width: 0; }
.hoja-persona .section-head { margin: 8px 0 0; }
.persona-totales { display: flex; flex-wrap: wrap; gap: 10px; margin: 0; }
.persona-totales > div { display: grid; gap: 4px; min-width: 132px; padding: 12px 16px; border-radius: var(--r-tarjeta); background: var(--papel); }
.persona-totales dt { font-weight: 700; color: var(--gris); }
.persona-totales dd { margin: 0; font: 500 26px/1.1 var(--f-display); font-variant-numeric: tabular-nums; color: var(--vino); }
.persona-totales > div[data-en-archivo="no"] dd { color: var(--tinta); }
.persona-sin { margin: 0; }
.persona-dias { display: grid; margin: 0; padding: 0; list-style: none; border-radius: var(--r-tarjeta); background: var(--papel); }
.persona-dia { display: grid; grid-template-columns: 88px minmax(0, 1fr); gap: 10px 14px; padding: 14px 16px; }
.persona-dia + .persona-dia { border-top: 1px solid var(--linea); }
.persona-dia .cuando { display: grid; grid-row: span 3; align-content: start; gap: 2px; }
.persona-dia .cuando b { font-weight: 700; color: var(--tinta); text-transform: capitalize; }
.persona-dia .cuando small { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.persona-dia :is(.checadas, .programado) { display: grid; align-content: start; gap: 4px; min-width: 0; }
.persona-dia .k { font-weight: 700; color: var(--gris); }
.persona-dia .marca { font-weight: 700; font-variant-numeric: tabular-nums; color: var(--tinta); }
.persona-dia .marca[data-sin-salida] { color: var(--rojo); }
.persona-dia .nada { font-weight: 600; color: var(--gris); }
.persona-dia .programado > span:not(.k):not(.etiquetas):not(.nada) { display: grid; font-weight: 700; color: var(--tinta); }
.persona-dia .programado small { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.persona-dia .etiquetas { display: flex; flex-wrap: wrap; gap: 6px; }
.persona-dia .etiqueta { padding: 2px 10px; border-radius: var(--r-pastilla); font-weight: 700; background: var(--azul-claro); color: var(--azul-tinta); }
.persona-dia[data-festivo="por_confirmar"] .etiqueta:last-child { background: var(--espera-claro); color: var(--espera-tinta); }
.persona-dia .cuenta { display: grid; align-content: start; gap: 8px; margin: 0; padding: 0; list-style: none; }
.persona-dia .cuenta > li { display: grid; gap: 2px; padding-left: 12px; border-left: 3px solid var(--linea); }
.persona-dia .cuenta > li[data-estado="excepcion"] { border-left-color: var(--rojo); }
.persona-dia .cuenta > li[data-estado="excluida"] { border-left-color: var(--gris-claro); }
.persona-dia .cuenta > li[data-estado="excluida"] .cuanto { text-decoration: line-through; color: var(--gris); }
.persona-dia .cuenta > li.nada { padding-left: 0; border-left: 0; }
.persona-dia .cuenta .que { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 10px; }
.persona-dia .cuenta .que b { font-weight: 700; color: var(--tinta); }
.persona-dia .cuenta .cuanto { font-weight: 700; font-variant-numeric: tabular-nums; color: var(--vino); }
.persona-dia .cuenta > li[data-en-archivo="no"] .cuanto { font-weight: 600; color: var(--tinta); }
.persona-dia .cuenta .pill { padding: 2px 10px; }
.persona-dia .cuenta .origen { font-weight: 600; color: var(--gris); }
.persona-dia .cuenta .origen a { color: var(--vino); text-underline-offset: 3px; }
.persona-dia .cuenta .motivo { color: var(--tinta); }
@media (min-width: 960px) {
  .persona-dia { grid-template-columns: 104px minmax(140px, .8fr) minmax(170px, 1fr) minmax(0, 1.5fr); align-items: start; }
  .persona-dia .cuando { grid-row: auto; }
}

/* ---- D114 · los archivos para Buk (ronda 28, rh.prenomina.enviar): «Lista para enviar: 0 pendientes», los dos archivos con sus filas y su
   descarga, los tres pasos, y «Ya lo subí a Buk» como el clic de RH después de subirlos ella: la app no manda nada y nada aquí dice que mandó.
   D115 · una casa de las seis (rh.prenomina): su estado con el tinte del estado (abierta · aprobada · enviada), nunca un color por cuántos;
   su línea y sus cuentas en tinta. ---- */
.tile-enviar { display: grid; gap: 12px; min-width: 0; }
.archivos-buk { display: grid; margin: 0; padding: 0; list-style: none; border-radius: var(--r-tarjeta); background: var(--papel); }
.archivos-buk > li { display: grid; grid-template-columns: 40px minmax(0, 1fr); align-items: center; gap: 10px 14px; padding: 14px 16px; }
.archivos-buk > li + li { border-top: 1px solid var(--linea); }
.archivos-buk .ico-doc { display: grid; place-items: center; width: 40px; height: 40px; border-radius: var(--r-chico); background: var(--crema); color: var(--vino); }
.archivos-buk .ico-doc .ico { width: 22px; height: 22px; }
.archivos-buk .txt { display: grid; gap: 2px; min-width: 0; }
.archivos-buk .txt b { font-weight: 700; color: var(--tinta); }
.archivos-buk .txt > span { font-weight: 600; line-height: 1.35; color: var(--gris); }
.archivos-buk .txt small { font-size: var(--t-apoyo); font-weight: 700; color: var(--vino); }
.archivos-buk .btn { grid-column: 2; justify-self: start; width: auto; min-height: var(--blanco); padding: 8px 18px; }
@media (min-width: 720px) { .archivos-buk > li { grid-template-columns: 40px minmax(0, 1fr) auto; } .archivos-buk .btn { grid-column: auto; } }
.enviar-aviso { margin: 0; padding: 10px 14px; border-radius: var(--r-chico); background: var(--espera-claro); color: var(--espera-tinta); font-weight: 700; }
.enviar-siguen { margin: 0; }
.enviar-pasos { display: grid; gap: 6px; margin: 0; padding: 0 0 0 22px; font-weight: 600; color: var(--tinta); }
.enviar-confirmar { display: grid; gap: 8px; }
.enviar-confirmar .note { margin: 0; }
@media (min-width: 960px) { .tile-enviar :is(form, .enviar-confirmar) .btn { justify-self: start; } }
.casa-prenomina { display: flex; align-items: center; gap: 12px; min-height: 72px; padding: 14px 16px; color: inherit; text-decoration: none; }
.casa-prenomina + .casa-prenomina { border-top: 1px solid var(--linea); }
.casa-prenomina .txt { display: grid; flex: 1; gap: 2px; min-width: 0; }
.casa-prenomina .txt b { font-weight: 700; color: var(--tinta); }
.casa-prenomina .linea { font-weight: 600; color: var(--tinta); }
.casa-prenomina small { font-size: var(--t-apoyo); font-weight: 600; color: var(--gris); }
.casa-prenomina .hoja-chip { flex: none; padding: 3px 12px; }
.casa-prenomina .hoja-chip[data-estado="abierta"] { background: var(--espera-claro); color: var(--espera-tinta); }
.casa-prenomina .hoja-chip[data-estado="aprobada"] { background: var(--verde-claro); color: var(--verde-tinta); }
.casa-prenomina .hoja-chip[data-estado="enviada"] { background: var(--azul-claro); color: var(--azul-tinta); }
.casa-prenomina > .ico { flex: none; width: 18px; height: 18px; color: var(--gris); }
a.casa-prenomina:focus-visible { outline: 3px solid var(--oro-claro); outline-offset: -3px; border-radius: var(--r-tarjeta); }

/* ---- D116 · un paso después del sí de Jorge (round 27, rh.personas.despliegue; SONATA.md): su número, quién y qué, cómo ver que funcionó,
   cómo se deshace y cuánto tarda; «con el sí de Jorge» cuando espera por él. Se lee, nunca se corre desde aquí: ningún paso lleva botón ni
   enlace, tampoco el que manda la invitación. ---- */
.paso-fila { display: grid; grid-template-columns: 36px minmax(0, 1fr); gap: 10px 14px; padding: 14px 16px; }
.paso-fila + .paso-fila { border-top: 1px solid var(--linea); }
.paso-fila .n { display: grid; place-items: center; width: 36px; height: 36px; border-radius: 50%; background: var(--papel-2); color: var(--vino); font-weight: 700; }
.paso-fila .txt { display: grid; gap: 8px; min-width: 0; }
.paso-fila .que { margin: 0; font-weight: 600; line-height: 1.35; color: var(--tinta); }
.paso-fila .que b { font-weight: 700; }
.paso-fila .sr { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
.paso-lineas { display: grid; gap: 6px; margin: 0; }
.paso-lineas > div { display: grid; align-content: start; gap: 2px; }
.paso-lineas dt { display: flex; align-items: center; gap: 6px; font-weight: 700; color: var(--gris); }
.paso-lineas dt .ico { width: 16px; height: 16px; flex: none; }
.paso-lineas dd { margin: 0; padding-left: 22px; font-weight: 600; line-height: 1.35; color: var(--tinta); }
.paso-fila > .pill { grid-column: 2; justify-self: start; }
@media (min-width: 960px) {
  .paso-fila { grid-template-columns: 36px minmax(0, 1fr) auto; align-items: start; }
  .paso-fila > .pill { grid-column: auto; }
  .paso-lineas { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; }
}
