1 2<!DOCTYPE html> 3<html lang="pt-BR"> 4 <head> 5 <!-- Google tag (gtag.js) -->
vendor: 68 bytes, lines 5-6
5 6 <script async src="https://www.googletagmanager.com/gtag/js?id=
6G-81LVZ46J95
vendor: 16 bytes, lines 6-7
6"></script> 7
7<script> 8
vendor: 146 bytes, lines 8-12
8window.dataLayer = window.dataLayer || []; 9 function gtag(){dataLayer.push(arguments);} 10 gtag('js', new Date()); 11 12 gtag('config', '
12G-81LVZ46J95
vendor: 8 bytes, lines 12-13
12'); 13
13</script>
13 14 15 <meta charset="UTF-8" /> 16 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 17 18 <!-- Security Headers - Applied before analytics scripts --> 19 <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://www.googletagmanager.com https://www.google-analytics.com https://ssl.google-analytics.com https://googletagmanager.com https://www.youtube.com https://youtube.com https://s.ytimg.com https://*.clarity.ms https://www.clarity.ms https://c.bing.com https://us-assets.i.posthog.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; img-src 'self' data: blob: https: http: https://*.clarity.ms https://c.bing.com; media-src 'self' blob: https:; connect-src 'self' https://www.google-analytics.com https://analytics.google.com https://stats.g.doubleclick.net https://region1.analytics.google.com https://region1.google-analytics.com https://*.supabase.co wss://*.supabase.co https://www.youtube.com https://*.clarity.ms https://www.clarity.ms https://c.clarity.ms https://c.bing.com wss://*.clarity.ms https://us.i.posthog.com https://us-assets.i.posthog.com; frame-src 'self' https://www.youtube.com https://youtube.com https://www.youtube-nocookie.com; object-src 'none'; base-uri 'self';" /> 20 <meta http-equiv="Referrer-Policy" content="strict-origin-when-cross-origin" /> 21 <meta http-equiv="X-Content-Type-Options" content="nosniff" /> 22 <!-- NOTE: X-Frame-Options must be set via HTTP response header; removed to avoid console warning --> 23 <!-- NOTE: Permissions-Policy must be set via HTTP response header; removed to avoid console warnings for unsupported features --> 24 <!-- NOTE: X-XSS-Protection is legacy and ignored by modern browsers; intentionally omitted --> 25 26 <title>Primova - Soluções em Mobilidade Urbana Inteligente</title> 27 <meta name="description" content="Soluções completas em mobilidade urbana inteligente. Primova conecta pessoas e governos com tecnologia para cidades do futuro. Digitalização de serviços públicos." /> 28 <meta name="keywords" content="mobilidade urbana, transporte público, cidades inteligentes, digitalização, governo digital, aplicativo transporte, Cittamobi" /> 29 <meta name="author" content="Primova" /> 30 <meta name="robots" content="index, follow" /> 31 <link rel="canonical" href="https://primova.com.br" /> 32 33 <!-- Google Tag Manager --> 34
34<script>
vendor: 343 bytes, lines 34-38
34(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 35 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 36 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 37 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 38 })(window,document,'script','dataLayer','
38GTM-TB25NSQX
vendor: 3 bytes, line 38
38');
38</script>
38 39 <!-- End Google Tag Manager --> 40 41 <!-- Microsoft Clarity --> 42
42<script type="text/javascript"> 43 (function(c,l,a,r,i,t,y){ 44 try { 45 c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)}; 46 47 var loadClarity = function() { 48 try { 49 t=l.createElement(r); 50 t.async=1; 51 t.src="https://www.clarity.ms/tag/"+i; 52 t.onerror=function(){console.error("[Clarity] Script load failed")}; 53 54 // Try to insert before first script 55 y=l.getElementsByTagName(r)[0]; 56 if (y && y.parentNode) { 57 y.parentNode.insertBefore(t,y); 58 console.log("[Clarity] Script injected via insertBefore"); 59 } else { 60 // Fallback: append to head 61 l.head.appendChild(t); 62 console.log("[Clarity] Script injected via appendChild"); 63 } 64 } catch(e) { 65 console.error("[Clarity] Injection error:", e); 66 } 67 }; 68 69 // Load immediately if DOM ready, otherwise wait 70 if (l.readyState === 'loading') { 71 l.addEventListener('DOMContentLoaded', loadClarity); 72 } else { 73 loadClarity(); 74 } 75 } catch(e) { 76 console.error("[Clarity] Init error:", e); 77 } 78 })(window, document, "clarity", "script", "trjvkli3ma"); 79 </script>
79 80 <!-- End Microsoft Clarity --> 81 82 <!-- Favicons da Primova --> 83 <link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96" /> 84 <link rel="icon" type="image/svg+xml" href="/favicon.svg" /> 85 <link rel="shortcut icon" href="/favicon.ico" /> 86 <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" /> 87 <link rel="manifest" href="/site.webmanifest" /> 88 <meta name="theme-color" content="#ffffff"> 89 90 <link rel="preconnect" href="https://fonts.googleapis.com"> 91 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 92 <!-- Preconnect to analytics domains for better performance --> 93 <link rel="preconnect" href="https://www.googletagmanager.com"> 94 <link rel="preconnect" href="https://www.google-analytics.com"> 95 <link rel="dns-prefetch" href="https://www.clarity.ms"> 96 <link rel="preconnect" href="https://www.clarity.ms" crossorigin> 97 <link rel="dns-prefetch" href="https://c.clarity.ms"> 98 <link rel="preconnect" href="https://c.clarity.ms" crossorigin> 99 <link rel="preload" href="https://fonts.googleapis.com/css2?family=Ubuntu:wght@300;400;500;700&display=swap" as="style" onload="this.onload=null;this.rel='stylesheet'"> 100 <noscript><link href="https://fonts.googleapis.com/css2?family=Ubuntu:wght@300;400;500;700&display=swap" rel="stylesheet"></noscript> 101 102 <meta property="og:title" content="Primova - Soluções em Mobilidade Urbana Inteligente" /> 103 <meta property="og:description" content="Soluções completas em mobilidade urbana inteligente. Conecte pessoas e governos com tecnologia para cidades do futuro." /> 104 <meta property="og:type" content="website" /> 105 <meta property="og:url" content="https://primova.com.br" /> 106 <meta property="og:image" content="https://primova.com.br/android-chrome-512x512.png?v=2" /> 107 <meta property="og:image:width" content="512" /> 108 <meta property="og:image:height" content="512" /> 109 <meta property="og:image:type" content="image/png" /> 110 111 <meta name="twitter:card" content="summary_large_image" /> 112 <meta name="twitter:site" content="@primova" /> 113 <meta name="twitter:title" content="Primova - Soluções em Mobilidade Urbana Inteligente" /> 114 <meta name="twitter:description" content="Soluções completas em mobilidade urbana inteligente para cidades do futuro." /> 115 116 <!-- CSS preload optimization to eliminate render-blocking --> 117
117<script> 118 (function() { 119 // Override Vite's CSS injection to use preload pattern 120 const originalCreateElement = document.createElement; 121 document.createElement = function(tagName) { 122 const element = originalCreateElement.call(this, tagName); 123 124 if (tagName.toLowerCase() === 'link') { 125 const originalSetAttribute = element.setAttribute; 126 element.setAttribute = function(name, value) { 127 if (name === 'rel' && value === 'stylesheet' && element.href && element.href.includes('.css')) { 128 // Convert to preload pattern 129 originalSetAttribute.call(this, 'rel', 'preload'); 130 originalSetAttribute.call(this, 'as', 'style'); 131 this.onload = function() { 132 this.onload = null; 133 this.rel = 'stylesheet'; 134 }; 135 // Add noscript fallback 136 setTimeout(() => { 137 if (this.parentNode) { 138 const noscript = document.createElement('noscript'); 139 const fallbackLink = document.createElement('link'); 140 fallbackLink.rel = 'stylesheet'; 141 fallbackLink.href = this.href; 142 noscript.appendChild(fallbackLink); 143 this.parentNode.insertBefore(noscript, this.nextSibling); 144 } 145 }, 0); 146 return; 147 } 148 originalSetAttribute.call(this, name, value); 149 }; 150 } 151 152 return element; 153 }; 154 155 // Also handle existing stylesheets 156 function optimizeExistingCss() { 157 const links = document.querySelectorAll('link[rel="stylesheet"][href*=".css"]'); 158 links.forEach(function(link) { 159 if (!link.hasAttribute('data-optimized')) { 160 const href = link.href; 161 link.setAttribute('data-optimized', 'true'); 162 link.rel = 'preload'; 163 link.as = 'style'; 164 link.onload = function() { 165 this.onload = null; 166 this.rel = 'stylesheet'; 167 }; 168 // Add noscript fallback 169 const noscript = document.createElement('noscript'); 170 const fallbackLink = originalCreateElement.call(document, 'link'); 171 fallbackLink.rel = 'stylesheet'; 172 fallbackLink.href = href; 173 noscript.appendChild(fallbackLink); 174 link.parentNode.insertBefore(noscript, link.nextSibling); 175 } 176 }); 177 } 178 179 // Run optimization 180 if (document.readyState === 'loading') { 181 document.addEventListener('DOMContentLoaded', optimizeExistingCss); 182 } else { 183 optimizeExistingCss(); 184 } 185 })(); 186 </script>
186 187
187<script type="module" crossorigin src="/assets/index-DUGYnIGR.js"></script>
187 188 <link rel="modulepreload" crossorigin href="/assets/vendor-DYACTBzZ.js"> 189 <link rel="modulepreload" crossorigin href="/assets/ui-BWgSL8f6.js"> 190 <link rel="modulepreload" crossorigin href="/assets/charts-CofyMyUx.js"> 191 <link rel="modulepreload" crossorigin href="/assets/router-a5jbAsFh.js"> 192 <link rel="modulepreload" crossorigin href="/assets/carousel-DLujva8-.js"> 193 <link rel="stylesheet" crossorigin href="/assets/index-C5MtKpsF.css"> 194
194<script defer src="/~flock.js" data-proxy-url="/~api/analytics"></script>
194<meta name="twitter:image" content="https://primova.com.br/android-chrome-512x512.png?v=2"></head> 195 196 <body> 197 <!-- Google Tag Manager (noscript) -->
vendor: 72 bytes, lines 197-198
197 198 <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
198GTM-TB25NSQX
vendor: 91 bytes, lines 198-200
198" 199 height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 200
200<!-- End Google Tag Manager (noscript) --> 201 202 <div id="root"></div> 203 </body> 204</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.