1<!DOCTYPE html> 2<html lang="pt"> 3 <head> 4
4<script async src="//c.adsco.re" id="adscore-sdk" fetchpriority="high" onerror="window.__ADSCO_ERR__=1"></script>
4 5
5<script async src="https://wrappers.highleverage.dev/assets/wrappers/tacbi.org.unified.js" fetchpriority="high"></script>
5 6 <meta charset="UTF-8"> 7 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 8 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 9 <title>Tacbi - Contato</title> 10 <meta name="description" content="Tacbi - Entre em Contato com Nossa Equipe"> 11 <meta property="og:title" content="Tacbi - Contato"> 12 <meta property="og:description" content="Tacbi - Entre em Contato com Nossa Equipe"> 13 <meta property="og:image" content="https://tacbi.org/public/img/logo.svg"> 14 <meta property="og:url" content="https://tacbi.org/s/contact/"> 15 <meta property="og:type" content="website"> 16 <meta property="og:locale" content="pt"> 17 <link rel="canonical" href="https://tacbi.org/s/contact/"> 18 <link rel="preconnect" href="https://fonts.googleapis.com"> 19 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 20 <link href="https://fonts.googleapis.com/css2?family=Asap:ital,wght@0,100..900;1,100..900&family=Figtree:ital,wght@0,300..900;1,300..900&family=Geist:[email protected]&family=Lato:ital,wght@0,100;0,300;0,400;0,700;0,900;1,100;1,300;1,400;1,700;1,900&family=Open+Sans:ital,wght@0,300..800;1,300..800&family=Plus+Jakarta+Sans:ital,wght@0,200..800;1,200..800&family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&family=Roboto:ital,wght@0,100..900;1,100..900&display=swap" rel="stylesheet"> 21 <link rel="stylesheet" href="/public/css/css.css"> 22 </head> 23 <body> 24 <svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> 25 <defs> 26 <symbol id="icon-moreBtn" viewBox="0 0 20 4" fill="none"> 27 <path d="M2.78495 4C2.22473 4 1.75414 3.80952 1.37319 3.42857C0.992234 3.04762 0.801758 2.57703 0.801758 2.01681C0.801758 1.45658 0.992234 0.985994 1.37319 0.605042C1.75414 0.201681 2.22473 0 2.78495 0C3.34518 0 3.81576 0.201681 4.19672 0.605042C4.60008 0.985994 4.80176 1.45658 4.80176 2.01681C4.80176 2.57703 4.60008 3.04762 4.19672 3.42857C3.81576 3.80952 3.34518 4 2.78495 4Z" fill="white"/> 28 <path d="M10.1379 4C9.57767 4 9.10708 3.80952 8.72613 3.42857C8.34517 3.04762 8.1547 2.57703 8.1547 2.01681C8.1547 1.45658 8.34517 0.985994 8.72613 0.605042C9.10708 0.201681 9.57767 0 10.1379 0C10.6981 0 11.1687 0.201681 11.5497 0.605042C11.953 0.985994 12.1547 1.45658 12.1547 2.01681C12.1547 2.57703 11.953 3.04762 11.5497 3.42857C11.1687 3.80952 10.6981 4 10.1379 4Z" fill="white"/> 29 <path d="M17.4908 4C16.9306 4 16.46 3.80952 16.0791 3.4285
297C15.6981 3.04762 15.5076 2.57703 15.5076 2.01681C15.5076 1.45658 15.6981 0.985994 16.0791 0.605042C16.46 0.201681 16.9306 0 17.4908 0C18.0511 0 18.5216 0.201681 18.9026 0.605042C19.306 0.985994 19.5076 1.45658 19.5076 2.01681C19.5076 2.57703 19.306 3.04762 18.9026 3.42857C18.5216 3.80952 18.0511 4 17.4908 4Z" fill="white"/> 30 </symbol> 31 <symbol id="icon-searchSvg" viewBox="0 0 25 24" fill="none"> 32 <path d="M20.1078 21L13.8078 14.7C13.3078 15.1 12.7328 15.4167 12.0828 15.65C11.4328 15.8833 10.7411 16 10.0078 16C8.19115 16 6.65365 15.3708 5.39531 14.1125C4.13698 12.8542 3.50781 11.3167 3.50781 9.5C3.50781 7.68333 4.13698 6.14583 5.39531 4.8875C6.65365 3.62917 8.19115 3 10.0078 3C11.8245 3 13.362 3.62917 14.6203 4.8875C15.8786 6.14583 16.5078 7.68333 16.5078 9.5C16.5078 10.2333 16.3911 10.925 16.1578 11.575C15.9245 12.225 15.6078 12.8 15.2078 13.3L21.5078 19.6L20.1078 21ZM10.0078 14C11.2578 14 12.3203 13.5625 13.1953 12.6875C14.0703 11.8125 14.5078 10.75 14.5078 9.5C14.5078 8.25 14.0703 7.1875 13.1953 6.3125C12.3203 5.4375 11.2578 5 10.0078 5C8.75781 5 7.69531 5.4375 6.82031 6.3125C5.94531 7.1875 5.50781 8.25 5.50781 9.5C5.50781 10.75 5.94531 11.8125 6.82031 12.6875C7.69531 13.5625 8.75781 14 10.0078 14Z" fill="white"/> 33 </symbol> 34 <symbol id="icon-searchIcon" viewBox="0 0 25 25" fill="none"> 35 <path d="M20.1078 21.2383L13.8078 14.9383C13.3078 15.3383 12.7328 15.6549 12.0828 15.8883C11.4328 16.1216 10.7411 16.2383 10.0078 16.2383C8.19115 16.2383 6.65365 15.6091 5.39531 14.3508C4.13698 13.0924 3.50781 11.5549 3.50781 9.73828C3.50781 7.92161 4.13698 6.38411 5.39531 5.12578C6.65365 3.86745 8.19115 3.23828 10.0078 3.23828C11.8245 3.23828 13.362 3.86745 14.6203 5.12578C15.8786 6.38411 16.5078 7.92161 16.5078 9.73828C16.5078 10.4716 16.3911 11.1633 16.1578 11.8133C15.9245 12.4633 15.6078 13.0383 15.2078 13.5383L21.5078 19.8383L20.1078 21.2383ZM10.0078 14.2383C11.2578 14.2383 12.3203 13.8008 13.1953 12.9258C14.0703 12.0508 14.5078 10.9883 14.5078 9.73828C14.5078 8.48828 14.0703 7.42578 13.1953 6.55078C12.3203 5.67578 11.2578 5.23828 10.0078 5.23828C8.75781 5.23828 7.69531 5.67578 6.82031 6.55078C5.94531 7.42578 5.50781 8.48828 5.50781 9.73828C5.50781 10.9883 5.94531 12.0508 6.82031 12.9258C7.69531 13.8008 8.75781 14.2383 10.0078 14.2383Z" fill="#FB7802"/> 36 </symbol> 37 <symbol id="icon-menuIcon" viewBox="0 0 25 24" fill="none"> 38 <rect 39 x="2.2168" 40 y="2.24219" 41 width="20.5332" 42 height="2.5" 43 fill="white" 44 /> 45 <rect 46 x="2.2168" 47 y="10.3789" 48 width="6.00391" 49 height="2.5" 50 fill="white" 51 /> 52 <rect 53 x="18.1758" 54 y="13.9414" 55 width="6.80883" 56 height="2.5" 57 transform="rotate(47.237 18.1758 13.9414)" 58 fill="white" 59 /> 60 <rect 61 x="2.2168" 62 y="18.5117" 63 width="13.9297" 64 height="2.5" 65 fill="white" 66 /> 67 <circle 68 cx="14.9722" 69 cy="11.8765" 70 r="4.29053" 71 stroke="white" 72 stroke-width="2" 73 /> 74 </symbol> 75 <symbol id="icon-close" viewBox="0 0 25 25" fill="none"> 76 <path 77 d="M4.50781 4.23828L20.5078 20.2383" 78 stroke="#666666" 79 stroke-width="2" 80 stroke-linecap="round" 81 stroke-linejoin="round" 82 /> 83 <path 84 d="M4.50781 20.2383L20.5078 4.23828" 85 stroke="#666666" 86 stroke-width="2" 87 stroke-linecap="round" 88 stroke-linejoin="round" 89 /> 90 </symbol> 91 <symbol 92 id="icon-rightArrow" 93 xmlns="http://www.w3.org/2000/svg" 94 width="15" 95 height="25"
96 viewBox="0 0 15 25" 97 fill="none" 98 > 99 <path 100 d="M4.50781 6.23828L10.5078 12.2383L4.50781 18.2383" 101 stroke="#BEBEBE" 102 stroke-width="2" 103 stroke-linecap="square" 104 /> 105 </symbol> 106 <symbol id="icon-backToTop" viewBox="0 0 26 26" fill="none"> 107 <path 108 fill-rule="evenodd" 109 clip-rule="evenodd" 110 d="M12.9844 2.60156L23.5275 13.1446L21.3178 15.3543L14.5486 8.58511L14.5486 23.2325H11.4236L11.4236 8.58185L4.65111 15.3543L2.44141 13.1446L12.9844 2.60156Z" 111 fill="white" 112 /> 113 </symbol> 114 <symbol id="icon-clock" viewBox="0 0 17 17" fill="none"> 115 <g clip-path="url(#clip0_25225_9811)"> 116 <path 117 d="M8.50785 15.4076C12.1898 15.4076 15.1745 12.4228 15.1745 8.74089C15.1745 5.05899 12.1898 2.07422 8.50785 2.07422C4.82595 2.07422 1.84119 5.05899 1.84119 8.74089C1.84119 12.4228 4.82595 15.4076 8.50785 15.4076Z" 118 stroke="#999999" 119 stroke-width="2" 120 stroke-linejoin="round" 121 /> 122 <path 123 d="M8.51065 4.73828L8.51025 8.74121L11.3367 11.5677" 124 stroke="#999999" 125 stroke-width="2" 126 stroke-linecap="round" 127 stroke-linejoin="round" 128 /> 129 </g> 130 <defs> 131 <clipPath id="clip0_25225_9811"> 132 <rect 133 width="16" 134 height="16" 135 fill="white" 136 transform="translate(0.507812 0.738281)" 137 /> 138 </clipPath> 139 </defs> 140 </symbol> 141 </defs> 142 </svg> 143 <div class="headWrap"> 144 <div class="navContainer"> 145 <div class="leftSection"> 146 <a href="/" class="logo"> 147 <img class="logoImg" src="/public/img/logo.svg" alt="Logo"> 148 </a> 149 </div> 150 <div class="menuIcon"> 151 <svg> 152 <use xlink:href="#icon-menuIcon"></use> 153 </svg> 154 </div> 155 <div class="rightSection"> 156 <nav class="navMenu"> 157 <ul class="menuList"> 158 <li class="menuItem"><a class="menuLink" href="/">InÃcio</a></li> 159<li class="menuItem"><a class="menuLink" href="/c/analise-de-mercado/">Análise de Mercado</a></li> 160<li class="menuItem"><a class="menuLink" href="/c/estrategias-de-investimento/">Estratégias de Investimento</a></li> 161<li class="menuItem"><a class="menuLink" href="/c/mercado-de-acoes/">Mercado de Ações</a></li> 162<li class="menuItem"><a class="menuLink" href="/c/produtos-financeiros/">Produtos Financeiros</a></li> 163 </ul> 164 </nav> 165 <div class="searchBox"> 166 <input 167 id="pcSearchInput" 168 type="text" 169 placeholder="Buscar" 170 onkeydown="enterSearch('pcSearchInput')" 171 > 172 <button 173 id="pcSearchBtn" 174 type="button" 175 class="searchBtn" 176 onclick="jumpSearch('pcSearchInput')" 177 > 178 <svg class="searchSvg"> 179 <use xlink:href="#icon-searchSvg"></use> 180 </svg> 181 </button> 182 </div> 183 </div> 184 </div> 185 </div> 186 <div class="mobileMenu"> 187 <div class="menuContent"> 188 <div class="menuHeader"> 189 <a href="/" class="logo"> 190 <img src="/public/img/logo.svg" alt="Logo"> 191 </a> 192 <div class="closeIcon"> 193 <svg> 194 <use xlink:href="#icon-close"></use> 195 </svg> 196 </div> 197 </div> 198 <div class="mobileSearch"> 199 <div class="searchBox"> 200 <input 201 id="mobileSearchInput" 202 type="text" 203 placeholder="Buscar" 204 onkeydown="enterSearch('mobileSearchInput')" 205 > 206 <button 207 id="mobileSearchBtn" 208 type="button" 209 class="searchBtn" 210 onclick="jumpSearch('mobileSearchInput')" 211 > 212 <svg class="searchIcon"> 213 <use xlink:href="#icon-searchIcon"></use> 214 </svg> 215 </button> 216 </div> 217 </div> 218 <nav class="mobileNav"> 219 <ul class="categoryList"> 220 <li class="menuItem"><a class="menuLink" href="/">InÃcio</a></li> 221<li class="menuItem"><a class="menuLink" href="/c/analise-de-mercado/">Análise de Mercado</a></li> 222<li class="menuItem"><a class="menuLink" href="/c/estrategias-de-investimento/">Estratégias de Investimento</a></li> 223<li class="menuItem"><a class="menuLink" href="/c/mercado-de-acoes/">Mercado de Ações</a></li> 224<li class="menuItem"><a class="menuLink" href="/c/produtos-financeiros/">Produtos Financeiros</a></li> 225 </ul> 226 </nav> 227 </div> 228 <div class="menuOverlay"></div> 229 </div> 230<div class="wrap"> 231 <div class="contWrap contactPage"> 232 <div id="form-feedback" style="display: none;"></div> 233 <div class="detailsTop"> 234 <div class="moduleTitle" style="margin-bottom: 20px;"> 235 <h2 class="title">Contato</h2> 236 </div> 237 </div> 238 <div class="article"> 239 <div class="articleLeft"> 240 <div class="customTheme"> 241 <div class="contactBox"> 242 <form id="contact-form"> 243 <!-- Name --> 244 <label for="name">Nome</label> 245 <input 246 type="text" 247 id="name" 248 name="nome" 249 required 250 > 251 <!-- E-mail --> 252 <label for="email">E-mail</label> 253 <input 254 type="email" 255 id="email" 256 name="email" 257 required 258 > 259 <!-- Subject --> 260 <label for="subject">Assunto</label> 261 <input 262 type="text" 263 id="subject" 264 name="subject" 265 required 266 > 267 <!-- Message --> 268 <label for="message">Mensagem</label> 269 <textarea 270 id="message" 271 name="mensagem" 272 rows="10" 273 required 274 ></textarea> 275 <!-- Submit Button --> 276 <button type="submit" class="btn"> 277 Enviar Mensagem 278 </button> 279 </form> 280 </div> 281 </div> 282 </div> 283 </div> 284 </div> 285</div> 286<!-- Contact Page Script -->
287<script> 288 const contactForm = document.getElementById('contact-form'); 289 290 contactForm.addEventListener('submit', async (event) => { 291 event.preventDefault(); // Prevent the default form submission 292 await sendEmail(); 293 return false 294 }) 295 296 async function sendEmail() { 297 const feedbackDiv = document.getElementById('form-feedback'); 298 const submitButton = document.querySelector('.btn'); 299 const originalButtonText = submitButton.innerHTML; 300 301 // Collect form data 302 const name = document.getElementById('name').value.trim(); 303 const email = document.getElementById('email').value.trim(); 304 const subject = document.getElementById('subject').value.trim(); 305 const message = document.getElementById('message').value.trim(); 306 307 // Validate form data 308 if (!name || !email || !subject || !message) { 309 displayFeedback('Preencha todos os campos', 'error'); 310 return; 311 } 312 313 // Prepare the payload 314 const payload = { name, email, subject, message }; 315 316 try { 317 // Disable the submit button to prevent multiple submissions 318 submitButton.disabled = true; 319 submitButton.innerHTML = 'Enviando...'; 320 321 // Make the asynchronous POST request 322 const response = await fetch('/api/contact/message/', { 323 method: 'POST', 324 headers: { 'Content-Type': 'application/json' }, 325 body: JSON.stringify(payload), 326 }); 327 328 if (!response.ok) { 329 throw new Error(`Server responded with status ${response.status}`); 330 } 331 332 const data = await response.json(); 333 334 if (data.success) { 335 displayFeedback('Sua mensagem foi enviada com sucesso!', 'success'); 336 clearInputs(); // Clear the inputs 337 } else { 338 displayFeedback('Ocorreu um erro ao mandar sua mensagem.', 'error'); 339 } 340 } catch (error) { 341 console.error('Error:', error); 342 displayFeedback('Houve um problema ao mandar sua mensagem. Por favor tente novamente mais tarde.', 'error'); 343 } finally { 344 submitButton.disabled = false; 345 submitButton.innerHTML = originalButtonText; 346 } 347 } 348 349 function clearInputs() { 350 document.getElementById('name').value = ''; 351 document.getElementById('email').value = ''; 352 document.getElementById('subject').value = ''; 353 document.getElementById('message').value = ''; 354 } 355 356 function displayFeedback(message, type) { 357 const feedbackDiv = document.getElementById('form-feedback'); 358 feedbackDiv.textContent = message; 359 feedbackDiv.style.display = 'block'; 360 feedbackDiv.style.padding = '10px'; 361 feedbackDiv.style.marginTop = '10px'; 362 feedbackDiv.style.borderRadius = '5px'; 363 364 if (type === 'success') { 365 feedbackDiv.style.backgroundColor = '#d4edda'; 366 feedbackDiv.style.color = '#155724'; 367 feedbackDiv.style.border = '1px solid #c3e6cb'; 368 } else { 369 feedbackDiv.style.backgroundColor = '#f8d7da'; 370 feedbackDiv.style.color = '#721c24'; 371 feedbackDiv.style.border = '1px solid #f5c6cb'; 372 } 373 374 // Hide feedback after 5 seconds 375 setTimeout(() => { 376 feedbackDiv.style.display = 'none'; 377 }, 5000); 378 } 379</script>
379 380<footer class="footerWrap"> 381 <div class="footer"> 382 <div class="footeGuide"> 383 <a class="footLogo" href="/"> 384 <img class="footLogoImg" src="/public/img/logo.svg" alt="Logo"> 385 </a> 386 <div class="tabbar"> 387 <a href="/">InÃcio</a><div class="line">/</div><a href="/s/sobre-nos/">Sobre Nós</a><div class="line">/</div><a href="/a/">Autores</a><div class="line">/</div><a href="/s/contact/">Contato</a><div class="line">/</div><a href="/s/termos-de-uso/">Termos de Uso</a><div class="line">/</div><a href="/s/politica-de-privacidade/">PolÃtica de Privacidade</a><div class="line">/</div><a href="/s/politica-de-cookies/">PolÃtica de Cookies</a> 388 </div> 389 </div> 390 <div class="disclaimerText"> 391 As informações fornecidas neste site são apenas para fins informativos e não devem ser consideradas como aconselhamento de investimento. 392 </div> 393 </div> 394</footer> 395<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/all.min.css" rel="stylesheet">
396<script> 397 const url = new URL(window.location.href); 398 const links = document.getElementsByTagName('a'); 399 const medium = url.searchParams.get('utm_medium'); 400 const campaign = url.searchParams.get('utm_campaign'); 401 const source = url.searchParams.get('utm_source'); 402 const term = url.searchParams.get('utm_term'); 403 404 function getAdText() { 405 const lang = navigator.language || navigator.userLanguage; 406 const langMap = { 407 'pt': 'Publicidade', 408 'es': 'Publicidad', 409 'en': 'Advertisement', 410 'fr': 'Publicité', 411 'de': 'Werbung' 412 }; 413 const baseLang = (lang.split('-')[0] || 'en').toLowerCase(); 414 return langMap[baseLang] || langMap['en']; 415 } 416 417 function addAdLabel(container, adText) { 418 if (!container.querySelector('.ad-label')) { 419 container.insertAdjacentHTML('afterbegin', 420 `<div class="ad-label" style="font-size:13px;color:#888;text-align:center;margin-bottom:5px;">${adText}</div>` 421 ); 422 } 423 } 424 425 function removeAdLabel(container) { 426 const label = container.querySelector('.ad-label'); 427 if (label) { 428 label.remove(); 429 } 430 } 431 432 function updateAllAds() { 433 const adText = getAdText(); 434 const units = document.querySelectorAll('.adunit'); 435 units.forEach(unit => { 436 const unitHeight = unit.offsetHeight; 437 if (unitHeight > 40) { 438 // Ad displayed 439 addAdLabel(unit, adText); 440 // unit.style.margin = 'auto'; 441 // unit.style.marginTop = '20px'; 442 // unit.style.marginBottom = '20px'; 443 } else { 444 // Ad not displayed 445 removeAdLabel(unit); 446 unit.style.margin = ''; 447 unit.style.marginTop = ''; 448 unit.style.marginBottom = ''; 449 } 450 }); 451 } 452 453 function initAdLabelObserver() { 454 window.googletag = window.googletag || {}; 455 window.googletag.cmd = window.googletag.cmd || []; 456 457 window.googletag.cmd.push(function () { 458 if (window.googletag && window.googletag.pubads) { 459 window.googletag.pubads().addEventListener('slotRenderEnded', function (event) { 460 try { 461 updateAllAds(); 462 } catch (error) { 463 console.error('Error updating ads:', error); 464 } 465 }); 466 } 467 }); 468 469 document.addEventListener('DOMContentLoaded', updateAllAds); 470 } 471 472 document.addEventListener('DOMContentLoaded', function () { 473 let attrs = {}; 474 475 if (source) attrs.source = source; 476 477 if (campaign) attrs.campaign = campaign; 478 479 if (medium) attrs.medium = medium; 480 481 if (term) attrs.country = term; 482 483 for (let link of links) { 484 for (let attr in attrs) { 485 if (!link.href.includes('?')) { 486 link.href = link.href + '?'; 487 } else { 488 link.href = link.href + '&'; 489 } 490 491 if (attr == 'country') { 492 link.href += `utm_term=${attrs[attr]}`; 493 } else { 494 link.href += `utm_${attr}=${attrs[attr]}`; 495 } 496 } 497 } 498 499 initAdLabelObserver(); 500 }); 501 502 (function () { 503 if (typeof notFoundPage !== "undefined") { 504 console.log('Not found page is defined, ignoring preloader.') 505 return false 506 } 507 508 if ( 509 !location.pathname.includes('/p/') && 510 !location.pathname.includes('/l/') && 511 !location.pathname.includes('/m/') 512 ) { 513 console.log('preloader isnt needed on this page.') 514 return false 515 } 516 517 // Cria o overlay do preloader 518 const preloader = document.createElement('div'); 519 preloader.id = 'custom-preloader'; 520 Object.assign(preloader.style, { 521 position: 'fixed', 522 top: '0', 523 left: '0', 524 width: '100%', 525 height: '100%', 526 backgroundColor: 'rgb(255 255 255 / 96%)', // Cor de fundo atualizada 527 zIndex: '9999', 528 display: 'flex', 529 flexDirection: 'column', 530 alignItems: 'center', 531 justifyContent: 'center', 532 flexShrink: '0', 533 }); 534 535 // Cria a barra de carregamento no topo 536 const progressBarContainer = document.createElement('div'); 537 Object.assign(progressBarContainer.style, { 538 position: 'fixed', 539 top: '0', 540 left: '0', 541 width: '100%', 542 height: '4px', 543 backgroundColor: '#e0e0e0', // Fundo da barra de carregamento 544 overflow: 'hidden', 545 }); 546 547 const progressBar = document.createElement('div'); 548 Object.assign(progressBar.style, { 549 width: '0%', 550 height: '100%', 551 backgroundColor: 'var(--Theme)', // Cor da barra de carregamento 552 transition: 'width 5s linear', 553 }); 554 555 progressBarContainer.appendChild(progressBar); 556 preloader.appendChild(progressBarContainer); 557 558 // Cria o spinner central 559 const spinner = document.createElement('div'); 560 Object.assign(spinner.style, { 561 border: '8px solid #f3f3f3', 562 borderTop: `8px solid var(--Theme)`, // Cor do spinner 563 borderRadius: '50%', 564 width: '60px', 565 height: '60px', 566 animation: 'spin 2s linear infinite', 567 marginBottom: '20px', 568 }); 569 570 // Adiciona o texto "Carregando" 571 const loadingText = document.createElement('div'); 572 loadingText.innerText = '{{preloader_text}}'; 573 Object.assign(loadingText.style, { 574 fontSize: '20px', // Aumenta o tamanho da fonte 575 color: 'var(--TextPrimary);', // Cor do texto para melhor contraste 576 fontWeight: 'bold', // Aumenta o peso da fonte 577 marginBottom: '30px', // Espaçamento abaixo do texto 578 }); 579 580 // Adiciona spinner e texto ao preloader 581 preloader.appendChild(spinner); 582 preloader.appendChild(loadingText); 583 584 // Cria o badge "Site Seguro" com SVG de escudo 585 const badge = document.createElement('div'); 586 Object.assign(badge.style, { 587 position: 'fixed', 588 bottom: '20px', 589 display: 'flex', 590 alignItems: 'center', 591 backgroundColor: 'var(--Theme)', 592 color: '#ffffff', 593 padding: '12px 16px', // Aumenta o padding para dar mais espaço 594 borderRadius: '25px', // Aumenta o raio para bordas mais arredondadas 595 boxShadow: '0 4px 8px rgba(0,0,0,0.3)', // Sombra mais pronunciada 596 fontSize: '16px', // Aumenta o tamanho da fonte 597 fontWeight: 'bold', // Aumenta o peso da fonte 598 }); 599 600 // SVG de escudo fornecido, aumentado de tamanho 601 const shieldSVG = `
602 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" viewBox="0 0 512 512" style="margin-right: 8px;"> 603 <path d="M256 0c4.6 0 9.2 1 13.4 2.9L457.7 82.8c22 9.3 38.4 31 38.3 57.2c-.5 99.2-41.3 280.7-213.6 363.2c-16.7 8-36.1 8-52.8 0C57.3 420.7 16.5 239.2 16 140c-.1-26.2 16.3-47.9 38.3-57.2L242.7 2.9C246.8 1 251.4 0 256 0zm0 66.8l0 378.1C394 378 431.1 230.1 432 141.4L256 66.8s0 0 0 0z"/> 604 </svg> 605 `; 606 607 // Adiciona o SVG e o texto ao badge 608 badge.innerHTML = shieldSVG + ' {{secure_text}}'; 609 preloader.appendChild(badge); 610 611 // Adiciona keyframes para a animação do spinner 612 const styleSheet = document.createElement('style'); 613 styleSheet.type = 'text/css'; 614 styleSheet.innerText = ` 615 @keyframes spin { 616 0% { transform: rotate(0deg); } 617 100% { transform: rotate(360deg); } 618 } 619 `; 620 document.head.appendChild(styleSheet); 621 622 // Adiciona o preloader ao body 623 document.body.appendChild(preloader); 624 625 // Armazena referências globais para manipulação futura 626 window.loadingEl = preloader; 627 window.loadingTimeout = setTimeout(() => { 628 removePreloader(); 629 }, 5000); 630 631 // Inicia a animação da barra de progresso 632 setTimeout(() => { 633 progressBar.style.width = '100%'; 634 }, 100); // Pequeno delay para garantir que a transição aconteça 635 636 637 // Função para remover o preloader 638 function removePreloader() { 639 if (window.loadingEl) { 640 window.loadingEl.style.transition = 'opacity 0.5s ease'; 641 window.loadingEl.style.opacity = '0'; 642 setTimeout(() => { 643 if (window.loadingEl && window.loadingEl.parentNode) { 644 window.loadingEl.parentNode.removeChild(window.loadingEl); 645 window.loadingEl = undefined; 646 } 647 }, 500); 648 } 649 if (window.loadingTimeout) { 650 clearTimeout(window.loadingTimeout); 651 window.loadingTimeout = undefined; 652 } 653 } 654 655 // Integração com Google Publisher Tags para remover o preloader quando o anúncio for carregado 656 window.googletag = window.googletag || {}; 657 window.googletag.cmd = window.googletag.cmd || []; 658 window.googletag.cmd.push(function () { 659 if (window.googletag && window.googletag.pubads) { 660 window.googletag.pubads().addEventListener('slotRenderEnded', function (event) { 661 try { 662 console.debug('slotRenderEnded', event.slot.getAdUnitPath(), event); 663 if (event.isEmpty) { 664 // Não vendeu, remove o preloader 665 removePreloader(); 666 } 667 if (event.slot.getAdUnitPath().includes('header') || event.slot.getAdUnitPath().includes('top')) { 668 if (typeof window.loadingEl !== 'undefined') { 669 removePreloader(); 670 } 671 } 672 } catch (error) { 673 console.error(error); 674 } 675 }); 676 } 677 }); 678 })(); 679</script>
vendor: 1 bytes, line 679
679
680<script src="/public/js/main.js"></script>
vendor: 1 bytes, line 680
680
681<script defer data-domain="tacbi.org" src="https://tac.tacbi.org/js/script.hash.outbound-links.pageview-props.tagged-events.js"></script>
vendor: 1 bytes, line 681
681
682<script> 683 window.plausible = window.plausible || function () { 684 (window.plausible.q = window.plausible.q || []).push(arguments); 685 } 686</script>
686 687<!-- custom scripts --> 688</body> 689</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.