diff --git a/SPEC.md b/SPEC.md index 0decca3..3cdbd51 100644 --- a/SPEC.md +++ b/SPEC.md @@ -95,7 +95,16 @@ cancela demo y flujos (interactivity.js envuelve `WAM.render`). `#pantalla`: título = `boton`, filas `button.sheet-fila[data-sec][data-fila]`, botón `.sheet-cerrar`) - `WAM.abrirOpciones(i | Mensaje, li?)` → void: hoja "Todas las opciones" de un mensaje con >3 botones (la abre el propio B al pulsar `[data-ver-todas]`). Sus filas de respuesta llevan `data-opcion=""` - y B reenvía el clic al `[data-btn=""]` oculto de la burbuja, que atiende la delegación normal de main.js. + y B reenvía el clic al `[data-btn=""]` oculto de la burbuja, que atiende la delegación normal de main.js + (busca la fila viva en el momento del clic). `renderMensaje` de un mensaje cuya hoja está abierta la cierra + (re-render parcial del editor), así la hoja nunca queda desfasada. +- `scrollAbajo()` es instantáneo (ignora `scroll-behavior`) y deja el chat "pegado abajo": mientras el usuario + no suba (>60 px del fondo), un ResizeObserver sobre `#chat-cuerpo` y sus filas vuelve a bajar cuando algo + crece (imágenes que decodifican tarde, pestaña Vista previa que pasa a visible). +- Documento: campo opcional `tamano` (y `headerTamano` en la cabecera de plantilla) → subtítulo + "243 KB • pdf"; sin él, solo la extensión en mayúsculas ("PDF"). +- Hooks de CSS (css/iphone.css): `body[data-wam-zoom="100"|"125"]` fija la escala del teléfono (sin + atributo = ajuste automático); en ≤ 520 px el teléfono va sin marco salvo con `body.con-marco`. - `WAM.tick(estado)` → string SVG inline (✓ / ✓✓ del color de la hora; ✓✓ leído azul iOS `#027bfc`) - Botones del teléfono: `