1 2 3 4 5 6<!DOCTYPE html> 7<html lang="pt-br" data-theme="autumn"> 8<head> 9 <meta charset="utf-8"> 10 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 11 <title>Hiper Saúde Ribeirão | Meus cupons</title> 12 13 14 <link rel="icon" type="image/png" href="/media/filer_public_thumbnails/filer_public/6d/f5/6df55bb4-94af-43a7-a39b-5dad07ec73d1/hsr-favicon.png__32x32_subsampling-2.png"> 15 16 17 <link rel="apple-touch-icon" href="/media/filer_public_thumbnails/filer_public/6d/f5/6df55bb4-94af-43a7-a39b-5dad07ec73d1/hsr-favicon.png__180x180_q85_replace_alpha-%230078b4_subsampling-2.jpg"> 18 19 20 21 <meta name="description" content="Hiper Saúde Ribeirão - SITE OFICIAL - Comprando o Hiper Saúde Ribeirão, concorrendo e ajudando O HOSPITAL DO CÃNCER DE BARRETOS , você pode ganhar prêmios que realizam seus sonhos! Compre de maneira segura, acompanhe os ganhadores e os sorteios AO VIVO." /> 22 <meta name="author" content="@labCorp" /> 23 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> 24 <meta name="mobile-web-app-capable" content="yes"> 25 <meta name="theme-color" content="#aabbcc"> 26 <link rel="canonical" href="https://hipersauderibeirao.com.br/meus-cupons"> 27 28 29 <meta property="og:url" content="hipersauderibeirao.com.br"/> 30 <meta property="og:type" content="website"/> 31 <meta property="og:title" content="Hiper Saúde Ribeirão"/> 32 <meta property="og:description" content="Hiper Saúde Ribeirão - SITE OFICIAL - Comprando o Hiper Saúde Ribeirão, concorrendo e ajudando O HOSPITAL DO CÃNCER DE BARRETOS , você pode ganhar prêmios que realizam seus sonhos! Compre de maneira segura, acompanhe os ganhadores e os sorteios AO VIVO."/> 33 <meta property="og:image" content="https://hipersauderibeirao.com.br/media/filer_public/73/5e/735e0758-c665-4df4-b800-d42c66ea9ce1/favhsribeirao.png"/> 34 <meta property="og:image:width" content="1200"/> 35 <meta property="og:image:height" content="630"/> 36 37 <meta property="twitter:card" content="summary_large_image"> 38 <meta property="twitter:site" content="@CAP_CMS"> 39 <meta property="twitter:title" content="Hiper Saúde Ribeirão"> 40 <meta property="twitter:description" content="Hiper Saúde Ribeirão - SITE OFICIAL - Comprando o Hiper Saúde Ribeirão, concorrendo e ajudando O HOSPITAL DO CÃNCER DE BARRETOS , você pode ganhar prêmios que realizam seus sonhos! Compre de maneira segura, acompanhe os ganhadores e os sorteios AO VIVO."> 41 42 43 <!-- Google Tag Manager --> 44
44<script>
vendor: 343 bytes, lines 44-48
44(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 45 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 46 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 47 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 48 })(window,document,'script','dataLayer','
48GTM-MJXVQLCJ
vendor: 3 bytes, line 48
48');
48</script>
48 49 <!-- End Google Tag Manager --> 50 51 52
52<script src="/static/django_htmx/htmx.min.js" defer></script>
52 53 54 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/keen-slider.min.css" /> 55 56
56<script defer src="https://cdn.jsdelivr.net/npm/@ryangjchandler/[email protected]/dist/alpine-clipboard.js"></script>
56 57
57<script defer src="https://cdn.jsdelivr.net/npm/@alpinejs/[email protected]/dist/cdn.min.js"></script>
57 58
58<script defer src="https://cdn.jsdelivr.net/npm/@alpinejs/[email protected]/dist/cdn.min.js"></script>
58 59
59<script defer src="https://unpkg.com/[email protected]/dist/ext/alpine-morph.js"></script>
59 60
60<script defer src="https://cdn.jsdelivr.net/npm/[email protected]/keen-slider.min.js"></script>
60 61 62 <link defer="defer" rel="stylesheet" href="/static/dist/main-CGVFIIuG.css" />
63<script type="module" crossorigin="" defer="defer" src="/static/dist/main-AGGPPFfv.js"></script>
63 64 65 66 <style> 67 /* Desktop (>=1024px) */ 68@media screen and (min-width: 1024px){ 69 70 /* ================================ 71 HERO (imagem e fundo) 72 ================================= */ 73 #hero div[id="heroImage"][style^="background-image"]{ 74 background-position: top center !important; 75 background-repeat: no-repeat !important; 76 background-size: contain !important; 77 } 78 79 /* Fundo branco apenas na área do hero */ 80 #hero, #hero .hero{ 81 background-color: #fff !important; 82 } 83} 84 85 86/* ================================ 87 CONTEÃDO ADMIN (logo abaixo do hero) 88 ================================= */ 89.admin-content.py-10{ 90 padding-block: 0 !important; 91 padding-top: 0 !important; 92 padding-bottom: 0 !important; 93} 94 95 96/* ================================ 97 IMAGENS ESPECÃFICAS (Ribeirão) 98 ================================= */ 99img[src*="hsr-post-elephant.png"], 100img[alt*="Hiper Saúde Ribeirão"]{ 101 display: block !important; 102 margin: 0 auto !important; 103 max-width: 100%; 104 height: auto; 105} 106 107/* ================================ 108 FAQ (tÃtulo e parágrafo) 109 ================================= */ 110section#faq > h2{ 111 text-align: center !important; 112 display: block; 113 margin: 0 auto 6px !important; 114} 115section#faq > p{ 116 text-align: center !important; 117 margin: 0 auto 16px !important; 118 max-width: 36rem; 119} 120 121/* ================================ 122 PARÃGRAFO LEGAL DO RODAPà 123 ================================= */ 124div.container.mx-auto.grid.grid-cols-subgrid.grid-rows-subgrid.md\:grid-cols-3.lg\:grid-cols-4.gap-4.w-full.text-white.text-sm.pt-4.p-3.md\:pt-0 125 > div.col-span-3.md\:col-span-4.text-xs.pt-5{ 126 text-align: justify !important;
127 text-justify: inter-word; 128 hyphens: auto; 129 overflow-wrap: anywhere; 130} 131 132/* ================================ 133 BLOCO DESTACADO DO RODAPà (texto) 134 ================================= */ 135div.col-span-2.md\:col-span-3.order-5.text-sm.pointer-events-none{ 136 display: block; 137 width: 100%; 138 text-align: center !important; 139 font-weight: 700 !important; 140} 141 142/* sua regra que funcionou, mantendo aqui para referência */ 143.\-mt-\[20px\]{ margin-top: -0px !important; } 144 145/* Mobile: < 1024px */ 146@media (max-width: 1023px){ 147 #checkout-widget--panel{ 148 border-radius: 0 !important; 149 } 150} 151 152 :root { 153 154 --color-accent: #0078b4; 155 --color-primary: #0078b4; 156 --color-secondary: #004b70; 157 --color-progress-bar: #00DF2B; 158 --color-widget_math_from: #fb2c36; 159 --color-widget_math_to: #9f0712; 160 --color-widget_math_hover: #fb2c36; 161 --color-widget_button_from: #FFCC00; 162 --color-widget_button_to: #E69600; 163 --color-widget_button_hover: #FFCC00; 164 --color-primary-content: #ffffff; 165 --color-secondary-content: #ffffff; 166 167 } 168 169 </style> 170</head> 171<body hx-headers='{"x-csrftoken": "5UdVcKMhYnlMyXA3cayz8PBKt8cKWFY11BpuJEEoEkvjCJxdVCfZ1jWkxscCfjP1"}'> 172 173<!-- Google Tag Manager (noscript) -->
vendor: 68 bytes, lines 173-174
173 174<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
174GTM-MJXVQLCJ
vendor: 83 bytes, lines 174-175
174" 175height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
176<!-- End Google Tag Manager (noscript) --> 177 178 179 180 181<div class="w-full mx-auto uppercase p-3 text-center text-white bg-[var(--color-secondary)]" 182 x-data="countdown('2026-09-27T10:00:00')" @tabs:changed.window="updateRemainingTime($event.detail.item.end_date);"> 183 <div class="relative container mx-auto grid justify-items-center items-center"> 184 <div class=" text-white rounded text-xs md:text-base"> 185 186 <template x-if="remainingTime > 0"> 187 <div class="flex justify-center gap-1"> 188 <div>Próximo sorteio em:</div> 189 <div class="flex justify-center gap-1"> 190 <div class="font-bold" x-text="formatTime(remainingTime).days"></div> 191 <div class="font-bold"> 192 <span> - </span> 193 <span x-text="formatTime(remainingTime).hours"></span> 194 <span>:</span> 195 <span x-text="formatTime(remainingTime).minutes"></span> 196 <span>:</span> 197 <span x-text="formatTime(remainingTime).seconds"></span> 198 </div> 199 </div> 200 </div> 201 </template> 202 <template x-if="remainingTime <= 0"> 203 <div> 204 <div>Fique ligado no próximo sorteio!</div> 205 </div> 206 </template> 207 208 </div> 209 <div class="absolute right-10 hidden text-white md:block"> 210 <div class="flex gap-4"> 211 212 <div class="rounded-full p-0 flex items-center justify-center"> 213 <a href="https://www.instagram.com/hipersauderibeirao/?hl=en" title="Instagram" target="_blank"> 214 <svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" viewBox="0 0 20 20"><rect width="20" height="20" fill="none"/><path fill="currentColor" d="M13 10a3 3 0 1 1-6 0q.001-.257.049-.5H6v3.997c0 .278.225.503.503.503h6.995a.503.503 0 0 0 .502-.503V9.5h-1.049q.048.243.049.5m-3 2a2 2 0 1 0-.001-4.001A2 2 0 0 0 10 12m2.4-4.1h1.199a.3.3 0 0 0 .301-.3V6.401a.3.3 0 0 0-.301-.301H12.4a.3.3 0 0 0-.301.301V7.6c.001.165.136.3.301.3M10 .4A9.6 9.6 0 0 0 .4 10a9.6 9.6 0 0 0 9.6 9.6a9.6 9.6 0 0 0 9.6-9.6A9.6 9.6 0 0 0 10 .4m5 13.489C15 14.5 14.5 15 13.889 15H6.111C5.5 15 5 14.5 5 13.889V6.111C5 5.5 5.5 5 6.111 5h7.778C14.5 5 15 5.5 15 6.111z"/></svg> 215 </a> 216 </div> 217 218 <div class="rounded-full p-0 flex items-center justify-center"> 219 <a href="https://web.facebook.com/hipersauderibeirao/" title="Facebook" target="_blank"> 220 <svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" viewBox="0 0 20 20"><rect width="20" height="20" fill="none"/><path fill="currentColor" d="M10 .4C4.698.4.4 4.698.4 10s4.298 9.6 9.6 9.6s9.6-4.298 9.6-9.6S15.302.4 10 .4m2.274 6.634h-1.443c-.171 0-.361.225-.361.524V8.6h1.805l-.273 1.486H10.47v4.461H8.767v-4.461H7.222V8.6h1.545v-.874c0-1.254.87-2.273 2.064-2.273h1.443z"/></svg> 221 </a> 222 </div> 223 224 <div class="rounded-full p-0 flex items-center justify-center"> 225 <a href="https://www.youtube.com/channel/UCrW-rePj-1k5ZfKgsh_Wuww" title="Youtube" target="_blank"> 226 <svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" viewBox="0 0 20 20"><rect width="20" height="20" fill="none"/><path fill="currentColor" d="M11.603 9.833L9.357 8.785C9.161 8.694 9 8.796 9 9.013v1.974c0 .217.161.319.357.228l2.245-1.048c.197-.092.197-.242.001-.334M10 .4C4.698.4.4 4.698.4 10s4.298 9.6 9.6 9.6s9.6-4.298 9.6-9.6S15.302.4 10 .4m0 13.5c-4.914 0-5-.443-5-3.9s.086-3.9 5-3.9s5 .443 5 3.9s-.086 3.9-5 3.9"/></svg> 227 </a> 228 </div> 229 230 </div> 231 </div> 232 </div> 233</div> 234 235 236 237 238<style> 239 .navbar-bg { 240 background: url(/media/filer_public/b8/10/b8108e6b-dae3-4151-bdc3-e0a0b6611b10/hsr-menu_bg.png) no-repeat center center; 241 background-size: cover; 242 } 243 /* menu desktop: logo nao encolhe e titulos nao quebram no meio */ 244 @media (min-width: 1024px) { 245 .logo-header { 246 flex-shrink: 0; 247 } 248 .menu-header-desktop > li { 249 white-space: nowrap; 250 } 251 /* modo compacto: so ativa quando o menu tem 7+ itens */ 252 .menu-header-desktop:has(> li:nth-child(7)) { 253 margin-left: 0.25rem; 254 margin-right: 0.25rem; 255 padding-left: 0; 256 padding-right: 0; 257 } 258 .menu-header-desktop:has(> li:nth-child(7)) > li > a { 259 padding-left: 0.2rem; 260 padding-right: 0.2rem; 261 font-size: 0.7rem; 262 } 263 .navbar:has(.menu-header-desktop > li:nth-child(7)) .logo-header img { 264 max-width: 136px; 265 height: auto; 266 } 267 } 268 @media (min-width: 1280px) { 269 /* header mais largo que o container padrao (que tem !important no css buildado): 270 logo vai pra esquerda, botoes pra direita e o menu respira no meio */ 271 .navbar-bg .container:has(.menu-header-desktop > li:nth-child(7)) { 272 max-width: 1300px !important; 273 } 274 .menu-header-desktop:has(> li:nth-child(7)) { 275 margin-left: 1rem; 276 margin-right: 1rem; 277 } 278 .menu-header-desktop:has(> li:nth-child(7)) > li > a { 279 padding-left: 0.6rem; 280 padding-right: 0.6rem; 281 font-size: 0.75rem; 282 } 283 .navbar:has(.menu-header-desktop > li:nth-child(7)) .logo-header img { 284 max-width: none; 285 } 286 } 287 @media (min-width: 1440px) { 288 .navbar-bg .container:has(.menu-header-desktop > li:nth-child(7)) { 289 max-width: 1380px !important; 290 } 291 .menu-header-desktop:has(> li:nth-child(7)) > li > a { 292 padding-left: 0.75rem; 293 padding-right: 0.75rem; 294 } 295 } 296</style> 297 298<div class="w-full mx-auto navbar-bg relative"> 299 <div class="container mx-auto"> 300 <div class="navbar px-3 h-[100px] md:h-[140px] flex items-center justify-start lg:justify-between"> 301 <div class="lg:hidden mr-4"> 302 <div class="dropdown"> 303 <div tabindex="0" role="button" class="btn btn-ghost btn-circle"> 304 <svg xmlns="http://www.w3.org/2000/svg" class="h-7 w-7 text-white" fill="none" viewBox="0 0 24 24" stroke="currentColor"> 305 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h7" /> 306 </svg> 307 </div> 308 <ul tabindex="0" class="menu dropdown-content bg-[var(--color-accent)] rounded-none z-[1] w-52 p-2"> 309 <li><a href="/meus-cupons" class="text-white">Meus TÃtulos</a></li> 310 <hr class="text-white/20 pb-3 mt-2" /> 311 312 313 <li><a href="/resultados" class="text-white">Resultados</a></li> 314 315 316 317 <li><a href="/noticias" class="text-white">NotÃcias</a></li> 318 319 320 321 <li><a href="/instituicao-beneficiada" class="text-white">Inst. Beneficiada</a></li> 322 323 324 325 <li><a href="/regulamentos-cond-gerais" class="text-white">Regulamento</a></li> 326 327 328 329 <li><a href="/politica-e-termos" class="text-white">Termos</a></li> 330 331 332 333 <li><a href="/ajuda" class="text-white">Ajuda</a></li> 334 335 336 </ul> 337 </div> 338 </div> 339 340 <div class="logo-header flex items-center pr-[15%] mx-auto lg:mx-0 lg:mr-0 lg:pr-0"> 341 <div><a href="/"><img src="/media/filer_public/b4/2c/b42c1563-163a-4866-842b-12d9930883e3/hsr-logo_v2-h70px.png" class="w-fit" alt="" srcset=""></a></div> 342 </div> 343 344 345 <ul class="menu menu-horizontal menu-header-desktop hidden lg:flex uppercase text-xs justify-center mx-4"> 346 347 <li class="relative before:absolute before:left-0 before:top-1/2 before:-translate-y-1/2 before:transform before:text-white before:mr-2"> 348 <a href="/resultados" class="text-white hover:text-[var(--color-secondary)] transition-colors duration-200 hover:bg-transparent font-bold">Resultados</a> 349 </li> 350 351 <li class="relative before:content-['|'] before:absolute before:left-0 before:top-1/2 before:-translate-y-1/2 before:transform before:text-white before:mr-2"> 352 <a href="/noticias" class="text-white hover:text-[var(--color-secondary)] transition-colors duration-200 hover:bg-transparent font-bold">NotÃcias</a> 353 </li> 354 355 <li class="relative before:content-['|'] before:absolute before:left-0 before:top-1/2 before:-translate-y-1/2 before:transform before:text-white before:mr-2"> 356 <a href="/instituicao-beneficiada" class="text-white hover:text-[var(--color-secondary)] transition-colors duration-200 hover:bg-transparent font-bold">Inst. Beneficiada</a> 357 </li> 358 359 <li class="relative before:content-['|'] before:absolute before:left-0 before:top-1/2 before:-translate-y-1/2 before:transform before:text-white before:mr-2"> 360 <a href="/regulamentos-cond-gerais" class="text-white hover:text-[var(--color-secondary)] transition-colors duration-200 hover:bg-transparent font-bold">Regulamento</a> 361 </li> 362 363 <li class="relative before:content-['|'] before:absolute before:left-0 before:top-1/2 before:-translate-y-1/2 before:transform before:text-white before:mr-2"> 364 <a href="/politica-e-termos" class="text-white hover:text-[var(--color-secondary)] transition-colors duration-200 hover:bg-transparent font-bold">Termos</a> 365 </li> 366 367 <li class="relative before:content-['|'] before:absolute before:left-0 before:top-1/2 before:-translate-y-1/2 before:transform before:text-white before:mr-2"> 368 <a href="/ajuda" class="text-white hover:text-[var(--color-secondary)] transition-colors duration-200 hover:bg-transparent font-bold">Ajuda</a> 369 </li> 370 371 </ul> 372 373 <div class="hidden lg:flex gap-x-3 flex-shrink-0 lg:gap-y-3"> 374 <a href="/#highlights" class="btn btn-xs p-3 bg-white hovr:bg-gray-300 text-base-900 rounded-full"> <span class="icon-[material-symbols--shopping-cart-outline-rounded]"></span> Comprar</a> 375 <a href="/meus-cupons" class="btn btn-xs p-3 bg-gray-50 hover:bg-gray-200 text-base-900 rounded-full"><span class="icon-[material-symbols--confirmation-number-outline]"></span> Meus TÃtulos</a> 376 </div> 377 </div> 378 </div> 379</div> 380 381 382 383 384 385<div class="bg-[var(--color-accent)] bg-blend-color-burn" style="background-image: url(/static/images/main_bg_texture-v2.png); background-size: cover; background-position: center;"> 386 <section class="container mx-auto p-3" id="account-coupons"> 387 <div class="title bg-[var(--color-secondary)] text-white font-bold text-2xl p-2 px-4 mt-7 mb-8 rounded-lg"> 388 <h2>Meus TÃtulos</h2> 389 </div> 390 <div class="my-3 text-white"> 391 392 <div class="bg-white rounded-lg p-4 text-black"> 393 394 395 <form x-data="{ 396 doc: '', 397 product_id: '', 398 doc_valid: false, 399 erro: '', 400 init() { 401 const params = new URLSearchParams(window.location.search); 402 this.doc = params.get('cpf') || ''; 403 }, 404 continuar() { 405 this.erro = ''; 406 if (!check_cpf(this.doc)) { this.erro = 'cpf'; return; } 407 const tokenEl = this.$refs.coupons_form.querySelector('[name=cf-turnstile-response]'); 408 if (!tokenEl || !tokenEl.value) { this.erro = 'captcha'; return; } 409 this.doc_valid = true; 410 } 411 }" x-ref="coupons_form" method="post" class="flex flex-col gap-3 pb-5" action="/meus-cupons" @submit.prevent="continuar()"> 412 413 <div x-show="!doc_valid"> 414 <fieldset class="w-full"> 415 <legend class="text-sm text-nowrap py-2">Digite o seu CPF para consultar</legend> 416 <input type="text" inputmode="numeric" name="doc" class="input w-full border-1 focus:outline-none text-black" placeholder="000.000.000-00" required x-mask="999.999.999-99" x-model="doc" /> 417 </fieldset> 418 419 <div x-show="erro === 'cpf'" role="alert" class="alert alert-error w-fit mt-3"> 420 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" class="h-6 w-6 shrink-0 stroke-current"> 421 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path> 422 </svg>
423 <span>CPF inválido!</span> 424 </div> 425 426 </div> 427 428 <div x-show="doc_valid" class="product-list grid grid-cols gap-4"> 429 <div class="text-center text-sm font-semibold">Clique no nome do produto abaixo para visualizar os seus tÃtulos</div> 430 431 <div @click="product_id = 'hsauderibeirao'; $nextTick(() => { $refs.coupons_form.submit() });" class="flex flex-row bg-white text-brack border-0 h-full items-center gap-3 hover:cursor-pointer"> 432 <div> 433 434 <img src="/media/filer_public/6d/f5/6df55bb4-94af-43a7-a39b-5dad07ec73d1/hsr-favicon.png" alt="Hiper Saúde Ribeirão" class="max-w-16 rounded-lg" /> 435 436 </div> 437 <div class="grow-1 font-semibold"> 438 Hiper Saúde Ribeirão 439 </div> 440 <div> 441 <span class="icon-[material-symbols--chevron-right-rounded]"></span> 442 </div> 443 </div> 444 445 </div> 446 447 <button x-show="!doc_valid" type="button" @click="continuar()" class="btn btn-secondary">Continuar</button> 448 449 <div x-show="!doc_valid" 450 class="cf-turnstile w-fit bg-[var(--color-accent)]" 451 data-sitekey="0x4AAAAAAB0UcOnBFUC15S4B" 452 data-theme="auto" 453 data-size="normal" 454 ></div> 455 456 <div x-show="erro === 'captcha'" role="alert" class="alert alert-error w-fit"> 457 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" class="h-6 w-6 shrink-0 stroke-current"> 458 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path> 459 </svg> 460 <span>Aguarde a validação acima antes de continuar.</span> 461 </div> 462 463 464 <input type="hidden" name="csrfmiddlewaretoken" value="5UdVcKMhYnlMyXA3cayz8PBKt8cKWFY11BpuJEEoEkvjCJxdVCfZ1jWkxscCfjP1"> 465 466 <input type="hidden" name="doc" :value="doc" /> 467 <input type="hidden" name="product_id" :value="product_id" value="ovo" /> 468 <input type="hidden" name="page" value="" /> 469 </form> 470 471 </div> 472 473 </div> 474 </section> 475</div> 476 477 478 479 480<section class="container flex flex-col relative pt-10 z-20 px-3 pointer-events-none" id="logos">
481 <div class="grid grid-cols-2 md:grid-cols-4 gap-5"> 482 <div class="col-span-2 md:col-span-1 order-2 md:order-1 px-5 md:px-1 pointer-events-auto"> 483 <a href=""><img src="https://l4-files.s3.sa-east-1.amazonaws.com/hsauderibeirao/2026/09/27/059bd6d47a0d3090ec5e77494175bdd2.jpg" alt="Hiper Saúde Ribeirão" class="rounded-lg"></a> 484 </div> 485 <div class="grid auto-rows-min col-span-3 gap-5 w-full order-1 md:order-2"> 486 487 488 <div class="bg-white order-2 rounded-lg flex items-center justify-center px-3 min-h-[130px] max-h-[130px] pointer-events-auto"> 489 490 491 <img src="/media/filer_public_thumbnails/filer_public/fb/92/fb92f7d4-5a1e-49d1-9911-50124af7b0c0/whatsapp_image_2026-08-29_at_160930.jpeg__190x100_q85_ALIAS-sponsor_crop-smart_subsampling-2.jpg" alt="KEV"> 492 493 </div> 494 495 496 <div class="bg-white order-1 md:order-2 col-span-2 md:col-span-1 rounded-lg flex items-center justify-center px-3 min-h-[130px] max-h-[130px] pointer-events-auto"> 497 498 499 <img src="/media/filer_public_thumbnails/filer_public/5b/dd/5bdd7c58-11b2-4406-9d22-4ef0656cd84b/hsr-sponsor-2.png__190x100_q85_ALIAS-sponsor_crop-smart_subsampling-2.jpg" alt="HSR"> 500 501 </div> 502 503 504 <div class="bg-white order-2 rounded-lg flex items-center justify-center px-3 min-h-[130px] max-h-[130px] pointer-events-auto"> 505 506 507 <img src="/media/filer_public_thumbnails/filer_public/e7/75/e7755887-9e57-4b20-bdb4-3b434a89ae20/hsr-sponsor-3.png__190x100_q85_ALIAS-sponsor_crop-smart_subsampling-2.jpg" alt="HA"> 508 509 </div> 510 511 <div class="col-span-2 md:col-span-3 order-5 text-sm pointer-events-none"> 512 <p>VOCà PODE AJUDAR O HOSPITAL DE CÃNCER DE BARRETOS COMPRANDO O HIPER SAÃDE RIBEIRÃO E CEDENDO O DIREITO DE RESGATE.</p> 513 </div> 514 </div> 515 516 </div> 517</section> 518 519<div class="bg-[var(--color-accent)] items-center justify-center flex relative mb-[40px] lg:mb-0 -mt-[40px] md:mt-[20px] lg:-mt-[80px] z-10 pointer-events-auto px-3 py-10 md:py-6"> 520 <div class="container mx-auto grid grid-cols-subgrid grid-rows-subgrid md:grid-cols-3 lg:grid-cols-4 gap-4 w-full text-white text-sm pt-4 p-3 md:pt-0"> 521 <div class="col-start-1 col-span-3 lg:col-start-2 lg:col-span-3 flex flex-col md:flex-row justify-between pointer-events-auto"> 522 (16) 3623-0109 <a href="mailto:[email protected]">[email protected]</a> Av. Independência, 1262 - Centro, Ribeirão Preto - SP 523 </div> 524 <div class="col-start-1 col-span-3 lg:col-start-2 lg:col-span-1 flex flex-col md:flex-row gap-3"> 525 526 </div> 527 528 <div class="col-start-1 col-span-3 lg:col-start-2 lg:col-span-1 flex flex-col md:flex-row gap-3"> 529 <div class="mt-5 flex items-center gap-3 flex-wrap lg:flex-nowrap badges"> 530 531 <a rel="noopener" class="inline-flex items-center" href="https://l4.digital/" target="_blank" title="Selo L4 Web"> 532 <img src="/media/filer_public/3b/4e/3b4e6514-861e-4322-b088-c33507c8b2fa/selo_l4web.png" alt="Selo L4 Web" data-seal="1"> 533 </a> 534 535 <a rel="noopener" class="inline-flex items-center" href="https://ideamaker.com.br/" target="_blank" title="Selo Idea Maker"> 536 <img src="/media/filer_public/b4/41/b441a83f-4445-40ee-949f-00b96c269ffa/seloideamaker.png" alt="Selo Idea Maker" data-seal="2"> 537 </a> 538 539 <a rel="noopener" class="inline-flex items-center" href="https://www.privacidade.com.br/portal-de-privacidade?token=a375d24b09ea4ac5121d7dd0c8eed567" target="_blank" title="Selo DPO"> 540 <img src="/media/filer_public/97/87/97879a35-9a57-4b55-93b3-4e74860f377f/selo_dpo.png" alt="Selo DPO" data-seal="3"> 541 </a> 542 543 </div> 544 </div> 545 546 <div class="col-span-3 md:col-span-4 text-xs pt-5"> 547 Sorteios decorrentes de TÃtulos de Capitalização de Pagamento Ãnico, da Modalidade Filantropia Premiável, emitidos pela KEV Capitalização. Você pode ajudar o Hospital de Câncer de Barretos comprando o Hiper Saúde Ribeirão e cedendo o direito de resgate. A aprovação deste TÃtulo pela SUSEP não implica, por parte da Autarquia, em incentivo ou recomendação a sua aquisição, representando exclusivamente, sua adequação à s normas em vigor. Antes de contratar, consulte previamente as Condições Gerais. 548 <div class="mt-5 text-end"></div> 549 </div> 550 </div> 551</div> 552 553 554 555<div x-data="{ 556 ...countdown('2026-09-27T10:00:00'), 557 isCheckoutOpen: false, 558 isMobile: window.innerWidth < 769, 559 showFooter: window.innerWidth >= 768 || window.scrollY > 500, 560 scrollTrigger: 500 561 }" 562 @resize.window.debounce.200ms="isMobile = window.innerWidth < 769" 563 @scroll.window.throttle.200ms="showFooter = !isMobile || window.scrollY > scrollTrigger" 564 @click="if (isMobile) isCheckoutOpen = true" 565 x-effect="if (!showFooter) isCheckoutOpen = false" 566 @tabs:changed.window="updateRemainingTime($event.detail.item.end_date);" > 567 568 569 <div class="fixed bottom-[65px] left-0 right-0 z-40" 570 x-show="isCheckoutOpen && isMobile" 571 @click.outside="isCheckoutOpen = false" 572 x-transition:enter="transition ease-out duration-500" 573 x-transition:enter-start="transform translate-y-full" 574 x-transition:enter-end="transform translate-y-0" 575 x-transition:leave="transition ease-in duration-500" 576 x-transition:leave-start="transform translate-y-0" 577 x-transition:leave-end="transform translate-y-full"> 578 579 <div id="checkout-widget" x-data="checkoutWidget();" :style="style" class="container mx-auto mt-0 w-full h-fit" hx-target="this" hx-ext="alpine-morph" hx-swap="morph" @htmx:after-swap="processing = false;"> 580 <div class="widget grid grid-cols-1 gap-8 top-0"> 581 <div id="checkout-widget--panel" class="col-start-1 bg-[var(--color-accent)] z-5 w-full ml-auto p-4 pt-2 pb-10 lg:pb-4 rounded-lg"> 582 583 <form x-data="TurnstileForm('0x4AAAAAAB0UcOnBFUC15S4B');" :hx-vals="JSON.stringify({ zipcode: zipcode, accepted: accepted, val
583id: valid });" x-ref="form" hx-post="/hx/checkout" x-on:submit="processing = true; accepted = false;"> 584 585 <!-- Just to compile TW --> 586 <div class="hidden"> 587 <span class="icon-[material-symbols--brightness-alert-rounded]"></span> 588 </div> 589 590 <div x-data="tabs([{'key': '572d5a52-b541-4a16-a4cc-240821104a13', 'slug': 'hsauderibeirao', 'label': 'Hiper Saúde Ribeirão', 'icon': '/media/filer_public/6d/f5/6df55bb4-94af-43a7-a39b-5dad07ec73d1/hsr-favicon.png', 'promotion_id': 'a8141fa4-f9ab-4da8-84b7-678991389581', 'legal': 'https://plataforma-cdn.ideamaker.com.br/634f9fd4-cf5f-4434-be7c-b2aab501865a/e976a0a5-620f-46b2-b78d-9e56824926fe.pdf', 'banner_desktop': '/media/filer_public/91/55/9155f40b-5605-497a-967c-db8abb6aabf9/hero_ribeirao_2709.jpg', 'banner_mobile': '/media/filer_public/85/1e/851e2313-3817-4cca-a308-6a2c8be31f70/mobile_ribeirao_2709.jpg', 'end_date': '2026-09-27T10:00:00'}], '572d5a52-b541-4a16-a4cc-240821104a13', 'a8141fa4-f9ab-4da8-84b7-678991389581')" class="w-full"> 591 <!-- Tablist só aparece se houver mais de uma --> 592 <div 593 x-show="has_multiple" 594 role="tablist" 595 class="flex gap-2 border-b border-white" 596 > 597 <template x-for="(item, idx) in items" :key="item.key"> 598 <button 599 x-ref="tab_[item.key]" 600 :ref="'tab_' + item.key" 601 role="tab" 602 type="button" 603 @click="set_active(item.key)" 604 class="px-0 py-2 text-sm border-b-2 transition-colors justify-center grow flex items-center gap-1 hover:cursor-pointer" 605 :class="is_active(item.key) 606 ? 'border-white text-white font-semibold' 607 : 'border-transparent text-gray-300 hover:text-white'" 608 x-html="item.label" 609 ></button> 610 </template> 611 </div> 612 613 <!-- Tabs --> 614 <div class="pt-4"> 615 <!-- Tab --> 616 617 618 <section x-show="is_active('572d5a52-b541-4a16-a4cc-240821104a13')" x-cloak> 619 <div class="text-white leading-5"> 620 <span class="font-bold">Hiper Saúde Ribeirão</span><br /> 621 <span class="text-sm">São 5 chances em 1 única compra!</span> 622 </div> 623 624 625 626 <progress class="progress w-full bg-white h-3 border-2 border-white mt-4" value="50" max="100" style="color: var(--color-progress-bar)"></progress> 627 <div class="text-center text-white mb-2 text-sm">Passo 1/2</div> 628 629 <div x-data="checkoutCounter('0.2', 2)" class="text-gray-600 text-2xl font-bold bg-white p-4 py-3 my-4 rounded-2xl"> 630 <div class="flex items-center"> 631 <div class="grow text-sm">Total: <span class="text-xl" x-text="total">R$ 20,0</span></div> 632 <div class="coupon-actions flex gap-3 items-center"> 633 <button type="button" class="icon-[material-symbols--do-not-disturb-on] enabled:hover:cursor-pointer bg-linear-to-b from-[var(--color-widget_math_from)] to-[var(--color-widget_math_to)] hover:to-[var(--color-widget_math_hover)] disabled:text-gray/50" @click="update(-1)" x-bind:disabled="amount <= 1"></button> 634 <span x-text="amount">2</span> 635 <button type="button" class="icon-[material-symbols--add-circle] enabled:hover:cursor-pointer bg-linear-to-b from-[var(--color-widget_math_from)] to-[var(--color-widget_math_to)] hover:to-[var(--color-widget_math_hover)] disabled:text-gray/50" @click="update(1)" x-bind:disabled="amount >= 99"></button> 636 </div> 637 </div> 638 639 <div class="coupon-incrementers justify-between flex gap-1 xl:gap-3 pt-3 text-black"> 640 <button type="button" class="btn bg-linear-to-b from-[var(--color-widget_button_from)] to-[var(--color-widget_button_to)] hover:to-[var(--color-widget_button_hover)] btn-sm flex-grow rounded-full border-0" @click="update(2)">+2 tÃtulos</button> 641 <button type="button" class="btn bg-linear-to-b from-[var(--color-widget_button_from)] to-[var(--color-widget_button_to)] hover:to-[var(--color-widget_button_hover)] btn-sm flex-grow rounded-full border-0" @click="update(5)">+5 tÃtulos</button> 642 <button type="button" class="btn bg-linear-to-b from-[var(--color-widget_button_from)] to-[var(--color-widget_button_to)] hover:to-[var(--color-widget_button_hover)] btn-sm flex-grow rounded-full border-0" @click="update(10)">+10 tÃtulos</button> 643 </div> 644 645 <input name="amount" id="id_amount" type="hidden" name="amount" value="
6450.2" x-model="value"> 646 <input name="quantity" id="id_quantity" type="hidden" name="quantity" x-model="amount"> 647 </div> 648 </section> 649 650 651 652 </div> 653 654 <input type="text" class="hidden" name="selected_index" :value="items.findIndex(i => i.key === active)"> 655 <input type="text" name="product_id" x-model="product_id" class="hidden" id="id_product_id"> 656 <input type="text" name="promotion_id" x-model="promotion_id" class="hidden" id="id_promotion_id"> 657 </div> 658 659 <p class="text-white text-base font-bold pb-3">Digite as suas informações</p> 660 661 <div class="widget-fields pb-2" x-data="CheckoutValidation(true, false);"> 662 663 <fieldset class="fieldset pb-3"> 664 <legend class="text-white text-sm">Celular</legend> 665 <input type="text" inputmode="numeric" name="mobile" class="input grow w-full border-0 focus:outline-none " placeholder="(00) 00000-0000" required id="id_mobile" x-mask="(99) 99999-9999"> 666 667 </fieldset> 668 669 <fieldset class="fieldset"> 670 <legend class="text-white text-sm">CPF <small>(Precisamos para emitir os cupons)</small></legend> 671 <label class="input w-full border-0 focus-within:outline-none "> 672 <input type="text" inputmode="numeric" name="doc" x-model="doc" @blur="validate_doc();" placeholder="000.000.000-00" required id="id_doc" x-mask="999.999.999-99"> 673 <span class="badge bg-[var(--color-secondary)] border-0 text-white badge-sm" x-show="validating_doc">Aguarde...</span> 674 </label> 675 676 <ul class="errorlist front-validation" x-show="doc_invalid"> 677 <li>CPF inválido!</li> 678 </ul> 679 </fieldset> 680 681 <fieldset class="fieldset mt-2" x-show="display_email_field();"> 682 <legend class="text-white text-sm">E-mail</legend> 683 <input x-model="email" x-ref="email_el" type="email" inputmode="email" name="email" class="input w-full border-0 focus:outline-none " id="id_email"> 684 685 </fieldset> 686 687 <fieldset class="fieldset mt-2" x-show="zipcode_required_and_valid();"> 688 <legend class="text-white text-sm">CEP<small x-show="!doc_validated"> (Digite o seu CPF)</small></legend> 689 <input x-model="zipcode" x-ref="zipcode_el" type="text" inputmode="numeric" name="zipcode" :disabled="zipcode_disabled" class="input w-full border-0 focus:outline-none " placeholder="00000-000" :required="zipcode_required_and_valid();" id="id_zipcode" x-mask="99999-999"> 690 691 </fieldset> 692 693 </div> 694 695 696 697 698 699 <div class="terms"> 700 <fieldset x-data="{ legal_url: '' }" class="fieldset pb-4" @tabs:changed.window="legal_url = $event.detail.item.legal;"> 701 <label class="label text-white text-sm pt-3"> 702 <input type="checkbox" class="checkbox checkbox-sm bg-white checked:bg-white border-0 focus-within:outline-none" x-model="accepted" @change="termsChanged()" /> 703 Eu aceito os <a :href="legal_url" target="_blank"><strong>termos de uso.</strong></a> 704 </label> 705 </fieldset> 706 707 <div x-ref="turnstile_el" class="turnstile"></div> 708 709 <div x-show="failed" class="pb-3"><ul class="errorlist"><li>Erro na validação!<br />Atualize a página para tentar novamente.</li></ul></div> 710 711 <template x-if="!processing"> 712 <button 713 class="btn bg-linear-to-b from-[var(--color-widget_button_from)] to-[var(--color-widget_button_to)] hover:to-[var(--color-widget_button_hover)] w-full disabled:from-white disabled:to-gray-400 disabled:text-gray-600 border-0 rounded-full" 714 x-html="accepted ? valid ? '<span class=\'icon-[material-symbols--arrow-circle-right-outline-rounded]\'></span> Gerar QR Code PIX' : '<span id=\'checkout-widget--panel--loader\' class=\'text-gray-600 loading loading-spinner loading-md py-4\'></span> Validação de humano...' : 'Aceite os termos...'" 715 x-bind:disabled="!accepted || !valid" 716 x-show="!failed"> 717 </button> 718 </template> 719 <template x-if="processing"> 720 <div class="text-center">
721 <span id="checkout-widget--panel--loader" class="text-white loading loading-dots loading-md py-4"></span> 722 </div> 723 </template> 724 </div> 725 <input type="hidden" name="position" value="footer"> 726 <input type="hidden" name="cf-turnstile-response" x-model="token"> 727 </form> 728 729 </div> 730 </div> 731</div> 732 733 734 </div> 735 736 737 738 <div id="sticky-footer" 739 class="w-full mx-auto p-3 uppercase text-white bg-[var(--color-secondary)] fixed bottom-0 left-0 z-50 transition-all duration-500 lg:relative lg:p-3" 740 x-show="showFooter" 741 x-transition:enter="transition ease-out duration-500" 742 x-transition:enter-start="transform translate-y-full" 743 x-transition:enter-end="transform translate-y-0" 744 x-transition:leave="transition ease-in duration-500" 745 x-transition:leave-start="transform translate-y-0" 746 x-transition:leave-end="transform translate-y-full"> 747 <div class="container relative grid grid-cols-4 lg:grid-cols-1 md:justify-items-center items-center px-3"> 748 <div class="col-span-3 text-base"> 749 750 <template x-if="remainingTime > 0"> 751 <div class="flex flex-col md:flex-row md:gap-4"> 752 <div>Próximo sorteio em:</div> 753 <div class="flex md:justify-center gap-1"> 754 <div class="font-bold" x-text="formatTime(remainingTime).days"></div> 755 <div class="font-bold"> 756 <span> - </span> 757 <span x-text="formatTime(remainingTime).hours"></span> 758 <span>:</span> 759 <span x-text="formatTime(remainingTime).minutes"></span> 760 <span>:</span> 761 <span x-text="formatTime(remainingTime).seconds"></span> 762 </div> 763 </div> 764 </div> 765 </template> 766 <template x-if="remainingTime <= 0"> 767 <div> 768 <div>Fique ligado no próximo sorteio!</div> 769 </div> 770 </template> 771 772 </div> 773 774 <div class="text-right cursor-pointer" x-show="isMobile"> 775 <span class="w-10 h-10 icon-[material-symbols--shopping-cart-outline-rounded]"></span> 776 </div> 777 778 <div class="absolute right-10 hidden text-white md:block"> 779 <div class="flex gap-4"> 780 781 <div class="rounded-full p-0 flex items-center justify-center"> 782 <a href="https://www.instagram.com/hipersauderibeirao/?hl=en" title="Instagram" target="_blank"> 783 <svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" viewBox="0 0 20 20"><rect width="20" height="20" fill="none"/><path fill="currentColor" d="M13 10a3 3 0 1 1-6 0q.001-.257.049-.5H6v3.997c0 .278.225.503.503.503h6.995a.503.503 0 0 0 .502-.503V9.5h-1.049q.048.243.049.5m-3 2a2 2 0 1 0-.001-4.001A2 2 0 0 0 10 12m2.4-4.1h1.199a.3.3 0 0 0 .301-.3V6.401a.3.3 0 0 0-.301-.301H12.4a.3.3 0 0 0-.301.301V7.6c.001.165.136.3.301.3M10 .4A9.6 9.6 0 0 0 .4 10a9.6 9.6 0 0 0 9.6 9.6a9.6 9.6 0 0 0 9.6-9.6A9.6 9.6 0 0 0 10 .4m5 13.489C15 14.5 14.5 15 13.889 15H6.111C5.5 15 5 14.5 5 13.889V6.111C5 5.5 5.5 5 6.111 5h7.778C14.5 5 15 5.5 15 6.111z"/></svg> 784 </a> 785 </div> 786 787 <div class="rounded-full p-0 flex items-center justify-center"> 788 <a href="https://web.facebook.com/hipersauderibeirao/" title="Facebook" target="_blank"> 789 <svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" viewBox="0 0 20 20"><rect width="20" height="20" fill="none"/><path fill="currentColor" d="M10 .4C4.698.4.4 4.698.4 10s4.298 9.6 9.6 9.6s9.6-4.298 9.6-9.6S15.302.4 10 .4m2.274 6.634h-1.443c-.171 0-.361.225-.361.524V8.6h1.805l-.273 1.486H10.47v4.461H8.767v-4.461H7.222V8.6h1.545v-.874c0-1.254.87-2.273 2.064-2.273h1.443z"/></svg> 790 </a> 791 </div> 792 793 <div class="rounded-full p-0 flex items-center justify-center"> 794 <a href="https://www.youtube.com/channel/UCrW-rePj-1k5ZfKgsh_Wuww" title="Youtube" target="_blank"> 795 <svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" viewB
795ox="0 0 20 20"><rect width="20" height="20" fill="none"/><path fill="currentColor" d="M11.603 9.833L9.357 8.785C9.161 8.694 9 8.796 9 9.013v1.974c0 .217.161.319.357.228l2.245-1.048c.197-.092.197-.242.001-.334M10 .4C4.698.4.4 4.698.4 10s4.298 9.6 9.6 9.6s9.6-4.298 9.6-9.6S15.302.4 10 .4m0 13.5c-4.914 0-5-.443-5-3.9s.086-3.9 5-3.9s5 .443 5 3.9s-.086 3.9-5 3.9"/></svg> 796 </a> 797 </div> 798 799 </div> 800 </div> 801 </div> 802 </div> 803 804</div> 805 806
807<script> 808/** 809 * Ajusta o banner mobile (#heroImageMobile) para: 810 * - mostrar 100% da imagem (contain) 811 * - calcular a altura proporcional à largura 812 * - atualizar também o wrapper (ex: #highlights) que hoje tem altura fixa (h-[210px]) 813 */ 814(function () { 815 const MAX_MOBILE = 1023; 816 const hero = document.getElementById("heroImageMobile"); 817 if (!hero) return; 818 // No seu HTML, o wrapper é o pai do hero e tem overflow-hidden/relative e altura fixa 819 const wrapper = 820 hero.closest("#highlights") || 821 hero.parentElement; // fallback 822 function getBgUrl(el) { 823 const bg = getComputedStyle(el).backgroundImage || ""; 824 const m = bg.match(/url\(["']?(.*?)["']?\)/i); 825 return m ? m[1] : null; 826 } 827 function apply() { 828 if (window.innerWidth > MAX_MOBILE) return; 829 const url = getBgUrl(hero); 830 if (!url) return; 831 const img = new Image(); 832 img.onload = () => { 833 const ratio = img.naturalHeight / img.naturalWidth; 834 const w = hero.clientWidth || hero.getBoundingClientRect().width; 835 if (!w || !ratio) return; 836 const h = Math.round(w * ratio); 837 // Sem corte 838 hero.style.backgroundSize = "contain"; 839 hero.style.backgroundRepeat = "no-repeat"; 840 hero.style.backgroundPosition = "center top"; 841 // Altura real (não depende de min-h-full) 842 hero.style.minHeight = "0"; 843 hero.style.height = h + "px"; 844 // IMPORTANTÃSSIMO: tira a "sobra branca" ajustando o wrapper também 845 if (wrapper) { 846 wrapper.style.height = h + "px"; 847 wrapper.style.overflow = "hidden"; 848 wrapper.style.backgroundColor = "#ffffff"; // se quiser pode trocar por azul depois 849 } 850 }; 851 img.src = url; 852 } 853 let t; 854 window.addEventListener("resize", () => { 855 clearTimeout(t); 856 t = setTimeout(apply, 150); 857 }, { passive: true }); 858 document.addEventListener("DOMContentLoaded", apply); 859 apply(); 860})(); 861</script>
861<script> 862(() => { 863 // Texto errado e texto correto 864 const WRONG = 'Digite o seu CPF'; 865 const RIGHT = 'Digite seu CEP'; 866 867 // Espaço antes do texto (use ' ') 868 const SPACE = ' '; 869 870 let scheduled = false; 871 let observer = null; 872 873 function fixText() { 874 const els = document.querySelectorAll('legend small'); 875 if (!els.length) return; 876 877 let anyChanged = false; 878 let anyWrongLeft = false; 879 880 els.forEach((el) => { 881 const current = el.textContent || ''; 882 883 // Só mexe se for esse hint (CPF/CEP) 884 if (current.includes(WRONG) || current.includes(RIGHT)) { 885 // Corrige o texto + garante 1 "espaço" antes 886 const corrected = current.replace(WRONG, RIGHT).replace(/^\s+/, ''); 887 const desired = SPACE + corrected; 888 889 // Evita reescrever igual (isso previne loop/travamento) 890 if (current !== desired) { 891 el.textContent = desired; 892 anyChanged = true; 893 } 894 895 if ((el.textContent || '').includes(WRONG)) { 896 anyWrongLeft = true; 897 } 898 } 899 }); 900 901 // Se não sobrou nada errado e a última passada não precisou mudar nada, 902 // podemos desligar o observer para não ficar consumindo CPU
903 if (!anyWrongLeft && !anyChanged && observer) { 904 observer.disconnect(); 905 observer = null; 906 } 907 } 908 909 function scheduleFix() { 910 // Debounce: agrupa várias mutações em uma execução por frame 911 if (scheduled) return; 912 scheduled = true; 913 914 requestAnimationFrame(() => { 915 scheduled = false; 916 fixText(); 917 }); 918 } 919 920 function start() { 921 fixText(); 922 923 // Observa só o checkout (mais leve); se não existir, observa o body 924 const root = document.querySelector('#checkout-widget') || document.body; 925 926 observer = new MutationObserver(scheduleFix); 927 observer.observe(root, { childList: true, subtree: true }); 928 } 929 930 // Inicia quando o DOM estiver pronto 931 if (document.readyState === 'loading') { 932 document.addEventListener('DOMContentLoaded', start); 933 } else { 934 start(); 935 } 936})(); 937</script>
937<script> 938/* Banner de cookies DPO Easy â injeção única */ 939(function addDpoEasyBanner() { 940 var SRC = 'https://cdn.cookies.dponet.com.br?bannerToken=f125a1b24f504a0a9b790aa8e8ce47e8'; 941 function inject() { 942 if (window.__dpoeasyBannerLoaded) return; 943 window.__dpoeasyBannerLoaded = true; 944 945 var div = document.getElementById('dpoeasy-banner'); 946 if (!div) { 947 div = document.createElement('div'); 948 div.id = 'dpoeasy-banner'; 949 div.style.position = 'relative'; 950 div.style.zIndex = '2147483647'; 951 document.body.insertBefore(div, document.body.firstChild); 952 } 953 954 if (!document.querySelector('script[data-dpoeasy="1"]')) { 955 var s = document.createElement('script'); 956 s.src = SRC; 957 s.async = true; 958 s.defer = true; 959 s.setAttribute('data-dpoeasy','1'); 960 document.head.appendChild(s); 961 } 962 } 963 if (document.readyState === 'loading') { 964 document.addEventListener('DOMContentLoaded', inject); 965 } else { 966 inject(); 967 } 968})(); 969</script>
969 970
971<script> 972/* Banner de cookies DPO Easy â modo compacto MOBILE */ 973document.addEventListener('DOMContentLoaded', function () { 974 function shrinkDpoMobile() { 975 if (document.getElementById('dpoeasy-mobile-shrink')) return; 976 const css = ` 977/* ===== DPO cookie â MODO COMPACTO E ACESSÃVEL NO MOBILE ===== */ 978@media (max-width: 767.98px){ 979 980 /* Paper principal do banner */ 981 #dpoeasy-banner [class^="DPOEasy-"][class*="MuiPaper-root"]{ 982 left: 8px !important; 983 right: 8px !important; 984 width: auto !important; 985 max-width: calc(100% - 16px) !important; 986 987 max-height: 72vh !important; /* altura controlada */ 988 overflow: hidden !important; 989 display: flex !important; 990 flex-direction: column !important; 991 992 padding: 10px 12px 0 !important; 993 border-radius: 12px !important; 994 995 transform: scale(.9) !important; /* leve redução */ 996 transform-origin: bottom center !important; 997 } 998 999 /* Corpo rola, mantendo espaço para os botões */ 1000 #dpoeasy-banner [class^="DPOEasy-"][class*="MuiPaper-root"] > *:not([class*="MuiDialogActions-root"]) { 1001 overflow: auto !important; 1002 -webkit-overflow-scrolling: touch !important; 1003 padding: 0 0 12px !important; 1004 margin: 0 !important; 1005 } 1006 1007 /* Botões sempre visÃveis (sticky no rodapé do card) */ 1008 #dpoeasy-banner [class*="MuiDialogActions-root"], 1009 #dpoeasy-banner [class*="MuiPaper-root"] .MuiDialogActions-root{ 1010 position: sticky !important; 1011 bottom: 0 !important; 1012 left: 0; right: 0; 1013 background: #fff !important; 1014 padding: 10px 12px calc(10px + env(safe-area-inset-bottom)) !important; 1015 margin: 0 !important; 1016 display: flex !important; 1017 gap: 8px !important; 1018 z-index: 1 !important; 1019 box-shadow: 0 -6px 10px rgba(0,0,0,.04) !important; 1020 } 1021 1022 /* Botões compactos e responsivos */ 1023 #dpoeasy-banner [class*="MuiButton-root"]{ 1024 font-size: 14px !important; 1025 padding: 10px 12px !important; 1026 text-transform: none !important; 1027 line-height: 1.2 !important; 1028 min-height: 40px !important; 1029 flex: 1 1 0 !important; /* lado a lado */ 1030 min-width: 0 !important; 1031 } 1032 1033 /* Links "Gerenciar cookies", etc. */ 1034 #dpoeasy-banner a[href*="cookies"], 1035 #dpoeasy-banner a[href*="gerenciar"], 1036 #dpoeasy-banner a[class*="MuiLink-root"]{ 1037 font-size: 12px !important; 1038 } 1039 1040 /* Telas muito baixas (ex.: iPhone SE) */ 1041 @media (max-height: 700px){ 1042 #dpoeasy-banner [class^="DPOEasy-"][class*="MuiPaper-root"]{ 1043 transform: scale(.85) !important; 1044 max-height: 78vh !important; 1045 } 1046 } 1047} 1048`; 1049 1050 const s = document.createElement('style'); 1051 s.id = 'dpoeasy-mobile-shrink'; 1052 s.textContent = css; 1053 document.head.appendChild(s); 1054 } 1055 1056 shrinkDpoMobile(); 1057 new MutationObserver(shrinkDpoMobile).observe( 1058 document.getElementById('dpoeasy-banner') || document.documentElement, 1059 { childList: true, subtree: true } 1060 ); 1061}); 1062</script>
1062 1063
1064<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
1064 1065 1066 1067 1068<div x-data="modal_batch({ strategy: 'calendar-day' })" x-init="init()"> 1069 <!-- botões de teste --> 1070 <button class="btn hidden" @click="run()">Forçar execução</button> 1071 <button class="btn hidden" @click="reset_all()">Reset)</button> 1072</div> 1073 1074</body> 1075</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.