/* ===================================================================== css/editor.css — Dueño C (SPEC §2): panel editor. Prefijo ed- (.ed-seccion .ed-campo .ed-tarjeta .ed-btn .ed-fila .ed-badge). Colores base de docs/research-ui.md (#00a884 acento, #111b21/#e9edef texto, #667781/#8696a0 meta). Preferencia por las variables --wam-* de css/base.css (dueño A); los valores --ed-* solo aplican como reserva si A no las define. El editor/shell reaccionan a body[data-tema] que fija WAM.setTema (B). ===================================================================== */ /* ---------- Tokens del editor ---------- */ #panel-editor { --ed-panel: #ffffff; --ed-fondo-suave: #f0f4f3; --ed-texto: #111b21; --ed-texto-suave: #4e5f69; --ed-borde: #d9e2e3; --ed-acento: var(--wam-acento, #00a884); --ed-acento-hondo: #008069; --ed-acento-suave: rgba(0, 168, 132, 0.13); --ed-peligro: #d64550; --ed-peligro-suave: rgba(214, 69, 80, 0.12); --ed-entrada: #2563a8; --ed-entrada-suave: rgba(37, 99, 168, 0.13); --ed-seleccion: #2b6be4; --ed-seleccion-suave: rgba(43, 107, 228, 0.11); --ed-ambar: #b45309; --ed-sombra: 0 1px 2px rgba(16, 24, 32, 0.06); } body[data-tema="oscuro"] #panel-editor { --ed-panel: #1f2c34; --ed-fondo-suave: #172430; --ed-texto: #e9edef; --ed-texto-suave: #8696a0; --ed-borde: #2a3942; --ed-acento-hondo: #00a884; --ed-acento-suave: rgba(0, 168, 132, 0.2); --ed-peligro-suave: rgba(214, 69, 80, 0.22); --ed-entrada: #6fa8dc; --ed-entrada-suave: rgba(111, 168, 220, 0.16); --ed-seleccion: #6d9bf3; --ed-seleccion-suave: rgba(109, 155, 243, 0.16); --ed-ambar: #f0a940; --ed-sombra: none; } /* ---------- Base compacta del panel ---------- */ #panel-editor, #panel-editor *, #panel-editor *::before, #panel-editor *::after { box-sizing: border-box; } .ed-seccion { display: grid; gap: 8px; padding: 12px; border-bottom: 1px solid var(--wam-borde, var(--ed-borde)); font-size: 13px; line-height: 1.45; color: var(--wam-texto, var(--ed-texto)); } /* Contenedor de la identidad cuando vive dentro de .wam-bloque de A (el padding y el título ya los aporta el bloque) */ .ed-cuenta { display: grid; gap: 8px; font-size: 13px; line-height: 1.45; color: var(--wam-texto, var(--ed-texto)); } .ed-titulo { margin: 0; font-size: 11px; font-weight: 700; letter-spacing: 0.8px; text-transform: uppercase; color: var(--wam-texto, var(--ed-texto-suave)); } /* Aviso transitorio (import/export/errores) — sin consola */ .ed-aviso { display: none; margin: 0; padding: 8px 18px; font-size: 12.5px; border-bottom: 1px solid var(--wam-borde, var(--ed-borde)); background: var(--ed-acento-suave); color: var(--ed-acento-hondo); } .ed-aviso-visible { display: block; } .ed-aviso-error { background: var(--ed-peligro-suave); color: var(--ed-peligro); } /* ---------- Campos ---------- */ .ed-campo { display: grid; gap: 3px; min-width: 0; font-size: 12px; color: var(--wam-texto, var(--ed-texto-suave)); } .ed-campo-e { font-size: 12px; font-weight: 500; color: var(--wam-texto-suave, var(--ed-texto-suave)); cursor: default; } label.ed-campo-e { cursor: pointer; } .ed-input { width: 100%; padding: 5px 8px; font: inherit; font-size: 12.5px; color: var(--wam-texto, var(--ed-texto)); background: var(--wam-panel, var(--ed-panel)); border: 1px solid var(--wam-borde, var(--ed-borde)); border-radius: 7px; } textarea.ed-input { resize: vertical; min-height: 46px; } .ed-input:focus { outline: none; border-color: var(--ed-acento); box-shadow: 0 0 0 2px var(--ed-acento-suave); } .ed-input::placeholder { color: var(--wam-texto, var(--ed-texto-suave)); opacity: 0.65; } .ed-check { display: inline-flex; align-items: center; gap: 7px; font-size: 12.5px; cursor: pointer; color: var(--wam-texto, var(--ed-texto)); } .ed-check input { accent-color: var(--ed-acento); width: 15px; height: 15px; margin: 0; } /* Filas horizontales */ .ed-fila { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; align-items: end; } .ed-fila.ed-comunes { display: flex; flex-wrap: wrap; align-items: end; } .ed-comunes > .ed-campo { flex: 1 1 92px; } /* ---------- Botones ---------- */ .ed-btn { display: inline-flex; align-items: center; justify-content: center; gap: 6px; padding: 6px 10px; font: inherit; font-size: 12.5px; color: var(--wam-texto, var(--ed-texto)); background: var(--wam-panel, var(--ed-panel)); border: 1px solid var(--wam-borde, var(--ed-borde)); border-radius: 8px; cursor: pointer; transition: border-color 0.12s, background 0.12s, color 0.12s; } .ed-btn:hover { border-color: var(--ed-acento); color: var(--ed-acento-hondo); } .ed-btn:focus-visible, .ed-cab-principal:focus-visible { outline: 2px solid var(--ed-acento); outline-offset: 1px; } .ed-btn-primario { background: var(--wam-primario, #008069); border-color: var(--wam-primario, #008069); color: #ffffff; font-weight: 600; white-space: nowrap; } .ed-btn-primario:hover { background: var(--wam-primario-hover, #006e5a); border-color: var(--wam-primario-hover, #006e5a); color: #ffffff; } .ed-btn-mini { padding: 2px 8px; font-size: 12px; line-height: 1.5; border-radius: 6px; } .ed-btn-peligro { color: var(--ed-peligro); } .ed-btn-peligro:hover { border-color: var(--ed-peligro); background: var(--ed-peligro-suave); color: var(--ed-peligro); } .ed-btn:disabled { opacity: 0.45; cursor: not-allowed; } .ed-btn:disabled:hover { border-color: var(--wam-borde, var(--ed-borde)); color: var(--wam-texto, var(--ed-texto-suave)); } .ed-add { justify-self: start; border-style: dashed; color: var(--ed-acento-hondo); } /* Entrada de archivo visualmente oculta dentro de su etiqueta */ .ed-archivo { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; } /* ---------- Alta de mensajes ---------- */ .ed-alta { grid-template-columns: 1fr auto; align-items: end; } .ed-alta .ed-titulo { grid-column: 1 / -1; } .ed-alta .ed-select { min-width: 0; } /* ---------- Lista de tarjetas ---------- */ .ed-lista { margin: 0; padding: 0; /* el padding del bloque lo pone .wam-bloque (A) */ list-style: none; display: grid; gap: 8px; } #panel-editor > .ed-lista { padding: 12px; } /* reserva sin .wam-bloque */ .ed-vacio { padding: 16px 12px; font-size: 12.5px; text-align: center; color: var(--wam-texto, var(--ed-texto-suave)); border: 1px dashed var(--wam-borde, var(--ed-borde)); border-radius: 10px; } /* ---------- Tarjeta de mensaje ---------- */ .ed-tarjeta { background: var(--wam-panel, var(--ed-panel)); border: 1px solid var(--wam-borde, var(--ed-borde)); border-radius: 10px; box-shadow: var(--ed-sombra); overflow: hidden; } .ed-tarjeta.ed-abierta { border-color: var(--ed-acento); box-shadow: inset 3px 0 0 var(--ed-acento), var(--ed-sombra); } .ed-tarjeta-cab { display: flex; align-items: center; gap: 4px; padding: 5px 6px; } .ed-cab-principal { flex: 1; min-width: 0; overflow: hidden; display: flex; align-items: center; gap: 6px; padding: 3px 4px; font: inherit; text-align: left; background: none; border: 0; border-radius: 6px; cursor: pointer; color: var(--wam-texto, var(--ed-texto)); } .ed-num { flex: 0 0 auto; min-width: 18px; height: 18px; display: inline-flex; align-items: center; justify-content: center; gap: 1px; padding: 0 5px 0 4px; font-size: 11px; font-weight: 700; font-variant-numeric: tabular-nums; color: var(--ed-acento-hondo); background: var(--ed-acento-suave); border-radius: 999px; } /* Dirección: flecha ↙ entrada / ↗ salida (además del color) */ .ed-num-dir { font-size: 11px; line-height: 1; } .ed-num.ed-num-in { color: var(--ed-entrada); background: var(--ed-entrada-suave); } .ed-num.ed-num-resp { padding: 0 5px; } .ed-dir { flex: 0 0 auto; padding: 1px 6px; font-size: 11px; font-weight: 700; letter-spacing: 0.3px; text-transform: uppercase; border-radius: 999px; } .ed-dir-in { color: var(--ed-entrada); background: var(--ed-entrada-suave); } .ed-dir-out { color: var(--ed-acento-hondo); background: var(--ed-acento-suave); } .ed-badge { flex: 0 1 auto; min-width: 0; display: inline-flex; align-items: center; gap: 3px; padding: 1px 6px 1px 4px; overflow: hidden; font-size: 11px; font-weight: 600; letter-spacing: 0.3px; text-transform: uppercase; white-space: nowrap; color: var(--wam-texto, var(--ed-texto-suave)); border: 1px solid var(--wam-borde, var(--ed-borde)); border-radius: 999px; } .ed-badge .ed-ico { flex: none; display: inline-grid; place-items: center; color: var(--wam-texto-suave, var(--ed-texto-suave)); } .ed-badge .ed-ico svg { display: block; width: 13px; height: 13px; } .ed-badge-txt { min-width: 0; overflow: hidden; text-overflow: ellipsis; } .ed-resumen { flex: 1 1 60px; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 12px; color: var(--wam-texto, var(--ed-texto-suave)); } /* Tarjeta abierta: el resumen baja a su propia línea bajo la cabecera (así siempre se lee qué mensaje se está editando) */ .ed-tarjeta { --ed-acc-w: 146px; } /* + ↑ ↓ ⧉ ✕ (26 px) + huecos */ .ed-tarjeta.ed-anidada { --ed-acc-w: 88px; } /* ↑ ↓ ✕ */ .ed-tarjeta.ed-abierta > .ed-tarjeta-cab { align-items: flex-start; } .ed-tarjeta.ed-abierta > .ed-tarjeta-cab > .ed-asa { margin-top: 2px; } .ed-tarjeta.ed-abierta > .ed-tarjeta-cab > .ed-cab-principal { flex-wrap: wrap; row-gap: var(--ed-acc-h, 8px); overflow: visible; } /* la 2.ª línea pasa por debajo de las acciones: usa todo el ancho de la tarjeta */ .ed-tarjeta.ed-abierta > .ed-tarjeta-cab > .ed-cab-principal > .ed-resumen { order: 10; flex: 0 0 calc(100% + var(--ed-acc-w)); /* tamaño exterior = 100 %: fuerza la 2.ª línea */ max-width: none; margin-right: calc(-1 * var(--ed-acc-w)); white-space: normal; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; line-clamp: 2; padding-left: 2px; } .ed-acciones { flex: 0 0 auto; display: inline-flex; gap: 3px; } .ed-cuerpo { display: grid; gap: 10px; padding: 9px 10px 11px; border-top: 1px dashed var(--wam-borde, var(--ed-borde)); } .ed-tarjeta:not(.ed-abierta) .ed-cuerpo { display: none; } .ed-form { display: grid; gap: 8px; } /* Tarjeta anidada (respuesta encadenada) */ .ed-tarjeta.ed-anidada { background: var(--ed-fondo-suave); box-shadow: none; } .ed-tarjeta.ed-anidada .ed-cuerpo { padding: 8px 9px 10px; } .ed-anidadas { display: grid; gap: 6px; } /* ---------- Bloques anidados (botones, secciones, cards, respuestas) ---------- */ .ed-sub { display: grid; gap: 7px; padding: 8px; background: var(--ed-fondo-suave); border: 1px dashed var(--wam-borde, var(--ed-borde)); border-radius: 9px; } .ed-sub .ed-sub { background: var(--wam-panel, var(--ed-panel)); } .ed-sub-cab { display: flex; align-items: center; gap: 6px; min-height: 22px; } .ed-sub-titulo { flex: 1; font-size: 11px; font-weight: 700; letter-spacing: 0.6px; text-transform: uppercase; color: var(--wam-texto, var(--ed-texto-suave)); } .ed-item { display: grid; gap: 6px; padding: 7px; border: 1px solid var(--wam-borde, var(--ed-borde)); border-radius: 8px; background: var(--wam-panel, var(--ed-panel)); } .ed-nota { margin: 0; font-size: 11.5px; color: var(--wam-texto, var(--ed-texto-suave)); } /* ---------- Media (avatar, src, headerMedia, card.media) ---------- */ .ed-media { display: flex; gap: 9px; align-items: flex-start; } .ed-media-vista { flex: 0 0 auto; width: 54px; height: 54px; object-fit: cover; border-radius: 8px; border: 1px solid var(--wam-borde, var(--ed-borde)); background: var(--ed-fondo-suave); } .ed-media-icono { display: grid; place-items: center; font-size: 20px; } .ed-media-vacio, .ed-media-placeholder { display: grid; place-items: center; border-style: dashed; color: var(--wam-texto, var(--ed-texto-suave)); font-size: 15px; } .ed-media-datos { flex: 1; min-width: 0; display: grid; gap: 5px; } .ed-avatar { align-items: center; } .ed-avatar-vista { flex: 0 0 auto; width: 58px; height: 58px; object-fit: cover; border-radius: 50%; border: 1px solid var(--wam-borde, var(--ed-borde)); background: var(--ed-fondo-suave); } /* ---------- Selector de tema ---------- */ .ed-tema { grid-template-columns: 1fr; } /* ---------- Ajustes finos ---------- */ .ed-select { appearance: auto; } .ed-seccion > .ed-btn { justify-self: start; } #panel-editor hr { border: 0; border-top: 1px solid var(--wam-borde, var(--ed-borde)); margin: 0; } /* ===================================================================== UX/UI del panel editor (referencia: constructor de plantillas de Meta) Paleta de tipos, contadores, barra de formato, variables, toggle de cabecera, radios + dropzone de media, drag & drop, grid de ubicación. ===================================================================== */ /* ---------- Transiciones sutiles en campos y tarjetas ---------- */ .ed-input, .ed-tarjeta, .ed-item, .ed-media-vista { transition: border-color 0.14s ease, box-shadow 0.14s ease, background-color 0.14s ease; } /* ---------- Alta de mensajes: paleta de tarjetas de tipo ---------- */ #panel-editor .wam-alta { display: grid; gap: 8px; } #panel-editor .wam-alta .wam-btn-anadir { width: 100%; } .ed-paleta { display: grid; grid-template-columns: repeat(auto-fill, minmax(108px, 1fr)); gap: 6px; } .ed-tipo-card { display: flex; align-items: center; gap: 7px; min-width: 0; padding: 7px 8px; font: inherit; font-size: 12px; line-height: 1.2; text-align: left; color: var(--wam-texto, var(--ed-texto)); background: var(--wam-panel, var(--ed-panel)); border: 1px solid var(--wam-borde, var(--ed-borde)); border-radius: 9px; cursor: pointer; transition: border-color 0.14s ease, background-color 0.14s ease, color 0.14s ease, box-shadow 0.14s ease; } .ed-tipo-card .ed-ico { flex: none; display: inline-grid; place-items: center; color: var(--wam-texto-suave, var(--ed-texto-suave)); transition: color 0.14s ease; } .ed-tipo-card .ed-ico svg { display: block; } .ed-tipo-card-e { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .ed-tipo-card:hover { border-color: var(--ed-seleccion); color: var(--ed-seleccion); } .ed-tipo-card:hover .ed-ico { color: var(--ed-seleccion); } .ed-tipo-card.ed-seleccionada { border-color: var(--ed-seleccion); background: var(--ed-seleccion-suave); color: var(--ed-seleccion); font-weight: 600; box-shadow: inset 0 0 0 1px var(--ed-seleccion); } .ed-tipo-card.ed-seleccionada .ed-ico { color: var(--ed-seleccion); } .ed-tipo-card:focus-visible { outline: 2px solid var(--ed-seleccion); outline-offset: 1px; } /* Mini-tarjetas verticales del tipo de cabecera (Texto/Imagen/Vídeo/Documento) */ .ed-header-tipos { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 6px; } .ed-tipo-card-mini { flex-direction: column; justify-content: center; gap: 4px; padding: 8px 4px; text-align: center; font-size: 11px; } .ed-tipo-card-mini .ed-tipo-card-e { flex: none; width: 100%; } /* ---------- Contadores de caracteres ---------- */ .ed-contador { justify-self: end; font-size: 11px; font-variant-numeric: tabular-nums; color: var(--wam-texto-suave, var(--ed-texto-suave)); transition: color 0.12s ease; } .ed-contador-alerta { color: var(--ed-ambar); font-weight: 600; } .ed-contador-over { color: var(--ed-peligro); font-weight: 700; } /* ---------- Barra de formato B / I / S / y variables ---------- */ .ed-fmtbar { display: flex; align-items: center; gap: 3px; flex-wrap: wrap; } .ed-fmt-btn { display: inline-flex; align-items: center; justify-content: center; min-width: 24px; height: 24px; padding: 0 7px; font: inherit; font-size: 12px; color: var(--wam-texto-suave, var(--ed-texto-suave)); background: var(--wam-panel, var(--ed-panel)); border: 1px solid var(--wam-borde, var(--ed-borde)); border-radius: 6px; cursor: pointer; transition: border-color 0.12s ease, background-color 0.12s ease, color 0.12s ease; } .ed-fmt-btn:hover { border-color: var(--ed-acento); background: var(--ed-acento-suave); color: var(--ed-acento-hondo); } .ed-fmt-btn:focus-visible { outline: 2px solid var(--ed-seleccion); outline-offset: 1px; } .ed-fmt-negrita { font-weight: 800; } .ed-fmt-cursiva { font-style: italic; font-weight: 600; } .ed-fmt-tachado { text-decoration: line-through; font-weight: 600; } .ed-fmt-mono { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace; font-size: 11px; } .ed-fmt-var { margin-left: auto; font-weight: 600; font-size: 11.5px; } /* ---------- Interruptor «Mostrar cabecera» ---------- */ .ed-header-bloque { display: grid; gap: 7px; } .ed-switch { display: inline-flex; align-items: center; gap: 7px; font-size: 11.5px; font-weight: 600; color: var(--wam-texto, var(--ed-texto)); cursor: pointer; user-select: none; } .ed-switch input { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; opacity: 0; pointer-events: none; } .ed-switch-pista { position: relative; flex: none; width: 30px; height: 17px; border-radius: 999px; background: var(--wam-borde, var(--ed-borde)); transition: background-color 0.14s ease; } .ed-switch-nudo { position: absolute; top: 2px; left: 2px; width: 13px; height: 13px; border-radius: 50%; background: #ffffff; box-shadow: 0 1px 2px rgba(16, 24, 32, 0.35); transition: transform 0.14s ease; } .ed-switch input:checked + .ed-switch-pista { background: var(--ed-seleccion); } .ed-switch input:checked + .ed-switch-pista .ed-switch-nudo { transform: translateX(13px); } .ed-switch input:focus-visible + .ed-switch-pista { outline: 2px solid var(--ed-seleccion); outline-offset: 2px; } /* ---------- Origen de media: radios URL / Subir archivo + dropzone ---------- */ .ed-media-modos { display: flex; align-items: center; gap: 12px; } .ed-radio { display: inline-flex; align-items: center; gap: 5px; font-size: 12px; color: var(--wam-texto, var(--ed-texto)); cursor: pointer; } .ed-radio input { accent-color: var(--ed-seleccion); width: 14px; height: 14px; margin: 0; cursor: pointer; } .ed-media .ed-panel-url, .ed-media .ed-panel-archivo { display: none; } .ed-media.ed-modo-url .ed-panel-url { display: block; } .ed-media.ed-modo-archivo .ed-panel-archivo { display: grid; gap: 5px; justify-items: stretch; } .ed-dropzona { display: flex; align-items: center; justify-content: center; gap: 8px; width: 100%; padding: 12px 10px; font: inherit; font-size: 12px; text-align: center; color: var(--wam-texto-suave, var(--ed-texto-suave)); background: var(--ed-fondo-suave); border: 1.5px dashed var(--wam-borde, var(--ed-borde)); border-radius: 9px; cursor: pointer; transition: border-color 0.14s ease, background-color 0.14s ease, color 0.14s ease; } .ed-dropzona:hover { border-color: var(--ed-acento); color: var(--ed-acento-hondo); } .ed-dropzona .ed-ico { display: inline-grid; place-items: center; } .ed-dropzona .ed-ico svg { display: block; } .ed-dropzona.ed-dropzona-sobre { border-color: var(--ed-seleccion); background: var(--ed-seleccion-suave); color: var(--ed-seleccion); } .ed-dropzona:focus-visible { outline: 2px solid var(--ed-seleccion); outline-offset: 1px; } /* ---------- Asas e indicadores de drag & drop ---------- */ .ed-asa { flex: none; display: inline-grid; place-items: center; width: 18px; height: 24px; margin-left: 2px; color: var(--wam-texto-suave, var(--ed-texto-suave)); border-radius: 5px; cursor: grab; transition: color 0.12s ease, background-color 0.12s ease; } .ed-asa:hover { color: var(--ed-seleccion); background: var(--ed-seleccion-suave); } .ed-asa:active { cursor: grabbing; } .ed-asa svg { display: block; } .ed-listo-drag { cursor: grabbing; } .ed-arrastrando { opacity: 0.45; } .ed-tarjeta.ed-drop-antes, .ed-item.ed-drop-antes { box-shadow: 0 -3px 0 0 var(--ed-seleccion); } .ed-tarjeta.ed-drop-despues, .ed-item.ed-drop-despues { box-shadow: 0 3px 0 0 var(--ed-seleccion); } /* ---------- Grid de ubicación (2 columnas) ---------- */ .ed-grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; align-items: end; } /* ---------- Ventana estrecha ---------- */ @media (max-width: 380px) { .ed-grid2 { grid-template-columns: 1fr; } .ed-header-tipos { grid-template-columns: repeat(2, minmax(0, 1fr)); } } /* ---------- Menos movimiento ---------- */ @media (prefers-reduced-motion: reduce) { .ed-tipo-card, .ed-tipo-card .ed-ico, .ed-fmt-btn, .ed-dropzona, .ed-asa, .ed-switch-pista, .ed-switch-nudo, .ed-input, .ed-tarjeta, .ed-item, .ed-media-vista, .ed-contador { transition: none; } } /* ===================================================================== UX v2: paleta compacta por grupos, cabecera de «Cuenta» plegable, chips de avisos y flujos, control segmentado, toasts, enlace con la vista previa, estados vacíos y destinos táctiles. ===================================================================== */ /* ---------- Paleta: una fila por grupo (Básicos / Medios / Interactivos) ---------- */ #panel-editor .wam-alta { display: grid; gap: 8px; } #panel-editor .wam-alta .wam-btn-anadir { width: auto; } .ed-paleta { display: grid; grid-template-columns: none; gap: 6px; } .ed-paleta-grupo { display: grid; grid-template-columns: 84px minmax(0, 1fr); align-items: start; gap: 5px; } .ed-paleta-items { display: flex; flex-wrap: wrap; gap: 5px; } .ed-paleta-titulo { padding-top: 7px; font-size: 11px; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; color: var(--wam-texto-suave, var(--ed-texto-suave)); } .ed-paleta .ed-tipo-card { flex: 0 0 auto; gap: 5px; padding: 5px 9px 5px 7px; border-radius: 999px; font-size: 12.5px; } .ed-paleta .ed-tipo-card .ed-tipo-card-e { flex: none; overflow: visible; } /* Sin estado «seleccionado»: cada clic añade. El «+» aparece con hover/foco. */ .ed-paleta .ed-tipo-card:hover { background: var(--ed-seleccion-suave); } .ed-tipo-mas { display: inline-block; width: 0; overflow: hidden; font-weight: 800; line-height: 1; opacity: 0; transition: width 0.12s ease, opacity 0.12s ease; } .ed-paleta .ed-tipo-card:hover .ed-tipo-mas, .ed-paleta .ed-tipo-card:focus-visible .ed-tipo-mas { width: 0.7em; opacity: 1; } @media (hover: none) { .ed-tipo-mas { width: 0.7em; opacity: 0.55; } } .ed-alta-pie { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 6px 10px; } .ed-destino-alta { font-size: 12px; color: var(--wam-texto-suave, var(--ed-texto-suave)); } /* Chip visible del destino del próximo alta */ .ed-destino-alta.ed-destino-chip { display: inline-flex; align-items: center; gap: 4px; min-height: 26px; padding: 2px 10px; border: 1px solid var(--wam-borde, var(--ed-borde)); border-radius: 999px; background: var(--ed-fondo-suave); font-weight: 600; color: var(--wam-texto, var(--ed-texto)); } .ed-destino-alta.ed-destino-chip::before { content: "↧"; font-weight: 700; color: var(--ed-seleccion); } .ed-destino-alta.ed-destino-dentro { border-color: var(--ed-seleccion); background: var(--ed-seleccion-suave); color: var(--ed-seleccion); padding-right: 3px; } .ed-destino-quitar { display: inline-grid; place-items: center; width: 22px; height: 22px; padding: 0; border: 0; border-radius: 50%; background: transparent; color: inherit; font: inherit; font-size: 15px; line-height: 1; cursor: pointer; } .ed-destino-quitar:hover { background: rgba(43, 107, 228, 0.18); } .ed-destino-quitar:focus-visible { outline: 2px solid var(--ed-seleccion); outline-offset: 1px; } .ed-destino-cambio { animation: ed-destino-cambio 0.9s ease-out; } @keyframes ed-destino-cambio { 0% { box-shadow: 0 0 0 3px var(--ed-seleccion-suave), 0 0 0 1px var(--ed-seleccion); } 100% { box-shadow: 0 0 0 0 transparent; } } .ed-enlace { padding: 0; border: 0; background: none; font: inherit; color: var(--ed-seleccion); text-decoration: underline; cursor: pointer; } /* ---------- Bloque «Cuenta» como
---------- */ .ed-bloque-cuenta > .ed-cuenta-sumario { display: flex; align-items: center; gap: 10px; margin: -4px 0; padding: 4px 0; list-style: none; cursor: pointer; border-radius: 8px; } .ed-bloque-cuenta > .ed-cuenta-sumario::-webkit-details-marker { display: none; } .ed-bloque-cuenta > .ed-cuenta-sumario::before { content: ""; flex: none; width: 7px; height: 7px; margin: 0 2px 0 3px; border-right: 2px solid var(--wam-texto-suave, var(--ed-texto-suave)); border-bottom: 2px solid var(--wam-texto-suave, var(--ed-texto-suave)); transform: rotate(-45deg); transition: transform 0.15s ease; } .ed-bloque-cuenta[open] > .ed-cuenta-sumario::before { transform: rotate(45deg); } .ed-bloque-cuenta > .ed-cuenta-sumario .wam-bloque-titulo { margin: 0; } .ed-bloque-cuenta[open] > .ed-cuenta-sumario { margin-bottom: 12px; } .ed-bloque-cuenta:not([open]) { padding-bottom: 16px; } .ed-cuenta-resumen { flex: 1; min-width: 0; display: inline-flex; align-items: center; gap: 7px; font-size: 13px; color: var(--wam-texto, var(--ed-texto)); } .ed-bloque-cuenta[open] .ed-cuenta-resumen { display: none; } .ed-cuenta-mini { flex: none; width: 24px; height: 24px; border-radius: 50%; object-fit: cover; border: 1px solid var(--wam-borde, var(--ed-borde)); } .ed-cuenta-mini-nombre { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 600; } .ed-cuenta-mini-ok { flex: none; display: inline-grid; place-items: center; width: 16px; height: 16px; border-radius: 50%; background: #1d9bf0; color: #fff; font-size: 10px; font-weight: 800; } /* ---------- Cabecera de la sección Mensajes ---------- */ .ed-bloque-cab { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; } .ed-avisos-global { padding: 3px 9px; border: 1px solid rgba(180, 83, 9, 0.35); border-radius: 999px; background: rgba(180, 83, 9, 0.08); color: var(--ed-ambar); font-size: 12px; font-weight: 600; cursor: pointer; } .ed-avisos-global:hover { background: rgba(180, 83, 9, 0.16); } .ed-lista-herr { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 6px; margin-bottom: 8px; } /* ---------- Cabecera de tarjeta: chips y acciones ---------- */ .ed-chips { flex: 0 0 auto; display: inline-flex; gap: 4px; } .ed-chips:empty { display: none; } .ed-chip { display: inline-flex; align-items: center; padding: 1px 6px; border-radius: 999px; font-size: 11px; font-weight: 700; white-space: nowrap; font-variant-numeric: tabular-nums; } .ed-chip-aviso { color: var(--ed-ambar); background: rgba(180, 83, 9, 0.12); } .ed-chip-flujo { color: var(--ed-acento-hondo); background: var(--ed-acento-suave); } .ed-chip-auto { color: var(--ed-seleccion); background: var(--ed-seleccion-suave); } /* «Se pulsa sola en la demo»: select arriba del formulario y casilla por elemento */ .ed-campo-auto { max-width: 320px; } .ed-check-auto { justify-self: start; padding: 3px 8px 3px 6px; border: 1px dashed var(--ed-seleccion); border-radius: 999px; font-size: 12px; color: var(--ed-seleccion); } .ed-check-auto input { accent-color: var(--ed-seleccion); } .ed-check-auto:has(input:checked) { border-style: solid; background: var(--ed-seleccion-suave); font-weight: 600; } .ed-chip-flujo-incompleto { color: var(--ed-entrada); background: var(--ed-entrada-suave); } .ed-num-resp { font-size: 12px; } /* Las flechas ↑/↓ se muestran al abrir, al pasar el ratón o con el foco dentro. Su hueco se reserva siempre (visibility, no display): el hover no provoca saltos de layout ni recorta el resumen. Con el foco en la cabecera se vuelven visibles y entran en el orden de Tab. */ .ed-tarjeta { position: relative; } .ed-tarjeta:not(.ed-abierta):not(:hover):not(:focus-within) > .ed-tarjeta-cab .ed-mov { visibility: hidden; } /* Editor estrecho (contenido < 400 px, p. ej. ventanas de 1024 y 1280): en plegadas las flechas no ocupan sitio (se reordena con el asa o Alt+↑/↓) y aparecen al abrir la tarjeta, cuando el resumen ya va en su propia línea. */ .ed-bloque-mensajes { container-type: inline-size; container-name: ed-mensajes; } @container ed-mensajes (max-width: 400px) { .ed-tarjeta:not(.ed-abierta) > .ed-tarjeta-cab .ed-mov { display: none; } } /* Muy estrecho (editor < 380 px, contenido ~330): la etiqueta de tipo queda solo como icono */ @container ed-mensajes (max-width: 330px) { .ed-tarjeta-cab .ed-badge-txt { display: none; } .ed-tarjeta-cab .ed-badge { padding: 2px 4px; } } .ed-acciones .ed-btn-mini { min-width: 26px; min-height: 26px; padding: 2px 6px; } .ed-btn-mini:disabled { opacity: 0.35; } /* ---------- Caja de avisos dentro de la tarjeta ---------- */ .ed-validacion { padding: 8px 10px; border: 1px solid rgba(180, 83, 9, 0.3); border-radius: 8px; background: rgba(180, 83, 9, 0.07); color: var(--wam-texto, var(--ed-texto)); font-size: 12px; } .ed-validacion-titulo { margin: 0 0 3px; font-weight: 700; color: var(--ed-ambar); } .ed-validacion ul { margin: 0; padding-left: 18px; display: grid; gap: 2px; } /* ---------- Respuestas encadenadas ---------- */ .ed-resps { border-left: 3px solid var(--ed-acento); } .ed-resps.ed-resps-vacias { border-left-color: var(--ed-entrada); } .ed-resps-vacias .ed-nota { color: var(--ed-entrada); } /* ---------- Control segmentado Entrada / Salida ---------- */ .ed-comunes > .ed-campo-seg { flex: 0 0 auto; } .ed-comunes > .ed-campo-hora { flex: 0 1 84px; } .ed-seg { display: inline-flex; padding: 2px; border: 1px solid var(--wam-borde, var(--ed-borde)); border-radius: 8px; background: var(--ed-fondo-suave); } .ed-seg-op { position: relative; cursor: pointer; } .ed-seg-op input { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0; margin: 0; cursor: pointer; } .ed-seg-op span { display: inline-block; padding: 3px 11px; border-radius: 6px; font-size: 12.5px; font-weight: 600; color: var(--wam-texto-suave, var(--ed-texto-suave)); transition: background-color 0.12s ease, color 0.12s ease; } .ed-seg-op input:checked + span { background: var(--wam-panel, var(--ed-panel)); color: var(--wam-texto, var(--ed-texto)); box-shadow: 0 1px 2px rgba(16, 24, 32, 0.18); } .ed-seg-op input:focus-visible + span { outline: 2px solid var(--ed-seleccion); outline-offset: 1px; } /* ---------- Estado vacío con acciones ---------- */ .ed-vacio { display: grid; gap: 8px; justify-items: center; padding: 20px 14px; } .ed-vacio p { margin: 0; } .ed-vacio-titulo { font-weight: 700; font-size: 13.5px; color: var(--wam-texto, var(--ed-texto)); } .ed-vacio-acciones { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px; margin-top: 4px; } /* ---------- Toasts (fuera del scroll del panel) ---------- */ /* Abajo, centrados sobre la columna de la vista previa: no tapan las tarjetas ni sus acciones mientras se trabaja en el editor. */ .ed-toasts { --ed-col-editor: clamp(340px, 34vw, 480px); /* = columna del editor (base.css) */ position: fixed; left: calc(var(--ed-col-editor) + (100vw - var(--ed-col-editor)) / 2); bottom: 16px; z-index: 1000; display: grid; justify-items: center; gap: 8px; width: max-content; max-width: min(440px, calc(100vw - var(--ed-col-editor) - 32px)); transform: translateX(-50%); pointer-events: none; } body.presentacion .ed-toasts { left: 50%; max-width: min(440px, calc(100vw - 32px)); } .ed-toast { display: flex; align-items: center; gap: 10px; padding: 10px 8px 10px 14px; border-radius: 12px; background: #1f2c33; color: #fff; font-size: 13.5px; line-height: 1.4; box-shadow: 0 8px 26px rgba(0, 0, 0, 0.28); pointer-events: auto; animation: ed-toast-in 0.18s ease-out; } .ed-toast-error { background: #a8322a; } .ed-toast-txt { flex: 1; min-width: 0; } .ed-toast-accion { flex: none; padding: 5px 10px; border: 1px solid rgba(255, 255, 255, 0.45); border-radius: 8px; background: transparent; color: #fff; font: inherit; font-weight: 700; cursor: pointer; } .ed-toast-accion:hover { background: rgba(255, 255, 255, 0.14); } .ed-toast-cerrar { flex: none; width: 28px; height: 28px; border: 0; border-radius: 8px; background: transparent; color: rgba(255, 255, 255, 0.8); font-size: 18px; line-height: 1; cursor: pointer; } .ed-toast-cerrar:hover { background: rgba(255, 255, 255, 0.14); color: #fff; } .ed-toast button:focus-visible { outline: 2px solid #fff; outline-offset: 1px; } @keyframes ed-toast-in { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } } @media (max-width: 900px) { .ed-toasts { left: 50%; max-width: min(440px, calc(100vw - 32px)); bottom: calc(var(--wam-tabs-alto, 58px) + 64px + env(safe-area-inset-bottom, 0px)); } body.vista-movil .ed-toasts { bottom: calc(var(--wam-tabs-alto, 58px) + 12px + env(safe-area-inset-bottom, 0px)); } /* hueco al final de la lista para el botón flotante «Ver teléfono» */ #lista-mensajes { padding-bottom: 56px; } } /* ---------- Enlace con la vista previa ---------- */ #chat-cuerpo .wa-row.ed-resaltado { outline: 2px solid var(--wam-acento, #00a884); outline-offset: 2px; border-radius: 10px; } body.presentacion #chat-cuerpo .wa-row.ed-resaltado { outline: 0; } .ed-tarjeta.ed-destello { animation: ed-destello 1.2s ease-out; } @keyframes ed-destello { 0% { box-shadow: 0 0 0 3px var(--ed-acento); } 100% { box-shadow: 0 0 0 0 transparent; } } /* ---------- Destinos táctiles ---------- */ @media (pointer: coarse) { .ed-tarjeta { --ed-acc-w: 176px; --ed-acc-h: 14px; } .ed-tarjeta.ed-anidada { --ed-acc-w: 106px; } .ed-btn-mini, .ed-acciones .ed-btn-mini { min-width: 32px; min-height: 32px; } .ed-fmt-btn { min-width: 32px; height: 32px; } .ed-paleta .ed-tipo-card { padding: 8px 11px 8px 9px; } .ed-seg-op span { padding: 6px 14px; } } @media (max-width: 480px) { .ed-paleta-grupo { grid-template-columns: 1fr; gap: 4px; } .ed-paleta-titulo { padding-top: 0; } } @media (prefers-reduced-motion: reduce) { .ed-toast, .ed-tarjeta.ed-destello, .ed-destino-cambio { animation: none; } .ed-tipo-mas { transition: none; } .ed-bloque-cuenta > .ed-cuenta-sumario::before, .ed-seg-op span { transition: none; } }