Files
SteelBase/index.html
admtracksteel 6af3492815 fix: corrige erros de sintaxe ES6 - tudo para IIFE
- Converte logger.js para IIFE (remove export)
- Converte state.js para IIFE (remove export)
- Remove imports de app.js
- Corrige referências aos scripts de teste removidos
- Adiciona scripts de teste corretos
2026-04-03 21:42:51 +00:00

623 lines
36 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<!-- Viewport otimizado para mobile -->
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5.0, user-scalable=yes">
<!-- Meta tags para SEO e PWA -->
<meta name="description" content="SteelBase - Plataforma profissional de cálculos de engenharia estrutural com base de dados de materiais brasileiros. CEV, soldagem, parafusos, ensaios e orçamentos.">
<meta name="keywords" content="aço, cálculo estrutural, CEV, soldagem, parafusos, engenharia, NBR 8800, AWS D1.1">
<meta name="author" content="SteelBase">
<meta name="theme-color" content="#21808d">
<!-- Open Graph para compartilhamento -->
<meta property="og:title" content="SteelBase - Plataforma Técnica de Engenharia">
<meta property="og:description" content="Cálculos profissionais de engenharia estrutural">
<meta property="og:type" content="website">
<title>🏗️ SteelBase v7.5 - Plataforma Técnica de Engenharia Estrutural</title>
<!-- Preload critical resources -->
<link rel="preload" href="/style.css" as="style">
<link rel="preload" href="/app.js" as="script">
<!-- Stylesheets -->
<link rel="stylesheet" href="/style.css">
<link rel="stylesheet" href="/css/mobile.css">
<!-- PWA Manifest -->
<link rel="manifest" href="/manifest.json">
<!-- Favicon (inline SVG para evitar 404) -->
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><rect width='100' height='100' fill='%230a0a0f'/><text y='75' font-size='80' fill='white'>🏗️</text></svg>">
<!-- Chart.js - defer para não bloquear -->
<script src="https://cdn.jsdelivr.net/npm/chart.js" defer></script>
<!-- Testes de Backup e Log (carrega após managers) -->
<script src="/js/tests/test-backup-log.js" defer></script>
</head>
<body>
<!-- Loading Screen -->
<div id="app-loading" style="position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: #0a0a0f; display: flex; align-items: center; justify-content: center; z-index: 9999;">
<div style="text-align: center;">
<div style="font-size: 48px; margin-bottom: 16px;">🏗️</div>
<div style="font-size: 20px; font-weight: 600; color: #21808d; margin-bottom: 8px;">SteelBase</div>
<div style="font-size: 14px; color: #626c71;">Carregando plataforma...</div>
<div style="margin-top: 20px; width: 200px; height: 4px; background: #e5e5e5; border-radius: 2px; overflow: hidden;">
<div style="width: 100%; height: 100%; background: linear-gradient(90deg, #21808d 0%, #2da6b2 100%); animation: loading 1.5s ease-in-out infinite;"></div>
</div>
</div>
</div>
<style>
@keyframes loading {
0% { transform: translateX(-100%); }
100% { transform: translateX(100%); }
}
</style>
<div class="header">
<div class="header-content">
<div class="logo-section">
<div class="logo" id="appLogo">🏗️ SteelBase</div>
<div class="subtitle" id="appSubtitle">Plataforma Técnica de Engenharia Estrutural v6.5 - Base de Materiais Integrada</div>
<span class="badge">PROFESSIONAL EDITION</span>
</div>
<div class="header-actions">
<button class="btn-icon" onclick="openGlobalSearchModal()" title="Buscar Ferramentas">🔍 Buscar</button>
<button class="btn-icon" onclick="openManualUsuario()" title="Manual do Usuário">📖 Manual</button>
<button class="btn-icon" onclick="abrirPainelDados()" title="Administração de Dados" id="data-admin-toggle" style="background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white;">🗄️ Admin</button>
<div class="cache-status-badge" onclick="abrirPainelDados()" title="Status do Cache - Clique para administrar" id="cache-status-badge">
<span id="cache-icon"></span>
<span id="cache-text">Carregando...</span>
</div>
<button class="btn-icon" onclick="toggleTheme()" title="Alternar Tema" id="theme-toggle">🌙 Escuro</button>
</div>
</div>
</div>
<div class="container">
<aside class="sidebar">
<div class="sidebar-tabs">
<button class="sidebar-tab active" onclick="switchSidebarTab(0)">📦 MATERIAIS</button>
<button class="sidebar-tab" onclick="switchSidebarTab(1)">🔗 CONEXÕES</button>
<button class="sidebar-tab" onclick="switchSidebarTab(2)">🔥 SOLDAGEM</button>
<button class="sidebar-tab" onclick="switchSidebarTab(3)">✅ ENSAIOS</button>
<button class="sidebar-tab" onclick="switchSidebarTab(4)">🎨 PINTURA</button>
<button class="sidebar-tab" onclick="switchSidebarTab(5)">💰 ORÇAMENTO</button>
</div>
<!-- TAB 0: MATERIAIS -->
<div class="sidebar-content active" id="sidebar-0">
<div class="sidebar-section">
<!-- SUBCATEGORIA: AÇOS ESTRUTURAIS -->
<div class="sidebar-category">
<div class="sidebar-category-header" onclick="toggleCategory(this, event)">
<span class="category-icon"></span>
<span class="category-title">🏗️ AÇOS ESTRUTURAIS</span>
</div>
<div class="sidebar-category-content">
<!-- SUB-SUBCATEGORIA: Assistente Inteligente -->
<div class="sidebar-subcategory">
<div class="sidebar-subcategory-header" onclick="toggleCategory(this, event)">
<span class="category-icon"></span>
<span class="subcategory-title">🤖 Assistente Inteligente</span>
</div>
<div class="sidebar-subcategory-content">
<div class="sidebar-item" onclick="showSection('assistente-inteligente')" data-section="assistente-inteligente">
🤖 Recomendação Integrada
<button class="star-btn" onclick="toggleFavorite(event, 'assistente-inteligente')"></button>
</div>
<div class="sidebar-item" onclick="showSection('cev')" data-section="cev">
🔬 CEV Avançado (IIW + Pcm)
<button class="star-btn" onclick="toggleFavorite(event, 'cev')"></button>
</div>
<div class="sidebar-item" onclick="showSection('seletor')" data-section="seletor">
🎯 Seletor de Aço Inteligente
<button class="star-btn" onclick="toggleFavorite(event, 'seletor')"></button>
</div>
<div class="sidebar-item" onclick="showSection('equivalencias')" data-section="equivalencias">
📊 Equivalências Internacionais
<button class="star-btn" onclick="toggleFavorite(event, 'equivalencias')"></button>
</div>
<div class="sidebar-item" onclick="showSection('comparativo')" data-section="comparativo">
📈 Comparativo de Aços
<button class="star-btn" onclick="toggleFavorite(event, 'comparativo')"></button>
</div>
</div>
</div>
<!-- SUB-SUBCATEGORIA: Catálogo de Perfis -->
<div class="sidebar-subcategory">
<div class="sidebar-subcategory-header" onclick="toggleCategory(this, event)">
<span class="category-icon"></span>
<span class="subcategory-title">📐 Catálogo de Perfis</span>
</div>
<div class="sidebar-subcategory-content">
<div class="sidebar-item" onclick="showSection('cantoneiras')" data-section="cantoneiras">
📐 Cantoneiras
<button class="star-btn" onclick="toggleFavorite(event, 'cantoneiras')"></button>
</div>
<div class="sidebar-item" onclick="showSection('barras-redondas')" data-section="barras-redondas">
⭕ Barras Redondas
<button class="star-btn" onclick="toggleFavorite(event, 'barras-redondas')"></button>
</div>
<div class="sidebar-item" onclick="showSection('tubos-circulares')" data-section="tubos-circulares">
🔘 Tubos Circulares
<button class="star-btn" onclick="toggleFavorite(event, 'tubos-circulares')"></button>
</div>
<div class="sidebar-item" onclick="showSection('perfis-i')" data-section="perfis-i">
🏛️ Perfis I (IPE)
<button class="star-btn" onclick="toggleFavorite(event, 'perfis-i')"></button>
</div>
<div class="sidebar-item" onclick="showSection('perfis-w')" data-section="perfis-w">
🏗️ Perfis W
<button class="star-btn" onclick="toggleFavorite(event, 'perfis-w')"></button>
</div>
<div class="sidebar-item" onclick="showSection('tubos-rhs')" data-section="tubos-rhs">
▭ Tubos RHS
<button class="star-btn" onclick="toggleFavorite(event, 'tubos-rhs')"></button>
</div>
<div class="sidebar-item" onclick="showSection('chapas')" data-section="chapas">
📄 Chapas
<button class="star-btn" onclick="toggleFavorite(event, 'chapas')"></button>
</div>
<div class="sidebar-item" onclick="showSection('perfis-hp')" data-section="perfis-hp">
🏛️ Perfis HP
<button class="star-btn" onclick="toggleFavorite(event, 'perfis-hp')"></button>
</div>
<div class="sidebar-item" onclick="showSection('barras-roscadas')" data-section="barras-roscadas">
🔩 Barras Roscadas
<button class="star-btn" onclick="toggleFavorite(event, 'barras-roscadas')"></button>
</div>
<div class="sidebar-item" onclick="showSection('barras-chatas')" data-section="barras-chatas">
▬ Barras Chatas
<button class="star-btn" onclick="toggleFavorite(event, 'barras-chatas')"></button>
</div>
</div>
</div>
</div>
</div>
<!-- SUBCATEGORIA: CONSUMÍVEIS DE SOLDAGEM -->
<div class="sidebar-category">
<div class="sidebar-category-header" onclick="toggleCategory(this, event)">
<span class="category-icon"></span>
<span class="category-title">🔥 CONSUMÍVEIS DE SOLDAGEM</span>
</div>
<div class="sidebar-category-content">
<div class="sidebar-item" onclick="showSection('eletrodos')" data-section="eletrodos">
⚡ Eletrodos Revestidos
<button class="star-btn" onclick="toggleFavorite(event, 'eletrodos')"></button>
</div>
<div class="sidebar-item" onclick="showSection('arames')" data-section="arames">
🌀 Arames Sólidos/Tubulares
<button class="star-btn" onclick="toggleFavorite(event, 'arames')"></button>
</div>
<div class="sidebar-item" onclick="showSection('fluxos')" data-section="fluxos">
💨 Fluxos para SAW
<button class="star-btn" onclick="toggleFavorite(event, 'fluxos')"></button>
</div>
<div class="sidebar-item" onclick="showSection('gases')" data-section="gases">
🌫️ Gases de Proteção
<button class="star-btn" onclick="toggleFavorite(event, 'gases')"></button>
</div>
</div>
</div>
<!-- SUBCATEGORIA: FIXADORES -->
<div class="sidebar-category">
<div class="sidebar-category-header" onclick="toggleCategory(this, event)">
<span class="category-icon"></span>
<span class="category-title">🔩 FIXADORES</span>
</div>
<div class="sidebar-category-content">
<div class="sidebar-item" onclick="showSection('parafusos-catalogo')" data-section="parafusos-catalogo">
🔩 Catálogo de Parafusos
<button class="star-btn" onclick="toggleFavorite(event, 'parafusos-catalogo')"></button>
</div>
<div class="sidebar-item" onclick="showSection('porcas')" data-section="porcas">
🔸 Porcas
<button class="star-btn" onclick="toggleFavorite(event, 'porcas')"></button>
</div>
<div class="sidebar-item" onclick="showSection('arruelas')" data-section="arruelas">
⭕ Arruelas
<button class="star-btn" onclick="toggleFavorite(event, 'arruelas')"></button>
</div>
<div class="sidebar-item" onclick="showSection('chumbadores')" data-section="chumbadores">
🔗 Chumbadores/Ancoragens
<button class="star-btn" onclick="toggleFavorite(event, 'chumbadores')"></button>
</div>
</div>
</div>
<!-- SUBCATEGORIA: TINTAS E REVESTIMENTOS -->
<div class="sidebar-category">
<div class="sidebar-category-header" onclick="toggleCategory(this, event)">
<span class="category-icon"></span>
<span class="category-title">🎨 TINTAS E REVESTIMENTOS</span>
</div>
<div class="sidebar-category-content">
<div class="sidebar-item" onclick="showSection('tintas-catalogo')" data-section="tintas-catalogo">
🎨 Catálogo de Tintas
<button class="star-btn" onclick="toggleFavorite(event, 'tintas-catalogo')"></button>
</div>
<div class="sidebar-item" onclick="showSection('sistemas-pintura')" data-section="sistemas-pintura">
🖌️ Sistemas de Pintura
<button class="star-btn" onclick="toggleFavorite(event, 'sistemas-pintura')"></button>
</div>
<div class="sidebar-item" onclick="showSection('abrasivos')" data-section="abrasivos">
💎 Abrasivos para Jateamento
<button class="star-btn" onclick="toggleFavorite(event, 'abrasivos')"></button>
</div>
<div class="sidebar-item" onclick="showSection('granalha')" data-section="granalha">
🔘 Granalha Metálica
<button class="star-btn" onclick="toggleFavorite(event, 'granalha')"></button>
</div>
</div>
</div>
<!-- SUBCATEGORIA: ELEMENTOS COMPLEMENTARES -->
<div class="sidebar-category">
<div class="sidebar-category-header" onclick="toggleCategory(this, event)">
<span class="category-icon"></span>
<span class="category-title">📦 ELEMENTOS COMPLEMENTARES</span>
</div>
<div class="sidebar-category-content">
<div class="sidebar-item" onclick="showSection('telhas')" data-section="telhas">
🏠 Telhas Metálicas
<button class="star-btn" onclick="toggleFavorite(event, 'telhas')"></button>
</div>
<div class="sidebar-item" onclick="showSection('paineis')" data-section="paineis">
🧱 Painéis Sanduíche
<button class="star-btn" onclick="toggleFavorite(event, 'paineis')"></button>
</div>
<div class="sidebar-item" onclick="showSection('steel-deck')" data-section="steel-deck">
📐 Steel Deck
<button class="star-btn" onclick="toggleFavorite(event, 'steel-deck')"></button>
</div>
<div class="sidebar-item" onclick="showSection('perfis-formados')" data-section="perfis-formados">
🔲 Perfis Formados a Frio
<button class="star-btn" onclick="toggleFavorite(event, 'perfis-formados')"></button>
</div>
</div>
</div>
</div>
</div>
<!-- TAB 1: CONEXÕES -->
<div class="sidebar-content" id="sidebar-1">
<div class="sidebar-section">
<div class="sidebar-item" onclick="showSection('parafusos')" data-section="parafusos">
🔩 Ligações Parafusadas
<button class="star-btn" onclick="toggleFavorite(event, 'parafusos')"></button>
</div>
<div class="sidebar-item" onclick="showSection('layout')" data-section="layout">
🎯 Layout de Furação
<button class="star-btn" onclick="toggleFavorite(event, 'layout')"></button>
</div>
<div class="sidebar-item" onclick="showSection('parafuso-vs-solda')" data-section="parafuso-vs-solda">
⚙️ Parafuso vs Solda
<button class="star-btn" onclick="toggleFavorite(event, 'parafuso-vs-solda')"></button>
</div>
</div>
</div>
<!-- TAB 2: SOLDAGEM -->
<div class="sidebar-content" id="sidebar-2">
<div class="sidebar-section">
<div class="sidebar-item" onclick="showSection('preaquecimento')" data-section="preaquecimento">
📋 Informações Gerais
<button class="star-btn" onclick="toggleFavorite(event, 'preaquecimento')"></button>
</div>
<div class="sidebar-item" onclick="showSection('solda-filete')" data-section="solda-filete">
📐 Dimensionamento de Filete
<button class="star-btn" onclick="toggleFavorite(event, 'solda-filete')"></button>
</div>
<div class="sidebar-item" onclick="showSection('energia-soldagem')" data-section="energia-soldagem">
⚡ Energia de Soldagem
<button class="star-btn" onclick="toggleFavorite(event, 'energia-soldagem')"></button>
</div>
<div class="sidebar-item" onclick="showSection('consumo-eletrodos')" data-section="consumo-eletrodos">
📊 Consumo de Eletrodos
<button class="star-btn" onclick="toggleFavorite(event, 'consumo-eletrodos')"></button>
</div>
</div>
</div>
<!-- TAB 3: ENSAIOS -->
<div class="sidebar-content" id="sidebar-3">
<div class="sidebar-section">
<div class="sidebar-item" onclick="showSection('dureza')" data-section="dureza">
🔨 Conversor de Dureza
<button class="star-btn" onclick="toggleFavorite(event, 'dureza')"></button>
</div>
<div class="sidebar-item" onclick="showSection('charpy')" data-section="charpy">
📉 Análise de Charpy
<button class="star-btn" onclick="toggleFavorite(event, 'charpy')"></button>
</div>
<div class="sidebar-item" onclick="showSection('certificado')" data-section="certificado">
📋 Checklist Certificado
<button class="star-btn" onclick="toggleFavorite(event, 'certificado')"></button>
</div>
<div class="sidebar-item" onclick="showSection('ultrassom')" data-section="ultrassom">
🏥 Interpretação Ultrassom
<button class="star-btn" onclick="toggleFavorite(event, 'ultrassom')"></button>
</div>
</div>
</div>
<!-- TAB 4: PINTURA -->
<div class="sidebar-content" id="sidebar-4">
<div class="sidebar-section">
<div class="sidebar-item" onclick="showSection('area-pintura')" data-section="area-pintura">
📐 Cálculo de Área
<button class="star-btn" onclick="toggleFavorite(event, 'area-pintura')"></button>
</div>
<div class="sidebar-item" onclick="showSection('consumo-tinta')" data-section="consumo-tinta">
🎯 Consumo de Tinta
<button class="star-btn" onclick="toggleFavorite(event, 'consumo-tinta')"></button>
</div>
<div class="sidebar-item" onclick="showSection('galvanizacao')" data-section="galvanizacao">
🛡️ Galvanização
<button class="star-btn" onclick="toggleFavorite(event, 'galvanizacao')"></button>
</div>
<div class="sidebar-item" onclick="showSection('custo-pintura')" data-section="custo-pintura">
💰 Custo Total
<button class="star-btn" onclick="toggleFavorite(event, 'custo-pintura')"></button>
</div>
<div class="sidebar-item" onclick="showSection('secagem')" data-section="secagem">
⏱️ Tempo de Secagem
<button class="star-btn" onclick="toggleFavorite(event, 'secagem')"></button>
</div>
<div class="sidebar-item" onclick="showSection('inspecao-pintura')" data-section="inspecao-pintura">
✔️ Inspeção de Qualidade
<button class="star-btn" onclick="toggleFavorite(event, 'inspecao-pintura')"></button>
</div>
</div>
</div>
<!-- TAB 5: ORÇAMENTO -->
<div class="sidebar-content" id="sidebar-5">
<div class="sidebar-section">
<div class="sidebar-item" onclick="showSection('orcamento')" data-section="orcamento">
💵 Orçamento Detalhado
<button class="star-btn" onclick="toggleFavorite(event, 'orcamento')"></button>
</div>
<div class="sidebar-item" onclick="showSection('peso-rigging')" data-section="peso-rigging">
⚖️ Peso e Rigging
<button class="star-btn" onclick="toggleFavorite(event, 'peso-rigging')"></button>
</div>
<div class="sidebar-item" onclick="showSection('referencia')" data-section="referencia">
📖 Referência Técnica
<button class="star-btn" onclick="toggleFavorite(event, 'referencia')"></button>
</div>
</div>
</div>
</aside>
<main class="main-content" id="main-content">
<!-- Content will be dynamically loaded here -->
</main>
</div>
<!-- History Modal -->
<div class="modal" id="history-modal">
<div class="modal-content">
<div class="modal-header">
<div class="modal-title">📋 Histórico de Cálculos</div>
<button class="close-btn" onclick="closeHistoryModal()">×</button>
</div>
<div id="history-list"></div>
</div>
</div>
<!-- Favorites Modal -->
<div class="modal" id="favorites-modal">
<div class="modal-content">
<div class="modal-header">
<div class="modal-title">⭐ Favoritos</div>
<button class="close-btn" onclick="closeFavoritesModal()">×</button>
</div>
<div id="favorites-list"></div>
</div>
</div>
<!-- Admin Modal removido: funcionalidades migradas para abrirPainelDados() -->
<!-- CSV Manager Modal -->
<div class="modal" id="csvManagerModal" style="z-index: 2001;">
<div class="modal-content" style="max-width: 1200px; max-height: 90vh;">
<div class="modal-header">
<h2>📊 Gerenciador de Base de Dados CSV</h2>
<button class="close-btn" onclick="closeCSVManager()">×</button>
</div>
<div class="modal-body" style="padding: 0;">
<!-- File Selector -->
<div style="padding: 20px; border-bottom: 1px solid var(--color-border);">
<div class="form-group" style="margin-bottom: 0;">
<label class="form-label">Selecione o arquivo CSV:</label>
<select class="form-control" id="csvFileSelect" onchange="loadSelectedCSV()">
<option value="">-- Selecione um arquivo --</option>
</select>
</div>
</div>
<!-- CSV Content -->
<div id="csvContent" style="padding: 20px; overflow-y: auto; max-height: calc(90vh - 250px);">
<div style="text-align: center; padding: 60px 20px; color: var(--color-text-secondary);">
<div style="font-size: 64px; margin-bottom: 16px;">📁</div>
<p style="font-size: 18px; margin-bottom: 8px;">Selecione um arquivo CSV para começar</p>
<p style="font-size: 14px;">Você poderá visualizar, editar, adicionar e remover registros</p>
</div>
</div>
</div>
<div class="modal-footer" style="display: flex; gap: 12px; justify-content: space-between;">
<div style="display: flex; gap: 12px;">
<button class="btn btn-secondary" onclick="addNewRecord()" id="btnAddRecord" style="display: none;">
Adicionar Registro
</button>
<button class="btn btn-secondary" onclick="downloadCurrentCSV()" id="btnDownload" style="display: none;">
💾 Download CSV
</button>
</div>
<button class="btn btn-primary" onclick="closeCSVManager()">Fechar</button>
</div>
</div>
</div>
<!-- CSV Record Editor Modal -->
<div class="modal" id="csvRecordModal" style="z-index: 2002;">
<div class="modal-content" style="max-width: 700px;">
<div class="modal-header">
<h2 id="recordModalTitle">✏️ Editar Registro</h2>
<button class="close-btn" onclick="closeRecordModal()">×</button>
</div>
<div class="modal-body" id="recordModalBody">
<!-- Dynamic form will be inserted here -->
</div>
<div class="modal-footer" style="display: flex; gap: 12px; justify-content: flex-end;">
<button class="btn btn-secondary" onclick="closeRecordModal()">Cancelar</button>
<button class="btn btn-primary" onclick="saveRecord()">💾 Salvar</button>
</div>
</div>
</div>
<!-- Help Modal -->
<div class="modal-help" id="modalAjuda">
<div class="modal-help-content">
<div class="modal-help-header">
<h2 id="ajudaTitulo">📚 Ajuda</h2>
<button class="close-btn" onclick="closeAjudaModal()">×</button>
</div>
<div class="modal-help-search">
<input type="text" id="helpSearch" placeholder="🔍 Buscar no conteúdo..." oninput="filtrarConteudoAjuda()">
</div>
<div class="modal-help-tabs">
<button class="help-tab-btn active" onclick="switchHelpTab(0)">📖 Explicação</button>
<button class="help-tab-btn" onclick="switchHelpTab(1)">🔧 Campos</button>
<button class="help-tab-btn" onclick="switchHelpTab(2)">📊 Resultados</button>
<button class="help-tab-btn" onclick="switchHelpTab(3)">📚 Referências</button>
</div>
<div class="modal-help-body">
<div class="help-tab-content active" id="help-tab-0"></div>
<div class="help-tab-content" id="help-tab-1"></div>
<div class="help-tab-content" id="help-tab-2"></div>
<div class="help-tab-content" id="help-tab-3"></div>
</div>
<div class="modal-help-footer">
<button class="btn btn-primary" onclick="abrirManualRelacionado()">📖 Ver no Manual do Usuário</button>
</div>
</div>
</div>
<!-- Manual Usuario Modal -->
<div class="modal-manual" id="modalManual">
<div class="modal-manual-container">
<div class="manual-sidebar">
<div class="manual-search">
<input type="text" id="manualSearch" placeholder="🔍 Buscar..." oninput="buscarNoManual()">
</div>
<nav class="manual-nav" id="manualNav"></nav>
</div>
<div class="manual-content">
<button class="close-btn" onclick="closeManualModal()" style="position: absolute; top: 20px; right: 20px;">×</button>
<div id="manualConteudo"></div>
</div>
</div>
</div>
<!-- Global Search Modal -->
<div class="modal" id="globalSearchModal">
<div class="modal-content" style="max-width: 700px;">
<div class="modal-header">
<h2>🔍 Buscar Ferramentas</h2>
<button class="close-btn" onclick="closeGlobalSearchModal()">×</button>
</div>
<div class="modal-body">
<div class="form-group">
<input type="text" class="form-control" id="globalSearchInput" placeholder="Digite para buscar ferramentas, abas ou temas..." oninput="buscarFerramentasGlobal()" autofocus>
<small style="color: var(--color-text-secondary); margin-top: 8px; display: block;">
💡 Dica: Digite "solda", "parafuso", "charpy", "pintura", etc.
</small>
</div>
<div id="globalSearchResults" style="margin-top: 20px; max-height: 400px; overflow-y: auto;">
<p style="color: var(--color-text-secondary); text-align: center; padding: 40px;">
Digite algo para começar a buscar...
</p>
</div>
</div>
</div>
</div>
<div class="footer" id="appFooter">
<p>&copy; 2025 SteelBase v6.5 PROFESSIONAL EDITION - Plataforma Técnica com Base de Dados de Materiais Brasileiros</p>
</div>
<!-- Utils (global) -->
<script src="/js/utils/logger.js"></script>
<script src="/js/core/state.js"></script>
<!-- Main app (legacy - mantido para compatibilidade) -->
<script src="/app.js"></script>
<!-- Catálogo de Perfis - reativando gradualmente para diagnóstico -->
<script src="/js/sections/perfis-templates.js"></script>
<!-- Perfis Catalog (JS) -->
<!-- Auto-loader que gera funções globais de carregamento/atualização para cada perfil -->
<script src="/js/sections/perfis-auto-loader.js"></script>
<!-- Carregar catálogo de perfis após diagnóstico -->
<script src="/js/sections/perfis-catalog.js"></script>
<!-- Modular app (ES6 modules - novo sistema) -->
<!-- Temporariamente desativado para diagnosticar erro "Unexpected token '<'" -->
<!-- <script type="module" src="/js/main.js"></script> -->
<!-- Debug de erros: mostra origem do erro JS na tela -->
<script>
(function(){
function showErrorOverlay(message, source, lineno, colno) {
const overlay = document.createElement('div');
overlay.style.position = 'fixed';
overlay.style.bottom = '0';
overlay.style.left = '0';
overlay.style.right = '0';
overlay.style.background = 'rgba(192, 21, 47, 0.9)';
overlay.style.color = '#fff';
overlay.style.padding = '12px';
overlay.style.fontFamily = 'monospace';
overlay.style.zIndex = '99999';
overlay.textContent = `Erro JS: ${message} \nFonte: ${source}:${lineno}:${colno}`;
document.body.appendChild(overlay);
}
window.addEventListener('error', function(e){
try {
const src = e.filename || (e.target && e.target.src) || 'desconhecido';
const msg = e.message || 'Erro script';
showErrorOverlay(msg, src, e.lineno || 0, e.colno || 0);
} catch(_) {}
}, true);
window.addEventListener('unhandledrejection', function(e){
try {
showErrorOverlay('Promise rejeitada', 'runtime', 0, 0);
} catch(_) {}
});
})();
</script>
<!-- Módulos de Persistência -->
<script src="/js/core/admin-config-manager.js"></script>
<script src="/js/core/backup-manager.js"></script>
<script src="/js/ui/toast-manager.js"></script>
<!-- Test Suite -->
<script src="/js/tests/test-backup-log.js"></script>
<script src="/js/tests/test-suite.js"></script>
<!-- Menu Mobile (Hamburger no topbar, sidebar dropdown) -->
<script type="module" src="/js/ui/mobile-menu.js"></script>
</body>
</html>