{"id":634,"date":"2026-07-27T14:42:12","date_gmt":"2026-07-27T14:42:12","guid":{"rendered":"https:\/\/7.sos.adm.br\/?page_id=634"},"modified":"2026-07-27T14:42:12","modified_gmt":"2026-07-27T14:42:12","slug":"shortcode-sos87_mapa","status":"publish","type":"page","link":"https:\/\/7.sos.adm.br\/?page_id=634","title":{"rendered":"Shortcode: sos87_mapa"},"content":{"rendered":"<p>Este \u00e9 o resultado do shortcode         <div class=\"sos87-container\" id=\"sos87-container-sos87-mapa-6adf6523a58e8\">\n            \n            <!-- Alerta de novas ocorr\u00eancias -->\n            <div class=\"sos87-new-alert\" id=\"sos87-mapa-6adf6523a58e8-new-alert\" onclick=\"window['_sos87_recarregar_sos87-mapa-6adf6523a58e8']();\">\n                <i class=\"fas fa-bell\"><\/i>\n                <span id=\"sos87-mapa-6adf6523a58e8-new-count\">0<\/span> nova(s) ocorr\u00eancia(s)\n                <span class=\"alert-badge\" id=\"sos87-mapa-6adf6523a58e8-alert-badge\">0<\/span>\n            <\/div>\n            \n            <!-- Bot\u00e3o toggle painel -->\n            <button class=\"sos87-toggle-panel-btn\" id=\"sos87-mapa-6adf6523a58e8-toggle-panel\" title=\"Painel de Controle\">\n                <i class=\"fas fa-sliders-h\"><\/i>\n            <\/button>\n            \n            <!-- Painel lateral deslizante -->\n            <div class=\"sos87-side-panel\" id=\"sos87-mapa-6adf6523a58e8-side-panel\">\n                <div class=\"sos87-side-panel-inner\">\n                    \n                    <!-- Estat\u00edsticas compactas -->\n                    <div class=\"sos87-stats-panel\">\n                        <div class=\"sos87-stat-card sos87-stat-total\">\n                            <div class=\"stat-value\" id=\"sos87-mapa-6adf6523a58e8-stat-total\">0<\/div>\n                            <div class=\"stat-label\">Total<\/div>\n                        <\/div>\n                        <div class=\"sos87-stat-card sos87-stat-maxima\">\n                            <div class=\"stat-value\" id=\"sos87-mapa-6adf6523a58e8-stat-maxima\">0<\/div>\n                            <div class=\"stat-label\">\ud83d\udd34 M\u00e1x<\/div>\n                        <\/div>\n                        <div class=\"sos87-stat-card sos87-stat-alta\">\n                            <div class=\"stat-value\" id=\"sos87-mapa-6adf6523a58e8-stat-alta\">0<\/div>\n                            <div class=\"stat-label\">\ud83d\udfe0 Alta<\/div>\n                        <\/div>\n                        <div class=\"sos87-stat-card sos87-stat-media\">\n                            <div class=\"stat-value\" id=\"sos87-mapa-6adf6523a58e8-stat-media\">0<\/div>\n                            <div class=\"stat-label\">\ud83d\udfe1 M\u00e9dia<\/div>\n                        <\/div>\n                        <div class=\"sos87-stat-card sos87-stat-baixa\">\n                            <div class=\"stat-value\" id=\"sos87-mapa-6adf6523a58e8-stat-baixa\">0<\/div>\n                            <div class=\"stat-label\">\ud83d\udfe2 Baixa<\/div>\n                        <\/div>\n                    <\/div>\n                    \n                    <!-- Barra de pesquisa -->\n                    <div class=\"sos87-search-wrapper\">\n                        <i class=\"fas fa-search\"><\/i>\n                        <input type=\"text\" id=\"sos87-mapa-6adf6523a58e8-search\" \n                               placeholder=\"\ud83d\udd0d Pesquisar (ID, protocolo, nome, tipo, endere\u00e7o, equipe)...\">\n                        <div class=\"sos87-search-results\" id=\"sos87-mapa-6adf6523a58e8-search-results\"><\/div>\n                    <\/div>\n                    \n                    <!-- Filtros de data -->\n                    <div class=\"sos87-date-filters\" id=\"sos87-mapa-6adf6523a58e8-date-filters\">\n                        <button class=\"sos87-date-btn active\" data-periodo=\"hoje\">Hoje<\/button>\n                        <button class=\"sos87-date-btn\" data-periodo=\"ontem\">Ontem<\/button>\n                        <button class=\"sos87-date-btn\" data-periodo=\"7dias\">7 dias<\/button>\n                        <button class=\"sos87-date-btn\" data-periodo=\"30dias\">30 dias<\/button>\n                        <button class=\"sos87-date-btn\" data-periodo=\"custom\">Personalizado<\/button>\n                    <\/div>\n                    \n                    <!-- Datepicker custom -->\n                    <div class=\"sos87-date-custom\" id=\"sos87-mapa-6adf6523a58e8-date-custom\">\n                        <input type=\"date\" id=\"sos87-mapa-6adf6523a58e8-date-inicio\">\n                        <span>at\u00e9<\/span>\n                        <input type=\"date\" id=\"sos87-mapa-6adf6523a58e8-date-fim\">\n                        <button id=\"sos87-mapa-6adf6523a58e8-date-apply\">Aplicar<\/button>\n                    <\/div>\n                    \n                    <!-- Filtros de prioridade -->\n                    <div class=\"sos87-priority-filters\" id=\"sos87-mapa-6adf6523a58e8-priority-filters\">\n                        <button class=\"sos87-priority-btn active\" data-prioridade=\"\" style=\"border-color:#0073aa;color:#0073aa;\">Todas<\/button>\n                        <button class=\"sos87-priority-btn maxima\" data-prioridade=\"maxima\">M\u00e1xima<\/button>\n                        <button class=\"sos87-priority-btn alta\" data-prioridade=\"alta\">Alta<\/button>\n                        <button class=\"sos87-priority-btn media\" data-prioridade=\"media\">M\u00e9dia<\/button>\n                        <button class=\"sos87-priority-btn baixa\" data-prioridade=\"baixa\">Baixa<\/button>\n                    <\/div>\n                    \n                    <!-- NOVA LISTA DE OCORR\u00caNCIAS EM FORMATO DE CARDS -->\n                    <div class=\"sos87-list-panel\">\n                        <div class=\"sos87-list-header\">\n                            <h4>\ud83d\udccb Ocorr\u00eancias <span id=\"sos87-mapa-6adf6523a58e8-list-count\" style=\"opacity:0.7;\">(0)<\/span><\/h4>\n                        <\/div>\n                        <div class=\"sos87-list-body\" id=\"sos87-mapa-6adf6523a58e8-list-body\">\n                            <div id=\"sos87-mapa-6adf6523a58e8-cards-container\">\n                                <div class=\"sos87-list-empty\">\n                                    <i class=\"fas fa-inbox\"><\/i>\n                                    Nenhuma ocorr\u00eancia encontrada\n                                <\/div>\n                            <\/div>\n                        <\/div>\n                    <\/div>\n                    \n                <\/div>\n            <\/div>\n            \n            <!-- MAPA (\u00e1rea principal) -->\n            <div style=\"position:relative;\">\n                <div id=\"sos87-mapa-6adf6523a58e8\"><\/div>\n                <div id=\"sos87-mapa-6adf6523a58e8-loading\" class=\"sos87-loading-overlay\" style=\"display:none;\">\n                    <i class=\"fas fa-spinner fa-spin\"><\/i> Carregando...\n                <\/div>\n            <\/div>\n            \n        <\/div>\n        \n        <!-- \u00c1udio para alerta sonoro -->\n        <audio id=\"sos87-mapa-6adf6523a58e8-alert-sound\" src=\"https:\/\/7.sos.adm.br\/wp-content\/plugins\/sos-mapa\/sounds\/alert.mp3\" preload=\"auto\"><\/audio>\n        \n        <script>\n        (function($) {\n            var mapId = 'sos87-mapa-6adf6523a58e8';\n            var ajaxUrl = 'https:\/\/7.sos.adm.br\/wp-admin\/admin-ajax.php';\n            var nonce = '4f2fe8f488';\n            var categoria = '';\n            var zoomInicial = 12;\n            var siteUrl = 'https:\/\/7.sos.adm.br';\n            \n            var estadoFiltros = {\n                periodo: 'hoje',\n                dataInicio: '',\n                dataFim: '',\n                prioridade: ''\n            };\n            \n            var painelAberto = true;\n            var ultimoIdConhecido = 0;\n            var verificacaoAtiva = true;\n            \n            var hoje = new Date().toISOString().split('T')[0];\n            $('#sos87-mapa-6adf6523a58e8-date-inicio').val(hoje);\n            $('#sos87-mapa-6adf6523a58e8-date-fim').val(hoje);\n            \n            \/\/ Elemento de \u00e1udio para alerta\n            var alertSound = document.getElementById(mapId + '-alert-sound');\n            \n            \/\/ Toggle painel lateral\n            $('#sos87-mapa-6adf6523a58e8-toggle-panel').on('click', function() {\n                painelAberto = !painelAberto;\n                if (painelAberto) {\n                    $('#sos87-mapa-6adf6523a58e8-side-panel').addClass('open');\n                    $(this).addClass('active');\n                } else {\n                    $('#sos87-mapa-6adf6523a58e8-side-panel').removeClass('open');\n                    $(this).removeClass('active');\n                }\n                setTimeout(function() {\n                    if (window['_sos87_map_' + mapId]) {\n                        window['_sos87_map_' + mapId].invalidateSize();\n                    }\n                }, 350);\n            });\n            \n            \/\/ Fun\u00e7\u00e3o para tocar alerta sonoro\n            function tocarAlertaSonoro() {\n                if (alertSound) {\n                    alertSound.currentTime = 0;\n                    alertSound.play().catch(function(e) {\n                        console.log('SOS87: N\u00e3o foi poss\u00edvel tocar o som (intera\u00e7\u00e3o do usu\u00e1rio necess\u00e1ria)');\n                    });\n                }\n            }\n            \n            \/\/ Mostrar alerta visual de novas ocorr\u00eancias\n            function mostrarAlertaNovas(count) {\n                var $alert = $('#sos87-mapa-6adf6523a58e8-new-alert');\n                $('#sos87-mapa-6adf6523a58e8-new-count').text(count);\n                $('#sos87-mapa-6adf6523a58e8-alert-badge').text(count);\n                \n                if (count > 0) {\n                    $alert.addClass('show');\n                    tocarAlertaSonoro();\n                    \n                    \/\/ Esconder ap\u00f3s 10 segundos\n                    clearTimeout(window['_sos87_alertTimeout_' + mapId]);\n                    window['_sos87_alertTimeout_' + mapId] = setTimeout(function() {\n                        $alert.removeClass('show');\n                    }, 10000);\n                } else {\n                    $alert.removeClass('show');\n                }\n            }\n            \n            \/\/ Fun\u00e7\u00e3o para recarregar dados (chamada ao clicar no alerta)\n            window['_sos87_recarregar_sos87-mapa-6adf6523a58e8'] = function() {\n                $('#sos87-mapa-6adf6523a58e8-new-alert').removeClass('show');\n                carregarDados();\n                carregarEstatisticas();\n            };\n            \n            function waitForLeaflet(callback) {\n                if (typeof L !== 'undefined') {\n                    callback();\n                } else {\n                    setTimeout(function() { waitForLeaflet(callback); }, 200);\n                }\n            }\n            \n            var avatarColors = ['#0073aa', '#dc3545', '#28a745', '#fd7e14', '#6f42c1', '#20c997', '#e83e8c', '#17a2b8'];\n            \n            function getAvatarColor(nome) {\n                if (!nome) return avatarColors[0];\n                var hash = 0;\n                for (var i = 0; i < nome.length; i++) {\n                    hash = nome.charCodeAt(i) + ((hash << 5) - hash);\n                }\n                return avatarColors[Math.abs(hash) % avatarColors.length];\n            }\n            \n            function getIniciais(nome) {\n                if (!nome) return '?';\n                var partes = nome.trim().split(' ');\n                if (partes.length >= 2) {\n                    return (partes[0][0] + partes[partes.length - 1][0]).toUpperCase();\n                }\n                return partes[0].substring(0, 2).toUpperCase();\n            }\n            \n            function getChatUrl(chatId) {\n                if (!chatId) return '';\n                return siteUrl + '\/?p=' + chatId;\n            }\n            \n            waitForLeaflet(function() {\n                var mapEl = document.getElementById(mapId);\n                if (!mapEl) return;\n                \n                var map = L.map(mapId, {\n                    zoomControl: true\n                }).setView([-15.7801, -47.9292], zoomInicial);\n                \n                window['_sos87_map_' + mapId] = map;\n                \n                L.tileLayer('https:\/\/{s}.tile.openstreetmap.org\/{z}\/{x}\/{y}.png', {\n                    attribution: '&copy; <a href=\"https:\/\/www.openstreetmap.org\/copyright\">OpenStreetMap<\/a>',\n                    maxZoom: 19\n                }).addTo(map);\n                \n                var markers = {};\n                var todasOcorrencias = [];\n                var novasOcorrenciasIds = [];\n                \n                function getColor(prioridade) {\n                    var p = (prioridade || '').toLowerCase();\n                    if (p.indexOf('max') >= 0 || p.indexOf('cr\u00edtic') >= 0 || p.indexOf('critic') >= 0) return '#dc3545';\n                    if (p.indexOf('alt') >= 0) return '#fd7e14';\n                    if (p.indexOf('m\u00e9d') >= 0 || p.indexOf('med') >= 0) return '#ffc107';\n                    if (p.indexOf('baix') >= 0) return '#28a745';\n                    return '#0073aa';\n                }\n                \n                function getTamanho(prioridade) {\n                    var p = (prioridade || '').toLowerCase();\n                    if (p.indexOf('max') >= 0 || p.indexOf('cr\u00edtic') >= 0 || p.indexOf('critic') >= 0) return 55;\n                    if (p.indexOf('alt') >= 0) return 48;\n                    return 40;\n                }\n                \n                function getStatusColor(status) {\n                    var s = (status || '').toLowerCase();\n                    if (s.indexOf('andamento') >= 0 || s.indexOf('em andamento') >= 0) return '#17a2b8';\n                    if (s.indexOf('conclu') >= 0) return '#28a745';\n                    if (s.indexOf('cancel') >= 0) return '#dc3545';\n                    return '#6c757d';\n                }\n                \n                function getStatusTexto(status) {\n                    if (!status || status === 'nenhum') return 'Registrado';\n                    return status;\n                }\n                \n                function getStatusClass(status) {\n                    var s = (status || '').toLowerCase();\n                    if (s.indexOf('andamento') >= 0 || s.indexOf('em andamento') >= 0) return 'status-andamento';\n                    if (s.indexOf('conclu') >= 0) return 'status-concluido';\n                    if (s.indexOf('cancel') >= 0) return 'status-cancelado';\n                    return 'status-padrao';\n                }\n                \n                function getPrioridadeClass(prioridade) {\n                    var p = (prioridade || '').toLowerCase();\n                    if (p.indexOf('max') >= 0 || p.indexOf('cr\u00edtic') >= 0 || p.indexOf('critic') >= 0) return 'prioridade-maxima';\n                    if (p.indexOf('alt') >= 0) return 'prioridade-alta';\n                    if (p.indexOf('m\u00e9d') >= 0 || p.indexOf('med') >= 0) return 'prioridade-media';\n                    if (p.indexOf('baix') >= 0) return 'prioridade-baixa';\n                    return '';\n                }\n                \n                function getDeviceIcon(dispositivo) {\n                    var d = (dispositivo || '').toLowerCase();\n                    if (d.indexOf('android') >= 0) return '<i class=\"fab fa-android\" style=\"color:#3ddc84;\"><\/i> Android';\n                    if (d.indexOf('iphone') >= 0 || d.indexOf('ios') >= 0) return '<i class=\"fab fa-apple\" style=\"color:#555;\"><\/i> iPhone';\n                    if (d.indexOf('windows') >= 0) return '<i class=\"fab fa-windows\" style=\"color:#0078d6;\"><\/i> Windows';\n                    if (d.indexOf('linux') >= 0) return '<i class=\"fab fa-linux\" style=\"color:#333;\"><\/i> Linux';\n                    return '<i class=\"fas fa-mobile-alt\" style=\"color:#666;\"><\/i> ' + (dispositivo || 'N\/D');\n                }\n                \n                function formatDate(datahora) {\n                    if (!datahora) return 'N\/D';\n                    var dt = datahora.replace(\/-\/g, '\/');\n                    var d = new Date(dt);\n                    if (isNaN(d.getTime())) {\n                        var parts = datahora.split(' ');\n                        if (parts.length >= 2) {\n                            var datePart = parts[0];\n                            var timePart = parts[1];\n                            return datePart.split('-').reverse().join('\/') + ' ' + timePart.substring(0, 5);\n                        }\n                        return datahora;\n                    }\n                    var dd = String(d.getDate()).padStart(2, '0');\n                    var mm = String(d.getMonth() + 1).padStart(2, '0');\n                    var yy = String(d.getFullYear()).substring(2);\n                    var hh = String(d.getHours()).padStart(2, '0');\n                    var min = String(d.getMinutes()).padStart(2, '0');\n                    return dd + '\/' + mm + '\/' + yy + ' \u00e0s ' + hh + ':' + min;\n                }\n                \n                function criarIcone(id, prioridade, isNew) {\n                    var cor = getColor(prioridade);\n                    var tamanho = getTamanho(prioridade);\n                    var idTexto = String(id);\n                    if (idTexto.length > 7) idTexto = idTexto.substring(0, 7);\n                    \n                    var markerClass = 'sos87-marker-id';\n                    if (isNew) markerClass += ' new-marker';\n                    \n                    return L.divIcon({\n                        html: '<div class=\"' + markerClass + '\" style=\"width:' + tamanho + 'px;height:' + tamanho + 'px;background:' + cor + ';font-size:' + (tamanho > 48 ? '13px' : '11px') + ';\">#' + idTexto + '<\/div>',\n                        className: '',\n                        iconSize: [tamanho, tamanho],\n                        iconAnchor: [tamanho\/2, tamanho],\n                        popupAnchor: [0, -tamanho]\n                    });\n                }\n                \n                function criarPopupHtml(occ) {\n                    var statusColor = getStatusColor(occ.status);\n                    var statusTexto = getStatusTexto(occ.status);\n                    var protocolo = occ.protocolo || 'N\/A';\n                    var ocorrencia = occ.ocorrencia || 'N\u00e3o especificado';\n                    var equipe = occ.equipe || 'N\u00e3o definida';\n                    var datahora = occ.datahora || '';\n                    var prioridade = occ.prioridade || 'N\u00e3o definida';\n                    var nome = occ.nome || 'N\u00e3o informado';\n                    var endereco = occ.endereco || 'N\u00e3o informado';\n                    var dispositivo = occ.dispositivo || '';\n                    var chatUrl = getChatUrl(occ.chat);\n                    var mapsUrl = 'https:\/\/www.google.com\/maps?q=' + encodeURIComponent(occ.latitude + ',' + occ.longitude);\n                    \n                    var html = '<div class=\"sos87-popup-content\">';\n                    html += '<div class=\"sos87-popup-header\">';\n                    html += '<h4>\ud83d\udea8 Ocorr\u00eancia #' + occ.id + '<\/h4>';\n                    html += '<small>' + formatDate(datahora) + '<\/small>';\n                    html += '<\/div>';\n                    html += '<div class=\"sos87-popup-body\">';\n                    html += '<p><strong>\ud83d\udc64 Nome:<\/strong> ' + nome + '<\/p>';\n                    html += '<p><strong>\ud83d\udccb Protocolo:<\/strong> ' + protocolo + '<\/p>';\n                    html += '<p><strong>\ud83d\udcdd Tipo:<\/strong> ' + ocorrencia + '<\/p>';\n                    html += '<p><strong>\ud83d\udccd Endere\u00e7o:<\/strong> ' + endereco + '<\/p>';\n                    html += '<p><strong>\ud83d\udcde Equipe:<\/strong> ' + equipe + '<\/p>';\n                    if (dispositivo) {\n                        html += '<p><strong>\ud83d\udcf1 Dispositivo:<\/strong> ' + dispositivo + '<\/p>';\n                    }\n                    html += '<p>';\n                    html += '<span class=\"sos87-popup-badge\" style=\"background:' + statusColor + ';\">' + statusTexto + '<\/span> ';\n                    html += '<span class=\"sos87-popup-badge\" style=\"background:' + getColor(prioridade) + ';\">' + prioridade + '<\/span>';\n                    html += '<\/p>';\n                    html += '<div class=\"sos87-popup-buttons\">';\n                    if (chatUrl) {\n                        html += '<a href=\"' + chatUrl + '\" target=\"_blank\" class=\"sos87-popup-btn\" style=\"background:#17a2b8;\"><i class=\"fas fa-comment\"><\/i> Chat<\/a>';\n                    }\n                    html += '<a href=\"' + mapsUrl + '\" target=\"_blank\" class=\"sos87-popup-btn\" style=\"background:#28a745;\"><i class=\"fas fa-route\"><\/i> Rota<\/a>';\n                    html += '<a href=\"' + mapsUrl + '\" target=\"_blank\" class=\"sos87-popup-btn\" style=\"background:#0073aa;\"><i class=\"fas fa-map-marker-alt\"><\/i> Maps<\/a>';\n                    html += '<\/div>';\n                    html += '<\/div>';\n                    html += '<\/div>';\n                    \n                    return html;\n                }\n                \n                function atualizarMarcadores(ocorrencias, novasIds) {\n                    for (var key in markers) {\n                        if (markers[key]) map.removeLayer(markers[key]);\n                    }\n                    markers = {};\n                    todasOcorrencias = ocorrencias || [];\n                    novasOcorrenciasIds = novasIds || [];\n                    \n                    atualizarListaCards(todasOcorrencias, novasOcorrenciasIds);\n                    \n                    if (!ocorrencias || ocorrencias.length === 0) return;\n                    \n                    var bounds = [];\n                    \n                    ocorrencias.forEach(function(occ) {\n                        if (!occ.latitude || !occ.longitude) return;\n                        \n                        var isNew = novasOcorrenciasIds.indexOf(occ.id) !== -1;\n                        var icon = criarIcone(occ.id, occ.prioridade, isNew);\n                        var marker = L.marker([occ.latitude, occ.longitude], { icon: icon }).addTo(map);\n                        marker.bindPopup(criarPopupHtml(occ), { maxWidth: 400, minWidth: 280 });\n                        \n                        markers['occ-' + occ.id] = marker;\n                        bounds.push([occ.latitude, occ.longitude]);\n                    });\n                    \n                    if (bounds.length > 0) {\n                        try {\n                            map.fitBounds(bounds, { padding: [50, 50], maxZoom: 15 });\n                        } catch(e) {}\n                    }\n                    \n                    setTimeout(function() { map.invalidateSize(); }, 300);\n                }\n                \n                \/\/ ==================== NOVA FUN\u00c7\u00c3O: ATUALIZAR LISTA EM FORMATO DE CARDS ====================\n                function atualizarListaCards(ocorrencias, novasIds) {\n                    var $container = $('#sos87-mapa-6adf6523a58e8-cards-container');\n                    var $count = $('#sos87-mapa-6adf6523a58e8-list-count');\n                    \n                    $count.text('(' + ocorrencias.length + ')');\n                    \n                    if (!ocorrencias || ocorrencias.length === 0) {\n                        $container.html('<div class=\"sos87-list-empty\"><i class=\"fas fa-inbox\"><\/i>Nenhuma ocorr\u00eancia encontrada<\/div>');\n                        return;\n                    }\n                    \n                    var html = '';\n                    ocorrencias.forEach(function(occ) {\n                        var statusColor = getStatusColor(occ.status);\n                        var statusTexto = getStatusTexto(occ.status);\n                        var statusClass = getStatusClass(occ.status);\n                        var prioridadeClass = getPrioridadeClass(occ.prioridade);\n                        var prioridade = occ.prioridade || 'N\u00e3o definida';\n                        var avatarCor = getAvatarColor(occ.nome);\n                        var iniciais = getIniciais(occ.nome);\n                        var nomeExibicao = occ.nome || 'N\u00e3o informado';\n                        var chatUrl = getChatUrl(occ.chat);\n                        var isNew = novasIds.indexOf(occ.id) !== -1;\n                        var protocolo = occ.protocolo || 'N\/A';\n                        var ocorrencia = occ.ocorrencia || 'N\u00e3o especificado';\n                        var equipe = occ.equipe || 'N\u00e3o definida';\n                        var endereco = occ.endereco || 'N\u00e3o informado';\n                        var dispositivo = occ.dispositivo || '';\n                        \n                        var cardClass = 'sos87-occ-card';\n                        if (isNew) cardClass += ' new-row';\n                        if (prioridadeClass) cardClass += ' ' + prioridadeClass;\n                        \n                        html += '<div class=\"' + cardClass + '\" data-occ-id=\"' + occ.id + '\" onclick=\"window[\\'_sos87_clickItem_' + mapId + '\\'](\\'' + occ.id + '\\');\">';\n                        \n                        \/\/ Cabe\u00e7alho do card: ID e Data\n                        html += '<div class=\"sos87-occ-card-header\">';\n                        html += '<span class=\"sos87-occ-card-id\">#' + occ.id + '<\/span>';\n                        html += '<span class=\"sos87-occ-card-date\"><i class=\"far fa-clock\"><\/i> ' + formatDate(occ.datahora) + '<\/span>';\n                        html += '<\/div>';\n                        \n                        \/\/ Corpo do card: informa\u00e7\u00f5es em grid 2 colunas\n                        html += '<div class=\"sos87-occ-card-body\">';\n                        \n                        \/\/ Usu\u00e1rio\n                        html += '<div class=\"sos87-occ-card-field\">';\n                        html += '<span class=\"sos87-occ-card-field-label\">\ud83d\udc64 Usu\u00e1rio<\/span>';\n                        html += '<span class=\"sos87-occ-card-field-value user-name\">';\n                        html += '<span class=\"sos87-occ-card-avatar\" style=\"background:' + avatarCor + ';\">' + iniciais + '<\/span>';\n                        html += nomeExibicao;\n                        html += '<\/span>';\n                        html += '<\/div>';\n                        \n                        \/\/ Ocorr\u00eancia (Tipo)\n                        html += '<div class=\"sos87-occ-card-field\">';\n                        html += '<span class=\"sos87-occ-card-field-label\">\ud83d\udcdd Ocorr\u00eancia<\/span>';\n                        html += '<span class=\"sos87-occ-card-field-value\">' + ocorrencia + '<\/span>';\n                        html += '<\/div>';\n                        \n                        \/\/ Protocolo\n                        html += '<div class=\"sos87-occ-card-field\">';\n                        html += '<span class=\"sos87-occ-card-field-label\">\ud83d\udccb Protocolo<\/span>';\n                        html += '<span class=\"sos87-occ-card-field-value\">' + protocolo + '<\/span>';\n                        html += '<\/div>';\n                        \n                        \/\/ Equipe\n                        html += '<div class=\"sos87-occ-card-field\">';\n                        html += '<span class=\"sos87-occ-card-field-label\">\ud83d\udcde Equipe<\/span>';\n                        html += '<span class=\"sos87-occ-card-field-value\">' + equipe + '<\/span>';\n                        html += '<\/div>';\n                        \n                        \/\/ Endere\u00e7o (largura completa)\n                        if (endereco && endereco !== 'N\u00e3o informado') {\n                            html += '<div class=\"sos87-occ-card-field full-width\">';\n                            html += '<span class=\"sos87-occ-card-field-label\">\ud83d\udccd Endere\u00e7o<\/span>';\n                            html += '<span class=\"sos87-occ-card-field-value\">' + endereco + '<\/span>';\n                            html += '<\/div>';\n                        }\n                        \n                        html += '<\/div>';\n                        \n                        \/\/ Rodap\u00e9 do card: badges e a\u00e7\u00f5es\n                        html += '<div class=\"sos87-occ-card-footer\">';\n                        html += '<div class=\"sos87-occ-card-badges\">';\n                        html += '<span class=\"sos87-occ-card-badge ' + statusClass + '\">' + statusTexto + '<\/span>';\n                        html += '<span class=\"sos87-occ-card-badge ' + prioridadeClass + '\">' + prioridade + '<\/span>';\n                        html += '<\/div>';\n                        \n                        \/\/ Dispositivo e bot\u00e3o chat\n                        html += '<div style=\"display:flex;align-items:center;gap:8px;\">';\n                        if (dispositivo) {\n                            html += '<span class=\"sos87-occ-card-device\">' + getDeviceIcon(dispositivo) + '<\/span>';\n                        }\n                        if (chatUrl) {\n                            html += '<a href=\"' + chatUrl + '\" target=\"_blank\" class=\"sos87-occ-card-chat-btn\" onclick=\"event.stopPropagation();\"><i class=\"fas fa-comment\"><\/i> Chat<\/a>';\n                        }\n                        html += '<\/div>';\n                        \n                        html += '<\/div>';\n                        \n                        html += '<\/div>';\n                    });\n                    \n                    $container.html(html);\n                }\n                \n                window['_sos87_clickItem_' + mapId] = function(id) {\n                    \/\/ Remover highlight de todos os cards\n                    $('.sos87-occ-card').removeClass('highlight-row');\n                    \n                    \/\/ Destacar o card clicado\n                    var card = $('.sos87-occ-card[data-occ-id=\"' + id + '\"]');\n                    card.addClass('highlight-row');\n                    \n                    \/\/ Scroll at\u00e9 o card\n                    if (card.length) {\n                        var container = $('#sos87-mapa-6adf6523a58e8-list-body');\n                        container.animate({\n                            scrollTop: card.offset().top - container.offset().top + container.scrollTop() - 20\n                        }, 300);\n                    }\n                    \n                    \/\/ Centralizar no mapa\n                    var marker = markers['occ-' + id];\n                    if (marker) {\n                        var latlng = marker.getLatLng();\n                        map.setView(latlng, 16);\n                        marker.openPopup();\n                        \n                        var iconEl = marker.getElement();\n                        if (iconEl) {\n                            var innerDiv = iconEl.querySelector('.sos87-marker-id');\n                            if (innerDiv) {\n                                innerDiv.classList.add('highlight');\n                                setTimeout(function() {\n                                    innerDiv.classList.remove('highlight');\n                                }, 3000);\n                            }\n                        }\n                    }\n                };\n                \n                \/\/ PESQUISA\n                function pesquisarECentralizar(termo) {\n                    if (!termo || termo.length < 1) {\n                        carregarDados();\n                        $('#sos87-mapa-6adf6523a58e8-search-results').removeClass('active');\n                        return;\n                    }\n                    \n                    var loading = document.getElementById(mapId + '-loading');\n                    if (loading) loading.style.display = 'block';\n                    \n                    var formData = new FormData();\n                    formData.append('action', 'sos87_pesquisar_ocorrencias');\n                    formData.append('nonce', nonce);\n                    formData.append('termo', termo);\n                    if (categoria) formData.append('categoria', categoria);\n                    \n                    fetch(ajaxUrl, { method: 'POST', body: formData })\n                        .then(function(r) { return r.json(); })\n                        .then(function(res) {\n                            if (loading) loading.style.display = 'none';\n                            \n                            if (res.success) {\n                                var resultados = res.data || [];\n                                console.log('SOS87 Pesquisa: \"' + termo + '\" - ' + resultados.length + ' resultados');\n                                mostrarResultadosBusca(resultados);\n                                atualizarMarcadores(resultados, []);\n                                \n                                if (resultados.length > 0) {\n                                    var primeiroComCoords = resultados.find(function(o) { return o.latitude && o.longitude; });\n                                    if (primeiroComCoords) {\n                                        map.setView([primeiroComCoords.latitude, primeiroComCoords.longitude], 16);\n                                        setTimeout(function() {\n                                            window['_sos87_clickItem_' + mapId](primeiroComCoords.id);\n                                        }, 500);\n                                    }\n                                }\n                            }\n                        })\n                        .catch(function(err) {\n                            if (loading) loading.style.display = 'none';\n                            console.error('SOS87 Erro pesquisa:', err);\n                        });\n                }\n                \n                function mostrarResultadosBusca(resultados) {\n                    var $results = $('#sos87-mapa-6adf6523a58e8-search-results');\n                    \n                    if (!resultados || resultados.length === 0) {\n                        $results.html('<div class=\"sos87-search-result-item\" style=\"color:#999;\">Nenhum resultado encontrado<\/div>');\n                        $results.addClass('active');\n                        return;\n                    }\n                    \n                    var html = '';\n                    resultados.slice(0, 8).forEach(function(occ) {\n                        var info = '#' + occ.id + ' | Protocolo: ' + (occ.protocolo || 'N\/A') + ' | ' + (occ.nome || '');\n                        html += '<div class=\"sos87-search-result-item\" onclick=\"window[\\'_sos87_clickItem_' + mapId + '\\'](\\'' + occ.id + '\\'); $(\\'#sos87-mapa-6adf6523a58e8-search-results\\').removeClass(\\'active\\');\">';\n                        html += '<span class=\"result-id\">#' + occ.id + '<\/span> ';\n                        html += '<span class=\"result-info\">' + info + '<\/span>';\n                        html += '<\/div>';\n                    });\n                    \n                    if (resultados.length > 8) {\n                        html += '<div class=\"sos87-search-result-item\" style=\"color:#999;text-align:center;\">+ ' + (resultados.length - 8) + ' mais resultados...<\/div>';\n                    }\n                    \n                    $results.html(html);\n                    $results.addClass('active');\n                }\n                \n                var searchTimeout;\n                $('#sos87-mapa-6adf6523a58e8-search').on('input', function() {\n                    var termo = $(this).val().trim();\n                    clearTimeout(searchTimeout);\n                    \n                    if (termo.length === 0) {\n                        $('#sos87-mapa-6adf6523a58e8-search-results').removeClass('active');\n                        carregarDados();\n                        return;\n                    }\n                    \n                    searchTimeout = setTimeout(function() {\n                        pesquisarECentralizar(termo);\n                    }, 300);\n                });\n                \n                $(document).on('click', function(e) {\n                    if (!$(e.target).closest('#sos87-mapa-6adf6523a58e8-search-wrapper').length) {\n                        $('#sos87-mapa-6adf6523a58e8-search-results').removeClass('active');\n                    }\n                });\n                \n                $('#sos87-mapa-6adf6523a58e8-search').on('keydown', function(e) {\n                    if (e.key === 'Enter') {\n                        e.preventDefault();\n                        var termo = $(this).val().trim();\n                        if (termo.length > 0) {\n                            pesquisarECentralizar(termo);\n                        }\n                    }\n                });\n                \n                function getPeriodoDatas(periodo) {\n                    var hoje = new Date();\n                    var inicio, fim;\n                    switch(periodo) {\n                        case 'hoje':\n                            inicio = new Date(hoje.getFullYear(), hoje.getMonth(), hoje.getDate());\n                            fim = new Date(hoje.getFullYear(), hoje.getMonth(), hoje.getDate(), 23, 59, 59);\n                            break;\n                        case 'ontem':\n                            var ontem = new Date(hoje);\n                            ontem.setDate(ontem.getDate() - 1);\n                            inicio = new Date(ontem.getFullYear(), ontem.getMonth(), ontem.getDate());\n                            fim = new Date(ontem.getFullYear(), ontem.getMonth(), ontem.getDate(), 23, 59, 59);\n                            break;\n                        case '7dias':\n                            fim = new Date(hoje.getFullYear(), hoje.getMonth(), hoje.getDate(), 23, 59, 59);\n                            inicio = new Date(fim);\n                            inicio.setDate(inicio.getDate() - 6);\n                            inicio.setHours(0, 0, 0, 0);\n                            break;\n                        case '30dias':\n                            fim = new Date(hoje.getFullYear(), hoje.getMonth(), hoje.getDate(), 23, 59, 59);\n                            inicio = new Date(fim);\n                            inicio.setDate(inicio.getDate() - 29);\n                            inicio.setHours(0, 0, 0, 0);\n                            break;\n                        default:\n                            inicio = new Date(hoje.getFullYear(), hoje.getMonth(), hoje.getDate());\n                            fim = new Date(hoje.getFullYear(), hoje.getMonth(), hoje.getDate(), 23, 59, 59);\n                    }\n                    return {\n                        inicio: inicio.toISOString().split('T')[0],\n                        fim: fim.toISOString().split('T')[0]\n                    };\n                }\n                \n                $('#sos87-mapa-6adf6523a58e8-date-filters .sos87-date-btn').on('click', function() {\n                    var periodo = $(this).data('periodo');\n                    $('#sos87-mapa-6adf6523a58e8-date-filters .sos87-date-btn').removeClass('active');\n                    $(this).addClass('active');\n                    \n                    if (periodo === 'custom') {\n                        $('#sos87-mapa-6adf6523a58e8-date-custom').addClass('active');\n                        return;\n                    } else {\n                        $('#sos87-mapa-6adf6523a58e8-date-custom').removeClass('active');\n                    }\n                    \n                    var datas = getPeriodoDatas(periodo);\n                    estadoFiltros.periodo = periodo;\n                    estadoFiltros.dataInicio = datas.inicio;\n                    estadoFiltros.dataFim = datas.fim;\n                    \n                    carregarDados();\n                    carregarEstatisticas();\n                });\n                \n                $('#sos87-mapa-6adf6523a58e8-date-apply').on('click', function() {\n                    var inicio = $('#sos87-mapa-6adf6523a58e8-date-inicio').val();\n                    var fim = $('#sos87-mapa-6adf6523a58e8-date-fim').val();\n                    if (inicio && fim) {\n                        estadoFiltros.dataInicio = inicio;\n                        estadoFiltros.dataFim = fim;\n                        estadoFiltros.periodo = 'custom';\n                        $('#sos87-mapa-6adf6523a58e8-date-filters .sos87-date-btn').removeClass('active');\n                        carregarDados();\n                        carregarEstatisticas();\n                    }\n                });\n                \n                $('#sos87-mapa-6adf6523a58e8-priority-filters .sos87-priority-btn').on('click', function() {\n                    $('#sos87-mapa-6adf6523a58e8-priority-filters .sos87-priority-btn').removeClass('active');\n                    $(this).addClass('active');\n                    estadoFiltros.prioridade = $(this).data('prioridade') || '';\n                    carregarDados();\n                });\n                \n                var legend = L.control({ position: 'bottomright' });\n                legend.onAdd = function() {\n                    var div = L.DomUtil.create('div', 'sos87-legend');\n                    div.innerHTML = '<h4>\ud83d\udcca Prioridade<\/h4>' +\n                        '<div><span style=\"display:inline-block;width:10px;height:10px;border-radius:50%;background:#28a745;margin-right:5px;\"><\/span> Baixa<\/div>' +\n                        '<div><span style=\"display:inline-block;width:10px;height:10px;border-radius:50%;background:#ffc107;margin-right:5px;\"><\/span> M\u00e9dia<\/div>' +\n                        '<div><span style=\"display:inline-block;width:10px;height:10px;border-radius:50%;background:#fd7e14;margin-right:5px;\"><\/span> Alta<\/div>' +\n                        '<div><span style=\"display:inline-block;width:10px;height:10px;border-radius:50%;background:#dc3545;margin-right:5px;\"><\/span> M\u00e1xima<\/div>';\n                    return div;\n                };\n                legend.addTo(map);\n                \n                function carregarDados() {\n                    var loading = document.getElementById(mapId + '-loading');\n                    if (loading) loading.style.display = 'block';\n                    \n                    var formData = new FormData();\n                    formData.append('action', 'sos87_get_ocorrencias');\n                    formData.append('nonce', nonce);\n                    if (categoria) formData.append('categoria', categoria);\n                    if (estadoFiltros.dataInicio) formData.append('data_inicio', estadoFiltros.dataInicio);\n                    if (estadoFiltros.dataFim) formData.append('data_fim', estadoFiltros.dataFim);\n                    if (estadoFiltros.prioridade) formData.append('prioridade', estadoFiltros.prioridade);\n                    \n                    fetch(ajaxUrl, { method: 'POST', body: formData })\n                        .then(function(r) { return r.json(); })\n                        .then(function(res) {\n                            if (loading) loading.style.display = 'none';\n                            if (res.success && res.data) {\n                                console.log('SOS87: ' + res.data.length + ' ocorr\u00eancias carregadas');\n                                \n                                \/\/ Atualizar \u00faltimo ID conhecido\n                                if (res.data.length > 0) {\n                                    var maxId = Math.max.apply(null, res.data.map(function(o) { return parseInt(o.id) || 0; }));\n                                    if (maxId > ultimoIdConhecido) {\n                                        ultimoIdConhecido = maxId;\n                                    }\n                                }\n                                \n                                atualizarMarcadores(res.data, []);\n                            } else {\n                                atualizarMarcadores([], []);\n                            }\n                        })\n                        .catch(function(err) {\n                            if (loading) loading.style.display = 'none';\n                            console.error('SOS87 Erro:', err);\n                        });\n                }\n                \n                \/\/ VERIFICA\u00c7\u00c3O DE NOVAS OCORR\u00caNCIAS A CADA 2 SEGUNDOS\n                function verificarNovasOcorrencias() {\n                    if (!verificacaoAtiva) return;\n                    \n                    var formData = new FormData();\n                    formData.append('action', 'sos87_verificar_novas');\n                    formData.append('nonce', nonce);\n                    formData.append('ultimo_id', ultimoIdConhecido);\n                    if (categoria) formData.append('categoria', categoria);\n                    \n                    fetch(ajaxUrl, { method: 'POST', body: formData })\n                        .then(function(r) { return r.json(); })\n                        .then(function(res) {\n                            if (res.success && res.data.novas > 0) {\n                                console.log('SOS87: ' + res.data.novas + ' novas ocorr\u00eancias detectadas!');\n                                \n                                var novasOcorrencias = res.data.ocorrencias;\n                                var novasIds = novasOcorrencias.map(function(o) { return o.id; });\n                                \n                                \/\/ Atualizar \u00faltimo ID\n                                var maxId = Math.max.apply(null, novasOcorrencias.map(function(o) { return parseInt(o.id) || 0; }));\n                                if (maxId > ultimoIdConhecido) {\n                                    ultimoIdConhecido = maxId;\n                                }\n                                \n                                \/\/ Mostrar alerta visual e sonoro\n                                mostrarAlertaNovas(res.data.novas);\n                                \n                                \/\/ Se o painel estiver vis\u00edvel e n\u00e3o estiver em modo pesquisa\n                                var termoBusca = $('#sos87-mapa-6adf6523a58e8-search').val().trim();\n                                if (painelAberto && termoBusca.length === 0) {\n                                    \/\/ Recarregar dados para mostrar as novas\n                                    carregarDados();\n                                    carregarEstatisticas();\n                                }\n                            }\n                        })\n                        .catch(function(err) {\n                            console.error('SOS87 Erro verifica\u00e7\u00e3o:', err);\n                        });\n                }\n                \n                function carregarEstatisticas() {\n                    var formData = new FormData();\n                    formData.append('action', 'sos87_get_estatisticas');\n                    formData.append('nonce', nonce);\n                    if (categoria) formData.append('categoria', categoria);\n                    if (estadoFiltros.dataInicio) formData.append('data_inicio', estadoFiltros.dataInicio);\n                    if (estadoFiltros.dataFim) formData.append('data_fim', estadoFiltros.dataFim);\n                    \n                    fetch(ajaxUrl, { method: 'POST', body: formData })\n                        .then(function(r) { return r.json(); })\n                        .then(function(res) {\n                            if (res.success) {\n                                $('#' + mapId + '-stat-total').text(res.data.total || 0);\n                                $('#' + mapId + '-stat-maxima').text(res.data.maxima || 0);\n                                $('#' + mapId + '-stat-alta').text(res.data.alta || 0);\n                                $('#' + mapId + '-stat-media').text(res.data.media || 0);\n                                $('#' + mapId + '-stat-baixa').text(res.data.baixa || 0);\n                            }\n                        });\n                }\n                \n                var datasIniciais = getPeriodoDatas('hoje');\n                estadoFiltros.dataInicio = datasIniciais.inicio;\n                estadoFiltros.dataFim = datasIniciais.fim;\n                \n                \/\/ Carregamento inicial\n                carregarDados();\n                carregarEstatisticas();\n                \n                \/\/ Iniciar verifica\u00e7\u00e3o a cada 2 segundos\n                setInterval(function() {\n                    verificarNovasOcorrencias();\n                }, 2000);\n                \n                \/\/ Atualiza\u00e7\u00e3o completa a cada 30 segundos\n                setInterval(function() {\n                    carregarDados();\n                    carregarEstatisticas();\n                }, 30000);\n                \n            });\n            \n        })(jQuery);\n        <\/script>\n        :<\/p>\n<div class=\"sos87-container\" id=\"sos87-container-sos87-mapa-6a676e44729a6\">\n<p>            <!-- Alerta de novas ocorr\u00eancias --><\/p>\n<div class=\"sos87-new-alert\" id=\"sos87-mapa-6a676e44729a6-new-alert\" onclick=\"window['_sos87_recarregar_sos87-mapa-6a676e44729a6']();\">\n                <i class=\"fas fa-bell\"><\/i><br \/>\n                <span id=\"sos87-mapa-6a676e44729a6-new-count\">0<\/span> nova(s) ocorr\u00eancia(s)<br \/>\n                <span class=\"alert-badge\" id=\"sos87-mapa-6a676e44729a6-alert-badge\">0<\/span>\n            <\/div>\n<p>            <!-- Bot\u00e3o toggle painel --><br \/>\n            <button class=\"sos87-toggle-panel-btn\" id=\"sos87-mapa-6a676e44729a6-toggle-panel\" title=\"Painel de Controle\"><br \/>\n                <i class=\"fas fa-sliders-h\"><\/i><br \/>\n            <\/button><\/p>\n<p>            <!-- Painel lateral deslizante --><\/p>\n<div class=\"sos87-side-panel\" id=\"sos87-mapa-6a676e44729a6-side-panel\">\n<div class=\"sos87-side-panel-inner\">\n<p>                    <!-- Estat\u00edsticas compactas --><\/p>\n<div class=\"sos87-stats-panel\">\n<div class=\"sos87-stat-card sos87-stat-total\">\n<div class=\"stat-value\" id=\"sos87-mapa-6a676e44729a6-stat-total\">0<\/div>\n<div class=\"stat-label\">Total<\/div>\n<\/p><\/div>\n<div class=\"sos87-stat-card sos87-stat-maxima\">\n<div class=\"stat-value\" id=\"sos87-mapa-6a676e44729a6-stat-maxima\">0<\/div>\n<div class=\"stat-label\">\ud83d\udd34 M\u00e1x<\/div>\n<\/p><\/div>\n<div class=\"sos87-stat-card sos87-stat-alta\">\n<div class=\"stat-value\" id=\"sos87-mapa-6a676e44729a6-stat-alta\">0<\/div>\n<div class=\"stat-label\">\ud83d\udfe0 Alta<\/div>\n<\/p><\/div>\n<div class=\"sos87-stat-card sos87-stat-media\">\n<div class=\"stat-value\" id=\"sos87-mapa-6a676e44729a6-stat-media\">0<\/div>\n<div class=\"stat-label\">\ud83d\udfe1 M\u00e9dia<\/div>\n<\/p><\/div>\n<div class=\"sos87-stat-card sos87-stat-baixa\">\n<div class=\"stat-value\" id=\"sos87-mapa-6a676e44729a6-stat-baixa\">0<\/div>\n<div class=\"stat-label\">\ud83d\udfe2 Baixa<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<p>                    <!-- Barra de pesquisa --><\/p>\n<div class=\"sos87-search-wrapper\">\n                        <i class=\"fas fa-search\"><\/i><br \/>\n                        <input type=\"text\" id=\"sos87-mapa-6a676e44729a6-search\" \n                               placeholder=\"\ud83d\udd0d Pesquisar (ID, protocolo, nome, tipo, endere\u00e7o, equipe)...\"><\/p>\n<div class=\"sos87-search-results\" id=\"sos87-mapa-6a676e44729a6-search-results\"><\/div>\n<\/p><\/div>\n<p>                    <!-- Filtros de data --><\/p>\n<div class=\"sos87-date-filters\" id=\"sos87-mapa-6a676e44729a6-date-filters\">\n                        <button class=\"sos87-date-btn active\" data-periodo=\"hoje\">Hoje<\/button><br \/>\n                        <button class=\"sos87-date-btn\" data-periodo=\"ontem\">Ontem<\/button><br \/>\n                        <button class=\"sos87-date-btn\" data-periodo=\"7dias\">7 dias<\/button><br \/>\n                        <button class=\"sos87-date-btn\" data-periodo=\"30dias\">30 dias<\/button><br \/>\n                        <button class=\"sos87-date-btn\" data-periodo=\"custom\">Personalizado<\/button>\n                    <\/div>\n<p>                    <!-- Datepicker custom --><\/p>\n<div class=\"sos87-date-custom\" id=\"sos87-mapa-6a676e44729a6-date-custom\">\n                        <input type=\"date\" id=\"sos87-mapa-6a676e44729a6-date-inicio\"><br \/>\n                        <span>at\u00e9<\/span><br \/>\n                        <input type=\"date\" id=\"sos87-mapa-6a676e44729a6-date-fim\"><br \/>\n                        <button id=\"sos87-mapa-6a676e44729a6-date-apply\">Aplicar<\/button>\n                    <\/div>\n<p>                    <!-- Filtros de prioridade --><\/p>\n<div class=\"sos87-priority-filters\" id=\"sos87-mapa-6a676e44729a6-priority-filters\">\n                        <button class=\"sos87-priority-btn active\" data-prioridade=\"\" style=\"border-color:#0073aa;color:#0073aa;\">Todas<\/button><br \/>\n                        <button class=\"sos87-priority-btn maxima\" data-prioridade=\"maxima\">M\u00e1xima<\/button><br \/>\n                        <button class=\"sos87-priority-btn alta\" data-prioridade=\"alta\">Alta<\/button><br \/>\n                        <button class=\"sos87-priority-btn media\" data-prioridade=\"media\">M\u00e9dia<\/button><br \/>\n                        <button class=\"sos87-priority-btn baixa\" data-prioridade=\"baixa\">Baixa<\/button>\n                    <\/div>\n<p>                    <!-- NOVA LISTA DE OCORR\u00caNCIAS EM FORMATO DE CARDS --><\/p>\n<div class=\"sos87-list-panel\">\n<div class=\"sos87-list-header\">\n<h4>\ud83d\udccb Ocorr\u00eancias <span id=\"sos87-mapa-6a676e44729a6-list-count\" style=\"opacity:0.7;\">(0)<\/span><\/h4>\n<\/p><\/div>\n<div class=\"sos87-list-body\" id=\"sos87-mapa-6a676e44729a6-list-body\">\n<div id=\"sos87-mapa-6a676e44729a6-cards-container\">\n<div class=\"sos87-list-empty\">\n                                    <i class=\"fas fa-inbox\"><\/i><br \/>\n                                    Nenhuma ocorr\u00eancia encontrada\n                                <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<p>            <!-- MAPA (\u00e1rea principal) --><\/p>\n<div style=\"position:relative;\">\n<div id=\"sos87-mapa-6a676e44729a6\"><\/div>\n<div id=\"sos87-mapa-6a676e44729a6-loading\" class=\"sos87-loading-overlay\" style=\"display:none;\">\n                    <i class=\"fas fa-spinner fa-spin\"><\/i> Carregando&#8230;\n                <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<p>        <!-- \u00c1udio para alerta sonoro --><br \/>\n        <audio id=\"sos87-mapa-6a676e44729a6-alert-sound\" src=\"https:\/\/7.sos.adm.br\/wp-content\/plugins\/sos-mapa\/sounds\/alert.mp3\" preload=\"auto\"><\/audio><\/p>\n<p>        <script>\n        (function($) {\n            var mapId = 'sos87-mapa-6a676e44729a6';\n            var ajaxUrl = 'https:\/\/7.sos.adm.br\/wp-admin\/admin-ajax.php';\n            var nonce = 'ec4976c052';\n            var categoria = '';\n            var zoomInicial = 12;\n            var siteUrl = 'https:\/\/7.sos.adm.br';<\/p>\n<p>            var estadoFiltros = {\n                periodo: 'hoje',\n                dataInicio: '',\n                dataFim: '',\n                prioridade: ''\n            };<\/p>\n<p>            var painelAberto = true;\n            var ultimoIdConhecido = 0;\n            var verificacaoAtiva = true;<\/p>\n<p>            var hoje = new Date().toISOString().split('T')[0];\n            $('#sos87-mapa-6a676e44729a6-date-inicio').val(hoje);\n            $('#sos87-mapa-6a676e44729a6-date-fim').val(hoje);<\/p>\n<p>            \/\/ Elemento de \u00e1udio para alerta\n            var alertSound = document.getElementById(mapId + '-alert-sound');<\/p>\n<p>            \/\/ Toggle painel lateral\n            $('#sos87-mapa-6a676e44729a6-toggle-panel').on('click', function() {\n                painelAberto = !painelAberto;\n                if (painelAberto) {\n                    $('#sos87-mapa-6a676e44729a6-side-panel').addClass('open');\n                    $(this).addClass('active');\n                } else {\n                    $('#sos87-mapa-6a676e44729a6-side-panel').removeClass('open');\n                    $(this).removeClass('active');\n                }\n                setTimeout(function() {\n                    if (window['_sos87_map_' + mapId]) {\n                        window['_sos87_map_' + mapId].invalidateSize();\n                    }\n                }, 350);\n            });<\/p>\n<p>            \/\/ Fun\u00e7\u00e3o para tocar alerta sonoro\n            function tocarAlertaSonoro() {\n                if (alertSound) {\n                    alertSound.currentTime = 0;\n                    alertSound.play().catch(function(e) {\n                        console.log('SOS87: N\u00e3o foi poss\u00edvel tocar o som (intera\u00e7\u00e3o do usu\u00e1rio necess\u00e1ria)');\n                    });\n                }\n            }<\/p>\n<p>            \/\/ Mostrar alerta visual de novas ocorr\u00eancias\n            function mostrarAlertaNovas(count) {\n                var $alert = $('#sos87-mapa-6a676e44729a6-new-alert');\n                $('#sos87-mapa-6a676e44729a6-new-count').text(count);\n                $('#sos87-mapa-6a676e44729a6-alert-badge').text(count);<\/p>\n<p>                if (count > 0) {\n                    $alert.addClass('show');\n                    tocarAlertaSonoro();<\/p>\n<p>                    \/\/ Esconder ap\u00f3s 10 segundos\n                    clearTimeout(window['_sos87_alertTimeout_' + mapId]);\n                    window['_sos87_alertTimeout_' + mapId] = setTimeout(function() {\n                        $alert.removeClass('show');\n                    }, 10000);\n                } else {\n                    $alert.removeClass('show');\n                }\n            }<\/p>\n<p>            \/\/ Fun\u00e7\u00e3o para recarregar dados (chamada ao clicar no alerta)\n            window['_sos87_recarregar_sos87-mapa-6a676e44729a6'] = function() {\n                $('#sos87-mapa-6a676e44729a6-new-alert').removeClass('show');\n                carregarDados();\n                carregarEstatisticas();\n            };<\/p>\n<p>            function waitForLeaflet(callback) {\n                if (typeof L !== 'undefined') {\n                    callback();\n                } else {\n                    setTimeout(function() { waitForLeaflet(callback); }, 200);\n                }\n            }<\/p>\n<p>            var avatarColors = ['#0073aa', '#dc3545', '#28a745', '#fd7e14', '#6f42c1', '#20c997', '#e83e8c', '#17a2b8'];<\/p>\n<p>            function getAvatarColor(nome) {\n                if (!nome) return avatarColors[0];\n                var hash = 0;\n                for (var i = 0; i < nome.length; i++) {\n                    hash = nome.charCodeAt(i) + ((hash << 5) - hash);\n                }\n                return avatarColors[Math.abs(hash) % avatarColors.length];\n            }\n            \n            function getIniciais(nome) {\n                if (!nome) return '?';\n                var partes = nome.trim().split(' ');\n                if (partes.length >= 2) {\n                    return (partes[0][0] + partes[partes.length - 1][0]).toUpperCase();\n                }\n                return partes[0].substring(0, 2).toUpperCase();\n            }<\/p>\n<p>            function getChatUrl(chatId) {\n                if (!chatId) return '';\n                return siteUrl + '\/?p=' + chatId;\n            }<\/p>\n<p>            waitForLeaflet(function() {\n                var mapEl = document.getElementById(mapId);\n                if (!mapEl) return;<\/p>\n<p>                var map = L.map(mapId, {\n                    zoomControl: true\n                }).setView([-15.7801, -47.9292], zoomInicial);<\/p>\n<p>                window['_sos87_map_' + mapId] = map;<\/p>\n<p>                L.tileLayer('https:\/\/{s}.tile.openstreetmap.org\/{z}\/{x}\/{y}.png', {\n                    attribution: '&copy; <a href=\"https:\/\/www.openstreetmap.org\/copyright\">OpenStreetMap<\/a>',\n                    maxZoom: 19\n                }).addTo(map);<\/p>\n<p>                var markers = {};\n                var todasOcorrencias = [];\n                var novasOcorrenciasIds = [];<\/p>\n<p>                function getColor(prioridade) {\n                    var p = (prioridade || '').toLowerCase();\n                    if (p.indexOf('max') >= 0 || p.indexOf('cr\u00edtic') >= 0 || p.indexOf('critic') >= 0) return '#dc3545';\n                    if (p.indexOf('alt') >= 0) return '#fd7e14';\n                    if (p.indexOf('m\u00e9d') >= 0 || p.indexOf('med') >= 0) return '#ffc107';\n                    if (p.indexOf('baix') >= 0) return '#28a745';\n                    return '#0073aa';\n                }<\/p>\n<p>                function getTamanho(prioridade) {\n                    var p = (prioridade || '').toLowerCase();\n                    if (p.indexOf('max') >= 0 || p.indexOf('cr\u00edtic') >= 0 || p.indexOf('critic') >= 0) return 55;\n                    if (p.indexOf('alt') >= 0) return 48;\n                    return 40;\n                }<\/p>\n<p>                function getStatusColor(status) {\n                    var s = (status || '').toLowerCase();\n                    if (s.indexOf('andamento') >= 0 || s.indexOf('em andamento') >= 0) return '#17a2b8';\n                    if (s.indexOf('conclu') >= 0) return '#28a745';\n                    if (s.indexOf('cancel') >= 0) return '#dc3545';\n                    return '#6c757d';\n                }<\/p>\n<p>                function getStatusTexto(status) {\n                    if (!status || status === 'nenhum') return 'Registrado';\n                    return status;\n                }<\/p>\n<p>                function getStatusClass(status) {\n                    var s = (status || '').toLowerCase();\n                    if (s.indexOf('andamento') >= 0 || s.indexOf('em andamento') >= 0) return 'status-andamento';\n                    if (s.indexOf('conclu') >= 0) return 'status-concluido';\n                    if (s.indexOf('cancel') >= 0) return 'status-cancelado';\n                    return 'status-padrao';\n                }<\/p>\n<p>                function getPrioridadeClass(prioridade) {\n                    var p = (prioridade || '').toLowerCase();\n                    if (p.indexOf('max') >= 0 || p.indexOf('cr\u00edtic') >= 0 || p.indexOf('critic') >= 0) return 'prioridade-maxima';\n                    if (p.indexOf('alt') >= 0) return 'prioridade-alta';\n                    if (p.indexOf('m\u00e9d') >= 0 || p.indexOf('med') >= 0) return 'prioridade-media';\n                    if (p.indexOf('baix') >= 0) return 'prioridade-baixa';\n                    return '';\n                }<\/p>\n<p>                function getDeviceIcon(dispositivo) {\n                    var d = (dispositivo || '').toLowerCase();\n                    if (d.indexOf('android') >= 0) return '<i class=\"fab fa-android\" style=\"color:#3ddc84;\"><\/i> Android';\n                    if (d.indexOf('iphone') >= 0 || d.indexOf('ios') >= 0) return '<i class=\"fab fa-apple\" style=\"color:#555;\"><\/i> iPhone';\n                    if (d.indexOf('windows') >= 0) return '<i class=\"fab fa-windows\" style=\"color:#0078d6;\"><\/i> Windows';\n                    if (d.indexOf('linux') >= 0) return '<i class=\"fab fa-linux\" style=\"color:#333;\"><\/i> Linux';\n                    return '<i class=\"fas fa-mobile-alt\" style=\"color:#666;\"><\/i> ' + (dispositivo || 'N\/D');\n                }<\/p>\n<p>                function formatDate(datahora) {\n                    if (!datahora) return 'N\/D';\n                    var dt = datahora.replace(\/-\/g, '\/');\n                    var d = new Date(dt);\n                    if (isNaN(d.getTime())) {\n                        var parts = datahora.split(' ');\n                        if (parts.length >= 2) {\n                            var datePart = parts[0];\n                            var timePart = parts[1];\n                            return datePart.split('-').reverse().join('\/') + ' ' + timePart.substring(0, 5);\n                        }\n                        return datahora;\n                    }\n                    var dd = String(d.getDate()).padStart(2, '0');\n                    var mm = String(d.getMonth() + 1).padStart(2, '0');\n                    var yy = String(d.getFullYear()).substring(2);\n                    var hh = String(d.getHours()).padStart(2, '0');\n                    var min = String(d.getMinutes()).padStart(2, '0');\n                    return dd + '\/' + mm + '\/' + yy + ' \u00e0s ' + hh + ':' + min;\n                }<\/p>\n<p>                function criarIcone(id, prioridade, isNew) {\n                    var cor = getColor(prioridade);\n                    var tamanho = getTamanho(prioridade);\n                    var idTexto = String(id);\n                    if (idTexto.length > 7) idTexto = idTexto.substring(0, 7);<\/p>\n<p>                    var markerClass = 'sos87-marker-id';\n                    if (isNew) markerClass += ' new-marker';<\/p>\n<p>                    return L.divIcon({\n                        html: '<\/p>\n<div class=\"' + markerClass + '\" style=\"width:' + tamanho + 'px;height:' + tamanho + 'px;background:' + cor + ';font-size:' + (tamanho > 48 ? '13px' : '11px') + ';\">#' + idTexto + '<\/div>\n<p>',\n                        className: '',\n                        iconSize: [tamanho, tamanho],\n                        iconAnchor: [tamanho\/2, tamanho],\n                        popupAnchor: [0, -tamanho]\n                    });\n                }<\/p>\n<p>                function criarPopupHtml(occ) {\n                    var statusColor = getStatusColor(occ.status);\n                    var statusTexto = getStatusTexto(occ.status);\n                    var protocolo = occ.protocolo || 'N\/A';\n                    var ocorrencia = occ.ocorrencia || 'N\u00e3o especificado';\n                    var equipe = occ.equipe || 'N\u00e3o definida';\n                    var datahora = occ.datahora || '';\n                    var prioridade = occ.prioridade || 'N\u00e3o definida';\n                    var nome = occ.nome || 'N\u00e3o informado';\n                    var endereco = occ.endereco || 'N\u00e3o informado';\n                    var dispositivo = occ.dispositivo || '';\n                    var chatUrl = getChatUrl(occ.chat);\n                    var mapsUrl = 'https:\/\/www.google.com\/maps?q=' + encodeURIComponent(occ.latitude + ',' + occ.longitude);<\/p>\n<p>                    var html = '<\/p>\n<div class=\"sos87-popup-content\">';\n                    html += '<\/p>\n<div class=\"sos87-popup-header\">';\n                    html += '<\/p>\n<h4>\ud83d\udea8 Ocorr\u00eancia #' + occ.id + '<\/h4>\n<p>';\n                    html += '<small>' + formatDate(datahora) + '<\/small>';\n                    html += '<\/div>\n<p>';\n                    html += '<\/p>\n<div class=\"sos87-popup-body\">';\n                    html += '<\/p>\n<p><strong>\ud83d\udc64 Nome:<\/strong> ' + nome + '<\/p>\n<p>';\n                    html += '<\/p>\n<p><strong>\ud83d\udccb Protocolo:<\/strong> ' + protocolo + '<\/p>\n<p>';\n                    html += '<\/p>\n<p><strong>\ud83d\udcdd Tipo:<\/strong> ' + ocorrencia + '<\/p>\n<p>';\n                    html += '<\/p>\n<p><strong>\ud83d\udccd Endere\u00e7o:<\/strong> ' + endereco + '<\/p>\n<p>';\n                    html += '<\/p>\n<p><strong>\ud83d\udcde Equipe:<\/strong> ' + equipe + '<\/p>\n<p>';\n                    if (dispositivo) {\n                        html += '<\/p>\n<p><strong>\ud83d\udcf1 Dispositivo:<\/strong> ' + dispositivo + '<\/p>\n<p>';\n                    }\n                    html += '<\/p>\n<p>';\n                    html += '<span class=\"sos87-popup-badge\" style=\"background:' + statusColor + ';\">' + statusTexto + '<\/span> ';\n                    html += '<span class=\"sos87-popup-badge\" style=\"background:' + getColor(prioridade) + ';\">' + prioridade + '<\/span>';\n                    html += '<\/p>\n<p>';\n                    html += '<\/p>\n<div class=\"sos87-popup-buttons\">';\n                    if (chatUrl) {\n                        html += '<a href=\"' + chatUrl + '\" target=\"_blank\" class=\"sos87-popup-btn\" style=\"background:#17a2b8;\"><i class=\"fas fa-comment\"><\/i> Chat<\/a>';\n                    }\n                    html += '<a href=\"' + mapsUrl + '\" target=\"_blank\" class=\"sos87-popup-btn\" style=\"background:#28a745;\"><i class=\"fas fa-route\"><\/i> Rota<\/a>';\n                    html += '<a href=\"' + mapsUrl + '\" target=\"_blank\" class=\"sos87-popup-btn\" style=\"background:#0073aa;\"><i class=\"fas fa-map-marker-alt\"><\/i> Maps<\/a>';\n                    html += '<\/div>\n<p>';\n                    html += '<\/p><\/div>\n<p>';\n                    html += '<\/p><\/div>\n<p>';<\/p>\n<p>                    return html;\n                }<\/p>\n<p>                function atualizarMarcadores(ocorrencias, novasIds) {\n                    for (var key in markers) {\n                        if (markers[key]) map.removeLayer(markers[key]);\n                    }\n                    markers = {};\n                    todasOcorrencias = ocorrencias || [];\n                    novasOcorrenciasIds = novasIds || [];<\/p>\n<p>                    atualizarListaCards(todasOcorrencias, novasOcorrenciasIds);<\/p>\n<p>                    if (!ocorrencias || ocorrencias.length === 0) return;<\/p>\n<p>                    var bounds = [];<\/p>\n<p>                    ocorrencias.forEach(function(occ) {\n                        if (!occ.latitude || !occ.longitude) return;<\/p>\n<p>                        var isNew = novasOcorrenciasIds.indexOf(occ.id) !== -1;\n                        var icon = criarIcone(occ.id, occ.prioridade, isNew);\n                        var marker = L.marker([occ.latitude, occ.longitude], { icon: icon }).addTo(map);\n                        marker.bindPopup(criarPopupHtml(occ), { maxWidth: 400, minWidth: 280 });<\/p>\n<p>                        markers['occ-' + occ.id] = marker;\n                        bounds.push([occ.latitude, occ.longitude]);\n                    });<\/p>\n<p>                    if (bounds.length > 0) {\n                        try {\n                            map.fitBounds(bounds, { padding: [50, 50], maxZoom: 15 });\n                        } catch(e) {}\n                    }<\/p>\n<p>                    setTimeout(function() { map.invalidateSize(); }, 300);\n                }<\/p>\n<p>                \/\/ ==================== NOVA FUN\u00c7\u00c3O: ATUALIZAR LISTA EM FORMATO DE CARDS ====================\n                function atualizarListaCards(ocorrencias, novasIds) {\n                    var $container = $('#sos87-mapa-6a676e44729a6-cards-container');\n                    var $count = $('#sos87-mapa-6a676e44729a6-list-count');<\/p>\n<p>                    $count.text('(' + ocorrencias.length + ')');<\/p>\n<p>                    if (!ocorrencias || ocorrencias.length === 0) {\n                        $container.html('<\/p>\n<div class=\"sos87-list-empty\"><i class=\"fas fa-inbox\"><\/i>Nenhuma ocorr\u00eancia encontrada<\/div>\n<p>');\n                        return;\n                    }<\/p>\n<p>                    var html = '';\n                    ocorrencias.forEach(function(occ) {\n                        var statusColor = getStatusColor(occ.status);\n                        var statusTexto = getStatusTexto(occ.status);\n                        var statusClass = getStatusClass(occ.status);\n                        var prioridadeClass = getPrioridadeClass(occ.prioridade);\n                        var prioridade = occ.prioridade || 'N\u00e3o definida';\n                        var avatarCor = getAvatarColor(occ.nome);\n                        var iniciais = getIniciais(occ.nome);\n                        var nomeExibicao = occ.nome || 'N\u00e3o informado';\n                        var chatUrl = getChatUrl(occ.chat);\n                        var isNew = novasIds.indexOf(occ.id) !== -1;\n                        var protocolo = occ.protocolo || 'N\/A';\n                        var ocorrencia = occ.ocorrencia || 'N\u00e3o especificado';\n                        var equipe = occ.equipe || 'N\u00e3o definida';\n                        var endereco = occ.endereco || 'N\u00e3o informado';\n                        var dispositivo = occ.dispositivo || '';<\/p>\n<p>                        var cardClass = 'sos87-occ-card';\n                        if (isNew) cardClass += ' new-row';\n                        if (prioridadeClass) cardClass += ' ' + prioridadeClass;<\/p>\n<p>                        html += '<\/p>\n<div class=\"' + cardClass + '\" data-occ-id=\"' + occ.id + '\" onclick=\"window['_sos87_clickItem_' + mapId + '']('' + occ.id + '');\">';<\/p>\n<p>                        \/\/ Cabe\u00e7alho do card: ID e Data\n                        html += '<\/p>\n<div class=\"sos87-occ-card-header\">';\n                        html += '<span class=\"sos87-occ-card-id\">#' + occ.id + '<\/span>';\n                        html += '<span class=\"sos87-occ-card-date\"><i class=\"far fa-clock\"><\/i> ' + formatDate(occ.datahora) + '<\/span>';\n                        html += '<\/div>\n<p>';<\/p>\n<p>                        \/\/ Corpo do card: informa\u00e7\u00f5es em grid 2 colunas\n                        html += '<\/p>\n<div class=\"sos87-occ-card-body\">';<\/p>\n<p>                        \/\/ Usu\u00e1rio\n                        html += '<\/p>\n<div class=\"sos87-occ-card-field\">';\n                        html += '<span class=\"sos87-occ-card-field-label\">\ud83d\udc64 Usu\u00e1rio<\/span>';\n                        html += '<span class=\"sos87-occ-card-field-value user-name\">';\n                        html += '<span class=\"sos87-occ-card-avatar\" style=\"background:' + avatarCor + ';\">' + iniciais + '<\/span>';\n                        html += nomeExibicao;\n                        html += '<\/span>';\n                        html += '<\/div>\n<p>';<\/p>\n<p>                        \/\/ Ocorr\u00eancia (Tipo)\n                        html += '<\/p>\n<div class=\"sos87-occ-card-field\">';\n                        html += '<span class=\"sos87-occ-card-field-label\">\ud83d\udcdd Ocorr\u00eancia<\/span>';\n                        html += '<span class=\"sos87-occ-card-field-value\">' + ocorrencia + '<\/span>';\n                        html += '<\/div>\n<p>';<\/p>\n<p>                        \/\/ Protocolo\n                        html += '<\/p>\n<div class=\"sos87-occ-card-field\">';\n                        html += '<span class=\"sos87-occ-card-field-label\">\ud83d\udccb Protocolo<\/span>';\n                        html += '<span class=\"sos87-occ-card-field-value\">' + protocolo + '<\/span>';\n                        html += '<\/div>\n<p>';<\/p>\n<p>                        \/\/ Equipe\n                        html += '<\/p>\n<div class=\"sos87-occ-card-field\">';\n                        html += '<span class=\"sos87-occ-card-field-label\">\ud83d\udcde Equipe<\/span>';\n                        html += '<span class=\"sos87-occ-card-field-value\">' + equipe + '<\/span>';\n                        html += '<\/div>\n<p>';<\/p>\n<p>                        \/\/ Endere\u00e7o (largura completa)\n                        if (endereco && endereco !== 'N\u00e3o informado') {\n                            html += '<\/p>\n<div class=\"sos87-occ-card-field full-width\">';\n                            html += '<span class=\"sos87-occ-card-field-label\">\ud83d\udccd Endere\u00e7o<\/span>';\n                            html += '<span class=\"sos87-occ-card-field-value\">' + endereco + '<\/span>';\n                            html += '<\/div>\n<p>';\n                        }<\/p>\n<p>                        html += '<\/p><\/div>\n<p>';<\/p>\n<p>                        \/\/ Rodap\u00e9 do card: badges e a\u00e7\u00f5es\n                        html += '<\/p>\n<div class=\"sos87-occ-card-footer\">';\n                        html += '<\/p>\n<div class=\"sos87-occ-card-badges\">';\n                        html += '<span class=\"sos87-occ-card-badge ' + statusClass + '\">' + statusTexto + '<\/span>';\n                        html += '<span class=\"sos87-occ-card-badge ' + prioridadeClass + '\">' + prioridade + '<\/span>';\n                        html += '<\/div>\n<p>';<\/p>\n<p>                        \/\/ Dispositivo e bot\u00e3o chat\n                        html += '<\/p>\n<div style=\"display:flex;align-items:center;gap:8px;\">';\n                        if (dispositivo) {\n                            html += '<span class=\"sos87-occ-card-device\">' + getDeviceIcon(dispositivo) + '<\/span>';\n                        }\n                        if (chatUrl) {\n                            html += '<a href=\"' + chatUrl + '\" target=\"_blank\" class=\"sos87-occ-card-chat-btn\" onclick=\"event.stopPropagation();\"><i class=\"fas fa-comment\"><\/i> Chat<\/a>';\n                        }\n                        html += '<\/div>\n<p>';<\/p>\n<p>                        html += '<\/p><\/div>\n<p>';<\/p>\n<p>                        html += '<\/p><\/div>\n<p>';\n                    });<\/p>\n<p>                    $container.html(html);\n                }<\/p>\n<p>                window['_sos87_clickItem_' + mapId] = function(id) {\n                    \/\/ Remover highlight de todos os cards\n                    $('.sos87-occ-card').removeClass('highlight-row');<\/p>\n<p>                    \/\/ Destacar o card clicado\n                    var card = $('.sos87-occ-card[data-occ-id=\"' + id + '\"]');\n                    card.addClass('highlight-row');<\/p>\n<p>                    \/\/ Scroll at\u00e9 o card\n                    if (card.length) {\n                        var container = $('#sos87-mapa-6a676e44729a6-list-body');\n                        container.animate({\n                            scrollTop: card.offset().top - container.offset().top + container.scrollTop() - 20\n                        }, 300);\n                    }<\/p>\n<p>                    \/\/ Centralizar no mapa\n                    var marker = markers['occ-' + id];\n                    if (marker) {\n                        var latlng = marker.getLatLng();\n                        map.setView(latlng, 16);\n                        marker.openPopup();<\/p>\n<p>                        var iconEl = marker.getElement();\n                        if (iconEl) {\n                            var innerDiv = iconEl.querySelector('.sos87-marker-id');\n                            if (innerDiv) {\n                                innerDiv.classList.add('highlight');\n                                setTimeout(function() {\n                                    innerDiv.classList.remove('highlight');\n                                }, 3000);\n                            }\n                        }\n                    }\n                };<\/p>\n<p>                \/\/ PESQUISA\n                function pesquisarECentralizar(termo) {\n                    if (!termo || termo.length < 1) {\n                        carregarDados();\n                        $('#sos87-mapa-6a676e44729a6-search-results').removeClass('active');\n                        return;\n                    }\n                    \n                    var loading = document.getElementById(mapId + '-loading');\n                    if (loading) loading.style.display = 'block';\n                    \n                    var formData = new FormData();\n                    formData.append('action', 'sos87_pesquisar_ocorrencias');\n                    formData.append('nonce', nonce);\n                    formData.append('termo', termo);\n                    if (categoria) formData.append('categoria', categoria);\n                    \n                    fetch(ajaxUrl, { method: 'POST', body: formData })\n                        .then(function(r) { return r.json(); })\n                        .then(function(res) {\n                            if (loading) loading.style.display = 'none';\n                            \n                            if (res.success) {\n                                var resultados = res.data || [];\n                                console.log('SOS87 Pesquisa: \"' + termo + '\" - ' + resultados.length + ' resultados');\n                                mostrarResultadosBusca(resultados);\n                                atualizarMarcadores(resultados, []);\n                                \n                                if (resultados.length > 0) {\n                                    var primeiroComCoords = resultados.find(function(o) { return o.latitude && o.longitude; });\n                                    if (primeiroComCoords) {\n                                        map.setView([primeiroComCoords.latitude, primeiroComCoords.longitude], 16);\n                                        setTimeout(function() {\n                                            window['_sos87_clickItem_' + mapId](primeiroComCoords.id);\n                                        }, 500);\n                                    }\n                                }\n                            }\n                        })\n                        .catch(function(err) {\n                            if (loading) loading.style.display = 'none';\n                            console.error('SOS87 Erro pesquisa:', err);\n                        });\n                }<\/p>\n<p>                function mostrarResultadosBusca(resultados) {\n                    var $results = $('#sos87-mapa-6a676e44729a6-search-results');<\/p>\n<p>                    if (!resultados || resultados.length === 0) {\n                        $results.html('<\/p>\n<div class=\"sos87-search-result-item\" style=\"color:#999;\">Nenhum resultado encontrado<\/div>\n<p>');\n                        $results.addClass('active');\n                        return;\n                    }<\/p>\n<p>                    var html = '';\n                    resultados.slice(0, 8).forEach(function(occ) {\n                        var info = '#' + occ.id + ' | Protocolo: ' + (occ.protocolo || 'N\/A') + ' | ' + (occ.nome || '');\n                        html += '<\/p>\n<div class=\"sos87-search-result-item\" onclick=\"window['_sos87_clickItem_' + mapId + '']('' + occ.id + ''); $('#sos87-mapa-6a676e44729a6-search-results').removeClass('active');\">';\n                        html += '<span class=\"result-id\">#' + occ.id + '<\/span> ';\n                        html += '<span class=\"result-info\">' + info + '<\/span>';\n                        html += '<\/div>\n<p>';\n                    });<\/p>\n<p>                    if (resultados.length > 8) {\n                        html += '<\/p>\n<div class=\"sos87-search-result-item\" style=\"color:#999;text-align:center;\">+ ' + (resultados.length - 8) + ' mais resultados...<\/div>\n<p>';\n                    }<\/p>\n<p>                    $results.html(html);\n                    $results.addClass('active');\n                }<\/p>\n<p>                var searchTimeout;\n                $('#sos87-mapa-6a676e44729a6-search').on('input', function() {\n                    var termo = $(this).val().trim();\n                    clearTimeout(searchTimeout);<\/p>\n<p>                    if (termo.length === 0) {\n                        $('#sos87-mapa-6a676e44729a6-search-results').removeClass('active');\n                        carregarDados();\n                        return;\n                    }<\/p>\n<p>                    searchTimeout = setTimeout(function() {\n                        pesquisarECentralizar(termo);\n                    }, 300);\n                });<\/p>\n<p>                $(document).on('click', function(e) {\n                    if (!$(e.target).closest('#sos87-mapa-6a676e44729a6-search-wrapper').length) {\n                        $('#sos87-mapa-6a676e44729a6-search-results').removeClass('active');\n                    }\n                });<\/p>\n<p>                $('#sos87-mapa-6a676e44729a6-search').on('keydown', function(e) {\n                    if (e.key === 'Enter') {\n                        e.preventDefault();\n                        var termo = $(this).val().trim();\n                        if (termo.length > 0) {\n                            pesquisarECentralizar(termo);\n                        }\n                    }\n                });<\/p>\n<p>                function getPeriodoDatas(periodo) {\n                    var hoje = new Date();\n                    var inicio, fim;\n                    switch(periodo) {\n                        case 'hoje':\n                            inicio = new Date(hoje.getFullYear(), hoje.getMonth(), hoje.getDate());\n                            fim = new Date(hoje.getFullYear(), hoje.getMonth(), hoje.getDate(), 23, 59, 59);\n                            break;\n                        case 'ontem':\n                            var ontem = new Date(hoje);\n                            ontem.setDate(ontem.getDate() - 1);\n                            inicio = new Date(ontem.getFullYear(), ontem.getMonth(), ontem.getDate());\n                            fim = new Date(ontem.getFullYear(), ontem.getMonth(), ontem.getDate(), 23, 59, 59);\n                            break;\n                        case '7dias':\n                            fim = new Date(hoje.getFullYear(), hoje.getMonth(), hoje.getDate(), 23, 59, 59);\n                            inicio = new Date(fim);\n                            inicio.setDate(inicio.getDate() - 6);\n                            inicio.setHours(0, 0, 0, 0);\n                            break;\n                        case '30dias':\n                            fim = new Date(hoje.getFullYear(), hoje.getMonth(), hoje.getDate(), 23, 59, 59);\n                            inicio = new Date(fim);\n                            inicio.setDate(inicio.getDate() - 29);\n                            inicio.setHours(0, 0, 0, 0);\n                            break;\n                        default:\n                            inicio = new Date(hoje.getFullYear(), hoje.getMonth(), hoje.getDate());\n                            fim = new Date(hoje.getFullYear(), hoje.getMonth(), hoje.getDate(), 23, 59, 59);\n                    }\n                    return {\n                        inicio: inicio.toISOString().split('T')[0],\n                        fim: fim.toISOString().split('T')[0]\n                    };\n                }<\/p>\n<p>                $('#sos87-mapa-6a676e44729a6-date-filters .sos87-date-btn').on('click', function() {\n                    var periodo = $(this).data('periodo');\n                    $('#sos87-mapa-6a676e44729a6-date-filters .sos87-date-btn').removeClass('active');\n                    $(this).addClass('active');<\/p>\n<p>                    if (periodo === 'custom') {\n                        $('#sos87-mapa-6a676e44729a6-date-custom').addClass('active');\n                        return;\n                    } else {\n                        $('#sos87-mapa-6a676e44729a6-date-custom').removeClass('active');\n                    }<\/p>\n<p>                    var datas = getPeriodoDatas(periodo);\n                    estadoFiltros.periodo = periodo;\n                    estadoFiltros.dataInicio = datas.inicio;\n                    estadoFiltros.dataFim = datas.fim;<\/p>\n<p>                    carregarDados();\n                    carregarEstatisticas();\n                });<\/p>\n<p>                $('#sos87-mapa-6a676e44729a6-date-apply').on('click', function() {\n                    var inicio = $('#sos87-mapa-6a676e44729a6-date-inicio').val();\n                    var fim = $('#sos87-mapa-6a676e44729a6-date-fim').val();\n                    if (inicio && fim) {\n                        estadoFiltros.dataInicio = inicio;\n                        estadoFiltros.dataFim = fim;\n                        estadoFiltros.periodo = 'custom';\n                        $('#sos87-mapa-6a676e44729a6-date-filters .sos87-date-btn').removeClass('active');\n                        carregarDados();\n                        carregarEstatisticas();\n                    }\n                });<\/p>\n<p>                $('#sos87-mapa-6a676e44729a6-priority-filters .sos87-priority-btn').on('click', function() {\n                    $('#sos87-mapa-6a676e44729a6-priority-filters .sos87-priority-btn').removeClass('active');\n                    $(this).addClass('active');\n                    estadoFiltros.prioridade = $(this).data('prioridade') || '';\n                    carregarDados();\n                });<\/p>\n<p>                var legend = L.control({ position: 'bottomright' });\n                legend.onAdd = function() {\n                    var div = L.DomUtil.create('div', 'sos87-legend');\n                    div.innerHTML = '<\/p>\n<h4>\ud83d\udcca Prioridade<\/h4>\n<p>' +\n                        '<\/p>\n<div><span style=\"display:inline-block;width:10px;height:10px;border-radius:50%;background:#28a745;margin-right:5px;\"><\/span> Baixa<\/div>\n<p>' +\n                        '<\/p>\n<div><span style=\"display:inline-block;width:10px;height:10px;border-radius:50%;background:#ffc107;margin-right:5px;\"><\/span> M\u00e9dia<\/div>\n<p>' +\n                        '<\/p>\n<div><span style=\"display:inline-block;width:10px;height:10px;border-radius:50%;background:#fd7e14;margin-right:5px;\"><\/span> Alta<\/div>\n<p>' +\n                        '<\/p>\n<div><span style=\"display:inline-block;width:10px;height:10px;border-radius:50%;background:#dc3545;margin-right:5px;\"><\/span> M\u00e1xima<\/div>\n<p>';\n                    return div;\n                };\n                legend.addTo(map);<\/p>\n<p>                function carregarDados() {\n                    var loading = document.getElementById(mapId + '-loading');\n                    if (loading) loading.style.display = 'block';<\/p>\n<p>                    var formData = new FormData();\n                    formData.append('action', 'sos87_get_ocorrencias');\n                    formData.append('nonce', nonce);\n                    if (categoria) formData.append('categoria', categoria);\n                    if (estadoFiltros.dataInicio) formData.append('data_inicio', estadoFiltros.dataInicio);\n                    if (estadoFiltros.dataFim) formData.append('data_fim', estadoFiltros.dataFim);\n                    if (estadoFiltros.prioridade) formData.append('prioridade', estadoFiltros.prioridade);<\/p>\n<p>                    fetch(ajaxUrl, { method: 'POST', body: formData })\n                        .then(function(r) { return r.json(); })\n                        .then(function(res) {\n                            if (loading) loading.style.display = 'none';\n                            if (res.success && res.data) {\n                                console.log('SOS87: ' + res.data.length + ' ocorr\u00eancias carregadas');<\/p>\n<p>                                \/\/ Atualizar \u00faltimo ID conhecido\n                                if (res.data.length > 0) {\n                                    var maxId = Math.max.apply(null, res.data.map(function(o) { return parseInt(o.id) || 0; }));\n                                    if (maxId > ultimoIdConhecido) {\n                                        ultimoIdConhecido = maxId;\n                                    }\n                                }<\/p>\n<p>                                atualizarMarcadores(res.data, []);\n                            } else {\n                                atualizarMarcadores([], []);\n                            }\n                        })\n                        .catch(function(err) {\n                            if (loading) loading.style.display = 'none';\n                            console.error('SOS87 Erro:', err);\n                        });\n                }<\/p>\n<p>                \/\/ VERIFICA\u00c7\u00c3O DE NOVAS OCORR\u00caNCIAS A CADA 2 SEGUNDOS\n                function verificarNovasOcorrencias() {\n                    if (!verificacaoAtiva) return;<\/p>\n<p>                    var formData = new FormData();\n                    formData.append('action', 'sos87_verificar_novas');\n                    formData.append('nonce', nonce);\n                    formData.append('ultimo_id', ultimoIdConhecido);\n                    if (categoria) formData.append('categoria', categoria);<\/p>\n<p>                    fetch(ajaxUrl, { method: 'POST', body: formData })\n                        .then(function(r) { return r.json(); })\n                        .then(function(res) {\n                            if (res.success && res.data.novas > 0) {\n                                console.log('SOS87: ' + res.data.novas + ' novas ocorr\u00eancias detectadas!');<\/p>\n<p>                                var novasOcorrencias = res.data.ocorrencias;\n                                var novasIds = novasOcorrencias.map(function(o) { return o.id; });<\/p>\n<p>                                \/\/ Atualizar \u00faltimo ID\n                                var maxId = Math.max.apply(null, novasOcorrencias.map(function(o) { return parseInt(o.id) || 0; }));\n                                if (maxId > ultimoIdConhecido) {\n                                    ultimoIdConhecido = maxId;\n                                }<\/p>\n<p>                                \/\/ Mostrar alerta visual e sonoro\n                                mostrarAlertaNovas(res.data.novas);<\/p>\n<p>                                \/\/ Se o painel estiver vis\u00edvel e n\u00e3o estiver em modo pesquisa\n                                var termoBusca = $('#sos87-mapa-6a676e44729a6-search').val().trim();\n                                if (painelAberto && termoBusca.length === 0) {\n                                    \/\/ Recarregar dados para mostrar as novas\n                                    carregarDados();\n                                    carregarEstatisticas();\n                                }\n                            }\n                        })\n                        .catch(function(err) {\n                            console.error('SOS87 Erro verifica\u00e7\u00e3o:', err);\n                        });\n                }<\/p>\n<p>                function carregarEstatisticas() {\n                    var formData = new FormData();\n                    formData.append('action', 'sos87_get_estatisticas');\n                    formData.append('nonce', nonce);\n                    if (categoria) formData.append('categoria', categoria);\n                    if (estadoFiltros.dataInicio) formData.append('data_inicio', estadoFiltros.dataInicio);\n                    if (estadoFiltros.dataFim) formData.append('data_fim', estadoFiltros.dataFim);<\/p>\n<p>                    fetch(ajaxUrl, { method: 'POST', body: formData })\n                        .then(function(r) { return r.json(); })\n                        .then(function(res) {\n                            if (res.success) {\n                                $('#' + mapId + '-stat-total').text(res.data.total || 0);\n                                $('#' + mapId + '-stat-maxima').text(res.data.maxima || 0);\n                                $('#' + mapId + '-stat-alta').text(res.data.alta || 0);\n                                $('#' + mapId + '-stat-media').text(res.data.media || 0);\n                                $('#' + mapId + '-stat-baixa').text(res.data.baixa || 0);\n                            }\n                        });\n                }<\/p>\n<p>                var datasIniciais = getPeriodoDatas('hoje');\n                estadoFiltros.dataInicio = datasIniciais.inicio;\n                estadoFiltros.dataFim = datasIniciais.fim;<\/p>\n<p>                \/\/ Carregamento inicial\n                carregarDados();\n                carregarEstatisticas();<\/p>\n<p>                \/\/ Iniciar verifica\u00e7\u00e3o a cada 2 segundos\n                setInterval(function() {\n                    verificarNovasOcorrencias();\n                }, 2000);<\/p>\n<p>                \/\/ Atualiza\u00e7\u00e3o completa a cada 30 segundos\n                setInterval(function() {\n                    carregarDados();\n                    carregarEstatisticas();\n                }, 30000);<\/p>\n<p>            });<\/p>\n<p>        })(jQuery);\n        <\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Este \u00e9 o resultado do shortcode : 0 nova(s) ocorr\u00eancia(s) 0 0 Total 0 \ud83d\udd34 M\u00e1x 0 \ud83d\udfe0 Alta 0 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-634","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/7.sos.adm.br\/index.php?rest_route=\/wp\/v2\/pages\/634","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/7.sos.adm.br\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/7.sos.adm.br\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/7.sos.adm.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/7.sos.adm.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=634"}],"version-history":[{"count":0,"href":"https:\/\/7.sos.adm.br\/index.php?rest_route=\/wp\/v2\/pages\/634\/revisions"}],"wp:attachment":[{"href":"https:\/\/7.sos.adm.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=634"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}