{"id":798,"date":"2026-08-08T05:23:41","date_gmt":"2026-08-08T05:23:41","guid":{"rendered":"https:\/\/7.sos.adm.br\/?p=798"},"modified":"2026-08-08T05:23:41","modified_gmt":"2026-08-08T05:23:41","slug":"protocolo-312939-visitante-bombeiros","status":"publish","type":"post","link":"https:\/\/7.sos.adm.br\/?p=798","title":{"rendered":"Protocolo 312939 &#8211; Visitante &#8211; Bombeiros"},"content":{"rendered":"<div style=\"font-family:Arial\">\n<h4 style=\"color: #00c257;text-align: center\">\n<p>  Ocorr\u00eancia Registrada \u2705 S.O.S &#8211; 8.7<br \/>\n<\/h4>\n<div style=\"padding:12px 12px\">\n<\/p>\n<p style=\"margin:0px 0\"><strong>\ud83d\udccb Dados do Solicitante: <\/strong><\/p>\n<div style=\"display:flex;align-items:center;gap:8px;margin:12px 0\">\n    <a href=\"#\"><br \/>\n        <img decoding=\"async\" src=\"https:\/\/secure.gravatar.com\/avatar\/?s=120&amp;d=mm&amp;r=g\" style=\"width:50px;height:50px;border-radius:50%\"><br \/>\n    <\/a><\/p>\n<div style=\"line-height:1.2\">\n        <a href=\"#\" style=\"font-weight:bold;color:#0073aa;text-decoration:none\"><br \/>\n            Visitante<br \/>\n        <\/a><br \/>\n        <span style=\"display:block;font-size:12px;color:#666\">(Visitante)<\/span>\n    <\/div>\n<\/div>\n<div style=\"padding:12px 15px\">\n<p style=\"margin:0 0 6px 0\"><strong>\ud83d\udcde Equipe:<\/strong> \ud83d\ude92 Bombeiros<\/p>\n<p style=\"margin:6px 0\"><strong>\u2705 Ocorr\u00eancia:<\/strong> Bombeiros<\/p>\n<p style=\"margin:6px 0\"><strong>\ud83d\udccb Protocolo:<\/strong> 312939<\/p>\n<p style=\"margin:6px 0\"><strong>\ud83d\udcc5 Data:<\/strong> 08\/08\/2026 02:23<\/p>\n<p style=\"margin:6px 0\"><strong>\ud83d\udce1 GPS do Dispositivo:<\/strong> \u274c DESKTOP<\/p>\n<p><a href=\"https:\/\/www.google.com\/maps?q=-9.4148,-40.5145\" target=\"_blank\" style=\"color:#0073aa;font-weight:bold\">Abrir Localiza\u00e7\u00e3o no Google Maps<\/a><\/p>\n<div style=\"margin:12px 0;text-align:left\">\n    <a href=\"https:\/\/www.google.com\/maps\/dir\/?api=1&amp;destination=-9.4148,-40.5145\" target=\"_blank\" style=\"display:inline-flex;align-items:center;justify-content:center;background:#27ae60;color:#fff;padding:8px 16px;font-size:14px;font-weight:bold;border-radius:6px;text-decoration:none;gap:6px\"><br \/>\n       \ud83d\uddfa\ufe0f Criar Rota at\u00e9 a Ocorr\u00eancia \ud83d\udccd<br \/>\n    <\/a><\/p>\n<hr>\n<div style=\"display:flex;gap:10px;justify-content:center\">\n[status_da_ocorrencia]\n<\/div>\n<p>[sos_interacao]<br \/>\n\n        <div class=\"sie-chat-wrapper\">\n            <button class=\"sie-chat-toggle-btn\">\n                <span>\ud83d\udcac<\/span> CHAT DA EQUIPE <span class=\"sie-online-dot\"><\/span> <span class=\"sie-online-count-label\">0<\/span>\n            <\/button>\n            <div class=\"sie-chat-container\">\n                <div class=\"sie-chat-header\">\n                    <div class=\"sie-chat-title-text\">\ud83d\udd34 Protocolo 312939 &#8211; Visitante &#8211; Bombeiros<\/div>\n                    <div class=\"sie-header-buttons\">\n                        <span class=\"sie-online-text\"><span class=\"sie-online-count\">0<\/span> online<\/span>\n                        <button class=\"sie-header-btn sie-btn-fullscreen\" title=\"Tela Cheia\">\u26f6<\/button>\n                        <button class=\"sie-header-btn sie-btn-close\" title=\"Fechar\">\u2715<\/button>\n                    <\/div>\n                <\/div>\n                <div class=\"sie-chat-tabs-wrapper\">\n                    <div class=\"sie-chat-tabs\">\n                        <button class=\"sie-tab-btn sie-active\" data-tab=\"chat\">\ud83d\udcac Chat<\/button>\n                        <button class=\"sie-tab-btn\" data-tab=\"online\">\ud83d\udfe2 Online <span class=\"sie-tab-badge sie-online-badge\">0<\/span><\/button>\n                        <button class=\"sie-tab-btn\" data-tab=\"photos\">\ud83d\udcf7 Fotos <span class=\"sie-tab-badge sie-photo-badge\">0<\/span><\/button>\n                        <button class=\"sie-tab-btn\" data-tab=\"videos\">\ud83c\udfac V\u00eddeos <span class=\"sie-tab-badge sie-video-badge\">0<\/span><\/button>\n                        <button class=\"sie-tab-btn\" data-tab=\"audios\">\ud83c\udfb5 \u00c1udios <span class=\"sie-tab-badge sie-audio-badge\">0<\/span><\/button>\n                        <button class=\"sie-tab-btn\" data-tab=\"documents\">\ud83d\udcc4 Documentos <span class=\"sie-tab-badge sie-doc-badge\">0<\/span><\/button>\n                        <button class=\"sie-tab-btn\" data-tab=\"files\">\ud83d\udcce Arquivos <span class=\"sie-tab-badge sie-file-badge\">0<\/span><\/button>\n                        <button class=\"sie-tab-btn\" data-tab=\"locations\">\ud83d\udccd Mapa<\/button>\n                    <\/div>\n                <\/div>\n                <div class=\"sie-chat-body\">\n                    <div class=\"sie-tab-content sie-active\" data-content=\"chat\"><div class=\"sie-messages-list\"><\/div><\/div>\n                    <div class=\"sie-tab-content\" data-content=\"online\"><div class=\"sie-online-users-list\"><\/div><\/div>\n                    <div class=\"sie-tab-content\" data-content=\"photos\"><div class=\"sie-photos-grid sie-media-grid\"><\/div><\/div>\n                    <div class=\"sie-tab-content\" data-content=\"videos\"><div class=\"sie-videos-grid sie-media-grid\"><\/div><\/div>\n                    <div class=\"sie-tab-content\" data-content=\"audios\"><div class=\"sie-audio-list\"><\/div><\/div>\n                    <div class=\"sie-tab-content\" data-content=\"documents\"><div class=\"sie-document-list\"><\/div><\/div>\n                    <div class=\"sie-tab-content\" data-content=\"files\"><div class=\"sie-files-list\"><\/div><\/div>\n                    <div class=\"sie-tab-content\" data-content=\"locations\">\n                        <div class=\"sie-map-wrapper\">\n                            <div class=\"sie-map-controls\"><button class=\"sie-map-toggle-btn\">\u2630 Locais<\/button><\/div>\n                            <div class=\"sie-map-container\" id=\"sie-map\">\n                                <div class=\"sie-map-panel\">\n                                    <div class=\"sie-map-panel-header\"><span>\ud83d\udccd Localiza\u00e7\u00f5es<\/span><span class=\"sie-map-panel-close\">\u2715<\/span><\/div>\n                                    <div class=\"sie-map-panel-list\"><\/div>\n                                <\/div>\n                            <\/div>\n                        <\/div>\n                    <\/div>\n                <\/div>\n                <div class=\"sie-chat-footer\">\n                    <div class=\"sie-upload-progress\"><div class=\"sie-upload-progress-bar\"><\/div><div class=\"sie-upload-progress-text\"><\/div><\/div>\n                    <div class=\"sie-preview-container\" style=\"display:none;\"><\/div>\n                    <div class=\"sie-input-row\">\n                        <textarea class=\"sie-msg-input\" placeholder=\"Digite sua mensagem...\" rows=\"2\"><\/textarea>\n                        <button class=\"sie-send-btn\" title=\"Enviar mensagem\">\u27a4 Enviar<\/button>\n                    <\/div>\n                    <div class=\"sie-action-buttons\">\n                        <button class=\"sie-action-btn sie-btn-file\" title=\"Enviar arquivo\">\n                            <img decoding=\"async\" src=\"https:\/\/7.sos.adm.br\/wp-content\/plugins\/sala-qru\/icones\/pasta.png\" alt=\"\ud83d\udcce\" onerror=\"this.style.display='none';this.nextElementSibling.style.display='block';\">\n                            <span style=\"display:none;font-size:20px;\">\ud83d\udcce<\/span><span class=\"sie-btn-label\">Arquivos<\/span>\n                        <\/button>\n                        <button class=\"sie-action-btn sie-btn-camera\" title=\"Tirar foto\">\n                            <img decoding=\"async\" src=\"https:\/\/7.sos.adm.br\/wp-content\/plugins\/sala-qru\/icones\/camera.png\" alt=\"\ud83d\udcf7\" onerror=\"this.style.display='none';this.nextElementSibling.style.display='block';\">\n                            <span style=\"display:none;font-size:20px;\">\ud83d\udcf7<\/span><span class=\"sie-btn-label\">C\u00e2mera<\/span>\n                        <\/button>\n                        <button class=\"sie-action-btn sie-btn-audio\" title=\"Gravar \u00e1udio\">\n                            <img decoding=\"async\" src=\"https:\/\/7.sos.adm.br\/wp-content\/plugins\/sala-qru\/icones\/microfone.png\" alt=\"\ud83c\udfa4\" onerror=\"this.style.display='none';this.nextElementSibling.style.display='block';\">\n                            <span style=\"display:none;font-size:20px;\">\ud83c\udfa4<\/span><span class=\"sie-btn-label\">\u00c1udio<\/span>\n                        <\/button>\n                        <button class=\"sie-action-btn sie-btn-video\" title=\"Gravar v\u00eddeo\">\n                            <img decoding=\"async\" src=\"https:\/\/7.sos.adm.br\/wp-content\/plugins\/sala-qru\/icones\/gravador.png\" alt=\"\ud83c\udfac\" onerror=\"this.style.display='none';this.nextElementSibling.style.display='block';\">\n                            <span style=\"display:none;font-size:20px;\">\ud83c\udfac<\/span><span class=\"sie-btn-label\">V\u00eddeo<\/span>\n                        <\/button>\n                        <button class=\"sie-action-btn sie-btn-location\" title=\"Compartilhar localiza\u00e7\u00e3o\">\n                            <img decoding=\"async\" src=\"https:\/\/7.sos.adm.br\/wp-content\/plugins\/sala-qru\/icones\/mapa.png\" alt=\"\ud83d\udccd\" onerror=\"this.style.display='none';this.nextElementSibling.style.display='block';\">\n                            <span style=\"display:none;font-size:20px;\">\ud83d\udccd<\/span><span class=\"sie-btn-label\">Local<\/span>\n                        <\/button>\n                    <\/div>\n                <\/div>\n                <input type=\"file\" class=\"sie-hidden-file-input\" style=\"display:none;\" multiple accept=\"*\/*\">\n                <div class=\"sie-camera-container\">\n                    <div class=\"sie-camera-timer\"><\/div>\n                    <video class=\"sie-camera-video\" autoplay playsinline><\/video>\n                    <canvas class=\"sie-camera-canvas\"><\/canvas>\n                    <div class=\"sie-camera-controls\">\n                        <button class=\"sie-camera-btn sie-close-camera\">\u2715<\/button>\n                        <button class=\"sie-camera-btn sie-capture\">\ud83d\udcf7<\/button>\n                        <button class=\"sie-camera-btn sie-switch-camera\">\ud83d\udd04<\/button>\n                    <\/div>\n                <\/div>\n            <\/div>\n            <div class=\"sie-modal\">\n                <span class=\"sie-modal-close\">&times;<\/span>\n                <button class=\"sie-modal-nav sie-modal-prev\">\u2039<\/button>\n                <img decoding=\"async\" class=\"sie-modal-img\" src=\"\" alt=\"\">\n                <button class=\"sie-modal-nav sie-modal-next\">\u203a<\/button>\n                <div class=\"sie-modal-counter\"><\/div>\n            <\/div>\n            <div class=\"sie-video-modal\">\n                <span class=\"sie-video-modal-close\">&times;<\/span>\n                <button class=\"sie-video-modal-nav sie-video-modal-prev\">\u2039<\/button>\n                <video controls autoplay><\/video>\n                <button class=\"sie-video-modal-nav sie-video-modal-next\">\u203a<\/button>\n            <\/div>\n            <div class=\"sie-toast\"><\/div>\n        <\/div><script>var sie_data = {\"ajax_url\":\"https:\\\/\\\/7.sos.adm.br\\\/wp-admin\\\/admin-ajax.php\",\"nonce\":\"dcb5b2397c\",\"room_id\":\"global\",\"user_id\":0,\"temp_user_id\":\"user_6adf70960e47a\",\"user_name\":\"Visitante e47a\",\"user_avatar\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/?s=96&d=mm&r=g\",\"page_title\":\"Protocolo 312939 &#8211; Visitante &#8211; Bombeiros\",\"upload_max_size\":104857600,\"polling_interval\":2000,\"leaflet_css\":\"https:\\\/\\\/unpkg.com\\\/leaflet@1.9.4\\\/dist\\\/leaflet.css\",\"leaflet_js\":\"https:\\\/\\\/unpkg.com\\\/leaflet@1.9.4\\\/dist\\\/leaflet.js\",\"leaflet_routing_js\":\"https:\\\/\\\/unpkg.com\\\/leaflet-routing-machine@3.2.12\\\/dist\\\/leaflet-routing-machine.js\",\"leaflet_routing_css\":\"https:\\\/\\\/unpkg.com\\\/leaflet-routing-machine@3.2.12\\\/dist\\\/leaflet-routing-machine.css\"};<\/script><script>\n(function($) {\n    var currentTab = \"chat\";\n    var lastMessageId = 0;\n    var pollingTimer, heartbeatTimer, locationSharingTimer;\n    var map = null, markers = [], routingControl = null;\n    var audioRecorder = null, audioChunksArr = [], isAudioRecording = false;\n    var isRecordingVideo = false;\n    var currentImageIndex = 0, imageList = [];\n    var currentVideoIndex = 0, videoList = [];\n    var userLocation = null;\n    var cameraStream = null;\n    var facingMode = \"environment\";\n    var videoRecorder = null, videoChunksArr = [], videoTimerInterval = null, videoSecondsLeft = 15;\n    var isSharingLocation = false;\n    var lastDateShown = \"\";\n    var autoMessageChecked = false;\n    \n    function loadScript(url, callback) {\n        if ($(\"script[src='\" + url + \"']\").length) { callback(); return; }\n        $.getScript(url, callback);\n    }\n    function loadCSS(url) {\n        if ($(\"link[href='\" + url + \"']\").length) return;\n        $(\"head\").append('<link rel=\"stylesheet\" href=\"' + url + '\">');\n    }\n    function loadLeaflet(callback) {\n        if (typeof L !== \"undefined\") { callback(); return; }\n        loadCSS(sie_data.leaflet_css);\n        loadScript(sie_data.leaflet_js, callback);\n    }\n    function loadRouting(callback) {\n        if (typeof L !== \"undefined\" && typeof L.Routing !== \"undefined\") { callback(); return; }\n        loadCSS(sie_data.leaflet_routing_css);\n        loadScript(sie_data.leaflet_routing_js, callback);\n    }\n    \n    var $container = $(\".sie-chat-container\");\n    var $wrapper = $(\".sie-chat-wrapper\");\n    var $messagesList = $(\".sie-messages-list\");\n    var $input = $(\".sie-msg-input\");\n    var $chatBody = $(\".sie-chat-body\");\n    var $toggleBtn = $(\".sie-chat-toggle-btn\");\n    \n    function showToast(msg) {\n        var $toast = $(\".sie-toast\");\n        $toast.text(msg).addClass(\"sie-show\");\n        clearTimeout($toast.data(\"timeout\"));\n        $toast.data(\"timeout\", setTimeout(function() { $toast.removeClass(\"sie-show\"); }, 2000));\n    }\n    \n    $toggleBtn.on(\"click\", function() {\n        $container.toggleClass(\"sie-open\");\n        if ($container.hasClass(\"sie-open\")) {\n            loadTabContent(currentTab);\n            loadOnlineUsers();\n            startPolling();\n            startHeartbeat();\n            $toggleBtn.removeClass(\"sie-new-message\");\n            if (!autoMessageChecked) checkAutoMessage();\n        } else {\n            stopPolling(); stopHeartbeat();\n        }\n    });\n    \n    \/\/ Fechar - se estiver fullscreen, move de volta ao wrapper antes de fechar\n    $(\".sie-btn-close\").on(\"click\", function() {\n        if ($container.hasClass(\"sie-fullscreen\")) {\n            \/\/ Move o container de volta para o wrapper\n            $wrapper.append($container);\n            $container.removeClass(\"sie-fullscreen\");\n            $(\".sie-btn-fullscreen\").text(\"\u26f6\");\n            $(\"body\").css(\"overflow\", \"\");\n            \/\/ Restaura estilos do wrapper\n            $wrapper.css({transform:\"\", left:\"\", bottom:\"\"});\n        }\n        $container.removeClass(\"sie-open\");\n        stopPolling(); stopHeartbeat();\n        stopLocationSharing();\n    });\n    \n    \/\/ Tela cheia - SOLU\u00c7\u00c3O DEFINITIVA: move o container para o body\n    $(\".sie-btn-fullscreen\").on(\"click\", function() {\n        if ($container.hasClass(\"sie-fullscreen\")) {\n            \/\/ SAIR DA TELA CHEIA: move de volta para o wrapper\n            $wrapper.append($container);\n            $container.removeClass(\"sie-fullscreen\");\n            $(this).text(\"\u26f6\");\n            $(\"body\").css(\"overflow\", \"\");\n            \/\/ Restaura estilos do wrapper\n            $wrapper.css({transform:\"\", left:\"\", bottom:\"\"});\n        } else {\n            \/\/ ENTRAR EM TELA CHEIA: move para o body diretamente\n            $(\"body\").append($container);\n            $container.addClass(\"sie-fullscreen\");\n            $(this).text(\"\ud83d\uddd7\");\n            $(\"body\").css(\"overflow\", \"hidden\");\n        }\n        setTimeout(function() { if (map) map.invalidateSize(); }, 400);\n    });\n    \n    \/\/ ESC para sair da tela cheia\n    $(document).on(\"keydown\", function(e) {\n        if (e.key === \"Escape\" && $container.hasClass(\"sie-fullscreen\")) {\n            $wrapper.append($container);\n            $container.removeClass(\"sie-fullscreen\");\n            $(\".sie-btn-fullscreen\").text(\"\u26f6\");\n            $(\"body\").css(\"overflow\", \"\");\n            $wrapper.css({transform:\"\", left:\"\", bottom:\"\"});\n        }\n    });\n    \n    function checkAutoMessage() {\n        autoMessageChecked = true;\n        $.post(sie_data.ajax_url, {\n            action: \"sie_check_auto_message\",\n            nonce: sie_data.nonce,\n            room_id: sie_data.room_id\n        }, function(response) {\n            if (response.success && response.data && response.data.message) {\n                addMessage(response.data.message);\n                if (response.data.message_id) {\n                    lastMessageId = Math.max(lastMessageId, response.data.message_id);\n                }\n                scrollChatBottom();\n            }\n        });\n    }\n    \n    \/\/ Tabs\n    $(document).on(\"click\", \".sie-tab-btn\", function(e) {\n        e.preventDefault();\n        var tab = $(this).data(\"tab\");\n        currentTab = tab;\n        $(\".sie-tab-btn\").removeClass(\"sie-active\");\n        $(this).addClass(\"sie-active\");\n        $(\".sie-tab-content\").removeClass(\"sie-active\");\n        $(\".sie-tab-content[data-content=\\\"\" + tab + \"\\\"]\").addClass(\"sie-active\");\n        $(\".sie-chat-footer\").toggle(tab === \"chat\");\n        loadTabContent(tab);\n    });\n    \n    function loadTabContent(tab) {\n        switch(tab) {\n            case \"chat\": loadMessages(); break;\n            case \"online\": loadOnlineUsersList(); break;\n            case \"photos\": loadPhotos(); break;\n            case \"videos\": loadVideos(); break;\n            case \"audios\": loadAudios(); break;\n            case \"documents\": loadDocuments(); break;\n            case \"files\": loadFiles(); break;\n            case \"locations\": loadLocations(); break;\n        }\n    }\n    \n    function sendMessage() {\n        var message = $input.val().trim();\n        if (!message) return;\n        \n        $.post(sie_data.ajax_url, {\n            action: \"sie_send_message\",\n            nonce: sie_data.nonce,\n            room_id: sie_data.room_id,\n            message: message,\n            message_type: \"text\"\n        }, function(response) {\n            if (response.success) {\n                $input.val(\"\").css(\"height\", \"auto\");\n                addMessage(response.data.message);\n                lastMessageId = response.data.message_id;\n                scrollChatBottom();\n            }\n        });\n    }\n    \n    $(\".sie-send-btn\").on(\"click\", sendMessage);\n    \n    $input.on(\"keypress\", function(e) {\n        if (e.which === 13 && !e.shiftKey) {\n            e.preventDefault();\n            sendMessage();\n        }\n    }).on(\"input\", function() {\n        this.style.height = \"auto\";\n        this.style.height = Math.min(this.scrollHeight, 100) + \"px\";\n    });\n    \n    $input.on(\"paste\", function(e) {\n        var items = (e.clipboardData || e.originalEvent.clipboardData).items;\n        for (var i = 0; i < items.length; i++) {\n            if (items[i].type.indexOf(\"image\") !== -1) {\n                e.preventDefault();\n                uploadBlob(items[i].getAsFile(), \"imagem_\" + Date.now() + \".png\", \"image\");\n                return;\n            }\n        }\n    });\n    \n    function uploadBlob(blob, fileName, fileType) {\n        var formData = new FormData();\n        formData.append(\"action\", \"sie_upload_file\");\n        formData.append(\"nonce\", sie_data.nonce);\n        formData.append(\"file\", blob, fileName);\n        formData.append(\"room_id\", sie_data.room_id);\n        \n        var progress = $(\".sie-upload-progress\");\n        var progressBar = $(\".sie-upload-progress-bar\");\n        var progressText = $(\".sie-upload-progress-text\");\n        \n        progress.show();\n        progressBar.css(\"width\", \"0%\");\n        progressText.text(\"Enviando... 0%\");\n        \n        if (fileType === \"image\") {\n            var reader = new FileReader();\n            reader.onload = function(e) {\n                $(\".sie-preview-container\").html('<img decoding=\"async\" src=\"' + e.target.result + '\" style=\"max-width:60px;max-height:60px;border-radius:8px;\">').show();\n            };\n            reader.readAsDataURL(blob);\n        }\n        \n        $.ajax({\n            url: sie_data.ajax_url, type: \"POST\", data: formData,\n            processData: false, contentType: false,\n            xhr: function() {\n                var xhr = new XMLHttpRequest();\n                xhr.upload.addEventListener(\"progress\", function(e) {\n                    if (e.lengthComputable) {\n                        var pct = Math.round((e.loaded \/ e.total) * 100);\n                        progressBar.css(\"width\", pct + \"%\");\n                        progressText.text(\"Enviando... \" + pct + \"%\");\n                    }\n                });\n                return xhr;\n            },\n            success: function(response) {\n                progress.hide();\n                $(\".sie-preview-container\").hide().empty();\n                if (response.success) { response.data.type = fileType; sendFileMessage(response.data); }\n            },\n            error: function() {\n                progress.hide();\n                $(\".sie-preview-container\").hide().empty();\n                showToast(\"Erro ao enviar arquivo!\");\n            }\n        });\n    }\n    \n    $(document).on(\"click\", \".sie-btn-file\", function() {\n        var fileInput = $(\".sie-hidden-file-input\")[0];\n        fileInput.value = \"\";\n        fileInput.click();\n    });\n    \n    $(\".sie-hidden-file-input\").on(\"change\", function() {\n        var files = this.files;\n        if (!files.length) return;\n        Array.from(files).forEach(function(file) {\n            var ext = file.name.split(\".\").pop().toLowerCase();\n            var type = \"file\";\n            if ([\"jpg\",\"jpeg\",\"png\",\"gif\",\"webp\",\"bmp\"].indexOf(ext) >= 0) type = \"image\";\n            else if ([\"mp4\",\"webm\",\"mov\",\"avi\"].indexOf(ext) >= 0) type = \"video\";\n            else if ([\"mp3\",\"wav\",\"webm\",\"ogg\",\"m4a\"].indexOf(ext) >= 0) type = \"audio\";\n            else if (ext === \"pdf\") type = \"document\";\n            uploadBlob(file, file.name, type);\n        });\n        $(this).val(\"\");\n    });\n    \n    function sendFileMessage(fileData) {\n        $.post(sie_data.ajax_url, {\n            action: \"sie_send_message\", nonce: sie_data.nonce,\n            room_id: sie_data.room_id, message: \"\",\n            message_type: fileData.type, file_url: fileData.url,\n            file_name: fileData.name, file_size: fileData.size\n        }, function(response) {\n            if (response.success) {\n                addMessage(response.data.message);\n                lastMessageId = response.data.message_id;\n                scrollChatBottom();\n            }\n        });\n    }\n    \n    \/\/ C\u00e2mera\n    var cameraVideo = $(\".sie-camera-video\")[0];\n    var cameraCanvas = $(\".sie-camera-canvas\")[0];\n    var cameraContainer = $(\".sie-camera-container\");\n    \n    $(document).on(\"click\", \".sie-btn-camera\", function() { openCamera(\"photo\"); });\n    $(document).on(\"click\", \".sie-btn-video\", function() { openCamera(\"video\"); });\n    \n    function openCamera(mode) {\n        stopCameraStream();\n        cameraContainer.addClass(\"sie-open\");\n        $(\".sie-camera-timer\").hide();\n        var constraints = { video: { facingMode: facingMode, width: { ideal: 1280 }, height: { ideal: 720 } }, audio: mode === \"video\" };\n        navigator.mediaDevices.getUserMedia(constraints).then(function(stream) {\n            cameraStream = stream;\n            cameraVideo.srcObject = stream;\n            cameraVideo.play();\n            if (mode === \"video\") startVideoRecording(stream);\n        }).catch(function(err) {\n            showToast(\"Erro ao acessar c\u00e2mera: \" + err.message);\n            cameraContainer.removeClass(\"sie-open\");\n        });\n    }\n    \n    function stopCameraStream() {\n        if (cameraStream) { cameraStream.getTracks().forEach(function(track) { track.stop(); }); cameraStream = null; }\n    }\n    \n    $(document).on(\"click\", \".sie-capture\", function() {\n        if (isRecordingVideo) { stopVideoRecording(); return; }\n        cameraCanvas.width = cameraVideo.videoWidth;\n        cameraCanvas.height = cameraVideo.videoHeight;\n        var ctx = cameraCanvas.getContext(\"2d\");\n        ctx.drawImage(cameraVideo, 0, 0);\n        cameraCanvas.toBlob(function(blob) { uploadBlob(blob, \"foto_\" + Date.now() + \".jpg\", \"image\"); closeCamera(); }, \"image\/jpeg\", 0.9);\n    });\n    \n    $(document).on(\"click\", \".sie-close-camera\", function() { closeCamera(); });\n    \n    function closeCamera() {\n        stopCameraStream(); stopVideoRecording();\n        cameraContainer.removeClass(\"sie-open\");\n        $(\".sie-camera-timer\").hide();\n        $(\".sie-capture\").text(\"\ud83d\udcf7\").css(\"background\", \"white\");\n    }\n    \n    $(document).on(\"click\", \".sie-switch-camera\", function() {\n        facingMode = facingMode === \"environment\" ? \"user\" : \"environment\";\n        openCamera(isRecordingVideo ? \"video\" : \"photo\");\n    });\n    \n    \/\/ \u00c1udio\n    $(document).on(\"click\", \".sie-btn-audio\", function() {\n        var btn = $(this);\n        if (!isAudioRecording) {\n            navigator.mediaDevices.getUserMedia({ audio: true }).then(function(stream) {\n                audioRecorder = new MediaRecorder(stream);\n                audioChunksArr = [];\n                audioRecorder.ondataavailable = function(e) { audioChunksArr.push(e.data); };\n                audioRecorder.onstop = function() {\n                    var blob = new Blob(audioChunksArr, { type: \"audio\/webm\" });\n                    uploadBlob(blob, \"audio_\" + Date.now() + \".webm\", \"audio\");\n                    stream.getTracks().forEach(function(t) { t.stop(); });\n                };\n                audioRecorder.start();\n                isAudioRecording = true;\n                btn.addClass(\"sie-recording\");\n                btn.find(\".sie-btn-label\").text(\"Gravando...\");\n            }).catch(function() { showToast(\"Erro ao acessar microfone!\"); });\n        } else {\n            if (audioRecorder && audioRecorder.state === \"recording\") audioRecorder.stop();\n            isAudioRecording = false;\n            btn.removeClass(\"sie-recording\");\n            btn.find(\".sie-btn-label\").text(\"\u00c1udio\");\n        }\n    });\n    \n    \/\/ V\u00eddeo\n    function startVideoRecording(stream) {\n        videoRecorder = new MediaRecorder(stream, { mimeType: \"video\/webm\" });\n        videoChunksArr = [];\n        videoSecondsLeft = 15;\n        videoRecorder.ondataavailable = function(e) { videoChunksArr.push(e.data); };\n        videoRecorder.onstop = function() {\n            var blob = new Blob(videoChunksArr, { type: \"video\/webm\" });\n            uploadBlob(blob, \"video_\" + Date.now() + \".webm\", \"video\");\n            closeCamera();\n        };\n        videoRecorder.start();\n        isRecordingVideo = true;\n        $(\".sie-camera-timer\").show().text(\"\u23f1 \" + videoSecondsLeft + \"s\");\n        $(\".sie-capture\").text(\"\u23f9\").css(\"background\", \"#ff0000\");\n        videoTimerInterval = setInterval(function() {\n            videoSecondsLeft--;\n            $(\".sie-camera-timer\").text(\"\u23f1 \" + videoSecondsLeft + \"s\");\n            if (videoSecondsLeft <= 5) $(\".sie-camera-timer\").css(\"color\", \"#ff4444\");\n            if (videoSecondsLeft <= 0) stopVideoRecording();\n        }, 1000);\n    }\n    \n    function stopVideoRecording() {\n        if (videoTimerInterval) { clearInterval(videoTimerInterval); videoTimerInterval = null; }\n        if (videoRecorder && videoRecorder.state === \"recording\") videoRecorder.stop();\n        isRecordingVideo = false;\n        $(\".sie-camera-timer\").hide().css(\"color\", \"white\");\n        $(\".sie-capture\").text(\"\ud83d\udcf7\").css(\"background\", \"white\");\n    }\n    \n    \/\/ Localiza\u00e7\u00e3o\n    function shareLocationOnce() {\n        if (!navigator.geolocation) { showToast(\"Geolocaliza\u00e7\u00e3o n\u00e3o suportada!\"); return; }\n        navigator.geolocation.getCurrentPosition(function(pos) {\n            var lat = pos.coords.latitude, lng = pos.coords.longitude;\n            var addr = lat.toFixed(6) + \", \" + lng.toFixed(6);\n            userLocation = { lat: lat, lng: lng };\n            $.post(sie_data.ajax_url, {\n                action: \"sie_share_location\", nonce: sie_data.nonce,\n                room_id: sie_data.room_id, latitude: lat, longitude: lng, address: addr\n            }, function() {\n                $.post(sie_data.ajax_url, {\n                    action: \"sie_send_message\", nonce: sie_data.nonce,\n                    room_id: sie_data.room_id, message: addr, message_type: \"location\",\n                    latitude: lat, longitude: lng, address: addr\n                }, function(r) { if (r.success) { addMessage(r.data.message); scrollChatBottom(); } });\n            });\n        }, function(err) { showToast(\"Erro ao obter localiza\u00e7\u00e3o\"); }, { enableHighAccuracy: true, timeout: 10000 });\n    }\n    \n    function updateLocationSharing() {\n        if (!navigator.geolocation || !isSharingLocation) return;\n        navigator.geolocation.getCurrentPosition(function(pos) {\n            var lat = pos.coords.latitude, lng = pos.coords.longitude;\n            userLocation = { lat: lat, lng: lng };\n            $.post(sie_data.ajax_url, {\n                action: \"sie_update_location_sharing\", nonce: sie_data.nonce,\n                room_id: sie_data.room_id, latitude: lat, longitude: lng,\n                address: lat.toFixed(6) + \", \" + lng.toFixed(6),\n                user_id: sie_data.user_id, temp_user_id: sie_data.temp_user_id\n            });\n        }, function() {}, { enableHighAccuracy: true, timeout: 10000 });\n    }\n    \n    function startLocationSharing() {\n        isSharingLocation = true;\n        $(\".sie-btn-location\").addClass(\"sie-sharing\");\n        $(\".sie-btn-location .sie-btn-label\").text(\"Compartilhando...\");\n        shareLocationOnce();\n        locationSharingTimer = setInterval(updateLocationSharing, 30000);\n        setTimeout(function() { stopLocationSharing(); }, 2 * 60 * 60 * 1000);\n        showToast(\"\ud83d\udccd Compartilhando localiza\u00e7\u00e3o por 2 horas\");\n    }\n    \n    function stopLocationSharing() {\n        isSharingLocation = false;\n        $(\".sie-btn-location\").removeClass(\"sie-sharing\");\n        $(\".sie-btn-location .sie-btn-label\").text(\"Local\");\n        if (locationSharingTimer) { clearInterval(locationSharingTimer); locationSharingTimer = null; }\n        $.post(sie_data.ajax_url, {\n            action: \"sie_update_location_sharing\", nonce: sie_data.nonce,\n            room_id: sie_data.room_id, stop_sharing: 1,\n            user_id: sie_data.user_id, temp_user_id: sie_data.temp_user_id\n        });\n    }\n    \n    $(document).on(\"click\", \".sie-btn-location\", function() {\n        if (isSharingLocation) { stopLocationSharing(); showToast(\"Compartilhamento de localiza\u00e7\u00e3o parado\"); }\n        else { startLocationSharing(); }\n    });\n    \n    \/\/ Copiar localiza\u00e7\u00e3o\n    $(document).on(\"click\", \".sie-copy-location-btn\", function(e) {\n        e.preventDefault(); e.stopPropagation();\n        var lat = $(this).data(\"lat\");\n        var lng = $(this).data(\"lng\");\n        var link = \"https:\/\/www.google.com\/maps?q=\" + lat + \",\" + lng;\n        if (navigator.clipboard && navigator.clipboard.writeText) {\n            navigator.clipboard.writeText(link).then(function() { showToast(\"\ud83d\udccb Link copiado!\"); }).catch(function() { fallbackCopy(link); });\n        } else { fallbackCopy(link); }\n    });\n    \n    function fallbackCopy(text) {\n        var textarea = document.createElement(\"textarea\");\n        textarea.value = text;\n        textarea.style.position = \"fixed\"; textarea.style.opacity = \"0\";\n        document.body.appendChild(textarea);\n        textarea.select();\n        try { document.execCommand(\"copy\"); showToast(\"\ud83d\udccb Link copiado!\"); }\n        catch(e) { showToast(\"Link: \" + text); }\n        document.body.removeChild(textarea);\n    }\n    \n    \/\/ Clique no v\u00eddeo\n    $(document).on(\"click\", \".sie-msg-video-wrapper\", function(e) {\n        e.preventDefault(); e.stopPropagation();\n        var src = $(this).data(\"video-src\");\n        if (!src) src = $(this).find(\"video\").attr(\"src\");\n        var idx = -1;\n        for (var i = 0; i < videoList.length; i++) {\n            if (videoList[i].file_url === src) { idx = i; break; }\n        }\n        if (idx >= 0) { openVideoSlider(idx); }\n        else {\n            $(\".sie-video-modal video\").attr(\"src\", src);\n            $(\".sie-video-modal video\")[0].load();\n            $(\".sie-video-modal video\")[0].play();\n            $(\".sie-video-modal\").addClass(\"sie-open\");\n        }\n    });\n    \n    function loadMessages() {\n        $.post(sie_data.ajax_url, {\n            action: \"sie_get_messages\", nonce: sie_data.nonce,\n            room_id: sie_data.room_id, last_id: lastMessageId\n        }, function(response) {\n            if (response.success && response.data) {\n                updateBadges(response.data);\n                var newMessages = 0;\n                if (response.data.messages) {\n                    response.data.messages.forEach(function(msg) {\n                        if (!$(\".sie-message[data-id=\\\"\" + msg.id + \"\\\"]\").length) {\n                            addMessage(msg); newMessages++;\n                        }\n                    });\n                }\n                if (response.data.last_id > lastMessageId) lastMessageId = response.data.last_id;\n                if (newMessages > 0 && !$container.hasClass(\"sie-open\")) $toggleBtn.addClass(\"sie-new-message\");\n            }\n        });\n    }\n    \n    function loadPhotos() {\n        $.post(sie_data.ajax_url, { action: \"sie_get_photos\", nonce: sie_data.nonce, room_id: sie_data.room_id }, function(response) {\n            var grid = $(\".sie-photos-grid\");\n            if (response.success && response.data && response.data.length) {\n                imageList = response.data; var html = \"\";\n                response.data.forEach(function(msg, i) { html += '<div class=\"sie-media-item\" onclick=\"openImageSlider(' + i + ')\"><img decoding=\"async\" src=\"' + msg.file_url + '\" alt=\"\"><\/div>'; });\n                grid.html(html);\n            } else { grid.html('<div class=\"sie-empty-state\">\ud83d\udcf7 Nenhuma foto ainda<\/div>'); imageList = []; }\n        });\n    }\n    \n    function loadVideos() {\n        $.post(sie_data.ajax_url, { action: \"sie_get_videos\", nonce: sie_data.nonce, room_id: sie_data.room_id }, function(response) {\n            var grid = $(\".sie-videos-grid\");\n            if (response.success && response.data && response.data.length) {\n                videoList = response.data; var html = \"\";\n                response.data.forEach(function(msg, i) { html += '<div class=\"sie-media-item\" onclick=\"openVideoSlider(' + i + ')\"><video src=\"' + msg.file_url + '\" preload=\"metadata\"><\/video><div class=\"play-icon\">\u25b6<\/div><\/div>'; });\n                grid.html(html);\n            } else { grid.html('<div class=\"sie-empty-state\">\ud83c\udfac Nenhum v\u00eddeo ainda<\/div>'); videoList = []; }\n        });\n    }\n    \n    function loadAudios() {\n        $.post(sie_data.ajax_url, { action: \"sie_get_audios\", nonce: sie_data.nonce, room_id: sie_data.room_id }, function(response) {\n            var list = $(\".sie-audio-list\");\n            if (response.success && response.data && response.data.length) {\n                var html = \"\";\n                response.data.forEach(function(msg) { html += '<div class=\"sie-audio-item\"><div class=\"sie-audio-user\">\ud83c\udfb5 ' + msg.user_name + '<\/div><div class=\"sie-audio-time\">' + msg.time_ago + '<\/div><audio controls><source src=\"' + msg.file_url + '\"><\/audio><\/div>'; });\n                list.html(html);\n            } else { list.html('<div class=\"sie-empty-state\">\ud83c\udfb5 Nenhum \u00e1udio ainda<\/div>'); }\n        });\n    }\n    \n    function loadDocuments() {\n        $.post(sie_data.ajax_url, { action: \"sie_get_documents\", nonce: sie_data.nonce, room_id: sie_data.room_id }, function(response) {\n            var list = $(\".sie-document-list\");\n            if (response.success && response.data && response.data.length) {\n                var html = \"\";\n                response.data.forEach(function(msg) { html += '<div class=\"sie-document-item\"><div class=\"sie-document-icon\">\ud83d\udcc4<\/div><div class=\"sie-document-info\"><div class=\"sie-document-name\">' + (msg.file_name || \"Documento\") + '<\/div><div class=\"sie-document-meta\">' + msg.user_name + ' - ' + msg.time_ago + '<\/div><\/div><a href=\"' + msg.file_url + '\" class=\"sie-document-download\" target=\"_blank\">Abrir<\/a><\/div>'; });\n                list.html(html);\n            } else { list.html('<div class=\"sie-empty-state\">\ud83d\udcc4 Nenhum documento ainda<\/div>'); }\n        });\n    }\n    \n    function loadFiles() {\n        $.post(sie_data.ajax_url, { action: \"sie_get_files\", nonce: sie_data.nonce, room_id: sie_data.room_id }, function(response) {\n            var list = $(\".sie-files-list\");\n            if (response.success && response.data && response.data.length) {\n                var html = \"\";\n                response.data.forEach(function(msg) { html += '<div class=\"sie-msg-file\"><div class=\"sie-file-icon\">\ud83d\udcce<\/div><div class=\"sie-file-info\"><div class=\"sie-file-name\">' + (msg.file_name || \"Arquivo\") + '<\/div><div class=\"sie-file-size\">' + (msg.file_size || \"\") + '<\/div><\/div><a href=\"' + msg.file_url + '\" class=\"sie-file-download\" download>Baixar<\/a><\/div>'; });\n                list.html(html);\n            } else { list.html('<div class=\"sie-empty-state\">\ud83d\udcce Nenhum arquivo ainda<\/div>'); }\n        });\n    }\n    \n    function loadLocations() {\n        $.post(sie_data.ajax_url, { action: \"sie_get_locations\", nonce: sie_data.nonce, room_id: sie_data.room_id }, function(response) {\n            if (response.success && response.data) renderMap(response.data.messages, response.data.active_locations);\n        });\n    }\n    \n    function loadOnlineUsersList() {\n        $.post(sie_data.ajax_url, { action: \"sie_get_all_online\", nonce: sie_data.nonce, room_id: sie_data.room_id }, function(response) {\n            var list = $(\".sie-online-users-list\");\n            if (response.success && response.data && response.data.users && response.data.users.length) {\n                var html = \"\";\n                response.data.users.forEach(function(user) { html += '<div class=\"sie-online-user-item\"><div class=\"sie-online-user-avatar\">' + (user.user_avatar ? '<img decoding=\"async\" src=\"' + user.user_avatar + '\">' : user.user_name.charAt(0).toUpperCase()) + '<\/div><div class=\"sie-online-user-info\"><div class=\"sie-online-user-name\">' + user.user_name + '<\/div><div class=\"sie-online-status\">Online agora<\/div><\/div><\/div>'; });\n                list.html(html);\n            } else { list.html('<div class=\"sie-empty-state\">\ud83d\udfe2 Nenhum usu\u00e1rio online<\/div>'); }\n        });\n    }\n    \n    function renderMap(messages, activeLocations) {\n        loadLeaflet(function() {\n            if (!map) { map = L.map(\"sie-map\").setView([-15.7934, -47.8823], 4); L.tileLayer(\"https:\/\/{s}.tile.openstreetmap.org\/{z}\/{x}\/{y}.png\").addTo(map); }\n            markers.forEach(function(m) { map.removeLayer(m); }); markers = [];\n            if (routingControl) { map.removeControl(routingControl); routingControl = null; }\n            var bounds = [], panelHtml = \"\";\n            \n            function addPoint(lat, lng, name, info, active) {\n                var latlng = [lat, lng]; bounds.push(latlng);\n                var popup = \"<strong>\" + name + \"<\/strong><br>\" + info;\n                if (active) popup += \"<br><span style='color:#00b894;font-weight:bold;'>\ud83d\udfe2 Compartilhando em tempo real<\/span>\";\n                popup += \"<br><button class=\\\"sie-popup-route-btn\\\" onclick=\\\"copyLocationLink(\" + lat + \",\" + lng + \")\\\">\ud83d\udccb Copiar localiza\u00e7\u00e3o<\/button>\";\n                var icon = active ? L.divIcon({html: '<div style=\"background:#00b894;width:14px;height:14px;border-radius:50%;border:3px solid white;box-shadow:0 0 10px rgba(0,184,148,0.8);animation:siePulse 1.5s infinite;\"><\/div>', className: '', iconSize: [20,20], iconAnchor: [10,10]}) : null;\n                markers.push(L.marker(latlng, icon ? {icon: icon} : {}).bindPopup(popup).addTo(map));\n                panelHtml += \"<div class=\\\"sie-map-panel-item\\\" onclick=\\\"map.setView([\" + lat + \",\" + lng + \"], 15)\\\"><strong>\" + (active ? \"\ud83d\udfe2 \" : \"\") + name + \"<\/strong>\" + info + \"<br><span class=\\\"sie-popup-route-btn\\\" onclick=\\\"event.stopPropagation();copyLocationLink(\" + lat + \",\" + lng + \")\\\" style=\\\"display:inline-block;width:auto;padding:4px 8px;font-size:10px;\\\">\ud83d\udccb Copiar link<\/span><\/div>\";\n            }\n            \n            if (activeLocations) activeLocations.forEach(function(l) { addPoint(l.latitude, l.longitude, l.user_name, \"\ud83d\udccd Compartilhando em tempo real\", true); });\n            if (messages) messages.forEach(function(m) { if (m.location_lat) addPoint(m.location_lat, m.location_lng, m.user_name, m.message_content + \" - \" + m.time_ago, false); });\n            \n            $(\".sie-map-panel-list\").html(panelHtml || \"<div style=\\\"padding:10px;\\\">\ud83d\udccd Nenhuma localiza\u00e7\u00e3o<\/div>\");\n            if (bounds.length) map.fitBounds(bounds, { padding: [30, 30] });\n            setTimeout(function() { map.invalidateSize(); }, 200);\n        });\n    }\n    \n    window.copyLocationLink = function(lat, lng) {\n        var link = \"https:\/\/www.google.com\/maps?q=\" + lat + \",\" + lng;\n        if (navigator.clipboard && navigator.clipboard.writeText) {\n            navigator.clipboard.writeText(link).then(function() { showToast(\"\ud83d\udccb Link copiado!\"); }).catch(function() { fallbackCopy(link); });\n        } else { fallbackCopy(link); }\n    };\n    \n    window.createRoute = function(fromLat, fromLng, toLat, toLng) {\n        loadRouting(function() {\n            if (routingControl) map.removeControl(routingControl);\n            routingControl = L.Routing.control({\n                waypoints: [L.latLng(fromLat, fromLng), L.latLng(toLat, toLng)],\n                routeWhileDragging: false, showAlternatives: false,\n                lineOptions: { styles: [{ color: \"#ff0909\", weight: 4 }] }\n            }).addTo(map);\n            $(\".sie-map-panel\").removeClass(\"sie-open\");\n        });\n    };\n    \n    $(document).on(\"click\", \".sie-map-toggle-btn\", function() { $(\".sie-map-panel\").toggleClass(\"sie-open\"); });\n    $(document).on(\"click\", \".sie-map-panel-close\", function() { $(\".sie-map-panel\").removeClass(\"sie-open\"); });\n    \n    window.openImageSlider = function(index) { currentImageIndex = index; updateSliderImage(); $(\".sie-modal\").fadeIn(); };\n    window.openImageModal = function(src) {\n        var idx = -1;\n        for (var i = 0; i < imageList.length; i++) { if (imageList[i].file_url === src) { idx = i; break; } }\n        currentImageIndex = idx >= 0 ? idx : 0;\n        if (idx < 0) imageList = [{ file_url: src }];\n        updateSliderImage(); $(\".sie-modal\").fadeIn();\n    };\n    \n    function updateSliderImage() {\n        if (imageList.length && imageList[currentImageIndex]) {\n            $(\".sie-modal-img\").attr(\"src\", imageList[currentImageIndex].file_url);\n            $(\".sie-modal-counter\").text((currentImageIndex + 1) + \" \/ \" + imageList.length);\n        }\n    }\n    \n    $(\".sie-modal-prev\").on(\"click\", function(e) { e.stopPropagation(); if (!imageList.length) return; currentImageIndex = (currentImageIndex - 1 + imageList.length) % imageList.length; updateSliderImage(); });\n    $(\".sie-modal-next\").on(\"click\", function(e) { e.stopPropagation(); if (!imageList.length) return; currentImageIndex = (currentImageIndex + 1) % imageList.length; updateSliderImage(); });\n    $(\".sie-modal-close, .sie-modal\").on(\"click\", function(e) { if (e.target === this || $(this).hasClass(\"sie-modal-close\")) $(\".sie-modal\").fadeOut(); });\n    \n    window.openVideoSlider = function(index) { currentVideoIndex = index; updateVideoModal(); $(\".sie-video-modal\").addClass(\"sie-open\"); };\n    \n    function updateVideoModal() {\n        if (videoList.length && videoList[currentVideoIndex]) {\n            $(\".sie-video-modal video\").attr(\"src\", videoList[currentVideoIndex].file_url);\n            $(\".sie-video-modal video\")[0].load(); $(\".sie-video-modal video\")[0].play();\n        }\n    }\n    \n    $(\".sie-video-modal-prev\").on(\"click\", function(e) { e.stopPropagation(); if (!videoList.length) return; currentVideoIndex = (currentVideoIndex - 1 + videoList.length) % videoList.length; updateVideoModal(); });\n    $(\".sie-video-modal-next\").on(\"click\", function(e) { e.stopPropagation(); if (!videoList.length) return; currentVideoIndex = (currentVideoIndex + 1) % videoList.length; updateVideoModal(); });\n    $(\".sie-video-modal-close\").on(\"click\", function() { $(\".sie-video-modal\").removeClass(\"sie-open\"); var v = $(\".sie-video-modal video\")[0]; if (v) { v.pause(); v.src = \"\"; } });\n    $(\".sie-video-modal\").on(\"click\", function(e) { if (e.target === this) { $(this).removeClass(\"sie-open\"); var v = $(this).find(\"video\")[0]; if (v) { v.pause(); v.src = \"\"; } } });\n    \n    $(document).on(\"keydown\", function(e) {\n        if ($(\".sie-modal\").is(\":visible\")) {\n            if (e.key === \"ArrowLeft\") $(\".sie-modal-prev\").trigger(\"click\");\n            if (e.key === \"ArrowRight\") $(\".sie-modal-next\").trigger(\"click\");\n            if (e.key === \"Escape\") $(\".sie-modal\").fadeOut();\n        }\n        if ($(\".sie-video-modal.sie-open\").length) {\n            if (e.key === \"ArrowLeft\") $(\".sie-video-modal-prev\").trigger(\"click\");\n            if (e.key === \"ArrowRight\") $(\".sie-video-modal-next\").trigger(\"click\");\n            if (e.key === \"Escape\") $(\".sie-video-modal-close\").trigger(\"click\");\n        }\n    });\n    \n    \/\/ ==================== FORMATA\u00c7\u00c3O DE DATA COMPLETA ====================\n    function formatFullDateTime(dateStr) {\n        if (!dateStr) return \"\";\n        var d = new Date(dateStr.replace(\/-\/g, \"\/\"));\n        var now = new Date();\n        var diffMs = now - d;\n        var diffSec = Math.floor(diffMs \/ 1000);\n        var diffMin = Math.floor(diffSec \/ 60);\n        var diffHour = Math.floor(diffMin \/ 60);\n        var diffDay = Math.floor(diffHour \/ 24);\n        \n        var hora = (\"0\" + d.getHours()).slice(-2) + \":\" + (\"0\" + d.getMinutes()).slice(-2);\n        var data = (\"0\" + d.getDate()).slice(-2) + \"\/\" + (\"0\" + (d.getMonth() + 1)).slice(-2) + \"\/\" + d.getFullYear();\n        \n        if (diffSec < 60) return \"Agora - \" + data + \" \" + hora;\n        if (diffMin < 60) return diffMin + \"min - \" + data + \" \" + hora;\n        if (diffHour < 24) return diffHour + \"h - \" + data + \" \" + hora;\n        if (diffDay === 1) return \"Ontem - \" + data + \" \" + hora;\n        if (diffDay < 7) {\n            var dias = [\"Domingo\", \"Segunda\", \"Ter\u00e7a\", \"Quarta\", \"Quinta\", \"Sexta\", \"S\u00e1bado\"];\n            return dias[d.getDay()] + \" - \" + data + \" \" + hora;\n        }\n        return data + \" \" + hora;\n    }\n    \n    function getDateLabel(dateStr) {\n        var d = new Date(dateStr.replace(\/-\/g, \"\/\"));\n        var now = new Date();\n        var today = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n        var msgDate = new Date(d.getFullYear(), d.getMonth(), d.getDate());\n        var diffDays = Math.floor((today - msgDate) \/ (1000 * 60 * 60 * 24));\n        if (diffDays === 0) return \"Hoje - \" + (\"0\" + d.getDate()).slice(-2) + \"\/\" + (\"0\" + (d.getMonth() + 1)).slice(-2) + \"\/\" + d.getFullYear();\n        if (diffDays === 1) return \"Ontem - \" + (\"0\" + d.getDate()).slice(-2) + \"\/\" + (\"0\" + (d.getMonth() + 1)).slice(-2) + \"\/\" + d.getFullYear();\n        var dias = [\"Domingo\", \"Segunda\", \"Ter\u00e7a\", \"Quarta\", \"Quinta\", \"Sexta\", \"S\u00e1bado\"];\n        if (diffDays < 7) return dias[d.getDay()] + \" - \" + (\"0\" + d.getDate()).slice(-2) + \"\/\" + (\"0\" + (d.getMonth() + 1)).slice(-2);\n        return (\"0\" + d.getDate()).slice(-2) + \"\/\" + (\"0\" + (d.getMonth() + 1)).slice(-2) + \"\/\" + d.getFullYear();\n    }\n    \n    function addMessage(msg) {\n        $messagesList.find(\".sie-empty-state\").remove();\n        \n        if (msg.created_at) {\n            var dateLabel = getDateLabel(msg.created_at);\n            if (dateLabel !== lastDateShown) {\n                lastDateShown = dateLabel;\n                $messagesList.append('<div class=\"sie-msg-date\"><span>' + dateLabel + '<\/span><\/div>');\n            }\n        }\n        \n        var isAuto = msg.is_auto_message == 1;\n        var fullTime = formatFullDateTime(msg.created_at);\n        \n        var html = \"<div class=\\\"sie-message\\\" data-id=\\\"\" + msg.id + \"\\\">\";\n        html += \"<div class=\\\"sie-msg-header\\\">\";\n        html += \"<div class=\\\"sie-msg-avatar\\\">\" + (msg.user_avatar ? \"<img src=\\\"\" + msg.user_avatar + \"\\\">\" : (msg.user_name ? msg.user_name.charAt(0).toUpperCase() : \"S\")) + \"<\/div>\";\n        html += \"<span class=\\\"sie-msg-name\\\">\" + (msg.user_name || \"Sistema\") + \"<\/span>\";\n        html += \"<span class=\\\"sie-msg-time\\\" title=\\\"\" + fullTime + \"\\\">\" + fullTime + \"<\/span>\";\n        html += \"<\/div><div class=\\\"sie-msg-bubble\" + (isAuto ? \" sie-auto-message\" : \"\") + \"\\\">\";\n        \n        if (msg.message_type === \"image\" && msg.file_url) {\n            html += \"<img src=\\\"\" + msg.file_url + \"\\\" class=\\\"sie-msg-image\\\" onclick=\\\"openImageModal('\" + msg.file_url + \"')\\\">\";\n        } else if (msg.message_type === \"video\" && msg.file_url) {\n            html += \"<div class=\\\"sie-msg-video-wrapper\\\" data-video-src=\\\"\" + msg.file_url + \"\\\"><video src=\\\"\" + msg.file_url + \"\\\" preload=\\\"metadata\\\" muted playsinline><\/video><div class=\\\"sie-msg-video-play\\\">\u25b6<\/div><\/div>\";\n        } else if (msg.message_type === \"audio\" && msg.file_url) {\n            html += \"<div class=\\\"sie-msg-audio\\\"><audio controls><source src=\\\"\" + msg.file_url + \"\\\"><\/audio><\/div>\";\n        } else if (msg.message_type === \"location\") {\n            html += \"<div class=\\\"sie-msg-text\\\">\ud83d\udccd Compartilhou localiza\u00e7\u00e3o<\/div><div class=\\\"sie-location-info\\\">\";\n            html += \"<a href=\\\"https:\/\/www.google.com\/maps?q=\" + msg.location_lat + \",\" + msg.location_lng + \"\\\" target=\\\"_blank\\\" class=\\\"sie-location-link\\\">\ud83d\udccd Ver no Google Maps<\/a>\";\n            html += \"<br><button class=\\\"sie-copy-btn sie-copy-location-btn\\\" data-lat=\\\"\" + msg.location_lat + \"\\\" data-lng=\\\"\" + msg.location_lng + \"\\\">\ud83d\udccb Copiar localiza\u00e7\u00e3o<\/button>\";\n            html += \"<\/div>\";\n        } else if (msg.file_url) {\n            html += \"<div class=\\\"sie-msg-file\\\"><div class=\\\"sie-file-icon\\\">\ud83d\udcce<\/div><div class=\\\"sie-file-info\\\"><div class=\\\"sie-file-name\\\">\" + (msg.file_name || \"Arquivo\") + \"<\/div><div class=\\\"sie-file-size\\\">\" + (msg.file_size || \"\") + \"<\/div><\/div><a href=\\\"\" + msg.file_url + \"\\\" class=\\\"sie-file-download\\\" download>Baixar<\/a><\/div>\";\n        } else if (msg.message_content) {\n            html += \"<div class=\\\"sie-msg-text\\\">\" + msg.message_content + \"<\/div>\";\n        }\n        \n        html += \"<\/div><\/div>\";\n        \n        $messagesList.append(html);\n    }\n    \n    function scrollChatBottom() { $chatBody.scrollTop($chatBody[0].scrollHeight); }\n    \n    function updateBadges(data) {\n        $(\".sie-photo-badge\").text(data.photo_count || 0);\n        $(\".sie-video-badge\").text(data.video_count || 0);\n        $(\".sie-audio-badge\").text(data.audio_count || 0);\n        $(\".sie-doc-badge\").text(data.doc_count || 0);\n        $(\".sie-file-badge\").text(data.file_count || 0);\n        $(\".sie-online-badge\").text(data.online_count || 0);\n    }\n    \n    function loadOnlineUsers() {\n        $.post(sie_data.ajax_url, { action: \"sie_get_online_users\", nonce: sie_data.nonce, room_id: sie_data.room_id }, function(response) {\n            if (response.success) { $(\".sie-online-count\").text(response.data.count || 0); $(\".sie-online-count-label\").text(response.data.count || 0); }\n        });\n    }\n    \n    function startHeartbeat() {\n        heartbeatTimer = setInterval(function() {\n            $.post(sie_data.ajax_url, {\n                action: \"sie_heartbeat\", nonce: sie_data.nonce, room_id: sie_data.room_id,\n                user_name: sie_data.user_name, user_avatar: sie_data.user_avatar,\n                user_id: sie_data.user_id, temp_user_id: sie_data.temp_user_id\n            });\n            loadOnlineUsers();\n        }, 30000);\n    }\n    \n    function stopHeartbeat() { if (heartbeatTimer) clearInterval(heartbeatTimer); }\n    function startPolling() { pollingTimer = setInterval(loadMessages, sie_data.polling_interval); }\n    function stopPolling() { if (pollingTimer) clearInterval(pollingTimer); }\n    \n    if (navigator.geolocation) {\n        navigator.geolocation.getCurrentPosition(function(p) { userLocation = { lat: p.coords.latitude, lng: p.coords.longitude }; });\n    }\n    \n    startHeartbeat();\n    loadOnlineUsers();\n    \n})(jQuery);\n        <\/script><br \/>\n<br \/>\n        <div style=\"background:#f8f9fa;border:1px solid #dee2e6;border-radius:8px;padding:20px;margin:20px 0;\">\n            <h4 style=\"margin-top:0;color:#495057;\">\ud83d\udd12 Informa\u00e7\u00f5es de Acesso<\/h4>\n            <div style=\"margin-bottom:15px;\"><strong>\ud83d\udd10 Visibilidade:<\/strong> <span class=\"sos-badge sos-badge-info\" style=\"margin-left:10px;\">Padr\u00e3o (Solicitante e Equipe)<\/span><\/div>\n                                            <\/div>\n        <br \/>\n        <div style=\"background: #fff; border: 1px solid #e0e0e0; border-radius: 8px; padding: 20px; margin: 20px 0;\">\n            <h4 style=\"margin: 0 0 15px 0; color: #333; font-size: 16px; border-bottom: 2px solid #0073aa; padding-bottom: 10px;\">\ud83d\udc41\ufe0f \u00daltimas Visualiza\u00e7\u00f5es<\/h4>\n            <div style=\"max-height: 400px; overflow-y: auto;\">\n                <ol style=\"margin: 0; padding: 0 0 0 25px; list-style-position: outside;\">\n                                            <li style=\"padding: 8px 0; border-bottom: 1px solid #f0f0f0; font-size: 14px; color: #333;\">\n                            <strong>Visitante An\u00f4nimo<\/strong>\n                            <span style=\"color: #888;\"> \u00e0s 14:34 - 26\/10\/2026<\/span>\n                                                            <span style=\"color: #0073aa; font-size: 12px;\"> \u2022 Visitante<\/span>\n                                                                                    <span style=\"color: #aaa; font-size: 11px; margin-left: 5px;\">| Primeiro acesso: \u00e0s 14:34 26\/10\/2026<\/span>\n                        <\/li>\n                                            <li style=\"padding: 8px 0; border-bottom: 1px solid #f0f0f0; font-size: 14px; color: #333;\">\n                            <strong>Visitante An\u00f4nimo<\/strong>\n                            <span style=\"color: #888;\"> \u00e0s 08:45 - 15\/09\/2026<\/span>\n                                                            <span style=\"color: #0073aa; font-size: 12px;\"> \u2022 Visitante<\/span>\n                                                                                    <span style=\"color: #aaa; font-size: 11px; margin-left: 5px;\">| Primeiro acesso: \u00e0s 08:45 15\/09\/2026<\/span>\n                        <\/li>\n                                            <li style=\"padding: 8px 0; border-bottom: 1px solid #f0f0f0; font-size: 14px; color: #333;\">\n                            <strong>Visitante An\u00f4nimo<\/strong>\n                            <span style=\"color: #888;\"> \u00e0s 22:52 - 07\/09\/2026<\/span>\n                                                            <span style=\"color: #0073aa; font-size: 12px;\"> \u2022 Visitante<\/span>\n                                                                                    <span style=\"color: #aaa; font-size: 11px; margin-left: 5px;\">| Primeiro acesso: \u00e0s 22:52 07\/09\/2026<\/span>\n                        <\/li>\n                                            <li style=\"padding: 8px 0; border-bottom: 1px solid #f0f0f0; font-size: 14px; color: #333;\">\n                            <strong>Visitante An\u00f4nimo<\/strong>\n                            <span style=\"color: #888;\"> \u00e0s 15:55 - 04\/09\/2026<\/span>\n                                                            <span style=\"color: #0073aa; font-size: 12px;\"> \u2022 Visitante<\/span>\n                                                                                    <span style=\"color: #aaa; font-size: 11px; margin-left: 5px;\">| Primeiro acesso: \u00e0s 15:55 04\/09\/2026<\/span>\n                        <\/li>\n                                            <li style=\"padding: 8px 0; border-bottom: 1px solid #f0f0f0; font-size: 14px; color: #333;\">\n                            <strong>Visitante An\u00f4nimo<\/strong>\n                            <span style=\"color: #888;\"> \u00e0s 12:15 - 01\/09\/2026<\/span>\n                                                            <span style=\"color: #0073aa; font-size: 12px;\"> \u2022 Visitante<\/span>\n                                                                                    <span style=\"color: #aaa; font-size: 11px; margin-left: 5px;\">| Primeiro acesso: \u00e0s 12:15 01\/09\/2026<\/span>\n                        <\/li>\n                                            <li style=\"padding: 8px 0; border-bottom: 1px solid #f0f0f0; font-size: 14px; color: #333;\">\n                            <strong>Visitante An\u00f4nimo<\/strong>\n                            <span style=\"color: #888;\"> \u00e0s 04:54 - 29\/08\/2026<\/span>\n                                                            <span style=\"color: #0073aa; font-size: 12px;\"> \u2022 Visitante<\/span>\n                                                                                    <span style=\"color: #aaa; font-size: 11px; margin-left: 5px;\">| Primeiro acesso: \u00e0s 04:54 29\/08\/2026<\/span>\n                        <\/li>\n                                            <li style=\"padding: 8px 0; border-bottom: 1px solid #f0f0f0; font-size: 14px; color: #333;\">\n                            <strong>Visitante An\u00f4nimo<\/strong>\n                            <span style=\"color: #888;\"> \u00e0s 19:56 - 25\/08\/2026<\/span>\n                                                            <span style=\"color: #0073aa; font-size: 12px;\"> \u2022 Visitante<\/span>\n                                                                                    <span style=\"color: #aaa; font-size: 11px; margin-left: 5px;\">| Primeiro acesso: \u00e0s 19:56 25\/08\/2026<\/span>\n                        <\/li>\n                                            <li style=\"padding: 8px 0; border-bottom: 1px solid #f0f0f0; font-size: 14px; color: #333;\">\n                            <strong>Visitante An\u00f4nimo<\/strong>\n                            <span style=\"color: #888;\"> \u00e0s 18:39 - 25\/08\/2026<\/span>\n                                                            <span style=\"color: #0073aa; font-size: 12px;\"> \u2022 Visitante<\/span>\n                                                                                    <span style=\"color: #aaa; font-size: 11px; margin-left: 5px;\">| Primeiro acesso: \u00e0s 18:39 25\/08\/2026<\/span>\n                        <\/li>\n                                            <li style=\"padding: 8px 0; border-bottom: 1px solid #f0f0f0; font-size: 14px; color: #333;\">\n                            <strong>Visitante An\u00f4nimo<\/strong>\n                            <span style=\"color: #888;\"> \u00e0s 16:18 - 25\/08\/2026<\/span>\n                                                            <span style=\"color: #0073aa; font-size: 12px;\"> \u2022 Visitante<\/span>\n                                                                                    <span style=\"color: #aaa; font-size: 11px; margin-left: 5px;\">| Primeiro acesso: \u00e0s 16:18 25\/08\/2026<\/span>\n                        <\/li>\n                                            <li style=\"padding: 8px 0; border-bottom: 1px solid #f0f0f0; font-size: 14px; color: #333;\">\n                            <strong>Visitante An\u00f4nimo<\/strong>\n                            <span style=\"color: #888;\"> \u00e0s 15:22 - 25\/08\/2026<\/span>\n                                                            <span style=\"color: #0073aa; font-size: 12px;\"> \u2022 Visitante<\/span>\n                                                                                    <span style=\"color: #aaa; font-size: 11px; margin-left: 5px;\">| Primeiro acesso: \u00e0s 15:22 25\/08\/2026<\/span>\n                        <\/li>\n                                            <li style=\"padding: 8px 0; border-bottom: 1px solid #f0f0f0; font-size: 14px; color: #333;\">\n                            <strong>Visitante An\u00f4nimo<\/strong>\n                            <span style=\"color: #888;\"> \u00e0s 22:48 - 11\/08\/2026<\/span>\n                                                            <span style=\"color: #0073aa; font-size: 12px;\"> \u2022 Visitante<\/span>\n                                                                                    <span style=\"color: #aaa; font-size: 11px; margin-left: 5px;\">| Primeiro acesso: \u00e0s 22:48 11\/08\/2026<\/span>\n                        <\/li>\n                                            <li style=\"padding: 8px 0; border-bottom: 1px solid #f0f0f0; font-size: 14px; color: #333;\">\n                            <strong>Visitante An\u00f4nimo<\/strong>\n                            <span style=\"color: #888;\"> \u00e0s 05:23 - 08\/08\/2026<\/span>\n                                                            <span style=\"color: #0073aa; font-size: 12px;\"> \u2022 Visitante<\/span>\n                                                                                    <span style=\"color: #aaa; font-size: 11px; margin-left: 5px;\">| Primeiro acesso: \u00e0s 05:23 08\/08\/2026<\/span>\n                        <\/li>\n                                    <\/ol>\n            <\/div>\n        <\/div>\n        \n<\/p><\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Ocorr\u00eancia Registrada \u2705 S.O.S &#8211; 8.7 \ud83d\udccb Dados do Solicitante: Visitante (Visitante) \ud83d\udcde Equipe: \ud83d\ude92 Bombeiros \u2705 Ocorr\u00eancia: Bombeiros \ud83d\udccb [&hellip;]<\/p>\n","protected":false},"author":0,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","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":""},"categories":[3],"tags":[],"class_list":["post-798","post","type-post","status-publish","format-standard","hentry","category--bombeiros"],"_links":{"self":[{"href":"https:\/\/7.sos.adm.br\/index.php?rest_route=\/wp\/v2\/posts\/798","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/7.sos.adm.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/7.sos.adm.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/7.sos.adm.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=798"}],"version-history":[{"count":0,"href":"https:\/\/7.sos.adm.br\/index.php?rest_route=\/wp\/v2\/posts\/798\/revisions"}],"wp:attachment":[{"href":"https:\/\/7.sos.adm.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=798"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/7.sos.adm.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=798"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/7.sos.adm.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=798"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}