/* ============================================================ STYLES.CSS - Estilos combinados para MESA (Elaboração + Visualização) ============================================================ */ /* ============================================================ LAYOUT GERAL ============================================================ */ :root.dark, :root .dark { /* Force LIGHT backgrounds */ --neutral-950: #ffffff !important; --neutral-900: #ffffff !important; --neutral-800: #ffffff !important; --background-fill-primary: #ffffff !important; --background-fill-secondary: #ffffff !important; --block-background-fill: #ffffff !important; --panel-background-fill: #ffffff !important; --input-background-fill: #ffffff !important; --code-background-fill: #ffffff !important; --block-border-color: #ffffff !important; /* Force readable text */ --body-text-color: #000000 !important; --block-label-text-color: #000000 !important; --body-text-color-subdued: #444444 !important; --block-title-text-color: #000000 !important; --button-secondary-text-color: #000000 !important; } .gradio-container { max-width: 100% !important; padding: 15px !important; background: #f5f5f5 !important; } /* Logo MESA — 30% do tamanho original, sem fundo */ #logo-mesa { max-width: 30% !important; margin: 0 auto !important; background: transparent !important; } #logo-mesa, #logo-mesa * { cursor: default !important; } #logo-mesa img { background: transparent !important; } /* Textbox trigger hidden — acessível ao JS mas invisível */ .trigger-hidden { position: absolute !important; width: 1px !important; height: 1px !important; overflow: hidden !important; opacity: 0 !important; pointer-events: none !important; } .transf-card .form { background: rgb(228, 228, 231) !important } .gr-group, .wrap, .wrap label, .table-wrap *, input { border-color: rgb(228, 228, 231) !important } * {--border-color-primary: white !important;} /* ============================================================ TÍTULOS DE SEÇÃO ============================================================ */ .section-title-orange { font-weight: 600; color: #4a5568; margin: 16px 0 12px 0; padding: 8px 12px; border-left: 4px solid #FF8C00; background: linear-gradient(90deg, #fff8f0 0%, white 100%); font-size: 14px; text-transform: uppercase; letter-spacing: 0.3px; border-radius: 0 6px 6px 0; } /* ============================================================ HEADERS DE SEÇÃO PRINCIPAIS ============================================================ */ .section-header { display: flex; align-items: center; gap: 12px; margin: 36px 0 12px 0; padding: 0; } .section-header:first-of-type { margin-top: 70px; } .section-number { display: flex; align-items: center; justify-content: center; width: 32px; height: 32px; background: #FF8C00; color: white; font-weight: 700; font-size: 16px; border-radius: 50%; flex-shrink: 0; } .section-title { font-size: 16px; font-weight: 600; color: #333; text-transform: uppercase; letter-spacing: 0.5px; margin: 0; padding-bottom: 6px; border-bottom: 2px solid #FF8C00; flex-grow: 1; } /* Container de seção com borda mais definida */ .section-container { background: white !important; border: 2px solid #c0c0c0 !important; border-radius: 12px !important; padding: 16px !important; margin: 0 0 8px 0 !important; box-shadow: 0 2px 6px rgba(0, 0, 0, 0.06) !important; } .section-container:hover { border-color: #FF8C00 !important; transition: border-color 0.2s ease; } /* Timestamp inline após título de seção */ .section-timestamp { display: inline-block; margin-left: 8px; font-size: 12px; font-weight: 400; color: #dc3545; font-style: italic; } /* Área de adoção de sugestões */ .adotar-header { display: flex; align-items: center; justify-content: center; padding: 10px 16px; margin: 0 0 10px 0; background: var(--background-fill-secondary, #f8f9fa); border: 1px solid var(--border-color-primary, #e2e8f0); border-radius: 8px; } .adotar-titulo { font-size: 14px; font-weight: 800; color: black; } .adotar-row { background: var(--background-fill-secondary, #f8f9fa); border: 1px dashed var(--border-color-primary, #dee2e6); border-radius: 8px; padding: 16px !important; margin: 0 0 16px 0 !important; display: flex; justify-content: center; gap: 20px; flex-wrap: wrap; } .adotar-separator { display: flex; align-items: center; text-align: center; margin: 8px 0 16px 0; color: #9e9e9e; font-size: 13px; } .adotar-separator span{ color: black !important; font-weight: 800 !important; } .adotar-separator::before, .adotar-separator::after { content: ''; flex: 1; border-bottom: 1px solid #e0e0e0; } .adotar-separator span { padding: 0 16px; text-transform: uppercase; letter-spacing: 0.5px; font-weight: 500; } /* Botões de adotar transformação — herda estilo primary do Gradio, só ajusta tamanho */ .btn-adotar { min-width: 110px !important; } /* Checkbox para marcar/desmarcar todos */ .checkbox-selecionar-todos { /* margin-bottom: 6px; */ padding: 4px 12px; /* background: #f0f0f0; */ /* background: white; */ /* border-radius: 6px; border: 1px solid #d0d0d0; */ } .checkbox-selecionar-todos label { font-weight: 600 !important; color: #495057 !important; } /* ============================================================ CARDS E CONTAINERS ============================================================ */ .diagnosticos-container, .dai-card { font-family: 'Segoe UI', -apple-system, BlinkMacSystemFont, sans-serif; background: white; border-radius: 12px; padding: 20px; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1); line-height: 1.5; } /* ============================================================ STATS GRID (micronumerosidade) ============================================================ */ .stats-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 12px; padding: 12px 0; } .stat-item { display: flex; justify-content: space-between; padding: 8px 12px; background: #f8f9fa; border-radius: 6px; border: 1px solid #e9ecef; } .stat-label { font-weight: 500; color: #6c757d; } .stat-value { font-weight: 600; font-family: 'Consolas', monospace; color: #495057; } /* ============================================================ TESTES ESTATÍSTICOS (micronumerosidade) ============================================================ */ .teste-item { display: flex; flex-wrap: wrap; gap: 12px; padding: 10px 12px; margin: 4px 0; background: #fafafa; border-radius: 6px; align-items: center; } .teste-nome { font-weight: 600; color: #495057; min-width: 180px; } .teste-valor { font-family: 'Consolas', monospace; color: #6c757d; margin-right: 25px; } .teste-interp { font-style: italic; color: #6c757d; font-size: 13px; } /* ============================================================ FIELD ROWS (diagnósticos do modelo) ============================================================ */ .field-row { display: flex; justify-content: space-between; padding: 8px 12px; border-bottom: 1px solid #f0f0f0; background: #fafafa; } .field-row-label { font-weight: 500; color: #495057; } .field-row-value { font-weight: 600; font-family: 'Consolas', monospace; color: #495057; } /* ============================================================ INTERPRETAÇÃO COM BULLETS ============================================================ */ .interpretation-label { padding: 8px 12px 4px; font-weight: 500; color: #495057; background: #fafafa; } .interpretation-item { padding: 2px 12px 2px 24px; font-size: 13px; color: #6c757d; background: #fafafa; } .interpretation-item:last-child { padding-bottom: 8px; border-radius: 0 0 6px 6px; } /* ============================================================ EQUAÇÃO DO MODELO ============================================================ */ .equation-box { padding: 16px; margin: 8px 0; font-size: 13px; font-family: 'Consolas', monospace; word-break: break-word; background: #f8f9fa; border-radius: 8px; border-left: 4px solid #FF8C00; line-height: 1.6; } /* ============================================================ BUSCA AUTOMÁTICA ============================================================ */ .busca-container { display: flex; flex-wrap: wrap; gap: 16px; padding: 12px; } .modelo-card { flex: 1; min-width: 200px; max-width: 300px; padding: 16px; background: white; border-radius: 10px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); border: 1px solid #e0e0e0; } .modelo-rank { font-size: 24px; font-weight: 700; color: #FF8C00; margin-bottom: 8px; } .modelo-r2 { font-size: 18px; font-weight: 600; color: #28a745; margin-bottom: 12px; padding-bottom: 12px; border-bottom: 1px solid #e9ecef; } .modelo-transf { font-size: 13px; color: #6c757d; line-height: 1.6; } .modelo-transf b { color: #495057; } /* ============================================================ ACCORDIONS E GRUPOS ============================================================ */ .gradio-accordion { border: 2px solid #d0d0d0 !important; border-radius: 10px !important; margin: 8px 0 !important; background: white !important; } .gradio-accordion > .label-wrap { padding: 12px 16px !important; background: #fafafa !important; border-radius: 10px 10px 0 0 !important; } .gradio-group { background: white !important; border-radius: 12px !important; padding: 15px !important; margin-bottom: 15px !important; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08) !important; border: 2px solid #c0c0c0 !important; } /* ============================================================ BOTÕES ============================================================ */ button.primary { background: #FF8C00 !important; border-color: #FF8C00 !important; } button.primary:hover { background: #e67e00 !important; border-color: #e67e00 !important; } button.secondary { background: #efefef !important; border-color: black !important; font-weight: bold !important; } button.danger { background: #FF8B87 !important; border-color: black !important; font-weight: bold !important; color: white !important; } button[aria-label^="Solte arquivos"] { cursor: default !important; } button[aria-label^="Solte arquivos"]:focus { outline: none !important; } /* ============================================================ TABELAS ============================================================ */ .gradio-dataframe table { font-size: 13px !important; } .gradio-dataframe th { background: #f8f9fa !important; font-weight: 600 !important; color: #495057 !important; text-transform: uppercase !important; font-size: 12px !important; letter-spacing: 0.3px !important; } .gradio-dataframe td { padding: 8px 12px !important; } .gradio-dataframe tr:hover { background: #fff8f0 !important; cursor: pointer; } /* ============================================================ MAPA ============================================================ */ .map-container iframe { border-radius: 10px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); } #map-frame { border-radius: 10px; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.15); } /* ============================================================ INPUTS ============================================================ */ .gradio-dropdown, .gradio-textbox input, .gradio-checkbox-group { border-radius: 6px !important; } .gradio-checkbox-group label { padding: 6px 12px !important; margin: 4px !important; border-radius: 20px !important; background: #f8f9fa !important; border: 1px solid #e0e0e0 !important; transition: all 0.2s !important; } .gradio-checkbox-group label:hover { background: #fff8f0 !important; border-color: #FF8C00 !important; } .gradio-checkbox-group input:checked + label { background: #FF8C00 !important; color: white !important; border-color: #FF8C00 !important; } /* ============================================================ GRÁFICOS PLOTLY ============================================================ */ .gradio-plot { background: white !important; border-radius: 8px !important; padding: 10px !important; border: 1px solid #e0e0e0 !important; } /* ============================================================ SCROLLBARS ============================================================ */ ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-track { background: #f1f1f1; border-radius: 4px; } ::-webkit-scrollbar-thumb { background: #c1c1c1; border-radius: 4px; } ::-webkit-scrollbar-thumb:hover { background: #a1a1a1; } /* ============================================================ RESPONSIVIDADE ============================================================ */ @media (max-width: 768px) { .stats-grid { grid-template-columns: 1fr; } .busca-container { flex-direction: column; } .modelo-card { max-width: 100%; } } /* ============================================================ CARDS DE TRANSFORMAÇÃO ============================================================ */ .transf-card { background: white !important; border: 2px solid #e0e0e0 !important; border-radius: 8px !important; padding: 12px !important; margin: 4px !important; } .transf-card:hover { border-color: #FF8C00 !important; } /* ============================================================ ACCORDIONS DE SEÇÃO (COLAPSÁVEIS) ============================================================ */ /* Accordion de seção - estilo minimalista, label como toggle */ .section-accordion { margin: 0 !important; border: none !important; border-radius: 12px !important; background: transparent !important; box-shadow: none !important; } /* Label do accordion - pequeno toggle */ .section-accordion > .label-wrap { padding: 8px 16px !important; background: #f8f9fa !important; border: 2px solid #c0c0c0 !important; border-radius: 0 0 12px 12px !important; cursor: pointer !important; font-size: 12px !important; color: #6c757d !important; } .section-accordion > .label-wrap:hover { background: #fff8f0 !important; border-color: #FF8C00 !important; } .section-accordion[open] > .label-wrap { border-radius: 0 !important; border-top: none !important; } .section-accordion:not([open]) > .label-wrap { margin-top: -2px !important; } /* Conteúdo da seção */ .section-content { background: white !important; border: 2px solid #c0c0c0 !important; border-bottom: none !important; border-radius: 12px 12px 0 0 !important; padding: 16px !important; box-shadow: 0 2px 6px rgba(0, 0, 0, 0.06) !important; } .section-content:hover { border-color: #FF8C00 !important; transition: border-color 0.2s ease; } /* Container wrapper para header + accordion */ .section-wrapper { margin: 24px 0 8px 0 !important; } /* Animação de abertura */ .section-content:not([style*="display: none"]) { animation: sectionFadeIn 0.3s ease-in-out; } @keyframes sectionFadeIn { from { opacity: 0; transform: translateY(-10px); } to { opacity: 1; transform: translateY(0); } } /* ============================================================ BOTÕES DE FILTRO DE OUTLIERS ============================================================ */ /* Base para os 3 botões circulares de controle de filtros (+, −, ↺) */ .btn-filtro-acao { font-size: 22px !important; font-weight: 900 !important; width: 42px !important; height: 42px !important; min-width: 42px !important; max-width: 42px !important; max-height: 42px !important; aspect-ratio: 1 / 1 !important; border-radius: 50% !important; padding: 0 !important; display: flex !important; align-items: center !important; justify-content: center !important; line-height: 1 !important; transition: all 0.2s ease !important; box-sizing: border-box !important; margin: 0 6px !important; position: relative !important; overflow: visible !important; } /* Tooltip base (aparece abaixo do botão no hover) */ .btn-filtro-acao::after { position: absolute; top: calc(100% + 6px); left: 50%; transform: translateX(-50%); padding: 4px 10px; border-radius: 6px; background: #333; color: white; font-size: 11px; font-weight: 500; white-space: nowrap; opacity: 0; pointer-events: none; transition: opacity 0.2s ease; z-index: 10; } .btn-filtro-acao:hover::after { opacity: 1; } /* Tooltip de cada botão */ button.btn-adicionar-filtro::after { content: "Adicionar filtro"; } button.btn-remover-filtro::after { content: "Remover último filtro"; } button.btn-voltar-padrao::after { content: "Restaurar padrão"; } /* Row dos botões de controle — centralizada com margem inferior */ .btn-filtro-acao-row { justify-content: center !important; margin-bottom: 12px !important; } /* Botão + (adicionar filtro) — verde */ button.btn-adicionar-filtro, button.btn-adicionar-filtro.secondary { background: white !important; border: 2px solid #28a745 !important; color: #28a745 !important; } button.btn-adicionar-filtro:hover { background: #28a745 !important; color: white !important; } /* Botão − (remover último filtro) — vermelho */ button.btn-remover-filtro, button.btn-remover-filtro.secondary { background: white !important; border: 2px solid #dc3545 !important; color: #dc3545 !important; } button.btn-remover-filtro:hover { background: #dc3545 !important; color: white !important; } /* Botão ↺ (restaurar padrão) — cinza */ button.btn-voltar-padrao, button.btn-voltar-padrao.secondary { background: white !important; border: 2px solid #6c757d !important; color: #6c757d !important; } button.btn-voltar-padrao:hover { background: #6c757d !important; color: white !important; } /* ============================================================ OUTLIER SECTIONS — LAYOUT REFINEMENTS ============================================================ */ /* Linha de filtro — card com borda sutil */ .filtro-row { background: #fafbfc !important; border: 1px solid #e9ecef !important; border-radius: 8px !important; padding: 8px 12px !important; margin: 4px 0 !important; transition: border-color 0.2s ease; } .filtro-row:hover { border-color: #FF8C00 !important; } /* Botão principal de ação — destaque forte */ .btn-reiniciar-iteracao { background: linear-gradient(180deg, #FF8C00 0%, #e67e00 100%) !important; border: 2px solid #cc7000 !important; color: white !important; font-weight: 700 !important; font-size: 14px !important; padding: 12px 24px !important; border-radius: 8px !important; box-shadow: 0 3px 8px rgba(255, 140, 0, 0.3) !important; transition: all 0.2s ease !important; } .btn-reiniciar-iteracao:hover { background: linear-gradient(180deg, #e67e00 0%, #cc7000 100%) !important; transform: translateY(-1px) !important; box-shadow: 0 5px 15px rgba(255, 140, 0, 0.4) !important; } /* Resumo de outliers — textbox estilizado e responsivo */ .resumo-outliers textarea { font-family: 'Consolas', 'Courier New', monospace !important; font-size: 14px !important; font-weight: 600 !important; background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%) !important; border: 2px solid #dee2e6 !important; border-radius: 10px !important; text-align: center !important; letter-spacing: 0.3px !important; color: #495057 !important; white-space: normal !important; word-break: break-word !important; height: auto !important; min-height: 42px !important; overflow: visible !important; } @media (max-width: 768px) { .resumo-outliers textarea { font-size: 12px !important; letter-spacing: 0 !important; } } /* Subtítulo dentro de seção (separador visual) */ .outlier-subheader { display: flex; align-items: center; gap: 8px; font-weight: 600; font-size: 13px; color: #4a5568; text-transform: uppercase; letter-spacing: 0.4px; padding: 0 0 8px 0; margin: 16px 0 12px 0; border-bottom: 2px solid #FF8C00; } .outlier-subheader:first-child { margin-top: 0; } /* Texto explicativo sutil */ .outlier-dica { font-size: 13px; color: #6c757d; font-style: italic; margin: -4px 0 12px 0; line-height: 1.5; } /* Divisor visual entre blocos */ .outlier-divider { display: flex; align-items: center; gap: 8px; margin: 12px 0; color: #adb5bd; font-size: 12px; } .outlier-divider::before, .outlier-divider::after { content: ''; flex: 1; border-bottom: 1px dashed #dee2e6; } .outlier-divider .arrow { font-size: 16px; color: #FF8C00; } /* ============================================================ VISUALIZAÇÃO - CLASSES REUTILIZÁVEIS (HTML gerado pelo Python) ============================================================ */ /* ----- Título de Seção Sólido (Resumo do modelo) ----- */ .section-title-orange-solid { font-weight: 600; color: #4a5568; margin: 16px 0 8px 0; padding: 8px 12px; border-left: 4px solid #FF8C00; background: #fff8f0; font-size: 14px; text-transform: uppercase; letter-spacing: 0.3px; } /* ----- Card Light (transformações) ----- */ .dai-card-light { display: inline-flex; align-items: center; padding: 10px 14px; background: linear-gradient(135deg, white 0%, #f8f9fa 100%); border-radius: 8px; border: 1px solid #e9ecef; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.04); white-space: nowrap; box-sizing: border-box; } /* ----- Grid de Cards (transformações) ----- */ .dai-cards-grid { display: grid; gap: 8px; padding: 16px; background: linear-gradient(180deg, #fafbfc 0%, #f5f6f7 100%); border-radius: 10px; max-height: 360px; overflow-y: auto; } /* ----- Container com Scroll ----- */ .scrollable-container { max-height: 700px; overflow-y: auto; } /* ----- Placeholder / Em Desenvolvimento ----- */ .placeholder-alert { padding: 20px; background: linear-gradient(135deg, #f8f9fa 0%, white 100%); border-radius: 10px; border: 1px dashed #dee2e6; text-align: center; color: #6c757d; } .placeholder-alert-title { font-weight: 600; margin-bottom: 8px; } .placeholder-alert-text { font-size: 13px; margin: 0; } /* ============================================================ VISUALIZAÇÃO - LAYOUT ============================================================ */ /* ===== ÁREA DE UPLOAD ===== */ .upload-area { background: white !important; border-radius: 12px !important; padding: 20px !important; margin-bottom: 15px !important; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08) !important; border: 1px solid #e0e0e0 !important; } .upload-area .row { margin-top: 15px !important; padding: 15px !important; background: #fafafa !important; border-radius: 8px !important; } /* ===== PAINEL DE CONTEÚDO (LARGURA TOTAL) ===== */ .content-panel { background: white !important; border-radius: 12px !important; padding: 15px !important; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08) !important; border: 1px solid #e0e0e0 !important; } .tabs-container .tab-nav { font-size: 13px !important; } /* ===== ACCORDION DO MAPA ===== */ .map-accordion { background: white !important; border-radius: 12px !important; margin-bottom: 15px !important; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08) !important; border: 1px solid #e0e0e0 !important; } .map-accordion iframe { border-radius: 8px !important; } #map-frame { border-radius: 8px; } /* ===== LABELS DOS COMPONENTES COM ESTILO LARANJA ===== */ .content-panel .label-wrap span, .content-panel label > span:first-child, .content-panel .wrap > label > span { font-weight: 600 !important; color: #4a5568 !important; font-size: 13px !important; letter-spacing: 0.3px !important; text-transform: uppercase !important; padding: 6px 10px !important; border-left: 3px solid #FF8C00 !important; background: linear-gradient(90deg, #fff8f0 0%, transparent 100%) !important; border-radius: 0 4px 4px 0 !important; display: inline-block !important; margin-bottom: 8px !important; }