No Sicoob, cooperamos pela segurança das suas finanças.

Um erro ocorreu enquanto processava o modelo.
The following has evaluated to null or missing:
==> Fieldset67243883  [in template "20102#20128#189538129" at line 811, column 8]

----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #list Fieldset67243883.getSiblings() ...  [in template "20102#20128#189538129" at line 811, column 1]
----
1<style type="text/css"> 
2/* ========================================================= 
3   PARCEIROS SIPAG - LAYOUT PRINCIPAL 
4========================================================= */ 
5 
6.sipag-parceiros { 
7  background-color: #fff; 
8  color: #003641; 
9  padding: 34px 0 56px; 
10
11 
12.sipag-parceiros > .container { 
13  max-width: 1440px; 
14  padding-left: 24px; 
15  padding-right: 24px; 
16  width: 100%; 
17
18 
19/* ========================================================= 
20   FILTROS 
21========================================================= */ 
22 
23.sipag-parceiros .parceiros-filtros-area { 
24  margin-bottom: 34px; 
25
26 
27.sipag-parceiros .parceiros-intro { 
28  color: #003641; 
29  font-size: 17px; 
30  line-height: 1.4; 
31  margin: 0 0 26px; 
32  text-align: center; 
33
34 
35.sipag-parceiros .filtros { 
36  align-items: center; 
37  display: flex; 
38  flex-wrap: wrap; 
39  gap: 12px; 
40  justify-content: center; 
41  margin: 0 auto; 
42  width: 100%; 
43
44 
45.sipag-parceiros .btn-pill { 
46  align-items: center; 
47  background-color: #fff; 
48  border: 1px solid #d9dcdf; 
49  border-radius: 10px; 
50  box-shadow: none; 
51  color: #272833; 
52  cursor: pointer; 
53  display: inline-flex; 
54  flex: 0 0 auto; 
55  font-size: 18px; 
56  font-weight: 700; 
57  justify-content: center; 
58  line-height: 1.2; 
59  min-height: 64px; 
60  min-width: 250px; 
61  padding: 14px 22px; 
62  text-align: center; 
63  text-transform: uppercase; 
64  transition: 
65    background-color .2s ease, 
66    border-color .2s ease, 
67    color .2s ease; 
68  white-space: nowrap; 
69
70 
71.sipag-parceiros .btn-pill:hover { 
72  background-color: #f5fffd; 
73  border-color: #00ae9d; 
74  color: #003641; 
75
76 
77.sipag-parceiros .btn-pill.active { 
78  background-color: #003641; 
79  border-color: #003641; 
80  color: #fff; 
81
82 
83.sipag-parceiros .btn-pill:focus { 
84  box-shadow: 0 0 0 3px rgba(0, 174, 157, .16); 
85  outline: none; 
86
87 
88/* ========================================================= 
89   BUSCA 
90========================================================= */ 
91 
92.sipag-parceiros .parceiros-busca { 
93  margin: 0 auto 56px; 
94  max-width: none; 
95  position: relative; 
96  width: 100%; 
97
98 
99.sipag-parceiros .parceiros-busca-icone { 
100  color: #00ae9d; 
101  height: 28px; 
102  left: 21px; 
103  pointer-events: none; 
104  position: absolute; 
105  top: 50%; 
106  transform: translateY(-50%); 
107  width: 28px; 
108
109 
110.sipag-parceiros .parceiros-busca-campo { 
111  background-color: #fff; 
112  border: 2px solid #00ae9d; 
113  border-radius: 7px; 
114  color: #003641; 
115  font-size: 16px; 
116  height: 68px; 
117  outline: none; 
118  padding: 0 24px 0 62px; 
119  transition: 
120    border-color .2s ease, 
121    box-shadow .2s ease; 
122  width: 100%; 
123
124 
125.sipag-parceiros .parceiros-busca-campo::placeholder { 
126  color: #b1bbc8; 
127  opacity: 1; 
128
129 
130.sipag-parceiros .parceiros-busca-campo:focus { 
131  border-color: #00ae9d; 
132  box-shadow: 0 0 0 3px rgba(0, 174, 157, .12); 
133
134 
135/* ========================================================= 
136   GRID 
137========================================================= */ 
138 
139.sipag-parceiros #grid-parceiros { 
140  align-items: stretch; 
141
142 
143.sipag-parceiros .parceiro { 
144  display: flex; 
145
146 
147/* ========================================================= 
148   CARD 
149========================================================= */ 
150 
151.sipag-parceiros .card-parceiro { 
152  background-color: #fff; 
153  border: 1px solid #dedede; 
154  border-radius: 14px; 
155  box-shadow: none; 
156  display: flex; 
157  flex-direction: column; 
158  min-height: 510px; 
159  padding: 18px; 
160  transition: 
161    border-color .2s ease, 
162    box-shadow .2s ease; 
163  width: 100%; 
164
165 
166.sipag-parceiros .card-parceiro:hover { 
167  border-color: #d1d8d7; 
168  box-shadow: 0 8px 22px rgba(0, 54, 65, .08); 
169  transform: none; 
170
171 
172/* ========================================================= 
173   LOGO 
174========================================================= */ 
175 
176.sipag-parceiros .parceiro-logo { 
177  align-items: center; 
178  display: flex; 
179  height: 255px; 
180  justify-content: center; 
181  margin-bottom: 0; 
182  overflow: hidden; 
183  width: 100%; 
184
185 
186.sipag-parceiros .parceiro-logo img { 
187  display: block; 
188  max-height: 169px; 
189  max-width: 230px; 
190  object-fit: contain; 
191  width: auto; 
192
193 
194/* ========================================================= 
195   TEXTO DO CARD 
196========================================================= */ 
197 
198.sipag-parceiros .card-parceiro h6 { 
199  color: #00ae9d; 
200  font-size: 23px; 
201  font-weight: 700; 
202  line-height: 1.25; 
203  margin: 0 0 10px; 
204
205 
206.sipag-parceiros .parceiro-segmento { 
207  color: #5b5b5b; 
208  font-size: 15px; 
209  line-height: 1.55; 
210  margin: 0 0 24px; 
211
212 
213/* ========================================================= 
214   AÇÕES DO CARD 
215========================================================= */ 
216 
217.sipag-parceiros .parceiro-acoes { 
218  display: flex; 
219  flex-direction: column; 
220  gap: 10px; 
221  margin-top: auto; 
222  width: 100%; 
223
224 
225.sipag-parceiros .btn-parceiro { 
226  align-items: center; 
227  border-radius: 9px; 
228  cursor: pointer; 
229  display: inline-flex; 
230  flex: none; 
231  font-size: 18px; 
232  font-weight: 700; 
233  justify-content: center; 
234  min-height: 62px; 
235  padding: 10px 14px; 
236  text-align: center; 
237  text-decoration: none !important; 
238  transition: 
239    background-color .2s ease, 
240    border-color .2s ease, 
241    color .2s ease; 
242  width: 100%; 
243
244 
245.sipag-parceiros .btn-site { 
246  background-color: #fff; 
247  border: 1px solid #00ae9d; 
248  color: #00ae9d; 
249
250 
251.sipag-parceiros .btn-site:hover { 
252  background-color: #f3fffd; 
253  border-color: #00ae9d; 
254  color: #008f83; 
255
256 
257.sipag-parceiros .btn-saiba { 
258  background-color: #00ae9d; 
259  border: 1px solid #00ae9d; 
260  color: #fff; 
261
262 
263.sipag-parceiros .btn-saiba:hover { 
264  background-color: #008f83; 
265  border-color: #008f83; 
266  color: #fff; 
267
268 
269/* ========================================================= 
270   NENHUM RESULTADO 
271========================================================= */ 
272 
273.sipag-parceiros .parceiros-vazio { 
274  color: #536463; 
275  font-size: 18px; 
276  margin: 40px 0; 
277  text-align: center; 
278
279 
280@media (max-width: 1199.98px) { 
281  .sipag-parceiros > .container { 
282    max-width: 1140px; 
283
284 
285  .sipag-parceiros .btn-pill { 
286    font-size: 16px; 
287    min-height: 58px; 
288    min-width: 210px; 
289
290 
291  .sipag-parceiros .card-parceiro { 
292    min-height: 545px; 
293
294 
295  .sipag-parceiros .parceiro-logo { 
296    height: 235px; 
297
298 
299  .sipag-parceiros .parceiro-logo img { 
300    max-height: 140px; 
301    max-width: 210px; 
302
303
304 
305/* ========================================================= 
306   MODAL - FUNDO 
307========================================================= */ 
308 
309.modal-parceiro-sipag { 
310  align-items: center; 
311  background-color: rgba(0, 0, 0, .55); 
312  bottom: 0; 
313  display: flex; 
314  justify-content: center; 
315  left: 0; 
316  overflow-y: auto; 
317  padding: 14px; 
318  position: fixed; 
319  right: 0; 
320  top: 0; 
321  z-index: 11000; 
322
323 
324.modal-parceiro-sipag[hidden] { 
325  display: none !important; 
326
327 
328/* ========================================================= 
329   MODAL - CONTAINER 
330========================================================= */ 
331 
332.modal-parceiro-sipag .modal-parceiro-dialog { 
333  background-color: #fff; 
334  border-radius: 18px; 
335  box-shadow: 0 16px 45px rgba(0, 54, 65, .25); 
336  margin: auto; 
337  max-width: 1265px; 
338  overflow: hidden; 
339  width: 100%; 
340
341 
342/* ========================================================= 
343   MODAL - CABEÇALHO 
344========================================================= */ 
345 
346.modal-parceiro-sipag .modal-parceiro-header { 
347  align-items: center; 
348  border-bottom: 1px solid #dfe5e4; 
349  display: flex; 
350  justify-content: space-between; 
351  min-height: 68px; 
352  padding: 12px 38px; 
353
354 
355.modal-parceiro-sipag .modal-parceiro-header h4 { 
356  color: #00ae9d; 
357  font-size: 34px; 
358  font-weight: 700; 
359  line-height: 1.2; 
360  margin: 0; 
361
362 
363/* ========================================================= 
364   MODAL - FECHAR 
365========================================================= */ 
366 
367.modal-parceiro-sipag .close-modal { 
368  align-items: center; 
369  background-color: #fff; 
370  border: 2px solid #005461; 
371  border-radius: 50%; 
372  color: #005461; 
373  cursor: pointer; 
374  display: flex; 
375  flex: 0 0 38px; 
376  font-size: 28px; 
377  font-weight: 400; 
378  height: 38px; 
379  justify-content: center; 
380  line-height: 1; 
381  padding: 0 0 3px; 
382  transition: 
383    background-color .2s ease, 
384    color .2s ease; 
385  width: 38px; 
386
387 
388.modal-parceiro-sipag .close-modal:hover { 
389  background-color: #005461; 
390  color: #fff; 
391
392 
393.modal-parceiro-sipag .close-modal:focus { 
394  box-shadow: 0 0 0 3px rgba(0, 174, 157, .2); 
395  outline: none; 
396
397 
398/* ========================================================= 
399   MODAL - CORPO 
400========================================================= */ 
401 
402.modal-parceiro-sipag .modal-parceiro-body { 
403  max-height: calc(100vh - 100px); 
404  overflow-y: auto; 
405  padding: 24px 28px 34px; 
406
407 
408/* ========================================================= 
409   MODAL - BLOCOS 
410========================================================= */ 
411 
412.modal-parceiro-sipag .modal-bloco { 
413  border: 1px solid #00ae9d; 
414  border-radius: 9px; 
415  box-sizing: border-box; 
416  margin: 0; 
417  padding: 22px 24px; 
418
419 
420.modal-parceiro-sipag .modal-bloco h6 { 
421  color: #00ae9d; 
422  font-size: 20px; 
423  font-weight: 700; 
424  line-height: 1.3; 
425  margin: 0 0 20px; 
426
427 
428/* ========================================================= 
429   DESCRIÇÃO 
430========================================================= */ 
431 
432.modal-parceiro-sipag #modalBlocoDescricao { 
433  margin-bottom: 16px; 
434  min-height: 145px; 
435
436 
437.modal-parceiro-sipag #modalDescricao, 
438.modal-parceiro-sipag #modalDescricao p { 
439  color: #004653; 
440  font-size: 21px; 
441  line-height: 1.7; 
442
443 
444.modal-parceiro-sipag #modalDescricao p { 
445  margin: 0 0 8px; 
446
447 
448.modal-parceiro-sipag #modalDescricao p:last-child { 
449  margin-bottom: 0; 
450
451 
452/* ========================================================= 
453   GRID DO MODAL 
454========================================================= */ 
455 
456.modal-parceiro-sipag .modal-detalhes-grid { 
457  display: grid; 
458  gap: 16px 20px; 
459  grid-template-columns: repeat(2, minmax(0, 1fr)); 
460
461 
462.modal-parceiro-sipag #modalBlocoSegmentos, 
463.modal-parceiro-sipag #modalBlocoTerminais { 
464  min-height: 280px; 
465
466 
467.modal-parceiro-sipag #modalBlocoContato, 
468.modal-parceiro-sipag #modalBlocoSite { 
469  min-height: 170px; 
470
471 
472/* ========================================================= 
473   SEGMENTOS DO MODAL 
474========================================================= */ 
475 
476.modal-parceiro-sipag .modal-segmentos { 
477  align-items: flex-start; 
478  display: flex; 
479  flex-wrap: wrap; 
480  gap: 12px; 
481
482 
483.modal-parceiro-sipag .modal-segmento-tag { 
484  background-color: #fafafa; 
485  border: 1px solid #cfcfcf; 
486  border-radius: 6px; 
487  color: #5d6262; 
488  display: inline-flex; 
489  font-size: 15px; 
490  font-weight: 400; 
491  line-height: 1.2; 
492  padding: 10px 12px; 
493  text-transform: uppercase; 
494
495 
496/* ========================================================= 
497   TERMINAIS 
498========================================================= */ 
499 
500.modal-parceiro-sipag #modalTerminais, 
501.modal-parceiro-sipag #modalTerminais p { 
502  color: #004653; 
503  font-size: 21px; 
504  line-height: 1.8; 
505
506 
507.modal-parceiro-sipag #modalTerminais p { 
508  margin: 0 0 6px; 
509
510 
511.modal-parceiro-sipag #modalTerminais p:last-child { 
512  margin-bottom: 0; 
513
514 
515/* ========================================================= 
516   CONTATO 
517========================================================= */ 
518 
519.modal-parceiro-sipag #modalContato { 
520  color: #004653; 
521  font-size: 21px; 
522  line-height: 1.8; 
523
524 
525.modal-parceiro-sipag #modalContato p { 
526  color: #004653; 
527  font-size: 21px; 
528  line-height: 1.8; 
529  margin: 0; 
530
531 
532.modal-parceiro-sipag #modalContato strong { 
533  color: #004653; 
534  font-weight: 400; 
535
536 
537.modal-parceiro-sipag #modalContato a { 
538  color: #00a99d; 
539  text-decoration: none; 
540
541 
542.modal-parceiro-sipag #modalContato a:hover { 
543  text-decoration: underline; 
544
545 
546/* ========================================================= 
547   WEBSITE 
548========================================================= */ 
549 
550.modal-parceiro-sipag #modalSite { 
551  font-size: 21px; 
552  line-height: 1.7; 
553
554 
555.modal-parceiro-sipag #modalSite a { 
556  color: #00a99d; 
557  overflow-wrap: anywhere; 
558  text-decoration: none; 
559
560 
561.modal-parceiro-sipag #modalSite a:hover { 
562  text-decoration: underline; 
563
564 
565/* ========================================================= 
566   RICH TEXT 
567========================================================= */ 
568 
569.modal-parceiro-sipag .modal-bloco ul, 
570.modal-parceiro-sipag .modal-bloco ol { 
571  color: #004653; 
572  margin-bottom: 0; 
573  padding-left: 20px; 
574
575 
576.modal-parceiro-sipag .modal-bloco li { 
577  color: #004653; 
578  line-height: 1.7; 
579  margin-bottom: 5px; 
580
581 
582/* ========================================================= 
583   MOBILE 
584========================================================= */ 
585 
586@media (max-width: 767.98px) { 
587  .sipag-parceiros { 
588    padding: 28px 0 40px; 
589
590 
591  .sipag-parceiros > .container { 
592    padding-left: 15px; 
593    padding-right: 15px; 
594
595 
596  .sipag-parceiros .parceiros-filtros-area { 
597    margin-bottom: 24px; 
598
599 
600  .sipag-parceiros .parceiros-intro { 
601    font-size: 16px; 
602    margin-bottom: 18px; 
603
604 
605  .sipag-parceiros .filtros { 
606    flex-wrap: nowrap; 
607    gap: 10px; 
608    justify-content: flex-start; 
609    margin-left: -15px; 
610    margin-right: -15px; 
611    overflow-x: auto; 
612    padding: 3px 15px 12px; 
613    width: auto; 
614    -webkit-overflow-scrolling: touch; 
615
616 
617  .sipag-parceiros .filtros::-webkit-scrollbar { 
618    height: 4px; 
619
620 
621  .sipag-parceiros .filtros::-webkit-scrollbar-thumb { 
622    background-color: #b5c7c5; 
623    border-radius: 10px; 
624
625 
626  .sipag-parceiros .btn-pill { 
627    border-radius: 8px; 
628    flex: 0 0 auto; 
629    font-size: 14px; 
630    min-height: 54px; 
631    min-width: 205px; 
632    padding: 12px 16px; 
633
634 
635  .sipag-parceiros .parceiros-busca { 
636    margin-bottom: 34px; 
637
638 
639  .sipag-parceiros .parceiros-busca-campo { 
640    font-size: 16px; 
641    height: 56px; 
642    padding-left: 52px; 
643
644 
645  .sipag-parceiros .parceiros-busca-icone { 
646    height: 22px; 
647    left: 18px; 
648    width: 22px; 
649
650 
651  .sipag-parceiros .card-parceiro { 
652    border-radius: 12px; 
653    min-height: auto; 
654    padding: 20px; 
655
656 
657  .sipag-parceiros .parceiro-logo { 
658    height: 200px; 
659
660 
661  .sipag-parceiros .parceiro-logo img { 
662    max-height: 130px; 
663    max-width: 200px; 
664
665 
666  .sipag-parceiros .card-parceiro h6 { 
667    font-size: 21px; 
668
669 
670  .sipag-parceiros .parceiro-segmento { 
671    font-size: 14px; 
672
673 
674  .sipag-parceiros .parceiro-acoes { 
675    flex-direction: column; 
676
677 
678  .sipag-parceiros .btn-parceiro { 
679    font-size: 17px; 
680    min-height: 54px; 
681    width: 100%; 
682
683 
684  .modal-parceiro-sipag { 
685    align-items: flex-end; 
686    padding: 0; 
687
688 
689  .modal-parceiro-sipag .modal-parceiro-dialog { 
690    border-radius: 16px 16px 0 0; 
691    max-height: 95vh; 
692
693 
694  .modal-parceiro-sipag .modal-parceiro-header { 
695    min-height: 65px; 
696    padding: 14px 20px; 
697
698 
699  .modal-parceiro-sipag .modal-parceiro-header h4 { 
700    font-size: 24px; 
701
702 
703  .modal-parceiro-sipag .close-modal { 
704    flex: 0 0 36px; 
705    height: 36px; 
706    width: 36px; 
707
708 
709  .modal-parceiro-sipag .modal-parceiro-body { 
710    max-height: calc(95vh - 65px); 
711    padding: 18px 15px 25px; 
712
713 
714  .modal-parceiro-sipag .modal-detalhes-grid { 
715    grid-template-columns: 1fr; 
716
717 
718  .modal-parceiro-sipag .modal-bloco { 
719    min-height: auto !important; 
720    padding: 20px; 
721
722 
723  .modal-parceiro-sipag #modalBlocoDescricao { 
724    min-height: auto; 
725
726 
727  .modal-parceiro-sipag .modal-bloco h6 { 
728    margin-bottom: 15px; 
729
730
731</style> 
732 
733<div class="col-12 px-0"> 
734  <section class="sipag-parceiros" id="sipag-parceiros"> 
735 
736<div class="container"> 
737 
738  <!-- ===================================================== 
739       FILTROS 
740  ====================================================== --> 
741 
742  <div 
743    class="parceiros-filtros-area" 
744    id="parceiros-filtros-area" 
745
746 
747<p class="parceiros-intro"> 
748  Filtre abaixo os segmentos que deseja visualizar: 
749</p> 
750 
751<div 
752  aria-label="Filtrar parceiros por segmento" 
753  class="filtros" 
754  id="filtros-parceiros" 
755  role="group" 
756></div> 
757 
758  </div> 
759 
760  <!-- ===================================================== 
761       BUSCA 
762  ====================================================== --> 
763 
764  <div class="parceiros-busca" role="search"> 
765 
766<label 
767  class="sr-only" 
768  for="busca-parceiros" 
769
770  Pesquisar parceiros por nome ou categoria 
771</label> 
772 
773<svg 
774  aria-hidden="true" 
775  class="parceiros-busca-icone" 
776  fill="none" 
777  viewBox="0 0 24 24" 
778
779  <circle 
780    cx="11" 
781    cy="11" 
782    r="7" 
783    stroke="currentColor" 
784    stroke-width="2" 
785  ></circle> 
786 
787  <path 
788    d="M16 16L21 21" 
789    stroke="currentColor" 
790    stroke-linecap="round" 
791    stroke-width="2" 
792  ></path> 
793</svg> 
794 
795<input 
796  autocomplete="off" 
797  class="parceiros-busca-campo" 
798  id="busca-parceiros" 
799  placeholder="Pesquise por nome do anexo ou categoria" 
800  type="search" 
801/> 
802 
803  </div> 
804 
805  <!-- ===================================================== 
806       GRID DE PARCEIROS 
807  ====================================================== --> 
808 
809  <div class="row" id="grid-parceiros"> 
810 
811<#list Fieldset67243883.getSiblings() as parceiro> 
812 
813  <#assign nome = parceiro.Text51037391.getData()!"" /> 
814  <#assign segmentos = parceiro.CheckboxMultiple15617005.getData()!"" /> 
815  <#assign site = parceiro.Text51612886.getData()!"" /> 
816 
817  <#assign siteUrl = site /> 
818 
819  <#if site?has_content 
820    && !site?starts_with("http://") 
821    && !site?starts_with("https://")> 
822 
823    <#assign siteUrl = "https://" + site /> 
824 
825  </#if> 
826 
827 
828  <div 
829    class="col-sm-6 col-lg-4 col-xl-3 mb-4 parceiro" 
830    data-category="${segmentos?html}" 
831    data-name="${nome?html}" 
832
833 
834    <div class="card-parceiro"> 
835 
836      <!-- LOGO --> 
837      <div class="parceiro-logo"> 
838 
839        <#if parceiro.Image82450298.getData()?? 
840          && parceiro.Image82450298.getData() != ""> 
841 
842          <img 
843            alt="${nome?html}" 
844            class="img-fluid" 
845            loading="lazy" 
846            src="${parceiro.Image82450298.getData()}" 
847          /> 
848 
849        </#if> 
850 
851      </div> 
852 
853 
854      <!-- NOME --> 
855      <h6> 
856        ${nome?html} 
857      </h6> 
858 
859 
860      <!-- SEGMENTOS --> 
861      <p class="parceiro-segmento js-segmento-card"></p> 
862 
863 
864      <!-- AÇÕES --> 
865      <div class="parceiro-acoes"> 
866 
867        <#if site?has_content> 
868 
869          <a 
870            class="btn-parceiro btn-site" 
871            href="${siteUrl?html}" 
872            rel="noopener noreferrer" 
873            target="_blank" 
874
875            Acessar site 
876          </a> 
877 
878        </#if> 
879 
880 
881        <button 
882          class="btn-parceiro btn-saiba btn-modal" 
883          type="button" 
884
885          Saiba mais 
886        </button> 
887 
888      </div> 
889 
890 
891      <!-- ================================================= 
892           DADOS UTILIZADOS PELO MODAL 
893      ================================================== --> 
894 
895      <div 
896        aria-hidden="true" 
897        class="parceiro-dados d-none" 
898
899 
900        <span class="js-nome"> 
901          ${nome?html} 
902        </span> 
903 
904 
905        <span class="js-segmentos"> 
906          ${segmentos?html} 
907        </span> 
908 
909 
910        <div class="js-descricao"> 
911 
912<#if (Fieldset67243883.RichText77766022.getData())??> 
913${Fieldset67243883.RichText77766022.getData()} 
914</#if> 
915</div> 
916 
917        <div class="js-terminais"> 
918 
919<#if (Fieldset67243883.RichText36172897.getData())??> 
920${Fieldset67243883.RichText36172897.getData()} 
921</#if> 
922</div> 
923 
924        <span class="js-email"> 
925          <#if parceiro.Text26526715.getData()??> 
926            ${parceiro.Text26526715.getData()?html} 
927          </#if> 
928        </span> 
929 
930 
931        <span class="js-whatsapp"> 
932          <#if parceiro.Campo12763757.getData()??> 
933            ${parceiro.Campo12763757.getData()?html} 
934          </#if> 
935        </span> 
936 
937 
938        <span class="js-instagram"> 
939          <#if parceiro.Campo47414182.getData()??> 
940            ${parceiro.Campo47414182.getData()?html} 
941          </#if> 
942        </span> 
943 
944 
945        <span class="js-site"> 
946          ${site?html} 
947        </span> 
948 
949      </div> 
950 
951    </div> 
952 
953  </div> 
954 
955</#list> 
956 
957  </div> 
958 
959  <!-- ===================================================== 
960       SEM RESULTADO 
961  ====================================================== --> 
962 
963  <p 
964    aria-live="polite" 
965    class="parceiros-vazio" 
966    hidden 
967    id="parceiros-vazio" 
968    role="status" 
969
970    Nenhum parceiro encontrado. 
971  </p> 
972 
973</div> 
974 
975<!-- ===================================================== 
976     MODAL 
977====================================================== --> 
978 
979<div 
980  aria-labelledby="modalParceiroTitulo" 
981  aria-modal="true" 
982  class="modal-parceiro-sipag" 
983  hidden 
984  id="modalParceiro" 
985  role="dialog" 
986
987 
988  <div class="modal-parceiro-dialog"> 
989 
990<!-- CABEÇALHO --> 
991<div class="modal-parceiro-header"> 
992 
993  <h4 id="modalParceiroTitulo"></h4> 
994 
995  <button 
996    aria-label="Fechar modal" 
997    class="close-modal" 
998    type="button" 
999
1000    &times; 
1001  </button> 
1002 
1003</div> 
1004 
1005 
1006<!-- CORPO --> 
1007<div class="modal-parceiro-body"> 
1008 
1009  <!-- DESCRIÇÃO --> 
1010  <div 
1011    class="modal-bloco" 
1012    id="modalBlocoDescricao" 
1013
1014 
1015    <h6>Descrição</h6> 
1016 
1017    <div id="modalDescricao"></div> 
1018 
1019  </div> 
1020 
1021 
1022  <!-- GRID 2x2 --> 
1023  <div class="modal-detalhes-grid"> 
1024 
1025    <!-- SEGMENTOS --> 
1026    <div 
1027      class="modal-bloco" 
1028      id="modalBlocoSegmentos" 
1029
1030 
1031      <h6>Segmentos atendidos</h6> 
1032 
1033      <div 
1034        class="modal-segmentos" 
1035        id="modalSegmentos" 
1036      ></div> 
1037 
1038    </div> 
1039 
1040 
1041    <!-- TERMINAIS --> 
1042    <div 
1043      class="modal-bloco" 
1044      id="modalBlocoTerminais" 
1045
1046 
1047      <h6>Terminais habilitados</h6> 
1048 
1049      <div id="modalTerminais"></div> 
1050 
1051    </div> 
1052 
1053 
1054    <!-- CONTATO --> 
1055    <div 
1056      class="modal-bloco" 
1057      id="modalBlocoContato" 
1058
1059 
1060      <h6>Informações e contato</h6> 
1061 
1062      <div id="modalContato"></div> 
1063 
1064    </div> 
1065 
1066 
1067    <!-- WEBSITE --> 
1068    <div 
1069      class="modal-bloco" 
1070      id="modalBlocoSite" 
1071
1072 
1073      <h6>Website</h6> 
1074 
1075      <div id="modalSite"></div> 
1076 
1077    </div> 
1078 
1079  </div> 
1080 
1081</div> 
1082 
1083  </div> 
1084 
1085</div> 
1086 
1087  </section> 
1088</div> 
1089 
1090<script> 
1091(function () { 
1092 
1093  var componente = document.getElementById("sipag-parceiros"); 
1094 
1095  if (!componente) { 
1096    return; 
1097
1098 
1099 
1100  if ( 
1101    componente.getAttribute( 
1102      "data-inicializado" 
1103    ) === "true" 
1104  ) { 
1105    return; 
1106
1107 
1108 
1109  componente.setAttribute( 
1110    "data-inicializado", 
1111    "true" 
1112  ); 
1113 
1114 
1115  /* ========================================================= 
1116     ELEMENTOS 
1117  ========================================================= */ 
1118 
1119  var busca = 
1120    componente.querySelector( 
1121      "#busca-parceiros" 
1122    ); 
1123 
1124  var filtrosContainer = 
1125    componente.querySelector( 
1126      "#filtros-parceiros" 
1127    ); 
1128 
1129  var filtrosArea = 
1130    componente.querySelector( 
1131      "#parceiros-filtros-area" 
1132    ); 
1133 
1134  var parceiros = 
1135    componente.querySelectorAll( 
1136      ".parceiro" 
1137    ); 
1138 
1139  var mensagemVazia = 
1140    componente.querySelector( 
1141      "#parceiros-vazio" 
1142    ); 
1143 
1144 
1145  var filtroAtual = "all"; 
1146 
1147 
1148  /* ========================================================= 
1149     NORMALIZA TEXTO 
1150  ========================================================= */ 
1151 
1152  function normalizarTexto(texto) { 
1153 
1154    var valor = 
1155      (texto || "") 
1156        .toString() 
1157        .toLowerCase(); 
1158 
1159 
1160    if (valor.normalize) { 
1161 
1162      valor = valor 
1163        .normalize("NFD") 
1164        .replace( 
1165          /[\u0300-\u036f]/g, 
1166          "" 
1167        ); 
1168 
1169
1170 
1171 
1172    return valor 
1173      .replace( 
1174        /[^a-z0-9]+/g, 
1175        " " 
1176
1177      .trim(); 
1178 
1179
1180 
1181 
1182  /* ========================================================= 
1183     OBTÉM SEGMENTOS 
1184 
1185     Suporta: 
1186     ["varejo","servicos"] 
1187 
1188     varejo,servicos 
1189 
1190     varejo;servicos 
1191  ========================================================= */ 
1192 
1193  function obterSegmentos(valor) { 
1194 
1195    if (!valor) { 
1196      return []; 
1197
1198 
1199 
1200    var texto = 
1201      valor.toString().trim(); 
1202 
1203 
1204    if (!texto) { 
1205      return []; 
1206
1207 
1208 
1209    /* 
1210     * Tenta JSON primeiro. 
1211     */ 
1212    try { 
1213 
1214      var json = 
1215        JSON.parse(texto); 
1216 
1217 
1218      if (Array.isArray(json)) { 
1219 
1220        return json 
1221          .map(function (item) { 
1222 
1223            return item 
1224              .toString() 
1225              .trim(); 
1226 
1227          }) 
1228          .filter(Boolean); 
1229 
1230
1231 
1232    } catch (erro) { 
1233      /* segue normalmente */ 
1234
1235 
1236 
1237    texto = texto 
1238      .replace(/^\[/, "") 
1239      .replace(/\]$/, "") 
1240      .replace(/"/g, "") 
1241      .replace(/'/g, ""); 
1242 
1243 
1244    return texto 
1245      .split(/[,;|]+/) 
1246      .map(function (item) { 
1247 
1248        return item.trim(); 
1249 
1250      }) 
1251      .filter(Boolean); 
1252 
1253
1254 
1255 
1256  /* ========================================================= 
1257     CHAVE CANÔNICA DO SEGMENTO 
1258  ========================================================= */ 
1259 
1260  function obterChaveSegmento(segmento) { 
1261 
1262    var chave = 
1263      normalizarTexto(segmento); 
1264 
1265 
1266    if ( 
1267      chave.indexOf("alimentacao") !== -1 || 
1268      chave.indexOf("bares restaurantes") !== -1 
1269    ) { 
1270      return "alimentacao"; 
1271
1272 
1273    if (chave.indexOf("evento") !== -1) { 
1274      return "eventos"; 
1275
1276 
1277    if (chave.indexOf("industr") !== -1) { 
1278      return "industria"; 
1279
1280 
1281    if ( 
1282      chave.indexOf("posto") !== -1 && 
1283      chave.indexOf("combust") !== -1 
1284    ) { 
1285      return "postos"; 
1286
1287 
1288    if (chave.indexOf("saude") !== -1) { 
1289      return "saude"; 
1290
1291 
1292    if (chave.indexOf("servico") !== -1) { 
1293      return "servicos"; 
1294
1295 
1296    if (chave.indexOf("varejo") !== -1) { 
1297      return "varejo"; 
1298
1299 
1300 
1301    return chave; 
1302 
1303
1304 
1305 
1306  /* ========================================================= 
1307     LABEL DO FILTRO 
1308  ========================================================= */ 
1309 
1310  function obterLabelFiltroSegmento(chave, segmentoOriginal) { 
1311 
1312    var labels = { 
1313      "alimentacao": "ALIMENTAÇÃO", 
1314      "eventos": "EVENTOS", 
1315      "industria": "INDÚSTRIA", 
1316      "postos": "POSTOS DE COMBUSTÍVEIS", 
1317      "saude": "SAÚDE", 
1318      "servicos": "SERVIÇOS", 
1319      "varejo": "VAREJO" 
1320    }; 
1321 
1322 
1323    if (labels[chave]) { 
1324      return labels[chave]; 
1325
1326 
1327 
1328    return (segmentoOriginal || "") 
1329      .toString() 
1330      .trim() 
1331      .toUpperCase(); 
1332 
1333
1334 
1335 
1336  /* ========================================================= 
1337     NOME VISUAL DO SEGMENTO NO CARD / MODAL 
1338  ========================================================= */ 
1339 
1340  function obterLabelSegmento(segmento) { 
1341 
1342    var chave = 
1343      normalizarTexto(segmento); 
1344 
1345 
1346    var labels = { 
1347      "alimentacao": "Alimentação (Bares, Restaurantes e Lanchonetes)", 
1348      "alimentacao bares restaurantes e lanchonetes": 
1349        "Alimentação (Bares, Restaurantes e Lanchonetes)", 
1350      "bares restaurantes e lanchonetes": 
1351        "Alimentação (Bares, Restaurantes e Lanchonetes)", 
1352      "eventos": "Eventos", 
1353      "industria": "Indústria", 
1354			"posto": "Postos de Combustíveis", 
1355      "postos": "Postos de Combustíveis", 
1356      "posto de combustivel": "Postos de Combustíveis", 
1357      "postos de combustivel": "Postos de Combustíveis", 
1358      "postos de combustiveis": "Postos de Combustíveis", 
1359      "saude": "Saúde", 
1360      "servicos": "Serviços", 
1361      "varejo": "Varejo" 
1362    }; 
1363 
1364 
1365    if (labels[chave]) { 
1366      return labels[chave]; 
1367
1368 
1369 
1370    return segmento 
1371      .toString() 
1372      .trim(); 
1373 
1374
1375 
1376 
1377  /* ========================================================= 
1378     FORMATA OS SEGMENTOS NOS CARDS 
1379  ========================================================= */ 
1380 
1381  function formatarListaSegmentos(lista) { 
1382 
1383    if (!lista.length) { 
1384      return ""; 
1385
1386 
1387    if (lista.length === 1) { 
1388      return lista[0]; 
1389
1390 
1391    if (lista.length === 2) { 
1392      return lista[0] + " e " + lista[1]; 
1393
1394 
1395 
1396    return ( 
1397      lista.slice(0, -1).join(", ") + 
1398      " e " + 
1399      lista[lista.length - 1] 
1400    ); 
1401 
1402
1403 
1404 
1405  function formatarSegmentosCards() { 
1406 
1407    parceiros.forEach( 
1408      function (parceiro) { 
1409 
1410        var campo = 
1411          parceiro.querySelector( 
1412            ".js-segmento-card" 
1413          ); 
1414 
1415 
1416        if (!campo) { 
1417          return; 
1418
1419 
1420 
1421        var segmentos = 
1422          obterSegmentos( 
1423            parceiro.getAttribute( 
1424              "data-category" 
1425
1426          ); 
1427 
1428 
1429        var labels = 
1430          segmentos.map(function (segmento) { 
1431 
1432            return obterLabelSegmento( 
1433              segmento 
1434            ); 
1435 
1436          }); 
1437 
1438 
1439        campo.textContent = 
1440          formatarListaSegmentos(labels); 
1441 
1442
1443    ); 
1444 
1445
1446 
1447 
1448  /* ========================================================= 
1449     CRIAR FILTROS AUTOMATICAMENTE 
1450 
1451     SOMENTE SEGMENTOS USADOS 
1452  ========================================================= */ 
1453 
1454  function gerarFiltros() { 
1455 
1456    if (!filtrosContainer) { 
1457      return; 
1458
1459 
1460 
1461    var segmentosUsados = {}; 
1462 
1463 
1464    parceiros.forEach( 
1465      function (parceiro) { 
1466 
1467        var categorias = 
1468          obterSegmentos( 
1469            parceiro.getAttribute( 
1470              "data-category" 
1471
1472          ); 
1473 
1474 
1475        categorias.forEach( 
1476          function (categoria) { 
1477 
1478            var chave = 
1479              obterChaveSegmento( 
1480                categoria 
1481              ); 
1482 
1483 
1484            if (!chave) { 
1485              return; 
1486
1487 
1488 
1489            if ( 
1490              !segmentosUsados[chave] 
1491            ) { 
1492 
1493              segmentosUsados[chave] = { 
1494                chave: chave, 
1495                valor: categoria, 
1496                label: 
1497                  obterLabelFiltroSegmento( 
1498                    chave, 
1499                    categoria 
1500
1501              }; 
1502 
1503
1504 
1505
1506        ); 
1507 
1508
1509    ); 
1510 
1511 
1512    while ( 
1513      filtrosContainer.firstChild 
1514    ) { 
1515 
1516      filtrosContainer.removeChild( 
1517        filtrosContainer.firstChild 
1518      ); 
1519 
1520
1521 
1522 
1523    var segmentos = 
1524      Object.keys( 
1525        segmentosUsados 
1526
1527      .map(function (chave) { 
1528 
1529        return segmentosUsados[ 
1530          chave 
1531        ]; 
1532 
1533      }); 
1534 
1535 
1536    if (!segmentos.length) { 
1537 
1538      if (filtrosArea) { 
1539 
1540        filtrosArea.style.display = 
1541          "none"; 
1542 
1543
1544 
1545      return; 
1546 
1547
1548 
1549 
1550    if (filtrosArea) { 
1551 
1552      filtrosArea.style.display = ""; 
1553 
1554
1555 
1556 
1557    /* TODOS */ 
1558    var botaoTodos = 
1559      document.createElement( 
1560        "button" 
1561      ); 
1562 
1563 
1564    botaoTodos.type = "button"; 
1565 
1566    botaoTodos.className = 
1567      "btn btn-pill active"; 
1568 
1569    botaoTodos.setAttribute( 
1570      "data-filter", 
1571      "all" 
1572    ); 
1573 
1574    botaoTodos.setAttribute( 
1575      "aria-pressed", 
1576      "true" 
1577    ); 
1578 
1579 
1580    botaoTodos.appendChild( 
1581      document.createTextNode( 
1582        "TODOS OS SEGMENTOS" 
1583
1584    ); 
1585 
1586 
1587    filtrosContainer.appendChild( 
1588      botaoTodos 
1589    ); 
1590 
1591 
1592    /* ORDEM ALFABÉTICA */ 
1593    segmentos.sort( 
1594      function (a, b) { 
1595 
1596        return a.label.localeCompare( 
1597          b.label, 
1598          "pt-BR" 
1599        ); 
1600 
1601
1602    ); 
1603 
1604 
1605    /* CRIA SOMENTE OS USADOS */ 
1606    segmentos.forEach( 
1607      function (segmento) { 
1608 
1609        var botao = 
1610          document.createElement( 
1611            "button" 
1612          ); 
1613 
1614 
1615        botao.type = "button"; 
1616 
1617        botao.className = 
1618          "btn btn-pill"; 
1619 
1620        botao.setAttribute( 
1621          "data-filter", 
1622          segmento.chave 
1623        ); 
1624 
1625        botao.setAttribute( 
1626          "aria-pressed", 
1627          "false" 
1628        ); 
1629 
1630 
1631        botao.appendChild( 
1632          document.createTextNode( 
1633            segmento.label 
1634
1635        ); 
1636 
1637 
1638        filtrosContainer.appendChild( 
1639          botao 
1640        ); 
1641 
1642
1643    ); 
1644 
1645
1646 
1647 
1648  /* ========================================================= 
1649     FILTRAR PARCEIROS 
1650  ========================================================= */ 
1651 
1652  function filtrarParceiros() { 
1653 
1654    var termo = 
1655      normalizarTexto( 
1656        busca ? 
1657          busca.value : 
1658          "" 
1659      ); 
1660 
1661 
1662    var quantidadeVisivel = 0; 
1663 
1664 
1665    parceiros.forEach( 
1666      function (parceiro) { 
1667 
1668        var nome = 
1669          normalizarTexto( 
1670            parceiro.getAttribute( 
1671              "data-name" 
1672
1673          ); 
1674 
1675 
1676        var segmentos = 
1677          obterSegmentos( 
1678            parceiro.getAttribute( 
1679              "data-category" 
1680
1681          ); 
1682 
1683 
1684        var categoriasNormalizadas = 
1685          segmentos.map( 
1686            function (item) { 
1687 
1688              return obterChaveSegmento( 
1689                item 
1690              ); 
1691 
1692
1693          ); 
1694 
1695 
1696        var textoCategorias = 
1697          segmentos 
1698            .map(function (item) { 
1699 
1700              return normalizarTexto( 
1701                item + " " + 
1702                obterLabelSegmento(item) 
1703              ); 
1704 
1705            }) 
1706            .join(" "); 
1707 
1708 
1709        /* BUSCA */ 
1710        var atendeBusca = 
1711          !termo || 
1712          nome.indexOf(termo) !== -1 || 
1713          textoCategorias.indexOf( 
1714            termo 
1715          ) !== -1; 
1716 
1717 
1718        /* FILTRO */ 
1719        var atendeFiltro = 
1720          filtroAtual === "all" || 
1721          categoriasNormalizadas 
1722            .indexOf( 
1723              filtroAtual 
1724            ) !== -1; 
1725 
1726 
1727        var exibir = 
1728          atendeBusca && 
1729          atendeFiltro; 
1730 
1731 
1732        parceiro.style.display = 
1733          exibir ? "" : "none"; 
1734 
1735 
1736        if (exibir) { 
1737          quantidadeVisivel++; 
1738
1739 
1740
1741    ); 
1742 
1743 
1744    if (mensagemVazia) { 
1745 
1746      mensagemVazia.hidden = 
1747        quantidadeVisivel !== 0; 
1748 
1749
1750 
1751
1752 
1753 
1754  /* ========================================================= 
1755     EVENTO FILTROS 
1756  ========================================================= */ 
1757 
1758  if (filtrosContainer) { 
1759 
1760    filtrosContainer.addEventListener( 
1761      "click", 
1762      function (event) { 
1763 
1764        var botao = 
1765          event.target.closest( 
1766            ".btn-pill[data-filter]" 
1767          ); 
1768 
1769 
1770        if (!botao) { 
1771          return; 
1772
1773 
1774 
1775        filtroAtual = 
1776          botao.getAttribute( 
1777            "data-filter" 
1778          ) || "all"; 
1779 
1780 
1781        var botoes = 
1782          filtrosContainer 
1783            .querySelectorAll( 
1784              ".btn-pill" 
1785            ); 
1786 
1787 
1788        botoes.forEach( 
1789          function (item) { 
1790 
1791            item.classList.remove( 
1792              "active" 
1793            ); 
1794 
1795            item.setAttribute( 
1796              "aria-pressed", 
1797              "false" 
1798            ); 
1799 
1800
1801        ); 
1802 
1803 
1804        botao.classList.add( 
1805          "active" 
1806        ); 
1807 
1808        botao.setAttribute( 
1809          "aria-pressed", 
1810          "true" 
1811        ); 
1812 
1813 
1814        filtrarParceiros(); 
1815 
1816
1817    ); 
1818 
1819
1820 
1821 
1822  /* ========================================================= 
1823     EVENTO BUSCA 
1824  ========================================================= */ 
1825 
1826  if (busca) { 
1827 
1828    busca.addEventListener( 
1829      "input", 
1830      filtrarParceiros 
1831    ); 
1832 
1833
1834 
1835 
1836  /* ========================================================= 
1837     ELEMENTOS MODAL 
1838  ========================================================= */ 
1839 
1840  var modal = 
1841    componente.querySelector( 
1842      "#modalParceiro" 
1843    ); 
1844 
1845  var tituloModal = 
1846    componente.querySelector( 
1847      "#modalParceiroTitulo" 
1848    ); 
1849 
1850  var modalDescricao = 
1851    componente.querySelector( 
1852      "#modalDescricao" 
1853    ); 
1854 
1855  var modalSegmentos = 
1856    componente.querySelector( 
1857      "#modalSegmentos" 
1858    ); 
1859 
1860  var modalTerminais = 
1861    componente.querySelector( 
1862      "#modalTerminais" 
1863    ); 
1864 
1865  var modalContato = 
1866    componente.querySelector( 
1867      "#modalContato" 
1868    ); 
1869 
1870  var modalSite = 
1871    componente.querySelector( 
1872      "#modalSite" 
1873    ); 
1874 
1875 
1876  var blocoDescricao = 
1877    componente.querySelector( 
1878      "#modalBlocoDescricao" 
1879    ); 
1880 
1881  var blocoSegmentos = 
1882    componente.querySelector( 
1883      "#modalBlocoSegmentos" 
1884    ); 
1885 
1886  var blocoTerminais = 
1887    componente.querySelector( 
1888      "#modalBlocoTerminais" 
1889    ); 
1890 
1891  var blocoContato = 
1892    componente.querySelector( 
1893      "#modalBlocoContato" 
1894    ); 
1895 
1896  var blocoSite = 
1897    componente.querySelector( 
1898      "#modalBlocoSite" 
1899    ); 
1900 
1901 
1902  var elementoFocoAnterior = null; 
1903  var overflowAnterior = ""; 
1904 
1905 
1906  /* ========================================================= 
1907     LIMPAR ELEMENTO 
1908  ========================================================= */ 
1909 
1910  function limparElemento(elemento) { 
1911 
1912    if (!elemento) { 
1913      return; 
1914
1915 
1916 
1917    while (elemento.firstChild) { 
1918 
1919      elemento.removeChild( 
1920        elemento.firstChild 
1921      ); 
1922 
1923
1924 
1925
1926 
1927 
1928  /* ========================================================= 
1929     COPIA RICH TEXT 
1930 
1931     NÃO USA innerHTML 
1932  ========================================================= */ 
1933 
1934  function copiarConteudo( 
1935    origem, 
1936    destino 
1937  ) { 
1938 
1939    limparElemento(destino); 
1940 
1941 
1942    if ( 
1943      !origem || 
1944      !destino 
1945    ) { 
1946      return false; 
1947
1948 
1949 
1950    var possuiConteudo = 
1951      origem.textContent.trim() !== "" || 
1952      origem.children.length > 0; 
1953 
1954 
1955    if (!possuiConteudo) { 
1956      return false; 
1957
1958 
1959 
1960    Array.prototype.slice 
1961      .call( 
1962        origem.childNodes 
1963
1964      .forEach( 
1965        function (node) { 
1966 
1967          destino.appendChild( 
1968            node.cloneNode(true) 
1969          ); 
1970 
1971
1972      ); 
1973 
1974 
1975    return true; 
1976 
1977
1978 
1979 
1980  /* ========================================================= 
1981     CRIAR LINK 
1982  ========================================================= */ 
1983 
1984  function criarLink( 
1985    texto, 
1986    href, 
1987    target 
1988  ) { 
1989 
1990    var link = 
1991      document.createElement("a"); 
1992 
1993 
1994    link.href = href; 
1995 
1996 
1997    link.appendChild( 
1998      document.createTextNode( 
1999        texto 
2000
2001    ); 
2002 
2003 
2004    if (target) { 
2005 
2006      link.target = target; 
2007 
2008      link.rel = 
2009        "noopener noreferrer"; 
2010 
2011
2012 
2013 
2014    return link; 
2015 
2016
2017 
2018 
2019  /* ========================================================= 
2020     URL WHATSAPP 
2021  ========================================================= */ 
2022 
2023  function criarUrlWhatsApp( 
2024    numero 
2025  ) { 
2026 
2027    var numeroLimpo = 
2028      (numero || "") 
2029        .replace(/\D/g, ""); 
2030 
2031 
2032    if (!numeroLimpo) { 
2033      return ""; 
2034
2035 
2036 
2037    if ( 
2038      numeroLimpo.indexOf("55") !== 0 
2039    ) { 
2040 
2041      numeroLimpo = 
2042        "55" + numeroLimpo; 
2043 
2044
2045 
2046 
2047    return ( 
2048      "https://wa.me/" + 
2049      numeroLimpo 
2050    ); 
2051 
2052
2053 
2054 
2055  /* ========================================================= 
2056     URL INSTAGRAM 
2057  ========================================================= */ 
2058 
2059  function criarUrlInstagram( 
2060    instagram 
2061  ) { 
2062 
2063    var valor = 
2064      (instagram || "") 
2065        .trim(); 
2066 
2067 
2068    if (!valor) { 
2069      return ""; 
2070
2071 
2072 
2073    if ( 
2074      valor.indexOf( 
2075        "http://" 
2076      ) === 0 || 
2077      valor.indexOf( 
2078        "https://" 
2079      ) === 0 
2080    ) { 
2081 
2082      return valor; 
2083 
2084
2085 
2086 
2087    valor = valor 
2088      .replace(/^@/, "") 
2089      .replace(/^www\./, "") 
2090      .replace( 
2091        /^instagram\.com\//, 
2092        "" 
2093      ); 
2094 
2095 
2096    return ( 
2097      "https://instagram.com/" + 
2098      valor 
2099    ); 
2100 
2101
2102 
2103 
2104  /* ========================================================= 
2105     URL SITE 
2106  ========================================================= */ 
2107 
2108  function criarUrlSite(site) { 
2109 
2110    var valor = 
2111      (site || "").trim(); 
2112 
2113 
2114    if (!valor) { 
2115      return ""; 
2116
2117 
2118 
2119    if ( 
2120      valor.indexOf( 
2121        "http://" 
2122      ) === 0 || 
2123      valor.indexOf( 
2124        "https://" 
2125      ) === 0 
2126    ) { 
2127 
2128      return valor; 
2129 
2130
2131 
2132 
2133    return ( 
2134      "https://" + valor 
2135    ); 
2136 
2137
2138 
2139 
2140  /* ========================================================= 
2141     ADICIONAR CONTATO 
2142  ========================================================= */ 
2143 
2144  function adicionarContato( 
2145    titulo, 
2146    texto, 
2147    href, 
2148    novaAba 
2149  ) { 
2150 
2151    if (!texto) { 
2152      return false; 
2153
2154 
2155 
2156    var p = 
2157      document.createElement("p"); 
2158 
2159 
2160    p.appendChild( 
2161      document.createTextNode( 
2162        titulo + ": " 
2163
2164    ); 
2165 
2166 
2167    if (href) { 
2168 
2169      p.appendChild( 
2170        criarLink( 
2171          texto, 
2172          href, 
2173          novaAba ? 
2174            "_blank" : 
2175            "" 
2176
2177      ); 
2178 
2179    } else { 
2180 
2181      p.appendChild( 
2182        document.createTextNode( 
2183          texto 
2184
2185      ); 
2186 
2187
2188 
2189 
2190    modalContato.appendChild(p); 
2191 
2192 
2193    return true; 
2194 
2195
2196 
2197 
2198  /* ========================================================= 
2199     SEGMENTOS DO MODAL 
2200  ========================================================= */ 
2201 
2202  function montarSegmentosModal( 
2203    valor 
2204  ) { 
2205 
2206    limparElemento( 
2207      modalSegmentos 
2208    ); 
2209 
2210 
2211    var segmentos = 
2212      obterSegmentos(valor); 
2213 
2214 
2215    if (!segmentos.length) { 
2216      return false; 
2217
2218 
2219 
2220    segmentos.forEach( 
2221      function (segmento) { 
2222 
2223        var span = 
2224          document.createElement( 
2225            "span" 
2226          ); 
2227 
2228 
2229        span.className = 
2230          "modal-segmento-tag"; 
2231 
2232 
2233        span.appendChild( 
2234          document.createTextNode( 
2235            obterLabelSegmento( 
2236              segmento 
2237
2238
2239        ); 
2240 
2241 
2242        modalSegmentos 
2243          .appendChild(span); 
2244 
2245
2246    ); 
2247 
2248 
2249    return true; 
2250 
2251
2252 
2253 
2254  /* ========================================================= 
2255     ABRIR MODAL 
2256  ========================================================= */ 
2257 
2258  function abrirModal(botao) { 
2259 
2260    if (!modal) { 
2261      return; 
2262
2263 
2264 
2265    var parceiro = 
2266      botao.closest( 
2267        ".parceiro" 
2268      ); 
2269 
2270 
2271    if (!parceiro) { 
2272      return; 
2273
2274 
2275 
2276    var dados = 
2277      parceiro.querySelector( 
2278        ".parceiro-dados" 
2279      ); 
2280 
2281 
2282    if (!dados) { 
2283      return; 
2284
2285 
2286 
2287    /* ====================== 
2288       NOME 
2289    ====================== */ 
2290 
2291    var nome = 
2292      dados.querySelector( 
2293        ".js-nome" 
2294      ); 
2295 
2296 
2297    tituloModal.textContent = 
2298      nome ? 
2299        nome.textContent.trim() : 
2300        ""; 
2301 
2302 
2303    /* ====================== 
2304       DESCRIÇÃO 
2305    ====================== */ 
2306 
2307    var descricao = 
2308      dados.querySelector( 
2309        ".js-descricao" 
2310      ); 
2311 
2312 
2313    blocoDescricao.hidden = 
2314      !copiarConteudo( 
2315        descricao, 
2316        modalDescricao 
2317      ); 
2318 
2319 
2320    /* ====================== 
2321       SEGMENTOS 
2322    ====================== */ 
2323 
2324    var segmentos = 
2325      dados.querySelector( 
2326        ".js-segmentos" 
2327      ); 
2328 
2329 
2330    blocoSegmentos.hidden = 
2331      !montarSegmentosModal( 
2332        segmentos ? 
2333          segmentos 
2334            .textContent 
2335            .trim() : 
2336          "" 
2337      ); 
2338 
2339 
2340    /* ====================== 
2341       TERMINAIS 
2342    ====================== */ 
2343 
2344    var terminais = 
2345      dados.querySelector( 
2346        ".js-terminais" 
2347      ); 
2348 
2349 
2350    blocoTerminais.hidden = 
2351      !copiarConteudo( 
2352        terminais, 
2353        modalTerminais 
2354      ); 
2355 
2356 
2357    /* ====================== 
2358       CONTATO 
2359    ====================== */ 
2360 
2361    limparElemento( 
2362      modalContato 
2363    ); 
2364 
2365 
2366    var emailElemento = 
2367      dados.querySelector( 
2368        ".js-email" 
2369      ); 
2370 
2371    var whatsappElemento = 
2372      dados.querySelector( 
2373        ".js-whatsapp" 
2374      ); 
2375 
2376    var instagramElemento = 
2377      dados.querySelector( 
2378        ".js-instagram" 
2379      ); 
2380 
2381 
2382    var email = 
2383      emailElemento ? 
2384        emailElemento 
2385          .textContent 
2386          .trim() : 
2387        ""; 
2388 
2389 
2390    var whatsapp = 
2391      whatsappElemento ? 
2392        whatsappElemento 
2393          .textContent 
2394          .trim() : 
2395        ""; 
2396 
2397 
2398    var instagram = 
2399      instagramElemento ? 
2400        instagramElemento 
2401          .textContent 
2402          .trim() : 
2403        ""; 
2404 
2405 
2406    var possuiContato = false; 
2407 
2408 
2409    if (email) { 
2410 
2411      possuiContato = 
2412        adicionarContato( 
2413          "E-mail", 
2414          email, 
2415          "mailto:" + email, 
2416          false 
2417        ) || 
2418        possuiContato; 
2419 
2420
2421 
2422 
2423    if (whatsapp) { 
2424 
2425      possuiContato = 
2426        adicionarContato( 
2427          "WhatsApp", 
2428          whatsapp, 
2429          criarUrlWhatsApp( 
2430            whatsapp 
2431          ), 
2432          true 
2433        ) || 
2434        possuiContato; 
2435 
2436
2437 
2438 
2439    if (instagram) { 
2440 
2441      var instagramLabel = 
2442        instagram; 
2443 
2444 
2445      if ( 
2446        instagramLabel.indexOf( 
2447          "http" 
2448        ) !== 0 && 
2449        instagramLabel.charAt(0) 
2450          !== "@" 
2451      ) { 
2452 
2453        instagramLabel = 
2454          "@" + 
2455          instagramLabel; 
2456 
2457
2458 
2459 
2460      possuiContato = 
2461        adicionarContato( 
2462          "Instagram", 
2463          instagramLabel, 
2464          criarUrlInstagram( 
2465            instagram 
2466          ), 
2467          true 
2468        ) || 
2469        possuiContato; 
2470 
2471
2472 
2473 
2474    blocoContato.hidden = 
2475      !possuiContato; 
2476 
2477 
2478    /* ====================== 
2479       SITE 
2480    ====================== */ 
2481 
2482    limparElemento( 
2483      modalSite 
2484    ); 
2485 
2486 
2487    var siteElemento = 
2488      dados.querySelector( 
2489        ".js-site" 
2490      ); 
2491 
2492 
2493    var site = 
2494      siteElemento ? 
2495        siteElemento 
2496          .textContent 
2497          .trim() : 
2498        ""; 
2499 
2500 
2501    if (site) { 
2502 
2503      modalSite.appendChild( 
2504        criarLink( 
2505          site, 
2506          criarUrlSite(site), 
2507          "_blank" 
2508
2509      ); 
2510 
2511 
2512      blocoSite.hidden = false; 
2513 
2514    } else { 
2515 
2516      blocoSite.hidden = true; 
2517 
2518
2519 
2520 
2521    /* ====================== 
2522       ABRIR 
2523    ====================== */ 
2524 
2525    elementoFocoAnterior = 
2526      document.activeElement; 
2527 
2528 
2529    overflowAnterior = 
2530      document.body.style 
2531        .overflow; 
2532 
2533 
2534    modal.hidden = false; 
2535 
2536 
2537    document.body.style 
2538      .overflow = "hidden"; 
2539 
2540 
2541    var fechar = 
2542      modal.querySelector( 
2543        ".close-modal" 
2544      ); 
2545 
2546 
2547    if (fechar) { 
2548      fechar.focus(); 
2549
2550 
2551
2552 
2553 
2554  /* ========================================================= 
2555     FECHAR MODAL 
2556  ========================================================= */ 
2557 
2558  function fecharModal() { 
2559 
2560    if ( 
2561      !modal || 
2562      modal.hidden 
2563    ) { 
2564      return; 
2565
2566 
2567 
2568    modal.hidden = true; 
2569 
2570 
2571    document.body.style 
2572      .overflow = 
2573        overflowAnterior; 
2574 
2575 
2576    if ( 
2577      elementoFocoAnterior && 
2578      typeof elementoFocoAnterior 
2579        .focus === "function" 
2580    ) { 
2581 
2582      elementoFocoAnterior 
2583        .focus(); 
2584 
2585
2586 
2587
2588 
2589 
2590  /* ========================================================= 
2591     CLIQUES 
2592  ========================================================= */ 
2593 
2594  componente.addEventListener( 
2595    "click", 
2596    function (event) { 
2597 
2598      var botaoModal = 
2599        event.target.closest( 
2600          ".btn-modal" 
2601        ); 
2602 
2603 
2604      if (botaoModal) { 
2605 
2606        event.preventDefault(); 
2607 
2608        abrirModal( 
2609          botaoModal 
2610        ); 
2611 
2612        return; 
2613 
2614
2615 
2616 
2617      var fechar = 
2618        event.target.closest( 
2619          ".close-modal" 
2620        ); 
2621 
2622 
2623      if (fechar) { 
2624 
2625        event.preventDefault(); 
2626 
2627        fecharModal(); 
2628 
2629        return; 
2630 
2631
2632 
2633 
2634      /* 
2635       * Fecha clicando no fundo 
2636       */ 
2637      if ( 
2638        modal && 
2639        event.target === modal 
2640      ) { 
2641 
2642        fecharModal(); 
2643 
2644
2645 
2646
2647  ); 
2648 
2649 
2650  /* ========================================================= 
2651     ESC 
2652  ========================================================= */ 
2653 
2654  document.addEventListener( 
2655    "keydown", 
2656    function (event) { 
2657 
2658      if ( 
2659        event.key === "Escape" && 
2660        modal && 
2661        !modal.hidden 
2662      ) { 
2663 
2664        fecharModal(); 
2665 
2666
2667 
2668
2669  ); 
2670 
2671 
2672  /* ========================================================= 
2673     INICIALIZAÇÃO 
2674  ========================================================= */ 
2675 
2676  formatarSegmentosCards(); 
2677 
2678  gerarFiltros(); 
2679 
2680  filtrarParceiros(); 
2681 
2682})(); 
2683</script>