PageSourceSearch

https://hipersauderibeirao.com.br/meus-cupons

html hipersauderibeirao.com.br collected 2026-09-24 13:22:34 UTC 51,815 bytes, 1,075 lines download raw bytes

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.