/* ========================================
   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;
    transform-origin: bottom right !important;
    transition: width var(--ai-transition-normal), height var(--ai-transition-normal) !important;
}

    .chatOverlayPanel.closing {
        animation: chatOverlaySlideOut var(--ai-transition-normal) ease-in forwards !important;
        pointer-events: none !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;
    }

@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;
}

.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;
}

/* Painel expandido tem tamanho fixo — handles nao se aplicam nesse modo. */
.chatOverlayPanel.expanded .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;
}

    .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;
}

/* ========================================
   Quick Actions
   ======================================== */

.chatOverlayQuickActions {
    padding: var(--ai-spacing-xs) var(--ai-spacing-sm) !important;
    background-color: var(--ai-bg-messages) !important;
    gap: var(--ai-spacing-xs) !important;
    flex-shrink: 0 !important;
    border-top: 1px solid var(--ai-border-light) !important;
}

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

/* A cell da VerticalLayout que envolve o botao vira containing block por
   default, quebrando o position:absolute abaixo. Zera a cell para o botao
   ancorar sempre no chatOverlayPanel. */
.chatOverlayPanel > .sapUiVltCell:has(> .chatOverlayScrollBtn) {
    position: static !important;
    height: 0 !important;
    min-height: 0 !important;
    max-height: 0 !important;
    overflow: visible !important;
    flex: 0 0 0 !important;
}

.chatOverlayScrollBtn {
    position: absolute !important;
    /* Poucos pixels acima do botao de envio (chatOverlaySendBtn): footer
     padding-bottom (8px) + borda do wrapper (1px) + padding do wrapper (4px)
     + margin-bottom do send button (6px) + altura do send button (36px)
     + folga de 9px = 64px. Soma o safe-area-bottom para acompanhar o
     padding dinamico do footer em dispositivos com notch. */
    bottom: calc(64px + var(--ai-safe-area-bottom)) !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;
    pointer-events: none !important;
    transition: opacity var(--ai-transition-fast), transform var(--ai-transition-fast) !important;
}

    .chatOverlayScrollBtn.is-visible {
        opacity: 1 !important;
        transform: scale(1) translateY(0) !important;
        pointer-events: auto !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 {
    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;
}

/* 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;
    }

.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;
}

/* ========================================
   Suggestion Chips
   ======================================== */

.chatSuggestionChip {
    display: inline-flex !important;
    align-items: center !important;
    padding: var(--ai-spacing-xs) var(--ai-spacing-sm) !important;
    background-color: var(--ai-bg-chip) !important;
    border: 1px solid var(--ai-border-light) !important;
    border-radius: var(--ai-radius-xl) !important;
    font-size: var(--ai-font-size-sm) !important;
    color: var(--ai-text-primary) !important;
    cursor: pointer !important;
    transition: all var(--ai-transition-fast) !important;
    white-space: nowrap !important;
    margin: 2px !important;
}

    .chatSuggestionChip:hover {
        background-color: var(--ai-bg-chip-hover) !important;
        border-color: var(--ai-border-medium) !important;
    }

    .chatSuggestionChip:active {
        transform: scale(0.95) !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 {
        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;
    }

    /* 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;
        }

    .chatSuggestionChip:active {
        transform: none !important;
    }
}

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

.chatOverlayCloseBtn:focus-visible,
.chatOverlaySendBtn:focus-visible,
.chatSuggestionChip: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;
}
