/* ===================================================================== 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: #667781; --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: 11.5px; } .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(--ed-acento); border-color: var(--ed-acento); color: #ffffff; font-weight: 600; white-space: nowrap; } .ed-btn-primario:hover { background: var(--ed-acento-hondo); border-color: var(--ed-acento-hondo); 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; 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-grid; place-items: center; font-size: 11px; font-weight: 700; color: var(--ed-acento-hondo); background: var(--ed-acento-suave); border-radius: 999px; } .ed-dir { flex: 0 0 auto; padding: 1px 6px; font-size: 10px; font-weight: 700; letter-spacing: 0.4px; 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 0 auto; padding: 1px 6px; font-size: 10px; font-weight: 600; letter-spacing: 0.4px; text-transform: uppercase; color: var(--wam-texto, var(--ed-texto-suave)); border: 1px solid var(--wam-borde, var(--ed-borde)); border-radius: 999px; } .ed-resumen { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 12px; color: var(--wam-texto, var(--ed-texto-suave)); } .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: 10.5px; 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: 10.5px; 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; } }