Files
whatsapp-api-mockup/css/whatsapp.css
T
urieljarethandClaude Opus 5.5 875ae9ad67 Deshacer con demo activa, avisos obsoletos, hoja de opciones y foco en hojas
- Deshacer/rehacer guardan y reponen «wam-demo-activa» con cada instantánea
  ({estado, activa}); «Actualizar» pide un segundo clic si el contenido cambió
  de cuenta o de número de mensajes respecto a la demo guardada.
- WAM.puntoDeshacer cierra los avisos con acción: su «Deshacer» ya no
  desharía el cambio que anuncian.
- «Todas las opciones» replica botonAccion: URL bloqueada o no válida se
  pinta como fila inerte (aria-disabled, sin data-opcion) en el grupo de
  enlaces.
- Hojas inferiores: enfocan la primera fila (o la X), retienen Tab dentro del
  panel y devuelven el foco al cerrar (origen, fila repintada o
  #chat-cuerpo); no roban el foco durante «Reproducir demo».
- Tests e2e de regresión en tests/e2e/regresiones.spec.mjs.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-27 22:08:46 -06:00

883 lines
41 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* ==========================================================================
css/whatsapp.css — dueño B (módulo B: chat de WhatsApp dentro del iPhone)
Todo bajo `.wa` (#pantalla). Aspecto de WhatsApp iOS 2025–2026 según
docs/referencias/README.md (hex medidos sobre capturas reales).
Clases: .wa-row .in .out .ultimo .bubble .meta .tick .tick-read, cola
abajo con clip-path, .qr-btns .qr-btn (+ .qr-ico), .tpl-*, .carousel .card,
.doc-* .audio-* .loc-* .contact-* .sticker-*, .wa-sistema, .sheet*.
Keyframes con prefijo wam-.
========================================================================== */
/* ---------- 1. Tokens — modo claro ---------- */
.wa {
--wa-bg-chat: #f4f1ec; /* wall [medido] */
--wa-doodle: #e8e0d4; /* trazo tostado cálido [medido] */
--wa-bubble-in: #ffffff;
--wa-bubble-out: #d9fdd3;
--wa-text: #000000;
--wa-text-meta: #7f7f7f; /* hora / footer en entrante [medido] */
--wa-meta-out: #6b7d68; /* hora en saliente, gris verdoso [medido] */
--wa-link: #027eb5;
--wa-tick-read: #027bfc; /* ✓✓ leído, azul iOS [medido] */
--wa-action: #408559; /* texto/icono de botones [medido] */
--wa-btn-sep: rgba(0, 0, 0, .2); /* separador de botones (≈ #cccccc) */
--wa-chrome: #f4f3f2; /* header + barra del composer [medido] */
--wa-chrome-text: #000000;
--wa-header-icon: #8e8e93;
--wa-compose-bar: #f4f3f2;
--wa-compose-field: #ffffff;
--wa-compose-border: #d1d1d6;
--wa-separator: rgba(0, 0, 0, .08);
--wa-accent: #1daa61; /* verde de marca (escribiendo…, enviar) */
--wa-panel: #f6f5f4; /* panel interno de documento [medido] */
--wa-aviso: #ffefd1; /* aviso de cifrado [medido] */
--wa-aviso-text: #1f1f1f;
--wa-fecha: rgba(255, 255, 255, .92);
--wa-sheet: #ffffff;
--wa-sheet-sub: #757778;
--wa-sheet-sep: #c6c6c8;
--wa-sheet-close: #eeeeef;
--wa-sheet-x: #838388;
--wa-velo: rgba(0, 0, 0, .26);
--wa-sistema-text: #54595c;
/* posición la fija .pantalla (A: absolute inset 0); B aísla el
apilamiento para el doodle en z-index:-1 y ancla .sheet */
isolation: isolate;
overflow: hidden;
background: var(--wa-bg-chat);
color: var(--wa-text);
font-family: -apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro",
"Helvetica Neue", Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
letter-spacing: -.2px; /* tracking de SF Pro a 17 pt */
}
/* ---------- 2. Tokens — modo oscuro (iOS: negro neutro) ---------- */
.wa.oscuro {
--wa-bg-chat: #0a0a0a;
--wa-doodle: #1f2121;
--wa-bubble-in: #232626; /* [medido] */
--wa-bubble-out: #004f35; /* [medido] */
--wa-text: #ffffff;
--wa-text-meta: #8d9494;
--wa-meta-out: #8fb3a3;
--wa-link: #4fb6ec;
--wa-tick-read: #29abff; /* [medido en App Store] */
--wa-action: #21c063;
--wa-btn-sep: rgba(255, 255, 255, .12);
--wa-chrome: #121313;
--wa-chrome-text: #ffffff;
--wa-header-icon: #ffffff;
--wa-compose-bar: #232626; /* barra [medido]; el header sí es #121313 */
--wa-compose-field: #393c3c; /* [medido] */
--wa-compose-border: transparent;
--wa-separator: rgba(255, 255, 255, .10);
--wa-panel: #1b1d1d;
--wa-aviso: #2a2a26;
--wa-aviso-text: #e9e4d4;
--wa-fecha: #232626;
--wa-sheet: #1c1c1e;
--wa-sheet-sub: #8d8d93;
--wa-sheet-sep: #38383a;
--wa-sheet-close: #2c2c2e;
--wa-sheet-x: #a0a0a5;
--wa-velo: rgba(0, 0, 0, .5);
--wa-sistema-text: #b8bcbc;
}
/* ---------- 3. Doodle de fondo (máscara SVG embebida, sin red) ---------- */
.wa::before {
content: "";
position: absolute;
inset: 0;
z-index: -1;
pointer-events: none;
background-color: var(--wa-doodle);
-webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22300%22%20height%3D%22300%22%20viewBox%3D%220%200%20300%20300%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cg%20transform%3D%22translate%2818.6%2013.1%29%20scale%280.77%29%20rotate%28-15%2016%2016%29%22%20stroke-width%3D%221.63%22%3E%3Cpath%20d%3D%22M16%203l3.6%208.2%208.9.8-6.8%206%201.9%208.7L16%2022.2l-7.6%204.5%201.9-8.7-6.8-6%208.9-.8Z%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%2878.0%2012.9%29%20scale%280.75%29%20rotate%2823%2016%2016%29%22%20stroke-width%3D%221.66%22%3E%3Cpath%20d%3D%22M3%2015%2029%205l-8%2022-6-8ZM15%2019%2029%205%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28136.0%2014.7%29%20scale%280.80%29%20rotate%2817%2016%2016%29%22%20stroke-width%3D%221.57%22%3E%3Cpath%20d%3D%22M9%2024a6%206%200%200%201%200-12%208%208%200%200%201%2015%201%205.5%205.5%200%200%201%200%2011Z%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28191.0%2016.9%29%20scale%280.82%29%20rotate%28-16%2016%2016%29%22%20stroke-width%3D%221.53%22%3E%3Cpath%20d%3D%22M6%2020a10%2010%200%200%201%2020%200M6%2020v6h4v-8H6M26%2020v6h-4v-8h4%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28252.1%2017.6%29%20scale%280.82%29%20rotate%28-1%2016%2016%29%22%20stroke-width%3D%221.52%22%3E%3Cpath%20d%3D%22M10%2025a4%203%200%201%201-.1%200M14%2024V6c4%201%207%203.5%207%207%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%2842.9%2084.5%29%20scale%280.67%29%20rotate%2828%2016%2016%29%22%20stroke-width%3D%221.86%22%3E%3Cpath%20d%3D%22M16%2029S5.5%2018.8%205.5%2011.8a10.5%2010.5%200%200%201%2021%200C26.5%2018.8%2016%2029%2016%2029ZM16%208.6a3.4%203.4%200%201%201%200%206.8%203.4%203.4%200%200%201%200-6.8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28108.7%2085.0%29%20scale%280.66%29%20rotate%28-19%2016%2016%29%22%20stroke-width%3D%221.90%22%3E%3Cpath%20d%3D%22M16%203a8%209%200%200%201%200%2018%208%209%200%200%201%200-18M16%2021l-2%203h4ZM16%2024c1%203-1%204%200%206%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28168.8%2080.1%29%20scale%280.75%29%20rotate%28-13%2016%2016%29%22%20stroke-width%3D%221.68%22%3E%3Cpath%20d%3D%22M10%206h12v4a6%206%200%200%201-12%200ZM16%2016v8M11%2027h10%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28236.1%2078.6%29%20scale%280.67%29%20rotate%28-16%2016%2016%29%22%20stroke-width%3D%221.86%22%3E%3Cpath%20d%3D%22M16%2012.8a3.2%203.2%200%201%201%200%206.4%203.2%203.2%200%200%201%200-6.4M16%203.8a4.6%204.6%200%201%201%200%209.2%204.6%204.6%200%200%201%200-9.2M16%2019a4.6%204.6%200%201%201%200%209.2%204.6%204.6%200%200%201%200-9.2M7%2010a4.6%204.6%200%201%201%200%209.2%204.6%204.6%200%200%201%200-9.2M25%2010a4.6%204.6%200%201%201%200%209.2%204.6%204.6%200%200%201%200-9.2%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28285.1%2073.3%29%20scale%280.78%29%20rotate%2816%2016%2016%29%22%20stroke-width%3D%221.59%22%3E%3Cpath%20d%3D%22M16%204a12%2012%200%201%201%200%2024%2012%2012%200%200%201%200-24M16%209v7l5%203%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28-14.9%2073.3%29%20scale%280.78%29%20rotate%2816%2016%2016%29%22%20stroke-width%3D%221.59%22%3E%3Cpath%20d%3D%22M16%204a12%2012%200%201%201%200%2024%2012%2012%200%200%201%200-24M16%209v7l5%203%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%2816.3%20133.3%29%20scale%280.73%29%20rotate%2826%2016%2016%29%22%20stroke-width%3D%221.72%22%3E%3Cpath%20d%3D%22M3%208h26v17H3ZM3%208l13%2010%2013-10%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%2884.3%20138.6%29%20scale%280.69%29%20rotate%28-16%2016%2016%29%22%20stroke-width%3D%221.81%22%3E%3Cpath%20d%3D%22M5%2013h18v7a9%209%200%200%201-18%200ZM23%2015h3a4.5%204.5%200%200%201%200%209h-3M11%209c2-2-2-4%200-6M18%209c2-2-2-4%200-6%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28135.8%20140.3%29%20scale%280.80%29%20rotate%289%2016%2016%29%22%20stroke-width%3D%221.56%22%3E%3Cpath%20d%3D%22M16%2010.5a5.5%205.5%200%201%201%200%2011%205.5%205.5%200%200%201%200-11M16%203v4M16%2025v4M3%2016h4M25%2016h4M6.8%206.8l2.8%202.8M22.4%2022.4l2.8%202.8M25.2%206.8l-2.8%202.8M9.6%2022.4l-2.8%202.8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28195.6%20138.8%29%20scale%280.66%29%20rotate%28-25%2016%2016%29%22%20stroke-width%3D%221.89%22%3E%3Cpath%20d%3D%22M5%2013h22v5H5ZM7%2018h18v10H7ZM16%2013v15M16%2013c-2-6-9-6-7-1M16%2013c2-6%209-6%207-1%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28258.6%20142.0%29%20scale%280.63%29%20rotate%289%2016%2016%29%22%20stroke-width%3D%221.97%22%3E%3Cpath%20d%3D%22M3%2016a13%2013%200%200%201%2026%200ZM16%2016v11a3%203%200%200%201-6%200%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%2843.0%20194.8%29%20scale%280.91%29%20rotate%280%2016%2016%29%22%20stroke-width%3D%221.38%22%3E%3Cpath%20d%3D%22M16%2016a2%202%200%200%201%202%202%204%204%200%200%201-4%204%206%206%200%200%201-6-6%208%208%200%200%201%208-8%2010%2010%200%200%201%2010%2010%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28112.7%20197.4%29%20scale%280.75%29%20rotate%28-4%2016%2016%29%22%20stroke-width%3D%221.66%22%3E%3Cpath%20d%3D%22M4%2011h5l2-3h10l2%203h5v14H4ZM16%2013a5%205%200%201%201%200%2010%205%205%200%200%201%200-10%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28165.1%20201.7%29%20scale%280.70%29%20rotate%28-22%2016%2016%29%22%20stroke-width%3D%221.79%22%3E%3Cpath%20d%3D%22M18%203%207%2018h8l-2%2011%2012-16h-8Z%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28232.5%20203.1%29%20scale%280.70%29%20rotate%2828%2016%2016%29%22%20stroke-width%3D%221.78%22%3E%3Cpath%20d%3D%22M16%2027C5%2018%203%2010.5%208.6%206.8c3.8-2.5%207.4.6%207.4%203.8%200-3.2%203.6-6.3%207.4-3.8C29%2010.5%2027%2018%2016%2027Z%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28290.7%20198.6%29%20scale%280.90%29%20rotate%288%2016%2016%29%22%20stroke-width%3D%221.39%22%3E%3Cpath%20d%3D%22M4%2028C4%2012%2016%204%2028%204c0%2016-12%2024-24%2024ZM7%2025c5-7%2011-13%2018-18%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28-9.3%20198.6%29%20scale%280.90%29%20rotate%288%2016%2016%29%22%20stroke-width%3D%221.39%22%3E%3Cpath%20d%3D%22M4%2028C4%2012%2016%204%2028%204c0%2016-12%2024-24%2024ZM7%2025c5-7%2011-13%2018-18%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%2810.8%20255.3%29%20scale%280.79%29%20rotate%28-9%2016%2016%29%22%20stroke-width%3D%221.59%22%3E%3Cpath%20d%3D%22M16%204a8%208%200%200%201%208%208v7l3%204H5l3-4v-7a8%208%200%200%201%208-8ZM13%2027h6%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%2877.6%20261.3%29%20scale%280.68%29%20rotate%2814%2016%2016%29%22%20stroke-width%3D%221.83%22%3E%3Cpath%20d%3D%22M4%2026%2016%204l12%2022ZM11%2019h1M17%2015h1M15%2021h1%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28145.2%20252.9%29%20scale%280.70%29%20rotate%28-8%2016%2016%29%22%20stroke-width%3D%221.79%22%3E%3Cpath%20d%3D%22M5%207h22a4%204%200%200%201%204%204v7a4%204%200%200%201-4%204H15l-7%206v-6H5a4%204%200%200%201-4-4v-7a4%204%200%200%201%204-4Z%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28196.4%20252.3%29%20scale%280.80%29%20rotate%2829%2016%2016%29%22%20stroke-width%3D%221.57%22%3E%3Cpath%20d%3D%22M16%205a11%2011%200%201%201%200%2022%2011%2011%200%200%201%200-22M11.5%2019c2%203%207%203%209%200M12%2012.6v1.2M20%2012.6v1.2%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28263.1%20258.9%29%20scale%280.76%29%20rotate%28-2%2016%2016%29%22%20stroke-width%3D%221.65%22%3E%3Cpath%20d%3D%22M22%204a11%2011%200%201%200%206%2016A9%209%200%200%201%2022%204Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22300%22%20height%3D%22300%22%20viewBox%3D%220%200%20300%20300%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cg%20transform%3D%22translate%2818.6%2013.1%29%20scale%280.77%29%20rotate%28-15%2016%2016%29%22%20stroke-width%3D%221.63%22%3E%3Cpath%20d%3D%22M16%203l3.6%208.2%208.9.8-6.8%206%201.9%208.7L16%2022.2l-7.6%204.5%201.9-8.7-6.8-6%208.9-.8Z%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%2878.0%2012.9%29%20scale%280.75%29%20rotate%2823%2016%2016%29%22%20stroke-width%3D%221.66%22%3E%3Cpath%20d%3D%22M3%2015%2029%205l-8%2022-6-8ZM15%2019%2029%205%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28136.0%2014.7%29%20scale%280.80%29%20rotate%2817%2016%2016%29%22%20stroke-width%3D%221.57%22%3E%3Cpath%20d%3D%22M9%2024a6%206%200%200%201%200-12%208%208%200%200%201%2015%201%205.5%205.5%200%200%201%200%2011Z%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28191.0%2016.9%29%20scale%280.82%29%20rotate%28-16%2016%2016%29%22%20stroke-width%3D%221.53%22%3E%3Cpath%20d%3D%22M6%2020a10%2010%200%200%201%2020%200M6%2020v6h4v-8H6M26%2020v6h-4v-8h4%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28252.1%2017.6%29%20scale%280.82%29%20rotate%28-1%2016%2016%29%22%20stroke-width%3D%221.52%22%3E%3Cpath%20d%3D%22M10%2025a4%203%200%201%201-.1%200M14%2024V6c4%201%207%203.5%207%207%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%2842.9%2084.5%29%20scale%280.67%29%20rotate%2828%2016%2016%29%22%20stroke-width%3D%221.86%22%3E%3Cpath%20d%3D%22M16%2029S5.5%2018.8%205.5%2011.8a10.5%2010.5%200%200%201%2021%200C26.5%2018.8%2016%2029%2016%2029ZM16%208.6a3.4%203.4%200%201%201%200%206.8%203.4%203.4%200%200%201%200-6.8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28108.7%2085.0%29%20scale%280.66%29%20rotate%28-19%2016%2016%29%22%20stroke-width%3D%221.90%22%3E%3Cpath%20d%3D%22M16%203a8%209%200%200%201%200%2018%208%209%200%200%201%200-18M16%2021l-2%203h4ZM16%2024c1%203-1%204%200%206%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28168.8%2080.1%29%20scale%280.75%29%20rotate%28-13%2016%2016%29%22%20stroke-width%3D%221.68%22%3E%3Cpath%20d%3D%22M10%206h12v4a6%206%200%200%201-12%200ZM16%2016v8M11%2027h10%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28236.1%2078.6%29%20scale%280.67%29%20rotate%28-16%2016%2016%29%22%20stroke-width%3D%221.86%22%3E%3Cpath%20d%3D%22M16%2012.8a3.2%203.2%200%201%201%200%206.4%203.2%203.2%200%200%201%200-6.4M16%203.8a4.6%204.6%200%201%201%200%209.2%204.6%204.6%200%200%201%200-9.2M16%2019a4.6%204.6%200%201%201%200%209.2%204.6%204.6%200%200%201%200-9.2M7%2010a4.6%204.6%200%201%201%200%209.2%204.6%204.6%200%200%201%200-9.2M25%2010a4.6%204.6%200%201%201%200%209.2%204.6%204.6%200%200%201%200-9.2%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28285.1%2073.3%29%20scale%280.78%29%20rotate%2816%2016%2016%29%22%20stroke-width%3D%221.59%22%3E%3Cpath%20d%3D%22M16%204a12%2012%200%201%201%200%2024%2012%2012%200%200%201%200-24M16%209v7l5%203%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28-14.9%2073.3%29%20scale%280.78%29%20rotate%2816%2016%2016%29%22%20stroke-width%3D%221.59%22%3E%3Cpath%20d%3D%22M16%204a12%2012%200%201%201%200%2024%2012%2012%200%200%201%200-24M16%209v7l5%203%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%2816.3%20133.3%29%20scale%280.73%29%20rotate%2826%2016%2016%29%22%20stroke-width%3D%221.72%22%3E%3Cpath%20d%3D%22M3%208h26v17H3ZM3%208l13%2010%2013-10%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%2884.3%20138.6%29%20scale%280.69%29%20rotate%28-16%2016%2016%29%22%20stroke-width%3D%221.81%22%3E%3Cpath%20d%3D%22M5%2013h18v7a9%209%200%200%201-18%200ZM23%2015h3a4.5%204.5%200%200%201%200%209h-3M11%209c2-2-2-4%200-6M18%209c2-2-2-4%200-6%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28135.8%20140.3%29%20scale%280.80%29%20rotate%289%2016%2016%29%22%20stroke-width%3D%221.56%22%3E%3Cpath%20d%3D%22M16%2010.5a5.5%205.5%200%201%201%200%2011%205.5%205.5%200%200%201%200-11M16%203v4M16%2025v4M3%2016h4M25%2016h4M6.8%206.8l2.8%202.8M22.4%2022.4l2.8%202.8M25.2%206.8l-2.8%202.8M9.6%2022.4l-2.8%202.8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28195.6%20138.8%29%20scale%280.66%29%20rotate%28-25%2016%2016%29%22%20stroke-width%3D%221.89%22%3E%3Cpath%20d%3D%22M5%2013h22v5H5ZM7%2018h18v10H7ZM16%2013v15M16%2013c-2-6-9-6-7-1M16%2013c2-6%209-6%207-1%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28258.6%20142.0%29%20scale%280.63%29%20rotate%289%2016%2016%29%22%20stroke-width%3D%221.97%22%3E%3Cpath%20d%3D%22M3%2016a13%2013%200%200%201%2026%200ZM16%2016v11a3%203%200%200%201-6%200%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%2843.0%20194.8%29%20scale%280.91%29%20rotate%280%2016%2016%29%22%20stroke-width%3D%221.38%22%3E%3Cpath%20d%3D%22M16%2016a2%202%200%200%201%202%202%204%204%200%200%201-4%204%206%206%200%200%201-6-6%208%208%200%200%201%208-8%2010%2010%200%200%201%2010%2010%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28112.7%20197.4%29%20scale%280.75%29%20rotate%28-4%2016%2016%29%22%20stroke-width%3D%221.66%22%3E%3Cpath%20d%3D%22M4%2011h5l2-3h10l2%203h5v14H4ZM16%2013a5%205%200%201%201%200%2010%205%205%200%200%201%200-10%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28165.1%20201.7%29%20scale%280.70%29%20rotate%28-22%2016%2016%29%22%20stroke-width%3D%221.79%22%3E%3Cpath%20d%3D%22M18%203%207%2018h8l-2%2011%2012-16h-8Z%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28232.5%20203.1%29%20scale%280.70%29%20rotate%2828%2016%2016%29%22%20stroke-width%3D%221.78%22%3E%3Cpath%20d%3D%22M16%2027C5%2018%203%2010.5%208.6%206.8c3.8-2.5%207.4.6%207.4%203.8%200-3.2%203.6-6.3%207.4-3.8C29%2010.5%2027%2018%2016%2027Z%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28290.7%20198.6%29%20scale%280.90%29%20rotate%288%2016%2016%29%22%20stroke-width%3D%221.39%22%3E%3Cpath%20d%3D%22M4%2028C4%2012%2016%204%2028%204c0%2016-12%2024-24%2024ZM7%2025c5-7%2011-13%2018-18%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28-9.3%20198.6%29%20scale%280.90%29%20rotate%288%2016%2016%29%22%20stroke-width%3D%221.39%22%3E%3Cpath%20d%3D%22M4%2028C4%2012%2016%204%2028%204c0%2016-12%2024-24%2024ZM7%2025c5-7%2011-13%2018-18%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%2810.8%20255.3%29%20scale%280.79%29%20rotate%28-9%2016%2016%29%22%20stroke-width%3D%221.59%22%3E%3Cpath%20d%3D%22M16%204a8%208%200%200%201%208%208v7l3%204H5l3-4v-7a8%208%200%200%201%208-8ZM13%2027h6%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%2877.6%20261.3%29%20scale%280.68%29%20rotate%2814%2016%2016%29%22%20stroke-width%3D%221.83%22%3E%3Cpath%20d%3D%22M4%2026%2016%204l12%2022ZM11%2019h1M17%2015h1M15%2021h1%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28145.2%20252.9%29%20scale%280.70%29%20rotate%28-8%2016%2016%29%22%20stroke-width%3D%221.79%22%3E%3Cpath%20d%3D%22M5%207h22a4%204%200%200%201%204%204v7a4%204%200%200%201-4%204H15l-7%206v-6H5a4%204%200%200%201-4-4v-7a4%204%200%200%201%204-4Z%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28196.4%20252.3%29%20scale%280.80%29%20rotate%2829%2016%2016%29%22%20stroke-width%3D%221.57%22%3E%3Cpath%20d%3D%22M16%205a11%2011%200%201%201%200%2022%2011%2011%200%200%201%200-22M11.5%2019c2%203%207%203%209%200M12%2012.6v1.2M20%2012.6v1.2%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28263.1%20258.9%29%20scale%280.76%29%20rotate%28-2%2016%2016%29%22%20stroke-width%3D%221.65%22%3E%3Cpath%20d%3D%22M22%204a11%2011%200%201%200%206%2016A9%209%200%200%201%2022%204Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
-webkit-mask-size: 300px 300px;
mask-size: 300px 300px;
-webkit-mask-repeat: repeat;
mask-repeat: repeat;
}
.wa [hidden] { display: none !important; }
/* Reset de <button> dentro del chat (botones de flujo accesibles) */
.wa button.qr-btn,
.wa button.sheet-cerrar,
.wa button.contact-accion {
font: inherit;
letter-spacing: inherit;
border: 0;
background: none;
-webkit-appearance: none;
appearance: none;
}
/* Las filas de la hoja conservan su separador (lista-hoja-inferior.png) */
.wa button.sheet-fila {
font: inherit;
letter-spacing: inherit;
border: 0;
border-bottom: .5px solid var(--wa-sheet-sep);
background: none;
-webkit-appearance: none;
appearance: none;
}
/* ---------- 4. Header del chat (iOS: chevron negro, avatar 36, iconos de línea) ---------- */
.wa #chat-header {
display: flex;
align-items: center;
gap: 10px;
min-height: 52px;
padding: 4px 16px 6px 8px;
background: var(--wa-chrome);
color: var(--wa-chrome-text);
border-bottom: .5px solid var(--wa-separator);
transition: background-color .2s ease, color .2s ease;
}
.wa .wa-back { width: 22px; flex: none; display: flex; color: var(--wa-chrome-text); padding-left: 4px; }
.wa .wa-avatar,
.wa #chat-avatar {
width: 36px;
height: 36px;
border-radius: 50%;
object-fit: cover;
flex: none;
background: var(--wa-separator);
}
.wa #chat-avatar { position: relative; z-index: 1; }
.wa .wa-header-tit { flex: 1; min-width: 0; }
.wa .header-title {
font-size: 17px;
font-weight: 600;
line-height: 1.2;
display: flex;
align-items: center;
gap: 3px;
white-space: nowrap;
overflow: hidden;
}
.wa #chat-nombre { overflow: hidden; text-overflow: ellipsis; }
.wa .header-sub {
font-size: 13px;
font-weight: 400;
line-height: 1.25;
letter-spacing: 0;
color: var(--wa-text-meta);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.wa .header-sub.wa-sub-verde { color: var(--wa-accent); }
.wa .wa-verificado { display: inline-flex; flex: none; }
.wa .wa-hicon { flex: none; display: flex; color: var(--wa-header-icon); }
.wa .wa-hicon + .wa-hicon { margin-left: 20px; }
/* ---------- 5. Cuerpo del chat y filas ---------- */
.wa #chat-cuerpo {
margin: 0;
padding: 8px 0 10px;
list-style: none;
overflow-y: auto;
overflow-x: hidden;
overscroll-behavior: contain;
scrollbar-width: none;
}
.wa #chat-cuerpo::-webkit-scrollbar { display: none; }
.wa .wa-row { display: flex; padding: 0 16px; margin-top: 2px; }
.wa .wa-row.grupo { margin-top: 8px; } /* cambia de emisor */
.wa .wa-row.out { justify-content: flex-end; }
/* Columna para mensajes compuestos (carrusel: burbuja + tarjetas) */
.wa .wa-stack {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 4px;
min-width: 0;
}
.wa .out .wa-stack { align-items: flex-end; }
.wa .wa-stack-full { width: 100%; }
.wa .wa-stack > .bubble { max-width: 78%; }
/* ---------- 6. Burbuja: radio 18 y cola ABAJO solo en la última del grupo ---------- */
.wa .bubble {
position: relative;
z-index: 0; /* contexto: la cola queda bajo el contenido */
max-width: 78%;
padding: 7px 12px 6px; /* 7 arriba / 6 abajo [medido, README §2.2] */
border-radius: 18px;
background: var(--wa-bubble-in);
font-size: 17px;
line-height: 22px;
overflow-wrap: break-word;
word-break: break-word;
transition: background-color .2s ease, color .2s ease;
}
.wa .out .bubble { background: var(--wa-bubble-out); }
.wa .ultimo > .bubble::before,
.wa .ultimo > .wa-stack > .bubble.con-cola::before {
content: "";
position: absolute;
bottom: 0;
z-index: -1;
width: 14px;
height: 17px;
background: inherit;
}
.wa .in.ultimo > .bubble::before,
.wa .in.ultimo > .wa-stack > .bubble.con-cola::before {
left: -6px;
clip-path: path("M14 0 V17 H0 C6 16 11 12 14 0 Z");
}
.wa .out.ultimo > .bubble::before,
.wa .out.ultimo > .wa-stack > .bubble.con-cola::before {
right: -6px;
clip-path: path("M0 0 V17 H14 C8 16 3 12 0 0 Z");
}
/* Texto del mensaje + formato WhatsApp */
.wa .wa-texto { white-space: pre-wrap; display: block; }
.wa .wa-link { color: var(--wa-link); text-decoration: none; }
.wa .wa-texto code,
.wa .tpl-body code,
.wa .wa-caption code,
.wa .card-body code {
font-family: "SF Mono", ui-monospace, Menlo, Consolas, "Courier New", monospace;
font-size: .88em;
letter-spacing: 0;
background: rgba(0, 0, 0, .06);
border-radius: 4px;
padding: 1px 3px;
white-space: pre-wrap;
}
.wa.oscuro .wa-texto code,
.wa.oscuro .tpl-body code,
.wa.oscuro .wa-caption code,
.wa.oscuro .card-body code { background: rgba(255, 255, 255, .10); }
/* ---------- 7. Hora + ticks ---------- */
.wa .meta {
display: inline-flex;
align-items: center;
gap: 3px;
justify-content: flex-end;
float: right;
margin: 8px 0 -4px 10px;
color: var(--wa-text-meta);
font-size: 12px;
line-height: 14px;
letter-spacing: 0;
font-variant-numeric: tabular-nums;
white-space: nowrap;
user-select: none;
position: relative;
}
.wa .out .meta { color: var(--wa-meta-out); }
.wa .meta .tick { display: block; flex: none; }
.wa .meta .tick-read { color: var(--wa-tick-read); }
/* ---------- 8. Media inset (imagen / vídeo) ---------- */
.wa .bubble.wa-bubble-media { width: min(290px, 78%); padding: 4px; }
.wa .wa-media {
display: block;
width: 100%;
max-height: 360px;
object-fit: cover;
border-radius: 13px;
background: var(--wa-separator);
}
.wa .wa-media-wrap { position: relative; }
.wa .wa-gradiente {
position: absolute;
left: 4px;
right: 4px;
bottom: 4px;
height: 36px;
border-radius: 0 0 13px 13px;
background: linear-gradient(transparent, rgba(0, 0, 0, .28));
pointer-events: none;
}
.wa .meta-en-media,
.wa .out .meta-en-media {
position: absolute;
right: 12px;
bottom: 10px;
float: none;
margin: 0;
color: #fff;
text-shadow: 0 0 3px rgba(0, 0, 0, .45);
z-index: 2;
}
.wa .meta-en-media .tick:not(.tick-read) { color: #fff; }
.wa .wa-caption { display: block; padding: 5px 8px 3px; white-space: pre-wrap; }
.wa .wa-play-badge {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 50px;
height: 50px;
border-radius: 50%;
background: rgba(230, 230, 230, .8);
display: flex;
align-items: center;
justify-content: center;
color: #3b3b3b;
pointer-events: none;
z-index: 2;
-webkit-backdrop-filter: blur(6px);
backdrop-filter: blur(6px);
}
.wa .wa-play-badge svg { margin-left: 3px; }
.wa .wa-play-badge.wa-play-sm { width: 40px; height: 40px; }
.wa .wa-video-dur {
position: absolute;
left: 10px;
bottom: 8px;
display: flex;
align-items: center;
gap: 4px;
color: #fff;
font-size: 13px;
line-height: 1;
letter-spacing: 0;
font-variant-numeric: tabular-nums;
text-shadow: 0 0 3px rgba(0, 0, 0, .5);
pointer-events: none;
z-index: 2;
}
.wa .wa-video-dur svg { filter: drop-shadow(0 0 2px rgba(0, 0, 0, .45)); }
/* ---------- 9. Audio / nota de voz ---------- */
.wa .bubble.wa-audio { width: min(282px, 78%); padding: 8px 10px 6px 8px; }
.wa .audio-line { display: flex; align-items: center; gap: 6px; }
.wa .audio-play {
flex: none;
width: 28px;
height: 30px;
display: flex;
align-items: center;
justify-content: center;
color: #6b6b6b;
}
.wa.oscuro .audio-play { color: #c9cccc; }
.wa .audio-centro { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; padding-top: 10px; }
.wa .audio-pista { position: relative; display: flex; align-items: center; height: 20px; overflow: hidden; }
.wa .audio-punto {
position: absolute;
left: 0;
top: 50%;
width: 12px;
height: 12px;
margin-top: -6px;
border-radius: 50%;
background: #25a35a;
z-index: 1;
}
.wa .audio-wave { flex: none; margin-left: 4px; color: #b3b3b3; }
.wa.oscuro .audio-wave { color: #6f7575; }
.wa .audio-bajo { display: flex; align-items: center; justify-content: space-between; }
.wa .audio-dur { font-size: 13px; line-height: 16px; letter-spacing: 0; color: var(--wa-text-meta); font-variant-numeric: tabular-nums; }
.wa .out .audio-dur { color: var(--wa-meta-out); }
.wa .audio-bajo .meta { float: none; margin: 0; }
.wa .audio-avatar { position: relative; flex: none; width: 44px; height: 44px; margin-left: 4px; }
.wa .audio-avatar img { display: block; width: 44px; height: 44px; border-radius: 50%; object-fit: cover; }
.wa .audio-mic {
position: absolute;
left: -6px;
bottom: -3px;
display: flex;
color: #25a35a;
}
.wa .audio-musica {
display: flex;
align-items: center;
justify-content: center;
width: 44px;
height: 44px;
border-radius: 50%;
background: #f29a38;
color: #fff;
}
/* ---------- 10. Documento: panel gris interno ---------- */
.wa .bubble.wa-doc { width: min(290px, 78%); padding: 4px 4px 6px; }
.wa .doc-panel {
display: flex;
align-items: center;
gap: 10px;
padding: 10px 12px;
border-radius: 10px;
background: var(--wa-panel);
}
.wa .out .doc-panel { background: rgba(0, 0, 0, .05); }
.wa.oscuro .out .doc-panel { background: rgba(0, 0, 0, .22); }
.wa .doc-icono { flex: none; display: flex; }
.wa .doc-datos { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.wa .doc-nombre {
font-size: 17px;
line-height: 21px;
color: var(--wa-text);
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
line-clamp: 2;
overflow: hidden;
}
.wa .doc-sub { font-size: 15px; line-height: 19px; color: var(--wa-text-meta); letter-spacing: 0; }
.wa .out .doc-sub { color: var(--wa-meta-out); }
.wa .doc-descarga {
flex: none;
width: 30px;
height: 30px;
border-radius: 50%;
border: 1.5px solid #4caf6a;
color: #4caf6a;
display: flex;
align-items: center;
justify-content: center;
}
.wa .wa-doc .wa-caption { padding: 6px 8px 0; }
.wa .wa-doc > .wa-pie { padding: 4px 8px 0; }
/* ---------- 11. Sticker (sin burbuja; hora en pastilla) ---------- */
.wa .sticker-box { position: relative; width: 168px; padding: 2px 0 22px; }
.wa .sticker-img { display: block; width: 100%; border-radius: 12px; }
.wa .sticker-hora {
position: absolute;
right: 0;
bottom: 0;
padding: 2px 7px;
border-radius: 9px;
background: rgba(0, 0, 0, .35);
color: #fff;
font-size: 12px;
line-height: 16px;
letter-spacing: 0;
font-variant-numeric: tabular-nums;
}
.wa .sticker-hora .tick:not(.tick-read) { color: #fff; }
.wa .sticker-hora .meta { float: none; margin: 0; color: #fff; }
/* ---------- 12. Ubicación ---------- */
.wa .bubble.wa-loc { width: min(290px, 78%); padding: 4px 4px 0; }
.wa .loc-mapa {
display: block;
width: 100%;
height: 155px;
object-fit: cover;
border-radius: 13px;
}
.wa .loc-datos { display: block; padding: 6px 8px 7px; }
.wa .loc-nombre { font-size: 17px; font-weight: 400; line-height: 22px; }
.wa .loc-dir { font-size: 15px; line-height: 20px; color: var(--wa-text-meta); text-decoration: underline; text-underline-offset: 2px; }
.wa .out .loc-dir { color: var(--wa-meta-out); }
.wa .loc-datos .wa-pie { margin-top: 0; }
.wa .wa-loc > .wa-gradiente { bottom: 0; }
/* ---------- 13. Contacto ---------- */
.wa .bubble.wa-contact { width: min(290px, 78%); padding: 10px 12px 0; }
.wa .contact-cab { display: flex; align-items: center; gap: 10px; }
.wa .contact-avatar {
width: 44px;
height: 44px;
border-radius: 50%;
flex: none;
display: flex;
align-items: flex-end;
justify-content: center;
overflow: hidden;
background: linear-gradient(#a9adb5, #8a8e96);
color: #fff;
}
.wa .contact-nombre {
flex: 1;
min-width: 0;
font-size: 17px;
font-weight: 600;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.wa .contact-chev { flex: none; display: flex; color: #b0b0b5; }
.wa .wa-contact > .wa-pie { margin: 0 0 6px; }
.wa .contact-acciones {
display: flex;
margin: 0 -12px;
border-top: .5px solid var(--wa-btn-sep);
}
.wa .contact-accion {
flex: 1 1 0;
min-width: 0;
display: flex;
align-items: center;
justify-content: center;
min-height: 44px;
padding: 0 6px;
color: var(--wa-action);
font-size: 17px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
cursor: default;
}
.wa .contact-accion + .contact-accion { border-left: .5px solid var(--wa-btn-sep); }
/* ---------- 14. Burbuja de plantilla / interactivos (template, buttons, list, cta_url) ---------- */
.wa .bubble.tpl { width: min(290px, 78%); padding: 0; }
.wa .tpl-media-wrap { position: relative; margin: 4px 4px 0; }
.wa .tpl-media {
display: block;
width: calc(100% - 8px);
margin: 4px 4px 0;
aspect-ratio: 1.91 / 1;
object-fit: cover;
border-radius: 13px;
background: var(--wa-separator);
}
.wa .tpl-media-wrap .tpl-media { width: 100%; margin: 0; }
.wa .tpl-header-txt { padding: 7px 12px 0; font-size: 17px; line-height: 22px; font-weight: 600; }
.wa .tpl-header-doc { margin: 4px 4px 0; }
.wa .tpl-body { padding: 6px 12px 0; font-size: 17px; line-height: 22px; white-space: pre-wrap; }
.wa .tpl-header-txt + .tpl-body { padding-top: 4px; }
.wa .template-footer {
display: block;
margin-top: 4px;
font-size: 15px;
line-height: 20px;
letter-spacing: 0;
color: var(--wa-text-meta);
white-space: pre-wrap;
}
.wa .out .template-footer { color: var(--wa-meta-out); }
/* Pie común: footer gris + hora/ticks (la hora se alinea con la última línea) */
.wa .wa-pie {
display: flex;
align-items: flex-end;
justify-content: flex-end;
gap: 10px;
}
.wa .wa-pie .template-footer { margin-right: auto; min-width: 0; }
.wa .wa-pie .meta { float: none; margin: 0 0 2px; flex: none; }
.wa .tpl > .wa-pie { padding: 0 12px 7px; margin-top: 2px; }
/* ---------- 15. Botones dentro de la burbuja (quick reply, url, llamada, lista) ---------- */
.wa .qr-btns {
display: flex;
flex-direction: column;
width: 100%;
border-top: .5px solid var(--wa-btn-sep);
}
.wa .qr-btn {
width: 100%;
margin: 0;
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
min-height: 44px;
padding: 0 12px;
text-align: center;
font-size: 17px;
line-height: 22px;
color: var(--wa-action);
text-decoration: none;
cursor: pointer;
user-select: none;
-webkit-tap-highlight-color: transparent;
}
.wa .qr-btn + .qr-btn { border-top: .5px solid var(--wa-btn-sep); }
.wa .qr-btn:last-child { border-radius: 0 0 18px 18px; }
.wa .qr-btn:active { background: rgba(0, 0, 0, .05); }
.wa.oscuro .qr-btn:active { background: rgba(255, 255, 255, .06); }
.wa .qr-btn .qr-ico { flex: none; display: flex; }
.wa .qr-btn .btn-label { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.wa .qr-btn-inactiva { cursor: default; opacity: .55; }
/* ---------- 16. Carrusel: tarjetas ~287 pt, hueco 4, se desbordan a la derecha ---------- */
.wa .carousel {
display: flex;
gap: 4px;
width: calc(100% + 16px);
margin-right: -16px;
padding: 0 16px 2px 0;
overflow-x: auto;
scroll-snap-type: x mandatory;
scroll-padding-left: 0;
scrollbar-width: none;
overscroll-behavior-x: contain;
}
.wa .out .carousel { margin-right: 0; margin-left: -16px; padding: 0 0 2px 16px; }
.wa .carousel::-webkit-scrollbar { display: none; }
.wa .card {
flex: 0 0 min(287px, 80%);
scroll-snap-align: start;
border-radius: 18px;
padding: 4px 0 0;
background: var(--wa-bubble-in);
display: flex;
flex-direction: column;
transition: background-color .2s ease, color .2s ease;
}
.wa .card-media {
display: block;
width: calc(100% - 8px);
margin: 0 4px;
aspect-ratio: 1.7 / 1;
object-fit: cover;
border-radius: 12px;
background: var(--wa-separator);
}
.wa .card-body { padding: 8px 12px; font-size: 17px; line-height: 22px; white-space: pre-wrap; }
.wa .card .qr-btns { margin-top: auto; }
/* ---------- 17. Mensajes de sistema: fecha "Hoy" y aviso de cifrado ---------- */
.wa .wa-sistema { display: flex; justify-content: center; padding: 0 16px; margin: 4px 0 8px; }
.wa .wa-fecha {
padding: 4px 10px;
border-radius: 8px;
background: var(--wa-fecha);
box-shadow: 0 .5px .5px rgba(0, 0, 0, .1);
color: var(--wa-sistema-text);
font-size: 12px;
line-height: 16px;
font-weight: 600;
letter-spacing: 0;
}
.wa .wa-aviso {
width: 90%;
padding: 6px 12px;
border-radius: 10px;
background: var(--wa-aviso);
color: var(--wa-aviso-text);
font-size: 13px;
line-height: 17px;
letter-spacing: 0;
text-align: center;
}
.wa .wa-aviso svg { display: inline-block; vertical-align: -1px; margin-right: 3px; }
.wa .wa-aviso b { font-weight: 600; }
/* ---------- 18. Indicador "escribiendo…" ---------- */
.wa .wa-bubble-escribiendo {
display: flex;
align-items: center;
gap: 4px;
padding: 13px 14px 12px;
}
.wa .wam-dot {
width: 7px;
height: 7px;
border-radius: 50%;
background: var(--wa-text-meta);
animation: wam-parpadeo 1.15s ease-in-out infinite;
}
.wa .wam-dot:nth-child(2) { animation-delay: .15s; }
.wa .wam-dot:nth-child(3) { animation-delay: .3s; }
.wa #chat-escribiendo { padding-bottom: 6px; }
/* ---------- 19. Hoja inferior iOS (lista y "Todas las opciones") ---------- */
.wa .sheet { position: absolute; inset: 0; z-index: 60; display: flex; align-items: flex-end; }
.wa .sheet-fondo {
position: absolute;
inset: 0;
background: var(--wa-velo);
animation: wam-fundo .22s ease;
}
.wa .sheet-panel {
position: relative;
width: 100%;
max-height: 80%;
display: flex;
flex-direction: column;
border-radius: 12px 12px 0 0;
background: var(--wa-sheet);
color: var(--wa-text);
padding-bottom: 34px; /* safe area bajo el home indicator */
animation: wam-subir .28s cubic-bezier(.2, .8, .3, 1);
}
.wa .sheet-cabecera {
position: relative;
flex: none;
display: flex;
align-items: center;
justify-content: center;
min-height: 56px;
padding: 0 56px;
}
.wa .sheet-titulo {
font-size: 17px;
font-weight: 600;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.wa button.sheet-cerrar {
position: absolute;
right: 16px;
top: 50%;
width: 30px;
height: 30px;
margin-top: -15px;
border-radius: 50%;
background: var(--wa-sheet-close);
color: var(--wa-sheet-x);
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
}
.wa .sheet-opciones { overflow-y: auto; padding: 0 0 4px; margin: 0; list-style: none; scrollbar-width: none; }
.wa .sheet-opciones::-webkit-scrollbar { display: none; }
.wa .sheet-seccion {
padding: 24px 16px 8px;
font-size: 15px;
font-weight: 600;
letter-spacing: 0;
color: var(--wa-sheet-sub);
border-bottom: .5px solid var(--wa-sheet-sep);
margin-left: 16px;
padding-left: 0;
}
.wa .sheet-opciones > .sheet-seccion:first-child { padding-top: 30px; }
.wa .sheet-grupo { margin: 0; }
/* "Todas las opciones": un único separador (con sangría) entre grupos */
.wa .sheet-grupo + .sheet-grupo { margin: 0 0 0 16px; border-top: .5px solid var(--wa-sheet-sep); }
.wa .sheet-grupo + .sheet-grupo > .sheet-fila { margin-left: 0; width: 100%; }
.wa .sheet-fila {
display: flex;
align-items: center;
gap: 12px;
min-height: 52px;
padding: 17px 16px 17px 0;
margin: 0 0 0 16px;
width: calc(100% - 16px);
border-bottom: .5px solid var(--wa-sheet-sep);
color: var(--wa-text);
text-align: left;
text-decoration: none;
cursor: pointer;
user-select: none;
-webkit-tap-highlight-color: transparent;
}
.wa .sheet-fila:active { background: rgba(0, 0, 0, .05); }
.wa .sheet-fila.qr-btn-inactiva:active { background: none; }
.wa .sheet-fila-txt { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 0; }
.wa .sheet-fila-titulo { font-size: 17px; line-height: 22px; }
.wa .sheet-fila-desc { font-size: 15px; line-height: 18px; letter-spacing: 0; color: var(--wa-sheet-sub); }
.wa .sheet-fila-btn,
.wa button.sheet-fila-btn { color: var(--wa-action); min-height: 48px; padding-top: 12px; padding-bottom: 12px; border-bottom: 0; }
.wa .sheet-fila-btn .sheet-fila-titulo { color: var(--wa-action); }
.wa .sheet-fila .qr-ico { flex: none; display: flex; color: var(--wa-action); }
.wa .sheet-pie {
flex: none;
padding: 22px 16px 6px;
text-align: center;
font-size: 15px;
letter-spacing: 0;
color: var(--wa-sheet-sub);
}
.wa .sheet-vacio { padding: 18px; text-align: center; font-size: 15px; color: var(--wa-sheet-sub); }
/* ---------- 20. Composer iOS: +, píldora con sticker, cámara, micro ---------- */
.wa #composer {
display: flex;
align-items: center;
gap: 12px;
padding: 6px 12px 34px 10px; /* 34 pt de safe area bajo el home indicator */
background: var(--wa-compose-bar);
border-top: .5px solid var(--wa-separator); /* hairline como el del header */
transition: background-color .2s ease, color .2s ease;
}
.wa #composer .attach,
.wa #composer .cmp-icono {
flex: none;
display: flex;
align-items: center;
justify-content: center;
padding: 0;
border: 0;
background: none;
color: var(--wa-chrome-text);
cursor: default;
}
.wa #composer .field {
flex: 1;
min-width: 0;
display: flex;
align-items: center;
gap: 6px;
height: 36px;
padding: 0 8px 0 14px;
border-radius: 18px;
border: .5px solid var(--wa-compose-border);
background: var(--wa-compose-field);
color: var(--wa-chrome-text);
}
.wa #composer .field .sticker { flex: none; opacity: 1; color: var(--wa-chrome-text); }
.wa #composer-input {
flex: 1;
min-width: 0;
height: 100%;
padding: 0;
border: 0;
outline: none;
background: transparent;
color: var(--wa-text);
font: inherit;
font-size: 17px;
letter-spacing: -.2px;
}
.wa #composer-input::placeholder { color: transparent; }
.wa #composer-enviar {
flex: none;
display: none; /* solo aparece al escribir */
width: 32px;
height: 32px;
padding: 0;
border: 0;
border-radius: 50%;
background: var(--wa-accent);
color: #fff;
align-items: center;
justify-content: center;
cursor: pointer;
}
/* Con texto: aparece enviar y se ocultan cámara y micro (sin JS: :placeholder-shown) */
.wa #composer:has(#composer-input:not(:placeholder-shown)) #composer-enviar { display: flex; }
.wa #composer:has(#composer-input:not(:placeholder-shown)) .cmp-icono { display: none; }
/* ---------- 21. Accesibilidad de foco ---------- */
.wa .qr-btn:focus-visible,
.wa .sheet-fila:focus-visible,
.wa .sheet-cerrar:focus-visible,
.wa #composer-enviar:focus-visible {
outline: 2px solid var(--wa-tick-read);
outline-offset: -2px;
}
/* ---------- 22. Keyframes (prefijo wam-) ---------- */
@keyframes wam-parpadeo {
0%, 60%, 100% { opacity: .3; transform: translateY(0); }
30% { opacity: 1; transform: translateY(-1px); }
}
@keyframes wam-fundo {
from { opacity: 0; }
to { opacity: 1; }
}
@keyframes wam-subir {
from { transform: translateY(100%); }
to { transform: translateY(0); }
}
@media (prefers-reduced-motion: reduce) {
.wa .wam-dot, .wa .sheet-fondo, .wa .sheet-panel { animation: none; }
}