/* =================================================
 * PEEKABOO ENGLISH — branding.css
 * Capa de identidad visual sobre LibreChat v0.8.7, SIN fork ni rebuild.
 *
 * CÓMO FUNCIONA (verificado contra el código fuente del tag v0.8.7):
 * LibreChat define toda su paleta "semántica" (fondos, bordes, botón de
 * envío, anillos de foco, etc.) como variables CSS personalizadas en
 * `client/src/style.css` (bloques `html { --surface-primary: ...; }` y
 * `.dark { --surface-primary: ...; }`), y `client/tailwind.config.cjs`
 * mapea las clases de Tailwind directamente a esas variables
 * (`'surface-submit': 'var(--surface-submit)'`, etc. — confirmado línea a
 * línea). Esto significa que **redefinir el VALOR de esas variables en
 * una hoja de estilos cargada DESPUÉS del bundle principal cambia el color
 * real de todos los componentes que usan esa clase, sin tocar ni un solo
 * componente React ni volver a compilar nada** — es CSS puro compitiendo
 * por la cascada (mismo selector `html`/`.dark`, cargado más tarde, gana
 * por orden de aparición).
 *
 * Todo lo de este fichero se aplica DESPUÉS del CSS de LibreChat (ver
 * production/branding/custom/README.md para cómo se carga exactamente:
 * un <link> añadido al final de <head> más un bind mount, no un fork).
 *
 * ALCANCE DELIBERADAMENTE ACOTADO — variables NO tocadas a propósito:
 *   --text-primary, --text-secondary, --surface-chat,
 *   --surface-secondary, --surface-tertiary
 * Son el texto de los mensajes y el fondo de la caja del composer — se
 * dejan intactos para no "alterar agresivamente" la zona de lectura
 * (pedido explícito: mantener fondo claro y legibilidad). Todo lo de aquí
 * abajo son bordes, estados hover/activo, botones y focos — "detalles/
 * acentos", no el contenido.
 *
 * EXCEPCIÓN DELIBERADA, DOCUMENTADA: `--presentation` (sección 1/2) SÍ se
 * toca, con un tinte extremadamente sutil (a un paso de blanco/negro
 * puro), porque es la única variable semántica real del fondo del
 * header/topbar (`Chat/Header.tsx`: "bg-gradient-to-b from-presentation
 * to-transparent") — pero también es el fondo compartido del envoltorio
 * de toda la vista de mensajes (`SidePanelGroup.tsx`) y de bastantes menús/
 * desplegables (selector de modelo, marcadores, exportar, etc.). Se
 * documenta el alcance real más abajo, en la sección correspondiente —
 * el valor elegido es intencionadamente casi imperceptible para no romper
 * "prácticamente blanco" en la zona de lectura.
 * ================================================= */

/* -------------------------------------------------
 * 1. VARIABLES DE MARCA — modo claro
 * Mismos selectores que client/src/style.css (html { ... }) para heredar
 * la especificidad exacta y ganar solo por orden de carga, sin !important.
 * ------------------------------------------------- */
html {
  /* Botón principal ("Enviar", "Guardar", etc. — variante `submit` de
     packages/client/src/components/Button.tsx: "bg-surface-submit
     text-white hover:bg-surface-submit-hover"). Texto blanco fijo en el
     propio componente (comentario del código: "hardcoded text color
     because of WCAG contrast issues") — por eso el fondo debe mantener
     contraste alto con blanco; ambos tonos lo cumplen. */
  --surface-submit: #32556b; /* Azul principal Peekaboo */
  --surface-submit-hover: #24404f; /* Azul principal, ~25% más oscuro */

  /* Foco por teclado/ratón (focus-visible:ring-2 ring-ring-primary, ej.
     client/src/components/Nav/SearchBar.tsx:114). */
  --ring-primary: #4d81e8; /* Azul vivo Peekaboo */

  /* Conversación activa en el sidebar (bg-surface-active-alt, confirmado
     en client/src/components/Conversations/Convo.tsx:223) y estados hover
     genéricos (hover:bg-surface-active-alt / hover:bg-surface-hover en
     decenas de componentes de Nav/Conversations). */
  --surface-active: #d9e8f0;
  --surface-active-alt: #ccdeea; /* Fondo azul claro Peekaboo, tal cual */
  --surface-hover: #e6f0f5;
  --surface-hover-alt: #e0edf3;

  /* Bordes ("bordes suaves" pedido explícitamente) — tinte azul muy sutil
     en vez del gris neutro por defecto, en todos los border-border-*. */
  --border-light: #e6eef3;
  --border-medium: #cddce6;
  --border-medium-alt: #c2d5e2;
  --border-heavy: #a9c3d3;

  /* Detalle de acento menor (spinner de ejecución de código, único uso
     real confirmado: client/src/components/Chat/Messages/Content/ProgressCircle.tsx). */
  --brand-purple: #67c6bd; /* Turquesa Peekaboo, en vez del morado por defecto */

  /* Barra vertical izquierda (icono de 52px) + panel expandido de
     conversaciones/archivos — confirmado en
     client/src/components/UnifiedSidebar/ExpandedPanel.tsx:145
     ("bg-surface-primary-alt") y Sidebar.tsx:29 (el <nav> también la usa).
     Antes var(--gray-50) #f7f7f8 — tinte muy sutil, no un color saturado
     (pedido explícito: "ligeramente tintado", no agresivo). */
  --surface-primary-alt: #eef5f9;

  /* Header/topbar del chat (Chat/Header.tsx: "bg-gradient-to-b
     from-presentation to-transparent") + fondo compartido de menús/
     desplegables (selector de modelo, marcadores, exportar, MCP, editor
     de Skills) y del envoltorio de la vista de mensajes
     (SidePanelGroup.tsx). Antes var(--white) #ffffff exacto. Tinte
     deliberadamente casi imperceptible — "prácticamente blanco" sigue
     cumpliéndose — para dar solo una pizca de temperatura al chrome sin
     teñir la lectura. Ver "Riesgo" más abajo para el alcance completo. */
  --presentation: #fafcfe;

  /* Foco genérico de shadcn/ui (Button.tsx: "focus-visible:ring-ring" —
     TODAS las variantes de botón: submit/outline/secondary/ghost/
     destructive/link — y de otros controles con foco visible, ej.
     AttachFile.tsx: "focus-visible:ring-primary"). Formato HSL sin
     hsl(...) porque así lo exige Tailwind (--ring: H S% L%, ver
     client/src/style.css:104). Azul vivo #4D81E8 = hsl(220 77% 61%). */
  --ring: 220 77% 61%;
}

/* -------------------------------------------------
 * 2. VARIABLES DE MARCA — modo oscuro
 * Mismo selector .dark que usa LibreChat (client/src/style.css:132).
 * ------------------------------------------------- */
.dark {
  --surface-submit: #4d81e8; /* Azul vivo — con más contraste que el principal sobre fondos oscuros */
  --surface-submit-hover: #3a6bcf;

  --ring-primary: #67c6bd; /* Turquesa — visible sobre fondos oscuros */

  --surface-active: #2b4657;
  --surface-active-alt: #33586e;
  --surface-hover: #26404f;
  --surface-hover-alt: #2c4a5c;

  --border-light: #2c3e48;
  --border-medium: #3a5468;
  --border-medium-alt: #3d5c72;
  --border-heavy: #4a7086;

  --brand-purple: #67c6bd;

  /* Antes var(--gray-850) #171717 — mismo criterio: tinte sutil, no un
     azul marcado, para que siga leyéndose como "oscuro", solo que de
     marca. */
  --surface-primary-alt: #131d23;

  /* Antes var(--gray-800) #212121 — mismo criterio que en claro: casi
     imperceptible, "prácticamente" el mismo oscuro neutro de siempre. */
  --presentation: #1a2228;

  /* Turquesa #67C6BD = hsl(174 45% 59%) — más visible que el azul vivo
     sobre fondos oscuros para el foco genérico de shadcn/ui. */
  --ring: 174 45% 59%;
}

/* -------------------------------------------------
 * 3. LOGIN — fondo de página, tarjeta y botón de Microsoft
 * AuthLayout.tsx (v0.8.7) NO usa las variables semánticas de arriba en su
 * fondo — usa las utilidades literales de Tailwind `bg-white`/
 * `dark:bg-gray-900` directamente. Por eso aquí se apunta a esas clases
 * compiladas, no a variables. Es el único bloque de este fichero con este
 * acoplamiento (ver "Riesgo" en README.md).
 *
 * VERIFICADO 2026-09-12 contra el estado real de producción (captura de
 * https://ia.peekaboo.es/login): con `ALLOW_EMAIL_LOGIN=false` y
 * `ALLOW_REGISTRATION=false`, `client/src/components/Auth/Login.tsx`
 * confirma en código que ni `<LoginForm>` (email/contraseña) ni el enlace
 * de registro se renderizan en absoluto (`{startupConfig?.emailLoginEnabled
 * === true && <LoginForm .../>}` — la condición es falsa, no se monta
 * nada, ni siquiera un contenedor vacío). El separador "o" de
 * SocialLoginRender.tsx tampoco se renderiza (misma condición). El DOM
 * real es exactamente: fondo → logo → tarjeta con el h1 "Bienvenido de
 * nuevo" → botón de Microsoft. No hay ningún selector en este fichero para
 * inputs, campos de email/contraseña ni el separador — no existen en esta
 * instalación y no se ha escrito CSS para ellos.
 * ------------------------------------------------- */

/* Fondo de toda la pantalla de login (el div raíz de AuthLayout.tsx tiene
   min-h-screen + bg-white/dark:bg-gray-900 — combinación única de esa
   clase en esta pantalla). */
.min-h-screen.bg-white {
  background: linear-gradient(180deg, #ffffff 0%, #ccdeea 100%);
}
.dark .min-h-screen.dark\:bg-gray-900 {
  background: linear-gradient(180deg, #0d0d0d 0%, #1b2a35 100%);
}

/* Tarjeta del formulario (className `w-authPageWidth` es exclusivo de
   este elemento en todo client/src — confirmado por grep). Se le da
   volumen propio (sombra + borde + esquinas redondeadas siempre, no solo
   a partir de `sm:`) para que se perciba como una tarjeta distinta del
   fondo, no fundida con él. */
.w-authPageWidth {
  border-radius: 16px !important;
  border: 1px solid #e6eef3;
  box-shadow: 0 4px 24px rgba(50, 85, 107, 0.12);
}
.dark .w-authPageWidth {
  border-color: #2c3e48;
  box-shadow: 0 4px 24px rgba(0, 0, 0, 0.45);
}

/* Título de la tarjeta de login (h1, className `text-black dark:text-white`
   en AuthLayout.tsx). */
.w-authPageWidth h1.text-black {
  color: #32556b;
}
.dark .w-authPageWidth h1.dark\:text-white {
  color: #ccdeea;
}

/* Botón "Entrar con Microsoft" — selector estable: `data-testid="openid"`
   (prop `id="openid"` de SocialButton, ver
   client/src/components/Auth/SocialLoginRender.tsx y SocialButton.tsx).
   Más fiable que apuntar a sus clases de Tailwind, que también cambiarían
   con --border-light/--surface-tertiary si se tocaran esas variables de
   forma global — aquí se prefiere un toque explícito solo en este botón. */
a[data-testid='openid'] {
  border: 1.5px solid #32556b !important;
  border-radius: 12px;
}
a[data-testid='openid']:hover {
  background-color: #ccdeea !important;
}
.dark a[data-testid='openid'] {
  border-color: #4d81e8 !important;
}
.dark a[data-testid='openid']:hover {
  background-color: #26404f !important;
}

/* -------------------------------------------------
 * 4. SIDEBAR — barra indicadora de la conversación activa
 * Convo.tsx:223 añade una barra vertical con before:bg-black/
 * dark:before:bg-white junto al fondo bg-surface-active-alt (ya tintado
 * en la sección 1). Se recolorea también esa barra — con CORAL, no con el
 * azul de foco/hover (--ring-primary), a propósito: así "seleccionado"
 * (coral, un único trazo pequeño) y "foco/hover" (azul vivo/turquesa) se
 * distinguen visualmente en vez de competir por el mismo tono. Es el único
 * uso de coral de todo el fichero — deliberadamente puntual, no un color
 * dominante. Selectores exactos que compila Tailwind para esas utilidades
 * — alcance muy acotado, por eso el !important puntual aquí es de bajo
 * riesgo.
 * ------------------------------------------------- */
.before\:bg-black::before {
  background-color: #f36874 !important; /* Coral Peekaboo */
}
.dark .dark\:before\:bg-white::before {
  background-color: #f36874 !important; /* Mismo coral — suficiente contraste también sobre fondos oscuros */
}

/* -------------------------------------------------
 * 5. APP — botón "Nuevo chat", iconos activos de la barra vertical,
 * botón de enviar
 * Todos con selector `data-testid`/`id` reales del código — más estables
 * que apuntar a clases de Tailwind (ver README.md).
 * ------------------------------------------------- */

/* "Nuevo chat" en la barra vertical izquierda (52px), confirmado en
   client/src/components/UnifiedSidebar/ExpandedPanel.tsx:52
   (`data-testid="new-chat-button"`, hoy transparente con icono
   `text-text-primary`). Pedido explícito: "claramente en azul Peekaboo". */
[data-testid='new-chat-button'] {
  background-color: #32556b;
  border-radius: 10px;
}
[data-testid='new-chat-button'] svg {
  color: #ffffff !important;
}
[data-testid='new-chat-button']:hover {
  background-color: #24404f;
}
.dark [data-testid='new-chat-button'] {
  background-color: #4d81e8;
}
.dark [data-testid='new-chat-button'] svg {
  color: #0d0d0d !important;
}
.dark [data-testid='new-chat-button']:hover {
  background-color: #3a6bcf;
}
.dark [data-testid='new-chat-button']:hover svg {
  color: #ffffff !important;
}

/* Icono ACTIVO de la barra vertical (conversaciones/archivos/agentes —
   cualquier panel, confirmado en ExpandedPanel.tsx:107:
   `data-testid={`nav-panel-${link.id}`}`, con `aria-pressed` reflejando el
   estado). El fondo ya sale en #CCDEEA vía --surface-active-alt (sección
   1); aquí solo se afina el color del icono en ese estado a azul
   principal — "iconos activos con color de marca cuando sea seguro": se
   limita a los botones de panel, no a iconos sueltos por toda la app. */
[data-testid^='nav-panel-'][aria-pressed='true'] svg {
  color: #32556b !important;
}
.dark [data-testid^='nav-panel-'][aria-pressed='true'] svg {
  color: #67c6bd !important;
}

/* Botón de enviar mensaje — id="send-button"/data-testid="send-button"
   (client/src/components/Chat/Input/SendButton.tsx), hoy
   `bg-text-primary` (negro en claro / blanco en oscuro). Se sustituye por
   azul Peekaboo con icono blanco, consistente con el resto de acciones
   principales (--surface-submit ya usa el mismo azul). */
#send-button {
  background-color: #32556b !important;
  color: #ffffff !important;
}
#send-button:disabled {
  background-color: #a9c3d3 !important;
  color: #ffffff !important;
  opacity: 0.5 !important;
}
.dark #send-button {
  background-color: #4d81e8 !important;
  color: #0d0d0d !important;
}
.dark #send-button:disabled {
  background-color: #3a5468 !important;
  color: #ececec !important;
  opacity: 0.5 !important;
}

/* -------------------------------------------------
 * 6. COMPOSER — borde en foco
 * Confirmado en Chat/Input/ChatForm.tsx: el contenedor del composer usa
 * "border-border-light bg-surface-chat" (fondo NO tocado, ver alcance
 * acotado de la cabecera) y ya cambia de sombra al enfocar el textarea,
 * pero no de color de borde. Se usa `:has(textarea:focus)` — el propio
 * ChatForm.tsx YA usa `:has(textarea:focus)` en esa misma línea para su
 * efecto de sombra (`[&:has(textarea:focus)]:shadow-...`), así que no es
 * una dependencia nueva de soporte de navegador: si no funcionara, ese
 * efecto propio de LibreChat tampoco lo haría. Selector combinado con
 * `.border-border-light` (ya usado, entre otros, por el composer con
 * `bg-surface-chat`) para mantenerlo acotado a ese contenedor concreto. */
.border-border-light:has(textarea:focus) {
  border-color: #4d81e8 !important;
}
.dark .border-border-light:has(textarea:focus) {
  border-color: #67c6bd !important;
}

/* -------------------------------------------------
 * 7. AVATAR/ICONOS — anillo sutil de marca
 * `.shadow-stroke` (client/src/style.css) es una clase dedicada —
 * confirmado por grep que solo la usan 6 ficheros, todos de icono/avatar
 * (Endpoints/MessageEndpointIcon.tsx —el icono del asistente en cada
 * mensaje—, ConvoIconURL.tsx, Landing.tsx, AddedConvo.tsx,
 * SidePanel/Agents/AgentConfig.tsx) — no una utilidad genérica reutilizada
 * en contextos ajenos. Por defecto pinta un trazo interior de 1px en
 * negro/blanco translúcido (`--tw-shadow: inset 0 0 0 1px rgba(0,0,0,.1)`
 * en claro); aquí se sustituye por el mismo trazo en azul de marca
 * translúcido — un detalle, no un relleno de color. */
.shadow-stroke:after {
  --tw-shadow: inset 0 0 0 1px rgba(50, 85, 107, 0.35) !important;
}
.dark .shadow-stroke:after {
  --tw-shadow: inset 0 0 0 1.5px rgba(103, 198, 189, 0.45) !important;
}

/* -------------------------------------------------
 * Fin. Nada en este fichero toca componentes de chat (mensajes, markdown,
 * code blocks), autenticación/lógica, SharePoint ni Bedrock. El texto de
 * los mensajes y el fondo de la caja del composer (`--surface-chat`,
 * `--text-primary`) siguen exactamente igual que en LibreChat stock; el
 * fondo compartido del envoltorio de mensajes (`--presentation`) recibe
 * solo un tinte casi imperceptible, documentado en la sección 1/2.
 * ================================================= */
