/* ========================================
   B1Lite AI Assistant - Chat Overlay CSS
   ======================================== */

/* ========================================
   CSS Custom Properties (Design Tokens)
   ======================================== */
:root {
    /* Primary Colors */
    --ai-primary-color: #0a6ed1;
    --ai-primary-hover: #0854a0;
    --ai-primary-light: #e8f0fe;
    /* Background Colors */
    --ai-bg-panel: #ffffff;
    --ai-bg-messages: #f5f6fa;
    --ai-bg-assistant-message: #ffffff;
    --ai-bg-user-message: #0a6ed1;
    --ai-bg-welcome: linear-gradient(180deg, #f8f9fc 0%, #ffffff 100%);
    --ai-bg-error: #fff5f5;
    --ai-bg-chip: #f0f1f5;
    --ai-bg-chip-hover: #e4e6eb;
    /* Text Colors */
    --ai-text-primary: #1d1d1d;
    --ai-text-secondary: #6a6a6a;
    --ai-text-tertiary: #a0a0a0;
    --ai-text-user-message: #ffffff;
    --ai-text-assistant-message: #1d1d1d;
    --ai-text-placeholder: #a0a0a0;
    --ai-text-error: #e74c3c;
    /* Border Colors */
    --ai-border-light: #e4e6eb;
    --ai-border-medium: #d0d0d0;
    --ai-border-focus: #0a6ed1;
    --ai-border-error: #ffcccc;
    /* Status Colors */
    --ai-status-sent: #a0a0a0;
    --ai-status-delivered: #4caf50;
    --ai-status-error: #e74c3c;
    /* Spacing */
    --ai-spacing-xs: 4px;
    --ai-spacing-sm: 8px;
    --ai-spacing-md: 12px;
    --ai-spacing-lg: 16px;
    --ai-spacing-xl: 24px;
    /* Typography */
    --ai-font-family: "72", "72Full", "Arial", sans-serif;
    --ai-font-size-xs: 11px;
    --ai-font-size-sm: 13px;
    --ai-font-size-md: 14px;
    --ai-font-size-lg: 18px;
    --ai-line-height: 1.5;
    /* Border Radius */
    --ai-radius-sm: 8px;
    --ai-radius-md: 12px;
    --ai-radius-lg: 16px;
    --ai-radius-xl: 24px;
    /* Shadows */
    --ai-shadow-panel: 0 8px 32px rgba(0, 0, 0, 0.12), 0 2px 8px rgba(0, 0, 0, 0.08);
    --ai-shadow-header: 0 2px 4px rgba(0, 0, 0, 0.1);
    --ai-shadow-message-user: 0 1px 2px rgba(10, 110, 209, 0.2);
    --ai-shadow-message-assistant: 0 1px 2px rgba(0, 0, 0, 0.06);
    --ai-shadow-fab: 0 4px 12px rgba(0, 0, 0, 0.15);
    /* Transitions */
    --ai-transition-fast: 0.2s ease;
    --ai-transition-normal: 0.3s ease;
    /* Z-Index */
    --ai-z-panel: 1000;
    --ai-z-fab: 999;
    --ai-z-tooltip: 1001;
    /* Safe Area (mobile) */
    --ai-safe-area-top: env(safe-area-inset-top, 0px);
    --ai-safe-area-bottom: env(safe-area-inset-bottom, 0px);
}

/* ========================================
   FAB Button (Floating Action Button)
   ======================================== */

.niaFab {
    position: fixed !important;
    bottom: 24px !important;
    right: 24px !important;
    width: 56px !important;
    height: 56px !important;
    min-width: 56px !important;
    min-height: 56px !important;
    border-radius: 50% !important;
    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15), 0 2px 4px rgba(0, 0, 0, 0.1) !important;
    z-index: 999 !important;
    transition: transform 0.2s ease, box-shadow 0.2s ease !important;
}

    .niaFab:hover {
        transform: translateY(-2px) !important;
        box-shadow: 0 6px 16px rgba(0, 0, 0, 0.2), 0 4px 6px rgba(0, 0, 0, 0.1) !important;
    }

    .niaFab:active {
        transform: translateY(0) scale(0.95) !important;
    }

    .niaFab .sapMBtnInner {
        width: 56px !important;
        height: 56px !important;
        min-width: 56px !important;
        min-height: 56px !important;
        border-radius: 50% !important;
        padding: 0 !important;
        display: flex !important;
        align-items: center !important;
        justify-content: center !important;
    }

    .niaFab .sapUiIcon {
        font-size: 1.5rem !important;
        line-height: 1 !important;
    }

/* ========================================
   Chat Overlay Panel
   ======================================== */

.chatOverlayPanel {
    position: fixed !important;
    bottom: 16px !important;
    right: 20px !important;
    width: 380px !important;
    min-width: 320px !important;
    max-width: calc(100vw - 40px) !important;
    height: 600px !important;
    min-height: 400px !important;
    max-height: calc(100vh - 32px) !important;
    background-color: var(--ai-bg-panel) !important;
    border-radius: var(--ai-radius-lg) !important;
    box-shadow: var(--ai-shadow-panel) !important;
    display: flex !important;
    flex-direction: column !important;
    overflow: hidden !important;
    z-index: var(--ai-z-panel) !important;
    border: 1px solid var(--ai-border-light) !important;
    animation: chatOverlaySlideIn var(--ai-transition-normal) ease-out !important;
    /* Sem !important de proposito: _applyChatOverlayTransformOrigin sobrescreve
       inline com a posicao real do FAB, que e' arrastavel. Este valor e' so' o
       fallback para quando o FAB nao esta' no DOM. */
    transform-origin: bottom right;
}

    .chatOverlayPanel.closing {
        animation: chatOverlaySlideOut var(--ai-transition-normal) ease-in forwards !important;
        pointer-events: none !important;
    }

    /* Durante o arraste, nenhuma transicao — ver .animating-state, que e' o
       unico lugar onde transicao de geometria e' desejada. */
    .chatOverlayPanel.resizing {
        transition: none !important;
    }

    /* Transicao aplicada SO durante a troca de estado, nunca durante o arraste
       (ver .resizing) nem em repouso. Removida no transitionend pelo
       controller.
       ponytail: transicao de propriedades de layout — um reflow por frame. Com
       lista longa de mensagens pode dar jank; se der, trocar por FLIP (medir
       rects antes/depois, transform inverso, animar ate a identidade). */
    .chatOverlayPanel.animating-state {
        /* Sem "ease" extra: --ai-transition-normal ja' vale "0.3s ease". Um
           segundo timing function torna a declaracao invalida e o navegador
           descarta a regra inteira, caindo no default (transition-property:
           all, duracao 0s) — ou seja, nenhuma animacao. */
        transition: width var(--ai-transition-normal),
                    height var(--ai-transition-normal),
                    top var(--ai-transition-normal),
                    bottom var(--ai-transition-normal),
                    left var(--ai-transition-normal),
                    border-radius var(--ai-transition-normal) !important;
    }

    /* Modo expandido: preset fixo de painel lateral (~metade da tela).
       Tamanho customizado via drag (width/height inline) fica sem efeito
       enquanto esta classe estiver presente — ver onToggleChatOverlayExpand. */
    .chatOverlayPanel.expanded {
        width: 50vw !important;
        max-width: 50vw !important;
        height: 100vh !important;
        max-height: 100vh !important;
        top: 0 !important;
        bottom: 0 !important;
        right: 0 !important;
        border-radius: 0 !important;
        border-top-left-radius: var(--ai-radius-lg) !important;
        border-bottom-left-radius: var(--ai-radius-lg) !important;
    }

    /* Tela cheia: ocupa a viewport inteira, sem raio nem borda. Terceiro e
       ultimo estado do ciclo do botao do header. */
    .chatOverlayPanel.fullscreen {
        width: 100vw !important;
        max-width: 100vw !important;
        height: 100vh !important;
        max-height: 100vh !important;
        top: 0 !important;
        bottom: 0 !important;
        left: 0 !important;
        right: 0 !important;
        border-radius: 0 !important;
        border: none !important;
    }

@keyframes chatOverlaySlideIn {
    from {
        opacity: 0;
        transform: translateY(16px) scale(0.98);
    }

    to {
        opacity: 1;
        transform: translateY(0) scale(1);
    }
}

@keyframes chatOverlaySlideOut {
    from {
        opacity: 1;
        transform: translateY(0) scale(1);
    }

    to {
        opacity: 0;
        transform: translateY(16px) scale(0.98);
    }
}


.chatOverlayPanel > .sapUiVltCell {
    display: flex !important;
    flex-direction: column !important;
    flex: 0 0 auto !important;
    min-height: 0 !important;
    width: 100% !important;
}

    /* Cells cujo unico filho eh o placeholder renderizado para controles
   visible=false mantem altura ~76px e criam gaps. Colapsam para zero. */
    .chatOverlayPanel > .sapUiVltCell:has(> .sapUiHiddenPlaceholder) {
        height: 0 !important;
        min-height: 0 !important;
        max-height: 0 !important;
        overflow: hidden !important;
        flex: 0 0 0 !important;
    }

    /* A cell que envolve o ScrollContainer (chatOverlayMessages) precisa
   crescer para a area de mensagens poder ocupar o espaco. */
    .chatOverlayPanel > .sapUiVltCell:has(> .chatOverlayMessages) {
        flex: 1 1 auto !important;
    }

    /* Re-aplica flex:1 na propria messages para preencher a cell. */
    .chatOverlayPanel > .sapUiVltCell > .chatOverlayMessages {
        flex: 1 1 auto !important;
        min-height: 0 !important;
    }

    /* Fallback para Safari/iOS sem suporte a :has(). */
    .chatOverlayPanel > .sapUiVltCell > .sapUiHiddenPlaceholder {
        display: none !important;
        height: 0 !important;
        width: 0 !important;
        margin: 0 !important;
        padding: 0 !important;
    }

    /* Handles de resize (drag): mesma logica de zerar a cell da VerticalLayout
       usada em chatOverlayScrollBtn, para o handle ancorar via position:absolute
       direto no chatOverlayPanel em vez de ficar preso no fluxo do layout. */
    .chatOverlayPanel > .sapUiVltCell:has(> .chatOverlayResizeHandle) {
        position: static !important;
        height: 0 !important;
        min-height: 0 !important;
        max-height: 0 !important;
        overflow: visible !important;
        flex: 0 0 0 !important;
    }

/* ========================================
   Resize Handles (drag para redimensionar)
   ======================================== */

.chatOverlayResizeHandle {
    position: absolute !important;
    z-index: 5 !important;
    /* Obrigatorio para PointerEvent em touch: sem isso o navegador trata o
       arraste como scroll e nunca entrega pointermove ao handle. */
    touch-action: none !important;
}

.chatOverlayResizeHandleTop {
    top: -4px !important;
    left: 8px !important;
    right: 8px !important;
    height: 8px !important;
    cursor: ns-resize !important;
}

.chatOverlayResizeHandleLeft {
    top: 8px !important;
    bottom: 8px !important;
    left: -4px !important;
    width: 8px !important;
    cursor: ew-resize !important;
}

/* Canto superior-esquerdo: redimensiona os dois eixos. Fica por cima dos
   outros dois handles (z-index maior) na regiao de sobreposicao. */
.chatOverlayResizeHandleCorner {
    top: -4px !important;
    left: -4px !important;
    width: 16px !important;
    height: 16px !important;
    cursor: nwse-resize !important;
    z-index: 6 !important;
}

/* Os handles sao invisiveis em repouso — sem isso nada indica que o painel e'
   redimensionavel. Grip discreto so' no hover, via ::after para nao exigir
   markup extra no fragment. */
.chatOverlayResizeHandle::after {
    content: "";
    position: absolute;
    background-color: var(--ai-text-secondary);
    border-radius: 2px;
    opacity: 0;
    transition: opacity 150ms ease;
}

.chatOverlayResizeHandle:hover::after {
    opacity: 0.4;
}

.chatOverlayResizeHandleTop::after {
    left: 50%;
    top: 3px;
    width: 32px;
    height: 2px;
    margin-left: -16px;
}

.chatOverlayResizeHandleLeft::after {
    top: 50%;
    left: 3px;
    width: 2px;
    height: 32px;
    margin-top: -16px;
}

.chatOverlayResizeHandleCorner::after {
    top: 5px;
    left: 5px;
    width: 6px;
    height: 6px;
    border-radius: 50%;
}

/* Expandido e tela cheia tem tamanho fixo — handles nao se aplicam neles. */
.chatOverlayPanel.expanded .chatOverlayResizeHandle,
.chatOverlayPanel.fullscreen .chatOverlayResizeHandle {
    display: none !important;
}

/* ========================================
   Chat Overlay Header
   ======================================== */

.chatOverlayHeader {
    display: flex !important;
    align-items: center !important;
    justify-content: space-between !important;
    padding: var(--ai-spacing-sm) var(--ai-spacing-md) !important;
    background: linear-gradient(135deg, var(--ai-primary-color) 0%, var(--ai-primary-hover) 100%) !important;
    color: var(--ai-text-user-message) !important;
    box-shadow: var(--ai-shadow-header) !important;
    flex-shrink: 0 !important;
    min-height: 56px !important;
    box-sizing: border-box !important;
}

.chatOverlayHeaderLeft {
    display: flex !important;
    align-items: center !important;
    flex: 1 !important;
    min-width: 0 !important;
}

.chatOverlayAvatarImg {
    margin-right: var(--ai-spacing-sm) !important;
    flex-shrink: 0 !important;
}

    .chatOverlayAvatarImg .sapUiAvatarImage,
    .chatOverlayAvatarImg .sapUiAvatarInitials,
    .chatOverlayAvatarImg .sapUiIcon {
        color: var(--ai-text-user-message) !important;
    }

.chatOverlayTitleText {
    color: var(--ai-text-user-message) !important;
    font-weight: 600 !important;
    font-size: var(--ai-font-size-md) !important;
    text-shadow: none !important;
}

.chatOverlayStatusText {
    color: rgba(255, 255, 255, 0.85) !important;
    font-size: var(--ai-font-size-xs) !important;
}

/* Online Indicator Dot */
.chatOverlayOnlineIndicator {
    width: 8px !important;
    height: 8px !important;
    background-color: #4caf50 !important;
    border-radius: 50% !important;
    margin-right: 4px !important;
    display: inline-block !important;
    flex-shrink: 0 !important;
}

.chatOverlayCloseBtn {
    color: var(--ai-text-user-message) !important;
    min-width: 36px !important;
    min-height: 36px !important;
    width: 36px !important;
    height: 36px !important;
    border-radius: 50% !important;
}

.chatOverlayNewConversationBtn {
    color: var(--ai-text-user-message) !important;
    min-width: 36px !important;
    min-height: 36px !important;
    width: 36px !important;
    height: 36px !important;
    border-radius: 50% !important;
}

    .chatOverlayNewConversationBtn .sapMBtnInner {
        min-width: 36px !important;
        min-height: 36px !important;
        width: 36px !important;
        height: 36px !important;
        border-radius: 50% !important;
        background: transparent !important;
        border: none !important;
        transition: background-color var(--ai-transition-fast), transform var(--ai-transition-fast) !important;
    }

    .chatOverlayNewConversationBtn .sapUiIcon {
        color: var(--ai-text-user-message) !important;
        font-size: 1rem !important;
    }

    .chatOverlayNewConversationBtn:hover .sapMBtnInner {
        background: rgba(255, 255, 255, 0.15) !important;
    }

    .chatOverlayNewConversationBtn:active .sapMBtnInner {
        background: rgba(255, 255, 255, 0.25) !important;
        transform: scale(0.92) !important;
    }

    .chatOverlayCloseBtn .sapMBtnInner {
        min-width: 36px !important;
        min-height: 36px !important;
        width: 36px !important;
        height: 36px !important;
        border-radius: 50% !important;
        background: transparent !important;
        border: none !important;
        transition: background-color var(--ai-transition-fast), transform var(--ai-transition-fast) !important;
    }

    .chatOverlayCloseBtn .sapUiIcon {
        color: var(--ai-text-user-message) !important;
        font-size: 1rem !important;
    }

    .chatOverlayCloseBtn:hover .sapMBtnInner {
        background: rgba(255, 255, 255, 0.15) !important;
    }

    .chatOverlayCloseBtn:active .sapMBtnInner {
        background: rgba(255, 255, 255, 0.25) !important;
        transform: scale(0.92) !important;
    }

.chatOverlayHeaderActions {
    gap: var(--ai-spacing-xs) !important;
    flex-shrink: 0 !important;
}

.chatOverlayExpandBtn {
    color: var(--ai-text-user-message) !important;
    min-width: 36px !important;
    min-height: 36px !important;
    width: 36px !important;
    height: 36px !important;
    border-radius: 50% !important;
}

    .chatOverlayExpandBtn .sapMBtnInner {
        min-width: 36px !important;
        min-height: 36px !important;
        width: 36px !important;
        height: 36px !important;
        border-radius: 50% !important;
        background: transparent !important;
        border: none !important;
        transition: background-color var(--ai-transition-fast), transform var(--ai-transition-fast) !important;
    }

    .chatOverlayExpandBtn .sapUiIcon {
        color: var(--ai-text-user-message) !important;
        font-size: 1rem !important;
    }

    .chatOverlayExpandBtn:hover .sapMBtnInner {
        background: rgba(255, 255, 255, 0.15) !important;
    }

    .chatOverlayExpandBtn:active .sapMBtnInner {
        background: rgba(255, 255, 255, 0.25) !important;
        transform: scale(0.92) !important;
    }

/* ========================================
   Messages Area
   ======================================== */

.chatOverlayMessages {
    flex: 1 !important;
    overflow-y: auto !important;
    overflow-x: hidden !important;
    padding: var(--ai-spacing-sm) !important;
    background-color: var(--ai-bg-messages) !important;
    min-height: 0 !important;
    /* Firefox: scrollbar-width/color nao tem equivalente em ::-webkit-scrollbar.
       Largura fina e cor discreta consistente com a aparencia do WebKit. */
    scrollbar-width: thin;
    scrollbar-color: var(--ai-border-medium) transparent;
}

.chatOverlayMessageList {
    display: flex !important;
    flex-direction: column !important;
    gap: var(--ai-spacing-sm) !important;
    /* min-height: 0 (antes 100%) impede que a lista expanda para preencher
     o pai mesmo sem conteudo, o que escondia a ultima mensagem abaixo da
     viewport durante streaming */
    min-height: 0 !important;
    width: 100% !important;
}

/* ========================================
   Typing Indicator
   ======================================== */

/* Usado pela página clássica de chat (Chat.view.xml / Chat.controller.js),
   que ainda alterna visibilidade via setVisible() em vez de classe CSS. */
.chatOverlayTypingIndicator {
    padding: var(--ai-spacing-sm) var(--ai-spacing-md) !important;
    background-color: var(--ai-bg-messages) !important;
    flex-shrink: 0 !important;
    border-top: 1px solid var(--ai-border-light) !important;
}

/* Bolha de "digitando" do overlay da Nia — some parte da lista de mensagens
   (chatOverlayMessageList), com a mesma cara de uma mensagem normal da
   assistente, para que a transição de bolha-de-digitação -> bolha-de-
   resposta pareça uma coisa só. Reaproveita .chatBubbleRow (entrada via
   @keyframes messageAppear) e .chatBubble (fundo/sombra da assistente). */
.chatBubbleTyping {
    display: inline-flex !important;
    align-items: center !important;
    min-width: 52px !important;
    padding: 12px 14px !important;
    /* Pulso bem sutil na bolha inteira, além dos pontinhos — sozinhos, 3
     pontos de 7px eram fáceis de não notar num espera longa (a Nia pode
     "pensar" por dezenas de segundos), dando a impressão de tela travada. */
    animation: typingBubbleBreathe 2.4s ease-in-out infinite !important;
}

.typingDotsContainer {
    display: flex !important;
    align-items: center !important;
    gap: 4px !important;
}

.typingDot {
    width: 7px !important;
    height: 7px !important;
    border-radius: 50% !important;
    background-color: var(--ai-primary-color) !important;
    animation: typingBounce 1.2s infinite ease-in-out both !important;
}

    .typingDot.dot1 {
        animation-delay: -0.32s !important;
    }

    .typingDot.dot2 {
        animation-delay: -0.16s !important;
    }

/* Bounce vertical (não só escala) — movimento de posição chama mais
   atenção que um pulso de tamanho num ponto de 7px. */
@keyframes typingBounce {
    0%, 60%, 100% {
        transform: translateY(0);
        opacity: 0.5;
    }

    30% {
        transform: translateY(-6px);
        opacity: 1;
    }
}

@keyframes typingBubbleBreathe {
    0%, 100% {
        opacity: 1;
    }

    50% {
        opacity: 0.82;
    }
}

/* Variante sem transform do typingBounce, para prefers-reduced-motion. */
@keyframes typingDotFadeReduced {
    0%, 100% {
        opacity: 0.4;
    }

    50% {
        opacity: 1;
    }
}

.typingText {
    color: var(--ai-text-secondary) !important;
    font-size: var(--ai-font-size-sm) !important;
}

/* ========================================
   Scroll to Bottom Button
   ======================================== */

/* O UI5 envolve cada filho de FlexBox numa div position:relative de largura
   zero. Sem neutraliza-la, e' nela que o botao ancora — e nao no footer. */
.chatOverlayPanel .sapMFlexItem:has(> .chatOverlayScrollBtn) {
    position: static !important;
}

.chatOverlayScrollBtn {
    position: absolute !important;
    /* Ancorado na borda superior do footer, nunca um deslocamento em pixels: o
     footer cresce quando a barra de consumo de tokens aparece, e um valor fixo faz
     o botao cair DENTRO dele, em cima do texto de contexto. */
    bottom: calc(100% + 8px) !important;
    right: 20px !important;
    width: 40px !important;
    height: 40px !important;
    border-radius: 50% !important;
    background-color: var(--ai-bg-panel) !important;
    box-shadow: var(--ai-shadow-fab) !important;
    z-index: 10 !important;
    border: 1px solid var(--ai-border-light) !important;
    opacity: 0 !important;
    transform: scale(0.75) translateY(6px) !important;
    /* .chatOverlayContainer * em style.css forca pointer-events:auto em todo
       descendente (especificidade maior que esta classe sozinha). Sem o
       ancestral aqui, o botao invisivel cobre o fim da bolha — inclusive
       "Registros referenciados" — e o clique nao chega no botao de expandir. */
    pointer-events: none !important;
    transition: opacity var(--ai-transition-fast), transform var(--ai-transition-fast) !important;
}

    .chatOverlayContainer .chatOverlayScrollBtn,
    #chatOverlayContainer .chatOverlayScrollBtn {
        pointer-events: none !important;
    }

    .chatOverlayScrollBtn.is-visible,
    .chatOverlayContainer .chatOverlayScrollBtn.is-visible,
    #chatOverlayContainer .chatOverlayScrollBtn.is-visible {
        opacity: 1 !important;
        transform: scale(1) translateY(0) !important;
        pointer-events: auto !important;
    }

    /* A bandeja de anexos ocupa a mesma faixa (bottom:100%). Com ela aberta o
       botao sai: um controle invisivel no UI5 e' substituido por
       .sapUiHiddenPlaceholder, entao .chatOverlayAttachments so existe no DOM
       quando ha anexos de fato. */
    .chatOverlayFooter:has(.chatOverlayAttachments) .chatOverlayScrollBtn {
        display: none !important;
    }

    .chatOverlayScrollBtn .sapMBtnInner {
        min-width: 40px !important;
        min-height: 40px !important;
        width: 40px !important;
        height: 40px !important;
        border-radius: 50% !important;
        background: var(--ai-bg-panel) !important;
        border: none !important;
        padding: 0 !important;
        display: flex !important;
        align-items: center !important;
        justify-content: center !important;
        transition: background-color var(--ai-transition-fast), transform var(--ai-transition-fast) !important;
    }

    .chatOverlayScrollBtn .sapUiIcon {
        font-size: 1.1rem !important;
        line-height: 1 !important;
        color: var(--ai-text-secondary) !important;
    }

    .chatOverlayScrollBtn:hover .sapMBtnInner {
        background-color: var(--ai-bg-chip-hover) !important;
    }

    .chatOverlayScrollBtn:active .sapMBtnInner {
        transform: scale(0.9) !important;
    }

/* ========================================
   Footer / Input Area
   ======================================== */

.chatOverlayFooter {
    /* COLUNA, obrigatoriamente. O footer e' um HBox (flex row por padrao) e hoje
       tem dois filhos com width:100% — a barra de consumo de tokens e o wrapper do
       input. Em linha, os dois dividem o espaco meio a meio e o campo de mensagem
       fica espremido na metade direita. */
    flex-direction: column !important;
    align-items: stretch !important;
    padding: var(--ai-spacing-sm) var(--ai-spacing-md) !important;
    padding-bottom: calc(var(--ai-spacing-sm) + var(--ai-safe-area-bottom)) !important;
    background-color: var(--ai-bg-panel) !important;
    border-top: 1px solid var(--ai-border-light) !important;
    flex-shrink: 0 !important;
    box-sizing: border-box !important;
}

/* Chips dos arquivos anexados.
   O footer tem altura fixa de 60px (style.css), então os chips não podem
   entrar no fluxo dele: empurrariam o campo de texto para fora do painel.
   Ficam ancorados logo acima do footer, como uma bandeja. */
.chatOverlayPanel .chatOverlayAttachments {
    position: absolute !important;
    bottom: 100% !important;
    left: 10px !important;
    right: 10px !important;
    width: auto !important;
    max-width: calc(100% - 20px) !important;
    box-sizing: border-box !important;
    padding: 4px 8px !important;
    background-color: var(--ai-bg-panel) !important;
    border: 1px solid var(--ai-border-light) !important;
    border-bottom: none !important;
    border-radius: var(--ai-radius-md) var(--ai-radius-md) 0 0 !important;
    overflow: visible !important;
    height: auto !important;
    z-index: 3 !important;
}

/* Com no máximo 3 anexos, quebrar linha é melhor que a rolagem horizontal
   nativa do Tokenizer: todos os nomes ficam visíveis e removíveis. */
.chatOverlayPanel .chatOverlayAttachments .sapMTokenizerScrollContainer {
    display: flex !important;
    flex-wrap: wrap !important;
    gap: 4px !important;
    width: 100% !important;
    overflow: visible !important;
}

/* Indicador "Mais N" some: com renderMode Loose todos os tokens aparecem. */
.chatOverlayPanel .chatOverlayAttachments .sapMTokenizerIndicator {
    display: none !important;
}

/* O UI5 envolve cada filho de FlexBox numa div position:relative de largura
   zero. Sem neutralizá-la, é nela que a bandeja ancora — e ela nasce com 18px. */
.chatOverlayPanel .sapMFlexItem:has(> .chatOverlayAttachments) {
    position: static !important;
}

/* Nome de arquivo longo trunca em vez de esticar a bandeja. */
.chatOverlayPanel .chatOverlayAttachments .sapMToken {
    max-width: 100% !important;
}

.chatOverlayPanel .chatOverlayAttachments .sapMTokenText {
    max-width: 130px !important;
    overflow: hidden !important;
    text-overflow: ellipsis !important;
    white-space: nowrap !important;
}

/* Consumo de tokens do ultimo turno — informativo, nunca compete com a conversa */
.chatOverlayTokenUsageBar {
    padding: 0 6px 2px 0 !important;
}

.chatOverlayTokenUsage {
    font-size: 0.7rem !important;
    opacity: 0.55 !important;
    white-space: nowrap !important;
}

/* Input Wrapper */
.chatOverlayInputWrapper {
    display: flex !important;
    align-items: center !important;
    width: 100% !important;
    background-color: var(--ai-bg-messages) !important;
    border-radius: var(--ai-radius-xl) !important;
    padding: 4px 4px 4px 12px !important;
    border: 1px solid var(--ai-border-light) !important;
    transition: border-color var(--ai-transition-fast), box-shadow var(--ai-transition-fast) !important;
    box-sizing: border-box !important;
}

    .chatOverlayInputWrapper:focus-within {
        border-color: var(--ai-border-focus) !important;
        box-shadow: 0 0 0 2px rgba(10, 110, 209, 0.15) !important;
    }

/* TextArea override */
.chatOverlayInputField {
    flex: 1 !important;
    min-width: 0 !important;
    width: auto !important;
    border: none !important;
    background: transparent !important;
    resize: none !important;
    outline: none !important;
    box-shadow: none !important;
    padding: 0 !important;
    margin: 0 !important;
    min-height: 36px !important;
    max-height: 100px !important;
    font-family: var(--ai-font-family) !important;
    font-size: var(--ai-font-size-sm) !important;
    color: var(--ai-text-primary) !important;
}

    .chatOverlayInputField::placeholder {
        color: var(--ai-text-placeholder) !important;
        font-size: var(--ai-font-size-sm) !important;
    }

    .chatOverlayInputField .sapMTextAreaInner {
        border: none !important;
        background: transparent !important;
        resize: none !important;
        outline: none !important;
        box-shadow: none !important;
        padding: 8px 0 !important;
        min-height: 36px !important;
        font-family: var(--ai-font-family) !important;
        font-size: var(--ai-font-size-sm) !important;
        width: 100% !important;
        box-sizing: border-box !important;
    }

        .chatOverlayInputField .sapMTextAreaInner:focus {
            outline: none !important;
            box-shadow: none !important;
        }

/* Garantir que o wrapper do SAPUI5 respeite o flex */
.chatOverlayInputWrapper .sapMTextArea {
    flex: 1 !important;
    min-width: 0 !important;
    width: 100% !important;
}

/* Send Button */
.chatOverlaySendBtn {
    min-width: 36px !important;
    min-height: 36px !important;
    width: 36px !important;
    height: 36px !important;
    border-radius: 50% !important;
    margin-left: var(--ai-spacing-xs) !important;
    flex-shrink: 0 !important;
    align-self: flex-end !important;
    margin-bottom: 6px !important;
}

    .chatOverlaySendBtn .sapMBtnInner {
        min-width: 36px !important;
        min-height: 36px !important;
        width: 36px !important;
        height: 36px !important;
        border-radius: 50% !important;
        padding: 0 !important;
        display: flex !important;
        align-items: center !important;
        justify-content: center !important;
        background-color: var(--ai-primary-color) !important;
        transition: background-color var(--ai-transition-fast), transform var(--ai-transition-fast), opacity var(--ai-transition-fast) !important;
    }

    .chatOverlaySendBtn:hover .sapMBtnInner {
        background-color: var(--ai-primary-hover) !important;
    }

    .chatOverlaySendBtn:active .sapMBtnInner {
        transform: scale(0.9) !important;
    }

    .chatOverlaySendBtn.sapMBtnDisabled .sapMBtnInner {
        background-color: var(--ai-border-medium) !important;
        opacity: 0.6 !important;
    }

    .chatOverlaySendBtn .sapUiIcon {
        font-size: 1rem !important;
        line-height: 1 !important;
        color: var(--ai-text-user-message) !important;
    }

/* ========================================
   Empty State
   ======================================== */

.chatOverlayEmpty {
    display: flex !important;
    flex-direction: column !important;
    align-items: center !important;
    justify-content: center !important;
    padding: var(--ai-spacing-xl) !important;
    text-align: center !important;
    flex: 1 !important;
    background: var(--ai-bg-welcome) !important;
}

.chatOverlayEmptyIcon {
    font-size: 3rem !important;
    margin-bottom: var(--ai-spacing-md) !important;
}

.chatOverlayEmptyTitle {
    font-size: var(--ai-font-size-lg) !important;
    font-weight: 600 !important;
    color: var(--ai-text-primary) !important;
    margin-bottom: var(--ai-spacing-sm) !important;
}

.chatOverlayEmptyText {
    font-size: var(--ai-font-size-sm) !important;
    color: var(--ai-text-secondary) !important;
    line-height: var(--ai-line-height) !important;
    max-width: 280px !important;
}

/* ========================================
   Error State
   ======================================== */

.chatOverlayError {
    display: flex !important;
    flex-direction: column !important;
    align-items: center !important;
    padding: var(--ai-spacing-lg) !important;
    margin: var(--ai-spacing-md) !important;
    background-color: var(--ai-bg-error) !important;
    border: 1px solid var(--ai-border-error) !important;
    border-radius: var(--ai-radius-md) !important;
    text-align: center !important;
}

.chatOverlayErrorIcon {
    font-size: 2rem !important;
    margin-bottom: var(--ai-spacing-sm) !important;
}

.chatOverlayErrorTitle {
    font-size: var(--ai-font-size-md) !important;
    font-weight: 600 !important;
    color: var(--ai-text-error) !important;
    margin-bottom: var(--ai-spacing-xs) !important;
}

.chatOverlayErrorText {
    font-size: var(--ai-font-size-sm) !important;
    color: var(--ai-text-secondary) !important;
    margin-bottom: var(--ai-spacing-md) !important;
}

.chatOverlayRetryBtn {
    padding: var(--ai-spacing-sm) var(--ai-spacing-md) !important;
    background-color: var(--ai-primary-color) !important;
    color: var(--ai-text-user-message) !important;
    border: none !important;
    border-radius: var(--ai-radius-md) !important;
    font-size: var(--ai-font-size-sm) !important;
    font-weight: 500 !important;
    cursor: pointer !important;
    transition: background-color var(--ai-transition-fast) !important;
}

    .chatOverlayRetryBtn:hover {
        background-color: var(--ai-primary-hover) !important;
    }

/* ========================================
   Message Bubbles
   ======================================== */

.chatBubbleRow {
    display: flex !important;
    justify-content: flex-start !important;
    margin-bottom: var(--ai-spacing-xs) !important;
    animation: messageAppear 0.3s ease-out !important;
}

.chatBubbleRowMe {
    display: flex !important;
    justify-content: flex-end !important;
    margin-bottom: var(--ai-spacing-xs) !important;
    animation: messageAppear 0.3s ease-out !important;
}

@keyframes messageAppear {
    from {
        opacity: 0;
        transform: translateY(10px);
    }

    to {
        opacity: 1;
        transform: translateY(0);
    }
}

.chatBubble {
    max-width: 80% !important;
    background-color: var(--ai-bg-assistant-message) !important;
    color: var(--ai-text-assistant-message) !important;
    padding: var(--ai-spacing-sm) var(--ai-spacing-md) !important;
    border-radius: var(--ai-radius-md) !important;
    border-bottom-left-radius: var(--ai-radius-sm) !important;
    box-shadow: var(--ai-shadow-message-assistant) !important;
    word-wrap: break-word !important;
    word-break: break-word !important;
}

.chatBubbleMe {
    max-width: 80% !important;
    background-color: var(--ai-bg-user-message) !important;
    color: var(--ai-text-user-message) !important;
    padding: var(--ai-spacing-sm) var(--ai-spacing-md) !important;
    border-radius: var(--ai-radius-md) !important;
    border-bottom-right-radius: var(--ai-radius-sm) !important;
    box-shadow: var(--ai-shadow-message-user) !important;
    word-wrap: break-word !important;
    word-break: break-word !important;
}

.chatBubbleSender {
    font-size: var(--ai-font-size-xs) !important;
    font-weight: 600 !important;
    color: var(--ai-primary-color) !important;
    margin-bottom: 2px !important;
}

.chatBubbleText {
    font-size: var(--ai-font-size-sm) !important;
    line-height: var(--ai-line-height) !important;
    word-break: break-word !important;
}

    .chatBubbleText a {
        color: inherit !important;
        text-decoration: underline !important;
    }

.chatBubbleMe .chatBubbleText a {
    color: rgba(255, 255, 255, 0.9) !important;
}

/* Botão de download de relatório (PDF gerado por create_pdf_file/create_chart_pdf) —
   segue os mesmos tokens de marca do resto do overlay da Nia (header, send button). */
.chatBubbleText a.chatDownloadBtn {
    display: inline-flex !important;
    align-items: center !important;
    gap: 6px !important;
    margin-top: 6px !important;
    padding: 8px 14px !important;
    border-radius: 8px !important;
    background-color: var(--ai-primary-color) !important;
    color: var(--ai-text-user-message) !important;
    font-weight: 600 !important;
    text-decoration: none !important;
    word-break: break-word !important;
}

    .chatBubbleText a.chatDownloadBtn:hover,
    .chatBubbleText a.chatDownloadBtn:focus {
        background-color: var(--ai-primary-hover) !important;
        color: var(--ai-text-user-message) !important;
        text-decoration: none !important;
    }

/* Registros referenciados: lista recolhida de atalhos abaixo da resposta da Nia
   (ver _buildChatEntitiesHtml em App.controller.js). */
.chatEntities {
    margin-top: var(--ai-spacing-sm) !important;
    border-top: 1px solid var(--ai-border-light) !important;
    padding-top: var(--ai-spacing-xs) !important;
}

.chatEntitiesToggle {
    display: inline-flex !important;
    align-items: center !important;
    gap: var(--ai-spacing-xs) !important;
    padding: 2px 0 !important;
    border: 0 !important;
    background: transparent !important;
    color: var(--ai-primary-color) !important;
    font-family: var(--ai-font-family) !important;
    font-size: var(--ai-font-size-xs) !important;
    font-weight: 600 !important;
    cursor: pointer !important;
}

    .chatEntitiesToggle:hover,
    .chatEntitiesToggle:focus-visible {
        color: var(--ai-primary-hover) !important;
        text-decoration: underline !important;
    }

.chatEntitiesArrow::before {
    content: "\25B8";
    display: inline-block;
    transition: transform var(--ai-transition-fast);
}

.chatEntitiesOpen .chatEntitiesArrow::before {
    transform: rotate(90deg);
}

.chatEntities:not(.chatEntitiesOpen) .chatEntitiesBody {
    display: none !important;
}

.chatEntitiesFilter {
    box-sizing: border-box !important;
    width: 100% !important;
    margin: var(--ai-spacing-xs) 0 !important;
    padding: 4px var(--ai-spacing-sm) !important;
    border: 1px solid var(--ai-border-medium) !important;
    border-radius: var(--ai-radius-sm) !important;
    background: var(--ai-bg-panel) !important;
    color: var(--ai-text-primary) !important;
    font-family: var(--ai-font-family) !important;
    font-size: var(--ai-font-size-xs) !important;
}

    .chatEntitiesFilter:focus {
        outline: none !important;
        border-color: var(--ai-border-focus) !important;
    }

.chatEntitiesList {
    max-height: 200px !important;
    margin: 0 !important;
    padding: 0 !important;
    list-style: none !important;
    overflow-y: auto !important;
}

.chatEntityLink {
    display: flex !important;
    flex-wrap: wrap !important;
    align-items: baseline !important;
    gap: var(--ai-spacing-sm) !important;
    padding: 4px var(--ai-spacing-sm) !important;
    border-radius: var(--ai-radius-sm) !important;
    color: var(--ai-text-primary) !important;
    font-size: var(--ai-font-size-xs) !important;
    text-decoration: none !important;
}

    .chatEntityLink:hover,
    .chatEntityLink:focus-visible {
        background-color: var(--ai-bg-chip-hover) !important;
    }

.chatEntityType {
    color: var(--ai-text-secondary) !important;
}

.chatEntityLabel {
    color: var(--ai-primary-color) !important;
    font-weight: 600 !important;
    word-break: break-word !important;
}

.chatEntityDraft {
    padding: 0 6px !important;
    border-radius: var(--ai-radius-sm) !important;
    background-color: var(--ai-bg-chip) !important;
    color: var(--ai-text-secondary) !important;
}

.chatBubbleFooter {
    display: flex !important;
    align-items: center !important;
    justify-content: flex-end !important;
    margin-top: 4px !important;
    gap: 4px !important;
}

.chatBubbleTime {
    font-size: var(--ai-font-size-xs) !important;
    color: var(--ai-text-tertiary) !important;
}

.chatBubbleMe .chatBubbleTime {
    color: rgba(255, 255, 255, 0.7) !important;
}

.chatBubbleStatus {
    font-size: var(--ai-font-size-xs) !important;
}

    .chatBubbleStatus.sent {
        color: var(--ai-status-sent) !important;
    }

    .chatBubbleStatus.delivered {
        color: var(--ai-status-delivered) !important;
    }

    .chatBubbleStatus.error {
        color: var(--ai-status-error) !important;
    }

.chatBubbleStreaming {
    display: inline-block !important;
    margin-left: 4px !important;
    animation: streamingPulse 1.5s infinite !important;
}

@keyframes streamingPulse {
    0%, 100% {
        opacity: 0.4;
    }

    50% {
        opacity: 1;
    }
}

.chatTypingElapsed {
    margin-left: var(--ai-spacing-sm) !important;
    font-variant-numeric: tabular-nums !important;
    opacity: 0.85;
    transition: opacity 0.2s ease-in-out !important;
}

.chatBubbleElapsedTime {
    font-size: var(--ai-font-size-xs) !important;
    color: var(--ai-text-tertiary) !important;
    font-variant-numeric: tabular-nums !important;
    opacity: 0.85;
    transition: opacity 0.3s ease-in-out !important;
}

.chatBubbleElapsedFrozen {
    opacity: 1;
}

/* ========================================
   Tabela markdown (.chatMarkdownTable)
   ========================================
   Emitida pelo renderer customizado em model/niaMarkdown.js.

   Estas regras vinham de css/style.css, que NAO e' copiado para o bundle do
   chat da Nia desktop — la' as tabelas apareciam sem borda, sem padding e sem
   cabecalho destacado. Moradia correta e' aqui, o arquivo compartilhado entre
   web e desktop (ver o cabecalho de chat-desktop.css). */

.chatMarkdownTable {
    /* display:block + width:max-content + overflow-x:auto da' a' tabela um
       scroll horizontal PROPRIO quando ela nao cabe, em vez de comprimir cada
       coluna. Sem isso, no painel de 380px uma tabela de 6 colunas virava
       colunas de ~40px com toda celula quebrada em 3-4 linhas — 10 linhas
       ocupavam 1004px de altura, ilegivel (medido ao vivo contra a Nia).
       Tabela que cabe nao ganha scroll: max-content < 100% resolve para a
       largura natural. */
    display: block !important;
    width: max-content !important;
    max-width: 100% !important;
    overflow-x: auto !important;
    border-collapse: collapse !important;
    margin: 6px 0 !important;
    table-layout: auto !important;
    font-size: 0.9em !important;
    /* Tokens --ai-*, nao --sap*: no desktop as variaveis do SAP nao existem e
       cairiam no literal (#1d1d1d), deixando texto quase preto sobre fundo
       escuro em skin dark. O C# do NiaClient sobrescreve --ai-text-primary e
       --ai-border-light com a paleta do skin (ver B1Theme.cs), entao esses
       valem nos dois lados. Regra do chat-desktop.css: cores SEMPRE via --ai-*. */
    color: var(--ai-text-primary) !important;
}

.chatMarkdownTable th,
.chatMarkdownTable td {
    border: 1px solid var(--ai-border-light) !important;
    padding: 4px 8px !important;
    text-align: left !important;
    /* nowrap: com scroll horizontal disponivel, quebrar a celula so' piora a
       legibilidade. word-break fica como rede para o caso patologico de um
       token unico maior que o painel inteiro. */
    white-space: nowrap !important;
    word-break: break-word !important;
    overflow-wrap: normal !important;
}

.chatMarkdownTable th {
    background-color: var(--ai-bg-chip) !important;
    font-weight: 600 !important;
}

/* Alinhamento da delimitadora GFM (":--:", "--:"), que o marked emite como align. */
.chatMarkdownTable [align="center"] {
    text-align: center !important;
}

.chatMarkdownTable [align="right"] {
    text-align: right !important;
}

/* Lista "loose" (itens separados por linha em branco, <li><p>): o <p> carrega
   margem e transforma uma lista compacta em blocos espacados. Num painel de 380px,
   10 itens ocupavam 406px de altura sem necessidade. Zera a margem apenas
   quando o <p> e' filho direto de <li> — paragrafo solto no corpo da mensagem
   continua com o espacamento normal. */
.chatMessageContent li > p {
    margin: 0 !important;
}

/* ========================================
   Scrollbar Styling
   ======================================== */

.chatOverlayMessages::-webkit-scrollbar {
    width: 6px !important;
}

.chatOverlayMessages::-webkit-scrollbar-track {
    background: transparent !important;
}

.chatOverlayMessages::-webkit-scrollbar-thumb {
    background-color: var(--ai-border-medium) !important;
    border-radius: 3px !important;
}

    .chatOverlayMessages::-webkit-scrollbar-thumb:hover {
        background-color: var(--ai-text-tertiary) !important;
    }

/* ========================================
   Mobile Responsive
   ======================================== */

@media (max-width: 640px) {
    .chatOverlayPanel,
    .chatOverlayPanel.expanded,
    .chatOverlayPanel.fullscreen {
        position: fixed !important;
        top: auto !important;
        bottom: 0 !important;
        right: 0 !important;
        left: 0 !important;
        width: 100% !important;
        max-width: 100% !important;
        height: 100% !important;
        max-height: 100% !important;
        border-radius: 0 !important;
        border-top-left-radius: var(--ai-radius-lg) !important;
        border-top-right-radius: var(--ai-radius-lg) !important;
    }

    .chatOverlayHeader {
        padding-top: calc(var(--ai-spacing-sm) + var(--ai-safe-area-top)) !important;
    }

    .chatOverlayFooter {
        padding-bottom: calc(var(--ai-spacing-sm) + var(--ai-safe-area-bottom)) !important;
    }

    .chatBubble,
    .chatBubbleMe {
        max-width: 85% !important;
    }

    /* Mobile: chat ja ocupa a tela toda — resize por drag e botao de
       expandir nao fazem sentido aqui. */
    .chatOverlayResizeHandle,
    .chatOverlayExpandBtn {
        display: none !important;
    }
}

/* ========================================
   Reduced Motion
   ======================================== */

@media (prefers-reduced-motion: reduce) {
    .chatBubbleRow,
    .chatBubbleRowMe,
    .chatOverlayPanel,
    .chatOverlayPanel.closing {
        animation: none !important;
    }

    /* Defesa em profundidade: _prefersReducedMotion() ja' impede a classe de
       ser aplicada, mas se ela escapar (timeout preso, por exemplo) o CSS
       ainda neutraliza o movimento. */
    .chatOverlayPanel.animating-state {
        transition: none !important;
    }

    /* O bounce vertical dos pontinhos usa transform — trocado por um pulso
     de opacidade só, mais amigável a quem pediu menos movimento. A bolha
     inteira (.chatBubbleTyping) já pulsa só em opacidade, então continua
     rodando sem entrar nesta lista — é o sinal de "ainda processando"
     que não pode sumir nem para quem reduziu animações. */
    .typingDot {
        animation: typingDotFadeReduced 1.2s infinite ease-in-out both !important;
    }

    .chatOverlayMessages {
        scroll-behavior: auto !important;
    }

    .chatOverlayScrollBtn {
        transition: opacity var(--ai-transition-fast) !important;
    }

        .chatOverlayScrollBtn.is-visible {
            transform: none !important;
        }
}

/* ========================================
   Focus Styles
   ======================================== */

.chatOverlayCloseBtn:focus-visible,
.chatOverlaySendBtn:focus-visible,
.chatOverlayRetryBtn:focus-visible {
    outline: 2px solid var(--ai-primary-color) !important;
    outline-offset: 2px !important;
}

/* ========================================
   High Contrast Mode
   ======================================== */

@media (prefers-contrast: high) {
    .chatBubble,
    .chatBubbleMe {
        border-width: 2px !important;
    }

    .chatOverlayInputWrapper:focus-within {
        box-shadow: 0 0 0 3px var(--ai-primary-color) !important;
    }

    /* Em alto contraste, link so com cor pode ser invisivel para daltonicos
       ou leitores de tela fracos — underline garante comunicacao semantica. */
    .chatBubbleText a:not(.chatDownloadBtn),
    .chatOverlayMessages a:not(.chatDownloadBtn) {
        text-decoration: underline !important;
    }

    /* Code inline/pre com borda mais grossa para destacar do texto comum. */
    .chatBubbleText code,
    .chatBubbleText pre,
    .chatOverlayMessages code,
    .chatOverlayMessages pre {
        border-width: 2px !important;
    }
}

/* ========================================
   Dark theme override for AI assistant tokens
   ========================================
   Ativa quando o tema UI5 ativo termina em _dark
   (sap_fiori_3_dark, sap_horizon_dark, sap_belize_hcb, etc.).
   UI5 1.136 aplica o tema como CLASSE em <html>, na forma
   `sapUiTheme-<theme>_<dark>` -- NUNCA `sapUiTheme-dark` puro e
   NUNCA como atributo `data-sap-ui-theme`. O seletor
   [class*="sapUiTheme-"][class*="_dark"] casa todos os temas
   _dark built-in (Belize dark, Quartz dark, Horizon dark)
   sem falso-positivo nos variantes light. Verificacao runtime:
   document.documentElement.className retorna algo como
   `sap-desktop sapUiMedia-... sapUiTheme-sap_horizon_dark`.

   Refs #938 + plano .hermes/plans/issue-939-iter3-overlay-theme.md.
*/
[class*="sapUiTheme-"][class*="_dark"] {
    /* Background Colors -- dark: panel um pouco mais claro que messages,
     como Quartz dark. Messages area mais escura para destacar bolhas. */
    --ai-bg-panel: #1d232a;
    --ai-bg-messages: #0f1419;
    --ai-bg-assistant-message: #2a313a;
    --ai-bg-user-message: #0a6ed1; /* brand: manter blue */
    --ai-bg-welcome: linear-gradient(180deg, #1d232a 0%, #0f1419 100%);
    --ai-bg-error: #3a1f1f;
    --ai-bg-chip: #2a313a;
    --ai-bg-chip-hover: #353c47;
    /* Text Colors -- textos claros para contraste contra fundo escuro */
    --ai-text-primary: #e8eaed;
    --ai-text-secondary: #b0b3b8;
    --ai-text-tertiary: #8a8d93;
    --ai-text-user-message: #ffffff; /* brand: manter branco */
    --ai-text-assistant-message: #e8eaed;
    --ai-text-placeholder: #6a6d73;
    --ai-text-error: #ff6b6b;
    /* Border Colors */
    --ai-border-light: #2a313a;
    --ai-border-medium: #353c47;
    --ai-border-focus: #4dabff; /* mais claro que light: dark bg absorve contraste */
    --ai-border-error: #5c2a2a;
    /* Status Colors */
    --ai-status-sent: #8a8d93;
    --ai-status-delivered: #51cf66;
    --ai-status-error: #ff6b6b;
}
