/* Marca sil>IA sobre LibreChat v0.8.8. Se enlaza desde index.html (ver deploy/librechat/Dockerfile).
 * Las variables de LibreChat son tripletes RGB separados por espacios (se usan como rgb(var(--x))):
 * en claro viven en `html{}` y en oscuro en `.dark{}` (clase en <html>).
 * Paleta de odoo_mcp/brand.py y odoo_mcp/admin/html.py: teal #0f766e / #0d9488, pizarra #0b1220 / #1e293b / #94a3b8. */

html {
  --accent-primary: 15 118 110;          /* #0f766e */
  --accent-primary-hover: 17 94 89;      /* #115e59 */
  --ring-primary: 100 116 139;
  --text-primary: 30 41 59;              /* #1e293b */
  --text-secondary: 71 85 105;
  --text-secondary-alt: 100 116 139;
  --text-tertiary: 100 116 139;
  --link: 15 118 110;
  --link-hover: 17 94 89;
  --header-primary: 255 255 255;
  --header-hover: 241 245 249;
  --header-button-hover: 241 245 249;
  --surface-active: 226 232 240;
  --surface-active-alt: 226 232 240;
  --surface-hover: 226 232 240;
  --surface-hover-alt: 203 213 225;
  --surface-composer-hover: 226 232 240;
  --surface-primary-alt: 248 250 252;
  --surface-primary-contrast: 241 245 249;
  --surface-secondary: 248 250 252;
  --surface-secondary-alt: 226 232 240;
  --surface-tertiary: 241 245 249;
  --surface-submit: 15 118 110;
  --surface-submit-hover: 17 94 89;
  --border-light: 226 232 240;
  --border-medium-alt: 203 213 225;
  --border-medium: 203 213 225;
  --border-heavy: 148 163 184;
  --border-xheavy: 100 116 139;
  --surface-inverted: 15 23 42;
  --surface-inverted-hover: 30 41 59;
  --status-info: 15 118 110;
  --status-info-subtle: 240 253 250;
  --status-info-border: 153 246 228;
  --status-info-strong: 100 116 139;
  --switch-unchecked: 148 163 184;
}

html.dark, .dark {
  --accent-primary: 45 212 191;          /* teal-400 */
  --accent-primary-hover: 94 234 212;
  --text-primary: 241 245 249;
  --text-secondary: 203 213 225;
  --text-secondary-alt: 148 163 184;
  --text-tertiary: 148 163 184;
  --link: 45 212 191;
  --link-hover: 94 234 212;
  --presentation: 15 23 42;              /* #0f172a: fondo del chat */
  --header-primary: 15 23 42;
  --header-hover: 30 41 59;
  --header-button-hover: 30 41 59;
  --surface-active: 51 65 85;
  --surface-active-alt: 30 41 59;
  --surface-hover: 30 41 59;
  --surface-hover-alt: 51 65 85;
  --surface-composer-hover: 30 41 59;
  --surface-primary: 11 18 32;           /* #0b1220: barra lateral */
  --surface-primary-alt: 15 23 42;
  --surface-primary-contrast: 15 23 42;
  --surface-secondary: 17 26 46;         /* #111a2e */
  --surface-secondary-alt: 17 26 46;
  --surface-tertiary: 30 41 59;
  --surface-tertiary-alt: 30 41 59;
  --surface-dialog: 15 23 42;
  --surface-chat: 30 41 59;
  --surface-submit: 13 148 136;          /* #0d9488 */
  --surface-submit-hover: 15 118 110;
  --border-light: 30 41 59;
  --border-medium-alt: 51 65 85;
  --border-medium: 51 65 85;
  --border-heavy: 71 85 105;
  --border-xheavy: 100 116 139;
  --status-info: 94 234 212;
  --status-info-subtle: 4 47 46;
  --status-info-border: 15 118 110;
  --surface-inverted: 241 245 249;
  --surface-inverted-hover: 226 232 240;
  --text-inverted: 15 23 42;
}

/* ---------------------------------------------------------------------------------------------
 * Nada técnico de HERRAMIENTAS de cara al cliente: sin nombres de tool, servidor, SQL/JSON ni tiempos.
 * Lo que SÍ se ve: «Pensamientos» (razonamiento), «Cancelado» y un indicador de carga con frases.
 * Selectores verificados en client/dist/assets/eventSelection.*.js, hooks.*.js e index.*.js de v0.8.8
 * (ver docs/DECISIONES.md, «Chat: marca, modelo y herramientas ocultos»).
 * ------------------------------------------------------------------------------------------- */

/* Cada paso de herramienta (nombre, servidor, «Tool call 0,6s», «Preparation 1,1s», entrada SQL y salida JSON),
 * tareas en segundo plano y los textos vivos de la fase («Running X», «silia ×N»); y el panel lateral de MCP */
[data-testid="tool-call"],
[data-tool-call-id],
[data-tool-call-output-id],
[data-testid="background-task-call"],
[data-testid="background-task-card"],
[data-testid="ask-user-question-call"],
[data-testid="live-phase-combo"],
[data-testid="live-phase-outcome"],
[data-testid="activity-phase-failed-peek"],
[data-testid="activity-phase-failed-time"],
[data-testid="activity-phase-announcer"],
[data-testid="nav-panel-mcp-builder"],
#nav-panel-mcp-builder {
  display: none !important;
}

/* Cabecera del bloque de actividad («Ran N actions · silia ×N», «Ejecuté masterasp_query», «Used 1 tool»...):
 * el texto real se descarta y se pinta uno genérico. Dentro del desplegable solo queda el razonamiento. */
[data-testid="activity-phase-card"] button[aria-expanded] > :not(svg),
div:has(> [data-testid="tool-call-group-panel"]) button[aria-expanded] > :not(svg) {
  display: none !important;
}
[data-testid="activity-phase-card"] button[aria-expanded]::before,
div:has(> [data-testid="tool-call-group-panel"]) button[aria-expanded]::before {
  content: "Detalles";
  font-size: 0.875rem;
  font-weight: 500;
}
/* Cancelado: el título de la etiqueta empieza por «Cancel» (cadena sin traducir en es/ca), sin «en silia» */
[data-testid="activity-phase-card"] button[aria-expanded]:has(.tool-status-text[title^="Cancel"])::before,
div:has(> [data-testid="tool-call-group-panel"]) button[aria-expanded]:has(.tool-status-text[title^="Cancel"])::before {
  content: "Cancelado";
}
/* Variante de una sola línea (sin desplegable): solo se enseña si es «Cancelado» */
[data-testid="activity-phase-card"]:not(:has(button)) {
  display: none !important;
}
[data-testid="activity-phase-card"]:not(:has(button)):has(.tool-status-text[title^="Cancel"]) {
  display: flex !important;
}
[data-testid="activity-phase-card"]:not(:has(button)) .tool-status-text {
  font-size: 0;
}
[data-testid="activity-phase-card"]:not(:has(button)) .tool-status-text::after {
  content: "Cancelado";
  font-size: 0.875rem;
}
/* Resumen secundario del grupo («1 de 3 falló») fuera */
div:has(> [data-testid="tool-call-group-panel"]) > div:first-child > :not(:first-child) {
  display: none !important;
}

/* Indicador de carga: mientras el asistente trabaja LibreChat pinta el cursor de actividad; se le añaden frases
 * genéricas que rotan. Sin soporte de animar `content` se queda la primera frase. */
[data-testid="activity-phase-cursor"] {
  display: flex;
  align-items: center;
  gap: 0.5rem;
}
[data-testid="activity-phase-cursor"]::after {
  content: "Pensando…";
  font-size: 0.875rem;
  color: rgb(var(--text-secondary));
  animation: silia-frases 9s steps(1, end) infinite;
}
@keyframes silia-frases {
  0%   { content: "Pensando…"; }
  34%  { content: "Consultando…"; }
  67%  { content: "Un momento…"; }
}

/* --- PREVALECE (2026-10-28): durante el proceso NO se ve cuadro de pasos/«Detalles»/razonamiento, solo «Pensando…» ---
 * Se oculta la tarjeta de actividad entera, el wrapper del grupo de herramientas y el cursor nativo (que puede vivir
 * dentro de la tarjeta). El indicador visible es #silia-pensando, creado por silia.js (no depende de ese DOM). */
/* Razonamiento en streaming (recuadro «peek»), razonamiento consolidado («Pensamientos»), tarjeta de pasos,
 * panel del grupo de herramientas y el cursor nativo: todo fuera. Selectores verificados en el DOM real de
 * ia.ciber.cat el 2026-10-28 (streaming-thought-peek y group/reasoning eran los que seguían saliendo). */
[data-testid="streaming-thought-peek"],
[data-testid="activity-phase-card"],
[data-testid="activity-phase-panel"],
[data-testid="tool-call-group-panel"],
div:has(> [data-testid="tool-call-group-panel"]),
[data-testid="activity-phase-cursor"],
.group\/reasoning,
.group\/thinking-container {
  display: none !important;
}

/* Indicador «Pensando…»: silia.js marca con .silia-turn-activo el último turno del asistente mientras trabaja y
 * aún no ha escrito respuesta (señal fiable: el botón «Detener generación»). Sale bajo «sil>IA», en el sitio de la
 * respuesta, y desaparece en cuanto empieza a escribir. Verificado en el DOM real de ia.ciber.cat (2026-10-28). */
.silia-turn-activo > div.flex.w-full.flex-col.gap-1::before {
  content: "Pensando…";
  display: block;
  color: rgb(var(--accent-primary));
  font: 600 14px/1.5 system-ui, -apple-system, sans-serif;
  animation: silia-pulso-pensando 1.3s ease-in-out infinite;
}
@keyframes silia-pulso-pensando { 0%, 100% { opacity: 0.6; } 50% { opacity: 1; } }
@media (prefers-reduced-motion: reduce) { .silia-turn-activo > div.flex.w-full.flex-col.gap-1::before { animation: none; } }
/* #silia-pensando (versión anterior del indicador) ya no se usa: el .silia-turn-activo lo sustituye */
#silia-pensando { display: none !important; }

/* Cabecera: asistente único y fijo, no hay nada que elegir; el selector no se muestra */
[data-testid="model-selector-button"] {
  display: none !important;
}

/* Saludo por hora (silia.js): misma animación de letras que el título original de LibreChat
 * (opacidad 0 a 1, translate3d(0,50px,0) a 0, easeOutCubic; el retraso de 50 ms por letra va en línea) */
.silia-letra { animation: silia-letra 0.6s cubic-bezier(0.215, 0.61, 0.355, 1) both; will-change: transform, opacity; }
@keyframes silia-letra { from { opacity: 0; transform: translate3d(0, 50px, 0); } to { opacity: 1; transform: translate3d(0, 0, 0); } }
@media (prefers-reduced-motion: reduce) { .silia-letra { animation: none; } }

/* Cuenta de servicio: LibreChat pinta «Contacto: <autor del agente>» (componente de contacto, sin data-testid)
 * en la pantalla de inicio, en las tarjetas y en el detalle del agente. El autor real no se toca (rompería permisos). */
div.animate-fadeIn.mt-2.max-w-md.justify-center.items-center.gap-1 {
  display: none !important;
}
div.flex.min-w-0.items-center.gap-1:has(> span.shrink-0:first-child + span.min-w-0.truncate) {
  display: none !important;
}
