1<!doctype html> 2<html lang="en"> 3 <head> 4 <meta charset="UTF-8" /> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" /> 6 7 <!-- Preconnect to backend for faster API calls --> 8 <link rel="preconnect" href="https://iovnyexapjybvvmrtpgy.supabase.co" crossorigin /> 9 <link rel="dns-prefetch" href="https://iovnyexapjybvvmrtpgy.supabase.co" /> 10 11 <!-- Favicon --> 12 <link rel="icon" type="image/png" href="/favicon.png" /> 13 14 <meta name="theme-color" content="#0a0a0a" /> 15 16 <!-- Pinta o tema do board salvo ANTES do primeiro paint (evita o flash do 17 azul padrão para quem usa outro tema). O snapshot já vem resolvido 18 para claro/escuro; o React reaplica e corrige logo em seguida. --> 19
19<script> 20 (function () { 21 try { 22 var vars = JSON.parse(localStorage.getItem('board-theme-vars') || 'null'); 23 if (!vars || typeof vars !== 'object') return; 24 var el = document.documentElement; 25 for (var k in vars) { 26 if (/^--[a-z-]+$/.test(k) && typeof vars[k] === 'string') { 27 el.style.setProperty(k, vars[k]); 28 } 29 } 30 } catch (e) { /* sem snapshot: fica o default do CSS */ } 31 })(); 32 </script>
32 33 34 <!-- SEO (defaults, overridden by react-helmet-async per page) --> 35 <title>MinerHub â Inteligência Competitiva para Anúncios</title> 36 <meta name="description" content="Mineração, análise e validação de anúncios em tempo real. Descubra ofertas vencedoras, monitore concorrentes e escale suas campanhas com dados." /> 37 <meta name="author" content="MinerHub" /> 38 39 <!-- Open Graph --> 40 <meta property="og:title" content="MinerHub â Inteligência Competitiva para Anúncios" /> 41 <meta property="og:description" content="Mineração, análise e validação de anúncios em tempo real. Descubra ofertas vencedoras, monitore concorrentes e escale suas campanhas com dados." /> 42 <meta property="og:type" content="website" /> 43 <meta property="og:url" content="https://app.getminerhub.com" /> 44 <meta property="og:site_name" content="MinerHub" /> 45 46 <!-- Twitter --> 47 <meta name="twitter:card" content="summary_large_image" /> 48 <meta name="twitter:title" content="MinerHub â Inteligência Competitiva para Anúncios" /> 49 <meta name="twitter:description" content="Mineração, análise e validação de anúncios em tempo real. Descubra ofertas vencedoras, monitore concorrentes e escale suas campanhas com dados." /> 50
50<script type="module" crossorigin src="/assets/index-D5Z3iEdy.js"></script>
50 51 <link rel="modulepreload" crossorigin href="/assets/vendor-helmet-C1O7rrm-.js"> 52 <link rel="modulepreload" crossorigin href="/assets/vendor-motion-C5FObYmw.js"> 53 <link rel="modulepreload" crossorigin href="/assets/vendor-ui-DH9CwqBQ.js"> 54 <link rel="modulepreload" crossorigin href="/assets/vendor-charts-sgZODtTB.js"> 55 <link rel="modulepreload" crossorigin href="/assets/vendor-query-S2mA_Wh8.js"> 56 <link rel="modulepreload" crossorigin href="/assets/vendor-react-B8Ra2ABZ.js"> 57 <link rel="modulepreload" crossorigin href="/assets/vendor-flow-4lyVEpXM.js"> 58 <link rel="modulepreload" crossorigin href="/assets/vendor-dnd-BVlXN6uJ.js"> 59 <link rel="stylesheet" crossorigin href="/assets/index-BMb6Tzqt.css"> 60 </head> 61 62 <body class="theme-pro"> 63 <div id="root"> 64 <!-- Inline loading spinner â shown instantly before React hydrates --> 65 <style> 66 .pre-spinner{position:fixed;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;background:#f0f2f5;z-index:9999} 67 @media(prefers-color-scheme:dark){.pre-spinner{background:#0a0a0a}} 68 .pre-spinner-box{position:relative;width:48px;height:48px} 69 .pre-spinner-box img{position:absolute;inset:0;width:100%;height:100%;-o-object-fit:contain;object-fit:contain;opacity:0;animation:ps-frame 1.6s steps(1) infinite} 70 .pre-spinner-box img:nth-child(1){animation-delay:0s} 71 .pre-spinner-box img:nth-child(2){animation-delay:.4s} 72 .pre-spinner-box img:nth-child(3){animation-delay:.8s} 73 .pre-spinner-box img:nth-child(4){animation-delay:1.2s} 74 @keyframes ps-frame{0%{opacity:1}25%,100%{opacity:0}} 75 </style> 76 <div class="pre-spinner" id="pre-spinner"> 77 <div class="pre-spinner-box"> 78 <img src="/images/spinner/s1.png" alt="" width="48" height="48"/> 79 <img src="/images/spinner/s2.png" alt="" width="48" height="48"/> 80 <img src="/images/spinner/s3.png" alt="" width="48" height="48"/> 81 <img src="/images/spinner/s4.png" alt="" width="48" height="48"/> 82 </div> 83 <p id="pre-spinner-text" style="margin-top:16px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:13px;color:#8b8fa3;letter-spacing:.02em">Loading...</p> 84 </div> 85
85<script> 86 (function(){var p=window.location.pathname,t=document.getElementById('pre-spinner-text');if(!t)return;var l='';if(p.startsWith('/pt'))l='pt';else if(p.startsWith('/es'))l='es';else{try{var s=localStorage.getItem('preferred-language');if(s==='pt'||s==='es')l=s;}catch(e){}}if(l==='pt')t.textContent='Carregando...';else if(l==='es')t.textContent='Cargando...';})(); 87 </script>
87 88 </div> 89
89<script> 90 // PWA REMOVIDO â mata qualquer Service Worker legado e limpa os caches 91 // em toda carga (sem trava de sessao). Recarrega uma unica vez se achou SW. 92 if ('serviceWorker' in navigator) { 93 navigator.serviceWorker.getRegistrations().then(function(regs) { 94 if (regs.length === 0) return; 95 Promise.all(regs.map(function(r) { return r.unregister(); })) 96 .then(function() { 97 return (window.caches ? caches.keys().then(function(names) { 98 return Promise.all(names.map(function(n) { return caches.delete(n); })); 99 }) : Promise.resolve()); 100 }) 101 .then(function() { 102 if (!sessionStorage.getItem('sw-killed')) { 103 sessionStorage.setItem('sw-killed', '1'); 104 window.location.reload(); 105 } 106 }); 107 }); 108 } 109 </script>
109 110 </body> 111</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.